From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam04on2041.outbound.protection.outlook.com [40.107.100.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B87982417E0; Wed, 10 Sep 2025 06:12:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.100.41 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484783; cv=fail; b=pwri3LjoaiKIk26makXN+eJ04TdfSti50ldFeZM95H7cS5Rmek7VimTjAZ8AXZWQHAq1cbZsjBKA4b4qZgYw9+51nKO0CkDk5qt5xjww0IuKJrPCJhanYb6b7fSlWhgGzPWFW1xTwtYizg0AwjA+kDdmfF3cwSFAHchsF6BRmPs= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484783; c=relaxed/simple; bh=Wh4xsnRlcGGMr0sHdvXIl7zHXp9Ke2sGi1+3mrIw3S0=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=EqWUp+jmxjme4BGPbueYFhW4H5ZXP1gZRrPPU7QWrO1IvqMKcVsCBNXBZEOGHoJp4cG0Z5lSEmyHjZGTr8stLX/uPIEmm4MTROMusSfrwBi62OgGOMxpecrR0K+6btkash8WBizRv6zZ9V7MZJ0dxixNKP+2QtC1WemD9II5fRc= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com; spf=pass smtp.mailfrom=microchip.com; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b=bJZeplbh; arc=fail smtp.client-ip=40.107.100.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=microchip.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="bJZeplbh" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UDfnCA7870Uc1MNXxvLF/52sXfx4PPm8pRYUhmkfdhbcKdwCwdZ3Spg2LEQnyISH7LKq0vEQ7UEaKPN9NRxNMZQmQgd/bZB8aODxf/UMNeYpKr4a519b6QYRub30dUlux3GGw7a3kKlyYgdYfsmWX21rolRtpYfPQzq5lPL2jmKlysXR/w7dvDRhrJuN/OZXfTtsk1x35AQL3Uh3P803lYqU3xLvN2tXHk/vw9RNYYwq4M7muUXg75PHZavvpsCVQG1uVBDcFbFb2tQpjBmQ1Ed/yo0ykFxSFj8CVxJXiwqP49woC2Yf7B0AiAbEANE3LQzoLL7cyrrVJGxtYFUpMg== 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=Wh4xsnRlcGGMr0sHdvXIl7zHXp9Ke2sGi1+3mrIw3S0=; b=ySIcL6ABJCOKjqhk4V6GsfTYN9tRiwdKzR83j0BvRUeWCiH74fmz9r5EbRKQUnVUJxsRINlwgb6W04CMPXtlwo6Q8w2fNqnKiyLnUKXpLIYJxktYYTCjmeTUhv0c3JEXJ7ZtsjrVi5ezIc21qxgtl6q8o+iDpH6veth6P7iaqApNeUkK5ncjMkk93xuIn/z+UDncSHDTuCdX8kVQJ1wxQs+kFGGoL2vtgnjBDieK4OIxnZvNAUPWm1axL9cefgy4ce6NGV4saBp1HJWZtZ+VLsf40BnRUSXK9i1ADVsfVUSAHRecFGRoK8pt3sFUb9hVUtwbuqm6rTr6QtrGGUkCcA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microchip.com; dmarc=pass action=none header.from=microchip.com; dkim=pass header.d=microchip.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchip.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Wh4xsnRlcGGMr0sHdvXIl7zHXp9Ke2sGi1+3mrIw3S0=; b=bJZeplbhhGcTJT/HBKhcViR/vtgdtcyiGGFxWClknNCi9FuXzooSbY86MecN8q3Qt21WqrJ+4JHobrvfZnXm/xUELo5G0TzknTWOUAxwVlCT8vZaQDFd+WNnmPmSAMEdnF21p8FhMk6UCe+ii+dWfMoCVP5TogV58913QrXENcF/L4ukzxiSjJROSgjMCNzHi2RNLpqrnNoAeGjQr27AohhLsRq+/EN4COoruTewXhJ6WMTM3fXHYvaj1mcHPK5SC2DOTjZWIA+Sx4u23M29cv3I8cWghqYn2Ig+7lGe5Ls0HnmsDXNqq9O3tEgNXKFvWx1fkfDRihWuOZy/CijDtA== Received: from DS0PR11MB6541.namprd11.prod.outlook.com (2603:10b6:8:d3::14) by CH3PR11MB7392.namprd11.prod.outlook.com (2603:10b6:610:145::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9094.22; Wed, 10 Sep 2025 06:12:52 +0000 Received: from DS0PR11MB6541.namprd11.prod.outlook.com ([fe80::e268:87f2:3bd1:1347]) by DS0PR11MB6541.namprd11.prod.outlook.com ([fe80::e268:87f2:3bd1:1347%6]) with mapi id 15.20.9094.021; Wed, 10 Sep 2025 06:12:52 +0000 From: To: CC: , , , , , , , , Subject: Re: [PATCH 2/4] i3c: master: add Microchip SAMA7D65 I3C HCI master driver Thread-Topic: [PATCH 2/4] i3c: master: add Microchip SAMA7D65 I3C HCI master driver Thread-Index: AQHcIXrqGVMOWFOs9UayQYE6vyTQPbSLW8GAgACVJwA= Date: Wed, 10 Sep 2025 06:12:52 +0000 Message-ID: <3229da67-9d67-47ff-9f01-0d71bfabb6a6@microchip.com> References: <20250909111333.170016-1-durai.manickamkr@microchip.com> <20250909111333.170016-3-durai.manickamkr@microchip.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microchip.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DS0PR11MB6541:EE_|CH3PR11MB7392:EE_ x-ms-office365-filtering-correlation-id: cbd54c24-3c2d-493c-8a2d-08ddf0311359 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700021; x-microsoft-antispam-message-info: =?utf-8?B?c2I0MVVhNTluNUdVOHZSY1IvVzhrM2lSVUdIWTRZcGQ3UnlqbFRCUE9ZZitI?= =?utf-8?B?b1pDREM1TFc1SjZmbkZjZ3liTFVFS0tsSXFhRU1JZFdnOVNqSDlzSlV4dWd6?= =?utf-8?B?YUx3cmxGTzlTNTY3dFE4SGtHSEpjWHdIZ0ZWcldRZFhjMldEblN5SE9qcVk2?= =?utf-8?B?aDU3c2tpSVVNWEtaSGZLeVlSTDl6TWhobEN2UXpkelVhY2VtOXpHTElWS1pr?= =?utf-8?B?RUZtUVBXbU8wNVVLMWVnQmIxMGRNTERtb21STDJWL2xoYWg2ZTJKWmd2Nlgz?= =?utf-8?B?MmFUeFgxN3ByY0hXQVl2NDBmdUZoMHlXQjBBd0dDOXZXSU0yVVJOUCthTEtK?= =?utf-8?B?bW9lc09OSGV0ODhzbzdoTHRBdlJCbzhrRkZtL3c1UXdRY0tXaUZUVUprb2oy?= =?utf-8?B?ZEgxQ0NlOVpsMnJSaGZCNC9UUnc4WEFJMFhVSzhlb1ZzYlI5STZTaXpGWU5T?= =?utf-8?B?aUg2aEVwVWdGZW1PTFNCTU9IenJlYmJTYWJBNTBWUndGVjdSOURvbHpPcVY4?= =?utf-8?B?eDVGQ3hDRkpxQlU0VHUxd3haSzRiaWgrcXo1VG9VOHJuRXFWcWdIUEtubm9L?= =?utf-8?B?c2w0S1dSNVZSUnRJL1lMbmIvb2pmM2U1WkhJT0x1T3IxcitWeUNEck9hTGpH?= =?utf-8?B?cWJVMjNDcVpENk90Q1k2b0NFSk9HUkFUd0x6eERDcWhMcTBCYWpzZmUrY1hh?= =?utf-8?B?ZU1QUDdFYUR2dEs2Rjc3NW9HbjEzZ2J2MnNldjVUazNjWTBTam5XSzlHSzJ6?= =?utf-8?B?cnphYWJ1YlI0TzJKdWYycDlBZkFWMzNySkx0aTlwd00rM2JXRk1ZVjQ0clBJ?= =?utf-8?B?N2hXYTA2M2FQVG1kelVWSXFpcFJRTncyUFpvVDVNQm1DSlk1MjlnVEhURkZG?= =?utf-8?B?Slc2eHZsaHRETlhJK2NoZ2oxZm43SjI2TUsrUmhETXdHVTM3cEpCOVJ4VFVv?= =?utf-8?B?bFlWVUpDdmVnU0lKcXJwYUZLeUxDVWRLRXBnNWpwc0Q5OXdneTBaZkVRZElZ?= =?utf-8?B?ZitkaklUYkNkcDAwYXRGSngrK09UL2hxcU0zUXlKN2s5cWF1ancrd0cwRk8r?= =?utf-8?B?RGozaXowSCtETmttUXhSM3NpT3NCK2V6ejdZSzZpcE9oNTdWeVhlc2N6c3k5?= =?utf-8?B?UUtqbUV3QndMdDIvN1JSK1NNaEZjOGNsU0RDbGlwUlAveTJhUkxKU1R3TlQ1?= =?utf-8?B?SUF6WCsydUd1R3Rzb0dPTEswWE5XZzJrL3FUdDN1VVZkbWdjZGtRVGJRUTBJ?= =?utf-8?B?bEl6MUx6czZOYS8zd0xybzJ5SDkxYWVFRTVGcG1GWkdOL0RLY3k5QUgraldj?= =?utf-8?B?WHA2cUp5c3B0T21uVXR6d3duSkN3MHoyR2JrRlEzQnBIQ3Q3b2cwRzEzRllW?= =?utf-8?B?L2lESmFZVjF0Uk1weUN3b1pyRDkyU2xDMTBORERKTUdKTmQwMWhueEZoR1RH?= =?utf-8?B?RE5pWVdOSHk0WFo4SnRvdEtXMVNabEZFTTBZUnAyNzc5UHk3WjBpeVlVWEtE?= =?utf-8?B?elpML0IvTFhiS0RLUThrUEduYWYvTWhJeHFabXRzOStvQllQOTFZbUlBVlBz?= =?utf-8?B?STRweVRCSVNra0Y0S1NlT1VmdnBnOFRFb3dMbzdkMDM0QTc0S2hlcC9VODJJ?= =?utf-8?B?RWVUNnErUGppT08vMG1ZY01VVlpzNkZyUVhQdTFOZlZOT0xvVTFtQWFVZ1Fz?= =?utf-8?B?Q3hwZU1yK29FTUI1dHNGdFBrdEY5czJUZFhVSno5dnRnNTduMDZ6a0pGd09m?= =?utf-8?B?SGNPdVpKeWNDV2liNTRpWE9DU3lVdXNzcEEvTDFqMXZHV2pvTzdzdVFwMVc5?= =?utf-8?B?V1RPZmlnUElxczBuTGZyTHp1SEI5NTJGcDlsRmFBM21zVU5mRENpOEFrWHdE?= =?utf-8?B?L0prMHVYT3dpMjRDRmVQQllnUWwvamNFUHl1Si9EeFl0cHZkRGNSVkJseTA0?= =?utf-8?B?MWorUW1XS2JzcjA0VWQxMnVIUWZYNWFSaGM4Y1BXS2pGY1JtZ2NBV1JSMDZk?= =?utf-8?B?NVk2cEJIaEpBPT0=?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB6541.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZGpUSnJTTWdpdjh4ajVHRjcxcFlINjM5ZEZFaGY3eTNLMUlWdFdYVkRwd1pl?= =?utf-8?B?eHhlaVk0Q2VsMTBsdEovUzhTTUVsTlFDYnYxcERBeXVRQWYyOUV2d3VUbDQz?= =?utf-8?B?OE1mWVZYVG96OEFVSEVTVmJtcWpHSTdDK1A5dkhZUXVEbXRndEtiUHdWUkky?= =?utf-8?B?WnpQYm5RSnU3TGplVWtuR0FMRjhnT213U21kUzB5WFltRGFyT1c2NnQ3VWwr?= =?utf-8?B?c3NuRHRGK1NyVFBtUmxHaWlXSlgyWlhldS9zbVcyU3MySjN1M3ZJZDhYaXJF?= =?utf-8?B?TzJqc0UzaGU5WE1EK2ZUZkdoSlRQUHlKY3Y5cHh0RnFjL2hIdDdLc1daZitj?= =?utf-8?B?UzBuU3Z4OHFaUjJWUVorRXY4c0x5Q2ZyZWl4ZVZzQStzYW90SUxRT01YVW4y?= =?utf-8?B?ZWI5aEphdFpjcE1lMXhUdHUxNkRqb2h1V1o0bk9SdGNnSm1BS1hKcGh3MzJ1?= =?utf-8?B?TUR3SUd6ZXpacjd1ZWpLNkNPVmlTZVphRHJidFRTR0NYcGhld3RQR2lmRVor?= =?utf-8?B?N1F2U2N6TWwvZERZRHNzOWRZb2lPclRRV0NVdkxoMlh1WlNJNG5sY3lnTWNZ?= =?utf-8?B?aEZ1VWd6Y0Y1WXBHblhDQnJXZDFVcHpUcW4yZlJ6WTJwZkJwa0UwUWREdDJP?= =?utf-8?B?TmozQnFyK2hwOWZFeTNjSElZUlVaQ2JGOU1mMVFmdG9LN0VXNy9ZbWZ4dUNM?= =?utf-8?B?L015S3NwSVpLbU5iQmt1UWtSSmV6d1cwWDZoa0dtcWZndS9QelBmVEY1NlZn?= =?utf-8?B?dlJLaGloMnd2SGNmOHBjbnlaaGdMK1JIblV5WFBScmU5a01tVFU5RjNuV0RN?= =?utf-8?B?QTVZbUxraXNtTUVNVVZPR2R4UngwMmJhZTdQQ2lYamViSU5VM2Z3Q2xpa2ZR?= =?utf-8?B?Q1BJT2FEUFVRclJjeWlTb3FrWDNiNnpZZlJscEplSkZPTGp3UWlqREsrb3Js?= =?utf-8?B?NEZGaTdBenhzT1FIV2F5SGI4bzJHbnhZQ0RTTHB0L3gxSWtpcmFUUU82aEE5?= =?utf-8?B?K0Jrci81TitsUVhKclIyanZ1YkNqN0xtVE1mVEY3Q2FmZ1MwVHhWTFBnYW0z?= =?utf-8?B?M1NqTE04ZThVY3VrczlMaXhmL3Rsb0hmdE84b0dMU3Vmb3Znc3AwdzRyRUNs?= =?utf-8?B?WGwzQWhjZ25VRmNKLzhUdW5yam82SElZS20xRmZnLytvc3NsNjljZ05XUGUz?= =?utf-8?B?dllxNm9vNVdXRVNETzRHR2tkeHJoRmZrZW9LMWYxQWxuWU5URlJBSkdmSHc2?= =?utf-8?B?Z2xJSnhTK2N2U0t3cHR5ajRUbWFQNk9RTHpNbUs4Rlc2R0RFMXBocGFrcEk1?= =?utf-8?B?WjlUcDV0ZEhhV3VoKzByRndjOHY3UCtrVzZYMnJDc3Q0d0xMUUR2YXR0V25D?= =?utf-8?B?RWZDNXJTZXZPbVQrblhZbkJsT2U5ZnJ0dUVtYWpsYWZEREx0WFFXcVh6b05T?= =?utf-8?B?aEVjRlhXd2U3VGsvZWt3aE83Zlk0aDNwNEVhUFFYQzZuUkJJRThIR0hsVXJP?= =?utf-8?B?dWcyc2hwaDlrODBTdW51YVlhZXNmZmptNHU4TzJleHFyZkwrMHJFNW96M2I4?= =?utf-8?B?OXU3ZmxZUkwvdVdoWXRFSzZ2VTM4aFNpNVpkeGhBcUZkTyt0US8ySmZ6MWt5?= =?utf-8?B?SDh4d2tEOU5NWm4wSUpDY2hPalQyUWhnZ2ExZVpFR1c2Zm04MDRyUWtWUlFv?= =?utf-8?B?TE5VUXhrTkpkMjJnZHJSSFhxaXFBV3g4UGw1TkZnbm1IR0FRZzA4bEpheXls?= =?utf-8?B?RWM0TnFMSVUzMWZsdEVMRDNHTWx1azZjL2JuWHVkTjVqdEluZXNYM2pPb3FP?= =?utf-8?B?c2t2TG5oa3RYOHZybmRPOHM0cW82SHRFRjhRZnRYYTh5WUo2TGtHOUR4QUJK?= =?utf-8?B?Yyt1dlFwamtKTmdOTUtGR2x3Y2JpNVlZTUpBakxwaG9FdmRVUG5QME9RN3kz?= =?utf-8?B?dG16elpUY3BYODBGaVpuSTJGOGhTLzgzcFRtOGdlcEprSlZxUmZzdERVMldp?= =?utf-8?B?dmtCR0g5M3dJOWxyWFdsOTQ2OTh2SWU1TVVycE1ZZmpVV2F2dkdMbHVvMkJi?= =?utf-8?B?bzJnWW8yOWUvOG5YVE5ycHlvSVprN1BkWXlVSjNVTjZGQ3ZGT3dsSWpUU2Vw?= =?utf-8?B?bWNwYzhIU2xBdmVFcCs1UFo2MkpKeGZTeDBWVlZCSm5GVWxUblhJRVVCR0c5?= =?utf-8?B?VGc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <623AAB391A891A4692646E7B64C491FC@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: microchip.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB6541.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: cbd54c24-3c2d-493c-8a2d-08ddf0311359 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Sep 2025 06:12:52.4720 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ilCbtb02MC9AsYha3/LUaIMIVyhojE7qQ9A2hJO2NQVB0l+GOA4lwsLKWpk1aOYlVyqgAvO+Yg/x3GkNDzOc7vlUg8aimGEbDVphFxeSQao= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR11MB7392 T24gMTAvMDkvMjUgMDI6NDgsIEZyYW5rIExpIHdyb3RlOg0KPiBFWFRFUk5BTCBFTUFJTDogRG8g bm90IGNsaWNrIGxpbmtzIG9yIG9wZW4gYXR0YWNobWVudHMgdW5sZXNzIHlvdSBrbm93IHRoZSBj b250ZW50IGlzIHNhZmUNCj4NCj4gT24gVHVlLCBTZXAgMDksIDIwMjUgYXQgMDQ6NDM6MzFQTSAr MDUzMCwgRHVyYWkgTWFuaWNrYW0gS1Igd3JvdGU6DQo+PiBBZGQgc3VwcG9ydCBmb3IgbWljcm9j aGlwIFNBTUE3RDY1IEkzQyBIQ0kgbWFzdGVyIG9ubHkgSVAuIFRoaXMNCj4+IGhhcmR3YXJlIGlz IGFuIGluc3RhbmNlIG9mIHRoZSBNSVBJIEkzQyBIQ0kgQ29udHJvbGxlciBpbXBsZW1lbnRpbmcN Cj4+IHZlcnNpb24gMS4wIHNwZWNpZmljYXRpb24uIFRoaXMgZHJpdmVyIGFkZHMgcGxhdGZvcm0t c3BlY2lmaWMNCj4+IHN1cHBvcnQgZm9yIFNBTUE3RDY1IFNvQy4NCg0KSGkgRnJhbmssDQoNCldl IGhhdmUgaW50ZWdyYXRlZCB0aGUgSTNDIEhDSSBJUCBmcm9tIHN5bm9wc3lzLiBCdXQgdGhlIElQ IHdoaWNoIHdlIA0KaW50ZWdyYXRlZCBpbnRvIG91ciBTQU1BN0Q2NSBTb0MgZG9lcyBub3Qgc3Vw cG9ydCBETUEgZmVhdHVyZSwgRW5kaWFuZXNzIA0KY2hlY2sgYW5kIGZldyBvdGhlciBpbnRlcnJ1 cHQgc3RhdHVzLiBTbyB3ZSBoYXZlIHRvIGludHJvZHVjZSBhIA0KbWljcm9jaGlwIFNvQyBzcGVj aWZpYyBtYWNybyB0byBtb2RpZnkgdGhpcyBkcml2ZXIuIFNvIHdlIGhhdmUgYmVsb3cgMiANCmFw cHJvYWNoZXMsDQoNCjEuIFRvIGludHJvZHVjZSBhIE1pY3JvY2hpcCBTb0Mgc3BlY2lmaWMgbWFj cm8gdG8gYWRkIE1pY3JvY2hpcCBzcGVjaWZpYyANCkkzQyBjaGFuZ2VzIHRvIHRoZSBleGlzdGlu ZyBkcml2ZXIuIEJ1dCBpbiB0aGlzIGFwcHJvYWNoLCBpZiBzdXBwb3NlIHdlIA0KaGF2ZSBhIGNo YW5nZXMgaW4gdGhlIGkzYy1oY2kgZHJpdmVyLCB3ZSBoYXZlIHRvIGFkYXB0IHRoZSBjaGFuZ2Vz IHRvIA0Kb3VyIElQIGFsc28gZHVyaW5nIGV2ZXJ5IGtlcm5lbCB1cGRhdGlvbiBhbmQgSSBkb25v dCBrbm93IHdoZXRoZXIgdGhpcyANCmlzIGFjY2VwdGVkIGJ5IHRoZSBpM2MtaGNpIGRyaXZlciBt YWludGFpbmVyLg0KDQoyLiBPdGhlcndpc2UsIGNyZWF0aW5nIGEgc2VwYXJhdGUgcGxhdGZvcm0g ZHJpdmVyIGJ5IHJldXNpbmcgdGhlIA0KZXhpc3RpbmcgaTNjLWhjaSBkcml2ZXIuDQoNCkkgcmFp c2VkIGEgcXVlcnkgZmV3IHdlZWtzIGJhY2sgdG8gZGVjaWRlIHdoaWNoIGFwcHJvYWNoIHRvIHBy b2NlZWQgDQpiZWZvcmUgc2VuZGluZyB0aGlzIHBhdGNoIHRvIHVwc3RyZWFtLiBCdXQgaSBoYXZl IHJlY2VpdmVkIGNvbW1lbnRzIGxpa2UgDQoiaXRzIHVwdG8gdXMgdG8gZGVjaWRlIHdoaWNoIGlz IGJlc3Qgd2F5Ii4gSSBkb250IGhhdmUgbXVjaCBpZGVhIG9uIA0Kd2hpY2ggaXMgYmVzdCB3YXkg dG8gcHJvY2VlZCBhbmQgbWFpbnRhaW4uU28sIEkgaGF2ZSBkZWNpZGVkIHRvIGdvIHdpdGggDQph cHByb2FjaCAyLg0KDQpDb3VsZCB5b3Ugc2hhcmUgeW91ciBpZGVhIG9uIHRoaXM/DQoNCj4gd2h5 IG5vdCByZXVzZSBkcml2ZXJzL2kzYy9tYXN0ZXIvbWlwaS1pM2MtaGNpL2NvcmUuYyBhbmQgY3Jl YXRlIG5ldyBvbmUgPw0KPg0KPiBGcmFuaw0KPg0KPj4gSTNDIGluIG1hc3RlciBtb2RlIHN1cHBv cnRzIHVwIHRvIDEyLjVNSHosIFNEUiBtb2RlIGRhdGEgdHJhbnNmZXIgaW4NCj4+IG1peGVkIGJ1 cyBtb2RlIChJMkMgYW5kIEkzQyB0YXJnZXQgZGV2aWNlcyBvbiBzYW1lIGkzYyBidXMpLiBJdCBh bHNvDQo+PiBzdXBwb3J0cyBJQkkgbWVjaGFuaXNtLg0KPj4NCj4+IEZlYXR1cmVzIHRlc3RlZCBh bmQgc3VwcG9ydGVkIDoNCj4+ICAgICBTdGFuZGFyZCBDQ0MgY29tbWFuZHMuDQo+PiAgICAgSTND IFNEUiBtb2RlIHByaXZhdGUgdHJhbnNmZXJzIGluIFBJTyBtb2RlLg0KPj4gICAgIEkyQyB0cmFu c2ZlcnMgaW4gUElPIG1vZGUuDQo+PiAgICAgUHVyZSBidXMgbW9kZSBhbmQgbWl4ZWQgYnVzIG1v ZGUuDQo+Pg0KPj4gU2lnbmVkLW9mZi1ieTogRHVyYWkgTWFuaWNrYW0gS1IgPGR1cmFpLm1hbmlj a2Fta3JAbWljcm9jaGlwLmNvbT4NCj4+IC0tLQ0KPj4gICBkcml2ZXJzL2kzYy9tYXN0ZXIvS2Nv bmZpZyAgICAgICAgICAgICAgICAgICB8ICAgMTQgKw0KPj4gICBkcml2ZXJzL2kzYy9tYXN0ZXIv TWFrZWZpbGUgICAgICAgICAgICAgICAgICB8ICAgIDEgKw0KPj4gICBkcml2ZXJzL2kzYy9tYXN0 ZXIvc2FtYTdkNjUtaTNjLWhjaS1tYXN0ZXIuYyB8IDI3MDUgKysrKysrKysrKysrKysrKysrDQo+ PiAgIDMgZmlsZXMgY2hhbmdlZCwgMjcyMCBpbnNlcnRpb25zKCspDQo+PiAgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2kzYy9tYXN0ZXIvc2FtYTdkNjUtaTNjLWhjaS1tYXN0ZXIuYw0KPj4N Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2kzYy9tYXN0ZXIvS2NvbmZpZyBiL2RyaXZlcnMvaTNj L21hc3Rlci9LY29uZmlnDQo+PiBpbmRleCAxM2RmMjk0NGYyZWMuLjhkMGIwMzNiZmEzZSAxMDA2 NDQNCj4+IC0tLSBhL2RyaXZlcnMvaTNjL21hc3Rlci9LY29uZmlnDQo+PiArKysgYi9kcml2ZXJz L2kzYy9tYXN0ZXIvS2NvbmZpZw0KPj4gQEAgLTc0LDMgKzc0LDE3IEBAIGNvbmZpZyBSRU5FU0FT X0kzQw0KPj4NCj4+ICAgICAgICAgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEg bW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsIGJlDQo+PiAgICAgICAgICBjYWxsZWQgcmVu ZXNhcy1pM2MuDQo+PiArDQo+PiArY29uZmlnIFNBTUE3RDY1X0kzQ19IQ0lfTUFTVEVSDQo+PiAr ICAgICAgICB0cmlzdGF0ZSAiTWljcm9jaGlwIFNBTUE3RDY1IEkzQyBIQ0kgTWFzdGVyIGRyaXZl ciINCj4+ICsgICAgICAgIGRlcGVuZHMgb24gSTNDDQo+PiArICAgICAgICBkZXBlbmRzIG9uIEhB U19JT01FTQ0KPj4gKyAgICAgICAgZGVwZW5kcyBvbiBBUkNIX0FUOTENCj4+ICsgICAgICAgIGhl bHANCj4+ICsgICAgICAgICAgU3VwcG9ydCBmb3IgTWljcm9jaGlwIFNBTUE3RDY1IEkzQyBIQ0kg TWFzdGVyIENvbnRyb2xsZXIuDQo+PiArDQo+PiArICAgICAgICAgIFRoaXMgaGFyZHdhcmUgaXMg YW4gaW5zdGFuY2Ugb2YgdGhlIE1JUEkgSTNDIEhDSSBjb250cm9sbGVyLiBUaGlzDQo+PiArICAg ICAgICAgIGRyaXZlciBhZGRzIHBsYXRmb3JtLXNwZWNpZmljIHN1cHBvcnQgZm9yIFNBTUE3RDY1 IFNvQy4NCj4+ICsNCj4+ICsgICAgICAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMg YSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwgYmUNCj4+ICsgICAgICAgY2FsbGVkIHNh bWE3ZDY1LWkzYy1oY2ktbWFzdGVyLg0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTNjL21hc3Rl ci9NYWtlZmlsZSBiL2RyaXZlcnMvaTNjL21hc3Rlci9NYWtlZmlsZQ0KPj4gaW5kZXggYWFjNzRm M2UzODUxLi4wMzJjOGM1MTFmNTggMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL2kzYy9tYXN0ZXIv TWFrZWZpbGUNCj4+ICsrKyBiL2RyaXZlcnMvaTNjL21hc3Rlci9NYWtlZmlsZQ0KPj4gQEAgLTUs MyArNSw0IEBAIG9iai0kKENPTkZJR19BU1QyNjAwX0kzQ19NQVNURVIpICAgICAgKz0gYXN0MjYw MC1pM2MtbWFzdGVyLm8NCj4+ICAgb2JqLSQoQ09ORklHX1NWQ19JM0NfTUFTVEVSKSAgICAgICAg ICs9IHN2Yy1pM2MtbWFzdGVyLm8NCj4+ICAgb2JqLSQoQ09ORklHX01JUElfSTNDX0hDSSkgICAg ICAgICAgICs9IG1pcGktaTNjLWhjaS8NCj4+ICAgb2JqLSQoQ09ORklHX1JFTkVTQVNfSTNDKSAg ICAgICAgICAgICs9IHJlbmVzYXMtaTNjLm8NCj4+ICtvYmotJChDT05GSUdfU0FNQTdENjVfSTND X0hDSV9NQVNURVIpICAgICAgICArPSBzYW1hN2Q2NS1pM2MtaGNpLW1hc3Rlci5vDQo+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9pM2MvbWFzdGVyL3NhbWE3ZDY1LWkzYy1oY2ktbWFzdGVyLmMgYi9k cml2ZXJzL2kzYy9tYXN0ZXIvc2FtYTdkNjUtaTNjLWhjaS1tYXN0ZXIuYw0KPj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjIxODk0MTdmMmFmDQo+PiAtLS0g L2Rldi9udWxsDQo+PiArKysgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvc2FtYTdkNjUtaTNjLWhjaS1t YXN0ZXIuYw0KPj4gQEAgLTAsMCArMSwyNzA1IEBADQo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjANCj4+ICsvKg0KPj4gKyAqIENvcHlyaWdodCAoQykgMjAyNSBNaWNyb2No aXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzDQo+PiArICoNCj4+ICsgKiBB dXRob3I6IER1cmFpIE1hbmlja2FtIEtSIDxkdXJhaS5tYW5pY2thbWtyQG1pY3JvY2hpcC5jb20+ DQo+PiArICoNCj4+ICsgKiBNaWNyb2NoaXAgU0FNQTdENjUgSTNDIEhDSSBNYXN0ZXIgZHJpdmVy DQo+PiArICovDQo+PiArDQo+PiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+DQo+PiArI2lu Y2x1ZGUgPGxpbnV4L2JpdG1hcC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4+ICsj aW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+DQo+ PiArI2luY2x1ZGUgPGxpbnV4L2kzYy9tYXN0ZXIuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvaW50 ZXJydXB0Lmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4 L2lvcG9sbC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4+ICsjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0K Pj4gKw0KPj4gKy8qDQo+PiArICogTWljcm9jaGlwIEhvc3QgQ29udHJvbGxlciBDYXBhYmlsaXRp ZXMgYW5kIE9wZXJhdGlvbiBSZWdpc3RlcnMNCj4+ICsgKi8NCj4+ICsNCj4+ICsjZGVmaW5lIE1D SFBfSENJX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAweDAwICAgIC8qIEhDSSBWZXJzaW9u IChpbiBCQ0QpICovDQo+PiArDQo+PiArI2RlZmluZSBNQ0hQX0hDX0NPTlRST0wgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDA0DQo+PiArI2RlZmluZSBNQ0hQX0hDX0NPTlRST0xfQlVT X0VOQUJMRSAgICAgICAgICAgQklUKDMxKQ0KPj4gKyNkZWZpbmUgTUNIUF9IQ19DT05UUk9MX1JF U1VNRSAgICAgICAgICAgICAgICAgICAgICAgQklUKDMwKQ0KPj4gKyNkZWZpbmUgTUNIUF9IQ19D T05UUk9MX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAgQklUKDI5KQ0KPj4gKyNkZWZpbmUg TUNIUF9IQ19DT05UUk9MX0hPVF9KT0lOX0NUUkwgICAgICAgICAgICAgICAgQklUKDgpICAvKiBI b3QtSm9pbiBBQ0svTkFDSyBDb250cm9sICovDQo+PiArI2RlZmluZSBNQ0hQX0hDX0NPTlRST0xf STJDX1RBUkdFVF9QUkVTRU5UICAgQklUKDcpDQo+PiArI2RlZmluZSBNQ0hQX0hDX0NPTlRST0xf SUJBX0lOQ0xVREUgICAgICAgICAgQklUKDApICAvKiBJbmNsdWRlIEkzQyBCcm9hZGNhc3QgQWRk cmVzcyAqLw0KPj4gKw0KPj4gKyNkZWZpbmUgTUNIUF9NQVNURVJfREVWSUNFX0FERFIgICAgICAg ICAgICAgICAgICAgICAgMHgwOCAgICAvKiBNYXN0ZXIgRGV2aWNlIEFkZHJlc3MgKi8NCj4+ICsj ZGVmaW5lIE1DSFBfTUFTVEVSX0RZTkFNSUNfQUREUl9WQUxJRCAgICAgICAgICAgICAgIEJJVCgz MSkgLyogRHluYW1pYyBBZGRyZXNzIGlzIFZhbGlkICovDQo+PiArI2RlZmluZSBNQ0hQX01BU1RF Ul9EWU5BTUlDX0FERFIodikgICAgICAgICAgRklFTERfUFJFUChHRU5NQVNLKDIyLCAxNiksIHYp DQo+PiArDQo+PiArI2RlZmluZSBNQ0hQX0hDX0NBUEFCSUxJVElFUyAgICAgICAgICAgICAgICAg MHgwYw0KPj4gKyNkZWZpbmUgTUNIUF9IQ19DQVBfSERSX1RTX0VOICAgICAgICAgICAgICAgICAg ICAgICAgQklUKDcpDQo+PiArI2RlZmluZSBNQ0hQX0hDX0NBUF9IRFJfRERSX0VOICAgICAgICAg ICAgICAgICAgICAgICBCSVQoNikNCj4+ICsjZGVmaW5lIE1DSFBfSENfQ0FQX05PTl9DVVJSRU5U X01BU1RFUl9DQVAgICBCSVQoNSkgIC8qIG1hc3RlciBoYW5kb2ZmIGNhcGFibGUgKi8NCj4+ICsj ZGVmaW5lIE1DSFBfSENfQ0FQX0FVVE9fQ09NTUFORCAgICAgICAgICAgICBCSVQoMykNCj4+ICsj ZGVmaW5lIE1DSFBfSENfQ0FQX0NPTUJPX0NPTU1BTkQgICAgICAgICAgICBCSVQoMikNCj4+ICsN Cj4+ICsjZGVmaW5lIE1DSFBfUkVTRVRfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAweDEwDQo+ PiArI2RlZmluZSBNQ0hQX0lCSV9RVUVVRV9SU1QgICAgICAgICAgICAgICAgICAgQklUKDUpDQo+ PiArI2RlZmluZSBNQ0hQX1JYX0ZJRk9fUlNUICAgICAgICAgICAgICAgICAgICAgQklUKDQpDQo+ PiArI2RlZmluZSBNQ0hQX1RYX0ZJRk9fUlNUICAgICAgICAgICAgICAgICAgICAgQklUKDMpDQo+ PiArI2RlZmluZSBNQ0hQX1JFU1BfUVVFVUVfUlNUICAgICAgICAgICAgICAgICAgQklUKDIpDQo+ PiArI2RlZmluZSBNQ0hQX0NNRF9RVUVVRV9SU1QgICAgICAgICAgICAgICAgICAgQklUKDEpDQo+ PiArI2RlZmluZSBNQ0hQX1NPRlRfUlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC SVQoMCkgIC8qIENvcmUgUmVzZXQgKi8NCj4+ICsNCj4+ICsjZGVmaW5lIE1DSFBfUFJFU0VOVF9T VEFURSAgICAgICAgICAgICAgICAgICAweDE0DQo+PiArI2RlZmluZSBNQ0hwX1NUQVRFX0NVUlJF TlRfTUFTVEVSICAgICAgICAgICAgQklUKDIpDQo+PiArDQo+PiArI2RlZmluZSBNQ0hQX0lOVFJf U1RBVFVTICAgICAgICAgICAgICAgICAgICAgMHgyMA0KPj4gKyNkZWZpbmUgTUNIUF9JTlRSX1NU QVRVU19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHgyNA0KPj4gKyNkZWZpbmUgTUNIUF9J TlRSX1NJR05BTF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHgyOA0KPj4gKyNkZWZpbmUg TUNIUF9JTlRSX0ZPUkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyYw0KPj4gKyNk ZWZpbmUgTUNIUF9JTlRSX0hDX0lOVEVSTkFMX0VSUiAgICAgICAgICAgIEJJVCgxMCkgLyogSEMg SW50ZXJuYWwgRXJyb3IgKi8NCj4+ICsNCj4+ICsjZGVmaW5lIE1DSFBfREFUX1NFQ1RJT04gICAg ICAgICAgICAgICAgICAgICAweDMwICAgIC8qIERldmljZSBBZGRyZXNzIFRhYmxlICovDQo+PiAr I2RlZmluZSBNQ0hQX0RBVF9UQUJMRV9TSVpFICAgICAgICAgICAgICAgICAgR0VOTUFTSygxNywg MTIpDQo+PiArI2RlZmluZSBNQ0hQX0RBVF9UQUJMRV9PRkZTRVQgICAgICAgICAgICAgICAgICAg ICAgICBHRU5NQVNLKDExLCAwKQ0KPj4gKw0KPj4gKyNkZWZpbmUgTUNIUF9EQ1RfU0VDVElPTiAg ICAgICAgICAgICAgICAgICAgIDB4MzQgICAgLyogRGV2aWNlIENoYXJhY3RlcmlzdGljcyBUYWJs ZSAqLw0KPj4gKyNkZWZpbmUgTUNIUF9EQ1RfVEFCTEVfSU5ERVggICAgICAgICAgICAgICAgIEdF Tk1BU0soMjEsIDE5KQ0KPj4gKyNkZWZpbmUgTUNIUF9EQ1RfVEFCTEVfU0laRSAgICAgICAgICAg ICAgICAgIEdFTk1BU0soMTgsIDEyKQ0KPj4gKyNkZWZpbmUgTUNIUF9EQ1RfVEFCTEVfT0ZGU0VU ICAgICAgICAgICAgICAgICAgICAgICAgR0VOTUFTSygxMSwgMCkNCj4+ICsNCj4+ICsjZGVmaW5l IE1DSFBfUklOR19IRUFERVJTX1NFQ1RJT04gICAgICAgICAgICAweDM4DQo+PiArI2RlZmluZSBN Q0hQX1JJTkdfSEVBREVSU19PRkZTRVQgICAgICAgICAgICAgR0VOTUFTSygxNSwgMCkNCj4+ICsN Cj4+ICsjZGVmaW5lIE1DSFBfUElPX1NFQ1RJT04gICAgICAgICAgICAgICAgICAgICAweDNjDQo+ PiArI2RlZmluZSBNQ0hQX1BJT19SRUdTX09GRlNFVCAgICAgICAgICAgICAgICAgR0VOTUFTSygx NSwgMCkgIC8qIFBJTyBPZmZzZXQgKi8NCj4+ICsNCj4+ICsjZGVmaW5lIE1DSFBfRVhUX0NBUFNf U0VDVElPTiAgICAgICAgICAgICAgICAgICAgICAgIDB4NDANCj4+ICsjZGVmaW5lIE1DSFBfRVhU X0NBUFNfT0ZGU0VUICAgICAgICAgICAgICAgICBHRU5NQVNLKDE1LCAwKQ0KPj4gKw0KPj4gKyNk ZWZpbmUgTUNIUF9JQklfTk9USUZZX0NUUkwgICAgICAgICAgICAgICAgIDB4NTggICAgLyogSUJJ IE5vdGlmeSBDb250cm9sICovDQo+PiArI2RlZmluZSBNQ0hQX0lCSV9OT1RJRllfU0lSX1JFSkVD VEVEICAgICAgICAgQklUKDMpICAvKiBSZWplY3RlZCBUYXJnZXQgSW50ZXJydXB0IFJlcXVlc3Qg Ki8NCj4+ICsjZGVmaW5lIE1DSFBfSUJJX05PVElGWV9NUl9SRUpFQ1RFRCAgICAgICAgICBCSVQo MSkgIC8qIFJlamVjdGVkIE1hc3RlciBSZXF1ZXN0IENvbnRyb2wgKi8NCj4+ICsjZGVmaW5lIE1D SFBfSUJJX05PVElGWV9ISl9SRUpFQ1RFRCAgICAgICAgICBCSVQoMCkgIC8qIFJlamVjdGVkIEhv dC1Kb2luIENvbnRyb2wgKi8NCj4+ICsNCj4+ICsjZGVmaW5lIERFVl9DVFhfQkFTRV9MTyAgICAg ICAgICAgICAgICAgICAgICAweDYwDQo+PiArI2RlZmluZSBERVZfQ1RYX0JBU0VfSEkgICAgICAg ICAgICAgICAgICAgICAgMHg2NA0KPj4gKw0KPj4gKy8qDQo+PiArICogUElPIEFjY2VzcyBBcmVh DQo+PiArICovDQo+PiArDQo+PiArI2RlZmluZSBwaW9fcmVnX3JlYWQocikgICAgICAgICByZWFk bChoY2ktPlBJT19yZWdzICsgKFBJT18jI3IpKQ0KPj4gKyNkZWZpbmUgcGlvX3JlZ193cml0ZShy LCB2KSAgICAgd3JpdGVsKHYsIGhjaS0+UElPX3JlZ3MgKyAoUElPXyMjcikpDQo+PiArDQo+PiAr I2RlZmluZSBQSU9fTUNIUF9DT01NQU5EX1FVRVVFX1BPUlQgICAgICAgICAgMHgwMA0KPj4gKyNk ZWZpbmUgUElPX01DSFBfUkVTUE9OU0VfUVVFVUVfUE9SVCAgICAgICAgIDB4MDQNCj4+ICsjZGVm aW5lIFBJT19NQ0hQX1hGRVJfREFUQV9QT1JUICAgICAgICAgICAgICAweDA4DQo+PiArI2RlZmlu ZSBQSU9fTUNIUF9JQklfUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBjDQo+PiAr DQo+PiArI2RlZmluZSBQSU9fTUNIUF9RVUVVRV9USExEX0NUUkwgICAgICAgICAgICAgMHgxMA0K Pj4gKyNkZWZpbmUgTUNIUF9RVUVVRV9JQklfU1RBVFVTX1RITEQgICAgICAgICAgIEdFTk1BU0so MzEsIDI0KQ0KPj4gKyNkZWZpbmUgTUNIUF9RVUVVRV9JQklfREFUQV9USExEICAgICAgICAgICAg IEdFTk1BU0soMjMsIDE2KQ0KPj4gKyNkZWZpbmUgTUNIUF9RVUVVRV9SRVNQX0JVRl9USExEICAg ICAgICAgICAgIEdFTk1BU0soMTUsIDgpDQo+PiArI2RlZmluZSBNQ0hQX1FVRVVFX0NNRF9FTVBU WV9CVUZfVEhMRCAgICAgICAgR0VOTUFTSyg3LCAwKQ0KPj4gKw0KPj4gKyNkZWZpbmUgUElPX01D SFBfREFUQV9CVUZGRVJfVEhMRF9DVFJMICAgICAgIDB4MTQNCj4+ICsjZGVmaW5lIE1DSFBfREFU QV9SWF9TVEFSVF9USExEICAgICAgICAgICAgICBHRU5NQVNLKDI2LCAyNCkNCj4+ICsjZGVmaW5l IE1DSFBfREFUQV9UWF9TVEFSVF9USExEICAgICAgICAgICAgICBHRU5NQVNLKDE4LCAxNikNCj4+ ICsjZGVmaW5lIE1DSFBfREFUQV9SWF9CVUZfVEhMRCAgICAgICAgICAgICAgICBHRU5NQVNLKDEw LCA4KQ0KPj4gKyNkZWZpbmUgTUNIUF9EQVRBX1RYX0JVRl9USExEICAgICAgICAgICAgICAgIEdF Tk1BU0soMiwgMCkNCj4+ICsNCj4+ICsjZGVmaW5lIFBJT19NQ0hQX1FVRVVFX1NJWkUgICAgICAg ICAgICAgICAgICAweDE4DQo+PiArI2RlZmluZSBNQ0hQX1RYX0RBVEFfQlVGRkVSX1NJWkUgICAg ICAgICAgICAgR0VOTUFTSygzMSwgMjQpDQo+PiArI2RlZmluZSBNQ0hQX1JYX0RBVEFfQlVGRkVS X1NJWkUgICAgICAgICAgICAgR0VOTUFTSygyMywgMTYpDQo+PiArI2RlZmluZSBNQ0hQX0lCSV9T VEFUVVNfU0laRSAgICAgICAgICAgICAgICAgR0VOTUFTSygxNSwgOCkNCj4+ICsjZGVmaW5lIE1D SFBfQ1JfUVVFVUVfU0laRSAgICAgICAgICAgICAgICAgICBHRU5NQVNLKDcsIDApDQo+PiArDQo+ PiArI2RlZmluZSBQSU9fTUNIUF9JTlRSX1NUQVRVUyAgICAgICAgICAgICAgICAgMHgyMA0KPj4g KyNkZWZpbmUgUElPX01DSFBfSU5UUl9TVEFUVVNfRU5BQkxFICAgICAgICAgIDB4MjQNCj4+ICsj ZGVmaW5lIFBJT19NQ0hQX0lOVFJfU0lHTkFMX0VOQUJMRSAgICAgICAgICAweDI4DQo+PiArI2Rl ZmluZSBQSU9fTUNIUF9JTlRSX0ZPUkNFICAgICAgICAgICAgICAgICAgMHgyYw0KPj4gKyNkZWZp bmUgU1RBVF9UUkFOU0ZFUl9CTE9DS0VEICAgICAgICAgICAgICAgIEJJVCgyNSkNCj4+ICsjZGVm aW5lIFNUQVRfUEVSUl9SRVNQX1VGTE9XICAgICAgICAgICAgICAgICBCSVQoMjQpDQo+PiArI2Rl ZmluZSBTVEFUX1BFUlJfQ01EX09GTE9XICAgICAgICAgICAgICAgICAgQklUKDIzKQ0KPj4gKyNk ZWZpbmUgU1RBVF9QRVJSX0lCSV9VRkxPVyAgICAgICAgICAgICAgICAgIEJJVCgyMikNCj4+ICsj ZGVmaW5lIFNUQVRfUEVSUl9SWF9VRkxPVyAgICAgICAgICAgICAgICAgICBCSVQoMjEpDQo+PiAr I2RlZmluZSBTVEFUX1BFUlJfVFhfT0ZMT1cgICAgICAgICAgICAgICAgICAgQklUKDIwKQ0KPj4g KyNkZWZpbmUgU1RBVF9FUlJfUkVTUF9RVUVVRV9GVUxMICAgICAgICAgICAgIEJJVCgxOSkNCj4+ ICsjZGVmaW5lIFNUQVRfV0FSTl9SRVNQX1FVRVVFX0ZVTEwgICAgICAgICAgICBCSVQoMTgpDQo+ PiArI2RlZmluZSBTVEFUX0VSUl9JQklfUVVFVUVfRlVMTCAgICAgICAgICAgICAgQklUKDE3KQ0K Pj4gKyNkZWZpbmUgU1RBVF9XQVJOX0lCSV9RVUVVRV9GVUxMICAgICAgICAgICAgIEJJVCgxNikN Cj4+ICsjZGVmaW5lIFNUQVRfRVJSX1JYX0RBVEFfRlVMTCAgICAgICAgICAgICAgICBCSVQoMTUp DQo+PiArI2RlZmluZSBTVEFUX1dBUk5fUlhfREFUQV9GVUxMICAgICAgICAgICAgICAgQklUKDE0 KQ0KPj4gKyNkZWZpbmUgU1RBVF9FUlJfVFhfREFUQV9FTVBUWSAgICAgICAgICAgICAgIEJJVCgx MykNCj4+ICsjZGVmaW5lIFNUQVRfV0FSTl9UWF9EQVRBX0VNUFRZICAgICAgICAgICAgICBCSVQo MTIpDQo+PiArI2RlZmluZSBTVEFUX1RSQU5TRkVSX0VSUiAgICAgICAgICAgICAgICAgICAgQklU KDkpDQo+PiArI2RlZmluZSBTVEFUX1dBUk5fSU5TX1NUT1BfTU9ERSAgICAgICAgICAgICAgQklU KDcpDQo+PiArI2RlZmluZSBTVEFUX1RSQU5TRkVSX0FCT1JUICAgICAgICAgICAgICAgICAgQklU KDUpDQo+PiArI2RlZmluZSBTVEFUX1JFU1BfUkVBRFkgICAgICAgICAgICAgICAgICAgICAgQklU KDQpDQo+PiArI2RlZmluZSBTVEFUX0NNRF9RVUVVRV9SRUFEWSAgICAgICAgICAgICAgICAgQklU KDMpDQo+PiArI2RlZmluZSBTVEFUX0lCSV9TVEFUVVNfVEhMRCAgICAgICAgICAgICAgICAgQklU KDIpDQo+PiArI2RlZmluZSBTVEFUX1JYX1RITEQgICAgICAgICAgICAgICAgICAgICAgICAgQklU KDEpDQo+PiArI2RlZmluZSBTVEFUX1RYX1RITEQgICAgICAgICAgICAgICAgICAgICAgICAgQklU KDApDQo+PiArDQo+PiArI2RlZmluZSBQSU9fTUNIUF9RVUVVRV9DVVJfU1RBVFVTICAgICAgICAg ICAgMHgzOA0KPj4gKyNkZWZpbmUgTUNIUF9DVVJfSUJJX1FfTEVWRUwgICAgICAgICAgICAgICAg IEdFTk1BU0soMjMsIDE2KQ0KPj4gKyNkZWZpbmUgTUNIUF9DVVJfUkVTUF9RX0xFVkVMICAgICAg ICAgICAgICAgIEdFTk1BU0soMTUsIDgpDQo+PiArI2RlZmluZSBNQ0hQX0NVUl9DTURfUV9FTVBU WV9MRVZFTCAgICAgICAgICAgR0VOTUFTSyg3LCAwKQ0KPj4gKw0KPj4gKyNkZWZpbmUgUElPX01D SFBfREFUQV9CVUZGRVJfQ1VSX1NUQVRVUyAgICAgIDB4M2MNCj4+ICsjZGVmaW5lIE1DSFBfQ1VS X1JYX0JVRl9MVkwgICAgICAgICAgICAgICAgICBHRU5NQVNLKDE1LCA4KQ0KPj4gKyNkZWZpbmUg TUNIUF9DVVJfVFhfQlVGX0xWTCAgICAgICAgICAgICAgICAgIEdFTk1BU0soNywgMCkNCj4+ICsN Cj4+ICsvKg0KPj4gKyAqIEhhbmR5IHN0YXR1cyBiaXQgY29tYmluYXRpb25zDQo+PiArICovDQo+ PiArDQo+PiArI2RlZmluZSBTVEFUX0xBVEVOQ1lfV0FSTklOR1MgICAgICAgICAgIChTVEFUX1dB Uk5fUkVTUF9RVUVVRV9GVUxMIHwgXA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU1RBVF9XQVJOX0lCSV9RVUVVRV9GVUxMIHwgXA0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVF9XQVJOX1JYX0RBVEFfRlVMTCB8IFwN Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVRfV0FSTl9U WF9EQVRBX0VNUFRZIHwgXA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU1RBVF9XQVJOX0lOU19TVE9QX01PREUpDQo+PiArDQo+PiArI2RlZmluZSBTVEFUX0xB VEVOQ1lfRVJST1JTICAgICAgICAgICAgIChTVEFUX0VSUl9SRVNQX1FVRVVFX0ZVTEwgfCBcDQo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFUX0VSUl9JQklf UVVFVUVfRlVMTCB8IFwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNUQVRfRVJSX1JYX0RBVEFfRlVMTCB8IFwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNUQVRfRVJSX1RYX0RBVEFfRU1QVFkpDQo+PiArDQo+PiArI2Rl ZmluZSBTVEFUX1BST0dfRVJST1JTICAgICAgICAgICAgICAgIChTVEFUX1RSQU5TRkVSX0JMT0NL RUQgfCBcDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFU X1BFUlJfUkVTUF9VRkxPVyB8IFwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNUQVRfUEVSUl9DTURfT0ZMT1cgfCBcDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTVEFUX1BFUlJfSUJJX1VGTE9XIHwgXA0KPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVF9QRVJSX1JYX1VGTE9XIHwg XA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVF9QRVJS X1RYX09GTE9XKQ0KPj4gKw0KPj4gKyNkZWZpbmUgU1RBVF9BTExfRVJST1JTICAgICAgICAgICAg ICAgICAoU1RBVF9UUkFOU0ZFUl9BQk9SVCB8IFwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNUQVRfVFJBTlNGRVJfRVJSIHwgXA0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVF9MQVRFTkNZX0VSUk9SUyB8IFwNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVRfUFJPR19FUlJP UlMpDQo+PiArDQo+PiArLyoNCj4+ICsgKiBBZGRyZXNzIEFzc2lnbm1lbnQgQ29tbWFuZA0KPj4g KyAqLw0KPj4gKw0KPj4gKyNkZWZpbmUgQ01EXzBfQVRUUl9BICAgICAgICAgICAgICAgICAgICBG SUVMRF9QUkVQKENNRF8wX0FUVFIsIDB4MikNCj4+ICsNCj4+ICsjZGVmaW5lIENNRF9BMF9UT0Mg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXMF9CSVRfKDMxKQ0KPj4gKyNkZWZpbmUg Q01EX0EwX1JPQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcwX0JJVF8oMzApDQo+ PiArI2RlZmluZSBDTURfQTBfREVWX0NPVU5UKHYpICAgICAgICAgICAgIEZJRUxEX1BSRVAoVzBf TUFTSygyOSwgMjYpLCB2KQ0KPj4gKyNkZWZpbmUgQ01EX0EwX0RFVl9JTkRFWCh2KSAgICAgICAg ICAgICBGSUVMRF9QUkVQKFcwX01BU0soMjAsIDE2KSwgdikNCj4+ICsjZGVmaW5lIENNRF9BMF9D TUQodikgICAgICAgICAgICAgICAgICAgRklFTERfUFJFUChXMF9NQVNLKDE0LCAgNyksIHYpDQo+ PiArI2RlZmluZSBDTURfQTBfVElEKHYpICAgICAgICAgICAgICAgICAgIEZJRUxEX1BSRVAoVzBf TUFTSyggNiwgIDMpLCB2KQ0KPj4gKw0KPj4gKy8qDQo+PiArICogSW1tZWRpYXRlIERhdGEgVHJh bnNmZXIgQ29tbWFuZA0KPj4gKyAqLw0KPj4gKw0KPj4gKyNkZWZpbmUgQ01EXzBfQVRUUl9JICAg ICAgICAgICAgICAgICAgICBGSUVMRF9QUkVQKENNRF8wX0FUVFIsIDB4MSkNCj4+ICsNCj4+ICsj ZGVmaW5lIENNRF9JMV9EQVRBX0JZVEVfNCh2KSAgICAgICAgICAgRklFTERfUFJFUChXMV9NQVNL KDYzLCA1NiksIHYpDQo+PiArI2RlZmluZSBDTURfSTFfREFUQV9CWVRFXzModikgICAgICAgICAg IEZJRUxEX1BSRVAoVzFfTUFTSyg1NSwgNDgpLCB2KQ0KPj4gKyNkZWZpbmUgQ01EX0kxX0RBVEFf QllURV8yKHYpICAgICAgICAgICBGSUVMRF9QUkVQKFcxX01BU0soNDcsIDQwKSwgdikNCj4+ICsj ZGVmaW5lIENNRF9JMV9EQVRBX0JZVEVfMSh2KSAgICAgICAgICAgRklFTERfUFJFUChXMV9NQVNL KDM5LCAzMiksIHYpDQo+PiArI2RlZmluZSBDTURfSTFfREVGX0JZVEUodikgICAgICAgICAgICAg IEZJRUxEX1BSRVAoVzFfTUFTSygzOSwgMzIpLCB2KQ0KPj4gKyNkZWZpbmUgQ01EX0kwX1RPQyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcwX0JJVF8oMzEpDQo+PiArI2RlZmluZSBD TURfSTBfUk9DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzBfQklUXygzMCkNCj4+ ICsjZGVmaW5lIENNRF9JMF9STlcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXMF9C SVRfKDI5KQ0KPj4gKyNkZWZpbmUgQ01EX0kwX01PREUodikgICAgICAgICAgICAgICAgICBGSUVM RF9QUkVQKFcwX01BU0soMjgsIDI2KSwgdikNCj4+ICsjZGVmaW5lIENNRF9JMF9EVFQodikgICAg ICAgICAgICAgICAgICAgRklFTERfUFJFUChXMF9NQVNLKDI1LCAyMyksIHYpDQo+PiArI2RlZmlu ZSBDTURfSTBfREVWX0lOREVYKHYpICAgICAgICAgICAgIEZJRUxEX1BSRVAoVzBfTUFTSygyMCwg MTYpLCB2KQ0KPj4gKyNkZWZpbmUgQ01EX0kwX0NQICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFcwX0JJVF8oMTUpDQo+PiArI2RlZmluZSBDTURfSTBfQ01EKHYpICAgICAgICAgICAg ICAgICAgIEZJRUxEX1BSRVAoVzBfTUFTSygxNCwgIDcpLCB2KQ0KPj4gKyNkZWZpbmUgQ01EX0kw X1RJRCh2KSAgICAgICAgICAgICAgICAgICBGSUVMRF9QUkVQKFcwX01BU0soIDYsICAzKSwgdikN Cj4+ICsNCj4+ICsvKg0KPj4gKyAqIFJlZ3VsYXIgRGF0YSBUcmFuc2ZlciBDb21tYW5kDQo+PiAr ICovDQo+PiArDQo+PiArI2RlZmluZSBDTURfMF9BVFRSX1IgICAgICAgICAgICAgICAgICAgIEZJ RUxEX1BSRVAoQ01EXzBfQVRUUiwgMHgwKQ0KPj4gKw0KPj4gKyNkZWZpbmUgQ01EX1IxX0RBVEFf TEVOR1RIKHYpICAgICAgICAgICBGSUVMRF9QUkVQKFcxX01BU0soNjMsIDQ4KSwgdikNCj4+ICsj ZGVmaW5lIENNRF9SMV9ERUZfQllURSh2KSAgICAgICAgICAgICAgRklFTERfUFJFUChXMV9NQVNL KDM5LCAzMiksIHYpDQo+PiArI2RlZmluZSBDTURfUjBfVE9DICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVzBfQklUXygzMSkNCj4+ICsjZGVmaW5lIENNRF9SMF9ST0MgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBXMF9CSVRfKDMwKQ0KPj4gKyNkZWZpbmUgQ01EX1IwX1JO VyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcwX0JJVF8oMjkpDQo+PiArI2RlZmlu ZSBDTURfUjBfTU9ERSh2KSAgICAgICAgICAgICAgICAgIEZJRUxEX1BSRVAoVzBfTUFTSygyOCwg MjYpLCB2KQ0KPj4gKyNkZWZpbmUgQ01EX1IwX0RCUCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFcwX0JJVF8oMjUpDQo+PiArI2RlZmluZSBDTURfUjBfREVWX0lOREVYKHYpICAgICAg ICAgICAgIEZJRUxEX1BSRVAoVzBfTUFTSygyMCwgMTYpLCB2KQ0KPj4gKyNkZWZpbmUgQ01EX1Iw X0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcwX0JJVF8oMTUpDQo+PiArI2Rl ZmluZSBDTURfUjBfQ01EKHYpICAgICAgICAgICAgICAgICAgIEZJRUxEX1BSRVAoVzBfTUFTSygx NCwgIDcpLCB2KQ0KPj4gKyNkZWZpbmUgQ01EX1IwX1RJRCh2KSAgICAgICAgICAgICAgICAgICBG SUVMRF9QUkVQKFcwX01BU0soIDYsICAzKSwgdikNCj4+ICsNCj4+ICsvKg0KPj4gKyAqIENvbWJv IFRyYW5zZmVyIChXcml0ZSArIFdyaXRlL1JlYWQpIENvbW1hbmQNCj4+ICsgKi8NCj4+ICsNCj4+ ICsjZGVmaW5lIENNRF8wX0FUVFJfQyAgICAgICAgICAgICAgICAgICAgRklFTERfUFJFUChDTURf MF9BVFRSLCAweDMpDQo+PiArDQo+PiArI2RlZmluZSBDTURfQzFfREFUQV9MRU5HVEgodikgICAg ICAgICAgIEZJRUxEX1BSRVAoVzFfTUFTSyg2MywgNDgpLCB2KQ0KPj4gKyNkZWZpbmUgQ01EX0Mx X09GRlNFVCh2KSAgICAgICAgICAgICAgICBGSUVMRF9QUkVQKFcxX01BU0soNDcsIDMyKSwgdikN Cj4+ICsjZGVmaW5lIENNRF9DMF9UT0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX MF9CSVRfKDMxKQ0KPj4gKyNkZWZpbmUgQ01EX0MwX1JPQyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFcwX0JJVF8oMzApDQo+PiArI2RlZmluZSBDTURfQzBfUk5XICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVzBfQklUXygyOSkNCj4+ICsjZGVmaW5lIENNRF9DMF9NT0RF KHYpICAgICAgICAgICAgICAgICAgRklFTERfUFJFUChXMF9NQVNLKDI4LCAyNiksIHYpDQo+PiAr I2RlZmluZSBDTURfQzBfMTZfQklUX1NVQk9GRlNFVCAgICAgICAgICAgICAgICAgICAgVzBfQklU XygyNSkNCj4+ICsjZGVmaW5lIENNRF9DMF9GSVJTVF9QSEFTRV9NT0RFICAgICAgICAgICAgICAg ICAgICBXMF9CSVRfKDI0KQ0KPj4gKyNkZWZpbmUgQ01EX0MwX0RBVEFfTEVOR1RIX1BPU0lUSU9O KHYpICBGSUVMRF9QUkVQKFcwX01BU0soMjMsIDIyKSwgdikNCj4+ICsjZGVmaW5lIENNRF9DMF9E RVZfSU5ERVgodikgICAgICAgICAgICAgRklFTERfUFJFUChXMF9NQVNLKDIwLCAxNiksIHYpDQo+ PiArI2RlZmluZSBDTURfQzBfQ1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzBf QklUXygxNSkNCj4+ICsjZGVmaW5lIENNRF9DMF9DTUQodikgICAgICAgICAgICAgICAgICAgRklF TERfUFJFUChXMF9NQVNLKDE0LCAgNyksIHYpDQo+PiArI2RlZmluZSBDTURfQzBfVElEKHYpICAg ICAgICAgICAgICAgICAgIEZJRUxEX1BSRVAoVzBfTUFTSyggNiwgIDMpLCB2KQ0KPj4gKw0KPj4g Ky8qDQo+PiArICogSW50ZXJuYWwgQ29udHJvbCBDb21tYW5kDQo+PiArICovDQo+PiArDQo+PiAr I2RlZmluZSBDTURfMF9BVFRSX00gICAgICAgICAgICAgICAgICAgIEZJRUxEX1BSRVAoQ01EXzBf QVRUUiwgMHg3KQ0KPj4gKw0KPj4gKyNkZWZpbmUgQ01EX00xX1ZFTkRPUl9TUEVDSUZJQyAgICAg ICAgICAgICAgICAgICAgIFcxX01BU0soNjMsIDMyKQ0KPj4gKyNkZWZpbmUgQ01EX00wX01JUElf UkVTRVJWRUQgICAgICAgICAgICAgICAgICAgICAgIFcwX01BU0soMzEsIDEyKQ0KPj4gKyNkZWZp bmUgQ01EX00wX01JUElfQ01EICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcwX01BU0soMTEs ICA4KQ0KPj4gKyNkZWZpbmUgQ01EX00wX1ZFTkRPUl9JTkZPX1BSRVNFTlQgICAgICAgICAgICAg ICAgIFcwX0JJVF8oIDcpDQo+PiArI2RlZmluZSBDTURfTTBfVElEKHYpICAgICAgICAgICAgICAg ICAgIEZJRUxEX1BSRVAoVzBfTUFTSyggNiwgIDMpLCB2KQ0KPj4gKw0KPj4gKy8qDQo+PiArICog RGV2aWNlIEFkZHJlc3MgVGFibGUgU3RydWN0dXJlDQo+PiArICovDQo+PiArDQo+PiArI2RlZmlu ZSBEQVRfMV9BVVRPQ01EX0hEUl9DT0RFICAgICAgICAgIFcxX01BU0soNTgsIDUxKQ0KPj4gKyNk ZWZpbmUgREFUXzFfQVVUT0NNRF9NT0RFICAgICAgICAgICAgICBXMV9NQVNLKDUwLCA0OCkNCj4+ ICsjZGVmaW5lIERBVF8xX0FVVE9DTURfVkFMVUUgICAgICAgICAgICAgVzFfTUFTSyg0NywgNDAp DQo+PiArI2RlZmluZSBEQVRfMV9BVVRPQ01EX01BU0sgICAgICAgICAgICAgIFcxX01BU0soMzks IDMyKQ0KPj4gKy8qICAgICAgREFUXzBfSTJDX0RFVklDRSAgICAgICAgICAgICAgICBXMF9CSVRf KDMxKSAqLw0KPj4gKyNkZWZpbmUgREFUXzBfREVWX05BQ0tfUkVUUllfQ05UICAgICAgICBXMF9N QVNLKDMwLCAyOSkNCj4+ICsjZGVmaW5lIERBVF8wX1JJTkdfSUQgICAgICAgICAgICAgICAgICAg VzBfTUFTSygyOCwgMjYpDQo+PiArI2RlZmluZSBEQVRfMF9EWU5BRERSX1BBUklUWSAgICAgICAg ICAgIFcwX0JJVF8oMjMpDQo+PiArI2RlZmluZSBEQVRfMF9EWU5BTUlDX0FERFJFU1MgICAgICAg ICAgIFcwX01BU0soMjIsIDE2KQ0KPj4gKyNkZWZpbmUgREFUXzBfVFMgICAgICAgICAgICAgICAg ICAgICAgICBXMF9CSVRfKDE1KQ0KPj4gKyNkZWZpbmUgREFUXzBfTVJfUkVKRUNUICAgICAgICAg ICAgICAgICBXMF9CSVRfKDE0KQ0KPj4gKy8qICAgICAgREFUXzBfU0lSX1JFSkVDVCAgICAgICAg ICAgICAgICBXMF9CSVRfKDEzKSAqLw0KPj4gKy8qICAgICAgREFUXzBfSUJJX1BBWUxPQUQgICAg ICAgICAgICAgICBXMF9CSVRfKDEyKSAqLw0KPj4gKyNkZWZpbmUgREFUXzBfU1RBVElDX0FERFJF U1MgICAgICAgICAgICBXMF9NQVNLKDYsIDApDQo+PiArDQo+PiArI2RlZmluZSBkYXRfdzBfcmVh ZChpKSAgICAgICAgICByZWFkbChoY2ktPkRBVF9yZWdzICsgKGkpICogOCkNCj4+ICsjZGVmaW5l IGRhdF93MV9yZWFkKGkpICAgICAgICAgIHJlYWRsKGhjaS0+REFUX3JlZ3MgKyAoaSkgKiA4ICsg NCkNCj4+ICsjZGVmaW5lIGRhdF93MF93cml0ZShpLCB2KSAgICAgIHdyaXRlbCh2LCBoY2ktPkRB VF9yZWdzICsgKGkpICogOCkNCj4+ICsjZGVmaW5lIGRhdF93MV93cml0ZShpLCB2KSAgICAgIHdy aXRlbCh2LCBoY2ktPkRBVF9yZWdzICsgKGkpICogOCArIDQpDQo+PiArDQo+PiArLyogR2xvYmFs IERBVCBmbGFncyAqLw0KPj4gKyNkZWZpbmUgREFUXzBfSTJDX0RFVklDRSAgICAgICAgICAgICAg ICBXMF9CSVRfKDMxKQ0KPj4gKyNkZWZpbmUgREFUXzBfU0lSX1JFSkVDVCAgICAgICAgICAgICAg ICBXMF9CSVRfKDEzKQ0KPj4gKyNkZWZpbmUgREFUXzBfSUJJX1BBWUxPQUQgICAgICAgICAgICAg ICBXMF9CSVRfKDEyKQ0KPj4gKw0KPj4gKy8qIDMyLWJpdCB3b3JkIGF3YXJlIGJpdCBhbmQgbWFz ayBtYWNyb3MgKi8NCj4+ICsjZGVmaW5lIFcwX01BU0soaCwgbCkgIEdFTk1BU0soKGgpIC0gMCwg IChsKSAtIDApDQo+PiArI2RlZmluZSBXMV9NQVNLKGgsIGwpICBHRU5NQVNLKChoKSAtIDMyLCAo bCkgLSAzMikNCj4+ICsjZGVmaW5lIFcyX01BU0soaCwgbCkgIEdFTk1BU0soKGgpIC0gNjQsIChs KSAtIDY0KQ0KPj4gKyNkZWZpbmUgVzNfTUFTSyhoLCBsKSAgR0VOTUFTSygoaCkgLSA5NiwgKGwp IC0gOTYpDQo+PiArDQo+PiArLyogU2FtZSBmb3Igc2luZ2xlIGJpdCBtYWNyb3MgKHRyYWlsaW5n IF8gdG8gYWxpZ24gd2l0aCBXKl9NQVNLIHdpZHRoKSAqLw0KPj4gKyNkZWZpbmUgVzBfQklUXyh4 KSAgQklUKCh4KSAtIDApDQo+PiArI2RlZmluZSBXMV9CSVRfKHgpICBCSVQoKHgpIC0gMzIpDQo+ PiArI2RlZmluZSBXMl9CSVRfKHgpICBCSVQoKHgpIC0gNjQpDQo+PiArI2RlZmluZSBXM19CSVRf KHgpICBCSVQoKHgpIC0gOTYpDQo+PiArDQo+PiArI2RlZmluZSByZWdfcmVhZChyKSAgICAgICAg ICAgICByZWFkbChoY2ktPmJhc2VfcmVncyArIChyKSkNCj4+ICsjZGVmaW5lIHJlZ193cml0ZShy LCB2KSAgICAgICAgIHdyaXRlbCh2LCBoY2ktPmJhc2VfcmVncyArIChyKSkNCj4+ICsjZGVmaW5l IHJlZ19zZXQociwgdikgICAgICAgICAgIHJlZ193cml0ZShyLCByZWdfcmVhZChyKSB8ICh2KSkN Cj4+ICsjZGVmaW5lIHJlZ19jbGVhcihyLCB2KSAgICAgICAgIHJlZ193cml0ZShyLCByZWdfcmVh ZChyKSAmIH4odikpDQo+PiArDQo+PiArLyoNCj4+ICsgKiBUaG9zZSBiaXRzIGFyZSBjb21tb24g dG8gYWxsIGRlc2NyaXB0b3IgZm9ybWF0cyBhbmQNCj4+ICsgKiBtYXkgYmUgbWFuaXB1bGF0ZWQg YnkgdGhlIGNvcmUgY29kZS4NCj4+ICsgKi8NCj4+ICsjZGVmaW5lIENNRF8wX1RPQyAgICAgICAg ICAgICAgICAgICAgICAgVzBfQklUXygzMSkNCj4+ICsjZGVmaW5lIENNRF8wX1JPQyAgICAgICAg ICAgICAgICAgICAgICAgVzBfQklUXygzMCkNCj4+ICsjZGVmaW5lIENNRF8wX0FUVFIgICAgICAg ICAgICAgICAgICAgICAgVzBfTUFTSygyLCAwKQ0KPj4gKw0KPj4gKy8qDQo+PiArICogUmVzcG9u c2UgRGVzY3JpcHRvciBTdHJ1Y3R1cmUNCj4+ICsgKi8NCj4+ICsjZGVmaW5lIFJFU1BfU1RBVFVT KHJlc3ApICAgICAgICAgICAgICAgRklFTERfR0VUKEdFTk1BU0soMzEsIDI4KSwgcmVzcCkNCj4+ ICsjZGVmaW5lIFJFU1BfVElEKHJlc3ApICAgICAgICAgICAgICAgICAgRklFTERfR0VUKEdFTk1B U0soMjcsIDI0KSwgcmVzcCkNCj4+ICsjZGVmaW5lIFJFU1BfREFUQV9MRU5HVEgocmVzcCkgICAg ICAgICAgRklFTERfR0VUKEdFTk1BU0soMTUsICAwKSwgcmVzcCkgLyogUmVzcG9uc2UgRGF0YSBs ZW5ndGggYXMgcGVyIE1pY3JvY2hpcCBJUCAqLw0KPj4gKyNkZWZpbmUgUkVTUF9FUlJfRklFTEQg ICAgICAgICAgICAgICAgICBHRU5NQVNLKDMxLCAyOCkNCj4+ICsNCj4+ICsvKg0KPj4gKyAqIElC SSBTdGF0dXMgRGVzY3JpcHRvciBiaXRzDQo+PiArICovDQo+PiArI2RlZmluZSBNQ0hQX0lCSV9T VFMgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDMxKQ0KPj4gKyNkZWZpbmUgTUNIUF9JQklf RVJST1IgICAgICAgICAgICAgICAgICAgICAgIEJJVCgzMCkNCj4+ICsjZGVmaW5lIE1DSFBfSUJJ X1NUQVRVU19UWVBFICAgICAgICAgICAgICAgICBCSVQoMjkpDQo+PiArI2RlZmluZSBNQ0hQX0lC SV9IV19DT05URVhUICAgICAgICAgICAgICAgICAgR0VOTUFTSygyOCwgMjYpDQo+PiArI2RlZmlu ZSBNQ0hQX0lCSV9UUyAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDI1KQ0KPj4gKyNkZWZp bmUgTUNIUF9JQklfTEFTVF9TVEFUVVMgICAgICAgICAgICAgICAgIEJJVCgyNCkNCj4+ICsjZGVm aW5lIE1DSFBfSUJJX0NIVU5LUyAgICAgICAgICAgICAgICAgICAgICBHRU5NQVNLKDIzLCAxNikN Cj4+ICsjZGVmaW5lIE1DSFBfSUJJX0lEICAgICAgICAgICAgICAgICAgICAgICAgICBHRU5NQVNL KDE1LCA4KQ0KPj4gKyNkZWZpbmUgTUNIUF9JQklfVEFSR0VUX0FERFIgICAgICAgICAgICAgICAg IEdFTk1BU0soMTUsIDkpDQo+PiArI2RlZmluZSBNQ0hQX0lCSV9UQVJHRVRfUk5XICAgICAgICAg ICAgICAgICAgQklUKDgpDQo+PiArI2RlZmluZSBNQ0hQX0lCSV9EQVRBX0xFTkdUSCAgICAgICAg ICAgICAgICAgR0VOTUFTSyg3LCAwKQ0KPj4gKw0KPj4gKy8qDQo+PiArICogTWFzdGVyIERhdGEg VHJhbnNmZXIgUmF0ZSBUYWJsZSBNb2RlIElEIHZhbHVlcy4NCj4+ICsgKi8NCj4+ICsjZGVmaW5l IFhGRVJSQVRFX01PREVfSTNDICAgICAgICAgICAgICAgMHgwMA0KPj4gKyNkZWZpbmUgWEZFUlJB VEVfTU9ERV9JMkMgICAgICAgICAgICAgICAweDA4DQo+PiArDQo+PiArLyoNCj4+ICsgKiBNYXN0 ZXIgRGF0YSBUcmFuc2ZlciBSYXRlIFRhYmxlIEVudHJ5IEJpdHMgRGVmaW5pdGlvbnMNCj4+ICsg Ki8NCj4+ICsjZGVmaW5lIFhGRVJSQVRFX01PREVfSUQgICAgICAgICAgICAgICAgR0VOTUFTSygz MSwgMjgpDQo+PiArI2RlZmluZSBYRkVSUkFURV9SQVRFX0lEICAgICAgICAgICAgICAgIEdFTk1B U0soMjIsIDIwKQ0KPj4gKyNkZWZpbmUgWEZFUlJBVEVfQUNUVUFMX1JBVEVfS0haICAgICAgICBH RU5NQVNLKDE5LCAwKQ0KPj4gKw0KPj4gKy8qIEV4dGVuZGVkIENhcGFiaWxpdHkgSGVhZGVyICov DQo+PiArI2RlZmluZSBDQVBfSEVBREVSX0xFTkdUSCAgICAgICAgICAgICAgIEdFTk1BU0soMjMs IDgpDQo+PiArI2RlZmluZSBDQVBfSEVBREVSX0lEICAgICAgICAgICAgICAgICAgIEdFTk1BU0so NywgMCkNCj4+ICsvKmV4dF9jYXBzLmMgRU5EICovDQo+PiArDQo+PiArLyogbGlzdCBvZiBxdWly a3MgKi8NCj4+ICsjZGVmaW5lIEhDSV9RVUlSS19SQVdfQ0NDICAgICAgICAgICAgICAgQklUKDEp ICAvKiBDQ0MgZnJhbWluZyBtdXN0IGJlIGV4cGxpY2l0ICovDQo+PiArI2RlZmluZSBNQ0hQX0hD SV9RVUlSS19QSU9fTU9ERSAgICAgICAgIEJJVCgyKSAgLyogU2V0IFBJTyBtb2RlIGZvciBNaWNy b2NoaXAgcGxhdGZvcm1zICovDQo+PiArI2RlZmluZSBNQ0hQX0hDSV9RVUlSS19PRF9QUF9USU1J TkcgICAgIEJJVCgzKSAgLyogU2V0IE9EIGFuZCBQUCB0aW1pbmdzIGZvciBNaWNyb2NoaXAgcGxh dGZvcm1zICovDQo+PiArI2RlZmluZSBNQ0hQX0hDSV9RVUlSS19SRVNQX0JVRl9USExEICAgIEJJ VCg0KSAgLyogU2V0IHJlc3AgYnVmIHRobGQgdG8gMCBmb3IgTWljcm9jaGlwIHBsYXRmb3JtcyAq Lw0KPj4gKw0KPj4gKy8qIFRpbWluZyByZWdpc3RlcnMgKi8NCj4+ICsjZGVmaW5lIE1DSFBfSENJ X1NDTF9JM0NfT0RfVElNSU5HICAgICAgICAgIDB4MjE0DQo+PiArI2RlZmluZSBNQ0hQX0hDSV9T Q0xfSTNDX1BQX1RJTUlORyAgICAgICAgICAweDIxOA0KPj4gKyNkZWZpbmUgTUNIUF9IQ0lfU0RB X0hPTERfU1dJVENIX0RMWV9USU1JTkcgMHgyMzANCj4+ICsNCj4+ICsvKiBUaW1pbmcgdmFsdWVz IHRvIGNvbmZpZ3VyZSA5TUh6IGZyZXF1ZW5jeSAqLw0KPj4gKyNkZWZpbmUgTUNIUF9TQ0xfSTND X09EX1RJTUlORyAgICAgICAgICAweDAwY2YwMGNmIC8qIGNoZWNrIGFuZCB1cGRhdGUgY29ycmVj dCB2YWx1ZXMgbGF0ZXIgKi8NCj4+ICsjZGVmaW5lIE1DSFBfU0NMX0kzQ19QUF9USU1JTkcgICAg ICAgICAgMHgwMDE2MDAxNg0KPj4gKw0KPj4gKyNkZWZpbmUgTUNIUF9RVUVVRV9USExEX0NUUkwg ICAgICAgICAgICAgICAgMHhEMA0KPj4gKw0KPj4gKy8qIFRJRCBnZW5lcmF0aW9uICg0IGJpdHMg d2lkZSBpbiBhbGwgY2FzZXMpICovDQo+PiArI2RlZmluZSBtY2hwX2hjaV9nZXRfdGlkKGJpdHMp IFwNCj4+ICsgICAgICAgIChhdG9taWNfaW5jX3JldHVybl9yZWxheGVkKCZoY2ktPm5leHRfY21k X3RpZCkgJSAoMVUgPDwgNCkpDQo+PiArDQo+PiArI2RlZmluZSBFWFRfQ0FQKF9pZCwgX2hpZ2hl c3RfbWFuZGF0b3J5X3JlZ19vZmZzZXQsIF9wYXJzZXIpIFwNCj4+ICsgICAgICAgIHsgLmlkID0g KF9pZCksIC5wYXJzZXIgPSAoX3BhcnNlciksIFwNCj4+ICsgICAgICAgICAgLm1pbl9sZW5ndGgg PSAoX2hpZ2hlc3RfbWFuZGF0b3J5X3JlZ19vZmZzZXQpLzQgKyAxIH0NCj4+ICsNCj4+ICsvKiBP dXIgbWFpbiBzdHJ1Y3R1cmUgKi8NCj4+ICtzdHJ1Y3QgbWNocF9pM2NfaGNpIHsNCj4+ICsgICAg ICAgIHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgbWFzdGVyOw0KPj4gKyAgICAgICAgc3Ry dWN0IGNsayAqcGNsazsNCj4+ICsgICAgICAgIHN0cnVjdCBjbGsgKmdjbGs7DQo+PiArICAgICAg ICB2b2lkIF9faW9tZW0gKmJhc2VfcmVnczsNCj4+ICsgICAgICAgIHZvaWQgX19pb21lbSAqREFU X3JlZ3M7DQo+PiArICAgICAgICB2b2lkIF9faW9tZW0gKkRDVF9yZWdzOw0KPj4gKyAgICAgICAg dm9pZCBfX2lvbWVtICpSSFNfcmVnczsNCj4+ICsgICAgICAgIHZvaWQgX19pb21lbSAqUElPX3Jl Z3M7DQo+PiArICAgICAgICB2b2lkIF9faW9tZW0gKkVYVENBUFNfcmVnczsNCj4+ICsgICAgICAg IHZvaWQgX19pb21lbSAqQVVUT0NNRF9yZWdzOw0KPj4gKyAgICAgICAgdm9pZCBfX2lvbWVtICpE RUJVR19yZWdzOw0KPj4gKyAgICAgICAgY29uc3Qgc3RydWN0IG1jaHBfaGNpX2lvX29wcyAqaW87 DQo+PiArICAgICAgICB2b2lkICppb19kYXRhOw0KPj4gKyAgICAgICAgY29uc3Qgc3RydWN0IG1j aHBfaGNpX2NtZF9vcHMgKmNtZDsNCj4+ICsgICAgICAgIGF0b21pY190IG5leHRfY21kX3RpZDsN Cj4+ICsgICAgICAgIHUzMiBjYXBzOw0KPj4gKyAgICAgICAgdW5zaWduZWQgaW50IHF1aXJrczsN Cj4+ICsgICAgICAgIHVuc2lnbmVkIGludCBEQVRfZW50cmllczsNCj4+ICsgICAgICAgIHVuc2ln bmVkIGludCBEQVRfZW50cnlfc2l6ZTsNCj4+ICsgICAgICAgIHZvaWQgKkRBVF9kYXRhOw0KPj4g KyAgICAgICAgdW5zaWduZWQgaW50IERDVF9lbnRyaWVzOw0KPj4gKyAgICAgICAgdW5zaWduZWQg aW50IERDVF9lbnRyeV9zaXplOw0KPj4gKyAgICAgICAgdTggdmVyc2lvbl9tYWpvcjsNCj4+ICsg ICAgICAgIHU4IHZlcnNpb25fbWlub3I7DQo+PiArICAgICAgICB1OCByZXZpc2lvbjsNCj4+ICsg ICAgICAgIHUzMiB2ZW5kb3JfbWlwaV9pZDsNCj4+ICsgICAgICAgIHUzMiB2ZW5kb3JfdmVyc2lv bl9pZDsNCj4+ICsgICAgICAgIHUzMiB2ZW5kb3JfcHJvZHVjdF9pZDsNCj4+ICsgICAgICAgIHZv aWQgKnZlbmRvcl9kYXRhOw0KPj4gK307DQo+PiArDQo+PiArLyoNCj4+ICsgKiBTdHJ1Y3R1cmUg dG8gcmVwcmVzZW50IGEgbWFzdGVyIGluaXRpYXRlZCB0cmFuc2Zlci4NCj4+ICsgKiBUaGUgcm53 LCBkYXRhIGFuZCBkYXRhX2xlbiBmaWVsZHMgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgY2Fs bGluZyBhbnkNCj4+ICsgKiBoY2ktPmNtZC0+KigpIG1ldGhvZC4gVGhlIGNtZCBtZXRob2Qgd2ls bCBpbml0aWFsaXplIGNtZF9kZXNjW10gYW5kDQo+PiArICogcG9zc2libHkgbW9kaWZ5IChjbGVh cikgdGhlIGRhdGEgZmllbGQuIFRoZW4geGZlci0+Y21kX2Rlc2NbMF0gY2FuDQo+PiArICogYmUg YXVnbWVudGVkIHdpdGggQ01EXzBfUk9DIGFuZC9vciBDTURfMF9UT0MuDQo+PiArICogVGhlIGNv bXBsZXRpb24gZmllbGQgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHF1ZXVlaW5nIHdp dGgNCj4+ICsgKiBoY2ktPmlvLT5xdWV1ZV94ZmVyKCksIGFuZCByZXF1aXJlcyBDTURfMF9ST0Mg dG8gYmUgc2V0Lg0KPj4gKyAqLw0KPj4gK3N0cnVjdCBtY2hwX2hjaV94ZmVyIHsNCj4+ICsgICAg ICAgIHUzMiBjbWRfZGVzY1s0XTsNCj4+ICsgICAgICAgIHUzMiByZXNwb25zZTsNCj4+ICsgICAg ICAgIGJvb2wgcm53Ow0KPj4gKyAgICAgICAgdm9pZCAqZGF0YTsNCj4+ICsgICAgICAgIHVuc2ln bmVkIGludCBkYXRhX2xlbjsNCj4+ICsgICAgICAgIHVuc2lnbmVkIGludCBjbWRfdGlkOw0KPj4g KyAgICAgICAgc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRpb247DQo+PiArICAgICAgICB1bmlv biB7DQo+PiArICAgICAgICAgICAgICAgIHN0cnVjdCB7DQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgLyogUElPIHNwZWNpZmljICovDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IG1jaHBfaGNpX3hmZXIgKm5leHRfeGZlcjsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgbWNocF9oY2lfeGZlciAqbmV4dF9kYXRhOw0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBtY2hwX2hjaV94ZmVyICpuZXh0X3Jlc3A7DQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IGRhdGFfbGVmdDsNCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICB1MzIgZGF0YV93b3JkX2JlZm9yZV9wYXJ0aWFsOw0KPj4gKyAgICAgICAgICAgICAg ICB9Ow0KPj4gKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgew0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIERNQSBzcGVjaWZpYyAqLw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGRt YV9hZGRyX3QgZGF0YV9kbWE7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYm91 bmNlX2J1ZjsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmluZ19udW1iZXI7DQo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJpbmdfZW50cnk7DQo+PiArICAgICAgICAg ICAgICAgIH07DQo+PiArICAgICAgICB9Ow0KPj4gK307DQo+PiArDQo+PiArc3RydWN0IG1jaHBf aGNpX2RhdF9vcHMgew0KPj4gKyAgICAgICAgaW50ICgqaW5pdCkoc3RydWN0IG1jaHBfaTNjX2hj aSAqaGNpKTsNCj4+ICsgICAgICAgIHZvaWQgKCpjbGVhbnVwKShzdHJ1Y3QgbWNocF9pM2NfaGNp ICpoY2kpOw0KPj4gKyAgICAgICAgaW50ICgqYWxsb2NfZW50cnkpKHN0cnVjdCBtY2hwX2kzY19o Y2kgKmhjaSk7DQo+PiArICAgICAgICB2b2lkICgqZnJlZV9lbnRyeSkoc3RydWN0IG1jaHBfaTNj X2hjaSAqaGNpLCB1bnNpZ25lZCBpbnQgZGF0X2lkeCk7DQo+PiArICAgICAgICB2b2lkICgqc2V0 X2R5bmFtaWNfYWRkcikoc3RydWN0IG1jaHBfaTNjX2hjaSAqaGNpLCB1bnNpZ25lZCBpbnQgZGF0 X2lkeCwgdTggYWRkcik7DQo+PiArICAgICAgICB2b2lkICgqc2V0X3N0YXRpY19hZGRyKShzdHJ1 Y3QgbWNocF9pM2NfaGNpICpoY2ksIHVuc2lnbmVkIGludCBkYXRfaWR4LCB1OCBhZGRyKTsNCj4+ ICsgICAgICAgIHZvaWQgKCpzZXRfZmxhZ3MpKHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSwgdW5z aWduZWQgaW50IGRhdF9pZHgsIHUzMiB3MCwgdTMyIHcxKTsNCj4+ICsgICAgICAgIHZvaWQgKCpj bGVhcl9mbGFncykoc3RydWN0IG1jaHBfaTNjX2hjaSAqaGNpLCB1bnNpZ25lZCBpbnQgZGF0X2lk eCwgdTMyIHcwLCB1MzIgdzEpOw0KPj4gKyAgICAgICAgaW50ICgqZ2V0X2luZGV4KShzdHJ1Y3Qg bWNocF9pM2NfaGNpICpoY2ksIHU4IGFkZHJlc3MpOw0KPj4gK307DQo+PiArDQo+PiArLyogVGhp cyBhYnN0cmFjdHMgUElPIHZzIERNQSBvcGVyYXRpb25zICovDQo+PiArc3RydWN0IG1jaHBfaGNp X2lvX29wcyB7DQo+PiArICAgICAgICBib29sICgqaXJxX2hhbmRsZXIpKHN0cnVjdCBtY2hwX2kz Y19oY2kgKmhjaSwgdW5zaWduZWQgaW50IG1hc2spOw0KPj4gKyAgICAgICAgaW50ICgqcXVldWVf eGZlcikoc3RydWN0IG1jaHBfaTNjX2hjaSAqaGNpLCBzdHJ1Y3QgbWNocF9oY2lfeGZlciAqeGZl ciwgaW50IG4pOw0KPj4gKyAgICAgICAgYm9vbCAoKmRlcXVldWVfeGZlcikoc3RydWN0IG1jaHBf aTNjX2hjaSAqaGNpLCBzdHJ1Y3QgbWNocF9oY2lfeGZlciAqeGZlciwgaW50IG4pOw0KPj4gKyAg ICAgICAgaW50ICgqcmVxdWVzdF9pYmkpKHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSwgc3RydWN0 IGkzY19kZXZfZGVzYyAqZGV2LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHN0cnVjdCBpM2NfaWJpX3NldHVwICpyZXEpOw0KPj4gKyAgICAgICAgdm9pZCAoKmZyZWVfaWJp KShzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ksIHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldik7DQo+ PiArICAgICAgICB2b2lkICgqcmVjeWNsZV9pYmlfc2xvdCkoc3RydWN0IG1jaHBfaTNjX2hjaSAq aGNpLCBzdHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXYsDQo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgaTNjX2liaV9zbG90ICpzbG90KTsNCj4+ICsgICAgICAgIGludCAo KmluaXQpKHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSk7DQo+PiArICAgICAgICB2b2lkICgqY2xl YW51cCkoc3RydWN0IG1jaHBfaTNjX2hjaSAqaGNpKTsNCj4+ICt9Ow0KPj4gKw0KPj4gKy8qIE91 ciBwZXIgZGV2aWNlIG1hc3RlciBwcml2YXRlIGRhdGEgKi8NCj4+ICtzdHJ1Y3QgbWNocF9pM2Nf aGNpX2Rldl9kYXRhIHsNCj4+ICsgICAgICAgIGludCBkYXRfaWR4Ow0KPj4gKyAgICAgICAgdm9p ZCAqaWJpX2RhdGE7DQo+PiArfTsNCj4+ICsNCj4+ICsvKiBUaGlzIGFic3RyYWN0cyBvcGVyYXRp b25zIHdpdGggb3VyIGNvbW1hbmQgZGVzY3JpcHRvciBmb3JtYXRzICovDQo+PiArc3RydWN0IG1j aHBfaGNpX2NtZF9vcHMgew0KPj4gKyAgICAgICAgaW50ICgqcHJlcF9jY2MpKHN0cnVjdCBtY2hw X2kzY19oY2kgKmhjaSwgc3RydWN0IG1jaHBfaGNpX3hmZXIgKnhmZXIsDQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgdTggY2NjX2FkZHIsIHU4IGNjY19jbWQsIGJvb2wgcmF3KTsNCj4+ICsg ICAgICAgIHZvaWQgKCpwcmVwX2kzY194ZmVyKShzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ksIHN0 cnVjdCBpM2NfZGV2X2Rlc2MgKmRldiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgbWNocF9oY2lfeGZlciAqeGZlcik7DQo+PiArICAgICAgICB2b2lkICgqcHJlcF9p MmNfeGZlcikoc3RydWN0IG1jaHBfaTNjX2hjaSAqaGNpLCBzdHJ1Y3QgaTJjX2Rldl9kZXNjICpk ZXYsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1jaHBfaGNpX3hm ZXIgKnhmZXIpOw0KPj4gKyAgICAgICAgaW50ICgqcGVyZm9ybV9kYWEpKHN0cnVjdCBtY2hwX2kz Y19oY2kgKmhjaSk7DQo+PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3QgaGNpX2V4dF9jYXBzIHsNCj4+ ICsgICAgICAgIHU4ICBpZDsNCj4+ICsgICAgICAgIHUxNiBtaW5fbGVuZ3RoOw0KPj4gKyAgICAg ICAgaW50ICgqcGFyc2VyKShzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ksIHZvaWQgX19pb21lbSAq YmFzZSk7DQo+PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3QgaGNpX3Bpb19kZXZfaWJpX2RhdGEgew0K Pj4gKyAgICAgICAgc3RydWN0IGkzY19nZW5lcmljX2liaV9wb29sICpwb29sOw0KPj4gKyAgICAg ICAgdW5zaWduZWQgaW50IG1heF9sZW47DQo+PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3QgaGNpX3Bp b19pYmlfZGF0YSB7DQo+PiArICAgICAgICBzdHJ1Y3QgaTNjX2liaV9zbG90ICpzbG90Ow0KPj4g KyAgICAgICAgdm9pZCAqZGF0YV9wdHI7DQo+PiArICAgICAgICB1bnNpZ25lZCBpbnQgYWRkcjsN Cj4+ICsgICAgICAgIHVuc2lnbmVkIGludCBzZWdfbGVuLCBzZWdfY250Ow0KPj4gKyAgICAgICAg dW5zaWduZWQgaW50IG1heF9sZW47DQo+PiArICAgICAgICBib29sIGxhc3Rfc2VnOw0KPj4gK307 DQo+PiArDQo+PiArc3RydWN0IG1jaHBfaGNpX3Bpb19kYXRhIHsNCj4+ICsgICAgICAgIHNwaW5s b2NrX3QgbG9jazsNCj4+ICsgICAgICAgIHN0cnVjdCBtY2hwX2hjaV94ZmVyICpjdXJyX3hmZXIs ICp4ZmVyX3F1ZXVlOw0KPj4gKyAgICAgICAgc3RydWN0IG1jaHBfaGNpX3hmZXIgKmN1cnJfcngs ICpyeF9xdWV1ZTsNCj4+ICsgICAgICAgIHN0cnVjdCBtY2hwX2hjaV94ZmVyICpjdXJyX3R4LCAq dHhfcXVldWU7DQo+PiArICAgICAgICBzdHJ1Y3QgbWNocF9oY2lfeGZlciAqY3Vycl9yZXNwLCAq cmVzcF9xdWV1ZTsNCj4+ICsgICAgICAgIHN0cnVjdCBoY2lfcGlvX2liaV9kYXRhIGliaTsNCj4+ ICsgICAgICAgIHVuc2lnbmVkIGludCByeF90aHJlc2hfc2l6ZSwgdHhfdGhyZXNoX3NpemU7DQo+ PiArICAgICAgICB1bnNpZ25lZCBpbnQgbWF4X2liaV90aHJlc2g7DQo+PiArICAgICAgICB1MzIg cmVnX3F1ZXVlX3RocmVzaDsNCj4+ICsgICAgICAgIHUzMiBlbmFibGVkX2lycXM7DQo+PiArfTsN Cj4+ICsNCj4+ICsvKiBnbG9iYWwgZnVuY3Rpb25zICovDQo+PiArc3RhdGljIGludCBpM2NfaGNp X3BhcnNlX2V4dF9jYXBzKHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSk7DQo+PiArdm9pZCBtY2hw X2kzY19oY2lfZGN0X2dldF92YWwoc3RydWN0IG1jaHBfaTNjX2hjaSAqaGNpLCB1bnNpZ25lZCBp bnQgZGN0X2lkeCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgdTY0ICpwaWQsIHVuc2ln bmVkIGludCAqZGNyLCB1bnNpZ25lZCBpbnQgKmJjcik7DQo+PiArc3RhdGljIHZvaWQgbWNocF9o Y2lfcGlvX2VycihzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ksIHN0cnVjdCBtY2hwX2hjaV9waW9f ZGF0YSAqcGlvLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBzdGF0dXMpOw0KPj4g K3ZvaWQgbWNocF9taXBpX2kzY19oY2lfcmVzdW1lKHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSk7 DQo+PiArdm9pZCBtY2hwX21pcGlfaTNjX2hjaV9waW9fcmVzZXQoc3RydWN0IG1jaHBfaTNjX2hj aSAqaGNpKTsNCj4+ICt2b2lkIG1jaHBfbWlwaV9pM2NfaGNpX2RjdF9pbmRleF9yZXNldChzdHJ1 Y3QgbWNocF9pM2NfaGNpICpoY2kpOw0KPj4gK3ZvaWQgbWljcm9jaGlwX3NldF9vZF9wcF90aW1p bmcoc3RydWN0IG1jaHBfaTNjX2hjaSAqaGNpKTsNCj4+ICt2b2lkIG1pY3JvY2hpcF9zZXRfcmVz cF9idWZfdGhsZChzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2kpOw0KPj4gKw0KPj4gK3N0YXRpYyBp bmxpbmUgc3RydWN0IG1jaHBfaGNpX3hmZXIgKm1jaHBfaGNpX2FsbG9jX3hmZXIodW5zaWduZWQg aW50IG4pDQo+PiArew0KPj4gKyAgICAgICAgcmV0dXJuIGtjYWxsb2Mobiwgc2l6ZW9mKHN0cnVj dCBtY2hwX2hjaV94ZmVyKSwgR0ZQX0tFUk5FTCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBp bmxpbmUgdm9pZCBtY2hwX2hjaV9mcmVlX3hmZXIoc3RydWN0IG1jaHBfaGNpX3hmZXIgKnhmZXIs IHVuc2lnbmVkIGludCBuKQ0KPj4gK3sNCj4+ICsgICAgICAgIGtmcmVlKHhmZXIpOw0KPj4gK30N Cj4+ICsNCj4+ICsvKiBEYXRhIFRyYW5zZmVyIFNwZWVkIGFuZCBNb2RlICovDQo+PiArZW51bSBt Y2hwX2hjaV9jbWRfbW9kZSB7DQo+PiArICAgICAgICBNT0RFX0kzQ19TRFIwICAgICAgICAgICA9 IDB4MCwNCj4+ICsgICAgICAgIE1PREVfSTNDX1NEUjEgICAgICAgICAgID0gMHgxLA0KPj4gKyAg ICAgICAgTU9ERV9JM0NfU0RSMiAgICAgICAgICAgPSAweDIsDQo+PiArICAgICAgICBNT0RFX0kz Q19TRFIzICAgICAgICAgICA9IDB4MywNCj4+ICsgICAgICAgIE1PREVfSTNDX1NEUjQgICAgICAg ICAgID0gMHg0LA0KPj4gKyAgICAgICAgTU9ERV9JM0NfSERSX1RTeCAgICAgICAgPSAweDUsDQo+ PiArICAgICAgICBNT0RFX0kzQ19IRFJfRERSICAgICAgICA9IDB4NiwNCj4+ICsgICAgICAgIE1P REVfSTNDX0hEUl9CVCAgICAgICAgID0gMHg3LA0KPj4gKyAgICAgICAgTU9ERV9JM0NfRm1fRm1Q ICAgICAgICAgPSAweDgsDQo+PiArICAgICAgICBNT0RFX0kyQ19GbSAgICAgICAgICAgICA9IDB4 MCwNCj4+ICsgICAgICAgIE1PREVfSTJDX0ZtUCAgICAgICAgICAgID0gMHgxLA0KPj4gKyAgICAg ICAgTU9ERV9JMkNfVUQxICAgICAgICAgICAgPSAweDIsDQo+PiArICAgICAgICBNT0RFX0kyQ19V RDIgICAgICAgICAgICA9IDB4MywNCj4+ICsgICAgICAgIE1PREVfSTJDX1VEMyAgICAgICAgICAg ID0gMHg0LA0KPj4gK307DQo+PiArDQo+PiArZW51bSBtY2hwX2hjaV9yZXNwX2VyciB7DQo+PiAr ICAgICAgICBSRVNQX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgID0gMHgwLA0KPj4gKyAgICAg ICAgUkVTUF9FUlJfQ1JDICAgICAgICAgICAgICAgICAgICA9IDB4MSwNCj4+ICsgICAgICAgIFJF U1BfRVJSX1BBUklUWSAgICAgICAgICAgICAgICAgPSAweDIsDQo+PiArICAgICAgICBSRVNQX0VS Ul9GUkFNRSAgICAgICAgICAgICAgICAgID0gMHgzLA0KPj4gKyAgICAgICAgUkVTUF9FUlJfQURE Ul9IRUFERVIgICAgICAgICAgICA9IDB4NCwNCj4+ICsgICAgICAgIFJFU1BfRVJSX0JDQVNUX05B Q0tfN0UgICAgICAgICAgPSAweDQsDQo+PiArICAgICAgICBSRVNQX0VSUl9OQUNLICAgICAgICAg ICAgICAgICAgID0gMHg1LA0KPj4gKyAgICAgICAgUkVTUF9FUlJfT1ZMICAgICAgICAgICAgICAg ICAgICA9IDB4NiwNCj4+ICsgICAgICAgIFJFU1BfRVJSX0kzQ19TSE9SVF9SRUFEICAgICAgICAg PSAweDcsDQo+PiArICAgICAgICBSRVNQX0VSUl9IQ19URVJNSU5BVEVEICAgICAgICAgID0gMHg4 LA0KPj4gKyAgICAgICAgUkVTUF9FUlJfSTJDX1dSX0RBVEFfTkFDSyAgICAgICA9IDB4OSwNCj4+ ICsgICAgICAgIFJFU1BfRVJSX0JVU19YRkVSX0FCT1JURUQgICAgICAgPSAweDksDQo+PiArICAg ICAgICBSRVNQX0VSUl9OT1RfU1VQUE9SVEVEICAgICAgICAgID0gMHhhLA0KPj4gKyAgICAgICAg UkVTUF9FUlJfQUJPUlRFRF9XSVRIX0NSQyAgICAgICA9IDB4YiwNCj4+ICsgICAgICAgIC8qIDB4 YyB0byAweGYgYXJlIHJlc2VydmVkIGZvciB0cmFuc2ZlciBzcGVjaWZpYyBlcnJvcnMgKi8NCj4+ ICt9Ow0KPj4gKw0KPj4gKy8qIE91ciB2YXJpb3VzIGluc3RhbmNlcyAqLw0KPj4gKy8qICBoYW5k eSBoZWxwZXJzICovDQo+PiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaTNjX2Rldl9kZXNjICoNCj4+ ICttY2hwX2kzY19oY2lfYWRkcl90b19kZXYoc3RydWN0IG1jaHBfaTNjX2hjaSAqaGNpLCB1bnNp Z25lZCBpbnQgYWRkcikNCj4+ICt7DQo+PiArICAgICAgICBzdHJ1Y3QgaTNjX2J1cyAqYnVzID0g aTNjX21hc3Rlcl9nZXRfYnVzKCZoY2ktPm1hc3Rlcik7DQo+PiArICAgICAgICBzdHJ1Y3QgaTNj X2Rldl9kZXNjICpkZXY7DQo+PiArDQo+PiArICAgICAgICBpM2NfYnVzX2Zvcl9lYWNoX2kzY2Rl dihidXMsIGRldikgew0KPj4gKyAgICAgICAgICAgICAgICBpZiAoZGV2LT5pbmZvLmR5bl9hZGRy ID09IGFkZHIpDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRldjsNCj4+ICsg ICAgICAgIH0NCj4+ICsgICAgICAgIHJldHVybiBOVUxMOw0KPj4gK30NCj4+ICsNCj4+ICt2b2lk IG1pY3JvY2hpcF9zZXRfb2RfcHBfdGltaW5nKHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSkNCj4+ ICt7DQo+PiArICAgICAgICB1MzIgZGF0YTsNCj4+ICsNCj4+ICsgICAgICAgIHJlZ193cml0ZShN Q0hQX0hDSV9TQ0xfSTNDX09EX1RJTUlORywgTUNIUF9TQ0xfSTNDX09EX1RJTUlORyk7DQo+PiAr ICAgICAgICByZWdfd3JpdGUoTUNIUF9IQ0lfU0NMX0kzQ19QUF9USU1JTkcsIE1DSFBfU0NMX0kz Q19QUF9USU1JTkcpOw0KPj4gKyAgICAgICAgZGF0YSA9IHJlZ19yZWFkKE1DSFBfSENJX1NEQV9I T0xEX1NXSVRDSF9ETFlfVElNSU5HKTsNCj4+ICsgICAgICAgIC8qIENvbmZpZ3VyZSBtYXhpbXVt IFRYIGhvbGQgdGltZSAqLw0KPj4gKyAgICAgICAgZGF0YSB8PSBXMF9NQVNLKDE4LCAxNik7DQo+ PiArICAgICAgICByZWdfd3JpdGUoTUNIUF9IQ0lfU0RBX0hPTERfU1dJVENIX0RMWV9USU1JTkcs IGRhdGEpOw0KPj4gK30NCj4+ICsNCj4+ICt2b2lkIG1pY3JvY2hpcF9zZXRfcmVzcF9idWZfdGhs ZChzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2kpDQo+PiArew0KPj4gKyAgICAgICAgdTMyIGRhdGE7 DQo+PiArDQo+PiArICAgICAgICBkYXRhID0gcmVnX3JlYWQoTUNIUF9RVUVVRV9USExEX0NUUkwp Ow0KPj4gKyAgICAgICAgZGF0YSA9IGRhdGEgJiB+VzBfTUFTSygxNSwgOCk7DQo+PiArICAgICAg ICByZWdfd3JpdGUoTUNIUF9RVUVVRV9USExEX0NUUkwsIGRhdGEpOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgaW50IGhjaV9leHRjYXBfaGFyZHdhcmVfaWQoc3RydWN0IG1jaHBfaTNjX2hjaSAq aGNpLCB2b2lkIF9faW9tZW0gKmJhc2UpDQo+PiArew0KPj4gKyAgICAgICAgaGNpLT52ZW5kb3Jf bWlwaV9pZCAgICAgPSByZWFkbChiYXNlICsgMHgwNCk7DQo+PiArICAgICAgICBoY2ktPnZlbmRv cl92ZXJzaW9uX2lkICA9IHJlYWRsKGJhc2UgKyAweDA4KTsNCj4+ICsgICAgICAgIGhjaS0+dmVu ZG9yX3Byb2R1Y3RfaWQgID0gcmVhZGwoYmFzZSArIDB4MGMpOw0KPj4gKw0KPj4gKyAgICAgICAg ZGV2X2luZm8oJmhjaS0+bWFzdGVyLmRldiwgInZlbmRvciBNSVBJIElEOiAlI3hcbiIsIGhjaS0+ dmVuZG9yX21pcGlfaWQpOw0KPj4gKyAgICAgICAgZGV2X2luZm8oJmhjaS0+bWFzdGVyLmRldiwg InZlbmRvciB2ZXJzaW9uIElEOiAlI3hcbiIsIGhjaS0+dmVuZG9yX3ZlcnNpb25faWQpOw0KPj4g KyAgICAgICAgZGV2X2luZm8oJmhjaS0+bWFzdGVyLmRldiwgInZlbmRvciBwcm9kdWN0IElEOiAl I3hcbiIsIGhjaS0+dmVuZG9yX3Byb2R1Y3RfaWQpOw0KPj4gKw0KPj4gKyAgICAgICAgcmV0dXJu IDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaGNpX2V4dGNhcF9tYXN0ZXJfY29uZmln KHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSwgdm9pZCBfX2lvbWVtICpiYXNlKQ0KPj4gK3sNCj4+ ICsgICAgICAgIHUzMiBtYXN0ZXJfY29uZmlnID0gcmVhZGwoYmFzZSArIDB4MDQpOw0KPj4gKyAg ICAgICAgdW5zaWduZWQgaW50IG9wZXJhdGlvbl9tb2RlID0gRklFTERfR0VUKEdFTk1BU0soNSwg NCksIG1hc3Rlcl9jb25maWcpOw0KPj4gKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25z dCBmdW5jdGlvbmFsaXR5W10gPSB7DQo+PiArICAgICAgICAgICAgICAgICIodW5rbm93bikiLCAi bWFzdGVyIG9ubHkiLCAidGFyZ2V0IG9ubHkiLA0KPj4gKyAgICAgICAgICAgICAgICAicHJpbWFy eS9zZWNvbmRhcnkgbWFzdGVyIiB9Ow0KPj4gKyAgICAgICAgZGV2X2luZm8oJmhjaS0+bWFzdGVy LmRldiwgIm9wZXJhdGlvbiBtb2RlOiAlc1xuIiwgZnVuY3Rpb25hbGl0eVtvcGVyYXRpb25fbW9k ZV0pOw0KPj4gKyAgICAgICAgaWYgKG9wZXJhdGlvbl9tb2RlICYgMHgxKQ0KPj4gKyAgICAgICAg ICAgICAgICByZXR1cm4gMDsNCj4+ICsgICAgICAgIGRldl9lcnIoJmhjaS0+bWFzdGVyLmRldiwg Im9ubHkgbWFzdGVyIG1vZGUgaXMgY3VycmVudGx5IHN1cHBvcnRlZFxuIik7DQo+PiArICAgICAg ICByZXR1cm4gLUVPUE5PVFNVUFA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaGNpX2V4 dGNhcF9kZWJ1ZyhzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ksIHZvaWQgX19pb21lbSAqYmFzZSkN Cj4+ICt7DQo+PiArICAgICAgICBkZXZfaW5mbygmaGNpLT5tYXN0ZXIuZGV2LCAiZGVidWcgcmVn aXN0ZXJzIHByZXNlbnRcbiIpOw0KPj4gKyAgICAgICAgaGNpLT5ERUJVR19yZWdzID0gYmFzZTsN Cj4+ICsgICAgICAgIHJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGhjaV9leHRfY2FwcyBleHRfY2FwYWJpbGl0aWVzW10gPSB7DQo+PiArICAgICAgICBFWFRf Q0FQKDB4MDEsIDB4MGMsIGhjaV9leHRjYXBfaGFyZHdhcmVfaWQpLA0KPj4gKyAgICAgICAgRVhU X0NBUCgweDAyLCAweDA0LCBoY2lfZXh0Y2FwX21hc3Rlcl9jb25maWcpLA0KPj4gKyAgICAgICAg RVhUX0NBUCgweDBjLCAweDEwLCBoY2lfZXh0Y2FwX2RlYnVnKSwNCj4+ICt9Ow0KPj4gKw0KPj4g K3N0YXRpYyBpbnQgaTNjX2hjaV9wYXJzZV9leHRfY2FwcyhzdHJ1Y3QgbWNocF9pM2NfaGNpICpo Y2kpDQo+PiArew0KPj4gKyAgICAgICAgdm9pZCBfX2lvbWVtICpjdXJyX2NhcCA9IGhjaS0+RVhU Q0FQU19yZWdzOw0KPj4gKyAgICAgICAgdm9pZCBfX2lvbWVtICplbmQgPSBjdXJyX2NhcCArIDB4 MTAwMDsgLyogc29tZSBhcmJpdHJhcnkgbGltaXQgKi8NCj4+ICsgICAgICAgIHUzMiBjYXBfaGVh ZGVyLCBjYXBfaWQsIGNhcF9sZW5ndGg7DQo+PiArICAgICAgICBjb25zdCBzdHJ1Y3QgaGNpX2V4 dF9jYXBzICpjYXBfZW50cnk7DQo+PiArICAgICAgICBpbnQgaSwgZXJyID0gMDsNCj4+ICsNCj4+ ICsgICAgICAgIGlmICghY3Vycl9jYXApDQo+PiArICAgICAgICAgICAgICAgIHJldHVybiAwOw0K Pj4gKw0KPj4gKyAgICAgICAgZm9yICg7ICFlcnIgJiYgY3Vycl9jYXAgPCBlbmQ7IGN1cnJfY2Fw ICs9IGNhcF9sZW5ndGggKiA0KSB7DQo+PiArICAgICAgICAgICAgICAgIGNhcF9oZWFkZXIgPSBy ZWFkbChjdXJyX2NhcCk7DQo+PiArICAgICAgICAgICAgICAgIGNhcF9pZCA9IEZJRUxEX0dFVChD QVBfSEVBREVSX0lELCBjYXBfaGVhZGVyKTsNCj4+ICsgICAgICAgICAgICAgICAgY2FwX2xlbmd0 aCA9IEZJRUxEX0dFVChDQVBfSEVBREVSX0xFTkdUSCwgY2FwX2hlYWRlcik7DQo+PiArICAgICAg ICAgICAgICAgIGRldl9kYmcoJmhjaS0+bWFzdGVyLmRldiwiaWQ9MHglMDJ4IGxlbmd0aD0lZCIs IGNhcF9pZCwgY2FwX2xlbmd0aCk7DQo+PiArICAgICAgICAgICAgIGlmICghY2FwX2xlbmd0aCkN Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAgICAgICAgICAg aWYgKGN1cnJfY2FwICsgY2FwX2xlbmd0aCAqIDQgPj0gZW5kKSB7DQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgZGV2X2VycigmaGNpLT5tYXN0ZXIuZGV2LA0KPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImV4dF9jYXAgMHglMDJ4IGhhcyBzaXplICVkICh0b28gYmlnKVxu IiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcF9pZCwgY2FwX2xlbmd0 aCk7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gLUVJTlZBTDsNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAgICAgICAgICAgfQ0KPj4gKyAg ICAgICAgICAgICAgICBjYXBfZW50cnkgPSBOVUxMOw0KPj4gKyAgICAgICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShleHRfY2FwYWJpbGl0aWVzKTsgaSsrKSB7DQo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dF9jYXBhYmlsaXRpZXNbaV0uaWQgPT0gY2FwX2lk KSB7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBfZW50cnkgPSAmZXh0 X2NhcGFiaWxpdGllc1tpXTsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCj4+ICsgICAgICAgICAgICAgICAg fQ0KPj4gKyAgICAgICAgICAgICAgICBpZiAoIWNhcF9lbnRyeSkgew0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIGRldl9ub3RpY2UoJmhjaS0+bWFzdGVyLmRldiwNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGV4dF9jYXAgMHglMDJ4XG4iLCBjYXBf aWQpOw0KPj4gKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNhcF9sZW5ndGggPCBjYXBfZW50 cnktPm1pbl9sZW5ndGgpIHsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZo Y2ktPm1hc3Rlci5kZXYsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh0 X2NhcCAweCUwMnggaGFzIHNpemUgJWQgKGV4cGVjdGluZyA+PSAlZClcbiIsDQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBfaWQsIGNhcF9sZW5ndGgsIGNhcF9lbnRyeS0+ bWluX2xlbmd0aCk7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gLUVJTlZBTDsN Cj4+ICsgICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICBlcnIgPSBjYXBfZW50cnktPnBhcnNlcihoY2ksIGN1cnJfY2FwKTsNCj4+ICsgICAgICAgICAg ICAgICAgfQ0KPj4gKyAgICAgfQ0KPj4gKyAgICAgICAgcmV0dXJuIGVycjsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIGlubGluZSBib29sIGR5bmFkZHJfcGFyaXR5KHVuc2lnbmVkIGludCBhZGRy KQ0KPj4gK3sNCj4+ICsgICAgICAgIGFkZHIgfD0gMSA8PCA3Ow0KPj4gKyAgICAgICAgYWRkciAr PSBhZGRyID4+IDQ7DQo+PiArICAgICAgICBhZGRyICs9IGFkZHIgPj4gMjsNCj4+ICsgICAgICAg IGFkZHIgKz0gYWRkciA+PiAxOw0KPj4gKyAgICAgICAgcmV0dXJuIChhZGRyICYgMSk7DQo+PiAr fQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgbWNocF9oY2lfZGF0X3YxX2luaXQoc3RydWN0IG1jaHBf aTNjX2hjaSAqaGNpKQ0KPj4gK3sNCj4+ICsgICAgICAgIHVuc2lnbmVkIGludCBkYXRfaWR4Ow0K Pj4gKw0KPj4gKyAgICAgICAgaWYgKCFoY2ktPkRBVF9yZWdzKSB7DQo+PiArICAgICAgICAgICAg ICAgIGRldl9lcnIoJmhjaS0+bWFzdGVyLmRldiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAib25seSBEQVQgaW4gcmVnaXN0ZXIgc3BhY2UgaXMgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnRc biIpOw0KPj4gKyAgICAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7DQo+PiArICAgICAg ICB9DQo+PiArICAgICAgICBpZiAoaGNpLT5EQVRfZW50cnlfc2l6ZSAhPSA4KSB7DQo+PiArICAg ICAgICAgICAgICAgIGRldl9lcnIoJmhjaS0+bWFzdGVyLmRldiwNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAib25seSA4LWJ5dGVzIERBVCBlbnRyaWVzIGFyZSBzdXBwb3J0ZWQgYXQgdGhl IG1vbWVudFxuIik7DQo+PiArICAgICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsNCj4+ ICsgICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgIGlmICghaGNpLT5EQVRfZGF0YSkgew0KPj4g KyAgICAgICAgICAgICAgICAvKiB1c2UgYSBiaXRtYXAgZm9yIGZhc3RlciBmcmVlIHNsb3Qgc2Vh cmNoICovDQo+PiArICAgICAgICAgICAgICAgIGhjaS0+REFUX2RhdGEgPSBiaXRtYXBfemFsbG9j KGhjaS0+REFUX2VudHJpZXMsIEdGUF9LRVJORUwpOw0KPj4gKyAgICAgICAgICAgICAgICBpZiAo IWhjaS0+REFUX2RhdGEpDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9N RU07DQo+PiArDQo+PiArICAgICAgICAgICAgICAgIC8qIGNsZWFyIHRoZW0gKi8NCj4+ICsgICAg ICAgICAgICAgICAgZm9yIChkYXRfaWR4ID0gMDsgZGF0X2lkeCA8IGhjaS0+REFUX2VudHJpZXM7 IGRhdF9pZHgrKykgew0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdF93MF93cml0ZShk YXRfaWR4LCAwKTsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBkYXRfdzFfd3JpdGUoZGF0 X2lkeCwgMCk7DQo+PiArICAgICAgICAgICAgICAgIH0NCj4+ICsgICAgICAgIH0NCj4+ICsNCj4+ ICsgICAgICAgIHJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBtY2hwX2hj aV9kYXRfdjFfY2xlYW51cChzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2kpDQo+PiArew0KPj4gKyAg ICAgICAgYml0bWFwX2ZyZWUoaGNpLT5EQVRfZGF0YSk7DQo+PiArICAgICAgICBoY2ktPkRBVF9k YXRhID0gTlVMTDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBtY2hwX2hjaV9kYXRfdjFf YWxsb2NfZW50cnkoc3RydWN0IG1jaHBfaTNjX2hjaSAqaGNpKQ0KPj4gK3sNCj4+ICsgICAgICAg IHVuc2lnbmVkIGludCBkYXRfaWR4Ow0KPj4gKyAgICAgICAgaW50IHJldDsNCj4+ICsNCj4+ICsg ICAgICAgIGlmICghaGNpLT5EQVRfZGF0YSkgew0KPj4gKyAgICAgICAgICAgICAgICByZXQgPSBt Y2hwX2hjaV9kYXRfdjFfaW5pdChoY2kpOw0KPj4gKyAgICAgICAgICAgICAgICBpZiAocmV0KQ0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+PiArICAgICAgICB9DQo+ PiArICAgICAgICBkYXRfaWR4ID0gZmluZF9maXJzdF96ZXJvX2JpdChoY2ktPkRBVF9kYXRhLCBo Y2ktPkRBVF9lbnRyaWVzKTsNCj4+ICsgICAgICAgIGlmIChkYXRfaWR4ID49IGhjaS0+REFUX2Vu dHJpZXMpDQo+PiArICAgICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOw0KPj4gKyAgICAgICAg X19zZXRfYml0KGRhdF9pZHgsIGhjaS0+REFUX2RhdGEpOw0KPj4gKw0KPj4gKyAgICAgICAgLyog ZGVmYXVsdCBmbGFncyAqLw0KPj4gKyAgICAgICAgZGF0X3cwX3dyaXRlKGRhdF9pZHgsIERBVF8w X1NJUl9SRUpFQ1QgfCBEQVRfMF9NUl9SRUpFQ1QpOw0KPj4gKw0KPj4gKyAgICAgICAgcmV0dXJu IGRhdF9pZHg7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIG1jaHBfaGNpX2RhdF92MV9m cmVlX2VudHJ5KHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSwgdW5zaWduZWQgaW50IGRhdF9pZHgp DQo+PiArew0KPj4gKyAgICAgICAgZGF0X3cwX3dyaXRlKGRhdF9pZHgsIDApOw0KPj4gKyAgICAg ICAgZGF0X3cxX3dyaXRlKGRhdF9pZHgsIDApOw0KPj4gKyAgICAgICAgaWYgKGhjaS0+REFUX2Rh dGEpDQo+PiArICAgICAgICAgICAgICAgIF9fY2xlYXJfYml0KGRhdF9pZHgsIGhjaS0+REFUX2Rh dGEpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBtY2hwX2hjaV9kYXRfdjFfc2V0X2R5 bmFtaWNfYWRkcihzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ksDQo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkYXRfaWR4LCB1OCBhZGRyZXNz KQ0KPj4gK3sNCj4+ICsgICAgICAgIHUzMiBkYXRfdzA7DQo+PiArDQo+PiArICAgICAgICBkYXRf dzAgPSBkYXRfdzBfcmVhZChkYXRfaWR4KTsNCj4+ICsgICAgICAgIGRhdF93MCAmPSB+KERBVF8w X0RZTkFNSUNfQUREUkVTUyB8IERBVF8wX0RZTkFERFJfUEFSSVRZKTsNCj4+ICsgICAgICAgIGRh dF93MCB8PSBGSUVMRF9QUkVQKERBVF8wX0RZTkFNSUNfQUREUkVTUywgYWRkcmVzcykgfA0KPj4g KyAgICAgICAgICAgICAgICAgIChkeW5hZGRyX3Bhcml0eShhZGRyZXNzKSA/IERBVF8wX0RZTkFE RFJfUEFSSVRZIDogMCk7DQo+PiArICAgICAgICBkYXRfdzBfd3JpdGUoZGF0X2lkeCwgZGF0X3cw KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgbWNocF9oY2lfZGF0X3YxX3NldF9zdGF0 aWNfYWRkcihzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ksDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRhdF9pZHgsIHU4IGFkZHJlc3MpDQo+ PiArew0KPj4gKyAgICAgICAgdTMyIGRhdF93MDsNCj4+ICsNCj4+ICsgICAgICAgIGRhdF93MCA9 IGRhdF93MF9yZWFkKGRhdF9pZHgpOw0KPj4gKyAgICAgICAgZGF0X3cwICY9IH5EQVRfMF9TVEFU SUNfQUREUkVTUzsNCj4+ICsgICAgICAgIGRhdF93MCB8PSBGSUVMRF9QUkVQKERBVF8wX1NUQVRJ Q19BRERSRVNTLCBhZGRyZXNzKTsNCj4+ICsgICAgICAgIGRhdF93MF93cml0ZShkYXRfaWR4LCBk YXRfdzApOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBtY2hwX2hjaV9kYXRfdjFfc2V0 X2ZsYWdzKHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSwgdW5zaWduZWQgaW50IGRhdF9pZHgsDQo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHcwX2ZsYWdzLCB1MzIgdzFf ZmxhZ3MpDQo+PiArew0KPj4gKyAgICAgICAgdTMyIGRhdF93MCwgZGF0X3cxOw0KPj4gKw0KPj4g KyAgICAgICAgZGF0X3cwID0gZGF0X3cwX3JlYWQoZGF0X2lkeCk7DQo+PiArICAgICAgICBkYXRf dzEgPSBkYXRfdzFfcmVhZChkYXRfaWR4KTsNCj4+ICsgICAgICAgIGRhdF93MCB8PSB3MF9mbGFn czsNCj4+ICsgICAgICAgIGRhdF93MSB8PSB3MV9mbGFnczsNCj4+ICsgICAgICAgIGRhdF93MF93 cml0ZShkYXRfaWR4LCBkYXRfdzApOw0KPj4gKyAgICAgICAgZGF0X3cxX3dyaXRlKGRhdF9pZHgs IGRhdF93MSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIG1jaHBfaGNpX2RhdF92MV9j bGVhcl9mbGFncyhzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ksIHVuc2lnbmVkIGludCBkYXRfaWR4 LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHcwX2ZsYWdzLCB1 MzIgdzFfZmxhZ3MpDQo+PiArew0KPj4gKyAgICAgICAgdTMyIGRhdF93MCwgZGF0X3cxOw0KPj4g Kw0KPj4gKyAgICAgICAgZGF0X3cwID0gZGF0X3cwX3JlYWQoZGF0X2lkeCk7DQo+PiArICAgICAg ICBkYXRfdzEgPSBkYXRfdzFfcmVhZChkYXRfaWR4KTsNCj4+ICsgICAgICAgIGRhdF93MCAmPSB+ dzBfZmxhZ3M7DQo+PiArICAgICAgICBkYXRfdzEgJj0gfncxX2ZsYWdzOw0KPj4gKyAgICAgICAg ZGF0X3cwX3dyaXRlKGRhdF9pZHgsIGRhdF93MCk7DQo+PiArICAgICAgICBkYXRfdzFfd3JpdGUo ZGF0X2lkeCwgZGF0X3cxKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBtY2hwX2hjaV9k YXRfdjFfZ2V0X2luZGV4KHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSwgdTggZGV2X2FkZHIpDQo+ PiArew0KPj4gKyAgICAgICAgdW5zaWduZWQgaW50IGRhdF9pZHg7DQo+PiArICAgICAgICB1MzIg ZGF0X3cwOw0KPj4gKw0KPj4gKyAgICAgICAgZm9yX2VhY2hfc2V0X2JpdChkYXRfaWR4LCBoY2kt PkRBVF9kYXRhLCBoY2ktPkRBVF9lbnRyaWVzKSB7DQo+PiArICAgICAgICAgICAgICAgIGRhdF93 MCA9IGRhdF93MF9yZWFkKGRhdF9pZHgpOw0KPj4gKyAgICAgICAgICAgICAgICBpZiAoRklFTERf R0VUKERBVF8wX0RZTkFNSUNfQUREUkVTUywgZGF0X3cwKSA9PSBkZXZfYWRkcikNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0X2lkeDsNCj4+ICsgICAgICAgIH0NCj4+ICsN Cj4+ICsgICAgICAgIHJldHVybiAtRU5PREVWOw0KPj4gK30NCj4+ICsNCj4+ICtjb25zdCBzdHJ1 Y3QgbWNocF9oY2lfZGF0X29wcyBtY2hwX21pcGlfaTNjX2hjaV9kYXRfdjEgPSB7DQo+PiArICAg ICAgICAuaW5pdCAgICAgICAgICAgICAgICAgICA9IG1jaHBfaGNpX2RhdF92MV9pbml0LA0KPj4g KyAgICAgICAgLmNsZWFudXAgICAgICAgICAgICAgICAgPSBtY2hwX2hjaV9kYXRfdjFfY2xlYW51 cCwNCj4+ICsgICAgICAgIC5hbGxvY19lbnRyeSAgICAgICAgICAgID0gbWNocF9oY2lfZGF0X3Yx X2FsbG9jX2VudHJ5LA0KPj4gKyAgICAgICAgLmZyZWVfZW50cnkgICAgICAgICAgICAgPSBtY2hw X2hjaV9kYXRfdjFfZnJlZV9lbnRyeSwNCj4+ICsgICAgICAgIC5zZXRfZHluYW1pY19hZGRyICAg ICAgID0gbWNocF9oY2lfZGF0X3YxX3NldF9keW5hbWljX2FkZHIsDQo+PiArICAgICAgICAuc2V0 X3N0YXRpY19hZGRyICAgICAgICA9IG1jaHBfaGNpX2RhdF92MV9zZXRfc3RhdGljX2FkZHIsDQo+ PiArICAgICAgICAuc2V0X2ZsYWdzICAgICAgICAgICAgICA9IG1jaHBfaGNpX2RhdF92MV9zZXRf ZmxhZ3MsDQo+PiArICAgICAgICAuY2xlYXJfZmxhZ3MgICAgICAgICAgICA9IG1jaHBfaGNpX2Rh dF92MV9jbGVhcl9mbGFncywNCj4+ICsgICAgICAgIC5nZXRfaW5kZXggICAgICAgICAgICAgID0g bWNocF9oY2lfZGF0X3YxX2dldF9pbmRleCwNCj4+ICt9Ow0KPj4gKw0KPj4gKy8qDQo+PiArICog RGV2aWNlIENoYXJhY3RlcmlzdGljIFRhYmxlDQo+PiArICovDQo+PiArDQo+PiArdm9pZCBtY2hw X2kzY19oY2lfZGN0X2dldF92YWwoc3RydWN0IG1jaHBfaTNjX2hjaSAqaGNpLCB1bnNpZ25lZCBp bnQgZGN0X2lkeCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgdTY0ICpwaWQsIHVuc2ln bmVkIGludCAqZGNyLCB1bnNpZ25lZCBpbnQgKmJjcikNCj4+ICt7DQo+PiArICAgICAgICB2b2lk IF9faW9tZW0gKnJlZyA9IGhjaS0+RENUX3JlZ3MgKyBkY3RfaWR4ICogNCAqIDQ7DQo+PiArICAg ICAgICB1MzIgZGN0X2VudHJ5X2RhdGFbNF07DQo+PiArICAgICAgICB1bnNpZ25lZCBpbnQgaTsN Cj4+ICsNCj4+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsNCj4+ICsgICAgICAg ICAgICAgICAgZGN0X2VudHJ5X2RhdGFbaV0gPSByZWFkbChyZWcpOw0KPj4gKyAgICAgICAgICAg ICAgICByZWcgKz0gNDsNCj4+ICsgICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgICpwaWQgPSAo KHU2NClkY3RfZW50cnlfZGF0YVswXSkgPDwgKDQ3IC0gMzIgKyAxKSB8DQo+PiArICAgICAgICAg ICAgICAgRklFTERfR0VUKFcxX01BU0soNDcsIDMyKSwgZGN0X2VudHJ5X2RhdGFbMV0pOw0KPj4g KyAgICAgICAgKmRjciA9IEZJRUxEX0dFVChXMl9NQVNLKDcxLCA2NCksIGRjdF9lbnRyeV9kYXRh WzJdKTsNCj4+ICsgICAgICAgICpiY3IgPSBGSUVMRF9HRVQoVzJfTUFTSyg3OSwgNzIpLCBkY3Rf ZW50cnlfZGF0YVsyXSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBlbnVtIG1jaHBfaGNpX2Nt ZF9tb2RlIG1jaHBfZ2V0X2kzY19tb2RlKHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSkNCj4+ICt7 DQo+PiArICAgICAgICBzdHJ1Y3QgaTNjX2J1cyAqYnVzID0gaTNjX21hc3Rlcl9nZXRfYnVzKCZo Y2ktPm1hc3Rlcik7DQo+PiArDQo+PiArICAgICAgICBpZiAoYnVzLT5zY2xfcmF0ZS5pM2MgPiA4 MDAwMDAwKQ0KPj4gKyAgICAgICAgICAgICAgICByZXR1cm4gTU9ERV9JM0NfU0RSMDsNCj4+ICsg ICAgICAgIGlmIChidXMtPnNjbF9yYXRlLmkzYyA+IDYwMDAwMDApDQo+PiArICAgICAgICAgICAg ICAgIHJldHVybiBNT0RFX0kzQ19TRFIxOw0KPj4gKyAgICAgICAgaWYgKGJ1cy0+c2NsX3JhdGUu aTNjID4gNDAwMDAwMCkNCj4+ICsgICAgICAgICAgICAgICAgcmV0dXJuIE1PREVfSTNDX1NEUjI7 DQo+PiArICAgICAgICBpZiAoYnVzLT5zY2xfcmF0ZS5pM2MgPiAyMDAwMDAwKQ0KPj4gKyAgICAg ICAgICAgICAgICByZXR1cm4gTU9ERV9JM0NfU0RSMzsNCj4+ICsgICAgICAgIHJldHVybiBNT0RF X0kzQ19TRFI0Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgZW51bSBtY2hwX2hjaV9jbWRfbW9k ZSBtY2hwX2dldF9pMmNfbW9kZShzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2kpDQo+PiArew0KPj4g KyAgICAgICAgc3RydWN0IGkzY19idXMgKmJ1cyA9IGkzY19tYXN0ZXJfZ2V0X2J1cygmaGNpLT5t YXN0ZXIpOw0KPj4gKw0KPj4gKyAgICAgICAgaWYgKGJ1cy0+c2NsX3JhdGUuaTJjID49IDEwMDAw MDApDQo+PiArICAgICAgICAgICAgICAgIHJldHVybiBNT0RFX0kyQ19GbVA7DQo+PiArICAgICAg ICByZXR1cm4gTU9ERV9JMkNfRm07DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIG1jaHBf ZmlsbF9kYXRhX2J5dGVzKHN0cnVjdCBtY2hwX2hjaV94ZmVyICp4ZmVyLCB1OCAqZGF0YSwNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRhdGFfbGVuKQ0KPj4g K3sNCj4+ICsgICAgICAgIHhmZXItPmNtZF9kZXNjWzFdID0gMDsNCj4+ICsgICAgICAgIHN3aXRj aCAoZGF0YV9sZW4pIHsNCj4+ICsgICAgICAgIGNhc2UgNDoNCj4+ICsgICAgICAgICAgICAgICAg eGZlci0+Y21kX2Rlc2NbMV0gfD0gQ01EX0kxX0RBVEFfQllURV80KGRhdGFbM10pOw0KPj4gKyAg ICAgICAgICAgICAgICBmYWxsdGhyb3VnaDsNCj4+ICsgICAgICAgIGNhc2UgMzoNCj4+ICsgICAg ICAgICAgICAgICAgeGZlci0+Y21kX2Rlc2NbMV0gfD0gQ01EX0kxX0RBVEFfQllURV8zKGRhdGFb Ml0pOw0KPj4gKyAgICAgICAgICAgICAgICBmYWxsdGhyb3VnaDsNCj4+ICsgICAgICAgIGNhc2Ug MjoNCj4+ICsgICAgICAgICAgICAgICAgeGZlci0+Y21kX2Rlc2NbMV0gfD0gQ01EX0kxX0RBVEFf QllURV8yKGRhdGFbMV0pOw0KPj4gKyAgICAgICAgICAgICAgICBmYWxsdGhyb3VnaDsNCj4+ICsg ICAgICAgIGNhc2UgMToNCj4+ICsgICAgICAgICAgICAgICAgeGZlci0+Y21kX2Rlc2NbMV0gfD0g Q01EX0kxX0RBVEFfQllURV8xKGRhdGFbMF0pOw0KPj4gKyAgICAgICAgICAgICAgICBmYWxsdGhy b3VnaDsNCj4+ICsgICAgICAgIGNhc2UgMDoNCj4+ICsgICAgICAgICAgICAgICAgYnJlYWs7DQo+ PiArICAgICAgICB9DQo+PiArICAgICAgICAvKiB3ZSBjb25zdW1lZCBhbGwgdGhlIGRhdGEgd2l0 aCB0aGUgY21kIGRlc2NyaXB0b3IgKi8NCj4+ICsgICAgICAgIHhmZXItPmRhdGEgPSBOVUxMOw0K Pj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IG1jaHBfaGNpX2NtZF92MV9wcmVwX2NjYyhzdHJ1 Y3QgbWNocF9pM2NfaGNpICpoY2ksDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBtY2hwX2hjaV94ZmVyICp4ZmVyLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1OCBjY2NfYWRkciwgdTggY2NjX2NtZCwgYm9vbCByYXcpDQo+PiArew0KPj4gKyAg ICAgICAgdW5zaWduZWQgaW50IGRhdF9pZHggPSAwOw0KPj4gKyAgICAgICAgZW51bSBtY2hwX2hj aV9jbWRfbW9kZSBtb2RlID0gbWNocF9nZXRfaTNjX21vZGUoaGNpKTsNCj4+ICsgICAgICAgIHU4 ICpkYXRhID0geGZlci0+ZGF0YTsNCj4+ICsgICAgICAgIHVuc2lnbmVkIGludCBkYXRhX2xlbiA9 IHhmZXItPmRhdGFfbGVuOw0KPj4gKyAgICAgICAgYm9vbCBybncgPSB4ZmVyLT5ybnc7DQo+PiAr ICAgICAgICBpbnQgcmV0Ow0KPj4gKw0KPj4gKyAgICAgICAgLyogdGhpcyBzaG91bGQgbmV2ZXIg aGFwcGVuICovDQo+PiArICAgICAgICBpZiAoV0FSTl9PTihyYXcpKQ0KPj4gKyAgICAgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsNCj4+ICsNCj4+ICsgICAgICAgIGlmIChjY2NfYWRkciAhPSBJ M0NfQlJPQURDQVNUX0FERFIpIHsNCj4+ICsgICAgICAgICAgICAgICAgcmV0ID0gbWNocF9taXBp X2kzY19oY2lfZGF0X3YxLmdldF9pbmRleChoY2ksIGNjY19hZGRyKTsNCj4+ICsgICAgICAgICAg ICAgICAgaWYgKHJldCA8IDApDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsNCj4+ICsgICAgICAgICAgICAgICAgZGF0X2lkeCA9IHJldDsNCj4+ICsgICAgICAgIH0NCj4+ ICsNCj4+ICsgICAgICAgIHhmZXItPmNtZF90aWQgPSBtY2hwX2hjaV9nZXRfdGlkKCk7DQo+PiAr DQo+PiArICAgICAgICBpZiAoIXJudyAmJiBkYXRhX2xlbiA8PSA0KSB7DQo+PiArICAgICAgICAg ICAgICAgIC8qIHdlIHVzZSBhbiBJbW1lZGlhdGUgRGF0YSBUcmFuc2ZlciBDb21tYW5kICovDQo+ PiArICAgICAgICAgICAgICAgIHhmZXItPmNtZF9kZXNjWzBdID0NCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICBDTURfMF9BVFRSX0kgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIENN RF9JMF9USUQoeGZlci0+Y21kX3RpZCkgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIENN RF9JMF9DTUQoY2NjX2NtZCkgfCBDTURfSTBfQ1AgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgIENNRF9JMF9ERVZfSU5ERVgoZGF0X2lkeCkgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgIENNRF9JMF9EVFQoZGF0YV9sZW4pIHwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBD TURfSTBfTU9ERShtb2RlKTsNCj4+ICsgICAgICAgICAgICAgICAgbWNocF9maWxsX2RhdGFfYnl0 ZXMoeGZlciwgZGF0YSwgZGF0YV9sZW4pOw0KPj4gKyAgICAgICAgfSBlbHNlIHsNCj4+ICsgICAg ICAgICAgICAgICAgLyogd2UgdXNlIGEgUmVndWxhciBEYXRhIFRyYW5zZmVyIENvbW1hbmQgKi8N Cj4+ICsgICAgICAgICAgICAgICAgeGZlci0+Y21kX2Rlc2NbMF0gPQ0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIENNRF8wX0FUVFJfUiB8DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg Q01EX1IwX1RJRCh4ZmVyLT5jbWRfdGlkKSB8DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg Q01EX1IwX0NNRChjY2NfY21kKSB8IENNRF9SMF9DUCB8DQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgQ01EX1IwX0RFVl9JTkRFWChkYXRfaWR4KSB8DQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgQ01EX1IwX01PREUobW9kZSkgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIChy bncgPyBDTURfUjBfUk5XIDogMCk7DQo+PiArICAgICAgICAgICAgICAgIHhmZXItPmNtZF9kZXNj WzFdID0NCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBDTURfUjFfREFUQV9MRU5HVEgoZGF0 YV9sZW4pOw0KPj4gKyAgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICAgcmV0dXJuIDA7DQo+PiAr fQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIG1jaHBfaGNpX2NtZF92MV9wcmVwX2kzY194ZmVyKHN0 cnVjdCBtY2hwX2kzY19oY2kgKmhjaSwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2LA0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNocF9oY2lfeGZlciAqeGZlcikNCj4+ICt7DQo+ PiArICAgICAgICBzdHJ1Y3QgbWNocF9pM2NfaGNpX2Rldl9kYXRhICpkZXZfZGF0YSA9IGkzY19k ZXZfZ2V0X21hc3Rlcl9kYXRhKGRldik7DQo+PiArICAgICAgICB1bnNpZ25lZCBpbnQgZGF0X2lk eCA9IGRldl9kYXRhLT5kYXRfaWR4Ow0KPj4gKyAgICAgICAgZW51bSBtY2hwX2hjaV9jbWRfbW9k ZSBtb2RlID0gbWNocF9nZXRfaTNjX21vZGUoaGNpKTsNCj4+ICsgICAgICAgIHU4ICpkYXRhID0g eGZlci0+ZGF0YTsNCj4+ICsgICAgICAgIHVuc2lnbmVkIGludCBkYXRhX2xlbiA9IHhmZXItPmRh dGFfbGVuOw0KPj4gKyAgICAgICAgYm9vbCBybncgPSB4ZmVyLT5ybnc7DQo+PiArDQo+PiArICAg ICAgICB4ZmVyLT5jbWRfdGlkID0gbWNocF9oY2lfZ2V0X3RpZCgpOw0KPj4gKw0KPj4gKyAgICAg ICAgaWYgKCFybncgJiYgZGF0YV9sZW4gPD0gNCkgew0KPj4gKyAgICAgICAgICAgICAgICAvKiB3 ZSB1c2UgYW4gSW1tZWRpYXRlIERhdGEgVHJhbnNmZXIgQ29tbWFuZCAqLw0KPj4gKyAgICAgICAg ICAgICAgICB4ZmVyLT5jbWRfZGVzY1swXSA9DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg Q01EXzBfQVRUUl9JIHwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBDTURfSTBfVElEKHhm ZXItPmNtZF90aWQpIHwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBDTURfSTBfREVWX0lO REVYKGRhdF9pZHgpIHwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBDTURfSTBfRFRUKGRh dGFfbGVuKSB8DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgQ01EX0kwX01PREUobW9kZSk7 DQo+PiArICAgICAgICAgICAgICAgIG1jaHBfZmlsbF9kYXRhX2J5dGVzKHhmZXIsIGRhdGEsIGRh dGFfbGVuKTsNCj4+ICsgICAgICAgIH0gZWxzZSB7DQo+PiArICAgICAgICAgICAgICAgIC8qIHdl IHVzZSBhIFJlZ3VsYXIgRGF0YSBUcmFuc2ZlciBDb21tYW5kICovDQo+PiArICAgICAgICAgICAg ICAgIHhmZXItPmNtZF9kZXNjWzBdID0NCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBDTURf MF9BVFRSX1IgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIENNRF9SMF9USUQoeGZlci0+ Y21kX3RpZCkgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIENNRF9SMF9ERVZfSU5ERVgo ZGF0X2lkeCkgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIENNRF9SMF9NT0RFKG1vZGUp IHwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAocm53ID8gQ01EX1IwX1JOVyA6IDApOw0K Pj4gKyAgICAgICAgICAgICAgICB4ZmVyLT5jbWRfZGVzY1sxXSA9DQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgQ01EX1IxX0RBVEFfTEVOR1RIKGRhdGFfbGVuKTsNCj4+ICsgICAgICAgIH0N Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgbWNocF9oY2lfY21kX3YxX3ByZXBfaTJjX3hm ZXIoc3RydWN0IG1jaHBfaTNjX2hjaSAqaGNpLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgaTJjX2Rldl9kZXNjICpkZXYsDQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtY2hwX2hjaV94ZmVyICp4ZmVyKQ0KPj4g K3sNCj4+ICsgICAgICAgIHN0cnVjdCBtY2hwX2kzY19oY2lfZGV2X2RhdGEgKmRldl9kYXRhID0g aTJjX2Rldl9nZXRfbWFzdGVyX2RhdGEoZGV2KTsNCj4+ICsgICAgICAgIHVuc2lnbmVkIGludCBk YXRfaWR4ID0gZGV2X2RhdGEtPmRhdF9pZHg7DQo+PiArICAgICAgICBlbnVtIG1jaHBfaGNpX2Nt ZF9tb2RlIG1vZGUgPSBtY2hwX2dldF9pMmNfbW9kZShoY2kpOw0KPj4gKyAgICAgICAgdTggKmRh dGEgPSB4ZmVyLT5kYXRhOw0KPj4gKyAgICAgICAgdW5zaWduZWQgaW50IGRhdGFfbGVuID0geGZl ci0+ZGF0YV9sZW47DQo+PiArICAgICAgICBib29sIHJudyA9IHhmZXItPnJudzsNCj4+ICsNCj4+ ICsgICAgICAgIHhmZXItPmNtZF90aWQgPSBtY2hwX2hjaV9nZXRfdGlkKCk7DQo+PiArDQo+PiAr ICAgICAgICBpZiAoIXJudyAmJiBkYXRhX2xlbiA8PSA0KSB7DQo+PiArICAgICAgICAgICAgICAg IC8qIHdlIHVzZSBhbiBJbW1lZGlhdGUgRGF0YSBUcmFuc2ZlciBDb21tYW5kICovDQo+PiArICAg ICAgICAgICAgICAgIHhmZXItPmNtZF9kZXNjWzBdID0NCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICBDTURfMF9BVFRSX0kgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIENNRF9JMF9U SUQoeGZlci0+Y21kX3RpZCkgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIENNRF9JMF9E RVZfSU5ERVgoZGF0X2lkeCkgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIENNRF9JMF9E VFQoZGF0YV9sZW4pIHwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBDTURfSTBfTU9ERSht b2RlKTsNCj4+ICsgICAgICAgICAgICAgICAgbWNocF9maWxsX2RhdGFfYnl0ZXMoeGZlciwgZGF0 YSwgZGF0YV9sZW4pOw0KPj4gKyAgICAgICAgfSBlbHNlIHsNCj4+ICsgICAgICAgICAgICAgICAg Lyogd2UgdXNlIGEgUmVndWxhciBEYXRhIFRyYW5zZmVyIENvbW1hbmQgKi8NCj4+ICsgICAgICAg ICAgICAgICAgeGZlci0+Y21kX2Rlc2NbMF0gPQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg IENNRF8wX0FUVFJfUiB8DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgQ01EX1IwX1RJRCh4 ZmVyLT5jbWRfdGlkKSB8DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgQ01EX1IwX0RFVl9J TkRFWChkYXRfaWR4KSB8DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgQ01EX1IwX01PREUo bW9kZSkgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIChybncgPyBDTURfUjBfUk5XIDog MCk7DQo+PiArICAgICAgICAgICAgICAgIHhmZXItPmNtZF9kZXNjWzFdID0NCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICBDTURfUjFfREFUQV9MRU5HVEgoZGF0YV9sZW4pOw0KPj4gKyAgICAg ICAgfQ0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IG1jaHBfaGNpX2NtZF92MV9kYWEoc3Ry dWN0IG1jaHBfaTNjX2hjaSAqaGNpKQ0KPj4gK3sNCj4+ICsgICAgICAgIHN0cnVjdCBtY2hwX2hj aV94ZmVyICp4ZmVyOw0KPj4gKyAgICAgICAgaW50IHJldCwgZGF0X2lkeCA9IC0xOw0KPj4gKyAg ICAgICAgdTggbmV4dF9hZGRyID0gMDsNCj4+ICsgICAgICAgIHU2NCBwaWQ7DQo+PiArICAgICAg ICB1bnNpZ25lZCBpbnQgZGNyLCBiY3I7DQo+PiArICAgICAgICBERUNMQVJFX0NPTVBMRVRJT05f T05TVEFDSyhkb25lKTsNCj4+ICsNCj4+ICsgICAgICAgIHhmZXIgPSBtY2hwX2hjaV9hbGxvY194 ZmVyKDEpOw0KPj4gKyAgICAgICAgaWYgKCF4ZmVyKQ0KPj4gKyAgICAgICAgICAgICAgICByZXR1 cm4gLUVOT01FTTsNCj4+ICsNCj4+ICsgICAgICAgIC8qDQo+PiArICAgICAgICAgKiBTaW1wbGUg Zm9yIG5vdzogd2UgYWxsb2NhdGUgYSB0ZW1wb3JhcnkgREFUIGVudHJ5LCBkbyBhIHNpbmdsZQ0K Pj4gKyAgICAgICAgICogREFBLCByZWdpc3RlciB0aGUgZGV2aWNlIHdoaWNoIHdpbGwgYWxsb2Nh dGUgaXRzIG93biBEQVQgZW50cnkNCj4+ICsgICAgICAgICAqIHZpYSB0aGUgY29yZSBjYWxsYmFj aywgdGhlbiBmcmVlIHRoZSB0ZW1wb3JhcnkgREFUIGVudHJ5Lg0KPj4gKyAgICAgICAgICogTG9v cCB1bnRpbCB0aGVyZSBpcyBubyBtb3JlIGRldmljZXMgdG8gYXNzaWduIGFuIGFkZHJlc3MgdG8u DQo+PiArICAgICAgICAgKiBZZXMsIHRoZXJlIGlzIHJvb20gZm9yIGltcHJvdmVtZW50cy4NCj4+ ICsgICAgICAgICAqLw0KPj4gKyAgICAgICAgZm9yICg7Oykgew0KPj4gKyAgICAgICAgICAgICAg ICByZXQgPSBtY2hwX21pcGlfaTNjX2hjaV9kYXRfdjEuYWxsb2NfZW50cnkoaGNpKTsNCj4+ICsg ICAgICAgICAgICAgICAgaWYgKHJldCA8IDApDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7DQo+PiArICAgICAgICAgICAgICAgIGRhdF9pZHggPSByZXQ7DQo+PiArICAgICAgICAg ICAgICAgIHJldCA9IGkzY19tYXN0ZXJfZ2V0X2ZyZWVfYWRkcigmaGNpLT5tYXN0ZXIsIG5leHRf YWRkcik7DQo+PiArICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKQ0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICAgICAgICAgICBuZXh0X2FkZHIgPSByZXQ7 DQo+PiArDQo+PiArICAgICAgICAgICAgICAgIGRldl9kYmcoJmhjaS0+bWFzdGVyLmRldiwibmV4 dF9hZGRyID0gMHglMDJ4LCBEQUEgdXNpbmcgREFUICVkIiwgbmV4dF9hZGRyLCBkYXRfaWR4KTsN Cj4+ICsgICAgICAgICAgICAgICAgbWNocF9taXBpX2kzY19oY2lfZGF0X3YxLnNldF9keW5hbWlj X2FkZHIoaGNpLCBkYXRfaWR4LCBuZXh0X2FkZHIpOw0KPj4gKyAgICAgICAgICAgICAgICBtY2hw X21pcGlfaTNjX2hjaV9kY3RfaW5kZXhfcmVzZXQoaGNpKTsNCj4+ICsNCj4+ICsgICAgICAgICAg ICAgICAgeGZlci0+Y21kX3RpZCA9IG1jaHBfaGNpX2dldF90aWQoKTsNCj4+ICsgICAgICAgICAg ICAgICAgeGZlci0+Y21kX2Rlc2NbMF0gPQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIENN RF8wX0FUVFJfQSB8DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgQ01EX0EwX1RJRCh4ZmVy LT5jbWRfdGlkKSB8DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgQ01EX0EwX0NNRChJM0Nf Q0NDX0VOVERBQSkgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIENNRF9BMF9ERVZfSU5E RVgoZGF0X2lkeCkgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIENNRF9BMF9ERVZfQ09V TlQoMSkgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIENNRF9BMF9ST0MgfCBDTURfQTBf VE9DOw0KPj4gKyAgICAgICAgICAgICAgICB4ZmVyLT5jbWRfZGVzY1sxXSA9IDA7DQo+PiArICAg ICAgICAgICAgICAgIHhmZXItPmNvbXBsZXRpb24gPSAmZG9uZTsNCj4+ICsgICAgICAgICAgICAg ICAgaGNpLT5pby0+cXVldWVfeGZlcihoY2ksIHhmZXIsIDEpOw0KPj4gKyAgICAgICAgICAgICAg ICBpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZG9uZSwgSFopICYmDQo+PiArICAg ICAgICAgICAgICAgICAgICBoY2ktPmlvLT5kZXF1ZXVlX3hmZXIoaGNpLCB4ZmVyLCAxKSkgew0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FVElNRTsNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAgICAgICAgICAgfQ0KPj4gKyAgICAgICAg ICAgICBpZiAoKFJFU1BfU1RBVFVTKHhmZXItPnJlc3BvbnNlKSA9PSBSRVNQX0VSUl9BRERSX0hF QURFUiB8fA0KPj4gKyAgICAgICAgICAgICAgICAgICAgIFJFU1BfU1RBVFVTKHhmZXItPnJlc3Bv bnNlKSA9PSBSRVNQX0VSUl9OQUNLKSAmJg0KPj4gKyAgICAgICAgICAgICAgICAgICAgUkVTUF9E QVRBX0xFTkdUSCh4ZmVyLT5yZXNwb25zZSkgPT0gMSkgew0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgIHJldCA9IDA7ICAvKiBubyBtb3JlIGRldmljZXMgdG8gYmUgYXNzaWduZWQgKi8NCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAgICAgICAgICAgfQ0K Pj4gKyAgICAgICAgICAgICBpZiAoUkVTUF9TVEFUVVMoeGZlci0+cmVzcG9uc2UpICE9IFJFU1Bf U1VDQ0VTUykgew0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87DQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgICAgICAgICAgIH0NCj4+ ICsNCj4+ICsgICAgICAgICAgICAgICAgbWNocF9pM2NfaGNpX2RjdF9nZXRfdmFsKGhjaSwgMCwg JnBpZCwgJmRjciwgJmJjcik7DQo+PiArICAgICAgICAgICAgICAgIGRldl9kYmcoJmhjaS0+bWFz dGVyLmRldiwiYXNzaWduZWQgYWRkcmVzcyAlI3ggdG8gZGV2aWNlIFBJRD0weCVsbHggRENSPSUj eCBCQ1I9JSN4IiwNCj4+ICsgICAgICAgICAgICAgICAgICAgIG5leHRfYWRkciwgcGlkLCBkY3Is IGJjcik7DQo+PiArDQo+PiArICAgICAgICAgICAgICAgIG1jaHBfbWlwaV9pM2NfaGNpX2RhdF92 MS5mcmVlX2VudHJ5KGhjaSwgZGF0X2lkeCk7DQo+PiArICAgICAgICAgICAgICAgIGRhdF9pZHgg PSAtMTsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICAgLyoNCj4+ICsgICAgICAgICAgICAgICAg ICogVE9ETzogRXh0ZW5kIHRoZSBzdWJzeXN0ZW0gbGF5ZXIgdG8gYWxsb3cgZm9yIHJlZ2lzdGVy aW5nDQo+PiArICAgICAgICAgICAgICAgICAqIG5ldyBkZXZpY2UgYW5kIHByb3ZpZGUgQkNSL0RD Ui9QSUQgYXQgdGhlIHNhbWUgdGltZS4NCj4+ICsgICAgICAgICAgICAgICAgICovDQo+PiArICAg ICAgICAgICAgICAgIHJldCA9IGkzY19tYXN0ZXJfYWRkX2kzY19kZXZfbG9ja2VkKCZoY2ktPm1h c3RlciwgbmV4dF9hZGRyKTsNCj4+ICsgICAgICAgICAgICAgICAgaWYgKHJldCkNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAgIH0NCj4+ICsNCj4+ICsgICAg ICAgIGlmIChkYXRfaWR4ID49IDApDQo+PiArICAgICAgICAgICAgICAgIG1jaHBfbWlwaV9pM2Nf aGNpX2RhdF92MS5mcmVlX2VudHJ5KGhjaSwgZGF0X2lkeCk7DQo+PiArICAgICAgICBtY2hwX2hj aV9mcmVlX3hmZXIoeGZlciwgMSk7DQo+PiArICAgICAgICByZXR1cm4gcmV0Ow0KPj4gK30NCj4+ ICsNCj4+ICtjb25zdCBzdHJ1Y3QgbWNocF9oY2lfY21kX29wcyBtY2hwX21pcGlfaTNjX2hjaV9j bWRfdjEgPSB7DQo+PiArICAgICAgICAucHJlcF9jY2MgICAgICAgICAgICAgICA9IG1jaHBfaGNp X2NtZF92MV9wcmVwX2NjYywNCj4+ICsgICAgICAgIC5wcmVwX2kzY194ZmVyICAgICAgICAgID0g bWNocF9oY2lfY21kX3YxX3ByZXBfaTNjX3hmZXIsDQo+PiArICAgICAgICAucHJlcF9pMmNfeGZl ciAgICAgICAgICA9IG1jaHBfaGNpX2NtZF92MV9wcmVwX2kyY194ZmVyLA0KPj4gKyAgICAgICAg LnBlcmZvcm1fZGFhICAgICAgICAgICAgPSBtY2hwX2hjaV9jbWRfdjFfZGFhLA0KPj4gK307DQo+ PiArDQo+PiArc3RhdGljIGludCBtY2hwX2hjaV9waW9faW5pdChzdHJ1Y3QgbWNocF9pM2NfaGNp ICpoY2kpDQo+PiArew0KPj4gKyAgICAgICAgc3RydWN0IG1jaHBfaGNpX3Bpb19kYXRhICpwaW87 DQo+PiArICAgICAgICB1MzIgdmFsLCBzaXplX3ZhbCwgcnhfdGhyZXNoLCB0eF90aHJlc2gsIGli aV92YWw7DQo+PiArDQo+PiArICAgICAgICBwaW8gPSBremFsbG9jKHNpemVvZigqcGlvKSwgR0ZQ X0tFUk5FTCk7DQo+PiArICAgICAgICBpZiAoIXBpbykNCj4+ICsgICAgICAgICAgICAgICAgcmV0 dXJuIC1FTk9NRU07DQo+PiArDQo+PiArICAgICAgICBoY2ktPmlvX2RhdGEgPSBwaW87DQo+PiAr ICAgICAgICBzcGluX2xvY2tfaW5pdCgmcGlvLT5sb2NrKTsNCj4+ICsNCj4+ICsgICAgICAgIHNp emVfdmFsID0gcGlvX3JlZ19yZWFkKE1DSFBfUVVFVUVfU0laRSk7DQo+PiArICAgICAgICBkZXZf aW5mbygmaGNpLT5tYXN0ZXIuZGV2LCAiQ01EL1JFU1AgRklGTyA9ICVsZCBlbnRyaWVzXG4iLA0K Pj4gKyAgICAgICAgICAgICAgICAgRklFTERfR0VUKE1DSFBfQ1JfUVVFVUVfU0laRSwgc2l6ZV92 YWwpKTsNCj4+ICsgICAgICAgIGRldl9pbmZvKCZoY2ktPm1hc3Rlci5kZXYsICJJQkkgRklGTyA9 ICVsZCBieXRlc1xuIiwNCj4+ICsgICAgICAgICAgICAgICAgIDQgKiBGSUVMRF9HRVQoTUNIUF9J QklfU1RBVFVTX1NJWkUsIHNpemVfdmFsKSk7DQo+PiArICAgICAgICBkZXZfaW5mbygmaGNpLT5t YXN0ZXIuZGV2LCAiUlggZGF0YSBGSUZPID0gJWQgYnl0ZXNcbiIsDQo+PiArICAgICAgICAgICAg ICAgICA0ICogKDIgPDwgRklFTERfR0VUKE1DSFBfUlhfREFUQV9CVUZGRVJfU0laRSwgc2l6ZV92 YWwpKSk7DQo+PiArICAgICAgICBkZXZfaW5mbygmaGNpLT5tYXN0ZXIuZGV2LCAiVFggZGF0YSBG SUZPID0gJWQgYnl0ZXNcbiIsDQo+PiArICAgICAgICAgICAgICAgICA0ICogKDIgPDwgRklFTERf R0VUKE1DSFBfVFhfREFUQV9CVUZGRVJfU0laRSwgc2l6ZV92YWwpKSk7DQo+PiArDQo+PiArICAg ICAgICAvKg0KPj4gKyAgICAgICAgICogTGV0J3MgaW5pdGlhbGl6ZSBkYXRhIHRocmVzaG9sZHMg dG8gaGFsZiBvZiB0aGUgYWN0dWFsIEZJRk8gc2l6ZS4NCj4+ICsgICAgICAgICAqIFRoZSBzdGFy dCB0aHJlc2hvbGRzIGFyZW4ndCB1c2VkIChzZXQgdG8gMCkgYXMgdGhlIEZJRk8gaXMgYWx3YXlz DQo+PiArICAgICAgICAgKiBzZXJ2aWNlZCBiZWZvcmUgdGhlIGNvcnJlc3BvbmRpbmcgY29tbWFu ZCBpcyBxdWV1ZWQuDQo+PiArICAgICAgICAgKi8NCj4+ICsgICAgICAgIHJ4X3RocmVzaCA9IEZJ RUxEX0dFVChNQ0hQX1JYX0RBVEFfQlVGRkVSX1NJWkUsIHNpemVfdmFsKTsNCj4+ICsgICAgICAg IHR4X3RocmVzaCA9IEZJRUxEX0dFVChNQ0hQX1RYX0RBVEFfQlVGRkVSX1NJWkUsIHNpemVfdmFs KTsNCj4+ICsgICAgICAgIGlmIChoY2ktPnZlcnNpb25fbWFqb3IgPT0gMSkgew0KPj4gKyAgICAg ICAgICAgICAgICAvKiB0aG9zZSBhcmUgZXhwcmVzc2VkIGFzIDJeW24rMSksIHNvIGp1c3Qgc3Vi IDEgaWYgbm90IDAgKi8NCj4+ICsgICAgICAgICAgICAgICAgaWYgKHJ4X3RocmVzaCkNCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICByeF90aHJlc2ggLT0gMTsNCj4+ICsgICAgICAgICAgICAg ICAgaWYgKHR4X3RocmVzaCkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICB0eF90aHJlc2gg LT0gMTsNCj4+ICsgICAgICAgICAgICAgICAgcGlvLT5yeF90aHJlc2hfc2l6ZSA9IDIgPDwgcnhf dGhyZXNoOw0KPj4gKyAgICAgICAgICAgICAgICBwaW8tPnR4X3RocmVzaF9zaXplID0gMiA8PCB0 eF90aHJlc2g7DQo+PiArICAgICAgICB9IGVsc2Ugew0KPj4gKyAgICAgICAgICAgICAgICAvKiBz aXplIGlzIDJeKG4rMSkgYW5kIHRocmVzaG9sZCBpcyAyXm4gaS5lLiBhbHJlYWR5IGhhbHZlZCAq Lw0KPj4gKyAgICAgICAgICAgICAgICBwaW8tPnJ4X3RocmVzaF9zaXplID0gMSA8PCByeF90aHJl c2g7DQo+PiArICAgICAgICAgICAgICAgIHBpby0+dHhfdGhyZXNoX3NpemUgPSAxIDw8IHR4X3Ro cmVzaDsNCj4+ICsgICAgICAgIH0NCj4+ICsgICAgICAgIHZhbCA9IEZJRUxEX1BSRVAoTUNIUF9E QVRBX1JYX0JVRl9USExELCAgIHJ4X3RocmVzaCkgfA0KPj4gKyAgICAgICAgICAgICAgRklFTERf UFJFUChNQ0hQX0RBVEFfVFhfQlVGX1RITEQsICAgdHhfdGhyZXNoKTsNCj4+ICsgICAgICAgIHBp b19yZWdfd3JpdGUoTUNIUF9EQVRBX0JVRkZFUl9USExEX0NUUkwsIHZhbCk7DQo+PiArDQo+PiAr ICAgICAvKg0KPj4gKyAgICAgICAgICogTGV0J3MgcmFpc2UgYW4gaW50ZXJydXB0IGFzIHNvb24g YXMgdGhlcmUgaXMgb25lIGZyZWUgY21kIHNsb3QNCj4+ICsgICAgICAgICAqIG9yIG9uZSBhdmFp bGFibGUgcmVzcG9uc2Ugb3IgSUJJLiBGb3IgSUJJIGRhdGEgbGV0J3MgdXNlIGhhbGYgdGhlDQo+ PiArICAgICAgICAgKiBJQkkgcXVldWUgc2l6ZSB3aXRoaW4gYWxsb3dlZCBib3VuZHMuDQo+PiAr ICAgICAgICAgKi8NCj4+ICsgICAgICAgIGliaV92YWwgPSBGSUVMRF9HRVQoTUNIUF9JQklfU1RB VFVTX1NJWkUsIHNpemVfdmFsKTsNCj4+ICsgICAgICAgIHBpby0+bWF4X2liaV90aHJlc2ggPSBj bGFtcF92YWwoaWJpX3ZhbC8yLCAxLCA2Myk7DQo+PiArICAgICAgICB2YWwgPSBGSUVMRF9QUkVQ KE1DSFBfUVVFVUVfSUJJX1NUQVRVU19USExELCAxKSB8DQo+PiArICAgICAgICAgICAgICBGSUVM RF9QUkVQKE1DSFBfUVVFVUVfSUJJX0RBVEFfVEhMRCwgcGlvLT5tYXhfaWJpX3RocmVzaCkgfA0K Pj4gKyAgICAgICAgICAgICAgRklFTERfUFJFUChNQ0hQX1FVRVVFX1JFU1BfQlVGX1RITEQsIDEp IHwNCj4+ICsgICAgICAgICAgICAgIEZJRUxEX1BSRVAoTUNIUF9RVUVVRV9DTURfRU1QVFlfQlVG X1RITEQsIDEpOw0KPj4gKyAgICAgICAgcGlvX3JlZ193cml0ZShNQ0hQX1FVRVVFX1RITERfQ1RS TCwgdmFsKTsNCj4+ICsgICAgICAgIHBpby0+cmVnX3F1ZXVlX3RocmVzaCA9IHZhbDsNCj4+ICsN Cj4+ICsgICAgICAgIC8qIERpc2FibGUgYWxsIElSUXMgYnV0IGFsbG93IGFsbCBzdGF0dXMgYml0 cyAqLw0KPj4gKyAgICAgICAgcGlvX3JlZ193cml0ZShNQ0hQX0lOVFJfU0lHTkFMX0VOQUJMRSwg MHgwKTsNCj4+ICsgICAgICAgIHBpb19yZWdfd3JpdGUoTUNIUF9JTlRSX1NUQVRVU19FTkFCTEUs IDB4ZmZmZmZmZmYpOw0KPj4gKw0KPj4gKyAgICAgICAgLyogQWx3YXlzIGFjY2VwdCBlcnJvciBp bnRlcnJ1cHRzICh3aWxsIGJlIGFjdGl2YXRlZCBvbiBmaXJzdCB4ZmVyKSAqLw0KPj4gKyAgICAg ICAgcGlvLT5lbmFibGVkX2lycXMgPSBTVEFUX0FMTF9FUlJPUlM7DQo+PiArDQo+PiArICAgICAg ICByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgbWNocF9oY2lfcGlvX2Ns ZWFudXAoc3RydWN0IG1jaHBfaTNjX2hjaSAqaGNpKQ0KPj4gK3sNCj4+ICsgICAgICAgIHN0cnVj dCBtY2hwX2hjaV9waW9fZGF0YSAqcGlvID0gaGNpLT5pb19kYXRhOw0KPj4gKw0KPj4gKyAgICAg ICAgcGlvX3JlZ193cml0ZShNQ0hQX0lOVFJfU0lHTkFMX0VOQUJMRSwgMHgwKTsNCj4+ICsNCj4+ ICsgICAgICAgIGlmIChwaW8pIHsNCj4+ICsgICAgICAgICAgICAgICAgZGV2X2RiZygmaGNpLT5t YXN0ZXIuZGV2LCJzdGF0dXMgPSAlI3gvJSN4IiwNCj4+ICsgICAgICAgICAgICAgICAgICAgIHBp b19yZWdfcmVhZChNQ0hQX0lOVFJfU1RBVFVTKSwgcGlvX3JlZ19yZWFkKE1DSFBfSU5UUl9TSUdO QUxfRU5BQkxFKSk7DQo+PiArICAgICAgICAgICAgICAgIEJVR19PTihwaW8tPmN1cnJfeGZlcik7 DQo+PiArICAgICAgICAgICAgICAgIEJVR19PTihwaW8tPmN1cnJfcngpOw0KPj4gKyAgICAgICAg ICAgICAgICBCVUdfT04ocGlvLT5jdXJyX3R4KTsNCj4+ICsgICAgICAgICAgICAgICAgQlVHX09O KHBpby0+Y3Vycl9yZXNwKTsNCj4+ICsgICAgICAgICAgICAgICAga2ZyZWUocGlvKTsNCj4+ICsg ICAgICAgICAgICAgICAgaGNpLT5pb19kYXRhID0gTlVMTDsNCj4+ICsgICAgICAgIH0NCj4+ICt9 DQo+PiArDQo+PiArc3RhdGljIHZvaWQgbWNocF9oY2lfcGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWNo cF9pM2NfaGNpICpoY2ksIHN0cnVjdCBtY2hwX2hjaV94ZmVyICp4ZmVyKQ0KPj4gK3sNCj4+ICsg ICAgICAgIGRldl9kYmcoJmhjaS0+bWFzdGVyLmRldiwiY21kX2Rlc2NbJWRdID0gMHglMDh4Iiwg MCwgeGZlci0+Y21kX2Rlc2NbMF0pOw0KPj4gKyAgICAgICAgZGV2X2RiZygmaGNpLT5tYXN0ZXIu ZGV2LCJjbWRfZGVzY1slZF0gPSAweCUwOHgiLCAxLCB4ZmVyLT5jbWRfZGVzY1sxXSk7DQo+PiAr ICAgICAgICBwaW9fcmVnX3dyaXRlKE1DSFBfQ09NTUFORF9RVUVVRV9QT1JULCB4ZmVyLT5jbWRf ZGVzY1swXSk7DQo+PiArICAgICAgICBwaW9fcmVnX3dyaXRlKE1DSFBfQ09NTUFORF9RVUVVRV9Q T1JULCB4ZmVyLT5jbWRfZGVzY1sxXSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBib29sIG1j aHBfaGNpX3Bpb19kb19yeChzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ksIHN0cnVjdCBtY2hwX2hj aV9waW9fZGF0YSAqcGlvKQ0KPj4gK3sNCj4+ICsgICAgICAgIHN0cnVjdCBtY2hwX2hjaV94ZmVy ICp4ZmVyID0gcGlvLT5jdXJyX3J4Ow0KPj4gKyAgICAgICAgdW5zaWduZWQgaW50IG5yX3dvcmRz Ow0KPj4gKyAgICAgICAgdTMyICpwOw0KPj4gKw0KPj4gKyAgICAgICAgcCA9IHhmZXItPmRhdGE7 DQo+PiArICAgICAgICBwICs9ICh4ZmVyLT5kYXRhX2xlbiAtIHhmZXItPmRhdGFfbGVmdCkgLyA0 Ow0KPj4gKw0KPj4gKyAgICAgICAgd2hpbGUgKHhmZXItPmRhdGFfbGVmdCA+PSA0KSB7DQo+PiAr ICAgICAgICAgICAgICAgIC8qIGJhaWwgb3V0IGlmIEZJRk8gaGFzbid0IHJlYWNoZWQgdGhlIHRo cmVzaG9sZCB2YWx1ZSB5ZXQgKi8NCj4+ICsgICAgICAgICAgICAgICAgaWYgKCEocGlvX3JlZ19y ZWFkKE1DSFBfSU5UUl9TVEFUVVMpICYgU1RBVF9SWF9USExEKSkNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQo+PiArICAgICAgICAgICAgICAgIG5yX3dvcmRzID0g bWluKHhmZXItPmRhdGFfbGVmdCAvIDQsIHBpby0+cnhfdGhyZXNoX3NpemUpOw0KPj4gKyAgICAg ICAgICAgICAgICAvKiBleHRyYWN0IGRhdGEgZnJvbSBGSUZPICovDQo+PiArICAgICAgICAgICAg ICAgIHhmZXItPmRhdGFfbGVmdCAtPSBucl93b3JkcyAqIDQ7DQo+PiArICAgICAgICAgICAgICAg IGRldl9kYmcoJmhjaS0+bWFzdGVyLmRldiwibm93ICVkIGxlZnQgJWQiLCBucl93b3JkcyAqIDQs IHhmZXItPmRhdGFfbGVmdCk7DQo+PiArICAgICAgICAgICAgICAgIHdoaWxlIChucl93b3Jkcy0t KQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBwaW9fcmVnX3JlYWQoTUNIUF9Y RkVSX0RBVEFfUE9SVCk7DQo+PiArICAgICAgICB9DQo+PiArDQo+PiArICAgICAgICAvKiB0cmFp bGluZyBkYXRhIGlzIHJldHJpZXZlZCB1cG9uIHJlc3BvbnNlIHJlY2VwdGlvbiAqLw0KPj4gKyAg ICAgICAgcmV0dXJuICF4ZmVyLT5kYXRhX2xlZnQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2 b2lkIG1jaHBfaGNpX3Bpb19kb190cmFpbGluZ19yeChzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ks DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNocF9oY2lf cGlvX2RhdGEgKnBpbywgdW5zaWduZWQgaW50IGNvdW50KQ0KPj4gK3sNCj4+ICsgICAgICAgIHN0 cnVjdCBtY2hwX2hjaV94ZmVyICp4ZmVyID0gcGlvLT5jdXJyX3J4Ow0KPj4gKyAgICAgICAgdTMy ICpwOw0KPj4gKw0KPj4gKyAgICAgICAgZGV2X2RiZygmaGNpLT5tYXN0ZXIuZGV2LCIlZCByZW1h aW5pbmciLCBjb3VudCk7DQo+PiArDQo+PiArICAgICAgICBwID0geGZlci0+ZGF0YTsNCj4+ICsg ICAgICAgIHAgKz0gKHhmZXItPmRhdGFfbGVuIC0geGZlci0+ZGF0YV9sZWZ0KSAvIDQ7DQo+PiAr DQo+PiArICAgICAgICBpZiAoY291bnQgPj0gNCkgew0KPj4gKyAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgbnJfd29yZHMgPSBjb3VudCAvIDQ7DQo+PiArICAgICAgICAgICAgICAgIC8qIGV4 dHJhY3QgZGF0YSBmcm9tIEZJRk8gKi8NCj4+ICsgICAgICAgICAgICAgICAgeGZlci0+ZGF0YV9s ZWZ0IC09IG5yX3dvcmRzICogNDsNCj4+ICsgICAgICAgICAgICAgICAgZGV2X2RiZygmaGNpLT5t YXN0ZXIuZGV2LCJub3cgJWQgbGVmdCAlZCIsIG5yX3dvcmRzICogNCwgeGZlci0+ZGF0YV9sZWZ0 KTsNCj4+ICsgICAgICAgICAgICAgICAgd2hpbGUgKG5yX3dvcmRzLS0pDQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgKnArKyA9IHBpb19yZWdfcmVhZChNQ0hQX1hGRVJfREFUQV9QT1JUKTsN Cj4+ICsgICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgIGNvdW50ICY9IDM7DQo+PiArICAgICAg ICBpZiAoY291bnQpIHsNCj4+ICsgICAgICAgICAgICAgICAgLyoNCj4+ICsgICAgICAgICAgICAg ICAgICogVGhlcmUgYXJlIHRyYWlsaW5nIGJ5dGVzIGluIHRoZSBsYXN0IHdvcmQuDQo+PiArICAg ICAgICAgICAgICAgICAqIEZldGNoIGl0IGFuZCBleHRyYWN0IGJ5dGVzIGluIGFuIGVuZGlhbiBp bmRlcGVuZGVudCB3YXkuDQo+PiArICAgICAgICAgICAgICAgICAqIFVubGlrZSB0aGUgVFggY2Fz ZSwgd2UgbXVzdCBub3Qgd3JpdGUgbWVtb3J5IHBhc3QgdGhlDQo+PiArICAgICAgICAgICAgICAg ICAqIGVuZCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLg0KPj4gKyAgICAgICAgICAgICAgICAg Ki8NCj4+ICsgICAgICAgICAgICAgICAgdTggKnBfYnl0ZSA9ICh1OCAqKXA7DQo+PiArICAgICAg ICAgICAgICAgIHUzMiBkYXRhID0gcGlvX3JlZ19yZWFkKE1DSFBfWEZFUl9EQVRBX1BPUlQpOw0K Pj4gKw0KPj4gKyAgICAgICAgICAgICAgICB4ZmVyLT5kYXRhX3dvcmRfYmVmb3JlX3BhcnRpYWwg PSBkYXRhOw0KPj4gKyAgICAgICAgICAgICAgICB4ZmVyLT5kYXRhX2xlZnQgLT0gY291bnQ7DQo+ PiArICAgICAgICAgICAgICAgIGRhdGEgPSAoX19mb3JjZSB1MzIpIGNwdV90b19sZTMyKGRhdGEp Ow0KPj4gKyAgICAgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgew0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICpwX2J5dGUrKyA9IGRhdGE7DQo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgZGF0YSA+Pj0gODsNCj4+ICsgICAgICAgICAgICAgICAgfQ0KPj4gKyAgICAgICAgfQ0KPj4g K30NCj4+ICsNCj4+ICtzdGF0aWMgYm9vbCBtY2hwX2hjaV9waW9fZG9fdHgoc3RydWN0IG1jaHBf aTNjX2hjaSAqaGNpLCBzdHJ1Y3QgbWNocF9oY2lfcGlvX2RhdGEgKnBpbykNCj4+ICt7DQo+PiAr ICAgICAgICBzdHJ1Y3QgbWNocF9oY2lfeGZlciAqeGZlciA9IHBpby0+Y3Vycl90eDsNCj4+ICsg ICAgICAgIHVuc2lnbmVkIGludCBucl93b3JkczsNCj4+ICsgICAgICAgIHUzMiAqcDsNCj4+ICsN Cj4+ICsgICAgICAgIHAgPSB4ZmVyLT5kYXRhOw0KPj4gKyAgICAgICAgcCArPSAoeGZlci0+ZGF0 YV9sZW4gLSB4ZmVyLT5kYXRhX2xlZnQpIC8gNDsNCj4+ICsNCj4+ICsgICAgICAgIHdoaWxlICh4 ZmVyLT5kYXRhX2xlZnQgPj0gNCkgew0KPj4gKyAgICAgICAgICAgICAgICAvKiBiYWlsIG91dCBp ZiBGSUZPIGZyZWUgc3BhY2UgaXMgYmVsb3cgc2V0IHRocmVzaG9sZCAqLw0KPj4gKyAgICAgICAg ICAgICAgICBpZiAoIShwaW9fcmVnX3JlYWQoTUNIUF9JTlRSX1NUQVRVUykgJiBTVEFUX1RYX1RI TEQpKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCj4+ICsgICAg ICAgICAgICAgICAgLyogd2UgY2FuIGZpbGwgdXAgdG8gdGhhdCBUWCB0aHJlc2hvbGQgKi8NCj4+ ICsgICAgICAgICAgICAgICAgbnJfd29yZHMgPSBtaW4oeGZlci0+ZGF0YV9sZWZ0IC8gNCwgcGlv LT50eF90aHJlc2hfc2l6ZSk7DQo+PiArICAgICAgICAgICAgICAgIC8qIHB1c2ggZGF0YSBpbnRv IHRoZSBGSUZPICovDQo+PiArICAgICAgICAgICAgICAgIHhmZXItPmRhdGFfbGVmdCAtPSBucl93 b3JkcyAqIDQ7DQo+PiArICAgICAgICAgICAgICAgIGRldl9kYmcoJmhjaS0+bWFzdGVyLmRldiwi bm93ICVkIGxlZnQgJWQiLCBucl93b3JkcyAqIDQsIHhmZXItPmRhdGFfbGVmdCk7DQo+PiArICAg ICAgICAgICAgICAgIHdoaWxlIChucl93b3Jkcy0tKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgIHBpb19yZWdfd3JpdGUoTUNIUF9YRkVSX0RBVEFfUE9SVCwgKnArKyk7DQo+PiArICAgICAg ICB9DQo+PiArDQo+PiArICAgICAgICBpZiAoeGZlci0+ZGF0YV9sZWZ0KSB7DQo+PiArICAgICAg ICAgICAgICAgIC8qDQo+PiArICAgICAgICAgICAgICAgICAqIFRoZXJlIGFyZSB0cmFpbGluZyBi eXRlcyB0byBzZW5kLiBXZSBjYW4gc2ltcGx5IGxvYWQNCj4+ICsgICAgICAgICAgICAgICAgICog dGhlbSBmcm9tIG1lbW9yeSBhcyBhIHdvcmQgd2hpY2ggd2lsbCBrZWVwIHRob3NlIGJ5dGVzDQo+ PiArICAgICAgICAgICAgICAgICAqIGluIHRoZWlyIHByb3BlciBwbGFjZSBldmVuIG9uIGEgQkUg c3lzdGVtLiBUaGlzIHdpbGwNCj4+ICsgICAgICAgICAgICAgICAgICogYWxzbyBnZXQgc29tZSBi eXRlcyBwYXN0IHRoZSBhY3R1YWwgYnVmZmVyIGJ1dCBubyBvbmUNCj4+ICsgICAgICAgICAgICAg ICAgICogc2hvdWxkIGNhcmUgYXMgdGhleSB3b24ndCBiZSBzZW50IG91dC4NCj4+ICsgICAgICAg ICAgICAgICAgICovDQo+PiArICAgICAgICAgICAgICAgIGlmICghKHBpb19yZWdfcmVhZChNQ0hQ X0lOVFJfU1RBVFVTKSAmIFNUQVRfVFhfVEhMRCkpDQo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOw0KPj4gKyAgICAgICAgICAgICAgICBkZXZfZGJnKCZoY2ktPm1hc3Rl ci5kZXYsInRyYWlsaW5nICVkIiwgeGZlci0+ZGF0YV9sZWZ0KTsNCj4+ICsgICAgICAgICAgICAg ICAgcGlvX3JlZ193cml0ZShNQ0hQX1hGRVJfREFUQV9QT1JULCAqcCk7DQo+PiArICAgICAgICAg ICAgICAgIHhmZXItPmRhdGFfbGVmdCA9IDA7DQo+PiArICAgICAgICB9DQo+PiArDQo+PiArICAg ICAgICByZXR1cm4gdHJ1ZTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGJvb2wgbWNocF9oY2lf cGlvX3Byb2Nlc3Nfcngoc3RydWN0IG1jaHBfaTNjX2hjaSAqaGNpLCBzdHJ1Y3QgbWNocF9oY2lf cGlvX2RhdGEgKnBpbykNCj4+ICt7DQo+PiArICAgICAgICB3aGlsZSAocGlvLT5jdXJyX3J4ICYm IG1jaHBfaGNpX3Bpb19kb19yeChoY2ksIHBpbykpDQo+PiArICAgICAgICAgICAgICAgIHBpby0+ Y3Vycl9yeCA9IHBpby0+Y3Vycl9yeC0+bmV4dF9kYXRhOw0KPj4gKyAgICAgICAgcmV0dXJuICFw aW8tPmN1cnJfcng7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBib29sIG1jaHBfaGNpX3Bpb19w cm9jZXNzX3R4KHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSwgc3RydWN0IG1jaHBfaGNpX3Bpb19k YXRhICpwaW8pDQo+PiArew0KPj4gKyAgICAgICAgd2hpbGUgKHBpby0+Y3Vycl90eCAmJiBtY2hw X2hjaV9waW9fZG9fdHgoaGNpLCBwaW8pKQ0KPj4gKyAgICAgICAgICAgICAgICBwaW8tPmN1cnJf dHggPSBwaW8tPmN1cnJfdHgtPm5leHRfZGF0YTsNCj4+ICsgICAgICAgIHJldHVybiAhcGlvLT5j dXJyX3R4Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBtY2hwX2hjaV9waW9fcXVldWVf ZGF0YShzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ksIHN0cnVjdCBtY2hwX2hjaV9waW9fZGF0YSAq cGlvKQ0KPj4gK3sNCj4+ICsgICAgICAgIHN0cnVjdCBtY2hwX2hjaV94ZmVyICp4ZmVyID0gcGlv LT5jdXJyX3hmZXI7DQo+PiArICAgICAgICBzdHJ1Y3QgbWNocF9oY2lfeGZlciAqcHJldl9xdWV1 ZV90YWlsOw0KPj4gKw0KPj4gKyAgICAgICAgaWYgKCF4ZmVyLT5kYXRhKSB7DQo+PiArICAgICAg ICAgICAgICAgIHhmZXItPmRhdGFfbGVuID0geGZlci0+ZGF0YV9sZWZ0ID0gMDsNCj4+ICsgICAg ICAgICAgICAgICAgcmV0dXJuOw0KPj4gKyAgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICAgaWYg KHhmZXItPnJudykgew0KPj4gKyAgICAgICAgICAgICAgICBwcmV2X3F1ZXVlX3RhaWwgPSBwaW8t PnJ4X3F1ZXVlOw0KPj4gKyAgICAgICAgICAgICAgICBwaW8tPnJ4X3F1ZXVlID0geGZlcjsNCj4+ ICsgICAgICAgICAgICAgICAgaWYgKHBpby0+Y3Vycl9yeCkgew0KPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIHByZXZfcXVldWVfdGFpbC0+bmV4dF9kYXRhID0geGZlcjsNCj4+ICsgICAgICAg ICAgICAgICAgfSBlbHNlIHsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBwaW8tPmN1cnJf cnggPSB4ZmVyOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWNocF9oY2lfcGlv X3Byb2Nlc3NfcngoaGNpLCBwaW8pKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGlvLT5lbmFibGVkX2lycXMgfD0gU1RBVF9SWF9USExEOw0KPj4gKyAgICAgICAgICAgICAg ICB9DQo+PiArICAgICAgICB9IGVsc2Ugew0KPj4gKyAgICAgICAgICAgICAgICBwcmV2X3F1ZXVl X3RhaWwgPSBwaW8tPnR4X3F1ZXVlOw0KPj4gKyAgICAgICAgICAgICAgICBwaW8tPnR4X3F1ZXVl ID0geGZlcjsNCj4+ICsgICAgICAgICAgICAgICAgaWYgKHBpby0+Y3Vycl90eCkgew0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIHByZXZfcXVldWVfdGFpbC0+bmV4dF9kYXRhID0geGZlcjsN Cj4+ICsgICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICBwaW8tPmN1cnJfdHggPSB4ZmVyOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh bWNocF9oY2lfcGlvX3Byb2Nlc3NfdHgoaGNpLCBwaW8pKQ0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGlvLT5lbmFibGVkX2lycXMgfD0gU1RBVF9UWF9USExEOw0KPj4gKyAg ICAgICAgICAgICAgICB9DQo+PiArICAgICAgICB9DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2 b2lkIG1jaHBfaGNpX3Bpb19wdXNoX3RvX25leHRfcngoc3RydWN0IG1jaHBfaTNjX2hjaSAqaGNp LCBzdHJ1Y3QgbWNocF9oY2lfeGZlciAqeGZlciwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd29yZHNfdG9fa2VlcCkNCj4+ICt7DQo+PiArICAg ICAgICB1MzIgKmZyb20gPSB4ZmVyLT5kYXRhOw0KPj4gKyAgICAgICAgdTMyIGZyb21fbGFzdDsN Cj4+ICsgICAgICAgIHVuc2lnbmVkIGludCByZWNlaXZlZCwgY291bnQ7DQo+PiArDQo+PiArICAg ICAgICByZWNlaXZlZCA9ICh4ZmVyLT5kYXRhX2xlbiAtIHhmZXItPmRhdGFfbGVmdCkgLyA0Ow0K Pj4gKyAgICAgICAgaWYgKCh4ZmVyLT5kYXRhX2xlbiAtIHhmZXItPmRhdGFfbGVmdCkgJiAzKSB7 DQo+PiArICAgICAgICAgICAgICAgIGZyb21fbGFzdCA9IHhmZXItPmRhdGFfd29yZF9iZWZvcmVf cGFydGlhbDsNCj4+ICsgICAgICAgICAgICAgICAgcmVjZWl2ZWQgKz0gMTsNCj4+ICsgICAgICAg IH0gZWxzZSB7DQo+PiArICAgICAgICAgICAgICAgIGZyb21fbGFzdCA9IGZyb21bcmVjZWl2ZWRd Ow0KPj4gKyAgICAgICAgfQ0KPj4gKyAgICAgICAgZnJvbSArPSB3b3Jkc190b19rZWVwOw0KPj4g KyAgICAgICAgY291bnQgPSByZWNlaXZlZCAtIHdvcmRzX3RvX2tlZXA7DQo+PiArDQo+PiArICAg ICAgICB3aGlsZSAoY291bnQpIHsNCj4+ICsgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJv b20sIGxlZnQsIGNodW5rLCBieXRlc190b19tb3ZlOw0KPj4gKyAgICAgICAgICAgICAgICB1MzIg bGFzdF93b3JkOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgICB4ZmVyID0geGZlci0+bmV4dF9k YXRhOw0KPj4gKyAgICAgICAgICAgICAgICBpZiAoIXhmZXIpIHsNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICBkZXZfZXJyKCZoY2ktPm1hc3Rlci5kZXYsICJwdXNoaW5nIFJYIGRhdGEgdG8g dW5leGlzdGVudCB4ZmVyXG4iKTsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47 DQo+PiArICAgICAgICAgICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgICAgICAgICAgcm9vbSA9 IERJVl9ST1VORF9VUCh4ZmVyLT5kYXRhX2xlbiwgNCk7DQo+PiArICAgICAgICAgICAgICAgIGxl ZnQgPSBESVZfUk9VTkRfVVAoeGZlci0+ZGF0YV9sZWZ0LCA0KTsNCj4+ICsgICAgICAgICAgICAg ICAgY2h1bmsgPSBtaW4oY291bnQsIHJvb20pOw0KPj4gKyAgICAgICAgICAgICAgICBpZiAoY2h1 bmsgPiBsZWZ0KSB7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgbWNocF9oY2lfcGlvX3B1 c2hfdG9fbmV4dF9yeChoY2ksIHhmZXIsIGNodW5rIC0gbGVmdCk7DQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgbGVmdCA9IGNodW5rOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHhm ZXItPmRhdGFfbGVmdCA9IGxlZnQgKiA0Ow0KPj4gKyAgICAgICAgICAgICAgICB9DQo+PiArDQo+ PiArICAgICAgICAgICAgICAgIGJ5dGVzX3RvX21vdmUgPSB4ZmVyLT5kYXRhX2xlbiAtIHhmZXIt PmRhdGFfbGVmdDsNCj4+ICsgICAgICAgICAgICAgICAgaWYgKGJ5dGVzX3RvX21vdmUgJiAzKSB7 DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlc2VydmUgd29yZCAgdG8gYmVjb21l IHBhcnRpYWwgKi8NCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKnAgPSB4ZmVyLT5k YXRhOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHhmZXItPmRhdGFfd29yZF9i ZWZvcmVfcGFydGlhbCA9IHBbYnl0ZXNfdG9fbW92ZSAvIDRdOw0KPj4gKyAgICAgICAgICAgICAg ICB9DQo+PiArICAgICAgICAgICAgICAgIG1lbW1vdmUoeGZlci0+ZGF0YSArIGNodW5rLCB4ZmVy LT5kYXRhLCBieXRlc190b19tb3ZlKTsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgLyogdHJlYXQg bGFzdCB3b3JkIHNwZWNpYWxseSBiZWNhdXNlIG9mIHBhcnRpYWwgd29yZCBpc3N1ZXMgKi8NCj4+ ICsgICAgICAgICAgICAgICAgY2h1bmsgLT0gMTsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICAg bWVtY3B5KHhmZXItPmRhdGEsIGZyb20sIGNodW5rICogNCk7DQo+PiArICAgICAgICAgICAgICAg IHhmZXItPmRhdGFfbGVmdCAtPSBjaHVuayAqIDQ7DQo+PiArICAgICAgICAgICAgICAgIGZyb20g Kz0gY2h1bms7DQo+PiArICAgICAgICAgICAgICAgIGNvdW50IC09IGNodW5rOw0KPj4gKw0KPj4g KyAgICAgICAgICAgICAgICBsYXN0X3dvcmQgPSAoY291bnQgPT0gMSkgPyBmcm9tX2xhc3QgOiAq ZnJvbSsrOw0KPj4gKyAgICAgICAgICAgICAgICBpZiAoeGZlci0+ZGF0YV9sZWZ0IDwgNCkgew0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgIC8qDQo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICogTGlrZSBpbiBoY2lfcGlvX2RvX3RyYWlsaW5nX3J4KCksIHByZXNlcnZlIG9yaWdpbmFs DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICogd29yZCB0byBiZSBzdG9yZWQgcGFydGlh bGx5IHRoZW4gc3RvcmUgYnl0ZXMgaXQNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgKiBp biBhbiBlbmRpYW4gaW5kZXBlbmRlbnQgd2F5Lg0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAqLw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHU4ICpwX2J5dGUgPSB4ZmVyLT5kYXRh Ow0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHBfYnl0ZSArPSBjaHVuayAqIDQ7 DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgeGZlci0+ZGF0YV93b3JkX2JlZm9yZV9wYXJ0 aWFsID0gbGFzdF93b3JkOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfd29yZCA9 IChfX2ZvcmNlIHUzMikgY3B1X3RvX2xlMzIobGFzdF93b3JkKTsNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICB3aGlsZSAoeGZlci0+ZGF0YV9sZWZ0LS0pIHsNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpwX2J5dGUrKyA9IGxhc3Rfd29yZDsNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfd29yZCA+Pj0gODsNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICB9DQo+PiArICAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgdTMyICpwID0geGZlci0+ZGF0YTsNCj4+ICsNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICBwW2NodW5rXSA9IGxhc3Rfd29yZDsNCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICB4ZmVyLT5kYXRhX2xlZnQgLT0gNDsNCj4+ICsgICAgICAgICAgICAgICAgfQ0KPj4g KyAgICAgICAgICAgICAgICBjb3VudC0tOw0KPj4gKyAgICAgICAgfQ0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgYm9vbCBtY2hwX2hjaV9waW9fcHJvY2Vzc19yZXNwKHN0cnVjdCBtY2hwX2kzY19o Y2kgKmhjaSwgc3RydWN0IG1jaHBfaGNpX3Bpb19kYXRhICpwaW8pDQo+PiArew0KPj4gKyAgICAg ICAgd2hpbGUgKHBpby0+Y3Vycl9yZXNwICYmDQo+PiArICAgICAgICAgICAgICAgKHBpb19yZWdf cmVhZChNQ0hQX0lOVFJfU1RBVFVTKSAmIFNUQVRfUkVTUF9SRUFEWSkpIHsNCj4+ICsgICAgICAg ICAgICAgICAgc3RydWN0IG1jaHBfaGNpX3hmZXIgKnhmZXIgPSBwaW8tPmN1cnJfcmVzcDsNCj4+ ICsgICAgICAgICAgICAgICAgdTMyIHJlc3AgPSBwaW9fcmVnX3JlYWQoTUNIUF9SRVNQT05TRV9R VUVVRV9QT1JUKTsNCj4+ICsgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRpZCA9IFJFU1Bf VElEKHJlc3ApOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgICBkZXZfZGJnKCZoY2ktPm1hc3Rl ci5kZXYsInJlc3AgPSAweCUwOHgiLCByZXNwKTsNCj4+ICsgICAgICAgICAgICAgICAgaWYgKHRp ZCAhPSB4ZmVyLT5jbWRfdGlkKSB7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2Vy cigmaGNpLT5tYXN0ZXIuZGV2LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg InJlc3BvbnNlIHRpZD0lZCB3aGVuIGV4cGVjdGluZyAlZFxuIiwNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRpZCwgeGZlci0+Y21kX3RpZCk7DQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgLyogbGV0J3MgcHJldGVuZCBpdCBpcyBhIHByb2cgZXJyb3IuLi4gYW55IG9m IHRoZW0gICovDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgbWNocF9oY2lfcGlvX2Vyciho Y2ksIHBpbywgU1RBVF9QUk9HX0VSUk9SUyk7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIGZhbHNlOw0KPj4gKyAgICAgICAgICAgICAgICB9DQo+PiArICAgICAgICAgICAgICAg IHhmZXItPnJlc3BvbnNlID0gcmVzcDsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICAgaWYgKHBp by0+Y3Vycl9yeCA9PSB4ZmVyKSB7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgLyoNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgKiBSZXNwb25zZSBhdmFpbGFiaWxpdHkgaW1wbGll cyBSWCBjb21wbGV0aW9uLg0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAqIFJldHJpZXZl IHRyYWlsaW5nIFJYIGRhdGEgaWYgYW55Lg0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAq IE5vdGUgdGhhdCBzaG9ydCByZWFkcyBhcmUgcG9zc2libGUuDQo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICovDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJl Y2VpdmVkLCBleHBlY3RlZCwgdG9fa2VlcDsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICByZWNlaXZlZCA9IHhmZXItPmRhdGFfbGVuIC0geGZlci0+ZGF0YV9sZWZ0Ow0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gUkVTUF9EQVRBX0xFTkdUSCh4ZmVyLT5y ZXNwb25zZSk7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkID4gcmVj ZWl2ZWQpIHsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jaHBfaGNpX3Bp b19kb190cmFpbGluZ19yeChoY2ksIHBpbywNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgLSByZWNlaXZlZCk7DQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWNlaXZlZCA+IGV4cGVjdGVkKSB7 DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3ZSBjb25zdW1lZCBkYXRh IG1lYW50IGZvciBuZXh0IHhmZXIgKi8NCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRvX2tlZXAgPSBESVZfUk9VTkRfVVAoZXhwZWN0ZWQsIDQpOw0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWNocF9oY2lfcGlvX3B1c2hfdG9fbmV4dF9yeChoY2ksIHhm ZXIsIHRvX2tlZXApOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCj4+ICsNCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGVuIHByb2Nlc3MgdGhlIFJYIGxpc3QgcG9pbnRl ciAqLw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtY2hwX2hjaV9waW9fcHJvY2Vz c19yeChoY2ksIHBpbykpDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW8t PmVuYWJsZWRfaXJxcyAmPSB+U1RBVF9SWF9USExEOw0KPj4gKyAgICAgICAgICAgICAgICB9DQo+ PiArDQo+PiArICAgICAgICAgICAgIC8qDQo+PiArICAgICAgICAgICAgICAgICAqIFdlJ3JlIGFi b3V0IHRvIGdpdmUgYmFjayBvd25lcnNoaXAgb2YgdGhlIHhmZXIgc3RydWN0dXJlDQo+PiArICAg ICAgICAgICAgICAgICAqIHRvIHRoZSB3YWl0aW5nIGluc3RhbmNlLiBNYWtlIHN1cmUgbm8gcmVm ZXJlbmNlIHRvIGl0DQo+PiArICAgICAgICAgICAgICAgICAqIHN0aWxsIGV4aXN0cy4NCj4+ICsg ICAgICAgICAgICAgICAgICovDQo+PiArICAgICAgICAgICAgICAgIGlmIChwaW8tPmN1cnJfcngg PT0geGZlcikgew0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9kYmcoJmhjaS0+bWFz dGVyLmRldiwic2hvcnQgUlggPyIpOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHBpby0+ Y3Vycl9yeCA9IHBpby0+Y3Vycl9yeC0+bmV4dF9kYXRhOw0KPj4gKyAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKHBpby0+Y3Vycl90eCA9PSB4ZmVyKSB7DQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgZGV2X2RiZygmaGNpLT5tYXN0ZXIuZGV2LCJzaG9ydCBUWCA/Iik7DQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgcGlvLT5jdXJyX3R4ID0gcGlvLT5jdXJyX3R4LT5uZXh0X2RhdGE7 DQo+PiArICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeGZlci0+ZGF0YV9sZWZ0KSB7DQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2RiZygmaGNpLT5tYXN0ZXIuZGV2LCJQSU8geGZl ciBjb3VudCA9ICVkIGFmdGVyIHJlc3BvbnNlIiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgeGZlci0+ZGF0YV9sZWZ0KTsNCj4+ICsgICAgICAgICAgICAgICAgfQ0KPj4gKw0KPj4g KyAgICAgICAgICAgICAgICBwaW8tPmN1cnJfcmVzcCA9IHhmZXItPm5leHRfcmVzcDsNCj4+ICsg ICAgICAgICAgICAgICAgaWYgKHhmZXItPmNvbXBsZXRpb24pDQo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgY29tcGxldGUoeGZlci0+Y29tcGxldGlvbik7DQo+PiArICAgICAgICB9DQo+PiAr ICAgICAgICByZXR1cm4gIXBpby0+Y3Vycl9yZXNwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMg dm9pZCBtY2hwX2hjaV9waW9fcXVldWVfcmVzcChzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ksIHN0 cnVjdCBtY2hwX2hjaV9waW9fZGF0YSAqcGlvKQ0KPj4gK3sNCj4+ICsgICAgICAgIHN0cnVjdCBt Y2hwX2hjaV94ZmVyICp4ZmVyID0gcGlvLT5jdXJyX3hmZXI7DQo+PiArICAgICAgICBzdHJ1Y3Qg bWNocF9oY2lfeGZlciAqcHJldl9xdWV1ZV90YWlsOw0KPj4gKw0KPj4gKyAgICAgICAgaWYgKCEo eGZlci0+Y21kX2Rlc2NbMF0gJiBDTURfMF9ST0MpKQ0KPj4gKyAgICAgICAgICAgICAgICByZXR1 cm47DQo+PiArDQo+PiArICAgICAgICBwcmV2X3F1ZXVlX3RhaWwgPSBwaW8tPnJlc3BfcXVldWU7 DQo+PiArICAgICAgICBwaW8tPnJlc3BfcXVldWUgPSB4ZmVyOw0KPj4gKyAgICAgICAgaWYgKHBp by0+Y3Vycl9yZXNwKSB7DQo+PiArICAgICAgICAgICAgICAgIHByZXZfcXVldWVfdGFpbC0+bmV4 dF9yZXNwID0geGZlcjsNCj4+ICsgICAgICAgIH0gZWxzZSB7DQo+PiArICAgICAgICAgICAgICAg IHBpby0+Y3Vycl9yZXNwID0geGZlcjsNCj4+ICsgICAgICAgICAgICAgICAgaWYgKCFtY2hwX2hj aV9waW9fcHJvY2Vzc19yZXNwKGhjaSwgcGlvKSkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICBwaW8tPmVuYWJsZWRfaXJxcyB8PSBTVEFUX1JFU1BfUkVBRFk7DQo+PiArICAgICAgICB9DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBib29sIG1jaHBfaGNpX3Bpb19wcm9jZXNzX2NtZChzdHJ1 Y3QgbWNocF9pM2NfaGNpICpoY2ksIHN0cnVjdCBtY2hwX2hjaV9waW9fZGF0YSAqcGlvKQ0KPj4g K3sNCj4+ICsgICAgICAgIHdoaWxlIChwaW8tPmN1cnJfeGZlciAmJg0KPj4gKyAgICAgICAgICAg ICAgIChwaW9fcmVnX3JlYWQoTUNIUF9JTlRSX1NUQVRVUykgJiBTVEFUX0NNRF9RVUVVRV9SRUFE WSkpIHsNCj4+ICsgICAgICAgICAgICAgICAgLyoNCj4+ICsgICAgICAgICAgICAgICAgICogQWx3 YXlzIHByb2Nlc3MgdGhlIGRhdGEgRklGTyBiZWZvcmUgc2VuZGluZyB0aGUgY29tbWFuZA0KPj4g KyAgICAgICAgICAgICAgICAgKiBzbyBuZWVkZWQgVFggZGF0YSBvciBSWCBzcGFjZSBpcyBhdmFp bGFibGUgdXBmcm9udC4NCj4+ICsgICAgICAgICAgICAgICAgICovDQo+PiArICAgICAgICAgICAg ICAgIG1jaHBfaGNpX3Bpb19xdWV1ZV9kYXRhKGhjaSwgcGlvKTsNCj4+ICsgICAgICAgICAgICAg ICAgLyoNCj4+ICsgICAgICAgICAgICAgICAgICogVGhlbiBxdWV1ZSBvdXIgcmVzcG9uc2UgcmVx dWVzdC4gVGhpcyB3aWxsIGFsc28gcHJvY2Vzcw0KPj4gKyAgICAgICAgICAgICAgICAgKiB0aGUg cmVzcG9uc2UgRklGTyBpbiBjYXNlIGl0IGdvdCBzdWRkZW5seSBmaWxsZWQgdXANCj4+ICsgICAg ICAgICAgICAgICAgICogd2l0aCByZXN1bHRzIGZyb20gcHJldmlvdXMgY29tbWFuZHMuDQo+PiAr ICAgICAgICAgICAgICAgICAqLw0KPj4gKyAgICAgICAgICAgICAgICBtY2hwX2hjaV9waW9fcXVl dWVfcmVzcChoY2ksIHBpbyk7DQo+PiArICAgICAgICAgICAgICAgIC8qDQo+PiArICAgICAgICAg ICAgICAgICAqIEZpbmFsbHkgc2VuZCB0aGUgY29tbWFuZC4NCj4+ICsgICAgICAgICAgICAgICAg ICovDQo+PiArICAgICAgICAgICAgICAgIG1jaHBfaGNpX3Bpb193cml0ZV9jbWQoaGNpLCBwaW8t PmN1cnJfeGZlcik7DQo+PiArICAgICAgICAgICAgICAgIC8qDQo+PiArICAgICAgICAgICAgICAg ICAqIEFuZCBtb3ZlIG9uLg0KPj4gKyAgICAgICAgICAgICAgICAgKi8NCj4+ICsgICAgICAgICAg ICAgICAgcGlvLT5jdXJyX3hmZXIgPSBwaW8tPmN1cnJfeGZlci0+bmV4dF94ZmVyOw0KPj4gKyAg ICAgICAgfQ0KPj4gKyAgICAgICAgcmV0dXJuICFwaW8tPmN1cnJfeGZlcjsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIGludCBtY2hwX2hjaV9waW9fcXVldWVfeGZlcihzdHJ1Y3QgbWNocF9pM2Nf aGNpICpoY2ksIHN0cnVjdCBtY2hwX2hjaV94ZmVyICp4ZmVyLCBpbnQgbikNCj4+ICt7DQo+PiAr ICAgICAgICBzdHJ1Y3QgbWNocF9oY2lfcGlvX2RhdGEgKnBpbyA9IGhjaS0+aW9fZGF0YTsNCj4+ ICsgICAgICAgIHN0cnVjdCBtY2hwX2hjaV94ZmVyICpwcmV2X3F1ZXVlX3RhaWw7DQo+PiArICAg ICAgICBpbnQgaTsNCj4+ICsNCj4+ICsgICAgICAgIGRldl9kYmcoJmhjaS0+bWFzdGVyLmRldiwi biA9ICVkIiwgbik7DQo+PiArDQo+PiArICAgICAgICAvKiBsaW5rIHhmZXIgaW5zdGFuY2VzIHRv Z2V0aGVyIGFuZCBpbml0aWFsaXplIGRhdGEgY291bnQgKi8NCj4+ICsgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBuOyBpKyspIHsNCj4+ICsgICAgICAgICAgICAgICAgeGZlcltpXS5uZXh0X3hmZXIg PSAoaSArIDEgPCBuKSA/ICZ4ZmVyW2kgKyAxXSA6IE5VTEw7DQo+PiArICAgICAgICAgICAgICAg IHhmZXJbaV0ubmV4dF9kYXRhID0gTlVMTDsNCj4+ICsgICAgICAgICAgICAgICAgeGZlcltpXS5u ZXh0X3Jlc3AgPSBOVUxMOw0KPj4gKyAgICAgICAgICAgICAgICB4ZmVyW2ldLmRhdGFfbGVmdCA9 IHhmZXJbaV0uZGF0YV9sZW47DQo+PiArICAgICAgICB9DQo+PiArDQo+PiArICAgICAgICBzcGlu X2xvY2tfaXJxKCZwaW8tPmxvY2spOw0KPj4gKyAgICAgICAgcHJldl9xdWV1ZV90YWlsID0gcGlv LT54ZmVyX3F1ZXVlOw0KPj4gKyAgICAgICAgcGlvLT54ZmVyX3F1ZXVlID0gJnhmZXJbbiAtIDFd Ow0KPj4gKyAgICAgICAgaWYgKHBpby0+Y3Vycl94ZmVyKSB7DQo+PiArICAgICAgICAgICAgICAg IHByZXZfcXVldWVfdGFpbC0+bmV4dF94ZmVyID0geGZlcjsNCj4+ICsgICAgICAgIH0gZWxzZSB7 DQo+PiArICAgICAgICAgICAgICAgIHBpby0+Y3Vycl94ZmVyID0geGZlcjsNCj4+ICsgICAgICAg ICAgICAgICAgaWYgKCFtY2hwX2hjaV9waW9fcHJvY2Vzc19jbWQoaGNpLCBwaW8pKQ0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIHBpby0+ZW5hYmxlZF9pcnFzIHw9IFNUQVRfQ01EX1FVRVVF X1JFQURZOw0KPj4gKyAgICAgICAgICAgICAgICBwaW9fcmVnX3dyaXRlKE1DSFBfSU5UUl9TSUdO QUxfRU5BQkxFLCBwaW8tPmVuYWJsZWRfaXJxcyk7DQo+PiArICAgICAgICAgICAgICAgIGRldl9k YmcoJmhjaS0+bWFzdGVyLmRldiwic3RhdHVzID0gJSN4LyUjeCIsDQo+PiArICAgICAgICAgICAg ICAgICAgICBwaW9fcmVnX3JlYWQoTUNIUF9JTlRSX1NUQVRVUyksIHBpb19yZWdfcmVhZChNQ0hQ X0lOVFJfU0lHTkFMX0VOQUJMRSkpOw0KPj4gKyAgICAgICAgfQ0KPj4gKyAgICAgICAgc3Bpbl91 bmxvY2tfaXJxKCZwaW8tPmxvY2spOw0KPj4gKyAgICAgICAgcmV0dXJuIDA7DQo+PiArfQ0KPj4g Kw0KPj4gK3N0YXRpYyBib29sIG1jaHBfaGNpX3Bpb19kZXF1ZXVlX3hmZXJfY29tbW9uKHN0cnVj dCBtY2hwX2kzY19oY2kgKmhjaSwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IG1jaHBfaGNpX3Bpb19kYXRhICpwaW8sDQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtY2hwX2hjaV94ZmVyICp4ZmVyLCBp bnQgbikNCj4+ICt7DQo+PiArICAgICAgICBzdHJ1Y3QgbWNocF9oY2lfeGZlciAqcCwgKipwX3By ZXZfbmV4dDsNCj4+ICsgICAgICAgIGludCBpOw0KPj4gKw0KPj4gKyAgICAgICAgLyoNCj4+ICsg ICAgICAgICAqIFRvIHNhZmVseSBkZXF1ZXVlIGEgdHJhbnNmZXIgcmVxdWVzdCwgaXQgbXVzdCBi ZSBlaXRoZXIgZW50aXJlbHkNCj4+ICsgICAgICAgICAqIHByb2Nlc3NlZCwgb3Igbm90IHlldCBw cm9jZXNzZWQgYXQgYWxsLiBJZiBvdXIgcmVxdWVzdCB0YWlsIGlzDQo+PiArICAgICAgICAgKiBy ZWFjaGFibGUgZnJvbSBlaXRoZXIgdGhlIGRhdGEgb3IgcmVzcCBsaXN0IHRoYXQgbWVhbnMgdGhl IGNvbW1hbmQNCj4+ICsgICAgICAgICAqIHdhcyBzdWJtaXR0ZWQgYW5kIG5vdCB5ZXQgY29tcGxl dGVkLg0KPj4gKyAgICAgICAgICovDQo+PiArICAgICAgICBmb3IgKHAgPSBwaW8tPmN1cnJfcmVz cDsgcDsgcCA9IHAtPm5leHRfcmVzcCkNCj4+ICsgICAgICAgICAgICAgICAgZm9yIChpID0gMDsg aSA8IG47IGkrKykNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSAmeGZlcltp XSkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcGlvX3NjcmV3ZWQ7 DQo+PiArICAgICAgICBmb3IgKHAgPSBwaW8tPmN1cnJfcng7IHA7IHAgPSBwLT5uZXh0X2RhdGEp DQo+PiArICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspDQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gJnhmZXJbaV0pDQo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnb3RvIHBpb19zY3Jld2VkOw0KPj4gKyAgICAgICAgZm9yIChwID0g cGlvLT5jdXJyX3R4OyBwOyBwID0gcC0+bmV4dF9kYXRhKQ0KPj4gKyAgICAgICAgICAgICAgICBm b3IgKGkgPSAwOyBpIDwgbjsgaSsrKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw ID09ICZ4ZmVyW2ldKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBw aW9fc2NyZXdlZDsNCj4+ICsNCj4+ICsgICAgICAgIC8qDQo+PiArICAgICAgICAgKiBUaGUgY29t bWFuZCB3YXMgY29tcGxldGVkLCBvciB3YXNuJ3QgeWV0IHN1Ym1pdHRlZC4NCj4+ICsgICAgICAg ICAqIFVubGluayBpdCBmcm9tIHRoZSBxdWUgaWYgdGhlIGxhdGVyLg0KPj4gKyAgICAgICAgICov DQo+PiArICAgICAgICBwX3ByZXZfbmV4dCA9ICZwaW8tPmN1cnJfeGZlcjsNCj4+ICsgICAgICAg IGZvciAocCA9IHBpby0+Y3Vycl94ZmVyOyBwOyBwID0gcC0+bmV4dF94ZmVyKSB7DQo+PiArICAg ICAgICAgICAgICAgIGlmIChwID09ICZ4ZmVyWzBdKSB7DQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgKnBfcHJldl9uZXh0ID0geGZlcltuIC0gMV0ubmV4dF94ZmVyOw0KPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICAgICAgICAgICB9DQo+PiArICAgICAg ICAgICAgICAgIHBfcHJldl9uZXh0ID0gJnAtPm5leHRfeGZlcjsNCj4+ICsgICAgICAgIH0NCj4+ ICsNCj4+ICsgICAgICAgIC8qIHJldHVybiB0cnVlIGlmIHdlIGFjdHVhbGx5IHVucXVldWVkIHNv bWV0aGluZyAqLw0KPj4gKyAgICAgICAgcmV0dXJuICEhcDsNCj4+ICsNCj4+ICtwaW9fc2NyZXdl ZDoNCj4+ICsgICAgICAgIC8qDQo+PiArICAgICAgICAgKiBMaWZlIGlzIHRvdWdoLiBXZSBtdXN0 IGludmFsaWRhdGUgdGhlIGhhcmR3YXJlIHN0YXRlIGFuZA0KPj4gKyAgICAgICAgICogZGlzY2Fy ZCBldmVyeXRoaW5nIHRoYXQgaXMgc3RpbGwgcXVldWVkLg0KPj4gKyAgICAgICAgICovDQo+PiAr ICAgICAgICBmb3IgKHAgPSBwaW8tPmN1cnJfcmVzcDsgcDsgcCA9IHAtPm5leHRfcmVzcCkgew0K Pj4gKyAgICAgICAgICAgICAgICBwLT5yZXNwb25zZSA9IEZJRUxEX1BSRVAoUkVTUF9FUlJfRklF TEQsIFJFU1BfRVJSX0hDX1RFUk1JTkFURUQpOw0KPj4gKyAgICAgICAgICAgICAgICBpZiAocC0+ Y29tcGxldGlvbikNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZShwLT5jb21w bGV0aW9uKTsNCj4+ICsgICAgICAgIH0NCj4+ICsgICAgICAgIGZvciAocCA9IHBpby0+Y3Vycl94 ZmVyOyBwOyBwID0gcC0+bmV4dF94ZmVyKSB7DQo+PiArICAgICAgICAgICAgICAgIHAtPnJlc3Bv bnNlID0gRklFTERfUFJFUChSRVNQX0VSUl9GSUVMRCwgUkVTUF9FUlJfSENfVEVSTUlOQVRFRCk7 DQo+PiArICAgICAgICAgICAgICAgIGlmIChwLT5jb21wbGV0aW9uKQ0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIGNvbXBsZXRlKHAtPmNvbXBsZXRpb24pOw0KPj4gKyAgICAgICAgfQ0KPj4g KyAgICAgICAgcGlvLT5jdXJyX3hmZXIgPSBwaW8tPmN1cnJfcnggPSBwaW8tPmN1cnJfdHggPSBw aW8tPmN1cnJfcmVzcCA9IE5VTEw7DQo+PiArDQo+PiArICAgICAgICByZXR1cm4gdHJ1ZTsNCj4+ ICt9DQo+PiArDQo+PiArc3RhdGljIGJvb2wgbWNocF9oY2lfcGlvX2RlcXVldWVfeGZlcihzdHJ1 Y3QgbWNocF9pM2NfaGNpICpoY2ksIHN0cnVjdCBtY2hwX2hjaV94ZmVyICp4ZmVyLCBpbnQgbikN Cj4+ICt7DQo+PiArICAgICAgICBzdHJ1Y3QgbWNocF9oY2lfcGlvX2RhdGEgKnBpbyA9IGhjaS0+ aW9fZGF0YTsNCj4+ICsgICAgICAgIGludCByZXQ7DQo+PiArDQo+PiArICAgICAgICBzcGluX2xv Y2tfaXJxKCZwaW8tPmxvY2spOw0KPj4gKyAgICAgICAgZGV2X2RiZygmaGNpLT5tYXN0ZXIuZGV2 LCJuPSVkIHN0YXR1cz0lI3gvJSN4IiwgbiwNCj4+ICsgICAgICAgICAgICBwaW9fcmVnX3JlYWQo TUNIUF9JTlRSX1NUQVRVUyksIHBpb19yZWdfcmVhZChNQ0hQX0lOVFJfU0lHTkFMX0VOQUJMRSkp Ow0KPj4gKyAgICAgICAgZGV2X2RiZygmaGNpLT5tYXN0ZXIuZGV2LCJtYWluX3N0YXR1cyA9ICUj eC8lI3giLA0KPj4gKyAgICAgICAgICAgIHJlYWRsKGhjaS0+YmFzZV9yZWdzICsgMHgyMCksIHJl YWRsKGhjaS0+YmFzZV9yZWdzICsgMHgyOCkpOw0KPj4gKw0KPj4gKyAgICAgICAgcmV0ID0gbWNo cF9oY2lfcGlvX2RlcXVldWVfeGZlcl9jb21tb24oaGNpLCBwaW8sIHhmZXIsIG4pOw0KPj4gKyAg ICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwaW8tPmxvY2spOw0KPj4gKyAgICAgICAgcmV0dXJuIHJl dDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgbWNocF9oY2lfcGlvX2VycihzdHJ1Y3Qg bWNocF9pM2NfaGNpICpoY2ksIHN0cnVjdCBtY2hwX2hjaV9waW9fZGF0YSAqcGlvLA0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIHUzMiBzdGF0dXMpDQo+PiArew0KPj4gKyAgICAgICAgLyog VE9ETzogdGhpcyBvdWdodCB0byBiZSBtb3JlIHNvcGhpc3RpY2F0ZWQgZXZlbnR1YWxseSAqLw0K Pj4gKw0KPj4gKyAgICAgICAgaWYgKHBpb19yZWdfcmVhZChNQ0hQX0lOVFJfU1RBVFVTKSAmIFNU QVRfUkVTUF9SRUFEWSkgew0KPj4gKyAgICAgICAgICAgICAgICAvKiB0aGlzIG1heSBoYXBwZW4g d2hlbiBhbiBlcnJvciBpcyBzaWduYWxlZCB3aXRoIFJPQyB1bnNldCAqLw0KPj4gKyAgICAgICAg ICAgICAgICB1MzIgcmVzcCA9IHBpb19yZWdfcmVhZChNQ0hQX1JFU1BPTlNFX1FVRVVFX1BPUlQp Ow0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZoY2ktPm1hc3Rlci5kZXYsDQo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgIm9ycGhhbiByZXNwb25zZSAoJSN4KSBvbiBlcnJv clxuIiwgcmVzcCk7DQo+PiArICAgICAgICB9DQo+PiArDQo+PiArICAgICAgICAvKiBkdW1wIHN0 YXRlcyBvbiBwcm9ncmFtbWluZyBlcnJvcnMgKi8NCj4+ICsgICAgICAgIGlmIChzdGF0dXMgJiBT VEFUX1BST0dfRVJST1JTKSB7DQo+PiArICAgICAgICAgICAgICAgIHUzMiBxdWV1ZSA9IHBpb19y ZWdfcmVhZChNQ0hQX1FVRVVFX0NVUl9TVEFUVVMpOw0KPj4gKyAgICAgICAgICAgICAgICB1MzIg ZGF0YSA9IHBpb19yZWdfcmVhZChNQ0hQX0RBVEFfQlVGRkVSX0NVUl9TVEFUVVMpOw0KPj4gKw0K Pj4gKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZoY2ktPm1hc3Rlci5kZXYsDQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgInByb2cgZXJyb3IgJSNseCAoQy9SL0kgPSAlbGQvJWxkLyVsZCwg VFgvUlggPSAlbGQvJWxkKVxuIiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMg JiBTVEFUX1BST0dfRVJST1JTLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEX0dF VChNQ0hQX0NVUl9DTURfUV9FTVBUWV9MRVZFTCwgcXVldWUpLA0KPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIEZJRUxEX0dFVChNQ0hQX0NVUl9SRVNQX1FfTEVWRUwsIHF1ZXVlKSwNCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICBGSUVMRF9HRVQoTUNIUF9DVVJfSUJJX1FfTEVWRUwsIHF1 ZXVlKSwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRF9HRVQoTUNIUF9DVVJfVFhf QlVGX0xWTCwgZGF0YSksDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgRklFTERfR0VUKE1D SFBfQ1VSX1JYX0JVRl9MVkwsIGRhdGEpKTsNCj4+ICsgICAgICAgIH0NCj4+ICsNCj4+ICsgICAg ICAgIC8qIGp1c3QgYnVzdCBvdXQgZXZlcnl0aGluZyB3aXRoIHBlbmRpbmcgcmVzcG9uc2VzIGZv ciBub3cgKi8NCj4+ICsgICAgICAgIG1jaHBfaGNpX3Bpb19kZXF1ZXVlX3hmZXJfY29tbW9uKGhj aSwgcGlvLCBwaW8tPmN1cnJfcmVzcCwgMSk7DQo+PiArICAgICAgICAvKiAuLi4gYW5kIGhhbGYt d2F5IFRYIHRyYW5zZmVycyBpZiBhbnkgKi8NCj4+ICsgICAgICAgIGlmIChwaW8tPmN1cnJfdHgg JiYgcGlvLT5jdXJyX3R4LT5kYXRhX2xlZnQgIT0gcGlvLT5jdXJyX3R4LT5kYXRhX2xlbikNCj4+ ICsgICAgICAgICAgICAgICAgbWNocF9oY2lfcGlvX2RlcXVldWVfeGZlcl9jb21tb24oaGNpLCBw aW8sIHBpby0+Y3Vycl90eCwgMSk7DQo+PiArICAgICAgICAvKiB0aGVuIHJlc2V0IHRoZSBoYXJk d2FyZSAqLw0KPj4gKyAgICAgICAgbWNocF9taXBpX2kzY19oY2lfcGlvX3Jlc2V0KGhjaSk7DQo+ PiArICAgICAgICBtY2hwX21pcGlfaTNjX2hjaV9yZXN1bWUoaGNpKTsNCj4+ICsNCj4+ICsgICAg ICAgIGRldl9kYmcoJmhjaS0+bWFzdGVyLmRldiwic3RhdHVzPSUjeC8lI3giLA0KPj4gKyAgICAg ICAgICAgIHBpb19yZWdfcmVhZChNQ0hQX0lOVFJfU1RBVFVTKSwgcGlvX3JlZ19yZWFkKE1DSFBf SU5UUl9TSUdOQUxfRU5BQkxFKSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIG1jaHBf aGNpX3Bpb19zZXRfaWJpX3RocmVzaChzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ksDQo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNocF9oY2lfcGlvX2RhdGEg KnBpbywNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCB0aHJlc2hfdmFsKQ0KPj4gK3sNCj4+ICsgICAgICAgIHUzMiByZWd2YWwgPSBwaW8tPnJlZ19x dWV1ZV90aHJlc2g7DQo+PiArDQo+PiArICAgICAgICByZWd2YWwgJj0gfk1DSFBfUVVFVUVfSUJJ X1NUQVRVU19USExEOw0KPj4gKyAgICAgICAgcmVndmFsIHw9IEZJRUxEX1BSRVAoTUNIUF9RVUVV RV9JQklfU1RBVFVTX1RITEQsIHRocmVzaF92YWwpOw0KPj4gKyAgICAgICAgLyogd3JpdGUgdGhl IHRocmVzaG9sZCByZWcgb25seSBpZiBpdCBjaGFuZ2VzICovDQo+PiArICAgICAgICBpZiAocmVn dmFsICE9IHBpby0+cmVnX3F1ZXVlX3RocmVzaCkgew0KPj4gKyAgICAgICAgICAgICAgICBwaW9f cmVnX3dyaXRlKE1DSFBfUVVFVUVfVEhMRF9DVFJMLCByZWd2YWwpOw0KPj4gKyAgICAgICAgICAg ICAgICBwaW8tPnJlZ19xdWV1ZV90aHJlc2ggPSByZWd2YWw7DQo+PiArICAgICAgICAgICAgICAg IGRldl9kYmcoJmhjaS0+bWFzdGVyLmRldiwiJWQiLCB0aHJlc2hfdmFsKTsNCj4+ICsgICAgICAg IH0NCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGJvb2wgbWNocF9oY2lfcGlvX2dldF9pYmlfc2Vn bWVudChzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ksDQo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IG1jaHBfaGNpX3Bpb19kYXRhICpwaW8pDQo+PiArew0KPj4g KyAgICAgICAgc3RydWN0IGhjaV9waW9faWJpX2RhdGEgKmliaSA9ICZwaW8tPmliaTsNCj4+ICsg ICAgICAgIHVuc2lnbmVkIGludCBucl93b3JkcywgdGhyZXNoX3ZhbDsNCj4+ICsgICAgICAgIHUz MiAqcDsNCj4+ICsNCj4+ICsgICAgICAgIHAgPSBpYmktPmRhdGFfcHRyOw0KPj4gKyAgICAgICAg cCArPSAoaWJpLT5zZWdfbGVuIC0gaWJpLT5zZWdfY250KSAvIDQ7DQo+PiArDQo+PiArICAgICAg ICB3aGlsZSAoKG5yX3dvcmRzID0gaWJpLT5zZWdfY250LzQpKSB7DQo+PiArICAgICAgICAgICAg ICAgIC8qIGRldGVybWluZSBvdXIgSUJJIHF1ZXVlIHRocmVzaG9sZCB2YWx1ZSAqLw0KPj4gKyAg ICAgICAgICAgICAgICB0aHJlc2hfdmFsID0gbWluKG5yX3dvcmRzLCBwaW8tPm1heF9pYmlfdGhy ZXNoKTsNCj4+ICsgICAgICAgICAgICAgICAgbWNocF9oY2lfcGlvX3NldF9pYmlfdGhyZXNoKGhj aSwgcGlvLCB0aHJlc2hfdmFsKTsNCj4+ICsgICAgICAgICAgICAgICAgLyogYmFpbCBvdXQgaWYg d2UgZG9uJ3QgaGF2ZSB0aGF0IGFtb3VudCBvZiBkYXRhIHJlYWR5ICovDQo+PiArICAgICAgICAg ICAgICAgIGlmICghKHBpb19yZWdfcmVhZChNQ0hQX0lOVFJfU1RBVFVTKSAmIFNUQVRfSUJJX1NU QVRVU19USExEKSkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQo+ PiArICAgICAgICAgICAgICAgIC8qIGV4dHJhY3QgdGhlIGRhdGEgZnJvbSB0aGUgSUJJIHBvcnQg Ki8NCj4+ICsgICAgICAgICAgICAgICAgbnJfd29yZHMgPSB0aHJlc2hfdmFsOw0KPj4gKyAgICAg ICAgICAgICAgICBpYmktPnNlZ19jbnQgLT0gbnJfd29yZHMgKiA0Ow0KPj4gKyAgICAgICAgICAg ICAgICBkZXZfZGJnKCZoY2ktPm1hc3Rlci5kZXYsIm5vdyAlZCBsZWZ0ICVkIiwgbnJfd29yZHMg KiA0LCBpYmktPnNlZ19jbnQpOw0KPj4gKyAgICAgICAgICAgICAgICB3aGlsZSAobnJfd29yZHMt LSkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gcGlvX3JlZ19yZWFkKE1DSFBf SUJJX1BPUlQpOw0KPj4gKyAgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgaWYgKGliaS0+c2VnX2Nu dCkgew0KPj4gKyAgICAgICAgICAgICAgICAvKg0KPj4gKyAgICAgICAgICAgICAgICAgKiBUaGVy ZSBhcmUgdHJhaWxpbmcgYnl0ZXMgaW4gdGhlIGxhc3Qgd29yZC4NCj4+ICsgICAgICAgICAgICAg ICAgICogRmV0Y2ggaXQgYW5kIGV4dHJhY3QgYnl0ZXMgaW4gYW4gZW5kaWFuIGluZGVwZW5kZW50 IHdheS4NCj4+ICsgICAgICAgICAgICAgICAgICogVW5saWtlIHRoZSBUWCBjYXNlLCB3ZSBtdXN0 IG5vdCB3cml0ZSBwYXN0IHRoZSBlbmQgb2YNCj4+ICsgICAgICAgICAgICAgICAgICogdGhlIGRl c3RpbmF0aW9uIGJ1ZmZlci4NCj4+ICsgICAgICAgICAgICAgICAgICovDQo+PiArICAgICAgICAg ICAgICAgIHUzMiBkYXRhOw0KPj4gKyAgICAgICAgICAgICAgICB1OCAqcF9ieXRlID0gKHU4ICop cDsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICAgbWNocF9oY2lfcGlvX3NldF9pYmlfdGhyZXNo KGhjaSwgcGlvLCAxKTsNCj4+ICsgICAgICAgICAgICAgICAgaWYgKCEocGlvX3JlZ19yZWFkKE1D SFBfSU5UUl9TVEFUVVMpICYgU1RBVF9JQklfU1RBVFVTX1RITEQpKQ0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCj4+ICsgICAgICAgICAgICAgICAgZGV2X2RiZygm aGNpLT5tYXN0ZXIuZGV2LCJ0cmFpbGluZyAlZCIsIGliaS0+c2VnX2NudCk7DQo+PiArICAgICAg ICAgICAgICAgIGRhdGEgPSBwaW9fcmVnX3JlYWQoTUNIUF9JQklfUE9SVCk7DQo+PiArICAgICAg ICAgICAgICAgIGRhdGEgPSAoX19mb3JjZSB1MzIpIGNwdV90b19sZTMyKGRhdGEpOw0KPj4gKyAg ICAgICAgICAgICAgICB3aGlsZSAoaWJpLT5zZWdfY250LS0pIHsNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAqcF9ieXRlKysgPSBkYXRhOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg IGRhdGEgPj49IDg7DQo+PiArICAgICAgICAgICAgICAgIH0NCj4+ICsgICAgICAgIH0NCj4+ICsN Cj4+ICsgICAgICAgIHJldHVybiB0cnVlOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgYm9vbCBt Y2hwX2hjaV9waW9fcHJlcF9uZXdfaWJpKHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSwgc3RydWN0 IG1jaHBfaGNpX3Bpb19kYXRhICpwaW8pDQo+PiArew0KPj4gKyAgICAgICAgc3RydWN0IGhjaV9w aW9faWJpX2RhdGEgKmliaSA9ICZwaW8tPmliaTsNCj4+ICsgICAgICAgIHN0cnVjdCBpM2NfZGV2 X2Rlc2MgKmRldjsNCj4+ICsgICAgICAgIHN0cnVjdCBtY2hwX2kzY19oY2lfZGV2X2RhdGEgKmRl dl9kYXRhOw0KPj4gKyAgICAgICAgc3RydWN0IGhjaV9waW9fZGV2X2liaV9kYXRhICpkZXZfaWJp Ow0KPj4gKyAgICAgICAgdTMyIGliaV9zdGF0dXM7DQo+PiArDQo+PiArICAgICAgICAvKg0KPj4g KyAgICAgICAgICogV2UgaGF2ZSBhIG5ldyBJQkkuIFRyeSB0byBzZXQgdXAgaXRzIHBheWxvYWQg cmV0cmlldmFsLg0KPj4gKyAgICAgICAgICogV2hlbiByZXR1cm5pbmcgdHJ1ZSwgdGhlIElCSSBk YXRhIGhhcyB0byBiZSBjb25zdW1lZCB3aGV0aGVyDQo+PiArICAgICAgICAgKiBvciBub3Qgd2Ug YXJlIHNldCB1cCB0byBjYXB0dXJlIGl0LiBJZiB3ZSByZXR1cm4gdHJ1ZSB3aXRoDQo+PiArICAg ICAgICAgKiBpYmktPnNsb3QgPT0gTlVMTCB0aGF0IG1lYW5zIHRoZSBkYXRhIHBheWxvYWQgaGFz IHRvIGJlDQo+PiArICAgICAgICAgKiBkcmFpbmVkIG91dCBvZiB0aGUgSUJJIHBvcnQgYW5kIGRy b3BwZWQuDQo+PiArICAgICAgICAgKi8NCj4+ICsNCj4+ICsgICAgIGliaV9zdGF0dXMgPSBwaW9f cmVnX3JlYWQoTUNIUF9JQklfUE9SVCk7DQo+PiArICAgICAgICBkZXZfZGJnKCZoY2ktPm1hc3Rl ci5kZXYsInN0YXR1cyA9ICUjeCIsIGliaV9zdGF0dXMpOw0KPj4gKyAgICAgICAgaWJpLT5hZGRy ID0gRklFTERfR0VUKE1DSFBfSUJJX1RBUkdFVF9BRERSLCBpYmlfc3RhdHVzKTsNCj4+ICsgICAg ICAgIGlmIChpYmlfc3RhdHVzICYgTUNIUF9JQklfRVJST1IpIHsNCj4+ICsgICAgICAgICAgICAg ICAgZGV2X2VycigmaGNpLT5tYXN0ZXIuZGV2LCAiSUJJIGVycm9yIGZyb20gJSN4XG4iLCBpYmkt PmFkZHIpOw0KPj4gKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQo+PiArICAgICAgICB9 DQo+PiArDQo+PiArICAgICAgICBpYmktPmxhc3Rfc2VnID0gaWJpX3N0YXR1cyAmIE1DSFBfSUJJ X0xBU1RfU1RBVFVTOw0KPj4gKyAgICAgICAgaWJpLT5zZWdfbGVuID0gRklFTERfR0VUKE1DSFBf SUJJX0RBVEFfTEVOR1RILCBpYmlfc3RhdHVzKTsNCj4+ICsgICAgICAgIGliaS0+c2VnX2NudCA9 IGliaS0+c2VnX2xlbjsNCj4+ICsNCj4+ICsgICAgICAgIGRldiA9IG1jaHBfaTNjX2hjaV9hZGRy X3RvX2RldihoY2ksIGliaS0+YWRkcik7DQo+PiArICAgICAgICBpZiAoIWRldikgew0KPj4gKyAg ICAgICAgICAgICAgICBkZXZfZXJyKCZoY2ktPm1hc3Rlci5kZXYsDQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgIklCSSBmb3IgdW5rbm93biBkZXZpY2UgJSN4XG4iLCBpYmktPmFkZHIpOw0K Pj4gKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCj4+ICsgICAgICAgIH0NCj4+ICsNCj4+ ICsgICAgICAgIGRldl9kYXRhID0gaTNjX2Rldl9nZXRfbWFzdGVyX2RhdGEoZGV2KTsNCj4+ICsg ICAgICAgIGRldl9pYmkgPSBkZXZfZGF0YS0+aWJpX2RhdGE7DQo+PiArICAgICAgICBpYmktPm1h eF9sZW4gPSBkZXZfaWJpLT5tYXhfbGVuOw0KPj4gKw0KPj4gKyAgICAgICAgaWYgKGliaS0+c2Vn X2xlbiA+IGliaS0+bWF4X2xlbikgew0KPj4gKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZoY2kt Pm1hc3Rlci5kZXYsICJJQkkgcGF5bG9hZCB0b28gYmlnICglZCA+ICVkKVxuIiwNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICBpYmktPnNlZ19sZW4sIGliaS0+bWF4X2xlbik7DQo+PiArICAg ICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KPj4gKyAgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAg ICAgaWJpLT5zbG90ID0gaTNjX2dlbmVyaWNfaWJpX2dldF9mcmVlX3Nsb3QoZGV2X2liaS0+cG9v bCk7DQo+PiArICAgICAgICBpZiAoIWliaS0+c2xvdCkgew0KPj4gKyAgICAgICAgICAgICAgICBk ZXZfZXJyKCZoY2ktPm1hc3Rlci5kZXYsICJubyBmcmVlIHNsb3QgZm9yIElCSVxuIik7DQo+PiAr ICAgICAgICB9IGVsc2Ugew0KPj4gKyAgICAgICAgICAgICAgICBpYmktPnNsb3QtPmxlbiA9IDA7 DQo+PiArICAgICAgICAgICAgICAgIGliaS0+ZGF0YV9wdHIgPSBpYmktPnNsb3QtPmRhdGE7DQo+ PiArICAgICAgICB9DQo+PiArICAgICAgICByZXR1cm4gdHJ1ZTsNCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIHZvaWQgbWNocF9oY2lfcGlvX2ZyZWVfaWJpX3Nsb3Qoc3RydWN0IG1jaHBfaTNjX2hj aSAqaGNpLCBzdHJ1Y3QgbWNocF9oY2lfcGlvX2RhdGEgKnBpbykNCj4+ICt7DQo+PiArICAgICAg ICBzdHJ1Y3QgaGNpX3Bpb19pYmlfZGF0YSAqaWJpID0gJnBpby0+aWJpOw0KPj4gKyAgICAgICAg c3RydWN0IGhjaV9waW9fZGV2X2liaV9kYXRhICpkZXZfaWJpOw0KPj4gKw0KPj4gKyAgICAgICAg aWYgKGliaS0+c2xvdCkgew0KPj4gKyAgICAgICAgICAgICAgICBkZXZfaWJpID0gaWJpLT5zbG90 LT5kZXYtPmNvbW1vbi5tYXN0ZXJfcHJpdjsNCj4+ICsgICAgICAgICAgICAgICAgaTNjX2dlbmVy aWNfaWJpX3JlY3ljbGVfc2xvdChkZXZfaWJpLT5wb29sLCBpYmktPnNsb3QpOw0KPj4gKyAgICAg ICAgICAgICAgICBpYmktPnNsb3QgPSBOVUxMOw0KPj4gKyAgICAgICAgfQ0KPj4gK30NCj4+ICsN Cj4+ICtzdGF0aWMgYm9vbCBtY2hwX2hjaV9waW9fcHJvY2Vzc19pYmkoc3RydWN0IG1jaHBfaTNj X2hjaSAqaGNpLCBzdHJ1Y3QgbWNocF9oY2lfcGlvX2RhdGEgKnBpbykNCj4+ICt7DQo+PiArICAg ICAgICBzdHJ1Y3QgaGNpX3Bpb19pYmlfZGF0YSAqaWJpID0gJnBpby0+aWJpOw0KPj4gKw0KPj4g KyAgICAgICAgaWYgKCFpYmktPnNsb3QgJiYgIWliaS0+c2VnX2NudCAmJiBpYmktPmxhc3Rfc2Vn KQ0KPj4gKyAgICAgICAgICAgICAgICBpZiAoIW1jaHBfaGNpX3Bpb19wcmVwX25ld19pYmkoaGNp LCBwaW8pKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCj4+ICsN Cj4+ICsgICAgICAgIGZvciAoOzspIHsNCj4+ICsgICAgICAgICAgICAgICAgdTMyIGliaV9zdGF0 dXM7DQo+PiArICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpYmlfYWRkcjsNCj4+ICsNCj4+ ICsgICAgICAgICAgICAgICAgaWYgKGliaS0+c2xvdCkgew0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmICghbWNocF9oY2lfcGlvX2dldF9pYmlfc2VnbWVudChoY2ksIHBpbykpDQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgaWJpLT5zbG90LT5sZW4gKz0gaWJpLT5zZWdfbGVuOw0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIGliaS0+ZGF0YV9wdHIgKz0gaWJpLT5zZWdfbGVuOw0KPj4g KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpYmktPmxhc3Rfc2VnKSB7DQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3YXMgdGhlIGxhc3Qgc2VnbWVudDogc3VibWl0 IGl0IGFuZCBsZWF2ZSAqLw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTNj X21hc3Rlcl9xdWV1ZV9pYmkoaWJpLT5zbG90LT5kZXYsIGliaS0+c2xvdCk7DQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpYmktPnNsb3QgPSBOVUxMOw0KPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWNocF9oY2lfcGlvX3NldF9pYmlfdGhyZXNoKGhjaSwg cGlvLCAxKTsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl Ow0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCj4+ICsgICAgICAgICAgICAgICAgfSBl bHNlIGlmIChpYmktPnNlZ19jbnQpIHsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAvKg0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAqIE5vIHNsb3QgYnV0IGEgbm9uLXplcm8gY291 bnQuIFRoaXMgaXMgdGhlIHJlc3VsdA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAqIG9m IHNvbWUgZXJyb3IgYW5kIHRoZSBwYXlsb2FkIG11c3QgYmUgZHJhaW5lZC4NCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgKiBUaGlzIG5vcm1hbGx5IGRvZXMgbm90IGhhcHBlbiB0aGVyZWZv cmUgbm8gbmVlZA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAqIHRvIGJlIGV4dHJhIG9w dGltaXplZCBoZXJlLg0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KPj4gKyAgICAg ICAgICAgICAgICAgICAgIG1jaHBfaGNpX3Bpb19zZXRfaWJpX3RocmVzaChoY2ksIHBpbywgMSk7 DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgZG8gew0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCEocGlvX3JlZ19yZWFkKE1DSFBfSU5UUl9TVEFUVVMpICYgU1RB VF9JQklfU1RBVFVTX1RITEQpKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gZmFsc2U7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwaW9fcmVnX3JlYWQoTUNIUF9JQklfUE9SVCk7DQo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgfSB3aGlsZSAoLS1pYmktPnNlZ19jbnQpOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg IGlmIChpYmktPmxhc3Rfc2VnKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHRydWU7DQo+PiArICAgICAgICAgICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgICAg ICAgICAgLyogdHJ5IHRvIG1vdmUgdG8gdGhlIG5leHQgc2VnbWVudCByaWdodCBhd2F5ICovDQo+ PiArICAgICAgICAgICAgICAgIG1jaHBfaGNpX3Bpb19zZXRfaWJpX3RocmVzaChoY2ksIHBpbywg MSk7DQo+PiArICAgICAgICAgICAgICAgIGlmICghKHBpb19yZWdfcmVhZChNQ0hQX0lOVFJfU1RB VFVTKSAmIFNUQVRfSUJJX1NUQVRVU19USExEKSkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gZmFsc2U7DQo+PiArICAgICAgICAgICAgICAgIGliaV9zdGF0dXMgPSBwaW9fcmVn X3JlYWQoTUNIUF9JQklfUE9SVCk7DQo+PiArICAgICAgICAgICAgICAgIGliaV9hZGRyID0gRklF TERfR0VUKE1DSFBfSUJJX1RBUkdFVF9BRERSLCBpYmlfc3RhdHVzKTsNCj4+ICsgICAgICAgICAg ICAgICAgaWYgKGliaS0+YWRkciAhPSBpYmlfYWRkcikgew0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHRhcmdldCBhZGRyZXNzIGNoYW5nZWQgYmVmb3JlIGxhc3Qgc2VnbWVudCAqLw0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmhjaS0+bWFzdGVyLmRldiwNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cCBJQkkgYWRkcmVzcyBjaGFu Z2VkIGZyb20gJWQgdG8gJWRcbiIsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpYmktPmFkZHIsIGliaV9hZGRyKTsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBtY2hw X2hjaV9waW9fZnJlZV9pYmlfc2xvdChoY2ksIHBpbyk7DQo+PiArICAgICAgICAgICAgICAgIH0N Cj4+ICsgICAgICAgICAgICAgICAgaWJpLT5sYXN0X3NlZyA9IGliaV9zdGF0dXMgJiBNQ0hQX0lC SV9MQVNUX1NUQVRVUzsNCj4+ICsgICAgICAgICAgICAgICAgaWJpLT5zZWdfbGVuID0gRklFTERf R0VUKE1DSFBfSUJJX0RBVEFfTEVOR1RILCBpYmlfc3RhdHVzKTsNCj4+ICsgICAgICAgICAgICAg ICAgaWJpLT5zZWdfY250ID0gaWJpLT5zZWdfbGVuOw0KPj4gKyAgICAgICAgICAgICAgICBpZiAo aWJpLT5zbG90ICYmIGliaS0+c2xvdC0+bGVuICsgaWJpLT5zZWdfbGVuID4gaWJpLT5tYXhfbGVu KSB7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmaGNpLT5tYXN0ZXIuZGV2 LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklCSSBwYXlsb2FkIHRvbyBi aWcgKCVkID4gJWQpXG4iLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWJp LT5zbG90LT5sZW4gKyBpYmktPnNlZ19sZW4sIGliaS0+bWF4X2xlbik7DQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgbWNocF9oY2lfcGlvX2ZyZWVfaWJpX3Nsb3QoaGNpLCBwaW8pOw0KPj4g KyAgICAgICAgICAgICAgICB9DQo+PiArICAgICAgICB9DQo+PiArDQo+PiArICAgICAgICByZXR1 cm4gZmFsc2U7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgbWNocF9oY2lfcGlvX3JlcXVl c3RfaWJpKHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSwgc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2 LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaTNjX2li aV9zZXR1cCAqcmVxKQ0KPj4gK3sNCj4+ICsgICAgICAgIHN0cnVjdCBtY2hwX2kzY19oY2lfZGV2 X2RhdGEgKmRldl9kYXRhID0gaTNjX2Rldl9nZXRfbWFzdGVyX2RhdGEoZGV2KTsNCj4+ICsgICAg ICAgIHN0cnVjdCBpM2NfZ2VuZXJpY19pYmlfcG9vbCAqcG9vbDsNCj4+ICsgICAgICAgIHN0cnVj dCBoY2lfcGlvX2Rldl9pYmlfZGF0YSAqZGV2X2liaTsNCj4+ICsNCj4+ICsgICAgICAgIGRldl9p YmkgPSBrbWFsbG9jKHNpemVvZigqZGV2X2liaSksIEdGUF9LRVJORUwpOw0KPj4gKyAgICAgICAg aWYgKCFkZXZfaWJpKQ0KPj4gKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4+ICsg ICAgICAgIHBvb2wgPSBpM2NfZ2VuZXJpY19pYmlfYWxsb2NfcG9vbChkZXYsIHJlcSk7DQo+PiAr ICAgICAgICBpZiAoSVNfRVJSKHBvb2wpKSB7DQo+PiArICAgICAgICAgICAgICAgIGtmcmVlKGRl dl9pYmkpOw0KPj4gKyAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihwb29sKTsNCj4+ICsg ICAgICAgIH0NCj4+ICsgICAgICAgIGRldl9pYmktPnBvb2wgPSBwb29sOw0KPj4gKyAgICAgICAg ZGV2X2liaS0+bWF4X2xlbiA9IHJlcS0+bWF4X3BheWxvYWRfbGVuOw0KPj4gKyAgICAgICAgZGV2 X2RhdGEtPmliaV9kYXRhID0gZGV2X2liaTsNCj4+ICsgICAgICAgIHJldHVybiAwOw0KPj4gK30N Cj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBtY2hwX2hjaV9waW9fZnJlZV9pYmkoc3RydWN0IG1jaHBf aTNjX2hjaSAqaGNpLCBzdHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXYpDQo+PiArew0KPj4gKyAgICAg ICAgc3RydWN0IG1jaHBfaTNjX2hjaV9kZXZfZGF0YSAqZGV2X2RhdGEgPSBpM2NfZGV2X2dldF9t YXN0ZXJfZGF0YShkZXYpOw0KPj4gKyAgICAgICAgc3RydWN0IGhjaV9waW9fZGV2X2liaV9kYXRh ICpkZXZfaWJpID0gZGV2X2RhdGEtPmliaV9kYXRhOw0KPj4gKw0KPj4gKyAgICAgICAgZGV2X2Rh dGEtPmliaV9kYXRhID0gTlVMTDsNCj4+ICsgICAgICAgIGkzY19nZW5lcmljX2liaV9mcmVlX3Bv b2woZGV2X2liaS0+cG9vbCk7DQo+PiArICAgICAgICBrZnJlZShkZXZfaWJpKTsNCj4+ICt9DQo+ PiArDQo+PiArc3RhdGljIHZvaWQgbWNocF9oY2lfcGlvX3JlY3ljbGVfaWJpX3Nsb3Qoc3RydWN0 IG1jaHBfaTNjX2hjaSAqaGNpLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgaTNjX2liaV9zbG90ICpzbG90KQ0KPj4gK3sNCj4+ICsgICAg ICAgIHN0cnVjdCBtY2hwX2kzY19oY2lfZGV2X2RhdGEgKmRldl9kYXRhID0gaTNjX2Rldl9nZXRf bWFzdGVyX2RhdGEoZGV2KTsNCj4+ICsgICAgICAgIHN0cnVjdCBoY2lfcGlvX2Rldl9pYmlfZGF0 YSAqZGV2X2liaSA9IGRldl9kYXRhLT5pYmlfZGF0YTsNCj4+ICsNCj4+ICsgICAgICAgIGkzY19n ZW5lcmljX2liaV9yZWN5Y2xlX3Nsb3QoZGV2X2liaS0+cG9vbCwgc2xvdCk7DQo+PiArfQ0KPj4g Kw0KPj4gK3N0YXRpYyBib29sIG1jaHBfaGNpX3Bpb19pcnFfaGFuZGxlcihzdHJ1Y3QgbWNocF9p M2NfaGNpICpoY2ksIHVuc2lnbmVkIGludCB1bnVzZWQpDQo+PiArew0KPj4gKyAgICAgICAgc3Ry dWN0IG1jaHBfaGNpX3Bpb19kYXRhICpwaW8gPSBoY2ktPmlvX2RhdGE7DQo+PiArICAgICAgICB1 MzIgc3RhdHVzOw0KPj4gKw0KPj4gKyAgICAgICAgc3Bpbl9sb2NrKCZwaW8tPmxvY2spOw0KPj4g KyAgICAgICAgc3RhdHVzID0gcGlvX3JlZ19yZWFkKE1DSFBfSU5UUl9TVEFUVVMpOw0KPj4gKyAg ICAgICAgZGV2X2RiZygmaGNpLT5tYXN0ZXIuZGV2LCIoaW4pIHN0YXR1czogJSN4LyUjeCIsIHN0 YXR1cywgcGlvLT5lbmFibGVkX2lycXMpOw0KPj4gKyAgICAgICAgc3RhdHVzICY9IHBpby0+ZW5h YmxlZF9pcnFzIHwgU1RBVF9MQVRFTkNZX1dBUk5JTkdTOw0KPj4gKyAgICAgICAgaWYgKCFzdGF0 dXMpIHsNCj4+ICsgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJnBpby0+bG9jayk7DQo+PiAr ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCj4+ICsgICAgICAgIH0NCj4+ICsNCj4+ICsg ICAgICAgIGlmIChzdGF0dXMgJiBTVEFUX0lCSV9TVEFUVVNfVEhMRCkNCj4+ICsgICAgICAgICAg ICAgICAgbWNocF9oY2lfcGlvX3Byb2Nlc3NfaWJpKGhjaSwgcGlvKTsNCj4+ICsNCj4+ICsgICAg ICAgIGlmIChzdGF0dXMgJiBTVEFUX1JYX1RITEQpDQo+PiArICAgICAgICAgICAgICAgIGlmICht Y2hwX2hjaV9waW9fcHJvY2Vzc19yeChoY2ksIHBpbykpDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgcGlvLT5lbmFibGVkX2lycXMgJj0gflNUQVRfUlhfVEhMRDsNCj4+ICsgICAgICAgIGlm IChzdGF0dXMgJiBTVEFUX1RYX1RITEQpDQo+PiArICAgICAgICAgICAgICAgIGlmIChtY2hwX2hj aV9waW9fcHJvY2Vzc190eChoY2ksIHBpbykpDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg cGlvLT5lbmFibGVkX2lycXMgJj0gflNUQVRfVFhfVEhMRDsNCj4+ICsgICAgICAgIGlmIChzdGF0 dXMgJiBTVEFUX1JFU1BfUkVBRFkpDQo+PiArICAgICAgICAgICAgICAgIGlmIChtY2hwX2hjaV9w aW9fcHJvY2Vzc19yZXNwKGhjaSwgcGlvKSkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBw aW8tPmVuYWJsZWRfaXJxcyAmPSB+U1RBVF9SRVNQX1JFQURZOw0KPj4gKw0KPj4gKyAgICAgICAg aWYgKHVubGlrZWx5KHN0YXR1cyAmIFNUQVRfTEFURU5DWV9XQVJOSU5HUykpIHsNCj4+ICsgICAg ICAgICAgICAgICAgcGlvX3JlZ193cml0ZShNQ0hQX0lOVFJfU1RBVFVTLCBzdGF0dXMgJiBTVEFU X0xBVEVOQ1lfV0FSTklOR1MpOw0KPj4gKyAgICAgICAgICAgICAgICBkZXZfd2Fybl9yYXRlbGlt aXRlZCgmaGNpLT5tYXN0ZXIuZGV2LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiZW5jb3VudGVyZWQgd2FybmluZyBjb25kaXRpb24gJSNseFxuIiwNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzICYgU1RBVF9MQVRFTkNZX1dB Uk5JTkdTKTsNCj4+ICsgICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgIGlmICh1bmxpa2VseShz dGF0dXMgJiBTVEFUX0FMTF9FUlJPUlMpKSB7DQo+PiArICAgICAgICAgICAgICAgIHBpb19yZWdf d3JpdGUoTUNIUF9JTlRSX1NUQVRVUywgc3RhdHVzICYgU1RBVF9BTExfRVJST1JTKTsNCj4+ICsg ICAgICAgICAgICAgICAgbWNocF9oY2lfcGlvX2VycihoY2ksIHBpbywgc3RhdHVzICYgU1RBVF9B TExfRVJST1JTKTsNCj4+ICsgICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgIGlmIChzdGF0dXMg JiBTVEFUX0NNRF9RVUVVRV9SRUFEWSkNCj4+ICsgICAgICAgICAgICAgICAgaWYgKG1jaHBfaGNp X3Bpb19wcm9jZXNzX2NtZChoY2ksIHBpbykpDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg cGlvLT5lbmFibGVkX2lycXMgJj0gflNUQVRfQ01EX1FVRVVFX1JFQURZOw0KPj4gKw0KPj4gKyAg ICAgICAgcGlvX3JlZ193cml0ZShNQ0hQX0lOVFJfU0lHTkFMX0VOQUJMRSwgcGlvLT5lbmFibGVk X2lycXMpOw0KPj4gKyAgICAgICAgZGV2X2RiZygmaGNpLT5tYXN0ZXIuZGV2LCIob3V0KSBzdGF0 dXM6ICUjeC8lI3giLA0KPj4gKyAgICAgICAgICAgIHBpb19yZWdfcmVhZChNQ0hQX0lOVFJfU1RB VFVTKSwgcGlvX3JlZ19yZWFkKE1DSFBfSU5UUl9TSUdOQUxfRU5BQkxFKSk7DQo+PiArICAgICAg ICBzcGluX3VubG9jaygmcGlvLT5sb2NrKTsNCj4+ICsgICAgICAgIHJldHVybiB0cnVlOw0KPj4g K30NCj4+ICsNCj4+ICtjb25zdCBzdHJ1Y3QgbWNocF9oY2lfaW9fb3BzIG1jaHBfbWlwaV9pM2Nf aGNpX3BpbyA9IHsNCj4+ICsgICAgICAgIC5pbml0ICAgICAgICAgICAgICAgICAgID0gbWNocF9o Y2lfcGlvX2luaXQsDQo+PiArICAgICAgICAuY2xlYW51cCAgICAgICAgICAgICAgICA9IG1jaHBf aGNpX3Bpb19jbGVhbnVwLA0KPj4gKyAgICAgICAgLnF1ZXVlX3hmZXIgICAgICAgICAgICAgPSBt Y2hwX2hjaV9waW9fcXVldWVfeGZlciwNCj4+ICsgICAgICAgIC5kZXF1ZXVlX3hmZXIgICAgICAg ICAgID0gbWNocF9oY2lfcGlvX2RlcXVldWVfeGZlciwNCj4+ICsgICAgICAgIC5pcnFfaGFuZGxl ciAgICAgICAgICAgID0gbWNocF9oY2lfcGlvX2lycV9oYW5kbGVyLA0KPj4gKyAgICAgICAgLnJl cXVlc3RfaWJpICAgICAgICAgICAgPSBtY2hwX2hjaV9waW9fcmVxdWVzdF9pYmksDQo+PiArICAg ICAgICAuZnJlZV9pYmkgICAgICAgICAgICAgICA9IG1jaHBfaGNpX3Bpb19mcmVlX2liaSwNCj4+ ICsgICAgICAgIC5yZWN5Y2xlX2liaV9zbG90ICAgICAgID0gbWNocF9oY2lfcGlvX3JlY3ljbGVf aWJpX3Nsb3QsDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBtY2hwX2kz Y19oY2kgKnRvX2kzY19oY2koc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSkNCj4+ICt7 DQo+PiArICAgICByZXR1cm4gY29udGFpbmVyX29mKG0sIHN0cnVjdCBtY2hwX2kzY19oY2ksIG1h c3Rlcik7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgbWNocF9pM2NfaGNpX2J1c19pbml0 KHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0pDQo+PiArew0KPj4gKyAgICAgc3RydWN0 IG1jaHBfaTNjX2hjaSAqaGNpID0gdG9faTNjX2hjaShtKTsNCj4+ICsgICAgIHN0cnVjdCBpM2Nf ZGV2aWNlX2luZm8gaW5mbzsNCj4+ICsgICAgIGludCByZXQ7DQo+PiArDQo+PiArICAgICBpZiAo aGNpLT5jbWQgPT0gJm1jaHBfbWlwaV9pM2NfaGNpX2NtZF92MSkgew0KPj4gKyAgICAgICAgICAg ICByZXQgPSBtY2hwX21pcGlfaTNjX2hjaV9kYXRfdjEuaW5pdChoY2kpOw0KPj4gKyAgICAgICAg ICAgICBpZiAocmV0KQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+PiAr ICAgICB9DQo+PiArDQo+PiArICAgICByZXQgPSBpM2NfbWFzdGVyX2dldF9mcmVlX2FkZHIobSwg MCk7DQo+PiArICAgICBpZiAocmV0IDwgMCkNCj4+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsN Cj4+ICsgICAgIHJlZ193cml0ZShNQ0hQX01BU1RFUl9ERVZJQ0VfQUREUiwNCj4+ICsgICAgICAg ICAgICAgICBNQ0hQX01BU1RFUl9EWU5BTUlDX0FERFIocmV0KSB8IE1DSFBfTUFTVEVSX0RZTkFN SUNfQUREUl9WQUxJRCk7DQo+PiArICAgICBtZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7 DQo+PiArICAgICBpbmZvLmR5bl9hZGRyID0gcmV0Ow0KPj4gKyAgICAgcmV0ID0gaTNjX21hc3Rl cl9zZXRfaW5mbyhtLCAmaW5mbyk7DQo+PiArICAgICBpZiAocmV0KQ0KPj4gKyAgICAgICAgICAg ICByZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKyAgICAgcmV0ID0gaGNpLT5pby0+aW5pdChoY2kpOw0K Pj4gKyAgICAgaWYgKHJldCkNCj4+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4+ICsNCj4+ ICsgICAgIG1pY3JvY2hpcF9zZXRfcmVzcF9idWZfdGhsZChoY2kpOw0KPj4gKw0KPj4gKyAgICAg cmVnX3NldChNQ0hQX0hDX0NPTlRST0wsIE1DSFBfSENfQ09OVFJPTF9CVVNfRU5BQkxFKTsNCj4+ ICsgICAgIGRldl9kYmcoJmhjaS0+bWFzdGVyLmRldiwiSENfQ09OVFJPTCA9ICUjeCIsIHJlZ19y ZWFkKE1DSFBfSENfQ09OVFJPTCkpOw0KPj4gKw0KPj4gKyAgICAgcmV0dXJuIDA7DQo+PiArfQ0K Pj4gKw0KPj4gK3N0YXRpYyB2b2lkIG1jaHBfaTNjX2hjaV9idXNfY2xlYW51cChzdHJ1Y3QgaTNj X21hc3Rlcl9jb250cm9sbGVyICptKQ0KPj4gK3sNCj4+ICsgICAgIHN0cnVjdCBtY2hwX2kzY19o Y2kgKmhjaSA9IHRvX2kzY19oY2kobSk7DQo+PiArICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKG0tPmRldi5wYXJlbnQpOw0KPj4gKw0KPj4gKyAg ICAgcmVnX2NsZWFyKE1DSFBfSENfQ09OVFJPTCwgTUNIUF9IQ19DT05UUk9MX0JVU19FTkFCTEUp Ow0KPj4gKyAgICAgc3luY2hyb25pemVfaXJxKHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCkpOw0K Pj4gKyAgICAgaGNpLT5pby0+Y2xlYW51cChoY2kpOw0KPj4gKyAgICAgaWYgKGhjaS0+Y21kID09 ICZtY2hwX21pcGlfaTNjX2hjaV9jbWRfdjEpDQo+PiArICAgICAgICAgICAgIG1jaHBfbWlwaV9p M2NfaGNpX2RhdF92MS5jbGVhbnVwKGhjaSk7DQo+PiArfQ0KPj4gKw0KPj4gK3ZvaWQgbWNocF9t aXBpX2kzY19oY2lfcmVzdW1lKHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSkNCj4+ICt7DQo+PiAr ICAgICByZWdfc2V0KE1DSFBfSENfQ09OVFJPTCwgTUNIUF9IQ19DT05UUk9MX1JFU1VNRSk7DQo+ PiArfQ0KPj4gKw0KPj4gKy8qIGxvY2F0ZWQgaGVyZSByYXRoZXIgdGhhbiBwaW8uYyBiZWNhdXNl IG5lZWRlZCBiaXRzIGFyZSBpbiBjb3JlIHJlZyBzcGFjZSAqLw0KPj4gK3ZvaWQgbWNocF9taXBp X2kzY19oY2lfcGlvX3Jlc2V0KHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSkNCj4+ICt7DQo+PiAr ICAgICByZWdfd3JpdGUoTUNIUF9SRVNFVF9DT05UUk9MLCBNQ0hQX1JYX0ZJRk9fUlNUIHwgTUNI UF9UWF9GSUZPX1JTVCB8IE1DSFBfUkVTUF9RVUVVRV9SU1QpOw0KPj4gK30NCj4+ICsNCj4+ICsv KiBsb2NhdGVkIGhlcmUgcmF0aGVyIHRoYW4gZGN0LmMgYmVjYXVzZSBuZWVkZWQgYml0cyBhcmUg aW4gY29yZSByZWcgc3BhY2UgKi8NCj4+ICt2b2lkIG1jaHBfbWlwaV9pM2NfaGNpX2RjdF9pbmRl eF9yZXNldChzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2kpDQo+PiArew0KPj4gKyAgICAgcmVnX3dy aXRlKE1DSFBfRENUX1NFQ1RJT04sIEZJRUxEX1BSRVAoTUNIUF9EQ1RfVEFCTEVfSU5ERVgsIDAp KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBtY2hwX2kzY19oY2lfc2VuZF9jY2NfY21k KHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0sDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgaTNjX2NjY19jbWQgKmNjYykNCj4+ICt7DQo+PiArICAgICBzdHJ1 Y3QgbWNocF9pM2NfaGNpICpoY2kgPSB0b19pM2NfaGNpKG0pOw0KPj4gKyAgICAgc3RydWN0IG1j aHBfaGNpX3hmZXIgKnhmZXI7DQo+PiArICAgICBib29sIHJhdyA9ICEhKGhjaS0+cXVpcmtzICYg SENJX1FVSVJLX1JBV19DQ0MpOw0KPj4gKyAgICAgYm9vbCBwcmVmaXhlZCA9IHJhdyAmJiAhIShj Y2MtPmlkICYgSTNDX0NDQ19ESVJFQ1QpOw0KPj4gKyAgICAgdW5zaWduZWQgaW50IG54ZmVycyA9 IGNjYy0+bmRlc3RzICsgcHJlZml4ZWQ7DQo+PiArICAgICBERUNMQVJFX0NPTVBMRVRJT05fT05T VEFDSyhkb25lKTsNCj4+ICsgICAgIGludCBpLCBsYXN0LCByZXQgPSAwOw0KPj4gKw0KPj4gKyAg ICAgZGV2X2RiZygmaGNpLT5tYXN0ZXIuZGV2LCJjbWQ9JSN4IHJudz0lZCBuZGVzdHM9JWQgZGF0 YVswXS5sZW49JWQiLA0KPj4gKyAgICAgICAgIGNjYy0+aWQsIGNjYy0+cm53LCBjY2MtPm5kZXN0 cywgY2NjLT5kZXN0c1swXS5wYXlsb2FkLmxlbik7DQo+PiArDQo+PiArICAgICB4ZmVyID0gbWNo cF9oY2lfYWxsb2NfeGZlcihueGZlcnMpOw0KPj4gKyAgICAgaWYgKCF4ZmVyKQ0KPj4gKyAgICAg ICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4+ICsNCj4+ICsgICAgIGlmIChwcmVmaXhlZCkgew0K Pj4gKyAgICAgICAgICAgICB4ZmVyLT5kYXRhID0gTlVMTDsNCj4+ICsgICAgICAgICAgICAgeGZl ci0+ZGF0YV9sZW4gPSAwOw0KPj4gKyAgICAgICAgICAgICB4ZmVyLT5ybncgPSBmYWxzZTsNCj4+ ICsgICAgICAgICAgICAgaGNpLT5jbWQtPnByZXBfY2NjKGhjaSwgeGZlciwgSTNDX0JST0FEQ0FT VF9BRERSLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NjLT5pZCwgdHJ1 ZSk7DQo+PiArICAgICAgICAgICAgIHhmZXIrKzsNCj4+ICsgICAgIH0NCj4+ICsNCj4+ICsgICAg IGZvciAoaSA9IDA7IGkgPCBueGZlcnMgLSBwcmVmaXhlZDsgaSsrKSB7DQo+PiArICAgICAgICAg ICAgIHhmZXJbaV0uZGF0YSA9IGNjYy0+ZGVzdHNbaV0ucGF5bG9hZC5kYXRhOw0KPj4gKyAgICAg ICAgICAgICB4ZmVyW2ldLmRhdGFfbGVuID0gY2NjLT5kZXN0c1tpXS5wYXlsb2FkLmxlbjsNCj4+ ICsgICAgICAgICAgICAgeGZlcltpXS5ybncgPSBjY2MtPnJudzsNCj4+ICsgICAgICAgICAgICAg cmV0ID0gaGNpLT5jbWQtPnByZXBfY2NjKGhjaSwgJnhmZXJbaV0sIGNjYy0+ZGVzdHNbaV0uYWRk ciwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjYy0+aWQsIHJh dyk7DQo+PiArICAgICAgICAgICAgIGlmIChyZXQpDQo+PiArICAgICAgICAgICAgICAgICAgICAg Z290byBvdXQ7DQo+PiArICAgICAgICAgICAgIHhmZXJbaV0uY21kX2Rlc2NbMF0gfD0gQ01EXzBf Uk9DOw0KPj4gKyAgICAgfQ0KPj4gKyAgICAgbGFzdCA9IGkgLSAxOw0KPj4gKyAgICAgeGZlclts YXN0XS5jbWRfZGVzY1swXSB8PSBDTURfMF9UT0M7DQo+PiArICAgICB4ZmVyW2xhc3RdLmNvbXBs ZXRpb24gPSAmZG9uZTsNCj4+ICsNCj4+ICsgICAgIGlmIChwcmVmaXhlZCkNCj4+ICsgICAgICAg ICAgICAgeGZlci0tOw0KPj4gKw0KPj4gKyAgICAgcmV0ID0gaGNpLT5pby0+cXVldWVfeGZlciho Y2ksIHhmZXIsIG54ZmVycyk7DQo+PiArICAgICBpZiAocmV0KQ0KPj4gKyAgICAgICAgICAgICBn b3RvIG91dDsNCj4+ICsgICAgIGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkb25l LCBIWikgJiYNCj4+ICsgICAgICAgICBoY2ktPmlvLT5kZXF1ZXVlX3hmZXIoaGNpLCB4ZmVyLCBu eGZlcnMpKSB7DQo+PiArICAgICAgICAgICAgIHJldCA9IC1FVElNRTsNCj4+ICsgICAgICAgICAg ICAgZ290byBvdXQ7DQo+PiArICAgICB9DQo+PiArICAgICBmb3IgKGkgPSBwcmVmaXhlZDsgaSA8 IG54ZmVyczsgaSsrKSB7DQo+PiArICAgICAgICAgICAgIGlmIChjY2MtPnJudykNCj4+ICsgICAg ICAgICAgICAgICAgICAgICBjY2MtPmRlc3RzW2kgLSBwcmVmaXhlZF0ucGF5bG9hZC5sZW4gPQ0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTUF9EQVRBX0xFTkdUSCh4ZmVyW2ld LnJlc3BvbnNlKTsNCj4+ICsgICAgICAgICAgICAgc3dpdGNoIChSRVNQX1NUQVRVUyh4ZmVyW2ld LnJlc3BvbnNlKSkgew0KPj4gKyAgICAgICAgICAgICBjYXNlIFJFU1BfU1VDQ0VTUzoNCj4+ICsg ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4+ICsgICAgICAgICAgICAgY2FzZSBSRVNQ X0VSUl9BRERSX0hFQURFUjoNCj4+ICsgICAgICAgICAgICAgY2FzZSBSRVNQX0VSUl9OQUNLOg0K Pj4gKyAgICAgICAgICAgICAgICAgICAgIGNjYy0+ZXJyID0gSTNDX0VSUk9SX00yOw0KPj4gKyAg ICAgICAgICAgICAgICAgICAgIGZhbGx0aHJvdWdoOw0KPj4gKyAgICAgICAgICAgICBkZWZhdWx0 Og0KPj4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87DQo+PiArICAgICAgICAgICAg ICAgICAgICAgZ290byBvdXQ7DQo+PiArICAgICAgICAgICAgIH0NCj4+ICsgICAgIH0NCj4+ICsN Cj4+ICsgICAgIGlmIChjY2MtPnJudykNCj4+ICsgICAgICAgICAgICAgZGV2X2RiZygmaGNpLT5t YXN0ZXIuZGV2LCJnb3Q6ICUqcGgiLA0KPj4gKyAgICAgICAgICAgICAgICAgY2NjLT5kZXN0c1sw XS5wYXlsb2FkLmxlbiwgY2NjLT5kZXN0c1swXS5wYXlsb2FkLmRhdGEpOw0KPj4gKw0KPj4gK291 dDoNCj4+ICsgICAgIG1jaHBfaGNpX2ZyZWVfeGZlcih4ZmVyLCBueGZlcnMpOw0KPj4gKyAgICAg cmV0dXJuIHJldDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBtY2hwX2kzY19oY2lfZGFh KHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0pDQo+PiArew0KPj4gKyAgICAgc3RydWN0 IG1jaHBfaTNjX2hjaSAqaGNpID0gdG9faTNjX2hjaShtKTsNCj4+ICsgICAgIHJldHVybiBoY2kt PmNtZC0+cGVyZm9ybV9kYWEoaGNpKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBtY2hw X2kzY19oY2lfYWxsb2Nfc2FmZV94ZmVyX2J1ZihzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2ksDQo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1jaHBfaGNpX3hm ZXIgKnhmZXIpDQo+PiArew0KPj4gKyAgICAgaWYgKGhjaS0+aW8gPT0gJm1jaHBfbWlwaV9pM2Nf aGNpX3BpbyB8fA0KPj4gKyAgICAgICAgIHhmZXItPmRhdGEgPT0gTlVMTCB8fCAhaXNfdm1hbGxv Y19hZGRyKHhmZXItPmRhdGEpKQ0KPj4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4+ICsgICAg IGlmICh4ZmVyLT5ybncpDQo+PiArICAgICAgICAgICAgIHhmZXItPmJvdW5jZV9idWYgPSBremFs bG9jKHhmZXItPmRhdGFfbGVuLCBHRlBfS0VSTkVMKTsNCj4+ICsgICAgIGVsc2UNCj4+ICsgICAg ICAgICAgICAgeGZlci0+Ym91bmNlX2J1ZiA9IGttZW1kdXAoeGZlci0+ZGF0YSwNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGZlci0+ZGF0YV9sZW4sIEdGUF9L RVJORUwpOw0KPj4gKw0KPj4gKyAgICAgcmV0dXJuIHhmZXItPmJvdW5jZV9idWYgPT0gTlVMTCA/ IC1FTk9NRU0gOiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBtY2hwX2kzY19oY2lf ZnJlZV9zYWZlX3hmZXJfYnVmKHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSwNCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNocF9oY2lfeGZlciAqeGZlcikN Cj4+ICt7DQo+PiArICAgICBpZiAoaGNpLT5pbyA9PSAmbWNocF9taXBpX2kzY19oY2lfcGlvIHx8 IHhmZXItPmJvdW5jZV9idWYgPT0gTlVMTCkNCj4+ICsgICAgIHJldHVybjsNCj4+ICsgICAgIGlm ICh4ZmVyLT5ybncpDQo+PiArICAgICAgICAgICAgIG1lbWNweSh4ZmVyLT5kYXRhLCB4ZmVyLT5i b3VuY2VfYnVmLCB4ZmVyLT5kYXRhX2xlbik7DQo+PiArDQo+PiArICAgICBrZnJlZSh4ZmVyLT5i b3VuY2VfYnVmKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBtY2hwX2kzY19oY2lfcHJp dl94ZmVycyhzdHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXYsDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGkzY19wcml2X3hmZXIgKmkzY194ZmVycywNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgbnhmZXJzKQ0KPj4gK3sNCj4+ICsgICAgIHN0cnVjdCBpM2Nf bWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpM2NfZGV2X2dldF9tYXN0ZXIoZGV2KTsNCj4+ICsgICAg IHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSA9IHRvX2kzY19oY2kobSk7DQo+PiArICAgICBzdHJ1 Y3QgbWNocF9oY2lfeGZlciAqeGZlcjsNCj4+ICsgICAgIERFQ0xBUkVfQ09NUExFVElPTl9PTlNU QUNLKGRvbmUpOw0KPj4gKyAgICAgdW5zaWduZWQgaW50IHNpemVfbGltaXQ7DQo+PiArICAgICBp bnQgaSwgbGFzdCwgcmV0ID0gMDsNCj4+ICsNCj4+ICsgICAgIGRldl9kYmcoJmhjaS0+bWFzdGVy LmRldiwibnhmZXJzID0gJWQiLCBueGZlcnMpOw0KPj4gKw0KPj4gKyAgICAgeGZlciA9IG1jaHBf aGNpX2FsbG9jX3hmZXIobnhmZXJzKTsNCj4+ICsgICAgIGlmICgheGZlcikNCj4+ICsgICAgICAg ICAgICAgcmV0dXJuIC1FTk9NRU07DQo+PiArDQo+PiArICAgICBzaXplX2xpbWl0ID0gMVUgPDwg MTY7DQo+PiArICAgICBmb3IgKGkgPSAwOyBpIDwgbnhmZXJzOyBpKyspIHsNCj4+ICsgICAgICAg ICAgICAgeGZlcltpXS5kYXRhX2xlbiA9IGkzY194ZmVyc1tpXS5sZW47DQo+PiArICAgICAgICAg ICAgIHJldCA9IC1FRkJJRzsNCj4+ICsgICAgICAgICAgICAgaWYgKHhmZXJbaV0uZGF0YV9sZW4g Pj0gc2l6ZV9saW1pdCkNCj4+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsNCj4+ICsg ICAgICAgICAgICAgeGZlcltpXS5ybncgPSBpM2NfeGZlcnNbaV0ucm53Ow0KPj4gKyAgICAgICAg ICAgICBpZiAoaTNjX3hmZXJzW2ldLnJudykgew0KPj4gKyAgICAgICAgICAgICAgICAgICAgIHhm ZXJbaV0uZGF0YSA9IGkzY194ZmVyc1tpXS5kYXRhLmluOw0KPj4gKyAgICAgICAgICAgICB9IGVs c2Ugew0KPj4gKyAgICAgICAgICAgICAgICAgICAgIC8qIHNpbGVuY2UgdGhlIGNvbnN0IHF1YWxp ZmllciB3YXJuaW5nIHdpdGggYSBjYXN0ICovDQo+PiArICAgICAgICAgICAgICAgICAgICAgeGZl cltpXS5kYXRhID0gKHZvaWQgKikgaTNjX3hmZXJzW2ldLmRhdGEub3V0Ow0KPj4gKyAgICAgICAg ICAgICB9DQo+PiArICAgICAgICAgICAgIGhjaS0+Y21kLT5wcmVwX2kzY194ZmVyKGhjaSwgZGV2 LCAmeGZlcltpXSk7DQo+PiArICAgICAgICAgICAgIHhmZXJbaV0uY21kX2Rlc2NbMF0gfD0gQ01E XzBfUk9DOw0KPj4gKyAgICAgICAgICAgICByZXQgPSBtY2hwX2kzY19oY2lfYWxsb2Nfc2FmZV94 ZmVyX2J1ZihoY2ksICZ4ZmVyW2ldKTsNCj4+ICsgICAgICAgICAgICAgaWYgKHJldCkNCj4+ICsg ICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsNCj4+ICsgICAgIH0NCj4+ICsgICAgIGxhc3Qg PSBpIC0gMTsNCj4+ICsgICAgIHhmZXJbbGFzdF0uY21kX2Rlc2NbMF0gfD0gQ01EXzBfVE9DOw0K Pj4gKyAgICAgeGZlcltsYXN0XS5jb21wbGV0aW9uID0gJmRvbmU7DQo+PiArDQo+PiArICAgICBy ZXQgPSBoY2ktPmlvLT5xdWV1ZV94ZmVyKGhjaSwgeGZlciwgbnhmZXJzKTsNCj4+ICsgICAgIGlm IChyZXQpDQo+PiArICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPj4gKyAgICAgaWYgKCF3YWl0X2Zv cl9jb21wbGV0aW9uX3RpbWVvdXQoJmRvbmUsIEhaKSAmJg0KPj4gKyAgICAgICAgIGhjaS0+aW8t PmRlcXVldWVfeGZlcihoY2ksIHhmZXIsIG54ZmVycykpIHsNCj4+ICsgICAgICAgICAgICAgcmV0 ID0gLUVUSU1FOw0KPj4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4+ICsgICAgIH0NCj4+ICsg ICAgIGZvciAoaSA9IDA7IGkgPCBueGZlcnM7IGkrKykgew0KPj4gKyAgICAgICAgICAgICBpZiAo aTNjX3hmZXJzW2ldLnJudykNCj4+ICsgICAgICAgICAgICAgICAgICAgICBpM2NfeGZlcnNbaV0u bGVuID0gUkVTUF9EQVRBX0xFTkdUSCh4ZmVyW2ldLnJlc3BvbnNlKTsNCj4+ICsgICAgICAgICAg ICAgaWYgKFJFU1BfU1RBVFVTKHhmZXJbaV0ucmVzcG9uc2UpICE9IFJFU1BfU1VDQ0VTUykgew0K Pj4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87DQo+PiArICAgICAgICAgICAgICAg ICAgICAgZ290byBvdXQ7DQo+PiArICAgICAgICAgICAgIH0NCj4+ICsgICAgIH0NCj4+ICsNCj4+ ICtvdXQ6DQo+PiArICAgICBmb3IgKGkgPSAwOyBpIDwgbnhmZXJzOyBpKyspDQo+PiArICAgICAg ICAgICAgIG1jaHBfaTNjX2hjaV9mcmVlX3NhZmVfeGZlcl9idWYoaGNpLCAmeGZlcltpXSk7DQo+ PiArDQo+PiArICAgICBtY2hwX2hjaV9mcmVlX3hmZXIoeGZlciwgbnhmZXJzKTsNCj4+ICsgICAg IHJldHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgbWNocF9pM2NfaGNpX2ky Y194ZmVycyhzdHJ1Y3QgaTJjX2Rldl9kZXNjICpkZXYsDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBzdHJ1Y3QgaTJjX21zZyAqaTJjX3hmZXJzLCBpbnQgbnhmZXJzKQ0KPj4g K3sNCj4+ICsgICAgIHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpMmNfZGV2X2dl dF9tYXN0ZXIoZGV2KTsNCj4+ICsgICAgIHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSA9IHRvX2kz Y19oY2kobSk7DQo+PiArICAgICBzdHJ1Y3QgbWNocF9oY2lfeGZlciAqeGZlcjsNCj4+ICsgICAg IERFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOw0KPj4gKyAgICAgaW50IGksIGxhc3Qs IHJldCA9IDA7DQo+PiArDQo+PiArICAgICBkZXZfZGJnKCZoY2ktPm1hc3Rlci5kZXYsIm54ZmVy cyA9ICVkIiwgbnhmZXJzKTsNCj4+ICsNCj4+ICsgICAgIHhmZXIgPSBtY2hwX2hjaV9hbGxvY194 ZmVyKG54ZmVycyk7DQo+PiArICAgICBpZiAoIXhmZXIpDQo+PiArICAgICAgICAgICAgIHJldHVy biAtRU5PTUVNOw0KPj4gKw0KPj4gKyAgICAgZm9yIChpID0gMDsgaSA8IG54ZmVyczsgaSsrKSB7 DQo+PiArICAgICAgICAgICAgIHhmZXJbaV0uZGF0YSA9IGkyY194ZmVyc1tpXS5idWY7DQo+PiAr ICAgICAgICAgICAgIHhmZXJbaV0uZGF0YV9sZW4gPSBpMmNfeGZlcnNbaV0ubGVuOw0KPj4gKyAg ICAgICAgICAgICB4ZmVyW2ldLnJudyA9IGkyY194ZmVyc1tpXS5mbGFncyAmIEkyQ19NX1JEOw0K Pj4gKyAgICAgICAgICAgICBoY2ktPmNtZC0+cHJlcF9pMmNfeGZlcihoY2ksIGRldiwgJnhmZXJb aV0pOw0KPj4gKyAgICAgICAgICAgICB4ZmVyW2ldLmNtZF9kZXNjWzBdIHw9IENNRF8wX1JPQzsN Cj4+ICsgICAgICAgICAgICAgcmV0ID0gbWNocF9pM2NfaGNpX2FsbG9jX3NhZmVfeGZlcl9idWYo aGNpLCAmeGZlcltpXSk7DQo+PiArICAgICAgICAgICAgIGlmIChyZXQpDQo+PiArICAgICAgICAg ICAgICAgICAgICAgZ290byBvdXQ7DQo+PiArICAgICB9DQo+PiArICAgICBsYXN0ID0gaSAtIDE7 DQo+PiArICAgICB4ZmVyW2xhc3RdLmNtZF9kZXNjWzBdIHw9IENNRF8wX1RPQzsNCj4+ICsgICAg IHhmZXJbbGFzdF0uY29tcGxldGlvbiA9ICZkb25lOw0KPj4gKw0KPj4gKyAgICAgcmV0ID0gaGNp LT5pby0+cXVldWVfeGZlcihoY2ksIHhmZXIsIG54ZmVycyk7DQo+PiArICAgICBpZiAocmV0KQ0K Pj4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4+ICsgICAgIGlmICghd2FpdF9mb3JfY29tcGxl dGlvbl90aW1lb3V0KCZkb25lLCBIWikgJiYNCj4+ICsgICAgICAgICBoY2ktPmlvLT5kZXF1ZXVl X3hmZXIoaGNpLCB4ZmVyLCBueGZlcnMpKSB7DQo+PiArICAgICAgICAgICAgIHJldCA9IC1FVElN RTsNCj4+ICsgICAgICAgICAgICAgZ290byBvdXQ7DQo+PiArICAgICB9DQo+PiArICAgICBmb3Ig KGkgPSAwOyBpIDwgbnhmZXJzOyBpKyspIHsNCj4+ICsgICAgICAgICAgICAgaWYgKFJFU1BfU1RB VFVTKHhmZXJbaV0ucmVzcG9uc2UpICE9IFJFU1BfU1VDQ0VTUykgew0KPj4gKyAgICAgICAgICAg ICAgICAgICAgIHJldCA9IC1FSU87DQo+PiArICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7 DQo+PiArICAgICAgICAgICAgIH0NCj4+ICsgICAgIH0NCj4+ICsNCj4+ICtvdXQ6DQo+PiArICAg ICBmb3IgKGkgPSAwOyBpIDwgbnhmZXJzOyBpKyspDQo+PiArICAgICAgICAgICAgIG1jaHBfaTNj X2hjaV9mcmVlX3NhZmVfeGZlcl9idWYoaGNpLCAmeGZlcltpXSk7DQo+PiArDQo+PiArICAgICBt Y2hwX2hjaV9mcmVlX3hmZXIoeGZlciwgbnhmZXJzKTsNCj4+ICsgICAgIHJldHVybiByZXQ7DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgbWNocF9pM2NfaGNpX2F0dGFjaF9pM2NfZGV2KHN0 cnVjdCBpM2NfZGV2X2Rlc2MgKmRldikNCj4+ICt7DQo+PiArICAgICBzdHJ1Y3QgaTNjX21hc3Rl cl9jb250cm9sbGVyICptID0gaTNjX2Rldl9nZXRfbWFzdGVyKGRldik7DQo+PiArICAgICBzdHJ1 Y3QgbWNocF9pM2NfaGNpICpoY2kgPSB0b19pM2NfaGNpKG0pOw0KPj4gKyAgICAgc3RydWN0IG1j aHBfaTNjX2hjaV9kZXZfZGF0YSAqZGV2X2RhdGE7DQo+PiArICAgICBpbnQgcmV0Ow0KPj4gKw0K Pj4gKyAgICAgZGV2X2RhdGEgPSBremFsbG9jKHNpemVvZigqZGV2X2RhdGEpLCBHRlBfS0VSTkVM KTsNCj4+ICsgICAgIGlmICghZGV2X2RhdGEpDQo+PiArICAgICAgICAgICAgIHJldHVybiAtRU5P TUVNOw0KPj4gKyAgICAgaWYgKGhjaS0+Y21kID09ICZtY2hwX21pcGlfaTNjX2hjaV9jbWRfdjEp IHsNCj4+ICsgICAgICAgICAgICAgcmV0ID0gbWNocF9taXBpX2kzY19oY2lfZGF0X3YxLmFsbG9j X2VudHJ5KGhjaSk7DQo+PiArICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7DQo+PiArICAgICAg ICAgICAgICAgICAgICAga2ZyZWUoZGV2X2RhdGEpOw0KPj4gKyAgICAgICAgICAgICAgICAgICAg IHJldHVybiByZXQ7DQo+PiArICAgICAgICAgICAgIH0NCj4+ICsgICAgICAgICAgICAgbWNocF9t aXBpX2kzY19oY2lfZGF0X3YxLnNldF9keW5hbWljX2FkZHIoaGNpLCByZXQsIGRldi0+aW5mby5k eW5fYWRkcik7DQo+PiArICAgICAgICAgICAgIGRldl9kYXRhLT5kYXRfaWR4ID0gcmV0Ow0KPj4g KyAgICAgfQ0KPj4gKyAgICAgaTNjX2Rldl9zZXRfbWFzdGVyX2RhdGEoZGV2LCBkZXZfZGF0YSk7 DQo+PiArICAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBtY2hwX2kz Y19oY2lfcmVhdHRhY2hfaTNjX2RldihzdHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXYsIHU4IG9sZF9k eW5fYWRkcikNCj4+ICt7DQo+PiArICAgICBzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICpt ID0gaTNjX2Rldl9nZXRfbWFzdGVyKGRldik7DQo+PiArICAgICBzdHJ1Y3QgbWNocF9pM2NfaGNp ICpoY2kgPSB0b19pM2NfaGNpKG0pOw0KPj4gKyAgICAgc3RydWN0IG1jaHBfaTNjX2hjaV9kZXZf ZGF0YSAqZGV2X2RhdGEgPSBpM2NfZGV2X2dldF9tYXN0ZXJfZGF0YShkZXYpOw0KPj4gKw0KPj4g KyAgICAgaWYgKGhjaS0+Y21kID09ICZtY2hwX21pcGlfaTNjX2hjaV9jbWRfdjEpDQo+PiArICAg ICAgICAgICAgIG1jaHBfbWlwaV9pM2NfaGNpX2RhdF92MS5zZXRfZHluYW1pY19hZGRyKGhjaSwg ZGV2X2RhdGEtPmRhdF9pZHgsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGV2LT5pbmZvLmR5bl9hZGRyKTsNCj4+ICsgICAgIHJldHVybiAwOw0KPj4gK30N Cj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBtY2hwX2kzY19oY2lfZGV0YWNoX2kzY19kZXYoc3RydWN0 IGkzY19kZXZfZGVzYyAqZGV2KQ0KPj4gK3sNCj4+ICsgICAgIHN0cnVjdCBpM2NfbWFzdGVyX2Nv bnRyb2xsZXIgKm0gPSBpM2NfZGV2X2dldF9tYXN0ZXIoZGV2KTsNCj4+ICsgICAgIHN0cnVjdCBt Y2hwX2kzY19oY2kgKmhjaSA9IHRvX2kzY19oY2kobSk7DQo+PiArICAgICBzdHJ1Y3QgbWNocF9p M2NfaGNpX2Rldl9kYXRhICpkZXZfZGF0YSA9IGkzY19kZXZfZ2V0X21hc3Rlcl9kYXRhKGRldik7 DQo+PiArDQo+PiArICAgICBpM2NfZGV2X3NldF9tYXN0ZXJfZGF0YShkZXYsIE5VTEwpOw0KPj4g KyAgICAgaWYgKGhjaS0+Y21kID09ICZtY2hwX21pcGlfaTNjX2hjaV9jbWRfdjEpDQo+PiArICAg ICAgICAgICAgIG1jaHBfbWlwaV9pM2NfaGNpX2RhdF92MS5mcmVlX2VudHJ5KGhjaSwgZGV2X2Rh dGEtPmRhdF9pZHgpOw0KPj4gKyAgICAga2ZyZWUoZGV2X2RhdGEpOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgaW50IG1jaHBfaTNjX2hjaV9hdHRhY2hfaTJjX2RldihzdHJ1Y3QgaTJjX2Rldl9k ZXNjICpkZXYpDQo+PiArew0KPj4gKyAgICAgc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAq bSA9IGkyY19kZXZfZ2V0X21hc3RlcihkZXYpOw0KPj4gKyAgICAgc3RydWN0IG1jaHBfaTNjX2hj aSAqaGNpID0gdG9faTNjX2hjaShtKTsNCj4+ICsgICAgIHN0cnVjdCBtY2hwX2kzY19oY2lfZGV2 X2RhdGEgKmRldl9kYXRhOw0KPj4gKyAgICAgaW50IHJldDsNCj4+ICsNCj4+ICsgICAgIGlmICho Y2ktPmNtZCAhPSAmbWNocF9taXBpX2kzY19oY2lfY21kX3YxKQ0KPj4gKyAgICAgICAgICAgICBy ZXR1cm4gMDsNCj4+ICsgICAgIGRldl9kYXRhID0ga3phbGxvYyhzaXplb2YoKmRldl9kYXRhKSwg R0ZQX0tFUk5FTCk7DQo+PiArICAgICBpZiAoIWRldl9kYXRhKQ0KPj4gKyAgICAgICAgICAgICBy ZXR1cm4gLUVOT01FTTsNCj4+ICsgICAgIHJldCA9IG1jaHBfbWlwaV9pM2NfaGNpX2RhdF92MS5h bGxvY19lbnRyeShoY2kpOw0KPj4gKyAgICAgaWYgKHJldCA8IDApIHsNCj4+ICsgICAgICAgICAg ICAga2ZyZWUoZGV2X2RhdGEpOw0KPj4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPj4gKyAg ICAgfQ0KPj4gKyAgICAgbWNocF9taXBpX2kzY19oY2lfZGF0X3YxLnNldF9zdGF0aWNfYWRkciho Y2ksIHJldCwgZGV2LT5hZGRyKTsNCj4+ICsgICAgIG1jaHBfbWlwaV9pM2NfaGNpX2RhdF92MS5z ZXRfZmxhZ3MoaGNpLCByZXQsIERBVF8wX0kyQ19ERVZJQ0UsIDApOw0KPj4gKyAgICAgZGV2X2Rh dGEtPmRhdF9pZHggPSByZXQ7DQo+PiArICAgICBpMmNfZGV2X3NldF9tYXN0ZXJfZGF0YShkZXYs IGRldl9kYXRhKTsNCj4+ICsgICAgIHJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMg dm9pZCBtY2hwX2kzY19oY2lfZGV0YWNoX2kyY19kZXYoc3RydWN0IGkyY19kZXZfZGVzYyAqZGV2 KQ0KPj4gK3sNCj4+ICsgICAgIHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpMmNf ZGV2X2dldF9tYXN0ZXIoZGV2KTsNCj4+ICsgICAgIHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSA9 IHRvX2kzY19oY2kobSk7DQo+PiArICAgICBzdHJ1Y3QgbWNocF9pM2NfaGNpX2Rldl9kYXRhICpk ZXZfZGF0YSA9IGkyY19kZXZfZ2V0X21hc3Rlcl9kYXRhKGRldik7DQo+PiArDQo+PiArICAgICBp ZiAoZGV2X2RhdGEpIHsNCj4+ICsgICAgICAgICAgICAgaTJjX2Rldl9zZXRfbWFzdGVyX2RhdGEo ZGV2LCBOVUxMKTsNCj4+ICsgICAgICAgICAgICAgaWYgKGhjaS0+Y21kID09ICZtY2hwX21pcGlf aTNjX2hjaV9jbWRfdjEpDQo+PiArICAgICAgICAgICAgICAgICAgICAgbWNocF9taXBpX2kzY19o Y2lfZGF0X3YxLmZyZWVfZW50cnkoaGNpLCBkZXZfZGF0YS0+ZGF0X2lkeCk7DQo+PiArICAgICAg ICAgICAgIGtmcmVlKGRldl9kYXRhKTsNCj4+ICsgICAgIH0NCj4+ICt9DQo+PiArDQo+PiArc3Rh dGljIGludCBtY2hwX2kzY19oY2lfcmVxdWVzdF9pYmkoc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2 LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaTNjX2liaV9z ZXR1cCAqcmVxKQ0KPj4gK3sNCj4+ICsgICAgIHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIg Km0gPSBpM2NfZGV2X2dldF9tYXN0ZXIoZGV2KTsNCj4+ICsgICAgIHN0cnVjdCBtY2hwX2kzY19o Y2kgKmhjaSA9IHRvX2kzY19oY2kobSk7DQo+PiArICAgICBzdHJ1Y3QgbWNocF9pM2NfaGNpX2Rl dl9kYXRhICpkZXZfZGF0YSA9IGkzY19kZXZfZ2V0X21hc3Rlcl9kYXRhKGRldik7DQo+PiArICAg ICB1bnNpZ25lZCBpbnQgZGF0X2lkeCA9IGRldl9kYXRhLT5kYXRfaWR4Ow0KPj4gKw0KPj4gKyAg ICAgaWYgKHJlcS0+bWF4X3BheWxvYWRfbGVuICE9IDApDQo+PiArICAgICAgICAgICAgIG1jaHBf bWlwaV9pM2NfaGNpX2RhdF92MS5zZXRfZmxhZ3MoaGNpLCBkYXRfaWR4LCBEQVRfMF9JQklfUEFZ TE9BRCwgMCk7DQo+PiArICAgICBlbHNlDQo+PiArICAgICAgICAgICAgIG1jaHBfbWlwaV9pM2Nf aGNpX2RhdF92MS5jbGVhcl9mbGFncyhoY2ksIGRhdF9pZHgsIERBVF8wX0lCSV9QQVlMT0FELCAw KTsNCj4+ICsgICAgIHJldHVybiBoY2ktPmlvLT5yZXF1ZXN0X2liaShoY2ksIGRldiwgcmVxKTsN Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgbWNocF9pM2NfaGNpX2ZyZWVfaWJpKHN0cnVj dCBpM2NfZGV2X2Rlc2MgKmRldikNCj4+ICt7DQo+PiArICAgICBzdHJ1Y3QgaTNjX21hc3Rlcl9j b250cm9sbGVyICptID0gaTNjX2Rldl9nZXRfbWFzdGVyKGRldik7DQo+PiArICAgICBzdHJ1Y3Qg bWNocF9pM2NfaGNpICpoY2kgPSB0b19pM2NfaGNpKG0pOw0KPj4gKw0KPj4gKyAgICAgaGNpLT5p by0+ZnJlZV9pYmkoaGNpLCBkZXYpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IG1jaHBf aTNjX2hjaV9lbmFibGVfaWJpKHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldikNCj4+ICt7DQo+PiAr ICAgICBzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptID0gaTNjX2Rldl9nZXRfbWFzdGVy KGRldik7DQo+PiArICAgICBzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2kgPSB0b19pM2NfaGNpKG0p Ow0KPj4gKyAgICAgc3RydWN0IG1jaHBfaTNjX2hjaV9kZXZfZGF0YSAqZGV2X2RhdGEgPSBpM2Nf ZGV2X2dldF9tYXN0ZXJfZGF0YShkZXYpOw0KPj4gKw0KPj4gKyAgICAgbWNocF9taXBpX2kzY19o Y2lfZGF0X3YxLmNsZWFyX2ZsYWdzKGhjaSwgZGV2X2RhdGEtPmRhdF9pZHgsIERBVF8wX1NJUl9S RUpFQ1QsIDApOw0KPj4gKyAgICAgcmV0dXJuIGkzY19tYXN0ZXJfZW5lY19sb2NrZWQobSwgZGV2 LT5pbmZvLmR5bl9hZGRyLCBJM0NfQ0NDX0VWRU5UX1NJUik7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBpbnQgbWNocF9pM2NfaGNpX2Rpc2FibGVfaWJpKHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRl dikNCj4+ICt7DQo+PiArICAgICBzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptID0gaTNj X2Rldl9nZXRfbWFzdGVyKGRldik7DQo+PiArICAgICBzdHJ1Y3QgbWNocF9pM2NfaGNpICpoY2kg PSB0b19pM2NfaGNpKG0pOw0KPj4gKyAgICAgc3RydWN0IG1jaHBfaTNjX2hjaV9kZXZfZGF0YSAq ZGV2X2RhdGEgPSBpM2NfZGV2X2dldF9tYXN0ZXJfZGF0YShkZXYpOw0KPj4gKw0KPj4gKyAgICAg bWNocF9taXBpX2kzY19oY2lfZGF0X3YxLnNldF9mbGFncyhoY2ksIGRldl9kYXRhLT5kYXRfaWR4 LCBEQVRfMF9TSVJfUkVKRUNULCAwKTsNCj4+ICsgICAgIHJldHVybiBpM2NfbWFzdGVyX2Rpc2Vj X2xvY2tlZChtLCBkZXYtPmluZm8uZHluX2FkZHIsIEkzQ19DQ0NfRVZFTlRfU0lSKTsNCj4+ICt9 DQo+PiArDQo+PiArc3RhdGljIHZvaWQgbWNocF9pM2NfaGNpX3JlY3ljbGVfaWJpX3Nsb3Qoc3Ry dWN0IGkzY19kZXZfZGVzYyAqZGV2LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgaTNjX2liaV9zbG90ICpzbG90KQ0KPj4gK3sNCj4+ICsgICAgIHN0cnVjdCBp M2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpM2NfZGV2X2dldF9tYXN0ZXIoZGV2KTsNCj4+ICsg ICAgIHN0cnVjdCBtY2hwX2kzY19oY2kgKmhjaSA9IHRvX2kzY19oY2kobSk7DQo+PiArDQo+PiAr ICAgICBoY2ktPmlvLT5yZWN5Y2xlX2liaV9zbG90KGhjaSwgZGV2LCBzbG90KTsNCj4+ICt9DQo+ PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXJfb3BzIG1j aHBfaTNjX2hjaV9vcHMgPSB7DQo+PiArICAgICAuYnVzX2luaXQgICAgICAgICAgICAgICA9IG1j aHBfaTNjX2hjaV9idXNfaW5pdCwNCj4+ICsgICAgIC5idXNfY2xlYW51cCAgICAgICAgICAgID0g bWNocF9pM2NfaGNpX2J1c19jbGVhbnVwLA0KPj4gKyAgICAgLmRvX2RhYSAgICAgICAgICAgICAg ICAgPSBtY2hwX2kzY19oY2lfZGFhLA0KPj4gKyAgICAgLnNlbmRfY2NjX2NtZCAgICAgICAgICAg PSBtY2hwX2kzY19oY2lfc2VuZF9jY2NfY21kLA0KPj4gKyAgICAgLnByaXZfeGZlcnMgICAgICAg ICAgICAgPSBtY2hwX2kzY19oY2lfcHJpdl94ZmVycywNCj4+ICsgICAgIC5pMmNfeGZlcnMgICAg ICAgICAgICAgID0gbWNocF9pM2NfaGNpX2kyY194ZmVycywNCj4+ICsgICAgIC5hdHRhY2hfaTNj X2RldiAgICAgICAgID0gbWNocF9pM2NfaGNpX2F0dGFjaF9pM2NfZGV2LA0KPj4gKyAgICAgLnJl YXR0YWNoX2kzY19kZXYgICAgICAgPSBtY2hwX2kzY19oY2lfcmVhdHRhY2hfaTNjX2RldiwNCj4+ ICsgICAgIC5kZXRhY2hfaTNjX2RldiAgICAgICAgID0gbWNocF9pM2NfaGNpX2RldGFjaF9pM2Nf ZGV2LA0KPj4gKyAgICAgLmF0dGFjaF9pMmNfZGV2ICAgICAgICAgPSBtY2hwX2kzY19oY2lfYXR0 YWNoX2kyY19kZXYsDQo+PiArICAgICAuZGV0YWNoX2kyY19kZXYgICAgICAgICA9IG1jaHBfaTNj X2hjaV9kZXRhY2hfaTJjX2RldiwNCj4+ICsgICAgIC5yZXF1ZXN0X2liaSAgICAgICAgICAgID0g bWNocF9pM2NfaGNpX3JlcXVlc3RfaWJpLA0KPj4gKyAgICAgLmZyZWVfaWJpICAgICAgICAgICAg ICAgPSBtY2hwX2kzY19oY2lfZnJlZV9pYmksDQo+PiArICAgICAuZW5hYmxlX2liaSAgICAgICAg ICAgICA9IG1jaHBfaTNjX2hjaV9lbmFibGVfaWJpLA0KPj4gKyAgICAgLmRpc2FibGVfaWJpICAg ICAgICAgICAgPSBtY2hwX2kzY19oY2lfZGlzYWJsZV9pYmksDQo+PiArICAgICAucmVjeWNsZV9p Ymlfc2xvdCAgICAgICA9IG1jaHBfaTNjX2hjaV9yZWN5Y2xlX2liaV9zbG90LA0KPj4gK307DQo+ PiArDQo+PiArc3RhdGljIGlycXJldHVybl90IG1jaHBfaTNjX2hjaV9pcnFfaGFuZGxlcihpbnQg aXJxLCB2b2lkICpkZXZfaWQpDQo+PiArew0KPj4gKyAgICAgc3RydWN0IG1jaHBfaTNjX2hjaSAq aGNpID0gZGV2X2lkOw0KPj4gKyAgICAgaXJxcmV0dXJuX3QgcmVzdWx0ID0gSVJRX05PTkU7DQo+ PiArICAgICB1MzIgdmFsOw0KPj4gKw0KPj4gKyAgICAgdmFsID0gcmVnX3JlYWQoTUNIUF9JTlRS X1NUQVRVUyk7DQo+PiArICAgICBkZXZfZGJnKCZoY2ktPm1hc3Rlci5kZXYsIklOVFJfU1RBVFVT ID0gJSN4IiwgdmFsKTsNCj4+ICsNCj4+ICsgICAgIGlmICh2YWwgJiBNQ0hQX0lOVFJfSENfSU5U RVJOQUxfRVJSKSB7DQo+PiArICAgICAgICAgICAgIGRldl9lcnIoJmhjaS0+bWFzdGVyLmRldiwg Ikhvc3QgQ29udHJvbGxlciBJbnRlcm5hbCBFcnJvclxuIik7DQo+PiArICAgICAgICAgICAgIHZh bCAmPSB+TUNIUF9JTlRSX0hDX0lOVEVSTkFMX0VSUjsNCj4+ICsgICAgIH0NCj4+ICsNCj4+ICsg ICAgIGhjaS0+aW8tPmlycV9oYW5kbGVyKGhjaSwgMCk7DQo+PiArDQo+PiArICAgICBpZiAodmFs KQ0KPj4gKyAgICAgICAgICAgICBkZXZfZXJyKCZoY2ktPm1hc3Rlci5kZXYsICJ1bmV4cGVjdGVk IElOVFJfU1RBVFVTICUjeFxuIiwgdmFsKTsNCj4+ICsgICAgIGVsc2UNCj4+ICsgICAgICAgICAg ICAgcmVzdWx0ID0gSVJRX0hBTkRMRUQ7DQo+PiArDQo+PiArICAgICByZXR1cm4gcmVzdWx0Ow0K Pj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IG1jaHBfaTNjX2hjaV9pbml0KHN0cnVjdCBtY2hw X2kzY19oY2kgKmhjaSkNCj4+ICt7DQo+PiArICAgICBib29sIHNpemVfaW5fZHdvcmRzLCBtb2Rl X3NlbGVjdG9yOw0KPj4gKyAgICAgdTMyIHJlZ3ZhbCwgb2Zmc2V0Ow0KPj4gKyAgICAgaW50IHJl dDsNCj4+ICsNCj4+ICsgICAgIC8qIFZhbGlkYXRlIEhDSSBoYXJkd2FyZSB2ZXJzaW9uICovDQo+ PiArICAgICByZWd2YWwgPSByZWdfcmVhZChNQ0hQX0hDSV9WRVJTSU9OKTsNCj4+ICsgICAgIGhj aS0+dmVyc2lvbl9tYWpvciA9IChyZWd2YWwgPj4gOCkgJiAweGY7DQo+PiArICAgICBoY2ktPnZl cnNpb25fbWlub3IgPSAocmVndmFsID4+IDQpICYgMHhmOw0KPj4gKyAgICAgaGNpLT5yZXZpc2lv biA9IHJlZ3ZhbCAmIDB4ZjsNCj4+ICsgICAgIGRldl9ub3RpY2UoJmhjaS0+bWFzdGVyLmRldiwg Ik1JUEkgSTNDIEhDSSB2JXUuJXUgciUwMnVcbiIsDQo+PiArICAgICAgICAgICAgICAgIGhjaS0+ dmVyc2lvbl9tYWpvciwgaGNpLT52ZXJzaW9uX21pbm9yLCBoY2ktPnJldmlzaW9uKTsNCj4+ICsg ICAgIC8qIGtub3duIHZlcnNpb25zICovDQo+PiArICAgICBzd2l0Y2ggKHJlZ3ZhbCAmIH4weGYp IHsNCj4+ICsgICAgIGNhc2UgMHgxMDA6ICAgICAvKiB2ZXJzaW9uIDEuMCAqLw0KPj4gKyAgICAg Y2FzZSAweDExMDogICAgIC8qIHZlcnNpb24gMS4xICovDQo+PiArICAgICBjYXNlIDB4MjAwOiAg ICAgLyogdmVyc2lvbiAyLjAgKi8NCj4+ICsgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICBk ZWZhdWx0Og0KPj4gKyAgICAgICAgICAgICBkZXZfZXJyKCZoY2ktPm1hc3Rlci5kZXYsICJ1bnN1 cHBvcnRlZCBIQ0kgdmVyc2lvblxuIik7DQo+PiArICAgICAgICAgICAgIHJldHVybiAtRVBST1RP Tk9TVVBQT1JUOw0KPj4gKyAgICAgfQ0KPj4gKw0KPj4gKyAgICAgaGNpLT5jYXBzID0gcmVnX3Jl YWQoTUNIUF9IQ19DQVBBQklMSVRJRVMpOw0KPj4gKyAgICAgZGV2X2RiZygmaGNpLT5tYXN0ZXIu ZGV2LCJjYXBzID0gJSN4IiwgaGNpLT5jYXBzKTsNCj4+ICsNCj4+ICsgICAgIHNpemVfaW5fZHdv cmRzID0gaGNpLT52ZXJzaW9uX21ham9yIDwgMSB8fA0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAoaGNpLT52ZXJzaW9uX21ham9yID09IDEgJiYgaGNpLT52ZXJzaW9uX21pbm9yIDwgMSk7DQo+ PiArDQo+PiArICAgICByZWd2YWwgPSByZWdfcmVhZChNQ0hQX0RBVF9TRUNUSU9OKTsNCj4+ICsg ICAgIG9mZnNldCA9IEZJRUxEX0dFVChNQ0hQX0RBVF9UQUJMRV9PRkZTRVQsIHJlZ3ZhbCk7DQo+ PiArICAgICBoY2ktPkRBVF9yZWdzID0gb2Zmc2V0ID8gaGNpLT5iYXNlX3JlZ3MgKyBvZmZzZXQg OiBOVUxMOw0KPj4gKyAgICAgaGNpLT5EQVRfZW50cmllcyA9IEZJRUxEX0dFVChNQ0hQX0RBVF9U QUJMRV9TSVpFLCByZWd2YWwpOw0KPj4gKyAgICAgaGNpLT5EQVRfZW50cnlfc2l6ZSA9IDg7DQo+ PiArICAgICBpZiAoc2l6ZV9pbl9kd29yZHMpDQo+PiArICAgICAgICAgICAgIGhjaS0+REFUX2Vu dHJpZXMgPSA0ICogaGNpLT5EQVRfZW50cmllcyAvIGhjaS0+REFUX2VudHJ5X3NpemU7DQo+PiAr ICAgICBkZXZfaW5mbygmaGNpLT5tYXN0ZXIuZGV2LCAiREFUOiAldSAldS1ieXRlcyBlbnRyaWVz IGF0IG9mZnNldCAlI3hcbiIsDQo+PiArICAgICAgICAgICAgICBoY2ktPkRBVF9lbnRyaWVzLCBo Y2ktPkRBVF9lbnRyeV9zaXplLCBvZmZzZXQpOw0KPj4gKw0KPj4gKyAgICAgcmVndmFsID0gcmVn X3JlYWQoTUNIUF9EQ1RfU0VDVElPTik7DQo+PiArICAgICBvZmZzZXQgPSBGSUVMRF9HRVQoTUNI UF9EQ1RfVEFCTEVfT0ZGU0VULCByZWd2YWwpOw0KPj4gKyAgICAgaGNpLT5EQ1RfcmVncyA9IG9m ZnNldCA/IGhjaS0+YmFzZV9yZWdzICsgb2Zmc2V0IDogTlVMTDsNCj4+ICsgICAgIGhjaS0+RENU X2VudHJpZXMgPSBGSUVMRF9HRVQoTUNIUF9EQ1RfVEFCTEVfU0laRSwgcmVndmFsKTsNCj4+ICsg ICAgIGhjaS0+RENUX2VudHJ5X3NpemUgPSAxNjsNCj4+ICsgICAgIGlmIChzaXplX2luX2R3b3Jk cykNCj4+ICsgICAgICAgICAgICAgaGNpLT5EQ1RfZW50cmllcyA9IDQgKiBoY2ktPkRDVF9lbnRy aWVzIC8gaGNpLT5EQ1RfZW50cnlfc2l6ZTsNCj4+ICsgICAgIGRldl9pbmZvKCZoY2ktPm1hc3Rl ci5kZXYsICJEQ1Q6ICV1ICV1LWJ5dGVzIGVudHJpZXMgYXQgb2Zmc2V0ICUjeFxuIiwNCj4+ICsg ICAgICAgICAgICAgIGhjaS0+RENUX2VudHJpZXMsIGhjaS0+RENUX2VudHJ5X3NpemUsIG9mZnNl dCk7DQo+PiArDQo+PiArICAgICByZWd2YWwgPSByZWdfcmVhZChNQ0hQX1JJTkdfSEVBREVSU19T RUNUSU9OKTsNCj4+ICsgICAgIG9mZnNldCA9IEZJRUxEX0dFVChNQ0hQX1JJTkdfSEVBREVSU19P RkZTRVQsIHJlZ3ZhbCk7DQo+PiArICAgICBoY2ktPlJIU19yZWdzID0gb2Zmc2V0ID8gaGNpLT5i YXNlX3JlZ3MgKyBvZmZzZXQgOiBOVUxMOw0KPj4gKyAgICAgZGV2X2luZm8oJmhjaS0+bWFzdGVy LmRldiwgIlJpbmcgSGVhZGVycyBhdCBvZmZzZXQgJSN4XG4iLCBvZmZzZXQpOw0KPj4gKw0KPj4g KyAgICAgcmVndmFsID0gcmVnX3JlYWQoTUNIUF9QSU9fU0VDVElPTik7DQo+PiArICAgICBvZmZz ZXQgPSBGSUVMRF9HRVQoTUNIUF9QSU9fUkVHU19PRkZTRVQsIHJlZ3ZhbCk7DQo+PiArICAgICBo Y2ktPlBJT19yZWdzID0gb2Zmc2V0ID8gaGNpLT5iYXNlX3JlZ3MgKyBvZmZzZXQgOiBOVUxMOw0K Pj4gKyAgICAgZGV2X2luZm8oJmhjaS0+bWFzdGVyLmRldiwgIlBJTyBzZWN0aW9uIGF0IG9mZnNl dCAlI3hcbiIsIG9mZnNldCk7DQo+PiArDQo+PiArICAgICByZWd2YWwgPSByZWdfcmVhZChNQ0hQ X0VYVF9DQVBTX1NFQ1RJT04pOw0KPj4gKyAgICAgb2Zmc2V0ID0gRklFTERfR0VUKE1DSFBfRVhU X0NBUFNfT0ZGU0VULCByZWd2YWwpOw0KPj4gKyAgICAgaGNpLT5FWFRDQVBTX3JlZ3MgPSBvZmZz ZXQgPyBoY2ktPmJhc2VfcmVncyArIG9mZnNldCA6IE5VTEw7DQo+PiArICAgICBkZXZfaW5mbygm aGNpLT5tYXN0ZXIuZGV2LCAiRXh0ZW5kZWQgQ2FwcyBhdCBvZmZzZXQgJSN4XG4iLCBvZmZzZXQp Ow0KPj4gKw0KPj4gKyAgICAgcmV0ID0gaTNjX2hjaV9wYXJzZV9leHRfY2FwcyhoY2kpOw0KPj4g KyAgICAgaWYgKHJldCkNCj4+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4+ICsNCj4+ICsg ICAgIC8qDQo+PiArICAgICAgKiBOb3cgbGV0J3MgcmVzZXQgdGhlIGhhcmR3YXJlLg0KPj4gKyAg ICAgICogU09GVF9SU1QgbXVzdCBiZSBjbGVhciBiZWZvcmUgd2Ugd3JpdGUgdG8gaXQuDQo+PiAr ICAgICAgKiBUaGVuIHdlIG11c3Qgd2FpdCB1bnRpbCBpdCBjbGVhcnMgYWdhaW4uDQo+PiArICAg ICAgKi8NCj4+ICsgICAgIHJldCA9IHJlYWR4X3BvbGxfdGltZW91dChyZWdfcmVhZCwgTUNIUF9S RVNFVF9DT05UUk9MLCByZWd2YWwsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IShyZWd2YWwgJiBNQ0hQX1NPRlRfUlNUKSwgMSwgMTAwMDApOw0KPj4gKyAgICAgaWYgKHJldCkN Cj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsNCj4+ICsgICAgIHJlZ193cml0ZShNQ0hQ X1JFU0VUX0NPTlRST0wsIE1DSFBfU09GVF9SU1QpOw0KPj4gKyAgICAgcmV0ID0gcmVhZHhfcG9s bF90aW1lb3V0KHJlZ19yZWFkLCBNQ0hQX1JFU0VUX0NPTlRST0wsIHJlZ3ZhbCwNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAhKHJlZ3ZhbCAmIE1DSFBfU09GVF9SU1QpLCAxLCAx MDAwMCk7DQo+PiArICAgICBpZiAocmV0KQ0KPj4gKyAgICAgICAgICAgICByZXR1cm4gLUVOWElP Ow0KPj4gKw0KPj4gKyAgICAgLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBhbmQgYWxsb3cgYWxs IHNpZ25hbCB1cGRhdGVzICovDQo+PiArICAgICByZWdfd3JpdGUoTUNIUF9JTlRSX1NJR05BTF9F TkFCTEUsIDB4MCk7DQo+PiArICAgICByZWdfd3JpdGUoTUNIUF9JTlRSX1NUQVRVU19FTkFCTEUs IDB4ZmZmZmZmZmYpOw0KPj4gKw0KPj4gKyAgICAgaGNpLT5jbWQgPSAmbWNocF9taXBpX2kzY19o Y2lfY21kX3YxOw0KPj4gKyAgICAgbW9kZV9zZWxlY3RvciA9IGhjaS0+dmVyc2lvbl9tYWpvciA+ IDEgfHwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoY2ktPnZlcnNpb25fbWFq b3IgPT0gMSAmJiBoY2ktPnZlcnNpb25fbWlub3IgPiAwKTsNCj4+ICsNCj4+ICsgICAgIC8qIFF1 aXJrIGZvciBIQ0lfUVVJUktfUElPX01PREUgb24gTUlDUk9DSElQIHBsYXRmb3JtcyAqLw0KPj4g KyAgICAgaWYgKGhjaS0+cXVpcmtzICYgTUNIUF9IQ0lfUVVJUktfUElPX01PREUpIHsNCj4+ICsg ICAgICAgICAgICAgICAgICAgICBoY2ktPlJIU19yZWdzID0gTlVMTDsNCj4+ICsgICAgIH0NCj4+ ICsNCj4+ICsgICAgIGhjaS0+aW8gPSAmbWNocF9taXBpX2kzY19oY2lfcGlvOw0KPj4gKyAgICAg ZGV2X2luZm8oJmhjaS0+bWFzdGVyLmRldiwgIlVzaW5nIFBJT1xuIik7DQo+PiArDQo+PiArICAg ICBtaWNyb2NoaXBfc2V0X29kX3BwX3RpbWluZyhoY2kpOw0KPj4gKw0KPj4gKyAgICAgcmV0dXJu IDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgbWNocF9pM2NfaGNpX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+PiArew0KPj4gKyAgICAgc3RydWN0IG1jaHBfaTNj X2hjaSAqaGNpOw0KPj4gKyAgICAgaW50IGlycSwgcmV0Ow0KPj4gKw0KPj4gKyAgICAgaGNpID0g ZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqaGNpKSwgR0ZQX0tFUk5FTCk7DQo+PiAr ICAgICBpZiAoIWhjaSkNCj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+PiArICAg ICBoY2ktPmJhc2VfcmVncyA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAw KTsNCj4+ICsgICAgIGlmIChJU19FUlIoaGNpLT5iYXNlX3JlZ3MpKQ0KPj4gKyAgICAgICAgICAg ICByZXR1cm4gUFRSX0VSUihoY2ktPmJhc2VfcmVncyk7DQo+PiArDQo+PiArICAgICBoY2ktPmdj bGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImdjbGsiKTsNCj4+ICsgICAgIGlmIChJU19F UlIoaGNpLT5nY2xrKSkNCj4+ICsgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIoaGNpLT5nY2xr KTsNCj4+ICsNCj4+ICsgICAgIGhjaS0+cGNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAi cGNsayIpOw0KPj4gKyAgICAgaWYgKElTX0VSUihoY2ktPnBjbGspKQ0KPj4gKyAgICAgICAgICAg ICByZXR1cm4gUFRSX0VSUihoY2ktPnBjbGspOw0KPj4gKw0KPj4gKyAgICAgcmV0ID0gY2xrX3By ZXBhcmVfZW5hYmxlKGhjaS0+Z2Nsayk7DQo+PiArICAgICBpZiAocmV0KQ0KPj4gKyAgICAgICAg ICAgICBnb3RvIGVycl9kaXNhYmxlX2djbGs7DQo+PiArDQo+PiArICAgICByZXQgPSBjbGtfcHJl cGFyZV9lbmFibGUoaGNpLT5wY2xrKTsNCj4+ICsgICAgIGlmIChyZXQpDQo+PiArICAgICAgICAg ICAgIGdvdG8gZXJyX2Rpc2FibGVfcGNsazsNCj4+ICsNCj4+ICsgICAgIHBsYXRmb3JtX3NldF9k cnZkYXRhKHBkZXYsIGhjaSk7DQo+PiArDQo+PiArICAgICBoY2ktPm1hc3Rlci5kZXYuaW5pdF9u YW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7DQo+PiArDQo+PiArICAgICBoY2ktPnF1aXJrcyA9 ICh1bnNpZ25lZCBsb25nKWRldmljZV9nZXRfbWF0Y2hfZGF0YSgmcGRldi0+ZGV2KTsNCj4+ICsN Cj4+ICsgICAgIHJldCA9IG1jaHBfaTNjX2hjaV9pbml0KGhjaSk7DQo+PiArICAgICBpZiAocmV0 KQ0KPj4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKyAgICAgaXJxID0gcGxh dGZvcm1fZ2V0X2lycShwZGV2LCAwKTsNCj4+ICsgICAgIHJldCA9IGRldm1fcmVxdWVzdF9pcnEo JnBkZXYtPmRldiwgaXJxLCBtY2hwX2kzY19oY2lfaXJxX2hhbmRsZXIsDQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDAsIE5VTEwsIGhjaSk7DQo+PiArICAgICBpZiAocmV0KQ0KPj4g KyAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKyAgICAgcmV0ID0gaTNjX21hc3Rl cl9yZWdpc3RlcigmaGNpLT5tYXN0ZXIsICZwZGV2LT5kZXYsDQo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZtY2hwX2kzY19oY2lfb3BzLCBmYWxzZSk7DQo+PiArICAgICBpZiAo cmV0KQ0KPj4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKyAgICAgcmV0dXJu IDA7DQo+PiArDQo+PiArZXJyX2Rpc2FibGVfcGNsazoNCj4+ICsgICAgIGNsa19kaXNhYmxlX3Vu cHJlcGFyZShoY2ktPnBjbGspOw0KPj4gKw0KPj4gK2Vycl9kaXNhYmxlX2djbGs6DQo+PiArICAg ICBjbGtfZGlzYWJsZV91bnByZXBhcmUoaGNpLT5nY2xrKTsNCj4+ICsNCj4+ICsgICAgIHJldHVy biByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIG1jaHBfaTNjX2hjaV9yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4+ICt7DQo+PiArICAgICBzdHJ1Y3QgbWNo cF9pM2NfaGNpICpoY2kgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4+ICsNCj4+ICsg ICAgIGkzY19tYXN0ZXJfdW5yZWdpc3RlcigmaGNpLT5tYXN0ZXIpOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgY29uc3QgX19tYXliZV91bnVzZWQgc3RydWN0IG9mX2RldmljZV9pZCBtY2hwX2kz Y19oY2lfb2ZfbWF0Y2hbXSA9IHsNCj4+ICsgICAgIHsgLmNvbXBhdGlibGUgPSAibWljcm9jaGlw LHNhbWE3ZDY1LWkzYy1oY2kiLCAuZGF0YSA9ICh2b2lkICopKE1DSFBfSENJX1FVSVJLX1BJT19N T0RFIHwgTUNIUF9IQ0lfUVVJUktfT0RfUFBfVElNSU5HIHwgTUNIUF9IQ0lfUVVJUktfUkVTUF9C VUZfVEhMRCkgfSwNCj4+ICsgICAgIHt9LA0KPj4gK307DQo+PiArTU9EVUxFX0RFVklDRV9UQUJM RShvZiwgbWNocF9pM2NfaGNpX29mX21hdGNoKTsNCj4+ICsNCj4+ICtzdGF0aWMgc3RydWN0IHBs YXRmb3JtX2RyaXZlciBtY2hwX2kzY19oY2lfZHJpdmVyID0gew0KPj4gKyAgICAgLnByb2JlID0g bWNocF9pM2NfaGNpX3Byb2JlLA0KPj4gKyAgICAgLnJlbW92ZV9uZXcgPSBtY2hwX2kzY19oY2lf cmVtb3ZlLA0KPj4gKyAgICAgLmRyaXZlciA9IHsNCj4+ICsgICAgICAgICAgICAgLm5hbWUgPSAi c2FtYTdkNjUtaTNjLWhjaS1tYXN0ZXIiLA0KPj4gKyAgICAgICAgICAgICAub2ZfbWF0Y2hfdGFi bGUgPSBvZl9tYXRjaF9wdHIobWNocF9pM2NfaGNpX29mX21hdGNoKSwNCj4+ICsgICAgIH0sDQo+ PiArfTsNCj4+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1jaHBfaTNjX2hjaV9kcml2ZXIpOw0K Pj4gKw0KPj4gK01PRFVMRV9BVVRIT1IoIkR1cmFpIE1hbmlja2FtIEtSIDxkdXJhaS5tYW5pY2th bWtyQG1pY3JvY2hpcC5jb20+Iik7DQo+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJNaWNyb2NoaXAg U0FNQTdkNjUgSTNDIEhDSSBtYXN0ZXIgZHJpdmVyIik7DQo+PiArTU9EVUxFX0xJQ0VOU0UoIkdQ TCIpOw0KPj4gLS0NCj4+IDIuMzQuMQ0KPj4NCg0K