Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp1630531pxb; Thu, 28 Oct 2021 07:17:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzJQEYiTqr4o69bIsLmygU12ffgKrq4UiCKPMmfWQoKa5ReUt2zGufCHu6+ZO3lOpxc/MOC X-Received: by 2002:a05:6402:4406:: with SMTP id y6mr6422890eda.140.1635430626165; Thu, 28 Oct 2021 07:17:06 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1635430626; cv=pass; d=google.com; s=arc-20160816; b=l8aNocSDTmXYFHpzggUqWSICBxHSIdhx/Q2Uaht3o9rlAe8tyfMIL8LsNg5HDLt7IV AtdL6dAXtZeRz8G/hqptTjLvrgnf1vdZvd54fKFgq5AGGAd4xLqG8A38JYgm2Pp8z9cD nBZPhcsXlQpFliky4GJSO54CL7i0DHh0Vhd8Y4GfWT163jr87qMc8wBZduGMxrVnVyFn rN5uDcSzV2PBAtK8OooL5BTtK9DJIGHFm73ddhme1RHd+AyFrA2YDi0NrpBKoJ3hvcsU TQ6NM9PLevKu6PZ/8V78JBhdbSyQ3QVTvuJK03q5tLfpsZ1p6Q/HdaJ/xKxgedPS3Cf1 vG9g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature; bh=+zzS4EAFEmQ6Ya6XoPaKmvP2Bb7LY8MjeKktNx+EJ5c=; b=jWk3+qNKmsVICgH1Amdj5a3n6eg5VMcWljOm/It8bhYBb0ByjECEGBgINjQaxg3zHM erdgG+FbS6l/T6RYtkY1GHCjnk9QN9joL8QcUI1Cjp31+zyP2ORjHarn61rCN8E4HgFy zNUm5Lk2lB7VbKlSNMF8Lrw10dwL4DZFkz+qJ/MV/3B2tltFFcaJjE1LHHSqUJhX56xT gcq2e8OPQf182c1q9X485xSf5/6HGhr09VV9S9t4qmz+VmjC7rblqj3aQD0NYUORUHoW vFgSKTM3RZKX4jeSGoX6AGY+8dz8/aokHQ65YhCfb3/c3gU+ZuKuREasl4DVjOvwZtza d88A== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=R0YptHrh; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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. [23.128.96.18]) by mx.google.com with ESMTP id qf7si5456608ejc.612.2021.10.28.07.16.40; Thu, 28 Oct 2021 07:17:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=R0YptHrh; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S230479AbhJ1OOz (ORCPT + 99 others); Thu, 28 Oct 2021 10:14:55 -0400 Received: from mail-eopbgr10078.outbound.protection.outlook.com ([40.107.1.78]:51108 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S230401AbhJ1OOx (ORCPT ); Thu, 28 Oct 2021 10:14:53 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CsuixGsBHxDyLGedJdpdnaW/1AHageW4vihfOLKkO+maZg65d25ADyuY0Z/zcSTrtDuQb8pcORJU0gqm4V5kUzNRLd3fSP728+5hOjcD3IQIOTl2O9ADf1jZe4GmB/YLbAjTmbDoYdz77JrKrybfVO2ozDQCEYkKPw+ZGv9dxOZdDDp43FR7xbu+MgCIvrjC1jVMzOCviyLAzg/QjKidG3uyoNM2tjd1p8PiqnOlw/KUWBS58TEM6kvThccPJ+yRVwRRmj6QylhjgkRX/tgatR47Fhbn2LSTiTT0t7Zn5NrdH37Wf9vI97V38qq+oqM4MhaoefdGNA0O8vdkHdGjDw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+zzS4EAFEmQ6Ya6XoPaKmvP2Bb7LY8MjeKktNx+EJ5c=; b=ir+hptxOanZ4KeLVrRq4LpQOIY8cBxpkSK0jeXqNGg34frsriDIb06Q23cx+rVCIjOgQ9KNbTAOAhMWDSFB7FCERXi2GCvsfvBCCjvFNr3UygOa2l59TbinAH6KBs1jz7m0gkWOS7S7EDJvDRrfAS0570f4z5RXnfg+YV206Z7plr7i6CmC6gbFc82hV+wWcg055SYs1NMoRiZr1YsgKL7SETNL3rpBy3mdVL+nrNwfb67SQNvBERbFEDEzm/rpR6U9b92aWsoQ/cEaDsDhoqS7tapbyTpvkchZXNWMvX9Fj2q/TRLGjUG2ZeOtRR4ooX2Q+qXGJDGPMwR8YCC6Kcg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+zzS4EAFEmQ6Ya6XoPaKmvP2Bb7LY8MjeKktNx+EJ5c=; b=R0YptHrhKnR1fzvL3vS0MlAQhg9wTTBzB4CLpva1PbMWe+8GHNGfEPEVEpVn4VsW1NuChigvHxY7ftMIHhsOmMID7mEyns0drCPSmKDJtNirkXnfvnZvlRH2u75vmMk3a7S57MOU6HtSLyAxWPbZV7U2YqdKyW/nvnum36miJHE= Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by VI1PR04MB3200.eurprd04.prod.outlook.com (2603:10a6:802:d::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4628.18; Thu, 28 Oct 2021 14:12:20 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::e157:3280:7bc3:18c4]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::e157:3280:7bc3:18c4%5]) with mapi id 15.20.4628.020; Thu, 28 Oct 2021 14:12:20 +0000 From: Vladimir Oltean To: =?utf-8?B?Q2zDqW1lbnQgTMOpZ2Vy?= CC: "David S. Miller" , Jakub Kicinski , Rob Herring , Claudiu Manoil , Alexandre Belloni , "UNGLinuxDriver@microchip.com" , Andrew Lunn , "netdev@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH 3/3] net: ocelot: add FDMA support Thread-Topic: [PATCH 3/3] net: ocelot: add FDMA support Thread-Index: AQHXzALbT9+TspAQqEqpFNd9PfUpi6voc5yA Date: Thu, 28 Oct 2021 14:12:20 +0000 Message-ID: <20211028141219.od5fdthkdqenpegx@skbuf> References: <20211028134932.658167-1-clement.leger@bootlin.com> <20211028134932.658167-4-clement.leger@bootlin.com> In-Reply-To: <20211028134932.658167-4-clement.leger@bootlin.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 56aa178f-ddc8-4c4b-73c1-08d99a1cf480 x-ms-traffictypediagnostic: VI1PR04MB3200: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2512; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 87Ge8IQZtCWusXjez4FbzWJFfHB2UXR1Rgqf7osIXsNxI3z3kmix4s90OTxaxbVBlIwjLg0jl4octcGo2NJsCnTXyZRP79q3FXtwfSeoYStN9738vcoswWvuUUyi2pUoUdPeocacyRVAC6FvwfMy79PF/V4KW0XVyJqkCOWO2Fp4ZoQfH9osOuL9+zTcFD0jzu23IlxXVIRjMa7+7QCxShzmMiKAawDEbif0VGJ/m7wQWdoQ638Li8nbiD8MazA9Cn5yMMsOL8tEifzkg70qNa4YrHlH5HQm0+hJM+6wfVBTYspbCl/Mf5L3vDF2ZHFtW/U6S7FmcTLrhGEwxxefdpAjUwtIlO4mAkp8AwhJfwh0Bgt0VA953v/0QMNiDCnasrWko1avqxZgna5Z/I5fkh/FY/FYeFnvAykG3ovYAAW8Q71ctqtyknxD8QlQLsJVGSSjQTVVE5QZQmu2+2K2iCtdnsSkV1EEQSNz+TwPNi8tqSlCq4e/93NqjGZB/0/bzGhzevQPJsvuo8qVsy5Z1dTwyARP+injKKcm+l6oDvgBN27mWAmD9uCgTkSGMRWbl+B+0uXNOrB++sfhlLWbp0vfTC+dhZ6tAoJnjW3N2oQ5CpWZqhSvScWrx3QiX6r1YhWCJlcHA21sLngsp0t+g3fQlT5CCR9iS7KPtYN/PwBVrR2H8bFRwcfLPHdq6205E4V8HtZriB4K7AUbOq8rug== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(7916004)(4636009)(366004)(7416002)(9686003)(44832011)(5660300002)(26005)(71200400001)(38100700002)(122000001)(6512007)(38070700005)(1076003)(6506007)(8936002)(6916009)(66574015)(33716001)(8676002)(83380400001)(64756008)(66446008)(66476007)(66556008)(91956017)(6486002)(4326008)(76116006)(66946007)(54906003)(508600001)(86362001)(30864003)(186003)(316002)(2906002)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VEtjOXU1ajRXSWl3NkhUc0hiSDlPbGlYS2hSYjhBTDNDOUNGbG8vZVhORkU0?= =?utf-8?B?Wnh0MExMSzkreHdYQUdoY1FBajdQQnBIamFSeHhBMGM0T2h4RVcwZk00OUxm?= =?utf-8?B?d0NTVkN1cHN4SzMxcjZzc3hTbXVnRFB2UnlKTHZtV05vamRHOUJZWklVTWFX?= =?utf-8?B?MkF3bDhQSitRQ1pDQ0VFYlVxMzlISE5MdndHUXdYaUsxY200S0xOa2Zkc3FR?= =?utf-8?B?VHdCczlYcHlmQjFzbWtNUXBhTkdhdHpaL21qam00OWpHTmg4QjNEb0FUVkYv?= =?utf-8?B?TDFJdjVkbDNoa2RyZWRKcTAxZVBDVHdyMGVFcmdSemtHWG1ZeTdCRVJERHR6?= =?utf-8?B?cS80MWt0SmdudVFRWkNDYnhFZUdrNE55S2dvQkR1aFJvOVZMS1VLV2xGREpS?= =?utf-8?B?U2tYOTRBNm8rTngxSGExYU9OOHRRR1E4MlIvYUtFZFdSalFCYjlBQjA4dmxI?= =?utf-8?B?VFFvYytjanNEMHhabUFQd1ZxTVZ1VUIrbjQrTWNNS0hvVjByU21VODFQTkph?= =?utf-8?B?VHEreEcrMis2dElKL0RDalpBY1JlNGhzQ2JVR25KVG5Gb2ZKdlYvVFFzTWxE?= =?utf-8?B?VjVaajI2R09vRjBGK2pKWlNULy9QamZEb0paKzFPb3NkTDQ0VG1BQkV1dG5H?= =?utf-8?B?UFowcTdObGd6VE40a1p2WGpMR1AvNktBbEswTWhXT0Nja0orZkpmdmdZc0kx?= =?utf-8?B?d3d2RG54K0w1NWJHeDFNcGI3U0FWVnZ6NldWRWhxcEpqbDRESjhsNGY3Z1Q4?= =?utf-8?B?USs0VndJbDJTZUczbTRCSkxaVDE5dHkyaFRQY2k4clpONFNmWGdDZFphc3do?= =?utf-8?B?b3JsN3ZnTk9mWk44Nlg4MCtRb1d3TEw2cWxJNWlCTVdmbnlDRUpnbHp5OVBy?= =?utf-8?B?Nm44ckdGWGQ5SUZ1WmZXV3p6NEVJR3RwRzMyckNwTisrenYwejVsemlrbXkz?= =?utf-8?B?MmhUVkR5cXFWM1NFeXZCd1dHVkwxbEpsck80SDcrSy82SXBpd3FrcGFzdnV3?= =?utf-8?B?ekpMYXB3QWtkZVdmMWthV0NkTXI4bUJoenQyTkpma3psbTZyKytFNlQ5ODFx?= =?utf-8?B?SmYzS2ZUTGkzMUFIZkpXVjh0R0lFdG1wZmRTUkp2aGZyYjRFdDk0RzNzVWx0?= =?utf-8?B?UUpMdEd3WDdCWnRSeEJRdWtVOXh0ZDdNVFVPL0ZmcGZyMWdmMmlMUEo0bUcy?= =?utf-8?B?d1MycTRiaWJnbkZsZnROR2pDNU9wcUlUUVZnVTBmUHVrUWRzbkVjeVVNclh1?= =?utf-8?B?SlRXaEtLZG1oM3hTSmlObnpON2xqbnNwQkd1aE5BSEQ5RHBxQ3Zud0EzTWxh?= =?utf-8?B?QW8zdUdzU0ZLQS8yVDBnb01DOW5yZUdNV1lQeDJzdkZYc0xWa0JWclJYUXha?= =?utf-8?B?Vi9rT2JnL1FMWjU3Yk8wK3hjeFFRTi84L3p5YVJISDBrVTEvN2ZjSE1sVnVv?= =?utf-8?B?aS80WHR4QVUyT3NKc3puRmVjU1hUNEZVejBlcGhocnA2VFFqWnpYTFVNS2Zv?= =?utf-8?B?L0NFSEh6Z3BPdXlJNVk3MXRndHg0ejhEWUNxNy9YQ1hOVWM2Umd2Rng1ZlZM?= =?utf-8?B?dlE1NHVldUFiZ3FhQStmYUViUjNSSHpqNHJMR3Z5Um1vd1ZHNWk5SEgwOHR6?= =?utf-8?B?MTRNbjRvWUZpZ2JldC9ITHIwTjRxTGVkNGFFbUJJWU90WG5QeGpobXV1Qjla?= =?utf-8?B?OFliZm5CcUVKdWhkbG9BV2h2cjAxUi9aRU51cWNIcmZ5d1ZPSk1SMlRPak9X?= =?utf-8?B?aHM5VW9zeWI0R3UyMUNwMzZ0MDNvbno2d0gybzE5Z2prUmcrWjVicTdzN05m?= =?utf-8?B?TC82UmcxRUgwcnJpZ1NMaXJwcFFlWklmalZEbXAvcFA3a1RDWGxaMG1GOVNW?= =?utf-8?B?cGVPZW9IZGg0S1ZEeUhKRGdPdmw3Z1I4SmxOdGpyY3hRZEltRU5kYXYvaTgy?= =?utf-8?B?dnZtR0tCV3JLZnJaQ2t3aW1qMFJFUnp4emYyQ1l2MWdXZ2VEaURMSDBRd3RM?= =?utf-8?B?ZnIwSkxFNmdtSitJamo1eUNTYmlPdmkwWGZ2SjBnNTlHeVJ3UDNSaTJaaloz?= =?utf-8?B?NTd6b2Fia2RjN1l2UUtMWDVGeEU1anJOZjJPOElIVGVYZlpsMkNFMWJveWtv?= =?utf-8?B?YzFkUk9kNjY5OVhJWVozQm9VVmtnZ3JPUWZLNTh1NVptckZwNjhFems2VlpS?= =?utf-8?Q?fCDWtGH/SX+rJ94pUgoFMvpPd1IlBhiC5tQcPoERlk+c?= Content-Type: text/plain; charset="utf-8" Content-ID: <67314E961474EE40A84526071A22AF1A@eurprd04.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 56aa178f-ddc8-4c4b-73c1-08d99a1cf480 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Oct 2021 14:12:20.0467 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: vI3YsuS/67kNbP0Ki2OTpf/8uGU4ZdzZoC4oViu6/yl4NL/Zj4SWtWrtasWCRGM+pVs+m1Awr1uqiytR06UoJw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3200 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gVGh1LCBPY3QgMjgsIDIwMjEgYXQgMDM6NDk6MzJQTSArMDIwMCwgQ2zDqW1lbnQgTMOpZ2Vy IHdyb3RlOg0KPiBFdGhlcm5ldCBmcmFtZXMgY2FuIGJlIGV4dHJhY3RlZCBvciBpbmplY3RlZCBh dXRvbm9tb3VzbHkgdG8gb3IgZnJvbSB0aGUNCj4gZGV2aWNl4oCZcyBERFIzL0REUjNMIG1lbW9y eSBhbmQvb3IgUENJZSBtZW1vcnkgc3BhY2UuIExpbmtlZCBsaXN0IGRhdGENCj4gc3RydWN0dXJl cyBpbiBtZW1vcnkgYXJlIHVzZWQgZm9yIGluamVjdGluZyBvciBleHRyYWN0aW5nIEV0aGVybmV0 IGZyYW1lcy4NCj4gVGhlIEZETUEgZ2VuZXJhdGVzIGludGVycnVwdHMgd2hlbiBmcmFtZSBleHRy YWN0aW9uIG9yIGluamVjdGlvbiBpcyBkb25lDQo+IGFuZCB3aGVuIHRoZSBsaW5rZWQgbGlzdHMg bmVlZCB1cGRhdGluZy4NCj4gDQo+IFRoZSBGRE1BIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGUg ZXRoZXJuZXQgcG9ydHMgb2YgdGhlIHN3aXRjaCBhbmQgdXNlcw0KPiBhIGxpbmtlZCBsaXN0IG9m IGRlc2NyaXB0b3JzIChEQ0IpIHRvIGluamVjdCBhbmQgZXh0cmFjdCBwYWNrZXRzLg0KPiBCZWZv cmUgYWRkaW5nIGRlc2NyaXB0b3JzLCB0aGUgRkRNQSBjaGFubmVscyBtdXN0IGJlIHN0b3BwZWQu IEl0IHdvdWxkDQo+IGJlIGluZWZmaWNpZW50IHRvIGRvIHRoYXQgZWFjaCB0aW1lIGEgZGVzY3Jp cHRvciB3b3VsZCBiZSBhZGRlZCwNCj4gDQo+IFRYIHBhdGggdXNlcyBtdWx0aXBsZSBsaXN0cyB0 byBoYW5kbGUgZGVzY3JpcHRvcnMuIHR4X29uZ29pbmcgaXMgdGhlIGxpc3QNCj4gb2YgRENCIGN1 cnJlbnRseSBvd25lZCBieSB0aGUgaGFyZHdhcmUsIHR4X3F1ZXVlZCBpcyBhIGxpc3Qgb2YgRENC IHRoYXQNCj4gd2lsbCBiZSBnaXZlbiB0byB0aGUgaGFyZHdhcmUgd2hlbiB0eF9vbmdvaW5nIGlz IGRvbmUgYW5kIGZpbmFsbHkNCj4gdHhfZnJlZV9kY2IgaXMgdGhlIGxpc3Qgb2YgRENCIGF2YWls YWJsZSBmb3IgVFguDQo+IA0KPiBSWCBwYXRoIHVzZXMgdHdvIGxpc3QsIHJ4X2h3IGlzIHRoZSBs aXN0IG9mIERDQiBjdXJyZW50bHkgZ2l2ZW4gdG8gdGhlDQo+IGhhcmR3YXJlIGFuZCByeF9zdyBp cyB0aGUgbGlzdCBvZiBkZXNjcmlwdG9ycyB0aGF0IGhhdmUgYmVlbiBjb21wbGV0ZWQNCj4gYnkg dGhlIEZETUEgYW5kIHdpbGwgYmUgcmVpbmplY3RlZCB3aGVuIHRoZSBETUEgaGl0cyB0aGUgZW5k IG9mIHRoZQ0KPiBsaW5rZWQgbGlzdC4NCj4gDQo+IENvLWRldmVsb3BlZC1ieTogQWxleGFuZHJl IEJlbGxvbmkgPGFsZXhhbmRyZS5iZWxsb25pQGJvb3RsaW4uY29tPg0KPiBTaWduZWQtb2ZmLWJ5 OiBBbGV4YW5kcmUgQmVsbG9uaSA8YWxleGFuZHJlLmJlbGxvbmlAYm9vdGxpbi5jb20+DQo+IFNp Z25lZC1vZmYtYnk6IENsw6ltZW50IEzDqWdlciA8Y2xlbWVudC5sZWdlckBib290bGluLmNvbT4N Cj4gLS0tDQo+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL01ha2VmaWxlICAgICAgICAgfCAg IDEgKw0KPiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3QuaCAgICAgICAgIHwgICAy ICsNCj4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X2ZkbWEuYyAgICB8IDgxMSAr KysrKysrKysrKysrKysrKysrKysNCj4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90 X2ZkbWEuaCAgICB8ICA2MCArKw0KPiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3Rf bmV0LmMgICAgIHwgIDMwICstDQo+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF92 c2M3NTE0LmMgfCAgMTUgKw0KPiAgaW5jbHVkZS9saW51eC9kc2Evb2NlbG90LmggICAgICAgICAg ICAgICAgIHwgIDQwICstDQo+ICBpbmNsdWRlL3NvYy9tc2NjL29jZWxvdC5oICAgICAgICAgICAg ICAgICAgfCAgIDIgKw0KPiAgOCBmaWxlcyBjaGFuZ2VkLCA5NTMgaW5zZXJ0aW9ucygrKSwgOCBk ZWxldGlvbnMoLSkNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9t c2NjL29jZWxvdF9mZG1hLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhl cm5ldC9tc2NjL29jZWxvdF9mZG1hLmgNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9l dGhlcm5ldC9tc2NjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9NYWtlZmls ZQ0KPiBpbmRleCA3MjJjMjc2OTRiMjEuLmQ3NmE5Yjc4YjZjYSAxMDA2NDQNCj4gLS0tIGEvZHJp dmVycy9uZXQvZXRoZXJuZXQvbXNjYy9NYWtlZmlsZQ0KPiArKysgYi9kcml2ZXJzL25ldC9ldGhl cm5ldC9tc2NjL01ha2VmaWxlDQo+IEBAIC0xMSw1ICsxMSw2IEBAIG1zY2Nfb2NlbG90X3N3aXRj aF9saWIteSA6PSBcDQo+ICBtc2NjX29jZWxvdF9zd2l0Y2hfbGliLSQoQ09ORklHX0JSSURHRV9N UlApICs9IG9jZWxvdF9tcnAubw0KPiAgb2JqLSQoQ09ORklHX01TQ0NfT0NFTE9UX1NXSVRDSCkg Kz0gbXNjY19vY2Vsb3Qubw0KPiAgbXNjY19vY2Vsb3QteSA6PSBcDQo+ICsJb2NlbG90X2ZkbWEu byBcDQo+ICAJb2NlbG90X3ZzYzc1MTQubyBcDQo+ICAJb2NlbG90X25ldC5vDQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdC5oIGIvZHJpdmVycy9uZXQvZXRo ZXJuZXQvbXNjYy9vY2Vsb3QuaA0KPiBpbmRleCAxOTUyZDZhMWI5OGEuLmQwNjU1MGMzNjEwYyAx MDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3QuaA0KPiArKysg Yi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdC5oDQo+IEBAIC05LDYgKzksNyBAQA0K PiAgI2RlZmluZSBfTVNDQ19PQ0VMT1RfSF8NCj4gIA0KPiAgI2luY2x1ZGUgPGxpbnV4L2JpdG9w cy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2RzYS9vY2Vsb3QuaD4NCj4gICNpbmNsdWRlIDxsaW51 eC9ldGhlcmRldmljZS5oPg0KPiAgI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4NCj4gICNpbmNs dWRlIDxsaW51eC9uZXRfdHN0YW1wLmg+DQo+IEBAIC00NSw2ICs0Niw3IEBAIHN0cnVjdCBvY2Vs b3RfcG9ydF9wcml2YXRlIHsNCj4gIAlzdHJ1Y3QgcGh5bGlua19jb25maWcgcGh5bGlua19jb25m aWc7DQo+ICAJdTggY2hpcF9wb3J0Ow0KPiAgCXN0cnVjdCBvY2Vsb3RfcG9ydF90YyB0YzsNCj4g Kwl1OCBpZmhbT0NFTE9UX1RBR19MRU5dOw0KPiAgfTsNCj4gIA0KPiAgc3RydWN0IG9jZWxvdF9k dW1wX2N0eCB7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxv dF9mZG1hLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mZG1hLmMNCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi40MjYwYmMxNDA4ZDINCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9m ZG1hLmMNCj4gQEAgLTAsMCArMSw4MTEgQEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiAoR1BMLTIuMCBPUiBNSVQpDQo+ICsvKg0KPiArICogTWljcm9zZW1pIFNvQ3MgRkRNQSBkcml2 ZXINCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWljcm9jaGlwDQo+ICsgKi8NCj4g Kw0KPiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2RtYXBv b2wuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kc2Evb2NlbG90Lmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvbmV0ZGV2aWNlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCj4gKyNp bmNsdWRlIDxsaW51eC9za2J1ZmYuaD4NCj4gKw0KPiArI2luY2x1ZGUgIm9jZWxvdF9mZG1hLmgi DQo+ICsjaW5jbHVkZSAib2NlbG90X3FzLmgiDQo+ICsNCj4gKyNkZWZpbmUgTVNDQ19GRE1BX0RD Ql9MTFAoeCkJCQkoKHgpICogNCArIDB4MCkNCj4gKw0KPiArI2RlZmluZSBNU0NDX0ZETUFfRENC X1NUQVRfQkxPQ0tPKHgpCQkoKCh4KSA8PCAyMCkgJiBHRU5NQVNLKDMxLCAyMCkpDQo+ICsjZGVm aW5lIE1TQ0NfRkRNQV9EQ0JfU1RBVF9CTE9DS09fTQkJR0VOTUFTSygzMSwgMjApDQo+ICsjZGVm aW5lIE1TQ0NfRkRNQV9EQ0JfU1RBVF9CTE9DS09fWCh4KQkJKCgoeCkgJiBHRU5NQVNLKDMxLCAy MCkpID4+IDIwKQ0KPiArI2RlZmluZSBNU0NDX0ZETUFfRENCX1NUQVRfUEQJCQlCSVQoMTkpDQo+ ICsjZGVmaW5lIE1TQ0NfRkRNQV9EQ0JfU1RBVF9BQk9SVAkJQklUKDE4KQ0KPiArI2RlZmluZSBN U0NDX0ZETUFfRENCX1NUQVRfRU9GCQkJQklUKDE3KQ0KPiArI2RlZmluZSBNU0NDX0ZETUFfRENC X1NUQVRfU09GCQkJQklUKDE2KQ0KPiArI2RlZmluZSBNU0NDX0ZETUFfRENCX1NUQVRfQkxPQ0tM X00JCUdFTk1BU0soMTUsIDApDQo+ICsjZGVmaW5lIE1TQ0NfRkRNQV9EQ0JfU1RBVF9CTE9DS0wo eCkJCSgoeCkgJiBHRU5NQVNLKDE1LCAwKSkNCj4gKw0KPiArI2RlZmluZSBNU0NDX0ZETUFfQ0hf U0FGRQkJCTB4Y2MNCj4gKw0KPiArI2RlZmluZSBNU0NDX0ZETUFfQ0hfQUNUSVZBVEUJCQkweGQw DQo+ICsNCj4gKyNkZWZpbmUgTVNDQ19GRE1BX0NIX0RJU0FCTEUJCQkweGQ0DQo+ICsNCj4gKyNk ZWZpbmUgTVNDQ19GRE1BX0VWVF9FUlIJCQkweDE2NA0KPiArDQo+ICsjZGVmaW5lIE1TQ0NfRkRN QV9FVlRfRVJSX0NPREUJCQkweDE2OA0KPiArDQo+ICsjZGVmaW5lIE1TQ0NfRkRNQV9JTlRSX0xM UAkJCTB4MTZjDQo+ICsNCj4gKyNkZWZpbmUgTVNDQ19GRE1BX0lOVFJfTExQX0VOQQkJCTB4MTcw DQo+ICsNCj4gKyNkZWZpbmUgTVNDQ19GRE1BX0lOVFJfRlJNCQkJMHgxNzQNCj4gKw0KPiArI2Rl ZmluZSBNU0NDX0ZETUFfSU5UUl9GUk1fRU5BCQkJMHgxNzgNCj4gKw0KPiArI2RlZmluZSBNU0ND X0ZETUFfSU5UUl9FTkEJCQkweDE4NA0KPiArDQo+ICsjZGVmaW5lIE1TQ0NfRkRNQV9JTlRSX0lE RU5UCQkJMHgxODgNCj4gKw0KPiArI2RlZmluZSBNU0NDX0ZETUFfSU5KX0NIQU4JCQkyDQo+ICsj ZGVmaW5lIE1TQ0NfRkRNQV9YVFJfQ0hBTgkJCTANCj4gKw0KPiArI2RlZmluZSBGRE1BX01BWF9T S0IJCQkJMjU2DQo+ICsjZGVmaW5lIEZETUFfV0VJR0hUCQkJCTMyDQo+ICsNCj4gKyNkZWZpbmUg RkRNQV9SWF9FWFRSQV9TSVpFCQkJXA0KPiArCShPQ0VMT1RfVEFHX0xFTiArIEVUSF9GQ1NfTEVO ICsgRVRIX0hMRU4gKyA0KQ0KPiArDQo+ICtzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiX2h3X3YyIHsN Cj4gKwl1MzIgbGxwOw0KPiArCXUzMiBkYXRhcDsNCj4gKwl1MzIgZGF0YWw7DQo+ICsJdTMyIHN0 YXQ7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiIHsNCj4gKwlzdHJ1Y3Qg b2NlbG90X2ZkbWFfZGNiX2h3X3YyCWh3Ow0KPiArCXN0cnVjdCBsaXN0X2hlYWQJCW5vZGU7DQo+ ICsJc3RydWN0IHNrX2J1ZmYJCQkqc2tiOw0KPiArCWRtYV9hZGRyX3QJCQltYXBwaW5nOw0KPiAr CXNpemVfdAkJCQltYXBwZWRfc2l6ZTsNCj4gKwlkbWFfYWRkcl90CQkJcGh5czsNCj4gK307DQo+ ICsNCj4gK3N0YXRpYyBpbnQgZmRtYV9yeF9jb21wdXRlX2J1ZmZlcl9zaXplKGludCBtdHUpDQo+ ICt7DQo+ICsJcmV0dXJuIEFMSUdOKG10dSArIEZETUFfUlhfRVhUUkFfU0laRSwgNCk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGZkbWFfd3JpdGVsKHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRt YSwgdTMyIHJlZywgdTMyIGRhdGEpDQo+ICt7DQo+ICsJd3JpdGVsKGRhdGEsIGZkbWEtPmJhc2Ug KyByZWcpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdTMyIGZkbWFfcmVhZGwoc3RydWN0IG9jZWxv dF9mZG1hICpmZG1hLCB1MzIgcmVnKQ0KPiArew0KPiArCXJldHVybiByZWFkbChmZG1hLT5iYXNl ICsgcmVnKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZmRtYV9hY3RpdmF0ZV9jaGFuKHN0 cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSwNCj4gKwkJCSAgICAgICBzdHJ1Y3Qgb2NlbG90X2ZkbWFf ZGNiICpkY2IsIGludCBjaGFuKQ0KPiArew0KPiArCWZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRN QV9EQ0JfTExQKGNoYW4pLCBkY2ItPnBoeXMpOw0KPiArCWZkbWFfd3JpdGVsKGZkbWEsIE1TQ0Nf RkRNQV9DSF9BQ1RJVkFURSwgQklUKGNoYW4pKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg ZmRtYV9zdG9wX2NoYW5uZWwoc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hLCBpbnQgY2hhbikNCj4g K3sNCj4gKwl1MzIgc2FmZTsNCj4gKw0KPiArCWZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9D SF9ESVNBQkxFLCBCSVQoY2hhbikpOw0KPiArCWRvIHsNCj4gKwkJc2FmZSA9IGZkbWFfcmVhZGwo ZmRtYSwgTVNDQ19GRE1BX0NIX1NBRkUpOw0KPiArCX0gd2hpbGUgKCEoc2FmZSAmIEJJVChjaGFu KSkpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBvY2Vsb3RfZmRtYV9kY2Jfc2V0X2RhdGEo c3RydWN0IG9jZWxvdF9mZG1hICpmZG1hLA0KPiArCQkJCSAgICAgc3RydWN0IG9jZWxvdF9mZG1h X2RjYiAqZGNiLCB2b2lkICpkYXRhLA0KPiArCQkJCSAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1h X2RhdGFfZGlyZWN0aW9uIGRpcikNCj4gK3sNCj4gKwl1MzIgb2Zmc2V0Ow0KPiArDQo+ICsJZGNi LT5tYXBwZWRfc2l6ZSA9IHNpemU7DQo+ICsJZGNiLT5tYXBwaW5nID0gZG1hX21hcF9zaW5nbGUo ZmRtYS0+ZGV2LCBkYXRhLCBzaXplLCBkaXIpOw0KPiArCWlmICh1bmxpa2VseShkbWFfbWFwcGlu Z19lcnJvcihmZG1hLT5kZXYsIGRjYi0+bWFwcGluZykpKQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ ICsNCj4gKwlvZmZzZXQgPSBkY2ItPm1hcHBpbmcgJiAweDM7DQo+ICsNCj4gKwlkY2ItPmh3Lmxs cCA9IDA7DQo+ICsJZGNiLT5ody5kYXRhcCA9IGRjYi0+bWFwcGluZyAmIH4weDM7DQo+ICsJZGNi LT5ody5kYXRhbCA9IEFMSUdOX0RPV04oc2l6ZSAtIG9mZnNldCwgNCk7DQo+ICsJZGNiLT5ody5z dGF0ID0gTVNDQ19GRE1BX0RDQl9TVEFUX0JMT0NLTyhvZmZzZXQpOw0KPiArDQo+ICsJV0FSTl9P TighSVNfQUxJR05FRChkY2ItPmh3LmRhdGFsLCA0KSk7DQo+ICsNCj4gKwlyZXR1cm4gdHJ1ZTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgb2NlbG90X2ZkbWFfZGNiX3NldF9yeF9za2Ioc3Ry dWN0IG9jZWxvdF9mZG1hICpmZG1hLA0KPiArCQkJCSAgICAgICBzdHJ1Y3Qgb2NlbG90X2ZkbWFf ZGNiICpkY2IsDQo+ICsJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHNpemVfdCBzaXpl KQ0KPiArew0KPiArCWRjYi0+c2tiID0gc2tiOw0KPiArCXJldHVybiBvY2Vsb3RfZmRtYV9kY2Jf c2V0X2RhdGEoZmRtYSwgZGNiLCBza2ItPmRhdGEsIHNpemUsDQo+ICsJCQkJICAgICAgRE1BX0ZS T01fREVWSUNFKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgb2NlbG90X2ZkbWFfZGNiX3Nl dF90eF9za2Ioc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hLA0KPiArCQkJCSAgICAgICBzdHJ1Y3Qg b2NlbG90X2ZkbWFfZGNiICpkY2IsDQo+ICsJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2Ip DQo+ICt7DQo+ICsJaWYgKCFvY2Vsb3RfZmRtYV9kY2Jfc2V0X2RhdGEoZmRtYSwgZGNiLCBza2It PmRhdGEsIHNrYi0+bGVuLA0KPiArCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpKQ0KPiArCQlyZXR1 cm4gZmFsc2U7DQo+ICsNCj4gKwlkY2ItPnNrYiA9IHNrYjsNCj4gKwlkY2ItPmh3LnN0YXQgfD0g TVNDQ19GRE1BX0RDQl9TVEFUX0JMT0NLTChza2ItPmxlbik7DQo+ICsNCj4gKwlyZXR1cm4gdHJ1 ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBvY2Vsb3RfZmRtYV9kY2IgKmZkbWFfZGNi X2FsbG9jKHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSkNCj4gK3sNCj4gKwlzdHJ1Y3Qgb2NlbG90 X2ZkbWFfZGNiICpkY2I7DQo+ICsJZG1hX2FkZHJfdCBwaHlzOw0KPiArDQo+ICsJZGNiID0gZG1h X3Bvb2xfemFsbG9jKGZkbWEtPmRjYl9wb29sLCBHRlBfS0VSTkVMLCAmcGh5cyk7DQo+ICsJaWYg KHVubGlrZWx5KCFkY2IpKQ0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKw0KPiArCWRjYi0+cGh5cyA9 IHBoeXM7DQo+ICsNCj4gKwlyZXR1cm4gZGNiOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0 IG5ldF9kZXZpY2UgKmZkbWFfZ2V0X3BvcnRfbmV0ZGV2KHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRt YSwNCj4gKwkJCQkJICAgICAgIGludCBwb3J0X251bSkNCj4gK3sNCj4gKwlzdHJ1Y3Qgb2NlbG90 X3BvcnRfcHJpdmF0ZSAqcG9ydF9wcml2Ow0KPiArCXN0cnVjdCBvY2Vsb3QgKm9jZWxvdCA9IGZk bWEtPm9jZWxvdDsNCj4gKwlzdHJ1Y3Qgb2NlbG90X3BvcnQgKnBvcnQ7DQo+ICsNCj4gKwlpZiAo cG9ydF9udW0gPj0gb2NlbG90LT5udW1fcGh5c19wb3J0cykNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ ICsNCj4gKwlwb3J0ID0gb2NlbG90LT5wb3J0c1twb3J0X251bV07DQo+ICsNCj4gKwlpZiAoIXBv cnQpDQo+ICsJCXJldHVybiBOVUxMOw0KPiArDQo+ICsJcG9ydF9wcml2ID0gY29udGFpbmVyX29m KHBvcnQsIHN0cnVjdCBvY2Vsb3RfcG9ydF9wcml2YXRlLCBwb3J0KTsNCj4gKw0KPiArCXJldHVy biBwb3J0X3ByaXYtPmRldjsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgb2NlbG90X2ZkbWFf cnhfcHJvY2Vzc19za2Ioc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hLA0KPiArCQkJCSAgICAgICBz dHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiICpkY2IsDQo+ICsJCQkJICAgICAgIGludCBidWRnZXQpDQo+ ICt7DQo+ICsJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRjYi0+c2tiOw0KPiArCXN0cnVjdCBuZXRf ZGV2aWNlICpuZGV2Ow0KPiArCXU2NCBzcmNfcG9ydDsNCj4gKwl2b2lkICp4Zmg7DQo+ICsNCj4g KwlkbWFfdW5tYXBfc2luZ2xlKGZkbWEtPmRldiwgZGNiLT5tYXBwaW5nLCBkY2ItPm1hcHBlZF9z aXplLA0KPiArCQkJIERNQV9GUk9NX0RFVklDRSk7DQo+ICsNCj4gKwl4ZmggPSBza2ItPmRhdGE7 DQo+ICsJb2NlbG90X3hmaF9nZXRfc3JjX3BvcnQoeGZoLCAmc3JjX3BvcnQpOw0KPiArDQo+ICsJ c2tiX3B1dChza2IsIE1TQ0NfRkRNQV9EQ0JfU1RBVF9CTE9DS0woZGNiLT5ody5zdGF0KSk7DQo+ ICsJc2tiX3B1bGwoc2tiLCBPQ0VMT1RfVEFHX0xFTik7DQo+ICsNCj4gKwluZGV2ID0gZmRtYV9n ZXRfcG9ydF9uZXRkZXYoZmRtYSwgc3JjX3BvcnQpOw0KPiArCWlmICh1bmxpa2VseSghbmRldikp IHsNCj4gKwkJbmFwaV9jb25zdW1lX3NrYihkY2ItPnNrYiwgYnVkZ2V0KTsNCj4gKwkJcmV0dXJu IGZhbHNlOw0KPiArCX0NCj4gKw0KPiArCXNrYi0+ZGV2ID0gbmRldjsNCj4gKwlza2ItPnByb3Rv Y29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBza2ItPmRldik7DQo+ICsJc2tiLT5kZXYtPnN0YXRz LnJ4X2J5dGVzICs9IHNrYi0+bGVuOw0KPiArCXNrYi0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7 DQo+ICsNCj4gKwluZXRpZl9yZWNlaXZlX3NrYihza2IpOw0KPiArDQo+ICsJcmV0dXJuIHRydWU7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG9jZWxvdF9mZG1hX3J4X3JlZmlsbChzdHJ1Y3Qg b2NlbG90X2ZkbWEgKmZkbWEpDQo+ICt7DQo+ICsJc3RydWN0IG9jZWxvdF9mZG1hX2RjYiAqZGNi LCAqbGFzdF9kY2I7DQo+ICsNCj4gKwlXQVJOX09OKGxpc3RfZW1wdHkoJmZkbWEtPnJ4X3N3KSk7 DQo+ICsNCj4gKwlkY2IgPSBsaXN0X2ZpcnN0X2VudHJ5KCZmZG1hLT5yeF9zdywgc3RydWN0IG9j ZWxvdF9mZG1hX2RjYiwgbm9kZSk7DQo+ICsJLyogU3BsaWNlIG9sZCBoYXJkd2FyZSBEQ0IgbGlz dCArIG5ldyBvbmUgKi8NCj4gKwlpZiAoIWxpc3RfZW1wdHkoJmZkbWEtPnJ4X2h3KSkgew0KPiAr CQlsYXN0X2RjYiA9IGxpc3RfbGFzdF9lbnRyeSgmZmRtYS0+cnhfaHcsIHN0cnVjdCBvY2Vsb3Rf ZmRtYV9kY2IsDQo+ICsJCQkJCSAgIG5vZGUpOw0KPiArCQlsYXN0X2RjYi0+aHcubGxwID0gZGNi LT5waHlzOw0KPiArCX0NCj4gKw0KPiArCS8qIE1vdmUgc29mdHdhcmUgbGlzdCB0byBoYXJkd2Fy ZSBsaXN0ICovDQo+ICsJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZmZG1hLT5yeF9zdywgJmZkbWEt PnJ4X2h3KTsNCj4gKw0KPiArCS8qIEZpbmFsbHkgcmVhY3RpdmF0ZSB0aGUgY2hhbm5lbCAqLw0K PiArCWZkbWFfYWN0aXZhdGVfY2hhbihmZG1hLCBkY2IsIE1TQ0NfRkRNQV9YVFJfQ0hBTik7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG9jZWxvdF9mZG1hX2xpc3RfYWRkX2RjYihzdHJ1Y3Qg bGlzdF9oZWFkICpsaXN0LA0KPiArCQkJCSAgICAgc3RydWN0IG9jZWxvdF9mZG1hX2RjYiAqZGNi KQ0KPiArew0KPiArCXN0cnVjdCBvY2Vsb3RfZmRtYV9kY2IgKmxhc3RfZGNiOw0KPiArDQo+ICsJ aWYgKCFsaXN0X2VtcHR5KGxpc3QpKSB7DQo+ICsJCWxhc3RfZGNiID0gbGlzdF9sYXN0X2VudHJ5 KGxpc3QsIHN0cnVjdCBvY2Vsb3RfZmRtYV9kY2IsIG5vZGUpOw0KPiArCQlsYXN0X2RjYi0+aHcu bGxwID0gZGNiLT5waHlzOw0KPiArCX0NCj4gKw0KPiArCWxpc3RfYWRkX3RhaWwoJmRjYi0+bm9k ZSwgbGlzdCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIG9jZWxvdF9mZG1hX3J4X2FkZF9k Y2Jfc3coc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hLA0KPiArCQkJCSAgICAgIHN0cnVjdCBvY2Vs b3RfZmRtYV9kY2IgKmRjYikNCj4gK3sNCj4gKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsNCj4g Kw0KPiArCS8qIEFkZCBEQ0IgdG8gZW5kIG9mIGxpc3Qgd2l0aCBuZXcgU0tCICovDQo+ICsJbmV3 X3NrYiA9IG5hcGlfYWxsb2Nfc2tiKCZmZG1hLT5uYXBpLCBmZG1hLT5yeF9idWZfc2l6ZSk7DQo+ ICsJaWYgKHVubGlrZWx5KCFuZXdfc2tiKSkgew0KPiArCQlwcl9lcnIoInNrYl9hbGxvYyBmYWls ZWRcbiIpOw0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsJfQ0KPiArDQo+ICsJb2NlbG90X2ZkbWFf ZGNiX3NldF9yeF9za2IoZmRtYSwgZGNiLCBuZXdfc2tiLCBmZG1hLT5yeF9idWZfc2l6ZSk7DQo+ ICsJb2NlbG90X2ZkbWFfbGlzdF9hZGRfZGNiKCZmZG1hLT5yeF9zdywgZGNiKTsNCj4gKw0KPiAr CXJldHVybiB0cnVlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBvY2Vsb3RfZmRtYV9yeF9n ZXQoc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hLCBpbnQgYnVkZ2V0KQ0KPiArew0KPiArCXN0cnVj dCBvY2Vsb3RfZmRtYV9kY2IgKmRjYjsNCj4gKwlib29sIHZhbGlkID0gdHJ1ZTsNCj4gKwl1MzIg c3RhdDsNCj4gKw0KPiArCWRjYiA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmZmRtYS0+cnhf aHcsIHN0cnVjdCBvY2Vsb3RfZmRtYV9kY2IsDQo+ICsJCQkJICAgICAgIG5vZGUpOw0KPiArCWlm ICghZGNiIHx8IE1TQ0NfRkRNQV9EQ0JfU1RBVF9CTE9DS0woZGNiLT5ody5zdGF0KSA9PSAwKQ0K PiArCQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwlsaXN0X2RlbCgmZGNiLT5ub2RlKTsNCj4gKw0K PiArCXN0YXQgPSBkY2ItPmh3LnN0YXQ7DQo+ICsJaWYgKHN0YXQgJiBNU0NDX0ZETUFfRENCX1NU QVRfQUJPUlQgfHwgc3RhdCAmIE1TQ0NfRkRNQV9EQ0JfU1RBVF9QRCkNCj4gKwkJdmFsaWQgPSBm YWxzZTsNCj4gKw0KPiArCWlmICghKHN0YXQgJiBNU0NDX0ZETUFfRENCX1NUQVRfU09GKSB8fA0K PiArCSAgICAhKHN0YXQgJiBNU0NDX0ZETUFfRENCX1NUQVRfRU9GKSkNCj4gKwkJdmFsaWQgPSBm YWxzZTsNCj4gKw0KPiArCWlmIChsaWtlbHkodmFsaWQpKSB7DQo+ICsJCWlmICghb2NlbG90X2Zk bWFfcnhfcHJvY2Vzc19za2IoZmRtYSwgZGNiLCBidWRnZXQpKQ0KPiArCQkJcHJfZXJyKCJQcm9j ZXNzIHNrYiBmYWlsZWQsIHN0YXQgJXhcbiIsIHN0YXQpOw0KPiArCX0gZWxzZSB7DQo+ICsJCW5h cGlfY29uc3VtZV9za2IoZGNiLT5za2IsIGJ1ZGdldCk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJu IG9jZWxvdF9mZG1hX3J4X2FkZF9kY2Jfc3coZmRtYSwgZGNiKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgb2NlbG90X2ZkbWFfcnhfY2hlY2tfc3RvcHBlZChzdHJ1Y3Qgb2NlbG90X2ZkbWEg KmZkbWEpDQo+ICt7DQo+ICsJdTMyIGxscCA9IGZkbWFfcmVhZGwoZmRtYSwgTVNDQ19GRE1BX0RD Ql9MTFAoTVNDQ19GRE1BX1hUUl9DSEFOKSk7DQo+ICsJLyogTExQIGlzIG5vbiBOVUxMLCBGRE1B IGlzIHN0aWxsIGZldGNoaW5nIHBhY2tldHMgKi8NCj4gKwlpZiAobGxwKQ0KPiArCQlyZXR1cm47 DQo+ICsNCj4gKwlmZG1hX3N0b3BfY2hhbm5lbChmZG1hLCBNU0NDX0ZETUFfWFRSX0NIQU4pOw0K PiArCW9jZWxvdF9mZG1hX3J4X3JlZmlsbChmZG1hKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgb2NlbG90X2ZkbWFfdHhfZnJlZV9kY2Ioc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hLA0KPiAr CQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQ0KPiArew0KPiArCXN0cnVjdCBvY2Vsb3Rf ZmRtYV9kY2IgKmRjYjsNCj4gKw0KPiArCWlmIChsaXN0X2VtcHR5KGxpc3QpKQ0KPiArCQlyZXR1 cm47DQo+ICsNCj4gKwkvKiBGcmVlIGFsbCBTS0JzIHRoYXQgaGF2ZSBiZWVuIHVzZWQgZm9yIFRY ICovDQo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShkY2IsIGxpc3QsIG5vZGUpIHsNCj4gKwkJZG1h X3VubWFwX3NpbmdsZShmZG1hLT5kZXYsIGRjYi0+bWFwcGluZywgZGNiLT5tYXBwZWRfc2l6ZSwN Cj4gKwkJCQkgRE1BX1RPX0RFVklDRSk7DQo+ICsJCWRldl9rZnJlZV9za2JfYW55KGRjYi0+c2ti KTsNCj4gKwkJZGNiLT5za2IgPSBOVUxMOw0KPiArCX0NCj4gKw0KPiArCS8qIEFsbCBEQ0JzIGNh biBub3cgYmUgZ2l2ZW4gdG8gZnJlZSBsaXN0ICovDQo+ICsJc3Bpbl9sb2NrKCZmZG1hLT50eF9m cmVlX2xvY2spOw0KPiArCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdChsaXN0LCAmZmRtYS0+dHhfZnJl ZV9kY2IpOw0KPiArCXNwaW5fdW5sb2NrKCZmZG1hLT50eF9mcmVlX2xvY2spOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAqIG9jZWxvdF9mZG1hX3R4X2NsZWFudXAgLSBGcmVlIFRYIGRjYiB0aGF0 IGhhdmUgYmVlbiBzZW50IGJ5IHRoZSBmZG1hDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIG9jZWxv dF9mZG1hX3R4X2NsZWFudXAoc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hKQ0KPiArew0KPiArCXN0 cnVjdCBsaXN0X2hlYWQgdHhfZG9uZSA9IExJU1RfSEVBRF9JTklUKHR4X2RvbmUpOw0KPiArCXN0 cnVjdCBvY2Vsb3RfZmRtYV9kY2IgKmRjYiwgKnRlbXA7DQo+ICsNCj4gKwlzcGluX2xvY2soJmZk bWEtPnR4X2VucXVldWVfbG9jayk7DQo+ICsJaWYgKGxpc3RfZW1wdHkoJmZkbWEtPnR4X29uZ29p bmcpKQ0KPiArCQlnb3RvIG91dF91bmxvY2s7DQo+ICsNCj4gKwkvKiBUT0RPLCB1c2UgbGlzdF9j dXRfYmVmb3JlID8gKi8NCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGNiLCB0ZW1wLCAm ZmRtYS0+dHhfb25nb2luZywgbm9kZSkgew0KPiArCQlpZiAoIShkY2ItPmh3LnN0YXQgJiBNU0ND X0ZETUFfRENCX1NUQVRfUEQpKQ0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJbGlzdF9tb3ZlX3Rh aWwoJmRjYi0+bm9kZSwgJnR4X2RvbmUpOw0KPiArCX0NCj4gKw0KPiArb3V0X3VubG9jazoNCj4g KwlzcGluX3VubG9jaygmZmRtYS0+dHhfZW5xdWV1ZV9sb2NrKTsNCj4gKw0KPiArCW9jZWxvdF9m ZG1hX3R4X2ZyZWVfZGNiKGZkbWEsICZ0eF9kb25lKTsNCj4gK30NCj4gKw0KPiArdm9pZCBvY2Vs b3RfZmRtYV90eF9yZXN0YXJ0KHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSkNCj4gK3sNCj4gKwlz dHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiICpkY2I7DQo+ICsJdTMyIHNhZmU7DQo+ICsNCj4gKwlzcGlu X2xvY2soJmZkbWEtPnR4X2VucXVldWVfbG9jayk7DQo+ICsNCj4gKwlpZiAoIWxpc3RfZW1wdHko JmZkbWEtPnR4X29uZ29pbmcpIHx8IGxpc3RfZW1wdHkoJmZkbWEtPnR4X3F1ZXVlZCkpDQo+ICsJ CWdvdG8gb3V0X3VubG9jazsNCj4gKw0KPiArCS8qIE9uZ29pbmcgbGlzdCBpcyBlbXB0eSwgY2hh bm5lbCBzaG91bGQgYmUgaW4gc2FmZSBtb2RlICovDQo+ICsJZG8gew0KPiArCQlzYWZlID0gZmRt YV9yZWFkbChmZG1hLCBNU0NDX0ZETUFfQ0hfU0FGRSk7DQo+ICsJfSB3aGlsZSAoIShzYWZlICYg QklUKE1TQ0NfRkRNQV9JTkpfQ0hBTikpKTsNCj4gKw0KPiArCS8qIE1vdmUgcXVldWVkIERDQiB0 byBvbmdvaW5nIGFuZCByZXN0YXJ0IHRoZSBETUEgKi8NCj4gKwlsaXN0X3NwbGljZV90YWlsX2lu aXQoJmZkbWEtPnR4X3F1ZXVlZCwgJmZkbWEtPnR4X29uZ29pbmcpOw0KPiArCS8qIExpc3QgY2Fu J3QgYmUgZW1wdHksIG5vIG5lZWQgdG8gY2hlY2sgKi8NCj4gKwlkY2IgPSBsaXN0X2ZpcnN0X2Vu dHJ5KCZmZG1hLT50eF9vbmdvaW5nLCBzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiLCBub2RlKTsNCj4g Kw0KPiArCWZkbWFfYWN0aXZhdGVfY2hhbihmZG1hLCBkY2IsIE1TQ0NfRkRNQV9JTkpfQ0hBTik7 DQo+ICsNCj4gK291dF91bmxvY2s6DQo+ICsJc3Bpbl91bmxvY2soJmZkbWEtPnR4X2VucXVldWVf bG9jayk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgb2NlbG90X2ZkbWFfbmFwaV9wb2xsKHN0 cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkNCj4gK3sNCj4gKwlzdHJ1Y3Qgb2Nl bG90X2ZkbWEgKmZkbWEgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IG9jZWxvdF9mZG1hLCBu YXBpKTsNCj4gKwlpbnQgd29ya19kb25lID0gMDsNCj4gKw0KPiArCW9jZWxvdF9mZG1hX3R4X2Ns ZWFudXAoZmRtYSk7DQo+ICsJb2NlbG90X2ZkbWFfdHhfcmVzdGFydChmZG1hKTsNCj4gKw0KPiAr CXdoaWxlICh3b3JrX2RvbmUgPCBidWRnZXQpIHsNCj4gKwkJaWYgKCFvY2Vsb3RfZmRtYV9yeF9n ZXQoZmRtYSwgYnVkZ2V0KSkNCj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCXdvcmtfZG9uZSsrOw0K PiArCX0NCj4gKw0KPiArCW9jZWxvdF9mZG1hX3J4X2NoZWNrX3N0b3BwZWQoZmRtYSk7DQo+ICsN Cj4gKwlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7DQo+ICsJCW5hcGlfY29tcGxldGUoJmZkbWEt Pm5hcGkpOw0KPiArCQlmZG1hX3dyaXRlbChmZG1hLCBNU0NDX0ZETUFfSU5UUl9FTkEsDQo+ICsJ CQkgICAgQklUKE1TQ0NfRkRNQV9JTkpfQ0hBTikgfCBCSVQoTVNDQ19GRE1BX1hUUl9DSEFOKSk7 DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHdvcmtfZG9uZTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGlycXJldHVybl90IG9jZWxvdF9mZG1hX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQp DQo+ICt7DQo+ICsJdTMyIGlkZW50LCBsbHAsIGZybSwgZXJyLCBlcnJfY29kZTsNCj4gKwlzdHJ1 Y3Qgb2NlbG90X2ZkbWEgKmZkbWEgPSBkZXZfaWQ7DQo+ICsNCj4gKwlpZGVudCA9IGZkbWFfcmVh ZGwoZmRtYSwgTVNDQ19GRE1BX0lOVFJfSURFTlQpOw0KPiArCWZybSA9IGZkbWFfcmVhZGwoZmRt YSwgTVNDQ19GRE1BX0lOVFJfRlJNKTsNCj4gKwlsbHAgPSBmZG1hX3JlYWRsKGZkbWEsIE1TQ0Nf RkRNQV9JTlRSX0xMUCk7DQo+ICsNCj4gKwlmZG1hX3dyaXRlbChmZG1hLCBNU0NDX0ZETUFfSU5U Ul9MTFAsIGxscCAmIGlkZW50KTsNCj4gKwlmZG1hX3dyaXRlbChmZG1hLCBNU0NDX0ZETUFfSU5U Ul9GUk0sIGZybSAmIGlkZW50KTsNCj4gKwlpZiAoZnJtIHwgbGxwKSB7DQo+ICsJCWZkbWFfd3Jp dGVsKGZkbWEsIE1TQ0NfRkRNQV9JTlRSX0VOQSwgMCk7DQo+ICsJCW5hcGlfc2NoZWR1bGUoJmZk bWEtPm5hcGkpOw0KPiArCX0NCj4gKw0KPiArCWVyciA9IGZkbWFfcmVhZGwoZmRtYSwgTVNDQ19G RE1BX0VWVF9FUlIpOw0KPiArCWlmICh1bmxpa2VseShlcnIpKSB7DQo+ICsJCWVycl9jb2RlID0g ZmRtYV9yZWFkbChmZG1hLCBNU0NDX0ZETUFfRVZUX0VSUl9DT0RFKTsNCj4gKwkJZGV2X2Vycl9y YXRlbGltaXRlZChmZG1hLT5kZXYsDQo+ICsJCQkJICAgICJFcnJvciAhIGNoYW5zIG1hc2s6ICUj eCwgY29kZTogJSN4XG4iLA0KPiArCQkJCSAgICBlcnIsIGVycl9jb2RlKTsNCj4gKw0KPiArCQlm ZG1hX3dyaXRlbChmZG1hLCBNU0NDX0ZETUFfRVZUX0VSUiwgZXJyKTsNCj4gKwkJZmRtYV93cml0 ZWwoZmRtYSwgTVNDQ19GRE1BX0VWVF9FUlJfQ09ERSwgZXJyX2NvZGUpOw0KPiArCX0NCj4gKw0K PiArCXJldHVybiBJUlFfSEFORExFRDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBvY2Vs b3RfZmRtYV9kY2IgKmZkbWFfdHhfZ2V0X2RjYihzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEpDQo+ ICt7DQo+ICsJc3RydWN0IG9jZWxvdF9mZG1hX2RjYiAqZGNiID0gTlVMTDsNCj4gKw0KPiArCXNw aW5fbG9ja19iaCgmZmRtYS0+dHhfZnJlZV9sb2NrKTsNCj4gKwlkY2IgPSBsaXN0X2ZpcnN0X2Vu dHJ5X29yX251bGwoJmZkbWEtPnR4X2ZyZWVfZGNiLA0KPiArCQkJCSAgICAgICBzdHJ1Y3Qgb2Nl bG90X2ZkbWFfZGNiLCBub2RlKTsNCj4gKwlpZiAoZGNiKQ0KPiArCQlsaXN0X2RlbCgmZGNiLT5u b2RlKTsNCj4gKw0KPiArCXNwaW5fdW5sb2NrX2JoKCZmZG1hLT50eF9mcmVlX2xvY2spOw0KPiAr DQo+ICsJcmV0dXJuIGRjYjsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZmRtYV90eF9zZXRf aWZoKHZvaWQgKmlmaCwgdTMyIHJld19vcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCj4gK3sNCj4g KwlpZiAoc2tiX3ZsYW5fdGFnX2dldChza2IpKQ0KPiArCQlvY2Vsb3RfaWZoX3NldF92aWRfcXVp cmtzKGlmaCwgc2tiX3ZsYW5fdGFnX2dldChza2IpLA0KPiArCQkJCQkgIFFVSVJLX0xJVFRMRV9F TkRJQU4pOw0KDQpDYW4ndCB3ZSBtYWtlIHRoZSBGRE1BIGFuZCB0aGUgbWFudWFsIGluamVjdGlv bi9leHRyYWN0aW9uIHJlZ2lzdGVycyB1c2UNCnRoZSBzYW1lIGVuZGlhbm5lc3MsIGluc3RlYWQg b2YgZHVwbGljYXRpbmcgY29kZT8gSSBjYW4gcmVncmVzc2lvbi10ZXN0DQp0aGUgbWFudWFsIGlu ai94dHIgcmVncyBvbiBMUzEwMjhBLg0KDQo+ICsJaWYgKHJld19vcCkNCj4gKwkJb2NlbG90X2lm aF9zZXRfcmV3X29wX3F1aXJrcyhpZmgsIHJld19vcCwgUVVJUktfTElUVExFX0VORElBTik7DQo+ ICt9DQo+ICsNCj4gK2ludCBvY2Vsb3RfZmRtYV9pbmplY3RfZnJhbWUoc3RydWN0IG9jZWxvdF9m ZG1hICpmZG1hLCB1MzIgcmV3X29wLA0KPiArCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBz dHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiArew0KPiArCXN0cnVjdCBvY2Vsb3RfcG9ydF9wcml2 YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gKwlzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNi ICpkY2IsICpmaXJzdF9kY2IsICpsYXN0X2RjYjsNCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGRjYnMg PSBMSVNUX0hFQURfSU5JVChkY2JzKTsNCj4gKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsNCj4g Kwl1MzIgZmxhZ3MgPSAwOw0KPiArCXZvaWQgKmlmaDsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWlm IChza2JfaGVhZHJvb20oc2tiKSA8IE9DRUxPVF9UQUdfTEVOIHx8DQo+ICsJICAgIHNrYl90YWls cm9vbShza2IpIDwgRVRIX0ZDU19MRU4pIHsNCj4gKwkJbmV3X3NrYiA9IHNrYl9jb3B5X2V4cGFu ZChza2IsIE9DRUxPVF9UQUdfTEVOLCBFVEhfRkNTX0xFTiwNCj4gKwkJCQkJICBHRlBfQVRPTUlD KTsNCj4gKwkJZGV2X2NvbnN1bWVfc2tiX2FueShza2IpOw0KPiArCQlpZiAoIW5ld19za2IpDQo+ ICsJCQlyZXR1cm4gTkVUREVWX1RYX09LOw0KPiArDQo+ICsJCXNrYiA9IG5ld19za2I7DQo+ICsJ fQ0KPiArDQo+ICsJaWZoID0gc2tiX3B1c2goc2tiLCBPQ0VMT1RfVEFHX0xFTik7DQo+ICsJbWVt Y3B5KGlmaCwgcHJpdi0+aWZoLCBPQ0VMT1RfVEFHX0xFTik7DQo+ICsJc2tiX3B1dChza2IsIEVU SF9GQ1NfTEVOKTsNCj4gKw0KPiArCWZkbWFfdHhfc2V0X2lmaChpZmgsIHJld19vcCwgc2tiKTsN Cj4gKw0KPiArCWZpcnN0X2RjYiA9IGZkbWFfdHhfZ2V0X2RjYihmZG1hKTsNCj4gKwlpZiAodW5s aWtlbHkoIWZpcnN0X2RjYikpDQo+ICsJCXJldHVybiBORVRERVZfVFhfQlVTWTsNCj4gKw0KPiAr CWlmIChsaWtlbHkoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKSkNCj4gKwkJZmxhZ3Mg PSBNU0NDX0ZETUFfRENCX1NUQVRfU09GIHwgTVNDQ19GRE1BX0RDQl9TVEFUX0VPRjsNCj4gKwll bHNlDQo+ICsJCWZsYWdzID0gTVNDQ19GRE1BX0RDQl9TVEFUX1NPRjsNCj4gKw0KPiArCWlmICgh b2NlbG90X2ZkbWFfZGNiX3NldF90eF9za2IoZmRtYSwgZmlyc3RfZGNiLCBza2IpKQ0KPiArCQln b3RvIGFib3J0X2ZyZWVfZGNiczsNCj4gKw0KPiArCWZpcnN0X2RjYi0+aHcuc3RhdCB8PSBmbGFn czsNCj4gKwlvY2Vsb3RfZmRtYV9saXN0X2FkZF9kY2IoJmRjYnMsIGZpcnN0X2RjYik7DQo+ICsN Cj4gKwlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7DQo+ ICsJCWNvbnN0IHNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsN Cj4gKw0KPiArCQlmbGFncyA9IDA7DQo+ICsJCXNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBz a2JfZnJhZ19zaXplKGZyYWcpICsNCj4gKwkJCQkgICAgICAgT0NFTE9UX1RBR19MRU4gKyBFVEhf RkNTX0xFTik7DQo+ICsJCWlmICghc2tiKQ0KPiArCQkJZ290byBhYm9ydF9mcmVlX2RjYnM7DQo+ ICsNCj4gKwkJZGNiID0gZmRtYV90eF9nZXRfZGNiKGZkbWEpOw0KPiArCQlpZiAoIWRjYikgew0K PiArCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsNCj4gKwkJCWdvdG8gYWJvcnRfZnJlZV9kY2Jz Ow0KPiArCQl9DQo+ICsNCj4gKwkJLyogUHJlcGFyZSBTS0IgaGVhZGVyIGFuZCBkYXRhICovDQo+ ICsJCWlmaCA9IHNrYl9wdXNoKHNrYiwgT0NFTE9UX1RBR19MRU4pOw0KPiArCQltZW1jcHkoaWZo LCBwcml2LT5pZmgsIE9DRUxPVF9UQUdfTEVOKTsNCj4gKwkJZmRtYV90eF9zZXRfaWZoKGlmaCwg MCwgc2tiKTsNCj4gKwkJc2tiX3B1dChza2IsIEVUSF9GQ1NfTEVOKTsNCj4gKw0KPiArCQltZW1j cHkoc2tiLT5kYXRhICsgT0NFTE9UX1RBR19MRU4sIHNrYl9mcmFnX2FkZHJlc3MoZnJhZyksDQo+ ICsJCSAgICAgICBza2JfZnJhZ19zaXplKGZyYWcpKTsNCj4gKw0KPiArCQlpZiAoaSA9PSBza2Jf c2hpbmZvKHNrYiktPm5yX2ZyYWdzIC0gMSkNCj4gKwkJCWZsYWdzIHw9IE1TQ0NfRkRNQV9EQ0Jf U1RBVF9FT0Y7DQo+ICsNCj4gKwkJaWYgKG9jZWxvdF9mZG1hX2RjYl9zZXRfdHhfc2tiKGZkbWEs IGRjYiwgc2tiKSkNCj4gKwkJCWdvdG8gYWJvcnRfZnJlZV9kY2JzOw0KPiArCQlkY2ItPmh3LnN0 YXQgfD0gZmxhZ3M7DQo+ICsJCW9jZWxvdF9mZG1hX2xpc3RfYWRkX2RjYigmZGNicywgZGNiKTsN Cj4gKwl9DQo+ICsNCj4gKwlzcGluX2xvY2tfYmgoJmZkbWEtPnR4X2VucXVldWVfbG9jayk7DQo+ ICsNCj4gKwlpZiAobGlzdF9lbXB0eSgmZmRtYS0+dHhfb25nb2luZykpIHsNCj4gKwkJbGlzdF9z cGxpY2VfdGFpbCgmZGNicywgJmZkbWEtPnR4X29uZ29pbmcpOw0KPiArCQlmZG1hX2FjdGl2YXRl X2NoYW4oZmRtYSwgZmlyc3RfZGNiLCBNU0NDX0ZETUFfSU5KX0NIQU4pOw0KPiArCX0gZWxzZSB7 DQo+ICsJCWlmICghbGlzdF9lbXB0eSgmZmRtYS0+dHhfcXVldWVkKSkgew0KPiArCQkJbGFzdF9k Y2IgPSBsaXN0X2xhc3RfZW50cnkoJmZkbWEtPnR4X3F1ZXVlZCwNCj4gKwkJCQkJCSAgIHN0cnVj dCBvY2Vsb3RfZmRtYV9kY2IsDQo+ICsJCQkJCQkgICBub2RlKTsNCj4gKwkJCWxhc3RfZGNiLT5o dy5sbHAgPSBmaXJzdF9kY2ItPnBoeXM7DQo+ICsJCX0NCj4gKwkJbGlzdF9zcGxpY2VfdGFpbCgm ZGNicywgJmZkbWEtPnR4X3F1ZXVlZCk7DQo+ICsJfQ0KPiArDQo+ICsJc3Bpbl91bmxvY2tfYmgo JmZkbWEtPnR4X2VucXVldWVfbG9jayk7DQo+ICsJcmV0dXJuIE5FVERFVl9UWF9PSzsNCj4gKw0K PiArYWJvcnRfZnJlZV9kY2JzOg0KPiArCW9jZWxvdF9mZG1hX3R4X2ZyZWVfZGNiKGZkbWEsICZk Y2JzKTsNCj4gKwlyZXR1cm4gTkVUREVWX1RYX09LOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9p ZCBmZG1hX2ZyZWVfc2tic19saXN0KHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSwNCj4gKwkJCQlz dHJ1Y3QgbGlzdF9oZWFkICpsaXN0LA0KPiArCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRp cikNCj4gK3sNCj4gKwlzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiICpkY2I7DQo+ICsNCj4gKwlpZiAo bGlzdF9lbXB0eShsaXN0KSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJbGlzdF9mb3JfZWFjaF9l bnRyeShkY2IsIGxpc3QsIG5vZGUpIHsNCj4gKwkJaWYgKGRjYi0+c2tiKSB7DQo+ICsJCQlkbWFf dW5tYXBfc2luZ2xlKGZkbWEtPmRldiwgZGNiLT5tYXBwaW5nLA0KPiArCQkJCQkgZGNiLT5tYXBw ZWRfc2l6ZSwgZGlyKTsNCj4gKwkJCWtmcmVlX3NrYihkY2ItPnNrYik7DQo+ICsJCX0NCj4gKwl9 DQo+ICt9DQo+ICsNCj4gK2ludCBvY2Vsb3RfZmRtYV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYsIGludCBuZXdfbXR1KQ0KPiArew0KPiArCXN0cnVjdCBvY2Vsb3RfcG9ydF9wcml2 YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gKwlzdHJ1Y3Qgb2NlbG90X3BvcnQgKnBv cnQgPSAmcHJpdi0+cG9ydDsNCj4gKwlzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QgPSBwb3J0LT5vY2Vs b3Q7DQo+ICsJc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hID0gb2NlbG90LT5mZG1hOw0KPiArCXN0 cnVjdCBvY2Vsb3RfZmRtYV9kY2IgKmRjYiwgKmRjYl90ZW1wOw0KPiArCXN0cnVjdCBsaXN0X2hl YWQgdG1wID0gTElTVF9IRUFEX0lOSVQodG1wKTsNCj4gKwl1OCBwb3J0X251bTsNCj4gKw0KPiAr CS8qIFRoZSBGRE1BIFJYIGxpc3QgaXMgc2hhcmVkIGFtb25nc3QgYWxsIHRoZSBwb3J0LCBnZXQg dGhlIG1heCBNVFUgZnJvbQ0KPiArCSAqIGFsbCBvZiB0aGVtDQo+ICsJICovDQo+ICsJZm9yIChw b3J0X251bSA9IDA7IHBvcnRfbnVtIDwgb2NlbG90LT5udW1fcGh5c19wb3J0czsgcG9ydF9udW0r Kykgew0KPiArCQlwb3J0ID0gb2NlbG90LT5wb3J0c1twb3J0X251bV07DQo+ICsJCWlmICghcG9y dCkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCXByaXYgPSBjb250YWluZXJfb2YocG9ydCwg c3RydWN0IG9jZWxvdF9wb3J0X3ByaXZhdGUsIHBvcnQpOw0KPiArDQo+ICsJCWlmIChSRUFEX09O Q0UocHJpdi0+ZGV2LT5tdHUpID4gbmV3X210dSkNCj4gKwkJCW5ld19tdHUgPSBSRUFEX09OQ0Uo cHJpdi0+ZGV2LT5tdHUpOw0KPiArDQo+ICsJCS8qIEFsbCBwb3J0cyBtdXN0IGJlIGRvd24gdG8g Y2hhbmdlIHRoZSBSWCBidWZmZXIgbGVuZ3RoICovDQo+ICsJCWlmIChuZXRpZl9ydW5uaW5nKHBy aXYtPmRldikpDQo+ICsJCQlyZXR1cm4gLUVCVVNZOw0KPiArCX0NCj4gKwlwcml2ID0gbmV0ZGV2 X3ByaXYoZGV2KTsNCj4gKwlmZG1hLT5yeF9idWZfc2l6ZSA9IGZkbWFfcnhfY29tcHV0ZV9idWZm ZXJfc2l6ZShuZXdfbXR1KTsNCj4gKw0KPiArCW9jZWxvdF9wb3J0X3NldF9tYXhsZW4ob2NlbG90 LCBwcml2LT5jaGlwX3BvcnQsIGZkbWEtPnJ4X2J1Zl9zaXplKTsNCj4gKw0KPiArCWZkbWFfc3Rv cF9jaGFubmVsKGZkbWEsIE1TQ0NfRkRNQV9JTkpfQ0hBTik7DQo+ICsNCj4gKwkvKiBEaXNjYXJk IGFsbCBwZW5kaW5nIFJYIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSBkZXNjcmlwdG9yICovDQo+ICsJ ZmRtYV9mcmVlX3NrYnNfbGlzdChmZG1hLCAmZmRtYS0+cnhfaHcsIERNQV9GUk9NX0RFVklDRSk7 DQo+ICsJZmRtYV9mcmVlX3NrYnNfbGlzdChmZG1hLCAmZmRtYS0+cnhfc3csIERNQV9GUk9NX0RF VklDRSk7DQo+ICsNCj4gKwkvKiBNb3ZlIGFsbCBEQ0JzIHRvIGEgdGVtcG9yYXJ5IGxpc3QgdGhh dCB3aWxsIGJlIGluamVjdGVkIGluIHN3IGxpc3QgKi8NCj4gKwlpZiAoIWxpc3RfZW1wdHkoJmZk bWEtPnJ4X2h3KSkNCj4gKwkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZmZG1hLT5yeF9odywgJnRt cCk7DQo+ICsJaWYgKCFsaXN0X2VtcHR5KCZmZG1hLT5yeF9zdykpDQo+ICsJCWxpc3Rfc3BsaWNl X3RhaWxfaW5pdCgmZmRtYS0+cnhfc3csICZ0bXApOw0KPiArDQo+ICsJbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlKGRjYiwgZGNiX3RlbXAsICZ0bXAsIG5vZGUpIHsNCj4gKwkJbGlzdF9kZWwoJmRj Yi0+bm9kZSk7DQo+ICsJCW9jZWxvdF9mZG1hX3J4X2FkZF9kY2Jfc3coZmRtYSwgZGNiKTsNCj4g Kwl9DQo+ICsNCj4gKwlvY2Vsb3RfZmRtYV9yeF9yZWZpbGwoZmRtYSk7DQo+ICsNCj4gKwlyZXR1 cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBmZG1hX2luaXRfdHgoc3RydWN0IG9jZWxv dF9mZG1hICpmZG1hKQ0KPiArew0KPiArCWludCBpOw0KPiArCXN0cnVjdCBvY2Vsb3RfZmRtYV9k Y2IgKmRjYjsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBGRE1BX01BWF9TS0I7IGkrKykgew0K PiArCQlkY2IgPSBmZG1hX2RjYl9hbGxvYyhmZG1hKTsNCj4gKwkJaWYgKCFkY2IpDQo+ICsJCQly ZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCQlsaXN0X2FkZF90YWlsKCZkY2ItPm5vZGUsICZmZG1h LT50eF9mcmVlX2RjYik7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgZmRtYV9pbml0X3J4KHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSkNCj4gK3sN Cj4gKwlzdHJ1Y3Qgb2NlbG90X3BvcnRfcHJpdmF0ZSAqcG9ydF9wcml2Ow0KPiArCXN0cnVjdCBv Y2Vsb3QgKm9jZWxvdCA9IGZkbWEtPm9jZWxvdDsNCj4gKwlzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNi ICpkY2I7DQo+ICsJc3RydWN0IG9jZWxvdF9wb3J0ICpwb3J0Ow0KPiArCXN0cnVjdCBuZXRfZGV2 aWNlICpuZGV2Ow0KPiArCWludCBtYXhfbXR1ID0gMDsNCj4gKwlpbnQgaTsNCj4gKwl1OCBwb3J0 X251bTsNCj4gKw0KPiArCWZvciAocG9ydF9udW0gPSAwOyBwb3J0X251bSA8IG9jZWxvdC0+bnVt X3BoeXNfcG9ydHM7IHBvcnRfbnVtKyspIHsNCj4gKwkJcG9ydCA9IG9jZWxvdC0+cG9ydHNbcG9y dF9udW1dOw0KPiArCQlpZiAoIXBvcnQpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQlwb3J0 X3ByaXYgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IG9jZWxvdF9wb3J0X3ByaXZhdGUsDQo+ ICsJCQkJCSBwb3J0KTsNCj4gKwkJbmRldiA9IHBvcnRfcHJpdi0+ZGV2Ow0KPiArDQo+ICsJCW5k ZXYtPm5lZWRlZF9oZWFkcm9vbSA9IE9DRUxPVF9UQUdfTEVOOw0KPiArCQluZGV2LT5uZWVkZWRf dGFpbHJvb20gPSBFVEhfRkNTX0xFTjsNCj4gKw0KPiArCQlvY2Vsb3RfaWZoX3NldF9ieXBhc3Nf cXVpcmtzKHBvcnRfcHJpdi0+aWZoLCAxLA0KPiArCQkJCQkgICAgIFFVSVJLX0xJVFRMRV9FTkRJ QU4pOw0KPiArCQlvY2Vsb3RfaWZoX3NldF9kZXN0X3F1aXJrcyhwb3J0X3ByaXYtPmlmaCwgQklU X1VMTChwb3J0X251bSksDQo+ICsJCQkJCSAgIFFVSVJLX0xJVFRMRV9FTkRJQU4pOw0KPiArCQlv Y2Vsb3RfaWZoX3NldF90YWdfdHlwZV9xdWlya3MocG9ydF9wcml2LT5pZmgsIElGSF9UQUdfVFlQ RV9DLA0KPiArCQkJCQkgICAgICAgUVVJUktfTElUVExFX0VORElBTik7DQo+ICsNCj4gKwkJbmRl di0+bWF4X210dSA9IDkwMDAgLSBGRE1BX1JYX0VYVFJBX1NJWkU7DQo+ICsNCj4gKwkJaWYgKFJF QURfT05DRShuZGV2LT5tdHUpID4gbWF4X210dSkNCj4gKwkJCW1heF9tdHUgPSBSRUFEX09OQ0Uo bmRldi0+bXR1KTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoIW5kZXYpDQo+ICsJCXJldHVybiAtRU5P REVWOw0KPiArDQo+ICsJZmRtYS0+cnhfYnVmX3NpemUgPSBmZG1hX3J4X2NvbXB1dGVfYnVmZmVy X3NpemUobWF4X210dSk7DQo+ICsJbmV0aWZfbmFwaV9hZGQobmRldiwgJmZkbWEtPm5hcGksIG9j ZWxvdF9mZG1hX25hcGlfcG9sbCwNCj4gKwkJICAgICAgIEZETUFfV0VJR0hUKTsNCj4gKw0KPiAr CWZvciAoaSA9IDA7IGkgPCBGRE1BX01BWF9TS0I7IGkrKykgew0KPiArCQlkY2IgPSBmZG1hX2Rj Yl9hbGxvYyhmZG1hKTsNCj4gKwkJaWYgKCFkY2IpDQo+ICsJCQlyZXR1cm4gLUVOT01FTTsNCj4g Kw0KPiArCQlvY2Vsb3RfZmRtYV9yeF9hZGRfZGNiX3N3KGZkbWEsIGRjYik7DQo+ICsJfQ0KPiAr DQo+ICsJbmFwaV9lbmFibGUoJmZkbWEtPm5hcGkpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gK3N0cnVjdCBvY2Vsb3RfZmRtYSAqb2NlbG90X2ZkbWFfaW5pdChzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2LA0KPiArCQkJCSAgICAgc3RydWN0IG9jZWxvdCAqb2NlbG90KQ0K PiArew0KPiArCXN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ ICsJZmRtYSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmZkbWEpLCBHRlBfS0VS TkVMKTsNCj4gKwlpZiAoIWZkbWEpDQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiAr DQo+ICsJZmRtYS0+b2NlbG90ID0gb2NlbG90Ow0KPiArCWZkbWEtPmJhc2UgPSBkZXZtX3BsYXRm b3JtX2lvcmVtYXBfcmVzb3VyY2VfYnluYW1lKHBkZXYsICJmZG1hIik7DQo+ICsJaWYgKElTX0VS Ul9PUl9OVUxMKGZkbWEtPmJhc2UpKQ0KPiArCQlyZXR1cm4gZmRtYS0+YmFzZTsNCj4gKw0KPiAr CWZkbWEtPmRldiA9ICZwZGV2LT5kZXY7DQo+ICsJZmRtYS0+ZGV2LT5jb2hlcmVudF9kbWFfbWFz ayA9IERNQV9CSVRfTUFTSygzMik7DQo+ICsNCj4gKwlzcGluX2xvY2tfaW5pdCgmZmRtYS0+dHhf ZW5xdWV1ZV9sb2NrKTsNCj4gKwlzcGluX2xvY2tfaW5pdCgmZmRtYS0+dHhfZnJlZV9sb2NrKTsN Cj4gKw0KPiArCWZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9JTlRSX0VOQSwgMCk7DQo+ICsN Cj4gKwlmZG1hLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiZmRtYSIpOw0K PiArCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgZmRtYS0+aXJxLCBvY2Vsb3Rf ZmRtYV9pbnRlcnJ1cHQsIDAsDQo+ICsJCQkgICAgICAgZGV2X25hbWUoJnBkZXYtPmRldiksIGZk bWEpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7DQo+ICsNCj4gKwkv KiBDcmVhdGUgYSBwb29sIG9mIGNvbnNpc3RlbnQgbWVtb3J5IGJsb2NrcyBmb3IgaGFyZHdhcmUg ZGVzY3JpcHRvcnMgKi8NCj4gKwlmZG1hLT5kY2JfcG9vbCA9IGRtYW1fcG9vbF9jcmVhdGUoIm9j ZWxvdF9mZG1hIiwgJnBkZXYtPmRldiwNCj4gKwkJCQkJICBzaXplb2Yoc3RydWN0IG9jZWxvdF9m ZG1hX2RjYiksDQo+ICsJCQkJCSAgX19hbGlnbm9mX18oc3RydWN0IG9jZWxvdF9mZG1hX2RjYiks DQo+ICsJCQkJCSAgMCk7DQo+ICsJaWYgKCFmZG1hLT5kY2JfcG9vbCkgew0KPiArCQlkZXZfZXJy KCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgRE1BIGRlc2NyaXB0b3IgcG9vbFxuIik7 DQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiArCX0NCj4gKw0KPiArCUlOSVRfTElT VF9IRUFEKCZmZG1hLT50eF9vbmdvaW5nKTsNCj4gKwlJTklUX0xJU1RfSEVBRCgmZmRtYS0+dHhf ZnJlZV9kY2IpOw0KPiArCUlOSVRfTElTVF9IRUFEKCZmZG1hLT50eF9xdWV1ZWQpOw0KPiArCUlO SVRfTElTVF9IRUFEKCZmZG1hLT5yeF9zdyk7DQo+ICsJSU5JVF9MSVNUX0hFQUQoJmZkbWEtPnJ4 X2h3KTsNCj4gKw0KPiArCXJldHVybiBmZG1hOw0KPiArfQ0KPiArDQo+ICtpbnQgb2NlbG90X2Zk bWFfc3RhcnQoc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hKQ0KPiArew0KPiArCXN0cnVjdCBvY2Vs b3QgKm9jZWxvdCA9IGZkbWEtPm9jZWxvdDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0g ZmRtYV9pbml0X3R4KGZkbWEpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsN Cj4gKwlyZXQgPSBmZG1hX2luaXRfcngoZmRtYSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJu IHJldDsNCj4gKw0KPiArCS8qIFJlY29uZmlndXJlIGZvciBleHRyYWN0aW9uIGFuZCBpbmplY3Rp b24gdXNpbmcgRE1BICovDQo+ICsJb2NlbG90X3dyaXRlX3JpeChvY2Vsb3QsIFFTX0lOSl9HUlBf Q0ZHX01PREUoMiksIFFTX0lOSl9HUlBfQ0ZHLCAwKTsNCj4gKwlvY2Vsb3Rfd3JpdGVfcml4KG9j ZWxvdCwgUVNfSU5KX0NUUkxfR0FQX1NJWkUoMCksIFFTX0lOSl9DVFJMLCAwKTsNCj4gKw0KPiAr CW9jZWxvdF93cml0ZV9yaXgob2NlbG90LCBRU19YVFJfR1JQX0NGR19NT0RFKDIpLCBRU19YVFJf R1JQX0NGRywgMCk7DQo+ICsNCj4gKwlmZG1hX3dyaXRlbChmZG1hLCBNU0NDX0ZETUFfSU5UUl9M TFAsIDB4ZmZmZmZmZmYpOw0KPiArCWZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9JTlRSX0ZS TSwgMHhmZmZmZmZmZik7DQo+ICsNCj4gKwlmZG1hX3dyaXRlbChmZG1hLCBNU0NDX0ZETUFfSU5U Ul9MTFBfRU5BLA0KPiArCQkgICAgQklUKE1TQ0NfRkRNQV9JTkpfQ0hBTikgfCBCSVQoTVNDQ19G RE1BX1hUUl9DSEFOKSk7DQo+ICsJZmRtYV93cml0ZWwoZmRtYSwgTVNDQ19GRE1BX0lOVFJfRlJN X0VOQSwgQklUKE1TQ0NfRkRNQV9YVFJfQ0hBTikpOw0KPiArCWZkbWFfd3JpdGVsKGZkbWEsIE1T Q0NfRkRNQV9JTlRSX0VOQSwNCj4gKwkJICAgIEJJVChNU0NDX0ZETUFfSU5KX0NIQU4pIHwgQklU KE1TQ0NfRkRNQV9YVFJfQ0hBTikpOw0KPiArDQo+ICsJb2NlbG90X2ZkbWFfcnhfcmVmaWxsKGZk bWEpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK2ludCBvY2Vsb3RfZmRtYV9z dG9wKHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSkNCj4gK3sNCj4gKwlmZG1hX3dyaXRlbChmZG1h LCBNU0NDX0ZETUFfSU5UUl9FTkEsIDApOw0KPiArDQo+ICsJZmRtYV9zdG9wX2NoYW5uZWwoZmRt YSwgTVNDQ19GRE1BX1hUUl9DSEFOKTsNCj4gKwlmZG1hX3N0b3BfY2hhbm5lbChmZG1hLCBNU0ND X0ZETUFfSU5KX0NIQU4pOw0KPiArDQo+ICsJLyogRnJlZSBwb3RlbnRpYWxseSBwZW5kaW5nIFNL QnMgaW4gRENCIGxpc3RzICovDQo+ICsJZmRtYV9mcmVlX3NrYnNfbGlzdChmZG1hLCAmZmRtYS0+ cnhfaHcsIERNQV9GUk9NX0RFVklDRSk7DQo+ICsJZmRtYV9mcmVlX3NrYnNfbGlzdChmZG1hLCAm ZmRtYS0+cnhfc3csIERNQV9GUk9NX0RFVklDRSk7DQo+ICsJZmRtYV9mcmVlX3NrYnNfbGlzdChm ZG1hLCAmZmRtYS0+dHhfb25nb2luZywgRE1BX1RPX0RFVklDRSk7DQo+ICsJZmRtYV9mcmVlX3Nr YnNfbGlzdChmZG1hLCAmZmRtYS0+dHhfcXVldWVkLCBETUFfVE9fREVWSUNFKTsNCj4gKw0KPiAr CW5ldGlmX25hcGlfZGVsKCZmZG1hLT5uYXBpKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5oIGIv ZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5oDQo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uOWE0M2ZhMmE3ZGJhDQo+IC0tLSAvZGV2L251 bGwNCj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5oDQo+IEBA IC0wLDAgKzEsNjAgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCBP UiBNSVQpICovDQo+ICsvKg0KPiArICogTWljcm9zZW1pIFNvQ3MgRkRNQSBkcml2ZXINCj4gKyAq DQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWljcm9jaGlwDQo+ICsgKi8NCj4gKyNpZm5kZWYg X01TQ0NfT0NFTE9UX0ZETUFfSF8NCj4gKyNkZWZpbmUgX01TQ0NfT0NFTE9UX0ZETUFfSF8NCj4g Kw0KPiArI2luY2x1ZGUgIm9jZWxvdC5oIg0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCBvY2Vs b3RfZmRtYSAtIEZNREEgc3RydWN0DQo+ICsgKg0KPiArICogQG9jZWxvdDogUG9pbnRlciB0byBv Y2Vsb3Qgc3RydWN0DQo+ICsgKiBAYmFzZTogYmFzZSBhZGRyZXNzIG9mIEZETUEgcmVnaXN0ZXJz DQo+ICsgKiBAZGNiX3Bvb2w6IFBvb2wgdXNlZCBmb3IgRENCIGFsbG9jYXRpb24NCj4gKyAqIEBp cnE6IEZETUEgaW50ZXJydXB0DQo+ICsgKiBAZGV2OiBPY2Vsb3QgZGV2aWNlDQo+ICsgKiBAbmFw aTogbmFwaSBoYW5kbGUNCj4gKyAqIEByeF9idWZfc2l6ZTogU2l6ZSBvZiBSWCBidWZmZXINCj4g KyAqIEB0eF9vbmdvaW5nOiBMaXN0IG9mIERDQiBoYW5kZWQgb3V0IHRvIHRoZSBGRE1BDQo+ICsg KiBAdHhfcXVldWVkOiBwZW5kaW5nIGxpc3Qgb2YgRENCcyB0byBiZSBnaXZlbiB0byB0aGUgaGFy ZHdhcmUNCj4gKyAqIEB0eF9lbnF1ZXVlX2xvY2s6IExvY2sgdXNlZCBmb3IgdHhfcXVldWVkIGFu ZCB0eF9vbmdvaW5nDQo+ICsgKiBAdHhfZnJlZV9kY2I6IExpc3Qgb2YgRENCIGF2YWlsYWJsZSBm b3IgVFgNCj4gKyAqIEB0eF9mcmVlX2xvY2s6IExvY2sgdXNlZCB0byBhY2Nlc3MgdHhfZnJlZV9k Y2IgbGlzdA0KPiArICogQHJ4X2h3OiBSWCBEQ0JzIGN1cnJlbnRseSBvd25lZCBieSB0aGUgaGFy ZHdhcmUgYW5kIG5vdCBjb21wbGV0ZWQNCj4gKyAqIEByeF9zdzogUlggRENCcyBjb21wbGV0ZWQN Cj4gKyAqLw0KPiArc3RydWN0IG9jZWxvdF9mZG1hIHsNCj4gKwlzdHJ1Y3Qgb2NlbG90CQkqb2Nl bG90Ow0KPiArCXZvaWQgX19pb21lbQkJKmJhc2U7DQo+ICsJc3RydWN0IGRtYV9wb29sCQkqZGNi X3Bvb2w7DQo+ICsJaW50CQkJaXJxOw0KPiArCXN0cnVjdCBkZXZpY2UJCSpkZXY7DQo+ICsJc3Ry dWN0IG5hcGlfc3RydWN0CW5hcGk7DQo+ICsJc2l6ZV90CQkJcnhfYnVmX3NpemU7DQo+ICsNCj4g KwlzdHJ1Y3QgbGlzdF9oZWFkCXR4X29uZ29pbmc7DQo+ICsJc3RydWN0IGxpc3RfaGVhZAl0eF9x dWV1ZWQ7DQo+ICsJLyogTG9jayBmb3IgdHhfcXVldWVkIGFuZCB0eF9vbmdvaW5nIGxpc3RzICov DQo+ICsJc3BpbmxvY2tfdAkJdHhfZW5xdWV1ZV9sb2NrOw0KPiArDQo+ICsJc3RydWN0IGxpc3Rf aGVhZAl0eF9mcmVlX2RjYjsNCj4gKwkvKiBMb2NrIGZvciB0eF9mcmVlX2RjYiBsaXN0ICovDQo+ ICsJc3BpbmxvY2tfdAkJdHhfZnJlZV9sb2NrOw0KPiArDQo+ICsJc3RydWN0IGxpc3RfaGVhZAly eF9odzsNCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkCXJ4X3N3Ow0KPiArfTsNCj4gKw0KPiArc3RydWN0 IG9jZWxvdF9mZG1hICpvY2Vsb3RfZmRtYV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYsDQo+ICsJCQkJICAgICBzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpOw0KPiAraW50IG9jZWxvdF9m ZG1hX3N0YXJ0KHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSk7DQo+ICtpbnQgb2NlbG90X2ZkbWFf c3RvcChzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEpOw0KPiAraW50IG9jZWxvdF9mZG1hX2luamVj dF9mcmFtZShzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEsIHUzMiByZXdfb3AsDQo+ICsJCQkgICAg IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KPiAraW50IG9j ZWxvdF9mZG1hX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUp Ow0KPiArDQo+ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21z Y2Mvb2NlbG90X25ldC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfbmV0LmMN Cj4gaW5kZXggMjU0NTcyN2ZkNWIyLi44NDg2MThiZWNkMTkgMTAwNjQ0DQo+IC0tLSBhL2RyaXZl cnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jDQo+ICsrKyBiL2RyaXZlcnMvbmV0L2V0 aGVybmV0L21zY2Mvb2NlbG90X25ldC5jDQo+IEBAIC0xNSw2ICsxNSw3IEBADQo+ICAjaW5jbHVk ZSA8bmV0L3BrdF9jbHMuaD4NCj4gICNpbmNsdWRlICJvY2Vsb3QuaCINCj4gICNpbmNsdWRlICJv Y2Vsb3RfdmNhcC5oIg0KPiArI2luY2x1ZGUgIm9jZWxvdF9mZG1hLmgiDQo+ICANCj4gICNkZWZp bmUgT0NFTE9UX01BQ19RVUlSS1MJT0NFTE9UX1FVSVJLX1FTR01JSV9QT1JUU19NVVNUX0JFX1VQ DQo+ICANCj4gQEAgLTQ1Nyw3ICs0NTgsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgb2NlbG90X3Bv cnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiAg CWludCBwb3J0ID0gcHJpdi0+Y2hpcF9wb3J0Ow0KPiAgCXUzMiByZXdfb3AgPSAwOw0KPiAgDQo+ IC0JaWYgKCFvY2Vsb3RfY2FuX2luamVjdChvY2Vsb3QsIDApKQ0KPiArCWlmICghb2NlbG90LT5m ZG1hICYmICFvY2Vsb3RfY2FuX2luamVjdChvY2Vsb3QsIDApKQ0KPiAgCQlyZXR1cm4gTkVUREVW X1RYX0JVU1k7DQo+ICANCj4gIAkvKiBDaGVjayBpZiB0aW1lc3RhbXBpbmcgaXMgbmVlZGVkICov DQo+IEBAIC00NzUsMTMgKzQ3NiwzNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgb2NlbG90X3BvcnRf eG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiAgCQly ZXdfb3AgPSBvY2Vsb3RfcHRwX3Jld19vcChza2IpOw0KPiAgCX0NCj4gIA0KPiAtCW9jZWxvdF9w b3J0X2luamVjdF9mcmFtZShvY2Vsb3QsIHBvcnQsIDAsIHJld19vcCwgc2tiKTsNCj4gKwlpZiAo b2NlbG90LT5mZG1hKSB7DQo+ICsJCW9jZWxvdF9mZG1hX2luamVjdF9mcmFtZShvY2Vsb3QtPmZk bWEsIHJld19vcCwgc2tiLCBkZXYpOw0KPiArCX0gZWxzZSB7DQo+ICsJCW9jZWxvdF9wb3J0X2lu amVjdF9mcmFtZShvY2Vsb3QsIHBvcnQsIDAsIHJld19vcCwgc2tiKTsNCj4gIA0KPiAtCWtmcmVl X3NrYihza2IpOw0KPiArCQlrZnJlZV9za2Ioc2tiKTsNCj4gKwl9DQo+ICANCj4gIAlyZXR1cm4g TkVUREVWX1RYX09LOw0KPiAgfQ0KPiAgDQo+ICtpbnQgb2NlbG90X2NoYW5nZV9tdHUoc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpDQo+ICt7DQo+ICsJc3RydWN0IG9jZWxvdF9w b3J0X3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiArCXN0cnVjdCBvY2Vsb3Rf cG9ydCAqb2NlbG90X3BvcnQgPSAmcHJpdi0+cG9ydDsNCj4gKwlzdHJ1Y3Qgb2NlbG90ICpvY2Vs b3QgPSBvY2Vsb3RfcG9ydC0+b2NlbG90Ow0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlpZiAob2Nl bG90LT5mZG1hKSB7DQo+ICsJCXJldCA9IG9jZWxvdF9mZG1hX2NoYW5nZV9tdHUoZGV2LCBuZXdf bXR1KTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJ V1JJVEVfT05DRShkZXYtPm10dSwgbmV3X210dSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30N Cj4gKw0KPiAgZW51bSBvY2Vsb3RfYWN0aW9uX3R5cGUgew0KPiAgCU9DRUxPVF9NQUNUX0xFQVJO LA0KPiAgCU9DRUxPVF9NQUNUX0ZPUkdFVCwNCj4gQEAgLTc2OCw2ICs3OTEsNyBAQCBzdGF0aWMg Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG9jZWxvdF9wb3J0X25ldGRldl9vcHMgPSB7DQo+ ICAJLm5kb19vcGVuCQkJPSBvY2Vsb3RfcG9ydF9vcGVuLA0KPiAgCS5uZG9fc3RvcAkJCT0gb2Nl bG90X3BvcnRfc3RvcCwNCj4gIAkubmRvX3N0YXJ0X3htaXQJCQk9IG9jZWxvdF9wb3J0X3htaXQs DQo+ICsJLm5kb19jaGFuZ2VfbXR1CQkJPSBvY2Vsb3RfY2hhbmdlX210dSwNCg0KVGhpcyBzaG91 bGQgYmUgYSBzZXBhcmF0ZSBjaGFuZ2UuDQpBbHNvLCB5b3Ugc2hvdWxkIGNhbGwgb2NlbG90X3Bv cnRfc2V0X21heGxlbiB0b28uIFNlZSB3aGF0IHRoZSBmZWxpeCBkc2ENCmRyaXZlciBkb2VzLg0K DQo+ICAJLm5kb19zZXRfcnhfbW9kZQkJPSBvY2Vsb3Rfc2V0X3J4X21vZGUsDQo+ICAJLm5kb19z ZXRfbWFjX2FkZHJlc3MJCT0gb2NlbG90X3BvcnRfc2V0X21hY19hZGRyZXNzLA0KPiAgCS5uZG9f Z2V0X3N0YXRzNjQJCT0gb2NlbG90X2dldF9zdGF0czY0LA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfdnNjNzUxNC5jIGIvZHJpdmVycy9uZXQvZXRoZXJu ZXQvbXNjYy9vY2Vsb3RfdnNjNzUxNC5jDQo+IGluZGV4IGMzOTExOGU1YjNlZS4uOWZkZGE3MGE4 NDU3IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF92c2M3 NTE0LmMNCj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfdnNjNzUxNC5j DQo+IEBAIC0xOCw2ICsxOCw3IEBADQo+ICANCj4gICNpbmNsdWRlIDxzb2MvbXNjYy9vY2Vsb3Rf dmNhcC5oPg0KPiAgI2luY2x1ZGUgPHNvYy9tc2NjL29jZWxvdF9oc2lvLmg+DQo+ICsjaW5jbHVk ZSAib2NlbG90X2ZkbWEuaCINCj4gICNpbmNsdWRlICJvY2Vsb3QuaCINCj4gIA0KPiAgc3RhdGlj IGNvbnN0IHUzMiBvY2Vsb3RfYW5hX3JlZ21hcFtdID0gew0KPiBAQCAtMTA4Myw2ICsxMDg0LDEw IEBAIHN0YXRpYyBpbnQgbXNjY19vY2Vsb3RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikNCj4gIAkJb2NlbG90LT50YXJnZXRzW2lvX3RhcmdldFtpXS5pZF0gPSB0YXJnZXQ7DQo+ ICAJfQ0KPiAgDQo+ICsJb2NlbG90LT5mZG1hID0gb2NlbG90X2ZkbWFfaW5pdChwZGV2LCBvY2Vs b3QpOw0KPiArCWlmIChJU19FUlIob2NlbG90LT5mZG1hKSkNCj4gKwkJb2NlbG90LT5mZG1hID0g TlVMTDsNCj4gKw0KPiAgCWhzaW8gPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9jb21wYXRpYmxl KCJtc2NjLG9jZWxvdC1oc2lvIik7DQo+ICAJaWYgKElTX0VSUihoc2lvKSkgew0KPiAgCQlkZXZf ZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nIGhzaW8gc3lzY29uXG4iKTsNCj4gQEAgLTExNDYsNiAr MTE1MSwxMiBAQCBzdGF0aWMgaW50IG1zY2Nfb2NlbG90X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpDQo+ICAJaWYgKGVycikNCj4gIAkJZ290byBvdXRfb2NlbG90X2Rldmxpbmtf dW5yZWdpc3RlcjsNCj4gIA0KPiArCWlmIChvY2Vsb3QtPmZkbWEpIHsNCj4gKwkJZXJyID0gb2Nl bG90X2ZkbWFfc3RhcnQob2NlbG90LT5mZG1hKTsNCj4gKwkJaWYgKGVycikNCj4gKwkJCWdvdG8g b3V0X29jZWxvdF9kZXZsaW5rX3VucmVnaXN0ZXI7DQo+ICsJfQ0KPiArDQo+ICAJZXJyID0gb2Nl bG90X2Rldmxpbmtfc2JfcmVnaXN0ZXIob2NlbG90KTsNCj4gIAlpZiAoZXJyKQ0KPiAgCQlnb3Rv IG91dF9vY2Vsb3RfcmVsZWFzZV9wb3J0czsNCj4gQEAgLTExNzIsNiArMTE4Myw4IEBAIHN0YXRp YyBpbnQgbXNjY19vY2Vsb3RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4g IG91dF9vY2Vsb3RfcmVsZWFzZV9wb3J0czoNCj4gIAltc2NjX29jZWxvdF9yZWxlYXNlX3BvcnRz KG9jZWxvdCk7DQo+ICAJbXNjY19vY2Vsb3RfdGVhcmRvd25fZGV2bGlua19wb3J0cyhvY2Vsb3Qp Ow0KPiArCWlmIChvY2Vsb3QtPmZkbWEpDQo+ICsJCW9jZWxvdF9mZG1hX3N0b3Aob2NlbG90LT5m ZG1hKTsNCj4gIG91dF9vY2Vsb3RfZGV2bGlua191bnJlZ2lzdGVyOg0KPiAgCWRldmxpbmtfdW5y ZWdpc3RlcihkZXZsaW5rKTsNCj4gIG91dF9vY2Vsb3RfZGVpbml0Og0KPiBAQCAtMTE4Nyw2ICsx MjAwLDggQEAgc3RhdGljIGludCBtc2NjX29jZWxvdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikNCj4gIHsNCj4gIAlzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QgPSBwbGF0Zm9ybV9n ZXRfZHJ2ZGF0YShwZGV2KTsNCj4gIA0KPiArCWlmIChvY2Vsb3QtPmZkbWEpDQo+ICsJCW9jZWxv dF9mZG1hX3N0b3Aob2NlbG90LT5mZG1hKTsNCj4gIAlvY2Vsb3RfZGVpbml0X3RpbWVzdGFtcChv Y2Vsb3QpOw0KPiAgCW9jZWxvdF9kZXZsaW5rX3NiX3VucmVnaXN0ZXIob2NlbG90KTsNCj4gIAlt c2NjX29jZWxvdF9yZWxlYXNlX3BvcnRzKG9jZWxvdCk7DQo+IGRpZmYgLS1naXQgYS9pbmNsdWRl L2xpbnV4L2RzYS9vY2Vsb3QuaCBiL2luY2x1ZGUvbGludXgvZHNhL29jZWxvdC5oDQo+IGluZGV4 IDhhZTk5OWY1ODdjNC4uODg1YWZkYjk4MTU2IDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL2xpbnV4 L2RzYS9vY2Vsb3QuaA0KPiArKysgYi9pbmNsdWRlL2xpbnV4L2RzYS9vY2Vsb3QuaA0KPiBAQCAt MjA3LDE5ICsyMDcsMzcgQEAgc3RhdGljIGlubGluZSB2b2lkIG9jZWxvdF94ZmhfZ2V0X3ZsYW5f dGNpKHZvaWQgKmV4dHJhY3Rpb24sIHU2NCAqdmxhbl90Y2kpDQo+ICAJcGFja2luZyhleHRyYWN0 aW9uLCB2bGFuX3RjaSwgMTUsIDAsIE9DRUxPVF9UQUdfTEVOLCBVTlBBQ0ssIDApOw0KPiAgfQ0K PiAgDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgb2NlbG90X2lmaF9zZXRfYnlwYXNzX3F1aXJrcyh2 b2lkICppbmplY3Rpb24sIHU2NCBieXBhc3MsDQo+ICsJCQkJCQl1OCBxdWlya3MpDQo+ICt7DQo+ ICsJcGFja2luZyhpbmplY3Rpb24sICZieXBhc3MsIDEyNywgMTI3LCBPQ0VMT1RfVEFHX0xFTiwg UEFDSywgcXVpcmtzKTsNCj4gK30NCj4gKw0KPiAgc3RhdGljIGlubGluZSB2b2lkIG9jZWxvdF9p Zmhfc2V0X2J5cGFzcyh2b2lkICppbmplY3Rpb24sIHU2NCBieXBhc3MpDQo+ICB7DQo+IC0JcGFj a2luZyhpbmplY3Rpb24sICZieXBhc3MsIDEyNywgMTI3LCBPQ0VMT1RfVEFHX0xFTiwgUEFDSywg MCk7DQo+ICsJb2NlbG90X2lmaF9zZXRfYnlwYXNzX3F1aXJrcyhpbmplY3Rpb24sIGJ5cGFzcywg MCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2Vsb3RfaWZoX3NldF9yZXdf b3BfcXVpcmtzKHZvaWQgKmluamVjdGlvbiwgdTY0IHJld19vcCwNCj4gKwkJCQkJCXU4IHF1aXJr cykNCj4gK3sNCj4gKwlwYWNraW5nKGluamVjdGlvbiwgJnJld19vcCwgMTI1LCAxMTcsIE9DRUxP VF9UQUdfTEVOLCBQQUNLLCBxdWlya3MpOw0KPiAgfQ0KPiAgDQo+ICBzdGF0aWMgaW5saW5lIHZv aWQgb2NlbG90X2lmaF9zZXRfcmV3X29wKHZvaWQgKmluamVjdGlvbiwgdTY0IHJld19vcCkNCj4g IHsNCj4gLQlwYWNraW5nKGluamVjdGlvbiwgJnJld19vcCwgMTI1LCAxMTcsIE9DRUxPVF9UQUdf TEVOLCBQQUNLLCAwKTsNCj4gKwlvY2Vsb3RfaWZoX3NldF9yZXdfb3BfcXVpcmtzKGluamVjdGlv biwgcmV3X29wLCAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIG9jZWxvdF9p Zmhfc2V0X2Rlc3RfcXVpcmtzKHZvaWQgKmluamVjdGlvbiwgdTY0IGRlc3QsDQo+ICsJCQkJCSAg ICAgIHU4IHF1aXJrcykNCj4gK3sNCj4gKwlwYWNraW5nKGluamVjdGlvbiwgJmRlc3QsIDY3LCA1 NiwgT0NFTE9UX1RBR19MRU4sIFBBQ0ssIHF1aXJrcyk7DQo+ICB9DQo+ICANCj4gIHN0YXRpYyBp bmxpbmUgdm9pZCBvY2Vsb3RfaWZoX3NldF9kZXN0KHZvaWQgKmluamVjdGlvbiwgdTY0IGRlc3Qp DQo+ICB7DQo+IC0JcGFja2luZyhpbmplY3Rpb24sICZkZXN0LCA2NywgNTYsIE9DRUxPVF9UQUdf TEVOLCBQQUNLLCAwKTsNCj4gKwlvY2Vsb3RfaWZoX3NldF9kZXN0X3F1aXJrcyhpbmplY3Rpb24s IGRlc3QsIDApOw0KPiAgfQ0KPiAgDQo+ICBzdGF0aWMgaW5saW5lIHZvaWQgb2NlbG90X2lmaF9z ZXRfcW9zX2NsYXNzKHZvaWQgKmluamVjdGlvbiwgdTY0IHFvc19jbGFzcykNCj4gQEAgLTIzNywx NCArMjU1LDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBvY2Vsb3RfaWZoX3NldF9zcmModm9pZCAq aW5qZWN0aW9uLCB1NjQgc3JjKQ0KPiAgCXBhY2tpbmcoaW5qZWN0aW9uLCAmc3JjLCA0NiwgNDMs IE9DRUxPVF9UQUdfTEVOLCBQQUNLLCAwKTsNCj4gIH0NCj4gIA0KPiArc3RhdGljIGlubGluZSB2 b2lkIG9jZWxvdF9pZmhfc2V0X3RhZ190eXBlX3F1aXJrcyh2b2lkICppbmplY3Rpb24sIHU2NCB0 YWdfdHlwZSwNCj4gKwkJCQkJCSAgdTggcXVpcmtzKQ0KPiArew0KPiArCXBhY2tpbmcoaW5qZWN0 aW9uLCAmdGFnX3R5cGUsIDE2LCAxNiwgT0NFTE9UX1RBR19MRU4sIFBBQ0ssIHF1aXJrcyk7DQo+ ICt9DQo+ICsNCj4gIHN0YXRpYyBpbmxpbmUgdm9pZCBvY2Vsb3RfaWZoX3NldF90YWdfdHlwZSh2 b2lkICppbmplY3Rpb24sIHU2NCB0YWdfdHlwZSkNCj4gIHsNCj4gLQlwYWNraW5nKGluamVjdGlv biwgJnRhZ190eXBlLCAxNiwgMTYsIE9DRUxPVF9UQUdfTEVOLCBQQUNLLCAwKTsNCj4gKwlvY2Vs b3RfaWZoX3NldF90YWdfdHlwZV9xdWlya3MoaW5qZWN0aW9uLCB0YWdfdHlwZSwgMCk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2Vsb3RfaWZoX3NldF92aWRfcXVpcmtzKHZv aWQgKmluamVjdGlvbiwgdTY0IHZpZCwNCj4gKwkJCQkJICAgICB1OCBxdWlya3MpDQo+ICt7DQo+ ICsJcGFja2luZyhpbmplY3Rpb24sICZ2aWQsIDExLCAwLCBPQ0VMT1RfVEFHX0xFTiwgUEFDSywg cXVpcmtzKTsNCj4gIH0NCj4gIA0KPiAgc3RhdGljIGlubGluZSB2b2lkIG9jZWxvdF9pZmhfc2V0 X3ZpZCh2b2lkICppbmplY3Rpb24sIHU2NCB2aWQpDQo+ICB7DQo+IC0JcGFja2luZyhpbmplY3Rp b24sICZ2aWQsIDExLCAwLCBPQ0VMT1RfVEFHX0xFTiwgUEFDSywgMCk7DQo+ICsJb2NlbG90X2lm aF9zZXRfdmlkX3F1aXJrcyhpbmplY3Rpb24sIHZpZCwgMCk7DQo+ICB9DQo+ICANCj4gIC8qIERl dGVybWluZSB0aGUgUFRQIFJFV19PUCB0byB1c2UgZm9yIGluamVjdGluZyB0aGUgZ2l2ZW4gc2ti ICovDQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3NvYy9tc2NjL29jZWxvdC5oIGIvaW5jbHVkZS9z b2MvbXNjYy9vY2Vsb3QuaA0KPiBpbmRleCBkNzA1NWI0MTk4MmQuLjY3NTZlMTNmNjlmNyAxMDA2 NDQNCj4gLS0tIGEvaW5jbHVkZS9zb2MvbXNjYy9vY2Vsb3QuaA0KPiArKysgYi9pbmNsdWRlL3Nv Yy9tc2NjL29jZWxvdC5oDQo+IEBAIC02NzksNiArNjc5LDggQEAgc3RydWN0IG9jZWxvdCB7DQo+ ICAJLyogUHJvdGVjdHMgdGhlIFBUUCBjbG9jayAqLw0KPiAgCXNwaW5sb2NrX3QJCQlwdHBfY2xv Y2tfbG9jazsNCj4gIAlzdHJ1Y3QgcHRwX3Bpbl9kZXNjCQlwdHBfcGluc1tPQ0VMT1RfUFRQX1BJ TlNfTlVNXTsNCj4gKw0KPiArCXN0cnVjdCBvY2Vsb3RfZmRtYQkJKmZkbWE7DQo+ICB9Ow0KPiAg DQo+ICBzdHJ1Y3Qgb2NlbG90X3BvbGljZXIgew0KPiAtLSANCj4gMi4zMy4wDQo+