From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id bbatFzqZGWpHBicAWB0awg (envelope-from ) for ; Fri, 29 May 2026 09:48:42 -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=LXY0+FIR; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 474AF1E062; Fri, 29 May 2026 09:48:42 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-3.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,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.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 A8E6A1E062 for ; Fri, 29 May 2026 09:48:38 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3814A4BA2E3F for ; Fri, 29 May 2026 13:48:38 +0000 (GMT) Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.14]) by sourceware.org (Postfix) with ESMTPS id C4A6A4BA23D3 for ; Fri, 29 May 2026 13:48:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C4A6A4BA23D3 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 C4A6A4BA23D3 Authentication-Results: sourceware.org; arc=fail smtp.remote-ip=198.175.65.14 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1780062500; cv=fail; b=nNXzdWrc/NwxKR8mYdLgS7JGWLhCHO9ECCD4y/KVlYt2whXyoaVUNF9QkLX9cDto0l/SZR1ZhBpL0trHX/SrdpJ2R+aRYzqoP07cDGokgTZn7KxqJqcwg2IZPb1f6hxm+N8DmQjCmfkwRPUePzWU5ZHptT7pTYMd5BZ9RGsJJ8w= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1780062500; c=relaxed/simple; bh=TxdD1pNbiKovMo2rcJH2yYIH48kF9Q+8a8JIQqOkE7Q=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=hc39HxBDii19KQ1++3oEilE4fd0ePEN4p4N04iX+L87NjqBgsyRMF9jdGYh1auC6BL41A1O2Tgm75Rt2nhzxp6wZM9N3O0NPOGLiDGZqY0r3aSXcTFf5QYqVd/ThcfA4XskwALbzBQteqXWGXwgKUaY2q8IiYcVuxIHSEQ1NRJ0= ARC-Authentication-Results: i=2; sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1780062500; x=1811598500; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version:content-transfer-encoding; bh=TxdD1pNbiKovMo2rcJH2yYIH48kF9Q+8a8JIQqOkE7Q=; b=LXY0+FIRvNfvLk5oN0Nz7cVmj6jhYirRLpCN2GyHvX3Y0I48bNesOWFG m7BmrOGbw6hYl5QYufVqoqiyuFlNwykc3OA0HngxiO5HOUhsVlBMVNcr9 sg3RbgKzEqluMtFRaUUGpgN7KADeO+u0U3IpeT74mzFdDJD5RSTx16rv2 m+cFohrjNQA3+gqf0ZC4SQ1N29U1nSYboSn/21jK5RudXxEUygqIxvaSM CfA5rCiBd9Gz3dNPJX7kgV8VD/UYNDqaEKGyxWTJWJSL06engkS7cGKOh Rwmxa6WaDDizuVaYqTPmGmGbNvMPu7FKUleZPY/jxy92G95+fmpmT8pA0 Q==; X-CSE-ConnectionGUID: kAVWEb59RK2bE972rMsDAQ== X-CSE-MsgGUID: RWIPmCTpTjyPhhEVqeCfag== X-IronPort-AV: E=McAfee;i="6800,10657,11801"; a="84800594" X-IronPort-AV: E=Sophos;i="6.24,175,1774335600"; d="scan'208";a="84800594" Received: from fmviesa005.fm.intel.com ([10.60.135.145]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 May 2026 06:48:07 -0700 X-CSE-ConnectionGUID: aOJmC+PMRJKIGZhcHzLvGw== X-CSE-MsgGUID: 1ZNtpg4FTUm1Cd/D8DBIeg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.24,175,1774335600"; d="scan'208";a="247951049" Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24]) by fmviesa005.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 May 2026 06:48:06 -0700 Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Fri, 29 May 2026 06:48:05 -0700 Received: from ORSEDG901.ED.cps.intel.com (10.7.248.11) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37 via Frontend Transport; Fri, 29 May 2026 06:48:05 -0700 Received: from BN1PR04CU002.outbound.protection.outlook.com (52.101.56.5) by edgegateway.intel.com (134.134.137.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Fri, 29 May 2026 06:48:01 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=abLxsiLYkhfBPjekQS/tkQQ7L9gIHZoNR7mnNgerKX9+LrDI2S/3V6j0LHgotgTMZsBlRNg+8D6NtUZE4DOaOElXXILpr04zvdvNu9TVQtV6CEecviGvj+3JMcY0QEbnZ1ItkCOPapjSCwDGafd8HanKXuMH+FEu7u+ZVmo3x+g5vj+VqmGkYrpLLHrsiq7yXaqTLR8tSYV4Jki3me/op/0HWcVj5+zd+mYtdWpI6lOyUvHf3A+lqwQsZ8Oz/xDIMvpBN0lKn4eSPENAQHdFW/hGyM2s2Trd6HBGbKGLsLOBP6ZaD2QuuNf+uj63rznWPAAa1sWh+GptaQwvQGViRg== 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=QrRFBAA8bZm1tHDfJ0cqaHS/MTy40yP/W880EMbnp+o=; b=a9lifawJxlSU0FOukYWfAg/uHgmc6tLT60J+wrkUjYpHc56AprkSLZ16efb0D1fyqVRF1NWsPxOZM9utGqKBraRp1EZKVRT4Z2ZnROcFtlIEZmTsf5L9hDmPCmR/a5HdQu1rJh9XH8lZAGecAvcuC/8bw5C3MbyEKBzhZKIqMu+y3xkvhmJ3YklMZNN9QL6jE7TnsqQUmYiNQN0ODTthGAfnxKXb8/rTJTC3J43cAHNKf3eJ+Wk8g6yJDYkHGlu+k7iH4C0GP4x1aM2NphgUzVTfB561YVGUCxxT/nUyG/piNap3iAbe1HXB179bnBr3sVEbWu2i0XSosSFtLazwIQ== 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 PH0PR11MB5144.namprd11.prod.outlook.com (2603:10b6:510:3e::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.15; Fri, 29 May 2026 13:47:57 +0000 Received: from SN7PR11MB7638.namprd11.prod.outlook.com ([fe80::7a35:98d:f02c:b011]) by SN7PR11MB7638.namprd11.prod.outlook.com ([fe80::7a35:98d:f02c:b011%3]) with mapi id 15.21.0071.011; Fri, 29 May 2026 13:47:57 +0000 From: "Schimpe, Christina" To: Guinevere Larsen , "gdb-patches@sourceware.org" CC: Thiago Jung Bauermann Subject: RE: [PATCH v3 1/7] gdb/record: Refactor record history Thread-Topic: [PATCH v3 1/7] gdb/record: Refactor record history Thread-Index: AQHc5InzvkuFtAk9DkiViAE6g0SStrYWov2ggAzdbQCAAYmnUA== Date: Fri, 29 May 2026 13:47:57 +0000 Message-ID: References: <20260515163706.3355686-1-guinevere@redhat.com> <20260515163706.3355686-2-guinevere@redhat.com> In-Reply-To: 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_|PH0PR11MB5144:EE_ x-ms-office365-filtering-correlation-id: 2e26b2a7-4b7c-4eca-415c-08debd88e468 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|376014|1800799024|18002099003|22082099003|38070700021|11063799006|4143699003|6133799003|5023799004|3023799007|56012099006; x-microsoft-antispam-message-info: h1odwNVpqGbyzXZXhj7sJFuxCDswN2lNmhfH47zoshj2tkd6zAjnenw0pKvKWWYnpYCsQ5kB1IM0Ta2ldvaw0PzPutgn/NANTMiOjwgO6KtPlgo8x/RioExvkm3RGIkM8Da9ebQlOlWo2S1qV3tdaRxeICSabBe8wGfot/jn2q7j+wAxBWYJfwJAnv6X+PkSPRxPiAXk3fEfSOSBwplIo+LAmSV5ciOUArCw0UW5IovtIcSg7pE/RarJtR2vaMUrRSbJNRpwzCp9YHyBGrqDOdtePZ6GOaMaSK2kMZ00brdQse290WfEZ39d1aB/h04TK3V3Tw56eEWBduhqjwyskI96w7cKd7klfm/lawSGGUg2mh+r9bVheSo0gs9IhG5tV1sXRW5CC+GTVtBEtFTI1aVMAjSEr+0VI6hNF0dsYShXiIB6WUuQWineizssMfA9ZMw2Qbwgezc/EUHveQMJBPO0zwLk3NxmypkCKxe9/gjxDWZYIVcgV4qGyzN+HtUJo5QBpDIcOwrnIKwolNnqeOMHx0C2CyO8jcN64TZVn9uw3Nfpo+i+4aD2X7JXhqJLvvgc/tGsN1AmmHhC4D7AonNylXYszFtsyt3kYtY9Nc2tmU2GBwjXfGWfpvWLEXOuIJLY4bvkOdUY6/2mH4RQBCu25Nc0jXNNgtTRFVBKQJSRKOYeSZky9E0bHxYS3YDhPaUurU7ZeyEFbV8uKfCyH28gXl6IC9ajYIk0WeaMJXJCPaBE6hDxsCboFo2AM8S/ 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)(366016)(376014)(1800799024)(18002099003)(22082099003)(38070700021)(11063799006)(4143699003)(6133799003)(5023799004)(3023799007)(56012099006); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?NVBRZWx5OHZlTVFVUnJIaThZdTZtR0VZOGVscjFxOURnWkp1THBveWljRHVD?= =?utf-8?B?QzJUa1d1RlBaYStHTU5wRWhCL3VsbDFLNldMenpZbys0b29oYnprcnFMU3Ex?= =?utf-8?B?Ump0bVlWUkNmM3ZUandleDJJTWxuQkdDK29YV3NJOEpJb2FKQk0yNWhpVlVQ?= =?utf-8?B?KzdZaXBaTVkzMFZrNUQzYVNlOTFVd0kzNUdtZHdDa0dLV1RqUitBVWY1Q1Rx?= =?utf-8?B?U1czOTBHRk1Ya2pWcWY2QldoejlFUnJJNmwrVHZjUEJNOUx6Q2NJaHZYWDNM?= =?utf-8?B?NWpXOVcySHRpanV3dU5GditwL3hPQllPQ0F6ZWUzTG5iNlIwRHdETlBMVGha?= =?utf-8?B?cjdpNkJMUCt0NEp3OVg1OTBFYzdiWVNScUxRQ1I4cHg0Zy82T3BEWitTR0o3?= =?utf-8?B?bHJ1ZUYzUnV4TjZsTjlTR3NNWG1meGdkeStDN1lZWnBEU01LZFpoMmI4anhM?= =?utf-8?B?ekJUMlEvRGpieWZHNUtHSiszZjhsbEVvNUtkd1BoREg3aEhDajJ1blI4cjNN?= =?utf-8?B?eFF3clZ1Vkdnd0JDRmVvUTFhcmJ4dFpCTmgydlcrTXF4TDFlc0E5WGh3Q0pD?= =?utf-8?B?clNGZXhCVkpIOWxOM0FPWitqQWFVRkVOVFhuWUxlRmhwOVdJL0t4dEJYV2FQ?= =?utf-8?B?WVNLUFF5d29XMzBKSFJDaU1KRzVNWk9CUE5aQzVINkNZazFKZmNYNVkvd25x?= =?utf-8?B?SDh1Yjg3a0U2anJkUWR5QmxVWEVlZ1F0c09nYldzd2lNM0NIU2tRYjBOb0t5?= =?utf-8?B?NlBtdUhaMHlaTXdFaHA3R3F4Rkg4U09DcVozc0RieWtxb2dmSW9KaUxzMmFz?= =?utf-8?B?bVdEMU9SWGxLbmsvZzBYQi9GUHJyYUtOei9LWThBd0Z2MDdqbzErd0lpVG8v?= =?utf-8?B?ZDhLL0E3OGxUR3B5NzlOYTdvOWRiV3E2clI3Ly9RSS92VkpUVVNWOXlmVmI4?= =?utf-8?B?eGpWZGVhQ0w2WlBSRXNIVTdhWjdhTWgyOWRSSUxIZGNTUFlud05DaHZ2ZUFw?= =?utf-8?B?cjJHUTIrTG43dXdGVUZXa1VXZnh6YTZQOHFMc3ROLzlsdlVSaFNXQ205ZWFL?= =?utf-8?B?MVFqbTgzdlZyUC9XZDh2WnROL2NFaC9aUjJvTWEwN0w5WkM1Zm5WS0N4S2NZ?= =?utf-8?B?TS8xRkZ6Mlhja0pYeWVVVEQ3SXlIUGYvZ09QNy9LMmpPbVRaa2QvVU9VdXRH?= =?utf-8?B?TzA5VnBwN255U1N0VlZBeEZzcGs5R2pzUllLUnpHMzhtbzRrREpGbmJ6UDlv?= =?utf-8?B?ZTRldGNuR1BiamxlL1pxYlJnbFJxTnpQdVJaMDhJS0doUmtsMXA2c3ppODZV?= =?utf-8?B?STZXRFkxVmlQbHFYY1NSc0xRcnNkTGtUWkI3Q21XTWZ2d0kyOFAzMG9IQVRR?= =?utf-8?B?SjhhcFBhV09BRUZ3dldPeGRpSEd6d3k0aE9DK2FHUWx1aDhvd29XdndaYmVr?= =?utf-8?B?TzV3Uk1UTWJZWlhPdDZ3OUI4MnY4QmoydlJNWHBrV3pyWk1YWXpYK0JDYVBn?= =?utf-8?B?eERsRGJUWU1Oa3RMc0hUTGRmNFZIdHFEVnhzaE5FdmRUY1A2NHdZQ3dNK0lG?= =?utf-8?B?b2VKUU1GYjBaNHNqMXpQb3NISi9TdzF4bTg3SW52UEhIN1hXZ2ZDSXVmaU9q?= =?utf-8?B?b1k0QTBYQkFoazVSOGVYbitkcHowVVlTNW0wMVcxaU1weUhxeGo1S2hyd1Vu?= =?utf-8?B?bWlYQmVuTnQweUZ5OEJyVXJ6RFBpUmlJNFFxakV0UDJUeHl6Wm50aThtQlpE?= =?utf-8?B?eVEzRGo2SWVxMnIvbGtkempWbnR5clZCVXBiL0RhcTAxV3ZmZWdZUHp6TlRm?= =?utf-8?B?dzJpOEZUak83L0NSZERqdXJUdFBrdEd0dWNBU2NDZER6VDd1NHJkSDR3dFoy?= =?utf-8?B?YXNzNnM1aDI1S1BLOUt1TVVCSVhIRzFaM1lSLytaQVR1VE5FTXdHVE5tOGF1?= =?utf-8?B?cmFhWGFvaEZ4Wk9yRmF5Wmt1VThhUHFTb2RYY2o2Q0Uwdm9aWXJwYkVLQ2ZX?= =?utf-8?B?cUs0Q3RGTTZDSVBOMGdVK25WTTJFMDY3bzZySFBmMi9YcGNLaE5DY01iNEpj?= =?utf-8?B?UnZsb1plc1RaMWQvdmMyVm5sR1UwcnA1TEFwWFMzNU51azhIditpaCtvdFYr?= =?utf-8?B?QW1lY2VuKzlGYU8rNmI3Tkx1d2JHb1dRUEZ5cWxyREc2d3d5K2htb0tMZjhk?= =?utf-8?B?WGIrR2FkMm5heVRsMGpJUVE1dk1XVThwRks2WGU5TlkzR3pRVFk5NEpUeWNV?= =?utf-8?B?UDRsRW1IbkFLWjB0bTFjUjVtUjdWdnV5U2swMkljTlV1RndFK1htMFlFZkJP?= =?utf-8?B?cHIxRGxnZEdIZGx5RlE0aU9YVHcyek53TG9za1NBTk5pTGt1ZzhHUT09?= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: DVnZRa0eLk0hm91lmtBWI9l7dE7VStx6whkjvB+v6HjFXW4WJ+GdHAx665d3Y7pMsaxoL3s+GQZ0fjOwMoZ1YwVMPMI3jkarsVSyATJvXSPhr3h5UhhQpKSbvMRmHBd17An3Sb8XdfArf33B7eisM/0J+0zZBHs+hCX0HgsXpPp7ASm9efTkiT3+Ku4kfvdlGyUvSDcxxRTCLDAHsto9tEBlE9MeCRaHbsBNxcai22s80uRUiCBQySw19G3unbgKiozh+1PWgZC+jJWkw35bQXSEVFFYu+AkcoZKQqBuwEqREIEabinyZ7F2Bj/PYbu07jeN0iLs/K+fW2sckVVbuw== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN7PR11MB7638.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2e26b2a7-4b7c-4eca-415c-08debd88e468 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 May 2026 13:47:57.7962 (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: eY/nIlTcYEjH0TzpR+POHxDxnJXcmOhdu4VLzdCRA9x0jI1BhbLBqXCy2s/xj9ocCyzykXZUDyy19MzYkzip9u9VXX3/c9wT13WyX/vypRY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB5144 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 PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBHdWluZXZlcmUgTGFyc2VuIDxn dWluZXZlcmVAcmVkaGF0LmNvbT4NCj4gU2VudDogRG9ubmVyc3RhZywgMjguIE1haSAyMDI2IDE1 OjIwDQo+IFRvOiBTY2hpbXBlLCBDaHJpc3RpbmEgPGNocmlzdGluYS5zY2hpbXBlQGludGVsLmNv bT47IGdkYi0NCj4gcGF0Y2hlc0Bzb3VyY2V3YXJlLm9yZw0KPiBDYzogVGhpYWdvIEp1bmcgQmF1 ZXJtYW5uIDx0aGlhZ28uYmF1ZXJtYW5uQGxpbmFyby5vcmc+DQo+IFN1YmplY3Q6IFJlOiBbUEFU Q0ggdjMgMS83XSBnZGIvcmVjb3JkOiBSZWZhY3RvciByZWNvcmQgaGlzdG9yeQ0KPiANCj4gT24g NS8yNi8yNiA1OjMzIEFNLCBTY2hpbXBlLCBDaHJpc3RpbmEgd3JvdGU6DQo+ID4gSGkgR3VpbmV2 ZXJlLA0KPiA+DQo+ID4gUGxlYXNlIGZpbmQgc29tZSBmdXJ0aGVyIGNvbW1lbnRzIGJlbG93Lg0K PiA+DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+IEZyb206IEd1aW5ldmVy ZSBMYXJzZW4gPGd1aW5ldmVyZUByZWRoYXQuY29tPg0KPiA+PiBTZW50OiBGcmVpdGFnLCAxNS4g TWFpIDIwMjYgMTg6MzcNCj4gPj4gVG86IGdkYi1wYXRjaGVzQHNvdXJjZXdhcmUub3JnDQo+ID4+ IENjOiBHdWluZXZlcmUgTGFyc2VuIDxndWluZXZlcmVAcmVkaGF0LmNvbT47IFRoaWFnbyBKdW5n IEJhdWVybWFubg0KPiA+PiA8dGhpYWdvLmJhdWVybWFubkBsaW5hcm8ub3JnPg0KPiA+PiBTdWJq ZWN0OiBbUEFUQ0ggdjMgMS83XSBnZGIvcmVjb3JkOiBSZWZhY3RvciByZWNvcmQgaGlzdG9yeQ0K PiA+Pg0KPiA+PiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIGEgbGFyZ2UgcmVmYWN0b3IgaW4g aG93IEdEQiBrZWVwcyBleGVjdXRpb24NCj4gPj4gaGlzdG9yeS4gIFJhdGhlciB0aGFuIHVzaW5n IGEgbGlua2VkIGxpc3Qgd2hlcmUgbXVsdGlwbGUgZW50cmllcyBjYW4NCj4gPj4gZGVzY3JpYmUg YSBzaW5nbGUgaW5zdHJ1Y3Rpb24sIHRoZSBoaXN0b3J5IHdpbGwgbm93IGJlIHN0b3JlZCBpbiBh bg0KPiA+PiBzdGQ6OmRlcXVlLCBlYWNoIGluc3RydWN0aW9uIGJlaW5nIG9uZSBlbnRyeSBpbiB0 aGUgZGVxdWUuDQo+ID4+DQo+ID4+IFRoZSBjaG9pY2Ugd2FzIGluaXRpYWxseSB0byB1c2UgYW4g c3RkOjp2ZWN0b3IsIGJ1dCBpdCB3b3VsZCBiZWNvbWUNCj4gPj4gdW53aWVsZHkgYmVjYXVzZSBp dCBuZWVkcyBhbGwgdGhlIG1lbW9yeSB0byBiZSBjb25zZWN1dGl2ZSwgd2hpY2ggaXMNCj4gPj4g aGFyZCBmb3IgMjAwIHRob3VzYW5kIGVudHJpZXMuIERlcXVlIHdhcyBwaWNrZWQgYmVjYXVzZSBp dCB3YXMgYSBuaWNlDQo+ID4+IG1pZHBvaW50IGJldHdlZW4gdmVjdG9yIChtYXhpbXVtIGNhY2hl IGNvaGVzaW9uKSBhbmQgbGlua2VkIGxpc3QNCj4gPj4gKG1heGltdW0gZWFzZSBvZiBmaW5kaW5n IHNwYWNlIHRvIHN0b3JlIG1vcmUpLg0KPiA+Pg0KPiA+PiBFYWNoIGluc3RydWN0aW9uIGluIG1l bW9yeSB3aWxsIGJlIG5vdyBvbmUgcmVjb3JkX2Z1bGxfaW5zdHJ1Y3Rpb24NCj4gPj4gZW50cnks IHdoaWNoIGZvciB0aGlzIGNvbW1pdCBqdXN0IGNvbnRhaW5zIGEgdmVjdG9yIG9mDQo+ID4+IHJl Y29yZF9mdWxsX2VudHJ5IGZvciB0aGUgZWZmZWN0cyBvZiB0aGUgaW5zdHJ1Y3Rpb24sIGFuZCB0 aGUgZGF0YSB0aGF0DQo+ID4+IHdhcyBzdG9yZWQgaW4gdGhlIHJlY29yZF9mdWxsX2VuZCBlbnRy eSAodGhhdCBpcywgdGhlIGluc3RydWN0aW9uIG51bWJlcg0KPiA+PiBhbmQgdGhlIHNpZ25hbCwg aWYgYW55KS4NCj4gPj4NCj4gPj4gVGhpcyBjaGFuZ2UgaW50cm9kdWNlZCBhIG1pbmltYWwgcGVy Zm9ybWFuY2UgaW1wcm92ZW1lbnQgKHdoYXQncw0KPiA+PiBpbXBvcnRhbnQgaXMgdGhhdCBpdCBp c24ndCBhIGRlZ3JhZGF0aW9uKSBhbmQgYSAgcmVkdWN0aW9uIGluIHRoZSB0b3RhbA0KPiA+PiBt ZW1vcnkgZm9vdHByaW50IG9mIHJvdWdobHkgMjAlIGlmIHRoZSBlbnRpcmUgaGlzdG9yeSBpcyB1 c2VkLg0KPiA+Pg0KPiA+PiBSZXZpZXdlZC1ieTogVGhpYWdvIEp1bmcgQmF1ZXJtYW5uIDx0aGlh Z28uYmF1ZXJtYW5uQGxpbmFyby5vcmc+DQo+ID4+IC0tLQ0KPiA+PiAgIGdkYi9hYXJjaDY0LXRk ZXAuYyAgICAgfCAgICAyIC0NCj4gPj4gICBnZGIvYW1kNjQtbGludXgtdGRlcC5jIHwgICAgMyAt DQo+ID4+ICAgZ2RiL2FybS10ZGVwLmMgICAgICAgICB8ICAgIDIgLQ0KPiA+PiAgIGdkYi9pMzg2 LWxpbnV4LXRkZXAuYyAgfCAgICAzIC0NCj4gPj4gICBnZGIvaTM4Ni10ZGVwLmMgICAgICAgIHwg ICAgNCAtDQo+ID4+ICAgZ2RiL2xvb25nYXJjaC10ZGVwLmMgICB8ICAgIDIgLQ0KPiA+PiAgIGdk Yi9tb3hpZS10ZGVwLmMgICAgICAgfCAgICAyIC0NCj4gPj4gICBnZGIvcHBjLWxpbnV4LXRkZXAu YyAgIHwgICAgMyAtDQo+ID4+ICAgZ2RiL3JlY29yZC1mdWxsLmMgICAgICB8IDExODYgKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+PiAgIGdkYi9yZWNvcmQtZnVs bC5oICAgICAgfCAgICAxIC0NCj4gPj4gICBnZGIvcmlzY3YtdGRlcC5jICAgICAgIHwgICAgMyAt DQo+ID4+ICAgZ2RiL3JzNjAwMC10ZGVwLmMgICAgICB8ICAgIDQgLQ0KPiA+PiAgIGdkYi9zMzkw LWxpbnV4LXRkZXAuYyAgfCAgICAzIC0NCj4gPj4gICBnZGIvczM5MC10ZGVwLmMgICAgICAgIHwg ICAgMiAtDQo+ID4+ICAgMTQgZmlsZXMgY2hhbmdlZCwgNDg0IGluc2VydGlvbnMoKyksIDczNiBk ZWxldGlvbnMoLSkNCj4gPj4NCj4gPj4gZGlmZiAtLWdpdCBhL2dkYi9hYXJjaDY0LXRkZXAuYyBi L2dkYi9hYXJjaDY0LXRkZXAuYw0KPiA+PiBpbmRleCA0YmVmYWEyNzIwZC4uYTUzMjk5MmIxZDgg MTAwNjQ0DQo+ID4+IC0tLSBhL2dkYi9hYXJjaDY0LXRkZXAuYw0KPiA+PiArKysgYi9nZGIvYWFy Y2g2NC10ZGVwLmMNCj4gPj4gQEAgLTYyMTAsOCArNjIxMCw2IEBAIGFhcmNoNjRfcHJvY2Vzc19y ZWNvcmQgKHN0cnVjdCBnZGJhcmNoDQo+ID4+ICpnZGJhcmNoLCBzdHJ1Y3QgcmVnY2FjaGUgKnJl Z2NhY2hlLA0KPiA+PiAgIAkgICAgICAgYWFyY2g2NF9yZWNvcmQuYWFyY2g2NF9tZW1zW3JlY19u b10ubGVuKSkNCj4gPj4gICAJICAgIHJldCA9IC0xOw0KPiA+Pg0KPiA+PiAtICAgICAgaWYgKHJl Y29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfZW5kICgpKQ0KPiA+PiAtCXJldCA9IC0xOw0KPiA+PiAg ICAgICB9DQo+ID4+DQo+ID4+ICAgICBkZWFsbG9jYXRlX3JlZ19tZW0gKCZhYXJjaDY0X3JlY29y ZCk7DQo+ID4+IGRpZmYgLS1naXQgYS9nZGIvYW1kNjQtbGludXgtdGRlcC5jIGIvZ2RiL2FtZDY0 LWxpbnV4LXRkZXAuYw0KPiA+PiBpbmRleCBhNWFjMjY2NTRjZi4uOWIyM2RiNzJiYmUgMTAwNjQ0 DQo+ID4+IC0tLSBhL2dkYi9hbWQ2NC1saW51eC10ZGVwLmMNCj4gPj4gKysrIGIvZ2RiL2FtZDY0 LWxpbnV4LXRkZXAuYw0KPiA+PiBAQCAtMTU5MSw5ICsxNTkxLDYgQEAgYW1kNjRfbGludXhfcmVj b3JkX3NpZ25hbCAoc3RydWN0IGdkYmFyY2gNCj4gPj4gKmdkYmFyY2gsDQo+ID4+ICAgCQkJCSAg ICAgKyBBTUQ2NF9MSU5VWF9mcmFtZV9zaXplKSkNCj4gPj4gICAgICAgcmV0dXJuIC0xOw0KPiA+ Pg0KPiA+PiAtICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+ID4+IC0g ICAgcmV0dXJuIC0xOw0KPiA+PiAtDQo+ID4+ICAgICByZXR1cm4gMDsNCj4gPj4gICB9DQo+ID4+ DQo+ID4+IGRpZmYgLS1naXQgYS9nZGIvYXJtLXRkZXAuYyBiL2dkYi9hcm0tdGRlcC5jDQo+ID4+ IGluZGV4IDA4Y2NlOWRiYWQ4Li4xY2UwOTI3ZjI2YiAxMDA2NDQNCj4gPj4gLS0tIGEvZ2RiL2Fy bS10ZGVwLmMNCj4gPj4gKysrIGIvZ2RiL2FybS10ZGVwLmMNCj4gPj4gQEAgLTE0OTExLDggKzE0 OTExLDYgQEAgYXJtX3Byb2Nlc3NfcmVjb3JkIChzdHJ1Y3QgZ2RiYXJjaA0KPiAqZ2RiYXJjaCwN Cj4gPj4gc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCj4gPj4gICAJICAgIH0NCj4gPj4gICAJ fQ0KPiA+Pg0KPiA+PiAtICAgICAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfZW5kICgp KQ0KPiA+PiAtCXJldCA9IC0xOw0KPiA+PiAgICAgICB9DQo+ID4+DQo+ID4+DQo+ID4+IGRpZmYg LS1naXQgYS9nZGIvaTM4Ni1saW51eC10ZGVwLmMgYi9nZGIvaTM4Ni1saW51eC10ZGVwLmMNCj4g Pj4gaW5kZXggMjNhZWNjYWM5ZmMuLjRmMzM3NjZmY2RkIDEwMDY0NA0KPiA+PiAtLS0gYS9nZGIv aTM4Ni1saW51eC10ZGVwLmMNCj4gPj4gKysrIGIvZ2RiL2kzODYtbGludXgtdGRlcC5jDQo+ID4+ IEBAIC05NDksOSArOTQ5LDYgQEAgaTM4Nl9saW51eF9yZWNvcmRfc2lnbmFsIChzdHJ1Y3QgZ2Ri YXJjaA0KPiAqZ2RiYXJjaCwNCj4gPj4gICAJCQkJICAgICBJMzg2X0xJTlVYX3hzdGF0ZSArDQo+ ID4+IEkzODZfTElOVVhfZnJhbWVfc2l6ZSkpDQo+ID4+ICAgICAgIHJldHVybiAtMTsNCj4gPj4N Cj4gPj4gLSAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfZW5kICgpKQ0KPiA+PiAtICAg IHJldHVybiAtMTsNCj4gPj4gLQ0KPiA+PiAgICAgcmV0dXJuIDA7DQo+ID4+ICAgfQ0KPiA+Pg0K PiA+PiBkaWZmIC0tZ2l0IGEvZ2RiL2kzODYtdGRlcC5jIGIvZ2RiL2kzODYtdGRlcC5jDQo+ID4+ IGluZGV4IGZhOTM1YjVmY2RiLi5mZWUzNmI0NmE3MyAxMDA2NDQNCj4gPj4gLS0tIGEvZ2RiL2kz ODYtdGRlcC5jDQo+ID4+ICsrKyBiL2dkYi9pMzg2LXRkZXAuYw0KPiA+PiBAQCAtNTIwMSw4ICs1 MjAxLDYgQEAgaTM4Nl9yZWNvcmRfdmV4IChzdHJ1Y3QgaTM4Nl9yZWNvcmRfcyAqaXIsDQo+IHVp bnQ4X3QNCj4gPj4gdmV4X3csIHVpbnQ4X3QgdmV4X3IsDQo+ID4+ICAgICAgIH0NCj4gPj4NCj4g Pj4gICAgIHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfcmVnIChpci0+cmVnY2FjaGUsIGlyLQ0K PiA+Pj4gcmVnbWFwW1g4Nl9SRUNPUkRfUkVJUF9SRUdOVU1dKTsNCj4gPj4gLSAgaWYgKHJlY29y ZF9mdWxsX2FyY2hfbGlzdF9hZGRfZW5kICgpKQ0KPiA+PiAtICAgIHJldHVybiAtMTsNCj4gPj4N Cj4gPj4gICAgIHJldHVybiAwOw0KPiA+PiAgIH0NCj4gPj4gQEAgLTgzNTksOCArODM1Nyw2IEBA IERvIHlvdSB3YW50IHRvIHN0b3AgdGhlIHByb2dyYW0/IiksDQo+ID4+DQo+ID4+ICAgICAvKiBJ biB0aGUgZnV0dXJlLCBtYXliZSBzdGlsbCBuZWVkIHRvIGRlYWwgd2l0aCBuZWVkX2Rhc20uICAq Lw0KPiA+PiAgICAgSTM4Nl9SRUNPUkRfRlVMTF9BUkNIX0xJU1RfQUREX1JFRw0KPiAoWDg2X1JF Q09SRF9SRUlQX1JFR05VTSk7DQo+ID4+IC0gIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRk X2VuZCAoKSkNCj4gPj4gLSAgICByZXR1cm4gLTE7DQo+ID4+DQo+ID4+ICAgICByZXR1cm4gMDsN Cj4gPj4NCj4gPj4gZGlmZiAtLWdpdCBhL2dkYi9sb29uZ2FyY2gtdGRlcC5jIGIvZ2RiL2xvb25n YXJjaC10ZGVwLmMNCj4gPj4gaW5kZXggMjI1YjFhYmI3MDMuLjVlYzZiMmE0OGQwIDEwMDY0NA0K PiA+PiAtLS0gYS9nZGIvbG9vbmdhcmNoLXRkZXAuYw0KPiA+PiArKysgYi9nZGIvbG9vbmdhcmNo LXRkZXAuYw0KPiA+PiBAQCAtMjc4OSw4ICsyNzg5LDYgQEAgbG9vbmdhcmNoX3Byb2Nlc3NfcmVj b3JkIChzdHJ1Y3QgZ2RiYXJjaA0KPiA+PiAqZ2RiYXJjaCwgc3RydWN0IHJlZ2NhY2hlICpyZWdj YWNoZSwNCj4gPj4gICAJCQkJCSBMT09OR0FSQ0hfUENfUkVHTlVNKSkNCj4gPj4gICAJcmV0dXJu IC0xOw0KPiA+Pg0KPiA+PiAtICAgICAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfZW5k ICgpKQ0KPiA+PiAtCXJldHVybiAtMTsNCj4gPj4gICAgICAgfQ0KPiA+Pg0KPiA+PiAgICAgcmV0 dXJuIHJldDsNCj4gPj4gZGlmZiAtLWdpdCBhL2dkYi9tb3hpZS10ZGVwLmMgYi9nZGIvbW94aWUt dGRlcC5jDQo+ID4+IGluZGV4IGM4YTA0ZDIxZjU5Li4yZjhmMDE4NjQ4OCAxMDA2NDQNCj4gPj4g LS0tIGEvZ2RiL21veGllLXRkZXAuYw0KPiA+PiArKysgYi9nZGIvbW94aWUtdGRlcC5jDQo+ID4+ IEBAIC0xMDQwLDggKzEwNDAsNiBAQCBtb3hpZV9wcm9jZXNzX3JlY29yZCAoc3RydWN0IGdkYmFy Y2gNCj4gKmdkYmFyY2gsDQo+ID4+IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsDQo+ID4+DQo+ ID4+ICAgICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9yZWcgKHJlZ2NhY2hlLCBNT1hJ RV9QQ19SRUdOVU0pKQ0KPiA+PiAgICAgICByZXR1cm4gLTE7DQo+ID4+IC0gIGlmIChyZWNvcmRf ZnVsbF9hcmNoX2xpc3RfYWRkX2VuZCAoKSkNCj4gPj4gLSAgICByZXR1cm4gLTE7DQo+ID4+ICAg ICByZXR1cm4gMDsNCj4gPj4gICB9DQo+ID4+DQo+ID4+IGRpZmYgLS1naXQgYS9nZGIvcHBjLWxp bnV4LXRkZXAuYyBiL2dkYi9wcGMtbGludXgtdGRlcC5jDQo+ID4+IGluZGV4IDE5Njk4ZWFhY2Jl Li5lMmY1MzU1MTcwOSAxMDA2NDQNCj4gPj4gLS0tIGEvZ2RiL3BwYy1saW51eC10ZGVwLmMNCj4g Pj4gKysrIGIvZ2RiL3BwYy1saW51eC10ZGVwLmMNCj4gPj4gQEAgLTE1NjUsOSArMTU2NSw2IEBA IHBwY19saW51eF9yZWNvcmRfc2lnbmFsIChzdHJ1Y3QgZ2RiYXJjaA0KPiAqZ2RiYXJjaCwNCj4g Pj4gc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCj4gPj4gICAgIGlmIChyZWNvcmRfZnVsbF9h cmNoX2xpc3RfYWRkX21lbSAoc3AsIFNJR05BTF9GUkFNRVNJWkUgKw0KPiA+PiBzaXplb2ZfcnRf c2lnZnJhbWUpKQ0KPiA+PiAgICAgICByZXR1cm4gLTE7DQo+ID4+DQo+ID4+IC0gIGlmIChyZWNv cmRfZnVsbF9hcmNoX2xpc3RfYWRkX2VuZCAoKSkNCj4gPj4gLSAgICByZXR1cm4gLTE7DQo+ID4+ IC0NCj4gPj4gICAgIHJldHVybiAwOw0KPiA+PiAgIH0NCj4gPj4NCj4gPj4gZGlmZiAtLWdpdCBh L2dkYi9yZWNvcmQtZnVsbC5jIGIvZ2RiL3JlY29yZC1mdWxsLmMNCj4gPj4gaW5kZXggNjlkMmMx MDBlNTcuLjAyYTU3NzI2YTk1IDEwMDY0NA0KPiA+PiAtLS0gYS9nZGIvcmVjb3JkLWZ1bGwuYw0K PiA+PiArKysgYi9nZGIvcmVjb3JkLWZ1bGwuYw0KPiA+PiBAQCAtNDcsNiArNDcsOSBAQA0KPiA+ PiAgICNpbmNsdWRlICJpbnRlcnBzLmgiDQo+ID4+ICAgI2luY2x1ZGUgImNsaS9jbGktc3R5bGUu aCINCj4gPj4NCj4gPj4gKyNpbmNsdWRlIDx2ZWN0b3I+DQo+ID4+ICsjaW5jbHVkZSA8b3B0aW9u YWw+DQo+ID4+ICsjaW5jbHVkZSA8ZGVxdWU+DQo+ID4+ICAgI2luY2x1ZGUgPHNpZ25hbC5oPg0K PiA+Pg0KPiA+PiAgIC8qIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgInRhcmdldCByZWNvcmQtZnVs bCIsIGFsc28ga25vd24gYXMgInByb2Nlc3MNCj4gPj4gQEAgLTcyLDIwICs3NSwxNyBAQA0KPiA+ PiAgICNkZWZpbmUgREVGQVVMVF9SRUNPUkRfRlVMTF9JTlNOX01BWF9OVU0JMjAwMDAwDQo+ID4+ DQo+ID4+ICAgI2RlZmluZSBSRUNPUkRfRlVMTF9JU19SRVBMQVkgXA0KPiA+PiAtICAocmVjb3Jk X2Z1bGxfbGlzdC0+bmV4dCB8fCA6OmV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNF KQ0KPiA+PiArICAoKHJlY29yZF9mdWxsX25leHRfaW5zbiAhPSByZWNvcmRfZnVsbF9saXN0LnNp emUgKCkpIFwNCj4gPj4gKyAgICB8fCA6OmV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZF UlNFKQ0KPiA+Pg0KPiA+PiAgICNkZWZpbmUgUkVDT1JEX0ZVTExfRklMRV9NQUdJQwluZXRvcmRl cjMyKDB4MjAwOTEwMTYpDQo+ID4+DQo+ID4+ICAgLyogVGhlc2UgYXJlIHRoZSBjb3JlIHN0cnVj dHMgb2YgdGhlIHByb2Nlc3MgcmVjb3JkIGZ1bmN0aW9uYWxpdHkuDQo+ID4+DQo+ID4+ICAgICAg QSByZWNvcmRfZnVsbF9lbnRyeSBpcyBhIHJlY29yZCBvZiB0aGUgdmFsdWUgY2hhbmdlIG9mIGEg cmVnaXN0ZXINCj4gPj4gLSAgICgicmVjb3JkX2Z1bGxfcmVnIikgb3IgYSBwYXJ0IG9mIG1lbW9y eSAoInJlY29yZF9mdWxsX21lbSIpLiAgQW5kIGVhY2gNCj4gPj4gLSAgIGluc3RydWN0aW9uIG11 c3QgaGF2ZSBhIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAoInJlY29yZF9mdWxsX2VuZCIpDQo+ ID4+IC0gICB0aGF0IGluZGljYXRlcyB0aGF0IHRoaXMgaXMgdGhlIGxhc3Qgc3RydWN0IHJlY29y ZF9mdWxsX2VudHJ5IG9mIHRoaXMNCj4gPj4gLSAgIGluc3RydWN0aW9uLg0KPiA+PiAtDQo+ID4+ IC0gICBFYWNoIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSBpcyBsaW5rZWQgdG8gInJlY29yZF9m dWxsX2xpc3QiIGJ5ICJwcmV2Ig0KPiA+PiAtICAgYW5kICJuZXh0IiBwb2ludGVycy4gICovDQo+ ID4+ICsgICAoInJlY29yZF9mdWxsX3JlZyIpIG9yIGEgcGFydCBvZiBtZW1vcnkgKCJyZWNvcmRf ZnVsbF9tZW0iKS4NCj4gPj4gKyAgIFRoZXNlIGFyZSBzYXZlZCBvbiB0aGUgcmVjb3JkX2Z1bGxf aW5zdHJ1Y3Rpb24gc3RydWN0LCB3aGljaCBhbHNvDQo+ID4+ICsgICBjb250YWlucyBzb21lIGV4 dHJhIGluZm9ybWF0aW9uLCBzdWNoIGFzIGRlbGl2ZXJlZCBzaWduYWxzLiAgKi8NCj4gPiBPcHRp b25hbCBzdWdnZXN0aW9uIChzaW5jZSBpdCBoYXMgYmVlbiBsaWtlIHRoaXMgYmVmb3JlIGFscmVh ZHkpOg0KPiA+DQo+ID4gVGhlIGRlc2NyaXB0aW9uIGZvciByZWNvcmRfZnVsbF9lbnRyeSBpcyBu b3QgYWJvdmUgdGhlIGFjdHVhbCBzdHJ1Y3QgYW5kIHRoZQ0KPiA+IGZ1cnRoZXIgc3RydWN0cyBt aXNzIGEgY29tbWVudC4gSW4gdGhlIGRlc2NyaXB0aW9uIGFib3ZlIHRoZSBlbnVtIHZhbHVlcw0K PiA+IGFyZSBkZXNjcmliZWQgJygicmVjb3JkX2Z1bGxfcmVnIikgb3IgYSBwYXJ0IG9mIG1lbW9y eQ0KPiAoInJlY29yZF9mdWxsX21lbSIpJywNCj4gPiBidXQgbm90IHRoZSBhY3R1YWwgc3RydWN0 cy4gIEkgdGhpbmsgaXQgd291bGQgYmUgaGVscGZ1bCB0byB3cml0ZSB0aGlzIG91dCBhIGJpdA0K PiBtb3JlLA0KPiA+IGFkZCBjb21tZW50cyB0byBlYWNoIHN0cnVjdCBhbmQgbW92ZSB0aGUgb25l IGZvciByZWNvcmRfZnVsbF9lbnRyeQ0KPiA+IGFib3ZlIGl0cyBhY3R1YWwgc3RydWN0Lg0KPiA+ IEdpdmVuIHRoYXQgdGhpcyBjb21taXQgaXMgYWxyZWFkeSBiaWcgZW5vdWdoLCBhIHNlcGFyYXRl IGNvbW1pdCBtaWdodCBiZQ0KPiBiZXR0ZXIuDQo+IFllYWgsIHRoZXNlIGNhbiBwcm9iYWJseSBi ZSBiZXR0ZXIgZG9jdW1lbnRlZC4gSSdsbCB0cnkgdG8gdGhpbmsgb2YNCj4gc29tZXRoaW5nIGFu ZCBlaXRoZXIgYWRkIGEgY29tbWl0IGF0IHRoZSBlbmQgb2YgdGhpcyBzZXJpZXMsIG9yIHNlbmQg YQ0KPiBmb2xsb3cgdXAgcGF0Y2ggbGF0ZXIgKGRlcGVuZHMgb24gaG93IGhhcmQgaXQgaXMgZm9y IG1lIHRvIHRoaW5rIG9mDQo+IHNvbWV0aGluZyA6KSApDQo+ID4NCj4gPj4gICBzdHJ1Y3QgcmVj b3JkX2Z1bGxfbWVtX2VudHJ5DQo+ID4+ICAgew0KPiA+PiBAQCAtMTEyLDQ3ICsxMTIsMTQgQEAg c3RydWN0IHJlY29yZF9mdWxsX3JlZ19lbnRyeQ0KPiA+PiAgICAgfSB1Ow0KPiA+PiAgIH07DQo+ ID4+DQo+ID4+IC1zdHJ1Y3QgcmVjb3JkX2Z1bGxfZW5kX2VudHJ5DQo+ID4+IC17DQo+ID4+IC0g IGVudW0gZ2RiX3NpZ25hbCBzaWd2YWw7DQo+ID4+IC0gIFVMT05HRVNUIGluc25fbnVtOw0KPiA+ PiAtfTsNCj4gPj4gLQ0KPiA+PiAgIGVudW0gcmVjb3JkX2Z1bGxfdHlwZQ0KPiA+PiAgIHsNCj4g Pj4gLSAgcmVjb3JkX2Z1bGxfZW5kID0gMCwNCj4gPj4gICAgIHJlY29yZF9mdWxsX3JlZywNCj4g Pj4gICAgIHJlY29yZF9mdWxsX21lbQ0KPiA+PiAgIH07DQo+ID4+DQo+ID4+IC0vKiBUaGlzIGlz IHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IG1ha2VzIHVwIHRoZSBleGVjdXRpb24gbG9nLg0KPiA+ PiAtDQo+ID4+IC0gICBUaGUgZXhlY3V0aW9uIGxvZyBjb25zaXN0cyBvZiBhIHNpbmdsZSBsaW5r ZWQgbGlzdCBvZiBlbnRyaWVzDQo+ID4+IC0gICBvZiB0eXBlICJzdHJ1Y3QgcmVjb3JkX2Z1bGxf ZW50cnkiLiAgSXQgaXMgZG91Ymx5IGxpbmtlZCBzbyB0aGF0IGl0DQo+ID4+IC0gICBjYW4gYmUg dHJhdmVyc2VkIGluIGVpdGhlciBkaXJlY3Rpb24uDQo+ID4+IC0NCj4gPj4gLSAgIFRoZSBzdGFy dCBvZiB0aGUgbGlzdCBpcyBhbmNob3JlZCBieSBhIHN0cnVjdCBjYWxsZWQNCj4gPj4gLSAgICJy ZWNvcmRfZnVsbF9maXJzdCIuICBUaGUgcG9pbnRlciAicmVjb3JkX2Z1bGxfbGlzdCIgZWl0aGVy IHBvaW50cw0KPiA+PiAtICAgdG8gdGhlIGxhc3QgZW50cnkgdGhhdCB3YXMgYWRkZWQgdG8gdGhl IGxpc3QgKGluIHJlY29yZCBtb2RlKSwgb3IgdG8NCj4gPj4gLSAgIHRoZSBuZXh0IGVudHJ5IGlu IHRoZSBsaXN0IHRoYXQgd2lsbCBiZSBleGVjdXRlZCAoaW4gcmVwbGF5IG1vZGUpLg0KPiA+PiAt DQo+ID4+IC0gICBFYWNoIGxpc3QgZWxlbWVudCAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5KSwg aW4gYWRkaXRpb24gdG8gbmV4dA0KPiA+PiAtICAgYW5kIHByZXYgcG9pbnRlcnMsIGNvbnNpc3Rz IG9mIGEgdW5pb24gb2YgdGhyZWUgZW50cnkgdHlwZXM6IG1lbSwNCj4gPj4gLSAgIHJlZywgYW5k IGVuZC4gIEEgZmllbGQgY2FsbGVkICJ0eXBlIiBkZXRlcm1pbmVzIHdoaWNoIGVudHJ5IHR5cGUg aXMNCj4gPj4gLSAgIHJlcHJlc2VudGVkIGJ5IGEgZ2l2ZW4gbGlzdCBlbGVtZW50Lg0KPiA+PiAt DQo+ID4+IC0gICBFYWNoIGluc3RydWN0aW9uIHRoYXQgaXMgYWRkZWQgdG8gdGhlIGV4ZWN1dGlv biBsb2cgaXMgcmVwcmVzZW50ZWQNCj4gPj4gLSAgIGJ5IGEgdmFyaWFibGUgbnVtYmVyIG9mIGxp c3QgZWxlbWVudHMgKCdlbnRyaWVzJykuICBUaGUgaW5zdHJ1Y3Rpb24NCj4gPj4gLSAgIHdpbGwg aGF2ZSBvbmUgInJlZyIgZW50cnkgZm9yIGVhY2ggcmVnaXN0ZXIgdGhhdCBpcyBjaGFuZ2VkIGJ5 DQo+ID4+IC0gICBleGVjdXRpbmcgdGhlIGluc3RydWN0aW9uIChpbmNsdWRpbmcgdGhlIFBDIGlu IGV2ZXJ5IGNhc2UpLiAgSXQNCj4gPj4gLSAgIHdpbGwgYWxzbyBoYXZlIG9uZSAibWVtIiBlbnRy eSBmb3IgZWFjaCBtZW1vcnkgY2hhbmdlLiAgRmluYWxseSwNCj4gPj4gLSAgIGVhY2ggaW5zdHJ1 Y3Rpb24gd2lsbCBoYXZlIGFuICJlbmQiIGVudHJ5IHRoYXQgc2VwYXJhdGVzIGl0IGZyb20NCj4g Pj4gLSAgIHRoZSBjaGFuZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV4dCBpbnN0cnVjdGlvbi4g ICovDQo+ID4+IC0NCj4gPj4gICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkNCj4gPj4gICB7DQo+ ID4+IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcHJldjsNCj4gPj4gLSAgc3RydWN0IHJl Y29yZF9mdWxsX2VudHJ5ICpuZXh0Ow0KPiA+PiAgICAgZW51bSByZWNvcmRfZnVsbF90eXBlIHR5 cGU7DQo+ID4+ICAgICB1bmlvbg0KPiA+PiAgICAgew0KPiA+PiBAQCAtMTYwLDExICsxMjcsMzEg QEAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5DQo+ID4+ICAgICAgIHN0cnVjdCByZWNvcmRfZnVs bF9yZWdfZW50cnkgcmVnOw0KPiA+PiAgICAgICAvKiBtZW0gKi8NCj4gPj4gICAgICAgc3RydWN0 IHJlY29yZF9mdWxsX21lbV9lbnRyeSBtZW07DQo+ID4+IC0gICAgLyogZW5kICovDQo+ID4+IC0g ICAgc3RydWN0IHJlY29yZF9mdWxsX2VuZF9lbnRyeSBlbmQ7DQo+ID4+ICAgICB9IHU7DQo+ID4+ ICAgfTsNCj4gPj4NCj4gPj4gKy8qIFRoaXMgaXMgdGhlIG1haW4gc3RydWN0dXJlIHRoYXQgY29t cHJpc2VzIHRoZSBleGVjdXRpb24gbG9nLg0KPiA+PiArICAgRWFjaCBpbnN0cnVjdGlvbiBpcyBj b21wcmlzZWQgb2Y6DQo+ID4+ICsgICAqIFRoZSBpbnN0cnVjdGlvbiBudW1iZXI6IEhvdyBtYW55 IGluc3RydWN0aW9ucyB3ZXJlIHJlY29yZGVkIGJlZm9yZQ0KPiA+PiArICAgICB0aGlzIG9uZTsN Cj4gPj4gKyAgICogc2lndmFsOiBXaGV0aGVyIHRoZSBpbmZlcmlvciByZWNlaXZlZCBhIHNpZ25h bCB3aGlsZSB0aGUgZm9sbG93aW5nDQo+ID4+ICsgICAgIGluc3RydWN0aW9uIHdhcyBiZWluZyBy ZWNvcmRlZDsNCj4gPj4gKyAgICogZWZmZWN0czogQSBsaXN0IG9mIHJlY29yZF9mdWxsX2VudHJ5 IHN0cnVjdHVyZXMsIGVhY2ggb2Ygd2hpY2gNCj4gPj4gKyAgICAgZGVzY3JpYmluZyBvbmUgZWZm ZWN0IHRoYXQgdGhlIGluc3RydWN0aW9uIGhhcyBvbiB0aGUgaW5mZXJpb3IuDQo+ID4+ICsNCj4g Pj4gKyAgIE5vdGUsIHRoZSBzaWduYWwgaXMgc3RvcmVkIGluIHRoZSBwcmV2aW91cyBpbnN0cnVj dGlvbiBmb3IgaGlzdG9yaWNhbA0KPiA+PiArICAgcmVhc29ucy4gIFRoaXMgaXMgaG93IGl0IHdh cyBmaXJzdCBpbXBsZW1lbnRlZCwgYW5kIG5vIG9uZSBoYXMgZ290dGVuDQo+ID4+ICsgICBhcm91 bmQgdG8gY2hhbmdpbmcgaXQgeWV0LiAgKi8NCj4gPj4gKw0KPiA+PiArc3RydWN0IHJlY29yZF9m dWxsX2luc3RydWN0aW9uDQo+ID4+ICt7DQo+ID4+ICsgIC8qIFRoaXMgbWlnaHQgYmUgZGlmZmVy ZW50IGZyb20gdGhlIGluZGV4IGlmDQo+ID4+ICsgICAgIHdlIGhhZCB0byByZW1vdmUgdGhlIGZp cnN0IGZldyBpbnN0cnVjdGlvbnMuICAqLw0KPiA+PiArICB1aW50MzJfdCBpbnNuX251bTsNCj4g Pj4gKyAgc3RkOjpvcHRpb25hbDxnZGJfc2lnbmFsPiBzaWd2YWw7DQo+ID4+ICsgIHN0ZDo6dmVj dG9yPHJlY29yZF9mdWxsX2VudHJ5PiBlZmZlY3RzOw0KPiA+PiArfTsNCj4gPj4gKw0KPiA+PiAg IC8qIElmIHRydWUsIHF1ZXJ5IGlmIFBSRUMgY2Fubm90IHJlY29yZCBtZW1vcnkNCj4gPj4gICAg ICBjaGFuZ2Ugb2YgbmV4dCBpbnN0cnVjdGlvbi4gICovDQo+ID4+ICAgYm9vbCByZWNvcmRfZnVs bF9tZW1vcnlfcXVlcnkgPSBmYWxzZTsNCj4gPj4gQEAgLTE4MSwyNyArMTY4LDI1IEBAIHN0YXRp YyBkZXRhY2hlZF9yZWdjYWNoZQ0KPiA+PiAqcmVjb3JkX2Z1bGxfY29yZV9yZWdidWYgPSBOVUxM Ow0KPiA+PiAgIHN0YXRpYyBzdGQ6OnZlY3Rvcjx0YXJnZXRfc2VjdGlvbj4gcmVjb3JkX2Z1bGxf Y29yZV9zZWN0aW9uczsNCj4gPj4gICBzdGF0aWMgc3RydWN0IHJlY29yZF9mdWxsX2NvcmVfYnVm X2VudHJ5ICpyZWNvcmRfZnVsbF9jb3JlX2J1Zl9saXN0ID0NCj4gTlVMTDsNCj4gPj4NCj4gPj4g LS8qIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSB1c2VkIGZvciBtYW5hZ2luZyB0aGUgbGlu a2VkIGxpc3QgdGhhdA0KPiA+PiAtICAgcmVwcmVzZW50cyB0aGUgZXhlY3V0aW9uIGxvZy4NCj4g Pj4gKy8qIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSB1c2VkIGZvciBtYW5hZ2luZyB0aGUg aGlzdG9yeSBvZiBleGVjdXRlZA0KPiA+PiArICAgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIGluZmVy aW9yLg0KPiA+Pg0KPiA+PiAtICAgcmVjb3JkX2Z1bGxfZmlyc3QgaXMgdGhlIGFuY2hvciB0aGF0 IGhvbGRzIGRvd24gdGhlIGJlZ2lubmluZyBvZg0KPiA+PiAtICAgdGhlIGxpc3QuDQo+ID4+ICsg ICByZWNvcmRfZnVsbF9saXN0IGNvbnRhaW5zIGFsbCBpbnN0cnVjdGlvbnMgdGhhdCB3ZXJlIGZ1 bGx5IGV4ZWN1dGVkIGFuZA0KPiA+PiArICAgc2F2ZWQgdG8gdGhlIGxvZywgc28gdGhhdCB3ZSBj YW4gcmVwbGF5IHRoZSBleGVjdXRpb24uDQo+ID4+DQo+ID4+IC0gICByZWNvcmRfZnVsbF9saXN0 IHNlcnZlcyB0d28gZnVuY3Rpb25zOg0KPiA+PiAtICAgICAxKSBJbiByZWNvcmQgbW9kZSwgaXQg YW5jaG9ycyB0aGUgZW5kIG9mIHRoZSBsaXN0Lg0KPiA+PiAtICAgICAyKSBJbiByZXBsYXkgbW9k ZSwgaXQgdHJhdmVyc2VzIHRoZSBsaXN0IGFuZCBwb2ludHMgdG8NCj4gPj4gLQl0aGUgbmV4dCBp bnN0cnVjdGlvbiB0aGF0IG11c3QgYmUgZW11bGF0ZWQuDQo+ID4+ICsgICByZWNvcmRfZnVsbF9u ZXh0X2luc24gYWx3YXlzIHBvaW50cyB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbiB0aGF0IHdvdWxk DQo+ID4+ICsgICBiZSBleGVjdXRlZCBpZiB0aGUgaW5mZXJpb3IgZXhlY3V0ZXMgZm9yd2FyZC4g IEluIHRoZSBzcGVjaWFsIGNhc2Ugd2hlbg0KPiA+PiArICAgdGhlIGluZmVyaW9yIGlzIG5vdCBy ZXBsYXlpbmcsIHJlY29yZF9mdWxsX25leHRfaW5zbiBwb2ludHMgcGFzdCB0aGUNCj4gPj4gKyAg IGVuZCBvZiB0aGUgaGlzdG9yeS4NCj4gPj4NCj4gPj4gLSAgIHJlY29yZF9mdWxsX2FyY2hfbGlz dF9oZWFkIGFuZCByZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbCBhcmUgdXNlZA0KPiA+PiAtICAg dG8gbWFuYWdlIGEgc2VwYXJhdGUgbGlzdCwgd2hpY2ggaXMgdXNlZCB0byBidWlsZCB1cCB0aGUg Y2hhbmdlDQo+ID4+IC0gICBlbGVtZW50cyBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBpbnN0 cnVjdGlvbiBkdXJpbmcgcmVjb3JkIG1vZGUuDQo+ID4+IC0gICBXaGVuIHRoaXMgaW5zdHJ1Y3Rp b24gaGFzIGJlZW4gY29tcGxldGVseSBhbm5vdGF0ZWQgaW4gdGhlICJhcmNoDQo+ID4+IC0gICBs aXN0IiwgaXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgbWFpbiBleGVjdXRpb24gbG9nLiAgKi8N Cj4gPj4gKyAgIHJlY29yZF9mdWxsX2luY29tcGxldGVfaW5zdHJ1Y3Rpb24gaG9sZHMgYSBwYXJ0 aWFsIGluc3RydWN0aW9uLCB3aGlsZQ0KPiA+PiArICAgdGhlIGxvd2VyIHRhcmdldCBpcyBkaXNh c3NlbWJsaW5nIHRoZSBpbnN0cnVjdGlvbiwgb3IgYXMgcGFydGlhbCB4ZmVycyBhcmUNCj4gPj4g KyAgIGhhcHBlbmluZy4gIEl0IGlzIG1hbmlwdWxhdGVkIGJ5IHRoZSAiYXJjaCBsaXN0IiBmdW5j dGlvbnMgZm9yIGhpc3RvcmljYWwNCj4gPj4gKyAgIHJlYXNvbnMuICAqLw0KPiA+Pg0KPiA+PiAt c3RhdGljIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSByZWNvcmRfZnVsbF9maXJzdDsNCj4gPj4g LXN0YXRpYyBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlY29yZF9mdWxsX2xpc3QgPSAmcmVj b3JkX2Z1bGxfZmlyc3Q7DQo+ID4+IC1zdGF0aWMgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpy ZWNvcmRfZnVsbF9hcmNoX2xpc3RfaGVhZCA9IE5VTEw7DQo+ID4+IC1zdGF0aWMgc3RydWN0IHJl Y29yZF9mdWxsX2VudHJ5ICpyZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbCA9IE5VTEw7DQo+ID4+ ICtzdGF0aWMgc3RkOjpkZXF1ZTxyZWNvcmRfZnVsbF9pbnN0cnVjdGlvbj4gcmVjb3JkX2Z1bGxf bGlzdDsNCj4gPj4gK3N0YXRpYyByZWNvcmRfZnVsbF9pbnN0cnVjdGlvbiByZWNvcmRfZnVsbF9p bmNvbXBsZXRlX2luc3RydWN0aW9uOw0KPiA+PiArc3RhdGljIGludCByZWNvcmRfZnVsbF9uZXh0 X2luc247DQo+ID4+DQo+ID4+ICAgLyogdHJ1ZSBhc2sgdXNlci4gZmFsc2UgYXV0byBkZWxldGUg dGhlIGxhc3Qgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5LiAgKi8NCj4gPj4gICBzdGF0aWMgYm9v bCByZWNvcmRfZnVsbF9zdG9wX2F0X2xpbWl0ID0gdHJ1ZTsNCj4gPj4gQEAgLTM2MSw2ICszNDYs MTQgQEAgcmVjb3JkX2Z1bGxfdGFyZ2V0OjpraWxsICgpDQo+ID4+ICAgICByZWNvcmRfa2lsbCAo dGhpcyk7DQo+ID4+ICAgfQ0KPiA+IFRoaXMgIGZ1bmN0aW9uIGlzIHN0aWxsIG1pc3NpbmcgYSBj b21tZW50Lg0KPiBvb3BzLCBmaXhlZC4NCj4gPj4gK3N0YXRpYyB2b2lkDQo+ID4+ICtyZWNvcmRf ZnVsbF9yZXNldF9pbmNvbXBsZXRlICgpDQo+ID4+ICt7DQo+ID4+ICsgIHJlY29yZF9mdWxsX2lu Y29tcGxldGVfaW5zdHJ1Y3Rpb24uZWZmZWN0cy5jbGVhciAoKTsNCj4gPj4gKyAgcmVjb3JkX2Z1 bGxfaW5jb21wbGV0ZV9pbnN0cnVjdGlvbi5zaWd2YWwucmVzZXQgKCk7DQo+ID4+ICsgIHJlY29y ZF9mdWxsX2luY29tcGxldGVfaW5zdHJ1Y3Rpb24uaW5zbl9udW0gPSAwOw0KPiA+PiArfQ0KPiA+ PiArDQo+ID4+ICAgLyogU2VlIHJlY29yZC1mdWxsLmguICAqLw0KPiA+Pg0KPiA+PiAgIGludA0K PiA+PiBAQCAtMzkwLDE1NiArMzgzLDEyNCBAQCBzdGF0aWMgc3RydWN0IGNtZF9saXN0X2VsZW1l bnQNCj4gPj4gKnNob3dfcmVjb3JkX2Z1bGxfY21kbGlzdDsNCj4gPj4gICAvKiBDb21tYW5kIGxp c3QgZm9yICJyZWNvcmQgZnVsbCIuICAqLw0KPiA+PiAgIHN0YXRpYyBzdHJ1Y3QgY21kX2xpc3Rf ZWxlbWVudCAqcmVjb3JkX2Z1bGxfY21kbGlzdDsNCj4gPj4NCj4gPj4gLXN0YXRpYyB2b2lkIHJl Y29yZF9mdWxsX2dvdG9faW5zbiAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICplbnRyeSwNCj4g Pj4gK3N0YXRpYyB2b2lkIHJlY29yZF9mdWxsX2dvdG9faW5zbiAoc2l6ZV90IHRhcmdldF9pbnNu LA0KPiA+PiAgIAkJCQkgICBlbnVtIGV4ZWNfZGlyZWN0aW9uX2tpbmQgZGlyKTsNCj4gPiBJcyB0 aGlzIHNvbWUgZ2VuZXJhbCBndWlkZWxpbmUgdG8gY2FsbCB0aGlzIGNsZWFudXAvaW5pdCBpbnN0 ZWFkIG9mDQo+IHJlbGVhc2UvYWxsb2MgPw0KPiA+IFNpbmNlIHRoaXMgcGF0Y2ggaXMgYWxyZWFk eSBzbyBiaWcsIEkganVzdCB3b25kZXIgd2h5IHlvdSBjaGFuZ2VkIGl0LiDwn5iKDQo+IA0KPiBU aGVyZSBpc24ndCBhbnkgZ3VpZGVsaW5lLCBJIGp1c3QgZmlndXJlZCB0aGF0IGFsbG9jL3JlbGVh c2Ugd2FzIG5vDQo+IGxvbmdlciBjb3JyZWN0LCBzaW5jZSB3ZSB3ZXJlIG5vIGxvbmdlciBhbGxv Y2F0aW5nIG9yIHJlbGVhc2luZyBkeW5hbWljDQo+IG1lbW9yeS4uLiBUaGlzIHdhcyBiZWZvcmUg SSByZWFsaXplZCBob3cgZmFyIEkgY291bGQgdGFrZSB0aGUNCj4gQysraWZpY2F0aW9uIGFuZCBt YWtlIHRoZW0gaW50byBwcm9wZXIgY29uc3RydWN0b3JzLg0KPiANCj4gSSBjYW4gdW5kbyB0aGUg Y2hhbmdlIGlmIHlvdSdkIGxpa2UsIGJ1dCBzaW5jZSB0aGV5IGFyZSBnb2luZyB0byBiZWNvbWUN Cj4gdGhlIGNvbnN0cnVjdG9yIEkgZmVlbCBsaWtlIGl0IGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5 IGVpdGhlciB3YXkuLi4NCg0KTm8sIEkgcmVhbGx5IGRvbid0IGluc2lzdCBvbiB0aGF0Li4uIA0K DQo+ID4+IC0vKiBBbGxvYyBhbmQgZnJlZSBmdW5jdGlvbnMgZm9yIHJlY29yZF9mdWxsX3JlZywg cmVjb3JkX2Z1bGxfbWVtLCBhbmQNCj4gPj4gLSAgIHJlY29yZF9mdWxsX2VuZCBlbnRyaWVzLiAg Ki8NCj4gPj4gKy8qIEluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwIGZ1bmN0aW9ucyBmb3IgcmVj b3JkX2Z1bGxfcmVnIGFuZA0KPiA+PiArICAgcmVjb3JkX2Z1bGxfbWVtIGVudHJpZXMuICAqLw0K PiA+Pg0KPiA+PiAtLyogQWxsb2MgYSByZWNvcmRfZnVsbF9yZWcgcmVjb3JkIGVudHJ5LiAgKi8N Cj4gPj4gKy8qIEluaXQgYSByZWNvcmRfZnVsbF9yZWcgcmVjb3JkIGVudHJ5LiAgKi8NCj4gPj4N Cj4gPj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICoNCj4gPj4gLXJl Y29yZF9mdWxsX3JlZ19hbGxvYyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ251 bSkNCj4gPj4gK3N0YXRpYyBpbmxpbmUgcmVjb3JkX2Z1bGxfZW50cnkNCj4gPj4gK3JlY29yZF9m dWxsX3JlZ19pbml0IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbnVtKQ0KPiA+ PiAgIHsNCj4gPj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWM7DQo+ID4+ICsgIHJl Y29yZF9mdWxsX2VudHJ5IHJlYzsNCj4gPj4gICAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0g cmVnY2FjaGUtPmFyY2ggKCk7DQo+ID4+DQo+ID4+IC0gIHJlYyA9IFhDTkVXIChzdHJ1Y3QgcmVj b3JkX2Z1bGxfZW50cnkpOw0KPiA+PiAtICByZWMtPnR5cGUgPSByZWNvcmRfZnVsbF9yZWc7DQo+ ID4+IC0gIHJlYy0+dS5yZWcubnVtID0gcmVnbnVtOw0KPiA+PiAtICByZWMtPnUucmVnLmxlbiA9 IHJlZ2lzdGVyX3NpemUgKGdkYmFyY2gsIHJlZ251bSk7DQo+ID4+IC0gIGlmIChyZWMtPnUucmVn LmxlbiA+IHNpemVvZiAocmVjLT51LnJlZy51LmJ1ZikpDQo+ID4+IC0gICAgcmVjLT51LnJlZy51 LnB0ciA9IChnZGJfYnl0ZSAqKSB4bWFsbG9jIChyZWMtPnUucmVnLmxlbik7DQo+ID4+ICsgIHJl Yy50eXBlID0gcmVjb3JkX2Z1bGxfcmVnOw0KPiA+PiArICByZWMudS5yZWcubnVtID0gcmVnbnVt Ow0KPiA+PiArICByZWMudS5yZWcubGVuID0gcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwgcmVnbnVt KTsNCj4gPj4gKyAgaWYgKHJlYy51LnJlZy5sZW4gPiBzaXplb2YgKHJlYy51LnJlZy51LmJ1Zikp DQo+ID4+ICsgICAgcmVjLnUucmVnLnUucHRyID0gKGdkYl9ieXRlICopIHhtYWxsb2MgKHJlYy51 LnJlZy5sZW4pOw0KPiA+Pg0KPiA+PiAgICAgcmV0dXJuIHJlYzsNCj4gPj4gICB9DQo+ID4+DQo+ ID4+IC0vKiBGcmVlIGEgcmVjb3JkX2Z1bGxfcmVnIHJlY29yZCBlbnRyeS4gICovDQo+ID4+ICsv KiBDbGVhbnVwIGEgcmVjb3JkX2Z1bGxfcmVnIHJlY29yZCBlbnRyeS4gICovDQo+ID4+DQo+ID4+ ICAgc3RhdGljIGlubGluZSB2b2lkDQo+ID4+IC1yZWNvcmRfZnVsbF9yZWdfcmVsZWFzZSAoc3Ry dWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWMpDQo+ID4+ICtyZWNvcmRfZnVsbF9yZWdfY2xlYW51 cCAocmVjb3JkX2Z1bGxfZW50cnkgcmVjKQ0KPiA+PiAgIHsNCj4gPj4gLSAgZ2RiX2Fzc2VydCAo cmVjLT50eXBlID09IHJlY29yZF9mdWxsX3JlZyk7DQo+ID4+IC0gIGlmIChyZWMtPnUucmVnLmxl biA+IHNpemVvZiAocmVjLT51LnJlZy51LmJ1ZikpDQo+ID4+IC0gICAgeGZyZWUgKHJlYy0+dS5y ZWcudS5wdHIpOw0KPiA+PiAtICB4ZnJlZSAocmVjKTsNCj4gPj4gKyAgZ2RiX2Fzc2VydCAocmVj LnR5cGUgPT0gcmVjb3JkX2Z1bGxfcmVnKTsNCj4gPj4gKyAgaWYgKHJlYy51LnJlZy5sZW4gPiBz aXplb2YgKHJlYy51LnJlZy51LmJ1ZikpDQo+ID4+ICsgICAgeGZyZWUgKHJlYy51LnJlZy51LnB0 cik7DQo+ID4+ICAgfQ0KPiA+Pg0KPiA+PiAtLyogQWxsb2MgYSByZWNvcmRfZnVsbF9tZW0gcmVj b3JkIGVudHJ5LiAgKi8NCj4gPj4gKy8qIEluaXQgYSByZWNvcmRfZnVsbF9tZW0gcmVjb3JkIGVu dHJ5LiAgKi8NCj4gPj4NCj4gPj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlY29yZF9mdWxsX2Vu dHJ5ICoNCj4gPj4gLXJlY29yZF9mdWxsX21lbV9hbGxvYyAoQ09SRV9BRERSIGFkZHIsIGludCBs ZW4pDQo+ID4+ICtzdGF0aWMgaW5saW5lIHJlY29yZF9mdWxsX2VudHJ5DQo+ID4+ICtyZWNvcmRf ZnVsbF9tZW1faW5pdCAoQ09SRV9BRERSIGFkZHIsIGludCBsZW4pDQo+ID4+ICAgew0KPiA+PiAt ICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYzsNCj4gPj4gKyAgcmVjb3JkX2Z1bGxfZW50 cnkgcmVjOw0KPiA+Pg0KPiA+PiAtICByZWMgPSBYQ05FVyAoc3RydWN0IHJlY29yZF9mdWxsX2Vu dHJ5KTsNCj4gPj4gLSAgcmVjLT50eXBlID0gcmVjb3JkX2Z1bGxfbWVtOw0KPiA+PiAtICByZWMt PnUubWVtLmFkZHIgPSBhZGRyOw0KPiA+PiAtICByZWMtPnUubWVtLmxlbiA9IGxlbjsNCj4gPj4g LSAgaWYgKHJlYy0+dS5tZW0ubGVuID4gc2l6ZW9mIChyZWMtPnUubWVtLnUuYnVmKSkNCj4gPj4g LSAgICByZWMtPnUubWVtLnUucHRyID0gKGdkYl9ieXRlICopIHhtYWxsb2MgKGxlbik7DQo+ID4+ ICsgIHJlYy50eXBlID0gcmVjb3JkX2Z1bGxfbWVtOw0KPiA+PiArICByZWMudS5tZW0uYWRkciA9 IGFkZHI7DQo+ID4+ICsgIHJlYy51Lm1lbS5sZW4gPSBsZW47DQo+ID4+ICsgIGlmIChyZWMudS5t ZW0ubGVuID4gc2l6ZW9mIChyZWMudS5tZW0udS5idWYpKQ0KPiA+PiArICAgIHJlYy51Lm1lbS51 LnB0ciA9IChnZGJfYnl0ZSAqKSB4bWFsbG9jIChsZW4pOw0KPiA+PiArICByZWMudS5tZW0ubWVt X2VudHJ5X25vdF9hY2Nlc3NpYmxlID0gMDsNCj4gPj4NCj4gPj4gICAgIHJldHVybiByZWM7DQo+ ID4+ICAgfQ0KPiA+Pg0KPiA+PiAtLyogRnJlZSBhIHJlY29yZF9mdWxsX21lbSByZWNvcmQgZW50 cnkuICAqLw0KPiA+PiArLyogQ2xlYW51cCBhIHJlY29yZF9mdWxsX21lbSByZWNvcmQgZW50cnku ICAqLw0KPiA+Pg0KPiA+PiAgIHN0YXRpYyBpbmxpbmUgdm9pZA0KPiA+PiAtcmVjb3JkX2Z1bGxf bWVtX3JlbGVhc2UgKHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcmVjKQ0KPiA+PiArcmVjb3Jk X2Z1bGxfbWVtX2NsZWFudXAgKHJlY29yZF9mdWxsX2VudHJ5IHJlYykNCj4gPj4gICB7DQo+ID4+ IC0gIGdkYl9hc3NlcnQgKHJlYy0+dHlwZSA9PSByZWNvcmRfZnVsbF9tZW0pOw0KPiA+PiAtICBp ZiAocmVjLT51Lm1lbS5sZW4gPiBzaXplb2YgKHJlYy0+dS5tZW0udS5idWYpKQ0KPiA+PiAtICAg IHhmcmVlIChyZWMtPnUubWVtLnUucHRyKTsNCj4gPj4gLSAgeGZyZWUgKHJlYyk7DQo+ID4+ICsg IGdkYl9hc3NlcnQgKHJlYy50eXBlID09IHJlY29yZF9mdWxsX21lbSk7DQo+ID4+ICsgIGlmIChy ZWMudS5tZW0ubGVuID4gc2l6ZW9mIChyZWMudS5tZW0udS5idWYpKQ0KPiA+PiArICAgIHhmcmVl IChyZWMudS5tZW0udS5wdHIpOw0KPiA+PiAgIH0NCj4gPj4NCj4gPj4gLS8qIEFsbG9jIGEgcmVj b3JkX2Z1bGxfZW5kIHJlY29yZCBlbnRyeS4gICovDQo+ID4+IC0NCj4gPj4gLXN0YXRpYyBpbmxp bmUgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICoNCj4gPj4gLXJlY29yZF9mdWxsX2VuZF9hbGxv YyAodm9pZCkNCj4gPj4gLXsNCj4gPj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWM7 DQo+ID4+IC0NCj4gPj4gLSAgcmVjID0gWENORVcgKHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSk7 DQo+ID4+IC0gIHJlYy0+dHlwZSA9IHJlY29yZF9mdWxsX2VuZDsNCj4gPj4gLQ0KPiA+PiAtICBy ZXR1cm4gcmVjOw0KPiA+PiAtfQ0KPiA+PiAtDQo+ID4+IC0vKiBGcmVlIGEgcmVjb3JkX2Z1bGxf ZW5kIHJlY29yZCBlbnRyeS4gICovDQo+ID4+ICsvKiBGcmVlIG9uZSByZWNvcmQgZW50cnksIGFu eSB0eXBlLiAgKi8NCj4gPj4NCj4gPj4gICBzdGF0aWMgaW5saW5lIHZvaWQNCj4gPj4gLXJlY29y ZF9mdWxsX2VuZF9yZWxlYXNlIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYykNCj4gPj4g K3JlY29yZF9mdWxsX2VudHJ5X2NsZWFudXAgKHJlY29yZF9mdWxsX2VudHJ5IHJlYykNCj4gPj4g ICB7DQo+ID4+IC0gIHhmcmVlIChyZWMpOw0KPiA+PiAtfQ0KPiA+PiAtDQo+ID4+IC0vKiBGcmVl IG9uZSByZWNvcmQgZW50cnksIGFueSB0eXBlLg0KPiA+PiAtICAgUmV0dXJuIGVudHJ5LT50eXBl LCBpbiBjYXNlIGNhbGxlciB3YW50cyB0byBrbm93LiAgKi8NCj4gPj4NCj4gPj4gLXN0YXRpYyBp bmxpbmUgZW51bSByZWNvcmRfZnVsbF90eXBlDQo+ID4+IC1yZWNvcmRfZnVsbF9lbnRyeV9yZWxl YXNlIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYykNCj4gPj4gLXsNCj4gPj4gLSAgZW51 bSByZWNvcmRfZnVsbF90eXBlIHR5cGUgPSByZWMtPnR5cGU7DQo+ID4+IC0NCj4gPj4gLSAgc3dp dGNoICh0eXBlKSB7DQo+ID4+ICsgIHN3aXRjaCAocmVjLnR5cGUpIHsNCj4gPj4gICAgIGNhc2Ug cmVjb3JkX2Z1bGxfcmVnOg0KPiA+PiAtICAgIHJlY29yZF9mdWxsX3JlZ19yZWxlYXNlIChyZWMp Ow0KPiA+PiArICAgIHJlY29yZF9mdWxsX3JlZ19jbGVhbnVwIChyZWMpOw0KPiA+PiAgICAgICBi cmVhazsNCj4gPj4gICAgIGNhc2UgcmVjb3JkX2Z1bGxfbWVtOg0KPiA+PiAtICAgIHJlY29yZF9m dWxsX21lbV9yZWxlYXNlIChyZWMpOw0KPiA+PiAtICAgIGJyZWFrOw0KPiA+PiAtICBjYXNlIHJl Y29yZF9mdWxsX2VuZDoNCj4gPj4gLSAgICByZWNvcmRfZnVsbF9lbmRfcmVsZWFzZSAocmVjKTsN Cj4gPj4gKyAgICByZWNvcmRfZnVsbF9tZW1fY2xlYW51cCAocmVjKTsNCj4gPj4gICAgICAgYnJl YWs7DQo+ID4+ICAgICB9DQo+ID4+IC0gIHJldHVybiB0eXBlOw0KPiA+PiAgIH0NCj4gPj4NCj4g Pj4gLS8qIEZyZWUgYWxsIHJlY29yZCBlbnRyaWVzIGluIGxpc3QgcG9pbnRlZCB0byBieSBSRUMu ICAqLw0KPiA+PiAtDQo+ID4+ICAgc3RhdGljIHZvaWQNCj4gPj4gLXJlY29yZF9mdWxsX2xpc3Rf cmVsZWFzZSAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWMpDQo+ID4+ICtyZWNvcmRfZnVs bF9yZXNldF9oaXN0b3J5ICgpDQo+ID4+ICAgew0KPiA+PiAtICBpZiAoIXJlYykNCj4gPj4gLSAg ICByZXR1cm47DQo+ID4+IC0NCj4gPj4gLSAgd2hpbGUgKHJlYy0+bmV4dCkNCj4gPj4gLSAgICBy ZWMgPSByZWMtPm5leHQ7DQo+ID4+ICsgIHJlY29yZF9mdWxsX2luc25fbnVtID0gMDsNCj4gPj4g KyAgcmVjb3JkX2Z1bGxfaW5zbl9jb3VudCA9IDA7DQo+ID4+ICsgIHJlY29yZF9mdWxsX25leHRf aW5zbiA9IDA7DQo+ID4+DQo+ID4+IC0gIHdoaWxlIChyZWMtPnByZXYpDQo+ID4+ICsgIGZvciAo YXV0byAmaW5zbiA6IHJlY29yZF9mdWxsX2xpc3QpDQo+ID4+ICAgICAgIHsNCj4gPj4gLSAgICAg IHJlYyA9IHJlYy0+cHJldjsNCj4gPj4gLSAgICAgIHJlY29yZF9mdWxsX2VudHJ5X3JlbGVhc2Ug KHJlYy0+bmV4dCk7DQo+ID4+ICsgICAgICBmb3IgKGF1dG8gJmVudHJ5IDogaW5zbi5lZmZlY3Rz KQ0KPiA+PiArCXJlY29yZF9mdWxsX2VudHJ5X2NsZWFudXAgKGVudHJ5KTsNCj4gPj4gICAgICAg fQ0KPiA+Pg0KPiA+PiAtICBpZiAocmVjID09ICZyZWNvcmRfZnVsbF9maXJzdCkNCj4gPj4gKyAg cmVjb3JkX2Z1bGxfbGlzdC5jbGVhciAoKTsNCj4gPj4gK30NCj4gPiBUaGlzIGZ1bmN0aW9uIGlz IG1pc3NpbmcgYSBjb21tZW50Lg0KPiBvb3BzLCBmaXhlZA0KPiA+DQo+ID4+ICtzdGF0aWMgdm9p ZA0KPiA+PiArcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2ZvbGxvd2luZyAoaW50IGluZGV4KQ0K PiA+PiArew0KPiA+PiArICBmb3IgKGludCBpID0gcmVjb3JkX2Z1bGxfbGlzdC5zaXplICgpIC0g MTsgaSA+IGluZGV4OyBpLS0pDQo+ID4+ICAgICAgIHsNCj4gPj4gLSAgICAgIHJlY29yZF9mdWxs X2luc25fbnVtID0gMDsNCj4gPj4gLSAgICAgIHJlY29yZF9mdWxsX2ZpcnN0Lm5leHQgPSBOVUxM Ow0KPiA+PiArICAgICAgZm9yIChhdXRvICZlbnRyeSA6IHJlY29yZF9mdWxsX2xpc3RbaV0uZWZm ZWN0cykNCj4gPj4gKwlyZWNvcmRfZnVsbF9lbnRyeV9jbGVhbnVwIChlbnRyeSk7DQo+ID4+ICsg ICAgICByZWNvcmRfZnVsbF9saXN0LnBvcF9iYWNrICgpOw0KPiA+PiAgICAgICB9DQo+ID4+IC0g IGVsc2UNCj4gPj4gLSAgICByZWNvcmRfZnVsbF9lbnRyeV9yZWxlYXNlIChyZWMpOw0KPiA+PiAr ICAvKiBTZXQgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gdG8gYmUgcGFzdCB0aGUgZW5kIG9mIHRoZSBs b2cgc28gd2UNCj4gPj4gKyAgICAgc3RhcnQgcmVjb3JkaW5nIGlmIHRoZSB1c2VyIG1vdmVzIGZv cndhcmQgYWdhaW4uICAqLw0KPiA+PiArICByZWNvcmRfZnVsbF9uZXh0X2luc24gPSBpbmRleDsN Cj4gPj4gICB9DQo+ID4+DQo+ID4+IC0vKiBGcmVlIGFsbCByZWNvcmQgZW50cmllcyBmb3J3YXJk IG9mIHRoZSBnaXZlbiBsaXN0IHBvc2l0aW9uLiAgKi8NCj4gPj4gKy8qIFNhdmUgdGhlIGluY29t cGxldGUgaW5zdHJ1Y3Rpb24gaW4gdGhlIGxvZy4gICovDQo+ID4+DQo+ID4+ICAgc3RhdGljIHZv aWQNCj4gPj4gLXJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZV9mb2xsb3dpbmcgKHN0cnVjdCByZWNv cmRfZnVsbF9lbnRyeSAqcmVjKQ0KPiA+PiArcmVjb3JkX2Z1bGxfc2F2ZV9pbnN0cnVjdGlvbiAo KQ0KPiA+PiAgIHsNCj4gPj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICp0bXAgPSByZWMt Pm5leHQ7DQo+ID4+ICsgICsrcmVjb3JkX2Z1bGxfaW5zbl9jb3VudDsNCj4gPj4gKyAgcmVjb3Jk X2Z1bGxfaW5jb21wbGV0ZV9pbnN0cnVjdGlvbi5pbnNuX251bSA9IHJlY29yZF9mdWxsX2luc25f Y291bnQ7DQo+ID4+ICsgIHJlY29yZF9mdWxsX2luY29tcGxldGVfaW5zdHJ1Y3Rpb24uZWZmZWN0 cy5zaHJpbmtfdG9fZml0ICgpOw0KPiA+PiArICByZWNvcmRfZnVsbF9saXN0LnB1c2hfYmFjayAo c3RkOjptb3ZlDQo+ID4+IChyZWNvcmRfZnVsbF9pbmNvbXBsZXRlX2luc3RydWN0aW9uKSk7DQo+ ID4+ICsgIHJlY29yZF9mdWxsX25leHRfaW5zbisrOw0KPiA+Pg0KPiA+PiAtICByZWMtPm5leHQg PSBOVUxMOw0KPiA+PiAtICB3aGlsZSAodG1wKQ0KPiA+PiAtICAgIHsNCj4gPj4gLSAgICAgIHJl YyA9IHRtcC0+bmV4dDsNCj4gPj4gLSAgICAgIGlmIChyZWNvcmRfZnVsbF9lbnRyeV9yZWxlYXNl ICh0bXApID09IHJlY29yZF9mdWxsX2VuZCkNCj4gPj4gLQl7DQo+ID4+IC0JICByZWNvcmRfZnVs bF9pbnNuX251bS0tOw0KPiA+PiAtCSAgcmVjb3JkX2Z1bGxfaW5zbl9jb3VudC0tOw0KPiA+PiAt CX0NCj4gPj4gLSAgICAgIHRtcCA9IHJlYzsNCj4gPj4gLSAgICB9DQo+ID4+ICsgIHJlY29yZF9m dWxsX3Jlc2V0X2luY29tcGxldGUgKCk7DQo+ID4+ICAgfQ0KPiA+Pg0KPiA+PiAgIC8qIERlbGV0 ZSB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb2csIHRv IG1ha2UNCj4gPj4gQEAgLTU1MCw1MiArNTExLDIyIEBAIHJlY29yZF9mdWxsX2xpc3RfcmVsZWFz ZV9mb2xsb3dpbmcgKHN0cnVjdA0KPiA+PiByZWNvcmRfZnVsbF9lbnRyeSAqcmVjKQ0KPiA+PiAg IHN0YXRpYyB2b2lkDQo+ID4+ICAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2ZpcnN0ICh2b2lk KQ0KPiA+PiAgIHsNCj4gPj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICp0bXA7DQo+ID4+ IC0NCj4gPj4gLSAgaWYgKCFyZWNvcmRfZnVsbF9maXJzdC5uZXh0KQ0KPiA+PiArICBpZiAocmVj b3JkX2Z1bGxfbGlzdC5lbXB0eSAoKSkNCj4gPj4gICAgICAgcmV0dXJuOw0KPiA+Pg0KPiA+PiAt ICAvKiBMb29wIHVudGlsIGEgcmVjb3JkX2Z1bGxfZW5kLiAgKi8NCj4gPj4gLSAgd2hpbGUgKDEp DQo+ID4+IC0gICAgew0KPiA+PiAtICAgICAgLyogQ3V0IHJlY29yZF9mdWxsX2ZpcnN0Lm5leHQg b3V0IG9mIHRoZSBsaW5rZWQgbGlzdC4gICovDQo+ID4+IC0gICAgICB0bXAgPSByZWNvcmRfZnVs bF9maXJzdC5uZXh0Ow0KPiA+PiAtICAgICAgcmVjb3JkX2Z1bGxfZmlyc3QubmV4dCA9IHRtcC0+ bmV4dDsNCj4gPj4gLSAgICAgIHRtcC0+bmV4dC0+cHJldiA9ICZyZWNvcmRfZnVsbF9maXJzdDsN Cj4gPj4gLQ0KPiA+PiAtICAgICAgLyogdG1wIGlzIG5vdyBpc29sYXRlZCwgYW5kIGNhbiBiZSBk ZWxldGVkLiAgKi8NCj4gPj4gLSAgICAgIGlmIChyZWNvcmRfZnVsbF9lbnRyeV9yZWxlYXNlICh0 bXApID09IHJlY29yZF9mdWxsX2VuZCkNCj4gPj4gLQlicmVhazsJLyogRW5kIGxvb3AgYXQgZmly c3QgcmVjb3JkX2Z1bGxfZW5kLiAgKi8NCj4gPj4gKyAgZm9yIChhdXRvICZlbnRyeSA6IHJlY29y ZF9mdWxsX2xpc3RbMF0uZWZmZWN0cykNCj4gPj4gKyAgICByZWNvcmRfZnVsbF9lbnRyeV9jbGVh bnVwIChlbnRyeSk7DQo+ID4+DQo+ID4+IC0gICAgICBpZiAoIXJlY29yZF9mdWxsX2ZpcnN0Lm5l eHQpDQo+ID4+IC0Jew0KPiA+PiAtCSAgZ2RiX2Fzc2VydCAocmVjb3JkX2Z1bGxfaW5zbl9udW0g PT0gMSk7DQo+ID4+IC0JICBicmVhazsJLyogRW5kIGxvb3Agd2hlbiBsaXN0IGlzIGVtcHR5LiAg Ki8NCj4gPj4gLQl9DQo+ID4+IC0gICAgfQ0KPiA+PiArICByZWNvcmRfZnVsbF9saXN0LnBvcF9m cm9udCAoKTsNCj4gPj4gKyAgLS1yZWNvcmRfZnVsbF9uZXh0X2luc247DQo+ID4+ICAgfQ0KPiA+ Pg0KPiA+PiAgIC8qIEFkZCBhIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSB0byByZWNvcmRfZnVs bF9hcmNoX2xpc3QuICAqLw0KPiA+Pg0KPiA+PiAgIHN0YXRpYyB2b2lkDQo+ID4+IC1yZWNvcmRf ZnVsbF9hcmNoX2xpc3RfYWRkIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYykNCj4gPj4g K3JlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGQgKHJlY29yZF9mdWxsX2VudHJ5ICZyZWMpDQo+ID4+ ICAgew0KPiA+PiAtICBpZiAocmVjb3JkX2RlYnVnID4gMSkNCj4gPj4gLSAgICBnZGJfcHJpbnRm IChnZGJfc3RkbG9nLA0KPiA+PiAtCQkiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF9mdWxsX2FyY2hf bGlzdF9hZGQgJXMuXG4iLA0KPiA+PiAtCQlob3N0X2FkZHJlc3NfdG9fc3RyaW5nIChyZWMpKTsN Cj4gPj4gLQ0KPiA+PiAtICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwpDQo+ID4+IC0g ICAgew0KPiA+PiAtICAgICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwtPm5leHQgPSByZWM7 DQo+ID4+IC0gICAgICByZWMtPnByZXYgPSByZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbDsNCj4g Pj4gLSAgICAgIHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsID0gcmVjOw0KPiA+PiAtICAgIH0N Cj4gPj4gLSAgZWxzZQ0KPiA+PiAtICAgIHsNCj4gPj4gLSAgICAgIHJlY29yZF9mdWxsX2FyY2hf bGlzdF9oZWFkID0gcmVjOw0KPiA+PiAtICAgICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwg PSByZWM7DQo+ID4+IC0gICAgfQ0KPiA+PiArICByZWNvcmRfZnVsbF9pbmNvbXBsZXRlX2luc3Ry dWN0aW9uLmVmZmVjdHMucHVzaF9iYWNrIChyZWMpOw0KPiA+IE5vdyBzaW5jZSB0aGlzIGlzIG9u ZSBsaW5lIG9ubHksIGRvIHdlIHJlYWxseSBuZWVkIGEgc2VwYXJhdGUgZnVuY3Rpb24gZm9yDQo+ IHRoaXM/DQo+IEkgZ3Vlc3Mgbm90LCBidXQgSSB0aGluayBhdCB0aGUgc2FtZSB0aW1lIGl0IHdv dWxkIG1ha2UgdGhlIHBhdGNoIHRoYXQNCj4gbXVjaCBoYXJkZXIgdG8gcmV2aWV3IGJlY2F1c2Ug dGhlIGZhY3QgdGhhdCB0aGlzIGJlaW5nIGhvdyB5b3UgYWRkIHRvDQo+IHRoZSBpbmNvbXBsZXRl IGxpc3QgaXMgbm90IG9idmlvdXMuLi4NCg0KSSBzdGlsbCBtYXkgbm90IGhhdmUgbG9va2VkIGRl ZXBseSBlbm91Z2ggaW50byB0aGlzIHBhdGNoIHlldCwgYnV0IGl04oCZcyBldmVuDQptb3JlIGNv bmZ1c2luZyB0byBtZSB3aXRoIHRoaXMgYWRkaXRpb25hbCBmdW5jdGlvbi4NCkluIGFueSBjYXNl LCB0aGlzIGlmIG9mIGNvdXJzZSB1cCB0byB5b3UuIPCfmIoNCg0KPiA+DQo+ID4+ICAgfQ0KPiA+ Pg0KPiA+PiAgIC8qIFJldHVybiB0aGUgdmFsdWUgc3RvcmFnZSBsb2NhdGlvbiBvZiBhIHJlY29y ZCBlbnRyeS4gICovDQo+ID4+IEBAIC02MTMsNyArNTQ0LDYgQEAgcmVjb3JkX2Z1bGxfZ2V0X2xv YyAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWMpDQo+ID4+ICAgICAgICAgcmV0dXJuIHJl Yy0+dS5yZWcudS5wdHI7DQo+ID4+ICAgICAgIGVsc2UNCj4gPj4gICAgICAgICByZXR1cm4gcmVj LT51LnJlZy51LmJ1ZjsNCj4gPj4gLSAgY2FzZSByZWNvcmRfZnVsbF9lbmQ6DQo+ID4+ICAgICBk ZWZhdWx0Og0KPiA+PiAgICAgICBnZGJfYXNzZXJ0X25vdF9yZWFjaGVkICgidW5leHBlY3RlZCBy ZWNvcmRfZnVsbF9lbnRyeSB0eXBlIik7DQo+ID4+ICAgICAgIHJldHVybiBOVUxMOw0KPiA+PiBA QCAtNjI1LDcgKzU1NSw3IEBAIHJlY29yZF9mdWxsX2dldF9sb2MgKHN0cnVjdCByZWNvcmRfZnVs bF9lbnRyeSAqcmVjKQ0KPiA+PiAgIGludA0KPiA+PiAgIHJlY29yZF9mdWxsX2FyY2hfbGlzdF9h ZGRfcmVnIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbnVtKQ0KPiA+PiAgIHsN Cj4gPj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWM7DQo+ID4+ICsgIHJlY29yZF9m dWxsX2VudHJ5IHJlYzsNCj4gPj4NCj4gPj4gICAgIGlmIChyZWNvcmRfZGVidWcgPiAxKQ0KPiA+ PiAgICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiA+PiBAQCAtNjMzLDkgKzU2Myw5IEBA IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfcmVnIChzdHJ1Y3QgcmVnY2FjaGUNCj4gPj4gKnJl Z2NhY2hlLCBpbnQgcmVnbnVtKQ0KPiA+PiAgIAkJInJlY29yZCBsaXN0LlxuIiwNCj4gPj4gICAJ CXJlZ251bSk7DQo+ID4+DQo+ID4+IC0gIHJlYyA9IHJlY29yZF9mdWxsX3JlZ19hbGxvYyAocmVn Y2FjaGUsIHJlZ251bSk7DQo+ID4+ICsgIHJlYyA9IHJlY29yZF9mdWxsX3JlZ19pbml0IChyZWdj YWNoZSwgcmVnbnVtKTsNCj4gPj4NCj4gPj4gLSAgcmVnY2FjaGUtPmNvb2tlZF9yZWFkIChyZWdu dW0sIHJlY29yZF9mdWxsX2dldF9sb2MgKHJlYykpOw0KPiA+PiArICByZWdjYWNoZS0+Y29va2Vk X3JlYWQgKHJlZ251bSwgcmVjb3JkX2Z1bGxfZ2V0X2xvYyAoJnJlYykpOw0KPiA+Pg0KPiA+PiAg ICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZCAocmVjKTsNCj4gPj4NCj4gPj4gQEAgLTY0OCw3 ICs1NzgsNyBAQCByZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX3JlZyAoc3RydWN0IHJlZ2NhY2hl DQo+ID4+ICpyZWdjYWNoZSwgaW50IHJlZ251bSkNCj4gPj4gICBpbnQNCj4gPj4gICByZWNvcmRf ZnVsbF9hcmNoX2xpc3RfYWRkX21lbSAoQ09SRV9BRERSIGFkZHIsIGludCBsZW4pDQo+ID4+ICAg ew0KPiA+PiAtICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYzsNCj4gPj4gKyAgcmVjb3Jk X2Z1bGxfZW50cnkgcmVjOw0KPiA+Pg0KPiA+PiAgICAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpDQo+ ID4+ICAgICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ID4+IEBAIC02NTksMTIgKzU4OSwx MiBAQCByZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX21lbSAoQ09SRV9BRERSDQo+ID4+IGFkZHIs IGludCBsZW4pDQo+ID4+ICAgICBpZiAoIWFkZHIpCS8qIEZJWE1FOiBXaHk/ICBTb21lIGFyY2gg bXVzdCBwZXJtaXQgaXQuLi4gICovDQo+ID4+ICAgICAgIHJldHVybiAwOw0KPiA+Pg0KPiA+PiAt ICByZWMgPSByZWNvcmRfZnVsbF9tZW1fYWxsb2MgKGFkZHIsIGxlbik7DQo+ID4+ICsgIHJlYyA9 IHJlY29yZF9mdWxsX21lbV9pbml0IChhZGRyLCBsZW4pOw0KPiA+Pg0KPiA+PiAgICAgaWYgKHJl Y29yZF9yZWFkX21lbW9yeSAoY3VycmVudF9pbmZlcmlvciAoKS0+YXJjaCAoKSwgYWRkciwNCj4g Pj4gLQkJCSAgcmVjb3JkX2Z1bGxfZ2V0X2xvYyAocmVjKSwgbGVuKSkNCj4gPj4gKwkJCSAgcmVj b3JkX2Z1bGxfZ2V0X2xvYyAoJnJlYyksIGxlbikpDQo+ID4+ICAgICAgIHsNCj4gPj4gLSAgICAg IHJlY29yZF9mdWxsX21lbV9yZWxlYXNlIChyZWMpOw0KPiA+PiArICAgICAgcmVjb3JkX2Z1bGxf bWVtX2NsZWFudXAgKHJlYyk7DQo+ID4+ICAgICAgICAgcmV0dXJuIC0xOw0KPiA+PiAgICAgICB9 DQo+ID4+DQo+ID4+IEBAIC02NzMsMjcgKzYwMyw2IEBAIHJlY29yZF9mdWxsX2FyY2hfbGlzdF9h ZGRfbWVtIChDT1JFX0FERFINCj4gYWRkciwNCj4gPj4gaW50IGxlbikNCj4gPj4gICAgIHJldHVy biAwOw0KPiA+PiAgIH0NCj4gPj4NCj4gPj4gLS8qIEFkZCBhIHJlY29yZF9mdWxsX2VuZCB0eXBl IHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSB0bw0KPiA+PiAtICAgcmVjb3JkX2Z1bGxfYXJjaF9s aXN0LiAgKi8NCj4gPj4gLQ0KPiA+PiAtaW50DQo+ID4+IC1yZWNvcmRfZnVsbF9hcmNoX2xpc3Rf YWRkX2VuZCAodm9pZCkNCj4gPj4gLXsNCj4gPj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5 ICpyZWM7DQo+ID4+IC0NCj4gPj4gLSAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpDQo+ID4+IC0gICAg Z2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywNCj4gPj4gLQkJIlByb2Nlc3MgcmVjb3JkOiBhZGQgZW5k IHRvIGFyY2ggbGlzdC5cbiIpOw0KPiA+PiAtDQo+ID4+IC0gIHJlYyA9IHJlY29yZF9mdWxsX2Vu ZF9hbGxvYyAoKTsNCj4gPj4gLSAgcmVjLT51LmVuZC5zaWd2YWwgPSBHREJfU0lHTkFMXzA7DQo+ ID4+IC0gIHJlYy0+dS5lbmQuaW5zbl9udW0gPSArK3JlY29yZF9mdWxsX2luc25fY291bnQ7DQo+ ID4+IC0NCj4gPj4gLSAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZCAocmVjKTsNCj4gPj4gLQ0K PiA+PiAtICByZXR1cm4gMDsNCj4gPj4gLX0NCj4gPj4gLQ0KPiA+PiAgIHN0YXRpYyB2b2lkDQo+ ID4+ICAgcmVjb3JkX2Z1bGxfY2hlY2tfaW5zbl9udW0gKHZvaWQpDQo+ID4+ICAgew0KPiA+PiBA QCAtNzI1LDggKzYzNCw3IEBAIHJlY29yZF9mdWxsX21lc3NhZ2UgKHN0cnVjdCByZWdjYWNoZSAq cmVnY2FjaGUsDQo+ID4+IGVudW0gZ2RiX3NpZ25hbCBzaWduYWwpDQo+ID4+DQo+ID4+ICAgICB0 cnkNCj4gPj4gICAgICAgew0KPiA+PiAtICAgICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hlYWQg PSBOVUxMOw0KPiA+PiAtICAgICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwgPSBOVUxMOw0K PiA+PiArICAgICAgcmVjb3JkX2Z1bGxfcmVzZXRfaW5jb21wbGV0ZSAoKTsNCj4gPj4NCj4gPj4g ICAgICAgICAvKiBDaGVjayByZWNvcmRfZnVsbF9pbnNuX251bS4gICovDQo+ID4+ICAgICAgICAg cmVjb3JkX2Z1bGxfY2hlY2tfaW5zbl9udW0gKCk7DQo+ID4+IEBAIC03NDYsMjAgKzY1NCwxNiBA QCByZWNvcmRfZnVsbF9tZXNzYWdlIChzdHJ1Y3QgcmVnY2FjaGUNCj4gKnJlZ2NhY2hlLA0KPiA+ PiBlbnVtIGdkYl9zaWduYWwgc2lnbmFsKQ0KPiA+PiAgIAkgdGhlIHVzZXIgc2F5cyBzb21ldGhp bmcgZGlmZmVyZW50LCBsaWtlICJkZWxpdmVyIHRoaXMgc2lnbmFsIg0KPiA+PiAgIAkgZHVyaW5n IHRoZSByZXBsYXkgbW9kZSkuDQo+ID4+DQo+ID4+IC0JIFVzZXIgc2hvdWxkIHVuZGVyc3RhbmQg dGhhdCBub3RoaW5nIGhlIGRvZXMgZHVyaW5nIHRoZSByZXBsYXkNCj4gPj4gLQkgbW9kZSB3aWxs IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGNoaWxkLiAgSWYgaGUgdHJpZXMsDQo+ID4+ICsJ IFVzZXIgc2hvdWxkIHVuZGVyc3RhbmQgdGhhdCBub3RoaW5nIHRoZXkgZG8gZHVyaW5nIHRoZSBy ZXBsYXkNCj4gPj4gKwkgbW9kZSB3aWxsIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGNoaWxk LiAgSWYgdGhleSB0cnksDQo+ID4+ICAgCSB0aGVuIHRoYXQgaXMgYSB1c2VyIGVycm9yLg0KPiA+ Pg0KPiA+PiAgIAkgQnV0IHdlIHNob3VsZCBzdGlsbCBkZWxpdmVyIHRoZSBzaWduYWwgdG8gZ2Ri IGR1cmluZyB0aGUgcmVwbGF5LA0KPiA+PiAgIAkgaWYgd2UgZGVsaXZlcmVkIGl0IGR1cmluZyB0 aGUgcmVjb3JkaW5nLiAgVGhlcmVmb3JlIHdlIHNob3VsZA0KPiA+PiAgIAkgcmVjb3JkIHRoZSBz aWduYWwgZHVyaW5nIHJlY29yZF9mdWxsX3dhaXQsIG5vdA0KPiA+PiAgIAkgcmVjb3JkX2Z1bGxf cmVzdW1lLiAgKi8NCj4gPj4gLSAgICAgIGlmIChyZWNvcmRfZnVsbF9saXN0ICE9ICZyZWNvcmRf ZnVsbF9maXJzdCkgIC8qIEZJWE1FIGJldHRlciB3YXkNCj4gPj4gLQkJCQkJCSAgICAgIHRvIGNo ZWNrICovDQo+ID4+IC0Jew0KPiA+PiAtCSAgZ2RiX2Fzc2VydCAocmVjb3JkX2Z1bGxfbGlzdC0+ dHlwZSA9PSByZWNvcmRfZnVsbF9lbmQpOw0KPiA+PiAtCSAgcmVjb3JkX2Z1bGxfbGlzdC0+dS5l bmQuc2lndmFsID0gc2lnbmFsOw0KPiA+PiAtCX0NCj4gPj4gKyAgICAgIGlmIChzaWduYWwgIT0g R0RCX1NJR05BTF8wICYmICFyZWNvcmRfZnVsbF9saXN0LmVtcHR5ICgpKQ0KPiA+PiArCXJlY29y ZF9mdWxsX2xpc3RbcmVjb3JkX2Z1bGxfbmV4dF9pbnNuIC0gMV0uc2lndmFsID0gc2lnbmFsOw0K PiA+Pg0KPiA+PiAgICAgICAgIGlmIChzaWduYWwgPT0gR0RCX1NJR05BTF8wDQo+ID4+ICAgCSAg fHwgIWdkYmFyY2hfcHJvY2Vzc19yZWNvcmRfc2lnbmFsX3AgKGdkYmFyY2gpKQ0KPiA+PiBAQCAt Nzc4LDEzICs2ODIsMTEgQEAgcmVjb3JkX2Z1bGxfbWVzc2FnZSAoc3RydWN0IHJlZ2NhY2hlDQo+ ICpyZWdjYWNoZSwNCj4gPj4gZW51bSBnZGJfc2lnbmFsIHNpZ25hbCkNCj4gPj4gICAgICAgfQ0K PiA+PiAgICAgY2F0Y2ggKGNvbnN0IGdkYl9leGNlcHRpb24gJmV4KQ0KPiA+PiAgICAgICB7DQo+ ID4+IC0gICAgICByZWNvcmRfZnVsbF9saXN0X3JlbGVhc2UgKHJlY29yZF9mdWxsX2FyY2hfbGlz dF90YWlsKTsNCj4gPj4gKyAgICAgIHJlY29yZF9mdWxsX3Jlc2V0X2luY29tcGxldGUgKCk7DQo+ ID4+ICAgICAgICAgdGhyb3c7DQo+ID4+ICAgICAgIH0NCj4gPj4NCj4gPj4gLSAgcmVjb3JkX2Z1 bGxfbGlzdC0+bmV4dCA9IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9oZWFkOw0KPiA+PiAtICByZWNv cmRfZnVsbF9hcmNoX2xpc3RfaGVhZC0+cHJldiA9IHJlY29yZF9mdWxsX2xpc3Q7DQo+ID4+IC0g IHJlY29yZF9mdWxsX2xpc3QgPSByZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbDsNCj4gPj4gKyAg cmVjb3JkX2Z1bGxfc2F2ZV9pbnN0cnVjdGlvbiAoKTsNCj4gPj4NCj4gPj4gICAgIGlmIChyZWNv cmRfZnVsbF9pbnNuX251bSA9PSByZWNvcmRfZnVsbF9pbnNuX21heF9udW0pDQo+ID4+ICAgICAg IHJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZV9maXJzdCAoKTsNCj4gPj4gQEAgLTgyOSw5ICs3MzEs OSBAQCBzdGF0aWMgZW51bSB0YXJnZXRfc3RvcF9yZWFzb24NCj4gPj4gcmVjb3JkX2Z1bGxfc3Rv cF9yZWFzb24NCj4gPj4gICAgICBlbnRyaWVzIGFuZCBtZW1vcnkgZW50cmllcywgZm9sbG93ZWQg YnkgYW4gJ2VuZCcgZW50cnkuICAqLw0KPiA+Pg0KPiA+PiAgIHN0YXRpYyBpbmxpbmUgdm9pZA0K PiA+PiAtcmVjb3JkX2Z1bGxfZXhlY19pbnNuIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0K PiA+PiAtCQkgICAgICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsDQo+ID4+IC0JCSAgICAgICBz dHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKmVudHJ5KQ0KPiA+PiArcmVjb3JkX2Z1bGxfZXhlY19l bnRyeSAocmVnY2FjaGUgKnJlZ2NhY2hlLA0KPiA+PiArCQkJZ2RiYXJjaCAqZ2RiYXJjaCwNCj4g Pj4gKwkJCXJlY29yZF9mdWxsX2VudHJ5ICplbnRyeSkNCj4gPj4gICB7DQo+ID4+ICAgICBzd2l0 Y2ggKGVudHJ5LT50eXBlKQ0KPiA+PiAgICAgICB7DQo+ID4+IEBAIC05MDksNiArODExLDE1IEBA IHJlY29yZF9mdWxsX2V4ZWNfaW5zbiAoc3RydWN0IHJlZ2NhY2hlDQo+ICpyZWdjYWNoZSwNCj4g Pj4gICAgICAgfQ0KPiA+PiAgIH0NCj4gPiBBZ2FpbiBmdW5jdGlvbiBjb21tZW50Li4g8J+YiQ0K PiANCj4gRGFybiBJJ20gcmVhbGx5IGJhZCBhdCB0aGVzZSBsb2wNCj4gDQo+IEZpeGVkIDopDQo+ IA0KPiA+DQo+ID4+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gPj4gK3JlY29yZF9mdWxsX2V4ZWNf aW5zbiAocmVnY2FjaGUgKnJlZ2NhY2hlLA0KPiA+PiArCQkgICAgICAgZ2RiYXJjaCAqZ2RiYXJj aCwNCj4gPj4gKwkJICAgICAgIHJlY29yZF9mdWxsX2luc3RydWN0aW9uICZpbnNuKQ0KPiA+PiAr ew0KPiA+PiArICBmb3IgKGF1dG8gJmVudHJ5IDogaW5zbi5lZmZlY3RzKQ0KPiA+PiArICAgIHJl Y29yZF9mdWxsX2V4ZWNfZW50cnkgKHJlZ2NhY2hlLCBnZGJhcmNoLCAmZW50cnkpOw0KPiA+PiAr fQ0KPiA+PiArDQo+ID4+ICAgc3RhdGljIHZvaWQgcmVjb3JkX2Z1bGxfcmVzdG9yZSAoc3RydWN0 IGJmZCAmY2JmZCk7DQo+ID4+DQo+ID4+ICAgLyogQXN5bmNocm9ub3VzIHNpZ25hbCBoYW5kbGUg cmVnaXN0ZXJlZCBhcyBldmVudCBsb29wIHNvdXJjZSBmb3Igd2hlbg0KPiA+PiBAQCAtOTgzLDEw ICs4OTQsNyBAQCByZWNvcmRfZnVsbF9vcGVuIChjb25zdCBjaGFyICphcmdzLCBpbnQgZnJvbV90 dHkpDQo+ID4+ICAgICByZWNvcmRfcHJlb3BlbiAoKTsNCj4gPj4NCj4gPj4gICAgIC8qIFJlc2V0 ICovDQo+ID4+IC0gIHJlY29yZF9mdWxsX2luc25fbnVtID0gMDsNCj4gPj4gLSAgcmVjb3JkX2Z1 bGxfaW5zbl9jb3VudCA9IDA7DQo+ID4+IC0gIHJlY29yZF9mdWxsX2xpc3QgPSAmcmVjb3JkX2Z1 bGxfZmlyc3Q7DQo+ID4+IC0gIHJlY29yZF9mdWxsX2xpc3QtPm5leHQgPSBOVUxMOw0KPiA+PiAr ICByZWNvcmRfZnVsbF9yZXNldF9oaXN0b3J5ICgpOw0KPiA+Pg0KPiA+PiAgICAgYmZkICpjYmZk ID0gZ2V0X2luZmVyaW9yX2NvcmVfYmZkIChjdXJyZW50X2luZmVyaW9yICgpKTsNCj4gPj4gICAg IGlmIChjYmZkICE9IG51bGxwdHIpDQo+ID4+IEBAIC0xMDE0LDcgKzkyMiw3IEBAIHJlY29yZF9m dWxsX2Jhc2VfdGFyZ2V0OjpjbG9zZSAoKQ0KPiA+PiAgICAgaWYgKHJlY29yZF9kZWJ1ZykNCj4g Pj4gICAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRf ZnVsbF9jbG9zZVxuIik7DQo+ID4+DQo+ID4+IC0gIHJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZSAo cmVjb3JkX2Z1bGxfbGlzdCk7DQo+ID4+ICsgIHJlY29yZF9mdWxsX3Jlc2V0X2hpc3RvcnkgKCk7 DQo+ID4+DQo+ID4+ICAgICAvKiBSZWxlYXNlIHJlY29yZF9mdWxsX2NvcmVfcmVnYnVmLiAgKi8N Cj4gPj4gICAgIGlmIChyZWNvcmRfZnVsbF9jb3JlX3JlZ2J1ZikNCj4gPj4gQEAgLTEzMTMsNyAr MTIyMSw2IEBAIHJlY29yZF9mdWxsX3dhaXRfMSAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywNCj4g Pj4gICAgICAgICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IHJlZ2NhY2hlLT5hcmNoICgpOw0K PiA+PiAgICAgICAgIGNvbnN0IGFkZHJlc3Nfc3BhY2UgKmFzcGFjZSA9IGN1cnJlbnRfaW5mZXJp b3IgKCktPmFzcGFjZS5nZXQgKCk7DQo+ID4+ICAgICAgICAgaW50IGNvbnRpbnVlX2ZsYWcgPSAx Ow0KPiA+PiAtICAgICAgaW50IGZpcnN0X3JlY29yZF9mdWxsX2VuZCA9IDE7DQo+ID4+DQo+ID4+ ICAgICAgICAgdHJ5DQo+ID4+ICAgCXsNCj4gPj4gQEAgLTEzMjIsNyArMTIyOSw2IEBAIHJlY29y ZF9mdWxsX3dhaXRfMSAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywNCj4gPj4gICAJICByZWNvcmRf ZnVsbF9zdG9wX3JlYXNvbiA9IFRBUkdFVF9TVE9QUEVEX0JZX05PX1JFQVNPTjsNCj4gPj4gICAJ ICBzdGF0dXMtPnNldF9zdG9wcGVkIChHREJfU0lHTkFMXzApOw0KPiA+Pg0KPiA+PiAtCSAgLyog Q2hlY2sgYnJlYWtwb2ludCB3aGVuIGZvcndhcmQgZXhlY3V0ZS4gICovDQo+ID4+ICAgCSAgaWYg KGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19GT1JXQVJEKQ0KPiA+PiAgIAkgICAgew0KPiA+ PiAgIAkgICAgICB0bXBfcGMgPSByZWdjYWNoZV9yZWFkX3BjIChyZWdjYWNoZSk7DQo+ID4+IEBA IC0xMzMwLDggKzEyMzYsNyBAQCByZWNvcmRfZnVsbF93YWl0XzEgKHN0cnVjdCB0YXJnZXRfb3Bz ICpvcHMsDQo+ID4+DQo+ID4+ICZyZWNvcmRfZnVsbF9zdG9wX3JlYXNvbikpDQo+ID4+ICAgCQl7 DQo+ID4+ICAgCQkgIGlmIChyZWNvcmRfZGVidWcpDQo+ID4+IC0JCSAgICBnZGJfcHJpbnRmIChn ZGJfc3RkbG9nLA0KPiA+PiAtCQkJCSJQcm9jZXNzIHJlY29yZDogYnJlYWsgYXQgJXMuXG4iLA0K PiA+PiArCQkgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiBicmVh ayBhdCAlcy5cbiIsDQo+ID4+ICAgCQkJCXBhZGRyZXNzIChnZGJhcmNoLCB0bXBfcGMpKTsNCj4g Pj4gICAJCSAgZ290byByZXBsYXlfb3V0Ow0KPiA+PiAgIAkJfQ0KPiA+PiBAQCAtMTM0NCwxMCAr MTI0OSwxMCBAQCByZWNvcmRfZnVsbF93YWl0XzEgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsDQo+ ID4+ICAgCSAgICAgdGhlIHNpZ25hbC4gICovDQo+ID4+ICAgCSAgdGFyZ2V0X3Rlcm1pbmFsOjpv dXJzICgpOw0KPiA+Pg0KPiA+PiAtCSAgLyogSW4gRVhFQ19GT1JXQVJEIG1vZGUsIHJlY29yZF9m dWxsX2xpc3QgcG9pbnRzIHRvIHRoZSB0YWlsIG9mDQo+ID4+IHByZXYNCj4gPj4gLQkgICAgIGlu c3RydWN0aW9uLiAgKi8NCj4gPj4gLQkgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNf Rk9SV0FSRCAmJiByZWNvcmRfZnVsbF9saXN0LQ0KPiA+Pj4gbmV4dCkNCj4gPj4gLQkgICAgcmVj b3JkX2Z1bGxfbGlzdCA9IHJlY29yZF9mdWxsX2xpc3QtPm5leHQ7DQo+ID4+ICsJICAvKiBJbiBF WEVDX0ZPUldBUkQgbW9kZSwgcmVjb3JkX2Z1bGxfbmV4dF9pbnNuIGlzIHRoZSBuZXh0DQo+ID4+ ICsJICAgICBpbnN0cnVjdGlvbiB0byBiZSBleGVjdXRlZC4gICovDQo+ID4+ICsJICBpZiAoZXhl Y3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpDQo+ID4+ICsJICAgIHJlY29yZF9mdWxs X25leHRfaW5zbi0tOw0KPiA+Pg0KPiA+PiAgIAkgIC8qIExvb3Agb3ZlciB0aGUgcmVjb3JkX2Z1 bGxfbGlzdCwgbG9va2luZyBmb3IgdGhlIG5leHQgcGxhY2UgdG8NCj4gPj4gICAJICAgICBzdG9w LiAgKi8NCj4gPj4gQEAgLTEzNTUsMTA4ICsxMjYwLDkyIEBAIHJlY29yZF9mdWxsX3dhaXRfMSAo c3RydWN0IHRhcmdldF9vcHMgKm9wcywNCj4gPj4gICAJICAgIHsNCj4gPj4gICAJICAgICAgLyog Q2hlY2sgZm9yIGJlZ2lubmluZyBhbmQgZW5kIG9mIGxvZy4gICovDQo+ID4+ICAgCSAgICAgIGlm IChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRQ0KPiA+PiAtCQkgICYmIHJlY29y ZF9mdWxsX2xpc3QgPT0gJnJlY29yZF9mdWxsX2ZpcnN0KQ0KPiA+PiArCQkgICYmIHJlY29yZF9m dWxsX25leHRfaW5zbiA8IDApDQo+ID4+ICAgCQl7DQo+ID4+ICAgCQkgIC8qIEhpdCBiZWdpbm5p bmcgb2YgcmVjb3JkIGxvZyBpbiByZXZlcnNlLiAgKi8NCj4gPj4gICAJCSAgc3RhdHVzLT5zZXRf bm9faGlzdG9yeSAoKTsNCj4gPj4gKwkJICByZWNvcmRfZnVsbF9uZXh0X2luc24gPSAwOw0KPiA+ PiAgIAkJICBicmVhazsNCj4gPj4gICAJCX0NCj4gPj4gICAJICAgICAgaWYgKGV4ZWN1dGlvbl9k aXJlY3Rpb24gIT0gRVhFQ19SRVZFUlNFDQo+ID4+IC0JCSAgJiYgIXJlY29yZF9mdWxsX2xpc3Qt Pm5leHQpDQo+ID4+ICsJCSAgJiYgcmVjb3JkX2Z1bGxfbmV4dF9pbnNuID09IHJlY29yZF9mdWxs X2xpc3Quc2l6ZSAoKSkNCj4gPj4gICAJCXsNCj4gPj4gICAJCSAgLyogSGl0IGVuZCBvZiByZWNv cmQgbG9nIGdvaW5nIGZvcndhcmQuICAqLw0KPiA+PiAgIAkJICBzdGF0dXMtPnNldF9ub19oaXN0 b3J5ICgpOw0KPiA+PiAgIAkJICBicmVhazsNCj4gPj4gICAJCX0NCj4gPj4NCj4gPj4gLQkgICAg ICByZWNvcmRfZnVsbF9leGVjX2luc24gKHJlZ2NhY2hlLCBnZGJhcmNoLCByZWNvcmRfZnVsbF9s aXN0KTsNCj4gPj4gKwkgICAgICByZWNvcmRfZnVsbF9leGVjX2luc24NCj4gPj4gKwkJKHJlZ2Nh Y2hlLCBnZGJhcmNoLA0KPiA+PiArCQkgcmVjb3JkX2Z1bGxfbGlzdFtyZWNvcmRfZnVsbF9uZXh0 X2luc25dKTsNCj4gPj4NCj4gPj4gLQkgICAgICBpZiAocmVjb3JkX2Z1bGxfbGlzdC0+dHlwZSA9 PSByZWNvcmRfZnVsbF9lbmQpDQo+ID4+ICsJICAgICAgLyogc3RlcCAqLw0KPiA+PiArCSAgICAg IGlmIChyZWNvcmRfZnVsbF9yZXN1bWVfc3RlcCkNCj4gPj4gICAJCXsNCj4gPj4gICAJCSAgaWYg KHJlY29yZF9kZWJ1ZyA+IDEpDQo+ID4+IC0JCSAgICBnZGJfcHJpbnRmDQo+ID4+IC0JCSAgICAg IChnZGJfc3RkbG9nLA0KPiA+PiAtCQkgICAgICAgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfZnVs bF9lbmQgJXMgdG8gIg0KPiA+PiAtCQkgICAgICAgImluZmVyaW9yLlxuIiwNCj4gPj4gLQkJICAg ICAgIGhvc3RfYWRkcmVzc190b19zdHJpbmcgKHJlY29yZF9mdWxsX2xpc3QpKTsNCj4gPj4gLQ0K PiA+PiAtCQkgIGlmIChmaXJzdF9yZWNvcmRfZnVsbF9lbmQNCj4gPj4gLQkJICAgICAgJiYgZXhl Y3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpDQo+ID4+IC0JCSAgICB7DQo+ID4+IC0J CSAgICAgIC8qIFdoZW4gcmV2ZXJzZSBleGVjdXRlLCB0aGUgZmlyc3QNCj4gPj4gLQkJCSByZWNv cmRfZnVsbF9lbmQgaXMgdGhlIHBhcnQgb2YgY3VycmVudA0KPiA+PiAtCQkJIGluc3RydWN0aW9u LiAgKi8NCj4gPj4gLQkJICAgICAgZmlyc3RfcmVjb3JkX2Z1bGxfZW5kID0gMDsNCj4gPj4gLQkJ ICAgIH0NCj4gPj4gLQkJICBlbHNlDQo+ID4+IC0JCSAgICB7DQo+ID4+IC0JCSAgICAgIC8qIElu IEVYRUNfUkVWRVJTRSBtb2RlLCB0aGlzIGlzIHRoZQ0KPiA+PiAtCQkJIHJlY29yZF9mdWxsX2Vu ZCBvZiBwcmV2IGluc3RydWN0aW9uLiAgSW4NCj4gPj4gLQkJCSBFWEVDX0ZPUldBUkQgbW9kZSwg dGhpcyBpcyB0aGUNCj4gPj4gLQkJCSByZWNvcmRfZnVsbF9lbmQgb2YgY3VycmVudCBpbnN0cnVj dGlvbi4gICovDQo+ID4+IC0JCSAgICAgIC8qIHN0ZXAgKi8NCj4gPj4gLQkJICAgICAgaWYgKHJl Y29yZF9mdWxsX3Jlc3VtZV9zdGVwKQ0KPiA+PiAtCQkJew0KPiA+PiAtCQkJICBpZiAocmVjb3Jk X2RlYnVnID4gMSkNCj4gPj4gLQkJCSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiA+PiAt CQkJCQkiUHJvY2VzcyByZWNvcmQ6IHN0ZXAuXG4iKTsNCj4gPj4gLQkJCSAgY29udGludWVfZmxh ZyA9IDA7DQo+ID4+IC0JCQl9DQo+ID4+IC0NCj4gPj4gLQkJICAgICAgLyogY2hlY2sgYnJlYWtw b2ludCAqLw0KPiA+PiAtCQkgICAgICB0bXBfcGMgPSByZWdjYWNoZV9yZWFkX3BjIChyZWdjYWNo ZSk7DQo+ID4+IC0JCSAgICAgIGlmIChyZWNvcmRfY2hlY2tfc3RvcHBlZF9ieV9icmVha3BvaW50 DQo+ID4+IC0JCQkgIChhc3BhY2UsIHRtcF9wYywgJnJlY29yZF9mdWxsX3N0b3BfcmVhc29uKSkN Cj4gPj4gLQkJCXsNCj4gPj4gLQkJCSAgaWYgKHJlY29yZF9kZWJ1ZykNCj4gPj4gLQkJCSAgICBn ZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiA+PiAtCQkJCQkiUHJvY2VzcyByZWNvcmQ6IGJyZWFr ICINCj4gPj4gLQkJCQkJImF0ICVzLlxuIiwNCj4gPj4gLQkJCQkJcGFkZHJlc3MgKGdkYmFyY2gs IHRtcF9wYykpOw0KPiA+PiArCQkgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywNCj4gPj4gKwkJ CQkiUHJvY2VzcyByZWNvcmQ6IHN0ZXAuXG4iKTsNCj4gPj4gKwkJICBjb250aW51ZV9mbGFnID0g MDsNCj4gPj4gKwkJfQ0KPiA+Pg0KPiA+PiAtCQkJICBjb250aW51ZV9mbGFnID0gMDsNCj4gPj4g LQkJCX0NCj4gPj4gKwkgICAgICAvKiBjaGVjayBicmVha3BvaW50ICovDQo+ID4+ICsJICAgICAg dG1wX3BjID0gcmVnY2FjaGVfcmVhZF9wYyAocmVnY2FjaGUpOw0KPiA+PiArCSAgICAgIGlmIChy ZWNvcmRfY2hlY2tfc3RvcHBlZF9ieV9icmVha3BvaW50DQo+ID4+ICsJCSAgKGFzcGFjZSwgdG1w X3BjLCAmcmVjb3JkX2Z1bGxfc3RvcF9yZWFzb24pKQ0KPiA+PiArCQl7DQo+ID4+ICsJCSAgaWYg KHJlY29yZF9kZWJ1ZykNCj4gPj4gKwkJICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ID4+ ICsJCQkJIlByb2Nlc3MgcmVjb3JkOiBicmVhayAiDQo+ID4+ICsJCQkJImF0ICVzLlxuIiwNCj4g Pj4gKwkJCQlwYWRkcmVzcyAoZ2RiYXJjaCwgdG1wX3BjKSk7DQo+ID4+DQo+ID4+IC0JCSAgICAg IGlmIChyZWNvcmRfZnVsbF9zdG9wX3JlYXNvbg0KPiA+PiAtCQkJICA9PSBUQVJHRVRfU1RPUFBF RF9CWV9XQVRDSFBPSU5UKQ0KPiA+PiAtCQkJew0KPiA+PiAtCQkJICBpZiAocmVjb3JkX2RlYnVn KQ0KPiA+PiAtCQkJICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ID4+IC0JCQkJCSJQcm9j ZXNzIHJlY29yZDogaGl0IGh3ICINCj4gPj4gLQkJCQkJIndhdGNocG9pbnQuXG4iKTsNCj4gPj4g LQkJCSAgY29udGludWVfZmxhZyA9IDA7DQo+ID4+IC0JCQl9DQo+ID4+IC0JCSAgICAgIC8qIENo ZWNrIHRhcmdldCBzaWduYWwgKi8NCj4gPj4gLQkJICAgICAgaWYgKHJlY29yZF9mdWxsX2xpc3Qt PnUuZW5kLnNpZ3ZhbCAhPSBHREJfU0lHTkFMXzApDQo+ID4+IC0JCQkvKiBGSVhNRTogYmV0dGVy IHdheSB0byBjaGVjayAqLw0KPiA+PiAtCQkJY29udGludWVfZmxhZyA9IDA7DQo+ID4+IC0JCSAg ICB9DQo+ID4+ICsJCSAgY29udGludWVfZmxhZyA9IDA7DQo+ID4+ICAgCQl9DQo+ID4+DQo+ID4+ IC0JICAgICAgaWYgKGNvbnRpbnVlX2ZsYWcpDQo+ID4+ICsJICAgICAgaWYgKHJlY29yZF9mdWxs X3N0b3BfcmVhc29uDQo+ID4+ICsJCSAgPT0gVEFSR0VUX1NUT1BQRURfQllfV0FUQ0hQT0lOVCkN Cj4gPj4gICAJCXsNCj4gPj4gLQkJICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JF VkVSU0UpDQo+ID4+IC0JCSAgICB7DQo+ID4+IC0JCSAgICAgIGlmIChyZWNvcmRfZnVsbF9saXN0 LT5wcmV2KQ0KPiA+PiAtCQkJcmVjb3JkX2Z1bGxfbGlzdCA9IHJlY29yZF9mdWxsX2xpc3QtPnBy ZXY7DQo+ID4+IC0JCSAgICB9DQo+ID4+IC0JCSAgZWxzZQ0KPiA+PiAtCQkgICAgew0KPiA+PiAt CQkgICAgICBpZiAocmVjb3JkX2Z1bGxfbGlzdC0+bmV4dCkNCj4gPj4gLQkJCXJlY29yZF9mdWxs X2xpc3QgPSByZWNvcmRfZnVsbF9saXN0LT5uZXh0Ow0KPiA+PiAtCQkgICAgfQ0KPiA+PiArCQkg IGlmIChyZWNvcmRfZGVidWcpDQo+ID4+ICsJCSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0K PiA+PiArCQkJCSJQcm9jZXNzIHJlY29yZDogaGl0IGh3ICINCj4gPj4gKwkJCQkid2F0Y2hwb2lu dC5cbiIpOw0KPiA+PiArCQkgIGNvbnRpbnVlX2ZsYWcgPSAwOw0KPiA+PiAgIAkJfQ0KPiA+PiAr CSAgICAgIGlmIChyZWNvcmRfZnVsbF9saXN0W3JlY29yZF9mdWxsX25leHRfaW5zbl0uc2lndmFs Lmhhc192YWx1ZSAoKSkNCj4gPj4gKwkJY29udGludWVfZmxhZyA9IDA7DQo+ID4+ICsNCj4gPj4g KwkgICAgICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpDQo+ID4+ICsJ CXJlY29yZF9mdWxsX25leHRfaW5zbi0tOw0KPiA+PiArCSAgICAgIGVsc2UNCj4gPj4gKwkJcmVj b3JkX2Z1bGxfbmV4dF9pbnNuKys7DQo+ID4+ICAgCSAgICB9DQo+ID4+ICAgCSAgd2hpbGUgKGNv bnRpbnVlX2ZsYWcpOw0KPiA+Pg0KPiA+PiArCSAgaWYgKHJlY29yZF9mdWxsX25leHRfaW5zbiA8 IDApDQo+ID4+ICsJICAgIHsNCj4gPj4gKwkgICAgICBnZGJfYXNzZXJ0IChleGVjdXRpb25fZGly ZWN0aW9uID09IEVYRUNfUkVWRVJTRSk7DQo+ID4+ICsJICAgICAgcmVjb3JkX2Z1bGxfbmV4dF9p bnNuID0gMDsNCj4gPj4gKwkgICAgfQ0KPiA+PiArCSAgZWxzZSBpZiAocmVjb3JkX2Z1bGxfbmV4 dF9pbnNuID4gcmVjb3JkX2Z1bGxfbGlzdC5zaXplICgpKQ0KPiA+PiArCSAgICB7DQo+ID4+ICsJ ICAgICAgZ2RiX2Fzc2VydCAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX0ZPUldBUkQpOw0K PiA+PiArCSAgICAgIHJlY29yZF9mdWxsX25leHRfaW5zbiA9IHJlY29yZF9mdWxsX2xpc3Quc2l6 ZSAoKTsNCj4gPj4gKwkgICAgfQ0KPiA+PiArCSAgLyogUmVzZXQgdGhlIGN1cnJlbnQgaW5zdHJ1 Y3Rpb24gdG8gcG9pbnQgdG8gdGhlIG9uZSB0byBiZSByZXBsYXllZA0KPiA+PiArCSAgICAgbW92 aW5nIGZvcndhcmQuICAqLw0KPiA+PiArCSAgZWxzZSBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9 PSBFWEVDX1JFVkVSU0UpDQo+ID4+ICsJICAgIHJlY29yZF9mdWxsX25leHRfaW5zbisrOw0KPiA+ PiArDQo+ID4+ICAgCXJlcGxheV9vdXQ6DQo+ID4+ICAgCSAgaWYgKHN0YXR1cy0+a2luZCAoKSA9 PSBUQVJHRVRfV0FJVEtJTkRfU1RPUFBFRCkNCj4gPj4gICAJICAgIHsNCj4gPj4gKwkgICAgICBp bnQgaW5zbiA9IChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfRk9SV0FSRCkNCj4gPj4gKwkJ CSA/IHJlY29yZF9mdWxsX25leHRfaW5zbiAtIDEgOiByZWNvcmRfZnVsbF9uZXh0X2luc247DQo+ ID4+ICAgCSAgICAgIGlmIChyZWNvcmRfZnVsbF9nZXRfc2lnKQ0KPiA+PiAgIAkJc3RhdHVzLT5z ZXRfc3RvcHBlZCAoR0RCX1NJR05BTF9JTlQpOw0KPiA+PiAtCSAgICAgIGVsc2UgaWYgKHJlY29y ZF9mdWxsX2xpc3QtPnUuZW5kLnNpZ3ZhbCAhPSBHREJfU0lHTkFMXzApDQo+ID4+IC0JCS8qIEZJ WE1FOiBiZXR0ZXIgd2F5IHRvIGNoZWNrICovDQo+ID4+IC0JCXN0YXR1cy0+c2V0X3N0b3BwZWQg KHJlY29yZF9mdWxsX2xpc3QtPnUuZW5kLnNpZ3ZhbCk7DQo+ID4+ICsJICAgICAgZWxzZSBpZiAo cmVjb3JkX2Z1bGxfbGlzdFtpbnNuXS5zaWd2YWwuaGFzX3ZhbHVlICgpKQ0KPiA+PiArCQlzdGF0 dXMtPnNldF9zdG9wcGVkDQo+ID4+ICsJCSAgKHJlY29yZF9mdWxsX2xpc3RbaW5zbl0uc2lndmFs LnZhbHVlICgpKTsNCj4gPj4gICAJICAgICAgZWxzZQ0KPiA+PiAgIAkJc3RhdHVzLT5zZXRfc3Rv cHBlZCAoR0RCX1NJR05BTF9UUkFQKTsNCj4gPj4gICAJICAgIH0NCj4gPj4gQEAgLTE0NjQsMTIg KzEzNTMsOSBAQCByZWNvcmRfZnVsbF93YWl0XzEgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsDQo+ ID4+ICAgICAgICAgY2F0Y2ggKGNvbnN0IGdkYl9leGNlcHRpb24gJmV4KQ0KPiA+PiAgIAl7DQo+ ID4+ICAgCSAgaWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNFKQ0KPiA+PiAt CSAgICB7DQo+ID4+IC0JICAgICAgaWYgKHJlY29yZF9mdWxsX2xpc3QtPm5leHQpDQo+ID4+IC0J CXJlY29yZF9mdWxsX2xpc3QgPSByZWNvcmRfZnVsbF9saXN0LT5uZXh0Ow0KPiA+PiAtCSAgICB9 DQo+ID4+ICsJICAgIHJlY29yZF9mdWxsX25leHRfaW5zbisrOw0KPiA+PiAgIAkgIGVsc2UNCj4g Pj4gLQkgICAgcmVjb3JkX2Z1bGxfbGlzdCA9IHJlY29yZF9mdWxsX2xpc3QtPnByZXY7DQo+ID4+ ICsJICAgIHJlY29yZF9mdWxsX25leHRfaW5zbi0tOw0KPiA+Pg0KPiA+PiAgIAkgIHRocm93Ow0K PiA+PiAgIAl9DQo+ID4+IEBAIC0xNTU3LDggKzE0NDMsNyBAQCByZWNvcmRfZnVsbF9yZWdpc3Rl cnNfY2hhbmdlIChzdHJ1Y3QgcmVnY2FjaGUNCj4gPj4gKnJlZ2NhY2hlLCBpbnQgcmVnbnVtKQ0K PiA+PiAgICAgLyogQ2hlY2sgcmVjb3JkX2Z1bGxfaW5zbl9udW0uICAqLw0KPiA+PiAgICAgcmVj b3JkX2Z1bGxfY2hlY2tfaW5zbl9udW0gKCk7DQo+ID4+DQo+ID4+IC0gIHJlY29yZF9mdWxsX2Fy Y2hfbGlzdF9oZWFkID0gTlVMTDsNCj4gPj4gLSAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwg PSBOVUxMOw0KPiA+PiArICByZWNvcmRfZnVsbF9yZXNldF9pbmNvbXBsZXRlICgpOw0KPiA+Pg0K PiA+PiAgICAgaWYgKHJlZ251bSA8IDApDQo+ID4+ICAgICAgIHsNCj4gPj4gQEAgLTE1NjgsNyAr MTQ1Myw3IEBAIHJlY29yZF9mdWxsX3JlZ2lzdGVyc19jaGFuZ2UgKHN0cnVjdCByZWdjYWNoZQ0K PiA+PiAqcmVnY2FjaGUsIGludCByZWdudW0pDQo+ID4+ICAgCXsNCj4gPj4gICAJICBpZiAocmVj b3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9yZWcgKHJlZ2NhY2hlLCBpKSkNCj4gPj4gICAJICAgIHsN Cj4gPj4gLQkgICAgICByZWNvcmRfZnVsbF9saXN0X3JlbGVhc2UgKHJlY29yZF9mdWxsX2FyY2hf bGlzdF90YWlsKTsNCj4gPj4gKwkgICAgICByZWNvcmRfZnVsbF9yZXNldF9pbmNvbXBsZXRlICgp Ow0KPiA+PiAgIAkgICAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNv cmQgZXhlY3V0aW9uIGxvZy4iKSk7DQo+ID4+ICAgCSAgICB9DQo+ID4+ICAgCX0NCj4gPj4gQEAg LTE1NzcsMTggKzE0NjIsMTEgQEAgcmVjb3JkX2Z1bGxfcmVnaXN0ZXJzX2NoYW5nZSAoc3RydWN0 DQo+IHJlZ2NhY2hlDQo+ID4+ICpyZWdjYWNoZSwgaW50IHJlZ251bSkNCj4gPj4gICAgICAgew0K PiA+PiAgICAgICAgIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX3JlZyAocmVnY2FjaGUs IHJlZ251bSkpDQo+ID4+ICAgCXsNCj4gPj4gLQkgIHJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZSAo cmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwpOw0KPiA+PiArCSAgcmVjb3JkX2Z1bGxfcmVzZXRf aW5jb21wbGV0ZSAoKTsNCj4gPj4gICAJICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGZhaWxl ZCB0byByZWNvcmQgZXhlY3V0aW9uIGxvZy4iKSk7DQo+ID4+ICAgCX0NCj4gPj4gICAgICAgfQ0K PiA+PiAtICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+ID4+IC0gICAg ew0KPiA+PiAtICAgICAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlIChyZWNvcmRfZnVsbF9hcmNo X2xpc3RfdGFpbCk7DQo+ID4+IC0gICAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGZhaWxl ZCB0byByZWNvcmQgZXhlY3V0aW9uIGxvZy4iKSk7DQo+ID4+IC0gICAgfQ0KPiA+PiAtICByZWNv cmRfZnVsbF9saXN0LT5uZXh0ID0gcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hlYWQ7DQo+ID4+IC0g IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9oZWFkLT5wcmV2ID0gcmVjb3JkX2Z1bGxfbGlzdDsNCj4g Pj4gLSAgcmVjb3JkX2Z1bGxfbGlzdCA9IHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsOw0KPiA+ PiArICByZWNvcmRfZnVsbF9zYXZlX2luc3RydWN0aW9uICgpOw0KPiA+Pg0KPiA+PiAgICAgaWYg KHJlY29yZF9mdWxsX2luc25fbnVtID09IHJlY29yZF9mdWxsX2luc25fbWF4X251bSkNCj4gPj4g ICAgICAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2ZpcnN0ICgpOw0KPiA+PiBAQCAtMTYwNyw3 ICsxNDg1LDcgQEAgcmVjb3JkX2Z1bGxfdGFyZ2V0OjpzdG9yZV9yZWdpc3RlcnMgKHN0cnVjdA0K PiA+PiByZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdubykNCj4gPj4gICAJew0KPiA+PiAgIAkg IGludCBuOw0KPiA+Pg0KPiA+PiAtCSAgLyogTGV0IHVzZXIgY2hvb3NlIGlmIGhlIHdhbnRzIHRv IHdyaXRlIHJlZ2lzdGVyIG9yIG5vdC4gICovDQo+ID4+ICsJICAvKiBMZXQgdXNlciBjaG9vc2Ug aWYgdGhleSB3YW50IHRvIHdyaXRlIHJlZ2lzdGVyIG9yIG5vdC4gICovDQo+ID4gSXQgbWlnaHQg YmUgY2xlYW5lciB0byBtb3ZlIHN1Y2ggY2hhbmdlcyBpbiBhIHNlcGFyYXRlIGNvbW1pdCwNCj4g PiBzaW5jZSB0aGV5IGp1c3QgbWFrZSB0aGlzIGJpZyBwYXRjaCBldmVuIGJpZ2dlci4NCj4gQ29u c2lkZXJpbmcgaXQgaXMganVzdCBhIHRpbnkgY2hhbmdlIHRvIGEgY29tbWVudCwgSSBkb24ndMKg IHRoaW5rIGl0DQo+IG1ha2VzIHRoYXQgbXVjaCBvZiBhIGRpZmZlcmVuY2UsIHJlYWxseS4NCj4g Pg0KPiA+PiAgIAkgIGlmIChyZWdubyA8IDApDQo+ID4+ICAgCSAgICBuID0NCj4gPj4gICAJICAg ICAgcXVlcnkgKF8oIkJlY2F1c2UgR0RCIGlzIGluIHJlcGxheSBtb2RlLCBjaGFuZ2luZyB0aGUg Ig0KPiA+PiBAQCAtMTY0Miw3ICsxNTIwLDcgQEAgcmVjb3JkX2Z1bGxfdGFyZ2V0OjpzdG9yZV9y ZWdpc3RlcnMgKHN0cnVjdA0KPiA+PiByZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdubykNCj4g Pj4gICAJICAgIH0NCj4gPj4NCj4gPj4gICAJICAvKiBEZXN0cm95IHRoZSByZWNvcmQgZnJvbSBo ZXJlIGZvcndhcmQuICAqLw0KPiA+PiAtCSAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2ZvbGxv d2luZyAocmVjb3JkX2Z1bGxfbGlzdCk7DQo+ID4+ICsJICByZWNvcmRfZnVsbF9saXN0X3JlbGVh c2VfZm9sbG93aW5nIChyZWNvcmRfZnVsbF9uZXh0X2luc24pOw0KPiA+PiAgIAl9DQo+ID4+DQo+ ID4+ICAgICAgICAgcmVjb3JkX2Z1bGxfcmVnaXN0ZXJzX2NoYW5nZSAocmVnY2FjaGUsIHJlZ25v KTsNCj4gPj4gQEAgLTE2NzUsMzYgKzE1NTMsMjQgQEAgcmVjb3JkX2Z1bGxfdGFyZ2V0Ojp4ZmVy X3BhcnRpYWwgKGVudW0NCj4gPj4gdGFyZ2V0X29iamVjdCBvYmplY3QsDQo+ID4+ICAgCSAgICBl cnJvciAoXygiUHJvY2VzcyByZWNvcmQgY2FuY2VsZWQgdGhlIG9wZXJhdGlvbi4iKSk7DQo+ID4+ DQo+ID4+ICAgCSAgLyogRGVzdHJveSB0aGUgcmVjb3JkIGZyb20gaGVyZSBmb3J3YXJkLiAgKi8N Cj4gPj4gLQkgIHJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZV9mb2xsb3dpbmcgKHJlY29yZF9mdWxs X2xpc3QpOw0KPiA+PiArCSAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2ZvbGxvd2luZyAocmVj b3JkX2Z1bGxfbmV4dF9pbnNuKTsNCj4gPj4gICAJfQ0KPiA+Pg0KPiA+PiAgICAgICAgIC8qIENo ZWNrIHJlY29yZF9mdWxsX2luc25fbnVtICovDQo+ID4+ICAgICAgICAgcmVjb3JkX2Z1bGxfY2hl Y2tfaW5zbl9udW0gKCk7DQo+ID4+DQo+ID4+ICAgICAgICAgLyogUmVjb3JkIHJlZ2lzdGVycyBj aGFuZ2UgdG8gbGlzdCBhcyBhbiBpbnN0cnVjdGlvbi4gICovDQo+ID4+IC0gICAgICByZWNvcmRf ZnVsbF9hcmNoX2xpc3RfaGVhZCA9IE5VTEw7DQo+ID4+IC0gICAgICByZWNvcmRfZnVsbF9hcmNo X2xpc3RfdGFpbCA9IE5VTEw7DQo+ID4+ICsgICAgICByZWNvcmRfZnVsbF9yZXNldF9pbmNvbXBs ZXRlICgpOw0KPiA+PiAgICAgICAgIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX21lbSAo b2Zmc2V0LCBsZW4pKQ0KPiA+PiAgIAl7DQo+ID4+IC0JICByZWNvcmRfZnVsbF9saXN0X3JlbGVh c2UgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsKTsNCj4gPj4gLQkgIGlmIChyZWNvcmRfZGVi dWcpDQo+ID4+IC0JICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ID4+IC0JCQkiUHJvY2Vz cyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQgIg0KPiA+PiAtCQkJImV4ZWN1dGlvbiBsb2cuIik7 DQo+ID4+IC0JICByZXR1cm4gVEFSR0VUX1hGRVJfRV9JTzsNCj4gPj4gLQl9DQo+ID4+IC0gICAg ICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+ID4+IC0Jew0KPiA+PiAt CSAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbCk7 DQo+ID4+ICsJICByZWNvcmRfZnVsbF9yZXNldF9pbmNvbXBsZXRlICgpOw0KPiA+PiAgIAkgIGlm IChyZWNvcmRfZGVidWcpDQo+ID4+ICAgCSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiA+ PiAgIAkJCSJQcm9jZXNzIHJlY29yZDogZmFpbGVkIHRvIHJlY29yZCAiDQo+ID4+ICAgCQkJImV4 ZWN1dGlvbiBsb2cuIik7DQo+ID4+ICAgCSAgcmV0dXJuIFRBUkdFVF9YRkVSX0VfSU87DQo+ID4+ ICAgCX0NCj4gPj4gLSAgICAgIHJlY29yZF9mdWxsX2xpc3QtPm5leHQgPSByZWNvcmRfZnVsbF9h cmNoX2xpc3RfaGVhZDsNCj4gPj4gLSAgICAgIHJlY29yZF9mdWxsX2FyY2hfbGlzdF9oZWFkLT5w cmV2ID0gcmVjb3JkX2Z1bGxfbGlzdDsNCj4gPj4gLSAgICAgIHJlY29yZF9mdWxsX2xpc3QgPSBy ZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbDsNCj4gPj4gKyAgICAgIHJlY29yZF9mdWxsX3NhdmVf aW5zdHJ1Y3Rpb24gKCk7DQo+ID4+DQo+ID4+ICAgICAgICAgaWYgKHJlY29yZF9mdWxsX2luc25f bnVtID09IHJlY29yZF9mdWxsX2luc25fbWF4X251bSkNCj4gPj4gICAJcmVjb3JkX2Z1bGxfbGlz dF9yZWxlYXNlX2ZpcnN0ICgpOw0KPiA+PiBAQCAtMTg2NSw5ICsxNzMxLDExIEBAIHJlY29yZF9m dWxsX2Jhc2VfdGFyZ2V0OjpnZXRfYm9va21hcmsNCj4gKGNvbnN0DQo+ID4+IGNoYXIgKmFyZ3Ms IGludCBmcm9tX3R0eSkNCj4gPj4gICB7DQo+ID4+ICAgICBjaGFyICpyZXQgPSBOVUxMOw0KPiA+ Pg0KPiA+PiArICBpZiAocmVjb3JkX2Z1bGxfbGlzdC5lbXB0eSAoKSkNCj4gPj4gKyAgICByZXR1 cm4gKGdkYl9ieXRlICopIHJldDsNCj4gPj4gKw0KPiA+PiAgICAgLyogUmV0dXJuIHN0cmluZ2lm aWVkIGZvcm0gb2YgaW5zdHJ1Y3Rpb24gY291bnQuICAqLw0KPiA+PiAtICBpZiAocmVjb3JkX2Z1 bGxfbGlzdCAmJiByZWNvcmRfZnVsbF9saXN0LT50eXBlID09IHJlY29yZF9mdWxsX2VuZCkNCj4g Pj4gLSAgICByZXQgPSB4c3RyZHVwIChwdWxvbmdlc3QgKHJlY29yZF9mdWxsX2xpc3QtPnUuZW5k Lmluc25fbnVtKSk7DQo+ID4+ICsgIHJldCA9IHhzdHJkdXAgKHB1bG9uZ2VzdA0KPiA+PiAocmVj b3JkX2Z1bGxfbGlzdFtyZWNvcmRfZnVsbF9uZXh0X2luc25dLmluc25fbnVtKSk7DQo+ID4+DQo+ ID4+ICAgICBpZiAocmVjb3JkX2RlYnVnKQ0KPiA+PiAgICAgICB7DQo+ID4+IEBAIC0xOTIzLDMw ICsxNzkxLDIyIEBAIHJlY29yZF9mdWxsX2Jhc2VfdGFyZ2V0OjpyZWNvcmRfbWV0aG9kDQo+ID4+ IChwdGlkX3QgcHRpZCkNCj4gPj4gICB2b2lkDQo+ID4+ICAgcmVjb3JkX2Z1bGxfYmFzZV90YXJn ZXQ6OmluZm9fcmVjb3JkICgpDQo+ID4+ICAgew0KPiA+PiAtICBzdHJ1Y3QgcmVjb3JkX2Z1bGxf ZW50cnkgKnA7DQo+ID4+IC0NCj4gPj4gICAgIGlmIChSRUNPUkRfRlVMTF9JU19SRVBMQVkpDQo+ ID4+ICAgICAgIGdkYl9wcmludGYgKF8oIlJlcGxheSBtb2RlOlxuIikpOw0KPiA+PiAgICAgZWxz ZQ0KPiA+PiAgICAgICBnZGJfcHJpbnRmIChfKCJSZWNvcmQgbW9kZTpcbiIpKTsNCj4gPj4NCj4g Pj4gLSAgLyogRmluZCBlbnRyeSBmb3IgZmlyc3QgYWN0dWFsIGluc3RydWN0aW9uIGluIHRoZSBs b2cuICAqLw0KPiA+PiAtICBmb3IgKHAgPSByZWNvcmRfZnVsbF9maXJzdC5uZXh0Ow0KPiA+PiAt ICAgICAgIHAgIT0gTlVMTCAmJiBwLT50eXBlICE9IHJlY29yZF9mdWxsX2VuZDsNCj4gPj4gLSAg ICAgICBwID0gcC0+bmV4dCkNCj4gPj4gLSAgICA7DQo+ID4+IC0NCj4gPj4gICAgIC8qIERvIHdl IGhhdmUgYSBsb2cgYXQgYWxsPyAgKi8NCj4gPj4gLSAgaWYgKHAgIT0gTlVMTCAmJiBwLT50eXBl ID09IHJlY29yZF9mdWxsX2VuZCkNCj4gPj4gKyAgaWYgKCFyZWNvcmRfZnVsbF9saXN0LmVtcHR5 ICgpKQ0KPiA+PiAgICAgICB7DQo+ID4+ICAgICAgICAgLyogRGlzcGxheSBpbnN0cnVjdGlvbiBu dW1iZXIgZm9yIGZpcnN0IGluc3RydWN0aW9uIGluIHRoZSBsb2cuICAqLw0KPiA+PiAtICAgICAg Z2RiX3ByaW50ZiAoXygiTG93ZXN0IHJlY29yZGVkIGluc3RydWN0aW9uIG51bWJlciBpcyAlcy5c biIpLA0KPiA+PiAtCQkgIHB1bG9uZ2VzdCAocC0+dS5lbmQuaW5zbl9udW0pKTsNCj4gPj4gKyAg ICAgIGdkYl9wcmludGYgKF8oIkxvd2VzdCByZWNvcmRlZCBpbnN0cnVjdGlvbiBudW1iZXIgaXMg JXUuXG4iKSwNCj4gPj4gKwkJICByZWNvcmRfZnVsbF9saXN0WzBdLmluc25fbnVtKTsNCj4gPj4N Cj4gPj4gICAgICAgICAvKiBJZiBpbiByZXBsYXkgbW9kZSwgZGlzcGxheSB3aGVyZSB3ZSBhcmUg aW4gdGhlIGxvZy4gICovDQo+ID4+ICAgICAgICAgaWYgKFJFQ09SRF9GVUxMX0lTX1JFUExBWSkN Cj4gPj4gLQlnZGJfcHJpbnRmIChfKCJDdXJyZW50IGluc3RydWN0aW9uIG51bWJlciBpcyAlcy5c biIpLA0KPiA+PiAtCQkgICAgcHVsb25nZXN0IChyZWNvcmRfZnVsbF9saXN0LT51LmVuZC5pbnNu X251bSkpOw0KPiA+PiArCWdkYl9wcmludGYgKF8oIkN1cnJlbnQgaW5zdHJ1Y3Rpb24gbnVtYmVy IGlzICV1LlxuIiksDQo+ID4+ICsJCSAgICByZWNvcmRfZnVsbF9saXN0W3JlY29yZF9mdWxsX25l eHRfaW5zbl0uaW5zbl9udW0pOw0KPiA+Pg0KPiA+PiAgICAgICAgIC8qIERpc3BsYXkgaW5zdHJ1 Y3Rpb24gbnVtYmVyIGZvciBsYXN0IGluc3RydWN0aW9uIGluIHRoZSBsb2cuICAqLw0KPiA+PiAg ICAgICAgIGdkYl9wcmludGYgKF8oIkhpZ2hlc3QgcmVjb3JkZWQgaW5zdHJ1Y3Rpb24gbnVtYmVy IGlzICVzLlxuIiksDQo+ID4+IEBAIC0xOTc1LDcgKzE4MzUsNyBAQA0KPiByZWNvcmRfZnVsbF9i YXNlX3RhcmdldDo6c3VwcG9ydHNfZGVsZXRlX3JlY29yZA0KPiA+PiAoKQ0KPiA+PiAgIHZvaWQN Cj4gPj4gICByZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6ZGVsZXRlX3JlY29yZCAoKQ0KPiA+PiAg IHsNCj4gPj4gLSAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2ZvbGxvd2luZyAocmVjb3JkX2Z1 bGxfbGlzdCk7DQo+ID4+ICsgIHJlY29yZF9mdWxsX3Jlc2V0X2hpc3RvcnkgKCk7DQo+ID4+ICAg fQ0KPiA+Pg0KPiA+PiAgIC8qIFRoZSAicmVjb3JkX2lzX3JlcGxheWluZyIgdGFyZ2V0IG1ldGhv ZC4gICovDQo+ID4+IEBAIC0yMDAxLDIzICsxODYxLDIzIEBAIHJlY29yZF9mdWxsX2Jhc2VfdGFy Z2V0OjpyZWNvcmRfd2lsbF9yZXBsYXkNCj4gPj4gKHB0aWRfdCBwdGlkLCBpbnQgZGlyKQ0KPiA+ PiAgIC8qIEdvIHRvIGEgc3BlY2lmaWMgZW50cnkuICAqLw0KPiA+Pg0KPiA+PiAgIHN0YXRpYyB2 b2lkDQo+ID4+IC1yZWNvcmRfZnVsbF9nb3RvX2VudHJ5IChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50 cnkgKnApDQo+ID4+ICtyZWNvcmRfZnVsbF9nb3RvX2VudHJ5IChzaXplX3QgdGFyZ2V0X2luc24p DQo+ID4+ICAgew0KPiA+PiAtICBpZiAocCA9PSBOVUxMKQ0KPiA+PiArICBpZiAodGFyZ2V0X2lu c24gPj0gcmVjb3JkX2Z1bGxfbGlzdC5zaXplICgpKQ0KPiA+PiAgICAgICBlcnJvciAoXygiVGFy Z2V0IGluc24gbm90IGZvdW5kLiIpKTsNCj4gPj4gLSAgZWxzZSBpZiAocCA9PSByZWNvcmRfZnVs bF9saXN0KQ0KPiA+PiArICBlbHNlIGlmICh0YXJnZXRfaW5zbiA9PSByZWNvcmRfZnVsbF9uZXh0 X2luc24pDQo+ID4+ICAgICAgIGVycm9yIChfKCJBbHJlYWR5IGF0IHRhcmdldCBpbnNuLiIpKTsN Cj4gPj4gLSAgZWxzZSBpZiAocC0+dS5lbmQuaW5zbl9udW0gPiByZWNvcmRfZnVsbF9saXN0LT51 LmVuZC5pbnNuX251bSkNCj4gPj4gKyAgZWxzZSBpZiAodGFyZ2V0X2luc24gPiByZWNvcmRfZnVs bF9uZXh0X2luc24pDQo+ID4+ICAgICAgIHsNCj4gPj4gICAgICAgICBnZGJfcHJpbnRmIChfKCJH byBmb3J3YXJkIHRvIGluc24gbnVtYmVyICVzXG4iKSwNCj4gPj4gLQkJICBwdWxvbmdlc3QgKHAt PnUuZW5kLmluc25fbnVtKSk7DQo+ID4+IC0gICAgICByZWNvcmRfZnVsbF9nb3RvX2luc24gKHAs IEVYRUNfRk9SV0FSRCk7DQo+ID4+ICsJCSAgcHVsb25nZXN0IChyZWNvcmRfZnVsbF9saXN0W3Rh cmdldF9pbnNuXS5pbnNuX251bSkpOw0KPiA+PiArICAgICAgcmVjb3JkX2Z1bGxfZ290b19pbnNu ICh0YXJnZXRfaW5zbiwgRVhFQ19GT1JXQVJEKTsNCj4gPj4gICAgICAgfQ0KPiA+PiAgICAgZWxz ZQ0KPiA+PiAgICAgICB7DQo+ID4+ICAgICAgICAgZ2RiX3ByaW50ZiAoXygiR28gYmFja3dhcmQg dG8gaW5zbiBudW1iZXIgJXNcbiIpLA0KPiA+PiAtCQkgIHB1bG9uZ2VzdCAocC0+dS5lbmQuaW5z bl9udW0pKTsNCj4gPj4gLSAgICAgIHJlY29yZF9mdWxsX2dvdG9faW5zbiAocCwgRVhFQ19SRVZF UlNFKTsNCj4gPj4gKwkJICBwdWxvbmdlc3QgKHRhcmdldF9pbnNuKSk7DQo+ID4+ICsgICAgICBy ZWNvcmRfZnVsbF9nb3RvX2luc24gKHRhcmdldF9pbnNuLCBFWEVDX1JFVkVSU0UpOw0KPiA+PiAg ICAgICB9DQo+ID4+DQo+ID4+ICAgICByZWdpc3RlcnNfY2hhbmdlZCAoKTsNCj4gPj4gQEAgLTIw MzMsMTMgKzE4OTMsNyBAQCByZWNvcmRfZnVsbF9nb3RvX2VudHJ5IChzdHJ1Y3QNCj4gcmVjb3Jk X2Z1bGxfZW50cnkNCj4gPj4gKnApDQo+ID4+ICAgdm9pZA0KPiA+PiAgIHJlY29yZF9mdWxsX2Jh c2VfdGFyZ2V0Ojpnb3RvX3JlY29yZF9iZWdpbiAoKQ0KPiA+PiAgIHsNCj4gPj4gLSAgc3RydWN0 IHJlY29yZF9mdWxsX2VudHJ5ICpwID0gTlVMTDsNCj4gPj4gLQ0KPiA+PiAtICBmb3IgKHAgPSAm cmVjb3JkX2Z1bGxfZmlyc3Q7IHAgIT0gTlVMTDsgcCA9IHAtPm5leHQpDQo+ID4+IC0gICAgaWYg KHAtPnR5cGUgPT0gcmVjb3JkX2Z1bGxfZW5kKQ0KPiA+PiAtICAgICAgYnJlYWs7DQo+ID4+IC0N Cj4gPj4gLSAgcmVjb3JkX2Z1bGxfZ290b19lbnRyeSAocCk7DQo+ID4+ICsgIHJlY29yZF9mdWxs X2dvdG9fZW50cnkgKDApOw0KPiA+PiAgIH0NCj4gPj4NCj4gPj4gICAvKiBUaGUgImdvdG9fcmVj b3JkX2VuZCIgdGFyZ2V0IG1ldGhvZC4gICovDQo+ID4+IEBAIC0yMDQ3LDE1ICsxOTAxLDcgQEAg cmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6OmdvdG9fcmVjb3JkX2JlZ2luICgpDQo+ID4+ICAgdm9p ZA0KPiA+PiAgIHJlY29yZF9mdWxsX2Jhc2VfdGFyZ2V0Ojpnb3RvX3JlY29yZF9lbmQgKCkNCj4g Pj4gICB7DQo+ID4+IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcCA9IE5VTEw7DQo+ID4+ IC0NCj4gPj4gLSAgZm9yIChwID0gcmVjb3JkX2Z1bGxfbGlzdDsgcC0+bmV4dCAhPSBOVUxMOyBw ID0gcC0+bmV4dCkNCj4gPj4gLSAgICA7DQo+ID4+IC0gIGZvciAoOyBwIT0gTlVMTDsgcCA9IHAt PnByZXYpDQo+ID4+IC0gICAgaWYgKHAtPnR5cGUgPT0gcmVjb3JkX2Z1bGxfZW5kKQ0KPiA+PiAt ICAgICAgYnJlYWs7DQo+ID4+IC0NCj4gPj4gLSAgcmVjb3JkX2Z1bGxfZ290b19lbnRyeSAocCk7 DQo+ID4+ICsgIHJlY29yZF9mdWxsX2dvdG9fZW50cnkgKHJlY29yZF9mdWxsX2xpc3Quc2l6ZSAo KSAtIDEpOw0KPiA+PiAgIH0NCj4gPj4NCj4gPj4gICAvKiBUaGUgImdvdG9fcmVjb3JkIiB0YXJn ZXQgbWV0aG9kLiAgKi8NCj4gPj4gQEAgLTIwNjMsMTMgKzE5MDksNyBAQCByZWNvcmRfZnVsbF9i YXNlX3RhcmdldDo6Z290b19yZWNvcmRfZW5kICgpDQo+ID4+ICAgdm9pZA0KPiA+PiAgIHJlY29y ZF9mdWxsX2Jhc2VfdGFyZ2V0Ojpnb3RvX3JlY29yZCAoVUxPTkdFU1QgdGFyZ2V0X2luc24pDQo+ ID4+ICAgew0KPiA+PiAtICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnAgPSBOVUxMOw0KPiA+ PiAtDQo+ID4+IC0gIGZvciAocCA9ICZyZWNvcmRfZnVsbF9maXJzdDsgcCAhPSBOVUxMOyBwID0g cC0+bmV4dCkNCj4gPj4gLSAgICBpZiAocC0+dHlwZSA9PSByZWNvcmRfZnVsbF9lbmQgJiYgcC0+ dS5lbmQuaW5zbl9udW0gPT0gdGFyZ2V0X2luc24pDQo+ID4+IC0gICAgICBicmVhazsNCj4gPj4g LQ0KPiA+PiAtICByZWNvcmRfZnVsbF9nb3RvX2VudHJ5IChwKTsNCj4gPj4gKyAgcmVjb3JkX2Z1 bGxfZ290b19lbnRyeSAodGFyZ2V0X2luc24pOw0KPiA+PiAgIH0NCj4gPj4NCj4gPj4gICAvKiBU aGUgInJlY29yZF9zdG9wX3JlcGxheWluZyIgdGFyZ2V0IG1ldGhvZC4gICovDQo+ID4+IEBAIC0y MzM5LDE5ICsyMTc5LDk2IEBAIG5ldG9yZGVyMzIgKHVpbnQzMl90IGlucHV0KQ0KPiA+PiAgICAg cmV0dXJuIHJldDsNCj4gPj4gICB9DQo+ID4gRnVuY3Rpb24gY29tbWVudC4gQW5kIEkgdGhpbmsg aXQgd291bGQgYmUgY2xlYW5lciB0byBtb3ZlIHRoaXMgcmVmYWN0b3JpbmcNCj4gaW4NCj4gPiBh IHNlcGFyYXRlIHBhdGNoLCB0b28uIE9yIGlzIHRoaXMgc2VwYXJhdGUgZnVuY3Rpb24gb25seSBw b3NzaWJsZSBkdWUgdG8gdGhlDQo+IGNoYW5nZQ0KPiA+IGZyb20gdXNpbmcgYSBsaXN0IHRvIHN0 ZDo6ZGVxdWU/DQo+IFRoaXMgZnVuY3Rpb24gY291bGQgYmUgaW4gYSBwYXRjaCBvZiBpdHMgb3du LCB5ZWFoLiBXaWxsIGRvIHRoYXQgZm9yIHY0DQo+ID4NCj4gPj4gK3N0YXRpYyB2b2lkDQo+ID4+ ICtyZWNvcmRfZnVsbF9yZWFkX2VudHJ5X2Zyb21fYmZkIChiZmQgKmNiZmQsIGFzZWN0aW9uICpv c2VjLCBpbnQNCj4gKmJmZF9vZmZzZXQpDQo+ID4+ICt7DQo+ID4+ICsgIHVpbnQ4X3QgcmVjdHlw ZTsNCj4gPj4gKyAgdWludDMyX3QgcmVnbnVtLCBsZW47DQo+ID4+ICsgIHVpbnQ2NF90IGFkZHI7 DQo+ID4+ICsgIHJlZ2NhY2hlICpjYWNoZSA9IGdldF90aHJlYWRfcmVnY2FjaGUgKGluZmVyaW9y X3RocmVhZCAoKSk7DQo+ID4+ICsNCj4gPj4gKyAgYmZkY29yZV9yZWFkIChjYmZkLCBvc2VjLCAm cmVjdHlwZSwgc2l6ZW9mIChyZWN0eXBlKSwgYmZkX29mZnNldCk7DQo+ID4+ICsgIHN3aXRjaCAo cmVjdHlwZSkNCj4gPj4gKyAgICB7DQo+ID4+ICsgICAgY2FzZSByZWNvcmRfZnVsbF9yZWc6IC8q IHJlZyAqLw0KPiA+PiArICAgICAgew0KPiA+PiArCS8qIEdldCByZWdpc3RlciBudW1iZXIgdG8g cmVnbnVtLiAgKi8NCj4gPj4gKwliZmRjb3JlX3JlYWQgKGNiZmQsIG9zZWMsICZyZWdudW0sIHNp emVvZiAocmVnbnVtKSwgYmZkX29mZnNldCk7DQo+ID4+ICsJcmVnbnVtID0gbmV0b3JkZXIzMiAo cmVnbnVtKTsNCj4gPj4gKw0KPiA+PiArCXJlY29yZF9mdWxsX2VudHJ5IHJlYzsNCj4gPj4gKw0K PiA+PiArCXJlYyA9IHJlY29yZF9mdWxsX3JlZ19pbml0IChjYWNoZSwgcmVnbnVtKTsNCj4gPj4g Kw0KPiA+PiArCS8qIEdldCB2YWwuICAqLw0KPiA+PiArCWJmZGNvcmVfcmVhZCAoY2JmZCwgb3Nl YywgcmVjb3JkX2Z1bGxfZ2V0X2xvYyAoJnJlYyksDQo+ID4+ICsJCSAgICAgIHJlYy51LnJlZy5s ZW4sIGJmZF9vZmZzZXQpOw0KPiA+PiArDQo+ID4+ICsJaWYgKHJlY29yZF9kZWJ1ZykNCj4gPj4g KwkgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ID4+ICsJCSAgICAgICIgIFJlYWRpbmcgcmVn aXN0ZXIgJWQgKDEgIg0KPiA+PiArCQkgICAgICAicGx1cyAlbHUgcGx1cyAlZCBieXRlcylcbiIs DQo+ID4+ICsJCSAgICAgIHJlYy51LnJlZy5udW0sDQo+ID4+ICsJCSAgICAgICh1bnNpZ25lZCBs b25nKSBzaXplb2YgKHJlZ251bSksDQo+ID4+ICsJCSAgICAgIHJlYy51LnJlZy5sZW4pOw0KPiA+ PiArDQo+ID4+ICsJcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZCAocmVjKTsNCj4gPj4gKwlicmVh azsNCj4gPj4gKyAgICAgIH0NCj4gPj4gKw0KPiA+PiArICAgIGNhc2UgcmVjb3JkX2Z1bGxfbWVt OiAvKiBtZW0gKi8NCj4gPj4gKyAgICAgIHsNCj4gPj4gKwkvKiBHZXQgbGVuLiAgKi8NCj4gPj4g KwliZmRjb3JlX3JlYWQgKGNiZmQsIG9zZWMsICZsZW4sIHNpemVvZiAobGVuKSwgYmZkX29mZnNl dCk7DQo+ID4+ICsJbGVuID0gbmV0b3JkZXIzMiAobGVuKTsNCj4gPj4gKw0KPiA+PiArCS8qIEdl dCBhZGRyLiAgKi8NCj4gPj4gKwliZmRjb3JlX3JlYWQgKGNiZmQsIG9zZWMsICZhZGRyLCBzaXpl b2YgKGFkZHIpLA0KPiA+PiArCQkgICAgICBiZmRfb2Zmc2V0KTsNCj4gPj4gKwlhZGRyID0gbmV0 b3JkZXI2NCAoYWRkcik7DQo+ID4+ICsNCj4gPj4gKwlyZWNvcmRfZnVsbF9lbnRyeSByZWM7DQo+ ID4+ICsJcmVjID0gcmVjb3JkX2Z1bGxfbWVtX2luaXQgKGFkZHIsIGxlbik7DQo+ID4+ICsNCj4g Pj4gKwkvKiBHZXQgdmFsLiAgKi8NCj4gPj4gKwliZmRjb3JlX3JlYWQgKGNiZmQsIG9zZWMsIHJl Y29yZF9mdWxsX2dldF9sb2MgKCZyZWMpLCBsZW4sDQo+ID4+ICsJCSAgICAgIGJmZF9vZmZzZXQp Ow0KPiA+PiArDQo+ID4+ICsJaWYgKHJlY29yZF9kZWJ1ZykNCj4gPj4gKwkgIGdkYl9wcmludGYg KGdkYl9zdGRsb2csDQo+ID4+ICsJCSAgICAgICIgIFJlYWRpbmcgbWVtb3J5ICVzICgxIHBsdXMg Ig0KPiA+PiArCQkgICAgICAiJWx1IHBsdXMgJWx1IHBsdXMgJWQgYnl0ZXMpXG4iLA0KPiA+PiAr CQkgICAgICBwYWRkcmVzcyAoZ2V0X2N1cnJlbnRfYXJjaCAoKSwNCj4gPj4gKwkJCQlyZWMudS5t ZW0uYWRkciksDQo+ID4+ICsJCSAgICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKGFkZHIpLA0K PiA+PiArCQkgICAgICAodW5zaWduZWQgbG9uZykgc2l6ZW9mIChsZW4pLA0KPiA+PiArCQkgICAg ICBsZW4pOw0KPiA+PiArDQo+ID4+ICsJcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZCAocmVjKTsN Cj4gPj4gKwlicmVhazsNCj4gPj4gKyAgICAgIH0NCj4gPj4gKw0KPiA+PiArICAgIGRlZmF1bHQ6 DQo+ID4+ICsgICAgICBlcnJvciAoXygiQmFkIGVudHJ5IHR5cGUgJWQsIG9mZnNldCAlZCBvZiAl bHUgaW4gY29yZSBmaWxlICVwcy4iKSwNCj4gPj4gKwkgICAgIHJlY3R5cGUsICpiZmRfb2Zmc2V0 LCBiZmRfc2VjdGlvbl9zaXplIChvc2VjKSwNCj4gPj4gKwkgICAgIHN0eWxlZF9zdHJpbmcgKGZp bGVfbmFtZV9zdHlsZS5zdHlsZSAoKSwNCj4gPj4gKwkJCSAgICBiZmRfZ2V0X2ZpbGVuYW1lIChj YmZkKSkpOw0KPiA+PiArICAgICAgYnJlYWs7DQo+ID4+ICsgICAgfQ0KPiA+PiArfQ0KPiA+PiAr DQo+ID4+ICAgLyogUmVzdG9yZSB0aGUgZXhlY3V0aW9uIGxvZyBmcm9tIGNvcmUgZmlsZSBDQkZE LiAgKi8NCj4gPj4NCj4gPj4gICBzdGF0aWMgdm9pZA0KPiA+PiAgIHJlY29yZF9mdWxsX3Jlc3Rv cmUgKHN0cnVjdCBiZmQgJmNiZmQpDQo+ID4+ICAgew0KPiA+PiAgICAgdWludDMyX3QgbWFnaWM7 DQo+ID4+IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcmVjOw0KPiA+PiAgICAgYXNlY3Rp b24gKm9zZWM7DQo+ID4+ICAgICB1aW50MzJfdCBvc2VjX3NpemU7DQo+ID4+ICAgICBpbnQgYmZk X29mZnNldCA9IDA7DQo+ID4+DQo+ID4+ICAgICAvKiAicmVjb3JkX2Z1bGxfcmVzdG9yZSIgY2Fu IG9ubHkgYmUgY2FsbGVkIHdoZW4gcmVjb3JkIGxpc3QgaXMgZW1wdHkuICAqLw0KPiA+PiAtICBn ZGJfYXNzZXJ0IChyZWNvcmRfZnVsbF9maXJzdC5uZXh0ID09IE5VTEwpOw0KPiA+PiArICBnZGJf YXNzZXJ0IChyZWNvcmRfZnVsbF9saXN0LmVtcHR5ICgpKTsNCj4gPj4NCj4gPj4gICAgIGlmIChy ZWNvcmRfZGVidWcpDQo+ID4+ICAgICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csICJSZXN0b3Jp bmcgcmVjb3JkaW5nIGZyb20gY29yZSBmaWxlLlxuIik7DQo+ID4+IEBAIC0yMzc5LDEyNCArMjI5 Niw0NyBAQCByZWNvcmRfZnVsbF9yZXN0b3JlIChzdHJ1Y3QgYmZkICZjYmZkKQ0KPiA+PiAgIAkJ IlJFQ09SRF9GVUxMX0ZJTEVfTUFHSUMgKDB4JXMpXG4iLA0KPiA+PiAgIAkJcGhleF9ueiAobmV0 b3JkZXIzMiAobWFnaWMpLCA0KSk7DQo+ID4+DQo+ID4+IC0gIC8qIFJlc3RvcmUgdGhlIGVudHJp ZXMgaW4gcmVjZmQgaW50byByZWNvcmRfZnVsbF9hcmNoX2xpc3RfaGVhZCBhbmQNCj4gPj4gLSAg ICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwuICAqLw0KPiA+PiAtICByZWNvcmRfZnVsbF9h cmNoX2xpc3RfaGVhZCA9IE5VTEw7DQo+ID4+IC0gIHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWls ID0gTlVMTDsNCj4gPj4gICAgIHJlY29yZF9mdWxsX2luc25fbnVtID0gMDsNCj4gPj4NCj4gPj4g ICAgIHRyeQ0KPiA+PiAgICAgICB7DQo+ID4+IC0gICAgICByZWdjYWNoZSAqcmVnY2FjaGUgPSBn ZXRfdGhyZWFkX3JlZ2NhY2hlIChpbmZlcmlvcl90aHJlYWQgKCkpOw0KPiA+PiAtDQo+ID4+IC0g ICAgICB3aGlsZSAoMSkNCj4gPj4gKyAgICAgIHdoaWxlIChiZmRfb2Zmc2V0IDwgb3NlY19zaXpl KQ0KPiA+PiAgIAl7DQo+ID4+IC0JICB1aW50OF90IHJlY3R5cGU7DQo+ID4+IC0JICB1aW50MzJf dCByZWdudW0sIGxlbiwgc2lnbmFsLCBjb3VudDsNCj4gPj4gLQkgIHVpbnQ2NF90IGFkZHI7DQo+ ID4+ICsJICByZWNvcmRfZnVsbF9yZXNldF9pbmNvbXBsZXRlICgpOw0KPiA+PiArCSAgdWludDMy X3QgZWZmX2NvdW50ID0gMDsNCj4gPj4gKwkgIHVpbnQ4X3Qgc2lndmFsOw0KPiA+PiArCSAgdWlu dDMyX3QgaW5zbl9udW07DQo+ID4+DQo+ID4+IC0JICAvKiBXZSBhcmUgZmluaXNoZWQgd2hlbiBv ZmZzZXQgcmVhY2hlcyBvc2VjX3NpemUuICAqLw0KPiA+PiAtCSAgaWYgKGJmZF9vZmZzZXQgPj0g b3NlY19zaXplKQ0KPiA+PiAtCSAgICBicmVhazsNCj4gPj4gLQkgIGJmZGNvcmVfcmVhZCAoJmNi ZmQsIG9zZWMsICZyZWN0eXBlLCBzaXplb2YgKHJlY3R5cGUpLCAmYmZkX29mZnNldCk7DQo+ID4+ ICsJICAvKiBGaXJzdCByZWFkIHRoZSBnZW5lcmljIGluZm9ybWF0aW9uIGZvciBhbiBpbnN0cnVj dGlvbi4gICovDQo+ID4+ICsJICBiZmRjb3JlX3JlYWQgKCZjYmZkLCBvc2VjLCAmc2lndmFsLCBz aXplb2YgKHVpbnQ4X3QpLCAmYmZkX29mZnNldCk7DQo+ID4+ICsJICBiZmRjb3JlX3JlYWQgKCZj YmZkLCBvc2VjLCAmZWZmX2NvdW50LCBzaXplb2YgKHVpbnQzMl90KSwNCj4gPj4gKwkJCSZiZmRf b2Zmc2V0KTsNCj4gPj4gKwkgIGJmZGNvcmVfcmVhZCAoJmNiZmQsIG9zZWMsICZpbnNuX251bSwg c2l6ZW9mICh1aW50MzJfdCksDQo+ID4+ICsJCQkmYmZkX29mZnNldCk7DQo+ID4+DQo+ID4+IC0J ICBzd2l0Y2ggKHJlY3R5cGUpDQo+ID4+IC0JICAgIHsNCj4gPj4gLQkgICAgY2FzZSByZWNvcmRf ZnVsbF9yZWc6IC8qIHJlZyAqLw0KPiA+PiAtCSAgICAgIC8qIEdldCByZWdpc3RlciBudW1iZXIg dG8gcmVnbnVtLiAgKi8NCj4gPj4gLQkgICAgICBiZmRjb3JlX3JlYWQgKCZjYmZkLCBvc2VjLCAm cmVnbnVtLCBzaXplb2YgKHJlZ251bSksDQo+ID4+IC0JCQkgICAgJmJmZF9vZmZzZXQpOw0KPiA+ PiAtCSAgICAgIHJlZ251bSA9IG5ldG9yZGVyMzIgKHJlZ251bSk7DQo+ID4+IC0NCj4gPj4gLQkg ICAgICByZWMgPSByZWNvcmRfZnVsbF9yZWdfYWxsb2MgKHJlZ2NhY2hlLCByZWdudW0pOw0KPiA+ PiAtDQo+ID4+IC0JICAgICAgLyogR2V0IHZhbC4gICovDQo+ID4+IC0JICAgICAgYmZkY29yZV9y ZWFkICgmY2JmZCwgb3NlYywgcmVjb3JkX2Z1bGxfZ2V0X2xvYyAocmVjKSwNCj4gPj4gLQkJCSAg ICByZWMtPnUucmVnLmxlbiwgJmJmZF9vZmZzZXQpOw0KPiA+PiAtDQo+ID4+IC0JICAgICAgaWYg KHJlY29yZF9kZWJ1ZykNCj4gPj4gLQkJZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywNCj4gPj4gLQkJ CSAgICAiICBSZWFkaW5nIHJlZ2lzdGVyICVkICgxICINCj4gPj4gLQkJCSAgICAicGx1cyAlbHUg cGx1cyAlZCBieXRlcylcbiIsDQo+ID4+IC0JCQkgICAgcmVjLT51LnJlZy5udW0sDQo+ID4+IC0J CQkgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAocmVnbnVtKSwNCj4gPj4gLQkJCSAgICByZWMt PnUucmVnLmxlbik7DQo+ID4+IC0JICAgICAgYnJlYWs7DQo+ID4+ICsJICByZWNvcmRfZnVsbF9p bmNvbXBsZXRlX2luc3RydWN0aW9uLmluc25fbnVtID0gbmV0b3JkZXIzMg0KPiA+PiAoaW5zbl9u dW0pOw0KPiA+PiArCSAgaWYgKHNpZ3ZhbCAhPSBHREJfU0lHTkFMXzApDQo+ID4+ICsJICAgIHJl Y29yZF9mdWxsX2luY29tcGxldGVfaW5zdHJ1Y3Rpb24uc2lndmFsID0gKGdkYl9zaWduYWwpIHNp Z3ZhbDsNCj4gPj4NCj4gPj4gLQkgICAgY2FzZSByZWNvcmRfZnVsbF9tZW06IC8qIG1lbSAqLw0K PiA+PiAtCSAgICAgIC8qIEdldCBsZW4uICAqLw0KPiA+PiAtCSAgICAgIGJmZGNvcmVfcmVhZCAo JmNiZmQsIG9zZWMsICZsZW4sIHNpemVvZiAobGVuKSwgJmJmZF9vZmZzZXQpOw0KPiA+PiAtCSAg ICAgIGxlbiA9IG5ldG9yZGVyMzIgKGxlbik7DQo+ID4+IC0NCj4gPj4gLQkgICAgICAvKiBHZXQg YWRkci4gICovDQo+ID4+IC0JICAgICAgYmZkY29yZV9yZWFkICgmY2JmZCwgb3NlYywgJmFkZHIs IHNpemVvZiAoYWRkciksICZiZmRfb2Zmc2V0KTsNCj4gPj4gLQkgICAgICBhZGRyID0gbmV0b3Jk ZXI2NCAoYWRkcik7DQo+ID4+IC0NCj4gPj4gLQkgICAgICByZWMgPSByZWNvcmRfZnVsbF9tZW1f YWxsb2MgKGFkZHIsIGxlbik7DQo+ID4+IC0NCj4gPj4gLQkgICAgICAvKiBHZXQgdmFsLiAgKi8N Cj4gPj4gLQkgICAgICBiZmRjb3JlX3JlYWQgKCZjYmZkLCBvc2VjLCByZWNvcmRfZnVsbF9nZXRf bG9jIChyZWMpLA0KPiA+PiAtCQkJICAgIHJlYy0+dS5tZW0ubGVuLCAmYmZkX29mZnNldCk7DQo+ ID4+IC0NCj4gPj4gLQkgICAgICBpZiAocmVjb3JkX2RlYnVnKQ0KPiA+PiAtCQlnZGJfcHJpbnRm IChnZGJfc3RkbG9nLA0KPiA+PiAtCQkJICAgICIgIFJlYWRpbmcgbWVtb3J5ICVzICgxIHBsdXMg Ig0KPiA+PiAtCQkJICAgICIlbHUgcGx1cyAlbHUgcGx1cyAlZCBieXRlcylcbiIsDQo+ID4+IC0J CQkgICAgcGFkZHJlc3MgKGdldF9jdXJyZW50X2FyY2ggKCksDQo+ID4+IC0JCQkJICAgICAgcmVj LT51Lm1lbS5hZGRyKSwNCj4gPj4gLQkJCSAgICAodW5zaWduZWQgbG9uZykgc2l6ZW9mIChhZGRy KSwNCj4gPj4gLQkJCSAgICAodW5zaWduZWQgbG9uZykgc2l6ZW9mIChsZW4pLA0KPiA+PiAtCQkJ ICAgIHJlYy0+dS5tZW0ubGVuKTsNCj4gPj4gLQkgICAgICBicmVhazsNCj4gPj4gKwkgIGVmZl9j b3VudCA9IG5ldG9yZGVyMzIgKGVmZl9jb3VudCk7DQo+ID4+DQo+ID4+IC0JICAgIGNhc2UgcmVj b3JkX2Z1bGxfZW5kOiAvKiBlbmQgKi8NCj4gPj4gLQkgICAgICByZWMgPSByZWNvcmRfZnVsbF9l bmRfYWxsb2MgKCk7DQo+ID4+IC0JICAgICAgcmVjb3JkX2Z1bGxfaW5zbl9udW0gKys7DQo+ID4+ IC0NCj4gPj4gLQkgICAgICAvKiBHZXQgc2lnbmFsIHZhbHVlLiAgKi8NCj4gPj4gLQkgICAgICBi ZmRjb3JlX3JlYWQgKCZjYmZkLCBvc2VjLCAmc2lnbmFsLCBzaXplb2YgKHNpZ25hbCksDQo+ID4+ IC0JCQkgICAgJmJmZF9vZmZzZXQpOw0KPiA+PiAtCSAgICAgIHNpZ25hbCA9IG5ldG9yZGVyMzIg KHNpZ25hbCk7DQo+ID4+IC0JICAgICAgcmVjLT51LmVuZC5zaWd2YWwgPSAoZW51bSBnZGJfc2ln bmFsKSBzaWduYWw7DQo+ID4+IC0NCj4gPj4gLQkgICAgICAvKiBHZXQgaW5zbiBjb3VudC4gICov DQo+ID4+IC0JICAgICAgYmZkY29yZV9yZWFkICgmY2JmZCwgb3NlYywgJmNvdW50LCBzaXplb2Yg KGNvdW50KSwgJmJmZF9vZmZzZXQpOw0KPiA+PiAtCSAgICAgIGNvdW50ID0gbmV0b3JkZXIzMiAo Y291bnQpOw0KPiA+PiAtCSAgICAgIHJlYy0+dS5lbmQuaW5zbl9udW0gPSBjb3VudDsNCj4gPj4g LQkgICAgICByZWNvcmRfZnVsbF9pbnNuX2NvdW50ID0gY291bnQgKyAxOw0KPiA+PiAtCSAgICAg IGlmIChyZWNvcmRfZGVidWcpDQo+ID4+IC0JCWdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ID4+ IC0JCQkgICAgIiAgUmVhZGluZyByZWNvcmRfZnVsbF9lbmQgKDEgKyAiDQo+ID4+IC0JCQkgICAg IiVsdSArICVsdSBieXRlcyksIG9mZnNldCA9PSAlc1xuIiwNCj4gPj4gLQkJCSAgICAodW5zaWdu ZWQgbG9uZykgc2l6ZW9mIChzaWduYWwpLA0KPiA+PiAtCQkJICAgICh1bnNpZ25lZCBsb25nKSBz aXplb2YgKGNvdW50KSwNCj4gPj4gLQkJCSAgICBwYWRkcmVzcyAoZ2V0X2N1cnJlbnRfYXJjaCAo KSwNCj4gPj4gLQkJCQkgICAgICBiZmRfb2Zmc2V0KSk7DQo+ID4+IC0JICAgICAgYnJlYWs7DQo+ ID4+ICsJICAvKiBUaGlzIGRlYWxzIHdpdGggYWxsIHRoZSBzaWRlIGVmZmVjdHMuICAqLw0KPiA+ PiArCSB3aGlsZSAoZWZmX2NvdW50ID4gMCkNCj4gPj4gKwkgICB7DQo+ID4+ICsJICAgICBlZmZf Y291bnQtLTsNCj4gPj4NCj4gPj4gLQkgICAgZGVmYXVsdDoNCj4gPj4gLQkgICAgICBlcnJvciAo XygiQmFkIGVudHJ5IHR5cGUgaW4gY29yZSBmaWxlICVwcy4iKSwNCj4gPj4gLQkJICAgICBzdHls ZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5bGUgKCksDQo+ID4+IC0JCQkJICAgIGJmZF9n ZXRfZmlsZW5hbWUgKCZjYmZkKSkpOw0KPiA+PiAtCSAgICAgIGJyZWFrOw0KPiA+PiAtCSAgICB9 DQo+ID4+ICsJICAgICByZWNvcmRfZnVsbF9yZWFkX2VudHJ5X2Zyb21fYmZkICgmY2JmZCwgb3Nl YywgJmJmZF9vZmZzZXQpOw0KPiA+PiArCSAgIH0NCj4gPj4NCj4gPj4gLQkgIC8qIEFkZCByZWMg dG8gcmVjb3JkIGFyY2ggbGlzdC4gICovDQo+ID4+IC0JICByZWNvcmRfZnVsbF9hcmNoX2xpc3Rf YWRkIChyZWMpOw0KPiA+PiArCSAgcmVjb3JkX2Z1bGxfc2F2ZV9pbnN0cnVjdGlvbiAoKTsNCj4g Pj4gICAJfQ0KPiA+PiAgICAgICB9DQo+ID4+ICAgICBjYXRjaCAoY29uc3QgZ2RiX2V4Y2VwdGlv biAmZXgpDQo+ID4+ICAgICAgIHsNCj4gPj4gLSAgICAgIHJlY29yZF9mdWxsX2xpc3RfcmVsZWFz ZSAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwpOw0KPiA+PiArICAgICAgcmVjb3JkX2Z1bGxf cmVzZXRfaW5jb21wbGV0ZSAoKTsNCj4gPj4gICAgICAgICB0aHJvdzsNCj4gPj4gICAgICAgfQ0K PiA+Pg0KPiA+PiAtICAvKiBBZGQgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hlYWQgdG8gdGhlIGVu ZCBvZiByZWNvcmQgbGlzdC4gICovDQo+ID4+IC0gIHJlY29yZF9mdWxsX2ZpcnN0Lm5leHQgPSBy ZWNvcmRfZnVsbF9hcmNoX2xpc3RfaGVhZDsNCj4gPj4gLSAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0 X2hlYWQtPnByZXYgPSAmcmVjb3JkX2Z1bGxfZmlyc3Q7DQo+ID4+IC0gIHJlY29yZF9mdWxsX2Fy Y2hfbGlzdF90YWlsLT5uZXh0ID0gTlVMTDsNCj4gPj4gLSAgcmVjb3JkX2Z1bGxfbGlzdCA9ICZy ZWNvcmRfZnVsbF9maXJzdDsNCj4gPj4gLQ0KPiA+PiAgICAgLyogVXBkYXRlIHJlY29yZF9mdWxs X2luc25fbWF4X251bS4gICovDQo+ID4+ICAgICBpZiAocmVjb3JkX2Z1bGxfaW5zbl9udW0gPiBy ZWNvcmRfZnVsbF9pbnNuX21heF9udW0pDQo+ID4+ICAgICAgIHsNCj4gPj4gQEAgLTI1MDUsNiAr MjM0NSwxMCBAQCByZWNvcmRfZnVsbF9yZXN0b3JlIChzdHJ1Y3QgYmZkICZjYmZkKQ0KPiA+PiAg IAkgICAgICAgcmVjb3JkX2Z1bGxfaW5zbl9tYXhfbnVtKTsNCj4gPj4gICAgICAgfQ0KPiA+Pg0K PiA+PiArICAvKiBXaGVuIGxvYWRpbmcgYSByZWNvcmRpbmcsIHdlJ2xsIGFsd2F5cyBzdGFydCBh dCB0aGUgb2xkZXN0IHBvc3NpYmxlDQo+ID4+ICsgICAgIGluc3RydWN0aW9uLCBubyBtYXR0ZXIg d2hlcmUgdGhlIG9yaWdpbmFsIHJlY29yZGluZyB3YXMgc3RvcHBlZC4gICovDQo+ID4+ICsgIHJl Y29yZF9mdWxsX25leHRfaW5zbiA9IDA7DQo+ID4+ICsNCj4gPj4gICAgIC8qIFN1Y2NlZWRlZC4g ICovDQo+ID4+ICAgICBnZGJfcHJpbnRmIChfKCJSZXN0b3JlZCByZWNvcmRzIGZyb20gY29yZSBm aWxlICVzLlxuIiksDQo+ID4+ICAgCSAgICAgIGJmZF9nZXRfZmlsZW5hbWUgKCZjYmZkKSk7DQo+ ID4+IEBAIC0yNTM4LDEzICsyMzgyLDczIEBAIGNtZF9yZWNvcmRfZnVsbF9yZXN0b3JlIChjb25z dCBjaGFyICphcmdzLA0KPiBpbnQNCj4gPj4gZnJvbV90dHkpDQo+ID4+ICAgICByZWNvcmRfZnVs bF9vcGVuIChudWxscHRyLCBmcm9tX3R0eSk7DQo+ID4+ICAgfQ0KPiA+IEZ1bmN0aW9uIGNvbW1l bnQuIEFuZCBzaW1pbGFyIGNvbW1lbnQgZm9yIHNlcGFyYXRlIHBhdGNoLg0KPiA+DQo+ID4gSSBi ZWxpZXZlIHN0aC4gbGlrZSBhIGZvbGxvdy11cCBjb21taXQgdGhhdCBpbnRyb2R1Y2VzIHRoZSBm dW5jdGlvbnMNCj4gPiByZWNvcmRfZnVsbF9yZWFkX2VudHJ5X2Zyb21fYmZkIGFuZCByZWNvcmRf ZnVsbF93cml0ZV9lbnRyeV90b19iZmQNCj4gPiB3b3VsZCBtYWtlIHRoaXMgbXVjaCBlYXNpZXIg dG8gcmV2aWV3Lg0KPiB5ZWFoIHNhbWUgYXMgYWJvdmUsIHdpbGwgbWFrZSB0aGlzIHBhdGNoIDIg b2YgdGhlIHNlcmllcy4NCg0KVGhhbmtzIQ0KDQpDaHJpc3RpbmENCkludGVsIERldXRzY2hsYW5k IEdtYkgNClJlZ2lzdGVyZWQgQWRkcmVzczogRG9ybmFjaGVyIFN0cmFzc2UgMSwgODU2MjIgRmVs ZGtpcmNoZW4sIEdlcm1hbnkNClRlbDogKzQ5IDg5IDk5MSA0MzAsIHd3dy5pbnRlbC5kZQ0KTWFu YWdpbmcgRGlyZWN0b3JzOiBIYXJyeSBEZW1hcywgSmVmZnJleSBTY2huZWlkZXJtYW4sIFlpbiBD aG9uZyBTb3JyZWxsDQpDaGFpcnBlcnNvbiBvZiB0aGUgU3VwZXJ2aXNvcnkgQm9hcmQ6IE5pY29s ZSBMYXUNClJlZ2lzdGVyZWQgU2VhdDogTXVuaWNoDQpDb21tZXJjaWFsIFJlZ2lzdGVyOiBBbXRz Z2VyaWNodCBNdWVuY2hlbiBIUkIgMTg2OTI4Cg==