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 72FEBC3DA59 for ; Fri, 19 Jul 2024 20:21:50 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 312A810E042; Fri, 19 Jul 2024 20:21:50 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="FV37g76X"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by gabe.freedesktop.org (Postfix) with ESMTPS id DB82510E042 for ; Fri, 19 Jul 2024 20:21:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1721420509; x=1752956509; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=q2+b12FCNwy87KlNzCHiOpH/HGhZnMWAABd60UhFS9w=; b=FV37g76XXQo3doZmaokIXxoqbwSbxi5qm+cpfZ+ZCU76tOoVok+ZZ9Nj lilLijX1K+B1/jnzxmqsd+5xJ3X+geC5xLHSvEhT4r6BcGV7T6xQHk0gC sYAcThX4eNJcwpZY9X/uQVZciAcWZprqMmdB42Kz9+8WYzTHZUTCJ/zgl ko0m2OKP1HmMkykEUfCqpwHmMTRBZO2v33N5Tg7Y9kiva3Jpk0IobUHFH Sz+qiovZOXI5YaFFlvqvsIky/Mz2ynPuWgfUzNuLmAV42GcqrPgV+Ma5V fvZJQq3+FASy+ZCs45WKeH9v+Xsbq7oGeFsc0Lwl/ao8P1KQQS79TQX8I Q==; X-CSE-ConnectionGUID: GPfLBO0+SwC58ufbO5g1eQ== X-CSE-MsgGUID: ASghde2fRyeYaeCgNmLBbw== X-IronPort-AV: E=McAfee;i="6700,10204,11138"; a="12624758" X-IronPort-AV: E=Sophos;i="6.09,221,1716274800"; d="scan'208";a="12624758" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Jul 2024 13:21:48 -0700 X-CSE-ConnectionGUID: tUvi9ax5SEWP+mlBlbQh/Q== X-CSE-MsgGUID: faMpabUoTOauUrH7TAKY+A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.09,221,1716274800"; d="scan'208";a="56067802" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by orviesa005.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 19 Jul 2024 13:21:48 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 19 Jul 2024 13:21:47 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39 via Frontend Transport; Fri, 19 Jul 2024 13:21:47 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.42) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Fri, 19 Jul 2024 13:21:46 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=P0wXBQBJGIY4X1YC9VcKcRwjxfnkscLSBW29NN9/KwpBBnSP3NTlQE/0PoLKlA+0iJVn50a5I5r+OeiV3QquhS37OHJRXv1FkIg6+nbJCjKlGXyXi1OyZy5HPolbruS8xjqMhk9iHS73jomj2ZlhsfJoY80VuVRrGajD8w57YGwPmGqmN/SrXKb5cq9XtCu9YdL/Ns64y2MQbXKtUfkmDFzb7VKp43kxeI0JjgKEnMMqsMZjuLJ/ADlxGHsDyqpvMrvq2p/J3RJecrcN3idBKw3KJNWawGO3lFmc6YDIR+UspsdKtw92KJHFa2oWD9E+ZKLPCQR5rAC6v98DAsC02w== 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=q2+b12FCNwy87KlNzCHiOpH/HGhZnMWAABd60UhFS9w=; b=QE4Lk8/IlZj4PNwKV8gav7eR0W8V1bF15Olgz6iTOKJFVLaHN/BlafpSKeGd9/aJyIfjbIkXgYig/6S9qfctV71hEEuw8QlVECtJ7c6c0EoUrI4+j6AZpD6nH3nKb6HoevvprSgG8XtEx0sGyLnX0Gs8PuNxtXsXYhg/7PnG3CK7RQ7+Ew5BddVSg0uNT2zWOz/X6NQ5D9niGUGJtxP6dSU4lGqreZV4C0a1KVHOJFyEaImj7ZFdHAs7HDzE6nYvS3XkUouGImi0lNDVnTLHl5BedlgvEuvfsnrwayCc+A145ynWt31uh+7SS56XzEFqe/bFKNp+btlbpcbrfYyfqQ== 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 DM4PR11MB8179.namprd11.prod.outlook.com (2603:10b6:8:18e::22) by IA1PR11MB7754.namprd11.prod.outlook.com (2603:10b6:208:421::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7762.28; Fri, 19 Jul 2024 20:21:43 +0000 Received: from DM4PR11MB8179.namprd11.prod.outlook.com ([fe80::f5c2:eb59:d98c:e8ba]) by DM4PR11MB8179.namprd11.prod.outlook.com ([fe80::f5c2:eb59:d98c:e8ba%7]) with mapi id 15.20.7784.013; Fri, 19 Jul 2024 20:21:43 +0000 From: "Souza, Jose" To: "Dixit, Ashutosh" , "intel-xe@lists.freedesktop.org" , "Degrood, Felix J" CC: "Chegondi, Harish" Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling Thread-Topic: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling Thread-Index: AQHa0L7jLk5Pn9W4/0+8hkrEd96MvLH+kQgA Date: Fri, 19 Jul 2024 20:21:43 +0000 Message-ID: References: <20240707224141.2865472-1-ashutosh.dixit@intel.com> <20240707224141.2865472-2-ashutosh.dixit@intel.com> In-Reply-To: <20240707224141.2865472-2-ashutosh.dixit@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM4PR11MB8179:EE_|IA1PR11MB7754:EE_ x-ms-office365-filtering-correlation-id: 011594e2-9455-40df-7e1a-08dca83067fc x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|1800799024|366016|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?c0g2N3NiUURRTTZqSk5VcFdsd3RnVlFIaDl2UDVaVTdYM1JZWGdOcnVNdVBE?= =?utf-8?B?RWRqL0sxYVduaUJFc1hZR2VKZDZNUndVK2ZVQkJ2K1hZanp1MTZqdVdaaTQz?= =?utf-8?B?b2hGaFVTbVdxOHoya05BV0tQS0tjYjhma2VxUW8rS2Z2RFkyeW1XMWpycmRF?= =?utf-8?B?T3hoTUdYOHByQStKN0dKSklmdXlZRmJDREpnQ21RMTBEdkpTMWVqNnljc0Yv?= =?utf-8?B?UTRWVVBoK2xNYXNTNWZjdHlSTzNqSWh1REM0d3Jzc01SeHB0Z1MzVmkxeWZy?= =?utf-8?B?a0pQVXZNRVRKQUJZK3lCVlY2VTkzSENyYXZMM2dCZFNkUGVaUExmOGN4S21s?= =?utf-8?B?ejgzRFFBbm5GcURKYTRZNDg3bXdYU2t3Z202OFpFMmVkOHNISlZkQzhxckFl?= =?utf-8?B?cmFjaGpBeEU1aEc1TG9VbVJrYXI1SFZxd2lFbzhLVXZxRk9IM0lrRjFjWlZW?= =?utf-8?B?M0NUUDFmMTlYc0ZzdWk1VjlKelJRUzUxMzlZdWNzNTBOUWd1Z1k1M1ZBU0di?= =?utf-8?B?ajAwajJOUTFESUQwMndHUHdxL0RTN0l1OHV1a3Y4OGRiZkRPaTVaelZvVVZB?= =?utf-8?B?YlVrbkdybkZiMWpaSlBWSlBwVXFTUmoxQ0JDY2VWb0w0R1N1Yjh0M1AwOHIr?= =?utf-8?B?bE1ITmVuRXVmY0hISS9HSGxaR2l5SnRrU2RXT1M4SkFZRVUwT1MvUHJQeTBE?= =?utf-8?B?NWc1TE9OV1gyZFZ3b2xMZkozeXdVVjkzUUNIaUVXT3gxWFRKaFRteENiV21h?= =?utf-8?B?WkxvZ1gzeEsxcGxReUUyTDlPbkRJeFF0bytsUnJndWRDaERLVDZ1Vjk4byty?= =?utf-8?B?VTRPNkY4TmExc1ZEWXNXMzhKQjZXVW14WVZDaCthWFRRNGhTbFN5MXJmN2Ju?= =?utf-8?B?OFc5SUdCWXEwVWEwYjlqYzBDQ29XU1MrcTVrZ3JrTHdIYStleXhCSFBvUm5I?= =?utf-8?B?NE94WG5jSkdDOEc2bzhTQldoZFZYQXIzRXpBRWt4NmVOckZNWXUrN3ZzU0xM?= =?utf-8?B?Y2ZNNjdqUlpoU1cvaW5KdlpjMnBZdTZLcUcxcXZZSVQ2Yk4zWWkwS09wK0tB?= =?utf-8?B?bUZKOWFZNDYveFJCVldNdVl3YmZ0cS9aRkUyS0FtNDRLYnNJZzBNakJ2QVM0?= =?utf-8?B?VW1HK3RSZ0dMcDk1blVETjdUdXZ4NVU5dUM1US9VTG0vK0lYbGZwa0hZdkJn?= =?utf-8?B?L0dta2JIVzVUdFJyNHBnQldiQWV5UWpmRmxWMHhEcWI5RHU1dDFUWS9QS3Mx?= =?utf-8?B?Zm5LbEdvSXdqQTljK2dZSjVnYXBra1JpQXNmU1RHdy9rTHZjYzQvYXdJQml1?= =?utf-8?B?Z3BlN0xBa3hwRDdqL3M3aEZHM2F1MTZ2ZnZGblV3Q3BvVDU4UVUrVDJubWNj?= =?utf-8?B?MXAwQldZdEE2Q2J4aG9iaTl0aU55NTdkaGRieFkxRVlyMHNGUjdRejU3Mlh2?= =?utf-8?B?ZmVqNWgxM0VyOE4yWHhyNE5QYTV1aUJxMkQ3NWpqcndEUjVXbk1VUTVtRkJH?= =?utf-8?B?OHRrdGJDZXorVGMybWptMi8vaE94NEpSMCtjZHl2RDhHZHplTkk2bU5hU1Mz?= =?utf-8?B?Vkc1ZmNlRkZLR3M4N1Uva2grSkRKUEVyeXZWTHMxdnN2WW0zTENxMDJGeUFn?= =?utf-8?B?QThQSWZKaXZtWnhGaTdzZ1JSYmxoRDhJV0NKY24vejRHSnYvNEkrUERTK2lK?= =?utf-8?B?NmtmelRORUMwbXFuL3R4a01BWWp1TGhzVnBxZTNQN3JkSW1naEJYOUVHaDg2?= =?utf-8?B?bXBCTlNTZXlBM1JOamxDY1dCL2Z1SXRHWTloOUpCNXZhb2RpODdmaWdHWk5D?= =?utf-8?B?amxNNThEeHY0OEZVRlFNczNZM1RzbmJwZHBZK0xwTWRZVHBXejd5MlJvSld3?= =?utf-8?B?dFJRR0IwR2dZQlBRMFdCRkJnLzFlSktYT3o3V2FYaFFsZ2c9PQ==?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM4PR11MB8179.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WWw5Mzg2NTd5ODRiMUs4emRaUGg5MkJrNElSdXMyUHRwaHRNZmh4UDlZcXlK?= =?utf-8?B?TTBUNy9wbDJhdmJvdE1URUdCYzAwbU5vUmhEQysvTUlyWEJLMjhPaWhvSXc4?= =?utf-8?B?aHBSdUJ1WGp2Um00NEJyVnpyMnZmZm5BY3VuTE9ONWpSdXdHL0pDZzZmeXpH?= =?utf-8?B?Q0ZOMnlOakxlLzhXRVQ0OERERFh4b0UwNTRkV3ZjK1h1RlA2WTlTRlYyTWZ2?= =?utf-8?B?TElkMHVCSkdiNWxlcEI2RThvNVlkQ2tGMi9lNEJ2eEp1bFVoWUI3NHFTU3NF?= =?utf-8?B?dk43RkFRb2JsTzdVZGYwMU1Vb0ViZTVFZ2pZU3pubTNNWWlJb0Z3QWRxSG5w?= =?utf-8?B?aEJWNFI1ekVFTFRDR2F5VFJuWldhUHFmSjNyUnRVWmFlS3hISmVhQUd3OVhC?= =?utf-8?B?TG1xQkYyNWQxTjk4amhkektUUEdaNXE5bWl6KzBJQUVra1dQR05ITnNtdlp2?= =?utf-8?B?ZkwxcVBnL3Rlb3FoYi9abzFEYnVlQnI0TnMzbk1ORXFCazVhYUpENlVIck5T?= =?utf-8?B?T0IyTGNDc1pQNG4wOFgwYnhXdlc0WWU1T2FWL0pib0M0T3RDc2t3Ukh4TWkz?= =?utf-8?B?V2l5aU91N1NhekQzTGxrQ3k4SW5uYXJzUUNkQXl5Q0JrTG1zWXFnZitxc0ZK?= =?utf-8?B?R2lpTGV3OE5xcEE5dE41UmxNVkUwbnh1SklzcGNSZzlLdmxNMk5WRmdKeUkr?= =?utf-8?B?bURBRm1JNkpGRGZSMjZBWXpRWldnQjNaRFRNL2FOOURmWjJzajVwNmQvemFU?= =?utf-8?B?Qm94RFJKR0RsYndJL3BQaWZibVA3TGh6cndtTm4wMFpyYlBmVE80UmJseUdh?= =?utf-8?B?UCt0emwxeUZzSE1Zb0NmWjZjWElZb0RpL2VkS0NjTzc1cmwrMlY5MGxzWXFC?= =?utf-8?B?b1QrdlVLQlNyK3FIcVNVbnFQWStpeEVIQW9vaUpJMjFJYjVHVy9DUEF3YTVR?= =?utf-8?B?ZlNtc1hlbG0yNVpXdStsbXVGdDdGUjNwTHJURnpQOFQ3MlV0dW1xajlydms4?= =?utf-8?B?TnJMbVNPRGVhTElyVnIrc1ZKWk1FcVEvRTh2REJvN2U2bGF1UUlySUdPUW5m?= =?utf-8?B?R0N5em5sVWxWVVRmUnVaMmV5R2hrcjE1aTFENDM3WFg2MFhZd093ZXVQR1pw?= =?utf-8?B?RlEwNUlPVllBcUMyQ1J4ZjNvMXFhK3lIZmpaQXZINHhEQ0hJb0l0MFRlWm82?= =?utf-8?B?SVg2Z2liRkkrT2xXWlFsbTZsWVp5QUNNWUROSllvRlI2MjFRa0w5clZPSjBp?= =?utf-8?B?MFB3NmxxeDlnd2ZrU3pqS2E5NDFtdUpOVTVkNms0ekFtMGp2NTRFdmg5OEdi?= =?utf-8?B?UGNWdEtWbWVBeThUaE4xazNYZTFwMGIvYkxZU2RwOWhJRU4wNy9oeFQ5Nlhh?= =?utf-8?B?MDNoL0w5ZytpL1c5b1JSdGFVdk1yczJiVWwrVmJYUmNGeENQN0t6ZHJaTzlt?= =?utf-8?B?NmRnTmc0QnNBOVlGZXFkWG04amQ3VUlVQXF4SzN4NnNodERmbDZicFdXWFcw?= =?utf-8?B?Y2VYeVNsWVMvY2d3d09MR05JdFlaOGZpc1F5dFFBNU8yQnlkQUR6RzlJN2hH?= =?utf-8?B?SWthV0xiVFAxVTdJbm1yaGxOOCt1YW1sNTlNTUxXRGZ3b3hNdXNReENXblNG?= =?utf-8?B?OW9zYlQzam5hM2JMeE90V05sT0ljcTFDcFpDeTQ5aDBLSjZyYUZHWHZGV3Rp?= =?utf-8?B?ZWdwUE9QUVlUek5ueUpZMCtqc0NaZHhSWDdOSDZmWmFiQlVoNDVhK3RvZFlv?= =?utf-8?B?YUsxd1d1T2hZdmFPbDAyWnNiMzFQdUs1VjdmclgvVTZwYzhoUlNZV1F2dzhs?= =?utf-8?B?MzFaRHdmcHFpRGp6ODR5SGcyWDE0Wi9YYWlNcDlqbWpsMjgzUElobFpFaGpw?= =?utf-8?B?eGJjcHBQbUZuTXNrR2ZNWW55WnIva1dla0hTbWxhd2lBYjI2U3VwRzR6c2NX?= =?utf-8?B?Nm0va1prSUdBWkZ4NGdwbmpDa1Fia1FySnp2MG9CR0JpMHJDUnVGSjU4SVZB?= =?utf-8?B?SDBuOW5OeWt0eExLZzN1Rno0MXJhcDVvdUkvRlBuNExVcTNQTGI4M1VTc1FX?= =?utf-8?B?VlZGaGJ3dGx6YUlCK0JVeHVtcE9sYmg5bDg3YUttV2UvSDhWMjZrRlJaZEt0?= =?utf-8?B?NmhCN01hSVNjbjQwRGVsVGE3bXIvUTQybTJNcC9iMXRmdmh5SlRFN2JCQWxt?= =?utf-8?B?aVE9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB8179.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 011594e2-9455-40df-7e1a-08dca83067fc X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Jul 2024 20:21:43.6090 (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: yespQ7MO8NjNQcFKo9/EADpOqKrcsIEuttrqsguJLs0DRp0LWJmAQhnrqprcmk+nDzx3Ppk3j6Sz6h9WygVenw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR11MB7754 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" T24gU3VuLCAyMDI0LTA3LTA3IGF0IDE1OjQxIC0wNzAwLCBBc2h1dG9zaCBEaXhpdCB3cm90ZToN Cj4gRnJvbTogSGFyaXNoIENoZWdvbmRpIDxoYXJpc2guY2hlZ29uZGlAaW50ZWwuY29tPg0KPiAN Cj4gQSBuZXcgaGFyZHdhcmUgZmVhdHVyZSBmaXJzdCBpbnRyb2R1Y2VkIGluIFBWQyBnaXZlcyBj YXBhYmlsaXR5IHRvDQo+IHBlcmlvZGljYWxseSBzYW1wbGUgRVUgc3RhbGwgc3RhdGUgYW5kIHJl Y29yZCBjb3VudHMgZm9yIGRpZmZlcmVudCBzdGFsbA0KPiByZWFzb25zLCBvbiBhIHBlciBJUCBi YXNpcywgYWdncmVnYXRlIGFjcm9zcyBhbGwgRVVzIGluIGEgc3Vic2xpY2UgYW5kDQo+IHJlY29y ZCB0aGUgc2FtcGxlcyBpbiBhIGJ1ZmZlciBpbiBlYWNoIHN1YnNsaWNlLiBFdmVudHVhbGx5LCB0 aGUgYWdncmVnYXRlZA0KPiBkYXRhIGlzIHdyaXR0ZW4gb3V0IHRvIGEgYnVmZmVyIGluIHRoZSBt ZW1vcnkuIFRoaXMgZmVhdHVyZSBpcyBhbHNvDQo+IHN1cHBvcnRlZCBpbiBYRTIgYXJjaGl0ZWN0 dXJlIEdQVXMgLSBMTkwgYW5kIEJNRy4NCj4gDQo+IFVzZSBhbiBleGlzdGluZyBJT0NUTCBEUk1f SU9DVExfWEVfT0JTRVJWQVRJT04gYXMgaW50ZXJmYWNlIGludG8gdGhlIGRyaXZlcg0KPiBmcm9t IHRoZSB1c2VyIHNwYWNlIHRvIGRvIGluaXRpYWwgc2V0dXAgYW5kIG9idGFpbiBhIGZpbGUgZGVz Y3JpcHRvciBmb3INCj4gdGhlIEVVIHN0YWxsIGNvdW50ZXIgZGF0YSBzdHJlYW0uICBJbnB1dCBw YXJhbWV0ZXIgdG8gdGhlIElPQ1RMIGlzIGEgc3RydWN0DQo+IGRybV94ZV9vYnNlcnZhdGlvbl9w YXJhbSBpbiB3aGljaCBvYnNlcnZhdGlvbl90eXBlIHNob3VsZCBiZSBzZXQgdG8NCj4gRFJNX1hF X09CU0VSVkFUSU9OX1RZUEVfRVVfU1RBTEwsIG9ic2VydmF0aW9uX29wIHNob3VsZCBiZQ0KPiBE Uk1fWEVfT0JTRVJWQVRJT05fT1BfU1RSRUFNX09QRU4gYW5kIHBhcmFtIHNob3VsZCBwb2ludCB0 byBhIGNoYWluIG9mDQo+IGRybV94ZV9leHRfc2V0X3Byb3BlcnR5IHN0cnVjdHVyZXMgaW4gd2hp Y2ggZWFjaCBzdHJ1Y3R1cmUgaGFzIGEgcGFpciBvZg0KPiBwcm9wZXJ0eSBhbmQgdmFsdWUuIFRo ZSBFVSBzdGFsbCBzYW1wbGluZyBpbnB1dCBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIGluDQo+IGRy bV94ZV9ldV9zdGFsbF9wcm9wZXJ0eV9pZCBlbnVtLg0KPiANCj4gV2l0aCB0aGUgZmlsZSBkZXNj cmlwdG9yIG9idGFpbmVkIGZyb20gRFJNX0lPQ1RMX1hFX09CU0VSVkFUSU9OLCB1c2VyIHNwYWNl DQo+IGNhbiBlbmFibGUgYW5kIGRpc2FibGUgRVUgc3RhbGwgc2FtcGxpbmcgd2l0aA0KPiBEUk1f WEVfT0JTRVJWQVRJT05fSU9DVExfRU5BQkxFIGFuZCBEUk1fWEVfT0JTRVJWQVRJT05fSU9DVExf RElTQUJMRQ0KPiBJT0NUTHMuICBVc2VyIHNwYWNlIGNhbiBhbHNvIGNhbGwgcG9sbCgpIHRvIGNo ZWNrIGZvciBhdmFpbGFiaWxpdHkgb2YNCj4gZGF0YS4gVGhlIGRhdGEgY2FuIGJlIHJlYWQgd2l0 aCByZWFkKCkuIEVVIHN0YWxsIGRhdGEgY29uc2lzdHMgb2YgaGVhZGVyDQo+IGFuZCBkYXRhIHBh aXJzLiBUaGUgaGVhZGVyIGZvcm1hdCBpcyBkZWZpbmVkIGluIHN0cnVjdA0KPiBkcm1feGVfZXVf c3RhbGxfZGF0YV9oZWFkZXIuIElmIHRoZSB1c2VyIHNwYWNlIGRvZXNuJ3QgcmVhZCB0aGUgRVUg c3RhbGwNCj4gZGF0YSBmYXN0IGVub3VnaCwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgRVUgc3Rh bGwgZGF0YSBidWZmZXIgY2FuIGdldA0KPiBmaWxsZWQgdXAgYW5kIGlmIHRoZSBoYXJkd2FyZSB3 YW50cyB0byB3cml0ZSBkYXRhLCBpdCBzaW1wbHkgZHJvcHMgZGF0YSBkdWUNCj4gdG8gdW5hdmFp bGFibGUgYnVmZmVyIHNwYWNlLiBJbiB0aGF0IGNhc2UgaGFyZHdhcmUgc2V0cyBhIGJpdCBpbiBh DQo+IHJlZ2lzdGVyLiAgVGhlIGRyaXZlciBzZXRzIGEgZmxhZyBpbiB0aGUgRVUgc3RhbGwgZGF0 YSBoZWFkZXIgZmxhZ3MgZmllbGQNCj4gdG8gbGV0IHRoZSB1c2VyIHNwYWNlIGtub3cgdGhhdCB0 aGUgaGFyZHdhcmUgaGFzIGRyb3BwZWQgZGF0YS4NCj4gDQo+IHYyOiBSZW5hbWUgeGUgcGVyZiBs YXllciBhcyB4ZSBvYnNlcnZhdGlvbiBsYXllciAoQXNodXRvc2gpDQo+IA0KPiBTaWduZWQtb2Zm LWJ5OiBIYXJpc2ggQ2hlZ29uZGkgPGhhcmlzaC5jaGVnb25kaUBpbnRlbC5jb20+DQo+IFNpZ25l ZC1vZmYtYnk6IEFzaHV0b3NoIERpeGl0IDxhc2h1dG9zaC5kaXhpdEBpbnRlbC5jb20+DQo+IC0t LQ0KPiAgZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAgMSAr DQo+ICBkcml2ZXJzL2dwdS9kcm0veGUvcmVncy94ZV9ldV9zdGFsbF9yZWdzLmggfCAgIDMzICsN Cj4gIGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ldXN0YWxsX2NudHIuYyAgICAgICB8IDEwMDUgKysr KysrKysrKysrKysrKysrKysNCj4gIGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ldXN0YWxsX2NudHIu aCAgICAgICB8ICAgNjIgKysNCj4gIGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndC5jICAgICAgICAg ICAgICAgICB8ICAgIDMgKw0KPiAgZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0X3RvcG9sb2d5LmMg ICAgICAgIHwgICAgOSArDQo+ICBkcml2ZXJzL2dwdS9kcm0veGUveGVfZ3RfdG9wb2xvZ3kuaCAg ICAgICAgfCAgICAzICsNCj4gIGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF90eXBlcy5oICAgICAg ICAgICB8ICAgIDQgKw0KPiAgZHJpdmVycy9ncHUvZHJtL3hlL3hlX29ic2VydmF0aW9uLmMgICAg ICAgIHwgICAxNCArDQo+ICBkcml2ZXJzL2dwdS9kcm0veGUveGVfdHJhY2UuaCAgICAgICAgICAg ICAgfCAgIDM1ICsNCj4gIGluY2x1ZGUvdWFwaS9kcm0veGVfZHJtLmggICAgICAgICAgICAgICAg ICB8ICAgNzcgKysNCj4gIDExIGZpbGVzIGNoYW5nZWQsIDEyNDYgaW5zZXJ0aW9ucygrKQ0KPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZS9yZWdzL3hlX2V1X3N0YWxsX3Jl Z3MuaA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ldXN0YWxs X2NudHIuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ldXN0 YWxsX2NudHIuaA0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZQ0KPiBpbmRleCAwZWIwYWNjNGYxOTguLjEz ZDkzNWFjNDBiMyAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlDQo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZQ0KPiBAQCAtNTQsNiArNTQsNyBAQCB4 ZS15ICs9IHhlX2JiLm8gXA0KPiAgCXhlX2RldmljZV9zeXNmcy5vIFwNCj4gIAl4ZV9kbWFfYnVm Lm8gXA0KPiAgCXhlX2RybV9jbGllbnQubyBcDQo+ICsJeGVfZXVzdGFsbF9jbnRyLm8gXA0KPiAg CXhlX2V4ZWMubyBcDQo+ICAJeGVfZXhlY2xpc3QubyBcDQo+ICAJeGVfZXhlY19xdWV1ZS5vIFwN Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS9yZWdzL3hlX2V1X3N0YWxsX3JlZ3Mu aCBiL2RyaXZlcnMvZ3B1L2RybS94ZS9yZWdzL3hlX2V1X3N0YWxsX3JlZ3MuaA0KPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmM3MGYzNWY4MmNjNQ0KPiAtLS0g L2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS9yZWdzL3hlX2V1X3N0YWxsX3Jl Z3MuaA0KPiBAQCAtMCwwICsxLDMzIEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog TUlUICovDQo+ICsvKg0KPiArICogQ29weXJpZ2h0IMKpIDIwMjQgSW50ZWwgQ29ycG9yYXRpb24N Cj4gKyAqLw0KPiArDQo+ICsjaWZuZGVmIF9YRV9FVV9TVEFMTF9SRUdTX0hfDQo+ICsjZGVmaW5l IF9YRV9FVV9TVEFMTF9SRUdTX0hfDQo+ICsNCj4gKyNpbmNsdWRlICJyZWdzL3hlX3JlZ19kZWZz LmgiDQo+ICsNCj4gKyNkZWZpbmUgWEVIUENfRVVTVEFMTF9CQVNFCQkJWEVfUkVHX01DUigweGU1 MjApDQo+ICsjZGVmaW5lICAgWEVIUENfRVVTVEFMTF9CQVNFX0JVRl9BRERSCQlSRUdfR0VOTUFT SygzMSwgNikNCj4gKyNkZWZpbmUgICBYRUhQQ19FVVNUQUxMX0JBU0VfRFNTX0JVRl9TWgkJUkVH X0dFTk1BU0soNSwgMykNCj4gKyNkZWZpbmUgICBYRUhQQ19FVVNUQUxMX0JBU0VfRU5BQkxFX1NB TVBMSU5HCVJFR19CSVQoMSkNCj4gKyNkZWZpbmUgICBYRUhQQ19FVVNUQUxMX0JBU0VfRVZJQ1Rf VERMX1NUQUxMX0JVRglSRUdfQklUKDApDQo+ICsNCj4gKyNkZWZpbmUgWEVIUENfRVVTVEFMTF9C QVNFX1VQUEVSCQlYRV9SRUdfTUNSKDB4ZTUyNCkNCj4gKw0KPiArI2RlZmluZSBYRUhQQ19FVVNU QUxMX1JFUE9SVAkJCVhFX1JFR19NQ1IoMHhlNTI4KQ0KPiArI2RlZmluZSAgIFhFSFBDX0VVU1RB TExfUkVQT1JUX1dSSVRFX1BUUl9NQVNLCVJFR19HRU5NQVNLKDE1LCAyKQ0KPiArI2RlZmluZSAg IFhFSFBDX0VVU1RBTExfUkVQT1JUX1dSSVRFX1BUUl9TSElGVAkyDQo+ICsjZGVmaW5lICAgWEVI UENfRVVTVEFMTF9SRVBPUlRfT1ZFUkZMT1dfRFJPUAlSRUdfQklUKDEpDQo+ICsNCj4gKyNkZWZp bmUgWEVIUENfRVVTVEFMTF9SRVBPUlQxCQkJWEVfUkVHX01DUigweGU1MmMpDQo+ICsjZGVmaW5l ICAgWEVIUENfRVVTVEFMTF9SRVBPUlQxX01BU0tfU0hJRlQJMTYNCj4gKyNkZWZpbmUgICBYRUhQ Q19FVVNUQUxMX1JFUE9SVDFfUkVBRF9QVFJfTUFTSwlSRUdfR0VOTUFTSygxNSwgMikNCj4gKyNk ZWZpbmUgICBYRUhQQ19FVVNUQUxMX1JFUE9SVDFfUkVBRF9QVFJfU0hJRlQJMg0KPiArDQo+ICsj ZGVmaW5lIFhFSFBDX0VVU1RBTExfQ1RSTAkJCVhFX1JFR19NQ1IoMHhlNTNjKQ0KPiArI2RlZmlu ZSAgIEVVU1RBTExfTU9DUwkJCQlSRUdfR0VOTUFTSyg5LCAzKQ0KPiArI2RlZmluZSAgIEVVU1RB TExfU0FNUExFX1JBVEUJCQlSRUdfR0VOTUFTSygyLCAwKQ0KPiArDQo+ICsjZW5kaWYNCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9ldXN0YWxsX2NudHIuYyBiL2RyaXZlcnMv Z3B1L2RybS94ZS94ZV9ldXN0YWxsX2NudHIuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBp bmRleCAwMDAwMDAwMDAwMDAuLjE4MzYzOGY4ZTFlMg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9ldXN0YWxsX2NudHIuYw0KPiBAQCAtMCwwICsxLDEwMDUg QEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQNCj4gKy8qDQo+ICsgKiBDb3B5 cmlnaHQgwqkgMjAyNCBJbnRlbCBDb3Jwb3JhdGlvbg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRl IDxsaW51eC9hbm9uX2lub2Rlcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L25vc3BlYy5oPg0KPiAr I2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPg0KPiAr I2luY2x1ZGUgInhlX2d0LmgiDQo+ICsjaW5jbHVkZSAieGVfYm8uaCINCj4gKyNpbmNsdWRlICJ4 ZV9wbS5oIg0KPiArI2luY2x1ZGUgInhlX3RyYWNlLmgiDQo+ICsjaW5jbHVkZSAieGVfZGV2aWNl LmgiDQo+ICsjaW5jbHVkZSAieGVfZ3RfbWNyLmgiDQo+ICsjaW5jbHVkZSAieGVfZ3RfdG9wb2xv Z3kuaCINCj4gKyNpbmNsdWRlICJ4ZV9ldXN0YWxsX2NudHIuaCINCj4gKyNpbmNsdWRlICJ4ZV9m b3JjZV93YWtlLmgiDQo+ICsjaW5jbHVkZSAicmVncy94ZV9ndF9yZWdzLmgiDQo+ICsNCj4gKyNk ZWZpbmUgQ0FDSEVMSU5FX0JZVEVTIDY0DQo+ICsjZGVmaW5lIERFRkFVTFRfUE9MTF9GUkVRVUVO Q1lfSFogMTAwDQo+ICsjZGVmaW5lIERFRkFVTFRfUE9MTF9QRVJJT0RfTlMgKE5TRUNfUEVSX1NF QyAvIERFRkFVTFRfUE9MTF9GUkVRVUVOQ1lfSFopDQo+ICsjZGVmaW5lIE1JU1NJTkdfQ0FTRSh4 KSBXQVJOKDEsICJNaXNzaW5nIGNhc2UgKCVzID09ICVsZClcbiIsIFwNCj4gKwkJCSAgICAgX19z dHJpbmdpZnkoeCksIChsb25nKSh4KSkNCj4gKw0KPiArZXh0ZXJuIHUzMiB4ZV9vYnNlcnZhdGlv bl9wYXJhbm9pZDsNCj4gKw0KPiArLyoqDQo+ICsgKiBzdHJ1Y3QgZXVfc3RhbGxfb3Blbl9wcm9w ZXJ0aWVzDQo+ICsgKg0KPiArICogQGV1X3N0YWxsX3NhbXBsaW5nX3JhdGU6IEhhcmR3YXJlIEVV IHN0YWxsIHNhbXBsaW5nIHJhdGUuDQo+ICsgKiBAZXZlbnRfcmVwb3J0X2NvdW50OiBNaW5pbXVt IG5vIG9mIEVVIHN0YWxsIGRhdGEgcm93cyBmb3IgcG9sbCB0byBzZXQgUE9MTElOLg0KPiArICog QGV1X3N0YWxsX2J1Zl9zejogUGVyIHN1YnNsaWNlIEVVIHN0YWxsIGRhdGEgYnVmZmVyIHNpemUu DQo+ICsgKiBAb3Blbl9kaXNhYmxlZDogU2hvdWxkIEVVIHN0YWxsIHNhbXBsaW5nIGJlIGRpc2Fi bGVkIGF0IG9wZW4uDQo+ICsgKiBAcG9sbF9wZXJpb2Q6IFRoZSBwZXJpb2QgaW4gbmFub3NlY29u ZHMgYXQgd2hpY2ggdGhlIENQVSB3aWxsIGNoZWNrIGZvcg0KPiArICoJCSBFVSBzdGFsbCBkYXRh IGluIHRoZSBidWZmZXIuDQo+ICsgKiBAZ3RfaWQ6IEdUIElEIG9mIHRoZSBHVCBvbiB3aGljaCBF VSBzdGFsbCBkYXRhIHdpbGwgYmUgY2FwdHVyZWQuDQo+ICsgKi8NCj4gK3N0cnVjdCBldV9zdGFs bF9vcGVuX3Byb3BlcnRpZXMgew0KPiArCXU4IGV1X3N0YWxsX3NhbXBsaW5nX3JhdGU7DQo+ICsJ dTMyIGV2ZW50X3JlcG9ydF9jb3VudDsNCj4gKwl1MzIgZXVfc3RhbGxfYnVmX3N6Ow0KPiArCWJv b2wgb3Blbl9kaXNhYmxlZDsNCj4gKwl1NjQgcG9sbF9wZXJpb2Q7DQo+ICsJdTggZ3RfaWQ7DQo+ ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIG51bV9kYXRhX3Jvd3MgLSBSZXR1cm4gdGhlIG51bWJl ciBvZiBFVSBzdGFsbCBkYXRhIHJvd3Mgb2YgNjRCIGVhY2gNCj4gKyAqCQkgICBmb3IgYSBnaXZl biBkYXRhIHNpemUuDQo+ICsgKg0KPiArICogQGRhdGFfc2l6ZTogRVUgc3RhbGwgZGF0YSBzaXpl DQo+ICsgKi8NCj4gK3N0YXRpYyBpbmxpbmUgdTMyDQo+ICtudW1fZGF0YV9yb3dzKHUzMiBkYXRh X3NpemUpDQo+ICt7DQo+ICsJcmV0dXJuIChkYXRhX3NpemUgPj4gNik7DQo+ICt9DQo+ICsNCj4g K3ZvaWQgeGVfZXVzdGFsbF9jbnRyX2luaXQoc3RydWN0IHhlX2d0ICpndCkNCj4gK3sNCj4gKwlt dXRleF9pbml0KCZndC0+ZXVfc3RhbGxfY250ci5sb2NrKTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGludCBzZXRfcHJvcF9ldV9zdGFsbF9idWZmZXJfc2l6ZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwg dTY0IHZhbHVlLA0KPiArCQkJCQkgc3RydWN0IGV1X3N0YWxsX29wZW5fcHJvcGVydGllcyAqcHJv cHMpDQo+ICt7DQo+ICsJaWYgKHZhbHVlICE9IFNaXzEyOEsgJiYNCj4gKwkgICAgdmFsdWUgIT0g U1pfMjU2SyAmJg0KPiArCSAgICB2YWx1ZSAhPSBTWl81MTJLKSB7DQo+ICsJCWRybV9kYmcoJnhl LT5kcm0sICJJbnZhbGlkIEVVIHN0YWxsIGJ1ZmZlciBzaXplICVsbHVcbiIsIHZhbHVlKTsNCj4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArCXByb3BzLT5ldV9zdGFsbF9idWZfc3ogPSB2 YWx1ZTsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBzZXRfcHJvcF9l dV9zdGFsbF9zYW1wbGluZ19yYXRlKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1NjQgdmFsdWUsDQo+ ICsJCQkJCSAgIHN0cnVjdCBldV9zdGFsbF9vcGVuX3Byb3BlcnRpZXMgKnByb3BzKQ0KPiArew0K PiArCWlmICh2YWx1ZSA9PSAwIHx8IHZhbHVlID4gNykgew0KPiArCQlkcm1fZGJnKCZ4ZS0+ZHJt LCAiSW52YWxpZCBFVSBzdGFsbCBzYW1wbGluZyByYXRlICVsbHVcbiIsIHZhbHVlKTsNCj4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArCXByb3BzLT5ldV9zdGFsbF9zYW1wbGluZ19yYXRl ID0gdmFsdWU7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgc2V0X3By b3BfZXVfc3RhbGxfcG9sbF9wZXJpb2Qoc3RydWN0IHhlX2RldmljZSAqeGUsIHU2NCB2YWx1ZSwN Cj4gKwkJCQkJIHN0cnVjdCBldV9zdGFsbF9vcGVuX3Byb3BlcnRpZXMgKnByb3BzKQ0KPiArew0K PiArCWlmICh2YWx1ZSA8IDEwMDAwMCAvKiAxMDB1cyAqLykgew0KPiArCQlkcm1fZGJnKCZ4ZS0+ ZHJtLCAiRVUgc3RhbGwgZGF0YSBwb2xsIHBlcmlvZCAlbGx1bnMgbGVzcyB0aGFuIDEwMHVzXG4i LCB2YWx1ZSk7DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKwlwcm9wcy0+cG9sbF9w ZXJpb2QgPSB2YWx1ZTsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBz ZXRfcHJvcF9ldV9zdGFsbF9ldmVudF9yZXBvcnRfY291bnQoc3RydWN0IHhlX2RldmljZSAqeGUs IHU2NCB2YWx1ZSwNCj4gKwkJCQkJCXN0cnVjdCBldV9zdGFsbF9vcGVuX3Byb3BlcnRpZXMgKnBy b3BzKQ0KPiArew0KPiArCWlmICh2YWx1ZSA9PSAwKSB7DQo+ICsJCWRybV9kYmcoJnhlLT5kcm0s ICJJbnZhbGlkIEVVIHN0YWxsIHBvbGwgZXZlbnQgcmVwb3J0IGNvdW50ICVsbHVcbiIsIHZhbHVl KTsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArCXByb3BzLT5ldmVudF9yZXBvcnRf Y291bnQgPSAodTMyKXZhbHVlOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW50IHNldF9wcm9wX2V1X3N0YWxsX2d0X2lkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1NjQgdmFs dWUsDQo+ICsJCQkJICAgc3RydWN0IGV1X3N0YWxsX29wZW5fcHJvcGVydGllcyAqcHJvcHMpDQo+ ICt7DQo+ICsJaWYgKHZhbHVlID49IFhFX01BWF9HVF9QRVJfVElMRSkgew0KPiArCQlkcm1fZGJn KCZ4ZS0+ZHJtLCAiSW52YWxpZCBHVCBJRCAlbGx1IGZvciBFVSBzdGFsbCBzYW1wbGluZ1xuIiwg dmFsdWUpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsJcHJvcHMtPmd0X2lkID0g KHU4KXZhbHVlOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHNldF9w cm9wX2V1X3N0YWxsX29wZW5fZGlzYWJsZWQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU2NCB2YWx1 ZSwNCj4gKwkJCQkJICAgc3RydWN0IGV1X3N0YWxsX29wZW5fcHJvcGVydGllcyAqcHJvcHMpDQo+ ICt7DQo+ICsJcHJvcHMtPm9wZW5fZGlzYWJsZWQgPSB2YWx1ZTsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArdHlwZWRlZiBpbnQgKCpzZXRfZXVfc3RhbGxfcHJvcGVydHlfZm4pKHN0cnVj dCB4ZV9kZXZpY2UgKnhlLCB1NjQgdmFsdWUsDQo+ICsJCQkJCXN0cnVjdCBldV9zdGFsbF9vcGVu X3Byb3BlcnRpZXMgKnByb3BzKTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHNldF9ldV9zdGFsbF9w cm9wZXJ0eV9mbiB4ZV9zZXRfZXVfc3RhbGxfcHJvcGVydHlfZnVuY3NbXSA9IHsNCj4gKwlbRFJN X1hFX0VVX1NUQUxMX1BST1BfQlVGX1NaXSA9IHNldF9wcm9wX2V1X3N0YWxsX2J1ZmZlcl9zaXpl LA0KPiArCVtEUk1fWEVfRVVfU1RBTExfUFJPUF9TQU1QTEVfUkFURV0gPSBzZXRfcHJvcF9ldV9z dGFsbF9zYW1wbGluZ19yYXRlLA0KPiArCVtEUk1fWEVfRVVfU1RBTExfUFJPUF9QT0xMX1BFUklP RF0gPSBzZXRfcHJvcF9ldV9zdGFsbF9wb2xsX3BlcmlvZCwNCj4gKwlbRFJNX1hFX0VVX1NUQUxM X1BST1BfRVZFTlRfUkVQT1JUX0NPVU5UXSA9IHNldF9wcm9wX2V1X3N0YWxsX2V2ZW50X3JlcG9y dF9jb3VudCwNCj4gKwlbRFJNX1hFX0VVX1NUQUxMX1BST1BfR1RfSURdID0gc2V0X3Byb3BfZXVf c3RhbGxfZ3RfaWQsDQo+ICsJW0RSTV9YRV9FVV9TVEFMTF9QUk9QX09QRU5fRElTQUJMRURdID0g c2V0X3Byb3BfZXVfc3RhbGxfb3Blbl9kaXNhYmxlZCwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBp bnQgeGVfZXVfc3RhbGxfdXNlcl9leHRfc2V0X3Byb3BlcnR5KHN0cnVjdCB4ZV9kZXZpY2UgKnhl LCB1NjQgZXh0ZW5zaW9uLA0KPiArCQkJCQkgICAgIHN0cnVjdCBldV9zdGFsbF9vcGVuX3Byb3Bl cnRpZXMgKnByb3BzKQ0KPiArew0KPiArCXU2NCBfX3VzZXIgKmFkZHJlc3MgPSB1NjRfdG9fdXNl cl9wdHIoZXh0ZW5zaW9uKTsNCj4gKwlzdHJ1Y3QgZHJtX3hlX2V4dF9zZXRfcHJvcGVydHkgZXh0 Ow0KPiArCWludCBlcnI7DQo+ICsJdTMyIGlkeDsNCj4gKw0KPiArCWVyciA9IF9fY29weV9mcm9t X3VzZXIoJmV4dCwgYWRkcmVzcywgc2l6ZW9mKGV4dCkpOw0KPiArCWlmIChYRV9JT0NUTF9EQkco eGUsIGVycikpDQo+ICsJCXJldHVybiAtRUZBVUxUOw0KPiArDQo+ICsJaWYgKFhFX0lPQ1RMX0RC Ryh4ZSwgZXh0LnByb3BlcnR5ID49IEFSUkFZX1NJWkUoeGVfc2V0X2V1X3N0YWxsX3Byb3BlcnR5 X2Z1bmNzKSkgfHwNCj4gKwkgICAgWEVfSU9DVExfREJHKHhlLCBleHQucGFkKSkNCj4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlpZHggPSBhcnJheV9pbmRleF9ub3NwZWMoZXh0LnByb3Bl cnR5LCBBUlJBWV9TSVpFKHhlX3NldF9ldV9zdGFsbF9wcm9wZXJ0eV9mdW5jcykpOw0KPiArCXJl dHVybiB4ZV9zZXRfZXVfc3RhbGxfcHJvcGVydHlfZnVuY3NbaWR4XSh4ZSwgZXh0LnZhbHVlLCBw cm9wcyk7DQo+ICt9DQo+ICsNCj4gK3R5cGVkZWYgaW50ICgqeGVfZXVfc3RhbGxfdXNlcl9leHRl bnNpb25fZm4pKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1NjQgZXh0ZW5zaW9uLA0KPiArCQkJCQkg ICAgIHN0cnVjdCBldV9zdGFsbF9vcGVuX3Byb3BlcnRpZXMgKnByb3BzKTsNCj4gK3N0YXRpYyBj b25zdCB4ZV9ldV9zdGFsbF91c2VyX2V4dGVuc2lvbl9mbiB4ZV9ldV9zdGFsbF91c2VyX2V4dGVu c2lvbl9mdW5jc1tdID0gew0KPiArCVtEUk1fWEVfRVVfU1RBTExfRVhURU5TSU9OX1NFVF9QUk9Q RVJUWV0gPSB4ZV9ldV9zdGFsbF91c2VyX2V4dF9zZXRfcHJvcGVydHksDQo+ICt9Ow0KPiArDQo+ ICtzdGF0aWMgaW50IHhlX2V1X3N0YWxsX3VzZXJfZXh0ZW5zaW9ucyhzdHJ1Y3QgeGVfZGV2aWNl ICp4ZSwgdTY0IGV4dGVuc2lvbiwgaW50IGV4dF9udW1iZXIsDQo+ICsJCQkJICAgICAgIHN0cnVj dCBldV9zdGFsbF9vcGVuX3Byb3BlcnRpZXMgKnByb3BzKQ0KPiArew0KPiArCXU2NCBfX3VzZXIg KmFkZHJlc3MgPSB1NjRfdG9fdXNlcl9wdHIoZXh0ZW5zaW9uKTsNCj4gKwlzdHJ1Y3QgZHJtX3hl X3VzZXJfZXh0ZW5zaW9uIGV4dDsNCj4gKwlpbnQgZXJyOw0KPiArCXUzMiBpZHg7DQo+ICsNCj4g KwlpZiAoWEVfSU9DVExfREJHKHhlLCBleHRfbnVtYmVyID49IERSTV9YRV9FVV9TVEFMTF9QUk9Q X01BWCkpDQo+ICsJCXJldHVybiAtRTJCSUc7DQo+ICsNCj4gKwllcnIgPSBfX2NvcHlfZnJvbV91 c2VyKCZleHQsIGFkZHJlc3MsIHNpemVvZihleHQpKTsNCj4gKwlpZiAoWEVfSU9DVExfREJHKHhl LCBlcnIpKQ0KPiArCQlyZXR1cm4gLUVGQVVMVDsNCj4gKw0KPiArCWlmIChYRV9JT0NUTF9EQkco eGUsIGV4dC5wYWQpIHx8DQo+ICsJICAgIFhFX0lPQ1RMX0RCRyh4ZSwgZXh0Lm5hbWUgPj0gQVJS QVlfU0laRSh4ZV9ldV9zdGFsbF91c2VyX2V4dGVuc2lvbl9mdW5jcykpKQ0KPiArCQlyZXR1cm4g LUVJTlZBTDsNCj4gKw0KPiArCWlkeCA9IGFycmF5X2luZGV4X25vc3BlYyhleHQubmFtZSwgQVJS QVlfU0laRSh4ZV9ldV9zdGFsbF91c2VyX2V4dGVuc2lvbl9mdW5jcykpOw0KPiArCWVyciA9IHhl X2V1X3N0YWxsX3VzZXJfZXh0ZW5zaW9uX2Z1bmNzW2lkeF0oeGUsIGV4dGVuc2lvbiwgcHJvcHMp Ow0KPiArCWlmIChYRV9JT0NUTF9EQkcoeGUsIGVycikpDQo+ICsJCXJldHVybiBlcnI7DQo+ICsN Cj4gKwlpZiAoZXh0Lm5leHRfZXh0ZW5zaW9uKQ0KPiArCQlyZXR1cm4geGVfZXVfc3RhbGxfdXNl cl9leHRlbnNpb25zKHhlLCBleHQubmV4dF9leHRlbnNpb24sICsrZXh0X251bWJlciwgcHJvcHMp Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogYnVmX2RhdGFf c2l6ZSAtIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgY2lyY3VsYXIgYnVmZmVy DQo+ICsgKgkJICAgb2Ygc2l6ZSBidWZfc2l6ZSBnaXZlbiB0aGUgcmVhZCBhbmQgd3JpdGUgcG9p bnRlcnMNCj4gKyAqCQkgICBpbnRvIHRoZSBidWZmZXIuDQo+ICsgKg0KPiArICogQHJlYWRfcHRy OiBSZWFkIHBvaW50ZXIuIFVzZXMgYW4gYWRkaXRpb25hbCBvdmVyZmxvdyBiaXQNCj4gKyAqIEB3 cml0ZV9wdHI6IFdyaXRlIHBvaW50ZXIuIFVzZXMgYW4gYWRkaXRpb25hbCBvdmVyZmxvdyBiaXQN Cj4gKyAqDQo+ICsgKiBSZXR1cm5zOiBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YSBpbiB0aGUgYnVm ZmVyDQo+ICsgKi8NCj4gK3N0YXRpYyB1MzINCj4gK2J1Zl9kYXRhX3NpemUoc2l6ZV90IGJ1Zl9z aXplLCB1MzIgcmVhZF9wdHIsIHUzMiB3cml0ZV9wdHIpDQo+ICt7DQo+ICsJdTMyIHJlYWRfb2Zm c2V0LCB3cml0ZV9vZmZzZXQsIHNpemUgPSAwOw0KPiArDQo+ICsJcmVhZF9vZmZzZXQgPSByZWFk X3B0ciAmIChidWZfc2l6ZSAtIDEpOw0KPiArCXdyaXRlX29mZnNldCA9IHdyaXRlX3B0ciAmIChi dWZfc2l6ZSAtIDEpOw0KPiArDQo+ICsJaWYgKHdyaXRlX29mZnNldCA+IHJlYWRfb2Zmc2V0KQ0K PiArCQlzaXplID0gd3JpdGVfb2Zmc2V0IC0gcmVhZF9vZmZzZXQ7DQo+ICsJZWxzZQ0KPiArCQlz aXplID0gYnVmX3NpemUgLSByZWFkX29mZnNldCArIHdyaXRlX29mZnNldDsNCj4gKw0KPiArCXJl dHVybiBzaXplOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGV1X3N0YWxsX2NudHJfYnVmX2No ZWNrIC0gY2hlY2sgZm9yIGRhdGEgaW4gdGhlIEVVIHN0YWxsIGNvdW50ZXIgYnVmZmVyDQo+ICsg Kg0KPiArICogQHN0cmVhbTogeGUgRVUgc3RhbGwgZGF0YSBzdHJlYW0gaW5zdGFuY2UNCj4gKyAq DQo+ICsgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBFVSBzdGFsbCBidWZmZXIgY29udGFpbnMgbWlu aW11bSBzdGFsbCBkYXRhIGFzDQo+ICsgKgkgICAgc3BlY2lmaWVkIGJ5IHRoZSBldmVudCByZXBv cnQgY291bnQsIGVsc2UgZmFsc2UuDQo+ICsgKi8NCj4gK3N0YXRpYyBib29sDQo+ICtldV9zdGFs bF9jbnRyX2J1Zl9jaGVjayhzdHJ1Y3QgeGVfZXVfc3RhbGxfY250cl9zdHJlYW0gKnN0cmVhbSkN Cj4gK3sNCj4gKwl1MzIgcmVhZF9wdHJfcmVnLCByZWFkX3B0ciwgd3JpdGVfcHRyX3JlZywgd3Jp dGVfcHRyLCB0b3RhbF9kYXRhID0gMDsNCj4gKwl1MzIgYnVmX3NpemUgPSBzdHJlYW0tPnBlcl9k c3NfYnVmX3NpemU7DQo+ICsJc3RydWN0IHhlX2d0ICpndCA9IHN0cmVhbS0+Z3Q7DQo+ICsJc3Ry dWN0IHBlcl9kc3NfYnVmICpkc3NfYnVmOw0KPiArCWJvb2wgbWluX2RhdGFfcHJlc2VudDsNCj4g Kwl1MTYgZ3JvdXAsIGluc3RhbmNlOw0KPiArCWludCBkc3M7DQo+ICsNCj4gKwltaW5fZGF0YV9w cmVzZW50ID0gZmFsc2U7DQo+ICsJZm9yX2VhY2hfZHNzX3N0ZWVyaW5nKGRzcywgZ3QsIGdyb3Vw LCBpbnN0YW5jZSkgew0KPiArCQlkc3NfYnVmID0gJnN0cmVhbS0+ZHNzX2J1Zltkc3NdOw0KPiAr CQltdXRleF9sb2NrKCZkc3NfYnVmLT5sb2NrKTsNCj4gKwkJcmVhZF9wdHIgPSBkc3NfYnVmLT5y ZWFkOw0KPiArCQl3cml0ZV9wdHJfcmVnID0geGVfZ3RfbWNyX3VuaWNhc3RfcmVhZChndCwgWEVI UENfRVVTVEFMTF9SRVBPUlQsDQo+ICsJCQkJCQkgICAgICAgZ3JvdXAsIGluc3RhbmNlKTsNCj4g KwkJd3JpdGVfcHRyID0gd3JpdGVfcHRyX3JlZyAmIFhFSFBDX0VVU1RBTExfUkVQT1JUX1dSSVRF X1BUUl9NQVNLOw0KPiArCQl3cml0ZV9wdHIgPDw9ICg2IC0gWEVIUENfRVVTVEFMTF9SRVBPUlRf V1JJVEVfUFRSX1NISUZUKTsNCj4gKwkJd3JpdGVfcHRyICY9ICgoYnVmX3NpemUgPDwgMSkgLSAx KTsNCj4gKwkJLyoNCj4gKwkJICogSWYgdGhlcmUgaGFzIGJlZW4gYW4gZW5naW5lIHJlc2V0IGJ5 IEd1QywgYW5kIEd1QyBkb2Vzbid0IHJlc3RvcmUNCj4gKwkJICogdGhlIHJlYWQgYW5kIHdyaXRl IHBvaW50ZXIgcmVnaXN0ZXJzLCB0aGUgcG9pbnRlcnMgd2lsbCByZXNldCB0byAwLg0KPiArCQkg KiBJZiBzbywgdXBkYXRlIHRoZSBjYWNoZWQgcmVhZCBwb2ludGVyLg0KPiArCQkgKi8NCj4gKwkJ aWYgKHVubGlrZWx5KCh3cml0ZV9wdHIgPCByZWFkX3B0cikgJiYNCj4gKwkJCSAgICAgKChyZWFk X3B0ciAmIGJ1Zl9zaXplKSA9PSAod3JpdGVfcHRyICYgYnVmX3NpemUpKSkpIHsNCj4gKwkJCXJl YWRfcHRyX3JlZyA9IHhlX2d0X21jcl91bmljYXN0X3JlYWQoZ3QsIFhFSFBDX0VVU1RBTExfUkVQ T1JUMSwNCj4gKwkJCQkJCQkgICAgICBncm91cCwgaW5zdGFuY2UpOw0KPiArCQkJcmVhZF9wdHIg PSByZWFkX3B0cl9yZWcgJiBYRUhQQ19FVVNUQUxMX1JFUE9SVDFfUkVBRF9QVFJfTUFTSzsNCj4g KwkJCXJlYWRfcHRyIDw8PSAoNiAtIFhFSFBDX0VVU1RBTExfUkVQT1JUMV9SRUFEX1BUUl9TSElG VCk7DQo+ICsJCQlyZWFkX3B0ciAmPSAoKGJ1Zl9zaXplIDw8IDEpIC0gMSk7DQo+ICsJCQlkc3Nf YnVmLT5yZWFkID0gcmVhZF9wdHI7DQo+ICsJCX0NCj4gKwkJaWYgKCh3cml0ZV9wdHIgIT0gcmVh ZF9wdHIpICYmICFtaW5fZGF0YV9wcmVzZW50KSB7DQo+ICsJCQl0b3RhbF9kYXRhICs9IGJ1Zl9k YXRhX3NpemUoYnVmX3NpemUsIHJlYWRfcHRyLCB3cml0ZV9wdHIpOw0KPiArCQkJLyoNCj4gKwkJ CSAqIENoZWNrIGlmIHRoZXJlIGFyZSBhdCBsZWFzdCBtaW5pbXVtIG51bWJlciBvZiBzdGFsbCBk YXRhDQo+ICsJCQkgKiByb3dzIGZvciBwb2xsKCkgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZGF0YSBp cyBwcmVzZW50Lg0KPiArCQkJICogRWFjaCBzdGFsbCBkYXRhIHJvdyBpcyA2NEIgKGNhY2hlbGlu ZSBzaXplKS4NCj4gKwkJCSAqLw0KPiArCQkJaWYgKG51bV9kYXRhX3Jvd3ModG90YWxfZGF0YSkg Pj0gc3RyZWFtLT5ldmVudF9yZXBvcnRfY291bnQpDQo+ICsJCQkJbWluX2RhdGFfcHJlc2VudCA9 IHRydWU7DQo+ICsJCX0NCj4gKwkJaWYgKHdyaXRlX3B0cl9yZWcgJiBYRUhQQ19FVVNUQUxMX1JF UE9SVF9PVkVSRkxPV19EUk9QKQ0KPiArCQkJZHNzX2J1Zi0+bGluZV9kcm9wID0gdHJ1ZTsNCj4g KwkJZHNzX2J1Zi0+d3JpdGUgPSB3cml0ZV9wdHI7DQo+ICsJCW11dGV4X3VubG9jaygmZHNzX2J1 Zi0+bG9jayk7DQo+ICsJfQ0KPiArCXJldHVybiBtaW5fZGF0YV9wcmVzZW50Ow0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZA0KPiArY2xlYXJfZHJvcHBlZF9ldmljdGlvbl9saW5lX2JpdChzdHJ1 Y3QgeGVfZ3QgKmd0LCB1OCBzLCB1OCBzcykNCj4gK3sNCj4gKwllbnVtIHhlX3BsYXRmb3JtIHBs YXRmb3JtOw0KPiArCXUzMiB3cml0ZV9wdHJfcmVnOw0KPiArDQo+ICsJcGxhdGZvcm0gPSBndF90 b194ZShndCktPmluZm8ucGxhdGZvcm07DQo+ICsNCj4gKwkvKiBPbiBQVkMsIHRoZSBvdmVyZmxv dyBiaXQgaGFzIHRvIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0Lg0KPiArCSAqIE9uIG90 aGVyIEdQVXMsIHRoZSBiaXQgaGFzIHRvIGJlIGNsZWFyZWQgYnkgd3JpdGluZyAwIHRvIGl0Lg0K PiArCSAqLw0KPiArCWlmIChwbGF0Zm9ybSA9PSBYRV9QVkMpDQo+ICsJCXdyaXRlX3B0cl9yZWcg PSBfTUFTS0VEX0JJVF9FTkFCTEUoWEVIUENfRVVTVEFMTF9SRVBPUlRfT1ZFUkZMT1dfRFJPUCk7 DQo+ICsJZWxzZQ0KPiArCQl3cml0ZV9wdHJfcmVnID0gX01BU0tFRF9CSVRfRElTQUJMRShYRUhQ Q19FVVNUQUxMX1JFUE9SVF9PVkVSRkxPV19EUk9QKTsNCj4gKwl4ZV9ndF9tY3JfdW5pY2FzdF93 cml0ZShndCwgWEVIUENfRVVTVEFMTF9SRVBPUlQsIHdyaXRlX3B0cl9yZWcsIHMsIHNzKTsNCj4g Kwl0cmFjZV94ZV9yZWdfcncoZ3QsIHRydWUsIChYRUhQQ19FVVNUQUxMX1JFUE9SVC5fX3JlZyku YWRkciwNCj4gKwkJCXdyaXRlX3B0cl9yZWcsIHNpemVvZih3cml0ZV9wdHJfcmVnKSk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK19feGVfZXVfc3RhbGxfYnVmX3JlYWQoc3RydWN0IHhl X2V1X3N0YWxsX2NudHJfc3RyZWFtICpzdHJlYW0sDQo+ICsJCSAgICAgICBjaGFyIF9fdXNlciAq YnVmLCBzaXplX3QgY291bnQsDQo+ICsJCSAgICAgICBzaXplX3QgKnRvdGFsX3NpemUsIHN0cnVj dCB4ZV9ndCAqZ3QsDQo+ICsJCSAgICAgICB1OCBzLCB1OCBzcykNCj4gK3sNCj4gKwl1bnNpZ25l ZCBpbnQgZHNzX3Blcl9ncnAgPSBndF90b194ZShndCktPmluZm8ucGxhdGZvcm0gPT0gWEVfUFZD ID8gOCA6IDQ7DQo+ICsJc2l6ZV90IHNpemUsIGJ1Zl9zaXplID0gc3RyZWFtLT5wZXJfZHNzX2J1 Zl9zaXplOw0KPiArCXUxNiBmbGFncyA9IDAsIHN1YnNsaWNlID0gKHMgKiBkc3NfcGVyX2dycCkg KyBzczsNCj4gKwlzdHJ1Y3QgZHJtX3hlX2V1X3N0YWxsX2RhdGFfaGVhZGVyIGhlYWRlcjsNCj4g Kwl1MzIgcmVhZF9wdHJfcmVnLCByZWFkX3B0ciwgd3JpdGVfcHRyOw0KPiArCXU4ICpkc3Nfc3Rh cnRfdmFkZHIsICpyZWFkX3ZhZGRyOw0KPiArCXUzMiByZWFkX29mZnNldCwgd3JpdGVfb2Zmc2V0 Ow0KPiArCXN0cnVjdCBwZXJfZHNzX2J1ZiAqZHNzX2J1ZjsNCj4gKwlib29sIGxpbmVfZHJvcCA9 IGZhbHNlOw0KPiArCWludCByZXQgPSAwOw0KPiArDQo+ICsJLyogSGFyZHdhcmUgaW5jcmVtZW50 cyB0aGUgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMgc3VjaCB0aGF0IHRoZXkgY2FuDQo+ICsJICog b3ZlcmZsb3cgaW50byBvbmUgYWRkaXRpb25hbCBiaXQuIEZvciBleGFtcGxlLCBhIDI1NktCIHNp emUgYnVmZmVyDQo+ICsJICogb2Zmc2V0IHBvaW50ZXIgbmVlZHMgMTggYml0cy4gQnV0IEhXIHVz ZXMgMTkgYml0cyBmb3IgdGhlIHJlYWQgYW5kDQo+ICsJICogd3JpdGUgcG9pbnRlcnMuIFRoaXMg dGVjaG5pcXVlIGF2b2lkcyB3YXN0aW5nIGEgc2xvdCBpbiB0aGUgYnVmZmVyLg0KPiArCSAqIFJl YWQgYW5kIHdyaXRlIG9mZnNldHMgYXJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgcG9pbnRlcnMgaW4g b3JkZXIgdG8NCj4gKwkgKiBjaGVjayBpZiB0aGUgd3JpdGUgcG9pbnRlciBoYXMgd3JhcHBlZCBh cm91bmQgdGhlIGFycmF5Lg0KPiArCSAqLw0KPiArCWRzc19idWYgPSAmc3RyZWFtLT5kc3NfYnVm W3N1YnNsaWNlXTsNCj4gKwltdXRleF9sb2NrKCZkc3NfYnVmLT5sb2NrKTsNCj4gKwlkc3Nfc3Rh cnRfdmFkZHIgPSBkc3NfYnVmLT52YWRkcjsNCj4gKwlyZWFkX3B0ciA9IGRzc19idWYtPnJlYWQ7 DQo+ICsJd3JpdGVfcHRyID0gZHNzX2J1Zi0+d3JpdGU7DQo+ICsJbGluZV9kcm9wID0gZHNzX2J1 Zi0+bGluZV9kcm9wOw0KPiArCXJlYWRfb2Zmc2V0ID0gcmVhZF9wdHIgJiAoYnVmX3NpemUgLSAx KTsNCj4gKwl3cml0ZV9vZmZzZXQgPSB3cml0ZV9wdHIgJiAoYnVmX3NpemUgLSAxKTsNCj4gKwkv Kg0KPiArCSAqIElmIHRoZXJlIGhhcyBiZWVuIGFuIGVuZ2luZSByZXNldCBieSBHdUMsIGFuZCBH dUMgZG9lc24ndCByZXN0b3JlDQo+ICsJICogdGhlIHJlYWQgYW5kIHdyaXRlIHBvaW50ZXIgcmVn aXN0ZXJzLCB0aGUgcG9pbnRlcnMgd2lsbCByZXNldCB0byAwLg0KPiArCSAqIElmIHNvLCB1cGRh dGUgdGhlIGNhY2hlZCByZWFkIHBvaW50ZXIuDQo+ICsJICovDQo+ICsJaWYgKHVubGlrZWx5KCh3 cml0ZV9wdHIgPCByZWFkX3B0cikgJiYNCj4gKwkJICAgICAoKHJlYWRfcHRyICYgYnVmX3NpemUp ID09ICh3cml0ZV9wdHIgJiBidWZfc2l6ZSkpKSkgew0KPiArCQlyZWFkX3B0cl9yZWcgPSB4ZV9n dF9tY3JfdW5pY2FzdF9yZWFkKGd0LCBYRUhQQ19FVVNUQUxMX1JFUE9SVDEsDQo+ICsJCQkJCQkg ICAgICBzLCBzcyk7DQo+ICsJCXJlYWRfcHRyID0gcmVhZF9wdHJfcmVnICYgWEVIUENfRVVTVEFM TF9SRVBPUlQxX1JFQURfUFRSX01BU0s7DQo+ICsJCXJlYWRfcHRyIDw8PSAoNiAtIFhFSFBDX0VV U1RBTExfUkVQT1JUMV9SRUFEX1BUUl9TSElGVCk7DQo+ICsJCXJlYWRfcHRyICY9ICgoYnVmX3Np emUgPDwgMSkgLSAxKTsNCj4gKwkJcmVhZF9vZmZzZXQgPSByZWFkX3B0ciAmIChidWZfc2l6ZSAt IDEpOw0KPiArCQlkc3NfYnVmLT5yZWFkID0gcmVhZF9wdHI7DQo+ICsJfQ0KPiArDQo+ICsJdHJh Y2VfeGVfZXVfc3RhbGxfY250cl9yZWFkKHMsIHNzLCByZWFkX3B0ciwgd3JpdGVfcHRyLA0KPiAr CQkJCSAgICByZWFkX29mZnNldCwgd3JpdGVfb2Zmc2V0LCAqdG90YWxfc2l6ZSk7DQo+ICsJaWYg KHdyaXRlX3B0ciA9PSByZWFkX3B0cikgew0KPiArCQltdXRleF91bmxvY2soJmRzc19idWYtPmxv Y2spOw0KPiArCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICsNCj4gKwkvKiBJZiB3cml0ZSBwb2ludGVy IG9mZnNldCBpcyBsZXNzIHRoYW4gdGhlIHJlYWQgcG9pbnRlciBvZmZzZXQsDQo+ICsJICogaXQg bWVhbnMsIHdyaXRlIHBvaW50ZXIgaGFzIHdyYXBwZWQgYXJvdW5kIHRoZSBhcnJheS4NCj4gKwkg Ki8NCj4gKwlpZiAod3JpdGVfb2Zmc2V0ID4gcmVhZF9vZmZzZXQpDQo+ICsJCXNpemUgPSB3cml0 ZV9vZmZzZXQgLSByZWFkX29mZnNldDsNCj4gKwllbHNlDQo+ICsJCXNpemUgPSBidWZfc2l6ZSAt IHJlYWRfb2Zmc2V0ICsgd3JpdGVfb2Zmc2V0Ow0KPiArDQo+ICsJLyogUmVhZCBvbmx5IHRoZSBk YXRhIHRoYXQgdGhlIHVzZXIgc3BhY2UgYnVmZmVyIGNhbiBhY2NvbW1vZGF0ZSAqLw0KPiArCWlm ICgoKnRvdGFsX3NpemUgKyBzaXplICsgc2l6ZW9mKGhlYWRlcikpID4gY291bnQpIHsNCj4gKwkJ bXV0ZXhfdW5sb2NrKCZkc3NfYnVmLT5sb2NrKTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiAr DQo+ICsJaWYgKGxpbmVfZHJvcCkNCj4gKwkJZmxhZ3MgPSBYRV9FVV9TVEFMTF9GTEFHX09WRVJG TE9XX0RST1A7DQo+ICsNCj4gKwkvKiBEcml2ZXIgZG9lc24ndCBleHBvc2UgdGhlIG51bWJlciBv ZiBDLXNsaWNlcyB0byB1c2VyIHNwYWNlLg0KPiArCSAqIEEgUFZDIGNvbmZpZ3VyYXRpb24gb2Yg OCBjLXNsaWNlcyB4IDggc3ViLXNsaWNlcyB3aWxsIGJlDQo+ICsJICogZXhwb3NlZCB0byB0aGUg dXNlciBzcGFjZSBhcyAxIHNsaWNlIHggNjQgc3ViLXNsaWNlcy4NCj4gKwkgKi8NCj4gKwloZWFk ZXIuc3Vic2xpY2UgPSBzdWJzbGljZTsNCj4gKwloZWFkZXIuZmxhZ3MgPSBmbGFnczsNCj4gKwlo ZWFkZXIucmVjb3JkX3NpemUgPSBDQUNIRUxJTkVfQllURVM7DQoNCndoeSBDQUNIRUxJTkVfQllU RVM/DQpJIHdvdWxkIGV4cGVjdGVkIGl0IHRvIGJlIHRoZSBzYW1lIHNpemUgYXMgZHJtX3hlX2V1 X3N0YWxsX2RhdGFfeGUyLg0KSWYgaXQgaXMgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0 aGVuIGFkZCByZXNlcnZlZCBmaWVsZHMgdG8gZHJtX3hlX2V1X3N0YWxsX2RhdGFfeGUyIHVudGls IGl0IGlzIHRoZSBzYW1lIHNpemUgYXMgQ0FDSEVMSU5FX0JZVEVTLg0KDQo+ICsJaGVhZGVyLm51 bV9yZWNvcmRzID0gc2l6ZSAvIGhlYWRlci5yZWNvcmRfc2l6ZTsNCj4gKw0KPiArCWlmIChjb3B5 X3RvX3VzZXIoKGJ1ZiArICp0b3RhbF9zaXplKSwgJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpKSB7 DQo+ICsJCW11dGV4X3VubG9jaygmZHNzX2J1Zi0+bG9jayk7DQo+ICsJCXJldHVybiAtRUZBVUxU Ow0KPiArCX0NCj4gKwkqdG90YWxfc2l6ZSArPSBzaXplb2YoaGVhZGVyKTsNCj4gKw0KPiArCXJl YWRfdmFkZHIgPSBkc3Nfc3RhcnRfdmFkZHIgKyByZWFkX29mZnNldDsNCj4gKw0KPiArCWlmICh3 cml0ZV9vZmZzZXQgPiByZWFkX29mZnNldCkgew0KPiArCQlpZiAoY29weV90b191c2VyKChidWYg KyAqdG90YWxfc2l6ZSksIHJlYWRfdmFkZHIsIHNpemUpKSB7DQo+ICsJCQltdXRleF91bmxvY2so JmRzc19idWYtPmxvY2spOw0KPiArCQkJcmV0dXJuIC1FRkFVTFQ7DQo+ICsJCX0NCj4gKwl9IGVs c2Ugew0KPiArCQlpZiAoY29weV90b191c2VyKChidWYgKyAqdG90YWxfc2l6ZSksIHJlYWRfdmFk ZHIsIChidWZfc2l6ZSAtIHJlYWRfb2Zmc2V0KSkpIHsNCj4gKwkJCW11dGV4X3VubG9jaygmZHNz X2J1Zi0+bG9jayk7DQo+ICsJCQlyZXR1cm4gLUVGQVVMVDsNCj4gKwkJfQ0KPiArCQlpZiAoY29w eV90b191c2VyKChidWYgKyAqdG90YWxfc2l6ZSksIGRzc19zdGFydF92YWRkciwgd3JpdGVfb2Zm c2V0KSkgew0KPiArCQkJbXV0ZXhfdW5sb2NrKCZkc3NfYnVmLT5sb2NrKTsNCj4gKwkJCXJldHVy biAtRUZBVUxUOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJKnRvdGFsX3NpemUgKz0gc2l6ZTsN Cj4gKwlyZWFkX3B0ciArPSBzaXplOw0KPiArDQo+ICsJLyogUmVhZCBwb2ludGVyIGNhbiBvdmVy ZmxvdyBpbnRvIG9uZSBhZGRpdGlvbmFsIGJpdCAqLw0KPiArCXJlYWRfcHRyICY9ICgoYnVmX3Np emUgPDwgMSkgLSAxKTsNCj4gKwlyZWFkX3B0cl9yZWcgPSAoKHJlYWRfcHRyID4+IDYpIDw8IFhF SFBDX0VVU1RBTExfUkVQT1JUMV9SRUFEX1BUUl9TSElGVCk7DQo+ICsJcmVhZF9wdHJfcmVnICY9 IFhFSFBDX0VVU1RBTExfUkVQT1JUMV9SRUFEX1BUUl9NQVNLOw0KPiArCXJlYWRfcHRyX3JlZyB8 PSAoWEVIUENfRVVTVEFMTF9SRVBPUlQxX1JFQURfUFRSX01BU0sgPDwNCj4gKwkJCSBYRUhQQ19F VVNUQUxMX1JFUE9SVDFfTUFTS19TSElGVCk7DQo+ICsJeGVfZ3RfbWNyX3VuaWNhc3Rfd3JpdGUo Z3QsIFhFSFBDX0VVU1RBTExfUkVQT1JUMSwgcmVhZF9wdHJfcmVnLCBzLCBzcyk7DQo+ICsJdHJh Y2VfeGVfcmVnX3J3KGd0LCB0cnVlLCAoWEVIUENfRVVTVEFMTF9SRVBPUlQxLl9fcmVnKS5hZGRy LA0KPiArCQkJcmVhZF9wdHJfcmVnLCBzaXplb2YocmVhZF9wdHJfcmVnKSk7DQo+ICsJaWYgKGRz c19idWYtPmxpbmVfZHJvcCkgew0KPiArCQljbGVhcl9kcm9wcGVkX2V2aWN0aW9uX2xpbmVfYml0 KGd0LCBzLCBzcyk7DQo+ICsJCWRzc19idWYtPmxpbmVfZHJvcCA9IGZhbHNlOw0KPiArCX0NCj4g Kwlkc3NfYnVmLT5yZWFkID0gcmVhZF9wdHI7DQo+ICsJbXV0ZXhfdW5sb2NrKCZkc3NfYnVmLT5s b2NrKTsNCj4gKwl0cmFjZV94ZV9ldV9zdGFsbF9jbnRyX3JlYWQocywgc3MsIHJlYWRfcHRyLCB3 cml0ZV9wdHIsDQo+ICsJCQkJICAgIHJlYWRfb2Zmc2V0LCB3cml0ZV9vZmZzZXQsICp0b3RhbF9z aXplKTsNCj4gKwlyZXR1cm4gcmV0Ow0KDQpyZXQgaXMgb25seSBzZXQgaW4gdGhlIGJlZ2lubmlu ZyBvZiB0aGUgZnVuY3Rpb24uLi4NCg0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIHhlX2V1X3N0 YWxsX2J1Zl9yZWFkX2xvY2tlZCAtIGNvcHkgRVUgc3RhbGwgY291bnRlcnMgZGF0YSBmcm9tIHRo ZQ0KPiArICoJCQkJICAgcGVyIGRzcyBidWZmZXJzIHRvIHRoZSB1c2Vyc3BhY2UgYnVmZmVyDQo+ ICsgKiBAc3RyZWFtOiBBIHN0cmVhbSBvcGVuZWQgZm9yIEVVIHN0YWxsIGNvdW50IG1ldHJpY3MN Cj4gKyAqIEBidWY6IGRlc3RpbmF0aW9uIGJ1ZmZlciBnaXZlbiBieSB1c2Vyc3BhY2UNCj4gKyAq IEBjb3VudDogdGhlIG51bWJlciBvZiBieXRlcyB1c2Vyc3BhY2Ugd2FudHMgdG8gcmVhZA0KPiAr ICogQHBwb3M6IChpbm91dCkgZmlsZSBzZWVrIHBvc2l0aW9uICh1bnVzZWQpDQo+ICsgKg0KPiAr ICogUmV0dXJuczogTnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBvciBhIG5lZ2F0aXZlIGVycm9yIGNv ZGUNCj4gKyAqIElmIHdlJ3ZlIHN1Y2Nlc3NmdWxseSBjb3BpZWQgYW55IGRhdGEgdGhlbiByZXBv cnRpbmcgdGhhdCB0YWtlcw0KPiArICogcHJlY2VkZW5jZSBvdmVyIGFueSBpbnRlcm5hbCBlcnJv ciBzdGF0dXMsIHNvIHRoZSBkYXRhIGlzbid0IGxvc3QuDQo+ICsgKi8NCj4gK3N0YXRpYyBzc2l6 ZV90DQo+ICt4ZV9ldV9zdGFsbF9idWZfcmVhZF9sb2NrZWQoc3RydWN0IHhlX2V1X3N0YWxsX2Nu dHJfc3RyZWFtICpzdHJlYW0sDQo+ICsJCQkgICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191 c2VyICpidWYsDQo+ICsJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpDQo+ICt7DQo+ ICsJc3RydWN0IHhlX2d0ICpndCA9IHN0cmVhbS0+Z3Q7DQo+ICsJc2l6ZV90IHRvdGFsX3NpemUg PSAwOw0KPiArCXUxNiBncm91cCwgaW5zdGFuY2U7DQo+ICsJaW50IHJldCA9IDAsIGRzczsNCj4g Kw0KPiArCWlmIChjb3VudCA9PSAwKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWZv cl9lYWNoX2Rzc19zdGVlcmluZyhkc3MsIGd0LCBncm91cCwgaW5zdGFuY2UpIHsNCj4gKwkJcmV0 ID0gX194ZV9ldV9zdGFsbF9idWZfcmVhZChzdHJlYW0sIGJ1ZiwgY291bnQsICZ0b3RhbF9zaXpl LA0KPiArCQkJCQkgICAgIGd0LCBncm91cCwgaW5zdGFuY2UpOw0KPiArCQlpZiAocmV0IHx8IGNv dW50ID09IHRvdGFsX3NpemUpDQo+ICsJCQlnb3RvIGV4aXQ7DQo+ICsJfQ0KPiArZXhpdDoNCj4g KwlpZiAodG90YWxfc2l6ZSkNCj4gKwkJcmV0dXJuIHRvdGFsX3NpemU7DQo+ICsJZWxzZSBpZiAo cmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCWVsc2UNCj4gKwkJcmV0dXJuIC1FQUdBSU47DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtmcmVlX2V1X3N0YWxsX2NudHJfYnVmKHN0cnVj dCB4ZV9ldV9zdGFsbF9jbnRyX3N0cmVhbSAqc3RyZWFtKQ0KPiArew0KPiArCWlmIChzdHJlYW0t PmJvKSB7DQo+ICsJCXhlX2JvX3VucGluX21hcF9ub192bShzdHJlYW0tPmJvKTsNCj4gKwkJc3Ry ZWFtLT52YWRkciA9IE5VTEw7DQo+ICsJCXN0cmVhbS0+Ym8gPSBOVUxMOw0KPiArCX0NCj4gKwlk ZXN0cm95X3dvcmtxdWV1ZShzdHJlYW0tPmJ1Zl9jaGVja193cSk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgYWxsb2NfZXVfc3RhbGxfY250cl9idWYoc3RydWN0IHhlX2V1X3N0YWxsX2NudHJf c3RyZWFtICpzdHJlYW0sDQo+ICsJCQkJICAgdTMyIHBlcl9kc3NfYnVmX3NpemUpDQo+ICt7DQo+ ICsJc3RydWN0IHhlX3RpbGUgKnRpbGUgPSBzdHJlYW0tPmd0LT50aWxlOw0KPiArCXN0cnVjdCB4 ZV9ndCAqZ3QgPSBzdHJlYW0tPmd0Ow0KPiArCXN0cnVjdCB4ZV9ibyAqYm87DQo+ICsJdTMyIHNp emU7DQo+ICsJaW50IHJldCA9IDA7DQo+ICsJdW5zaWduZWQgaW50IGxhc3RfZHNzOw0KPiArCXhl X2Rzc19tYXNrX3QgYWxsX2RzczsNCj4gKw0KPiArCWJpdG1hcF9vcihhbGxfZHNzLCBndC0+ZnVz ZV90b3BvLmdfZHNzX21hc2ssIGd0LT5mdXNlX3RvcG8uY19kc3NfbWFzaywNCj4gKwkJICBYRV9N QVhfRFNTX0ZVU0VfQklUUyk7DQo+ICsJLyoNCj4gKwkgKiBFbmFibGVkIHN1YnNsaWNlcyBjYW4g YmUgZGlzY29udGlndW91cy4gRmluZCB0aGUgbGFzdCBzdWJzbGljZQ0KPiArCSAqIGFuZCBjYWxj dWxhdGUgdG90YWwgYnVmZmVyIHNpemUgYmFzZWQgb24gdGhhdC4NCj4gKwkgKiBpbnRlbF9zc2V1 X2hpZ2hlc3RfeGVocF9kc3MgcmV0dXJucyB6ZXJvIGJhc2VkIHBvc2l0aW9uLg0KPiArCSAqIFRo ZXJlZm9yZSB0aGUgcmVzdWx0IGlzIGluY3JlbWVudGVkLg0KPiArCSAqLw0KPiArCWxhc3RfZHNz ID0geGVfZHNzX21hc2tfbGFzdF9kc3MoYWxsX2Rzcyk7DQo+ICsJc2l6ZSA9IHBlcl9kc3NfYnVm X3NpemUgKiAobGFzdF9kc3MgKyAxKTsNCj4gKw0KPiArCWJvID0geGVfYm9fY3JlYXRlX3Bpbl9t YXAodGlsZS0+eGUsIHRpbGUsIE5VTEwsDQo+ICsJCQkJICBzaXplLCB0dG1fYm9fdHlwZV9rZXJu ZWwsDQo+ICsJCQkJICBYRV9CT19GTEFHX1ZSQU1fSUZfREdGWCh0aWxlKSB8DQo+ICsJCQkJICBY RV9CT19GTEFHX0dHVFQpOw0KPiArCWlmIChJU19FUlIoYm8pKQ0KPiArCQlyZXQgPSBQVFJfRVJS KGJvKTsNCj4gKw0KPiArCXN0cmVhbS0+Ym8gPSBibzsNCj4gKwlzdHJlYW0tPnZhZGRyID0gYm8t PnZtYXAuaXNfaW9tZW0gPyBiby0+dm1hcC52YWRkcl9pb21lbSA6IGJvLT52bWFwLnZhZGRyOw0K PiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHUzMg0KPiArZ2VuX2V1 c3RhbGxfYmFzZShzdHJ1Y3QgeGVfZXVfc3RhbGxfY250cl9zdHJlYW0gKnN0cmVhbSwgYm9vbCBl bmFibGUpDQo+ICt7DQo+ICsJdTMyIHZhbCA9IHhlX2JvX2dndHRfYWRkcihzdHJlYW0tPmJvKTsN Cj4gKwl1MzIgc3o7DQo+ICsNCj4gKwlYRV9XQVJOX09OKCFJU19BTElHTkVEKHZhbCwgNjQpKTsN Cj4gKw0KPiArCXN3aXRjaCAoc3RyZWFtLT5wZXJfZHNzX2J1Zl9zaXplKSB7DQo+ICsJY2FzZSBT Wl8xMjhLOg0KPiArCQlzeiA9IDA7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgU1pfMjU2SzoNCj4g KwkJc3ogPSAxOw0KPiArCQlicmVhazsNCj4gKwljYXNlIFNaXzUxMks6DQo+ICsJCXN6ID0gMjsN Cj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJTUlTU0lOR19DQVNFKHN0cmVhbS0+cGVy X2Rzc19idWZfc2l6ZSk7DQo+ICsJCXN6ID0gMjsNCj4gKwl9DQo+ICsNCj4gKwl2YWwgfD0gUkVH X0ZJRUxEX1BSRVAoWEVIUENfRVVTVEFMTF9CQVNFX0RTU19CVUZfU1osIHN6KTsNCj4gKwlpZiAo ZW5hYmxlKQ0KPiArCQl2YWwgfD0gWEVIUENfRVVTVEFMTF9CQVNFX0VOQUJMRV9TQU1QTElORzsN Cj4gKw0KPiArCXJldHVybiB2YWw7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt4ZV9l dV9zdGFsbF9zdHJlYW1fZW5hYmxlKHN0cnVjdCB4ZV9ldV9zdGFsbF9jbnRyX3N0cmVhbSAqc3Ry ZWFtKQ0KPiArew0KPiArCXN0cnVjdCB4ZV9ndCAqZ3QgPSBzdHJlYW0tPmd0Ow0KPiArCWVudW0g eGVfcGxhdGZvcm0gcGxhdGZvcm07DQo+ICsJdTMyIHJlZ192YWx1ZTsNCj4gKw0KPiArCXBsYXRm b3JtID0gZ3RfdG9feGUoZ3QpLT5pbmZvLnBsYXRmb3JtOw0KPiArDQo+ICsJLyogVGFrZSBydW50 aW1lIHBtIHJlZiBhbmQgZm9yY2V3YWtlIHRvIGRpc2FibGUgUkM2ICovDQo+ICsJeGVfcG1fcnVu dGltZV9nZXQoZ3RfdG9feGUoZ3QpKTsNCj4gKwlYRV9XQVJOX09OKHhlX2ZvcmNlX3dha2VfZ2V0 KGd0X3RvX2Z3KGd0KSwgWEVfRk9SQ0VXQUtFX0FMTCkpOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBX YV8yMjAxNjU5NjgzODpwdmMNCj4gKwkgKiBEaXNhYmxlIEVVIERPUCBnYXRpbmcgZm9yIFBWQy4N Cj4gKwkgKi8NCj4gKwlpZiAocGxhdGZvcm0gPT0gWEVfUFZDKQ0KPiArCQl4ZV9ndF9tY3JfbXVs dGljYXN0X3dyaXRlKGd0LCBST1dfQ0hJQ0tFTjIsDQo+ICsJCQkJCSAgX01BU0tFRF9CSVRfRU5B QkxFKERJU0FCTEVfRE9QX0dBVElORykpOw0KPiArDQo+ICsJcmVnX3ZhbHVlID0gZ2VuX2V1c3Rh bGxfYmFzZShzdHJlYW0sIHRydWUpOw0KPiArCXhlX2d0X21jcl9tdWx0aWNhc3Rfd3JpdGUoZ3Qs IFhFSFBDX0VVU1RBTExfQkFTRSwgcmVnX3ZhbHVlKTsNCj4gKwl0cmFjZV94ZV9yZWdfcncoZ3Qs IHRydWUsIChYRUhQQ19FVVNUQUxMX0JBU0UuX19yZWcpLmFkZHIsDQo+ICsJCQlyZWdfdmFsdWUs IHNpemVvZihyZWdfdmFsdWUpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK3hlX2V1 X3N0YWxsX3N0cmVhbV9kaXNhYmxlKHN0cnVjdCB4ZV9ldV9zdGFsbF9jbnRyX3N0cmVhbSAqc3Ry ZWFtKQ0KPiArew0KPiArCXN0cnVjdCB4ZV9ndCAqZ3QgPSBzdHJlYW0tPmd0Ow0KPiArCWVudW0g eGVfcGxhdGZvcm0gcGxhdGZvcm07DQo+ICsJdTE2IGdyb3VwLCBpbnN0YW5jZTsNCj4gKwl1MzIg cmVnX3ZhbHVlOw0KPiArCWludCBkc3M7DQo+ICsNCj4gKwlwbGF0Zm9ybSA9IGd0X3RvX3hlKGd0 KS0+aW5mby5wbGF0Zm9ybTsNCj4gKw0KPiArCS8qDQo+ICsJICogQmVmb3JlIGRpc2FibGluZyBF VSBzdGFsbCBzYW1wbGluZywgY2hlY2sgaWYgYW55IG9mIHRoZQ0KPiArCSAqIFhFSFBDX0VVU1RB TExfUkVQT1JUIHJlZ2lzdGVycyBoYXZlIHRoZSBkcm9wIGJpdCBzZXQuIElmIHNldCwNCj4gKwkg KiBjbGVhciB0aGUgYml0LiBJZiB0aGUgdXNlciBzcGFjZSBhcHBsaWNhdGlvbiByZWFkcyBhbGwg dGhlDQo+ICsJICogc3RhbGwgZGF0YSwgdGhlIGRyb3AgYml0IHdvdWxkIGJlIGNsZWFyZWQgZHVy aW5nIHRoZSByZWFkLg0KPiArCSAqIEJ1dCBpZiB0aGVyZSBpcyBhbnkgdW5yZWFkIGRhdGEgYW5k IHRoZSBkcm9wIGJpdCBpcyBzZXQgZm9yDQo+ICsJICogYW55IHN1YnNsaWNlLCB0aGUgZHJvcCBi aXQgd291bGQgY29udGludWUgdG8gYmUgc2V0IGV2ZW4NCj4gKwkgKiBhZnRlciBkaXNhYmxpbmcg RVUgc3RhbGwgc2FtcGxpbmcgYW5kIG1heSBjYXVzZSBlcnJvbmVvdXMNCj4gKwkgKiBzdGFsbCBk YXRhIGluIHRoZSBzdWJzZXF1ZW50IHN0YWxsIGRhdGEgc2FtcGxpbmcgcnVuLg0KPiArCSAqLw0K PiArCWZvcl9lYWNoX2Rzc19zdGVlcmluZyhkc3MsIGd0LCBncm91cCwgaW5zdGFuY2UpIHsNCj4g KwkJcmVnX3ZhbHVlID0geGVfZ3RfbWNyX3VuaWNhc3RfcmVhZChndCwgWEVIUENfRVVTVEFMTF9S RVBPUlQsDQo+ICsJCQkJCQkgICBncm91cCwgaW5zdGFuY2UpOw0KPiArCQlpZiAocmVnX3ZhbHVl ICYgWEVIUENfRVVTVEFMTF9SRVBPUlRfT1ZFUkZMT1dfRFJPUCkNCj4gKwkJCWNsZWFyX2Ryb3Bw ZWRfZXZpY3Rpb25fbGluZV9iaXQoZ3QsIGdyb3VwLCBpbnN0YW5jZSk7DQo+ICsJfQ0KPiArCXJl Z192YWx1ZSA9IGdlbl9ldXN0YWxsX2Jhc2Uoc3RyZWFtLCBmYWxzZSk7DQo+ICsJeGVfZ3RfbWNy X211bHRpY2FzdF93cml0ZShndCwgWEVIUENfRVVTVEFMTF9CQVNFLCByZWdfdmFsdWUpOw0KPiAr CXRyYWNlX3hlX3JlZ19ydyhndCwgdHJ1ZSwgKFhFSFBDX0VVU1RBTExfQkFTRS5fX3JlZykuYWRk ciwNCj4gKwkJCXJlZ192YWx1ZSwgc2l6ZW9mKHJlZ192YWx1ZSkpOw0KPiArDQo+ICsJLyogV2Ff MjIwMTY1OTY4Mzg6cHZjICovDQo+ICsJaWYgKHBsYXRmb3JtID09IFhFX1BWQykNCj4gKwkJeGVf Z3RfbWNyX211bHRpY2FzdF93cml0ZShndCwgUk9XX0NISUNLRU4yLA0KPiArCQkJCQkgIF9NQVNL RURfQklUX0RJU0FCTEUoRElTQUJMRV9ET1BfR0FUSU5HKSk7DQo+ICsNCj4gKwlYRV9XQVJOX09O KHhlX2ZvcmNlX3dha2VfcHV0KGd0X3RvX2Z3KGd0KSwgWEVfRk9SQ0VXQUtFX0FMTCkpOw0KPiAr CXhlX3BtX3J1bnRpbWVfcHV0KGd0X3RvX3hlKGd0KSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGV1X3N0YWxsX2J1Zl9jaGVja193b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykN Cj4gK3sNCj4gKwlzdHJ1Y3QgeGVfZXVfc3RhbGxfY250cl9zdHJlYW0gKnN0cmVhbSA9DQo+ICsJ CWNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKnN0cmVhbSksIGJ1Zl9jaGVja193b3JrKTsNCj4g Kw0KPiArCWlmIChldV9zdGFsbF9jbnRyX2J1Zl9jaGVjayhzdHJlYW0pKSB7DQo+ICsJCXN0cmVh bS0+cG9sbGluID0gdHJ1ZTsNCj4gKwkJd2FrZV91cCgmc3RyZWFtLT5wb2xsX3dxKTsNCj4gKwl9 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBlbnVtDQo+ICtocnRpbWVyX3Jlc3RhcnQgZXVfc3RhbGxf cG9sbF9jaGVja190aW1lcl9jYihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikNCj4gK3sNCj4gKwlz dHJ1Y3QgeGVfZXVfc3RhbGxfY250cl9zdHJlYW0gKnN0cmVhbSA9DQo+ICsJCWNvbnRhaW5lcl9v ZihocnRpbWVyLCB0eXBlb2YoKnN0cmVhbSksIHBvbGxfY2hlY2tfdGltZXIpOw0KPiArDQo+ICsJ cXVldWVfd29yayhzdHJlYW0tPmJ1Zl9jaGVja193cSwgJnN0cmVhbS0+YnVmX2NoZWNrX3dvcmsp Ow0KPiArCWhydGltZXJfZm9yd2FyZF9ub3coaHJ0aW1lciwgbnNfdG9fa3RpbWUoc3RyZWFtLT5w b2xsX3BlcmlvZCkpOw0KPiArDQo+ICsJcmV0dXJuIEhSVElNRVJfUkVTVEFSVDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCB4ZV9ldV9zdGFsbF9zdHJlYW1faW5pdChzdHJ1Y3QgeGVfZXVfc3Rh bGxfY250cl9zdHJlYW0gKnN0cmVhbSwNCj4gKwkJCQkgICBzdHJ1Y3QgZXVfc3RhbGxfb3Blbl9w cm9wZXJ0aWVzICpwcm9wcykNCj4gK3sNCj4gKwl1MzIgd3JpdGVfcHRyX3JlZywgd3JpdGVfcHRy LCByZWFkX3B0cl9yZWc7DQo+ICsJdTMyIHZhZGRyX29mZnNldCwgcmVnX3ZhbHVlOw0KPiArCXN0 cnVjdCB4ZV9ndCAqZ3QgPSBzdHJlYW0tPmd0Ow0KPiArCXN0cnVjdCBwZXJfZHNzX2J1ZiAqZHNz X2J1ZjsNCj4gKwl1MTYgZ3JvdXAsIGluc3RhbmNlOw0KPiArCWludCByZXQsIGRzczsNCj4gKw0K PiArCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN0cmVhbS0+cG9sbF93cSk7DQo+ICsJSU5JVF9XT1JL KCZzdHJlYW0tPmJ1Zl9jaGVja193b3JrLCBldV9zdGFsbF9idWZfY2hlY2tfd29ya19mbik7DQo+ ICsJc3RyZWFtLT5idWZfY2hlY2tfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgieGVfZXVz dGFsbF9jbnRyIiwgMCk7DQo+ICsJaWYgKCFzdHJlYW0tPmJ1Zl9jaGVja193cSkNCj4gKwkJcmV0 dXJuIC1FTk9NRU07DQo+ICsJaHJ0aW1lcl9pbml0KCZzdHJlYW0tPnBvbGxfY2hlY2tfdGltZXIs IENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7DQo+ICsJc3RyZWFtLT5wb2xsX2No ZWNrX3RpbWVyLmZ1bmN0aW9uID0gZXVfc3RhbGxfcG9sbF9jaGVja190aW1lcl9jYjsNCj4gKwlz dHJlYW0tPmV2ZW50X3JlcG9ydF9jb3VudCA9IHByb3BzLT5ldmVudF9yZXBvcnRfY291bnQ7DQo+ ICsJc3RyZWFtLT5wZXJfZHNzX2J1Zl9zaXplID0gcHJvcHMtPmV1X3N0YWxsX2J1Zl9zejsNCj4g KwlzdHJlYW0tPnBvbGxfcGVyaW9kID0gcHJvcHMtPnBvbGxfcGVyaW9kOw0KPiArDQo+ICsJcmV0 ID0gYWxsb2NfZXVfc3RhbGxfY250cl9idWYoc3RyZWFtLCBwcm9wcy0+ZXVfc3RhbGxfYnVmX3N6 KTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJeGVfcG1fcnVudGlt ZV9nZXQoZ3RfdG9feGUoZ3QpKTsNCj4gKwlYRV9XQVJOX09OKHhlX2ZvcmNlX3dha2VfZ2V0KGd0 X3RvX2Z3KGd0KSwgWEVfRk9SQ0VXQUtFX0FMTCkpOw0KPiArDQo+ICsJcmVnX3ZhbHVlID0gZ2Vu X2V1c3RhbGxfYmFzZShzdHJlYW0sIGZhbHNlKTsNCj4gKwl4ZV9ndF9tY3JfbXVsdGljYXN0X3dy aXRlKGd0LCBYRUhQQ19FVVNUQUxMX0JBU0UsIHJlZ192YWx1ZSk7DQo+ICsJdHJhY2VfeGVfcmVn X3J3KGd0LCB0cnVlLCAoWEVIUENfRVVTVEFMTF9CQVNFLl9fcmVnKS5hZGRyLA0KPiArCQkJcmVn X3ZhbHVlLCBzaXplb2YocmVnX3ZhbHVlKSk7DQo+ICsJLyogR0dUVCBhZGRyZXNzZXMgY2FuIG5l dmVyIGJlID4gMzIgYml0cyAqLw0KPiArCXhlX2d0X21jcl9tdWx0aWNhc3Rfd3JpdGUoZ3QsIFhF SFBDX0VVU1RBTExfQkFTRV9VUFBFUiwgMCk7DQo+ICsJcmVnX3ZhbHVlID0gX01BU0tFRF9GSUVM RChFVVNUQUxMX01PQ1MgfCBFVVNUQUxMX1NBTVBMRV9SQVRFLA0KPiArCQkJCSAgUkVHX0ZJRUxE X1BSRVAoRVVTVEFMTF9NT0NTLCBndC0+bW9jcy51Y19pbmRleCA8PCAxKSB8DQo+ICsJCQkJICBS RUdfRklFTERfUFJFUChFVVNUQUxMX1NBTVBMRV9SQVRFLA0KPiArCQkJCQkJIHByb3BzLT5ldV9z dGFsbF9zYW1wbGluZ19yYXRlKSk7DQo+ICsJeGVfZ3RfbWNyX211bHRpY2FzdF93cml0ZShndCwg WEVIUENfRVVTVEFMTF9DVFJMLCByZWdfdmFsdWUpOw0KPiArCXRyYWNlX3hlX3JlZ19ydyhndCwg dHJ1ZSwgKFhFSFBDX0VVU1RBTExfQ1RSTC5fX3JlZykuYWRkciwNCj4gKwkJCXJlZ192YWx1ZSwg c2l6ZW9mKHJlZ192YWx1ZSkpOw0KPiArDQo+ICsJZm9yX2VhY2hfZHNzX3N0ZWVyaW5nKGRzcywg Z3QsIGdyb3VwLCBpbnN0YW5jZSkgew0KPiArCQl3cml0ZV9wdHJfcmVnID0geGVfZ3RfbWNyX3Vu aWNhc3RfcmVhZChndCwgWEVIUENfRVVTVEFMTF9SRVBPUlQsDQo+ICsJCQkJCQkgICAgICAgZ3Jv dXAsIGluc3RhbmNlKTsNCj4gKwkJd3JpdGVfcHRyID0gd3JpdGVfcHRyX3JlZyAmIFhFSFBDX0VV U1RBTExfUkVQT1JUX1dSSVRFX1BUUl9NQVNLOw0KPiArCQl3cml0ZV9wdHIgPDw9ICg2IC0gWEVI UENfRVVTVEFMTF9SRVBPUlRfV1JJVEVfUFRSX1NISUZUKTsNCj4gKwkJd3JpdGVfcHRyICY9ICgo c3RyZWFtLT5wZXJfZHNzX2J1Zl9zaXplIDw8IDEpIC0gMSk7DQo+ICsJCXJlYWRfcHRyX3JlZyA9 IHdyaXRlX3B0ciA+PiAoNiAtIFhFSFBDX0VVU1RBTExfUkVQT1JUMV9SRUFEX1BUUl9TSElGVCk7 DQo+ICsJCXJlYWRfcHRyX3JlZyAmPSBYRUhQQ19FVVNUQUxMX1JFUE9SVDFfUkVBRF9QVFJfTUFT SzsNCj4gKwkJcmVhZF9wdHJfcmVnIHw9IChYRUhQQ19FVVNUQUxMX1JFUE9SVDFfUkVBRF9QVFJf TUFTSyA8PA0KPiArCQkJCSBYRUhQQ19FVVNUQUxMX1JFUE9SVDFfTUFTS19TSElGVCk7DQo+ICsJ CXhlX2d0X21jcl91bmljYXN0X3dyaXRlKGd0LCBYRUhQQ19FVVNUQUxMX1JFUE9SVDEsDQo+ICsJ CQkJCXJlYWRfcHRyX3JlZywgZ3JvdXAsIGluc3RhbmNlKTsNCj4gKwkJZHNzX2J1ZiA9ICZzdHJl YW0tPmRzc19idWZbZHNzXTsNCj4gKwkJdmFkZHJfb2Zmc2V0ID0gZHNzICogcHJvcHMtPmV1X3N0 YWxsX2J1Zl9zejsNCj4gKwkJZHNzX2J1Zi0+dmFkZHIgPSBzdHJlYW0tPnZhZGRyICsgdmFkZHJf b2Zmc2V0Ow0KPiArCQlkc3NfYnVmLT53cml0ZSA9IHdyaXRlX3B0cjsNCj4gKwkJZHNzX2J1Zi0+ cmVhZCA9IHdyaXRlX3B0cjsNCj4gKwkJZHNzX2J1Zi0+bGluZV9kcm9wID0gZmFsc2U7DQo+ICsJ CW11dGV4X2luaXQoJmRzc19idWYtPmxvY2spOw0KPiArCX0NCj4gKwlYRV9XQVJOX09OKHhlX2Zv cmNlX3dha2VfcHV0KGd0X3RvX2Z3KGd0KSwgWEVfRk9SQ0VXQUtFX0FMTCkpOw0KPiArCXhlX3Bt X3J1bnRpbWVfcHV0KGd0X3RvX3hlKGd0KSk7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICogeGVfZXVfc3RhbGxfYnVmX3JlYWQgLSBoYW5kbGVzIHJlYWQgRk9QIGZvciB4 ZSBFVSBzdGFsbCBjbnRyIHN0cmVhbSBGRHMNCj4gKyAqIEBmaWxlOiBBbiB4ZSBFVSBzdGFsbCBj bnRyIHN0cmVhbSBmaWxlDQo+ICsgKiBAYnVmOiBkZXN0aW5hdGlvbiBidWZmZXIgZ2l2ZW4gYnkg dXNlcnNwYWNlDQo+ICsgKiBAY291bnQ6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlcnNwYWNlIHdh bnRzIHRvIHJlYWQNCj4gKyAqIEBwcG9zOiAoaW5vdXQpIGZpbGUgc2VlayBwb3NpdGlvbiAodW51 c2VkKQ0KPiArICoNCj4gKyAqIFJldHVybnM6IFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIG9y IGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLg0KPiArICovDQo+ICtzdGF0aWMgc3Np emVfdCB4ZV9ldV9zdGFsbF9idWZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIg KmJ1ZiwNCj4gKwkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpDQo+ICt7DQo+ICsJ c3RydWN0IHhlX2V1X3N0YWxsX2NudHJfc3RyZWFtICpzdHJlYW0gPSBmaWxlLT5wcml2YXRlX2Rh dGE7DQo+ICsJc3RydWN0IHhlX2d0ICpndCA9IHN0cmVhbS0+Z3Q7DQo+ICsJc3NpemVfdCByZXQ7 DQo+ICsNCj4gKwlpZiAoIXN0cmVhbS0+ZW5hYmxlZCkNCj4gKwkJcmV0dXJuIC1FSU87DQo+ICsN Cj4gKwlpZiAoIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsNCj4gKwkJZG8gew0KPiAr CQkJaWYgKCFzdHJlYW0tPnBvbGxpbikgew0KPiArCQkJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJy dXB0aWJsZShzdHJlYW0tPnBvbGxfd3EsIHN0cmVhbS0+cG9sbGluKTsNCj4gKwkJCQlpZiAocmV0 KQ0KPiArCQkJCQlyZXR1cm4gLUVJTlRSOw0KPiArCQkJfQ0KPiArDQo+ICsJCQltdXRleF9sb2Nr KCZndC0+ZXVfc3RhbGxfY250ci5sb2NrKTsNCj4gKwkJCXJldCA9IHhlX2V1X3N0YWxsX2J1Zl9y ZWFkX2xvY2tlZChzdHJlYW0sIGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MpOw0KPiArCQkJbXV0ZXhf dW5sb2NrKCZndC0+ZXVfc3RhbGxfY250ci5sb2NrKTsNCj4gKwkJfSB3aGlsZSAocmV0ID09IC1F QUdBSU4pOw0KPiArCX0gZWxzZSB7DQo+ICsJCW11dGV4X2xvY2soJmd0LT5ldV9zdGFsbF9jbnRy LmxvY2spOw0KPiArCQlyZXQgPSB4ZV9ldV9zdGFsbF9idWZfcmVhZF9sb2NrZWQoc3RyZWFtLCBm aWxlLCBidWYsIGNvdW50LCBwcG9zKTsNCj4gKwkJbXV0ZXhfdW5sb2NrKCZndC0+ZXVfc3RhbGxf Y250ci5sb2NrKTsNCj4gKwl9DQo+ICsNCj4gKwlzdHJlYW0tPnBvbGxpbiA9IGZhbHNlOw0KPiAr DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIF9fcG9sbF90DQo+ICt4ZV9l dV9zdGFsbF9idWZfcG9sbF9sb2NrZWQoc3RydWN0IHhlX2V1X3N0YWxsX2NudHJfc3RyZWFtICpz dHJlYW0sDQo+ICsJCQkgICAgc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpDQo+ ICt7DQo+ICsJX19wb2xsX3QgZXZlbnRzID0gMDsNCj4gKw0KPiArCXBvbGxfd2FpdChmaWxlLCAm c3RyZWFtLT5wb2xsX3dxLCB3YWl0KTsNCj4gKw0KPiArCWlmIChzdHJlYW0tPnBvbGxpbikNCj4g KwkJZXZlbnRzIHw9IEVQT0xMSU47DQo+ICsNCj4gKwlyZXR1cm4gZXZlbnRzOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgX19wb2xsX3QNCj4gK3hlX2V1X3N0YWxsX2J1Zl9wb2xsKHN0cnVjdCBmaWxl ICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQ0KPiArew0KPiArCXN0cnVjdCB4ZV9ldV9zdGFsbF9j bnRyX3N0cmVhbSAqc3RyZWFtID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0KPiArCXN0cnVjdCB4ZV9n dCAqZ3QgPSBzdHJlYW0tPmd0Ow0KPiArCV9fcG9sbF90IHJldDsNCj4gKw0KPiArCW11dGV4X2xv Y2soJmd0LT5ldV9zdGFsbF9jbnRyLmxvY2spOw0KPiArCXJldCA9IHhlX2V1X3N0YWxsX2J1Zl9w b2xsX2xvY2tlZChzdHJlYW0sIGZpbGUsIHdhaXQpOw0KPiArCW11dGV4X3VubG9jaygmZ3QtPmV1 X3N0YWxsX2NudHIubG9jayk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZA0KPiAreGVfZXVfc3RhbGxfY250cl9lbmFibGVfbG9ja2VkKHN0cnVjdCB4ZV9l dV9zdGFsbF9jbnRyX3N0cmVhbSAqc3RyZWFtKQ0KPiArew0KPiArCWlmIChzdHJlYW0tPmVuYWJs ZWQpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCXN0cmVhbS0+ZW5hYmxlZCA9IHRydWU7DQo+ICsN Cj4gKwl4ZV9ldV9zdGFsbF9zdHJlYW1fZW5hYmxlKHN0cmVhbSk7DQo+ICsJaHJ0aW1lcl9zdGFy dCgmc3RyZWFtLT5wb2xsX2NoZWNrX3RpbWVyLA0KPiArCQkgICAgICBuc190b19rdGltZShzdHJl YW0tPnBvbGxfcGVyaW9kKSwNCj4gKwkJICAgICAgSFJUSU1FUl9NT0RFX1JFTCk7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt4ZV9ldV9zdGFsbF9jbnRyX2Rpc2FibGVfbG9ja2VkKHN0 cnVjdCB4ZV9ldV9zdGFsbF9jbnRyX3N0cmVhbSAqc3RyZWFtKQ0KPiArew0KPiArCWlmICghc3Ry ZWFtLT5lbmFibGVkKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlzdHJlYW0tPmVuYWJsZWQgPSBm YWxzZTsNCj4gKw0KPiArCWhydGltZXJfY2FuY2VsKCZzdHJlYW0tPnBvbGxfY2hlY2tfdGltZXIp Ow0KPiArCWZsdXNoX3dvcmtxdWV1ZShzdHJlYW0tPmJ1Zl9jaGVja193cSk7DQo+ICsJeGVfZXVf c3RhbGxfc3RyZWFtX2Rpc2FibGUoc3RyZWFtKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGxvbmcN Cj4gK3hlX2V1X3N0YWxsX2NudHJfaW9jdGxfbG9ja2VkKHN0cnVjdCB4ZV9ldV9zdGFsbF9jbnRy X3N0cmVhbSAqc3RyZWFtLA0KPiArCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQg bG9uZyBhcmcpDQo+ICt7DQo+ICsJc3dpdGNoIChjbWQpIHsNCj4gKwljYXNlIERSTV9YRV9PQlNF UlZBVElPTl9JT0NUTF9FTkFCTEU6DQo+ICsJCXhlX2V1X3N0YWxsX2NudHJfZW5hYmxlX2xvY2tl ZChzdHJlYW0pOw0KPiArCQlyZXR1cm4gMDsNCj4gKwljYXNlIERSTV9YRV9PQlNFUlZBVElPTl9J T0NUTF9ESVNBQkxFOg0KPiArCQl4ZV9ldV9zdGFsbF9jbnRyX2Rpc2FibGVfbG9ja2VkKHN0cmVh bSk7DQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAtRUlOVkFMOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAqIHhlX2V1X3N0YWxsX2NudHJfaW9jdGwgLSBzdXBwb3J0IGlv Y3RsKCkgdXNhZ2Ugd2l0aCB4ZSBFVSBzdGFsbCBjb3VudGVyDQo+ICsgKgkJCQkJCQkJc3RyZWFt IEZEcw0KPiArICogQGZpbGU6IEFuIHhlIEVVIHN0YWxsIGNudHIgc3RyZWFtIGZpbGUNCj4gKyAq IEBjbWQ6IHRoZSBpb2N0bCByZXF1ZXN0DQo+ICsgKiBAYXJnOiB0aGUgaW9jdGwgZGF0YQ0KPiAr ICoNCj4gKyAqIEltcGxlbWVudGF0aW9uIGRlZmVycmVkIHRvIHhlX2V1X3N0YWxsX2NudHJfaW9j dGxfbG9ja2VkKCkuDQo+ICsgKg0KPiArICogUmV0dXJuczogemVybyBvbiBzdWNjZXNzIG9yIGEg bmVnYXRpdmUgZXJyb3IgY29kZS4gUmV0dXJucyAtRUlOVkFMIGZvcg0KPiArICogYW4gdW5rbm93 biBpb2N0bCByZXF1ZXN0Lg0KPiArICovDQo+ICtzdGF0aWMgbG9uZyB4ZV9ldV9zdGFsbF9jbnRy X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLA0KPiArCQkJCSAgIHVuc2lnbmVkIGludCBjbWQsDQo+ ICsJCQkJICAgdW5zaWduZWQgbG9uZyBhcmcpDQo+ICt7DQo+ICsJc3RydWN0IHhlX2V1X3N0YWxs X2NudHJfc3RyZWFtICpzdHJlYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7DQo+ICsJc3RydWN0IHhl X2d0ICpndCA9IHN0cmVhbS0+Z3Q7DQo+ICsJbG9uZyByZXQ7DQo+ICsNCj4gKwltdXRleF9sb2Nr KCZndC0+ZXVfc3RhbGxfY250ci5sb2NrKTsNCj4gKwlyZXQgPSB4ZV9ldV9zdGFsbF9jbnRyX2lv Y3RsX2xvY2tlZChzdHJlYW0sIGNtZCwgYXJnKTsNCj4gKwltdXRleF91bmxvY2soJmd0LT5ldV9z dGFsbF9jbnRyLmxvY2spOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQNCj4gK3hlX2V1X3N0YWxsX2Rlc3Ryb3lfbG9ja2VkKHN0cnVjdCB4ZV9ldV9zdGFs bF9jbnRyX3N0cmVhbSAqc3RyZWFtKQ0KPiArew0KPiArCXhlX2V1X3N0YWxsX2NudHJfZGlzYWJs ZV9sb2NrZWQoc3RyZWFtKTsNCj4gKwlmcmVlX2V1X3N0YWxsX2NudHJfYnVmKHN0cmVhbSk7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICogeGVfZXVfc3RhbGxfcmVsZWFzZSAtIGhhbmRsZXMgdXNl cnNwYWNlIGNsb3NlKCkgb2YgYSBFVSBzdGFsbCBkYXRhDQo+ICsgKgkJCSAgIHN0cmVhbSBmaWxl Lg0KPiArICogQGlub2RlOiBhbm9ueW1vdXMgaW5vZGUgYXNzb2NpYXRlZCB3aXRoIGZpbGUNCj4g KyAqIEBmaWxlOiBBbiB4ZSBFVSBzdGFsbCBzdHJlYW0gZmlsZQ0KPiArICoNCj4gKyAqIENsZWFu cyB1cCBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhbiBvcGVuIEVVIHN0YWxsIGRhdGEg c3RyZWFtIGZpbGUuDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgeGVfZXVfc3RhbGxfcmVsZWFzZShz dHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkNCj4gK3sNCj4gKwlzdHJ1Y3Qg eGVfZXVfc3RhbGxfY250cl9zdHJlYW0gKnN0cmVhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsNCj4g KwlzdHJ1Y3QgeGVfZ3QgKmd0ID0gc3RyZWFtLT5ndDsNCj4gKw0KPiArCW11dGV4X2xvY2soJmd0 LT5ldV9zdGFsbF9jbnRyLmxvY2spOw0KPiArCXhlX2V1X3N0YWxsX2Rlc3Ryb3lfbG9ja2VkKHN0 cmVhbSk7DQo+ICsJa2ZyZWUoc3RyZWFtKTsNCj4gKwlndC0+ZXVfc3RhbGxfY250ci5zdHJlYW0g PSBOVUxMOw0KPiArCW11dGV4X3VubG9jaygmZ3QtPmV1X3N0YWxsX2NudHIubG9jayk7DQo+ICsN Cj4gKwkvKiBSZWxlYXNlIHRoZSByZWZlcmVuY2UgdGhlIEVVIHN0YWxsIHN0cmVhbSBrZXB0IG9u IHRoZSBkcml2ZXIgKi8NCj4gKwlkcm1fZGV2X3B1dCgmZ3QtPnRpbGUtPnhlLT5kcm0pOw0KPiAr DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9v cGVyYXRpb25zIGZvcHNfZXVfc3RhbGwgPSB7DQo+ICsJLm93bmVyCQk9IFRISVNfTU9EVUxFLA0K PiArCS5sbHNlZWsJCT0gbm9fbGxzZWVrLA0KPiArCS5yZWxlYXNlCT0geGVfZXVfc3RhbGxfcmVs ZWFzZSwNCj4gKwkucG9sbAkJPSB4ZV9ldV9zdGFsbF9idWZfcG9sbCwNCj4gKwkucmVhZAkJPSB4 ZV9ldV9zdGFsbF9idWZfcmVhZCwNCj4gKwkudW5sb2NrZWRfaW9jdGwgPSB4ZV9ldV9zdGFsbF9j bnRyX2lvY3RsLA0KPiArCS5jb21wYXRfaW9jdGwgICA9IHhlX2V1X3N0YWxsX2NudHJfaW9jdGws DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIHhlX29wZW5fZXVfc3RhbGxfc3RyZWFtX2xvY2tl ZCAtIE9wZW4gYSBFVSBzdGFsbCBkYXRhIHN0cmVhbSBGRC4NCj4gKyAqIEBkZXY6IGRybSBkZXZp Y2UgaW5zdGFuY2UNCj4gKyAqIEBwcm9wczogaW5kaXZpZHVhbGx5IHZhbGlkYXRlZCB1NjQgcHJv cGVydHkgdmFsdWUgcGFpcnMNCj4gKyAqIEBmaWxlOiBkcm0gZmlsZQ0KPiArICogQGd0OiBHVCBm cm9tIHdoaWNoIHRoZSBFVSBzdGFsbCBkYXRhIHdpbGwgYmUgY2FwdHVyZWQNCj4gKyAqDQo+ICsg KiBSZXR1cm5zOiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLg0KPiAr ICovDQo+ICtzdGF0aWMgaW50DQo+ICt4ZV9vcGVuX2V1X3N0YWxsX3N0cmVhbV9sb2NrZWQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwNCj4gKwkJCSAgICAgICBzdHJ1Y3QgZXVfc3RhbGxfb3Blbl9w cm9wZXJ0aWVzICpwcm9wcywNCj4gKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsDQo+ ICsJCQkgICAgICAgc3RydWN0IHhlX2d0ICpndCkNCj4gK3sNCj4gKwlzdHJ1Y3QgeGVfZGV2aWNl ICp4ZSA9IHRvX3hlX2RldmljZShkZXYpOw0KPiArCXN0cnVjdCB4ZV9ldV9zdGFsbF9jbnRyX3N0 cmVhbSAqc3RyZWFtOw0KPiArCXVuc2lnbmVkIGxvbmcgZl9mbGFncyA9IDA7DQo+ICsJeGVfZHNz X21hc2tfdCBhbGxfZHNzOw0KPiArCWludCByZXQsIHN0cmVhbV9mZDsNCj4gKwl1MzIgdGlsZV9i dWZfc2l6ZTsNCj4gKw0KPiArCWJpdG1hcF9vcihhbGxfZHNzLCBndC0+ZnVzZV90b3BvLmdfZHNz X21hc2ssIGd0LT5mdXNlX3RvcG8uY19kc3NfbWFzaywNCj4gKwkJICBYRV9NQVhfRFNTX0ZVU0Vf QklUUyk7DQo+ICsNCj4gKwlpZiAoeGVfb2JzZXJ2YXRpb25fcGFyYW5vaWQgJiYgIXBlcmZtb25f Y2FwYWJsZSgpKSB7DQo+ICsJCWRybV9kYmcoJnhlLT5kcm0sICJJbnN1ZmZpY2llbnQgcHJpdmls ZWdlcyBmb3IgRVUgc3RhbGwgbW9uaXRvcmluZ1xuIik7DQo+ICsJCXJldHVybiAtRUFDQ0VTOw0K PiArCX0NCj4gKw0KPiArCS8qIE9ubHkgb25lIHNlc3Npb24gY2FuIGJlIGFjdGl2ZSBhdCBhbnkg dGltZSAqLw0KPiArCWlmIChndC0+ZXVfc3RhbGxfY250ci5zdHJlYW0pIHsNCj4gKwkJZHJtX2Ri ZygmeGUtPmRybSwgIkVVIHN0YWxsIGNudHIgc2Vzc2lvbiBhbHJlYWR5IGFjdGl2ZVxuIik7DQo+ ICsJCXJldHVybiAtRUJVU1k7DQo+ICsJfQ0KPiArDQo+ICsJdGlsZV9idWZfc2l6ZSA9IHByb3Bz LT5ldV9zdGFsbF9idWZfc3ogKiAoeGVfZHNzX21hc2tfbGFzdF9kc3MoYWxsX2RzcykgKyAxKTsN Cj4gKwlpZiAocHJvcHMtPmV2ZW50X3JlcG9ydF9jb3VudCA+IG51bV9kYXRhX3Jvd3ModGlsZV9i dWZfc2l6ZSkpIHsNCj4gKwkJZHJtX2RiZygmeGUtPmRybSwgIkludmFsaWQgRVUgc3RhbGwgZGF0 YSBwb2xsIGV2ZW50IHJlcG9ydCBjb3VudCAldVxuIiwNCj4gKwkJCXByb3BzLT5ldmVudF9yZXBv cnRfY291bnQpOw0KPiArCQlkcm1fZGJnKCZ4ZS0+ZHJtLCAiTWF4aW11bSBldmVudCByZXBvcnQg Y291bnQgZm9yIHRoZSBnaXZlbiBidWZmZXIgc2l6ZSBpcyAldVxuIiwNCj4gKwkJCW51bV9kYXRh X3Jvd3ModGlsZV9idWZfc2l6ZSkpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsN Cj4gKwlzdHJlYW0gPSBremFsbG9jKHNpemVvZigqc3RyZWFtKSwgR0ZQX0tFUk5FTCk7DQo+ICsJ aWYgKCFzdHJlYW0pDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJZ3QtPmV1X3N0YWxs X2NudHIuc3RyZWFtID0gc3RyZWFtOw0KPiArCXN0cmVhbS0+Z3QgPSBndDsNCj4gKw0KPiArCXJl dCA9IHhlX2V1X3N0YWxsX3N0cmVhbV9pbml0KHN0cmVhbSwgcHJvcHMpOw0KPiArCWlmIChyZXQp IHsNCj4gKwkJZHJtX2RiZygmeGUtPmRybSwgIkVVIHN0YWxsIHN0cmVhbSBpbml0IGZhaWxlZCA6 ICVkXG4iLCByZXQpOw0KPiArCQlnb3RvIGVycl9hbGxvYzsNCj4gKwl9DQo+ICsNCj4gKwlzdHJl YW1fZmQgPSBhbm9uX2lub2RlX2dldGZkKCJbeGVfZXVfc3RhbGxdIiwgJmZvcHNfZXVfc3RhbGws DQo+ICsJCQkJICAgICBzdHJlYW0sIGZfZmxhZ3MpOw0KPiArCWlmIChzdHJlYW1fZmQgPCAwKSB7 DQo+ICsJCXJldCA9IHN0cmVhbV9mZDsNCj4gKwkJZHJtX2RiZygmeGUtPmRybSwgIkVVIHN0YWxs IGlub2RlIGdldCBmZCBmYWlsZWQgOiAlZFxuIiwgcmV0KTsNCj4gKwkJZ290byBlcnJfb3BlbjsN Cj4gKwl9DQo+ICsNCj4gKwlpZiAoIXByb3BzLT5vcGVuX2Rpc2FibGVkKQ0KPiArCQl4ZV9ldV9z dGFsbF9jbnRyX2VuYWJsZV9sb2NrZWQoc3RyZWFtKTsNCj4gKw0KPiArCS8qIFRha2UgYSByZWZl cmVuY2Ugb24gdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUga2VwdCB3aXRoIHN0cmVhbV9mZA0KPiAr CSAqIHVudGlsIGl0cyByZWxlYXNlLg0KPiArCSAqLw0KPiArCWRybV9kZXZfZ2V0KCZndC0+dGls ZS0+eGUtPmRybSk7DQo+ICsNCj4gKwlyZXR1cm4gc3RyZWFtX2ZkOw0KPiArDQo+ICtlcnJfb3Bl bjoNCj4gKwlmcmVlX2V1X3N0YWxsX2NudHJfYnVmKHN0cmVhbSk7DQo+ICtlcnJfYWxsb2M6DQo+ ICsJZ3QtPmV1X3N0YWxsX2NudHIuc3RyZWFtID0gTlVMTDsNCj4gKwlrZnJlZShzdHJlYW0pOw0K PiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK2ludCB4ZV9vcGVuX2V1X3N0YWxsX3N0cmVh bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LA0KPiArCQkJICAgIHU2NCBkYXRhLA0KPiArCQkJICAg IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9 IHRvX3hlX2RldmljZShkZXYpOw0KPiArCXN0cnVjdCBldV9zdGFsbF9vcGVuX3Byb3BlcnRpZXMg cHJvcHM7DQo+ICsJc3RydWN0IHhlX2d0ICpndDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJbWVt c2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBldV9zdGFsbF9vcGVuX3Byb3BlcnRpZXMpKTsN Cj4gKw0KPiArCS8qIFNldCBkZWZhdWx0IHZhbHVlcyAqLw0KPiArCXByb3BzLmd0X2lkID0gMDsN Cj4gKwlwcm9wcy5ldV9zdGFsbF9idWZfc3ogPSBTWl8yNTZLOw0KPiArCXByb3BzLmV1X3N0YWxs X3NhbXBsaW5nX3JhdGUgPSA0Ow0KPiArCXByb3BzLnBvbGxfcGVyaW9kID0gREVGQVVMVF9QT0xM X1BFUklPRF9OUzsNCj4gKwlwcm9wcy5ldmVudF9yZXBvcnRfY291bnQgPSAxOw0KPiArDQo+ICsJ cmV0ID0geGVfZXVfc3RhbGxfdXNlcl9leHRlbnNpb25zKHhlLCBkYXRhLCAwLCAmcHJvcHMpOw0K PiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlndCA9IHhlX2RldmljZV9n ZXRfZ3QoeGUsIHByb3BzLmd0X2lkKTsNCj4gKwlpZiAoIWd0KSB7DQo+ICsJCWRybV9kYmcoJnhl LT5kcm0sICJJbnZhbGlkIEdUIGZvciBFVSBzdGFsbCBzYW1wbGluZyBcbiIpOw0KPiArCQlyZXR1 cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwltdXRleF9sb2NrKCZndC0+ZXVfc3RhbGxfY250 ci5sb2NrKTsNCj4gKwlyZXQgPSB4ZV9vcGVuX2V1X3N0YWxsX3N0cmVhbV9sb2NrZWQoZGV2LCAm cHJvcHMsIGZpbGUsIGd0KTsNCj4gKwltdXRleF91bmxvY2soJmd0LT5ldV9zdGFsbF9jbnRyLmxv Y2spOw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0veGUveGVfZXVzdGFsbF9jbnRyLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZXVzdGFsbF9j bnRyLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi43YTk5 YjhjODE5ZDMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVf ZXVzdGFsbF9jbnRyLmgNCj4gQEAgLTAsMCArMSw2MiBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IE1JVCAqLw0KPiArLyoNCj4gKyAqIENvcHlyaWdodCDCqSAyMDI0IEludGVsIENv cnBvcmF0aW9uDQo+ICsgKi8NCj4gKw0KPiArI2lmbmRlZiBfX1hFX0VVU1RBTExfQ05UUl9IX18N Cj4gKyNkZWZpbmUgX19YRV9FVVNUQUxMX0NOVFJfSF9fDQo+ICsNCj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2ZpbGUuaD4NCj4gKyNpbmNsdWRlIDxkcm0veGVfZHJtLmg+DQo+ICsjaW5jbHVkZSAicmVn cy94ZV9ldV9zdGFsbF9yZWdzLmgiDQo+ICsNCj4gKyNkZWZpbmUgWEVfTUFYX0RTUwkxMjgNCj4g Kw0KPiArc3RydWN0IHBlcl9kc3NfYnVmIHsNCj4gKwl1OCAqdmFkZHI7DQo+ICsJdTMyIHdyaXRl Ow0KPiArCXUzMiByZWFkOw0KPiArCWJvb2wgbGluZV9kcm9wOw0KPiArCS8qIGxvY2sgdG8gcHJv dGVjdCByZWFkIGFuZCB3cml0ZSBwb2ludGVycyAqLw0KPiArCXN0cnVjdCBtdXRleCBsb2NrOw0K PiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBzdHJ1Y3QgeGVfZXVfc3RhbGxfY250cl9zdHJlYW0g LSBzdGF0ZSBvZiBFVSBzdGFsbCBjb3VudGVyIHN0cmVhbSBGRA0KPiArICovDQo+ICtzdHJ1Y3Qg eGVfZXVfc3RhbGxfY250cl9zdHJlYW0gew0KPiArCXN0cnVjdCB4ZV9ibyAqYm87DQo+ICsJc3Ry dWN0IHhlX2d0ICpndDsNCj4gKw0KPiArCWJvb2wgZW5hYmxlZDsNCj4gKwlib29sIHBvbGxpbjsN Cj4gKwlzaXplX3QgcGVyX2Rzc19idWZfc2l6ZTsNCj4gKwlzdHJ1Y3QgaHJ0aW1lciBwb2xsX2No ZWNrX3RpbWVyOw0KPiArCXN0cnVjdCB3b3JrX3N0cnVjdCBidWZfY2hlY2tfd29yazsNCj4gKwlz dHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYnVmX2NoZWNrX3dxOw0KPiArCXdhaXRfcXVldWVfaGVh ZF90IHBvbGxfd3E7DQo+ICsJdTMyIGV2ZW50X3JlcG9ydF9jb3VudDsNCj4gKwl1NjQgcG9sbF9w ZXJpb2Q7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBTdGF0ZSBvZiB0aGUgRVUgc3RhbGwgY291bnRl ciBidWZmZXIuDQo+ICsJICovDQo+ICsJdTggKnZhZGRyOw0KPiArCXN0cnVjdCBwZXJfZHNzX2J1 ZiBkc3NfYnVmW1hFX01BWF9EU1NdOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IHhlX2V1X3N0YWxs X2NudHJfZ3Qgew0KPiArCS8qIExvY2sgdG8gcHJvdGVjdCBzdHJlYW0gKi8NCj4gKwlzdHJ1Y3Qg bXV0ZXggbG9jazsNCj4gKw0KPiArCS8qIEV4ZWN1dGlvbiBVbml0IChFVSkgc3RhbGwgY291bnRl ciBzdHJlYW0gKi8NCj4gKwlzdHJ1Y3QgeGVfZXVfc3RhbGxfY250cl9zdHJlYW0gKnN0cmVhbTsN Cj4gK307DQo+ICsNCj4gK3ZvaWQgeGVfZXVzdGFsbF9jbnRyX2luaXQoc3RydWN0IHhlX2d0ICpn dCk7DQo+ICsNCj4gK2ludCB4ZV9vcGVuX2V1X3N0YWxsX3N0cmVhbShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LA0KPiArCQkJICAgIHU2NCBkYXRhLA0KPiArCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZSk7DQo+ICsNCj4gKyNlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hl L3hlX2d0LmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3QuYw0KPiBpbmRleCBjZTg5OTRiODA4 ZmUuLjc0ZjQyMDVhNmQ2MCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0 LmMNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d0LmMNCj4gQEAgLTYxLDYgKzYxLDcg QEANCj4gICNpbmNsdWRlICJ4ZV92bS5oIg0KPiAgI2luY2x1ZGUgInhlX3dhLmgiDQo+ICAjaW5j bHVkZSAieGVfd29wY20uaCINCj4gKyNpbmNsdWRlICJ4ZV9ldXN0YWxsX2NudHIuaCINCj4gIA0K PiAgc3RhdGljIHZvaWQgZ3RfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB2b2lkICphcmcp DQo+ICB7DQo+IEBAIC02MjIsNiArNjIzLDggQEAgaW50IHhlX2d0X2luaXQoc3RydWN0IHhlX2d0 ICpndCkNCj4gIA0KPiAgCXhlX2d0X3JlY29yZF91c2VyX2VuZ2luZXMoZ3QpOw0KPiAgDQo+ICsJ eGVfZXVzdGFsbF9jbnRyX2luaXQoZ3QpOw0KPiArDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+ICAN Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF90b3BvbG9neS5jIGIvZHJp dmVycy9ncHUvZHJtL3hlL3hlX2d0X3RvcG9sb2d5LmMNCj4gaW5kZXggMjVmZjAzYWI4NDQ4Li41 NGE1NzE3OWE1M2MgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF90b3Bv bG9neS5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF90b3BvbG9neS5jDQo+IEBA IC0yNDcsNiArMjQ3LDE1IEBAIHhlX2Rzc19tYXNrX2dyb3VwX2Zmcyhjb25zdCB4ZV9kc3NfbWFz a190IG1hc2ssIGludCBncm91cHNpemUsIGludCBncm91cG51bSkNCj4gIAlyZXR1cm4gZmluZF9u ZXh0X2JpdChtYXNrLCBYRV9NQVhfRFNTX0ZVU0VfQklUUywgZ3JvdXBudW0gKiBncm91cHNpemUp Ow0KPiAgfQ0KPiAgDQo+ICsvKg0KPiArICogVXNlZCB0byBvYnRhaW4gdGhlIGluZGV4IG9mIHRo ZSBsYXN0IERTUy4NCj4gKyAqLw0KPiArdW5zaWduZWQgaW50DQo+ICt4ZV9kc3NfbWFza19sYXN0 X2Rzcyhjb25zdCB4ZV9kc3NfbWFza190IG1hc2spDQo+ICt7DQo+ICsJcmV0dXJuIGZpbmRfbGFz dF9iaXQobWFzaywgWEVfTUFYX0RTU19GVVNFX0JJVFMpOw0KPiArfQ0KPiArDQo+ICBib29sIHhl X2Rzc19tYXNrX2VtcHR5KGNvbnN0IHhlX2Rzc19tYXNrX3QgbWFzaykNCj4gIHsNCj4gIAlyZXR1 cm4gYml0bWFwX2VtcHR5KG1hc2ssIFhFX01BWF9EU1NfRlVTRV9CSVRTKTsNCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF90b3BvbG9neS5oIGIvZHJpdmVycy9ncHUvZHJt L3hlL3hlX2d0X3RvcG9sb2d5LmgNCj4gaW5kZXggNzQ2YjMyNWJiZjZlLi43ZWUwMjI3ODQzOTcg MTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF90b3BvbG9neS5oDQo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndF90b3BvbG9neS5oDQo+IEBAIC0yOCw2ICsyOCw5 IEBAIHZvaWQgeGVfZ3RfdG9wb2xvZ3lfZHVtcChzdHJ1Y3QgeGVfZ3QgKmd0LCBzdHJ1Y3QgZHJt X3ByaW50ZXIgKnApOw0KPiAgdW5zaWduZWQgaW50DQo+ICB4ZV9kc3NfbWFza19ncm91cF9mZnMo Y29uc3QgeGVfZHNzX21hc2tfdCBtYXNrLCBpbnQgZ3JvdXBzaXplLCBpbnQgZ3JvdXBudW0pOw0K PiAgDQo+ICt1bnNpZ25lZCBpbnQNCj4gK3hlX2Rzc19tYXNrX2xhc3RfZHNzKGNvbnN0IHhlX2Rz c19tYXNrX3QgbWFzayk7DQo+ICsNCj4gIGJvb2wgeGVfZHNzX21hc2tfZW1wdHkoY29uc3QgeGVf ZHNzX21hc2tfdCBtYXNrKTsNCj4gIA0KPiAgYm9vbA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3hlL3hlX2d0X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3RfdHlwZXMu aA0KPiBpbmRleCA2YjVlMGI0NWVmYjAuLjYwOWRiMDE1NDEyMiAxMDA2NDQNCj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL3hlL3hlX2d0X3R5cGVzLmgNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hl L3hlX2d0X3R5cGVzLmgNCj4gQEAgLTE2LDYgKzE2LDcgQEANCj4gICNpbmNsdWRlICJ4ZV9yZWdf c3JfdHlwZXMuaCINCj4gICNpbmNsdWRlICJ4ZV9zYV90eXBlcy5oIg0KPiAgI2luY2x1ZGUgInhl X3VjX3R5cGVzLmgiDQo+ICsjaW5jbHVkZSAieGVfZXVzdGFsbF9jbnRyLmgiDQo+ICANCj4gIHN0 cnVjdCB4ZV9leGVjX3F1ZXVlX29wczsNCj4gIHN0cnVjdCB4ZV9taWdyYXRlOw0KPiBAQCAtMzkx LDYgKzM5Miw5IEBAIHN0cnVjdCB4ZV9ndCB7DQo+ICANCj4gIAkvKiogQG9hOiBvYSBvYnNlcnZh dGlvbiBzdWJzeXN0ZW0gcGVyIGd0IGluZm8gKi8NCj4gIAlzdHJ1Y3QgeGVfb2FfZ3Qgb2E7DQo+ ICsNCj4gKwkvKiogQGV1X3N0YWxsX2NudHI6IEVVIHN0YWxsIGNvdW50ZXJzIHN1YnN5c3RlbSBw ZXIgZ3QgaW5mbyAqLw0KPiArCXN0cnVjdCB4ZV9ldV9zdGFsbF9jbnRyX2d0IGV1X3N0YWxsX2Nu dHI7DQo+ICB9Ow0KPiAgDQo+ICAjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS94ZS94ZV9vYnNlcnZhdGlvbi5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX29ic2VydmF0aW9u LmMNCj4gaW5kZXggZmNiNTg0YjQyYTdkLi41ZGI5YzU4OWNlMjQgMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS94ZS94ZV9vYnNlcnZhdGlvbi5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS94ZS94ZV9vYnNlcnZhdGlvbi5jDQo+IEBAIC04LDYgKzgsNyBAQA0KPiAgDQo+ICAjaW5jbHVk ZSA8ZHJtL3hlX2RybS5oPg0KPiAgDQo+ICsjaW5jbHVkZSAieGVfZXVzdGFsbF9jbnRyLmgiDQo+ ICAjaW5jbHVkZSAieGVfb2EuaCINCj4gICNpbmNsdWRlICJ4ZV9vYnNlcnZhdGlvbi5oIg0KPiAg DQo+IEBAIC0yOSw2ICszMCwxNyBAQCBzdGF0aWMgaW50IHhlX29hX2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1feGVfb2JzZXJ2YXRpb25fcGFyYW0gKg0KPiAgCX0NCj4g IH0NCj4gIA0KPiArc3RhdGljIGludCB4ZV9ldV9zdGFsbF9pb2N0bChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCBzdHJ1Y3QgZHJtX3hlX29ic2VydmF0aW9uX3BhcmFtICphcmcsDQo+ICsJCQkgICAg IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkNCj4gK3sNCj4gKwlzd2l0Y2ggKGFyZy0+b2JzZXJ2YXRp b25fb3ApIHsNCj4gKwljYXNlIERSTV9YRV9PQlNFUlZBVElPTl9PUF9TVFJFQU1fT1BFTjoNCj4g KwkJcmV0dXJuIHhlX29wZW5fZXVfc3RhbGxfc3RyZWFtKGRldiwgYXJnLT5wYXJhbSwgZmlsZSk7 DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ ICAvKioNCj4gICAqIHhlX29ic2VydmF0aW9uX2lvY3RsIC0gVGhlIHRvcCBsZXZlbCBvYnNlcnZh dGlvbiBsYXllciBpb2N0bA0KPiAgICogQGRldjogQGRybV9kZXZpY2UNCj4gQEAgLTUxLDYgKzYz LDggQEAgaW50IHhlX29ic2VydmF0aW9uX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZv aWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmkNCj4gIAlzd2l0Y2ggKGFyZy0+b2JzZXJ2YXRp b25fdHlwZSkgew0KPiAgCWNhc2UgRFJNX1hFX09CU0VSVkFUSU9OX1RZUEVfT0E6DQo+ICAJCXJl dHVybiB4ZV9vYV9pb2N0bChkZXYsIGFyZywgZmlsZSk7DQo+ICsJY2FzZSBEUk1fWEVfT0JTRVJW QVRJT05fVFlQRV9FVV9TVEFMTDoNCj4gKwkJcmV0dXJuIHhlX2V1X3N0YWxsX2lvY3RsKGRldiwg YXJnLCBmaWxlKTsNCj4gIAlkZWZhdWx0Og0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gIAl9DQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfdHJhY2UuaCBiL2RyaXZlcnMvZ3B1 L2RybS94ZS94ZV90cmFjZS5oDQo+IGluZGV4IDA5Y2ExYWQwNTdiMC4uZWY1MzJlYWUzZjg4IDEw MDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfdHJhY2UuaA0KPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0veGUveGVfdHJhY2UuaA0KPiBAQCAtMzc0LDYgKzM3NCw0MSBAQCBUUkFDRV9F VkVOVCh4ZV9yZWdfcncsDQo+ICAJCSAgKHUzMikoX19lbnRyeS0+dmFsID4+IDMyKSkNCj4gICk7 DQo+ICANCj4gK1RSQUNFX0VWRU5UKHhlX2V1X3N0YWxsX2NudHJfcmVhZCwNCj4gKwkgICAgVFBf UFJPVE8odTggc2xpY2UsIHU4IHN1YnNsaWNlLA0KPiArCQkgICAgIHUzMiByZWFkX3B0ciwgdTMy IHdyaXRlX3B0ciwNCj4gKwkJICAgICB1MzIgcmVhZF9vZmZzZXQsIHUzMiB3cml0ZV9vZmZzZXQs DQo+ICsJCSAgICAgc2l6ZV90IHRvdGFsX3NpemUpLA0KPiArCSAgICBUUF9BUkdTKHNsaWNlLCBz dWJzbGljZSwgcmVhZF9wdHIsIHdyaXRlX3B0ciwNCj4gKwkJICAgIHJlYWRfb2Zmc2V0LCB3cml0 ZV9vZmZzZXQsIHRvdGFsX3NpemUpLA0KPiArDQo+ICsJICAgIFRQX1NUUlVDVF9fZW50cnkoDQo+ ICsJCQkgICAgIF9fZmllbGQodTgsIHNsaWNlKQ0KPiArCQkJICAgICBfX2ZpZWxkKHU4LCBzdWJz bGljZSkNCj4gKwkJCSAgICAgX19maWVsZCh1MzIsIHJlYWRfcHRyKQ0KPiArCQkJICAgICBfX2Zp ZWxkKHUzMiwgd3JpdGVfcHRyKQ0KPiArCQkJICAgICBfX2ZpZWxkKHUzMiwgcmVhZF9vZmZzZXQp DQo+ICsJCQkgICAgIF9fZmllbGQodTMyLCB3cml0ZV9vZmZzZXQpDQo+ICsJCQkgICAgIF9fZmll bGQoc2l6ZV90LCB0b3RhbF9zaXplKQ0KPiArCQkJICAgICApLA0KPiArDQo+ICsJICAgIFRQX2Zh c3RfYXNzaWduKA0KPiArCQkJICAgX19lbnRyeS0+c2xpY2UgPSBzbGljZTsNCj4gKwkJCSAgIF9f ZW50cnktPnN1YnNsaWNlID0gc3Vic2xpY2U7DQo+ICsJCQkgICBfX2VudHJ5LT5yZWFkX3B0ciA9 IHJlYWRfcHRyOw0KPiArCQkJICAgX19lbnRyeS0+d3JpdGVfcHRyID0gd3JpdGVfcHRyOw0KPiAr CQkJICAgX19lbnRyeS0+cmVhZF9vZmZzZXQgPSByZWFkX29mZnNldDsNCj4gKwkJCSAgIF9fZW50 cnktPndyaXRlX29mZnNldCA9IHdyaXRlX29mZnNldDsNCj4gKwkJCSAgIF9fZW50cnktPnRvdGFs X3NpemUgPSB0b3RhbF9zaXplOw0KPiArCQkJICAgKSwNCj4gKw0KPiArCSAgICBUUF9wcmludGso InNsaWNlOiV1IHN1YnNsaWNlOiV1IHJlYWRwdHI6MHgleCB3cml0ZXB0cjoweCV4IHJlYWQgb2Zm OiV1IHdyaXRlIG9mZjoldSBzaXplOiV6dSAiLA0KPiArCQkgICAgICBfX2VudHJ5LT5zbGljZSwg X19lbnRyeS0+c3Vic2xpY2UsDQo+ICsJCSAgICAgIF9fZW50cnktPnJlYWRfcHRyLCBfX2VudHJ5 LT53cml0ZV9wdHIsDQo+ICsJCSAgICAgIF9fZW50cnktPnJlYWRfb2Zmc2V0LCBfX2VudHJ5LT53 cml0ZV9vZmZzZXQsDQo+ICsJCSAgICAgIF9fZW50cnktPnRvdGFsX3NpemUpDQo+ICspOw0KPiAr DQo+ICAjZW5kaWYNCj4gIA0KPiAgLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0 aW9uICovDQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL3hlX2RybS5oIGIvaW5jbHVk ZS91YXBpL2RybS94ZV9kcm0uaA0KPiBpbmRleCAxOTYxOWQ0OTUyYTguLjM0M2RlNzAwZDEwZCAx MDA2NDQNCj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS94ZV9kcm0uaA0KPiArKysgYi9pbmNsdWRl L3VhcGkvZHJtL3hlX2RybS5oDQo+IEBAIC0xMzg3LDYgKzEzODcsOCBAQCBzdHJ1Y3QgZHJtX3hl X3dhaXRfdXNlcl9mZW5jZSB7DQo+ICBlbnVtIGRybV94ZV9vYnNlcnZhdGlvbl90eXBlIHsNCj4g IAkvKiogQERSTV9YRV9PQlNFUlZBVElPTl9UWVBFX09BOiBPQSBvYnNlcnZhdGlvbiBzdHJlYW0g dHlwZSAqLw0KPiAgCURSTV9YRV9PQlNFUlZBVElPTl9UWVBFX09BLA0KPiArCS8qKiBARFJNX1hF X09CU0VSVkFUSU9OX1RZUEVfRVVfU1RBTEw6IEVVIHN0YWxsIHNhbXBsaW5nIG9ic2VydmF0aW9u IHN0cmVhbSB0eXBlICovDQo+ICsJRFJNX1hFX09CU0VSVkFUSU9OX1RZUEVfRVVfU1RBTEwsDQo+ ICB9Ow0KPiAgDQo+ICAvKioNCj4gQEAgLTE2ODYsNiArMTY4OCw4MSBAQCBzdHJ1Y3QgZHJtX3hl X29hX3N0cmVhbV9pbmZvIHsNCj4gIAlfX3U2NCByZXNlcnZlZFszXTsNCj4gIH07DQo+ICANCj4g Ky8qKg0KPiArICogZW51bSBkcm1feGVfZXVfc3RhbGxfcHJvcGVydHlfaWQgLSBFVSBzdGFsbCBk YXRhIHN0cmVhbSBwcm9wZXJ0eSBpZHMuDQo+ICsgKg0KPiArICogVGhlc2UgcHJvcGVydGllcyBh cmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIgYXMgYSBjaGFpbiBvZg0KPiArICogQGRybV94ZV9leHRf c2V0X3Byb3BlcnR5IHN0cnVjdHVyZXMgd2l0aCBAcHJvcGVydHkgc2V0IHRvIHRoZXNlDQo+ICsg KiBwcm9wZXJ0aWVzJyBlbnVtcyBhbmQgQHZhbHVlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB2 YWx1ZXMgb2YgdGhlc2UNCj4gKyAqIHByb3BlcnRpZXMuIEBkcm1feGVfdXNlcl9leHRlbnNpb24g YmFzZS5uYW1lIHNob3VsZCBiZSBzZXQgdG8NCj4gKyAqIEBEUk1fWEVfRVVfU1RBTExfRVhURU5T SU9OX1NFVF9QUk9QRVJUWS4NCj4gKyAqLw0KPiArZW51bSBkcm1feGVfZXVfc3RhbGxfcHJvcGVy dHlfaWQgew0KPiArI2RlZmluZSBEUk1fWEVfRVVfU1RBTExfRVhURU5TSU9OX1NFVF9QUk9QRVJU WQkJMA0KPiArCS8qKg0KPiArCSAqIEBEUk1fWEVfRVVfU1RBTExfUFJPUF9CVUZfU1o6IFBlciBE U1MgTWVtb3J5IEJ1ZmZlciBTaXplLg0KPiArCSAqIFZhbGlkIHZhbHVlcyBhcmUgMTI4IEtCLCAy NTYgS0IsIGFuZCA1MTIgS0IuDQo+ICsJICovDQo+ICsJRFJNX1hFX0VVX1NUQUxMX1BST1BfQlVG X1NaID0gMSwNCj4gKw0KPiArCS8qKg0KPiArCSAqIEBEUk1fWEVfRVVfU1RBTExfUFJPUF9TQU1Q TEVfUkFURTogU2FtcGxpbmcgcmF0ZQ0KPiArCSAqIGluIG11bHRpcGxlcyBvZiAyNTEgY3ljbGVz LiBWYWxpZCB2YWx1ZXMgYXJlIDEgdG8gNy4NCj4gKwkgKiBJZiB0aGUgdmFsdWUgaXMgMSwgc2Ft cGxpbmcgaW50ZXJ2YWwgaXMgMjUxIGN5Y2xlcy4NCj4gKwkgKiBJZiB0aGUgdmFsdWUgaXMgNywg c2FtcGxpbmcgaW50ZXJ2YWwgaXMgNyB4IDI1MSBjeWNsZXMuDQo+ICsJICovDQo+ICsJRFJNX1hF X0VVX1NUQUxMX1BST1BfU0FNUExFX1JBVEUsDQo+ICsNCj4gKwkvKioNCj4gKwkgKiBARFJNX1hF X0VVX1NUQUxMX1BST1BfUE9MTF9QRVJJT0Q6IEVVIHN0YWxsIGRhdGENCj4gKwkgKiBwb2xsIHBl cmlvZCBpbiBuYW5vc2Vjb25kcy4gc2hvdWxkIGJlIGF0IGxlYXN0IDEwMDAwMCBucy4NCj4gKwkg Ki8NCj4gKwlEUk1fWEVfRVVfU1RBTExfUFJPUF9QT0xMX1BFUklPRCwNCj4gKw0KPiArCS8qKg0K PiArCSAqIEBEUk1fWEVfRVVfU1RBTExfUFJPUF9FVkVOVF9SRVBPUlRfQ09VTlQ6IE1pbmltdW0g bnVtYmVyIG9mDQo+ICsJICogRVUgc3RhbGwgZGF0YSByb3dzIHRvIGJlIHByZXNlbnQgaW4gdGhl IGtlcm5lbCBidWZmZXIgZm9yDQo+ICsJICogcG9sbCgpIHRvIHNldCBQT0xMSU4gKGRhdGEgcHJl c2VudCkuDQo+ICsJICovDQo+ICsJRFJNX1hFX0VVX1NUQUxMX1BST1BfRVZFTlRfUkVQT1JUX0NP VU5ULA0KPiArDQo+ICsJLyoqDQo+ICsJICogQERSTV9YRV9FVV9TVEFMTF9QUk9QX0dUX0lEOiBH VCBJRCBvZiB0aGUgR1Qgb24gd2hpY2gNCj4gKwkgKiBFVSBzdGFsbCBkYXRhIHdpbGwgYmUgY2Fw dHVyZWQuDQo+ICsJICovDQo+ICsJRFJNX1hFX0VVX1NUQUxMX1BST1BfR1RfSUQsDQo+ICsNCj4g KwkvKioNCj4gKwkgKiBARFJNX1hFX0VVX1NUQUxMX1BST1BfT1BFTl9ESVNBQkxFRDogQSB2YWx1 ZSBvZiAxIHdpbGwgb3Blbg0KPiArCSAqIHRoZSBFVSBzdGFsbCBkYXRhIHN0cmVhbSB3aXRob3V0 IGVuYWJsaW5nIEVVIHN0YWxsIHNhbXBsaW5nLg0KPiArCSAqLw0KPiArCURSTV9YRV9FVV9TVEFM TF9QUk9QX09QRU5fRElTQUJMRUQsDQo+ICsNCj4gKwlEUk1fWEVfRVVfU1RBTExfUFJPUF9NQVgN Cj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogc3RydWN0IGRybV94ZV9ldV9zdGFsbF9kYXRhX2hl YWRlciAtIEVVIHN0YWxsIGRhdGEgaGVhZGVyLg0KPiArICogSGVhZGVyIHdpdGggYWRkaXRpb25h bCBpbmZvcm1hdGlvbiB0aGF0IHRoZSBkcml2ZXIgYWRkcw0KPiArICogYmVmb3JlIEVVIHN0YWxs IGRhdGEgb2YgZWFjaCBzdWJzbGljZSBkdXJpbmcgcmVhZCgpLg0KPiArICovDQo+ICtzdHJ1Y3Qg ZHJtX3hlX2V1X3N0YWxsX2RhdGFfaGVhZGVyIHsNCj4gKwkvKiogQHN1YnNsaWNlOiBzdWJzbGlj ZSBudW1iZXIgZnJvbSB3aGljaCB0aGUgZm9sbG93aW5nIGRhdGENCj4gKwkgKiBoYXMgYmVlbiBj YXB0dXJlZC4NCj4gKwkgKi8NCj4gKwlfX3UxNiBzdWJzbGljZTsNCj4gKwkvKiogQGZsYWdzOiBm bGFncyAqLw0KPiArCV9fdTE2IGZsYWdzOw0KPiArLyogRVUgc3RhbGwgZGF0YSBkcm9wcGVkIGJ5 IHRoZSBIVyBkdWUgdG8gbWVtb3J5IGJ1ZmZlciBiZWluZyBmdWxsICovDQo+ICsjZGVmaW5lIFhF X0VVX1NUQUxMX0ZMQUdfT1ZFUkZMT1dfRFJPUAkoMSA8PCAwKQ0KPiArCS8qKiBAcmVjb3JkX3Np emU6IHNpemUgb2YgZWFjaCBFVSBzdGFsbCBkYXRhIHJlY29yZCAqLw0KPiArCV9fdTE2IHJlY29y ZF9zaXplOw0KPiArCS8qKiBAbnVtX3JlY29yZHM6IG51bWJlciBvZiByZWNvcmRzIGZvbGxvd2lu ZyB0aGUgaGVhZGVyICovDQo+ICsJX191MTYgbnVtX3JlY29yZHM7DQo+ICsJLyoqIEByZXNlcnZl ZDogUmVzZXJ2ZWQgKi8NCj4gKwlfX3UxNiByZXNlcnZlZFs0XTsNCj4gK307DQo+ICsNCj4gICNp ZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQ0KPiAgfQ0KPiAgI2VuZGlmDQoNCg==