Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3468736imu; Mon, 10 Dec 2018 02:45:00 -0800 (PST) X-Google-Smtp-Source: AFSGD/Wh5TR9/oAathqedScbWAa3Q404Qln1eF3LCj0TFBiG2Sbhb3cHD1SEEFtO4SluPmY3NUSS X-Received: by 2002:a63:bd1a:: with SMTP id a26mr10282743pgf.121.1544438700204; Mon, 10 Dec 2018 02:45:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544438700; cv=none; d=google.com; s=arc-20160816; b=aRF4QGftzv8thbxlOHPL+osmJEbpO8V4dSN5Je/7qTx1TwH5sl+YMj6CsWV+EbRQcS ExIIw4W1XIKnx7RkgTaf21kX6kHQgJw681cBlN0I9oM1SMh35/I2isGLXZtkqcoCrdsZ ZWHjQi62MFOkI9HVn43GffTYHH8Uvor74unHiWJUhiMvUIYMXaK18Sk5kleOXroOZBhc 9NlQ2mEKdvuAIexk0DCWT3zaY3ypJ7cDsDpu4ICA0/PaAqoze72zJ0kdYy2ctab2ZVKQ 2sz/9W1+U6zsk6meR/mNerHPp7dT9vTsdTRE4SfSOCGD9x/mXz3EogLZdhu6s+j/TUhP xLcw== 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 :spamdiagnosticmetadata:spamdiagnosticoutput:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature; bh=e9Fk83c6IcgdB6QXgUkgKyM6Iw742TFrl08Y2IAcGL4=; b=ymDBmN98rap4hJTe61xRDSHX9snBPhji9yHWrBFs+FSsn/wPEaNWu7gMi8kXIY8eHj D8oBlLV3smy9xpXIPhyxsMLtQ5hEqvMV4IQ+YJaK+9AUcidGjtf+449SU74t+EyvXJVG lmt1OMYSG4YgZFSc043gZghzW7hUYdaet5cK8Ow24VHhlpNpWiBYkkNipsCQA8fiN7me KzR8Af1X4BZjabRgVdt57d1VoZcb8/5yl5LTq3enmOmSvUPH2OG+kC2W71ogO0T4gQAa gVYw/dNbfwC/CMpkjZp/j5PknHKfPvo2nxrjurFC39sFmAYD7s6H7FuE97p7g1OYSDWT zx4g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=o0B2flXb; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e4si10084097plk.260.2018.12.10.02.44.45; Mon, 10 Dec 2018 02:45:00 -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=@nxp.com header.s=selector1 header.b=o0B2flXb; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726814AbeLJKoK (ORCPT + 99 others); Mon, 10 Dec 2018 05:44:10 -0500 Received: from mail-eopbgr30074.outbound.protection.outlook.com ([40.107.3.74]:60480 "EHLO EUR03-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726209AbeLJKoJ (ORCPT ); Mon, 10 Dec 2018 05:44:09 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e9Fk83c6IcgdB6QXgUkgKyM6Iw742TFrl08Y2IAcGL4=; b=o0B2flXbfkkVqF+FgXl1V4l+Nmit60IKt5W2JYr+8VdUHuDVj5152cMOV6eZ9JFe5qzmS9HnDAWIZv47WvuvEWs3JYR5b+/UmjM9C4VhT1J575aVgrrmaOgR/wyziZyweLcd21gia6g45o55ITqq7AtquzGMOYK0G8OX2ljbdFY= Received: from VI1PR04MB5726.eurprd04.prod.outlook.com (20.178.127.24) by VI1PR04MB5600.eurprd04.prod.outlook.com (20.178.125.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1404.22; Mon, 10 Dec 2018 10:43:57 +0000 Received: from VI1PR04MB5726.eurprd04.prod.outlook.com ([fe80::595a:9890:8397:5d51]) by VI1PR04MB5726.eurprd04.prod.outlook.com ([fe80::595a:9890:8397:5d51%4]) with mapi id 15.20.1404.026; Mon, 10 Dec 2018 10:43:56 +0000 From: Yogesh Narayan Gaur To: Boris Brezillon CC: Schrempf Frieder , "linux-mtd@lists.infradead.org" , "marek.vasut@gmail.com" , "broonie@kernel.org" , "linux-spi@vger.kernel.org" , "devicetree@vger.kernel.org" , "robh@kernel.org" , "mark.rutland@arm.com" , "shawnguo@kernel.org" , "linux-arm-kernel@lists.infradead.org" , "computersforpeace@gmail.com" , "linux-kernel@vger.kernel.org" Subject: RE: [PATCH v5 1/5] spi: spi-mem: Add driver for NXP FlexSPI controller Thread-Topic: [PATCH v5 1/5] spi: spi-mem: Add driver for NXP FlexSPI controller Thread-Index: AQHUfZ10PwLsFrd7X0a81BAspcUxiKVxj0sAgAZCwzCAABZKgIAAALyg Date: Mon, 10 Dec 2018 10:43:56 +0000 Message-ID: References: <1542366701-16065-1-git-send-email-yogeshnarayan.gaur@nxp.com> <1542366701-16065-2-git-send-email-yogeshnarayan.gaur@nxp.com> <20181210111909.35384eee@bbrezillon> In-Reply-To: <20181210111909.35384eee@bbrezillon> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=yogeshnarayan.gaur@nxp.com; x-originating-ip: [14.142.187.166] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;VI1PR04MB5600;6:5DZlwZoq2En341oo+3WeZfxHlZL0UPcDpS7KmXr6U6TZHT3BiZMFZHgakQ2e+tqllQLhGnnY10zTllp0Vn9dr6YjvjbG46lMA26MlHeZ27fvGGVQCyDd07OU/58XNC0uhZ4YiCXPRO3VQwbYderXI3vgAEIXWaSW2pgShWmoidtx2ZxiAdPPG1G/s+iPEmLZtEgsbhZJJPVih2eZvM0mfKBBGGf04ch2MWDOyix9VJUwfw1tGh059+0Z1TxiFsPtpIhr700k45KleeT44/a2yE8spppaJqwUucO+qeA4OiqqB8vSEBFSHKVMujUWDV62opme31tYcPfUpjtSqCbpBd3A8eQ/aWDHxMUeLyylcQdvGcl4RHmX7+sLdvIBFPeKqJFIqwpSVVi3qEPV8y3Iq3TSkdM5rvJUgTJH+Ngu74KzkPnCNOkw+vaMXHPOBmy2xa1GpURV0O4K98kNgF8oPg==;5:kykwFonBfCkSUhXmnv6rg5UZ2yAjBEqu+uFg8fwCXOuChWjHh6UNY6YBzeW9qoCdIghkNgVL+8x3HYwtHFq3CRI2eCE1YCW37Ir1mWKvEX+44zTeakMOwMUPaplhMhTAs5L2vFqfKJKDRw4RBZAC0JkJqeCRZDugJf1Ddifp5TQ=;7:CbuHpESsXE5CsyJMDZkvBx2cB13DYSZ/NE5R4xvPK8I4rGscTq7K6PzfV5iMS0DFHX6fBlrpnZR54FttDI6t6Of94BAiWlMcdbrLvxfUiBjGun5Z8XMPCwKa71a23N29k1QbyflHCDgonZDI58effw== x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: e0a5ea6a-de94-4ff7-39b2-08d65e8c6303 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020);SRVR:VI1PR04MB5600; x-ms-traffictypediagnostic: VI1PR04MB5600: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(3230017)(999002)(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(3231472)(944501520)(52105112)(10201501046)(3002001)(6055026)(148016)(149066)(150057)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095);SRVR:VI1PR04MB5600;BCL:0;PCL:0;RULEID:;SRVR:VI1PR04MB5600; x-forefront-prvs: 08828D20BC x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39860400002)(346002)(376002)(396003)(366004)(136003)(13464003)(189003)(199004)(229853002)(81166006)(81156014)(6436002)(5660300001)(478600001)(8936002)(8676002)(33656002)(76176011)(14444005)(6916009)(256004)(7416002)(99286004)(74316002)(446003)(11346002)(7736002)(25786009)(66066001)(7696005)(476003)(486006)(305945005)(54906003)(26005)(6506007)(53546011)(316002)(71190400001)(4326008)(55016002)(186003)(4744004)(2906002)(102836004)(86362001)(55236004)(68736007)(39060400002)(71200400001)(9686003)(78486014)(106356001)(93886005)(6246003)(97736004)(14454004)(105586002)(3846002)(53936002)(6116002);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR04MB5600;H:VI1PR04MB5726.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 60/5kuVUJ0Y9/TxkcJSFuKaxHgYzyNUbRSpAxda15QVlCahOjPjJW1QLwtCbGakgFOh6lqtMHyfhOROnrAFO+0U8McpBS2jU7eDCawEF3iBDZnY84Sq886DHgj+0jrQ8kYYMoiECxaPOwt/Y3Ho0YsXLdbaZsLS8x1Z1qrjZeq0Ea84iBYunnfTCldvSQQTpbuSBcVqf0V7hFTw4xXSU9xDc2ULIP/QLeTHc1SCwN/noWGq8A87rkcTXYr0vRqnYFXkzewoOVTwGQWx6fXtAIvo1jeJzTH0BD1kim7k9NShseuwDuTAUMeY206y7S/hz spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e0a5ea6a-de94-4ff7-39b2-08d65e8c6303 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Dec 2018 10:43:56.7630 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5600 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgQm9yaXMsIEZyaWVkZXIsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJv bTogQm9yaXMgQnJlemlsbG9uIFttYWlsdG86Ym9yaXMuYnJlemlsbG9uQGJvb3RsaW4uY29tXQ0K PiBTZW50OiBNb25kYXksIERlY2VtYmVyIDEwLCAyMDE4IDM6NDkgUE0NCj4gVG86IFlvZ2VzaCBO YXJheWFuIEdhdXIgPHlvZ2VzaG5hcmF5YW4uZ2F1ckBueHAuY29tPg0KPiBDYzogU2NocmVtcGYg RnJpZWRlciA8ZnJpZWRlci5zY2hyZW1wZkBrb250cm9uLmRlPjsgbGludXgtDQo+IG10ZEBsaXN0 cy5pbmZyYWRlYWQub3JnOyBtYXJlay52YXN1dEBnbWFpbC5jb207IGJyb29uaWVAa2VybmVsLm9y ZzsgbGludXgtDQo+IHNwaUB2Z2VyLmtlcm5lbC5vcmc7IGRldmljZXRyZWVAdmdlci5rZXJuZWwu b3JnOyByb2JoQGtlcm5lbC5vcmc7DQo+IG1hcmsucnV0bGFuZEBhcm0uY29tOyBzaGF3bmd1b0Br ZXJuZWwub3JnOyBsaW51eC1hcm0tDQo+IGtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBjb21w dXRlcnNmb3JwZWFjZUBnbWFpbC5jb207IGxpbnV4LQ0KPiBrZXJuZWxAdmdlci5rZXJuZWwub3Jn DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjUgMS81XSBzcGk6IHNwaS1tZW06IEFkZCBkcml2ZXIg Zm9yIE5YUCBGbGV4U1BJIGNvbnRyb2xsZXINCj4gDQo+IE9uIE1vbiwgMTAgRGVjIDIwMTggMDk6 NDE6NTEgKzAwMDANCj4gWW9nZXNoIE5hcmF5YW4gR2F1ciA8eW9nZXNobmFyYXlhbi5nYXVyQG54 cC5jb20+IHdyb3RlOg0KPiANCj4gPiA+ID4gKy8qIEluc3RlYWQgb2YgYnVzeSBsb29waW5nIGlu dm9rZSByZWFkbF9wb2xsX3RpbWVvdXQgZnVuY3Rpb25hbGl0eS4NCj4gPiA+ID4gKyovIHN0YXRp YyBpbnQgZnNwaV9yZWFkbF9wb2xsX3RvdXQoc3RydWN0IG54cF9mc3BpICpmLCB2b2lkIF9faW9t ZW0gKmJhc2UsDQo+ID4gPiA+ICsJCQkJdTMyIG1hc2ssIHUzMiBkZWxheV91cywNCj4gPiA+ID4g KwkJCQl1MzIgdGltZW91dF91cywgYm9vbCBjb25kaXRpb24pIHsNCj4gPiA+ID4gKwl1MzIgcmVn Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKCFmLT5kZXZ0eXBlX2RhdGEtPmxpdHRsZV9lbmRp YW4pDQo+ID4gPiA+ICsJCW1hc2sgPSAodTMyKWNwdV90b19iZTMyKG1hc2spOw0KPiA+ID4gPiAr DQo+ID4gPiA+ICsJaWYgKGNvbmRpdGlvbikNCj4gPiA+ID4gKwkJcmV0dXJuIHJlYWRsX3BvbGxf dGltZW91dChiYXNlLCByZWcsIChyZWcgJiBtYXNrKSwNCj4gPiA+ID4gKwkJCQkJICBkZWxheV91 cywgdGltZW91dF91cyk7DQo+ID4gPiA+ICsJZWxzZQ0KPiA+ID4gPiArCQlyZXR1cm4gcmVhZGxf cG9sbF90aW1lb3V0KGJhc2UsIHJlZywgIShyZWcgJiBtYXNrKSwNCj4gPiA+ID4gKwkJCQkJICBk ZWxheV91cywgdGltZW91dF91cyk7DQo+ID4gPg0KPiA+ID4gSSB3b3VsZCByYXRoZXIgdXNlIGEg bG9jYWwgdmFyaWFibGUgdG8gc3RvcmUgdGhlIGNvbmRpdGlvbjoNCj4gPiA+DQo+ID4gPiBib29s IGMgPSBjb25kaXRpb24gPyAocmVnICYgbWFzayk6IShyZWcgJiBtYXNrKTsNCj4gPiA+DQo+ID4g V2l0aCB0aGVzZSB0eXBlIG9mIHVzYWdlIGdldHRpbmcgYmVsb3cgd2FybmluZyBtZXNzYWdlcy4N Cj4gPg0KPiA+IGRyaXZlcnMvc3BpL3NwaS1ueHAtZnNwaS5jOiBJbiBmdW5jdGlvbiDigJhmc3Bp X3JlYWRsX3BvbGxfdG91dC5pc3JhLjEwLmNvbnN0cHJvcOKAmToNCj4gPiBkcml2ZXJzL3NwaS9z cGktbnhwLWZzcGkuYzo0NDY6MjE6IHdhcm5pbmc6IOKAmHJlZ+KAmSBtYXkgYmUgdXNlZCB1bmlu aXRpYWxpemVkIGluDQo+IHRoaXMgZnVuY3Rpb24gWy1XbWF5YmUtdW5pbml0aWFsaXplZF0NCj4g PiAgIGJvb2wgY24gPSBjID8gKHJlZyAmIG1hc2spIDogIShyZWcgJiBtYXNrKTsNCj4gPg0KPiA+ IElmIGFzc2lnbiB2YWx1ZSB0byByZWcgPSAweGZmZmZmZmZmIHRoZW4gdGltZW91dCBpcyBzdGFy dCBnZXR0aW5nIGhpdCBmb3IgRmFsc2UgY2FzZQ0KPiBhbmQgaWYgYXNzaWduIHZhbHVlIDAgdGhl biBzdGFydCBnZXR0aW5nIHRpbWVvdXQgaGl0IGZvciB0cnVlIGNhc2UuDQo+ID4NCj4gPiBJIHdv dWxkIHJhdGhlciBub3QgdHJ5IHRvIG1vZGlmeSB0aGlzIGZ1bmN0aW9uLg0KPiANCj4gSSBhZ3Jl ZS4gTGV0J3Mga2VlcCB0aGlzIGZ1bmN0aW9uIHJlYWRhYmxlIGV2ZW4gaWYgdGhpcyBpbXBsaWVz IGR1cGxpY2F0aW5nIGEgZmV3DQo+IGxpbmVzIG9mIGNvZGUuDQo+IA0KPiA+DQo+ID4gPiByZXR1 cm4gcmVhZGxfcG9sbF90aW1lb3V0KGJhc2UsIHJlZywgYywgZGVsYXlfdXMsIHRpbWVvdXRfdXMp Ow0KPiA+ID4NCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoNCj4gPiA+ID4gKyAq IElmIHRoZSBzbGF2ZSBkZXZpY2UgY29udGVudCBiZWluZyBjaGFuZ2VkIGJ5IFdyaXRlL0VyYXNl LCBuZWVkDQo+ID4gPiA+ICt0bw0KPiA+ID4gPiArICogaW52YWxpZGF0ZSB0aGUgQUhCIGJ1ZmZl ci4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgZG9pbmcgdGhlDQo+ID4gPiA+ICtyZXNldA0KPiA+ ID4gPiArICogb2YgY29udHJvbGxlciBhZnRlciBzZXR0aW5nIE1DUjBbU1dSRVNFVF0gYml0Lg0K PiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgbnhwX2ZzcGlfaW52YWxp ZChzdHJ1Y3QgbnhwX2ZzcGkgKmYpIHsNCj4gPiA+ID4gKwl1MzIgcmVnOw0KPiA+ID4gPiArCWlu dCByZXQ7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlyZWcgPSBmc3BpX3JlYWRsKGYsIGYtPmlvYmFz ZSArIEZTUElfTUNSMCk7DQo+ID4gPiA+ICsJZnNwaV93cml0ZWwoZiwgcmVnIHwgRlNQSV9NQ1Iw X1NXUlNULCBmLT5pb2Jhc2UgKyBGU1BJX01DUjApOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyog dzFjIHJlZ2lzdGVyLCB3YWl0IHVuaXQgY2xlYXIgKi8NCj4gPiA+ID4gKwlyZXQgPSBmc3BpX3Jl YWRsX3BvbGxfdG91dChmLCBmLT5pb2Jhc2UgKyBGU1BJX01DUjAsDQo+ID4gPiA+ICsJCQkJICAg RlNQSV9NQ1IwX1NXUlNULCAwLCBQT0xMX1RPVVQsIGZhbHNlKTsNCj4gPiA+ID4gKwlXQVJOX09O KHJldCk7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyB2b2lkIG54cF9m c3BpX3ByZXBhcmVfbHV0KHN0cnVjdCBueHBfZnNwaSAqZiwNCj4gPiA+ID4gKwkJCQkgY29uc3Qg c3RydWN0IHNwaV9tZW1fb3AgKm9wKSB7DQo+ID4gPiA+ICsJdm9pZCBfX2lvbWVtICpiYXNlID0g Zi0+aW9iYXNlOw0KPiA+ID4gPiArCXUzMiBsdXR2YWxbNF0gPSB7fTsNCj4gPiA+ID4gKwlpbnQg bHV0aWR4ID0gMSwgaTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qIGNtZCAqLw0KPiA+ID4gPiAr CWx1dHZhbFswXSB8PSBMVVRfREVGKDAsIExVVF9DTUQsIExVVF9QQUQob3AtPmNtZC5idXN3aWR0 aCksDQo+ID4gPiA+ICsJCQkgICAgIG9wLT5jbWQub3Bjb2RlKTsNCj4gPiA+ID4gKw0KPiA+ID4g PiArCS8qIGFkZHIgYnVzIHdpZHRoICovDQo+ID4gPiA+ICsJaWYgKG9wLT5hZGRyLm5ieXRlcykg ew0KPiA+ID4gPiArCQl1MzIgYWRkcmxlbiA9IDA7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJc3dp dGNoIChvcC0+YWRkci5uYnl0ZXMpIHsNCj4gPiA+ID4gKwkJY2FzZSAxOg0KPiA+ID4gPiArCQkJ YWRkcmxlbiA9IEFERFI4QklUOw0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2Ug MjoNCj4gPiA+ID4gKwkJCWFkZHJsZW4gPSBBRERSMTZCSVQ7DQo+ID4gPiA+ICsJCQlicmVhazsN Cj4gPiA+ID4gKwkJY2FzZSAzOg0KPiA+ID4gPiArCQkJYWRkcmxlbiA9IEFERFIyNEJJVDsNCj4g PiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gPiArCQljYXNlIDQ6DQo+ID4gPiA+ICsJCQlhZGRybGVu ID0gQUREUjMyQklUOw0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWRlZmF1bHQ6DQo+ ID4gPiA+ICsJCQlkZXZfZXJyKGYtPmRldiwgIkluLWNvcnJlY3QgYWRkcmVzcyBsZW5ndGhcbiIp Ow0KPiA+ID4gPiArCQkJcmV0dXJuOw0KPiA+ID4gPiArCQl9DQo+ID4gPg0KPiA+ID4gWW91IGRv bid0IG5lZWQgdG8gdmFsaWRhdGUgb3AtPmFkZHIubmJ5dGVzIGhlcmUsIHRoaXMgaXMgYWxyZWFk eQ0KPiA+ID4gZG9uZSBpbiBueHBfZnNwaV9zdXBwb3J0c19vcCgpLg0KPiA+DQo+ID4gWWVzLCBJ IG5lZWQgdG8gdmFsaWRhdGUgb3AtPmFkZHIubmJ5dGVzIGVsc2UgTFVUIHdvdWxkIGdvaW5nIHRv IGJlDQo+IHByb2dyYW1tZWQgZm9yIDAgYWRkcmxlbi4NCj4gPiBJIGhhdmUgY2hlY2tlZCB0aGlz IG9uIHRoZSB0YXJnZXQuDQo+IA0KPiBBbHNvIGFncmVlIHRoZXJlLiBTb21lIG9wZXJhdGlvbnMg aGF2ZSAwIGFkZHJlc3MgYnl0ZXMuIFdlIGNvdWxkIGFsc28gdGVzdA0KPiBhZGRyLmJ1c3dpZHRo LCBidXQgSSdtIGZpbmUgd2l0aCB0aGUgYWRkci5uYnl0ZXMgdGVzdCB0b28uDQo+IA0KPiANCj4g PiA+ID4gK3N0YXRpYyB2b2lkIG54cF9mc3BpX3NlbGVjdF9tZW0oc3RydWN0IG54cF9mc3BpICpm LCBzdHJ1Y3QNCj4gPiA+ID4gK3NwaV9kZXZpY2UNCj4gPiA+ID4gKypzcGkpIHsNCj4gPiA+ID4g Kwl1bnNpZ25lZCBsb25nIHJhdGUgPSBzcGktPm1heF9zcGVlZF9oejsNCj4gPiA+ID4gKwlpbnQg cmV0Ow0KPiA+ID4gPiArCXVpbnQ2NF90IHNpemVfa2I7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkv Kg0KPiA+ID4gPiArCSAqIFJldHVybiwgaWYgcHJldmlvdXNseSBzZWxlY3RlZCBzbGF2ZSBkZXZp Y2UgaXMgc2FtZSBhcyBjdXJyZW50DQo+ID4gPiA+ICsJICogcmVxdWVzdGVkIHNsYXZlIGRldmlj ZS4NCj4gPiA+ID4gKwkgKi8NCj4gPiA+ID4gKwlpZiAoZi0+c2VsZWN0ZWQgPT0gc3BpLT5jaGlw X3NlbGVjdCkNCj4gPiA+ID4gKwkJcmV0dXJuOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogUmVz ZXQgRkxTSHh4Q1IwIHJlZ2lzdGVycyAqLw0KPiA+ID4gPiArCWZzcGlfd3JpdGVsKGYsIDAsIGYt PmlvYmFzZSArIEZTUElfRkxTSEExQ1IwKTsNCj4gPiA+ID4gKwlmc3BpX3dyaXRlbChmLCAwLCBm LT5pb2Jhc2UgKyBGU1BJX0ZMU0hBMkNSMCk7DQo+ID4gPiA+ICsJZnNwaV93cml0ZWwoZiwgMCwg Zi0+aW9iYXNlICsgRlNQSV9GTFNIQjFDUjApOw0KPiA+ID4gPiArCWZzcGlfd3JpdGVsKGYsIDAs IGYtPmlvYmFzZSArIEZTUElfRkxTSEIyQ1IwKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qIEFz c2lnbiBjb250cm9sbGVyIG1lbW9yeSBtYXBwZWQgc3BhY2UgYXMgc2l6ZSwgS0J5dGVzLCBvZiBm bGFzaC4gKi8NCj4gPiA+ID4gKwlzaXplX2tiID0gRlNQSV9GTFNIWENSMF9TWihmLT5tZW1tYXBf cGh5X3NpemUpOw0KPiA+ID4NCj4gPiBBYm92ZSBkZXNjcmlwdGlvbiBvZiB0aGlzIGZ1bmN0aW9u LCBleHBsYWlucyB0aGUgcmVhc29uIGZvciB1c2luZw0KPiBtZW1tYXBfcGh5X3NpemUuDQo+ID4g VGhpcyBpcyBub3QgdGhlIGFyYml0cmFyeSBzaXplLCBidXQgdGhlIG1lbW9yeSBtYXBwZWQgc2l6 ZSBiZWluZyBhc3NpZ25lZCB0bw0KPiB0aGUgY29udHJvbGxlci4NCj4gPg0KPiA+ID4gWW91IGFy ZSBzdGlsbCB1c2luZyBtZW1vcnkgb2YgYXJiaXRyYXJ5IHNpemUgKG1lbW1hcF9waHlfc2l6ZSkg Zm9yDQo+ID4gPiBtYXBwaW5nIHRoZSBmbGFzaC4gV2h5IG5vdCB1c2UgdGhlIHNhbWUgYXBwcm9h Y2ggYXMgaW4gdGhlIFFTUEkNCj4gPiA+IGRyaXZlciBhbmQganVzdCBtYXAgYWhiX2J1Zl9zaXpl IHVudGlsIHdlIGltcGxlbWVudCB0aGUgZGlybWFwIEFQST8NCj4gPiBUaGUgYXBwcm9hY2ggd2hp Y2ggYmVpbmcgdXNlZCBpbiBRU1BJIGRyaXZlciBkaWRuJ3Qgd29yayBoZXJlLCBJIGhhdmUgdHJp ZWQNCj4gd2l0aCB0aGF0Lg0KPiA+IEluIFFTUEkgZHJpdmVyLCB3aGlsZSBwcmVwYXJpbmcgTFVU IHdlIGFyZSBhc3NpZ25pbmcgcmVhZC93cml0ZSBhZGRyZXNzIGluIHRoZQ0KPiBMVVQgcHJlcGFy YXRpb24gYW5kIGhhdmUgdG8gZm9yIHNvbWUgdW5rbm93biBoYWNrIGhhdmUgdG8gcHJvdmlkZSBt YWNybyBmb3INCj4gTFVUX01PREUgaW5zdGVhZCBvZiBMVVRfQUREUi4NCj4gPiBCdXQgdGhpcyB0 aGluZyBkaWRuJ3Qgd29yayBmb3IgRmxleFNQSS4NCj4gPiBJIGRpc2N1c3NlZCB3aXRoIEhXIElQ IG93bmVyIGFuZCB0aGV5IHN1Z2dlc3RlZCBvbmx5IHRvIHVzZSBMVVRfQUREUiBmb3INCj4gc3Bl Y2lmeWluZyB0aGUgYWRkcmVzcyBsZW5ndGggb2YgdGhlIGNvbW1hbmQgaS5lLiAzLWJ5dGUgb3Ig NC1ieXRlIGFkZHJlc3MNCj4gY29tbWFuZCAoTk9SKSBvciAxLTIgYnl0ZSBhZGRyZXNzIGNvbW1h bmQgZm9yIE5BTkQuDQo+IA0KPiBBY3R1YWxseSwgd2Ugd291bGQgaGF2ZSB1c2VkIGEgTFVUX0FE RFIgdG9vIGlmIHRoZSBRU1BJIElQIHdhcyBzdXBwb3J0IEFERFINCj4gaW5zdHJ1Y3Rpb25zIHdp dGggYSBudW1iZXIgb2YgYnl0ZXMgPCAzLCBidXQgZm9yIHNvbWUgdW5rbm93biByZWFzb25zIGl0 IGRvZXMNCj4gbm90IHdvcmsuDQo+IA0KPiA+DQo+ID4gVGh1cywgaW4gTFVUIHByZXBhcmF0aW9u IHdlIGhhdmUgYXNzaWduZWQgb25seSB0aGUgYmFzZSBhZGRyZXNzLg0KPiA+IE5vdyBpZiBJIGhh dmUgYXNzaWduZWQgYWhiX2J1Zl9zaXplIHRvIEZTUElfRkxTSFhYQ1IwIHJlZ2lzdGVyIHRoZW4g Zm9yDQo+IHJlYWQvd3JpdGUgZGF0YSBiZXlvbmQgbGltaXQgb2YgYWhiX2J1Zl9zaXplIG9mZnNl dCBJIGdldCBkYXRhIGNvcnJ1cHRpb24uDQo+IA0KPiBXaHkgd291bGQgeW91IGRvIHRoYXQ/IFdl IGhhdmUgdGhlIC0+YWRqdXN0X29wX3NpemUoKSBleGFjdGx5IGZvciB0aGlzIHJlYXNvbiwNCj4g c28sIGlmIHNvbWVvbmUgdHJpZXMgdG8gZG8gYSBzcGlfbWVtX29wIHdpdGggZGF0YS5uYnl0ZXMg PiBhaGJfYnVmX3NpemUgeW91DQo+IHNob3VsZCByZXR1cm4gYW4gZXJyb3IuDQo+IA0KTGV0IG1l IGV4cGxhaW4gbXkgaW1wbGVtZW50YXRpb24gd2l0aCBleGFtcGxlLiBJZiBJIGhhdmUgdG8gd3Jp dGUgZGF0YSBvZiBzaXplIDB4MTAwIGJ5dGVzIGF0IG9mZnNldCAweDEyMDAgZm9yIENTMSwgSSB3 b3VsZCBwcm9ncmFtIGFzIGJlbG93Og0KSW4gZnVuYyBueHBfZnNwaV9zZWxlY3RfbWVtKCksIHdv dWxkIHNldCB2YWx1ZSBvZiBjb250cm9sbGVyIGFkZHJlc3Mgc3BhY2Ugc2l6ZSwgbWVtbWFwX3Bo eV9zaXplLCB0byBGU1BJX0ZMU0hBMkNSMCBhbmQgcmVzdCBhbGwgRlNQSV9GTFNIWFhDUjAgYXMg MC4gDQpWYWx1ZSBvZiBtZW1tYXBfcGh5X3NpemUgaXMgMHgxMDAwMDAwMCBpLmUuIDI1NiBNQiBm b3IgbXkgTFgyMTYwQVJEQiB0YXJnZXQuDQpUaGVuIGluIG54cF9mc3BpX3ByZXBhcmVfbHV0KCks IEkgd291bGQgcHJlcGFyZSBMVVQgQUREUiB3aXRoIGFkZHJlc3MgbGVuZ3RoIHJlcXVpcmVtZW50 IDMvNCBieXRlIGZvciBOT1Igb3IgMS8yLzMvNCBieXRlcyBmb3IgTkFORCBmbGFzaC4NCkFsc28g Zm9yIExVVF9OWFBfV1JJVEUgd291bGQgcHJvZ3JhbSBkYXRhIGJ5dGVzIGFzIDAuDQoNClRoZW4g aW5zaWRlIGZ1bmMgbnhwX2ZzcGlfZG9fb3AoKSwgc2V0IHJlZ2lzdGVyIEZTUElfSVBDUjAgYXMg dGhlIGFkZHJlc3Mgb2Zmc2V0IGkuZS4gMHgxMjAwIGFuZCBpbiByZWdpc3RlciBGU1BJX0lQQ1Ix IHByb2dyYW0gdGhlIGRhdGEgc2l6ZSB0byB3cml0ZSBpLmUuIDB4MTAwDQoNCklmLCBhcyBzdWdn ZXN0ZWQgaWYgSSB0cmllcyB0byBtYXJrIHZhbHVlIG9mIHJlZ2lzdGVyIEZTUElfRkxTSEEyQ1Iw IGVxdWFsIHRvIGFoYl9idWZfc2l6ZSAoMHg4MDApLCB0aGVuIGFjY2VzcyBmb3IgYWRkcmVzcyAw eDEyMDAgZ2l2ZXMgbWUgd3JvbmcgZGF0YS4gVGhpcyBpcyBiZWNhdXNlIGFzIHBlciB0aGUgY29u dHJvbGxlciBzcGVjaWZpY2F0aW9uIGFjY2VzcyB0byBmbGFzaCBjb25uZWN0ZWQgYXQgQ1MxIGNh biBiZSBwZXJmb3JtZWQgdW5kZXIgcmFuZ2Ugb2YgRlNQSV8gRkxTSEExQ1IwIGFuZCBGU1BJXyBG TFNIQTJDUjAuDQpTbyBlaXRoZXIgRlNQSV8gRkxTSEEyQ1IwIHNob3VsZCBoYXZlIHRoZSB2YWx1 ZSBvZiB0aGUgYWN0dWFsIGNvbm5lY3RlZCBmbGFzaCBzaXplIGJ1dCB3ZSBkb24ndCBoYXZlIG1l Y2hhbmlzbSB0byBrbm93IHRoZSBmbGFzaCBzaXplIGluIGN1cnJlbnQgaW1wbGVtZW50YXRpb24u DQpUaHVzIGluc3RlYWQgb2YgdXNpbmcgc29tZSBvdGhlciBhcmJpdHJhcnkgdmFsdWUsIEkgaGF2 ZSB1c2VkIHRoZSBmdWxsIHNpemUgYmVpbmcgYWxsb2NhdGVkIHRvIHRoZSBGbGV4U1BJIGNvbnRy b2xsZXIuDQoNCj4gPg0KPiA+IFRodXMsIGZvciBnZW5lcmljIGFwcHJvYWNoIGhhdmUgYXNzaWdu ZWQgRlNQSV9GTFNIWFhDUjAgZXF1YWwgdG8gdGhlDQo+IG1lbW9yeSBtYXBwZWQgc2l6ZSB0byB0 aGUgY29udHJvbGxlci4gVGhpcyB3b3VsZCBhbHNvIG5vdCBnb2luZyB0byBkZXBlbmQgb24NCj4g dGhlIG51bWJlciBvZiBDUyBwcmVzZW50IG9uIHRoZSB0YXJnZXQuDQo+IA0KPiBJIGtpbmQgb2Yg YWdyZWUgd2l0aCBGcmllZGVyIG9uIHRoYXQgb25lLCBJIHRoaW5rIGl0J3MgcHJlZmVyYWJsZSB0 byBsaW1pdCB0aGUgcGVyLQ0KPiByZWFkLW9wIHNpemUgdG8gYWhiX2J1Zl9zaXplIGFuZCBsZXQg dGhlIHVwcGVyIGxheWVyIHNwbGl0IHRoZSByZXF1ZXN0IGluIHNldmVyYWwNCj4gc3ViLXJlcXVl c3RzLiBPbiB0aGUgY29udHJvbGxlciBzaWRlIG9mIHRoaW5ncywgeW91IGp1c3QgaGF2ZSB0byBo YXZlIGEgbWFwcGluZw0KPiBvZiBhaGJfYnVmX3NpemUgcGVyLUNTLiBJZiB5b3Ugd2FudCB0byBm dXJ0aGVyIG9wdGltaXplIHRoaW5ncywgaW1wbGVtZW50IHRoZQ0KPiBkaXJtYXAgaG9va3MuDQo+ IA0KPiA+DQo+ID4gPiBZb3UgYXJlIGFscmVhZHkgYWxpZ25pbmcgdGhlIEFIQiByZWFkcyBmb3Ig dGhpcyBpbiBueHBfZnNwaV9hZGp1c3Rfb3Bfc2l6ZSgpLg0KPiA+ID4NCj4gPiBZZXMsIG1heCBy ZWFkIGRhdGEgc2l6ZSBjYW4gYmUgYWhiX2J1Zl9zaXplLiBUaHVzIHdlIG5lZWQgdG8gY2hlY2sg bWF4IHJlYWQNCj4gc2l6ZSB3aXRoIGFoYl9idWZfc2l6ZS4NCj4gDQo+IFdlbGwsIGl0J3MgbmV2 ZXIgYSBiYWQgdGhpbmcgdG8gY2hlY2sgaXQgdHdpY2UsIGp1c3QgaW4gY2FzZSB0aGUgc3BpLW1l bSB1c2VyIGlzDQo+IG1pc3VzaW5nIHRoZSBBUEkuDQo+IA0KPiA+ID4gPiArc3RhdGljIHZvaWQg bnhwX2ZzcGlfZmlsbF90eGZpZm8oc3RydWN0IG54cF9mc3BpICpmLA0KPiA+ID4gPiArCQkJCSBj b25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApIHsNCj4gPiA+ID4gKwl2b2lkIF9faW9tZW0gKmJh c2UgPSBmLT5pb2Jhc2U7DQo+ID4gPiA+ICsJaW50IGksIGosIHJldDsNCj4gPiA+ID4gKwlpbnQg c2l6ZSwgdG1wX3NpemUsIHdtX3NpemU7DQo+ID4gPiA+ICsJdTMyIGRhdGEgPSAwOw0KPiA+ID4g PiArCXUzMiAqdHhidWYgPSAodTMyICopIG9wLT5kYXRhLmJ1Zi5vdXQ7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKwkvKiBjbGVhciB0aGUgVFggRklGTy4gKi8NCj4gPiA+ID4gKwlmc3BpX3dyaXRlbChm LCBGU1BJX0lQVFhGQ1JfQ0xSLCBiYXNlICsgRlNQSV9JUFRYRkNSKTsNCj4gPiA+ID4gKw0KPiA+ ID4gPiArCS8qIERlZmF1bHQgdmFsdWUgb2Ygd2F0ZXIgbWFyayBsZXZlbCBpcyA4IGJ5dGVzLiAq Lw0KPiA+ID4gPiArCXdtX3NpemUgPSA4Ow0KPiA+ID4gPiArCXNpemUgPSBvcC0+ZGF0YS5uYnl0 ZXMgLyB3bV9zaXplOw0KPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsNCj4g PiA+ID4gKwkJLyogV2FpdCBmb3IgVFhGSUZPIGVtcHR5ICovDQo+ID4gPiA+ICsJCXJldCA9IGZz cGlfcmVhZGxfcG9sbF90b3V0KGYsIGYtPmlvYmFzZSArIEZTUElfSU5UUiwNCj4gPiA+ID4gKwkJ CQkJICAgRlNQSV9JTlRSX0lQVFhXRSwgMCwNCj4gPiA+ID4gKwkJCQkJICAgUE9MTF9UT1VULCB0 cnVlKTsNCj4gPiA+ID4gKwkJV0FSTl9PTihyZXQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCWog PSAwOw0KPiA+ID4gPiArCQl0bXBfc2l6ZSA9IHdtX3NpemU7DQo+ID4gPiA+ICsJCXdoaWxlICh0 bXBfc2l6ZSA+IDApIHsNCj4gPiA+ID4gKwkJCWRhdGEgPSAwOw0KPiA+ID4gPiArCQkJbWVtY3B5 KCZkYXRhLCB0eGJ1ZiwgNCk7DQo+ID4gPiA+ICsJCQlmc3BpX3dyaXRlbChmLCBkYXRhLCBiYXNl ICsgRlNQSV9URkRSICsgaiAqIDQpOw0KPiA+ID4gPiArCQkJdG1wX3NpemUgLT0gNDsNCj4gPiA+ ID4gKwkJCWorKzsNCj4gPiA+ID4gKwkJCXR4YnVmICs9IDE7DQo+ID4gPiA+ICsJCX0NCj4gPiA+ ID4gKwkJZnNwaV93cml0ZWwoZiwgRlNQSV9JTlRSX0lQVFhXRSwgYmFzZSArIEZTUElfSU5UUik7 DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJc2l6ZSA9IG9wLT5kYXRhLm5ieXRl cyAlIHdtX3NpemU7DQo+ID4gPiA+ICsJaWYgKHNpemUpIHsNCj4gPiA+ID4gKwkJLyogV2FpdCBm b3IgVFhGSUZPIGVtcHR5ICovDQo+ID4gPiA+ICsJCXJldCA9IGZzcGlfcmVhZGxfcG9sbF90b3V0 KGYsIGYtPmlvYmFzZSArIEZTUElfSU5UUiwNCj4gPiA+ID4gKwkJCQkJICAgRlNQSV9JTlRSX0lQ VFhXRSwgMCwNCj4gPiA+ID4gKwkJCQkJICAgUE9MTF9UT1VULCB0cnVlKTsNCj4gPiA+ID4gKwkJ V0FSTl9PTihyZXQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCWogPSAwOw0KPiA+ID4gPiArCQl0 bXBfc2l6ZSA9IDA7DQo+ID4gPiA+ICsJCXdoaWxlIChzaXplID4gMCkgew0KPiA+ID4gPiArCQkJ ZGF0YSA9IDA7DQo+ID4gPiA+ICsJCQl0bXBfc2l6ZSA9IChzaXplIDwgNCkgPyBzaXplIDogNDsN Cj4gPiA+ID4gKwkJCW1lbWNweSgmZGF0YSwgdHhidWYsIHRtcF9zaXplKTsNCj4gPiA+ID4gKwkJ CWZzcGlfd3JpdGVsKGYsIGRhdGEsIGJhc2UgKyBGU1BJX1RGRFIgKyBqICogNCk7DQo+ID4gPiA+ ICsJCQlzaXplIC09IHRtcF9zaXplOw0KPiA+ID4gPiArCQkJaisrOw0KPiA+ID4gPiArCQkJdHhi dWYgKz0gMTsNCj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiArCQlmc3BpX3dyaXRlbChmLCBGU1BJX0lO VFJfSVBUWFdFLCBiYXNlICsgRlNQSV9JTlRSKTsNCj4gPiA+ID4gKwl9DQo+ID4gPg0KPiA+ID4g QWxsIHRoZXNlIG5lc3RlZCBsb29wcyB0byBmaWxsIHRoZSBUWCBidWZmZXIgYW5kIGFsc28gdGhl IG9uZXMgYmVsb3cNCj4gPiA+IHRvIHJlYWQgdGhlIFJYIGJ1ZmZlciBsb29rIG11Y2ggbW9yZSBj b21wbGljYXRlZCB0aGFuIHRoZXkgc2hvdWxkDQo+ID4gPiByZWFsbHkgYmUuIENhbiB5b3UgdHJ5 IHRvIG1ha2UgdGhpcyBtb3JlIHJlYWRhYmxlPw0KPiA+IFllcw0KPiA+ID4NCj4gPiA+IE1heWJl IHNvbWV0aGluZyBsaWtlIHRoaXMgd291bGQgd29yazoNCj4gPiA+DQo+ID4gPiBmb3IgKGkgPSAw OyBpIDwgQUxJR05fRE9XTihvcC0+ZGF0YS5uYnl0ZXMsIDgpOyBpICs9IDgpIHsNCj4gPiA+IAkv KiBXYWl0IGZvciBUWEZJRk8gZW1wdHkgKi8NCj4gPiA+IAlyZXQgPSBmc3BpX3JlYWRsX3BvbGxf dG91dChmLCBmLT5pb2Jhc2UgKyBGU1BJX0lOVFIsDQo+ID4gPiAJCQkJICAgRlNQSV9JTlRSX0lQ VFhXRSwgMCwNCj4gPiA+IAkJCQkgICBQT0xMX1RPVVQsIHRydWUpOw0KPiA+ID4NCj4gPiA+IAlm c3BpX3dyaXRlbChmLCBvcC0+ZGF0YS5idWYub3V0ICsgaSwgYmFzZSArIEZTUElfVEZEUik7DQo+ ID4gPiAJZnNwaV93cml0ZWwoZiwgb3AtPmRhdGEuYnVmLm91dCArIGkgKyA0LCBiYXNlICsgRlNQ SV9URkRSICsgNCk7DQo+ID4gPiAJZnNwaV93cml0ZWwoZiwgRlNQSV9JTlRSX0lQVFhXRSwgYmFz ZSArIEZTUElfSU5UUik7IH0NCj4gPiBXaXRoIHRoaXMgYWJvdmUgMiBsaW5lcyB3ZSBhcmUgaGFy ZGNvZGluZyBpdCBmb3IgcmVhZC93cml0ZSB3aXRoIHdhdGVybWFyaw0KPiBzaXplIGFzIDggYnl0 ZXMuDQo+ID4gV2F0ZXJtYXJrIHNpemUgY2FuIGJlIHZhcmlhYmxlIGFuZCBkZXBlbmRzIG9uIHRo ZSB2YWx1ZSBvZg0KPiA+IElQUlhGQ1IvSVBUWEZDUiByZWdpc3RlciB3aXRoIGRlZmF1bHQgdmFs dWUgYXMgOCBieXRlcyBUaHVzLCBJIHdvdWxkIHN0aWxsDQo+IHByZWZlciB0byB1c2UgdGhlIGlu dGVybmFsIGZvciBsb29wIGluc3RlYWQgb2YgMiBmc3BpX3dyaXRlbCguLi4pIGZvciBGU1BJX1RG RFIgYW5kDQo+IEZTUElfVEZEUiArIDQgcmVnaXN0ZXIgd3JpdGUgY29tbWFuZHMuDQo+IA0KPiBK dXN0IGxpa2UgeW91J3JlIGhhcmRjb2Rpbmcgd21fc2l6ZSB0byA4LCBzbyBJIGRvbid0IHNlZSBh IGRpZmZlcmVuY2UgaGVyZS4gQW5kIEkNCj4gaW5kZWVkIHByZWZlciBGcmllZGVyJ3MgdmVyc2lv bi4NCg0KT2suIEJ1dCwgaW5zdGVhZCBvZiBoYXJkY29kaW5nIGFuZCBkb2luZyBmc3BpX3dyaXRl bCgpIHR3aWNlLCBJIGhhdmUgbW9kaWZpZWQgdGhpcyBhcyBiZWxvdyBpbiBteSB1cGNvbWluZyBu ZXh0IHZlcnNpb24NCiAgICAgICAgICAgICAgICBmb3IgKHRtcCA9IHdtX3NpemUsIGogPSAwOyB0 bXAgPiAwOyB0bXAgLT0gNCwgaisrKQ0KICAgICAgICAgICAgICAgICAgICAgICAgZnNwaV93cml0 ZWwoZiwgKnR4YnVmKyssIGJhc2UgKyBGU1BJX1RGRFIgKyBqICogNCk7DQpUaGlzIHdvdWxkIGdv aW5nIHRvIGdpdmUgdXMgZnJlZWRvbSBmb3IgZnV0dXJlIHVzZSBpZiB3YXRlcm1hcmsgc2l6ZSBp cyBiZWluZyB1c2VkIGFzIDE2IG9yIDI0IChtYXggNjQpIGluc3RlYWQgb2YgaXRzIGN1cnJlbnQg ZGVmYXVsdCB2YWx1ZSBvZiA4Lg0KDQotLQ0KUmVnYXJkcw0KWW9nZXNoIEdhdXINCg==