From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 98BF2C5DF81 for ; Mon, 24 Aug 2026 20:29:10 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E98C410E02D; Mon, 24 Aug 2026 20:29:09 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="nFE1l9VE"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.11]) by gabe.freedesktop.org (Postfix) with ESMTPS id 43A0E10E02D for ; Mon, 24 Aug 2026 20:29:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1787603349; x=1819139349; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=AzLNdisUOwCQHjkJMA5EuaXQtJmTxwZqL6o+y5onzgg=; b=nFE1l9VECT1m4JSUNRW0AH/ybdUBdaePSMeT0fmbT8qPUsolyhPDCbO6 s+B+SFR4VOkPu/k35AXWo3NSGSCs5voz9eHhq+4HRSE+1eJrMgUBugivX 2N4rcFD4GkFr/sGZHhoNQQ5Ov0QpMgN5hczjB7sVp4zbujKNlqh/GwjaB bCfFoj7HNq9ofyTFUlNgFzfKDLNGYl30Q5P6UTx0f1LpZiALv4BoO8emE IKRc/sK7gXRfy61/bU2b+KI0vm8Bu72F5n3YDdS0PyudjNPRUOY3+AUnL +WHGecRdtdl03P3EAOTKJ6OpCEne6pMbh/RFmt5Ga/k4TQUGz1YZJwwYn Q==; X-CSE-ConnectionGUID: twptVylMSpCzTdQI0eX7WQ== X-CSE-MsgGUID: t4DrhlZ0QXulIDJ+WdGb8w== X-IronPort-AV: E=McAfee;i="6800,10657,11885"; a="98401826" X-IronPort-AV: E=Sophos;i="6.25,241,1779174000"; d="scan'208";a="98401826" Received: from fmviesa005.fm.intel.com ([10.60.135.145]) by orvoesa103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Aug 2026 13:29:09 -0700 X-CSE-ConnectionGUID: gwF/hW1NSI2wSASul0iPuQ== X-CSE-MsgGUID: fDEG0NmRTSObc5jtUUlUTQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.25,241,1779174000"; d="scan'208";a="272313335" Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24]) by fmviesa005.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Aug 2026 13:29:08 -0700 Received: from ORSMSX902.amr.corp.intel.com (10.22.229.24) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Mon, 24 Aug 2026 13:29:07 -0700 Received: from ORSEDG901.ED.cps.intel.com (10.7.248.11) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45 via Frontend Transport; Mon, 24 Aug 2026 13:29:07 -0700 Received: from CY3PR05CU001.outbound.protection.outlook.com (40.93.201.8) by edgegateway.intel.com (134.134.137.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Mon, 24 Aug 2026 13:29:07 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pFdtr4vawNR7WLXIrU/KuYoxlyV4oWUxeYIT39aJFYWuUfpBahy9G4QDnsZbH9mpL/OFmI7GdZ4tGlk3di83RqYYwTJCg1n+gjA6CtlS+O72ksw3oCJxIRuYVacMLaoYXUOLE406xflKFc1EDOVc/2NxEVfl/DWbK8FzANy76n/jLfTG74ZF2YGWzR4lD7AnN5WQ7EZvbrhD6aJ5ToimC9JJRVN2nfYYJLgcTuzB9ic5yGWGCP0yG1QDi8CuN/g61aJwT+tZgj60mOHPlHZibm6Y4MQs/4Q8r6WqYBjWjgDIO5PHAKlvR/Tcn3HjXsSKrfaHGmOMjeKiTaZ/Ojet3Q== 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=AzLNdisUOwCQHjkJMA5EuaXQtJmTxwZqL6o+y5onzgg=; b=GyiWkFiez309sKHhCCcy48CjoaL+8yAvoxNORw39kO4PNQVEvD0ik1fhwNXgtWUalycrBxR3EwERj5hEoaSxZeQB6IBkZoIu/UuWHhoLlg0CWJpAGQjk7WmdKVDtWrNGaMTeDRztubU4OPRh7fPLzaZr3cbywTLMlc5ApdQipSkL+boGLgJ2fg0NgmzTnAxu/0oAm88pNBHrfp4sqzKivhdo/PeOZ0GI81oJhhnSjtH168tlh54fctqHNozn7dpRET8627a8kPjHGUp3KtNdNxH0crh0YE/4WTc4VE8vPd/Ig0moSU8pIkII0UZFry2r7HJ+WB5W+AHovUbYAaqHkg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from CY5PR11MB6320.namprd11.prod.outlook.com (2603:10b6:930:3c::9) by SA1PR11MB8256.namprd11.prod.outlook.com (2603:10b6:806:253::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.12; Mon, 24 Aug 2026 20:28:59 +0000 Received: from CY5PR11MB6320.namprd11.prod.outlook.com ([fe80::9cd7:94d5:90f:4d76]) by CY5PR11MB6320.namprd11.prod.outlook.com ([fe80::9cd7:94d5:90f:4d76%3]) with mapi id 15.21.0339.012; Mon, 24 Aug 2026 20:28:59 +0000 From: "Summers, Stuart" To: "Roper, Matthew D" CC: "intel-xe@lists.freedesktop.org" , "Lin, Shuicheng" , "Vivi, Rodrigo" , "Brost, Matthew" , "Tauro, Riana" , "Ceraolo Spurio, Daniele" , "Nerlige Ramappa, Umesh" , "Wajdeczko, Michal" Subject: Re: [PATCH 05/10] drm/xe: Move debug configfs entries to xe_configfs_debug.c Thread-Topic: [PATCH 05/10] drm/xe: Move debug configfs entries to xe_configfs_debug.c Thread-Index: AQHdMOfakUDRcPJmwEelKVA75BfUdrapFDcAgASYWAA= Date: Mon, 24 Aug 2026 20:28:59 +0000 Message-ID: <2c3c62987d33808c4a37376cc53472ccdfbe0b2e.camel@intel.com> References: <20260820210639.107524-12-stuart.summers@intel.com> <20260820210639.107524-17-stuart.summers@intel.com> <20260821221838.GH681121@mdroper-desk1.amr.corp.intel.com> In-Reply-To: <20260821221838.GH681121@mdroper-desk1.amr.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CY5PR11MB6320:EE_|SA1PR11MB8256:EE_ x-ms-office365-filtering-correlation-id: b3c9e25b-0d2f-4d17-c006-08df021e5448 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|23010399003|1800799024|366016|38070700021|6133799003|3023799007|56012099006|10067099003|5023799004|11063799006|4143699003|22082099003|18002099003; x-microsoft-antispam-message-info: 0tHPG1Hw4t27P8QMbGU8MECVjYJMZCP93ge4jGfsN5PpfOCzrlyzvDpkGnR4Xf8y9JsnpnXXtrF0lUzVGHxNiADm/2Exryx/8xv2BVoE0eDbEu1k9HCOjk4NWwB03pLXCjrk9e+49tZIBdmC8Y3hKOjN/7O3BGx77dk1W1bhCUa+2vvKwXpO2g3tRQB88A5KNkaThgXD4MU2+H4fV3qLyUSayaTta58SgpKFJ7jMYgzVmyEga9VsV02hnerIfK4hDAZnEKVy1jbOZE6bh6oWnSDicYq/elljyHmtKTHwYMdyXAOz/7bnJTals8uJw6PvJrhqb1c+isULYf7/kx2D2IE/kFj10yW9b6O4XV7HwnWp5nZa6pumP9Br7/D6zeBlmGNoFGluA9VsXhRuXGrX5qIitYImKFamhFQIAdnqx9Jrjp9ySM/FFYzJTftexkFEE08uxnDH5e4dcKckLclqj3UvWPbU5BDBGz8sj2bHXGULR5EaQYPAim/DhcncBAR3SwI1uV7Uv/J9/oitgKJbIm3gF3AfBtONTbOXablz2KFfgeyr5E77fAD+GeZe3Ntd5WReX8W2oP0re9qkkW/I4RAhGv0j64I94HuOo3Kq/9WzrphSliJTjr2vONtgV/oarzZGvsOIbKO92cYxMDS9mavsUrccqqjtr41kW8Vk6r5GHfWW6RV2SEFag6RlG02LIcRuu7nRb5p55zh5Sung7q4CTAK93HHiYSPJPT8R5Bc= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY5PR11MB6320.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(23010399003)(1800799024)(366016)(38070700021)(6133799003)(3023799007)(56012099006)(10067099003)(5023799004)(11063799006)(4143699003)(22082099003)(18002099003); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SE1Xd0xWMWdYeFZuSjQvUGNOaGpMV2xrQ0lSU0RuUkVkenpIVUE0czNLU3Fv?= =?utf-8?B?MlE2b3Rka01WemZHY1ErNEYvOExoQk9CZmxIUmVGSG1JaDlzZmhHbjNPL0tC?= =?utf-8?B?dG9YOTYxdmw1dHZRV1Y4akFFU244Q1g1QmZETXpzSnRWUUZFRlRkUS9KTVUv?= =?utf-8?B?MWFhWUdrMG9WRnJxSmFKWm1WZW0vanlmakQwYitnekhzSXZHQmFpYVM0TlFn?= =?utf-8?B?ejU0QytWZ0ZEaXNSTGQ4QVMxNzRUdW5QaGhKM2hydWF5aFllQk5OQTJqb1lv?= =?utf-8?B?VVhuQVVBdTVQbklRYUNCNkVPbVFwWWVtWCs3UGExVE1icGtvMUFCVDhBdXpT?= =?utf-8?B?eUlFakpCVWJySXpEOUU2d1RmazBRaEYvTEt4N1ZURzE1OEs5Vm1BR24yMzEw?= =?utf-8?B?UWhieGhFYlpqQlBIRzBEWFJ3Y2Q4N3U4aTZUWnNBcmV6TU5vTTl0Wm1GeGhS?= =?utf-8?B?TnlQVVV4YmtHR3NpNkxSdVZ3Zk1oRElJUzVUSXd3L3d1eHdCWTdmTE9EVGpU?= =?utf-8?B?cnB5cHRGZVFhL1FQWit0OVBMOElLbVQ2RVI0emdveDY4RldCT3Y2MnN0aWRk?= =?utf-8?B?K1V4VTQ0U2pRRXQrUnkwcTdCWmF4UkNhUC8xMUxjREhkUFVPTlB2WEtpNlA2?= =?utf-8?B?VzJhTGk4dy9DZVplK0piWlIwanVlNHhWRXpkT3hsTStnd1QreTNiREgyeEF3?= =?utf-8?B?UDQ4NllUOWFCK0NBMGc5WU9maXpZa1lJcWpmdjFMRUNwa1hhRmNTZnB0SEtO?= =?utf-8?B?ckNoamU2dGtCZ2IvWjFhcEJuU0MwVG9neWQ2ZFRuWHBnVnk2aDZBc0RNditB?= =?utf-8?B?Y1U0STB3aHFnaEJJYW1WSW1na0c3QmdvWW5yVnBWVGhZYTVrb09FZU5Wdnhs?= =?utf-8?B?emhPV3dqQ2ljWGVvemxBS1ZDem9TWWdkc0s1cjVFWkJLOGo2R0lxaXZ5Y25M?= =?utf-8?B?bnRwTEhtWmVmVFZDMlRSQ1ZCcFE5N1IwOEowUW5kREVvcGdCZ3d5TGhOU2pr?= =?utf-8?B?MzI3NC9uQzU2TmlkV1lFNzQxNmZTc3lWbWRWNHlnUW5QeSt3ZmdtdDRGYmtw?= =?utf-8?B?WmcwNUxCanA4VUpiNkE3ME1USGM0TnV4ajQ5U0lkc1hLbmtOL1RSam53UmNC?= =?utf-8?B?TE5BZFNuSS96NTN3aDNzQ1dZT2JCT1BsVzZyWFFnRDRCOEh3RHdOVlhGaUJH?= =?utf-8?B?VVFDc0hzNitGWTlUNW5QWEh3S2FLVy96cjhiWWZRU2pzbXUwRUtqbFpGamth?= =?utf-8?B?cXdEYUlRT0lIWnppSFlRaW5McTQrQ0ZkdlZCRWFjS0pyVUJlcGkvUCtQKzhk?= =?utf-8?B?ZTVGc2RyOENCY3Q5RFEwNlN4Q1FQWmwrRXRiakU5b3U0cVBYM1BLY2RCd3FJ?= =?utf-8?B?RE1SZ0ZEeVlIZmxFZ2V1VEdVb253ZVNEcFRXVFZxVVRpTUR2N3plQnhNcFd6?= =?utf-8?B?U3FTSDQ0ZlZrSkNzQzlBV3BjV01EakRic21QeUhYMUk3VU9yZWRaVlYrdC9y?= =?utf-8?B?eCtra0QydUxHQ094eXJQVDJ5SS9hRitpenRPMEN0OXZOdEUxaTlRZWdDdlNY?= =?utf-8?B?aDNFdVhPbU5SdFFzNTJHaVVKV2s3RGdWNGlreXY3UVN4TVhIUDU3bWNuaTND?= =?utf-8?B?aVJWZTlZYWF6ZU1CZE9CT2pwcksxR1RjeWd6dmROaXVDSWtoKzcrMjVNUVZ2?= =?utf-8?B?azBQZFRkZGpaS0UzY0NFbURTV1ZBSm1TNktpM042dk5ndWNJN2hCRlp0RGwv?= =?utf-8?B?QnROemdXd3l5c3RiV2s2S1prRkk3U3E3QVlmTDBnc2x1cU03ZDc4VlhIb2JT?= =?utf-8?B?b2Y0cXFGa0pac1FYRmtFU0FhRXNwNGFOOXRvSFg3T0RJeUJUOWpZam1xT1Fp?= =?utf-8?B?ZzdFTHk3M2FHaDRoa05aRFZITVFNR3hNUUdzSWxVTGhFN3JqaHJoSXBJYXFw?= =?utf-8?B?UnVEZTNmaXQ3NmwzelgrSVVLUmhoeUdzTWkzWkc1NzdDM3VHei82K01Ta2Jy?= =?utf-8?B?WUZtV0pwMDRWRXhYVytsbmNSKzFoN2JwWHJsbFRnSlRkOEdyMTJKbXk4Sk1j?= =?utf-8?B?VWxLbWRnbDIySks5NlZFZmh0OVFuOWd3djQxT0lJdXNiWTYybmkxR0g1VVZK?= =?utf-8?B?alJzYStwaTNBRzdUY3RwR3ltT0RibG5rYVhPOUM1OGhKT1VxZ0hBSWVzN1lY?= =?utf-8?B?M2NHZStkemdQcG1xOGhKZGFwWTViWFRCNld5ZnI0cll3anhKU05IUmRFZDdk?= =?utf-8?B?SlkwaUNMRzhwZVcrd0R4QWxOcThtS2xoTFUxU0VpTVJ0ZVZqbGJiQkR2WE9t?= =?utf-8?B?ejd6NFRjMXFGL3l1Ly85MW1GekF1U0tuUWlsck5GWTJBYlNpUjhuOEwra1Nx?= =?utf-8?Q?2U1ucqstPopIeByY=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <661F82074DC48F4E8AB1F10D010DD92B@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: xYWMqQcT1Tt1zhj9bsy5sfhvSiuLGf8eeT6JqeMTgz6hOOwcT/33aXnSrT6tK+EdNL2NCcrfFG+soCpkmbIPhPH5xfA9wqNuoHQhc8YTW3Q7SH5VVIkvyaBKCs069W/FyKI/YImcP33Vsr1wOltBPy/NOdjkukWvj7wtplA+H2fhLaa4/kms0pWXB0d4Y9i8Wc0JqDhKLPsRopZdQuRvhlghZZJiVW3MBwfyh4P7R/eHY28x12Fpj0ACz9QQtvo2R+z9RLNrrCPaslnQ2cfRKvvNlECVnceJH1ThfT4+QSjXsgpKqVxdDXdz4oA5l1GJHLjPPP2z2Y1gTwpsDjXVig== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY5PR11MB6320.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b3c9e25b-0d2f-4d17-c006-08df021e5448 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Aug 2026 20:28:59.5888 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: teUGvw7SzUccXaLuo89mKPKeu7qJpIbr6NokIja90UHYT13Jwd+9yncZVfE84VvXu9P2padZnds8qfARCkUPLMjzq7xPIY/T4I+hsLCKGYg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB8256 X-OriginatorOrg: intel.com X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" T24gRnJpLCAyMDI2LTA4LTIxIGF0IDE1OjE4IC0wNzAwLCBNYXR0IFJvcGVyIHdyb3RlOgo+IE9u IFRodSwgQXVnIDIwLCAyMDI2IGF0IDA5OjA2OjQ0UE0gKzAwMDAsIFN0dWFydCBTdW1tZXJzIHdy b3RlOgo+ID4gTW92ZSB0aGUgZGVidWcgc3BlY2lmaWMgY29uZmlnZnMgYXR0cmlidXRlcyBpbnRv IHRoZSBuZXcKPiA+IHhlX2NvbmZpZ2ZzX2RlYnVnLmMgZmlsZSB1bmRlciBhIG5ldyBkZWJ1ZyBj b25maWdmcyBzdWJkaXJlY3RvcnkuCj4gPiBFbnN1cmUgdGhlc2UgYXJlIHdyYXBwZWQgaW4gQ09O RklHX0RSTV9YRV9ERUJVRyB0byBhbGxvdyBmaW5lcgo+ID4gZ3JhaW5lZAo+ID4gZGVidWcgY2hh bmdlcyBvdXRzaWRlIG9mIG1vcmUgQUJJIHNwZWNpZmljIGNvbmZpZ2ZzIGVudHJpZXMuCj4gPiAK PiA+IFNpZ25lZC1vZmYtYnk6IFN0dWFydCBTdW1tZXJzIDxzdHVhcnQuc3VtbWVyc0BpbnRlbC5j b20+Cj4gPiBBc3Npc3RlZC1ieTogQ29waWxvdDpjbGF1ZGUtc29ubmV0LTQuNixjbGF1ZGUtc29u bmV0LTUsY2xhdWRlLW9wdXMtCj4gPiA1Cj4gPiAtLS0KPiA+IMKgZHJpdmVycy9ncHUvZHJtL3hl L3hlX2NvbmZpZ2ZzLmPCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDk5MSArKy0tLS0tLS0tLS0tLS0t LQo+ID4gLS0tLQo+ID4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnMuaMKgwqDCoMKg wqDCoMKgwqDCoMKgIHzCoCA4OCArLQo+ID4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmln ZnNfZGVidWcuY8KgwqDCoMKgIHwgOTU2Cj4gPiArKysrKysrKysrKysrKysrKysrKwo+ID4gwqBk cml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnNfZGVidWcuaMKgwqDCoMKgIHzCoCAzOSArLQo+ ID4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnNfdHlwZXMuaMKgwqDCoMKgIHzCoCAx OCArLQo+ID4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjLmPCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfYWRz LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+ID4gwqBkcml2ZXJzL2dwdS9kcm0v eGUveGVfaHdfZW5naW5lLmPCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gPiDCoGRyaXZl cnMvZ3B1L2RybS94ZS94ZV9scmMuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDC oCAxICsKPiA+IMKgZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+ID4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVfcHNtaS5j wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPiA+IMKgZHJpdmVycy9ncHUv ZHJtL3hlL3hlX3J0cC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+ ID4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVfc3Vydml2YWJpbGl0eV9tb2RlLmMgfMKgwqAgMSAr Cj4gPiDCoDEzIGZpbGVzIGNoYW5nZWQsIDExMzQgaW5zZXJ0aW9ucygrKSwgOTY2IGRlbGV0aW9u cygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2NvbmZpZ2Zz LmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2NvbmZpZ2ZzLmMKPiA+IGluZGV4IDMzYWVh MTE1MGM4Ni4uMTExYWFjY2U4YTg0IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hl L3hlX2NvbmZpZ2ZzLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9jb25maWdmcy5j Cj4gPiBAQCAtNiwxNyArNiwxNCBAQAo+ID4gwqAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Cj4g PiDCoCNpbmNsdWRlIDxsaW51eC9jb25maWdmcy5oPgo+ID4gwqAjaW5jbHVkZSA8bGludXgvY2xl YW51cC5oPgo+ID4gLSNpbmNsdWRlIDxsaW51eC9maW5kLmg+Cj4gPiDCoCNpbmNsdWRlIDxsaW51 eC9pbml0Lmg+Cj4gPiDCoCNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+IMKgI2luY2x1ZGUg PGxpbnV4L3BjaS5oPgo+ID4gwqAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Cj4gPiDCoAo+ID4g LSNpbmNsdWRlICJpbnN0cnVjdGlvbnMveGVfbWlfY29tbWFuZHMuaCIKPiA+IMKgI2luY2x1ZGUg InhlX2NvbmZpZ2ZzLmgiCj4gPiDCoCNpbmNsdWRlICJ4ZV9jb25maWdmc19kZWJ1Zy5oIgo+ID4g wqAjaW5jbHVkZSAieGVfZGVmYXVsdHMuaCIKPiA+IC0jaW5jbHVkZSAieGVfZ3RfdHlwZXMuaCIK PiA+IMKgI2luY2x1ZGUgInhlX21vZHVsZS5oIgo+ID4gwqAKPiA+IMKgLyoqCj4gPiBAQCAtNTAs MTYgKzQ3LDkgQEAKPiA+IMKgICoKPiA+IMKgICrCoMKgwqDCoMKgL3N5cy9rZXJuZWwvY29uZmln L3hlLwo+ID4gwqAgKsKgwqDCoMKgwqDilJzilIDilIAgMDAwMDowMDowMi4wCj4gPiAtICrCoMKg wqDCoMKg4pSCwqDCoCDilJTilIDilIAgLi4uCj4gPiAtICrCoMKgwqDCoMKg4pSc4pSA4pSAIDAw MDA6MDA6MDIuMQo+ID4gLSAqwqDCoMKgwqDCoOKUgsKgwqAg4pSU4pSA4pSAIC4uLgo+ID4gLSAq wqDCoMKgwqDCoDoKPiA+IC0gKsKgwqDCoMKgwqDilJTilIDilIAgMDAwMDowMzowMC4wCj4gPiAt ICrCoMKgwqDCoMKgwqDCoMKgIOKUnOKUgOKUgCBlbmdpbmVzX2FsbG93ZWQKPiA+IC0gKsKgwqDC oMKgwqDCoMKgwqAg4pSc4pSA4pSAIGd0X3R5cGVzX2FsbG93ZWQKPiA+IC0gKsKgwqDCoMKgwqDC oMKgwqAg4pSc4pSA4pSAIGVuYWJsZV9tdWx0aV9xdWV1ZQo+ID4gLSAqwqDCoMKgwqDCoMKgwqDC oCDilJzilIDilIAgZW5hYmxlX3BzbWkKPiA+IC0gKsKgwqDCoMKgwqDCoMKgwqAg4pSU4pSA4pSA IHN1cnZpdmFiaWxpdHlfbW9kZQo+ID4gKyAqwqDCoMKgwqDCoOKUgsKgwqAg4pSU4pSA4pSAIC4u Lgo+ID4gKyAqwqDCoMKgwqDCoOKUlOKUgOKUgCAwMDAwOjAwOjAyLjEKPiA+ICsgKsKgwqDCoMKg wqDCoMKgwqAg4pSU4pSA4pSAIC4uLgo+ID4gwqAgKgo+ID4gwqAgKiBBZnRlciBjb25maWd1cmlu ZyB0aGUgYXR0cmlidXRlcyBhcyBwZXIgbmV4dCBzZWN0aW9uLCB0aGUKPiA+IGRldmljZSBjYW4g YmUKPiA+IMKgICogcHJvYmVkIHdpdGg6Ogo+ID4gQEAgLTcxLDE1NyArNjEsNiBAQAo+ID4gwqAg KiBDb25maWd1cmUgQXR0cmlidXRlcwo+ID4gwqAgKiA9PT09PT09PT09PT09PT09PT09PQo+ID4g wqAgKgo+ID4gLQo+ID4gLSAqIENvbnRleHQgcmVzdG9yZSBCQgo+ID4gLSAqIC0tLS0tLS0tLS0t LS0tLS0tLQo+ID4gLSAqCj4gPiAtICogQWxsb3cgdG8gZXhlY3V0ZSBhIGJhdGNoIGJ1ZmZlciBk dXJpbmcgYW55IGNvbnRleHQgc3dpdGNoZXMuCj4gPiBXaGVuIHRoZQo+ID4gLSAqIEdQVSBpcyBy ZXN0b3JpbmcgdGhlIGNvbnRleHQsIGl0IGV4ZWN1dGVzIGFkZGl0aW9uYWwgY29tbWFuZHMuCj4g PiBJdCdzIHVzZWZ1bAo+ID4gLSAqIGZvciB0ZXN0aW5nIGFkZGl0aW9uYWwgd29ya2Fyb3VuZHMg YW5kIHZhbGlkYXRpbmcgY2VydGFpbiBIVwo+ID4gYmVoYXZpb3JzOiBpdCdzCj4gPiAtICogbm90 IGludGVuZGVkIGZvciBub3JtYWwgZXhlY3V0aW9uIGFuZCB3aWxsIHRhaW50IHRoZSBrZXJuZWwK PiA+IHdpdGggVEFJTlRfVEVTVAo+ID4gLSAqIHdoZW4gdXNlZC4KPiA+IC0gKgo+ID4gLSAqIFRo ZSBzeW50YXggYWxsb3dzIHRvIHBhc3Mgc3RyYWlnaHQgaW5zdHJ1Y3Rpb25zIHRvIGJlIGV4ZWN1 dGVkCj4gPiBieSB0aGUgZW5naW5lCj4gPiAtICogaW4gYSBiYXRjaCBidWZmZXIgb3Igc2V0IHNw ZWNpZmljIHJlZ2lzdGVycy4KPiA+IC0gKgo+ID4gLSAqICMuIEdlbmVyaWMgaW5zdHJ1Y3Rpb246 Ogo+ID4gLSAqCj4gPiAtICrCoMKgwqDCoMKgPGVuZ2luZS1jbGFzcz4gY21kIDxpbnN0cj4gW1tk d29yZDBdIFtkd29yZDFdIFsuLi5dXQo+ID4gLSAqCj4gPiAtICogIy4gU2ltcGxlIHJlZ2lzdGVy IHNldHRpbmc6Ogo+ID4gLSAqCj4gPiAtICrCoMKgwqDCoMKgPGVuZ2luZS1jbGFzcz4gcmVnIDxh ZGRyZXNzPiA8dmFsdWU+Cj4gPiAtICoKPiA+IC0gKiBDb21tYW5kcyBhcmUgc2F2ZWQgcGVyIGVu Z2luZSBjbGFzczogYWxsIGluc3RhbmNlcyBvZiB0aGF0Cj4gPiBjbGFzcyB3aWxsIGV4ZWN1dGUK PiA+IC0gKiB0aG9zZSBjb21tYW5kcyBkdXJpbmcgY29udGV4dCBzd2l0Y2guIFRoZSBpbnN0cnVj dGlvbiwgZHdvcmQKPiA+IGFyZ3VtZW50cywKPiA+IC0gKiBhZGRyZXNzZXMgYW5kIHZhbHVlcyBh cmUgaW4gaGV4IGZvcm1hdCBsaWtlIGluIHRoZSBleGFtcGxlcwo+ID4gYmVsb3cuCj4gPiAtICoK PiA+IC0gKiAjLiBFeGVjdXRlIGEgTFJJIGNvbW1hbmQgdG8gd3JpdGUgMHhERUFEQkVFRiB0byBy ZWdpc3RlciAweDRmMTAKPiA+IGFmdGVyIHRoZQo+ID4gLSAqwqDCoMKgIG5vcm1hbCBjb250ZXh0 IHJlc3RvcmU6Ogo+ID4gLSAqCj4gPiAtICrCoMKgwqDCoMKgIyBlY2hvICdyY3MgY21kIDExMDAw MDAxIDRGMTAwIERFQURCRUVGJyBcCj4gPiAtICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD4K PiA+IC9zeXMva2VybmVsL2NvbmZpZy94ZS8wMDAwOjAzOjAwLjAvY3R4X3Jlc3RvcmVfcG9zdF9i Ygo+ID4gLSAqCj4gPiAtICogIy4gRXhlY3V0ZSBhIExSSSBjb21tYW5kIHRvIHdyaXRlIDB4REVB REJFRUYgdG8gcmVnaXN0ZXIgMHg0ZjEwCj4gPiBhdCB0aGUKPiA+IC0gKsKgwqDCoCBiZWdpbm5p bmcgb2YgdGhlIGNvbnRleHQgcmVzdG9yZTo6Cj4gPiAtICoKPiA+IC0gKsKgwqDCoMKgwqAjIGVj aG8gJ3JjcyBjbWQgMTEwMDAwMDEgNEYxMDAgREVBREJFRUYnIFwKPiA+IC0gKsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgPgo+ID4gL3N5cy9rZXJuZWwvY29uZmlnL3hlLzAwMDA6MDM6MDAuMC9j dHhfcmVzdG9yZV9taWRfYmIKPiA+IC0KPiA+IC0gKiAjLiBMb2FkIGNlcnRhaW4gdmFsdWVzIGlu IGEgY291cGxlIG9mIHJlZ2lzdGVycyAoaXQgY2FuIGJlIHVzZWQKPiA+IGFzIGEgc2ltcGxlcgo+ ID4gLSAqwqDCoMKgIGFsdGVybmF0aXZlIHRvIHRoZSBgY21kYCkgYWN0aW9uOjoKPiA+IC0gKgo+ ID4gLSAqwqDCoMKgwqDCoCMgY2F0ID4KPiA+IC9zeXMva2VybmVsL2NvbmZpZy94ZS8wMDAwOjAz OjAwLjAvY3R4X3Jlc3RvcmVfcG9zdF9iYiA8PEVPRgo+ID4gLSAqwqDCoMKgwqDCoHJjcyByZWcg NEYxMDAgREVBREJFRUYKPiA+IC0gKsKgwqDCoMKgwqByY3MgcmVnIDRGMTA0IEZGRkZGRkZGCj4g PiAtICrCoMKgwqDCoMKgRU9GCj4gPiAtICoKPiA+IC0gKsKgwqDCoCAuLiBub3RlOjoKPiA+IC0g Kgo+ID4gLSAqwqDCoMKgwqDCoMKgIFdoZW4gdXNpbmcgbXVsdGlwbGUgbGluZXMsIG1ha2Ugc3Vy ZSB0byB1c2UgYSBjb21tYW5kCj4gPiB0aGF0IGlzCj4gPiAtICrCoMKgwqDCoMKgwqAgaW1wbGVt ZW50ZWQgd2l0aCBhIHNpbmdsZSB3cml0ZSBzeXNjYWxsLCBsaWtlIEhFUkVET0MuCj4gPiAtICoK PiA+IC0gKiBDdXJyZW50bHkgdGhpcyBpcyBpbXBsZW1lbnRlZCBvbmx5IGZvciBwb3N0IGFuZCBt aWQgY29udGV4dAo+ID4gcmVzdG9yZSBhbmQKPiA+IC0gKiB0aGVzZSBhdHRyaWJ1dGVzIGNhbiBv bmx5IGJlIHNldCBiZWZvcmUgYmluZGluZyB0byB0aGUgZGV2aWNlLgo+ID4gLSAqCj4gPiAtICog QWxsb3dlZCBlbmdpbmVzOgo+ID4gLSAqIC0tLS0tLS0tLS0tLS0tLS0KPiA+IC0gKgo+ID4gLSAq IEFsbG93IG9ubHkgYSBzZXQgb2YgZW5naW5lKHMpIHRvIGJlIGF2YWlsYWJsZSwgZGlzYWJsaW5n IHRoZQo+ID4gb3RoZXIgZW5naW5lcwo+ID4gLSAqIGV2ZW4gaWYgdGhleSBhcmUgYXZhaWxhYmxl IGluIGhhcmR3YXJlLiBUaGlzIGlzIGFwcGxpZWQgYWZ0ZXIKPiA+IEhXIGZ1c2VzIGFyZQo+ID4g LSAqIGNvbnNpZGVyZWQgb24gZWFjaCB0aWxlLiBFeGFtcGxlczoKPiA+IC0gKgo+ID4gLSAqIEFs bG93IG9ubHkgb25lIHJlbmRlciBhbmQgb25lIGNvcHkgZW5naW5lcywgbm90aGluZyBlbHNlOjoK PiA+IC0gKgo+ID4gLSAqwqDCoMKgwqDCoCMgZWNobyAncmNzMCxiY3MwJyA+Cj4gPiAvc3lzL2tl cm5lbC9jb25maWcveGUvMDAwMDowMzowMC4wL2VuZ2luZXNfYWxsb3dlZAo+ID4gLSAqCj4gPiAt ICogQWxsb3cgb25seSBjb21wdXRlIGVuZ2luZXMgYW5kIGZpcnN0IGNvcHkgZW5naW5lOjoKPiA+ IC0gKgo+ID4gLSAqwqDCoMKgwqDCoCMgZWNobyAnY2NzKixiY3MwJyA+Cj4gPiAvc3lzL2tlcm5l bC9jb25maWcveGUvMDAwMDowMzowMC4wL2VuZ2luZXNfYWxsb3dlZAo+ID4gLSAqCj4gPiAtICog Tm90ZSB0aGF0IHRoZSBlbmdpbmUgbmFtZXMgYXJlIHRoZSBwZXItR1QgaGFyZHdhcmUgbmFtZXMu IE9uCj4gPiBtdWx0aS10aWxlCj4gPiAtICogcGxhdGZvcm1zLCB3cml0aW5nIGBgcmNzMCxiY3Mw YGAgdG8gdGhpcyBmaWxlIHdvdWxkIGFsbG93IHRoZQo+ID4gZmlyc3QgcmVuZGVyCj4gPiAtICog YW5kIGNvcHkgZW5naW5lcyBvbiBlYWNoIHRpbGUuCj4gPiAtICoKPiA+IC0gKiBUaGUgcmVxdWVz dGVkIGNvbmZpZ3VyYXRpb24gbWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlCj4gPiBwbGF0Zm9y bSBhbmQgZHJpdmVyCj4gPiAtICogbWF5IGZhaWwgdG8gcHJvYmUuIEZvciBleGFtcGxlOiBpZiBh dCBsZWFzdCBvbmUgY29weSBlbmdpbmUgaXMKPiA+IGV4cGVjdGVkIHRvIGJlCj4gPiAtICogYXZh aWxhYmxlIGZvciBtaWdyYXRpb25zLCBidXQgaXQncyBkaXNhYmxlZC4gVGhpcyBpcyBpbnRlbmRl ZAo+ID4gZm9yIGRlYnVnZ2luZwo+ID4gLSAqIHB1cnBvc2VzIG9ubHkuCj4gPiAtICoKPiA+IC0g KiBUaGlzIGF0dHJpYnV0ZSBjYW4gb25seSBiZSBzZXQgYmVmb3JlIGJpbmRpbmcgdG8gdGhlIGRl dmljZS4KPiA+IC0gKgo+ID4gLSAqIEFsbG93ZWQgR1QgdHlwZXM6Cj4gPiAtICogLS0tLS0tLS0t LS0tLS0tLS0KPiA+IC0gKgo+ID4gLSAqIEFsbG93IG9ubHkgc3BlY2lmaWMgdHlwZXMgb2YgR1Rz IHRvIGJlIGRldGVjdGVkIGFuZCBpbml0aWFsaXplZAo+ID4gYnkgdGhlCj4gPiAtICogZHJpdmVy LsKgIEFueSBjb21iaW5hdGlvbiBvZiBHVCB0eXBlcyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCwK PiA+IGFsdGhvdWdoCj4gPiAtICogc29tZSBzZXR0aW5ncyB3aWxsIGNhdXNlIHRoZSBkZXZpY2Ug dG8gZmFpbCB0byBwcm9iZS4KPiA+IC0gKgo+ID4gLSAqIFdyaXRlcyBzdXBwb3J0IGJvdGggY29t bWEtIGFuZCBuZXdsaW5lLXNlcGFyYXRlZCBpbnB1dCBmb3JtYXQuCj4gPiBSZWFkcwo+ID4gLSAq IHdpbGwgYWx3YXlzIHJldHVybiBvbmUgR1QgdHlwZSBwZXIgbGluZS4gInByaW1hcnkiIGFuZCAi bWVkaWEiCj4gPiBhcmUgdGhlCj4gPiAtICogR1QgdHlwZSBuYW1lcyBzdXBwb3J0ZWQgYnkgdGhp cyBpbnRlcmZhY2UuCj4gPiAtICoKPiA+IC0gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gb25seSBiZSBz ZXQgYmVmb3JlIGJpbmRpbmcgdG8gdGhlIGRldmljZS4KPiA+IC0gKgo+ID4gLSAqIEV4YW1wbGVz Ogo+ID4gLSAqCj4gPiAtICogQWxsb3cgYm90aCBwcmltYXJ5IGFuZCBtZWRpYSBHVHMgdG8gYmUg aW5pdGlhbGl6ZWQgYW5kIHVzZWQuwqAKPiA+IFRoaXMgbWF0Y2hlcwo+ID4gLSAqIHRoZSBkcml2 ZXIncyBkZWZhdWx0IGJlaGF2aW9yOjoKPiA+IC0gKgo+ID4gLSAqwqDCoMKgwqDCoCMgZWNobyAn cHJpbWFyeSxtZWRpYScgPgo+ID4gL3N5cy9rZXJuZWwvY29uZmlnL3hlLzAwMDA6MDM6MDAuMC9n dF90eXBlc19hbGxvd2VkCj4gPiAtICoKPiA+IC0gKiBBbGxvdyBvbmx5IHRoZSBwcmltYXJ5IEdU IG9mIGVhY2ggdGlsZSB0byBiZSBpbml0aWFsaXplZCBhbmQKPiA+IHVzZWQsCj4gPiAtICogZWZm ZWN0aXZlbHkgZGlzYWJsaW5nIHRoZSBtZWRpYSBHVCBpZiBpdCBleGlzdHMgb24gdGhlCj4gPiBw bGF0Zm9ybTo6Cj4gPiAtICoKPiA+IC0gKsKgwqDCoMKgwqAjIGVjaG8gJ3ByaW1hcnknID4KPiA+ IC9zeXMva2VybmVsL2NvbmZpZy94ZS8wMDAwOjAzOjAwLjAvZ3RfdHlwZXNfYWxsb3dlZAo+ID4g LSAqCj4gPiAtICogQWxsb3cgb25seSB0aGUgbWVkaWEgR1Qgb2YgZWFjaCB0aWxlIHRvIGJlIGlu aXRpYWxpemVkIGFuZAo+ID4gdXNlZCwKPiA+IC0gKiBlZmZlY3RpdmVseSBkaXNhYmxpbmcgdGhl IHByaW1hcnkgR1QuwqAgKipUaGlzIGNvbmZpZ3VyYXRpb24KPiA+IHdpbGwgY2F1c2UKPiA+IC0g KiBkZXZpY2UgcHJvYmUgZmFpbHVyZSBvbiBhbGwgY3VycmVudCBwbGF0Zm9ybXMsIGJ1dCBtYXkg YmUKPiA+IGFsbG93ZWQgb24KPiA+IC0gKiBpZ3B1IHBsYXRmb3JtcyBpbiB0aGUgZnV0dXJlKio6 Ogo+ID4gLSAqCj4gPiAtICrCoMKgwqDCoMKgIyBlY2hvICdtZWRpYScgPgo+ID4gL3N5cy9rZXJu ZWwvY29uZmlnL3hlLzAwMDA6MDM6MDAuMC9ndF90eXBlc19hbGxvd2VkCj4gPiAtICoKPiA+IC0g KiBEaXNhYmxlIGFsbCBHVHMuwqAgT25seSBvdGhlciBHUFUgSVAgKHN1Y2ggYXMgZGlzcGxheSkg aXMKPiA+IHBvdGVudGlhbGx5IHVzYWJsZS4KPiA+IC0gKiAqKlRoaXMgY29uZmlndXJhdGlvbiB3 aWxsIGNhdXNlIGRldmljZSBwcm9iZSBmYWlsdXJlIG9uIGFsbAo+ID4gY3VycmVudAo+ID4gLSAq IHBsYXRmb3JtcywgYnV0IG1heSBiZSBhbGxvd2VkIG9uIGlncHUgcGxhdGZvcm1zIGluIHRoZQo+ ID4gZnV0dXJlKio6Ogo+ID4gLSAqCj4gPiAtICrCoMKgwqDCoMKgIyBlY2hvICcnID4KPiA+IC9z eXMva2VybmVsL2NvbmZpZy94ZS8wMDAwOjAzOjAwLjAvZ3RfdHlwZXNfYWxsb3dlZAo+ID4gLSAq Cj4gPiAtICogRW5hYmxlIG11bHRpLXF1ZXVlCj4gPiAtICogLS0tLS0tLS0tLS0tLS0tLS0tCj4g PiAtICoKPiA+IC0gKiBNdWx0aS1xdWV1ZSBzdXBwb3J0IG9uIHRoZSBkZXZpY2UgaXMgZW5hYmxl ZCBieSBkZWZhdWx0IHdoZXJlCj4gPiB0aGUKPiA+IC0gKiBoYXJkd2FyZSBzdXBwb3J0cyBpdC4g V3JpdGluZyAwIGZvcmNlLWRpc2FibGVzIG11bHRpLXF1ZXVlCj4gPiBzdXBwb3J0Ogo+ID4gLSAq IG11bHRpLXF1ZXVlIGV4ZWMtcXVldWUgZ3JvdXAgY3JlYXRpb24gdmlhIGlvY3RsIGlzIHJlZnVz ZWQsIGFuZAo+ID4gdGhlCj4gPiAtICogR3VDIGZlYXR1cmUgaXMgZGlzYWJsZWQ6Ogo+ID4gLSAq Cj4gPiAtICrCoMKgwqDCoMKgIyBlY2hvIDAgPgo+ID4gL3N5cy9rZXJuZWwvY29uZmlnL3hlLzAw MDA6MDM6MDAuMC9lbmFibGVfbXVsdGlfcXVldWUKPiA+IC0gKgo+ID4gLSAqIFRoaXMgYXR0cmli dXRlIGNhbiBvbmx5IGJlIHNldCBiZWZvcmUgYmluZGluZyB0byB0aGUgZGV2aWNlLgo+ID4gLSAq Cj4gPiAtICogUFNNSQo+ID4gLSAqIC0tLS0KPiA+IC0gKgo+ID4gLSAqIEVuYWJsZSBleHRyYSBk ZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzIHRvIHRyYWNlIGVuZ2luZSBleGVjdXRpb24uCj4gPiBPbmx5 IHVzZWZ1bAo+ID4gLSAqIGR1cmluZyBlYXJseSBwbGF0Zm9ybSBlbmFibGluZyBhbmQgcmVxdWly ZXMgYWRkaXRpb25hbCBoYXJkd2FyZQo+ID4gY29ubmVjdGVkLgo+ID4gLSAqIE9uY2UgaXQncyBl bmFibGVkLCBhZGRpdGlvbmFscyBXQXMgYXJlIGFkZGVkIGFuZCBydW50aW1lCj4gPiBjb25maWd1 cmF0aW9uIGlzCj4gPiAtICogZG9uZSB2aWEgZGVidWdmcy4gRXhhbXBsZSB0byBlbmFibGUgaXQ6 Ogo+ID4gLSAqCj4gPiAtICrCoMKgwqDCoMKgIyBlY2hvIDEgPiAvc3lzL2tlcm5lbC9jb25maWcv eGUvMDAwMDowMzowMC4wL2VuYWJsZV9wc21pCj4gPiAtICoKPiA+IC0gKiBUaGlzIGF0dHJpYnV0 ZSBjYW4gb25seSBiZSBzZXQgYmVmb3JlIGJpbmRpbmcgdG8gdGhlIGRldmljZS4KPiA+IC0gKgo+ ID4gLSAqIFN1cnZpdmFiaWxpdHkgbW9kZToKPiA+IC0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tCj4g PiAtICoKPiA+IC0gKiBFbmFibGUgc3Vydml2YWJpbGl0eSBtb2RlIG9uIHN1cHBvcnRlZCBjYXJk cy4gVGhpcyBzZXR0aW5nIG9ubHkKPiA+IHRha2VzCj4gPiAtICogZWZmZWN0IHdoZW4gcHJvYmlu ZyB0aGUgZGV2aWNlLiBFeGFtcGxlIHRvIGVuYWJsZSBpdDo6Cj4gCj4gSSBkaWRuJ3QgcmV2aWV3 IHRoZSBjb2RlIG1vdmVtZW50IGluIHRoaXMgcGF0Y2ggaW4gZGVwdGgsIGJ1dCB0aGUgb25lCj4g dGhpbmcgdGhhdCBJJ20gdW5jZXJ0YWluIGFib3V0IGlzIHdoZXRoZXIgc3Vydml2YWJpbGl0eSBt b2RlIHNob3VsZAo+IGhhdmUKPiBiZWVuIHN3ZXB0IHVwIGluIHRoaXMgbW92ZS7CoCBNeSB1bmRl cnN0YW5kaW5nIGlzIHRoYXQgdW5saWtlIHRoZQo+IG90aGVyCj4gb3B0aW9ucyB3aGljaCBhcmUg bWVhbnQgZm9yIGRldmVsb3BlcnMgaGFja2luZyBvbiB0aGUgZHJpdmVyLAo+IGNvbmZpZ3VyYWJs ZSBzdXJ2aXZhYmlsaXR5IG1vZGUgaXMgYSB0cnVlIHByb2R1Y3Rpb24gZmVhdHVyZSBpbnRlbmRl ZAo+IGZvciBlbmQgdXNlcnMgdG8gZ2V0IHRoZSBtaW5pbWFsIGRyaXZlciBzdXBwb3J0IG5lY2Vz c2FyeSB0byBkZWFsCj4gd2l0aCBhCj4gYmFkIGZpcm13YXJlIGZsYXNoLCBmYWlsaW5nIGhhcmR3 YXJlLCBldGMuwqAgSSBrbm93IHRoZXJlIGFyZSBjYXNlcwo+IHdoZXJlCj4gdGhlIGRyaXZlciBj YW4gYXV0by1kZXRlY3QgdGhlIG5lZWQgdG8gZW50ZXIgc3Vydml2YWJpbGl0eSBtb2RlCj4gd2l0 aG91dAo+IHRoZSBjb25maWdmcyBpbnRlcmZhY2UgKGkuZS4sIHZhcmlvdXMgUkFTIGVycm9yIHJl cG9ydHMgYW5kIHN1Y2gpLAo+IGJ1dCBJCj4gdGhvdWdodCBtYW51YWwgZW50cnkgdGhyb3VnaCBj b25maWdmcyB3YXMgc3RpbGwgc29tZXRoaW5nIHVzZXJzIG1heQo+IG5lZWQKPiBpbiBzb21lIGNh c2VzP8KgIElmIHNvIHRoYXQgd291bGQgbWVhbiB3ZSBzaG91bGQga2VlcCB0aGlzIGF2YWlsYWJs ZQo+IGV2ZW4KPiB3aGVuIHRoZSBkZWJ1ZyBvcHRpb25zIGFyZW4ndCBjb21waWxlZCBpbi4KPiAK PiArQ2MgUmlhbmEgaW4gY2FzZSBteSB1bmRlcnN0YW5kaW5nIGlzIG9mZi4KClllYWggd291bGQg YXBwcmVjaWF0ZSBmZWVkYmFjayB0aGVyZSBSaWFuYS4gTXkgdW5kZXJzdGFuZGluZyBvZgpzdXJ2 aXZhYmlsaXR5IG1vZGUgaXMgd2Ugd2FudCB0aGlzIHRvIGFsbG93IHVzIHRvIGNvbnRpbnVlIG9w ZXJhdGlvbgpmb3IgYSB3aGlsZSB0byBkZWJ1ZyBpc3N1ZXMgd2hlbiB0aGUgaGFyZHdhcmUgaXMg c2V2ZXJlbHkgbWlzYmVoYXZpbmcuClRoaXMgaXNuJ3QgYSBub3JtYWwgY3VzdG9tZXIgdXNlIGNh c2UuCgpNeSB0aG91Z2h0IGxvbmdlciB0ZXJtIGhlcmUgaXMgd2UnZCB0dXJuIHRoaXMgaW50byBh IGJpdCBtYXAgdGhhdAphbGxvd2VkIHZhcmlvdXMgaGFyZHdhcmUgb3Igc29mdHdhcmUgaXNvbGF0 aW9uIGNvbmZpZ3VyYXRpb25zLiBXZSdsbAphbHNvIGhhdmUgdGhlIHBlci1mZWF0dXJlIGNvbmZp Z2ZzIGVudHJpZXMsIGJ1dCB0aGUgc3Vydml2YWJpbGl0eSBtb2RlCmNvdWxkIGJlIHVzZWQgdG8g ZWFzaWx5IGlzb2xhdGUgYmFzZWQgb24gYSBoaWdoZXIgbGV2ZWwgaXNvbGF0aW9uCnNjaGVtZSB0 aGF0IGRvZXNuJ3QgcmVxdWlyZSB0aGUgcGVyc29uIGRlYnVnZ2luZyB0byBmdWxseSB1bmRlcnN0 YW5kCmFsbCB0aGUgZGlmZmVyZW50IHVuZGVybHlpbmcgZmVhdHVyZXMgYmVpbmcgZGlzYWJsZWQg aWYgdGhhdCBtYWtlcwpzZW5zZS4KClRoZSBmbGlwIHNpZGUgb2YgdGhpcyBjb3VsZCBiZSB0aGF0 IHdlIHJlYWxseSB3YW50IHRvIHJlcXVpcmUgdXNlcnMgdG8KYmUgbW9yZSBzdXJnaWNhbCBhYm91 dCBob3cgdGhleSBlbmFibGUvZGlzYWJsZSBkaWZmZXJlbnQgZmVhdHVyZXMuIEluCnRoYXQgY2Fz ZSwgSSdkIGFyZ3VlIHdlIHJlYWxseSBzaG91bGQgZHJvcCBzdXJ2aXZhYmlsaXR5IG1vZGUKY29t cGxldGVseSBhbmQgdHVybiBpdCBpbnRvIGFuICJlbmFibGVfcHVuaXQiIGFuZCB2YXJpb3VzIG90 aGVyIHJlbGF0ZWQKY29uZmlndXJhdGlvbnMuCgpUaGFua3MsClN0dWFydAoKPiAKPiAKPiBNYXR0 Cj4gCj4gPiAtICoKPiA+IC0gKsKgwqDCoMKgwqAjIGVjaG8gMSA+Cj4gPiAvc3lzL2tlcm5lbC9j b25maWcveGUvMDAwMDowMzowMC4wL3N1cnZpdmFiaWxpdHlfbW9kZQo+ID4gLSAqCj4gPiAtICog VGhpcyBhdHRyaWJ1dGUgY2FuIG9ubHkgYmUgc2V0IGJlZm9yZSBiaW5kaW5nIHRvIHRoZSBkZXZp Y2UuCj4gPiAtICoKPiA+IMKgICogTWF4IFNSLUlPViBWaXJ0dWFsIEZ1bmN0aW9ucwo+ID4gwqAg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiDCoCAqCj4gPiBAQCAtMjU2LDEyICs5 NSwxNiBAQAo+ID4gwqAgKsKgwqDCoMKgwqAjIHJtZGlyIC9zeXMva2VybmVsL2NvbmZpZy94ZS8w MDAwOjAzOjAwLjAvCj4gPiDCoCAqLwo+ID4gwqAKPiA+IC1zdGF0aWMgY29uc3Qgc3RydWN0IHhl X2NvbmZpZ19kZXZpY2UgZGV2aWNlX2RlZmF1bHRzID0gewo+ID4gLcKgwqDCoMKgwqDCoMKgLmVu Z2luZXNfYWxsb3dlZCA9IFU2NF9NQVgsCj4gPiAtwqDCoMKgwqDCoMKgwqAuZ3RfdHlwZXNfYWxs b3dlZCA9IFU2NF9NQVgsCj4gPiAtwqDCoMKgwqDCoMKgwqAuZW5hYmxlX211bHRpX3F1ZXVlID0g dHJ1ZSwKPiA+IC3CoMKgwqDCoMKgwqDCoC5lbmFibGVfcHNtaSA9IGZhbHNlLAo+ID4gLcKgwqDC oMKgwqDCoMKgLnN1cnZpdmFiaWxpdHlfbW9kZSA9IGZhbHNlLAo+ID4gK2NvbnN0IHN0cnVjdCB4 ZV9jb25maWdfZGV2aWNlIHhlX2NvbmZpZ2ZzX2RldmljZV9kZWZhdWx0cyA9IHsKPiA+ICsjaWYg SVNfRU5BQkxFRChDT05GSUdfRFJNX1hFX0RFQlVHKQo+ID4gK8KgwqDCoMKgwqDCoMKgLmRlYnVn ID0gewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5lbmdpbmVzX2FsbG93ZWQg PSBVNjRfTUFYLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5ndF90eXBlc19h bGxvd2VkID0gVTY0X01BWCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZW5h YmxlX211bHRpX3F1ZXVlID0gdHJ1ZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAuZW5hYmxlX3BzbWkgPSBmYWxzZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAuc3Vydml2YWJpbGl0eV9tb2RlID0gZmFsc2UsCj4gPiArwqDCoMKgwqDCoMKgwqB9LAo+ID4g KyNlbmRpZgo+ID4gwqDCoMKgwqDCoMKgwqDCoC5zcmlvdiA9IHsKPiA+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgLm1heF92ZnMgPSBYRV9ERUZBVUxUX01BWF9WRlMsCj4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5hZG1pbl9vbmx5X3BmID0gWEVfREVGQVVMVF9B RE1JTl9PTkxZX1BGLAo+ID4gQEAgLTI3MCw1MCArMTEzLDIyIEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgeGVfY29uZmlnX2RldmljZQo+ID4gZGV2aWNlX2RlZmF1bHRzID0gewo+ID4gwqAKPiA+IMKg c3RhdGljIHZvaWQgc2V0X2RldmljZV9kZWZhdWx0cyhzdHJ1Y3QgeGVfY29uZmlnX2RldmljZSAq Y29uZmlnKQo+ID4gwqB7Cj4gPiAtwqDCoMKgwqDCoMKgwqAqY29uZmlnID0gZGV2aWNlX2RlZmF1 bHRzOwo+ID4gK8KgwqDCoMKgwqDCoMKgKmNvbmZpZyA9IHhlX2NvbmZpZ2ZzX2RldmljZV9kZWZh dWx0czsKPiA+IMKgI2lmZGVmIENPTkZJR19QQ0lfSU9WCj4gPiDCoMKgwqDCoMKgwqDCoMKgY29u ZmlnLT5zcmlvdi5tYXhfdmZzID0geGVfbW9kcGFyYW0ubWF4X3ZmczsKPiA+IMKgI2VuZGlmCj4g PiDCoH0KPiA+IMKgCj4gPiAtc3RydWN0IGVuZ2luZV9pbmZvIHsKPiA+IC3CoMKgwqDCoMKgwqDC oGNvbnN0IGNoYXIgKmNsczsKPiA+IC3CoMKgwqDCoMKgwqDCoHU2NCBtYXNrOwo+ID4gLcKgwqDC oMKgwqDCoMKgZW51bSB4ZV9lbmdpbmVfY2xhc3MgZW5naW5lX2NsYXNzOwo+ID4gLX07Cj4gPiAt Cj4gPiAtLyogU29tZSBoZWxwZnVsIG1hY3JvcyB0byBhaWQgb24gdGhlIHNpemluZyBvZiBidWZm ZXIgYWxsb2NhdGlvbgo+ID4gd2hlbiBwYXJzaW5nICovCj4gPiAtI2RlZmluZSBNQVhfRU5HSU5F X0NMQVNTX0NIQVJTIDUKPiA+IC0jZGVmaW5lIE1BWF9FTkdJTkVfSU5TVEFOQ0VfQ0hBUlMgMgo+ ID4gLQo+ID4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZW5naW5lX2luZm8gZW5naW5lX2luZm9bXSA9 IHsKPiA+IC3CoMKgwqDCoMKgwqDCoHsgLmNscyA9ICJyY3MiLCAubWFzayA9IFhFX0hXX0VOR0lO RV9SQ1NfTUFTSywKPiA+IC5lbmdpbmVfY2xhc3MgPSBYRV9FTkdJTkVfQ0xBU1NfUkVOREVSIH0s Cj4gPiAtwqDCoMKgwqDCoMKgwqB7IC5jbHMgPSAiYmNzIiwgLm1hc2sgPSBYRV9IV19FTkdJTkVf QkNTX01BU0ssCj4gPiAuZW5naW5lX2NsYXNzID0gWEVfRU5HSU5FX0NMQVNTX0NPUFkgfSwKPiA+ IC3CoMKgwqDCoMKgwqDCoHsgLmNscyA9ICJ2Y3MiLCAubWFzayA9IFhFX0hXX0VOR0lORV9WQ1Nf TUFTSywKPiA+IC5lbmdpbmVfY2xhc3MgPSBYRV9FTkdJTkVfQ0xBU1NfVklERU9fREVDT0RFIH0s Cj4gPiAtwqDCoMKgwqDCoMKgwqB7IC5jbHMgPSAidmVjcyIsIC5tYXNrID0gWEVfSFdfRU5HSU5F X1ZFQ1NfTUFTSywKPiA+IC5lbmdpbmVfY2xhc3MgPSBYRV9FTkdJTkVfQ0xBU1NfVklERU9fRU5I QU5DRSB9LAo+ID4gLcKgwqDCoMKgwqDCoMKgeyAuY2xzID0gImNjcyIsIC5tYXNrID0gWEVfSFdf RU5HSU5FX0NDU19NQVNLLAo+ID4gLmVuZ2luZV9jbGFzcyA9IFhFX0VOR0lORV9DTEFTU19DT01Q VVRFIH0sCj4gPiAtwqDCoMKgwqDCoMKgwqB7IC5jbHMgPSAiZ3NjY3MiLCAubWFzayA9IFhFX0hX X0VOR0lORV9HU0NDU19NQVNLLAo+ID4gLmVuZ2luZV9jbGFzcyA9IFhFX0VOR0lORV9DTEFTU19P VEhFUiB9LAo+ID4gLX07Cj4gPiAtCj4gPiAtc3RhdGljIGNvbnN0IHN0cnVjdCB7Cj4gPiAtwqDC oMKgwqDCoMKgwqBjb25zdCBjaGFyICpuYW1lOwo+ID4gLcKgwqDCoMKgwqDCoMKgZW51bSB4ZV9n dF90eXBlIHR5cGU7Cj4gPiAtfSBndF90eXBlc1tdID0gewo+ID4gLcKgwqDCoMKgwqDCoMKgeyAu bmFtZSA9ICJwcmltYXJ5IiwgLnR5cGUgPSBYRV9HVF9UWVBFX01BSU4gfSwKPiA+IC3CoMKgwqDC oMKgwqDCoHsgLm5hbWUgPSAibWVkaWEiLCAudHlwZSA9IFhFX0dUX1RZUEVfTUVESUEgfSwKPiA+ IC19Owo+ID4gLQo+ID4gLXN0YXRpYyBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZQo+ID4g KnRvX3hlX2NvbmZpZ19ncm91cF9kZXZpY2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQo+ID4g LXsKPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3Vw KGl0ZW0pLCBzdHJ1Y3QKPiA+IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UsIGdyb3VwKTsKPiA+IC19 Cj4gPiAtCj4gPiAtc3RhdGljIHN0cnVjdCB4ZV9jb25maWdfZGV2aWNlICp0b194ZV9jb25maWdf ZGV2aWNlKHN0cnVjdAo+ID4gY29uZmlnX2l0ZW0gKml0ZW0pCj4gPiAtewo+ID4gLcKgwqDCoMKg wqDCoMKgcmV0dXJuICZ0b194ZV9jb25maWdfZ3JvdXBfZGV2aWNlKGl0ZW0pLT5jb25maWc7Cj4g PiAtfQo+ID4gLQo+ID4gLXN0YXRpYyBib29sIGlzX2JvdW5kKHN0cnVjdCB4ZV9jb25maWdfZ3Jv dXBfZGV2aWNlICpkZXYpCj4gPiArLyoqCj4gPiArICogeGVfY29uZmlnZnNfaXNfYm91bmQgLSBj aGVjayB3aGV0aGVyIHRoZSBtYXRjaGluZyBwY2kgZGV2aWNlIGlzCj4gPiBib3VuZAo+ID4gKyAq IEBkZXY6IGNvbmZpZ2ZzIGdyb3VwIGRldmljZQo+ID4gKyAqCj4gPiArICogQ2FsbGVyIG11c3Qg aG9sZCBAZGV2LT5sb2NrLgo+ID4gKyAqCj4gPiArICogUmV0dXJuOiB0cnVlIGlmIHRoZSBtYXRj aGluZyBwY2lfZGV2IGlzIGFscmVhZHkgYm91bmQgdG8gYQo+ID4gZHJpdmVyLAo+ID4gKyAqwqDC oMKgwqAgZmFsc2Ugb3RoZXJ3aXNlLgo+ID4gKyAqLwo+ID4gK2Jvb2wgeGVfY29uZmlnZnNfaXNf Ym91bmQoc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UgKmRldikKPiA+IMKgewo+ID4gwqDC oMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBkb21haW4sIGJ1cywgc2xvdCwgZnVuY3Rpb247Cj4g PiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHBjaV9kZXYgKnBkZXY7Cj4gPiBAQCAtMzM4LDY5OCAr MTUzLDEzIEBAIHN0YXRpYyBib29sIGlzX2JvdW5kKHN0cnVjdAo+ID4geGVfY29uZmlnX2dyb3Vw X2RldmljZSAqZGV2KQo+ID4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiDCoH0KPiA+ IMKgCj4gPiAtc3RhdGljIHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlCj4gPiAqZmluZF94 ZV9jb25maWdfZ3JvdXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKPiA+IC0KPiA+IC0v KioKPiA+IC0gKiB4ZV9jb25maWdmc19nZXRfY3R4X3Jlc3RvcmVfbWlkX2JiIC0gZ2V0IGNvbmZp Z2ZzCj4gPiBjdHhfcmVzdG9yZV9taWRfYmIgc2V0dGluZwo+ID4gLSAqIEBwZGV2OiBwY2kgZGV2 aWNlCj4gPiAtICogQGNsYXNzOiBodyBlbmdpbmUgY2xhc3MKPiA+IC0gKiBAY3M6IHBvaW50ZXIg dG8gdGhlIGJiIHRvIHVzZSAtIG9ubHkgdmFsaWQgZHVyaW5nIHByb2JlCj4gPiAtICoKPiA+IC0g KiBSZXR1cm46IE51bWJlciBvZiBkd29yZHMgdXNlZCBpbiB0aGUgbWlkX2N0eF9yZXN0b3JlIHNl dHRpbmcgaW4KPiA+IGNvbmZpZ2ZzCj4gPiAtICovCj4gPiAtdTMyIHhlX2NvbmZpZ2ZzX2dldF9j dHhfcmVzdG9yZV9taWRfYmIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCj4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZW51bSB4ZV9lbmdpbmVfY2xhc3MgY2xhc3MsCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y29uc3QgdTMyICoqY3MpCj4gPiAtewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZp Z19ncm91cF9kZXZpY2UgKmRldiA9Cj4gPiBmaW5kX3hlX2NvbmZpZ19ncm91cF9kZXZpY2UocGRl dik7Cj4gPiAtwqDCoMKgwqDCoMKgwqB1MzIgbGVuOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKg aWYgKCFkZXYpCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4g PiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBzY29wZWRfZ3VhcmQobXV0ZXgsICZkZXYtPmxvY2spIHsK PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoY3MpCj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCpjcyA9IGRldi0KPiA+ID5jb25m aWcuY3R4X3Jlc3RvcmVfbWlkX2JiW2NsYXNzXS5jczsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBsZW4gPSBkZXYtPmNvbmZpZy5jdHhfcmVzdG9yZV9taWRfYmJbY2xh c3NdLmxlbjsKPiA+IC3CoMKgwqDCoMKgwqDCoH0KPiA+IC3CoMKgwqDCoMKgwqDCoGNvbmZpZ19n cm91cF9wdXQoJmRldi0+Z3JvdXApOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIGxl bjsKPiA+IC19Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogeGVfY29uZmlnZnNfZ2V0X2N0eF9yZXN0 b3JlX3Bvc3RfYmIgLSBnZXQgY29uZmlnZnMKPiA+IGN0eF9yZXN0b3JlX3Bvc3RfYmIgc2V0dGlu Zwo+ID4gLSAqIEBwZGV2OiBwY2kgZGV2aWNlCj4gPiAtICogQGNsYXNzOiBodyBlbmdpbmUgY2xh c3MKPiA+IC0gKiBAY3M6IHBvaW50ZXIgdG8gdGhlIGJiIHRvIHVzZSAtIG9ubHkgdmFsaWQgZHVy aW5nIHByb2JlCj4gPiAtICoKPiA+IC0gKiBSZXR1cm46IE51bWJlciBvZiBkd29yZHMgdXNlZCBp biB0aGUgcG9zdF9jdHhfcmVzdG9yZSBzZXR0aW5nCj4gPiBpbiBjb25maWdmcwo+ID4gLSAqLwo+ ID4gLXUzMiB4ZV9jb25maWdmc19nZXRfY3R4X3Jlc3RvcmVfcG9zdF9iYihzdHJ1Y3QgcGNpX2Rl diAqcGRldiwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbnVtIHhlX2VuZ2luZV9jbGFzcyBj bGFzcywKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCB1MzIgKipjcykKPiA+IC17Cj4g PiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAqZGV2ID0KPiA+ IGZpbmRfeGVfY29uZmlnX2dyb3VwX2RldmljZShwZGV2KTsKPiA+IC3CoMKgwqDCoMKgwqDCoHUz MiBsZW47Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoIWRldikKPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHNj b3BlZF9ndWFyZChtdXRleCwgJmRldi0+bG9jaykgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCpjcyA9IGRldi0+Y29uZmlnLmN0eF9yZXN0b3JlX3Bvc3RfYmJbY2xhc3NdLmNz Owo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxlbiA9IGRldi0+Y29uZmlnLmN0 eF9yZXN0b3JlX3Bvc3RfYmJbY2xhc3NdLmxlbjsKPiA+IC3CoMKgwqDCoMKgwqDCoH0KPiA+IC3C oMKgwqDCoMKgwqDCoGNvbmZpZ19ncm91cF9wdXQoJmRldi0+Z3JvdXApOwo+ID4gLQo+ID4gLcKg wqDCoMKgwqDCoMKgcmV0dXJuIGxlbjsKPiA+IC19Cj4gPiAtCj4gPiAtc3RhdGljIGJvb2wgd2Ff YmJfcmVhZF9hZHZhbmNlKGJvb2wgZGVyZWZlcmVuY2UsIGNoYXIgKipwLAo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qg Y2hhciAqYXBwZW5kLCBzaXplX3QgbGVuLAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90ICptYXhfc2l6ZSkKPiA+IC17 Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoZGVyZWZlcmVuY2UpIHsKPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAobGVuID49ICptYXhfc2l6ZSkKPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCptYXhfc2l6ZSAtPSBsZW47Cj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGFwcGVuZCkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVtY3B5KCpwLCBhcHBlbmQsIGxlbik7Cj4gPiAt wqDCoMKgwqDCoMKgwqB9Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqAqcCArPSBsZW47Cj4gPiAt Cj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiA+IC19Cj4gPiAtCj4gPiAtc3RhdGlj IHNzaXplX3Qgd2FfYmJfc2hvdyhzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAqZGV2LAo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3Qgd2FfYmIgd2FfYmJbc3RhdGljCj4gPiBYRV9FTkdJTkVfQ0xBU1NfTUFYXSwKPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2hhciAqZGF0YSwg c2l6ZV90IHN6KQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoGNoYXIgKnAgPSBkYXRhOwo+ID4g LQo+ID4gLcKgwqDCoMKgwqDCoMKgZ3VhcmQobXV0ZXgpKCZkZXYtPmxvY2spOwo+ID4gLQo+ID4g LcKgwqDCoMKgwqDCoMKgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVuZ2luZV9p bmZvKTsgaSsrKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW51bSB4ZV9l bmdpbmVfY2xhc3MgZWMgPQo+ID4gZW5naW5lX2luZm9baV0uZW5naW5lX2NsYXNzOwo+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNpemVfdCBsZW47Cj4gPiAtCj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCF3YV9iYltlY10ubGVuKQo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZTsKPiA+IC0KPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsZW4gPSBzbnByaW50ZihwLCBzeiwgIiVz OiIsIGVuZ2luZV9pbmZvW2ldLmNscyk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKCF3YV9iYl9yZWFkX2FkdmFuY2UoZGF0YSwgJnAsIE5VTEwsIGxlbiwgJnN6KSkKPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1F Tk9CVUZTOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvciAoc2l6 ZV90IGogPSAwOyBqIDwgd2FfYmJbZWNdLmxlbjsgaisrKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxlbiA9IHNucHJpbnRmKHAsIHN6LCAiICUw OHgiLAo+ID4gd2FfYmJbZWNdLmNzW2pdKTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCF3YV9iYl9yZWFkX2FkdmFuY2UoZGF0YSwgJnAsIE5V TEwsCj4gPiBsZW4sICZzeikpCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT0JVRlM7Cj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmICghd2FfYmJfcmVhZF9hZHZhbmNlKGRhdGEsICZwLCAiXG4iLCAxLCAmc3op KQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gLUVOT0JVRlM7Cj4gPiAtwqDCoMKgwqDCoMKgwqB9Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKg wqBpZiAoIXdhX2JiX3JlYWRfYWR2YW5jZShkYXRhLCAmcCwgIiIsIDEsICZzeikpCj4gPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9CVUZTOwo+ID4gLQo+ID4gLcKg wqDCoMKgwqDCoMKgLyogUmVzZXJ2ZSBvbmUgbW9yZSB0byBtYXRjaCBjaGVjayBmb3IgJ1wwJyAq Lwo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFkYXRhKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHArKzsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiBwIC0gZGF0YTsK PiA+IC19Cj4gPiAtCj4gPiAtc3RhdGljIHNzaXplX3QgY3R4X3Jlc3RvcmVfbWlkX2JiX3Nob3co c3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAo+ID4gY2hhciAqcGFnZSkKPiA+IC17Cj4gPiAtwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAqZGV2ID0KPiA+IHRvX3hl X2NvbmZpZ19ncm91cF9kZXZpY2UoaXRlbSk7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1 cm4gd2FfYmJfc2hvdyhkZXYsIGRldi0+Y29uZmlnLmN0eF9yZXN0b3JlX21pZF9iYiwKPiA+IHBh Z2UsIFNaXzRLKTsKPiA+IC19Cj4gPiAtCj4gPiAtc3RhdGljIHNzaXplX3QgY3R4X3Jlc3RvcmVf cG9zdF9iYl9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKPiA+IGNoYXIgKnBhZ2UpCj4g PiAtewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UgKmRl diA9Cj4gPiB0b194ZV9jb25maWdfZ3JvdXBfZGV2aWNlKGl0ZW0pOwo+ID4gLQo+ID4gLcKgwqDC oMKgwqDCoMKgcmV0dXJuIHdhX2JiX3Nob3coZGV2LCBkZXYtPmNvbmZpZy5jdHhfcmVzdG9yZV9w b3N0X2JiLAo+ID4gcGFnZSwgU1pfNEspOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgdm9pZCB3 YV9iYl9hcHBlbmQoc3RydWN0IHdhX2JiICp3YV9iYiwgdTMyIHZhbCkKPiA+IC17Cj4gPiAtwqDC oMKgwqDCoMKgwqBpZiAod2FfYmItPmNzKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHdhX2JiLT5jc1t3YV9iYi0+bGVuXSA9IHZhbDsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDC oHdhX2JiLT5sZW4rKzsKPiA+IC19Cj4gPiAtCj4gPiAtc3RhdGljIHNzaXplX3QgcGFyc2VfaGV4 KGNvbnN0IGNoYXIgKmxpbmUsIHUzMiAqcHZhbCkKPiA+IC17Cj4gPiAtwqDCoMKgwqDCoMKgwqBj aGFyIG51bXN0clsxMl07Cj4gPiAtwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpwOwo+ID4gLcKg wqDCoMKgwqDCoMKgc3NpemVfdCBudW1sZW47Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBwID0g bGluZSArIHN0cnNwbihsaW5lLCAiIFx0Iik7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoISpwIHx8 ICpwID09ICdcbicpCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7 Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBudW1sZW4gPSBzdHJjc3BuKHAsICIgXHRcbiIpOwo+ ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFudW1sZW4gfHwgbnVtbGVuID49IHNpemVvZihudW1zdHIp IC0gMSkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsK PiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoG1lbWNweShudW1zdHIsIHAsIG51bWxlbik7Cj4gPiAt wqDCoMKgwqDCoMKgwqBudW1zdHJbbnVtbGVuXSA9ICdcMCc7Cj4gPiAtwqDCoMKgwqDCoMKgwqBw ICs9IG51bWxlbjsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChrc3RydG91MzIobnVtc3Ry LCAxNiwgcHZhbCkpCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1F SU5WQUw7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gcCAtIGxpbmU7Cj4gPiAtfQo+ ID4gLQo+ID4gLXN0YXRpYyBpbnQgcGFyc2VfZW5naW5lKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNo YXIgKmVuZF9jaGFycywgdTY0Cj4gPiAqbWFzaywKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGVuZ2luZV9pbmZvICoqcGluZm8p Owo+ID4gLQo+ID4gLS8qCj4gPiAtICogUGFyc2UgbGluZXMgd2l0aCB0aGUgZm9ybWF0Cj4gPiAt ICoKPiA+IC0gKsKgwqDCoMKgwqA8ZW5naW5lLWNsYXNzPiBjbWQgPHUzMj4gPHUzMi4uLj4KPiA+ IC0gKsKgwqDCoMKgwqA8ZW5naW5lLWNsYXNzPiByZWcgPHUzMl9hZGRyPiA8dTMyX3ZhbD4KPiA+ IC0gKgo+ID4gLSAqIGFuZCBvcHRpb25hbGx5IHNhdmUgdGhlbSBpbiBAd2FfYmJbaV0uY3MgaXMg bm9uLU5VTEwuCj4gPiAtICoKPiA+IC0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBkd29yZHMgcGFy c2VkLgo+ID4gLSAqLwo+ID4gLXN0YXRpYyBzc2l6ZV90IHBhcnNlX3dhX2JiX2xpbmVzKGNvbnN0 IGNoYXIgKmxpbmVzLAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB3YV9iYiB3YV9iYltzdGF0aWMKPiA+IFhF X0VOR0lORV9DTEFTU19NQVhdKQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoHNzaXplX3QgZHdv cmRzID0gMCwgcmV0Owo+ID4gLcKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqcDsKPiA+IC0KPiA+ IC3CoMKgwqDCoMKgwqDCoGZvciAocCA9IGxpbmVzOyAqcDsgcCsrKSB7Cj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGVuZ2luZV9pbmZvICppbmZvID0gTlVM TDsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIgdmFsLCB2YWwyOwo+ID4g LQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEFsc28gYWxsb3cgZW1wdHkg bGluZXMgKi8KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwICs9IHN0cnNwbihw LCAiIFx0XG4iKTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoISpwKQo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsK PiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBwYXJzZV9lbmdp bmUocCwgIiBcdFxuIiwgTlVMTCwgJmluZm8pOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmIChyZXQgPCAwKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHAgKz0gcmV0Owo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHAg Kz0gc3Ryc3BuKHAsICIgXHQiKTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAoc3RyX2hhc19wcmVmaXgocCwgImNtZCIpKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvciAocCArPSBzdHJsZW4oImNtZCIpOyAq cDspIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldCA9IHBhcnNlX2hleChwLCAmdmFsKTsKPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChy ZXQgPCAwKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKCFyZXQpCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiAtCj4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBwICs9IHJldDsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGR3b3JkcysrOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgd2FfYmJfYXBwZW5k KCZ3YV9iYltpbmZvLQo+ID4gPmVuZ2luZV9jbGFzc10sIHZhbCk7Cj4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB9IGVsc2UgaWYgKHN0cl9oYXNfcHJlZml4KHAsICJyZWciKSkgewo+ID4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwICs9IHN0cmxl bigicmVnIik7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldCA9IHBhcnNlX2hleChwLCAmdmFsKTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCA8PSAwKQo+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1F SU5WQUw7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHAgKz0gcmV0Owo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXQgPSBwYXJzZV9oZXgocCwgJnZhbDIpOwo+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0IDw9IDApCj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gLUVJTlZBTDsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcCArPSByZXQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGR3b3JkcyArPSAzOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3YV9iYl9hcHBlbmQoJndhX2JiW2luZm8tPmVuZ2lu ZV9jbGFzc10sCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBNSV9MT0FEX1JFR0lTVEVSX0lNTSB8Cj4gPiBN SV9MUklfTlVNX1JFR1MoMSkpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB3YV9iYl9hcHBlbmQoJndhX2JiW2luZm8tPmVuZ2luZV9jbGFzc10sCj4g PiB2YWwpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB3YV9iYl9hcHBlbmQoJndhX2JiW2luZm8tPmVuZ2luZV9jbGFzc10sCj4gPiB2YWwyKTsKPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ID4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiAtwqDCoMKgwqDCoMKgwqB9Cj4gPiAt Cj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gZHdvcmRzOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0 aWMgc3NpemVfdCB3YV9iYl9zdG9yZShzdHJ1Y3Qgd2FfYmIgd2FfYmJbc3RhdGljCj4gPiBYRV9F TkdJTkVfQ0xBU1NfTUFYXSwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAqZGV2LAo+ID4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0 IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pCj4gPiAtewo+ID4gLcKgwqDCoMKgwqDCoMKgLyogdG1w X3dhX2JiIG11c3QgbWF0Y2ggd2FfYmIncyBzaXplICovCj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1 Y3Qgd2FfYmIgdG1wX3dhX2JiW1hFX0VOR0lORV9DTEFTU19NQVhdID0geyB9Owo+ID4gLcKgwqDC oMKgwqDCoMKgc3NpemVfdCBjb3VudCwgY2xhc3M7Cj4gPiAtwqDCoMKgwqDCoMKgwqB1MzIgKnRt cDsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoC8qIDEuIENvdW50IGR3b3JkcyAtIHdhX2JiW2ld LmNzIGlzIE5VTEwgZm9yIGFsbCBjbGFzc2VzICovCj4gPiAtwqDCoMKgwqDCoMKgwqBjb3VudCA9 IHBhcnNlX3dhX2JiX2xpbmVzKHBhZ2UsIHRtcF93YV9iYik7Cj4gPiAtwqDCoMKgwqDCoMKgwqBp ZiAoY291bnQgPCAwKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBj b3VudDsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGd1YXJkKG11dGV4KSgmZGV2LT5sb2NrKTsK PiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChpc19ib3VuZChkZXYpKQo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUJVU1k7Cj4gPiAtCj4gPiAtwqDCoMKgwqDC oMKgwqAvKgo+ID4gLcKgwqDCoMKgwqDCoMKgICogMi4gQWxsb2NhdGUgYSB1MzIgYXJyYXkgYW5k IHNldCB0aGUgcG9pbnRlcnMgdG8gdGhlCj4gPiByaWdodCBwb3NpdGlvbnMKPiA+IC3CoMKgwqDC oMKgwqDCoCAqIGFjY29yZGluZyB0byB0aGUgbGVuZ3RoIG9mIGVhY2ggY2xhc3MnIHdhX2JiCj4g PiAtwqDCoMKgwqDCoMKgwqAgKi8KPiA+IC3CoMKgwqDCoMKgwqDCoHRtcCA9IGtyZWFsbG9jKHdh X2JiWzBdLmNzLCBjb3VudCAqIHNpemVvZih1MzIpLAo+ID4gR0ZQX0tFUk5FTCk7Cj4gPiAtwqDC oMKgwqDCoMKgwqBpZiAoIXRtcCkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gLUVOT01FTTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmICghY291bnQpIHsKPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtZW1zZXQod2FfYmIsIDAsIHNpemVvZih0 bXBfd2FfYmIpKTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gbGVu Owo+ID4gLcKgwqDCoMKgwqDCoMKgfQo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgZm9yIChjbGFz cyA9IDAsIGNvdW50ID0gMDsgY2xhc3MgPCBYRV9FTkdJTkVfQ0xBU1NfTUFYOwo+ID4gKytjbGFz cykgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRtcF93YV9iYltjbGFzc10u Y3MgPSB0bXAgKyBjb3VudDsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb3Vu dCArPSB0bXBfd2FfYmJbY2xhc3NdLmxlbjsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB0bXBfd2FfYmJbY2xhc3NdLmxlbiA9IDA7Cj4gPiAtwqDCoMKgwqDCoMKgwqB9Cj4gPiAt Cj4gPiAtwqDCoMKgwqDCoMKgwqAvKiAzLiBQYXJzZSB3YV9iYiBsaW5lcyBhZ2FpbiwgdGhpcyB0 aW1lIHNhdmluZyB0aGUgdmFsdWVzCj4gPiAqLwo+ID4gLcKgwqDCoMKgwqDCoMKgY291bnQgPSBw YXJzZV93YV9iYl9saW5lcyhwYWdlLCB0bXBfd2FfYmIpOwo+ID4gLcKgwqDCoMKgwqDCoMKgaWYg KGNvdW50IDwgMCkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gY291 bnQ7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBtZW1jcHkod2FfYmIsIHRtcF93YV9iYiwgc2l6 ZW9mKHRtcF93YV9iYikpOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIGxlbjsKPiA+ IC19Cj4gPiAtCj4gPiAtc3RhdGljIHNzaXplX3QgY3R4X3Jlc3RvcmVfbWlkX2JiX3N0b3JlKHN0 cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBj aGFyICpkYXRhLCBzaXplX3QKPiA+IHN6KQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVj dCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4gdG9feGVfY29uZmlnX2dyb3VwX2Rl dmljZShpdGVtKTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiB3YV9iYl9zdG9yZShk ZXYtPmNvbmZpZy5jdHhfcmVzdG9yZV9taWRfYmIsIGRldiwKPiA+IGRhdGEsIHN6KTsKPiA+IC19 Cj4gPiAtCj4gPiAtc3RhdGljIHNzaXplX3QgY3R4X3Jlc3RvcmVfcG9zdF9iYl9zdG9yZShzdHJ1 Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGNo YXIgKmRhdGEsIHNpemVfdAo+ID4gc3opCj4gPiAtewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0 IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UgKmRldiA9Cj4gPiB0b194ZV9jb25maWdfZ3JvdXBfZGV2 aWNlKGl0ZW0pOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIHdhX2JiX3N0b3JlKGRl di0+Y29uZmlnLmN0eF9yZXN0b3JlX3Bvc3RfYmIsIGRldiwKPiA+IGRhdGEsIHN6KTsKPiA+IC19 Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogeGVfY29uZmlnZnNfZ2V0X2VuZ2luZXNfYWxsb3dlZCAt IGdldCBlbmdpbmUgYWxsb3dlZCBtYXNrIGZyb20KPiA+IGNvbmZpZ2ZzCj4gPiAtICogQHBkZXY6 IHBjaSBkZXZpY2UKPiA+IC0gKgo+ID4gLSAqIFJldHVybjogZW5naW5lIG1hc2sgd2l0aCBhbGxv d2VkIGVuZ2luZXMgc2V0IGluIGNvbmZpZ2ZzCj4gPiAtICovCj4gPiAtdTY0IHhlX2NvbmZpZ2Zz X2dldF9lbmdpbmVzX2FsbG93ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4gPiAtewo+ID4gLcKg wqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UgKmRldiA9Cj4gPiBmaW5k X3hlX2NvbmZpZ19ncm91cF9kZXZpY2UocGRldik7Cj4gPiAtwqDCoMKgwqDCoMKgwqB1NjQgZW5n aW5lc19hbGxvd2VkOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFkZXYpCj4gPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGRldmljZV9kZWZhdWx0cy5lbmdpbmVz X2FsbG93ZWQ7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBzY29wZWRfZ3VhcmQobXV0ZXgsICZk ZXYtPmxvY2spCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5naW5lc19hbGxv d2VkID0gZGV2LT5jb25maWcuZW5naW5lc19hbGxvd2VkOwo+ID4gLcKgwqDCoMKgwqDCoMKgY29u ZmlnX2dyb3VwX3B1dCgmZGV2LT5ncm91cCk7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1 cm4gZW5naW5lc19hbGxvd2VkOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgc3NpemVfdCBlbmdp bmVzX2FsbG93ZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIKPiA+ICpwYWdl KQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZGV2aWNlICpkZXYg PSB0b194ZV9jb25maWdfZGV2aWNlKGl0ZW0pOwo+ID4gLcKgwqDCoMKgwqDCoMKgY2hhciAqcCA9 IHBhZ2U7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFS UkFZX1NJWkUoZW5naW5lX2luZm8pOyBpKyspIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB1NjQgbWFzayA9IGVuZ2luZV9pbmZvW2ldLm1hc2s7Cj4gPiAtCj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKChkZXYtPmVuZ2luZXNfYWxsb3dlZCAmIG1hc2sp ID09IG1hc2spIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcCArPSBzcHJpbnRmKHAsICIlcypcbiIsCj4gPiBlbmdpbmVfaW5mb1tpXS5jbHMpOwo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAobWFzayAmIGRldi0+ ZW5naW5lc19hbGxvd2VkKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHUxNiBiaXQwID0gX19mZnM2NChtYXNrKSwgYml0Owo+ID4gLQo+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtYXNrICY9IGRldi0+ ZW5naW5lc19hbGxvd2VkOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBmb3JfZWFjaF9zZXRfYml0KGJpdCwgKGNvbnN0IHVuc2lnbmVkIGxv bmcKPiA+ICopJm1hc2ssIDY0KQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcCArPSBzcHJpbnRmKHAsICIlcyV1XG4iLAo+ ID4gZW5naW5lX2luZm9baV0uY2xzLAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGJpdCAtIGJpdDApOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+IC3C oMKgwqDCoMKgwqDCoH0KPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiBwIC0gcGFnZTsK PiA+IC19Cj4gPiAtCj4gPiAtLyoKPiA+IC0gKiBMb29rdXAgZW5naW5lX2luZm8uIElmIEBtYXNr IGlzIG5vdCBOVUxMLCByZWR1Y2UgdGhlIG1hc2sKPiA+IGFjY29yZGluZyB0byB0aGUKPiA+IC0g KiBpbnN0YW5jZSBpbiBAcGF0dGVybi4KPiA+IC0gKgo+ID4gLSAqIEV4YW1wbGVzIG9mIGlucHV0 czoKPiA+IC0gKiAtIGxvb2t1cF9lbmdpbmVfaW5mbygicmNzMCIsICZtYXNrKTogcmV0dXJuICJy Y3MiIGVudHJ5IGZyb20KPiA+IEBlbmdpbmVfaW5mbyBhbmQKPiA+IC0gKsKgwqAgbWFzayA9PSBC SVRfVUxMKFhFX0hXX0VOR0lORV9SQ1MwKQo+ID4gLSAqIC0gbG9va3VwX2VuZ2luZV9pbmZvKCJy Y3MqIiwgJm1hc2spOiByZXR1cm4gInJjcyIgZW50cnkgZnJvbQo+ID4gQGVuZ2luZV9pbmZvIGFu ZAo+ID4gLSAqwqDCoCBtYXNrID09IFhFX0hXX0VOR0lORV9SQ1NfTUFTSwo+ID4gLSAqIC0gbG9v a3VwX2VuZ2luZV9pbmZvKCJyY3MiLCBOVUxMKTogcmV0dXJuICJyY3MiIGVudHJ5IGZyb20KPiA+ IEBlbmdpbmVfaW5mbwo+ID4gLSAqLwo+ID4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZW5naW5lX2lu Zm8gKmxvb2t1cF9lbmdpbmVfaW5mbyhjb25zdCBjaGFyCj4gPiAqcGF0dGVybiwgdTY0ICptYXNr KQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQVJSQVlf U0laRShlbmdpbmVfaW5mbyk7IGkrKykgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHU4IGluc3RhbmNlOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHUxNiBi aXQ7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFzdHJfaGFz X3ByZWZpeChwYXR0ZXJuLCBlbmdpbmVfaW5mb1tpXS5jbHMpKQo+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZTsKPiA+IC0KPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXR0ZXJuICs9IHN0cmxlbihlbmdpbmVfaW5mb1tp XS5jbHMpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghbWFzaykKPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuICpw YXR0ZXJuID8gTlVMTCA6ICZlbmdpbmVfaW5mb1tpXTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoIXN0cmNtcChwYXR0ZXJuLCAiKiIpKSB7Cj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCptYXNrID0gZW5naW5lX2lu Zm9baV0ubWFzazsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuICZlbmdpbmVfaW5mb1tpXTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGtz dHJ0b3U4KHBhdHRlcm4sIDEwLCAmaW5zdGFuY2UpKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gTlVMTDsKPiA+IC0KPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBiaXQgPSBfX2ZmczY0KGVuZ2luZV9pbmZvW2ldLm1hc2sp ICsgaW5zdGFuY2U7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGJpdCA+ PSBmbHM2NChlbmdpbmVfaW5mb1tpXS5tYXNrKSkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE5VTEw7Cj4gPiAtCj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgKm1hc2sgPSBCSVRfVUxMKGJpdCk7Cj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuICZlbmdpbmVfaW5mb1tpXTsKPiA+IC3CoMKgwqDC oMKgwqDCoH0KPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+ID4gLX0KPiA+ IC0KPiA+IC1zdGF0aWMgaW50IHBhcnNlX2VuZ2luZShjb25zdCBjaGFyICpzLCBjb25zdCBjaGFy ICplbmRfY2hhcnMsIHU2NAo+ID4gKm1hc2ssCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBlbmdpbmVfaW5mbyAqKnBpbmZvKQo+ ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoGNoYXIgYnVmW01BWF9FTkdJTkVfQ0xBU1NfQ0hBUlMg KyBNQVhfRU5HSU5FX0lOU1RBTkNFX0NIQVJTCj4gPiArIDFdOwo+ID4gLcKgwqDCoMKgwqDCoMKg Y29uc3Qgc3RydWN0IGVuZ2luZV9pbmZvICppbmZvOwo+ID4gLcKgwqDCoMKgwqDCoMKgc2l6ZV90 IGxlbjsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGxlbiA9IHN0cmNzcG4ocywgZW5kX2NoYXJz KTsKPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChsZW4gPj0gc2l6ZW9mKGJ1ZikpCj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiAtCj4gPiAtwqDCoMKg wqDCoMKgwqBtZW1jcHkoYnVmLCBzLCBsZW4pOwo+ID4gLcKgwqDCoMKgwqDCoMKgYnVmW2xlbl0g PSAnXDAnOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgaW5mbyA9IGxvb2t1cF9lbmdpbmVfaW5m byhidWYsIG1hc2spOwo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFpbmZvKQo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PRU5UOwo+ID4gLQo+ID4gLcKgwqDCoMKg wqDCoMKgaWYgKHBpbmZvKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCpwaW5m byA9IGluZm87Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gbGVuOwo+ID4gLX0KPiA+ IC0KPiA+IC1zdGF0aWMgc3NpemVfdCBlbmdpbmVzX2FsbG93ZWRfc3RvcmUoc3RydWN0IGNvbmZp Z19pdGVtICppdGVtLAo+ID4gY29uc3QgY2hhciAqcGFnZSwKPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNp emVfdCBsZW4pCj4gPiAtewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91 cF9kZXZpY2UgKmRldiA9Cj4gPiB0b194ZV9jb25maWdfZ3JvdXBfZGV2aWNlKGl0ZW0pOwo+ID4g LcKgwqDCoMKgwqDCoMKgc3NpemVfdCBwYXR0ZXJubGVuLCBwOwo+ID4gLcKgwqDCoMKgwqDCoMKg dTY0IG1hc2ssIHZhbCA9IDA7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBmb3IgKHAgPSAwOyBw IDwgbGVuOyBwICs9IHBhdHRlcm5sZW4gKyAxKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcGF0dGVybmxlbiA9IHBhcnNlX2VuZ2luZShwYWdlICsgcCwgIixcbiIsICZtYXNr LAo+ID4gTlVMTCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHBhdHRl cm5sZW4gPCAwKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB2YWwgfD0gbWFzazsKPiA+IC3CoMKgwqDCoMKgwqDCoH0KPiA+IC0KPiA+IC3CoMKgwqDC oMKgwqDCoGd1YXJkKG11dGV4KSgmZGV2LT5sb2NrKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChp c19ib3VuZChkZXYpKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAt RUJVU1k7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBkZXYtPmNvbmZpZy5lbmdpbmVzX2FsbG93 ZWQgPSB2YWw7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gbGVuOwo+ID4gLX0KPiA+ IC0KPiA+IC1zdGF0aWMgdTY0IGdldF9ndF90eXBlc19hbGxvd2VkKHN0cnVjdCBwY2lfZGV2ICpw ZGV2KQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2 aWNlICpkZXYgPQo+ID4gZmluZF94ZV9jb25maWdfZ3JvdXBfZGV2aWNlKHBkZXYpOwo+ID4gLcKg wqDCoMKgwqDCoMKgdTY0IG1hc2s7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoIWRldikK PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZGV2aWNlX2RlZmF1bHRz Lmd0X3R5cGVzX2FsbG93ZWQ7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBzY29wZWRfZ3VhcmQo bXV0ZXgsICZkZXYtPmxvY2spCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWFz ayA9IGRldi0+Y29uZmlnLmd0X3R5cGVzX2FsbG93ZWQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqBjb25m aWdfZ3JvdXBfcHV0KCZkZXYtPmdyb3VwKTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVy biBtYXNrOwo+ID4gLX0KPiA+IC0KPiA+IC0vKioKPiA+IC0gKiB4ZV9jb25maWdmc19wcmltYXJ5 X2d0X2FsbG93ZWQgLSBkZXRlcm1pbmUgd2hldGhlciBwcmltYXJ5IEdUcwo+ID4gYXJlIHN1cHBv cnRlZAo+ID4gLSAqIEBwZGV2OiBwY2kgZGV2aWNlCj4gPiAtICoKPiA+IC0gKiBSZXR1cm46IFRy dWUgaWYgcHJpbWFyeSBHVHMgYXJlIGVuYWJsZWQsIGZhbHNlIGlmIHRoZXkgaGF2ZQo+ID4gYmVl biBkaXNhYmxlZCB2aWEKPiA+IC0gKsKgwqDCoMKgIGNvbmZpZ2ZzLgo+ID4gLSAqLwo+ID4gLWJv b2wgeGVfY29uZmlnZnNfcHJpbWFyeV9ndF9hbGxvd2VkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiBnZXRfZ3RfdHlwZXNfYWxsb3dlZChwZGV2 KSAmCj4gPiBCSVRfVUxMKFhFX0dUX1RZUEVfTUFJTik7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qKgo+ ID4gLSAqIHhlX2NvbmZpZ2ZzX21lZGlhX2d0X2FsbG93ZWQgLSBkZXRlcm1pbmUgd2hldGhlciBt ZWRpYSBHVHMgYXJlCj4gPiBzdXBwb3J0ZWQKPiA+IC0gKiBAcGRldjogcGNpIGRldmljZQo+ID4g LSAqCj4gPiAtICogUmV0dXJuOiBUcnVlIGlmIHRoZSBtZWRpYSBHVHMgYXJlIGVuYWJsZWQsIGZh bHNlIGlmIHRoZXkgaGF2ZQo+ID4gYmVlbiBkaXNhYmxlZAo+ID4gLSAqwqDCoMKgwqAgdmlhIGNv bmZpZ2ZzLgo+ID4gLSAqLwo+ID4gLWJvb2wgeGVfY29uZmlnZnNfbWVkaWFfZ3RfYWxsb3dlZChz dHJ1Y3QgcGNpX2RldiAqcGRldikKPiA+IC17Cj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gZ2V0 X2d0X3R5cGVzX2FsbG93ZWQocGRldikgJgo+ID4gQklUX1VMTChYRV9HVF9UWVBFX01FRElBKTsK PiA+IC19Cj4gPiAtCj4gPiAtc3RhdGljIHNzaXplX3QgZ3RfdHlwZXNfYWxsb3dlZF9zaG93KHN0 cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKPiA+IGNoYXIgKnBhZ2UpCj4gPiAtewo+ID4gLcKgwqDC oMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19kZXZpY2UgKmRldiA9IHRvX3hlX2NvbmZpZ19kZXZp Y2UoaXRlbSk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBjaGFyICpwID0gcGFnZTsKPiA+IC0KPiA+IC3C oMKgwqDCoMKgwqDCoGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQVJSQVlfU0laRShndF90eXBlcyk7 IGkrKykKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZGV2LT5ndF90eXBl c19hbGxvd2VkICYKPiA+IEJJVF9VTEwoZ3RfdHlwZXNbaV0udHlwZSkpCj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHAgKz0gc3ByaW50ZihwLCAiJXNc biIsIGd0X3R5cGVzW2ldLm5hbWUpOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIHAg LSBwYWdlOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgc3NpemVfdCBndF90eXBlc19hbGxvd2Vk X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKPiA+IGNvbnN0IGNoYXIgKnBhZ2UsCj4g PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdCBsZW4pCj4gPiAtewo+ID4gLcKgwqDCoMKgwqDCoMKg c3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UgKmRldiA9Cj4gPiB0b194ZV9jb25maWdfZ3Jv dXBfZGV2aWNlKGl0ZW0pOwo+ID4gLcKgwqDCoMKgwqDCoMKgY2hhciAqYnVmIF9fZnJlZShrZnJl ZSkgPSBrc3RyZHVwKHBhZ2UsIEdGUF9LRVJORUwpOwo+ID4gLcKgwqDCoMKgwqDCoMKgY2hhciAq cCA9IGJ1ZjsKPiA+IC3CoMKgwqDCoMKgwqDCoHU2NCB0eXBlbWFzayA9IDA7Cj4gPiAtCj4gPiAt wqDCoMKgwqDCoMKgwqBpZiAoIWJ1ZikKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gLUVOT01FTTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHdoaWxlIChwKSB7Cj4g PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhciAqdHlwZW5hbWUgPSBzdHJzZXAo JnAsICIsXG4iKTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBib29sIG1hdGNo ZWQgPSBmYWxzZTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo dHlwZW5hbWVbMF0gPT0gJ1wwJykKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGd0X3R5cGVzKTsgaSsr KSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm IChzdHJjbXAodHlwZW5hbWUsIGd0X3R5cGVzW2ldLm5hbWUpID09Cj4gPiAwKSB7Cj4gPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB0eXBlbWFzayB8PSBCSVQoZ3RfdHlwZXNbaV0udHlwZSk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtYXRjaGVkID0g dHJ1ZTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghbWF0Y2hlZCkKPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1F SU5WQUw7Cj4gPiAtwqDCoMKgwqDCoMKgwqB9Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBndWFy ZChtdXRleCkoJmRldi0+bG9jayk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoaXNfYm91bmQoZGV2 KSkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVCVVNZOwo+ID4g LQo+ID4gLcKgwqDCoMKgwqDCoMKgZGV2LT5jb25maWcuZ3RfdHlwZXNfYWxsb3dlZCA9IHR5cGVt YXNrOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIGxlbjsKPiA+IC19Cj4gPiAtCj4g PiAtLyoqCj4gPiAtICogeGVfY29uZmlnZnNfZ2V0X2VuYWJsZV9tdWx0aV9xdWV1ZSAtIGdldCBj b25maWdmcwo+ID4gZW5hYmxlX211bHRpX3F1ZXVlIHNldHRpbmcKPiA+IC0gKiBAcGRldjogcGNp IGRldmljZQo+ID4gLSAqCj4gPiAtICogUmV0dXJuOiB0cnVlIGlmIG11bHRpLXF1ZXVlIGlzIGVu YWJsZWQgZm9yIHRoaXMgZGV2aWNlICh0aGUKPiA+IGRlZmF1bHQpLAo+ID4gLSAqIGZhbHNlIGlm IGl0IGhhcyBiZWVuIGZvcmNlLWRpc2FibGVkIHZpYSBjb25maWdmcy4KPiA+IC0gKi8KPiA+IC1i b29sIHhlX2NvbmZpZ2ZzX2dldF9lbmFibGVfbXVsdGlfcXVldWUoc3RydWN0IHBjaV9kZXYgKnBk ZXYpCj4gPiAtewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZp Y2UgKmRldiA9Cj4gPiBmaW5kX3hlX2NvbmZpZ19ncm91cF9kZXZpY2UocGRldik7Cj4gPiAtwqDC oMKgwqDCoMKgwqBib29sIHJldDsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmICghZGV2KQo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+ID4gLQo+ID4g LcKgwqDCoMKgwqDCoMKgc2NvcGVkX2d1YXJkKG11dGV4LCAmZGV2LT5sb2NrKQo+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGRldi0+Y29uZmlnLmVuYWJsZV9tdWx0aV9x dWV1ZTsKPiA+IC3CoMKgwqDCoMKgwqDCoGNvbmZpZ19ncm91cF9wdXQoJmRldi0+Z3JvdXApOwo+ ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+IC19Cj4gPiAtCj4gPiAtc3Rh dGljIHNzaXplX3QgZW5hYmxlX211bHRpX3F1ZXVlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICpp dGVtLAo+ID4gY2hhciAqcGFnZSkKPiA+IC17Cj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVf Y29uZmlnX2RldmljZSAqZGV2ID0gdG9feGVfY29uZmlnX2RldmljZShpdGVtKTsKPiA+IC0KPiA+ IC3CoMKgwqDCoMKgwqDCoHJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgZGV2LT5lbmFibGVf bXVsdGlfcXVldWUpOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgc3NpemVfdCBlbmFibGVfbXVs dGlfcXVldWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAo+ID4gY29uc3QgY2hhciAq cGFnZSwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzaXplX3QgbGVuKQo+ID4gLXsKPiA+IC3C oMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4gdG9f eGVfY29uZmlnX2dyb3VwX2RldmljZShpdGVtKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGJvb2wgdmFs Owo+ID4gLcKgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJl dCA9IGtzdHJ0b2Jvb2wocGFnZSwgJnZhbCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiAtCj4gPiAt wqDCoMKgwqDCoMKgwqBndWFyZChtdXRleCkoJmRldi0+bG9jayk7Cj4gPiAtwqDCoMKgwqDCoMKg wqBpZiAoaXNfYm91bmQoZGV2KSkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gLUVCVVNZOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgZGV2LT5jb25maWcuZW5hYmxl X211bHRpX3F1ZXVlID0gdmFsOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIGxlbjsK PiA+IC19Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogeGVfY29uZmlnZnNfZ2V0X3BzbWlfZW5hYmxl ZCAtIGdldCBjb25maWdmcyBlbmFibGVfcHNtaSBzZXR0aW5nCj4gPiAtICogQHBkZXY6IHBjaSBk ZXZpY2UKPiA+IC0gKgo+ID4gLSAqIFJldHVybjogZW5hYmxlX3BzbWkgc2V0dGluZyBpbiBjb25m aWdmcwo+ID4gLSAqLwo+ID4gLWJvb2wgeGVfY29uZmlnZnNfZ2V0X3BzbWlfZW5hYmxlZChzdHJ1 Y3QgcGNpX2RldiAqcGRldikKPiA+IC17Cj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29u ZmlnX2dyb3VwX2RldmljZSAqZGV2ID0KPiA+IGZpbmRfeGVfY29uZmlnX2dyb3VwX2RldmljZShw ZGV2KTsKPiA+IC3CoMKgwqDCoMKgwqDCoGJvb2wgcmV0Owo+ID4gLQo+ID4gLcKgwqDCoMKgwqDC oMKgaWYgKCFkZXYpCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZh bHNlOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgc2NvcGVkX2d1YXJkKG11dGV4LCAmZGV2LT5s b2NrKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGRldi0+Y29uZmln LmVuYWJsZV9wc21pOwo+ID4gLcKgwqDCoMKgwqDCoMKgY29uZmlnX2dyb3VwX3B1dCgmZGV2LT5n cm91cCk7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gLX0KPiA+IC0K PiA+IC1zdGF0aWMgc3NpemVfdCBlbmFibGVfcHNtaV9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAq aXRlbSwgY2hhcgo+ID4gKnBhZ2UpCj4gPiAtewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IHhl X2NvbmZpZ19kZXZpY2UgKmRldiA9IHRvX3hlX2NvbmZpZ19kZXZpY2UoaXRlbSk7Cj4gPiAtCj4g PiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gc3ByaW50ZihwYWdlLCAiJWRcbiIsIGRldi0+ZW5hYmxl X3BzbWkpOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgc3NpemVfdCBlbmFibGVfcHNtaV9zdG9y ZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0Cj4gPiBjaGFyICpwYWdlLCBzaXplX3Qg bGVuKQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2 aWNlICpkZXYgPQo+ID4gdG9feGVfY29uZmlnX2dyb3VwX2RldmljZShpdGVtKTsKPiA+IC3CoMKg wqDCoMKgwqDCoGJvb2wgdmFsOwo+ID4gLcKgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+IC0KPiA+ IC3CoMKgwqDCoMKgwqDCoHJldCA9IGtzdHJ0b2Jvb2wocGFnZSwgJnZhbCk7Cj4gPiAtwqDCoMKg wqDCoMKgwqBpZiAocmV0KQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biByZXQ7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBndWFyZChtdXRleCkoJmRldi0+bG9jayk7 Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoaXNfYm91bmQoZGV2KSkKPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVCVVNZOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKg ZGV2LT5jb25maWcuZW5hYmxlX3BzbWkgPSB2YWw7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBy ZXR1cm4gbGVuOwo+ID4gLX0KPiA+IC0KPiA+IC0vKioKPiA+IC0gKiB4ZV9jb25maWdmc19nZXRf c3Vydml2YWJpbGl0eV9tb2RlIC0gZ2V0IGNvbmZpZ2ZzIHN1cnZpdmFiaWxpdHkKPiA+IG1vZGUg YXR0cmlidXRlCj4gPiAtICogQHBkZXY6IHBjaSBkZXZpY2UKPiA+IC0gKgo+ID4gLSAqIFJldHVy bjogc3Vydml2YWJpbGl0eV9tb2RlIGF0dHJpYnV0ZSBpbiBjb25maWdmcwo+ID4gLSAqLwo+ID4g LWJvb2wgeGVfY29uZmlnZnNfZ2V0X3N1cnZpdmFiaWxpdHlfbW9kZShzdHJ1Y3QgcGNpX2RldiAq cGRldikKPiA+IC17Cj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2Rl dmljZSAqZGV2ID0KPiA+IGZpbmRfeGVfY29uZmlnX2dyb3VwX2RldmljZShwZGV2KTsKPiA+IC3C oMKgwqDCoMKgwqDCoGJvb2wgbW9kZTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmICghZGV2 KQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBkZXZpY2VfZGVmYXVs dHMuc3Vydml2YWJpbGl0eV9tb2RlOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgc2NvcGVkX2d1 YXJkKG11dGV4LCAmZGV2LT5sb2NrKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oG1vZGUgPSBkZXYtPmNvbmZpZy5zdXJ2aXZhYmlsaXR5X21vZGU7Cj4gPiAtwqDCoMKgwqDCoMKg wqBjb25maWdfZ3JvdXBfcHV0KCZkZXYtPmdyb3VwKTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDC oHJldHVybiBtb2RlOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgc3NpemVfdCBzdXJ2aXZhYmls aXR5X21vZGVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCj4gPiBjaGFyICpwYWdlKQo+ ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZGV2aWNlICpkZXYgPSB0 b194ZV9jb25maWdfZGV2aWNlKGl0ZW0pOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJu IHNwcmludGYocGFnZSwgIiVkXG4iLCBkZXYtPnN1cnZpdmFiaWxpdHlfbW9kZSk7Cj4gPiAtfQo+ ID4gLQo+ID4gLXN0YXRpYyBzc2l6ZV90IHN1cnZpdmFiaWxpdHlfbW9kZV9zdG9yZShzdHJ1Y3Qg Y29uZmlnX2l0ZW0gKml0ZW0sCj4gPiBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQo+ID4g LXsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYg PQo+ID4gdG9feGVfY29uZmlnX2dyb3VwX2RldmljZShpdGVtKTsKPiA+IC3CoMKgwqDCoMKgwqDC oGJvb2wgc3Vydml2YWJpbGl0eV9tb2RlOwo+ID4gLcKgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldCA9IGtzdHJ0b2Jvb2wocGFnZSwgJnN1cnZpdmFiaWxp dHlfbW9kZSk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBndWFy ZChtdXRleCkoJmRldi0+bG9jayk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoaXNfYm91bmQoZGV2 KSkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVCVVNZOwo+ID4g LQo+ID4gLcKgwqDCoMKgwqDCoMKgZGV2LT5jb25maWcuc3Vydml2YWJpbGl0eV9tb2RlID0gc3Vy dml2YWJpbGl0eV9tb2RlOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIGxlbjsKPiA+ IC19Cj4gPiAtCj4gPiAtQ09ORklHRlNfQVRUUigsIGN0eF9yZXN0b3JlX21pZF9iYik7Cj4gPiAt Q09ORklHRlNfQVRUUigsIGN0eF9yZXN0b3JlX3Bvc3RfYmIpOwo+ID4gLUNPTkZJR0ZTX0FUVFIo LCBlbmdpbmVzX2FsbG93ZWQpOwo+ID4gLUNPTkZJR0ZTX0FUVFIoLCBndF90eXBlc19hbGxvd2Vk KTsKPiA+IC1DT05GSUdGU19BVFRSKCwgZW5hYmxlX211bHRpX3F1ZXVlKTsKPiA+IC1DT05GSUdG U19BVFRSKCwgZW5hYmxlX3BzbWkpOwo+ID4gLUNPTkZJR0ZTX0FUVFIoLCBzdXJ2aXZhYmlsaXR5 X21vZGUpOwo+ID4gLQo+ID4gLXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp4ZV9j b25maWdfZGV2aWNlX2F0dHJzW10gPSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqAmYXR0cl9jdHhfcmVz dG9yZV9taWRfYmIsCj4gPiAtwqDCoMKgwqDCoMKgwqAmYXR0cl9jdHhfcmVzdG9yZV9wb3N0X2Ji LAo+ID4gLcKgwqDCoMKgwqDCoMKgJmF0dHJfZW5naW5lc19hbGxvd2VkLAo+ID4gLcKgwqDCoMKg wqDCoMKgJmF0dHJfZ3RfdHlwZXNfYWxsb3dlZCwKPiA+IC3CoMKgwqDCoMKgwqDCoCZhdHRyX2Vu YWJsZV9tdWx0aV9xdWV1ZSwKPiA+IC3CoMKgwqDCoMKgwqDCoCZhdHRyX2VuYWJsZV9wc21pLAo+ ID4gLcKgwqDCoMKgwqDCoMKgJmF0dHJfc3Vydml2YWJpbGl0eV9tb2RlLAo+ID4gLcKgwqDCoMKg wqDCoMKgTlVMTCwKPiA+IC19Owo+ID4gLQo+ID4gwqBzdGF0aWMgdm9pZCB4ZV9jb25maWdfZGV2 aWNlX3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQo+ID4gwqB7Cj4gPiAtwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAqZGV2ID0KPiA+IHRvX3hlX2Nv bmZpZ19ncm91cF9kZXZpY2UoaXRlbSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29u ZmlnX2dyb3VwX2RldmljZSAqZGV2ID0KPiA+IHhlX2NvbmZpZ2ZzX3RvX2dyb3VwX2RldmljZShp dGVtKTsKPiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgbXV0ZXhfZGVzdHJveSgmZGV2LT5sb2Nr KTsKPiA+IMKgCj4gPiAtwqDCoMKgwqDCoMKgwqBrZnJlZShkZXYtPmNvbmZpZy5jdHhfcmVzdG9y ZV9taWRfYmJbMF0uY3MpOwo+ID4gLcKgwqDCoMKgwqDCoMKga2ZyZWUoZGV2LT5jb25maWcuY3R4 X3Jlc3RvcmVfcG9zdF9iYlswXS5jcyk7Cj4gPiArwqDCoMKgwqDCoMKgwqB4ZV9jb25maWdmc19k ZWJ1Z19yZWxlYXNlX2NvbmZpZygmZGV2LT5jb25maWcpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoGtm cmVlKGRldik7Cj4gPiDCoH0KPiA+IMKgCj4gPiBAQCAtMTAzNywzMyArMTY3LDE0IEBAIHN0YXRp YyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zCj4gPiB4ZV9jb25maWdfZGV2aWNlX29w cyA9IHsKPiA+IMKgwqDCoMKgwqDCoMKgwqAucmVsZWFzZcKgwqDCoMKgwqDCoMKgwqA9IHhlX2Nv bmZpZ19kZXZpY2VfcmVsZWFzZSwKPiA+IMKgfTsKPiA+IMKgCj4gPiAtc3RhdGljIGJvb2wgeGVf Y29uZmlnX2RldmljZV9pc192aXNpYmxlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlCj4gPiAqYXR0ciwg aW50IG4pCj4gPiAtewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9k ZXZpY2UgKmRldiA9Cj4gPiB0b194ZV9jb25maWdfZ3JvdXBfZGV2aWNlKGl0ZW0pOwo+ID4gLQo+ ID4gLcKgwqDCoMKgwqDCoMKgaWYgKGF0dHIgPT0gJmF0dHJfc3Vydml2YWJpbGl0eV9tb2RlKSB7 Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFkZXYtPmRlc2MtPmlzX2Rn ZnggfHwgZGV2LT5kZXNjLT5wbGF0Zm9ybSA8Cj4gPiBYRV9CQVRUTEVNQUdFKQo+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4g PiAtwqDCoMKgwqDCoMKgwqB9Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsK PiA+IC19Cj4gPiAtCj4gPiAtc3RhdGljIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25z IHhlX2NvbmZpZ19kZXZpY2VfZ3JvdXBfb3BzCj4gPiA9IHsKPiA+IC3CoMKgwqDCoMKgwqDCoC5p c192aXNpYmxlwqDCoMKgwqDCoD0geGVfY29uZmlnX2RldmljZV9pc192aXNpYmxlLAo+ID4gLX07 Cj4gPiAtCj4gPiDCoHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB4ZV9jb25m aWdfZGV2aWNlX3R5cGUgPSB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgLmN0X2l0ZW1fb3BzwqDCoMKg wqA9ICZ4ZV9jb25maWdfZGV2aWNlX29wcywKPiA+IC3CoMKgwqDCoMKgwqDCoC5jdF9ncm91cF9v cHPCoMKgwqA9ICZ4ZV9jb25maWdfZGV2aWNlX2dyb3VwX29wcywKPiA+IC3CoMKgwqDCoMKgwqDC oC5jdF9hdHRyc8KgwqDCoMKgwqDCoMKgPSB4ZV9jb25maWdfZGV2aWNlX2F0dHJzLAo+ID4gwqDC oMKgwqDCoMKgwqDCoC5jdF9vd25lcsKgwqDCoMKgwqDCoMKgPSBUSElTX01PRFVMRSwKPiA+IMKg fTsKPiA+IMKgCj4gPiDCoHN0YXRpYyBzc2l6ZV90IHNyaW92X21heF92ZnNfc2hvdyhzdHJ1Y3Qg Y29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIKPiA+ICpwYWdlKQo+ID4gwqB7Cj4gPiAtwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAqZGV2ID0KPiA+IHRvX3hlX2NvbmZp Z19ncm91cF9kZXZpY2UoaXRlbS0+Y2lfcGFyZW50KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4geGVfY29uZmlnZnNfc3ViZ3JvdXBf dG9fZ3JvdXBfZGV2aWNlKGl0ZW0pOwo+ID4gwqAKPiA+IMKgwqDCoMKgwqDCoMKgwqBndWFyZCht dXRleCkoJmRldi0+bG9jayk7Cj4gPiDCoAo+ID4gQEAgLTEwNzUsMTMgKzE4NiwxMyBAQCBzdGF0 aWMgc3NpemVfdCBzcmlvdl9tYXhfdmZzX3Nob3coc3RydWN0Cj4gPiBjb25maWdfaXRlbSAqaXRl bSwgY2hhciAqcGFnZSkKPiA+IMKgCj4gPiDCoHN0YXRpYyBzc2l6ZV90IHNyaW92X21heF92ZnNf c3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdAo+ID4gY2hhciAqcGFnZSwgc2l6 ZV90IGxlbikKPiA+IMKgewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91 cF9kZXZpY2UgKmRldiA9Cj4gPiB0b194ZV9jb25maWdfZ3JvdXBfZGV2aWNlKGl0ZW0tPmNpX3Bh cmVudCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAq ZGV2ID0KPiA+IHhlX2NvbmZpZ2ZzX3N1Ymdyb3VwX3RvX2dyb3VwX2RldmljZShpdGVtKTsKPiA+ IMKgwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgbWF4X3ZmczsKPiA+IMKgwqDCoMKgwqDCoMKg wqBpbnQgcmV0Owo+ID4gwqAKPiA+IMKgwqDCoMKgwqDCoMKgwqBndWFyZChtdXRleCkoJmRldi0+ bG9jayk7Cj4gPiDCoAo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKGlzX2JvdW5kKGRldikpCj4gPiAr wqDCoMKgwqDCoMKgwqBpZiAoeGVfY29uZmlnZnNfaXNfYm91bmQoZGV2KSkKPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FQlVTWTsKPiA+IMKgCj4gPiDCoMKgwqDC oMKgwqDCoMKgcmV0ID0ga3N0cnRvdWludChwYWdlLCAwLCAmbWF4X3Zmcyk7Cj4gPiBAQCAtMTA5 Nyw3ICsyMDgsNyBAQCBzdGF0aWMgc3NpemVfdCBzcmlvdl9tYXhfdmZzX3N0b3JlKHN0cnVjdAo+ ID4gY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKnBhZ2UsIHMKPiA+IMKgCj4gPiDCoHN0 YXRpYyBzc2l6ZV90IHNyaW92X2FkbWluX29ubHlfcGZfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0g Kml0ZW0sCj4gPiBjaGFyICpwYWdlKQo+ID4gwqB7Cj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg eGVfY29uZmlnX2dyb3VwX2RldmljZSAqZGV2ID0KPiA+IHRvX3hlX2NvbmZpZ19ncm91cF9kZXZp Y2UoaXRlbS0+Y2lfcGFyZW50KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdf Z3JvdXBfZGV2aWNlICpkZXYgPQo+ID4geGVfY29uZmlnZnNfc3ViZ3JvdXBfdG9fZ3JvdXBfZGV2 aWNlKGl0ZW0pOwo+ID4gwqAKPiA+IMKgwqDCoMKgwqDCoMKgwqBndWFyZChtdXRleCkoJmRldi0+ bG9jayk7Cj4gPiDCoAo+ID4gQEAgLTExMDYsMTMgKzIxNywxMyBAQCBzdGF0aWMgc3NpemVfdAo+ ID4gc3Jpb3ZfYWRtaW5fb25seV9wZl9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hh ciAqcGFnZSkKPiA+IMKgCj4gPiDCoHN0YXRpYyBzc2l6ZV90IHNyaW92X2FkbWluX29ubHlfcGZf c3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAo+ID4gY29uc3QgY2hhciAqcGFnZSwgc2l6 ZV90IGxlbikKPiA+IMKgewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91 cF9kZXZpY2UgKmRldiA9Cj4gPiB0b194ZV9jb25maWdfZ3JvdXBfZGV2aWNlKGl0ZW0tPmNpX3Bh cmVudCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAq ZGV2ID0KPiA+IHhlX2NvbmZpZ2ZzX3N1Ymdyb3VwX3RvX2dyb3VwX2RldmljZShpdGVtKTsKPiA+ IMKgwqDCoMKgwqDCoMKgwqBib29sIGFkbWluX29ubHlfcGY7Cj4gPiDCoMKgwqDCoMKgwqDCoMKg aW50IHJldDsKPiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgZ3VhcmQobXV0ZXgpKCZkZXYtPmxv Y2spOwo+ID4gwqAKPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChpc19ib3VuZChkZXYpKQo+ID4gK8Kg wqDCoMKgwqDCoMKgaWYgKHhlX2NvbmZpZ2ZzX2lzX2JvdW5kKGRldikpCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUJVU1k7Cj4gPiDCoAo+ID4gwqDCoMKgwqDC oMKgwqDCoHJldCA9IGtzdHJ0b2Jvb2wocGFnZSwgJmFkbWluX29ubHlfcGYpOwo+ID4gQEAgLTEx MzUsNyArMjQ2LDcgQEAgc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUKPiA+ICp4ZV9j b25maWdfc3Jpb3ZfYXR0cnNbXSA9IHsKPiA+IMKgc3RhdGljIGJvb2wgeGVfY29uZmlnX3NyaW92 X2lzX3Zpc2libGUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlCj4gPiAqYXR0ciwgaW50IG4pCj4gPiDCoHsK PiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ ID4gdG9feGVfY29uZmlnX2dyb3VwX2RldmljZShpdGVtLT5jaV9wYXJlbnQpOwo+ID4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UgKmRldiA9Cj4gPiB4ZV9jb25m aWdmc19zdWJncm91cF90b19ncm91cF9kZXZpY2UoaXRlbSk7Cj4gPiDCoAo+ID4gwqDCoMKgwqDC oMKgwqDCoGlmIChhdHRyID09ICZzcmlvdl9hdHRyX21heF92ZnMgJiYgZGV2LT5tb2RlICE9Cj4g PiBYRV9TUklPVl9NT0RFX1BGKQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gZmFsc2U7Cj4gPiBAQCAtMTI3MSw3ICszODIsMTcgQEAgc3RhdGljIHN0cnVjdCBjb25m aWdmc19zdWJzeXN0ZW0geGVfY29uZmlnZnMKPiA+ID0gewo+ID4gwqDCoMKgwqDCoMKgwqDCoH0s Cj4gPiDCoH07Cj4gPiDCoAo+ID4gLXN0YXRpYyBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2Rldmlj ZQo+ID4gKmZpbmRfeGVfY29uZmlnX2dyb3VwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldikK PiA+ICsvKioKPiA+ICsgKiB4ZV9jb25maWdmc19maW5kX2dyb3VwX2RldmljZSgpIC0gRmluZCBh IGNvbmZpZ2ZzIGdyb3VwIGJ5IFBDSQo+ID4gZGV2aWNlLgo+ID4gKyAqIEBwZGV2OiB0aGUgJnBj aV9kZXYgdG8gbG9vayB1cAo+ID4gKyAqCj4gPiArICogU2VhcmNoZXMgdGhlIGNvbmZpZ2ZzIHN1 YnN5c3RlbSBmb3IgYSBncm91cCB3aG9zZSBuYW1lIG1hdGNoZXMKPiA+IEBwZGV2Lgo+ID4gKyAq IElmIGZvdW5kLCB0aGUgcmV0dXJuZWQgZ3JvdXAgaGFzIGFuIGVsZXZhdGVkIHJlZmVyZW5jZSBj b3VudDsKPiA+IHRoZSBjYWxsZXIKPiA+ICsgKiBtdXN0IGNhbGwgY29uZmlnX2dyb3VwX3B1dCgp IHdoZW4gZG9uZS4KPiA+ICsgKgo+ID4gKyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgbWF0Y2hp bmcgJnhlX2NvbmZpZ19ncm91cF9kZXZpY2UsIG9yCj4gPiBOVUxMLgo+ID4gKyAqLwo+ID4gK3N0 cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlCj4gPiAqeGVfY29uZmlnZnNfZmluZF9ncm91cF9k ZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4gPiDCoHsKPiA+IMKgwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW07Cj4gPiDCoAo+ID4gQEAgLTEyODIsMjMgKzQwMywyNSBA QCBzdGF0aWMgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UKPiA+ICpmaW5kX3hlX2NvbmZp Z19ncm91cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYKPiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAoIWl0 ZW0pCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+ID4g wqAKPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiB0b194ZV9jb25maWdfZ3JvdXBfZGV2aWNlKGl0 ZW0pOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHhlX2NvbmZpZ2ZzX3RvX2dyb3VwX2Rldmlj ZShpdGVtKTsKPiA+IMKgfQo+ID4gwqAKPiA+IMKgc3RhdGljIHZvaWQgZHVtcF9jdXN0b21fZGV2 X2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB4ZV9j b25maWdfZ3JvdXBfZGV2aWNlCj4gPiAqZGV2KQo+ID4gwqB7Cj4gPiDCoCNkZWZpbmUgUFJJX0NV U1RPTV9BVFRSKGZtdF8sIGF0dHJfKSBkbyB7IFwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoZGV2LT5jb25maWcuYXR0cl8gIT0gZGV2aWNlX2RlZmF1bHRzLmF0dHJfKSBc Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGRldi0+Y29uZmlnLmF0dHJf ICE9Cj4gPiB4ZV9jb25maWdmc19kZXZpY2VfZGVmYXVsdHMuYXR0cl8pIFwKPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBjaV9pbmZvKHBkZXYsICJj b25maWdmczogIgo+ID4gX19zdHJpbmdpZnkoYXR0cl8pICIgPSAiIGZtdF8gIlxuIiwgXAo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBkZXYtPmNvbmZpZy5hdHRyXyk7IFwKPiA+IMKgwqDCoMKgwqDCoMKgwqB9IHdoaWxl ICgwKQo+ID4gwqAKPiA+IC3CoMKgwqDCoMKgwqDCoFBSSV9DVVNUT01fQVRUUigiJWxseCIsIGVu Z2luZXNfYWxsb3dlZCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBQUklfQ1VTVE9NX0FUVFIoIiVsbHgi LCBndF90eXBlc19hbGxvd2VkKTsKPiA+IC3CoMKgwqDCoMKgwqDCoFBSSV9DVVNUT01fQVRUUigi JWQiLCBlbmFibGVfbXVsdGlfcXVldWUpOwo+ID4gLcKgwqDCoMKgwqDCoMKgUFJJX0NVU1RPTV9B VFRSKCIlZCIsIGVuYWJsZV9wc21pKTsKPiA+IC3CoMKgwqDCoMKgwqDCoFBSSV9DVVNUT01fQVRU UigiJWQiLCBzdXJ2aXZhYmlsaXR5X21vZGUpOwo+ID4gKyNpZiBJU19FTkFCTEVEKENPTkZJR19E Uk1fWEVfREVCVUcpCj4gPiArwqDCoMKgwqDCoMKgwqBQUklfQ1VTVE9NX0FUVFIoIiVsbHgiLCBk ZWJ1Zy5lbmdpbmVzX2FsbG93ZWQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgUFJJX0NVU1RPTV9BVFRS KCIlbGx4IiwgZGVidWcuZ3RfdHlwZXNfYWxsb3dlZCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBQUklf Q1VTVE9NX0FUVFIoIiVkIiwgZGVidWcuZW5hYmxlX211bHRpX3F1ZXVlKTsKPiA+ICvCoMKgwqDC oMKgwqDCoFBSSV9DVVNUT01fQVRUUigiJWQiLCBkZWJ1Zy5lbmFibGVfcHNtaSk7Cj4gPiArwqDC oMKgwqDCoMKgwqBQUklfQ1VTVE9NX0FUVFIoIiVkIiwgZGVidWcuc3Vydml2YWJpbGl0eV9tb2Rl KTsKPiA+ICsjZW5kaWYKPiA+IMKgwqDCoMKgwqDCoMKgwqBQUklfQ1VTVE9NX0FUVFIoIiV1Iiwg c3Jpb3YuYWRtaW5fb25seV9wZik7Cj4gPiDCoAo+ID4gwqAjdW5kZWYgUFJJX0NVU1RPTV9BVFRS Cj4gPiBAQCAtMTMxMywxMyArNDM2LDEzIEBAIHN0YXRpYyB2b2lkIGR1bXBfY3VzdG9tX2Rldl9j b25maWcoc3RydWN0Cj4gPiBwY2lfZGV2ICpwZGV2LAo+ID4gwqAgKi8KPiA+IMKgdm9pZCB4ZV9j b25maWdmc19jaGVja19kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4gPiDCoHsKPiA+IC3C oMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4gZmlu ZF94ZV9jb25maWdfZ3JvdXBfZGV2aWNlKHBkZXYpOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UgKmRldiA9Cj4gPiB4ZV9jb25maWdmc19maW5kX2dyb3Vw X2RldmljZShwZGV2KTsKPiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgaWYgKCFkZXYpCj4gPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiA+IMKgCj4gPiDCoMKgwqDC oMKgwqDCoMKgLyogbWVtY21wIGhlcmUgaXMgc2FmZSBhcyBib3RoIGFyZSB6ZXJvLWluaXRpYWxp emVkICovCj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAobWVtY21wKCZkZXYtPmNvbmZpZywgJmRldmlj ZV9kZWZhdWx0cywgc2l6ZW9mKGRldi0KPiA+ID5jb25maWcpKSkgewo+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKG1lbWNtcCgmZGV2LT5jb25maWcsICZ4ZV9jb25maWdmc19kZXZpY2VfZGVmYXVsdHMs Cj4gPiBzaXplb2YoZGV2LT5jb25maWcpKSkgewo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBwY2lfaW5mbyhwZGV2LCAiRm91bmQgY3VzdG9tIHNldHRpbmdzIGluCj4gPiBjb25m aWdmc1xuIik7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGR1bXBfY3VzdG9t X2Rldl9jb25maWcocGRldiwgZGV2KTsKPiA+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiBAQCAtMTM0 MSw3ICs0NjQsNyBAQCB2b2lkIHhlX2NvbmZpZ2ZzX2NoZWNrX2RldmljZShzdHJ1Y3QgcGNpX2Rl dgo+ID4gKnBkZXYpCj4gPiDCoCAqLwo+ID4gwqBib29sIHhlX2NvbmZpZ2ZzX2FkbWluX29ubHlf cGYoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4gPiDCoHsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVj dCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4gZmluZF94ZV9jb25maWdfZ3JvdXBf ZGV2aWNlKHBkZXYpOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9k ZXZpY2UgKmRldiA9Cj4gPiB4ZV9jb25maWdmc19maW5kX2dyb3VwX2RldmljZShwZGV2KTsKPiA+ IMKgwqDCoMKgwqDCoMKgwqBib29sIGFkbWluX29ubHlfcGY7Cj4gPiDCoAo+ID4gwqDCoMKgwqDC oMKgwqDCoGlmICghZGV2KQo+ID4gQEAgLTEzNjYsNyArNDg5LDcgQEAgYm9vbCB4ZV9jb25maWdm c19hZG1pbl9vbmx5X3BmKHN0cnVjdCBwY2lfZGV2Cj4gPiAqcGRldikKPiA+IMKgICovCj4gPiDC oHVuc2lnbmVkIGludCB4ZV9jb25maWdmc19nZXRfbWF4X3ZmcyhzdHJ1Y3QgcGNpX2RldiAqcGRl dikKPiA+IMKgewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZp Y2UgKmRldiA9Cj4gPiBmaW5kX3hlX2NvbmZpZ19ncm91cF9kZXZpY2UocGRldik7Cj4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAqZGV2ID0KPiA+IHhlX2Nv bmZpZ2ZzX2ZpbmRfZ3JvdXBfZGV2aWNlKHBkZXYpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoHVuc2ln bmVkIGludCBtYXhfdmZzOwo+ID4gwqAKPiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAoIWRldikKPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnMuaAo+ID4gYi9kcml2 ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnMuaAo+ID4gaW5kZXggN2RiMmY0NjI5MWZhLi5hMmRj MGE3Y2M3YjUgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnMu aAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2NvbmZpZ2ZzLmgKPiA+IEBAIC0xMiwy NCArMTIsNzYgQEAKPiA+IMKgI2luY2x1ZGUgInhlX2RlZmF1bHRzLmgiCj4gPiDCoCNpbmNsdWRl ICJ4ZV9tb2R1bGUuaCIKPiA+IMKgCj4gPiArc3RydWN0IGNvbmZpZ19pdGVtOwo+ID4gwqBzdHJ1 Y3QgcGNpX2RldjsKPiA+ICtzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZTsKPiA+ICsKPiA+ ICtleHRlcm4gY29uc3Qgc3RydWN0IHhlX2NvbmZpZ19kZXZpY2UgeGVfY29uZmlnZnNfZGV2aWNl X2RlZmF1bHRzOwo+ID4gwqAKPiA+IMKgI2lmIElTX0VOQUJMRUQoQ09ORklHX0NPTkZJR0ZTX0ZT KQo+ID4gKy8qKgo+ID4gKyAqIHhlX2NvbmZpZ2ZzX3RvX2dyb3VwX2RldmljZSgpIC0gQ2FzdCBh IGNvbmZpZ19pdGVtIHRvCj4gPiAmeGVfY29uZmlnX2dyb3VwX2RldmljZS4KPiA+ICsgKiBAaXRl bTogdGhlICZjb25maWdfaXRlbSBlbWJlZGRlZCBpbiB0aGUgZGV2aWNlIGdyb3VwCj4gPiArICoK PiA+ICsgKiBUaGUgQGl0ZW0gbXVzdCBiZSB0aGUgdG9wLWxldmVsIGRldmljZSBncm91cCdzIGNn X2l0ZW0sIG5vdCBhCj4gPiBzdWJncm91cCBpdGVtLgo+ID4gKyAqIFVzZSB4ZV9jb25maWdmc19z dWJncm91cF90b19ncm91cF9kZXZpY2UoKSBmb3Igc3ViZ3JvdXAKPiA+IHNob3cvc3RvcmUgY2Fs bGJhY2tzLgo+ID4gKyAqCj4gPiArICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBlbmNsb3Npbmcg JnhlX2NvbmZpZ19ncm91cF9kZXZpY2UuCj4gPiArICovCj4gPiArc3RhdGljIGlubGluZSBzdHJ1 Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAqCj4gPiAreGVfY29uZmlnZnNfdG9fZ3JvdXBfZGV2 aWNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwgc3RydWN0Cj4gPiB4ZV9j b25maWdfZ3JvdXBfZGV2aWNlLCBncm91cCk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAq IHhlX2NvbmZpZ2ZzX3RvX2RldmljZSgpIC0gQ2FzdCBhIGNvbmZpZ19pdGVtIHRvCj4gPiAmeGVf Y29uZmlnX2RldmljZS4KPiA+ICsgKiBAaXRlbTogdGhlICZjb25maWdfaXRlbSBlbWJlZGRlZCBp biB0aGUgZGV2aWNlIGdyb3VwCj4gPiArICoKPiA+ICsgKiBDb252ZW5pZW5jZSB3cmFwcGVyIGFy b3VuZCB4ZV9jb25maWdmc190b19ncm91cF9kZXZpY2UoKS4KPiA+ICsgKgo+ID4gKyAqIFJldHVy bjogcG9pbnRlciB0byB0aGUgJnhlX2NvbmZpZ19kZXZpY2UgbmVzdGVkIGluIHRoZSBncm91cC4K PiA+ICsgKi8KPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZV9jb25maWdfZGV2aWNlCj4gPiAq eGVfY29uZmlnZnNfdG9fZGV2aWNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKPiA+ICt7Cj4g PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gJnhlX2NvbmZpZ2ZzX3RvX2dyb3VwX2RldmljZShpdGVt KS0+Y29uZmlnOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB4ZV9jb25maWdmc19zdWJn cm91cF90b19ncm91cF9kZXZpY2UoKSAtIENhc3QgYSBzdWJncm91cCBpdGVtCj4gPiB0byAmeGVf Y29uZmlnX2dyb3VwX2RldmljZS4KPiA+ICsgKiBAaXRlbTogdGhlICZjb25maWdfaXRlbSBvZiBh IHN1Ymdyb3VwIChlLmcuIHNyaW92IG9yIGRlYnVnKQo+ID4gKyAqCj4gPiArICogSW4gY29uZmln ZnMsIHNob3cvc3RvcmUgY2FsbGJhY2tzIGZvciBhIHN1Ymdyb3VwJ3MgYXR0cmlidXRlcwo+ID4g cmVjZWl2ZSB0aGUKPiA+ICsgKiBzdWJncm91cCdzIGNnX2l0ZW0sIHdob3NlIHBhcmVudCBpcyB0 aGUgZGV2aWNlIGdyb3VwJ3MgY2dfaXRlbS4KPiA+ICsgKiBUaGlzIGhlbHBlciB3YWxrcyB1cCBv bmUgbGV2ZWwgdG8gcmV0dXJuIHRoZSBlbmNsb3NpbmcgZGV2aWNlCj4gPiBncm91cC4KPiA+ICsg Kgo+ID4gKyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgZW5jbG9zaW5nICZ4ZV9jb25maWdfZ3Jv dXBfZGV2aWNlLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhlX2NvbmZpZ19n cm91cF9kZXZpY2UgKgo+ID4gK3hlX2NvbmZpZ2ZzX3N1Ymdyb3VwX3RvX2dyb3VwX2RldmljZShz dHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJu IHhlX2NvbmZpZ2ZzX3RvX2dyb3VwX2RldmljZShpdGVtLT5jaV9wYXJlbnQpOwo+ID4gK30KPiA+ ICsKPiA+ICsvKioKPiA+ICsgKiB4ZV9jb25maWdmc19zdWJncm91cF90b19kZXZpY2UoKSAtIENh c3QgYSBzdWJncm91cCBpdGVtIHRvCj4gPiAmeGVfY29uZmlnX2RldmljZS4KPiA+ICsgKiBAaXRl bTogdGhlICZjb25maWdfaXRlbSBvZiBhIHN1Ymdyb3VwIChlLmcuIHNyaW92IG9yIGRlYnVnKQo+ ID4gKyAqCj4gPiArICogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgYSBzdWJncm91cCBpdGVtIHRv IGdldCB0aGUKPiA+ICZ4ZV9jb25maWdfZGV2aWNlLgo+ID4gKyAqCj4gPiArICogUmV0dXJuOiBw b2ludGVyIHRvIHRoZSAmeGVfY29uZmlnX2RldmljZSBuZXN0ZWQgaW4gdGhlIHBhcmVudAo+ID4g ZGV2aWNlIGdyb3VwLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhlX2NvbmZp Z19kZXZpY2UgKgo+ID4gK3hlX2NvbmZpZ2ZzX3N1Ymdyb3VwX3RvX2RldmljZShzdHJ1Y3QgY29u ZmlnX2l0ZW0gKml0ZW0pCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHhlX2NvbmZp Z2ZzX3RvX2RldmljZShpdGVtLT5jaV9wYXJlbnQpOwo+ID4gK30KPiA+ICsKPiA+ICtib29sIHhl X2NvbmZpZ2ZzX2lzX2JvdW5kKHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYpOwo+ ID4gK3N0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlCj4gPiAqeGVfY29uZmlnZnNfZmluZF9n cm91cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwo+ID4gwqBpbnQgeGVfY29uZmlnZnNf aW5pdCh2b2lkKTsKPiA+IMKgdm9pZCB4ZV9jb25maWdmc19leGl0KHZvaWQpOwo+ID4gwqB2b2lk IHhlX2NvbmZpZ2ZzX2NoZWNrX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cj4gPiAtdTMy IHhlX2NvbmZpZ2ZzX2dldF9jdHhfcmVzdG9yZV9taWRfYmIoc3RydWN0IHBjaV9kZXYgKnBkZXYs Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSB4ZV9lbmdpbmVfY2xhc3MgY2xhc3MsCj4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgdTMyICoqY3MpOwo+ID4gLXUzMiB4ZV9jb25maWdmc19n ZXRfY3R4X3Jlc3RvcmVfcG9zdF9iYihzdHJ1Y3QgcGNpX2RldiAqcGRldiwKPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBlbnVtIHhlX2VuZ2luZV9jbGFzcyBjbGFzcywKPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBjb25zdCB1MzIgKipjcyk7Cj4gPiAtdTY0IHhlX2NvbmZpZ2ZzX2dldF9lbmdp bmVzX2FsbG93ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwo+ID4gLWJvb2wgeGVfY29uZmlnZnNf cHJpbWFyeV9ndF9hbGxvd2VkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKPiA+IC1ib29sIHhlX2Nv bmZpZ2ZzX21lZGlhX2d0X2FsbG93ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwo+ID4gLWJvb2wg eGVfY29uZmlnZnNfZ2V0X2VuYWJsZV9tdWx0aV9xdWV1ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7 Cj4gPiAtYm9vbCB4ZV9jb25maWdmc19nZXRfcHNtaV9lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpw ZGV2KTsKPiA+IC1ib29sIHhlX2NvbmZpZ2ZzX2dldF9zdXJ2aXZhYmlsaXR5X21vZGUoc3RydWN0 IHBjaV9kZXYgKnBkZXYpOwo+ID4gwqAjaWZkZWYgQ09ORklHX1BDSV9JT1YKPiA+IMKgdW5zaWdu ZWQgaW50IHhlX2NvbmZpZ2ZzX2dldF9tYXhfdmZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKPiA+ IMKgYm9vbCB4ZV9jb25maWdmc19hZG1pbl9vbmx5X3BmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsK PiA+IEBAIC0zOCwxOCArOTAsNiBAQCBib29sIHhlX2NvbmZpZ2ZzX2FkbWluX29ubHlfcGYoc3Ry dWN0IHBjaV9kZXYKPiA+ICpwZGV2KTsKPiA+IMKgc3RhdGljIGlubGluZSBpbnQgeGVfY29uZmln ZnNfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9Cj4gPiDCoHN0YXRpYyBpbmxpbmUgdm9pZCB4ZV9j b25maWdmc19leGl0KHZvaWQpIHsgfQo+ID4gwqBzdGF0aWMgaW5saW5lIHZvaWQgeGVfY29uZmln ZnNfY2hlY2tfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ID4geyB9Cj4gPiAtc3RhdGlj IGlubGluZSB1MzIgeGVfY29uZmlnZnNfZ2V0X2N0eF9yZXN0b3JlX21pZF9iYihzdHJ1Y3QKPiA+ IHBjaV9kZXYgKnBkZXYsCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGVudW0KPiA+IHhlX2VuZ2luZV9jbGFzcyBjbGFzcywKPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgdTMyCj4gPiAqKmNzKSB7 IHJldHVybiAwOyB9Cj4gPiAtc3RhdGljIGlubGluZSB1MzIgeGVfY29uZmlnZnNfZ2V0X2N0eF9y ZXN0b3JlX3Bvc3RfYmIoc3RydWN0Cj4gPiBwY2lfZGV2ICpwZGV2LAo+ID4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0KPiA+IHhlX2VuZ2luZV9j bGFzcyBjbGFzcywKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjb25zdCB1MzIKPiA+ICoqY3MpIHsgcmV0dXJuIDA7IH0KPiA+IC1zdGF0aWMgaW5s aW5lIHU2NCB4ZV9jb25maWdmc19nZXRfZW5naW5lc19hbGxvd2VkKHN0cnVjdCBwY2lfZGV2Cj4g PiAqcGRldikgeyByZXR1cm4gVTY0X01BWDsgfQo+ID4gLXN0YXRpYyBpbmxpbmUgYm9vbCB4ZV9j b25maWdmc19wcmltYXJ5X2d0X2FsbG93ZWQoc3RydWN0IHBjaV9kZXYKPiA+ICpwZGV2KSB7IHJl dHVybiB0cnVlOyB9Cj4gPiAtc3RhdGljIGlubGluZSBib29sIHhlX2NvbmZpZ2ZzX21lZGlhX2d0 X2FsbG93ZWQoc3RydWN0IHBjaV9kZXYKPiA+ICpwZGV2KSB7IHJldHVybiB0cnVlOyB9Cj4gPiAt c3RhdGljIGlubGluZSBib29sIHhlX2NvbmZpZ2ZzX2dldF9lbmFibGVfbXVsdGlfcXVldWUoc3Ry dWN0Cj4gPiBwY2lfZGV2ICpwZGV2KSB7IHJldHVybiB0cnVlOyB9Cj4gPiAtc3RhdGljIGlubGlu ZSBib29sIHhlX2NvbmZpZ2ZzX2dldF9wc21pX2VuYWJsZWQoc3RydWN0IHBjaV9kZXYKPiA+ICpw ZGV2KSB7IHJldHVybiBmYWxzZTsgfQo+ID4gLXN0YXRpYyBpbmxpbmUgYm9vbCB4ZV9jb25maWdm c19nZXRfc3Vydml2YWJpbGl0eV9tb2RlKHN0cnVjdAo+ID4gcGNpX2RldiAqcGRldikgeyByZXR1 cm4gZmFsc2U7IH0KPiA+IMKgI2lmZGVmIENPTkZJR19QQ0lfSU9WCj4gPiDCoHN0YXRpYyBpbmxp bmUgdW5zaWduZWQgaW50IHhlX2NvbmZpZ2ZzX2dldF9tYXhfdmZzKHN0cnVjdCBwY2lfZGV2Cj4g PiAqcGRldikKPiA+IMKgewo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9j b25maWdmc19kZWJ1Zy5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9jb25maWdmc19kZWJ1 Zy5jCj4gPiBpbmRleCA0NTYxNzI4MmNlYzUuLmIyNjY3NTczZWZiZSAxMDA2NDQKPiA+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9jb25maWdmc19kZWJ1Zy5jCj4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0veGUveGVfY29uZmlnZnNfZGVidWcuYwo+ID4gQEAgLTMsMTIgKzMsOTY4IEBACj4g PiDCoCAqIENvcHlyaWdodCDCqSAyMDI2IEludGVsIENvcnBvcmF0aW9uCj4gPiDCoCAqLwo+ID4g wqAKPiA+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Cj4gPiDCoCNpbmNsdWRlIDxsaW51eC9j b25maWdmcy5oPgo+ID4gwqAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiArI2luY2x1ZGUg PGxpbnV4L2NsZWFudXAuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvZmluZC5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9wY2kuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Cj4gPiDCoAo+ ID4gKyNpbmNsdWRlICJhYmkvZ3VjX2xvZ19hYmkuaCIKPiA+ICsjaW5jbHVkZSAiaW5zdHJ1Y3Rp b25zL3hlX21pX2NvbW1hbmRzLmgiCj4gPiArI2luY2x1ZGUgInhlX2NvbmZpZ2ZzLmgiCj4gPiDC oCNpbmNsdWRlICJ4ZV9jb25maWdmc19kZWJ1Zy5oIgo+ID4gwqAjaW5jbHVkZSAieGVfY29uZmln ZnNfdHlwZXMuaCIKPiA+ICsjaW5jbHVkZSAieGVfZ3RfdHlwZXMuaCIKPiA+ICsjaW5jbHVkZSAi eGVfaHdfZW5naW5lX3R5cGVzLmgiCj4gPiArI2luY2x1ZGUgInhlX3BjaV90eXBlcy5oIgo+ID4g Kwo+ID4gKy8qKgo+ID4gKyAqIERPQzogWGUgQ29uZmlnZnMgRGVidWcgQXR0cmlidXRlcwo+ID4g KyAqCj4gPiArICogT3ZlcnZpZXcKPiA+ICsgKiA9PT09PT09PQo+ID4gKyAqCj4gPiArICogVGhl IGZvbGxvd2luZyBjb25maWdmcyBhdHRyaWJ1dGVzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIHRo ZQo+ID4ga2VybmVsIGlzCj4gPiArICogYnVpbHQgd2l0aCBgYENPTkZJR19EUk1fWEVfREVCVUc9 eWBgLiBUaGV5IGFwcGVhciB1bmRlciB0aGUKPiA+IGBgZGVidWcvYGAKPiA+ICsgKiBzdWJkaXJl Y3Rvcnkgb2YgZWFjaCB4ZSBjb25maWdmcyBkZXZpY2UuIFRoZXkgYXJlIGludGVuZGVkIGZvcgo+ ID4gaGFyZHdhcmUKPiA+ICsgKiBhbmQgZHJpdmVyIGRlYnVnZ2luZyBhbmQgYXJlIG5vdCBzdGFi bGUgQUJJLiBVc2luZyB0aGVtIGlzICJhdAo+ID4geW91ciBvd24KPiA+ICsgKiByaXNrIi4KPiA+ ICsgKgo+ID4gKyAqIFNlZSB0aGUgdG9wLWxldmVsIGBgWGUgQ29uZmlnZnNgYCBkb2N1bWVudGF0 aW9uIGluCj4gPiBgYHhlX2NvbmZpZ2ZzLmNgYAo+ID4gKyAqIGZvciBob3cgdG8gY3JlYXRlLCBw cm9iZSBhbmQgcmVtb3ZlIGNvbmZpZ2ZzIGRldmljZXMuIE9uY2UgYQo+ID4gZGV2aWNlCj4gPiAr ICogZGlyZWN0b3J5IGV4aXN0cywgdGhlIGRyaXZlciBwb3B1bGF0ZXMgaXQgd2l0aCBhIGBgZGVi dWcvYGAKPiA+IHN1YmRpcmVjdG9yeQo+ID4gKyAqIGNvbnRhaW5pbmcgdGhlIGVudHJpZXMgZGVz Y3JpYmVkIGJlbG93OjoKPiA+ICsgKgo+ID4gKyAqwqDCoMKgwqDCoC9zeXMva2VybmVsL2NvbmZp Zy94ZS8KPiA+ICsgKsKgwqDCoMKgwqDilJTilIDilIAgMDAwMDowMzowMC4wCj4gPiArICrCoMKg wqDCoMKgwqDCoMKgIOKUlOKUgOKUgCBkZWJ1Zy8KPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCDilJzilIDilIAgY3R4X3Jlc3RvcmVfbWlkX2JiCj4gPiArICrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAg4pSc4pSA4pSAIGN0eF9yZXN0b3JlX3Bvc3RfYmIKPiA+ICsgKsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCDilJzilIDilIAgZW5naW5lc19hbGxvd2VkCj4gPiArICrCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAg4pSc4pSA4pSAIGd0X3R5cGVzX2FsbG93ZWQKPiA+ICsgKsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCDilJzilIDilIAgZW5hYmxlX211bHRpX3F1ZXVlCj4gPiArICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAg4pSc4pSA4pSAIGVuYWJsZV9wc21pCj4gPiArICrCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAg4pSU4pSA4pSAIHN1cnZpdmFiaWxpdHlfbW9kZQo+ID4gKyAqCj4g PiArICogQ29uZmlndXJlIEF0dHJpYnV0ZXMKPiA+ICsgKiA9PT09PT09PT09PT09PT09PT09PQo+ ID4gKyAqCj4gPiArICogQ29udGV4dCByZXN0b3JlIEJCCj4gPiArICogLS0tLS0tLS0tLS0tLS0t LS0tCj4gPiArICoKPiA+ICsgKiBBbGxvdyB0byBleGVjdXRlIGEgYmF0Y2ggYnVmZmVyIGR1cmlu ZyBhbnkgY29udGV4dCBzd2l0Y2hlcy4KPiA+IFdoZW4gdGhlCj4gPiArICogR1BVIGlzIHJlc3Rv cmluZyB0aGUgY29udGV4dCwgaXQgZXhlY3V0ZXMgYWRkaXRpb25hbCBjb21tYW5kcy4KPiA+IEl0 J3MgdXNlZnVsCj4gPiArICogZm9yIHRlc3RpbmcgYWRkaXRpb25hbCB3b3JrYXJvdW5kcyBhbmQg dmFsaWRhdGluZyBjZXJ0YWluIEhXCj4gPiBiZWhhdmlvcnM6IGl0J3MKPiA+ICsgKiBub3QgaW50 ZW5kZWQgZm9yIG5vcm1hbCBleGVjdXRpb24gYW5kIHdpbGwgdGFpbnQgdGhlIGtlcm5lbAo+ID4g d2l0aCBUQUlOVF9URVNUCj4gPiArICogd2hlbiB1c2VkLgo+ID4gKyAqCj4gPiArICogVGhlIHN5 bnRheCBhbGxvd3MgdG8gcGFzcyBzdHJhaWdodCBpbnN0cnVjdGlvbnMgdG8gYmUgZXhlY3V0ZWQK PiA+IGJ5IHRoZSBlbmdpbmUKPiA+ICsgKiBpbiBhIGJhdGNoIGJ1ZmZlciBvciBzZXQgc3BlY2lm aWMgcmVnaXN0ZXJzLgo+ID4gKyAqCj4gPiArICogIy4gR2VuZXJpYyBpbnN0cnVjdGlvbjo6Cj4g PiArICoKPiA+ICsgKsKgwqDCoMKgwqA8ZW5naW5lLWNsYXNzPiBjbWQgPGluc3RyPiBbW2R3b3Jk MF0gW2R3b3JkMV0gWy4uLl1dCj4gPiArICoKPiA+ICsgKiAjLiBTaW1wbGUgcmVnaXN0ZXIgc2V0 dGluZzo6Cj4gPiArICoKPiA+ICsgKsKgwqDCoMKgwqA8ZW5naW5lLWNsYXNzPiByZWcgPGFkZHJl c3M+IDx2YWx1ZT4KPiA+ICsgKgo+ID4gKyAqIENvbW1hbmRzIGFyZSBzYXZlZCBwZXIgZW5naW5l IGNsYXNzOiBhbGwgaW5zdGFuY2VzIG9mIHRoYXQKPiA+IGNsYXNzIHdpbGwgZXhlY3V0ZQo+ID4g KyAqIHRob3NlIGNvbW1hbmRzIGR1cmluZyBjb250ZXh0IHN3aXRjaC4gVGhlIGluc3RydWN0aW9u LCBkd29yZAo+ID4gYXJndW1lbnRzLAo+ID4gKyAqIGFkZHJlc3NlcyBhbmQgdmFsdWVzIGFyZSBp biBoZXggZm9ybWF0IGxpa2UgaW4gdGhlIGV4YW1wbGVzCj4gPiBiZWxvdy4KPiA+ICsgKgo+ID4g KyAqICMuIEV4ZWN1dGUgYSBMUkkgY29tbWFuZCB0byB3cml0ZSAweERFQURCRUVGIHRvIHJlZ2lz dGVyIDB4NGYxMAo+ID4gYWZ0ZXIgdGhlCj4gPiArICrCoMKgwqAgbm9ybWFsIGNvbnRleHQgcmVz dG9yZTo6Cj4gPiArICoKPiA+ICsgKsKgwqDCoMKgwqAjIGVjaG8gJ3JjcyBjbWQgMTEwMDAwMDEg NEYxMDAgREVBREJFRUYnIFwKPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPgo+ID4g L3N5cy9rZXJuZWwvY29uZmlnL3hlLzAwMDA6MDM6MDAuMC9kZWJ1Zy9jdHhfcmVzdG9yZV9wb3N0 X2JiCj4gPiArICoKPiA+ICsgKiAjLiBFeGVjdXRlIGEgTFJJIGNvbW1hbmQgdG8gd3JpdGUgMHhE RUFEQkVFRiB0byByZWdpc3RlciAweDRmMTAKPiA+IGF0IHRoZQo+ID4gKyAqwqDCoMKgIGJlZ2lu bmluZyBvZiB0aGUgY29udGV4dCByZXN0b3JlOjoKPiA+ICsgKgo+ID4gKyAqwqDCoMKgwqDCoCMg ZWNobyAncmNzIGNtZCAxMTAwMDAwMSA0RjEwMCBERUFEQkVFRicgXAo+ID4gKyAqwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqA+Cj4gPiAvc3lzL2tlcm5lbC9jb25maWcveGUvMDAwMDowMzowMC4w L2RlYnVnL2N0eF9yZXN0b3JlX21pZF9iYgo+ID4gKyAqCj4gPiArICogIy4gTG9hZCBjZXJ0YWlu IHZhbHVlcyBpbiBhIGNvdXBsZSBvZiByZWdpc3RlcnMgKGl0IGNhbiBiZSB1c2VkCj4gPiBhcyBh IHNpbXBsZXIKPiA+ICsgKsKgwqDCoCBhbHRlcm5hdGl2ZSB0byB0aGUgYGNtZGApIGFjdGlvbjo6 Cj4gPiArICoKPiA+ICsgKsKgwqDCoMKgwqAjIGNhdCA+Cj4gPiAvc3lzL2tlcm5lbC9jb25maWcv eGUvMDAwMDowMzowMC4wL2RlYnVnL2N0eF9yZXN0b3JlX3Bvc3RfYmIgPDxFT0YKPiA+ICsgKsKg wqDCoMKgwqByY3MgcmVnIDRGMTAwIERFQURCRUVGCj4gPiArICrCoMKgwqDCoMKgcmNzIHJlZyA0 RjEwNCBGRkZGRkZGRgo+ID4gKyAqwqDCoMKgwqDCoEVPRgo+ID4gKyAqCj4gPiArICrCoMKgwqAg Li4gbm90ZTo6Cj4gPiArICoKPiA+ICsgKsKgwqDCoMKgwqDCoCBXaGVuIHVzaW5nIG11bHRpcGxl IGxpbmVzLCBtYWtlIHN1cmUgdG8gdXNlIGEgY29tbWFuZAo+ID4gdGhhdCBpcwo+ID4gKyAqwqDC oMKgwqDCoMKgIGltcGxlbWVudGVkIHdpdGggYSBzaW5nbGUgd3JpdGUgc3lzY2FsbCwgbGlrZSBI RVJFRE9DLgo+ID4gKyAqCj4gPiArICogQ3VycmVudGx5IHRoaXMgaXMgaW1wbGVtZW50ZWQgb25s eSBmb3IgcG9zdCBhbmQgbWlkIGNvbnRleHQKPiA+IHJlc3RvcmUgYW5kCj4gPiArICogdGhlc2Ug YXR0cmlidXRlcyBjYW4gb25seSBiZSBzZXQgYmVmb3JlIGJpbmRpbmcgdG8gdGhlIGRldmljZS4K PiA+ICsgKgo+ID4gKyAqIEFsbG93ZWQgZW5naW5lczoKPiA+ICsgKiAtLS0tLS0tLS0tLS0tLS0t Cj4gPiArICoKPiA+ICsgKiBBbGxvdyBvbmx5IGEgc2V0IG9mIGVuZ2luZShzKSB0byBiZSBhdmFp bGFibGUsIGRpc2FibGluZyB0aGUKPiA+IG90aGVyIGVuZ2luZXMKPiA+ICsgKiBldmVuIGlmIHRo ZXkgYXJlIGF2YWlsYWJsZSBpbiBoYXJkd2FyZS4gVGhpcyBpcyBhcHBsaWVkIGFmdGVyCj4gPiBI VyBmdXNlcyBhcmUKPiA+ICsgKiBjb25zaWRlcmVkIG9uIGVhY2ggdGlsZS4gRXhhbXBsZXM6Cj4g PiArICoKPiA+ICsgKiBBbGxvdyBvbmx5IG9uZSByZW5kZXIgYW5kIG9uZSBjb3B5IGVuZ2luZXMs IG5vdGhpbmcgZWxzZTo6Cj4gPiArICoKPiA+ICsgKsKgwqDCoMKgwqAjIGVjaG8gJ3JjczAsYmNz MCcgPgo+ID4gL3N5cy9rZXJuZWwvY29uZmlnL3hlLzAwMDA6MDM6MDAuMC9kZWJ1Zy9lbmdpbmVz X2FsbG93ZWQKPiA+ICsgKgo+ID4gKyAqIEFsbG93IG9ubHkgY29tcHV0ZSBlbmdpbmVzIGFuZCBm aXJzdCBjb3B5IGVuZ2luZTo6Cj4gPiArICoKPiA+ICsgKsKgwqDCoMKgwqAjIGVjaG8gJ2Njcyos YmNzMCcgPgo+ID4gL3N5cy9rZXJuZWwvY29uZmlnL3hlLzAwMDA6MDM6MDAuMC9kZWJ1Zy9lbmdp bmVzX2FsbG93ZWQKPiA+ICsgKgo+ID4gKyAqIE5vdGUgdGhhdCB0aGUgZW5naW5lIG5hbWVzIGFy ZSB0aGUgcGVyLUdUIGhhcmR3YXJlIG5hbWVzLiBPbgo+ID4gbXVsdGktdGlsZQo+ID4gKyAqIHBs YXRmb3Jtcywgd3JpdGluZyBgYHJjczAsYmNzMGBgIHRvIHRoaXMgZmlsZSB3b3VsZCBhbGxvdyB0 aGUKPiA+IGZpcnN0IHJlbmRlcgo+ID4gKyAqIGFuZCBjb3B5IGVuZ2luZXMgb24gZWFjaCB0aWxl Lgo+ID4gKyAqCj4gPiArICogVGhlIHJlcXVlc3RlZCBjb25maWd1cmF0aW9uIG1heSBub3QgYmUg c3VwcG9ydGVkIGJ5IHRoZQo+ID4gcGxhdGZvcm0gYW5kIGRyaXZlcgo+ID4gKyAqIG1heSBmYWls IHRvIHByb2JlLiBGb3IgZXhhbXBsZTogaWYgYXQgbGVhc3Qgb25lIGNvcHkgZW5naW5lIGlzCj4g PiBleHBlY3RlZCB0byBiZQo+ID4gKyAqIGF2YWlsYWJsZSBmb3IgbWlncmF0aW9ucywgYnV0IGl0 J3MgZGlzYWJsZWQuIFRoaXMgaXMgaW50ZW5kZWQKPiA+IGZvciBkZWJ1Z2dpbmcKPiA+ICsgKiBw dXJwb3NlcyBvbmx5Lgo+ID4gKyAqCj4gPiArICogVGhpcyBhdHRyaWJ1dGUgY2FuIG9ubHkgYmUg c2V0IGJlZm9yZSBiaW5kaW5nIHRvIHRoZSBkZXZpY2UuCj4gPiArICoKPiA+ICsgKiBBbGxvd2Vk IEdUIHR5cGVzOgo+ID4gKyAqIC0tLS0tLS0tLS0tLS0tLS0tCj4gPiArICoKPiA+ICsgKiBBbGxv dyBvbmx5IHNwZWNpZmljIHR5cGVzIG9mIEdUcyB0byBiZSBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6 ZWQKPiA+IGJ5IHRoZQo+ID4gKyAqIGRyaXZlci7CoCBBbnkgY29tYmluYXRpb24gb2YgR1QgdHlw ZXMgY2FuIGJlIGVuYWJsZWQvZGlzYWJsZWQsCj4gPiBhbHRob3VnaAo+ID4gKyAqIHNvbWUgc2V0 dGluZ3Mgd2lsbCBjYXVzZSB0aGUgZGV2aWNlIHRvIGZhaWwgdG8gcHJvYmUuCj4gPiArICoKPiA+ ICsgKiBXcml0ZXMgc3VwcG9ydCBib3RoIGNvbW1hLSBhbmQgbmV3bGluZS1zZXBhcmF0ZWQgaW5w dXQgZm9ybWF0Lgo+ID4gUmVhZHMKPiA+ICsgKiB3aWxsIGFsd2F5cyByZXR1cm4gb25lIEdUIHR5 cGUgcGVyIGxpbmUuICJwcmltYXJ5IiBhbmQgIm1lZGlhIgo+ID4gYXJlIHRoZQo+ID4gKyAqIEdU IHR5cGUgbmFtZXMgc3VwcG9ydGVkIGJ5IHRoaXMgaW50ZXJmYWNlLgo+ID4gKyAqCj4gPiArICog VGhpcyBhdHRyaWJ1dGUgY2FuIG9ubHkgYmUgc2V0IGJlZm9yZSBiaW5kaW5nIHRvIHRoZSBkZXZp Y2UuCj4gPiArICoKPiA+ICsgKiBFeGFtcGxlczoKPiA+ICsgKgo+ID4gKyAqIEFsbG93IGJvdGgg cHJpbWFyeSBhbmQgbWVkaWEgR1RzIHRvIGJlIGluaXRpYWxpemVkIGFuZCB1c2VkLsKgCj4gPiBU aGlzIG1hdGNoZXMKPiA+ICsgKiB0aGUgZHJpdmVyJ3MgZGVmYXVsdCBiZWhhdmlvcjo6Cj4gPiAr ICoKPiA+ICsgKsKgwqDCoMKgwqAjIGVjaG8gJ3ByaW1hcnksbWVkaWEnID4KPiA+IC9zeXMva2Vy bmVsL2NvbmZpZy94ZS8wMDAwOjAzOjAwLjAvZGVidWcvZ3RfdHlwZXNfYWxsb3dlZAo+ID4gKyAq Cj4gPiArICogQWxsb3cgb25seSB0aGUgcHJpbWFyeSBHVCBvZiBlYWNoIHRpbGUgdG8gYmUgaW5p dGlhbGl6ZWQgYW5kCj4gPiB1c2VkLAo+ID4gKyAqIGVmZmVjdGl2ZWx5IGRpc2FibGluZyB0aGUg bWVkaWEgR1QgaWYgaXQgZXhpc3RzIG9uIHRoZQo+ID4gcGxhdGZvcm06Ogo+ID4gKyAqCj4gPiAr ICrCoMKgwqDCoMKgIyBlY2hvICdwcmltYXJ5JyA+Cj4gPiAvc3lzL2tlcm5lbC9jb25maWcveGUv MDAwMDowMzowMC4wL2RlYnVnL2d0X3R5cGVzX2FsbG93ZWQKPiA+ICsgKgo+ID4gKyAqIEFsbG93 IG9ubHkgdGhlIG1lZGlhIEdUIG9mIGVhY2ggdGlsZSB0byBiZSBpbml0aWFsaXplZCBhbmQKPiA+ IHVzZWQsCj4gPiArICogZWZmZWN0aXZlbHkgZGlzYWJsaW5nIHRoZSBwcmltYXJ5IEdULsKgICoq VGhpcyBjb25maWd1cmF0aW9uCj4gPiB3aWxsIGNhdXNlCj4gPiArICogZGV2aWNlIHByb2JlIGZh aWx1cmUgb24gYWxsIGN1cnJlbnQgcGxhdGZvcm1zLCBidXQgbWF5IGJlCj4gPiBhbGxvd2VkIG9u Cj4gPiArICogaWdwdSBwbGF0Zm9ybXMgaW4gdGhlIGZ1dHVyZSoqOjoKPiA+ICsgKgo+ID4gKyAq wqDCoMKgwqDCoCMgZWNobyAnbWVkaWEnID4KPiA+IC9zeXMva2VybmVsL2NvbmZpZy94ZS8wMDAw OjAzOjAwLjAvZGVidWcvZ3RfdHlwZXNfYWxsb3dlZAo+ID4gKyAqCj4gPiArICogRGlzYWJsZSBh bGwgR1RzLsKgIE9ubHkgb3RoZXIgR1BVIElQIChzdWNoIGFzIGRpc3BsYXkpIGlzCj4gPiBwb3Rl bnRpYWxseSB1c2FibGUuCj4gPiArICogKipUaGlzIGNvbmZpZ3VyYXRpb24gd2lsbCBjYXVzZSBk ZXZpY2UgcHJvYmUgZmFpbHVyZSBvbiBhbGwKPiA+IGN1cnJlbnQKPiA+ICsgKiBwbGF0Zm9ybXMs IGJ1dCBtYXkgYmUgYWxsb3dlZCBvbiBpZ3B1IHBsYXRmb3JtcyBpbiB0aGUKPiA+IGZ1dHVyZSoq OjoKPiA+ICsgKgo+ID4gKyAqwqDCoMKgwqDCoCMgZWNobyAnJyA+Cj4gPiAvc3lzL2tlcm5lbC9j b25maWcveGUvMDAwMDowMzowMC4wL2RlYnVnL2d0X3R5cGVzX2FsbG93ZWQKPiA+ICsgKgo+ID4g KyAqIEVuYWJsZSBtdWx0aS1xdWV1ZQo+ID4gKyAqIC0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gKyAq Cj4gPiArICogTXVsdGktcXVldWUgc3VwcG9ydCBvbiB0aGUgZGV2aWNlIGlzIGVuYWJsZWQgYnkg ZGVmYXVsdCB3aGVyZQo+ID4gdGhlCj4gPiArICogaGFyZHdhcmUgc3VwcG9ydHMgaXQuIFdyaXRp bmcgMCBmb3JjZS1kaXNhYmxlcyBtdWx0aS1xdWV1ZQo+ID4gc3VwcG9ydDoKPiA+ICsgKiBtdWx0 aS1xdWV1ZSBleGVjLXF1ZXVlIGdyb3VwIGNyZWF0aW9uIHZpYSBpb2N0bCBpcyByZWZ1c2VkLCBh bmQKPiA+IHRoZQo+ID4gKyAqIEd1QyBmZWF0dXJlIGlzIGRpc2FibGVkOjoKPiA+ICsgKgo+ID4g KyAqwqDCoMKgwqDCoCMgZWNobyAwID4KPiA+IC9zeXMva2VybmVsL2NvbmZpZy94ZS8wMDAwOjAz OjAwLjAvZGVidWcvZW5hYmxlX211bHRpX3F1ZXVlCj4gPiArICoKPiA+ICsgKiBUaGlzIGF0dHJp YnV0ZSBjYW4gb25seSBiZSBzZXQgYmVmb3JlIGJpbmRpbmcgdG8gdGhlIGRldmljZS4KPiA+ICsg Kgo+ID4gKyAqIFBTTUkKPiA+ICsgKiAtLS0tCj4gPiArICoKPiA+ICsgKiBFbmFibGUgZXh0cmEg ZGVidWdnaW5nIGNhcGFiaWxpdGllcyB0byB0cmFjZSBlbmdpbmUgZXhlY3V0aW9uLgo+ID4gT25s eSB1c2VmdWwKPiA+ICsgKiBkdXJpbmcgZWFybHkgcGxhdGZvcm0gZW5hYmxpbmcgYW5kIHJlcXVp cmVzIGFkZGl0aW9uYWwgaGFyZHdhcmUKPiA+IGNvbm5lY3RlZC4KPiA+ICsgKiBPbmNlIGl0J3Mg ZW5hYmxlZCwgYWRkaXRpb25hbHMgV0FzIGFyZSBhZGRlZCBhbmQgcnVudGltZQo+ID4gY29uZmln dXJhdGlvbiBpcwo+ID4gKyAqIGRvbmUgdmlhIGRlYnVnZnMuIEV4YW1wbGUgdG8gZW5hYmxlIGl0 OjoKPiA+ICsgKgo+ID4gKyAqwqDCoMKgwqDCoCMgZWNobyAxID4KPiA+IC9zeXMva2VybmVsL2Nv bmZpZy94ZS8wMDAwOjAzOjAwLjAvZGVidWcvZW5hYmxlX3BzbWkKPiA+ICsgKgo+ID4gKyAqIFRo aXMgYXR0cmlidXRlIGNhbiBvbmx5IGJlIHNldCBiZWZvcmUgYmluZGluZyB0byB0aGUgZGV2aWNl Lgo+ID4gKyAqCj4gPiArICogU3Vydml2YWJpbGl0eSBtb2RlOgo+ID4gKyAqIC0tLS0tLS0tLS0t LS0tLS0tLS0KPiA+ICsgKgo+ID4gKyAqIEVuYWJsZSBzdXJ2aXZhYmlsaXR5IG1vZGUgb24gc3Vw cG9ydGVkIGNhcmRzLiBUaGlzIHNldHRpbmcgb25seQo+ID4gdGFrZXMKPiA+ICsgKiBlZmZlY3Qg d2hlbiBwcm9iaW5nIHRoZSBkZXZpY2UuIEV4YW1wbGUgdG8gZW5hYmxlIGl0OjoKPiA+ICsgKgo+ ID4gKyAqwqDCoMKgwqDCoCMgZWNobyAxID4KPiA+IC9zeXMva2VybmVsL2NvbmZpZy94ZS8wMDAw OjAzOjAwLjAvZGVidWcvc3Vydml2YWJpbGl0eV9tb2RlCj4gPiArICoKPiA+ICsgKiBUaGlzIGF0 dHJpYnV0ZSBjYW4gb25seSBiZSBzZXQgYmVmb3JlIGJpbmRpbmcgdG8gdGhlIGRldmljZS4KPiA+ ICsgKgo+ID4gKyAqLwo+ID4gKwo+ID4gK3N0cnVjdCBlbmdpbmVfaW5mbyB7Cj4gPiArwqDCoMKg wqDCoMKgwqBjb25zdCBjaGFyICpjbHM7Cj4gPiArwqDCoMKgwqDCoMKgwqB1NjQgbWFzazsKPiA+ ICvCoMKgwqDCoMKgwqDCoGVudW0geGVfZW5naW5lX2NsYXNzIGVuZ2luZV9jbGFzczsKPiA+ICt9 Owo+ID4gKwo+ID4gKy8qIFNvbWUgaGVscGZ1bCBtYWNyb3MgdG8gYWlkIG9uIHRoZSBzaXppbmcg b2YgYnVmZmVyIGFsbG9jYXRpb24KPiA+IHdoZW4gcGFyc2luZyAqLwo+ID4gKyNkZWZpbmUgTUFY X0VOR0lORV9DTEFTU19DSEFSUyA1Cj4gPiArI2RlZmluZSBNQVhfRU5HSU5FX0lOU1RBTkNFX0NI QVJTIDIKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGVuZ2luZV9pbmZvIGVuZ2luZV9p bmZvW10gPSB7Cj4gPiArwqDCoMKgwqDCoMKgwqB7IC5jbHMgPSAicmNzIiwgLm1hc2sgPSBYRV9I V19FTkdJTkVfUkNTX01BU0ssCj4gPiAuZW5naW5lX2NsYXNzID0gWEVfRU5HSU5FX0NMQVNTX1JF TkRFUiB9LAo+ID4gK8KgwqDCoMKgwqDCoMKgeyAuY2xzID0gImJjcyIsIC5tYXNrID0gWEVfSFdf RU5HSU5FX0JDU19NQVNLLAo+ID4gLmVuZ2luZV9jbGFzcyA9IFhFX0VOR0lORV9DTEFTU19DT1BZ IH0sCj4gPiArwqDCoMKgwqDCoMKgwqB7IC5jbHMgPSAidmNzIiwgLm1hc2sgPSBYRV9IV19FTkdJ TkVfVkNTX01BU0ssCj4gPiAuZW5naW5lX2NsYXNzID0gWEVfRU5HSU5FX0NMQVNTX1ZJREVPX0RF Q09ERSB9LAo+ID4gK8KgwqDCoMKgwqDCoMKgeyAuY2xzID0gInZlY3MiLCAubWFzayA9IFhFX0hX X0VOR0lORV9WRUNTX01BU0ssCj4gPiAuZW5naW5lX2NsYXNzID0gWEVfRU5HSU5FX0NMQVNTX1ZJ REVPX0VOSEFOQ0UgfSwKPiA+ICvCoMKgwqDCoMKgwqDCoHsgLmNscyA9ICJjY3MiLCAubWFzayA9 IFhFX0hXX0VOR0lORV9DQ1NfTUFTSywKPiA+IC5lbmdpbmVfY2xhc3MgPSBYRV9FTkdJTkVfQ0xB U1NfQ09NUFVURSB9LAo+ID4gK8KgwqDCoMKgwqDCoMKgeyAuY2xzID0gImdzY2NzIiwgLm1hc2sg PSBYRV9IV19FTkdJTkVfR1NDQ1NfTUFTSywKPiA+IC5lbmdpbmVfY2xhc3MgPSBYRV9FTkdJTkVf Q0xBU1NfT1RIRVIgfSwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgewo+ ID4gK8KgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqbmFtZTsKPiA+ICvCoMKgwqDCoMKgwqDCoGVu dW0geGVfZ3RfdHlwZSB0eXBlOwo+ID4gK30gZ3RfdHlwZXNbXSA9IHsKPiA+ICvCoMKgwqDCoMKg wqDCoHsgLm5hbWUgPSAicHJpbWFyeSIsIC50eXBlID0gWEVfR1RfVFlQRV9NQUlOIH0sCj4gPiAr wqDCoMKgwqDCoMKgwqB7IC5uYW1lID0gIm1lZGlhIiwgLnR5cGUgPSBYRV9HVF9UWVBFX01FRElB IH0sCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZp Y2UgKmZpbmRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2Cj4gPiAqcGRldikKPiA+ICt7Cj4gPiArwqDC oMKgwqDCoMKgwqByZXR1cm4geGVfY29uZmlnZnNfZmluZF9ncm91cF9kZXZpY2UocGRldik7Cj4g PiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHhlX2NvbmZpZ2ZzX2dldF9jdHhfcmVzdG9yZV9t aWRfYmIgLSBnZXQgY29uZmlnZnMKPiA+IGN0eF9yZXN0b3JlX21pZF9iYiBzZXR0aW5nCj4gPiAr ICogQHBkZXY6IHBjaSBkZXZpY2UKPiA+ICsgKiBAY2xhc3M6IGh3IGVuZ2luZSBjbGFzcwo+ID4g KyAqIEBjczogcG9pbnRlciB0byB0aGUgYmIgdG8gdXNlIC0gb25seSB2YWxpZCBkdXJpbmcgcHJv YmUKPiA+ICsgKgo+ID4gKyAqIFJldHVybjogTnVtYmVyIG9mIGR3b3JkcyB1c2VkIGluIHRoZSBt aWRfY3R4X3Jlc3RvcmUgc2V0dGluZyBpbgo+ID4gY29uZmlnZnMKPiA+ICsgKi8KPiA+ICt1MzIg eGVfY29uZmlnZnNfZ2V0X2N0eF9yZXN0b3JlX21pZF9iYihzdHJ1Y3QgcGNpX2RldiAqcGRldiwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIHhlX2VuZ2luZV9jbGFzcyBjbGFzcywKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb25zdCB1MzIgKipjcykKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAqZGV2ID0gZmluZF9kZXZpY2UocGRldik7 Cj4gPiArwqDCoMKgwqDCoMKgwqB1MzIgbGVuOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KCFkZXYpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqBzY29wZWRfZ3VhcmQobXV0ZXgsICZkZXYtPmxvY2spIHsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoY3MpCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCpjcyA9IGRldi0KPiA+ID5jb25maWcu ZGVidWcuY3R4X3Jlc3RvcmVfbWlkX2JiW2NsYXNzXS5jczsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBsZW4gPSBkZXYtCj4gPiA+Y29uZmlnLmRlYnVnLmN0eF9yZXN0 b3JlX21pZF9iYltjbGFzc10ubGVuOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gK8KgwqDCoMKg wqDCoMKgY29uZmlnX2dyb3VwX3B1dCgmZGV2LT5ncm91cCk7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqByZXR1cm4gbGVuOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB4ZV9jb25maWdm c19nZXRfY3R4X3Jlc3RvcmVfcG9zdF9iYiAtIGdldCBjb25maWdmcwo+ID4gY3R4X3Jlc3RvcmVf cG9zdF9iYiBzZXR0aW5nCj4gPiArICogQHBkZXY6IHBjaSBkZXZpY2UKPiA+ICsgKiBAY2xhc3M6 IGh3IGVuZ2luZSBjbGFzcwo+ID4gKyAqIEBjczogcG9pbnRlciB0byB0aGUgYmIgdG8gdXNlIC0g b25seSB2YWxpZCBkdXJpbmcgcHJvYmUKPiA+ICsgKgo+ID4gKyAqIFJldHVybjogTnVtYmVyIG9m IGR3b3JkcyB1c2VkIGluIHRoZSBwb3N0X2N0eF9yZXN0b3JlIHNldHRpbmcKPiA+IGluIGNvbmZp Z2ZzCj4gPiArICovCj4gPiArdTMyIHhlX2NvbmZpZ2ZzX2dldF9jdHhfcmVzdG9yZV9wb3N0X2Ji KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVudW0geGVf ZW5naW5lX2NsYXNzIGNsYXNzLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHUzMiAq KmNzKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2 aWNlICpkZXYgPSBmaW5kX2RldmljZShwZGV2KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBsZW47 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWRldikKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHNjb3BlZF9n dWFyZChtdXRleCwgJmRldi0+bG9jaykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCpjcyA9IGRldi0KPiA+ID5jb25maWcuZGVidWcuY3R4X3Jlc3RvcmVfcG9zdF9iYltjbGFz c10uY3M7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVuID0gZGV2LQo+ID4g PmNvbmZpZy5kZWJ1Zy5jdHhfcmVzdG9yZV9wb3N0X2JiW2NsYXNzXS5sZW47Cj4gPiArwqDCoMKg wqDCoMKgwqB9Cj4gPiArwqDCoMKgwqDCoMKgwqBjb25maWdfZ3JvdXBfcHV0KCZkZXYtPmdyb3Vw KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBsZW47Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBib29sIHdhX2JiX3JlYWRfYWR2YW5jZShib29sIGRlcmVmZXJlbmNlLCBjaGFyICoq cCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNvbnN0IGNoYXIgKmFwcGVuZCwgc2l6ZV90IGxlbiwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdCAq bWF4X3NpemUpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGRlcmVmZXJlbmNlKSB7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGxlbiA+PSAqbWF4X3NpemUpCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBm YWxzZTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqbWF4X3NpemUgLT0gbGVu Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChhcHBlbmQpCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lbWNweSgqcCwgYXBw ZW5kLCBsZW4pOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg KnAgKz0gbGVuOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IHdhX2JiX3Nob3coc3RydWN0IHhlX2NvbmZpZ19ncm91 cF9kZXZpY2UgKmRldiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IHdhX2JiIHdhX2JiW3N0YXRpYwo+ID4gWEVfRU5HSU5FX0NMQVNT X01BWF0sCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNoYXIgKmRhdGEsIHNpemVfdCBzeikKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGFy ICpwID0gZGF0YTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGd1YXJkKG11dGV4KSgmZGV2LT5s b2NrKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQVJS QVlfU0laRShlbmdpbmVfaW5mbyk7IGkrKykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGVudW0geGVfZW5naW5lX2NsYXNzIGVjID0KPiA+IGVuZ2luZV9pbmZvW2ldLmVuZ2lu ZV9jbGFzczsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzaXplX3QgbGVuOwo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghd2FfYmJbZWNdLmxl bikKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29u dGludWU7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVuID0gc25w cmludGYocCwgc3osICIlczoiLCBlbmdpbmVfaW5mb1tpXS5jbHMpOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmICghd2FfYmJfcmVhZF9hZHZhbmNlKGRhdGEsICZwLCBOVUxM LCBsZW4sICZzeikpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiAtRU5PQlVGUzsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHdhX2JiW2VjXS5sZW47IGorKykgewo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsZW4gPSBzbnBy aW50ZihwLCBzeiwgIiAlMDh4IiwKPiA+IHdhX2JiW2VjXS5jc1tqXSk7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghd2FfYmJfcmVhZF9hZHZh bmNlKGRhdGEsICZwLCBOVUxMLAo+ID4gbGVuLCAmc3opKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9C VUZTOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXdhX2JiX3JlYWRfYWR2YW5jZShkYXRhLCAm cCwgIlxuIiwgMSwgJnN6KSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9CVUZTOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCF3YV9iYl9yZWFkX2FkdmFuY2UoZGF0YSwgJnAsICIiLCAx LCAmc3opKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PQlVG UzsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qIFJlc2VydmUgb25lIG1vcmUgdG8gbWF0Y2gg Y2hlY2sgZm9yICdcMCcgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghZGF0YSkKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwKys7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gcCAtIGRhdGE7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IGN0eF9yZXN0 b3JlX21pZF9iYl9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKPiA+IGNoYXIgKnBhZ2Up Cj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2Ug KmRldiA9Cj4gPiB4ZV9jb25maWdmc19zdWJncm91cF90b19ncm91cF9kZXZpY2UoaXRlbSk7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gd2FfYmJfc2hvdyhkZXYsIGRldi0KPiA+ID5j b25maWcuZGVidWcuY3R4X3Jlc3RvcmVfbWlkX2JiLCBwYWdlLCBTWl80Syk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBzc2l6ZV90IGN0eF9yZXN0b3JlX3Bvc3RfYmJfc2hvdyhzdHJ1Y3QgY29u ZmlnX2l0ZW0gKml0ZW0sCj4gPiBjaGFyICpwYWdlKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4geGVfY29uZmlnZnNfc3Vi Z3JvdXBfdG9fZ3JvdXBfZGV2aWNlKGl0ZW0pOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0 dXJuIHdhX2JiX3Nob3coZGV2LCBkZXYtCj4gPiA+Y29uZmlnLmRlYnVnLmN0eF9yZXN0b3JlX3Bv c3RfYmIsIHBhZ2UsIFNaXzRLKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgd2FfYmJf YXBwZW5kKHN0cnVjdCB3YV9iYiAqd2FfYmIsIHUzMiB2YWwpCj4gPiArewo+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKHdhX2JiLT5jcykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3 YV9iYi0+Y3Nbd2FfYmItPmxlbl0gPSB2YWw7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqB3YV9i Yi0+bGVuKys7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IHBhcnNlX2hleChjb25z dCBjaGFyICpsaW5lLCB1MzIgKnB2YWwpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgY2hhciBu dW1zdHJbMTJdOwo+ID4gK8KgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqcDsKPiA+ICvCoMKgwqDC oMKgwqDCoHNzaXplX3QgbnVtbGVuOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcCA9IGxpbmUg KyBzdHJzcG4obGluZSwgIiBcdCIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCEqcCB8fCAqcCA9 PSAnXG4nKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoMKgbnVtbGVuID0gc3RyY3NwbihwLCAiIFx0XG4iKTsKPiA+ICvC oMKgwqDCoMKgwqDCoGlmICghbnVtbGVuIHx8IG51bWxlbiA+PSBzaXplb2YobnVtc3RyKSAtIDEp Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqBtZW1jcHkobnVtc3RyLCBwLCBudW1sZW4pOwo+ID4gK8KgwqDC oMKgwqDCoMKgbnVtc3RyW251bWxlbl0gPSAnXDAnOwo+ID4gK8KgwqDCoMKgwqDCoMKgcCArPSBu dW1sZW47Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoa3N0cnRvdTMyKG51bXN0ciwgMTYs IHB2YWwpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFM Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHAgLSBsaW5lOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgaW50IHBhcnNlX2VuZ2luZShjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpl bmRfY2hhcnMsIHU2NAo+ID4gKm1hc2ssCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBlbmdpbmVfaW5mbyAqKnBpbmZvKTsKPiA+ ICsKPiA+ICsvKgo+ID4gKyAqIFBhcnNlIGxpbmVzIHdpdGggdGhlIGZvcm1hdAo+ID4gKyAqCj4g PiArICrCoMKgwqDCoMKgPGVuZ2luZS1jbGFzcz4gY21kIDx1MzI+IDx1MzIuLi4+Cj4gPiArICrC oMKgwqDCoMKgPGVuZ2luZS1jbGFzcz4gcmVnIDx1MzJfYWRkcj4gPHUzMl92YWw+Cj4gPiArICoK PiA+ICsgKiBhbmQgb3B0aW9uYWxseSBzYXZlIHRoZW0gaW4gQHdhX2JiW2ldLmNzIGlzIG5vbi1O VUxMLgo+ID4gKyAqCj4gPiArICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZHdvcmRzIHBhcnNlZC4K PiA+ICsgKi8KPiA+ICtzdGF0aWMgc3NpemVfdCBwYXJzZV93YV9iYl9saW5lcyhjb25zdCBjaGFy ICpsaW5lcywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgd2FfYmIgd2FfYmJbc3RhdGljCj4gPiBYRV9FTkdJ TkVfQ0xBU1NfTUFYXSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzc2l6ZV90IGR3b3JkcyA9 IDAsIHJldDsKPiA+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKnA7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqBmb3IgKHAgPSBsaW5lczsgKnA7IHArKykgewo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBlbmdpbmVfaW5mbyAqaW5mbyA9IE5VTEw7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTMyIHZhbCwgdmFsMjsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBBbHNvIGFsbG93IGVtcHR5IGxpbmVz ICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcCArPSBzdHJzcG4ocCwgIiBc dFxuIik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCEqcCkKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gcGFyc2VfZW5naW5lKHAs ICIgXHRcbiIsIE5VTEwsICZpbmZvKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAocmV0IDwgMCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBwICs9IHJldDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwICs9IHN0 cnNwbihwLCAiIFx0Iik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKHN0cl9oYXNfcHJlZml4KHAsICJjbWQiKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmb3IgKHAgKz0gc3RybGVuKCJjbWQiKTsgKnA7KSB7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXQgPSBwYXJzZV9oZXgocCwgJnZhbCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwg MCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm ICghcmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cCArPSByZXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkd29yZHMrKzsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdhX2JiX2FwcGVuZCgmd2Ff YmJbaW5mby0KPiA+ID5lbmdpbmVfY2xhc3NdLCB2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfSBlbHNlIGlmIChzdHJfaGFzX3ByZWZpeChwLCAicmVnIikpIHsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcCArPSBzdHJsZW4oInJl ZyIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXQgPSBwYXJzZV9oZXgocCwgJnZhbCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgPD0gMCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFM Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBwICs9IHJldDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0ID0gcGFyc2VfaGV4KHAsICZ2YWwyKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCA8PSAwKQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IC1FSU5WQUw7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHAgKz0gcmV0Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkd29yZHMgKz0gMzsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgd2FfYmJfYXBwZW5kKCZ3YV9iYltpbmZvLT5lbmdpbmVfY2xh c3NdLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTUlfTE9BRF9SRUdJU1RFUl9JTU0gfAo+ID4gTUlfTFJJ X05VTV9SRUdTKDEpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgd2FfYmJfYXBwZW5kKCZ3YV9iYltpbmZvLT5lbmdpbmVfY2xhc3NdLAo+ID4gdmFs KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgd2Ff YmJfYXBwZW5kKCZ3YV9iYltpbmZvLT5lbmdpbmVfY2xhc3NdLAo+ID4gdmFsMik7Cj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIGR3b3JkczsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHNz aXplX3Qgd2FfYmJfc3RvcmUoc3RydWN0IHdhX2JiIHdhX2JiW3N0YXRpYwo+ID4gWEVfRU5HSU5F X0NMQVNTX01BWF0sCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UgKmRldiwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBjaGFy ICpwYWdlLCBzaXplX3QgbGVuKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoC8qIHRtcF93YV9i YiBtdXN0IG1hdGNoIHdhX2JiJ3Mgc2l6ZSAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHdh X2JiIHRtcF93YV9iYltYRV9FTkdJTkVfQ0xBU1NfTUFYXSA9IHsgfTsKPiA+ICvCoMKgwqDCoMKg wqDCoHNzaXplX3QgY291bnQsIGNsYXNzOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMyICp0bXA7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKiAxLiBDb3VudCBkd29yZHMgLSB3YV9iYltpXS5jcyBp cyBOVUxMIGZvciBhbGwgY2xhc3NlcyAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgY291bnQgPSBwYXJz ZV93YV9iYl9saW5lcyhwYWdlLCB0bXBfd2FfYmIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGNv dW50IDwgMCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gY291bnQ7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBndWFyZChtdXRleCkoJmRldi0+bG9jayk7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoeGVfY29uZmlnZnNfaXNfYm91bmQoZGV2KSkKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVCVVNZOwo+ID4gKwo+ID4gK8Kg wqDCoMKgwqDCoMKgLyoKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIDIuIEFsbG9jYXRlIGEgdTMyIGFy cmF5IGFuZCBzZXQgdGhlIHBvaW50ZXJzIHRvIHRoZQo+ID4gcmlnaHQgcG9zaXRpb25zCj4gPiAr wqDCoMKgwqDCoMKgwqAgKiBhY2NvcmRpbmcgdG8gdGhlIGxlbmd0aCBvZiBlYWNoIGNsYXNzJyB3 YV9iYgo+ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiArwqDCoMKgwqDCoMKgwqB0bXAgPSBrcmVh bGxvYyh3YV9iYlswXS5jcywgY291bnQgKiBzaXplb2YodTMyKSwKPiA+IEdGUF9LRVJORUwpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCF0bXApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWNvdW50 KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVtc2V0KHdhX2JiLCAwLCBz aXplb2YodG1wX3dhX2JiKSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIGxlbjsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGZv ciAoY2xhc3MgPSAwLCBjb3VudCA9IDA7IGNsYXNzIDwgWEVfRU5HSU5FX0NMQVNTX01BWDsKPiA+ ICsrY2xhc3MpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0bXBfd2FfYmJb Y2xhc3NdLmNzID0gdG1wICsgY291bnQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY291bnQgKz0gdG1wX3dhX2JiW2NsYXNzXS5sZW47Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdG1wX3dhX2JiW2NsYXNzXS5sZW4gPSAwOwo+ID4gK8KgwqDCoMKgwqDCoMKg fQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyogMy4gUGFyc2Ugd2FfYmIgbGluZXMgYWdhaW4s IHRoaXMgdGltZSBzYXZpbmcgdGhlIHZhbHVlcwo+ID4gKi8KPiA+ICvCoMKgwqDCoMKgwqDCoGNv dW50ID0gcGFyc2Vfd2FfYmJfbGluZXMocGFnZSwgdG1wX3dhX2JiKTsKPiA+ICvCoMKgwqDCoMKg wqDCoGlmIChjb3VudCA8IDApIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBr ZnJlZSh0bXApOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lbXNldCh3YV9i YiwgMCwgc2l6ZW9mKHRtcF93YV9iYikpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiBjb3VudDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoG1lbWNweSh3YV9iYiwgdG1wX3dhX2JiLCBzaXplb2YodG1wX3dhX2JiKSk7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gbGVuOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg c3NpemVfdCBjdHhfcmVzdG9yZV9taWRfYmJfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVt LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdAo+ID4g c3opCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZp Y2UgKmRldiA9Cj4gPiB4ZV9jb25maWdmc19zdWJncm91cF90b19ncm91cF9kZXZpY2UoaXRlbSk7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gd2FfYmJfc3RvcmUoZGV2LT5jb25maWcu ZGVidWcuY3R4X3Jlc3RvcmVfbWlkX2JiLAo+ID4gZGV2LCBkYXRhLCBzeik7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBzc2l6ZV90IGN0eF9yZXN0b3JlX3Bvc3RfYmJfc3RvcmUoc3RydWN0IGNv bmZpZ19pdGVtICppdGVtLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBjaGFyICpk YXRhLCBzaXplX3QKPiA+IHN6KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9j b25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4geGVfY29uZmlnZnNfc3ViZ3JvdXBfdG9fZ3Jv dXBfZGV2aWNlKGl0ZW0pOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHdhX2JiX3N0 b3JlKGRldi0+Y29uZmlnLmRlYnVnLmN0eF9yZXN0b3JlX3Bvc3RfYmIsCj4gPiBkZXYsIGRhdGEs IHN6KTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogeGVfY29uZmlnZnNfZ2V0X2VuZ2lu ZXNfYWxsb3dlZCAtIGdldCBlbmdpbmUgYWxsb3dlZCBtYXNrIGZyb20KPiA+IGNvbmZpZ2ZzCj4g PiArICogQHBkZXY6IHBjaSBkZXZpY2UKPiA+ICsgKgo+ID4gKyAqIFJldHVybjogZW5naW5lIG1h c2sgd2l0aCBhbGxvd2VkIGVuZ2luZXMgc2V0IGluIGNvbmZpZ2ZzCj4gPiArICovCj4gPiArdTY0 IHhlX2NvbmZpZ2ZzX2dldF9lbmdpbmVzX2FsbG93ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4g PiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UgKmRl diA9IGZpbmRfZGV2aWNlKHBkZXYpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTY0IGVuZ2luZXNfYWxs b3dlZDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghZGV2KQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybgo+ID4geGVfY29uZmlnZnNfZGV2aWNlX2RlZmF1bHRz LmRlYnVnLmVuZ2luZXNfYWxsb3dlZDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHNjb3BlZF9n dWFyZChtdXRleCwgJmRldi0+bG9jaykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBlbmdpbmVzX2FsbG93ZWQgPSBkZXYtCj4gPiA+Y29uZmlnLmRlYnVnLmVuZ2luZXNfYWxsb3dl ZDsKPiA+ICvCoMKgwqDCoMKgwqDCoGNvbmZpZ19ncm91cF9wdXQoJmRldi0+Z3JvdXApOwo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGVuZ2luZXNfYWxsb3dlZDsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHNzaXplX3QgZW5naW5lc19hbGxvd2VkX3Nob3coc3RydWN0IGNvbmZpZ19p dGVtICppdGVtLCBjaGFyCj4gPiAqcGFnZSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgeGVfY29uZmlnX2RldmljZSAqZGV2ID0KPiA+IHhlX2NvbmZpZ2ZzX3N1Ymdyb3VwX3RvX2Rl dmljZShpdGVtKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGNoYXIgKnAgPSBwYWdlOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVuZ2luZV9p bmZvKTsgaSsrKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTY0IG1hc2sg PSBlbmdpbmVfaW5mb1tpXS5tYXNrOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmICgoZGV2LT5kZWJ1Zy5lbmdpbmVzX2FsbG93ZWQgJiBtYXNrKSA9PSBtYXNrKSB7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHAgKz0g c3ByaW50ZihwLCAiJXMqXG4iLAo+ID4gZW5naW5lX2luZm9baV0uY2xzKTsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVsc2UgaWYgKG1hc2sgJiBkZXYtPmRlYnVnLmVuZ2lu ZXNfYWxsb3dlZCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB1MTYgYml0MCA9IF9fZmZzNjQobWFzayksIGJpdDsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWFzayAmPSBkZXYtPmRlYnVn LmVuZ2luZXNfYWxsb3dlZDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZm9yX2VhY2hfc2V0X2JpdChiaXQsIChjb25zdCB1bnNpZ25lZCBs b25nCj4gPiAqKSZtYXNrLCA2NCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHAgKz0gc3ByaW50ZihwLCAiJXMldVxuIiwK PiA+IGVuZ2luZV9pbmZvW2ldLmNscywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBiaXQgLSBiaXQwKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiAr wqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcCAtIHBhZ2U7 Cj4gPiArfQo+ID4gKwo+ID4gKy8qCj4gPiArICogTG9va3VwIGVuZ2luZV9pbmZvLiBJZiBAbWFz ayBpcyBub3QgTlVMTCwgcmVkdWNlIHRoZSBtYXNrCj4gPiBhY2NvcmRpbmcgdG8gdGhlCj4gPiAr ICogaW5zdGFuY2UgaW4gQHBhdHRlcm4uCj4gPiArICoKPiA+ICsgKiBFeGFtcGxlcyBvZiBpbnB1 dHM6Cj4gPiArICogLSBsb29rdXBfZW5naW5lX2luZm8oInJjczAiLCAmbWFzayk6IHJldHVybiAi cmNzIiBlbnRyeSBmcm9tCj4gPiBAZW5naW5lX2luZm8gYW5kCj4gPiArICrCoMKgIG1hc2sgPT0g QklUX1VMTChYRV9IV19FTkdJTkVfUkNTMCkKPiA+ICsgKiAtIGxvb2t1cF9lbmdpbmVfaW5mbygi cmNzKiIsICZtYXNrKTogcmV0dXJuICJyY3MiIGVudHJ5IGZyb20KPiA+IEBlbmdpbmVfaW5mbyBh bmQKPiA+ICsgKsKgwqAgbWFzayA9PSBYRV9IV19FTkdJTkVfUkNTX01BU0sKPiA+ICsgKiAtIGxv b2t1cF9lbmdpbmVfaW5mbygicmNzIiwgTlVMTCk6IHJldHVybiAicmNzIiBlbnRyeSBmcm9tCj4g PiBAZW5naW5lX2luZm8KPiA+ICsgKi8KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGVuZ2luZV9p bmZvICpsb29rdXBfZW5naW5lX2luZm8oY29uc3QgY2hhcgo+ID4gKnBhdHRlcm4sIHU2NCAqbWFz aykKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFSUkFZ X1NJWkUoZW5naW5lX2luZm8pOyBpKyspIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1OCBpbnN0YW5jZTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MTYg Yml0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghc3RyX2hh c19wcmVmaXgocGF0dGVybiwgZW5naW5lX2luZm9baV0uY2xzKSkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGF0dGVybiArPSBzdHJsZW4oZW5naW5lX2luZm9b aV0uY2xzKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIW1hc2spCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAq cGF0dGVybiA/IE5VTEwgOiAmZW5naW5lX2luZm9baV07Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFzdHJjbXAocGF0dGVybiwgIioiKSkgewo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqbWFzayA9IGVuZ2luZV9p bmZvW2ldLm1hc2s7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiAmZW5naW5lX2luZm9baV07Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChr c3RydG91OChwYXR0ZXJuLCAxMCwgJmluc3RhbmNlKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE5VTEw7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYml0ID0gX19mZnM2NChlbmdpbmVfaW5mb1tpXS5tYXNr KSArIGluc3RhbmNlOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChiaXQg Pj0gZmxzNjQoZW5naW5lX2luZm9baV0ubWFzaykpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCptYXNrID0gQklUX1VMTChiaXQpOwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAmZW5naW5lX2luZm9baV07Cj4gPiArwqDCoMKg wqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gTlVMTDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIGludCBwYXJzZV9lbmdpbmUoY29uc3QgY2hhciAqcywgY29uc3QgY2hh ciAqZW5kX2NoYXJzLCB1NjQKPiA+ICptYXNrLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgZW5naW5lX2luZm8gKipwaW5mbykK PiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGFyIGJ1ZltNQVhfRU5HSU5FX0NMQVNTX0NIQVJT ICsgTUFYX0VOR0lORV9JTlNUQU5DRV9DSEFSUwo+ID4gKyAxXTsKPiA+ICvCoMKgwqDCoMKgwqDC oGNvbnN0IHN0cnVjdCBlbmdpbmVfaW5mbyAqaW5mbzsKPiA+ICvCoMKgwqDCoMKgwqDCoHNpemVf dCBsZW47Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBsZW4gPSBzdHJjc3BuKHMsIGVuZF9jaGFy cyk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAobGVuID49IHNpemVvZihidWYpKQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgbWVtY3B5KGJ1ZiwgcywgbGVuKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGJ1ZltsZW5d ID0gJ1wwJzsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGluZm8gPSBsb29rdXBfZW5naW5lX2lu Zm8oYnVmLCBtYXNrKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghaW5mbykKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT0VOVDsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoGlmIChwaW5mbykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqcGlu Zm8gPSBpbmZvOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGxlbjsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHNzaXplX3QgZW5naW5lc19hbGxvd2VkX3N0b3JlKHN0cnVjdCBjb25m aWdfaXRlbSAqaXRlbSwKPiA+IGNvbnN0IGNoYXIgKnBhZ2UsCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz aXplX3QgbGVuKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3Jv dXBfZGV2aWNlICpkZXYgPQo+ID4geGVfY29uZmlnZnNfc3ViZ3JvdXBfdG9fZ3JvdXBfZGV2aWNl KGl0ZW0pOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3NpemVfdCBwYXR0ZXJubGVuLCBwOwo+ID4gK8Kg wqDCoMKgwqDCoMKgdTY0IG1hc2ssIHZhbCA9IDA7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBm b3IgKHAgPSAwOyBwIDwgbGVuOyBwICs9IHBhdHRlcm5sZW4gKyAxKSB7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcGF0dGVybmxlbiA9IHBhcnNlX2VuZ2luZShwYWdlICsgcCwg IixcbiIsICZtYXNrLAo+ID4gTlVMTCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKHBhdHRlcm5sZW4gPCAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB2YWwgfD0gbWFzazsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoGd1YXJkKG11dGV4KSgmZGV2LT5sb2NrKTsKPiA+ICvCoMKgwqDC oMKgwqDCoGlmICh4ZV9jb25maWdmc19pc19ib3VuZChkZXYpKQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUJVU1k7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBk ZXYtPmNvbmZpZy5kZWJ1Zy5lbmdpbmVzX2FsbG93ZWQgPSB2YWw7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqByZXR1cm4gbGVuOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdTY0IGdldF9ndF90 eXBlc19hbGxvd2VkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPSBmaW5kX2RldmljZShwZGV2 KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHU2NCBtYXNrOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg aWYgKCFkZXYpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuCj4gPiB4 ZV9jb25maWdmc19kZXZpY2VfZGVmYXVsdHMuZGVidWcuZ3RfdHlwZXNfYWxsb3dlZDsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoHNjb3BlZF9ndWFyZChtdXRleCwgJmRldi0+bG9jaykKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtYXNrID0gZGV2LT5jb25maWcuZGVidWcuZ3Rf dHlwZXNfYWxsb3dlZDsKPiA+ICvCoMKgwqDCoMKgwqDCoGNvbmZpZ19ncm91cF9wdXQoJmRldi0+ Z3JvdXApOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIG1hc2s7Cj4gPiArfQo+ID4g Kwo+ID4gKy8qKgo+ID4gKyAqIHhlX2NvbmZpZ2ZzX3ByaW1hcnlfZ3RfYWxsb3dlZCAtIGRldGVy bWluZSB3aGV0aGVyIHByaW1hcnkgR1RzCj4gPiBhcmUgc3VwcG9ydGVkCj4gPiArICogQHBkZXY6 IHBjaSBkZXZpY2UKPiA+ICsgKgo+ID4gKyAqIFJldHVybjogVHJ1ZSBpZiBwcmltYXJ5IEdUcyBh cmUgZW5hYmxlZCwgZmFsc2UgaWYgdGhleSBoYXZlCj4gPiBiZWVuIGRpc2FibGVkIHZpYQo+ID4g KyAqwqDCoMKgwqAgY29uZmlnZnMuCj4gPiArICovCj4gPiArYm9vbCB4ZV9jb25maWdmc19wcmlt YXJ5X2d0X2FsbG93ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4gPiArewo+ID4gK8KgwqDCoMKg wqDCoMKgcmV0dXJuIGdldF9ndF90eXBlc19hbGxvd2VkKHBkZXYpICYKPiA+IEJJVF9VTEwoWEVf R1RfVFlQRV9NQUlOKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogeGVfY29uZmlnZnNf bWVkaWFfZ3RfYWxsb3dlZCAtIGRldGVybWluZSB3aGV0aGVyIG1lZGlhIEdUcyBhcmUKPiA+IHN1 cHBvcnRlZAo+ID4gKyAqIEBwZGV2OiBwY2kgZGV2aWNlCj4gPiArICoKPiA+ICsgKiBSZXR1cm46 IFRydWUgaWYgdGhlIG1lZGlhIEdUcyBhcmUgZW5hYmxlZCwgZmFsc2UgaWYgdGhleSBoYXZlCj4g PiBiZWVuIGRpc2FibGVkCj4gPiArICrCoMKgwqDCoCB2aWEgY29uZmlnZnMuCj4gPiArICovCj4g PiArYm9vbCB4ZV9jb25maWdmc19tZWRpYV9ndF9hbGxvd2VkKHN0cnVjdCBwY2lfZGV2ICpwZGV2 KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBnZXRfZ3RfdHlwZXNfYWxsb3dlZChw ZGV2KSAmCj4gPiBCSVRfVUxMKFhFX0dUX1RZUEVfTUVESUEpOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgc3NpemVfdCBndF90eXBlc19hbGxvd2VkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICpp dGVtLAo+ID4gY2hhciAqcGFnZSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVf Y29uZmlnX2RldmljZSAqZGV2ID0KPiA+IHhlX2NvbmZpZ2ZzX3N1Ymdyb3VwX3RvX2RldmljZShp dGVtKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGNoYXIgKnAgPSBwYWdlOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGd0X3R5cGVzKTsgaSsr KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChkZXYtPmRlYnVnLmd0X3R5 cGVzX2FsbG93ZWQgJgo+ID4gQklUX1VMTChndF90eXBlc1tpXS50eXBlKSkKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcCArPSBzcHJpbnRmKHAsICIl c1xuIiwgZ3RfdHlwZXNbaV0ubmFtZSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4g cCAtIHBhZ2U7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IGd0X3R5cGVzX2FsbG93 ZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAo+ID4gY29uc3QgY2hhciAqcGFnZSwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IGxlbikKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKg wqBjaGFyICpidWYgX19mcmVlKGtmcmVlKSA9IGtzdHJkdXAocGFnZSwgR0ZQX0tFUk5FTCk7Cj4g PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAqZGV2ID0KPiA+ IHhlX2NvbmZpZ2ZzX3N1Ymdyb3VwX3RvX2dyb3VwX2RldmljZShpdGVtKTsKPiA+ICvCoMKgwqDC oMKgwqDCoHU2NCB0eXBlbWFzayA9IDA7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGFyICpwID0gYnVm Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFidWYpCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqB3 aGlsZSAocCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYXIgKnR5cGVu YW1lID0gc3Ryc2VwKCZwLCAiLFxuIik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgYm9vbCBtYXRjaGVkID0gZmFsc2U7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKHR5cGVuYW1lWzBdID09ICdcMCcpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQVJSQVlfU0laRShn dF90eXBlcyk7IGkrKykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAoc3RyY21wKHR5cGVuYW1lLCBndF90eXBlc1tpXS5uYW1lKSA9PQo+ID4g MCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdHlwZW1hc2sgfD0gQklUKGd0X3R5cGVzW2ldLnR5cGUpOwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgbWF0Y2hlZCA9IHRydWU7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo IW1hdGNoZWQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiAtRUlOVkFMOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgZ3VhcmQobXV0ZXgpKCZkZXYtPmxvY2spOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KHhlX2NvbmZpZ2ZzX2lzX2JvdW5kKGRldikpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIC1FQlVTWTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGRldi0+Y29uZmln LmRlYnVnLmd0X3R5cGVzX2FsbG93ZWQgPSB0eXBlbWFzazsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoHJldHVybiBsZW47Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHhlX2NvbmZpZ2Zz X2dldF9lbmFibGVfbXVsdGlfcXVldWUgLSBnZXQgY29uZmlnZnMKPiA+IGVuYWJsZV9tdWx0aV9x dWV1ZSBzZXR0aW5nCj4gPiArICogQHBkZXY6IHBjaSBkZXZpY2UKPiA+ICsgKgo+ID4gKyAqIFJl dHVybjogdHJ1ZSBpZiBtdWx0aS1xdWV1ZSBpcyBlbmFibGVkIGZvciB0aGlzIGRldmljZSAodGhl Cj4gPiBkZWZhdWx0KSwKPiA+ICsgKiBmYWxzZSBpZiBpdCBoYXMgYmVlbiBmb3JjZS1kaXNhYmxl ZCB2aWEgY29uZmlnZnMuCj4gPiArICovCj4gPiArYm9vbCB4ZV9jb25maWdmc19nZXRfZW5hYmxl X211bHRpX3F1ZXVlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPSBmaW5kX2RldmljZShwZGV2 KTsKPiA+ICvCoMKgwqDCoMKgwqDCoGJvb2wgcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg aWYgKCFkZXYpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuCj4gPiB4 ZV9jb25maWdmc19kZXZpY2VfZGVmYXVsdHMuZGVidWcuZW5hYmxlX211bHRpX3F1ZXVlOwo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoMKgc2NvcGVkX2d1YXJkKG11dGV4LCAmZGV2LT5sb2NrKQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGRldi0+Y29uZmlnLmRlYnVnLmVu YWJsZV9tdWx0aV9xdWV1ZTsKPiA+ICvCoMKgwqDCoMKgwqDCoGNvbmZpZ19ncm91cF9wdXQoJmRl di0+Z3JvdXApOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHNzaXplX3QgZW5hYmxlX211bHRpX3F1ZXVlX3Nob3coc3RydWN0IGNv bmZpZ19pdGVtICppdGVtLAo+ID4gY2hhciAqcGFnZSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgeGVfY29uZmlnX2RldmljZSAqZGV2ID0KPiA+IHhlX2NvbmZpZ2ZzX3N1Ymdyb3Vw X3RvX2RldmljZShpdGVtKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBzcHJpbnRm KHBhZ2UsICIlZFxuIiwgZGV2LQo+ID4gPmRlYnVnLmVuYWJsZV9tdWx0aV9xdWV1ZSk7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IGVuYWJsZV9tdWx0aV9xdWV1ZV9zdG9yZShzdHJ1 Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCj4gPiBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQo+ ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpk ZXYgPQo+ID4geGVfY29uZmlnZnNfc3ViZ3JvdXBfdG9fZ3JvdXBfZGV2aWNlKGl0ZW0pOwo+ID4g K8KgwqDCoMKgwqDCoMKgYm9vbCB2YWw7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0ga3N0cnRvYm9vbChwYWdlLCAmdmFsKTsKPiA+ICvC oMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGd1YXJkKG11dGV4KSgmZGV2LT5s b2NrKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh4ZV9jb25maWdmc19pc19ib3VuZChkZXYpKQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUJVU1k7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqBkZXYtPmNvbmZpZy5kZWJ1Zy5lbmFibGVfbXVsdGlfcXVldWUgPSB2 YWw7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gbGVuOwo+ID4gK30KPiA+ICsKPiA+ ICsvKioKPiA+ICsgKiB4ZV9jb25maWdmc19nZXRfcHNtaV9lbmFibGVkIC0gZ2V0IGNvbmZpZ2Zz IGVuYWJsZV9wc21pIHNldHRpbmcKPiA+ICsgKiBAcGRldjogcGNpIGRldmljZQo+ID4gKyAqCj4g PiArICogUmV0dXJuOiBlbmFibGVfcHNtaSBzZXR0aW5nIGluIGNvbmZpZ2ZzCj4gPiArICovCj4g PiArYm9vbCB4ZV9jb25maWdmc19nZXRfcHNtaV9lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2 KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNl ICpkZXYgPSBmaW5kX2RldmljZShwZGV2KTsKPiA+ICvCoMKgwqDCoMKgwqDCoGJvb2wgcmV0Owo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFkZXYpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc2NvcGVk X2d1YXJkKG11dGV4LCAmZGV2LT5sb2NrKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldCA9IGRldi0+Y29uZmlnLmRlYnVnLmVuYWJsZV9wc21pOwo+ID4gK8KgwqDCoMKgwqDC oMKgY29uZmlnX2dyb3VwX3B1dCgmZGV2LT5ncm91cCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3NpemVfdCBlbmFibGVfcHNt aV9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhcgo+ID4gKnBhZ2UpCj4gPiArewo+ ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19kZXZpY2UgKmRldiA9Cj4gPiB4ZV9j b25maWdmc19zdWJncm91cF90b19kZXZpY2UoaXRlbSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gc3ByaW50ZihwYWdlLCAiJWRcbiIsIGRldi0+ZGVidWcuZW5hYmxlX3BzbWkpOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3NpemVfdCBlbmFibGVfcHNtaV9zdG9yZShzdHJ1Y3Qg Y29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0Cj4gPiBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQo+ID4g K3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYg PQo+ID4geGVfY29uZmlnZnNfc3ViZ3JvdXBfdG9fZ3JvdXBfZGV2aWNlKGl0ZW0pOwo+ID4gK8Kg wqDCoMKgwqDCoMKgYm9vbCB2YWw7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0ga3N0cnRvYm9vbChwYWdlLCAmdmFsKTsKPiA+ICvCoMKg wqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGd1YXJkKG11dGV4KSgmZGV2LT5sb2Nr KTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh4ZV9jb25maWdmc19pc19ib3VuZChkZXYpKQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUJVU1k7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqBkZXYtPmNvbmZpZy5kZWJ1Zy5lbmFibGVfcHNtaSA9IHZhbDsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBsZW47Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4g KyAqIHhlX2NvbmZpZ2ZzX2dldF9zdXJ2aXZhYmlsaXR5X21vZGUgLSBnZXQgY29uZmlnZnMgc3Vy dml2YWJpbGl0eQo+ID4gbW9kZSBhdHRyaWJ1dGUKPiA+ICsgKiBAcGRldjogcGNpIGRldmljZQo+ ID4gKyAqCj4gPiArICogUmV0dXJuOiBzdXJ2aXZhYmlsaXR5X21vZGUgYXR0cmlidXRlIGluIGNv bmZpZ2ZzCj4gPiArICovCj4gPiArYm9vbCB4ZV9jb25maWdmc19nZXRfc3Vydml2YWJpbGl0eV9t b2RlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPSBmaW5kX2RldmljZShwZGV2KTsKPiA+ICvC oMKgwqDCoMKgwqDCoGJvb2wgbW9kZTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghZGV2 KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybgo+ID4geGVfY29uZmln ZnNfZGV2aWNlX2RlZmF1bHRzLmRlYnVnLnN1cnZpdmFiaWxpdHlfbW9kZTsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoHNjb3BlZF9ndWFyZChtdXRleCwgJmRldi0+bG9jaykKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtb2RlID0gZGV2LT5jb25maWcuZGVidWcuc3Vydml2YWJp bGl0eV9tb2RlOwo+ID4gK8KgwqDCoMKgwqDCoMKgY29uZmlnX2dyb3VwX3B1dCgmZGV2LT5ncm91 cCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gbW9kZTsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHNzaXplX3Qgc3Vydml2YWJpbGl0eV9tb2RlX3Nob3coc3RydWN0IGNvbmZpZ19p dGVtICppdGVtLAo+ID4gY2hhciAqcGFnZSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgeGVfY29uZmlnX2RldmljZSAqZGV2ID0KPiA+IHhlX2NvbmZpZ2ZzX3N1Ymdyb3VwX3RvX2Rl dmljZShpdGVtKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBzcHJpbnRmKHBhZ2Us ICIlZFxuIiwgZGV2LQo+ID4gPmRlYnVnLnN1cnZpdmFiaWxpdHlfbW9kZSk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBzc2l6ZV90IHN1cnZpdmFiaWxpdHlfbW9kZV9zdG9yZShzdHJ1Y3QgY29u ZmlnX2l0ZW0gKml0ZW0sCj4gPiBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQo+ID4gK3sK PiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ ID4geGVfY29uZmlnZnNfc3ViZ3JvdXBfdG9fZ3JvdXBfZGV2aWNlKGl0ZW0pOwo+ID4gK8KgwqDC oMKgwqDCoMKgYm9vbCBzdXJ2aXZhYmlsaXR5X21vZGU7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQg cmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0ga3N0cnRvYm9vbChwYWdlLCAmc3Vy dml2YWJpbGl0eV9tb2RlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoGd1YXJkKG11dGV4KSgmZGV2LT5sb2NrKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh4ZV9j b25maWdmc19pc19ib3VuZChkZXYpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiAtRUJVU1k7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBkZXYtPmNvbmZpZy5kZWJ1 Zy5zdXJ2aXZhYmlsaXR5X21vZGUgPSBzdXJ2aXZhYmlsaXR5X21vZGU7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqByZXR1cm4gbGVuOwo+ID4gK30KPiA+ICsKPiA+ICtDT05GSUdGU19BVFRSKCwg Y3R4X3Jlc3RvcmVfbWlkX2JiKTsKPiA+ICtDT05GSUdGU19BVFRSKCwgY3R4X3Jlc3RvcmVfcG9z dF9iYik7Cj4gPiArQ09ORklHRlNfQVRUUigsIGVuZ2luZXNfYWxsb3dlZCk7Cj4gPiArQ09ORklH RlNfQVRUUigsIGd0X3R5cGVzX2FsbG93ZWQpOwo+ID4gK0NPTkZJR0ZTX0FUVFIoLCBlbmFibGVf bXVsdGlfcXVldWUpOwo+ID4gK0NPTkZJR0ZTX0FUVFIoLCBlbmFibGVfcHNtaSk7Cj4gPiArQ09O RklHRlNfQVRUUigsIHN1cnZpdmFiaWxpdHlfbW9kZSk7Cj4gPiArCj4gPiArc3RhdGljIHN0cnVj dCBjb25maWdmc19hdHRyaWJ1dGUgKnhlX2NvbmZpZ2ZzX2RlYnVnX2F0dHJzW10gPSB7Cj4gPiAr wqDCoMKgwqDCoMKgwqAmYXR0cl9jdHhfcmVzdG9yZV9taWRfYmIsCj4gPiArwqDCoMKgwqDCoMKg wqAmYXR0cl9jdHhfcmVzdG9yZV9wb3N0X2JiLAo+ID4gK8KgwqDCoMKgwqDCoMKgJmF0dHJfZW5n aW5lc19hbGxvd2VkLAo+ID4gK8KgwqDCoMKgwqDCoMKgJmF0dHJfZ3RfdHlwZXNfYWxsb3dlZCwK PiA+ICvCoMKgwqDCoMKgwqDCoCZhdHRyX2VuYWJsZV9tdWx0aV9xdWV1ZSwKPiA+ICvCoMKgwqDC oMKgwqDCoCZhdHRyX2VuYWJsZV9wc21pLAo+ID4gK8KgwqDCoMKgwqDCoMKgJmF0dHJfc3Vydml2 YWJpbGl0eV9tb2RlLAo+ID4gK8KgwqDCoMKgwqDCoMKgTlVMTCwKPiA+ICt9Owo+ID4gKwo+ID4g Ky8qCj4gPiArICogUGVyLXBhcmFtZXRlciB2aXNpYmlsaXR5IHByZWRpY2F0ZXMuCj4gPiArICoK PiA+ICsgKiBYRV9QQVJBTV9WSVNJQkxFX0FMV0FZUyAtIGF0dHJpYnV0ZSBpcyBhbHdheXMgc2hv d24uCj4gPiArICogWEVfUEFSQU1fVklTSUJMRV9TVVJWSVZBQklMSVRZIC0gb25seSBzaG93biBv biBkR0ZYIHBsYXRmb3Jtcwo+ID4gPj0gQmF0dGxlbWFnZS4KPiA+ICsgKgo+ID4gKyAqIFRoZXNl IG1hY3JvcyBhcmUgb25seSBldmFsdWF0ZWQgaGVyZSwgd2hlcmUgdGhlIHBsYXRmb3JtCj4gPiBk ZXNjcmlwdG9yIGlzCj4gPiArICogcmVhY2hhYmxlLiB4ZV9jb25maWdmc19kZWJ1Z19wYXJhbXMu aCB0cmVhdHMgdGhlbSBhcyBvcGFxdWUKPiA+IHRva2Vucy4KPiA+ICsgKi8KPiA+ICsjZGVmaW5l IFhFX1BBUkFNX1ZJU0lCTEVfQUxXQVlTKF9pdGVtKSBcCj4gPiArwqDCoMKgwqDCoMKgwqAodHJ1 ZSkKPiA+ICsjZGVmaW5lIFhFX1BBUkFNX1ZJU0lCTEVfU1VSVklWQUJJTElUWShfaXRlbSkgXAo+ ID4gK8KgwqDCoMKgwqDCoMKgKHhlX2NvbmZpZ2ZzX3N1Ymdyb3VwX3RvX2dyb3VwX2RldmljZShf aXRlbSktPmRlc2MtPmlzX2RnZngKPiA+ICYmIFwKPiA+ICvCoMKgwqDCoMKgwqDCoCB4ZV9jb25m aWdmc19zdWJncm91cF90b19ncm91cF9kZXZpY2UoX2l0ZW0pLT5kZXNjLQo+ID4gPnBsYXRmb3Jt ID49IFhFX0JBVFRMRU1BR0UpCj4gPiArCj4gPiArc3RhdGljIGJvb2wgeGVfY29uZmlnZnNfZGVi dWdfaXNfdmlzaWJsZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUKPiA+ICphdHRyLCBpbnQgbikKPiA+ ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoYXR0ciA9PSAmYXR0cl9zdXJ2aXZhYmlsaXR5X21v ZGUpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmln X2dyb3VwX2RldmljZSAqZGV2ID0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgeGVfY29uZmlnZnNfdG9fZ3JvdXBfZGV2aWNlKGl0ZW0tCj4gPiA+Y2lf cGFyZW50KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g ZGV2LT5kZXNjLT5pc19kZ2Z4ICYmIGRldi0+ZGVzYy0+cGxhdGZvcm0gPj0KPiA+IFhFX0JBVFRM RU1BR0U7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gdHJ1ZTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBjb25maWdmc19ncm91cF9v cGVyYXRpb25zCj4gPiB4ZV9jb25maWdmc19kZWJ1Z19ncm91cF9vcHMgPSB7Cj4gPiArwqDCoMKg wqDCoMKgwqAuaXNfdmlzaWJsZcKgwqDCoMKgwqA9IHhlX2NvbmZpZ2ZzX2RlYnVnX2lzX3Zpc2li bGUsCj4gPiArfTsKPiA+IMKgCj4gPiDCoGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHhl X2NvbmZpZ2ZzX2RlYnVnX3R5cGUgPSB7Cj4gPiArwqDCoMKgwqDCoMKgwqAuY3RfYXR0cnPCoMKg wqDCoMKgwqDCoD0geGVfY29uZmlnZnNfZGVidWdfYXR0cnMsCj4gPiArwqDCoMKgwqDCoMKgwqAu Y3RfZ3JvdXBfb3BzwqDCoMKgPSAmeGVfY29uZmlnZnNfZGVidWdfZ3JvdXBfb3BzLAo+ID4gwqDC oMKgwqDCoMKgwqDCoC5jdF9vd25lcsKgwqDCoMKgwqDCoMKgPSBUSElTX01PRFVMRSwKPiA+IMKg fTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB4ZV9jb25maWdmc19kZWJ1Z19yZWxlYXNlX2NvbmZp ZyAtIHJlbGVhc2UgZGVidWctc3BlY2lmaWMKPiA+IGNvbmZpZyByZXNvdXJjZXMKPiA+ICsgKiBA Y29uZmlnOiB4ZSBjb25maWcgZGV2aWNlIHN0cnVjdHVyZQo+ID4gKyAqCj4gPiArICogRnJlZXMg YW55IG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGRlYnVnIGNvbmZpZ2ZzIHBhcmFtZXRlcnMuCj4gPiAr ICovCj4gPiArdm9pZCB4ZV9jb25maWdmc19kZWJ1Z19yZWxlYXNlX2NvbmZpZyhzdHJ1Y3QgeGVf Y29uZmlnX2RldmljZQo+ID4gKmNvbmZpZykKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBrZnJl ZShjb25maWctPmRlYnVnLmN0eF9yZXN0b3JlX21pZF9iYlswXS5jcyk7Cj4gPiArwqDCoMKgwqDC oMKgwqBrZnJlZShjb25maWctPmRlYnVnLmN0eF9yZXN0b3JlX3Bvc3RfYmJbMF0uY3MpOwo+ID4g K30KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnNfZGVidWcu aAo+ID4gYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnNfZGVidWcuaAo+ID4gaW5kZXgg NWY5Mzg0NTBhZWQyLi40YTAyN2VhMjA4MmQgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0veGUveGVfY29uZmlnZnNfZGVidWcuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hl X2NvbmZpZ2ZzX2RlYnVnLmgKPiA+IEBAIC01LDkgKzUsNDYgQEAKPiA+IMKgI2lmbmRlZiBfWEVf Q09ORklHRlNfREVCVUdfSF8KPiA+IMKgI2RlZmluZSBfWEVfQ09ORklHRlNfREVCVUdfSF8KPiA+ IMKgCj4gPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgInhl X2h3X2VuZ2luZV90eXBlcy5oIgo+ID4gKwo+ID4gK3N0cnVjdCBwY2lfZGV2Owo+ID4gK3N0cnVj dCB4ZV9jb25maWdfZGV2aWNlOwo+ID4gKwo+ID4gwqAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJN X1hFX0RFQlVHKSAmJgo+ID4gSVNfRU5BQkxFRChDT05GSUdfQ09ORklHRlNfRlMpCj4gPiAtc3Ry dWN0IGNvbmZpZ19pdGVtX3R5cGU7Cj4gPiDCoGV4dGVybiBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0 ZW1fdHlwZSB4ZV9jb25maWdmc19kZWJ1Z190eXBlOwo+ID4gK3ZvaWQgeGVfY29uZmlnZnNfZGVi dWdfcmVsZWFzZV9jb25maWcoc3RydWN0IHhlX2NvbmZpZ19kZXZpY2UKPiA+ICpjb25maWcpOwo+ ID4gK3UzMiB4ZV9jb25maWdmc19nZXRfY3R4X3Jlc3RvcmVfbWlkX2JiKHN0cnVjdCBwY2lfZGV2 ICpwZGV2LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0geGVfZW5naW5lX2NsYXNzIGNsYXNz LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IHUzMiAqKmNzKTsKPiA+ICt1MzIgeGVfY29u ZmlnZnNfZ2V0X2N0eF9yZXN0b3JlX3Bvc3RfYmIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZW51bSB4ZV9lbmdpbmVfY2xhc3MgY2xhc3MsCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgdTMyICoqY3MpOwo+ID4gK3U2NCB4ZV9jb25maWdmc19n ZXRfZW5naW5lc19hbGxvd2VkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKPiA+ICtib29sIHhlX2Nv bmZpZ2ZzX3ByaW1hcnlfZ3RfYWxsb3dlZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cj4gPiArYm9v bCB4ZV9jb25maWdmc19tZWRpYV9ndF9hbGxvd2VkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKPiA+ ICtib29sIHhlX2NvbmZpZ2ZzX2dldF9lbmFibGVfbXVsdGlfcXVldWUoc3RydWN0IHBjaV9kZXYg KnBkZXYpOwo+ID4gK2Jvb2wgeGVfY29uZmlnZnNfZ2V0X3BzbWlfZW5hYmxlZChzdHJ1Y3QgcGNp X2RldiAqcGRldik7Cj4gPiArYm9vbCB4ZV9jb25maWdmc19nZXRfc3Vydml2YWJpbGl0eV9tb2Rl KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKPiA+ICsjZWxzZQo+ID4gKy8qCj4gPiArICogRHVtbXkg dmFsdWVzIGhlcmUgYXJlIG5vdCB1c2VkIHNpbmNlIHRoZXNlIGZ1bmN0aW9uIGFjY2Vzc2VzCj4g PiBhcmUgYWx3YXlzCj4gPiArICogd3JhcHBlZCBpbiBDT05GSUdfRFJNX1hFX0RFQlVHLgo+ID4g KyAqLwo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZV9jb25maWdmc19kZWJ1Z19yZWxlYXNlX2Nv bmZpZyhzdHJ1Y3QKPiA+IHhlX2NvbmZpZ19kZXZpY2UgKmNvbmZpZykgeyB9Cj4gPiArc3RhdGlj IGlubGluZSB1MzIgeGVfY29uZmlnZnNfZ2V0X2N0eF9yZXN0b3JlX21pZF9iYihzdHJ1Y3QKPiA+ IHBjaV9kZXYgKnBkZXYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGVudW0KPiA+IHhlX2VuZ2luZV9jbGFzcyBjbGFzcywKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgdTMyCj4gPiAqKmNzKSB7 IHJldHVybiAwOyB9Cj4gPiArc3RhdGljIGlubGluZSB1MzIgeGVfY29uZmlnZnNfZ2V0X2N0eF9y ZXN0b3JlX3Bvc3RfYmIoc3RydWN0Cj4gPiBwY2lfZGV2ICpwZGV2LAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0KPiA+IHhlX2VuZ2luZV9j bGFzcyBjbGFzcywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjb25zdCB1MzIKPiA+ICoqY3MpIHsgcmV0dXJuIDA7IH0KPiA+ICtzdGF0aWMgaW5s aW5lIHU2NCB4ZV9jb25maWdmc19nZXRfZW5naW5lc19hbGxvd2VkKHN0cnVjdCBwY2lfZGV2Cj4g PiAqcGRldikgeyByZXR1cm4gVTY0X01BWDsgfQo+ID4gK3N0YXRpYyBpbmxpbmUgYm9vbCB4ZV9j b25maWdmc19wcmltYXJ5X2d0X2FsbG93ZWQoc3RydWN0IHBjaV9kZXYKPiA+ICpwZGV2KSB7IHJl dHVybiB0cnVlOyB9Cj4gPiArc3RhdGljIGlubGluZSBib29sIHhlX2NvbmZpZ2ZzX21lZGlhX2d0 X2FsbG93ZWQoc3RydWN0IHBjaV9kZXYKPiA+ICpwZGV2KSB7IHJldHVybiB0cnVlOyB9Cj4gPiAr c3RhdGljIGlubGluZSBib29sIHhlX2NvbmZpZ2ZzX2dldF9lbmFibGVfbXVsdGlfcXVldWUoc3Ry dWN0Cj4gPiBwY2lfZGV2ICpwZGV2KSB7IHJldHVybiB0cnVlOyB9Cj4gPiArc3RhdGljIGlubGlu ZSBib29sIHhlX2NvbmZpZ2ZzX2dldF9wc21pX2VuYWJsZWQoc3RydWN0IHBjaV9kZXYKPiA+ICpw ZGV2KSB7IHJldHVybiBmYWxzZTsgfQo+ID4gK3N0YXRpYyBpbmxpbmUgYm9vbCB4ZV9jb25maWdm c19nZXRfc3Vydml2YWJpbGl0eV9tb2RlKHN0cnVjdAo+ID4gcGNpX2RldiAqcGRldikgeyByZXR1 cm4gZmFsc2U7IH0KPiA+IMKgI2VuZGlmCj4gPiDCoAo+ID4gwqAjZW5kaWYgLyogX1hFX0NPTkZJ R0ZTX0RFQlVHX0hfICovCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2Nv bmZpZ2ZzX3R5cGVzLmgKPiA+IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2NvbmZpZ2ZzX3R5cGVz LmgKPiA+IGluZGV4IGUyMmI5NDI0ZjcxOS4uNmU4YmE2Zjg1ZmFkIDEwMDY0NAo+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3hlL3hlX2NvbmZpZ2ZzX3R5cGVzLmgKPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS94ZS94ZV9jb25maWdmc190eXBlcy5oCj4gPiBAQCAtMzIsMTMgKzMyLDE3IEBAIHN0 cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlIHsKPiA+IMKgwqDCoMKgwqDCoMKgwqAgKiB0eXBl LCBlbnRyaWVzIGFyZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkuCj4gPiDCoMKgwqDCoMKgwqDCoMKg ICovCj4gPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19kZXZpY2Ugewo+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB3YV9iYgo+ID4gY3R4X3Jlc3RvcmVf bWlkX2JiW1hFX0VOR0lORV9DTEFTU19NQVhdOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCB3YV9iYgo+ID4gY3R4X3Jlc3RvcmVfcG9zdF9iYltYRV9FTkdJTkVfQ0xB U1NfTUFYXTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgZW5naW5lc19h bGxvd2VkOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU2NCBndF90eXBlc19h bGxvd2VkOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJvb2wgZW5hYmxlX211 bHRpX3F1ZXVlOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJvb2wgZW5hYmxl X3BzbWk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm9vbCBzdXJ2aXZhYmls aXR5X21vZGU7Cj4gPiArI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9YRV9ERUJVRykKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgewo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgd2FfYmIKPiA+IGN0eF9yZXN0 b3JlX21pZF9iYltYRV9FTkdJTkVfQ0xBU1NfTUFYXTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHdhX2JiCj4gPiBjdHhfcmVzdG9yZV9w b3N0X2JiW1hFX0VOR0lORV9DTEFTU19NQVhdOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgZW5naW5lc19hbGxvd2VkOwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgZ3RfdHlwZXNfYWxsb3dl ZDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm9v bCBlbmFibGVfbXVsdGlfcXVldWU7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGJvb2wgZW5hYmxlX3BzbWk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJvb2wgc3Vydml2YWJpbGl0eV9tb2RlOwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZGVidWc7Cj4gPiArI2VuZGlmCj4gPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB7Cj4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgbWF4X3ZmczsK PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJvb2wg YWRtaW5fb25seV9wZjsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3Vj LmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Yy5jCj4gPiBpbmRleCBjN2Y4YmJkNGNi OTIuLmJmN2NhOGY5ZDc3MyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9n dWMuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Yy5jCj4gPiBAQCAtMTksNiAr MTksNyBAQAo+ID4gwqAjaW5jbHVkZSAicmVncy94ZV9pcnFfcmVncy5oIgo+ID4gwqAjaW5jbHVk ZSAieGVfYm8uaCIKPiA+IMKgI2luY2x1ZGUgInhlX2NvbmZpZ2ZzLmgiCj4gPiArI2luY2x1ZGUg InhlX2NvbmZpZ2ZzX2RlYnVnLmgiCj4gPiDCoCNpbmNsdWRlICJ4ZV9kZXZpY2UuaCIKPiA+IMKg I2luY2x1ZGUgInhlX2ZvcmNlX3dha2UuaCIKPiA+IMKgI2luY2x1ZGUgInhlX2d0LmgiCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19hZHMuYwo+ID4gYi9kcml2ZXJz L2dwdS9kcm0veGUveGVfZ3VjX2Fkcy5jCj4gPiBpbmRleCBmZjhlZWUzODMxYWEuLjlhNjg5NTM3 N2MxNyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfYWRzLmMKPiA+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfYWRzLmMKPiA+IEBAIC0xNyw2ICsxNyw3 IEBACj4gPiDCoCNpbmNsdWRlICJyZWdzL3hlX2d1Y19yZWdzLmgiCj4gPiDCoCNpbmNsdWRlICJ4 ZV9iby5oIgo+ID4gwqAjaW5jbHVkZSAieGVfY29uZmlnZnMuaCIKPiA+ICsjaW5jbHVkZSAieGVf Y29uZmlnZnNfZGVidWcuaCIKPiA+IMKgI2luY2x1ZGUgInhlX2d0LmgiCj4gPiDCoCNpbmNsdWRl ICJ4ZV9ndF9jY3NfbW9kZS5oIgo+ID4gwqAjaW5jbHVkZSAieGVfZ3RfbWNyLmgiCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2h3X2VuZ2luZS5jCj4gPiBiL2RyaXZlcnMv Z3B1L2RybS94ZS94ZV9od19lbmdpbmUuYwo+ID4gaW5kZXggMDEwNDk5NzY2ZmNlLi5mNDc0MGRl N2Y1N2IgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lLmMK PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lbmdpbmUuYwo+ID4gQEAgLTE4LDYg KzE4LDcgQEAKPiA+IMKgI2luY2x1ZGUgInhlX2Fzc2VydC5oIgo+ID4gwqAjaW5jbHVkZSAieGVf Ym8uaCIKPiA+IMKgI2luY2x1ZGUgInhlX2NvbmZpZ2ZzLmgiCj4gPiArI2luY2x1ZGUgInhlX2Nv bmZpZ2ZzX2RlYnVnLmgiCj4gPiDCoCNpbmNsdWRlICJ4ZV9kZXZpY2UuaCIKPiA+IMKgI2luY2x1 ZGUgInhlX2V4ZWNsaXN0LmgiCj4gPiDCoCNpbmNsdWRlICJ4ZV9mb3JjZV93YWtlLmgiCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2xyYy5jCj4gPiBiL2RyaXZlcnMvZ3B1 L2RybS94ZS94ZV9scmMuYwo+ID4gaW5kZXggMzViNGU4Mjg5YjVmLi40NDljZGQxZTI1MTMgMTAw NjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfbHJjLmMKPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS94ZS94ZV9scmMuYwo+ID4gQEAgLTE5LDYgKzE5LDcgQEAKPiA+IMKgI2luY2x1 ZGUgInhlX2JiLmgiCj4gPiDCoCNpbmNsdWRlICJ4ZV9iby5oIgo+ID4gwqAjaW5jbHVkZSAieGVf Y29uZmlnZnMuaCIKPiA+ICsjaW5jbHVkZSAieGVfY29uZmlnZnNfZGVidWcuaCIKPiA+IMKgI2lu Y2x1ZGUgInhlX2RldmljZS5oIgo+ID4gwqAjaW5jbHVkZSAieGVfZHJtX2NsaWVudC5oIgo+ID4g wqAjaW5jbHVkZSAieGVfZXhlY19xdWV1ZS5oIgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS94ZS94ZV9wY2kuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMKPiA+IGlu ZGV4IGFiNGRhMWQ5YTlmMS4uZmQzZWFlNDVkYWNmIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL3hlL3hlX3BjaS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMK PiA+IEBAIC0xOSw2ICsxOSw3IEBACj4gPiDCoCNpbmNsdWRlICJyZWdzL3hlX2d0X3JlZ3MuaCIK PiA+IMKgI2luY2x1ZGUgInJlZ3MveGVfcmVncy5oIgo+ID4gwqAjaW5jbHVkZSAieGVfY29uZmln ZnMuaCIKPiA+ICsjaW5jbHVkZSAieGVfY29uZmlnZnNfZGVidWcuaCIKPiA+IMKgI2luY2x1ZGUg InhlX2RldmljZS5oIgo+ID4gwqAjaW5jbHVkZSAieGVfZHJ2LmgiCj4gPiDCoCNpbmNsdWRlICJ4 ZV9ndC5oIgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9wc21pLmMKPiA+ IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BzbWkuYwo+ID4gaW5kZXggODk5YjAxZjcyYmEzLi41 OWFmM2QxNDU0MTggMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcHNtaS5j Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcHNtaS5jCj4gPiBAQCAtOCw2ICs4LDcg QEAKPiA+IMKgI2luY2x1ZGUgInhlX2JvLmgiCj4gPiDCoCNpbmNsdWRlICJ4ZV9kZXZpY2VfdHlw ZXMuaCIKPiA+IMKgI2luY2x1ZGUgInhlX2NvbmZpZ2ZzLmgiCj4gPiArI2luY2x1ZGUgInhlX2Nv bmZpZ2ZzX2RlYnVnLmgiCj4gPiDCoCNpbmNsdWRlICJ4ZV9wc21pLmgiCj4gPiDCoAo+ID4gwqAv Kgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9ydHAuYwo+ID4gYi9kcml2 ZXJzL2dwdS9kcm0veGUveGVfcnRwLmMKPiA+IGluZGV4IDZhOGQ2ZWE2OGYyNS4uNjIwNjgxODkz MjBmIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3J0cC5jCj4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcnRwLmMKPiA+IEBAIC0xMCw2ICsxMCw3IEBACj4gPiDC oCNpbmNsdWRlIDx1YXBpL2RybS94ZV9kcm0uaD4KPiA+IMKgCj4gPiDCoCNpbmNsdWRlICJ4ZV9j b25maWdmcy5oIgo+ID4gKyNpbmNsdWRlICJ4ZV9jb25maWdmc19kZWJ1Zy5oIgo+ID4gwqAjaW5j bHVkZSAieGVfZGV2aWNlLmgiCj4gPiDCoCNpbmNsdWRlICJ4ZV9ndC5oIgo+ID4gwqAjaW5jbHVk ZSAieGVfZ3RfdG9wb2xvZ3kuaCIKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUv eGVfc3Vydml2YWJpbGl0eV9tb2RlLmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N1cnZp dmFiaWxpdHlfbW9kZS5jCj4gPiBpbmRleCA0NWQ0NGViZTI4OGIuLjEyMzhmZDAxOGQ2MSAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdXJ2aXZhYmlsaXR5X21vZGUuYwo+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N1cnZpdmFiaWxpdHlfbW9kZS5jCj4gPiBA QCAtMTEsNiArMTEsNyBAQAo+ID4gwqAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KPiA+IMKgCj4g PiDCoCNpbmNsdWRlICJ4ZV9jb25maWdmcy5oIgo+ID4gKyNpbmNsdWRlICJ4ZV9jb25maWdmc19k ZWJ1Zy5oIgo+ID4gwqAjaW5jbHVkZSAieGVfZGV2aWNlLmgiCj4gPiDCoCNpbmNsdWRlICJ4ZV9o ZWNpX2dzYy5oIgo+ID4gwqAjaW5jbHVkZSAieGVfaTJjLmgiCj4gPiAtLSAKPiA+IDIuNDMuMAo+ ID4gCj4gCgo=