From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 921DDC7EE30 for ; Thu, 26 Jun 2025 16:51:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Jkjvoecnf69pmUjtzS7NS39Tv8ap/MS/yR7HA4KaiEI=; b=0Rg8I160idYaTk i3CHXCuEa0ZTLBm1Hg7vOazzBr6ErPQPJVNdXzMipMi7ysCfODtI5aKjshE4PTpuEr0MlromgyIRe OCK5QfdLnI4HrxBT+wwg/OX2LkIzMSNztFVj7QwR1dEMgi2cfCdSMucZZrHTPkNosxZ7uZwmvig35 a6F1+1ArGEHVkDY617MqmvHep2N/H+yohvGNH+1xcLiDTDv0yS1iEfKPWX5Di90JyLFMETkQIS1Zj b7fnSk0sU3ITMPYegEBlJnVHCxeMXV6HqavY0lAwPipwm4k2+9Kl5jz4CKBxK4I4lGM+4Xr1mM8mD FCPvicf/ZYlp1dApoQTg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uUpp6-0000000CJd2-11JH; Thu, 26 Jun 2025 16:51:40 +0000 Received: from mail-northeuropeazlp170100001.outbound.protection.outlook.com ([2a01:111:f403:c200::1] helo=DB3PR0202CU003.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uUpp3-0000000CJcI-09Cm for linux-i3c@lists.infradead.org; Thu, 26 Jun 2025 16:51:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=M7ZTuLVTM369bAzetJRGX57oXrbVVxJmZ3vFs1XHkfFQB3e8Usz9PJlqWt31tVHNMwSIYMIjEFsgLfRI+MygYK3xEZ4rNFY7Q02PbVEDAUPUe19CDG9aF0QZAyV+zJ+5xVpItfCsuwAOduL/KB5+M20/XSIqNjXRa2vO32ZYtVOf8iCwrvlvcAgXzc0P2QS+cLthdNu/QbFIq45URgrcyySJdAT71Pszfp12x0Jd8ZqkicPxyGY/yhYT66aWVGPOmyoHW1dhWhHBUtRCzmZ+Yr7ZVXg/WjHLwl6vXr6Lt0+3WTE9CTG3ycybjjLM7ysPvShHgmlwMIG6nyEhv1arYg== 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=rkshvLV2Uo4rs4CwP7AhMjX4vNzAhwEnfpWDA/EyxQU=; b=nRRcGa4xoCyMdlFRFh1m7k1yDYqio685NsMvofiOAFImbEj/ag+UkSUsVF6de8gUG+BsNTQpq/dKRUjJmLE1/x1r2Mlj9HyZcu+Ds7s4sRN09JamzaIF7U5TfxjPV96CEmkPKl/qGUQQNaesHHIk0IEXYgbByoFW3yofWDUMIHvWgjDRNmsO+oBF6mYTyRklzn0uUf4B1WFWNRMXcRO9XSueKwXk7u+huqbaGvujRXB0ic4s9ipucDsTt1MPezZfeuy/t+SU4C1Mb2t+hMvodIAI9PwSMhOBtIkn33A4GoxSoIPw0n4tLAk4X8VGcG5ICmZMfwF5CMFsg6xk4mnP4A== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rkshvLV2Uo4rs4CwP7AhMjX4vNzAhwEnfpWDA/EyxQU=; b=dBwWV5NO5ARIrl/uEeRKMmZVCvuwUeB6RYvPuBAycTXaYrFBrwYPKRsNGBncuQz3+HkVFHBJmCEw3OTAAHc2oUjXEVsVhJ1foMp4WWpYBP6ZA6AywMGAzFZOyYVecswOnMtMpxMxmIUSfW6ouwJ6itr2tMBZLlam5UG59GwUjgqbKApBrfLhJC1lxKrrTRZ55BblyLy8bXN9x1ln7fNMAWFkAw2ggLV3s27JD+km5DKUIgLRRlPh6dFWNVvgmN7pwJvM3Ub7VPZ9HQ7EW5ksJ1xBgpMdoF2yfo5YJgjuY6qyScEvCB0SeqE1fuAu3vHcFtncwerzWMcARnxdXrG9zw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) by AM9PR04MB8290.eurprd04.prod.outlook.com (2603:10a6:20b:3e3::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8857.28; Thu, 26 Jun 2025 16:51:33 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%7]) with mapi id 15.20.8880.015; Thu, 26 Jun 2025 16:51:33 +0000 Date: Thu, 26 Jun 2025 12:51:28 -0400 From: Frank Li To: Jorge Marques Cc: Alexandre Belloni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , linux-i3c@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, gastmaier@gmail.com Subject: Re: [PATCH v4 2/2] i3c: master: Add driver for Analog Devices I3C Controller IP Message-ID: References: <20250626-adi-i3c-master-v4-0-3846a1f66d5e@analog.com> <20250626-adi-i3c-master-v4-2-3846a1f66d5e@analog.com> Content-Disposition: inline In-Reply-To: <20250626-adi-i3c-master-v4-2-3846a1f66d5e@analog.com> X-ClientProxiedBy: AS4P191CA0004.EURP191.PROD.OUTLOOK.COM (2603:10a6:20b:5d5::10) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|AM9PR04MB8290:EE_ X-MS-Office365-Filtering-Correlation-Id: aac40011-acc1-4be7-6c9f-08ddb4d1b47c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|376014|366016|1800799024|7053199007|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?R1JyNFlYUEVldzh1aVdJMG9UdVd3OTZlTW9ycitDZGpTZUlnWlVIempDMkFY?= =?utf-8?B?Sml5cDY1TG9GRDN3Rkl0aFVHT1REZUxCSzRSZUk5YUdvaUZyMjMvS2FkVW5W?= =?utf-8?B?a3QwdHVTS3I4RU9aOFRLdDY4TGhzeTRyQkd6UlNxZ3FYbkg5Z0ErQytWekty?= =?utf-8?B?YUVaMWN6cmJPay8vczV5Q1FUc2ZkakpMcTZ2MTlPamExVkNRN0FoRWZqdGcv?= =?utf-8?B?ekJUUkc4VmJRczh2eXBKTEFGLzFWTlBaSGQyY004NmkvbTBVeGQwUzJkYnM0?= =?utf-8?B?UUF2THFMNnFsN1dQcTluLzE2dFpoN1BTdXhVM0hVQkRFV2QzQ3l0MWp2NDUy?= =?utf-8?B?N3NIZGM5c3JzaTVaWFJDWVVVVGczUFc1ZW9aZUQ5YlhBMDhEUG1LVEN4Vmxx?= =?utf-8?B?SEh1VDdoNEhsMXkvQUNWaFpQcFVlQklQakdTRVNHd3FUa3lHU3BtNGdRTXpO?= =?utf-8?B?UkJhcTErMzRhWGhJZnUvWnIySTNRVzhLeFNQWGhXMnFaWWFsa3BxZmNaM0Vv?= =?utf-8?B?Y3crOFQ4VjhMNXdvU2ViaGR1OTBtVENoUnR2bUYrWWorbUk1VzArZzVOYWJh?= =?utf-8?B?dFNNbnlBODJ2TmVtekc5L2NGUFJLQ1FQRFplSncwQXlDWnN1SlNhSE1iSmNs?= =?utf-8?B?N3dsVjd3SEZKNW1xU2VEVW1sQVZCam11OGtOOHI3SnY1VFQ4NDRXbzRBdXlZ?= =?utf-8?B?aTdiVFZ4RlJJQTROVHIzM1IvSlZsZUs5K3hVWitnYWpab0VUQmFpRzlFUStI?= =?utf-8?B?RjZPMVBOTkZRSjZGbm95TmUyNTlRdmpsQ294R2REUTdNWkxMREJiNUdJc1FM?= =?utf-8?B?aWI2Q1VHS1l6c05ieThTWFNlUFBnbFVUOVlFa3htcUwrNitQTkpYUzREWXcv?= =?utf-8?B?cURrOGZRbjNTWWVWWVNTTmpTUDhmOSt2MGNrVjZpdzhxL1BmMENBQ3d5M1B3?= =?utf-8?B?WG01UzBJeVhJc0dOSzAwZHZiTUtKdHFxVHlGTWJ5TEJDenFJZmEzb3p1Ulp5?= =?utf-8?B?Zzg2K1pCYXh4SlhkZmNKdGpsck1VRUtramlwUTFBSTRieW5jRWJISGlIbzhw?= =?utf-8?B?ZXpSbmpXeUlIVzAxdHF3cUlhMnpVV2V3SWRLQStwdXZPMzNGZXJiQlRjcEFp?= =?utf-8?B?M0huMTVCKytsOE50WkZwT0ZMc25WQUdnaFkwMFYrNXNWWDR0eHVxK0dPb1ll?= =?utf-8?B?MVZlcWxYd25xV2IycHIzMFBtRzdUQTFHVm9hZmN4RXlJUm9NRUc1YVNla2NZ?= =?utf-8?B?b2xvUjIxVFJ0d2VPVDhiUUt5bUlOQUM3MUFWT285QndKaUFLczZhQXdXeThQ?= =?utf-8?B?QXRzQlQzRnpTKzVyYzBETW5waWxGanJOU3hkU09sek1oZG1JWHp0R1plaVNv?= =?utf-8?B?bTBOZytuZ0wvblBkTE4wdHRsQ0FjdXNYZk9MYzZiQy9UYWgrZ1RuRk1qMmw2?= =?utf-8?B?czRKYk9ydUJ1L2hOOWZ1Um1rZS9KWk53VUZRWUd3aDBuMHU1a1MzbE1vQmZM?= =?utf-8?B?VnBVUUlHYURBT2dZZWd4ZFpBNThYNVJ1Nk02UnhnbjdOOGRFSmxVY2FsNFE5?= =?utf-8?B?UDg0bUovNUNxT2VFUCtGUGVEVUFlQWh0b3kwWHljMHMrWXo1Mk9Vazh4ZVl6?= =?utf-8?B?NW5JdVRWQUltNy9JcjgxdzRkem9nTVpadnA0dE4rbHE0RjNwS3pnbCttYXJa?= =?utf-8?B?R3N6N1VMb0dYcnpHR2VmUHN6M3Z1SFpNOWJwOEphVGw3TEZkWDBvL1p0N1c0?= =?utf-8?B?VFJoUmNIeERBWllnRVI1cllJZHVxcWdCOVZFdkt5bEhaYS9SQ0ZaZkI4blpY?= =?utf-8?B?S250bTNGUHFsYlhvNHluV01JWGJLTVZWSXZ3N1RwdllmMnN6TTNBRG93WU9y?= =?utf-8?B?RGpqYkgybi9LOGpPRDUzZEYwNGF2NzVSWEh5QWVleXhpNjRZK1pQVFNwUXhl?= =?utf-8?Q?0vgTGt4pS5I=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(376014)(366016)(1800799024)(7053199007)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?L1Q2dGtkcmhubFkyQ3RGa2RUZkkyOHVtSXZCOHd5SFhwK1YzZmhld3JrUFdD?= =?utf-8?B?S1NobTVFUDExWjAvUldYNUVvS0xEWHl0NFpEYUpRN0YzV2QzQit5ZDgyNVZF?= =?utf-8?B?ZE1qUW1qaTJ2N2FjblVNNGlpVHlQK3Q1SjRjbGo4ZnVUMmE2c2g1YnFqT3Nv?= =?utf-8?B?YWE4QlRtTy9ob2RZcUlMUHhzdnJ4TzZQK2pLWU0xYm5zMmQ2aDhRNEN5Q21x?= =?utf-8?B?elR2WENpYXl6SEhRbVBvaGFlYThUamVFOW5ZM2h6cmpIU3B1TCtJUmd0dEpu?= =?utf-8?B?Q0V2UFFVSzcxZjJ3dWJzaUo4b2daMWgyUDY2bzREY3h0ODZ1bldyck1qUmVn?= =?utf-8?B?QnlrWEZ4eVZXRzVWTWlYaHd4Q01YYWpzdkc3NzBTdkd0SWw3L01aY2FmbXNm?= =?utf-8?B?YWlGbG1xZ3k1SGtHMHpMN20rckVVUDlBV1NXaXN1dWF2Y3hySHp4NUN4VFhN?= =?utf-8?B?MnZUNGRJdi9kMVk4THdSL2RqY2NKaU1zT1N0NFozS1ZUbXlMVndjNzNoaEM0?= =?utf-8?B?d2VlSjRWMWt3aHNObmtob3Rpb1ZCNURvaTE0TE94N2Zqd2hkdEFyTGRLbnRL?= =?utf-8?B?c2dSTC9Ka3A4R1ZLMldqNTE0cEV5Unk1MGQ3K0w0UFZFdU5IZzVnK0JMK0do?= =?utf-8?B?SGJBank3b3ZibHBIeXJJMmRzUURwV1BzbXJsdWtrYXZsYnY5eWJCTC96Wm5m?= =?utf-8?B?YXExdDc2Mm9TZmV1UUttQmhCd2VMQTdhYkFJYkJQMnpFcXRwc05mVktUcXdD?= =?utf-8?B?WmhVcUJoNkRlVk02RTUvVGt6ZStjSWw5RVlFZjUzNVRERmxLalpqbHJ6b2V0?= =?utf-8?B?Vm9sbTQwYVQ0Y2x5OEpjTGdBcDdpZWNJZUMzWjVFUDlyNnV0VktROUVRTEVt?= =?utf-8?B?SmoyeHlnc0J2TThyVXJDejJiUk5tUFJwUkdWOEFZS3BaSWFlL1ZFNmJvRklv?= =?utf-8?B?VXhiTHVKbFVOR1VwZXpiWDdkY3MxN1JFNndublpBZVBQc1lJeWR2dGs4VmZP?= =?utf-8?B?TlE1Y0FxaU1nMm4zaGdmQy9YQUhMeFg3UEE5aXp4VG03YWpyalE0WVhNOHE2?= =?utf-8?B?MVQ0dDJ0eUpUcnJWNWJiMkpVNU4rN0Z4S092RzJHK1h4NFNvdnFrT055ME5E?= =?utf-8?B?TncyU2dMRTBTbjFIdzBtcHlKZ0F3MXIrRHA4RzN4cWNWRjA4bXpIUlljVjZJ?= =?utf-8?B?ZlI5V25kSDJLOUlNTWdRcWg3U200YWNGdjRkSkc0VHl3SXFTc1J0ZDRrTXRQ?= =?utf-8?B?SHNjMy84ZGhjZXRuZjdNRWEzcXdrWStxMjloNGF1TDk4RjhiNTIzNGh1cml3?= =?utf-8?B?MzYyZ1VlWkt4QnI2RlpucW5tdDVVMncrcWRocXQ0cFJ6bWNDNW5QOS9PZG5D?= =?utf-8?B?RFJNVXB0QXJ4elJnb3ErR2xPS0pqNE1YeHNoSU02dXNtaEhXSzRtY0pKY1NI?= =?utf-8?B?MDU3R0ZFQ21tVVlhNGFpbTR3TWZjcmE2YUxTempWZEhmU0lKNkEwZkRZUUlZ?= =?utf-8?B?VGpwRFJ3YTRvQndjUnJXY2ZVdWJLeVB6MFAzN29tRVgyUkNRQUpCV1FnUFBm?= =?utf-8?B?eVRWcHM2aUVSM3VRVUxKOHlnUnhCUkNtZHhneFNYVHpWZ3B2V3pWL01BTzRU?= =?utf-8?B?RittcXdnZURBNXJTUUxOQytwcFRQejZiai9qRzhtUGZ3eGt1a1pJaURyVnAy?= =?utf-8?B?aEpKdTU3ZUNDb0pSNTJtMDNaMHZZL2JWWkwrLzM0dy9JUUtYb0tUZVRqVDV0?= =?utf-8?B?eE5PRXVlemx1T0NjZk1Oamswc25rR1R0SjdJaEJVYjFFbXF6d0FjanloTGl2?= =?utf-8?B?bWlnS0NseDEvZFdMSCtRa1NMRytjMFVabVB6aElzeDhQU3VPeTRoRFA4alpi?= =?utf-8?B?ZTVoR096MjM2bnR6cHlKNTlQVW5taVpRbW52K0g4Z3JXc2t3R25KUzY4Z0Vy?= =?utf-8?B?OVBib3FNZ3d5eS9lVnhheGNnWGx0YjN3M2NmVzJoTWU2R1VRVklseVBBL1BV?= =?utf-8?B?b1RLekhPVmNEcXFVZVNjQ09qQ3RuSGlrZStCZzAwOXZDT1NlRGdENjVHZU9L?= =?utf-8?B?eUJDSktyc2xkNC9ndWlFN1RKY21ibURlS2Z4eG14QWd4TGxIa3FCbDd6b3Nt?= =?utf-8?Q?Qimbu5T3bvSWPDiJbdX1pmhj4?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: aac40011-acc1-4be7-6c9f-08ddb4d1b47c X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jun 2025 16:51:33.0516 (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: gacWBn4f8Xl0duFUqfrDNTKWz+jVi95fPazDkb0uDqujkGC/y/XWX8rDGDMacMuvK6oW7hehgDMBoBXjgDMrLw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8290 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250626_095137_379306_F4F0DC75 X-CRM114-Status: GOOD ( 21.57 ) X-BeenThere: linux-i3c@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-i3c" Errors-To: linux-i3c-bounces+linux-i3c=archiver.kernel.org@lists.infradead.org T24gVGh1LCBKdW4gMjYsIDIwMjUgYXQgMTI6MDc6MzdQTSArMDIwMCwgSm9yZ2UgTWFycXVlcyB3 cm90ZToKPiBBZGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgSTNDIENvbnRyb2xsZXIgSVAs IGFuIEFYSS1pbnRlcmZhY2VkIElQCj4gY29yZSB0aGF0IHN1cHBvcnRzIEkzQyBhbmQgSTJDIGRl dmljZXMsIG11bHRpcGxlIHNwZWVkLWdyYWRlcyBhbmQKPiBJM0MgSUJJcy4KPgo+IFNpZ25lZC1v ZmYtYnk6IEpvcmdlIE1hcnF1ZXMgPGpvcmdlLm1hcnF1ZXNAYW5hbG9nLmNvbT4KPiAtLS0KPiAg TUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKPiAgZHJpdmVycy9p M2MvbWFzdGVyL0tjb25maWcgICAgICAgICAgfCAgIDExICsKPiAgZHJpdmVycy9pM2MvbWFzdGVy L01ha2VmaWxlICAgICAgICAgfCAgICAxICsKPiAgZHJpdmVycy9pM2MvbWFzdGVyL2FkaS1pM2Mt bWFzdGVyLmMgfCAxMDE3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDQg ZmlsZXMgY2hhbmdlZCwgMTAzMCBpbnNlcnRpb25zKCspCj4KPiBkaWZmIC0tZ2l0IGEvTUFJTlRB SU5FUlMgYi9NQUlOVEFJTkVSUwo+IGluZGV4IDZmNTZlMTdkY2VjZjkwMmM2ODEyODI3YzFlYzNl MDY3YzY1ZTk4OTQuLjllYjViNmMzMjc1OTA3MjVkMTY0MWZkNGI3M2U0OGZjMWQxYTM5NTQgMTAw NjQ0Cj4gLS0tIGEvTUFJTlRBSU5FUlMKPiArKysgYi9NQUlOVEFJTkVSUwo+IEBAIC0xMTI0Nyw2 ICsxMTI0Nyw3IEBAIEkzQyBEUklWRVIgRk9SIEFOQUxPRyBERVZJQ0VTIEkzQyBDT05UUk9MTEVS IElQCj4gIE06CUpvcmdlIE1hcnF1ZXMgPGpvcmdlLm1hcnF1ZXNAYW5hbG9nLmNvbT4KPiAgUzoJ TWFpbnRhaW5lZAo+ICBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTNjL2Fk aSxpM2MtbWFzdGVyLnlhbWwKPiArRjoJZHJpdmVycy9pM2MvbWFzdGVyL2FkaS1pM2MtbWFzdGVy LmMKPgo+ICBJM0MgRFJJVkVSIEZPUiBDQURFTkNFIEkzQyBNQVNURVIgSVAKPiAgTToJUHJ6ZW15 c8WCYXcgR2FqIDxwZ2FqQGNhZGVuY2UuY29tPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2kzYy9t YXN0ZXIvS2NvbmZpZyBiL2RyaXZlcnMvaTNjL21hc3Rlci9LY29uZmlnCj4gaW5kZXggN2IzMGRi MzI1M2FmOWQ1YzZhZWU2NTQ0YzA2MGU0OTFiZmJlYjY0My4uMzI4YjcxNDVjZGVmYTIwZTcwOGVi ZmEzMzgzZTg0OWNlNTFjNWE3MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2kzYy9tYXN0ZXIvS2Nv bmZpZwo+ICsrKyBiL2RyaXZlcnMvaTNjL21hc3Rlci9LY29uZmlnCj4gQEAgLTEsNCArMSwxNSBA QAo+ICAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiArY29uZmlnIEFE SV9JM0NfTUFTVEVSCj4gKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgSTNDIG1hc3RlciBkcml2 ZXIiCj4gKwlkZXBlbmRzIG9uIEhBU19JT01FTQo+ICsJaGVscAo+ICsJICBTdXBwb3J0IGZvciBB bmFsb2cgRGV2aWNlcyBJM0MgQ29udHJvbGxlciBJUCwgYW4gQVhJLWludGVyZmFjZWQgSVAKPiAr CSAgY29yZSB0aGF0IHN1cHBvcnRzIEkzQyBhbmQgSTJDIGRldmljZXMsIG11bHRpcGxlIHNwZWVk LWdyYWRlcyBhbmQKPiArCSAgSTNDIElCSXMuCj4gKwo+ICsJICBUaGlzIGRyaXZlciBjYW4gYWxz byBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCj4gKwkgIHdpbGwgYmUg Y2FsbGVkIGFkaS1pM2MtbWFzdGVyLgo+ICsKPiAgY29uZmlnIENETlNfSTNDX01BU1RFUgo+ICAJ dHJpc3RhdGUgIkNhZGVuY2UgSTNDIG1hc3RlciBkcml2ZXIiCj4gIAlkZXBlbmRzIG9uIEhBU19J T01FTQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2kzYy9tYXN0ZXIvTWFrZWZpbGUgYi9kcml2ZXJz L2kzYy9tYXN0ZXIvTWFrZWZpbGUKPiBpbmRleCAzZTk3OTYwMTYwYmM4NWU1ZWFmMjk2NmVjMGMz ZmFlNDU4YzI3MTFlLi42Y2M0ZjRiNzNlN2JkYzIwNmI2OGM3NTAzOTBmOWMzY2MyY2NiMTk5IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvaTNjL21hc3Rlci9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMv aTNjL21hc3Rlci9NYWtlZmlsZQo+IEBAIC0xLDQgKzEsNSBAQAo+ICAjIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiArb2JqLSQoQ09ORklHX0FESV9JM0NfTUFTVEVSKQkJ Kz0gYWRpLWkzYy1tYXN0ZXIubwo+ICBvYmotJChDT05GSUdfQ0ROU19JM0NfTUFTVEVSKQkJKz0g aTNjLW1hc3Rlci1jZG5zLm8KPiAgb2JqLSQoQ09ORklHX0RXX0kzQ19NQVNURVIpCQkrPSBkdy1p M2MtbWFzdGVyLm8KPiAgb2JqLSQoQ09ORklHX0FTVDI2MDBfSTNDX01BU1RFUikJKz0gYXN0MjYw MC1pM2MtbWFzdGVyLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2MvbWFzdGVyL2FkaS1pM2Mt bWFzdGVyLmMgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvYWRpLWkzYy1tYXN0ZXIuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uN2U0ZGFjNGZiMTY1NTNiMGNiYjY2N2Q1MDNjNjVjYzkxODdiOTJiZQo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvYWRpLWkzYy1tYXN0ZXIuYwo+IEBAIC0w LDAgKzEsMTAxNyBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5 Cj4gKy8qCj4gKyAqIEkzQyBDb250cm9sbGVyIGRyaXZlcgo+ICsgKiBDb3B5cmlnaHQgMjAyNSBB bmFsb2cgRGV2aWNlcyBJbmMuCj4gKyAqIEF1dGhvcjogSm9yZ2UgTWFycXVlcyA8am9yZ2UubWFy cXVlc0BhbmFsb2cuY29tPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4K PiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4K PiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ICsjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KPiAr I2luY2x1ZGUgPGxpbnV4L2ZwZ2EvYWRpLWF4aS1jb21tb24uaD4KPiArI2luY2x1ZGUgPGxpbnV4 L2kzYy9tYXN0ZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ICsjaW5jbHVk ZSA8bGludXgvaW8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8 bGludXgvb2YuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsKPiAr I2luY2x1ZGUgIi4uL2ludGVybmFscy5oIgo+ICsKPiArI2RlZmluZSBNQVhfREVWUwkJCTE2Cgpu YW1lIGlzIHRvbyBzaG9ydCBhbmQgcXVpdGUgY29tbW9uLCBJIHdvcnJ5IGFib3V0IGNvbmZsaWN0 IHdpdGggb3RoZXIKZGVmaW5lIGluIGZ1dHVyZS4gIENhbiB5b3UgdXNlIEFESV9NQVhfREVWUz8K Cj4gKwo+ICsjZGVmaW5lIFJFR19FTkFCTEUJCQkweDA0MAo+ICsKPiArI2RlZmluZSBSRUdfUElE X0wJCQkweDA1NAo+ICsjZGVmaW5lIFJFR19QSURfSAkJCTB4MDU4Cj4gKyNkZWZpbmUgUkVHX0RD Ul9CQ1JfREEJCQkweDA1Qwo+ICsjZGVmaW5lICAgUkVHX0RDUl9CQ1JfREFfR0VUX0RBKHgpCUZJ RUxEX0dFVChHRU5NQVNLKDIyLCAxNiksICh4KSkKPiArI2RlZmluZSAgIFJFR19EQ1JfQkNSX0RB X0dFVF9CQ1IoeCkJRklFTERfR0VUKEdFTk1BU0soMTUsIDgpLCAoeCkpCj4gKyNkZWZpbmUgICBS RUdfRENSX0JDUl9EQV9HRVRfRENSKHgpCUZJRUxEX0dFVChHRU5NQVNLKDcsIDApLCAoeCkpCj4g Kwo+ICsjZGVmaW5lIFJFR19JUlFfTUFTSwkJCTB4MDgwCj4gKyNkZWZpbmUgUkVHX0lSUV9QRU5E SU5HCQkJMHgwODQKPiArI2RlZmluZSAgIFJFR19JUlFfUEVORElOR19EQUEJCUJJVCg3KQo+ICsj ZGVmaW5lICAgUkVHX0lSUV9QRU5ESU5HX0lCSQkJQklUKDYpCj4gKyNkZWZpbmUgICBSRUdfSVJR X1BFTkRJTkdfQ01EUgkJQklUKDUpCj4gKwo+ICsjZGVmaW5lIFJFR19DTURfRklGTwkJCTB4MGQ0 Cj4gKyNkZWZpbmUgICBSRUdfQ01EX0ZJRk9fMF9JU19DQ0MJCUJJVCgyMikKPiArI2RlZmluZSAg IFJFR19DTURfRklGT18wX0JDQVNUCQlCSVQoMjEpCj4gKyNkZWZpbmUgICBSRUdfQ01EX0ZJRk9f MF9TUgkJQklUKDIwKQo+ICsjZGVmaW5lICAgUkVHX0NNRF9GSUZPXzBfTEVOKGwpCQlGSUVMRF9Q UkVQKEdFTk1BU0soMTksIDgpLCAobCkpCj4gKyNkZWZpbmUgICBSRUdfQ01EX0ZJRk9fMF9ERVZf QUREUihhKQlGSUVMRF9QUkVQKEdFTk1BU0soNywgMSksIGEpCgpEb2VzIGNoZWNrIHBhdGNoIGNv bXBsYWluIG1pc3MgKCkgYXQgJ2EnCgo+ICsjZGVmaW5lICAgUkVHX0NNRF9GSUZPXzBfUk5XCQlC SVQoMCkKPiArI2RlZmluZSAgIFJFR19DTURfRklGT18xX0NDQyhpZCkJRklFTERfUFJFUChHRU5N QVNLKDcsIDApLCAoaWQpKQo+ICsKPiArI2RlZmluZSBSRUdfQ01EX0ZJRk9fUk9PTQkJMHgwYzAK PiArI2RlZmluZSBSRUdfQ01EUl9GSUZPCQkJMHgwZDgKPiArI2RlZmluZSAgIFJFR19DTURSX0ZJ Rk9fVURBX0VSUk9SCTgKPiArI2RlZmluZSAgIFJFR19DTURSX0ZJRk9fTkFDS19SRVNQCTYKPiAr I2RlZmluZSAgIFJFR19DTURSX0ZJRk9fQ0UyX0VSUk9SCTQKPiArI2RlZmluZSAgIFJFR19DTURS X0ZJRk9fQ0UwX0VSUk9SCTEKPiArI2RlZmluZSAgIFJFR19DTURSX0ZJRk9fTk9fRVJST1IJMAo+ ICsjZGVmaW5lICAgUkVHX0NNRFJfRklGT19FUlJPUih4KQlGSUVMRF9HRVQoR0VOTUFTSygyMywg MjApLCAoeCkpCj4gKyNkZWZpbmUgICBSRUdfQ01EUl9GSUZPX1hGRVJfQllURVMoeCkJRklFTERf R0VUKEdFTk1BU0soMTksIDgpLCAoeCkpCj4gKwo+ICsjZGVmaW5lIFJFR19TRE9fRklGTwkJCTB4 MGRjCj4gKyNkZWZpbmUgUkVHX1NET19GSUZPX1JPT00JCTB4MGM4Cj4gKyNkZWZpbmUgUkVHX1NE SV9GSUZPCQkJMHgwZTAKPiArI2RlZmluZSBSRUdfSUJJX0ZJRk8JCQkweDBlNAo+ICsjZGVmaW5l IFJFR19GSUZPX1NUQVRVUwkJCTB4MGU4Cj4gKyNkZWZpbmUgICBSRUdfRklGT19TVEFUVVNfQ01E Ul9FTVBUWQlCSVQoMCkKPiArI2RlZmluZSAgIFJFR19GSUZPX1NUQVRVU19JQklfRU1QVFkJQklU KDEpCj4gKwo+ICsjZGVmaW5lIFJFR19PUFMJCQkJMHgxMDAKPiArI2RlZmluZSAgIFJFR19PUFNf UFBfU0dfTUFTSwkJR0VOTUFTSyg2LCA1KQo+ICsjZGVmaW5lICAgUkVHX09QU19TRVRfU0coeCkJ CUZJRUxEX1BSRVAoUkVHX09QU19QUF9TR19NQVNLLCAoeCkpCj4gKwo+ICsjZGVmaW5lIFJFR19J QklfQ09ORklHCQkJMHgxNDAKPiArI2RlZmluZSAgIFJFR19JQklfQ09ORklHX0VOQUJMRQkJQklU KDApCj4gKyNkZWZpbmUgICBSRUdfSUJJX0NPTkZJR19MSVNURU4JCUJJVCgxKQo+ICsKPiArI2Rl ZmluZSBSRUdfREVWX0NIQVIJCQkweDE4MAo+ICsjZGVmaW5lICAgUkVHX0RFVl9DSEFSX0lTX0ky QwkJQklUKDApCj4gKyNkZWZpbmUgICBSRUdfREVWX0NIQVJfSVNfQVRUQUNIRUQJQklUKDEpCj4g KyNkZWZpbmUgICBSRUdfREVWX0NIQVJfQkNSX0lCSSh4KQlGSUVMRF9QUkVQKEdFTk1BU0soMywg MiksICh4KSkKPiArI2RlZmluZSAgIFJFR19ERVZfQ0hBUl9XRU4JCUJJVCg4KQo+ICsjZGVmaW5l ICAgUkVHX0RFVl9DSEFSX0FERFIoeCkJCUZJRUxEX1BSRVAoR0VOTUFTSygxNSwgOSksICh4KSkK PiArCj4gK2VudW0gc3BlZWRfZ3JhZGUge1BQX1NHX1VOU0VULCBQUF9TR18xTUhaLCBQUF9TR18z TUhaLCBQUF9TR182TUhaLCBQUF9TR18xMk1IWn07CgphZGQgZW1wdHkgbGluZSBoZXJlCgo+ICtz dHJ1Y3QgYWRpX2kzY19jbWQgewo+ICsJdTMyIGNtZDA7Cj4gKwl1MzIgY21kMTsKPiArCXUzMiB0 eF9sZW47Cj4gKwljb25zdCB2b2lkICp0eF9idWY7Cj4gKwl1MzIgcnhfbGVuOwo+ICsJdm9pZCAq cnhfYnVmOwo+ICsJdTMyIGVycm9yOwo+ICt9Owo+ICsKPiArc3RydWN0IGFkaV9pM2NfeGZlciB7 Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cj4gKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOwo+ ICsJaW50IHJldDsKPiArCXVuc2lnbmVkIGludCBuY21kczsKPiArCXVuc2lnbmVkIGludCBuY21k c19jb21wOwo+ICsJc3RydWN0IGFkaV9pM2NfY21kIGNtZHNbXSBfX2NvdW50ZWRfYnkobmNtZHMp Owo+ICt9Owo+ICsKPiArc3RydWN0IGFkaV9pM2NfbWFzdGVyIHsKPiArCXN0cnVjdCBpM2NfbWFz dGVyX2NvbnRyb2xsZXIgYmFzZTsKPiArCXUzMiBmcmVlX3JyX3Nsb3RzOwo+ICsJc3RydWN0IHsK PiArCQl1bnNpZ25lZCBpbnQgbnVtX3Nsb3RzOwo+ICsJCXN0cnVjdCBpM2NfZGV2X2Rlc2MgKipz bG90czsKPiArCQlzcGlubG9ja190IGxvY2s7IC8qIFByb3RlY3QgSUJJIHNsb3QgYWNjZXNzICov Cj4gKwl9IGliaTsKPiArCXN0cnVjdCB7Cj4gKwkJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+ICsJ CXN0cnVjdCBhZGlfaTNjX3hmZXIgKmN1cjsKPiArCQlzcGlubG9ja190IGxvY2s7IC8qIFByb3Rl Y3QgdHJhbnNmZXIgKi8KPiArCX0geGZlcnF1ZXVlOwo+ICsJdm9pZCBfX2lvbWVtICpyZWdzOwo+ ICsJc3RydWN0IGNsayAqY2xrOwo+ICsJdW5zaWduZWQgbG9uZyBpM2Nfc2NsX2xpbTsKPiArCXN0 cnVjdCB7Cj4gKwkJdTggYWRkcnNbTUFYX0RFVlNdOwo+ICsJCXU4IGluZGV4Owo+ICsJfSBkYWE7 Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGlfaTNjX21hc3RlciAqdG9fYWRp X2kzY19tYXN0ZXIoc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbWFzdGVyKQo+ICt7Cj4g KwlyZXR1cm4gY29udGFpbmVyX29mKG1hc3Rlciwgc3RydWN0IGFkaV9pM2NfbWFzdGVyLCBiYXNl KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJfd3JfdG9fdHhfZmlmbyhz dHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciwKPiArCQkJCQkgY29uc3QgdTggKmJ1ZiwgdW5z aWduZWQgaW50IG5ieXRlcykKPiArewo+ICsJdW5zaWduZWQgaW50IG4sIG07Cj4gKwo+ICsJbiA9 IHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19TRE9fRklGT19ST09NKTsKPiArCW0gPSBtaW4obiwg bmJ5dGVzKTsKPiArCWkzY193cml0ZWxfZmlmbyhtYXN0ZXItPnJlZ3MgKyBSRUdfU0RPX0ZJRk8s IGJ1ZiwgbmJ5dGVzKTsKCllvdSBuZWVkIG1lbnRpb24gYXQgY292ZXIgbGV0dGVyIG9yIHNvbWUg cGxhY2UsICBkZXBlbmRlbnQgb24KaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtaTNjLzIw MjUwNjIyLWkzYy13cml0ZXNsLXJlYWRzbC12Mi0wLTJhZmQzNGVjNjMwNkBhbmFsb2cuY29tL1Qv I3QKCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFzdGVyX3JkX2Zyb21fcnhfZmlm byhzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciwKPiArCQkJCQkgICB1OCAqYnVmLCB1bnNp Z25lZCBpbnQgbmJ5dGVzKQo+ICt7Cj4gKwlpM2NfcmVhZGxfZmlmbyhtYXN0ZXItPnJlZ3MgKyBS RUdfU0RJX0ZJRk8sIGJ1ZiwgbmJ5dGVzKTsKPiArfQoKSSB0aGluayB5b3UgY2FuIGRpcmVjdCB1 c2UgaTNjX3JlYWRsX2ZpZm8oKSB3aXRob3V0IHdyYXAKYWRpX2kzY19tYXN0ZXJfcmRfZnJvbV9y eF9maWZvKCkuCgo+ICsKPiArc3RhdGljIGJvb2wgYWRpX2kzY19tYXN0ZXJfc3VwcG9ydHNfY2Nj X2NtZChzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptLAo+ICsJCQkJCSAgICBjb25zdCBz dHJ1Y3QgaTNjX2NjY19jbWQgKmNtZCkKPiArewo+ICsJaWYgKGNtZC0+bmRlc3RzID4gMSkKPiAr CQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJc3dpdGNoIChjbWQtPmlkKSB7Cj4gKwljYXNlIEkzQ19D Q0NfRU5FQyh0cnVlKToKPiArCWNhc2UgSTNDX0NDQ19FTkVDKGZhbHNlKToKPiArCWNhc2UgSTND X0NDQ19ESVNFQyh0cnVlKToKPiArCWNhc2UgSTNDX0NDQ19ESVNFQyhmYWxzZSk6Cj4gKwljYXNl IEkzQ19DQ0NfUlNUREFBKHRydWUpOgo+ICsJY2FzZSBJM0NfQ0NDX1JTVERBQShmYWxzZSk6Cj4g KwljYXNlIEkzQ19DQ0NfRU5UREFBOgo+ICsJY2FzZSBJM0NfQ0NDX1NFVERBU0E6Cj4gKwljYXNl IEkzQ19DQ0NfU0VUTkVXREE6Cj4gKwljYXNlIEkzQ19DQ0NfR0VUTVdMOgo+ICsJY2FzZSBJM0Nf Q0NDX0dFVE1STDoKPiArCWNhc2UgSTNDX0NDQ19HRVRQSUQ6Cj4gKwljYXNlIEkzQ19DQ0NfR0VU QkNSOgo+ICsJY2FzZSBJM0NfQ0NDX0dFVERDUjoKPiArCWNhc2UgSTNDX0NDQ19HRVRTVEFUVVM6 Cj4gKwljYXNlIEkzQ19DQ0NfR0VUSERSQ0FQOgo+ICsJCXJldHVybiB0cnVlOwo+ICsJZGVmYXVs dDoKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgYWRpX2kzY19tYXN0ZXJfZGlzYWJsZShzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1h c3RlcikKPiArewo+ICsJd3JpdGVsKDAsIG1hc3Rlci0+cmVncyArIFJFR19JQklfQ09ORklHKTsK PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBhZGlfaTNjX3hmZXIg KmFkaV9pM2NfbWFzdGVyX2FsbG9jX3hmZXIoc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIs Cj4gKwkJCQkJCSAgICAgIHVuc2lnbmVkIGludCBuY21kcykKPiArewo+ICsJc3RydWN0IGFkaV9p M2NfeGZlciAqeGZlcjsKPiArCj4gKwl4ZmVyID0ga3phbGxvYyhzdHJ1Y3Rfc2l6ZSh4ZmVyLCBj bWRzLCBuY21kcyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCF4ZmVyKQo+ICsJCXJldHVybiBOVUxM Owo+ICsKPiArCUlOSVRfTElTVF9IRUFEKCZ4ZmVyLT5ub2RlKTsKPiArCXhmZXItPm5jbWRzID0g bmNtZHM7Cj4gKwl4ZmVyLT5yZXQgPSAtRVRJTUVET1VUOwo+ICsKPiArCXJldHVybiB4ZmVyOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl9zdGFydF94ZmVyX2xvY2tlZChz dHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlcikKPiArewo+ICsJc3RydWN0IGFkaV9pM2NfeGZl ciAqeGZlciA9IG1hc3Rlci0+eGZlcnF1ZXVlLmN1cjsKPiArCXVuc2lnbmVkIGludCBpLCBuLCBt Owo+ICsKPiArCWlmICgheGZlcikKPiArCQlyZXR1cm47Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8 IHhmZXItPm5jbWRzOyBpKyspIHsKPiArCQlzdHJ1Y3QgYWRpX2kzY19jbWQgKmNtZCA9ICZ4ZmVy LT5jbWRzW2ldOwo+ICsKPiArCQlpZiAoIShjbWQtPmNtZDAgJiBSRUdfQ01EX0ZJRk9fMF9STlcp KQo+ICsJCQlhZGlfaTNjX21hc3Rlcl93cl90b190eF9maWZvKG1hc3RlciwgY21kLT50eF9idWYs IGNtZC0+dHhfbGVuKTsKPiArCX0KPiArCj4gKwluID0gcmVhZGwobWFzdGVyLT5yZWdzICsgUkVH X0NNRF9GSUZPX1JPT00pOwo+ICsJZm9yIChpID0gMDsgaSA8IHhmZXItPm5jbWRzOyBpKyspIHsK PiArCQlzdHJ1Y3QgYWRpX2kzY19jbWQgKmNtZCA9ICZ4ZmVyLT5jbWRzW2ldOwo+ICsKPiArCQlt ID0gY21kLT5jbWQwICYgUkVHX0NNRF9GSUZPXzBfSVNfQ0NDID8gMiA6IDE7Cj4gKwkJaWYgKG0g PiBuKQo+ICsJCQlicmVhazsKPiArCQl3cml0ZWwoY21kLT5jbWQwLCBtYXN0ZXItPnJlZ3MgKyBS RUdfQ01EX0ZJRk8pOwo+ICsJCWlmIChjbWQtPmNtZDAgJiBSRUdfQ01EX0ZJRk9fMF9JU19DQ0Mp Cj4gKwkJCXdyaXRlbChjbWQtPmNtZDEsIG1hc3Rlci0+cmVncyArIFJFR19DTURfRklGTyk7Cj4g KwkJbiAtPSBtOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl9l bmRfeGZlcl9sb2NrZWQoc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIsCj4gKwkJCQkJICAg dTMyIHBlbmRpbmcpCj4gK3sKPiArCXN0cnVjdCBhZGlfaTNjX3hmZXIgKnhmZXIgPSBtYXN0ZXIt PnhmZXJxdWV1ZS5jdXI7Cj4gKwlpbnQgaSwgcmV0ID0gMDsKPiArCj4gKwlpZiAoIXhmZXIpCj4g KwkJcmV0dXJuOwo+ICsKPiArCXdoaWxlICghKHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19GSUZP X1NUQVRVUykgJiBSRUdfRklGT19TVEFUVVNfQ01EUl9FTVBUWSkpIHsKPiArCQlzdHJ1Y3QgYWRp X2kzY19jbWQgKmNtZDsKPiArCQl1MzIgY21kciwgcnhfbGVuOwo+ICsKPiArCQljbWRyID0gcmVh ZGwobWFzdGVyLT5yZWdzICsgUkVHX0NNRFJfRklGTyk7Cj4gKwo+ICsJCWNtZCA9ICZ4ZmVyLT5j bWRzW3hmZXItPm5jbWRzX2NvbXArK107Cj4gKwkJaWYgKGNtZC0+Y21kMCAmIFJFR19DTURfRklG T18wX1JOVykgewo+ICsJCQlyeF9sZW4gPSBtaW5fdCh1MzIsIFJFR19DTURSX0ZJRk9fWEZFUl9C WVRFUyhjbWRyKSwgY21kLT5yeF9sZW4pOwo+ICsJCQlhZGlfaTNjX21hc3Rlcl9yZF9mcm9tX3J4 X2ZpZm8obWFzdGVyLCBjbWQtPnJ4X2J1ZiwgcnhfbGVuKTsKPiArCQl9Cj4gKwkJY21kLT5lcnJv ciA9IFJFR19DTURSX0ZJRk9fRVJST1IoY21kcik7Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDsg aSA8IHhmZXItPm5jbWRzX2NvbXA7IGkrKykgewo+ICsJCXN3aXRjaCAoeGZlci0+Y21kc1tpXS5l cnJvcikgewo+ICsJCWNhc2UgUkVHX0NNRFJfRklGT19OT19FUlJPUjoKPiArCQkJYnJlYWs7Cj4g Kwo+ICsJCWNhc2UgUkVHX0NNRFJfRklGT19DRTBfRVJST1I6Cj4gKwkJY2FzZSBSRUdfQ01EUl9G SUZPX0NFMl9FUlJPUjoKPiArCQljYXNlIFJFR19DTURSX0ZJRk9fTkFDS19SRVNQOgo+ICsJCWNh c2UgUkVHX0NNRFJfRklGT19VREFfRVJST1I6Cj4gKwkJCXJldCA9IC1FSU87Cj4gKwkJCWJyZWFr Owo+ICsKPiArCQlkZWZhdWx0Ogo+ICsJCQlyZXQgPSAtRUlOVkFMOwo+ICsJCQlicmVhazsKPiAr CQl9Cj4gKwl9Cj4gKwo+ICsJeGZlci0+cmV0ID0gcmV0Owo+ICsKPiArCWlmICh4ZmVyLT5uY21k c19jb21wICE9IHhmZXItPm5jbWRzKQo+ICsJCXJldHVybjsKPiArCj4gKwljb21wbGV0ZSgmeGZl ci0+Y29tcCk7Cj4gKwo+ICsJeGZlciA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmbWFzdGVy LT54ZmVycXVldWUubGlzdCwKPiArCQkJCQlzdHJ1Y3QgYWRpX2kzY194ZmVyLCBub2RlKTsKPiAr CWlmICh4ZmVyKQo+ICsJCWxpc3RfZGVsX2luaXQoJnhmZXItPm5vZGUpOwo+ICsKPiArCW1hc3Rl ci0+eGZlcnF1ZXVlLmN1ciA9IHhmZXI7Cj4gKwlhZGlfaTNjX21hc3Rlcl9zdGFydF94ZmVyX2xv Y2tlZChtYXN0ZXIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl9xdWV1 ZV94ZmVyKHN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyLAo+ICsJCQkJICAgICAgc3RydWN0 IGFkaV9pM2NfeGZlciAqeGZlcikKPiArewo+ICsJaW5pdF9jb21wbGV0aW9uKCZ4ZmVyLT5jb21w KTsKPiArCWd1YXJkKHNwaW5sb2NrX2lycXNhdmUpKCZtYXN0ZXItPnhmZXJxdWV1ZS5sb2NrKTsK PiArCWlmIChtYXN0ZXItPnhmZXJxdWV1ZS5jdXIpIHsKPiArCQlsaXN0X2FkZF90YWlsKCZ4ZmVy LT5ub2RlLCAmbWFzdGVyLT54ZmVycXVldWUubGlzdCk7Cj4gKwl9IGVsc2Ugewo+ICsJCW1hc3Rl ci0+eGZlcnF1ZXVlLmN1ciA9IHhmZXI7Cj4gKwkJYWRpX2kzY19tYXN0ZXJfc3RhcnRfeGZlcl9s b2NrZWQobWFzdGVyKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYWRpX2kzY19tYXN0 ZXJfdW5xdWV1ZV94ZmVyKHN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyLAo+ICsJCQkJCXN0 cnVjdCBhZGlfaTNjX3hmZXIgKnhmZXIpCj4gK3sKPiArCWd1YXJkKHNwaW5sb2NrX2lycXNhdmUp KCZtYXN0ZXItPnhmZXJxdWV1ZS5sb2NrKTsKPiArCWlmIChtYXN0ZXItPnhmZXJxdWV1ZS5jdXIg PT0geGZlcikKPiArCQltYXN0ZXItPnhmZXJxdWV1ZS5jdXIgPSBOVUxMOwo+ICsJZWxzZQo+ICsJ CWxpc3RfZGVsX2luaXQoJnhmZXItPm5vZGUpOwo+ICsKPiArCXdyaXRlbCgweDAxLCBtYXN0ZXIt PnJlZ3MgKyBSRUdfRU5BQkxFKTsKPiArCXdyaXRlbCgweDAwLCBtYXN0ZXItPnJlZ3MgKyBSRUdf RU5BQkxFKTsKPiArCXdyaXRlbChSRUdfSVJRX1BFTkRJTkdfQ01EUiwgbWFzdGVyLT5yZWdzICsg UkVHX0lSUV9NQVNLKTsKPiArfQo+ICsKPiArc3RhdGljIGVudW0gaTNjX2Vycm9yX2NvZGUgYWRp X2kzY19jbWRfZ2V0X2VycihzdHJ1Y3QgYWRpX2kzY19jbWQgKmNtZCkKPiArewo+ICsJc3dpdGNo IChjbWQtPmVycm9yKSB7Cj4gKwljYXNlIFJFR19DTURSX0ZJRk9fQ0UwX0VSUk9SOgo+ICsJCXJl dHVybiBJM0NfRVJST1JfTTA7Cj4gKwo+ICsJY2FzZSBSRUdfQ01EUl9GSUZPX0NFMl9FUlJPUjoK PiArCWNhc2UgUkVHX0NNRFJfRklGT19OQUNLX1JFU1A6Cj4gKwkJcmV0dXJuIEkzQ19FUlJPUl9N MjsKPiArCj4gKwlkZWZhdWx0Ogo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCXJldHVybiBJM0Nf RVJST1JfVU5LTk9XTjsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9zZW5k X2NjY19jbWQoc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSwKPiArCQkJCSAgICAgICBz dHJ1Y3QgaTNjX2NjY19jbWQgKmNtZCkKPiArewo+ICsJc3RydWN0IGFkaV9pM2NfbWFzdGVyICpt YXN0ZXIgPSB0b19hZGlfaTNjX21hc3RlcihtKTsKPiArCXN0cnVjdCBhZGlfaTNjX3hmZXIgKnhm ZXIgX19mcmVlKGtmcmVlKSA9IE5VTEw7Cj4gKwlzdHJ1Y3QgYWRpX2kzY19jbWQgKmNjbWQ7Cj4g Kwo+ICsJeGZlciA9IGFkaV9pM2NfbWFzdGVyX2FsbG9jX3hmZXIobWFzdGVyLCAxKTsKPiArCWlm ICgheGZlcikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwljY21kID0geGZlci0+Y21kczsK PiArCWNjbWQtPmNtZDEgPSBSRUdfQ01EX0ZJRk9fMV9DQ0MoY21kLT5pZCk7Cj4gKwljY21kLT5j bWQwID0gUkVHX0NNRF9GSUZPXzBfSVNfQ0NDIHwKPiArCQkgICAgIFJFR19DTURfRklGT18wX0xF TihjbWQtPmRlc3RzWzBdLnBheWxvYWQubGVuKTsKPiArCj4gKwlpZiAoY21kLT5pZCAmIEkzQ19D Q0NfRElSRUNUKQo+ICsJCWNjbWQtPmNtZDAgfD0gUkVHX0NNRF9GSUZPXzBfREVWX0FERFIoY21k LT5kZXN0c1swXS5hZGRyKTsKPiArCj4gKwlpZiAoY21kLT5ybncpIHsKPiArCQljY21kLT5jbWQw IHw9IFJFR19DTURfRklGT18wX1JOVzsKPiArCQljY21kLT5yeF9idWYgPSBjbWQtPmRlc3RzWzBd LnBheWxvYWQuZGF0YTsKPiArCQljY21kLT5yeF9sZW4gPSBjbWQtPmRlc3RzWzBdLnBheWxvYWQu bGVuOwo+ICsJfSBlbHNlIHsKPiArCQljY21kLT50eF9idWYgPSBjbWQtPmRlc3RzWzBdLnBheWxv YWQuZGF0YTsKPiArCQljY21kLT50eF9sZW4gPSBjbWQtPmRlc3RzWzBdLnBheWxvYWQubGVuOwo+ ICsJfQo+ICsKPiArCWFkaV9pM2NfbWFzdGVyX3F1ZXVlX3hmZXIobWFzdGVyLCB4ZmVyKTsKPiAr CWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ4ZmVyLT5jb21wLCBtc2Vjc190b19q aWZmaWVzKDEwMDApKSkKPiArCQlhZGlfaTNjX21hc3Rlcl91bnF1ZXVlX3hmZXIobWFzdGVyLCB4 ZmVyKTsKPiArCj4gKwljbWQtPmVyciA9IGFkaV9pM2NfY21kX2dldF9lcnIoJnhmZXItPmNtZHNb MF0pOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkaV9pM2NfbWFz dGVyX3ByaXZfeGZlcnMoc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2LAo+ICsJCQkJICAgICBzdHJ1 Y3QgaTNjX3ByaXZfeGZlciAqeGZlcnMsCj4gKwkJCQkgICAgIGludCBueGZlcnMpCj4gK3sKPiAr CXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpM2NfZGV2X2dldF9tYXN0ZXIoZGV2 KTsKPiArCXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kzY19tYXN0ZXIo bSk7Cj4gKwlzdHJ1Y3QgYWRpX2kzY194ZmVyICp4ZmVyIF9fZnJlZShrZnJlZSkgPSBOVUxMOwo+ ICsJaW50IGksIHJldDsKPiArCj4gKwlpZiAoIW54ZmVycykKPiArCQlyZXR1cm4gMDsKPiArCj4g Kwl4ZmVyID0gYWRpX2kzY19tYXN0ZXJfYWxsb2NfeGZlcihtYXN0ZXIsIG54ZmVycyk7Cj4gKwlp ZiAoIXhmZXIpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG54 ZmVyczsgaSsrKSB7Cj4gKwkJc3RydWN0IGFkaV9pM2NfY21kICpjY21kID0gJnhmZXItPmNtZHNb aV07Cj4gKwo+ICsJCWNjbWQtPmNtZDAgPSBSRUdfQ01EX0ZJRk9fMF9ERVZfQUREUihkZXYtPmlu Zm8uZHluX2FkZHIpOwo+ICsKPiArCQlpZiAoeGZlcnNbaV0ucm53KSB7Cj4gKwkJCWNjbWQtPmNt ZDAgfD0gUkVHX0NNRF9GSUZPXzBfUk5XOwo+ICsJCQljY21kLT5yeF9idWYgPSB4ZmVyc1tpXS5k YXRhLmluOwo+ICsJCQljY21kLT5yeF9sZW4gPSB4ZmVyc1tpXS5sZW47Cj4gKwkJfSBlbHNlIHsK PiArCQkJY2NtZC0+dHhfYnVmID0geGZlcnNbaV0uZGF0YS5vdXQ7Cj4gKwkJCWNjbWQtPnR4X2xl biA9IHhmZXJzW2ldLmxlbjsKPiArCQl9Cj4gKwo+ICsJCWNjbWQtPmNtZDAgfD0gUkVHX0NNRF9G SUZPXzBfTEVOKHhmZXJzW2ldLmxlbik7Cj4gKwo+ICsJCWlmIChpIDwgbnhmZXJzIC0gMSkKPiAr CQkJY2NtZC0+Y21kMCB8PSBSRUdfQ01EX0ZJRk9fMF9TUjsKPiArCj4gKwkJaWYgKCFpKQo+ICsJ CQljY21kLT5jbWQwIHw9IFJFR19DTURfRklGT18wX0JDQVNUOwo+ICsJfQo+ICsKPiArCWFkaV9p M2NfbWFzdGVyX3F1ZXVlX3hmZXIobWFzdGVyLCB4ZmVyKTsKPiArCWlmICghd2FpdF9mb3JfY29t cGxldGlvbl90aW1lb3V0KCZ4ZmVyLT5jb21wLAo+ICsJCQkJCSBtc2Vjc190b19qaWZmaWVzKDEw MDApKSkKPiArCQlhZGlfaTNjX21hc3Rlcl91bnF1ZXVlX3hmZXIobWFzdGVyLCB4ZmVyKTsKPiAr Cj4gKwlyZXQgPSB4ZmVyLT5yZXQ7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG54ZmVyczsgaSsr KQo+ICsJCXhmZXJzW2ldLmVyciA9IGFkaV9pM2NfY21kX2dldF9lcnIoJnhmZXItPmNtZHNbaV0p Owo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0cnVjdCBhZGlfaTNjX2kyY19kZXZf ZGF0YSB7Cj4gKwl1MTYgaWQ7Cj4gKwlzMTYgaWJpOwo+ICsJc3RydWN0IGkzY19nZW5lcmljX2li aV9wb29sICppYmlfcG9vbDsKCmNhbiB5b3UgbW92ZSBpYmlfcG9vbCB0byBmaXN0IG9uZT8gaW4g NjRiaXQgc3lzdGVtLCBpdCBpcyBhbGlnbiB0byA4IGJ5dGUKc28gdGhlcmUgd2lsbCBiZSA0IGJ5 dGVzIGhvbGUgaW4gYWRpX2kzY19pMmNfZGV2X2RhdGEuCgo+ICt9Owo+ICsKPiArc3RhdGljIGlu dCBhZGlfaTNjX21hc3Rlcl9nZXRfcnJfc2xvdChzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3Rl ciwKPiArCQkJCSAgICAgIHU4IGR5bl9hZGRyKQo+ICt7Cj4gKwlpZiAoIW1hc3Rlci0+ZnJlZV9y cl9zbG90cykKPiArCQlyZXR1cm4gLUVOT1NQQzsKPiArCj4gKwlyZXR1cm4gZmZzKG1hc3Rlci0+ ZnJlZV9ycl9zbG90cykgLSAxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkaV9pM2NfbWFzdGVy X3JlYXR0YWNoX2kzY19kZXYoc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2LCB1OCBkeW5fYWRkcikK PiArewo+ICsJc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSA9IGkzY19kZXZfZ2V0X21h c3RlcihkZXYpOwo+ICsJc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlfaTNj X21hc3RlcihtKTsKPiArCXU4IGFkZHI7Cj4gKwo+ICsJYWRkciA9IGRldi0+aW5mby5keW5fYWRk ciA/IGRldi0+aW5mby5keW5fYWRkciA6IGRldi0+aW5mby5zdGF0aWNfYWRkcjsKPiArCj4gKwl3 cml0ZWwoUkVHX0RFVl9DSEFSX0FERFIoZHluX2FkZHIpLCBtYXN0ZXItPnJlZ3MgKyBSRUdfREVW X0NIQVIpOwo+ICsJd3JpdGVsKChyZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfREVWX0NIQVIpICYK PiArCQl+UkVHX0RFVl9DSEFSX0lTX0FUVEFDSEVEKSB8IFJFR19ERVZfQ0hBUl9XRU4sCj4gKwkg ICAgICAgbWFzdGVyLT5yZWdzICsgUkVHX0RFVl9DSEFSKTsKPiArCj4gKwl3cml0ZWwoUkVHX0RF Vl9DSEFSX0FERFIoYWRkciksIG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUik7Cj4gKwl3cml0 ZWwocmVhZGwobWFzdGVyLT5yZWdzICsgUkVHX0RFVl9DSEFSKSB8Cj4gKwkgICAgICAgUkVHX0RF Vl9DSEFSX0lTX0FUVEFDSEVEIHwgUkVHX0RFVl9DSEFSX1dFTiwKPiArCSAgICAgICBtYXN0ZXIt PnJlZ3MgKyBSRUdfREVWX0NIQVIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGFkaV9pM2NfbWFzdGVyX2F0dGFjaF9pM2NfZGV2KHN0cnVjdCBpM2NfZGV2X2Rlc2Mg KmRldikKPiArewo+ICsJc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSA9IGkzY19kZXZf Z2V0X21hc3RlcihkZXYpOwo+ICsJc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19h ZGlfaTNjX21hc3RlcihtKTsKPiArCXN0cnVjdCBhZGlfaTNjX2kyY19kZXZfZGF0YSAqZGF0YTsK PiArCWludCBzbG90Owo+ICsJdTggYWRkcjsKPiArCj4gKwlkYXRhID0ga3phbGxvYyhzaXplb2Yo KmRhdGEpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZGF0YSkKPiArCQlyZXR1cm4gLUVOT01FTTsK PiArCj4gKwlzbG90ID0gYWRpX2kzY19tYXN0ZXJfZ2V0X3JyX3Nsb3QobWFzdGVyLCBkZXYtPmlu Zm8uZHluX2FkZHIpOwo+ICsJaWYgKHNsb3QgPCAwKSB7Cj4gKwkJa2ZyZWUoZGF0YSk7Cj4gKwkJ cmV0dXJuIHNsb3Q7Cj4gKwl9Cj4gKwo+ICsJZGF0YS0+aWQgPSBzbG90Owo+ICsJaTNjX2Rldl9z ZXRfbWFzdGVyX2RhdGEoZGV2LCBkYXRhKTsKPiArCW1hc3Rlci0+ZnJlZV9ycl9zbG90cyAmPSB+ QklUKHNsb3QpOwo+ICsKPiArCWFkZHIgPSBkZXYtPmluZm8uZHluX2FkZHIgPyBkZXYtPmluZm8u ZHluX2FkZHIgOiBkZXYtPmluZm8uc3RhdGljX2FkZHI7Cj4gKwo+ICsJd3JpdGVsKFJFR19ERVZf Q0hBUl9BRERSKGFkZHIpLCBtYXN0ZXItPnJlZ3MgKyBSRUdfREVWX0NIQVIpOwo+ICsJd3JpdGVs KHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUikgfAo+ICsJICAgICAgIFJFR19ERVZf Q0hBUl9JU19BVFRBQ0hFRCB8IFJFR19ERVZfQ0hBUl9XRU4sCj4gKwkgICAgICAgbWFzdGVyLT5y ZWdzICsgUkVHX0RFVl9DSEFSKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgYWRpX2kzY19tYXN0ZXJfc3luY19kZXZfY2hhcihzdHJ1Y3QgaTNjX21hc3Rlcl9jb250 cm9sbGVyICptKQo+ICt7Cj4gKwlzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2Fk aV9pM2NfbWFzdGVyKG0pOwo+ICsJc3RydWN0IGkzY19kZXZfZGVzYyAqaTNjZGV2Owo+ICsJdTMy IGJjcl9pYmk7Cj4gKwl1OCBhZGRyOwo+ICsKPiArCWkzY19idXNfZm9yX2VhY2hfaTNjZGV2KCZt LT5idXMsIGkzY2Rldikgewo+ICsJCWFkZHIgPSBpM2NkZXYtPmluZm8uZHluX2FkZHIgPwo+ICsJ CSAgICAgICBpM2NkZXYtPmluZm8uZHluX2FkZHIgOiBpM2NkZXYtPmluZm8uc3RhdGljX2FkZHI7 Cj4gKwkJd3JpdGVsKFJFR19ERVZfQ0hBUl9BRERSKGFkZHIpLCBtYXN0ZXItPnJlZ3MgKyBSRUdf REVWX0NIQVIpOwo+ICsJCWJjcl9pYmkgPSBGSUVMRF9HRVQoSTNDX0JDUl9JQklfUEFZTE9BRCB8 IEkzQ19CQ1JfSUJJX1JFUV9DQVAsIChpM2NkZXYtPmluZm8uYmNyKSk7Cj4gKwkJd3JpdGVsKHJl YWRsKG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUikgfAo+ICsJCSAgICAgICBSRUdfREVWX0NI QVJfQkNSX0lCSShiY3JfaWJpKSB8IFJFR19ERVZfQ0hBUl9XRU4sCj4gKwkJICAgICAgIG1hc3Rl ci0+cmVncyArIFJFR19ERVZfQ0hBUik7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFk aV9pM2NfbWFzdGVyX2RldGFjaF9pM2NfZGV2KHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldikKPiAr ewo+ICsJc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSA9IGkzY19kZXZfZ2V0X21hc3Rl cihkZXYpOwo+ICsJc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlfaTNjX21h c3RlcihtKTsKPiArCXN0cnVjdCBhZGlfaTNjX2kyY19kZXZfZGF0YSAqZGF0YSA9IGkzY19kZXZf Z2V0X21hc3Rlcl9kYXRhKGRldik7Cj4gKwl1OCBhZGRyOwo+ICsKPiArCWFkZHIgPSBkZXYtPmlu Zm8uZHluX2FkZHIgPyBkZXYtPmluZm8uZHluX2FkZHIgOiBkZXYtPmluZm8uc3RhdGljX2FkZHI7 Cj4gKwo+ICsJd3JpdGVsKFJFR19ERVZfQ0hBUl9BRERSKGFkZHIpLCBtYXN0ZXItPnJlZ3MgKyBS RUdfREVWX0NIQVIpOwo+ICsJd3JpdGVsKChyZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfREVWX0NI QVIpICYKPiArCQl+UkVHX0RFVl9DSEFSX0lTX0FUVEFDSEVEKSB8IFJFR19ERVZfQ0hBUl9XRU4s Cj4gKwkgICAgICAgbWFzdGVyLT5yZWdzICsgUkVHX0RFVl9DSEFSKTsKPiArCj4gKwlpM2NfZGV2 X3NldF9tYXN0ZXJfZGF0YShkZXYsIE5VTEwpOwo+ICsJbWFzdGVyLT5mcmVlX3JyX3Nsb3RzIHw9 IEJJVChkYXRhLT5pZCk7Cj4gKwlrZnJlZShkYXRhKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBh ZGlfaTNjX21hc3Rlcl9hdHRhY2hfaTJjX2RldihzdHJ1Y3QgaTJjX2Rldl9kZXNjICpkZXYpCj4g K3sKPiArCXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpMmNfZGV2X2dldF9tYXN0 ZXIoZGV2KTsKPiArCXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kzY19t YXN0ZXIobSk7Cj4gKwlzdHJ1Y3QgYWRpX2kzY19pMmNfZGV2X2RhdGEgKmRhdGE7Cj4gKwlpbnQg c2xvdDsKPiArCj4gKwlzbG90ID0gYWRpX2kzY19tYXN0ZXJfZ2V0X3JyX3Nsb3QobWFzdGVyLCAw KTsKPiArCWlmIChzbG90IDwgMCkKPiArCQlyZXR1cm4gc2xvdDsKPiArCj4gKwlkYXRhID0ga3ph bGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZGF0YSkKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCj4gKwlkYXRhLT5pZCA9IHNsb3Q7Cj4gKwltYXN0ZXItPmZyZWVfcnJf c2xvdHMgJj0gfkJJVChzbG90KTsKPiArCWkyY19kZXZfc2V0X21hc3Rlcl9kYXRhKGRldiwgZGF0 YSk7Cj4gKwo+ICsJd3JpdGVsKFJFR19ERVZfQ0hBUl9BRERSKGRldi0+YWRkcikgfAo+ICsJICAg ICAgIFJFR19ERVZfQ0hBUl9JU19JMkMgfCBSRUdfREVWX0NIQVJfSVNfQVRUQUNIRUQgfCBSRUdf REVWX0NIQVJfV0VOLAo+ICsJICAgICAgIG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUik7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFzdGVyX2Rl dGFjaF9pMmNfZGV2KHN0cnVjdCBpMmNfZGV2X2Rlc2MgKmRldikKPiArewo+ICsJc3RydWN0IGkz Y19tYXN0ZXJfY29udHJvbGxlciAqbSA9IGkyY19kZXZfZ2V0X21hc3RlcihkZXYpOwo+ICsJc3Ry dWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlfaTNjX21hc3RlcihtKTsKPiArCXN0 cnVjdCBhZGlfaTNjX2kyY19kZXZfZGF0YSAqZGF0YSA9IGkyY19kZXZfZ2V0X21hc3Rlcl9kYXRh KGRldik7Cj4gKwo+ICsJd3JpdGVsKFJFR19ERVZfQ0hBUl9BRERSKGRldi0+YWRkcikgfAo+ICsJ ICAgICAgIFJFR19ERVZfQ0hBUl9JU19JMkMgfCBSRUdfREVWX0NIQVJfV0VOLAo+ICsJICAgICAg IG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUik7Cj4gKwo+ICsJaTJjX2Rldl9zZXRfbWFzdGVy X2RhdGEoZGV2LCBOVUxMKTsKPiArCW1hc3Rlci0+ZnJlZV9ycl9zbG90cyB8PSBCSVQoZGF0YS0+ aWQpOwo+ICsJa2ZyZWUoZGF0YSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFz dGVyX2J1c19jbGVhbnVwKHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0pCj4gK3sKPiAr CXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kzY19tYXN0ZXIobSk7Cj4g Kwo+ICsJYWRpX2kzY19tYXN0ZXJfZGlzYWJsZShtYXN0ZXIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBhZGlfaTNjX21hc3Rlcl91cGRfaTNjX3NjbF9saW0oc3RydWN0IGFkaV9pM2NfbWFzdGVy ICptYXN0ZXIpCj4gK3sKPiArCXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSAmbWFz dGVyLT5iYXNlOwo+ICsJc3RydWN0IGkzY19idXMgKmJ1cyA9IGkzY19tYXN0ZXJfZ2V0X2J1cyht KTsKPiArCXU4IGkzY19zY2xfbGltID0gMDsKPiArCXN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldjsK PiArCXU4IHBwX3NnOwo+ICsKPiArCWkzY19idXNfZm9yX2VhY2hfaTNjZGV2KGJ1cywgZGV2KSB7 Cj4gKwkJdTggbWF4X2ZzY2w7Cj4gKwo+ICsJCW1heF9mc2NsID0gbWF4KEkzQ19DQ0NfTUFYX1NE Ul9GU0NMKGRldi0+aW5mby5tYXhfcmVhZF9kcyksCj4gKwkJCSAgICAgICBJM0NfQ0NDX01BWF9T RFJfRlNDTChkZXYtPmluZm8ubWF4X3dyaXRlX2RzKSk7Cj4gKwo+ICsJCXN3aXRjaCAobWF4X2Zz Y2wpIHsKPiArCQljYXNlIEkzQ19TRFIxX0ZTQ0xfOE1IWjoKPiArCQkJbWF4X2ZzY2wgPSBQUF9T R182TUhaOwo+ICsJCQlicmVhazsKPiArCQljYXNlIEkzQ19TRFIyX0ZTQ0xfNk1IWjoKPiArCQkJ bWF4X2ZzY2wgPSBQUF9TR18zTUhaOwo+ICsJCQlicmVhazsKPiArCQljYXNlIEkzQ19TRFIzX0ZT Q0xfNE1IWjoKPiArCQkJbWF4X2ZzY2wgPSBQUF9TR18zTUhaOwo+ICsJCQlicmVhazsKPiArCQlj YXNlIEkzQ19TRFI0X0ZTQ0xfMk1IWjoKPiArCQkJbWF4X2ZzY2wgPSBQUF9TR18xTUhaOwo+ICsJ CQlicmVhazsKPiArCQljYXNlIEkzQ19TRFIwX0ZTQ0xfTUFYOgo+ICsJCWRlZmF1bHQ6Cj4gKwkJ CW1heF9mc2NsID0gUFBfU0dfMTJNSFo7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJaWYg KG1heF9mc2NsICYmCj4gKwkJICAgIChpM2Nfc2NsX2xpbSA+IG1heF9mc2NsIHx8ICFpM2Nfc2Ns X2xpbSkpCj4gKwkJCWkzY19zY2xfbGltID0gbWF4X2ZzY2w7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFp M2Nfc2NsX2xpbSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJbWFzdGVyLT5pM2Nfc2NsX2xpbSA9IGkz Y19zY2xfbGltIC0gMTsKPiArCj4gKwlwcF9zZyA9IHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19P UFMpICYgflJFR19PUFNfUFBfU0dfTUFTSzsKPiArCXBwX3NnIHw9IFJFR19PUFNfU0VUX1NHKG1h c3Rlci0+aTNjX3NjbF9saW0pOwo+ICsKPiArCXdyaXRlbChwcF9zZywgbWFzdGVyLT5yZWdzICsg UkVHX09QUyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFzdGVyX2dldF9mZWF0 dXJlcyhzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciwKPiArCQkJCQl1bnNpZ25lZCBpbnQg c2xvdCwKPiArCQkJCQlzdHJ1Y3QgaTNjX2RldmljZV9pbmZvICppbmZvKQo+ICt7Cj4gKwl1MzIg YnVmOwo+ICsKPiArCS8qIER5bmFtaWMgYWRkcmVzcyBhbmQgUElEIGFyZSBmb3IgaWRlbnRpZmlj YXRpb24gb25seSAqLwo+ICsJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwo+ICsJYnVm ID0gcmVhZGwobWFzdGVyLT5yZWdzICsgUkVHX0RDUl9CQ1JfREEpOwo+ICsJaW5mby0+ZHluX2Fk ZHIgPSBSRUdfRENSX0JDUl9EQV9HRVRfREEoYnVmKTsKPiArCWluZm8tPmRjciA9IFJFR19EQ1Jf QkNSX0RBX0dFVF9EQ1IoYnVmKTsKPiArCWluZm8tPmJjciA9IFJFR19EQ1JfQkNSX0RBX0dFVF9C Q1IoYnVmKTsKPiArCWluZm8tPnBpZCA9IHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19QSURfTCk7 Cj4gKwlpbmZvLT5waWQgfD0gKHU2NClyZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfUElEX0gpIDw8 IDMyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkaV9pM2NfbWFzdGVyX2RvX2RhYShzdHJ1Y3Qg aTNjX21hc3Rlcl9jb250cm9sbGVyICptKQo+ICt7Cj4gKwlzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIg Km1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ICsJdTMyIGlycV9tYXNrOwo+ICsJaW50 IHJldCwgYWRkcjsKPiArCj4gKwlhZGRyID0gMHg4OwoKdGhlIGZpcnN0IDggYWRkcmVzcyBhbHJl YWR5IHJlc2VydmVkIGF0IGkzY19idXNfaW5pdF9hZGRyc2xvdHMoKS4gWW91IGNhbgpzdGFydCBm cm9tIDAsIGkzY19tYXN0ZXJfZ2V0X2ZyZWVfYWRkcigpIHdpbGwgcmV0dXJuIGZyb20gOCBhdXRv LgoKPiArCWZvciAodTggaSA9IDA7IGkgPCBNQVhfREVWUzsgaSsrKSB7Cj4gKwkJYWRkciA9IGkz Y19tYXN0ZXJfZ2V0X2ZyZWVfYWRkcihtLCBhZGRyKTsKPiArCQlpZiAoYWRkciA8IDApCj4gKwkJ CXJldHVybiBhZGRyOwo+ICsJCW1hc3Rlci0+ZGFhLmFkZHJzW2ldID0gYWRkcjsKPiArCX0KPiAr Cj4gKwlpcnFfbWFzayA9IHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19JUlFfTUFTSyk7Cj4gKwl3 cml0ZWwoaXJxX21hc2sgfCBSRUdfSVJRX1BFTkRJTkdfREFBLAo+ICsJICAgICAgIG1hc3Rlci0+ cmVncyArIFJFR19JUlFfTUFTSyk7Cj4gKwo+ICsJbWFzdGVyLT5kYWEuaW5kZXggPSAwOwo+ICsJ cmV0ID0gaTNjX21hc3Rlcl9lbnRkYWFfbG9ja2VkKCZtYXN0ZXItPmJhc2UpOwo+ICsKPiArCXdy aXRlbChpcnFfbWFzaywgbWFzdGVyLT5yZWdzICsgUkVHX0lSUV9NQVNLKTsKPiArCj4gKwkvKiBE QUEgYWx3YXlzIGZpbmlzaGVzIHdpdGggQ0UyX0VSUk9SIG9yIE5BQ0tfUkVTUCAqLwo+ICsJaWYg KHJldCAmJiByZXQgIT0gSTNDX0VSUk9SX00yKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJLyog QWRkIEkzQyBkZXZpY2VzIGRpc2NvdmVyZWQgKi8KPiArCWZvciAodTggaSA9IDA7IGkgPCBtYXN0 ZXItPmRhYS5pbmRleDsgaSsrKQo+ICsJCWkzY19tYXN0ZXJfYWRkX2kzY19kZXZfbG9ja2VkKG0s IG1hc3Rlci0+ZGFhLmFkZHJzW2ldKTsKPiArCS8qIFN5bmMgcmV0cmlldmVkIGRldnMgaW5mbyB3 aXRoIHRoZSBJUCAqLwo+ICsJYWRpX2kzY19tYXN0ZXJfc3luY19kZXZfY2hhcihtKTsKPiArCj4g KwlpM2NfbWFzdGVyX2RlZnNsdnNfbG9ja2VkKCZtYXN0ZXItPmJhc2UpOwo+ICsKPiArCWFkaV9p M2NfbWFzdGVyX3VwZF9pM2Nfc2NsX2xpbShtYXN0ZXIpOwoKVGhpcyB2ZXJzaW9uIHNob3VsZCBi ZSBmaW5lLCBidXQgSSBzdWdnZXN0IHVzZSAuc2V0X3NwZWVkIGNhbGxiYWNrLiBJZiBpdApjYW4n dCBtYXRjaCB5b3VyIHJlcXVpcm1lbnQsIHdlIGNhbiBpbXByb3ZlIGl0LgoKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9idXNfaW5pdChzdHJ1 Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptKQo+ICt7Cj4gKwlzdHJ1Y3QgYWRpX2kzY19tYXN0 ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ICsJc3RydWN0IGkzY19kZXZpY2Vf aW5mbyBpbmZvID0geyB9Owo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBpM2NfbWFzdGVyX2dl dF9mcmVlX2FkZHIobSwgMCk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsK PiArCWFkaV9pM2NfbWFzdGVyX2dldF9mZWF0dXJlcyhtYXN0ZXIsIDAsICZpbmZvKTsKPiArCXJl dCA9IGkzY19tYXN0ZXJfc2V0X2luZm8oJm1hc3Rlci0+YmFzZSwgJmluZm8pOwo+ICsJaWYgKHJl dCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXdyaXRlbChSRUdfSUJJX0NPTkZJR19MSVNURU4s Cj4gKwkgICAgICAgbWFzdGVyLT5yZWdzICsgUkVHX0lCSV9DT05GSUcpOwo+ICsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl9oYW5kbGVfaWJpKHN0 cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyLAo+ICsJCQkJICAgICAgdTMyIGliaSkKPiArewo+ ICsJc3RydWN0IGFkaV9pM2NfaTJjX2Rldl9kYXRhICpkYXRhOwo+ICsJc3RydWN0IGkzY19pYmlf c2xvdCAqc2xvdDsKPiArCXN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldjsKPiArCXU4IGRhLCBpZDsK PiArCXU4ICptZGI7Cj4gKwo+ICsJZGEgPSAoaWJpID4+IDE3KSAmIEdFTk1BU0soNiwgMCk7Cj4g Kwlmb3IgKGlkID0gMDsgaWQgPCBtYXN0ZXItPmliaS5udW1fc2xvdHM7IGlkKyspIHsKPiArCQlp ZiAobWFzdGVyLT5pYmkuc2xvdHNbaWRdICYmCj4gKwkJICAgIG1hc3Rlci0+aWJpLnNsb3RzW2lk XS0+aW5mby5keW5fYWRkciA9PSBkYSkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYgKGlk ID09IG1hc3Rlci0+aWJpLm51bV9zbG90cykKPiArCQlyZXR1cm47Cj4gKwo+ICsJZGV2ID0gbWFz dGVyLT5pYmkuc2xvdHNbaWRdOwo+ICsJZ3VhcmQoc3BpbmxvY2spKCZtYXN0ZXItPmliaS5sb2Nr KTsKCnRoaXMgZnVuY2l0b24gaXMgbGl0dGxlIGJpdCBsb25nLCBJIHN1Z2dlc3QgdXNlIHNjb3Bl ZF9ndWFyZCB0byBtYWtlCglzY29wZWRfZ3VhcmQoc3BpbmxvY2ssICZtYXN0ZXItPmliaS5sb2Nr KSB7CgpiZWNhdXNlIGl0IGlzIHNwaW5fbG9jaywgc28gbG9jayB0aW1lIHNob3VsZCBiZSBhcyBs ZXNzIGFzIHBvc3NpYmxlLgoKPiArCj4gKwlkYXRhID0gaTNjX2Rldl9nZXRfbWFzdGVyX2RhdGEo ZGV2KTsKPiArCXNsb3QgPSBpM2NfZ2VuZXJpY19pYmlfZ2V0X2ZyZWVfc2xvdChkYXRhLT5pYmlf cG9vbCk7Cj4gKwlpZiAoIXNsb3QpCj4gKwkJcmV0dXJuOwo+ICsKPiArCW1kYiA9IHNsb3QtPmRh dGE7Cj4gKwltZGJbMF0gPSAoaWJpID4+IDgpICYgR0VOTUFTSyg3LCAwKTsKPiArCj4gKwlzbG90 LT5sZW4gPSAxOwo+ICsJaTNjX21hc3Rlcl9xdWV1ZV9pYmkoZGV2LCBzbG90KTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJfZGVtdXhfaWJpcyhzdHJ1Y3QgYWRpX2kzY19t YXN0ZXIgKm1hc3RlcikKPiArewo+ICsJd2hpbGUgKCEocmVhZGwobWFzdGVyLT5yZWdzICsgUkVH X0ZJRk9fU1RBVFVTKSAmIFJFR19GSUZPX1NUQVRVU19JQklfRU1QVFkpKSB7Cj4gKwkJdTMyIGli aSA9IHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19JQklfRklGTyk7Cj4gKwo+ICsJCWFkaV9pM2Nf bWFzdGVyX2hhbmRsZV9pYmkobWFzdGVyLCBpYmkpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBhZGlfaTNjX21hc3Rlcl9oYW5kbGVfZGFfcmVxKHN0cnVjdCBhZGlfaTNjX21hc3RlciAq bWFzdGVyKQo+ICt7Cj4gKwl1OCBwYXlsb2FkMFs4XTsKPiArCXUzMiBhZGRyOwo+ICsKPiArCWFk aV9pM2NfbWFzdGVyX3JkX2Zyb21fcnhfZmlmbyhtYXN0ZXIsIHBheWxvYWQwLCA2KTsKPiArCWFk ZHIgPSBtYXN0ZXItPmRhYS5hZGRyc1ttYXN0ZXItPmRhYS5pbmRleCsrXTsKPiArCWFkZHIgPSAo YWRkciA8PCAxKSB8IChwYXJpdHk4KGFkZHIpID8gMCA6IDEpOwo+ICsKPiArCXdyaXRlbChhZGRy LCBtYXN0ZXItPnJlZ3MgKyBSRUdfU0RPX0ZJRk8pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0 dXJuX3QgYWRpX2kzY19tYXN0ZXJfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0 cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0gZGF0YTsKPiArCXUzMiBwZW5kaW5nOwo+ICsK PiArCXBlbmRpbmcgPSByZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfSVJRX1BFTkRJTkcpOwo+ICsJ d3JpdGVsKHBlbmRpbmcsIG1hc3Rlci0+cmVncyArIFJFR19JUlFfUEVORElORyk7Cj4gKwlpZiAo cGVuZGluZyAmIFJFR19JUlFfUEVORElOR19DTURSKSB7Cj4gKwkJc2NvcGVkX2d1YXJkKHNwaW5s b2NrX2lycXNhdmUsICZtYXN0ZXItPnhmZXJxdWV1ZS5sb2NrKSB7Cj4gKwkJCWFkaV9pM2NfbWFz dGVyX2VuZF94ZmVyX2xvY2tlZChtYXN0ZXIsIHBlbmRpbmcpOwo+ICsJCX0KPiArCX0KPiArCWlm IChwZW5kaW5nICYgUkVHX0lSUV9QRU5ESU5HX0lCSSkKPiArCQlhZGlfaTNjX21hc3Rlcl9kZW11 eF9pYmlzKG1hc3Rlcik7Cj4gKwlpZiAocGVuZGluZyAmIFJFR19JUlFfUEVORElOR19EQUEpCj4g KwkJYWRpX2kzY19tYXN0ZXJfaGFuZGxlX2RhX3JlcShtYXN0ZXIpOwo+ICsKPiArCXJldHVybiBJ UlFfSEFORExFRDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9pMmNfeGZl cnMoc3RydWN0IGkyY19kZXZfZGVzYyAqZGV2LAo+ICsJCQkJICAgIHN0cnVjdCBpMmNfbXNnICp4 ZmVycywKPiArCQkJCSAgICBpbnQgbnhmZXJzKQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX21hc3Rlcl9j b250cm9sbGVyICptID0gaTJjX2Rldl9nZXRfbWFzdGVyKGRldik7Cj4gKwlzdHJ1Y3QgYWRpX2kz Y19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ICsJc3RydWN0IGFkaV9p M2NfeGZlciAqeGZlciBfX2ZyZWUoa2ZyZWUpID0gTlVMTDsKPiArCWludCBpOwo+ICsKPiArCWlm ICghbnhmZXJzKQo+ICsJCXJldHVybiAwOwo+ICsJZm9yIChpID0gMDsgaSA8IG54ZmVyczsgaSsr KSB7Cj4gKwkJaWYgKHhmZXJzW2ldLmZsYWdzICYgSTJDX01fVEVOKQo+ICsJCQlyZXR1cm4gLUVP UE5PVFNVUFA7Cj4gKwl9Cj4gKwl4ZmVyID0gYWRpX2kzY19tYXN0ZXJfYWxsb2NfeGZlcihtYXN0 ZXIsIG54ZmVycyk7Cj4gKwlpZiAoIXhmZXIpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJ Zm9yIChpID0gMDsgaSA8IG54ZmVyczsgaSsrKSB7Cj4gKwkJc3RydWN0IGFkaV9pM2NfY21kICpj Y21kID0gJnhmZXItPmNtZHNbaV07Cj4gKwo+ICsJCWNjbWQtPmNtZDAgPSBSRUdfQ01EX0ZJRk9f MF9ERVZfQUREUih4ZmVyc1tpXS5hZGRyKTsKPiArCj4gKwkJaWYgKHhmZXJzW2ldLmZsYWdzICYg STJDX01fUkQpIHsKPiArCQkJY2NtZC0+Y21kMCB8PSBSRUdfQ01EX0ZJRk9fMF9STlc7Cj4gKwkJ CWNjbWQtPnJ4X2J1ZiA9IHhmZXJzW2ldLmJ1ZjsKPiArCQkJY2NtZC0+cnhfbGVuID0geGZlcnNb aV0ubGVuOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWNjbWQtPnR4X2J1ZiA9IHhmZXJzW2ldLmJ1ZjsK PiArCQkJY2NtZC0+dHhfbGVuID0geGZlcnNbaV0ubGVuOwo+ICsJCX0KPiArCj4gKwkJY2NtZC0+ Y21kMCB8PSBSRUdfQ01EX0ZJRk9fMF9MRU4oeGZlcnNbaV0ubGVuKTsKPiArCX0KPiArCj4gKwlh ZGlfaTNjX21hc3Rlcl9xdWV1ZV94ZmVyKG1hc3RlciwgeGZlcik7Cj4gKwlpZiAoIXdhaXRfZm9y X2NvbXBsZXRpb25fdGltZW91dCgmeGZlci0+Y29tcCwKPiArCQkJCQkgbS0+aTJjLnRpbWVvdXQp KQo+ICsJCWFkaV9pM2NfbWFzdGVyX3VucXVldWVfeGZlcihtYXN0ZXIsIHhmZXIpOwo+ICsKPiAr CXJldHVybiB4ZmVyLT5yZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWRpX2kzY19tYXN0ZXJf ZGlzYWJsZV9pYmkoc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgaTNj X21hc3Rlcl9jb250cm9sbGVyICptID0gaTNjX2Rldl9nZXRfbWFzdGVyKGRldik7Cj4gKwlzdHJ1 Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ICsJc3Ry dWN0IGkzY19kZXZfZGVzYyAqaTNjZGV2Owo+ICsJdTMyIGVuYWJsZWQgPSAwOwo+ICsJaW50IHJl dDsKPiArCj4gKwlyZXQgPSBpM2NfbWFzdGVyX2Rpc2VjX2xvY2tlZChtLCBkZXYtPmluZm8uZHlu X2FkZHIsCj4gKwkJCQkgICAgICBJM0NfQ0NDX0VWRU5UX1NJUik7Cj4gKwo+ICsJaTNjX2J1c19m b3JfZWFjaF9pM2NkZXYoJm0tPmJ1cywgaTNjZGV2KSB7Cj4gKwkJaWYgKGRldiAhPSBpM2NkZXYg JiYgaTNjZGV2LT5pYmkpCj4gKwkJCWVuYWJsZWQgfD0gaTNjZGV2LT5pYmktPmVuYWJsZWQ7Cj4g Kwl9Cj4gKwlpZiAoIWVuYWJsZWQpIHsKPiArCQl3cml0ZWwoUkVHX0lCSV9DT05GSUdfTElTVEVO LAo+ICsJCSAgICAgICBtYXN0ZXItPnJlZ3MgKyBSRUdfSUJJX0NPTkZJRyk7Cj4gKwkJd3JpdGVs KHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19JUlFfTUFTSykgJiB+UkVHX0lSUV9QRU5ESU5HX0lC SSwKPiArCQkgICAgICAgbWFzdGVyLT5yZWdzICsgUkVHX0lSUV9NQVNLKTsKPiArCX0KPiArCj4g KwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkaV9pM2NfbWFzdGVyX2VuYWJs ZV9pYmkoc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX21hc3Rl cl9jb250cm9sbGVyICptID0gaTNjX2Rldl9nZXRfbWFzdGVyKGRldik7Cj4gKwlzdHJ1Y3QgYWRp X2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ICsKPiArCXdyaXRl bChSRUdfSUJJX0NPTkZJR19MSVNURU4gfCBSRUdfSUJJX0NPTkZJR19FTkFCTEUsCj4gKwkgICAg ICAgbWFzdGVyLT5yZWdzICsgUkVHX0lCSV9DT05GSUcpOwo+ICsKPiArCXdyaXRlbChyZWFkbCht YXN0ZXItPnJlZ3MgKyBSRUdfSVJRX01BU0spIHwgUkVHX0lSUV9QRU5ESU5HX0lCSSwKPiArCSAg ICAgICBtYXN0ZXItPnJlZ3MgKyBSRUdfSVJRX01BU0spOwo+ICsKPiArCXJldHVybiBpM2NfbWFz dGVyX2VuZWNfbG9ja2VkKG0sIGRldi0+aW5mby5keW5fYWRkciwKPiArCQkJCSAgICAgIEkzQ19D Q0NfRVZFTlRfU0lSKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9yZXF1 ZXN0X2liaShzdHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXYsCj4gKwkJCQkgICAgICBjb25zdCBzdHJ1 Y3QgaTNjX2liaV9zZXR1cCAqcmVxKQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9s bGVyICptID0gaTNjX2Rldl9nZXRfbWFzdGVyKGRldik7Cj4gKwlzdHJ1Y3QgYWRpX2kzY19tYXN0 ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwo+ICsJc3RydWN0IGFkaV9pM2NfaTJj X2Rldl9kYXRhICpkYXRhOwo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ICsJZGF0YSA9IGkzY19k ZXZfZ2V0X21hc3Rlcl9kYXRhKGRldik7Cj4gKwlkYXRhLT5pYmlfcG9vbCA9IGkzY19nZW5lcmlj X2liaV9hbGxvY19wb29sKGRldiwgcmVxKTsKPiArCWlmIChJU19FUlIoZGF0YS0+aWJpX3Bvb2wp KQo+ICsJCXJldHVybiBQVFJfRVJSKGRhdGEtPmliaV9wb29sKTsKPiArCj4gKwlzY29wZWRfZ3Vh cmQoc3BpbmxvY2tfaXJxc2F2ZSwgJm1hc3Rlci0+aWJpLmxvY2spIHsKPiArCQlmb3IgKGkgPSAw OyBpIDwgbWFzdGVyLT5pYmkubnVtX3Nsb3RzOyBpKyspIHsKPiArCQkJaWYgKCFtYXN0ZXItPmli aS5zbG90c1tpXSkgewo+ICsJCQkJZGF0YS0+aWJpID0gaTsKPiArCQkJCW1hc3Rlci0+aWJpLnNs b3RzW2ldID0gZGV2Owo+ICsJCQkJYnJlYWs7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gKwo+ICsJ aWYgKGkgPCBtYXN0ZXItPmliaS5udW1fc2xvdHMpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaTNj X2dlbmVyaWNfaWJpX2ZyZWVfcG9vbChkYXRhLT5pYmlfcG9vbCk7Cj4gKwlkYXRhLT5pYmlfcG9v bCA9IE5VTEw7Cj4gKwo+ICsJcmV0dXJuIC1FTk9TUEM7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGFkaV9pM2NfbWFzdGVyX2ZyZWVfaWJpKHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldikKPiArewo+ ICsJc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSA9IGkzY19kZXZfZ2V0X21hc3Rlcihk ZXYpOwo+ICsJc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlfaTNjX21hc3Rl cihtKTsKPiArCXN0cnVjdCBhZGlfaTNjX2kyY19kZXZfZGF0YSAqZGF0YSA9IGkzY19kZXZfZ2V0 X21hc3Rlcl9kYXRhKGRldik7Cj4gKwo+ICsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUs ICZtYXN0ZXItPmliaS5sb2NrKSB7Cj4gKwkJbWFzdGVyLT5pYmkuc2xvdHNbZGF0YS0+aWJpXSA9 IE5VTEw7Cj4gKwl9Cj4gKwo+ICsJaTNjX2dlbmVyaWNfaWJpX2ZyZWVfcG9vbChkYXRhLT5pYmlf cG9vbCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFzdGVyX3JlY3ljbGVfaWJp X3Nsb3Qoc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2LAo+ICsJCQkJCSAgICBzdHJ1Y3QgaTNjX2li aV9zbG90ICpzbG90KQo+ICt7Cj4gKwlzdHJ1Y3QgYWRpX2kzY19pMmNfZGV2X2RhdGEgKmRhdGEg PSBpM2NfZGV2X2dldF9tYXN0ZXJfZGF0YShkZXYpOwo+ICsKPiArCWkzY19nZW5lcmljX2liaV9y ZWN5Y2xlX3Nsb3QoZGF0YS0+aWJpX3Bvb2wsIHNsb3QpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlcl9vcHMgYWRpX2kzY19tYXN0ZXJfb3BzID0g ewo+ICsJLmJ1c19pbml0ID0gYWRpX2kzY19tYXN0ZXJfYnVzX2luaXQsCj4gKwkuYnVzX2NsZWFu dXAgPSBhZGlfaTNjX21hc3Rlcl9idXNfY2xlYW51cCwKPiArCS5hdHRhY2hfaTNjX2RldiA9IGFk aV9pM2NfbWFzdGVyX2F0dGFjaF9pM2NfZGV2LAo+ICsJLnJlYXR0YWNoX2kzY19kZXYgPSBhZGlf aTNjX21hc3Rlcl9yZWF0dGFjaF9pM2NfZGV2LAo+ICsJLmRldGFjaF9pM2NfZGV2ID0gYWRpX2kz Y19tYXN0ZXJfZGV0YWNoX2kzY19kZXYsCj4gKwkuYXR0YWNoX2kyY19kZXYgPSBhZGlfaTNjX21h c3Rlcl9hdHRhY2hfaTJjX2RldiwKPiArCS5kZXRhY2hfaTJjX2RldiA9IGFkaV9pM2NfbWFzdGVy X2RldGFjaF9pMmNfZGV2LAo+ICsJLmRvX2RhYSA9IGFkaV9pM2NfbWFzdGVyX2RvX2RhYSwKPiAr CS5zdXBwb3J0c19jY2NfY21kID0gYWRpX2kzY19tYXN0ZXJfc3VwcG9ydHNfY2NjX2NtZCwKPiAr CS5zZW5kX2NjY19jbWQgPSBhZGlfaTNjX21hc3Rlcl9zZW5kX2NjY19jbWQsCj4gKwkucHJpdl94 ZmVycyA9IGFkaV9pM2NfbWFzdGVyX3ByaXZfeGZlcnMsCj4gKwkuaTJjX3hmZXJzID0gYWRpX2kz Y19tYXN0ZXJfaTJjX3hmZXJzLAo+ICsJLnJlcXVlc3RfaWJpID0gYWRpX2kzY19tYXN0ZXJfcmVx dWVzdF9pYmksCj4gKwkuZW5hYmxlX2liaSA9IGFkaV9pM2NfbWFzdGVyX2VuYWJsZV9pYmksCj4g KwkuZGlzYWJsZV9pYmkgPSBhZGlfaTNjX21hc3Rlcl9kaXNhYmxlX2liaSwKPiArCS5mcmVlX2li aSA9IGFkaV9pM2NfbWFzdGVyX2ZyZWVfaWJpLAo+ICsJLnJlY3ljbGVfaWJpX3Nsb3QgPSBhZGlf aTNjX21hc3Rlcl9yZWN5Y2xlX2liaV9zbG90LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgYWRpX2kzY19tYXN0ZXJfb2ZfbWF0Y2hbXSA9IHsKPiArCXsgLmNv bXBhdGlibGUgPSAiYWRpLGkzYy1tYXN0ZXIiIH0sCgpiaW5kaW5nIGNvbXBhdGlibGUgc3RyaW5n IGNoYW5nZWQsIHlvdSBuZWVkIHVwZGF0ZSBoZXJlIGFsc28uCgpGcmFuawoKPiArCXt9Cj4gK307 Cj4gKwo+ICtzdGF0aWMgaW50IGFkaV9pM2NfbWFzdGVyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyOwo+ICsJ c3RydWN0IGNsa19idWxrX2RhdGEgKmNsazsKPiArCXVuc2lnbmVkIGludCB2ZXJzaW9uOwo+ICsJ aW50IHJldCwgaXJxOwo+ICsKPiArCW1hc3RlciA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBz aXplb2YoKm1hc3RlciksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFtYXN0ZXIpCj4gKwkJcmV0dXJu IC1FTk9NRU07Cj4gKwo+ICsJbWFzdGVyLT5yZWdzID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jl c291cmNlKHBkZXYsIDApOwo+ICsJaWYgKElTX0VSUihtYXN0ZXItPnJlZ3MpKQo+ICsJCXJldHVy biBQVFJfRVJSKG1hc3Rlci0+cmVncyk7Cj4gKwo+ICsJcmV0ID0gZGV2bV9jbGtfYnVsa19nZXRf YWxsX2VuYWJsZWQoJnBkZXYtPmRldiwgJmNsayk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1 cm4gZGV2X2Vycl9wcm9iZSgmcGRldi0+ZGV2LCByZXQsCj4gKwkJCQkgICAgICJGYWlsZWQgdG8g Z2V0IGNsb2Nrc1xuIik7Cj4gKwo+ICsJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsK PiArCWlmIChpcnEgPCAwKQo+ICsJCXJldHVybiBpcnE7Cj4gKwo+ICsJdmVyc2lvbiA9IHJlYWRs KG1hc3Rlci0+cmVncyArIEFESV9BWElfUkVHX1ZFUlNJT04pOwo+ICsJaWYgKEFESV9BWElfUENP UkVfVkVSX01BSk9SKHZlcnNpb24pICE9IDApCj4gKwkJZGV2X2Vycl9wcm9iZSgmcGRldi0+ZGV2 LCAtRU5PREVWLCAiVW5zdXBwb3J0ZWQgcGVyaXBoZXJhbCB2ZXJzaW9uICV1LiV1LiV1XG4iLAo+ ICsJCQkgICAgICBBRElfQVhJX1BDT1JFX1ZFUl9NQUpPUih2ZXJzaW9uKSwKPiArCQkJICAgICAg QURJX0FYSV9QQ09SRV9WRVJfTUlOT1IodmVyc2lvbiksCj4gKwkJCSAgICAgIEFESV9BWElfUENP UkVfVkVSX1BBVENIKHZlcnNpb24pKTsKPiArCj4gKwl3cml0ZWwoMHgwMCwgbWFzdGVyLT5yZWdz ICsgUkVHX0VOQUJMRSk7Cj4gKwl3cml0ZWwoMHgwMCwgbWFzdGVyLT5yZWdzICsgUkVHX0lSUV9N QVNLKTsKPiArCj4gKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwgYWRp X2kzY19tYXN0ZXJfaXJxLCAwLAo+ICsJCQkgICAgICAgZGV2X25hbWUoJnBkZXYtPmRldiksIG1h c3Rlcik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcGxhdGZvcm1fc2V0 X2RydmRhdGEocGRldiwgbWFzdGVyKTsKPiArCj4gKwltYXN0ZXItPmZyZWVfcnJfc2xvdHMgPSBH RU5NQVNLKE1BWF9ERVZTLCAxKTsKPiArCj4gKwl3cml0ZWwoUkVHX0lSUV9QRU5ESU5HX0NNRFIs IG1hc3Rlci0+cmVncyArIFJFR19JUlFfTUFTSyk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2luaXQoJm1h c3Rlci0+aWJpLmxvY2spOwo+ICsJbWFzdGVyLT5pYmkubnVtX3Nsb3RzID0gMTU7Cj4gKwltYXN0 ZXItPmliaS5zbG90cyA9IGRldm1fa2NhbGxvYygmcGRldi0+ZGV2LCBtYXN0ZXItPmliaS5udW1f c2xvdHMsCj4gKwkJCQkJIHNpemVvZigqbWFzdGVyLT5pYmkuc2xvdHMpLAo+ICsJCQkJCSBHRlBf S0VSTkVMKTsKPiArCWlmICghbWFzdGVyLT5pYmkuc2xvdHMpCj4gKwkJcmV0dXJuIC1FTk9NRU07 Cj4gKwo+ICsJc3Bpbl9sb2NrX2luaXQoJm1hc3Rlci0+eGZlcnF1ZXVlLmxvY2spOwo+ICsJSU5J VF9MSVNUX0hFQUQoJm1hc3Rlci0+eGZlcnF1ZXVlLmxpc3QpOwo+ICsKPiArCXJldHVybiBpM2Nf bWFzdGVyX3JlZ2lzdGVyKCZtYXN0ZXItPmJhc2UsICZwZGV2LT5kZXYsCj4gKwkJCQkgICAmYWRp X2kzY19tYXN0ZXJfb3BzLCBmYWxzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFkaV9pM2Nf bWFzdGVyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1 Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ ICsKPiArCXdyaXRlbCgweGZmLCBtYXN0ZXItPnJlZ3MgKyBSRUdfSVJRX1BFTkRJTkcpOwo+ICsJ d3JpdGVsKDB4MDAsIG1hc3Rlci0+cmVncyArIFJFR19JUlFfTUFTSyk7Cj4gKwl3cml0ZWwoMHgw MSwgbWFzdGVyLT5yZWdzICsgUkVHX0VOQUJMRSk7Cj4gKwo+ICsJaTNjX21hc3Rlcl91bnJlZ2lz dGVyKCZtYXN0ZXItPmJhc2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBhZGlfaTNjX21hc3RlciA9IHsKPiArCS5wcm9iZSA9IGFkaV9pM2NfbWFzdGVyX3Byb2Jl LAo+ICsJLnJlbW92ZSA9IGFkaV9pM2NfbWFzdGVyX3JlbW92ZSwKPiArCS5kcml2ZXIgPSB7Cj4g KwkJLm5hbWUgPSAiYWRpLWkzYy1tYXN0ZXIiLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGFkaV9p M2NfbWFzdGVyX29mX21hdGNoLAo+ICsJfSwKPiArfTsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZl cihhZGlfaTNjX21hc3Rlcik7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJKb3JnZSBNYXJxdWVzIDxq b3JnZS5tYXJxdWVzQGFuYWxvZy5jb20+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiQW5hbG9n IERldmljZXMgSTNDIG1hc3RlciBkcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+ Cj4gLS0KPiAyLjQ5LjAKPgo+Cj4gLS0KPiBsaW51eC1pM2MgbWFpbGluZyBsaXN0Cj4gbGludXgt aTNjQGxpc3RzLmluZnJhZGVhZC5vcmcKPiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LWkzYwoKLS0gCmxpbnV4LWkzYyBtYWlsaW5nIGxpc3QKbGludXgt aTNjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1pM2MK