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 B7F2EC02190 for ; Tue, 28 Jan 2025 05:13:32 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 740BA10E334; Tue, 28 Jan 2025 05:13:32 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="az4AKIZ0"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id A459110E334 for ; Tue, 28 Jan 2025 05:13:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1738041211; x=1769577211; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=ep18wGGLLfQ/KBkwDtg/69UQRc0dqHyaGO3M8jMXVqg=; b=az4AKIZ05UDZgq/VTcYsbjsw4b2600OzWUidt8uPbeJ4h/9cVO/FjumW qRMcQ6hsG367M/QUT6ELrv8Lvntm4W6NTd1OMnOLDoY4y5UWK+STxI+ev 0pHkS9fcZviy4/QEvbC7gmYADkuZDozAC/TXuKvilhOxiZKlGRMNy76aM Y3lRaCCC49eyClYDNDBJG0sLggzUaO3YKjxgN+sccNtB1zIEsbelPCvh2 Qp9WiMPz7+YLZZqaHa640nKArc4iFf5gf+a3TuoeYcxk+Yw64yCrTw5dO E5SVjkxMm81Vo8HK3X6TcGxqY+a22Twj+TlAjMot+QnV/UDCFpevLJd5z w==; X-CSE-ConnectionGUID: XzBY+qx4Rw+rirBLGbbR8A== X-CSE-MsgGUID: Qg3qbfIdSN2vf0H9VXKqmw== X-IronPort-AV: E=McAfee;i="6700,10204,11328"; a="38217450" X-IronPort-AV: E=Sophos;i="6.13,240,1732608000"; d="scan'208";a="38217450" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2025 21:13:31 -0800 X-CSE-ConnectionGUID: Xl/949/qTVKHez3oFY9urA== X-CSE-MsgGUID: ZsJhiGBjQuaGr3OtLNDgew== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,199,1725346800"; d="scan'208";a="113597841" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orviesa003.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 27 Jan 2025 21:13:31 -0800 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.44; Mon, 27 Jan 2025 21:13:30 -0800 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.44 via Frontend Transport; Mon, 27 Jan 2025 21:13:30 -0800 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.49) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.44; Mon, 27 Jan 2025 21:13:29 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VNRjXX4Sc3l55/oXljX6X53OH/XUMOz3LhfSUvkUJ+u++asn9rq4/CPdfXpprAnbEC/tYiujgHD8q8KdyG1diC/qJyN21ugBVefFtcMDquHXCRzBKNPaqUh4FJTRg7yloCUxLTE+QWMaq2GIQiF1XKnPGoJ0qExELbG3/qWMnehD9JfuIrfNLVjlxChFv/f4ZsUr7t86UNQGhHzNthTw7bc/v7kLBEk3bbXKwpv8Yta/9WdgJRusJ0Ntr4uhb4pySdpEMix6xCLFrdzCX01Mir4wAxjZAlbSZIQiRew516Fna+ogwVx0pJ4lPv78wPmfd4sjUwlXT/9Kve87DVtv7g== 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=ep18wGGLLfQ/KBkwDtg/69UQRc0dqHyaGO3M8jMXVqg=; b=Go5/UPAsizGK7DtkcAT7uea3TOiYXctTwx0hK/ZDtN7Smfc4LWDJcIQKQ3VWgtUYfg7kcFLx5TOSPiClc+Q0j183WiTLamy406lBgLSvDtD6H0Tpu2BAymNMHX0OTb5NIrKE0vRvh+eC0VVsixrZT31xLX4jpaZp4Xk2++mHgbF0gv5OE6Lo9Unlw0WJcRSeD19He/TDM7TqUHozYzAZHV5uH7LGPNXn44RgNPRATCkeCyHlmSXcZS81UP+YjB6ZDQffFZZkkJilTpSTO2iWRWkmzEehSCQ7UyotAOKKdDCcbm7LCUjhZDHffyUdgyWwMq4b3xClkDYdFC3cnwn7xA== 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 DM8PR11MB5751.namprd11.prod.outlook.com (2603:10b6:8:12::16) by BL1PR11MB5253.namprd11.prod.outlook.com (2603:10b6:208:310::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8377.22; Tue, 28 Jan 2025 05:13:27 +0000 Received: from DM8PR11MB5751.namprd11.prod.outlook.com ([fe80::4046:430d:f16c:b842]) by DM8PR11MB5751.namprd11.prod.outlook.com ([fe80::4046:430d:f16c:b842%5]) with mapi id 15.20.8377.021; Tue, 28 Jan 2025 05:13:27 +0000 From: "Teres Alexis, Alan Previn" To: "igt-dev@lists.freedesktop.org" , "Ceraolo Spurio, Daniele" Subject: Re: [PATCH i-g-t v2 8/9] tests/intel/xe_pxp: Termination tests Thread-Topic: [PATCH i-g-t v2 8/9] tests/intel/xe_pxp: Termination tests Thread-Index: AQHbZ6x+hfVZhI9J+EOVkGRa8P8dKrMrt16A Date: Tue, 28 Jan 2025 05:13:27 +0000 Message-ID: References: <20250116001951.4159243-1-daniele.ceraolospurio@intel.com> <20250116001951.4159243-9-daniele.ceraolospurio@intel.com> In-Reply-To: <20250116001951.4159243-9-daniele.ceraolospurio@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM8PR11MB5751:EE_|BL1PR11MB5253:EE_ x-ms-office365-filtering-correlation-id: cf0b56f2-ad11-4c54-99ae-08dd3f5a7f7e x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?Y0pjcjZlSWIxM21zVUNTbEwwZS9OVTA0OVJtRko1ZTUyYkRxTDhVNUNQcjZ3?= =?utf-8?B?OWczYytXQUJRSWhpT3FkL2RhVktqZ1VPNmxtTFNFUEJnWm9HYm5GYlJWa25W?= =?utf-8?B?dDhTUmxCYW1mdUNyMDB1UzQrc2oydDBUanNWY08rT2JYcWNPaCtkU05ucW4v?= =?utf-8?B?dEZVVGJ3c2Vvd2JjMVIycmZkV29yUW90MjcyRzBjR25ZSUpVM1NzaDJlZUVH?= =?utf-8?B?aUhFK0xmaW1UTnBNZGlRN29yTUtuY1VDVFpaWFNiK3Ird3crc3JabTNwNm9M?= =?utf-8?B?MWJzemlGOHVpenRzQ2R1T01aRGhORUV1QWp0VW9lRS8wNGNhNzlvMkpkWjBa?= =?utf-8?B?QWpSaVdKWTM0cjNJK09OeDlCUWF1bG1VOGMzK0k3WjBHYzlUM3VEZmpkRER4?= =?utf-8?B?YVBLSmdXMmNNbFNJUlg1YmlqTnZZVFlPaU1BMGVXM2oxczNFdzRTVWhFdlJM?= =?utf-8?B?UW42R3FLRWMyUlBtazNmOFcxSkZ5QUxHZlBDZFVqSVlUdlVVSk00Wkk2bTRp?= =?utf-8?B?WEVlTjUwSlBWc3BYanNSeEZ5NFgwMDM0WGQ4WUlsa3hjYTRCWWxDcmI0NjVD?= =?utf-8?B?VnRFK2NlNmVMR1IyZXFkcCtjTHlBcGJtdCtKYTJwUzF3WDJnMGRBcEJyKzRI?= =?utf-8?B?QlVnUm5CYkUwVTArVGFhODhqSzZiWExIbHZuRjBqaTdUYmlNSjFmcHY5YWE5?= =?utf-8?B?ck5xeWRlMllpM2xMWFBWZ1pJSU52MTVmRytFbys5ZVA4Mk9KeDliamdrYlNj?= =?utf-8?B?OWwxZytXOVU3SzQzQTdLQkZyVlBNem50MlFNTk1CWHhxRkhpYmZUTTRONUZ3?= =?utf-8?B?cTNRQkszNHh5d1ZhVi9UTi96WWxUdkp1bHpFQ3lGWFkyTkVUVDV1VHFIRmVP?= =?utf-8?B?dDIybVFFYm1rbnkvRG5pcFY2M1NRK1dHcXFMdDdsaFF1SDQ5UForbjFhMU5x?= =?utf-8?B?Mkd5Yiswc2JYZlhYZStYc2MwYi9lM25Gc1JhM1BHNmp2RVlvZ2NYV1BmSWZN?= =?utf-8?B?OG00d0xpODFaY1FyZS9wT096ajUyTWMwalpjL1pvZWNxODk5Ny84bFA5Yllw?= =?utf-8?B?aDU0NWRXSkZHdGdrcmxmYnZ5cHlQUHVaaytHVk4xM0Q5T0phSlZ1N1RCTk1I?= =?utf-8?B?dGlzZFdFQ01ZeEUyaVFQc09lcFJyL3NJQ1JGVjlOeG8wOTQyMGpiQ2w3UUNS?= =?utf-8?B?elBkSldvWTFxWTVmQnpWcVVQQnhmY1ppd2w3MitEMzQ5ejhFTi8wc1JRT01y?= =?utf-8?B?bDQ3aTdoazBXOTE3TVJIK2hYemI1dDV2MU9nd3RQbG1FalI5K2xCSlpqdTdj?= =?utf-8?B?YUIyNjRabkJlTURmeHRuZWNxZDBqV0VSUmQwTnJ0SjFvSjBzNG9BL1gvWTd2?= =?utf-8?B?SUk3bklRS1NpWi9oUVA1WDlRRDNDOE1teXVibHcvU1hRL0tTM0lnOVdETHpp?= =?utf-8?B?RER0OWVQanNNQ1hzMlFZcDk4Y2F2MTJwQnB2NTJxdlM1TitEM2QweVByMEJI?= =?utf-8?B?Y01oWnUyazRpZUhqaVUvZFFYeHFybHNDb0Rxc2ZZbnA1MFl5Njh2REJwTy9x?= =?utf-8?B?ZFZEMHM0d2RLWlVSMlZkUWRrY0ZBSVR0M253US9qNEFXQ0gzVlRjOUdTRUpx?= =?utf-8?B?Z1BMYkVHL2NnSkNvQmovaFJ1RkFlQmNHYlYzd3FlV0tSUmJmaXhvbks5d00x?= =?utf-8?B?MW9EUkZtZmZLSDk1Y0JFN1RwbVZzQnB2M3pBM2E5ZGNBZzNXbGNRNnRrNEpD?= =?utf-8?B?TzFPclZoN3dhOVZISmdoZTZSd1FpRktsdnoxZmRrWjlLUjBOMWlXVU0zN0xh?= =?utf-8?B?b0NLUi9ERERJYVl6V0JManYwY1AzS25nOWljSEZkZ3VobEl1RXhDQ09odW16?= =?utf-8?B?M3l0SlBPaUZodzkzVFNiTkFLL1ZpRjR5cFkvM3dNeGhzd25JMWM4N1hrRkdW?= =?utf-8?Q?xWi28Iu/GDmnJL3M6kyvDs8bF6jCcx4o?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM8PR11MB5751.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?eHE2WHRXMjhjQm1SZE14Y0lzZEJOMlE2aW5zR3VLTmUzcDNkWkp2NzE3ZkRl?= =?utf-8?B?LzF2MUZTZjEvMXpVN1R6U0NzTmN3dFVxUFFQckd2UGF2R2Y2aFRyRUREUE9o?= =?utf-8?B?b08rYVp5VGZiUnNKaFVSSnpGK1NBNVhHWkNSbWhwTnF1UEo5WTl4WTZSaVp1?= =?utf-8?B?QTR0QUhSbFZqaFI3UmRZUU5YREJxT0YyTGN6akZueFFaNU1tUm51clZNeTlH?= =?utf-8?B?c29CZ0RpV3JPdVNOWjVXanZEOWE3dFVZZVZNbzhzRUtRQStIOWt6UHlMc3Bu?= =?utf-8?B?MzV1UnVwQXYwK0ZYbnlsMW9yRlBmVWhFeXlLeExQOWI4blBlOUNNWGw4b1hR?= =?utf-8?B?NlJCclEzeDVpUlk5RFlvUXUydHE5b0ZxMm1ad011bWVycDhMTTZJbDlJWWVi?= =?utf-8?B?K2gvMm5YdVFkNDgzRE9vV3FrTjF6WXUyVUJzOUMwV090SHZTdDZINkZoM2pB?= =?utf-8?B?a0FYZjJ1NlNCNnMxREM4TTExQTdMR3lGZXJtL3BLZUY5all1NUgyL2dWcXhl?= =?utf-8?B?dlpoYTROenh2b1prY3ZVWlhDYWZRQzZHQ1c4My9XWFhBQzBBZnlKTGVFaWs5?= =?utf-8?B?WGh0a3ZzN3ZBNWNuK2ZRS0h5allqczhYMC9rMVorWlIrSjVucEVabFJyREZx?= =?utf-8?B?Y3pJY1RsYnVWQ0x3dTdGN0hXZHZ2ZGZkeFpTWWgrbWtYeVVrQzRMZ0UybW9G?= =?utf-8?B?NEErK3hDUVEvQkpXeGNROVBrbVlwanJ2ZnZSV3F0aXBneDhIOTFRZURUZWJ6?= =?utf-8?B?NG1ac29MajhNM2FsbnlqaC94c3lwdyt2YTRnY01XTUN0TzQ4My95VkFNaXJU?= =?utf-8?B?dGRqN25wdVp3elFZWFpidW05NnFMbk9tOU1jZVZtak40R3krcEdIVk53T09s?= =?utf-8?B?WDJlUTdXUFlwVjhHUFpuZHZLTzVJN0o1SWVSTWx1WmY3d1RuRkFBcGE0aVhY?= =?utf-8?B?OGE0T2lOZGY4N2ticGc4NVBzRmdGU0ZtbEZtajZYc2lXeEdDT3ZyR3JMUWtl?= =?utf-8?B?RjlDeFdPN2R2Z1h1ajVaUkQwZ1luWTU0WlVvMzVpd2hUdXVtMW5pd2NpN2Za?= =?utf-8?B?U0FWOWtKRUZ4SFpEamk4OUx2cklxN251SEw5dDMvenNTRlU1cjAxc1dQL2U3?= =?utf-8?B?bmN3VG9rWGR1b01jQlVZcnRpUkRHNDlyWTF1dGc5bWVncHY2SnlVOHNUcGlr?= =?utf-8?B?Z24xanJLb1FNUEtWbUV1MVUvMi9wQ2w2endCU3RLckhvaW1QVzcxbEZRY0hD?= =?utf-8?B?NHFDMlpmUjMxSlE1djdaSlBCYUNtd2NVbWVxdWRqci9mR094Ull5OURJTitL?= =?utf-8?B?N3M0VE03VWpUQi9mbW9ZV3lYdHZiS0pZd01GbWlGR3Q3ckJTV2Q5ZDR0a1dT?= =?utf-8?B?cTlwRldwRWgxbW5zTHVxSi9wVkdjRjhkY2F5Nkx2RW5iaXB6VHdqMTVFajBp?= =?utf-8?B?QThuQ1lWbFFGS2V3UjhQbmtLaEdjQnFWRkZjY0dQQWhCYk5sU0dJclhVRVlo?= =?utf-8?B?R1UyYmo1MksvOXgwYmJUZkhjZUQzQ2pGTG9tcmpuUmplbG41OVpESnJRa3J5?= =?utf-8?B?Rjc3THB6WGNVTUFNUTdQSS9HMUowSHRCeDYwR3BEMlYzblhDTjNCTDJBMFpW?= =?utf-8?B?a1IrVCtyVGZnZURoWWdIZWxKSmFrckVjNGFWeFMxVHZtdjhXMXlEbnJ4Mzh3?= =?utf-8?B?c1JlSnNvVnc1cUlpNWxZcXRjd2FLOEQ4VGtHMFRFOEtsS3VZamw1dldaejU3?= =?utf-8?B?LytLZzNyZkoxTHIyOUlubjFTaVRmRExBaTBPdmhsL1ZrdXY3OVFhcnFadXlW?= =?utf-8?B?NXdvUlE0OWFzMS9wZ2hyMjBrcWxGdE4yQWNPUHNZOTBaODNmZGNjVkNOajBh?= =?utf-8?B?MHhLYkVJek5vOFNrQUpHb2FuTEJyYWZPUDBFRlAzSUlYV1RlNHQ2S2dZVzRM?= =?utf-8?B?Y0ZCdUhlWVRMSi9RVDVzTEZxalF4c0dkSm5ianVnK0djcmJOdStaZGYyWWhM?= =?utf-8?B?aTJhbUVjNTNydlZXSDJ3dGp3YjhNSTNKamFyZGJaT3c0Z1Z4amtkdXN2SE5E?= =?utf-8?B?eFh3N3ZYM3Exbzc0MHhkeGpTS2cvTFgrdzRFVm41ZG9YSXR5TGlGNHo2Yi9J?= =?utf-8?B?OU1rajE1empnTGdBQ3ZTMUNzZm81RkRXcEJSbVk0Qmhlb1Fzb1NLeXBWVDEy?= =?utf-8?Q?OLmkAG/Pt0J2wdwixS2YDu8=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <5720DE83B41DE24BB13435717C4FC04D@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8PR11MB5751.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: cf0b56f2-ad11-4c54-99ae-08dd3f5a7f7e X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Jan 2025 05:13:27.4898 (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: zmsySZeI2HpZuAInBo97MCFlVwuLPxjH4qVHn0BT3p655Ft5rSEx86DgQ4pxSxtzAc2ZKKqkH//Wo4G0jJzPH4KcTn1w3L7RcqoYpN6EsEfIlsiQxMv3LJmDY/hruQCK X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR11MB5253 X-OriginatorOrg: intel.com X-BeenThere: igt-dev@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development mailing list for IGT GPU Tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" T25seSBhIGNvdXBsZSBvZiBxdWVzdGlvbnMgKHBvdGVudGlhbCBmZWVkYmFjaykgYmVsb3cgLSBi dXQgZ2VuZXJhbGx5IGV2ZXJ5dGhpbmcgbG9va3Mgb2theS4KCi4uLmFsYW4KCgoKT24gV2VkLCAy MDI1LTAxLTE1IGF0IDE2OjE5IC0wODAwLCBEYW5pZWxlIENlcmFvbG8gU3B1cmlvIHdyb3RlOgo+ IFRoZXJlIGFyZSBzZXZlcmFsIGV2ZW50cyB0aGF0IGNhbiBjYXVzZSB0aGUgUFhQIGtleSB0byBi ZSBpbnZhbGlkYXRlZAo+IGFuZCB0cmlnZ2VyIGEgUFhQIHRlcm1pbmF0aW9uIChzdXNwZW5kLCBQ WFAgdGVybWluYXRpb24gaXJxKS4gQWZ0ZXIgYQo+IHRlcm1pbmF0aW9uLCB3ZSBleHBlY3QgdGhl IGtleSB0byBiZSBkaWZmZXJlbnQgYW5kIHRoZSByYXcgZW5jcnlwdGVkCj4gZGF0YSB0byBjaGFu Z2UgZm9yIHRoZSBzYW1lIHNvdXJjZSBkYXRhLgo+IEFkZGl0aW9uYWxseSwgYWxsIFBYUCBvYmpl Y3RzIGFyZSBpbnZhbGlkYXRlZCBkdXJpbmcgYSB0ZXJtaW5hdGlvbiBhbmQKPiBjYW4gbm8gbG9u Z2VyIGJlIHVzZWQgaW4gc3VibWlzc2lvbiBvciBrZXB0IG1hcHBlZCB0byBWTXM7IHdlIHRoZXJl Zm9yZQo+IG5lZWQgdG8gdGVzdCBib3RoIHRoZSBleGVjdXRpb24gYW5kIGJpbmQgaW9jdGxzIHRv IG1ha2Ugc3VyZSB0aGV5IHdvcmsKPiBhcyBleHBlY3RlZCBhZnRlciBhIHRlcm1pbmF0aW9uLgo+ IAo+IHYyOiBtb3ZlIGlndF9yZXF1aXJlIGNhbGxzIGluc2lkZSB0aGUgc3VidGVzdAo+IAo+IFNp Z25lZC1vZmYtYnk6IERhbmllbGUgQ2VyYW9sbyBTcHVyaW8gPGRhbmllbGUuY2VyYW9sb3NwdXJp b0BpbnRlbC5jb20+Cj4gLS0tCj4gwqBsaWIvaW50ZWxfYmF0Y2hidWZmZXIuYyB8wqDCoCA4ICst Cj4gwqBsaWIvaW50ZWxfYmF0Y2hidWZmZXIuaCB8wqDCoCAxICsKPiDCoGxpYi94ZS94ZV9pb2N0 bC5jwqDCoMKgwqDCoMKgIHzCoCAxMiArLQo+IMKgbGliL3hlL3hlX2lvY3RsLmjCoMKgwqDCoMKg wqAgfMKgwqAgMiArCj4gwqB0ZXN0cy9pbnRlbC94ZV9weHAuY8KgwqDCoCB8IDQ1MyArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4gwqA1IGZpbGVzIGNoYW5nZWQsIDQ2 MyBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvbGliL2lu dGVsX2JhdGNoYnVmZmVyLmMgYi9saWIvaW50ZWxfYmF0Y2hidWZmZXIuYwo+IGluZGV4IDQ4OWU3 ODc4Mi4uYTE1ODU5Nzg2IDEwMDY0NAo+IC0tLSBhL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5jCj4g KysrIGIvbGliL2ludGVsX2JhdGNoYnVmZmVyLmMKPiBAQCAtMjQxNiw5ICsyNDE2LDkgQEAgc3Rh dGljIHZvaWQgdXBkYXRlX29mZnNldHMoc3RydWN0IGludGVsX2JiICppYmIsCj4gwqAKPiDCoCNk ZWZpbmUgTElORUxFTiA3Ngo+IMKgCj4gLXN0YXRpYyBpbnQKPiAtX194ZV9iYl9leGVjKHN0cnVj dCBpbnRlbF9iYiAqaWJiLCB1aW50NjRfdCBmbGFncywgYm9vbCBzeW5jKQo+ICtpbnQgX194ZV9i Yl9leGVjKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50NjRfdCBmbGFncywgYm9vbCBzeW5jKQo+ IMKgewo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQgPSAwOwo+IMKgwqDCoMKgwqDCoMKgwqB1aW50 MzJfdCBlbmdpbmUgPSBmbGFncyAmIChJOTE1X0VYRUNfQlNEX01BU0sgfCBJOTE1X0VYRUNfUklO R19NQVNLKTsKPiDCoMKgwqDCoMKgwqDCoMKgdWludDMyX3QgZW5naW5lX2lkOwo+IMKgwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgZHJtX3hlX3N5bmMgc3luY3NbMl0gPSB7Cj4gQEAgLTI0OTUsMTIgKzI0 OTUsMTIgQEAgX194ZV9iYl9leGVjKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50NjRfdCBmbGFn cywgYm9vbCBzeW5jKQo+IMKgwqDCoMKgwqDCoMKgwqBpYmItPmVuZ2luZV9zeW5jb2JqID0gc3lu Y29ial9jcmVhdGUoaWJiLT5mZCwgMCk7Cj4gwqDCoMKgwqDCoMKgwqDCoHN5bmNzWzFdLmhhbmRs ZSA9IGliYi0+ZW5naW5lX3N5bmNvYmo7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqB4ZV9leGVjX3N5 bmMoaWJiLT5mZCwgZW5naW5lX2lkLCBpYmItPmJhdGNoX29mZnNldCwgc3luY3MsIDIpOwo+ICvC oMKgwqDCoMKgwqDCoHJldCA9IHhlX2V4ZWNfc3luY19mYWlsYWJsZShpYmItPmZkLCBlbmdpbmVf aWQsIGliYi0+YmF0Y2hfb2Zmc2V0LCBzeW5jcywgMik7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKg aWYgKHN5bmMpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9iYl9zeW5j KGliYik7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gcmV0Owo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgaW50Cj4gZGlmZiAtLWdpdCBhL2xpYi9p bnRlbF9iYXRjaGJ1ZmZlci5oIGIvbGliL2ludGVsX2JhdGNoYnVmZmVyLmgKPiBpbmRleCAxNzhh YWE5ZDguLjZhN2U4ZGY0YSAxMDA2NDQKPiAtLS0gYS9saWIvaW50ZWxfYmF0Y2hidWZmZXIuaAo+ ICsrKyBiL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5oCj4gQEAgLTUwOCw2ICs1MDgsNyBAQCB2b2lk IGludGVsX2JiX2R1bXBfY2FjaGUoc3RydWN0IGludGVsX2JiICppYmIpOwo+IMKgCj4gwqB2b2lk IGludGVsX2JiX2V4ZWMoc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGVuZF9vZmZzZXQs Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVpbnQ2NF90IGZsYWdzLCBi b29sIHN5bmMpOwo+ICtpbnQgX194ZV9iYl9leGVjKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50 NjRfdCBmbGFncywgYm9vbCBzeW5jKTsKPiDCoAo+IMKgdWludDY0X3QgaW50ZWxfYmJfZ2V0X29i amVjdF9vZmZzZXQoc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGhhbmRsZSk7Cj4gwqBi b29sIGludGVsX2JiX29iamVjdF9vZmZzZXRfdG9fYnVmKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCBz dHJ1Y3QgaW50ZWxfYnVmICpidWYpOwo+IGRpZmYgLS1naXQgYS9saWIveGUveGVfaW9jdGwuYyBi L2xpYi94ZS94ZV9pb2N0bC5jCj4gaW5kZXggMDFhYjdjNzU4Li5jZDczMTRlZGEgMTAwNjQ0Cj4g LS0tIGEvbGliL3hlL3hlX2lvY3RsLmMKPiArKysgYi9saWIveGUveGVfaW9jdGwuYwo+IEBAIC00 NjIsOCArNDYyLDggQEAgdm9pZCB4ZV9leGVjKGludCBmZCwgc3RydWN0IGRybV94ZV9leGVjICpl eGVjKQo+IMKgwqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0X2VxKF9feGVfZXhlYyhmZCwgZXhlYyks IDApOwo+IMKgfQo+IMKgCj4gLXZvaWQgeGVfZXhlY19zeW5jKGludCBmZCwgdWludDMyX3QgZXhl Y19xdWV1ZSwgdWludDY0X3QgYWRkciwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGRybV94ZV9zeW5jICpzeW5jLCB1aW50MzJfdCBudW1fc3luY3MpCj4gK2ludCB4 ZV9leGVjX3N5bmNfZmFpbGFibGUoaW50IGZkLCB1aW50MzJfdCBleGVjX3F1ZXVlLCB1aW50NjRf dCBhZGRyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGRybV94ZV9zeW5jICpzeW5jLCB1aW50MzJfdCBudW1fc3luY3MpCj4gwqB7Cj4g wqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1feGVfZXhlYyBleGVjID0gewo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLmV4ZWNfcXVldWVfaWQgPSBleGVjX3F1ZXVlLAo+IEBAIC00 NzMsNyArNDczLDEzIEBAIHZvaWQgeGVfZXhlY19zeW5jKGludCBmZCwgdWludDMyX3QgZXhlY19x dWV1ZSwgdWludDY0X3QgYWRkciwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5u dW1fYmF0Y2hfYnVmZmVyID0gMSwKPiDCoMKgwqDCoMKgwqDCoMKgfTsKPiDCoAo+IC3CoMKgwqDC oMKgwqDCoGlndF9hc3NlcnRfZXEoX194ZV9leGVjKGZkLCAmZXhlYyksIDApOwo+ICvCoMKgwqDC oMKgwqDCoHJldHVybiBfX3hlX2V4ZWMoZmQsICZleGVjKTsKPiArfQo+ICsKPiArdm9pZCB4ZV9l eGVjX3N5bmMoaW50IGZkLCB1aW50MzJfdCBleGVjX3F1ZXVlLCB1aW50NjRfdCBhZGRyLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3hlX3N5bmMgKnN5bmMs IHVpbnQzMl90IG51bV9zeW5jcykKPiArewo+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnRfZXEo eGVfZXhlY19zeW5jX2ZhaWxhYmxlKGZkLCBleGVjX3F1ZXVlLCBhZGRyLCBzeW5jLCBudW1fc3lu Y3MpLCAwKTsKPiDCoH0KPiDCoAo+IMKgdm9pZCB4ZV9leGVjX3dhaXQoaW50IGZkLCB1aW50MzJf dCBleGVjX3F1ZXVlLCB1aW50NjRfdCBhZGRyKQo+IGRpZmYgLS1naXQgYS9saWIveGUveGVfaW9j dGwuaCBiL2xpYi94ZS94ZV9pb2N0bC5oCj4gaW5kZXggYzhhMmQ4MWM1Li45YmRmNzNiMmIgMTAw NjQ0Cj4gLS0tIGEvbGliL3hlL3hlX2lvY3RsLmgKPiArKysgYi9saWIveGUveGVfaW9jdGwuaAo+ IEBAIC05MSw2ICs5MSw4IEBAIGludCBfX3hlX2V4ZWMoaW50IGZkLCBzdHJ1Y3QgZHJtX3hlX2V4 ZWMgKmV4ZWMpOwo+IMKgdm9pZCB4ZV9leGVjKGludCBmZCwgc3RydWN0IGRybV94ZV9leGVjICpl eGVjKTsKPiDCoHZvaWQgeGVfZXhlY19zeW5jKGludCBmZCwgdWludDMyX3QgZXhlY19xdWV1ZSwg dWludDY0X3QgYWRkciwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBkcm1feGVfc3luYyAqc3luYywgdWludDMyX3QgbnVtX3N5bmNzKTsKPiAraW50IHhlX2V4ZWNf c3luY19mYWlsYWJsZShpbnQgZmQsIHVpbnQzMl90IGV4ZWNfcXVldWUsIHVpbnQ2NF90IGFkZHIs Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1feGVfc3luYyAq c3luYywgdWludDMyX3QgbnVtX3N5bmNzKTsKPiDCoHZvaWQgeGVfZXhlY193YWl0KGludCBmZCwg dWludDMyX3QgZXhlY19xdWV1ZSwgdWludDY0X3QgYWRkcik7Cj4gwqBpbnQgX194ZV93YWl0X3Vm ZW5jZShpbnQgZmQsIHVpbnQ2NF90ICphZGRyLCB1aW50NjRfdCB2YWx1ZSwKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVpbnQzMl90IGV4ZWNfcXVldWUsIGludDY0 X3QgKnRpbWVvdXQpOwo+IGRpZmYgLS1naXQgYS90ZXN0cy9pbnRlbC94ZV9weHAuYyBiL3Rlc3Rz L2ludGVsL3hlX3B4cC5jCj4gaW5kZXggNTdiODJhM2Q2Li44NmQ2NDliMmQgMTAwNjQ0Cj4gLS0t IGEvdGVzdHMvaW50ZWwveGVfcHhwLmMKPiArKysgYi90ZXN0cy9pbnRlbC94ZV9weHAuYwo+IEBA IC00LDYgKzQsNyBAQAo+IMKgICovCj4gwqAKPiDCoCNpbmNsdWRlICJpZ3QuaCIKPiArI2luY2x1 ZGUgImlndF9zeW5jb2JqLmgiCj4gwqAjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKPiDC oCNpbmNsdWRlICJpbnRlbF9idWZvcHMuaCIKPiDCoCNpbmNsdWRlICJpbnRlbF9tb2NzLmgiCj4g QEAgLTgxLDYgKzgyLDE1IEBAIHN0YXRpYyB1aW50MzJfdCBjcmVhdGVfcHhwX3Jjc19xdWV1ZShp bnQgZmQsIHVpbnQzMl90IHZtKQo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcTsKPiDCoH0KPiDC oAo+ICtzdGF0aWMgdWludDMyX3QgY3JlYXRlX3JlZ3VsYXJfcmNzX3F1ZXVlKGludCBmZCwgdWlu dDMyX3Qgdm0pCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX3hlX2VuZ2luZV9jbGFz c19pbnN0YW5jZSBpbnN0ID0gewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZW5n aW5lX2NsYXNzID0gRFJNX1hFX0VOR0lORV9DTEFTU19SRU5ERVIsCj4gK8KgwqDCoMKgwqDCoMKg fTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHhlX2V4ZWNfcXVldWVfY3JlYXRlKGZkLCB2 bSwgJmluc3QsIDApOwo+ICt9Cj4gKwo+IMKgc3RhdGljIGludCBxdWVyeV9weHBfc3RhdHVzKGlu dCBmZCkKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV94ZV9xdWVyeV9weHBfc3Rh dHVzICpweHBfcXVlcnk7Cj4gQEAgLTMzOCwxNSArMzQ4LDI1IEBAIHN0YXRpYyB2b2lkIHB4cF9y ZW5kZXJjb3B5KGludCBmZCwgdWludDMyX3QgcSwgdWludDMyX3Qgdm0sIHVpbnQzMl90IGNvcHlf c2l6ZSwKPiDCoMKgwqDCoMKgwqDCoMKgYnVmX29wc19kZXN0cm95KGJvcHMpOwo+IMKgfQo+IMKg Cj4gLS8qKgo+IC0gKiBTVUJURVNUOiByZWd1bGFyLXNyYy10by1weHAtZGVzdC1yZW5kZXJjb3B5 Cj4gLSAqIERlc2NyaXB0aW9uOiBjb3B5IGZyb20gYSByZWd1bGFyIEJPIHRvIGEgUFhQIG9uZSBh bmQgdmVyaWZ5IHRoZSBlbmNyeXB0aW9uCj4gLSAqLwo+IC1zdGF0aWMgdm9pZCB0ZXN0X3JlbmRl cl9yZWd1bGFyX3NyY190b19weHBfZGVzdChpbnQgZmQpCj4gK3N0YXRpYyB2b2lkIGNvcHlfYm9f Y3B1KGludCBmZCwgdWludDMyX3QgYm8sIHVpbnQzMl90ICpkc3QsIHVpbnQzMl90IHNpemUpCj4g K3sKPiArwqDCoMKgwqDCoMKgwqB1aW50MzJfdCAqc3JjX3B0cjsKPiArCj4gK8KgwqDCoMKgwqDC oMKgc3JjX3B0ciA9IHhlX2JvX21tYXBfZXh0KGZkLCBibywgc2l6ZSwgUFJPVF9SRUFEKTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgbWVtY3B5KGRzdCwgc3JjX3B0ciwgc2l6ZSk7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoGlndF9hc3NlcnRfZXEobXVubWFwKHNyY19wdHIsIHNpemUpLCAwKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgX190ZXN0X3JlbmRlcl9yZWd1bGFyX3NyY190b19weHBfZGVzdChp bnQgZmQsIHVpbnQzMl90ICpvdXRwaXhlbHMsIGludCBvdXRzaXplKQo+IMKgewo+IMKgwqDCoMKg wqDCoMKgwqB1aW50MzJfdCB2bSwgc3JjYm8sIGRzdGJvOwo+IMKgwqDCoMKgwqDCoMKgwqB1aW50 MzJfdCBxOwo+IMKgCj4gK8KgwqDCoMKgwqDCoMKgaWYgKG91dHBpeGVscykKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydF9sdGUoVFNUU1VSRl9TSVpFLCBvdXRzaXpl KTsKPiArCj4gwqDCoMKgwqDCoMKgwqDCoHZtID0geGVfdm1fY3JlYXRlKGZkLCAwLCAwKTsKPiDC oAo+IMKgwqDCoMKgwqDCoMKgwqAvKgo+IEBAIC0zNjIsMTIgKzM4MiwyNCBAQCBzdGF0aWMgdm9p ZCB0ZXN0X3JlbmRlcl9yZWd1bGFyX3NyY190b19weHBfZGVzdChpbnQgZmQpCj4gwqAKPiDCoMKg wqDCoMKgwqDCoMKgY2hlY2tfYm9fY29sb3IoZmQsIGRzdGJvLCBUU1RTVVJGX1NJWkUsIFRTVFNV UkZfRklMTENPTE9SMSwgZmFsc2UpOwo+IMKgCj4gK8KgwqDCoMKgwqDCoMKgaWYgKG91dHBpeGVs cykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29weV9ib19jcHUoZmQsIGRzdGJv LCBvdXRwaXhlbHMsIFRTVFNVUkZfU0laRSk7Cj4gKwo+IMKgwqDCoMKgwqDCoMKgwqBnZW1fY2xv c2UoZmQsIHNyY2JvKTsKPiDCoMKgwqDCoMKgwqDCoMKgZ2VtX2Nsb3NlKGZkLCBkc3Ribyk7Cj4g wqDCoMKgwqDCoMKgwqDCoHhlX2V4ZWNfcXVldWVfZGVzdHJveShmZCwgcSk7Cj4gwqDCoMKgwqDC oMKgwqDCoHhlX3ZtX2Rlc3Ryb3koZmQsIHZtKTsKPiDCoH0KPiDCoAo+ICsvKioKPiArICogU1VC VEVTVDogcmVndWxhci1zcmMtdG8tcHhwLWRlc3QtcmVuZGVyY29weQo+ICsgKiBEZXNjcmlwdGlv bjogY29weSBmcm9tIGEgcmVndWxhciBCTyB0byBhIFBYUCBvbmUgYW5kIHZlcmlmeSB0aGUgZW5j cnlwdGlvbgo+ICsgKi8KPiArc3RhdGljIHZvaWQgdGVzdF9yZW5kZXJfcmVndWxhcl9zcmNfdG9f cHhwX2Rlc3QoaW50IGZkKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgX190ZXN0X3JlbmRlcl9yZWd1 bGFyX3NyY190b19weHBfZGVzdChmZCwgTlVMTCwgMCk7Cj4gK30KPiArCj4gwqBzdGF0aWMgaW50 IGJvY21wKGludCBmZCwgdWludDMyX3QgYm8xLCB1aW50MzJfdCBibzIsIHVpbnQzMl90IHNpemUp Cj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoHVpbnQzMl90ICpwdHIxLCAqcHRyMjsKPiBAQCAtNDI5 LDEzICs0NjEsNDAwIEBAIHN0YXRpYyB2b2lkIHRlc3RfcmVuZGVyX3B4cF9wcm90c3JjX3RvX3By b3RkZXN0KGludCBmZCkKPiDCoMKgwqDCoMKgwqDCoMKgeGVfdm1fZGVzdHJveShmZCwgdm0pOwo+ IMKgfQo+IMKgCj4gLXN0YXRpYyB2b2lkIHJlcXVpcmVfcHhwX3JlbmRlcihib29sIHB4cF9zdXBw b3J0ZWQsIHVpbnQzMl90IGRldmlkKQo+ICsjZGVmaW5lIFBTX09QX1RBR19MT1cgMHgxMjM0ZmVk MAo+ICsjZGVmaW5lIFBTX09QX1RBR19ISSAweDU2NzhjYmFmCj4gK3N0YXRpYyB2b2lkIGVtaXRf cGlwZWN0cmwoc3RydWN0IGludGVsX2JiICppYmIsIHN0cnVjdCBpbnRlbF9idWYgKmZlbmNlYikK PiArewo+ICvCoMKgwqDCoMKgwqDCoHVpbnQzMl90IHBpcGVfY3RsX2ZsYWdzID0gMDsKPiArCj4g K8KgwqDCoMKgwqDCoMKgaW50ZWxfYmJfb3V0KGliYiwgR0ZYX09QX1BJUEVfQ09OVFJPTCgyKSk7 Cj4gK8KgwqDCoMKgwqDCoMKgaW50ZWxfYmJfb3V0KGliYiwgcGlwZV9jdGxfZmxhZ3MpOwo+ICsK PiArwqDCoMKgwqDCoMKgwqBwaXBlX2N0bF9mbGFncyA9IChQSVBFX0NPTlRST0xfRkxVU0hfRU5B QkxFIHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBQSVBFX0NPTlRST0xfUVdfV1JJVEUpOwo+ICvCoMKgwqDCoMKg wqDCoGludGVsX2JiX291dChpYmIsIEdGWF9PUF9QSVBFX0NPTlRST0woNikpOwo+ICvCoMKgwqDC oMKgwqDCoGludGVsX2JiX291dChpYmIsIHBpcGVfY3RsX2ZsYWdzKTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGZlbmNlYi0+aGFuZGxlLCAwLCBJOTE1X0dF TV9ET01BSU5fQ09NTUFORCwgMCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBmZW5jZWItPmFkZHIub2Zmc2V0KTsKPiArwqDCoMKgwqDCoMKg wqBpbnRlbF9iYl9vdXQoaWJiLCBQU19PUF9UQUdfTE9XKTsKPiArwqDCoMKgwqDCoMKgwqBpbnRl bF9iYl9vdXQoaWJiLCBQU19PUF9UQUdfSEkpOwo+ICvCoMKgwqDCoMKgwqDCoGludGVsX2JiX291 dChpYmIsIE1JX05PT1ApOwo+ICvCoMKgwqDCoMKgwqDCoGludGVsX2JiX291dChpYmIsIE1JX05P T1ApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhc3NlcnRfcGlwZWN0bF9zdG9yZWR3X2RvbmUo aW50IGZkLCB1aW50MzJfdCBibykKPiArewo+ICvCoMKgwqDCoMKgwqDCoHVpbnQzMl90ICpwdHI7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHB0ciA9IHhlX2JvX21tYXBfZXh0KGZkLCBibywgNDA5Niwg UFJPVF9SRUFEfFBST1RfV1JJVEUpOwo+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnRfZXEocHRy WzBdLCBQU19PUF9UQUdfTE9XKTsKPiArwqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0X2VxKHB0clsx XSwgUFNfT1BfVEFHX0hJKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydChtdW5tYXAo cHRyLCA0MDk2KSA9PSAwKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBzdWJtaXRfZmx1c2hfc3Rv cmVfZHcoaW50IGZkLCB1aW50MzJfdCBxLCBib29sIHFfaXNfcHhwLCB1aW50MzJfdCB2bSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdWludDMyX3QgZHN0LCBib29sIGRzdF9pc19weHApCj4gK3sKPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgaW50ZWxfYnVmICpkc3RidWY7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGJ1Zl9v cHMgKmJvcHM7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2JiICppYmI7Cj4gK8KgwqDC oMKgwqDCoMKgaW50IHJldCA9IDA7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGJvcHMgPSBidWZfb3Bz X2NyZWF0ZShmZCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydChib3BzKTsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgaWJiID0gaW50ZWxfYmJfY3JlYXRlX3dpdGhfY29udGV4dChmZCwgcSwgdm0s IE5VTEwsIDQwOTYpOwo+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnQoaWJiKTsKPiArwqDCoMKg wqDCoMKgwqBpbnRlbF9iYl9zZXRfcHhwKGliYiwgcV9pc19weHAsIERJU1BMQVlfQVBQVFlQRSwg RFJNX1hFX1BYUF9IV0RSTV9ERUZBVUxUX1NFU1NJT04pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBk c3RidWYgPSBidWZfY3JlYXRlKGZkLCBib3BzLCBkc3QsIDI1NiwgNCwgMzIsIDQwOTYpOwo+ICvC oMKgwqDCoMKgwqDCoGludGVsX2J1Zl9zZXRfcHhwKGRzdGJ1ZiwgZHN0X2lzX3B4cCk7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoGludGVsX2JiX3B0cl9zZXQoaWJiLCAwKTsKPiArwqDCoMKgwqDCoMKg wqBpbnRlbF9iYl9hZGRfaW50ZWxfYnVmKGliYiwgZHN0YnVmLCB0cnVlKTsKPiArwqDCoMKgwqDC oMKgwqBlbWl0X3BpcGVjdHJsKGliYiwgZHN0YnVmKTsKPiArwqDCoMKgwqDCoMKgwqBpbnRlbF9i Yl9lbWl0X2JiZShpYmIpOwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IF9feGVfYmJfZXhlYyhpYmIs IDAsIGZhbHNlKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0ID09IDApCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGludGVsX2JiX3N5bmMoaWJiKTsKPiArwqDCoMKgwqDC oMKgwqBpZiAocmV0ID09IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFzc2Vy dF9waXBlY3RsX3N0b3JlZHdfZG9uZShmZCwgZHN0KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaW50 ZWxfYnVmX2Rlc3Ryb3koZHN0YnVmKTsKPiArwqDCoMKgwqDCoMKgwqBpbnRlbF9iYl9kZXN0cm95 KGliYik7Cj4gK8KgwqDCoMKgwqDCoMKgYnVmX29wc19kZXN0cm95KGJvcHMpOwo+ICsKPiArwqDC oMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0cmlnZ2VyX3B4 cF9kZWJ1Z2ZzX2ZvcmNlZF90ZWFyZG93bihpbnQgeGVfZmQpCj4gK3sKPiArwqDCoMKgwqDCoMKg wqBjaGFyIHN0clszMl07Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiArwqDCoMKgwqDCoMKg wqBpbnQgZmQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZkID0gaWd0X2RlYnVnZnNfZGlyKHhlX2Zk KTsKPiArwqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0KGZkID49IDApOwo+ICvCoMKgwqDCoMKgwqDC oHJldCA9IGlndF9kZWJ1Z2ZzX3NpbXBsZV9yZWFkKGZkLCAicHhwL3Rlcm1pbmF0ZSIsIHN0ciwg MzIpOwo+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnRfZihyZXQgPj0gMCwgIkNhbid0IG9wZW4g cHhwIHRlcm1pbmF0aW9uIGRlYnVnZnNcbiIpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBnaXZl IHRoZSBrZXJuZWwgdGltZSB0byBoYW5kbGUgdGhlIHRlcm1pbmF0aW9uICovCj4gK8KgwqDCoMKg wqDCoMKgc2xlZXAoMSk7Cj4gK30KPiArCj4gK2VudW0gdGVybWluYXRpb25fdHlwZSB7Cj4gK8Kg wqDCoMKgwqDCoMKgUFhQX1RFUk1JTkFUSU9OX0lSUSwKPiArwqDCoMKgwqDCoMKgwqBQWFBfVEVS TUlOQVRJT05fUlBNLAo+ICvCoMKgwqDCoMKgwqDCoFBYUF9URVJNSU5BVElPTl9TVVNQRU5ECj4g K307Cj4gKwo+ICtzdGF0aWMgdm9pZCB0cmlnZ2VyX3Rlcm1pbmF0aW9uKGludCBmZCwgZW51bSB0 ZXJtaW5hdGlvbl90eXBlIHR5cGUpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKHR5cGUp IHsKPiArwqDCoMKgwqDCoMKgwqBjYXNlIFBYUF9URVJNSU5BVElPTl9JUlE6Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRyaWdnZXJfcHhwX2RlYnVnZnNfZm9yY2VkX3RlYXJkb3du KGZkKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKg wqDCoMKgY2FzZSBQWFBfVEVSTUlOQVRJT05fUlBNOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZ3RfcmVxdWlyZShpZ3Rfd2FpdF9mb3JfcG1fc3RhdHVzKElHVF9SVU5USU1FX1BN X1NUQVRVU19TVVNQRU5ERUQpKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJl YWs7Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBQWFBfVEVSTUlOQVRJT05fU1VTUEVORDoKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X3N5c3RlbV9zdXNwZW5kX2F1dG9yZXN1bWUo U1VTUEVORF9TVEFURV9NRU0sIFNVU1BFTkRfVEVTVF9ERVZJQ0VTKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICt9Cj4gKwo+ICsv KioKPiArICogU1VCVEVTVDogcHhwLXRlcm1pbmF0aW9uLWtleS11cGRhdGUtcG9zdC10ZXJtaW5h dGlvbi1pcnEKPiArICogRGVzY3JpcHRpb246IFZlcmlmeSBrZXkgaXMgY2hhbmdlZCBhZnRlciBh IHRlcm1pbmF0aW9uIGlycQo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBTVUJURVNUOiBweHAtdGVy bWluYXRpb24ta2V5LXVwZGF0ZS1wb3N0LXN1c3BlbmQKPiArICogRGVzY3JpcHRpb246IFZlcmlm eSBrZXkgaXMgY2hhbmdlZCBhZnRlciBhIHN1c3BlbmQvcmVzdW1lIGN5Y2xlCj4gKyAqLwo+ICsK PiArLyoqCj4gKyAqIFNVQlRFU1Q6IHB4cC10ZXJtaW5hdGlvbi1rZXktdXBkYXRlLXBvc3QtcnBt Cj4gKyAqIERlc2NyaXB0aW9uOiBWZXJpZnkga2V5IGlzIGNoYW5nZWQgYWZ0ZXIgYSBydW50aW1l IHN1c3BlbmQvcmVzdW1lIGN5Y2xlCj4gKyAqLwo+ICsKPiArc3RhdGljIHZvaWQgdGVzdF9weHBf dGVhcmRvd25fa2V5Y2hhbmdlKGludCBmZCwgZW51bSB0ZXJtaW5hdGlvbl90eXBlIHR5cGUpCj4g K3sKPiArwqDCoMKgwqDCoMKgwqB1aW50MzJfdCogZW5jcnlwdGVkX2RhdGFfYmVmb3JlOwo+ICvC oMKgwqDCoMKgwqDCoHVpbnQzMl90KiBlbmNyeXB0ZWRfZGF0YV9hZnRlcjsKPiArwqDCoMKgwqDC oMKgwqBpbnQgbWF0Y2hlZF9hZnRlcl9rZXljaGFuZ2UgPSAwLCBsb29wID0gMDsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgZW5jcnlwdGVkX2RhdGFfYmVmb3JlID0gbWFsbG9jKFRTVFNVUkZfU0laRSk7 Cj4gK8KgwqDCoMKgwqDCoMKgZW5jcnlwdGVkX2RhdGFfYWZ0ZXIgPSBtYWxsb2MoVFNUU1VSRl9T SVpFKTsKPiArwqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0KGVuY3J5cHRlZF9kYXRhX2JlZm9yZSAm JiBlbmNyeXB0ZWRfZGF0YV9hZnRlcik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoF9fdGVzdF9yZW5k ZXJfcmVndWxhcl9zcmNfdG9fcHhwX2Rlc3QoZmQsIGVuY3J5cHRlZF9kYXRhX2JlZm9yZSwgVFNU U1VSRl9TSVpFKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgdHJpZ2dlcl90ZXJtaW5hdGlvbihmZCwg dHlwZSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoF9fdGVzdF9yZW5kZXJfcmVndWxhcl9zcmNfdG9f cHhwX2Rlc3QoZmQsIGVuY3J5cHRlZF9kYXRhX2FmdGVyLCBUU1RTVVJGX1NJWkUpOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqB3aGlsZSAobG9vcCA8IChUU1RTVVJGX1NJWkUvVFNUU1VSRl9CWVRFU1BQ KSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZW5jcnlwdGVkX2RhdGFf YmVmb3JlW2xvb3BdID09IGVuY3J5cHRlZF9kYXRhX2FmdGVyW2xvb3BdKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKyttYXRjaGVkX2FmdGVyX2tleWNo YW5nZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKytsb29wOwo+ICvCoMKgwqDC oMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0X2VxKG1hdGNoZWRfYWZ0ZXJfa2V5 Y2hhbmdlLCAwKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZnJlZShlbmNyeXB0ZWRfZGF0YV9iZWZv cmUpOwo+ICvCoMKgwqDCoMKgwqDCoGZyZWUoZW5jcnlwdGVkX2RhdGFfYWZ0ZXIpOwo+ICt9Cj4g Kwo+ICsvKioKPiArICogU1VCVEVTVDogcHhwLXN0YWxlLWJvLWJpbmQtcG9zdC10ZXJtaW5hdGlv bi1pcnEKPiArICogRGVzY3JpcHRpb246IHZlcmlmeSB0aGF0IFZNIGJpbmQgb24gYSBzdGFsZSBC TyAoZHVlIHRvIGEgdGVybWluYXRpb24gaXJxKSBpcyByZWplY3RlZC4KPiArICovCj4gKwo+ICsv KioKPiArICogU1VCVEVTVDogcHhwLXN0YWxlLWJvLWJpbmQtcG9zdC1zdXNwZW5kCj4gKyAqIERl c2NyaXB0aW9uOiB2ZXJpZnkgdGhhdCBWTSBiaW5kIG9uIGEgc3RhbGUgQk8gKGR1ZSB0byBhIHN1 c3BlbmQvcmVzdW1lIGN5Y2xlKQo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlzIHJl amVjdGVkLgo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBTVUJURVNUOiBweHAtc3RhbGUtYm8tYmlu ZC1wb3N0LXJwbQo+ICsgKiBEZXNjcmlwdGlvbjogdmVyaWZ5IHRoYXQgVk0gYmluZCBvbiBhIHN0 YWxlIEJPIChkdWUgdG8gYSBydW50aW1lIHN1c3BlbmQvcmVzdW1lCj4gKyAqwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgY3ljbGUpIGlzIHJlamVjdGVkLgo+ICsgKi8KPiArCj4gK3N0YXRpYyB2 b2lkIF9fdGVzdF9weHBfc3RhbGVfYm9fYmluZChpbnQgZmQsIGVudW0gdGVybWluYXRpb25fdHlw ZSB0eXBlLCBib29sIHB4cCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHVpbnQzMl90IHZtLCBxOwo+ ICvCoMKgwqDCoMKgwqDCoHVpbnQzMl90IGRzdGJvOwo+ICvCoMKgwqDCoMKgwqDCoHVpbnQzMl90 IGZsYWdzID0gcHhwID8gRFJNX1hFX1ZNX0JJTkRfRkxBR19DSEVDS19QWFAgOiAwOwo+ICvCoMKg wqDCoMKgwqDCoGludCByZXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHZtID0geGVfdm1fY3JlYXRl KGZkLCAwLCAwKTsKPiArwqDCoMKgwqDCoMKgwqBxID0gY3JlYXRlX3B4cF9yY3NfcXVldWUoZmQs IHZtKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZHN0Ym8gPSBweHBfYm9fY3JlYXRlKGZkLCB2bSwg NDA5NiwgRFJNX1hFX1BYUF9UWVBFX0hXRFJNKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWd0X2Fz c2VydF9lcShzdWJtaXRfZmx1c2hfc3RvcmVfZHcoZmQsIHEsIHRydWUsIHZtLCBkc3RibywgdHJ1 ZSksIDApOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKgo+ICvCoMKgwqDCoMKgwqDCoCAqIFJQTSBj bGVhbnVwIGlzIGF1dG9tYXRpYyBhcyBzb29uIGFzIHdlIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSwg c28gd2UKPiArwqDCoMKgwqDCoMKgwqAgKiBuZWV0IHRvIG1ha2Ugc3VyZSBub3QgdG8gcmVsZWFz ZSBpdCBiZWZvcmUgb3RoZXIgdHlwZXMgb2YgdGVybWluYXRpb24KYWxhbjogbml0OiBuZWV0LT5u ZWVkCj4gK8KgwqDCoMKgwqDCoMKgICogaGF2ZSBvY2N1cnJlZC4KPiArwqDCoMKgwqDCoMKgwqAg Ki8KPiArwqDCoMKgwqDCoMKgwqBpZiAodHlwZSA9PSBQWFBfVEVSTUlOQVRJT05fUlBNKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX2V4ZWNfcXVldWVfZGVzdHJveShmZCwg cSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRyaWdnZXJfdGVybWluYXRpb24o ZmQsIHR5cGUpOwo+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHRyaWdnZXJfdGVybWluYXRpb24oZmQsIHR5cGUpOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9leGVjX3F1ZXVlX2Rlc3Ryb3koZmQsIHEpOwo+ICvCoMKg wqDCoMKgwqDCoH0KYWxhbjogZmVlZGJhY2svcXVlc3Rpb246IGknbSB3b25kZXJpbmcgYSB0cmln Z2VyX3Rlcm1pbmF0aW9uKCkgZm9yIHRoZSBOT04tUlBNIGNvdWxkCmJlIGJyb2tlbiBidXQgcGFz cyBhbnl3YXkgaWYgdGhlIHF1ZXVlIGRlc3RydWN0aW9uIHRyaWdnZXJlZCBhIHF1aWNrIHJwbQp3 aGljaCBwcm9jZWVkZWQgdG8gdHJpZ2dlciBhIHRlYXJkb3duIGJlZm9yZSB0aGUgeGVfdm1fYmlu ZCBiZWxvdy4KQSB2ZXJ5IHJhY3kgY2FzZSBubyBkb3VidC4gVGhhdCBzYWlkLCBpIGFtIHdvbmRl cmluZyBpZiB3ZSBzaG91bGQgb25seQpkbyB0aGUgcXVldWUgZGVzdHJ1Y3Rpb24gYmVmb3JlIHRo ZSBzdGFsZS1iaW5kLXRlc3QgZm9yIHRoZSBycG0KdHJpZ2dlciBjYXNlIGFuZCBmb3IgdGhlIG90 aGVyIGNhc2VzLCBkZXN0cm95IHRoZSBxdWV1ZSBhdCB0aGUgZW5kPwpJdHMgYmVlbiBhIHdoaWxl IHNvIGkgY291bGQgYmUgbWFraW5nIHNvbWUgaW5jb3JyZWN0IGFzc3VtcHRpb25zLCBsZXRzCmNv bm5lY3Qgb2ZmbGluZSBpZiBteSBjb25jZXJuIGlzIG5vdCB2YWxpZCBvciBteSBzdWdnZXN0aW9u IG5vdCB3b3JrLgo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiB0cnlpbmcgdG8gbWFwIGEgc3RhbGUg Qk8gaXMgYW4gaWxsZWdhbCBvcCAqLwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IF9feGVfdm1fYmlu ZChmZCwgdm0sIDAsIGRzdGJvLCAwLCAwLCA0MDk2LCBEUk1fWEVfVk1fQklORF9PUF9NQVAsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZsYWdz LCBOVUxMLCAwLCAwLCBERUZBVUxUX1BBVF9JTkRFWCwgMCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWd0 X2Fzc2VydF9lcShyZXQsIHB4cCA/IC1FTk9FWEVDIDogMCk7CmFsYW46IGp1c3QgYSBxdWVzdGlv bjogaGVyZSB3ZSBhcmUgdHJ5aW5nIHRvIG1hcCBhIHN0YWxlIGJvIHRvIGEgdm0sCmEgdm0sIHdo aWNoIGlmIGkgaW5kZXJzdGFuZCBjb3JyZWN0bHkgaGFzIGFscmVhZHkgYmluZGVkIHRoYXQgYm8g ZWFybGllcgooaW5kaXJlY3RseT8pIGJlZm9yZSB0aGUgdGVybWluYXRpb24gYXMgcGFydCBvZiBz dWJtaXRfZmx1c2hfc3RvcmVfZHc/ClNvIHF1ZXN0aW9uIGlzIHRoZSB0ZXN0IGlzIHZhbGlkIGZv ciBib3RoIGNhc2VzIG9mIGEgc3RhbGUtYm8gb24gYSBwcmV2aW91c2x5CmJvdW5kIHZtIGFzIHdl bGwgYXMgYSBibyBvbiBhIG5ldyBWTT8gcGVyaGFwcyBhIGZ1dHVyZSBwYXRjaCBmb3IgZG1hIGJ1 ZmZlcgpzaGFyZWQgaGFuZGxlIG9mIHRoYXQgc2FtZSBibyBvbiBhIG5ldyBWTT8KCj4gKwo+ICvC oMKgwqDCoMKgwqDCoGdlbV9jbG9zZShmZCwgZHN0Ym8pOwo+ICvCoMKgwqDCoMKgwqDCoHhlX3Zt X2Rlc3Ryb3koZmQsIHZtKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGVzdF9weHBfc3RhbGVf Ym9fYmluZChpbnQgZmQsIGVudW0gdGVybWluYXRpb25fdHlwZSB0eXBlKQo+ICt7Cj4gK8KgwqDC oMKgwqDCoMKgX190ZXN0X3B4cF9zdGFsZV9ib19iaW5kKGZkLCB0eXBlLCB0cnVlKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgcHhwX3ZtX2JpbmRfc3luYyhpbnQgZmQsIHVpbnQzMl90IHZtLCB1 aW50MzJfdCBibywgdWludDY0X3QgYWRkciwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVpbnQ2NF90IHNpemUsIHVpbnQzMl90IG9wKQo+ ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV94ZV9zeW5jIHN5bmMgPSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC50eXBlID0gRFJNX1hFX1NZTkNfVFlQRV9TWU5DT0JK LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZmxhZ3MgPSBEUk1fWEVfU1lOQ19G TEFHX1NJR05BTCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmhhbmRsZSA9IHN5 bmNvYmpfY3JlYXRlKGZkLCAwKSwKPiArwqDCoMKgwqDCoMKgwqB9Owo+ICsKPiArwqDCoMKgwqDC oMKgwqBfX3hlX3ZtX2JpbmRfYXNzZXJ0KGZkLCB2bSwgMCwgYm8sIDAsIGFkZHIsIHNpemUsIG9w LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IERSTV9YRV9WTV9CSU5EX0ZMQUdfQ0hFQ0tfUFhQLCAmc3luYywgMSwgMCwgMCk7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoGlndF9hc3NlcnQoc3luY29ial93YWl0KGZkLCAmc3luYy5oYW5kbGUsIDEs IElOVDY0X01BWCwgMCwgTlVMTCkpOwo+ICvCoMKgwqDCoMKgwqDCoHN5bmNvYmpfZGVzdHJveShm ZCwgc3luYy5oYW5kbGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdWludDMyX3QgY3JlYXRlX2FuZF9i aW5kX3NpbXBsZV9weHBfYmF0Y2goaW50IGZkLCB1aW50MzJfdCB2bSwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50MzJfdCBzaXplLCB1aW50NjRfdCBhZGRyKQo+ ICt7Cj4gK8KgwqDCoMKgwqDCoMKgdWludDMyX3QgYm87Cj4gK8KgwqDCoMKgwqDCoMKgdWludDMy X3QgKm1hcDsKPiArwqDCoMKgwqDCoMKgwqBibyA9IHB4cF9ib19jcmVhdGUoZmQsIHZtLCA0MDk2 LCBEUk1fWEVfUFhQX1RZUEVfSFdEUk0pOwo+ICvCoMKgwqDCoMKgwqDCoHB4cF92bV9iaW5kX3N5 bmMoZmQsIHZtLCBibywgYWRkciwgc2l6ZSwgRFJNX1hFX1ZNX0JJTkRfT1BfTUFQKTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgbWFwID0geGVfYm9fbWFwKGZkLCBibywgNDA5Nik7Cj4gK8KgwqDCoMKg wqDCoMKgKm1hcCA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gK8KgwqDCoMKgwqDCoMKgbXVubWFw KG1hcCwgNDA5Nik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBibzsKPiArfQo+ICsKPiAr LyoqCj4gKyAqIFNVQlRFU1Q6IHB4cC1zdGFsZS1iby1leGVjLXBvc3QtdGVybWluYXRpb24taXJx Cj4gKyAqIERlc2NyaXB0aW9uOiB2ZXJpZnkgdGhhdCBhIHN1Ym1pc3Npb24gdXNpbmcgVk0gd2l0 aCBhIG1hcHBlZCBzdGFsZSBCTyAoZHVlIHRvCj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYSB0ZXJtaW5hdGlvbiBpcnEpIGlzIHJlamVjdGVkLgo+ICsgKi8KPiArCj4gKy8qKgo+ICsg KiBTVUJURVNUOiBweHAtc3RhbGUtYm8tZXhlYy1wb3N0LXN1c3BlbmQKPiArICogRGVzY3JpcHRp b246IHZlcmlmeSB0aGF0IGEgc3VibWlzc2lvbiB1c2luZyBWTSB3aXRoIGEgbWFwcGVkIHN0YWxl IEJPIChkdWUgdG8KPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhIHN1c3BlbmQvcmVz dW1lIGN5Y2xlKSBpcyByZWplY3RlZC4KPiArICovCj4gKwo+ICsvKioKPiArICogU1VCVEVTVDog cHhwLXN0YWxlLWJvLWV4ZWMtcG9zdC1ycG0KPiArICogRGVzY3JpcHRpb246IHZlcmlmeSB0aGF0 IGEgc3VibWlzc2lvbiB1c2luZyBWTSB3aXRoIGEgbWFwcGVkIHN0YWxlIEJPIChkdWUgdG8KPiAr ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhIHJ1bnRpbWUgc3VzcGVuZC9yZXN1bWUgY3lj bGUpIGlzIHJlamVjdGVkLgo+ICsgKi8KPiArCj4gK3N0YXRpYyB2b2lkIF9fdGVzdF9weHBfc3Rh bGVfYm9fZXhlYyhpbnQgZmQsIGVudW0gdGVybWluYXRpb25fdHlwZSB0eXBlLCBib29sIHB4cCkK PiArewo+ICvCoMKgwqDCoMKgwqDCoHVpbnQzMl90IHZtLCBxOwo+ICvCoMKgwqDCoMKgwqDCoHVp bnQzMl90IGJvOwo+ICvCoMKgwqDCoMKgwqDCoGludCBleHBlY3RlZDsKPiArCj4gK8KgwqDCoMKg wqDCoMKgdm0gPSB4ZV92bV9jcmVhdGUoZmQsIDAsIDApOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBx ID0gY3JlYXRlX3B4cF9yY3NfcXVldWUoZmQsIHZtKTsgLyogc3RhcnQgYSBQWFAgc2Vzc2lvbiAq Lwo+ICvCoMKgwqDCoMKgwqDCoGJvID0gY3JlYXRlX2FuZF9iaW5kX3NpbXBsZV9weHBfYmF0Y2go ZmQsIHZtLCA0MDk2LCAwKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoKPiArwqDCoMKgwqDCoMKg wqAgKiBSUE0gY2xlYW51cCBpcyBhdXRvbWF0aWMgYXMgc29vbiBhcyB3ZSByZWxlYXNlIHRoZSBy ZWZlcmVuY2UsIHNvIHdlCj4gK8KgwqDCoMKgwqDCoMKgICogbmVldCB0byBtYWtlIHN1cmUgbm90 IHRvIHJlbGVhc2UgaXQgYmVmb3JlIG90aGVyIHR5cGVzIG9mIHRlcm1pbmF0aW9uCmFsYW46IG5p dDogbmVldC0+bmVlZAo+ICvCoMKgwqDCoMKgwqDCoCAqIGhhdmUgb2NjdXJyZWQuCj4gK8KgwqDC oMKgwqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHR5cGUgPT0gUFhQX1RFUk1JTkFUSU9O X1JQTSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9leGVjX3F1ZXVlX2Rl c3Ryb3koZmQsIHEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0cmlnZ2VyX3Rl cm1pbmF0aW9uKGZkLCB0eXBlKTsKPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0cmlnZ2VyX3Rlcm1pbmF0aW9uKGZkLCB0eXBlKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfZXhlY19xdWV1ZV9kZXN0cm95KGZkLCBx KTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIGNyZWF0ZSBhIGNs ZWFuIHF1ZXVlIHVzaW5nIHRoZSBWTSB3aXRoIHRoZSBpbnZhbGlkIG9iamVjdCBtYXBwZWQgaW4g Ki8KPiArwqDCoMKgwqDCoMKgwqBpZiAocHhwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHEgPSBjcmVhdGVfcHhwX3Jjc19xdWV1ZShmZCwgdm0pOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBleHBlY3RlZCA9IC1FTk9FWEVDOwo+ICvCoMKgwqDCoMKgwqDCoH0g ZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHEgPSBjcmVhdGVfcmVndWxh cl9yY3NfcXVldWUoZmQsIHZtKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXhw ZWN0ZWQgPSAwOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgaWd0X2Fz c2VydF9lcSh4ZV9leGVjX3N5bmNfZmFpbGFibGUoZmQsIHEsIDAsIE5VTEwsIDApLCBleHBlY3Rl ZCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIG5vdyBtYWtlIHN1cmUgd2UgY2FuIHVubWFwIHRo ZSBzdGFsZSBCTyBhbmQgaGF2ZSBhIGNsZWFuIGV4ZWMgYWZ0ZXIgKi8KPiArwqDCoMKgwqDCoMKg wqBpZiAocHhwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB4cF92bV9iaW5k X3N5bmMoZmQsIHZtLCAwLCAwLCA0MDk2LCBEUk1fWEVfVk1fQklORF9PUF9VTk1BUCk7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdlbV9jbG9zZShmZCwgYm8pOwo+ICsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm8gPSBjcmVhdGVfYW5kX2JpbmRfc2ltcGxlX3B4 cF9iYXRjaChmZCwgdm0sIDQwOTYsIDApOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZ3RfYXNzZXJ0X2VxKHhlX2V4ZWNfc3luY19mYWlsYWJsZShmZCwgcSwgMCwgTlVMTCwgMCks IDApOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgeGVfZXhlY19xdWV1 ZV9kZXN0cm95KGZkLCBxKTsKPiArwqDCoMKgwqDCoMKgwqBnZW1fY2xvc2UoZmQsIGJvKTsKPiAr wqDCoMKgwqDCoMKgwqB4ZV92bV9kZXN0cm95KGZkLCB2bSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHRlc3RfcHhwX3N0YWxlX2JvX2V4ZWMoaW50IGZkLCBlbnVtIHRlcm1pbmF0aW9uX3R5cGUg dHlwZSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoF9fdGVzdF9weHBfc3RhbGVfYm9fZXhlYyhmZCwg dHlwZSwgdHJ1ZSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBTVUJURVNUOiBweHAtc3RhbGUtcXVl dWUtcG9zdC10ZXJtaW5hdGlvbi1pcnEKPiArICogRGVzY3JpcHRpb246IHZlcmlmeSB0aGF0IHN1 Ym1pc3Npb25zIG9uIGEgc3RhbGUgcXVldWUgKGR1ZSB0byBhIHRlcm1pbmF0aW9uCj4gKyAqwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaXJxKSBhcmUgY2FuY2VsbGVkCj4gKyAqLwo+ICsKPiAr LyoqCj4gKyAqIFNVQlRFU1Q6IHB4cC1zdGFsZS1xdWV1ZS1wb3N0LXN1c3BlbmQKPiArICogRGVz Y3JpcHRpb246IHZlcmlmeSB0aGF0IHN1Ym1pc3Npb25zIG9uIGEgc3RhbGUgcXVldWUgKGR1ZSB0 byBhIHN1c3BlbmQvcmVzdW1lCj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3ljbGUp IGFyZSBjYW5jZWxsZWQKPiArICovCj4gKwo+ICtzdGF0aWMgdm9pZCB0ZXN0X3B4cF9zdGFsZV9x dWV1ZV9leGVjdXRpb24oaW50IGZkLCBlbnVtIHRlcm1pbmF0aW9uX3R5cGUgdHlwZSkKPiArewo+ ICvCoMKgwqDCoMKgwqDCoHVpbnQzMl90IHZtLCBxOwo+ICvCoMKgwqDCoMKgwqDCoHVpbnQzMl90 IGRzdGJvOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB2bSA9IHhlX3ZtX2NyZWF0ZShmZCwgMCwgMCk7 Cj4gK8KgwqDCoMKgwqDCoMKgcSA9IGNyZWF0ZV9weHBfcmNzX3F1ZXVlKGZkLCB2bSk7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoGRzdGJvID0gcmVndWxhcl9ib19jcmVhdGVfYW5kX2ZpbGwoZmQsIHZt LCA0MDk2LCAwKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydF9lcShzdWJtaXRfZmx1 c2hfc3RvcmVfZHcoZmQsIHEsIHRydWUsIHZtLCBkc3RibywgZmFsc2UpLCAwKTsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgdHJpZ2dlcl90ZXJtaW5hdGlvbihmZCwgdHlwZSk7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoC8qIHdoZW4gd2UgZXhlY3V0ZSBhbiBpbnZhbGlkIHF1ZXVlIHdlIGV4cGVjdCB0aGUg am9iIHRvIGJlIGNhbmNlbGVkICovCj4gK8KgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydF9lcShzdWJt aXRfZmx1c2hfc3RvcmVfZHcoZmQsIHEsIHRydWUsIHZtLCBkc3RibywgZmFsc2UpLCAtRUNBTkNF TEVEKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZ2VtX2Nsb3NlKGZkLCBkc3Ribyk7Cj4gK8KgwqDC oMKgwqDCoMKgeGVfZXhlY19xdWV1ZV9kZXN0cm95KGZkLCBxKTsKPiArwqDCoMKgwqDCoMKgwqB4 ZV92bV9kZXN0cm95KGZkLCB2bSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBTVUJURVNUOiBweHAt b3B0b3V0Cj4gKyAqIERlc2NyaXB0aW9uOiB2ZXJpZnkgdGhhdCBzdWJtc3Npb25zIHdpdGggc3Rh bGUgb2JqZWN0cy9xdWV1ZXMgYXJlIG5vdCBibG9ja2VkCj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgdGhlIHVzZXIgZG9lcyBub3Qgb3B0LWluIHRvIHRoZSBQWFAgY2hlY2tzLgo+ ICsgKi8KPiArc3RhdGljIHZvaWQgdGVzdF9weHBfb3B0b3V0KGludCBmZCkKPiArewo+ICvCoMKg wqDCoMKgwqDCoF9fdGVzdF9weHBfc3RhbGVfYm9fZXhlYyhmZCwgUFhQX1RFUk1JTkFUSU9OX0lS USwgZmFsc2UpOwo+ICvCoMKgwqDCoMKgwqDCoF9fdGVzdF9weHBfc3RhbGVfYm9fYmluZChmZCwg UFhQX1RFUk1JTkFUSU9OX0lSUSwgZmFsc2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCByZXF1 aXJlX3B4cChib29sIHB4cF9zdXBwb3J0ZWQpCj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoGlndF9y ZXF1aXJlX2YocHhwX3N1cHBvcnRlZCwgIlBYUCBub3Qgc3VwcG9ydGVkXG4iKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgcmVxdWlyZV9weHBfcmVuZGVyKGJvb2wgcHhwX3N1cHBvcnRlZCwgdWlu dDMyX3QgZGV2aWQpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqByZXF1aXJlX3B4cChweHBfc3VwcG9y dGVkKTsKPiDCoMKgwqDCoMKgwqDCoMKgaWd0X3JlcXVpcmVfZihpZ3RfZ2V0X3JlbmRlcl9jb3B5 ZnVuYyhkZXZpZCksCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICJObyByZW5kZXJjb3B5IGZvdW5kIGZvciBkZXZpZD0leFxuIiwgZGV2aWQpOwo+IMKgfQo+IMKg Cj4gK3N0YXRpYyB2b2lkIHRlcm1pbmF0aW9uX3Rlc3RzKGludCBmZCwgYm9vbCBweHBfc3VwcG9y dGVkLCB1aW50MzJfdCBkZXZpZCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSB0ZXJtaW5hdGlvbl90eXBlIHR5cGUsIGNvbnN0 IGNoYXIgKnRhZykKPiArewo+ICvCoMKgwqDCoMKgwqDCoGlmICh0eXBlID09IFBYUF9URVJNSU5B VElPTl9SUE0pCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlndF9zZXR1cF9ydW50 aW1lX3BtKGZkKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWd0X3N1YnRlc3RfZigicHhwLXRlcm1p bmF0aW9uLWtleS11cGRhdGUtcG9zdC0lcyIsIHRhZykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXF1aXJlX3B4cF9yZW5kZXIocHhwX3N1cHBvcnRlZCwgZGV2aWQpOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0ZXN0X3B4cF90ZWFyZG93bl9rZXljaGFuZ2Uo ZmQsIHR5cGUpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqBpZ3Rfc3VidGVz dF9mKCJweHAtc3RhbGUtYm8tYmluZC1wb3N0LSVzIiwgdGFnKSB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJlcXVpcmVfcHhwKHB4cF9zdXBwb3J0ZWQpOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB0ZXN0X3B4cF9zdGFsZV9ib19iaW5kKGZkLCB0eXBlKTsKPiAr wqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgaWd0X3N1YnRlc3RfZigicHhwLXN0YWxl LWJvLWV4ZWMtcG9zdC0lcyIsIHRhZykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXF1aXJlX3B4cChweHBfc3VwcG9ydGVkKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdGVzdF9weHBfc3RhbGVfYm9fZXhlYyhmZCwgdHlwZSk7Cj4gK8KgwqDCoMKgwqDCoMKg fQo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBBbiBhY3RpdmUgUFhQIHF1ZXVlIGhvbGRzIGFuIFJQ TSByZWYsIHNvIHdlIGNhbid0IHRlc3QgUlBNIHdpdGggaXQgKi8KPiArwqDCoMKgwqDCoMKgwqBp ZiAodHlwZSAhPSBQWFBfVEVSTUlOQVRJT05fUlBNKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZ3Rfc3VidGVzdF9mKCJweHAtc3RhbGUtcXVldWUtcG9zdC0lcyIsIHRhZykgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVxdWlyZV9w eHAocHhwX3N1cHBvcnRlZCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB0ZXN0X3B4cF9zdGFsZV9xdWV1ZV9leGVjdXRpb24oZmQsIHR5cGUpOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgZWxzZQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZ3RfcmVzdG9yZV9ydW50aW1lX3BtKCk7Cj4g K30KPiArCj4gwqBpZ3RfbWFpbgo+IMKgewo+IMKgwqDCoMKgwqDCoMKgwqBpbnQgeGVfZmQgPSAt MTsKPiBAQCAtNDcwLDYgKzg4OSwyOCBAQCBpZ3RfbWFpbgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgfQo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiArwqDCoMKgwqDCoMKgwqBp Z3Rfc3VidGVzdF9ncm91cCB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0 IHN0cnVjdCBtb2RlIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGVudW0gdGVybWluYXRpb25fdHlwZSB0eXBlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqdGFnOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB9IG1vZGVzW10gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB7IFBYUF9URVJNSU5BVElPTl9JUlEsICJ0ZXJtaW5h dGlvbi1pcnEiIH0sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB7IFBYUF9URVJNSU5BVElPTl9TVVNQRU5ELCAic3VzcGVuZCIgfSwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHsgUFhQX1RFUk1JTkFUSU9OX1JQ TSwgInJwbSIgfSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHsgMCwgTlVMTCB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH07Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZ3RfZGVzY3JpYmUoIlZlcmlmeSB0ZWFy ZG93biBtYW5hZ2VtZW50Iik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBm b3IgKGNvbnN0IHN0cnVjdCBtb2RlICptID0gbW9kZXM7IG0tPnRhZzsgbSsrKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGVybWluYXRpb25fdGVzdHMo eGVfZmQsIHB4cF9zdXBwb3J0ZWQsIGRldmlkLCBtLT50eXBlLCBtLT50YWcpOwo+ICsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X3N1YnRlc3QoInB4cC1vcHRvdXQiKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXF1aXJlX3B4 cChweHBfc3VwcG9ydGVkKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHRlc3RfcHhwX29wdG91dCh4ZV9mZCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+IMKgwqDCoMKgwqDCoMKgwqBpZ3Rf Zml4dHVyZSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbG9zZSh4ZV9mZCk7 Cj4gwqDCoMKgwqDCoMKgwqDCoH0KCg==