Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp360456pxb; Wed, 3 Nov 2021 05:33:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJysZVbrW9INE/z/R1thDuv83b3Q2Gr9cFHA2x5n9byXo88bERHAOlV5PS91oWFK0f7530PJ X-Received: by 2002:a05:6602:2b83:: with SMTP id r3mr30605049iov.8.1635942794163; Wed, 03 Nov 2021 05:33:14 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1635942794; cv=pass; d=google.com; s=arc-20160816; b=cMX9uPjj5UxuSRnHW0XJQuFf9vwUV14xhztEsSQIXwTn1EB7u2Yv4V4sPxVkULS9rT EKbpoVwD8Z8klfY93a0MlGKHB1cCDp3cdhD2G1S1Tu1+5vU2ybqqq97ajUFO5wAA1yRR cDrNWjTIQz1ICx4hcSsej5B9sYW/37BPsJCwSmym3QD5+zlxaXqgukbjuBxnzJeLQ52A ouUXf3kNCYknHbnV+Yo86vSPd/Kb0GXElt2/hZpEgS6DGgqYv4KoJs3uABY7JMtDb7WX iAzmqS8+ujQinw8TkOg1QLgnKS8hVOAbnLG2dj5XRxtJ07xij0WnADJuf7Lx/Q5KObM9 19Qw== 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=aRzzWMgDvnWiVZCVgJo4ZurdkhtDUyTPabguzLG9Lhk=; b=ZD7NxNo5Pa0u4AmvsJCbuyIZz2rHPkXihAdysCBpbm7Bu+3aTta5kp35ySwNx5EsVj 8drI0lA8DdOtAa0mlx57gpC7CUcNdBKuYoh9whpyvEqbhUiHehAesEl77BrBaHB/IXjz 8LSp5Q9xLHTI1mK4ATqUhNNdrKvz9AvarM8C2f9PjbgRnscCGbJqgca9fKRnFfEe/t2Y oZay+HnNkQ53YxVddAEQL2CDmB1o5EuKiNBiu79oCQ3QYdWJrbPCs9oo4tCbzVV9AYjp jRuUPNT64zOC5Lao6YdvTEFmfZuvddErQ/JzJFwAxZeWsmJtfARJ49dyI+manUsNUJD8 4fmg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=JTdGpCRB; 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 d1si4354311ilg.74.2021.11.03.05.32.59; Wed, 03 Nov 2021 05:33:14 -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=JTdGpCRB; 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 S231705AbhKCMef (ORCPT + 99 others); Wed, 3 Nov 2021 08:34:35 -0400 Received: from mail-eopbgr40088.outbound.protection.outlook.com ([40.107.4.88]:35073 "EHLO EUR03-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S230472AbhKCMee (ORCPT ); Wed, 3 Nov 2021 08:34:34 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Bf1tO5bTZiH4nhgxAY269lUVSkg66dmBIYFgRPyzyAKG4DY5WPJnXDSff03ndH1/whz0SAU09a0IOiwMriimMI9nIaUBDpSaainzZO2TJaw24pgtwHN7/MgcaZ9x9AgQtOl21GTwqbsUlbS4UopHIVhqGOj3X/kuemtZogwVG1SK4k9SSlYYvBH0Z0BB6yp1jF5pVMZX/7805PUnufnixitYltsTjHOsOVbqTxLbaB2ZOnLtwJp2FFGIm7nfi2VwapzU9qddVnDunPQ2VXhaXScaHhX+831I5sC2R7VQHiyb6suBDsrzZ75BoWdajUfk9l2HzghrCzIzXJ2+p3k8Lg== 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=aRzzWMgDvnWiVZCVgJo4ZurdkhtDUyTPabguzLG9Lhk=; b=g9KKAitWpQupdk85ogftIeMyh6T2aFGaqcgnB5GfkFdFd9CdawQct7YFLTDf6FcIQQoecHDpg3YEtOD80U7AkNTzwS6V4OQ/hPRu64Aj6BjejKMEVFUpHtmGu3Yzxu52vGt78SgvJNGf2zsluA6qnje4ikXFCfa8QxrsmgjK+17pGf6X0dfCGM+brPuOPgGtMo/P7IfHP6mqodxQ0UwZeVNS8I9Ui4rFR9dEgthBWNosbvTFhVzdMtlsp7J2+++B0axYg+DaAn3geGevMAtLy4rgVk0KITxGzR9r7vkquJFYnsOINxfEvw0gRDJlO87WYY+zwAWOjnYu1L/ePEpIoA== 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=aRzzWMgDvnWiVZCVgJo4ZurdkhtDUyTPabguzLG9Lhk=; b=JTdGpCRBtI9fuFam4POM+3t/jUdF5smffrQBRXeIewXqXPL5P3OKv1zLCdPLNgxdC1ozW/idBFT32YHykU4ccXqcP6dTH/P6kz1GFvAfV9GTL0z35jfq94oKMVhdvi72hhC6zcRiZreTdoyOyyMXN/kn4zpwJ1ucOmOL1rIJvSY= Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by VI1PR0402MB3549.eurprd04.prod.outlook.com (2603:10a6:803:8::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4649.19; Wed, 3 Nov 2021 12:31:54 +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.4649.020; Wed, 3 Nov 2021 12:31:54 +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" , Thomas Petazzoni Subject: Re: [PATCH v2 5/6] net: ocelot: add FDMA support Thread-Topic: [PATCH v2 5/6] net: ocelot: add FDMA support Thread-Index: AQHX0JQNkal02ZEvPkS4pjnB9wAOiKvxvGiA Date: Wed, 3 Nov 2021 12:31:54 +0000 Message-ID: <20211103123153.li3rvt4753rm5w66@skbuf> References: <20211103091943.3878621-1-clement.leger@bootlin.com> <20211103091943.3878621-6-clement.leger@bootlin.com> In-Reply-To: <20211103091943.3878621-6-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: ba59abcc-bb9a-404b-95f7-08d99ec5eb47 x-ms-traffictypediagnostic: VI1PR0402MB3549: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:655; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: d/ViyTUNNJWxxycGZl/he3QGfbnURKV83OWF+7K1Ank3BTNaLCxDmHiqUh22fm7b/AGCFWICp7UJkwLB33A0V9ZKyi3sT2ct8PXnRfWy4vJ1Ry9AsXFQkFRSNM4S3xqficxHekSAg7o8bcHeNPJFxKyL9bgLRgvqUZYv0WOnJj0NUWrCmb4g9+iRBXedOJwnLAzXT6Gie3o5SraSopTkqbIPwvFXAuUwUqszNkzDM672wtdPzBE2QVn5nyyz3/ivDLyx/Xu2crS+m6z0MR2KjGa3lmN7O/sAyyLq570SwuVKVLgPD6ItT7O6i6WjVR6G+2LM30HCuFLRmSrGIXyjagZpGZXy0AIlPs76nID7ljumqN2iuulqTXwi23PPMvQ4c9jgf3eEZDklDcBBBUrwDwXv/KkTNq30ybSQ3HmDsf8BOZsg8y+yiBxhx3ODyPlNU6f2lpXNVYdkq9hMbo6dhR8LECd5FSGxufrUIQk11MkyP4r2Lzdho+U+VhiqSNyi01gBvWSUa9VCaWkEKB9WpHxWoowTQ3Km7JDhBMYHUhRNri/0AYM9zVfP+bI5nbbUB5RVIMs29mC1LgWXXARyP+WlqVJ4XuIntQrlbgG86DRSwgrGoLvGtSMZL8yaj/lcOmoxcoOIHTu0/WFXmQYwn1KCyaUG97POJiTYiFx30A5mPoFzfzhV9Y+2D9LDZc/hkU8e5CKV2FJvd5l76Ab9zQ== 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)(76116006)(38070700005)(6486002)(30864003)(508600001)(33716001)(91956017)(316002)(8936002)(6512007)(4326008)(9686003)(66574015)(64756008)(54906003)(66446008)(26005)(44832011)(5660300002)(6916009)(66556008)(38100700002)(2906002)(71200400001)(66946007)(83380400001)(7416002)(186003)(6506007)(86362001)(8676002)(1076003)(66476007)(122000001)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?a1N1bVFnWlBOMytSS0Q5WThtQkFGRDF2VlA5ZUM2V2JOT1l3MHRoR3BZQmtj?= =?utf-8?B?UmsxQlVGSkQwWTNZSHRFZndkTXAzTlJpZy9YY21hU1lWU0tyaGVJczRSM3Zn?= =?utf-8?B?UmF5cldZT01LREtWRjZGOXlPdDI3ZW1PdVhXRUtxckx2clU4YzNBbCtvakxD?= =?utf-8?B?emUrS1NzTU40VXJhTkZJYWZVYURaWk4xbW5ibTF5VGpucHkzWVdBSkx0bHk0?= =?utf-8?B?TGlVaUNGcmpJMTlaRzMxZjBRNko1RVB1YnNhYmUrVzV2ZEJEYUw3VGc1aTMw?= =?utf-8?B?dldkUWc0YmlqRkJwWmtybS8rK3ZFMVBYMVZ1TU5NcVhGZlhsbWhSSVlUcEg4?= =?utf-8?B?Z0toUVBRWWw5dFJ5aytiMFpaY21JeXhVUENHK2phblZSSnY4UC9YYVRQZmlV?= =?utf-8?B?RHpLQmR3RXVKUFBHNzFyaWl2VkU5NmtHTmF0SUM4WmNJTVJ4ZFMydkt3Nm9M?= =?utf-8?B?ODFBeUFGeUZaYk5zWHRDaG9DamVtS0FyYW13YTBWTFJXY2VNUTB5b0gzdHEv?= =?utf-8?B?MGpmSnRZSGNuUlUveDQxSkxVNy9PVGlOK0VnWDlaZkc0TnZlK3pST3MydVo3?= =?utf-8?B?c1czVktzSWJKV0E0eWxIOUxpakhGZFdBU0JtZGhKWk05M3FRbTkwOEhoWXd6?= =?utf-8?B?VDA3L1ZUU3N4eEoreXZnRU1nN1VNN3NJZnhpdEFJTEI3Y0Z4dEcwMWdoTG9M?= =?utf-8?B?ZXcwTTU5dDZnWE9uZis2MVp1am1ydEVJeHhTQkRDMVB1SGJlVFI5MnhNQ2hX?= =?utf-8?B?N21TdnBnTHR3RzhrMVhaUlNFWXJ4cGJNWE5xY3B6UGhYa1RuVXJhMnkwdWNq?= =?utf-8?B?K0hHN1VqVFVjZVFOakZYclFxcUtiaXFhR0g5cUpRMGdkK1A1VnpkWG1icnFL?= =?utf-8?B?VENRQ2Y3WURkaFppdnhlek9FTlRUeXZsVmdMMGcwaGlqS3dxNjB0UlJSNnJm?= =?utf-8?B?ZHhCWFhDSFk4S20yY0NFQ0RvMVNJdzcvbTVCdjVvekJLbUlxMzV4WGpvU0RQ?= =?utf-8?B?a2hjZlJyWDZUVVh2L1RjZXZCVU5IK3hvNFNVd2N6VHo2NUVJUCswQXNROWZR?= =?utf-8?B?WnNmenZBc0I4d2djMElTZ1ltMC9ZV0lRdi9BZDFWN0thSmg0QWlrbEJ3TlZi?= =?utf-8?B?aDF3Tko4bmZnRWxid3dwLzNmVXk2YUVzdkVPa3pGNGFmbzhpRDlNNjZXNzZK?= =?utf-8?B?b3E1eno1ckJjMWUwWVd1WStseUprcjZabmhSMlQxWUJRUEx1YUxvWmlMVzZX?= =?utf-8?B?MVFnVXFuNjR6em9YWGgvMkxXQU1iTFphMHJQbWs0U0o2WEZ4d3FSNFpNZm8y?= =?utf-8?B?NnA3b2lvelZ1UkNSZlJrYmJyalVVZFFid3ZsbFdjT1B5c1dGMWJ0RVVKSTUv?= =?utf-8?B?S3NpcWQrS3M1VnAzTVlzMThvUndvN2xwL1pUb01HRXd3MlZEclkyZkNsTFNi?= =?utf-8?B?ZjAyREtvMUNLSmsrOFlzYVg1V0NGMWwwVW0zVCtXUzcxeUxoRm8xOGphNXdj?= =?utf-8?B?QXRyTEJNUEpLdFdTcWJqN28zUzIrdVBVWkYzbjhRR1NmR0QzeVpqalJ4cTU5?= =?utf-8?B?MzVjUjQ1WGZwdTBNTlc0aWs4VzlvT2NxMEc3eWIrQVlnNGYzalErK0JHanZR?= =?utf-8?B?SGJDT2dtOEc0WSs4YS9acjdHZEp6NENCMDNTbWlZVHQwbUVsMW1zeWovejNn?= =?utf-8?B?dnk2MUZ0MkdXd1FtWUR6Qmo2ZE54MWN5elNreW5PZmxQNDdjWWFvNklibnhv?= =?utf-8?B?dnQyVWVsbTloY0I2Y1EvS2RVOXUzeVN4aENQVkhQdi80bm1GRTF4bTJuV0dh?= =?utf-8?B?c3pwTzliVU11dE1OV1NHbFdheU40enJ5djJiM3Q3VS9jOTBEQWRreG13ZUFL?= =?utf-8?B?RmxyNlpjY2xURVEyeC8rajA1eG80VHAzKy8ybnpTR0RCUnQ1NDRZZndGRWFa?= =?utf-8?B?WkhoY052RUZldVVyZU4rNFVPZHBTenR6ZlVxSWF4QVZzNjFhdGNsZlBsaUdh?= =?utf-8?B?cUhIWTB5R3dkZmYzTnJFNHQ1TGN6MkUrWU1KSDhSV254NUZaamhudUlXUkVa?= =?utf-8?B?VUxvQkYrTGk5Ymx6NmxQWnpwcnJjK2F0K1pKWDcwRi9rcW56a1FTVS9KMWZs?= =?utf-8?B?WjUvNUJ2YmJWaG5ZREpwSU9wS015czVMQ0lCajEwZEx5VU92MklwQVEwSGFR?= =?utf-8?Q?hNfQ6Bw+/LLeqJlxAiHc92KZH4ELWjYyqtq0rfpTygkN?= Content-Type: text/plain; charset="utf-8" Content-ID: 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: ba59abcc-bb9a-404b-95f7-08d99ec5eb47 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Nov 2021 12:31:54.1129 (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: EFb8KCzhuyXjYjTDVLeiH/g/S/h6KIabaT3yDFoq9dSDEBph2eHiF61+OnA5WDlmQ4uKA4fByrWI3fVmHcdFNw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3549 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gV2VkLCBOb3YgMDMsIDIwMjEgYXQgMTA6MTk6NDJBTSArMDEwMCwgQ2zDqW1lbnQgTMOpZ2Vy 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 Cj4gLS0tDQoNCkhvbmVzdGx5LCBteSBtaW5kIGV4cGxvZGVkIHdoZW4gSSBzYXcgbG9ja2luZyBi ZXR3ZWVuIFRYIGFuZCBUWA0KY29uZmlybWF0aW9uLiBDYW4geW91IG5vdCBjb25zdHJhaW4gdGhl IGxpc3Qgb2YgVFggRENCcyB0byBhY3QgbGlrZSBhDQpyaW5nLWJhc2VkIGRldmljZT8gTWVhbmlu ZyB0aGF0IHRoZSBsaW5rZWQgbGlzdCBpcyBhbHdheXMgY29uc3RhbnQgaW4NCnNpemUsIGFuZCB5 b3UganVzdCB1cGRhdGUgdGhlIExpbmtlZCBMaXN0IFBvaW50ZXIgb2YgdGhlIGxhc3QgZW50cnkN CnBvcHVsYXRlZCBieSBzb2Z0d2FyZSB0byBiZSBOVUxMLCB0byBtYWtlIHRoZSBoYXJkd2FyZSBz dG9wIHByb2Nlc3NpbmcNCmJleW9uZCB0aGF0IHBvaW50LiBUaGlzIGNvdWxkIGhlbHAgeW91IGF2 b2lkIGtlZXBpbmcgYSBsaXN0IGluIHNvZnR3YXJlLA0KYW5kIGEgRE1BIHBvb2wgZm9yIHRoZSBE Q0JzLCBqdXN0IGhhdmUgYSBjb250aWd1b3VzIG1lbW9yeSBtYXBwaW5nIG9mDQphbGwgdGhlIERD QnMgZm9yIFRYLCBhbmQgdGhlbiB5b3Ugc2hvdWxkbid0IG5lZWQgYSBzcGluX2xvY2sgZm9yIGEg bGlzdA0KeW91IG5vIGxvbmdlciBrZWVwLg0KDQpJIGhhdmVuJ3QgZXZlbiBnb3R0ZW4gdG8gcmV2 aWV3aW5nIFJYIHByb3Blcmx5Li4uDQoNCj4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvTWFr ZWZpbGUgICAgICAgICB8ICAgMSArDQo+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxv dC5oICAgICAgICAgfCAgIDEgKw0KPiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3Rf ZmRtYS5jICAgIHwgNjkzICsrKysrKysrKysrKysrKysrKysrKw0KPiAgZHJpdmVycy9uZXQvZXRo ZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5oICAgIHwgIDU5ICsrDQo+ICBkcml2ZXJzL25ldC9ldGhl cm5ldC9tc2NjL29jZWxvdF9uZXQuYyAgICAgfCAgMTEgKy0NCj4gIGRyaXZlcnMvbmV0L2V0aGVy bmV0L21zY2Mvb2NlbG90X3ZzYzc1MTQuYyB8ICAxNSArDQo+ICBpbmNsdWRlL3NvYy9tc2NjL29j ZWxvdC5oICAgICAgICAgICAgICAgICAgfCAgIDIgKw0KPiAgNyBmaWxlcyBjaGFuZ2VkLCA3Nzkg aW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mZG1hLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mZG1hLmgNCj4gDQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRo ZXJuZXQvbXNjYy9NYWtlZmlsZQ0KPiBpbmRleCA3MjJjMjc2OTRiMjEuLmQ3NmE5Yjc4YjZjYSAx MDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9NYWtlZmlsZQ0KPiArKysg Yi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL01ha2VmaWxlDQo+IEBAIC0xMSw1ICsxMSw2IEBA IG1zY2Nfb2NlbG90X3N3aXRjaF9saWIteSA6PSBcDQo+ICBtc2NjX29jZWxvdF9zd2l0Y2hfbGli LSQoQ09ORklHX0JSSURHRV9NUlApICs9IG9jZWxvdF9tcnAubw0KPiAgb2JqLSQoQ09ORklHX01T Q0NfT0NFTE9UX1NXSVRDSCkgKz0gbXNjY19vY2Vsb3Qubw0KPiAgbXNjY19vY2Vsb3QteSA6PSBc DQo+ICsJb2NlbG90X2ZkbWEubyBcDQo+ICAJb2NlbG90X3ZzYzc1MTQubyBcDQo+ICAJb2NlbG90 X25ldC5vDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdC5o IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3QuaA0KPiBpbmRleCBiYTBkZWM3ZGQ2 NGYuLmFkODVhZDEwNzlhZCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNj Yy9vY2Vsb3QuaA0KPiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdC5oDQo+ IEBAIC05LDYgKzksNyBAQA0KPiAgI2RlZmluZSBfTVNDQ19PQ0VMT1RfSF8NCj4gIA0KPiAgI2lu Y2x1ZGUgPGxpbnV4L2JpdG9wcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2RzYS9vY2Vsb3QuaD4N Cj4gICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPg0KPiAgI2luY2x1ZGUgPGxpbnV4L2lm X3ZsYW4uaD4NCj4gICNpbmNsdWRlIDxsaW51eC9uZXRfdHN0YW1wLmg+DQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mZG1hLmMgYi9kcml2ZXJzL25ldC9l dGhlcm5ldC9tc2NjL29jZWxvdF9mZG1hLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5k ZXggMDAwMDAwMDAwMDAwLi5kOGNkZjAyMmJiZWUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9k cml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mZG1hLmMNCj4gQEAgLTAsMCArMSw2OTMg QEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCBPUiBNSVQpDQo+ICsv Kg0KPiArICogTWljcm9zZW1pIFNvQ3MgRkRNQSBkcml2ZXINCj4gKyAqDQo+ICsgKiBDb3B5cmln aHQgKGMpIDIwMjEgTWljcm9jaGlwDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L2Jp dG9wcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9kc2Evb2NlbG90Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+DQo+ICsjaW5j bHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4N Cj4gKw0KPiArI2luY2x1ZGUgIm9jZWxvdF9mZG1hLmgiDQo+ICsjaW5jbHVkZSAib2NlbG90X3Fz LmgiDQo+ICsNCj4gKyNkZWZpbmUgTVNDQ19GRE1BX0RDQl9MTFAoeCkJCQkoKHgpICogNCArIDB4 MCkNCj4gKw0KPiArI2RlZmluZSBNU0NDX0ZETUFfRENCX1NUQVRfQkxPQ0tPKHgpCQkoKCh4KSA8 PCAyMCkgJiBHRU5NQVNLKDMxLCAyMCkpDQo+ICsjZGVmaW5lIE1TQ0NfRkRNQV9EQ0JfU1RBVF9C TE9DS09fTQkJR0VOTUFTSygzMSwgMjApDQo+ICsjZGVmaW5lIE1TQ0NfRkRNQV9EQ0JfU1RBVF9C TE9DS09fWCh4KQkJKCgoeCkgJiBHRU5NQVNLKDMxLCAyMCkpID4+IDIwKQ0KPiArI2RlZmluZSBN U0NDX0ZETUFfRENCX1NUQVRfUEQJCQlCSVQoMTkpDQo+ICsjZGVmaW5lIE1TQ0NfRkRNQV9EQ0Jf U1RBVF9BQk9SVAkJQklUKDE4KQ0KPiArI2RlZmluZSBNU0NDX0ZETUFfRENCX1NUQVRfRU9GCQkJ QklUKDE3KQ0KPiArI2RlZmluZSBNU0NDX0ZETUFfRENCX1NUQVRfU09GCQkJQklUKDE2KQ0KPiAr I2RlZmluZSBNU0NDX0ZETUFfRENCX1NUQVRfQkxPQ0tMX00JCUdFTk1BU0soMTUsIDApDQo+ICsj ZGVmaW5lIE1TQ0NfRkRNQV9EQ0JfU1RBVF9CTE9DS0woeCkJCSgoeCkgJiBHRU5NQVNLKDE1LCAw KSkNCj4gKw0KPiArI2RlZmluZSBNU0NDX0ZETUFfQ0hfU0FGRQkJCTB4Y2MNCj4gKw0KPiArI2Rl ZmluZSBNU0NDX0ZETUFfQ0hfQUNUSVZBVEUJCQkweGQwDQo+ICsNCj4gKyNkZWZpbmUgTVNDQ19G RE1BX0NIX0RJU0FCTEUJCQkweGQ0DQo+ICsNCj4gKyNkZWZpbmUgTVNDQ19GRE1BX0VWVF9FUlIJ CQkweDE2NA0KPiArDQo+ICsjZGVmaW5lIE1TQ0NfRkRNQV9FVlRfRVJSX0NPREUJCQkweDE2OA0K PiArDQo+ICsjZGVmaW5lIE1TQ0NfRkRNQV9JTlRSX0xMUAkJCTB4MTZjDQo+ICsNCj4gKyNkZWZp bmUgTVNDQ19GRE1BX0lOVFJfTExQX0VOQQkJCTB4MTcwDQo+ICsNCj4gKyNkZWZpbmUgTVNDQ19G RE1BX0lOVFJfRlJNCQkJMHgxNzQNCj4gKw0KPiArI2RlZmluZSBNU0NDX0ZETUFfSU5UUl9GUk1f RU5BCQkJMHgxNzgNCj4gKw0KPiArI2RlZmluZSBNU0NDX0ZETUFfSU5UUl9FTkEJCQkweDE4NA0K PiArDQo+ICsjZGVmaW5lIE1TQ0NfRkRNQV9JTlRSX0lERU5UCQkJMHgxODgNCj4gKw0KPiArI2Rl ZmluZSBNU0NDX0ZETUFfSU5KX0NIQU4JCQkyDQo+ICsjZGVmaW5lIE1TQ0NfRkRNQV9YVFJfQ0hB TgkJCTANCj4gKw0KPiArI2RlZmluZSBGRE1BX01BWF9TS0IJCQkJMjU2DQo+ICsjZGVmaW5lIEZE TUFfV0VJR0hUCQkJCTMyDQo+ICsNCj4gKyNkZWZpbmUgT0NFTE9UX1RBR19XT1JEX0xFTgkJCShP Q0VMT1RfVEFHX0xFTiAvIDQpDQo+ICsNCj4gKy8qIEFkZCA0IGZvciBwb3NzaWJsZSBtaXNhbGln bm1lbnQgd2hlbiBtYXBwaW5nIHRoZSBkYXRhICovDQo+ICsjZGVmaW5lIEZETUFfUlhfRVhUUkFf U0laRQkJCVwNCj4gKwkoT0NFTE9UX1RBR19MRU4gKyBFVEhfRkNTX0xFTiArIEVUSF9ITEVOICsg NCkNCj4gKw0KPiArc3RydWN0IG9jZWxvdF9mZG1hX2RjYl9od192MiB7DQo+ICsJdTMyIGxscDsN Cj4gKwl1MzIgZGF0YXA7DQo+ICsJdTMyIGRhdGFsOw0KPiArCXUzMiBzdGF0Ow0KPiArfTsNCj4g Kw0KPiArc3RydWN0IG9jZWxvdF9mZG1hX2RjYiB7DQo+ICsJc3RydWN0IG9jZWxvdF9mZG1hX2Rj Yl9od192MglodzsNCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkCQlub2RlOw0KPiArCXN0cnVjdCBza19i dWZmCQkJKnNrYjsNCj4gKwlkbWFfYWRkcl90CQkJbWFwcGluZzsNCj4gKwlzaXplX3QJCQkJbWFw cGVkX3NpemU7DQo+ICsJZG1hX2FkZHJfdAkJCXBoeXM7DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMg aW50IGZkbWFfcnhfY29tcHV0ZV9idWZmZXJfc2l6ZShpbnQgbXR1KQ0KPiArew0KPiArCXJldHVy biBBTElHTihtdHUgKyBGRE1BX1JYX0VYVFJBX1NJWkUsIDQpOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgdm9pZCBmZG1hX3dyaXRlbChzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEsIHUzMiByZWcsIHUz MiBkYXRhKQ0KPiArew0KPiArCXdyaXRlbChkYXRhLCBmZG1hLT5iYXNlICsgcmVnKTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHUzMiBmZG1hX3JlYWRsKHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSwg dTMyIHJlZykNCj4gK3sNCj4gKwlyZXR1cm4gcmVhZGwoZmRtYS0+YmFzZSArIHJlZyk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGZkbWFfYWN0aXZhdGVfY2hhbihzdHJ1Y3Qgb2NlbG90X2Zk bWEgKmZkbWEsDQo+ICsJCQkgICAgICAgc3RydWN0IG9jZWxvdF9mZG1hX2RjYiAqZGNiLCBpbnQg Y2hhbikNCj4gK3sNCj4gKwlmZG1hX3dyaXRlbChmZG1hLCBNU0NDX0ZETUFfRENCX0xMUChjaGFu KSwgZGNiLT5waHlzKTsNCj4gKwlmZG1hX3dyaXRlbChmZG1hLCBNU0NDX0ZETUFfQ0hfQUNUSVZB VEUsIEJJVChjaGFuKSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGZkbWFfc3RvcF9jaGFu bmVsKHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSwgaW50IGNoYW4pDQo+ICt7DQo+ICsJdTMyIHNh ZmU7DQo+ICsNCj4gKwlmZG1hX3dyaXRlbChmZG1hLCBNU0NDX0ZETUFfQ0hfRElTQUJMRSwgQklU KGNoYW4pKTsNCj4gKwlkbyB7DQo+ICsJCXNhZmUgPSBmZG1hX3JlYWRsKGZkbWEsIE1TQ0NfRkRN QV9DSF9TQUZFKTsNCj4gKwl9IHdoaWxlICghKHNhZmUgJiBCSVQoY2hhbikpKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGJvb2wgb2NlbG90X2ZkbWFfZGNiX3NldF9kYXRhKHN0cnVjdCBvY2Vsb3Rf ZmRtYSAqZmRtYSwNCj4gKwkJCQkgICAgIHN0cnVjdCBvY2Vsb3RfZmRtYV9kY2IgKmRjYiwgdm9p ZCAqZGF0YSwNCj4gKwkJCQkgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlv biBkaXIpDQo+ICt7DQo+ICsJdTMyIG9mZnNldDsNCj4gKw0KPiArCWRjYi0+bWFwcGVkX3NpemUg PSBzaXplOw0KPiArCWRjYi0+bWFwcGluZyA9IGRtYV9tYXBfc2luZ2xlKGZkbWEtPmRldiwgZGF0 YSwgc2l6ZSwgZGlyKTsNCj4gKwlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IoZmRtYS0+ ZGV2LCBkY2ItPm1hcHBpbmcpKSkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJb2Zmc2V0 ID0gZGNiLT5tYXBwaW5nICYgMHgzOw0KPiArDQo+ICsJZGNiLT5ody5sbHAgPSAwOw0KPiArCWRj Yi0+aHcuZGF0YXAgPSBkY2ItPm1hcHBpbmcgJiB+MHgzOw0KPiArCS8qIERBVEFMIG11c3QgYmUg YSBtdWx0aXBsZSBvZiB3b3JkIHNpemUgKi8NCj4gKwlkY2ItPmh3LmRhdGFsID0gQUxJR05fRE9X TihzaXplIC0gb2Zmc2V0LCA0KTsNCj4gKwlkY2ItPmh3LnN0YXQgPSBNU0NDX0ZETUFfRENCX1NU QVRfQkxPQ0tPKG9mZnNldCk7DQo+ICsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGJvb2wgb2NlbG90X2ZkbWFfZGNiX3NldF9yeF9za2Ioc3RydWN0IG9jZWxvdF9mZG1h ICpmZG1hLA0KPiArCQkJCSAgICAgICBzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiICpkY2IsDQo+ICsJ CQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHNpemVfdCBzaXplKQ0KPiArew0KPiArCWRj Yi0+c2tiID0gc2tiOw0KPiArCXJldHVybiBvY2Vsb3RfZmRtYV9kY2Jfc2V0X2RhdGEoZmRtYSwg ZGNiLCBza2ItPmRhdGEsIHNpemUsDQo+ICsJCQkJICAgICAgRE1BX0ZST01fREVWSUNFKTsNCj4g K30NCj4gKw0KPiArc3RhdGljIGJvb2wgb2NlbG90X2ZkbWFfZGNiX3NldF90eF9za2Ioc3RydWN0 IG9jZWxvdF9mZG1hICpmZG1hLA0KPiArCQkJCSAgICAgICBzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNi ICpkY2IsDQo+ICsJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpDQo+ICt7DQo+ICsJaWYg KCFvY2Vsb3RfZmRtYV9kY2Jfc2V0X2RhdGEoZmRtYSwgZGNiLCBza2ItPmRhdGEsIHNrYi0+bGVu LA0KPiArCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpKQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsN Cj4gKwlkY2ItPnNrYiA9IHNrYjsNCj4gKwlkY2ItPmh3LnN0YXQgfD0gTVNDQ19GRE1BX0RDQl9T VEFUX0JMT0NLTChza2ItPmxlbik7DQo+ICsJZGNiLT5ody5zdGF0IHw9IE1TQ0NfRkRNQV9EQ0Jf U1RBVF9TT0YgfCBNU0NDX0ZETUFfRENCX1NUQVRfRU9GOw0KPiArDQo+ICsJcmV0dXJuIHRydWU7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiICpmZG1hX2RjYl9h bGxvYyhzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEpDQo+ICt7DQo+ICsJc3RydWN0IG9jZWxvdF9m ZG1hX2RjYiAqZGNiOw0KPiArCWRtYV9hZGRyX3QgcGh5czsNCj4gKw0KPiArCWRjYiA9IGRtYV9w b29sX3phbGxvYyhmZG1hLT5kY2JfcG9vbCwgR0ZQX0tFUk5FTCwgJnBoeXMpOw0KPiArCWlmICh1 bmxpa2VseSghZGNiKSkNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKwlkY2ItPnBoeXMgPSBw aHlzOw0KPiArDQo+ICsJcmV0dXJuIGRjYjsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBu ZXRfZGV2aWNlICpmZG1hX2dldF9wb3J0X25ldGRldihzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEs DQo+ICsJCQkJCSAgICAgICBpbnQgcG9ydF9udW0pDQo+ICt7DQo+ICsJc3RydWN0IG9jZWxvdF9w b3J0X3ByaXZhdGUgKnBvcnRfcHJpdjsNCj4gKwlzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QgPSBmZG1h LT5vY2Vsb3Q7DQo+ICsJc3RydWN0IG9jZWxvdF9wb3J0ICpwb3J0Ow0KPiArDQo+ICsJaWYgKHBv cnRfbnVtID49IG9jZWxvdC0+bnVtX3BoeXNfcG9ydHMpDQo+ICsJCXJldHVybiBOVUxMOw0KPiAr DQo+ICsJcG9ydCA9IG9jZWxvdC0+cG9ydHNbcG9ydF9udW1dOw0KPiArDQo+ICsJaWYgKCFwb3J0 KQ0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKw0KPiArCXBvcnRfcHJpdiA9IGNvbnRhaW5lcl9vZihw b3J0LCBzdHJ1Y3Qgb2NlbG90X3BvcnRfcHJpdmF0ZSwgcG9ydCk7DQo+ICsNCj4gKwlyZXR1cm4g cG9ydF9wcml2LT5kZXY7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIG9jZWxvdF9mZG1hX3J4 X3Byb2Nlc3Nfc2tiKHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSwNCj4gKwkJCQkgICAgICAgc3Ry dWN0IG9jZWxvdF9mZG1hX2RjYiAqZGNiLA0KPiArCQkJCSAgICAgICBpbnQgYnVkZ2V0KQ0KPiAr ew0KPiArCXN0cnVjdCBza19idWZmICpza2IgPSBkY2ItPnNrYjsNCj4gKwlzdHJ1Y3QgbmV0X2Rl dmljZSAqbmRldjsNCj4gKwl1NjQgc3JjX3BvcnQ7DQo+ICsJdm9pZCAqeGZoOw0KPiArDQo+ICsJ ZG1hX3VubWFwX3NpbmdsZShmZG1hLT5kZXYsIGRjYi0+bWFwcGluZywgZGNiLT5tYXBwZWRfc2l6 ZSwNCj4gKwkJCSBETUFfRlJPTV9ERVZJQ0UpOw0KPiArDQo+ICsJeGZoID0gc2tiLT5kYXRhOw0K PiArCW9jZWxvdF94ZmhfZ2V0X3NyY19wb3J0KHhmaCwgJnNyY19wb3J0KTsNCj4gKw0KPiArCXNr Yl9wdXQoc2tiLCBNU0NDX0ZETUFfRENCX1NUQVRfQkxPQ0tMKGRjYi0+aHcuc3RhdCkpOw0KPiAr CXNrYl9wdWxsKHNrYiwgT0NFTE9UX1RBR19MRU4pOw0KPiArDQo+ICsJbmRldiA9IGZkbWFfZ2V0 X3BvcnRfbmV0ZGV2KGZkbWEsIHNyY19wb3J0KTsNCj4gKwlpZiAodW5saWtlbHkoIW5kZXYpKSB7 DQo+ICsJCW5hcGlfY29uc3VtZV9za2IoZGNiLT5za2IsIGJ1ZGdldCk7DQo+ICsJCXJldHVybiBm YWxzZTsNCj4gKwl9DQo+ICsNCj4gKwlza2ItPmRldiA9IG5kZXY7DQo+ICsJc2tiLT5wcm90b2Nv bCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLT5kZXYpOw0KPiArCXNrYi0+ZGV2LT5zdGF0cy5y eF9ieXRlcyArPSBza2ItPmxlbjsNCj4gKwlza2ItPmRldi0+c3RhdHMucnhfcGFja2V0cysrOw0K PiArDQo+ICsJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsNCj4gKw0KPiArCXJldHVybiB0cnVlOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBvY2Vsb3RfZmRtYV9yeF9yZWZpbGwoc3RydWN0IG9j ZWxvdF9mZG1hICpmZG1hKQ0KPiArew0KPiArCXN0cnVjdCBvY2Vsb3RfZmRtYV9kY2IgKmRjYiwg Kmxhc3RfZGNiOw0KPiArDQo+ICsJV0FSTl9PTihsaXN0X2VtcHR5KCZmZG1hLT5yeF9zdykpOw0K PiArDQo+ICsJZGNiID0gbGlzdF9maXJzdF9lbnRyeSgmZmRtYS0+cnhfc3csIHN0cnVjdCBvY2Vs b3RfZmRtYV9kY2IsIG5vZGUpOw0KPiArCS8qIFNwbGljZSBvbGQgaGFyZHdhcmUgRENCIGxpc3Qg KyBuZXcgb25lICovDQo+ICsJaWYgKCFsaXN0X2VtcHR5KCZmZG1hLT5yeF9odykpIHsNCj4gKwkJ bGFzdF9kY2IgPSBsaXN0X2xhc3RfZW50cnkoJmZkbWEtPnJ4X2h3LCBzdHJ1Y3Qgb2NlbG90X2Zk bWFfZGNiLA0KPiArCQkJCQkgICBub2RlKTsNCj4gKwkJbGFzdF9kY2ItPmh3LmxscCA9IGRjYi0+ cGh5czsNCj4gKwl9DQo+ICsNCj4gKwkvKiBNb3ZlIHNvZnR3YXJlIGxpc3QgdG8gaGFyZHdhcmUg bGlzdCAqLw0KPiArCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmZmRtYS0+cnhfc3csICZmZG1hLT5y eF9odyk7DQo+ICsNCj4gKwkvKiBGaW5hbGx5IHJlYWN0aXZhdGUgdGhlIGNoYW5uZWwgKi8NCj4g KwlmZG1hX2FjdGl2YXRlX2NoYW4oZmRtYSwgZGNiLCBNU0NDX0ZETUFfWFRSX0NIQU4pOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBvY2Vsb3RfZmRtYV9saXN0X2FkZF9kY2Ioc3RydWN0IGxp c3RfaGVhZCAqbGlzdCwNCj4gKwkJCQkgICAgIHN0cnVjdCBvY2Vsb3RfZmRtYV9kY2IgKmRjYikN Cj4gK3sNCj4gKwlzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiICpsYXN0X2RjYjsNCj4gKw0KPiArCWlm ICghbGlzdF9lbXB0eShsaXN0KSkgew0KPiArCQlsYXN0X2RjYiA9IGxpc3RfbGFzdF9lbnRyeShs aXN0LCBzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiLCBub2RlKTsNCj4gKwkJbGFzdF9kY2ItPmh3Lmxs cCA9IGRjYi0+cGh5czsNCj4gKwl9DQo+ICsNCj4gKwlsaXN0X2FkZF90YWlsKCZkY2ItPm5vZGUs IGxpc3QpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBvY2Vsb3RfZmRtYV9yeF9hZGRfZGNi X3N3KHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSwNCj4gKwkJCQkgICAgICBzdHJ1Y3Qgb2NlbG90 X2ZkbWFfZGNiICpkY2IpDQo+ICt7DQo+ICsJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7DQo+ICsN Cj4gKwkvKiBBZGQgRENCIHRvIGVuZCBvZiBsaXN0IHdpdGggbmV3IFNLQiAqLw0KPiArCW5ld19z a2IgPSBuYXBpX2FsbG9jX3NrYigmZmRtYS0+bmFwaSwgZmRtYS0+cnhfYnVmX3NpemUpOw0KPiAr CWlmICh1bmxpa2VseSghbmV3X3NrYikpIHsNCj4gKwkJcHJfZXJyKCJza2JfYWxsb2MgZmFpbGVk XG4iKTsNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArCX0NCj4gKw0KPiArCW9jZWxvdF9mZG1hX2Rj Yl9zZXRfcnhfc2tiKGZkbWEsIGRjYiwgbmV3X3NrYiwgZmRtYS0+cnhfYnVmX3NpemUpOw0KPiAr CW9jZWxvdF9mZG1hX2xpc3RfYWRkX2RjYigmZmRtYS0+cnhfc3csIGRjYik7DQo+ICsNCj4gKwly ZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgb2NlbG90X2ZkbWFfcnhfZ2V0 KHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSwgaW50IGJ1ZGdldCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg b2NlbG90X2ZkbWFfZGNiICpkY2I7DQo+ICsJYm9vbCB2YWxpZCA9IHRydWU7DQo+ICsJdTMyIHN0 YXQ7DQo+ICsNCj4gKwlkY2IgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmZkbWEtPnJ4X2h3 LCBzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiLA0KPiArCQkJCSAgICAgICBub2RlKTsNCj4gKwlpZiAo IWRjYiB8fCBNU0NDX0ZETUFfRENCX1NUQVRfQkxPQ0tMKGRjYi0+aHcuc3RhdCkgPT0gMCkNCj4g KwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJbGlzdF9kZWwoJmRjYi0+bm9kZSk7DQo+ICsNCj4g KwlzdGF0ID0gZGNiLT5ody5zdGF0Ow0KPiArCWlmIChzdGF0ICYgTVNDQ19GRE1BX0RDQl9TVEFU X0FCT1JUIHx8IHN0YXQgJiBNU0NDX0ZETUFfRENCX1NUQVRfUEQpDQo+ICsJCXZhbGlkID0gZmFs c2U7DQo+ICsNCj4gKwlpZiAoIShzdGF0ICYgTVNDQ19GRE1BX0RDQl9TVEFUX1NPRikgfHwNCj4g KwkgICAgIShzdGF0ICYgTVNDQ19GRE1BX0RDQl9TVEFUX0VPRikpDQo+ICsJCXZhbGlkID0gZmFs c2U7DQo+ICsNCj4gKwlpZiAobGlrZWx5KHZhbGlkKSkgew0KPiArCQlpZiAoIW9jZWxvdF9mZG1h X3J4X3Byb2Nlc3Nfc2tiKGZkbWEsIGRjYiwgYnVkZ2V0KSkNCj4gKwkJCXByX2VycigiUHJvY2Vz cyBza2IgZmFpbGVkLCBzdGF0ICV4XG4iLCBzdGF0KTsNCj4gKwl9IGVsc2Ugew0KPiArCQluYXBp X2NvbnN1bWVfc2tiKGRjYi0+c2tiLCBidWRnZXQpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiBv Y2Vsb3RfZmRtYV9yeF9hZGRfZGNiX3N3KGZkbWEsIGRjYik7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIG9jZWxvdF9mZG1hX3J4X2NoZWNrX3N0b3BwZWQoc3RydWN0IG9jZWxvdF9mZG1hICpm ZG1hKQ0KPiArew0KPiArCXUzMiBsbHAgPSBmZG1hX3JlYWRsKGZkbWEsIE1TQ0NfRkRNQV9EQ0Jf TExQKE1TQ0NfRkRNQV9YVFJfQ0hBTikpOw0KPiArCS8qIExMUCBpcyBub24gTlVMTCwgRkRNQSBp cyBzdGlsbCBmZXRjaGluZyBwYWNrZXRzICovDQo+ICsJaWYgKGxscCkNCj4gKwkJcmV0dXJuOw0K PiArDQo+ICsJZmRtYV9zdG9wX2NoYW5uZWwoZmRtYSwgTVNDQ19GRE1BX1hUUl9DSEFOKTsNCj4g KwlvY2Vsb3RfZmRtYV9yeF9yZWZpbGwoZmRtYSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IG9jZWxvdF9mZG1hX3R4X2ZyZWVfZGNiKHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSwNCj4gKwkJ CQkgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkNCj4gK3sNCj4gKwlzdHJ1Y3Qgb2NlbG90X2Zk bWFfZGNiICpkY2I7DQo+ICsNCj4gKwlpZiAobGlzdF9lbXB0eShsaXN0KSkNCj4gKwkJcmV0dXJu Ow0KPiArDQo+ICsJLyogRnJlZSBhbGwgU0tCcyB0aGF0IGhhdmUgYmVlbiB1c2VkIGZvciBUWCAq Lw0KPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoZGNiLCBsaXN0LCBub2RlKSB7DQo+ICsJCWRtYV91 bm1hcF9zaW5nbGUoZmRtYS0+ZGV2LCBkY2ItPm1hcHBpbmcsIGRjYi0+bWFwcGVkX3NpemUsDQo+ ICsJCQkJIERNQV9UT19ERVZJQ0UpOw0KPiArCQlkZXZfY29uc3VtZV9za2JfYW55KGRjYi0+c2ti KTsNCj4gKwkJZGNiLT5za2IgPSBOVUxMOw0KPiArCX0NCj4gKw0KPiArCS8qIEFsbCBEQ0JzIGNh biBub3cgYmUgZ2l2ZW4gdG8gZnJlZSBsaXN0ICovDQo+ICsJc3Bpbl9sb2NrKCZmZG1hLT50eF9m cmVlX2xvY2spOw0KPiArCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdChsaXN0LCAmZmRtYS0+dHhfZnJl ZV9kY2IpOw0KPiArCXNwaW5fdW5sb2NrKCZmZG1hLT50eF9mcmVlX2xvY2spOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCBvY2Vsb3RfZmRtYV90eF9jbGVhbnVwKHN0cnVjdCBvY2Vsb3RfZmRt YSAqZmRtYSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHR4X2RvbmUgPSBMSVNUX0hFQURf SU5JVCh0eF9kb25lKTsNCj4gKwlzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiICpkY2IsICp0ZW1wOw0K PiArDQo+ICsJc3Bpbl9sb2NrKCZmZG1hLT50eF9lbnF1ZXVlX2xvY2spOw0KPiArCWlmIChsaXN0 X2VtcHR5KCZmZG1hLT50eF9vbmdvaW5nKSkNCj4gKwkJZ290byBvdXRfdW5sb2NrOw0KPiArDQo+ ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRjYiwgdGVtcCwgJmZkbWEtPnR4X29uZ29pbmcs IG5vZGUpIHsNCj4gKwkJaWYgKCEoZGNiLT5ody5zdGF0ICYgTVNDQ19GRE1BX0RDQl9TVEFUX1BE KSkNCj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCWxpc3RfbW92ZV90YWlsKCZkY2ItPm5vZGUsICZ0 eF9kb25lKTsNCj4gKwl9DQo+ICsNCj4gK291dF91bmxvY2s6DQo+ICsJc3Bpbl91bmxvY2soJmZk bWEtPnR4X2VucXVldWVfbG9jayk7DQo+ICsNCj4gKwlvY2Vsb3RfZmRtYV90eF9mcmVlX2RjYihm ZG1hLCAmdHhfZG9uZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG9jZWxvdF9mZG1hX3R4 X3Jlc3RhcnQoc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hKQ0KPiArew0KPiArCXN0cnVjdCBvY2Vs b3RfZmRtYV9kY2IgKmRjYjsNCj4gKwl1MzIgc2FmZTsNCj4gKw0KPiArCXNwaW5fbG9jaygmZmRt YS0+dHhfZW5xdWV1ZV9sb2NrKTsNCj4gKw0KPiArCWlmICghbGlzdF9lbXB0eSgmZmRtYS0+dHhf b25nb2luZykgfHwgbGlzdF9lbXB0eSgmZmRtYS0+dHhfcXVldWVkKSkNCj4gKwkJZ290byBvdXRf dW5sb2NrOw0KPiArDQo+ICsJLyogT25nb2luZyBsaXN0IGlzIGVtcHR5LCBjaGFubmVsIHNob3Vs ZCBiZSBpbiBzYWZlIG1vZGUgKi8NCj4gKwlkbyB7DQo+ICsJCXNhZmUgPSBmZG1hX3JlYWRsKGZk bWEsIE1TQ0NfRkRNQV9DSF9TQUZFKTsNCj4gKwl9IHdoaWxlICghKHNhZmUgJiBCSVQoTVNDQ19G RE1BX0lOSl9DSEFOKSkpOw0KPiArDQo+ICsJLyogTW92ZSBxdWV1ZWQgRENCIHRvIG9uZ29pbmcg YW5kIHJlc3RhcnQgdGhlIERNQSAqLw0KPiArCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmZmRtYS0+ dHhfcXVldWVkLCAmZmRtYS0+dHhfb25nb2luZyk7DQo+ICsJLyogTGlzdCBjYW4ndCBiZSBlbXB0 eSwgbm8gbmVlZCB0byBjaGVjayAqLw0KPiArCWRjYiA9IGxpc3RfZmlyc3RfZW50cnkoJmZkbWEt PnR4X29uZ29pbmcsIHN0cnVjdCBvY2Vsb3RfZmRtYV9kY2IsIG5vZGUpOw0KPiArDQo+ICsJZmRt YV9hY3RpdmF0ZV9jaGFuKGZkbWEsIGRjYiwgTVNDQ19GRE1BX0lOSl9DSEFOKTsNCj4gKw0KPiAr b3V0X3VubG9jazoNCj4gKwlzcGluX3VubG9jaygmZmRtYS0+dHhfZW5xdWV1ZV9sb2NrKTsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBvY2Vsb3RfZmRtYV9uYXBpX3BvbGwoc3RydWN0IG5hcGlf c3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQ0KPiArew0KPiArCXN0cnVjdCBvY2Vsb3RfZmRtYSAq ZmRtYSA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3Qgb2NlbG90X2ZkbWEsIG5hcGkpOw0KPiAr CWludCB3b3JrX2RvbmUgPSAwOw0KPiArDQo+ICsJb2NlbG90X2ZkbWFfdHhfY2xlYW51cChmZG1h KTsNCj4gKwlvY2Vsb3RfZmRtYV90eF9yZXN0YXJ0KGZkbWEpOw0KPiArDQo+ICsJd2hpbGUgKHdv cmtfZG9uZSA8IGJ1ZGdldCkgew0KPiArCQlpZiAoIW9jZWxvdF9mZG1hX3J4X2dldChmZG1hLCBi dWRnZXQpKQ0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJd29ya19kb25lKys7DQo+ICsJfQ0KPiAr DQo+ICsJb2NlbG90X2ZkbWFfcnhfY2hlY2tfc3RvcHBlZChmZG1hKTsNCj4gKw0KPiArCWlmICh3 b3JrX2RvbmUgPCBidWRnZXQpIHsNCj4gKwkJbmFwaV9jb21wbGV0ZSgmZmRtYS0+bmFwaSk7DQoN CkRvY3VtZW50YXRpb24gc2F5cyB5b3Ugc2hvdWxkIGNvbnNpZGVyIGNhbGxpbmcgbmFwaV9jb21w bGV0ZV9kb25lKCZmZG1hLT5uYXBpLCB3b3JrX2RvbmUpOw0KDQo+ICsJCWZkbWFfd3JpdGVsKGZk bWEsIE1TQ0NfRkRNQV9JTlRSX0VOQSwNCj4gKwkJCSAgICBCSVQoTVNDQ19GRE1BX0lOSl9DSEFO KSB8IEJJVChNU0NDX0ZETUFfWFRSX0NIQU4pKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gd29y a19kb25lOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaXJxcmV0dXJuX3Qgb2NlbG90X2ZkbWFfaW50 ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkNCj4gK3sNCj4gKwl1MzIgaWRlbnQsIGxscCwg ZnJtLCBlcnIsIGVycl9jb2RlOw0KPiArCXN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSA9IGRldl9p ZDsNCj4gKw0KPiArCWlkZW50ID0gZmRtYV9yZWFkbChmZG1hLCBNU0NDX0ZETUFfSU5UUl9JREVO VCk7DQo+ICsJZnJtID0gZmRtYV9yZWFkbChmZG1hLCBNU0NDX0ZETUFfSU5UUl9GUk0pOw0KPiAr CWxscCA9IGZkbWFfcmVhZGwoZmRtYSwgTVNDQ19GRE1BX0lOVFJfTExQKTsNCj4gKw0KPiArCWZk bWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9JTlRSX0xMUCwgbGxwICYgaWRlbnQpOw0KPiArCWZk bWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9JTlRSX0ZSTSwgZnJtICYgaWRlbnQpOw0KPiArCWlm IChmcm0gfCBsbHApIHsNCg0KQml0d2lzZSBPUj8gU3RyYW5nZS4NCg0KPiArCQlmZG1hX3dyaXRl bChmZG1hLCBNU0NDX0ZETUFfSU5UUl9FTkEsIDApOw0KPiArCQluYXBpX3NjaGVkdWxlKCZmZG1h LT5uYXBpKTsNCj4gKwl9DQo+ICsNCj4gKwllcnIgPSBmZG1hX3JlYWRsKGZkbWEsIE1TQ0NfRkRN QV9FVlRfRVJSKTsNCj4gKwlpZiAodW5saWtlbHkoZXJyKSkgew0KPiArCQllcnJfY29kZSA9IGZk bWFfcmVhZGwoZmRtYSwgTVNDQ19GRE1BX0VWVF9FUlJfQ09ERSk7DQo+ICsJCWRldl9lcnJfcmF0 ZWxpbWl0ZWQoZmRtYS0+ZGV2LA0KPiArCQkJCSAgICAiRXJyb3IgISBjaGFucyBtYXNrOiAlI3gs IGNvZGU6ICUjeFxuIiwNCj4gKwkJCQkgICAgZXJyLCBlcnJfY29kZSk7DQo+ICsNCj4gKwkJZmRt YV93cml0ZWwoZmRtYSwgTVNDQ19GRE1BX0VWVF9FUlIsIGVycik7DQo+ICsJCWZkbWFfd3JpdGVs KGZkbWEsIE1TQ0NfRkRNQV9FVlRfRVJSX0NPREUsIGVycl9jb2RlKTsNCj4gKwl9DQo+ICsNCj4g KwlyZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3Qgb2NlbG90 X2ZkbWFfZGNiICpmZG1hX3R4X2dldF9kY2Ioc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hKQ0KDQpQ bGVhc2UgbmFtZSB0aGVzZSBmdW5jdGlvbnMgY29uc2lzdGVudGx5IGFuZCBtYWtlIHRoZW0gc3Rh cnQgd2l0aCBvY2Vsb3RfLg0KDQo+ICt7DQo+ICsJc3RydWN0IG9jZWxvdF9mZG1hX2RjYiAqZGNi ID0gTlVMTDsNCj4gKw0KPiArCXNwaW5fbG9ja19iaCgmZmRtYS0+dHhfZnJlZV9sb2NrKTsNCj4g KwlkY2IgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmZkbWEtPnR4X2ZyZWVfZGNiLA0KPiAr CQkJCSAgICAgICBzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiLCBub2RlKTsNCj4gKwlpZiAoZGNiKQ0K PiArCQlsaXN0X2RlbCgmZGNiLT5ub2RlKTsNCj4gKw0KPiArCXNwaW5fdW5sb2NrX2JoKCZmZG1h LT50eF9mcmVlX2xvY2spOw0KPiArDQo+ICsJcmV0dXJuIGRjYjsNCj4gK30NCj4gKw0KPiAraW50 IG9jZWxvdF9mZG1hX2luamVjdF9mcmFtZShzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEsIGludCBw b3J0LCB1MzIgcmV3X29wLA0KPiArCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2KQ0KPiArew0KPiArCXN0cnVjdCBvY2Vsb3RfcG9ydCAqcG9ydF9zID0g ZmRtYS0+b2NlbG90LT5wb3J0c1twb3J0XTsNCj4gKwlzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiICpk Y2I7DQo+ICsJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7DQo+ICsJdm9pZCAqaWZoOw0KPiArDQo+ ICsJaWYgKHVubGlrZWx5KHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgIT0gMCkpIHsNCj4gKwkJ bmV0ZGV2X2VycihkZXYsICJVbnN1cHBvcnRlZCBmcmFnbWVudGVkIHBhY2tldCIpOw0KPiArCQlk ZXZfa2ZyZWVfc2tiX2FueShza2IpOw0KDQpza2JfbGluZWFyaXplKCkNCg0KQWxzbyBwbGVhc2Ug ZG9uJ3QgcHJpbnQgc3R1ZmYgZnJvbSB0aGUgaG90IHBhdGggd2l0aG91dCBuZXRfcmF0ZWxpbWl0 ZWQoKQ0KDQo+ICsJCXJldHVybiBORVRERVZfVFhfT0s7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHNr Yl9oZWFkcm9vbShza2IpIDwgT0NFTE9UX1RBR19MRU4gfHwNCj4gKwkgICAgc2tiX3RhaWxyb29t KHNrYikgPCBFVEhfRkNTX0xFTikgew0KDQpEb24ndCB5b3UgYWxzbyBuZWVkIHRvIGNvcHkgdGhl IHNrYiAodG8gZW5zdXJlIGl0J3Mgd3JpdGFibGUpIGlmIGl0J3MgY2xvbmVkDQoobGlrZSB3b3Vs ZCBiZSB0aGUgY2FzZSBmb3IgcGFja2V0cyB3aXRoIHR3by1zdGVwIFBUUCBUWCB0aW1lc3RhbXBp bmcpPw0KSSBkb24ndCBzZWUgYW55IGNhbGxzIHRvIHNrYl91bnNoYXJlKCkuDQoNCllvdSBjYW4g dGVzdCB3aXRoOg0KDQpwdHA0bCAtaSBzd3AwIC0yIC1QIC1tIC0tdHhfdGltZXN0YW1wX3RpbWVv dXQgMjANCg0Kb24gdHdvIGJhY2stdG8tYmFjayBib2FyZHMuDQoNCj4gKwkJbmV3X3NrYiA9IHNr Yl9jb3B5X2V4cGFuZChza2IsIE9DRUxPVF9UQUdfTEVOLCBFVEhfRkNTX0xFTiwNCj4gKwkJCQkJ ICBHRlBfQVRPTUlDKTsNCj4gKwkJZGV2X2NvbnN1bWVfc2tiX2FueShza2IpOw0KDQpJIHRoaW5r IHlvdSBjYW4gdXNlIHBza2JfZXhwYW5kX2hlYWQoKSBhbmQgYXZvaWQgY3JlYXRpbmcgYSBuZXdf c2tiLg0KTG9vayBhdCBkc2FfcmVhbGxvY19za2IoKS4NCg0KPiArCQlpZiAoIW5ld19za2IpDQo+ ICsJCQlyZXR1cm4gTkVUREVWX1RYX09LOw0KPiArDQo+ICsJCXNrYiA9IG5ld19za2I7DQo+ICsJ fQ0KPiArDQo+ICsJaWZoID0gc2tiX3B1c2goc2tiLCBPQ0VMT1RfVEFHX0xFTik7DQo+ICsJc2ti X3B1dChza2IsIEVUSF9GQ1NfTEVOKTsNCj4gKwlvY2Vsb3RfaWZoX3BvcnRfc2V0KGlmaCwgcG9y dF9zLCByZXdfb3AsIHNrYl92bGFuX3RhZ19nZXQoc2tiKSk7DQo+ICsNCj4gKwlkY2IgPSBmZG1h X3R4X2dldF9kY2IoZmRtYSk7DQo+ICsJaWYgKHVubGlrZWx5KCFkY2IpKQ0KPiArCQlyZXR1cm4g TkVUREVWX1RYX0JVU1k7DQo+ICsNCj4gKwlpZiAoIW9jZWxvdF9mZG1hX2RjYl9zZXRfdHhfc2ti KGZkbWEsIGRjYiwgc2tiKSkgew0KPiArCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOw0KPiArCQlz cGluX2xvY2tfYmgoJmZkbWEtPnR4X2ZyZWVfbG9jayk7DQo+ICsJCWxpc3RfYWRkX3RhaWwoJmRj Yi0+bm9kZSwgJmZkbWEtPnR4X2ZyZWVfZGNiKTsNCj4gKwkJc3Bpbl91bmxvY2tfYmgoJmZkbWEt PnR4X2ZyZWVfbG9jayk7DQo+ICsJCXJldHVybiBORVRERVZfVFhfT0s7DQo+ICsJfQ0KPiArDQo+ ICsJc3Bpbl9sb2NrX2JoKCZmZG1hLT50eF9lbnF1ZXVlX2xvY2spOw0KPiArDQo+ICsJaWYgKGxp c3RfZW1wdHkoJmZkbWEtPnR4X29uZ29pbmcpKSB7DQo+ICsJCW9jZWxvdF9mZG1hX2xpc3RfYWRk X2RjYigmZmRtYS0+dHhfb25nb2luZywgZGNiKTsNCj4gKwkJZmRtYV9hY3RpdmF0ZV9jaGFuKGZk bWEsIGRjYiwgTVNDQ19GRE1BX0lOSl9DSEFOKTsNCj4gKwl9IGVsc2Ugew0KPiArCQlvY2Vsb3Rf ZmRtYV9saXN0X2FkZF9kY2IoJmZkbWEtPnR4X3F1ZXVlZCwgZGNiKTsNCj4gKwl9DQo+ICsNCj4g KwlzcGluX3VubG9ja19iaCgmZmRtYS0+dHhfZW5xdWV1ZV9sb2NrKTsNCg0KSSB0aGluayB5b3Ug ZG9uJ3QgbmVlZCBfYmggbG9ja2luZyBmcm9tIG5kb19zdGFydF94bWl0KCkgY29udGV4dC4NCl9f ZGV2X3F1ZXVlX3htaXQoKSBjYWxscyByY3VfcmVhZF9sb2NrX2JoKCkuIE9uIHRoZSBvdGhlciBo YW5kLCBJIHRoaW5rDQp5b3UgbWlnaHQgbmVlZCB0byB1c2Ugc3Bpbl9sb2NrX2JoIGZyb20gb2Nl bG90X2ZkbWFfbmFwaV9wb2xsKCksIHNpbmNlDQp0aGF0IHJ1bnMgZnJvbSBORVRfUlggc29mdGly cSwgYW5kIG5kb19zdGFydF94bWl0KCkgY2FuIHJ1biBmcm9tIGxvYWRzDQpvZiBvdGhlciBjb250 ZXh0cy4NCg0KPiArCXJldHVybiBORVRERVZfVFhfT0s7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGZkbWFfZnJlZV9za2JzX2xpc3Qoc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hLA0KPiArCQkJ CXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsDQo+ICsJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24g ZGlyKQ0KPiArew0KPiArCXN0cnVjdCBvY2Vsb3RfZmRtYV9kY2IgKmRjYjsNCj4gKw0KPiArCWlm IChsaXN0X2VtcHR5KGxpc3QpKQ0KPiArCQlyZXR1cm47DQoNCkknbSBub3Qgc3VyZSB0aGlzIGlz IHJlYWxseSBuZWVkZWQuDQoNCj4gKw0KPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoZGNiLCBsaXN0 LCBub2RlKSB7DQo+ICsJCWlmIChkY2ItPnNrYikgew0KPiArCQkJZG1hX3VubWFwX3NpbmdsZShm ZG1hLT5kZXYsIGRjYi0+bWFwcGluZywNCj4gKwkJCQkJIGRjYi0+bWFwcGVkX3NpemUsIGRpcik7 DQo+ICsJCQlkZXZfa2ZyZWVfc2tiX2FueShkY2ItPnNrYik7DQoNCmRjYi0+c2tiID0gTlVMTD8N Cg0KPiArCQl9DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGZkbWFfaW5pdF90eChz dHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEpDQo+ICt7DQo+ICsJaW50IGk7DQo+ICsJc3RydWN0IG9j ZWxvdF9mZG1hX2RjYiAqZGNiOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IEZETUFfTUFYX1NL QjsgaSsrKSB7DQo+ICsJCWRjYiA9IGZkbWFfZGNiX2FsbG9jKGZkbWEpOw0KPiArCQlpZiAoIWRj YikNCj4gKwkJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJCWxpc3RfYWRkX3RhaWwoJmRjYi0+ bm9kZSwgJmZkbWEtPnR4X2ZyZWVfZGNiKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBmZG1hX2luaXRfcngoc3RydWN0IG9jZWxvdF9mZG1hICpm ZG1hKQ0KPiArew0KPiArCXN0cnVjdCBvY2Vsb3RfcG9ydF9wcml2YXRlICpwb3J0X3ByaXY7DQo+ ICsJc3RydWN0IG9jZWxvdCAqb2NlbG90ID0gZmRtYS0+b2NlbG90Ow0KPiArCXN0cnVjdCBvY2Vs b3RfZmRtYV9kY2IgKmRjYjsNCj4gKwlzdHJ1Y3Qgb2NlbG90X3BvcnQgKnBvcnQ7DQo+ICsJc3Ry dWN0IG5ldF9kZXZpY2UgKm5kZXY7DQo+ICsJaW50IG1heF9tdHUgPSAwOw0KPiArCWludCBpOw0K PiArCXU4IHBvcnRfbnVtOw0KDQpQbGVhc2UgZGVjbGFyZSB2YXJpYWJsZXMgaW4gdGhlIG9yZGVy IG9mIGRlc2NlbmRpbmcgbGluZSBsZW5ndGggKGFrYQ0KInJldmVyc2UgQ2hyaXN0bWFzIHRyZWUi KS4gSGVyZSwgYW5kIGluIGZkbWFfaW5pdF9yeCgpLCBhbmQgaW4gb3RoZXINCnBsYWNlcy4NCg0K PiArDQo+ICsJZm9yIChwb3J0X251bSA9IDA7IHBvcnRfbnVtIDwgb2NlbG90LT5udW1fcGh5c19w b3J0czsgcG9ydF9udW0rKykgew0KDQpUaGUgbmFtaW5nIGNvbnZlbnRpb24gaXMgImludCBwb3J0 IiwgInN0cnVjdCBvY2Vsb3RfcG9ydCAqb2NlbG90X3BvcnQiLg0KUGxlYXNlIGtlZXAgaXQuIFRo YW5rcy4NCg0KPiArCQlwb3J0ID0gb2NlbG90LT5wb3J0c1twb3J0X251bV07DQo+ICsJCWlmICgh cG9ydCkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCXBvcnRfcHJpdiA9IGNvbnRhaW5lcl9v Zihwb3J0LCBzdHJ1Y3Qgb2NlbG90X3BvcnRfcHJpdmF0ZSwNCj4gKwkJCQkJIHBvcnQpOw0KPiAr CQluZGV2ID0gcG9ydF9wcml2LT5kZXY7DQo+ICsNCj4gKwkJbmRldi0+bmVlZGVkX2hlYWRyb29t ID0gT0NFTE9UX1RBR19MRU47DQo+ICsJCW5kZXYtPm5lZWRlZF90YWlscm9vbSA9IEVUSF9GQ1Nf TEVOOw0KPiArDQo+ICsJCWlmIChSRUFEX09OQ0UobmRldi0+bXR1KSA+IG1heF9tdHUpDQo+ICsJ CQltYXhfbXR1ID0gUkVBRF9PTkNFKG5kZXYtPm10dSk7DQoNClRoaXMgc2VlbXMgc2lsbHksIHlv dSB1c2UgUkVBRF9PTkNFIHR3aWNlLi4uIHdoYXQncyB0aGUgcG9pbnQ/DQpBbHNvLCB3aGF0IGlz IHRoaXMgcmFjaW5nIHdpdGg/DQoNCj4gKwl9DQo+ICsNCj4gKwlpZiAoIW5kZXYpDQo+ICsJCXJl dHVybiAtRU5PREVWOw0KPiArDQo+ICsJZmRtYS0+cnhfYnVmX3NpemUgPSBmZG1hX3J4X2NvbXB1 dGVfYnVmZmVyX3NpemUobWF4X210dSk7DQo+ICsJbmV0aWZfbmFwaV9hZGQobmRldiwgJmZkbWEt Pm5hcGksIG9jZWxvdF9mZG1hX25hcGlfcG9sbCwNCj4gKwkJICAgICAgIEZETUFfV0VJR0hUKTsN Cj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBGRE1BX01BWF9TS0I7IGkrKykgew0KPiArCQlkY2Ig PSBmZG1hX2RjYl9hbGxvYyhmZG1hKTsNCj4gKwkJaWYgKCFkY2IpDQo+ICsJCQlyZXR1cm4gLUVO T01FTTsNCj4gKw0KPiArCQlvY2Vsb3RfZmRtYV9yeF9hZGRfZGNiX3N3KGZkbWEsIGRjYik7DQo+ ICsJfQ0KPiArDQo+ICsJbmFwaV9lbmFibGUoJmZkbWEtPm5hcGkpOw0KPiArDQo+ICsJcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gK3N0cnVjdCBvY2Vsb3RfZmRtYSAqb2NlbG90X2ZkbWFfaW5pdChz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LA0KPiArCQkJCSAgICAgc3RydWN0IG9jZWxvdCAq b2NlbG90KQ0KPiArew0KPiArCXN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYTsNCj4gKwlpbnQgcmV0 Ow0KPiArDQo+ICsJZmRtYSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmZkbWEp LCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIWZkbWEpDQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9N RU0pOw0KPiArDQo+ICsJZmRtYS0+b2NlbG90ID0gb2NlbG90Ow0KPiArCWZkbWEtPmJhc2UgPSBk ZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2VfYnluYW1lKHBkZXYsICJmZG1hIik7DQoNCkRv bid0IHlvdSB3YW50IHRvIGxvb2sgdXAgdGhlIHJlc291cmNlIGJ5IG5hbWUgYmVmb3JlIGFsbG9j YXRpbmcgc3R1ZmY/DQpNYXliZSB0aGUgYWxsb2NhdGlvbiB3b24ndCBiZSBuZWVkZWQsIHRoZW4g eW91J2xsIGhhdmUgdG8gbGl2ZSB3aXRoIGl0LA0Kc2luY2UgeW91IHVzZSBkZXZyZXMuIEFsdGhv dWdoIG15IHBlcnNvbmFsIHJlY29tbWVuZGF0aW9uIHdvdWxkIGJlIHRvDQpqdXN0IG5vdCB1c2Ug ZGV2cmVzLCBpdCBtYWtlcyB5b3UgdGhpbmsgbW9yZS4NCg0KPiArCWlmIChJU19FUlJfT1JfTlVM TChmZG1hLT5iYXNlKSkNCj4gKwkJcmV0dXJuIGZkbWEtPmJhc2U7DQoNCkp1c3QgcmV0dXJuIE5V TEwgYW5kIHNpbXBsaWZ5IHRoZSBjYWxsZXIsIHlvdSBhcmVuJ3QgdXNpbmcgdGhlIEVSUiB2YWx1 ZQ0KYW55d2F5IChvciBkbyBzb21ldGhpbmcgd2l0aCB0aGUgZXJyb3IgdmFsdWUgYXQgdGhlIGNh bGwgc2l0ZSkuDQoNCj4gKw0KPiArCWZkbWEtPmRldiA9ICZwZGV2LT5kZXY7DQo+ICsJZmRtYS0+ ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7DQo+ICsNCj4gKwlzcGlu X2xvY2tfaW5pdCgmZmRtYS0+dHhfZW5xdWV1ZV9sb2NrKTsNCj4gKwlzcGluX2xvY2tfaW5pdCgm ZmRtYS0+dHhfZnJlZV9sb2NrKTsNCj4gKw0KPiArCWZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRN QV9JTlRSX0VOQSwgMCk7DQo+ICsNCj4gKwlmZG1hLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5 bmFtZShwZGV2LCAiZmRtYSIpOw0KPiArCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRl diwgZmRtYS0+aXJxLCBvY2Vsb3RfZmRtYV9pbnRlcnJ1cHQsIDAsDQo+ICsJCQkgICAgICAgZGV2 X25hbWUoJnBkZXYtPmRldiksIGZkbWEpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiBFUlJf UFRSKHJldCk7DQo+ICsNCj4gKwkvKiBDcmVhdGUgYSBwb29sIG9mIGNvbnNpc3RlbnQgbWVtb3J5 IGJsb2NrcyBmb3IgaGFyZHdhcmUgZGVzY3JpcHRvcnMgKi8NCj4gKwlmZG1hLT5kY2JfcG9vbCA9 IGRtYW1fcG9vbF9jcmVhdGUoIm9jZWxvdF9mZG1hIiwgJnBkZXYtPmRldiwNCj4gKwkJCQkJICBz aXplb2Yoc3RydWN0IG9jZWxvdF9mZG1hX2RjYiksDQo+ICsJCQkJCSAgX19hbGlnbm9mX18oc3Ry dWN0IG9jZWxvdF9mZG1hX2RjYiksDQo+ICsJCQkJCSAgMCk7DQo+ICsJaWYgKCFmZG1hLT5kY2Jf cG9vbCkgew0KPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgRE1B IGRlc2NyaXB0b3IgcG9vbFxuIik7DQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiAr CX0NCj4gKw0KPiArCUlOSVRfTElTVF9IRUFEKCZmZG1hLT50eF9vbmdvaW5nKTsNCj4gKwlJTklU X0xJU1RfSEVBRCgmZmRtYS0+dHhfZnJlZV9kY2IpOw0KPiArCUlOSVRfTElTVF9IRUFEKCZmZG1h LT50eF9xdWV1ZWQpOw0KPiArCUlOSVRfTElTVF9IRUFEKCZmZG1hLT5yeF9zdyk7DQo+ICsJSU5J VF9MSVNUX0hFQUQoJmZkbWEtPnJ4X2h3KTsNCj4gKw0KPiArCXJldHVybiBmZG1hOw0KPiArfQ0K PiArDQo+ICtpbnQgb2NlbG90X2ZkbWFfc3RhcnQoc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hKQ0K PiArew0KPiArCXN0cnVjdCBvY2Vsb3QgKm9jZWxvdCA9IGZkbWEtPm9jZWxvdDsNCj4gKwlpbnQg cmV0Ow0KPiArDQo+ICsJcmV0ID0gZmRtYV9pbml0X3R4KGZkbWEpOw0KPiArCWlmIChyZXQpDQo+ ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlyZXQgPSBmZG1hX2luaXRfcngoZmRtYSk7DQo+ICsJ aWYgKHJldCkNCg0KRG9uJ3QgeW91IHdhbnQgdG8gdW5kbyB0aGUgZmRtYV9kY2JfYWxsb2MoKSBm cm9tIGZkbWFfaW5pdF90eCgpIGlmIHRoaXMgZmFpbHM/DQoNCj4gKwkJcmV0dXJuIHJldDsNCj4g Kw0KPiArCS8qIFJlY29uZmlndXJlIGZvciBleHRyYWN0aW9uIGFuZCBpbmplY3Rpb24gdXNpbmcg RE1BICovDQo+ICsJb2NlbG90X3dyaXRlX3JpeChvY2Vsb3QsIFFTX0lOSl9HUlBfQ0ZHX01PREUo MiksIFFTX0lOSl9HUlBfQ0ZHLCAwKTsNCj4gKwlvY2Vsb3Rfd3JpdGVfcml4KG9jZWxvdCwgUVNf SU5KX0NUUkxfR0FQX1NJWkUoMCksIFFTX0lOSl9DVFJMLCAwKTsNCj4gKw0KPiArCW9jZWxvdF93 cml0ZV9yaXgob2NlbG90LCBRU19YVFJfR1JQX0NGR19NT0RFKDIpLCBRU19YVFJfR1JQX0NGRywg MCk7DQo+ICsNCj4gKwlmZG1hX3dyaXRlbChmZG1hLCBNU0NDX0ZETUFfSU5UUl9MTFAsIDB4ZmZm ZmZmZmYpOw0KPiArCWZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9JTlRSX0ZSTSwgMHhmZmZm ZmZmZik7DQo+ICsNCj4gKwlmZG1hX3dyaXRlbChmZG1hLCBNU0NDX0ZETUFfSU5UUl9MTFBfRU5B LA0KPiArCQkgICAgQklUKE1TQ0NfRkRNQV9JTkpfQ0hBTikgfCBCSVQoTVNDQ19GRE1BX1hUUl9D SEFOKSk7DQo+ICsJZmRtYV93cml0ZWwoZmRtYSwgTVNDQ19GRE1BX0lOVFJfRlJNX0VOQSwgQklU KE1TQ0NfRkRNQV9YVFJfQ0hBTikpOw0KPiArCWZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9J TlRSX0VOQSwNCj4gKwkJICAgIEJJVChNU0NDX0ZETUFfSU5KX0NIQU4pIHwgQklUKE1TQ0NfRkRN QV9YVFJfQ0hBTikpOw0KPiArDQo+ICsJb2NlbG90X2ZkbWFfcnhfcmVmaWxsKGZkbWEpOw0KPiAr DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK2ludCBvY2Vsb3RfZmRtYV9zdG9wKHN0cnVj dCBvY2Vsb3RfZmRtYSAqZmRtYSkNCj4gK3sNCj4gKwlmZG1hX3dyaXRlbChmZG1hLCBNU0NDX0ZE TUFfSU5UUl9FTkEsIDApOw0KPiArDQo+ICsJZmRtYV9zdG9wX2NoYW5uZWwoZmRtYSwgTVNDQ19G RE1BX1hUUl9DSEFOKTsNCj4gKwlmZG1hX3N0b3BfY2hhbm5lbChmZG1hLCBNU0NDX0ZETUFfSU5K X0NIQU4pOw0KPiArDQo+ICsJLyogRnJlZSBwb3RlbnRpYWxseSBwZW5kaW5nIFNLQnMgaW4gRENC IGxpc3RzICovDQo+ICsJZmRtYV9mcmVlX3NrYnNfbGlzdChmZG1hLCAmZmRtYS0+cnhfaHcsIERN QV9GUk9NX0RFVklDRSk7DQo+ICsJZmRtYV9mcmVlX3NrYnNfbGlzdChmZG1hLCAmZmRtYS0+cnhf c3csIERNQV9GUk9NX0RFVklDRSk7DQo+ICsJZmRtYV9mcmVlX3NrYnNfbGlzdChmZG1hLCAmZmRt YS0+dHhfb25nb2luZywgRE1BX1RPX0RFVklDRSk7DQo+ICsJZmRtYV9mcmVlX3NrYnNfbGlzdChm ZG1hLCAmZmRtYS0+dHhfcXVldWVkLCBETUFfVE9fREVWSUNFKTsNCj4gKw0KPiArCW5ldGlmX25h cGlfZGVsKCZmZG1hLT5uYXBpKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5oIGIvZHJpdmVycy9u ZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ IGluZGV4IDAwMDAwMDAwMDAwMC4uNmM1YzU4NzJhYmY1DQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5oDQo+IEBAIC0wLDAgKzEs NTkgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCBPUiBNSVQpICov DQo+ICsvKg0KPiArICogTWljcm9zZW1pIFNvQ3MgRkRNQSBkcml2ZXINCj4gKyAqDQo+ICsgKiBD b3B5cmlnaHQgKGMpIDIwMjEgTWljcm9jaGlwDQo+ICsgKi8NCj4gKyNpZm5kZWYgX01TQ0NfT0NF TE9UX0ZETUFfSF8NCj4gKyNkZWZpbmUgX01TQ0NfT0NFTE9UX0ZETUFfSF8NCj4gKw0KPiArI2lu Y2x1ZGUgIm9jZWxvdC5oIg0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCBvY2Vsb3RfZmRtYSAt IEZNREEgc3RydWN0DQo+ICsgKg0KPiArICogQG9jZWxvdDogUG9pbnRlciB0byBvY2Vsb3Qgc3Ry dWN0DQo+ICsgKiBAYmFzZTogYmFzZSBhZGRyZXNzIG9mIEZETUEgcmVnaXN0ZXJzDQo+ICsgKiBA ZGNiX3Bvb2w6IFBvb2wgdXNlZCBmb3IgRENCIGFsbG9jYXRpb24NCj4gKyAqIEBpcnE6IEZETUEg aW50ZXJydXB0DQo+ICsgKiBAZGV2OiBPY2Vsb3QgZGV2aWNlDQo+ICsgKiBAbmFwaTogbmFwaSBo YW5kbGUNCj4gKyAqIEByeF9idWZfc2l6ZTogU2l6ZSBvZiBSWCBidWZmZXINCj4gKyAqIEB0eF9v bmdvaW5nOiBMaXN0IG9mIERDQiBoYW5kZWQgb3V0IHRvIHRoZSBGRE1BDQo+ICsgKiBAdHhfcXVl dWVkOiBwZW5kaW5nIGxpc3Qgb2YgRENCcyB0byBiZSBnaXZlbiB0byB0aGUgaGFyZHdhcmUNCj4g KyAqIEB0eF9lbnF1ZXVlX2xvY2s6IExvY2sgdXNlZCBmb3IgdHhfcXVldWVkIGFuZCB0eF9vbmdv aW5nDQo+ICsgKiBAdHhfZnJlZV9kY2I6IExpc3Qgb2YgRENCIGF2YWlsYWJsZSBmb3IgVFgNCj4g KyAqIEB0eF9mcmVlX2xvY2s6IExvY2sgdXNlZCB0byBhY2Nlc3MgdHhfZnJlZV9kY2IgbGlzdA0K PiArICogQHJ4X2h3OiBSWCBEQ0JzIGN1cnJlbnRseSBvd25lZCBieSB0aGUgaGFyZHdhcmUgYW5k IG5vdCBjb21wbGV0ZWQNCj4gKyAqIEByeF9zdzogUlggRENCcyBjb21wbGV0ZWQNCj4gKyAqLw0K PiArc3RydWN0IG9jZWxvdF9mZG1hIHsNCj4gKwlzdHJ1Y3Qgb2NlbG90CQkqb2NlbG90Ow0KPiAr CXZvaWQgX19pb21lbQkJKmJhc2U7DQo+ICsJc3RydWN0IGRtYV9wb29sCQkqZGNiX3Bvb2w7DQo+ ICsJaW50CQkJaXJxOw0KPiArCXN0cnVjdCBkZXZpY2UJCSpkZXY7DQo+ICsJc3RydWN0IG5hcGlf c3RydWN0CW5hcGk7DQo+ICsJc2l6ZV90CQkJcnhfYnVmX3NpemU7DQo+ICsNCj4gKwlzdHJ1Y3Qg bGlzdF9oZWFkCXR4X29uZ29pbmc7DQo+ICsJc3RydWN0IGxpc3RfaGVhZAl0eF9xdWV1ZWQ7DQo+ ICsJLyogTG9jayBmb3IgdHhfcXVldWVkIGFuZCB0eF9vbmdvaW5nIGxpc3RzICovDQo+ICsJc3Bp bmxvY2tfdAkJdHhfZW5xdWV1ZV9sb2NrOw0KPiArDQo+ICsJc3RydWN0IGxpc3RfaGVhZAl0eF9m cmVlX2RjYjsNCj4gKwkvKiBMb2NrIGZvciB0eF9mcmVlX2RjYiBsaXN0ICovDQo+ICsJc3Bpbmxv Y2tfdAkJdHhfZnJlZV9sb2NrOw0KPiArDQo+ICsJc3RydWN0IGxpc3RfaGVhZAlyeF9odzsNCj4g KwlzdHJ1Y3QgbGlzdF9oZWFkCXJ4X3N3Ow0KPiArfTsNCj4gKw0KPiArc3RydWN0IG9jZWxvdF9m ZG1hICpvY2Vsb3RfZmRtYV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsDQo+ICsJ CQkJICAgICBzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpOw0KPiAraW50IG9jZWxvdF9mZG1hX3N0YXJ0 KHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSk7DQo+ICtpbnQgb2NlbG90X2ZkbWFfc3RvcChzdHJ1 Y3Qgb2NlbG90X2ZkbWEgKmZkbWEpOw0KPiAraW50IG9jZWxvdF9mZG1hX2luamVjdF9mcmFtZShz dHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEsIGludCBwb3J0LCB1MzIgcmV3X29wLA0KPiArCQkJICAg ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCj4gKw0KPiAr I2VuZGlmDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9u ZXQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jDQo+IGluZGV4IDU5 MTY0OTJmZDZkMC4uMzk3MWI4MTBjNWI0IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9ldGhl cm5ldC9tc2NjL29jZWxvdF9uZXQuYw0KPiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2Nj L29jZWxvdF9uZXQuYw0KPiBAQCAtMTUsNiArMTUsNyBAQA0KPiAgI2luY2x1ZGUgPG5ldC9wa3Rf Y2xzLmg+DQo+ICAjaW5jbHVkZSAib2NlbG90LmgiDQo+ICAjaW5jbHVkZSAib2NlbG90X3ZjYXAu aCINCj4gKyNpbmNsdWRlICJvY2Vsb3RfZmRtYS5oIg0KPiAgDQo+ICAjZGVmaW5lIE9DRUxPVF9N QUNfUVVJUktTCU9DRUxPVF9RVUlSS19RU0dNSUlfUE9SVFNfTVVTVF9CRV9VUA0KPiAgDQo+IEBA IC00NTcsNyArNDU4LDcgQEAgc3RhdGljIG5ldGRldl90eF90IG9jZWxvdF9wb3J0X3htaXQoc3Ry dWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCj4gIAlpbnQgcG9ydCA9 IHByaXYtPmNoaXBfcG9ydDsNCj4gIAl1MzIgcmV3X29wID0gMDsNCj4gIA0KPiAtCWlmICghb2Nl bG90X2Nhbl9pbmplY3Qob2NlbG90LCAwKSkNCj4gKwlpZiAoIW9jZWxvdC0+ZmRtYSAmJiAhb2Nl bG90X2Nhbl9pbmplY3Qob2NlbG90LCAwKSkNCj4gIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOw0K PiAgDQo+ICAJLyogQ2hlY2sgaWYgdGltZXN0YW1waW5nIGlzIG5lZWRlZCAqLw0KPiBAQCAtNDc1 LDkgKzQ3NiwxMyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgb2NlbG90X3BvcnRfeG1pdChzdHJ1Y3Qg c2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiAgCQlyZXdfb3AgPSBvY2Vs b3RfcHRwX3Jld19vcChza2IpOw0KPiAgCX0NCj4gIA0KPiAtCW9jZWxvdF9wb3J0X2luamVjdF9m cmFtZShvY2Vsb3QsIHBvcnQsIDAsIHJld19vcCwgc2tiKTsNCj4gKwlpZiAob2NlbG90LT5mZG1h KSB7DQo+ICsJCW9jZWxvdF9mZG1hX2luamVjdF9mcmFtZShvY2Vsb3QtPmZkbWEsIHBvcnQsIHJl d19vcCwgc2tiLCBkZXYpOw0KPiArCX0gZWxzZSB7DQo+ICsJCW9jZWxvdF9wb3J0X2luamVjdF9m cmFtZShvY2Vsb3QsIHBvcnQsIDAsIHJld19vcCwgc2tiKTsNCj4gIA0KPiAtCWtmcmVlX3NrYihz a2IpOw0KPiArCQlrZnJlZV9za2Ioc2tiKTsNCg0KSSBrbm93IHRoaXMgaXMgdW5yZWxhdGVkLCBi dXQuLiBjb25zdW1lX3NrYiBtYXliZT8NCg0KPiArCX0NCj4gIA0KPiAgCXJldHVybiBORVRERVZf VFhfT0s7DQo+ICB9DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29j ZWxvdF92c2M3NTE0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF92c2M3NTE0 LmMNCj4gaW5kZXggMzgxMDNiMDI1NWIwLi45ODVkNTg0ZGIzYTEgMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X3ZzYzc1MTQuYw0KPiArKysgYi9kcml2ZXJz L25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF92c2M3NTE0LmMNCj4gQEAgLTE4LDYgKzE4LDcgQEAN Cj4gIA0KPiAgI2luY2x1ZGUgPHNvYy9tc2NjL29jZWxvdF92Y2FwLmg+DQo+ICAjaW5jbHVkZSA8 c29jL21zY2Mvb2NlbG90X2hzaW8uaD4NCj4gKyNpbmNsdWRlICJvY2Vsb3RfZmRtYS5oIg0KPiAg I2luY2x1ZGUgIm9jZWxvdC5oIg0KPiAgDQo+ICBzdGF0aWMgY29uc3QgdTMyIG9jZWxvdF9hbmFf cmVnbWFwW10gPSB7DQo+IEBAIC0xMDgwLDYgKzEwODEsMTAgQEAgc3RhdGljIGludCBtc2NjX29j ZWxvdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiAgCQlvY2Vsb3QtPnRh cmdldHNbaW9fdGFyZ2V0W2ldLmlkXSA9IHRhcmdldDsNCj4gIAl9DQo+ICANCj4gKwlvY2Vsb3Qt PmZkbWEgPSBvY2Vsb3RfZmRtYV9pbml0KHBkZXYsIG9jZWxvdCk7DQo+ICsJaWYgKElTX0VSUihv Y2Vsb3QtPmZkbWEpKQ0KPiArCQlvY2Vsb3QtPmZkbWEgPSBOVUxMOw0KPiArDQo+ICAJaHNpbyA9 IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X2NvbXBhdGlibGUoIm1zY2Msb2NlbG90LWhzaW8iKTsN Cj4gIAlpZiAoSVNfRVJSKGhzaW8pKSB7DQo+ICAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1pc3Np bmcgaHNpbyBzeXNjb25cbiIpOw0KPiBAQCAtMTEzOSw2ICsxMTQ0LDEyIEBAIHN0YXRpYyBpbnQg bXNjY19vY2Vsb3RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gIAlpZiAo ZXJyKQ0KPiAgCQlnb3RvIG91dF9vY2Vsb3RfZGV2bGlua191bnJlZ2lzdGVyOw0KPiAgDQo+ICsJ aWYgKG9jZWxvdC0+ZmRtYSkgew0KPiArCQllcnIgPSBvY2Vsb3RfZmRtYV9zdGFydChvY2Vsb3Qt PmZkbWEpOw0KPiArCQlpZiAoZXJyKQ0KPiArCQkJZ290byBvdXRfb2NlbG90X2RldmxpbmtfdW5y ZWdpc3RlcjsNCj4gKwl9DQo+ICsNCj4gIAllcnIgPSBvY2Vsb3RfZGV2bGlua19zYl9yZWdpc3Rl cihvY2Vsb3QpOw0KPiAgCWlmIChlcnIpDQo+ICAJCWdvdG8gb3V0X29jZWxvdF9yZWxlYXNlX3Bv cnRzOw0KPiBAQCAtMTE2Niw2ICsxMTc3LDggQEAgc3RhdGljIGludCBtc2NjX29jZWxvdF9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiAgb3V0X29jZWxvdF9yZWxlYXNlX3Bv cnRzOg0KPiAgCW1zY2Nfb2NlbG90X3JlbGVhc2VfcG9ydHMob2NlbG90KTsNCj4gIAltc2NjX29j ZWxvdF90ZWFyZG93bl9kZXZsaW5rX3BvcnRzKG9jZWxvdCk7DQo+ICsJaWYgKG9jZWxvdC0+ZmRt YSkNCj4gKwkJb2NlbG90X2ZkbWFfc3RvcChvY2Vsb3QtPmZkbWEpOw0KPiAgb3V0X29jZWxvdF9k ZXZsaW5rX3VucmVnaXN0ZXI6DQo+ICAJb2NlbG90X2RlaW5pdChvY2Vsb3QpOw0KPiAgb3V0X3B1 dF9wb3J0czoNCj4gQEAgLTExNzksNiArMTE5Miw4IEBAIHN0YXRpYyBpbnQgbXNjY19vY2Vsb3Rf cmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICB7DQo+ICAJc3RydWN0IG9j ZWxvdCAqb2NlbG90ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+ICANCj4gKwlpZiAo b2NlbG90LT5mZG1hKQ0KPiArCQlvY2Vsb3RfZmRtYV9zdG9wKG9jZWxvdC0+ZmRtYSk7DQoNCkFy ZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjYWxsIG5ldGlmX25hcGlfZGVsKCkgd2hpbGUgdGhlIG5l dCBkZXZpY2VzIGFyZQ0Kc3RpbGwgcmVnaXN0ZXJlZD8gOi0vDQoNCj4gIAlkZXZsaW5rX3VucmVn aXN0ZXIob2NlbG90LT5kZXZsaW5rKTsNCj4gIAlvY2Vsb3RfZGVpbml0X3RpbWVzdGFtcChvY2Vs b3QpOw0KPiAgCW9jZWxvdF9kZXZsaW5rX3NiX3VucmVnaXN0ZXIob2NlbG90KTsNCj4gZGlmZiAt LWdpdCBhL2luY2x1ZGUvc29jL21zY2Mvb2NlbG90LmggYi9pbmNsdWRlL3NvYy9tc2NjL29jZWxv dC5oDQo+IGluZGV4IGIzMzgxYzkwZmYzZS4uMzNlMTU1OWJkZWEzIDEwMDY0NA0KPiAtLS0gYS9p bmNsdWRlL3NvYy9tc2NjL29jZWxvdC5oDQo+ICsrKyBiL2luY2x1ZGUvc29jL21zY2Mvb2NlbG90 LmgNCj4gQEAgLTY5NSw2ICs2OTUsOCBAQCBzdHJ1Y3Qgb2NlbG90IHsNCj4gIAkvKiBQcm90ZWN0 cyB0aGUgUFRQIGNsb2NrICovDQo+ICAJc3BpbmxvY2tfdAkJCXB0cF9jbG9ja19sb2NrOw0KPiAg CXN0cnVjdCBwdHBfcGluX2Rlc2MJCXB0cF9waW5zW09DRUxPVF9QVFBfUElOU19OVU1dOw0KPiAr DQo+ICsJc3RydWN0IG9jZWxvdF9mZG1hCQkqZmRtYTsNCj4gIH07DQo+ICANCj4gIHN0cnVjdCBv Y2Vsb3RfcG9saWNlciB7DQo+IC0tIA0KPiAyLjMzLjANCj4=