Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wZ5Nf-000lCf-2I for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Jun 2026 11:21:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wZ5Mf-00BaV2-23 for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Jun 2026 11:20:25 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wZ5Me-00BaUu-30 for pgsql-hackers@lists.postgresql.org; Mon, 15 Jun 2026 11:20:25 +0000 Received: from mail-japaneastazon11011051.outbound.protection.outlook.com ([52.101.125.51] helo=TYVP286CU001.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wZ5Mb-00000000VGm-0Rxf for pgsql-hackers@lists.postgresql.org; Mon, 15 Jun 2026 11:20:24 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TPW/9nHNGG3aSDDJOTF8a8MzISkQQleJhj+7WcKFa5p4gchsEKam/CjgfupbuTlZJPU6kKwya6ySyExULBtLFk8olseA5WmNNrVZC/AZE1UXAO/bu0ewMusHvD/H2LtfOLx3BJqcJNRQNfwiDKJHnsz2ca5zHpe/0Y1MFcgsvQvSmq0PszhbjOIaIcCglekslb6xpKpWUFPwlUK7PgX9CZg8xObAkGoh5WFMwRTYUXQs3sySZFuima2LXWRyvmScg1K9rSles+ZDKmxh+/+RPPez8flZ8Ycww39bwqZF0lPdBUZiCoKOLbkLucwwtrpgMQ3GUHDB0aBFB8jpP8aU8Q== 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=HZd/uf92cmWDKlu570zAs19hjUJ4DFQvhJ0iSVzzPyA=; b=Qp9BnKmfkvJ1kR6wJy8AasryvEPerCJ+XiWQYUVOPqMaZmVffjCWYRZWQNcpDkK0KuYiG6D8K1aC8PpQFmu5YPMRYR08twUxaTR6u7mJTT2Z01oHI3ezGqSHNDMwTLOoC4fpihEOTXzvyysP2yYQbsswjl9/AU8RkXDAPZ5mLftpUrYwQo0776YN2Yl0bWBJn19cWgq+jAmSYT32qDRNn0HUkIl1BJBOz3Fjva/9eWvGL5kET7mG/plURPP7iUFXXY9un6GvIgayXM/UGtx6kCvZbJtQkpmqtRw3MYhqGVJy8N2ix78Dm8abxTZAPQkpc36QECag0fY/529yuVK0YA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fujitsu.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HZd/uf92cmWDKlu570zAs19hjUJ4DFQvhJ0iSVzzPyA=; b=pCizj7hwmWP5R7SFRZ75pIJG2Nf1TToKLj6ZqxKNqPHaINyDcSisXTfTayXIbmxN9berjbDs1g5sqDCoxVLviGNfIL3OmtawwPSPN5fWtTk8207RgQXoICcy6ZrwSOjmi9qwzq1+ok5jyj20pXdMOUK+8ulI7QvQ692kkyMyxBm6YLyj2EoZe2gjgiMd5FlzENRGXXiW6n7RqczhlmjPqZLBgqyUVkyo8q62b69O4pMyvPxvnYmmmXqnBj/glZNleEKKcXlTFK9+K9ya64JHCS9I/4TQusT8Meu4c6BIJUvfHrHKQrn1JdAJvYUGu7JUsPuRdsSixLON3bxQDv1Wcg== Received: from TY4PR01MB17718.jpnprd01.prod.outlook.com (2603:1096:405:38a::22) by TY7PR01MB13842.jpnprd01.prod.outlook.com (2603:1096:405:1fd::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.18; Mon, 15 Jun 2026 11:20:13 +0000 Received: from TY4PR01MB17718.jpnprd01.prod.outlook.com ([fe80::7430:f96b:750d:8a04]) by TY4PR01MB17718.jpnprd01.prod.outlook.com ([fe80::7430:f96b:750d:8a04%5]) with mapi id 15.21.0113.015; Mon, 15 Jun 2026 11:20:13 +0000 From: "Zhijie Hou (Fujitsu)" To: Peter Smith CC: shveta malik , "Hayato Kuroda (Fujitsu)" , PostgreSQL Hackers , Tomas Vondra , Dilip Kumar , Andrei Lepikhov , wenhui qiu , Amit Kapila Subject: RE: Parallel Apply Thread-Topic: Parallel Apply Thread-Index: AQHcCnrZUNf0ey1nQ0KOINgr/a4XgLSEoA6AgHQSNwCAAB7KAIAADweAgAJCfYCAEifbAIABS1WAgAANMoCAH7ALgIAFxT2AgAAI0oCAD/cvgIAnhwOAgDTMnYCAJ9zrgIAWDtQAgAFrGQCAAEWBAIACyEOQgAGR5ICABPQUAIABjjmwgAlq4QCAAtO/AIAATnAAgAHWV4CACLltgIALGwsAgABFQICAImKVgIAHs5eAgAnfEYA= Date: Mon, 15 Jun 2026 11:20:12 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-AS, ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: =?utf-8?B?TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2Uw?= =?utf-8?B?NTBfQWN0aW9uSWQ9NDY4NjRlNjYtMzNkYy00YzY2LTkwN2MtMTk0NmRmYTQx?= =?utf-8?B?ZGQwO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX0NvbnRlbnRCaXRzPTA7TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5?= =?utf-8?B?LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfRW5hYmxlZD10cnVlO01TSVBfTGFi?= =?utf-8?B?ZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRmZWNlMDUwX01ldGhv?= =?utf-8?B?ZD1TdGFuZGFyZDtNU0lQX0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1hYjRk?= =?utf-8?B?LTNiMGY0ZmVjZTA1MF9OYW1lPUZVSklUU1UtUkVTVFJJQ1RFROKAiztNU0lQ?= =?utf-8?B?X0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1hYjRkLTNiMGY0ZmVjZTA1MF9T?= =?utf-8?B?ZXREYXRlPTIwMjYtMDYtMTVUMTA6NTk6MTBaO01TSVBfTGFiZWxfYTcyOTVj?= =?utf-8?B?YzEtZDI3OS00MmFjLWFiNGQtM2IwZjRmZWNlMDUwX1NpdGVJZD1hMTlmMTIx?= =?utf-8?B?ZC04MWUxLTQ4NTgtYTlkOC03MzZlMjY3ZmQ0Yzc7TVNJUF9MYWJlbF9hNzI5?= =?utf-8?B?NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfVGFnPTEwLCAzLCAw?= =?utf-8?Q?,_1;?= authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TY4PR01MB17718:EE_|TY7PR01MB13842:EE_ x-ms-office365-filtering-correlation-id: c20f162f-7d94-4399-375b-08decad0118b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|23010399003|376014|6049299003|366016|1800799024|11063799006|1580799027|56012099006|3023799007|4143699003|38070700021|4053099003|22082099003|18002099003; x-microsoft-antispam-message-info: QjFYHoZ7HKVB5WAsbeJhjXiHEZtEOME6D45gTr2fnmCFFmGbFRiDHrKn/hPPTDtqCeCqW40kkfuBx5APaMqZ7BjuVghb0Ec3FCL5AyLm7ywQirY4aBCXRTYL1umjPewtiEupV1ZXXu5jJkJ7rllcugYu2+lxyoNV2OcKQbkKVVg/nICR78YUXi6MtvOEzASeWAh9DkMFODjWL4Ku4bgYgMtNLBz+Wahxp8DkolHPMGd6wz126acJy5LVeX+oiecQvJ2CvY94Ojh7Xm5pfHSjS07UTRm0Ly0ZiknJdmaP+qdbw8DVTRJ+8uq+bUuGWYp3hhATWeSjkn7LK0DGRi4l1hwTkac2tMfA7OB7HF+n4UGFD7qs0BGLpzm2TPjve4gTP+Oagge2L4Tw5aeH50/YEQQRwrrESwXERhPMZrXawL73pBVdpO+3np2N/jQOtILWOy5eZx/ffnWEv4MsXiWw3w2Pzerx2eQ/GlX04ukK6QpwMKSZmBXoJ65FIm5phh2BY7LJCL3bBgLQwemKcH9l7FhGiYBxEAAvXIYyhtlQC0aRuxe/+CJc6DbFogTytezSQjmU/jC2kf6vYTBVxaeKYonCunrKgHMSh6mZbhqPuFJ4Y1ceBstQCXR3YOdRF7RIqCZeFvFZxVWPtTxjp3brxj0IbXX7oYVCiBMdQmnRs+JmUW8WF9lfb7JnkeBYBIihQuUltYNuQn8SrKZA0T0huasC2TYrwl8CrYhD83aYk0yN2AVSO4/eI6dRIeZX2e6wi1u8kx9Odn+rjizqWsijRdiniPwEzOkTJQpTpcRskMY= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:ja;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY4PR01MB17718.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(6049299003)(366016)(1800799024)(11063799006)(1580799027)(56012099006)(3023799007)(4143699003)(38070700021)(4053099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?YmZRZDBiVkI5U0l5THowS2NNcG9qKzJKNTVYMDgxSVJDbHhUMzZ1cEZjSDRB?= =?utf-8?B?Z1pHMm80aGJEZS9oeHdzU2RSZmorZ3c0Wnh5VXVLQlRJa0ZPM2VJdlJhTy9P?= =?utf-8?B?M1BKV1F5WHJwQnZ1aHlQNjhBazJ0a0NJd2g5dHozcGI1cEFZL1RvdExkK3Bn?= =?utf-8?B?OWZEb0k0NlphbjVzaGgvN1BtOVptMHFoODNMbTUxN0RqQ2tPbXp2dmdUZnRn?= =?utf-8?B?YXY3eXMyK1Nnakg1QnJqaSsxcWhuSS9YN3lPVnBHaVVmTnVqcnhBSjdBNFZ3?= =?utf-8?B?d0tIVmZpM1NwRFJoRjhEaVI3UHpWbTMzTUVzeTFLSTZwbTVLY1pkQWkyeWZD?= =?utf-8?B?dnhBMFJlK1M0bDU1TGRsTkF1Rit6WEl1SzhseGwvL21SRXdOdkRVVlE4SEIr?= =?utf-8?B?VUlkUldKdHhYWHJrSmVSWXd0MEhFTzQwYmExOHBRMytFeFo4bkI2cXR2WG1U?= =?utf-8?B?VlFMVmcxazEvSnd6dW5vc0lQMWlLc0E2VjF2S25iNjRpamc3VzdJdy8za1Ji?= =?utf-8?B?bWtkcTk1YUVwdFFVK1MrV3NDYldxc2crQTc4ZWpXVE5aM3VSZ2tDdXREMkZE?= =?utf-8?B?V24yUXFyUHN0dkc1bjRpV3B1dDhac2QwSEUzK0VpZVhQbVpFY1pSdlducW85?= =?utf-8?B?ekU2TUc4b2xlQkVMdmVtbm53MEkwc250RGh4dyttOHh5WEtaQzRWRE5WL3p6?= =?utf-8?B?QzhYall6NlZjWTJzWjNIc3VIUUZEUW5JVEJIZ3VpTXNrNXZBOHZYVEk0VG1k?= =?utf-8?B?cHp5WU9CMXBPYjdxWXhMYVJ1SC8yeEhtMWdBNXFyUkxYQmlETkp1ckNScjF2?= =?utf-8?B?UFkyd29hNkNFb1dYQWEwUjdSRzhmdFIzcWlKRTNFaytNZE92MHZPTUxjUHhO?= =?utf-8?B?dndMRjVWZTJ4NmVGKytRQkVMOTRtR1Q3Q2IxOHVXWVBZN3FvQ0NCOGZ2RXpa?= =?utf-8?B?V1RobDREd0had2d5S1BjVlJld1N1NlhqbnpBdldyTWdOaHZsOUxrYVdzamN5?= =?utf-8?B?VkdCWDRwQmk2MHB3eW1CaVlCUEVTTURLVjJyS1hjWmI4R0dIbFpodVJWVDFY?= =?utf-8?B?ZVBZajFQK3RSSEtDMzh1SjJ5OS85d2QzWkczNVc5d0JzaEM0eCtOMzV3cDI2?= =?utf-8?B?VnFoOEFJY1pSTTYrQ2xPT2tDU0NhRElFdWN4V2JqMyszL1pITnNQNC9ubGNB?= =?utf-8?B?Z25zUTNXZzg3WWxlUTRURjR3dHJXcDJqelhqbnJFV1lPRW92TE1RTWg2L2Vs?= =?utf-8?B?TnpYeGEwQ1VKYU9Yb2I3bVVJeVcwTFRhM0RDNGVINHQyYVhzaEhuNGYrQk4x?= =?utf-8?B?Tm05WHQ2eG9MTmdjbGM2UjJPb2NWbmVMVTQ5ZG56Q3Y4VzM5M0djWDRkcWEz?= =?utf-8?B?TlFIclg0a2JoSEpkV1pkUlF4QVZRR011L2QrOUxjb0FiYXNIL3c2VGU5Skhq?= =?utf-8?B?NWVyTVdIVmFQY09DRW1wbGlGWFR5VXZldlVKVWNodkZydzc5b3dVaHlERjVM?= =?utf-8?B?OGcrSTFTOFdZZWdGZWFydmdJaWw1MHJFcmFXR0dsL0lkOXpteUI2ZFRla0dJ?= =?utf-8?B?S09PVW8rQnlpajkzWHRxRWUxMEJDMmpkTkI1bXJXaWxUNW05enh6b0VSZFNl?= =?utf-8?B?SkhMZ2VtbGFySkd4YUtsUEpueEJGdnhDUzI1aWR2SzNoVkZBVytZWFQ3ejFu?= =?utf-8?B?aThrV29zTkZhQXNvL0VhQmI4L1FXSHJ6MU9iRWtDT21JYk5XelN0YWxueXRK?= =?utf-8?B?RWpMWkNuN1RHMmZrWXcva2s5UEFVWENFdC9iVnVjdnV3Nm1VSnlQbXVxSEpw?= =?utf-8?B?Yi9zZGtvL1U1TEdZOEpqY2kxKzlrT0p1OWN6L1h0TUdzSkd3elhsVTdNazdP?= =?utf-8?B?eXQ4MnBUb210cUxHVVlKejlzeG5GaThNUC83Q3BWMUcySWpjUUZDSUpoVWk4?= =?utf-8?B?MXpKMjg3d2cvYTZVTXhlc1Vwb2FHeWhKQjJncHdHSVl5R3p5T0tUS29mRGhj?= =?utf-8?B?SEMwNFhHV2QvTzJCRCtYU2lpalVTMVdRdDhUb25FK2Y4bk85SXp2cy91d0JK?= =?utf-8?B?Z1BKaWxKelNmOWJlUVN2RS9UeDVvaXU3bHJ6OS9ob2RZU1JHOHJHVy9JUXBS?= =?utf-8?B?ZE5BYklPMXFxNmpKZFE0bDVNTmJPZ0J5WmdaalJvSmVLTGc1ZG9hdlJuanp3?= =?utf-8?B?S1NKOXZpbDdGZTAwSEVKQWEyTjkxRXBIS0h1aTZwWG1BQVQyd2pGRzUwSE83?= =?utf-8?B?TGEzdEU5YlFuVFB2eFNvb25IcnZGSE5UM0drUHZiY3ZPaG1jOUJwd2tuZXU4?= =?utf-8?B?S0xwSVFNSTl1L2J0K09HcUZOUFY5Z1A2UnQzdzVsTk5EZVcwZ1JZUT09?= Content-Type: multipart/mixed; boundary="_010_TY4PR01MB1771875A7A64B139EF8C8D05C94E62TY4PR01MB17718jp_" MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: Y2VyEvhbuyYTsbFZP9zh+0sqI8nuIAX2y07hcRKgEPwNIW752DaisivfjrPzPD/SV7yhI93heq21JStrmYfEqNlpuWyPqXDBQ7t3q5d8pjmA3PLu7laCeZ4SlU5vYyM4QOHp/6PXtYLcjADGWk+dN6PpK+9HJLNz5vm0g1EHo2PUY1fVHOMnQYsDp+3hzDfmAg0BqnGj1/B0Gl7ULaSFHXRRvqcPWp5+OHgIpAkEZ6WB2UOB2O9vnV/GDczETDj02M1jW+MIHwJs2NbLJrXnvb3GYockrA4dpNkQCmoAVSc/ybEwVMxZ5r0Wj3WT5U6DLzhGOs8XA7lmmhp12wSlrQ== X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TY4PR01MB17718.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c20f162f-7d94-4399-375b-08decad0118b X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Jun 2026 11:20:12.8946 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: W1ckbO2RwaNa0GYK/+nUGDLqKhyahfaGeh1uA0caRxdfkrUx4ofO0v8k5tS9UF96fAzXb3TeI1irSgL7GGWbmg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7PR01MB13842 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_010_TY4PR01MB1771875A7A64B139EF8C8D05C94E62TY4PR01MB17718jp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gVHVlc2RheSwgSnVuZSA5LCAyMDI2IDEyOjE0IFBNIFBldGVyIFNtaXRoIDxzbWl0aHBiMjI1 MEBnbWFpbC5jb20+IHdyb3RlOg0KPiBIaSBIb3UtU2FuLg0KPiANCj4gU29tZSByZXZpZXcgY29t bWVudHMgZm9yIHYxOS0wMDAxIGFuZCB2MTktMDAwMg0KPiANCg0KVGhhbmtzIGZvciB0aGUgY29t bWVudHMuDQoNCj4gLy8vLy8vLy8vLw0KPiB2MTktMDAwMQ0KPiANCj4gMWEuDQo+IE1heWJlIHRo YXQgUGFyYWxsZWxpemVkVHhuRW50cnkgc2hvdWxkIGJlIG1vdmVkIHRvIGp1c3QgaW1tZWRpYXRl bHkgYWJvdmUNCj4gJ2RzaGFzaF9wYXJhbWV0ZXJzJyBiZWNhdXNlIGl0IHNlZW1zIHRvIGJlbG9u ZyB3aXRoIHRoYXQsIGFuZCBjdXJyZW50bHkgaXQgaXMNCj4gc3BsaXR0aW5nIHRoZSBQYXJhbGxl bEFwcGx5V29ya2VyRW50cnkgZnJvbSB0aGUgUGFyYWxsZWxBcHBseVR4bkhhc2guDQoNCk1vdmVk IGFzIHN1Z2dlc3RlZC4NCg0KPiANCj4gfg0KPiANCj4gMWIuDQo+IC9wYXJhbWV0ZXJzIGZvci9Q YXJhbWV0ZXJzIGZvci8NCj4gDQo+IH5+fg0KDQpGaXhlZC4NCg0KPiBwYV9hdHRhY2hfcGFyYWxs ZWxpemVkX3R4bl9oYXNoOg0KPiAyYS4NCj4gVGhpcyBtaWdodCBiZSBlYXNpZXIgdG8gcmVhZCBp ZiByZWFycmFuZ2VkIHRvIHVzZSBpZi9lbHNlIGluc3RlYWQgb2YgaGF2aW5nIHRoZQ0KPiBlYXJs eSByZXR1cm4uDQoNCkknbSBub3QgaW4gZmF2b3Igb2YgdGhpcyBzdHlsZSwgYXMgZGVlcGx5IG5l c3RlZCBjb25kaXRpb24gYmxvY2tzIGFyZSBoYXJkZXIgZm9yDQptZSB0byB1bmRlcnN0YW5kLiBQ bGVhc2Ugc2VlIGV4aXN0aW5nIGV4YW1wbGVzIGxpa2UgaW5pdF9kc21fcmVnaXN0cnksDQppbml0 R2xvYmFsQ2hhbm5lbFRhYmxlLCBhbmQgbG9naWNhbHJlcF9sYXVuY2hlcl9hdHRhY2hfZHNobWVt IGZvciB0aGUgcHJlZmVycmVkDQpjb2Rpbmcgc3R5bGUuDQoNCg0KPiANCj4gfn5+DQo+IA0KPiAy Yi4NCj4gQ2FuIGl0IGJlIGFueXRoaW5nIG90aGVyIHRoYW4NCj4gYW1fbGVhZGVyX2FwcGx5X3dv cmtlci9hbV9wYXJhbGxlbF9hcHBseV93b3JrZXIgaGVyZT8gU2hvdWxkIHRoZXJlIGJlDQo+IGFu IEFzc2VydD8NCg0KT25seSB0aGUgbGVhZGVyIGFuZCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIG5l ZWQgdG8gY29vcmRpbmF0ZSBpbiB0aGlzIGNvbnRleHQsDQpzbyBJIGRpZG4ndCBhZGQgYW4gQXNz ZXJ0LiBFdmVuIGlmIG90aGVyIHByb2Nlc3NlcyB1c2UgaXQsIGl0IHdpbGwgYmUgYSBuby1vcCwN CndoaWNoIGlzIGZpbmUuDQoNCg0KPiANCj4gfn5+DQo+IA0KPiAyYy4NCj4gU2luY2UgdGhlIGBk c2hfcGFyYW1zYCBhcmUgYWxyZWFkeSBzZXQgdXAsIHNob3VsZG4ndCB0aGlzIGNvZGUgYmUgdXNp bmcgdGhlbT8NCj4gDQo+IEJFRk9SRQ0KPiBkc2FfY3JlYXRlKExXVFJBTkNIRV9QQVJBTExFTF9B UFBMWV9EU0EpOw0KPiANCj4gU1VHR0VTVElPTg0KPiBkc2FfY3JlYXRlKGRzaF9wYXJhbXMudHJh bmNoZV9pZCk7DQo+IA0KDQpJIHRoaW5rIGRzYV9jcmVhdGUgYW5kIGRzaF9wYXJhbXMgYXJlIHR3 byBkaWZmZXJlbnQgb2JqZWN0cy4gVGhlIGZvcm1lciBpcyBmb3INCnB1cmUgc2hhcmVkIG1lbW9y eSBhbGxvY2F0aW9uLCB3aGlsZSB0aGUgbGF0dGVyIGlzIHBhcnQgb2YgYSBoYXNoIHRhYmxlLg0K VGhlcmVmb3JlLCBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gcGFzcyBkc2hfcGFyYW1zIHRvIGRzYV9j cmVhdGUuIFdlIGNvdWxkIGV2ZW4NCnVzZSBkaWZmZXJlbnQgTFdUUkFOQ0hFIGZvciB0aGVtIGlm IHdlIHdhbnRlZCwgYnV0IHdlIGRvbid0IGhhdmUgYSBzcGVjaWFsIG5lZWQNCnRvIGNyZWF0ZSBh bm90aGVyIG9uZSBhdCB0aGUgbW9tZW50Lg0KDQoNCj4gDQo+IC8vLy8vLy8vLy8NCj4gdjE5LTAw MDINCj4gDQo+ID09PT09PQ0KPiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVs d29ya2VyLg0KPiANCj4gMS4NCj4gK3ZvaWQNCj4gK3BhX3dhaXRfZm9yX2RlcGVuZGVkX3RyYW5z YWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkKSB7DQo+ICtQYXJhbGxlbGl6ZWRUeG5FbnRyeSAqdHhu X2VudHJ5Ow0KPiANCj4gVGhlIGRlY2xhcmF0aW9uIG9mIGB0eG5fZW50cnlgIGNhbiBiZSBkb25l IGxhdGVyIHdpdGhpbiB0aGUgbG9vcCB3aGVyZSBpdCBpcw0KPiB1c2VkLg0KDQpNb3ZlZC4NCg0K QXR0YWNoaW5nIHRoZSBuZXcgdmVyc2lvbiBwYXRjaCBzZXQuDQoNCkFwYXJ0IGZyb20gYWRkcmVz c2luZyBhYm92ZSBjb21tZW50cywgSSBhbHNvIGRpZCB0aGUgZm9sbG93aW5nIGNoYW5nZXM6DQoN CjAwMDM6DQoNCi0gRml4IGRldGVjdGlvbiBvZiBkZXBlbmRlbmNpZXMgb24gdG9hc3RlZCBjb2x1 bW5zIGJ5IHByb3Blcmx5IGNvcHlpbmcgY29sdW1uDQogIHN0YXR1cy4NCi0gRW5zdXJlIGxlYWRl ciBjb3JyZWN0bHkgaGFuZGxlcyB0YWJsZS13aWRlIGRlcGVuZGVuY2llcyB3aGVuIGFwcGx5aW5n IGENCiAgdHJhbnNhY3Rpb24gZGlyZWN0bHkuDQotIFByZXZlbnQgaW5maW5pdGUgbG9vcCBieSBz a2lwcGluZyBzZWxmLWRlcGVuZGVuY2llcyB3aGVuIGJ1aWxkaW5nIHRoZQ0KICBkZXBlbmRlbmN5 IGxpc3QuDQotIEV4cGFuZCB0ZXN0IGNvdmVyYWdlIGZvciBkZXBlbmRlbmN5IHRyYWNraW5nLg0K LSBJbXByb3ZlIGNvZGUgcmVhZGFiaWxpdHkgdGhyb3VnaCByZWZhY3RvcmluZy4NCi0gRW5oYW5j ZSBjb21tZW50cyBmb3IgYmV0dGVyIGRvY3VtZW50YXRpb24uDQoNCjAwMDg6DQowMDA5Og0KDQot IENvbXBsZXRlIG1vc3QgVE9ET3MgYW5kIGZpbmFsaXplIHRoZSBkZXNpZ24gdG8gY292ZXIgbW9y ZSBjYXNlcy4gQWRkIGV4dGVuc2l2ZQ0KICBjb21tZW50cyB0byBleHBsYWluIHRoZSBkZXNpZ24u DQoNCi0gQWRkIG1vcmUgdGVzdHMgdG8gY292ZXIgdGhlIG5ldyBjb2RlIHBhdGhzLg0KDQpCZXN0 IFJlZ2FyZHMsDQpIb3UgemoNCg== --_010_TY4PR01MB1771875A7A64B139EF8C8D05C94E62TY4PR01MB17718jp_ Content-Type: application/octet-stream; name="v20-0001-Introduce-a-shared-hash-table-to-store-paralleli.patch" Content-Description: v20-0001-Introduce-a-shared-hash-table-to-store-paralleli.patch Content-Disposition: attachment; filename="v20-0001-Introduce-a-shared-hash-table-to-store-paralleli.patch"; size=9328; creation-date="Mon, 15 Jun 2026 11:19:05 GMT"; modification-date="Mon, 15 Jun 2026 11:20:09 GMT" Content-Transfer-Encoding: base64 RnJvbSA3MjNiYmRmMzIwMmNjYmNlODgwYzljM2M4M2VhMDg1ZWViYTA3MzJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaaGlqaWUgSG91IDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBXZWQsIDI3IE1heSAyMDI2IDExOjMxOjM1ICswODAwClN1YmplY3Q6IFtQQVRDSCB2MjAg MS80XSBJbnRyb2R1Y2UgYSBzaGFyZWQgaGFzaCB0YWJsZSB0byBzdG9yZSBwYXJhbGxlbGl6ZWQK IHRyYW5zYWN0aW9ucwoKVGhpcyBjb21taXQgaW50cm9kdWNlcyBhIHNoYXJlZCBoYXNoIHRhYmxl IGZvciB0cmFja2luZyBwYXJhbGxlbGl6ZWQKdHJhbnNhY3Rpb25zLiBUaGUgaGFzaCB0YWJsZSB1 c2VzIHRyYW5zYWN0aW9uIElEcyBhcyBrZXlzOyBubyB2YWx1ZXMgYXJlIHN0b3JlZC4KClRoZSBo YXNoIGVudHJpZXMgYXJlIGluc2VydGVkIHdpdGggYSByZW1vdGUgWElEIHdoZW4gdGhlIGxlYWRl ciBieXBhc3NlcyByZW1vdGUKdHJhbnNhY3Rpb25zIHRvIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMu IEVudHJpZXMgYXJlIGRlbGV0ZWQgd2hlbiBwYXJhbGxlbAp3b3JrZXJzIGFyZSBjb21taXR0ZWQg dG8gY29ycmVzcG9uZGluZyB0cmFuc2FjdGlvbnMuCgpBbnkgd29ya2VyIGNhbiB1c2UgdGhpcyBo YXNoIHRhYmxlIHRvIGNoZWNrIHdoZXRoZXIgYSB0cmFuc2FjdGlvbiBpcyBzdGlsbAppbiBwcm9n cmVzczoKLSBJZiBhbiBlbnRyeSBleGlzdHMsIHRoZSB0cmFuc2FjdGlvbiBpcyBzdGlsbCBpbiBw cm9ncmVzcy4KLSBJZiBubyBlbnRyeSBleGlzdHMsIHRoZSB0cmFuc2FjdGlvbiBoYXMgY29tbWl0 dGVkLgoKTGF0ZXIgcGF0Y2hlcyB3aWxsIHVzZSB0aGlzIGhhc2ggdGFibGUgdG8gc3VwcG9ydCBk ZXBlbmRlbmN5IHdhaXRpbmcgYW5kCmNvbW1pdCBvcmRlciBwcmVzZXJ2YXRpb24uIFdoZW4gdHJh bnNhY3Rpb24gQSBkZXBlbmRzIG9uIHRyYW5zYWN0aW9uIEIKKG9yIG11c3QgY29tbWl0IGFmdGVy IEIpLCB0aGUgd29ya2VyIHdpbGwgd2FpdCBmb3IgdHJhbnNhY3Rpb24gQidzIGVudHJ5CnRvIGJl IHJlbW92ZWQgYmVmb3JlIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24gQS4KCkF1dGhvcjogWmhpamll IEhvdSA8aG91emouZm5zdEBmdWppdHN1LmNvbT4KQXV0aG9yOiBIYXlhdG8gS3Vyb2RhIDxrdXJv ZGEuaGF5YXRvQGZ1aml0c3UuY29tPgotLS0KIC4uLi9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5 cGFyYWxsZWx3b3JrZXIuYyB8IDkwICsrKysrKysrKysrKysrKysrKy0KIC4uLi91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oICAgICB8ICA5ICsrCiBzcmMvaW5jbHVkZS9zdG9yYWdl L2x3bG9ja2xpc3QuaCAgICAgICAgICAgICAgfCAgMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgMSArCiA1IGZpbGVzIGNoYW5nZWQsIDEwMSBpbnNl cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwppbmRleCAwMTJkNTVlOWQzZC4uNWVi MDY3OWU4NTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBw bHlwYXJhbGxlbHdvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv YXBwbHlwYXJhbGxlbHdvcmtlci5jCkBAIC0yMjMsMTAgKzIyMywzNiBAQCB0eXBlZGVmIHN0cnVj dCBQYXJhbGxlbEFwcGx5V29ya2VyRW50cnkKIAogLyoKICAqIEEgaGFzaCB0YWJsZSB1c2VkIHRv IGNhY2hlIHRoZSBzdGF0ZSBvZiBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zIGJlaW5nIGFwcGxpZWQK LSAqIGJ5IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLgorICogYnkgdGhlIHBhcmFsbGVsIGFw cGx5IHdvcmtlcnMuIEVudHJpZXMgYXJlIG9mIHR5cGUgUGFyYWxsZWxBcHBseVdvcmtlckVudHJ5 LgogICovCiBzdGF0aWMgSFRBQiAqUGFyYWxsZWxBcHBseVR4bkhhc2ggPSBOVUxMOwogCisvKiBB biBlbnRyeSBpbiB0aGUgcGFyYWxsZWxpemVkX3R4bnMgc2hhcmVkIGhhc2ggdGFibGUgKi8KK3R5 cGVkZWYgc3RydWN0IFBhcmFsbGVsaXplZFR4bkVudHJ5Cit7CisJVHJhbnNhY3Rpb25JZCB4aWQ7 CQkJLyogSGFzaCBrZXksIHJlbW90ZSB0cmFuc2FjdGlvbiBJRCAqLworfSBQYXJhbGxlbGl6ZWRU eG5FbnRyeTsKKworLyoKKyAqIEEgaGFzaCB0YWJsZSB1c2VkIHRvIHRyYWNrIHRoZSBwYXJhbGxl bGl6ZWQgcmVtb3RlIHRyYW5zYWN0aW9ucyB0aGF0IGNvdWxkIGJlCisgKiBkZXBlbmRlZCBvbiBi eSBvdGhlciB0cmFuc2FjdGlvbnMuIEVudHJpZXMgYXJlIG9mIHR5cGUgUGFyYWxsZWxpemVkVHhu RW50cnkuCisgKgorICogZHNoYXNoIGlzIHVzZWQgdG8gZW5hYmxlIGR5bmFtaWMgc2hhcmVkIG1l bW9yeSBhbGxvY2F0aW9uIGJhc2VkIG9uIHRoZSBudW1iZXIKKyAqIG9mIHRyYW5zYWN0aW9ucyBi ZWluZyBhcHBsaWVkIGluIHBhcmFsbGVsLgorICovCitzdGF0aWMgZHNhX2FyZWEgKnBhcmFsbGVs X2FwcGx5X2RzYV9hcmVhID0gTlVMTDsKK3N0YXRpYyBkc2hhc2hfdGFibGUgKnBhcmFsbGVsaXpl ZF90eG5zID0gTlVMTDsKKworLyogUGFyYW1ldGVycyBmb3IgdGhlIHBhcmFsbGVsaXplZF90eG5z IHNoYXJlZCBoYXNoIHRhYmxlICovCitzdGF0aWMgY29uc3QgZHNoYXNoX3BhcmFtZXRlcnMgZHNo X3BhcmFtcyA9IHsKKwlzaXplb2YoVHJhbnNhY3Rpb25JZCksCisJc2l6ZW9mKFBhcmFsbGVsaXpl ZFR4bkVudHJ5KSwKKwlkc2hhc2hfbWVtY21wLAorCWRzaGFzaF9tZW1oYXNoLAorCWRzaGFzaF9t ZW1jcHksCisJTFdUUkFOQ0hFX1BBUkFMTEVMX0FQUExZX0RTQQorfTsKKwogLyoKICAqIEEgbGlz dCAocG9vbCkgb2YgYWN0aXZlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuIFRoZSBpbmZvcm1hdGlv biBmb3IKICAqIHRoZSBuZXcgd29ya2VyIGlzIGFkZGVkIHRvIHRoZSBsaXN0IGFmdGVyIHN1Y2Nl c3NmdWxseSBsYXVuY2hpbmcgaXQuIFRoZQpAQCAtMjYwLDYgKzI4Niw4IEBAIHN0YXRpYyBMaXN0 ICpzdWJ4YWN0bGlzdCA9IE5JTDsKIHN0YXRpYyB2b2lkIHBhX2ZyZWVfd29ya2VyX2luZm8oUGFy YWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvKTsKIHN0YXRpYyBQYXJhbGxlbFRyYW5zU3RhdGUg cGFfZ2V0X3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCk7CiBz dGF0aWMgUGFydGlhbEZpbGVTZXRTdGF0ZSBwYV9nZXRfZmlsZXNldF9zdGF0ZSh2b2lkKTsKK3N0 YXRpYyB2b2lkIHBhX2F0dGFjaF9wYXJhbGxlbGl6ZWRfdHhuX2hhc2goZHNhX2hhbmRsZSAqcGFf ZHNhX2hhbmRsZSwKKwkJCQkJCQkJCQkJZHNoYXNoX3RhYmxlX2hhbmRsZSAqcGFfZHNoYXNoX2hh bmRsZSk7CiAKIC8qCiAgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgT0sgdG8gc3RhcnQgYSBwYXJh bGxlbCBhcHBseSB3b3JrZXIsIGZhbHNlIG90aGVyd2lzZS4KQEAgLTMzNyw2ICszNjUsMTUgQEAg cGFfc2V0dXBfZHNtKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbykKIAlzaG1fbXEJICAg Km1xOwogCVNpemUJCXF1ZXVlX3NpemUgPSBEU01fUVVFVUVfU0laRTsKIAlTaXplCQllcnJvcl9x dWV1ZV9zaXplID0gRFNNX0VSUk9SX1FVRVVFX1NJWkU7CisJZHNhX2hhbmRsZQlwYXJhbGxlbF9h cHBseV9kc2FfaGFuZGxlOworCWRzaGFzaF90YWJsZV9oYW5kbGUgcGFyYWxsZWxpemVkX3R4bnNf aGFuZGxlOworCisJcGFfYXR0YWNoX3BhcmFsbGVsaXplZF90eG5faGFzaCgmcGFyYWxsZWxfYXBw bHlfZHNhX2hhbmRsZSwKKwkJCQkJCQkJCSZwYXJhbGxlbGl6ZWRfdHhuc19oYW5kbGUpOworCisJ aWYgKHBhcmFsbGVsX2FwcGx5X2RzYV9oYW5kbGUgPT0gRFNBX0hBTkRMRV9JTlZBTElEIHx8CisJ CXBhcmFsbGVsaXplZF90eG5zX2hhbmRsZSA9PSBEU0hBU0hfSEFORExFX0lOVkFMSUQpCisJCXJl dHVybiBmYWxzZTsKIAogCS8qCiAJICogRXN0aW1hdGUgaG93IG11Y2ggc2hhcmVkIG1lbW9yeSB3 ZSBuZWVkLgpAQCAtMzcyLDYgKzQwOSw4IEBAIHBhX3NldHVwX2RzbShQYXJhbGxlbEFwcGx5V29y a2VySW5mbyAqd2luZm8pCiAJcGdfYXRvbWljX2luaXRfdTMyKCYoc2hhcmVkLT5wZW5kaW5nX3N0 cmVhbV9jb3VudCksIDApOwogCXNoYXJlZC0+bGFzdF9jb21taXRfZW5kID0gSW52YWxpZFhMb2dS ZWNQdHI7CiAJc2hhcmVkLT5maWxlc2V0X3N0YXRlID0gRlNfRU1QVFk7CisJc2hhcmVkLT5wYXJh bGxlbF9hcHBseV9kc2FfaGFuZGxlID0gcGFyYWxsZWxfYXBwbHlfZHNhX2hhbmRsZTsKKwlzaGFy ZWQtPnBhcmFsbGVsaXplZF90eG5zX2hhbmRsZSA9IHBhcmFsbGVsaXplZF90eG5zX2hhbmRsZTsK IAogCXNobV90b2NfaW5zZXJ0KHRvYywgUEFSQUxMRUxfQVBQTFlfS0VZX1NIQVJFRCwgc2hhcmVk KTsKIApAQCAtODc2LDYgKzkxNSw4IEBAIFBhcmFsbGVsQXBwbHlXb3JrZXJNYWluKERhdHVtIG1h aW5fYXJnKQogCXNobV9tcQkgICAqbXE7CiAJc2htX21xX2hhbmRsZSAqbXFoOwogCXNobV9tcV9o YW5kbGUgKmVycm9yX21xaDsKKwlkc2FfaGFuZGxlCXBhX2RzYV9oYW5kbGU7CisJZHNoYXNoX3Rh YmxlX2hhbmRsZSBwYV9kc2hhc2hfaGFuZGxlOwogCVJlcGxPcmlnaW5JZCBvcmlnaW5pZDsKIAlp bnQJCQl3b3JrZXJfc2xvdCA9IERhdHVtR2V0SW50MzIobWFpbl9hcmcpOwogCWNoYXIJCW9yaWdp bm5hbWVbTkFNRURBVEFMRU5dOwpAQCAtOTYyLDYgKzEwMDMsOCBAQCBQYXJhbGxlbEFwcGx5V29y a2VyTWFpbihEYXR1bSBtYWluX2FyZykKIAogCUluaXRpYWxpemluZ0FwcGx5V29ya2VyID0gZmFs c2U7CiAKKwlwYV9hdHRhY2hfcGFyYWxsZWxpemVkX3R4bl9oYXNoKCZwYV9kc2FfaGFuZGxlLCAm cGFfZHNoYXNoX2hhbmRsZSk7CisKIAkvKiBTZXR1cCByZXBsaWNhdGlvbiBvcmlnaW4gdHJhY2tp bmcuICovCiAJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAlSZXBsaWNhdGlvbk9yaWdpbk5h bWVGb3JMb2dpY2FsUmVwKE15U3Vic2NyaXB0aW9uLT5vaWQsIEludmFsaWRPaWQsCkBAIC0xNjU2 LDMgKzE2OTksNDggQEAgcGFfeGFjdF9maW5pc2goUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndp bmZvLCBYTG9nUmVjUHRyIHJlbW90ZV9sc24pCiAKIAlwYV9mcmVlX3dvcmtlcih3aW5mbyk7CiB9 CisKKy8qCisgKiBBdHRhY2ggdG8gdGhlIHNoYXJlZCBoYXNoIHRhYmxlIGZvciBwYXJhbGxlbGl6 ZWQgdHJhbnNhY3Rpb25zLgorICovCitzdGF0aWMgdm9pZAorcGFfYXR0YWNoX3BhcmFsbGVsaXpl ZF90eG5faGFzaChkc2FfaGFuZGxlICpwYV9kc2FfaGFuZGxlLAorCQkJCQkJCQlkc2hhc2hfdGFi bGVfaGFuZGxlICpwYV9kc2hhc2hfaGFuZGxlKQoreworCU1lbW9yeUNvbnRleHQgb2xkY3R4Owor CisJaWYgKHBhcmFsbGVsaXplZF90eG5zKQorCXsKKwkJQXNzZXJ0KHBhcmFsbGVsX2FwcGx5X2Rz YV9hcmVhKTsKKwkJKnBhX2RzYV9oYW5kbGUgPSBkc2FfZ2V0X2hhbmRsZShwYXJhbGxlbF9hcHBs eV9kc2FfYXJlYSk7CisJCSpwYV9kc2hhc2hfaGFuZGxlID0gZHNoYXNoX2dldF9oYXNoX3RhYmxl X2hhbmRsZShwYXJhbGxlbGl6ZWRfdHhucyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBCZSBzdXJl IGFueSBsb2NhbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IERTQSByb3V0aW5lcyBpcyBwZXJzaXN0ZW50 LiAqLworCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNvbnRleHQpOworCisJ aWYgKGFtX2xlYWRlcl9hcHBseV93b3JrZXIoKSkKKwl7CisJCS8qIEluaXRpYWxpemUgZHluYW1p YyBzaGFyZWQgaGFzaCB0YWJsZSBmb3IgcGFyYWxsZWxpemVkIHRyYW5zYWN0aW9ucyAqLworCQlw YXJhbGxlbF9hcHBseV9kc2FfYXJlYSA9IGRzYV9jcmVhdGUoTFdUUkFOQ0hFX1BBUkFMTEVMX0FQ UExZX0RTQSk7CisJCWRzYV9waW4ocGFyYWxsZWxfYXBwbHlfZHNhX2FyZWEpOworCQlkc2FfcGlu X21hcHBpbmcocGFyYWxsZWxfYXBwbHlfZHNhX2FyZWEpOworCQlwYXJhbGxlbGl6ZWRfdHhucyA9 IGRzaGFzaF9jcmVhdGUocGFyYWxsZWxfYXBwbHlfZHNhX2FyZWEsICZkc2hfcGFyYW1zLCBOVUxM KTsKKworCQkvKiBTdG9yZSBoYW5kbGVzIGluIHNoYXJlZCBtZW1vcnkgZm9yIG90aGVyIGJhY2tl bmRzIHRvIHVzZS4gKi8KKwkJKnBhX2RzYV9oYW5kbGUgPSBkc2FfZ2V0X2hhbmRsZShwYXJhbGxl bF9hcHBseV9kc2FfYXJlYSk7CisJCSpwYV9kc2hhc2hfaGFuZGxlID0gZHNoYXNoX2dldF9oYXNo X3RhYmxlX2hhbmRsZShwYXJhbGxlbGl6ZWRfdHhucyk7CisJfQorCWVsc2UgaWYgKGFtX3BhcmFs bGVsX2FwcGx5X3dvcmtlcigpKQorCXsKKwkJLyogQXR0YWNoIHRvIGV4aXN0aW5nIGR5bmFtaWMg c2hhcmVkIGhhc2ggdGFibGUuICovCisJCXBhcmFsbGVsX2FwcGx5X2RzYV9hcmVhID0gZHNhX2F0 dGFjaChNeVBhcmFsbGVsU2hhcmVkLT5wYXJhbGxlbF9hcHBseV9kc2FfaGFuZGxlKTsKKwkJZHNh X3Bpbl9tYXBwaW5nKHBhcmFsbGVsX2FwcGx5X2RzYV9hcmVhKTsKKwkJcGFyYWxsZWxpemVkX3R4 bnMgPSBkc2hhc2hfYXR0YWNoKHBhcmFsbGVsX2FwcGx5X2RzYV9hcmVhLCAmZHNoX3BhcmFtcywK KwkJCQkJCQkJCQkgIE15UGFyYWxsZWxTaGFyZWQtPnBhcmFsbGVsaXplZF90eG5zX2hhbmRsZSwK KwkJCQkJCQkJCQkgIE5VTEwpOworCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgp OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9u YW1lcy50eHQgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4 dAppbmRleCA1NjA2NTlmOTU2OC4uMTMzOWMzMzI2MmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CkBAIC00MTcsNiArNDE3LDcgQEAgWGFj dFNMUlUJIldhaXRpbmcgdG8gYWNjZXNzIHRoZSB0cmFuc2FjdGlvbiBzdGF0dXMgU0xSVSBjYWNo ZS4iCiBQYXJhbGxlbFZhY3V1bURTQQkiV2FpdGluZyBmb3IgcGFyYWxsZWwgdmFjdXVtIGR5bmFt aWMgc2hhcmVkIG1lbW9yeSBhbGxvY2F0aW9uLiIKIEFpb1VyaW5nQ29tcGxldGlvbgkiV2FpdGlu ZyBmb3IgYW5vdGhlciBwcm9jZXNzIHRvIGNvbXBsZXRlIElPIHZpYSBpb191cmluZy4iCiBTaG1l bUluZGV4CSJXYWl0aW5nIHRvIGZpbmQgb3IgYWxsb2NhdGUgc3BhY2UgaW4gc2hhcmVkIG1lbW9y eS4iCitQYXJhbGxlbEFwcGx5RFNBCSJXYWl0aW5nIGZvciBwYXJhbGxlbCBhcHBseSBkeW5hbWlj IHNoYXJlZCBtZW1vcnkgYWxsb2NhdGlvbi4iCiAKICMgTm8gIkFCSV9jb21wYXRpYmlsaXR5IiBy ZWdpb24gaGVyZSBhcyBXYWl0RXZlbnRMV0xvY2sgaGFzIGl0cyBvd24gQyBjb2RlLgogCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCmluZGV4IDc0NWI3ZDllOTY5Li5l NjBlMGMzZDZkNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2lu dGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgK QEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oIgogI2luY2x1ZGUgImRhdGF0eXBlL3RpbWVzdGFt cC5oIgorI2luY2x1ZGUgImxpYi9kc2hhc2guaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaCIKICNpbmNsdWRlICJyZXBsaWNh dGlvbi93YWxyZWNlaXZlci5oIgpAQCAtMTk2LDYgKzE5NywxNCBAQCB0eXBlZGVmIHN0cnVjdCBQ YXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkCiAJICovCiAJUGFydGlhbEZpbGVTZXRTdGF0ZSBmaWxl c2V0X3N0YXRlOwogCUZpbGVTZXQJCWZpbGVzZXQ7CisKKwkvKgorCSAqIERTQSBoYW5kbGUgZm9y IHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMsIGFsb25nIHdpdGggdGhlIGhhbmRsZSBmb3IgdGhlCisJ ICogc2hhcmVkIGhhc2ggdGFibGUgYWxsb2NhdGVkIHVuZGVyIGl0LiBUaGUgaGFzaCB0YWJsZSBz dG9yZXMgcGFyYWxsZWxpemVkCisJICogdHJhbnNhY3Rpb24gaW5mb3JtYXRpb24uCisJICovCisJ ZHNhX2hhbmRsZQlwYXJhbGxlbF9hcHBseV9kc2FfaGFuZGxlOworCWRzaGFzaF90YWJsZV9oYW5k bGUgcGFyYWxsZWxpemVkX3R4bnNfaGFuZGxlOwogfSBQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVk OwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmggYi9z cmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaAppbmRleCBkN2ViNjQ4YmQyNy4uYzVmMjky MWI3MDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCkBAIC0xNDAsMyArMTQwLDQgQEAgUEdf TFdMT0NLVFJBTkNIRShYQUNUX1NMUlUsIFhhY3RTTFJVKQogUEdfTFdMT0NLVFJBTkNIRShQQVJB TExFTF9WQUNVVU1fRFNBLCBQYXJhbGxlbFZhY3V1bURTQSkKIFBHX0xXTE9DS1RSQU5DSEUoQUlP X1VSSU5HX0NPTVBMRVRJT04sIEFpb1VyaW5nQ29tcGxldGlvbikKIFBHX0xXTE9DS1RSQU5DSEUo U0hNRU1fSU5ERVgsIFNobWVtSW5kZXgpCitQR19MV0xPQ0tUUkFOQ0hFKFBBUkFMTEVMX0FQUExZ X0RTQSwgUGFyYWxsZWxBcHBseURTQSkKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOGNm NDBjODcwNDMuLmZhYmRhMTdkNzM5IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjE2 Miw2ICsyMTYyLDcgQEAgUGFyYWxsZWxIYXNoSm9pbkJhdGNoCiBQYXJhbGxlbEhhc2hKb2luQmF0 Y2hBY2Nlc3NvcgogUGFyYWxsZWxIYXNoSm9pblN0YXRlCiBQYXJhbGxlbEluZGV4U2NhbkRlc2MK K1BhcmFsbGVsaXplZFR4bkVudHJ5CiBQYXJhbGxlbFNsb3QKIFBhcmFsbGVsU2xvdEFycmF5CiBQ YXJhbGxlbFNsb3RSZXN1bHRIYW5kbGVyCi0tIAoyLjQzLjAKCg== --_010_TY4PR01MB1771875A7A64B139EF8C8D05C94E62TY4PR01MB17718jp_ Content-Type: application/octet-stream; name="v20-0009-Support-dependency-tracking-via-local-foreign-ke.patch" Content-Description: v20-0009-Support-dependency-tracking-via-local-foreign-ke.patch Content-Disposition: attachment; filename="v20-0009-Support-dependency-tracking-via-local-foreign-ke.patch"; size=43444; creation-date="Mon, 15 Jun 2026 11:19:05 GMT"; modification-date="Mon, 15 Jun 2026 11:20:10 GMT" Content-Transfer-Encoding: base64 RnJvbSA5MGJlMGU1YjI5NDNhYTQwNzRhMjI3NGRiNDVlNmM3MjMwNzMzZjBhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaaGlqaWUgSG91IDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBTYXQsIDEzIEp1biAyMDI2IDE5OjIzOjI4ICswODAwClN1YmplY3Q6IFtQQVRDSCB2MjAg OS85XSBTdXBwb3J0IGRlcGVuZGVuY3kgdHJhY2tpbmcgdmlhIGxvY2FsIGZvcmVpZ24ga2V5cwoK VGhpcyBwYXRjaCB0cmFja3MgZm9yZWlnbiBrZXkgZGVwZW5kZW5jaWVzIHRvIHByZXZlbnQgY29u c3RyYWludCB2aW9sYXRpb25zLgpDb25zaWRlciBhIHJlZmVyZW5jaW5nIHRhYmxlIEZLX1RBQkxF IChhIElOVCBSRUZFUkVOQ0VTIFBLX1RBQkxFKSBhbmQgYQpyZWZlcmVuY2VkIHRhYmxlIFBLX1RB QkxFIChhIElOVCBQUklNQVJZIEtFWSk6CgogIFRYLTE6IElOU0VSVCByb3cgKDEpIElOVE8gUEtf VEFCTEUKICBUWC0yOiBJTlNFUlQgcm93ICgxKSBJTlRPIEZLX1RBQkxFCgpUWC0yIG11c3Qgd2Fp dCBmb3IgVFgtMTsgb3RoZXJ3aXNlLCBhIGZvcmVpZ24ga2V5IHZpb2xhdGlvbiBvY2N1cnMuCgpT aW1pbGFybHksIGZvciBkZWxldGlvbnM6CgogIFRYLTE6IERFTEVURSByb3cgKDEpIEZST00gRktf VEFCTEUKICBUWC0yOiBERUxFVEUgcm93ICgxKSBGUk9NIFBLX1RBQkxFCgpUWC0yIG11c3Qgd2Fp dCBmb3IgVFgtMSB0byBhdm9pZCB2aW9sYXRpbmcgdGhlIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQu CgpUaGVyZWZvcmUsIHdlIHJlY29yZCBuZXcgdHVwbGVzIG9uIHRoZSByZWZlcmVuY2VkIHRhYmxl IChQS19UQUJMRSkgYW5kIGNoZWNrCmZvciBkZXBlbmRlbmNpZXMgd2hlbiBwcm9jZXNzaW5nIG5l dyB0dXBsZXMgb24gdGhlIHJlZmVyZW5jaW5nIHRhYmxlCihGS19UQUJMRSkuIENvbnZlcnNlbHks IHdlIHJlY29yZCBvbGQgdHVwbGVzIGRlbGV0ZWQgZnJvbSB0aGUgcmVmZXJlbmNpbmcKdGFibGUg YW5kIHJlcXVpcmUgZGVsZXRpb25zIG9uIHRoZSByZWZlcmVuY2VkIHRhYmxlIHRvIGRlcGVuZCBv biB0aGVtLgoKU2ltaWxhciB0byB1bmlxdWUga2V5IGRlcGVuZGVuY2llcywgZm9yIGRlbGV0ZS1k ZWxldGUgY2FzZXMgd2Ugb25seSB0cmFjawpmb3JlaWduIGtleSBkZXBlbmRlbmNpZXMgb24gY29s dW1ucyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5CmtleXMgb24gdGhlIHB1 Ymxpc2hlci4gVGhpcyBtYXkgbGVhZCB0byBmYWxzZSBwb3NpdGl2ZXMgYnV0IGlzIGFjY2VwdGFi bGUKZ2l2ZW4gdGhlIHRyYWRlLW9mZi4KLS0tCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9hcHBs eXBhcmFsbGVsd29ya2VyLmMgfCAgMjYgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9yZWxhdGlvbi5jICAgIHwgNDk2ICsrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgMzAwICsrKysrKysrKystCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaCAgICAgfCAgMjIgKwogc3JjL3Rlc3Qv c3Vic2NyaXB0aW9uL3QvMDUwX3BhcmFsbGVsX2FwcGx5LnBsIHwgMTY0ICsrKysrKwogNSBmaWxl cyBjaGFuZ2VkLCA5OTggaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwpp bmRleCA4ODI2ZmFmMTAyYy4uMzIxNDRiYjU3ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jCkBAIC0yMTgsNiArMjE4 LDMyIEBACiAgKiByZXBsaWNhIGlkZW50aXR5IGtleXMuIFRoaXMgY291bGQgYmUgdXNlZnVsIGZv ciB1c2VycyB3aG8gcHJlZmVyIGhpZ2hlcgogICogcGFyYWxsZWxpc20gYW5kIGV4cGVyaWVuY2Ug ZmV3IGNvbmZsaWN0cy4KICAqCisgKiBBZGRpdGlvbmFsbHksIGZvcmVpZ24ga2V5IGRlcGVuZGVu Y2llcyBhcmUgYWxzbyB0cmFja2VkIHRvIHByZXZlbnQgY29uc3RyYWludAorICogdmlvbGF0aW9u cy4gQ29uc2lkZXIgYSByZWZlcmVuY2luZyB0YWJsZSBGS19UQUJMRSAoYSBJTlQgUkVGRVJFTkNF UyBQS19UQUJMRSkKKyAqIGFuZCBhIHJlZmVyZW5jZWQgdGFibGUgUEtfVEFCTEUgKGEgSU5UIFBS SU1BUlkgS0VZKToKKyAqCisgKiAgIFRYLTE6IElOU0VSVCByb3cgKDEpIElOVE8gUEtfVEFCTEUK KyAqICAgVFgtMjogSU5TRVJUIHJvdyAoMSkgSU5UTyBGS19UQUJMRQorICoKKyAqIFRYLTIgbXVz dCB3YWl0IGZvciBUWC0xOyBvdGhlcndpc2UsIGEgZm9yZWlnbiBrZXkgdmlvbGF0aW9uIG9jY3Vy cy4KKyAqCisgKiBTaW1pbGFybHksIGZvciBkZWxldGlvbnM6CisgKgorICogICBUWC0xOiBERUxF VEUgcm93ICgxKSBGUk9NIEZLX1RBQkxFCisgKiAgIFRYLTI6IERFTEVURSByb3cgKDEpIEZST00g UEtfVEFCTEUKKyAqCisgKiBUWC0yIG11c3Qgd2FpdCBmb3IgVFgtMSB0byBhdm9pZCB2aW9sYXRp bmcgdGhlIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQuCisgKgorICogVGhlcmVmb3JlLCB3ZSByZWNv cmQgbmV3IHR1cGxlcyBvbiB0aGUgcmVmZXJlbmNlZCB0YWJsZSAoUEtfVEFCTEUpIGFuZCBjaGVj aworICogZm9yIGRlcGVuZGVuY2llcyB3aGVuIHByb2Nlc3NpbmcgbmV3IHR1cGxlcyBvbiB0aGUg cmVmZXJlbmNpbmcgdGFibGUKKyAqIChGS19UQUJMRSkuIENvbnZlcnNlbHksIHdlIHJlY29yZCBv bGQgdHVwbGVzIGRlbGV0ZWQgZnJvbSB0aGUgcmVmZXJlbmNpbmcKKyAqIHRhYmxlIGFuZCByZXF1 aXJlIGRlbGV0aW9ucyBvbiB0aGUgcmVmZXJlbmNlZCB0YWJsZSB0byBkZXBlbmQgb24gdGhlbS4K KyAqCisgKiBTaW1pbGFyIHRvIHVuaXF1ZSBrZXkgZGVwZW5kZW5jaWVzLCBmb3IgZGVsZXRlLWRl bGV0ZSBjYXNlcyB3ZSBvbmx5IHRyYWNrCisgKiBmb3JlaWduIGtleSBkZXBlbmRlbmNpZXMgb24g Y29sdW1ucyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5CisgKiBrZXlzIG9u IHRoZSBwdWJsaXNoZXIuIFRoaXMgbWF5IGxlYWQgdG8gZmFsc2UgcG9zaXRpdmVzIGJ1dCBpcyBh Y2NlcHRhYmxlCisgKiBnaXZlbiB0aGUgdHJhZGUtb2ZmLgorICoKICAqIE5vdGUgdGhhdCB0aGUg bG9jYWwgdW5pcXVlIGtleSBjb3VsZCBjaGFuZ2UgYWZ0ZXIgZGVwZW5kZW5jeSBjaGVja2luZyBh bmQKICAqIGJlZm9yZSBhcHBseWluZyB0aGUgY2hhbmdlLiBIb3dldmVyLCB0byBjZW50cmFsaXpl IHRyYWNraW5nIGFuZCBrZWVwIGl0CiAgKiBzaW1wbGUsIHdlIHN0aWxsIHBlcmZvcm0gdGhpcyBj aGVjayBvbmx5IGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLiBUaGlzIGlzCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKaW5kZXggOGVlZjg3Y2E5MTAuLmY1OThm ZmU3MTE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0 aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCkBA IC0yMCw3ICsyMCw5IEBACiAjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9oZWFwLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX2NvbnN0cmFpbnQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX3N1YnNjcmlwdGlvbl9yZWwuaCIKICNpbmNsdWRlICJjb21tYW5kcy90 cmlnZ2VyLmgiCkBAIC0yOCw2ICszMCw3IEBACiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgiCiAjaW5jbHVkZSAicmVw bGljYXRpb24vd29ya2VyX2ludGVybmFsLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIK ICNpbmNsdWRlICJ1dGlscy9pbnZhbC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgog I2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCkBAIC04NSw2ICs4OCw3IEBAIGxvZ2ljYWxyZXBf cmVsbWFwX2ludmFsaWRhdGVfY2IoRGF0dW0gYXJnLCBPaWQgcmVsb2lkKQogCQkJewogCQkJCWVu dHJ5LT5sb2NhbHJlbHZhbGlkID0gZmFsc2U7CiAJCQkJZW50cnktPmxvY2FsX3VuaXF1ZV9pbmRl eGVzX2NvbGxlY3RlZCA9IGZhbHNlOworCQkJCWVudHJ5LT5sb2NhbF9ma2V5c19jb2xsZWN0ZWQg PSBmYWxzZTsKIAkJCQloYXNoX3NlcV90ZXJtKCZzdGF0dXMpOwogCQkJCWJyZWFrOwogCQkJfQpA QCAtMTAxLDYgKzEwNSw3IEBAIGxvZ2ljYWxyZXBfcmVsbWFwX2ludmFsaWRhdGVfY2IoRGF0dW0g YXJnLCBPaWQgcmVsb2lkKQogCQl7CiAJCQllbnRyeS0+bG9jYWxyZWx2YWxpZCA9IGZhbHNlOwog CQkJZW50cnktPmxvY2FsX3VuaXF1ZV9pbmRleGVzX2NvbGxlY3RlZCA9IGZhbHNlOworCQkJZW50 cnktPmxvY2FsX2ZrZXlzX2NvbGxlY3RlZCA9IGZhbHNlOwogCQl9CiAJfQogfQpAQCAtMTQ3LDYg KzE1MiwzMyBAQCBmcmVlX2xvY2FsX3VuaXF1ZV9pbmRleGVzKExvZ2ljYWxSZXBSZWxNYXBFbnRy eSAqZW50cnkpCiAJZW50cnktPmxvY2FsX3VuaXF1ZV9pbmRleGVzID0gTklMOwogfQogCisvKgor ICogUmVsZWFzZSBsb2NhbCBmb3JlaWduIGtleSBsaXN0cy4KKyAqLworc3RhdGljIHZvaWQKK2Zy ZWVfbG9jYWxfZmtleXMoTG9naWNhbFJlcFJlbE1hcEVudHJ5ICplbnRyeSkKK3sKKwlBc3NlcnQo YW1fbGVhZGVyX2FwcGx5X3dvcmtlcigpKTsKKworCWZvcmVhY2hfcHRyKExvZ2ljYWxSZXBTdWJz Y3JpYmVyRkssIGZraW5mbywgZW50cnktPmxvY2FsX2ZrZXlzKQorCXsKKwkJbGlzdF9mcmVlKGZr aW5mby0+ZmthdHRudW1zKTsKKwkJbGlzdF9mcmVlKGZraW5mby0+ZmthdHRudW1zX29sZCk7CisJ fQorCisJZm9yZWFjaF9wdHIoTG9naWNhbFJlcFN1YnNjcmliZXJSZWZGSywgcmVmaW5mbywgZW50 cnktPmxvY2FsX3JlZmVyZW5jZWRfZmtleXMpCisJeworCQlsaXN0X2ZyZWUocmVmaW5mby0+cmVm YXR0bnVtcyk7CisJCWxpc3RfZnJlZShyZWZpbmZvLT5yZWZhdHRudW1zX29sZCk7CisJfQorCisJ bGlzdF9mcmVlX2RlZXAoZW50cnktPmxvY2FsX2ZrZXlzKTsKKwlsaXN0X2ZyZWVfZGVlcChlbnRy eS0+bG9jYWxfcmVmZXJlbmNlZF9ma2V5cyk7CisKKwllbnRyeS0+bG9jYWxfZmtleXMgPSBOSUw7 CisJZW50cnktPmxvY2FsX3JlZmVyZW5jZWRfZmtleXMgPSBOSUw7Cit9CisKIC8qCiAgKiBGcmVl IHRoZSBlbnRyeSBvZiBhIHJlbGF0aW9uIG1hcCBjYWNoZS4KICAqLwpAQCAtMTc3LDYgKzIwOSw5 IEBAIGxvZ2ljYWxyZXBfcmVsbWFwX2ZyZWVfZW50cnkoTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpl bnRyeSkKIAogCWlmIChlbnRyeS0+bG9jYWxfdW5pcXVlX2luZGV4ZXMgIT0gTklMKQogCQlmcmVl X2xvY2FsX3VuaXF1ZV9pbmRleGVzKGVudHJ5KTsKKworCWlmIChlbnRyeS0+bG9jYWxfZmtleXMg IT0gTklMIHx8IGVudHJ5LT5sb2NhbF9yZWZlcmVuY2VkX2ZrZXlzICE9IE5JTCkKKwkJZnJlZV9s b2NhbF9ma2V5cyhlbnRyeSk7CiB9CiAKIC8qCkBAIC0yNDAsNiArMjc1LDcgQEAgbG9naWNhbHJl cF9yZWxtYXBfdXBkYXRlKExvZ2ljYWxSZXBSZWxhdGlvbiAqcmVtb3RlcmVsKQogCiAJZW50cnkt PnBhcmFsbGVsX3NhZmUgPSBMT0dJQ0FMUkVQX1BBUkFMTEVMX1VOS05PV047CiAJZW50cnktPmxv Y2FsX3VuaXF1ZV9pbmRleGVzX2NvbGxlY3RlZCA9IGZhbHNlOworCWVudHJ5LT5sb2NhbF9ma2V5 c19jb2xsZWN0ZWQgPSBmYWxzZTsKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKIH0K IApAQCAtNTMyLDYgKzU2OCw0NjEgQEAgY29sbGVjdF9pbmRleGVzX2Zvcl9kZXBlbmRlbmN5X3Ry YWNraW5nKExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqZW50cnkpCiAJZW50cnktPmxvY2FsX3VuaXF1 ZV9pbmRleGVzX2NvbGxlY3RlZCA9IHRydWU7CiB9CiAKKy8qCisgKiBTZWFyY2ggYSByZWxtYXAg ZW50cnkgYnkgbG9jYWwgcmVsYXRpb24gT0lELgorICovCitzdGF0aWMgTG9naWNhbFJlcFJlbE1h cEVudHJ5ICoKK2xvZ2ljYWxyZXBfZ2V0X3JlbGVudHJ5X2J5X2xvY2FsX29pZChPaWQgbG9jYWxy ZWxvaWQpCit7CisJSEFTSF9TRVFfU1RBVFVTIHN0YXR1czsKKwlMb2dpY2FsUmVwUmVsTWFwRW50 cnkgKmVudHJ5ID0gTlVMTDsKKworCWlmIChMb2dpY2FsUmVwUmVsTWFwID09IE5VTEwpCisJCXJl dHVybiBOVUxMOworCisJaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCBMb2dpY2FsUmVwUmVsTWFwKTsK Kwl3aGlsZSAoKGVudHJ5ID0gKExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqKSBoYXNoX3NlcV9zZWFy Y2goJnN0YXR1cykpICE9IE5VTEwpCisJeworCQlpZiAoZW50cnktPmxvY2FscmVsb2lkID09IGxv Y2FscmVsb2lkKQorCQl7CisJCQloYXNoX3NlcV90ZXJtKCZzdGF0dXMpOworCQkJcmV0dXJuIGVu dHJ5OworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBSZXR1cm4gcmVtb3Rl IHJlbGF0aW9uIElEcyB0aGF0IGhhdmUgRksgZGVwZW5kZW5jeSBtZXRhZGF0YSB0aWVkIHRvIHRo ZQorICogc3BlY2lmaWVkIHJlbGF0aW9uLCBlaXRoZXIgYXMgcmVmZXJlbmNpbmctc2lkZSBvciBy ZWZlcmVuY2VkLXNpZGUgZW50cmllcy4KKyAqLworTGlzdCAqCitsb2dpY2FscmVwX2dldF9ma19y ZWxhdGVkX3JlbGlkcyhMb2dpY2FsUmVwUmVsYXRpb24gKnJlbW90ZXJlbCkKK3sKKwlMb2dpY2Fs UmVwUmVsTWFwRW50cnkgKnRhcmdldDsKKwlib29sCQlmb3VuZDsKKwlMaXN0CSAgICpyZWxhdGVk ID0gTklMOworCU9pZAkJcmVsbmFtZXNwYWNlOworCU9pZAkJCXJlbW90ZWlkID0gcmVtb3RlcmVs LT5yZW1vdGVpZDsKKworCWlmIChMb2dpY2FsUmVwUmVsTWFwID09IE5VTEwpCisJCXJldHVybiBO SUw7CisKKwl0YXJnZXQgPSBoYXNoX3NlYXJjaChMb2dpY2FsUmVwUmVsTWFwLCAmcmVtb3RlaWQs IEhBU0hfRklORCwgJmZvdW5kKTsKKworCS8qCisJICogSWYgbm90IGV4aXN0cyB5ZXQsIGJ1aWxk IGEgbmV3IGVudHJ5IHNvIHRoYXQgd2UgY2FuIGNvbGxlY3QgYWxsIHRoZQorCSAqIHJlZmVyZW5j ZWQgYW5kIHJlZmVyZW5jaW5nIHRhYmxlcy4KKwkgKi8KKwlpZiAoIWZvdW5kKQorCXsKKwkJbG9n aWNhbHJlcF9yZWxtYXBfdXBkYXRlKHJlbW90ZXJlbCk7CisJCXRhcmdldCA9IGhhc2hfc2VhcmNo KExvZ2ljYWxSZXBSZWxNYXAsICZyZW1vdGVpZCwgSEFTSF9GSU5ELCAmZm91bmQpOworCX0KKwor CUFzc2VydChmb3VuZCk7CisKKwkvKiBDb2xsZWN0IHRoZSB0YWJsZXMgaWYgbm90IHlldCAqLwor CWlmICghdGFyZ2V0LT5sb2NhbF9ma2V5c19jb2xsZWN0ZWQpCisJeworCQlib29sCQluZWVkc19z dGFydCA9ICFJc1RyYW5zYWN0aW9uT3JUcmFuc2FjdGlvbkJsb2NrKCk7CisKKwkJaWYgKG5lZWRz X3N0YXJ0KQorCQkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQkvKiBSZXR1cm4gaWYg dGhlIHJlbGF0aW9uIGRvZXMgbm90IGV4aXN0ICovCisJCXJlbG5hbWVzcGFjZSA9IGdldF9uYW1l c3BhY2Vfb2lkKHJlbW90ZXJlbC0+bnNwbmFtZSwgdHJ1ZSk7CisJCWlmICghT2lkSXNWYWxpZChn ZXRfcmVsbmFtZV9yZWxpZChyZW1vdGVyZWwtPnJlbG5hbWUsIHJlbG5hbWVzcGFjZSkpKQorCQl7 CisJCQlpZiAobmVlZHNfc3RhcnQpCisJCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisK KwkJCXJldHVybiBOSUw7CisJCX0KKworCQlsb2dpY2FscmVwX3JlbF9sb2FkKE5VTEwsIHJlbW90 ZWlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCWlmIChuZWVkc19zdGFydCkKKwkJCUNvbW1pdFRy YW5zYWN0aW9uQ29tbWFuZCgpOworCX0KKworCUFzc2VydCh0YXJnZXQtPmxvY2FsX2ZrZXlzX2Nv bGxlY3RlZCk7CisKKwkvKiBDb2xsZWN0IGFsbCB0aGUgdGFibGVzIHJlZmVyZW5jZWQgYnkgdGhl IGdpdmVuIHRhYmxlICovCisJZm9yZWFjaF9wdHIoTG9naWNhbFJlcFN1YnNjcmliZXJGSywgZmtp bmZvLCB0YXJnZXQtPmxvY2FsX2ZrZXlzKQorCQlyZWxhdGVkID0gbGlzdF9hcHBlbmRfdW5pcXVl X29pZChyZWxhdGVkLCBma2luZm8tPnJlZl9yZW1vdGVpZCk7CisKKwkvKiBDb2xsZWN0IGFsbCB0 aGUgdGFibGVzIHJlZmVyZW5jaW5nIHRoZSBnaXZlbiB0YWJsZSAqLworCWZvcmVhY2hfcHRyKExv Z2ljYWxSZXBTdWJzY3JpYmVyUmVmRkssIHJlZmluZm8sIHRhcmdldC0+bG9jYWxfcmVmZXJlbmNl ZF9ma2V5cykKKwkJcmVsYXRlZCA9IGxpc3RfYXBwZW5kX3VuaXF1ZV9vaWQocmVsYXRlZCwgcmVm aW5mby0+ZmtfcmVtb3RlaWQpOworCisJLyogUmVtb3ZlIHRoZSBnaXZlbiB0YWJsZSBpdHNlbGYg ZnJvbSB0aGUgbGlzdCAqLworCXJlbGF0ZWQgPSBsaXN0X2RlbGV0ZV9vaWQocmVsYXRlZCwgcmVt b3RlaWQpOworCisJcmV0dXJuIHJlbGF0ZWQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiB0 aGUgRksgY29uc3RyYWludCBpcyBhbHdheXMgZGVmZXJyZWQuCisgKi8KK3N0YXRpYyBib29sCitm b3JlaWduX2tleV9pc19hbHdheXNfZGVmZXJyZWQoT2lkIGNvbm9pZCkKK3sKKwlIZWFwVHVwbGUJ dHVwOworCUZvcm1fcGdfY29uc3RyYWludCBjb247CisJYm9vbAkJZGVmZXJyZWQ7CisKKwl0dXAg PSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBPYmplY3RJZEdldERhdHVtKGNvbm9pZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgZm9yZWlnbiBrZXkgJXUiLCBjb25vaWQpOworCisJY29uID0gKEZvcm1fcGdf Y29uc3RyYWludCkgR0VUU1RSVUNUKHR1cCk7CisJZGVmZXJyZWQgPSBjb24tPmNvbmRlZmVycmFi bGUgJiYgY29uLT5jb25kZWZlcnJlZDsKKwlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKworCXJldHVy biBkZWZlcnJlZDsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIHRhYmxlIGhhcyBhbnkg cmVmZXJlbmNpbmctc2lkZSBmb3JlaWduIGtleSB0cmlnZ2VycyAoT04KKyAqIElOU0VSVCBvciBP TiBVUERBVEUpIGVuYWJsZWQgaW4gcmVwbGljYSBtb2RlIHRoYXQgY291bGQgY2F1c2UgYSBmb3Jl aWduIGtleQorICogdmlvbGF0aW9uIGVycm9yLgorICovCitzdGF0aWMgYm9vbAorZmtleV90cmln Z2VyX2VuYWJsZWRfaW5fcmVwbGljYShSZWxhdGlvbiByZWwsIE9pZCBjb25vaWQpCit7CisJVHJp Z2dlckRlc2MgKnRyaWdkZXNjID0gcmVsLT50cmlnZGVzYzsKKworCWlmICh0cmlnZGVzYyA9PSBO VUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHRyaWdkZXNjLT5u dW10cmlnZ2VyczsgaSsrKQorCXsKKwkJVHJpZ2dlciAgICAqdHJpZyA9ICZ0cmlnZGVzYy0+dHJp Z2dlcnNbaV07CisKKwkJLyogS2VlcCBvbmx5IEZLLXNpZGUgY2hlY2sgdHJpZ2dlcnMgdGhhdCBi ZWxvbmcgdG8gdGhpcyBGSyBjb25zdHJhaW50ICovCisJCWlmICh0cmlnLT50Z2NvbnN0cmFpbnQg IT0gY29ub2lkIHx8CisJCQkodHJpZy0+dGdmb2lkICE9IEZfUklfRktFWV9DSEVDS19JTlMgJiYK KwkJCSB0cmlnLT50Z2ZvaWQgIT0gRl9SSV9GS0VZX0NIRUNLX1VQRCkpCisJCQljb250aW51ZTsK KworCQkvKiBJbiByZXBsaWNhIG1vZGUsIG9ubHkgUkVQTElDQS9BTFdBWVMgdHJpZ2dlcnMgY2Fu IGZpcmUgKi8KKwkJaWYgKHRyaWctPnRnZW5hYmxlZCA9PSBUUklHR0VSX0ZJUkVTX09OX1JFUExJ Q0EgfHwKKwkJCXRyaWctPnRnZW5hYmxlZCA9PSBUUklHR0VSX0ZJUkVTX0FMV0FZUykKKwkJCXJl dHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRo ZXIgdGhlIHRhYmxlIGhhcyBhbnkgcmVmZXJlbmNlZC1zaWRlIGZvcmVpZ24ga2V5IHRyaWdnZXJz IChPTgorICogREVMRVRFIG9yIE9OIFVQREFURSkgZW5hYmxlZCBpbiByZXBsaWNhIG1vZGUgdGhh dCBjb3VsZCBjYXVzZSBhIGZvcmVpZ24ga2V5CisgKiB2aW9sYXRpb24gZXJyb3IuCisgKi8KK3N0 YXRpYyBib29sCityZWZrZXlfdHJpZ2dlcl9lbmFibGVkX2luX3JlcGxpY2EoUmVsYXRpb24gcmVs LCBPaWQgY29ub2lkKQoreworCVRyaWdnZXJEZXNjICp0cmlnZGVzYyA9IHJlbC0+dHJpZ2Rlc2M7 CisKKwlpZiAodHJpZ2Rlc2MgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJZm9yIChpbnQg aSA9IDA7IGkgPCB0cmlnZGVzYy0+bnVtdHJpZ2dlcnM7IGkrKykKKwl7CisJCVRyaWdnZXIgICAg KnRyaWcgPSAmdHJpZ2Rlc2MtPnRyaWdnZXJzW2ldOworCisJCS8qIEtlZXAgb25seSBQSy1zaWRl IGFjdGlvbiB0cmlnZ2VycyBmb3IgdGhpcyBGSyBjb25zdHJhaW50ICovCisJCWlmICh0cmlnLT50 Z2NvbnN0cmFpbnQgIT0gY29ub2lkIHx8CisJCQkodHJpZy0+dGdmb2lkICE9IEZfUklfRktFWV9O T0FDVElPTl9ERUwgJiYKKwkJCSB0cmlnLT50Z2ZvaWQgIT0gRl9SSV9GS0VZX05PQUNUSU9OX1VQ RCAmJgorCQkJIHRyaWctPnRnZm9pZCAhPSBGX1JJX0ZLRVlfUkVTVFJJQ1RfREVMICYmCisJCQkg dHJpZy0+dGdmb2lkICE9IEZfUklfRktFWV9SRVNUUklDVF9VUEQpKQorCQkJY29udGludWU7CisK KwkJLyogSW4gcmVwbGljYSBtb2RlLCBvbmx5IFJFUExJQ0EvQUxXQVlTIHRyaWdnZXJzIGNhbiBm aXJlLiAqLworCQlpZiAodHJpZy0+dGdlbmFibGVkID09IFRSSUdHRVJfRklSRVNfT05fUkVQTElD QSB8fAorCQkJdHJpZy0+dGdlbmFibGVkID09IFRSSUdHRVJfRklSRVNfQUxXQVlTKQorCQkJcmV0 dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogQnVpbGQgYSBsaXN0 IG9mIGZvcmVpZ24ga2V5IHJlbW90ZSBjb2x1bW5zIGluIHRoZSBvcmRlciBvZiB0aGUgcmVmZXJl bmNlZAorICogdGFibGUncyByZW1vdGUgY29sdW1ucy4KKyAqLworc3RhdGljIHZvaWQKK2J1aWxk X2ZrX3JlbW90ZV9hdHRudW1zKExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqZmtlbnRyeSwKKwkJCQkJ CUxvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqcmVmZW50cnksCisJCQkJCQlpbnQgbmtleXMsCisJCQkJ CQljb25zdCBBdHRyTnVtYmVyICpma19jb25rZXksCisJCQkJCQljb25zdCBBdHRyTnVtYmVyICpy ZWZfY29uZmtleSwKKwkJCQkJCUxpc3QgKipma2F0dG51bXMsCisJCQkJCQlMaXN0ICoqZmthdHRu dW1zX29sZCwKKwkJCQkJCUxpc3QgKipyZWZhdHRudW1zLAorCQkJCQkJTGlzdCAqKnJlZmF0dG51 bXNfb2xkKQoreworCWludAkJCXBrYXR0ID0gLTE7CisJTGlzdAkgICAqZmtjb2xzID0gTklMOwor CUxpc3QJICAgKmZrY29sc19vbGQgPSBOSUw7CisJTGlzdAkgICAqcmVmY29scyA9IE5JTDsKKwlM aXN0CSAgICpyZWZjb2xzX29sZCA9IE5JTDsKKworCS8qCisJICogVHJhdmVyc2UgdGhlIHJlZmVy ZW5jZWQgdGFibGUncyByZW1vdGUgcmVwbGljYSBpZGVudGl0eSBjb2x1bW5zIGluIG9yZGVyLAor CSAqIGFuZCBmb3IgZWFjaCwgZmluZCB0aGUgY29ycmVzcG9uZGluZyBmb3JlaWduIGtleSBjb2x1 bW4gdGhhdCBtYXRjaGVzIGl0LgorCSAqLworCXdoaWxlICgocGthdHQgPSBibXNfbmV4dF9tZW1i ZXIocmVmZW50cnktPnJlbW90ZXJlbC5hdHRrZXlzLCBwa2F0dCkpID49IDApCisJeworCQlmb3Ig KGludCBpID0gMDsgaSA8IG5rZXlzOyBpKyspCisJCXsKKwkJCUF0dHJOdW1iZXIJZmtfbG9jYWxf YXR0bnVtID0gZmtfY29ua2V5W2ldOworCQkJQXR0ck51bWJlcglyZWZfbG9jYWxfYXR0bnVtID0g cmVmX2NvbmZrZXlbaV07CisJCQlpbnQJCQlma19yZW1vdGVfYXR0bnVtOworCQkJaW50CQkJcmVm X3JlbW90ZV9hdHRudW07CisKKwkJCWZrX3JlbW90ZV9hdHRudW0gPSBma2VudHJ5LT5hdHRybWFw LT5hdHRudW1zW0F0dHJOdW1iZXJHZXRBdHRyT2Zmc2V0KGZrX2xvY2FsX2F0dG51bSldOworCQkJ cmVmX3JlbW90ZV9hdHRudW0gPSByZWZlbnRyeS0+YXR0cm1hcC0+YXR0bnVtc1tBdHRyTnVtYmVy R2V0QXR0ck9mZnNldChyZWZfbG9jYWxfYXR0bnVtKV07CisKKwkJCS8qIFNraXAgaWYgbm90IHRo ZSBjdXJyZW50IHRyYXZlcnNlZCBjb2x1bW4gKi8KKwkJCWlmIChyZWZfcmVtb3RlX2F0dG51bSAh PSBwa2F0dCkKKwkJCQljb250aW51ZTsKKworCQkJLyogU2tpcCBjb2x1bW5zIHRoYXQgYXJlIHVu YXZhaWxhYmxlIGluIHRoZSByZW1vdGUgdGFibGUgKi8KKwkJCWlmIChyZWZfcmVtb3RlX2F0dG51 bSA8IDAgfHwgZmtfcmVtb3RlX2F0dG51bSA8IDApCisJCQkJY29udGludWU7CisKKwkJCWZrY29s cyA9IGxhcHBlbmRfaW50KGZrY29scywgZmtfcmVtb3RlX2F0dG51bSArIDEpOworCQkJcmVmY29s cyA9IGxhcHBlbmRfaW50KHJlZmNvbHMsIHJlZl9yZW1vdGVfYXR0bnVtICsgMSk7CisKKwkJCS8q IE9sZCB0dXBsZSBjb250YWlucyBvbmx5IHJlcGxpY2EgaWRlbnRpdHkgY29sdW1ucy4gKi8KKwkJ CWlmIChibXNfaXNfbWVtYmVyKGZrX3JlbW90ZV9hdHRudW0sIGZrZW50cnktPnJlbW90ZXJlbC5h dHRrZXlzKSAmJgorCQkJCWJtc19pc19tZW1iZXIocmVmX3JlbW90ZV9hdHRudW0sIHJlZmVudHJ5 LT5yZW1vdGVyZWwuYXR0a2V5cykpCisJCQl7CisJCQkJZmtjb2xzX29sZCA9IGxhcHBlbmRfaW50 KGZrY29sc19vbGQsIGZrX3JlbW90ZV9hdHRudW0gKyAxKTsKKwkJCQlyZWZjb2xzX29sZCA9IGxh cHBlbmRfaW50KHJlZmNvbHNfb2xkLCByZWZfcmVtb3RlX2F0dG51bSArIDEpOworCQkJfQorCisJ CQlicmVhazsKKwkJfQorCX0KKworCSpma2F0dG51bXMgPSBma2NvbHM7CisJKmZrYXR0bnVtc19v bGQgPSBma2NvbHNfb2xkOworCSpyZWZhdHRudW1zID0gcmVmY29sczsKKwkqcmVmYXR0bnVtc19v bGQgPSByZWZjb2xzX29sZDsKK30KKworLyoKKyAqIENvbGxlY3QgcmVmZXJlbmNlZC1zaWRlIGtl eSBwcm9qZWN0aW9ucyBmb3IgZGVwZW5kZW5jeSB0cmFja2luZworICoKKyAqIEhlbHBlciBmb3Ig Y29sbGVjdF9ma2V5c19mb3JfZGVwZW5kZW5jeV90cmFja2luZygpLiBTZWUgdGhhdCBmdW5jdGlv biBmb3IKKyAqIGRldGFpbGVkIGNvbW1lbnRzLgorICovCitzdGF0aWMgdm9pZAorY29sbGVjdF9y ZWZrZXlzX2Zvcl9kZXBlbmRlbmN5X3RyYWNraW5nKExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqZW50 cnkpCit7CisJUmVsYXRpb24JZmtleVJlbDsKKwlTeXNTY2FuRGVzYyBma2V5U2NhbjsKKwlIZWFw VHVwbGUJdHVwbGU7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKGVudHJ5LT5sb2Nh bHJlbCk7CisKKwlBc3NlcnQoT2lkSXNWYWxpZChyZWxpZCkpOworCisJZmtleVJlbCA9IHRhYmxl X29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlma2V5U2Nh biA9IHN5c3RhYmxlX2JlZ2luc2Nhbihma2V5UmVsLCBJbnZhbGlkT2lkLCBmYWxzZSwKKwkJCQkJ CQkJICBOVUxMLCAwLCBOVUxMKTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0g c3lzdGFibGVfZ2V0bmV4dChma2V5U2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNv biA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVCh0dXBsZSk7CisJCUxvZ2ljYWxSZXBS ZWxNYXBFbnRyeSAqZmtlbnRyeTsKKwkJTG9naWNhbFJlcFN1YnNjcmliZXJSZWZGSyAqcmVmaW5m bzsKKwkJTGlzdAkgICAqZmthdHRudW1zOworCQlMaXN0CSAgICpma2F0dG51bXNfb2xkOworCQlM aXN0CSAgICpyZWZhdHRudW1zOworCQlMaXN0CSAgICpyZWZhdHRudW1zX29sZDsKKwkJQXR0ck51 bWJlcgljb25rZXlbSU5ERVhfTUFYX0tFWVNdID0gezB9OworCQlBdHRyTnVtYmVyCWNvbmZrZXlb SU5ERVhfTUFYX0tFWVNdID0gezB9OworCQlpbnQJCQludW1ma3M7CisJCU1lbW9yeUNvbnRleHQg b2xkY3R4OworCisJCS8qIE5vdCBhIGZvcmVpZ24ga2V5ICovCisJCWlmIChjb24tPmNvbnR5cGUg IT0gQ09OU1RSQUlOVF9GT1JFSUdOKQorCQkJY29udGludWU7CisKKwkJLyogTm90IHJlZmVyZW5j aW5nIHRoZSBnaXZlbiB0YWJsZSAqLworCQlpZiAoY29uLT5jb25mcmVsaWQgIT0gcmVsaWQpCisJ CQljb250aW51ZTsKKworCQkvKiBTa2lwIGlmIEZLIGVuZm9yY2VtZW50IGlzIGRpc2FibGVkICov CisJCWlmICghY29uLT5jb25lbmZvcmNlZCkKKwkJCWNvbnRpbnVlOworCisJCS8qIEFsd2F5cy1k ZWZlcnJlZCBGSyBkb2VzIG5vdCBuZWVkIGRlcGVuZGVuY3kgdHJhY2tpbmcuICovCisJCWlmIChm b3JlaWduX2tleV9pc19hbHdheXNfZGVmZXJyZWQoY29uLT5vaWQpKQorCQkJY29udGludWU7CisK KwkJLyoKKwkJICogU2tpcCB3aGVuIG5vIHJlcGxpY2EtbW9kZSBPTiBERUxFVEUvT04gVVBEQVRF IHZpb2xhdGlvbiB0cmlnZ2VyIGNhbgorCQkgKiBmaXJlIGZvciB0aGlzIEZLIG9uIHRoZSByZWZl cmVuY2VkIHRhYmxlLgorCQkgKi8KKwkJaWYgKCFyZWZrZXlfdHJpZ2dlcl9lbmFibGVkX2luX3Jl cGxpY2EoZW50cnktPmxvY2FscmVsLCBjb24tPm9pZCkpCisJCQljb250aW51ZTsKKworCQlma2Vu dHJ5ID0gbG9naWNhbHJlcF9nZXRfcmVsZW50cnlfYnlfbG9jYWxfb2lkKGNvbi0+Y29ucmVsaWQp OworCisJCS8qCisJCSAqIFNraXAgaWYgdGhlIHJlZmVyZW5jaW5nIHRhYmxlIGlzIG5vdCBwdWJs aXNoZWQgb3IgaGFzIG5vdCByZXBsaWNhdGVkCisJCSAqIGFueSBjaGFuZ2VzLgorCQkgKi8KKwkJ aWYgKCFma2VudHJ5IHx8ICFma2VudHJ5LT5hdHRybWFwKQorCQkJY29udGludWU7CisKKwkJRGVj b25zdHJ1Y3RGa0NvbnN0cmFpbnRSb3codHVwbGUsICZudW1ma3MsIGNvbmtleSwgY29uZmtleSwK KwkJCQkJCQkJICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJYnVpbGRfZmtf cmVtb3RlX2F0dG51bXMoZmtlbnRyeSwgZW50cnksIG51bWZrcywgY29ua2V5LCBjb25ma2V5LAor CQkJCQkJCQkmZmthdHRudW1zLCAmZmthdHRudW1zX29sZCwKKwkJCQkJCQkJJnJlZmF0dG51bXMs ICZyZWZhdHRudW1zX29sZCk7CisKKwkJbGlzdF9mcmVlKGZrYXR0bnVtcyk7CisJCWxpc3RfZnJl ZShma2F0dG51bXNfb2xkKTsKKworCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oTG9n aWNhbFJlcFJlbE1hcENvbnRleHQpOworCQlyZWZpbmZvID0gcGFsbG9jX29iamVjdChMb2dpY2Fs UmVwU3Vic2NyaWJlclJlZkZLKTsKKwkJcmVmaW5mby0+Y29ub2lkID0gY29uLT5vaWQ7CisJCXJl ZmluZm8tPmZrX3JlbW90ZWlkID0gZmtlbnRyeS0+cmVtb3RlcmVsLnJlbW90ZWlkOworCQlyZWZp bmZvLT5yZWZhdHRudW1zID0gbGlzdF9jb3B5KHJlZmF0dG51bXMpOworCQlyZWZpbmZvLT5yZWZh dHRudW1zX29sZCA9IGxpc3RfY29weShyZWZhdHRudW1zX29sZCk7CisJCWVudHJ5LT5sb2NhbF9y ZWZlcmVuY2VkX2ZrZXlzID0gbGFwcGVuZChlbnRyeS0+bG9jYWxfcmVmZXJlbmNlZF9ma2V5cywK KwkJCQkJCQkJCQkJCXJlZmluZm8pOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsK KworCQlsaXN0X2ZyZWUocmVmYXR0bnVtcyk7CisJCWxpc3RfZnJlZShyZWZhdHRudW1zX29sZCk7 CisJfQorCisJc3lzdGFibGVfZW5kc2Nhbihma2V5U2Nhbik7CisKKwl0YWJsZV9jbG9zZShma2V5 UmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKgorICogQ29sbGVjdCBmb3JlaWduIGtleXMg Zm9yIGRlcGVuZGVuY3kgdHJhY2tpbmcuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb2xsZWN0cyBi b3RoIGZvcmVpZ24ga2V5cyBpbiB0aGUgcmVmZXJlbmNpbmcgdGFibGUgYW5kIHRoZQorICogcHJp bWFyeSBrZXkgaW4gdGhlIHJlZmVyZW5jZWQgdGFibGUsIGFzIGJvdGggYXJlIG5lZWRlZCBmb3Ig ZGVwZW5kZW5jeQorICogdHJhY2tpbmcgKHNlZSBhcHBseXBhcmFsbGVsd29ya2VyLmMgZm9yIGRl dGFpbHMpLgorICoKKyAqIEZvciBhIHByaW1hcnkga2V5LCB3ZSBkaXJlY3RseSByZWNvcmQgdGhl IGJpdG1hcCBvZiByZW1vdGUgY29sdW1ucyB0aGF0IHRoZQorICogZm9yZWlnbiBrZXkgcmVmZXJl bmNlcy4KKyAqCisgKiBGb3IgYSBmb3JlaWduIGtleSBpbiB0aGUgcmVmZXJlbmNpbmcgdGFibGUs IHdlIGNhbm5vdCB1c2UgdGhlIGNvbHVtbnMgYXMtaXMKKyAqIGJlY2F1c2UgdGhlaXIgb3JkZXIg b24gdGhlIHJlbW90ZSBzaWRlIG1heSBkaWZmZXIgZnJvbSB0aGUgbG9jYWwgcmVmZXJlbmNpbmcK KyAqIGFuZCByZWZlcmVuY2VkIHRhYmxlLiBUbyBlbnN1cmUgY29uc2lzdGVuY3ksIHdlIHN0b3Jl IGEgbGlzdCBvZiBjb2x1bW4KKyAqIG51bWJlcnMgaW4gdGhlIG9yZGVyIG9mIHRoZSByZWZlcmVu Y2VkIHRhYmxlJ3MgcmVtb3RlIGNvbHVtbnMuIFRoZSBkZXBlbmRlbmN5CisgKiB0cmFja2luZyBm dW5jdGlvbiB3aWxsIHRyYXZlcnNlIHRoaXMgbGlzdCB0byBidWlsZCB0aGUgaGFzaCBrZXkuCisg KgorICogRm9yIG9uZSBmb3JlaWduIGtleSBjb25zdHJhaW50IG9uIHRoZSB0YWJsZSwgV2UgY29s bGVjdCB0d28gc2V0IG9mIGNvbHVtbgorICogbnVtYmVycyBmb3IgYm90aCB0aGUgcmVmZXJlbmNp bmcgYW5kIHJlZmVyZW5jZWQgdGFibGVzOiBvbmUgZm9yIHRoZSBuZXcgdHVwbGUKKyAqIG9mIGFu IElOU0VSVCBvciBVUERBVEUsIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSBvbGQgdHVwbGUgb2YgYW4g VVBEQVRFIG9yCisgKiBERUxFVEUuIFRoZSBmb3JtZXIgaW5jbHVkZXMgYWxsIHJlbW90ZSBjb2x1 bW5zIHRoYXQgdGhlIGZvcmVpZ24ga2V5CisgKiByZWZlcmVuY2VzLCB3aGlsZSB0aGUgbGF0dGVy IGluY2x1ZGVzIG9ubHkgdGhvc2UgdGhhdCBhcmUgcGFydCBvZiB0aGUgcmVwbGljYQorICogaWRl bnRpdHkga2V5LiBUaGlzIGlzIGJlY2F1c2UgdGhlIG9sZCB0dXBsZSBvZiBhbiBVUERBVEUgb3Ig REVMRVRFIGNvbnRhaW5zCisgKiBvbmx5IHJlcGxpY2EgaWRlbnRpdHkga2V5IGNvbHVtbnMsIGFu ZCBhbnkgb3RoZXIgY29sdW1ucyB3b3VsZCBiZSBtaXNzaW5nIGFuZAorICogdGh1cyB1bmF2YWls YWJsZSBmb3IgZGVwZW5kZW5jeSB0cmFja2luZy4KKyAqCisgKiBJZiB0aGVyZSBhcmUgbXVsdGlw bGUgZm9yZWlnbiBrZXlzIHJlZmVyZW5jaW5nIG90aGVyIHRhYmxlcyBvciBpZiB0aGUgcHJpbWFy eQorICoga2V5IGlzIHJlZmVyZW5jZWQgYnkgbXVsdGlwbGUgZm9yZWlnbiBrZXlzLCB3ZSB3aWxs IGhhdmUgbXVsdGlwbGUgc2V0cyBvZgorICogY29sdW1uIG51bWJlcnMuCisgKgorICogV2hlbiBy ZWNvcmRpbmcgb3IgY2hlY2tpbmcgYSBmb3JlaWduIGtleSBkZXBlbmRlbmN5LCB3ZSBmaWxsIGNv bHVtbnMgaW4gdGhlCisgKiByZWZlcmVuY2luZyB0YWJsZSB0aGF0IGFyZSBvdXRzaWRlIHRoZSBy ZXBsaWNhIGlkZW50aXR5IGFzIE5VTEwsIGFuZCBkdXJpbmcKKyAqIGNvbXBhcmlzb24sIHdlIHRy ZWF0IE5VTEwgYXMgZXF1YWwgdG8gYW55IHZhbHVlLiBUaGlzIGlzIHNhZmUgYmVjYXVzZSB0aGUK KyAqIHJlZmVyZW5jZWQga2V5IGlzIGEgcHJpbWFyeSBrZXkgKG5vIE5VTExzIGFsbG93ZWQpLCBh bmQgTlVMTCB2YWx1ZXMgaW4gdGhlCisgKiByZWZlcmVuY2luZyBrZXkgbmV2ZXIgcGFydGljaXBh dGUgaW4gZm9yZWlnbiBrZXkgY29uc3RyYWludCBjaGVja3MuCisgKiBUaGVyZWZvcmUsIHdlIHdp bGwgbm90IGVuY291bnRlciBnZW51aW5lIE5VTEwgdmFsdWVzIGluIHRoZSByZW1vdGUgY29sdW1u cy4KKyAqLworc3RhdGljIHZvaWQKK2NvbGxlY3RfZmtleXNfZm9yX2RlcGVuZGVuY3lfdHJhY2tp bmcoTG9naWNhbFJlcFJlbE1hcEVudHJ5ICplbnRyeSkKK3sKKwlMaXN0CSAgICpma2V5czsKKwlN ZW1vcnlDb250ZXh0IG9sZGN0eDsKKworCWlmIChlbnRyeS0+bG9jYWxfZmtleXMgIT0gTklMIHx8 IGVudHJ5LT5sb2NhbF9yZWZlcmVuY2VkX2ZrZXlzICE9IE5JTCkKKwkJZnJlZV9sb2NhbF9ma2V5 cyhlbnRyeSk7CisKKwlma2V5cyA9IGNvcHlPYmplY3QoUmVsYXRpb25HZXRGS2V5TGlzdChlbnRy eS0+bG9jYWxyZWwpKTsKKworCS8qIENvbGxlY3QgZm9yZWlnbiBrZXlzIHdoZXJlIHRoaXMgdGFi bGUgaXMgdGhlIHJlZmVyZW5jaW5nIHNpZGUgKi8KKwlmb3JlYWNoX3B0cihGb3JlaWduS2V5Q2Fj aGVJbmZvLCBmaywgZmtleXMpCisJeworCQlMb2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlZmVudHJ5 OworCQlMaXN0CSAgKmZrYXR0bnVtczsKKwkJTGlzdAkgICpma2F0dG51bXNfb2xkOworCQlMaXN0 CSAgKnJlZmF0dG51bXM7CisJCUxpc3QJICAqcmVmYXR0bnVtc19vbGQ7CisJCUxvZ2ljYWxSZXBT dWJzY3JpYmVyRksgKmZraW5mbzsKKworCQkvKiBTa2lwIGlmIEZLIGVuZm9yY2VtZW50IGlzIGRp c2FibGVkICovCisJCWlmICghZmstPmNvbmVuZm9yY2VkKQorCQkJY29udGludWU7CisKKwkJLyoK KwkJICogU2tpcCBpZiB0aGlzIEZLJ3MgY2hlY2sgdHJpZ2dlciBpcyBkaXNhYmxlZCBpbiByZXBs aWNhIG1vZGUuCisJCSAqLworCQlpZiAoIWZrZXlfdHJpZ2dlcl9lbmFibGVkX2luX3JlcGxpY2Eo ZW50cnktPmxvY2FscmVsLCBmay0+Y29ub2lkKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAq IERlZmVycmFibGUgZm9yZWlnbiBrZXlzIGRvIG5vdCBuZWVkIHRyYWNraW5nLCBhcyB0aGV5IHdv bid0IGNhdXNlCisJCSAqIGNvbnN0cmFpbnQgdmlvbGF0aW9ucyBhcyBsb25nIGFzIGNvbW1pdCBv cmRlciBpcyBwcmVzZXJ2ZWQuCisJCSAqLworCQlpZiAoZm9yZWlnbl9rZXlfaXNfYWx3YXlzX2Rl ZmVycmVkKGZrLT5jb25vaWQpKQorCQkJY29udGludWU7CisKKwkJcmVmZW50cnkgPSBsb2dpY2Fs cmVwX2dldF9yZWxlbnRyeV9ieV9sb2NhbF9vaWQoZmstPmNvbmZyZWxpZCk7CisKKwkJLyoKKwkJ ICogU2tpcCBpZiB0aGUgcmVmZXJlbmNlZCB0YWJsZSBpcyBub3QgcHVibGlzaGVkIG9yIGhhcyBu b3QgcmVwbGljYXRlZAorCQkgKiBhbnkgY2hhbmdlcy4KKwkJICovCisJCWlmICghcmVmZW50cnkg fHwgIXJlZmVudHJ5LT5hdHRybWFwKQorCQkJY29udGludWU7CisKKwkJYnVpbGRfZmtfcmVtb3Rl X2F0dG51bXMoZW50cnksIHJlZmVudHJ5LCBmay0+bmtleXMsIGZrLT5jb25rZXksCisJCQkJCQkJ CWZrLT5jb25ma2V5LCAmZmthdHRudW1zLCAmZmthdHRudW1zX29sZCwKKwkJCQkJCQkJJnJlZmF0 dG51bXMsICZyZWZhdHRudW1zX29sZCk7CisKKwkJbGlzdF9mcmVlKHJlZmF0dG51bXMpOworCQls aXN0X2ZyZWUocmVmYXR0bnVtc19vbGQpOworCisJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhMb2dpY2FsUmVwUmVsTWFwQ29udGV4dCk7CisJCWZraW5mbyA9IHBhbGxvY19vYmplY3Qo TG9naWNhbFJlcFN1YnNjcmliZXJGSyk7CisJCWZraW5mby0+Y29ub2lkID0gZmstPmNvbm9pZDsK KwkJZmtpbmZvLT5yZWZfcmVtb3RlaWQgPSByZWZlbnRyeS0+cmVtb3RlcmVsLnJlbW90ZWlkOwor CQlma2luZm8tPmZrYXR0bnVtcyA9IGxpc3RfY29weShma2F0dG51bXMpOworCQlma2luZm8tPmZr YXR0bnVtc19vbGQgPSBsaXN0X2NvcHkoZmthdHRudW1zX29sZCk7CisJCWVudHJ5LT5sb2NhbF9m a2V5cyA9IGxhcHBlbmQoZW50cnktPmxvY2FsX2ZrZXlzLCBma2luZm8pOworCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKworCQlsaXN0X2ZyZWUoZmthdHRudW1zKTsKKwkJbGlzdF9m cmVlKGZrYXR0bnVtc19vbGQpOworCX0KKworCWxpc3RfZnJlZV9kZWVwKGZrZXlzKTsKKworCS8q IENvbGxlY3Qga2V5cyB3aGVyZSB0aGlzIHRhYmxlIGlzIHRoZSByZWZlcmVuY2VkIHNpZGUgKi8K Kwljb2xsZWN0X3JlZmtleXNfZm9yX2RlcGVuZGVuY3lfdHJhY2tpbmcoZW50cnkpOworCisJZW50 cnktPmxvY2FsX2ZrZXlzX2NvbGxlY3RlZCA9IHRydWU7Cit9CisKIC8qCiAgKiBDaGVjayBhbGwg bG9jYWwgdHJpZ2dlcnMgZm9yIHRoZSByZWxhdGlvbiB0byBzZWUgdGhlIHBhcmFsbGVsaXphYmls aXR5LgogICoKQEAgLTYzNiw2ICsxMTI3LDcgQEAgbG9naWNhbHJlcF9yZWxfbG9hZChMb2dpY2Fs UmVwUmVsTWFwRW50cnkgKmVudHJ5LCBMb2dpY2FsUmVwUmVsSWQgcmVtb3RlaWQsCiAJCQkvKiBU YWJsZSB3YXMgcmVuYW1lZCBvciBkcm9wcGVkLiAqLwogCQkJZW50cnktPmxvY2FscmVsdmFsaWQg PSBmYWxzZTsKIAkJCWVudHJ5LT5sb2NhbF91bmlxdWVfaW5kZXhlc19jb2xsZWN0ZWQgPSBmYWxz ZTsKKwkJCWVudHJ5LT5sb2NhbF9ma2V5c19jb2xsZWN0ZWQgPSBmYWxzZTsKIAkJfQogCQllbHNl IGlmICghZW50cnktPmxvY2FscmVsdmFsaWQpCiAJCXsKQEAgLTc1NSw2ICsxMjQ3LDkgQEAgbG9n aWNhbHJlcF9yZWxfbG9hZChMb2dpY2FsUmVwUmVsTWFwRW50cnkgKmVudHJ5LCBMb2dpY2FsUmVw UmVsSWQgcmVtb3RlaWQsCiAJCWVudHJ5LT5sb2NhbHJlbHZhbGlkID0gdHJ1ZTsKIAl9CiAKKwlp ZiAoYW1fbGVhZGVyX2FwcGx5X3dvcmtlcigpICYmICFlbnRyeS0+bG9jYWxfZmtleXNfY29sbGVj dGVkKQorCQljb2xsZWN0X2ZrZXlzX2Zvcl9kZXBlbmRlbmN5X3RyYWNraW5nKGVudHJ5KTsKKwog CWlmIChlbnRyeS0+c3RhdGUgIT0gU1VCUkVMX1NUQVRFX1JFQURZKQogCQllbnRyeS0+c3RhdGUg PSBHZXRTdWJzY3JpcHRpb25SZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLAogCQkJCQkJCQkJ CQkgICBlbnRyeS0+bG9jYWxyZWxvaWQsCkBAIC0xMDU4LDYgKzE1NTMsNyBAQCBsb2dpY2FscmVw X3BhcnRpdGlvbl9vcGVuKExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqcm9vdCwKIAkgKiBjb2xsZWN0 X2luZGV4ZXNfZm9yX2RlcGVuZGVuY3lfdHJhY2tpbmcoKSBmb3IgZGV0YWlscy4pCiAJICovCiAJ ZW50cnktPmxvY2FsX3VuaXF1ZV9pbmRleGVzX2NvbGxlY3RlZCA9IHRydWU7CisJZW50cnktPmxv Y2FsX2ZrZXlzX2NvbGxlY3RlZCA9IHRydWU7CiAKIAllbnRyeS0+bG9jYWxyZWx2YWxpZCA9IHRy dWU7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDE3ZWFl ZjI4MDM5Li4wZjhmNDk0MDliOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dv cmtlci5jCkBAIC01ODQsNyArNTg0LDkgQEAgc3RhdGljIEFwcGx5U3ViWGFjdERhdGEgc3VieGFj dF9kYXRhID0gezAsIDAsIEludmFsaWRUcmFuc2FjdGlvbklkLCBOVUxMfTsKIHR5cGVkZWYgZW51 bSBMb2dpY2FsUmVwS2V5S2luZAogewogCUxPR0lDQUxSRVBfS0VZX1JFUExJQ0FfSURFTlRJVFks Ci0JTE9HSUNBTFJFUF9LRVlfTE9DQUxfVU5JUVVFCisJTE9HSUNBTFJFUF9LRVlfTE9DQUxfVU5J UVVFLAorCUxPR0lDQUxSRVBfS0VZX0ZPUkVJR05fS0VZLAorCUxPR0lDQUxSRVBfS0VZX1JFRkVS RU5DRURfS0VZCiB9IExvZ2ljYWxSZXBLZXlLaW5kOwogCiAvKiBIYXNoIHRhYmxlIGtleSBmb3Ig cmVwbGljYV9pZGVudGl0eV90YWJsZSAqLwpAQCAtNzgwLDkgKzc4Miw2IEBAIGhhc2hfcmVwbGlj YV9pZGVudGl0eV9jb21wYXJlKFJlcGxpY2FJZGVudGl0eUtleSAqYSwgUmVwbGljYUlkZW50aXR5 S2V5ICpiKQogCQlpZiAoYS0+ZGF0YS0+Y29sc3RhdHVzW2ldICE9IGItPmRhdGEtPmNvbHN0YXR1 c1tpXSkKIAkJCXJldHVybiBmYWxzZTsKIAotCQlpZiAoYS0+ZGF0YS0+Y29sc3RhdHVzW2ldID09 IExPR0lDQUxSRVBfQ09MVU1OX05VTEwpCi0JCQljb250aW51ZTsKLQogCQlpZiAoYS0+ZGF0YS0+ Y29sdmFsdWVzW2ldLmxlbiAhPSBiLT5kYXRhLT5jb2x2YWx1ZXNbaV0ubGVuKQogCQkJcmV0dXJu IGZhbHNlOwogCkBAIC05NTAsNiArOTQ5LDI0IEBAIGFwcGVuZF94aWRfZGVwZW5kZW5jeShUcmFu c2FjdGlvbklkIHhpZCwgTGlzdCAqKmRlcGVuZHNfb25feGlkcykKIAkqZGVwZW5kc19vbl94aWRz ID0gbGFwcGVuZF94aWQoKmRlcGVuZHNfb25feGlkcywgeGlkKTsKIH0KIAorc3RhdGljIGNoYXIg KgorZ2V0X2RlcGVuZGVuY3lfdHlwZV9zdHIoTG9naWNhbFJlcEtleUtpbmQga2luZCkKK3sKKwlz d2l0Y2ggKGtpbmQpCisJeworCQljYXNlIExPR0lDQUxSRVBfS0VZX1JFUExJQ0FfSURFTlRJVFk6 CisJCQlyZXR1cm4gInJlcGxpY2EgaWRlbnRpdHkiOworCQljYXNlIExPR0lDQUxSRVBfS0VZX0xP Q0FMX1VOSVFVRToKKwkJCXJldHVybiAibG9jYWwgdW5pcXVlIGtleSI7CisJCWNhc2UgTE9HSUNB TFJFUF9LRVlfRk9SRUlHTl9LRVk6CisJCQlyZXR1cm4gImZvcmVpZ24ga2V5IjsKKwkJY2FzZSBM T0dJQ0FMUkVQX0tFWV9SRUZFUkVOQ0VEX0tFWToKKwkJCXJldHVybiAicmVmZXJlbmNlZCBrZXki OworCX0KKworCXJldHVybiAiPz8/IjsKK30KKwogLyoKICAqIENvbW1vbiBmdW5jdGlvbiBmb3Ig Y2hlY2tpbmcgZGVwZW5kZW5jeSBieSB1c2luZyB0aGUga2V5LiBVc2VkIGJ5IGJvdGgKICAqIGNo ZWNrX2FuZF9yZWNvcmRfcmlfZGVwZW5kZW5jeSBhbmQgY2hlY2tfYW5kX3JlY29yZF9sb2NhbF9r ZXlfZGVwZW5kZW5jeS4KQEAgLTk4Miw5ICs5OTksOCBAQCBjaGVja19hbmRfcmVjb3JkX2tleV9k ZXBlbmRlbmN5KFJlcGxpY2FJZGVudGl0eUtleSAqa2V5LAogCQlpZiAocmllbnRyeSAmJiBoYXNf YWN0aXZlX2tleV9kZXBlbmRlbmN5KHJpZW50cnksIHRydWUpKQogCQl7CiAJCQllbG9nKERFQlVH MSwKLQkJCQkga2V5LT5raW5kID09IExPR0lDQUxSRVBfS0VZX1JFUExJQ0FfSURFTlRJVFkgPwot CQkJCSAiZm91bmQgY29uZmxpY3RpbmcgcmVwbGljYSBpZGVudGl0eSBjaGFuZ2Ugb24gdGFibGUg JXUgZnJvbSAldSIgOgotCQkJCSAiZm91bmQgY29uZmxpY3RpbmcgbG9jYWwgdW5pcXVlIGtleSBj aGFuZ2Ugb24gdGFibGUgJXUgZnJvbSAldSIsCisJCQkJICJmb3VuZCBjb25mbGljdGluZyAlcyBj aGFuZ2Ugb24gdGFibGUgJXUgZnJvbSAldSIsCisJCQkJIGdldF9kZXBlbmRlbmN5X3R5cGVfc3Ry KGtleS0+a2luZCksCiAJCQkJIGtleS0+cmVsaWQsIHJpZW50cnktPnJlbW90ZV94aWQpOwogCiAJ CQlleGlzdGluZ194aWQgPSByaWVudHJ5LT5yZW1vdGVfeGlkOwpAQCAtMTAwNyw5ICsxMDIzLDgg QEAgY2hlY2tfYW5kX3JlY29yZF9rZXlfZGVwZW5kZW5jeShSZXBsaWNhSWRlbnRpdHlLZXkgKmtl eSwKIAkJaWYgKGhhc19hY3RpdmVfa2V5X2RlcGVuZGVuY3kocmllbnRyeSwgZmFsc2UpKQogCQl7 CiAJCQllbG9nKERFQlVHMSwKLQkJCQkga2V5LT5raW5kID09IExPR0lDQUxSRVBfS0VZX1JFUExJ Q0FfSURFTlRJVFkgPwotCQkJCSAiZm91bmQgY29uZmxpY3RpbmcgcmVwbGljYSBpZGVudGl0eSBj aGFuZ2Ugb24gdGFibGUgJXUgZnJvbSAldSIgOgotCQkJCSAiZm91bmQgY29uZmxpY3RpbmcgbG9j YWwgdW5pcXVlIGtleSBjaGFuZ2Ugb24gdGFibGUgJXUgZnJvbSAldSIsCisJCQkJICJmb3VuZCBj b25mbGljdGluZyAlcyBjaGFuZ2Ugb24gdGFibGUgJXUgZnJvbSAldSIsCisJCQkJIGdldF9kZXBl bmRlbmN5X3R5cGVfc3RyKGtleS0+a2luZCksCiAJCQkJIGtleS0+cmVsaWQsIHJpZW50cnktPnJl bW90ZV94aWQpOwogCiAJCQlleGlzdGluZ194aWQgPSByaWVudHJ5LT5yZW1vdGVfeGlkOwpAQCAt MTAzOSw2ICsxMDU0LDIzIEBAIGhhc19udWxsX2tleV92YWx1ZXMoTG9naWNhbFJlcFR1cGxlRGF0 YSAqZGF0YSwgQml0bWFwc2V0ICppbmRleGtleXMpCiAJcmV0dXJuIGZhbHNlOwogfQogCisvKgor ICogQ2hlY2sgaWYgYW55IG9mIHRoZSBhdHRudW1zIGhhdmUgTlVMTCB2YWx1ZXMuCisgKi8KK3N0 YXRpYyBib29sCitma190dXBsZV9oYXNfbnVsbChMb2dpY2FsUmVwVHVwbGVEYXRhICpkYXRhLCBM aXN0ICphdHRudW1zKQoreworCWZvcmVhY2hfaW50KGF0dG51bSwgYXR0bnVtcykKKwl7CisJCWlu dAkJYXR0aWR4ID0gQXR0ck51bWJlckdldEF0dHJPZmZzZXQoYXR0bnVtKTsKKworCQlpZiAoZGF0 YS0+Y29sc3RhdHVzW2F0dGlkeF0gPT0gTE9HSUNBTFJFUF9DT0xVTU5fTlVMTCkKKwkJCXJldHVy biB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwogLyoKICAqIEJ1aWxkIGEgaGFzaCBr ZXkgZm9yIHJlcGxpY2FfaWRlbnRpdHlfdGFibGUgdXNpbmcgdGhlIGdpdmVuIHJlbGF0aW9uIGFu ZAogICogdHVwbGUgZGF0YSwgcmVzdHJpY3RlZCB0byB0aGUgc3BlY2lmaWVkIGtleSBjb2x1bW5z LgpAQCAtMTEwNCw2ICsxMTM2LDcyIEBAIGJ1aWxkX3JlcGxpY2FfaWRlbnRpdHlfa2V5KE9pZCBy ZWxpZCwgTG9naWNhbFJlcFR1cGxlRGF0YSAqb3JpZ2luYWxfZGF0YSwKIAlyZXR1cm4ga2V5Owog fQogCisvKgorICogQnVpbGQgYSBoYXNoIGtleSBmcm9tIGV4cGxpY2l0bHkgb3JkZXJlZCBjb2x1 bW5zLgorICovCitzdGF0aWMgUmVwbGljYUlkZW50aXR5S2V5ICoKK2J1aWxkX3JlcGxpY2FfaWRl bnRpdHlfa2V5X2J5X2F0dG51bXMoT2lkIHJlbGlkLAorCQkJCQkJCQkJICBMb2dpY2FsUmVwVHVw bGVEYXRhICpvcmlnaW5hbF9kYXRhLAorCQkJCQkJCQkJICBMaXN0ICphdHRudW1zKQoreworCUxv Z2ljYWxSZXBUdXBsZURhdGEgKmtleWRhdGE7CisJUmVwbGljYUlkZW50aXR5S2V5ICprZXk7CisJ TWVtb3J5Q29udGV4dCBvbGRjdHg7CisJaW50CWlfa2V5ID0gMDsKKwlpbnQgbmF0dG51bXMgPSBs aXN0X2xlbmd0aChhdHRudW1zKTsKKworCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhB cHBseUNvbnRleHQpOworCisJa2V5ZGF0YSA9IHBhbGxvYzBfb2JqZWN0KExvZ2ljYWxSZXBUdXBs ZURhdGEpOworCisJaWYgKG5hdHRudW1zKQorCXsKKwkJa2V5ZGF0YS0+Y29sdmFsdWVzID0gcGFs bG9jMF9hcnJheShTdHJpbmdJbmZvRGF0YSwgbmF0dG51bXMpOworCQlrZXlkYXRhLT5jb2xzdGF0 dXMgPSBwYWxsb2MwX2FycmF5KGNoYXIsIG5hdHRudW1zKTsKKwl9CisKKwlrZXlkYXRhLT5uY29s cyA9IG5hdHRudW1zOworCisJZm9yZWFjaF9pbnQoYXR0bnVtLCBhdHRudW1zKQorCXsKKwkJaW50 CQlhdHRpZHggPSBBdHRyTnVtYmVyR2V0QXR0ck9mZnNldChhdHRudW0pOworCisJCS8qCisJCSAq IEZvciBjb2x1bW5zIG5vdCBleGlzdHMgaW4gcmVtb3RlIHR1cGxlLCBvciBvdXRzaWRlIG9mIHJl bW90ZSByZXBsaWNhCisJCSAqIGlkZW50aXR5IGluIHdoaWNoIGNhc2UgdGhlIHJlbW90ZSBjb2x1 bW4gaXMgbWFya2VkIGFzIE5VTEwsIGZpbGwgaXQKKwkJICogd2l0aCBOVUxMLgorCQkgKi8KKwkJ aWYgKGF0dGlkeCA8IDAgfHwKKwkJCW9yaWdpbmFsX2RhdGEtPmNvbHN0YXR1c1thdHRpZHhdID09 IExPR0lDQUxSRVBfQ09MVU1OX05VTEwpCisJCXsKKwkJCWtleWRhdGEtPmNvbHN0YXR1c1tpX2tl eV0gPSBMT0dJQ0FMUkVQX0NPTFVNTl9OVUxMOworCQl9CisJCWVsc2UKKwkJeworCQkJU3RyaW5n SW5mbwlvcmlnaW5hbF9jb2x2YWx1ZTsKKworCQkJQXNzZXJ0KG9yaWdpbmFsX2RhdGEtPmNvbHN0 YXR1c1thdHRpZHhdICE9IExPR0lDQUxSRVBfQ09MVU1OX1VOQ0hBTkdFRCB8fAorCQkJCQkgICBv cmlnaW5hbF9kYXRhLT5jb2x2YWx1ZXNbYXR0aWR4XS5sZW4gPiAwKTsKKworCQkJb3JpZ2luYWxf Y29sdmFsdWUgPSAmb3JpZ2luYWxfZGF0YS0+Y29sdmFsdWVzW2F0dGlkeF07CisKKwkJCWluaXRT dHJpbmdJbmZvRXh0KCZrZXlkYXRhLT5jb2x2YWx1ZXNbaV9rZXldLCBvcmlnaW5hbF9jb2x2YWx1 ZS0+bGVuICsgMSk7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZrZXlkYXRhLT5jb2x2YWx1 ZXNbaV9rZXldLCBvcmlnaW5hbF9jb2x2YWx1ZS0+ZGF0YSk7CisJCQlrZXlkYXRhLT5jb2xzdGF0 dXNbaV9rZXldID0gb3JpZ2luYWxfZGF0YS0+Y29sc3RhdHVzW2F0dGlkeF07CisJCX0KKworCQlp X2tleSsrOworCX0KKworCWtleSA9IHBhbGxvYzBfb2JqZWN0KFJlcGxpY2FJZGVudGl0eUtleSk7 CisJa2V5LT5yZWxpZCA9IHJlbGlkOworCWtleS0+ZGF0YSA9IGtleWRhdGE7CisKKwlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKworCXJldHVybiBrZXk7Cit9CisKIC8qCiAgKiBNb3N0 bHkgc2FtZSBhcyBjaGVja19hbmRfcmVjb3JkX3JpX2RlcGVuZGVuY3koKSBidXQgZm9yIGxvY2Fs IHVuaXF1ZSBpbmRleGVzLgogICoKQEAgLTExOTksNiArMTI5NywxNTIgQEAgY2hlY2tfYW5kX3Jl Y29yZF9sb2NhbF9rZXlfZGVwZW5kZW5jeShPaWQgcmVsaWQsCiAJfQogfQogCisvKgorICogQ2hl Y2sgYW5kIHJlY29yZCBkZXBlbmRlbmNpZXMgY2F1c2VkIGJ5IGZvcmVpZ24ga2V5IGNvbnN0cmFp bnRzLgorICoKKyAqIEEgbmV3IHZhbHVlIGluIHRoZSByZWZlcmVuY2luZyB0YWJsZSBkZXBlbmRz IG9uIHRoZSByZWZlcmVuY2VkIHRhYmxlJ3MgZGF0YS4KKyAqIENvbnZlcnNlbHksIGEgZGVsZXRp b24gaW4gdGhlIHJlZmVyZW5jZWQgdGFibGUgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZQorICogcmVm ZXJlbmNpbmcgdGFibGUgc3RpbGwgY29udGFpbnMgbWF0Y2hpbmcgcm93cy4KKyAqCisgKiBTZWUg YXBwbHlwYXJhbGxlbHdvcmtlci5jIGZvciBkZXRhaWxzIG9uIHdoeSB0cmFja2luZyB0aGVzZSBk ZXBlbmRlbmNpZXMgaXMKKyAqIG5lY2Vzc2FyeS4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX2Fu ZF9yZWNvcmRfZmtleV9kZXBlbmRlbmN5KE9pZCByZWxpZCwKKwkJCQkJCQkJIExvZ2ljYWxSZXBU dXBsZURhdGEgKm9yaWdpbmFsX2RhdGEsCisJCQkJCQkJCSBib29sIG9sZF90dXBsZSwKKwkJCQkJ CQkJIFRyYW5zYWN0aW9uSWQgbmV3X2RlcGVuZGVkX3hpZCwKKwkJCQkJCQkJIExpc3QgKipkZXBl bmRzX29uX3hpZHMpCit7CisJTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWxlbnRyeTsKKwlSZXBs aWNhSWRlbnRpdHlLZXkgKnJpa2V5OworCisJQXNzZXJ0KGRlcGVuZHNfb25feGlkcyk7CisKKwly ZWxlbnRyeSA9IGxvZ2ljYWxyZXBfZ2V0X3JlbGVudHJ5KHJlbGlkKTsKKworCUFzc2VydChyZWxl bnRyeSk7CisKKwkvKgorCSAqIEdhdGhlciBmb3JlaWduIGtleSBpbmZvcm1hdGlvbiBpZiBub3Qg eWV0LiBXZSByZXF1aXJlIHRvIGJlIGluIGEKKwkgKiB0cmFuc2FjdGlvbiBzdGF0ZSBiZWNhdXNl IHN5c3RlbSBjYXRhbG9ncyBhcmUgcmVhZC4KKwkgKi8KKwlpZiAoIXJlbGVudHJ5LT5sb2NhbF9m a2V5c19jb2xsZWN0ZWQpCisJeworCQlib29sCQluZWVkc19zdGFydCA9ICFJc1RyYW5zYWN0aW9u T3JUcmFuc2FjdGlvbkJsb2NrKCk7CisKKwkJaWYgKG5lZWRzX3N0YXJ0KQorCQkJU3RhcnRUcmFu c2FjdGlvbkNvbW1hbmQoKTsKKworCQlsb2dpY2FscmVwX3JlbF9sb2FkKE5VTEwsIHJlbGlkLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJCWlmIChuZWVkc19zdGFydCkKKwkJCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworCisJCUFzc2VydChyZWxlbnRyeS0+bG9jYWxfZmtleXNfY29sbGVjdGVk KTsKKwl9CisKKwlmb3JlYWNoX3B0cihMb2dpY2FsUmVwU3Vic2NyaWJlckZLLCBma2luZm8sIHJl bGVudHJ5LT5sb2NhbF9ma2V5cykKKwl7CisJCUxpc3QJICAgKmtleWF0dG51bXMgPSBvbGRfdHVw bGUgPworCQkJZmtpbmZvLT5ma2F0dG51bXNfb2xkIDogZmtpbmZvLT5ma2F0dG51bXM7CisKKwkJ LyogTlVMTCB2YWx1ZSB3b24ndCB2aW9sYXRlIGZvcmVpZ24ga2V5IHZpb2xhdGlvbiAqLworCQlp ZiAoZmtfdHVwbGVfaGFzX251bGwob3JpZ2luYWxfZGF0YSwga2V5YXR0bnVtcykpCisJCQljb250 aW51ZTsKKworCQkvKgorCQkgKiBPbGQgdHVwbGVzIG9mIGZvcmVpZ24ga2V5cyBkbyBub3QgY29u ZmxpY3Qgd2l0aCBhbnkgcHJlY2VkaW5nCisJCSAqIHRyYW5zYWN0aW9uIChzZWUgdGhlIGNvbW1l bnRzIGluIGFwcGx5cGFyYWxsZWx3b3JrZXIuYyBmb3IgZGV0YWlscyBvbgorCQkgKiBjb25mbGlj dGluZyBjYXNlcykuIFdoZW4gd2UgZG9uJ3QgbmVlZCB0byByZWNvcmQgYSBuZXcgZGVwZW5kZW5j eSwgd2UKKwkJICogY2FuIHNraXAgcHJvY2Vzc2luZyB0aGlzIGluZGV4IGVudGlyZWx5LgorCQkg Ki8KKwkJaWYgKG9sZF90dXBsZSAmJiAhVHJhbnNhY3Rpb25JZElzVmFsaWQobmV3X2RlcGVuZGVk X3hpZCkpCisJCQljb250aW51ZTsKKworCQlyaWtleSA9IGJ1aWxkX3JlcGxpY2FfaWRlbnRpdHlf a2V5X2J5X2F0dG51bXMoZmtpbmZvLT5yZWZfcmVtb3RlaWQsCisJCQkJCQkJCQkJCQkJICBvcmln aW5hbF9kYXRhLAorCQkJCQkJCQkJCQkJCSAga2V5YXR0bnVtcyk7CisKKwkJLyoKKwkJICogRm9y IG9sZCB0dXBsZXMsIHJlY29yZCBhIGRlcGVuZGVuY3kgdGhhdCBsYXRlciB0cmFuc2FjdGlvbnMg ZGVsZXRpbmcKKwkJICogdGhlIHNhbWUga2V5IGZyb20gdGhlIHJlZmVyZW5jZWQgdGFibGUgbXVz dCB3YWl0IG9uLiBObyBwcmVjZWRpbmcKKwkJICogdHJhbnNhY3Rpb25zIGFyZSBhZGRlZCB0byB0 aGUgbGlzdC4KKwkJICoKKwkJICogRm9yIG5ldyB0dXBsZXMsIGNoZWNrIGZvciBleGlzdGluZyBk ZXBlbmRlbmNpZXMgb24gdGhlIHNhbWUga2V5CisJCSAqIGluc2VydGVkIGludG8gdGhlIHJlZmVy ZW5jZWQgdGFibGUgYW5kIGFkZCBhbnkgZGVwZW5kZW50IHRyYW5zYWN0aW9ucworCQkgKiB0byB0 aGUgbGlzdC4KKwkJICovCisJCWlmIChvbGRfdHVwbGUpCisJCXsKKwkJCXJpa2V5LT5raW5kID0g TE9HSUNBTFJFUF9LRVlfRk9SRUlHTl9LRVk7CisJCQkodm9pZCkgY2hlY2tfYW5kX3JlY29yZF9r ZXlfZGVwZW5kZW5jeShyaWtleSwgbmV3X2RlcGVuZGVkX3hpZCk7CisJCX0KKwkJZWxzZQorCQl7 CisJCQlUcmFuc2FjdGlvbklkCWRlcF94aWQ7CisKKwkJCXJpa2V5LT5raW5kID0gTE9HSUNBTFJF UF9LRVlfUkVGRVJFTkNFRF9LRVk7CisJCQlkZXBfeGlkID0gY2hlY2tfYW5kX3JlY29yZF9rZXlf ZGVwZW5kZW5jeShyaWtleSwgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCisJCQlpZiAoVHJhbnNh Y3Rpb25JZElzVmFsaWQoZGVwX3hpZCkgJiYKKwkJCQkhVHJhbnNhY3Rpb25JZEVxdWFscyhkZXBf eGlkLCBuZXdfZGVwZW5kZWRfeGlkKSkKKwkJCQlhcHBlbmRfeGlkX2RlcGVuZGVuY3koZGVwX3hp ZCwgZGVwZW5kc19vbl94aWRzKTsKKwkJfQorCX0KKworCS8qIFJldHVybiBpZiBubyByZWZlcmVu Y2VkIGtleSBleGlzdHMgKi8KKwlpZiAocmVsZW50cnktPmxvY2FsX3JlZmVyZW5jZWRfZmtleXMg PT0gTklMKQorCQlyZXR1cm47CisKKwlmb3JlYWNoX3B0cihMb2dpY2FsUmVwU3Vic2NyaWJlclJl ZkZLLCByZWZpbmZvLCByZWxlbnRyeS0+bG9jYWxfcmVmZXJlbmNlZF9ma2V5cykKKwl7CisJCUxp c3QJICAgKmtleWF0dG51bXMgPSBvbGRfdHVwbGUgPworCQkJcmVmaW5mby0+cmVmYXR0bnVtc19v bGQgOiByZWZpbmZvLT5yZWZhdHRudW1zOworCisJCS8qIFNob3VsZG4ndCBiZSByZWFsIE5VTEwg dmFsdWUgaW4gcmVmZXJlbmNlZCBrZXkgKHByaW1hcnkga2V5KS4gKi8KKwkJQXNzZXJ0KG9sZF90 dXBsZSB8fCAhZmtfdHVwbGVfaGFzX251bGwob3JpZ2luYWxfZGF0YSwga2V5YXR0bnVtcykpOwor CisJCS8qCisJCSAqIE5ldyB0dXBsZXMgb2YgcmVmZXJlbmNlZCBrZXlzIGRvIG5vdCBjb25mbGlj dCB3aXRoIGFueSBwcmVjZWRpbmcKKwkJICogdHJhbnNhY3Rpb24gKHNlZSB0aGUgY29tbWVudHMg aW4gYXBwbHlwYXJhbGxlbHdvcmtlci5jIGZvciBkZXRhaWxzIG9uCisJCSAqIGNvbmZsaWN0aW5n IGNhc2VzKS4gV2hlbiB3ZSBkb24ndCBuZWVkIHRvIHJlY29yZCBhIG5ldyBkZXBlbmRlbmN5LCB3 ZQorCQkgKiBjYW4gc2tpcCBwcm9jZXNzaW5nIHRoaXMga2V5IGVudGlyZWx5LgorCQkgKi8KKwkJ aWYgKCFvbGRfdHVwbGUgJiYgIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKG5ld19kZXBlbmRlZF94aWQp KQorCQkJY29udGludWU7CisKKwkJcmlrZXkgPSBidWlsZF9yZXBsaWNhX2lkZW50aXR5X2tleV9i eV9hdHRudW1zKHJlbGlkLCBvcmlnaW5hbF9kYXRhLAorCQkJCQkJCQkJCQkJCSAga2V5YXR0bnVt cyk7CisKKwkJLyoKKwkJICogRm9yIG9sZCB0dXBsZXMsIGNoZWNrIGZvciBleGlzdGluZyBkZXBl bmRlbmNpZXMgb24gdGhlIHNhbWUga2V5CisJCSAqIGRlbGV0ZWQgZnJvbSB0aGUgcmVmZXJlbmNp bmcgdGFibGUgYW5kIGFkZCBhbnkgZGVwZW5kZW50IHRyYW5zYWN0aW9ucworCQkgKiB0byB0aGUg bGlzdC4KKwkJICoKKwkJICogRm9yIG5ldyB0dXBsZXMsIHJlY29yZCBhIGRlcGVuZGVuY3kgdGhh dCBsYXRlciB0cmFuc2FjdGlvbnMgaW5zZXJ0aW5nCisJCSAqIHRoZSBzYW1lIGtleSBpbnRvIHRo ZSByZWZlcmVuY2luZyB0YWJsZSBtdXN0IHdhaXQgb24uIE5vIHByZWNlZGluZworCQkgKiB0cmFu c2FjdGlvbnMgYXJlIGFkZGVkIHRvIHRoZSBsaXN0LgorCQkgKi8KKwkJaWYgKG9sZF90dXBsZSkK KwkJeworCQkJVHJhbnNhY3Rpb25JZAlkZXBfeGlkOworCisJCQlyaWtleS0+a2luZCA9IExPR0lD QUxSRVBfS0VZX0ZPUkVJR05fS0VZOworCQkJZGVwX3hpZCA9IGNoZWNrX2FuZF9yZWNvcmRfa2V5 X2RlcGVuZGVuY3kocmlrZXksIEludmFsaWRUcmFuc2FjdGlvbklkKTsKKworCQkJaWYgKFRyYW5z YWN0aW9uSWRJc1ZhbGlkKGRlcF94aWQpICYmCisJCQkJIVRyYW5zYWN0aW9uSWRFcXVhbHMoZGVw X3hpZCwgbmV3X2RlcGVuZGVkX3hpZCkpCisJCQkJYXBwZW5kX3hpZF9kZXBlbmRlbmN5KGRlcF94 aWQsIGRlcGVuZHNfb25feGlkcyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlyaWtleS0+a2luZCA9 IExPR0lDQUxSRVBfS0VZX1JFRkVSRU5DRURfS0VZOworCQkJKHZvaWQpIGNoZWNrX2FuZF9yZWNv cmRfa2V5X2RlcGVuZGVuY3kocmlrZXksIG5ld19kZXBlbmRlZF94aWQpOworCQl9CisJfQorfQor CiAvKgogICogQ2hlY2sgZm9yIGRlcGVuZGVuY2llcyBvbiBwcmVjZWRpbmcgdHJhbnNhY3Rpb25z IHRoYXQgbW9kaWZ5IHRoZSBzYW1lIGtleS4KICAqIFJldHVybnMgdGhlIGRlcGVuZGVudCB0cmFu c2FjdGlvbnMgaW4gJ2RlcGVuZHNfb25feGlkcycuCkBAIC0xNDY0LDYgKzE3MDgsOSBAQCBoYW5k bGVfZGVwZW5kZW5jeV9vbl9jaGFuZ2UoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJ bmZvIHMsCiAJCQljaGVja19hbmRfcmVjb3JkX2xvY2FsX2tleV9kZXBlbmRlbmN5KHJlbGlkLCAm bmV3dHVwLCBmYWxzZSwKIAkJCQkJCQkJCQkJCSAgbmV3X2RlcGVuZGVkX3hpZCwKIAkJCQkJCQkJ CQkJCSAgJmRlcGVuZHNfb25feGlkcyk7CisJCQljaGVja19hbmRfcmVjb3JkX2ZrZXlfZGVwZW5k ZW5jeShyZWxpZCwgJm5ld3R1cCwgZmFsc2UsCisJCQkJCQkJCQkJCSBuZXdfZGVwZW5kZWRfeGlk LAorCQkJCQkJCQkJCQkgJmRlcGVuZHNfb25feGlkcyk7CiAJCQljaGVja19kZXBlbmRlbmN5X2Zv cl9wYXJhbGxlbF9zYWZldHkocmVsaWQsIG5ld19kZXBlbmRlZF94aWQsCiAJCQkJCQkJCQkJCQkg JmRlcGVuZHNfb25feGlkcyk7CiAJCQlicmVhazsKQEAgLTE0ODEsNiArMTcyOCwxMCBAQCBoYW5k bGVfZGVwZW5kZW5jeV9vbl9jaGFuZ2UoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJ bmZvIHMsCiAJCQkJCQkJCQkJCQkJICBuZXdfZGVwZW5kZWRfeGlkLAogCQkJCQkJCQkJCQkJCSAg JmRlcGVuZHNfb25feGlkcyk7CiAKKwkJCQljaGVja19hbmRfcmVjb3JkX2ZrZXlfZGVwZW5kZW5j eShyZWxpZCwgJm9sZHR1cCwgdHJ1ZSwKKwkJCQkJCQkJCQkJCSBuZXdfZGVwZW5kZWRfeGlkLAor CQkJCQkJCQkJCQkJICZkZXBlbmRzX29uX3hpZHMpOworCiAJCQkJY2hlY2tfZGVwZW5kZW5jeV9m b3JfcGFyYWxsZWxfc2FmZXR5KHJlbGlkLCBuZXdfZGVwZW5kZWRfeGlkLAogCQkJCQkJCQkJCQkJ CSAmZGVwZW5kc19vbl94aWRzKTsKIApAQCAtMTUwNSw2ICsxNzU2LDkgQEAgaGFuZGxlX2RlcGVu ZGVuY3lfb25fY2hhbmdlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbiwgU3RyaW5nSW5mbyBzLAog CQkJY2hlY2tfYW5kX3JlY29yZF9sb2NhbF9rZXlfZGVwZW5kZW5jeShyZWxpZCwgJm5ld3R1cCwg ZmFsc2UsCiAJCQkJCQkJCQkJCQkgIG5ld19kZXBlbmRlZF94aWQsCiAJCQkJCQkJCQkJCQkgICZk ZXBlbmRzX29uX3hpZHMpOworCQkJY2hlY2tfYW5kX3JlY29yZF9ma2V5X2RlcGVuZGVuY3kocmVs aWQsICZuZXd0dXAsIGZhbHNlLAorCQkJCQkJCQkJCQkgbmV3X2RlcGVuZGVkX3hpZCwKKwkJCQkJ CQkJCQkJICZkZXBlbmRzX29uX3hpZHMpOwogCQkJY2hlY2tfZGVwZW5kZW5jeV9mb3JfcGFyYWxs ZWxfc2FmZXR5KHJlbGlkLCBuZXdfZGVwZW5kZWRfeGlkLAogCQkJCQkJCQkJCQkJICZkZXBlbmRz X29uX3hpZHMpOwogCQkJYnJlYWs7CkBAIC0xNTE2LDYgKzE3NzAsOSBAQCBoYW5kbGVfZGVwZW5k ZW5jeV9vbl9jaGFuZ2UoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJbmZvIHMsCiAJ CQljaGVja19hbmRfcmVjb3JkX2xvY2FsX2tleV9kZXBlbmRlbmN5KHJlbGlkLCAmb2xkdHVwLCB0 cnVlLAogCQkJCQkJCQkJCQkJICBuZXdfZGVwZW5kZWRfeGlkLAogCQkJCQkJCQkJCQkJICAmZGVw ZW5kc19vbl94aWRzKTsKKwkJCWNoZWNrX2FuZF9yZWNvcmRfZmtleV9kZXBlbmRlbmN5KHJlbGlk LCAmb2xkdHVwLCB0cnVlLAorCQkJCQkJCQkJCQkgbmV3X2RlcGVuZGVkX3hpZCwKKwkJCQkJCQkJ CQkJICZkZXBlbmRzX29uX3hpZHMpOwogCQkJY2hlY2tfZGVwZW5kZW5jeV9mb3JfcGFyYWxsZWxf c2FmZXR5KHJlbGlkLCBuZXdfZGVwZW5kZWRfeGlkLAogCQkJCQkJCQkJCQkJICZkZXBlbmRzX29u X3hpZHMpOwogCQkJYnJlYWs7CkBAIC0xNTUyLDYgKzE4MDksMjkgQEAgaGFuZGxlX2RlcGVuZGVu Y3lfb25fY2hhbmdlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbiwgU3RyaW5nSW5mbyBzLAogCQkJ ICovCiAJCQljaGVja19hbmRfcmVjb3JkX3JlbF9kZXBlbmRlbmN5KHJlbC0+cmVtb3RlaWQsIG5l d19kZXBlbmRlZF94aWQsCiAJCQkJCQkJCQkJCSZkZXBlbmRzX29uX3hpZHMpOworCisJCQlyZW1v dGVfcmVsaWRzID0gbG9naWNhbHJlcF9nZXRfZmtfcmVsYXRlZF9yZWxpZHMocmVsKTsKKworCQkJ LyoKKwkJCSAqIFdhaXQgZm9yIGFsbCBwZW5kaW5nIGNoYW5nZXMgb24gdGFibGVzIHRoYXQgcmVm ZXJlbmNlIG9yIGFyZQorCQkJICogcmVmZXJlbmNlZCBieSB0aGUgY3VycmVudCB0YWJsZS4gSW52 YWxpZGF0ZSB0aGVpciBjYWNoZWQgZm9yZWlnbgorCQkJICoga2V5IGluZm9ybWF0aW9uLCBhcyBp dCBtYXkgYmUgb3V0ZGF0ZWQgZHVlIHRvIHNjaGVtYSBjaGFuZ2VzCisJCQkgKiAoZS5nLiwgcmVw bGljYSBpZGVudGl0eSkgb24gdGhlIGN1cnJlbnQgdGFibGUuCisJCQkgKi8KKwkJCWZvcmVhY2hf b2lkKHJlbGF0ZWRfcmVsaWQsIHJlbW90ZV9yZWxpZHMpCisJCQl7CisJCQkJTG9naWNhbFJlcFJl bE1hcEVudHJ5ICpma19yZWxhdGVkX2VudHJ5OworCisJCQkJY2hlY2tfYW5kX3JlY29yZF9yZWxf ZGVwZW5kZW5jeShyZWxhdGVkX3JlbGlkLAorCQkJCQkJCQkJCQkJbmV3X2RlcGVuZGVkX3hpZCwK KwkJCQkJCQkJCQkJCSZkZXBlbmRzX29uX3hpZHMpOworCisJCQkJZmtfcmVsYXRlZF9lbnRyeSA9 IGxvZ2ljYWxyZXBfZ2V0X3JlbGVudHJ5KHJlbGF0ZWRfcmVsaWQpOworCisJCQkJaWYgKGZrX3Jl bGF0ZWRfZW50cnkpCisJCQkJCWZrX3JlbGF0ZWRfZW50cnktPmxvY2FsX2ZrZXlzX2NvbGxlY3Rl ZCA9IGZhbHNlOworCQkJfQorCiAJCQlicmVhazsKIAogCQljYXNlIExPR0lDQUxfUkVQX01TR19U WVBFOgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9u LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaAppbmRleCBmZTM4 ODYyYjMwMC4uYWJlMTU4NjU3NzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2xvZ2ljYWxyZWxhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxy ZWxhdGlvbi5oCkBAIC01MCw2ICs1MCwxMSBAQCB0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVwUmVs TWFwRW50cnkKIAlMaXN0CSAgICpsb2NhbF91bmlxdWVfaW5kZXhlczsKIAlib29sCQlsb2NhbF91 bmlxdWVfaW5kZXhlc19jb2xsZWN0ZWQ7CiAKKwkvKiBMb2NhbCBmb3JlaWduIGtleXMuIFVzZWQg Zm9yIGRlcGVuZGVuY3kgdHJhY2tpbmcgKi8KKwlMaXN0CSAgICpsb2NhbF9ma2V5czsKKwlMaXN0 CSAgICpsb2NhbF9yZWZlcmVuY2VkX2ZrZXlzOworCWJvb2wJCWxvY2FsX2ZrZXlzX2NvbGxlY3Rl ZDsKKwogCS8qCiAJICogV2hldGhlciB0aGUgcmVsYXRpb24gY2FuIGJlIGFwcGxpZWQgaW4gcGFy YWxsZWwgb3Igbm90LiBJdCBpcwogCSAqIGRpc3RpbmdsaXNoIHdoZXRoZXIgZGVmaW5lZCB0cmln Z2VycyBhcmUgdGhlIGltbXV0YWJsZSBvciBub3QuCkBAIC03Myw2ICs3OCwyMiBAQCB0eXBlZGVm IHN0cnVjdCBMb2dpY2FsUmVwU3Vic2NyaWJlcklkeAogCWJvb2wJCW51bGxzX2Rpc3RpbmN0Owkv KiBXaGV0aGVyIE5VTExzIGFyZSBjb25zaWRlcmVkIGRpc3RpbmN0ICovCiB9IExvZ2ljYWxSZXBT dWJzY3JpYmVySWR4OwogCit0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVwU3Vic2NyaWJlckZLCit7 CisJT2lkCQkJY29ub2lkOwkJLyogT0lEIG9mIHRoZSBGSyBjb25zdHJhaW50ICovCisJTG9naWNh bFJlcFJlbElkIHJlZl9yZW1vdGVpZDsgLyogcmVmZXJlbmNlZCByZW1vdGUgcmVsYXRpb24gKi8K KwlMaXN0CSAgICpma2F0dG51bXM7CS8qIEZLIHJlbW90ZSBhdHRudW1zIG9yZGVyZWQgYnkgcmVm ZXJlbmNlZCBrZXkgKi8KKwlMaXN0CSAgICpma2F0dG51bXNfb2xkOyAvKiBvbGQtdHVwbGUtc2Fm ZSBGSyByZW1vdGUgYXR0bnVtcyAqLworfSBMb2dpY2FsUmVwU3Vic2NyaWJlckZLOworCit0eXBl ZGVmIHN0cnVjdCBMb2dpY2FsUmVwU3Vic2NyaWJlclJlZkZLCit7CisJT2lkCQkJY29ub2lkOwkJ LyogT0lEIG9mIHRoZSBGSyBjb25zdHJhaW50ICovCisJTG9naWNhbFJlcFJlbElkIGZrX3JlbW90 ZWlkOyAvKiByZWZlcmVuY2luZyByZW1vdGUgcmVsYXRpb24gKi8KKwlMaXN0CSAgICpyZWZhdHRu dW1zOwkvKiByZWZlcmVuY2VkIHJlbW90ZSBhdHRudW1zICovCisJTGlzdAkgICAqcmVmYXR0bnVt c19vbGQ7IC8qIG9sZC10dXBsZS1zYWZlIHJlZmVyZW5jZWQgcmVtb3RlIGF0dG51bXMgKi8KK30g TG9naWNhbFJlcFN1YnNjcmliZXJSZWZGSzsKKwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF9yZWxt YXBfdXBkYXRlKExvZ2ljYWxSZXBSZWxhdGlvbiAqcmVtb3RlcmVsKTsKIGV4dGVybiB2b2lkIGxv Z2ljYWxyZXBfcGFydG1hcF9yZXNldF9yZWxtYXAoTG9naWNhbFJlcFJlbGF0aW9uICpyZW1vdGVy ZWwpOwogCkBAIC04OSw2ICsxMTAsNyBAQCBleHRlcm4gT2lkCUdldFJlbGF0aW9uSWRlbnRpdHlP clBLKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gaW50CWxvZ2ljYWxyZXBfZ2V0X251bV9yZWxzKHZv aWQpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9hbGxfcmVscyhTdHJpbmdJbmZvIG91 dCk7CiBleHRlcm4gTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpsb2dpY2FscmVwX2dldF9yZWxlbnRy eShMb2dpY2FsUmVwUmVsSWQgcmVtb3RlaWQpOworZXh0ZXJuIExpc3QgKmxvZ2ljYWxyZXBfZ2V0 X2ZrX3JlbGF0ZWRfcmVsaWRzKExvZ2ljYWxSZXBSZWxhdGlvbiAqcmVtb3RlaWQpOwogCiAjZGVm aW5lIExPR0lDQUxSRVBfUEFSQUxMRUxfU0FGRQkJJ3MnCiAjZGVmaW5lIExPR0lDQUxSRVBfUEFS QUxMRUxfUkVTVFJJQ1RFRAkncicKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzA1MF9wYXJhbGxlbF9hcHBseS5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzA1MF9wYXJh bGxlbF9hcHBseS5wbAppbmRleCA2YjBkNWM3ZTM4My4uODE1NTBjNzFiYTAgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzA1MF9wYXJhbGxlbF9hcHBseS5wbAorKysgYi9zcmMv dGVzdC9zdWJzY3JpcHRpb24vdC8wNTBfcGFyYWxsZWxfYXBwbHkucGwKQEAgLTMzLDYgKzMzLDkg QEAgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCiAgICAgQ1JFQVRFIFVOSVFVRSBJTkRFWCB0 YWJfdG9hc3RfcmlfaW5kZXggb24gdGFiX3RvYXN0IChhLCBiKTsKICAgICBBTFRFUiBUQUJMRSB0 YWJfdG9hc3QgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0YWJfdG9hc3RfcmlfaW5kZXg7 CiAgICAgSU5TRVJUIElOVE8gdGFiX3RvYXN0KGEsIGIpIFZBTFVFUyhyZXBlYXQoJzEyMzQ1Njc4 OTAnLCAyMDApLCAnMTIzNDU2Nzg5MCcpOworCisgICAgQ1JFQVRFIFRBQkxFIHJlZ3Jlc3NfdGFi X3BrIChpZCBpbnQgUFJJTUFSWSBLRVkpOworICAgIENSRUFURSBUQUJMRSByZWdyZXNzX3RhYl9m ayAoaWQgaW50IFBSSU1BUlkgS0VZLCBmayBpbnQgUkVGRVJFTkNFUyByZWdyZXNzX3RhYl9wayAo aWQpKTsKICkpOwogJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKICAgICAi SU5TRVJUIElOVE8gcmVncmVzc190YWIgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMSwgMTApLCAn dGVzdCcpOyIpOwpAQCAtNzEsNiArNzQsOSBAQCAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo CiAgICAgQUxURVIgVEFCTEUgdGFiX3RvYXN0IEFMVEVSIENPTFVNTiBhIFNFVCBTVE9SQUdFIEVY VEVSTkFMOwogICAgIENSRUFURSBVTklRVUUgSU5ERVggdGFiX3RvYXN0X3JpX2luZGV4IG9uIHRh Yl90b2FzdCAoYSwgYik7CiAgICAgQUxURVIgVEFCTEUgdGFiX3RvYXN0IFJFUExJQ0EgSURFTlRJ VFkgVVNJTkcgSU5ERVggdGFiX3RvYXN0X3JpX2luZGV4OworCisgICAgQ1JFQVRFIFRBQkxFIHJl Z3Jlc3NfdGFiX3BrIChpZCBpbnQgUFJJTUFSWSBLRVkpOworICAgIENSRUFURSBUQUJMRSByZWdy ZXNzX3RhYl9mayAoaWQgaW50IFBSSU1BUlkgS0VZLCBmayBpbnQgUkVGRVJFTkNFUyByZWdyZXNz X3RhYl9wayAoaWQpKTsKICkpOwogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCiAgICAgIkNSRUFURSBTVUJTQ1JJUFRJT04gcmVncmVzc19zdWIgQ09OTkVDVElPTiAnJHB1 Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiByZWdyZXNzX3B1YjsiKTsKQEAgLTUyNyw0ICs1 MzMsMTYyIEBAICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBJ TkRFWCBsb2NhbF91bmlxdWVfaWR4X2V4cHI7Iik7CiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgVEFCTEUgcmVncmVzc190YWI7Iik7CiAkbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3JlZ3Jlc3Nfc3ViJyk7CiAKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdGhhdCB0aGUgZGVw ZW5kZW5jeSB0cmFja2luZyB3b3JrcyBjb3JyZWN0bHkgZm9yIGZvcmVpZ24ga2V5cyBvbgorIyBz dWJzY3JpYmVyIGR1cmluZyBwYXJhbGxlbCBhcHBseS4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGVzdCB0aGF0IHdoZW4gcmVjZWl2aW5n IHRhYmxlIHNjaGVtYSBpbmZvcm1hdGlvbiBmb3IgYSByZWZlcmVuY2luZyB0YWJsZSwgdGhlCisj IHN1YnNjcmliZXIgY29ycmVjdGx5IGNoZWNrcyBmb3IgZGVwZW5kZW5jaWVzIG9uIHRoZSByZWZl cmVuY2VkIHRhYmxlIGFuZCB3YWl0cworIyBmb3IgaXRzIGNoYW5nZXMgdG8gY29tcGxldGUuCisk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGluamVjdGlv bl9wb2ludHNfYXR0YWNoKCdwYXJhbGxlbC13b3JrZXItYmVmb3JlLWNvbW1pdCcsJ3dhaXQnKTsi CispOworCisjIEVuYWJsZSBmb3JlaWduIHRyaWdnZXJzIG9uIHN1YnNjcmliZXIKK215ICRwa19m a190cmlnZ2VyID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWwor ICAgIFNFTEVDVCB0Z25hbWUKKyAgICBGUk9NIHBnX3RyaWdnZXIKKyAgICBXSEVSRSB0Z3JlbGlk ID0gJ3JlZ3Jlc3NfdGFiX3BrJzo6cmVnY2xhc3MKKyAgICAgIEFORCB0Z2NvbnN0cmFpbnQgPiAw CisgICAgTElNSVQgMQorXSk7CitjaG9tcCgkcGtfZmtfdHJpZ2dlcik7CisKK215ICRma19ma190 cmlnZ2VyID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworICAg IFNFTEVDVCB0Z25hbWUKKyAgICBGUk9NIHBnX3RyaWdnZXIKKyAgICBXSEVSRSB0Z3JlbGlkID0g J3JlZ3Jlc3NfdGFiX2ZrJzo6cmVnY2xhc3MKKyAgICAgIEFORCB0Z2NvbnN0cmFpbnQgPiAwCisg ICAgTElNSVQgMQorXSk7CitjaG9tcCgkZmtfZmtfdHJpZ2dlcik7CisKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorICAgIHFxW0FMVEVSIFRBQkxFIHJlZ3Jlc3NfdGFi X3BrIEVOQUJMRSBSRVBMSUNBIFRSSUdHRVIgIiRwa19ma190cmlnZ2VyIjsKKyAgICBBTFRFUiBU QUJMRSByZWdyZXNzX3RhYl9mayBFTkFCTEUgUkVQTElDQSBUUklHR0VSICIkZmtfZmtfdHJpZ2dl ciI7XSk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgIklO U0VSVCBJTlRPIHJlZ3Jlc3NfdGFiX3BrIFZBTFVFUyAoMik7Iik7CisKKyRub2RlX3N1YnNjcmli ZXItPndhaXRfZm9yX2V2ZW50KCdsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIHdvcmtlcics CisJJ3BhcmFsbGVsLXdvcmtlci1iZWZvcmUtY29tbWl0Jyk7CisKKyRvZmZzZXQgPSAtcyAkbm9k ZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorICAgICJJTlNFUlQgSU5UTyByZWdyZXNzX3RhYl9mayBWQUxVRVMgKDEsIDIpOyIp OworCisjIFZlcmlmeSB0aGUgZGVwZW5kZW5jeSBpcyBkZXRlY3RlZCBvbiByZWZlcmVuY2VkIHRh YmxlIHNjaGVtYSBpbmZvcm1hdGlvbgorJHN0ciA9ICRub2RlX3N1YnNjcmliZXItPndhaXRfZm9y X2xvZyhxci9mb3VuZCBjb25mbGljdGluZyBjaGFuZ2Ugb24gdGFibGUgWzEtOV1bMC05XSsgZnJv bSAoWzEtOV1bMC05XSspLywgJG9mZnNldCk7CiskeGlkID0gJHN0ciA9fiAvZm91bmQgY29uZmxp Y3RpbmcgY2hhbmdlIG9uIHRhYmxlIFsxLTldWzAtOV0rIGZyb20gKFsxLTldWzAtOV0rKS87CisK KyMgVmVyaWZ5IHRoZSBwYXJhbGxlbCB3b3JrZXIgd2FpdHMgZm9yIHRoZSBzYW1lIHRyYW5zYWN0 aW9uCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIvd2FpdCBmb3IgZGVwZW5kZWQg eGlkICR4aWQvLCAkb2Zmc2V0KTsKKworb2soMSwgInJlZmVyZW5jZWQgdGFibGUgZGVwZW5kZW5j eSBkZXRlY3RlZCBmb3IgcGFyYWxsZWwgYXBwbHkiKTsKKworIyBXYWtldXAgdGhlIHBhcmFsbGVs IHdvcmtlcgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworICAg IFNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2RldGFjaCgncGFyYWxsZWwtd29ya2VyLWJlZm9yZS1j b21taXQnKTsKKyAgICBTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c193YWtldXAoJ3BhcmFsbGVsLXdv cmtlci1iZWZvcmUtY29tbWl0Jyk7CitdKTsKKworIyBWZXJpZnkgdGhlIHN0cmVhbWVkIHRyYW5z YWN0aW9uIGNhbiBiZSBhcHBsaWVkCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIv ZmluaXNoIHdhaXRpbmcgZm9yIGRlcGVuZGVkIHhpZCAkeGlkLywgJG9mZnNldCk7Ciskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3JlZ3Jlc3Nfc3ViJyk7CisKKyRyZXN1bHQgPQor ICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgx KSBGUk9NIHJlZ3Jlc3NfdGFiX3BrIik7CitpcyAoJHJlc3VsdCwgMSwgJ2luc2VydCBpcyByZXBs aWNhdGVkIHRvIHJlZmVyZW5jZWQgdGFibGUgb24gc3Vic2NyaWJlcicpOworCiskcmVzdWx0ID0K KyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo MSkgRlJPTSByZWdyZXNzX3RhYl9mayIpOworaXMgKCRyZXN1bHQsIDEsICdpbnNlcnQgaXMgcmVw bGljYXRlZCB0byByZWZlcmVuY2luZyB0YWJsZSBvbiBzdWJzY3JpYmVyJyk7CisKKyMgSU5TRVJU IC0gSU5TRVJUIGNhc2U6IFR4LTEgaW5zZXJ0cyByZWZlcmVuY2VkIHR1cGxlIGFuZCBUeC0yIGlu c2VydHMKKyMgcmVmZXJlbmNpbmcgdHVwbGUuCisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goJ3BhcmFsbGVs LXdvcmtlci1iZWZvcmUtY29tbWl0Jywnd2FpdCcpOyIKKyk7CisKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgIklOU0VSVCBJTlRPIHJlZ3Jlc3NfdGFiX3BrIFZB TFVFUyAoMyk7Iik7CisKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2V2ZW50KCdsb2dpY2Fs IHJlcGxpY2F0aW9uIHBhcmFsbGVsIHdvcmtlcicsCisJJ3BhcmFsbGVsLXdvcmtlci1iZWZvcmUt Y29tbWl0Jyk7CisKKyRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorICAgICJJTlNFUlQgSU5UTyBy ZWdyZXNzX3RhYl9mayBWQUxVRVMgKDIsIDMpOyIpOworCisjIFZlcmlmeSB0aGUgZGVwZW5kZW5j eSBmb3IgcmVmZXJlbmNlZCBrZXkgY2hhbmdlIGlzIGRldGVjdGVkCiskc3RyID0gJG5vZGVfc3Vi c2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyL2ZvdW5kIGNvbmZsaWN0aW5nIHJlZmVyZW5jZWQga2V5 IGNoYW5nZSBvbiB0YWJsZSBbMS05XVswLTldKyBmcm9tIChbMS05XVswLTldKykvLCAkb2Zmc2V0 KTsKKyR4aWQgPSAkc3RyID1+IC9mb3VuZCBjb25mbGljdGluZyByZWZlcmVuY2VkIGtleSBjaGFu Z2Ugb24gdGFibGUgWzEtOV1bMC05XSsgZnJvbSAoWzEtOV1bMC05XSspLzsKKworIyBWZXJpZnkg dGhlIHBhcmFsbGVsIHdvcmtlciB3YWl0cyBmb3IgdGhlIHNhbWUgdHJhbnNhY3Rpb24KKyRub2Rl X3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci93YWl0IGZvciBkZXBlbmRlZCB4aWQgJHhpZC8s ICRvZmZzZXQpOworCitvaygxLCAicmVmZXJlbmNlZCBrZXkgZGVwZW5kZW5jeSBkZXRlY3RlZCBm b3IgcGFyYWxsZWwgYXBwbHkiKTsKKworIyBXYWtldXAgdGhlIHBhcmFsbGVsIHdvcmtlcgorJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworICAgIFNFTEVDVCBpbmpl Y3Rpb25fcG9pbnRzX2RldGFjaCgncGFyYWxsZWwtd29ya2VyLWJlZm9yZS1jb21taXQnKTsKKyAg ICBTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c193YWtldXAoJ3BhcmFsbGVsLXdvcmtlci1iZWZvcmUt Y29tbWl0Jyk7CitdKTsKKworIyBWZXJpZnkgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uIGNhbiBi ZSBhcHBsaWVkCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIvZmluaXNoIHdhaXRp bmcgZm9yIGRlcGVuZGVkIHhpZCAkeGlkLywgJG9mZnNldCk7Ciskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJ3JlZ3Jlc3Nfc3ViJyk7CisKKyRyZXN1bHQgPQorICAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgxKSBGUk9NIHJlZ3Jl c3NfdGFiX3BrIik7CitpcyAoJHJlc3VsdCwgMiwgJ2luc2VydCBpcyByZXBsaWNhdGVkIHRvIHJl ZmVyZW5jZWQgdGFibGUgb24gc3Vic2NyaWJlcicpOworCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoMSkgRlJPTSByZWdy ZXNzX3RhYl9mayIpOworaXMgKCRyZXN1bHQsIDIsICdpbnNlcnQgaXMgcmVwbGljYXRlZCB0byBy ZWZlcmVuY2luZyB0YWJsZSBvbiBzdWJzY3JpYmVyJyk7CisKKyMgREVMRVRFIC0gREVMRVRFIGNh c2U6IFR4LTEgZGVsZXRlcyByZWZlcmVuY2luZyB0dXBsZSBhbmQgVHgtMiBkZWxldGVzCisjIHJl ZmVyZW5jZWQgdHVwbGUuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCdwYXJhbGxlbC13b3JrZXItYmVmb3Jl LWNvbW1pdCcsJ3dhaXQnKTsiCispOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorICAgICJERUxFVEUgRlJPTSByZWdyZXNzX3RhYl9mayBXSEVSRSBpZCA9IDE7Iik7 CisKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2V2ZW50KCdsb2dpY2FsIHJlcGxpY2F0aW9u IHBhcmFsbGVsIHdvcmtlcicsCisJJ3BhcmFsbGVsLXdvcmtlci1iZWZvcmUtY29tbWl0Jyk7CisK KyRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCiskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorICAgICJERUxFVEUgRlJPTSByZWdyZXNzX3RhYl9w ayBXSEVSRSBpZCA9IDI7Iik7CisKKyRzdHIgPSAkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9s b2cocXIvZm91bmQgY29uZmxpY3RpbmcgZm9yZWlnbiBrZXkgY2hhbmdlIG9uIHRhYmxlIFsxLTld WzAtOV0rIGZyb20gKFsxLTldWzAtOV0rKS8sICRvZmZzZXQpOworJHhpZCA9ICRzdHIgPX4gL2Zv dW5kIGNvbmZsaWN0aW5nIGZvcmVpZ24ga2V5IGNoYW5nZSBvbiB0YWJsZSBbMS05XVswLTldKyBm cm9tIChbMS05XVswLTldKykvOworCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIv d2FpdCBmb3IgZGVwZW5kZWQgeGlkICR4aWQvLCAkb2Zmc2V0KTsKKworb2soMSwgImZvcmVpZ24g a2V5IGRlcGVuZGVuY3kgZGV0ZWN0ZWQgZm9yIHBhcmFsbGVsIGFwcGx5Iik7CisKKyRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKKyAgICBTRUxFQ1QgaW5qZWN0aW9u X3BvaW50c19kZXRhY2goJ3BhcmFsbGVsLXdvcmtlci1iZWZvcmUtY29tbWl0Jyk7CisgICAgU0VM RUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCdwYXJhbGxlbC13b3JrZXItYmVmb3JlLWNvbW1p dCcpOworXSk7CisKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci9maW5pc2ggd2Fp dGluZyBmb3IgZGVwZW5kZWQgeGlkICR4aWQvLCAkb2Zmc2V0KTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgncmVncmVzc19zdWInKTsKKworJHJlc3VsdCA9CisgICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KDEpIEZST00gcmVn cmVzc190YWJfcGsiKTsKK2lzICgkcmVzdWx0LCAxLCAnZGVsZXRlIGlzIHJlcGxpY2F0ZWQgdG8g cmVmZXJlbmNlZCB0YWJsZSBvbiBzdWJzY3JpYmVyJyk7CisKKyRyZXN1bHQgPQorICAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgxKSBGUk9NIHJl Z3Jlc3NfdGFiX2ZrIik7CitpcyAoJHJlc3VsdCwgMSwgJ2RlbGV0ZSBpcyByZXBsaWNhdGVkIHRv IHJlZmVyZW5jaW5nIHRhYmxlIG9uIHN1YnNjcmliZXInKTsKKwogZG9uZV90ZXN0aW5nKCk7Ci0t IAoyLjQzLjAKCg== --_010_TY4PR01MB1771875A7A64B139EF8C8D05C94E62TY4PR01MB17718jp_ Content-Type: application/octet-stream; name="v20-0008-Support-dependency-tracking-via-local-unique-ind.patch" Content-Description: v20-0008-Support-dependency-tracking-via-local-unique-ind.patch Content-Disposition: attachment; filename="v20-0008-Support-dependency-tracking-via-local-unique-ind.patch"; size=39741; creation-date="Mon, 15 Jun 2026 11:19:05 GMT"; modification-date="Mon, 15 Jun 2026 11:20:10 GMT" Content-Transfer-Encoding: base64 RnJvbSAyMzliNTY0NWZkYmUwZDVkNmViOTQzMWJlMGZlYjVkMTk4YThhYjg5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaaGlqaWUgSG91IDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBXZWQsIDEwIEp1biAyMDI2IDEzOjAzOjE2ICswODAwClN1YmplY3Q6IFtQQVRDSCB2MjAg OC85XSBTdXBwb3J0IGRlcGVuZGVuY3kgdHJhY2tpbmcgdmlhIGxvY2FsIHVuaXF1ZSBpbmRleGVz CgpDdXJyZW50bHksIGxvZ2ljYWwgcmVwbGljYXRpb24ncyBwYXJhbGxlbCBhcHBseSBtZWNoYW5p c20gdHJhY2tzIGRlcGVuZGVuY2llcwpwcmltYXJpbHkgYmFzZWQgb24gdGhlIFJFUExJQ0EgSURF TlRJVFkgZGVmaW5lZCBvbiB0aGUgcHVibGlzaGVyIHRhYmxlLgpIb3dldmVyLCBsb2NhbCBzdWJz Y3JpYmVyIHRhYmxlcyBtaWdodCBoYXZlIGFkZGl0aW9uYWwgdW5pcXVlIGluZGV4ZXMgdGhhdApj b3VsZCBlZmZlY3RpdmVseSBzZXJ2ZSBhcyBkZXBlbmRlbmN5IGtleXMsIGV2ZW4gaWYgdGhleSBk b24ndCBjb3JyZXNwb25kIHRvCnRoZSBwdWJsaXNoZXIncyBSRVBMSUNBIElERU5USVRZLiBGYWls aW5nIHRvIHRyYWNrIHRoZXNlIGFkZGl0aW9uYWwgdW5pcXVlCmtleXMgY2FuIGxlYWQgdG8gaW5j b3JyZWN0IGRhdGEgYW5kL29yIGRlYWRsb2NrcyBkdXJpbmcgcGFyYWxsZWwgYXBwbGljYXRpb24u CgpUaGlzIHBhdGNoIGV4dGVuZHMgdGhlIHBhcmFsbGVsIGFwcGx5J3MgZGVwZW5kZW5jeSB0cmFj a2luZyB0byBjb25zaWRlcgpsb2NhbCB1bmlxdWUgaW5kZXhlcyBvbiB0aGUgc3Vic2NyaWJlciB0 YWJsZS4gVGhpcyBpcyBhY2hpZXZlZCBieSBleHRlbmRpbmcKdGhlIGV4aXN0aW5nIFJlcGxpY2Eg SWRlbnRpdHkgaGFzaCB0YWJsZSB0byBhbHNvIHN0b3JlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24K YmFzZWQgb24gdGhlc2UgbG9jYWwgdW5pcXVlIGluZGV4ZXMuCgpUaGUgTG9naWNhbFJlcFJlbE1h cEVudHJ5IHN0cnVjdHVyZSBpcyBleHRlbmRlZCB0byBzdG9yZSBkZXRhaWxzIGFib3V0IHRoZXNl CmxvY2FsIHVuaXF1ZSBpbmRleGVzLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNvbGxlY3RlZCBhbmQg Y2FjaGVkIHdoZW4KZGVwZW5kZW5jeSBjaGVja2luZyBpcyBmaXJzdCBwZXJmb3JtZWQgZm9yIGEg cmVtb3RlIHRyYW5zYWN0aW9uIG9uIGEgZ2l2ZW4KcmVsYXRpb24uIFRoaXMgY29sbGVjdGlvbiBw cm9jZXNzIHJlcXVpcmVzIHRvIGJlIGluIGEgdHJhbnNhY3Rpb24gdG8gYWNjZXNzCnN5c3RlbSBj YXRhbG9nIGluZm9ybWF0aW9uLgotLS0KIC4uLi9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFy YWxsZWx3b3JrZXIuYyB8ICA1MCArKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cmVsYXRpb24uYyAgICB8IDE5NiArKysrKysrKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvd29ya2VyLmMgICAgICB8IDM4NyArKysrKysrKysrKysrLS0tLS0KIHNyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9kZWFkbG9jay5jICAgICAgICAgICB8ICAgMSAtCiBzcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaCAgICAgfCAgMTIgKwogc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL3QvMDUwX3BhcmFsbGVsX2FwcGx5LnBsIHwgMTI0ICsrKysrKwogc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAyICsKIDcgZmlsZXMgY2hhbmdl ZCwgNjY3IGluc2VydGlvbnMoKyksIDEwNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jCmluZGV4IDU4 YmQ3YTY5OTkyLi44ODI2ZmFmMTAyYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKQEAgLTE3NCw2ICsxNzQsNTYgQEAK ICAqIGJvdGggYXJlIGFsbG93ZWQgdG8gYXBwbHkgaW4gcGFyYWxsZWwsIFRYLTIncyBERUxFVEUg Y291bGQgYmUgYXBwbGllZCBiZWZvcmUKICAqIFRYLTEncyBJTlNFUlQsIHJlc3VsdGluZyBpbiBh IGRlbGV0ZV9taXNzaW5nIGNvbmZsaWN0LgogICoKKyAqIEJleW9uZCByZXBsaWNhIGlkZW50aXR5 IGtleXMsIHdlIGFsc28gdHJhY2sgZGVwZW5kZW5jaWVzIG9uIHRyYW5zYWN0aW9ucyB0aGF0Cisg KiBtb2RpZnkgdGhlIHNhbWUgbG9jYWwgdW5pcXVlIGtleS4gRXZlbiBpZiB0aGUgcmVwbGljYSBp ZGVudGl0eSBrZXlzIGRpZmZlciwKKyAqIHVuaXF1ZSBpbmRleGVzIGNhbiBzdGlsbCBjYXVzZSBj b25mbGljdHMuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQKKyAqIHVuZXhwZWN0ZWQgZXJy b3JzLiBGb3IgZXhhbXBsZToKKyAqCisgKiAgIFRYLTE6IERFTEVURSByb3cgKDEsMikgd2l0aCBy ZXBsaWNhIGlkZW50aXR5IGtleSAoMSwyKSBhbmQgdW5pcXVlIGtleSAoMikKKyAqICAgVFgtMjog SU5TRVJUIHJvdyAoMywyKSB3aXRoIHJlcGxpY2EgaWRlbnRpdHkga2V5ICgzLDIpIGFuZCB1bmlx dWUga2V5ICgyKQorICoKKyAqIElmIGFwcGxpZWQgaW4gcGFyYWxsZWwsIFRYLTIncyBJTlNFUlQg Y291bGQgYmUgYXBwbGllZCBiZWZvcmUgVFgtMSdzIERFTEVURSwKKyAqIGxlYWRpbmcgdG8gYSB1 bmlxdWUgaW5kZXggdmlvbGF0aW9uIGVycm9yLgorICoKKyAqIFdlIGRvIG5vdCB0cmFjayBkZXBl bmRlbmNpZXMgZm9yIElOU0VSVCBhbmQgVVBEQVRFIHRoYXQgY29uZmxpY3Qgb24gYSBuZXcKKyAq IHVuaXF1ZSBrZXkgdmFsdWUsIHNpbmNlIHN1Y2ggY29uZmxpY3RzIHdvdWxkIGNhdXNlIGFuIGVy cm9yIGV2ZW4gaW4gc2VyaWFsCisgKiBtb2RlLiBJbnN0ZWFkLCB3ZSBvbmx5IHRyYWNrIGRlcGVu ZGVuY2llcyBpbnZvbHZpbmcgb2xkIHR1cGxlcyAoZnJvbSBERUxFVEUKKyAqIG9yIFVQREFURSkg YW5kIHJlcXVpcmUgSU5TRVJUIGFuZCBVUERBVEUgdHJhbnNhY3Rpb25zIHRoYXQgdGFyZ2V0IHRo ZSBzYW1lCisgKiB1bmlxdWUga2V5IHRvIHdhaXQgZm9yIHRoZW0uCisgKgorICogTm90ZSB0aGF0 IHRoZSBvbGQgdHVwbGUgb2YgYW4gVVBEQVRFIG9yIERFTEVURSBtYXkgbm90IGluY2x1ZGUgdGhl IHVuaXF1ZSBrZXkKKyAqIGNvbHVtbiBpZiB0aGF0IGNvbHVtbiBpcyBub3QgcGFydCBvZiB0aGUg cmVwbGljYSBpZGVudGl0eSBjb2x1bW5zIG9uIHRoZQorICogcHVibGlzaGVyLiBJbiBzdWNoIGNh c2VzLCB3ZSBvbmx5IHVzZSB0aGUgdW5pcXVlIGNvbHVtbnMgdGhhdCBhcmUgcGFydCBvZiB0aGUK KyAqIHJlcGxpY2EgaWRlbnRpdHkga2V5cyBmb3IgZGVwZW5kZW5jeSB0cmFja2luZywgd2hpY2gg bWF5IGxlYWQgdG8gZmFsc2UKKyAqIHBvc2l0aXZlcy4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEg dW5pcXVlIGluZGV4IGRlZmluZWQgYXMgVU5JUVVFIChhLCBiKSwKKyAqIHdoZXJlIG9ubHkgYiBp cyBwYXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5IGtleXM6CisgKgorICogICBUWC0xOiBERUxF VEUgcm93ICgxLDIpIFRYLTI6IElOU0VSVCByb3cgKDMsMikKKyAqCisgKiBJZiBhcHBsaWVkIGlu IHBhcmFsbGVsLCBib3RoIHRyYW5zYWN0aW9ucyB3aWxsIGJlIHRyZWF0ZWQgYXMgZGVwZW5kZW50 CisgKiBiZWNhdXNlIHRoZXkgbW9kaWZ5IHRoZSBzYW1lIHVuaXF1ZSBrZXkgdmFsdWUgKGI9Miks IGV2ZW4gdGhvdWdoIHRoZXkKKyAqIGFjdHVhbGx5IG1vZGlmeSBkaWZmZXJlbnQgdW5pcXVlIGtl eXMuIFRoaXMgaXMgYWNjZXB0YWJsZSBiZWNhdXNlIGl0IGlzIHN0aWxsCisgKiBiZXR0ZXIgdGhh biBjb21wbGV0ZWx5IGRpc2FsbG93aW5nIHBhcmFsbGVsaXNtIGZvciB0aGVzZSB0cmFuc2FjdGlv bnMuCisgKgorICogSW4gdGhlIHdvcnN0IGNhc2UsIGlmIG5vbmUgb2YgdGhlIHVuaXF1ZSBpbmRl eCBjb2x1bW5zIGFyZSBwYXJ0IG9mIHRoZQorICogcmVwbGljYSBpZGVudGl0eSBrZXlzLCB3ZSB0 cmVhdCBhbGwgdHJhbnNhY3Rpb25zIHRoYXQgbW9kaWZ5IHRoZSBzYW1lIHRhYmxlCisgKiBhcyBk ZXBlbmRlbnQgYW5kIGRpc2FsbG93IHBhcmFsbGVsaXNtIGZvciB0aGF0IHRhYmxlLgorICoKKyAq IFhYWCBXZSBjb3VsZCBjb25zaWRlciByZXF1ZXN0aW5nIHRoZSBwdWJsaXNoZXIgdG8gaW5jbHVk ZSB1bmlxdWUga2V5IGNvbHVtbnMKKyAqIGluIHRoZSBvbGQgdHVwbGUgb2YgVVBEQVRFIG9yIERF TEVURSB3aGVuIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoZSByZXBsaWNhCisgKiBpZGVudGl0eSBr ZXlzLiBUaGlzIHdvdWxkIHJlZHVjZSBmYWxzZSBwb3NpdGl2ZXMsIGJ1dCB3b3VsZCByZXF1aXJl IGNoYW5nZXMKKyAqIG9uIHRoZSBwdWJsaXNoZXIgc2lkZSBhbmQgaW5jcmVhc2UgZGlzayAoV0FM IHNpemUpIGFuZCBuZXR3b3JrIGRhdGEuIEZvciBub3csCisgKiB3ZSBjaG9vc2Ugbm90IHRvIGlt cGxlbWVudCB0aGlzLiBBbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyB0byBwcm92aWRlIGFuCisg KiBvcHRpb24gdG8gc2tpcCB0cmFja2luZyBkZXBlbmRlbmNpZXMgb24gdW5pcXVlIGtleXMgdGhh dCBhcmUgbm90IHBhcnQgb2YgdGhlCisgKiByZXBsaWNhIGlkZW50aXR5IGtleXMuIFRoaXMgY291 bGQgYmUgdXNlZnVsIGZvciB1c2VycyB3aG8gcHJlZmVyIGhpZ2hlcgorICogcGFyYWxsZWxpc20g YW5kIGV4cGVyaWVuY2UgZmV3IGNvbmZsaWN0cy4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGxvY2Fs IHVuaXF1ZSBrZXkgY291bGQgY2hhbmdlIGFmdGVyIGRlcGVuZGVuY3kgY2hlY2tpbmcgYW5kCisg KiBiZWZvcmUgYXBwbHlpbmcgdGhlIGNoYW5nZS4gSG93ZXZlciwgdG8gY2VudHJhbGl6ZSB0cmFj a2luZyBhbmQga2VlcCBpdAorICogc2ltcGxlLCB3ZSBzdGlsbCBwZXJmb3JtIHRoaXMgY2hlY2sg b25seSBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlci4gVGhpcyBpcworICogYWNjZXB0YWJsZSBi ZWNhdXNlIGluIHRoZSB3b3JzdCBjYXNlLCB0aGUgcGFyYWxsZWwgd29ya2VyIHdpbGwgcmVwb3J0 IGFuCisgKiBlcnJvciBhbmQgcmVzdGFydCB0aGUgdHJhbnNhY3Rpb24gdXNpbmcgdGhlIGxhdGVz dCBpbmRleCBpbmZvcm1hdGlvbi4KKyAqCiAgKiBDb21taXQgb3JkZXIKICAqIC0tLS0tLS0tLS0t LQogICogV2UgcHJlc2VydmUgcHVibGlzaGVyIGNvbW1pdCBvcmRlciBmb3IgYWxsIHRyYW5zYWN0 aW9ucyBmb3IgdHdvIHJlYXNvbnM6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3JlbGF0aW9uLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jl bGF0aW9uLmMKaW5kZXggZWViODVmOGNjNWQuLjhlZWY4N2NhOTEwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCkBAIC04NCw2ICs4NCw3IEBAIGxvZ2ljYWxy ZXBfcmVsbWFwX2ludmFsaWRhdGVfY2IoRGF0dW0gYXJnLCBPaWQgcmVsb2lkKQogCQkJaWYgKGVu dHJ5LT5sb2NhbHJlbG9pZCA9PSByZWxvaWQpCiAJCQl7CiAJCQkJZW50cnktPmxvY2FscmVsdmFs aWQgPSBmYWxzZTsKKwkJCQllbnRyeS0+bG9jYWxfdW5pcXVlX2luZGV4ZXNfY29sbGVjdGVkID0g ZmFsc2U7CiAJCQkJaGFzaF9zZXFfdGVybSgmc3RhdHVzKTsKIAkJCQlicmVhazsKIAkJCX0KQEAg LTk3LDcgKzk4LDEwIEBAIGxvZ2ljYWxyZXBfcmVsbWFwX2ludmFsaWRhdGVfY2IoRGF0dW0gYXJn LCBPaWQgcmVsb2lkKQogCQloYXNoX3NlcV9pbml0KCZzdGF0dXMsIExvZ2ljYWxSZXBSZWxNYXAp OwogCiAJCXdoaWxlICgoZW50cnkgPSAoTG9naWNhbFJlcFJlbE1hcEVudHJ5ICopIGhhc2hfc2Vx X3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKKwkJewogCQkJZW50cnktPmxvY2FscmVsdmFsaWQg PSBmYWxzZTsKKwkJCWVudHJ5LT5sb2NhbF91bmlxdWVfaW5kZXhlc19jb2xsZWN0ZWQgPSBmYWxz ZTsKKwkJfQogCX0KIH0KIApAQCAtMTI4LDYgKzEzMiwyMSBAQCBsb2dpY2FscmVwX3JlbG1hcF9p bml0KHZvaWQpCiAJCQkJCQkJCSAgKERhdHVtKSAwKTsKIH0KIAorLyoKKyAqIFJlbGVhc2UgbG9j YWwgaW5kZXggbGlzdAorICovCitzdGF0aWMgdm9pZAorZnJlZV9sb2NhbF91bmlxdWVfaW5kZXhl cyhMb2dpY2FsUmVwUmVsTWFwRW50cnkgKmVudHJ5KQoreworCUFzc2VydChhbV9sZWFkZXJfYXBw bHlfd29ya2VyKCkpOworCisJZm9yZWFjaF9wdHIoTG9naWNhbFJlcFN1YnNjcmliZXJJZHgsIGlk eGluZm8sIGVudHJ5LT5sb2NhbF91bmlxdWVfaW5kZXhlcykKKwkJYm1zX2ZyZWUoaWR4aW5mby0+ aW5kZXhrZXlzKTsKKworCWxpc3RfZnJlZV9kZWVwKGVudHJ5LT5sb2NhbF91bmlxdWVfaW5kZXhl cyk7CisJZW50cnktPmxvY2FsX3VuaXF1ZV9pbmRleGVzID0gTklMOworfQorCiAvKgogICogRnJl ZSB0aGUgZW50cnkgb2YgYSByZWxhdGlvbiBtYXAgY2FjaGUuCiAgKi8KQEAgLTE1NSw2ICsxNzQs OSBAQCBsb2dpY2FscmVwX3JlbG1hcF9mcmVlX2VudHJ5KExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAq ZW50cnkpCiAKIAlpZiAoZW50cnktPmF0dHJtYXApCiAJCWZyZWVfYXR0cm1hcChlbnRyeS0+YXR0 cm1hcCk7CisKKwlpZiAoZW50cnktPmxvY2FsX3VuaXF1ZV9pbmRleGVzICE9IE5JTCkKKwkJZnJl ZV9sb2NhbF91bmlxdWVfaW5kZXhlcyhlbnRyeSk7CiB9CiAKIC8qCkBAIC0yMTcsNiArMjM5LDcg QEAgbG9naWNhbHJlcF9yZWxtYXBfdXBkYXRlKExvZ2ljYWxSZXBSZWxhdGlvbiAqcmVtb3RlcmVs KQogCWVudHJ5LT5yZW1vdGVyZWwuYXR0a2V5cyA9IGJtc19jb3B5KHJlbW90ZXJlbC0+YXR0a2V5 cyk7CiAKIAllbnRyeS0+cGFyYWxsZWxfc2FmZSA9IExPR0lDQUxSRVBfUEFSQUxMRUxfVU5LTk9X TjsKKwllbnRyeS0+bG9jYWxfdW5pcXVlX2luZGV4ZXNfY29sbGVjdGVkID0gZmFsc2U7CiAJTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CiB9CiAKQEAgLTM2MSw2ICszODQsMTU0IEBAIGxv Z2ljYWxyZXBfcmVsX21hcmtfdXBkYXRhYmxlKExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqZW50cnkp CiAJfQogfQogCisvKgorICogQ29sbGVjdCBhbGwgbG9jYWwgdW5pcXVlIGluZGV4ZXMgdGhhdCBj YW4gYmUgdXNlZCBmb3IgZGVwZW5kZW5jeSB0cmFja2luZworICoKKyAqIFRoaXMgZnVuY3Rpb24g Y29sbGVjdHMgYWxsIHR5cGVzIG9mIHVuaXF1ZSBpbmRleGVzLCBpbmNsdWRpbmcgdGhvc2Ugd2l0 aAorICogaW5kZXggZXhwcmVzc2lvbnMgYW5kIHBhcnRpYWwgaW5kZXhlcy4gSG93ZXZlciwgdG8g YXZvaWQgdGhlIG92ZXJoZWFkIGFuZAorICogY29tcGxleGl0eSBvZiBleGVjdXRpbmcgZXhwcmVz c2lvbnMsIHdlIGRvIG5vdCBldmFsdWF0ZSB0aGVtIGR1cmluZworICogZGVwZW5kZW5jeSB0cmFj a2luZy4KKyAqCisgKiBGb3IgaW5kZXhlcyB3aXRoIGV4cHJlc3Npb25zLCBvbmx5IHRoZSBub24t ZXhwcmVzc2lvbiBjb2x1bW5zIGFyZSByZWNvcmRlZCBpbgorICogdGhlIGJpdG1hcC4gVGhlIGRl cGVuZGVuY3kgdHJhY2tpbmcgZnVuY3Rpb24gd2lsbCB1c2Ugb25seSB0aGVzZSBjb2x1bW5zLAor ICogd2hpY2ggbWF5IGxlYWQgdG8gZmFsc2UgZGVwZW5kZW5jeSBkZXRlY3Rpb24uIEZvciBleGFt cGxlLCBjb25zaWRlciBhIHVuaXF1ZQorICogaW5kZXggZGVmaW5lZCBhcyBVTklRVUUgKGEsIGZ1 bmMoYikpLCB3aGVyZSBiIGlzIGFuIGV4cHJlc3Npb24gY29sdW1uLiBSb3dzCisgKiAoMSwgMikg YW5kICgxLCAzKSB3aWxsIGJlIHRyZWF0ZWQgYXMgZGVwZW5kZW50IGV2ZW4gdGhvdWdoIHRoZXkg YXJlIG5vdC4gVGhpcworICogaXMgYWNjZXB0YWJsZSwgYXMgaXQgaXMgc3RpbGwgYmV0dGVyIHRo YW4gZGlzYWJsaW5nIHBhcmFsbGVsaXNtIGZvciBhbGwKKyAqIHJlbGF0aW9ucyB0aGF0IGhhdmUg ZXhwcmVzc2lvbiBpbmRleGVzLgorICoKKyAqIFNpbWlsYXJseSwgcGFydGlhbCBpbmRleGVzIG1h eSBhbHNvIGNhdXNlIGZhbHNlIGRlcGVuZGVuY2llcyBkdWUgdG8gcHJlZGljYXRlCisgKiBleHBy ZXNzaW9ucy4gRm9yIHRoZSBzYW1lIHJlYXNvbiwgd2UgY29uc2lkZXIgdGhpcyBhY2NlcHRhYmxl IGFzIHdlbGwuCisgKgorICogVG8gYXZvaWQgcmVkdW5kYW50IGRlcGVuZGVuY3kgdHJhY2tpbmcs IGluZGV4ZXMgd2hvc2Uga2V5IGNvbHVtbnMgYXJlIHRoZQorICogc2FtZSBhcywgb3IgYSBzdXBl cnNldCBvZiwgdGhlIHJlcGxpY2EgaWRlbnRpdHkga2V5IGNvbHVtbnMgYXJlIHNraXBwZWQsCisg KiBzaW5jZSB0cmFja2luZyB0aGUgcmVwbGljYSBpZGVudGl0eSBrZXlzIGFscmVhZHkgY292ZXJz IHRoZWlyIHNjb3BlLgorICoKKyAqIENvbHVtbnMgbm90IGluIHRoZSByZXBsaWNhIGlkZW50aXR5 IGtleSBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgdW5pcXVlIGNvbHVtbgorICogc2V0LiBTaW5jZSB0 aGUgb2xkIHR1cGxlIG9mIGFuIFVQREFURSBvciBERUxFVEUgY29udGFpbnMgb25seSByZXBsaWNh CisgKiBpZGVudGl0eSBrZXkgY29sdW1ucywgYW55IG90aGVyIGNvbHVtbnMgd291bGQgYmUgbWlz c2luZyBhbmQgdGh1cyB1bmF2YWlsYWJsZQorICogZm9yIGRlcGVuZGVuY3kgdHJhY2tpbmcuCisg Ki8KK3N0YXRpYyB2b2lkCitjb2xsZWN0X2luZGV4ZXNfZm9yX2RlcGVuZGVuY3lfdHJhY2tpbmco TG9naWNhbFJlcFJlbE1hcEVudHJ5ICplbnRyeSkKK3sKKwlMaXN0CSAgICppZHhsaXN0OworCisJ ZnJlZV9sb2NhbF91bmlxdWVfaW5kZXhlcyhlbnRyeSk7CisKKwkvKgorCSAqIFhYWCBGb3IgcGFy dGl0aW9uZWQgdGFibGVzLCB3ZSBtdXN0IGNvbGxlY3QgdW5pcXVlIGluZGV4ZXMgZnJvbSBsZWFm CisJICogcGFydGl0aW9ucywgd2hpY2ggYXJlIHRoZSBhY3R1YWwgcmVwbGljYXRpb24gdGFyZ2V0 cy4gVGhpcyBpcyBiZWNhdXNlCisJICogbGVhZiBwYXJ0aXRpb25zIGNhbiBoYXZlIHVuaXF1ZSBp bmRleGVzIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9uIHRoZQorCSAqIHBhcnRpdGlvbmVkIHRhYmxl LCBhbmQgdGhvc2UgaW5kZXhlcyBjYW4gYmUgdXNlZCBmb3IgZGVwZW5kZW5jeSB0cmFja2luZy4K KwkgKiBIb3dldmVyLCBjb2xsZWN0aW5nIHVuaXF1ZSBpbmRleGVzIGZyb20gbGVhZiBwYXJ0aXRp b25zIHJlcXVpcmVzIGJ1aWxkaW5nCisJICogdGhlIHR1cGxlLCBhbmQgZXhlY3V0aW5nIHBhcnRp dGlvbiBwcnVuaW5nIGV4cHJlc3Npb25zLCB3aGljaCBjb3VsZCBiZQorCSAqIGV4cGVuc2l2ZSBm b3IgZWFjaCBjaGFuZ2Ugb24gYSBwYXJ0aXRpb25lZCB0YWJsZS4gRm9yIG5vdywgd2Ugc2tpcAor CSAqIGNvbGxlY3RpbmcgbG9jYWwgdW5pcXVlIGluZGV4ZXMgZm9yIHBhcnRpdGlvbmVkIHRhYmxl cyBhbmQgY3JlYXRlIGEgZHVtbXkKKwkgKiBlbnRyeSwgZW5zdXJpbmcgdGhhdCBjaGFuZ2VzIG9u IHBhcnRpdGlvbmVkIHRhYmxlcyBhcmUgbm90IGFwcGxpZWQgaW4KKwkgKiBwYXJhbGxlbC4KKwkg Ki8KKwlpZiAoZW50cnktPmxvY2FscmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJU SVRJT05FRF9UQUJMRSkKKwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCQlMb2dpY2FsUmVw U3Vic2NyaWJlcklkeCAqaW5kZXhpbmZvOworCisJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhMb2dpY2FsUmVwUmVsTWFwQ29udGV4dCk7CisJCWluZGV4aW5mbyA9IHBhbGxvYyhzaXpl b2YoTG9naWNhbFJlcFN1YnNjcmliZXJJZHgpKTsKKwkJaW5kZXhpbmZvLT5pbmRleG9pZCA9IElu dmFsaWRPaWQ7CisJCWluZGV4aW5mby0+aW5kZXhrZXlzID0gTlVMTDsKKwkJaW5kZXhpbmZvLT5u dWxsc19kaXN0aW5jdCA9IGZhbHNlOworCQllbnRyeS0+bG9jYWxfdW5pcXVlX2luZGV4ZXMgPSBs YXBwZW5kKGVudHJ5LT5sb2NhbF91bmlxdWVfaW5kZXhlcywKKwkJCQkJCQkJCQkJICBpbmRleGlu Zm8pOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKworCQllbnRyeS0+bG9jYWxf dW5pcXVlX2luZGV4ZXNfY29sbGVjdGVkID0gdHJ1ZTsKKworCQlyZXR1cm47CisJfQorCisJaWR4 bGlzdCA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KGVudHJ5LT5sb2NhbHJlbCk7CisKKwkvKiBJdGVy YXRlIGluZGV4ZXMgdG8gbGlzdCBhbGwgdXNhYmxlIGluZGV4ZXMgKi8KKwlmb3JlYWNoX29pZChp ZHhvaWQsIGlkeGxpc3QpCisJeworCQlSZWxhdGlvbglpZHhyZWw7CisJCWludAkJCWluZG5rZXlz OworCQlBdHRyTWFwICAgICphdHRybWFwOworCQlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKwkJTG9n aWNhbFJlcFN1YnNjcmliZXJJZHggKmluZGV4aW5mbzsKKwkJQml0bWFwc2V0ICAqaW5kZXhrZXlz ID0gTlVMTDsKKwkJYm9vbAkJbnVsbHNfZGlzdGluY3Q7CisKKwkJaWR4cmVsID0gaW5kZXhfb3Bl bihpZHhvaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJLyogT25seSB1bmlxdWUgaW5kZXhlcyBh cmUgY29uc2lkZXJlZCAqLworCQlpZiAoIWlkeHJlbC0+cmRfaW5kZXgtPmluZGlzdW5pcXVlKQor CQl7CisJCQlpbmRleF9jbG9zZShpZHhyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQljb250aW51 ZTsKKwkJfQorCisJCWluZG5rZXlzID0gaWR4cmVsLT5yZF9pbmRleC0+aW5kbmtleWF0dHM7CisJ CW51bGxzX2Rpc3RpbmN0ID0gIWlkeHJlbC0+cmRfaW5kZXgtPmluZG51bGxzbm90ZGlzdGluY3Q7 CisJCWF0dHJtYXAgPSBlbnRyeS0+YXR0cm1hcDsKKworCQlBc3NlcnQoaW5kbmtleXMpOworCisJ CS8qIFNlZWsgZWFjaCBhdHRyaWJ1dGVzIGFuZCBhZGQgdG8gYSBCaXRtYXAgKi8KKwkJZm9yIChp bnQgaSA9IDA7IGkgPCBpbmRua2V5czsgaSsrKQorCQl7CisJCQlBdHRyTnVtYmVyCWxvY2FsY29s ID0gaWR4cmVsLT5yZF9pbmRleC0+aW5ka2V5LnZhbHVlc1tpXTsKKwkJCUF0dHJOdW1iZXIJcmVt b3RlY29sOworCisJCQkvKiBTa2lwIGV4cHJlc3Npb24gKi8KKwkJCWlmICghQXR0cmlidXRlTnVt YmVySXNWYWxpZChsb2NhbGNvbCkpCisJCQkJY29udGludWU7CisKKwkJCXJlbW90ZWNvbCA9IGF0 dHJtYXAtPmF0dG51bXNbQXR0ck51bWJlckdldEF0dHJPZmZzZXQobG9jYWxjb2wpXTsKKworCQkJ LyogU2tpcCBpZiB0aGUgY29sdW1uIGRvZXMgbm90IGV4aXN0IG9uIHB1Ymxpc2hlciBub2RlICov CisJCQlpZiAocmVtb3RlY29sIDwgMCkKKwkJCQljb250aW51ZTsKKworCQkJLyogU2tpcCBjb2x1 bW5zIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5IGtleSAqLworCQkJ aWYgKCFibXNfaXNfbWVtYmVyKHJlbW90ZWNvbCwgZW50cnktPnJlbW90ZXJlbC5hdHRrZXlzKSkK KwkJCQljb250aW51ZTsKKworCQkJLyogQ2hlY2tzIGFyZSBwYXNzZWQsIHJlbWVtYmVyIHRoZSBh dHRyaWJ1dGUgKi8KKwkJCWluZGV4a2V5cyA9IGJtc19hZGRfbWVtYmVyKGluZGV4a2V5cywgcmVt b3RlY29sKTsKKwkJfQorCisJCWluZGV4X2Nsb3NlKGlkeHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCQkvKgorCQkgKiBTa2lwIGluZGV4ZXMgd2hvc2Uga2V5IGNvbHVtbnMgYXJlIGEgc3VwZXJz ZXQgb2YgdGhlIHJlcGxpY2EgaWRlbnRpdHkKKwkJICoga2V5LgorCQkgKi8KKwkJaWYgKGJtc19l cXVhbChlbnRyeS0+cmVtb3RlcmVsLmF0dGtleXMsIGluZGV4a2V5cykgfHwKKwkJCWJtc19pc19z dWJzZXQoZW50cnktPnJlbW90ZXJlbC5hdHRrZXlzLCBpbmRleGtleXMpKQorCQl7CisJCQlibXNf ZnJlZShpbmRleGtleXMpOworCQkJY29udGludWU7CisJCX0KKworCQlvbGRjdHggPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8oTG9naWNhbFJlcFJlbE1hcENvbnRleHQpOworCQlpbmRleGluZm8gPSBw YWxsb2Moc2l6ZW9mKExvZ2ljYWxSZXBTdWJzY3JpYmVySWR4KSk7CisJCWluZGV4aW5mby0+aW5k ZXhvaWQgPSBpZHhvaWQ7CisJCWluZGV4aW5mby0+aW5kZXhrZXlzID0gYm1zX2NvcHkoaW5kZXhr ZXlzKTsKKwkJaW5kZXhpbmZvLT5udWxsc19kaXN0aW5jdCA9IG51bGxzX2Rpc3RpbmN0OworCQll bnRyeS0+bG9jYWxfdW5pcXVlX2luZGV4ZXMgPSBsYXBwZW5kKGVudHJ5LT5sb2NhbF91bmlxdWVf aW5kZXhlcywKKwkJCQkJCQkJCQkJICBpbmRleGluZm8pOworCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY3R4KTsKKworCQlibXNfZnJlZShpbmRleGtleXMpOworCX0KKworCWxpc3RfZnJlZShp ZHhsaXN0KTsKKworCWVudHJ5LT5sb2NhbF91bmlxdWVfaW5kZXhlc19jb2xsZWN0ZWQgPSB0cnVl OworfQorCiAvKgogICogQ2hlY2sgYWxsIGxvY2FsIHRyaWdnZXJzIGZvciB0aGUgcmVsYXRpb24g dG8gc2VlIHRoZSBwYXJhbGxlbGl6YWJpbGl0eS4KICAqCkBAIC0zNzAsNyArNTQxLDE2IEBAIGxv Z2ljYWxyZXBfcmVsX21hcmtfdXBkYXRhYmxlKExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqZW50cnkp CiBzdGF0aWMgdm9pZAogY2hlY2tfZGVmaW5lZF90cmlnZ2VycyhMb2dpY2FsUmVwUmVsTWFwRW50 cnkgKmVudHJ5KQogewotCVRyaWdnZXJEZXNjICp0cmlnZGVzYyA9IGVudHJ5LT5sb2NhbHJlbC0+ dHJpZ2Rlc2M7CisJVHJpZ2dlckRlc2MgKnRyaWdkZXNjOworCisJLyoKKwkgKiBTa2lwIGlmIHRo ZSBwYXJhbGxlbGl6YWJpbGl0eSBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQuIFBvc3NpbGJsZSBp ZgorCSAqIHRoZSByZWxhdGlvbiBoYXMgZXhwcmVzc2lvbiBpbmRleGVzLgorCSAqLworCWlmIChl bnRyeS0+cGFyYWxsZWxfc2FmZSAhPSBMT0dJQ0FMUkVQX1BBUkFMTEVMX1VOS05PV04pCisJCXJl dHVybjsKKworCXRyaWdkZXNjID0gZW50cnktPmxvY2FscmVsLT50cmlnZGVzYzsKIAogCS8qIFF1 aWNrIGV4aXQgaWYgdHJpZmZlciBpcyBub3QgZGVmaW5lZCAqLwogCWlmICh0cmlnZGVzYyA9PSBO VUxMKQpAQCAtNDExLDcgKzU5MSw3IEBAIGNoZWNrX2RlZmluZWRfdHJpZ2dlcnMoTG9naWNhbFJl cFJlbE1hcEVudHJ5ICplbnRyeSkKICAqIElmIHRoZSBrZXkgaXMgZ2l2ZW4sIHRoZSBjb3JyZXNw b25kaW5nIGVudHJ5IGlzIGZpcnN0IHNlYXJjaGVkIGluIHRoZSBoYXNoCiAgKiB0YWJsZSBhbmQg cHJvY2Vzc2VkIGFzIGluIHRoZSBhYm92ZSBjYXNlLiBBdCB0aGUgZW5kLCBsb2dpY2FsIHJlcGxp Y2F0aW9uIGlzCiAgKiBjbG9zZWQuCi0gICovCisgKi8KIHZvaWQKIGxvZ2ljYWxyZXBfcmVsX2xv YWQoTG9naWNhbFJlcFJlbE1hcEVudHJ5ICplbnRyeSwgTG9naWNhbFJlcFJlbElkIHJlbW90ZWlk LAogCQkJCQlMT0NLTU9ERSBsb2NrbW9kZSkKQEAgLTQ1NSw2ICs2MzUsNyBAQCBsb2dpY2FscmVw X3JlbF9sb2FkKExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqZW50cnksIExvZ2ljYWxSZXBSZWxJZCBy ZW1vdGVpZCwKIAkJewogCQkJLyogVGFibGUgd2FzIHJlbmFtZWQgb3IgZHJvcHBlZC4gKi8KIAkJ CWVudHJ5LT5sb2NhbHJlbHZhbGlkID0gZmFsc2U7CisJCQllbnRyeS0+bG9jYWxfdW5pcXVlX2lu ZGV4ZXNfY29sbGVjdGVkID0gZmFsc2U7CiAJCX0KIAkJZWxzZSBpZiAoIWVudHJ5LT5sb2NhbHJl bHZhbGlkKQogCQl7CkBAIC01NjUsNyArNzQ2LDExIEBAIGxvZ2ljYWxyZXBfcmVsX2xvYWQoTG9n aWNhbFJlcFJlbE1hcEVudHJ5ICplbnRyeSwgTG9naWNhbFJlcFJlbElkIHJlbW90ZWlkLAogCQkg KiB0cmFja2luZy4KIAkJICovCiAJCWlmIChhbV9sZWFkZXJfYXBwbHlfd29ya2VyKCkpCisJCXsK KwkJCWVudHJ5LT5wYXJhbGxlbF9zYWZlID0gTE9HSUNBTFJFUF9QQVJBTExFTF9VTktOT1dOOwor CQkJY29sbGVjdF9pbmRleGVzX2Zvcl9kZXBlbmRlbmN5X3RyYWNraW5nKGVudHJ5KTsKIAkJCWNo ZWNrX2RlZmluZWRfdHJpZ2dlcnMoZW50cnkpOworCQl9CiAKIAkJZW50cnktPmxvY2FscmVsdmFs aWQgPSB0cnVlOwogCX0KQEAgLTg2Nyw2ICsxMDUyLDEzIEBAIGxvZ2ljYWxyZXBfcGFydGl0aW9u X29wZW4oTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyb290LAogCWVudHJ5LT5sb2NhbGluZGV4b2lk ID0gRmluZExvZ2ljYWxSZXBMb2NhbEluZGV4KHBhcnRyZWwsIHJlbW90ZXJlbCwKIAkJCQkJCQkJ CQkJCQllbnRyeS0+YXR0cm1hcCk7CiAKKwkvKgorCSAqIFRPRE86IFBhcmFsbGVsIGFwcGx5IGNh bm5vdCBjb2xsZWN0IGluZGV4ZXMgZnJvbSBsZWFmIHBhcnRpdGlvbiBmb3Igbm93LgorCSAqIEp1 c3QgbWFyayBsb2NhbCBpbmRleGVzIGFyZSBjb2xsZWN0ZWQuIChTZWUKKwkgKiBjb2xsZWN0X2lu ZGV4ZXNfZm9yX2RlcGVuZGVuY3lfdHJhY2tpbmcoKSBmb3IgZGV0YWlscy4pCisJICovCisJZW50 cnktPmxvY2FsX3VuaXF1ZV9pbmRleGVzX2NvbGxlY3RlZCA9IHRydWU7CisKIAllbnRyeS0+bG9j YWxyZWx2YWxpZCA9IHRydWU7CiAKIAlyZXR1cm4gZW50cnk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC93b3JrZXIuYwppbmRleCA3MTdjZjc0ZjBhYy4uMTdlYWVmMjgwMzkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtNTc4LDEwICs1NzgsMjAg QEAgdHlwZWRlZiBzdHJ1Y3QgQXBwbHlTdWJYYWN0RGF0YQogCiBzdGF0aWMgQXBwbHlTdWJYYWN0 RGF0YSBzdWJ4YWN0X2RhdGEgPSB7MCwgMCwgSW52YWxpZFRyYW5zYWN0aW9uSWQsIE5VTEx9Owog CisvKgorICogVHlwZSBvZiBrZXkgdXNlZCBmb3IgZGVwZW5kZW5jeSB0cmFja2luZy4KKyAqLwor dHlwZWRlZiBlbnVtIExvZ2ljYWxSZXBLZXlLaW5kCit7CisJTE9HSUNBTFJFUF9LRVlfUkVQTElD QV9JREVOVElUWSwKKwlMT0dJQ0FMUkVQX0tFWV9MT0NBTF9VTklRVUUKK30gTG9naWNhbFJlcEtl eUtpbmQ7CisKIC8qIEhhc2ggdGFibGUga2V5IGZvciByZXBsaWNhX2lkZW50aXR5X3RhYmxlICov CiB0eXBlZGVmIHN0cnVjdCBSZXBsaWNhSWRlbnRpdHlLZXkKIHsKIAlPaWQJCQlyZWxpZDsKKwlM b2dpY2FsUmVwS2V5S2luZCBraW5kOwogCUxvZ2ljYWxSZXBUdXBsZURhdGEgKmRhdGE7CiB9IFJl cGxpY2FJZGVudGl0eUtleTsKIApAQCAtNzYxLDcgKzc3MSw4IEBAIHN0YXRpYyBib29sCiBoYXNo X3JlcGxpY2FfaWRlbnRpdHlfY29tcGFyZShSZXBsaWNhSWRlbnRpdHlLZXkgKmEsIFJlcGxpY2FJ ZGVudGl0eUtleSAqYikKIHsKIAlpZiAoYS0+cmVsaWQgIT0gYi0+cmVsaWQgfHwKLQkJYS0+ZGF0 YS0+bmNvbHMgIT0gYi0+ZGF0YS0+bmNvbHMpCisJCWEtPmRhdGEtPm5jb2xzICE9IGItPmRhdGEt Pm5jb2xzIHx8CisJCWEtPmtpbmQgIT0gYi0+a2luZCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJZm9y IChpbnQgaSA9IDA7IGkgPCBhLT5kYXRhLT5uY29sczsgaSsrKQpAQCAtNzY5LDYgKzc4MCw5IEBA IGhhc2hfcmVwbGljYV9pZGVudGl0eV9jb21wYXJlKFJlcGxpY2FJZGVudGl0eUtleSAqYSwgUmVw bGljYUlkZW50aXR5S2V5ICpiKQogCQlpZiAoYS0+ZGF0YS0+Y29sc3RhdHVzW2ldICE9IGItPmRh dGEtPmNvbHN0YXR1c1tpXSkKIAkJCXJldHVybiBmYWxzZTsKIAorCQlpZiAoYS0+ZGF0YS0+Y29s c3RhdHVzW2ldID09IExPR0lDQUxSRVBfQ09MVU1OX05VTEwpCisJCQljb250aW51ZTsKKwogCQlp ZiAoYS0+ZGF0YS0+Y29sdmFsdWVzW2ldLmxlbiAhPSBiLT5kYXRhLT5jb2x2YWx1ZXNbaV0ubGVu KQogCQkJcmV0dXJuIGZhbHNlOwogCkBAIC03ODksOCArODAzLDEyIEBAIGZyZWVfcmVwbGljYV9p ZGVudGl0eV9rZXkoUmVwbGljYUlkZW50aXR5S2V5ICprZXkpCiB7CiAJQXNzZXJ0KGtleSk7CiAK LQlwZnJlZShrZXktPmRhdGEtPmNvbHZhbHVlcyk7Ci0JcGZyZWUoa2V5LT5kYXRhLT5jb2xzdGF0 dXMpOworCWlmIChrZXktPmRhdGEtPmNvbHZhbHVlcykKKwkJcGZyZWUoa2V5LT5kYXRhLT5jb2x2 YWx1ZXMpOworCisJaWYgKGtleS0+ZGF0YS0+Y29sc3RhdHVzKQorCQlwZnJlZShrZXktPmRhdGEt PmNvbHN0YXR1cyk7CisKIAlwZnJlZShrZXktPmRhdGEpOwogCXBmcmVlKGtleSk7CiB9CkBAIC05 MzMsNzEgKzk1MSwxMjQgQEAgYXBwZW5kX3hpZF9kZXBlbmRlbmN5KFRyYW5zYWN0aW9uSWQgeGlk LCBMaXN0ICoqZGVwZW5kc19vbl94aWRzKQogfQogCiAvKgotICogQ2hlY2sgZm9yIGRlcGVuZGVu Y2llcyBvbiBwcmVjZWRpbmcgdHJhbnNhY3Rpb25zIHRoYXQgbW9kaWZ5IHRoZSBzYW1lIGtleSBh cwotICogdGhlIGdpdmVuIHR1cGxlLiBSZXR1cm5zIHRoZSBkZXBlbmRlbnQgdHJhbnNhY3Rpb25z IGluICdkZXBlbmRzX29uX3hpZHMnLgorICogQ29tbW9uIGZ1bmN0aW9uIGZvciBjaGVja2luZyBk ZXBlbmRlbmN5IGJ5IHVzaW5nIHRoZSBrZXkuIFVzZWQgYnkgYm90aAorICogY2hlY2tfYW5kX3Jl Y29yZF9yaV9kZXBlbmRlbmN5IGFuZCBjaGVja19hbmRfcmVjb3JkX2xvY2FsX2tleV9kZXBlbmRl bmN5LgorICoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGtleSBoYXMgYW4gYWN0aXZlIGRl cGVuZGVuY3kuIElmIG5ld19kZXBlbmRlZF94aWQgaXMKKyAqIHZhbGlkLCBhbHNvIHJlY29yZHMg YSBuZXcgZGVwZW5kZW5jeSBmb3IgdGhhdCB0cmFuc2FjdGlvbi4KICAqCi0gKiBBZGRpdGlvbmFs bHksIGlmIG5ld19kZXBlbmRlZF94aWQgaXMgdmFsaWQsIHJlY29yZCB0aGUgY3VycmVudCBjaGFu Z2UgYW5kIHRoZQotICogdHJhbnNhY3Rpb24gYXMgYSBuZXcgZGVwZW5kZW5jeSBmb3IgdGhlIHJl cGxpY2EgaWRlbnRpdHkga2V5IG1vZGlmaWNhdGlvbiwKLSAqIGFsbG93aW5nIHN1YnNlcXVlbnQg dHJhbnNhY3Rpb25zIHRoYXQgbW9kaWZ5IHRoZSBzYW1lIGtleSB0byBiZSBkZXBlbmRlbnQgb24K LSAqIGl0LgorICogUmV0dXJuIHRoZSBleGlzdGluZyB0cmFuc2FjdGlvbiBJRCBpZiBhbiBhY3Rp dmUgZGVwZW5kZW5jeSBleGlzdHMgZm9yIHRoZQorICoga2V5OyBvdGhlcndpc2UgcmV0dXJucyBJ bnZhbGlkVHJhbnNhY3Rpb25JZC4KICAqLwotc3RhdGljIHZvaWQKLWNoZWNrX2FuZF9yZWNvcmRf cmlfZGVwZW5kZW5jeShPaWQgcmVsaWQsIExvZ2ljYWxSZXBUdXBsZURhdGEgKm9yaWdpbmFsX2Rh dGEsCi0JCQkJCQkJICAgVHJhbnNhY3Rpb25JZCBuZXdfZGVwZW5kZWRfeGlkLAotCQkJCQkJCSAg IExpc3QgKipkZXBlbmRzX29uX3hpZHMpCitzdGF0aWMgVHJhbnNhY3Rpb25JZAorY2hlY2tfYW5k X3JlY29yZF9rZXlfZGVwZW5kZW5jeShSZXBsaWNhSWRlbnRpdHlLZXkgKmtleSwKKwkJCQkJCQkJ VHJhbnNhY3Rpb25JZCBuZXdfZGVwZW5kZWRfeGlkKQogewotCUxvZ2ljYWxSZXBSZWxNYXBFbnRy eSAqcmVsZW50cnk7Ci0JTG9naWNhbFJlcFR1cGxlRGF0YSAqcmlkYXRhOwotCVJlcGxpY2FJZGVu dGl0eUtleSAqcmlrZXk7CisJVHJhbnNhY3Rpb25JZCBleGlzdGluZ194aWQgPSBJbnZhbGlkVHJh bnNhY3Rpb25JZDsKIAlSZXBsaWNhSWRlbnRpdHlFbnRyeSAqcmllbnRyeTsKLQlNZW1vcnlDb250 ZXh0IG9sZGN0eDsKLQlpbnQJCQluX3JpOwogCWJvb2wJCWZvdW5kID0gZmFsc2U7CiAKLQlBc3Nl cnQoZGVwZW5kc19vbl94aWRzKTsKKwkvKgorCSAqIFRoZSBuZXcgeGlkIGNvdWxkIGJlIGludmFs aWQgaWYgdGhlIHRyYW5zYWN0aW9uIHdpbGwgYmUgYXBwbGllZCBieSB0aGUKKwkgKiBsZWFkZXIg aXRzZWxmIHdoaWNoIG1lYW5zIGFsbCB0aGUgY2hhbmdlcyB3aWxsIGJlIGNvbW1pdHRlZCBiZWZv cmUKKwkgKiBwcm9jZXNzaW5nIG5leHQgdHJhbnNhY3Rpb24uIEluIHRoaXMgY2FzZSwgd2Ugb25s eSBuZWVkIHRvIGNoZWNrIGZvcgorCSAqIGRlcGVuZGVuY2llcyBvbiBwcmVjZWRpbmcgdHJhbnNh Y3Rpb25zLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlY29yZCBhIG5ldworCSAqIGRlcGVuZGVuY3kg Zm9yIHN1YnNlcXVlbnQgdHJhbnNhY3Rpb25zIHRvIHdhaXQgb24uCisJICovCisJaWYgKCFUcmFu c2FjdGlvbklkSXNWYWxpZChuZXdfZGVwZW5kZWRfeGlkKSkKKwl7CisJCXJpZW50cnkgPSByZXBs aWNhX2lkZW50aXR5X2xvb2t1cChyZXBsaWNhX2lkZW50aXR5X3RhYmxlLCBrZXkpOwogCi0JLyog U2VhcmNoIGZvciBleGlzdGluZyBlbnRyeSAqLwotCXJlbGVudHJ5ID0gbG9naWNhbHJlcF9nZXRf cmVsZW50cnkocmVsaWQpOworCQlpZiAocmllbnRyeSAmJiBoYXNfYWN0aXZlX2tleV9kZXBlbmRl bmN5KHJpZW50cnksIHRydWUpKQorCQl7CisJCQllbG9nKERFQlVHMSwKKwkJCQkga2V5LT5raW5k ID09IExPR0lDQUxSRVBfS0VZX1JFUExJQ0FfSURFTlRJVFkgPworCQkJCSAiZm91bmQgY29uZmxp Y3RpbmcgcmVwbGljYSBpZGVudGl0eSBjaGFuZ2Ugb24gdGFibGUgJXUgZnJvbSAldSIgOgorCQkJ CSAiZm91bmQgY29uZmxpY3RpbmcgbG9jYWwgdW5pcXVlIGtleSBjaGFuZ2Ugb24gdGFibGUgJXUg ZnJvbSAldSIsCisJCQkJIGtleS0+cmVsaWQsIHJpZW50cnktPnJlbW90ZV94aWQpOwogCi0JQXNz ZXJ0KHJlbGVudHJ5KTsKKwkJCWV4aXN0aW5nX3hpZCA9IHJpZW50cnktPnJlbW90ZV94aWQ7CisJ CX0KKworCQlmcmVlX3JlcGxpY2FfaWRlbnRpdHlfa2V5KGtleSk7CisKKwkJcmV0dXJuIGV4aXN0 aW5nX3hpZDsKKwl9CisKKwkvKiBSZWNvcmQgYSBuZXcgZGVwZW5kZW5jeSBmb3Igc3Vic2VxdWVu dCB0cmFuc2FjdGlvbnMgdG8gd2FpdCBvbiAqLworCXJpZW50cnkgPSByZXBsaWNhX2lkZW50aXR5 X2luc2VydChyZXBsaWNhX2lkZW50aXR5X3RhYmxlLCBrZXksCisJCQkJCQkJCQkgICZmb3VuZCk7 CiAKIAkvKgotCSAqIEZpcnN0IGNoZWNrIHdoZXRoZXIgYW55IHByZXZpb3VzIHRyYW5zYWN0aW9u IChvdGhlciB0aGFuIHRoZSBjdXJyZW50IG9uZSkKLQkgKiBoYXMgYWZmZWN0ZWQgdGhlIHdob2xl IHRhYmxlIGUuZy4sIHRydW5jYXRlIG9yIHNjaGVtYSBjaGFuZ2UgZnJvbQotCSAqIHB1Ymxpc2hl ci4KKwkgKiBSZWxlYXNlIHRoZSBrZXkgYnVpbHQgdG8gc2VhcmNoIHRoZSBlbnRyeSwgaWYgdGhl IGVudHJ5IGFscmVhZHkgZXhpc3RzLgogCSAqLwotCWlmIChoYXNfYWN0aXZlX3JlbF9kZXBlbmRl bmN5KHJlbGVudHJ5KSAmJgotCQkhVHJhbnNhY3Rpb25JZEVxdWFscyhyZWxlbnRyeS0+bGFzdF9k ZXBlbmRlZF94aWQsIG5ld19kZXBlbmRlZF94aWQpKQorCWlmIChmb3VuZCkKIAl7Ci0JCWVsb2co REVCVUcxLCAiZm91bmQgdGFibGUtd2lkZSBjaGFuZ2UgYWZmZWN0aW5nICV1IGZyb20gJXUiLAot CQkJIHJlbGlkLCByZWxlbnRyeS0+bGFzdF9kZXBlbmRlZF94aWQpOworCQlpZiAoaGFzX2FjdGl2 ZV9rZXlfZGVwZW5kZW5jeShyaWVudHJ5LCBmYWxzZSkpCisJCXsKKwkJCWVsb2coREVCVUcxLAor CQkJCSBrZXktPmtpbmQgPT0gTE9HSUNBTFJFUF9LRVlfUkVQTElDQV9JREVOVElUWSA/CisJCQkJ ICJmb3VuZCBjb25mbGljdGluZyByZXBsaWNhIGlkZW50aXR5IGNoYW5nZSBvbiB0YWJsZSAldSBm cm9tICV1IiA6CisJCQkJICJmb3VuZCBjb25mbGljdGluZyBsb2NhbCB1bmlxdWUga2V5IGNoYW5n ZSBvbiB0YWJsZSAldSBmcm9tICV1IiwKKwkJCQkga2V5LT5yZWxpZCwgcmllbnRyeS0+cmVtb3Rl X3hpZCk7CiAKLQkJYXBwZW5kX3hpZF9kZXBlbmRlbmN5KHJlbGVudHJ5LT5sYXN0X2RlcGVuZGVk X3hpZCwgZGVwZW5kc19vbl94aWRzKTsKKwkJCWV4aXN0aW5nX3hpZCA9IHJpZW50cnktPnJlbW90 ZV94aWQ7CisJCX0KKworCQlmcmVlX3JlcGxpY2FfaWRlbnRpdHlfa2V5KGtleSk7CiAJfQogCi0J bl9yaSA9IGJtc19udW1fbWVtYmVycyhyZWxlbnRyeS0+cmVtb3RlcmVsLmF0dGtleXMpOworCXJp ZW50cnktPnJlbW90ZV94aWQgPSBuZXdfZGVwZW5kZWRfeGlkOwogCi0JLyoKLQkgKiBSZXR1cm4g aWYgdGhlcmUgYXJlIG5vIHJlcGxpY2EgaWRlbnRpdHkgY29sdW1ucywgaW5kaWNhdGluZyB0aGF0 IHRoZQotCSAqIHJlbW90ZSByZWxhdGlvbiBoYXMgbmVpdGhlciBhIHJlcGxpY2EgaWRlbnRpdHkg a2V5IG5vciBpcyBtYXJrZWQgYXMKLQkgKiByZXBsaWNhIGlkZW50aXR5IGZ1bGwuCi0JICovCi0J aWYgKCFuX3JpKQotCQlyZXR1cm47CisJcmV0dXJuIGV4aXN0aW5nX3hpZDsKK30KIAotCS8qIENo ZWNrIGlmIHRoZSBSSSBrZXkgdmFsdWUgb2YgdGhlIHR1cGxlIGlzIGludmFsaWQgKi8KLQlmb3Ig KGludCBpID0gMDsgaSA8IG9yaWdpbmFsX2RhdGEtPm5jb2xzOyBpKyspCisvKgorICogQ2hlY2sg aWYgYW55IG9mIHRoZSBrZXkgY29sdW1ucyBoYXZlIE5VTEwgdmFsdWVzLgorICovCitzdGF0aWMg Ym9vbAoraGFzX251bGxfa2V5X3ZhbHVlcyhMb2dpY2FsUmVwVHVwbGVEYXRhICpkYXRhLCBCaXRt YXBzZXQgKmluZGV4a2V5cykKK3sKKwlmb3IgKGludCBpID0gMDsgaSA8IGRhdGEtPm5jb2xzOyBp KyspCiAJewotCQlpZiAoIWJtc19pc19tZW1iZXIoaSwgcmVsZW50cnktPnJlbW90ZXJlbC5hdHRr ZXlzKSkKLQkJCWNvbnRpbnVlOworCQlpZiAoYm1zX2lzX21lbWJlcihpLCBpbmRleGtleXMpICYm CisJCQlkYXRhLT5jb2xzdGF0dXNbaV0gPT0gTE9HSUNBTFJFUF9DT0xVTU5fTlVMTCkKKwkJCXJl dHVybiB0cnVlOworCX0KIAotCQkvKgotCQkgKiBOVUxMIGluIHRoZSBuZXcgdHVwbGUgbWVhbnMg dGhlIHJlcGxpY2EgaWRlbnRpdHkga2V5IGhhc24ndCBjaGFuZ2VkLAotCQkgKiBzbyBubyBuZXcg ZGVwZW5kZW5jeSBuZWVkcyB0byBiZSByZWNvcmRlZC4gVGhlIGRlcGVuZGVuY3kgc2hvdWxkIGhh dmUKLQkJICogYmVlbiByZWNvcmRlZCB3aGVuIHByb2Nlc3NpbmcgdGhlIG9sZCB0dXBsZS4KLQkJ ICovCi0JCWlmIChvcmlnaW5hbF9kYXRhLT5jb2xzdGF0dXNbaV0gPT0gTE9HSUNBTFJFUF9DT0xV TU5fTlVMTCkKLQkJCXJldHVybjsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBCdWlsZCBh IGhhc2gga2V5IGZvciByZXBsaWNhX2lkZW50aXR5X3RhYmxlIHVzaW5nIHRoZSBnaXZlbiByZWxh dGlvbiBhbmQKKyAqIHR1cGxlIGRhdGEsIHJlc3RyaWN0ZWQgdG8gdGhlIHNwZWNpZmllZCBrZXkg Y29sdW1ucy4KKyAqLworc3RhdGljIFJlcGxpY2FJZGVudGl0eUtleSAqCitidWlsZF9yZXBsaWNh X2lkZW50aXR5X2tleShPaWQgcmVsaWQsIExvZ2ljYWxSZXBUdXBsZURhdGEgKm9yaWdpbmFsX2Rh dGEsCisJCQkJCQkgICBCaXRtYXBzZXQgKmtleWNvbHMpCit7CisJTG9naWNhbFJlcFR1cGxlRGF0 YSAqa2V5ZGF0YTsKKwlSZXBsaWNhSWRlbnRpdHlLZXkgKmtleTsKKwlNZW1vcnlDb250ZXh0IG9s ZGN0eDsKKwlpbnQJCW5rZXljb2xzID0gYm1zX251bV9tZW1iZXJzKGtleWNvbHMpOworCisJb2xk Y3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisKKwkvKiBBbGxvY2F0 ZSBzcGFjZSBmb3IgcmVwbGljYSBpZGVudGl0eSB2YWx1ZXMgKi8KKwlrZXlkYXRhID0gcGFsbG9j MF9vYmplY3QoTG9naWNhbFJlcFR1cGxlRGF0YSk7CisKKwlpZiAobmtleWNvbHMpCisJeworCQlr ZXlkYXRhLT5jb2x2YWx1ZXMgPSBwYWxsb2MwX2FycmF5KFN0cmluZ0luZm9EYXRhLCBua2V5Y29s cyk7CisJCWtleWRhdGEtPmNvbHN0YXR1cyA9IHBhbGxvYzBfYXJyYXkoY2hhciwgbmtleWNvbHMp OworCX0KKworCWtleWRhdGEtPm5jb2xzID0gbmtleWNvbHM7CisKKwlmb3IgKGludCBpID0gMCwg aV9rZXkgPSAwOyBpIDwgb3JpZ2luYWxfZGF0YS0+bmNvbHM7IGkrKykKKwl7CisJCWlmICghYm1z X2lzX21lbWJlcihpLCBrZXljb2xzKSkKKwkJCWNvbnRpbnVlOwogCiAJCS8qCiAJCSAqIExPR0lD QUxSRVBfQ09MVU1OX1VOQ0hBTkdFRCBvbmx5IGluZGljYXRlcyB0aGF0IGEgVE9BU1QgY29sdW1u IGluIHRoZQpAQCAtMTAxMSw4NSArMTA4MiwxODQgQEAgY2hlY2tfYW5kX3JlY29yZF9yaV9kZXBl bmRlbmN5KE9pZCByZWxpZCwgTG9naWNhbFJlcFR1cGxlRGF0YSAqb3JpZ2luYWxfZGF0YSwKIAkJ ICovCiAJCUFzc2VydChvcmlnaW5hbF9kYXRhLT5jb2xzdGF0dXNbaV0gIT0gTE9HSUNBTFJFUF9D T0xVTU5fVU5DSEFOR0VEIHx8CiAJCQkgICBvcmlnaW5hbF9kYXRhLT5jb2x2YWx1ZXNbaV0ubGVu ID4gMCk7CisKKwkJaWYgKG9yaWdpbmFsX2RhdGEtPmNvbHN0YXR1c1tpXSAhPSBMT0dJQ0FMUkVQ X0NPTFVNTl9OVUxMKQorCQl7CisJCQlTdHJpbmdJbmZvCW9yaWdpbmFsX2NvbHZhbHVlID0gJm9y aWdpbmFsX2RhdGEtPmNvbHZhbHVlc1tpXTsKKworCQkJaW5pdFN0cmluZ0luZm9FeHQoJmtleWRh dGEtPmNvbHZhbHVlc1tpX2tleV0sIG9yaWdpbmFsX2NvbHZhbHVlLT5sZW4gKyAxKTsKKwkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmtleWRhdGEtPmNvbHZhbHVlc1tpX2tleV0sIG9yaWdpbmFs X2NvbHZhbHVlLT5kYXRhKTsKKwkJfQorCisJCWtleWRhdGEtPmNvbHN0YXR1c1tpX2tleV0gPSBv cmlnaW5hbF9kYXRhLT5jb2xzdGF0dXNbaV07CisJCWlfa2V5Kys7CiAJfQogCi0Jb2xkY3R4ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisJa2V5ID0gcGFsbG9jMF9vYmpl Y3QoUmVwbGljYUlkZW50aXR5S2V5KTsKKwlrZXktPnJlbGlkID0gcmVsaWQ7CisJa2V5LT5kYXRh ID0ga2V5ZGF0YTsKIAotCS8qIEFsbG9jYXRlIHNwYWNlIGZvciByZXBsaWNhIGlkZW50aXR5IHZh bHVlcyAqLwotCXJpZGF0YSA9IHBhbGxvYzBfb2JqZWN0KExvZ2ljYWxSZXBUdXBsZURhdGEpOwot CXJpZGF0YS0+Y29sdmFsdWVzID0gcGFsbG9jMF9hcnJheShTdHJpbmdJbmZvRGF0YSwgbl9yaSk7 Ci0JcmlkYXRhLT5jb2xzdGF0dXMgPSBwYWxsb2MwX2FycmF5KGNoYXIsIG5fcmkpOwotCXJpZGF0 YS0+bmNvbHMgPSBuX3JpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOwogCi0JZm9y IChpbnQgaV9vcmlnaW5hbCA9IDAsIGlfcmkgPSAwOyBpX29yaWdpbmFsIDwgb3JpZ2luYWxfZGF0 YS0+bmNvbHM7IGlfb3JpZ2luYWwrKykKLQl7Ci0JCVN0cmluZ0luZm8Jb3JpZ2luYWxfY29sdmFs dWUgPSAmb3JpZ2luYWxfZGF0YS0+Y29sdmFsdWVzW2lfb3JpZ2luYWxdOworCXJldHVybiBrZXk7 Cit9CiAKLQkJaWYgKCFibXNfaXNfbWVtYmVyKGlfb3JpZ2luYWwsIHJlbGVudHJ5LT5yZW1vdGVy ZWwuYXR0a2V5cykpCi0JCQljb250aW51ZTsKKy8qCisgKiBNb3N0bHkgc2FtZSBhcyBjaGVja19h bmRfcmVjb3JkX3JpX2RlcGVuZGVuY3koKSBidXQgZm9yIGxvY2FsIHVuaXF1ZSBpbmRleGVzLgor ICoKKyAqIFNlZSB0aGUgY29tbWVudHMgaW4gYXBwbHlwYXJhbGxlbHdvcmtlci5jIGZvciBkZXRh aWxzIG9uIHdoeSB0cmFja2luZyB0aGVzZQorICogZGVwZW5kZW5jaWVzIGlzIG5lY2Vzc2FyeS4K KyAqLworc3RhdGljIHZvaWQKK2NoZWNrX2FuZF9yZWNvcmRfbG9jYWxfa2V5X2RlcGVuZGVuY3ko T2lkIHJlbGlkLAorCQkJCQkJCQkJICBMb2dpY2FsUmVwVHVwbGVEYXRhICpvcmlnaW5hbF9kYXRh LAorCQkJCQkJCQkJICBib29sIG9sZF90dXBsZSwKKwkJCQkJCQkJCSAgVHJhbnNhY3Rpb25JZCBu ZXdfZGVwZW5kZWRfeGlkLAorCQkJCQkJCQkJICBMaXN0ICoqZGVwZW5kc19vbl94aWRzKQorewor CUxvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqcmVsZW50cnk7CisJUmVwbGljYUlkZW50aXR5S2V5ICpy aWtleTsKIAotCQlpbml0U3RyaW5nSW5mb0V4dCgmcmlkYXRhLT5jb2x2YWx1ZXNbaV9yaV0sIG9y aWdpbmFsX2NvbHZhbHVlLT5sZW4gKyAxKTsKLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcmlk YXRhLT5jb2x2YWx1ZXNbaV9yaV0sIG9yaWdpbmFsX2NvbHZhbHVlLT5kYXRhKTsKLQkJcmlkYXRh LT5jb2xzdGF0dXNbaV9yaV0gPSBvcmlnaW5hbF9kYXRhLT5jb2xzdGF0dXNbaV9vcmlnaW5hbF07 Ci0JCWlfcmkrKzsKLQl9CisJQXNzZXJ0KGRlcGVuZHNfb25feGlkcyk7CiAKLQlyaWtleSA9IHBh bGxvYzBfb2JqZWN0KFJlcGxpY2FJZGVudGl0eUtleSk7Ci0JcmlrZXktPnJlbGlkID0gcmVsaWQ7 Ci0JcmlrZXktPmRhdGEgPSByaWRhdGE7CisJLyogU2VhcmNoIGZvciBleGlzdGluZyBlbnRyeSAq LworCXJlbGVudHJ5ID0gbG9naWNhbHJlcF9nZXRfcmVsZW50cnkocmVsaWQpOwogCi0JTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisJQXNzZXJ0KHJlbGVudHJ5KTsKIAogCS8qCi0JICog VGhlIG5ldyB4aWQgY291bGQgYmUgaW52YWxpZCBpZiB0aGUgdHJhbnNhY3Rpb24gd2lsbCBiZSBh cHBsaWVkIGJ5IHRoZQotCSAqIGxlYWRlciBpdHNlbGYgd2hpY2ggbWVhbnMgYWxsIHRoZSBjaGFu Z2VzIHdpbGwgYmUgY29tbWl0dGVkIGJlZm9yZQotCSAqIHByb2Nlc3NpbmcgbmV4dCB0cmFuc2Fj dGlvbi4gSW4gdGhpcyBjYXNlLCB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgZm9yCi0JICogZGVwZW5k ZW5jaWVzIG9uIHByZWNlZGluZyB0cmFuc2FjdGlvbnMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVj b3JkIGEgbmV3Ci0JICogZGVwZW5kZW5jeSBmb3Igc3Vic2VxdWVudCB0cmFuc2FjdGlvbnMgdG8g d2FpdCBvbi4KKwkgKiBHYXRoZXIgaW5mb3JtYXRpb24gZm9yIGxvY2FsIGluZGV4ZXMgaWYgbm90 IHlldC4gV2UgcmVxdWlyZSB0byBiZSBpbiBhCisJICogdHJhbnNhY3Rpb24gc3RhdGUgYmVjYXVz ZSBzeXN0ZW0gY2F0YWxvZ3MgYXJlIHJlYWQuCiAJICovCi0JaWYgKCFUcmFuc2FjdGlvbklkSXNW YWxpZChuZXdfZGVwZW5kZWRfeGlkKSkKKwlpZiAoIXJlbGVudHJ5LT5sb2NhbF91bmlxdWVfaW5k ZXhlc19jb2xsZWN0ZWQpCiAJewotCQlyaWVudHJ5ID0gcmVwbGljYV9pZGVudGl0eV9sb29rdXAo cmVwbGljYV9pZGVudGl0eV90YWJsZSwgcmlrZXkpOwotCQlmcmVlX3JlcGxpY2FfaWRlbnRpdHlf a2V5KHJpa2V5KTsKKwkJYm9vbAkJbmVlZHNfc3RhcnQgPSAhSXNUcmFuc2FjdGlvbk9yVHJhbnNh Y3Rpb25CbG9jaygpOwogCi0JCWlmIChyaWVudHJ5ICYmIGhhc19hY3RpdmVfa2V5X2RlcGVuZGVu Y3kocmllbnRyeSwgdHJ1ZSkpCi0JCXsKLQkJCWVsb2coREVCVUcxLCAiZm91bmQgY29uZmxpY3Rp bmcgcmVwbGljYSBpZGVudGl0eSBjaGFuZ2Ugb24gdGFibGUgJXUgZnJvbSAldSIsCi0JCQkJIHJl bGlkLCByaWVudHJ5LT5yZW1vdGVfeGlkKTsKKwkJaWYgKG5lZWRzX3N0YXJ0KQorCQkJU3RhcnRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKIAotCQkJYXBwZW5kX3hpZF9kZXBlbmRlbmN5KHJpZW50cnkt PnJlbW90ZV94aWQsIGRlcGVuZHNfb25feGlkcyk7Ci0JCX0KKwkJbG9naWNhbHJlcF9yZWxfbG9h ZChOVUxMLCByZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAotCQlyZXR1cm47Ci0JfQorCQlpZiAo bmVlZHNfc3RhcnQpCisJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAotCS8qIFJlY29y ZCBhIG5ldyBkZXBlbmRlbmN5IGZvciBzdWJzZXF1ZW50IHRyYW5zYWN0aW9ucyB0byB3YWl0IG9u ICovCi0JcmllbnRyeSA9IHJlcGxpY2FfaWRlbnRpdHlfaW5zZXJ0KHJlcGxpY2FfaWRlbnRpdHlf dGFibGUsIHJpa2V5LAotCQkJCQkJCQkJICAmZm91bmQpOworCQlBc3NlcnQocmVsZW50cnktPmxv Y2FsX3VuaXF1ZV9pbmRleGVzX2NvbGxlY3RlZCk7CisJfQogCi0JLyoKLQkgKiBSZWxlYXNlIHRo ZSBrZXkgYnVpbHQgdG8gc2VhcmNoIHRoZSBlbnRyeSwgaWYgdGhlIGVudHJ5IGFscmVhZHkgZXhp c3RzLgotCSAqLwotCWlmIChmb3VuZCkKKwlmb3JlYWNoX3B0cihMb2dpY2FsUmVwU3Vic2NyaWJl cklkeCwgaWR4aW5mbywgcmVsZW50cnktPmxvY2FsX3VuaXF1ZV9pbmRleGVzKQogCXsKLQkJZnJl ZV9yZXBsaWNhX2lkZW50aXR5X2tleShyaWtleSk7CisJCS8qCisJCSAqIE5VTEwgdmFsdWVzIGlu IHRoZSBuZXcgdHVwbGUgcmVwcmVzZW50IHRydWUgTlVMTHMgaW4gYSB1bmlxdWUgaW5kZXguCisJ CSAqIElmIE5VTExzIGFyZSB0cmVhdGVkIGFzIGRpc3RpbmN0IChudWxsc19kaXN0aW5jdCA9IHRy dWUpLCB0aGV5IG5ldmVyCisJCSAqIGNhdXNlIGNvbmZsaWN0cy4gVGhlcmVmb3JlLCB3ZSBjYW4g c2tpcCBkZXBlbmRlbmN5IGNoZWNraW5nIGlmIGFueQorCQkgKiBrZXkgY29sdW1uIGlzIE5VTEwg aW4gdGhpcyBjYXNlLgorCQkgKgorCQkgKiBIb3dldmVyLCBmb3Igb2xkIHR1cGxlcyBpbiBVUERB VEUgb3IgREVMRVRFIG9wZXJhdGlvbnMsIGEgTlVMTCBrZXkKKwkJICogc2ltcGx5IGluZGljYXRl IHRoZSBjb2x1bW4gbGllcyBvdXRzaWRlIHRoZSByZXBsaWNhIGlkZW50aXR5IGtleQorCQkgKiBy YXRoZXIgdGhhbiBhIHRydWUgTlVMTC4gSW4gc3VjaCBjYXNlcywgdGhlIHJlbW90ZSBvbGQgdHVw bGUgY291bGQKKwkJICogc3RpbGwgY29uZmxpY3Qgd2l0aCBhIGxvY2FsIHR1cGxlLCBzbyB3ZSBt dXN0IG5vdCBza2lwIHRoZSBjaGVjay4KKwkJICovCisJCWlmICghb2xkX3R1cGxlICYmIGlkeGlu Zm8tPm51bGxzX2Rpc3RpbmN0ICYmCisJCQloYXNfbnVsbF9rZXlfdmFsdWVzKG9yaWdpbmFsX2Rh dGEsIGlkeGluZm8tPmluZGV4a2V5cykpCisJCQljb250aW51ZTsKIAogCQkvKgotCQkgKiBBcHBl bmQgdGhlIGRlcGVuZGVuY3kgdG8gdGhlIGxpc3QgaWYgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24g d2FzIG5vdAotCQkgKiB0aGUgbGFzdGVzdCBvbmUgdG8gbW9kaWZ5IHRoZSBrZXkuCisJCSAqIE9s ZCB0dXBsZXMgb2YgdW5pcXVlIGtleXMgZG8gbm90IGNvbmZsaWN0IHdpdGggYW55IHByZWNlZGlu ZworCQkgKiB0cmFuc2FjdGlvbiAoc2VlIHRoZSBjb21tZW50cyBpbiBhcHBseXBhcmFsbGVsd29y a2VyLmMgZm9yIGRldGFpbHMgb24KKwkJICogY29uZmxpY3RpbmcgY2FzZXMpLiBXaGVuIHdlIGRv bid0IG5lZWQgdG8gcmVjb3JkIGEgbmV3IGRlcGVuZGVuY3ksIHdlCisJCSAqIGNhbiBza2lwIHBy b2Nlc3NpbmcgdGhpcyBpbmRleCBlbnRpcmVseS4KIAkJICovCi0JCWlmIChoYXNfYWN0aXZlX2tl eV9kZXBlbmRlbmN5KHJpZW50cnksIGZhbHNlKSAmJgotCQkJIVRyYW5zYWN0aW9uSWRFcXVhbHMo cmllbnRyeS0+cmVtb3RlX3hpZCwgbmV3X2RlcGVuZGVkX3hpZCkpCisJCWlmIChvbGRfdHVwbGUg JiYgIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKG5ld19kZXBlbmRlZF94aWQpKQorCQkJY29udGludWU7 CisKKwkJcmlrZXkgPSBidWlsZF9yZXBsaWNhX2lkZW50aXR5X2tleShyZWxpZCwgb3JpZ2luYWxf ZGF0YSwgaWR4aW5mby0+aW5kZXhrZXlzKTsKKwkJcmlrZXktPmtpbmQgPSBMT0dJQ0FMUkVQX0tF WV9MT0NBTF9VTklRVUU7CisKKwkJLyoKKwkJICogRm9yIG9sZCB0dXBsZXMsIHJlY29yZCBhIGRl cGVuZGVuY3kgZm9yIHN1YnNlcXVlbnQgdHJhbnNhY3Rpb25zIHRvCisJCSAqIHdhaXQgb247IG5v IHByZWNlZGluZyB0cmFuc2FjdGlvbnMgYXJlIGFkZGVkIHRvIHRoZSBsaXN0LgorCQkgKgorCQkg KiBGb3IgbmV3IHR1cGxlcyBpbiBJTlNFUlQgb3IgVVBEQVRFLCBjaGVjayBmb3IgZXhpc3Rpbmcg a2V5CisJCSAqIGRlcGVuZGVuY2llcyBhbmQgYWRkIGFueSBkZXBlbmRlbnQgdHJhbnNhY3Rpb25z IHRvIHRoZSBsaXN0LgorCQkgKi8KKwkJaWYgKG9sZF90dXBsZSkKKwkJeworCQkJKHZvaWQpIGNo ZWNrX2FuZF9yZWNvcmRfa2V5X2RlcGVuZGVuY3kocmlrZXksIG5ld19kZXBlbmRlZF94aWQpOwor CQl9CisJCWVsc2UKIAkJewotCQkJZWxvZyhERUJVRzEsICJmb3VuZCBjb25mbGljdGluZyByZXBs aWNhIGlkZW50aXR5IGNoYW5nZSBvbiB0YWJsZSAldSBmcm9tICV1IiwKLQkJCQkgcmVsaWQsIHJp ZW50cnktPnJlbW90ZV94aWQpOworCQkJVHJhbnNhY3Rpb25JZAl4aWQ7CiAKLQkJCWFwcGVuZF94 aWRfZGVwZW5kZW5jeShyaWVudHJ5LT5yZW1vdGVfeGlkLCBkZXBlbmRzX29uX3hpZHMpOworCQkJ eGlkID0gY2hlY2tfYW5kX3JlY29yZF9rZXlfZGVwZW5kZW5jeShyaWtleSwgSW52YWxpZFRyYW5z YWN0aW9uSWQpOworCisJCQlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSAmJgorCQkJCSFU cmFuc2FjdGlvbklkRXF1YWxzKHhpZCwgbmV3X2RlcGVuZGVkX3hpZCkpCisJCQkJYXBwZW5kX3hp ZF9kZXBlbmRlbmN5KHhpZCwgZGVwZW5kc19vbl94aWRzKTsKIAkJfQogCX0KK30KIAotCS8qIFVw ZGF0ZSB0aGUgbmV3IGRlcGVuZGVkIHhpZCBpbnRvIHRoZSBlbnRyeSAqLwotCXJpZW50cnktPnJl bW90ZV94aWQgPSBuZXdfZGVwZW5kZWRfeGlkOworLyoKKyAqIENoZWNrIGZvciBkZXBlbmRlbmNp ZXMgb24gcHJlY2VkaW5nIHRyYW5zYWN0aW9ucyB0aGF0IG1vZGlmeSB0aGUgc2FtZSBrZXkuCisg KiBSZXR1cm5zIHRoZSBkZXBlbmRlbnQgdHJhbnNhY3Rpb25zIGluICdkZXBlbmRzX29uX3hpZHMn LgorICoKKyAqIEFkZGl0aW9uYWxseSwgaWYgbmV3X2RlcGVuZGVkX3hpZCBpcyB2YWxpZCwgcmVj b3JkIGl0IGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhlCisgKiByZXBsaWNhIGlkZW50aXR5IGtleSBt b2RpZmljYXRpb24sIGFsbG93aW5nIHN1YnNlcXVlbnQgdHJhbnNhY3Rpb25zIHRoYXQKKyAqIG1v ZGlmeSB0aGUgc2FtZSBrZXkgdG8gYmUgZGVwZW5kZW50IG9uIGl0LgorICovCitzdGF0aWMgdm9p ZAorY2hlY2tfYW5kX3JlY29yZF9yaV9kZXBlbmRlbmN5KE9pZCByZWxpZCwgTG9naWNhbFJlcFR1 cGxlRGF0YSAqb3JpZ2luYWxfZGF0YSwKKwkJCQkJCQkgICBUcmFuc2FjdGlvbklkIG5ld19kZXBl bmRlZF94aWQsCisJCQkJCQkJICAgTGlzdCAqKmRlcGVuZHNfb25feGlkcykKK3sKKwlMb2dpY2Fs UmVwUmVsTWFwRW50cnkgKnJlbGVudHJ5OworCVJlcGxpY2FJZGVudGl0eUtleSAqcmlrZXk7CisJ VHJhbnNhY3Rpb25JZCB4aWQ7CisKKwlBc3NlcnQoZGVwZW5kc19vbl94aWRzKTsKKworCS8qIFNl YXJjaCBmb3IgZXhpc3RpbmcgZW50cnkgKi8KKwlyZWxlbnRyeSA9IGxvZ2ljYWxyZXBfZ2V0X3Jl bGVudHJ5KHJlbGlkKTsKKworCUFzc2VydChyZWxlbnRyeSk7CisKKwkvKgorCSAqIEZpcnN0IGNo ZWNrIHdoZXRoZXIgYW55IHByZXZpb3VzIHRyYW5zYWN0aW9uIChvdGhlciB0aGFuIHRoZSBjdXJy ZW50IG9uZSkKKwkgKiBoYXMgYWZmZWN0ZWQgdGhlIHdob2xlIHRhYmxlIGUuZy4sIHRydW5jYXRl IG9yIHNjaGVtYSBjaGFuZ2UgZnJvbQorCSAqIHB1Ymxpc2hlci4KKwkgKi8KKwlpZiAoaGFzX2Fj dGl2ZV9yZWxfZGVwZW5kZW5jeShyZWxlbnRyeSkgJiYKKwkJIVRyYW5zYWN0aW9uSWRFcXVhbHMo cmVsZW50cnktPmxhc3RfZGVwZW5kZWRfeGlkLCBuZXdfZGVwZW5kZWRfeGlkKSkKKwkJYXBwZW5k X3hpZF9kZXBlbmRlbmN5KHJlbGVudHJ5LT5sYXN0X2RlcGVuZGVkX3hpZCwgZGVwZW5kc19vbl94 aWRzKTsKKworCS8qCisJICogUmV0dXJuIGlmIHRoZXJlIGFyZSBubyByZXBsaWNhIGlkZW50aXR5 IGNvbHVtbnMsIGluZGljYXRpbmcgdGhhdCB0aGUKKwkgKiByZW1vdGUgcmVsYXRpb24gaGFzIG5l aXRoZXIgYSByZXBsaWNhIGlkZW50aXR5IGtleSBub3IgaXMgbWFya2VkIGFzCisJICogcmVwbGlj YSBpZGVudGl0eSBmdWxsLgorCSAqLworCWlmICghYm1zX251bV9tZW1iZXJzKHJlbGVudHJ5LT5y ZW1vdGVyZWwuYXR0a2V5cykpCisJCXJldHVybjsKKworCS8qCisJICogTlVMTCBpbiB0aGUgbmV3 IHR1cGxlIG1lYW5zIHRoZSByZXBsaWNhIGlkZW50aXR5IGtleSBoYXNuJ3QgY2hhbmdlZCwgc28K KwkgKiBubyBuZXcgZGVwZW5kZW5jeSBuZWVkcyB0byBiZSByZWNvcmRlZC4gVGhlIGRlcGVuZGVu Y3kgc2hvdWxkIGhhdmUgYmVlbgorCSAqIHJlY29yZGVkIHdoZW4gcHJvY2Vzc2luZyB0aGUgb2xk IHR1cGxlLgorCSAqLworCWlmIChoYXNfbnVsbF9rZXlfdmFsdWVzKG9yaWdpbmFsX2RhdGEsIHJl bGVudHJ5LT5yZW1vdGVyZWwuYXR0a2V5cykpCisJCXJldHVybjsKKworCXJpa2V5ID0gYnVpbGRf cmVwbGljYV9pZGVudGl0eV9rZXkocmVsaWQsIG9yaWdpbmFsX2RhdGEsIHJlbGVudHJ5LT5yZW1v dGVyZWwuYXR0a2V5cyk7CisJcmlrZXktPmtpbmQgPSBMT0dJQ0FMUkVQX0tFWV9SRVBMSUNBX0lE RU5USVRZOworCisJeGlkID0gY2hlY2tfYW5kX3JlY29yZF9rZXlfZGVwZW5kZW5jeShyaWtleSwg bmV3X2RlcGVuZGVkX3hpZCk7CisKKwkvKgorCSAqIEFwcGVuZCB0aGUgZGVwZW5kZW5jeSB0byB0 aGUgbGlzdCBpZiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB3YXMgbm90IHRoZQorCSAqIGxhc3Rl c3Qgb25lIHRvIG1vZGlmeSB0aGUga2V5LgorCSAqLworCWlmIChUcmFuc2FjdGlvbklkSXNWYWxp ZCh4aWQpICYmCisJCSFUcmFuc2FjdGlvbklkRXF1YWxzKHhpZCwgbmV3X2RlcGVuZGVkX3hpZCkp CisJCWFwcGVuZF94aWRfZGVwZW5kZW5jeSh4aWQsIGRlcGVuZHNfb25feGlkcyk7CiB9CiAKIC8q CkBAIC0xMjkxLDYgKzE0NjEsOSBAQCBoYW5kbGVfZGVwZW5kZW5jeV9vbl9jaGFuZ2UoTG9naWNh bFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJbmZvIHMsCiAJCQlyZWxpZCA9IGxvZ2ljYWxyZXBf cmVhZF9pbnNlcnQoJmNoYW5nZSwgJm5ld3R1cCk7CiAJCQljaGVja19hbmRfcmVjb3JkX3JpX2Rl cGVuZGVuY3kocmVsaWQsICZuZXd0dXAsIG5ld19kZXBlbmRlZF94aWQsCiAJCQkJCQkJCQkJICAg JmRlcGVuZHNfb25feGlkcyk7CisJCQljaGVja19hbmRfcmVjb3JkX2xvY2FsX2tleV9kZXBlbmRl bmN5KHJlbGlkLCAmbmV3dHVwLCBmYWxzZSwKKwkJCQkJCQkJCQkJCSAgbmV3X2RlcGVuZGVkX3hp ZCwKKwkJCQkJCQkJCQkJCSAgJmRlcGVuZHNfb25feGlkcyk7CiAJCQljaGVja19kZXBlbmRlbmN5 X2Zvcl9wYXJhbGxlbF9zYWZldHkocmVsaWQsIG5ld19kZXBlbmRlZF94aWQsCiAJCQkJCQkJCQkJ CQkgJmRlcGVuZHNfb25feGlkcyk7CiAJCQlicmVhazsKQEAgLTEzMDQsNiArMTQ3NywxMCBAQCBo YW5kbGVfZGVwZW5kZW5jeV9vbl9jaGFuZ2UoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJp bmdJbmZvIHMsCiAJCQkJY2hlY2tfYW5kX3JlY29yZF9yaV9kZXBlbmRlbmN5KHJlbGlkLCAmb2xk dHVwLCBuZXdfZGVwZW5kZWRfeGlkLAogCQkJCQkJCQkJCQkgICAmZGVwZW5kc19vbl94aWRzKTsK IAorCQkJCWNoZWNrX2FuZF9yZWNvcmRfbG9jYWxfa2V5X2RlcGVuZGVuY3kocmVsaWQsICZvbGR0 dXAsIHRydWUsCisJCQkJCQkJCQkJCQkJICBuZXdfZGVwZW5kZWRfeGlkLAorCQkJCQkJCQkJCQkJ CSAgJmRlcGVuZHNfb25feGlkcyk7CisKIAkJCQljaGVja19kZXBlbmRlbmN5X2Zvcl9wYXJhbGxl bF9zYWZldHkocmVsaWQsIG5ld19kZXBlbmRlZF94aWQsCiAJCQkJCQkJCQkJCQkJICZkZXBlbmRz X29uX3hpZHMpOwogCkBAIC0xMzI1LDYgKzE1MDIsOSBAQCBoYW5kbGVfZGVwZW5kZW5jeV9vbl9j aGFuZ2UoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJbmZvIHMsCiAKIAkJCWNoZWNr X2FuZF9yZWNvcmRfcmlfZGVwZW5kZW5jeShyZWxpZCwgJm5ld3R1cCwgbmV3X2RlcGVuZGVkX3hp ZCwKIAkJCQkJCQkJCQkgICAmZGVwZW5kc19vbl94aWRzKTsKKwkJCWNoZWNrX2FuZF9yZWNvcmRf bG9jYWxfa2V5X2RlcGVuZGVuY3kocmVsaWQsICZuZXd0dXAsIGZhbHNlLAorCQkJCQkJCQkJCQkJ ICBuZXdfZGVwZW5kZWRfeGlkLAorCQkJCQkJCQkJCQkJICAmZGVwZW5kc19vbl94aWRzKTsKIAkJ CWNoZWNrX2RlcGVuZGVuY3lfZm9yX3BhcmFsbGVsX3NhZmV0eShyZWxpZCwgbmV3X2RlcGVuZGVk X3hpZCwKIAkJCQkJCQkJCQkJCSAmZGVwZW5kc19vbl94aWRzKTsKIAkJCWJyZWFrOwpAQCAtMTMz Myw2ICsxNTEzLDkgQEAgaGFuZGxlX2RlcGVuZGVuY3lfb25fY2hhbmdlKExvZ2ljYWxSZXBNc2dU eXBlIGFjdGlvbiwgU3RyaW5nSW5mbyBzLAogCQkJcmVsaWQgPSBsb2dpY2FscmVwX3JlYWRfZGVs ZXRlKCZjaGFuZ2UsICZvbGR0dXApOwogCQkJY2hlY2tfYW5kX3JlY29yZF9yaV9kZXBlbmRlbmN5 KHJlbGlkLCAmb2xkdHVwLCBuZXdfZGVwZW5kZWRfeGlkLAogCQkJCQkJCQkJCSAgICZkZXBlbmRz X29uX3hpZHMpOworCQkJY2hlY2tfYW5kX3JlY29yZF9sb2NhbF9rZXlfZGVwZW5kZW5jeShyZWxp ZCwgJm9sZHR1cCwgdHJ1ZSwKKwkJCQkJCQkJCQkJCSAgbmV3X2RlcGVuZGVkX3hpZCwKKwkJCQkJ CQkJCQkJCSAgJmRlcGVuZHNfb25feGlkcyk7CiAJCQljaGVja19kZXBlbmRlbmN5X2Zvcl9wYXJh bGxlbF9zYWZldHkocmVsaWQsIG5ld19kZXBlbmRlZF94aWQsCiAJCQkJCQkJCQkJCQkgJmRlcGVu ZHNfb25feGlkcyk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9kZWFkbG9jay5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2RlYWRsb2NrLmMKaW5k ZXggYjg5NjJkODc1YjYuLjMxYmJmY2YxOTcxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvZGVhZGxvY2suYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvZGVhZGxv Y2suYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY251bWJlci5oIgog I2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKLQogLyoKICAqIE9uZSBlZGdlIGluIHRoZSB3 YWl0cy1mb3IgZ3JhcGguCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHJlbGF0aW9uLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRp b24uaAppbmRleCBiMTA3OWQzZjJmYS4uZmUzODg2MmIzMDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxyZWxhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL2xvZ2ljYWxyZWxhdGlvbi5oCkBAIC00Niw2ICs0NiwxMCBAQCB0eXBlZGVmIHN0cnVj dCBMb2dpY2FsUmVwUmVsTWFwRW50cnkKIAkgKi8KIAlUcmFuc2FjdGlvbklkIGxhc3RfZGVwZW5k ZWRfeGlkOwogCisJLyogTG9jYWwgdW5pcXVlIGluZGV4ZXMuIFVzZWQgZm9yIGRlcGVuZGVuY3kg dHJhY2tpbmcgKi8KKwlMaXN0CSAgICpsb2NhbF91bmlxdWVfaW5kZXhlczsKKwlib29sCQlsb2Nh bF91bmlxdWVfaW5kZXhlc19jb2xsZWN0ZWQ7CisKIAkvKgogCSAqIFdoZXRoZXIgdGhlIHJlbGF0 aW9uIGNhbiBiZSBhcHBsaWVkIGluIHBhcmFsbGVsIG9yIG5vdC4gSXQgaXMKIAkgKiBkaXN0aW5n bGlzaCB3aGV0aGVyIGRlZmluZWQgdHJpZ2dlcnMgYXJlIHRoZSBpbW11dGFibGUgb3Igbm90LgpA QCAtNjEsNiArNjUsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFJlbE1hcEVudHJ5CiAJ Y2hhcgkJcGFyYWxsZWxfc2FmZTsKIH0gTG9naWNhbFJlcFJlbE1hcEVudHJ5OwogCisKK3R5cGVk ZWYgc3RydWN0IExvZ2ljYWxSZXBTdWJzY3JpYmVySWR4Cit7CisJT2lkCQkJaW5kZXhvaWQ7CS8q IE9JRCBvZiB0aGUgbG9jYWwga2V5ICovCisJQml0bWFwc2V0ICAqaW5kZXhrZXlzOwkvKiBCaXRt YXAgb2Yga2V5IGNvbHVtbnMgKm9uIHJlbW90ZSogKi8KKwlib29sCQludWxsc19kaXN0aW5jdDsJ LyogV2hldGhlciBOVUxMcyBhcmUgY29uc2lkZXJlZCBkaXN0aW5jdCAqLworfSBMb2dpY2FsUmVw U3Vic2NyaWJlcklkeDsKKwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF9yZWxtYXBfdXBkYXRlKExv Z2ljYWxSZXBSZWxhdGlvbiAqcmVtb3RlcmVsKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfcGFy dG1hcF9yZXNldF9yZWxtYXAoTG9naWNhbFJlcFJlbGF0aW9uICpyZW1vdGVyZWwpOwogCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wNTBfcGFyYWxsZWxfYXBwbHkucGwgYi9z cmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wNTBfcGFyYWxsZWxfYXBwbHkucGwKaW5kZXggMzU4Yzdi N2I3ZTEuLjZiMGQ1YzdlMzgzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w NTBfcGFyYWxsZWxfYXBwbHkucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDUwX3Bh cmFsbGVsX2FwcGx5LnBsCkBAIC00MDMsNCArNDAzLDEyOCBAQCAkcmVzdWx0ID0KICAgJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoMSkgRlJPTSBy ZWdyZXNzX3RhYiIpOwogaXMgKCRyZXN1bHQsIDUwMTEsICdpbnNlcnRzIGFyZSByZXBsaWNhdGVk IHRvIHN1YnNjcmliZXInKTsKIAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB0aGF0IHRoZSBkZXBlbmRlbmN5IHRyYWNraW5nIHdvcmtz IGNvcnJlY3RseSBmb3IgbG9jYWwgdW5pcXVlIGluZGV4ZXMgb24KKyMgc3Vic2NyaWJlciBkdXJp bmcgcGFyYWxsZWwgYXBwbHkuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworCisjIFRydW5jYXRlIHRoZSBkYXRhIGZvciB1cGNvbWluZyB0ZXN0cwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlRSVU5DQVRFIFRBQkxFIHJl Z3Jlc3NfdGFiOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdyZWdyZXNz X3N1YicpOworCisjIERlZmluZSBhbiB1bmlxdWUgaW5kZXggb24gc3Vic2NyaWJlcgorJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgIkNSRUFURSBVTklRVUUgSU5E RVggbG9jYWxfdW5pcXVlX2lkeCBPTiByZWdyZXNzX3RhYiAodmFsdWUpOyIpOworCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorICAgICJJTlNFUlQgSU5UTyByZWdyZXNz X3RhYiBWQUxVRVMgKDEsICd3b3VsZCBjb25mbGljdCcpOyIpOworCiskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ3JlZ3Jlc3Nfc3ViJyk7CisKKyRyZXN1bHQgPQorICAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgxKSBGUk9NIHJl Z3Jlc3NfdGFiIik7CitpcyAoJHJlc3VsdCwgMSwgJ3RoZSBpbnNlcnQgaXMgcmVwbGljYXRlZCB0 byBzdWJzY3JpYmVyJyk7CisKKyMgQXR0YWNoIGFuIGluamVjdGlvbl9wb2ludC4gUGFyYWxsZWwg d29ya2VycyB3b3VsZCB3YWl0IGJlZm9yZSB0aGUgY29tbWl0Ciskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCdw YXJhbGxlbC13b3JrZXItYmVmb3JlLWNvbW1pdCcsJ3dhaXQnKTsiCispOworCisjIERlbGV0ZSB0 aGUgdHVwbGUgb24gcHVibGlzaGVyLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKyAgICAiREVMRVRFIEZST00gcmVncmVzc190YWIgV0hFUkUgaWQgPSAxOyIpOworCisj IFdhaXQgdW50aWwgdGhlIHBhcmFsbGVsIHdvcmtlciBlbnRlcnMgdGhlIGluamVjdGlvbiBwb2lu dC4KKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2V2ZW50KCdsb2dpY2FsIHJlcGxpY2F0aW9u IHBhcmFsbGVsIHdvcmtlcicsCisJJ3BhcmFsbGVsLXdvcmtlci1iZWZvcmUtY29tbWl0Jyk7CisK KyRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisjIEluc2VydCB0dXBs ZXMuIFRoaXMgc2hvdWxkIGNvbmZsaWN0IHdpdGggdGhlIERFTEVURSB0cmFuc2FjdGlvbiwgYXMg Ym90aAorIyB0cmFuc2FjdGlvbnMgbW9kaWZ5IHRoZSBzYW1lIGtleS4gVGhlIHBhcmFsbGVsIHdv cmtlciB3aWxsIHdhaXQgZm9yIHRoZQorIyBwcmVjZWRpbmcgdHJhbnNhY3Rpb24gdG8gZmluaXNo LgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKyAgICAiSU5TRVJUIElO VE8gcmVncmVzc190YWIgVkFMVUVTICgyLCAnd291bGQgY29uZmxpY3QnKTsiKTsKKworIyBWZXJp ZnkgdGhlIGRlcGVuZGVuY3kgaXMgZGV0ZWN0ZWQgZm9yIHRoZSBpbnNlcnQKKyRzdHIgPSAkbm9k ZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIvZm91bmQgY29uZmxpY3RpbmcgbG9jYWwgdW5p cXVlIGtleSBjaGFuZ2Ugb24gdGFibGUgWzEtOV1bMC05XSsgZnJvbSAoWzEtOV1bMC05XSspLywg JG9mZnNldCk7CiskeGlkID0gJHN0ciA9fiAvZm91bmQgY29uZmxpY3RpbmcgbG9jYWwgdW5pcXVl IGtleSBjaGFuZ2Ugb24gdGFibGUgWzEtOV1bMC05XSsgZnJvbSAoWzEtOV1bMC05XSspLzsKKwor IyBWZXJpZnkgdGhlIHBhcmFsbGVsIHdvcmtlciB3YWl0cyBmb3IgdGhlIHNhbWUgdHJhbnNhY3Rp b24KKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci93YWl0IGZvciBkZXBlbmRlZCB4 aWQgJHhpZC8sICRvZmZzZXQpOworCitvaygxLCAibG9jYWwgdW5pcXVlIGtleSBkZXBlbmRlbmN5 IGRldGVjdGVkIGZvciBwYXJhbGxlbCBhcHBseSIpOworCisjIFdha2V1cCB0aGUgcGFyYWxsZWwg d29ya2VyCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXFbCisgICAg U0VMRUNUIGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCdwYXJhbGxlbC13b3JrZXItYmVmb3JlLWNv bW1pdCcpOworICAgIFNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3dha2V1cCgncGFyYWxsZWwtd29y a2VyLWJlZm9yZS1jb21taXQnKTsKK10pOworCisjIFZlcmlmeSB0aGUgc3RyZWFtZWQgdHJhbnNh Y3Rpb24gY2FuIGJlIGFwcGxpZWQKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci9m aW5pc2ggd2FpdGluZyBmb3IgZGVwZW5kZWQgeGlkICR4aWQvLCAkb2Zmc2V0KTsKKworJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdyZWdyZXNzX3N1YicpOworCiskcmVzdWx0ID0K KyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo MSkgRlJPTSByZWdyZXNzX3RhYiIpOworaXMgKCRyZXN1bHQsIDEsICdpbnNlcnRzIGFyZSByZXBs aWNhdGVkIHRvIHN1YnNjcmliZXInKTsKKworIyBUZXN0IHRoYXQgdGhlIGRlcGVuZGVuY3kgdHJh Y2tpbmcgd29ya3MgY29ycmVjdGx5IGZvciBsb2NhbCB1bmlxdWUgaW5kZXhlcyBvbgorIyBzdWJz Y3JpYmVyIGR1cmluZyBwYXJhbGxlbCBhcHBseSB3aGVuIHRoZSB1bmlxdWUgaW5kZXggaGFzIGV4 cHJlc3Npb24uCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag SU5ERVggbG9jYWxfdW5pcXVlX2lkeDsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorICAgICJDUkVBVEUgVU5JUVVFIElOREVYIGxvY2FsX3VuaXF1ZV9pZHhfZXhw ciBPTiByZWdyZXNzX3RhYiAoKExPV0VSKHZhbHVlKSkpOyIpOworCisjIEF0dGFjaCBhbiBpbmpl Y3Rpb25fcG9pbnQuIFBhcmFsbGVsIHdvcmtlcnMgd291bGQgd2FpdCBiZWZvcmUgdGhlIGNvbW1p dAorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBpbmpl Y3Rpb25fcG9pbnRzX2F0dGFjaCgncGFyYWxsZWwtd29ya2VyLWJlZm9yZS1jb21taXQnLCd3YWl0 Jyk7IgorKTsKKworIyBJbnNlcnQgYSB0dXBsZSBvbiBwdWJsaXNoZXIuIFBhcmFsbGVsIHdvcmtl ciB3b3VsZCB3YWl0IGF0IHRoZSBpbmplY3Rpb24KKyMgcG9pbnQKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgIkRFTEVURSBGUk9NIHJlZ3Jlc3NfdGFiIFdIRVJF IGlkID0gMjsiKTsKKworIyBXYWl0IHVudGlsIHRoZSBwYXJhbGxlbCB3b3JrZXIgZW50ZXJzIHRo ZSBpbmplY3Rpb24gcG9pbnQuCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9ldmVudCgnbG9n aWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCB3b3JrZXInLAorCSdwYXJhbGxlbC13b3JrZXItYmVm b3JlLWNvbW1pdCcpOworCiskb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsK KworIyBJbnNlcnQgdHVwbGVzLiBUaGlzIHNob3VsZCBjb25mbGljdCB3aXRoIHRoZSBERUxFVEUg dHJhbnNhY3Rpb24sIGFzIGJvdGgKKyMgdHJhbnNhY3Rpb25zIG1vZGlmeSB0aGUgc2FtZSBrZXkg dmFsdWUuIFRoZSBwYXJhbGxlbCB3b3JrZXIgd2lsbCB3YWl0IGZvciB0aGUKKyMgcHJlY2VkaW5n IHRyYW5zYWN0aW9uIHRvIGZpbmlzaC4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisgICAgIklOU0VSVCBJTlRPIHJlZ3Jlc3NfdGFiIFZBTFVFUyAoMywgJ1dPVUxEIENP TkZMSUNUJyk7Iik7CisKKyMgVmVyaWZ5IHRoZSBkZXBlbmRlbmN5IGlzIGRldGVjdGVkIGZvciB0 aGUgaW5zZXJ0Ciskc3RyID0gJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyL2ZvdW5k IGNvbmZsaWN0aW5nIGxvY2FsIHVuaXF1ZSBrZXkgY2hhbmdlIG9uIHRhYmxlIFsxLTldWzAtOV0r IGZyb20gKFsxLTldWzAtOV0rKS8sICRvZmZzZXQpOworJHhpZCA9ICRzdHIgPX4gL2ZvdW5kIGNv bmZsaWN0aW5nIGxvY2FsIHVuaXF1ZSBrZXkgY2hhbmdlIG9uIHRhYmxlIFsxLTldWzAtOV0rIGZy b20gKFsxLTldWzAtOV0rKS87CisKKyMgVmVyaWZ5IHRoZSBwYXJhbGxlbCB3b3JrZXIgd2FpdHMg Zm9yIHRoZSBzYW1lIHRyYW5zYWN0aW9uCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2co cXIvd2FpdCBmb3IgZGVwZW5kZWQgeGlkICR4aWQvLCAkb2Zmc2V0KTsKKworb2soMSwgImxvY2Fs IHVuaXF1ZSBrZXkgZGVwZW5kZW5jeSBmcm9tIGluZGV4IGV4cHJlc3Npb24gZGV0ZWN0ZWQgZm9y IHBhcmFsbGVsIGFwcGx5Iik7CisKKyMgV2FrZXVwIHRoZSBwYXJhbGxlbCB3b3JrZXIKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKKyAgICBTRUxFQ1QgaW5qZWN0 aW9uX3BvaW50c19kZXRhY2goJ3BhcmFsbGVsLXdvcmtlci1iZWZvcmUtY29tbWl0Jyk7CisgICAg U0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCdwYXJhbGxlbC13b3JrZXItYmVmb3JlLWNv bW1pdCcpOworXSk7CisKKyMgVmVyaWZ5IHRoZSBzdHJlYW1lZCB0cmFuc2FjdGlvbiBjYW4gYmUg YXBwbGllZAorJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyL2ZpbmlzaCB3YWl0aW5n IGZvciBkZXBlbmRlZCB4aWQgJHhpZC8sICRvZmZzZXQpOworCiskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJ3JlZ3Jlc3Nfc3ViJyk7CisKKyRyZXN1bHQgPQorICAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgxKSBGUk9NIHJlZ3Jl c3NfdGFiIik7CitpcyAoJHJlc3VsdCwgMSwgJ2luc2VydHMgYXJlIHJlcGxpY2F0ZWQgdG8gc3Vi c2NyaWJlcicpOworCisjIENsZWFudXAKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBJTkRFWCBsb2NhbF91bmlxdWVfaWR4X2V4cHI7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgVEFCTEUgcmVncmVzc190YWI7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3JlZ3Jlc3Nfc3ViJyk7CisK IGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBkYjhiYjRlMWU0 My4uMzRjOTU5MmUzZTUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xNzAxLDYgKzE3 MDEsNyBAQCBMb2dpY2FsUmVwQmVnaW5EYXRhCiBMb2dpY2FsUmVwQ29tbWl0RGF0YQogTG9naWNh bFJlcENvbW1pdFByZXBhcmVkVHhuRGF0YQogTG9naWNhbFJlcEN0eFN0cnVjdAorTG9naWNhbFJl cEtleUtpbmQKIExvZ2ljYWxSZXBNc2dUeXBlCiBMb2dpY2FsUmVwUGFydE1hcEVudHJ5CiBMb2dp Y2FsUmVwUHJlcGFyZWRUeG5EYXRhCkBAIC0xNzEwLDYgKzE3MTEsNyBAQCBMb2dpY2FsUmVwUmVs YXRpb24KIExvZ2ljYWxSZXBSb2xsYmFja1ByZXBhcmVkVHhuRGF0YQogTG9naWNhbFJlcFNlcXVl bmNlSW5mbwogTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YQorTG9naWNhbFJlcFN1YnNjcmliZXJJ ZHgKIExvZ2ljYWxSZXBUdXBsZURhdGEKIExvZ2ljYWxSZXBUeXAKIExvZ2ljYWxSZXBXb3JrZXIK LS0gCjIuNDMuMAoK --_010_TY4PR01MB1771875A7A64B139EF8C8D05C94E62TY4PR01MB17718jp_ Content-Type: application/octet-stream; name="v20-0007-Wait-applying-transaction-if-one-of-user-defined.patch" Content-Description: v20-0007-Wait-applying-transaction-if-one-of-user-defined.patch Content-Disposition: attachment; filename="v20-0007-Wait-applying-transaction-if-one-of-user-defined.patch"; size=12140; creation-date="Mon, 15 Jun 2026 11:19:05 GMT"; modification-date="Mon, 15 Jun 2026 11:20:10 GMT" Content-Transfer-Encoding: base64 RnJvbSAzNDFkNDFkMzU5Zjg5ZDg5NGNkNGUyMjc4ZTdkNGZkNTA1NGMzZjViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaaGlqaWUgSG91IDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBUdWUsIDkgSnVuIDIwMjYgMTg6NDU6MDIgKzA4MDAKU3ViamVjdDogW1BBVENIIHYyMCA3 LzldIFdhaXQgYXBwbHlpbmcgdHJhbnNhY3Rpb24gaWYgb25lIG9mIHVzZXItZGVmaW5lZAogdHJp Z2dlcnMgaXMgaW1tdXRhYmxlCgpTaW5jZSBtYW55IHBhcmFsbGVsIHdvcmtlcnMgYXBwbHkgdHJh bnNhY3Rpb25zLCB0cmlnZ2VycyBmb3IgcmVsYXRpb25zIGNhbiBhbHNvCmJlIGZpcmVkIGluIHBh cmFsbGVsLCB3aGljaCBtYXkgb2J0YWluIHVuZXhwZWN0ZWQgcmVzdWx0cy4gVG8gbWFrZSBpdCBz YWZlLApwYXJhbGxlbCBhcHBseSB3b3JrZXJzIHdhaXQgZm9yIHRoZSBwcmV2aW91c2x5IGRpc3Bh dGNoZWQgdHJhbnNhY3Rpb24gYmVmb3JlCmFwcGx5aW5nIGNoYW5nZXMgdG8gdGhlIHJlbGF0aW9u IHRoYXQgaGFzIG11dGFibGUgdHJpZ2dlcnMuCi0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9yZWxhdGlvbi5jIHwgMTIzICsrKysrKysrKysrKysrKysrKy0tLQogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgIHwgIDY1ICsrKysrKysrKysrCiBzcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaCAgfCAgMjAgKysrKwogMyBmaWxl cyBjaGFuZ2VkLCAxOTQgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCmluZGV4IGUxY2UxODNkZmQzLi5lZWI4 NWY4Y2M1ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxh dGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYwpA QCAtMjEsNyArMjEsOSBAQAogI2luY2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgogI2luY2x1ZGUgImFj Y2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19wcm9jLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJzY3JpcHRpb25fcmVs LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4 ZWN1dG9yLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vbG9naWNhbHJlbGF0aW9uLmgiCkBAIC0xNjAsNiArMTYyLDEwIEBAIGxvZ2ljYWxyZXBf cmVsbWFwX2ZyZWVfZW50cnkoTG9naWNhbFJlcFJlbE1hcEVudHJ5ICplbnRyeSkKICAqCiAgKiBD YWxsZWQgd2hlbiBuZXcgcmVsYXRpb24gbWFwcGluZyBpcyBzZW50IGJ5IHRoZSBwdWJsaXNoZXIg dG8gdXBkYXRlCiAgKiBvdXIgZXhwZWN0ZWQgdmlldyBvZiBpbmNvbWluZyBkYXRhIGZyb20gc2Fp ZCBwdWJsaXNoZXIuCisgKgorICogTm90ZSB0aGF0IHdlIGRvIG5vdCBjaGVjayB0aGUgdXNlci1k ZWZpbmVkIGNvbnN0cmFpbnRzIGhlcmUuIFBvc3RncmVTUUwgaGFzCisgKiBhbHJlYWR5IGFzc3Vt ZWQgdGhhdCBDSEVDSyBjb25zdHJhaW50cycgY29uZGl0aW9ucyBhcmUgaW1tdXRhYmxlIGFuZCBo ZXJlCisgKiBmb2xsb3dzIHRoZSBydWxlLgogICovCiB2b2lkCiBsb2dpY2FscmVwX3JlbG1hcF91 cGRhdGUoTG9naWNhbFJlcFJlbGF0aW9uICpyZW1vdGVyZWwpCkBAIC0yMDksNiArMjE1LDggQEAg bG9naWNhbHJlcF9yZWxtYXBfdXBkYXRlKExvZ2ljYWxSZXBSZWxhdGlvbiAqcmVtb3RlcmVsKQog CQkocmVtb3RlcmVsLT5yZWxraW5kID09IDApID8gUkVMS0lORF9SRUxBVElPTiA6IHJlbW90ZXJl bC0+cmVsa2luZDsKIAogCWVudHJ5LT5yZW1vdGVyZWwuYXR0a2V5cyA9IGJtc19jb3B5KHJlbW90 ZXJlbC0+YXR0a2V5cyk7CisKKwllbnRyeS0+cGFyYWxsZWxfc2FmZSA9IExPR0lDQUxSRVBfUEFS QUxMRUxfVU5LTk9XTjsKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKIH0KIApAQCAt MzU0LDI3ICszNjIsNzkgQEAgbG9naWNhbHJlcF9yZWxfbWFya191cGRhdGFibGUoTG9naWNhbFJl cFJlbE1hcEVudHJ5ICplbnRyeSkKIH0KIAogLyoKLSAqIE9wZW4gdGhlIGxvY2FsIHJlbGF0aW9u IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVtb3RlIG9uZS4KKyAqIENoZWNrIGFsbCBsb2NhbCB0cmln Z2VycyBmb3IgdGhlIHJlbGF0aW9uIHRvIHNlZSB0aGUgcGFyYWxsZWxpemFiaWxpdHkuCiAgKgot ICogUmVidWlsZHMgdGhlIFJlbGNhY2hlIG1hcHBpbmcgaWYgaXQgd2FzIGludmFsaWRhdGVkIGJ5 IGxvY2FsIERETC4KKyAqIFdlIHJlZ2FyZCByZWxhdGlvbnMgYXMgYXBwbGljYWJsZSBpbiBwYXJh bGxlbCBpZiBhbGwgdHJpZ2dlcnMgYXJlIGltbXV0YWJsZS4KKyAqIFJlc3VsdCBpcyBkaXJlY3Rs eSBzZXQgdG8gTG9naWNhbFJlcFJlbE1hcEVudHJ5OjpwYXJhbGxlbF9zYWZlLgogICovCi1Mb2dp Y2FsUmVwUmVsTWFwRW50cnkgKgotbG9naWNhbHJlcF9yZWxfb3BlbihMb2dpY2FsUmVwUmVsSWQg cmVtb3RlaWQsIExPQ0tNT0RFIGxvY2ttb2RlKQorc3RhdGljIHZvaWQKK2NoZWNrX2RlZmluZWRf dHJpZ2dlcnMoTG9naWNhbFJlcFJlbE1hcEVudHJ5ICplbnRyeSkKK3sKKwlUcmlnZ2VyRGVzYyAq dHJpZ2Rlc2MgPSBlbnRyeS0+bG9jYWxyZWwtPnRyaWdkZXNjOworCisJLyogUXVpY2sgZXhpdCBp ZiB0cmlmZmVyIGlzIG5vdCBkZWZpbmVkICovCisJaWYgKHRyaWdkZXNjID09IE5VTEwpCisJewor CQllbnRyeS0+cGFyYWxsZWxfc2FmZSA9IExPR0lDQUxSRVBfUEFSQUxMRUxfU0FGRTsKKwkJcmV0 dXJuOworCX0KKworCS8qIFNlZWsgdHJpZ2dlcnMgb25lIGJ5IG9uZSB0byBzZWUgdGhlIHZvbGF0 aWxpdHkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IHRyaWdkZXNjLT5udW10cmlnZ2VyczsgaSsr KQorCXsKKwkJVHJpZ2dlciAgICAqdHJpZ2dlciA9ICZ0cmlnZGVzYy0+dHJpZ2dlcnNbaV07CisK KwkJQXNzZXJ0KE9pZElzVmFsaWQodHJpZ2dlci0+dGdmb2lkKSk7CisKKwkJLyogU2tpcCBpZiB0 aGUgdHJpZ2dlciBpcyBub3QgZW5hYmxlZCBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiAqLworCQlp ZiAodHJpZ2dlci0+dGdlbmFibGVkID09IFRSSUdHRVJfRElTQUJMRUQgfHwKKwkJCXRyaWdnZXIt PnRnZW5hYmxlZCA9PSBUUklHR0VSX0ZJUkVTX09OX09SSUdJTikKKwkJCWNvbnRpbnVlOworCisJ CS8qIENoZWNrIHRoZSB2b2xhdGlsaXR5IG9mIHRoZSB0cmlnZ2VyLiBFeGl0IGlmIGl0IGlzIG5v dCBpbW11dGFibGUgKi8KKwkJaWYgKGZ1bmNfdm9sYXRpbGUodHJpZ2dlci0+dGdmb2lkKSAhPSBQ Uk9WT0xBVElMRV9JTU1VVEFCTEUpCisJCXsKKwkJCWVudHJ5LT5wYXJhbGxlbF9zYWZlID0gTE9H SUNBTFJFUF9QQVJBTExFTF9SRVNUUklDVEVEOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyog QWxsIHRyaWdnZXJzIGFyZSBpbW11dGFibGUsIHNldCBhcyBwYXJhbGxlbCBzYWZlICovCisJZW50 cnktPnBhcmFsbGVsX3NhZmUgPSBMT0dJQ0FMUkVQX1BBUkFMTEVMX1NBRkU7Cit9CisKKy8qCisg KiBBY3R1YWwgd29ya2hvcnNlIGZvciBsb2dpY2FscmVwX3JlbF9vcGVuKCkuCisgKgorICogQ2Fs bGVyIG11c3Qgc3BlY2lmeSAqZWl0aGVyKiBlbnRyeSBvciBrZXkuIElmIHRoZSBlbnRyeSBpcyBz cGVjaWZpZWQsIGl0cworICogYXR0cmlidXRlcyBhcmUgZmlsbGVkIGFuZCByZXR1cm5lZC4gVGhl IGxvZ2ljYWwgcmVsYXRpb24gaXMga2VwdCBvcGVuaW5nLgorICogSWYgdGhlIGtleSBpcyBnaXZl biwgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaXMgZmlyc3Qgc2VhcmNoZWQgaW4gdGhlIGhhc2gK KyAqIHRhYmxlIGFuZCBwcm9jZXNzZWQgYXMgaW4gdGhlIGFib3ZlIGNhc2UuIEF0IHRoZSBlbmQs IGxvZ2ljYWwgcmVwbGljYXRpb24gaXMKKyAqIGNsb3NlZC4KKyAgKi8KK3ZvaWQKK2xvZ2ljYWxy ZXBfcmVsX2xvYWQoTG9naWNhbFJlcFJlbE1hcEVudHJ5ICplbnRyeSwgTG9naWNhbFJlcFJlbElk IHJlbW90ZWlkLAorCQkJCQlMT0NLTU9ERSBsb2NrbW9kZSkKIHsKLQlMb2dpY2FsUmVwUmVsTWFw RW50cnkgKmVudHJ5OwotCWJvb2wJCWZvdW5kOwogCUxvZ2ljYWxSZXBSZWxhdGlvbiAqcmVtb3Rl cmVsOwogCi0JaWYgKExvZ2ljYWxSZXBSZWxNYXAgPT0gTlVMTCkKLQkJbG9naWNhbHJlcF9yZWxt YXBfaW5pdCgpOworCUFzc2VydCgoZW50cnkgJiYgIXJlbW90ZWlkKSB8fCAoIWVudHJ5ICYmIHJl bW90ZWlkKSk7CiAKLQkvKiBTZWFyY2ggZm9yIGV4aXN0aW5nIGVudHJ5LiAqLwotCWVudHJ5ID0g aGFzaF9zZWFyY2goTG9naWNhbFJlcFJlbE1hcCwgJnJlbW90ZWlkLAotCQkJCQkJSEFTSF9GSU5E LCAmZm91bmQpOworCWlmICghZW50cnkpCisJeworCQlib29sCQlmb3VuZDsKIAotCWlmICghZm91 bmQpCi0JCWVsb2coRVJST1IsICJubyByZWxhdGlvbiBtYXAgZW50cnkgZm9yIHJlbW90ZSByZWxh dGlvbiBJRCAldSIsCi0JCQkgcmVtb3RlaWQpOworCQlpZiAoTG9naWNhbFJlcFJlbE1hcCA9PSBO VUxMKQorCQkJbG9naWNhbHJlcF9yZWxtYXBfaW5pdCgpOworCisJCS8qIFNlYXJjaCBmb3IgZXhp c3RpbmcgZW50cnkuICovCisJCWVudHJ5ID0gaGFzaF9zZWFyY2goTG9naWNhbFJlcFJlbE1hcCwg JnJlbW90ZWlkLAorCQkJCQkJCUhBU0hfRklORCwgJmZvdW5kKTsKKworCQlpZiAoIWZvdW5kKQor CQkJZWxvZyhFUlJPUiwgIm5vIHJlbGF0aW9uIG1hcCBlbnRyeSBmb3IgcmVtb3RlIHJlbGF0aW9u IElEICV1IiwKKwkJCQkgcmVtb3RlaWQpOworCX0KIAogCXJlbW90ZXJlbCA9ICZlbnRyeS0+cmVt b3RlcmVsOwogCkBAIC01MDAsNiArNTYwLDEzIEBAIGxvZ2ljYWxyZXBfcmVsX29wZW4oTG9naWNh bFJlcFJlbElkIHJlbW90ZWlkLCBMT0NLTU9ERSBsb2NrbW9kZSkKIAkJZW50cnktPmxvY2FsaW5k ZXhvaWQgPSBGaW5kTG9naWNhbFJlcExvY2FsSW5kZXgoZW50cnktPmxvY2FscmVsLCByZW1vdGVy ZWwsCiAJCQkJCQkJCQkJCQkJCWVudHJ5LT5hdHRybWFwKTsKIAorCQkvKgorCQkgKiBMZWFkZXIg bXVzdCBhbHNvIGNvbGxlY3QgYWxsIGxvY2FsIHVuaXF1ZSBpbmRleGVzIGZvciBkZXBlbmRlbmN5 CisJCSAqIHRyYWNraW5nLgorCQkgKi8KKwkJaWYgKGFtX2xlYWRlcl9hcHBseV93b3JrZXIoKSkK KwkJCWNoZWNrX2RlZmluZWRfdHJpZ2dlcnMoZW50cnkpOworCiAJCWVudHJ5LT5sb2NhbHJlbHZh bGlkID0gdHJ1ZTsKIAl9CiAKQEAgLTUwOCw2ICs1NzUsMzQgQEAgbG9naWNhbHJlcF9yZWxfb3Bl bihMb2dpY2FsUmVwUmVsSWQgcmVtb3RlaWQsIExPQ0tNT0RFIGxvY2ttb2RlKQogCQkJCQkJCQkJ CQkgICBlbnRyeS0+bG9jYWxyZWxvaWQsCiAJCQkJCQkJCQkJCSAgICZlbnRyeS0+c3RhdGVsc24p OwogCisJaWYgKHJlbW90ZWlkKQorCQlsb2dpY2FscmVwX3JlbF9jbG9zZShlbnRyeSwgbG9ja21v ZGUpOworfQorCisvKgorICogT3BlbiB0aGUgbG9jYWwgcmVsYXRpb24gYXNzb2NpYXRlZCB3aXRo IHRoZSByZW1vdGUgb25lLgorICoKKyAqIFJlYnVpbGRzIHRoZSBSZWxjYWNoZSBtYXBwaW5nIGlm IGl0IHdhcyBpbnZhbGlkYXRlZCBieSBsb2NhbCBEREwuCisgKi8KK0xvZ2ljYWxSZXBSZWxNYXBF bnRyeSAqCitsb2dpY2FscmVwX3JlbF9vcGVuKExvZ2ljYWxSZXBSZWxJZCByZW1vdGVpZCwgTE9D S01PREUgbG9ja21vZGUpCit7CisJTG9naWNhbFJlcFJlbE1hcEVudHJ5ICplbnRyeTsKKwlib29s CQlmb3VuZDsKKworCWlmIChMb2dpY2FsUmVwUmVsTWFwID09IE5VTEwpCisJCWxvZ2ljYWxyZXBf cmVsbWFwX2luaXQoKTsKKworCS8qIFNlYXJjaCBmb3IgZXhpc3RpbmcgZW50cnkuICovCisJZW50 cnkgPSBoYXNoX3NlYXJjaChMb2dpY2FsUmVwUmVsTWFwLCAmcmVtb3RlaWQsCisJCQkJCQlIQVNI X0ZJTkQsICZmb3VuZCk7CisKKwlpZiAoIWZvdW5kKQorCQllbG9nKEVSUk9SLCAibm8gcmVsYXRp b24gbWFwIGVudHJ5IGZvciByZW1vdGUgcmVsYXRpb24gSUQgJXUiLAorCQkJIHJlbW90ZWlkKTsK KworCWxvZ2ljYWxyZXBfcmVsX2xvYWQoZW50cnksIDAsIGxvY2ttb2RlKTsKKwogCXJldHVybiBl bnRyeTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXgg NjU5NWUwY2RlZWUuLjcxN2NmNzRmMGFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvd29ya2VyLmMKQEAgLTExNzMsNiArMTE3Myw1NyBAQCBjaGVja19hbmRfcmVjb3JkX3JlbF9k ZXBlbmRlbmN5KExvZ2ljYWxSZXBSZWxJZCByZWxpZCwKIAkJcmVsZW50cnktPmxhc3RfZGVwZW5k ZWRfeGlkID0gbmV3X2RlcGVuZGVkX3hpZDsKIH0KIAorLyoKKyAqIENoZWNrIHRoZSBwYXJhbGxl bGl6YWJpbGl0eSBvZiBhcHBseWluZyBjaGFuZ2VzIGZvciB0aGUgcmVsYXRpb24uCisgKiBBcHBl bmQgdGhlIGxhc3RseSBkaXNwYXRjaGVkIHRyYW5zYWN0aW9uIGluIGluICdkZXBlbmRzX29uX3hp ZHMnIGlmIHRoZQorICogcmVsYXRpb24gaXMgcGFyYWxsZWwgdW5zYWZlLgorICovCitzdGF0aWMg dm9pZAorY2hlY2tfZGVwZW5kZW5jeV9mb3JfcGFyYWxsZWxfc2FmZXR5KExvZ2ljYWxSZXBSZWxJ ZCByZWxpZCwKKwkJCQkJCQkJCSBUcmFuc2FjdGlvbklkIG5ld19kZXBlbmRlZF94aWQsCisJCQkJ CQkJCQkgTGlzdCAqKmRlcGVuZHNfb25feGlkcykKK3sKKwlMb2dpY2FsUmVwUmVsTWFwRW50cnkg KnJlbGVudHJ5OworCisJLyogUXVpY2sgZXhpdCBpZiBubyB0cmFuc2FjdGlvbnMgaGF2ZSBiZWVu IGRpc3BhdGNoZWQgKi8KKwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKGxhc3RfcGFyYWxsZWxp emVkX3JlbW90ZV94aWQpKQorCQlyZXR1cm47CisKKwlyZWxlbnRyeSA9IGxvZ2ljYWxyZXBfZ2V0 X3JlbGVudHJ5KHJlbGlkKTsKKworCS8qCisJICogR2F0aGVyIGluZm9ybWF0aW9uIGZvciBsb2Nh bCB0cmlnZ3JlcyBpZiBub3QgeWV0LiBXZSByZXF1aXJlIHRvIGJlIGluIGEKKwkgKiB0cmFuc2Fj dGlvbiBzdGF0ZSBiZWNhdXNlIHN5c3RlbSBjYXRhbG9ncyBhcmUgcmVhZC4KKwkgKi8KKwlpZiAo cmVsZW50cnktPnBhcmFsbGVsX3NhZmUgPT0gTE9HSUNBTFJFUF9QQVJBTExFTF9VTktOT1dOKQor CXsKKwkJYm9vbAkJbmVlZHNfc3RhcnQgPSAhSXNUcmFuc2FjdGlvbk9yVHJhbnNhY3Rpb25CbG9j aygpOworCisJCWlmIChuZWVkc19zdGFydCkKKwkJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7 CisKKwkJbG9naWNhbHJlcF9yZWxfbG9hZChOVUxMLCByZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCQkvKgorCQkgKiBDbG9zZSB0aGUgdHJhbnNhY3Rpb24gaWYgd2Ugc3RhcnQgaGVyZS4gV2Ug bXVzdCBub3QgYWJvcnQgYmVjYXVzZQorCQkgKiBpdCB3b3VsZCByZWxlYXNlIGFsbCBzZXNzaW9u LWxldmVsIGxvY2tzLCBzdWNoIGFzIHRoZSBzdHJlYW0gbG9jaywKKwkJICogYW5kIGJyZWFrIHRo ZSBkZWFkbG9jayBkZXRlY3Rpb24gbWVjaGFuaXNtIGJldHdlZW4gTEEgYW5kIFBBLiBUaGUKKwkJ ICogb3V0Y29tZSBpcyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHRoZSBlbmQgc3RhdHVzLCBzaW5j ZSB0aGUKKwkJICogdHJhbnNhY3Rpb24gZGlkIG5vdCBtb2RpZnkgYW55IHR1cGxlcy4KKwkJICov CisJCWlmIChuZWVkc19zdGFydCkKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJ CUFzc2VydChyZWxlbnRyeS0+cGFyYWxsZWxfc2FmZSAhPSBMT0dJQ0FMUkVQX1BBUkFMTEVMX1VO S05PV04pOworCX0KKworCS8qIERvIG5vdGhpbmcgZm9yIHBhcmFsbGVsIHNhZmUgcmVsYXRpb25z ICovCisJaWYgKHJlbGVudHJ5LT5wYXJhbGxlbF9zYWZlID09IExPR0lDQUxSRVBfUEFSQUxMRUxf U0FGRSkKKwkJcmV0dXJuOworCisJYXBwZW5kX3hpZF9kZXBlbmRlbmN5KGxhc3RfcGFyYWxsZWxp emVkX3JlbW90ZV94aWQsIGRlcGVuZHNfb25feGlkcyk7Cit9CisKIC8qCiAgKiBDaGVjayBkZXBl bmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgY3VycmVudCBjaGFuZ2UgYnkgZGV0ZXJtaW5pbmcgaWYg dGhlCiAgKiBtb2RpZmljYXRpb24gaW1wYWN0cyB0aGUgc2FtZSByb3cgb3IgdGFibGUgYXMgYW5v dGhlciBvbmdvaW5nIHRyYW5zYWN0aW9uLgpAQCAtMTI0MCw2ICsxMjkxLDggQEAgaGFuZGxlX2Rl cGVuZGVuY3lfb25fY2hhbmdlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbiwgU3RyaW5nSW5mbyBz LAogCQkJcmVsaWQgPSBsb2dpY2FscmVwX3JlYWRfaW5zZXJ0KCZjaGFuZ2UsICZuZXd0dXApOwog CQkJY2hlY2tfYW5kX3JlY29yZF9yaV9kZXBlbmRlbmN5KHJlbGlkLCAmbmV3dHVwLCBuZXdfZGVw ZW5kZWRfeGlkLAogCQkJCQkJCQkJCSAgICZkZXBlbmRzX29uX3hpZHMpOworCQkJY2hlY2tfZGVw ZW5kZW5jeV9mb3JfcGFyYWxsZWxfc2FmZXR5KHJlbGlkLCBuZXdfZGVwZW5kZWRfeGlkLAorCQkJ CQkJCQkJCQkJICZkZXBlbmRzX29uX3hpZHMpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBMT0dJQ0FM X1JFUF9NU0dfVVBEQVRFOgpAQCAtMTI1MSw2ICsxMzA0LDkgQEAgaGFuZGxlX2RlcGVuZGVuY3lf b25fY2hhbmdlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbiwgU3RyaW5nSW5mbyBzLAogCQkJCWNo ZWNrX2FuZF9yZWNvcmRfcmlfZGVwZW5kZW5jeShyZWxpZCwgJm9sZHR1cCwgbmV3X2RlcGVuZGVk X3hpZCwKIAkJCQkJCQkJCQkJICAgJmRlcGVuZHNfb25feGlkcyk7CiAKKwkJCQljaGVja19kZXBl bmRlbmN5X2Zvcl9wYXJhbGxlbF9zYWZldHkocmVsaWQsIG5ld19kZXBlbmRlZF94aWQsCisJCQkJ CQkJCQkJCQkJICZkZXBlbmRzX29uX3hpZHMpOworCiAJCQkJLyoKIAkJCQkgKiBDb3B5IHVuY2hh bmdlZCBjb2x1bW4gdmFsdWVzIGZyb20gdGhlIG9sZCB0dXBsZSB0byB0aGUgbmV3CiAJCQkJICog dHVwbGUgZm9yIHJlcGxpY2EgaWRlbnRpdHkgZGVwZW5kZW5jeSBjaGVja2luZy4gU2VlCkBAIC0x MjY5LDEyICsxMzI1LDE2IEBAIGhhbmRsZV9kZXBlbmRlbmN5X29uX2NoYW5nZShMb2dpY2FsUmVw TXNnVHlwZSBhY3Rpb24sIFN0cmluZ0luZm8gcywKIAogCQkJY2hlY2tfYW5kX3JlY29yZF9yaV9k ZXBlbmRlbmN5KHJlbGlkLCAmbmV3dHVwLCBuZXdfZGVwZW5kZWRfeGlkLAogCQkJCQkJCQkJCSAg ICZkZXBlbmRzX29uX3hpZHMpOworCQkJY2hlY2tfZGVwZW5kZW5jeV9mb3JfcGFyYWxsZWxfc2Fm ZXR5KHJlbGlkLCBuZXdfZGVwZW5kZWRfeGlkLAorCQkJCQkJCQkJCQkJICZkZXBlbmRzX29uX3hp ZHMpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfREVMRVRFOgogCQkJcmVs aWQgPSBsb2dpY2FscmVwX3JlYWRfZGVsZXRlKCZjaGFuZ2UsICZvbGR0dXApOwogCQkJY2hlY2tf YW5kX3JlY29yZF9yaV9kZXBlbmRlbmN5KHJlbGlkLCAmb2xkdHVwLCBuZXdfZGVwZW5kZWRfeGlk LAogCQkJCQkJCQkJCSAgICZkZXBlbmRzX29uX3hpZHMpOworCQkJY2hlY2tfZGVwZW5kZW5jeV9m b3JfcGFyYWxsZWxfc2FmZXR5KHJlbGlkLCBuZXdfZGVwZW5kZWRfeGlkLAorCQkJCQkJCQkJCQkJ ICZkZXBlbmRzX29uX3hpZHMpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0df VFJVTkNBVEU6CkBAIC0xMjg3LDkgKzEzNDcsMTQgQEAgaGFuZGxlX2RlcGVuZGVuY3lfb25fY2hh bmdlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbiwgU3RyaW5nSW5mbyBzLAogCQkJICogbW9kaWZp ZWQgdGhlIHNhbWUgdGFibGUuCiAJCQkgKi8KIAkJCWZvcmVhY2hfaW50KHRydW5jYXRlZF9yZWxp ZCwgcmVtb3RlX3JlbGlkcykKKwkJCXsKIAkJCQljaGVja19hbmRfcmVjb3JkX3JlbF9kZXBlbmRl bmN5KHRydW5jYXRlZF9yZWxpZCwKIAkJCQkJCQkJCQkJCW5ld19kZXBlbmRlZF94aWQsCiAJCQkJ CQkJCQkJCQkmZGVwZW5kc19vbl94aWRzKTsKKwkJCQljaGVja19kZXBlbmRlbmN5X2Zvcl9wYXJh bGxlbF9zYWZldHkodHJ1bmNhdGVkX3JlbGlkLAorCQkJCQkJCQkJCQkJCSBuZXdfZGVwZW5kZWRf eGlkLAorCQkJCQkJCQkJCQkJCSAmZGVwZW5kc19vbl94aWRzKTsKKwkJCX0KIAogCQkJYnJlYWs7 CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxyZWxhdGlvbi5o IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgKaW5kZXggY2Q4NTIz MzcxNjUuLmIxMDc5ZDNmMmZhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9s b2dpY2FscmVsYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscmVs YXRpb24uaApAQCAtNDUsNiArNDUsMjAgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFJlbE1h cEVudHJ5CiAJICogYXBwbHlpbmcgKHNlZSBjaGVja19kZXBlbmRlbmN5X29uX3JlbCkuCiAJICov CiAJVHJhbnNhY3Rpb25JZCBsYXN0X2RlcGVuZGVkX3hpZDsKKworCS8qCisJICogV2hldGhlciB0 aGUgcmVsYXRpb24gY2FuIGJlIGFwcGxpZWQgaW4gcGFyYWxsZWwgb3Igbm90LiBJdCBpcworCSAq IGRpc3RpbmdsaXNoIHdoZXRoZXIgZGVmaW5lZCB0cmlnZ2VycyBhcmUgdGhlIGltbXV0YWJsZSBv ciBub3QuCisJICoKKwkgKiBUaGVvcmV0aWNhbGx5LCB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSBwYXJh bGxlbGl6YWJpbGl0eSBmb3IgZWFjaCB0eXBlIG9mCisJICogcmVwbGljYXRpb24gbWVzc2FnZXMs IElOU0VSVC9VUERBVEUvREVMRVRFL1RSVU5DQVRFLiBCdXQgaXQgaXMgbm90IGRvbmUKKwkgKiB5 ZXQgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcy4KKwkgKgorCSAqIE5vdGUgdGhh dCB3ZSBkbyBub3QgY2hlY2sgdGhlIHVzZXItZGVmaW5lZCBjb25zdHJhaW50cyBoZXJlLiBQb3N0 Z3JlU1FMCisJICogaGFzIGFscmVhZHkgYXNzdW1lZCB0aGF0IENIRUNLIGNvbnN0cmFpbnRzJyBj b25kaXRpb25zIGFyZSBpbW11dGFibGUgYW5kCisJICogaGVyZSBmb2xsb3dzIHRoZSBydWxlLgor CSAqLworCWNoYXIJCXBhcmFsbGVsX3NhZmU7CiB9IExvZ2ljYWxSZXBSZWxNYXBFbnRyeTsKIAog ZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF9yZWxtYXBfdXBkYXRlKExvZ2ljYWxSZXBSZWxhdGlvbiAq cmVtb3RlcmVsKTsKQEAgLTUyLDYgKzY2LDggQEAgZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF9wYXJ0 bWFwX3Jlc2V0X3JlbG1hcChMb2dpY2FsUmVwUmVsYXRpb24gKnJlbW90ZXJlbCk7CiAKIGV4dGVy biBMb2dpY2FsUmVwUmVsTWFwRW50cnkgKmxvZ2ljYWxyZXBfcmVsX29wZW4oTG9naWNhbFJlcFJl bElkIHJlbW90ZWlkLAogCQkJCQkJCQkJCQkJICBMT0NLTU9ERSBsb2NrbW9kZSk7CitleHRlcm4g dm9pZCBsb2dpY2FscmVwX3JlbF9sb2FkKExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqZW50cnksCisJ CQkJCQkJCUxvZ2ljYWxSZXBSZWxJZCByZW1vdGVpZCwgTE9DS01PREUgbG9ja21vZGUpOwogZXh0 ZXJuIExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqbG9naWNhbHJlcF9wYXJ0aXRpb25fb3BlbihMb2dp Y2FsUmVwUmVsTWFwRW50cnkgKnJvb3QsCiAJCQkJCQkJCQkJCQkJCVJlbGF0aW9uIHBhcnRyZWws IEF0dHJNYXAgKm1hcCk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3JlbF9jbG9zZShMb2dpY2Fs UmVwUmVsTWFwRW50cnkgKnJlbCwKQEAgLTYyLDQgKzc4LDggQEAgZXh0ZXJuIGludAlsb2dpY2Fs cmVwX2dldF9udW1fcmVscyh2b2lkKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfYWxs X3JlbHMoU3RyaW5nSW5mbyBvdXQpOwogZXh0ZXJuIExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqbG9n aWNhbHJlcF9nZXRfcmVsZW50cnkoTG9naWNhbFJlcFJlbElkIHJlbW90ZWlkKTsKIAorI2RlZmlu ZSBMT0dJQ0FMUkVQX1BBUkFMTEVMX1NBRkUJCSdzJworI2RlZmluZSBMT0dJQ0FMUkVQX1BBUkFM TEVMX1JFU1RSSUNURUQJJ3InCisjZGVmaW5lIExPR0lDQUxSRVBfUEFSQUxMRUxfVU5LTk9XTgkJ J3UnCisKICNlbmRpZgkJCQkJCQkvKiBMT0dJQ0FMUkVMQVRJT05fSCAqLwotLSAKMi40My4wCgo= --_010_TY4PR01MB1771875A7A64B139EF8C8D05C94E62TY4PR01MB17718jp_ Content-Type: application/octet-stream; name="v20-0006-Track-dependencies-for-streamed-transactions.patch" Content-Description: v20-0006-Track-dependencies-for-streamed-transactions.patch Content-Disposition: attachment; filename="v20-0006-Track-dependencies-for-streamed-transactions.patch"; size=10613; creation-date="Mon, 15 Jun 2026 11:19:05 GMT"; modification-date="Mon, 15 Jun 2026 11:20:11 GMT" Content-Transfer-Encoding: base64 RnJvbSA1ZmMyYmRkZWM2NTY4YzczMjgzYmY3NjI4Y2ExZmI2YmQzM2U3ZjA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaaGlqaWUgSG91IDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBUdWUsIDkgSnVuIDIwMjYgMTg6NDI6NDggKzA4MDAKU3ViamVjdDogW1BBVENIIHYyMCA2 LzldIFRyYWNrIGRlcGVuZGVuY2llcyBmb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb25zCgpUaGlzIGNv bW1pdCBhbGxvd3MgdHJhY2tpbmcgZGVwZW5kZW5jaWVzIG9mIHN0cmVhbWVkIHRyYW5zYWN0aW9u cy4KClJlZ2FyZGluZyB0aGUgc3RyZWFtaW5nPW9uIGNhc2UsIGRlcGVuZGVuY3kgdHJhY2tpbmcg aXMgZW5hYmxlZCB3aGlsZSBhcHBseWluZwpzcG9vbGVkIGNoYW5nZXMgZnJvbSBmaWxlcy4KCklu IHRoZSBzdHJlYW1pbmc9cGFyYWxsZWwgY2FzZSwgZGVwZW5kZW5jeSB0cmFja2luZyBpcyBwZXJm b3JtZWQgd2hlbiB0aGUgbGVhZGVyCnNlbmRzIGNoYW5nZXMgdG8gcGFyYWxsZWwgd29ya2Vycy4g QXBhcnQgZnJvbSBub24tc3RyZWFtZWQgdHJhbnNhY3Rpb25zLCB0aGUKbGVhZGVyIHdhaXRzIGZv ciBwYXJhbGxlbCB3b3JrZXJzIHRpbGwgdGhlIGFzc2lnbmVkIHRyYW5zYWN0aW9ucyBhcmUgZmlu aXNoZWQgYXQKQ09NTUlUL1BSRVBBUkUvQUJPUlQ7IHRodXMsIHRoZSBYSUQgb2Ygc3RyZWFtZWQg dHJhbnNhY3Rpb25zIGlzIG5vdCBjYWNoZWQgYXMKdGhlIGxhc3RseSBoYW5kbGVkIG9uZS4gQWxz bywgc3RyZWFtZWQgdHJhbnNhY3Rpb25zIGFyZSBub3QgcmVjb3JkZWQgYXMKcGFyYWxsZWxpemVk IHRyYW5zYWN0aW9ucyBiZWNhdXNlIHVwY29taW5nIHdvcmtlcnMgZG8gbm90IGhhdmUgdG8gd2Fp dCBmb3IgdGhlbS4KLS0tCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29y a2VyLmMgfCAgOCArKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMg ICAgICB8IDYyICsrKysrKysrKysrKysrLS0tLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29y a2VyX2ludGVybmFsLmggICAgIHwgIDEgLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDUwX3Bh cmFsbGVsX2FwcGx5LnBsIHwgNjMgKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2Vk LCAxMjAgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwppbmRleCBkYzlh ZTg3ZTg4YS4uNThiZDdhNjk5OTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jCkBAIC0xNjUsNyArMTY1LDkgQEAKICAq IGtleSkgYXMgYW5vdGhlciBvbmdvaW5nIHRyYW5zYWN0aW9uIChzZWUgaGFuZGxlX2RlcGVuZGVu Y3lfb25fY2hhbmdlIGZvcgogICogZGV0YWlscykuIElmIHNvLCB0aGUgbGVhZGVyIHNlbmRzIGEg bGlzdCBvZiBkZXBlbmRlbnQgdHJhbnNhY3Rpb24gSURzIHRvIHRoZQogICogcGFyYWxsZWwgd29y a2VyLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBtdXN0IHdhaXQg Zm9yCi0gKiB0aGVzZSB0cmFuc2FjdGlvbnMgdG8gY29tbWl0IGJlZm9yZSBwcm9jZWVkaW5nLgor ICogdGhlc2UgdHJhbnNhY3Rpb25zIHRvIGNvbW1pdCBiZWZvcmUgcHJvY2VlZGluZy4gSWYgdHJh bnNhY3Rpb25zIGFyZSBzdHJlYW1lZAorICogYnV0IGxlYWRlciBkZWNpZWRlcyBub3QgdG8gYXNz aWduIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMsIGRlcGVuZGVuY2llcyBhcmUKKyAqIHZlcmlmaWVk IHdoZW4gdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4KICAqCiAgKiBUcmFja2luZyBkZXBl bmRlbmNpZXMgaXMgbmVjZXNzYXJ5IGV2ZW4gd2hlbiBjb21taXQgb3JkZXIgaXMgcHJlc2VydmVk LgogICogQ29uc2lkZXIgdHdvIHRyYW5zYWN0aW9uczogVFgtMSAoSU5TRVJUIHJvdyAxKSBhbmQg VFgtMiAoREVMRVRFIHJvdyAxKS4gSWYKQEAgLTE4NjQsNiArMTg2NiwxMCBAQCBwYV9zdHJlYW1f YWJvcnQoTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YSAqYWJvcnRfZGF0YSkKIAlUcmFuc2FjdGlv bklkIHhpZCA9IGFib3J0X2RhdGEtPnhpZDsKIAlUcmFuc2FjdGlvbklkIHN1YnhpZCA9IGFib3J0 X2RhdGEtPnN1YnhpZDsKIAorCS8qIFN0cmVhbWVkIHRyYW5zYWN0aW9ucyB3b24ndCBiZSByZWdp c3RlcmVkICovCisJQXNzZXJ0KCFkc2hhc2hfZmluZChwYXJhbGxlbGl6ZWRfdHhucywgJnhpZCwg ZmFsc2UpICYmCisJCSAgICFkc2hhc2hfZmluZChwYXJhbGxlbGl6ZWRfdHhucywgJnN1YnhpZCwg ZmFsc2UpKTsKKwogCS8qCiAJICogVXBkYXRlIG9yaWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFy dCBzdHJlYW1pbmcgZnJvbSBjb3JyZWN0IHBvc2l0aW9uCiAJICogaW4gY2FzZSBvZiBjcmFzaC4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IGVhNDM3OGZiMWYy Li42NTk1ZTBjZGVlZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5j CkBAIC0xNTM4LDEzICsxNTM4LDIyIEBAIGhhbmRsZV9zdHJlYW1lZF90cmFuc2FjdGlvbihMb2dp Y2FsUmVwTXNnVHlwZSBhY3Rpb24sIFN0cmluZ0luZm8gcykKIAkJY2FzZSBUUkFOU19MRUFERVJf U0VORF9UT19QQVJBTExFTDoKIAkJCUFzc2VydCh3aW5mbyk7CiAKKwkJCS8qCisJCQkgKiBQYXNz IEludmFsaWRUcmFuc2FjdGlvbklkIHRvIHNraXAgZGVwZW5kZW5jeSByZWNvcmRpbmcgZm9yIHRo aXMKKwkJCSAqIGNoYW5nZS4gU3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBhcmUgYXNzdW1lZCBub3Qg dG8gY29uZmxpY3Qgd2l0aAorCQkJICogb3RoZXIgdHJhbnNhY3Rpb25zLCBzbyBzdWJzZXF1ZW50 IHRyYW5zYWN0aW9ucyBkbyBub3QgbmVlZCB0bworCQkJICogd2FpdCBmb3IgdGhlbSB0byBmaW5p c2guCisJCQkgKi8KKwkJCWhhbmRsZV9kZXBlbmRlbmN5X29uX2NoYW5nZShhY3Rpb24sIHMsIElu dmFsaWRUcmFuc2FjdGlvbklkLCB3aW5mbyk7CisKIAkJCS8qCiAJCQkgKiBYWFggVGhlIHB1Ymxp c2hlciBzaWRlIGRvZXNuJ3QgYWx3YXlzIHNlbmQgcmVsYXRpb24vdHlwZSB1cGRhdGUKIAkJCSAq IG1lc3NhZ2VzIGFmdGVyIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24sIHNvIGFsc28gdXBkYXRl IHRoZQogCQkJICogcmVsYXRpb24vdHlwZSBpbiBsZWFkZXIgYXBwbHkgd29ya2VyLiBTZWUgZnVu Y3Rpb24KIAkJCSAqIGNsZWFudXBfcmVsX3N5bmNfY2FjaGUuCiAJCQkgKi8KLQkJCWlmIChwYV9z ZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSkpCisJCQlpZiAoIXdpbmZvLT5zZXJpYWxp emVfY2hhbmdlcyAmJgorCQkJCXBhX3NlbmRfZGF0YSh3aW5mbywgcy0+bGVuLCBzLT5kYXRhKSkK IAkJCQlyZXR1cm4gKGFjdGlvbiAhPSBMT0dJQ0FMX1JFUF9NU0dfUkVMQVRJT04gJiYKIAkJCQkJ CWFjdGlvbiAhPSBMT0dJQ0FMX1JFUF9NU0dfVFlQRSk7CiAKQEAgLTI2NzUsNiArMjY4NCwxMyBA QCBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogCQkJYXBwbHlfc3Bv b2xlZF9tZXNzYWdlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0LAogCQkJCQkJ CQkgICBwcmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOwogCisJCQkv KiBXYWl0IHVudGlsIHRoZSBsYXN0IHRyYW5zYWN0aW9uIGZpbmlzaGVzICovCisJCQlpZiAoVHJh bnNhY3Rpb25JZElzVmFsaWQobGFzdF9wYXJhbGxlbGl6ZWRfcmVtb3RlX3hpZCkpCisJCQl7CisJ CQkJcGFfd2FpdF9mb3JfZGVwZW5kZWRfdHJhbnNhY3Rpb24obGFzdF9wYXJhbGxlbGl6ZWRfcmVt b3RlX3hpZCk7CisJCQkJbGFzdF9wYXJhbGxlbGl6ZWRfcmVtb3RlX3hpZCA9IEludmFsaWRUcmFu c2FjdGlvbklkOworCQkJfQorCiAJCQkvKiBNYXJrIHRoZSB0cmFuc2FjdGlvbiBhcyBwcmVwYXJl ZC4gKi8KIAkJCWFwcGx5X2hhbmRsZV9wcmVwYXJlX2ludGVybmFsKCZwcmVwYXJlX2RhdGEpOwog CkBAIC0yNjk4LDYgKzI3MTQsMTIgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmlu Z0luZm8gcykKIAkJY2FzZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKIAkJCUFzc2Vy dCh3aW5mbyk7CiAKKwkJCS8qCisJCQkgKiBCdWlsZCBhIGRlcGVuZGVuY3kgYmV0d2VlbiB0aGlz IHRyYW5zYWN0aW9uIGFuZCB0aGUgbGFzdGx5CisJCQkgKiBjb21taXR0ZWQgdHJhbnNhY3Rpb24g dG8gcHJlc2VydmUgdGhlIGNvbW1pdCBvcmRlci4KKwkJCSAqLworCQkJYnVpbGRfZGVwZW5kZW5j eV93aXRoX2xhc3RfY29tbWl0dGVkX3R4bih3aW5mbyk7CisKIAkJCWlmIChwYV9zZW5kX2RhdGEo d2luZm8sIHMtPmxlbiwgcy0+ZGF0YSkpCiAJCQl7CiAJCQkJLyogRmluaXNoIHByb2Nlc3Npbmcg dGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4gKi8KQEAgLTI3NjQsNiArMjc4NiwxMSBAQCBhcHBs eV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogCiAJcGdzdGF0X3JlcG9ydF9z dGF0KGZhbHNlKTsKIAorCS8qCisJICogTm8gbmVlZCB0byB1cGRhdGUgdGhlIGxhc3RfcGFyYWxs ZWxpemVkX3JlbW90ZV94aWQgaGVyZSBiZWNhdXNlIGxlYWRlcgorCSAqIHdvcmtlciBhbHdheXMg d2FpdCB1bnRpbCBzdHJlYW1lZCB0cmFuc2FjdGlvbnMgZmluaXNoLgorCSAqLworCiAJLyoKIAkg KiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFs bGVsLCBhcyB3ZWxsIGFzCiAJICogYW55IG5ld2x5IGFkZGVkIHRhYmxlcyBvciBzZXF1ZW5jZXMu CkBAIC0yODc3LDE3ICsyOTA0LDggQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChTdHJpbmdJ bmZvIHMpCiAKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHN0cmVhbV94aWQsIEludmFs aWRYTG9nUmVjUHRyKTsKIAotCS8qCi0JICogVHJ5IHRvIGFsbG9jYXRlIGEgd29ya2VyIGZvciB0 aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgotCSAqCi0JICogVE9ETzogU3VwcG9ydCBhc3NpZ25p bmcgc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyB0byBwYXJhbGxlbCBhcHBseSB3b3JrZXJzCi0JICog ZXZlbiB3aGVuIG5vbi1zdHJlYW1pbmcgdHJhbnNhY3Rpb25zIGFyZSBydW5uaW5nIGFuZCBiZXR0 ZXIgZGVwZW5kZW5jeQotCSAqIGhhbmRsaW5nIGJldHdlZW4gc3RyZWFtaW5nIGFuZCBub24tc3Ry ZWFtaW5nIHRyYW5zYWN0aW9ucy4KLQkgKi8KLQlpZiAoZmlyc3Rfc2VnbWVudCAmJgotCQlhbV9s ZWFkZXJfYXBwbHlfd29ya2VyKCkgJiYKLQkJKCFUcmFuc2FjdGlvbklkSXNWYWxpZChsYXN0X3Bh cmFsbGVsaXplZF9yZW1vdGVfeGlkKSB8fAotCQkgcGFfdHJhbnNhY3Rpb25fY29tbWl0dGVkKGxh c3RfcGFyYWxsZWxpemVkX3JlbW90ZV94aWQpKSkKKwkvKiBUcnkgdG8gYWxsb2NhdGUgYSB3b3Jr ZXIgZm9yIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uICovCisJaWYgKGZpcnN0X3NlZ21lbnQp CiAJCXBhX2FsbG9jYXRlX3dvcmtlcihzdHJlYW1feGlkLCB0cnVlKTsKIAogCWFwcGx5X2FjdGlv biA9IGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oc3RyZWFtX3hpZCwgJndpbmZvKTsKQEAg LTM1NTEsNiArMzU2OSwxMyBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZv IHMpCiAJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFt X2ZpbGVzZXQsIHhpZCwKIAkJCQkJCQkJICAgY29tbWl0X2RhdGEuY29tbWl0X2xzbik7CiAKKwkJ CS8qIFdhaXQgdW50aWwgdGhlIGxhc3QgdHJhbnNhY3Rpb24gZmluaXNoZXMgKi8KKwkJCWlmIChU cmFuc2FjdGlvbklkSXNWYWxpZChsYXN0X3BhcmFsbGVsaXplZF9yZW1vdGVfeGlkKSkKKwkJCXsK KwkJCQlwYV93YWl0X2Zvcl9kZXBlbmRlZF90cmFuc2FjdGlvbihsYXN0X3BhcmFsbGVsaXplZF9y ZW1vdGVfeGlkKTsKKwkJCQlsYXN0X3BhcmFsbGVsaXplZF9yZW1vdGVfeGlkID0gSW52YWxpZFRy YW5zYWN0aW9uSWQ7CisJCQl9CisKIAkJCWFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoJmNv bW1pdF9kYXRhKTsKIAogCQkJLyogVW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hh bmdlcyBhbmQgc3VieGFjdCBpbmZvLiAqLwpAQCAtMzU2Miw2ICszNTg3LDE5IEBAIGFwcGx5X2hh bmRsZV9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gcykKIAkJY2FzZSBUUkFOU19MRUFERVJfU0VO RF9UT19QQVJBTExFTDoKIAkJCUFzc2VydCh3aW5mbyk7CiAKKwkJCS8qCisJCQkgKiBBcGFydCBm cm9tIG5vbi1zdHJlYW1pbmcgY2FzZSwgbm8gbmVlZCB0byBtYXJrIHRoaXMgdHJhbnNhY3Rpb24K KwkJCSAqIGFzIHBhcmFsbGVsaXplZC4gQmVjYXVzZSB0aGUgbGVhZGVyIHdhaXRzIHVudGlsIHRo ZSBzdHJlYW1lZAorCQkJICogdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIHRodXMgY29tbWl0IG9y ZGVyaW5nIGlzIGFsd2F5cworCQkJICogcHJlc2VydmVkLgorCQkJICovCisKKwkJCS8qCisJCQkg KiBCdWlsZCBhIGRlcGVuZGVuY3kgYmV0d2VlbiB0aGlzIHRyYW5zYWN0aW9uIGFuZCB0aGUgbGFz dGx5CisJCQkgKiBjb21taXR0ZWQgdHJhbnNhY3Rpb24gdG8gcHJlc2VydmUgdGhlIGNvbW1pdCBv cmRlci4KKwkJCSAqLworCQkJYnVpbGRfZGVwZW5kZW5jeV93aXRoX2xhc3RfY29tbWl0dGVkX3R4 bih3aW5mbyk7CisKIAkJCWlmIChwYV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSkp CiAJCQl7CiAJCQkJLyogRmluaXNoIHByb2Nlc3NpbmcgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlv bi4gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5h bC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKaW5kZXggMDJh MTY1Y2NjMGQuLjNkZGU4OTlmNDY1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi93b3JrZXJfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJf aW50ZXJuYWwuaApAQCAtMzcwLDcgKzM3MCw2IEBAIGV4dGVybiB2b2lkIHBhX3N3aXRjaF90b19w YXJ0aWFsX3NlcmlhbGl6ZShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sCiBleHRlcm4g dm9pZCBwYV9zZXRfeGFjdF9zdGF0ZShQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3c2hhcmVk LAogCQkJCQkJCSAgUGFyYWxsZWxUcmFuc1N0YXRlIHhhY3Rfc3RhdGUpOwogZXh0ZXJuIHZvaWQg cGFfc2V0X3N0cmVhbV9hcHBseV93b3JrZXIoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZv KTsKLQogZXh0ZXJuIHZvaWQgcGFfc3RhcnRfc3VidHJhbnMoVHJhbnNhY3Rpb25JZCBjdXJyZW50 X3hpZCwKIAkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgdG9wX3hpZCk7CiBleHRlcm4gdm9pZCBwYV9y ZXNldF9zdWJ0cmFucyh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzA1MF9wYXJhbGxlbF9hcHBseS5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzA1MF9wYXJh bGxlbF9hcHBseS5wbAppbmRleCAwNDk0YWZhNDE4Yy4uMzU4YzdiN2I3ZTEgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzA1MF9wYXJhbGxlbF9hcHBseS5wbAorKysgYi9zcmMv dGVzdC9zdWJzY3JpcHRpb24vdC8wNTBfcGFyYWxsZWxfYXBwbHkucGwKQEAgLTM0MCw0ICszNDAs NjcgQEAgJHJlc3VsdCA9CiAgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KDEpIEZST00gcmVncmVzc190YWIiKTsKIGlzICgkcmVzdWx0LCAyMCwg J2luc2VydHMgYXJlIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlcicpOwogCisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHRoYXQgc3RyZWFt aW5nIHRyYW5zYWN0aW9ucyByZXNwZWN0IGNvbW1pdCBvcmRlciBwcmVzZXJ2YXRpb24gd2hlbgor IyBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBhcmUgYmVpbmcgYXBwbGllZCBpbiBwYXJhbGxl bCB3b3JrZXJzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKworJG5vZGVfcHVibGlzaGVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywK KyAgICJsb2dpY2FsX2RlY29kaW5nX3dvcmtfbWVtID0gNjRrQiIpOworJG5vZGVfcHVibGlzaGVy LT5yZWxvYWQ7CisKKyMgVHJ1bmNhdGUgdGhlIGRhdGEgZm9yIHVwY29taW5nIHRlc3RzCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgVEFCTEUgcmVncmVz c190YWI7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3JlZ3Jlc3Nfc3Vi Jyk7CisKKyMgQXR0YWNoIHRoZSBpbmplY3Rpb25fcG9pbnQgYWdhaW4KKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19hdHRh Y2goJ3BhcmFsbGVsLXdvcmtlci1iZWZvcmUtY29tbWl0Jywnd2FpdCcpOyIKKyk7CisKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgIklOU0VSVCBJTlRPIHJlZ3Jl c3NfdGFiIFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDcxLCA4MCksICd0ZXN0Jyk7Iik7CisKKyMg V2FpdCB1bnRpbCB0aGUgcGFyYWxsZWwgd29ya2VyIGVudGVycyB0aGUgaW5qZWN0aW9uIHBvaW50 LgorJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfZXZlbnQoJ2xvZ2ljYWwgcmVwbGljYXRpb24g cGFyYWxsZWwgd29ya2VyJywKKwkncGFyYWxsZWwtd29ya2VyLWJlZm9yZS1jb21taXQnKTsKKwor IyBSdW4gYSB0cmFuc2FjdGlvbiB3aGljaCB3b3VsZCBiZSBzdHJlYW1lZAorbXkgJGggPSAkbm9k ZV9wdWJsaXNoZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnLCBvbl9lcnJvcl9zdG9wID0+ IDApOworCiskb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworJGgtPnF1 ZXJ5X3NhZmUoCisJcXsKK0JFR0lOOworVVBEQVRFIHJlZ3Jlc3NfdGFiIFNFVCB2YWx1ZSA9ICdz dHJlYW1lZC11cGRhdGVkJyBXSEVSRSBpZCBCRVRXRUVOIDcxIEFORCA4MDsKK0lOU0VSVCBJTlRP IHJlZ3Jlc3NfdGFiIFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDEwMCwgNTEwMCksICdzdHJlYW1l ZCcpOworfSk7CisKKyMgVmVyaWZ5IHRoZSBkZXBlbmRlbmN5IGlzIGRldGVjdGVkIGZvciB0aGUg ZGVsZXRlCiskc3RyID0gJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyL2ZvdW5kIGNv bmZsaWN0aW5nIHJlcGxpY2EgaWRlbnRpdHkgY2hhbmdlIG9uIHRhYmxlIFsxLTldWzAtOV0rIGZy b20gKFsxLTldWzAtOV0rKS8sICRvZmZzZXQpOworJHhpZCA9ICRzdHIgPX4gL2ZvdW5kIGNvbmZs aWN0aW5nIHJlcGxpY2EgaWRlbnRpdHkgY2hhbmdlIG9uIHRhYmxlIFsxLTldWzAtOV0rIGZyb20g KFsxLTldWzAtOV0rKS87CisKKyMgVmVyaWZ5IHRoZSBwYXJhbGxlbCB3b3JrZXIgd2FpdHMgZm9y IHRoZSBzYW1lIHRyYW5zYWN0aW9uCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIv d2FpdCBmb3IgZGVwZW5kZWQgeGlkICR4aWQvLCAkb2Zmc2V0KTsKKworb2soMSwgInJlcGxpY2Eg aWRlbnRpdHkgZGVwZW5kZW5jeSBmcm9tIHN0cmVhbWVkIHR4biBkZXRlY3RlZCBmb3IgcGFyYWxs ZWwgYXBwbHkiKTsKKworIyBXYWtldXAgdGhlIHBhcmFsbGVsIHdvcmtlcgorJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworICAgIFNFTEVDVCBpbmplY3Rpb25fcG9p bnRzX2RldGFjaCgncGFyYWxsZWwtd29ya2VyLWJlZm9yZS1jb21taXQnKTsKKyAgICBTRUxFQ1Qg aW5qZWN0aW9uX3BvaW50c193YWtldXAoJ3BhcmFsbGVsLXdvcmtlci1iZWZvcmUtY29tbWl0Jyk7 CitdKTsKKworIyBWZXJpZnkgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uIGNhbiBiZSBhcHBsaWVk Ciskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIvZmluaXNoIHdhaXRpbmcgZm9yIGRl cGVuZGVkIHhpZCAkeGlkLywgJG9mZnNldCk7CisKKyRoLT5xdWVyeV9zYWZlKCJDT01NSVQ7Iik7 CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgncmVncmVzc19zdWInKTsKKwor JHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KDEpIEZST00gcmVncmVzc190YWIiKTsKK2lzICgkcmVzdWx0LCA1MDExLCAnaW5z ZXJ0cyBhcmUgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyJyk7CisKIGRvbmVfdGVzdGluZygpOwot LSAKMi40My4wCgo= --_010_TY4PR01MB1771875A7A64B139EF8C8D05C94E62TY4PR01MB17718jp_ Content-Type: application/octet-stream; name="v20-0005-support-2PC.patch" Content-Description: v20-0005-support-2PC.patch Content-Disposition: attachment; filename="v20-0005-support-2PC.patch"; size=14104; creation-date="Mon, 15 Jun 2026 11:19:05 GMT"; modification-date="Mon, 15 Jun 2026 11:20:11 GMT" Content-Transfer-Encoding: base64 RnJvbSA2YWUyYmI3ZWQ3OWEzYTRiNDQ0N2U3NWRjMzY1N2MxODc5ZjYwNmMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaaGlqaWUgSG91IDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBUdWUsIDkgSnVuIDIwMjYgMTc6MzY6MzMgKzA4MDAKU3ViamVjdDogW1BBVENIIHYyMCA1 LzldIHN1cHBvcnQgMlBDCgpUaGlzIHBhdGNoIGFsbG93cyB0aGUgUFJFUEFSRSB0cmFuc2FjdGlv biB0byBiZSBhcHBsaWVkIGluIHBhcmFsbGVsLiBQYXJhbGxlbAphcHBseSB3b3JrZXJzIGFyZSBh c3NpZ25lZCB0byBhIHRyYW5zYWN0aW9uIHdoZW4gQkVHSU5fUFJFUEFSRSBpcyByZWNlaXZlZC4g VGhpcwpwYXJ0IGFuZCB0aGUgZGVwZW5kZW5jeS13YWl0aW5nIG1lY2hhbmlzbSBhcmUgdGhlIHNh bWUgYXMgYSBub3JtYWwgdHJhbnNhY3Rpb24uCgpBIHBhcmFsbGVsIHdvcmtlciBjYW4gYmUgZnJl ZWQgYWZ0ZXIgaXQgaGFuZGxlcyBhIFBSRVBBUkUgbWVzc2FnZS4gVGhlIHByZXBhcmVkCnRyYW5z YWN0aW9uIGNhbiBiZSBkZWxldGVkIGZyb20gcGFyYWxsZWxpemVkX3R4bnMgYXQgdGhhdCB0aW1l OyB0aGUgdXBjb21pbmcKdHJhbnNhY3Rpb25zIHdpbGwgd2FpdCB1bnRpbCB0aGVuLgoKVGhlIGxl YWRlciBhcHBseSB3b3JrZXIgcmVzb2x2ZXMgQ09NTUlUIFBSRVBBUkVEL1JPTExCQUNLIFBSRVBB UkVELiBTaW5jZSBpdCBjYW4KYmUgc2VyaWFsaXplZCBhdXRvbWF0aWNhbGx5LCBpdCBkb2VzIG5v dCBhZGQgdGhlIHRyYW5zYWN0aW9uIHRvIHBhcmFsbGVsaXplZF90eG5zLgotLS0KIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICB8IDIxOCArKysrKysrKysrKysr KystLS0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzA1MF9wYXJhbGxlbF9hcHBseS5wbCB8ICA3 NCArKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMjYzIGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IGQ5YmUw ZTM2MGRiLi5lYTQzNzhmYjFmMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dv cmtlci5jCkBAIC04MDcsNiArODA3LDE0IEBAIGRlbGV0ZV9yZXBsaWNhX2lkZW50aXR5X2VudHJp ZXNfZm9yX3R4bnMoTGlzdCAqY29tbWl0dGVkX3hpZHMpCiAJaWYgKCFjb21taXR0ZWRfeGlkcykK IAkJcmV0dXJuOwogCisJLyoKKwkgKiBTa2lwIGlmIHRoZSByZXBsaWNhX2lkZW50aXR5X3RhYmxl IGlzIG5vdCBpbml0aWFsaXplZCB5ZXQuIFRoaXMgY2FuCisJICogaGFwcGVuIGlmIHRoZSBlbXB0 eSB0cmFuc2FjdGlvbiB3YXMgcmVwbGljYXRlZCBhbmQgYSBwYXJhbGxlbCBhcHBseQorCSAqIHdv cmtlciB3YXMgbGF1bmNoZWQuIFNlZSBjb21tZW50cyBpbiBhcHBseV9oYW5kbGVfcHJlcGFyZSgp LgorCSAqLworCWlmICghcmVwbGljYV9pZGVudGl0eV90YWJsZSkKKwkJcmV0dXJuOworCiAJcmVw bGljYV9pZGVudGl0eV9zdGFydF9pdGVyYXRlKHJlcGxpY2FfaWRlbnRpdHlfdGFibGUsICZpKTsK IAl3aGlsZSAoKHJpZW50cnkgPSByZXBsaWNhX2lkZW50aXR5X2l0ZXJhdGUocmVwbGljYV9pZGVu dGl0eV90YWJsZSwgJmkpKSAhPSBOVUxMKQogCXsKQEAgLTIyMjQsNiArMjIzMiw4IEBAIHN0YXRp YyB2b2lkCiBhcHBseV9oYW5kbGVfYmVnaW5fcHJlcGFyZShTdHJpbmdJbmZvIHMpCiB7CiAJTG9n aWNhbFJlcFByZXBhcmVkVHhuRGF0YSBiZWdpbl9kYXRhOworCVBhcmFsbGVsQXBwbHlXb3JrZXJJ bmZvICp3aW5mbzsKKwlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKIAogCS8qIFRhYmxl c3luYyBzaG91bGQgbmV2ZXIgcmVjZWl2ZSBwcmVwYXJlLiAqLwogCWlmIChhbV90YWJsZXN5bmNf d29ya2VyKCkpCkBAIC0yMjM1LDEyICsyMjQ1LDU0IEBAIGFwcGx5X2hhbmRsZV9iZWdpbl9wcmVw YXJlKFN0cmluZ0luZm8gcykKIAlBc3NlcnQoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHN0cmVhbV94 aWQpKTsKIAogCWxvZ2ljYWxyZXBfcmVhZF9iZWdpbl9wcmVwYXJlKHMsICZiZWdpbl9kYXRhKTsK LQlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KGJlZ2luX2RhdGEueGlkLCBiZWdpbl9kYXRh LnByZXBhcmVfbHNuKTsKKworCXJlbW90ZV94aWQgPSBiZWdpbl9kYXRhLnhpZDsKKworCXNldF9h cHBseV9lcnJvcl9jb250ZXh0X3hhY3QocmVtb3RlX3hpZCwgYmVnaW5fZGF0YS5wcmVwYXJlX2xz bik7CiAKIAlyZW1vdGVfZmluYWxfbHNuID0gYmVnaW5fZGF0YS5wcmVwYXJlX2xzbjsKIAogCW1h eWJlX3N0YXJ0X3NraXBwaW5nX2NoYW5nZXMoYmVnaW5fZGF0YS5wcmVwYXJlX2xzbik7CiAKKwlw YV9hbGxvY2F0ZV93b3JrZXIocmVtb3RlX3hpZCwgZmFsc2UpOworCisJYXBwbHlfYWN0aW9uID0g Z2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbihyZW1vdGVfeGlkLCAmd2luZm8pOworCisJZWxv ZyhERUJVRzEsICJuZXcgcmVtb3RlX3hpZCAldSIsIHJlbW90ZV94aWQpOworCXN3aXRjaCAoYXBw bHlfYWN0aW9uKQorCXsKKwkJY2FzZSBUUkFOU19MRUFERVJfQVBQTFk6CisJCQlicmVhazsKKwor CQljYXNlIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMOgorCQkJQXNzZXJ0KHdpbmZvKTsK KworCQkJaWYgKHBhX3NlbmRfZGF0YSh3aW5mbywgcy0+bGVuLCBzLT5kYXRhKSkKKwkJCXsKKwkJ CQlwYV9zZXRfc3RyZWFtX2FwcGx5X3dvcmtlcih3aW5mbyk7CisJCQkJYnJlYWs7CisJCQl9CisK KwkJCS8qCisJCQkgKiBUT0RPOiBTdXBwb3J0IHN3aXRjaGluZyB0byBQQVJUSUFMX1NFUklBTEla RSBtb2RlIHdoZW4gdGhlIHNlbmQKKwkJCSAqIGJ1ZmZlciBiZWNvbWVzIGZ1bGwuCisJCQkgKi8K KwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BS RVJFUVVJU0lURV9TVEFURSksCisJCQkJCWVycm1zZygiY291bGQgbm90IHNlbmQgZGF0YSB0byB0 aGUgbG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIiKSk7CisJCQlicmVh azsKKworCQljYXNlIFRSQU5TX1BBUkFMTEVMX0FQUExZOgorCQkJLyogSG9sZCB0aGUgbG9jayB1 bnRpbCB0aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbi4gKi8KKwkJCXBhX2xvY2tfdHJhbnNhY3Rp b24oTXlQYXJhbGxlbFNoYXJlZC0+eGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwkJCXBhX3Nl dF94YWN0X3N0YXRlKE15UGFyYWxsZWxTaGFyZWQsIFBBUkFMTEVMX1RSQU5TX1NUQVJURUQpOwor CQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGFwcGx5 IGFjdGlvbjogJWQiLCAoaW50KSBhcHBseV9hY3Rpb24pOworCQkJYnJlYWs7CisJfQorCiAJaW5f cmVtb3RlX3RyYW5zYWN0aW9uID0gdHJ1ZTsKIAogCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RB VEVfUlVOTklORywgTlVMTCk7CkBAIC0yMjkwLDYgKzIzNDIsOCBAQCBzdGF0aWMgdm9pZAogYXBw bHlfaGFuZGxlX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogewogCUxvZ2ljYWxSZXBQcmVwYXJlZFR4 bkRhdGEgcHJlcGFyZV9kYXRhOworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKKwlU cmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKIAogCWxvZ2ljYWxyZXBfcmVhZF9wcmVwYXJl KHMsICZwcmVwYXJlX2RhdGEpOwogCkBAIC0yMzAwLDM2ICsyMzU0LDEzMSBAQCBhcHBseV9oYW5k bGVfcHJlcGFyZShTdHJpbmdJbmZvIHMpCiAJCQkJCQkJCSBMU05fRk9STUFUX0FSR1MocHJlcGFy ZV9kYXRhLnByZXBhcmVfbHNuKSwKIAkJCQkJCQkJIExTTl9GT1JNQVRfQVJHUyhyZW1vdGVfZmlu YWxfbHNuKSkpKTsKIAotCS8qCi0JICogVW5saWtlIGNvbW1pdCwgaGVyZSwgd2UgYWx3YXlzIHBy ZXBhcmUgdGhlIHRyYW5zYWN0aW9uIGV2ZW4gdGhvdWdoIG5vCi0JICogY2hhbmdlIGhhcyBoYXBw ZW5lZCBpbiB0aGlzIHRyYW5zYWN0aW9uIG9yIGFsbCBjaGFuZ2VzIGFyZSBza2lwcGVkLiBJdAot CSAqIGlzIGRvbmUgdGhpcyB3YXkgYmVjYXVzZSBhdCBjb21taXQgcHJlcGFyZWQgdGltZSwgd2Ug d29uJ3Qga25vdyB3aGV0aGVyCi0JICogd2UgaGF2ZSBza2lwcGVkIHByZXBhcmluZyBhIHRyYW5z YWN0aW9uIGJlY2F1c2Ugb2YgdGhvc2UgcmVhc29ucy4KLQkgKgotCSAqIFhYWCwgV2UgY2FuIG9w dGltaXplIHN1Y2ggdGhhdCBhdCBjb21taXQgcHJlcGFyZWQgdGltZSwgd2UgZmlyc3QgY2hlY2sK LQkgKiB3aGV0aGVyIHdlIGhhdmUgcHJlcGFyZWQgdGhlIHRyYW5zYWN0aW9uIG9yIG5vdCBidXQg dGhhdCBkb2Vzbid0IHNlZW0KLQkgKiB3b3J0aHdoaWxlIGJlY2F1c2Ugc3VjaCBjYXNlcyBzaG91 bGRuJ3QgYmUgY29tbW9uLgotCSAqLwotCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKwlhcHBs eV9hY3Rpb24gPSBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKHJlbW90ZV94aWQsICZ3aW5m byk7CiAKLQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRhKTsKKwlz d2l0Y2ggKGFwcGx5X2FjdGlvbikKKwl7CisJCWNhc2UgVFJBTlNfTEVBREVSX0FQUExZOgogCi0J ZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKLQlw Z3N0YXRfcmVwb3J0X3N0YXQoZmFsc2UpOworCQkJLyoKKwkJCSAqIFVubGlrZSBjb21taXQsIGhl cmUsIHdlIGFsd2F5cyBwcmVwYXJlIHRoZSB0cmFuc2FjdGlvbiBldmVuCisJCQkgKiB0aG91Z2gg bm8gY2hhbmdlIGhhcyBoYXBwZW5lZCBpbiB0aGlzIHRyYW5zYWN0aW9uIG9yIGFsbAorCQkJICog Y2hhbmdlcyBhcmUgc2tpcHBlZC4gSXQgaXMgZG9uZSB0aGlzIHdheSBiZWNhdXNlIGF0IGNvbW1p dAorCQkJICogcHJlcGFyZWQgdGltZSwgd2Ugd29uJ3Qga25vdyB3aGV0aGVyIHdlIGhhdmUgc2tp cHBlZCBwcmVwYXJpbmcKKwkJCSAqIGEgdHJhbnNhY3Rpb24gYmVjYXVzZSBvZiB0aG9zZSByZWFz b25zLgorCQkJICoKKwkJCSAqIFhYWCwgV2UgY2FuIG9wdGltaXplIHN1Y2ggdGhhdCBhdCBjb21t aXQgcHJlcGFyZWQgdGltZSwgd2UKKwkJCSAqIGZpcnN0IGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBw cmVwYXJlZCB0aGUgdHJhbnNhY3Rpb24gb3Igbm90IGJ1dAorCQkJICogdGhhdCBkb2Vzbid0IHNl ZW0gd29ydGh3aGlsZSBiZWNhdXNlIHN1Y2ggY2FzZXMgc2hvdWxkbid0IGJlCisJCQkgKiBjb21t b24uCisJCQkgKi8KKwkJCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAotCS8qCi0JICogSXQg aXMgb2theSBub3QgdG8gc2V0IHRoZSBsb2NhbF9lbmQgTFNOIGZvciB0aGUgcHJlcGFyZSBiZWNh dXNlIHdlCi0JICogYWx3YXlzIGZsdXNoIHRoZSBwcmVwYXJlIHJlY29yZC4gU28sIHdlIGNhbiBz ZW5kIHRoZSBhY2tub3dsZWRnbWVudCBvZgotCSAqIHRoZSByZW1vdGVfZW5kIExTTiBhcyBzb29u IGFzIHByZXBhcmUgaXMgZmluaXNoZWQuCi0JICoKLQkgKiBYWFggRm9yIHRoZSBzYWtlIG9mIGNv bnNpc3RlbmN5IHdpdGggY29tbWl0LCB3ZSBjb3VsZCBoYXZlIHNldCBpdCB3aXRoCi0JICogdGhl IExTTiBvZiBwcmVwYXJlIGJ1dCBhcyBvZiBub3cgd2UgZG9uJ3QgdHJhY2sgdGhhdCB2YWx1ZSBz aW1pbGFyIHRvCi0JICogWGFjdExhc3RDb21taXRFbmQsIGFuZCBhZGRpbmcgaXQgZm9yIHRoaXMg cHVycG9zZSBkb2Vzbid0IHNlZW1zIHdvcnRoCi0JICogaXQuCi0JICovCi0Jc3RvcmVfZmx1c2hf cG9zaXRpb24ocHJlcGFyZV9kYXRhLmVuZF9sc24sIEludmFsaWRYTG9nUmVjUHRyLAotCQkJCQkJ IEludmFsaWRUcmFuc2FjdGlvbklkKTsKKwkJCS8qIFdhaXQgdW50aWwgdGhlIGxhc3QgdHJhbnNh Y3Rpb24gZmluaXNoZXMgKi8KKwkJCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZChsYXN0X3BhcmFs bGVsaXplZF9yZW1vdGVfeGlkKSkKKwkJCXsKKwkJCQlwYV93YWl0X2Zvcl9kZXBlbmRlZF90cmFu c2FjdGlvbihsYXN0X3BhcmFsbGVsaXplZF9yZW1vdGVfeGlkKTsKKwkJCQlsYXN0X3BhcmFsbGVs aXplZF9yZW1vdGVfeGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJCQl9CisKKwkJCWFwcGx5 X2hhbmRsZV9wcmVwYXJlX2ludGVybmFsKCZwcmVwYXJlX2RhdGEpOworCisJCQllbmRfcmVwbGlj YXRpb25fc3RlcCgpOworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCQlwZ3N0YXRf cmVwb3J0X3N0YXQoZmFsc2UpOworCisJCQkvKgorCQkJICogSXQgaXMgb2theSBub3QgdG8gc2V0 IHRoZSBsb2NhbF9lbmQgTFNOIGZvciB0aGUgcHJlcGFyZSBiZWNhdXNlCisJCQkgKiB3ZSBhbHdh eXMgZmx1c2ggdGhlIHByZXBhcmUgcmVjb3JkLiBTbywgd2UgY2FuIHNlbmQgdGhlCisJCQkgKiBh Y2tub3dsZWRnbWVudCBvZiB0aGUgcmVtb3RlX2VuZCBMU04gYXMgc29vbiBhcyBwcmVwYXJlIGlz CisJCQkgKiBmaW5pc2hlZC4KKwkJCSAqCisJCQkgKiBYWFggRm9yIHRoZSBzYWtlIG9mIGNvbnNp c3RlbmN5IHdpdGggY29tbWl0LCB3ZSBjb3VsZCBoYXZlIHNldAorCQkJICogaXQgd2l0aCB0aGUg TFNOIG9mIHByZXBhcmUgYnV0IGFzIG9mIG5vdyB3ZSBkb24ndCB0cmFjayB0aGF0CisJCQkgKiB2 YWx1ZSBzaW1pbGFyIHRvIFhhY3RMYXN0Q29tbWl0RW5kLCBhbmQgYWRkaW5nIGl0IGZvciB0aGlz CisJCQkgKiBwdXJwb3NlIGRvZXNuJ3Qgc2VlbXMgd29ydGggaXQuCisJCQkgKi8KKwkJCXN0b3Jl X2ZsdXNoX3Bvc2l0aW9uKHByZXBhcmVfZGF0YS5lbmRfbHNuLCBJbnZhbGlkWExvZ1JlY1B0ciwK KwkJCQkJCQkJIEludmFsaWRUcmFuc2FjdGlvbklkKTsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBU UkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCS8q CisJCQkgKiBNYXJrIHRoaXMgdHJhbnNhY3Rpb24gYXMgcGFyYWxsZWxpemVkLiBUaGlzIGVuc3Vy ZXMgdGhhdAorCQkJICogdXBjb21pbmcgdHJhbnNhY3Rpb25zIHdhaXQgdW50aWwgdGhpcyB0cmFu c2FjdGlvbiBpcyBjb21taXR0ZWQuCisJCQkgKi8KKwkJCXBhX2FkZF9wYXJhbGxlbGl6ZWRfdHJh bnNhY3Rpb24ocmVtb3RlX3hpZCk7CisKKwkJCS8qCisJCQkgKiBCdWlsZCBhIGRlcGVuZGVuY3kg YmV0d2VlbiB0aGlzIHRyYW5zYWN0aW9uIGFuZCB0aGUgbGFzdGx5CisJCQkgKiBjb21taXR0ZWQg dHJhbnNhY3Rpb24gdG8gcHJlc2VydmUgdGhlIGNvbW1pdCBvcmRlci4KKwkJCSAqLworCQkJYnVp bGRfZGVwZW5kZW5jeV93aXRoX2xhc3RfY29tbWl0dGVkX3R4bih3aW5mbyk7CisKKwkJCWlmIChw YV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSkpCisJCQl7CisJCQkJLyogQ2FjaGUg dGhlIHJlbW90ZV94aWQgKi8KKwkJCQlsYXN0X3BhcmFsbGVsaXplZF9yZW1vdGVfeGlkID0gcmVt b3RlX3hpZDsKKworCQkJCS8qIEZpbmlzaCBwcm9jZXNzaW5nIHRoZSB0cmFuc2FjdGlvbi4gKi8K KwkJCQlwYV94YWN0X2ZpbmlzaCh3aW5mbywgcHJlcGFyZV9kYXRhLmVuZF9sc24pOworCQkJCWJy ZWFrOworCQkJfQorCisJCQkvKgorCQkJICogVE9ETzogU3VwcG9ydCBzd2l0Y2hpbmcgdG8gUEFS VElBTF9TRVJJQUxJWkUgbW9kZSB3aGVuIHRoZSBzZW5kCisJCQkgKiBidWZmZXIgYmVjb21lcyBm dWxsLgorCQkJICovCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfT0JK RUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQllcnJtc2coImNvdWxkIG5vdCBz ZW5kIGRhdGEgdG8gdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2Vy IikpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKworCQkJLyoK KwkJCSAqIElmIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgYXBwbHlpbmcgc3Bvb2xlZCBt ZXNzYWdlcyB0aGVuCisJCQkgKiBjbG9zZSB0aGUgZmlsZSBiZWZvcmUgY29tbWl0dGluZy4KKwkJ CSAqLworCQkJaWYgKHN0cmVhbV9mZCkKKwkJCQlzdHJlYW1fY2xvc2VfZmlsZSgpOworCisJCQli ZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CisKKwkJCUlOSkVDVElPTl9QT0lOVCgicGFyYWxsZWwt d29ya2VyLWJlZm9yZS1wcmVwYXJlIiwgTlVMTCk7CisKKwkJCS8qIE1hcmsgdGhlIHRyYW5zYWN0 aW9uIGFzIHByZXBhcmVkLiAqLworCQkJYXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoJnBy ZXBhcmVfZGF0YSk7CisKKwkJCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CisKKwkJCUNvbW1pdFRy YW5zYWN0aW9uQ29tbWFuZCgpOworCQkJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKKworCQkJ c3RvcmVfZmx1c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVuZF9sc24sIEludmFsaWRYTG9nUmVj UHRyLAorCQkJCQkJCQkgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCisJCQkvKgorCQkJICogSXQg aXMgb2theSBub3QgdG8gc2V0IHRoZSBsb2NhbF9lbmQgTFNOIGZvciB0aGUgcHJlcGFyZSBiZWNh dXNlCisJCQkgKiB3ZSBhbHdheXMgZmx1c2ggdGhlIHByZXBhcmUgcmVjb3JkLiBTZWUgYXBwbHlf aGFuZGxlX3ByZXBhcmUuCisJCQkgKi8KKwkJCU15UGFyYWxsZWxTaGFyZWQtPmxhc3RfY29tbWl0 X2VuZCA9IEludmFsaWRYTG9nUmVjUHRyOworCQkJcGFfY29tbWl0X3RyYW5zYWN0aW9uKCk7CisK KwkJCXBhX3VubG9ja190cmFuc2FjdGlvbihNeVBhcmFsbGVsU2hhcmVkLT54aWQsIEFjY2Vzc0V4 Y2x1c2l2ZUxvY2spOworCisJCQlwYV9yZXNldF9zdWJ0cmFucygpOworCQkJYnJlYWs7CisKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGFwcGx5IGFjdGlvbjogJWQiLCAo aW50KSBhcHBseV9hY3Rpb24pOworCQkJYnJlYWs7CisJfQorCisJcmVtb3RlX3hpZCA9IEludmFs aWRUcmFuc2FjdGlvbklkOwogCiAJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CiAKQEAg LTIzNzcsNiArMjUyNiwxMiBAQCBhcHBseV9oYW5kbGVfY29tbWl0X3ByZXBhcmVkKFN0cmluZ0lu Zm8gcykKIAkvKiBUaGVyZSBpcyBubyB0cmFuc2FjdGlvbiB3aGVuIENPTU1JVCBQUkVQQVJFRCBp cyBjYWxsZWQgKi8KIAliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CiAKKwlpZiAoVHJhbnNhY3Rp b25JZElzVmFsaWQobGFzdF9wYXJhbGxlbGl6ZWRfcmVtb3RlX3hpZCkpCisJeworCQlwYV93YWl0 X2Zvcl9kZXBlbmRlZF90cmFuc2FjdGlvbihsYXN0X3BhcmFsbGVsaXplZF9yZW1vdGVfeGlkKTsK KwkJbGFzdF9wYXJhbGxlbGl6ZWRfcmVtb3RlX3hpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwor CX0KKwogCS8qCiAJICogVXBkYXRlIG9yaWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFydCBzdHJl YW1pbmcgZnJvbSBjb3JyZWN0IHBvc2l0aW9uCiAJICogaW4gY2FzZSBvZiBjcmFzaC4KQEAgLTI0 NDUsNiArMjYwMCwxMyBAQCBhcHBseV9oYW5kbGVfcm9sbGJhY2tfcHJlcGFyZWQoU3RyaW5nSW5m byBzKQogCiAJCS8qIFRoZXJlIGlzIG5vIHRyYW5zYWN0aW9uIHdoZW4gQUJPUlQvUk9MTEJBQ0sg UFJFUEFSRUQgaXMgY2FsbGVkICovCiAJCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKworCQlp ZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQobGFzdF9wYXJhbGxlbGl6ZWRfcmVtb3RlX3hpZCkpCisJ CXsKKwkJCXBhX3dhaXRfZm9yX2RlcGVuZGVkX3RyYW5zYWN0aW9uKGxhc3RfcGFyYWxsZWxpemVk X3JlbW90ZV94aWQpOworCQkJbGFzdF9wYXJhbGxlbGl6ZWRfcmVtb3RlX3hpZCA9IEludmFsaWRU cmFuc2FjdGlvbklkOworCQl9CisKIAkJRmluaXNoUHJlcGFyZWRUcmFuc2FjdGlvbihnaWQsIGZh bHNlKTsKIAkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAkJQ29tbWl0VHJhbnNhY3Rpb25Db21t YW5kKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wNTBfcGFyYWxsZWxf YXBwbHkucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wNTBfcGFyYWxsZWxfYXBwbHkucGwK aW5kZXggOTFmOTVkNGUxMWQuLjA0OTRhZmE0MThjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wNTBfcGFyYWxsZWxfYXBwbHkucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDUwX3BhcmFsbGVsX2FwcGx5LnBsCkBAIC0xOSw2ICsxOSw4IEBAIGlmICgkRU5We2Vu YWJsZV9pbmplY3Rpb25fcG9pbnRzfSBuZSAneWVzJykKICMgSW5pdGlhbGl6ZSBwdWJsaXNoZXIg bm9kZQogbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3 KCdwdWJsaXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJsaXNoZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNv bmYnLAorICAgICJtYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zID0gMTAiKTsKICRub2RlX3B1Ymxp c2hlci0+c3RhcnQ7CiAKICMgQ3JlYXRlIHRhYmxlcyBhbmQgaW5zZXJ0IGluaXRpYWwgZGF0YQpA QCAtNDQsNyArNDYsOCBAQCBteSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7CiAkbm9kZV9zdWJzY3JpYmVyLT5pbml0OwogJG5v ZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJsb2dfbWluX21l c3NhZ2VzID0gZGVidWcxIik7CiAkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdy ZXNxbC5jb25mJywKLQkibWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycyA9IDEwIik7CisJ Im1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMgPSAxMAorICAgIG1heF9wcmVwYXJlZF90 cmFuc2FjdGlvbnMgPSAxMCIpOwogJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CiAKICMgQ2hlY2sg aWYgdGhlIGV4dGVuc2lvbiBpbmplY3Rpb25fcG9pbnRzIGlzIGF2YWlsYWJsZSwgYXMgaXQgbWF5 IGJlCkBAIC0yNjgsNCArMjcxLDczIEBAIGlzICgkcmVzdWx0LCAxLCAnaW5zZXJ0cyBhcmUgcmVw bGljYXRlZCB0byBzdWJzY3JpYmVyJyk7CiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAogICAgICJBTFRFUiBUQUJMRSByZWdyZXNzX3RhYiBSRVBMSUNBIElERU5USVRZIERF RkFVTFQ7Iik7CiAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCisjIFRlc3QgdGhhdCB0aGUgcHJlcGFyZWQgdHJhbnNhY3Rpb24gY2FuIGJlIGFwcGxp ZWQgaW4gYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIsCisjIGFuZCB0aGF0IHRoZSBjb21taXQgb3Jk ZXIgcHJlc2VydmF0aW9uIHdvcmsgY29ycmVjdGx5LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUcnVuY2F0ZSB0aGUgZGF0YSBmb3IgdXBj b21pbmcgdGVzdHMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJUUlVO Q0FURSBUQUJMRSByZWdyZXNzX3RhYjsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgncmVncmVzc19zdWInKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisgICAgIkFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3N1YiBESVNBQkxFOyIpOwor JG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qg Y291bnQoKikgPSAwIEZST00gcGdfc3RhdF9hY3Rpdml0eSBXSEVSRSBiYWNrZW5kX3R5cGUgPSAn bG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXInIgorKTsKKyRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCAiCisgICAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jl c3Nfc3ViIFNFVCAodHdvX3BoYXNlID0gb24pOworICAgIEFMVEVSIFNVQlNDUklQVElPTiByZWdy ZXNzX3N1YiBFTkFCTEU7Iik7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKyAgICAiU0VMRUNUIGNvdW50KDEpIEZST00gcGdfc3RhdF9hY3Rpdml0 eSBXSEVSRSBiYWNrZW5kX3R5cGUgPSAnbG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCB3b3Jr ZXInIik7CitpcygkcmVzdWx0LCAnMCcsICJubyBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGV4aXN0 IGFmdGVyIHJlc3RhcnQiKTsKKworIyBBdHRhY2ggYW4gaW5qZWN0aW9uX3BvaW50LiBQYXJhbGxl bCB3b3JrZXJzIHdvdWxkIHdhaXQgYmVmb3JlIHRoZSBwcmVwYXJlCiskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNo KCdwYXJhbGxlbC13b3JrZXItYmVmb3JlLXByZXBhcmUnLCd3YWl0Jyk7IgorKTsKKworIyBQUkVQ QVJFIGEgdHJhbnNhY3Rpb24gb24gcHVibGlzaGVyLiBJdCB3b3VsZCBiZSBoYW5kbGVkIGJ5IGEg cGFyYWxsZWwgYXBwbHkKKyMgd29ya2VyLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXFbCisgICAgQkVHSU47CisgICAgSU5TRVJUIElOVE8gcmVncmVzc190YWIgVkFM VUVTIChnZW5lcmF0ZV9zZXJpZXMoNTEsIDYwKSwgJ3ByZXBhcmUnKTsKKyAgICBQUkVQQVJFIFRS QU5TQUNUSU9OICdyZWdyZXNzX3ByZXBhcmUnOworXSk7CisKKyMgV2FpdCB1bnRpbCB0aGUgcGFy YWxsZWwgd29ya2VyIGVudGVycyB0aGUgaW5qZWN0aW9uIHBvaW50LgorJG5vZGVfc3Vic2NyaWJl ci0+d2FpdF9mb3JfZXZlbnQoJ2xvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgd29ya2VyJywK KwkncGFyYWxsZWwtd29ya2VyLWJlZm9yZS1wcmVwYXJlJyk7CisKKyRvZmZzZXQgPSAtcyAkbm9k ZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisjIEluc2VydCB0dXBsZXMgb24gcHVibGlzaGVyIGFn YWluLiBUaGlzIHRyYW5zYWN0aW9uIHdhaXRzIGZvciB0aGUgcHJlcGFyZWQKKyMgdHJhbnNhY3Rp b24KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgIklOU0VSVCBJ TlRPIHJlZ3Jlc3NfdGFiIFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDYxLCA3MCksICd0ZXN0Jyk7 Iik7CisKKyMgVmVyaWZ5IHRoZSBwYXJhbGxlbCB3b3JrZXIgd2FpdHMgZm9yIHRoZSB0cmFuc2Fj dGlvbgorJHN0ciA9ICRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci93YWl0IGZvciBk ZXBlbmRlZCB4aWQgKFsxLTldWzAtOV0rKS8sICRvZmZzZXQpOworJHhpZCA9ICRzdHIgPX4gL3dh aXQgZm9yIGRlcGVuZGVkIHhpZCAoWzEtOV1bMC05XSspLzsKKworb2soMSwgImNvbW1pdCBvcmRl ciBkZXBlbmRlbmN5IGZyb20gcHJlcGFyZWQgdHJhbnNhY3Rpb24gZGV0ZWN0ZWQgZm9yIHBhcmFs bGVsIGFwcGx5Iik7CisKKyMgV2FrZXVwIHRoZSBwYXJhbGxlbCB3b3JrZXIKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKKyAgICBTRUxFQ1QgaW5qZWN0aW9uX3Bv aW50c19kZXRhY2goJ3BhcmFsbGVsLXdvcmtlci1iZWZvcmUtcHJlcGFyZScpOworICAgIFNFTEVD VCBpbmplY3Rpb25fcG9pbnRzX3dha2V1cCgncGFyYWxsZWwtd29ya2VyLWJlZm9yZS1wcmVwYXJl Jyk7CitdKTsKKworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyL2ZpbmlzaCB3YWl0 aW5nIGZvciBkZXBlbmRlZCB4aWQgJHhpZC8sICRvZmZzZXQpOworCisjIENPTU1JVCB0aGUgcHJl cGFyZWQgdHJhbnNhY3Rpb24uIEl0IGlzIGFsd2F5cyBoYW5kbGVkIGJ5IHRoZSBsZWFkZXIKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ3Jl Z3Jlc3NfcHJlcGFyZSc7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3Jl Z3Jlc3Nfc3ViJyk7CisKKyRyZXN1bHQgPQorICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgxKSBGUk9NIHJlZ3Jlc3NfdGFiIik7CitpcyAoJHJl c3VsdCwgMjAsICdpbnNlcnRzIGFyZSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXInKTsKKwogZG9u ZV90ZXN0aW5nKCk7Ci0tIAoyLjQzLjAKCg== --_010_TY4PR01MB1771875A7A64B139EF8C8D05C94E62TY4PR01MB17718jp_ Content-Type: application/octet-stream; name="v20-0004-Parallel-apply-non-streaming-transactions.patch" Content-Description: v20-0004-Parallel-apply-non-streaming-transactions.patch Content-Disposition: attachment; filename="v20-0004-Parallel-apply-non-streaming-transactions.patch"; size=65864; creation-date="Mon, 15 Jun 2026 11:19:05 GMT"; modification-date="Mon, 15 Jun 2026 11:20:11 GMT" Content-Transfer-Encoding: base64 RnJvbSAzZmU5YmMxMTczMGEwYjQ2MDNkNmMzMzcxM2YzZDIwMTdhNmI5MThkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaaGlqaWUgSG91IDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBNb24sIDggSnVuIDIwMjYgMTA6MTY6NDYgKzA4MDAKU3ViamVjdDogW1BBVENIIHYyMCA0 LzRdIFBhcmFsbGVsIGFwcGx5IG5vbi1zdHJlYW1pbmcgdHJhbnNhY3Rpb25zCgotLQpCYXNpYyBk ZXNpZ24KLS0KClRoZSBsZWFkZXIgd29ya2VyIGFzc2lnbnMgZWFjaCBub24tc3RyZWFtaW5nIHRy YW5zYWN0aW9uIHRvIGEgcGFyYWxsZWwgYXBwbHkKd29ya2VyLiBCZWZvcmUgZGlzcGF0Y2hpbmcg Y2hhbmdlcyB0byBhIHBhcmFsbGVsIHdvcmtlciwgdGhlIGxlYWRlciB2ZXJpZmllcyBpZgp0aGUg Y3VycmVudCBtb2RpZmljYXRpb24gYWZmZWN0cyB0aGUgc2FtZSByb3cgKGlkZW50aXRpZWQgYnkg cmVwbGljYSBpZGVudGl0eQprZXkpIGFzIGFub3RoZXIgb25nb2luZyB0cmFuc2FjdGlvbi4gSWYg c28sIHRoZSBsZWFkZXIgc2VuZHMgYSBsaXN0IG9mIGRlcGVuZGVudAp0cmFuc2FjdGlvbiBJRHMg dG8gdGhlIHBhcmFsbGVsIHdvcmtlciwgaW5kaWNhdGluZyB0aGF0IHRoZSBwYXJhbGxlbCBhcHBs eQp3b3JrZXIgbXVzdCB3YWl0IGZvciB0aGVzZSB0cmFuc2FjdGlvbnMgdG8gY29tbWl0IGJlZm9y ZSBwcm9jZWVkaW5nLgoKVGhlIGxlYWRlciBwcmVzZXJ2ZXMgcHVibGlzaGVyIGNvbW1pdCBvcmRl ciBmb3IgYWxsIHRyYW5zYWN0aW9ucyBieSBpbnN0cnVjdGluZwp0aGUgcGFyYWxsZWwgd29ya2Vy IHRvIHdhaXQgZm9yIHRoZSBsYXN0IHRyYW5zYWN0aW9uIHRvIGNvbW1pdCBiZWZvcmUgY29tbWl0 dGluZwp0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4gKE5vdGUgdGhhdCB0aGUgbGVhZGVyIGl0c2Vs ZiBkb2VzIG5vdCB3YWl0IHRoZQpwYXJhbGxlbGl6ZWQgdHJhbnNhY3Rpb24gdG8gYmUgY29tbWl0 dGVkIHVubGVzcyBwYXJ0aWFsIHNlcmlhbGl6YXRpb24gbW9kZSBpcwphY3RpdmUsIHdoZXJlIHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgY2FuIG5vIGxvbmdlciBiZSByZXVzZWQuKSBTZWUgdGhl CiJjb21taXQgb3JkZXIiIGFuZCAid29ya2VyIGludGVyYWN0aW9uIiBzZWN0aW9ucyBiZWxvdyBm b3IgZGV0YWlscy4KClRyYWNraW5nIGRlcGVuZGVuY2llcyBpcyBuZWNlc3NhcnkgZXZlbiB3aGVu IGNvbW1pdCBvcmRlciBpcyBwcmVzZXJ2ZWQuCkNvbnNpZGVyIHR3byB0cmFuc2FjdGlvbnM6IFRY LTEgKElOU0VSVCByb3cgMSkgYW5kIFRYLTIgKERFTEVURSByb3cgMSkuIElmCmJvdGggYXJlIGFs bG93ZWQgdG8gYXBwbHkgaW4gcGFyYWxsZWwsIFRYLTIncyBERUxFVEUgY291bGQgYmUgYXBwbGll ZCBiZWZvcmUKVFgtMSdzIElOU0VSVCwgcmVzdWx0aW5nIGluIGEgZGVsZXRlX21pc3NpbmcgY29u ZmxpY3QuCgpFYWNoIHBhcmFsbGVsIGFwcGx5IHdvcmtlciByZWNvcmRzIHRoZSBsb2NhbCBlbmQg TFNOIG9mIHRoZSB0cmFuc2FjdGlvbiBpdAphcHBsaWVzIGluIHNoYXJlZCBtZW1vcnkuIFN1YnNl cXVlbnRseSwgdGhlIGxlYWRlciBnYXRoZXJzIHRoZXNlIGxvY2FsIGVuZCBMU05zCmFuZCBsb2dz IHRoZW0gaW4gdGhlIGxvY2FsICdsc25fbWFwcGluZycgZm9yIHZlcmlmeWluZyB3aGV0aGVyIHRo ZXkgaGF2ZSBiZWVuCmZsdXNoZWQgdG8gZGlzayAoZm9sbG93aW5nIHRoZSBsb2dpYyBpbiBnZXRf Zmx1c2hfcG9zaXRpb24oKSkuCgpJZiBubyBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgYXZhaWxh YmxlLCB0aGUgbGVhZGVyIHdpbGwgYXBwbHkgdGhlIHRyYW5zYWN0aW9uCmluZGVwZW5kZW50bHku CgpGb3IgZnVydGhlciBkZXRhaWxzLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGZvbGxvd2luZzoKCi0t CmRlZGVuZGVuY3kgdHJhY2tpbmcKLS0KClRoZSBsZWFkZXIgbWFpbnRhaW5zIGEgbG9jYWwgaGFz aCB0YWJsZSwgdXNpbmcgdGhlIHJlbW90ZSBjaGFuZ2UncyByZXBsaWNhCmlkZW50aXR5IGNvbHVt biB2YWx1ZXMgYW5kIHJlbGlkIGFzIGtleXMsIHdpdGggcmVtb3RlIHRyYW5zYWN0aW9uIElEcyBh cyB2YWx1ZXMuCkJlZm9yZSBzZW5kaW5nIGNoYW5nZXMgdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdv cmtlciwgdGhlIGxlYWRlciBjb21wdXRlcyBhIGhhc2gKdXNpbmcgUkkga2V5IHZhbHVlcyBhbmQg dGhlIHJlbGlkIG9mIHRoZSBjdXJyZW50IGNoYW5nZSB0byBzZWFyY2ggdGhlIGhhc2gKdGFibGUu IElmIGFuIGV4aXN0aW5nIGVudHJ5IGlzIGZvdW5kLCB0aGUgbGVhZGVyIGZpcnN0IHVwZGF0ZXMg dGhlIGhhc2ggZW50cnkKd2l0aCB0aGUgcmVjZWl2aW5nIHJlbW90ZSB4aWQgdGhlbiB0ZWxscyB0 aGUgcGFyYWxsZWwgd29ya2VyIHRvIHdhaXQgZm9yIGl0LgoKSWYgdGhlIHJlbW90ZSByZWxhdGlv biBsYWNrcyBhIHJlcGxpY2EgaWRlbnRpdHkgKFJJKSwgaXQgaW5kaWNhdGVzIHRoYXQgb25seQpJ TlNFUlQgY2FuIGJlIHJlcGxpY2F0ZWQgZm9yIHRoaXMgdGFibGUuIEluIHN1Y2ggY2FzZXMsIHRo ZSBsZWFkZXIgc2tpcHMKZGVwZW5kZW5jeSBjaGVja3MsIGFsbG93aW5nIHRoZSBwYXJhbGxlbCBh cHBseSB3b3JrZXIgdG8gcHJvY2VlZCB3aXRoIGFwcGx5aW5nCmNoYW5nZXMgd2l0aG91dCBkZWxh eS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBvbmx5IHBvdGVudGlhbCBjb25mbGljdCBjb3VsZCBoYXBw ZW4KaXMgcmVsYXRlZCB0byB0aGUgbG9jYWwgdW5pcXVlIGtleSBvciBmb3JlaWduIGtleSwgd2hp Y2ggdGhhdCBpcyB5ZXQgdG8gYmUKaW1wbGVtZW50ZWQuCgpJbiBjYXNlcyBvZiBUUlVOQ0FURSBv ciByZW1vdGUgc2NoZW1hIGNoYW5nZXMgYWZmZWN0aW5nIHRoZSBlbnRpcmUgdGFibGUsIHRoZQps ZWFkZXIgcmV0cmlldmVzIGFsbCByZW1vdGUgeGlkcyB0b3VjaGluZyB0aGUgc2FtZSB0YWJsZSAo dmlhIHNlcXVlbnRpYWwgc2NhbnMKb2YgdGhlIGhhc2ggdGFibGUpIGFuZCB0ZWxscyB0aGUgcGFy YWxsZWwgd29ya2VyIHRvIHdhaXQgZm9yIHRob3NlIHRyYW5zYWN0aW9ucwp0byBjb21taXQuCgpI YXNoIGVudHJpZXMgYXJlIGNsZWFuZWQgdXAgb25jZSB0aGUgdHJhbnNhY3Rpb24gY29ycmVzcG9u ZGluZyB0byB0aGUgcmVtb3RlIHhpZAppbiB0aGUgZW50cnkgaGFzIGJlZW4gY29tbWl0dGVkLiBD bGVhbi11cCB0eXBpY2FsbHkgb2NjdXJzIHdoZW4gY29sbGVjdGluZyB0aGUKZmx1c2ggcG9zaXRp b24gb2YgZWFjaCB0cmFuc2FjdGlvbiwgYnV0IGlzIGZvcmNlZCBpZiB0aGUgaGFzaCB0YWJsZSBl eGNlZWRzIGEKc2V0IHRocmVzaG9sZC4KCi0tCmRlZGVuZGVuY3kgd2FpdGluZwotLQoKSWYgYSB0 cmFuc2FjdGlvbiBpcyByZWxpZWQgdXBvbiBieSBvdGhlcnMsIHRoZSBsZWFkZXIgYWRkcyBpdHMg eGlkIHRvIGEgc2hhcmVkCmhhc2ggdGFibGUuIFRoZSBzaGFyZWQgaGFzaCB0YWJsZSBlbnRyeSBp cyBjbGVhcmVkIGJ5IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIKdXBvbiBjb21wbGV0aW5nIHRo ZSB0cmFuc2FjdGlvbi4gV29ya2VycyBuZWVkaW5nIHRvIHdhaXQgZm9yIGEgdHJhbnNhY3Rpb24g Y2hlY2sKdGhlIHNoYXJlZCBoYXNoIHRhYmxlIGVudHJ5OyBpZiBwcmVzZW50LCB0aGV5IGxvY2sg dGhlIHRyYW5zYWN0aW9uIElEICh1c2luZwpwYV9sb2NrX3RyYW5zYWN0aW9uKS4gSWYgYWJzZW50 LCBpdCBpbmRpY2F0ZXMgdGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuCmNvbW1pdHRlZCwgbmVnYXRp bmcgdGhlIG5lZWQgdG8gd2FpdC4KCi0tCmNvbW1pdCBvcmRlcgotLQoKV2UgcHJlc2VydmUgcHVi bGlzaGVyIGNvbW1pdCBvcmRlciBmb3IgYWxsIHRyYW5zYWN0aW9ucyBmb3IgdHdvIHJlYXNvbnM6 CgoxKSBVc2VyLXZpc2libGUgY29uc2lzdGVuY3kKCk91dC1vZi1vcmRlciBjb21taXRzIGNhbiBl eHBvc2Ugc3RhdGVzIG9uIHRoZSBzdWJzY3JpYmVyIHRoYXQgd2VyZSBuZXZlciB2aXNpYmxlCm9u IHRoZSBwdWJsaXNoZXIuCgpGb3IgZXhhbXBsZSwgc3VwcG9zZSBhIHVzZXIgdXBkYXRlcyB0YWJs ZSBBIGFuZCB0aGVuIHVwZGF0ZXMgdGFibGUgQiBvbiB0aGUKcHVibGlzaGVyLiBJZiB0aGUgc3Vi c2NyaWJlciBjb21taXRzIHRob3NlIHRyYW5zYWN0aW9ucyBvdXQgb2Ygb3JkZXIsIGEgcXVlcnkK dGhhdCBzZWVzIHRoZSBsYXRlc3Qgcm93IGluIEIgbWlnaHQgc3RpbGwgc2VlIHN0YWxlIGRhdGEg aW4gQS4gQWx0aG91Z2ggZXZlbnR1YWwKY29uc2lzdGVuY3kgd291bGQgc3RpbGwgYmUgcmVhY2hl ZCwgdGhhdCBiZWhhdmlvciBtYXkgYmUgdW5hY2NlcHRhYmxlIGZvciBzb21lCnVzZXJzLiBJbiB0 aGUgZnV0dXJlLCB3ZSBjb3VsZCBwcm92aWRlIGEgR1VDIHRvIGFsbG93IG91dC1vZi1vcmRlciBj b21taXRzIGZvcgp1c2VycyB3aG8gcHJlZmVyIGhpZ2hlciBwYXJhbGxlbGlzbS4KCjIpIFJlcGxp Y2F0aW9uIHByb2dyZXNzIHRyYWNraW5nCgpXZSBjdXJyZW50bHkgdHJhY2sgcmVwbGljYXRpb24g cHJvZ3Jlc3MgdXNpbmcgdHJhbnNhY3Rpb24gY29tbWl0IExTTnMuIFdpdGgKb3V0LW9mLW9yZGVy IGNvbW1pdHMsIHRoaXMgYmVjb21lcyBhbWJpZ3VvdXMgYWZ0ZXIgZmFpbHVyZXMuCgpGb3IgZXhh bXBsZSwgaWYgVFgtMiBpcyBhcHBsaWVkIGJlZm9yZSBUWC0xIGFuZCByZXBsaWNhdGlvbiBzdG9w cyBkdWUgdG8gYW4KZXJyb3IsIHdlIGNhbm5vdCByZWxpYWJseSBkZXRlcm1pbmUgd2hldGhlciBU WC0xIHdhcyBhcHBsaWVkIGJlZm9yZSByZXN0YXJ0LgpBcyBhIHJlc3VsdCwgdHJhbnNhY3Rpb25z IHRoYXQgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCBvbiB0aGUgc3Vic2NyaWJlciBtYXkKYmUgcmVw bGF5ZWQuCgotLQp3b3JrZXIgaW50ZXJhY3Rpb24KLS0KCkFmdGVyIHNlbmRpbmcgdGhlIENPTU1J VCBtZXNzYWdlIGZvciBhIHRyYW5zYWN0aW9uLCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlcgpkb2Vz IG5vdCB3YWl0IGZvciB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHRvIGZpbmlzaCBhcHBseWlu ZyB0aGF0CnRyYW5zYWN0aW9uLiBJbnN0ZWFkLCBpdCBzZW5kcyBhIFBBX01TR19YQUNUX0RFUEVO REVOQ1kgbWVzc2FnZSB0bwp0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLCBpbnN0cnVjdGluZyBp dCB0byB3YWl0IGZvciB0aGUgbGFzdCB0cmFuc2FjdGlvbiB0bwpjb21taXQuIFRoaXMgYWxsb3dz IHRoZSBsZWFkZXIgdG8gcmVtYWluIGJ1c3kgcmVjZWl2aW5nIGFuZCBkaXNwYXRjaGluZwpjaGFu Z2VzIHRvIG1vcmUgcGFyYWxsZWwgYXBwbHkgd29ya2VycywgZW5hYmxpbmcgZ3JlYXRlciBwYXJh bGxlbGlzbSBpbgp0cmFuc2FjdGlvbiBhcHBsaWNhdGlvbi4KCkF1dGhvcjogWmhpamllIEhvdSA8 aG91emouZm5zdEBmdWppdHN1LmNvbT4KQXV0aG9yOiBIYXlhdG8gS3Vyb2RhIDxrdXJvZGEuaGF5 YXRvQGZ1aml0c3UuY29tPgotLS0KIC4uLi9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxs ZWx3b3JrZXIuYyB8IDM0OCArKysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9wcm90by5jICAgICAgIHwgIDM4ICsrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3JlbGF0aW9uLmMgICAgfCAgMzEgKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvd29ya2VyLmMgICAgICB8IDM1OCArKysrKysrKysrKysrKysrLS0KIHNyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaCAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggICAgIHwgIDEwICstCiBzcmMvdGVzdC9zdWJz Y3JpcHRpb24vbWVzb24uYnVpbGQgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy90ZXN0L3N1YnNj cmlwdGlvbi90LzAwMV9yZXBfY2hhbmdlcy5wbCAgICB8ICAgMiArCiBzcmMvdGVzdC9zdWJzY3Jp cHRpb24vdC8wMTBfdHJ1bmNhdGUucGwgICAgICAgfCAgIDIgKy0KIHNyYy90ZXN0L3N1YnNjcmlw dGlvbi90LzAxNV9zdHJlYW0ucGwgICAgICAgICB8ICAgOCArLQogc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDI2X3N0YXRzLnBsICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzAyN19ub3N1cGVydXNlci5wbCAgICB8ICAgMSArCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wNTBfcGFyYWxsZWxfYXBwbHkucGwgfCAyNzEgKysrKysrKysrKysrKwogc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAyICsKIDE1IGZpbGVzIGNoYW5n ZWQsIDk5OSBpbnNlcnRpb25zKCspLCA3OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wNTBfcGFyYWxsZWxfYXBwbHkucGwKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5j CmluZGV4IDMwZDMxZTAyYWMxLi40YTdmNjUzNDVkOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKQEAgLTE0LDYgKzE0 LDkgQEAKICAqIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvIHdoaWNoIGlzIHJlcXVpcmVkIHNvIHRo ZSBsZWFkZXIgd29ya2VyIGFuZCBwYXJhbGxlbAogICogYXBwbHkgd29ya2VycyBjYW4gY29tbXVu aWNhdGUgd2l0aCBlYWNoIG90aGVyLgogICoKKyAqIFN0cmVhbWluZyB0cmFuc2FjdGlvbnMKKyAq ID09PT09PT09PT09PT09PT09PT09PT0KKyAqCiAgKiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vy cyBhcmUgYXNzaWduZWQgKGlmIGF2YWlsYWJsZSkgYXMgc29vbiBhcyB4YWN0J3MKICAqIGZpcnN0 IHN0cmVhbSBpcyByZWNlaXZlZCBmb3Igc3Vic2NyaXB0aW9ucyB0aGF0IGhhdmUgc2V0IHRoZWly ICdzdHJlYW1pbmcnCiAgKiBvcHRpb24gYXMgcGFyYWxsZWwuIFRoZSBsZWFkZXIgYXBwbHkgd29y a2VyIHdpbGwgc2VuZCBjaGFuZ2VzIHRvIHRoaXMgbmV3CkBAIC0zNiwxMiArMzksOSBAQAogICog aXRzIGluZm9ybWF0aW9uIGlzIGFkZGVkIHRvIHRoZSBQYXJhbGxlbEFwcGx5V29ya2VyUG9vbC4g T25jZSB0aGUgd29ya2VyCiAgKiBmaW5pc2hlcyBhcHBseWluZyB0aGUgdHJhbnNhY3Rpb24sIGl0 IGlzIG1hcmtlZCBhcyBhdmFpbGFibGUgZm9yIHJlLXVzZS4KICAqIE5vdywgYmVmb3JlIHN0YXJ0 aW5nIGEgbmV3IHdvcmtlciB0byBhcHBseSB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLCB3ZQot ICogY2hlY2sgdGhlIGxpc3QgZm9yIGFueSBhdmFpbGFibGUgd29ya2VyLiBOb3RlIHRoYXQgd2Ug cmV0YWluIGEgbWF4aW11bSBvZgotICogaGFsZiB0aGUgbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtl cnNfcGVyX3N1YnNjcmlwdGlvbiB3b3JrZXJzIGluIHRoZSBwb29sIGFuZAotICogYWZ0ZXIgdGhh dCwgd2Ugc2ltcGx5IGV4aXQgdGhlIHdvcmtlciBhZnRlciBhcHBseWluZyB0aGUgdHJhbnNhY3Rp b24uCi0gKgotICogWFhYIFRoaXMgd29ya2VyIHBvb2wgdGhyZXNob2xkIGlzIGFyYml0cmFyeSBh bmQgd2UgY2FuIHByb3ZpZGUgYSBHVUMKLSAqIHZhcmlhYmxlIGZvciB0aGlzIGluIHRoZSBmdXR1 cmUgaWYgcmVxdWlyZWQuCisgKiBjaGVjayB0aGUgbGlzdCBmb3IgYW55IGF2YWlsYWJsZSB3b3Jr ZXIuIFdlIGRvIG5vdCBzdG9wIHdvcmtlcnMgaW4gdGhlIHBvb2wKKyAqIHVubGVzcyBwYXJ0aWFs IG9mIHRoZSBjaGFuZ2VzIG9mIHRoZSB0cmFuc2FjdGlvbiBhcmUgc2VyaWFsaXplZCBkdWUgdG8g YSBzZW5kCisgKiB0aW1lb3V0LgogICoKICAqIFRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHdpbGwg Y3JlYXRlIGEgc2VwYXJhdGUgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKICAqIHdoZW4g ZWFjaCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgc3RhcnRzLiBUaGUgcmVhc29uIGZvciB0aGlzIGRl c2lnbiBpcyB0aGF0CkBAIC0xNTIsNiArMTUyLDc1IEBACiAgKiBzZXNzaW9uLWxldmVsIGxvY2tz IGJlY2F1c2UgYm90aCBsb2NrcyBjb3VsZCBiZSBhY3F1aXJlZCBvdXRzaWRlIHRoZQogICogdHJh bnNhY3Rpb24sIGFuZCB0aGUgc3RyZWFtIGxvY2sgaW4gdGhlIGxlYWRlciBuZWVkcyB0byBwZXJz aXN0IGFjcm9zcwogICogdHJhbnNhY3Rpb24gYm91bmRhcmllcyBpLmUuIHVudGlsIHRoZSBlbmQg b2YgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4KKyAqCisgKiBOb24tc3RyZWFtaW5nIHRyYW5z YWN0aW9ucworICogPT09PT09PT09PT09PT09PT09PT09PQorICogVGhlIGhhbmRsaW5nIGlzIHNp bWlsYXIgdG8gc3RyZWFtaW5nIHRyYW5zYWN0aW9ucywgYnV0IGluY2x1ZGluZyBmZXcKKyAqIGRp ZmZlcmVuY2VzOgorICoKKyAqIFRyYW5zYWN0aW9uIGRlcGVuZGVuY3kKKyAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqIEJlZm9yZSBkaXNwYXRjaGluZyBjaGFuZ2VzIHRvIGEgcGFyYWxsZWwg d29ya2VyLCB0aGUgbGVhZGVyIHZlcmlmaWVzIGlmIHRoZQorICogY3VycmVudCBtb2RpZmljYXRp b24gYWZmZWN0cyB0aGUgc2FtZSByb3cgKGlkZW50aXRpZWQgYnkgcmVwbGljYSBpZGVudGl0eQor ICoga2V5KSBhcyBhbm90aGVyIG9uZ29pbmcgdHJhbnNhY3Rpb24gKHNlZSBoYW5kbGVfZGVwZW5k ZW5jeV9vbl9jaGFuZ2UgZm9yCisgKiBkZXRhaWxzKS4gSWYgc28sIHRoZSBsZWFkZXIgc2VuZHMg YSBsaXN0IG9mIGRlcGVuZGVudCB0cmFuc2FjdGlvbiBJRHMgdG8gdGhlCisgKiBwYXJhbGxlbCB3 b3JrZXIsIGluZGljYXRpbmcgdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIG11c3Qgd2Fp dCBmb3IKKyAqIHRoZXNlIHRyYW5zYWN0aW9ucyB0byBjb21taXQgYmVmb3JlIHByb2NlZWRpbmcu CisgKgorICogVHJhY2tpbmcgZGVwZW5kZW5jaWVzIGlzIG5lY2Vzc2FyeSBldmVuIHdoZW4gY29t bWl0IG9yZGVyIGlzIHByZXNlcnZlZC4KKyAqIENvbnNpZGVyIHR3byB0cmFuc2FjdGlvbnM6IFRY LTEgKElOU0VSVCByb3cgMSkgYW5kIFRYLTIgKERFTEVURSByb3cgMSkuIElmCisgKiBib3RoIGFy ZSBhbGxvd2VkIHRvIGFwcGx5IGluIHBhcmFsbGVsLCBUWC0yJ3MgREVMRVRFIGNvdWxkIGJlIGFw cGxpZWQgYmVmb3JlCisgKiBUWC0xJ3MgSU5TRVJULCByZXN1bHRpbmcgaW4gYSBkZWxldGVfbWlz c2luZyBjb25mbGljdC4KKyAqCisgKiBDb21taXQgb3JkZXIKKyAqIC0tLS0tLS0tLS0tLQorICog V2UgcHJlc2VydmUgcHVibGlzaGVyIGNvbW1pdCBvcmRlciBmb3IgYWxsIHRyYW5zYWN0aW9ucyBm b3IgdHdvIHJlYXNvbnM6CisgKgorICogMSkgVXNlci12aXNpYmxlIGNvbnNpc3RlbmN5CisgKgor ICogT3V0LW9mLW9yZGVyIGNvbW1pdHMgY2FuIGV4cG9zZSBzdGF0ZXMgb24gdGhlIHN1YnNjcmli ZXIgdGhhdCB3ZXJlIG5ldmVyCisgKiB2aXNpYmxlIG9uIHRoZSBwdWJsaXNoZXIuCisgKgorICog Rm9yIGV4YW1wbGUsIHN1cHBvc2UgYSB1c2VyIHVwZGF0ZXMgdGFibGUgQSBhbmQgdGhlbiB1cGRh dGVzIHRhYmxlIEIgb24gdGhlCisgKiBwdWJsaXNoZXIuIElmIHRoZSBzdWJzY3JpYmVyIGNvbW1p dHMgdGhvc2UgdHJhbnNhY3Rpb25zIG91dCBvZiBvcmRlciwgYQorICogcXVlcnkgdGhhdCBzZWVz IHRoZSBsYXRlc3Qgcm93IGluIEIgbWlnaHQgc3RpbGwgc2VlIHN0YWxlIGRhdGEgaW4gQS4KKyAq IEFsdGhvdWdoIGV2ZW50dWFsIGNvbnNpc3RlbmN5IHdvdWxkIHN0aWxsIGJlIHJlYWNoZWQsIHRo YXQgYmVoYXZpb3IgbWF5IGJlCisgKiB1bmFjY2VwdGFibGUgZm9yIHNvbWUgdXNlcnMuIEluIHRo ZSBmdXR1cmUsIHdlIGNvdWxkIHByb3ZpZGUgYSBzdWJzY3JpcHRpb24KKyAqIG9wdGlvbiB0byBh bGxvdyBvdXQtb2Ytb3JkZXIgY29tbWl0cyBmb3IgdXNlcnMgd2hvIHByZWZlciBoaWdoZXIgcGFy YWxsZWxpc20uCisgKgorICogMikgUmVwbGljYXRpb24gcHJvZ3Jlc3MgdHJhY2tpbmcKKyAqCisg KiBXZSBjdXJyZW50bHkgdHJhY2sgcmVwbGljYXRpb24gcHJvZ3Jlc3MgdXNpbmcgdGhlIGxhc3Qg dHJhbnNhY3Rpb24ncyBjb21taXQKKyAqIExTTnMuIFdpdGggb3V0LW9mLW9yZGVyIGNvbW1pdHMs IHRoaXMgYmVjb21lcyBhbWJpZ3VvdXMgYWZ0ZXIgZmFpbHVyZXMuCisgKgorICogRm9yIGV4YW1w bGUsIGlmIFRYLTIgaXMgYXBwbGllZCBiZWZvcmUgVFgtMSBhbmQgcmVwbGljYXRpb24gc3RvcHMg ZHVlIHRvIGFuCisgKiBlcnJvciwgd2UgY2Fubm90IHJlbGlhYmx5IGRldGVybWluZSB3aGV0aGVy IFRYLTEgd2FzIGFwcGxpZWQgYmVmb3JlIHJlc3RhcnQuCisgKiBBcyBhIHJlc3VsdCwgdHJhbnNh Y3Rpb25zIHRoYXQgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCBvbiB0aGUgc3Vic2NyaWJlciBtYXkK KyAqIGJlIHJlcGxheWVkLgorICoKKyAqIFdvcmtlciBpbnRlcmFjdGlvbgorICogLS0tLS0tLS0t LS0tCisgKiBBZnRlciBzZW5kaW5nIHRoZSBDT01NSVQgbWVzc2FnZSBmb3IgYSB0cmFuc2FjdGlv biwgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIKKyAqIGRvZXMgbm90IHdhaXQgZm9yIHRoZSBwYXJh bGxlbCBhcHBseSB3b3JrZXIgdG8gZmluaXNoIGFwcGx5aW5nIHRoYXQKKyAqIHRyYW5zYWN0aW9u LiBJbnN0ZWFkLCBpdCBzZW5kcyBhIFBBX01TR19YQUNUX0RFUEVOREVOQ1kgbWVzc2FnZSB0bwor ICogdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciwgaW5zdHJ1Y3RpbmcgaXQgdG8gd2FpdCBmb3Ig dGhlIGxhc3QgdHJhbnNhY3Rpb24gdG8KKyAqIGNvbW1pdC4gVGhpcyBhbGxvd3MgdGhlIGxlYWRl ciB0byByZW1haW4gYnVzeSByZWNlaXZpbmcgYW5kIGRpc3BhdGNoaW5nCisgKiBjaGFuZ2VzIHRv IG1vcmUgcGFyYWxsZWwgYXBwbHkgd29ya2VycywgZW5hYmxpbmcgZ3JlYXRlciBwYXJhbGxlbGlz bSBpbgorICogdHJhbnNhY3Rpb24gYXBwbGljYXRpb24uCisgKgorICogTG9ja2luZyBjb25zaWRl cmF0aW9ucworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogV2hlbiBoYW5kbGluZyBhIFBB X01TR19SRUxNQVAgbWVzc2FnZSwgdGhlIHdvcmtlciBhdHRlbXB0cworICogdG8gYWNxdWlyZSB0 aGUgdHJhbnNhY3Rpb24gbG9jayBvZiB0aGUgZGVwZW5kZWQgdHJhbnNhY3Rpb24gYW5kIHJlbGVh c2VzIGl0CisgKiBpbW1lZGlhdGVseSBhZnRlciBhY3F1aXNpdGlvbiAoc2VlIHBhX3dhaXRfZm9y X2RlcGVuZGVkX3RyYW5zYWN0aW9uKS4gVGhpcworICogYWxsb3dzIGRlYWRsb2NrIGRldGVjdGlv biB3aGVuIG9uZSB3b3JrZXIgKGVpdGhlciBsZWFkZXIgb3IgcGFyYWxsZWwgYXBwbHkKKyAqIHdv cmtlcikgaXMgd2FpdGluZyBmb3IgYSBkZXBlbmRlbmN5IG9uIGEgdHJhbnNhY3Rpb24gYmVpbmcg YXBwbGllZCBieSBhbm90aGVyCisgKiB3b3JrZXIsIHdoaWxlIHRoYXQgb3RoZXIgd29ya2VyIGlz IGFsc28gYmxvY2tlZCBieSBhIGxvY2sgaGVsZCBieSB0aGUgZmlyc3QKKyAqIHdvcmtlci4KKyAq CisgKiBUaGUgbG9jayBncmFwaCBmb3IgdGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBsb29rIGFzIGZv bGxvd3M6IFdvcmtlcl8xICh3YWl0aW5nCisgKiBmb3IgZGVwZW5kZWQgdHJhbnNhY3Rpb24gdG8g ZmluaXNoKSAtPiBXb3JrZXJfMiAod2FpdGluZyB0byBhY3F1aXJlIGEKKyAqIHJlbGF0aW9uIGxv Y2spIC0+IFdvcmtlcl8xCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0zMTYsNiArMzg1 LDcgQEAgc3RhdGljIFBhcmFsbGVsVHJhbnNTdGF0ZSBwYV9nZXRfeGFjdF9zdGF0ZShQYXJhbGxl bEFwcGx5V29ya2VyU2hhcmVkICp3c2hhcmVkKTsKIHN0YXRpYyBQYXJ0aWFsRmlsZVNldFN0YXRl IHBhX2dldF9maWxlc2V0X3N0YXRlKHZvaWQpOwogc3RhdGljIHZvaWQgcGFfYXR0YWNoX3BhcmFs bGVsaXplZF90eG5faGFzaChkc2FfaGFuZGxlICpwYV9kc2FfaGFuZGxlLAogCQkJCQkJCQkJCQlk c2hhc2hfdGFibGVfaGFuZGxlICpwYV9kc2hhc2hfaGFuZGxlKTsKK3N0YXRpYyB2b2lkIHdyaXRl X2ludGVybmFsX3JlbGF0aW9uKFN0cmluZ0luZm8gcywgTG9naWNhbFJlcFJlbGF0aW9uICpyZWwp OwogCiAvKgogICogUmV0dXJucyB0cnVlIGlmIGl0IGlzIE9LIHRvIHN0YXJ0IGEgcGFyYWxsZWwg YXBwbHkgd29ya2VyLCBmYWxzZSBvdGhlcndpc2UuCkBAIC00MzMsNiArNTAzLDcgQEAgcGFfc2V0 dXBfZHNtKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbykKIAlzaGFyZWQgPSBzaG1fdG9j X2FsbG9jYXRlKHRvYywgc2l6ZW9mKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQpKTsKIAlTcGlu TG9ja0luaXQoJnNoYXJlZC0+bXV0ZXgpOwogCisJc2hhcmVkLT54aWQgPSBJbnZhbGlkVHJhbnNh Y3Rpb25JZDsKIAlzaGFyZWQtPnhhY3Rfc3RhdGUgPSBQQVJBTExFTF9UUkFOU19VTktOT1dOOwog CXBnX2F0b21pY19pbml0X3UzMigmKHNoYXJlZC0+cGVuZGluZ19zdHJlYW1fY291bnQpLCAwKTsK IAlzaGFyZWQtPmxhc3RfY29tbWl0X2VuZCA9IEludmFsaWRYTG9nUmVjUHRyOwpAQCAtNDc2LDYg KzU0Nyw4IEBAIHBhX2xhdW5jaF9wYXJhbGxlbF93b3JrZXIodm9pZCkKIAlNZW1vcnlDb250ZXh0 IG9sZGNvbnRleHQ7CiAJYm9vbAkJbGF1bmNoZWQ7CiAJUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KndpbmZvOworCWRzYV9oYW5kbGUJcGFfZHNhX2hhbmRsZTsKKwlkc2hhc2hfdGFibGVfaGFuZGxl IHBhX2RzaGFzaF9oYW5kbGU7CiAJTGlzdENlbGwgICAqbGM7CiAKIAkvKiBUcnkgdG8gZ2V0IGFu IGF2YWlsYWJsZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZnJvbSB0aGUgd29ya2VyIHBvb2wuICov CkBAIC00ODUsOCArNTU4LDM2IEBAIHBhX2xhdW5jaF9wYXJhbGxlbF93b3JrZXIodm9pZCkKIAog CQlpZiAoIXdpbmZvLT5pbl91c2UpCiAJCQlyZXR1cm4gd2luZm87CisKKwkJLyoKKwkJICogVGhl IGxlYWRlciBkb2VzIG5vdCBleHBsaWNpdGx5IGZyZWUgd29ya2VycyB0aGF0IGhhbmRsZSBub24t c3RyZWFtaW5nCisJCSAqIHRyYW5zYWN0aW9ucywgc28gd2UgY2hlY2sgd2hldGhlciB0aGUgdHJh bnNhY3Rpb24gaGFzIGNvbW1pdHRlZCwgYW5kCisJCSAqIGlmIHNvLCByZXVzZSB0aGUgd29ya2Vy LgorCQkgKi8KKwkJaWYgKCF3aW5mby0+c3RyZWFtX3R4biAmJgorCQkJcGFfZ2V0X3hhY3Rfc3Rh dGUod2luZm8tPnNoYXJlZCkgPT0gUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQpCisJCXsKKwkJCS8q CisJCQkgKiBTYXZlIHRoZSBsb2NhbCBjb21taXQgTFNOIG9mIHRoZSBsYXN0IHRyYW5zYWN0aW9u IGFwcGxpZWQgYnkKKwkJCSAqIHRoaXMgd29ya2VyIGJlZm9yZSByZXVzaW5nIGl0IGZvciBhbm90 aGVyIHRyYW5zYWN0aW9uLiBUaGlzIFdBTAorCQkJICogcG9zaXRpb24gaXMgY3J1Y2lhbCBmb3Ig ZGV0ZXJtaW5pbmcgdGhlIGZsdXNoIHBvc2l0aW9uIGluCisJCQkgKiByZXNwb25zZXMgdG8gdGhl IHB1Ymxpc2hlciAoc2VlIGdldF9mbHVzaF9wb3NpdGlvbigpKS4KKwkJCSAqLworCQkJKHZvaWQp IHBhX2dldF9sYXN0X2NvbW1pdF9lbmQod2luZm8tPnNoYXJlZC0+eGlkLCBmYWxzZSwgTlVMTCk7 CisJCQlyZXR1cm4gd2luZm87CisJCX0KIAl9CiAKKwlwYV9hdHRhY2hfcGFyYWxsZWxpemVkX3R4 bl9oYXNoKCZwYV9kc2FfaGFuZGxlLCAmcGFfZHNoYXNoX2hhbmRsZSk7CisKKwkvKgorCSAqIFJl dHVybiBpZiB0aGUgbnVtYmVyIG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgaGFzIHJlYWNoZWQg dGhlIG1heGltdW0KKwkgKiBsaW1pdC4KKwkgKi8KKwlpZiAobGlzdF9sZW5ndGgoUGFyYWxsZWxB cHBseVdvcmtlclBvb2wpID09CisJCW1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJz Y3JpcHRpb24pCisJCXJldHVybiBOVUxMOworCiAJLyoKIAkgKiBTdGFydCBhIG5ldyBwYXJhbGxl bCBhcHBseSB3b3JrZXIuCiAJICoKQEAgLTUxNCwxOCArNjE1LDUwIEBAIHBhX2xhdW5jaF9wYXJh bGxlbF93b3JrZXIodm9pZCkKIAkJCQkJCQkJCQlkc21fc2VnbWVudF9oYW5kbGUod2luZm8tPmRz bV9zZWcpLAogCQkJCQkJCQkJCWZhbHNlKTsKIAotCWlmIChsYXVuY2hlZCkKLQl7Ci0JCVBhcmFs bGVsQXBwbHlXb3JrZXJQb29sID0gbGFwcGVuZChQYXJhbGxlbEFwcGx5V29ya2VyUG9vbCwgd2lu Zm8pOwotCX0KLQllbHNlCisJaWYgKCFsYXVuY2hlZCkKIAl7CisJCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjb250ZXh0KTsKIAkJcGFfZnJlZV93b3JrZXJfaW5mbyh3aW5mbyk7Ci0JCXdpbmZv ID0gTlVMTDsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCisJUGFyYWxsZWxBcHBseVdvcmtlclBvb2wg PSBsYXBwZW5kKFBhcmFsbGVsQXBwbHlXb3JrZXJQb29sLCB3aW5mbyk7CisKIAlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKKwkvKgorCSAqIFNlbmQgYWxsIGV4aXN0aW5nIHJl bW90ZSByZWxhdGlvbiBpbmZvcm1hdGlvbiB0byB0aGUgcGFyYWxsZWwgYXBwbHkKKwkgKiB3b3Jr ZXIuIFRoaXMgYWxsb3dzIHRoZSBwYXJhbGxlbCB3b3JrZXIgdG8gaW5pdGlhbGl6ZSB0aGUKKwkg KiBMb2dpY2FsUmVwUmVsTWFwRW50cnkgbG9jYWxseSBiZWZvcmUgYXBwbHlpbmcgcmVtb3RlIGNo YW5nZXMuIFRoaXMgaXMKKwkgKiBuZWVkZWQgc2luY2UgdGhlIHdhbHNlbmRlciBkb2VzIG5vdCBz ZW5kIHJlbW90ZSByZWxhdGlvbiBpbmZvcm1hdGlvbgorCSAqIHdpdGggZXZlcnkgdHJhbnNhY3Rp b24uCisJICovCisJaWYgKGxvZ2ljYWxyZXBfZ2V0X251bV9yZWxzKCkpCisJeworCQlTdHJpbmdJ bmZvRGF0YSBvdXQ7CisJCXNobV9tcV9yZXN1bHQgcmVzdWx0OworCisJCWluaXRTdHJpbmdJbmZv KCZvdXQpOworCisJCXdyaXRlX2ludGVybmFsX3JlbGF0aW9uKCZvdXQsIE5VTEwpOworCisJCS8q CisJCSAqIFNlbmQgcmVsYXRpb24gaW5mb3JtYXRpb24gc3luY2hyb25vdXNseSByYXRoZXIgdGhh biB1c2luZworCQkgKiBub24tYmxvY2tpbmcgc2VuZCAocGFfc2VuZF9kYXRhKS4gVGhpcyBhdm9p ZHMgdGhlIG5lZWQgdG8gc2VyaWFsaXplCisJCSAqIHRoZSBkYXRhLCB3aGljaCB3b3VsZCBhZGQg Y29tcGxleGl0eSBmb3IgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0bworCQkgKiBkZXNlcmlh bGl6ZSBvdXRzaWRlIG9mIHRyYW5zYWN0aW9uIGFwcGxpY2F0aW9uLgorCQkgKgorCQkgKiBUaGlz IGlzIHNhZmUgZnJvbSBkZWFkbG9ja3MgYmVjYXVzZSBhIG5ld2x5IHN0YXJ0ZWQgd29ya2VyIGRv ZXMgbm90CisJCSAqIGhvbGQgYW55IHN0cm9uZyBsb2NrcyB3aGVuIHByb2Nlc3NpbmcgcmVsYXRp b24gaW5mb3JtYXRpb24uCisJCSAqLworCQlyZXN1bHQgPSBzaG1fbXFfc2VuZCh3aW5mby0+bXFf aGFuZGxlLCBvdXQubGVuLCBvdXQuZGF0YSwgZmFsc2UsIHRydWUpOworCisJCWlmIChyZXN1bHQg IT0gU0hNX01RX1NVQ0NFU1MpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNP REVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQllcnJtc2coImNvdWxk IG5vdCBzZW5kIHJlbW90ZSByZWxhdGlvbiBpbmZvcm1hdGlvbiB0byB0aGUgbG9naWNhbCByZXBs aWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIiKSk7CisJfQorCiAJcmV0dXJuIHdpbmZvOwog fQogCkBAIC02MzAsMjUgKzc2MywyNyBAQCBwYV9mcmVlX3dvcmtlcihQYXJhbGxlbEFwcGx5V29y a2VySW5mbyAqd2luZm8pCiB7CiAJQXNzZXJ0KCFhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSk7 CiAJQXNzZXJ0KHdpbmZvLT5pbl91c2UpOwotCUFzc2VydChwYV9nZXRfeGFjdF9zdGF0ZSh3aW5m by0+c2hhcmVkKSA9PSBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCk7CisJQXNzZXJ0KCF3aW5mby0+ c3RyZWFtX3R4biB8fAorCQkgICBwYV9nZXRfeGFjdF9zdGF0ZSh3aW5mby0+c2hhcmVkKSA9PSBQ QVJBTExFTF9UUkFOU19GSU5JU0hFRCk7CiAKIAlpZiAoIWhhc2hfc2VhcmNoKFBhcmFsbGVsQXBw bHlUeG5IYXNoLCAmd2luZm8tPnNoYXJlZC0+eGlkLCBIQVNIX1JFTU9WRSwgTlVMTCkpCiAJCWVs b2coRVJST1IsICJoYXNoIHRhYmxlIGNvcnJ1cHRlZCIpOwogCiAJLyoKLQkgKiBTdG9wIHRoZSB3 b3JrZXIgaWYgdGhlcmUgYXJlIGVub3VnaCB3b3JrZXJzIGluIHRoZSBwb29sLgorCSAqIFhYWCB3 ZSBzdG9wIHRoZSB3b3JrZXIgaWYgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgc2VyaWFsaXplIHBh cnQgb2YgdGhlCisJICogdHJhbnNhY3Rpb24gZGF0YSBkdWUgdG8gYSBzZW5kIHRpbWVvdXQuIFRo aXMgaXMgYmVjYXVzZSB0aGUgbWVzc2FnZSBjb3VsZAorCSAqIGJlIHBhcnRpYWxseSB3cml0dGVu IHRvIHRoZSBxdWV1ZSBhbmQgdGhlcmUgaXMgbm8gd2F5IHRvIGNsZWFuIHRoZSBxdWV1ZQorCSAq IG90aGVyIHRoYW4gcmVzZW5kaW5nIHRoZSBtZXNzYWdlIHVudGlsIGl0IHN1Y2NlZWRzLiBJbnN0 ZWFkIG9mIHRyeWluZyB0bworCSAqIHNlbmQgdGhlIGRhdGEgd2hpY2ggYW55d2F5IHdvdWxkIGhh dmUgYmVlbiBzZXJpYWxpemVkIGFuZCB0aGVuIGxldHRpbmcKKwkgKiB0aGUgcGFyYWxsZWwgYXBw bHkgd29ya2VyIGRlYWwgd2l0aCB0aGUgc3B1cmlvdXMgbWVzc2FnZSwgd2Ugc3RvcCB0aGUKKwkg KiB3b3JrZXIuCiAJICoKLQkgKiBYWFggQWRkaXRpb25hbGx5LCB3ZSBhbHNvIHN0b3AgdGhlIHdv cmtlciBpZiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlcgotCSAqIHNlcmlhbGl6ZSBwYXJ0IG9mIHRo ZSB0cmFuc2FjdGlvbiBkYXRhIGR1ZSB0byBhIHNlbmQgdGltZW91dC4gVGhpcyBpcwotCSAqIGJl Y2F1c2UgdGhlIG1lc3NhZ2UgY291bGQgYmUgcGFydGlhbGx5IHdyaXR0ZW4gdG8gdGhlIHF1ZXVl IGFuZCB0aGVyZQotCSAqIGlzIG5vIHdheSB0byBjbGVhbiB0aGUgcXVldWUgb3RoZXIgdGhhbiBy ZXNlbmRpbmcgdGhlIG1lc3NhZ2UgdW50aWwgaXQKLQkgKiBzdWNjZWVkcy4gSW5zdGVhZCBvZiB0 cnlpbmcgdG8gc2VuZCB0aGUgZGF0YSB3aGljaCBhbnl3YXkgd291bGQgaGF2ZQotCSAqIGJlZW4g c2VyaWFsaXplZCBhbmQgdGhlbiBsZXR0aW5nIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZGVh bCB3aXRoCi0JICogdGhlIHNwdXJpb3VzIG1lc3NhZ2UsIHdlIHN0b3AgdGhlIHdvcmtlci4KKwkg KiBGb3Igb3RoZXIgY2FzZXMsIHdlIGRvIG5vdCBzdG9wIHdvcmtlcnMgb25jZSBzdGFydGVkLiBB bGwgdHJhbnNhY3Rpb25zCisJICogKHdoZXRoZXIgc3RyZWFtZWQgb3Igbm90KSBhcmUgYXNzaWdu ZWQgdG8gcGFyYWxsZWwgYXBwbHkgd29ya2Vycywgc28KKwkgKiByZXN0YXJ0aW5nIHdvcmtlcnMg ZnJlcXVlbnRseSB3b3VsZCBvbmx5IGluY3JlYXNlIENQVSBvdmVyaGVhZCBhbmQgc2xvdworCSAq IGRvd24gdGhlIGxlYWRlcidzIGFiaWxpdHkgdG8gZGlzcGF0Y2ggY2hhbmdlcyB0byB3b3JrZXJz LgogCSAqLwotCWlmICh3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMgfHwKLQkJbGlzdF9sZW5ndGgo UGFyYWxsZWxBcHBseVdvcmtlclBvb2wpID4KLQkJKG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJz X3Blcl9zdWJzY3JpcHRpb24gLyAyKSkKKwlpZiAod2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzKQog CXsKIAkJbG9naWNhbHJlcF9wYV93b3JrZXJfc3RvcCh3aW5mbyk7CiAJCXBhX2ZyZWVfd29ya2Vy X2luZm8od2luZm8pOwpAQCAtNzgxLDE1ICs5MTYsMTcgQEAgcGFfcHJvY2Vzc19zcG9vbGVkX21l c3NhZ2VzX2lmX3JlcXVpcmVkKHZvaWQpCiAvKgogICogR2V0IHRoZSBsb2NhbCBlbmQgTFNOIGZv ciBhIHRyYW5zYWN0aW9uIGFwcGxpZWQgYnkgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCiAgKgor ICogU2V0IGRlbGV0ZV9lbnRyeSB0byB0cnVlIGlmIHlvdSBpbnRlbmQgdG8gcmVtb3ZlIHRoZSB0 cmFuc2FjdGlvbiBmcm9tIHRoZQorICogUGFyYWxsZWxBcHBseVR4bkhhc2ggYWZ0ZXIgY29sbGVj dGluZyBpdHMgTFNOLiBPdGhlcndpc2UsIHRoZSBsb2NhbCBlbmQgTFNOCisgKiBpcyBjb3BpZWQg ZnJvbSBzaGFyZWQgbWVtb3J5IGludG8gdGhlIGxvY2FsIGVudHJ5IG9mIFBhcmFsbGVsQXBwbHlU eG5IYXNoIGZvcgorICogbGF0ZXIgY29sbGVjdGlvbiBieSB0aGUgbGVhZGVyLgorICoKICAqIElm IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZGlkIG5vdCB3cml0ZSBhbnkgY2hhbmdlcyBkdXJp bmcgdGhlIHRyYW5zYWN0aW9uCiAgKiBhcHBsaWNhdGlvbiBkdWUgdG8gc2l0dWF0aW9ucyBsaWtl IHVwZGF0ZS9kZWxldGVfbWlzc2luZyBvciBhIGJlZm9yZSB0cmlnZ2VyLAogICogdGhlICpza2lw cGVkX3dyaXRlIHdpbGwgYmUgc2V0IHRvIHRydWUuCi0gKgotICogT25jZSB0aGUgTFNOIGlzIHJl dHJpZXZlZCwgdGhlIHRyYW5zYWN0aW9uIGVudHJ5IGlzIHJlbW92ZWQgZnJvbQotICogUGFyYWxs ZWxBcHBseVR4bkhhc2guCiAgKi8KIFhMb2dSZWNQdHIKLXBhX2dldF9sYXN0X2NvbW1pdF9lbmQo VHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgKnNraXBwZWRfd3JpdGUpCitwYV9nZXRfbGFzdF9jb21t aXRfZW5kKFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIGRlbGV0ZV9lbnRyeSwgYm9vbCAqc2tpcHBl ZF93cml0ZSkKIHsKIAlib29sCQlmb3VuZDsKIAlQYXJhbGxlbEFwcGx5V29ya2VyRW50cnkgKmVu dHJ5OwpAQCAtODE1LDcgKzk1Miw4IEBAIHBhX2dldF9sYXN0X2NvbW1pdF9lbmQoVHJhbnNhY3Rp b25JZCB4aWQsIGJvb2wgKnNraXBwZWRfd3JpdGUpCiAJd2luZm8gPSBlbnRyeS0+d2luZm87CiAJ aWYgKHdpbmZvID09IE5VTEwpCiAJewotCQlpZiAoIWhhc2hfc2VhcmNoKFBhcmFsbGVsQXBwbHlU eG5IYXNoLCAmeGlkLCBIQVNIX1JFTU9WRSwgTlVMTCkpCisJCWlmIChkZWxldGVfZW50cnkgJiYK KwkJCSFoYXNoX3NlYXJjaChQYXJhbGxlbEFwcGx5VHhuSGFzaCwgJnhpZCwgSEFTSF9SRU1PVkUs IE5VTEwpKQogCQkJZWxvZyhFUlJPUiwgImhhc2ggdGFibGUgY29ycnVwdGVkIik7CiAKIAkJaWYg KHNraXBwZWRfd3JpdGUpCkBAIC04MzgsNyArOTc2LDggQEAgcGFfZ2V0X2xhc3RfY29tbWl0X2Vu ZChUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCAqc2tpcHBlZF93cml0ZSkKIAllbG9nKERFQlVHMSwg InN0b3JlIGxvY2FsIGNvbW1pdCAlWC8lWCBlbmQgdG8gdHhuIGVudHJ5OiAldSIsCiAJCSBMU05f Rk9STUFUX0FSR1MoZW50cnktPmxvY2FsX2VuZCksIHhpZCk7CiAKLQlpZiAoIWhhc2hfc2VhcmNo KFBhcmFsbGVsQXBwbHlUeG5IYXNoLCAmeGlkLCBIQVNIX1JFTU9WRSwgTlVMTCkpCisJaWYgKGRl bGV0ZV9lbnRyeSAmJgorCQkhaGFzaF9zZWFyY2goUGFyYWxsZWxBcHBseVR4bkhhc2gsICZ4aWQs IEhBU0hfUkVNT1ZFLCBOVUxMKSkKIAkJZWxvZyhFUlJPUiwgImhhc2ggdGFibGUgY29ycnVwdGVk Iik7CiAKIAlyZXR1cm4gZW50cnktPmxvY2FsX2VuZDsKQEAgLTEwOTEsNiArMTIzMCw5IEBAIHBh X3NodXRkb3duKGludCBjb2RlLCBEYXR1bSBhcmcpCiAJCQkJICAgSU5WQUxJRF9QUk9DX05VTUJF Uik7CiAKIAlkc21fZGV0YWNoKChkc21fc2VnbWVudCAqKSBEYXR1bUdldFBvaW50ZXIoYXJnKSk7 CisKKwlpZiAocGFyYWxsZWxfYXBwbHlfZHNhX2FyZWEpCisJCWRzYV9kZXRhY2gocGFyYWxsZWxf YXBwbHlfZHNhX2FyZWEpOwogfQogCiAvKgpAQCAtMTQwMiw3ICsxNTQ0LDYgQEAgcGFfc2VuZF9k YXRhKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgU2l6ZSBuYnl0ZXMsIGNvbnN0IHZv aWQgKmRhdGEpCiAJc2htX21xX3Jlc3VsdCByZXN1bHQ7CiAJVGltZXN0YW1wVHogc3RhcnRUaW1l ID0gMDsKIAotCUFzc2VydCghSXNUcmFuc2FjdGlvblN0YXRlKCkpOwogCUFzc2VydCghd2luZm8t PnNlcmlhbGl6ZV9jaGFuZ2VzKTsKIAogCS8qCkBAIC0xNDU0LDYgKzE1OTUsNTggQEAgcGFfc2Vu ZF9kYXRhKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgU2l6ZSBuYnl0ZXMsIGNvbnN0 IHZvaWQgKmRhdGEpCiAJfQogfQogCisvKgorICogRGlzdHJpYnV0ZSByZW1vdGUgcmVsYXRpb24g aW5mb3JtYXRpb24gdG8gYWxsIGFjdGl2ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzCisgKiB0aGF0 IHJlcXVpcmUgaXQuCisgKi8KK3ZvaWQKK3BhX2Rpc3RyaWJ1dGVfc2NoZW1hX2NoYW5nZXNfdG9f d29ya2VycyhMb2dpY2FsUmVwUmVsYXRpb24gKnJlbCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBvdXQ7 CisKKwkvKiBPbmx5IGxlYWRlciBhcHBseSB3b3JrZXJzIGNhbiBkaXN0cmlidXRlIHNjaGVtYSBj aGFuZ2VzICovCisJaWYgKCFhbV9sZWFkZXJfYXBwbHlfd29ya2VyKCkpCisJCXJldHVybjsKKwor CS8qIFF1aWNrIGV4aXQgaWYgdGhlcmUgYXJlIG5vIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgKi8K KwlpZiAoIVBhcmFsbGVsQXBwbHlXb3JrZXJQb29sKQorCQlyZXR1cm47CisKKwlpbml0U3RyaW5n SW5mbygmb3V0KTsKKworCXdyaXRlX2ludGVybmFsX3JlbGF0aW9uKCZvdXQsIHJlbCk7CisKKwlm b3JlYWNoX3B0cihQYXJhbGxlbEFwcGx5V29ya2VySW5mbywgd2luZm8sIFBhcmFsbGVsQXBwbHlX b3JrZXJQb29sKQorCXsKKwkJLyoKKwkJICogU2tpcCB0aGUgd29ya2VyIHJlc3BvbnNpYmxlIGZv ciB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgYXMgdGhlCisJCSAqIHJlbGF0aW9uIGluZm9ybWF0 aW9uIGhhcyBhbHJlYWR5IGJlZW4gc2VudCB0byBpdC4KKwkJICovCisJCWlmICh3aW5mbyA9PSBz dHJlYW1fYXBwbHlfd29ya2VyKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogU2tpcCB0aGUg d29ya2VyIHRoYXQgaXMgaW4gc2VyaWFsaXplIG1vZGUsIGFzIHRoZXkgd2lsbCBzb29uIHN0b3AK KwkJICogb25jZSB0aGV5IGZpbmlzaCBhcHBseWluZyB0aGUgdHJhbnNhY3Rpb24uCisJCSAqLwor CQlpZiAod2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzKQorCQkJY29udGludWU7CisKKwkJZWxvZyhE RUJVRzEsICJkaXN0cmlidXRpbmcgc2NoZW1hIGNoYW5nZXMgdG8gcGEgd29ya2VycyIpOworCisJ CWlmIChwYV9zZW5kX2RhdGEod2luZm8sIG91dC5sZW4sIG91dC5kYXRhKSkKKwkJCWNvbnRpbnVl OworCisJCS8qCisJCSAqIFRPRE86IFN1cHBvcnQgc3dpdGNoaW5nIHRvIFBBUlRJQUxfU0VSSUFM SVpFIG1vZGUgd2hlbiB0aGUgc2VuZAorCQkgKiBidWZmZXIgYmVjb21lcyBmdWxsLgorCQkgKi8K KwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVS RVFVSVNJVEVfU1RBVEUpLAorCQkJCWVycm1zZygiY291bGQgbm90IHNlbmQgZGF0YSB0byB0aGUg bG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlv biIpKTsKKwl9Cit9CisKIC8qCiAgKiBTd2l0Y2ggdG8gUEFSVElBTF9TRVJJQUxJWkUgbW9kZSBm b3IgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gLS0gdGhpcyBtZWFucwogICogdGhhdCB0aGUgY3Vy cmVudCBkYXRhIGFuZCBhbnkgc3Vic2VxdWVudCBkYXRhIGZvciB0aGlzIHRyYW5zYWN0aW9uIHdp bGwgYmUKQEAgLTE4NzAsMjUgKzIwNjMsNDEgQEAgcGFfZGVjcl9hbmRfd2FpdF9zdHJlYW1fYmxv Y2sodm9pZCkKIHZvaWQKIHBhX3hhY3RfZmluaXNoKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3 aW5mbywgWExvZ1JlY1B0ciByZW1vdGVfbHNuKQogeworCVhMb2dSZWNQdHIJbG9jYWxfbHNuID0g SW52YWxpZFhMb2dSZWNQdHI7CisJVHJhbnNhY3Rpb25JZCBwYV9yZW1vdGVfeGlkID0gd2luZm8t PnNoYXJlZC0+eGlkOworCiAJQXNzZXJ0KGFtX2xlYWRlcl9hcHBseV93b3JrZXIoKSk7CiAKIAkv KgotCSAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2NrIHNvIHRoYXQgcGFyYWxsZWwgYXBw bHkgd29ya2VyIGNhbgotCSAqIGNvbnRpbnVlIHRvIHJlY2VpdmUgYW5kIGFwcGx5IGNoYW5nZXMu CisJICogVW5sb2NrIHRoZSBzaGFyZWQgb2JqZWN0IGxvY2sgdGFrZW4gZm9yIHN0cmVhbWluZyB0 cmFuc2FjdGlvbnMgc28gdGhhdAorCSAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBjYW4gY29udGlu dWUgdG8gcmVjZWl2ZSBhbmQgYXBwbHkgY2hhbmdlcy4KIAkgKi8KLQlwYV91bmxvY2tfc3RyZWFt KHdpbmZvLT5zaGFyZWQtPnhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJaWYgKHdpbmZvLT5z dHJlYW1fdHhuKQorCQlwYV91bmxvY2tfc3RyZWFtKHdpbmZvLT5zaGFyZWQtPnhpZCwgQWNjZXNz RXhjbHVzaXZlTG9jayk7CiAKIAkvKgotCSAqIFdhaXQgZm9yIHRoYXQgd29ya2VyIHRvIGZpbmlz aC4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFpbnRhaW4gY29tbWl0Ci0JICogb3JkZXIgd2hpY2gg YXZvaWRzIGZhaWx1cmVzIGR1ZSB0byB0cmFuc2FjdGlvbiBkZXBlbmRlbmNpZXMgYW5kCi0JICog ZGVhZGxvY2tzLgorCSAqIFdhaXQgZm9yIHRoYXQgd29ya2VyIGZvciBzdHJlYW1pbmcgdHJhbnNh Y3Rpb24gdG8gZmluaXNoLiBUaGlzIGlzCisJICogbmVjZXNzYXJ5IHRvIG1haW50YWluIGNvbW1p dCBvcmRlciB3aGljaCBhdm9pZHMgZmFpbHVyZXMgZHVlIHRvCisJICogdHJhbnNhY3Rpb24gZGVw ZW5kZW5jaWVzIGFuZCBkZWFkbG9ja3MuCisJICoKKwkgKiBGb3IgdHJhbnNhY3Rpb25zIGluIHBh cnRpYWwgc2VyYWxpemUgbW9kZSwgd2FpdCBmb3Igc3RvcCBhcyB3ZWxsIGFzIHRoZQorCSAqIHdv cmtlciBpcyBhbnl3YXkgY2Fubm90IGJlIHJldXNlZCBhbnltb3JlIChzZWUgcGFfZnJlZV93b3Jr ZXIoKSBmb3IKKwkgKiBkZXRhaWxzKS4KIAkgKi8KLQlwYV93YWl0X2Zvcl94YWN0X2ZpbmlzaCh3 aW5mbyk7CisJaWYgKHdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcyB8fCB3aW5mby0+c3RyZWFtX3R4 bikKKwl7CisJCXBhX3dhaXRfZm9yX3hhY3RfZmluaXNoKHdpbmZvKTsKKworCQlsb2NhbF9sc24g PSB3aW5mby0+c2hhcmVkLT5sYXN0X2NvbW1pdF9lbmQ7CisJCXBhX3JlbW90ZV94aWQgPSBJbnZh bGlkVHJhbnNhY3Rpb25JZDsKKworCQlwYV9mcmVlX3dvcmtlcih3aW5mbyk7CisJfQogCiAJaWYg KFhMb2dSZWNQdHJJc1ZhbGlkKHJlbW90ZV9sc24pKQotCQlzdG9yZV9mbHVzaF9wb3NpdGlvbihy ZW1vdGVfbHNuLCB3aW5mby0+c2hhcmVkLT5sYXN0X2NvbW1pdF9lbmQpOworCQlzdG9yZV9mbHVz aF9wb3NpdGlvbihyZW1vdGVfbHNuLCBsb2NhbF9sc24sIHBhX3JlbW90ZV94aWQpOwogCi0JcGFf ZnJlZV93b3JrZXIod2luZm8pOworCXBhX3NldF9zdHJlYW1fYXBwbHlfd29ya2VyKE5VTEwpOwog fQogCiAvKgpAQCAtMjAyMiwzICsyMjMxLDYyIEBAIHBhX3dhaXRfZm9yX2RlcGVuZGVkX3RyYW5z YWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkKQogCiAJZWxvZyhERUJVRzEsICJmaW5pc2ggd2FpdGlu ZyBmb3IgZGVwZW5kZWQgeGlkICV1IiwgeGlkKTsKIH0KKworLyoKKyAqIE1hcmsgdGhlIHRyYW5z YWN0aW9uIHN0YXRlIGFzIGZpbmlzaGVkIGFuZCByZW1vdmUgdGhlIHNoYXJlZCBoYXNoIGVudHJ5 LgorICovCit2b2lkCitwYV9jb21taXRfdHJhbnNhY3Rpb24odm9pZCkKK3sKKwlUcmFuc2FjdGlv bklkIHhpZCA9IE15UGFyYWxsZWxTaGFyZWQtPnhpZDsKKworCVNwaW5Mb2NrQWNxdWlyZSgmTXlQ YXJhbGxlbFNoYXJlZC0+bXV0ZXgpOworCU15UGFyYWxsZWxTaGFyZWQtPnhhY3Rfc3RhdGUgPSBQ QVJBTExFTF9UUkFOU19GSU5JU0hFRDsKKwlTcGluTG9ja1JlbGVhc2UoJk15UGFyYWxsZWxTaGFy ZWQtPm11dGV4KTsKKworCWRzaGFzaF9kZWxldGVfa2V5KHBhcmFsbGVsaXplZF90eG5zLCAmeGlk KTsKKwllbG9nKERFQlVHMSwgInhpZCAldSBjb21taXR0ZWQiLCB4aWQpOworfQorCisvKgorICog V3JpdGUgaW50ZXJuYWwgcmVsYXRpb24gZGVzY3JpcHRpb24gdG8gdGhlIG91dHB1dCBzdHJlYW0u CisgKi8KK3N0YXRpYyB2b2lkCit3cml0ZV9pbnRlcm5hbF9yZWxhdGlvbihTdHJpbmdJbmZvIHMs IExvZ2ljYWxSZXBSZWxhdGlvbiAqcmVsKQoreworCXBxX3NlbmRieXRlKHMsIExPR0lDQUxfUkVQ X01TR19JTlRFUk5BTF9NRVNTQUdFKTsKKwlwcV9zZW5kYnl0ZShzLCBQQV9NU0dfUkVMTUFQKTsK KworCWlmIChyZWwpCisJeworCQlwcV9zZW5kaW50KHMsIDEsIDQpOworCQlsb2dpY2FscmVwX3dy aXRlX2ludGVybmFsX3JlbChzLCByZWwpOworCX0KKwllbHNlCisJeworCQlwcV9zZW5kaW50KHMs IGxvZ2ljYWxyZXBfZ2V0X251bV9yZWxzKCksIDQpOworCQlsb2dpY2FscmVwX3dyaXRlX2FsbF9y ZWxzKHMpOworCX0KK30KKworLyoKKyAqIFJlZ2lzdGVyIGEgdHJhbnNhY3Rpb24gdG8gdGhlIHNo YXJlZCBoYXNoIHRhYmxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBs ZWFkZXIgZHVyaW5nIHRoZSBjb21taXQgcGhhc2Ugb2Ygbm9uLXN0cmVhbWVkCisgKiB0cmFuc2Fj dGlvbnMuIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdGhhdCBhcHBsaWVzIHRoZSB0cmFuc2Fj dGlvbiB3aWxsCisgKiByZW1vdmUgaXQgZnJvbSB0aGUgaGFzaCB0YWJsZSB1cG9uIGNvbXBsZXRp b24uCisgKi8KK3ZvaWQKK3BhX2FkZF9wYXJhbGxlbGl6ZWRfdHJhbnNhY3Rpb24oVHJhbnNhY3Rp b25JZCB4aWQpCit7CisJYm9vbAkJZm91bmQ7CisJUGFyYWxsZWxpemVkVHhuRW50cnkgKnR4bl9l bnRyeTsKKworCUFzc2VydChwYXJhbGxlbGl6ZWRfdHhucyk7CisJQXNzZXJ0KFRyYW5zYWN0aW9u SWRJc1ZhbGlkKHhpZCkpOworCUFzc2VydChhbV9sZWFkZXJfYXBwbHlfd29ya2VyKCkpOworCisJ dHhuX2VudHJ5ID0gZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0KHBhcmFsbGVsaXplZF90eG5zLCAmeGlk LCAmZm91bmQpOworCisJZHNoYXNoX3JlbGVhc2VfbG9jayhwYXJhbGxlbGl6ZWRfdHhucywgdHhu X2VudHJ5KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cHJvdG8uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwppbmRleCBh MGNhYzA1Y2RjZC4uZWIxYTg0NmNlMGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3Byb3RvLmMKQEAgLTY5MSw2ICs2OTEsNDQgQEAgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5n SW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBSZWxhdGlvbiByZWwsCiAJbG9naWNhbHJlcF93 cml0ZV9hdHRycyhvdXQsIHJlbCwgY29sdW1ucywgaW5jbHVkZV9nZW5jb2xzX3R5cGUpOwogfQog CisvKgorICogV3JpdGUgaW50ZXJuYWwgcmVsYXRpb24gZGVzY3JpcHRpb24gdG8gdGhlIG91dHB1 dCBzdHJlYW0uCisgKi8KK3ZvaWQKK2xvZ2ljYWxyZXBfd3JpdGVfaW50ZXJuYWxfcmVsKFN0cmlu Z0luZm8gb3V0LCBMb2dpY2FsUmVwUmVsYXRpb24gKnJlbCkKK3sKKwlwcV9zZW5kaW50MzIob3V0 LCByZWwtPnJlbW90ZWlkKTsKKworCS8qIFdyaXRlIHJlbGF0aW9uIG5hbWUgKi8KKwlwcV9zZW5k c3RyaW5nKG91dCwgcmVsLT5uc3BuYW1lKTsKKwlwcV9zZW5kc3RyaW5nKG91dCwgcmVsLT5yZWxu YW1lKTsKKworCS8qIFdyaXRlIHRoZSByZXBsaWNhIGlkZW50aXR5LiAqLworCXBxX3NlbmRieXRl KG91dCwgcmVsLT5yZXBsaWRlbnQpOworCisJLyogV3JpdGUgYXR0cmlidXRlIGRlc2NyaXB0aW9u ICovCisJcHFfc2VuZGludDE2KG91dCwgcmVsLT5uYXR0cyk7CisKKwlmb3IgKGludCBpID0gMDsg aSA8IHJlbC0+bmF0dHM7IGkrKykKKwl7CisJCXVpbnQ4CQlmbGFncyA9IDA7CisKKwkJaWYgKGJt c19pc19tZW1iZXIoaSwgcmVsLT5hdHRrZXlzKSkKKwkJCWZsYWdzIHw9IExPR0lDQUxSRVBfSVNf UkVQTElDQV9JREVOVElUWTsKKworCQlwcV9zZW5kYnl0ZShvdXQsIGZsYWdzKTsKKworCQkvKiBh dHRyaWJ1dGUgbmFtZSAqLworCQlwcV9zZW5kc3RyaW5nKG91dCwgcmVsLT5hdHRuYW1lc1tpXSk7 CisKKwkJLyogYXR0cmlidXRlIHR5cGUgaWQgKi8KKwkJcHFfc2VuZGludDMyKG91dCwgcmVsLT5h dHR0eXBzW2ldKTsKKworCQkvKiBpZ25vcmUgYXR0cmlidXRlIG1vZGUgZm9yIG5vdyAqLworCQlw cV9zZW5kaW50MzIob3V0LCAwKTsKKwl9Cit9CisKIC8qCiAgKiBSZWFkIHRoZSByZWxhdGlvbiBp bmZvIGZyb20gc3RyZWFtIGFuZCByZXR1cm4gYXMgTG9naWNhbFJlcFJlbGF0aW9uLgogICovCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKaW5kZXggYWI2MzEzZWIx YmMuLmUxY2UxODNkZmQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3JlbGF0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxh dGlvbi5jCkBAIC05NjEsNiArOTYxLDM3IEBAIEZpbmRMb2dpY2FsUmVwTG9jYWxJbmRleChSZWxh dGlvbiBsb2NhbHJlbCwgTG9naWNhbFJlcFJlbGF0aW9uICpyZW1vdGVyZWwsCiAJcmV0dXJuIElu dmFsaWRPaWQ7CiB9CiAKKy8qCisgKiBHZXQgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBM b2dpY2FsUmVwUmVsTWFwLgorICovCitpbnQKK2xvZ2ljYWxyZXBfZ2V0X251bV9yZWxzKHZvaWQp Cit7CisJaWYgKExvZ2ljYWxSZXBSZWxNYXAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1 cm4gaGFzaF9nZXRfbnVtX2VudHJpZXMoTG9naWNhbFJlcFJlbE1hcCk7Cit9CisKKy8qCisgKiBX cml0ZSBhbGwgdGhlIHJlbW90ZSByZWxhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBMb2dpY2Fs UmVwUmVsTWFwRW50cnkgdG8KKyAqIHRoZSBvdXRwdXQgc3RyZWFtLgorICovCit2b2lkCitsb2dp Y2FscmVwX3dyaXRlX2FsbF9yZWxzKFN0cmluZ0luZm8gb3V0KQoreworCUxvZ2ljYWxSZXBSZWxN YXBFbnRyeSAqZW50cnk7CisJSEFTSF9TRVFfU1RBVFVTIHN0YXR1czsKKworCWlmIChMb2dpY2Fs UmVwUmVsTWFwID09IE5VTEwpCisJCXJldHVybjsKKworCWhhc2hfc2VxX2luaXQoJnN0YXR1cywg TG9naWNhbFJlcFJlbE1hcCk7CisKKwl3aGlsZSAoKGVudHJ5ID0gKExvZ2ljYWxSZXBSZWxNYXBF bnRyeSAqKSBoYXNoX3NlcV9zZWFyY2goJnN0YXR1cykpICE9IE5VTEwpCisJCWxvZ2ljYWxyZXBf d3JpdGVfaW50ZXJuYWxfcmVsKG91dCwgJmVudHJ5LT5yZW1vdGVyZWwpOworfQorCiAvKgogICog R2V0IHRoZSBMb2dpY2FsUmVwUmVsTWFwRW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4g cmVsaWQgd2l0aG91dAogICogb3BlbmluZyB0aGUgbG9jYWwgcmVsYXRpb24uCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCAxOWNmYmNiMWNiNy4uZDliZTBlMzYw ZGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMjkwLDYg KzI5MCw3IEBACiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL2Fj bC5oIgogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9w b2ludC5oIgogI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2Nh Y2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKQEAgLTUxNCw2ICs1MTUsOCBAQCBz dGF0aWMgTGlzdCAqb25fY29tbWl0X3dha2V1cF93b3JrZXJzX3N1YmlkcyA9IE5JTDsKIAogYm9v bAkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CiBzdGF0aWMgWExvZ1JlY1B0ciByZW1v dGVfZmluYWxfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CitzdGF0aWMgVHJhbnNhY3Rpb25JZCBy ZW1vdGVfeGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CitzdGF0aWMgVHJhbnNhY3Rpb25JZCBs YXN0X3BhcmFsbGVsaXplZF9yZW1vdGVfeGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAKIC8q IGZpZWxkcyB2YWxpZCBvbmx5IHdoZW4gcHJvY2Vzc2luZyBzdHJlYW1lZCB0cmFuc2FjdGlvbiAq Lwogc3RhdGljIGJvb2wgaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSBmYWxzZTsKQEAgLTcyMyw2 ICs3MjYsNyBAQCBzdGF0aWMgdm9pZCBvbl9leGl0X2NsZWFyX3hhY3Rfc3RhdGUoaW50IGNvZGUs IERhdHVtIGFyZyk7CiAKIHN0YXRpYyB2b2lkIHNlbmRfaW50ZXJuYWxfZGVwZW5kZW5jaWVzKFBh cmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywKIAkJCQkJCQkJCSAgIExpc3QgKmRlcGVuZHNf b25feGlkcyk7CitzdGF0aWMgdm9pZCBidWlsZF9kZXBlbmRlbmN5X3dpdGhfbGFzdF9jb21taXR0 ZWRfdHhuKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyk7CiAKIC8qCiAgKiBDb21wdXRl IHRoZSBoYXNoIHZhbHVlIGZvciBlbnRyaWVzIGluIHRoZSByZXBsaWNhX2lkZW50aXR5X3RhYmxl LgpAQCAtODQyLDcgKzg0Niw3IEBAIGNsZWFudXBfY29tbWl0dGVkX3JlcGxpY2FfaWRlbnRpdHlf ZW50cmllcyh2b2lkKQogCQkJWExvZ1JlY1B0cklzVmFsaWQocG9zLT5sb2NhbF9lbmQpKQogCQkJ Y29udGludWU7CiAKLQkJcG9zLT5sb2NhbF9lbmQgPSBwYV9nZXRfbGFzdF9jb21taXRfZW5kKHBv cy0+cGFfcmVtb3RlX3hpZCwKKwkJcG9zLT5sb2NhbF9lbmQgPSBwYV9nZXRfbGFzdF9jb21taXRf ZW5kKHBvcy0+cGFfcmVtb3RlX3hpZCwgZmFsc2UsCiAJCQkJCQkJCQkJCQkmc2tpcHBlZF93cml0 ZSk7CiAKIAkJZWxvZyhERUJVRzEsCkBAIC0xNDgxLDE0ICsxNDg1LDE0IEBAIGhhbmRsZV9zdHJl YW1lZF90cmFuc2FjdGlvbihMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24sIFN0cmluZ0luZm8gcykK IAlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKIAlTdHJpbmdJbmZvRGF0YSBvcmlnaW5h bF9tc2c7CiAKKwlpZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQorCQlyZXR1cm4gZmFsc2U7 CisKIAlhcHBseV9hY3Rpb24gPSBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKHN0cmVhbV94 aWQsICZ3aW5mbyk7CiAKIAkvKiBub3QgaW4gc3RyZWFtaW5nIG1vZGUgKi8KIAlpZiAoYXBwbHlf YWN0aW9uID09IFRSQU5TX0xFQURFUl9BUFBMWSkKLQl7Ci0JCWhhbmRsZV9kZXBlbmRlbmN5X29u X2NoYW5nZShhY3Rpb24sIHMsIEludmFsaWRUcmFuc2FjdGlvbklkLCB3aW5mbyk7CiAJCXJldHVy biBmYWxzZTsKLQl9CiAKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoc3RyZWFtX3hpZCkp OwogCkBAIC0xNTYzLDYgKzE1NjcsNzMgQEAgaGFuZGxlX3N0cmVhbWVkX3RyYW5zYWN0aW9uKExv Z2ljYWxSZXBNc2dUeXBlIGFjdGlvbiwgU3RyaW5nSW5mbyBzKQogCX0KIH0KIAorLyoKKyAqIEhh bmRsZSBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyB3aGVuIHBhcmFsbGVsIGFwcGx5IGlzIGlu IHVzZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJ1bnMgb25seSBpbiB0aGUgbGVhZGVyIGFwcGx5 IHdvcmtlciB3aGlsZSBwcm9jZXNzaW5nIGEgcmVtb3RlCisgKiB0cmFuc2FjdGlvbi4gSXQgY2hl Y2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgY2hhbmdlIGhhcyBkZXBlbmRlbmNpZXMgb24KKyAqIHBy ZWNlZGluZyBwYXJhbGxlbGl6ZWQgdHJhbnNhY3Rpb25zIGFuZCBkZWNpZGVzIHdoZXRoZXIgdG8g c2VuZCB0aGUgY2hhbmdlIHRvCisgKiBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqCisgKiBS ZXR1cm5zIHRydWUgaWYgdGhlIGNoYW5nZSBoYXMgYmVlbiBkaXNwYXRjaGVkIHRvIGEgcGFyYWxs ZWwgd29ya2VyLAorICogaW5kaWNhdGluZyB0aGUgbGVhZGVyIGRvZXMgbm90IG5lZWQgdG8gYXBw bHkgaXQgZGlyZWN0bHkuIFJldHVybnMgZmFsc2UKKyAqIG90aGVyd2lzZS4KKyAqCisgKiBFeGNl cHRpb246IElmIHRoZSBtZXNzYWdlIGJlaW5nIHByb2Nlc3NlZCBpcyBMT0dJQ0FMX1JFUF9NU0df UkVMQVRJT04gb3IKKyAqIExPR0lDQUxfUkVQX01TR19UWVBFLCByZXR1cm4gZmFsc2UgZXZlbiBp ZiB0aGUgbWVzc2FnZSBuZWVkcyB0byBiZSBzZW50IHRvIGEKKyAqIHBhcmFsbGVsIGFwcGx5IHdv cmtlci4KKyAqLworc3RhdGljIGJvb2wKK2hhbmRsZV9wYXJhbGxlbGl6ZWRfdHJhbnNhY3Rpb24o TG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJbmZvIHMpCit7CisJUGFyYWxsZWxBcHBs eVdvcmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOworCisJ LyoKKwkgKiBEZXBlbmRlbmN5IGNoZWNraW5nIGZvciBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9u cyBpcyBvbmx5IHJlcXVpcmVkIGluCisJICogdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgZHVyaW5n IGEgcmVtb3RlIHRyYW5zYWN0aW9uLgorCSAqLworCWlmICghaW5fcmVtb3RlX3RyYW5zYWN0aW9u IHx8ICFhbV9sZWFkZXJfYXBwbHlfd29ya2VyKCkpCisJCXJldHVybiBmYWxzZTsKKworCWFwcGx5 X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24ocmVtb3RlX3hpZCwgJndpbmZv KTsKKworCS8qIG5vdCBhc3NpZ25lZCB0byBwYXJhbGxlbCBhcHBseSB3b3JrZXIsIGFwcGx5IGlu IGxlYWRlciAqLworCWlmIChhcHBseV9hY3Rpb24gPT0gVFJBTlNfTEVBREVSX0FQUExZKQorCXsK KwkJaGFuZGxlX2RlcGVuZGVuY3lfb25fY2hhbmdlKGFjdGlvbiwgcywgSW52YWxpZFRyYW5zYWN0 aW9uSWQsIHdpbmZvKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCUFzc2VydChUcmFuc2FjdGlv bklkSXNWYWxpZChyZW1vdGVfeGlkKSk7CisKKwloYW5kbGVfZGVwZW5kZW5jeV9vbl9jaGFuZ2Uo YWN0aW9uLCBzLCByZW1vdGVfeGlkLCB3aW5mbyk7CisKKwlzd2l0Y2ggKGFwcGx5X2FjdGlvbikK Kwl7CisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJCQlBc3NlcnQod2lu Zm8pOworCisJCQkvKiBBbHdheXMgdXBkYXRlIHJlbGF0aW9uIGFuZCB0eXBlIGNhY2hlIGluIGxl YWRlciBhcHBseSB3b3JrZXIgKi8KKwkJCWlmIChwYV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwg cy0+ZGF0YSkpCisJCQkJcmV0dXJuIChhY3Rpb24gIT0gTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9O ICYmCisJCQkJCQlhY3Rpb24gIT0gTE9HSUNBTF9SRVBfTVNHX1RZUEUpOworCisJCQkvKgorCQkJ ICogVE9ETzogU3VwcG9ydCBzd2l0Y2hpbmcgdG8gUEFSVElBTF9TRVJJQUxJWkUgbW9kZSB3aGVu IHRoZSBzZW5kCisJCQkgKiBidWZmZXIgYmVjb21lcyBmdWxsLgorCQkJICovCisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVf U1RBVEUpLAorCQkJCQllcnJtc2coImNvdWxkIG5vdCBzZW5kIGRhdGEgdG8gdGhlIGxvZ2ljYWwg cmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIikpOworCQkJcmV0dXJuIGZhbHNlOwkv KiBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmcgKi8KKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJP UiwgInVuZXhwZWN0ZWQgYXBwbHkgYWN0aW9uOiAlZCIsIChpbnQpIGFwcGx5X2FjdGlvbik7CisJ CQlyZXR1cm4gZmFsc2U7CQkvKiBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmcgKi8KKwl9Cit9CisK IC8qCiAgKiBFeGVjdXRvciBzdGF0ZSBwcmVwYXJhdGlvbiBmb3IgZXZhbHVhdGlvbiBvZiBjb25z dHJhaW50IGV4cHJlc3Npb25zLAogICogaW5kZXhlcyBhbmQgdHJpZ2dlcnMgZm9yIHRoZSBzcGVj aWZpZWQgcmVsYXRpb24uCkBAIC0xOTI0LDE3ICsxOTk1LDYxIEBAIHN0YXRpYyB2b2lkCiBhcHBs eV9oYW5kbGVfYmVnaW4oU3RyaW5nSW5mbyBzKQogewogCUxvZ2ljYWxSZXBCZWdpbkRhdGEgYmVn aW5fZGF0YTsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87CisJVHJhbnNBcHBseUFj dGlvbiBhcHBseV9hY3Rpb247CiAKIAkvKiBUaGVyZSBtdXN0IG5vdCBiZSBhbiBhY3RpdmUgc3Ry ZWFtaW5nIHRyYW5zYWN0aW9uLiAqLwogCUFzc2VydCghVHJhbnNhY3Rpb25JZElzVmFsaWQoc3Ry ZWFtX3hpZCkpOwogCiAJbG9naWNhbHJlcF9yZWFkX2JlZ2luKHMsICZiZWdpbl9kYXRhKTsKLQlz ZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KGJlZ2luX2RhdGEueGlkLCBiZWdpbl9kYXRhLmZp bmFsX2xzbik7CisKKwlyZW1vdGVfeGlkID0gYmVnaW5fZGF0YS54aWQ7CisKKwlzZXRfYXBwbHlf ZXJyb3JfY29udGV4dF94YWN0KHJlbW90ZV94aWQsIGJlZ2luX2RhdGEuZmluYWxfbHNuKTsKIAog CXJlbW90ZV9maW5hbF9sc24gPSBiZWdpbl9kYXRhLmZpbmFsX2xzbjsKIAogCW1heWJlX3N0YXJ0 X3NraXBwaW5nX2NoYW5nZXMoYmVnaW5fZGF0YS5maW5hbF9sc24pOwogCisJcGFfYWxsb2NhdGVf d29ya2VyKHJlbW90ZV94aWQsIGZhbHNlKTsKKworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFuc2Fj dGlvbl9hcHBseV9hY3Rpb24ocmVtb3RlX3hpZCwgJndpbmZvKTsKKworCWVsb2coREVCVUcxLCAi bmV3IHJlbW90ZV94aWQgJXUiLCByZW1vdGVfeGlkKTsKKwlzd2l0Y2ggKGFwcGx5X2FjdGlvbikK Kwl7CisJCWNhc2UgVFJBTlNfTEVBREVSX0FQUExZOgorCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFO U19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCWlmIChw YV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSkpCisJCQl7CisJCQkJcGFfc2V0X3N0 cmVhbV9hcHBseV93b3JrZXIod2luZm8pOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKgorCQkJ ICogVE9ETzogU3VwcG9ydCBzd2l0Y2hpbmcgdG8gUEFSVElBTF9TRVJJQUxJWkUgbW9kZSB3aGVu IHRoZSBzZW5kCisJCQkgKiBidWZmZXIgYmVjb21lcyBmdWxsLgorCQkJICovCisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVf U1RBVEUpLAorCQkJCQllcnJtc2coImNvdWxkIG5vdCBzZW5kIGRhdGEgdG8gdGhlIGxvZ2ljYWwg cmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIikpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKwkJCS8qIEhvbGQgdGhlIGxvY2sgdW50aWwgdGhlIGVu ZCBvZiB0aGUgdHJhbnNhY3Rpb24uICovCisJCQlwYV9sb2NrX3RyYW5zYWN0aW9uKE15UGFyYWxs ZWxTaGFyZWQtPnhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJCQlwYV9zZXRfeGFjdF9zdGF0 ZShNeVBhcmFsbGVsU2hhcmVkLCBQQVJBTExFTF9UUkFOU19TVEFSVEVEKTsKKwkJCWJyZWFrOwor CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBhcHBseSBhY3Rpb246ICVk IiwgKGludCkgYXBwbHlfYWN0aW9uKTsKKwkJCWJyZWFrOworCX0KKwogCWluX3JlbW90ZV90cmFu c2FjdGlvbiA9IHRydWU7CiAKIAlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX1JVTk5JTkcs IE5VTEwpOwpAQCAtMTk1NywxMiArMjA3MiwzMyBAQCBzZW5kX2ludGVybmFsX2RlcGVuZGVuY2ll cyhQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sIExpc3QgKmRlcGVuZHNfb25feGlkcwog CWZvcmVhY2hfeGlkKHhpZCwgZGVwZW5kc19vbl94aWRzKQogCQlwcV9zZW5kaW50MzIoJmRlcGVu ZGVuY2llcywgeGlkKTsKIAotCWlmIChwYV9zZW5kX2RhdGEod2luZm8sIGRlcGVuZGVuY2llcy5s ZW4sIGRlcGVuZGVuY2llcy5kYXRhKSkKKwkvKgorCSAqIFRPRE86IFN1cHBvcnQgc3dpdGNoaW5n IHRvIFBBUlRJQUxfU0VSSUFMSVpFIG1vZGUgd2hlbiB0aGUgc2VuZAorCSAqIGJ1ZmZlciBiZWNv bWVzIGZ1bGwuCisJICovCisJaWYgKCFwYV9zZW5kX2RhdGEod2luZm8sIGRlcGVuZGVuY2llcy5s ZW4sIGRlcGVuZGVuY2llcy5kYXRhKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQllcnJjb2RlKEVS UkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAogCQkJCWVycm1zZygiY291 bGQgbm90IHNlbmQgZGF0YSB0byB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBs eSB3b3JrZXIiKSk7CiB9CiAKKy8qCisgKiBNYWtlIGEgZGVwZW5kZW5jeSBiZXR3ZWVuIHRoaXMg YW5kIHRoZSBsYXN0bHkgY29tbWl0dGVkIHRyYW5zYWN0aW9uLgorICoKKyAqIFNlbmRzIGFuIElO VEVSTkFMX0RFUEVOREVOQ1kgbWVzc2FnZSB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLAor ICogaW5zdHJ1Y3RpbmcgaXQgdG8gd2FpdCBmb3IgdGhlIGxhc3QgY29tbWl0dGVkIHRyYW5zYWN0 aW9uIHRvIGZpbmlzaCBiZWZvcmUKKyAqIGNvbW1pdHRpbmcgaXRzIG93biwgdGhlcmVieSBwcmVz ZXJ2aW5nIGNvbW1pdCBvcmRlci4KKyAqLworc3RhdGljIHZvaWQKK2J1aWxkX2RlcGVuZGVuY3lf d2l0aF9sYXN0X2NvbW1pdHRlZF90eG4oUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvKQor eworCS8qIFNraXAgaWYgdHJhbnNhY3Rpb25zIGhhdmUgbm90IGJlZW4gYXBwbGllZCB5ZXQgKi8K KwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKGxhc3RfcGFyYWxsZWxpemVkX3JlbW90ZV94aWQp KQorCQlyZXR1cm47CisKKwlzZW5kX2ludGVybmFsX2RlcGVuZGVuY2llcyh3aW5mbywgbGlzdF9t YWtlMV94aWQobGFzdF9wYXJhbGxlbGl6ZWRfcmVtb3RlX3hpZCkpOworfQorCiAvKgogICogSGFu ZGxlIENPTU1JVCBtZXNzYWdlLgogICoKQEAgLTE5NzIsNiArMjEwOCw4IEBAIHN0YXRpYyB2b2lk CiBhcHBseV9oYW5kbGVfY29tbWl0KFN0cmluZ0luZm8gcykKIHsKIAlMb2dpY2FsUmVwQ29tbWl0 RGF0YSBjb21taXRfZGF0YTsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87CisJVHJh bnNBcHBseUFjdGlvbiBhcHBseV9hY3Rpb247CiAKIAlsb2dpY2FscmVwX3JlYWRfY29tbWl0KHMs ICZjb21taXRfZGF0YSk7CiAKQEAgLTE5ODIsNyArMjEyMCw5MiBAQCBhcHBseV9oYW5kbGVfY29t bWl0KFN0cmluZ0luZm8gcykKIAkJCQkJCQkJIExTTl9GT1JNQVRfQVJHUyhjb21taXRfZGF0YS5j b21taXRfbHNuKSwKIAkJCQkJCQkJIExTTl9GT1JNQVRfQVJHUyhyZW1vdGVfZmluYWxfbHNuKSkp KTsKIAotCWFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoJmNvbW1pdF9kYXRhKTsKKwlhcHBs eV9hY3Rpb24gPSBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKHJlbW90ZV94aWQsICZ3aW5m byk7CisKKwlzd2l0Y2ggKGFwcGx5X2FjdGlvbikKKwl7CisJCWNhc2UgVFJBTlNfTEVBREVSX0FQ UExZOgorCisJCQkvKgorCQkJICogQXBhcnQgZnJvbSBwYXJhbGxlbGl6ZWQgdHJhbnNhY3Rpb25z LCB3ZSBkbyBub3QgaGF2ZSB0bworCQkJICogcmVnaXN0ZXIgdGhpcyB0cmFuc2FjdGlvbiB0byBw YXJhbGxlbGl6ZWRfdHhucy4gVGhlIGNvbW1pdAorCQkJICogb3JkZXJpbmcgaXMgYWx3YXlzIHBy ZXNlcnZlZC4KKwkJCSAqLworCisJCQkvKiBXYWl0IHVudGlsIHRoZSBsYXN0IHRyYW5zYWN0aW9u IGZpbmlzaGVzICovCisJCQlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQobGFzdF9wYXJhbGxlbGl6 ZWRfcmVtb3RlX3hpZCkpCisJCQl7CisJCQkJcGFfd2FpdF9mb3JfZGVwZW5kZWRfdHJhbnNhY3Rp b24obGFzdF9wYXJhbGxlbGl6ZWRfcmVtb3RlX3hpZCk7CisJCQkJbGFzdF9wYXJhbGxlbGl6ZWRf cmVtb3RlX3hpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCQkJfQorCisJCQlhcHBseV9oYW5k bGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7CisKKwkJCWJyZWFrOworCisJCWNhc2Ug VFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJCQlBc3NlcnQod2luZm8pOworCisJCQkv KgorCQkJICogTWFyayB0aGlzIHRyYW5zYWN0aW9uIGFzIHBhcmFsbGVsaXplZC4gVGhpcyBlbnN1 cmVzIHRoYXQKKwkJCSAqIHVwY29taW5nIHRyYW5zYWN0aW9ucyB3YWl0IHVudGlsIHRoaXMgdHJh bnNhY3Rpb24gaXMgY29tbWl0dGVkLgorCQkJICovCisJCQlwYV9hZGRfcGFyYWxsZWxpemVkX3Ry YW5zYWN0aW9uKHJlbW90ZV94aWQpOworCisJCQkvKgorCQkJICogQnVpbGQgYSBkZXBlbmRlbmN5 IGJldHdlZW4gdGhpcyB0cmFuc2FjdGlvbiBhbmQgdGhlIGxhc3RseQorCQkJICogY29tbWl0dGVk IHRyYW5zYWN0aW9uIHRvIHByZXNlcnZlIHRoZSBjb21taXQgb3JkZXIuCisJCQkgKi8KKwkJCWJ1 aWxkX2RlcGVuZGVuY3lfd2l0aF9sYXN0X2NvbW1pdHRlZF90eG4od2luZm8pOworCisJCQlpZiAo cGFfc2VuZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpKQorCQkJeworCQkJCS8qIENhY2hl IHRoZSByZW1vdGVfeGlkICovCisJCQkJbGFzdF9wYXJhbGxlbGl6ZWRfcmVtb3RlX3hpZCA9IHJl bW90ZV94aWQ7CisKKwkJCQkvKiBGaW5pc2ggcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24uICov CisJCQkJcGFfeGFjdF9maW5pc2god2luZm8sIGNvbW1pdF9kYXRhLmVuZF9sc24pOworCQkJCWJy ZWFrOworCQkJfQorCisJCQkvKgorCQkJICogVE9ETzogU3VwcG9ydCBzd2l0Y2hpbmcgdG8gUEFS VElBTF9TRVJJQUxJWkUgbW9kZSB3aGVuIHRoZSBzZW5kCisJCQkgKiBidWZmZXIgYmVjb21lcyBm dWxsLgorCQkJICovCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfT0JK RUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQllcnJtc2coImNvdWxkIG5vdCBz ZW5kIGRhdGEgdG8gdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2Vy IikpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKworCQkJLyoK KwkJCSAqIElmIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgYXBwbHlpbmcgc3Bvb2xlZCBt ZXNzYWdlcyB0aGVuCisJCQkgKiBjbG9zZSB0aGUgZmlsZSBiZWZvcmUgY29tbWl0dGluZy4KKwkJ CSAqLworCQkJaWYgKHN0cmVhbV9mZCkKKwkJCQlzdHJlYW1fY2xvc2VfZmlsZSgpOworCisJCQlJ TkpFQ1RJT05fUE9JTlQoInBhcmFsbGVsLXdvcmtlci1iZWZvcmUtY29tbWl0IiwgTlVMTCk7CisK KwkJCWFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoJmNvbW1pdF9kYXRhKTsKKworCQkJTXlQ YXJhbGxlbFNoYXJlZC0+bGFzdF9jb21taXRfZW5kID0gWGFjdExhc3RDb21taXRFbmQ7CisKKwkJ CXBhX2NvbW1pdF90cmFuc2FjdGlvbigpOworCisJCQlwYV91bmxvY2tfdHJhbnNhY3Rpb24ocmVt b3RlX3hpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJCQlicmVhazsKKworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgYXBwbHkgYWN0aW9uOiAlZCIsIChpbnQpIGFwcGx5 X2FjdGlvbik7CisJCQlicmVhazsKKwl9CisKKwlyZW1vdGVfeGlkID0gSW52YWxpZFRyYW5zYWN0 aW9uSWQ7CisJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CisKKwllbG9nKERFQlVHMSwg InJlc2V0IHJlbW90ZV94aWQgJXUiLCByZW1vdGVfeGlkKTsKIAogCS8qCiAJICogUHJvY2VzcyBh bnkgdGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbCwgYXMgd2Vs bCBhcwpAQCAtMjEwNSw3ICsyMzI4LDggQEAgYXBwbHlfaGFuZGxlX3ByZXBhcmUoU3RyaW5nSW5m byBzKQogCSAqIFhhY3RMYXN0Q29tbWl0RW5kLCBhbmQgYWRkaW5nIGl0IGZvciB0aGlzIHB1cnBv c2UgZG9lc24ndCBzZWVtcyB3b3J0aAogCSAqIGl0LgogCSAqLwotCXN0b3JlX2ZsdXNoX3Bvc2l0 aW9uKHByZXBhcmVfZGF0YS5lbmRfbHNuLCBJbnZhbGlkWExvZ1JlY1B0cik7CisJc3RvcmVfZmx1 c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVuZF9sc24sIEludmFsaWRYTG9nUmVjUHRyLAorCQkJ CQkJIEludmFsaWRUcmFuc2FjdGlvbklkKTsKIAogCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZh bHNlOwogCkBAIC0yMTY1LDcgKzIzODksOCBAQCBhcHBseV9oYW5kbGVfY29tbWl0X3ByZXBhcmVk KFN0cmluZ0luZm8gcykKIAlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAlwZ3N0YXRfcmVw b3J0X3N0YXQoZmFsc2UpOwogCi0Jc3RvcmVfZmx1c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVu ZF9sc24sIFhhY3RMYXN0Q29tbWl0RW5kKTsKKwlzdG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJl X2RhdGEuZW5kX2xzbiwgWGFjdExhc3RDb21taXRFbmQsCisJCQkJCQkgSW52YWxpZFRyYW5zYWN0 aW9uSWQpOwogCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOwogCiAJLyoKQEAgLTIyMzQs NyArMjQ1OSw4IEBAIGFwcGx5X2hhbmRsZV9yb2xsYmFja19wcmVwYXJlZChTdHJpbmdJbmZvIHMp CiAJICogdHJhbnNhY3Rpb24gYmVjYXVzZSB3ZSBhbHdheXMgZmx1c2ggdGhlIFdBTCByZWNvcmQg Zm9yIGl0LiBTZWUKIAkgKiBhcHBseV9oYW5kbGVfcHJlcGFyZS4KIAkgKi8KLQlzdG9yZV9mbHVz aF9wb3NpdGlvbihyb2xsYmFja19kYXRhLnJvbGxiYWNrX2VuZF9sc24sIEludmFsaWRYTG9nUmVj UHRyKTsKKwlzdG9yZV9mbHVzaF9wb3NpdGlvbihyb2xsYmFja19kYXRhLnJvbGxiYWNrX2VuZF9s c24sIEludmFsaWRYTG9nUmVjUHRyLAorCQkJCQkJIEludmFsaWRUcmFuc2FjdGlvbklkKTsKIAlp bl9yZW1vdGVfdHJhbnNhY3Rpb24gPSBmYWxzZTsKIAogCS8qCkBAIC0yMjk2LDcgKzI1MjIsOCBA QCBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogCQkJICogSXQgaXMg b2theSBub3QgdG8gc2V0IHRoZSBsb2NhbF9lbmQgTFNOIGZvciB0aGUgcHJlcGFyZSBiZWNhdXNl CiAJCQkgKiB3ZSBhbHdheXMgZmx1c2ggdGhlIHByZXBhcmUgcmVjb3JkLiBTZWUgYXBwbHlfaGFu ZGxlX3ByZXBhcmUuCiAJCQkgKi8KLQkJCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKHByZXBhcmVfZGF0 YS5lbmRfbHNuLCBJbnZhbGlkWExvZ1JlY1B0cik7CisJCQlzdG9yZV9mbHVzaF9wb3NpdGlvbihw cmVwYXJlX2RhdGEuZW5kX2xzbiwgSW52YWxpZFhMb2dSZWNQdHIsCisJCQkJCQkJCSBJbnZhbGlk VHJhbnNhY3Rpb25JZCk7CiAKIAkJCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOwogCkBA IC0yNDg4LDggKzI3MTUsMTcgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChTdHJpbmdJbmZv IHMpCiAKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHN0cmVhbV94aWQsIEludmFsaWRY TG9nUmVjUHRyKTsKIAotCS8qIFRyeSB0byBhbGxvY2F0ZSBhIHdvcmtlciBmb3IgdGhlIHN0cmVh bWluZyB0cmFuc2FjdGlvbi4gKi8KLQlpZiAoZmlyc3Rfc2VnbWVudCkKKwkvKgorCSAqIFRyeSB0 byBhbGxvY2F0ZSBhIHdvcmtlciBmb3IgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4KKwkgKgor CSAqIFRPRE86IFN1cHBvcnQgYXNzaWduaW5nIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgdG8gcGFy YWxsZWwgYXBwbHkgd29ya2VycworCSAqIGV2ZW4gd2hlbiBub24tc3RyZWFtaW5nIHRyYW5zYWN0 aW9ucyBhcmUgcnVubmluZyBhbmQgYmV0dGVyIGRlcGVuZGVuY3kKKwkgKiBoYW5kbGluZyBiZXR3 ZWVuIHN0cmVhbWluZyBhbmQgbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlvbnMuCisJICovCisJaWYg KGZpcnN0X3NlZ21lbnQgJiYKKwkJYW1fbGVhZGVyX2FwcGx5X3dvcmtlcigpICYmCisJCSghVHJh bnNhY3Rpb25JZElzVmFsaWQobGFzdF9wYXJhbGxlbGl6ZWRfcmVtb3RlX3hpZCkgfHwKKwkJIHBh X3RyYW5zYWN0aW9uX2NvbW1pdHRlZChsYXN0X3BhcmFsbGVsaXplZF9yZW1vdGVfeGlkKSkpCiAJ CXBhX2FsbG9jYXRlX3dvcmtlcihzdHJlYW1feGlkLCB0cnVlKTsKIAogCWFwcGx5X2FjdGlvbiA9 IGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oc3RyZWFtX3hpZCwgJndpbmZvKTsKQEAgLTMw MDQsOCArMzI0MCw3IEBAIGFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoRmlsZVNldCAqc3RyZWFtX2Zp bGVzZXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogCWludAkJCWZpbGVubzsKIAlwZ29mZl90CQlvZmZz ZXQ7CiAKLQlpZiAoIWFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQotCQltYXliZV9zdGFydF9z a2lwcGluZ19jaGFuZ2VzKGxzbik7CisJbWF5YmVfc3RhcnRfc2tpcHBpbmdfY2hhbmdlcyhsc24p OwogCiAJLyogTWFrZSBzdXJlIHdlIGhhdmUgYW4gb3BlbiB0cmFuc2FjdGlvbiAqLwogCWJlZ2lu X3JlcGxpY2F0aW9uX3N0ZXAoKTsKQEAgLTMyNzUsNyArMzUxMCw4IEBAIGFwcGx5X2hhbmRsZV9j b21taXRfaW50ZXJuYWwoTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKQogCiAJCXBn c3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CiAKLQkJc3RvcmVfZmx1c2hfcG9zaXRpb24oY29tbWl0 X2RhdGEtPmVuZF9sc24sIFhhY3RMYXN0Q29tbWl0RW5kKTsKKwkJc3RvcmVfZmx1c2hfcG9zaXRp b24oY29tbWl0X2RhdGEtPmVuZF9sc24sIFhhY3RMYXN0Q29tbWl0RW5kLAorCQkJCQkJCSBJbnZh bGlkVHJhbnNhY3Rpb25JZCk7CiAJfQogCWVsc2UKIAl7CkBAIC0zMzAwLDcgKzM1MzYsOCBAQCBh cHBseV9oYW5kbGVfcmVsYXRpb24oU3RyaW5nSW5mbyBzKQogewogCUxvZ2ljYWxSZXBSZWxhdGlv biAqcmVsOwogCi0JaWYgKGhhbmRsZV9zdHJlYW1lZF90cmFuc2FjdGlvbihMT0dJQ0FMX1JFUF9N U0dfUkVMQVRJT04sIHMpKQorCWlmIChoYW5kbGVfcGFyYWxsZWxpemVkX3RyYW5zYWN0aW9uKExP R0lDQUxfUkVQX01TR19SRUxBVElPTiwgcykgfHwKKwkJaGFuZGxlX3N0cmVhbWVkX3RyYW5zYWN0 aW9uKExPR0lDQUxfUkVQX01TR19SRUxBVElPTiwgcykpCiAJCXJldHVybjsKIAogCXJlbCA9IGxv Z2ljYWxyZXBfcmVhZF9yZWwocyk7CkBAIC0zMzA4LDYgKzM1NDUsOCBAQCBhcHBseV9oYW5kbGVf cmVsYXRpb24oU3RyaW5nSW5mbyBzKQogCiAJLyogQWxzbyByZXNldCBhbGwgZW50cmllcyBpbiB0 aGUgcGFydGl0aW9uIG1hcCB0aGF0IHJlZmVyIHRvIHJlbW90ZXJlbC4gKi8KIAlsb2dpY2FscmVw X3BhcnRtYXBfcmVzZXRfcmVsbWFwKHJlbCk7CisKKwlwYV9kaXN0cmlidXRlX3NjaGVtYV9jaGFu Z2VzX3RvX3dvcmtlcnMocmVsKTsKIH0KIAogLyoKQEAgLTMzMjMsNyArMzU2Miw4IEBAIGFwcGx5 X2hhbmRsZV90eXBlKFN0cmluZ0luZm8gcykKIHsKIAlMb2dpY2FsUmVwVHlwIHR5cDsKIAotCWlm IChoYW5kbGVfc3RyZWFtZWRfdHJhbnNhY3Rpb24oTE9HSUNBTF9SRVBfTVNHX1RZUEUsIHMpKQor CWlmIChoYW5kbGVfcGFyYWxsZWxpemVkX3RyYW5zYWN0aW9uKExPR0lDQUxfUkVQX01TR19UWVBF LCBzKSB8fAorCQloYW5kbGVfc3RyZWFtZWRfdHJhbnNhY3Rpb24oTE9HSUNBTF9SRVBfTVNHX1RZ UEUsIHMpKQogCQlyZXR1cm47CiAKIAlsb2dpY2FscmVwX3JlYWRfdHlwKHMsICZ0eXApOwpAQCAt MzM4Myw2ICszNjIzLDcgQEAgYXBwbHlfaGFuZGxlX2luc2VydChTdHJpbmdJbmZvIHMpCiAJICog c3RyZWFtZWQgdHJhbnNhY3Rpb25zLgogCSAqLwogCWlmIChpc19za2lwcGluZ19jaGFuZ2VzKCkg fHwKKwkJaGFuZGxlX3BhcmFsbGVsaXplZF90cmFuc2FjdGlvbihMT0dJQ0FMX1JFUF9NU0dfSU5T RVJULCBzKSB8fAogCQloYW5kbGVfc3RyZWFtZWRfdHJhbnNhY3Rpb24oTE9HSUNBTF9SRVBfTVNH X0lOU0VSVCwgcykpCiAJCXJldHVybjsKIApAQCAtMzU0Myw2ICszNzg0LDcgQEAgYXBwbHlfaGFu ZGxlX3VwZGF0ZShTdHJpbmdJbmZvIHMpCiAJICogc3RyZWFtZWQgdHJhbnNhY3Rpb25zLgogCSAq LwogCWlmIChpc19za2lwcGluZ19jaGFuZ2VzKCkgfHwKKwkJaGFuZGxlX3BhcmFsbGVsaXplZF90 cmFuc2FjdGlvbihMT0dJQ0FMX1JFUF9NU0dfVVBEQVRFLCBzKSB8fAogCQloYW5kbGVfc3RyZWFt ZWRfdHJhbnNhY3Rpb24oTE9HSUNBTF9SRVBfTVNHX1VQREFURSwgcykpCiAJCXJldHVybjsKIApA QCAtMzc2Nyw2ICs0MDA5LDcgQEAgYXBwbHlfaGFuZGxlX2RlbGV0ZShTdHJpbmdJbmZvIHMpCiAJ ICogc3RyZWFtZWQgdHJhbnNhY3Rpb25zLgogCSAqLwogCWlmIChpc19za2lwcGluZ19jaGFuZ2Vz KCkgfHwKKwkJaGFuZGxlX3BhcmFsbGVsaXplZF90cmFuc2FjdGlvbihMT0dJQ0FMX1JFUF9NU0df REVMRVRFLCBzKSB8fAogCQloYW5kbGVfc3RyZWFtZWRfdHJhbnNhY3Rpb24oTE9HSUNBTF9SRVBf TVNHX0RFTEVURSwgcykpCiAJCXJldHVybjsKIApAQCAtNDQwMyw2ICs0NjQ2LDcgQEAgYXBwbHlf aGFuZGxlX3RydW5jYXRlKFN0cmluZ0luZm8gcykKIAkgKiBzdHJlYW1lZCB0cmFuc2FjdGlvbnMu CiAJICovCiAJaWYgKGlzX3NraXBwaW5nX2NoYW5nZXMoKSB8fAorCQloYW5kbGVfcGFyYWxsZWxp emVkX3RyYW5zYWN0aW9uKExPR0lDQUxfUkVQX01TR19UUlVOQ0FURSwgcykgfHwKIAkJaGFuZGxl X3N0cmVhbWVkX3RyYW5zYWN0aW9uKExPR0lDQUxfUkVQX01TR19UUlVOQ0FURSwgcykpCiAJCXJl dHVybjsKIApAQCAtNDYzMyw2ICs0ODc3LDEwIEBAIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8g cykKICAqIGNoZWNrIHdoaWNoIGVudHJpZXMgb24gaXQgYXJlIGFscmVhZHkgbG9jYWxseSBmbHVz aGVkLiBUaG9zZSB3ZSBjYW4gcmVwb3J0CiAgKiBhcyBoYXZpbmcgYmVlbiBmbHVzaGVkLgogICoK KyAqIEZvciBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBtYW5hZ2VkIGJ5IGEgcGFyYWxsZWwg YXBwbHkgd29ya2VyLCB3ZSB3aWxsCisgKiBnZXQgdGhlIGxvY2FsIGNvbW1pdCBlbmQgZnJvbSB0 aGUgc2hhcmVkIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpbmZvIG9uY2UgdGhlCisgKiB0cmFuc2Fj dGlvbiBoYXMgYmVlbiBjb21taXR0ZWQgYnkgdGhlIHdvcmtlci4KKyAqCiAgKiBUaGUgaGF2ZV9w ZW5kaW5nX3R4ZXMgaXMgdHJ1ZSBpZiB0aGVyZSBhcmUgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb25z IHRoYXQKICAqIG5lZWQgdG8gYmUgZmx1c2hlZC4KICAqLwpAQCAtNDY0Miw2ICs0ODkwLDcgQEAg Z2V0X2ZsdXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIgKndyaXRlLCBYTG9nUmVjUHRyICpmbHVzaCwK IHsKIAlkbGlzdF9tdXRhYmxlX2l0ZXIgaXRlcjsKIAlYTG9nUmVjUHRyCWxvY2FsX2ZsdXNoID0g R2V0Rmx1c2hSZWNQdHIoTlVMTCk7CisJTGlzdAkgICAqY29tbWl0dGVkX3BhX3hpZCA9IE5JTDsK IAogCSp3cml0ZSA9IEludmFsaWRYTG9nUmVjUHRyOwogCSpmbHVzaCA9IEludmFsaWRYTG9nUmVj UHRyOwpAQCAtNDY1MSw2ICs0OTAwLDQwIEBAIGdldF9mbHVzaF9wb3NpdGlvbihYTG9nUmVjUHRy ICp3cml0ZSwgWExvZ1JlY1B0ciAqZmx1c2gsCiAJCUZsdXNoUG9zaXRpb24gKnBvcyA9CiAJCQlk bGlzdF9jb250YWluZXIoRmx1c2hQb3NpdGlvbiwgbm9kZSwgaXRlci5jdXIpOwogCisJCS8qCisJ CSAqIElmIHRoZSB0cmFuc2FjdGlvbiB3YXMgYXNzaWduZWQgdG8gYSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIsIGF0dGVtcHQKKwkJICogdG8gcmV0cmlldmUgaXRzIGNvbW1pdCBlbmQgTFNOIGZyb20g dGhhdCB3b3JrZXIuCisJCSAqLworCQlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQocG9zLT5wYV9y ZW1vdGVfeGlkKSAmJgorCQkJIVhMb2dSZWNQdHJJc1ZhbGlkKHBvcy0+bG9jYWxfZW5kKSkKKwkJ eworCQkJYm9vbAkJc2tpcHBlZF93cml0ZTsKKworCQkJcG9zLT5sb2NhbF9lbmQgPSBwYV9nZXRf bGFzdF9jb21taXRfZW5kKHBvcy0+cGFfcmVtb3RlX3hpZCwgdHJ1ZSwKKwkJCQkJCQkJCQkJCQkm c2tpcHBlZF93cml0ZSk7CisKKwkJCWVsb2coREVCVUcxLAorCQkJCSAiZ290IGNvbW1pdCBlbmQg ZnJvbSBwYXJhbGxlbCBhcHBseSB3b3JrZXIsICIKKwkJCQkgInR4bjogJXUsIHJlbW90ZV9lbmQg JVgvJVgsIGxvY2FsX2VuZCAlWC8lWCIsCisJCQkJIHBvcy0+cGFfcmVtb3RlX3hpZCwgTFNOX0ZP Uk1BVF9BUkdTKHBvcy0+cmVtb3RlX2VuZCksCisJCQkJIExTTl9GT1JNQVRfQVJHUyhwb3MtPmxv Y2FsX2VuZCkpOworCisJCQkvKgorCQkJICogQnJlYWsgdGhlIGxvb3AgaWYgdGhlIHdvcmtlciBo YXMgbm90IGZpbmlzaGVkIGFwcGx5aW5nIHRoZQorCQkJICogdHJhbnNhY3Rpb24uIFRoZXJlJ3Mg bm8gbmVlZCB0byBjaGVjayBzdWJzZXF1ZW50IHRyYW5zYWN0aW9ucywKKwkJCSAqIGFzIHRoZXkg bXVzdCBjb21taXQgYWZ0ZXIgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gYmVpbmcKKwkJCSAqIGV4 YW1pbmVkIGFuZCB0aHVzIHdvbid0IGhhdmUgdGhlaXIgY29tbWl0IGVuZCBhdmFpbGFibGUgeWV0 LgorCQkJICovCisJCQlpZiAoIXNraXBwZWRfd3JpdGUgJiYgWExvZ1JlY1B0cklzSW52YWxpZChw b3MtPmxvY2FsX2VuZCkpCisJCQkJYnJlYWs7CisKKwkJCWNvbW1pdHRlZF9wYV94aWQgPSBsYXBw ZW5kX3hpZChjb21taXR0ZWRfcGFfeGlkLCBwb3MtPnBhX3JlbW90ZV94aWQpOworCQl9CisKKwkJ LyoKKwkJICogV29ya2VyIGhhcyBmaW5pc2hlZCBhcHBseWluZyBvciB0aGUgdHJhbnNhY3Rpb24g d2FzIGFwcGxpZWQgaW4gdGhlCisJCSAqIGxlYWRlciBhcHBseSB3b3JrZXIuCisJCSAqLwogCQkq d3JpdGUgPSBwb3MtPnJlbW90ZV9lbmQ7CiAKIAkJaWYgKHBvcy0+bG9jYWxfZW5kIDw9IGxvY2Fs X2ZsdXNoKQpAQCAtNDY1OSwyOSArNDk0MiwyMiBAQCBnZXRfZmx1c2hfcG9zaXRpb24oWExvZ1Jl Y1B0ciAqd3JpdGUsIFhMb2dSZWNQdHIgKmZsdXNoLAogCQkJZGxpc3RfZGVsZXRlKGl0ZXIuY3Vy KTsKIAkJCXBmcmVlKHBvcyk7CiAJCX0KLQkJZWxzZQotCQl7Ci0JCQkvKgotCQkJICogRG9uJ3Qg d2FudCB0byB1c2VsZXNzbHkgaXRlcmF0ZSBvdmVyIHRoZSByZXN0IG9mIHRoZSBsaXN0IHdoaWNo Ci0JCQkgKiBjb3VsZCBwb3RlbnRpYWxseSBiZSBsb25nLiBJbnN0ZWFkIGdldCB0aGUgbGFzdCBl bGVtZW50IGFuZAotCQkJICogZ3JhYiB0aGUgd3JpdGUgcG9zaXRpb24gZnJvbSB0aGVyZS4KLQkJ CSAqLwotCQkJcG9zID0gZGxpc3RfdGFpbF9lbGVtZW50KEZsdXNoUG9zaXRpb24sIG5vZGUsCi0J CQkJCQkJCQkgJmxzbl9tYXBwaW5nKTsKLQkJCSp3cml0ZSA9IHBvcy0+cmVtb3RlX2VuZDsKLQkJ CSpoYXZlX3BlbmRpbmdfdHhlcyA9IHRydWU7Ci0JCQlyZXR1cm47Ci0JCX0KIAl9CiAKIAkqaGF2 ZV9wZW5kaW5nX3R4ZXMgPSAhZGxpc3RfaXNfZW1wdHkoJmxzbl9tYXBwaW5nKTsKKworCWRlbGV0 ZV9yZXBsaWNhX2lkZW50aXR5X2VudHJpZXNfZm9yX3R4bnMoY29tbWl0dGVkX3BhX3hpZCk7CiB9 CiAKIC8qCiAgKiBTdG9yZSBjdXJyZW50IHJlbW90ZS9sb2NhbCBsc24gcGFpciBpbiB0aGUgdHJh Y2tpbmcgbGlzdC4KKyAqCisgKiBwYV9yZW1vdGVfeGlkIHNob3VsZCBiZSBhIHZhbGlkIHRyYW5z YWN0aW9uIElEIG9ubHkgd2hlbiB0aGUgdHJhbnNhY3Rpb24gd2FzCisgKiBhc3NpZ25lZCB0byBh IHBhcmFsbGVsIGFwcGx5IHdvcmtlcjsgb3RoZXJ3aXNlLCBwYXNzIEludmFsaWRUcmFuc2FjdGlv bklkLgogICovCiB2b2lkCi1zdG9yZV9mbHVzaF9wb3NpdGlvbihYTG9nUmVjUHRyIHJlbW90ZV9s c24sIFhMb2dSZWNQdHIgbG9jYWxfbHNuKQorc3RvcmVfZmx1c2hfcG9zaXRpb24oWExvZ1JlY1B0 ciByZW1vdGVfbHNuLCBYTG9nUmVjUHRyIGxvY2FsX2xzbiwKKwkJCQkJIFRyYW5zYWN0aW9uSWQg cGFfcmVtb3RlX3hpZCkKIHsKIAlGbHVzaFBvc2l0aW9uICpmbHVzaHBvczsKIApAQCAtNDY5OSw3 ICs0OTc1LDcgQEAgc3RvcmVfZmx1c2hfcG9zaXRpb24oWExvZ1JlY1B0ciByZW1vdGVfbHNuLCBY TG9nUmVjUHRyIGxvY2FsX2xzbikKIAlmbHVzaHBvcyA9IHBhbGxvY19vYmplY3QoRmx1c2hQb3Np dGlvbik7CiAJZmx1c2hwb3MtPmxvY2FsX2VuZCA9IGxvY2FsX2xzbjsKIAlmbHVzaHBvcy0+cmVt b3RlX2VuZCA9IHJlbW90ZV9sc247Ci0JZmx1c2hwb3MtPnBhX3JlbW90ZV94aWQgPSBJbnZhbGlk VHJhbnNhY3Rpb25JZDsKKwlmbHVzaHBvcy0+cGFfcmVtb3RlX3hpZCA9IHBhX3JlbW90ZV94aWQ7 CiAKIAlkbGlzdF9wdXNoX3RhaWwoJmxzbl9tYXBwaW5nLCAmZmx1c2hwb3MtPm5vZGUpOwogCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseU1lc3NhZ2VDb250ZXh0KTsKQEAgLTY4MjQsNiArNzEw MCwyMiBAQCBzdGF0aWMgdm9pZAogbWF5YmVfc3RhcnRfc2tpcHBpbmdfY2hhbmdlcyhYTG9nUmVj UHRyIGZpbmlzaF9sc24pCiB7CiAJQXNzZXJ0KCFpc19za2lwcGluZ19jaGFuZ2VzKCkpOworCisJ LyoKKwkgKiBGb3Igc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBhcHBsaWVkIGluIGEgcGFyYWxsZWwg YXBwbHkgd29ya2VyLCB0aGUgcmVtb3RlCisJICogZW5kIExTTiBpcyB1bmtub3duLCBzbyBza2lw cGluZyBpcyBub3QgcG9zc2libGUuIEZvciBub24tc3RyZWFtaW5nCisJICogdHJhbnNhY3Rpb25z LCB0aGUgbGVhZGVyIGRldGVybWluZXMgd2hldGhlciB0byBza2lwIHRoZSB0cmFuc2FjdGlvbi4g SWYKKwkgKiBza2lwcGluZyBpcyBuZWVkZWQsIHRoZSBsZWFkZXIgc2ltcGx5IGRvZXMgbm90IHNl bmQgdGhlIHRyYW5zYWN0aW9uIHRvIGEKKwkgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJICov CisJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCQlyZXR1cm47CisKKwkvKgorCSAq IFRoZXNlIGFzc2VydGlvbnMgYXBwbHkgb25seSB0byBsZWFkZXIgYXBwbHkgYW5kIHRhYmxlIHN5 bmMgd29ya2Vycy4KKwkgKiBQYXJhbGxlbCB3b3JrZXJzIG1heSBhcHBseSBzcG9vbGVkIEJFR0lO IG9yIFNUUkVBTV9TVEFSVCBtZXNzYWdlcywgd2hpY2gKKwkgKiBjYW4gc2V0IHRoZXNlIGZsYWdz IHRvIHRydWUuCisJICovCiAJQXNzZXJ0KCFpbl9yZW1vdGVfdHJhbnNhY3Rpb24pOwogCUFzc2Vy dCghaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2lj YWxwcm90by5oCmluZGV4IGNiMGE4ZjQ0MGMwLi5kOWYzNzUyOTVkZSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTI1OSw2ICsyNTksOCBAQCBleHRlcm4gdm9pZCBs b2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlk LCBYTG9nUmVjUAogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBv dXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQg KmNvbHVtbnMsCiAJCQkJCQkJCSBQdWJsaXNoR2VuY29sc1R5cGUgaW5jbHVkZV9nZW5jb2xzX3R5 cGUpOworZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9pbnRlcm5hbF9yZWwoU3RyaW5nSW5m byBvdXQsCisJCQkJCQkJCQkJICBMb2dpY2FsUmVwUmVsYXRpb24gKnJlbCk7CiBleHRlcm4gTG9n aWNhbFJlcFJlbGF0aW9uICpsb2dpY2FscmVwX3JlYWRfcmVsKFN0cmluZ0luZm8gaW4pOwogZXh0 ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV90eXAoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9u SWQgeGlkLAogCQkJCQkJCQkgT2lkIHR5cG9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xv Z2ljYWxyZWxhdGlvbi5oCmluZGV4IDA5ODkwY2VmOGQ0Li5jZDg1MjMzNzE2NSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgKKysrIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgKQEAgLTU4LDYgKzU4LDggQEAgZXh0 ZXJuIHZvaWQgbG9naWNhbHJlcF9yZWxfY2xvc2UoTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWws CiAJCQkJCQkJCSBMT0NLTU9ERSBsb2NrbW9kZSk7CiBleHRlcm4gYm9vbCBJc0luZGV4VXNhYmxl Rm9yUmVwbGljYUlkZW50aXR5RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAgKmF0dHJtYXAp OwogZXh0ZXJuIE9pZAlHZXRSZWxhdGlvbklkZW50aXR5T3JQSyhSZWxhdGlvbiByZWwpOworZXh0 ZXJuIGludAlsb2dpY2FscmVwX2dldF9udW1fcmVscyh2b2lkKTsKK2V4dGVybiB2b2lkIGxvZ2lj YWxyZXBfd3JpdGVfYWxsX3JlbHMoU3RyaW5nSW5mbyBvdXQpOwogZXh0ZXJuIExvZ2ljYWxSZXBS ZWxNYXBFbnRyeSAqbG9naWNhbHJlcF9nZXRfcmVsZW50cnkoTG9naWNhbFJlcFJlbElkIHJlbW90 ZWlkKTsKIAogI2VuZGlmCQkJCQkJCS8qIExPR0lDQUxSRUxBVElPTl9IICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCmluZGV4IDNjODhkOWUxMDI3Li4wMmExNjVj Y2MwZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFs LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKQEAgLTM0 NSw3ICszNDUsOCBAQCBleHRlcm4gdm9pZCBTZXR1cEFwcGx5T3JTeW5jV29ya2VyKGludCB3b3Jr ZXJfc2xvdCk7CiAKIGV4dGVybiB2b2lkIERpc2FibGVTdWJzY3JpcHRpb25BbmRFeGl0KHZvaWQp OwogCi1leHRlcm4gdm9pZCBzdG9yZV9mbHVzaF9wb3NpdGlvbihYTG9nUmVjUHRyIHJlbW90ZV9s c24sIFhMb2dSZWNQdHIgbG9jYWxfbHNuKTsKK2V4dGVybiB2b2lkIHN0b3JlX2ZsdXNoX3Bvc2l0 aW9uKFhMb2dSZWNQdHIgcmVtb3RlX2xzbiwgWExvZ1JlY1B0ciBsb2NhbF9sc24sCisJCQkJCQkJ CSBUcmFuc2FjdGlvbklkIHBhX3JlbW90ZV94aWQpOwogCiAvKiBGdW5jdGlvbiBmb3IgYXBwbHkg ZXJyb3IgY2FsbGJhY2sgKi8KIGV4dGVybiB2b2lkIGFwcGx5X2Vycm9yX2NhbGxiYWNrKHZvaWQg KmFyZyk7CkBAIC0zNTQsMTMgKzM1NSwxNSBAQCBleHRlcm4gdm9pZCBzZXRfYXBwbHlfZXJyb3Jf Y29udGV4dF9vcmlnaW4oY2hhciAqb3JpZ2lubmFtZSk7CiAvKiBQYXJhbGxlbCBhcHBseSB3b3Jr ZXIgc2V0dXAgYW5kIGludGVyYWN0aW9ucyAqLwogZXh0ZXJuIHZvaWQgcGFfYWxsb2NhdGVfd29y a2VyKFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIHN0cmVhbV90eG4pOwogZXh0ZXJuIFBhcmFsbGVs QXBwbHlXb3JrZXJJbmZvICpwYV9maW5kX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCk7Ci1leHRl cm4gWExvZ1JlY1B0ciBwYV9nZXRfbGFzdF9jb21taXRfZW5kKFRyYW5zYWN0aW9uSWQgeGlkLCBi b29sICpza2lwcGVkX3dyaXRlKTsKK2V4dGVybiBYTG9nUmVjUHRyIHBhX2dldF9sYXN0X2NvbW1p dF9lbmQoVHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgZGVsZXRlX2VudHJ5LAorCQkJCQkJCQkJCSBi b29sICpza2lwcGVkX3dyaXRlKTsKIGV4dGVybiB2b2lkIHBhX2RldGFjaF9hbGxfZXJyb3JfbXEo dm9pZCk7CiAKIGV4dGVybiB2b2lkIGFwcGx5X2hhbmRsZV9pbnRlcm5hbF9tZXNzYWdlKFN0cmlu Z0luZm8gcyk7CiAKIGV4dGVybiBib29sIHBhX3NlbmRfZGF0YShQYXJhbGxlbEFwcGx5V29ya2Vy SW5mbyAqd2luZm8sIFNpemUgbmJ5dGVzLAogCQkJCQkJIGNvbnN0IHZvaWQgKmRhdGEpOworZXh0 ZXJuIHZvaWQgcGFfZGlzdHJpYnV0ZV9zY2hlbWFfY2hhbmdlc190b193b3JrZXJzKExvZ2ljYWxS ZXBSZWxhdGlvbiAqcmVsKTsKIGV4dGVybiB2b2lkIHBhX3N3aXRjaF90b19wYXJ0aWFsX3Nlcmlh bGl6ZShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sCiAJCQkJCQkJCQkJICAgYm9vbCBz dHJlYW1fbG9ja2VkKTsKIApAQCAtMzg2LDggKzM4OSw5IEBAIGV4dGVybiB2b2lkIHBhX2RlY3Jf YW5kX3dhaXRfc3RyZWFtX2Jsb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGFfeGFjdF9maW5pc2go UGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLAogCQkJCQkJICAgWExvZ1JlY1B0ciByZW1v dGVfbHNuKTsKIGV4dGVybiBib29sIHBhX3RyYW5zYWN0aW9uX2NvbW1pdHRlZChUcmFuc2FjdGlv bklkIHhpZCk7Ci0KK2V4dGVybiB2b2lkIHBhX2NvbW1pdF90cmFuc2FjdGlvbih2b2lkKTsKIGV4 dGVybiB2b2lkIHBhX3dhaXRfZm9yX2RlcGVuZGVkX3RyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQg eGlkKTsKK2V4dGVybiB2b2lkIHBhX2FkZF9wYXJhbGxlbGl6ZWRfdHJhbnNhY3Rpb24oVHJhbnNh Y3Rpb25JZCB4aWQpOwogCiAjZGVmaW5lIGlzUGFyYWxsZWxBcHBseVdvcmtlcih3b3JrZXIpICgo d29ya2VyKS0+aW5fdXNlICYmIFwKIAkJCQkJCQkJCSAgICh3b3JrZXIpLT50eXBlID09IFdPUktF UlRZUEVfUEFSQUxMRUxfQVBQTFkpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24v bWVzb24uYnVpbGQgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQKaW5kZXggZmRj MDRkOTFmNDEuLjQ4YWU2OThlNzg2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24v bWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkCkBAIC00 OCw3ICs0OCw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAzNl9zZXF1ZW5jZXMucGwnLAogICAg ICAgJ3QvMDM3X2V4Y2VwdC5wbCcsCiAgICAgICAndC8wMzhfd2Fsc25kX3NodXRkb3duX3RpbWVv dXQucGwnLAotICAgICAgJ3QvMDM5X3Jvd19maWx0ZXJfdG9hc3RfcmkucGwnLAorICAgICAgJ3Qv MDUwX3BhcmFsbGVsX2FwcGx5LnBsJywKICAgICAgICd0LzEwMF9idWdzLnBsJywKICAgICBdLAog ICB9LApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDAxX3JlcF9jaGFuZ2Vz LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDAxX3JlcF9jaGFuZ2VzLnBsCmluZGV4IDdk NDE3MTVlZDgxLi5jODYzYjQzMGJlYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9u L3QvMDAxX3JlcF9jaGFuZ2VzLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAwMV9y ZXBfY2hhbmdlcy5wbApAQCAtMTYsNiArMTYsOCBAQCAkbm9kZV9wdWJsaXNoZXItPnN0YXJ0Owog IyBDcmVhdGUgc3Vic2NyaWJlciBub2RlCiBteSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7CiAkbm9kZV9zdWJzY3JpYmVyLT5p bml0OworJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJ Im1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMgPSAxMCIpOwogJG5vZGVfc3Vic2NyaWJl ci0+c3RhcnQ7CiAKICMgQ3JlYXRlIHNvbWUgcHJlZXhpc3RpbmcgY29udGVudCBvbiBwdWJsaXNo ZXIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxMF90cnVuY2F0ZS5wbCBi L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxMF90cnVuY2F0ZS5wbAppbmRleCA5NDU1MDVkMDIz OS4uZTE1YTZiYjJhMDMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxMF90 cnVuY2F0ZS5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTBfdHJ1bmNhdGUucGwK QEAgLTE3LDcgKzE3LDcgQEAgJG5vZGVfcHVibGlzaGVyLT5zdGFydDsKIG15ICRub2RlX3N1YnNj cmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXInKTsKICRu b2RlX3N1YnNjcmliZXItPmluaXQ7CiAkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9z dGdyZXNxbC5jb25mJywKLQlxcShtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzID0gNikp OworCXFxKG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMgPSA3KSk7CiAkbm9kZV9zdWJz Y3JpYmVyLT5zdGFydDsKIAogbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5vZGVfcHVibGlzaGVy LT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9z dHJlYW0ucGwKaW5kZXggYWM5NmJjM2YwMDkuLjcwNWJjODNmNWVhIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9zdWJzY3JpcHRpb24vdC8wMTVfc3RyZWFtLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlw dGlvbi90LzAxNV9zdHJlYW0ucGwKQEAgLTIzMiw2ICsyMzIsMTIgQEAgJG5vZGVfc3Vic2NyaWJl ci0+d2FpdF9mb3JfbG9nKAogCiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdGVzdF90YWJfMiB2YWx1ZXMoMSkiKTsKIAorIyBGSVhNRTogQ3VycmVu dGx5LCBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBhcmUgYXBwbGllZCBpbiBwYXJhbGxlbCBi eQorIyBkZWZhdWx0LiBTbywgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGlzIGhhbmRsZWQgYnkgYSBw YXJhbGxlbCBhcHBseSB3b3JrZXIuIFRvCisjIHRyaWdnZXIgdGhlIGRlYWRsb2NrLCBpbml0aWF0 ZSBhbiBtb3JlIHRyYW5zYWN0aW9uIHRvIGJlIGFwcGxpZWQgYnkgdGhlCisjIGxlYWRlci4KKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3Rh Yl8yIHZhbHVlcygxKSIpOworCiAkaC0+cXVlcnlfc2FmZSgnQ09NTUlUJyk7CiAkaC0+cXVpdDsK IApAQCAtMjQ3LDcgKzI1Myw3IEBAICRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgk YXBwbmFtZSk7CiAKICRyZXN1bHQgPQogICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiXzIiKTsKLWlzKCRyZXN1bHQs IHFxKDUwMDEpLCAnZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYWZ0ZXIgZHJvcHBpbmcg aW5kZXgnKTsKK2lzKCRyZXN1bHQsIHFxKDUwMDIpLCAnZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNj cmliZXIgYWZ0ZXIgZHJvcHBpbmcgaW5kZXgnKTsKIAogIyBDbGVhbiB1cCB0ZXN0IGRhdGEgZnJv bSB0aGUgZW52aXJvbm1lbnQuCiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiVFJVTkNBVEUgVEFCTEUgdGVzdF90YWJfMiIpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL3QvMDI2X3N0YXRzLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDI2X3N0 YXRzLnBsCmluZGV4IDVkNDU3MDYwYTAyLi45MTEwMDViZGUyMCAxMDA2NDQKLS0tIGEvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDI2X3N0YXRzLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzAyNl9zdGF0cy5wbApAQCAtMTYsNiArMTYsNyBAQCAkbm9kZV9wdWJsaXNoZXItPnN0YXJ0 OwogIyBDcmVhdGUgc3Vic2NyaWJlciBub2RlLgogbXkgJG5vZGVfc3Vic2NyaWJlciA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJlcicpOwogJG5vZGVfc3Vic2NyaWJl ci0+aW5pdDsKKyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYn LCAibWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycyA9IDEwIik7CiAkbm9kZV9zdWJzY3Jp YmVyLT5zdGFydDsKIAogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjdf bm9zdXBlcnVzZXIucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjdfbm9zdXBlcnVzZXIu cGwKaW5kZXggMzIyZjViNGNjNmEuLmZkZmM0NGFjNzI5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9z dWJzY3JpcHRpb24vdC8wMjdfbm9zdXBlcnVzZXIucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDI3X25vc3VwZXJ1c2VyLnBsCkBAIC04Niw2ICs4Niw3IEBAICRub2RlX3B1Ymxpc2hl ciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9kZV9z dWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7 CiAkbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwog JG5vZGVfc3Vic2NyaWJlci0+aW5pdDsKKyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdw b3N0Z3Jlc3FsLmNvbmYnLCAibWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycyA9IDEwIik7 CiAkbm9kZV9wdWJsaXNoZXItPnN0YXJ0OwogJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CiAkcHVi bGlzaGVyX2Nvbm5zdHIgPSAkbm9kZV9wdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0 Z3Jlcyc7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wNTBfcGFyYWxsZWxf YXBwbHkucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wNTBfcGFyYWxsZWxfYXBwbHkucGwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkxZjk1ZDRlMTFkCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDUwX3BhcmFsbGVsX2FwcGx5 LnBsCkBAIC0wLDAgKzEsMjcxIEBACisKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGEg bm9uLXN0cmVhbWVkIHRyYW5zYWN0aW9uIGNhbiBsYXVuY2ggYSBwYXJhbGxlbCBhcHBseQorIyB3 b3JrZXIsIGFuZCB0aGF0IGRlcGVuZGVuY3kgdHJhY2tpbmcgYW5kIGNvbW1pdCBvcmRlciBwcmVz ZXJ2YXRpb24gd29yaworIyBjb3JyZWN0bHkgZHVyaW5nIHBhcmFsbGVsIGFwcGx5LgorCit1c2Ug c3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworaWYgKCRFTlZ7 ZW5hYmxlX2luamVjdGlvbl9wb2ludHN9IG5lICd5ZXMnKQoreworCXBsYW4gc2tpcF9hbGwgPT4g J0luamVjdGlvbiBwb2ludHMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJ1aWxkJzsKK30KKworIyBJ bml0aWFsaXplIHB1Ymxpc2hlciBub2RlCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVyLT5pbml0 KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7 CisKKyMgQ3JlYXRlIHRhYmxlcyBhbmQgaW5zZXJ0IGluaXRpYWwgZGF0YQorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoCisgICAgJ3Bvc3RncmVzJywgcXEoCisgICAgQ1JFQVRFIFRBQkxFIHJl Z3Jlc3NfdGFiIChpZCBpbnQgUFJJTUFSWSBLRVksIHZhbHVlIHRleHQpOworCisgICAgQ1JFQVRF IFRBQkxFIHRhYl90b2FzdCAoYSB0ZXh0IE5PVCBOVUxMLCBiIHRleHQgTk9UIE5VTEwpOworICAg IEFMVEVSIFRBQkxFIHRhYl90b2FzdCBBTFRFUiBDT0xVTU4gYSBTRVQgU1RPUkFHRSBFWFRFUk5B TDsKKyAgICBDUkVBVEUgVU5JUVVFIElOREVYIHRhYl90b2FzdF9yaV9pbmRleCBvbiB0YWJfdG9h c3QgKGEsIGIpOworICAgIEFMVEVSIFRBQkxFIHRhYl90b2FzdCBSRVBMSUNBIElERU5USVRZIFVT SU5HIElOREVYIHRhYl90b2FzdF9yaV9pbmRleDsKKyAgICBJTlNFUlQgSU5UTyB0YWJfdG9hc3Qo YSwgYikgVkFMVUVTKHJlcGVhdCgnMTIzNDU2Nzg5MCcsIDIwMCksICcxMjM0NTY3ODkwJyk7Cisp KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgIklOU0VSVCBJ TlRPIHJlZ3Jlc3NfdGFiIFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKSwgJ3Rlc3QnKTsi KTsKKworIyBDcmVhdGUgYSBwdWJsaWNhdGlvbgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKyAgICAiQ1JFQVRFIFBVQkxJQ0FUSU9OIHJlZ3Jlc3NfcHViIEZPUiBBTEwg VEFCTEVTOyIpOworCisjIEluaXRpYWxpemUgc3Vic2NyaWJlciBub2RlCitteSAkbm9kZV9zdWJz Y3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7Cisk bm9kZV9zdWJzY3JpYmVyLT5pbml0OworJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bv c3RncmVzcWwuY29uZicsICJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7Ciskbm9kZV9zdWJz Y3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkibWF4X2xvZ2ljYWxfcmVw bGljYXRpb25fd29ya2VycyA9IDEwIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKKworIyBD aGVjayBpZiB0aGUgZXh0ZW5zaW9uIGluamVjdGlvbl9wb2ludHMgaXMgYXZhaWxhYmxlLCBhcyBp dCBtYXkgYmUKKyMgcG9zc2libGUgdGhhdCB0aGlzIHNjcmlwdCBpcyBydW4gd2l0aCBpbnN0YWxs Y2hlY2ssIHdoZXJlIHRoZSBtb2R1bGUKKyMgd291bGQgbm90IGJlIGluc3RhbGxlZCBieSBkZWZh dWx0LgoraWYgKCEkbm9kZV9zdWJzY3JpYmVyLT5jaGVja19leHRlbnNpb24oJ2luamVjdGlvbl9w b2ludHMnKSkKK3sKKwlwbGFuIHNraXBfYWxsID0+ICdFeHRlbnNpb24gaW5qZWN0aW9uX3BvaW50 cyBub3QgaW5zdGFsbGVkJzsKK30KKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICdDUkVBVEUgRVhURU5TSU9OIGluamVjdGlvbl9wb2ludHM7Jyk7CisKKyMgQ3JlYXRl IGEgc3Vic2NyaXB0aW9uCitteSAkcHVibGlzaGVyX2Nvbm5zdHIgPSAkbm9kZV9wdWJsaXNoZXIt PmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgKKyAgICAncG9zdGdyZXMnLCBxcSgKKyAgICBDUkVBVEUgVEFCTEUgcmVncmVzc190YWIg KGlkIGludCBQUklNQVJZIEtFWSwgdmFsdWUgdGV4dCk7CisKKyAgICBDUkVBVEUgVEFCTEUgdGFi X3RvYXN0IChhIHRleHQgTk9UIE5VTEwsIGIgdGV4dCBOT1QgTlVMTCk7CisgICAgQUxURVIgVEFC TEUgdGFiX3RvYXN0IEFMVEVSIENPTFVNTiBhIFNFVCBTVE9SQUdFIEVYVEVSTkFMOworICAgIENS RUFURSBVTklRVUUgSU5ERVggdGFiX3RvYXN0X3JpX2luZGV4IG9uIHRhYl90b2FzdCAoYSwgYik7 CisgICAgQUxURVIgVEFCTEUgdGFiX3RvYXN0IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVgg dGFiX3RvYXN0X3JpX2luZGV4OworKSk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKyAgICAiQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3N1YiBDT05ORUNUSU9O ICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHJlZ3Jlc3NfcHViOyIpOworCisjIFdh aXQgZm9yIGluaXRpYWwgdGFibGUgc3luYyB0byBmaW5pc2gKKyRub2RlX3N1YnNjcmliZXItPndh aXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3B1Ymxpc2hlciwgJ3JlZ3Jlc3Nfc3ViJyk7 CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IFRlc3QgdGhhdCBhIG5vbi1zdHJlYW1lZCB0cmFuc2FjdGlvbiBjYW4gYmUgYXBwbGllZCBpbiBh IHBhcmFsbGVsIGFwcGx5IHdvcmtlcgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKKworIyBJbnNlcnQgdHVwbGVzIG9uIHB1Ymxpc2hlcgorIworIyBY WFggVGhpcyBtYXkgbm90IGVub3VnaCB0byBsYXVuY2ggYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIs IGJlY2F1c2UKKyMgdGFibGVfc3RhdGVzX25vdF9yZWFkeSBpcyBub3QgZGlzY2FyZGVkIHlldC4K KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgIklOU0VSVCBJTlRP IHJlZ3Jlc3NfdGFiIFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDExLCAyMCksICd0ZXN0Jyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3JlZ3Jlc3Nfc3ViJyk7CisKKyMg SW5zZXJ0IHR1cGxlcyBhZ2FpbgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKyAgICAiSU5TRVJUIElOVE8gcmVncmVzc190YWIgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMo MjEsIDMwKSwgJ3Rlc3QnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn cmVncmVzc19zdWInKTsKKworIyBWZXJpZnkgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpcyBs YXVuY2hlZAorbXkgJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorICAgICJTRUxFQ1QgY291bnQoMSkgRlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIGJh Y2tlbmRfdHlwZSA9ICdsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIHdvcmtlciciKTsKK2lz KCRyZXN1bHQsICcxJywgInBhcmFsbGVsIGFwcGx5IHdvcmtlciBpcyBsYXVuY2hlZCBieSBhIG5v bi1zdHJlYW1lZCB0cmFuc2FjdGlvbiIpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHRoYXQgdGhlIGJhc2ljIHJlcGxpY2EgaWRl bnRpdHkgZGVwZW5kZW5jeSB0cmFja2luZyBhbmQgY29tbWl0IG9yZGVyCisjIHByZXNlcnZhdGlv biB3b3JrIGNvcnJlY3RseSBkdXJpbmcgcGFyYWxsZWwgYXBwbHkuCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEF0dGFjaCBhbiBpbmplY3Rp b25fcG9pbnQuIFBhcmFsbGVsIHdvcmtlcnMgd291bGQgd2FpdCBiZWZvcmUgdGhlIGNvbW1pdAor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBpbmplY3Rp b25fcG9pbnRzX2F0dGFjaCgncGFyYWxsZWwtd29ya2VyLWJlZm9yZS1jb21taXQnLCd3YWl0Jyk7 IgorKTsKKworIyBJbnNlcnQgdHVwbGVzIG9uIHB1Ymxpc2hlcgorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKyAgICAiSU5TRVJUIElOVE8gcmVncmVzc190YWIgVkFMVUVT IChnZW5lcmF0ZV9zZXJpZXMoMzEsIDQwKSwgJ3Rlc3QnKTsiKTsKKworIyBXYWl0IHVudGlsIHRo ZSBwYXJhbGxlbCB3b3JrZXIgZW50ZXJzIHRoZSBpbmplY3Rpb24gcG9pbnQuCiskbm9kZV9zdWJz Y3JpYmVyLT53YWl0X2Zvcl9ldmVudCgnbG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCB3b3Jr ZXInLAorCSdwYXJhbGxlbC13b3JrZXItYmVmb3JlLWNvbW1pdCcpOworCitteSAkb2Zmc2V0ID0g LXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworIyBJbnNlcnQgdHVwbGVzIG9uIHB1Ymxp c2hlciBhZ2Fpbi4gVGhpcyB0cmFuc2FjdGlvbiBpcyBpbmRlcGVuZGVudCBmcm9tIHRoZQorIyBw cmV2aW91cyBvbmUsIGJ1dCB0aGUgcGFyYWxsZWwgd29ya2VyIHdvdWxkIHdhaXQgdGlsbCBpdCBm aW5pc2hlcworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKyAgICAiSU5T RVJUIElOVE8gcmVncmVzc190YWIgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoNDEsIDUwKSwgJ3Rl c3QnKTsiKTsKKworIyBWZXJpZnkgdGhlIHBhcmFsbGVsIHdvcmtlciB3YWl0cyBmb3IgdGhlIHRy YW5zYWN0aW9uCitteSAkc3RyID0gJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyL3dh aXQgZm9yIGRlcGVuZGVkIHhpZCAoWzEtOV1bMC05XSspLywgJG9mZnNldCk7CitteSAkeGlkID0g JHN0ciA9fiAvd2FpdCBmb3IgZGVwZW5kZWQgeGlkIChbMS05XVswLTldKykvOworCitvaygxLCAi Y29tbWl0IG9yZGVyIGRlcGVuZGVuY3kgZGV0ZWN0ZWQgZm9yIHBhcmFsbGVsIGFwcGx5Iik7CisK KyRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisjIFVwZGF0ZSB0dXBs ZXMgd2hpY2ggaGF2ZSBub3QgYmVlbiBhcHBsaWVkIHlldCBvbiBzdWJzY3JpYmVyIGJlY2F1c2Ug dGhlCisjIHBhcmFsbGVsIHdvcmtlciBzdG9wcyBhdCB0aGUgaW5qZWN0aW9uIHBvaW50LiBOZXds eSBhc3NpZ25lZCB3b3JrZXIgYWxzbworIyB3YWl0cyBmb3IgdGhlIHNhbWUgdHJhbnNhY3Rpb25z IGFzIGFib3ZlLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKyAgICAi VVBEQVRFIHJlZ3Jlc3NfdGFiIFNFVCB2YWx1ZSA9ICd1cGRhdGVkJyBXSEVSRSBpZCBCRVRXRUVO IDMxIEFORCAzNTsiKTsKKworIyBWZXJpZnkgdGhlIGRlcGVuZGVuY3kgaXMgZGV0ZWN0ZWQgZm9y IHRoZSB1cGRhdGUKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci9mb3VuZCBjb25m bGljdGluZyByZXBsaWNhIGlkZW50aXR5IGNoYW5nZSBvbiB0YWJsZSBbMS05XVswLTldKyBmcm9t ICR4aWQvLCAkb2Zmc2V0KTsKKworIyBWZXJpZnkgdGhlIHBhcmFsbGVsIHdvcmtlciB3YWl0cyBm b3IgdGhlIHNhbWUgdHJhbnNhY3Rpb24KKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhx ci93YWl0IGZvciBkZXBlbmRlZCB4aWQgJHhpZC8sICRvZmZzZXQpOworCitvaygxLCAicmVwbGlj YSBpZGVudGl0eSBkZXBlbmRlbmN5IGRldGVjdGVkIGZvciBwYXJhbGxlbCBhcHBseSIpOworCisj IFdha2V1cCB0aGUgcGFyYWxsZWwgd29ya2VyLiBXZSBkZXRhY2ggZmlyc3Qgbm8gdG8gc3RvcCBv dGhlciBwYXJhbGxlbCB3b3JrZXJzCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcXFbCisgICAgU0VMRUNUIGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCdwYXJhbGxlbC13 b3JrZXItYmVmb3JlLWNvbW1pdCcpOworICAgIFNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3dha2V1 cCgncGFyYWxsZWwtd29ya2VyLWJlZm9yZS1jb21taXQnKTsKK10pOworCisjIFZlcmlmeSB0aGUg cGFyYWxsZWwgd29ya2VyIHdha2VzIHVwCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2co cXIvZmluaXNoIHdhaXRpbmcgZm9yIGRlcGVuZGVkIHhpZCAkeGlkLywgJG9mZnNldCk7CisKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgncmVncmVzc19zdWInKTsKKworJHJlc3Vs dCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KDEpIEZST00gcmVncmVzc190YWIiKTsKK2lzICgkcmVzdWx0LCA1MCwgJ2luc2VydHMgYXJl IHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlcicpOworCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgIlNFTEVDVCBjb3VudCgxKSBGUk9NIHJl Z3Jlc3NfdGFiIFdIRVJFIHZhbHVlID0gJ3VwZGF0ZWQnIik7CitpcyAoJHJlc3VsdCwgNSwgJ3Vw ZGF0ZXMgYXJlIGFsc28gcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyJyk7CisKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdGhhdCB0aGUg ZGVwZW5kZW5jeSB0cmFja2luZyB3b3JrcyBjb3JyZWN0bHkgZm9yIHVuY2hhbmdlZCB0b2FzdGVk IFJJCisjIGNvbHVtbnMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworCisjIEF0dGFjaCBhbiBpbmplY3Rpb25fcG9pbnQuIFBhcmFsbGVsIHdvcmtl cnMgd291bGQgd2FpdCBiZWZvcmUgdGhlIGNvbW1pdAorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCgncGFyYWxs ZWwtd29ya2VyLWJlZm9yZS1jb21taXQnLCd3YWl0Jyk7IgorKTsKKworIyBVcGRhdGUgb25lIHJl cGxpY2EgaWRlbnRpdHkgY29sdW1uIGJ1dCBrZWVwIHRvYXN0ZWQgY29sdW1uIHVuY2hhbmdlZAor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKyAgICAiVVBEQVRFIHRhYl90 b2FzdCBTRVQgYiA9ICcxJzsiKTsKKworIyBXYWl0IHVudGlsIHRoZSBwYXJhbGxlbCB3b3JrZXIg ZW50ZXJzIHRoZSBpbmplY3Rpb24gcG9pbnQuCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9l dmVudCgnbG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCB3b3JrZXInLAorCSdwYXJhbGxlbC13 b3JrZXItYmVmb3JlLWNvbW1pdCcpOworCiskb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+ bG9nZmlsZTsKKworIyBEZWxldGUgdGhlIHVwZGF0ZWQgcm93LgorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKyAgICAiREVMRVRFIEZST00gdGFiX3RvYXN0IFdIRVJFIGIg PSAnMSc7Iik7CisKKyMgVmVyaWZ5IHRoZSBkZXBlbmRlbmN5IGlzIGRldGVjdGVkIGZvciB0aGUg ZGVsZXRlCiskc3RyID0gJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyL2ZvdW5kIGNv bmZsaWN0aW5nIHJlcGxpY2EgaWRlbnRpdHkgY2hhbmdlIG9uIHRhYmxlIFsxLTldWzAtOV0rIGZy b20gKFsxLTldWzAtOV0rKS8sICRvZmZzZXQpOworJHhpZCA9ICRzdHIgPX4gL2ZvdW5kIGNvbmZs aWN0aW5nIHJlcGxpY2EgaWRlbnRpdHkgY2hhbmdlIG9uIHRhYmxlIFsxLTldWzAtOV0rIGZyb20g KFsxLTldWzAtOV0rKS87CisKKyMgVmVyaWZ5IHRoZSBwYXJhbGxlbCB3b3JrZXIgd2FpdHMgZm9y IHRoZSBzYW1lIHRyYW5zYWN0aW9uCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIv d2FpdCBmb3IgZGVwZW5kZWQgeGlkICR4aWQvLCAkb2Zmc2V0KTsKKworb2soMSwgInJlcGxpY2Eg aWRlbnRpdHkgZGVwZW5kZW5jeSBmcm9tIHVuY2hhbmdlZCB0b2FzdGVkIGNvbHVtbiBkZXRlY3Rl ZCBmb3IgcGFyYWxsZWwgYXBwbHkiKTsKKworIyBXYWtldXAgdGhlIHBhcmFsbGVsIHdvcmtlci4g V2UgZGV0YWNoIGZpcnN0IG5vIHRvIHN0b3Agb3RoZXIgcGFyYWxsZWwgd29ya2VycworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworICAgIFNFTEVDVCBpbmplY3Rp b25fcG9pbnRzX2RldGFjaCgncGFyYWxsZWwtd29ya2VyLWJlZm9yZS1jb21taXQnKTsKKyAgICBT RUxFQ1QgaW5qZWN0aW9uX3BvaW50c193YWtldXAoJ3BhcmFsbGVsLXdvcmtlci1iZWZvcmUtY29t bWl0Jyk7CitdKTsKKworIyBWZXJpZnkgdGhlIHBhcmFsbGVsIHdvcmtlciB3YWtlcyB1cAorJG5v ZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyL2ZpbmlzaCB3YWl0aW5nIGZvciBkZXBlbmRl ZCB4aWQgJHhpZC8sICRvZmZzZXQpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ3JlZ3Jlc3Nfc3ViJyk7CisKKyRyZXN1bHQgPQorICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgxKSBGUk9NIHRhYl90b2FzdCIpOworaXMg KCRyZXN1bHQsIDAsICdjaGFuZ2VzIGFyZSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXInKTsKKwor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVz dCB0aGF0IHRhYmxlIGxldmVsIGRlcGVuZGVuY3kgdHJhY2tpbmcgYnkgVFJVTkNBVEUgd29yayBj b3JyZWN0bHkgZHVyaW5nCisjIHBhcmFsbGVsIGFwcGx5LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUcnVuY2F0ZSB0aGUgZGF0YSBmb3Ig dXBjb21pbmcgdGVzdHMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJU UlVOQ0FURSBUQUJMRSByZWdyZXNzX3RhYjsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgncmVncmVzc19zdWInKTsKKworIyBBdHRhY2ggYW4gaW5qZWN0aW9uX3BvaW50LiBQ YXJhbGxlbCB3b3JrZXJzIHdvdWxkIHdhaXQgYmVmb3JlIHRoZSBjb21taXQKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19h dHRhY2goJ3BhcmFsbGVsLXdvcmtlci1iZWZvcmUtY29tbWl0Jywnd2FpdCcpOyIKKyk7CisKKyMg SW5zZXJ0IHR1cGxlcyBvbiBwdWJsaXNoZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisgICAgIlRSVU5DQVRFIHJlZ3Jlc3NfdGFiOyIpOworCisjIFdhaXQgdW50aWwg dGhlIHBhcmFsbGVsIHdvcmtlciBlbnRlcnMgdGhlIGluamVjdGlvbiBwb2ludC4KKyRub2RlX3N1 YnNjcmliZXItPndhaXRfZm9yX2V2ZW50KCdsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIHdv cmtlcicsCisJJ3BhcmFsbGVsLXdvcmtlci1iZWZvcmUtY29tbWl0Jyk7CisKKyRvZmZzZXQgPSAt cyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisjIEluc2VydCBhIHR1cGxlIHRoYXQgY29u ZmxpY3RzIHdpdGggdGhlIFRSVU5DQVRFIG9wZXJhdGlvbi4KKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgIklOU0VSVCBJTlRPIHJlZ3Jlc3NfdGFiIFZBTFVFUyAo MSwgJ3Rlc3QnKTsiKTsKKworIyBWZXJpZnkgdGhlIGRlcGVuZGVuY3kgaXMgZGV0ZWN0ZWQgZm9y IHRoZSBpbnNlcnQKKyRzdHIgPSAkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIvZm91 bmQgdGFibGUtd2lkZSBjaGFuZ2UgYWZmZWN0aW5nIFsxLTldWzAtOV0rIGZyb20gKFsxLTldWzAt OV0rKS8sICRvZmZzZXQpOworJHhpZCA9ICRzdHIgPX4gL2ZvdW5kIHRhYmxlLXdpZGUgY2hhbmdl IGFmZmVjdGluZyBbMS05XVswLTldKyBmcm9tIChbMS05XVswLTldKykvOworCisjIFZlcmlmeSB0 aGUgcGFyYWxsZWwgd29ya2VyIHdhaXRzIGZvciB0aGUgc2FtZSB0cmFuc2FjdGlvbgorJG5vZGVf c3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyL3dhaXQgZm9yIGRlcGVuZGVkIHhpZCAkeGlkLywg JG9mZnNldCk7CisKK29rKDEsICJ0YWJsZS13aWRlIGRlcGVuZGVuY3kgZnJvbSBUUlVOQ0FURSBk ZXRlY3RlZCBmb3IgcGFyYWxsZWwgYXBwbHkiKTsKKworIyBXYWtldXAgdGhlIHBhcmFsbGVsIHdv cmtlci4gV2UgZGV0YWNoIGZpcnN0IG5vIHRvIHN0b3Agb3RoZXIgcGFyYWxsZWwgd29ya2Vycwor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworICAgIFNFTEVDVCBp bmplY3Rpb25fcG9pbnRzX2RldGFjaCgncGFyYWxsZWwtd29ya2VyLWJlZm9yZS1jb21taXQnKTsK KyAgICBTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c193YWtldXAoJ3BhcmFsbGVsLXdvcmtlci1iZWZv cmUtY29tbWl0Jyk7CitdKTsKKworIyBWZXJpZnkgdGhlIHBhcmFsbGVsIHdvcmtlciB3YWtlcyB1 cAorJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyL2ZpbmlzaCB3YWl0aW5nIGZvciBk ZXBlbmRlZCB4aWQgJHhpZC8sICRvZmZzZXQpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ3JlZ3Jlc3Nfc3ViJyk7CisKKyRyZXN1bHQgPQorICAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgxKSBGUk9NIHJlZ3Jlc3NfdGFi Iik7CitpcyAoJHJlc3VsdCwgMSwgJ2luc2VydHMgYXJlIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJl cicpOworCisjIENoYW5nZSByZXBsaWNhIGlkZW50aXR5IGJhY2sgdG8gZGVmYXVsdCBmb3IgdXBj b21pbmcgdGVzdHMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAg IkFMVEVSIFRBQkxFIHJlZ3Jlc3NfdGFiIFJFUExJQ0EgSURFTlRJVFkgREVGQVVMVDsiKTsKKwor ZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDA3ZDI0NmJkOTU3 Li5kYjhiYjRlMWU0MyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTIxNjIsNiArMjE2 Miw3IEBAIFBhcmFsbGVsSGFzaEdyb3d0aAogUGFyYWxsZWxIYXNoSm9pbkJhdGNoCiBQYXJhbGxl bEhhc2hKb2luQmF0Y2hBY2Nlc3NvcgogUGFyYWxsZWxIYXNoSm9pblN0YXRlCitQYXJhbGxlbGl6 ZWRUeG5FbnRyeQogUGFyYWxsZWxJbmRleFNjYW5EZXNjCiBQYXJhbGxlbGl6ZWRUeG5FbnRyeQog UGFyYWxsZWxTbG90CkBAIC00MjU3LDYgKzQyNTgsNyBAQCByZW5kZXp2b3VzSGFzaEVudHJ5CiBy ZXAKIHJlcGxhY2VfcnRlX3ZhcmlhYmxlc19jYWxsYmFjawogcmVwbGFjZV9ydGVfdmFyaWFibGVz X2NvbnRleHQKK3JlcGxpY2FfaWRlbnRpdHlfaGFzaAogcmVwb3J0X2Vycm9yX2ZuCiByZXRfdHlw ZQogcmV3aW5kX3NvdXJjZQotLSAKMi40My4wCgo= --_010_TY4PR01MB1771875A7A64B139EF8C8D05C94E62TY4PR01MB17718jp_ Content-Type: application/octet-stream; name="v20-0003-Introduce-a-local-hash-table-to-store-replica-id.patch" Content-Description: v20-0003-Introduce-a-local-hash-table-to-store-replica-id.patch Content-Disposition: attachment; filename="v20-0003-Introduce-a-local-hash-table-to-store-replica-id.patch"; size=36269; creation-date="Mon, 15 Jun 2026 11:19:06 GMT"; modification-date="Mon, 15 Jun 2026 11:20:12 GMT" Content-Transfer-Encoding: base64 RnJvbSAxMWJiNTkyMDMzYzVkYjFiNTYzNjkzOTVhMTAzYTIyOTYwNDJkYWZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaaGlqaWUgSG91IDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBNb24sIDE1IEp1biAyMDI2IDE4OjUxOjE0ICswODAwClN1YmplY3Q6IFtQQVRDSCB2MjAg My80XSBJbnRyb2R1Y2UgYSBsb2NhbCBoYXNoIHRhYmxlIHRvIHN0b3JlIHJlcGxpY2EKIGlkZW50 aXRpZXMKClRoaXMgbG9jYWwgaGFzaCB0YWJsZSBvbiB0aGUgbGVhZGVyIGlzIHVzZWQgZm9yIGRl dGVjdGluZyBkZXBlbmRlbmNpZXMgYmV0d2Vlbgp0cmFuc2FjdGlvbnMuCgpUaGUgaGFzaCBjb250 YWlucyB0aGUgUmVwbGljYSBJZGVudGl0eSAoUkkpIGFzIGEga2V5IGFuZCB0aGUgcmVtb3RlIFhJ RCB0aGF0Cm1vZGlmaWVkIHRoZSBjb3JyZXNwb25kaW5nIHR1cGxlLiBUaGUgaGFzaCBlbnRyaWVz IGFyZSBpbnNlcnRlZCB3aGVuIHRoZSBsZWFkZXIKZmluZHMgYW4gUkkgZnJvbSBhIHJlcGxpY2F0 aW9uIG1lc3NhZ2UsIGFuZCBhcmUgcmVtb3ZlZCBpbiB0aGUKZm9sbG93aW5nIGNhc2VzOgoKMSkg V2hlbiBoYW5kbGluZyBhIHN1YnNlcXVlbnQgY2hhbmdlIHRoYXQgbW9kaWZpZXMgdGhlIHNhbWUg cm93LCBhbmQgdGhlCiAgIHN0b3JlZCB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBjb21taXR0ZWQu CjIpIFdoZW4gY29sbGVjdGluZyBmbHVzaCBwcm9ncmVzcyBvZiByZW1vdGUgdHJhbnNhY3Rpb25z LCBhbmQgdGhlIHN0b3JlZAogICB0cmFuc2FjdGlvbiBpcyBmb3VuZCB0byBoYXZlIGNvbW1pdHRl ZC4KMykgV2hlbiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZXhjZWVkcyBSRVBMSUNBX0lERU5USVRZ X0NMRUFOVVBfVEhSRVNIT0xECiAgIGFuZCB0aGUgc3RvcmVkIHRyYW5zYWN0aW9uIGhhcyBhbHJl YWR5IGNvbW1pdHRlZC4KCldoZW4gdGhlIGxlYWRlciBzZW5kcyByZXBsaWNhdGlvbiBjaGFuZ2Vz IHRvIHBhcmFsbGVsIHdvcmtlcnMsIGl0IGNoZWNrcyB3aGV0aGVyCmFvdGhlciB0cmFuc2FjdGlv biBoYXMgYWxyZWFkeSB1c2VkIHRoZSBSSSBhc3NvY2lhdGVkIHdpdGggdGhlIGNoYW5nZS4gSWYg c28sCnRoZSBsZWFkZXIgbWFya3MgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gYXMgZGVwZW5kZW50 IG9uIHRoYXQgdHJhbnNhY3Rpb24gYW5kCm5vdGlmaWVzIHBhcmFsbGVsIHdvcmtlcnMgdmlhIFBB X01TR19YQUNUX0RFUEVOREVOQ1kgdG8gd2FpdCBmb3IgdGhhdAp0cmFuc2FjdGlvbiB0byBmaW5p c2guCgpBdXRob3I6IFpoaWppZSBIb3UgPGhvdXpqLmZuc3RAZnVqaXRzdS5jb20+CkF1dGhvcjog SGF5YXRvIEt1cm9kYSA8a3Vyb2RhLmhheWF0b0BmdWppdHN1LmNvbT4KLS0tCiAuLi4vcmVwbGlj YXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMgfCAxMzEgKysrLQogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jICAgIHwgIDI0ICsKIHNyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICB8IDcyMiArKysrKysrKysrKysrKysr Ky0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxyZWxhdGlvbi5oICAgICB8ICAgOSAr CiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCAgICAgfCAgIDYgKy0K IHNyYy90ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZCAgICAgICAgICAgICB8ICAgMSArCiBz cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDMgKwogNyBm aWxlcyBjaGFuZ2VkLCA4OTEgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5j CmluZGV4IGVmZGU5MTgxYTM0Li4zMGQzMWUwMmFjMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKQEAgLTIxMywxNyAr MjEzLDQxIEBACiAjZGVmaW5lIFBBUkFMTEVMX0FQUExZX0xPQ0tfWEFDVAkxCiAKIC8qCi0gKiBI YXNoIHRhYmxlIGVudHJ5IHRvIG1hcCB4aWQgdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBz dGF0ZS4KKyAqIEhhc2ggdGFibGUgZW50cnkgb2YgUGFyYWxsZWxBcHBseVR4bkhhc2ggdG8gbWFw IHhpZCB0byB0aGUgcGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtlciBzdGF0ZS4KICAqLwogdHlwZWRl ZiBzdHJ1Y3QgUGFyYWxsZWxBcHBseVdvcmtlckVudHJ5CiB7Ci0JVHJhbnNhY3Rpb25JZCB4aWQ7 CQkJLyogSGFzaCBrZXkgLS0gbXVzdCBiZSBmaXJzdCAqLworCVRyYW5zYWN0aW9uSWQgeGlkOwkJ CS8qIFJlbW90ZSB0cmFuc2FjdGlvbiBJRCAoaGFzaCBrZXkpIC0tLQorCQkJCQkJCQkgKiBtdXN0 IGJlIGZpcnN0ICovCisKKwkvKgorCSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgYXNzaWdu ZWQgZm9yIGFwcGx5aW5nIHRoZSB0cmFuc2FjdGlvbi4gSXQgaXMKKwkgKiBOVUxMIGlmIHRoZSB3 b3JrZXIgaGFzIGFscmVhZHkgZmluaXNoZWQgdGhlIHRyYW5zYWN0aW9uIGFuZCB0aGUgbGVhZGVy CisJICogaGFzIGNvbGxlY3RlZCBpdHMgbG9jYWwgZW5kIExTTi4KKwkgKi8KIAlQYXJhbGxlbEFw cGx5V29ya2VySW5mbyAqd2luZm87CisKKwkvKgorCSAqIFRoZSBsb2NhbCBlbmQgTFNOIG9mIHRo aXMgdHJhbnNhY3Rpb24gYXBwbGllZCBieSB0aGUgcGFyYWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIu CisJICoKKwkgKiBUaGUgbGVhZGVyIHdpbGwgaW5pdGlhbGl6ZSB0aGlzIHZhbHVlIGJ5IHJlYWRp bmcgdGhlIGxhc3RfY29tbWl0X2VuZCBmcm9tCisJICogdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciBzaGFyZWQgbWVtb3J5IGJlZm9yZSByZXVzaW5nIHRoZSB3b3JrZXIgZm9yCisJICogYW5vdGhl ciB0cmFuc2FjdGlvbiAoc2VlIHBhX2dldF9sYXN0X2NvbW1pdF9lbmQpLiBBbiBpbnZhbGlkIHZh bHVlCisJICogaW5kaWNhdGVzIHRoZSB3b3JrZXIgaGFzIG5vdCBmaW5pc2hlZCBhcHBseWluZyB0 aGUgdHJhbnNhY3Rpb24gb3IgdGhlcmUKKwkgKiBpcyBubyBjaGFuZ2UgYXBwbGllZCBieSB0aGUg d29ya2VyIGZvciB0aGlzIHRyYW5zYWN0aW9uLgorCSAqLworCVhMb2dSZWNQdHIJbG9jYWxfZW5k OwogfSBQYXJhbGxlbEFwcGx5V29ya2VyRW50cnk7CiAKIC8qCiAgKiBBIGhhc2ggdGFibGUgdXNl ZCB0byBjYWNoZSB0aGUgc3RhdGUgb2Ygc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBiZWluZyBhcHBs aWVkCiAgKiBieSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4gRW50cmllcyBhcmUgb2YgdHlw ZSBQYXJhbGxlbEFwcGx5V29ya2VyRW50cnkuCisgKgorICogVGhlIGxlYWRlciBhcHBseSB3b3Jr ZXIgYWRkcyBhbiBlbnRyeSB3aGVuIGEgdHJhbnNhY3Rpb24gc3RhcnRzIGJlaW5nCisgKiBhcHBs aWVkLCBhbmQgcmVtb3ZlcyBpdCBhZnRlciBjb2xsZWN0aW5nIHRoZSB0cmFuc2FjdGlvbidzIGxv Y2FsIGVuZCBMU04gZnJvbQorICogdGhlIHBhcmFsbGVsIHdvcmtlci4KICAqLwogc3RhdGljIEhU QUIgKlBhcmFsbGVsQXBwbHlUeG5IYXNoID0gTlVMTDsKIApAQCAtMjM3LDYgKzI2MSwxMCBAQCB0 eXBlZGVmIHN0cnVjdCBQYXJhbGxlbGl6ZWRUeG5FbnRyeQogICogQSBoYXNoIHRhYmxlIHVzZWQg dG8gdHJhY2sgdGhlIHBhcmFsbGVsaXplZCByZW1vdGUgdHJhbnNhY3Rpb25zIHRoYXQgY291bGQg YmUKICAqIGRlcGVuZGVkIG9uIGJ5IG90aGVyIHRyYW5zYWN0aW9ucy4gRW50cmllcyBhcmUgb2Yg dHlwZSBQYXJhbGxlbGl6ZWRUeG5FbnRyeS4KICAqCisgKiBUaGUgbGVhZGVyIGFwcGx5IHdvcmtl ciBhZGRzIGFuIGVudHJ5IGJlZm9yZSBzZW5kaW5nIHRoZSBDT01NSVQgcmVjb3JkIG9mIGEKKyAq IHRyYW5zYWN0aW9uIHRvIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiBUaGUgZW50cnkgaXMgcmVt b3ZlZCBieSB0aGF0IHdvcmtlcgorICogaW1tZWRpYXRlbHkgYWZ0ZXIgY29tbWl0dGluZyB0aGUg dHJhbnNhY3Rpb24uCisgKgogICogZHNoYXNoIGlzIHVzZWQgdG8gZW5hYmxlIGR5bmFtaWMgc2hh cmVkIG1lbW9yeSBhbGxvY2F0aW9uIGJhc2VkIG9uIHRoZSBudW1iZXIKICAqIG9mIHRyYW5zYWN0 aW9ucyBiZWluZyBhcHBsaWVkIGluIHBhcmFsbGVsLgogICovCkBAIC01MTAsNyArNTM4LDcgQEAg cGFfbGF1bmNoX3BhcmFsbGVsX3dvcmtlcih2b2lkKQogICogc3RyZWFtaW5nIGNoYW5nZXMuCiAg Ki8KIHZvaWQKLXBhX2FsbG9jYXRlX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCkKK3BhX2FsbG9j YXRlX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBzdHJlYW1fdHhuKQogewogCWJvb2wJ CWZvdW5kOwogCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyA9IE5VTEw7CkBAIC01NTEs NyArNTc5LDkgQEAgcGFfYWxsb2NhdGVfd29ya2VyKFRyYW5zYWN0aW9uSWQgeGlkKQogCiAJd2lu Zm8tPmluX3VzZSA9IHRydWU7CiAJd2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzID0gZmFsc2U7CisJ d2luZm8tPnN0cmVhbV90eG4gPSBzdHJlYW1fdHhuOwogCWVudHJ5LT53aW5mbyA9IHdpbmZvOwor CWVudHJ5LT5sb2NhbF9lbmQgPSBJbnZhbGlkWExvZ1JlY1B0cjsKIH0KIAogLyoKQEAgLTc0OCw2 ICs3NzgsNzIgQEAgcGFfcHJvY2Vzc19zcG9vbGVkX21lc3NhZ2VzX2lmX3JlcXVpcmVkKHZvaWQp CiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qCisgKiBHZXQgdGhlIGxvY2FsIGVuZCBMU04gZm9yIGEg dHJhbnNhY3Rpb24gYXBwbGllZCBieSBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqCisgKiBJ ZiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGRpZCBub3Qgd3JpdGUgYW55IGNoYW5nZXMgZHVy aW5nIHRoZSB0cmFuc2FjdGlvbgorICogYXBwbGljYXRpb24gZHVlIHRvIHNpdHVhdGlvbnMgbGlr ZSB1cGRhdGUvZGVsZXRlX21pc3Npbmcgb3IgYSBiZWZvcmUgdHJpZ2dlciwKKyAqIHRoZSAqc2tp cHBlZF93cml0ZSB3aWxsIGJlIHNldCB0byB0cnVlLgorICoKKyAqIE9uY2UgdGhlIExTTiBpcyBy ZXRyaWV2ZWQsIHRoZSB0cmFuc2FjdGlvbiBlbnRyeSBpcyByZW1vdmVkIGZyb20KKyAqIFBhcmFs bGVsQXBwbHlUeG5IYXNoLgorICovCitYTG9nUmVjUHRyCitwYV9nZXRfbGFzdF9jb21taXRfZW5k KFRyYW5zYWN0aW9uSWQgeGlkLCBib29sICpza2lwcGVkX3dyaXRlKQoreworCWJvb2wJCWZvdW5k OworCVBhcmFsbGVsQXBwbHlXb3JrZXJFbnRyeSAqZW50cnk7CisJUGFyYWxsZWxBcHBseVdvcmtl ckluZm8gKndpbmZvOworCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpOworCUFz c2VydChQYXJhbGxlbEFwcGx5VHhuSGFzaCk7CisKKwlpZiAoc2tpcHBlZF93cml0ZSkKKwkJKnNr aXBwZWRfd3JpdGUgPSBmYWxzZTsKKworCS8qIEZpbmQgYW4gZW50cnkgZm9yIHRoZSByZXF1ZXN0 ZWQgdHJhbnNhY3Rpb24uICovCisJZW50cnkgPSBoYXNoX3NlYXJjaChQYXJhbGxlbEFwcGx5VHhu SGFzaCwgJnhpZCwgSEFTSF9GSU5ELCAmZm91bmQpOworCisJaWYgKCFmb3VuZCkKKwkJcmV0dXJu IEludmFsaWRYTG9nUmVjUHRyOworCisJLyoKKwkgKiBJZiB3b3JrZXIgaW5mbyBpcyBOVUxMLCBp dCBpbmRpY2F0ZXMgdGhhdCB0aGUgd29ya2VyIGhhcyBhbHJlYWR5CisJICogZmluaXNoZWQgaGFu ZGxpbmcgdGhlIHRyYW5zYWN0aW9uLiBDb25zZXF1ZW50bHksIHRoZSBsb2NhbCBlbmQgTFNOIGhh cworCSAqIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQgYW5kIHNhdmVkIGluIGVudHJ5LT5sb2NhbF9l bmQuCisJICovCisJd2luZm8gPSBlbnRyeS0+d2luZm87CisJaWYgKHdpbmZvID09IE5VTEwpCisJ eworCQlpZiAoIWhhc2hfc2VhcmNoKFBhcmFsbGVsQXBwbHlUeG5IYXNoLCAmeGlkLCBIQVNIX1JF TU9WRSwgTlVMTCkpCisJCQllbG9nKEVSUk9SLCAiaGFzaCB0YWJsZSBjb3JydXB0ZWQiKTsKKwor CQlpZiAoc2tpcHBlZF93cml0ZSkKKwkJCSpza2lwcGVkX3dyaXRlID0gWExvZ1JlY1B0cklzSW52 YWxpZChlbnRyeS0+bG9jYWxfZW5kKTsKKworCQlyZXR1cm4gZW50cnktPmxvY2FsX2VuZDsKKwl9 CisKKwkvKiBSZXR1cm4gSW52YWxpZFhMb2dSZWNQdHIgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIHN0 aWxsIGluIHByb2dyZXNzICovCisJaWYgKHBhX2dldF94YWN0X3N0YXRlKHdpbmZvLT5zaGFyZWQp ICE9IFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEKQorCQlyZXR1cm4gSW52YWxpZFhMb2dSZWNQdHI7 CisKKwkvKiBDb2xsZWN0IHRoZSBsb2NhbCBlbmQgTFNOIGZyb20gdGhlIHdvcmtlcidzIHNoYXJl ZCBtZW1vcnkgYXJlYSAqLworCWVudHJ5LT5sb2NhbF9lbmQgPSB3aW5mby0+c2hhcmVkLT5sYXN0 X2NvbW1pdF9lbmQ7CisJZW50cnktPndpbmZvID0gTlVMTDsKKworCWlmIChza2lwcGVkX3dyaXRl KQorCQkqc2tpcHBlZF93cml0ZSA9IFhMb2dSZWNQdHJJc0ludmFsaWQoZW50cnktPmxvY2FsX2Vu ZCk7CisKKwllbG9nKERFQlVHMSwgInN0b3JlIGxvY2FsIGNvbW1pdCAlWC8lWCBlbmQgdG8gdHhu IGVudHJ5OiAldSIsCisJCSBMU05fRk9STUFUX0FSR1MoZW50cnktPmxvY2FsX2VuZCksIHhpZCk7 CisKKwlpZiAoIWhhc2hfc2VhcmNoKFBhcmFsbGVsQXBwbHlUeG5IYXNoLCAmeGlkLCBIQVNIX1JF TU9WRSwgTlVMTCkpCisJCWVsb2coRVJST1IsICJoYXNoIHRhYmxlIGNvcnJ1cHRlZCIpOworCisJ cmV0dXJuIGVudHJ5LT5sb2NhbF9lbmQ7Cit9CisKIC8qCiAgKiBJbnRlcnJ1cHQgaGFuZGxlciBm b3IgbWFpbiBsb29wIG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KICAqLwpAQCAtMTc5NSw2ICsx ODkxLDM1IEBAIHBhX3hhY3RfZmluaXNoKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywg WExvZ1JlY1B0ciByZW1vdGVfbHNuKQogCXBhX2ZyZWVfd29ya2VyKHdpbmZvKTsKIH0KIAorLyoK KyAqIENoZWNrIGlmIHRoZSBnaXZlbiB0cmFuc2FjdGlvbiBoYXMgYmVlbiBjb21taXR0ZWQuIFRo aXMgY2FuIG9ubHkgYmUgdXNlZCBieQorICogdGhlIGxlYWRlciBhcHBseSB3b3JrZXIuCisgKgor ICogUmV0dXJucyB0cnVlIGlmIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQsIGZhbHNlIGlm IGl0IGlzIHN0aWxsIGJlaW5nCisgKiBhcHBsaWVkIGluIHBhcmFsbGVsLgorICovCitib29sCitw YV90cmFuc2FjdGlvbl9jb21taXR0ZWQoVHJhbnNhY3Rpb25JZCB4aWQpCit7CisJYm9vbAkJZm91 bmQ7CisJUGFyYWxsZWxBcHBseVdvcmtlckVudHJ5ICplbnRyeTsKKworCUFzc2VydChhbV9sZWFk ZXJfYXBwbHlfd29ya2VyKCkpOworCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsK KwlBc3NlcnQoUGFyYWxsZWxBcHBseVR4bkhhc2gpOworCisJLyogRmluZCBhbiBlbnRyeSBmb3Ig dGhlIHJlcXVlc3RlZCB0cmFuc2FjdGlvbiAqLworCWVudHJ5ID0gaGFzaF9zZWFyY2goUGFyYWxs ZWxBcHBseVR4bkhhc2gsICZ4aWQsIEhBU0hfRklORCwgJmZvdW5kKTsKKworCWlmICghZm91bmQp CisJCXJldHVybiB0cnVlOworCisJaWYgKCFlbnRyeS0+d2luZm8pCisJCXJldHVybiB0cnVlOwor CisJcmV0dXJuIHBhX2dldF94YWN0X3N0YXRlKGVudHJ5LT53aW5mby0+c2hhcmVkKSA9PSBQQVJB TExFTF9UUkFOU19GSU5JU0hFRDsKK30KKwogLyoKICAqIEF0dGFjaCB0byB0aGUgc2hhcmVkIGhh c2ggdGFibGUgZm9yIHBhcmFsbGVsaXplZCB0cmFuc2FjdGlvbnMuCiAgKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYwppbmRleCAwYjFkODBiNWIwZi4uYWI2MzEz ZWIxYmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRp b24uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKQEAg LTk2MCwzICs5NjAsMjcgQEAgRmluZExvZ2ljYWxSZXBMb2NhbEluZGV4KFJlbGF0aW9uIGxvY2Fs cmVsLCBMb2dpY2FsUmVwUmVsYXRpb24gKnJlbW90ZXJlbCwKIAogCXJldHVybiBJbnZhbGlkT2lk OwogfQorCisvKgorICogR2V0IHRoZSBMb2dpY2FsUmVwUmVsTWFwRW50cnkgY29ycmVzcG9uZGlu ZyB0byB0aGUgZ2l2ZW4gcmVsaWQgd2l0aG91dAorICogb3BlbmluZyB0aGUgbG9jYWwgcmVsYXRp b24uCisgKi8KK0xvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqCitsb2dpY2FscmVwX2dldF9yZWxlbnRy eShMb2dpY2FsUmVwUmVsSWQgcmVtb3RlaWQpCit7CisJTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpl bnRyeTsKKwlib29sCQlmb3VuZDsKKworCWlmIChMb2dpY2FsUmVwUmVsTWFwID09IE5VTEwpCisJ CWxvZ2ljYWxyZXBfcmVsbWFwX2luaXQoKTsKKworCS8qIFNlYXJjaCBmb3IgZXhpc3RpbmcgZW50 cnkuICovCisJZW50cnkgPSBoYXNoX3NlYXJjaChMb2dpY2FsUmVwUmVsTWFwLCAodm9pZCAqKSAm cmVtb3RlaWQsCisJCQkJCQlIQVNIX0ZJTkQsICZmb3VuZCk7CisKKwlpZiAoIWZvdW5kKQorCQll bG9nKERFQlVHMSwgIm5vIHJlbGF0aW9uIG1hcCBlbnRyeSBmb3IgcmVtb3RlIHJlbGF0aW9uIElE ICV1IiwKKwkJCSByZW1vdGVpZCk7CisKKwlyZXR1cm4gZW50cnk7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCA2NTk5ZDU2MzMwNi4uMTljZmJjYjFjYjcg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMzAzLDExICsz MDMsMzUgQEAKIAogI2RlZmluZSBOQVBUSU1FX1BFUl9DWUNMRSAxMDAwCS8qIG1heCBzbGVlcCB0 aW1lIGJldHdlZW4gY3ljbGVzICgxcykgKi8KIAorLyoKKyAqIFN0cnVjdCBmb3IgdHJhY2tpbmcg dGhlIHByb2dyZXNzIG9mIGZsdXNoaW5nIHRoZSB0cmFuc2FjdGlvbiByZWNlaXZlZCBmcm9tCisg KiB0aGUgcHVibGlzaGVyLgorICoKKyAqIEEgbGlzdCBvZiB0aGVzZSBzdHJ1Y3RzIChsc25fbWFw cGluZykgaXMgbWFpbnRhaW5lZCBpbiB0aGUgYXBwbHkgd29ya2VyLCBlYWNoCisgKiByZXByZXNl bnRpbmcgYSB0cmFuc2FjdGlvbiB0aGF0IGlzIGJlaW5nIGZsdXNoZWQuIFRoZSBlbnRyaWVzIGFy ZSByZW1vdmVkCisgKiBmcm9tIHRoZSBsaXN0IHdoZW4gdGhlIHRyYW5zYWN0aW9uIGlzIGZ1bGx5 IGZsdXNoZWQgKHNlZSBnZXRfZmx1c2hfcG9zaXRpb24pLgorICovCiB0eXBlZGVmIHN0cnVjdCBG bHVzaFBvc2l0aW9uCiB7CiAJZGxpc3Rfbm9kZQlub2RlOworCisJLyoKKwkgKiBUaGUgZW5kIG9m IGNvbW1pdCByZWNvcmQgYXBwbGllZCBieSB0aGUgd29ya2VyLCBhbmQgdGhlIGNvcnJlc3BvbmRp bmcgZW5kCisJICogb2YgY29tbWl0IHJlY29yZCBvbiB0aGUgcHVibGlzaGVyLgorCSAqCisJICog Rm9yIHRyYW5zYWN0aW9ucyBhc3NpZ25lZCB0byBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciwgdGhl IGxvY2FsX2VuZCBpcworCSAqIG5vdCBpbW1lZGlhdGVseSBhdmFpbGFibGUuIFRoZSBsZWFkZXIg d2lsbCB1cGRhdGUgdGhlIGxvY2FsX2VuZCB3aGVuIGl0CisJICogY29uZmlybXMgdGhhdCB0aGUg cGFyYWxsZWwgYXBwbHkgd29ya2VyIGhhcyBmaW5pc2hlZCBhcHBseWluZyB0aGUKKwkgKiB0cmFu c2FjdGlvbiAoc2VlIHRoZSB1c2FnZSBvZiBwYV9nZXRfbGFzdF9jb21taXRfZW5kKS4KKwkgKi8K IAlYTG9nUmVjUHRyCWxvY2FsX2VuZDsKIAlYTG9nUmVjUHRyCXJlbW90ZV9lbmQ7CisKKwkvKgor CSAqIFRoZSByZW1vdGUgdHJhbnNhY3Rpb24gSUQuIFRoaXMgc2hvdWxkIGJlIHNldCB0byBhIHZh bGlkIElEIG9ubHkgd2hlbiB0aGUKKwkgKiB0cmFuc2FjdGlvbiBpcyBhc3NpZ25lZCB0byBhIHBh cmFsbGVsIGFwcGx5IHdvcmtlci4KKwkgKi8KKwlUcmFuc2FjdGlvbklkIHBhX3JlbW90ZV94aWQ7 CiB9IEZsdXNoUG9zaXRpb247CiAKIHN0YXRpYyBkbGlzdF9oZWFkIGxzbl9tYXBwaW5nID0gRExJ U1RfU1RBVElDX0lOSVQobHNuX21hcHBpbmcpOwpAQCAtNDc2LDYgKzUwMCw4IEBAIEVycm9yQ29u dGV4dENhbGxiYWNrICphcHBseV9lcnJvcl9jb250ZXh0X3N0YWNrID0gTlVMTDsKIE1lbW9yeUNv bnRleHQgQXBwbHlNZXNzYWdlQ29udGV4dCA9IE5VTEw7CiBNZW1vcnlDb250ZXh0IEFwcGx5Q29u dGV4dCA9IE5VTEw7CiAKK3N0YXRpYyBNZW1vcnlDb250ZXh0IFBhcmFsbGVsQXBwbHlDb250ZXh0 ID0gTlVMTDsKKwogLyogcGVyIHN0cmVhbSBjb250ZXh0IGZvciBzdHJlYW1pbmcgdHJhbnNhY3Rp b25zICovCiBzdGF0aWMgTWVtb3J5Q29udGV4dCBMb2dpY2FsU3RyZWFtaW5nQ29udGV4dCA9IE5V TEw7CiAKQEAgLTU0OSw2ICs1NzUsNjUgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBwbHlTdWJYYWN0RGF0 YQogCiBzdGF0aWMgQXBwbHlTdWJYYWN0RGF0YSBzdWJ4YWN0X2RhdGEgPSB7MCwgMCwgSW52YWxp ZFRyYW5zYWN0aW9uSWQsIE5VTEx9OwogCisvKiBIYXNoIHRhYmxlIGtleSBmb3IgcmVwbGljYV9p ZGVudGl0eV90YWJsZSAqLwordHlwZWRlZiBzdHJ1Y3QgUmVwbGljYUlkZW50aXR5S2V5Cit7CisJ T2lkCQkJcmVsaWQ7CisJTG9naWNhbFJlcFR1cGxlRGF0YSAqZGF0YTsKK30gUmVwbGljYUlkZW50 aXR5S2V5OworCisvKiBIYXNoIHRhYmxlIGVudHJ5IGluIHJlcGxpY2FfaWRlbnRpdHlfdGFibGUg Ki8KK3R5cGVkZWYgc3RydWN0IFJlcGxpY2FJZGVudGl0eUVudHJ5Cit7CisJUmVwbGljYUlkZW50 aXR5S2V5ICprZXlkYXRhOworCVRyYW5zYWN0aW9uSWQgcmVtb3RlX3hpZDsKKworCS8qIG5lZWRl ZCBmb3Igc2ltcGxlaGFzaCAqLworCXVpbnQzMgkJaGFzaDsKKwljaGFyCQlzdGF0dXM7Cit9IFJl cGxpY2FJZGVudGl0eUVudHJ5OworCisjaW5jbHVkZSAiY29tbW9uL2hhc2hmbi5oIgorCitzdGF0 aWMgdWludDMyIGhhc2hfcmVwbGljYV9pZGVudGl0eShSZXBsaWNhSWRlbnRpdHlLZXkgKmtleSk7 CitzdGF0aWMgYm9vbCBoYXNoX3JlcGxpY2FfaWRlbnRpdHlfY29tcGFyZShSZXBsaWNhSWRlbnRp dHlLZXkgKmEsCisJCQkJCQkJCQkJICBSZXBsaWNhSWRlbnRpdHlLZXkgKmIpOworCisvKiBEZWZp bmUgcGFyYW1ldGVycyBmb3IgcmVwbGljYSBpZGVudGl0eSBoYXNoIHRhYmxlIGNvZGUgZ2VuZXJh dGlvbi4gKi8KKyNkZWZpbmUgU0hfUFJFRklYCQlyZXBsaWNhX2lkZW50aXR5CisjZGVmaW5lIFNI X0VMRU1FTlRfVFlQRQlSZXBsaWNhSWRlbnRpdHlFbnRyeQorI2RlZmluZSBTSF9LRVlfVFlQRQkJ UmVwbGljYUlkZW50aXR5S2V5ICoKKyNkZWZpbmUJU0hfS0VZCQkJa2V5ZGF0YQorI2RlZmluZSBT SF9IQVNIX0tFWSh0Yiwga2V5KQloYXNoX3JlcGxpY2FfaWRlbnRpdHkoa2V5KQorI2RlZmluZSBT SF9FUVVBTCh0YiwgYSwgYikJCWhhc2hfcmVwbGljYV9pZGVudGl0eV9jb21wYXJlKGEsIGIpCisj ZGVmaW5lIFNIX1NUT1JFX0hBU0gKKyNkZWZpbmUgU0hfR0VUX0hBU0godGIsIGEpIChhKS0+aGFz aAorI2RlZmluZQlTSF9TQ09QRQkJc3RhdGljIGlubGluZQorI2RlZmluZSBTSF9ERUNMQVJFCisj ZGVmaW5lIFNIX0RFRklORQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisKKyNkZWZpbmUg UkVQTElDQV9JREVOVElUWV9JTklUSUFMX1NJWkUgMTI4CisjZGVmaW5lIFJFUExJQ0FfSURFTlRJ VFlfQ0xFQU5VUF9USFJFU0hPTEQgMTAyNAorCisvKgorICogSGFzaCB0YWJsZSBzdG9yaW5nIHJl cGxpY2EgaWRlbnRpdHkgdmFsdWVzIGZvciBjaGFuZ2VzIGJlaW5nIGFwcGxpZWQgaW4KKyAqIHBh cmFsbGVsLCBhbG9uZyB3aXRoIHRoZSBsYXRlc3QgdHJhbnNhY3Rpb24gdGhhdCBtb2RpZmllZCBl YWNoIHJvdy4KKyAqCisgKiBFbnRyaWVzIGFyZSByZW1vdmVkIGluIHRoZSBmb2xsb3dpbmcgY2Fz ZXM6CisgKgorICogMSkgV2hlbiBoYW5kbGluZyBhIHN1YnNlcXVlbnQgY2hhbmdlIHRoYXQgbW9k aWZpZXMgdGhlIHNhbWUgcm93LCBhbmQgdGhlCisgKiAgICBzdG9yZWQgdHJhbnNhY3Rpb24gaGFz IGFscmVhZHkgY29tbWl0dGVkLgorICogMikgV2hlbiBjb2xsZWN0aW5nIGZsdXNoIHByb2dyZXNz IG9mIHJlbW90ZSB0cmFuc2FjdGlvbnMsIGFuZCB0aGUgc3RvcmVkCisgKiAgICB0cmFuc2FjdGlv biBpcyBmb3VuZCB0byBoYXZlIGNvbW1pdHRlZC4KKyAqIDMpIFdoZW4gdGhlIG51bWJlciBvZiBl bnRyaWVzIGV4Y2VlZHMgUkVQTElDQV9JREVOVElUWV9DTEVBTlVQX1RIUkVTSE9MRAorICogICAg YW5kIHRoZSBzdG9yZWQgdHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgY29tbWl0dGVkLgorICoKKyAq IFdlIHVzZSBzaW1wbGVoYXNoIGZvciBpdHMgZWZmaWNpZW5jeSAoc2VlIGNvbW1lbnRzIGF0b3Ag b2Ygc2ltcGxlaGFzaC5oKSwgYXMKKyAqIHRoaXMgaGFzaCB0YWJsZSBpcyBhY2Nlc3NlZCBmb3Ig ZXZlcnkgY2hhbmdlIGluIGEgdHJhbnNhY3Rpb24uCisgKi8KK3N0YXRpYyByZXBsaWNhX2lkZW50 aXR5X2hhc2ggKnJlcGxpY2FfaWRlbnRpdHlfdGFibGUgPSBOVUxMOworCiBzdGF0aWMgaW5saW5l IHZvaWQgc3VieGFjdF9maWxlbmFtZShjaGFyICpwYXRoLCBPaWQgc3ViaWQsIFRyYW5zYWN0aW9u SWQgeGlkKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VzX2ZpbGVuYW1lKGNoYXIgKnBhdGgs IE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQpOwogCkBAIC02MzYsNiArNzIxLDYxNCBAQCBz dGF0aWMgdm9pZCBzZXRfd2FsX3JlY2VpdmVyX3RpbWVvdXQodm9pZCk7CiAKIHN0YXRpYyB2b2lk IG9uX2V4aXRfY2xlYXJfeGFjdF9zdGF0ZShpbnQgY29kZSwgRGF0dW0gYXJnKTsKIAorc3RhdGlj IHZvaWQgc2VuZF9pbnRlcm5hbF9kZXBlbmRlbmNpZXMoUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KndpbmZvLAorCQkJCQkJCQkJICAgTGlzdCAqZGVwZW5kc19vbl94aWRzKTsKKworLyoKKyAqIENv bXB1dGUgdGhlIGhhc2ggdmFsdWUgZm9yIGVudHJpZXMgaW4gdGhlIHJlcGxpY2FfaWRlbnRpdHlf dGFibGUuCisgKi8KK3N0YXRpYyB1aW50MzIKK2hhc2hfcmVwbGljYV9pZGVudGl0eShSZXBsaWNh SWRlbnRpdHlLZXkgKmtleSkKK3sKKwlpbnQJCQlpOworCXVpbnQzMgkJaGFzaGtleSA9IDA7CisK KwloYXNoa2V5ID0gaGFzaF9jb21iaW5lKGhhc2hrZXksIGhhc2hfdWludDMyKGtleS0+cmVsaWQp KTsKKworCWZvciAoaSA9IDA7IGkgPCBrZXktPmRhdGEtPm5jb2xzOyBpKyspCisJeworCQl1aW50 MzIJCWhrZXk7CisKKwkJaWYgKGtleS0+ZGF0YS0+Y29sc3RhdHVzW2ldID09IExPR0lDQUxSRVBf Q09MVU1OX05VTEwpCisJCQljb250aW51ZTsKKworCQloa2V5ID0gaGFzaF9hbnkoKGNvbnN0IHVu c2lnbmVkIGNoYXIgKikga2V5LT5kYXRhLT5jb2x2YWx1ZXNbaV0uZGF0YSwKKwkJCQkJCWtleS0+ ZGF0YS0+Y29sdmFsdWVzW2ldLmxlbik7CisJCWhhc2hrZXkgPSBoYXNoX2NvbWJpbmUoaGFzaGtl eSwgaGtleSk7CisJfQorCisJcmV0dXJuIGhhc2hrZXk7Cit9CisKKy8qCisgKiBDb21wYXJlIHR3 byBlbnRyaWVzIGluIHRoZSByZXBsaWNhX2lkZW50aXR5X3RhYmxlLgorICovCitzdGF0aWMgYm9v bAoraGFzaF9yZXBsaWNhX2lkZW50aXR5X2NvbXBhcmUoUmVwbGljYUlkZW50aXR5S2V5ICphLCBS ZXBsaWNhSWRlbnRpdHlLZXkgKmIpCit7CisJaWYgKGEtPnJlbGlkICE9IGItPnJlbGlkIHx8CisJ CWEtPmRhdGEtPm5jb2xzICE9IGItPmRhdGEtPm5jb2xzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlm b3IgKGludCBpID0gMDsgaSA8IGEtPmRhdGEtPm5jb2xzOyBpKyspCisJeworCQlpZiAoYS0+ZGF0 YS0+Y29sc3RhdHVzW2ldICE9IGItPmRhdGEtPmNvbHN0YXR1c1tpXSkKKwkJCXJldHVybiBmYWxz ZTsKKworCQlpZiAoYS0+ZGF0YS0+Y29sdmFsdWVzW2ldLmxlbiAhPSBiLT5kYXRhLT5jb2x2YWx1 ZXNbaV0ubGVuKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWlmIChzdHJjbXAoYS0+ZGF0YS0+Y29s dmFsdWVzW2ldLmRhdGEsIGItPmRhdGEtPmNvbHZhbHVlc1tpXS5kYXRhKSkKKwkJCXJldHVybiBm YWxzZTsKKworCQllbG9nKERFQlVHMSwgImNvbmZsaWN0aW5nIGtleSAlcyIsIGEtPmRhdGEtPmNv bHZhbHVlc1tpXS5kYXRhKTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEZyZWUg cmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHJlcGxpY2EgaWRlbnRpdHkga2V5LgorICovCitz dGF0aWMgdm9pZAorZnJlZV9yZXBsaWNhX2lkZW50aXR5X2tleShSZXBsaWNhSWRlbnRpdHlLZXkg KmtleSkKK3sKKwlBc3NlcnQoa2V5KTsKKworCXBmcmVlKGtleS0+ZGF0YS0+Y29sdmFsdWVzKTsK KwlwZnJlZShrZXktPmRhdGEtPmNvbHN0YXR1cyk7CisJcGZyZWUoa2V5LT5kYXRhKTsKKwlwZnJl ZShrZXkpOworfQorCisvKgorICogQ2xlYW4gdXAgaGFzaCB0YWJsZSBlbnRyaWVzIGFzc29jaWF0 ZWQgd2l0aCB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24gSURzLgorICovCitzdGF0aWMgdm9pZAorZGVs ZXRlX3JlcGxpY2FfaWRlbnRpdHlfZW50cmllc19mb3JfdHhucyhMaXN0ICpjb21taXR0ZWRfeGlk cykKK3sKKwlyZXBsaWNhX2lkZW50aXR5X2l0ZXJhdG9yIGk7CisJUmVwbGljYUlkZW50aXR5RW50 cnkgKnJpZW50cnk7CisKKwlpZiAoIWNvbW1pdHRlZF94aWRzKQorCQlyZXR1cm47CisKKwlyZXBs aWNhX2lkZW50aXR5X3N0YXJ0X2l0ZXJhdGUocmVwbGljYV9pZGVudGl0eV90YWJsZSwgJmkpOwor CXdoaWxlICgocmllbnRyeSA9IHJlcGxpY2FfaWRlbnRpdHlfaXRlcmF0ZShyZXBsaWNhX2lkZW50 aXR5X3RhYmxlLCAmaSkpICE9IE5VTEwpCisJeworCQlpZiAoIWxpc3RfbWVtYmVyX3hpZChjb21t aXR0ZWRfeGlkcywgcmllbnRyeS0+cmVtb3RlX3hpZCkpCisJCQljb250aW51ZTsKKworCQkvKiBD bGVhbiB1cCB0aGUgaGFzaCBlbnRyeSBmb3IgY29tbWl0dGVkIHRyYW5zYWN0aW9uICovCisJCWZy ZWVfcmVwbGljYV9pZGVudGl0eV9rZXkocmllbnRyeS0+a2V5ZGF0YSk7CisJCXJlcGxpY2FfaWRl bnRpdHlfZGVsZXRlX2l0ZW0ocmVwbGljYV9pZGVudGl0eV90YWJsZSwgcmllbnRyeSk7CisJfQor fQorCisvKgorICogQ2hlY2sgY29tbWl0dGVkIHRyYW5zYWN0aW9ucyBhbmQgY2xlYW4gdXAgY29y cmVzcG9uZGluZyBlbnRyaWVzIGluIHRoZSBoYXNoCisgKiB0YWJsZS4KKyAqCisgKiBBbHNvIHVw ZGF0ZSB0aGUgbG9jYWxfZW5kIGZvciB0cmFuc2FjdGlvbnMgYXNzaWduZWQgdG8gcGFyYWxsZWwg YXBwbHkgd29ya2VycworICogaWYgbm90IGFscmVhZHkgc2V0LgorICovCitzdGF0aWMgdm9pZAor Y2xlYW51cF9jb21taXR0ZWRfcmVwbGljYV9pZGVudGl0eV9lbnRyaWVzKHZvaWQpCit7CisJZGxp c3RfbXV0YWJsZV9pdGVyIGl0ZXI7CisJTGlzdAkgICAqY29tbWl0dGVkX3hpZHMgPSBOSUw7CisK KwlkbGlzdF9mb3JlYWNoX21vZGlmeShpdGVyLCAmbHNuX21hcHBpbmcpCisJeworCQlGbHVzaFBv c2l0aW9uICpwb3MgPQorCQkJZGxpc3RfY29udGFpbmVyKEZsdXNoUG9zaXRpb24sIG5vZGUsIGl0 ZXIuY3VyKTsKKwkJYm9vbAkJc2tpcHBlZF93cml0ZTsKKworCQkvKgorCQkgKiBTa2lwIGlmIHRo ZSB0cmFuc2FjdGlvbiB3YXMgbm90IGFzc2lnbmVkIHRvIGEgcGFyYWxsZWwgd29ya2VyLCBvciBp ZgorCQkgKiB3ZSBoYXZlIGFscmVhZHkgY29sbGVjdGVkIGl0cyBsb2NhbCBlbmQgTFNOLgorCQkg Ki8KKwkJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChwb3MtPnBhX3JlbW90ZV94aWQpIHx8CisJ CQlYTG9nUmVjUHRySXNWYWxpZChwb3MtPmxvY2FsX2VuZCkpCisJCQljb250aW51ZTsKKworCQlw b3MtPmxvY2FsX2VuZCA9IHBhX2dldF9sYXN0X2NvbW1pdF9lbmQocG9zLT5wYV9yZW1vdGVfeGlk LAorCQkJCQkJCQkJCQkJJnNraXBwZWRfd3JpdGUpOworCisJCWVsb2coREVCVUcxLAorCQkJICJn b3QgY29tbWl0IGVuZCBmcm9tIHBhcmFsbGVsIGFwcGx5IHdvcmtlciwgIgorCQkJICJ0eG46ICV1 LCByZW1vdGVfZW5kICVYLyVYLCBsb2NhbF9lbmQgJVgvJVgiLAorCQkJIHBvcy0+cGFfcmVtb3Rl X3hpZCwgTFNOX0ZPUk1BVF9BUkdTKHBvcy0+cmVtb3RlX2VuZCksCisJCQkgTFNOX0ZPUk1BVF9B UkdTKHBvcy0+bG9jYWxfZW5kKSk7CisKKwkJLyogU2tpcCBpZiB0aGUgdHJhbnNhY3Rpb24gaXMg c3RpbGwgYmVpbmcgYXBwbGllZCAqLworCQlpZiAoIXNraXBwZWRfd3JpdGUgJiYgIVhMb2dSZWNQ dHJJc1ZhbGlkKHBvcy0+bG9jYWxfZW5kKSkKKwkJCWNvbnRpbnVlOworCisJCWNvbW1pdHRlZF94 aWRzID0gbGFwcGVuZF94aWQoY29tbWl0dGVkX3hpZHMsIHBvcy0+cGFfcmVtb3RlX3hpZCk7CisJ fQorCisJLyogY2xlYW51cCB0aGUgZW50cmllcyBmb3IgY29tbWl0dGVkIHRyYW5zYWN0aW9ucyAq LworCWRlbGV0ZV9yZXBsaWNhX2lkZW50aXR5X2VudHJpZXNfZm9yX3R4bnMoY29tbWl0dGVkX3hp ZHMpOworfQorCisvKgorICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcmVsYXRpb24gZW50cnkg Y29udGFpbnMgYW4gdW5jb21taXR0ZWQgdHJhbnNhY3Rpb24KKyAqIHRoYXQgYWZmZWN0ZWQgdGhl IHdob2xlIHRhYmxlLgorICovCitzdGF0aWMgYm9vbAoraGFzX2FjdGl2ZV9yZWxfZGVwZW5kZW5j eShMb2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlbGVudHJ5KQoreworCWlmICghVHJhbnNhY3Rpb25J ZElzVmFsaWQocmVsZW50cnktPmxhc3RfZGVwZW5kZWRfeGlkKSkKKwkJcmV0dXJuIGZhbHNlOwor CisJaWYgKHBhX3RyYW5zYWN0aW9uX2NvbW1pdHRlZChyZWxlbnRyeS0+bGFzdF9kZXBlbmRlZF94 aWQpKQorCXsKKwkJcmVsZW50cnktPmxhc3RfZGVwZW5kZWRfeGlkID0gSW52YWxpZFRyYW5zYWN0 aW9uSWQ7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAq IENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGtleSBkZXBlbmRlbmN5IGVudHJ5IGNvbnRhaW5zIGFu IHVuY29tbWl0dGVkCisgKiB0cmFuc2FjdGlvbi4gSWYgY2xlYW51cCBpcyB0cnVlLCBhbHNvIGNs ZWFuIHVwIHRoZSBlbnRyeSBpZiB0aGUgdHJhbnNhY3Rpb24KKyAqIGhhcyBhbHJlYWR5IGNvbW1p dHRlZC4KKyAqLworc3RhdGljIGJvb2wKK2hhc19hY3RpdmVfa2V5X2RlcGVuZGVuY3koUmVwbGlj YUlkZW50aXR5RW50cnkgKnJpZW50cnksIGJvb2wgY2xlYW51cCkKK3sKKwlBc3NlcnQoVHJhbnNh Y3Rpb25JZElzVmFsaWQocmllbnRyeS0+cmVtb3RlX3hpZCkpOworCisJaWYgKHBhX3RyYW5zYWN0 aW9uX2NvbW1pdHRlZChyaWVudHJ5LT5yZW1vdGVfeGlkKSkKKwl7CisJCWlmIChjbGVhbnVwKQor CQl7CisJCQlmcmVlX3JlcGxpY2FfaWRlbnRpdHlfa2V5KHJpZW50cnktPmtleWRhdGEpOworCQkJ cmVwbGljYV9pZGVudGl0eV9kZWxldGVfaXRlbShyZXBsaWNhX2lkZW50aXR5X3RhYmxlLCByaWVu dHJ5KTsKKwkJfQorCisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwor LyoKKyAqIEFwcGVuZCB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24gSUQgdG8gdGhlIGRlcGVuZGVuY3kg bGlzdCBpZiBpdCBpcyBub3QgYWxyZWFkeQorICogcHJlc2VudC4KKyAqLworc3RhdGljIHZvaWQK K2FwcGVuZF94aWRfZGVwZW5kZW5jeShUcmFuc2FjdGlvbklkIHhpZCwgTGlzdCAqKmRlcGVuZHNf b25feGlkcykKK3sKKwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSk7CisKKwlpZiAo bGlzdF9tZW1iZXJfeGlkKCpkZXBlbmRzX29uX3hpZHMsIHhpZCkpCisJCXJldHVybjsKKworCSpk ZXBlbmRzX29uX3hpZHMgPSBsYXBwZW5kX3hpZCgqZGVwZW5kc19vbl94aWRzLCB4aWQpOworfQor CisvKgorICogQ2hlY2sgZm9yIGRlcGVuZGVuY2llcyBvbiBwcmVjZWRpbmcgdHJhbnNhY3Rpb25z IHRoYXQgbW9kaWZ5IHRoZSBzYW1lIGtleSBhcworICogdGhlIGdpdmVuIHR1cGxlLiBSZXR1cm5z IHRoZSBkZXBlbmRlbnQgdHJhbnNhY3Rpb25zIGluICdkZXBlbmRzX29uX3hpZHMnLgorICoKKyAq IEFkZGl0aW9uYWxseSwgaWYgbmV3X2RlcGVuZGVkX3hpZCBpcyB2YWxpZCwgcmVjb3JkIHRoZSBj dXJyZW50IGNoYW5nZSBhbmQgdGhlCisgKiB0cmFuc2FjdGlvbiBhcyBhIG5ldyBkZXBlbmRlbmN5 IGZvciB0aGUgcmVwbGljYSBpZGVudGl0eSBrZXkgbW9kaWZpY2F0aW9uLAorICogYWxsb3dpbmcg c3Vic2VxdWVudCB0cmFuc2FjdGlvbnMgdGhhdCBtb2RpZnkgdGhlIHNhbWUga2V5IHRvIGJlIGRl cGVuZGVudCBvbgorICogaXQuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19hbmRfcmVjb3JkX3Jp X2RlcGVuZGVuY3koT2lkIHJlbGlkLCBMb2dpY2FsUmVwVHVwbGVEYXRhICpvcmlnaW5hbF9kYXRh LAorCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgbmV3X2RlcGVuZGVkX3hpZCwKKwkJCQkJCQkgICBM aXN0ICoqZGVwZW5kc19vbl94aWRzKQoreworCUxvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqcmVsZW50 cnk7CisJTG9naWNhbFJlcFR1cGxlRGF0YSAqcmlkYXRhOworCVJlcGxpY2FJZGVudGl0eUtleSAq cmlrZXk7CisJUmVwbGljYUlkZW50aXR5RW50cnkgKnJpZW50cnk7CisJTWVtb3J5Q29udGV4dCBv bGRjdHg7CisJaW50CQkJbl9yaTsKKwlib29sCQlmb3VuZCA9IGZhbHNlOworCisJQXNzZXJ0KGRl cGVuZHNfb25feGlkcyk7CisKKwkvKiBTZWFyY2ggZm9yIGV4aXN0aW5nIGVudHJ5ICovCisJcmVs ZW50cnkgPSBsb2dpY2FscmVwX2dldF9yZWxlbnRyeShyZWxpZCk7CisKKwlBc3NlcnQocmVsZW50 cnkpOworCisJLyoKKwkgKiBGaXJzdCBjaGVjayB3aGV0aGVyIGFueSBwcmV2aW91cyB0cmFuc2Fj dGlvbiAob3RoZXIgdGhhbiB0aGUgY3VycmVudCBvbmUpCisJICogaGFzIGFmZmVjdGVkIHRoZSB3 aG9sZSB0YWJsZSBlLmcuLCB0cnVuY2F0ZSBvciBzY2hlbWEgY2hhbmdlIGZyb20KKwkgKiBwdWJs aXNoZXIuCisJICovCisJaWYgKGhhc19hY3RpdmVfcmVsX2RlcGVuZGVuY3kocmVsZW50cnkpICYm CisJCSFUcmFuc2FjdGlvbklkRXF1YWxzKHJlbGVudHJ5LT5sYXN0X2RlcGVuZGVkX3hpZCwgbmV3 X2RlcGVuZGVkX3hpZCkpCisJeworCQllbG9nKERFQlVHMSwgImZvdW5kIHRhYmxlLXdpZGUgY2hh bmdlIGFmZmVjdGluZyAldSBmcm9tICV1IiwKKwkJCSByZWxpZCwgcmVsZW50cnktPmxhc3RfZGVw ZW5kZWRfeGlkKTsKKworCQlhcHBlbmRfeGlkX2RlcGVuZGVuY3kocmVsZW50cnktPmxhc3RfZGVw ZW5kZWRfeGlkLCBkZXBlbmRzX29uX3hpZHMpOworCX0KKworCW5fcmkgPSBibXNfbnVtX21lbWJl cnMocmVsZW50cnktPnJlbW90ZXJlbC5hdHRrZXlzKTsKKworCS8qCisJICogUmV0dXJuIGlmIHRo ZXJlIGFyZSBubyByZXBsaWNhIGlkZW50aXR5IGNvbHVtbnMsIGluZGljYXRpbmcgdGhhdCB0aGUK KwkgKiByZW1vdGUgcmVsYXRpb24gaGFzIG5laXRoZXIgYSByZXBsaWNhIGlkZW50aXR5IGtleSBu b3IgaXMgbWFya2VkIGFzCisJICogcmVwbGljYSBpZGVudGl0eSBmdWxsLgorCSAqLworCWlmICgh bl9yaSkKKwkJcmV0dXJuOworCisJLyogQ2hlY2sgaWYgdGhlIFJJIGtleSB2YWx1ZSBvZiB0aGUg dHVwbGUgaXMgaW52YWxpZCAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgb3JpZ2luYWxfZGF0YS0+ bmNvbHM7IGkrKykKKwl7CisJCWlmICghYm1zX2lzX21lbWJlcihpLCByZWxlbnRyeS0+cmVtb3Rl cmVsLmF0dGtleXMpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogTlVMTCBpbiB0aGUgbmV3 IHR1cGxlIG1lYW5zIHRoZSByZXBsaWNhIGlkZW50aXR5IGtleSBoYXNuJ3QgY2hhbmdlZCwKKwkJ ICogc28gbm8gbmV3IGRlcGVuZGVuY3kgbmVlZHMgdG8gYmUgcmVjb3JkZWQuIFRoZSBkZXBlbmRl bmN5IHNob3VsZCBoYXZlCisJCSAqIGJlZW4gcmVjb3JkZWQgd2hlbiBwcm9jZXNzaW5nIHRoZSBv bGQgdHVwbGUuCisJCSAqLworCQlpZiAob3JpZ2luYWxfZGF0YS0+Y29sc3RhdHVzW2ldID09IExP R0lDQUxSRVBfQ09MVU1OX05VTEwpCisJCQlyZXR1cm47CisKKwkJLyoKKwkJICogTE9HSUNBTFJF UF9DT0xVTU5fVU5DSEFOR0VEIG9ubHkgaW5kaWNhdGVzIHRoYXQgYSBUT0FTVCBjb2x1bW4gaW4g dGhlCisJCSAqIHJlcGxpY2EgaWRlbnRpdHkga2V5IGhhc24ndCBjaGFuZ2VkLiBIb3dldmVyLCBv dGhlciBjb2x1bW5zIG1heSBoYXZlCisJCSAqIGNoYW5nZWQsIHNvIHdlIHN0aWxsIG5lZWQgdG8g Y2hlY2sgdGhlIGRlcGVuZGVuY3kgZm9yIHRoaXMgY29sdW1uLgorCQkgKgorCQkgKiBCZWZvcmUg Y2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB1bmNoYW5nZWQgVE9BU1QgY29sdW1uIHZhbHVlcyBzaG91 bGQKKwkJICogaGF2ZSBiZWVuIGNvcGllZCBmcm9tIHRoZSBvbGQgdHVwbGUgdG8gdGhlIG5ldyB0 dXBsZS4gU28sIHdlIHNob3VsZAorCQkgKiBzZWUgdGhlIGNvbXBsZXRlIHJlcGxpY2EgaWRlbnRp dHkga2V5IHZhbHVlIGluIG9yaWdpbmFsX2RhdGEgYW5kCisJCSAqIGNvcnJlY3RseSBjaGVjayB0 aGUgZGVwZW5kZW5jeS4KKwkJICovCisJCUFzc2VydChvcmlnaW5hbF9kYXRhLT5jb2xzdGF0dXNb aV0gIT0gTE9HSUNBTFJFUF9DT0xVTU5fVU5DSEFOR0VEIHx8CisJCQkgICBvcmlnaW5hbF9kYXRh LT5jb2x2YWx1ZXNbaV0ubGVuID4gMCk7CisJfQorCisJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKEFwcGx5Q29udGV4dCk7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcmVwbGljYSBp ZGVudGl0eSB2YWx1ZXMgKi8KKwlyaWRhdGEgPSBwYWxsb2MwX29iamVjdChMb2dpY2FsUmVwVHVw bGVEYXRhKTsKKwlyaWRhdGEtPmNvbHZhbHVlcyA9IHBhbGxvYzBfYXJyYXkoU3RyaW5nSW5mb0Rh dGEsIG5fcmkpOworCXJpZGF0YS0+Y29sc3RhdHVzID0gcGFsbG9jMF9hcnJheShjaGFyLCBuX3Jp KTsKKwlyaWRhdGEtPm5jb2xzID0gbl9yaTsKKworCWZvciAoaW50IGlfb3JpZ2luYWwgPSAwLCBp X3JpID0gMDsgaV9vcmlnaW5hbCA8IG9yaWdpbmFsX2RhdGEtPm5jb2xzOyBpX29yaWdpbmFsKysp CisJeworCQlTdHJpbmdJbmZvCW9yaWdpbmFsX2NvbHZhbHVlID0gJm9yaWdpbmFsX2RhdGEtPmNv bHZhbHVlc1tpX29yaWdpbmFsXTsKKworCQlpZiAoIWJtc19pc19tZW1iZXIoaV9vcmlnaW5hbCwg cmVsZW50cnktPnJlbW90ZXJlbC5hdHRrZXlzKSkKKwkJCWNvbnRpbnVlOworCisJCWluaXRTdHJp bmdJbmZvRXh0KCZyaWRhdGEtPmNvbHZhbHVlc1tpX3JpXSwgb3JpZ2luYWxfY29sdmFsdWUtPmxl biArIDEpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZyaWRhdGEtPmNvbHZhbHVlc1tpX3Jp XSwgb3JpZ2luYWxfY29sdmFsdWUtPmRhdGEpOworCQlyaWRhdGEtPmNvbHN0YXR1c1tpX3JpXSA9 IG9yaWdpbmFsX2RhdGEtPmNvbHN0YXR1c1tpX29yaWdpbmFsXTsKKwkJaV9yaSsrOworCX0KKwor CXJpa2V5ID0gcGFsbG9jMF9vYmplY3QoUmVwbGljYUlkZW50aXR5S2V5KTsKKwlyaWtleS0+cmVs aWQgPSByZWxpZDsKKwlyaWtleS0+ZGF0YSA9IHJpZGF0YTsKKworCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjdHgpOworCisJLyoKKwkgKiBUaGUgbmV3IHhpZCBjb3VsZCBiZSBpbnZhbGlkIGlm IHRoZSB0cmFuc2FjdGlvbiB3aWxsIGJlIGFwcGxpZWQgYnkgdGhlCisJICogbGVhZGVyIGl0c2Vs ZiB3aGljaCBtZWFucyBhbGwgdGhlIGNoYW5nZXMgd2lsbCBiZSBjb21taXR0ZWQgYmVmb3JlCisJ ICogcHJvY2Vzc2luZyBuZXh0IHRyYW5zYWN0aW9uLiBJbiB0aGlzIGNhc2UsIHdlIG9ubHkgbmVl ZCB0byBjaGVjayBmb3IKKwkgKiBkZXBlbmRlbmNpZXMgb24gcHJlY2VkaW5nIHRyYW5zYWN0aW9u cywgdGhlcmUgaXMgbm8gbmVlZCB0byByZWNvcmQgYSBuZXcKKwkgKiBkZXBlbmRlbmN5IGZvciBz dWJzZXF1ZW50IHRyYW5zYWN0aW9ucyB0byB3YWl0IG9uLgorCSAqLworCWlmICghVHJhbnNhY3Rp b25JZElzVmFsaWQobmV3X2RlcGVuZGVkX3hpZCkpCisJeworCQlyaWVudHJ5ID0gcmVwbGljYV9p ZGVudGl0eV9sb29rdXAocmVwbGljYV9pZGVudGl0eV90YWJsZSwgcmlrZXkpOworCQlmcmVlX3Jl cGxpY2FfaWRlbnRpdHlfa2V5KHJpa2V5KTsKKworCQlpZiAocmllbnRyeSAmJiBoYXNfYWN0aXZl X2tleV9kZXBlbmRlbmN5KHJpZW50cnksIHRydWUpKQorCQl7CisJCQllbG9nKERFQlVHMSwgImZv dW5kIGNvbmZsaWN0aW5nIHJlcGxpY2EgaWRlbnRpdHkgY2hhbmdlIG9uIHRhYmxlICV1IGZyb20g JXUiLAorCQkJCSByZWxpZCwgcmllbnRyeS0+cmVtb3RlX3hpZCk7CisKKwkJCWFwcGVuZF94aWRf ZGVwZW5kZW5jeShyaWVudHJ5LT5yZW1vdGVfeGlkLCBkZXBlbmRzX29uX3hpZHMpOworCQl9CisK KwkJcmV0dXJuOworCX0KKworCS8qIFJlY29yZCBhIG5ldyBkZXBlbmRlbmN5IGZvciBzdWJzZXF1 ZW50IHRyYW5zYWN0aW9ucyB0byB3YWl0IG9uICovCisJcmllbnRyeSA9IHJlcGxpY2FfaWRlbnRp dHlfaW5zZXJ0KHJlcGxpY2FfaWRlbnRpdHlfdGFibGUsIHJpa2V5LAorCQkJCQkJCQkJICAmZm91 bmQpOworCisJLyoKKwkgKiBSZWxlYXNlIHRoZSBrZXkgYnVpbHQgdG8gc2VhcmNoIHRoZSBlbnRy eSwgaWYgdGhlIGVudHJ5IGFscmVhZHkgZXhpc3RzLgorCSAqLworCWlmIChmb3VuZCkKKwl7CisJ CWZyZWVfcmVwbGljYV9pZGVudGl0eV9rZXkocmlrZXkpOworCisJCS8qCisJCSAqIEFwcGVuZCB0 aGUgZGVwZW5kZW5jeSB0byB0aGUgbGlzdCBpZiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB3YXMg bm90CisJCSAqIHRoZSBsYXN0ZXN0IG9uZSB0byBtb2RpZnkgdGhlIGtleS4KKwkJICovCisJCWlm IChoYXNfYWN0aXZlX2tleV9kZXBlbmRlbmN5KHJpZW50cnksIGZhbHNlKSAmJgorCQkJIVRyYW5z YWN0aW9uSWRFcXVhbHMocmllbnRyeS0+cmVtb3RlX3hpZCwgbmV3X2RlcGVuZGVkX3hpZCkpCisJ CXsKKwkJCWVsb2coREVCVUcxLCAiZm91bmQgY29uZmxpY3RpbmcgcmVwbGljYSBpZGVudGl0eSBj aGFuZ2Ugb24gdGFibGUgJXUgZnJvbSAldSIsCisJCQkJIHJlbGlkLCByaWVudHJ5LT5yZW1vdGVf eGlkKTsKKworCQkJYXBwZW5kX3hpZF9kZXBlbmRlbmN5KHJpZW50cnktPnJlbW90ZV94aWQsIGRl cGVuZHNfb25feGlkcyk7CisJCX0KKwl9CisKKwkvKiBVcGRhdGUgdGhlIG5ldyBkZXBlbmRlZCB4 aWQgaW50byB0aGUgZW50cnkgKi8KKwlyaWVudHJ5LT5yZW1vdGVfeGlkID0gbmV3X2RlcGVuZGVk X3hpZDsKK30KKworLyoKKyAqIENoZWNrIGZvciBwcmVjZWRpbmcgdHJhbnNhY3Rpb25zIChvdGhl ciB0aGFuICdjdXJyZW50X3hpZCcpIHRoYXQgaW52b2x2ZQorICogaW5zZXJ0LCBkZWxldGUsIG9y IHVwZGF0ZSBvcGVyYXRpb25zIG9uIHRoZSBzcGVjaWZpZWQgdGFibGUsIGFuZCByZXR1cm4gdGhl bQorICogaW4gJ2RlcGVuZHNfb25feGlkcycuCisgKi8KK3N0YXRpYyB2b2lkCitmaW5kX2FsbF9k ZXBlbmRlbmNpZXNfb25fcmVsKExvZ2ljYWxSZXBSZWxJZCByZWxpZCwKKwkJCQkJCQkgVHJhbnNh Y3Rpb25JZCBuZXdfZGVwZW5kZWRfeGlkLAorCQkJCQkJCSBMaXN0ICoqZGVwZW5kc19vbl94aWRz KQoreworCXJlcGxpY2FfaWRlbnRpdHlfaXRlcmF0b3IgaTsKKwlSZXBsaWNhSWRlbnRpdHlFbnRy eSAqcmllbnRyeTsKKworCUFzc2VydChkZXBlbmRzX29uX3hpZHMpOworCisJcmVwbGljYV9pZGVu dGl0eV9zdGFydF9pdGVyYXRlKHJlcGxpY2FfaWRlbnRpdHlfdGFibGUsICZpKTsKKwl3aGlsZSAo KHJpZW50cnkgPSByZXBsaWNhX2lkZW50aXR5X2l0ZXJhdGUocmVwbGljYV9pZGVudGl0eV90YWJs ZSwgJmkpKSAhPSBOVUxMKQorCXsKKwkJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHJpZW50 cnktPnJlbW90ZV94aWQpKTsKKworCQlpZiAocmllbnRyeS0+a2V5ZGF0YS0+cmVsaWQgIT0gcmVs aWQpCisJCQljb250aW51ZTsKKworCQkvKiBTa2lwIGVudHJpZXMgdGhhdCBkbyBub3QgaGF2ZSBh IHZhbGlkIGFuZCB1bmNvbW1pdHRlZCB0cmFuc2FjdGlvbiAqLworCQlpZiAoIWhhc19hY3RpdmVf a2V5X2RlcGVuZGVuY3kocmllbnRyeSwgdHJ1ZSkpCisJCQljb250aW51ZTsKKworCQkvKiBTa2lw IHNlbGYtZGVwZW5kZW5jeSAqLworCQlpZiAoVHJhbnNhY3Rpb25JZEVxdWFscyhyaWVudHJ5LT5y ZW1vdGVfeGlkLCBuZXdfZGVwZW5kZWRfeGlkKSkKKwkJCWNvbnRpbnVlOworCisJCWVsb2coREVC VUcxLCAiZm91bmQgY29uZmxpY3RpbmcgY2hhbmdlIG9uIHRhYmxlICV1IGZyb20gJXUiLAorCQkJ IHJlbGlkLCByaWVudHJ5LT5yZW1vdGVfeGlkKTsKKworCQlhcHBlbmRfeGlkX2RlcGVuZGVuY3ko cmllbnRyeS0+cmVtb3RlX3hpZCwgZGVwZW5kc19vbl94aWRzKTsKKwl9Cit9CisKKy8qCisgKiBD aGVjayBmb3IgYW55IHByZWNlZGluZyB0cmFuc2FjdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGdpdmVu IHRhYmxlIGFuZCByZXR1cm5zCisgKiB0aGVtIGluICdkZXBlbmRzX29uX3hpZHMnLgorICoKKyAq IEFkZGl0aW9uYWxseSwgaWYgbmV3X2RlcGVuZGVkX3hpZCBpcyB2YWxpZCwgcmVjb3JkIHRoZSBj dXJyZW50IGNoYW5nZSBhbmQgaXRzCisgKiB0cmFuc2FjdGlvbiBhcyBhIG5ldyB0YWJsZS1sZXZl bCBkZXBlbmRlbmN5LCBhbGxvd2luZyBzdWJzZXF1ZW50IHRyYW5zYWN0aW9ucworICogdGhhdCBt b2RpZnkgdGhlIHNhbWUgdGFibGUgdG8gYmUgZGVwZW5kZW50IG9uIGl0LgorICovCitzdGF0aWMg dm9pZAorY2hlY2tfYW5kX3JlY29yZF9yZWxfZGVwZW5kZW5jeShMb2dpY2FsUmVwUmVsSWQgcmVs aWQsCisJCQkJCQkJCVRyYW5zYWN0aW9uSWQgbmV3X2RlcGVuZGVkX3hpZCwKKwkJCQkJCQkJTGlz dCAqKmRlcGVuZHNfb25feGlkcykKK3sKKwlMb2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlbGVudHJ5 OworCisJQXNzZXJ0KGRlcGVuZHNfb25feGlkcyk7CisKKwlmaW5kX2FsbF9kZXBlbmRlbmNpZXNf b25fcmVsKHJlbGlkLCBuZXdfZGVwZW5kZWRfeGlkLCBkZXBlbmRzX29uX3hpZHMpOworCisJLyog U2VhcmNoIGZvciBleGlzdGluZyBlbnRyeSAqLworCXJlbGVudHJ5ID0gbG9naWNhbHJlcF9nZXRf cmVsZW50cnkocmVsaWQpOworCisJLyogRmlyc3QgdGltZSBzZWVpbmcgdGhpcyByZWxhdGlvbiwg bm8gZW50cnkgZXhpc3RzLiAqLworCWlmICghcmVsZW50cnkpCisJCXJldHVybjsKKworCS8qCisJ ICogQ2hlY2sgd2hldGhlciBhbnkgcHJldmlvdXMgdHJhbnNhY3Rpb24gKG90aGVyIHRoYW4gdGhl IGN1cnJlbnQgb25lKSBoYXMKKwkgKiBhZmZlY3RlZCB0aGUgd2hvbGUgdGFibGUgZS5nLiwgdHJ1 bmNhdGUgb3Igc2NoZW1hIGNoYW5nZSBmcm9tIHB1Ymxpc2hlci4KKwkgKi8KKwlpZiAoaGFzX2Fj dGl2ZV9yZWxfZGVwZW5kZW5jeShyZWxlbnRyeSkgJiYKKwkJIVRyYW5zYWN0aW9uSWRFcXVhbHMo cmVsZW50cnktPmxhc3RfZGVwZW5kZWRfeGlkLCBuZXdfZGVwZW5kZWRfeGlkKSkKKwl7CisJCWVs b2coREVCVUcxLCAiZm91bmQgdGFibGUtd2lkZSBjaGFuZ2UgYWZmZWN0aW5nICV1IGZyb20gJXUi LAorCQkJIHJlbGlkLCByZWxlbnRyeS0+bGFzdF9kZXBlbmRlZF94aWQpOworCisJCWFwcGVuZF94 aWRfZGVwZW5kZW5jeShyZWxlbnRyeS0+bGFzdF9kZXBlbmRlZF94aWQsIGRlcGVuZHNfb25feGlk cyk7CisJfQorCisJaWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKG5ld19kZXBlbmRlZF94aWQpKQor CQlyZWxlbnRyeS0+bGFzdF9kZXBlbmRlZF94aWQgPSBuZXdfZGVwZW5kZWRfeGlkOworfQorCisv KgorICogQ2hlY2sgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgY2hhbmdlIGJ5 IGRldGVybWluaW5nIGlmIHRoZQorICogbW9kaWZpY2F0aW9uIGltcGFjdHMgdGhlIHNhbWUgcm93 IG9yIHRhYmxlIGFzIGFub3RoZXIgb25nb2luZyB0cmFuc2FjdGlvbi4KKyAqCisgKiBJZiBhIGRl cGVuZGVuY3kgb24gcHJlY2VkaW5nIHRyYW5zYWN0aW9ucyBpcyBmb3VuZCwgdGhpcyBmdW5jdGlv biBpbnN0cnVjdHMKKyAqIHRoZSBhcHByb3ByaWF0ZSB3b3JrZXIgKHBhcmFsbGVsIGFwcGx5IG9y IGxlYWRlcikgdG8gd2FpdCBmb3IgdGhvc2UKKyAqIHRyYW5zYWN0aW9ucyB0byBjb21wbGV0ZS4K KyAqCisgKiBTaW11bHRhbmVvdXNseSwgaWYgdGhlIGN1cnJlbnQgY2hhbmdlIHdpbGwgYmUgZGlz cGF0Y2hlZCB0byBhIHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXIgKGluZGljYXRlZCBieSBhIHZh bGlkIG5ld19kZXBlbmRlZF94aWQgYW5kIGEgbm9uLU5VTEwgd2luZm8pLCBpdAorICogcmVjb3Jk cyBhIG5ldyBkZXBlbmRlbmN5IHNvIHRoYXQgc3Vic2VxdWVudCB0cmFuc2FjdGlvbnMgd2lsbCB3 YWl0IG9uIGl0LgorICovCitzdGF0aWMgdm9pZAoraGFuZGxlX2RlcGVuZGVuY3lfb25fY2hhbmdl KExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbiwgU3RyaW5nSW5mbyBzLAorCQkJCQkJCVRyYW5zYWN0 aW9uSWQgbmV3X2RlcGVuZGVkX3hpZCwKKwkJCQkJCQlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAq d2luZm8pCit7CisJTG9naWNhbFJlcFJlbElkIHJlbGlkOworCUxvZ2ljYWxSZXBUdXBsZURhdGEg b2xkdHVwOworCUxvZ2ljYWxSZXBUdXBsZURhdGEgbmV3dHVwOworCUxvZ2ljYWxSZXBSZWxhdGlv biAqcmVsOworCUxpc3QJICAgKmRlcGVuZHNfb25feGlkcyA9IE5JTDsKKwlMaXN0CSAgICpyZW1v dGVfcmVsaWRzOworCWJvb2wJCWhhc19vbGR0dXAgPSBmYWxzZTsKKwlib29sCQljYXNjYWRlID0g ZmFsc2U7CisJYm9vbAkJcmVzdGFydF9zZXFzID0gZmFsc2U7CisKKwkvKgorCSAqIFBhcnNlIHRo ZSBjb25zdW1lIGRhdGEgdXNpbmcgYSBsb2NhbCBjb3B5IGluc3RlYWQgb2YgZGlyZWN0bHkgY29u c3VtaW5nCisJICogdGhlIGdpdmVuIHJlbW90ZSBjaGFuZ2UgYXMgdGhlIGNhbGxlciBtYXkgYWxz byByZWFkIHRoZSBkYXRhIGZyb20gdGhlCisJICogcmVtb3RlIG1lc3NhZ2UuCisJICovCisJU3Ry aW5nSW5mb0RhdGEgY2hhbmdlID0gKnM7CisKKwkvKiBPbmx5IHRoZSBsZWFkZXIgY2hlY2tzIGRl cGVuZGVuY2llcyBhbmQgc2NoZWR1bGVzIHRoZSBwYXJhbGxlbCBhcHBseSAqLworCWlmICghYW1f bGVhZGVyX2FwcGx5X3dvcmtlcigpKQorCQlyZXR1cm47CisKKwlpZiAoIVBhcmFsbGVsQXBwbHlD b250ZXh0KQorCXsKKwkJQXNzZXJ0KCFyZXBsaWNhX2lkZW50aXR5X3RhYmxlKTsKKworCQkvKgor CQkgKiBDcmVhdGUgYSBwZXJtYW5lbnQgbWVtb3J5IGNvbnRleHQgZm9yIGRlcGVuZGVuY3kgaW5m b3JtYXRpb24gdGhhdAorCQkgKiBwZXJzaXN0cyBhY3Jvc3MgdHJhbnNhY3Rpb25zLiBVc2luZyBh IGRlZGljYXRlZCBjb250ZXh0IG1ha2VzIG1lbW9yeQorCQkgKiBjb25zdW1wdGlvbiBtb3JlIHZp c2libGUgYW5kIGVhc2llciB0byB0cmFjaywgZXNwZWNpYWxseSB3aGVuCisJCSAqIGhhbmRsaW5n IGEgbGFyZ2UgbnVtYmVyIG9mIGNoYW5nZSBlbnRyaWVzIGZvciB0cmFuc2FjdGlvbnMgYmVpbmcK KwkJICogYXBwbGllZCBpbiBwYXJhbGxlbC4KKwkJICovCisJCVBhcmFsbGVsQXBwbHlDb250ZXh0 ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEFwcGx5Q29udGV4dCwKKwkJCQkJCQkJCQkJCQkgIlBh cmFsbGVsQXBwbHlDb250ZXh0IiwKKwkJCQkJCQkJCQkJCQkgQUxMT0NTRVRfREVGQVVMVF9TSVpF Uyk7CisKKwkJcmVwbGljYV9pZGVudGl0eV90YWJsZSA9IHJlcGxpY2FfaWRlbnRpdHlfY3JlYXRl KFBhcmFsbGVsQXBwbHlDb250ZXh0LAorCQkJCQkJCQkJCQkJCQkgUkVQTElDQV9JREVOVElUWV9J TklUSUFMX1NJWkUsCisJCQkJCQkJCQkJCQkJCSBOVUxMKTsKKwl9CisKKwlpZiAocmVwbGljYV9p ZGVudGl0eV90YWJsZS0+bWVtYmVycyA+PSBSRVBMSUNBX0lERU5USVRZX0NMRUFOVVBfVEhSRVNI T0xEKQorCQljbGVhbnVwX2NvbW1pdHRlZF9yZXBsaWNhX2lkZW50aXR5X2VudHJpZXMoKTsKKwor CXN3aXRjaCAoYWN0aW9uKQorCXsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfSU5TRVJUOgorCQkJ cmVsaWQgPSBsb2dpY2FscmVwX3JlYWRfaW5zZXJ0KCZjaGFuZ2UsICZuZXd0dXApOworCQkJY2hl Y2tfYW5kX3JlY29yZF9yaV9kZXBlbmRlbmN5KHJlbGlkLCAmbmV3dHVwLCBuZXdfZGVwZW5kZWRf eGlkLAorCQkJCQkJCQkJCSAgICZkZXBlbmRzX29uX3hpZHMpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBMT0dJQ0FMX1JFUF9NU0dfVVBEQVRFOgorCQkJcmVsaWQgPSBsb2dpY2FscmVwX3JlYWRfdXBk YXRlKCZjaGFuZ2UsICZoYXNfb2xkdHVwLCAmb2xkdHVwLAorCQkJCQkJCQkJCSAgICZuZXd0dXAp OworCisJCQlpZiAoaGFzX29sZHR1cCkKKwkJCXsKKwkJCQljaGVja19hbmRfcmVjb3JkX3JpX2Rl cGVuZGVuY3kocmVsaWQsICZvbGR0dXAsIG5ld19kZXBlbmRlZF94aWQsCisJCQkJCQkJCQkJCSAg ICZkZXBlbmRzX29uX3hpZHMpOworCisJCQkJLyoKKwkJCQkgKiBDb3B5IHVuY2hhbmdlZCBjb2x1 bW4gdmFsdWVzIGZyb20gdGhlIG9sZCB0dXBsZSB0byB0aGUgbmV3CisJCQkJICogdHVwbGUgZm9y IHJlcGxpY2EgaWRlbnRpdHkgZGVwZW5kZW5jeSBjaGVja2luZy4gU2VlCisJCQkJICogY2hlY2tf YW5kX3JlY29yZF9yaV9kZXBlbmRlbmN5KCkgZm9yIGRldGFpbHMuIEFsc28gYWRqdXN0IHRoZQor CQkJCSAqIGNvbHVtbiBzdGF0dXMgc28gdGhhdCBoYXNoIGNvbXBhcmlzb25zIG1hdGNoIGNvcnJl Y3RseS4KKwkJCQkgKi8KKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IG9sZHR1cC5uY29sczsgaSsr KQorCQkJCXsKKwkJCQkJaWYgKG5ld3R1cC5jb2xzdGF0dXNbaV0gPT0gTE9HSUNBTFJFUF9DT0xV TU5fVU5DSEFOR0VEKQorCQkJCQl7CisJCQkJCQluZXd0dXAuY29sdmFsdWVzW2ldID0gb2xkdHVw LmNvbHZhbHVlc1tpXTsKKwkJCQkJCW5ld3R1cC5jb2xzdGF0dXNbaV0gPSBvbGR0dXAuY29sc3Rh dHVzW2ldOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQljaGVja19hbmRfcmVjb3JkX3JpX2Rl cGVuZGVuY3kocmVsaWQsICZuZXd0dXAsIG5ld19kZXBlbmRlZF94aWQsCisJCQkJCQkJCQkJICAg JmRlcGVuZHNfb25feGlkcyk7CisJCQlicmVhazsKKworCQljYXNlIExPR0lDQUxfUkVQX01TR19E RUxFVEU6CisJCQlyZWxpZCA9IGxvZ2ljYWxyZXBfcmVhZF9kZWxldGUoJmNoYW5nZSwgJm9sZHR1 cCk7CisJCQljaGVja19hbmRfcmVjb3JkX3JpX2RlcGVuZGVuY3kocmVsaWQsICZvbGR0dXAsIG5l d19kZXBlbmRlZF94aWQsCisJCQkJCQkJCQkJICAgJmRlcGVuZHNfb25feGlkcyk7CisJCQlicmVh azsKKworCQljYXNlIExPR0lDQUxfUkVQX01TR19UUlVOQ0FURToKKwkJCXJlbW90ZV9yZWxpZHMg PSBsb2dpY2FscmVwX3JlYWRfdHJ1bmNhdGUoJmNoYW5nZSwgJmNhc2NhZGUsCisJCQkJCQkJCQkJ CQkJICZyZXN0YXJ0X3NlcXMpOworCisJCQkvKgorCQkJICogVHJ1bmNhdGUgYWZmZWN0cyBhbGwg cm93cyBpbiBhIHRhYmxlLCBzbyB0aGUgY3VycmVudAorCQkJICogdHJhbnNhY3Rpb24gc2hvdWxk IHdhaXQgZm9yIGFsbCBwcmVjZWRpbmcgdHJhbnNhY3Rpb25zIHRoYXQKKwkJCSAqIG1vZGlmaWVk IHRoZSBzYW1lIHRhYmxlLgorCQkJICovCisJCQlmb3JlYWNoX2ludCh0cnVuY2F0ZWRfcmVsaWQs IHJlbW90ZV9yZWxpZHMpCisJCQkJY2hlY2tfYW5kX3JlY29yZF9yZWxfZGVwZW5kZW5jeSh0cnVu Y2F0ZWRfcmVsaWQsCisJCQkJCQkJCQkJCQluZXdfZGVwZW5kZWRfeGlkLAorCQkJCQkJCQkJCQkJ JmRlcGVuZHNfb25feGlkcyk7CisKKwkJCWJyZWFrOworCisJCWNhc2UgTE9HSUNBTF9SRVBfTVNH X1JFTEFUSU9OOgorCQkJcmVsID0gbG9naWNhbHJlcF9yZWFkX3JlbCgmY2hhbmdlKTsKKworCQkJ LyoKKwkJCSAqIFRoZSByZXBsaWNhIGlkZW50aXR5IGtleSBjb3VsZCBiZSBjaGFuZ2VkLCBtYWtp bmcgZXhpc3RpbmcKKwkJCSAqIGVudHJpZXMgaW4gdGhlIHJlcGxpY2EgaWRlbnRpdHkgaW52YWxp ZC4gSW4gdGhpcyBjYXNlLCBwYXJhbGxlbAorCQkJICogYXBwbHkgaXMgbm90IGFsbG93ZWQgb24g dGhpcyBzcGVjaWZpYyB0YWJsZSB1bnRpbCBhbGwgcnVubmluZworCQkJICogdHJhbnNhY3Rpb25z IHRoYXQgbW9kaWZpZWQgaXQgaGF2ZSBmaW5pc2hlZC4KKwkJCSAqLworCQkJY2hlY2tfYW5kX3Jl Y29yZF9yZWxfZGVwZW5kZW5jeShyZWwtPnJlbW90ZWlkLCBuZXdfZGVwZW5kZWRfeGlkLAorCQkJ CQkJCQkJCQkmZGVwZW5kc19vbl94aWRzKTsKKwkJCWJyZWFrOworCisJCWNhc2UgTE9HSUNBTF9S RVBfTVNHX1RZUEU6CisJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX01FU1NBR0U6CisKKwkJCS8qCisJ CQkgKiBUeXBlIHVwZGF0ZXMgYWNjb21wYW55IHJlbGF0aW9uIHVwZGF0ZXMsIHNvIGRlcGVuZGVu Y2llcyBoYXZlCisJCQkgKiBhbHJlYWR5IGJlZW4gY2hlY2tlZCBkdXJpbmcgcmVsYXRpb24gdXBk YXRlcy4gTG9naWNhbCBtZXNzYWdlcworCQkJICogZG8gbm90IGNvbmZsaWN0IHdpdGggYW55IGNo YW5nZXMsIHNvIHRoZXkgY2FuIGJlIGlnbm9yZWQuCisJCQkgKi8KKwkJCWJyZWFrOworCisJCWRl ZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQorCisJLyogUmV0dXJuIGVh cmx5IGlmIHRoZSBjdXJyZW50IGNoYW5nZSBoYXMgbm8gZGVwZW5kZW5jaWVzLiAqLworCWlmICgh ZGVwZW5kc19vbl94aWRzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIHRoZSBsZWFkZXIgYXBw bGllcyB0aGUgdHJhbnNhY3Rpb24gaXRzZWxmLCBzdGFydCB3YWl0aW5nIGZvcgorCSAqIHRyYW5z YWN0aW9ucyB0aGF0IHRoZSBjdXJyZW50IGNoYW5nZSBkZXBlbmRzIG9uIHRvIGZpbmlzaC4gT3Ro ZXJ3aXNlLAorCSAqIGluc3RydWN0IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdG8gd2FpdCBm b3IgdGhlbS4KKwkgKi8KKwlpZiAod2luZm8gPT0gTlVMTCkKKwl7CisJCWZvcmVhY2hfeGlkKHhp ZCwgZGVwZW5kc19vbl94aWRzKQorCQkJcGFfd2FpdF9mb3JfZGVwZW5kZWRfdHJhbnNhY3Rpb24o eGlkKTsKKwl9CisJZWxzZQorCXsKKwkJc2VuZF9pbnRlcm5hbF9kZXBlbmRlbmNpZXMod2luZm8s IGRlcGVuZHNfb25feGlkcyk7CisJfQorfQorCiAvKgogICogRm9ybSB0aGUgb3JpZ2luIG5hbWUg Zm9yIHRoZSBzdWJzY3JpcHRpb24uCiAgKgpAQCAtNzkyLDcgKzE0ODUsMTAgQEAgaGFuZGxlX3N0 cmVhbWVkX3RyYW5zYWN0aW9uKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbiwgU3RyaW5nSW5mbyBz KQogCiAJLyogbm90IGluIHN0cmVhbWluZyBtb2RlICovCiAJaWYgKGFwcGx5X2FjdGlvbiA9PSBU UkFOU19MRUFERVJfQVBQTFkpCisJeworCQloYW5kbGVfZGVwZW5kZW5jeV9vbl9jaGFuZ2UoYWN0 aW9uLCBzLCBJbnZhbGlkVHJhbnNhY3Rpb25JZCwgd2luZm8pOwogCQlyZXR1cm4gZmFsc2U7CisJ fQogCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHN0cmVhbV94aWQpKTsKIApAQCAtMTI0 NCw2ICsxOTQwLDI5IEBAIGFwcGx5X2hhbmRsZV9iZWdpbihTdHJpbmdJbmZvIHMpCiAJcGdzdGF0 X3JlcG9ydF9hY3Rpdml0eShTVEFURV9SVU5OSU5HLCBOVUxMKTsKIH0KIAorLyoKKyAqIFNlbmQg YW4gSU5URVJOQUxfREVQRU5ERU5DWSBtZXNzYWdlIHRvIGEgcGFyYWxsZWwgYXBwbHkgd29ya2Vy LgorICovCitzdGF0aWMgdm9pZAorc2VuZF9pbnRlcm5hbF9kZXBlbmRlbmNpZXMoUGFyYWxsZWxB cHBseVdvcmtlckluZm8gKndpbmZvLCBMaXN0ICpkZXBlbmRzX29uX3hpZHMpCit7CisJU3RyaW5n SW5mb0RhdGEgZGVwZW5kZW5jaWVzOworCisJaW5pdFN0cmluZ0luZm8oJmRlcGVuZGVuY2llcyk7 CisKKwlwcV9zZW5kYnl0ZSgmZGVwZW5kZW5jaWVzLCBMT0dJQ0FMX1JFUF9NU0dfSU5URVJOQUxf TUVTU0FHRSk7CisJcHFfc2VuZGJ5dGUoJmRlcGVuZGVuY2llcywgUEFfTVNHX1hBQ1RfREVQRU5E RU5DWSk7CisJcHFfc2VuZGludDMyKCZkZXBlbmRlbmNpZXMsIGxpc3RfbGVuZ3RoKGRlcGVuZHNf b25feGlkcykpOworCisJZm9yZWFjaF94aWQoeGlkLCBkZXBlbmRzX29uX3hpZHMpCisJCXBxX3Nl bmRpbnQzMigmZGVwZW5kZW5jaWVzLCB4aWQpOworCisJaWYgKHBhX3NlbmRfZGF0YSh3aW5mbywg ZGVwZW5kZW5jaWVzLmxlbiwgZGVwZW5kZW5jaWVzLmRhdGEpKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCWVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJ CQkJZXJybXNnKCJjb3VsZCBub3Qgc2VuZCBkYXRhIHRvIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9u IHBhcmFsbGVsIGFwcGx5IHdvcmtlciIpKTsKK30KKwogLyoKICAqIEhhbmRsZSBDT01NSVQgbWVz c2FnZS4KICAqCkBAIC0xNzcxLDcgKzI0OTAsNyBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0 KFN0cmluZ0luZm8gcykKIAogCS8qIFRyeSB0byBhbGxvY2F0ZSBhIHdvcmtlciBmb3IgdGhlIHN0 cmVhbWluZyB0cmFuc2FjdGlvbi4gKi8KIAlpZiAoZmlyc3Rfc2VnbWVudCkKLQkJcGFfYWxsb2Nh dGVfd29ya2VyKHN0cmVhbV94aWQpOworCQlwYV9hbGxvY2F0ZV93b3JrZXIoc3RyZWFtX3hpZCwg dHJ1ZSk7CiAKIAlhcHBseV9hY3Rpb24gPSBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKHN0 cmVhbV94aWQsICZ3aW5mbyk7CiAKQEAgLTM5ODAsNiArNDY5OSw3IEBAIHN0b3JlX2ZsdXNoX3Bv c2l0aW9uKFhMb2dSZWNQdHIgcmVtb3RlX2xzbiwgWExvZ1JlY1B0ciBsb2NhbF9sc24pCiAJZmx1 c2hwb3MgPSBwYWxsb2Nfb2JqZWN0KEZsdXNoUG9zaXRpb24pOwogCWZsdXNocG9zLT5sb2NhbF9l bmQgPSBsb2NhbF9sc247CiAJZmx1c2hwb3MtPnJlbW90ZV9lbmQgPSByZW1vdGVfbHNuOworCWZs dXNocG9zLT5wYV9yZW1vdGVfeGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAKIAlkbGlzdF9w dXNoX3RhaWwoJmxzbl9tYXBwaW5nLCAmZmx1c2hwb3MtPm5vZGUpOwogCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhBcHBseU1lc3NhZ2VDb250ZXh0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL2xvZ2ljYWxyZWxhdGlvbi5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9n aWNhbHJlbGF0aW9uLmgKaW5kZXggZWZlMGY5ZDYwMzEuLjA5ODkwY2VmOGQ0IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaAorKysgYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaApAQCAtMzcsNiArMzcsMTQgQEAgdHlw ZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFJlbE1hcEVudHJ5CiAJLyogU3luYyBzdGF0ZS4gKi8KIAlj aGFyCQlzdGF0ZTsKIAlYTG9nUmVjUHRyCXN0YXRlbHNuOworCisJLyoKKwkgKiBUaGUgbGFzdCBy ZW1vdGUgdHJhbnNhY3Rpb24gdGhhdCBtb2RpZmllZCB0aGUgcmVsYXRpb24ncyBzY2hlbWEgb3IK KwkgKiB0cnVuY2F0ZWQgdGhlIHJlbGF0aW9uLiBVc2VkIGluIGRlcGVuZGVuY3kgdHJhY2tpbmcg dG8gZW5zdXJlIHN1YnNlcXVlbnQKKwkgKiB0cmFuc2FjdGlvbnMgbW9kaWZ5aW5nIHRoZSBzYW1l IHRhYmxlIHdhaXQgZm9yIHRoaXMgdHJhbnNhY3Rpb24gdG8gZmluaXNoCisJICogYXBwbHlpbmcg KHNlZSBjaGVja19kZXBlbmRlbmN5X29uX3JlbCkuCisJICovCisJVHJhbnNhY3Rpb25JZCBsYXN0 X2RlcGVuZGVkX3hpZDsKIH0gTG9naWNhbFJlcFJlbE1hcEVudHJ5OwogCiBleHRlcm4gdm9pZCBs b2dpY2FscmVwX3JlbG1hcF91cGRhdGUoTG9naWNhbFJlcFJlbGF0aW9uICpyZW1vdGVyZWwpOwpA QCAtNTAsNSArNTgsNiBAQCBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3JlbF9jbG9zZShMb2dpY2Fs UmVwUmVsTWFwRW50cnkgKnJlbCwKIAkJCQkJCQkJIExPQ0tNT0RFIGxvY2ttb2RlKTsKIGV4dGVy biBib29sIElzSW5kZXhVc2FibGVGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9uIGlkeHJl bCwgQXR0ck1hcCAqYXR0cm1hcCk7CiBleHRlcm4gT2lkCUdldFJlbGF0aW9uSWRlbnRpdHlPclBL KFJlbGF0aW9uIHJlbCk7CitleHRlcm4gTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpsb2dpY2FscmVw X2dldF9yZWxlbnRyeShMb2dpY2FsUmVwUmVsSWQgcmVtb3RlaWQpOwogCiAjZW5kaWYJCQkJCQkJ LyogTE9HSUNBTFJFTEFUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3dvcmtlcl9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2lu dGVybmFsLmgKaW5kZXggNDNkY2FlNDNhNjIuLjNjODhkOWUxMDI3IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaApAQCAtMjM5LDYgKzIzOSw4IEBAIHR5cGVkZWYg c3RydWN0IFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvCiAJICovCiAJYm9vbAkJaW5fdXNlOwogCisJ Ym9vbAkJc3RyZWFtX3R4bjsKKwogCVBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKnNoYXJlZDsK IH0gUGFyYWxsZWxBcHBseVdvcmtlckluZm87CiAKQEAgLTM1MCw4ICszNTIsOSBAQCBleHRlcm4g dm9pZCBhcHBseV9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOwogZXh0ZXJuIHZvaWQgc2V0X2Fw cGx5X2Vycm9yX2NvbnRleHRfb3JpZ2luKGNoYXIgKm9yaWdpbm5hbWUpOwogCiAvKiBQYXJhbGxl bCBhcHBseSB3b3JrZXIgc2V0dXAgYW5kIGludGVyYWN0aW9ucyAqLwotZXh0ZXJuIHZvaWQgcGFf YWxsb2NhdGVfd29ya2VyKFRyYW5zYWN0aW9uSWQgeGlkKTsKK2V4dGVybiB2b2lkIHBhX2FsbG9j YXRlX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBzdHJlYW1fdHhuKTsKIGV4dGVybiBQ YXJhbGxlbEFwcGx5V29ya2VySW5mbyAqcGFfZmluZF93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQp OworZXh0ZXJuIFhMb2dSZWNQdHIgcGFfZ2V0X2xhc3RfY29tbWl0X2VuZChUcmFuc2FjdGlvbklk IHhpZCwgYm9vbCAqc2tpcHBlZF93cml0ZSk7CiBleHRlcm4gdm9pZCBwYV9kZXRhY2hfYWxsX2Vy cm9yX21xKHZvaWQpOwogCiBleHRlcm4gdm9pZCBhcHBseV9oYW5kbGVfaW50ZXJuYWxfbWVzc2Fn ZShTdHJpbmdJbmZvIHMpOwpAQCAtMzgyLDYgKzM4NSw3IEBAIGV4dGVybiB2b2lkIHBhX2RlY3Jf YW5kX3dhaXRfc3RyZWFtX2Jsb2NrKHZvaWQpOwogCiBleHRlcm4gdm9pZCBwYV94YWN0X2Zpbmlz aChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sCiAJCQkJCQkgICBYTG9nUmVjUHRyIHJl bW90ZV9sc24pOworZXh0ZXJuIGJvb2wgcGFfdHJhbnNhY3Rpb25fY29tbWl0dGVkKFRyYW5zYWN0 aW9uSWQgeGlkKTsKIAogZXh0ZXJuIHZvaWQgcGFfd2FpdF9mb3JfZGVwZW5kZWRfdHJhbnNhY3Rp b24oVHJhbnNhY3Rpb25JZCB4aWQpOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRp b24vbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQKaW5kZXgg ZTcxZTk1YzYyOTcuLmZkYzA0ZDkxZjQxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRp b24vbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkCkBA IC00OCw2ICs0OCw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAzNl9zZXF1ZW5jZXMucGwnLAog ICAgICAgJ3QvMDM3X2V4Y2VwdC5wbCcsCiAgICAgICAndC8wMzhfd2Fsc25kX3NodXRkb3duX3Rp bWVvdXQucGwnLAorICAgICAgJ3QvMDM5X3Jvd19maWx0ZXJfdG9hc3RfcmkucGwnLAogICAgICAg J3QvMTAwX2J1Z3MucGwnLAogICAgIF0sCiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cmlu ZGV4IGMwMGMzNDY1MmZlLi4wN2QyNDZiZDk1NyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK QEAgLTI2NjksNiArMjY2OSw4IEBAIFJlcGxPcmlnaW5YYWN0U3RhdGUKIFJlcGxhY2VWYXJzRnJv bVRhcmdldExpc3RfY29udGV4dAogUmVwbGFjZVZhcnNOb01hdGNoT3B0aW9uCiBSZXBsYWNlV3Jh cE9wdGlvbgorUmVwbGljYUlkZW50aXR5RW50cnkKK1JlcGxpY2FJZGVudGl0eUtleQogUmVwbGlj YUlkZW50aXR5U3RtdAogUmVwbGljYXRpb25LaW5kCiBSZXBsaWNhdGlvblNsb3QKQEAgLTI2ODAs NiArMjY4Miw3IEBAIFJlcGxpY2F0aW9uU2xvdFBlcnNpc3RlbnREYXRhCiBSZXBsaWNhdGlvblN0 YXRlCiBSZXBsaWNhdGlvblN0YXRlQ3RsCiBSZXBsaWNhdGlvblN0YXRlT25EaXNrCityZXBsaWNh X2lkZW50aXR5X2hhc2gKIFJlc1RhcmdldAogUmVzZXJ2b2lyU3RhdGUKIFJlc2Vydm9pclN0YXRl RGF0YQotLSAKMi40My4wCgo= --_010_TY4PR01MB1771875A7A64B139EF8C8D05C94E62TY4PR01MB17718jp_ Content-Type: application/octet-stream; name="v20-0002-Introduce-internal-messages-to-track-dependencie.patch" Content-Description: v20-0002-Introduce-internal-messages-to-track-dependencie.patch Content-Disposition: attachment; filename="v20-0002-Introduce-internal-messages-to-track-dependencie.patch"; size=13001; creation-date="Mon, 15 Jun 2026 11:19:06 GMT"; modification-date="Mon, 15 Jun 2026 11:20:12 GMT" Content-Transfer-Encoding: base64 RnJvbSBlZjlhOGM3Y2UxMTYwMTg5ZjljNDc1MzVhYjhkZTZlZGZlYWRjODEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaaGlqaWUgSG91IDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBXZWQsIDI5IEFwciAyMDI2IDE2OjQxOjQ0ICswODAwClN1YmplY3Q6IFtQQVRDSCB2MjAg Mi80XSBJbnRyb2R1Y2UgaW50ZXJuYWwgbWVzc2FnZXMgdG8gdHJhY2sgZGVwZW5kZW5jaWVzCgpU aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc2V0IG9mIGludGVybmFsIHdvcmtlciBtZXNzYWdl IHR5cGVzIChzZWUKUEFXb3JrZXJNc2dUeXBlKS4gVGhlc2UgdHlwZXMgb2YgbWVzc2FnZXMgYXJl IGdlbmVyYXRlZCBieSBhIGxlYWRlciB3b3JrZXIKYW5kIHNlbnQgdG8gcGFyYWxsZWwgYXBwbHkg d29ya2VycyBiYXNlZCBvbiB0aGUgbmVlZHMuIEZvciBub3csIHR3byB0eXBlcyBvZgptZXNzYWdl cyBleGlzdDogUEFfTVNHX1hBQ1RfREVQRU5ERU5DWSBhbmQgUEFfTVNHX1JFTE1BUC4KClBBX01T R19YQUNUX0RFUEVOREVOQ1kgZW5zdXJlcyB0aGF0IGRlcGVuZGVudCB0cmFuc2FjdGlvbnMgYXJl CmNvbW1pdHRlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSXQgaGFzIGEgbGlzdCBvZiB0cmFuc2Fj dGlvbiBJRHMgdGhhdCBwYXJhbGxlbAp3b3JrZXJzIG11c3Qgd2FpdCBmb3IuIFRoaXMgdHlwZSBv ZiBtZXNzYWdlIGlzIGdlbmVyYXRlZCB3aGVuIHRoZSBsZWFkZXIKZGV0ZWN0cyBhIGRlcGVuZGVu Y3kgYmV0d2VlbiB0aGUgY3VycmVudCBhbmQgb3RoZXIgdHJhbnNhY3Rpb25zLCBvciBqdXN0IGJl Zm9yZQp0aGUgQ09NTUlUIG1lc3NhZ2UuIFRoZSBsYXR0ZXIgb25lIGlzIHVzZWQgdG8gcHJlc2Vy dmUgdGhlIGNvbW1pdCBvcmRlcmluZwpiZXR3ZWVuIHRoZSBwdWJsaXNoZXIgYW5kIHRoZSBzdWJz Y3JpYmVyLgoKUEFfTVNHX1JFTE1BUCBpcyB1c2VkIHRvIHN5bmNocm9uaXplIHRoZSByZW1vdGUg cmVsYXRpb24KaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgbGVhZGVyIGFuZCBwYXJhbGxlbCB3b3Jr ZXJzLiBJdCBoYXMgYSBsaXN0IG9mIHJlbGF0aW9ucwp0aGF0IHRoZSBsZWFkZXIgYWxyZWFkeSBr bm93cywgYW5kIHBhcmFsbGVsIHdvcmtlcnMgYWxzbyB1cGRhdGUgdGhlIHJlbG1hcCBpbgpyZXNw b25zZSB0byB0aGUgbWVzc2FnZS4gVGhpcyB0eXBlIG9mIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIHdo ZW4gdGhlIGxlYWRlcgphbGxvY2F0ZXMgYSBuZXcgcGFyYWxsZWwgd29ya2VyIHRvIHRoZSB0cmFu c2FjdGlvbiwgb3Igd2hlbiB0aGUgcHVibGlzaGVyIHNlbmRzCmFkZGl0aW9uYWwgUkVMQVRJT04g bWVzc2FnZXMuIFRoaXMgc3luY2hyb25pemF0aW9uIGlzIG5lY2Vzc2FyeSBmb3IgcGFyYWxsZWwK YXBwbHkgd29ya2VycyB0byBtYXAgbG9jYWwgcmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0aW9ucyB0 byB0aGVpciByZW1vdGUKY291bnRlcnBhcnRzIGR1cmluZyBjaGFuZ2UgYXBwbGljYXRpb24uIFNp bmNlIHRoZSB3YWxzZW5kZXIgZG9lcyBub3Qgc2VuZCByZW1vdGUKcmVsYXRpb24gaW5mb3JtYXRp b24gd2l0aCBldmVyeSB0cmFuc2FjdGlvbiwgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBtYXkg bm90CmhhdmUgdXAtdG8tZGF0ZSByZWxhdGlvbiBpbmZvIHVubGVzcyBzeW5jaHJvbml6ZWQgYnkg dGhlIGxlYWRlci4KCkluIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9uIHByb3RvY29sLCB0aGUgYWJv dmUgbWVzc2FnZXMgYXJlIGVuY2Fwc3VsYXRlZCB3aXRoaW4KdGhlIExPR0lDQUxfUkVQX01TR19J TlRFUk5BTF9NRVNTQUdFIHR5cGUuIExhdGVyIHBhdGNoZXMgd2lsbCB1c2UgYSB1bmlmb3JtCmZv cm1hdCAoTE9HSUNBTF9SRVBfTVNHX0lOVEVSTkFMX01FU1NBR0UgKyBQQVdvcmtlck1zZ1R5cGUg KyBpbnRlcm5hbCBkYXRhKSBmb3IKc2VuZGluZyB0byBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIG9y IHNlcmlhbGl6aW5nIHRvIGRpc2suCgpBdXRob3I6IFpoaWppZSBIb3UgPGhvdXpqLmZuc3RAZnVq aXRzdS5jb20+CkF1dGhvcjogSGF5YXRvIEt1cm9kYSA8a3Vyb2RhLmhheWF0b0BmdWppdHN1LmNv bT4KLS0tCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMgfCAx ODcgKysrKysrKysrKysrKysrKy0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3By b3RvLmMgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3Jr ZXIuYyAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5o ICAgICAgICB8ICAgOCArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwu aCAgICAgfCAgMTcgKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAg ICAgICB8ICAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDIwMiBpbnNlcnRpb25zKCspLCAxNyBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2Fw cGx5cGFyYWxsZWx3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBw bHlwYXJhbGxlbHdvcmtlci5jCmluZGV4IDVlYjA2NzllODUwLi5lZmRlOTE4MWEzNCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2Vy LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29y a2VyLmMKQEAgLTc3Miw2ICs3NzIsNzMgQEAgUHJvY2Vzc1BhcmFsbGVsQXBwbHlJbnRlcnJ1cHRz KHZvaWQpCiAJfQogfQogCisvKgorICogSGFuZGxlIGludGVybmFsIGRlcGVuZGVuY3kgaW5mb3Jt YXRpb24uCisgKgorICogV2FpdCBmb3IgYWxsIHRyYW5zYWN0aW9ucyBsaXN0ZWQgaW4gdGhlIG1l c3NhZ2UgdG8gY29tbWl0LgorICovCitzdGF0aWMgdm9pZAorYXBwbHlfaGFuZGxlX2ludGVybmFs X2RlcGVuZGVuY3koU3RyaW5nSW5mbyBzKQoreworCWludAkJCW54aWRzID0gcHFfZ2V0bXNnaW50 KHMsIDQpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBueGlkczsgaSsrKQorCXsKKwkJVHJhbnNh Y3Rpb25JZCB4aWQgPSBwcV9nZXRtc2dpbnQocywgNCk7CisKKwkJcGFfd2FpdF9mb3JfZGVwZW5k ZWRfdHJhbnNhY3Rpb24oeGlkKTsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGUgaW50ZXJuYWwgcmVs YXRpb24gaW5mb3JtYXRpb24uCisgKgorICogVXBkYXRlIGFsbCByZWxhdGlvbiBkZXRhaWxzIGlu IHRoZSByZWxhdGlvbiBtYXAgY2FjaGUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVf aW50ZXJuYWxfcmVsYXRpb24oU3RyaW5nSW5mbyBzKQoreworCWludAkJCW5yZWxzID0gcHFfZ2V0 bXNnaW50KHMsIDQpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBucmVsczsgaSsrKQorCXsKKwkJ TG9naWNhbFJlcFJlbGF0aW9uICpyZWwgPSBsb2dpY2FscmVwX3JlYWRfcmVsKHMpOworCisJCWxv Z2ljYWxyZXBfcmVsbWFwX3VwZGF0ZShyZWwpOworCisJCS8qIEFsc28gcmVzZXQgYWxsIGVudHJp ZXMgaW4gdGhlIHBhcnRpdGlvbiBtYXAgdGhhdCByZWZlciB0byByZW1vdGVyZWwuICovCisJCWxv Z2ljYWxyZXBfcGFydG1hcF9yZXNldF9yZWxtYXAocmVsKTsKKworCQllbG9nKERFQlVHMSwgInBh cmFsbGVsIGFwcGx5IHdvcmtlciBpbml0IHJlbG1hcCBmb3IgJXMiLAorCQkJIHJlbC0+cmVsbmFt ZSk7CisJfQorfQorCisvKgorICogSGFuZGxlIGFuIGludGVybmFsIG1lc3NhZ2UgZ2VuZXJhdGVk IGJ5IHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLgorICovCit2b2lkCithcHBseV9oYW5kbGVfaW50 ZXJuYWxfbWVzc2FnZShTdHJpbmdJbmZvIHMpCit7CisJUEFXb3JrZXJNc2dUeXBlIGFjdGlvbiA9 IHBxX2dldG1zZ2J5dGUocyk7CisKKwlBc3NlcnQoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkp OworCisJc3dpdGNoIChhY3Rpb24pCisJeworCQljYXNlIFBBX01TR19YQUNUX0RFUEVOREVOQ1k6 CisJCQlhcHBseV9oYW5kbGVfaW50ZXJuYWxfZGVwZW5kZW5jeShzKTsKKwkJCWJyZWFrOworCQlj YXNlIFBBX01TR19SRUxNQVA6CisJCQlhcHBseV9oYW5kbGVfaW50ZXJuYWxfcmVsYXRpb24ocyk7 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2Rl KEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCB3b3Jr ZXIgaW50ZXJuYWwgbWVzc2FnZSB0eXBlIFwiPz8/ICglZClcIiIsIGFjdGlvbikpKTsKKwl9Cit9 CisKIC8qIFBhcmFsbGVsIGFwcGx5IHdvcmtlciBtYWluIGxvb3AuICovCiBzdGF0aWMgdm9pZAog TG9naWNhbFBhcmFsbGVsQXBwbHlMb29wKHNobV9tcV9oYW5kbGUgKm1xaCkKQEAgLTc4MCw2ICs4 NDcsMTQgQEAgTG9naWNhbFBhcmFsbGVsQXBwbHlMb29wKHNobV9tcV9oYW5kbGUgKm1xaCkKIAlF cnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dCA9 IEN1cnJlbnRNZW1vcnlDb250ZXh0OwogCisJLyoKKwkgKiBFbnN1cmUgTE9HSUNBTF9SRVBfTVNH X0lOVEVSTkFMX01FU1NBR0UgZG9lcyBub3QgY29uZmxpY3Qgd2l0aAorCSAqIFBxUmVwbE1zZ19X QUxEYXRhICgnZCcpLCBhcyBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIG1heSByZWNlaXZlIGJvdGgg dHlwZXMKKwkgKiBvZiBtZXNzYWdlcy4KKwkgKi8KKwlTdGF0aWNBc3NlcnREZWNsKExPR0lDQUxf UkVQX01TR19JTlRFUk5BTF9NRVNTQUdFICE9IFBxUmVwbE1zZ19XQUxEYXRhLAorCQkJCQkgIkxP R0lDQUxfUkVQX01TR19JTlRFUk5BTF9NRVNTQUdFIGNvbmZsaWN0cyB3aXRoIFBxUmVwbE1zZ19X QUxEYXRhIik7CisKIAkvKgogCSAqIEluaXQgdGhlIEFwcGx5TWVzc2FnZUNvbnRleHQgd2hpY2gg d2UgY2xlYW4gdXAgYWZ0ZXIgZWFjaCByZXBsaWNhdGlvbgogCSAqIHByb3RvY29sIG1lc3NhZ2Uu CkBAIC04MTgsMjYgKzg5Myw0NiBAQCBMb2dpY2FsUGFyYWxsZWxBcHBseUxvb3Aoc2htX21xX2hh bmRsZSAqbXFoKQogCiAJCQlpbml0UmVhZE9ubHlTdHJpbmdJbmZvKCZzLCBkYXRhLCBsZW4pOwog Ci0JCQkvKgotCQkJICogVGhlIGZpcnN0IGJ5dGUgb2YgbWVzc2FnZXMgc2VudCBmcm9tIGxlYWRl ciBhcHBseSB3b3JrZXIgdG8KLQkJCSAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgY2FuIG9ubHkg YmUgUHFSZXBsTXNnX1dBTERhdGEuCi0JCQkgKi8KIAkJCWMgPSBwcV9nZXRtc2dieXRlKCZzKTsK LQkJCWlmIChjICE9IFBxUmVwbE1zZ19XQUxEYXRhKQotCQkJCWVsb2coRVJST1IsICJ1bmV4cGVj dGVkIG1lc3NhZ2UgXCIlY1wiIiwgYyk7CiAKLQkJCS8qCi0JCQkgKiBJZ25vcmUgc3RhdGlzdGlj cyBmaWVsZHMgdGhhdCBoYXZlIGJlZW4gdXBkYXRlZCBieSB0aGUgbGVhZGVyCi0JCQkgKiBhcHBs eSB3b3JrZXIuCi0JCQkgKgotCQkJICogWFhYIFdlIGNhbiBhdm9pZCBzZW5kaW5nIHRoZSBzdGF0 aXN0aWNzIGZpZWxkcyBmcm9tIHRoZSBsZWFkZXIKLQkJCSAqIGFwcGx5IHdvcmtlciBidXQgZm9y IHRoYXQsIGl0IG5lZWRzIHRvIHJlYnVpbGQgdGhlIGVudGlyZQotCQkJICogbWVzc2FnZSBieSBy ZW1vdmluZyB0aGVzZSBmaWVsZHMgd2hpY2ggY291bGQgYmUgbW9yZSB3b3JrIHRoYW4KLQkJCSAq IHNpbXBseSBpZ25vcmluZyB0aGVzZSBmaWVsZHMgaW4gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtl ci4KLQkJCSAqLwotCQkJcy5jdXJzb3IgKz0gU0laRV9TVEFUU19NRVNTQUdFOworCQkJaWYgKGMg PT0gUHFSZXBsTXNnX1dBTERhdGEpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBJZ25vcmUgc3RhdGlz dGljcyBmaWVsZHMgdGhhdCBoYXZlIGJlZW4gdXBkYXRlZCBieSB0aGUKKwkJCQkgKiBsZWFkZXIg YXBwbHkgd29ya2VyLgorCQkJCSAqCisJCQkJICogWFhYIFdlIGNhbiBhdm9pZCBzZW5kaW5nIHRo ZSBzdGF0aXN0aWNzIGZpZWxkcyBmcm9tIHRoZQorCQkJCSAqIGxlYWRlciBhcHBseSB3b3JrZXIg YnV0IGZvciB0aGF0LCBpdCBuZWVkcyB0byByZWJ1aWxkIHRoZQorCQkJCSAqIGVudGlyZSBtZXNz YWdlIGJ5IHJlbW92aW5nIHRoZXNlIGZpZWxkcyB3aGljaCBjb3VsZCBiZSBtb3JlCisJCQkJICog d29yayB0aGFuIHNpbXBseSBpZ25vcmluZyB0aGVzZSBmaWVsZHMgaW4gdGhlIHBhcmFsbGVsIGFw cGx5CisJCQkJICogd29ya2VyLgorCQkJCSAqLworCQkJCXMuY3Vyc29yICs9IFNJWkVfU1RBVFNf TUVTU0FHRTsKKworCQkJCWFwcGx5X2Rpc3BhdGNoKCZzKTsKKwkJCX0KKwkJCWVsc2UgaWYgKGMg PT0gTE9HSUNBTF9SRVBfTVNHX0lOVEVSTkFMX01FU1NBR0UpCisJCQl7CisJCQkJLyoKKwkJCQkg KiBSZXdpbmQgdGhlIGN1cnNvciBzbyB0aGF0IGFwcGx5X2Rpc3BhdGNoIGNhbiByZS1yZWFkIHRo ZQorCQkJCSAqIGZpcnN0IGJ5dGUgKExPR0lDQUxfUkVQX01TR19JTlRFUk5BTF9NRVNTQUdFKSB0 byBjb3JyZWN0bHkKKwkJCQkgKiBoYW5kbGUgdGhlIGludGVybmFsIG1lc3NhZ2UuIEFsdGVybmF0 aXZlbHksIHdlIGNvdWxkIGNhbGwKKwkJCQkgKiBhcHBseV9oYW5kbGVfaW50ZXJuYWxfbWVzc2Fn ZSBkaXJlY3RseSwgYnV0IHVzaW5nCisJCQkJICogYXBwbHlfZGlzcGF0Y2ggdW5pZm9ybWx5IGFj cm9zcyBhbGwgbWVzc2FnZSB0eXBlcyBpcyBjbGVhbmVyCisJCQkJICogYW5kIG1vcmUgY29uc2lz dGVudC4KKwkJCQkgKi8KKwkJCQlzLmN1cnNvci0tOwogCi0JCQlhcHBseV9kaXNwYXRjaCgmcyk7 CisJCQkJYXBwbHlfZGlzcGF0Y2goJnMpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJ CQkJICogVGhlIGZpcnN0IGJ5dGUgb2YgbWVzc2FnZXMgc2VudCBmcm9tIGxlYWRlciBhcHBseSB3 b3JrZXIgdG8KKwkJCQkgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGNhbiBvbmx5IGJlICd3JyBv ciAnaScuCisJCQkJICovCisJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgbWVzc2FnZSBcIiVj XCIiLCBjKTsKKwkJCX0KIAkJfQogCQllbHNlIGlmIChzaG1xX3JlcyA9PSBTSE1fTVFfV09VTERf QkxPQ0spCiAJCXsKQEAgLTE3NDQsMyArMTgzOSw2MSBAQCBwYV9hdHRhY2hfcGFyYWxsZWxpemVk X3R4bl9oYXNoKGRzYV9oYW5kbGUgKnBhX2RzYV9oYW5kbGUsCiAKIAlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY3R4KTsKIH0KKworLyoKKyAqIFdhaXQgZm9yIHRoZSBnaXZlbiByZW1vdGUgdHJh bnNhY3Rpb24gdG8gZmluaXNoIGFwcGx5aW5nIGJ5IGEgcGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtl ci4KKyAqCisgKiBCb3RoIGxlYWRlciBhbmQgcGFyYWxsZWwgYXBwbHkgd29ya2VycyBjYW4gY2Fs bCB0aGlzIGZ1bmN0aW9uIHRvIHdhaXQgZm9yIGEKKyAqIHBhcmFsbGVsaXplZCB0cmFuc2FjdGlv biB0byBmaW5pc2guCisgKi8KK3ZvaWQKK3BhX3dhaXRfZm9yX2RlcGVuZGVkX3RyYW5zYWN0aW9u KFRyYW5zYWN0aW9uSWQgeGlkKQoreworCS8qCisJICogUXVpY2sgZXhpdCBpZiBwYXJhbGxlbGl6 ZWRfdHhucyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiBUaGlzIGNhbgorCSAqIGhhcHBl biB3aGVuIHRoZSBsZWFkZXIgd29ya2VyIGNhbGxzIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGFueSBw YXJhbGxlbAorCSAqIGFwcGx5IHdvcmtlcnMgaGF2ZSBiZWVuIGxhdW5jaGVkLgorCSAqLworCWlm ICghcGFyYWxsZWxpemVkX3R4bnMpCisJCXJldHVybjsKKworCWVsb2coREVCVUcxLCAid2FpdCBm b3IgZGVwZW5kZWQgeGlkICV1IiwgeGlkKTsKKworCWZvciAoOzspCisJeworCQlQYXJhbGxlbGl6 ZWRUeG5FbnRyeSAqdHhuX2VudHJ5OworCisJCXR4bl9lbnRyeSA9IGRzaGFzaF9maW5kKHBhcmFs bGVsaXplZF90eG5zLCAmeGlkLCBmYWxzZSk7CisKKwkJLyogVGhlIGVudHJ5IGlzIHJlbW92ZWQg b25seSBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkICovCisJCWlmICh0eG5fZW50cnkg PT0gTlVMTCkKKwkJCWJyZWFrOworCisJCWRzaGFzaF9yZWxlYXNlX2xvY2socGFyYWxsZWxpemVk X3R4bnMsIHR4bl9lbnRyeSk7CisKKwkJLyoKKwkJICogV2FpdCBmb3IgdGhlIHBhcmFsbGVsIGFw cGx5IHdvcmtlciBwcm9jZXNzaW5nIHRoZSBnaXZlbiByZW1vdGUKKwkJICogdHJhbnNhY3Rpb24g dG8gZmluaXNoIGFwcGx5aW5nIGFuZCByZWxlYXNlIGl0cyBsb2NrLgorCQkgKi8KKwkJcGFfbG9j a190cmFuc2FjdGlvbih4aWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCXBhX3VubG9ja190cmFuc2Fj dGlvbih4aWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsK KworCQkvKgorCQkgKiBBY3F1aXJpbmcgdGhlIGxvY2sgc3VjY2Vzc2Z1bGx5IGRvZXMgbm90IGd1 YXJhbnRlZSB3ZSBjYW4gcHJvY2VlZC4KKwkJICogVGhlIHdvcmtlciBtYXkgaGF2ZSBlcnJvcmVk IG91dCBhbmQgcmVsZWFzZWQgdGhlIGxvY2sgd2hpbGUgbGVhdmluZworCQkgKiBpdHMgc2hhcmVk IGhhc2ggZW50cnkgaW50YWN0LCBvciBpdCBtYXkgbm90IGhhdmUgYWNxdWlyZWQgdGhlIGxvY2sK KwkJICogeWV0IGJlY2F1c2UgaXQgaGFzbid0IHByb2Nlc3NlZCB0aGUgQkVHSU4gbWVzc2FnZS4g SW4gZWl0aGVyIGNhc2UsIHdlCisJCSAqIG11c3QgY29udGludWUgd2FpdGluZyBpbiB0aGUgbG9v cCB1bnRpbCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyCisJCSAqIGZpbmlzaGVzIGFwcGx5aW5n IHRoZSB0cmFuc2FjdGlvbiwgb3IgdW50aWwgdGhlIGxlYWRlciBub3RpZmllcyB1cyBvZgorCQkg KiBhIGZhaWx1cmUgYW5kIHJlc3RhcnRzIGFsbCB3b3JrZXJzLgorCQkgKgorCQkgKiBUaGUgYWJv dmUgcmFjZSB3aW5kb3cgaXMgc21hbGwgYW5kIGluZnJlcXVlbnQsIHNvIG5vIFdhaXRMYXRjaCBp cworCQkgKiBhZGRlZC4KKwkJICovCisJfQorCisJZWxvZyhERUJVRzEsICJmaW5pc2ggd2FpdGlu ZyBmb3IgZGVwZW5kZWQgeGlkICV1IiwgeGlkKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvcHJvdG8uYwppbmRleCA4NmFkOTdjZDkzNy4uYTBjYWMwNWNkY2QgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKQEAgLTEyNTMsNiArMTI1Myw4IEBAIGxvZ2lj YWxyZXBfbWVzc2FnZV90eXBlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbikKIAkJCXJldHVybiAi U1RSRUFNIEFCT1JUIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1BSRVBBUkU6CiAJ CQlyZXR1cm4gIlNUUkVBTSBQUkVQQVJFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfSU5URVJO QUxfTUVTU0FHRToKKwkJCXJldHVybiAiSU5URVJOQUwgTUVTU0FHRSI7CiAJfQogCiAJLyoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IGEzZjI0MDZlZDgzLi42 NTk5ZDU2MzMwNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBA IC0zODkwLDYgKzM4OTAsMTAgQEAgYXBwbHlfZGlzcGF0Y2goU3RyaW5nSW5mbyBzKQogCQkJYXBw bHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKHMpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBMT0dJQ0FM X1JFUF9NU0dfSU5URVJOQUxfTUVTU0FHRToKKwkJCWFwcGx5X2hhbmRsZV9pbnRlcm5hbF9tZXNz YWdlKHMpOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJ CShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vbG9naWNhbHByb3RvLmgKaW5kZXggMDU4YTk1NWUyMGMuLmNiMGE4ZjQ0MGMwIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaApAQCAtNTMsNiArNTMsMTMgQEAKICAqIGlu IGxvZ2ljYWwgcmVwbGljYXRpb24gcHJvdG9jb2wsIHdoaWNoIHVzZXMgYSBzaW5nbGUgYnl0ZSB0 byBpZGVudGlmeSBhCiAgKiBtZXNzYWdlIHR5cGUuIEhlbmNlIHRoZSB2YWx1ZXMgc2hvdWxkIGJl IHNpbmdsZS1ieXRlIHdpZGUgYW5kIHByZWZlcmFibHkKICAqIGh1bWFuLXJlYWRhYmxlIGNoYXJh Y3RlcnMuCisgKgorICogTE9HSUNBTF9SRVBfTVNHX0lOVEVSTkFMX01FU1NBR0UgKCdpJykgaXMg cmVzZXJ2ZWQgZm9yIGludGVybmFsIG1lc3NhZ2VzIChzZWUKKyAqIFBBV29ya2VyTXNnVHlwZSBm b3Igc3ViLW1lc3NhZ2UgdHlwZXMpIHNlbnQgZnJvbSB0aGUgbGVhZGVyIGFwcGx5CisgKiB3b3Jr ZXIgdG8gcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4gQ2VudHJhbGl6aW5nIHRoaXMgZGVmaW5pdGlv biBoZXJlIGFsbG93cworICogYWxsIG1lc3NhZ2UgdHlwZXMgdG8gYmUgaGFuZGxlZCB0b2dldGhl ciBhbmQgYXZvaWRzIHRoZSBtYWludGVuYW5jZSBidXJkZW4gb2YKKyAqIGVuc3VyaW5nIHN1Yi1t ZXNzYWdlIHR5cGVzIGRvIG5vdCBjb25mbGljdCB3aXRoIHJlZ3VsYXIgTG9naWNhbFJlcE1zZ1R5 cGUKKyAqIHZhbHVlcy4KICAqLwogdHlwZWRlZiBlbnVtIExvZ2ljYWxSZXBNc2dUeXBlCiB7CkBA IC03NSw2ICs4Miw3IEBAIHR5cGVkZWYgZW51bSBMb2dpY2FsUmVwTXNnVHlwZQogCUxPR0lDQUxf UkVQX01TR19TVFJFQU1fQ09NTUlUID0gJ2MnLAogCUxPR0lDQUxfUkVQX01TR19TVFJFQU1fQUJP UlQgPSAnQScsCiAJTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9QUkVQQVJFID0gJ3AnLAorCUxPR0lD QUxfUkVQX01TR19JTlRFUk5BTF9NRVNTQUdFID0gJ2knLAogfSBMb2dpY2FsUmVwTXNnVHlwZTsK IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5h bC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKaW5kZXggZTYw ZTBjM2Q2ZDcuLjQzZGNhZTQzYTYyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi93b3JrZXJfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJf aW50ZXJuYWwuaApAQCAtMjQyLDYgKzI0MiwxOSBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEFw cGx5V29ya2VySW5mbwogCVBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKnNoYXJlZDsKIH0gUGFy YWxsZWxBcHBseVdvcmtlckluZm87CiAKKy8qCisgKiBQYXJhbGxlbCBhcHBseSB3b3JrZXIgaW50 ZXJuYWwgbWVzc2FnZSB0eXBlcy4KKyAqCisgKiBUaGVzZSB0eXBlcyBvZiBtZXNzYWdlcyBhcmUg Z2VuZXJhdGVkIGJ5IHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBzZW50IHRvCisgKiB0aGUg cGFyYWxsZWwgYXBwbHkgd29ya2VyLCBlbmNhcHN1bGF0ZWQgd2l0aGluIHRoZQorICogTE9HSUNB TF9SRVBfTVNHX0lOVEVSTkFMX01FU1NBR0UgdHlwZS4KKyAqLwordHlwZWRlZiBlbnVtIFBBV29y a2VyTXNnVHlwZQoreworCVBBX01TR19YQUNUX0RFUEVOREVOQ1kgPSAnZCcsCisJUEFfTVNHX1JF TE1BUCA9ICdyJywKK30gUEFXb3JrZXJNc2dUeXBlOworCiAvKiBNYWluIG1lbW9yeSBjb250ZXh0 IGZvciBhcHBseSB3b3JrZXIuIFBlcm1hbmVudCBkdXJpbmcgd29ya2VyIGxpZmV0aW1lLiAqLwog ZXh0ZXJuIFBHRExMSU1QT1JUIE1lbW9yeUNvbnRleHQgQXBwbHlDb250ZXh0OwogCkBAIC0zNDEs NiArMzU0LDggQEAgZXh0ZXJuIHZvaWQgcGFfYWxsb2NhdGVfd29ya2VyKFRyYW5zYWN0aW9uSWQg eGlkKTsKIGV4dGVybiBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqcGFfZmluZF93b3JrZXIoVHJh bnNhY3Rpb25JZCB4aWQpOwogZXh0ZXJuIHZvaWQgcGFfZGV0YWNoX2FsbF9lcnJvcl9tcSh2b2lk KTsKIAorZXh0ZXJuIHZvaWQgYXBwbHlfaGFuZGxlX2ludGVybmFsX21lc3NhZ2UoU3RyaW5nSW5m byBzKTsKKwogZXh0ZXJuIGJvb2wgcGFfc2VuZF9kYXRhKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZv ICp3aW5mbywgU2l6ZSBuYnl0ZXMsCiAJCQkJCQkgY29uc3Qgdm9pZCAqZGF0YSk7CiBleHRlcm4g dm9pZCBwYV9zd2l0Y2hfdG9fcGFydGlhbF9zZXJpYWxpemUoUGFyYWxsZWxBcHBseVdvcmtlcklu Zm8gKndpbmZvLApAQCAtMzY4LDYgKzM4Myw4IEBAIGV4dGVybiB2b2lkIHBhX2RlY3JfYW5kX3dh aXRfc3RyZWFtX2Jsb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGFfeGFjdF9maW5pc2goUGFyYWxs ZWxBcHBseVdvcmtlckluZm8gKndpbmZvLAogCQkJCQkJICAgWExvZ1JlY1B0ciByZW1vdGVfbHNu KTsKIAorZXh0ZXJuIHZvaWQgcGFfd2FpdF9mb3JfZGVwZW5kZWRfdHJhbnNhY3Rpb24oVHJhbnNh Y3Rpb25JZCB4aWQpOworCiAjZGVmaW5lIGlzUGFyYWxsZWxBcHBseVdvcmtlcih3b3JrZXIpICgo d29ya2VyKS0+aW5fdXNlICYmIFwKIAkJCQkJCQkJCSAgICh3b3JrZXIpLT50eXBlID09IFdPUktF UlRZUEVfUEFSQUxMRUxfQVBQTFkpCiAjZGVmaW5lIGlzVGFibGVTeW5jV29ya2VyKHdvcmtlcikg KCh3b3JrZXIpLT5pbl91c2UgJiYgXApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBmYWJk YTE3ZDczOS4uYzAwYzM0NjUyZmUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xOTI2 LDYgKzE5MjYsNyBAQCBPdmVycmlkaW5nS2luZAogUEFDRV9IRUFERVIKIFBBQ0wKIFBBVEgKK1BB V29ya2VyTXNnVHlwZQogUEN0eHRIYW5kbGUKIFBFUkxfQ09OVEVYVAogUEVSTF9TSQotLSAKMi40 My4wCgo= --_010_TY4PR01MB1771875A7A64B139EF8C8D05C94E62TY4PR01MB17718jp_--