From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6EC40C4361B for ; Tue, 15 Dec 2020 14:35:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2FF1B2250F for ; Tue, 15 Dec 2020 14:35:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728404AbgLOOfS (ORCPT ); Tue, 15 Dec 2020 09:35:18 -0500 Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:9896 "EHLO mx0b-0016f401.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728283AbgLOOfI (ORCPT ); Tue, 15 Dec 2020 09:35:08 -0500 Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 0BFEQ03Q021871; Tue, 15 Dec 2020 06:34:20 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pfpt0220; bh=qnNYfLxOMwCVqN0FE3dH8goZMqIuq0hXXlvqMSHKS14=; b=USazwKhjHWJY7pJCyzCsx3zqIlpUnrMyb8ra90Zn481NLGtwgNpxVHoXCaBwgK581Q5y trB6v5XAa31ZMM0vfIxKwBcxeGaex9OcnKyqVaanjdfl72wHZZgHxMe0TY7Gg8qRkxEh Hmu+BMMYx1r4NIJG4CNL4MzE19AbkTjSKd46/J2qmwID0Z1soJOMwQI19/C4D+Bryxex a1VxmsIUfNL94yib4c+1apHW56UMIxYppWJDqGARvbKtSzwxmYuUhkeDPpIZ+eZYv74z KyBBcfku9Nk6rFBbWsl1LAtxObTFykf2sd6OKfoZdzwSMFmbF1HULMHBrzTIkZ0RJOs+ HQ== Received: from sc-exch03.marvell.com ([199.233.58.183]) by mx0a-0016f401.pphosted.com with ESMTP id 35cv3t05kx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Tue, 15 Dec 2020 06:34:19 -0800 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 15 Dec 2020 06:34:18 -0800 Received: from SC-EXCH02.marvell.com (10.93.176.82) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 15 Dec 2020 06:34:18 -0800 Received: from NAM04-SN1-obe.outbound.protection.outlook.com (104.47.44.58) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Tue, 15 Dec 2020 06:34:17 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PTdKECkWx7WFTUmqXIo/NZw8Aq4FGDPMIDhjQ7Aog3B2xRbDQxFTKbvIQnuqNPTHmS8p4GpZKeAbY3pXMeVafqo99N0ckC98+wE2UsTXxYfH3/ZBmzS0q9R4kuJPDYoGiIUM368+KtW+JMLGlMmy/BRkuxT+5Aw2fR3XjdntUQothCTZ6yWR2hFUrYlWrnEgy3l04kgP/lk/UcwXoTvQ7Xbwo5UfXfMdnnj2R7OsAkSB0gSyfjlybJTJ8Wcp7f4D9TS02N2KzZeeHEODESND5hKsuhPbw9jhSqvgxol36xh+IZMotfrsMAEd66vz1KrYNmr/5HovSgfbKM04no0Brw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qnNYfLxOMwCVqN0FE3dH8goZMqIuq0hXXlvqMSHKS14=; b=DxAZGH5yGR9peyi1lgr3O7nlwDRh+EmrEsgqVdYYSn5IVcoWXSuiaNAJ6zjcjJvhKOy0sgicgkpPU8hhAUhWoE8OxvHBf4n8LCmnO4/mHJB+nkTa5kLg4+gUo5xrQlTfw3sF2qLiUzQnVD2SGhjtsN1CNYVga4mQVU0jJLys1i/x3xZWwNVf2p/dsR+DlOoOILB9JcJpYZNupNqP0xGoeFRbvYP2ua1pzb3y5xd2csX2kqFRSu8e3Dzoz1PBe3Oan4ynXmU7scd1wKDknozMTImQ7zTfxhsCgov/9iAPLoClVPQ380qo/B3gA9mx5hFSI80RoSvacDg0UINv5xFOqQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qnNYfLxOMwCVqN0FE3dH8goZMqIuq0hXXlvqMSHKS14=; b=WQPl/xbGXmiHWIa3yDw7+dlkfYtWiygJt+n8fRxan23t5AZa/zflxnTBq7TcaJFr7KKLnDwRrIUVX6E00PGsym4AoTNy40c8DZnLGNpVYQq0vkYg/2ENVcIM3S7IwxlT3XV/jvmZ1yPuOJ9KGs21H8sSsMeCM1qwvUaokR39nHQ= Received: from CY4PR1801MB2070.namprd18.prod.outlook.com (2603:10b6:910:7e::28) by CY4PR18MB1525.namprd18.prod.outlook.com (2603:10b6:903:144::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.25; Tue, 15 Dec 2020 14:34:16 +0000 Received: from CY4PR1801MB2070.namprd18.prod.outlook.com ([fe80::f513:d620:a2c:744a]) by CY4PR1801MB2070.namprd18.prod.outlook.com ([fe80::f513:d620:a2c:744a%7]) with mapi id 15.20.3654.025; Tue, 15 Dec 2020 14:34:16 +0000 From: Bhaskara Budiredla To: Ulf Hansson CC: Kees Cook , Colin Cross , "Tony Luck" , Sunil Kovvuri Goutham , "linux-mmc@vger.kernel.org" , "Linux Kernel Mailing List" , Christoph Hellwig Subject: RE: [EXT] Re: [PATCH 1/2] mmc: Support kmsg dumper based on pstore/blk Thread-Topic: [EXT] Re: [PATCH 1/2] mmc: Support kmsg dumper based on pstore/blk Thread-Index: AQHWzJBGAAft6IQ2BkOkVnoLREcZc6nxyUkAgAXb/lCAAHB2AIAACZ6g Date: Tue, 15 Dec 2020 14:34:16 +0000 Message-ID: References: <20201207115753.21728-1-bbudiredla@marvell.com> <20201207115753.21728-2-bbudiredla@marvell.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: linaro.org; dkim=none (message not signed) header.d=none;linaro.org; dmarc=none action=none header.from=marvell.com; x-originating-ip: [2401:4900:16b6:1875:254d:404e:b59f:d451] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0d48eb65-ed20-4036-75e4-08d8a1068020 x-ms-traffictypediagnostic: CY4PR18MB1525: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ynTH+mXKvrIUE23n3d7SKSMqDUN8kBBpw0nFR3JRmYkKy8qzVnBPbmxdAPC552wXTlKWl/ton+DOSZnD+Znp4dEcDMx3i5tAwa00Kr5uZC1S45VquTmBqHfRo77jwLRxvYvwvU1fFektJFVrYY5ZPhjzMzYVnff3bXiLRscCSMhnVf5CiRa9qyJtI6ytTOEJ//Rro0fRhy1ScsoVBZ6grAQ1fAB3X55UUwMMmuJQFIlf4UBRANhxnVqGNmzljZEzXFl/M0B1VYsoSFH04dotxcYNiPsjpqy4cBIgjlf6xcsYp0twYvFm5hWuwI+zNXKMJ6/txJmh6GJLL/zuCWLMzw== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY4PR1801MB2070.namprd18.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(52536014)(76116006)(66556008)(5660300002)(55016002)(7696005)(54906003)(4326008)(83380400001)(2906002)(498600001)(86362001)(30864003)(9686003)(186003)(71200400001)(6506007)(66446008)(6916009)(64756008)(66476007)(33656002)(8936002)(66946007)(8676002)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?enNFMjY4R1pWdENJZEpGT3BZTnMwRE9UcGU4T05IOHNqN2dMMUVPOHZyZFQ3?= =?utf-8?B?ZTBnbU1MWkN6eDkvUjlRQ1NtYjR5d2plSTZpY0xyUWM3c3ZtUCs0SFZkdnMv?= =?utf-8?B?TmZHaGtGdDJpKytXbkVsa1BBUTZ2b1pqV1NvUkgzNFlsbWY4MzEyV2pMRzhU?= =?utf-8?B?NTl2b1FmdkRKeGxndTFvQlBpRUNEd0hLbFUwVUFOTXhuR2VaRG5Sd05uQjl3?= =?utf-8?B?eWRTL0tqdHFpdlM5M2paTGczQjRja3RhNFVxSGlObzVmTHVkVTU4cFBqSDl3?= =?utf-8?B?QjF0QmlRVmlTMlNwbkN0NmJyOW1jWTVwRE5rSTVoeGExeE11ZzNjUXhtNW5F?= =?utf-8?B?UkRINmxhYjk2aVVsbVFJcmlHdytWVUsxc3V2bkN1ZG5FNTJBRWUxMlhxSGZ1?= =?utf-8?B?anVObXRTbVlXakhxU05nY1o0UnRkclo1akZFczgydm5vbEhZcHo2KzFleXN3?= =?utf-8?B?NzFybGtQdDE5eDJJL0xBV1E2N0tUWXFQUVFXekNXaTRMZUxGVlllMmsweFBy?= =?utf-8?B?WFFPdFJFcEVCVkdSN1Q1NWVhQlpPWEliV2dYcjhwc0xCS1lCSTVwZzFmaGpX?= =?utf-8?B?QUFuMXp3aDk2cWc3bmlYZUtTdU9VMHFXNUJIaTFWZXFkcitOSFpMcExTZE90?= =?utf-8?B?L3FoRTNEN3EwR0RpLzI5K3M2dUMySnFLelpaOEk5N3pDeVpHdHFueFU1UG0w?= =?utf-8?B?QWw3MmJiRE1TaFhzWERHaWhHVFdJRFdEdDQ4cHNsNXNIYTJROVBBWTlWNXhy?= =?utf-8?B?TWE5K3gwZy9MMjlieUVTR1NobDZ2bUg1djV0dmdtYWd6VFlvUlByTmE3Qlo0?= =?utf-8?B?ekREZ0lhRmpFcHN2WS9DUmFieDRvQk55a1p0dmhYM2w4OFl4Y3ZUcjFJUFdV?= =?utf-8?B?a080b0RqY3VTdmc0VU1GV0dKTzNPUEpCakJkS3d6eTk2TmdURkVoUitKaGo3?= =?utf-8?B?aXZLS1RZeHFqd0NCVC94SFZPT3hHUUZRWVY4SC9lbEo1OVJHTzd2ZmI0WVlG?= =?utf-8?B?WmE1cmJKU20ybVdoaTVvNGFRZXpmY25lOW95dFlVUlduQ0laUVp4K1dYZzI2?= =?utf-8?B?QVdVaXlHT2RtWFRYcmdTb2tkdDAzd05UaXpXUk03Ym54V28rcFFKQm45K2hn?= =?utf-8?B?V3N6VnNRZFl2RVlQUUF3VGY3RXlORUQyWFQwN2hKbEhnL3B1VjZ0U0ZPY1Nj?= =?utf-8?B?TjUvaW95Y2Z2Y1ltVm40UDBTcnFmYWFJTzNwdzNvczE1ZEhWMURKdllicnU2?= =?utf-8?B?OFdJQS93bDU4L1R5TTBaSjNqUmd2YUhhelV3VVBkTFdoeE1MQUsvSFpLZkd4?= =?utf-8?B?M2JLeEJwVTY0bmpTcmQzZGtPSFpmSDNQUGJKUDlrWVRHZ2VTUHlBMFVOZk1X?= =?utf-8?Q?m6A6/fqXK/G9QuH/tF4hTUVec5EZf2o8=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR1801MB2070.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0d48eb65-ed20-4036-75e4-08d8a1068020 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Dec 2020 14:34:16.3422 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: F+eMqjL1rACl18YIP2v/H5SixzifU6GigDwvpYptBs2Wxv3+JPkRxWIHF7unypd9ieO6QfvCrVwDMJPOpiaQWg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR18MB1525 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343,18.0.737 definitions=2020-12-15_12:2020-12-15,2020-12-15 signatures=0 Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org DQoNCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IFVsZiBIYW5zc29uIDx1bGYu aGFuc3NvbkBsaW5hcm8ub3JnPg0KPlNlbnQ6IFR1ZXNkYXksIERlY2VtYmVyIDE1LCAyMDIwIDU6 MTMgUE0NCj5UbzogQmhhc2thcmEgQnVkaXJlZGxhIDxiYnVkaXJlZGxhQG1hcnZlbGwuY29tPg0K PkNjOiBLZWVzIENvb2sgPGtlZXNjb29rQGNocm9taXVtLm9yZz47IENvbGluIENyb3NzDQo+PGNj cm9zc0BhbmRyb2lkLmNvbT47IFRvbnkgTHVjayA8dG9ueS5sdWNrQGludGVsLmNvbT47IFN1bmls IEtvdnZ1cmkNCj5Hb3V0aGFtIDxzZ291dGhhbUBtYXJ2ZWxsLmNvbT47IGxpbnV4LW1tY0B2Z2Vy Lmtlcm5lbC5vcmc7IExpbnV4DQo+S2VybmVsIE1haWxpbmcgTGlzdCA8bGludXgta2VybmVsQHZn ZXIua2VybmVsLm9yZz47IENocmlzdG9waCBIZWxsd2lnDQo+PGhjaEBsc3QuZGU+DQo+U3ViamVj dDogUmU6IFtFWFRdIFJlOiBbUEFUQ0ggMS8yXSBtbWM6IFN1cHBvcnQga21zZyBkdW1wZXIgYmFz ZWQgb24NCj5wc3RvcmUvYmxrDQo+DQo+T24gVHVlLCAxNSBEZWMgMjAyMCBhdCAwNzo1MiwgQmhh c2thcmEgQnVkaXJlZGxhIDxiYnVkaXJlZGxhQG1hcnZlbGwuY29tPg0KPndyb3RlOg0KPj4NCj4+ DQo+Pg0KPj4gPi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+PiA+RnJvbTogVWxmIEhhbnNz b24gPHVsZi5oYW5zc29uQGxpbmFyby5vcmc+DQo+PiA+U2VudDogRnJpZGF5LCBEZWNlbWJlciAx MSwgMjAyMCA1OjAyIFBNDQo+PiA+VG86IEJoYXNrYXJhIEJ1ZGlyZWRsYSA8YmJ1ZGlyZWRsYUBt YXJ2ZWxsLmNvbT4NCj4+ID5DYzogS2VlcyBDb29rIDxrZWVzY29va0BjaHJvbWl1bS5vcmc+OyBD b2xpbiBDcm9zcw0KPj4gPjxjY3Jvc3NAYW5kcm9pZC5jb20+OyBUb255IEx1Y2sgPHRvbnkubHVj a0BpbnRlbC5jb20+OyBTdW5pbCBLb3Z2dXJpDQo+PiA+R291dGhhbSA8c2dvdXRoYW1AbWFydmVs bC5jb20+OyBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnOyBMaW51eA0KPj4gPktlcm5lbCBNYWls aW5nIExpc3QgPGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+OyBDaHJpc3RvcGggSGVsbHdp Zw0KPj4gPjxoY2hAbHN0LmRlPg0KPj4gPlN1YmplY3Q6IFtFWFRdIFJlOiBbUEFUQ0ggMS8yXSBt bWM6IFN1cHBvcnQga21zZyBkdW1wZXIgYmFzZWQgb24NCj4+ID5wc3RvcmUvYmxrDQo+PiA+DQo+ PiA+RXh0ZXJuYWwgRW1haWwNCj4+ID4NCj4+ID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+ID4tDQo+PiA+KyBD aHJpc3RvcGgNCj4+ID4NCj4+ID5PbiBNb24sIDcgRGVjIDIwMjAgYXQgMTI6NTgsIEJoYXNrYXJh IEJ1ZGlyZWRsYQ0KPj4gPjxiYnVkaXJlZGxhQG1hcnZlbGwuY29tPg0KPj4gPndyb3RlOg0KPj4g Pj4NCj4+ID4+IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0byBtbWNwc3RvcmUuIFRoZSBmdW5jdGlv bmluZyBvZiBtbWNwc3RvcmUgaXMNCj4+ID4+IHNpbWlsYXIgdG8gbXRkcHN0b3JlLiBtbWNwc3Rv cmUgd29ya3Mgb24gRlRMIGJhc2VkIGZsYXNoIGRldmljZXMNCj4+ID4+IHdoZXJlYXMgbXRkcHN0 b3JlIHdvcmtzIG9uIHJhdyBmbGFzaCBkZXZpY2VzLiBXaGVuIHRoZSBzeXN0ZW0NCj4+ID4+IGNy YXNoZXMsIG1tY3BzdG9yZSBzdG9yZXMgdGhlIGttc2cgcGFuaWMgYW5kIG9vcHMgbG9ncyB0byBh IHVzZXINCj4+ID4+IHNwZWNpZmllZCBNTUMgZGV2aWNlLg0KPj4gPj4NCj4+ID4+IEl0IGNvbGxl Y3RzIHRoZSBkZXRhaWxzIGFib3V0IHRoZSBob3N0IE1NQyBkZXZpY2UgdGhyb3VnaA0KPj4gPj4g cHN0b3JlL2JsayAiYmxrZGV2IiBwYXJhbWV0ZXIuIFRoZSB1c2VyIGNhbiBzcGVjaWZ5IHRoZSBN TUMgZGV2aWNlDQo+PiA+PiBpbiBtYW55IHdheXMgYnkgY2hlY2tpbmcgaW4gRG9jdW1lbnRhdGlv bi9hZG1pbi1ndWlkZS9wc3RvcmUtYmxrLnJzdC4NCj4+ID4+DQo+PiA+PiBUaGUgaW5kaXZpZHVh bCBtbWMgaG9zdCBkcml2ZXJzIGhhdmUgdG8gZGVmaW5lIHN1aXRhYmxlIHBvbGxpbmcgYW5kDQo+ PiA+PiBjbGVhbnVwIHN1YnJvdXRpbmVzIHRvIHdyaXRlIGttc2cgcGFuaWMvb29wcyBsb2dzIHRo cm91Z2ggbW1jcHN0b3JlLg0KPj4gPj4gVGhlc2UgbmV3IGhvc3Qgb3BlcmF0aW9ucyBhcmUgbmVl ZGVkIGFzIHBzdG9yZSBwYW5pYyB3cml0ZSBydW5zDQo+PiA+PiB3aXRoIGludGVycnVwdHMgZGlz YWJsZWQuDQo+PiA+DQo+PiA+QXBvbG9naWVzIGZvciB0aGUgZGVsYXkuIEkgaGF2ZSB0cmllZCB0 byBnaXZlIHRoaXMgc29tZSBtb3JlDQo+PiA+dGhpbmtpbmcsIG1vcmUgY29tbWVudHMgYmVsb3cu DQo+PiA+DQo+PiA+Wy4uLl0NCj4+ID4NCj4+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9j b3JlL2NvcmUuYyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jDQo+PiA+PiBpbmRleA0KPj4gPj4g ZDQyMDM3ZjBmMTBkLi43NjgyYjI2N2YxZDUgMTAwNjQ0DQo+PiA+PiAtLS0gYS9kcml2ZXJzL21t Yy9jb3JlL2NvcmUuYw0KPj4gPj4gKysrIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMNCj4+ID4+ IEBAIC01NjksNiArNTY5LDMwIEBAIGludCBtbWNfY3FlX3JlY292ZXJ5KHN0cnVjdCBtbWNfaG9z dCAqaG9zdCkNCj59DQo+PiA+PiBFWFBPUlRfU1lNQk9MKG1tY19jcWVfcmVjb3ZlcnkpOw0KPj4g Pj4NCj4+ID4+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfTU1DX1BTVE9SRSkNCj4+ID4+ICsvKioN Cj4+ID4+ICsgKiAgICAgbW1jX3dhaXRfZm9yX3BzdG9yZV9yZXEgLSBpbml0aWF0ZSBhIGJsb2Nr aW5nIG1tYyByZXF1ZXN0DQo+PiA+PiArICogICAgIEBob3N0OiBNTUMgaG9zdCB0byBzdGFydCBj b21tYW5kDQo+PiA+PiArICogICAgIEBtcnE6IE1NQyByZXF1ZXN0IHRvIHN0YXJ0DQo+PiA+PiAr ICoNCj4+ID4+ICsgKiAgICAgU3RhcnQgYSBibG9ja2luZyBNTUMgcmVxdWVzdCBmb3IgYSBob3N0 IGFuZCB3YWl0IGZvciB0aGUgcmVxdWVzdA0KPj4gPj4gKyAqICAgICB0byBjb21wbGV0ZSB0aGF0 IGlzIGJhc2VkIG9uIHBvbGxpbmcgYW5kIHRpbWVvdXQuDQo+PiA+PiArICovDQo+PiA+PiArdm9p ZCBtbWNfd2FpdF9mb3JfcHN0b3JlX3JlcShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdA0K Pj4gPj4gK21tY19yZXF1ZXN0ICptcnEpIHsNCj4+ID4+ICsgICAgICAgdW5zaWduZWQgaW50IHRp bWVvdXQ7DQo+PiA+PiArDQo+PiA+PiArICAgICAgIGhvc3QtPm9wcy0+cmVxX2NsZWFudXBfcGVu ZGluZyhob3N0KTsNCj4+ID4NCj4+ID5TbywgdGhlIGhvc3QgZHJpdmVyIHNob3VsZCB0aHJvdWdo IHRoaXMgY2FsbGJhY2ssIGJlIGFibGUgdG8NCj4+ID50ZXJtaW5hdGUgYW55IG9uZ29pbmcgcmVx dWVzdHMvY29tbWFuZHMgLSBhbmQgYWxzbyB0cnkgdG8gbWFrZSBzdXJlDQo+PiA+dGhhdCB0aGUg KGUpTU1DL1NEIGNhcmQgcmVtYWlucyBpbiB0aGUgZGF0YSB0cmFuc2ZlciBzdGF0ZS4gTW9yZW92 ZXIsDQo+PiA+bm8gbG9ja3MgYW5kIG5vIElSUXMgbXVzdCBiZSB1c2VkIHRvIG1hbmFnZSB0aGlz LCByaWdodD8NCj4+ID4NCj4+DQo+PiBZZXMsIHRoYXQncyBjb3JyZWN0Lg0KPj4NCj4+ID5IYXZl IHlvdSByZWFsbHkgdHJpZWQgaWYgdGhpcyB3b3JrcyBmb3IgcmVhbD8NCj4+ID4NCj4+DQo+PiBZ ZXMsIGl0J3MgYSB3b3JraW5nIHNvbHV0aW9uLiBQYXRjaCB3ZXJlIHN1Ym1pdHRlZCBhZnRlciB0 ZXN0aW5nLg0KPj4NCj4+ID4+ICsgICAgICAgbW1jX3N0YXJ0X3JlcXVlc3QoaG9zdCwgbXJxKTsN Cj4+ID4NCj4+ID5UaGlzIGxvb2tzIGxpa2UgdGhlIHdyb25nIGFwcHJvYWNoIHRvIG1lLCBhcyBp dCB3aWxsIHRyeSB0byByZS11c2UNCj4+ID50aGUgcmVndWxhciByZXF1ZXN0IGJhc2VkIHBhdGgs IHdoZXJlIHRoZSBob3N0IGRyaXZlciBpcyBhbGxvd2VkIHRvDQo+PiA+dXNlIGxvY2tzLCBJUlFz LCBETUFzLCBldGMsIGV0Yy4NCj4+ID4NCj4+DQo+PiBOby4gVGhlIGxvY2tzIG9uIGhvc3QgZHJp dmVyIHdpbGwgYmUgZHJvcHBlZCBpbiBDT05GSUdfTU1DX1BTVE9SRSBwYXRoLg0KPj4gU2ltaWxh cmx5LCB0aGUgSVJRcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggcG9sbGluZyBzdWJyb3V0aW5lcyBk dXJpbmcNCj4+IHBhbmljIHdyaXRlLiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgcGF0Y2ggMi8yIHdo aWNoIGRvZXMgdGhpcyBmb3IgY2F2aXVtIGhvc3QNCj5kcml2ZXIuDQo+DQo+WWVzLCBidXQgd2h5 IGlzIHJlbW92aW5nIHRoZSBsb2NrcyBva2F5IGZvciB0aGUgb3RoZXIgcmVndWxhciByZXF1ZXN0 IGNhc2U/DQo+DQo+SSBhc3N1bWUgdGhlIGxvY2tzIGFyZSB0aGVyZSBmb3IgYSByZWFzb24sIHJp Z2h0Pw0KPg0KU29ycnksIGl0IHdhcyBteSBtaXN0YWtlLiBUaGUgbG9ja3Mgd2lsbCBub3QgYmUg YXBwbGllZCB0byBwYW5pYyB3cml0ZSBjYXNlDQppbiBDT05GSUdfTU1DX1BTVE9SRSBwYXRoLiBU aGV5IHdpbGwgY29udGludWUgdG8gZXhpc3QgZm9yIHJlZ3VsYXINCnJlYWQvd3JpdGUgcGF0aC4u DQoNCkZvciBxdWljayByZWZlcmVuY2UsIGNvcHlpbmcgYSBzbmlwcGV0IGZyb20gY2F2aXVtIGhv c3QgZHJpdmVyIChwYXRjaCAyLzIpLiBob3N0LT5wc3RvcmUNCndpbGwgYmUgdHJ1ZSBmb3IgcGFu aWMgd3JpdGUuDQpzdGF0aWMgdm9pZCB0aHVuZGVyX21tY19hY3F1aXJlX2J1cyhzdHJ1Y3QgY3Zt X21tY19ob3N0ICpob3N0KQ0KIHsNCisjaWYgSVNfRU5BQkxFRChDT05GSUdfTU1DX1BTVE9SRSkN CisJaWYgKCFob3N0LT5wc3RvcmUpDQorCQlkb3duKCZob3N0LT5tbWNfc2VyaWFsaXplcik7DQor I2Vsc2UNCiAJZG93bigmaG9zdC0+bW1jX3NlcmlhbGl6ZXIpOw0KKyNlbmRpZg0KIH0NCg0KDQo+ Pg0KPj4gPkkgd291bGQgc3VnZ2VzdCBpbnZlbnRpbmcgYSBuZXcgc2VwYXJhdGUgcmVxdWVzdCBw YXRoIGFuZCBhIG5ldyBob3N0DQo+PiA+b3BzLCB0byBkZWFsIHdpdGggdGhlc2Uga2luZHMgb2Yg cmVxdWVzdHMuDQo+PiA+DQo+Pg0KPj4gVGhlIHBvbGxpbmcgYW5kIGNsZWFudXAgaG9zdCBvcGVy YXRpb25zIGFyZSB0aGUgb25lcyBpbnZlbnRlZCBmb3IgdGhpcw0KPnB1cnBvc2UuDQo+PiBQb2xs aW5nIHRvIHJlcGxhY2UgSVJRcyBhbmQgY2xlYW51cCB0byB0ZXJtaW5hdGUgb25nb2luZw0KPnJl cXVlc3RzL2NvbW1hbmRzLg0KPg0KPkkgdW5kZXJzdGFuZCB0aGUgYXBwcm9hY2ggeW91IGhhdmUg dGFrZW4sIGJ1dCB3aGF0IEkgYW0gc2F5aW5nIGlzIHRoYXQgSSBkb24ndA0KPnRoaW5rIGl0IGlz IHRoZSBiZXN0IG9uZSB0byBjaG9vc2UuDQo+DQo+VGhlbiBJIHRoaW5rIGl0J3MgYmV0dGVyIHRv IGludmVudCBhbiBlbnRpcmVseSBuZXcgcGF0aCwgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvDQo+dHdl YWsgdGhlIGV4aXN0aW5nIG9uZS4gRm9yIGV4YW1wbGUsIGluIHlvdXIgY2FzZSB5b3UgY291bGQg bGVhdmUgdGhlIGxvY2sgdG8NCj5iZSB1c2VkIChpbiBwYXRjaDIpIGZvciB0aGUgZXhpc3Rpbmcg cmVndWxhciByZXF1ZXN0IHBhdGgsIGJ1dCBieXBhc3MgdGhlIGxvY2tzDQo+YW5kIHVzZSBwb2xs aW5nIGluIHRoZSBuZXcgb25lLg0KPg0KDQpUaGUgYWJvdmUgY2xhcmlmaWNhdGlvbiBzaG91bGQg YW5zd2VyIHRoaXMuDQoNCj4+DQo+PiA+SW4gdGhpcyB3YXksIHRoZSBiZWxvdyBwYXJ0IHdpdGgg aG9zdC0+b3BzLT5yZXFfY29tcGxldGlvbl9wb2xsLCBjYW4NCj4+ID5wcm9iYWJseSBiZSByZW1v dmVkLiBJbnN0ZWFkIHdlIG1heSBqdXN0IHdhaXQgZm9yIHRoZSByZXF1ZXN0IHRvDQo+PiA+cmV0 dXJuIGZyb20gdGhlIG5ldyByZXF1ZXN0IHBhdGguDQo+PiA+DQo+Pg0KPj4gVGhpcyBpcyBub3Qg cG9zc2libGUgdW5sZXNzIENQVSBpdHNlbGYgZG9lcyB0aGUgbW1jIHdyaXRlICh0aHJvdWdoIHNv bWUNCj5ibG9jayBpbnRlcmZhY2U/KS4NCj4+IElmIHRoZSBhbnN3ZXIgaXMgYmxvY2sgaW50ZXJm YWNlLCBzbGVlcGluZyBjYW5ub3QgYmUgYXZvaWRlZCBhcyBwYXJ0IG9mIGl0Lg0KPg0KPkkgd2Fz bid0IHRoaW5raW5nIG9mIHRoZSBibG9jayBpbnRlcmZhY2UsIGJ1dCByYXRoZXIgb2YgdGhlIGlu dGVybmFsIGJlaGF2aW9yIG9mDQo+YW4gbW1jIGhvc3QgZHJpdmVyLg0KPg0KPkZvciBkYXRhIHRy YW5zZmVycywgaXQncyBjb21tb24gdG8gdXNlIERNQSB3aGVuIHRoYXQgaXMgc3VwcG9ydGVkLiBJ ZiBETUENCj5kb2Vzbid0IHdvcmssIGl0J3MgcHJvYmFibHkgYSBGSUZPIGJlaW5nIHJlYWQvd3Jp dHRlbiB0byBiYXNlZCB1cG9uIHNvbWUNCj5JUlFzIHRlbGxpbmcgd2hlbiByZWFkL3dyaXRlIHNo b3VsZCBiZSBkb25lLiBPZiBjb3Vyc2UsIHRoZXJlIGFyZSBvdGhlciBjYXNlcw0KPmFzIHdlbGwu DQo+DQo+Rm9yIGNvbW1hbmRzLCBJIGV4cGVjdCB0aG9zZSB0byBiZSBtYW5hZ2VkIHRocm91Z2gg SVJRcy4NCj4NCj5UaGF0IHNhaWQsIGFsbCB0aGVzZSB0aGluZ3MgYXJlIHByZWZlcmFibHkgbWFu YWdlZCB0aHJvdWdoIGEgcG9sbGluZyBiYXNlZA0KPm1ldGhvZCBpbnN0ZWFkLCB3aGVuIGRvaW5n IHRoZSBwYW5pYyB3cml0ZXMsIGNvcnJlY3Q/DQo+DQo+PiBEbyB5b3UgcmVhbGx5IHRoaW5rIERN QSBjYW4gYmUgYXZvaWRlZCBmb3IgTU1DIHBhbmljIHdyaXRlcz8NCj4NCj5UaGF0IGRlcGVuZHMg b24gdGhlIEhXLg0KPg0KPkNlcnRhaW5seSB0aGVyZSBhcmUgbG90cyBvZiBjYXNlcyB3aGVyZSBE TUEgaXNuJ3QgdGhlIG9ubHkgd2F5LCBidXQgaW5zdGVhZCBpdCdzDQo+cGVyZmVjdGx5IHBvc3Np YmxlIHRvIGZhbGwgYmFjayB0byBwb2xsaW5nIGJhc2VkIG1vZGUuDQo+DQo+Pg0KPj4gPj4gKw0K Pj4gPj4gKyAgICAgICBpZiAobXJxLT5kYXRhKSB7DQo+PiA+PiArICAgICAgICAgICAgICAgdGlt ZW91dCA9IG1ycS0+ZGF0YS0+dGltZW91dF9ucyAvIE5TRUNfUEVSX01TRUM7DQo+PiA+PiArICAg ICAgICAgICAgICAgaG9zdC0+b3BzLT5yZXFfY29tcGxldGlvbl9wb2xsKGhvc3QsIHRpbWVvdXQp Ow0KPj4gPj4gKyAgICAgICB9DQo+PiA+PiArfQ0KPj4gPj4gK0VYUE9SVF9TWU1CT0wobW1jX3dh aXRfZm9yX3BzdG9yZV9yZXEpOw0KPj4gPj4gKyNlbmRpZg0KPj4gPj4gKw0KPj4gPj4gIC8qKg0K Pj4gPj4gICAqICAgICBtbWNfaXNfcmVxX2RvbmUgLSBEZXRlcm1pbmUgaWYgYSAnY2FwX2NtZF9k dXJpbmdfdGZyJyByZXF1ZXN0IGlzDQo+PiA+ZG9uZQ0KPj4gPj4gICAqICAgICBAaG9zdDogTU1D IGhvc3QNCj4+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL21tY3BzdG9yZS5jDQo+ PiA+PiBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jcHN0b3JlLmMgbmV3IGZpbGUgbW9kZSAxMDA2NDQg aW5kZXgNCj4+ID4+IDAwMDAwMDAwMDAwMC4uMTExM2VhZTA3NTZjDQo+PiA+PiAtLS0gL2Rldi9u dWxsDQo+PiA+PiArKysgYi9kcml2ZXJzL21tYy9jb3JlL21tY3BzdG9yZS5jDQo+PiA+PiBAQCAt MCwwICsxLDMwMiBAQA0KPj4gPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w DQo+PiA+PiArLyoNCj4+ID4+ICsgKiBNTUMgcHN0b3JlIHN1cHBvcnQgYmFzZWQgb24gcHN0b3Jl L2Jsaw0KPj4gPj4gKyAqDQo+PiA+PiArICogQ29weXJpZ2h0IChjKSAyMDIwIE1hcnZlbGwuDQo+ PiA+PiArICogQXV0aG9yOiBCaGFza2FyYSBCdWRpcmVkbGEgPGJidWRpcmVkbGFAbWFydmVsbC5j b20+ICAqLw0KPj4gPj4gKw0KPj4gPj4gKyNkZWZpbmUgcHJfZm10KGZtdCkgIm1tY3BzdG9yZTog IiBmbXQNCj4+ID4+ICsNCj4+ID4+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+PiA+PiAr I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPj4gPj4gKyNpbmNsdWRlIDxsaW51eC9wc3RvcmVf YmxrLmg+DQo+PiA+PiArI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPg0KPj4gPj4gKyNpbmNsdWRl IDxsaW51eC9tb3VudC5oPg0KPj4gPj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+PiA+PiAr I2luY2x1ZGUgPGxpbnV4L21tYy9tbWMuaD4NCj4+ID4+ICsjaW5jbHVkZSA8bGludXgvbW1jL2hv c3QuaD4NCj4+ID4+ICsjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4NCj4+ID4+ICsjaW5jbHVk ZSA8bGludXgvc2NhdHRlcmxpc3QuaD4NCj4+ID4+ICsjaW5jbHVkZSAiYmxvY2suaCINCj4+ID4+ ICsjaW5jbHVkZSAiY2FyZC5oIg0KPj4gPj4gKyNpbmNsdWRlICJjb3JlLmgiDQo+PiA+PiArDQo+ PiA+PiArc3RhdGljIHN0cnVjdCBtbWNwc3RvcmVfY29udGV4dCB7DQo+PiA+PiArICAgICAgIGNo YXIgZGV2X25hbWVbQkRFVk5BTUVfU0laRV07DQo+PiA+PiArICAgICAgIGludCBwYXJ0bm87DQo+ PiA+PiArICAgICAgIHNlY3Rvcl90IHN0YXJ0X3NlY3Q7DQo+PiA+PiArICAgICAgIHNlY3Rvcl90 IHNpemU7DQo+PiA+PiArICAgICAgIHN0cnVjdCBwc3RvcmVfZGV2aWNlX2luZm8gZGV2Ow0KPj4g Pj4gKyAgICAgICBzdHJ1Y3QgcHN0b3JlX2Jsa19jb25maWcgY29uZjsNCj4+ID4+ICsgICAgICAg c3RydWN0IHBzdG9yZV9ibGtfaW5mbyBpbmZvOw0KPj4gPj4gKw0KPj4gPj4gKyAgICAgICBjaGFy ICpzdWI7DQo+PiA+PiArICAgICAgIHN0cnVjdCBtbWNfY2FyZCAqY2FyZDsNCj4+ID4+ICsgICAg ICAgc3RydWN0IG1tY19yZXF1ZXN0ICptcnE7DQo+PiA+PiArfSBvb3BzX2N4dDsNCj4+ID4+ICsN Cj4+ID4+ICtzdGF0aWMgdm9pZCBtbWNfcHJlcF9yZXEoc3RydWN0IG1tY19yZXF1ZXN0ICptcnEs DQo+PiA+PiArICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNlY3Rfb2Zmc2V0LCB1bnNpZ25l ZCBpbnQgbnNlY3RzLA0KPj4gPj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAq c2csIHUzMiBvcGNvZGUsIHVuc2lnbmVkIGludA0KPj4gPj4gK2ZsYWdzKSB7DQo+PiA+PiArICAg ICAgIG1ycS0+Y21kLT5vcGNvZGUgPSBvcGNvZGU7DQo+PiA+PiArICAgICAgIG1ycS0+Y21kLT5h cmcgPSBzZWN0X29mZnNldDsNCj4+ID4+ICsgICAgICAgbXJxLT5jbWQtPmZsYWdzID0gTU1DX1JT UF9SMSB8IE1NQ19DTURfQURUQzsNCj4+ID4+ICsNCj4+ID4+ICsgICAgICAgaWYgKG5zZWN0cyA9 PSAxKSB7DQo+PiA+PiArICAgICAgICAgICAgICAgbXJxLT5zdG9wID0gTlVMTDsNCj4+ID4+ICsg ICAgICAgfSBlbHNlIHsNCj4+ID4+ICsgICAgICAgICAgICAgICBtcnEtPnN0b3AtPm9wY29kZSA9 IE1NQ19TVE9QX1RSQU5TTUlTU0lPTjsNCj4+ID4+ICsgICAgICAgICAgICAgICBtcnEtPnN0b3At PmFyZyA9IDA7DQo+PiA+PiArICAgICAgICAgICAgICAgbXJxLT5zdG9wLT5mbGFncyA9IE1NQ19S U1BfUjFCIHwgTU1DX0NNRF9BQzsNCj4+ID4+ICsgICAgICAgfQ0KPj4gPj4gKw0KPj4gPj4gKyAg ICAgICBtcnEtPmRhdGEtPmJsa3N6ID0gU0VDVE9SX1NJWkU7DQo+PiA+PiArICAgICAgIG1ycS0+ ZGF0YS0+YmxvY2tzID0gbnNlY3RzOw0KPj4gPj4gKyAgICAgICBtcnEtPmRhdGEtPmZsYWdzID0g ZmxhZ3M7DQo+PiA+PiArICAgICAgIG1ycS0+ZGF0YS0+c2cgPSBzZzsNCj4+ID4+ICsgICAgICAg bXJxLT5kYXRhLT5zZ19sZW4gPSAxOw0KPj4gPj4gK30NCj4+ID4+ICsNCj4+ID4+ICtzdGF0aWMg aW50IG1tY3BzdG9yZV9yZHdyX3JlcShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBuc2Vj dHMsDQo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2VjdF9vZmZz ZXQsIHVuc2lnbmVkIGludA0KPj4gPj4gK2ZsYWdzKSB7DQo+PiA+PiArICAgICAgIHN0cnVjdCBt bWNwc3RvcmVfY29udGV4dCAqY3h0ID0gJm9vcHNfY3h0Ow0KPj4gPj4gKyAgICAgICBzdHJ1Y3Qg bW1jX3JlcXVlc3QgKm1ycSA9IGN4dC0+bXJxOw0KPj4gPj4gKyAgICAgICBzdHJ1Y3QgbW1jX2Nh cmQgKmNhcmQgPSBjeHQtPmNhcmQ7DQo+PiA+PiArICAgICAgIHN0cnVjdCBtbWNfaG9zdCAqaG9z dCA9IGNhcmQtPmhvc3Q7DQo+PiA+PiArICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCBzZzsNCj4+ ID4+ICsgICAgICAgdTMyIG9wY29kZTsNCj4+ID4+ICsNCj4+ID4+ICsgICAgICAgaWYgKGZsYWdz ID09IE1NQ19EQVRBX1JFQUQpDQo+PiA+PiArICAgICAgICAgICAgICAgb3Bjb2RlICA9IChuc2Vj dHMgPiAxKSA/DQo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICBNTUNfUkVBRF9NVUxUSVBM RV9CTE9DSyA6DQo+TU1DX1JFQURfU0lOR0xFX0JMT0NLOw0KPj4gPj4gKyAgICAgICBlbHNlDQo+ PiA+PiArICAgICAgICAgICAgICAgb3Bjb2RlID0gKG5zZWN0cyA+IDEpID8NCj4+ID4+ICsgICAg ICAgICAgICAgICAgICAgICAgIE1NQ19XUklURV9NVUxUSVBMRV9CTE9DSyA6IE1NQ19XUklURV9C TE9DSzsNCj4+ID4+ICsNCj4+ID4+ICsgICAgICAgbW1jX3ByZXBfcmVxKG1ycSwgc2VjdF9vZmZz ZXQsIG5zZWN0cywgJnNnLCBvcGNvZGUsIGZsYWdzKTsNCj4+ID4+ICsgICAgICAgc2dfaW5pdF9v bmUoJnNnLCBidWYsIChuc2VjdHMgPDwgU0VDVE9SX1NISUZUKSk7DQo+PiA+PiArICAgICAgIG1t Y19zZXRfZGF0YV90aW1lb3V0KG1ycS0+ZGF0YSwgY3h0LT5jYXJkKTsNCj4+ID4+ICsNCj4+ID4+ ICsgICAgICAgbW1jX2NsYWltX2hvc3QoaG9zdCk7DQo+PiA+PiArICAgICAgIG1tY193YWl0X2Zv cl9yZXEoaG9zdCwgbXJxKTsNCj4+ID4+ICsgICAgICAgbWRlbGF5KG1ycS0+ZGF0YS0+dGltZW91 dF9ucyAvIE5TRUNfUEVSX01TRUMpOw0KPj4gPj4gKyAgICAgICBtbWNfcmVsZWFzZV9ob3N0KGhv c3QpOw0KPj4gPj4gKw0KPj4gPj4gKyAgICAgICBpZiAobXJxLT5jbWQtPmVycm9yKSB7DQo+PiA+ PiArICAgICAgICAgICAgICAgcHJfZXJyKCJDbWQgZXJyb3I6ICVkXG4iLCBtcnEtPmNtZC0+ZXJy b3IpOw0KPj4gPj4gKyAgICAgICAgICAgICAgIHJldHVybiBtcnEtPmNtZC0+ZXJyb3I7DQo+PiA+ PiArICAgICAgIH0NCj4+ID4+ICsgICAgICAgaWYgKG1ycS0+ZGF0YS0+ZXJyb3IpIHsNCj4+ID4+ ICsgICAgICAgICAgICAgICBwcl9lcnIoIkRhdGEgZXJyb3I6ICVkXG4iLCBtcnEtPmRhdGEtPmVy cm9yKTsNCj4+ID4+ICsgICAgICAgICAgICAgICByZXR1cm4gbXJxLT5kYXRhLT5lcnJvcjsNCj4+ ID4+ICsgICAgICAgfQ0KPj4gPj4gKw0KPj4gPj4gKyAgICAgICByZXR1cm4gMDsNCj4+ID4+ICt9 DQo+PiA+PiArDQo+PiA+PiArc3RhdGljIHNzaXplX3QgbW1jcHN0b3JlX3dyaXRlKGNvbnN0IGNo YXIgKmJ1Ziwgc2l6ZV90IHNpemUsDQo+PiA+PiArbG9mZl90DQo+PiA+PiArb2ZmKSB7DQo+PiA+ PiArICAgICAgIHN0cnVjdCBtbWNwc3RvcmVfY29udGV4dCAqY3h0ID0gJm9vcHNfY3h0Ow0KPj4g Pj4gKyAgICAgICBpbnQgcmV0Ow0KPj4gPj4gKw0KPj4gPj4gKyAgICAgICByZXQgPSBtbWNwc3Rv cmVfcmR3cl9yZXEoYnVmLCAoc2l6ZSA+PiBTRUNUT1JfU0hJRlQpLA0KPj4gPj4gKyAgICAgICAg ICAgICAgIGN4dC0+c3RhcnRfc2VjdCArIChvZmYgPj4gU0VDVE9SX1NISUZUKSwgTU1DX0RBVEFf V1JJVEUpOw0KPj4gPj4gKyAgICAgICBpZiAocmV0KQ0KPj4gPj4gKyAgICAgICAgICAgICAgIHJl dHVybiByZXQ7DQo+PiA+PiArDQo+PiA+PiArICAgICAgIHJldHVybiBzaXplOw0KPj4gPj4gK30N Cj4+ID4+ICsNCj4+ID4+ICtzdGF0aWMgc3NpemVfdCBtbWNwc3RvcmVfcmVhZChjaGFyICpidWYs IHNpemVfdCBzaXplLCBsb2ZmX3Qgb2ZmKSB7DQo+PiA+PiArICAgICAgIHN0cnVjdCBtbWNwc3Rv cmVfY29udGV4dCAqY3h0ID0gJm9vcHNfY3h0Ow0KPj4gPj4gKyAgICAgICB1bnNpZ25lZCBpbnQg c2VjdF9vZmYgPSBjeHQtPnN0YXJ0X3NlY3QgICsgKG9mZiA+PiBTRUNUT1JfU0hJRlQpOw0KPj4g Pj4gKyAgICAgICB1bnNpZ25lZCBsb25nIHNlY3RzID0gKGN4dC0+Y29uZi5rbXNnX3NpemUgPj4g U0VDVE9SX1NISUZUKTsNCj4+ID4+ICsgICAgICAgaW50IHJldDsNCj4+ID4+ICsNCj4+ID4+ICsg ICAgICAgaWYgKHVubGlrZWx5KCFidWYgfHwgIXNpemUpKQ0KPj4gPj4gKyAgICAgICAgICAgICAg IHJldHVybiAtRUlOVkFMOw0KPj4gPj4gKw0KPj4gPj4gKyAgICAgICByZXQgPSBtbWNwc3RvcmVf cmR3cl9yZXEoY3h0LT5zdWIsIHNlY3RzLCBzZWN0X29mZiwNCj4+ID5NTUNfREFUQV9SRUFEKTsN Cj4+ID4+ICsgICAgICAgaWYgKHJldCkNCj4+ID4+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0 Ow0KPj4gPj4gKyAgICAgICBtZW1jcHkoYnVmLCBjeHQtPnN1Yiwgc2l6ZSk7DQo+PiA+PiArDQo+ PiA+PiArICAgICAgIHJldHVybiBzaXplOw0KPj4gPj4gK30NCj4+ID4NCj4+ID5JdCBsb29rcyBs aWtlIHRoZSBhYm92ZSBJL08gcmVhZC93cml0ZSBpbnRlcmZhY2UgZm9yIHBzdG9yZSBpcw0KPj4g PmludGVuZGVkIHRvIGJlIHVzZWQgd2hlbiB0aGUgcGxhdGZvcm0gaXMgdXAgYW5kIHJ1bm5pbmcg YW5kIG5vdCBkdXJpbmcgYQ0KPnBhbmljLCBjb3JyZWN0Pw0KPj4gPg0KPj4gPklmIHNvLCBJIGRv bid0IGdldCB3aHkgaXQgY2FuJ3QgdXNlIHRoZSByZWd1bGFyIGJsb2NrIGludGVyZmFjZSwgYXMN Cj4+ID5hbnkgb3RoZXIgZmlsZSBzeXN0ZW0gZG9lcywgZm9yIGV4YW1wbGU/DQo+PiA+DQo+Pg0K Pj4gVGhlIHBzdG9yZSByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSB1c2VkIGFzIHBhcnQg b2YgcHN0b3JlIGZpbGUNCj4+IHN5c3RlbSBtb3VudGluZyB0byByZXRyaWV2ZSB0aGUgc3RvcmVk IGxvZ3MgZnJvbSBNTUMgcGxhdGZvcm0gYmFja2VuZA0KPj4gYW5kIHRvIG1hbmFnZSBwc3RvcmUg cmVhZC93cml0ZSBjb3VudGVycy4gU2xlZXBpbmcgd291bGQgYmUgYWxsb3dlZA0KPj4gZHVyaW5n IHRoaXMgdGltZS4gV2hlcmVhcywgcHN0b3JlIFBBTklDIHdyaXRlIHdpbGwgYmUgY2FsbGVkIGlm IHRoZXJlIGhhcHBlbnMNCj5hIGNyYXNoIGluIHRoZSBzeXN0ZW0uIFNsZWVwaW5nIGlzIE5PVCBh bGxvd2VkIGF0IHRoaXMgdGltZS4NCj4+DQo+PiBJdCBzZWVtcyB5b3UgYXJlIG1peGluZyB0aGUg c2xlZXBpbmcgcGF0aHMgb2YgdGhlIG1tY3BzdG9yZSB3aXRoIHRoYXQgb2YNCj5hdG9taWMgcGF0 aC4NCj4NCj5ObywgSSBhbSBub3QgbWl4aW5nIHRoZW0sIGJ1dCBxdWVzdGlvbmluZyB0aGVtLg0K Pg0KPkZvciB0aGUgbm9uIGF0b21pYyBwYXRoLCBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IHRoZSBw c3RvcmUgZmlsZSBzeXN0ZW0NCj5tb3VudGluZywgZXRjLCBkZXNlcnZlcyB0byBiZSBtYW5hZ2Vk IHRocm91Z2ggaXRzIG93biBzcGVjaWZpYyBvcHM/DQo+QXJlIHRoZXJlIGFueSBzcGVjaWZpYyBy ZWFzb25zIGZvciB0aGlzIHRoYXQgSSBhbSBtaXNzaW5nPw0KPg0KDQpTZWVtcyBnZW5lcmljIHdh eSBpcyB1bmRlcmdvaW5nIHNvbWUgY2hhbmdlcy4gS2VlcyBhbHJlYWR5IEFDS2VkDQp0aGUgbW1j cHN0b3JlIHJlZ2lzdHJhdGlvbiB0aHJvdWdoIGJsb2NrIGRldmljZSByZWdpc3RyYXRpb24uIA0K DQo+SW4gcHJpbmNpcGxlLCBmb3Igbm9uIGF0b21pYyBwYXRoLCBJIHdvdWxkIHJhdGhlciBzZWUg dGhhdCB0aGUgcHN0b3JlIGZpbGUgc3lzdGVtDQo+c2hvdWxkIGJlIGFibGUgdG8gYmUgbW91bnRl ZCBvbiB0b3Agb2YgYW55IGdlbmVyaWMgYmxvY2sgZGV2aWNlIHBhcnRpdGlvbiAtDQo+d2l0aG91 dCByZXF1aXJpbmcgdGhlIGJsb2NrIGRldmljZSBkcml2ZXIgdG8gaW1wbGVtZW50IHNwZWNpZmlj IHBzdG9yZSBvcHMuDQo+DQoNClNjb3BlIHRvIGFuc3dlciB0aGlzIGlzIG91dCBvZiBtbWNwc3Rv cmUgZHJpdmVyLiBQc3RvcmUvYmxrIGRyaXZlciBoYXZlIHRvIA0KYW5zd2VyIHRoaXMuDQoNCj4+ DQo+Pg0KPj4gPj4gKw0KPj4gPj4gK3N0YXRpYyB2b2lkIG1tY3BzdG9yZV9wYW5pY193cml0ZV9y ZXEoY29uc3QgY2hhciAqYnVmLA0KPj4gPj4gKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBu c2VjdHMsIHVuc2lnbmVkIGludCBzZWN0X29mZnNldCkgew0KPj4gPj4gKyAgICAgICBzdHJ1Y3Qg bW1jcHN0b3JlX2NvbnRleHQgKmN4dCA9ICZvb3BzX2N4dDsNCj4+ID4+ICsgICAgICAgc3RydWN0 IG1tY19yZXF1ZXN0ICptcnEgPSBjeHQtPm1ycTsNCj4+ID4+ICsgICAgICAgc3RydWN0IG1tY19j YXJkICpjYXJkID0gY3h0LT5jYXJkOw0KPj4gPj4gKyAgICAgICBzdHJ1Y3QgbW1jX2hvc3QgKmhv c3QgPSBjYXJkLT5ob3N0Ow0KPj4gPj4gKyAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7DQo+ PiA+PiArICAgICAgIHUzMiBvcGNvZGU7DQo+PiA+PiArDQo+PiA+PiArICAgICAgIG9wY29kZSA9 IChuc2VjdHMgPiAxKSA/IE1NQ19XUklURV9NVUxUSVBMRV9CTE9DSyA6DQo+PiA+TU1DX1dSSVRF X0JMT0NLOw0KPj4gPj4gKyAgICAgICBtbWNfcHJlcF9yZXEobXJxLCBzZWN0X29mZnNldCwgbnNl Y3RzLCAmc2csIG9wY29kZSwNCj4+ID5NTUNfREFUQV9XUklURSk7DQo+PiA+PiArICAgICAgIHNn X2luaXRfb25lKCZzZywgYnVmLCAobnNlY3RzIDw8IFNFQ1RPUl9TSElGVCkpOw0KPj4gPj4gKyAg ICAgICBtbWNfc2V0X2RhdGFfdGltZW91dChtcnEtPmRhdGEsIGN4dC0+Y2FyZCk7DQo+PiA+PiAr DQo+PiA+PiArICAgICAgIG1tY19jbGFpbV9ob3N0KGhvc3QpOw0KPj4gPg0KPj4gPlNvLCB0aGlz IHdpbGwgdXNlIHNldmVyYWwgbG9ja3MsIHdoaWNoIG1heSBiZSBhIHByb2JsZW0sIHJpZ2h0Pw0K Pj4gPg0KPj4NCj4+IE5vLCBhcyBzYWlkIGFib3ZlIGxvY2tzIGFyZSBwcmVzZW50IG9uIGhvc3Qg ZHJpdmVyIHdpbGwgYmUgZHJvcHBlZCBpbg0KPj4gQ09ORklHX01NQ19QU1RPUkUgcGF0aC4NCj4N Cj5QbGVhc2UgaGF2ZSBhIGxvb2sgYXQgdGhlIGNvZGUgaW1wbGVtZW50aW5nIG1tY19jbGFpbV9o b3N0KCkuIEl0J3Mgbm90IGp1c3QgYQ0KPnNpbXBsZSBzcGluX2xvY2ssIGJ1dCB0aGVyZSBpcyBh bHNvIGEgd2FpdF9xdWV1ZSBhbmQgcnVudGltZSBQTSBiZWluZw0KPm1hbmFnZWQgZnJvbSB0aGVy ZS4NCj4NCj4+DQo+PiA+TW9yZW92ZXIsIGlmIHRoZXJlIGlzIGFuIG9uZ29pbmcgSS9PIHJlcXVl c3QgKG9yIGFueSBvdGhlciBhY3RpdmUNCj4+ID5jb21tYW5kL3JlcXVlc3QgZm9yIHRoYXQgbWF0 dGVyKSwgdGhlbiB0aGUgaG9zdCBpcyBhbHJlYWR5IGNsYWltZWQgYnkNCj4+ID50aGUgbW1jIGNv cmUuIE5vcm1hbGx5LCB3ZSB3b3VsZCB0aGVuIHdhaXQgZm9yIHRoYXQgcmVxdWVzdCB0byBiZQ0K Pj4gPmNvbXBsZXRlZCwgdG8gdHJpZ2dlciB0aGUgcmVsZWFzZSBvZiB0aGUgaG9zdCBhbmQgdGhl biBhbGxvdyB1cyB0byBjbGFpbSBpdA0KPmhlcmUuDQo+PiA+DQo+PiA+SG93ZXZlciwgYmVjYXVz ZSBvZiB0aGUga2VybmVsIHBhbmljLCBJIGFzc3VtZSBpdCdzIHF1aXRlIGxpa2VseSB0aGF0DQo+ PiA+YW55IG9uZ29pbmcgcmVxdWVzdCB3aWxsIG5vdCBiZSBjb21wbGV0ZWQgYXQgYWxsLCBhcyBJ UlFzIG1heSBub3QNCj4+ID53b3JrLCBmb3IgZXhhbXBsZS4NCj4+ID4NCj4+ID5JbiBvdGhlciB3 b3Jkcywgd2UgbWF5IGJlIGhhbmdpbmcgaGVyZSBmb3JldmVyIHdhaXRpbmcgdG8gY2xhaW0gdGhl IGhvc3QuDQo+PiA+VW5sZXNzIHdlIGFyZSBsdWNreSwgYmVjYXVzZSBvZiBubyBvbmdvaW5nIHJl cXVlc3QsIGFsdGhvdWdoIHdlIHdvdWxkDQo+PiA+c3RpbGwgaGF2ZSB0byBzdWNjZWVkIHdhbGtp bmcgdGhyb3VnaCBhbGwgdGhlIGxvY2tpbmcsIGV0YywgaW4NCj5tbWNfY2xhaW1faG9zdCgpLg0K Pj4gPg0KDQpJIGFncmVlIHdpdGggeW91ciBjb25jZXJucyBhYm91dCBzcGluX2xvY2ssIHdhaXRf cXVldWUgYW5kIHJ1bnRpbWUgUE0gaW4NCm1tY19jbGFpbV9ob3N0KCksIGJ1dCBub3QgdGhlIG9u Z29pbmcgcmVxdWVzdHMgcHJlc2VuY2UuIFRoZXkgbXVzdCANCmhhdmUgdGVybWluYXRlZCBjbGVh bmx5IHRocm91Z2ggaG9zdC0+b3BzLT5yZXFfY2xlYW51cF9wZW5kaW5nKGhvc3QpIA0KYmVmb3Jl IHJlYWNoaW5nIG1tY19jbGFpbV9ob3N0KCkuDQoNCkkgd2lsbCBjb21lIHVwIHdpdGggc29tZXRo aW5nIHRvIGFkZHJlc3MgdGhlc2UgaW4gdGhlIG5leHQgcGF0Y2guDQoNCj4+DQo+PiBob3N0LT5v cHMtPnJlcV9jbGVhbnVwX3BlbmRpbmcoaG9zdCkgd2FzIGludHJvZHVjZWQgdG8gY2xlYW4gdXAg dGhlDQo+PiBob3N0LT5vcHMtPnF1ZXVlZA0KPj4gYW5kIG9uZ29pbmcgcmVxdWVzdHMvY29tbWFu ZHMuIFRlcm1pbmF0aW5nIG9uZ29pbmcgcmVxdWVzdHMgaXMgbm90IGENCj4+IGNvbXBsaWNhdGVk IHRoaW5nIGZvciB0aGUgaG9zdCBkcml2ZXJzLg0KPg0KPldlbGwsIEkgZG9uJ3QgYWdyZWUuIFJl c2V0dGluZyB0aGUgaG9zdCBjb250cm9sbGVyIHNob3VsZCBub3QgYmUgYSBiaWcgcHJvYmxlbSwN Cj5idXQgSSBhbSBtb3JlIHdvcnJpZWQgYWJvdXQgd2hhdCBzdGF0ZSB0aGlzIHdpbGwgYnJpbmcg dGhlIGVNTUMvU0QgY2FyZCBpbi4NCj4NCg0KSSBhbSBub3Qgc3VyZSB3aHkgYXJlIHlvdSBzYXlp bmcgaG9zdCBjb250cm9sbGVyIHJlc2V0LiBObyB3YXJlIGhvc3QgY29udHJvbGxlcg0KcmVzZXQg d2FzIHBlcmZvcm1lZCBhcyBwYXJ0IG9mIHRoZXNlIHBhdGNoZXMuDQoNCj5JdCBzb3VuZHMgdG8g bWUgdGhhdCB0aGUgb25seSBvcHRpb24gaXMgdG8gdHJ5IHRvIHJlbHkgb24gdGhlDQo+bW1jX2Ns YWltX2hvc3QoKSB0byBhY3R1YWxseSBzdWNjZWVkLiBUaGlzIG1ha2VzIGl0IGNlcnRhaW4gdGhh dCB0aGVyZSBpcyBubw0KPm9uZ29pbmcgcmVxdWVzdCB0aGF0IG5lZWRzIHRvIGJlIHRlcm1pbmF0 ZWQuIE90aGVyd2lzZSwgdGhpbmdzIHdpbGwganVzdCBmYWxsDQo+YXBhcnQuDQo+DQoNCkFncmVl LiBTZWVtcyBJIG5lZWQgdG8gY3JlYXRlIGFuIGFsdGVybmF0ZSBwYXRoIHRvIGZvcmNlZnVsbHkg Z2FpbiBhY2Nlc3MgdG8gdGhlIGhvc3QNCmZvciB0aGUgY2FzZSBvZiBwYW5pYyB3cml0ZS4gQXMg eW91IHBvaW50ZWQgb3V0IG1tY19jbGFpbV9ob3N0KCksIG1tY19yZWxlYXNlX2hvc3QoKQ0KYW5k IHJ1bnRpbWUgUE0gY2FuIGNyZWF0ZSBpc3N1ZXMuDQoNCj5UaGUgcXVlc3Rpb24gaXMsIGNhbi9z aG91bGQgd2UgcmVseSBvbiBtbWNfY2xhaW1faG9zdCgpIHRvIHN1Y2NlZWQgaW4gdGhpcw0KPnBh dGg/IE1heWJlIGl0IHdpbGwgd29yaywgaW4gY2FzZXMgd2hlbiB0aGVyZSBpcyBubyBvbmdvaW5n IHJlcXVlc3QsIGFzIGl0DQo+bWVhbnMgdGhlIGhvc3Qgc2hvdWxkIGJlIGF2YWlsYWJsZSB0byBi ZSBpbW1lZGlhdGVseSBjbGFpbWVkLiBBbHRob3VnaCwNCj50aGVuIHRoZSBwcm9ibGVtIGVuZHMg dXAgd2l0aCBydW50aW1lIFBNLCBhcyBpZiB0aGUgaG9zdCBpcyBhdmFpbGFibGUgZm9yDQo+Y2xh aW1pbmcsIGl0J3MgbGlrZWx5IHRoYXQgdGhlIGhvc3QgaXMgcnVudGltZSBzdXNwZW5kZWQuLi4N Cj4NCg0KQW4gZXh0cmEgY2hlY2sgY2FuIGJlIGFkZGVkIHRvIHNlZSBpZiBob3N0IHdhcyBydW50 aW1lIHN1c3BlbmRlZCBhaGVhZA0Kb2YgcGFuaWMgd3JpdGUgYXR0ZW1wdC4gDQoNCj4+DQo+Pg0K Pj4gPkRvIG5vdGUsIGFzIHBhcnQgb2YgdGhlIG1tY19jbGFpbV9ob3N0KCkgd2UgbWF5IGFsc28g cnVudGltZSByZXN1bWUNCj4+ID50aGUgaG9zdCwgaWYgaXQgd2FzIHJ1bnRpbWUgc3VzcGVuZGVk ICh3aGljaCBpcyBxdWl0ZSBsaWtlbHkpLiBUbw0KPj4gPnJ1bnRpbWUgcmVzdW1lIGEgaG9zdCB2 aWEgcnVudGltZSBQTSwgd2UgbWF5IGVuZCB1cCB1bmdhdGluZyBkZXZpY2UNCj4+ID5jbG9ja3Ms IHBvd2VyIG9uIGNvcnJlc3BvbmRpbmcgUE0gZG9tYWlucywgcnVuIGEgc28gY2FsbGVkIHJlLXR1 bmluZw0KPj4gPnNlcXVlbmNlIHRvIHJlc3RvcmUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBjYXJk LCBldGMsIGV0Yy4gVGhlIHBvaW50DQo+PiA+aXMsIGFsbCB0aGVzZSB0aGluZ3MgbXVzdCBhbHNv IGJlIHBvc3NpYmxlIHRvIGRvLCB3aXRob3V0IGxvY2tzIGFuZCBieSB1c2luZyBhDQo+cG9sbGlu ZyBiYXNlZCAibW9kZSIuLi4NCj4+ID4NCj4+ID4+ICsgICAgICAgbW1jX3dhaXRfZm9yX3BzdG9y ZV9yZXEoaG9zdCwgbXJxKTsNCj4+ID4NCj4+ID5Pa2F5LCBzbyBsZXQncyBhc3N1bWUgdGhhdCB3 ZSBhcmUgbHVja3kgYW5kIHN1Y2NlZWQgdG8gY2xhaW0gYW5kDQo+PiA+cnVudGltZSByZXN1bWUg dGhlIGhvc3QgYWJvdmUuDQo+PiA+DQo+PiA+VGhlbiB3ZSBhbHNvIG5lZWQgdG8gcnVudGltZSBy ZXN1bWUgdGhlIGNhcmQsIGFzIGl0IG1heSBiZSBydW50aW1lDQo+PiA+c3VzcGVuZGVkLiBJbiB0 aGUgIndvcnN0IGNhc2UiLCBydW50aW1lIHJlc3VtaW5nIHRoZSBjYXJkIG1lYW5zIGENCj4+ID5j b21wbGV0ZSByZS1pbml0aWFsaXphdGlvbiBvZiBpdCwgY292ZXJpbmcgYSBzZXJpZXMgb2YgY29t bWFuZHMgYW5kDQo+PiA+dHVybmluZyBvbiByZWd1bGF0b3JzLCBmb3IgZXhhbXBsZS4NCj4+ID4N Cj4+ID4+ICsgICAgICAgbW1jX3JlbGVhc2VfaG9zdChjYXJkLT5ob3N0KTsgfQ0KPj4NCj4+DQo+ PiBBbGwgdGhlIGFib3ZlIHNhaWQgdGhpbmdzIChydW50aW1lIHJlc3VtaW5nIGhvc3QsIGNsb2Nr cyBiZWluZw0KPj4gdXBkYXRlZCwgcmVzdG9yaW5nIGNvbW11bmljYXRpb24gd2l0aCBob3N0KSBh cmUgdmFsaWQgZXZlbiBmb3IgdGhlDQo+PiBuZXdseSBhc2tlZCByZXF1ZXN0IHBhdGguIFRoZXkg Y2Fubm90IGJlIGF2b2lkZWQgYXMgd2UgaGF2ZSB0byB0ZXJtaW5hdGUNCj50aGUgb25nb2luZyBy ZXF1ZXN0cyB0byBjb21wbGV0ZSB0aGUgcGFuaWMgd3JpdGUuDQo+DQo+RXhhY3RseS4gVGhhdCdz IHdoeSBJIHdvbmRlciBpZiBpdCdzIHJlYWxseSB3b3J0aCBpdCB0byBzdXBwb3J0IHRoZSBwYW5p YyB3cml0ZXMgYXQNCj5hbGwuDQo+DQoNCkRlZmluaXRlbHkgdGhpcyBmZWF0dXJlIGlzIGRlc2ly YWJsZSBmb3IgdGhvc2Ugd2hvIHdvdWxkIGxpa2UgdG8gaGF2ZSB0aGUgbW1jDQphcyB0aGUgcGxh dGZvcm0gYmFja2VuZC4NCg0KPkkgcmVhbGl6ZSB0aGF0IHRoZSBob3N0IGRyaXZlciB5b3UgYXJl IHdvcmtpbmcgb24gZG9lc24ndCBzdXBwb3J0IHJ1bnRpbWUgUE0sDQo+c28gaXQncyBub3QgYSBw cm9ibGVtIGZvciB5b3UsIGJ1dCBmb3IgbWFueSBvdGhlciBjYXNlcyBJIGFzc3VtZSBpdCB3b3Vs ZCBiZS4NCj4NCj5QZXJoYXBzIHdlIGNvdWxkIGNoZWNrIHRoYXQgcnVudGltZSBQTSBpcyBkaXNh YmxlZCBmb3IgdGhlIG1tYyBob3N0IGFzIGENCj5wcmUtY29uZGl0aW9uIHRvIHN1cHBvcnQgdGhp cyBmZWF0dXJlPw0KPg0KDQpUaGVyZSBhcmUgdHdvIHRoaW5ncyBoZXJlLiBSdW50aW1lIFBNIGZl YXR1cmUgZW5hYmxlIGFuZCBpdHMNCnN1c3BlbnNpb24gYmVpbmcgaW4gZm9yY2UgYnkgdGhlIHRp bWUgb2YgcGFuaWMgd3JpdGUuIFdlIGNhbiBpZ25vcmUgdGhvc2UgcGFuaWMgd3JpdGVzIHdoZW5l dmVyDQpob3N0IHdhcyBydW50aW1lIHN1c3BlbmRlZC4gSW4gb3RoZXIgY2FzZXMgcGFuaWMgbG9n cyBjYW4gYmUgc3RvcmVkIHRvIG1tYy4gTG9zaW5nIGZldyBvZiB0aGUNCnJlY29yZHMgaXMgc3Rp bGwgZmluZSBhcyB0aGUgb3RoZXIgcmVjb3JkcyBwcm92aWRlIHRoZSBuYXR1cmUgb2YgY29tbW9u IGNyYXNoZXMgaGFwcGVuaW5nIG9uIHRoZSBwbGF0Zm9ybS4NCg0KDQo+Pg0KPj4gPj4gKw0KPj4g Pj4gK3N0YXRpYyBzc2l6ZV90IG1tY3BzdG9yZV9wYW5pY193cml0ZShjb25zdCBjaGFyICpidWYs IHNpemVfdCBzaXplLA0KPj4gPj4gK2xvZmZfdCBvZmYpIHsNCj4+ID4+ICsgICAgICAgc3RydWN0 IG1tY3BzdG9yZV9jb250ZXh0ICpjeHQgPSAmb29wc19jeHQ7DQo+PiA+PiArDQo+PiA+PiArICAg ICAgIG1tY3BzdG9yZV9wYW5pY193cml0ZV9yZXEoYnVmLCAoc2l6ZSA+PiBTRUNUT1JfU0hJRlQp LA0KPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgY3h0LT5zdGFydF9zZWN0ICsgKG9mZiA+ PiBTRUNUT1JfU0hJRlQpKTsNCj4+ID4+ICsgICAgICAgcmV0dXJuIHNpemU7DQo+PiA+PiArfQ0K Pj4gPg0KPj4gPlsuLi5dDQo+PiA+DQo+PiA+SGF2aW5nIHNhaWQgdGhlIGFib3ZlLCBJIGFtIG5v dCBlbnRpcmVseSBjb252aW5jZWQgdGhhdCBpdCBtYWtlcw0KPj4gPnNlbnNlIHRvIHN1cHBvcnQg dGhpcywgYXQgYWxsLg0KPj4gPg0KPj4gPk5vdCBvbmx5LCB3aWxsIHRoZSBzdXBwb3J0IGJlIGhp Z2hseSBmcmFnaWxlIGZyb20gdGhlIG1tYyBjb3JlIHBvaW50DQo+PiA+b2YgdmlldywgYnV0IHRo ZXJlIGlzIGFsc28gYSBzaWduaWZpY2FudCBjb21wbGV4aXR5IGZvciBhbiBtbWMgaG9zdA0KPj4g PmRyaXZlciB0byBzdXBwb3J0IHRoaXMgKGF0IGxlYXN0IGluIGdlbmVyYWwpLg0KPj4gPg0KPj4N Cj4+IEkgYW0gbm90IHN1cmUgaWYgdGhlIGNvbW1lbnRzIG9uIGhvc3QgZHJpdmVyIGNvbXBsZXhp dHkgaXMgdHJ1ZS4NCj4+IFRlcm1pbmF0aW5nIG9uZ29pbmcgcmVxdWVzdHMgYW5kIGludHJvZHVj aW5nIHBvbGxpbmcgZnVuY3Rpb25zIG9uIGhvc3QNCj4+IGRyaXZlcnMgc2hvdWxkIGJlIHN0cmFp Z2h0IGZvcndhcmQuIE5vbmUgdGhvc2Ugd291bGQgZGlzdHVyYiB0aGUgY29yZQ0KPj4gZnVuY3Rp b25hbGl0eS4gVGhleSBhcmUgY29tcGxldGVseSBpbmRlcGVuZGVudC4NCj4NCj5JIHRoaW5rIHlv dSBhcmUgdW5kZXJlc3RpbWF0aW5nIHRoZSBwYXJ0IHdpdGggdGVybWluYXRpbmcgb25nb2luZyBy ZXF1ZXN0cy4gSXQNCj5zb3VuZHMgdG8gbWUgdGhhdCB5b3UgcmVhbGx5IGhhdmVuJ3QgYmVlbiB0 ZXJtaW5hdGluZyBhbnkgcmVxdWVzdHMgYXQgYWxsLCBidXQNCj5yYXRoZXIganVzdCBkb2luZyBh IHJlc2V0IG9mIHRoZSBtbWMgY29udHJvbGxlciAod2hpY2ggaXMgd2hhdCBJIG9ic2VydmVkIGlu DQo+cGF0Y2gyKS4NCj4NCg0KTm8sIGl0J3Mgbm90IHRydWUuIEkgYW0gbm90IGRvaW5nIGFueSBy ZXNldC4gUGxlYXNlIHBvaW50IG1lIHRvIHNwZWNpZmljIGNvZGUgc25pcHBldA0Kd2hlcmUgeW91 IGhhdmUgb2JzZXJ2ZWQgdGhpcy4NCg0KPldoZW4gaXQgY29tZXMgdG8gYWRkaW5nIHRoZSBuZXcg aG9zdCBvcHMgdG8gc3VwcG9ydCB0aGUgcG9sbGluZyBmdW5jdGlvbnMsIEkNCj5oYXZlIGluIHBy aW5jaXBsZSBubyBvYmplY3Rpb25zIHRvIHRoYXQuDQo+DQo+S2luZCByZWdhcmRzDQo+VWZmZQ0K