From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 48AFB155324; Fri, 1 Nov 2024 07:29:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.12 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1730446178; cv=fail; b=m29O6GqdLECytTwT7KOdDKVMsVXOeWBSEH1s3CyH4tOmXsQ+DBryK0+M7OxN83Mmyk/rUeax3LVEyt/RhVL69j7TwEil+VWpqh7IkgDWSESIeLLeuR/zEgMxMlmZT8RZek3vqjPYKxxYE2bzmRPsGp3Fka0cAVs/lY16TOAnwcw= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1730446178; c=relaxed/simple; bh=mwR7CAa6SonsaMcrH2lbX1WYWAfhffLQndXLXmbLpnc=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=TLnLPOjIZrL5kEQvp7aIdX9/7WB/f5kDORc6MsD5kKTqPLpJIL7DLRBMMYaKSuaM7AJmT0ds1gL+64k/fGu8k7ly8+J7/9Tbdn/t3qxSYS52+ohroRjr1SvNloKCGIafOxhDrEEVkbtP0fnXfqY0UxfBQiNr+gRJvrL/dpoALAQ= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=OlJ0CabG; arc=fail smtp.client-ip=198.175.65.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="OlJ0CabG" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1730446176; x=1761982176; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=mwR7CAa6SonsaMcrH2lbX1WYWAfhffLQndXLXmbLpnc=; b=OlJ0CabG3NI54keNt3wwDJzNAXzH6BJQmiOEgYZSrYIDeB2Vu4pMkOAo hdu5Omq86ndxUt4qMbkcL3ff3ms2cIMdglGjkQiM//1/miWmBGaikFG1b nep4zkrLF5BtR5711fErNqVkBAkEmUUwXXjvjoZF3o/K9uLDYKYji57Jo +ftvbF1ZEB6uNURhHGgttRX4VZkBusuz7M3z43CgTwYcByBh7/iKXbMyr RKWW631VZ+rEs8RF1/gZdJ2GJLvKtRG0++5lFOFyhX4P2InlKtAYMuwwz UPd1OB/cNLZxnRF0/utascHcXbPjjjZTPJoFTYDKnFqD9YIv99ezQM9qa A==; X-CSE-ConnectionGUID: FQn044MIS4mEktuTOhLWHA== X-CSE-MsgGUID: 8PkrNp6+QkKxGQrUXcjp1A== X-IronPort-AV: E=McAfee;i="6700,10204,11242"; a="41605750" X-IronPort-AV: E=Sophos;i="6.11,249,1725346800"; d="scan'208";a="41605750" Received: from fmviesa007.fm.intel.com ([10.60.135.147]) by orvoesa104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Nov 2024 00:29:35 -0700 X-CSE-ConnectionGUID: 1K2Z1rr2SYWOMRZmyH9Gsw== X-CSE-MsgGUID: OvQ3dEmFQHG4F3IKf+X7LA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,249,1725346800"; d="scan'208";a="82565671" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by fmviesa007.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 01 Nov 2024 00:29:34 -0700 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 1 Nov 2024 00:29:33 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx603.amr.corp.intel.com (10.18.126.83) 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, 1 Nov 2024 00:29:33 -0700 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (104.47.57.43) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Fri, 1 Nov 2024 00:29:33 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bfcEH1jsKpNFcMNKSV6fp83jYcJ50KjrRCKcCQa6Gqlk5GpwfzavfCSnuPmXZv4V1w70wkWBSB13X3kk9BGeisQkEv4NbZS/6eJ/S7lODbkhSj16//aLeknr1Kf+f18QXYD0LSGgTPr7W1vKwhW1dqvL3fxbckjErXGkc0KgJZ4OHcqGQmiagJM4YZyML5fbHhqNvVI2HKzPRGAsT96N7BJX811ZJfAwS+9AUIkooezPYy9yC2dH898uWnTgvKfyjhkE8f0vuVnIg12xPIh5325RANBIZe97NtP2owL4YrKcxFGHoeUg4svP8LHVoKiBYnkWj5SLkwz7RLlOiWG8Wg== 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=mwR7CAa6SonsaMcrH2lbX1WYWAfhffLQndXLXmbLpnc=; b=PdpuZaFIeE0cc25qvotsfll8A22PMwFwEojjgLmb4YC+MKAFu9q+7hn5Do0FVPQZpQgWxd67iqK4qF2lK7XBA06oRtnahlYvXb/NsZhEmyHxWvKfERic8UICkoP6NxELF3neHpmaRcir5dQvm/1W1NDv8Jqm1PzWU2cg65ixuvn1C88BS7hK6BFCVW417gKo2lSYSc2KsMrXS3Wj5W/ZnzoAoWndb+OTiOd3hyIxJDPd+6zRkrV2Q2Tva0iutcOwFICUI1LBlq/L5Q6fRtHvw0SmAU86jhteoCU4os3OxQ8brsgqV52/NFuuhpV/u4aHfh8gBggsffj+Bxqzp4kycw== 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 SJ0PR11MB6622.namprd11.prod.outlook.com (2603:10b6:a03:478::6) by SA1PR11MB6848.namprd11.prod.outlook.com (2603:10b6:806:29c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.25; Fri, 1 Nov 2024 07:29:31 +0000 Received: from SJ0PR11MB6622.namprd11.prod.outlook.com ([fe80::727d:4413:2b65:8b3d]) by SJ0PR11MB6622.namprd11.prod.outlook.com ([fe80::727d:4413:2b65:8b3d%5]) with mapi id 15.20.8114.015; Fri, 1 Nov 2024 07:29:31 +0000 From: "Zhang, Rui" To: "alexander.shishkin@linux.intel.com" , "tglx@linutronix.de" , "bp@alien8.de" , "dave.hansen@linux.intel.com" , "peterz@infradead.org" , "mark.rutland@arm.com" , "mingo@redhat.com" , "Dhananjay.Ugwekar@amd.com" , "acme@kernel.org" , "namhyung@kernel.org" , "jolsa@kernel.org" , "kan.liang@linux.intel.com" , "irogers@google.com" , "Hunter, Adrian" CC: "linux-perf-users@vger.kernel.org" , "ravi.bangoria@amd.com" , "ananth.narayan@amd.com" , "linux-kernel@vger.kernel.org" , "gautham.shenoy@amd.com" , "kprateek.nayak@amd.com" , "x86@kernel.org" Subject: Re: [PATCH v6 07/10] perf/x86/rapl: Modify the generic variable names to *_pkg* Thread-Topic: [PATCH v6 07/10] perf/x86/rapl: Modify the generic variable names to *_pkg* Thread-Index: AQHbJs90fox4qrr7TkCAff6ItGFI/LKiEfQA Date: Fri, 1 Nov 2024 07:29:31 +0000 Message-ID: References: <20241025111348.3810-1-Dhananjay.Ugwekar@amd.com> <20241025111348.3810-8-Dhananjay.Ugwekar@amd.com> In-Reply-To: <20241025111348.3810-8-Dhananjay.Ugwekar@amd.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: SJ0PR11MB6622:EE_|SA1PR11MB6848:EE_ x-ms-office365-filtering-correlation-id: 6fa95179-ce35-4e56-4836-08dcfa46ed31 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014|921020|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?MERxbUc0TlpxYjRPbVgzZ0wwS243M0RGVnROcnJBRnNCeW9LTGZ2bXYzK0xx?= =?utf-8?B?dUpCSmZtelRaMFZMU1ViYW9HSFRZd05NMjVJUmtFdnpnZTAzRXhZd25mV0p0?= =?utf-8?B?eldlSXNQbXJITGJDaXMzZGtwWmRMQXY2RWlhdVVBbkZ6SDhOTlAydjc0UFUy?= =?utf-8?B?N3I2L3Mxc1V0RXJ2d3ByV21OSml3cFNuelVQODd0N3ZOdS9KU0NSNHVpNGNI?= =?utf-8?B?MHc0UWM1OFZ3VXZHU3NKaC92N3pySk1TOVUzUkVnRWJicTdUVTkycnBRTVVn?= =?utf-8?B?QUJZNXN3U1B6dXIrS01BM3hYbzFyRVRCQ0xLSWpMRHhrMk5pMmUyUkdkcFI3?= =?utf-8?B?dGs0by9LUlBrbko3REtUM3VhMDFkLzRPMHVIZXFTejBqMUowaW9rZ09HQTJz?= =?utf-8?B?alo1NnljWXQvd3R3Z25PRENaZThkaXhxeXZjbFI2SXg4dkhtZ2VEQm5UcStO?= =?utf-8?B?Q0l3N1krbndwY2J2WG5LWnJKb3g3SEh2MUMwYm5XeXBPUnJ1dDVab0ZmNGx1?= =?utf-8?B?Ri9GU2xXMmI0TGM0NENiNUtteGJlODV5WXA0V25JQkdCR0wxOVJiUHJxQkYv?= =?utf-8?B?R2RWdzUzM1lldk9ZTlR3M0o4RFFFdk9ZcktUTVVTaXhqQWszanhBYjZjRmxZ?= =?utf-8?B?SG1DVE11Sm1Kb1grYmIvK3RJNWh3TEg5ZElyazltZ0IxZWhrTDlkai83c2RQ?= =?utf-8?B?L2VHT0o1TlFsNFB5MG54L0dxN0NmV293SXNTYWcySjZCYS9oUHR6OGxXQkdV?= =?utf-8?B?V2FvaU95cmpQbmN1UGJ4cWVCZmZqUS9JZFNnQzBMT0VlbFFNZnFsVFd6NmpF?= =?utf-8?B?V3c0MFJ5MVkzMlkzWk5aRUMzQXVzQmswbkl4ODNNUXJodXlRSzhMVlhqTEgw?= =?utf-8?B?Snh1dlJGaXVvcEQwMStzQzhXOENsdGlmZkRMR1hGZTB2czVhVnRpM1BDSVVR?= =?utf-8?B?anFZVDhzOFFsWm1OVG1DSHNOU3ptcmdFbkFpWVV1ZnkzT2FUNm9BN2E5OGZq?= =?utf-8?B?OWtKY081WDBocTNNRkVBMFVGUmR3TnVZSjFscFRSQldHRS9TekdWN0MxSU8x?= =?utf-8?B?RUorRFpEZlptdmszUkdPOHdIejlFbTl1a3VLUWJNNFlESGpwd2I1MUM2Z1cv?= =?utf-8?B?YVgrME9FTFVZTWkzUXpQdUczM2diandMaVdFRldmYmFFN0Jtem9VY0pxQ2Zz?= =?utf-8?B?aVVjbjgvY0MvWE5pQ0lTcWJZZ3lUTjdkZ2lmbWF3QkVFdjE5RDhqZ0dibnNR?= =?utf-8?B?WDBDOGxObUFIVEdiWHIwb2hyS21EWkowQUNnRENXdjJNZXMxUEI1akQyWWRS?= =?utf-8?B?VkxqQkZZN1dMNVB6SG5UTFZBUEMzL3JRRnVKSnV2aHk4UWQ3bWMzOGgvOTBj?= =?utf-8?B?aE1aeUVZTHNVQ3ViRno4RWU2VlA0UkF5NTFzeXlmdUZ0enRKYnFYckJ0dXhq?= =?utf-8?B?SlJvSHIvaEJwMHZiT2FIUml5SmtqN3ZCdTdTSHFFTCtvdzUvazV0RGp0Sks1?= =?utf-8?B?Q3orSFNiRnpCdC9pQWxvN25BaytUSXVSOXFCdFcxenJQVUo3cWN1QnZCSGZE?= =?utf-8?B?Q2t1VGlJcFdjMFpiUFRuNmpzamY2ZU90WFNsN2YwYmZYeXV6WklZd3Zka0du?= =?utf-8?B?aVN3RzFuNHpLSGRpMVhGWm50TDllL2FBZjUzeTE1NUxSNjVqa0E2b2RIQm92?= =?utf-8?B?Ylg4ZE9IbDh3WUdUQWVFdDlXRGRkMXhIY0ZTdDlqQTN5T3RPc295VHJiZVla?= =?utf-8?B?RGZ6OUhBaW1rQWZUYnhid1hMbXR6YzZTakFNY1BVaVhDeTNvLzF0VjB2Yk9x?= =?utf-8?B?Z3R5cVpmUlFPUVMwVTg2S0FZNVhPZFlHWWlESHNCWW5QcTlqeGFTN0Noam5a?= =?utf-8?Q?r0wHV8f571f69?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR11MB6622.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014)(921020)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Mmk4VmpUSnBzN1l2Y0hpb0tBZnpMYjJZUEZ0YlJrbHhVK1QyUFJSZE1XVE1C?= =?utf-8?B?REVRZlAyNkZKQmtwWlhVdHdhZkhuVGxSeW5FS2dsRUN6QVorVWNEaTVUWU5S?= =?utf-8?B?bmpQOTJHVmExSUhENFF5WFRkTkVWMkxNbkc0cGFkMDNLL1dXL0xUdlZIeW5k?= =?utf-8?B?M2liM3RYK2czRk1Xa0dRalZMUmU5WU1ZMklCTHFIVDduMUdyNEJWcGtCcFBM?= =?utf-8?B?dGJZMWNweHpSNnR4T1UxNm1pSnJRZVdtbzRyallEN21iZ20reHhXNTNIT01l?= =?utf-8?B?MVFYT1pHamhZcTgway85WFpkYk1FMXlkZC9TMzEzYVhaOExyelVHZ09DRUtQ?= =?utf-8?B?TDNlQXZWL3c3MUFvQldMbk9hUzRQM3ZFY0UvdjE5dmhTZVlkRyt4WEVzUUp5?= =?utf-8?B?RjQvSFhvNFB2NWdSL3cySFJsUWpEYlBGdVJRRktWWFptTzk3SERzYTFUZjh3?= =?utf-8?B?eStZYWd4NS9VT0VCSXVCZGV4RGtSNVczUkltR05kb3JNV1dhWW5TRllnOG1u?= =?utf-8?B?d1BlckNzdysxZkhjeTk2ZnFuSWwxUEEwTmJRK0d0S1BpL3R5cFQ0YWdpd3dI?= =?utf-8?B?MHEzaERsemU2MDBJalkxZDhyeGdXQ1VPblFiczhQRXpqSnBTMVZyUkZmWVVl?= =?utf-8?B?WWpTWXk5WlJmQ04xTVYrV0hWTmpPdmFqZ0hoMW4yNGpERmQ0QmFhQzNuRmc3?= =?utf-8?B?cjMyR0RPZ2d0RU5ab2trMU5UR2gzRVVJcVVpUkxYSlNVejdOZHhURFc5THhH?= =?utf-8?B?MytOMk5YWTZFWjlmbWY0SjRud1o1STY3d2FzckpsaGE1UzFIK1BHaVlvMlIy?= =?utf-8?B?N0VHSjNITU5IbUg4elhXT3pQcTRPNGk2bWtSU3NLUmhXNGQ0UUFoRExKRUh3?= =?utf-8?B?RkZDTFlqUzg2RjVxQTdSNUcxUnhkT2hzejdPckNtSGVZYjRXc1FBbllFR3NQ?= =?utf-8?B?d0JZejcxb0tEaXZqQnlmeGFsckRYeHVOa3k2UmdFTW5oT1pudXdRYnVOa3Z0?= =?utf-8?B?WC91Znh2VDRobGFXMVBoUmR1Z0dIZW5VYkkyczdPZ2haaEZBMHc4d0hsd1Zk?= =?utf-8?B?VnVHTVpnd1VscHpYZWVPVTNXbGhpZkNjc0R4TVY0cExVQk15VlNxaU5acDh4?= =?utf-8?B?QUgvd2hjNG9idWNZMllXVWVjR3hkTWlFSUc3THBlamVJNi91MnlINEZkT3J1?= =?utf-8?B?ZWxoNnRHWk5Bc2E0WDhTRGF4dDl6ZFRZaitsVlpJbG1IemVWM2ljelM4Slhm?= =?utf-8?B?QnlzNy9RaU1MZjd5cTdFOWRzWVFYOHhtK1dzbjlJd250a0Z4aDR3YmNPMmto?= =?utf-8?B?VzJSSW95dHIyNWl6U3liZ2tDdXJMSnRHOStROHptN2U5U05BVGlyZ0t3SnpD?= =?utf-8?B?dlNhQTF4T2pxUTVwclk5Q0pwWjdsWFh3MnFWcVFlek5FS1Z1KzlLNjZzNk5K?= =?utf-8?B?aGFaejAxZTZ0U29vOFAvMExLOWhBQnk1VVdVSDV4UU9nRStaeVJvWVBJbXhT?= =?utf-8?B?T3ozUHQ4YmFSUHlBVjF4elhlamFObjZBU3NFR3h6T1hnaVo5YUk1MWlnd01I?= =?utf-8?B?Yi8ySGRUN2Q2aEZMU3pBQUMyOTFEVTEwT1dueUdFQ0dJVnpqT0R0dzlWdisr?= =?utf-8?B?NlRlL3VwcXNzcHIzOE96dFBVVmFXa3UrWVJmbGxENFZ0WTYzU3kxQW1IeUVs?= =?utf-8?B?b3dwdGM0Vit6S21pVmxNTWRoaU9RcXkxdkVlVUJxVE5jU2pteHBmTFBBYytj?= =?utf-8?B?Q0JDenpkajRES3NSZFovMWd4T2tXa0wyUzZwSzIrdC9jallKNWlMUm5aL2Qv?= =?utf-8?B?QzNTMHk3UFZFZDlwZFkvTG5QQ2VXQ1VoVTBVaWhodUZEYlEwK3Irc2dBc1VM?= =?utf-8?B?UEsyWGhsaWJ2K1YxWjBLWW5WUU5xRWpleFpoMkNUSWxFaklWWjQ3ayszYXVB?= =?utf-8?B?VHdZYUhscyttKys3ei95aFJhUUt0NUVPTFI2aDFGVmlrVGNaYlJWamlKb08v?= =?utf-8?B?U3dkWFE1QThTZWY5MUZ2R2N3OGZzMVExVXdoWkhtd2RjMHNRYkNEMjhLUFdD?= =?utf-8?B?NCs0N2hjNjlKVjhJUnU2QmdjWUY0aVc0SUphS3p4b2JvTDR0ZDIzWkk5V0Z1?= =?utf-8?Q?nCujV5UvsWLBF1+shgQHx1DzC?= Content-Type: text/plain; charset="utf-8" Content-ID: <0369BA0633E67C42BC9E34F7D5048CBE@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-perf-users@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SJ0PR11MB6622.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6fa95179-ce35-4e56-4836-08dcfa46ed31 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Nov 2024 07:29:31.3563 (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: n+xz7KFd9UINOk4LNCa/Km/LR4j+g0N4ire04LChiYaC//xPUuEsuARLqD/HYpHu0sGBeLk4Wfh3mu2xE/Pnyw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB6848 X-OriginatorOrg: intel.com T24gRnJpLCAyMDI0LTEwLTI1IGF0IDExOjEzICswMDAwLCBEaGFuYW5qYXkgVWd3ZWthciB3cm90 ZToKPiBQcmVwYXJlIGZvciB0aGUgYWRkaXRpb24gb2YgUkFQTCBjb3JlIGVuZXJneSBjb3VudGVy IHN1cHBvcnQuCj4gCj4gUmVwbGFjZSB0aGUgZ2VuZXJpYyBuYW1lcyB3aXRoICpfcGtnKiwgdG8g bGF0ZXIgb24gZGlmZmVyZW50aWF0ZQo+IGJldHdlZW4gCj4gdGhlIHNjb3BlcyBvZiB0aGUgdHdv IGRpZmZlcmVudCBQTVVzIGFuZCB0aGVpciB2YXJpYWJsZXMuCj4gCj4gTm8gZnVuY3Rpb25hbCBj aGFuZ2UuCj4gCj4gU2lnbmVkLW9mZi1ieTogRGhhbmFuamF5IFVnd2VrYXIgPERoYW5hbmpheS5V Z3dla2FyQGFtZC5jb20+CgpSZXZpZXdlZC1ieTogWmhhbmcgUnVpIDxydWkuemhhbmdAaW50ZWwu Y29tPgpUZXN0ZWQtYnk6IFpoYW5nIFJ1aSA8cnVpLnpoYW5nQGludGVsLmNvbT4KCnRoYW5rcywK cnVpCgo+IC0tLQo+IMKgYXJjaC94ODYvZXZlbnRzL3JhcGwuYyB8IDExOCArKysrKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KPiAtLQo+IMKgMSBmaWxlIGNoYW5nZWQsIDU5IGlu c2VydGlvbnMoKyksIDU5IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9l dmVudHMvcmFwbC5jIGIvYXJjaC94ODYvZXZlbnRzL3JhcGwuYwo+IGluZGV4IGJmNmZlZTExNDI5 NC4uYWU4YjQ1MGNhYTliIDEwMDY0NAo+IC0tLSBhL2FyY2gveDg2L2V2ZW50cy9yYXBsLmMKPiAr KysgYi9hcmNoL3g4Ni9ldmVudHMvcmFwbC5jCj4gQEAgLTcwLDE4ICs3MCwxOCBAQCBNT0RVTEVf TElDRU5TRSgiR1BMIik7Cj4gwqAvKgo+IMKgICogUkFQTCBlbmVyZ3kgc3RhdHVzIGNvdW50ZXJz Cj4gwqAgKi8KPiAtZW51bSBwZXJmX3JhcGxfZXZlbnRzIHsKPiArZW51bSBwZXJmX3JhcGxfcGtn X2V2ZW50cyB7Cj4gwqDCoMKgwqDCoMKgwqDCoFBFUkZfUkFQTF9QUDAgPSAwLMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAvKiBhbGwgY29yZXMgKi8KPiDCoMKgwqDCoMKgwqDCoMKgUEVSRl9S QVBMX1BLRyzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBlbnRpcmUgcGFj a2FnZSAqLwo+IMKgwqDCoMKgwqDCoMKgwqBQRVJGX1JBUExfUkFNLMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC8qIERSQU0gKi8KPiDCoMKgwqDCoMKgwqDCoMKgUEVSRl9SQVBM X1BQMSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBncHUgKi8KPiDCoMKg wqDCoMKgwqDCoMKgUEVSRl9SQVBMX1BTWVMswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC8qIHBzeXMgKi8KPiDCoAo+IC3CoMKgwqDCoMKgwqDCoFBFUkZfUkFQTF9NQVgsCj4gLcKg wqDCoMKgwqDCoMKgTlJfUkFQTF9ET01BSU5TID0gUEVSRl9SQVBMX01BWCwKPiArwqDCoMKgwqDC oMKgwqBQRVJGX1JBUExfUEtHX0VWRU5UU19NQVgsCj4gK8KgwqDCoMKgwqDCoMKgTlJfUkFQTF9Q S0dfRE9NQUlOUyA9IFBFUkZfUkFQTF9QS0dfRVZFTlRTX01BWCwKPiDCoH07Cj4gwqAKPiAtc3Rh dGljIGNvbnN0IGNoYXIgKmNvbnN0IHJhcGxfZG9tYWluX25hbWVzW05SX1JBUExfRE9NQUlOU10K PiBfX2luaXRjb25zdCA9IHsKPiArc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHJhcGxfcGtnX2Rv bWFpbl9uYW1lc1tOUl9SQVBMX1BLR19ET01BSU5TXQo+IF9faW5pdGNvbnN0ID0gewo+IMKgwqDC oMKgwqDCoMKgwqAicHAwLWNvcmUiLAo+IMKgwqDCoMKgwqDCoMKgwqAicGFja2FnZSIsCj4gwqDC oMKgwqDCoMKgwqDCoCJkcmFtIiwKPiBAQCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyBzdHJ1Y3Qg cGVyZl9wbXVfZXZlbnRzX2F0dHIgZXZlbnRfYXR0cl8jI3YKPiA9IHvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiDCoCAqwqDC oMKgwqDCoMKgwqDCoMKgIGNvbnNpZGVyZWQgYXMgZWl0aGVyIHBrZy1zY29wZSBvciBkaWUtc2Nv cGUsIGFuZCB3ZSBhcmUKPiBjb25zaWRlcmluZwo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqAgdGhl bSBhcyBkaWUtc2NvcGUuCj4gwqAgKi8KPiAtI2RlZmluZSByYXBsX3BtdV9pc19wa2dfc2NvcGUo KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBcCj4gKyNkZWZpbmUgcmFwbF9wa2dfcG11X2lzX3BrZ19zY29wZSgpwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gwqDCoMKg wqDCoMKgwqDCoChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgfHzC oMKgXAo+IMKgwqDCoMKgwqDCoMKgwqAgYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9W RU5ET1JfSFlHT04pCj4gwqAKPiBAQCAtMTM5LDE2ICsxMzksMTYgQEAgZW51bSByYXBsX3VuaXRf cXVpcmsgewo+IMKgfTsKPiDCoAo+IMKgc3RydWN0IHJhcGxfbW9kZWwgewo+IC3CoMKgwqDCoMKg wqDCoHN0cnVjdCBwZXJmX21zciAqcmFwbF9tc3JzOwo+IC3CoMKgwqDCoMKgwqDCoHVuc2lnbmVk IGxvbmfCoMKgwqBldmVudHM7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHBlcmZfbXNyICpyYXBs X3BrZ19tc3JzOwo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxvbmfCoMKgwqBwa2dfZXZlbnRz Owo+IMKgwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnTCoMKgwqDCoG1zcl9wb3dlcl91bml0Owo+ IMKgwqDCoMKgwqDCoMKgwqBlbnVtIHJhcGxfdW5pdF9xdWlya8KgwqDCoMKgdW5pdF9xdWlyazsK PiDCoH07Cj4gwqAKPiDCoCAvKiAxLzJeaHdfdW5pdCBKb3VsZSAqLwo+IC1zdGF0aWMgaW50IHJh cGxfaHdfdW5pdFtOUl9SQVBMX0RPTUFJTlNdIF9fcmVhZF9tb3N0bHk7Cj4gLXN0YXRpYyBzdHJ1 Y3QgcmFwbF9wbXVzICpyYXBsX3BtdXM7Cj4gLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmFwbF9jbnRy X21hc2s7Cj4gK3N0YXRpYyBpbnQgcmFwbF9wa2dfaHdfdW5pdFtOUl9SQVBMX1BLR19ET01BSU5T XSBfX3JlYWRfbW9zdGx5Owo+ICtzdGF0aWMgc3RydWN0IHJhcGxfcG11cyAqcmFwbF9wbXVzX3Br ZzsKPiArc3RhdGljIHVuc2lnbmVkIGludCByYXBsX3BrZ19jbnRyX21hc2s7Cj4gwqBzdGF0aWMg dTY0IHJhcGxfdGltZXJfbXM7Cj4gwqBzdGF0aWMgc3RydWN0IHBlcmZfbXNyICpyYXBsX21zcnM7 Cj4gwqBzdGF0aWMgc3RydWN0IHJhcGxfbW9kZWwgKnJhcGxfbW9kZWw7Cj4gQEAgLTE1OSw3ICsx NTksNyBAQCBzdGF0aWMgc3RydWN0IHJhcGxfbW9kZWwgKnJhcGxfbW9kZWw7Cj4gwqAgKi8KPiDC oHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9yYXBsX3BtdV9pZHgoaW50IGNwdSkKPiDC oHsKPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gcmFwbF9wbXVfaXNfcGtnX3Njb3BlKCkgPwo+IHRv cG9sb2d5X2xvZ2ljYWxfcGFja2FnZV9pZChjcHUpIDoKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4g cmFwbF9wa2dfcG11X2lzX3BrZ19zY29wZSgpID8KPiB0b3BvbG9neV9sb2dpY2FsX3BhY2thZ2Vf aWQoY3B1KSA6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiB0b3BvbG9neV9sb2dpY2FsX2Rp ZV9pZChjcHUpOwo+IMKgfQo+IMKgCj4gQEAgLTE3Miw3ICsxNzIsNyBAQCBzdGF0aWMgaW5saW5l IHU2NCByYXBsX3JlYWRfY291bnRlcihzdHJ1Y3QKPiBwZXJmX2V2ZW50ICpldmVudCkKPiDCoAo+ IMKgc3RhdGljIGlubGluZSB1NjQgcmFwbF9zY2FsZSh1NjQgdiwgaW50IGNmZykKPiDCoHsKPiAt wqDCoMKgwqDCoMKgwqBpZiAoY2ZnID4gTlJfUkFQTF9ET01BSU5TKSB7Cj4gK8KgwqDCoMKgwqDC oMKgaWYgKGNmZyA+IE5SX1JBUExfUEtHX0RPTUFJTlMpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHByX3dhcm4oIkludmFsaWQgZG9tYWluICVkLCBmYWlsZWQgdG8gc2NhbGUg ZGF0YVxuIiwKPiBjZmcpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHY7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiBAQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyBpbmxp bmUgdTY0IHJhcGxfc2NhbGUodTY0IHYsIGludCBjZmcpCj4gwqDCoMKgwqDCoMKgwqDCoCAqIG9y IHVzZSBsZGV4cChjb3VudCwgLTMyKS4KPiDCoMKgwqDCoMKgwqDCoMKgICogV2F0dHMgPSBKb3Vs ZXMvVGltZSBkZWx0YQo+IMKgwqDCoMKgwqDCoMKgwqAgKi8KPiAtwqDCoMKgwqDCoMKgwqByZXR1 cm4gdiA8PCAoMzIgLSByYXBsX2h3X3VuaXRbY2ZnIC0gMV0pOwo+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiB2IDw8ICgzMiAtIHJhcGxfcGtnX2h3X3VuaXRbY2ZnIC0gMV0pOwo+IMKgfQo+IMKgCj4g wqBzdGF0aWMgdTY0IHJhcGxfZXZlbnRfdXBkYXRlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkK PiBAQCAtMzQyLDcgKzM0Miw3IEBAIHN0YXRpYyBpbnQgcmFwbF9wbXVfZXZlbnRfaW5pdChzdHJ1 Y3QgcGVyZl9ldmVudAo+ICpldmVudCkKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHJhcGxfcG11 ICpyYXBsX3BtdTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAvKiBvbmx5IGxvb2sgYXQgUkFQTCBl dmVudHMgKi8KPiAtwqDCoMKgwqDCoMKgwqBpZiAoZXZlbnQtPmF0dHIudHlwZSAhPSByYXBsX3Bt dXMtPnBtdS50eXBlKQo+ICvCoMKgwqDCoMKgwqDCoGlmIChldmVudC0+YXR0ci50eXBlICE9IHJh cGxfcG11c19wa2ctPnBtdS50eXBlKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIC1FTk9FTlQ7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgLyogY2hlY2sgb25seSBzdXBw b3J0ZWQgYml0cyBhcmUgc2V0ICovCj4gQEAgLTM1MiwxNCArMzUyLDE0IEBAIHN0YXRpYyBpbnQg cmFwbF9wbXVfZXZlbnRfaW5pdChzdHJ1Y3QKPiBwZXJmX2V2ZW50ICpldmVudCkKPiDCoMKgwqDC oMKgwqDCoMKgaWYgKGV2ZW50LT5jcHUgPCAwKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBpZiAoIWNmZyB8fCBj ZmcgPj0gTlJfUkFQTF9ET01BSU5TICsgMSkKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWNmZyB8fCBj ZmcgPj0gTlJfUkFQTF9QS0dfRE9NQUlOUyArIDEpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGNmZyA9IGFycmF5 X2luZGV4X25vc3BlYygobG9uZyljZmcsIE5SX1JBUExfRE9NQUlOUyArIDEpOwo+ICvCoMKgwqDC oMKgwqDCoGNmZyA9IGFycmF5X2luZGV4X25vc3BlYygobG9uZyljZmcsIE5SX1JBUExfUEtHX0RP TUFJTlMgKyAxKTsKPiDCoMKgwqDCoMKgwqDCoMKgYml0ID0gY2ZnIC0gMTsKPiDCoAo+IMKgwqDC oMKgwqDCoMKgwqAvKiBjaGVjayBldmVudCBzdXBwb3J0ZWQgKi8KPiAtwqDCoMKgwqDCoMKgwqBp ZiAoIShyYXBsX2NudHJfbWFzayAmICgxIDw8IGJpdCkpKQo+ICvCoMKgwqDCoMKgwqDCoGlmICgh KHJhcGxfcGtnX2NudHJfbWFzayAmICgxIDw8IGJpdCkpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgLyogdW5z dXBwb3J0ZWQgbW9kZXMgYW5kIGZpbHRlcnMgKi8KPiBAQCAtMzY3LDExICszNjcsMTEgQEAgc3Rh dGljIGludCByYXBsX3BtdV9ldmVudF9pbml0KHN0cnVjdAo+IHBlcmZfZXZlbnQgKmV2ZW50KQo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gwqAKPiDC oMKgwqDCoMKgwqDCoMKgcmFwbF9wbXVfaWR4ID0gZ2V0X3JhcGxfcG11X2lkeChldmVudC0+Y3B1 KTsKPiAtwqDCoMKgwqDCoMKgwqBpZiAocmFwbF9wbXVfaWR4ID49IHJhcGxfcG11cy0+bnJfcmFw bF9wbXUpCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJhcGxfcG11X2lkeCA+PSByYXBsX3BtdXNfcGtn LT5ucl9yYXBsX3BtdSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAt RUlOVkFMOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoC8qIG11c3QgYmUgZG9uZSBiZWZvcmUgdmFs aWRhdGVfZ3JvdXAgKi8KPiAtwqDCoMKgwqDCoMKgwqByYXBsX3BtdSA9IHJhcGxfcG11cy0+cmFw bF9wbXVbcmFwbF9wbXVfaWR4XTsKPiArwqDCoMKgwqDCoMKgwqByYXBsX3BtdSA9IHJhcGxfcG11 c19wa2ctPnJhcGxfcG11W3JhcGxfcG11X2lkeF07Cj4gwqDCoMKgwqDCoMKgwqDCoGlmICghcmFw bF9wbXUpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsK PiDCoAo+IEBAIC01MjUsMTEgKzUyNSwxMSBAQCBzdGF0aWMgc3RydWN0IHBlcmZfbXNyIGludGVs X3JhcGxfc3ByX21zcnNbXSA9Cj4gewo+IMKgfTsKPiDCoAo+IMKgLyoKPiAtICogRm9yY2UgdG8g UEVSRl9SQVBMX01BWCBzaXplIGR1ZSB0bzoKPiAtICogLSBwZXJmX21zcl9wcm9iZShQRVJGX1JB UExfTUFYKQo+ICsgKiBGb3JjZSB0byBQRVJGX1JBUExfUEtHX0VWRU5UU19NQVggc2l6ZSBkdWUg dG86Cj4gKyAqIC0gcGVyZl9tc3JfcHJvYmUoUEVSRl9SQVBMX1BLR19FVkVOVFNfTUFYKQo+IMKg ICogLSB3YW50IHRvIHVzZSBzYW1lIGV2ZW50IGNvZGVzIGFjcm9zcyBib3RoIGFyY2hpdGVjdHVy ZXMKPiDCoCAqLwo+IC1zdGF0aWMgc3RydWN0IHBlcmZfbXNyIGFtZF9yYXBsX21zcnNbXSA9IHsK PiArc3RhdGljIHN0cnVjdCBwZXJmX21zciBhbWRfcmFwbF9wa2dfbXNyc1tdID0gewo+IMKgwqDC oMKgwqDCoMKgwqBbUEVSRl9SQVBMX1BQMF3CoCA9IHsgMCwgJnJhcGxfZXZlbnRzX2NvcmVzX2dy b3VwLCBOVUxMLAo+IGZhbHNlLCAwIH0sCj4gwqDCoMKgwqDCoMKgwqDCoFtQRVJGX1JBUExfUEtH XcKgID0geyBNU1JfQU1EX1BLR19FTkVSR1lfU1RBVFVTLMKgCj4gJnJhcGxfZXZlbnRzX3BrZ19n cm91cCzCoMKgIHRlc3RfbXNyLCBmYWxzZSwgUkFQTF9NU1JfTUFTSyB9LAo+IMKgwqDCoMKgwqDC oMKgwqBbUEVSRl9SQVBMX1JBTV3CoCA9IHsgMCwgJnJhcGxfZXZlbnRzX3JhbV9ncm91cCzCoMKg IE5VTEwsCj4gZmFsc2UsIDAgfSwKPiBAQCAtNTQ1LDggKzU0NSw4IEBAIHN0YXRpYyBpbnQgcmFw bF9jaGVja19od191bml0KHZvaWQpCj4gwqDCoMKgwqDCoMKgwqDCoC8qIHByb3RlY3QgcmRtc3Js KCkgdG8gaGFuZGxlIHZpcnR1YWxpemF0aW9uICovCj4gwqDCoMKgwqDCoMKgwqDCoGlmIChyZG1z cmxfc2FmZShyYXBsX21vZGVsLT5tc3JfcG93ZXJfdW5pdCwKPiAmbXNyX3JhcGxfcG93ZXJfdW5p dF9iaXRzKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtMTsKPiAt wqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgTlJfUkFQTF9ET01BSU5TOyBpKyspCj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJhcGxfaHdfdW5pdFtpXSA9IChtc3JfcmFwbF9w b3dlcl91bml0X2JpdHMgPj4gOCkgJgo+IDB4MUZVTEw7Cj4gK8KgwqDCoMKgwqDCoMKgZm9yIChp ID0gMDsgaSA8IE5SX1JBUExfUEtHX0RPTUFJTlM7IGkrKykKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmFwbF9wa2dfaHdfdW5pdFtpXSA9IChtc3JfcmFwbF9wb3dlcl91bml0X2Jp dHMgPj4gOCkKPiAmIDB4MUZVTEw7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgc3dpdGNoIChyYXBs X21vZGVsLT51bml0X3F1aXJrKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoC8qCj4gQEAgLTU1NiwxMSAr NTU2LDExIEBAIHN0YXRpYyBpbnQgcmFwbF9jaGVja19od191bml0KHZvaWQpCj4gwqDCoMKgwqDC oMKgwqDCoCAqIG9mIDIuIERhdGFzaGVldCwgU2VwdGVtYmVyIDIwMTQsIFJlZmVyZW5jZSBOdW1i ZXI6IDMzMDc4NC0KPiAwMDEgIgo+IMKgwqDCoMKgwqDCoMKgwqAgKi8KPiDCoMKgwqDCoMKgwqDC oMKgY2FzZSBSQVBMX1VOSVRfUVVJUktfSU5URUxfSFNXOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByYXBsX2h3X3VuaXRbUEVSRl9SQVBMX1JBTV0gPSAxNjsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmFwbF9wa2dfaHdfdW5pdFtQRVJGX1JBUExfUkFNXSA9IDE2 Owo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gwqDCoMKgwqDCoMKg wqDCoC8qIFNQUiB1c2VzIGEgZml4ZWQgZW5lcmd5IHVuaXQgZm9yIFBzeXMgZG9tYWluLiAqLwo+ IMKgwqDCoMKgwqDCoMKgwqBjYXNlIFJBUExfVU5JVF9RVUlSS19JTlRFTF9TUFI6Cj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJhcGxfaHdfdW5pdFtQRVJGX1JBUExfUFNZU10gPSAw Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYXBsX3BrZ19od191bml0W1BFUkZf UkFQTF9QU1lTXSA9IDA7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsK PiDCoMKgwqDCoMKgwqDCoMKgZGVmYXVsdDoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGJyZWFrOwo+IEBAIC01NzUsOSArNTc1LDkgQEAgc3RhdGljIGludCByYXBsX2NoZWNrX2h3 X3VuaXQodm9pZCkKPiDCoMKgwqDCoMKgwqDCoMKgICogaWYgaHcgdW5pdCBpcyAzMiwgdGhlbiB3 ZSB1c2UgMiBtcyAxLzIwMC8yCj4gwqDCoMKgwqDCoMKgwqDCoCAqLwo+IMKgwqDCoMKgwqDCoMKg wqByYXBsX3RpbWVyX21zID0gMjsKPiAtwqDCoMKgwqDCoMKgwqBpZiAocmFwbF9od191bml0WzBd IDwgMzIpIHsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmFwbF9wa2dfaHdfdW5pdFswXSA8IDMyKSB7 Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYXBsX3RpbWVyX21zID0gKDEwMDAg LyAoMiAqIDEwMCkpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYXBsX3RpbWVy X21zICo9ICgxVUxMIDw8ICgzMiAtIHJhcGxfaHdfdW5pdFswXSAtCj4gMSkpOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYXBsX3RpbWVyX21zICo9ICgxVUxMIDw8ICgzMiAtIHJh cGxfcGtnX2h3X3VuaXRbMF0gLQo+IDEpKTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gMDsKPiDCoH0KPiBAQCAtNTg3LDEyICs1ODcsMTIgQEAgc3RhdGljIHZv aWQgX19pbml0IHJhcGxfYWR2ZXJ0aXNlKHZvaWQpCj4gwqDCoMKgwqDCoMKgwqDCoGludCBpOwo+ IMKgCj4gwqDCoMKgwqDCoMKgwqDCoHByX2luZm8oIkFQSSB1bml0IGlzIDJeLTMyIEpvdWxlcywg JWQgZml4ZWQgY291bnRlcnMsICVsbHUgbXMKPiBvdmZsIHRpbWVyXG4iLAo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBod2VpZ2h0MzIocmFwbF9jbnRyX21hc2spLCByYXBsX3RpbWVy X21zKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaHdlaWdodDMyKHJhcGxfcGtn X2NudHJfbWFzayksIHJhcGxfdGltZXJfbXMpOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgZm9yIChp ID0gMDsgaSA8IE5SX1JBUExfRE9NQUlOUzsgaSsrKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChyYXBsX2NudHJfbWFzayAmICgxIDw8IGkpKSB7Cj4gK8KgwqDCoMKgwqDC oMKgZm9yIChpID0gMDsgaSA8IE5SX1JBUExfUEtHX0RPTUFJTlM7IGkrKykgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmFwbF9wa2dfY250cl9tYXNrICYgKDEgPDwgaSkp IHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcl9p bmZvKCJodyB1bml0IG9mIGRvbWFpbiAlcyAyXi0lZAo+IEpvdWxlc1xuIiwKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYXBs X2RvbWFpbl9uYW1lc1tpXSwKPiByYXBsX2h3X3VuaXRbaV0pOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJhcGxfcGtnX2Rv bWFpbl9uYW1lc1tpXSwKPiByYXBsX3BrZ19od191bml0W2ldKTsKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgfQo+IEBAIC02NzMsNzEg KzY3Myw3MSBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X3JhcGxfcG11cyhzdHJ1Y3QKPiByYXBs X3BtdXMgKipyYXBsX3BtdXNfcHRyLCBpbnQgcmFwbF9wbXVfCj4gwqB9Cj4gwqAKPiDCoHN0YXRp YyBzdHJ1Y3QgcmFwbF9tb2RlbCBtb2RlbF9zbmIgPSB7Cj4gLcKgwqDCoMKgwqDCoMKgLmV2ZW50 c8KgwqDCoMKgwqDCoMKgwqDCoD0gQklUKFBFUkZfUkFQTF9QUDApIHwKPiArwqDCoMKgwqDCoMKg wqAucGtnX2V2ZW50c8KgwqDCoMKgwqA9IEJJVChQRVJGX1JBUExfUFAwKSB8Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKFBFUkZfUkFQTF9Q S0cpIHwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBCSVQoUEVSRl9SQVBMX1BQMSksCj4gwqDCoMKgwqDCoMKgwqDCoC5tc3JfcG93ZXJfdW5pdCA9 IE1TUl9SQVBMX1BPV0VSX1VOSVQsCj4gLcKgwqDCoMKgwqDCoMKgLnJhcGxfbXNyc8KgwqDCoMKg wqAgPSBpbnRlbF9yYXBsX21zcnMsCj4gK8KgwqDCoMKgwqDCoMKgLnJhcGxfcGtnX21zcnPCoMKg PSBpbnRlbF9yYXBsX21zcnMsCj4gwqB9Owo+IMKgCj4gwqBzdGF0aWMgc3RydWN0IHJhcGxfbW9k ZWwgbW9kZWxfc25iZXAgPSB7Cj4gLcKgwqDCoMKgwqDCoMKgLmV2ZW50c8KgwqDCoMKgwqDCoMKg wqDCoD0gQklUKFBFUkZfUkFQTF9QUDApIHwKPiArwqDCoMKgwqDCoMKgwqAucGtnX2V2ZW50c8Kg wqDCoMKgwqA9IEJJVChQRVJGX1JBUExfUFAwKSB8Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKFBFUkZfUkFQTF9QS0cpIHwKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoUEVSRl9SQVBM X1JBTSksCj4gwqDCoMKgwqDCoMKgwqDCoC5tc3JfcG93ZXJfdW5pdCA9IE1TUl9SQVBMX1BPV0VS X1VOSVQsCj4gLcKgwqDCoMKgwqDCoMKgLnJhcGxfbXNyc8KgwqDCoMKgwqAgPSBpbnRlbF9yYXBs X21zcnMsCj4gK8KgwqDCoMKgwqDCoMKgLnJhcGxfcGtnX21zcnPCoMKgPSBpbnRlbF9yYXBsX21z cnMsCj4gwqB9Owo+IMKgCj4gwqBzdGF0aWMgc3RydWN0IHJhcGxfbW9kZWwgbW9kZWxfaHN3ID0g ewo+IC3CoMKgwqDCoMKgwqDCoC5ldmVudHPCoMKgwqDCoMKgwqDCoMKgwqA9IEJJVChQRVJGX1JB UExfUFAwKSB8Cj4gK8KgwqDCoMKgwqDCoMKgLnBrZ19ldmVudHPCoMKgwqDCoMKgPSBCSVQoUEVS Rl9SQVBMX1BQMCkgfAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEJJVChQRVJGX1JBUExfUEtHKSB8Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKFBFUkZfUkFQTF9SQU0pIHwKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoUEVSRl9SQVBM X1BQMSksCj4gwqDCoMKgwqDCoMKgwqDCoC5tc3JfcG93ZXJfdW5pdCA9IE1TUl9SQVBMX1BPV0VS X1VOSVQsCj4gLcKgwqDCoMKgwqDCoMKgLnJhcGxfbXNyc8KgwqDCoMKgwqAgPSBpbnRlbF9yYXBs X21zcnMsCj4gK8KgwqDCoMKgwqDCoMKgLnJhcGxfcGtnX21zcnPCoMKgPSBpbnRlbF9yYXBsX21z cnMsCj4gwqB9Owo+IMKgCj4gwqBzdGF0aWMgc3RydWN0IHJhcGxfbW9kZWwgbW9kZWxfaHN4ID0g ewo+IC3CoMKgwqDCoMKgwqDCoC5ldmVudHPCoMKgwqDCoMKgwqDCoMKgwqA9IEJJVChQRVJGX1JB UExfUFAwKSB8Cj4gK8KgwqDCoMKgwqDCoMKgLnBrZ19ldmVudHPCoMKgwqDCoMKgPSBCSVQoUEVS Rl9SQVBMX1BQMCkgfAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEJJVChQRVJGX1JBUExfUEtHKSB8Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKFBFUkZfUkFQTF9SQU0pLAo+IMKgwqDCoMKg wqDCoMKgwqAudW5pdF9xdWlya8KgwqDCoMKgwqA9IFJBUExfVU5JVF9RVUlSS19JTlRFTF9IU1cs Cj4gwqDCoMKgwqDCoMKgwqDCoC5tc3JfcG93ZXJfdW5pdCA9IE1TUl9SQVBMX1BPV0VSX1VOSVQs Cj4gLcKgwqDCoMKgwqDCoMKgLnJhcGxfbXNyc8KgwqDCoMKgwqAgPSBpbnRlbF9yYXBsX21zcnMs Cj4gK8KgwqDCoMKgwqDCoMKgLnJhcGxfcGtnX21zcnPCoMKgPSBpbnRlbF9yYXBsX21zcnMsCj4g wqB9Owo+IMKgCj4gwqBzdGF0aWMgc3RydWN0IHJhcGxfbW9kZWwgbW9kZWxfa25sID0gewo+IC3C oMKgwqDCoMKgwqDCoC5ldmVudHPCoMKgwqDCoMKgwqDCoMKgwqA9IEJJVChQRVJGX1JBUExfUEtH KSB8Cj4gK8KgwqDCoMKgwqDCoMKgLnBrZ19ldmVudHPCoMKgwqDCoMKgPSBCSVQoUEVSRl9SQVBM X1BLRykgfAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEJJVChQRVJGX1JBUExfUkFNKSwKPiDCoMKgwqDCoMKgwqDCoMKgLnVuaXRfcXVpcmvCoMKg wqDCoMKgPSBSQVBMX1VOSVRfUVVJUktfSU5URUxfSFNXLAo+IMKgwqDCoMKgwqDCoMKgwqAubXNy X3Bvd2VyX3VuaXQgPSBNU1JfUkFQTF9QT1dFUl9VTklULAo+IC3CoMKgwqDCoMKgwqDCoC5yYXBs X21zcnPCoMKgwqDCoMKgID0gaW50ZWxfcmFwbF9tc3JzLAo+ICvCoMKgwqDCoMKgwqDCoC5yYXBs X3BrZ19tc3JzwqDCoD0gaW50ZWxfcmFwbF9tc3JzLAo+IMKgfTsKPiDCoAo+IMKgc3RhdGljIHN0 cnVjdCByYXBsX21vZGVsIG1vZGVsX3NrbCA9IHsKPiAtwqDCoMKgwqDCoMKgwqAuZXZlbnRzwqDC oMKgwqDCoMKgwqDCoMKgPSBCSVQoUEVSRl9SQVBMX1BQMCkgfAo+ICvCoMKgwqDCoMKgwqDCoC5w a2dfZXZlbnRzwqDCoMKgwqDCoD0gQklUKFBFUkZfUkFQTF9QUDApIHwKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoUEVSRl9SQVBMX1BLRykg fAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJ VChQRVJGX1JBUExfUkFNKSB8Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgQklUKFBFUkZfUkFQTF9QUDEpIHwKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoUEVSRl9SQVBMX1BTWVMpLAo+IMKg wqDCoMKgwqDCoMKgwqAubXNyX3Bvd2VyX3VuaXQgPSBNU1JfUkFQTF9QT1dFUl9VTklULAo+IC3C oMKgwqDCoMKgwqDCoC5yYXBsX21zcnPCoMKgwqDCoMKgID0gaW50ZWxfcmFwbF9tc3JzLAo+ICvC oMKgwqDCoMKgwqDCoC5yYXBsX3BrZ19tc3JzwqDCoMKgwqDCoCA9IGludGVsX3JhcGxfbXNycywK PiDCoH07Cj4gwqAKPiDCoHN0YXRpYyBzdHJ1Y3QgcmFwbF9tb2RlbCBtb2RlbF9zcHIgPSB7Cj4g LcKgwqDCoMKgwqDCoMKgLmV2ZW50c8KgwqDCoMKgwqDCoMKgwqDCoD0gQklUKFBFUkZfUkFQTF9Q UDApIHwKPiArwqDCoMKgwqDCoMKgwqAucGtnX2V2ZW50c8KgwqDCoMKgwqA9IEJJVChQRVJGX1JB UExfUFAwKSB8Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgQklUKFBFUkZfUkFQTF9QS0cpIHwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoUEVSRl9SQVBMX1JBTSkgfAo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVChQRVJGX1JBUExfUFNZ UyksCj4gwqDCoMKgwqDCoMKgwqDCoC51bml0X3F1aXJrwqDCoMKgwqDCoD0gUkFQTF9VTklUX1FV SVJLX0lOVEVMX1NQUiwKPiDCoMKgwqDCoMKgwqDCoMKgLm1zcl9wb3dlcl91bml0ID0gTVNSX1JB UExfUE9XRVJfVU5JVCwKPiAtwqDCoMKgwqDCoMKgwqAucmFwbF9tc3JzwqDCoMKgwqDCoCA9IGlu dGVsX3JhcGxfc3ByX21zcnMsCj4gK8KgwqDCoMKgwqDCoMKgLnJhcGxfcGtnX21zcnPCoMKgPSBp bnRlbF9yYXBsX3Nwcl9tc3JzLAo+IMKgfTsKPiDCoAo+IMKgc3RhdGljIHN0cnVjdCByYXBsX21v ZGVsIG1vZGVsX2FtZF9oeWdvbiA9IHsKPiAtwqDCoMKgwqDCoMKgwqAuZXZlbnRzwqDCoMKgwqDC oMKgwqDCoMKgPSBCSVQoUEVSRl9SQVBMX1BLRyksCj4gK8KgwqDCoMKgwqDCoMKgLnBrZ19ldmVu dHPCoMKgwqDCoMKgPSBCSVQoUEVSRl9SQVBMX1BLRyksCj4gwqDCoMKgwqDCoMKgwqDCoC5tc3Jf cG93ZXJfdW5pdCA9IE1TUl9BTURfUkFQTF9QT1dFUl9VTklULAo+IC3CoMKgwqDCoMKgwqDCoC5y YXBsX21zcnPCoMKgwqDCoMKgID0gYW1kX3JhcGxfbXNycywKPiArwqDCoMKgwqDCoMKgwqAucmFw bF9wa2dfbXNyc8KgwqA9IGFtZF9yYXBsX3BrZ19tc3JzLAo+IMKgfTsKPiDCoAo+IMKgc3RhdGlj IGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIHJhcGxfbW9kZWxfbWF0Y2hbXSBfX2luaXRjb25zdCA9 IHsKPiBAQCAtNzkzLDExICs3OTMsMTEgQEAgTU9EVUxFX0RFVklDRV9UQUJMRSh4ODZjcHUsIHJh cGxfbW9kZWxfbWF0Y2gpOwo+IMKgc3RhdGljIGludCBfX2luaXQgcmFwbF9wbXVfaW5pdCh2b2lk KQo+IMKgewo+IMKgwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgeDg2X2NwdV9pZCAqaWQ7Cj4g LcKgwqDCoMKgwqDCoMKgaW50IHJhcGxfcG11X3Njb3BlID0gUEVSRl9QTVVfU0NPUEVfRElFOwo+ ICvCoMKgwqDCoMKgwqDCoGludCByYXBsX3BrZ19wbXVfc2NvcGUgPSBQRVJGX1BNVV9TQ09QRV9E SUU7Cj4gwqDCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBpZiAo cmFwbF9wbXVfaXNfcGtnX3Njb3BlKCkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJhcGxfcG11X3Njb3BlID0gUEVSRl9QTVVfU0NPUEVfUEtHOwo+ICvCoMKgwqDCoMKgwqDCoGlm IChyYXBsX3BrZ19wbXVfaXNfcGtnX3Njb3BlKCkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJhcGxfcGtnX3BtdV9zY29wZSA9IFBFUkZfUE1VX1NDT1BFX1BLRzsKPiDCoAo+IMKg wqDCoMKgwqDCoMKgwqBpZCA9IHg4Nl9tYXRjaF9jcHUocmFwbF9tb2RlbF9tYXRjaCk7Cj4gwqDC oMKgwqDCoMKgwqDCoGlmICghaWQpCj4gQEAgLTgwNSwyMCArODA1LDIwIEBAIHN0YXRpYyBpbnQg X19pbml0IHJhcGxfcG11X2luaXQodm9pZCkKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqByYXBsX21v ZGVsID0gKHN0cnVjdCByYXBsX21vZGVsICopIGlkLT5kcml2ZXJfZGF0YTsKPiDCoAo+IC3CoMKg wqDCoMKgwqDCoHJhcGxfbXNycyA9IHJhcGxfbW9kZWwtPnJhcGxfbXNyczsKPiArwqDCoMKgwqDC oMKgwqByYXBsX21zcnMgPSByYXBsX21vZGVsLT5yYXBsX3BrZ19tc3JzOwo+IMKgCj4gLcKgwqDC oMKgwqDCoMKgcmFwbF9jbnRyX21hc2sgPSBwZXJmX21zcl9wcm9iZShyYXBsX21zcnMsIFBFUkZf UkFQTF9NQVgsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZhbHNlLCAodm9pZCAqKSAmcmFwbF9t b2RlbC0KPiA+ZXZlbnRzKTsKPiArwqDCoMKgwqDCoMKgwqByYXBsX3BrZ19jbnRyX21hc2sgPSBw ZXJmX21zcl9wcm9iZShyYXBsX21zcnMsCj4gUEVSRl9SQVBMX1BLR19FVkVOVFNfTUFYLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBmYWxzZSwgKHZvaWQgKikgJnJhcGxfbW9kZWwtCj4gPnBrZ19l dmVudHMpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoHJldCA9IHJhcGxfY2hlY2tfaHdfdW5pdCgp Owo+IMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIHJldDsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoHJldCA9IGluaXRfcmFwbF9w bXVzKCZyYXBsX3BtdXMsIHJhcGxfcG11X3Njb3BlKTsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBp bml0X3JhcGxfcG11cygmcmFwbF9wbXVzX3BrZywgcmFwbF9wa2dfcG11X3Njb3BlKTsKPiDCoMKg wqDCoMKgwqDCoMKgaWYgKHJldCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiByZXQ7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqByZXQgPSBwZXJmX3BtdV9yZWdpc3Rlcigm cmFwbF9wbXVzLT5wbXUsICJwb3dlciIsIC0xKTsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBwZXJm X3BtdV9yZWdpc3RlcigmcmFwbF9wbXVzX3BrZy0+cG11LCAicG93ZXIiLCAtMSk7Cj4gwqDCoMKg wqDCoMKgwqDCoGlmIChyZXQpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3Rv IG91dDsKPiDCoAo+IEBAIC04MjcsMTQgKzgyNywxNCBAQCBzdGF0aWMgaW50IF9faW5pdCByYXBs X3BtdV9pbml0KHZvaWQpCj4gwqAKPiDCoG91dDoKPiDCoMKgwqDCoMKgwqDCoMKgcHJfd2Fybigi SW5pdGlhbGl6YXRpb24gZmFpbGVkICglZCksIGRpc2FibGVkXG4iLCByZXQpOwo+IC3CoMKgwqDC oMKgwqDCoGNsZWFudXBfcmFwbF9wbXVzKHJhcGxfcG11cyk7Cj4gK8KgwqDCoMKgwqDCoMKgY2xl YW51cF9yYXBsX3BtdXMocmFwbF9wbXVzX3BrZyk7Cj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBy ZXQ7Cj4gwqB9Cj4gwqBtb2R1bGVfaW5pdChyYXBsX3BtdV9pbml0KTsKPiDCoAo+IMKgc3RhdGlj IHZvaWQgX19leGl0IGludGVsX3JhcGxfZXhpdCh2b2lkKQo+IMKgewo+IC3CoMKgwqDCoMKgwqDC oHBlcmZfcG11X3VucmVnaXN0ZXIoJnJhcGxfcG11cy0+cG11KTsKPiAtwqDCoMKgwqDCoMKgwqBj bGVhbnVwX3JhcGxfcG11cyhyYXBsX3BtdXMpOwo+ICvCoMKgwqDCoMKgwqDCoHBlcmZfcG11X3Vu cmVnaXN0ZXIoJnJhcGxfcG11c19wa2ctPnBtdSk7Cj4gK8KgwqDCoMKgwqDCoMKgY2xlYW51cF9y YXBsX3BtdXMocmFwbF9wbXVzX3BrZyk7Cj4gwqB9Cj4gwqBtb2R1bGVfZXhpdChpbnRlbF9yYXBs X2V4aXQpOwoK