From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [67.231.154.184]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5FB230C15C; Fri, 16 Oct 2026 00:58:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.154.184 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792112328; cv=fail; b=asUbfuQ4XwdNeH5nTHoMOorguFrpQZb7NAErjRJIubMFRMl9ofTaeQZRm+m3xaF8wOuC67r6F6LtKmkqhDjuPaz+pXWA+ZuwD6xPCW/8x0ibjjHoXli6e14+6XZnwd0ML4/sWbWeXJMHvubiQDkWTLD+8BUZKx9A11m5jNXTblE= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792112328; c=relaxed/simple; bh=jE5L62ERWHvCkNvqm66TGQamhqrJZ4KVYYxI8rXz1q8=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=Dg5DbNdq4Qn2Vte1rYdP2bW8F4aZqU4Uzvh5IEFV5EzhwsyDf+ieCcVajAx9jsi/P3DvK4puQ77Mn3iHOXT0oSy8I4sF+qnbPUHJm2E/eU+TgBB8dZHt9/xnOFsb+Ybt3nSQJSjwMBV9V+AyU/p3eHmHX8xs+EhVMbaBe2OSjLI= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sitime.com; spf=pass smtp.mailfrom=sitime.com; dkim=pass (2048-bit key) header.d=sitime.com header.i=@sitime.com header.b=U1p70jjj; dkim=pass (2048-bit key) header.d=Sitime.onmicrosoft.com header.i=@Sitime.onmicrosoft.com header.b=HfsOiCWK; arc=fail smtp.client-ip=67.231.154.184 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sitime.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sitime.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sitime.com header.i=@sitime.com header.b="U1p70jjj"; dkim=pass (2048-bit key) header.d=Sitime.onmicrosoft.com header.i=@Sitime.onmicrosoft.com header.b="HfsOiCWK" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sitime.com; h=cc:cc:content-transfer-encoding:content-transfer-encoding:content-type:content-type:date:date:from:from:in-reply-to:in-reply-to:message-id:message-id:mime-version:mime-version:references:references:subject:subject:to:to; s=mail; bh=jE5L62ERWHvCkNvqm66TGQamhqrJZ4KVYYxI8rXz1q8=; b=U1p70jjjBSgfQ2xkk8j96E6fWOupxbbOiyrUJq+YTC2PmmX+1Ay5JqDepriPOJMEzvYlKYlnxDwQJLWKsVkA3a+I6x98/a79djvqUijl4zf0P1/HzeEkmOzi1UOBN+on+A5Zf2wMXh1wqppvKib9gAV+zWEwFpV/WndzRiFGUG4TK03IWP0faAKFtFL4YiL+H6+HNVgp+oCS4a8mCAxc+Q/A74zwqo18cqKPlSjCQCcCyJt3feHxVluX1hpc+R90qhdGW20HudgK1YJvbqSofi2zBzDPdyIrI6E1QpdNJvf2iZFW4BHrTAvtdDkywjcSWm3uRKXSqMs6Q8K555C74Q== X-Virus-Scanned: Proofpoint Essentials engine Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11022079.outbound.protection.outlook.com [52.101.43.79]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id CB2B590007F; Fri, 16 Oct 2026 00:58:32 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XNMoQArlf0d80/Q4RC93WeBCHAyCca7zhlhZlFBSwvZiSjl0AE+TORXZ7dsyhJCsVF1/dhbPofEiV0TRoe/9iC+K/aI3U5LVQxM8//+y6GPPQ1V2VNBLC2RFqUA3k0SmSIJD3vr1jmcXn0tLd5dqlRXY8TR9oCrIi8xsXP4jBZ7HEzvjDug8ciJiZrIliq7mLAMdDzMYknvwiBmW52wPydoAJPfJs6MAm9WqcHzDIfNeMVltrGwmAZzuWhvPPT7XN6BwW22g89zdQVCfKftucVT3ydz4XsGujtbCdj2cw22OqWIFd/Oni7VfFvTINqD/63LVT69jzKqDaPQPg3EzRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=jE5L62ERWHvCkNvqm66TGQamhqrJZ4KVYYxI8rXz1q8=; b=tAFdcm90zB6dS4Uu6mZsX5jl92xfhsyWjAqhz/xpLI6i42Jru1eDXJIJtNGYfi0gyKvxCLlEiEvKA5GS0YfkDMg5dDGT7CinChwgd1zlkY2ZKCEcuqpOGedP3HYS0XYw0jj9dQ+Em9tV6Jpqp44lmBMeEykWkm1hDN93b+KfcBn2Yfqi79Mic2k608QpV/w/jKD8KUBQCkKZHEaWG5iLIqVuDkLJDmSs9PEo/wvOuLu1yn99ccHbfCkk9bMBGXjhWcQpZ8PZap/Bo/ZYhNGcfhwGp1VDDk9VMcGaG26x5oyhsMCYuhBI0/+Q3gbHqYj13KjH1Bf4lhRl1Q8ReqJcMA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=sitime.com; dmarc=pass action=none header.from=sitime.com; dkim=pass header.d=sitime.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Sitime.onmicrosoft.com; s=selector1-Sitime-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jE5L62ERWHvCkNvqm66TGQamhqrJZ4KVYYxI8rXz1q8=; b=HfsOiCWKXH1rA+S12P8Z7Xh7uO8vPnGlkbSDXQ6v3IKF+Lg+npiTDVdfOBuwC/B7u1ifX013fMS+AL8WiL1LMjDse50Bvur8RX/Qnf0usuWec/t3MR1n6hmUKvUb1qDEhQy4/zXlWQBjh4WNZ3Lm+X8gPRyj0wjWoCNz4rPmDvqy8YVUEYIcwgm3/CLq2cMSoFM+XrhekSeUxSFeWCoL6LlcvTNIJ0+cb387/IEk6NdjOFl43DiAL0DGJ2LwfJiMUns7EBaXUREN2IayHLa4cyJwcjzoUaDaq088WVDaGcpDF5b6pdoY8ItvcUmQUofA9t7u0W3/9p+P8M1VsG6Bwg== Received: from LVWPR20MB994915.namprd20.prod.outlook.com (2603:10b6:408:3bf::16) by IA3PR20MB995299.namprd20.prod.outlook.com (2603:10b6:208:623::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.14; Fri, 16 Oct 2026 00:58:29 +0000 Received: from LVWPR20MB994915.namprd20.prod.outlook.com ([fe80::9551:3864:128b:8c01]) by LVWPR20MB994915.namprd20.prod.outlook.com ([fe80::9551:3864:128b:8c01%4]) with mapi id 15.21.0522.013; Fri, 16 Oct 2026 00:58:29 +0000 From: Ali Rouhi To: "jiri@resnulli.us" CC: "vadim.fedorenko@linux.dev" , "arkadiusz.kubalewski@intel.com" , "ivecera@redhat.com" , "kuba@kernel.org" , "pabeni@redhat.com" , "robh@kernel.org" , "krzk+dt@kernel.org" , "conor+dt@kernel.org" , "prabhakar.mahadev-lad.rj@bp.renesas.com" , "cjubran@nvidia.com" , "Oleg.Zadorozhnyi@devoxsoftware.com" , "devicetree@vger.kernel.org" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH net-next v14 08/12] dpll: sit9531x: add support to get and set frequency on pins Thread-Topic: [PATCH net-next v14 08/12] dpll: sit9531x: add support to get and set frequency on pins Thread-Index: AQHdXQl1XYwbYdVvN0KKUB9scJNGTA== Date: Fri, 16 Oct 2026 00:58:29 +0000 Message-ID: <20261016005823.13690-9-arouhi@sitime.com> References: <20261016005823.13690-1-arouhi@sitime.com> In-Reply-To: <20261016005823.13690-1-arouhi@sitime.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=sitime.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: LVWPR20MB994915:EE_|IA3PR20MB995299:EE_ x-ms-office365-filtering-correlation-id: 1167a0af-b70d-456d-92a0-08df2b20977f x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|23010399003|1800799024|366016|6133799003|10067099003|18002099003|22082099003|3023799007|260925022911599003|5023799004|260925021911599003|260925021311599003|261009223327099003|261009221727099003|261009223027099003|261009221227099003|261009220027099003|38070700021|56012099006; x-microsoft-antispam-message-info: dSILYq4loxtO6J+DCpzgItERhCKWkXDW9HteTrqhz0MyfNOFKW1QlWLDPPFQhIa4bdpQIOPiZDWc1ai+wQliCfjhE1Trz99H7L7B5DY5qQbE/aV2H2dK1h4/N5NlWoEQSNC1cFZUlxwkwNqQp9knpLFXJo5JpKxgxQjEbsRo/G7w9+50jVfUdg4zTBesisGZQNntzqeJyopjKeX/N5OVJSAX5z0MqJz0x9strclu9AxGOWSnWYm/W9JlZfHNfveYvTdkzKw6K8P1IH+GDUwIhrJTuz9E3N8wCLkP7Gz/CRF2gS3+Vi963PqAWe6uJq+ngybHoVpcYXZ5pqatGRm9tdAkWYopb/iIoPcqURIeK+XFCDsC1Y+fzqtqSLyanl3LkakZyXFPW9p8BJeq+EZrl6zv6E5dC9mueS7/ot8Ckq+6kP0wTJyko6tAhr53vJr6Wg7p0XEJ6GI/VtVBNrfAyv0CRXruNKNdFGI9dsMpo3oG2hQNFTh0KsDhg3IeN9IRE3+/7CyaiXKDgSefHEJO9jlizHE90sycy4UjlaD8sMhKYtbEJT+C2v6R6qHC4ZH5hYB+M2+kMuFSuhAmsVFanoW8NeCVnOyBKbp9SFKLPXY0BFI06WTUXH6qxPh7CkgHpR6JF2T5but0Czx+bZyxz6creOGGLOqNdkvo3+maAPQXrqNUwNkwnOSib/RoffG0uJmNrZvxVCKG9O93jBrLG5g+JSYA8gzMRSBDdryvi5A= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LVWPR20MB994915.namprd20.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(23010399003)(1800799024)(366016)(6133799003)(10067099003)(18002099003)(22082099003)(3023799007)(260925022911599003)(5023799004)(260925021911599003)(260925021311599003)(261009223327099003)(261009221727099003)(261009223027099003)(261009221227099003)(261009220027099003)(38070700021)(56012099006);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cFdOcjhsY3JZV2FpdkE0S0N0WHd2Q1pKM01uMmpVOHkzSkVDMkJKZjg2ZE9Q?= =?utf-8?B?cFYxOTFjSmZqVjdYZ1U0d0UxSzdxSDI3Q2tERko2am9rc1RJVmlGWEtvS1ZT?= =?utf-8?B?RjZVd25ZQUJxQU1oK0VwMjZEeGhHdGFTN1JXeTMrbGtwUWNhd1JTT2Rkd0VE?= =?utf-8?B?WnRYbVJEbmYweTYrS015UFNpSDVFSEdqd2hLbWFHRjNMUGlWOU91ZEc3N0JO?= =?utf-8?B?VjFiOWplOGhXQkxkQndTc0NxbS9LeGw0V3BnYWZoOHB6QWhtdzExYlEyQnE0?= =?utf-8?B?SzNEYnRFT3V3TGphK25XbURzNGJRZS9GUGE2a2ZmT1dRTTJpSnEzZk5KZkVT?= =?utf-8?B?Y3FMUXlqbTdSdnk5ZXlZUzFnTnNoZzZKck1NSmlNZW5GWmFwT3VKWEdTZzFx?= =?utf-8?B?cERhbjhFUDB3dmZlTzd1VVNTUG5tYlk3Q0F4VldMNXJraXJRMnpoTUVpYTFD?= =?utf-8?B?L3lNbElKRDVJbVF5a2psODFoa0lmUC83aHhTODNCbUFtQXBkR1ZQM0t1b2Zu?= =?utf-8?B?ZkZMTDYyU0lIZEllQ0ZWanFEaFR4b2syaFFPMkpMREZWK1VDZnNWNXZ2SUNq?= =?utf-8?B?WmFyVWM5bE9Xa2NPTC9KaDF4dCtrSmNYUnZySnpDZ0FjbVJTQ2EyNmt5QTB5?= =?utf-8?B?ZkI1c29SeDZheUh3bzBPWC9oZWlRSFFwcWw0b05VVWEzQThzU3BRY1dST2N3?= =?utf-8?B?ZjZWdTc3OTFFS1VrblNHTkxUOVZ3NW1QRkhKcEdBWWJPTnJ2ZWxMMUY5dmFP?= =?utf-8?B?a05mN2NWYmpwYmR5STl2eVlsRVp4SjExb0xDRjhvSUFUQ1B5QmFCNStkSGp0?= =?utf-8?B?ZlRmM05kaHVCcnVPWWJBNFQ5Zi96N2dRcjJqa2JIMjNoRlg3RkxIM0lHMDNX?= =?utf-8?B?U0JvQ2pCKzhtRldIK05SVFJqSFNuSHFhWkFVcGFvQVlGODBaRzVtQ2hBV3FI?= =?utf-8?B?ZWZ1UUp5bXhZekJoN3hhajR1YWNaQzh1UnNqbGJoRXE0L0VIS1luOVhPMVlH?= =?utf-8?B?amtOV2pvK2tCNWRJRThLc1diVlV1Y2Y1UzVDZlBOQkJHZUFGWGFBVmJlMVZu?= =?utf-8?B?R2lKRDlnei9uNUZpU1FhRmRVTTN1aXNveEJzWC9tYk85bmxPZ0VVSzFDekpI?= =?utf-8?B?OU16TDZWTXlscmUwYyttNmlNSTcxaFowbHRZK3lFU0hBVUFaQ241Q09wNDdJ?= =?utf-8?B?cE9ZM0x1dlZIMW1hK3VoeG10NmtyZjhPR3c4N3l4NUlvSWdremtwWHg4Q1BR?= =?utf-8?B?U0NkWXB1WXRnaVRSeHE5ald2Ry9uajc0TEJhTXlxYkc2Q00xek9PWjJnVkJB?= =?utf-8?B?MXpNbithWDlZMU1yNzgwN1ppem1qTWkzTjRpMXpXYUxDQnpqVXM2c3cxSjk2?= =?utf-8?B?WFRrUGtZaGxobnJjcDVnWTVSUkxBMWc3eUJzRnEydWF3c1NkcmpFSm5ITDRz?= =?utf-8?B?NHdFRXErNkdCUC9YdTFyM2NTSnhGUHhMOW5GaC9XMkMwN21mQXE5aGxsOW1n?= =?utf-8?B?Tlo2TlgwZExZd1NmRnRWakdsVndkN1R4Qk9haFhjZ3N4TVhlVUZGMXZzTW93?= =?utf-8?B?ZWFicXZSd0puNHp1ZE85SkFEZ2t0M2ZWc2ZGNFcvK0p4blZseXNBMlZGV3Rv?= =?utf-8?B?TWd5bktwd1ZXc3N0Q1dnQlZHaEJBdDRwb1REdmVVcENlSG1zSVdJc09McnJy?= =?utf-8?B?L05YREdYMVhFOVFNQVQrWGROcmoxQ0VuUG52ZkhoNk02UmpVUHR5WEgzSlRp?= =?utf-8?B?REtBOWZlYkdmeTVKUW1PZlRLL2RhK01nUURHbGNTWG1BcjZBcjAxRTdmaXln?= =?utf-8?B?Vkp4ZFRsTXdYSkhGUzdxWEsvcW5mS0RNWEdJbUlSMldpdzVxa0I4eXpEbk1a?= =?utf-8?B?aU1jYUdxZU44am53QTdHM2FucnQ0ckpaV3h6dlUvUFZHa1Q3WlZwbmZqM0hV?= =?utf-8?B?WktuVFVEd3M5N092ZWpNejZSRWQvU3dpc2NnU2Z1T2E0bnNKdWtHM0FURlFk?= =?utf-8?B?UktjM3lrdUNkK0tFZCtDQU1DMm81dlc4SEtPclQzdm4wZkwrby9kYThnNmhk?= =?utf-8?B?VXJpK1dudkJCaHFqZHhlUUhnRHN3cmpLRjhic2hJTWJiM3dUUzR4T20zTFgy?= =?utf-8?B?eVBYWUdGbnViRVgyMUdUL0ZEbDVENlVuS3dKT1BPZVpnRVNERU9mQTNGdXJy?= =?utf-8?B?K1c5dHUwbEF4Nm8yYW44emJXZDArUjMwcE4wRVYvYWZnM3pOOXRXR2lXck50?= =?utf-8?B?VyszQ3FBNno4Ymw5RHN1MGZpTjNucFFkNk5sbXV0bkpRN3JXeVBxbElyTWZp?= =?utf-8?Q?6IKzICLYrQCvi7R3CL?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: 482Ci0q9Cx+OmXpK/H9fwt873G07+DIy4BIZIvkwQAV3bm6XYVs2h8mvUG9FlPHEx0JpBCT18OEaxX+YvYvD9HGwzdZ8adyFiP+4Q7UrblvrBOVT5sKtxGNHRIPFfeLKDQKeaoLnvMJCUpQjmP2OPzGvDKTSl1P4iKppJRWDqgCFjBYAu1/XAEr6v8va/eDbh0fPcfE0JC/jePx0Z2O1DMoY/a64YY1XqzFnZDnhDM8K5IvOzIHjeogy+En8QSkRgv+l66f5+2A4EnXX7kqSwWmC8J1DgLpd0rVcHg6sbH0XOIBJk5zOFxOSy/NT2PypMrUjF1pvICjNLzQHbBmbyA== X-OriginatorOrg: sitime.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: LVWPR20MB994915.namprd20.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1167a0af-b70d-456d-92a0-08df2b20977f X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Oct 2026 00:58:29.0525 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 8fb55916-cf10-4b0d-96f4-cf3952657263 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: g60cE41otRm9bIsQEz3uK+dMY8B1umpVmGeqHh5uK9YHfS3sXeywobIHK5sTITCQR4ljHqFK2XsOB9aIfaQVHg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA3PR20MB995299 X-MDID: 1792112313-2m4DbXzq56gs X-PPE-STACK: {"stack":"us1"} X-MDID-O: us1;at1;1792112313;2m4DbXzq56gs;;ba04557de9d2da8490f5f1e6de07b967 X-PPE-TRUSTED: V=1;DIR=OUT; RnJvbTogT2xlZyBaYWRvcm96aG55aSA8T2xlZy5aYWRvcm96aG55aUBkZXZveHNvZnR3YXJlLmNv bT4KCkJvdGggZGlyZWN0aW9ucyBpbiBvbmUgcGF0Y2gsIHNpbmNlIHRoZXkgc2hhcmUgZXZlcnl0 aGluZyB0aGF0IG1hdHRlcnMuCgpBbiBpbnB1dCdzIGZyZXF1ZW5jeSBpcyB3aGF0IHRoZSBib2Fy ZCBwcmVzZW50cywgc28gaXQgaXMgcmVwb3J0ZWQgZnJvbQp0aGUgZmlybXdhcmUgZGVzY3JpcHRp b24gcmF0aGVyIHRoYW4gcmVhZCBiYWNrOiB0aGUgY2hpcCBoYXMgbm8gZGl2aWRlciBvbgphbiBp bnB1dCB3aG9zZSByYXRlIGl0IG1lcmVseSBxdWFsaWZpZXMuICBBbiBpbnB1dCB0aGUgZmlybXdh cmUgZ2l2ZXMgbm8KcmF0ZSBmb3IgaGFzIG5vIGZyZXF1ZW5jeSBhdHRyaWJ1dGUgYXQgYWxsIHJh dGhlciB0aGFuIGEgemVybywgYmVjYXVzZQp0aGUgY29yZSBhYmFuZG9ucyB0aGUgd2hvbGUgcGlu IGR1bXAgb24gYW4gZXJyb3IgZnJvbSBvbmUgcGluLgoKQW4gb3V0cHV0J3MgZnJlcXVlbmN5IGlz IHRoZSBWQ08gZGl2aWRlZCBieSB0aGF0IG91dHB1dCdzIGRpdmlkZXIsIHNvIGl0CmlzIGNvbXB1 dGVkIGZyb20gdGhlIGRpdmlkZXIgcmVhZCBiYWNrIGZyb20gdGhlIGNoaXAgYW5kIHNldCBieSB3 cml0aW5nCmEgbmV3IG9uZS4gIFRoZSBWQ08gaW4gdHVybiBjb21lcyBmcm9tIHRoZSBmZWVkYmFj ayBkaXZpZGVyLCB3aGljaCBpcwp3aHkgdGhlIGNyeXN0YWwgcmF0ZSBpcyBuZWVkZWQgYXQgcHJv YmUuICBUaGF0IHJhdGUgaXMgdHJ1c3RlZCBvbmx5Cmluc2lkZSB0aGUgYmFuZCB0aGUgUExMJ3Mg VkNPIHJ1bnMgaW46IGJlbG93IHRoZSBsb3cgYmFuZCB0aGUgZGl2aWRlciBpcwpub3QgcHJvZ3Jh bW1lZCBhbmQgdGhlIFBMTCByZXBvcnRzIG5vIGRhdGEsIGFuZCBhIHJlcXVlc3QgYWdhaW5zdCBh IHJhdGUKb3V0c2lkZSB0aGUgYmFuZCBpcyByZWZ1c2VkIHJhdGhlciB0aGFuIHByb2dyYW1tZWQs IHNpbmNlIGEgZGl2aWRlcgpjb21wdXRlZCBmcm9tIGEgcmF0ZSB0aGUgb3V0cHV0IGlzIG5vdCBh dCB3b3VsZCBiZSByZXBvcnRlZCBhcyBzdWNjZXNzLgpBIGRpdmlkZXIgd3JpdGUgb25seSB0YWtl cyBlZmZlY3QgaW5zaWRlIHRoZSBwcm9ncmFtbWluZyBzdGF0ZSwgYW5kIHRoYXQKc3RhdGUgaGFz IHRvIGJlIGxlZnQgd2l0aCB0aGUgb3V0cHV0IGxvb3BzIHJlLWxvY2tlZCB3aGF0ZXZlciBoYXBw ZW5lZAppbiBiZXR3ZWVuLCBzbyB0aGUgZXhpdCBydW5zIGV2ZW4gd2hlbiBhIHdyaXRlIGluIHRo ZSBtaWRkbGUgZmFpbGVkIGFuZAp0aGUgZmlyc3QgZXJyb3IgaXMgdGhlIG9uZSByZXR1cm5lZC4K ClByb2dyYW1taW5nIGEgZGl2aWRlciBjb3N0cyBhYm91dCBhIGh1bmRyZWQgbWlsbGlzZWNvbmRz IHVuZGVyIHRoZSBkZXZpY2UKbG9jazogYSBkb3plbiBvciBzbyByZWdpc3RlciB0cmFuc2FjdGlv bnMsIHRoZW4gdGhlIHNldHRsaW5nIHRpbWUgdGhlIHBhcnQKcmVxdWlyZXMgYWZ0ZXIgdGhlIGxv b3AtbG9jayBjb21tYW5kLCB3aGljaCBpcyBhIHByb3BlcnR5IG9mIHRoZSBoYXJkd2FyZQpyYXRo ZXIgdGhhbiBhIGNvbnNlcnZhdGl2ZSBndWVzcy4gIFRoZSBEUExMIGNvcmUgaG9sZHMgaXRzIG93 biBsb2NrIGFjcm9zcwp0aGUgd2hvbGUgY2FsbGJhY2ssIHNvIGEgZnJlcXVlbmN5IHNldCBvbiB0 aGlzIGRldmljZSBkZWxheXMgbmV0bGluawp0cmFmZmljIGZvciBldmVyeSBEUExMIGluIHRoZSBz eXN0ZW0gZm9yIHRoYXQgbG9uZy4gIFNwbGl0dGluZyB0aGUgd2FpdApvdXQgd291bGQgbmVlZCB0 aGUgb3BzIHRvIGNvbXBsZXRlIGFzeW5jaHJvbm91c2x5LCB3aGljaCB0aGUgaW50ZXJmYWNlCmRv ZXMgbm90IG9mZmVyOyBpc3N1aW5nIHRoZSBjb21taXQgd2l0aG91dCB3YWl0aW5nIHdvdWxkIGxl dCB0aGUgbmV4dApyZXF1ZXN0IHByb2dyYW0gYSBwYXJ0IHRoYXQgaGFzIG5vdCBzZXR0bGVkLiAg QSByYXRlIGNoYW5nZSBpcyBhCmNvbmZpZ3VyYXRpb24gYWN0aW9uLCBub3Qgc29tZXRoaW5nIGEg cnVubmluZyBzeXN0ZW0gZG9lcyBwZXIgcGFja2V0LCBzbwp0aGUgY29zdCBpcyBwYWlkIHdoZXJl IGl0IGlzIHZpc2libGUgcmF0aGVyIHRoYW4gaGlkZGVuIGJlaGluZCBhCmNvbXBsZXRpb24gdGhl IGNhbGxlciBjYW5ub3Qgd2FpdCBmb3IuCgpUaGUgcGhhc2UgZmx1c2ggdGhhdCBmb2xsb3dzIGEg ZGl2aWRlciB3cml0ZSByZWFsaWducyBldmVyeSBvdXRwdXQgZmVkIGJ5CnRoYXQgUExMLCBub3Qg b25seSB0aGUgb25lIHRoYXQgY2hhbmdlZC4gIFRoZSBmbHVzaCBpcyBhIHBlci1QTEwgZnVuY3Rp b24KaW4gdGhlIGRldmljZSBhbmQgdGhlcmUgaXMgbm8gcGVyLW91dHB1dCBlcXVpdmFsZW50LCBz byBhbiBvdXRwdXQgd2hvc2UKcmF0ZSBpcyBzZXQgd2hpbGUgaXRzIHNpYmxpbmdzIGFyZSBydW5u aW5nIHdpbGwgc3RlcCB0aGVpciBwaGFzZSB0b28uCgpUaGUgZmx1c2gncyBvd24gZXJyb3IgcGF0 aHMgcmVzdG9yZSB3aGF0IHRoZXkgY2hhbmdlZDogYSBmYWlsZWQgc291cmNlCnNlbGVjdCBwdXRz IHRoZSBvcmlnaW5hbCBzb3VyY2UgYmFjaywgYSBzaWJsaW5nIGlzIG1hcmtlZCBwYXJrZWQgYmVm b3JlCml0IGlzIGNsZWFyZWQgc28gYSBmYWlsdXJlIGNhbm5vdCBsZWF2ZSBpdCB1bnBhcmtlZCwg YW5kIGEgZmFpbGVkIGFybQpkaXNhcm1zIHJhdGhlciB0aGFuIHVucGFya3MuCgpTaWduZWQtb2Zm LWJ5OiBPbGVnIFphZG9yb3pobnlpIDxPbGVnLlphZG9yb3pobnlpQGRldm94c29mdHdhcmUuY29t PgpBc3Npc3RlZC1ieTogTExNClNpZ25lZC1vZmYtYnk6IEFsaSBSb3VoaSA8YXJvdWhpQHNpdGlt ZS5jb20+Ci0tLQogZHJpdmVycy9kcGxsL3NpdDk1MzF4L2NvcmUuYyB8IDgwOCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9kcGxsL3NpdDk1MzF4L2NvcmUuaCB8 ICAgNyArCiBkcml2ZXJzL2RwbGwvc2l0OTUzMXgvZHBsbC5jIHwgMTIwICsrKysrKwogZHJpdmVy cy9kcGxsL3NpdDk1MzF4L3Byb3AuYyB8ICAzMyArLQogZHJpdmVycy9kcGxsL3NpdDk1MzF4L3Jl Z3MuaCB8ICAyMSArCiA1IGZpbGVzIGNoYW5nZWQsIDk4NSBpbnNlcnRpb25zKCspLCA0IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9jb3JlLmMgYi9kcml2 ZXJzL2RwbGwvc2l0OTUzMXgvY29yZS5jCmluZGV4IGYzZGJlOTQ5ZjIxOS4uODc1YTVmZTc4M2Q1 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvY29yZS5jCisrKyBiL2RyaXZlcnMv ZHBsbC9zaXQ5NTMxeC9jb3JlLmMKQEAgLTQ4OCw2ICs0ODgsMTQwIEBAIHN0YXRpYyBpbnQgc2l0 OTUzMXhfb3V0cHV0X2ZvcmNlZF9oaXooc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LAogCQkJ CQltdXRlZCk7CiB9CiAKKy8qIEF0dGVtcHRzIHRvIHJlLWxvY2sgdGhlIG91dHB1dCBsb29wcyBi ZWZvcmUgcmVwb3J0aW5nIHRoZW0gb3Blbi4gKi8KKyNkZWZpbmUgU0lUOTUzMVhfTE9PUF9MT0NL X1RSSUVTCTMKKworLyoKKyAqIHNpdDk1MzF4X3ByZ19hYm9ydCAtIGxlYXZlIHRoZSBwcm9ncmFt bWluZyBzdGF0ZSB3aXRob3V0IGNvbW1pdHRpbmcKKyAqCisgKiBFbnRlcmluZyB0aGUgc3RhdGUg aXMgdHdvIHdyaXRlcywgYW5kIHRoZSBzZWNvbmQgY2FuIGZhaWwgd2l0aCB0aGUgZGVidWcKKyAq IGJsb2NrIGFscmVhZHkgdW5sb2NrZWQgYW5kIHRoZSBwYXJ0IHBvc3NpYmx5IGFscmVhZHkgaW4g UFJHX0NNRC4gIFRoZXJlCisgKiBpcyBub3RoaW5nIHRvIGNvbW1pdCBpbiB0aGF0IGNhc2UsIGJ1 dCB0aGUgbG9vcHMgc3RpbGwgaGF2ZSB0byBiZSBjbG9zZWQKKyAqIGFuZCB0aGUgZGVidWcga2V5 IHB1dCBiYWNrLCB3aGljaCBpcyBvdGhlcndpc2Ugb25seSBkb25lIGJ5CisgKiBzaXQ5NTMxeF9w cmdfY29tbWl0KCkuCisgKi8KK3N0YXRpYyB2b2lkIHNpdDk1MzF4X3ByZ19hYm9ydChzdHJ1Y3Qg c2l0OTUzMXhfZGV2ICpzaXRkZXYpCit7CisJaW50IHJjID0gLUVJTzsKKwl1OCBhdHRlbXB0Owor CisJZm9yIChhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IFNJVDk1MzFYX0xPT1BfTE9DS19UUklFUzsg YXR0ZW1wdCsrKSB7CisJCXJjID0gc2l0OTUzMXhfd3JpdGVfdTgoc2l0ZGV2LCBTSVQ5NTMxWF9S RUdfUFJHX0RJUl9HRU4sCisJCQkJICAgICAgIFNJVDk1MzFYX0xPT1BfTE9DSyk7CisJCWlmICgh cmMpCisJCQlicmVhazsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOworCX0KKwlpZiAocmMp CisJCWRldl9lcnIoc2l0ZGV2LT5kZXYsCisJCQkib3V0cHV0IGxvb3BzIGxlZnQgdW5sb2NrZWQg YWZ0ZXIgYSBmYWlsZWQgZW50cnk6ICVkXG4iLAorCQkJcmMpOworCisJc2l0OTUzMXhfd3JpdGVf dTgoc2l0ZGV2LCBTSVQ5NTMxWF9SRUdfT1VUU1lTX0RFQlVHLAorCQkJICBTSVQ5NTMxWF9ERUJV R19MT0NLX1ZBTCk7Cit9CisKKy8qCisgKiBFbnRlciB0aGUgb3V0cHV0LXN5c3RlbSBwcm9ncmFt bWluZyBzdGF0ZTogdW5sb2NrIHRoZSBkZWJ1ZworICogcmVnaXN0ZXJzIG9uIFBhZ2UgMyBhbmQg aXNzdWUgdGhlIFBSR19DTUQgc3RhdGUgY29tbWFuZC4gIFJlZ2lzdGVyCisgKiB3cml0ZXMgdGhh dCByZWNvbmZpZ3VyZSB0aGUgb3V0cHV0IHN5c3RlbSBvbmx5IHRha2UgZWZmZWN0IHdoZW4KKyAq IHRoZXkgYXJlIG1hZGUgaW5zaWRlIHRoaXMgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgc2l0OTUz MXhfcHJnX2VudGVyKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldikKK3sKKwlpbnQgcmM7CisK KwlyYyA9IHNpdDk1MzF4X3dyaXRlX3U4KHNpdGRldiwgU0lUOTUzMVhfUkVHX09VVFNZU19ERUJV RywKKwkJCSAgICAgICBTSVQ5NTMxWF9ERUJVR19VTkxPQ0tfVkFMKTsKKwlpZiAocmMpCisJCXJl dHVybiByYzsKKworCXJjID0gc2l0OTUzMXhfd3JpdGVfdTgoc2l0ZGV2LCBTSVQ5NTMxWF9SRUdf UFJHX0RJUl9HRU4sCisJCQkgICAgICAgU0lUOTUzMVhfUFJHX0NNRF9TVEFURSk7CisJaWYgKHJj KSB7CisJCS8qCisJCSAqIFRoZSBkZWJ1ZyBibG9jayBpcyB1bmxvY2tlZCBhdCB0aGlzIHBvaW50 LCBhbmQgYSB0cmFuc2ZlcgorCQkgKiB0aGF0IHJlcG9ydGVkIGFuIGVycm9yIG1heSBzdGlsbCBo YXZlIHJlYWNoZWQgdGhlIHBhcnQgLS0KKwkJICogd2hpY2ggd291bGQgbGVhdmUgdGhlIGRldmlj ZSBpbiBQUkdfQ01EIHdpdGggaXRzIG91dHB1dAorCQkgKiBsb29wcyBvcGVuLiAgQ2FsbGVycyBz a2lwIHRoZSBjb21taXQgd2hlbiB0aGUgZW50cnkKKwkJICogZmFpbHMsIHNvIGNsb3NlIGJvdGgg aGVyZS4KKwkJICovCisJCXNpdDk1MzF4X3ByZ19hYm9ydChzaXRkZXYpOworCQlyZXR1cm4gcmM7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDb21taXQgYSBwcm9ncmFtbWluZyBzZXF1 ZW5jZSBzdGFydGVkIGJ5IHNpdDk1MzF4X3ByZ19lbnRlcigpOgorICogdXBkYXRlIHRoZSBOVk0g c2hhZG93IGFuZCByZS1sb2NrIHRoZSBsb29wcy4gIFRoZSBzbGVlcCBnaXZlcyB0aGUKKyAqIGhh cmR3YXJlIGl0cyByZXF1aXJlZCBzZXR0bGluZyB0aW1lIGFmdGVyIHRoZSBsb29wLWxvY2sgY29t bWFuZDsKKyAqIGl0IGlzIGludGVudGlvbmFsIGRlc3BpdGUgdGhlIGNhbGxlciBob2xkaW5nIG11 bHRpb3BfbG9jaywgYXMgdGhlCisgKiB3aG9sZSBOVk0gKyBsb2NrIHNlcXVlbmNlIG11c3QgYmUg YXRvbWljLgorICovCitzdGF0aWMgaW50IHNpdDk1MzF4X3ByZ19jb21taXQoc3RydWN0IHNpdDk1 MzF4X2RldiAqc2l0ZGV2KQoreworCWludCByYywgcmMyID0gMCwgcmMzOworCXU4IGF0dGVtcHQ7 CisKKwlyYyA9IHNpdDk1MzF4X3dyaXRlX3U4KHNpdGRldiwgU0lUOTUzMVhfUkVHX1BSR19ESVJf R0VOLAorCQkJICAgICAgIFNJVDk1MzFYX1VQREFURV9OVk0pOworCisJLyoKKwkgKiBJc3N1ZSB0 aGUgbG9vcCBsb2NrIGV2ZW4gaWYgdGhlIHVwZGF0ZSBmYWlsZWQ6IGV2ZXJ5IGNhbGxlcgorCSAq IGNvbW1pdHMgd2hhdGV2ZXIgaGFwcGVuZWQgYWZ0ZXIgdGhlIGVudHJ5IHNvIHRoYXQgdGhlIGNo aXAgbmV2ZXIKKwkgKiBzdGF5cyBpbiB0aGUgUFJHX0NNRCBzdGF0ZSB3aXRoIGl0cyBsb29wcyBv cGVuLCBhbmQgcmV0dXJuaW5nCisJICogZWFybHkgaGVyZSB3b3VsZCBkZWZlYXQgdGhhdC4KKwkg KgorCSAqIFJlLWxvY2sgdGhlIGxvb3BzLiAgTGVhdmluZyB0aGVtIG9wZW4gaXMgd29yc2UgdGhh biBhbnkgb3RoZXIKKwkgKiBmYWlsdXJlIHRoaXMgZnVuY3Rpb24gY2FuIHJlcG9ydCwgYW5kIG5v dGhpbmcgZWxzZSBjbG9zZXMgdGhlbSwKKwkgKiBzbyByZXRyeSwgYXMgdGhlIHByaW9yaXR5IGNv bW1pdCByZXRyaWVzIHRoZSByZWxlYXNlIG9mIGl0cworCSAqIGZvcmNlZCBob2xkb3Zlci4KKwkg Ki8KKwlmb3IgKGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgU0lUOTUzMVhfTE9PUF9MT0NLX1RSSUVT OyBhdHRlbXB0KyspIHsKKwkJcmMyID0gc2l0OTUzMXhfd3JpdGVfdTgoc2l0ZGV2LCBTSVQ5NTMx WF9SRUdfUFJHX0RJUl9HRU4sCisJCQkJCVNJVDk1MzFYX0xPT1BfTE9DSyk7CisJCWlmICghcmMy KQorCQkJYnJlYWs7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKKwl9CisJaWYgKHJjMikK KwkJZGV2X2VycihzaXRkZXYtPmRldiwKKwkJCSJvdXRwdXQgbG9vcHMgbGVmdCB1bmxvY2tlZCBh ZnRlciBwcm9ncmFtbWluZzogJWRcbiIsCisJCQlyYzIpOworCisJbXNsZWVwKDEwMCk7CisKKwkv KgorCSAqIFB1dCB0aGUgb3V0cHV0LXN5c3RlbSBkZWJ1ZyBibG9jayBiYWNrIHRoZSB3YXkgdGhl IGRldmljZSBwb3dlcnMKKwkgKiB1cC4gIEl0cyBrZXkgcmVnaXN0ZXIgdW5sb2NrcyBldmVyeSBk ZWJ1ZyByZWdpc3RlciB3aGlsZSBpdCBob2xkcworCSAqIHRoZSB1bmxvY2sgdmFsdWUsIGFuZCBl YWNoIHByb2dyYW1taW5nIHNlcXVlbmNlIHdyaXRlcyB0aGF0IHZhbHVlCisJICogaXRzZWxmLCBz byBub3RoaW5nIG5lZWRzIGl0IGxlZnQgdW5sb2NrZWQgaW4gYmV0d2Vlbi4KKwkgKi8KKwlyYzMg PSBzaXQ5NTMxeF93cml0ZV91OChzaXRkZXYsIFNJVDk1MzFYX1JFR19PVVRTWVNfREVCVUcsCisJ CQkJU0lUOTUzMVhfREVCVUdfTE9DS19WQUwpOworCisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJ aWYgKHJjMikKKwkJcmV0dXJuIHJjMjsKKworCS8qCisJICogVGhlIHByb2dyYW1taW5nIGlzIGNv bW1pdHRlZCBhbmQgdGhlIGxvb3BzIGFyZSBsb2NrZWQgYnkgbm93OworCSAqIG9ubHkgdGhlIGRl YnVnIGtleSBzdGF5ZWQgb3BlbiwgYW5kIHRoZSBuZXh0IHNlcXVlbmNlIHdyaXRlcyBpdAorCSAq IGFnYWluLiAgRmFpbGluZyBoZXJlIHdvdWxkIG1ha2UgdGhlIGNhbGxlciBza2lwIHdoYXQgZm9s bG93cyBhCisJICogY2hhbmdlIHRoYXQgZGlkIHRha2UgZWZmZWN0IC0tIGFuZCB0aGUgY29yZSBk cm9wcyBhbiBpZGVudGljYWwKKwkgKiByZXRyeSwgc28gaXQgd291bGQgbmV2ZXIgcnVuLgorCSAq LworCWlmIChyYzMpCisJCWRldl93YXJuKHNpdGRldi0+ZGV2LAorCQkJICJvdXRwdXQgZGVidWcg YmxvY2sgbGVmdCB1bmxvY2tlZCBhZnRlciBwcm9ncmFtbWluZzogJWRcbiIsCisJCQkgcmMzKTsK KworCXJldHVybiAwOworfQorCiAvKgogICogSW5wdXQgcHJpb3JpdHkgc2VsZWN0aW9uCiAgKgpA QCAtMTMyOSw2ICsxNDYzLDExIEBAIGludCBzaXQ5NTMxeF9pbnB1dF9wcmlvX2FkZChzdHJ1Y3Qg c2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4IHBsbF9pZHgsCiAJCQkJCSBjaGFuLT5wcmlvX21hc2sg fCBCSVQoaW5wdXRfaWR4KSk7CiB9CiAKKy8qIFBlci1zbG90IERJVk8gYmFzZSByZWdpc3RlciBv ZmZzZXRzICg2IHNsb3RzIHBlciBwYWdlKSAqLworc3RhdGljIGNvbnN0IHU4IGNsa291dF9vZHJf ZGl2bl9iYXNlW10gPSB7CisJMHgxNCwgMHgyNCwgMHgzNCwgMHg0NCwgMHg1NCwgMHg2NAorfTsK KwogLyogWE8gZG91YmxlciByZWdpc3RlciAqLwogI2RlZmluZSBTSVQ5NTMxWF9SRUdfWE8yX0dF TkVSSUMJCVNJVDk1MzFYX1JFRygweDAwLCAweDJEKQogI2RlZmluZSBTSVQ5NTMxWF9YT19ET1VC TEVSX0VOQl9CSVQJCTcgICAvKiBpbnZlcnRlZDogMCA9IGVuYWJsZWQgKi8KQEAgLTEzNDIsNiAr MTQ4MSw2NzUgQEAgaW50IHNpdDk1MzF4X2lucHV0X3ByaW9fYWRkKHN0cnVjdCBzaXQ5NTMxeF9k ZXYgKnNpdGRldiwgdTggcGxsX2lkeCwKIC8qIFRoZSBvdXRwdXQgZGl2aWRlciBpcyBhIDM0LWJp dCBmaWVsZCAqLwogI2RlZmluZSBTSVQ5NTMxWF9ESVZPX01BWAkJCUdFTk1BU0tfVUxMKDMzLCAw KQogCisvKgorICogc2l0OTUzMXhfaXNfeG9fZG91Ymxlcl9lbmFibGVkIC0gY2hlY2sgaWYgRnJl ZiBkb3VibGVyIGlzIGFjdGl2ZQorICoKKyAqIFJlZ2lzdGVyIDB4MkQgYml0IDcgaXMgYWN0aXZl LWxvdzogMCA9IGRvdWJsZXIgZW5hYmxlZCwgMSA9IGRpc2FibGVkLgorICoKKyAqIFJldHVybjog MSBpZiBlbmFibGVkLCAwIGlmIGRpc2FibGVkLCA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgaW50 IHNpdDk1MzF4X2lzX3hvX2RvdWJsZXJfZW5hYmxlZChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRk ZXYpCit7CisJdTggdmFsOworCWludCByYzsKKworCXJjID0gc2l0OTUzMXhfcmVhZF91OChzaXRk ZXYsIFNJVDk1MzFYX1JFR19YTzJfR0VORVJJQywgJnZhbCk7CisJaWYgKHJjKQorCQlyZXR1cm4g cmM7CisKKwlyZXR1cm4gKH52YWwgPj4gU0lUOTUzMVhfWE9fRE9VQkxFUl9FTkJfQklUKSAmIDF1 OworfQorCisvKgorICogRElWTiBhcyBhIGZpeGVkLXBvaW50IHZhbHVlOiBpbnRfcGFydCBwbHVz IGZyYWNuL2ZyYWNkLCBjYXJyaWVkIHdpdGgKKyAqIFNJVDk1MzFYX0RJVk5fU0NBTEUgc3RlcHMg cGVyIHVuaXQuICBUaGUgc2NhbGUga2VlcHMgYSB3aG9sZSBESVZOCisgKiB3ZWxsIGluc2lkZSBz NjQgd2hpbGUgcmVzb2x2aW5nIGZhciBiZWxvdyB0aGUgcGFydHMtcGVyLXRyaWxsaW9uIHRoZQor ICogZnJlcXVlbmN5IG9mZnNldCBpcyByZXBvcnRlZCBpbi4KKyAqLworc3RhdGljIHM2NCBzaXQ5 NTMxeF9kaXZuX2ZpeGVkKHUzMiBpbnRfcGFydCwgczY0IGZyYWNuLCB1NjQgZnJhY2QpCit7CisJ czY0IHdob2xlID0gKHM2NClpbnRfcGFydCAqIFNJVDk1MzFYX0RJVk5fU0NBTEU7CisJdTY0IGZy YWM7CisKKwlpZiAoIWZyYWNkKQorCQlyZXR1cm4gd2hvbGU7CisKKwlmcmFjID0gbXVsX3U2NF91 NjRfZGl2X3U2NChhYnMoZnJhY24pLCBTSVQ5NTMxWF9ESVZOX1NDQUxFLCBmcmFjZCk7CisKKwly ZXR1cm4gZnJhY24gPCAwID8gd2hvbGUgLSAoczY0KWZyYWMgOiB3aG9sZSArIChzNjQpZnJhYzsK K30KKworLyoKKyAqIHNpdDk1MzF4X2Rpdm5fc3RhdGljIC0gcmVhZCB0aGUgY29uZmlndXJlZCBE SVZOIG9mIGEgUExMCisgKiBAc2l0ZGV2OglkZXZpY2UgcG9pbnRlcgorICogQHBsbF9pZHg6CVBM TCBpbmRleCAoMC0zKQorICogQGRpdm46CXJlc3VsdCwgZml4ZWQgcG9pbnQgYXMgcGVyIHNpdDk1 MzF4X2Rpdm5fZml4ZWQoKQorICoKKyAqIFJlYWRzIFBMTCBwYWdlIHJlZ3MgMHgzMCAoaW50ZWdl ciBwYXJ0KSwgMHgzMi0weDM1IChudW1lcmF0b3IpIGFuZAorICogMHgzOC0weDNCIChkZW5vbWlu YXRvcikuICBUaGUgbnVtZXJhdG9yIGlzIGEgdHdvJ3MgY29tcGxlbWVudCAzMi1iaXQKKyAqIHZh bHVlLCBzbyBESVZOIGNhbiBzaXQgYmVsb3cgdGhlIGludGVnZXIgcGFydCwgYW5kIHRoZSBkZW5v bWluYXRvcgorICogcmVnaXN0ZXIgaG9sZHMgdGhlIGRpdmlzb3IgbWludXMgb25lLgorICoKKyAq IFJldHVybjogMCBvbiBzdWNjZXNzLCA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IHNpdDk1 MzF4X2Rpdm5fc3RhdGljKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggcGxsX2lkeCwK KwkJCQlzNjQgKmRpdm4pCit7CisJdTMyIGludF9wYXJ0LCBmcmFjbl9yYXcgPSAwLCBmcmFjZF9y YXcgPSAwOworCXU2NCBmcmFjZDsKKwlzNjQgZnJhY247CisJaW50IHJjLCBpOworCXU4IHY7CisK KwlyYyA9IHNpdDk1MzF4X3JlYWRfcGxsX3U4KHNpdGRldiwgcGxsX2lkeCwKKwkJCQkgIFNJVDk1 MzFYX1BMTF9SRUdfRElWTl9JTlQsICZ2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlpbnRf cGFydCA9IHY7CisKKwlmb3IgKGkgPSAzOyBpID49IDA7IGktLSkgeworCQlyYyA9IHNpdDk1MzF4 X3JlYWRfcGxsX3U4KHNpdGRldiwgcGxsX2lkeCwKKwkJCQkJICBTSVQ5NTMxWF9QTExfUkVHX0RJ Vk5fTlVNICsgaSwgJnYpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJCWZyYWNuX3JhdyA9 IChmcmFjbl9yYXcgPDwgOCkgfCB2OworCX0KKworCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKSB7 CisJCXJjID0gc2l0OTUzMXhfcmVhZF9wbGxfdTgoc2l0ZGV2LCBwbGxfaWR4LAorCQkJCQkgIFNJ VDk1MzFYX1BMTF9SRUdfRElWTl9ERU4gKyBpLCAmdik7CisJCWlmIChyYykKKwkJCXJldHVybiBy YzsKKwkJZnJhY2RfcmF3ID0gKGZyYWNkX3JhdyA8PCA4KSB8IHY7CisJfQorCisJLyoKKwkgKiBO VU0vREVOIGlzIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgRElWTiwgc28gfE5VTXwgaXMgYmVsb3cg REVOIGJ5CisJICogY29uc3RydWN0aW9uLiAgQSBwYWlyIHRoYXQgc2F5cyBvdGhlcndpc2UgZGlk IG5vdCBjb21lIGZyb20gYQorCSAqIHByb2dyYW1tZWQgZGl2aWRlciwgYW5kIGhhbmRpbmcgaXQg b24gd291bGQgZGl2aWRlIGJ5IGEKKwkgKiBkZW5vbWluYXRvciBzbWFsbCBlbm91Z2ggZm9yIHRo ZSBxdW90aWVudCB0byBsZWF2ZSB1NjQgLS0gd2hpY2gKKwkgKiBpcyBhIGRpdmlkZS1lcnJvciBl eGNlcHRpb24gb24geDg2LCBub3QgYSB2YWx1ZSBhIGNhbGxlciBjb3VsZAorCSAqIHJlamVjdC4K KwkgKi8KKwlmcmFjbiA9IChzMzIpZnJhY25fcmF3OworCWZyYWNkID0gKHU2NClmcmFjZF9yYXcg KyAxOworCWlmICgodTY0KWFicyhmcmFjbikgPj0gZnJhY2QpCisJCXJldHVybiAtRU5PREFUQTsK KworCSpkaXZuID0gc2l0OTUzMXhfZGl2bl9maXhlZChpbnRfcGFydCwgZnJhY24sIGZyYWNkKTsK KworCXJldHVybiAwOworfQorCisvKiBQTExCIGFuZCBQTExEIHJ1biB0aGVpciBWQ08gaW4gdGhl IGhpZ2ggYmFuZCwgUExMQSBhbmQgUExMQyBpbiB0aGUgbG93LiAqLworc3RhdGljIGJvb2wgc2l0 OTUzMXhfZnZjb19pbl9iYW5kKHU4IHBsbF9pZHgsIHU2NCBmdmNvKQoreworCWlmIChwbGxfaWR4 ID09IDEgfHwgcGxsX2lkeCA9PSAzKQorCQlyZXR1cm4gZnZjbyA+PSBTSVQ5NTMxWF9GVkNPX0hJ R0hCQU5EX01JTiAmJgorCQkgICAgICAgZnZjbyA8PSBTSVQ5NTMxWF9GVkNPX0hJR0hCQU5EX01B WDsKKwlyZXR1cm4gZnZjbyA+PSBTSVQ5NTMxWF9GVkNPX0xPV0JBTkRfTUlOICYmCisJICAgICAg IGZ2Y28gPD0gU0lUOTUzMVhfRlZDT19MT1dCQU5EX01BWDsKK30KKworLyoKKyAqIHNpdDk1MzF4 X2dldF9mdmNvIC0gcmVhZCBWQ08gZnJlcXVlbmN5IGZyb20gY2hpcCdzIERJVk4gcmVnaXN0ZXJz CisgKgorICogRnZjbyA9IEZyZWYgKiBESVZOLCB3aGVyZSBESVZOIGNvbWVzIGZyb20gc2l0OTUz MXhfZGl2bl9zdGF0aWMoKSBhbmQKKyAqIEZyZWYgPSB4dGFsX2ZyZXEgPDwgZG91Ymxlci4gIERJ Vk4gaXMgdGhlIHN0ZWFkeS1zdGF0ZSBGdmNvL0ZyZWYKKyAqIHRhcmdldCBwcm9ncmFtbWVkIGJ5 IHRoZSBOVk0gYmxvYiBhbmQgaXMgYXV0aG9yaXRhdGl2ZSBpbiBib3RoCisgKiBmcmVlLXJ1biBh bmQgc3luYyBtb2Rlcy4KKyAqCisgKiBSZXR1cm46IDAgd2l0aCAqZnZjbyBzZXQgb24gc3VjY2Vz cywgLUVOT0RBVEEgd2hlbiBESVZOIGlzIG5vdAorICogcHJvZ3JhbW1lZCAoZG9ybWFudCBQTEwp LCBvciB0aGUgcmVnaXN0ZXIgYWNjZXNzIGVycm9yLiAgQSBidXMKKyAqIGZhaWx1cmUgaXMgbmV2 ZXIgZm9sZGVkIGludG8gdGhlIC1FTk9EQVRBIGNhc2UsIHNvIGNhbGxlcnMgY2FuIGZhaWwKKyAq IGEgcmVxdWVzdCBpbnN0ZWFkIG9mIGFjdGluZyBvbiBhIGd1ZXNzZWQgcmF0ZS4KKyAqLworc3Rh dGljIGludCBzaXQ5NTMxeF9nZXRfZnZjbyhzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4 IHBsbF9pZHgsCisJCQkgICAgIHU2NCAqZnZjbykKK3sKKwlpbnQgZG91YmxlciwgcmM7CisJdTY0 IGZyZWY7CisJczY0IGRpdm47CisKKwlyYyA9IHNpdDk1MzF4X2Rpdm5fc3RhdGljKHNpdGRldiwg cGxsX2lkeCwgJmRpdm4pOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCWlmIChkaXZuIDw9IDAp CisJCXJldHVybiAtRU5PREFUQTsKKworCWRvdWJsZXIgPSBzaXQ5NTMxeF9pc194b19kb3VibGVy X2VuYWJsZWQoc2l0ZGV2KTsKKwlpZiAoZG91YmxlciA8IDApCisJCXJldHVybiBkb3VibGVyOwor CisJZnJlZiA9ICh1NjQpc2l0ZGV2LT54dGFsX2ZyZXEgPDwgZG91YmxlcjsKKworCS8qCisJICog Um91bmQgdG8gdGhlIG5lYXJlc3QgaGVydHo6IERJVk4gaXMgY2FycmllZCBpbiBmaXhlZCBwb2lu dCwgc28gYQorCSAqIGZyYWN0aW9uIHN1Y2ggYXMgMS82IGlzIGFscmVhZHkgZmxvb3JlZCBvbmNl LCBhbmQgZmxvb3JpbmcgdGhlCisJICogcHJvZHVjdCBhZ2FpbiByZWFkcyBhbiBleGFjdCA1IEdI eiBWQ08gYXMgNDk5OTk5OTk5OSBIeiAtLSB3aGljaAorCSAqIHRoZW4gcmVmdXNlcyBldmVyeSBy YXRlIHRoZSBWQ08gZGl2aWRlcyBleGFjdGx5LgorCSAqLworCSpmdmNvID0gbXVsX3U2NF91NjRf ZGl2X3U2NCgyICogZnJlZiwgKHU2NClkaXZuLCBTSVQ5NTMxWF9ESVZOX1NDQUxFKTsKKwkqZnZj byA9ICgqZnZjbyArIDEpIC8gMjsKKworCS8qCisJICogTm8gVkNPIG9mIHRoaXMgZmFtaWx5IHJ1 bnMgYmVsb3cgdGhlIGxvdyBiYW5kLCBzbyBhIHByb2R1Y3QgdW5kZXIKKwkgKiBpdCBpcyBub3Qg YSByYXRlOiBhIERJVk4gb2YgYSBjeWNsZSBvciBsZXNzLCBzYXksIHdoaWNoIHRoZSBjaGVjawor CSAqIGFib3ZlIGxldHMgdGhyb3VnaCBhbmQgd2hpY2ggYSBwcm9maWxlIHRoYXQgbmV2ZXIgcHJv Z3JhbW1lZCB0aGUKKwkgKiBkaXZpZGVyIGNhbiBsZWF2ZSBiZWhpbmQuICBDYWxsZXJzIHNjYWxl IDM0LWJpdCByZWdpc3RlciBmaWVsZHMgYnkKKwkgKiAxZTEyIC8gRnZjbyBvciBtb3JlLCBhbmQg Zm9yIGEgcmF0ZSBmYXIgZW5vdWdoIGJlbG93IHRoZSBiYW5kIHRoYXQKKwkgKiBxdW90aWVudCBs ZWF2ZXMgdTY0IC0tIGEgZGl2aWRlLWVycm9yIGV4Y2VwdGlvbiBvbiB4ODYsIG5vdCBhCisJICog dmFsdWUgdGhleSBjb3VsZCByZWplY3QuICBSZXBvcnQgdGhlIHVucHJvZ3JhbW1lZCBkaXZpZGVy IGluc3RlYWQuCisJICovCisJaWYgKCpmdmNvIDwgU0lUOTUzMVhfRlZDT19MT1dCQU5EX01JTikK KwkJcmV0dXJuIC1FTk9EQVRBOworCisJLyoKKwkgKiBBIHJhdGUgb3V0c2lkZSB0aGUgYmFuZCB0 aGUgUExMJ3MgVkNPIHJ1bnMgaW4gdXN1YWxseSBtZWFucworCSAqIEZyZWYgKiBESVZOIGlzIG5v dCB3aGF0IHRoaXMgUExMIHJ1bnMgYXQgLS0gYSBQTEwgZmVkIGZyb20gYW5vdGhlcgorCSAqIFBM TCByYXRoZXIgdGhhbiBmcm9tIHRoZSBYTywgZm9yIG9uZS4gIFRoZSByYXRlIGRlcml2ZWQgZnJv bSB0aGUKKwkgKiByZWdpc3RlcnMgaXMgc3RpbGwgdGhlIG9ubHkgZXN0aW1hdGUgdGhlcmUgaXMs IHNvIGEgcmVhZCByZXBvcnRzCisJICogd2hhdCBpdCBkZXJpdmVzOyBhIHNldCByZWZ1c2VzIHRv IHByb2dyYW0gYSBkaXZpZGVyIGFnYWluc3QgaXQKKwkgKiAoc2l0OTUzMXhfb3V0cHV0X2Rpdm9f Y2FsYygpKSwgc2luY2Ugc3Vic3RpdHV0aW5nIHRoZSBiYW5kIGVkZ2UKKwkgKiB3b3VsZCBwcm9n cmFtIGFnYWluc3QgYSByYXRlIG5vdGhpbmcgc3VwcG9ydHMgYW5kIHJlcG9ydCB0aGUKKwkgKiBy ZXN1bHQgYXMgZXhhY3QuICBTYXkgc28gb25jZSBwZXIgUExMLgorCSAqLworCWlmICghc2l0OTUz MXhfZnZjb19pbl9iYW5kKHBsbF9pZHgsICpmdmNvKSAmJgorCSAgICAhKHNpdGRldi0+ZnZjb19i YW5kX3dhcm5lZCAmIEJJVChwbGxfaWR4KSkpIHsKKwkJc2l0ZGV2LT5mdmNvX2JhbmRfd2FybmVk IHw9IEJJVChwbGxfaWR4KTsKKwkJZGV2X3dhcm4oc2l0ZGV2LT5kZXYsCisJCQkgIlBMTCVjOiBG cmVmICogRElWTiA9ICVsbHUgSHogaXMgb3V0c2lkZSBpdHMgVkNPIGJhbmRcbiIsCisJCQkgJ0En ICsgcGxsX2lkeCwgKmZ2Y28pOworCX0KKworCXJldHVybiAwOworfQorCisvKiBMYXRjaCBhIGNo YW5nZSB0byBhIFBMTCBwYWdlIHdpdGggYSBzbWFsbCB1cGRhdGUuICovCitzdGF0aWMgaW50IHNp dDk1MzF4X3BsbF9zbWFsbF91cGRhdGUoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LCB1OCBw bGxfaWR4KQoreworCXJldHVybiBzaXQ5NTMxeF93cml0ZV9wbGxfdTgoc2l0ZGV2LCBwbGxfaWR4 LAorCQkJCSAgICAgU0lUOTUzMVhfUExMX1JFR19TTUFMTF9VUERBVEUsCisJCQkJICAgICBTSVQ5 NTMxWF9TTUFMTF9VUERBVEVfQ01EKTsKK30KKworLyoKKyAqIHNpdDk1MzF4X291dHB1dF9waGFz ZV9mbHVzaCAtIGZsdXNoIHRoZSBvdXRwdXQgcGhhc2Ugb2YgYSBQTEwKKyAqCisgKiBGaXJlcyB0 aGUgY2hpcCdzIG9uLWRlbWFuZCBwaGFzZS1mbHVzaCAoUEhGTCkgc28gZXZlcnkgb3V0cHV0IGRp dmlkZXIKKyAqIG9mIEBwbGxfaWR4IHJlc3RhcnRzIGFsaWduZWQgdG8gdGhlIFBMTCBwaGFzZS4g IFdpdGhvdXQgaXQgYSByZXdyaXR0ZW4KKyAqIERJVk8ga2VlcHMgY291bnRpbmcgZnJvbSBhbiBh cmJpdHJhcnkgcG9pbnQgYW5kIHRoZSBvdXRwdXQgZWRnZSBsYW5kcworICogd2l0aCBhIHBlcnNp c3RlbnQgb2Zmc2V0IGFnYWluc3QgdGhlIHRyYWNrZWQgcmVmZXJlbmNlIChvbmx5IGEgcG93ZXIK KyAqIGN5Y2xlIHJlYWxpZ25lZCBpdCkuCisgKgorICogVGhlIHNlcXVlbmNlIG1pcnJvcnMgdGhl IGRvY3VtZW50ZWQgcHJvY2VkdXJlOiBhcm0gdGhlIG9uLWRlbWFuZCBQSEZMIGFuZAorICogbGF0 Y2ggaXQgd2l0aCB0aGUgUExMLXBhZ2Ugc21hbGwtY2hhbmdlIHVwZGF0ZSwgdGhlbiBzZWxlY3Qg dGhlCisgKiBpbi1yZWdpc3RlciBwaGFzZSB0cmlnZ2VyIG9uIFBhZ2UgMCBhbmQgcHVsc2UgaXQu ICBUaGUgUGFnZSAwIHRyaWdnZXIKKyAqIHJlZ2lzdGVyIGlzIHRvdWNoZWQgcmVhZC1tb2RpZnkt d3JpdGUgc28gdGhlIHVucmVsYXRlZCBPRWIgYml0cyBhcmUKKyAqIHByZXNlcnZlZC4KKyAqCisg KiBBIFBMTCB0aGUgbG9hZGVkIGNvbmZpZ3VyYXRpb24gYnVpbGRzIHdpdGhvdXQgdGhlIHBoYXNl LWZsdXNoIGZlYXR1cmUKKyAqIChQTEwgcGFnZSAweDQ3IGJpdCA3IGNsZWFyKSBoYXMgbm90aGlu ZyB0byBmaXJlOyBpdCBpcyByZXN0YXJ0ZWQKKyAqIGluc3RlYWQsIHdoaWNoIHJlc3RhcnRzIGl0 cyBvdXRwdXQgZGl2aWRlcnMgZnJvbSB0aGUgUExMIHBoYXNlLiAgVGhhdAorICogaXMgd2hhdCBT aVRpbWUncyBEZWx5X3Byb2dyYW1fb3V0cHV0LnB5IGRvZXMgZm9yIHN1Y2ggYSBQTEwuCisgKgor ICogQ2FsbGVyIG11c3QgaG9sZCBzaXRkZXYtPm11bHRpb3BfbG9jay4KKyAqLworc3RhdGljIGlu dCBzaXQ5NTMxeF9vdXRwdXRfcGhhc2VfZmx1c2goc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2 LCB1OCBwbGxfaWR4KQoreworCXU4IGN0cmwsIG9yaWcsIHBoZmwsIGFybWVkX21hc2sgPSAwLCBw YXJrZWQgPSAwLCBpOworCWludCByYywgcmV0OworCisJcmMgPSBzaXQ5NTMxeF9yZWFkX3BsbF91 OChzaXRkZXYsIHBsbF9pZHgsIFNJVDk1MzFYX1BMTF9SRUdfQ09ORklHNDcsCisJCQkJICAmcGhm bCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJaWYgKCEocGhmbCAmIFNJVDk1MzFYX1BMTF9D T05GSUc0N19QSEZMX0VOKSkKKwkJcmV0dXJuIHNpdDk1MzF4X3dyaXRlX3BsbF91OChzaXRkZXYs IHBsbF9pZHgsCisJCQkJCSAgICAgU0lUOTUzMVhfUExMX1JFR19ESVJFQ1RJVkVTLAorCQkJCQkg ICAgIFNJVDk1MzFYX1BMTF9ESVJFQ1RJVkVfUkVTVEFSVCk7CisKKwkvKgorCSAqIFRoZSB0cmln Z2VyIGJlbG93IGlzIGNoaXAtZ2xvYmFsOiBldmVyeSBQTEwgd2hvc2Ugb24tZGVtYW5kIGZsdXNo CisJICogaXMgYXJtZWQgYW5zd2VycyBpdC4gIE5vdGUgd2hpY2ggb25lcyB0aGUgbG9hZGVkIHBy b2ZpbGUgYXJtcyAtLQorCSAqIHRoaXMgb25lIHNvIGl0cyBzZXR0aW5nIGNhbiBiZSBwdXQgYmFj aywgdGhlIG90aGVycyBzbyB0aGV5IGNhbgorCSAqIGJlIHBhcmtlZCBmb3IgdGhlIHB1bHNlIGFu ZCBkbyBub3QgcmVhbGlnbiBvdXRwdXRzIG5vYm9keSBhc2tlZAorCSAqIHRvIG1vdmUuCisJICov CisJZm9yIChpID0gMDsgaSA8IFNJVDk1MzFYX05VTV9QTExTOyBpKyspIHsKKwkJcmMgPSBzaXQ5 NTMxeF9yZWFkX3BsbF91OChzaXRkZXYsIGksIFNJVDk1MzFYX1BMTF9SRUdfUEhGTF9DVFJMLAor CQkJCQkgICZwaGZsKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCQlpZiAocGhmbCAmIFNJ VDk1MzFYX1BMTF9QSEZMX09OX0RFTUFORF9FTikKKwkJCWFybWVkX21hc2sgfD0gQklUKGkpOwor CX0KKworCWZvciAoaSA9IDA7IGkgPCBTSVQ5NTMxWF9OVU1fUExMUzsgaSsrKSB7CisJCWlmIChp ID09IHBsbF9pZHggfHwgIShhcm1lZF9tYXNrICYgQklUKGkpKSkKKwkJCWNvbnRpbnVlOworCQkv KgorCQkgKiBBIGNsZWFyIHdob3NlIHdyaXRlIHJlcG9ydGVkIGFuIGVycm9yIG1heSBzdGlsbCBo YXZlCisJCSAqIGxhbmRlZCwgbGF0Y2hlZCBvciBub3Q6IHB1dCBpdCBiYWNrIGVpdGhlciB3YXku CisJCSAqLworCQlwYXJrZWQgfD0gQklUKGkpOworCQlyYyA9IHNpdDk1MzF4X3VwZGF0ZV9wbGxf dTgoc2l0ZGV2LCBpLAorCQkJCQkgICAgU0lUOTUzMVhfUExMX1JFR19QSEZMX0NUUkwsCisJCQkJ CSAgICBTSVQ5NTMxWF9QTExfUEhGTF9PTl9ERU1BTkRfRU4sIDApOworCQlpZiAocmMpCisJCQln b3RvIHVucGFyazsKKwkJcmMgPSBzaXQ5NTMxeF9wbGxfc21hbGxfdXBkYXRlKHNpdGRldiwgaSk7 CisJCWlmIChyYykKKwkJCWdvdG8gdW5wYXJrOworCX0KKworCS8qCisJICogQXJtIHRoZSBvbi1k ZW1hbmQgcGhhc2UtZmx1c2ggb24gdGhlIFBMTCBwYWdlLiAgQW4gYXJtIHdob3NlIHdyaXRlCisJ ICogZmFpbGVkIG1heSBoYXZlIGxhbmRlZCB0b28sIHNvIGl0IGdvZXMgdGhyb3VnaCB0aGUgZGlz YXJtIGJlbG93LgorCSAqLworCXJjID0gc2l0OTUzMXhfdXBkYXRlX3BsbF91OChzaXRkZXYsIHBs bF9pZHgsCisJCQkJICAgIFNJVDk1MzFYX1BMTF9SRUdfUEhGTF9DVFJMLAorCQkJCSAgICBTSVQ5 NTMxWF9QTExfUEhGTF9PTl9ERU1BTkRfRU4sCisJCQkJICAgIFNJVDk1MzFYX1BMTF9QSEZMX09O X0RFTUFORF9FTik7CisJaWYgKHJjKQorCQlnb3RvIGRpc2FybTsKKworCS8qCisJICogTGF0Y2gg aXQgd2l0aCB0aGUgUExMIHNtYWxsLWNoYW5nZSB1cGRhdGUuICBXcml0dGVuIHdob2xlLCBsaWtl CisJICogZXZlcnkgb3RoZXIgaXNzdWUgb2YgdGhpcyBkaXJlY3RpdmU6IHRoZSByZWdpc3RlciBp cyBhIGNvbW1hbmQKKwkgKiByZWdpc3RlciwgYW5kIGEgcmVhZC1tb2RpZnktd3JpdGUgc2tpcHMg dGhlIHdyaXRlIGVudGlyZWx5IHdoZW4KKwkgKiB0aGUgYml0IHN0aWxsIHJlYWRzIGJhY2sgc2V0 IGZyb20gdGhlIHByZXZpb3VzIGNvbW1hbmQuCisJICovCisJcmMgPSBzaXQ5NTMxeF9wbGxfc21h bGxfdXBkYXRlKHNpdGRldiwgcGxsX2lkeCk7CisJaWYgKHJjKQorCQlnb3RvIGRpc2FybTsKKwor CS8qCisJICogU2VsZWN0IHRoZSBpbi1yZWdpc3RlciBwaGFzZSB0cmlnZ2VyLCBwcmVzZXJ2aW5n IHRoZSBPRWIgYml0cy4KKwkgKiBSZW1lbWJlciB0aGUgb3JpZ2luYWwgcmVnaXN0ZXIgdmFsdWUg KHdpdGggdGhlIHRyaWdnZXIgZGUtYXNzZXJ0ZWQpCisJICogc28gdGhlIHRyaWdnZXItc291cmNl IHNlbGVjdCBjYW4gYmUgcmVzdG9yZWQgb25jZSB0aGUgcHVsc2UgaGFzCisJICogZmlyZWQuCisJ ICovCisJcmMgPSBzaXQ5NTMxeF9yZWFkX3U4KHNpdGRldiwgU0lUOTUzMVhfUkVHX0dQSU9fRlVO Q19DVFJMMSwgJmN0cmwpOworCWlmIChyYykKKwkJZ290byBkaXNhcm07CisKKwlvcmlnID0gY3Ry bCAmIH5TSVQ5NTMxWF9ESVZPX1BIQVNFX1RSSUc7CisJY3RybCA9IG9yaWcgfCBTSVQ5NTMxWF9E SVZPX1BIQVNFX1NFTF9SRUc7CisJcmMgPSBzaXQ5NTMxeF93cml0ZV91OChzaXRkZXYsIFNJVDk1 MzFYX1JFR19HUElPX0ZVTkNfQ1RSTDEsIGN0cmwpOworCWlmIChyYykKKwkJZ290byByZXN0b3Jl OworCisJLyoKKwkgKiBQdWxzZSB0aGUgcGhhc2UgdHJpZ2dlci4gIE5vIGV4cGxpY2l0IGRlbGF5 IGlzIG5lZWRlZCBiZXR3ZWVuIHRoZQorCSAqIHNldCBhbmQgY2xlYXIgd3JpdGVzOiBlYWNoIEky QyB0cmFuc2FjdGlvbiB0YWtlcyBmYXIgbG9uZ2VyIHRoYW4KKwkgKiBhbnkgbWluaW11bSBwdWxz ZSB3aWR0aC4KKwkgKi8KKwlyYyA9IHNpdDk1MzF4X3dyaXRlX3U4KHNpdGRldiwgU0lUOTUzMVhf UkVHX0dQSU9fRlVOQ19DVFJMMSwKKwkJCSAgICAgICBjdHJsIHwgU0lUOTUzMVhfRElWT19QSEFT RV9UUklHKTsKKworcmVzdG9yZToKKwkvKgorCSAqIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHRyaWdn ZXItc291cmNlIHNlbGVjdC4gIFRoZSBwdWxzZSBhYm92ZSBoYXMKKwkgKiBhbHJlYWR5IGxhdGNo ZWQgdGhlIGZsdXNoLCBzbyBhIG9uZS1zaG90IGZsdXNoIG11c3Qgbm90IGxlYXZlIHRoZQorCSAq IHBoYXNlIHRyaWdnZXIgcGVybWFuZW50bHkgcGlubmVkIHRvIHRoZSBpbi1yZWdpc3RlciBzb3Vy Y2UuICBUaGlzCisJICogcnVucyBldmVuIHdoZW4gdGhlIHB1bHNlIHdyaXRlIGZhaWxlZCwgYW5k IHdoZW4gdGhlIHNlbGVjdCB3cml0ZQorCSAqIGl0c2VsZiByZXBvcnRlZCBhIGZhaWx1cmUsIHNp bmNlIHRoZSB0cmFuc2ZlciBtYXkgaGF2ZSByZWFjaGVkCisJICogdGhlIHBhcnQgYWxsIHRoZSBz YW1lOyBvdGhlcndpc2UgYSBmYWlsZWQgZmx1c2ggd291bGQga2VlcCBhCisJICogaGFyZHdhcmUg dHJpZ2dlciBzb3VyY2UgaGlqYWNrZWQuICBUaGUgcmVzdG9yZSBlcnJvciBpcyBvbmx5CisJICog c3VyZmFjZWQgd2hlbiBpdCB3b3VsZCBub3QgbWFzayB0aGUgZWFybGllciBmYWlsdXJlLgorCSAq LworCXJldCA9IHNpdDk1MzF4X3dyaXRlX3U4KHNpdGRldiwgU0lUOTUzMVhfUkVHX0dQSU9fRlVO Q19DVFJMMSwgb3JpZyk7CisJaWYgKHJldCAmJiAhcmMpCisJCXJjID0gcmV0OworCitkaXNhcm06 CisJLyoKKwkgKiBQdXQgdGhlIG9uLWRlbWFuZCBmbHVzaCBlbmFibGUgYmFjayBhcyB0aGUgcHJv ZmlsZSBoYWQgaXQuICBPbmUgdGhlCisJICogcHJvZmlsZSBsZWZ0IGNsZWFyIG11c3Qgbm90IHN0 YXkgYXJtZWQ6IGEgbGF0ZXIgYXNzZXJ0aW9uIG9mIHRoZQorCSAqIHJlc3RvcmVkIHRyaWdnZXIg c291cmNlIHdvdWxkIHJlLWZsdXNoIGV2ZXJ5IG91dHB1dCBkaXZpZGVyIG9mIHRoaXMKKwkgKiBQ TEwuICBPbmUgdGhlIHByb2ZpbGUgYXJtZWQgLS0gYSBib2FyZCByZWFsaWduaW5nIGZyb20gYSBH UElPLCBzYXkKKwkgKiAtLSBtdXN0IG5vdCBiZSBzd2l0Y2hlZCBvZmYgYnkgYW4gdW5yZWxhdGVk IHJhdGUgY2hhbmdlLgorCSAqLworCWlmICghKGFybWVkX21hc2sgJiBCSVQocGxsX2lkeCkpKSB7 CisJCXJldCA9IHNpdDk1MzF4X3VwZGF0ZV9wbGxfdTgoc2l0ZGV2LCBwbGxfaWR4LAorCQkJCQkg ICAgIFNJVDk1MzFYX1BMTF9SRUdfUEhGTF9DVFJMLAorCQkJCQkgICAgIFNJVDk1MzFYX1BMTF9Q SEZMX09OX0RFTUFORF9FTiwgMCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gc2l0OTUzMXhfcGxs X3NtYWxsX3VwZGF0ZShzaXRkZXYsIHBsbF9pZHgpOworCQlpZiAocmV0ICYmICFyYykKKwkJCXJj ID0gcmV0OworCX0KKwordW5wYXJrOgorCWZvciAoaSA9IDA7IGkgPCBTSVQ5NTMxWF9OVU1fUExM UzsgaSsrKSB7CisJCWlmICghKHBhcmtlZCAmIEJJVChpKSkpCisJCQljb250aW51ZTsKKwkJcmV0 ID0gc2l0OTUzMXhfdXBkYXRlX3BsbF91OChzaXRkZXYsIGksCisJCQkJCSAgICAgU0lUOTUzMVhf UExMX1JFR19QSEZMX0NUUkwsCisJCQkJCSAgICAgU0lUOTUzMVhfUExMX1BIRkxfT05fREVNQU5E X0VOLAorCQkJCQkgICAgIFNJVDk1MzFYX1BMTF9QSEZMX09OX0RFTUFORF9FTik7CisJCWlmICgh cmV0KQorCQkJcmV0ID0gc2l0OTUzMXhfcGxsX3NtYWxsX3VwZGF0ZShzaXRkZXYsIGkpOworCQlp ZiAocmV0ICYmICFyYykKKwkJCXJjID0gcmV0OworCX0KKworCXJldHVybiByYzsKK30KKworLyoK KyAqIHNpdDk1MzF4X291dHB1dF9kaXZvX2NhbGMgLSB3b3JrIG91dCBhbiBvdXRwdXQncyBkaXZp ZGVyIGFuZCBpdHMgVkNPCisgKgorICogU2VwYXJhdGVkIGZyb20gdGhlIHdyaXRlIHNvIGEgY2Fs bGVyIHRoYXQgcHJvZ3JhbXMgbW9yZSB0aGFuIHRoZQorICogZGl2aWRlciBpbiBvbmUgc2VxdWVu Y2UgY2FuIGNvbXB1dGUgdGhlIHZhbHVlIGJlZm9yZSBpdCBlbnRlcnMgdGhlCisgKiBwcm9ncmFt bWluZyBzdGF0ZS4KKyAqLworc3RhdGljIGludCBzaXQ5NTMxeF9vdXRwdXRfZGl2b19jYWxjKHN0 cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggb3V0X2lkeCwKKwkJCQkgICAgIHU4IHBsbF9p ZHgsIHU2NCBmcmVxdWVuY3ksIHU2NCAqZnZjb19vdXQsCisJCQkJICAgICB1NjQgKmRpdm9fb3V0 KQoreworCWNvbnN0IHN0cnVjdCBzaXQ5NTMxeF9jaGlwX2luZm8gKmluZm8gPSBzaXRkZXYtPmlu Zm87CisJdTY0IGZ2Y28sIGRpdm87CisJaW50IHJjOworCisJaWYgKG91dF9pZHggPj0gaW5mby0+ bnVtX291dHB1dHMgfHwgcGxsX2lkeCA+PSBTSVQ5NTMxWF9OVU1fUExMUykKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlpZiAoIWZyZXF1ZW5jeSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAq IFRoZSBjb3JlIHZhbGlkYXRlcyB0aGUgcmVxdWVzdCBhZ2FpbnN0IHRoZSBzdXBwb3J0ZWQgcmFu Z2VzIHdpdGgKKwkgKiB0aGUgdmFsdWUgbmFycm93ZWQgdG8gdTMyIGJ1dCBoYW5kcyB0aGUgZnVs bCB1NjQgZG93biwgc28gYSB2YWx1ZQorCSAqIGxpa2UgVTMyX01BWCArIDEgSHogdmFsaWRhdGVz IGFzIDEgSHouICBSZWplY3QgYW55dGhpbmcgdGhhdCBkb2VzCisJICogbm90IGZpdCB0aGUgbmFy cm93ZWQgd2lkdGggdGhlIHZhbGlkYXRpb24gYWN0dWFsbHkgY292ZXJlZC4KKwkgKi8KKwlpZiAo ZnJlcXVlbmN5ID4gVTMyX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIHNpdDk1 MzF4X2dldF9mdmNvKCkgcmV0dXJucyB0aGUgcmVnaXN0ZXItZGVyaXZlZCByYXRlLCBzbyBhCisJ ICogZnJlcXVlbmN5IGdldCBhbmQgYSBmcmVxdWVuY3kgc2V0IGRpdmlkZSB0aGUgc2FtZSBudW1i ZXIuICBBIFZDTworCSAqIHRoYXQgY2Fubm90IGJlIHJlYWQgZmFpbHMgdGhlIHJlcXVlc3Q6IHBy b2dyYW1taW5nIGEgZGl2aWRlciBmcm9tIGEKKwkgKiBndWVzc2VkIHJhdGUgd291bGQgcHV0IHRo ZSBvdXRwdXQgZmFyIGZyb20gd2hhdCB3YXMgYXNrZWQgZm9yCisJICogd2hpbGUgcmVwb3J0aW5n IHN1Y2Nlc3MuCisJICovCisJcmMgPSBzaXQ5NTMxeF9nZXRfZnZjbyhzaXRkZXYsIHBsbF9pZHgs ICZmdmNvKTsKKwlpZiAocmMpCisJCXJldHVybiByYyA9PSAtRU5PREFUQSA/IC1FTk9ERVYgOiBy YzsKKworCS8qCisJICogRnJlZiAqIERJVk4gb3V0c2lkZSB0aGUgVkNPIGJhbmQgaXMgbm90IHdo YXQgdGhlIFBMTCBydW5zIGF0LCBhbmQKKwkgKiBzaXQ5NTMxeF9nZXRfZnZjbygpIGhhcyBzYWlk IHNvLiAgQSBkaXZpZGVyIGNvbXB1dGVkIGFnYWluc3QgaXQKKwkgKiB3b3VsZCBwdXQgdGhlIG91 dHB1dCBhdCBzb21lIG90aGVyIHJhdGUgd2hpbGUgdGhlIGV4YWN0bmVzcyBjaGVjaworCSAqIGJl bG93IHBhc3NlcyBhbmQgdGhlIHJlYWQtYmFjaywgZGl2aWRpbmcgdGhlIHNhbWUgbnVtYmVyLCBj b25maXJtcworCSAqIHRoZSByZXF1ZXN0LiAgUmVmdXNlIHRoZSBzZXQgaW5zdGVhZC4KKwkgKi8K KwlpZiAoIXNpdDk1MzF4X2Z2Y29faW5fYmFuZChwbGxfaWR4LCBmdmNvKSkgeworCQlkZXZfZGJn KHNpdGRldi0+ZGV2LAorCQkJIm91dCV1OiBQTEwlYyBGdmNvICVsbHUgSHogaXMgb3V0c2lkZSBp dHMgVkNPIGJhbmQsIHJhdGUgbm90IHNldHRhYmxlXG4iLAorCQkJb3V0X2lkeCwgJ0EnICsgcGxs X2lkeCwgZnZjbyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogUm91bmQgdG8g bmVhcmVzdCByYXRoZXIgdGhhbiBkb3duOiBmbG9vcmluZyBwaWNrcyB0aGUgd29yc2Ugb2YgdGhl CisJICogdHdvIGFkamFjZW50IGRpdmlkZXJzIHdoZW5ldmVyIHRoZSByZW1haW5kZXIgaXMgYWJv dmUgaGFsZiB0aGUKKwkgKiByZXF1ZXN0LgorCSAqLworCWRpdm8gPSBkaXY2NF91NjQoZnZjbyAr IGZyZXF1ZW5jeSAvIDIsIGZyZXF1ZW5jeSk7CisJaWYgKCFkaXZvKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCS8qCisJICogRElWTyBpcyBhIDM0LWJpdCBmaWVsZDsgcmVmdXNlIGEgd2lkZXIgZGl2 aWRlciByYXRoZXIgdGhhbgorCSAqIHRydW5jYXRlIGl0LgorCSAqLworCWlmIChkaXZvID4gU0lU OTUzMVhfRElWT19NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBUaGUgb3V0cHV0 IGRpdmlkZXIgaXMgYW4gaW50ZWdlciBkaXZpZGVyIG9mIHRoZSBWQ08sIHNvIHRoZSBvbmx5CisJ ICogcmF0ZXMgdGhlIHBhcnQgY2FuIG1ha2UgYXJlIEZ2Y28vTi4gIEFuIG91dHB1dCBwaW4gdGhh dCBsaXN0cyBubworCSAqIHN1cHBvcnRlZCBmcmVxdWVuY2llcyBhZHZlcnRpc2VzIGEgY29udGlu dW91cyByYW5nZSwgYmVjYXVzZSB0aGUKKwkgKiBkaXZpc29ycyBjYW5ub3QgYmUgZW51bWVyYXRl ZCBhaGVhZCBvZiBhIGtub3duIEZ2Y28sIHNvIGEgcmVxdWVzdAorCSAqIGZvciBhIHJhdGUgYmV0 d2VlbiB0d28gb2YgdGhlbSBhcnJpdmVzIGhlcmUuICBSZWZ1c2UgaXQ6IHJ1bm5pbmcKKwkgKiB0 aGUgb3V0cHV0IGF0IHRoZSBuZWFyZXN0IGRpdmlkZXIgaW5zdGVhZCBhbmQgcmVwb3J0aW5nIHN1 Y2Nlc3MKKwkgKiB3b3VsZCBsZWF2ZSB0aGUgcGluIHNldmVyYWwgcGVyY2VudCBvZmYgd2hhdCB3 YXMgYXNrZWQgZm9yIHdpdGgKKwkgKiBub3RoaW5nIHNheWluZyBzby4KKwkgKi8KKwlpZiAoZGl2 NjRfdTY0KGZ2Y28sIGRpdm8pICE9IGZyZXF1ZW5jeSkgeworCQlkZXZfZGJnKHNpdGRldi0+ZGV2 LAorCQkJIm91dCV1OiAlbGx1IEh6IGlzIG5vdCBGdmNvL04gKEZ2Y289JWxsdSwgbmVhcmVzdCAl bGx1IEh6KVxuIiwKKwkJCW91dF9pZHgsIGZyZXF1ZW5jeSwgZnZjbywgZGl2NjRfdTY0KGZ2Y28s IGRpdm8pKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhzaXRkZXYtPmRldiwK KwkJIm91dCV1OiBGdmNvPSVsbHUgZnJlcT0lbGx1IERJVk89JWxsdSAoZWZmZWN0aXZlICVsbHUg SHopXG4iLAorCQlvdXRfaWR4LCBmdmNvLCBmcmVxdWVuY3ksIGRpdm8sIGRpdjY0X3U2NChmdmNv LCBkaXZvKSk7CisKKwkqZnZjb19vdXQgPSBmdmNvOworCSpkaXZvX291dCA9IGRpdm87CisKKwly ZXR1cm4gMDsKK30KKworLyoKKyAqIHNpdDk1MzF4X291dHB1dF9kaXZvX3dyaXRlIC0gd3JpdGUg dGhlIGZpdmUgRElWTyBieXRlcyBvZiBhbiBvdXRwdXQKKyAqCisgKiBUaGUgY2FsbGVyIG11c3Qg YWxyZWFkeSBiZSBpbiB0aGUgcHJvZ3JhbW1pbmcgc3RhdGUuICBCeXRlcyB3cml0dGVuCisgKiBi ZWZvcmUgYSBmYWlsdXJlIGFyZSBwdXQgYmFjaywgc28gdGhlIG91dHB1dCBrZWVwcyB0aGUgZGl2 aWRlciBpdCBoYWQKKyAqIHJhdGhlciB0aGFuIGEgbWl4dHVyZSBvZiB0aGUgdHdvLgorICovCitz dGF0aWMgaW50IHNpdDk1MzF4X291dHB1dF9kaXZvX3dyaXRlKHN0cnVjdCBzaXQ5NTMxeF9kZXYg KnNpdGRldiwgdTggb3V0X2lkeCwKKwkJCQkgICAgICB1NjQgZGl2bykKK3sKKwl1OCBzbG90LCBw YWdlLCBiYXNlX3JlZywgZGl2b19ieXRlc1s1XSwgb2xkX2J5dGVzWzVdLCBtc2Jfb2xkOworCWNv bnN0IHN0cnVjdCBzaXQ5NTMxeF9jaGlwX2luZm8gKmluZm8gPSBzaXRkZXYtPmluZm87CisJaW50 IHJjLCBqLCByYl9yYzsKKwl1OCB3cml0dGVuID0gMDsKKworCS8qIE1hcCBvdXRwdXQgaW5kZXgg dG8gcGh5c2ljYWwgc2xvdCAqLworCXNsb3QgPSBpbmZvLT5jbGtvdXRfbWFwW291dF9pZHhdOwor CisJLyogRGV0ZXJtaW5lIHBhZ2UgYW5kIHBlci1wYWdlIHNsb3QgcmVnaXN0ZXIgKi8KKwlpZiAo c2xvdCA+IFNJVDk1MzFYX1BBR0VfT1VUU1lTMF9TTE9UX01BWCkKKwkJcGFnZSA9IFNJVDk1MzFY X1BBR0VfT1VUU1lTMTsKKwllbHNlCisJCXBhZ2UgPSBTSVQ5NTMxWF9QQUdFX09VVFNZUzA7CisJ YmFzZV9yZWcgPSBjbGtvdXRfb2RyX2Rpdm5fYmFzZVtzbG90ICUgNl07CisKKwlkaXZvX2J5dGVz WzBdID0gKGRpdm8gPj4gIDApICYgMHhGRjsKKwlkaXZvX2J5dGVzWzFdID0gKGRpdm8gPj4gIDgp ICYgMHhGRjsKKwlkaXZvX2J5dGVzWzJdID0gKGRpdm8gPj4gMTYpICYgMHhGRjsKKwlkaXZvX2J5 dGVzWzNdID0gKGRpdm8gPj4gMjQpICYgMHhGRjsKKwlkaXZvX2J5dGVzWzRdID0gKGRpdm8gPj4g MzIpICYgMHgwMzsgIC8qIG9ubHkgYml0cyBbMTowXSAqLworCisJZm9yIChqID0gMDsgaiA8IDU7 IGorKykgeworCQlyYyA9IHNpdDk1MzF4X3JlYWRfdTgoc2l0ZGV2LAorCQkJCSAgICAgIFNJVDk1 MzFYX1JFRyhwYWdlLCBiYXNlX3JlZyAtIGopLAorCQkJCSAgICAgICZvbGRfYnl0ZXNbal0pOwor CQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJfQorCisJbXNiX29sZCA9IG9sZF9ieXRlc1s0XTsK KwlkaXZvX2J5dGVzWzRdIHw9IG1zYl9vbGQgJiAweEZDOworCisJZm9yIChqID0gMDsgaiA8IDU7 IGorKykgeworCQlyYyA9IHNpdDk1MzF4X3dyaXRlX3U4KHNpdGRldiwKKwkJCQkgICAgICAgU0lU OTUzMVhfUkVHKHBhZ2UsIGJhc2VfcmVnIC0gaiksCisJCQkJICAgICAgIGRpdm9fYnl0ZXNbal0p OworCQlpZiAocmMpCisJCQlnb3RvIHJvbGxiYWNrOworCQl3cml0dGVuKys7CisJfQorCisJcmV0 dXJuIDA7CisKK3JvbGxiYWNrOgorCS8qCisJICogVGhlIGJ5dGUgd2hvc2Ugd3JpdGUgcmVwb3J0 ZWQgdGhlIGVycm9yIG1heSBzdGlsbCBoYXZlIHJlYWNoZWQKKwkgKiB0aGUgcGFydCwgc28gaXQg aXMgcHV0IGJhY2sgYWxvbmcgd2l0aCB0aGUgb25lcyB0aGF0IGRpZC4KKwkgKi8KKwlmb3IgKGog PSAwOyBqIDw9IHdyaXR0ZW4gJiYgaiA8IDU7IGorKykgeworCQlyYl9yYyA9IHNpdDk1MzF4X3dy aXRlX3U4KHNpdGRldiwKKwkJCQkJICBTSVQ5NTMxWF9SRUcocGFnZSwgYmFzZV9yZWcgLSBqKSwK KwkJCQkJICBvbGRfYnl0ZXNbal0pOworCQlpZiAocmJfcmMpIHsKKwkJCWRldl9lcnIoc2l0ZGV2 LT5kZXYsCisJCQkJIm91dCV1OiBESVZPIHJvbGxiYWNrIGZhaWxlZCAoJWQpLCB0aGUgZGl2aWRl ciBpcyBwYXJ0IG9sZCBhbmQgcGFydCBuZXdcbiIsCisJCQkJb3V0X2lkeCwgcmJfcmMpOworCQkJ aWYgKCFyYykKKwkJCQlyYyA9IHJiX3JjOworCQl9CisJfQorCisJcmV0dXJuIHJjOworfQorCisv KgorICogUmVhZCBhbiBvdXRwdXQncyBkaXZpZGVyIGJhY2sgZnJvbSB0aGUgZGV2aWNlLgorICoK KyAqIFJldHVybjogMCB3aXRoICpkaXZvIHNldCwgLUVOT0RBVEEgd2hlbiB0aGUgZGl2aWRlciBp cyBub3QgcHJvZ3JhbW1lZCwKKyAqIG9yIHRoZSByZWdpc3RlciBhY2Nlc3MgZXJyb3IKKyAqLwor c3RhdGljIGludCBzaXQ5NTMxeF9vdXRwdXRfZGl2b19yZWFkKHN0cnVjdCBzaXQ5NTMxeF9kZXYg KnNpdGRldiwgdTggb3V0X2lkeCwKKwkJCQkgICAgIHU2NCAqZGl2bykKK3sKKwl1OCBzbG90LCBw YWdlLCBiYXNlX3JlZywgdjsKKwlpbnQgcmMsIGo7CisKKwlzbG90ID0gc2l0ZGV2LT5pbmZvLT5j bGtvdXRfbWFwW291dF9pZHhdOworCWlmIChzbG90ID4gU0lUOTUzMVhfUEFHRV9PVVRTWVMwX1NM T1RfTUFYKQorCQlwYWdlID0gU0lUOTUzMVhfUEFHRV9PVVRTWVMxOworCWVsc2UKKwkJcGFnZSA9 IFNJVDk1MzFYX1BBR0VfT1VUU1lTMDsKKwliYXNlX3JlZyA9IGNsa291dF9vZHJfZGl2bl9iYXNl W3Nsb3QgJSA2XTsKKworCSpkaXZvID0gMDsKKwlmb3IgKGogPSA0OyBqID49IDA7IGotLSkgewor CQlyYyA9IHNpdDk1MzF4X3JlYWRfdTgoc2l0ZGV2LAorCQkJCSAgICAgIFNJVDk1MzFYX1JFRyhw YWdlLCBiYXNlX3JlZyAtIGopLCAmdik7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwkJaWYg KGogPT0gNCkKKwkJCXYgJj0gMHgwMzsKKwkJKmRpdm8gPSAoKmRpdm8gPDwgOCkgfCB2OworCX0K KworCXJldHVybiAqZGl2byA/IDAgOiAtRU5PREFUQTsKK30KKworaW50IHNpdDk1MzF4X291dHB1 dF9mcmVxX3NldChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4IG91dF9pZHgsCisJCQkg ICAgIHU4IHBsbF9pZHgsIHU2NCBmcmVxdWVuY3kpCit7CisJdTY0IGZ2Y28sIGRpdm87CisJaW50 IHJjLCByZXQ7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7 CisKKwlyYyA9IHNpdDk1MzF4X291dHB1dF9kaXZvX2NhbGMoc2l0ZGV2LCBvdXRfaWR4LCBwbGxf aWR4LCBmcmVxdWVuY3ksCisJCQkJICAgICAgICZmdmNvLCAmZGl2byk7CisJaWYgKHJjKQorCQly ZXR1cm4gcmM7CisKKwlyYyA9IHNpdDk1MzF4X3ByZ19lbnRlcihzaXRkZXYpOworCWlmIChyYykK KwkJcmV0dXJuIHJjOworCisJcmMgPSBzaXQ5NTMxeF9vdXRwdXRfZGl2b193cml0ZShzaXRkZXYs IG91dF9pZHgsIGRpdm8pOworCS8qCisJICogU3RlcCA0OiBOVk0gdXBkYXRlICsgbG9vcCBsb2Nr LiAgQWx3YXlzIHJ1biBwcmdfY29tbWl0KCkgc28gdGhlIGNoaXAKKwkgKiBsZWF2ZXMgdGhlIFBS R19DTUQgc3RhdGUgd2l0aCB0aGUgb3V0cHV0IGxvb3BzIHJlLWxvY2tlZCwgZXZlbiB3aGVuIGEK KwkgKiB3cml0ZSBhYm92ZSBmYWlsZWQ7IGtlZXAgdGhlIGZpcnN0IGVycm9yIHRvIHJldHVybi4g IEl0IGFsc28gY2FycmllcworCSAqIHRoZSByZXF1aXJlZCBwb3N0LWxvY2sgc2V0dGxpbmcgc2xl ZXAuCisJICovCisJcmV0ID0gc2l0OTUzMXhfcHJnX2NvbW1pdChzaXRkZXYpOworCWlmIChyZXQg JiYgIXJjKQorCQlyYyA9IHJldDsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCS8qCisJICog U3RlcCA1OiBmbHVzaCB0aGUgUExMJ3Mgb3V0cHV0IHBoYXNlIHNvIHRoZSBuZXcgRElWTyBzdGFy dHMKKwkgKiBhbGlnbmVkIGluc3RlYWQgb2Yga2VlcGluZyB0aGUgYXJiaXRyYXJ5IHBoYXNlIHRo ZSBkaXZpZGVyCisJICogaGFwcGVuZWQgdG8gYmUgYXQuCisJICovCisJLyoKKwkgKiBUaGUgZGl2 aWRlciBpcyBjb21taXR0ZWQgYnkgdGhpcyBwb2ludCwgc28gdGhlIHBhcnQgaXMgYWxyZWFkeQor CSAqIHJ1bm5pbmcgYXQgdGhlIG5ldyByYXRlLiAgQSBmbHVzaCB0aGF0IGZhaWxzIGxlYXZlcyB0 aGUgb3V0cHV0CisJICogZGl2aWRlciBvbiBpdHMgb2xkIHBoYXNlLCB3aGljaCBpcyBhIHJlYWxp Z25tZW50IHRoYXQgZGlkIG5vdAorCSAqIGhhcHBlbiByYXRoZXIgdGhhbiBhIHJhdGUgdGhhdCBk aWQgbm90IGNoYW5nZSAtLSBhbmQgcmVwb3J0aW5nIGEKKwkgKiBmYWlsdXJlIHdvdWxkIGJlIGRv dWJseSB3cm9uZywgYmVjYXVzZSB0aGUgY29yZSBhc2tzIGZvciB0aGUKKwkgKiBjdXJyZW50IHJh dGUgZmlyc3QgYW5kIHdvdWxkIGRyb3AgYW4gaWRlbnRpY2FsIHJldHJ5LgorCSAqLworCXJjID0g c2l0OTUzMXhfb3V0cHV0X3BoYXNlX2ZsdXNoKHNpdGRldiwgcGxsX2lkeCk7CisJaWYgKHJjKSB7 CisJCWRldl93YXJuKHNpdGRldi0+ZGV2LAorCQkJICJvdXQldTogcmF0ZSBjaGFuZ2VkIGJ1dCB0 aGUgZGl2aWRlciBwaGFzZSB3YXMgbm90IHJlYWxpZ25lZCAoJWQpXG4iLAorCQkJIG91dF9pZHgs IHJjKTsKKwkJcmMgPSAwOworCX0KKworCXNpdGRldi0+b3V0W291dF9pZHhdLmZyZXEgPSBkaXY2 NF91NjQoZnZjbywgZGl2byk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNpdDk1MzF4X291 dHB1dF9mcmVxX2dldCAtIHJlYWQgb3V0cHV0IGNsb2NrIGZyZXF1ZW5jeSBmcm9tIGhhcmR3YXJl CisgKiBAb3V0X2lkeDoJb3V0cHV0IGluZGV4ICgwLU4gZm9yIHRoaXMgY2hpcCB2YXJpYW50KQor ICogQGZyZXF1ZW5jeToJb3V0cHV0IGZyZXF1ZW5jeSBpbiBIegorICoKKyAqIFJlYWRzIHRoZSAz NC1iaXQgRElWTyBkaXZpZGVyIGJhY2sgZnJvbSB0aGUgb3V0cHV0IHN5c3RlbSByZWdpc3RlcnMK KyAqIGFuZCBjb21wdXRlcyB0aGUgbGl2ZSBvdXRwdXQgZnJlcXVlbmN5IGFzIEZ2Y28gLyBESVZP LiAgVGhpcyBzdGF5cworICogY29ycmVjdCBldmVuIHdoZW4gdGhlIGRpdmlkZXIgd2FzIHJlcHJv Z3JhbW1lZCBiZWhpbmQgdGhlIGRyaXZlcidzCisgKiBiYWNrIChlLmcuIGJ5IGEgZGlyZWN0LUky QyB1c2Vyc3BhY2UgdG9vbCksIHdoZXJlIHRoZSBjYWNoZWQgdmFsdWUKKyAqIHdvdWxkIGJlIHN0 YWxlLgorICoKKyAqIFRoZSBjYWNoZWQgb3V0cHV0IHN0YXRlIGlzIHJlZnJlc2hlZCB3aXRoIHRo ZSBjb21wdXRlZCB2YWx1ZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIHNpdGRldi0+bXVsdGlv cF9sb2NrLgorICoKKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU5PREFUQSB3aGVuIHRoZSBv dXRwdXQgZGl2aWRlciBvciBWQ08gcmF0ZQorICoJICAgaXMgbm90IHJlc29sdmFibGUsIDwwIG9u IHJlZ2lzdGVyIGFjY2VzcyBlcnJvci4gIC1FTk9EQVRBIGFuZCBub3QKKyAqCSAgIC1FTk9ERVYs IHdoaWNoIHRoZSBJMkMgbGF5ZXIgcmV0dXJucyBmb3IgYW4gYWRhcHRlciB0aGF0IGlzIGdvbmUK KyAqCSAgIGFuZCB3aGljaCBtdXN0IG5vdCByZWFkIGFzICJubyByYXRlIHRvIHJlcG9ydCIuCisg Ki8KK2ludCBzaXQ5NTMxeF9vdXRwdXRfZnJlcV9nZXQoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0 ZGV2LCB1OCBvdXRfaWR4LAorCQkJICAgICB1NjQgKmZyZXF1ZW5jeSkKK3sKKwljb25zdCBzdHJ1 Y3Qgc2l0OTUzMXhfY2hpcF9pbmZvICppbmZvID0gc2l0ZGV2LT5pbmZvOworCXU2NCBmdmNvLCBk aXZvOworCXU4IHBsbF9pZHg7CisJaW50IHJjOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc2l0 ZGV2LT5tdWx0aW9wX2xvY2spOworCisJaWYgKG91dF9pZHggPj0gaW5mby0+bnVtX291dHB1dHMp CisJCXJldHVybiAtRUlOVkFMOworCisJcGxsX2lkeCA9IHNpdGRldi0+b3V0W291dF9pZHhdLnBs bF9pZHg7CisJaWYgKHBsbF9pZHggPj0gU0lUOTUzMVhfTlVNX1BMTFMgfHwgIXNpdGRldi0+b3V0 W291dF9pZHhdLnJvdXRlZCkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJcmMgPSBzaXQ5NTMxeF9n ZXRfZnZjbyhzaXRkZXYsIHBsbF9pZHgsICZmdmNvKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsK KworCXJjID0gc2l0OTUzMXhfb3V0cHV0X2Rpdm9fcmVhZChzaXRkZXYsIG91dF9pZHgsICZkaXZv KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCSpmcmVxdWVuY3kgPSBkaXY2NF91NjQoZnZj bywgZGl2byk7CisJc2l0ZGV2LT5vdXRbb3V0X2lkeF0uZnJlcSA9ICpmcmVxdWVuY3k7CisKKwly ZXR1cm4gMDsKK30KKwogLyoKICAqIFBoYXNlIGFkanVzdCAoUFJHX1JTVF9ERUxBWSByZWdpc3Rl ci1iYXNlZCkuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3NpdDk1MzF4L2NvcmUuaCBi L2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9jb3JlLmgKaW5kZXggMGI3NDE4OTIyY2M5Li44OTBhNTI4 MzE0ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9jb3JlLmgKKysrIGIvZHJp dmVycy9kcGxsL3NpdDk1MzF4L2NvcmUuaApAQCAtMTkyLDYgKzE5Miw4IEBAIHN0cnVjdCBzaXQ5 NTMxeF9jaGFuIHsKICAqCQkJc3luY2hyb25pemF0aW9uIChJTlRTWU5DKSwgb3IgLTEgd2hlbiBk aXNhYmxlZAogICogQGlycV9hY2tfZmFpbHM6CWNvbnNlY3V0aXZlIGZhaWx1cmVzIHRvIGFja25v d2xlZGdlIHRoZQogICoJCQlub3RpZmljYXRpb24gbGF0Y2hlcyBmcm9tIHRoZSBpbnRlcnJ1cHQg aGFuZGxlcgorICogQGZ2Y29fYmFuZF93YXJuZWQ6CWJpdCBwZXIgUExMIHdob3NlIEZyZWYgKiBE SVZOIGhhcyBiZWVuIHJlcG9ydGVkIGFzCisgKgkJCW91dHNpZGUgaXRzIFZDTyBiYW5kOyB3cml0 dGVuIHVuZGVyIEBtdWx0aW9wX2xvY2sKICAqLwogc3RydWN0IHNpdDk1MzF4X2RldiB7CiAJc3Ry dWN0IGRldmljZQkJCSpkZXY7CkBAIC0yMDMsNiArMjA1LDcgQEAgc3RydWN0IHNpdDk1MzF4X2Rl diB7CiAKIAkvKiBIYXJkd2FyZSBzdGF0ZSAqLwogCXU4CQkJaXJxX2Fja19mYWlsczsKKwl1OAkJ CWZ2Y29fYmFuZF93YXJuZWQ7CiAJc3RydWN0IHNpdDk1MzF4X3JlZglyZWZbU0lUOTUzMVhfTUFY X0lOUFVUUyArIDFdOyAvKiArMSBmb3IgeHRhbCAqLwogCXN0cnVjdCBzaXQ5NTMxeF9vdXQJb3V0 W1NJVDk1MzFYX01BWF9PVVRQVVRTXTsKIAlzdHJ1Y3Qgc2l0OTUzMXhfY2hhbgljaGFuW1NJVDk1 MzFYX05VTV9QTExTXTsKQEAgLTI1OCw2ICsyNjEsMTAgQEAgaW50IHNpdDk1MzF4X2lucHV0X3By aW9fYWRkKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggcGxsX2lkeCwKIC8qIC0tLS0g T3V0cHV0IGVuYWJsZS9kaXNhYmxlIChIaS1aIGNvbnRyb2wpIC0tLS0gKi8KIAogLyogLS0tLSBP dXRwdXQgZnJlcXVlbmN5IC0tLS0gKi8KK2ludCBzaXQ5NTMxeF9vdXRwdXRfZnJlcV9zZXQoc3Ry dWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LCB1OCBvdXRfaWR4LAorCQkJICAgICB1OCBwbGxfaWR4 LCB1NjQgZnJlcXVlbmN5KTsKK2ludCBzaXQ5NTMxeF9vdXRwdXRfZnJlcV9nZXQoc3RydWN0IHNp dDk1MzF4X2RldiAqc2l0ZGV2LCB1OCBvdXRfaWR4LAorCQkJICAgICB1NjQgKmZyZXF1ZW5jeSk7 CiAKIC8qIC0tLS0gT3V0cHV0IHBoYXNlIGFkanVzdCAoUFJHX1JTVF9ERUxBWSByZWdpc3Rlci1i YXNlZCkgLS0tLSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvZHBsbC5j IGIvZHJpdmVycy9kcGxsL3NpdDk1MzF4L2RwbGwuYwppbmRleCAwNDAwNDQ0ZDkxYTUuLmFhMDIx YjM3NGM0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3NpdDk1MzF4L2RwbGwuYworKysgYi9k cml2ZXJzL2RwbGwvc2l0OTUzMXgvZHBsbC5jCkBAIC00MTEsNiArNDExLDMyIEBAIHNpdDk1MzF4 X2RwbGxfaW5wdXRfcGluX2RpcmVjdGlvbl9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4s CiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBzaXQ5NTMxeF9kcGxsX2lucHV0X3Bpbl9mcmVxdWVu Y3lfZ2V0IC0gcmVhZCBpbnB1dCBwaW4gZnJlcXVlbmN5CisgKgorICogUmV0dXJucyB0aGUgcmF0 ZSB0aGUgYm9hcmQgd2lyZWQgdG8gdGhlIGlucHV0LCB0aGUgZmlyc3QgZW50cnkgb2YgaXRzCisg KiBzdXBwb3J0ZWQtZnJlcXVlbmNpZXMtaHo7IGFuIGlucHV0IGhhcyBubyBmcmVxdWVuY3kgc2V0 dGVyLiAgQW4gaW5wdXQKKyAqIHRoZSBmaXJtd2FyZSBsaXN0cyBubyByYXRlIGZvciBpcyByZWdp c3RlcmVkIHdpdGhvdXQgdGhpcyBjYWxsYmFjaworICogKHNpdDk1MzF4X2RwbGxfcGluX29wc19n ZXQoKSksIHNvIGl0cyBhdHRyaWJ1dGUgaXMgYWJzZW50IHJhdGhlciB0aGFuCisgKiB6ZXJvLgor ICovCitzdGF0aWMgaW50CitzaXQ5NTMxeF9kcGxsX2lucHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNv bnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLAorCQkJCSAgICAgIHZvaWQgKnBpbl9wcml2LAorCQkJ CSAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwKKwkJCQkgICAgICB2b2lkICpk cGxsX3ByaXYsIHU2NCAqZnJlcXVlbmN5LAorCQkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9h Y2sgKmV4dGFjaykKK3sKKwlzdHJ1Y3Qgc2l0OTUzMXhfZHBsbF9waW4gKmRwaW4gPSBwaW5fcHJp djsKKwlzdHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0ZHBsbCA9IGRwbGxfcHJpdjsKKwljb25zdCBz dHJ1Y3Qgc2l0OTUzMXhfcmVmICpyZWY7CisKKwlyZWYgPSBzaXQ5NTMxeF9yZWZfc3RhdGVfZ2V0 KHNpdGRwbGwtPmRldiwgZHBpbi0+aWQpOworCSpmcmVxdWVuY3kgPSByZWYtPmZyZXE7CisKKwly ZXR1cm4gMDsKK30KKwogLyoKICAqIHNpdDk1MzF4X2RwbGxfaW5wdXRfcGluX3N0YXRlX29uX2Rw bGxfZ2V0IC0gZ2V0IGlucHV0IHBpbiBEUExMIHN0YXRlCiAgKgpAQCAtNjQ0LDYgKzY3MCwyMyBA QCBzaXQ5NTMxeF9kcGxsX2lucHV0X3Bpbl9wcmlvX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4g KnBpbiwgdm9pZCAqcGluX3ByaXYsCiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5f b3BzIHNpdDk1MzF4X2RwbGxfaW5wdXRfcGluX29wcyA9IHsKKwkuZGlyZWN0aW9uX2dldAkJPSBz aXQ5NTMxeF9kcGxsX2lucHV0X3Bpbl9kaXJlY3Rpb25fZ2V0LAorCS5mcmVxdWVuY3lfZ2V0CQk9 IHNpdDk1MzF4X2RwbGxfaW5wdXRfcGluX2ZyZXF1ZW5jeV9nZXQsCisJLnN0YXRlX29uX2RwbGxf Z2V0CT0gc2l0OTUzMXhfZHBsbF9pbnB1dF9waW5fc3RhdGVfb25fZHBsbF9nZXQsCisJLnN0YXRl X29uX2RwbGxfc2V0CT0gc2l0OTUzMXhfZHBsbF9pbnB1dF9waW5fc3RhdGVfb25fZHBsbF9zZXQs CisJLm9wZXJzdGF0ZV9vbl9kcGxsX2dldAk9IHNpdDk1MzF4X2RwbGxfaW5wdXRfcGluX29wZXJz dGF0ZV9vbl9kcGxsX2dldCwKKwkucHJpb19nZXQJCT0gc2l0OTUzMXhfZHBsbF9pbnB1dF9waW5f cHJpb19nZXQsCisJLnByaW9fc2V0CQk9IHNpdDk1MzF4X2RwbGxfaW5wdXRfcGluX3ByaW9fc2V0 LAorfTsKKworLyoKKyAqIFRoZSBzYW1lIHdpdGhvdXQgZnJlcXVlbmN5X2dldCwgZm9yIGFuIGlu cHV0IHdob3NlIGZpcm13YXJlIG5vZGUgbGlzdHMKKyAqIG5vIHN1cHBvcnRlZC1mcmVxdWVuY2ll cy1oeiAob3IgdGhhdCBoYXMgbm8gbm9kZSBhdCBhbGwpOiB0aGVyZSBpcyBubworICogcmF0ZSB0 byByZXBvcnQsIGFuZCB0aGUgY29yZSBmYWlscyBhIHdob2xlIHBpbiBkdW1wIG9uIGFuIGVycm9y IGZyb20KKyAqIGFueSBvbmUgY2FsbGJhY2ssIHNvIHRoZSBhdHRyaWJ1dGUgaXMgbGVmdCBvdXQg cmF0aGVyIHRoYW4gcmVwb3J0ZWQKKyAqIGFzIDAgSHouCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHBsbF9waW5fb3BzIHNpdDk1MzF4X2RwbGxfaW5wdXRfcGluX25vcmF0ZV9vcHMgPSB7CiAJ LmRpcmVjdGlvbl9nZXQJCT0gc2l0OTUzMXhfZHBsbF9pbnB1dF9waW5fZGlyZWN0aW9uX2dldCwK IAkuc3RhdGVfb25fZHBsbF9nZXQJPSBzaXQ5NTMxeF9kcGxsX2lucHV0X3Bpbl9zdGF0ZV9vbl9k cGxsX2dldCwKIAkuc3RhdGVfb25fZHBsbF9zZXQJPSBzaXQ5NTMxeF9kcGxsX2lucHV0X3Bpbl9z dGF0ZV9vbl9kcGxsX3NldCwKQEAgLTcwNCw2ICs3NDcsNyBAQCBzaXQ5NTMxeF9kcGxsX3hvX3Bp bl9zdGF0ZV9vbl9kcGxsX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwKIAogc3RhdGlj IGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgc2l0OTUzMXhfZHBsbF94b19waW5fb3BzID0gewog CS5kaXJlY3Rpb25fZ2V0CQk9IHNpdDk1MzF4X2RwbGxfaW5wdXRfcGluX2RpcmVjdGlvbl9nZXQs CisJLmZyZXF1ZW5jeV9nZXQJCT0gc2l0OTUzMXhfZHBsbF9pbnB1dF9waW5fZnJlcXVlbmN5X2dl dCwKIAkuc3RhdGVfb25fZHBsbF9nZXQJPSBzaXQ5NTMxeF9kcGxsX3hvX3Bpbl9zdGF0ZV9vbl9k cGxsX2dldCwKIH07CiAKQEAgLTcxOSw4ICs3NjMsNzggQEAgc2l0OTUzMXhfZHBsbF9vdXRwdXRf cGluX2RpcmVjdGlvbl9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sCiAJcmV0dXJuIDA7 CiB9CiAKKy8qCisgKiBzaXQ5NTMxeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X2dldCAtIHJl YWQgb3V0cHV0IHBpbiBmcmVxdWVuY3kKKyAqCisgKiBSZWFkcyB0aGUgRElWTyBkaXZpZGVyIGJh Y2sgZnJvbSB0aGUgY2hpcCBhbmQgY29tcHV0ZXMgdGhlIGxpdmUKKyAqIGZyZXF1ZW5jeSBhcyBG dmNvIC8gRElWTy4gIEZhbGxzIGJhY2sgdG8gdGhlIGNhY2hlZCB2YWx1ZSBvbmx5IHdoZW4KKyAq IHRoZSBvdXRwdXQgaXMgbm90IHJlc29sdmFibGUgdGhyb3VnaCB0aGUgZGl2aWRlciBjaGFpbiAo ZS5nLiBub3QKKyAqIG1hcHBlZCB0byBhIFBMTCksIHNvIHRyYW5zcG9ydC9yZWdpc3RlciBlcnJv cnMgc3RpbGwgc3VyZmFjZS4KKyAqLworc3RhdGljIGludAorc2l0OTUzMXhfZHBsbF9vdXRwdXRf cGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sCisJCQkJICAgICAg IHZvaWQgKnBpbl9wcml2LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRw bGwsCisJCQkJICAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0ICpmcmVxdWVuY3ksCisJCQkJICAg ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKK3sKKwlzdHJ1Y3Qgc2l0OTUzMXhf ZHBsbF9waW4gKmRwaW4gPSBwaW5fcHJpdjsKKwlzdHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0ZHBs bCA9IGRwbGxfcHJpdjsKKwlzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYgPSBzaXRkcGxsLT5k ZXY7CisJaW50IHJjOworCisJbXV0ZXhfbG9jaygmc2l0ZGV2LT5tdWx0aW9wX2xvY2spOworCXJj ID0gc2l0OTUzMXhfb3V0cHV0X2ZyZXFfZ2V0KHNpdGRldiwgZHBpbi0+aWQsIGZyZXF1ZW5jeSk7 CisJaWYgKHJjID09IC1FTk9EQVRBKQorCQkqZnJlcXVlbmN5ID0gc2l0OTUzMXhfb3V0X3N0YXRl X2dldChzaXRkZXYsIGRwaW4tPmlkKS0+ZnJlcTsKKwltdXRleF91bmxvY2soJnNpdGRldi0+bXVs dGlvcF9sb2NrKTsKKworCXJldHVybiByYyA9PSAtRU5PREFUQSA/IDAgOiByYzsKK30KKworLyoK KyAqIHNpdDk1MzF4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0IC0gc2V0IG91dHB1dCBw aW4gZnJlcXVlbmN5CisgKgorICogY29tcHV0ZXMgRElWTyA9IEZ2Y28gLyBmcmVxdWVuY3kgYW5k IHdyaXRlcyB0aGUKKyAqIDM0LWJpdCBvdXRwdXQgZGl2aWRlciB0byB0aGUgb3V0cHV0IHN5c3Rl bSByZWdpc3RlcnMgdmlhCisgKiBzaXQ5NTMxeF9vdXRwdXRfZnJlcV9zZXQoKS4KKyAqLworc3Rh dGljIGludAorc2l0OTUzMXhfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3Ry dWN0IGRwbGxfcGluICpwaW4sCisJCQkJICAgICAgIHZvaWQgKnBpbl9wcml2LAorCQkJCSAgICAg ICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsCisJCQkJICAgICAgIHZvaWQgKmRwbGxf cHJpdiwgdTY0IGZyZXF1ZW5jeSwKKwkJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAq ZXh0YWNrKQoreworCXN0cnVjdCBzaXQ5NTMxeF9kcGxsX3BpbiAqZHBpbiA9IHBpbl9wcml2Owor CXN0cnVjdCBzaXQ5NTMxeF9kcGxsICpzaXRkcGxsID0gZHBsbF9wcml2OworCXN0cnVjdCBzaXQ5 NTMxeF9kZXYgKnNpdGRldiA9IHNpdGRwbGwtPmRldjsKKwl1OCBhY3R1YWxfcGxsOworCWludCBy YzsKKworCS8qCisJICogUmVhZCB0aGUgUExMIHRoYXQgZHJpdmVzIHRoaXMgb3V0cHV0IGZyb20g aXRzIE9VVF9NQVAgc3RhdGUKKwkgKiAocG9wdWxhdGVkIGJ5IG91dF9zdGF0ZV9mZXRjaCBmcm9t IHRoZSBjaGlwJ3MgT1VUX01BUCByZWdpc3RlcnMpLgorCSAqIFRoYXQgaXMgdGhlIGluZGV4IHRo ZSBvdXRwdXQgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcgYmVsb3cgaXMga2V5ZWQKKwkgKiBieTsgdGhl IG91dHB1dCBpcyByZWdpc3RlcmVkIHVuZGVyIHRoZSBEUExMIG1hdGNoaW5nIHRoaXMgUExMLgor CSAqLworCWFjdHVhbF9wbGwgPSBzaXRkZXYtPm91dFtkcGluLT5pZF0ucGxsX2lkeDsKKworCW11 dGV4X2xvY2soJnNpdGRldi0+bXVsdGlvcF9sb2NrKTsKKwlyYyA9IHNpdDk1MzF4X291dHB1dF9m cmVxX3NldChzaXRkZXYsIGRwaW4tPmlkLCBhY3R1YWxfcGxsLAorCQkJCSAgICAgIGZyZXF1ZW5j eSk7CisJbXV0ZXhfdW5sb2NrKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CisKKwlpZiAocmMpCisJ CU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgIk91dHB1dCBmcmVxdWVuY3kgc2V0IGZhaWxlZCIpOwor CisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBzaXQ5 NTMxeF9kcGxsX291dHB1dF9waW5fb3BzID0gewogCS5kaXJlY3Rpb25fZ2V0CQk9IHNpdDk1MzF4 X2RwbGxfb3V0cHV0X3Bpbl9kaXJlY3Rpb25fZ2V0LAorCS5mcmVxdWVuY3lfZ2V0CQk9IHNpdDk1 MzF4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfZ2V0LAorCS5mcmVxdWVuY3lfc2V0CQk9IHNp dDk1MzF4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0LAogfTsKIAogY29uc3Qgc3RydWN0 IGRwbGxfcGluX29wcyAqCkBAIC03MzAsNiArODQ0LDEyIEBAIHNpdDk1MzF4X2RwbGxfcGluX29w c19nZXQoY29uc3Qgc3RydWN0IHNpdDk1MzF4X2RwbGxfcGluICpwaW4pCiAJCXJldHVybiAmc2l0 OTUzMXhfZHBsbF9vdXRwdXRfcGluX29wczsKIAlpZiAoc2l0OTUzMXhfZHBsbF9pc194b19waW4o cGluKSkKIAkJcmV0dXJuICZzaXQ5NTMxeF9kcGxsX3hvX3Bpbl9vcHM7CisJLyoKKwkgKiBTZWVk ZWQgZnJvbSB0aGUgZmlybXdhcmUgbm9kZSBiZWZvcmUgdGhlIHBpbiBpcyByZWdpc3RlcmVkIGFu ZAorCSAqIG5ldmVyIHdyaXR0ZW4gYWZ0ZXJ3YXJkcywgc28gcmVnaXN0ZXIgYW5kIHVucmVnaXN0 ZXIgYWdyZWUuCisJICovCisJaWYgKCFzaXQ5NTMxeF9yZWZfc3RhdGVfZ2V0KHBpbi0+ZHBsbC0+ ZGV2LCBwaW4tPmlkKS0+ZnJlcSkKKwkJcmV0dXJuICZzaXQ5NTMxeF9kcGxsX2lucHV0X3Bpbl9u b3JhdGVfb3BzOwogCXJldHVybiAmc2l0OTUzMXhfZHBsbF9pbnB1dF9waW5fb3BzOwogfQogCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvcHJvcC5jIGIvZHJpdmVycy9kcGxsL3Np dDk1MzF4L3Byb3AuYwppbmRleCAxNjY0M2YyNWY2YjIuLjRjYTkyZjRmMTdkMSAxMDA2NDQKLS0t IGEvZHJpdmVycy9kcGxsL3NpdDk1MzF4L3Byb3AuYworKysgYi9kcml2ZXJzL2RwbGwvc2l0OTUz MXgvcHJvcC5jCkBAIC0yOTUsMTAgKzI5NSwxMSBAQCBzaXQ5NTMxeF9waW5fcHJvcHNfZ2V0KHN0 cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwKIAl9CiAKIAkvKgotCSAqIFNlZWQgYW4gaW5wdXQn cyBydW50aW1lIHJlZi0+ZnJlcSB3aXRoIHRoZSBmaXJzdCBEVC1saXN0ZWQKLQkgKiBzdXBwb3J0 ZWQgZnJlcXVlbmN5OiBmb3IgYW4gaW5wdXQgdGhlIGJvYXJkIGxpc3RzIHRoZSByYXRlIHRoYXQg aXMKLQkgKiBwaHlzaWNhbGx5IHdpcmVkIHRvIGl0IGZpcnN0LiAgQW4gb3V0cHV0J3MgY3VycmVu dCByYXRlIGlzIHdoYXQgaXRzCi0JICogZGl2aWRlciBwcm9kdWNlcywgbm90IGFuIGVudHJ5IG9m IHRoZSBsaXN0IGl0IG1heSBiZSBzZXQgdG8uCisJICogU2VlZCB0aGUgcnVudGltZSByZWYtPmZy ZXEgd2l0aCB0aGUgZmlyc3QgRFQtbGlzdGVkIHN1cHBvcnRlZAorCSAqIGZyZXF1ZW5jeTogYW4g aW5wdXQncyByYXRlIGlzIGEgYm9hcmQgZmFjdCB0aGUgZGV2aWNlIGNhbm5vdCBiZQorCSAqIGFz a2VkIGZvciwgc28gZmlybXdhcmUgaXMgdGhlIG9ubHkgc291cmNlLiAgQW4gb3V0cHV0IGlzIGxl ZnQgdG8KKwkgKiB0aGUgcmVhZC1iYWNrIGJlbG93LCB3aGljaCBrbm93cyB3aGF0IHRoZSBkaXZp ZGVyIGlzIGFjdHVhbGx5CisJICogZG9pbmcuCiAJICovCiAJaWYgKG51bV9mcmVxcyA+IDAgJiYg ZGlyID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCAmJgogCSAgICBpbmRleCAhPSBTSVQ5NTMx WF9NQVhfSU5QVVRTKQpAQCAtMzEzLDYgKzMxNCwzMCBAQCBzaXQ5NTMxeF9waW5fcHJvcHNfZ2V0 KHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwKIAkgICAgaW5kZXggPT0gU0lUOTUzMVhfSU5U U1lOQ19PVVRfUElOX0lEKQogCQlyZXR1cm4gcHJvcHM7CiAKKwkvKgorCSAqIEFuIG91dHB1dCdz IGN1cnJlbnQgcmF0ZSBpcyB0aGUgb25lIGl0cyBkaXZpZGVyIHByb2R1Y2VzLCBzbyByZWFkCisJ ICogaXQgcmF0aGVyIHRoYW4gYXNzdW1lIHRoZSBmaXJzdCBlbnRyeSBvZiBhIGxpc3Qgb2YgdGhl IHJhdGVzIHRoZQorCSAqIGJvYXJkIHN1cHBvcnRzIGlzIHRoZSBvbmUgaW4gZm9yY2UuICBBIHJh dGUgdGFrZW4gZnJvbSBmaXJtd2FyZQorCSAqIHRoYXQgdGhlIHBhcnQgaXMgbm90IHJ1bm5pbmcg d291bGQgYmUgcmVwb3J0ZWQgYXMgY3VycmVudCBhbmQsCisJICogd29yc2UsIHVzZWQgYXMgdGhl IG91dHB1dCBwZXJpb2QgdGhlIHBoYXNlIGFkanVzdCBxdWFudGl6ZXMKKwkgKiBhZ2FpbnN0LiAg VGhlIHJlYWQtYmFjayBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGZpcm13YXJlIG5vZGU6IGFuCisJ ICogb3V0cHV0IHRoZSBib2FyZCBkZXNjcmliZXMgd2l0aG91dCBhIHJhdGUgbGlzdCwgb3IgZG9l cyBub3QKKwkgKiBkZXNjcmliZSBhdCBhbGwsIHN0aWxsIHJ1bnMgYXQgd2hhdGV2ZXIgaXRzIGRp dmlkZXIgcHJvZHVjZXMsIGFuZAorCSAqIHRoYXQgcmF0ZSBpcyBwdWJsaXNoZWQgYWhlYWQgb2Yg dGhlIGZhbGxiYWNrIHJhbmdlIGJlbG93LiAgQW4KKwkgKiBvdXRwdXQgdGhlIGNvbmZpZ3VyYXRp b24gZG9lcyBub3Qgcm91dGUgaGFzIG5vIHJhdGUgdG8gcmVhZCwKKwkgKiB3aGljaCBpcyBub3Qg YW4gZXJyb3IuCisJICovCisJaWYgKGRpciA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUICYm CisJICAgIGluZGV4IDwgc2l0ZGV2LT5pbmZvLT5udW1fb3V0cHV0cykgeworCQl1NjQgaHdfZnJl cTsKKworCQltdXRleF9sb2NrKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CisJCXJjID0gc2l0OTUz MXhfb3V0cHV0X2ZyZXFfZ2V0KHNpdGRldiwgaW5kZXgsICZod19mcmVxKTsKKwkJbXV0ZXhfdW5s b2NrKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CisJCWlmICghcmMpCisJCQljdXJyX2ZyZXEgPSBo d19mcmVxOworCX0KKwogCS8qCiAJICogQWR2ZXJ0aXNlIG9ubHkgY29uY3JldGUgdmFsdWVzIGZy b20gZmlybXdhcmUgcGx1cyBjdXJyZW50IHJ1bnRpbWUKIAkgKiB2YWx1ZS4gRm9yIG91dHB1dHMg d2l0aG91dCBhIGZpcm13YXJlIGxpc3QsIHB1Ymxpc2ggb25lIHdpZGUgcmFuZ2UgYXMKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvc2l0OTUz MXgvcmVncy5oCmluZGV4IGZkMTA2ODk4MmNkNy4uZWVhMzgxNTBiNTBmIDEwMDY0NAotLS0gYS9k cml2ZXJzL2RwbGwvc2l0OTUzMXgvcmVncy5oCisrKyBiL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9y ZWdzLmgKQEAgLTIwMCw2ICsyMDAsNyBAQAogLyogRGVidWcgcmVnaXN0ZXIgKHNhbWUgb2Zmc2V0 LCBwZXItcGFnZSkgKi8KICNkZWZpbmUgU0lUOTUzMVhfUkVHX09VVFNZU19ERUJVRwkJU0lUOTUz MVhfUkVHKDB4MDMsIDB4QkQpCiAjZGVmaW5lIFNJVDk1MzFYX0RFQlVHX1VOTE9DS19WQUwJCTB4 QzMKKyNkZWZpbmUgU0lUOTUzMVhfREVCVUdfTE9DS19WQUwJCQkweDAwCiAKIC8qCiAgKiBPbi1k ZW1hbmQgcGhhc2UtZmx1c2ggZmlyZWQgZnJvbSBhIHJlZ2lzdGVyIHJhdGhlciB0aGFuIGEgR1BJ TyBwaW4uCkBAIC0yMTQsNiArMjE1LDE4IEBACiAvKiAtLS0tIFBMTCBwYWdlIHJlZ2lzdGVycyAo YXBwbHkgdG8gcGFnZXMgMHgwQS0weDBEKSAtLS0tICovCiAjZGVmaW5lIFNJVDk1MzFYX1BMTF9S RUdfU01BTExfVVBEQVRFCTB4MEYKIAorLyogT24tZGVtYW5kIHBoYXNlLWZsdXNoIGVuYWJsZSAo UExMIHBhZ2UgcmVnIDB4M0QgYml0IDcpICovCisjZGVmaW5lIFNJVDk1MzFYX1BMTF9SRUdfUEhG TF9DVFJMCTB4M0QKKyNkZWZpbmUgU0lUOTUzMVhfUExMX1BIRkxfT05fREVNQU5EX0VOCUJJVCg3 KQorCisvKiBXaGV0aGVyIHRoZSBQTEwgaGFzIHRoZSBwaGFzZS1mbHVzaCBmZWF0dXJlIChQTEwg cGFnZSByZWcgMHg0NyBiaXQgNykgKi8KKyNkZWZpbmUgU0lUOTUzMVhfUExMX1JFR19DT05GSUc0 NwkweDQ3CisjZGVmaW5lIFNJVDk1MzFYX1BMTF9DT05GSUc0N19QSEZMX0VOCUJJVCg3KQorCisv KiBEaXJlY3RpdmVzX0dFTkVSSUNfUExMOiB0aGUgcmVzdGFydCBiaXQgcmVzdGFydHMgdGhlIFBM TCwgc2VsZi1jbGVhcmluZyAqLworI2RlZmluZSBTSVQ5NTMxWF9QTExfUkVHX0RJUkVDVElWRVMJ MHgwNQorI2RlZmluZSBTSVQ5NTMxWF9QTExfRElSRUNUSVZFX1JFU1RBUlQJQklUKDApCisKIC8q CiAgKiBMb29wLWZpbHRlciBjb2VmZmljaWVudHMgb24gUExMX1BBR0UgcmVncyAweDEwLTB4MTUg KDMgbm9ybWFsICsKICAqIDMgZmFzdC1sb2NrKSBhcmUgR1VJL05WTS1nZW5lcmF0ZWQgYnkgdGhl IHRpbWluZyBjb25maWd1cmF0b3IgYW5kIG11c3Qgbm90IGJlCkBAIC0yMjksNiArMjQyLDE0IEBA CiAjZGVmaW5lIFNJVDk1MzFYX1BMTF9SRUdfT1VUX01BUF9MTwkJMHgyOAogI2RlZmluZSBTSVQ5 NTMxWF9QTExfUkVHX1NUQVRVUwkJMHgzMQogCisvKiBESVZOIHJlZ2lzdGVycyAoZnJlZS1ydW4g ZGl2aWRlciByZWFkYmFjaykgKi8KKyNkZWZpbmUgU0lUOTUzMVhfUExMX1JFR19ESVZOX0lOVAkJ MHgzMAorI2RlZmluZSBTSVQ5NTMxWF9QTExfUkVHX0RJVk5fTlVNCQkweDMyICAvKiA0IGJ5dGVz ICgweDMyLTB4MzUpICovCisjZGVmaW5lIFNJVDk1MzFYX1BMTF9SRUdfRElWTl9ERU4JCTB4Mzgg IC8qIDQgYnl0ZXMgKDB4MzgtMHgzQikgKi8KKworLyogRElWTiBpcyBjYXJyaWVkIGFzIGZpeGVk IHBvaW50LCBpbiBzdGVwcyBvZiAxZS0xMiBvZiBhIHdob2xlIGRpdmlkZXIgKi8KKyNkZWZpbmUg U0lUOTUzMVhfRElWTl9TQ0FMRQkJMTAwMDAwMDAwMDAwMFVMTAorCiAjZGVmaW5lIFNJVDk1MzFY X1BMTF9SRUdfQUNUSVZFCQkweDAyCiAjZGVmaW5lIFNJVDk1MzFYX1BMTF9BQ1RJVkVfQklUCQlC SVQoMCkgIC8qIFBMTCByZWFjaGVkIGFjdGl2ZSBzdGF0ZSAqLwogCi0tIAoyLjM5LjIgKEFwcGxl IEdpdC0xNDMpCgo=