From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11olkn2094.outbound.protection.outlook.com [40.92.18.94]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BCB602DCBEC; Sun, 1 Jun 2025 01:04:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.92.18.94 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748739850; cv=fail; b=s2WJ5VLB3CWPEFJWB0xsjxP+r43bWZIGUTi06GnScN1OUrS3g4hBXG0SZA74vs/QbB5KfHrR0JFXQjG6mOF6iDEphR+l9uA2OonXU/XbMYABIlcLF1g0EMaudTe/CwCyUdH0E5206n2OcM/hX7WHEXnfriAzXfFN9Rq+i12ygrs= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748739850; c=relaxed/simple; bh=S1DYyRTmeuJ2FmRZndOfBl8RGoylxd1EZ0Dxe0LkCVI=; h=From:To:CC:Subject:Date:Message-ID:Content-Type:MIME-Version; b=SGgrzQ0VU/SgqG2AkUR5zQydRgeIoKGEoNZucw94bZ7yNnrMSCgMuqQ6qsrDCUu9J6m8H/wvpI9/+H/x4FBNbuXsufR0rK5xWvxnFOm2EgIrI2vuG3cfHD9d6ePk+AxnRB22iaR+O8BWxUmtDIFyWUdluMPmZ0h7gjsJBPSOwWE= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=outlook.com; spf=pass smtp.mailfrom=outlook.com; dkim=pass (2048-bit key) header.d=outlook.com header.i=@outlook.com header.b=dLTbnZCJ; arc=fail smtp.client-ip=40.92.18.94 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=outlook.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=outlook.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=outlook.com header.i=@outlook.com header.b="dLTbnZCJ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jbU3RV6d5MYZKKebTrLf+ryMXY309mhNzNiTmyxif70JBY1aDTSyuAqXuuMEqoSltlvh2ii0SI1+3M07RmVfJ21sugB2wiqyOm09yaofsh2rZm09pEmqtB9H+sE7qAxPMgmxVRegobP2/V8svsxvewW4JKk0jqsS6IkJk7rGw4ebDQvjr5SA8UrfKqRYxzcyc7I91PHNvd6ULtlwmlbl4hShR/SNXeD/IyEoXLWmyrCn+MolyEpiLAolriD+OCpHWVctFBe1ELK/+oDQmTR9dPwFTUsgMZkQzz5P+SnXccec42yYZq0FQimMtn9GkKHvXXVSVDXXMVuwQjOcPYcrvA== 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=S1DYyRTmeuJ2FmRZndOfBl8RGoylxd1EZ0Dxe0LkCVI=; b=iPjcgPqO75rS9c+J+uq1mebN4YVeVICf7BF0oHMzYaHyC6C8RCVHPUiio3BN+vgUBZ7QoyjriQaKsCDziGZelwEfENP19aI5NCW8KwOCst1zFcYyruUyxA+SUOiQOtGHL8DuxShPUqmDL8Lz1lMw8v20VWpsJY1SHARG09efxh5VTgy9XClgmJ57rIaD6aqye2usTo4X92CYt/OnD4YMwCH30mS/A5SS9gFDrOR10JXeOypmG80gjpU2RfAGLCUHcWQ+uuiRk0vhu4pmErWbukXT1uoB3QaxQSkS89pNyqGVSgEgOsED5iCVULjZYOEtDPXS7qLIiwPLmhgDI5D0Zg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=S1DYyRTmeuJ2FmRZndOfBl8RGoylxd1EZ0Dxe0LkCVI=; b=dLTbnZCJqtqWnLZv0E9nbz34qr9PAGl4hchL/vcSuNQUqVgHbuZDncQZX6bAT6DNdton9x75wPG99obXkfg/lnbpL/UMyGgPjrllLZID2Ee6IhNjNDH+kGmUCb648ApS9bsLQZY6MY7lA1k3fDaD2fLoJWaYEoTAB5VqL08DSfNfwbNV2EtYz7Q9lDvrNtmUS048Op/hgEakg6c4YNDSSYGc0xukx1Q0jVwai4P7NztrVoizi/EvXqRyJHNBwgC6z2pzEKXPNOA4vmagtrRA/xXqK7tdejtRwDHsTj1ZXO4UQFfRrocdovjt4Mef6JlElrUZbf3EXb7f+6JottIwtw== Received: from SCYP152MB6261.LAMP152.PROD.OUTLOOK.COM (2603:10d6:300:34::10) by SCZP152MB5822.LAMP152.PROD.OUTLOOK.COM (2603:10d6:300:60::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.26; Sun, 1 Jun 2025 01:04:03 +0000 Received: from SCYP152MB6261.LAMP152.PROD.OUTLOOK.COM ([fe80::595f:48ad:9ed7:35a1]) by SCYP152MB6261.LAMP152.PROD.OUTLOOK.COM ([fe80::595f:48ad:9ed7:35a1%6]) with mapi id 15.20.8769.035; Sun, 1 Jun 2025 01:04:02 +0000 From: =?utf-8?B?4oSw8J2Tg/Cdk4/ihLQg4oSx8J2TivCdk4DihK8=?= To: "serge@hallyn.com" CC: "linux-security-module@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH 1/3] security: add Lilium - Linux Integrity Lock-In User Module Thread-Topic: [PATCH 1/3] security: add Lilium - Linux Integrity Lock-In User Module Thread-Index: AQHb0o8aWlNnv6KiHUOghsJv/gvMMA== Date: Sun, 1 Jun 2025 01:04:02 +0000 Message-ID: Accept-Language: en-GB, pt-BR, en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SCYP152MB6261:EE_|SCZP152MB5822:EE_ x-ms-office365-filtering-correlation-id: 3de4d47e-4a2f-499c-6fab-08dda0a83306 x-ms-exchange-slblob-mailprops: P1EfU6pZOd+Ewy2R3Pu64sHUJuYJdjG8u9RSKOf5GJyLnCEF3Dz6vVT4YOmvWF/+zE7nAjEpMXCEeARPROoKQXSU1kNO91UYbEKbbcd1GGGMUgpEqLeKdhIPiVNqMIXl3Y5JZIQqQDinlr/J2/TAK1o3lNhRyXWfrQBr9QAmdDLZA0MWOqI/ch7BBEw+drdrobGl5XcTLWXfXYqFQfBu+Dc0kMcDS8mLU2H81PTcJfTdj17eaLfFrK0f2DB0KTG4IcCYrDfNv/TXgE8tjbJkvyFAQCvwfB0Z4vRdv05hNkzXrVVW/ExBN0RqDRv5Fx7ugIpwsPCqgqcpyarRZ5YxijarQ5SorB0M1S7/npuVF11BRZ+f2qn2ZRdTC8uQKDuLQJFIJB1clnfDh/DNZd7Qe5PHEt3kgl6Y9gtrgGb4nq4XScoSwxMKKEHH8f/NakrftToT+sb+WIRFrdNnByD0uX53t0jBN9RvrQTjtQ0QQlG9jAyY/qTW4UG2xA1ymYJGgtY/DN97daG1S6wqQ7STRZXGy1MhP4KOFqEZDfdBaQN57I/D2YPyWhbUWeHuBIuwHLuS+HLVhbzz3eZxBCcw5DEgykhuqmRqQGghEV3dN412id6QyqJMduJizMofUqmFi7Rk7Zrx/+YOVYJUTk+s0JOtDBmRPsR0mJhMaf8qTil70v2zT4+YJsR/pNTID41U3lY2GL3Td2/yJ5je3UuCvKYnGo5cSyjd0RT4r2LiJy8nagRGPYXfvROkh+6OLG6FfpeK4mGVCQHSUXYH8jO7ZUEm+yjgfwCDjHB0hRNp1Yj/n23VOGxTyg== x-microsoft-antispam: BCL:0;ARA:14566002|15080799009|461199028|41001999006|21061999006|7092599006|8060799009|19110799006|8062599006|15030799003|102099032|440099028|3412199025; x-microsoft-antispam-message-info: =?utf-8?B?MzROdE1zQ1pWUlpHT29Yd0pZc091b1VPRGpGVUZla1BBR0ZlSjdKOTBrd0lH?= =?utf-8?B?RkpyUWVyUEdGNUFON0kxVGpVbVVKd2I1cDI2SUtRSCtjL004WC90NGZzYk1E?= =?utf-8?B?eUxDZkhKRkZILzlzOHlDeWZOd0cvcW5lemY2Y2srKzRrYjJwR01NN3ZUd2ho?= =?utf-8?B?K1ZqU2JoZzR4Y0tHK3FPVHRpeTM1ZlIrSDBHSE1xc2xlM2RLQTMwbDBER1o0?= =?utf-8?B?WGx2dEZpejVvVGpFc3kyM0pHU01FSzNvMWhrT2RaYllWMlI4ZmdadGZmd1Rz?= =?utf-8?B?VE5heGhxOE90TTJGR2JERk1CRDhNQ1IrN3VyUTZYcDcvbnYxYlpPRThjWWI2?= =?utf-8?B?SWlvcXh4c2wweStnOEhTdnJvUzk3YTFWeWI0dEZCekNIcE5STi9xaHVjMEE4?= =?utf-8?B?c3liK3pCS1kzMjNEenVUYlFOQVl6TEl4WXlEUnJWcm1jVWlpZk0zUzlkeHcy?= =?utf-8?B?dnNKeUdGNnJzZit3S0EvdmRraWIyY21HbzMvMkNpeWg3eldjVkN0THlIT1o3?= =?utf-8?B?ckd0aW1BTVM3elhqcHIzV2d2M0FHbmRUUm1LdmV4ZU1hRXB6R3h2bDNDR2pP?= =?utf-8?B?dUxTY2xNazRCcXM5OE1ZTjY2TUhURlJlT2FGdDNCTzBCUmJVdWpSdFJVcld3?= =?utf-8?B?emZUd3hzNzh0U1ZHeS9qcStOdVMyTXhpTDhBVHl0UEtmUjMxYzRkUDJaVmlh?= =?utf-8?B?MmZ2bCt2TGRkSEJCeml6SDJMeHYwOGwwMm45UkFydEFXdXpvQm13UlpYSnFR?= =?utf-8?B?amRrbFFRMTBobzYrU25zR1hDUkdRVk14bU5iWnMxaURWTk9NRDRsczFzWjVY?= =?utf-8?B?MjBxNG1BU3hXYUtMdjdlM0pGVFNsV3hWaEROWnhhbG9JMUt1OTAvaDVXaVBG?= =?utf-8?B?YkxOVEtpVnhZSUhQQS95bEp0d2tjNnVCUE5xU2dTTDk4MGJzNkxuZUIxK3Ft?= =?utf-8?B?L0RLMGQ4RjlZN2FpRTJQVUlwand5THNJbm5QODg1LytJTGl4bEV4Z3VwNjdz?= =?utf-8?B?T1Zwbm9abndiWEtHalBrR21HVUpKK2JkZVdmS1ZySzY1Q28ySk1ZV0tZUGZw?= =?utf-8?B?VXRaa3NqNC9MMUNlMUt5SDdzZTNjeDZobXFzbzM4QTgyT2gvZGN2bElHZDli?= =?utf-8?B?UDJORTZzMlo5eXFGSk5UdnpmRnEyU3NuSGNReFAyN2UyWnFZUDY2RTlNVEVK?= =?utf-8?B?UnkxVHh0eDRoVVZLbzZSZmxtLzVvWmxVU1ZkcDV5VTArcFZkT21LSE1TbEt3?= =?utf-8?B?MVZSeGU2ZzBIbEZqN0xNM1VCYzVrTmtZNmw1bW1tR3hsNWhuam1SMTJzelM0?= =?utf-8?B?QnByemZ3NGpzTGFIblhWZ05KL1drdE9Ra1VBdGlCNTBFMU9XckhSTWVmaEc1?= =?utf-8?B?Y3ZzYzFwajJvV0JWelQvbDZtNWFBZkRjZFNhNmJFaElaTEVWWjdwSzRBWG15?= =?utf-8?B?emYvbFVmTFNucmJ5UGd6OFZPNmxQOWZPZzV4V0lJdWlhdGtwQkt3L2I5SGVn?= =?utf-8?B?WWZtRUpuVVVaQTNnUVJPWmplTDdtTXZ1cVhyRDRIbHhWVzBQTlI1L0tpUzhU?= =?utf-8?B?b0w2NndqWEE3RG5zdzhuSkg2c1hJVm4rZ1NnZjl3bUhBVVRqa284SC9WZFdC?= =?utf-8?B?Sy85VnBGb2FDL0ZoWjkyak1oKzZiN1E9PQ==?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WkY1Z3JnU1FvRmlxdjZKUzgrQ0QvaTJLM2NmalNiTUUwVXZzd1BQN3BEb0dY?= =?utf-8?B?R0E3R3lRMDNYWUFNRitmTWNBZEEwOWRGMmlGOVAxbnZMd1owRkNiTXdzNEdZ?= =?utf-8?B?VjlVejhaWnNVSCtkVjJzdjg0UlFHUUlhU3hMaUFHamo1bElNY0VNMVhZUWJs?= =?utf-8?B?bXFEZ2NtYS9kSnpOeFh0K3NmQTdmdUdMSldYdS85b2cwTGtpZmxZZ2RkVmVt?= =?utf-8?B?Q1JZUTBYbk9LNDhZNFMzUGUyWEdlL2dpYjBBb3kyRTR4VDJ4NDV4RmIyMERK?= =?utf-8?B?dm9DVUc3dFpGSG0vY2R5d3IwWHhrMzd6bTlMZ3BPMzIzYlBOaFIyTjZ5RHV1?= =?utf-8?B?Q3dpbGdEQnBZYWg2Qi9oc0hJNmFJeitoYUhzSjY3NTJNOUZCcmtRWnYxS082?= =?utf-8?B?WDBwU1RER0VGZTM3ektPb0MxbHJ2bWMxNlkrK3E2RHExc0Ixb0s5ZGlyVTFE?= =?utf-8?B?bHNTTzgzak5DOXBSWXc0d1gzbUIxS1oyQ0ZtOTV5aC9VeDVJRmZSUUoyeFhL?= =?utf-8?B?N3dWb3Jxd1VaRUtYWG9yVUZlOU8rVERMend5a2Y2V2hnL0Y4Vjhia3dwNjhB?= =?utf-8?B?MStxTmhwU2pKUGVaQjN1NzFHaThlZkhCWXJyRkJOODlFOE5pV0JLWjdWSjJo?= =?utf-8?B?LzFsS0xvUGtuNVRadGNFQzg2K0ZxM3B0OEJxOGF5UDhKUEhvY0xpOEFCTk1i?= =?utf-8?B?WSt4VlNxREJMMW9QL3NjMWp3RG90TDNZdFh1eFNKT3pBQjJHS2hPeXkvaW1X?= =?utf-8?B?OVNDL2hXUDUwVW9DeWE0Z1RIY0U3RkZOL1pHZWRSZUpXK1g2ZXNVZy9ERGcr?= =?utf-8?B?MmYxY3pnbE1JQzg5NTV3UlgybW9DK0JZQmluNnNrWERFRzA2VDQyL1VjNE5H?= =?utf-8?B?RWtYZGdsTGZQSUROMEQ0UnBuaXdtSE42a1poL21xeUdlVUh2UzA1dlIzcXNE?= =?utf-8?B?bmxKOXNpb0lTVGJESG9qWTJuZWhuODl3VE50WThCM2I5azlDcWlGRWdxNXVa?= =?utf-8?B?ejh3OW05Y2lnUHlJcjF3MjFZMWErV1R4ZGFxbE5tTklaU05JVTRGek9uZ2hZ?= =?utf-8?B?TWZDU25EaURwdElhUWMzS3F5VDJJNnowVVN2ei9ROStSTG5haHd6KzdqLzQ2?= =?utf-8?B?WUNYRy8vNUJKVDY3N1RiR1BOSGZLVjRrdXZuMnV2V0lCeWJ3TExXWmNDd2w4?= =?utf-8?B?d3Q3K3IxT3I1bDNvU1ljN0l1UEduSWloNTN1b0x5dmszNVQzSEtYNVV5TjZ5?= =?utf-8?B?V1Z1T0dyVGEzek9pcWhURjJoTWJRTUJEVG5saklpRk5wdmNIREUzcTJ1bzJ6?= =?utf-8?B?UXVUNWVob2FQZk5OdkFtYVM1QjZVTE9uNTBCNTBzcVgwQ3o4VExFREFEQXIr?= =?utf-8?B?aGVWWmZGTkZ3UWd0cnNEZjBxRmVUZ2pEM2plM0VxOUhQaTI0N2RUT2FReGdk?= =?utf-8?B?VnVURVEwK1FzQmRwalY4L2JzL1gzSURRR25RcGVvN1pzSE1SM3ZGeGhNUHd1?= =?utf-8?B?dHpIMGdpS0E3SklSU3lBbVNRSWhzbnV6SHJrdTEzREd3L2ZEcVFCZzV1Q3FQ?= =?utf-8?B?b1FCQnFsTWFmbk9Qbm5BV3hOaEN0WGE1TnlFVnFpTy9GL2J6YlF4QWRpanla?= =?utf-8?B?d0NGczNrV25yNGdKa2JsaEk1TDRpTm5JdyswV3QxR0pUUTRqdTJtUXA5RUFC?= =?utf-8?Q?OSDmGWxRxOsGUs/V2+1Q?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SCYP152MB6261.LAMP152.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 3de4d47e-4a2f-499c-6fab-08dda0a83306 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Jun 2025 01:04:02.6895 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SCZP152MB5822 RnJvbSBmMzRhNTNjN2U2MTVmYjZlNjBiMjFiZGNiNWIxOTc5ZWRhZjUyMDg4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBFbnpvIEZ1a2UgPG1pbGVzb25lcmRAb3V0bG9vay5jb20+CkRh dGU6IFN1biwgMSBKdW4gMjAyNSAwMDoyNjo0MyArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIExpbGl1 bSBMU00KCi0tLQrCoHNlY3VyaXR5L2xpbGl1bS9LY29uZmlnIMKgIMKgIMKgIMKgIHwgwqA4MiAr KysrKysKwqBzZWN1cml0eS9saWxpdW0vTWFrZWZpbGUgwqAgwqAgwqAgwqB8IMKgMTAgKwrCoHNl Y3VyaXR5L2xpbGl1bS9saWxpdW1fY29uZmlnLmggfCDCoDI0ICsrCsKgc2VjdXJpdHkvbGlsaXVt L2xpbGl1bV9sc20uYyDCoCDCoHwgNDY4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CsKgc2VjdXJpdHkvbGlsaXVtL2xpbGl1bV9ydXN0LnJzIMKgfCDCoDgzICsrKysrKwrCoDUgZmls ZXMgY2hhbmdlZCwgNjY3IGluc2VydGlvbnMoKykKwqBjcmVhdGUgbW9kZSAxMDA2NDQgc2VjdXJp dHkvbGlsaXVtL0tjb25maWcKwqBjcmVhdGUgbW9kZSAxMDA2NDQgc2VjdXJpdHkvbGlsaXVtL01h a2VmaWxlCsKgY3JlYXRlIG1vZGUgMTAwNjQ0IHNlY3VyaXR5L2xpbGl1bS9saWxpdW1fY29uZmln LmgKwqBjcmVhdGUgbW9kZSAxMDA2NDQgc2VjdXJpdHkvbGlsaXVtL2xpbGl1bV9sc20uYwrCoGNy ZWF0ZSBtb2RlIDEwMDY0NCBzZWN1cml0eS9saWxpdW0vbGlsaXVtX3J1c3QucnMKCmRpZmYgLS1n aXQgYS9zZWN1cml0eS9saWxpdW0vS2NvbmZpZyBiL3NlY3VyaXR5L2xpbGl1bS9LY29uZmlnCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNzI5NjQKLS0tIC9kZXYvbnVsbAor KysgYi9zZWN1cml0eS9saWxpdW0vS2NvbmZpZwpAQCAtMCwwICsxLDgyIEBACisjIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKyMKKyMgTGlsaXVtIChMaW51eCBJbnRlZ3Jp dHkgTG9jay1JbiBVc2VyIE1vZHVsZSkKKyMgQ29weXJpZ2h0IChDKSAyMDI1IEVuem8gRnVrZQor IworY29uZmlnIFNFQ1VSSVRZX0xJTElVTQorIMKgIGJvb2wgIkxpbGl1bSAoTGludXggSW50ZWdy aXR5IExvY2stSW4gVXNlciBNb2R1bGUpIFN1cHBvcnQiCisgwqAgZGVwZW5kcyBvbiBTRUNVUklU WQorIMKgIGhlbHAKKyDCoCDCoCBUaGlzIGVuYWJsZXMgdGhlIExpbGl1bSBMaW51eCBTZWN1cml0 eSBNb2R1bGUsIHdoaWNoIHByb3ZpZGVzCisgwqAgwqAgbW9kdWxhciBzZWN1cml0eSBtZWNoYW5p c21zIGZvciByZXN0cmljdGluZyB2YXJpb3VzIHN5c3RlbQorIMKgIMKgIG9wZXJhdGlvbnMgaW5j bHVkaW5nIHB0cmFjZSwgbW1hcC9tcHJvdGVjdCB3aXRoIFBST1RfRVhFQywKKyDCoCDCoCBrZXhl Y19sb2FkLCBjbG9uZS91bnNoYXJlLCBtb2R1bGUgbWFuYWdlbWVudCwgYW5kIGZpbGUgb3BlcmF0 aW9ucy4KKyDCoCDCoAorIMKgIMKgIEFsbCBzZWN1cml0eSBtZWNoYW5pc21zIGFyZSBkaXNhYmxl ZCBieSBkZWZhdWx0IGFuZCBjYW4gYmUKKyDCoCDCoCBlbmFibGVkIGluZGl2aWR1YWxseSB0aHJv dWdoIHN5c2N0bC4KKyDCoCDCoAorIMKgIMKgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3 ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCisKK2NvbmZpZyBTRUNVUklUWV9MSUxJVU1fUFRS QUNFCisgwqAgYm9vbCAiTGlsaXVtIHB0cmFjZSByZXN0cmljdGlvbnMiCisgwqAgZGVwZW5kcyBv biBTRUNVUklUWV9MSUxJVU0KKyDCoCBkZWZhdWx0IG4KKyDCoCBoZWxwCisgwqAgwqAgVGhpcyBl bmFibGVzIHB0cmFjZSBhY2Nlc3MgcmVzdHJpY3Rpb25zIGluIExpbGl1bS4KKyDCoCDCoAorIMKg IMKgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2Vy IE4uCisKK2NvbmZpZyBTRUNVUklUWV9MSUxJVU1fTVBST1RFQ1QKKyDCoCBib29sICJMaWxpdW0g bW1hcC9tcHJvdGVjdCByZXN0cmljdGlvbnMiCisgwqAgZGVwZW5kcyBvbiBTRUNVUklUWV9MSUxJ VU0KKyDCoCBkZWZhdWx0IG4KKyDCoCBoZWxwCisgwqAgwqAgVGhpcyBlbmFibGVzIG1tYXAvbXBy b3RlY3Qgd2l0aCBQUk9UX0VYRUMgcmVzdHJpY3Rpb25zIGluIExpbGl1bS4KKyDCoCDCoAorIMKg IMKgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2Vy IE4uCisKK2NvbmZpZyBTRUNVUklUWV9MSUxJVU1fS0VYRUMKKyDCoCBib29sICJMaWxpdW0ga2V4 ZWNfbG9hZCByZXN0cmljdGlvbnMiCisgwqAgZGVwZW5kcyBvbiBTRUNVUklUWV9MSUxJVU0KKyDC oCBkZWZhdWx0IG4KKyDCoCBoZWxwCisgwqAgwqAgVGhpcyBlbmFibGVzIGtleGVjX2xvYWQgcmVz dHJpY3Rpb25zIGluIExpbGl1bS4KKyDCoCDCoAorIMKgIMKgIElmIHlvdSBhcmUgdW5zdXJlIGhv dyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCisKK2NvbmZpZyBTRUNVUklUWV9M SUxJVU1fQ0xPTkUKKyDCoCBib29sICJMaWxpdW0gY2xvbmUvdW5zaGFyZSByZXN0cmljdGlvbnMi CisgwqAgZGVwZW5kcyBvbiBTRUNVUklUWV9MSUxJVU0KKyDCoCBkZWZhdWx0IG4KKyDCoCBoZWxw CisgwqAgwqAgVGhpcyBlbmFibGVzIGNsb25lIGFuZCB1bnNoYXJlIHJlc3RyaWN0aW9ucyBpbiBM aWxpdW0uCisgwqAgwqAKKyDCoCDCoCBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRo aXMgcXVlc3Rpb24sIGFuc3dlciBOLgorCitjb25maWcgU0VDVVJJVFlfTElMSVVNX01PRFVMRQor IMKgIGJvb2wgIkxpbGl1bSBtb2R1bGUgbWFuYWdlbWVudCByZXN0cmljdGlvbnMiCisgwqAgZGVw ZW5kcyBvbiBTRUNVUklUWV9MSUxJVU0KKyDCoCBkZWZhdWx0IG4KKyDCoCBoZWxwCisgwqAgwqAg VGhpcyBlbmFibGVzIG1vZHVsZSBsb2FkaW5nL3VubG9hZGluZyByZXN0cmljdGlvbnMgaW4gTGls aXVtLgorIMKgIMKgCisgwqAgwqAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlz IHF1ZXN0aW9uLCBhbnN3ZXIgTi4KKworY29uZmlnIFNFQ1VSSVRZX0xJTElVTV9PUEVOCisgwqAg Ym9vbCAiTGlsaXVtIGZpbGUgb3BlbiByZXN0cmljdGlvbnMiCisgwqAgZGVwZW5kcyBvbiBTRUNV UklUWV9MSUxJVU0KKyDCoCBkZWZhdWx0IG4KKyDCoCBoZWxwCisgwqAgwqAgVGhpcyBlbmFibGVz IG9wZW4vb3BlbmF0IHJlc3RyaWN0aW9ucyBpbiBMaWxpdW0uCisgwqAgwqAKKyDCoCDCoCBJZiB5 b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLgorCitj b25maWcgU0VDVVJJVFlfTElMSVVNX0lPQ1RMCisgwqAgYm9vbCAiTGlsaXVtIGlvY3RsIHJlc3Ry aWN0aW9ucyIKKyDCoCBkZXBlbmRzIG9uIFNFQ1VSSVRZX0xJTElVTQorIMKgIGRlZmF1bHQgbgor IMKgIGhlbHAKKyDCoCDCoCBUaGlzIGVuYWJsZXMgaW9jdGwgcmVzdHJpY3Rpb25zIGluIExpbGl1 bS4KKyDCoCDCoAorIMKgIMKgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBx dWVzdGlvbiwgYW5zd2VyIE4uCisKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xpbGl1bS9NYWtlZmls ZSBiL3NlY3VyaXR5L2xpbGl1bS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4xN2FlYjA0Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvbGlsaXVtL01ha2Vm aWxlCkBAIC0wLDAgKzEsMTAgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b25seQorIworIyBMaWxpdW0gKExpbnV4IEludGVncml0eSBMb2NrLUluIFVzZXIgTW9kdWxlKQor IyBDb3B5cmlnaHQgKEMpIDIwMjUgRW56byBGdWtlCisjCitvYmotJChDT05GSUdfU0VDVVJJVFlf TElMSVVNKSArPSBsaWxpdW0ubworCitsaWxpdW0teSA6PSBsaWxpdW1fbHNtLm8KK2xpbGl1bS0k KENPTkZJR19SVVNUKSArPSBsaWxpdW1fcnVzdC5vCisKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xp bGl1bS9saWxpdW1fY29uZmlnLmggYi9zZWN1cml0eS9saWxpdW0vbGlsaXVtX2NvbmZpZy5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MzNjN2UKLS0tIC9kZXYvbnVsbAor KysgYi9zZWN1cml0eS9saWxpdW0vbGlsaXVtX2NvbmZpZy5oCkBAIC0wLDAgKzEsMjQgQEAKKy8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBMaWxpdW0g KExpbnV4IEludGVncml0eSBMb2NrLUluIFVzZXIgTW9kdWxlKQorICogQ29weXJpZ2h0IChDKSAy MDI1IEVuem8gRnVrZQorICovCisKKyNpZm5kZWYgX1NFQ1VSSVRZX0xJTElVTV9DT05GSUdfSAor I2RlZmluZSBfU0VDVVJJVFlfTElMSVVNX0NPTkZJR19ICisKKy8qIERlZmF1bHQgZGlzYWJsZWQg c3RhdGUgZm9yIGFsbCBMaWxpdW0gZmVhdHVyZXMgKi8KKyNkZWZpbmUgTElMSVVNX0ZFQVRVUkVf RElTQUJMRUQgMAorI2RlZmluZSBMSUxJVU1fRkVBVFVSRV9FTkFCTEVEIMKgMQorCisvKiBGZWF0 dXJlIGNvbnRyb2wgZmxhZ3MgLSBhbGwgZGlzYWJsZWQgYnkgZGVmYXVsdCAqLworI2RlZmluZSBM SUxJVU1fREVGQVVMVF9QVFJBQ0UgwqAgTElMSVVNX0ZFQVRVUkVfRElTQUJMRUQKKyNkZWZpbmUg TElMSVVNX0RFRkFVTFRfTVBST1RFQ1QgTElMSVVNX0ZFQVRVUkVfRElTQUJMRUQKKyNkZWZpbmUg TElMSVVNX0RFRkFVTFRfS0VYRUMgwqAgwqBMSUxJVU1fRkVBVFVSRV9ESVNBQkxFRAorI2RlZmlu ZSBMSUxJVU1fREVGQVVMVF9DTE9ORSDCoCDCoExJTElVTV9GRUFUVVJFX0RJU0FCTEVECisjZGVm aW5lIExJTElVTV9ERUZBVUxUX01PRFVMRSDCoCBMSUxJVU1fRkVBVFVSRV9ESVNBQkxFRAorI2Rl ZmluZSBMSUxJVU1fREVGQVVMVF9PUEVOIMKgIMKgIExJTElVTV9GRUFUVVJFX0RJU0FCTEVECisj ZGVmaW5lIExJTElVTV9ERUZBVUxUX0lPQ1RMIMKgIMKgTElMSVVNX0ZFQVRVUkVfRElTQUJMRUQK KworI2VuZGlmIC8qIF9TRUNVUklUWV9MSUxJVU1fQ09ORklHX0ggKi8KKwpkaWZmIC0tZ2l0IGEv c2VjdXJpdHkvbGlsaXVtL2xpbGl1bV9sc20uYyBiL3NlY3VyaXR5L2xpbGl1bS9saWxpdW1fbHNt LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiYWM0MQotLS0gL2Rldi9u dWxsCisrKyBiL3NlY3VyaXR5L2xpbGl1bS9saWxpdW1fbHNtLmMKQEAgLTAsMCArMSw0NjggQEAK Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBMaWxp dW0gKExpbnV4IEludGVncml0eSBMb2NrLUluIFVzZXIgTW9kdWxlKQorICogQ29weXJpZ2h0IChD KSAyMDI1IEVuem8gRnVrZQorICovCisKKyNpbmNsdWRlIDxsaW51eC9sc21faG9va3MuaD4KKyNp bmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmN0bC5oPgorI2luY2x1 ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L3N0cmluZ19oZWxwZXJzLmg+CisjaW5jbHVkZSA8bGludXgvdGFza193b3Jr Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5o PgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5j bHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGlu dXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisjaW5jbHVkZSA8bGludXgvc2xh Yi5oPgorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0 eS5oPgorI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5o PgorI2luY2x1ZGUgPHVhcGkvbGludXgvbHNtLmg+CisKKyNpbmNsdWRlICJsaWxpdW1fY29uZmln LmgiCisKKy8qIEZlYXR1cmUgY29udHJvbCB2YXJpYWJsZXMgLSBhbGwgZGlzYWJsZWQgYnkgZGVm YXVsdCAqLworc3RhdGljIGludCBsaWxpdW1fcHRyYWNlX2VuYWJsZWQgPSBMSUxJVU1fREVGQVVM VF9QVFJBQ0U7CitzdGF0aWMgaW50IGxpbGl1bV9tcHJvdGVjdF9lbmFibGVkID0gTElMSVVNX0RF RkFVTFRfTVBST1RFQ1Q7CitzdGF0aWMgaW50IGxpbGl1bV9rZXhlY19lbmFibGVkID0gTElMSVVN X0RFRkFVTFRfS0VYRUM7CitzdGF0aWMgaW50IGxpbGl1bV9jbG9uZV9lbmFibGVkID0gTElMSVVN X0RFRkFVTFRfQ0xPTkU7CitzdGF0aWMgaW50IGxpbGl1bV9tb2R1bGVfZW5hYmxlZCA9IExJTElV TV9ERUZBVUxUX01PRFVMRTsKK3N0YXRpYyBpbnQgbGlsaXVtX29wZW5fZW5hYmxlZCA9IExJTElV TV9ERUZBVUxUX09QRU47CitzdGF0aWMgaW50IGxpbGl1bV9pb2N0bF9lbmFibGVkID0gTElMSVVN X0RFRkFVTFRfSU9DVEw7CisKKy8qIEtvYmplY3QgZm9yIExpbGl1bSBzeXNmcyBpbnRlcmZhY2Ug Ki8KK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqbGlsaXVtX2tvYmo7CisKKy8qIFN5c2ZzIGF0dHJp YnV0ZSBzaG93L3N0b3JlIGZ1bmN0aW9ucyAqLworc3RhdGljIHNzaXplX3QgcHRyYWNlX2VuYWJs ZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBz dHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKyDCoCByZXR1cm4gc3lz ZnNfZW1pdChidWYsICIlZFxuIiwgbGlsaXVtX3B0cmFjZV9lbmFibGVkKTsKK30KKworc3RhdGlj IHNzaXplX3QgcHRyYWNlX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sK KyDCoCBpbnQgcmV0LCB2YWw7CisKKyDCoCByZXQgPSBrc3RydG9pbnQoYnVmLCAxMCwgJnZhbCk7 CisgwqAgaWYgKHJldCA8IDApCisgwqAgwqAgwqAgcmV0dXJuIHJldDsKKworIMKgIGlmICh2YWwg IT0gMCAmJiB2YWwgIT0gMSkKKyDCoCDCoCDCoCByZXR1cm4gLUVJTlZBTDsKKworIMKgIGxpbGl1 bV9wdHJhY2VfZW5hYmxlZCA9IHZhbDsKKyDCoCByZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBz c2l6ZV90IG1wcm90ZWN0X2VuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIg KmJ1ZikKK3sKKyDCoCByZXR1cm4gc3lzZnNfZW1pdChidWYsICIlZFxuIiwgbGlsaXVtX21wcm90 ZWN0X2VuYWJsZWQpOworfQorCitzdGF0aWMgc3NpemVfdCBtcHJvdGVjdF9lbmFibGVkX3N0b3Jl KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3Ry dWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisgwqAgaW50IHJldCwgdmFsOworCisg wqAgcmV0ID0ga3N0cnRvaW50KGJ1ZiwgMTAsICZ2YWwpOworIMKgIGlmIChyZXQgPCAwKQorIMKg IMKgIMKgIHJldHVybiByZXQ7CisKKyDCoCBpZiAodmFsICE9IDAgJiYgdmFsICE9IDEpCisgwqAg wqAgwqAgcmV0dXJuIC1FSU5WQUw7CisKKyDCoCBsaWxpdW1fbXByb3RlY3RfZW5hYmxlZCA9IHZh bDsKKyDCoCByZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGtleGVjX2VuYWJsZWRf c2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHN0cnVj dCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworIMKgIHJldHVybiBzeXNmc19l bWl0KGJ1ZiwgIiVkXG4iLCBsaWxpdW1fa2V4ZWNfZW5hYmxlZCk7Cit9CisKK3N0YXRpYyBzc2l6 ZV90IGtleGVjX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworIMKgIGludCBy ZXQsIHZhbDsKKworIMKgIHJldCA9IGtzdHJ0b2ludChidWYsIDEwLCAmdmFsKTsKKyDCoCBpZiAo cmV0IDwgMCkKKyDCoCDCoCDCoCByZXR1cm4gcmV0OworCisgwqAgaWYgKHZhbCAhPSAwICYmIHZh bCAhPSAxKQorIMKgIMKgIMKgIHJldHVybiAtRUlOVkFMOworCisgwqAgbGlsaXVtX2tleGVjX2Vu YWJsZWQgPSB2YWw7CisgwqAgcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBjbG9u ZV9lbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKyDCoCByZXR1 cm4gc3lzZnNfZW1pdChidWYsICIlZFxuIiwgbGlsaXVtX2Nsb25lX2VuYWJsZWQpOworfQorCitz dGF0aWMgc3NpemVfdCBjbG9uZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAor IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sK KyDCoCBpbnQgcmV0LCB2YWw7CisKKyDCoCByZXQgPSBrc3RydG9pbnQoYnVmLCAxMCwgJnZhbCk7 CisgwqAgaWYgKHJldCA8IDApCisgwqAgwqAgwqAgcmV0dXJuIHJldDsKKworIMKgIGlmICh2YWwg IT0gMCAmJiB2YWwgIT0gMSkKKyDCoCDCoCDCoCByZXR1cm4gLUVJTlZBTDsKKworIMKgIGxpbGl1 bV9jbG9uZV9lbmFibGVkID0gdmFsOworIMKgIHJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNz aXplX3QgbW9kdWxlX2VuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikK K3sKKyDCoCByZXR1cm4gc3lzZnNfZW1pdChidWYsICIlZFxuIiwgbGlsaXVtX21vZHVsZV9lbmFi bGVkKTsKK30KKworc3RhdGljIHNzaXplX3QgbW9kdWxlX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtv YmplY3QgKmtvYmosCisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzdHJ1Y3Qga29ial9hdHRy aWJ1dGUgKmF0dHIsCisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjb25zdCBjaGFyICpidWYs IHNpemVfdCBjb3VudCkKK3sKKyDCoCBpbnQgcmV0LCB2YWw7CisKKyDCoCByZXQgPSBrc3RydG9p bnQoYnVmLCAxMCwgJnZhbCk7CisgwqAgaWYgKHJldCA8IDApCisgwqAgwqAgwqAgcmV0dXJuIHJl dDsKKworIMKgIGlmICh2YWwgIT0gMCAmJiB2YWwgIT0gMSkKKyDCoCDCoCDCoCByZXR1cm4gLUVJ TlZBTDsKKworIMKgIGxpbGl1bV9tb2R1bGVfZW5hYmxlZCA9IHZhbDsKKyDCoCByZXR1cm4gY291 bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG9wZW5fZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0 ICprb2JqLAorIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0 ciwgY2hhciAqYnVmKQoreworIMKgIHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgIiVkXG4iLCBsaWxp dW1fb3Blbl9lbmFibGVkKTsKK30KKworc3RhdGljIHNzaXplX3Qgb3Blbl9lbmFibGVkX3N0b3Jl KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3RydWN0IGtv YmpfYXR0cmlidXRlICphdHRyLAorIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY29uc3QgY2hhciAq YnVmLCBzaXplX3QgY291bnQpCit7CisgwqAgaW50IHJldCwgdmFsOworCisgwqAgcmV0ID0ga3N0 cnRvaW50KGJ1ZiwgMTAsICZ2YWwpOworIMKgIGlmIChyZXQgPCAwKQorIMKgIMKgIMKgIHJldHVy biByZXQ7CisKKyDCoCBpZiAodmFsICE9IDAgJiYgdmFsICE9IDEpCisgwqAgwqAgwqAgcmV0dXJu IC1FSU5WQUw7CisKKyDCoCBsaWxpdW1fb3Blbl9lbmFibGVkID0gdmFsOworIMKgIHJldHVybiBj b3VudDsKK30KKworc3RhdGljIHNzaXplX3QgaW9jdGxfZW5hYmxlZF9zaG93KHN0cnVjdCBrb2Jq ZWN0ICprb2JqLAorIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3RydWN0IGtvYmpfYXR0cmlidXRl ICphdHRyLCBjaGFyICpidWYpCit7CisgwqAgcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAiJWRcbiIs IGxpbGl1bV9pb2N0bF9lbmFibGVkKTsKK30KKworc3RhdGljIHNzaXplX3QgaW9jdGxfZW5hYmxl ZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBz dHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY29u c3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisgwqAgaW50IHJldCwgdmFsOworCisgwqAg cmV0ID0ga3N0cnRvaW50KGJ1ZiwgMTAsICZ2YWwpOworIMKgIGlmIChyZXQgPCAwKQorIMKgIMKg IMKgIHJldHVybiByZXQ7CisKKyDCoCBpZiAodmFsICE9IDAgJiYgdmFsICE9IDEpCisgwqAgwqAg wqAgcmV0dXJuIC1FSU5WQUw7CisKKyDCoCBsaWxpdW1faW9jdGxfZW5hYmxlZCA9IHZhbDsKKyDC oCByZXR1cm4gY291bnQ7Cit9CisKKy8qIERlZmluZSBzeXNmcyBhdHRyaWJ1dGVzICovCitzdGF0 aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHB0cmFjZV9hdHRyID0KKyDCoCBfX0FUVFIocHRyYWNl X2VuYWJsZWQsIDA2NDQsIHB0cmFjZV9lbmFibGVkX3Nob3csIHB0cmFjZV9lbmFibGVkX3N0b3Jl KTsKK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbXByb3RlY3RfYXR0ciA9CisgwqAgX19B VFRSKG1wcm90ZWN0X2VuYWJsZWQsIDA2NDQsIG1wcm90ZWN0X2VuYWJsZWRfc2hvdywgbXByb3Rl Y3RfZW5hYmxlZF9zdG9yZSk7CitzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtleGVjX2F0 dHIgPQorIMKgIF9fQVRUUihrZXhlY19lbmFibGVkLCAwNjQ0LCBrZXhlY19lbmFibGVkX3Nob3cs IGtleGVjX2VuYWJsZWRfc3RvcmUpOworc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjbG9u ZV9hdHRyID0KKyDCoCBfX0FUVFIoY2xvbmVfZW5hYmxlZCwgMDY0NCwgY2xvbmVfZW5hYmxlZF9z aG93LCBjbG9uZV9lbmFibGVkX3N0b3JlKTsKK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUg bW9kdWxlX2F0dHIgPQorIMKgIF9fQVRUUihtb2R1bGVfZW5hYmxlZCwgMDY0NCwgbW9kdWxlX2Vu YWJsZWRfc2hvdywgbW9kdWxlX2VuYWJsZWRfc3RvcmUpOworc3RhdGljIHN0cnVjdCBrb2JqX2F0 dHJpYnV0ZSBvcGVuX2F0dHIgPQorIMKgIF9fQVRUUihvcGVuX2VuYWJsZWQsIDA2NDQsIG9wZW5f ZW5hYmxlZF9zaG93LCBvcGVuX2VuYWJsZWRfc3RvcmUpOworc3RhdGljIHN0cnVjdCBrb2JqX2F0 dHJpYnV0ZSBpb2N0bF9hdHRyID0KKyDCoCBfX0FUVFIoaW9jdGxfZW5hYmxlZCwgMDY0NCwgaW9j dGxfZW5hYmxlZF9zaG93LCBpb2N0bF9lbmFibGVkX3N0b3JlKTsKKworLyogQXR0cmlidXRlIGdy b3VwICovCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbGlsaXVtX2F0dHJzW10gPSB7CisgwqAg JnB0cmFjZV9hdHRyLmF0dHIsCisgwqAgJm1wcm90ZWN0X2F0dHIuYXR0ciwKKyDCoCAma2V4ZWNf YXR0ci5hdHRyLAorIMKgICZjbG9uZV9hdHRyLmF0dHIsCisgwqAgJm1vZHVsZV9hdHRyLmF0dHIs CisgwqAgJm9wZW5fYXR0ci5hdHRyLAorIMKgICZpb2N0bF9hdHRyLmF0dHIsCisgwqAgTlVMTCwK K307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxpbGl1bV9hdHRyX2dyb3VwID0g eworIMKgIC5hdHRycyA9IGxpbGl1bV9hdHRycywKK307CisKKy8qIExTTSBIb29rIEltcGxlbWVu dGF0aW9ucyAqLworCitzdGF0aWMgaW50IGxpbGl1bV9wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVj dCB0YXNrX3N0cnVjdCAqY2hpbGQsCisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB1bnNp Z25lZCBpbnQgbW9kZSkKK3sKKyDCoCBpZiAoIWxpbGl1bV9wdHJhY2VfZW5hYmxlZCkKKyDCoCDC oCDCoCByZXR1cm4gMDsKKworIMKgIC8qIEltcGxlbWVudCBjb250ZXh0dWFsIGxvZ2ljIGZvciBw dHJhY2UgcmVzdHJpY3Rpb25zICovCisgwqAgaWYgKG1vZGUgJiBQVFJBQ0VfTU9ERV9BVFRBQ0gp IHsKKyDCoCDCoCDCoCAvKiBBbGxvdyBpZiBjYWxsZXIgaGFzIENBUF9TWVNfUFRSQUNFICovCisg wqAgwqAgwqAgaWYgKGNhcGFibGUoQ0FQX1NZU19QVFJBQ0UpKQorIMKgIMKgIMKgIMKgIMKgIHJl dHVybiAwOworIMKgIMKgIMKgCisgwqAgwqAgwqAgLyogRGVueSBwdHJhY2UgYWNjZXNzICovCisg wqAgwqAgwqAgcmV0dXJuIC1FUEVSTTsKKyDCoCB9CisKKyDCoCByZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBsaWxpdW1fZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwK KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHVuc2lnbmVkIGxvbmcgcmVxcHJvdCwKKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoHVuc2lnbmVkIGxvbmcgcHJvdCkKK3sKKyDCoCBpZiAoIWxp bGl1bV9tcHJvdGVjdF9lbmFibGVkKQorIMKgIMKgIMKgIHJldHVybiAwOworCisgwqAgLyogSW1w bGVtZW50IGNvbnRleHR1YWwgbG9naWMgZm9yIG1wcm90ZWN0IHJlc3RyaWN0aW9ucyAqLworIMKg IGlmICgocHJvdCAmIFBST1RfRVhFQykgJiYgISh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykpIHsK KyDCoCDCoCDCoCAvKiBBbGxvdyBpZiBjYWxsZXIgaGFzIENBUF9TWVNfQURNSU4gKi8KKyDCoCDC oCDCoCBpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKyDCoCDCoCDCoCDCoCDCoCByZXR1cm4g MDsKKyDCoCDCoCDCoAorIMKgIMKgIMKgIC8qIERlbnkgbWFraW5nIG5vbi1leGVjdXRhYmxlIG1l bW9yeSBleGVjdXRhYmxlICovCisgwqAgwqAgwqAgcmV0dXJuIC1FUEVSTTsKKyDCoCB9CisKKyDC oCByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaWxpdW1fbW1hcF9maWxlKHN0cnVjdCBmaWxl ICpmaWxlLCB1bnNpZ25lZCBsb25nIHJlcXByb3QsCisgwqAgwqAgwqAgwqAgwqAgwqAgwqB1bnNp Z25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisgwqAgaWYgKCFsaWxpdW1f bXByb3RlY3RfZW5hYmxlZCkKKyDCoCDCoCDCoCByZXR1cm4gMDsKKworIMKgIC8qIEltcGxlbWVu dCBjb250ZXh0dWFsIGxvZ2ljIGZvciBtbWFwIHJlc3RyaWN0aW9ucyAqLworIMKgIGlmICgocHJv dCAmIFBST1RfRVhFQykgJiYgKGZsYWdzICYgTUFQX0FOT05ZTU9VUykpIHsKKyDCoCDCoCDCoCAv KiBBbGxvdyBpZiBjYWxsZXIgaGFzIENBUF9TWVNfQURNSU4gKi8KKyDCoCDCoCDCoCBpZiAoY2Fw YWJsZShDQVBfU1lTX0FETUlOKSkKKyDCoCDCoCDCoCDCoCDCoCByZXR1cm4gMDsKKyDCoCDCoCDC oAorIMKgIMKgIMKgIC8qIERlbnkgZXhlY3V0YWJsZSBhbm9ueW1vdXMgbWFwcGluZ3MgKi8KKyDC oCDCoCDCoCByZXR1cm4gLUVQRVJNOworIMKgIH0KKworIMKgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGxpbGl1bV90YXNrX2NyZWF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQoreworIMKgIGlm ICghbGlsaXVtX2Nsb25lX2VuYWJsZWQpCisgwqAgwqAgwqAgcmV0dXJuIDA7CisKKyDCoCAvKiBJ bXBsZW1lbnQgY29udGV4dHVhbCBsb2dpYyBmb3IgY2xvbmUgcmVzdHJpY3Rpb25zICovCisgwqAg LyogVGhpcyBpcyBhIHBsYWNlaG9sZGVyIC0gYWN0dWFsIGltcGxlbWVudGF0aW9uIHdvdWxkIGNo ZWNrCisgwqAgwqAqIHNwZWNpZmljIGNsb25lIGZsYWdzIG9yIG5hbWVzcGFjZSBjcmVhdGlvbgor IMKgIMKgKi8KKyDCoAorIMKgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpbGl1bV90YXNr X2ZpeF9zZXR1aWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgc3RydWN0IGNyZWQgKm5ldywKKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNvbnN0IHN0 cnVjdCBjcmVkICpvbGQsCisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpbnQgZmxhZ3MpCit7Cisg wqAgaWYgKCFsaWxpdW1fY2xvbmVfZW5hYmxlZCkKKyDCoCDCoCDCoCByZXR1cm4gMDsKKworIMKg IC8qIEltcGxlbWVudCBjb250ZXh0dWFsIGxvZ2ljIGZvciB1bnNoYXJlIHJlc3RyaWN0aW9ucyAq LworIMKgIC8qIFRoaXMgaXMgYSBwbGFjZWhvbGRlciAtIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB3 b3VsZCBjaGVjaworIMKgIMKgKiBzcGVjaWZpYyB1bnNoYXJlIGZsYWdzIG9yIG5hbWVzcGFjZSBj cmVhdGlvbgorIMKgIMKgKi8KKyDCoAorIMKgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxp bGl1bV9rZXJuZWxfbW9kdWxlX3JlcXVlc3QoY2hhciAqa21vZF9uYW1lKQoreworIMKgIGlmICgh bGlsaXVtX21vZHVsZV9lbmFibGVkKQorIMKgIMKgIMKgIHJldHVybiAwOworCisgwqAgLyogSW1w bGVtZW50IGNvbnRleHR1YWwgbG9naWMgZm9yIG1vZHVsZSBsb2FkaW5nIHJlc3RyaWN0aW9ucyAq LworIMKgIC8qIEFsbG93IGlmIGNhbGxlciBoYXMgQ0FQX1NZU19NT0RVTEUgKi8KKyDCoCBpZiAo Y2FwYWJsZShDQVBfU1lTX01PRFVMRSkpCisgwqAgwqAgwqAgcmV0dXJuIDA7CisgwqAKKyDCoCAv KiBEZW55IG1vZHVsZSBsb2FkaW5nICovCisgwqAgcmV0dXJuIC1FUEVSTTsKK30KKworc3RhdGlj IGludCBsaWxpdW1fa2VybmVsX21vZHVsZV9mcm9tX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpCit7 CisgwqAgaWYgKCFsaWxpdW1fbW9kdWxlX2VuYWJsZWQpCisgwqAgwqAgwqAgcmV0dXJuIDA7CisK KyDCoCAvKiBJbXBsZW1lbnQgY29udGV4dHVhbCBsb2dpYyBmb3IgbW9kdWxlIGxvYWRpbmcgcmVz dHJpY3Rpb25zICovCisgwqAgLyogQWxsb3cgaWYgY2FsbGVyIGhhcyBDQVBfU1lTX01PRFVMRSAq LworIMKgIGlmIChjYXBhYmxlKENBUF9TWVNfTU9EVUxFKSkKKyDCoCDCoCDCoCByZXR1cm4gMDsK KyDCoAorIMKgIC8qIERlbnkgbW9kdWxlIGxvYWRpbmcgKi8KKyDCoCByZXR1cm4gLUVQRVJNOwor fQorCitzdGF0aWMgaW50IGxpbGl1bV9maWxlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7Cisg wqAgaWYgKCFsaWxpdW1fb3Blbl9lbmFibGVkKQorIMKgIMKgIMKgIHJldHVybiAwOworCisgwqAg LyogSW1wbGVtZW50IGNvbnRleHR1YWwgbG9naWMgZm9yIGZpbGUgb3BlbiByZXN0cmljdGlvbnMg Ki8KKyDCoCAvKiBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgLSBhY3R1YWwgaW1wbGVtZW50YXRpb24g d291bGQgY2hlY2sKKyDCoCDCoCogc3BlY2lmaWMgZmlsZSBwYXRocyBvciBhdHRyaWJ1dGVzCisg wqAgwqAqLworIMKgCisgwqAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGlsaXVtX2ZpbGVf aW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisgwqAgwqAgwqAgwqAg wqAgwqAgwqAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisgwqAgaWYgKCFsaWxpdW1faW9jdGxfZW5h YmxlZCkKKyDCoCDCoCDCoCByZXR1cm4gMDsKKworIMKgIC8qIEltcGxlbWVudCBjb250ZXh0dWFs IGxvZ2ljIGZvciBpb2N0bCByZXN0cmljdGlvbnMgKi8KKyDCoCAvKiBUaGlzIGlzIGEgcGxhY2Vo b2xkZXIgLSBhY3R1YWwgaW1wbGVtZW50YXRpb24gd291bGQgY2hlY2sKKyDCoCDCoCogc3BlY2lm aWMgaW9jdGwgY29tbWFuZHMKKyDCoCDCoCovCisgwqAKKyDCoCByZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBsaWxpdW1fc2JfbW91bnQoY29uc3QgY2hhciAqZGV2X25hbWUsIGNvbnN0IHN0cnVj dCBwYXRoICpwYXRoLAorIMKgIMKgIMKgIMKgIMKgIMKgIGNvbnN0IGNoYXIgKnR5cGUsIHVuc2ln bmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmRhdGEpCit7CisgwqAgaWYgKCFsaWxpdW1fb3Blbl9lbmFi bGVkKQorIMKgIMKgIMKgIHJldHVybiAwOworCisgwqAgLyogSW1wbGVtZW50IGNvbnRleHR1YWwg bG9naWMgZm9yIG1vdW50IHJlc3RyaWN0aW9ucyAqLworIMKgIC8qIFRoaXMgaXMgYSBwbGFjZWhv bGRlciAtIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBjaGVjaworIMKgIMKgKiBzcGVjaWZp YyBtb3VudCBmbGFncyBvciBmaWxlc3lzdGVtIHR5cGVzCisgwqAgwqAqLworIMKgCisgwqAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGlsaXVtX2tleGVjX2tlcm5lbF9sb2FkKHN0cnVjdCBr aW1hZ2UgKmltYWdlKQoreworIMKgIGlmICghbGlsaXVtX2tleGVjX2VuYWJsZWQpCisgwqAgwqAg wqAgcmV0dXJuIDA7CisKKyDCoCAvKiBJbXBsZW1lbnQgY29udGV4dHVhbCBsb2dpYyBmb3Iga2V4 ZWNfbG9hZCByZXN0cmljdGlvbnMgKi8KKyDCoCAvKiBBbGxvdyBpZiBjYWxsZXIgaGFzIENBUF9T WVNfQk9PVCAqLworIMKgIGlmIChjYXBhYmxlKENBUF9TWVNfQk9PVCkpCisgwqAgwqAgwqAgcmV0 dXJuIDA7CisgwqAKKyDCoCAvKiBEZW55IGtleGVjX2xvYWQgKi8KKyDCoCByZXR1cm4gLUVQRVJN OworfQorCisvKiBMU00gSG9vayBEZWZpbml0aW9ucyAqLworc3RhdGljIHN0cnVjdCBzZWN1cml0 eV9ob29rX2xpc3QgbGlsaXVtX2hvb2tzW10gPSB7CisgwqAgTFNNX0hPT0tfSU5JVChwdHJhY2Vf YWNjZXNzX2NoZWNrLCBsaWxpdW1fcHRyYWNlX2FjY2Vzc19jaGVjayksCisgwqAgTFNNX0hPT0tf SU5JVChmaWxlX21wcm90ZWN0LCBsaWxpdW1fZmlsZV9tcHJvdGVjdCksCisgwqAgTFNNX0hPT0tf SU5JVChtbWFwX2ZpbGUsIGxpbGl1bV9tbWFwX2ZpbGUpLAorIMKgIExTTV9IT09LX0lOSVQodGFz a19jcmVhdGUsIGxpbGl1bV90YXNrX2NyZWF0ZSksCisgwqAgTFNNX0hPT0tfSU5JVCh0YXNrX2Zp eF9zZXR1aWQsIGxpbGl1bV90YXNrX2ZpeF9zZXR1aWQpLAorIMKgIExTTV9IT09LX0lOSVQoa2Vy bmVsX21vZHVsZV9yZXF1ZXN0LCBsaWxpdW1fa2VybmVsX21vZHVsZV9yZXF1ZXN0KSwKKyDCoCBM U01fSE9PS19JTklUKGtlcm5lbF9tb2R1bGVfZnJvbV9maWxlLCBsaWxpdW1fa2VybmVsX21vZHVs ZV9mcm9tX2ZpbGUpLAorIMKgIExTTV9IT09LX0lOSVQoZmlsZV9vcGVuLCBsaWxpdW1fZmlsZV9v cGVuKSwKKyDCoCBMU01fSE9PS19JTklUKGZpbGVfaW9jdGwsIGxpbGl1bV9maWxlX2lvY3RsKSwK KyDCoCBMU01fSE9PS19JTklUKHNiX21vdW50LCBsaWxpdW1fc2JfbW91bnQpLAorIMKgIExTTV9I T09LX0lOSVQoa2V4ZWNfa2VybmVsX2xvYWQsIGxpbGl1bV9rZXhlY19rZXJuZWxfbG9hZCksCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGxzbV9pZCBsaWxpdW1fbHNtaWQgPSB7CisgwqAgLm5h bWUgPSAibGlsaXVtIiwKKyDCoCAuaWQgPSBMU01fSURfTUFKT1JfTUFYLAorfTsKKworc3RhdGlj IHZvaWQgbGlsaXVtX2V4aXQodm9pZCkKK3sKKyDCoCBpZiAobGlsaXVtX2tvYmopIHsKKyDCoCDC oCDCoCBzeXNmc19yZW1vdmVfZ3JvdXAobGlsaXVtX2tvYmosICZsaWxpdW1fYXR0cl9ncm91cCk7 CisgwqAgwqAgwqAga29iamVjdF9wdXQobGlsaXVtX2tvYmopOworIMKgIH0KK30KKworc3RhdGlj IGludCBfX2luaXQgbGlsaXVtX2luaXQodm9pZCkKK3sKKyDCoCBpbnQgcmV0OworCisgwqAgLyog Q3JlYXRlIHN5c2ZzIGludGVyZmFjZSAqLworIMKgIGxpbGl1bV9rb2JqID0ga29iamVjdF9jcmVh dGVfYW5kX2FkZCgibGlsaXVtIiwga2VybmVsX2tvYmopOworIMKgIGlmICghbGlsaXVtX2tvYmop CisgwqAgwqAgwqAgcmV0dXJuIC1FTk9NRU07CisKKyDCoCByZXQgPSBzeXNmc19jcmVhdGVfZ3Jv dXAobGlsaXVtX2tvYmosICZsaWxpdW1fYXR0cl9ncm91cCk7CisgwqAgaWYgKHJldCkgeworIMKg IMKgIMKgIGtvYmplY3RfcHV0KGxpbGl1bV9rb2JqKTsKKyDCoCDCoCDCoCByZXR1cm4gcmV0Owor IMKgIH0KKworIMKgIC8qIFJlZ2lzdGVyIExTTSBob29rcyAqLworIMKgIHNlY3VyaXR5X2FkZF9o b29rcyhsaWxpdW1faG9va3MsIEFSUkFZX1NJWkUobGlsaXVtX2hvb2tzKSwgJmxpbGl1bV9sc21p ZCk7CisKKyDCoCBwcl9pbmZvKCJMaWxpdW06IExpbnV4IEludGVncml0eSBMb2NrLUluIFVzZXIg TW9kdWxlIGluaXRpYWxpemVkXG4iKTsKKyDCoCByZXR1cm4gMDsKK30KKworc2VjdXJpdHlfaW5p dGNhbGwobGlsaXVtX2luaXQpOworbW9kdWxlX2V4aXQobGlsaXVtX2V4aXQpOworCitNT0RVTEVf REVTQ1JJUFRJT04oIkxpbGl1bSAoTGludXggSW50ZWdyaXR5IExvY2stSW4gVXNlciBNb2R1bGUp Iik7CitNT0RVTEVfQVVUSE9SKCJFbnpvIEZ1a2UiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIi KTsKKwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvbGlsaXVtL2xpbGl1bV9ydXN0LnJzIGIvc2VjdXJp dHkvbGlsaXVtL2xpbGl1bV9ydXN0LnJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjc5MDFkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9saWxpdW0vbGlsaXVtX3J1 c3QucnMKQEAgLTAsMCArMSw4MyBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAtb25seSAqLworLyoKKyAqIExpbGl1bSAoTGludXggSW50ZWdyaXR5IExvY2stSW4gVXNlciBN b2R1bGUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMjUgRW56byBGdWtlCisgKi8KKworCit1c2Uga2Vy bmVsOjpwcmVsdWRlOjoqOwordXNlIGtlcm5lbDo6c2VjdXJpdHk7Cit1c2Uga2VybmVsOjpmaWxl OjpGaWxlOwordXNlIGtlcm5lbDo6dGFzazo6VGFzazsKK3VzZSBrZXJuZWw6OmNyZWQ6OkNyZWRl bnRpYWw7CisKK2NvbnN0IExJTElVTV9GRUFUVVJFX0RJU0FCTEVEOiBpMzIgPSAwOworY29uc3Qg TElMSVVNX0ZFQVRVUkVfRU5BQkxFRDogaTMyID0gMTsKKworZXh0ZXJuICJDIiB7CisgwqAgwqBz dGF0aWMgbGlsaXVtX3B0cmFjZV9lbmFibGVkOiBpMzI7CisgwqAgwqBzdGF0aWMgbGlsaXVtX21w cm90ZWN0X2VuYWJsZWQ6IGkzMjsKKyDCoCDCoHN0YXRpYyBsaWxpdW1fa2V4ZWNfZW5hYmxlZDog aTMyOworIMKgIMKgc3RhdGljIGxpbGl1bV9jbG9uZV9lbmFibGVkOiBpMzI7CisgwqAgwqBzdGF0 aWMgbGlsaXVtX21vZHVsZV9lbmFibGVkOiBpMzI7CisgwqAgwqBzdGF0aWMgbGlsaXVtX29wZW5f ZW5hYmxlZDogaTMyOworIMKgIMKgc3RhdGljIGxpbGl1bV9pb2N0bF9lbmFibGVkOiBpMzI7Cit9 CisKK3B1YiBzdHJ1Y3QgTGlsaXVtT3BzOworCitpbXBsIHNlY3VyaXR5OjpTZWN1cml0eUhvb2tz IGZvciBMaWxpdW1PcHMgeworIMKgIMKgZm4gcHRyYWNlX2FjY2Vzc19jaGVjaygKKyDCoCDCoCDC oCDCoCZzZWxmLAorIMKgIMKgIMKgIMKgY2hpbGQ6ICZUYXNrLAorIMKgIMKgIMKgIMKgbW9kZTog dTMyLAorIMKgIMKgKSAtPiBSZXN1bHQ8c2VjdXJpdHk6OlNlY3VyaXR5SG9va1Jlc3VsdD4gewor IMKgIMKgIMKgIMKgaWYgdW5zYWZlIHsgbGlsaXVtX3B0cmFjZV9lbmFibGVkIH0gPT0gTElMSVVN X0ZFQVRVUkVfRElTQUJMRUQgeworIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIE9rKHNlY3VyaXR5 OjpTZWN1cml0eUhvb2tSZXN1bHQ6OkRlZmF1bHQpOworIMKgIMKgIMKgIMKgfQorCisgwqAgwqAg wqAgwqBpZiBtb2RlICYgc2VjdXJpdHk6OlBUUkFDRV9NT0RFX0FUVEFDSCAhPSAwIHsKKyDCoCDC oCDCoCDCoCDCoCDCoGlmIGtlcm5lbDo6Y3VycmVudF9jcmVkKCkuaGFzX2NhcGFiaWxpdHkoa2Vy bmVsOjpDQVBfU1lTX1BUUkFDRSkgeworIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIE9r KHNlY3VyaXR5OjpTZWN1cml0eUhvb2tSZXN1bHQ6OkRlZmF1bHQpOworIMKgIMKgIMKgIMKgIMKg IMKgfQorIMKgIMKgIMKgIMKgIMKgIMKgCisgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gT2soc2Vj dXJpdHk6OlNlY3VyaXR5SG9va1Jlc3VsdDo6UmVqZWN0KTsKKyDCoCDCoCDCoCDCoH0KKworIMKg IMKgIMKgIMKgT2soc2VjdXJpdHk6OlNlY3VyaXR5SG9va1Jlc3VsdDo6RGVmYXVsdCkKKyDCoCDC oH0KKworIMKgIMKgZm4gZmlsZV9tcHJvdGVjdCgKKyDCoCDCoCDCoCDCoCZzZWxmLAorIMKgIMKg IMKgIMKgdm1hOiAma2VybmVsOjptbTo6VmlydHVhbE1lbW9yeUFyZWEsCisgwqAgwqAgwqAgwqBy ZXFwcm90OiB1NjQsCisgwqAgwqAgwqAgwqBwcm90OiB1NjQsCisgwqAgwqApIC0+IFJlc3VsdDxz ZWN1cml0eTo6U2VjdXJpdHlIb29rUmVzdWx0PiB7CisgwqAgwqAgwqAgwqBpZiB1bnNhZmUgeyBs aWxpdW1fbXByb3RlY3RfZW5hYmxlZCB9ID09IExJTElVTV9GRUFUVVJFX0RJU0FCTEVEIHsKKyDC oCDCoCDCoCDCoCDCoCDCoHJldHVybiBPayhzZWN1cml0eTo6U2VjdXJpdHlIb29rUmVzdWx0OjpE ZWZhdWx0KTsKKyDCoCDCoCDCoCDCoH0KKworIMKgIMKgIMKgIMKgaWYgKHByb3QgJiBrZXJuZWw6 Om1tOjpQUk9UX0VYRUMpICE9IDAgJiYgKHZtYS5mbGFncygpICYga2VybmVsOjptbTo6Vk1fRVhF QykgPT0gMCB7CisgwqAgwqAgwqAgwqAgwqAgwqBpZiBrZXJuZWw6OmN1cnJlbnRfY3JlZCgpLmhh c19jYXBhYmlsaXR5KGtlcm5lbDo6Q0FQX1NZU19BRE1JTikgeworIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgcmV0dXJuIE9rKHNlY3VyaXR5OjpTZWN1cml0eUhvb2tSZXN1bHQ6OkRlZmF1bHQpOwor IMKgIMKgIMKgIMKgIMKgIMKgfQorIMKgIMKgIMKgIMKgIMKgIMKgCisgwqAgwqAgwqAgwqAgwqAg wqByZXR1cm4gT2soc2VjdXJpdHk6OlNlY3VyaXR5SG9va1Jlc3VsdDo6UmVqZWN0KTsKKyDCoCDC oCDCoCDCoH0KKworIMKgIMKgIMKgIMKgT2soc2VjdXJpdHk6OlNlY3VyaXR5SG9va1Jlc3VsdDo6 RGVmYXVsdCkKKyDCoCDCoH0KKworIMKgIMKgZm4gZmlsZV9vcGVuKAorIMKgIMKgIMKgIMKgJnNl bGYsCisgwqAgwqAgwqAgwqBmaWxlOiAmRmlsZSwKKyDCoCDCoCkgLT4gUmVzdWx0PHNlY3VyaXR5 OjpTZWN1cml0eUhvb2tSZXN1bHQ+IHsKKyDCoCDCoCDCoCDCoGlmIHVuc2FmZSB7IGxpbGl1bV9v cGVuX2VuYWJsZWQgfSA9PSBMSUxJVU1fRkVBVFVSRV9ESVNBQkxFRCB7CisgwqAgwqAgwqAgwqAg wqAgwqByZXR1cm4gT2soc2VjdXJpdHk6OlNlY3VyaXR5SG9va1Jlc3VsdDo6RGVmYXVsdCk7Cisg wqAgwqAgwqAgwqB9CisKKworIMKgIMKgIMKgIMKgT2soc2VjdXJpdHk6OlNlY3VyaXR5SG9va1Jl c3VsdDo6RGVmYXVsdCkKKyDCoCDCoH0KK30KKwotLQoyLjQ5LjAK