From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id eYi6MCfNeWrUkhoAWB0awg (envelope-from ) for ; Mon, 10 Aug 2026 09:07:51 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=SgGL5Aqt; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id B339E1E09B; Mon, 10 Aug 2026 09:07:51 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [IPv6:2620:52:6:3111::32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 14C861E09B for ; Mon, 10 Aug 2026 09:07:50 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CC30B4BB24D0 for ; Mon, 10 Aug 2026 13:07:48 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CC30B4BB24D0 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=SgGL5Aqt Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by sourceware.org (Postfix) with ESMTPS id 810404BB1C1A for ; Mon, 10 Aug 2026 13:07:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 810404BB1C1A Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 810404BB1C1A Authentication-Results: sourceware.org; arc=fail smtp.remote-ip=192.198.163.16 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1786367238; cv=fail; b=k9sM0VtlMsrZaZhTrs5JriTIKqg3q1F8RwIt8oqyhM4us2jPUIdBBnHUcBLLaxHVAtcjPUBXn2jQOz84L3+L6CI5OwPEIF9bJRB331G8VXN3jWrTkRYjb6CS1qYgKv20dErseoZh90864WDaUHeAenyb2KDkKZpnPxPJDpLXpw4= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1786367238; c=relaxed/simple; bh=kxw4PWPu0Fivy/7P443dACjs3rraEkBl+Dqzg22NtLg=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=GFJSt6SGN4MnYILNH7ldsJsEuOvKBQoLvqV4RlYUeybJ1oowEL+92JP0TqBWtiG0/MLJ0+lvFvjImHz4Qw0v1rwoFUh9oZRS5p4jDfUW70XeYcsgTADfSkQRIVyXfRabNWN0XIl0j1VHBZRkYD9+xIzivlYeEVZ+GVqcKz0w81I= ARC-Authentication-Results: i=2; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=SgGL5Aqt DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 810404BB1C1A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1786367238; x=1817903238; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version:content-transfer-encoding; bh=kxw4PWPu0Fivy/7P443dACjs3rraEkBl+Dqzg22NtLg=; b=SgGL5Aqt+n3iWG0vonvOdGO87Q2LtPzdfjBHQL/KjqgkDAG7j1KZKaP6 C5AD4cgiMxKazqoPNZ2r0c/jVLGDoOF0EHMtCkP8wkNk46Lz4hQ/zKjDl +dyKKbjapWThY1eHVzShHBKhLMtolB+nmAcuOv62BZoKLmYqWbk0+tBhQ sxh1UyKa1SmWsAIufKZBtLDIxhfAiDxNjWfdc8Ft0fABnR59fRRV+rqI4 okDB4fYoiRzpZXi3g3V8z/0LnV5U/xu9XRRoV28x9+OSuHzJjGybMCfew 4BjcI6rwRWzcbAq/hzgdbD41a1V3GyijxujAB+A73pQGIO9hTj1MeWpKv g==; X-CSE-ConnectionGUID: tXw6amX0Q7alZLkjvI1oKQ== X-CSE-MsgGUID: riTt4wOSRCGcodHDiN9l1w== X-IronPort-AV: E=McAfee;i="6800,10657,11870"; a="74414907" X-IronPort-AV: E=Sophos;i="6.25,215,1779174000"; d="scan'208";a="74414907" Received: from orviesa008.jf.intel.com ([10.64.159.148]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Aug 2026 06:07:17 -0700 X-CSE-ConnectionGUID: FhA+v7XGQYKzvmR4xzUHFw== X-CSE-MsgGUID: feuHIg6+RduaiUtQ8Tk6sg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.25,215,1779174000"; d="scan'208";a="262522439" Received: from fmsmsx903.amr.corp.intel.com ([10.18.126.92]) by orviesa008.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Aug 2026 06:07:17 -0700 Received: from FMSMSX902.amr.corp.intel.com (10.18.126.91) by fmsmsx903.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Mon, 10 Aug 2026 06:07:16 -0700 Received: from fmsedg901.ED.cps.intel.com (10.1.192.143) by FMSMSX902.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45 via Frontend Transport; Mon, 10 Aug 2026 06:07:16 -0700 Received: from CY7PR03CU001.outbound.protection.outlook.com (40.93.198.15) by edgegateway.intel.com (192.55.55.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Mon, 10 Aug 2026 06:07:16 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fxAsCjafpAY/jJh4Ytiayd8Nt5MPCs6IT/9HrmGfw/hIC2LussjOXY5V/PtbrrKS8e4Idc/0n0+vFVmAR60ytxW0MUgxQarFKC/A/x1xgcCoZzWaqTZCKg/FiT+C4EGs604bevriohDUZKERmmBkyDhXA4KYX7FLSQQ4e5os0Idkc40jXvO26Wy/5v/stMsh8Vmhx3P9fpJ/gi3+zEpvt8z0DQVb0jY7GxLtqVEch9u+3kqXduU+Vtda8UOn0nMZ21M62wAMfNLqm1mez3vYZnZnXSIPMJnmRsAKjrJGsyou9cvMYuxofkEfzxQnUZJRSjqzZ5vQocAkXkQlEs4OGg== 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=5iFWNLZjgbfZiGa0EZ1jP6XDZnqJgT1VqGVWa4jXP7E=; b=i6fzJxaegdmGZfzGNtU/C3uiGz51MzT9WLk5Mp/7RnqIMTvYwBmk0mAIq7KxpnCjhf0u5fsZ3n4JCZNITONYdaHHx4gnMBa62Q9bkTwYIzgH5GRdoQ5NYARVGdYSiATKishmUthViEamiwbB5Pq5n/Mu4Xf1lR28yCFmkQ/bgotcsVB0Ea+KoTwHJBwCNFmxD0sGkWm2l66jBy/tXE74Qbt7gPBbb6Nr9r5EHuXkwLNN6Ijdhbs5uf0Z0Bboz9BQLHo2PHofjSQ7z5/DkQ3bURex9hSEcTbmSKXEtEeVTVY4QjdbQ9L06L7n5jAoDhHTzUDkUD/x3JdDPrB7yiF2wA== 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 SN7PR11MB7638.namprd11.prod.outlook.com (2603:10b6:806:34b::22) by PH8PR11MB7000.namprd11.prod.outlook.com (2603:10b6:510:220::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Mon, 10 Aug 2026 13:07:11 +0000 Received: from SN7PR11MB7638.namprd11.prod.outlook.com ([fe80::7a35:98d:f02c:b011]) by SN7PR11MB7638.namprd11.prod.outlook.com ([fe80::7a35:98d:f02c:b011%4]) with mapi id 15.21.0292.015; Mon, 10 Aug 2026 13:07:11 +0000 From: "Joos, Christina" To: Matthieu Longo , "gdb-patches@sourceware.org" CC: Luis Machado , Luis Machado , Thiago Jung Bauermann , Simon Marchi , "Kevin Buettner" Subject: RE: [PATCH v1 3/6] gdb: introduce helper class file_reader_t Thread-Topic: [PATCH v1 3/6] gdb: introduce helper class file_reader_t Thread-Index: AQHdHqR4NBy8r+zeU0Krs9+4IWcfvbaXO4xA Date: Mon, 10 Aug 2026 13:07:11 +0000 Message-ID: References: <20260728151700.253720-1-matthieu.longo@arm.com> <20260728151700.253720-4-matthieu.longo@arm.com> In-Reply-To: <20260728151700.253720-4-matthieu.longo@arm.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: SN7PR11MB7638:EE_|PH8PR11MB7000:EE_ x-ms-office365-filtering-correlation-id: 004a2b9a-e687-4d6a-41dd-08def6e04a66 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|23010399003|366016|1800799024|376014|38070700021|18002099003|22082099003|56012099006|10067099003|11063799006|4143699003|6133799003; x-microsoft-antispam-message-info: mu/4M1gwpYZ4CQxAfs+v+puScmv09hUyTAIpsrkTF9G1p0aD2gkkyaoSB9T1uOjSPxc3QuIB9gpbUbepaCGEAroUkjfmQVzJY3LulkA+it0myg454+A1e55v+XCh5bh+Q0s1SiRWLQ1bUspOAYhUOFjTlsHKxb5Pa2MAJWpjr3LvlWI9DcEnyoL0UGyNl4co+mMkHDB1lTzzY3UjjGDNfkQsNTOJj//mdVBxGGkh9s+dmqsY/rPR/YmUgNjuAw8i4zhe1jeEnpBdF4ymXMX73KwqCwnFNIqKvlZQ0Rzg0jvquRmHaPLm3NIoMLpGJypww1yWCXW2bMC63dxy83/Qvrdv40kOGBWAXyDpxaHXFXVk59iS+I+iWY3fCYnTO47f44JhVzCmvYH3PdTjG0cV9q0fTA0cCXfy6UaQyCpYPXTtemZk7UzIo+NPmgHQRtaoIITH1k5vaI5LFWRC8aDjUCvyyUsml9JWkSi16+b+wzGFHJH1fjXDjtqSSeEXUIZbLW/AtSxZFhpuQVws5yguWH/mBK/veKRqoCb8kljIpgSHMFN5VriCVo2qLpbXfr+zL3/8aV20i+EVGOc6tCldLond57OquDhRJ9lBR8Dbrtkcfr8HFgzdQaBxi/EGrZ6DC87RoR3hRmMlp/1BGBX2GgO3UudzaCNqIrG9el83bXP0kXnx5zYsvChUbhKS0N6XbaQn1zjUzw7itPYSFM+m8GGnBgO4ksyqken0uRhJkRk= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN7PR11MB7638.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(23010399003)(366016)(1800799024)(376014)(38070700021)(18002099003)(22082099003)(56012099006)(10067099003)(11063799006)(4143699003)(6133799003); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?aktiNkZaL2pnazRTTURUdEdWK3hkVXNEcURnUEVOZExhMkJDeGY4NE1OdVJx?= =?utf-8?B?Rjh3TkdzMm9lbGJwWkxvYW9IQTFYY3RBa2d0NmNOYXZVUFRaWklzVGtINTMr?= =?utf-8?B?SXJmTkFqQVZSRktkdFg0NSs0UVNTMVFBT01jdFhFRVIvNXhodERVTWZ0K3E3?= =?utf-8?B?UW9IWVZkb2MraUZzUVpQR2hPazIyRDhPLzNUT0dQeUZKQnJudU5pSjlWdnAz?= =?utf-8?B?VThLeWtNYU9RUzVEbTUvaVNBMGpUU2hXc2lOWml4NmYrSHI0K1I5cUhwWGQw?= =?utf-8?B?VEh5RHYzcHpNTm8rR1l3MTAwTnBwRWZaeEZWb3M5eWhMQTBxVnVlL1p1RkFk?= =?utf-8?B?VWxYTVQ0UzdFU3RyMzVYUExGR3k2NTduNmpnaHMyeG9IQVlmS1p0bWtTWlFB?= =?utf-8?B?TDFsS0lER3N1dnQvMTczdFVzdmJIdnNvazBJSjYwQUdnVjZSQmt6dlZDY1Jy?= =?utf-8?B?YlF0NG8rWmVudmt0Yjl0Vi91a1MrR2tZY0RvZGw0clp5ZnhucGRiNEgvWHU3?= =?utf-8?B?MW9hMXhGV05MclRZVm5EeWFLVXFlaXBZT1BtWStTZVZrY2JnVGRKa2FXdWNp?= =?utf-8?B?Z1A1b2g1Tm83VFFXeVJqYUdQUFpPdFN0VVJSN1h5a1dleFRwV1pBcUIxNTIx?= =?utf-8?B?UVpNR0F3Z1VSMEJLcS9hU0VHRUdHaWUzaEtqbm5vYU5SMnd1MzkzMmYrZ1N5?= =?utf-8?B?VGtnL3NQWmxzTXdqbTJUSldqeTUwYk10enB2bXg4QWYzS0o1M3oyeWYzS2hD?= =?utf-8?B?bzdndGliMHVDYW5pallMQmgxdWt0SWwrNFBHK1ppTVFnV0hJYnovMFpVUTI2?= =?utf-8?B?aFpabHBRVFdaUUdRSURnUHpObmhEUXhKSjJnY0ZQYm9pS2JrMExVblduTGhJ?= =?utf-8?B?aGVuaEViMDdCb2Q2UDlGY3VkK3QyaXpLRHNCQmtxb0h4Y3hMMkorT09NZHlr?= =?utf-8?B?ZUhsRmNCVVhNUGdKYkpwcWE1c3g5VzNSOFJuZTF4U01Xc0FuM0FxcloralNa?= =?utf-8?B?UDI2bjdpS1p5WVZBc0VqZDZqQk43SHVvNGFiejZ3LzdwYnYrZmtRMWloM21U?= =?utf-8?B?UGpHWU1Sa0ozRjZsV2Ixb3pvVFVGME04ZWk0d1ZYNVo0NUZWZXJNZWxnQ051?= =?utf-8?B?K0xxRTRxYjVNaWRrdXFGTlZaclRqcU1NRFlvR0VIVWNFQ1NCTUVNcG4yTlVE?= =?utf-8?B?ZkZ3cGp4VE1HTi9ENnpoMS9HZE5zbURoMVZEdEVydW9KTEdDNVVPU3VZbS9o?= =?utf-8?B?b2tUaENxemp0d0htcmR4b291ZzIxdWFjMk5yQVBjSnBRNnBRVTVnY0VxNnpx?= =?utf-8?B?SmVtc1I4VUZEbWJuNW5LK0xjbTJlbnk3b0o5Y3Q1elB1YVhJdnhaUGJobjJr?= =?utf-8?B?Zmp3WEZ6VysxZVd6UUkvOHFGUEVDek5zUDNiSVQ1K3VxMlZITWQvaHMvak16?= =?utf-8?B?eTZ3UnpIMURmdUJDQ1MvM2dVUktQdE0wM05vTncwdVMxeVZiYU5LSU1uWllw?= =?utf-8?B?emRTYUZkWFpmbWNEYmllNDJOV2xHdUN4ejlRcGN2QVhJN2NDTDhicnB1RHBk?= =?utf-8?B?d2tNSFNGcjdqdlRsc3ZLdkh3SHRSaFZ5aldieEJnN0NJV01SSkhBSWt5ZWJh?= =?utf-8?B?bUxxc00zQk9xcGZKTVV2Q2dqYjhOeklJTWNoQlF1a2luNGszdjBSeElWMWVK?= =?utf-8?B?ekU5Z05wR3RSc3dKVi94YkRtRmVPOGxNbFNvMnB2NStPdVJ1OVlRWjNncllB?= =?utf-8?B?UG9RMkZUZk5EbmtUa2ovN3pBSkR0N0NKNCtXM2pBWlhyZ1lqdGxiazNyL0lS?= =?utf-8?B?amdMOE8wdUhLcjBDTEVYMEI3Z1N3Y3dFZVNSUFFFL0x4dkdOZUhWb0tOUng4?= =?utf-8?B?NEtTMEJ3cHBDQSs3Z0huanNZRU5tbWxBQWEzcEhza2p1VXVidTcyRk0zMDJo?= =?utf-8?B?WUhkZTE1YWh3YWhvNEZCNjJ4c1pHdWJENXRqVnBaS0pXNy9sd2p1ZXR0YjZp?= =?utf-8?B?T3VIdGFGRnFXcGRrTUhjTzZIclFvVG4wd0M4S2VtVjZXa1g0bUNreTRXZVVX?= =?utf-8?B?QWJRSExqZDVOVzFxZlVlQmVEdWYxbnBZL056cXNVMit3WWVQb3crYllNMEVQ?= =?utf-8?B?UFpqQ09pYnlSeW10N3dsaDNOWEdKN1pDTXNoNkZPMks2dnB6K0cyY3RUK1Mz?= =?utf-8?B?WTNPazczenRiUGdabExNZDhSZERkQlhTNkU1ZUx1L25wS2hFK3J5ODBZeDN2?= =?utf-8?B?ZWtIK0Z4Z1JsSHpqQU1hT1hHZ0d2TEJzMVN2d1hXSEVXUFhGTytMMW1VU0t1?= =?utf-8?B?TTE2N1c1N3d2a0FWdkZLOVkwZlFxVkFmcFQyY0V1Z0lGKzR5bGtqdz09?= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: NqDL7LHoZdhjdt+KR+BmAvLdrlgouKb6rdFdGTZETl3+slt0AiswUJAGrbYnmwvnenEUPTdgPqHl9eX7Kcl+Mq493lmUHd/kMnX8zpYr/ieVPxV4/zGoNfII33L20l502+BFWGtsycRay0fC+MJoTyw7oWQ3Cn41+wE/QQ6oNI4Gx3vIxiN9TYJRvsL/hBzybiec6+In7Kh7/bGi9qkqNOzD42/WMo8MLzaVirsl/L6httLHgiRAayV1jYXpZ3DP6rdjGgn4l5DVf4xCRKvsQH9xkyumqOkmy4x/j22TwbsTyXC/PBD4eyPNM6jI9KGYNYQeJC+5duAT46mwPhYgpQ== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN7PR11MB7638.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 004a2b9a-e687-4d6a-41dd-08def6e04a66 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Aug 2026 13:07:11.4384 (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: C1tDalbBPV+wlxWbrxLAVz4Khw79kXka00A3lLlkDgbpTMZr2obn6dfl9NoullmIAkaz3PC2raeaxNrmezqRlxDtJPdgeeZSd1tVlyFpAnU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR11MB7000 X-OriginatorOrg: intel.com Content-Transfer-Encoding: base64 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org SGkgTWF0dGhpZXUsDQoNClBsZWFzZSBmaW5kIG15IGZlZWRiYWNrIGJlbG93Lg0KDQo+IC0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1hdHRoaWV1IExvbmdvIDxtYXR0aGlldS5s b25nb0Bhcm0uY29tPg0KPiBTZW50OiBEaWVuc3RhZywgMjguIEp1bGkgMjAyNiAxNzoxNw0KPiBU bzogZ2RiLXBhdGNoZXNAc291cmNld2FyZS5vcmcNCj4gQ2M6IEx1aXMgTWFjaGFkbyA8bHVpcy5t YWNoYWRvQGFtZC5jb20+OyBMdWlzIE1hY2hhZG8NCj4gPGx1aXMubWFjaGFkby5mb3NzQGdtYWls LmNvbT47IFRoaWFnbyBKdW5nIEJhdWVybWFubg0KPiA8dGhpYWdvLmJhdWVybWFubkBsaW5hcm8u b3JnPjsgU2ltb24gTWFyY2hpIDxzaW1hcmtAc2ltYXJrLmNhPjsgS2V2aW4NCj4gQnVldHRuZXIg PGtldmluYkByZWRoYXQuY29tPjsgSm9vcywgQ2hyaXN0aW5hIDxjaHJpc3RpbmEuam9vc0BpbnRl bC5jb20+Ow0KPiBKb29zLCBDaHJpc3RpbmEgPGNocmlzdGluYS5qb29zQGludGVsLmNvbT47IE1h dHRoaWV1IExvbmdvDQo+IDxtYXR0aGlldS5sb25nb0Bhcm0uY29tPg0KPiBTdWJqZWN0OiBbUEFU Q0ggdjEgMy82XSBnZGI6IGludHJvZHVjZSBoZWxwZXIgY2xhc3MgZmlsZV9yZWFkZXJfdA0KPiAN Cj4gV3JhcCBhbGwgdGhlIGJvaWxlcnBsYXRlIGNvZGUgcmVxdWlyZWQgdG8gcmVhZCBhIGZpbGUg aW4gYSBuZXcgaGVscGVyDQo+IGNsYXNzOiBmaWxlX3JlYWRlcl90LiBUaGUgY2xhc3Mgb3ducyB0 aGUgZmlsZSBjb250ZW50cyB0b2dldGhlciB3aXRoIHRoZSBmaWxlIHBhdGgsDQo+IGFuZCBwcm92 aWRlcyBjb252ZW5pZW50IGFjY2Vzc29ycyBmb3IgdGhlIGRhdGEsIHNpemUgYW5kIHR5cGVkIHZp ZXdzLiBJdA0KPiBzdXBwb3J0cyBib3RoIG51bGwtdGVybWluYXRlZCB0ZXh0IGZpbGVzIGFuZCBi aW5hcnkgZmlsZXMuDQo+IA0KPiBUaGlzIGhlbHBlciBlbGltaW5hdGVzIHJlcGVhdGVkIGNhbGxz IHRvIHRhcmdldF9maWxlaW9fcmVhZF9zdHJhbGxvYyBhbmQNCj4gdGFyZ2V0X2ZpbGVpb19yZWFk X2FsbG9jLCByZW1vdmUgZXhwbGljaXQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aA0KPiBnZGI6OnVu aXF1ZV94bWFsbG9jX3B0ciwgYW5kIHNpbXBsaWZpZXMgdGhlIGNhc3RpbmcgbG9naWMgd2hlbiB3 b3JraW5nIHdpdGgNCj4gYmluYXJ5IGRhdGEuDQo+IA0KPiBUaGUgcGF0Y2ggY29udmVydHMgc29t ZSBvZiB0aGUgZXhpc3RpbmcgTGludXgsIEFNRDY0LCBhbmQgU1BBUkMgY29kZSB0aGF0DQo+IHJl YWRzIGZpbGVzIGZyb20gL3Byb2MgdG8gdXNlIGZpbGVfcmVhZGVyX3QuDQo+IC0tLQ0KPiAgZ2Ri L2FtZDY0LWxpbnV4LXRkZXAuYyB8ICAxMiArKy0tLQ0KPiAgZ2RiL2xpbnV4LXRkZXAuYyAgICAg ICB8IDEwOSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAgZ2Ri L3NwYXJjNjQtdGRlcC5jICAgICB8ICAxMyArKystLQ0KPiAgZ2RiL3RhcmdldC5oICAgICAgICAg ICB8ICA3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgNCBmaWxlcyBjaGFuZ2Vk LCAxMzcgaW5zZXJ0aW9ucygrKSwgNzYgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEv Z2RiL2FtZDY0LWxpbnV4LXRkZXAuYyBiL2dkYi9hbWQ2NC1saW51eC10ZGVwLmMgaW5kZXgNCj4g OWIyM2RiNzJiYmUuLjUyZjE2Yzk1M2QxIDEwMDY0NA0KPiAtLS0gYS9nZGIvYW1kNjQtbGludXgt dGRlcC5jDQo+ICsrKyBiL2dkYi9hbWQ2NC1saW51eC10ZGVwLmMNCj4gQEAgLTE4NDgsMTQgKzE4 NDgsMTEgQEAgYW1kNjRfbGludXhfbGFtX3VudGFnX21hc2sgKCkNCj4gICAgaWYgKGluZi0+ZmFr ZV9waWRfcCkNCj4gICAgICByZXR1cm4gREVGQVVMVF9UQUdfTUFTSzsNCj4gDQo+IC0gIGNvbnN0 IHN0ZDo6c3RyaW5nIGZpbGVuYW1lID0gc3RyaW5nX3ByaW50ZiAoIi9wcm9jLyVkL3N0YXR1cyIs IGluZi0+cGlkKTsNCj4gLSAgZ2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8Y2hhcj4gc3RhdHVzX2Zp bGUNCj4gLSAgICA9IHRhcmdldF9maWxlaW9fcmVhZF9zdHJhbGxvYyAobnVsbHB0ciwgZmlsZW5h bWUuY19zdHIgKCkpOw0KPiAtDQo+IC0gIGlmIChzdGF0dXNfZmlsZSA9PSBudWxscHRyKQ0KPiAr ICBmaWxlX3JlYWRlcl90PGNoYXI+IHByb2Nfc3RhdHVzIChzdHJpbmdfcHJpbnRmICgiL3Byb2Mv JWQvc3RhdHVzIiwNCj4gKyBpbmYtPnBpZCkpOyAgaWYgKCFwcm9jX3N0YXR1cykNCj4gICAgICBy ZXR1cm4gREVGQVVMVF9UQUdfTUFTSzsNCj4gDQo+IC0gIHN0ZDo6c3RyaW5nX3ZpZXcgc3RhdHVz X2ZpbGVfdmlldyAoc3RhdHVzX2ZpbGUuZ2V0ICgpKTsNCj4gKyAgc3RkOjpzdHJpbmdfdmlldyBz dGF0dXNfZmlsZV92aWV3IChwcm9jX3N0YXR1cy5kYXRhICgpKTsNCj4gICAgY29uc3RleHByIHN0 ZDo6c3RyaW5nX3ZpZXcgdW50YWdfbWFza19zdHIgPSAidW50YWdfbWFzazpcdCI7DQo+ICAgIGNv bnN0IHNpemVfdCBmb3VuZCA9IHN0YXR1c19maWxlX3ZpZXcuZmluZCAodW50YWdfbWFza19zdHIp Ow0KPiAgICBpZiAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpDQo+IEBAIC0xODY3LDcgKzE4 NjQsOCBAQCBhbWQ2NF9saW51eF9sYW1fdW50YWdfbWFzayAoKQ0KPiAgICAgICAgdW5zaWduZWQg bG9uZyBsb25nIHJlc3VsdCA9IHN0ZDo6c3RydG91bCAoc3RhcnQsICZlbmRwdHIsIDApOw0KPiAg ICAgICAgaWYgKGVycm5vICE9IDAgfHwgZW5kcHRyID09IHN0YXJ0KQ0KPiAgCWVycm9yIChfKCJG YWlsZWQgdG8gcGFyc2UgdW50YWdfbWFzayBmcm9tIGZpbGUgJXBzLiIpLA0KPiAtCSAgICAgICBz dHlsZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5bGUgKCksIGZpbGVuYW1lLmNfc3RyICgp KSk7DQo+ICsJICAgICAgIHN0eWxlZF9zdHJpbmcgKGZpbGVfbmFtZV9zdHlsZS5zdHlsZSAoKSwN Cj4gKwkJCSAgICAgIHByb2Nfc3RhdHVzLmNfZmlsZXBhdGggKCkpKTsNCj4gDQo+ICAgICAgICBy ZXR1cm4gcmVzdWx0Ow0KPiAgICAgIH0NCg0KVGhlcmUgaXMgYSBtaW5vciBiZWhhdmlvdXJhbCBj aGFuZ2UgaW4gdGhlIGZ1bmN0aW9uDQphbWQ2NF9saW51eF9sYW1fdW50YWdfbWFzaywgc2luY2Ug d2Ugbm93IHJldHVybiBlYXJsaWVyIGluIGNhc2UNCnRoZSBmaWxlIGlzIGVtcHR5Lg0KSW4gdGhp cyBjYXNlIGl0J3MgYW4gaW1wcm92ZW1lbnQsIHNvIGl0J3MgZ29vZCB0byBrZWVwIGluIG15IG9w aW5pb24uDQoNCj4gZGlmZiAtLWdpdCBhL2dkYi9saW51eC10ZGVwLmMgYi9nZGIvbGludXgtdGRl cC5jIGluZGV4DQo+IDliZGNjNTVhMGUxLi4xMWYwYTY5NTJlYSAxMDA2NDQNCj4gLS0tIGEvZ2Ri L2xpbnV4LXRkZXAuYw0KPiArKysgYi9nZGIvbGludXgtdGRlcC5jDQo+IEBAIC0xNjk4LDYgKzE2 OTgsMTIgQEAgcGFyc2Vfc21hcHNfZGF0YSAoY29uc3QgY2hhciAqZGF0YSwNCj4gICAgcmV0dXJu IHNtYXBzOw0KPiAgfQ0KPiANCj4gK3N0YXRpYyBzdGQ6OnZlY3RvcjxzdHJ1Y3Qgc21hcHNfZGF0 YT4NCg0KTml0OiB3ZSBzaG91bGQgb21pdCB0aGUgc3RydWN0IGtleXdvcmQgaGVyZS4NCg0KPiAr cGFyc2Vfc21hcHNfZGF0YSAoY29uc3QgZmlsZV9yZWFkZXJfdDxjaGFyPiAmZnJlYWRlcikgew0K PiArICByZXR1cm4gcGFyc2Vfc21hcHNfZGF0YSAoZnJlYWRlci5kYXRhICgpLCBmcmVhZGVyLmZp bGVwYXRoICgpKTsgfQ0KPiArDQo+ICAvKiBIZWxwZXIgdGhhdCBjaGVja3MgaWYgYW4gYWRkcmVz cyBpcyBpbiBhIG1lbW9yeSB0YWcgcGFnZSBmb3IgYSBsaXZlDQo+ICAgICBwcm9jZXNzLiAgKi8N Cj4gDQo+IEBAIC0xNzA5LDE3ICsxNzE1LDEzIEBAIGxpbnV4X3Byb2Nlc3NfYWRkcmVzc19pbl9t ZW10YWdfcGFnZQ0KPiAoQ09SRV9BRERSIGFkZHJlc3MpDQo+IA0KPiAgICBwdGlkX3QgcHRpZCA9 IGdldF9wcm9jZXNzX3JlZmVyZW5jZV9wdGlkICgpOw0KPiANCj4gLSAgc3RkOjpzdHJpbmcgc21h cHNfZmlsZSA9IHN0cmluZ19wcmludGYgKCIvcHJvYy8lbGQvc21hcHMiLCBwdGlkLmx3cCAoKSk7 DQo+IC0NCj4gLSAgZ2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8Y2hhcj4gZGF0YQ0KPiAtICAgID0g dGFyZ2V0X2ZpbGVpb19yZWFkX3N0cmFsbG9jIChOVUxMLCBzbWFwc19maWxlLmNfc3RyICgpKTsN Cj4gLQ0KPiAtICBpZiAoZGF0YSA9PSBudWxscHRyKQ0KPiArICBmaWxlX3JlYWRlcl90PGNoYXI+ IHNtYXBzX2ZyZWFkZXINCj4gKyAgICAoc3RyaW5nX3ByaW50ZiAoIi9wcm9jLyVsZC9zbWFwcyIs IHB0aWQubHdwICgpKSk7ICBpZg0KPiArICghc21hcHNfZnJlYWRlcikNCj4gICAgICByZXR1cm4g ZmFsc2U7DQo+IA0KPiAgICAvKiBQYXJzZSB0aGUgY29udGVudHMgb2Ygc21hcHMgaW50byBhIHZl Y3Rvci4gICovDQo+IC0gIHN0ZDo6dmVjdG9yPHN0cnVjdCBzbWFwc19kYXRhPiBzbWFwcw0KPiAt ICAgID0gcGFyc2Vfc21hcHNfZGF0YSAoZGF0YS5nZXQgKCksIHNtYXBzX2ZpbGUpOw0KPiArICBz dGQ6OnZlY3RvcjxzdHJ1Y3Qgc21hcHNfZGF0YT4gc21hcHMgPSBwYXJzZV9zbWFwc19kYXRhDQo+ ICsgKHNtYXBzX2ZyZWFkZXIpOw0KDQpMaWtlIGFtZDY0X2xpbnV4X2xhbV91bnRhZ19tYXNrIHdl IGhhdmUgYSBtaW5vciBiZWhhdmlvdXJhbCBjaGFuZ2UgaGVyZS4NCkJ1dCBJIGFnYWluIHNlZSBp dCBhcyBhbiBpbXByb3ZlbWVudCwgYXMgdGhlIHJlc3VsdCBzaG91bGQgYmUgdGhlIHNhbWUsIHdl IGp1c3QNCnJldHVybiBlYXJsaWVyLiBUaGVyZSBtaWdodCBiZSBzb21lIG1vcmUgY2FzZXMgaW4g bGludXgtdGRlcC5jLCBidXQgSSBkaWQgbm90IGNoZWNrDQphbGwgb2YgdGhlbS4NCg0KSSB0aGlu ayBpdCdzIHdvcnRoIHBvaW50aW5nIG91dCBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuDQoNCj4gICAg Zm9yIChjb25zdCBzbWFwc19kYXRhICZtYXAgOiBzbWFwcykNCj4gICAgICB7DQo+IEBAIC0xNzgz LDE3ICsxNzg1LDEzIEBAIGxpbnV4X2ZpbmRfbWVtb3J5X3JlZ2lvbnNfZnVsbCAoc3RydWN0IGdk YmFyY2gNCj4gKmdkYmFyY2gsDQo+IA0KPiAgICBpZiAodXNlX2NvcmVkdW1wX2ZpbHRlcikNCj4g ICAgICB7DQo+IC0gICAgICBzdGQ6OnN0cmluZyBjb3JlX2R1bXBfZmlsdGVyX25hbWUNCj4gLQk9 IHN0cmluZ19wcmludGYgKCIvcHJvYy8lbGQvY29yZWR1bXBfZmlsdGVyIiwgcHRpZC5sd3AgKCkp Ow0KPiAtDQo+IC0gICAgICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBjb3JlZHVtcGZp bHRlcmRhdGENCj4gLQk9IHRhcmdldF9maWxlaW9fcmVhZF9zdHJhbGxvYyAoTlVMTCwgY29yZV9k dW1wX2ZpbHRlcl9uYW1lLmNfc3RyICgpKTsNCj4gLQ0KPiAtICAgICAgaWYgKGNvcmVkdW1wZmls dGVyZGF0YSAhPSBOVUxMKQ0KPiArICAgICAgZmlsZV9yZWFkZXJfdDxjaGFyPiBjb3JlZHVtcF9m aWx0ZXJfZnJlYWRlcg0KPiArCShzdHJpbmdfcHJpbnRmICgiL3Byb2MvJWxkL2NvcmVkdW1wX2Zp bHRlciIsIHB0aWQubHdwICgpKSk7DQo+ICsgICAgICBpZiAoY29yZWR1bXBfZmlsdGVyX2ZyZWFk ZXIpDQo+ICAJew0KPiAgCSAgdW5zaWduZWQgaW50IGZsYWdzOw0KPiANCj4gLQkgIHNzY2FuZiAo Y29yZWR1bXBmaWx0ZXJkYXRhLmdldCAoKSwgIiV4IiwgJmZsYWdzKTsNCj4gKwkgIHNzY2FuZiAo Y29yZWR1bXBfZmlsdGVyX2ZyZWFkZXIuZGF0YSAoKSwgIiV4IiwgJmZsYWdzKTsNCj4gIAkgIGZp bHRlcmZsYWdzID0gKGVudW0gZmlsdGVyX2ZsYWcpIGZsYWdzOw0KPiAgCX0NCj4gICAgICB9DQo+ IEBAIC0yMjk2LDkgKzIyOTQsNiBAQCBsaW51eF9jb3JlZmlsZV9wYXJzZV9leGVjX2NvbnRleHQg KHN0cnVjdCBnZGJhcmNoDQo+ICpnZGJhcmNoLCBiZmQgKmNiZmQpICBzdGF0aWMgYm9vbCAgbGlu dXhfZmlsbF9wcnBzaW5mbyAoc3RydWN0DQo+IGVsZl9pbnRlcm5hbF9saW51eF9wcnBzaW5mbyAq cCkgIHsNCj4gLSAgLyogVGhlIGZpbGVuYW1lIHdoaWNoIHdlIHdpbGwgdXNlIHRvIG9idGFpbiBz b21lIGluZm8gYWJvdXQgdGhlIHByb2Nlc3MuDQo+IC0gICAgIFdlIHdpbGwgYmFzaWNhbGx5IHVz ZSB0aGlzIHRvIHN0b3JlIHRoZSBgL3Byb2MvUElEL0ZJTEVOQU1FJyBmaWxlLiAgKi8NCj4gLSAg Y2hhciBmaWxlbmFtZVsxMDBdOw0KPiAgICAvKiBUaGUgYmFzZW5hbWUgb2YgdGhlIGV4ZWN1dGFi bGUuICAqLw0KPiAgICBjb25zdCBjaGFyICpiYXNlbmFtZTsNCj4gICAgLyogVGVtcG9yYXJ5IGJ1 ZmZlci4gICovDQo+IEBAIC0yMzIwLDI0ICsyMzE1LDI3IEBAIGxpbnV4X2ZpbGxfcHJwc2luZm8g KHN0cnVjdA0KPiBlbGZfaW50ZXJuYWxfbGludXhfcHJwc2luZm8gKnApDQo+IA0KPiAgICBnZGJf YXNzZXJ0IChwICE9IG51bGxwdHIpOw0KPiANCj4gLSAgLyogT2J0YWluaW5nIFBJRCBhbmQgZmls ZW5hbWUuICAqLw0KPiAtICB4c25wcmludGYgKGZpbGVuYW1lLCBzaXplb2YgKGZpbGVuYW1lKSwg Ii9wcm9jLyVsZC9jbWRsaW5lIiwgcHRpZC5sd3AgKCkpOw0KPiAtICAvKiBUaGUgZnVsbCBuYW1l IG9mIHRoZSBwcm9ncmFtIHdoaWNoIGdlbmVyYXRlZCB0aGUgY29yZWZpbGUuICAqLw0KPiAtICBn ZGJfYnl0ZSAqYnVmID0gbnVsbHB0cjsNCj4gLSAgTE9OR0VTVCBidWZfbGVuID0gdGFyZ2V0X2Zp bGVpb19yZWFkX2FsbG9jIChudWxscHRyLCBmaWxlbmFtZSwgJmJ1Zik7DQo+IC0gIGdkYjo6dW5p cXVlX3htYWxsb2NfcHRyPGNoYXI+IGZuYW1lICgoY2hhciAqKWJ1Zik7DQo+ICsgIGZpbGVfcmVh ZGVyX3Q8Z2RiX2J5dGU+IGNtZGxpbmVfZnJlYWRlcg0KPiArICAgIChzdHJpbmdfcHJpbnRmICgi L3Byb2MvJWxkL2NtZGxpbmUiLCBwdGlkLmx3cCAoKSkpOyAgaWYNCj4gKyAoIWNtZGxpbmVfZnJl YWRlcikNCj4gKyAgICByZXR1cm4gZmFsc2U7DQo+IA0KPiAtICBpZiAoYnVmX2xlbiA8IDEgfHwg Zm5hbWUuZ2V0ICgpID09IG51bGxwdHIgfHwgZm5hbWUuZ2V0ICgpWzBdID09ICdcMCcpDQo+ICsg IC8qIC9wcm9jLzxwaWQ+L2NtZGxpbmUgc3RvcmVzIHRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRz IGFzIGEgc2VxdWVuY2UNCj4gb2YNCj4gKyAgICAgTlVMLXNlcGFyYXRlZCBzdHJpbmdzLiAgKi8N Cj4gKyAgZ2RiOjphcnJheV92aWV3PGNoYXI+IGNtZGxpbmUgPSBjbWRsaW5lX2ZyZWFkZXIuY2Fz dF92aWV3PGNoYXI+ICgpOw0KPiArICAvKiBUaGUgYnVmZmVyIHBvaW50cyB0byB0aGUgZnVsbCBu YW1lIG9mIHRoZSBwcm9ncmFtIHdoaWNoIGdlbmVyYXRlZCB0aGUNCj4gKyAgICAgY29yZWZpbGUu ICAqLw0KPiArICBpZiAoY21kbGluZS5zaXplICgpIDwgMSB8fCBjbWRsaW5lWzBdID09ICdcMCcp DQo+ICAgICAgew0KPiAgICAgICAgLyogTm8gcHJvZ3JhbSBuYW1lIHdhcyByZWFkLCBzbyB3ZSB3 b24ndCBiZSBhYmxlIHRvIHJldHJpZXZlIG1vcmUNCj4gIAkgaW5mb3JtYXRpb24gYWJvdXQgdGhl IHByb2Nlc3MuICAqLw0KPiAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiAgICAgIH0NCj4gLSAgaWYg KGZuYW1lLmdldCAoKVtidWZfbGVuIC0gMV0gIT0gJ1wwJykNCj4gKyAgaWYgKGNtZGxpbmVbY21k bGluZS5zaXplICgpIC0gMV0gIT0gJ1wwJykNCj4gICAgICB7DQo+ICAgICAgICB3YXJuaW5nIChf KCJ0YXJnZXQgZmlsZSAlcyAiDQo+ICAJCSAiZG9lcyBub3QgY29udGFpbiBhIHRyYWlsaW5nIG51 bGwgY2hhcmFjdGVyIiksDQo+IC0JICAgICAgIGZpbGVuYW1lKTsNCj4gKwkgICAgICAgY21kbGlu ZV9mcmVhZGVyLmNfZmlsZXBhdGggKCkpOw0KPiAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiAgICAg IH0NCj4gDQo+IEBAIC0yMzQ3LDI3ICsyMzQ1LDI0IEBAIGxpbnV4X2ZpbGxfcHJwc2luZm8gKHN0 cnVjdA0KPiBlbGZfaW50ZXJuYWxfbGludXhfcHJwc2luZm8gKnApDQo+ICAgIHAtPnByX3BpZCA9 IHB0aWQucGlkICgpOw0KPiANCj4gICAgLyogQ29weWluZyB0aGUgcHJvZ3JhbSBuYW1lLiAgT25s eSB0aGUgYmFzZW5hbWUgbWF0dGVycy4gICovDQo+IC0gIGJhc2VuYW1lID0gbGJhc2VuYW1lIChm bmFtZS5nZXQgKCkpOw0KPiArICBiYXNlbmFtZSA9IGxiYXNlbmFtZSAoY21kbGluZS5kYXRhICgp KTsNCj4gICAgc3RybmNweSAocC0+cHJfZm5hbWUsIGJhc2VuYW1lLCBzaXplb2YgKHAtPnByX2Zu YW1lKSAtIDEpOw0KPiAgICBwLT5wcl9mbmFtZVtzaXplb2YgKHAtPnByX2ZuYW1lKSAtIDFdID0g J1wwJzsNCj4gDQo+ICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZpbmZhcmdzID0gY3VycmVudF9pbmZl cmlvciAoKS0+YXJncyAoKTsNCj4gDQo+ICAgIC8qIFRoZSBhcmd1bWVudHMgb2YgdGhlIHByb2dy YW0uICAqLw0KPiAtICBzdGQ6OnN0cmluZyBwc2FyZ3MgPSBmbmFtZS5nZXQgKCk7DQo+ICsgIHN0 ZDo6c3RyaW5nIHBzYXJncyA9IGNtZGxpbmUuZGF0YSAoKTsNCj4gICAgaWYgKCFpbmZhcmdzLmVt cHR5ICgpKQ0KPiAgICAgIHBzYXJncyArPSAnICcgKyBpbmZhcmdzOw0KPiANCj4gICAgc3RybmNw eSAocC0+cHJfcHNhcmdzLCBwc2FyZ3MuY19zdHIgKCksIHNpemVvZiAocC0+cHJfcHNhcmdzKSAt IDEpOw0KPiAgICBwLT5wcl9wc2FyZ3Nbc2l6ZW9mIChwLT5wcl9wc2FyZ3MpIC0gMV0gPSAnXDAn Ow0KPiANCj4gLSAgeHNucHJpbnRmIChmaWxlbmFtZSwgc2l6ZW9mIChmaWxlbmFtZSksICIvcHJv Yy8lbGQvc3RhdCIsIHB0aWQubHdwICgpKTsNCj4gLSAgLyogVGhlIGNvbnRlbnRzIG9mIGAvcHJv Yy9QSUQvc3RhdCcuICAqLw0KPiAtICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBwcm9j X3N0YXRfY29udGVudHMNCj4gLSAgICA9IHRhcmdldF9maWxlaW9fcmVhZF9zdHJhbGxvYyAoTlVM TCwgZmlsZW5hbWUpOw0KPiAtICBjaGFyICpwcm9jX3N0YXQgPSBwcm9jX3N0YXRfY29udGVudHMu Z2V0ICgpOw0KPiAtDQo+IC0gIGlmIChwcm9jX3N0YXQgPT0gTlVMTCB8fCAqcHJvY19zdGF0ID09 ICdcMCcpDQo+ICsgIGZpbGVfcmVhZGVyX3Q8Y2hhcj4gc3RhdF9mcmVhZGVyDQo+ICsgICAgKHN0 cmluZ19wcmludGYgKCIvcHJvYy8lbGQvc3RhdCIsIHB0aWQubHdwICgpKSk7ICBjb25zdCBjaGFy DQo+ICsgKnByb2Nfc3RhdCA9IHN0YXRfZnJlYWRlci5kYXRhICgpOyAgaWYgKCFzdGF0X2ZyZWFk ZXIgfHwgKnByb2Nfc3RhdCA9PQ0KPiArICdcMCcpDQo+ICAgICAgew0KPiAgICAgICAgLyogRGVz cGl0ZSBiZWluZyB1bmFibGUgdG8gcmVhZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZQ0KPiAg CSBwcm9jZXNzLCB3ZSByZXR1cm4gdHJ1ZSBoZXJlIGJlY2F1c2UgYXQgbGVhc3Qgd2UgaGF2ZSBp dHMgQEAgLQ0KPiAyNDM5LDEzICsyNDM0LDEwIEBAIGxpbnV4X2ZpbGxfcHJwc2luZm8gKHN0cnVj dCBlbGZfaW50ZXJuYWxfbGludXhfcHJwc2luZm8NCj4gKnApDQo+IA0KPiAgICAvKiBGaW5hbGx5 LCBvYnRhaW5pbmcgdGhlIFVJRCBhbmQgR0lELiAgRm9yIHRoYXQsIHdlIHJlYWQgYW5kIHBhcnNl IHRoZQ0KPiAgICAgICBjb250ZW50cyBvZiB0aGUgYC9wcm9jL1BJRC9zdGF0dXMnIGZpbGUuICAq Lw0KPiAtICB4c25wcmludGYgKGZpbGVuYW1lLCBzaXplb2YgKGZpbGVuYW1lKSwgIi9wcm9jLyVs ZC9zdGF0dXMiLCBwdGlkLmx3cCAoKSk7DQo+IC0gIC8qIFRoZSBjb250ZW50cyBvZiBgL3Byb2Mv UElEL3N0YXR1cycuICAqLw0KPiAtICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBwcm9j X3N0YXR1c19jb250ZW50cw0KPiAtICAgID0gdGFyZ2V0X2ZpbGVpb19yZWFkX3N0cmFsbG9jIChO VUxMLCBmaWxlbmFtZSk7DQo+IC0gIGNoYXIgKnByb2Nfc3RhdHVzID0gcHJvY19zdGF0dXNfY29u dGVudHMuZ2V0ICgpOw0KPiAtDQo+IC0gIGlmIChwcm9jX3N0YXR1cyA9PSBOVUxMIHx8ICpwcm9j X3N0YXR1cyA9PSAnXDAnKQ0KPiArICBmaWxlX3JlYWRlcl90PGNoYXI+IHN0YXR1c19mcmVhZGVy DQo+ICsgICAgKHN0cmluZ19wcmludGYgKCIvcHJvYy8lbGQvc3RhdHVzIiwgcHRpZC5sd3AgKCkp KTsgIGNoYXINCj4gKyAqcHJvY19zdGF0dXMgPSBzdGF0dXNfZnJlYWRlci5kYXRhICgpOyAgaWYg KCFzdGF0dXNfZnJlYWRlciB8fA0KPiArICpwcm9jX3N0YXR1cyA9PSAnXDAnKQ0KPiAgICAgIHsN Cj4gICAgICAgIC8qIFJldHVybmluZyB0cnVlIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIGJ1bmNo IG9mIGluZm9ybWF0aW9uLiAgKi8NCj4gICAgICAgIHJldHVybiB0cnVlOw0KPiBAQCAtMjgzOCw5 ICsyODMwLDYgQEAgbGludXhfZ2RiX3NpZ25hbF90b190YXJnZXQgKHN0cnVjdCBnZGJhcmNoDQo+ ICpnZGJhcmNoLCAgc3RhdGljIGJvb2wgIGxpbnV4X3ZzeXNjYWxsX3JhbmdlX3JhdyAoc3RydWN0 IGdkYmFyY2ggKmdkYmFyY2gsDQo+IHN0cnVjdCBtZW1fcmFuZ2UgKnJhbmdlKSAgew0KPiAtICBj aGFyIGZpbGVuYW1lWzEwMF07DQo+IC0gIGxvbmcgcGlkOw0KPiAtDQo+ICAgIGlmICh0YXJnZXRf YXV4dl9zZWFyY2ggKEFUX1NZU0lORk9fRUhEUiwgJnJhbmdlLT5zdGFydCkgPD0gMCkNCj4gICAg ICByZXR1cm4gZmFsc2U7DQo+IA0KPiBAQCAtMjg3OCw3ICsyODY3LDcgQEAgbGludXhfdnN5c2Nh bGxfcmFuZ2VfcmF3IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwNCj4gc3RydWN0IG1lbV9yYW5n ZSAqcmFuZ2UpDQo+ICAgIGlmIChjdXJyZW50X2luZmVyaW9yICgpLT5mYWtlX3BpZF9wKQ0KPiAg ICAgIHJldHVybiBmYWxzZTsNCj4gDQo+IC0gIHBpZCA9IGN1cnJlbnRfaW5mZXJpb3IgKCktPnBp ZDsNCj4gKyAgbG9uZyBwaWQgPSBjdXJyZW50X2luZmVyaW9yICgpLT5waWQ7DQo+IA0KPiAgICAv KiBOb3RlIHRoYXQgcmVhZGluZyAvcHJvYy9QSUQvdGFzay9QSUQvbWFwcyAoMSkgaXMgbXVjaCBm YXN0ZXIgdGhhbg0KPiAgICAgICByZWFkaW5nIC9wcm9jL1BJRC9tYXBzICgyKS4gIFRoZSBsYXRl ciBpZGVudGlmaWVzIHRocmVhZCBzdGFja3MgQEAgLQ0KPiAyODg4LDE1ICsyODc3LDE0IEBAIGxp bnV4X3ZzeXNjYWxsX3JhbmdlX3JhdyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsDQo+IHN0cnVj dCBtZW1fcmFuZ2UgKnJhbmdlKQ0KPiAgICAgICBhIGZldyB0aG91c2FuZCB0aHJlYWRzLCAoMSkg dGFrZXMgYSBmZXcgbWlsbGlzZWNvbmRzLCB3aGlsZSAoMikNCj4gICAgICAgdGFrZXMgc2V2ZXJh bCBzZWNvbmRzLiAgQWxzbyBub3RlIHRoYXQgInNtYXBzIiwgd2hhdCB3ZSByZWFkIGZvcg0KPiAg ICAgICBkZXRlcm1pbmluZyBjb3JlIGR1bXAgbWFwcGluZ3MsIGlzIGV2ZW4gc2xvd2VyIHRoYW4g Im1hcHMiLiAgKi8NCj4gLSAgeHNucHJpbnRmIChmaWxlbmFtZSwgc2l6ZW9mIGZpbGVuYW1lLCAi L3Byb2MvJWxkL3Rhc2svJWxkL21hcHMiLCBwaWQsIHBpZCk7DQo+IC0gIGdkYjo6dW5pcXVlX3ht YWxsb2NfcHRyPGNoYXI+IGRhdGENCj4gLSAgICA9IHRhcmdldF9maWxlaW9fcmVhZF9zdHJhbGxv YyAoTlVMTCwgZmlsZW5hbWUpOw0KPiAtICBpZiAoZGF0YSAhPSBOVUxMKQ0KPiArICBmaWxlX3Jl YWRlcl90PGNoYXI+IHRhc2tfbWFwc19mcmVhZGVyDQo+ICsgICAgKHN0cmluZ19wcmludGYgKCIv cHJvYy8lbGQvdGFzay8lbGQvbWFwcyIsIHBpZCwgcGlkKSk7ICBpZg0KPiArICghdGFza19tYXBz X2ZyZWFkZXIuZXJyb3IgKCkpDQo+ICAgICAgew0KPiAgICAgICAgY2hhciAqbGluZTsNCj4gICAg ICAgIGNoYXIgKnNhdmVwdHIgPSBOVUxMOw0KPiANCj4gLSAgICAgIGZvciAobGluZSA9IHN0cnRv a19yIChkYXRhLmdldCAoKSwgIlxuIiwgJnNhdmVwdHIpOw0KPiArICAgICAgZm9yIChsaW5lID0g c3RydG9rX3IgKHRhc2tfbWFwc19mcmVhZGVyLmRhdGEgKCksICJcbiIsICZzYXZlcHRyKTsNCj4g IAkgICBsaW5lICE9IE5VTEw7DQo+ICAJICAgbGluZSA9IHN0cnRva19yIChOVUxMLCAiXG4iLCAm c2F2ZXB0cikpDQo+ICAJew0KPiBAQCAtMjkxNSw3ICsyOTAzLDggQEAgbGludXhfdnN5c2NhbGxf cmFuZ2VfcmF3IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwNCj4gc3RydWN0IG1lbV9yYW5nZSAq cmFuZ2UpDQo+ICAJfQ0KPiAgICAgIH0NCj4gICAgZWxzZQ0KPiAtICAgIHdhcm5pbmcgKF8oInVu YWJsZSB0byBvcGVuIC9wcm9jIGZpbGUgJyVzJyIpLCBmaWxlbmFtZSk7DQo+ICsgICAgd2Fybmlu ZyAoXygidW5hYmxlIHRvIG9wZW4gL3Byb2MgZmlsZSAnJXMnIiksDQo+ICsJICAgICB0YXNrX21h cHNfZnJlYWRlci5jX2ZpbGVwYXRoICgpKTsNCj4gDQo+ICAgIHJldHVybiBmYWxzZTsNCj4gIH0N Cj4gQEAgLTMyNDIsMTYgKzMyMzEsMTIgQEAgbGludXhfYWRkcmVzc19pbl9zaGFkb3dfc3RhY2tf bWVtX3JhbmdlDQo+IA0KPiAgICBwdGlkX3QgcHRpZCA9IGdldF9wcm9jZXNzX3JlZmVyZW5jZV9w dGlkICgpOw0KPiANCj4gLSAgc3RkOjpzdHJpbmcgc21hcHNfZmlsZSA9IHN0cmluZ19wcmludGYg KCIvcHJvYy8lbGQvc21hcHMiLCBwdGlkLmx3cCAoKSk7DQo+IC0NCj4gLSAgZ2RiOjp1bmlxdWVf eG1hbGxvY19wdHI8Y2hhcj4gZGF0YQ0KPiAtICAgID0gdGFyZ2V0X2ZpbGVpb19yZWFkX3N0cmFs bG9jIChudWxscHRyLCBzbWFwc19maWxlLmNfc3RyICgpKTsNCj4gLQ0KPiAtICBpZiAoZGF0YSA9 PSBudWxscHRyKQ0KPiArICBmaWxlX3JlYWRlcl90PGNoYXI+IHNtYXBzX2ZyZWFkZXINCj4gKyAg ICAoc3RyaW5nX3ByaW50ZiAoIi9wcm9jLyVsZC9zbWFwcyIsIHB0aWQubHdwICgpKSk7ICBpZg0K PiArICghc21hcHNfZnJlYWRlcikNCj4gICAgICByZXR1cm4gZmFsc2U7DQo+IA0KPiAtICBjb25z dCBzdGQ6OnZlY3RvcjxzbWFwc19kYXRhPiBzbWFwcw0KPiAtICAgID0gcGFyc2Vfc21hcHNfZGF0 YSAoZGF0YS5nZXQgKCksIHNtYXBzX2ZpbGUpOw0KPiArICBjb25zdCBzdGQ6OnZlY3RvcjxzbWFw c19kYXRhPiBzbWFwcyA9IHBhcnNlX3NtYXBzX2RhdGENCj4gKyAoc21hcHNfZnJlYWRlcik7DQo+ IA0KPiAgICBhdXRvIGZpbmRfYWRkcl9tZW1fcmFuZ2UgPSBbJmFkZHJdIChjb25zdCBzbWFwc19k YXRhICZtYXApDQo+ICAgICAgew0KPiBkaWZmIC0tZ2l0IGEvZ2RiL3NwYXJjNjQtdGRlcC5jIGIv Z2RiL3NwYXJjNjQtdGRlcC5jIGluZGV4DQo+IDkzZGIzNDE3YTJhLi45NTU2MzFiODdkZiAxMDA2 NDQNCj4gLS0tIGEvZ2RiL3NwYXJjNjQtdGRlcC5jDQo+ICsrKyBiL2dkYi9zcGFyYzY0LXRkZXAu Yw0KPiBAQCAtMzAxLDE4ICszMDEsMTYgQEAgYWRpX3RhZ19mZCAoKQ0KPiAgc3RhdGljIGJvb2wN Cj4gIGFkaV9pc19hZGRyX21hcHBlZCAoQ09SRV9BRERSIHZhZGRyLCBzaXplX3QgY250KSAgew0K PiAtICBjaGFyIGZpbGVuYW1lW01BWF9QUk9DX05BTUVfU0laRV07DQo+ICAgIHNpemVfdCBpID0g MDsNCj4gDQo+ICAgIHBpZF90IHBpZCA9IGluZmVyaW9yX3B0aWQucGlkICgpOw0KPiAtICBzbnBy aW50ZiAoZmlsZW5hbWUsIHNpemVvZiBmaWxlbmFtZSwgIi9wcm9jLyVsZC9hZGkvbWFwcyIsIChs b25nKSBwaWQpOw0KPiAtICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBkYXRhDQo+IC0g ICAgPSB0YXJnZXRfZmlsZWlvX3JlYWRfc3RyYWxsb2MgKE5VTEwsIGZpbGVuYW1lKTsNCj4gLSAg aWYgKGRhdGEpDQo+ICsgIGZpbGVfcmVhZGVyX3Q8Y2hhcj4gYWRpX21hcHNfZnJlYWRlcg0KPiAr ICAgIChzdHJpbmdfcHJpbnRmICgiL3Byb2MvJWQvYWRpL21hcHMiLCBwaWQpKTsgIGlmDQo+ICsg KGFkaV9tYXBzX2ZyZWFkZXIuZXJyb3IgKCkpDQoNCkRpZG4ndCB5b3UgbWVhbiANCiAgaWYgKCFh ZGlfbWFwc19mcmVhZGVyLmVycm9yICgpKQ0KDQo/DQoNCj4gICAgICB7DQo+ICAgICAgICBhZGlf c3RhdF90IGFkaV9zdGF0ID0gZ2V0X2FkaV9pbmZvIChwaWQpOw0KPiAgICAgICAgY2hhciAqc2F2 ZXB0cjsNCj4gLSAgICAgIGZvciAoY2hhciAqbGluZSA9IHN0cnRva19yIChkYXRhLmdldCAoKSwg IlxuIiwgJnNhdmVwdHIpOw0KPiArICAgICAgZm9yIChjaGFyICpsaW5lID0gc3RydG9rX3IgKGFk aV9tYXBzX2ZyZWFkZXIuZGF0YSAoKSwgIlxuIiwNCj4gKyAmc2F2ZXB0cik7DQo+ICAJICAgbGlu ZTsNCj4gIAkgICBsaW5lID0gc3RydG9rX3IgKE5VTEwsICJcbiIsICZzYXZlcHRyKSkNCj4gIAl7 DQo+IEBAIC0zMjksNyArMzI3LDggQEAgYWRpX2lzX2FkZHJfbWFwcGVkIChDT1JFX0FERFIgdmFk ZHIsIHNpemVfdCBjbnQpDQo+ICAJfQ0KPiAgICAgICAgfQ0KPiAgICBlbHNlDQo+IC0gICAgd2Fy bmluZyAoXygidW5hYmxlIHRvIG9wZW4gL3Byb2MgZmlsZSAnJXMnIiksIGZpbGVuYW1lKTsNCj4g KyAgICB3YXJuaW5nIChfKCJ1bmFibGUgdG8gb3BlbiAvcHJvYyBmaWxlICclcyciKSwNCj4gKwkg ICAgIGFkaV9tYXBzX2ZyZWFkZXIuY19maWxlcGF0aCAoKSk7DQo+IA0KPiAgICByZXR1cm4gZmFs c2U7DQo+ICB9DQo+IGRpZmYgLS1naXQgYS9nZGIvdGFyZ2V0LmggYi9nZGIvdGFyZ2V0LmggaW5k ZXggODE5Mjc5YzA4ZmMuLjA5ODMwZGZlM2E5DQo+IDEwMDY0NA0KPiAtLS0gYS9nZGIvdGFyZ2V0 LmgNCj4gKysrIGIvZ2RiL3RhcmdldC5oDQo+IEBAIC0yMzQxLDYgKzIzNDEsODUgQEAgZXh0ZXJu IExPTkdFU1QgdGFyZ2V0X2ZpbGVpb19yZWFkX2FsbG9jIChzdHJ1Y3QNCj4gaW5mZXJpb3IgKmlu ZiwgIGV4dGVybiBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiB0YXJnZXRfZmlsZWlvX3Jl YWRfc3RyYWxsb2MNCj4gICAgICAoc3RydWN0IGluZmVyaW9yICppbmYsIGNvbnN0IGNoYXIgKmZp bGVuYW1lLCBMT05HRVNUICpsZW4gPSBudWxscHRyKTsNCj4gDQo+ICsvKiBIZWxwZXIgY2xhc3Mg Zm9yIHJlYWRpbmcgdGhlIGNvbnRlbnQgb2YgYSBmaWxlIG9uIHRoZSB0YXJnZXQuICAqLw0KPiAr dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIGZpbGVfcmVhZGVyX3Qgew0KPiArICAvKiBUaGUg ZmlsZXBhdGggb2YgdGhlIGZpbGUgYmVpbmcgcmVhZC4gICovDQo+ICsgIHN0ZDo6c3RyaW5nIG1f ZmlsZXBhdGg7DQo+ICsgIC8qIFNtYXJ0IHBvaW50ZXIgdG8gdGhlIGRhdGEuICAqLw0KPiArICBn ZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxUPiBtX2RhdGE7DQo+ICsgIC8qIE51bWJlciBvZiBieXRl cyByZWFkLiAgKi8NCj4gKyAgTE9OR0VTVCBtX3NpemU7DQo+ICsNCj4gK3B1YmxpYzoNCj4gKyAg ZmlsZV9yZWFkZXJfdCAoY29uc3Qgc3RkOjpzdHJpbmcgJmZpbGVwYXRoKQ0KPiArICAgIDogbV9m aWxlcGF0aCAoZmlsZXBhdGgpDQo+ICsgICAgLCBtX3NpemUgKDApDQo+ICsgIHsNCj4gKyAgICBp ZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGNoYXI+KQ0KPiArICAgICAgbV9kYXRhID0g dGFyZ2V0X2ZpbGVpb19yZWFkX3N0cmFsbG9jIChudWxscHRyLCBtX2ZpbGVwYXRoLmNfc3RyICgp LA0KPiArCQkJCQkgICAgJm1fc2l6ZSk7DQo+ICsgICAgZWxzZQ0KPiArICAgICAgew0KPiArCWdk Yl9ieXRlICpidWYgPSBudWxscHRyOw0KPiArCW1fc2l6ZSA9IHRhcmdldF9maWxlaW9fcmVhZF9h bGxvYyAobnVsbHB0ciwgbV9maWxlcGF0aC5jX3N0ciAoKSwgJmJ1Zik7DQo+ICsJbV9kYXRhID0g Z2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8VD4gKHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihidWYpKTsN Cj4gKyAgICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGZpbGVfcmVhZGVyX3QgKGZpbGVfcmVhZGVy X3QgJiZvdGhlcikNCj4gKyAgICA6IG1fZmlsZXBhdGggKHN0ZDo6bW92ZSAob3RoZXIubV9maWxl cGF0aCkpDQo+ICsgICAgLCBtX2RhdGEgKHN0ZDo6bW92ZSAob3RoZXIubV9kYXRhKSkNCj4gKyAg ICAsIG1fc2l6ZSAob3RoZXIubV9zaXplKQ0KPiArICB7fQ0KDQpJIGhvcGUgSSBnZXQgdGhlIEMr KyBydWxlcyByaWdodCBoZXJlOg0KQUZBSUssIHNpbmNlIHdlIGhhdmUgdGhlIG1vdmUgY29uc3Ry dWN0b3IsIHdlIGltcGxpY2l0bHkgZGVsZXRlIHRoZSBjb3B5DQpjb25zdHJ1Y3RvciBhbmQgdGhl IGNvcHkgYXNzaWdubWVudCBvcGVyYXRvci4NCg0KV291bGRuJ3QgaXQgYmUgY2xlYXJlciBpZiB3 ZSdkIHdyaXRlIHRoaXMgZXhwbGljaXRseSB1c2luZyBESVNBQkxFX0NPUFlfQU5EX0FTU0lHTiA/ DQoNCkkgYWxzbyB3b25kZXJlZCBpZiB0aGUgZGVmYXVsdCBtb3ZlIGNvbnN0cnVjdG9yIGlzIGRv aW5nIHRoZSBzYW1lIHRoaW5nLCBzbyB3ZSBjb3VsZCB3cml0ZSBzdGguIGxpa2U6DQpmaWxlX3Jl YWRlcl90IChmaWxlX3JlYWRlcl90ICYmb3RoZXIpID0gZGVmYXVsdDsNCg0KaW5zdGVhZC4NCg0K PiArICAvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsZSB3YXMgcmVhZCBzdWNjZXNzZnVsbHkgYnV0 IGNvbnRhaW5lZCBubw0KPiArIGRhdGEuICAqLyAgYm9vbCBlbXB0eSAoKSBjb25zdCBub2V4Y2Vw dCAgeyByZXR1cm4gbV9kYXRhICE9IG51bGxwdHIgJiYNCj4gKyBtX3NpemUgPT0gMDsgfQ0KPiAr DQo+ICsgIC8qIFJldHVybiB0cnVlIGlmIHRoZSBmaWxlIGNvdWxkIG5vdCBiZSByZWFkLiAgKi8g IGJvb2wgZXJyb3IgKCkNCj4gKyBjb25zdCBub2V4Y2VwdCAgeyByZXR1cm4gbV9kYXRhID09IG51 bGxwdHIgfHwgbV9zaXplIDwgMDsgfQ0KPiArICAvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsZSB3 YXMgcmVhZCBzdWNjZXNzZnVsbHkgYW5kIGlzIG5vbi1lbXB0eS4NCj4gKyAqLyAgZXhwbGljaXQg b3BlcmF0b3IgYm9vbCAoKSBjb25zdCBub2V4Y2VwdCAgeyByZXR1cm4gIShlcnJvciAoKSB8fA0K PiArIGVtcHR5ICgpKTsgfQ0KDQpUbyBtZSBpdCB3b3VsZCBmZWVsIG1vcmUgbmF0dXJhbCBpZiB3 ZSByZXR1cm4gdHJ1ZSBhbHNvIGluIGNhc2UgdGhlIGZpbGUgaXMgZW1wdHkuDQpUaGVuIHdlIGNv dWxkIGFsc28gb21pdCB0aGUgZXJyb3IgZnVuY3Rpb24uDQoNCkJ1dCBJIGRvbid0IGhhdmUgYSB2 ZXJ5IHN0cm9uZyBvcGluaW9uIGFib3V0IHRoaXMuDQoNCj4gKw0KPiArICAvKiBSZXR1cm4gYSBw b2ludGVyIHRvIHRoZSBkYXRhLiAgKi8NCj4gKyAgVCAqZGF0YSAoKSBjb25zdCBub2V4Y2VwdA0K PiArICB7IHJldHVybiBtX2RhdGEuZ2V0ICgpOyB9DQo+ICsNCj4gKyAgLyogUmV0dXJuIHRoZSBu dW1iZXIgb2YgYnl0ZXMgcmVhZC4gICovICBMT05HRVNUIHNpemUgKCkgY29uc3QNCj4gKyBub2V4 Y2VwdCAgew0KPiArICAgIC8qIEZvciBjaGFyIGJ1ZmZlcnMsIHNpemUoKSBjb3JyZXNwb25kcyB0 byB0aGUgc2l6ZSBvZiB0aGUgcmVhZCBkYXRhLiBTb21lDQo+ICsgICAgICAgbnVsbC10ZXJtaW5h dG9yIGNoYXJhY3RlcnMgYXJlIHBvc3NpYmx5IHNjYXR0ZXJlZCB0aHJvdWdob3V0IHRoZSBkYXRh Lg0KPiArICAgICAgIENvbnNlcXVlbnRseSwgc3RybGVuKCkgbWlnaHQgbm90IHJlZmxlY3QgdGhl IGFjdHVhbCBzaXplLiAgKi8NCj4gKyAgICByZXR1cm4gbV9zaXplOw0KPiArICB9DQo+ICsNCj4g KyAgLyogUmV0dXJuIGEgc3BhbiBvZiB0aGUgZGF0YS4gICovDQo+ICsgIGdkYjo6YXJyYXlfdmll dzxUPiB2aWV3ICgpIGNvbnN0IG5vZXhjZXB0ICB7IHJldHVybg0KPiArIGdkYjo6YXJyYXlfdmll dzxUPiAobV9kYXRhLmdldCAoKSwgc2l6ZSAoKSk7IH0NCj4gKw0KPiArICAvKiBSZXR1cm4gYSBz cGFuIG9mIHRoZSBkYXRhLCByZWludGVycHJldGVkIGFzIFUgb2JqZWN0cy4gICovDQo+ICsgIHRl bXBsYXRlIDx0eXBlbmFtZSBVPg0KPiArICBnZGI6OmFycmF5X3ZpZXc8VT4gY2FzdF92aWV3ICgp IGNvbnN0IG5vZXhjZXB0DQo+ICsgIHsNCj4gKyAgICByZXR1cm4gZ2RiOjphcnJheV92aWV3PFU+ IChyZWludGVycHJldF9jYXN0PFUgKj4gKG1fZGF0YS5nZXQgKCkpLA0KPiArCQkJICAgICAgIHNp emUgKCkgKiBzaXplb2YgKFQpIC8gc2l6ZW9mIChVKSk7DQo+ICsgIH0NCj4gKw0KPiArICAvKiBS ZXR1cm4gdGhlIHBhdGggb2YgdGhlIGZpbGUgdGhhdCB3YXMgcmVhZC4gICovICBjb25zdCBzdGQ6 OnN0cmluZw0KPiArICZmaWxlcGF0aCAoKSBjb25zdCBub2V4Y2VwdCAgeyByZXR1cm4gbV9maWxl cGF0aDsgfQ0KPiArDQo+ICsgIC8qIFJldHVybiB0aGUgcGF0aCBvZiB0aGUgZmlsZSB0aGF0IHdh cyByZWFkIGFzIGEgQyBzdHJpbmcuICAqLw0KPiArICBjb25zdCBjaGFyICpjX2ZpbGVwYXRoICgp IGNvbnN0IG5vZXhjZXB0DQo+ICsgIHsgcmV0dXJuIG1fZmlsZXBhdGguY19zdHIgKCk7IH0NCj4g K307DQo+ICsNCj4gIC8qIEludmFsaWRhdGUgdGhlIHRhcmdldCBhc3NvY2lhdGVkIHdpdGggb3Bl biBoYW5kbGVzIHRoYXQgd2VyZSBvcGVuDQo+ICAgICBvbiB0YXJnZXQgVEFSRywgc2luY2Ugd2Un cmUgYWJvdXQgdG8gY2xvc2UgKGFuZCBtYXliZSBkZXN0cm95KSB0aGUNCj4gICAgIHRhcmdldC4g IFRoZSBoYW5kbGVzIHJlbWFpbiBvcGVuIGZyb20gdGhlIGNsaWVudCdzIHBlcnNwZWN0aXZlLCBi dXQNCj4gLS0NCj4gMi41NS4wDQoNCkNocmlzdGluYQ0KDQpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fDQpJbnRlbCBEZXV0c2NobGFuZCBHbWJIIA0KDQpSZWdpc3RlcmVk IEFkZHJlc3M6IERvcm5hY2hlciBTdHJhc3NlIDEsIDg1NjIyIEZlbGRraXJjaGVuLCBHZXJtYW55 IA0KDQpUZWw6ICs0OSAoODkpIDk5MTQzLTAgDQoNCnd3dy5pbnRlbC5kZSANCg0KTWFuYWdpbmcg RGlyZWN0b3JzOiBDYW5kaWNlIE1vb3JlLCBKZWZmcmV5IFNjaG5laWRlcm1hbiwgUmFtYWNoYW5k cmFuIFNpdGFyYW1hbg0KDQpDaGFpcnBlcnNvbiBvZiB0aGUgU3VwZXJ2aXNvcnkgQm9hcmQ6IFNv bmphIFBpZXJlcg0KDQpSZWdpc3RlcmVkIFNlYXQ6IE11bmljaCBDb21tZXJjaWFsIFJlZ2lzdGVy IEI6IEFtdHNnZXJpY2h0IE11bmljaCBIUkIgMTg2OTI4DQoNClRoaXMgZS1tYWlsIGFuZCBhbnkg YXR0YWNobWVudHMgbWF5IGNvbnRhaW4gY29uZmlkZW50aWFsIG1hdGVyaWFsIGZvcg0KdGhlIHNv bGUgdXNlIG9mIHRoZSBpbnRlbmRlZCByZWNpcGllbnQocykuIEFueSByZXZpZXcgb3IgZGlzdHJp YnV0aW9uDQpieSBvdGhlcnMgaXMgc3RyaWN0bHkgcHJvaGliaXRlZC4gSWYgeW91IGFyZSBub3Qg dGhlIGludGVuZGVkDQpyZWNpcGllbnQsIHBsZWFzZSBjb250YWN0IHRoZSBzZW5kZXIgYW5kIGRl bGV0ZSBhbGwgY29waWVzLgo=