From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id AD57A474FF for ; Sun, 10 Dec 2023 16:00:10 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8427068D148; Sun, 10 Dec 2023 17:58:58 +0200 (EET) Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2071.outbound.protection.outlook.com [40.92.52.71]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D037A68D12F for ; Sun, 10 Dec 2023 17:58:52 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nQTUVj68uuqbisHzLfE/d2gHmSZq9EavqfwOrM1AKpLNaxKKpTBdVD5CVSgwowkFeogV/bn95Cwl3K0i7uIMF8xUxscbMk9zQwKiIaH8WOijNwqBvYnqpeVxb2fBWxyIivJR7EXWkb2U5xyAfcbAlgnkwpNymmr6FzmAGMmUCWPsPoYMqMSs21S8IFANuyuEwuJSQwTqehmDwbXUkRu2IH9dBsnbDaNP4Ev3EqaGuMbh08+LGFdf2RRIx97Jd6MQpVItUQ2UqeEjqO577zqB59UZ0dKmG/v7Pm+WlHdI7bb6F41VW39XHAgUHgeipasLZZ/AFtVC/AqDnc/6qk+Rbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=VoemqPbVW5WrWz3IhXnvP41NI9SxirPL6i3iTLetceI=; b=C60LfNh7Zonl/KrMrWTt2qqdMFcFo5UAyT8ue2PpXdYlYQKrDFCkklIOthF2PZhP4Fah2+je//r6zTKI7GAw5hN13fXZgKZ5GgWwLJ6/u6QnRTym7aXiIzcvMsahDtcEF8jkBtAXSXfdaX4zL43IQjiaf0OjxKwbs0MThINQQ2l0tnxAf7pjQvJeX4ksg1R7p8KHLpHR/zbLgLpT3RPUjjT9PNEWM4YfVJOynGyj8N/b300Mskbh+cs+SYSkdCiUKE7zMZ4+lXu5xJMgzUrZzfIFkSPrI4NFP2ccJlLVrJQQg/Dz4+mw5xF7RoOlrNg/s3qsFgpWIZFtCslUmrwzAg== 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=VoemqPbVW5WrWz3IhXnvP41NI9SxirPL6i3iTLetceI=; b=W25EeYcsPXL31A/8a1dPjfPkYm7tJBPeqnCiGVY2f+DE60BChRiYd83YRPYmbaK1cDWagFB01CCVgMc4M9Im6t7ndjzSAamGSltdAds+tdAGdGIDeViDq2RZsS3FkwRafyN1I9CE2grD45R+sQTrKbUsO2zSpybUn2+CCqSGt+xhqoAojDz15Ho3nhPPoMeX1lP2cL3XM/1kZKyXJ3nxiBtZxhxVti7EuUHdGeQOj9//CJj2DjbQSszDBNDCiJ5YdgdjIXvsZ7iKrpGnyVnHDUqJhhyxCzIgMlkO3RGWU/Urda/l8qo3A1yDUewswrmk6zviKPTypl7uBHp2s3V/Og== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by SI6PR06MB7272.apcprd06.prod.outlook.com (2603:1096:4:246::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.32; Sun, 10 Dec 2023 15:58:27 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::80b3:be24:949c:e49f]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::80b3:be24:949c:e49f%4]) with mapi id 15.20.7068.030; Sun, 10 Dec 2023 15:58:26 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sun, 10 Dec 2023 23:58:03 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231210155807.4583-1-nuomi2021@gmail.com> References: <20231210155807.4583-1-nuomi2021@gmail.com> X-TMN: [uyZ5ZkNu5VB7QaScWE/97gO0tSNBsGH7] X-ClientProxiedBy: SI2PR02CA0051.apcprd02.prod.outlook.com (2603:1096:4:196::10) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20231210155807.4583-10-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|SI6PR06MB7272:EE_ X-MS-Office365-Filtering-Correlation-Id: 928bc842-0108-433a-eda8-08dbf998d795 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: X8DGNvQdGWP0M9ZZ40BIV/m/xdDXYmmWceeqa1cLvZCaCdOJwVX8XEJ9JyG1+YJT5/GNVfuBBSLncJPDZH3vMo8QHsVECYG2OpO09Logsm713NbIRNUq8ejDsHgtmPIq6jNmdq8/JQgJ88aNp5gsTTxvKvwcgaK2SR2dF53+TeWDgxhTjbegnVMclTAPkGSRjzj6ejof3f8cidtXbGX6N32Fz6UJhvtlnxMGVOO0WOf1rF/g9h0LqbRro6MsOzugQyaZMxsQvi4fRQodHUd2Nb6n4921aEB/2KH3LcjXfcsDGC0TFawVXbor5D5DuXkQin3q8yoYnLtROgxBNjTsD9X8IeGpLxAmu6LGPIiaqIzve8ZbEyGGbrLJhBWxrKvK5eo1I4GjPupAr07DySl6+nBjZNspve3bYRsJYMvdOOfbD6Ly3jC642DyjcIIofsazjsDbY6SsMKZQvxLDjD1GCOye3lpKiJkj6iFR8kt/N94oV7NB6BX/FgfH6e8gxaA0jaa8S3O63nVADXOxBeHv4M5l+zftQYGIZFma6uDovbxEucUHfyzsckSCIs8Hq0mckoDUdd5iHTbtcA48MCz5ebszUaJCT2XqI/4vTzK+y4= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YVdMV2JIenpub2hNUVQzZ1E0SDg1VnM1dHVNbTZNRU93bUpjRHpGek1oaTk4?= =?utf-8?B?ZTExSTZ3d2Y5MzFxVVluMjlVZ0pCWlVQV01UaCtYSk1WTGh1dFAzZjVjak9y?= =?utf-8?B?aFRQMCtnbkx3WDB5ZklhRDBYNFNpU3dmUlZadXF6dzNmUFlOS3ZqcmlHY0Rp?= =?utf-8?B?ekh5VXg1ZUZMWmpxY29vVDAwQmRiSUZpUXRlVXBUdHN5MkN0YTNyaHVlOUNV?= =?utf-8?B?ck03YWtqQmVLaENxQ1orem5JL0kxSG9kTXlvcXZGM21aUXl1bkNmRS9CY1Iw?= =?utf-8?B?cXkxRzJPNUl5MTF5VytFSlpuaGlyV0lSbU0zYU9hT1VESWNBTlloOGFhNm9z?= =?utf-8?B?Y2o3VGtGKzIvalJRYWM3L0d3TGdVM2hoSWVNb0loWWpZNmVBdU1wUE1XZE4v?= =?utf-8?B?ODZRaTdDNWZZQkRnZ2NPNWo4U0pFSHltMnZqSjFVOW1CVTY5OWVzKzBXUVRz?= =?utf-8?B?cmxrY2ZhZ25ydSsrVmt6OVFTYitOalEvZmZFTW1VY0F6Vk9HRUZNR2xsMW85?= =?utf-8?B?RzEwMFRJSkJmVkk1S0dzclZzeC9CS0NQK1pFMzZpcWd6bm4rQ1psNCt5aDdH?= =?utf-8?B?V0NvOGF2dHlDNHRtZ2tsYnhSNldMZlJMdVM0bldtd3hpdjJMZHJZeWJYMEFF?= =?utf-8?B?UEFkVDR4MnRnYUxzQjY3VlJIOENJcktOdk5nWFRMaWw1dDU3Tjc0eGY5d1I5?= =?utf-8?B?NnNaOVgwZ0ZvcE5GajBFOHRXNDVmOWRFSkRQR2hsdVQyeS9UM0JjZERLRlBp?= =?utf-8?B?QnE5aHBZTFNzbTQ4SGJDaW9XSnpQeEVyelVzMnZpL1RJczdHa0xuZnJEUWFZ?= =?utf-8?B?WUNRamZZTitBT2NMYjNmZ25hNnQ2S3pHZE82b1NvSzdzU0hnS2tNWEJKRTdl?= =?utf-8?B?MUs5RkNQdFRTV3RvRHhacUJFTnhEWnA4K09FTWwxa0NmZVVuSXBmR1Qwc3F5?= =?utf-8?B?YUlqQVkzS1czczQvUy9LcElneCtPelhOMkJTNFp2YjZkdTJXUmI1SmpQVyty?= =?utf-8?B?MlFIZ3A5bzVnVlRpeDAyN3ZmNXJtdHBrZzZrR2N3WmFJWE0ydXNla2xla1hu?= =?utf-8?B?MzRXN2g1YWg5VUpMT2lJTGNHbzlMM3o2dnFlN01ObVd4THhZanhENVU1ejkr?= =?utf-8?B?QmtEL1dkcStjTlRabWNEaXExa0pmVGExdlI2M0RwbU5uTSs4SitUY2ZjV0lY?= =?utf-8?B?UTFGR3gwZ21JZlI1dEZ1UExQSmRBZ3pkOVhYdDBYcmNLaGphWGxaY0tycVJI?= =?utf-8?B?NXNiejFHSzNRd25aQUluTEl3Zko3WEF2U1QrU1lnM3RrbXpReSs3Qk1nazJt?= =?utf-8?B?emVBRlNSQm85WjQxS2pvL0dhUnhUYmFobVJSUk1xRWViOXRXak43R001cDI1?= =?utf-8?B?ZGEydlYxcXNrOW1ubmFrYTdRdFVVdll4aFhSV21hWHFQTmNkUkNXZnBqK3cv?= =?utf-8?B?MnhuQVVFMm9NMDdiU0lzR2o4cVVmOWFDU0pnci9YZk8xTUV3SGhZaE94RnRY?= =?utf-8?B?bmxxL2pkSmJlRnl5VFpwbTFIVzV5N3JLandDQ3daSXJKNGZSUnZUTGpZTHBQ?= =?utf-8?B?QkRtUGQyeGZwSWxPcXZROEJpcUhSUlJmZ1p0ci9ETFFZQlRnT1lRRHlPYkhG?= =?utf-8?B?aHF1Q3F5bHpMcnVoUHNVUjM1ZkU4QWxvYTA1MWhWcm54NklqdHVZUDVyQmRq?= =?utf-8?Q?zXdpYTTkQbb2zhG2IxG4?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 928bc842-0108-433a-eda8-08dbf998d795 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Dec 2023 15:58:25.2943 (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: SI6PR06MB7272 Subject: [FFmpeg-devel] [PATCH v7 10/14] vvcdec: add LMCS, Deblocking, SAO, and ALF filters X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Nuo Mi Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgICAxICsKIGxpYmF2 Y29kZWMvdnZjL3Z2Y19jdHUuaCAgICAgICAgICAgICB8ICAgIDEgKwogbGliYXZjb2RlYy92dmMv dnZjX2ZpbHRlci5jICAgICAgICAgIHwgMTM0OCArKysrKysrKysrKysrKysrKysrKysrKysrKwog bGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5oICAgICAgICAgIHwgICA3MSArKwogbGliYXZjb2Rl Yy92dmMvdnZjX2ZpbHRlcl90ZW1wbGF0ZS5jIHwgMTEzNSArKysrKysrKysrKysrKysrKysrKysr CiA1IGZpbGVzIGNoYW5nZWQsIDI1NTYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29k ZWMvdnZjL3Z2Y19maWx0ZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnZjL3Z2 Y19maWx0ZXJfdGVtcGxhdGUuYwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL01ha2VmaWxl IGIvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKaW5kZXggM2IxYWM3MjAyOS4uOWU3ZmVmN2QzOCAx MDA2NDQKLS0tIGEvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKKysrIGIvbGliYXZjb2RlYy92dmMv TWFrZWZpbGUKQEAgLTUsNiArNSw3IEBAIE9CSlMtJChDT05GSUdfVlZDX0RFQ09ERVIpICAgICAg ICAgICs9ICB2dmMvdnZjZGVjLm8gICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19jYWJhYy5vICAgICAgICAgXAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfY3R1Lm8gICAgICAgICAgIFwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2RhdGEubyAgICAg ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19m aWx0ZXIubyAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZ2Yy92dmNfaW50ZXIubyAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2dmMvdnZjX2ludHJhLm8gICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19pdHhfMWQubyAgICAgICAgXApkaWZmIC0tZ2l0 IGEvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oIGIvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oCmlu ZGV4IDU3NzEzNmIyZTIuLmU5YjE1Nzc5NWMgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvdnZjL3Z2 Y19jdHUuaAorKysgYi9saWJhdmNvZGVjL3Z2Yy92dmNfY3R1LmgKQEAgLTQ2Miw2ICs0NjIsNyBA QCB0eXBlZGVmIHN0cnVjdCBBTEZQYXJhbXMgewogdm9pZCBmZl92dmNfc2V0X25laWdoYm91cl9h dmFpbGFibGUoVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTAsIGludCB3LCBpbnQg aCk7CiB2b2lkIGZmX3Z2Y19kZWNvZGVfbmVpZ2hib3VyKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGlu dCB4X2N0YiwgaW50IHlfY3RiLCBpbnQgcngsIGludCByeSwgaW50IHJzKTsKIHZvaWQgZmZfdnZj X2N0dV9mcmVlX2N1cyhDVFUgKmN0dSk7CitpbnQgZmZfdnZjX2dldF9xUHkoY29uc3QgVlZDRnJh bWVDb250ZXh0ICpmYywgaW50IHhjLCBpbnQgeWMpOwogdm9pZCBmZl92dmNfZXBfaW5pdF9zdGF0 X2NvZWZmKEVudHJ5UG9pbnQgKmVwLCBpbnQgYml0X2RlcHRoLCBpbnQgcGVyc2lzdGVudF9yaWNl X2FkYXB0YXRpb25fZW5hYmxlZF9mbGFnKTsKIAogI2VuZGlmIC8vIEFWQ09ERUNfVlZDX1ZWQ19D VFVfSApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5jIGIvbGliYXZjb2Rl Yy92dmMvdnZjX2ZpbHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmEwZWNhN2I4NWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVy LmMKQEAgLTAsMCArMSwxMzQ4IEBACisvKgorICogVlZDIGZpbHRlcnMKKyAqCisgKiBDb3B5cmln aHQgKEMpIDIwMjEgTnVvIE1pCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgor ICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICov CisjaW5jbHVkZSAibGliYXZ1dGlsL2ZyYW1lLmgiCisKKyNpbmNsdWRlICJ2dmNfY3R1LmgiCisj aW5jbHVkZSAidnZjX2RhdGEuaCIKKyNpbmNsdWRlICJ2dmNfZmlsdGVyLmgiCisjaW5jbHVkZSAi dnZjX3JlZnMuaCIKKworI2RlZmluZSBMRUZUICAgICAgICAwCisjZGVmaW5lIFRPUCAgICAgICAg IDEKKyNkZWZpbmUgUklHSFQgICAgICAgMgorI2RlZmluZSBCT1RUT00gICAgICAzCisjZGVmaW5l IE1BWF9FREdFUyAgIDQKKworI2RlZmluZSBERUZBVUxUX0lOVFJBX1RDX09GRlNFVCAyCisKKy8v VGFibGUgNDMgRGVyaXZhdGlvbiBvZiB0aHJlc2hvbGQgdmFyaWFibGVzIGJldGEnIGFuZCB0Yycg ZnJvbSBpbnB1dCBRCitzdGF0aWMgY29uc3QgdWludDE2X3QgdGN0YWJsZVs2Nl0gPSB7CisgICAg ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg MCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDMsICAgNCwgICA0LCAgIDQs ICAgNCwgICA1LCAgIDUsICAgNSwgICA1LCAgIDcsICAgNywgICA4LCAgIDksICAxMCwKKyAgICAg MTAsICAxMSwgIDEzLCAgMTQsICAxNSwgIDE3LCAgMTksICAyMSwgIDI0LCAgMjUsICAyOSwgIDMz LCAgMzYsICA0MSwgIDQ1LCAgNTEsCisgICAgIDU3LCAgNjQsICA3MSwgIDgwLCAgODksIDEwMCwg MTEyLCAxMjUsIDE0MSwgMTU3LCAxNzcsIDE5OCwgMjIyLCAyNTAsIDI4MCwgMzE0LAorICAgIDM1 MiwgMzk1LAorCit9OworCisvL1RhYmxlIDQzIERlcml2YXRpb24gb2YgdGhyZXNob2xkIHZhcmlh YmxlcyBiZXRhJyBhbmQgdGMnIGZyb20gaW5wdXQgUQorc3RhdGljIGNvbnN0IHVpbnQ4X3QgYmV0 YXRhYmxlWzY0XSA9IHsKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgICA2LCAgIDcs ICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LCAgMTYsICAxNywgIDE4LCAg MjAsICAyMiwgIDI0LAorICAgICAyNiwgIDI4LCAgMzAsICAzMiwgIDM0LCAgMzYsICAzOCwgIDQw LCAgNDIsICA0NCwgIDQ2LCAgNDgsICA1MCwgIDUyLCAgNTQsICA1NiwKKyAgICAgNTgsICA2MCwg IDYyLCAgNjQsICA2NiwgIDY4LCAgNzAsICA3MiwgIDc0LCAgNzYsICA3OCwgIDgwLCAgODIsICA4 NCwgIDg2LCAgODgsCit9OworCisKK3N0YXRpYyBpbnQgZ2V0X3FQYyhjb25zdCBWVkNGcmFtZUNv bnRleHQgKmZjLCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IGNocm9tYSkK K3sKKyAgICBjb25zdCBpbnQgeCAgICAgICAgICAgICA9IHgwID4+IE1JTl9UVV9MT0cyOworICAg IGNvbnN0IGludCB5ICAgICAgICAgICAgID0geTAgPj4gTUlOX1RVX0xPRzI7CisgICAgY29uc3Qg aW50IG1pbl90dV93aWR0aCAgPSBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGg7CisgICAgcmV0dXJu IGZjLT50YWIucXBbY2hyb21hXVt4ICsgeSAqIG1pbl90dV93aWR0aF07Cit9CisKK3N0YXRpYyB2 b2lkIGNvcHlfY3RiKHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjLCBjb25zdCBpbnQg d2lkdGgsIGNvbnN0IGludCBoZWlnaHQsCisgICAgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUs IGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlKQoreworICAgIGZvciAoaW50IHkgPSAwOyB5IDwg aGVpZ2h0OyB5KyspIHsKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3aWR0aCk7CisKKyAgICAg ICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgIHNyYyArPSBzcmNfc3RyaWRlOworICAgIH0K K30KKworc3RhdGljIHZvaWQgY29weV9waXhlbCh1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3Qg KnNyYywgY29uc3QgaW50IHBpeGVsX3NoaWZ0KQoreworICAgIGlmIChwaXhlbF9zaGlmdCkKKyAg ICAgICAgKih1aW50MTZfdCAqKWRzdCA9ICoodWludDE2X3QgKilzcmM7CisgICAgZWxzZQorICAg ICAgICAqZHN0ID0gKnNyYzsKK30KKworc3RhdGljIHZvaWQgY29weV92ZXJ0KHVpbnQ4X3QgKmRz dCwgY29uc3QgdWludDhfdCAqc3JjLCBjb25zdCBpbnQgcGl4ZWxfc2hpZnQsIGNvbnN0IGludCBo ZWlnaHQsCisgICAgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBz cmNfc3RyaWRlKQoreworICAgIGlmIChwaXhlbF9zaGlmdCA9PSAwKSB7CisgICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKKyAgICAgICAgICAgICpkc3QgPSAqc3JjOwor ICAgICAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgICAgICBzcmMgKz0gc3JjX3N0 cmlkZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgaGVpZ2h0OyBpKyspIHsKKyAgICAgICAgICAgICoodWludDE2X3QgKilkc3QgPSAqKHVpbnQx Nl90ICopc3JjOworICAgICAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgICAgICBz cmMgKz0gc3JjX3N0cmlkZTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgY29w eV9jdGJfdG9faHYoVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgdWludDhfdCAqc3JjLAorICAg IGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNv bnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwKKyAgICBjb25zdCBpbnQgY19pZHgsIGNv bnN0IGludCB4X2N0YiwgY29uc3QgaW50IHlfY3RiLCBjb25zdCBpbnQgdG9wKQoreworICAgIGlu dCBwcyA9IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0OworICAgIGludCB3ICA9IGZjLT5wcy5zcHMt PndpZHRoID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgaW50IGggID0gZmMtPnBz LnNwcy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisKKyAgICBpZiAodG9w KSB7CisgICAgICAgIC8qIHRvcCAqLworICAgICAgICBtZW1jcHkoZmMtPnRhYi5zYW9fcGl4ZWxf YnVmZmVyX2hbY19pZHhdICsgKCgoMiAqIHlfY3RiKSAqIHcgKyB4KSA8PCBwcyksCisgICAgICAg ICAgICBzcmMsIHdpZHRoIDw8IHBzKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBib3R0b20g Ki8KKyAgICAgICAgbWVtY3B5KGZjLT50YWIuc2FvX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XSArICgo KDIgKiB5X2N0YiArIDEpICogdyArIHgpIDw8IHBzKSwKKyAgICAgICAgICAgIHNyYyArIHNyY19z dHJpZGUgKiAoaGVpZ2h0IC0gMSksIHdpZHRoIDw8IHBzKTsKKworICAgICAgICAvKiBjb3B5IHZl cnRpY2FsIGVkZ2VzICovCisgICAgICAgIGNvcHlfdmVydChmYy0+dGFiLnNhb19waXhlbF9idWZm ZXJfdltjX2lkeF0gKyAoKCgyICogeF9jdGIpICogaCArIHkpIDw8IHBzKSwgc3JjLCBwcywgaGVp Z2h0LCAxIDw8IHBzLCBzcmNfc3RyaWRlKTsKKyAgICAgICAgY29weV92ZXJ0KGZjLT50YWIuc2Fv X3BpeGVsX2J1ZmZlcl92W2NfaWR4XSArICgoKDIgKiB4X2N0YiArIDEpICogaCArIHkpIDw8IHBz KSwgc3JjICsgKCh3aWR0aCAtIDEpIDw8IHBzKSwgcHMsIGhlaWdodCwgMSA8PCBwcywgc3JjX3N0 cmlkZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzYW9fY29weV9jdGJfdG9faHYoVlZDTG9j YWxDb250ZXh0ICpsYywgY29uc3QgaW50IHJ4LCBjb25zdCBpbnQgcnksIGNvbnN0IGludCB0b3Ap Cit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgaW50 IGN0Yl9zaXplX3kgICAgPSBmYy0+cHMuc3BzLT5jdGJfc2l6ZV95OworICAgIGNvbnN0IGludCB4 MCAgICAgICAgICAgID0gcnggPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGNv bnN0IGludCB5MCAgICAgICAgICAgID0gcnkgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95 OworCisgICAgZm9yIChpbnQgY19pZHggPSAwOyBjX2lkeCA8IChmYy0+cHMuc3BzLT5yLT5zcHNf Y2hyb21hX2Zvcm1hdF9pZGMgPyAzIDogMSk7IGNfaWR4KyspIHsKKyAgICAgICAgY29uc3QgaW50 IHggICAgICAgICAgICAgICAgPSB4MCA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAg ICAgICBjb25zdCBpbnQgeSAgICAgICAgICAgICAgICA9IHkwID4+IGZjLT5wcy5zcHMtPnZzaGlm dFtjX2lkeF07CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlID0gZmMtPmZyYW1l LT5saW5lc2l6ZVtjX2lkeF07CisgICAgICAgIGNvbnN0IGludCBjdGJfc2l6ZV9oICAgICAgID0g Y3RiX3NpemVfeSA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBp bnQgY3RiX3NpemVfdiAgICAgICA9IGN0Yl9zaXplX3kgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2Nf aWR4XTsKKyAgICAgICAgY29uc3QgaW50IHdpZHRoICAgICAgICAgICAgPSBGRk1JTihjdGJfc2l6 ZV9oLCAoZmMtPnBzLnNwcy0+d2lkdGggID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF0pIC0g eCk7CisgICAgICAgIGNvbnN0IGludCBoZWlnaHQgICAgICAgICAgID0gRkZNSU4oY3RiX3NpemVf diwgKGZjLT5wcy5zcHMtPmhlaWdodCA+PiBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdKSAtIHkp OworICAgICAgICB1aW50OF90ICpzcmMgICAgICAgICAgICAgICA9ICZmYy0+ZnJhbWUtPmRhdGFb Y19pZHhdW3kgKiBzcmNfc3RyaWRlICsgKHggPDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsK KyAgICAgICAgY29weV9jdGJfdG9faHYoZmMsIHNyYywgc3JjX3N0cmlkZSwgeCwgeSwgd2lkdGgs IGhlaWdodCwgY19pZHgsIHJ4LCByeSwgdG9wKTsKKyAgICB9CisKK30KKwordm9pZCBmZl92dmNf c2FvX2NvcHlfY3RiX3RvX2h2KFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCByeCwgY29u c3QgaW50IHJ5LCBjb25zdCBpbnQgbGFzdF9yb3cpCit7CisgICAgaWYgKHJ5KQorICAgICAgICBz YW9fY29weV9jdGJfdG9faHYobGMsIHJ4LCByeSAtIDEsIDApOworCisgICAgc2FvX2NvcHlfY3Ri X3RvX2h2KGxjLCByeCwgcnksIDEpOworCisgICAgaWYgKGxhc3Rfcm93KQorICAgICAgICBzYW9f Y29weV9jdGJfdG9faHYobGMsIHJ4LCByeSwgMCk7Cit9CisKK3ZvaWQgZmZfdnZjX3Nhb19maWx0 ZXIoVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgsIGludCB5KQoreworICAgIFZWQ0ZyYW1lQ29u dGV4dCAqZmMgID0gbGMtPmZjOworICAgIGNvbnN0IGludCBjdGJfc2l6ZV95ID0gZmMtPnBzLnNw cy0+Y3RiX3NpemVfeTsKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBzYW9fdGFiWzE2XSA9IHsg MCwgMSwgMiwgMiwgMywgMywgNCwgNCwgNSwgNSwgNiwgNiwgNywgNywgOCwgOCB9OworICAgIGlu dCBjX2lkeDsKKyAgICBpbnQgZWRnZXNbNF07ICAvLyAwIGxlZnQgMSB0b3AgMiByaWdodCAzIGJv dHRvbQorICAgIGludCB4X2N0YiAgICAgICAgICAgICAgICA9IHggPj4gZmMtPnBzLnNwcy0+Y3Ri X2xvZzJfc2l6ZV95OworICAgIGludCB5X2N0YiAgICAgICAgICAgICAgICA9IHkgPj4gZmMtPnBz LnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIFNBT1BhcmFtcyAqc2FvICAgICAgICAgICA9ICZD VEIoZmMtPnRhYi5zYW8sIHhfY3RiLCB5X2N0Yik7CisgICAgLy8gZmxhZ3MgaW5kaWNhdGluZyB1 bmZpbHRlcmFibGUgZWRnZXMKKyAgICB1aW50OF90IHZlcnRfZWRnZVtdICAgICAgPSB7IDAsIDAg fTsKKyAgICB1aW50OF90IGhvcml6X2VkZ2VbXSAgICAgPSB7IDAsIDAgfTsKKyAgICB1aW50OF90 IGRpYWdfZWRnZVtdICAgICAgPSB7IDAsIDAsIDAsIDAgfTsKKyAgICB1aW50OF90IGxmYXNlICAg ICAgICAgICAgPSBmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19l bmFibGVkX2ZsYWc7CisgICAgdWludDhfdCBub190aWxlX2ZpbHRlciAgID0gZmMtPnBzLnBwcy0+ ci0+bnVtX3RpbGVzX2luX3BpYyA+IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAhZmMtPnBzLnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc190aWxlc19lbmFibGVkX2Zs YWc7CisgICAgdWludDhfdCByZXN0b3JlICAgICAgICAgID0gbm9fdGlsZV9maWx0ZXIgfHwgIWxm YXNlOworICAgIHVpbnQ4X3QgbGVmdF90aWxlX2VkZ2UgICA9IDA7CisgICAgdWludDhfdCByaWdo dF90aWxlX2VkZ2UgID0gMDsKKyAgICB1aW50OF90IHVwX3RpbGVfZWRnZSAgICAgPSAwOworICAg IHVpbnQ4X3QgYm90dG9tX3RpbGVfZWRnZSA9IDA7CisKKyAgICBlZGdlc1tMRUZUXSAgID0geF9j dGIgPT0gMDsKKyAgICBlZGdlc1tUT1BdICAgID0geV9jdGIgPT0gMDsKKyAgICBlZGdlc1tSSUdI VF0gID0geF9jdGIgPT0gZmMtPnBzLnBwcy0+Y3RiX3dpZHRoICAtIDE7CisgICAgZWRnZXNbQk9U VE9NXSA9IHlfY3RiID09IGZjLT5wcy5wcHMtPmN0Yl9oZWlnaHQgLSAxOworCisgICAgaWYgKHJl c3RvcmUpIHsKKyAgICAgICAgaWYgKCFlZGdlc1tMRUZUXSkgeworICAgICAgICAgICAgbGVmdF90 aWxlX2VkZ2UgID0gbm9fdGlsZV9maWx0ZXIgJiYgZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFt4 X2N0Yl0gPT0geF9jdGI7CisgICAgICAgICAgICB2ZXJ0X2VkZ2VbMF0gICAgPSAoIWxmYXNlICYm IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGlj ZV9pZHgsIHhfY3RiIC0gMSwgeV9jdGIpKSB8fCBsZWZ0X3RpbGVfZWRnZTsKKyAgICAgICAgfQor ICAgICAgICBpZiAoIWVkZ2VzW1JJR0hUXSkgeworICAgICAgICAgICAgcmlnaHRfdGlsZV9lZGdl ID0gbm9fdGlsZV9maWx0ZXIgJiYgZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFt4X2N0Yl0gIT0g ZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFt4X2N0YiArIDFdOworICAgICAgICAgICAgdmVydF9l ZGdlWzFdICAgID0gKCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0 YikgIT0gQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiArIDEsIHlfY3RiKSkgfHwgcmlnaHRf dGlsZV9lZGdlOworICAgICAgICB9CisgICAgICAgIGlmICghZWRnZXNbVE9QXSkgeworICAgICAg ICAgICAgdXBfdGlsZV9lZGdlICAgICA9IG5vX3RpbGVfZmlsdGVyICYmIGZjLT5wcy5wcHMtPmN0 Yl90b19yb3dfYmRbeV9jdGJdID09IHlfY3RiOworICAgICAgICAgICAgaG9yaXpfZWRnZVswXSAg ICA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9IENU QihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiIC0gMSkpIHx8IHVwX3RpbGVfZWRnZTsK KyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW0JPVFRPTV0pIHsKKyAgICAgICAgICAgIGJv dHRvbV90aWxlX2VkZ2UgPSBub190aWxlX2ZpbHRlciAmJiBmYy0+cHMucHBzLT5jdGJfdG9fcm93 X2JkW3lfY3RiXSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fcm93X2JkW3lfY3RiICsgMV07CisgICAg ICAgICAgICBob3Jpel9lZGdlWzFdICAgID0gKCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9p ZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIg KyAxKSkgfHwgYm90dG9tX3RpbGVfZWRnZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2Vz W0xFRlRdICYmICFlZGdlc1tUT1BdKSB7CisgICAgICAgICAgICBkaWFnX2VkZ2VbMF0gPSAoIWxm YXNlICYmIENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRh Yi5zbGljZV9pZHgsIHhfY3RiIC0gMSwgeV9jdGIgLSAxKSkgfHwgbGVmdF90aWxlX2VkZ2UgfHwg dXBfdGlsZV9lZGdlOworICAgICAgICB9CisgICAgICAgIGlmICghZWRnZXNbVE9QXSAmJiAhZWRn ZXNbUklHSFRdKSB7CisgICAgICAgICAgICBkaWFnX2VkZ2VbMV0gPSAoIWxmYXNlICYmIENUQihm Yy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgs IHhfY3RiICsgMSwgeV9jdGIgLSAxKSkgfHwgcmlnaHRfdGlsZV9lZGdlIHx8IHVwX3RpbGVfZWRn ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW1JJR0hUXSAmJiAhZWRnZXNbQk9UVE9N XSkgeworICAgICAgICAgICAgZGlhZ19lZGdlWzJdID0gKCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5z bGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiAr IDEsIHlfY3RiICsgMSkpIHx8IHJpZ2h0X3RpbGVfZWRnZSB8fCBib3R0b21fdGlsZV9lZGdlOwor ICAgICAgICB9CisgICAgICAgIGlmICghZWRnZXNbTEVGVF0gJiYgIWVkZ2VzW0JPVFRPTV0pIHsK KyAgICAgICAgICAgIGRpYWdfZWRnZVszXSA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xpY2Vf aWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIgLSAxLCB5 X2N0YiArIDEpKSB8fCBsZWZ0X3RpbGVfZWRnZSB8fCBib3R0b21fdGlsZV9lZGdlOworICAgICAg ICB9CisgICAgfQorCisgICAgZm9yIChjX2lkeCA9IDA7IGNfaWR4IDwgKGZjLT5wcy5zcHMtPnIt PnNwc19jaHJvbWFfZm9ybWF0X2lkYyA/IDMgOiAxKTsgY19pZHgrKykgeworICAgICAgICBpbnQg eDAgICAgICAgPSB4ID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGludCB5 MCAgICAgICA9IHkgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgcHRyZGlm Zl90IHNyY19zdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XTsKKyAgICAgICAgaW50 IGN0Yl9zaXplX2ggPSBjdGJfc2l6ZV95ID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07Cisg ICAgICAgIGludCBjdGJfc2l6ZV92ID0gY3RiX3NpemVfeSA+PiBmYy0+cHMuc3BzLT52c2hpZnRb Y19pZHhdOworICAgICAgICBpbnQgd2lkdGggICAgPSBGRk1JTihjdGJfc2l6ZV9oLCAoZmMtPnBz LnNwcy0+d2lkdGggID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF0pIC0geDApOworICAgICAg ICBpbnQgaGVpZ2h0ICAgPSBGRk1JTihjdGJfc2l6ZV92LCAoZmMtPnBzLnNwcy0+aGVpZ2h0ID4+ IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF0pIC0geTApOworICAgICAgICBpbnQgdGFiICAgICAg PSBzYW9fdGFiWyhGRkFMSUdOKHdpZHRoLCA4KSA+PiAzKSAtIDFdOworICAgICAgICB1aW50OF90 ICpzcmMgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4XVt5MCAqIHNyY19zdHJpZGUgKyAoeDAgPDwg ZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsKKyAgICAgICAgcHRyZGlmZl90IGRzdF9zdHJpZGU7 CisgICAgICAgIHVpbnQ4X3QgKmRzdDsKKworICAgICAgICBzd2l0Y2ggKHNhby0+dHlwZV9pZHhb Y19pZHhdKSB7CisgICAgICAgIGNhc2UgU0FPX0JBTkQ6CisgICAgICAgICAgICBmYy0+dnZjZHNw LnNhby5iYW5kX2ZpbHRlclt0YWJdKHNyYywgc3JjLCBzcmNfc3RyaWRlLCBzcmNfc3RyaWRlLAor ICAgICAgICAgICAgICAgIHNhby0+b2Zmc2V0X3ZhbFtjX2lkeF0sIHNhby0+YmFuZF9wb3NpdGlv bltjX2lkeF0sIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh c2UgU0FPX0VER0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB3ID0gZmMtPnBzLnNwcy0+ d2lkdGggPj4gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgICAgIGludCBoID0g ZmMtPnBzLnNwcy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAg ICAgICBpbnQgc2ggPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKworICAgICAgICAgICAgZHN0 X3N0cmlkZSA9IDIqTUFYX1BCX1NJWkUgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFOwor ICAgICAgICAgICAgZHN0ID0gbGMtPnNhb19idWZmZXIgKyBkc3Rfc3RyaWRlICsgQVZfSU5QVVRf QlVGRkVSX1BBRERJTkdfU0laRTsKKworICAgICAgICAgICAgaWYgKCFlZGdlc1tUT1BdKSB7Cisg ICAgICAgICAgICAgICAgaW50IGxlZnQgPSAxIC0gZWRnZXNbTEVGVF07CisgICAgICAgICAgICAg ICAgaW50IHJpZ2h0ID0gMSAtIGVkZ2VzW1JJR0hUXTsKKyAgICAgICAgICAgICAgICBjb25zdCB1 aW50OF90ICpzcmMxOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRzdDE7CisgICAgICAgICAg ICAgICAgaW50IHBvczsKKworICAgICAgICAgICAgICAgIGRzdDEgPSBkc3QgLSBkc3Rfc3RyaWRl IC0gKGxlZnQgPDwgc2gpOworICAgICAgICAgICAgICAgIHNyYzEgPSBmYy0+dGFiLnNhb19waXhl bF9idWZmZXJfaFtjX2lkeF0gKyAoKCgyICogeV9jdGIgLSAxKSAqIHcgKyB4MCAtIGxlZnQpIDw8 IHNoKTsKKyAgICAgICAgICAgICAgICBwb3MgPSAwOworICAgICAgICAgICAgICAgIGlmIChsZWZ0 KSB7CisgICAgICAgICAgICAgICAgICAgIGNvcHlfcGl4ZWwoZHN0MSwgc3JjMSwgc2gpOworICAg ICAgICAgICAgICAgICAgICBwb3MgKz0gKDEgPDwgc2gpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBtZW1jcHkoZHN0MSArIHBvcywgc3JjMSArIHBvcywgd2lkdGggPDwgc2gp OworICAgICAgICAgICAgICAgIGlmIChyaWdodCkgeworICAgICAgICAgICAgICAgICAgICBwb3Mg Kz0gd2lkdGggPDwgc2g7CisgICAgICAgICAgICAgICAgICAgIGNvcHlfcGl4ZWwoZHN0MSArIHBv cywgc3JjMSArIHBvcywgc2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmICghZWRnZXNbQk9UVE9NXSkgeworICAgICAgICAgICAgICAgIGludCBsZWZ0 ID0gMSAtIGVkZ2VzW0xFRlRdOworICAgICAgICAgICAgICAgIGludCByaWdodCA9IDEgLSBlZGdl c1tSSUdIVF07CisgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjMTsKKyAgICAgICAg ICAgICAgICB1aW50OF90ICpkc3QxOworICAgICAgICAgICAgICAgIGludCBwb3M7CisKKyAgICAg ICAgICAgICAgICBkc3QxID0gZHN0ICsgaGVpZ2h0ICogZHN0X3N0cmlkZSAtIChsZWZ0IDw8IHNo KTsKKyAgICAgICAgICAgICAgICBzcmMxID0gZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX2hbY19p ZHhdICsgKCgoMiAqIHlfY3RiICsgMikgKiB3ICsgeDAgLSBsZWZ0KSA8PCBzaCk7CisgICAgICAg ICAgICAgICAgcG9zID0gMDsKKyAgICAgICAgICAgICAgICBpZiAobGVmdCkgeworICAgICAgICAg ICAgICAgICAgICBjb3B5X3BpeGVsKGRzdDEsIHNyYzEsIHNoKTsKKyAgICAgICAgICAgICAgICAg ICAgcG9zICs9ICgxIDw8IHNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg bWVtY3B5KGRzdDEgKyBwb3MsIHNyYzEgKyBwb3MsIHdpZHRoIDw8IHNoKTsKKyAgICAgICAgICAg ICAgICBpZiAocmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9zICs9IHdpZHRoIDw8IHNo OworICAgICAgICAgICAgICAgICAgICBjb3B5X3BpeGVsKGRzdDEgKyBwb3MsIHNyYzEgKyBwb3Ms IHNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo IWVkZ2VzW0xFRlRdKSB7CisgICAgICAgICAgICAgICAgY29weV92ZXJ0KGRzdCAtICgxIDw8IHNo KSwKKyAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX3ZbY19pZHhd ICsgKCgoMiAqIHhfY3RiIC0gMSkgKiBoICsgeTApIDw8IHNoKSwKKyAgICAgICAgICAgICAgICAg ICAgc2gsIGhlaWdodCwgZHN0X3N0cmlkZSwgMSA8PCBzaCk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAoIWVkZ2VzW1JJR0hUXSkgeworICAgICAgICAgICAgICAgIGNvcHlfdmVydChk c3QgKyAod2lkdGggPDwgc2gpLAorICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnNhb19waXhl bF9idWZmZXJfdltjX2lkeF0gKyAoKCgyICogeF9jdGIgKyAyKSAqIGggKyB5MCkgPDwgc2gpLAor ICAgICAgICAgICAgICAgICAgICBzaCwgaGVpZ2h0LCBkc3Rfc3RyaWRlLCAxIDw8IHNoKTsKKyAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgY29weV9jdGIoZHN0LCBzcmMsICB3aWR0aCA8PCBz aCwgaGVpZ2h0LCBkc3Rfc3RyaWRlLCBzcmNfc3RyaWRlKTsKKyAgICAgICAgICAgIGZjLT52dmNk c3Auc2FvLmVkZ2VfZmlsdGVyW3RhYl0oc3JjLCBkc3QsIHNyY19zdHJpZGUsIHNhby0+b2Zmc2V0 X3ZhbFtjX2lkeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNhby0+ZW9fY2xhc3NbY19pZHhdLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGZjLT52 dmNkc3Auc2FvLmVkZ2VfcmVzdG9yZVtyZXN0b3JlXShzcmMsIGRzdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHJpZGUsIGRzdF9zdHJpZGUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW8sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlcywgd2lk dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWln aHQsIGNfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdmVydF9lZGdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaG9yaXpfZWRnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpYWdfZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg ICAgICB9CisgICAgfQorfQorCisjZGVmaW5lIFRBQl9CUyh0LCB4LCB5KSAgICAgKHQpWygoeSkg Pj4gMikgKiAoZmMtPnRhYi5ic193aWR0aCkgKyAoKHgpID4+IDIpXQorI2RlZmluZSBUQUJfTUFY X0xFTih0LCB4LCB5KSAgKHQpWygoeSkgPj4gMikgKiAoZmMtPnRhYi5ic193aWR0aCkgKyAoKHgp ID4+IDIpXQorCisvLzggc2FtcGxlcyBhIHRpbWUKKyNkZWZpbmUgREVCTE9DS19TVEVQICAgICAg ICAgICAgOAorI2RlZmluZSBMVU1BX0dSSUQgICAgICAgICAgICAgICA0CisjZGVmaW5lIENIUk9N QV9HUklEICAgICAgICAgICAgIDgKKworc3RhdGljIGludCBib3VuZGFyeV9zdHJlbmd0aChjb25z dCBWVkNMb2NhbENvbnRleHQgKmxjLCBNdkZpZWxkICpjdXJyLCBNdkZpZWxkICpuZWlnaCwKKyAg ICBjb25zdCBSZWZQaWNMaXN0ICpuZWlnaF9ycGwpCit7CisgICAgUmVmUGljTGlzdCAqcnBsID0g bGMtPnNjLT5ycGw7CisgICAgaWYgKGN1cnItPnByZWRfZmxhZyA9PSBQRl9CSSAmJiAgbmVpZ2gt PnByZWRfZmxhZyA9PSBQRl9CSSkgeworICAgICAgICAvLyBzYW1lIEwwIGFuZCBMMQorICAgICAg ICBpZiAocnBsWzBdLmxpc3RbY3Vyci0+cmVmX2lkeFswXV0gPT0gbmVpZ2hfcnBsWzBdLmxpc3Rb bmVpZ2gtPnJlZl9pZHhbMF1dICAmJgorICAgICAgICAgICAgcnBsWzBdLmxpc3RbY3Vyci0+cmVm X2lkeFswXV0gPT0gcnBsWzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsxXV0gJiYKKyAgICAgICAgICAg IG5laWdoX3JwbFswXS5saXN0W25laWdoLT5yZWZfaWR4WzBdXSA9PSBuZWlnaF9ycGxbMV0ubGlz dFtuZWlnaC0+cmVmX2lkeFsxXV0pIHsKKyAgICAgICAgICAgIGlmICgoRkZBQlMobmVpZ2gtPm12 WzBdLnggLSBjdXJyLT5tdlswXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5tdlswXS55IC0gY3Vy ci0+bXZbMF0ueSkgPj0gOCB8fAorICAgICAgICAgICAgICAgICBGRkFCUyhuZWlnaC0+bXZbMV0u eCAtIGN1cnItPm12WzFdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzFdLnkgLSBjdXJyLT5t dlsxXS55KSA+PSA4KSAmJgorICAgICAgICAgICAgICAgIChGRkFCUyhuZWlnaC0+bXZbMV0ueCAt IGN1cnItPm12WzBdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzFdLnkgLSBjdXJyLT5tdlsw XS55KSA+PSA4IHx8CisgICAgICAgICAgICAgICAgIEZGQUJTKG5laWdoLT5tdlswXS54IC0gY3Vy ci0+bXZbMV0ueCkgPj0gOCB8fCBGRkFCUyhuZWlnaC0+bXZbMF0ueSAtIGN1cnItPm12WzFdLnkp ID49IDgpKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVsc2UgaWYgKG5laWdoX3JwbFswXS5s aXN0W25laWdoLT5yZWZfaWR4WzBdXSA9PSBycGxbMF0ubGlzdFtjdXJyLT5yZWZfaWR4WzBdXSAm JgorICAgICAgICAgICAgICAgICAgIG5laWdoX3JwbFsxXS5saXN0W25laWdoLT5yZWZfaWR4WzFd XSA9PSBycGxbMV0ubGlzdFtjdXJyLT5yZWZfaWR4WzFdXSkgeworICAgICAgICAgICAgaWYgKEZG QUJTKG5laWdoLT5tdlswXS54IC0gY3Vyci0+bXZbMF0ueCkgPj0gOCB8fCBGRkFCUyhuZWlnaC0+ bXZbMF0ueSAtIGN1cnItPm12WzBdLnkpID49IDggfHwKKyAgICAgICAgICAgICAgICBGRkFCUyhu ZWlnaC0+bXZbMV0ueCAtIGN1cnItPm12WzFdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzFd LnkgLSBjdXJyLT5tdlsxXS55KSA+PSA4KQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVsc2Ug aWYgKG5laWdoX3JwbFsxXS5saXN0W25laWdoLT5yZWZfaWR4WzFdXSA9PSBycGxbMF0ubGlzdFtj dXJyLT5yZWZfaWR4WzBdXSAmJgorICAgICAgICAgICAgICAgICAgIG5laWdoX3JwbFswXS5saXN0 W25laWdoLT5yZWZfaWR4WzBdXSA9PSBycGxbMV0ubGlzdFtjdXJyLT5yZWZfaWR4WzFdXSkgewor ICAgICAgICAgICAgaWYgKEZGQUJTKG5laWdoLT5tdlsxXS54IC0gY3Vyci0+bXZbMF0ueCkgPj0g OCB8fCBGRkFCUyhuZWlnaC0+bXZbMV0ueSAtIGN1cnItPm12WzBdLnkpID49IDggfHwKKyAgICAg ICAgICAgICAgICBGRkFCUyhuZWlnaC0+bXZbMF0ueCAtIGN1cnItPm12WzFdLngpID49IDggfHwg RkZBQlMobmVpZ2gtPm12WzBdLnkgLSBjdXJyLT5tdlsxXS55KSA+PSA4KQorICAgICAgICAgICAg ICAgIHJldHVybiAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAw OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAg ICB9IGVsc2UgaWYgKChjdXJyLT5wcmVkX2ZsYWcgIT0gUEZfQkkpICYmIChuZWlnaC0+cHJlZF9m bGFnICE9IFBGX0JJKSl7IC8vIDEgTVYKKyAgICAgICAgTXYgQSwgQjsKKyAgICAgICAgaW50IHJl Zl9BLCByZWZfQjsKKworICAgICAgICBpZiAoY3Vyci0+cHJlZF9mbGFnICYgMSkgeworICAgICAg ICAgICAgQSAgICAgPSBjdXJyLT5tdlswXTsKKyAgICAgICAgICAgIHJlZl9BID0gcnBsWzBdLmxp c3RbY3Vyci0+cmVmX2lkeFswXV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBICAg ICA9IGN1cnItPm12WzFdOworICAgICAgICAgICAgcmVmX0EgPSBycGxbMV0ubGlzdFtjdXJyLT5y ZWZfaWR4WzFdXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZWlnaC0+cHJlZF9mbGFnICYg MSkgeworICAgICAgICAgICAgQiAgICAgPSBuZWlnaC0+bXZbMF07CisgICAgICAgICAgICByZWZf QiA9IG5laWdoX3JwbFswXS5saXN0W25laWdoLT5yZWZfaWR4WzBdXTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIEIgICAgID0gbmVpZ2gtPm12WzFdOworICAgICAgICAgICAgcmVmX0Ig PSBuZWlnaF9ycGxbMV0ubGlzdFtuZWlnaC0+cmVmX2lkeFsxXV07CisgICAgICAgIH0KKworICAg ICAgICBpZiAocmVmX0EgPT0gcmVmX0IpIHsKKyAgICAgICAgICAgIGlmIChGRkFCUyhBLnggLSBC LngpID49IDggfHwgRkZBQlMoQS55IC0gQi55KSA+PSA4KQorICAgICAgICAgICAgICAgIHJldHVy biAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg ICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHJldHVybiAxOwor fQorCisvL3BhcnQgb2YgOC44LjMuMyBEZXJpdmF0aW9uIHByb2Nlc3Mgb2YgdHJhbnNmb3JtIGJs b2NrIGJvdW5kYXJ5CitzdGF0aWMgdm9pZCBkZXJpdmVfbWF4X2ZpbHRlcl9sZW5ndGhfbHVtYShj b25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBpbnQgcXgsIGNvbnN0IGludCBxeSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19pbnRy YSwgY29uc3QgaW50IGhhc19zdWJibG9jaywgY29uc3QgaW50IHZlcnRpY2FsLCB1aW50OF90ICpt YXhfbGVuX3AsIHVpbnQ4X3QgKm1heF9sZW5fcSkKK3sKKyAgICBjb25zdCBpbnQgcHggPSAgdmVy dGljYWwgPyBxeCAtIDEgOiBxeDsKKyAgICBjb25zdCBpbnQgcHkgPSAhdmVydGljYWwgPyBxeSAt IDEgOiBxeTsKKyAgICBjb25zdCB1aW50OF90ICp0Yl9zaXplID0gdmVydGljYWwgPyBmYy0+dGFi LnRiX3dpZHRoW0xVTUFdIDogZmMtPnRhYi50Yl9oZWlnaHRbTFVNQV07CisgICAgY29uc3QgaW50 IHNpemVfcCA9IHRiX3NpemVbKHB5ID4+IE1JTl9UVV9MT0cyKSAqIGZjLT5wcy5wcHMtPm1pbl90 dV93aWR0aCArIChweCA+PiBNSU5fVFVfTE9HMildOworICAgIGNvbnN0IGludCBzaXplX3EgPSB0 Yl9zaXplWyhxeSA+PiBNSU5fVFVfTE9HMikgKiBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGggKyAo cXggPj4gTUlOX1RVX0xPRzIpXTsKKyAgICBjb25zdCBpbnQgbWluX2NiX2xvZzIgPSBmYy0+cHMu c3BzLT5taW5fY2JfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IG9mZl9wID0gKHB5ID4+IG1p bl9jYl9sb2cyKSAqIGZjLT5wcy5wcHMtPm1pbl9jYl93aWR0aCArIChweCA+PiBtaW5fY2JfbG9n Mik7CisgICAgaWYgKHNpemVfcCA8PSA0IHx8IHNpemVfcSA8PSA0KSB7CisgICAgICAgICptYXhf bGVuX3AgPSAqbWF4X2xlbl9xID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICAqbWF4X2xlbl9w ID0gKm1heF9sZW5fcSA9IDM7CisgICAgICAgIGlmIChzaXplX3AgPj0gMzIpCisgICAgICAgICAg ICAqbWF4X2xlbl9wID0gNzsKKyAgICAgICAgaWYgKHNpemVfcSA+PSAzMikKKyAgICAgICAgICAg ICptYXhfbGVuX3EgPSA3OworICAgIH0KKyAgICBpZiAoaGFzX3N1YmJsb2NrKQorICAgICAgICAq bWF4X2xlbl9xID0gRkZNSU4oNSwgKm1heF9sZW5fcSk7CisgICAgaWYgKGZjLT50YWIubXNmW29m Zl9wXSB8fCBmYy0+dGFiLmlhZltvZmZfcF0pCisgICAgICAgICptYXhfbGVuX3AgPSBGRk1JTig1 LCAqbWF4X2xlbl9wKTsKK30KKworc3RhdGljIHZvaWQgZGVibG9ja19zdWJibG9ja19ic192ZXJ0 aWNhbChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLAorICAgIGNvbnN0IGludCBjYl94LCBjb25z dCBpbnQgY2JfeSwgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwg Y29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgICpmYyAgPSBs Yy0+ZmM7CisgICAgTXZGaWVsZCAqdGFiX212ZiAgICAgICAgICAgID0gZmMtPnRhYi5tdmY7Cisg ICAgUmVmUGljTGlzdCAqcnBsICAgICAgICAgICAgID0gbGMtPnNjLT5ycGw7CisgICAgY29uc3Qg aW50IG1pbl9wdV93aWR0aCAgICAgID0gZmMtPnBzLnBwcy0+bWluX3B1X3dpZHRoOworICAgIGNv bnN0IGludCBsb2cyX21pbl9wdV9zaXplICA9IE1JTl9QVV9MT0cyOworICAgIHVpbnQ4X3QgbWF4 X2xlbl9wLCBtYXhfbGVuX3E7CisgICAgaW50IGJzLCBpLCBqOworCisgICAgLy8gYnMgZm9yIFRV IGludGVybmFsIHZlcnRpY2FsIFBVIGJvdW5kYXJpZXMKKyAgICBmb3IgKGogPSAwOyBqIDwgaGVp Z2h0OyBqICs9IDQpIHsKKyAgICAgICAgaW50IHlfcHUgPSAoeTAgKyBqKSA+PiBsb2cyX21pbl9w dV9zaXplOworCisgICAgICAgIGZvciAoaSA9IDggLSAoKHgwIC0gY2JfeCkgJSA4KTsgaSA8IHdp ZHRoOyBpICs9IDgpIHsKKyAgICAgICAgICAgIGludCB4cF9wdSA9ICh4MCArIGkgLSAxKSA+PiBs b2cyX21pbl9wdV9zaXplOworICAgICAgICAgICAgaW50IHhxX3B1ID0gKHgwICsgaSkgICAgID4+ IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAgICBNdkZpZWxkICpsZWZ0ID0gJnRhYl9tdmZb eV9wdSAqIG1pbl9wdV93aWR0aCArIHhwX3B1XTsKKyAgICAgICAgICAgIE12RmllbGQgKmN1cnIg PSAmdGFiX212Zlt5X3B1ICogbWluX3B1X3dpZHRoICsgeHFfcHVdOworICAgICAgICAgICAgY29u c3QgaW50IHggPSB4MCArIGk7CisgICAgICAgICAgICBjb25zdCBpbnQgeSA9IHkwICsgajsKKwor ICAgICAgICAgICAgYnMgPSBib3VuZGFyeV9zdHJlbmd0aChsYywgY3VyciwgbGVmdCwgcnBsKTsK KyAgICAgICAgICAgIFRBQl9CUyhmYy0+dGFiLnZlcnRpY2FsX2JzW0xVTUFdLCB4LCB5KSA9IGJz OworCisKKyAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDA7CisgICAgICAgICAg ICBpZiAoaSA9PSA0IHx8IGkgPT0gd2lkdGggLSA0KQorICAgICAgICAgICAgICAgIG1heF9sZW5f cCA9IG1heF9sZW5fcSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChpID09IDggfHwgaSA9PSB3 aWR0aCAtIDgpCisgICAgICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMjsKKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3EgPSAz OworCisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLnZlcnRpY2FsX3AsIHgsIHkpID0g bWF4X2xlbl9wOworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi52ZXJ0aWNhbF9xLCB4 LCB5KSA9IG1heF9sZW5fcTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgZGVi bG9ja19zdWJibG9ja19ic19ob3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisg ICAgY29uc3QgaW50IGNiX3gsIGNvbnN0IGludCBjYl95LCBjb25zdCBpbnQgeDAsIGNvbnN0IGlu dCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQoreworICAgIGNvbnN0IFZW Q0ZyYW1lQ29udGV4dCAgKmZjICA9IGxjLT5mYzsKKyAgICBNdkZpZWxkKiB0YWJfbXZmICAgICAg ICAgICAgPSBmYy0+dGFiLm12ZjsKKyAgICBSZWZQaWNMaXN0KiBycGwgICAgICAgICAgICAgPSBs Yy0+c2MtPnJwbDsKKyAgICBjb25zdCBpbnQgbWluX3B1X3dpZHRoICAgICAgPSBmYy0+cHMucHBz LT5taW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3B1X3NpemUgID0gTUlOX1BV X0xPRzI7CisgICAgdWludDhfdCBtYXhfbGVuX3AsIG1heF9sZW5fcTsKKyAgICBpbnQgYnMsIGks IGo7CisKKyAgICAvLyBicyBmb3IgVFUgaW50ZXJuYWwgaG9yaXpvbnRhbCBQVSBib3VuZGFyaWVz CisgICAgZm9yIChqID0gOCAtICgoeTAgLSBjYl95KSAlIDgpOyBqIDwgaGVpZ2h0OyBqICs9IDgp IHsKKyAgICAgICAgaW50IHlwX3B1ID0gKHkwICsgaiAtIDEpID4+IGxvZzJfbWluX3B1X3NpemU7 CisgICAgICAgIGludCB5cV9wdSA9ICh5MCArIGopICAgICA+PiBsb2cyX21pbl9wdV9zaXplOwor CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSArPSA0KSB7CisgICAgICAgICAgICBp bnQgeF9wdSA9ICh4MCArIGkpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAgICBNdkZp ZWxkICp0b3AgID0gJnRhYl9tdmZbeXBfcHUgKiBtaW5fcHVfd2lkdGggKyB4X3B1XTsKKyAgICAg ICAgICAgIE12RmllbGQgKmN1cnIgPSAmdGFiX212Zlt5cV9wdSAqIG1pbl9wdV93aWR0aCArIHhf cHVdOworICAgICAgICAgICAgY29uc3QgaW50IHggPSB4MCArIGk7CisgICAgICAgICAgICBjb25z dCBpbnQgeSA9IHkwICsgajsKKworICAgICAgICAgICAgYnMgPSBib3VuZGFyeV9zdHJlbmd0aChs YywgY3VyciwgdG9wLCBycGwpOworICAgICAgICAgICAgVEFCX0JTKGZjLT50YWIuaG9yaXpvbnRh bF9ic1tMVU1BXSwgeCwgeSkgPSBiczsKKworICAgICAgICAgICAgLy9maXhtZToKKyAgICAgICAg ICAgIC8vZWRnZVRiRmxhZ3NbIHgg4oiSIHNiVyBdWyB5IF0gaXMgZXF1YWwgdG8gMQorICAgICAg ICAgICAgLy9lZGdlVGJGbGFnc1sgeCArIHNiVyBdWyB5IF0gaXMgZXF1YWwgdG8gMQorICAgICAg ICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMDsKKyAgICAgICAgICAgIGlmIChqID09IDQg fHwgaiA9PSBoZWlnaHQgLSA0KQorICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5f cSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChqID09IDggfHwgaiA9PSBoZWlnaHQgLSA4KQor ICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDI7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMzsKKyAgICAgICAg ICAgIFRBQl9NQVhfTEVOKGZjLT50YWIuaG9yaXpvbnRhbF9wLCB4LCB5KSA9IG1heF9sZW5fcDsK KyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50YWIuaG9yaXpvbnRhbF9xLCB4LCB5KSA9IG1h eF9sZW5fcTsKKyAgICAgICAgfQorICAgIH0KKworfQorCitzdGF0aWMgdm9pZCBkZWJsb2NrX2Jz X2x1bWFfdmVydGljYWwoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBpbnQg eDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQorewor ICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgID0gbGMtPmZjOworICAgIE12RmllbGQgKnRh Yl9tdmYgICAgICAgICAgID0gZmMtPnRhYi5tdmY7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3B1 X3NpemUgPSBNSU5fUFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fdHVfc2l6ZSA9IE1J Tl9UVV9MT0cyOworICAgIGNvbnN0IGludCBtaW5fcHVfd2lkdGggICAgID0gZmMtPnBzLnBwcy0+ bWluX3B1X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fdHVfd2lkdGggICAgID0gZmMtPnBzLnBw cy0+bWluX3R1X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fY2JfbG9nMiAgICAgID0gZmMtPnBz LnNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBtaW5fY2Jfd2lkdGggICAg ID0gZmMtPnBzLnBwcy0+bWluX2NiX3dpZHRoOworICAgIGludCBpc19pbnRyYSA9IHRhYl9tdmZb KHkwID4+IGxvZzJfbWluX3B1X3NpemUpICogbWluX3B1X3dpZHRoICsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICh4MCA+PiBsb2cyX21pbl9wdV9zaXplKV0ucHJlZF9mbGFnID09IFBGX0lO VFJBOworICAgIGludCBib3VuZGFyeV9sZWZ0OworICAgIGludCBoYXNfdmVydGljYWxfc2IgPSAw OworICAgIHVpbnQ4X3QgbWF4X2xlbl9wLCBtYXhfbGVuX3E7CisKKyAgICBjb25zdCBpbnQgb2Zm X3EgICAgICAgICAgICA9ICh5MCA+PiBtaW5fY2JfbG9nMikgKiBtaW5fY2Jfd2lkdGggKyAoeDAg Pj4gbWluX2NiX2xvZzIpOworICAgIGNvbnN0IGludCBjYl94ICAgICAgICAgICAgID0gZmMtPnRh Yi5jYl9wb3NfeFtMVU1BXVtvZmZfcV07CisgICAgY29uc3QgaW50IGNiX3kgICAgICAgICAgICAg PSBmYy0+dGFiLmNiX3Bvc195W0xVTUFdW29mZl9xXTsKKyAgICBjb25zdCBpbnQgY2Jfd2lkdGgg ICAgICAgICA9IGZjLT50YWIuY2Jfd2lkdGhbTFVNQV1bb2ZmX3FdOworCisgICAgaWYgKCFpc19p bnRyYSkgeworICAgICAgICBpZiAoZmMtPnRhYi5tc2Zbb2ZmX3FdIHx8IGZjLT50YWIuaWFmW29m Zl9xXSkKKyAgICAgICAgICAgIGhhc192ZXJ0aWNhbF9zYiAgID0gY2Jfd2lkdGggID4gODsKKyAg ICB9CisKKyAgICAvLyBicyBmb3IgdmVydGljYWwgVFUgYm91bmRhcmllcworICAgIGJvdW5kYXJ5 X2xlZnQgPSB4MCA+IDAgJiYgISh4MCAmIDMpOworICAgIGlmIChib3VuZGFyeV9sZWZ0ICYmCisg ICAgICAgICgoIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2Vu YWJsZWRfZmxhZyAmJgorICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllf TEVGVF9TTElDRSAmJgorICAgICAgICAgICAgKHgwICUgKDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xv ZzJfc2l6ZV95KSkgPT0gMCkgfHwKKyAgICAgICAgICAgICghZmMtPnBzLnBwcy0+ci0+cHBzX2xv b3BfZmlsdGVyX2Fjcm9zc190aWxlc19lbmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICAgIGxjLT5i b3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfVElMRSAmJgorICAgICAgICAgICAgKHgwICUg KDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95KSkgPT0gMCkpKQorICAgICAgICBib3Vu ZGFyeV9sZWZ0ID0gMDsKKworICAgIGlmIChib3VuZGFyeV9sZWZ0KSB7CisgICAgICAgIGNvbnN0 IFJlZlBpY0xpc3QgKnJwbF9sZWZ0ID0KKyAgICAgICAgICAgIChsYy0+Ym91bmRhcnlfZmxhZ3Mg JiBCT1VOREFSWV9MRUZUX1NMSUNFKSA/IGZmX3Z2Y19nZXRfcmVmX2xpc3QoZmMsIGZjLT5yZWYs IHgwIC0gMSwgeTApIDogbGMtPnNjLT5ycGw7CisgICAgICAgIGludCB4cF9wdSA9ICh4MCAtIDEp ID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgIGludCB4cV9wdSA9ICB4MCAgICAgID4+IGxv ZzJfbWluX3B1X3NpemU7CisgICAgICAgIGludCB4cF90dSA9ICh4MCAtIDEpID4+IGxvZzJfbWlu X3R1X3NpemU7CisgICAgICAgIGludCB4cV90dSA9ICB4MCAgICAgID4+IGxvZzJfbWluX3R1X3Np emU7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkgKz0gNCkgeworICAg ICAgICAgICAgaW50IGJzOworICAgICAgICAgICAgY29uc3QgaW50IG9mZl94ID0gY2JfeCAtIHgw OworICAgICAgICAgICAgaW50IHlfcHUgICAgICA9ICh5MCArIGkpID4+IGxvZzJfbWluX3B1X3Np emU7CisgICAgICAgICAgICBpbnQgeV90dSAgICAgID0gKHkwICsgaSkgPj4gbG9nMl9taW5fdHVf c2l6ZTsKKyAgICAgICAgICAgIE12RmllbGQgKmxlZnQgPSAmdGFiX212Zlt5X3B1ICogbWluX3B1 X3dpZHRoICsgeHBfcHVdOworICAgICAgICAgICAgTXZGaWVsZCAqY3VyciA9ICZ0YWJfbXZmW3lf cHUgKiBtaW5fcHVfd2lkdGggKyB4cV9wdV07CisgICAgICAgICAgICB1aW50OF90IGxlZnRfY2Jm X2x1bWEgPSBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbTFVNQV1beV90dSAqIG1pbl90dV93aWR0aCAr IHhwX3R1XTsKKyAgICAgICAgICAgIHVpbnQ4X3QgY3Vycl9jYmZfbHVtYSA9IGZjLT50YWIudHVf Y29kZWRfZmxhZ1tMVU1BXVt5X3R1ICogbWluX3R1X3dpZHRoICsgeHFfdHVdOworICAgICAgICAg ICAgdWludDhfdCBwY21mICAgICAgICAgID0gZmMtPnRhYi5wY21mW0xVTUFdW3lfdHUgKiBtaW5f dHVfd2lkdGggKyB4cF90dV0gJiYKKyAgICAgICAgICAgICAgICBmYy0+dGFiLnBjbWZbTFVNQV1b eV90dSAqIG1pbl90dV93aWR0aCArIHhxX3R1XTsKKworICAgICAgICAgICAgaWYgKHBjbWYpCisg ICAgICAgICAgICAgICAgYnMgPSAwOworICAgICAgICAgICAgZWxzZSBpZiAoY3Vyci0+cHJlZF9m bGFnID09IFBGX0lOVFJBIHx8IGxlZnQtPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCBjdXJyLT5j aWlwX2ZsYWcgfHwgbGVmdC0+Y2lpcF9mbGFnKQorICAgICAgICAgICAgICAgIGJzID0gMjsKKyAg ICAgICAgICAgIGVsc2UgaWYgKGN1cnJfY2JmX2x1bWEgfHwgbGVmdF9jYmZfbHVtYSkKKyAgICAg ICAgICAgICAgICBicyA9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChvZmZfeCAmJiAoKG9mZl94 ICUgOCkgfHwgIWhhc192ZXJ0aWNhbF9zYikpCisgICAgICAgICAgICAgICAgYnMgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vaW5zaWRlIGEgY3UsIG5vdCBhbGln bmVkIHRvIDggb3Igd2l0aCBubyBzdWJibG9ja3MKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgICBicyA9IGJvdW5kYXJ5X3N0cmVuZ3RoKGxjLCBjdXJyLCBsZWZ0LCBycGxfbGVmdCk7 CisKKyAgICAgICAgICAgIFRBQl9CUyhmYy0+dGFiLnZlcnRpY2FsX2JzW0xVTUFdLCB4MCwgKHkw ICsgaSkpID0gYnM7CisKKyAgICAgICAgICAgIGRlcml2ZV9tYXhfZmlsdGVyX2xlbmd0aF9sdW1h KGZjLCB4MCwgeTAgKyBpLCBpc19pbnRyYSwgaGFzX3ZlcnRpY2FsX3NiLCAxLCAmbWF4X2xlbl9w LCAmbWF4X2xlbl9xKTsKKyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50YWIudmVydGljYWxf cCwgeDAsIHkwICsgaSkgPSBtYXhfbGVuX3A7CisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+ dGFiLnZlcnRpY2FsX3EsIHgwLCB5MCArIGkpID0gbWF4X2xlbl9xOworICAgICAgICB9CisgICAg fQorCisgICAgaWYgKCFpc19pbnRyYSkgeworICAgICAgICBpZiAoZmMtPnRhYi5tc2Zbb2ZmX3Fd IHx8IGZjLT50YWIuaWFmW29mZl9xXSkKKyAgICAgICAgICAgIGRlYmxvY2tfc3ViYmxvY2tfYnNf dmVydGljYWwobGMsIGNiX3gsIGNiX3ksIHgwLCB5MCwgd2lkdGgsIGhlaWdodCk7CisgICAgfQor Cit9CitzdGF0aWMgdm9pZCBkZWJsb2NrX2JzX2x1bWFfaG9yaXpvbnRhbChjb25zdCBWVkNMb2Nh bENvbnRleHQgKmxjLAorICAgIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQg d2lkdGgsIGNvbnN0IGludCBoZWlnaHQpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpm YyAgPSBsYy0+ZmM7CisgICAgTXZGaWVsZCAqdGFiX212ZiAgICAgICAgICAgPSBmYy0+dGFiLm12 ZjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSA9IE1JTl9QVV9MT0cyOworICAgIGNv bnN0IGludCBsb2cyX21pbl90dV9zaXplID0gTUlOX1RVX0xPRzI7CisgICAgY29uc3QgaW50IG1p bl9wdV93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50 IG1pbl90dV93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGg7CisgICAgY29uc3Qg aW50IG1pbl9jYl9sb2cyICAgICAgPSBmYy0+cHMuc3BzLT5taW5fY2JfbG9nMl9zaXplX3k7Cisg ICAgY29uc3QgaW50IG1pbl9jYl93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fY2Jfd2lkdGg7 CisgICAgaW50IGlzX2ludHJhID0gdGFiX212ZlsoeTAgPj4gbG9nMl9taW5fcHVfc2l6ZSkgKiBt aW5fcHVfd2lkdGggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgKHgwID4+IGxvZzJfbWlu X3B1X3NpemUpXS5wcmVkX2ZsYWcgPT0gUEZfSU5UUkE7CisgICAgaW50IGJvdW5kYXJ5X3VwcGVy OworICAgIGludCBoYXNfaG9yaXpvbnRhbF9zYiA9IDA7CisgICAgdWludDhfdCBtYXhfbGVuX3As IG1heF9sZW5fcTsKKworICAgIGNvbnN0IGludCBvZmZfcSAgICAgICAgICAgID0gKHkwID4+IG1p bl9jYl9sb2cyKSAqIG1pbl9jYl93aWR0aCArICh4MCA+PiBtaW5fY2JfbG9nMik7CisgICAgY29u c3QgaW50IGNiX3ggICAgICAgICAgICAgPSBmYy0+dGFiLmNiX3Bvc194W0xVTUFdW29mZl9xXTsK KyAgICBjb25zdCBpbnQgY2JfeSAgICAgICAgICAgICA9IGZjLT50YWIuY2JfcG9zX3lbTFVNQV1b b2ZmX3FdOworICAgIGNvbnN0IGludCBjYl9oZWlnaHQgICAgICAgID0gZmMtPnRhYi5jYl9oZWln aHRbTFVNQV1bb2ZmX3FdOworCisgICAgaWYgKCFpc19pbnRyYSkgeworICAgICAgICBpZiAoZmMt PnRhYi5tc2Zbb2ZmX3FdIHx8IGZjLT50YWIuaWFmW29mZl9xXSkKKyAgICAgICAgICAgIGhhc19o b3Jpem9udGFsX3NiID0gY2JfaGVpZ2h0ID4gODsKKyAgICB9CisKKyAgICBib3VuZGFyeV91cHBl ciA9IHkwID4gMCAmJiAhKHkwICYgMyk7CisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyICYmCisgICAg ICAgICgoIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJs ZWRfZmxhZyAmJgorICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQ RVJfU0xJQ0UgJiYKKyAgICAgICAgICAgICh5MCAlICgxIDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cy X3NpemVfeSkpID09IDApIHx8CisgICAgICAgICAgICAoIWZjLT5wcy5wcHMtPnItPnBwc19sb29w X2ZpbHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxlZF9mbGFnICYmCisgICAgICAgICAgICBsYy0+Ym91 bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9USUxFICYmCisgICAgICAgICAgICAoeTAgJSAo MSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSkpCisgICAgICAgIGJvdW5k YXJ5X3VwcGVyID0gMDsKKworICAgIGlmIChib3VuZGFyeV91cHBlcikgeworICAgICAgICBjb25z dCBSZWZQaWNMaXN0ICpycGxfdG9wID0KKyAgICAgICAgICAgIChsYy0+Ym91bmRhcnlfZmxhZ3Mg JiBCT1VOREFSWV9VUFBFUl9TTElDRSkgPyBmZl92dmNfZ2V0X3JlZl9saXN0KGZjLCBmYy0+cmVm LCB4MCwgeTAgLSAxKSA6IGxjLT5zYy0+cnBsOworICAgICAgICBpbnQgeXBfcHUgPSAoeTAgLSAx KSA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICBpbnQgeXFfcHUgPSAgeTAgICAgICA+PiBs b2cyX21pbl9wdV9zaXplOworICAgICAgICBpbnQgeXBfdHUgPSAoeTAgLSAxKSA+PiBsb2cyX21p bl90dV9zaXplOworICAgICAgICBpbnQgeXFfdHUgPSAgeTAgICAgICA+PiBsb2cyX21pbl90dV9z aXplOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGg7IGkgKz0gNCkgeworICAg ICAgICAgICAgaW50IGJzOworICAgICAgICAgICAgY29uc3QgaW50IG9mZl95ID0geTAgLSBjYl95 OworICAgICAgICAgICAgaW50IHhfcHUgPSAoeDAgKyBpKSA+PiBsb2cyX21pbl9wdV9zaXplOwor ICAgICAgICAgICAgaW50IHhfdHUgPSAoeDAgKyBpKSA+PiBsb2cyX21pbl90dV9zaXplOworICAg ICAgICAgICAgTXZGaWVsZCAqdG9wICA9ICZ0YWJfbXZmW3lwX3B1ICogbWluX3B1X3dpZHRoICsg eF9wdV07CisgICAgICAgICAgICBNdkZpZWxkICpjdXJyID0gJnRhYl9tdmZbeXFfcHUgKiBtaW5f cHVfd2lkdGggKyB4X3B1XTsKKyAgICAgICAgICAgIHVpbnQ4X3QgdG9wX2NiZl9sdW1hICA9IGZj LT50YWIudHVfY29kZWRfZmxhZ1tMVU1BXVt5cF90dSAqIG1pbl90dV93aWR0aCArIHhfdHVdOwor ICAgICAgICAgICAgdWludDhfdCBjdXJyX2NiZl9sdW1hID0gZmMtPnRhYi50dV9jb2RlZF9mbGFn W0xVTUFdW3lxX3R1ICogbWluX3R1X3dpZHRoICsgeF90dV07CisgICAgICAgICAgICBjb25zdCB1 aW50OF90IHBjbWYgICAgPSBmYy0+dGFiLnBjbWZbTFVNQV1beXBfdHUgKiBtaW5fdHVfd2lkdGgg KyB4X3R1XSAmJgorICAgICAgICAgICAgICAgIGZjLT50YWIucGNtZltMVU1BXVt5cV90dSAqIG1p bl90dV93aWR0aCArIHhfdHVdOworCisgICAgICAgICAgICBpZiAocGNtZikKKyAgICAgICAgICAg ICAgICBicyA9IDA7CisgICAgICAgICAgICBlbHNlIGlmIChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZf SU5UUkEgfHwgdG9wLT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgY3Vyci0+Y2lpcF9mbGFnIHx8 IHRvcC0+Y2lpcF9mbGFnKQorICAgICAgICAgICAgICAgIGJzID0gMjsKKyAgICAgICAgICAgIGVs c2UgaWYgKGN1cnJfY2JmX2x1bWEgfHwgdG9wX2NiZl9sdW1hKQorICAgICAgICAgICAgICAgIGJz ID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9mZl95ICYmICgob2ZmX3kgJSA4KSB8fCAhaGFz X2hvcml6b250YWxfc2IpKQorICAgICAgICAgICAgICAgIGJzID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy9pbnNpZGUgYSBjdSwgbm90IGFsaWduZWQgdG8gOCBvciB3 aXRoIG5vIHN1YmJsb2NrcworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJzID0g Ym91bmRhcnlfc3RyZW5ndGgobGMsIGN1cnIsIHRvcCwgcnBsX3RvcCk7CisKKyAgICAgICAgICAg IFRBQl9CUyhmYy0+dGFiLmhvcml6b250YWxfYnNbTFVNQV0sIHgwICsgaSwgeTApID0gYnM7CisK KyAgICAgICAgICAgIGRlcml2ZV9tYXhfZmlsdGVyX2xlbmd0aF9sdW1hKGZjLCB4MCArIGksIHkw LCBpc19pbnRyYSwgaGFzX2hvcml6b250YWxfc2IsIDAsICZtYXhfbGVuX3AsICZtYXhfbGVuX3Ep OworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi5ob3Jpem9udGFsX3AsIHgwICsgaSwg eTApID0gbWF4X2xlbl9wOworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi5ob3Jpem9u dGFsX3EsIHgwICsgaSwgeTApID0gbWF4X2xlbl9xOworICAgICAgICB9CisgICAgfQorCisgICAg aWYgKCFpc19pbnRyYSkgeworICAgICAgICBpZiAoZmMtPnRhYi5tc2Zbb2ZmX3FdIHx8IGZjLT50 YWIuaWFmW29mZl9xXSkKKyAgICAgICAgICAgIGRlYmxvY2tfc3ViYmxvY2tfYnNfaG9yaXpvbnRh bChsYywgY2JfeCwgY2JfeSwgeDAsIHkwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9Cit9CisKK3N0 YXRpYyB2b2lkIGRlYmxvY2tfYnNfY2hyb21hX3ZlcnRpY2FsKGNvbnN0IFZWQ0xvY2FsQ29udGV4 dCAqbGMsCisgICAgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwg Y29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICA9IGxj LT5mYzsKKyAgICBNdkZpZWxkICp0YWJfbXZmICAgICAgICAgICA9IGZjLT50YWIubXZmOworICAg IGNvbnN0IGludCBsb2cyX21pbl9wdV9zaXplID0gTUlOX1BVX0xPRzI7CisgICAgY29uc3QgaW50 IGxvZzJfbWluX3R1X3NpemUgPSBNSU5fUFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbWluX3B1X3dp ZHRoICAgICA9IGZjLT5wcy5wcHMtPm1pbl9wdV93aWR0aDsKKyAgICBjb25zdCBpbnQgbWluX3R1 X3dpZHRoICAgICA9IGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aDsKKyAgICBpbnQgYm91bmRhcnlf bGVmdCwgaTsKKworICAgIC8vIGJzIGZvciB2ZXJ0aWNhbCBUVSBib3VuZGFyaWVzCisgICAgYm91 bmRhcnlfbGVmdCA9IHgwID4gMCAmJiAhKHgwICYgKChDSFJPTUFfR1JJRCA8PCBmYy0+cHMuc3Bz LT5oc2hpZnRbMV0pIC0gMSkpOworICAgIGlmIChib3VuZGFyeV9sZWZ0ICYmCisgICAgICAgICgo IWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxh ZyAmJgorICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfU0xJQ0Ug JiYKKyAgICAgICAgICAoeDAgJSAoMSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9 PSAwKSB8fAorICAgICAgICAgKCFmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3Nz X3RpbGVzX2VuYWJsZWRfZmxhZyAmJgorICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAmIEJP VU5EQVJZX0xFRlRfVElMRSAmJgorICAgICAgICAgICh4MCAlICgxIDw8IGZjLT5wcy5zcHMtPmN0 Yl9sb2cyX3NpemVfeSkpID09IDApKSkKKyAgICAgICAgYm91bmRhcnlfbGVmdCA9IDA7CisKKyAg ICBpZiAoYm91bmRhcnlfbGVmdCkgeworICAgICAgICBpbnQgeHBfcHUgPSAoeDAgLSAxKSA+PiBs b2cyX21pbl9wdV9zaXplOworICAgICAgICBpbnQgeHFfcHUgPSAgeDAgICAgICA+PiBsb2cyX21p bl9wdV9zaXplOworICAgICAgICBpbnQgeHBfdHUgPSAoeDAgLSAxKSA+PiBsb2cyX21pbl90dV9z aXplOworICAgICAgICBpbnQgeHFfdHUgPSAgeDAgICAgICA+PiBsb2cyX21pbl90dV9zaXplOwor CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkgKz0gMikgeworICAgICAgICAgICAg aW50IHlfcHUgICAgICA9ICh5MCArIGkpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAg ICBpbnQgeV90dSAgICAgID0gKHkwICsgaSkgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKyAgICAgICAg ICAgIE12RmllbGQgKmxlZnQgPSAmdGFiX212Zlt5X3B1ICogbWluX3B1X3dpZHRoICsgeHBfcHVd OworICAgICAgICAgICAgTXZGaWVsZCAqY3VyciA9ICZ0YWJfbXZmW3lfcHUgKiBtaW5fcHVfd2lk dGggKyB4cV9wdV07CisgICAgICAgICAgICBjb25zdCBpbnQgbGVmdF90dSA9IHlfdHUgKiBtaW5f dHVfd2lkdGggKyB4cF90dTsKKyAgICAgICAgICAgIGNvbnN0IGludCBjdXJyX3R1ID0geV90dSAq IG1pbl90dV93aWR0aCArIHhxX3R1OworICAgICAgICAgICAgY29uc3QgdWludDhfdCBwY21mID0g ZmMtPnRhYi5wY21mW0NIUk9NQV1bbGVmdF90dV0gJiYgZmMtPnRhYi5wY21mW0NIUk9NQV1bY3Vy cl90dV07CisKKyAgICAgICAgICAgIGZvciAoaW50IGMgPSBDQjsgYyA8PSBDUjsgYysrKSB7Cisg ICAgICAgICAgICAgICAgdWludDhfdCBjYmYgID0gZmMtPnRhYi50dV9jb2RlZF9mbGFnW2NdW2xl ZnRfdHVdIHwKKyAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi50dV9jb2RlZF9mbGFnW2NdW2N1 cnJfdHVdIHwKKyAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi50dV9qb2ludF9jYmNyX3Jlc2lk dWFsX2ZsYWdbbGVmdF90dV0gfAorICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnR1X2pvaW50 X2NiY3JfcmVzaWR1YWxfZmxhZ1tjdXJyX3R1XTsKKyAgICAgICAgICAgICAgICBpbnQgYnMgPSAw OworCisgICAgICAgICAgICAgICAgaWYgKHBjbWYpCisgICAgICAgICAgICAgICAgICAgIGJzID0g MDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEg fHwgbGVmdC0+cHJlZF9mbGFnID09IFBGX0lOVFJBIHx8IGN1cnItPmNpaXBfZmxhZyB8fCBsZWZ0 LT5jaWlwX2ZsYWcpCisgICAgICAgICAgICAgICAgICAgIGJzID0gMjsKKyAgICAgICAgICAgICAg ICBlbHNlIGlmIChjYmYpCisgICAgICAgICAgICAgICAgICAgIGJzID0gMTsKKyAgICAgICAgICAg ICAgICBUQUJfQlMoZmMtPnRhYi52ZXJ0aWNhbF9ic1tjXSwgeDAsICh5MCArIGkpKSA9IGJzOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBkZWJsb2Nr X2JzX2Nocm9tYV9ob3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29u c3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdo dCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMtPmZjOworICAgIE12Rmll bGQgKnRhYl9tdmYgPSBmYy0+dGFiLm12ZjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6 ZSA9IE1JTl9QVV9MT0cyOworICAgIGNvbnN0IGludCBsb2cyX21pbl90dV9zaXplID0gTUlOX1BV X0xPRzI7CisgICAgY29uc3QgaW50IG1pbl9wdV93aWR0aCA9IGZjLT5wcy5wcHMtPm1pbl9wdV93 aWR0aDsKKyAgICBjb25zdCBpbnQgbWluX3R1X3dpZHRoID0gZmMtPnBzLnBwcy0+bWluX3R1X3dp ZHRoOworICAgIGludCBib3VuZGFyeV91cHBlcjsKKworICAgIGJvdW5kYXJ5X3VwcGVyID0geTAg PiAwICYmICEoeTAgJiAoKENIUk9NQV9HUklEIDw8IGZjLT5wcy5zcHMtPnZzaGlmdFsxXSkgLSAx KSk7CisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyICYmCisgICAgICAgICgoIWZjLT5wcy5wcHMtPnIt PnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyAmJgorICAgICAgICAg ICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0UgJiYKKyAgICAgICAg ICAgICh5MCAlICgxIDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDApIHx8Cisg ICAgICAgICAgICAoIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3NfdGlsZXNf ZW5hYmxlZF9mbGFnICYmCisgICAgICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9V TkRBUllfVVBQRVJfVElMRSAmJgorICAgICAgICAgICAgICAgICh5MCAlICgxIDw8IGZjLT5wcy5z cHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDApKSkKKyAgICAgICAgYm91bmRhcnlfdXBwZXIgPSAw OworCisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyKSB7CisgICAgICAgIGludCB5cF9wdSA9ICh5MCAt IDEpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgIGludCB5cV9wdSA9IHkwID4+IGxvZzJf bWluX3B1X3NpemU7CisgICAgICAgIGludCB5cF90dSA9ICh5MCAtIDEpID4+IGxvZzJfbWluX3R1 X3NpemU7CisgICAgICAgIGludCB5cV90dSA9IHkwID4+IGxvZzJfbWluX3R1X3NpemU7CisKKyAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSArPSAyKSB7CisgICAgICAgICAgICBp bnQgeF9wdSA9ICh4MCArIGkpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAgICBpbnQg eF90dSA9ICh4MCArIGkpID4+IGxvZzJfbWluX3R1X3NpemU7CisgICAgICAgICAgICBNdkZpZWxk ICp0b3AgPSAmdGFiX212Zlt5cF9wdSAqIG1pbl9wdV93aWR0aCArIHhfcHVdOworICAgICAgICAg ICAgTXZGaWVsZCAqY3VyciA9ICZ0YWJfbXZmW3lxX3B1ICogbWluX3B1X3dpZHRoICsgeF9wdV07 CisgICAgICAgICAgICBjb25zdCBpbnQgdG9wX3R1ID0geXBfdHUgKiBtaW5fdHVfd2lkdGggKyB4 X3R1OworICAgICAgICAgICAgY29uc3QgaW50IGN1cnJfdHUgPSB5cV90dSAqIG1pbl90dV93aWR0 aCArIHhfdHU7CisgICAgICAgICAgICBjb25zdCB1aW50OF90IHBjbWYgPSBmYy0+dGFiLnBjbWZb Q0hST01BXVt0b3BfdHVdICYmIGZjLT50YWIucGNtZltDSFJPTUFdW2N1cnJfdHVdOworCisgICAg ICAgICAgICBmb3IgKGludCBjID0gQ0I7IGMgPD0gQ1I7IGMrKykgeworICAgICAgICAgICAgICAg IHVpbnQ4X3QgY2JmID0gZmMtPnRhYi50dV9jb2RlZF9mbGFnW2NdW3RvcF90dV0gfAorICAgICAg ICAgICAgICAgICAgICBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbY11bY3Vycl90dV0gfAorICAgICAg ICAgICAgICAgICAgICBmYy0+dGFiLnR1X2pvaW50X2NiY3JfcmVzaWR1YWxfZmxhZ1t0b3BfdHVd IHwKKyAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi50dV9qb2ludF9jYmNyX3Jlc2lkdWFsX2Zs YWdbY3Vycl90dV07CisgICAgICAgICAgICAgICAgaW50IGJzID0gMDsKKworICAgICAgICAgICAg ICAgIGlmIChwY21mKQorICAgICAgICAgICAgICAgICAgICBicyA9IDA7CisgICAgICAgICAgICAg ICAgZWxzZSBpZiAoY3Vyci0+cHJlZF9mbGFnID09IFBGX0lOVFJBIHx8IHRvcC0+cHJlZF9mbGFn ID09IFBGX0lOVFJBIHx8IGN1cnItPmNpaXBfZmxhZyB8fCB0b3AtPmNpaXBfZmxhZykKKyAgICAg ICAgICAgICAgICAgICAgYnMgPSAyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNiZikKKyAg ICAgICAgICAgICAgICAgICAgYnMgPSAxOworICAgICAgICAgICAgICAgIFRBQl9CUyhmYy0+dGFi Lmhvcml6b250YWxfYnNbY10sIHgwICsgaSwgeTApID0gYnM7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9Cit9CisKK3R5cGVkZWYgdm9pZCAoKmRlYmxvY2tfYnNfZm4pKGNvbnN0IFZW Q0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLAorICAgIGNvbnN0 IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCk7CisKK3N0YXRpYyB2b2lkIGRlYmxvY2tfYnMo Y29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNv bnN0IGludCB2ZXJ0aWNhbCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMt PmZjOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IFZW Q1BQUyAqcHBzICAgPSBmYy0+cHMucHBzOworICAgIGNvbnN0IGludCBjdGJfc2l6ZSAgPSBzcHMt PmN0Yl9zaXplX3k7CisgICAgY29uc3QgaW50IHhfZW5kICAgICA9IEZGTUlOKHgwICsgY3RiX3Np emUsIHBwcy0+d2lkdGgpID4+IE1JTl9UVV9MT0cyOworICAgIGNvbnN0IGludCB5X2VuZCAgICAg PSBGRk1JTih5MCArIGN0Yl9zaXplLCBwcHMtPmhlaWdodCkgPj4gTUlOX1RVX0xPRzI7CisgICAg ZGVibG9ja19ic19mbiBkZWJsb2NrX2JzWzJdWzJdID0geworICAgICAgICB7IGRlYmxvY2tfYnNf bHVtYV9ob3Jpem9udGFsLCBkZWJsb2NrX2JzX2Nocm9tYV9ob3Jpem9udGFsIH0sCisgICAgICAg IHsgZGVibG9ja19ic19sdW1hX3ZlcnRpY2FsLCAgIGRlYmxvY2tfYnNfY2hyb21hX3ZlcnRpY2Fs ICAgfQorICAgIH07CisKKyAgICBmb3IgKGludCBpc19jaHJvbWEgPSAwOyBpc19jaHJvbWEgPD0g MTsgaXNfY2hyb21hKyspIHsKKyAgICAgICAgY29uc3QgaW50IGhzID0gc3BzLT5oc2hpZnRbaXNf Y2hyb21hXTsKKyAgICAgICAgY29uc3QgaW50IHZzID0gc3BzLT52c2hpZnRbaXNfY2hyb21hXTsK KyAgICAgICAgZm9yIChpbnQgeSA9IHkwID4+IE1JTl9UVV9MT0cyOyB5IDwgeV9lbmQ7IHkrKykg eworICAgICAgICAgICAgZm9yIChpbnQgeCA9IHgwID4+IE1JTl9UVV9MT0cyOyB4IDwgeF9lbmQ7 IHgrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBvZmYgPSB5ICogZmMtPnBzLnBwcy0+ bWluX3R1X3dpZHRoICsgeDsKKyAgICAgICAgICAgICAgICBpZiAoKGZjLT50YWIudGJfcG9zX3gw W2lzX2Nocm9tYV1bb2ZmXSA+PiBNSU5fVFVfTE9HMikgPT0geCAmJiAoZmMtPnRhYi50Yl9wb3Nf eTBbaXNfY2hyb21hXVtvZmZdID4+IE1JTl9UVV9MT0cyKSA9PSB5KSB7CisgICAgICAgICAgICAg ICAgICAgIGRlYmxvY2tfYnNbdmVydGljYWxdW2lzX2Nocm9tYV0obGMsIHggPDwgTUlOX1RVX0xP RzIsIHkgPDwgTUlOX1RVX0xPRzIsCisgICAgICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnRi X3dpZHRoW2lzX2Nocm9tYV1bb2ZmXSA8PCBocywgZmMtPnRhYi50Yl9oZWlnaHRbaXNfY2hyb21h XVtvZmZdIDw8IHZzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9Cit9CisKKy8vcGFydCBvZiA4LjguMy4zIERlcml2YXRpb24gcHJvY2VzcyBvZiB0 cmFuc2Zvcm0gYmxvY2sgYm91bmRhcnkKK3N0YXRpYyB2b2lkIG1heF9maWx0ZXJfbGVuZ3RoX2x1 bWEoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgaW50IHF4LCBjb25zdCBpbnQgcXks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB2ZXJ0aWNhbCwg dWludDhfdCAqbWF4X2xlbl9wLCB1aW50OF90ICptYXhfbGVuX3EpCit7CisgICAgY29uc3QgdWlu dDhfdCAqdGFiX2xlbl9wID0gdmVydGljYWwgPyBmYy0+dGFiLnZlcnRpY2FsX3AgOiBmYy0+dGFi Lmhvcml6b250YWxfcDsKKyAgICBjb25zdCB1aW50OF90ICp0YWJfbGVuX3EgPSB2ZXJ0aWNhbCA/ IGZjLT50YWIudmVydGljYWxfcSA6IGZjLT50YWIuaG9yaXpvbnRhbF9xOworICAgICptYXhfbGVu X3AgPSBUQUJfTUFYX0xFTih0YWJfbGVuX3AsIHF4LCBxeSk7CisgICAgKm1heF9sZW5fcSA9IFRB Ql9NQVhfTEVOKHRhYl9sZW5fcSwgcXgsIHF5KTsKK30KKworLy9wYXJ0IG9mIDguOC4zLjMgRGVy aXZhdGlvbiBwcm9jZXNzIG9mIHRyYW5zZm9ybSBibG9jayBib3VuZGFyeQorc3RhdGljIHZvaWQg bWF4X2ZpbHRlcl9sZW5ndGhfY2hyb21hKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0 IGludCBxeCwgY29uc3QgaW50IHF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGludCB2ZXJ0aWNhbCwgY29uc3QgaW50IGhvcml6b250YWxfY3R1X2VkZ2UsIGNv bnN0IGludCBicywgdWludDhfdCAqbWF4X2xlbl9wLCB1aW50OF90ICptYXhfbGVuX3EpCit7Cisg ICAgY29uc3QgaW50IHB4ID0gIHZlcnRpY2FsID8gcXggLSAxIDogcXg7CisgICAgY29uc3QgaW50 IHB5ID0gIXZlcnRpY2FsID8gcXkgLSAxIDogcXk7CisgICAgY29uc3QgdWludDhfdCAqdGJfc2l6 ZSA9IHZlcnRpY2FsID8gZmMtPnRhYi50Yl93aWR0aFtDSFJPTUFdIDogZmMtPnRhYi50Yl9oZWln aHRbQ0hST01BXTsKKworICAgIGNvbnN0IGludCBzaXplX3AgPSB0Yl9zaXplWyhweSA+PiBNSU5f VFVfTE9HMikgKiBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGggKyAocHggPj4gTUlOX1RVX0xPRzIp XTsKKyAgICBjb25zdCBpbnQgc2l6ZV9xID0gdGJfc2l6ZVsocXkgPj4gTUlOX1RVX0xPRzIpICog ZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoICsgKHF4ID4+IE1JTl9UVV9MT0cyKV07CisgICAgaWYg KHNpemVfcCA+PSA4ICYmIHNpemVfcSA+PSA4KSB7CisgICAgICAgICptYXhfbGVuX3AgPSAqbWF4 X2xlbl9xID0gMzsKKyAgICAgICAgaWYgKGhvcml6b250YWxfY3R1X2VkZ2UpCisgICAgICAgICAg ICAqbWF4X2xlbl9wID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICAvL3BhcnQgb2YgOC44LjMu Ni40IERlY2lzaW9uIHByb2Nlc3MgZm9yIGNocm9tYSBibG9jayBlZGdlcworICAgICAgICAqbWF4 X2xlbl9wID0gKm1heF9sZW5fcSA9IChicyA9PSAyKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IG1heF9maWx0ZXJfbGVuZ3RoKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGludCBx eCwgY29uc3QgaW50IHF5LAorICAgIGNvbnN0IGludCBjX2lkeCwgY29uc3QgaW50IHZlcnRpY2Fs LCBjb25zdCBpbnQgaG9yaXpvbnRhbF9jdHVfZWRnZSwgY29uc3QgaW50IGJzLCB1aW50OF90ICpt YXhfbGVuX3AsIHVpbnQ4X3QgKm1heF9sZW5fcSkKK3sKKyAgICBpZiAoIWNfaWR4KQorICAgICAg ICBtYXhfZmlsdGVyX2xlbmd0aF9sdW1hKGZjLCBxeCwgcXksIHZlcnRpY2FsLCBtYXhfbGVuX3As IG1heF9sZW5fcSk7CisgICAgZWxzZQorICAgICAgICBtYXhfZmlsdGVyX2xlbmd0aF9jaHJvbWEo ZmMsIHF4LCBxeSwgdmVydGljYWwsIGhvcml6b250YWxfY3R1X2VkZ2UsIGJzLCBtYXhfbGVuX3As IG1heF9sZW5fcSk7Cit9CisKKyNkZWZpbmUgVENfQ0FMQyhxcCwgYnMpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0Y3RhYmxlW2F2X2NsaXAo KHFwKSArIERFRkFVTFRfSU5UUkFfVENfT0ZGU0VUICogKChicykgLSAxKSArICAgICAgIFwKKyAg ICAgICAgICAgICAgICAgICAgKHRjX29mZnNldCAmIC0yKSwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgMCwgTUFYX1FQICsgREVGQVVMVF9J TlRSQV9UQ19PRkZTRVQpXQorCisvLyBwYXJ0IG9mIDguOC4zLjYuMiBEZWNpc2lvbiBwcm9jZXNz IGZvciBsdW1hIGJsb2NrIGVkZ2VzCitzdGF0aWMgaW50IGdldF9xcF95KGNvbnN0IFZWQ0ZyYW1l Q29udGV4dCAqZmMsIGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgaW50IHgsIGNvbnN0IGludCB5 LCBjb25zdCBpbnQgdmVydGljYWwpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICA9IGZjLT5w cy5zcHM7CisgICAgY29uc3QgaW50IHFwICAgICAgICA9IChmZl92dmNfZ2V0X3FQeShmYywgeCAt IHZlcnRpY2FsLCB5IC0gIXZlcnRpY2FsKSArIGZmX3Z2Y19nZXRfcVB5KGZjLCB4LCB5KSArIDEp ID4+IDE7CisgICAgaW50IHFwX29mZnNldCAgICAgICA9IDA7CisgICAgaW50IGxldmVsOworCisg ICAgaWYgKCFzcHMtPnItPnNwc19sYWRmX2VuYWJsZWRfZmxhZykKKyAgICAgICAgcmV0dXJuIHFw OworCisgICAgbGV2ZWwgPSBmYy0+dnZjZHNwLmxmLmxhZGZfbGV2ZWxbdmVydGljYWxdKHNyYywg ZmMtPmZyYW1lLT5saW5lc2l6ZVtMVU1BXSk7CisgICAgcXBfb2Zmc2V0ID0gc3BzLT5yLT5zcHNf bGFkZl9sb3dlc3RfaW50ZXJ2YWxfcXBfb2Zmc2V0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg c3BzLT5udW1fbGFkZl9pbnRlcnZhbHMgLSAxICYmIGxldmVsID4gc3BzLT5sYWRmX2ludGVydmFs X2xvd2VyX2JvdW5kW2kgKyAxXTsgaSsrKQorICAgICAgICBxcF9vZmZzZXQgPSBzcHMtPnItPnNw c19sYWRmX3FwX29mZnNldFtpXTsKKworICAgIHJldHVybiBxcCArIHFwX29mZnNldDsKK30KKwor Ly8gcGFydCBvZiA4LjguMy42LjIgRGVjaXNpb24gcHJvY2VzcyBmb3IgbHVtYSBibG9jayBlZGdl cworc3RhdGljIGludCBnZXRfcXBfYyhjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBp bnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGludCBjX2lkeCwgY29uc3QgaW50IHZlcnRpY2FsKQor eworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAgIHJldHVybiAoZ2V0 X3FQYyhmYywgeCAtIHZlcnRpY2FsLCB5IC0gIXZlcnRpY2FsLCBjX2lkeCkgKyBnZXRfcVBjKGZj LCB4LCB5LCBjX2lkeCkgLSAyICogc3BzLT5xcF9iZF9vZmZzZXQgKyAxKSA+PiAxOworfQorCitz dGF0aWMgaW50IGdldF9xcChjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCB1aW50OF90 ICpzcmMsIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwgY29uc3QgaW50IGNfaWR4LCBjb25zdCBp bnQgdmVydGljYWwpCit7CisgICAgaWYgKCFjX2lkeCkKKyAgICAgICAgcmV0dXJuIGdldF9xcF95 KGZjLCBzcmMsIHgsIHksIHZlcnRpY2FsKTsKKyAgICByZXR1cm4gZ2V0X3FwX2MoZmMsIHgsIHks IGNfaWR4LCB2ZXJ0aWNhbCk7Cit9CisKK3ZvaWQgZmZfdnZjX2RlYmxvY2tfdmVydGljYWwoY29u c3QgVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTApCit7CisgICAgVlZDRnJhbWVD b250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgID0gZmMtPnBzLnNw czsKKyAgICBjb25zdCBpbnQgY19lbmQgICAgID0gc3BzLT5yLT5zcHNfY2hyb21hX2Zvcm1hdF9p ZGMgPyBWVkNfTUFYX1NBTVBMRV9BUlJBWVMgOiAxOworICAgIHVpbnQ4X3QgKnNyYzsKKyAgICBp bnQgeCwgeSwgcXA7CisKKyAgICAvL25vdCB1c2UgdGhpcyB5ZXQsIG1heSBuZWVkZWQgYnkgcGx0 LgorICAgIGNvbnN0IHVpbnQ4X3Qgbm9fcFs0XSA9IHsgMCB9OworICAgIGNvbnN0IHVpbnQ4X3Qg bm9fcVs0XSA9IHsgMCB9IDsKKworICAgIGludCBjdGJfbG9nMl9zaXplX3kgPSBmYy0+cHMuc3Bz LT5jdGJfbG9nMl9zaXplX3k7CisgICAgaW50IHhfZW5kLCB5X2VuZDsKKyAgICBpbnQgY3RiX3Np emUgPSAxIDw8IGN0Yl9sb2cyX3NpemVfeTsKKyAgICBpbnQgY3RiID0gKHgwID4+IGN0Yl9sb2cy X3NpemVfeSkgKworICAgICAgICAoeTAgPj4gY3RiX2xvZzJfc2l6ZV95KSAqIGZjLT5wcy5wcHMt PmN0Yl93aWR0aDsKKyAgICBEQlBhcmFtcyAgKnBhcmFtcyA9IGZjLT50YWIuZGVibG9jayArIGN0 YjsKKworICAgIGRlYmxvY2tfYnMobGMsIHgwLCB5MCwgMSk7CisKKyAgICB4X2VuZCA9IHgwICsg Y3RiX3NpemU7CisgICAgaWYgKHhfZW5kID4gZmMtPnBzLnNwcy0+d2lkdGgpCisgICAgICAgIHhf ZW5kID0gZmMtPnBzLnNwcy0+d2lkdGg7CisgICAgeV9lbmQgPSB5MCArIGN0Yl9zaXplOworICAg IGlmICh5X2VuZCA+IGZjLT5wcy5zcHMtPmhlaWdodCkKKyAgICAgICAgeV9lbmQgPSBmYy0+cHMu c3BzLT5oZWlnaHQ7CisKKyAgICBmb3IgKGludCBjX2lkeCA9IDA7IGNfaWR4IDwgY19lbmQ7IGNf aWR4KyspIHsKKyAgICAgICAgY29uc3QgaW50IGhzICAgICAgICAgICAgPSBzcHMtPmhzaGlmdFtj X2lkeF07CisgICAgICAgIGNvbnN0IGludCB2cyAgICAgICAgICAgID0gc3BzLT52c2hpZnRbY19p ZHhdOworICAgICAgICBjb25zdCBpbnQgZ3JpZCAgICAgICAgICA9IGNfaWR4ID8gKENIUk9NQV9H UklEIDw8IGhzKSA6IExVTUFfR1JJRDsKKyAgICAgICAgY29uc3QgaW50IHRjX29mZnNldCAgICAg PSBwYXJhbXMtPnRjX29mZnNldFtjX2lkeF07CisgICAgICAgIGNvbnN0IGludCBiZXRhX29mZnNl dCAgID0gcGFyYW1zLT5iZXRhX29mZnNldFtjX2lkeF07CisKKyAgICAgICAgZm9yICh5ID0geTA7 IHkgPCB5X2VuZDsgeSArPSAoREVCTE9DS19TVEVQIDw8IHZzKSkgeworICAgICAgICAgICAgZm9y ICh4ID0geDAgPyB4MCA6IGdyaWQ7IHggPCB4X2VuZDsgeCArPSBncmlkKSB7CisgICAgICAgICAg ICAgICAgaW50MzJfdCBic1s0XSwgYmV0YVs0XSwgdGNbNF0sIGFsbF96ZXJvX2JzID0gMTsKKyAg ICAgICAgICAgICAgICB1aW50OF90IG1heF9sZW5fcFs0XSwgbWF4X2xlbl9xWzRdOworCisgICAg ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBERUJMT0NLX1NURVAgPj4gKDIgLSB2cyk7 IGkrKykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgZHkgPSBpIDw8IDI7CisgICAg ICAgICAgICAgICAgICAgIGJzW2ldID0gKHkgKyBkeSA8IHlfZW5kKSA/IFRBQl9CUyhmYy0+dGFi LnZlcnRpY2FsX2JzW2NfaWR4XSwgeCwgeSArIGR5KSA6IDA7CisgICAgICAgICAgICAgICAgICAg IGlmIChic1tpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gJmZjLT5mcmFtZS0+ ZGF0YVtjX2lkeF1bKCh5ICsgZHkpID4+IHZzKSAqIGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhd ICsgKCh4ID4+IGhzKSA8PCBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdCldOworICAgICAgICAgICAg ICAgICAgICAgICAgcXAgPSBnZXRfcXAoZmMsIHNyYywgeCwgeSArIGR5LCBjX2lkeCwgMSk7CisK KyAgICAgICAgICAgICAgICAgICAgICAgIGJldGFbaV0gPSBiZXRhdGFibGVbYXZfY2xpcChxcCAr IGJldGFfb2Zmc2V0LCAwLCBNQVhfUVApXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbWF4 X2ZpbHRlcl9sZW5ndGgoZmMsIHgsIHkgKyBkeSwgY19pZHgsIDEsIDAsIGJzW2ldLCAmbWF4X2xl bl9wW2ldLCAmbWF4X2xlbl9xW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbF96ZXJv X2JzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0Y1tp XSA9IGJzW2ldID8gVENfQ0FMQyhxcCwgYnNbaV0pIDogMDsKKyAgICAgICAgICAgICAgICB9CisK KyAgICAgICAgICAgICAgICBpZiAoIWFsbF96ZXJvX2JzKSB7CisgICAgICAgICAgICAgICAgICAg IHNyYyA9ICZmYy0+ZnJhbWUtPmRhdGFbY19pZHhdWyh5ID4+IHZzKSAqIGZjLT5mcmFtZS0+bGlu ZXNpemVbY19pZHhdICsgKCh4ID4+IGhzKSA8PCBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdCldOwor ICAgICAgICAgICAgICAgICAgICBpZiAoIWNfaWR4KSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBmYy0+dnZjZHNwLmxmLmZpbHRlcl9sdW1hWzFdKHNyYywgZmMtPmZyYW1lLT5saW5lc2l6ZVtj X2lkeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSwgdGMsIG5vX3AsIG5vX3Es IG1heF9sZW5fcCwgbWF4X2xlbl9xLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIGZjLT52dmNkc3AubGYuZmlsdGVyX2Nocm9tYVsxXShz cmMsIGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJldGEsIHRjLCBub19wLCBub19xLCBtYXhfbGVuX3AsIG1heF9sZW5fcSwgdnMpOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgfQorfQorCit2b2lkIGZmX3Z2Y19kZWJsb2NrX2hvcml6b250YWwoY29uc3Qg VlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTApCit7CisgICAgVlZDRnJhbWVDb250 ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgID0gZmMtPnBzLnNwczsK KyAgICBjb25zdCBpbnQgY19lbmQgICAgID0gZmMtPnBzLnNwcy0+ci0+c3BzX2Nocm9tYV9mb3Jt YXRfaWRjID8gVlZDX01BWF9TQU1QTEVfQVJSQVlTIDogMTsKKyAgICB1aW50OF90KiBzcmM7Cisg ICAgaW50IHgsIHksIHFwOworCisgICAgLy9ub3QgdXNlIHRoaXMgeWV0LCBtYXkgbmVlZGVkIGJ5 IHBsdC4KKyAgICBjb25zdCB1aW50OF90IG5vX3BbNF0gPSB7IDAgfTsKKyAgICBjb25zdCB1aW50 OF90IG5vX3FbNF0gPSB7IDAgfSA7CisKKyAgICBpbnQgY3RiX2xvZzJfc2l6ZV95ID0gZmMtPnBz LnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGludCB4X2VuZCwgeV9lbmQ7CisgICAgaW50IGN0 Yl9zaXplID0gMSA8PCBjdGJfbG9nMl9zaXplX3k7CisgICAgaW50IGN0YiA9ICh4MCA+PiBjdGJf bG9nMl9zaXplX3kpICsKKyAgICAgICAgKHkwID4+IGN0Yl9sb2cyX3NpemVfeSkgKiBmYy0+cHMu cHBzLT5jdGJfd2lkdGg7CisKKyAgICBkZWJsb2NrX2JzKGxjLCB4MCwgeTAsIDApOworCisgICAg eF9lbmQgPSB4MCArIGN0Yl9zaXplOworICAgIGlmICh4X2VuZCA+IGZjLT5wcy5zcHMtPndpZHRo KQorICAgICAgICB4X2VuZCA9IGZjLT5wcy5zcHMtPndpZHRoOworICAgIHlfZW5kID0geTAgKyBj dGJfc2l6ZTsKKyAgICBpZiAoeV9lbmQgPiBmYy0+cHMuc3BzLT5oZWlnaHQpCisgICAgICAgIHlf ZW5kID0gZmMtPnBzLnNwcy0+aGVpZ2h0OworCisgICAgZm9yIChpbnQgY19pZHggPSAwOyBjX2lk eCA8IGNfZW5kOyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0IGludCBocyAgICAgICAgICAgID0g c3BzLT5oc2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBpbnQgdnMgICAgICAgICAgICA9IHNw cy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IGdyaWQgICAgICAgICAgPSBjX2lk eCA/IChDSFJPTUFfR1JJRCA8PCB2cykgOiBMVU1BX0dSSUQ7CisKKyAgICAgICAgZm9yICh5ID0g eTA7IHkgPCB5X2VuZDsgeSArPSBncmlkKSB7CisgICAgICAgICAgICBjb25zdCB1aW50OF90IGhv cml6b250YWxfY3R1X2VkZ2UgPSAhKHkgJSBmYy0+cHMuc3BzLT5jdGJfc2l6ZV95KTsKKyAgICAg ICAgICAgIGlmICgheSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg Zm9yICh4ID0geDAgPyB4MDogMDsgeCA8IHhfZW5kOyB4ICs9IChERUJMT0NLX1NURVAgPDwgaHMp KSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBic1s0XSwgYmV0YVs0XSwgdGNbNF0sIGFsbF96 ZXJvX2JzID0gMTsKKyAgICAgICAgICAgICAgICB1aW50OF90IG1heF9sZW5fcFs0XSwgbWF4X2xl bl9xWzRdOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBERUJMT0NLX1NU RVAgPj4gKDIgLSBocyk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgZHgg PSBpIDw8IDI7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IERCUGFyYW1zICpwYXJhbXMgPSBm Yy0+dGFiLmRlYmxvY2sgKyBjdGIgLSAoeCArIGR4IDwgeDApOworICAgICAgICAgICAgICAgICAg ICBjb25zdCBpbnQgYmV0YV9vZmZzZXQgPSBwYXJhbXMtPmJldGFfb2Zmc2V0W2NfaWR4XTsKKyAg ICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHRjX29mZnNldCA9IHBhcmFtcy0+dGNfb2Zmc2V0 W2NfaWR4XTsKKworICAgICAgICAgICAgICAgICAgICBic1tpXSA9ICh4ICsgZHggPCB4X2VuZCkg PyBUQUJfQlMoZmMtPnRhYi5ob3Jpem9udGFsX2JzW2NfaWR4XSwgeCArIGR4LCB5KSA6IDA7Cisg ICAgICAgICAgICAgICAgICAgIGlmIChic1tpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAg c3JjID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1bKHkgPj4gdnMpICogZmMtPmZyYW1lLT5saW5l c2l6ZVtjX2lkeF0gKyAoKCh4ICsgZHgpPj4gaHMpIDw8IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0 KV07CisgICAgICAgICAgICAgICAgICAgICAgICBxcCA9IGdldF9xcChmYywgc3JjLCB4ICsgZHgs IHksIGNfaWR4LCAwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYmV0YVtpXSA9IGJldGF0 YWJsZVthdl9jbGlwKHFwICsgYmV0YV9vZmZzZXQsIDAsIE1BWF9RUCldOworCisgICAgICAgICAg ICAgICAgICAgICAgICBtYXhfZmlsdGVyX2xlbmd0aChmYywgeCArIGR4LCB5LCBjX2lkeCwgMCwg aG9yaXpvbnRhbF9jdHVfZWRnZSwgYnNbaV0sICZtYXhfbGVuX3BbaV0sICZtYXhfbGVuX3FbaV0p OworICAgICAgICAgICAgICAgICAgICAgICAgYWxsX3plcm9fYnMgPSAwOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRjW2ldID0gYnNbaV0gPyBUQ19DQUxDKHFw LCBic1tpXSkgOiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWFs bF96ZXJvX2JzKSB7CisgICAgICAgICAgICAgICAgICAgIHNyYyA9ICZmYy0+ZnJhbWUtPmRhdGFb Y19pZHhdWyh5ID4+IHZzKSAqIGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdICsgKCh4ID4+IGhz KSA8PCBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdCldOworICAgICAgICAgICAgICAgICAgICBpZiAo IWNfaWR4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmYy0+dnZjZHNwLmxmLmZpbHRlcl9s dW1hWzBdKHNyYywgZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYmV0YSwgdGMsIG5vX3AsIG5vX3EsIG1heF9sZW5fcCwgbWF4X2xlbl9xLCBo b3Jpem9udGFsX2N0dV9lZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGZjLT52dmNkc3AubGYuZmlsdGVyX2Nocm9tYVswXShzcmMsIGZj LT5mcmFtZS0+bGluZXNpemVbY19pZHhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJl dGEsIHRjLCBub19wLCBub19xLCBtYXhfbGVuX3AsIG1heF9sZW5fcSwgaHMpOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZfY29weV9ib3JkZXIodWludDhfdCAqZHN0LCBj b25zdCB1aW50OF90ICpzcmMsCisgICAgY29uc3QgaW50IHBpeGVsX3NoaWZ0LCBpbnQgd2lkdGgs IGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJk aWZmX3Qgc3JjX3N0cmlkZSkKK3sKKyAgICB3aWR0aCA8PD0gcGl4ZWxfc2hpZnQ7CisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAgICBtZW1jcHkoZHN0LCBzcmMs IHdpZHRoKTsKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgIHNyYyArPSBzcmNf c3RyaWRlOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYWxmX2V4dGVuZF92ZXJ0KHVpbnQ4X3Qg Kl9kc3QsIGNvbnN0IHVpbnQ4X3QgKl9zcmMsCisgICAgY29uc3QgaW50IHBpeGVsX3NoaWZ0LCBj b25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIHB0cmRpZmZfdCBzdHJpZGUpCit7Cisg ICAgaWYgKHBpeGVsX3NoaWZ0ID09IDApIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBo ZWlnaHQ7IGkrKykgeworICAgICAgICAgICAgbWVtc2V0KF9kc3QsICpfc3JjLCB3aWR0aCk7Cisg ICAgICAgICAgICBfc3JjICs9IHN0cmlkZTsKKyAgICAgICAgICAgIF9kc3QgKz0gc3RyaWRlOwor ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgdWludDE2X3QgKnNyYyA9IChj b25zdCB1aW50MTZfdCAqKV9zcmM7CisgICAgICAgIHVpbnQxNl90ICpkc3QgPSAodWludDE2X3Qg KilfZHN0OworICAgICAgICBzdHJpZGUgPj49IHBpeGVsX3NoaWZ0OworCisgICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAw OyBqIDwgd2lkdGg7IGorKykKKyAgICAgICAgICAgICAgICBkc3Rbal0gPSAqc3JjOworICAgICAg ICAgICAgc3JjICs9IHN0cmlkZTsKKyAgICAgICAgICAgIGRzdCArPSBzdHJpZGU7CisgICAgICAg IH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9leHRlbmRfaG9yeih1aW50OF90ICpkc3Qs IGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICBjb25zdCBpbnQgcGl4ZWxfc2hpZnQsIGludCB3aWR0 aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgcHRyZGlmZl90IHN0cmlkZSkKK3sKKyAgICB3aWR0 aCA8PD0gcGl4ZWxfc2hpZnQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykg eworICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHdpZHRoKTsKKyAgICAgICAgZHN0ICs9IHN0cmlk ZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9jb3B5X2N0Yl90b19odihWVkNGcmFtZUNv bnRleHQgKmZjLCBjb25zdCB1aW50OF90ICpzcmMsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRl LAorICAgIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBp bnQgaGVpZ2h0LCBjb25zdCBpbnQgeF9jdGIsIGNvbnN0IGludCB5X2N0YiwgY29uc3QgaW50IGNf aWR4KQoreworICAgIGNvbnN0IGludCBwcyAgICAgICAgICAgID0gZmMtPnBzLnNwcy0+cGl4ZWxf c2hpZnQ7CisgICAgY29uc3QgaW50IHcgICAgICAgICAgICAgPSBmYy0+cHMuc3BzLT53aWR0aCA+ PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCBoICAgICAgICAgICAg ID0gZmMtPnBzLnNwcy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAg Y29uc3QgaW50IGJvcmRlcl9waXhlbHMgPSAoY19pZHggPT0gMCkgPyBBTEZfQk9SREVSX0xVTUEg OiBBTEZfQk9SREVSX0NIUk9NQTsKKyAgICBjb25zdCBpbnQgb2Zmc2V0X2hbXSAgICA9IHsgMCwg aGVpZ2h0IC0gYm9yZGVyX3BpeGVscyB9OworICAgIGNvbnN0IGludCBvZmZzZXRfdltdICAgID0g eyAwLCB3aWR0aCAgLSBib3JkZXJfcGl4ZWxzIH07CisKKyAgICAvKiBjb3B5IGhvcml6b250YWwg ZWRnZXMgKi8KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKG9mZnNldF9o KTsgaSsrKSB7CisgICAgICAgIGFsZl9jb3B5X2JvcmRlcihmYy0+dGFiLmFsZl9waXhlbF9idWZm ZXJfaFtjX2lkeF1baV0gKyAoKGJvcmRlcl9waXhlbHMgKiB5X2N0YiAqIHcgKyB4KTw8IHBzKSwK KyAgICAgICAgICAgIHNyYyArIG9mZnNldF9oW2ldICogc3JjX3N0cmlkZSwgcHMsIHdpZHRoLCBi b3JkZXJfcGl4ZWxzLCB3IDw8IHBzLCBzcmNfc3RyaWRlKTsKKyAgICB9CisgICAgLyogY29weSB2 ZXJ0aWNhbCBlZGdlcyAqLworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMo b2Zmc2V0X3YpOyBpKyspIHsKKyAgICAgICAgYWxmX2NvcHlfYm9yZGVyKGZjLT50YWIuYWxmX3Bp eGVsX2J1ZmZlcl92W2NfaWR4XVtpXSArICgoaCAqIHhfY3RiICsgeSkgKiAoYm9yZGVyX3BpeGVs cyA8PCBwcykpLAorICAgICAgICAgICAgc3JjICsgKG9mZnNldF92W2ldIDw8IHBzKSwgcHMsIGJv cmRlcl9waXhlbHMsIGhlaWdodCwgYm9yZGVyX3BpeGVscyA8PCBwcywgc3JjX3N0cmlkZSk7Cisg ICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZfZmlsbF9ib3JkZXJfaCh1aW50OF90ICpkc3QsIGNv bnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCB1aW50OF90ICpzcmMsIGNvbnN0IHB0cmRp ZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IHVpbnQ4X3QgKmJvcmRlciwgY29uc3QgaW50IHdp ZHRoLCBjb25zdCBpbnQgYm9yZGVyX3BpeGVscywgY29uc3QgaW50IHBzLCBjb25zdCBpbnQgZWRn ZSkKK3sKKyAgICBpZiAoZWRnZSkKKyAgICAgICAgYWxmX2V4dGVuZF9ob3J6KGRzdCwgYm9yZGVy LCBwcywgd2lkdGgsIGJvcmRlcl9waXhlbHMsIGRzdF9zdHJpZGUpOworICAgIGVsc2UKKyAgICAg ICAgYWxmX2NvcHlfYm9yZGVyKGRzdCwgc3JjLCBwcywgd2lkdGgsIGJvcmRlcl9waXhlbHMsIGRz dF9zdHJpZGUsIHNyY19zdHJpZGUpOworfQorCitzdGF0aWMgdm9pZCBhbGZfZmlsbF9ib3JkZXJf dih1aW50OF90ICpkc3QsIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCB1aW50OF90 ICpzcmMsCisgICAgY29uc3QgdWludDhfdCAqYm9yZGVyLCBjb25zdCBpbnQgYm9yZGVyX3BpeGVs cywgY29uc3QgaW50IGhlaWdodCwgY29uc3QgaW50IHBpeGVsX3NoaWZ0LCBjb25zdCBpbnQgKmVk Z2VzLCBjb25zdCBpbnQgZWRnZSkKK3sKKyAgICBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSA9 IChib3JkZXJfcGl4ZWxzIDw8IHBpeGVsX3NoaWZ0KTsKKworICAgIGlmIChlZGdlKSB7CisgICAg ICAgIGFsZl9leHRlbmRfdmVydChkc3QsIGJvcmRlciwgcGl4ZWxfc2hpZnQsIGJvcmRlcl9waXhl bHMsIGhlaWdodCArIDIgKiBib3JkZXJfcGl4ZWxzLCBkc3Rfc3RyaWRlKTsKKyAgICAgICAgcmV0 dXJuOworICAgIH0KKworICAgIC8vbGVmdC9yaWdodAorICAgIGFsZl9jb3B5X2JvcmRlcihkc3Qg KyBkc3Rfc3RyaWRlICogYm9yZGVyX3BpeGVscyAqIGVkZ2VzW1RPUF0sIHNyYyArIHNyY19zdHJp ZGUgKiBib3JkZXJfcGl4ZWxzICogZWRnZXNbVE9QXSwKKyAgICAgICAgcGl4ZWxfc2hpZnQsIGJv cmRlcl9waXhlbHMsIGhlaWdodCArICghZWRnZXNbVE9QXSArICFlZGdlc1tCT1RUT01dKSAqIGJv cmRlcl9waXhlbHMsIGRzdF9zdHJpZGUsIHNyY19zdHJpZGUpOworCisgICAgLy90b3AgbGVmdC9y aWdodAorICAgIGlmIChlZGdlc1tUT1BdKQorICAgICAgICBhbGZfZXh0ZW5kX2hvcnooZHN0LCBk c3QgKyBkc3Rfc3RyaWRlICogYm9yZGVyX3BpeGVscywgcGl4ZWxfc2hpZnQsIGJvcmRlcl9waXhl bHMsIGJvcmRlcl9waXhlbHMsIGRzdF9zdHJpZGUpOworCisgICAgLy9ib3R0b20gbGVmdC9yaWdo dAorICAgIGlmIChlZGdlc1tCT1RUT01dKSB7CisgICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlICog KGJvcmRlcl9waXhlbHMgKyBoZWlnaHQpOworICAgICAgICBhbGZfZXh0ZW5kX2hvcnooZHN0LCBk c3QgLSBkc3Rfc3RyaWRlLCBwaXhlbF9zaGlmdCwgYm9yZGVyX3BpeGVscywgYm9yZGVyX3BpeGVs cywgZHN0X3N0cmlkZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZfcHJlcGFyZV9idWZm ZXIoVlZDRnJhbWVDb250ZXh0ICpmYywgdWludDhfdCAqX2RzdCwgY29uc3QgdWludDhfdCAqX3Ny YywgY29uc3QgaW50IHgsIGNvbnN0IGludCB5LAorICAgIGNvbnN0IGludCB4X2N0YiwgY29uc3Qg aW50IHlfY3RiLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IHB0cmRp ZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwKKyAgICBjb25zdCBp bnQgY19pZHgsIGNvbnN0IGludCAqZWRnZXMpCit7CisgICAgY29uc3QgaW50IHBzID0gZmMtPnBz LnNwcy0+cGl4ZWxfc2hpZnQ7CisgICAgY29uc3QgaW50IHcgPSBmYy0+cHMuc3BzLT53aWR0aCA+ PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCBoID0gZmMtPnBzLnNw cy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IGJv cmRlcl9waXhlbHMgPSBjX2lkeCA9PSAwID8gQUxGX0JPUkRFUl9MVU1BIDogQUxGX0JPUkRFUl9D SFJPTUE7CisgICAgdWludDhfdCAqZHN0LCAqc3JjOworCisgICAgY29weV9jdGIoX2RzdCwgX3Ny Yywgd2lkdGggPDwgcHMsIGhlaWdodCwgZHN0X3N0cmlkZSwgc3JjX3N0cmlkZSk7CisKKyAgICAv L3RvcAorICAgIHNyYyA9IGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XVsxXSArICgo KGJvcmRlcl9waXhlbHMgKiAoeV9jdGIgLSAxKSkgKiB3ICsgeCkgPDwgcHMpOworICAgIGRzdCA9 IF9kc3QgLSBib3JkZXJfcGl4ZWxzICogZHN0X3N0cmlkZTsKKyAgICBhbGZfZmlsbF9ib3JkZXJf aChkc3QsIGRzdF9zdHJpZGUsIHNyYywgdyAgPDwgcHMsIF9kc3QsIHdpZHRoLCBib3JkZXJfcGl4 ZWxzLCBwcywgZWRnZXNbVE9QXSk7CisKKyAgICAvL2JvdHRvbQorICAgIHNyYyA9IGZjLT50YWIu YWxmX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XVswXSArICgoYm9yZGVyX3BpeGVscyAqICh5X2N0YiAr IDEpICogdyArIHgpIDw8IHBzKTsKKyAgICBkc3QgPSBfZHN0ICsgaGVpZ2h0ICogZHN0X3N0cmlk ZTsKKyAgICBhbGZfZmlsbF9ib3JkZXJfaChkc3QsIGRzdF9zdHJpZGUsIHNyYywgdyAgPDwgcHMs IF9kc3QgKyAoaGVpZ2h0IC0gMSkgKiBkc3Rfc3RyaWRlLCB3aWR0aCwgYm9yZGVyX3BpeGVscywg cHMsIGVkZ2VzW0JPVFRPTV0pOworCisKKyAgICAvL2xlZnQKKyAgICBzcmMgPSBmYy0+dGFiLmFs Zl9waXhlbF9idWZmZXJfdltjX2lkeF1bMV0gKyAoaCAqICh4X2N0YiAtIDEpICsgeSAtIGJvcmRl cl9waXhlbHMpICogKGJvcmRlcl9waXhlbHMgPDwgcHMpOworICAgIGRzdCA9IF9kc3QgLSAoYm9y ZGVyX3BpeGVscyA8PCBwcykgLSBib3JkZXJfcGl4ZWxzICogZHN0X3N0cmlkZTsKKyAgICBhbGZf ZmlsbF9ib3JkZXJfdihkc3QsIGRzdF9zdHJpZGUsIHNyYywgIGRzdCArIChib3JkZXJfcGl4ZWxz IDw8IHBzKSwgYm9yZGVyX3BpeGVscywgaGVpZ2h0LCBwcywgZWRnZXMsIGVkZ2VzW0xFRlRdKTsK KworICAgIC8vcmlnaHQKKyAgICBzcmMgPSBmYy0+dGFiLmFsZl9waXhlbF9idWZmZXJfdltjX2lk eF1bMF0gKyAoaCAqICh4X2N0YiArIDEpICsgeSAtIGJvcmRlcl9waXhlbHMpICogKGJvcmRlcl9w aXhlbHMgPDwgcHMpOworICAgIGRzdCA9IF9kc3QgKyAod2lkdGggPDwgcHMpIC0gYm9yZGVyX3Bp eGVscyAqIGRzdF9zdHJpZGU7CisgICAgYWxmX2ZpbGxfYm9yZGVyX3YoZHN0LCBkc3Rfc3RyaWRl LCBzcmMsICBkc3QgLSAoMSA8PCBwcyksIGJvcmRlcl9waXhlbHMsIGhlaWdodCwgcHMsIGVkZ2Vz LCBlZGdlc1tSSUdIVF0pOworfQorCisjZGVmaW5lIEFMRl9NQVhfQkxPQ0tTX0lOX0NUVSAgIChN QVhfQ1RVX1NJWkUgKiBNQVhfQ1RVX1NJWkUgLyBBTEZfQkxPQ0tfU0laRSAvIEFMRl9CTE9DS19T SVpFKQorI2RlZmluZSBBTEZfTUFYX0ZJTFRFUl9TSVpFICAgICAoQUxGX01BWF9CTE9DS1NfSU5f Q1RVICogQUxGX05VTV9DT0VGRl9MVU1BKQorCitzdGF0aWMgdm9pZCBhbGZfZ2V0X2NvZWZmX2Fu ZF9jbGlwKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludDE2X3QgKmNvZWZmLCBpbnQxNl90ICpjbGlw LAorICAgIGNvbnN0IHVpbnQ4X3QgKnNyYywgcHRyZGlmZl90IHNyY19zdHJpZGUsIGludCB3aWR0 aCwgaW50IGhlaWdodCwgaW50IHZiX3BvcywgQUxGUGFyYW1zICphbGYpCit7CisgICAgY29uc3Qg VlZDRnJhbWVDb250ZXh0ICpmYyAgICAgICA9IGxjLT5mYzsKKyAgICBjb25zdCBIMjY2UmF3U2xp Y2VIZWFkZXIgKnJzaCAgID0gbGMtPnNjLT5zaC5yOworICAgIHVpbnQ4X3QgZml4ZWRfY2xpcF9z ZXRbQUxGX05VTV9GSUxURVJTX0xVTUFdW0FMRl9OVU1fQ09FRkZfTFVNQV0gPSB7IHsgMCB9IH07 CisgICAgY29uc3QgaW50MTZfdCAqY29lZmZfc2V0OworICAgIGNvbnN0IHVpbnQ4X3QgKmNsaXBf aWR4X3NldDsKKyAgICBjb25zdCB1aW50OF90ICpjbGFzc190b19maWx0OworICAgIGNvbnN0IGlu dCBzaXplID0gd2lkdGggKiBoZWlnaHQgLyBBTEZfQkxPQ0tfU0laRSAvIEFMRl9CTE9DS19TSVpF OworICAgIGludCBjbGFzc19pZHhbQUxGX01BWF9CTE9DS1NfSU5fQ1RVXTsKKyAgICBpbnQgdHJh bnNwb3NlX2lkeFtBTEZfTUFYX0JMT0NLU19JTl9DVFVdOworCisgICAgaWYgKGFsZi0+Y3RiX2Zp bHRfc2V0X2lkeF95IDwgMTYpIHsKKyAgICAgICAgY29lZmZfc2V0ICAgICAgICAgICA9ICZmZl92 dmNfYWxmX2ZpeF9maWx0X2NvZWZmWzBdWzBdOworICAgICAgICBjbGlwX2lkeF9zZXQgICAgICAg ID0gJmZpeGVkX2NsaXBfc2V0WzBdWzBdOworICAgICAgICBjbGFzc190b19maWx0ICAgICAgID0g ZmZfdnZjX2FsZl9jbGFzc190b19maWx0X21hcFthbGYtPmN0Yl9maWx0X3NldF9pZHhfeV07Cisg ICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgaW50IGlkICAgICAgICA9IHJzaC0+c2hfYWxmX2Fw c19pZF9sdW1hW2FsZi0+Y3RiX2ZpbHRfc2V0X2lkeF95IC0gMTZdOworICAgICAgICBjb25zdCBW VkNBTEYgKmFwcyAgID0gZmMtPnBzLmFsZl9saXN0W2lkXTsKKyAgICAgICAgY29lZmZfc2V0ICAg ICAgICAgICA9ICZhcHMtPmx1bWFfY29lZmZbMF1bMF07CisgICAgICAgIGNsaXBfaWR4X3NldCAg ICAgICAgPSAmYXBzLT5sdW1hX2NsaXBfaWR4WzBdWzBdOworICAgICAgICBjbGFzc190b19maWx0 ICAgICAgID0gZmZfdnZjX2FsZl9hcHNfY2xhc3NfdG9fZmlsdF9tYXA7CisgICAgfQorICAgIGZj LT52dmNkc3AuYWxmLmNsYXNzaWZ5KGNsYXNzX2lkeCwgdHJhbnNwb3NlX2lkeCwgc3JjLCBzcmNf c3RyaWRlLCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICB2Yl9wb3MsIGxjLT5hbGZfZ3JhZGllbnRf dG1wKTsKKyAgICBmYy0+dnZjZHNwLmFsZi5yZWNvbl9jb2VmZl9hbmRfY2xpcChjb2VmZiwgY2xp cCwgY2xhc3NfaWR4LCB0cmFuc3Bvc2VfaWR4LCBzaXplLAorICAgICAgICBjb2VmZl9zZXQsIGNs aXBfaWR4X3NldCwgY2xhc3NfdG9fZmlsdCk7Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9maWx0ZXJf bHVtYShWVkNMb2NhbENvbnRleHQgKmxjLCB1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNy YywKKyAgICBjb25zdCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgcHRyZGlmZl90IHNyY19z dHJpZGUsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLAorICAgIGNvbnN0IGludCB3aWR0aCwg Y29uc3QgaW50IGhlaWdodCwgY29uc3QgaW50IF92Yl9wb3MsIEFMRlBhcmFtcyAqYWxmKQorewor ICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgICA9IGxjLT5mYzsKKyAgICBpbnQgdmJfcG9z ICAgICAgICAgICAgICAgICAgPSBfdmJfcG9zIC0geTA7CisgICAgaW50MTZfdCAqY29lZmYgICAg ICAgICAgICAgICA9IChpbnQxNl90KilsYy0+dG1wOworICAgIGludDE2X3QgKmNsaXAgICAgICAg ICAgICAgICA9IChpbnQxNl90ICopbGMtPnRtcDE7CisKKyAgICBhdl9hc3NlcnQwKEFMRl9NQVhf RklMVEVSX1NJWkUgPD0gc2l6ZW9mKGxjLT50bXApKTsKKyAgICBhdl9hc3NlcnQwKEFMRl9NQVhf RklMVEVSX1NJWkUgKiBzaXplb2YoaW50MTZfdCkgPD0gc2l6ZW9mKGxjLT50bXAxKSk7CisKKyAg ICBhbGZfZ2V0X2NvZWZmX2FuZF9jbGlwKGxjLCBjb2VmZiwgY2xpcCwgc3JjLCBzcmNfc3RyaWRl LCB3aWR0aCwgaGVpZ2h0LCB2Yl9wb3MsIGFsZik7CisgICAgZmMtPnZ2Y2RzcC5hbGYuZmlsdGVy W0xVTUFdKGRzdCwgZHN0X3N0cmlkZSwgc3JjLCBzcmNfc3RyaWRlLCB3aWR0aCwgaGVpZ2h0LCBj b2VmZiwgY2xpcCwgdmJfcG9zKTsKK30KKworc3RhdGljIGludCBhbGZfY2xpcF9mcm9tX2lkeChj b25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBpbnQgaWR4KQoreworICAgIGNvbnN0IFZW Q1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IGludCBvZmZzZXRbXSA9IHswLCAz LCA1LCA3fTsKKworICAgIHJldHVybiAxIDw8IChzcHMtPmJpdF9kZXB0aCAtIG9mZnNldFtpZHhd KTsKK30KKworc3RhdGljIHZvaWQgYWxmX2ZpbHRlcl9jaHJvbWEoVlZDTG9jYWxDb250ZXh0ICps YywgdWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgY29uc3QgcHRyZGlmZl90 IGRzdF9zdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlLCBjb25zdCBpbnQgY19pZHgs CisgICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQgdmJfcG9z LCBBTEZQYXJhbXMgKmFsZikKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjICAgICAgICAgICAg ID0gbGMtPmZjOworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhlYWRlciAqcnNoICAgPSBsYy0+c2Mt PnNoLnI7CisgICAgY29uc3QgVlZDQUxGICphcHMgICAgICAgICAgICAgICA9IGZjLT5wcy5hbGZf bGlzdFtyc2gtPnNoX2FsZl9hcHNfaWRfY2hyb21hXTsKKyAgICBjb25zdCBpbnQgaWR4ICAgICAg ICAgICAgICAgICAgID0gYWxmLT5hbGZfY3RiX2ZpbHRlcl9hbHRfaWR4W2NfaWR4IC0gMV07Cisg ICAgY29uc3QgaW50MTZfdCAqY29lZmYgICAgICAgICAgICA9IGFwcy0+Y2hyb21hX2NvZWZmW2lk eF07CisgICAgaW50MTZfdCBjbGlwW0FMRl9OVU1fQ09FRkZfQ0hST01BXTsKKworICAgIGZvciAo aW50IGkgPSAwOyBpIDwgQUxGX05VTV9DT0VGRl9DSFJPTUE7IGkrKykKKyAgICAgICAgY2xpcFtp XSA9IGFsZl9jbGlwX2Zyb21faWR4KGZjLCBhcHMtPmNocm9tYV9jbGlwX2lkeFtpZHhdW2ldKTsK KworICAgIGZjLT52dmNkc3AuYWxmLmZpbHRlcltDSFJPTUFdKGRzdCwgZHN0X3N0cmlkZSwgc3Jj LCBzcmNfc3RyaWRlLCB3aWR0aCwgaGVpZ2h0LCBjb2VmZiwgY2xpcCwgdmJfcG9zKTsKK30KKwor c3RhdGljIHZvaWQgYWxmX2ZpbHRlcl9jYyhWVkNMb2NhbENvbnRleHQgKmxjLCB1aW50OF90ICpk c3QsIGNvbnN0IHVpbnQ4X3QgKmx1bWEsCisgICAgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUs IGNvbnN0IHB0cmRpZmZfdCBsdW1hX3N0cmlkZSwgY29uc3QgaW50IGNfaWR4LAorICAgIGNvbnN0 IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgaW50IGhzLCBjb25zdCBpbnQgdnMs IGNvbnN0IGludCB2Yl9wb3MsIEFMRlBhcmFtcyAqYWxmKQoreworICAgIFZWQ0ZyYW1lQ29udGV4 dCAqZmMgICAgICAgICAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVy ICpyc2ggICA9IGxjLT5zYy0+c2gucjsKKyAgICBjb25zdCBpbnQgaWR4ICAgICAgICAgICAgICAg ICAgID0gY19pZHggLSAxOworICAgIGNvbnN0IGludCBjY19hcHNfaWQgICAgICAgICAgICAgPSBj X2lkeCA9PSBDQiA/IHJzaC0+c2hfYWxmX2NjX2NiX2Fwc19pZCA6IHJzaC0+c2hfYWxmX2NjX2Ny X2Fwc19pZDsKKyAgICBjb25zdCBWVkNBTEYgKmFwcyAgICAgICAgICAgICAgID0gZmMtPnBzLmFs Zl9saXN0W2NjX2Fwc19pZF07CisKKyAgICBpZiAoYXBzKSB7CisgICAgICAgIGNvbnN0IGludDE2 X3QgKmNvZWZmID0gYXBzLT5jY19jb2VmZltpZHhdW2FsZi0+Y3RiX2NjX2lkY1tpZHhdIC0gMV07 CisKKyAgICAgICAgZmMtPnZ2Y2RzcC5hbGYuZmlsdGVyX2NjKGRzdCwgZHN0X3N0cmlkZSwgbHVt YSwgbHVtYV9zdHJpZGUsIHdpZHRoLCBoZWlnaHQsIGhzLCB2cywgY29lZmYsIHZiX3Bvcyk7Cisg ICAgfQorfQorCit2b2lkIGZmX3Z2Y19hbGZfY29weV9jdHVfdG9faHYoVlZDTG9jYWxDb250ZXh0 KiBsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTApCit7CisgICAgVlZDRnJhbWVDb250ZXh0 ICpmYyAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgaW50IHhfY3RiICAgICAgICAgPSB4MCA+PiBm Yy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IHlfY3RiICAgICAgICAg PSB5MCA+PiBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IGN0Yl9z aXplX3kgICAgPSBmYy0+cHMuc3BzLT5jdGJfc2l6ZV95OworICAgIGNvbnN0IGludCBwcyAgICAg ICAgICAgID0gZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQ7CisgICAgY29uc3QgaW50IGNfZW5kICAg ICAgICAgPSBmYy0+cHMuc3BzLT5yLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPyBWVkNfTUFYX1NB TVBMRV9BUlJBWVMgOiAxOworCisgICAgZm9yIChpbnQgY19pZHggPSAwOyBjX2lkeCA8IGNfZW5k OyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0IGludCBocyAgICAgICAgPSBmYy0+cHMuc3BzLT5o c2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBpbnQgdnMgICAgICAgID0gZmMtPnBzLnNwcy0+ dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IHggICAgICAgICA9IHgwID4+IGhzOwor ICAgICAgICBjb25zdCBpbnQgeSAgICAgICAgID0geTAgPj4gdnM7CisgICAgICAgIGNvbnN0IGlu dCB3aWR0aCAgICAgPSBGRk1JTihmYy0+cHMuc3BzLT53aWR0aCAtIHgwLCBjdGJfc2l6ZV95KSA+ PiBoczsKKyAgICAgICAgY29uc3QgaW50IGhlaWdodCAgICA9IEZGTUlOKGZjLT5wcy5zcHMtPmhl aWdodCAtIHkwLCBjdGJfc2l6ZV95KSA+PiB2czsKKworICAgICAgICBjb25zdCBpbnQgc3JjX3N0 cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdOworICAgICAgICB1aW50OF90KiBzcmMg PSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4XVt5ICogc3JjX3N0cmlkZSArICh4IDw8IHBzKV07CisK KyAgICAgICAgYWxmX2NvcHlfY3RiX3RvX2h2KGZjLCBzcmMsIHNyY19zdHJpZGUsIHgsIHksIHdp ZHRoLCBoZWlnaHQsIHhfY3RiLCB5X2N0YiwgY19pZHgpOworICAgIH0KK30KKwordm9pZCBmZl92 dmNfYWxmX2ZpbHRlcihWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgeDAsIGNvbnN0IGlu dCB5MCkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjICAgICA9IGxjLT5mYzsKKyAgICBjb25z dCBWVkNQUFMgKnBwcyAgICAgICA9IGZjLT5wcy5wcHM7CisgICAgY29uc3QgaW50IHhfY3RiICAg ICAgICAgPSB4MCA+PiBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50 IHlfY3RiICAgICAgICAgPSB5MCA+PiBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAg Y29uc3QgaW50IGN0Yl9zaXplX3kgICAgPSBmYy0+cHMuc3BzLT5jdGJfc2l6ZV95OworICAgIGNv bnN0IGludCBwcyAgICAgICAgICAgID0gZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQ7CisgICAgY29u c3QgaW50IHBhZGRlZF9zdHJpZGUgPSBFREdFX0VNVV9CVUZGRVJfU1RSSURFIDw8IHBzOworICAg IGNvbnN0IGludCBwYWRkZWRfb2Zmc2V0ID0gcGFkZGVkX3N0cmlkZSAqIEFMRl9QQURESU5HX1NJ WkUgKyAoQUxGX1BBRERJTkdfU0laRSA8PCBwcyk7CisgICAgY29uc3QgaW50IGNfZW5kICAgICAg ICAgPSBmYy0+cHMuc3BzLT5yLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPyBWVkNfTUFYX1NBTVBM RV9BUlJBWVMgOiAxOworICAgIEFMRlBhcmFtcyAqYWxmICAgICAgICAgID0gJkNUQihmYy0+dGFi LmFsZiwgeF9jdGIsIHlfY3RiKTsKKyAgICBpbnQgZWRnZXNbTUFYX0VER0VTXSAgICA9IHsgeF9j dGIgPT0gMCwgeV9jdGIgPT0gMCwgeF9jdGIgPT0gcHBzLT5jdGJfd2lkdGggLSAxLCB5X2N0YiA9 PSBwcHMtPmN0Yl9oZWlnaHQgLSAxIH07CisKKyAgICBpZiAoIXBwcy0+ci0+cHBzX2xvb3BfZmls dGVyX2Fjcm9zc190aWxlc19lbmFibGVkX2ZsYWcpIHsKKyAgICAgICAgZWRnZXNbTEVGVF0gPSBl ZGdlc1tMRUZUXSB8fCAobGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9USUxFKTsK KyAgICAgICAgZWRnZXNbVE9QXSAgPSBlZGdlc1tUT1BdIHx8IChsYy0+Ym91bmRhcnlfZmxhZ3Mg JiBCT1VOREFSWV9VUFBFUl9USUxFKTsKKyAgICAgICAgZWRnZXNbUklHSFRdID0gZWRnZXNbUklH SFRdIHx8IHBwcy0+Y3RiX3RvX2NvbF9iZFt4X2N0Yl0gIT0gcHBzLT5jdGJfdG9fY29sX2JkW3hf Y3RiICsgMV07CisgICAgICAgIGVkZ2VzW0JPVFRPTV0gPSBlZGdlc1tCT1RUT01dIHx8IHBwcy0+ Y3RiX3RvX3Jvd19iZFt5X2N0Yl0gIT0gcHBzLT5jdGJfdG9fcm93X2JkW3lfY3RiICsgMV07Cisg ICAgfQorCisgICAgaWYgKCFwcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2Vu YWJsZWRfZmxhZykgeworICAgICAgICBlZGdlc1tMRUZUXSA9IGVkZ2VzW0xFRlRdIHx8IChsYy0+ Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZUX1NMSUNFKTsKKyAgICAgICAgZWRnZXNbVE9Q XSA9IGVkZ2VzW1RPUF0gfHwgKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX1VQUEVSX1NM SUNFKTsKKyAgICAgICAgZWRnZXNbUklHSFRdID0gZWRnZXNbUklHSFRdIHx8IENUQihmYy0+dGFi LnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3Ri ICsgMSwgeV9jdGIpOworICAgICAgICBlZGdlc1tCT1RUT01dID0gZWRnZXNbQk9UVE9NXSB8fCBD VEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xpY2Vf aWR4LCB4X2N0YiwgeV9jdGIgKyAxKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBjX2lkeCA9IDA7 IGNfaWR4IDwgY19lbmQ7IGNfaWR4KyspIHsKKyAgICAgICAgY29uc3QgaW50IGhzID0gZmMtPnBz LnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IHZzID0gZmMtPnBzLnNwcy0+ dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IGN0Yl9zaXplX2ggPSBjdGJfc2l6ZV95 ID4+IGhzOworICAgICAgICBjb25zdCBpbnQgY3RiX3NpemVfdiA9IGN0Yl9zaXplX3kgPj4gdnM7 CisgICAgICAgIGNvbnN0IGludCB4ID0geDAgPj4gaHM7CisgICAgICAgIGNvbnN0IGludCB5ID0g eTAgPj4gdnM7CisgICAgICAgIGNvbnN0IGludCBwaWNfd2lkdGggPSBmYy0+cHMuc3BzLT53aWR0 aCA+PiBoczsKKyAgICAgICAgY29uc3QgaW50IHBpY19oZWlnaHQgPSBmYy0+cHMuc3BzLT5oZWln aHQgPj4gdnM7CisgICAgICAgIGNvbnN0IGludCB3aWR0aCAgPSBGRk1JTihwaWNfd2lkdGggIC0g eCwgY3RiX3NpemVfaCk7CisgICAgICAgIGNvbnN0IGludCBoZWlnaHQgPSBGRk1JTihwaWNfaGVp Z2h0IC0geSwgY3RiX3NpemVfdik7CisgICAgICAgIGNvbnN0IGludCBzcmNfc3RyaWRlID0gZmMt PmZyYW1lLT5saW5lc2l6ZVtjX2lkeF07CisgICAgICAgIHVpbnQ4X3QgKnNyYyA9ICZmYy0+ZnJh bWUtPmRhdGFbY19pZHhdW3kgKiBzcmNfc3RyaWRlICsgKHggPDwgcHMpXTsKKyAgICAgICAgdWlu dDhfdCAqcGFkZGVkOworCisgICAgICAgIGlmIChhbGYtPmN0Yl9mbGFnW2NfaWR4XSB8fCAoIWNf aWR4ICYmIChhbGYtPmN0Yl9jY19pZGNbMF0gfHwgYWxmLT5jdGJfY2NfaWRjWzFdKSkpIHsKKyAg ICAgICAgICAgIHBhZGRlZCA9IChjX2lkeCA/IGxjLT5hbGZfYnVmZmVyX2Nocm9tYSA6IGxjLT5h bGZfYnVmZmVyX2x1bWEpICsgcGFkZGVkX29mZnNldDsKKyAgICAgICAgICAgIGFsZl9wcmVwYXJl X2J1ZmZlcihmYywgcGFkZGVkLCBzcmMsIHgsIHksIHhfY3RiLCB5X2N0Yiwgd2lkdGgsIGhlaWdo dCwKKyAgICAgICAgICAgICAgICBwYWRkZWRfc3RyaWRlLCBzcmNfc3RyaWRlLCBjX2lkeCwgZWRn ZXMpOworICAgICAgICB9CisgICAgICAgIGlmIChhbGYtPmN0Yl9mbGFnW2NfaWR4XSkgeworICAg ICAgICAgICAgaWYgKCFjX2lkeCkgIHsKKyAgICAgICAgICAgICAgICBhbGZfZmlsdGVyX2x1bWEo bGMsIHNyYywgcGFkZGVkLCBzcmNfc3RyaWRlLCBwYWRkZWRfc3RyaWRlLCB4LCB5LAorICAgICAg ICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCB5ICsgY3RiX3NpemVfdiAtIEFMRl9WQl9QT1Nf QUJPVkVfTFVNQSwgYWxmKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg YWxmX2ZpbHRlcl9jaHJvbWEobGMsIHNyYywgcGFkZGVkLCBzcmNfc3RyaWRlLCBwYWRkZWRfc3Ry aWRlLCBjX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgY3RiX3NpemVf diAtIEFMRl9WQl9QT1NfQUJPVkVfQ0hST01BLCBhbGYpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIGlmIChjX2lkeCAmJiBhbGYtPmN0Yl9jY19pZGNbY19pZHggLSAxXSkgewor ICAgICAgICAgICAgcGFkZGVkID0gbGMtPmFsZl9idWZmZXJfbHVtYSArIHBhZGRlZF9vZmZzZXQ7 CisgICAgICAgICAgICBhbGZfZmlsdGVyX2NjKGxjLCBzcmMsIHBhZGRlZCwgc3JjX3N0cmlkZSwg cGFkZGVkX3N0cmlkZSwgY19pZHgsCisgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgaHMs IHZzLCAoY3RiX3NpemVfdiA8PCB2cykgLSBBTEZfVkJfUE9TX0FCT1ZFX0xVTUEsIGFsZik7Cisg ICAgICAgIH0KKworICAgICAgICBhbGYtPmFwcGxpZWRbY19pZHhdID0gMTsKKyAgICB9Cit9CisK Kwordm9pZCBmZl92dmNfbG1jc19maWx0ZXIoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29u c3QgaW50IHgsIGNvbnN0IGludCB5KQoreworICAgIGNvbnN0IFNsaWNlQ29udGV4dCAqc2MgPSBs Yy0+c2M7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25z dCBpbnQgY3RiX3NpemUgID0gZmMtPnBzLnNwcy0+Y3RiX3NpemVfeTsKKyAgICBjb25zdCBpbnQg d2lkdGggICAgID0gRkZNSU4oZmMtPnBzLnBwcy0+d2lkdGggIC0geCwgY3RiX3NpemUpOworICAg IGNvbnN0IGludCBoZWlnaHQgICAgPSBGRk1JTihmYy0+cHMucHBzLT5oZWlnaHQgLSB5LCBjdGJf c2l6ZSk7CisgICAgdWludDhfdCAqZGF0YSAgICAgICA9IGZjLT5mcmFtZS0+ZGF0YVtMVU1BXSAr IHkgKiBmYy0+ZnJhbWUtPmxpbmVzaXplW0xVTUFdICsgKHggPDwgZmMtPnBzLnNwcy0+cGl4ZWxf c2hpZnQpOworICAgIGlmIChzYy0+c2guci0+c2hfbG1jc191c2VkX2ZsYWcpCisgICAgICAgIGZj LT52dmNkc3AubG1jcy5maWx0ZXIoZGF0YSwgZmMtPmZyYW1lLT5saW5lc2l6ZVtMVU1BXSwgd2lk dGgsIGhlaWdodCwgZmMtPnBzLmxtY3MuaW52X2x1dCk7Cit9CmRpZmYgLS1naXQgYS9saWJhdmNv ZGVjL3Z2Yy92dmNfZmlsdGVyLmggYi9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMmFlNGMzM2UyZAotLS0gL2Rldi9udWxs CisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuaApAQCAtMCwwICsxLDcxIEBACisvKgor ICogVlZDIGZpbHRlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgTnVvIE1pCisgKgorICoK KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq IExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworI2lmbmRlZiBBVkNPREVDX1ZWQ19W VkNfRklMVEVSX0gKKyNkZWZpbmUgQVZDT0RFQ19WVkNfVlZDX0ZJTFRFUl9ICisKKyNpbmNsdWRl ICJ2dmNkZWMuaCIKKworLyoqCisgKiBsbWNzIGZpbHRlciBmb3IgdGhlIENUVQorICogQHBhcmFt IGxjIGxvY2FsIGNvbnRleHQgZm9yIENUVQorICogQHBhcmFtIHgwIHggcG9zaXRpb24gZm9yIHRo ZSBDVFUKKyAqIEBwYXJhbSB5MCB5IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKi8KK3ZvaWQgZmZf dnZjX2xtY3NfZmlsdGVyKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwg Y29uc3QgaW50IHkwKTsKKworLyoqCisgKiB2ZXJ0aWNhbCBkZWJsb2NrIGZpbHRlciBmb3IgdGhl IENUVQorICogQHBhcmFtIGxjIGxvY2FsIGNvbnRleHQgZm9yIENUVQorICogQHBhcmFtIHgwIHgg cG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSB5MCB5IHBvc2l0aW9uIGZvciB0aGUgQ1RV CisgKi8KK3ZvaWQgZmZfdnZjX2RlYmxvY2tfdmVydGljYWwoY29uc3QgVlZDTG9jYWxDb250ZXh0 ICpsYywgaW50IHgwLCBpbnQgeTApOworCisvKioKKyAqIGhvcml6b250YWwgZGVibG9jayBmaWx0 ZXIgZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSBsYyBsb2NhbCBjb250ZXh0IGZvciBDVFUKKyAqIEBw YXJhbSB4MCB4IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0geTAgeSBwb3NpdGlvbiBm b3IgdGhlIENUVQorICovCit2b2lkIGZmX3Z2Y19kZWJsb2NrX2hvcml6b250YWwoY29uc3QgVlZD TG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTApOworCisvKioKKyAqIHNhbyBmaWx0ZXIg Zm9yIHRoZSBDVFUKKyAqIEBwYXJhbSBsYyBsb2NhbCBjb250ZXh0IGZvciBDVFUKKyAqIEBwYXJh bSB4MCB4IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0geTAgeSBwb3NpdGlvbiBmb3Ig dGhlIENUVQorICovCit2b2lkIGZmX3Z2Y19zYW9fZmlsdGVyKFZWQ0xvY2FsQ29udGV4dCAqbGMs IGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwKTsKKwordm9pZCBmZl92dmNfc2FvX2NvcHlfY3Ri X3RvX2h2KFZWQ0xvY2FsQ29udGV4dCogbGMsIGludCByeCwgaW50IHJ5LCBpbnQgbGFzdF9yb3cp Owordm9pZCBmZl92dmNfYWxmX2NvcHlfY3R1X3RvX2h2KFZWQ0xvY2FsQ29udGV4dCogbGMsIGlu dCB4MCwgaW50IHkwKTsKKworLyoqCisgKiBhbGYgZmlsdGVyIGZvciB0aGUgQ1RVCisgKiBAcGFy YW0gbGMgbG9jYWwgY29udGV4dCBmb3IgQ1RVCisgKiBAcGFyYW0geDAgeCBwb3NpdGlvbiBmb3Ig dGhlIENUVQorICogQHBhcmFtIHkwIHkgcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqLwordm9pZCBm Zl92dmNfYWxmX2ZpbHRlcihWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgeDAsIGNvbnN0 IGludCB5MCk7CisKKyNlbmRpZiAvLyBBVkNPREVDX1ZWQ19WVkNfQ1RVX0gKZGlmZiAtLWdpdCBh L2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXJfdGVtcGxhdGUuYyBiL2xpYmF2Y29kZWMvdnZjL3Z2 Y19maWx0ZXJfdGVtcGxhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5hNGYxNzkyZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRl cl90ZW1wbGF0ZS5jCkBAIC0wLDAgKzEsMTEzNSBAQAorLyoKKyAqIFZWQyBmaWx0ZXJzIERTUAor ICoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBOdW8gTWkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFy dCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBG Rm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg RkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEw LTEzMDEgVVNBCisgKi8KKworc3RhdGljIHZvaWQgRlVOQyhsbWNzX2ZpbHRlcl9sdW1hKSh1aW50 OF90ICpfZHN0LCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBp bnQgaGVpZ2h0LCBjb25zdCB1aW50OF90ICpfbHV0KQoreworICAgIGNvbnN0IHBpeGVsICpsdXQg PSAoY29uc3QgcGl4ZWwgKilfbHV0OworICAgIHBpeGVsICpkc3QgPSAocGl4ZWwqKV9kc3Q7Cisg ICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkg PCBoZWlnaHQ7IHkrKykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp CisgICAgICAgICAgICBkc3RbeF0gPSBsdXRbZHN0W3hdXTsKKyAgICAgICAgZHN0ICs9IGRzdF9z dHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKHNhb19iYW5kX2ZpbHRlcikodWlu dDhfdCAqX2RzdCwgY29uc3QgdWludDhfdCAqX3NyYywgcHRyZGlmZl90IGRzdF9zdHJpZGUsIHB0 cmRpZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IGludDE2X3QgKnNhb19vZmZzZXRfdmFsLCBj b25zdCBpbnQgc2FvX2xlZnRfY2xhc3MsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdo dCkKK3sKKyAgICBwaXhlbCAqZHN0ICAgICAgID0gKHBpeGVsICopX2RzdDsKKyAgICBjb25zdCBw aXhlbCAqc3JjID0gKHBpeGVsICopX3NyYzsKKyAgICBpbnQgb2Zmc2V0X3RhYmxlWzMyXSA9IHsg MCB9OworICAgIGludCBrLCB5LCB4OworICAgIGludCBzaGlmdCAgPSBCSVRfREVQVEggLSA1Owor CisgICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworICAgIHNyY19zdHJpZGUgLz0gc2l6 ZW9mKHBpeGVsKTsKKworICAgIGZvciAoayA9IDA7IGsgPCA0OyBrKyspCisgICAgICAgIG9mZnNl dF90YWJsZVsoayArIHNhb19sZWZ0X2NsYXNzKSAmIDMxXSA9IHNhb19vZmZzZXRfdmFsW2sgKyAx XTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgZm9yICh4ID0g MDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICBkc3RbeF0gPSBhdl9jbGlwX3BpeGVsKHNy Y1t4XSArIG9mZnNldF90YWJsZVtzcmNbeF0gPj4gc2hpZnRdKTsKKyAgICAgICAgZHN0ICs9IGRz dF9zdHJpZGU7CisgICAgICAgIHNyYyArPSBzcmNfc3RyaWRlOworICAgIH0KK30KKworI2RlZmlu ZSBDTVAoYSwgYikgKCgoYSkgPiAoYikpIC0gKChhKSA8IChiKSkpCisKK3N0YXRpYyB2b2lkIEZV TkMoc2FvX2VkZ2VfZmlsdGVyKSh1aW50OF90ICpfZHN0LCBjb25zdCB1aW50OF90ICpfc3JjLCBw dHJkaWZmX3QgZHN0X3N0cmlkZSwKKyAgICBjb25zdCBpbnQxNl90ICpzYW9fb2Zmc2V0X3ZhbCwg Y29uc3QgaW50IGVvLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQpCit7CisgICAg c3RhdGljIGNvbnN0IHVpbnQ4X3QgZWRnZV9pZHhbXSA9IHsgMSwgMiwgMCwgMywgNCB9OworICAg IHN0YXRpYyBjb25zdCBpbnQ4X3QgcG9zWzRdWzJdWzJdID0geworICAgICAgICB7IHsgLTEsICAw IH0sIHsgIDEsIDAgfSB9LCAvLyBob3Jpem9udGFsCisgICAgICAgIHsgeyAgMCwgLTEgfSwgeyAg MCwgMSB9IH0sIC8vIHZlcnRpY2FsCisgICAgICAgIHsgeyAtMSwgLTEgfSwgeyAgMSwgMSB9IH0s IC8vIDQ1IGRlZ3JlZQorICAgICAgICB7IHsgIDEsIC0xIH0sIHsgLTEsIDEgfSB9LCAvLyAxMzUg ZGVncmVlCisgICAgfTsKKyAgICBwaXhlbCAqZHN0ICAgICAgICAgID0gKHBpeGVsICopX2RzdDsK KyAgICBjb25zdCBwaXhlbCAqc3JjICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBpbnQgYV9zdHJp ZGUsIGJfc3RyaWRlOworICAgIGludCB4LCB5OworICAgIHB0cmRpZmZfdCBzcmNfc3RyaWRlID0g KDIgKiBNQVhfUEJfU0laRSArIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpIC8gc2l6ZW9m KHBpeGVsKTsKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisKKyAgICBhX3N0cmlk ZSA9IHBvc1tlb11bMF1bMF0gKyBwb3NbZW9dWzBdWzFdICogc3JjX3N0cmlkZTsKKyAgICBiX3N0 cmlkZSA9IHBvc1tlb11bMV1bMF0gKyBwb3NbZW9dWzFdWzFdICogc3JjX3N0cmlkZTsKKyAgICBm b3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdp ZHRoOyB4KyspIHsKKyAgICAgICAgICAgIGludCBkaWZmMCA9IENNUChzcmNbeF0sIHNyY1t4ICsg YV9zdHJpZGVdKTsKKyAgICAgICAgICAgIGludCBkaWZmMSA9IENNUChzcmNbeF0sIHNyY1t4ICsg Yl9zdHJpZGVdKTsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFsICAgICAgICA9IGVkZ2VfaWR4 WzIgKyBkaWZmMCArIGRpZmYxXTsKKyAgICAgICAgICAgIGRzdFt4XSA9IGF2X2NsaXBfcGl4ZWwo c3JjW3hdICsgc2FvX29mZnNldF92YWxbb2Zmc2V0X3ZhbF0pOworICAgICAgICB9CisgICAgICAg IHNyYyArPSBzcmNfc3RyaWRlOworICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkIEZVTkMoc2FvX2VkZ2VfcmVzdG9yZV8wKSh1aW50OF90ICpfZHN0LCBj b25zdCB1aW50OF90ICpfc3JjLAorICAgIHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBwdHJkaWZmX3Qg c3JjX3N0cmlkZSwgY29uc3QgU0FPUGFyYW1zICpzYW8sCisgICAgY29uc3QgaW50ICpib3JkZXJz LCBjb25zdCBpbnQgX3dpZHRoLCBjb25zdCBpbnQgX2hlaWdodCwgY29uc3QgaW50IGNfaWR4LAor ICAgIGNvbnN0IHVpbnQ4X3QgKnZlcnRfZWRnZSwgY29uc3QgdWludDhfdCAqaG9yaXpfZWRnZSwg Y29uc3QgdWludDhfdCAqZGlhZ19lZGdlKQoreworICAgIGludCB4LCB5OworICAgIHBpeGVsICpk c3QgICAgICAgICAgICAgICAgICAgICAgPSAocGl4ZWwgKilfZHN0OworICAgIGNvbnN0IHBpeGVs ICpzcmMgICAgICAgICAgICAgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGNvbnN0IGludDE2X3Qg KnNhb19vZmZzZXRfdmFsICAgPSBzYW8tPm9mZnNldF92YWxbY19pZHhdOworICAgIGNvbnN0IGlu dCBzYW9fZW9fY2xhc3MgICAgICAgICAgPSBzYW8tPmVvX2NsYXNzW2NfaWR4XTsKKyAgICBpbnQg aW5pdF94ID0gMCwgd2lkdGggPSBfd2lkdGgsIGhlaWdodCA9IF9oZWlnaHQ7CisKKyAgICBkc3Rf c3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisgICAgc3JjX3N0cmlkZSAvPSBzaXplb2YocGl4ZWwp OworCisgICAgaWYgKHNhb19lb19jbGFzcyAhPSBTQU9fRU9fVkVSVCkgeworICAgICAgICBpZiAo Ym9yZGVyc1swXSkgeworICAgICAgICAgICAgaW50IG9mZnNldF92YWwgPSBzYW9fb2Zmc2V0X3Zh bFswXTsKKyAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAg ICAgICAgICAgIGRzdFt5ICogZHN0X3N0cmlkZV0gPSBhdl9jbGlwX3BpeGVsKHNyY1t5ICogc3Jj X3N0cmlkZV0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluaXRf eCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJvcmRlcnNbMl0pIHsKKyAgICAgICAgICAg IGludCBvZmZzZXRfdmFsID0gc2FvX29mZnNldF92YWxbMF07CisgICAgICAgICAgICBpbnQgb2Zm c2V0ICAgICA9IHdpZHRoIC0gMTsKKyAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBoZWlnaHQ7 IHgrKykgeworICAgICAgICAgICAgICAgIGRzdFt4ICogZHN0X3N0cmlkZSArIG9mZnNldF0gPSBh dl9jbGlwX3BpeGVsKHNyY1t4ICogc3JjX3N0cmlkZSArIG9mZnNldF0gKyBvZmZzZXRfdmFsKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdpZHRoLS07CisgICAgICAgIH0KKyAgICB9Cisg ICAgaWYgKHNhb19lb19jbGFzcyAhPSBTQU9fRU9fSE9SSVopIHsKKyAgICAgICAgaWYgKGJvcmRl cnNbMV0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFsID0gc2FvX29mZnNldF92YWxbMF07 CisgICAgICAgICAgICBmb3IgKHggPSBpbml0X3g7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAg ICAgICAgIGRzdFt4XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3hdICsgb2Zmc2V0X3ZhbCk7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKGJvcmRlcnNbM10pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRf dmFsICAgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAgICAgIHB0cmRpZmZfdCB5X2RzdF9z dHJpZGUgPSBkc3Rfc3RyaWRlICogKGhlaWdodCAtIDEpOworICAgICAgICAgICAgcHRyZGlmZl90 IHlfc3JjX3N0cmlkZSA9IHNyY19zdHJpZGUgKiAoaGVpZ2h0IC0gMSk7CisgICAgICAgICAgICBm b3IgKHggPSBpbml0X3g7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgIGRzdFt4ICsg eV9kc3Rfc3RyaWRlXSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3ggKyB5X3NyY19zdHJpZGVdICsgb2Zm c2V0X3ZhbCk7CisgICAgICAgICAgICBoZWlnaHQtLTsKKyAgICAgICAgfQorICAgIH0KK30KKwor c3RhdGljIHZvaWQgRlVOQyhzYW9fZWRnZV9yZXN0b3JlXzEpKHVpbnQ4X3QgKl9kc3QsIGNvbnN0 IHVpbnQ4X3QgKl9zcmMsCisgICAgcHRyZGlmZl90IGRzdF9zdHJpZGUsIHB0cmRpZmZfdCBzcmNf c3RyaWRlLCBjb25zdCBTQU9QYXJhbXMgKnNhbywKKyAgICBjb25zdCBpbnQgKmJvcmRlcnMsIGNv bnN0IGludCBfd2lkdGgsIGNvbnN0IGludCBfaGVpZ2h0LCBjb25zdCBpbnQgY19pZHgsCisgICAg Y29uc3QgdWludDhfdCAqdmVydF9lZGdlLCBjb25zdCB1aW50OF90ICpob3Jpel9lZGdlLCBjb25z dCB1aW50OF90ICpkaWFnX2VkZ2UpCit7CisgICAgaW50IHgsIHk7CisgICAgcGl4ZWwgKmRzdCAg ICAgICAgICAgICAgICAgICAgICA9IChwaXhlbCAqKV9kc3Q7CisgICAgY29uc3QgcGl4ZWwgKnNy YyAgICAgICAgICAgICAgICA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgaW50MTZfdCAqc2Fv X29mZnNldF92YWwgICA9IHNhby0+b2Zmc2V0X3ZhbFtjX2lkeF07CisgICAgY29uc3QgaW50IHNh b19lb19jbGFzcyAgICAgICAgICA9IHNhby0+ZW9fY2xhc3NbY19pZHhdOworICAgIGludCBpbml0 X3ggPSAwLCBpbml0X3kgPSAwLCB3aWR0aCA9IF93aWR0aCwgaGVpZ2h0ID0gX2hlaWdodDsKKwor ICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKyAgICBzcmNfc3RyaWRlIC89IHNpemVv ZihwaXhlbCk7CisKKyAgICBpZiAoc2FvX2VvX2NsYXNzICE9IFNBT19FT19WRVJUKSB7CisgICAg ICAgIGlmIChib3JkZXJzWzBdKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19v ZmZzZXRfdmFsWzBdOworICAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7 CisgICAgICAgICAgICAgICAgZHN0W3kgKiBkc3Rfc3RyaWRlXSA9IGF2X2NsaXBfcGl4ZWwoc3Jj W3kgKiBzcmNfc3RyaWRlXSArIG9mZnNldF92YWwpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaW5pdF94ID0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYm9yZGVyc1syXSkgeworICAg ICAgICAgICAgaW50IG9mZnNldF92YWwgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAgICAg IGludCBvZmZzZXQgICAgID0gd2lkdGggLSAxOworICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8 IGhlaWdodDsgeCsrKSB7CisgICAgICAgICAgICAgICAgZHN0W3ggKiBkc3Rfc3RyaWRlICsgb2Zm c2V0XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3ggKiBzcmNfc3RyaWRlICsgb2Zmc2V0XSArIG9mZnNl dF92YWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2lkdGgtLTsKKyAgICAgICAgfQor ICAgIH0KKyAgICBpZiAoc2FvX2VvX2NsYXNzICE9IFNBT19FT19IT1JJWikgeworICAgICAgICBp ZiAoYm9yZGVyc1sxXSkgeworICAgICAgICAgICAgaW50IG9mZnNldF92YWwgPSBzYW9fb2Zmc2V0 X3ZhbFswXTsKKyAgICAgICAgICAgIGZvciAoeCA9IGluaXRfeDsgeCA8IHdpZHRoOyB4KyspCisg ICAgICAgICAgICAgICAgZHN0W3hdID0gYXZfY2xpcF9waXhlbChzcmNbeF0gKyBvZmZzZXRfdmFs KTsKKyAgICAgICAgICAgIGluaXRfeSA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJvcmRl cnNbM10pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFsICAgPSBzYW9fb2Zmc2V0X3ZhbFsw XTsKKyAgICAgICAgICAgIHB0cmRpZmZfdCB5X2RzdF9zdHJpZGUgPSBkc3Rfc3RyaWRlICogKGhl aWdodCAtIDEpOworICAgICAgICAgICAgcHRyZGlmZl90IHlfc3JjX3N0cmlkZSA9IHNyY19zdHJp ZGUgKiAoaGVpZ2h0IC0gMSk7CisgICAgICAgICAgICBmb3IgKHggPSBpbml0X3g7IHggPCB3aWR0 aDsgeCsrKQorICAgICAgICAgICAgICAgIGRzdFt4ICsgeV9kc3Rfc3RyaWRlXSA9IGF2X2NsaXBf cGl4ZWwoc3JjW3ggKyB5X3NyY19zdHJpZGVdICsgb2Zmc2V0X3ZhbCk7CisgICAgICAgICAgICBo ZWlnaHQtLTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgaW50IHNhdmVfdXBw ZXJfbGVmdCAgPSAhZGlhZ19lZGdlWzBdICYmIHNhb19lb19jbGFzcyA9PSBTQU9fRU9fMTM1RCAm JiAhYm9yZGVyc1swXSAmJiAhYm9yZGVyc1sxXTsKKyAgICAgICAgaW50IHNhdmVfdXBwZXJfcmln aHQgPSAhZGlhZ19lZGdlWzFdICYmIHNhb19lb19jbGFzcyA9PSBTQU9fRU9fNDVEICAmJiAhYm9y ZGVyc1sxXSAmJiAhYm9yZGVyc1syXTsKKyAgICAgICAgaW50IHNhdmVfbG93ZXJfcmlnaHQgPSAh ZGlhZ19lZGdlWzJdICYmIHNhb19lb19jbGFzcyA9PSBTQU9fRU9fMTM1RCAmJiAhYm9yZGVyc1sy XSAmJiAhYm9yZGVyc1szXTsKKyAgICAgICAgaW50IHNhdmVfbG93ZXJfbGVmdCAgPSAhZGlhZ19l ZGdlWzNdICYmIHNhb19lb19jbGFzcyA9PSBTQU9fRU9fNDVEICAmJiAhYm9yZGVyc1swXSAmJiAh Ym9yZGVyc1szXTsKKworICAgICAgICAvLyBSZXN0b3JlIHBpeGVscyB0aGF0IGNhbid0IGJlIG1v ZGlmaWVkCisgICAgICAgIGlmICh2ZXJ0X2VkZ2VbMF0gJiYgc2FvX2VvX2NsYXNzICE9IFNBT19F T19WRVJUKSB7CisgICAgICAgICAgICBmb3IgKHkgPSBpbml0X3kgKyBzYXZlX3VwcGVyX2xlZnQ7 IHkgPCBoZWlnaHQgLSBzYXZlX2xvd2VyX2xlZnQ7IHkrKykKKyAgICAgICAgICAgICAgICBkc3Rb eSAqIGRzdF9zdHJpZGVdID0gc3JjW3kgKiBzcmNfc3RyaWRlXTsKKyAgICAgICAgfQorICAgICAg ICBpZiAodmVydF9lZGdlWzFdICYmIHNhb19lb19jbGFzcyAhPSBTQU9fRU9fVkVSVCkgeworICAg ICAgICAgICAgZm9yICh5ID0gaW5pdF95ICsgc2F2ZV91cHBlcl9yaWdodDsgeSA8IGhlaWdodCAt IHNhdmVfbG93ZXJfcmlnaHQ7IHkrKykKKyAgICAgICAgICAgICAgICBkc3RbeSAqIGRzdF9zdHJp ZGUgKyB3aWR0aCAtIDFdID0gc3JjW3kgKiBzcmNfc3RyaWRlICsgd2lkdGggLSAxXTsKKyAgICAg ICAgfQorCisgICAgICAgIGlmIChob3Jpel9lZGdlWzBdICYmIHNhb19lb19jbGFzcyAhPSBTQU9f RU9fSE9SSVopIHsKKyAgICAgICAgICAgIGZvciAoeCA9IGluaXRfeCArIHNhdmVfdXBwZXJfbGVm dDsgeCA8IHdpZHRoIC0gc2F2ZV91cHBlcl9yaWdodDsgeCsrKQorICAgICAgICAgICAgICAgIGRz dFt4XSA9IHNyY1t4XTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaG9yaXpfZWRnZVsxXSAmJiBz YW9fZW9fY2xhc3MgIT0gU0FPX0VPX0hPUklaKSB7CisgICAgICAgICAgICBmb3IgKHggPSBpbml0 X3ggKyBzYXZlX2xvd2VyX2xlZnQ7IHggPCB3aWR0aCAtIHNhdmVfbG93ZXJfcmlnaHQ7IHgrKykK KyAgICAgICAgICAgICAgICBkc3RbKGhlaWdodCAtIDEpICogZHN0X3N0cmlkZSArIHhdID0gc3Jj WyhoZWlnaHQgLSAxKSAqIHNyY19zdHJpZGUgKyB4XTsKKyAgICAgICAgfQorICAgICAgICBpZiAo ZGlhZ19lZGdlWzBdICYmIHNhb19lb19jbGFzcyA9PSBTQU9fRU9fMTM1RCkKKyAgICAgICAgICAg IGRzdFswXSA9IHNyY1swXTsKKyAgICAgICAgaWYgKGRpYWdfZWRnZVsxXSAmJiBzYW9fZW9fY2xh c3MgPT0gU0FPX0VPXzQ1RCkKKyAgICAgICAgICAgIGRzdFt3aWR0aCAtIDFdID0gc3JjW3dpZHRo IC0gMV07CisgICAgICAgIGlmIChkaWFnX2VkZ2VbMl0gJiYgc2FvX2VvX2NsYXNzID09IFNBT19F T18xMzVEKQorICAgICAgICAgICAgZHN0W2RzdF9zdHJpZGUgKiAoaGVpZ2h0IC0gMSkgKyB3aWR0 aCAtIDFdID0gc3JjW3NyY19zdHJpZGUgKiAoaGVpZ2h0IC0gMSkgKyB3aWR0aCAtIDFdOworICAg ICAgICBpZiAoZGlhZ19lZGdlWzNdICYmIHNhb19lb19jbGFzcyA9PSBTQU9fRU9fNDVEKQorICAg ICAgICAgICAgZHN0W2RzdF9zdHJpZGUgKiAoaGVpZ2h0IC0gMSldID0gc3JjW3NyY19zdHJpZGUg KiAoaGVpZ2h0IC0gMSldOworCisgICAgfQorfQorCisjdW5kZWYgQ01QCisKK3N0YXRpYyBhdl9h bHdheXNfaW5saW5lIGludDE2X3QgRlVOQyhhbGZfY2xpcCkocGl4ZWwgY3VyciwgcGl4ZWwgdjAs IHBpeGVsIHYxLCBpbnQxNl90IGNsaXApCit7CisgICAgcmV0dXJuIGF2X2NsaXAodjAgLSBjdXJy LCAtY2xpcCwgY2xpcCkgKyBhdl9jbGlwKHYxIC0gY3VyciwgLWNsaXAsIGNsaXApOworfQorCitz dGF0aWMgdm9pZCBGVU5DKGFsZl9maWx0ZXJfbHVtYSkodWludDhfdCAqX2RzdCwgcHRyZGlmZl90 IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QgKl9zcmMsIHB0cmRpZmZfdCBzcmNfc3RyaWRlLAor ICAgIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgaW50MTZfdCAqZmls dGVyLCBjb25zdCBpbnQxNl90ICpjbGlwLCBjb25zdCBpbnQgdmJfcG9zKQoreworICAgIGNvbnN0 IHBpeGVsICpzcmMgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGNvbnN0IGludCBzaGlmdCAgICAg PSA3OworICAgIGNvbnN0IGludCBvZmZzZXQgICAgPSAxIDw8ICggc2hpZnQgLSAxICk7CisgICAg Y29uc3QgaW50IHZiX2Fib3ZlICA9IHZiX3BvcyAtIDQ7CisgICAgY29uc3QgaW50IHZiX2JlbG93 ICA9IHZiX3BvcyArIDM7CisKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisgICAg c3JjX3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo ZWlnaHQ7IHkgKz0gQUxGX0JMT0NLX1NJWkUpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg PCB3aWR0aDsgeCArPSBBTEZfQkxPQ0tfU0laRSkgeworICAgICAgICAgICAgY29uc3QgcGl4ZWwg KnMwID0gc3JjICsgeSAqIHNyY19zdHJpZGUgKyB4OworICAgICAgICAgICAgY29uc3QgcGl4ZWwg KnMxID0gczAgKyBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMyID0gczAg LSBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMzID0gczEgKyBzcmNfc3Ry aWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM0ID0gczIgLSBzcmNfc3RyaWRlOworICAg ICAgICAgICAgY29uc3QgcGl4ZWwgKnM1ID0gczMgKyBzcmNfc3RyaWRlOworICAgICAgICAgICAg Y29uc3QgcGl4ZWwgKnM2ID0gczQgLSBzcmNfc3RyaWRlOworCisgICAgICAgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IEFMRl9CTE9DS19TSVpFOyBpKyspIHsKKyAgICAgICAgICAgICAgICBwaXhl bCAqZHN0ID0gKHBpeGVsICopX2RzdCArICh5ICsgaSkgKiBkc3Rfc3RyaWRlICsgeDsKKworICAg ICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMCA9IHMwICsgaSAqIHNyY19zdHJpZGU7CisgICAg ICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAxID0gczEgKyBpICogc3JjX3N0cmlkZTsKKyAgICAg ICAgICAgICAgICBjb25zdCBwaXhlbCAqcDIgPSBzMiArIGkgKiBzcmNfc3RyaWRlOworICAgICAg ICAgICAgICAgIGNvbnN0IHBpeGVsICpwMyA9IHMzICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAg ICAgICAgICAgY29uc3QgcGl4ZWwgKnA0ID0gczQgKyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAg ICAgICAgICBjb25zdCBwaXhlbCAqcDUgPSBzNSArIGkgKiBzcmNfc3RyaWRlOworICAgICAgICAg ICAgICAgIGNvbnN0IHBpeGVsICpwNiA9IHM2ICsgaSAqIHNyY19zdHJpZGU7CisKKyAgICAgICAg ICAgICAgICBjb25zdCBpbnQgaXNfbmVhcl92Yl9hYm92ZSA9ICh5ICsgaSA8ICB2Yl9wb3MpICYm ICh5ICsgaSA+PSB2Yl9wb3MgLSAxKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgaXNfbmVh cl92Yl9iZWxvdyA9ICh5ICsgaSA+PSB2Yl9wb3MpICYmICh5ICsgaSA8PSB2Yl9wb3MpOworICAg ICAgICAgICAgICAgIGNvbnN0IGludCBpc19uZWFyX3ZiID0gaXNfbmVhcl92Yl9hYm92ZSB8fCBp c19uZWFyX3ZiX2JlbG93OworCisgICAgICAgICAgICAgICAgaWYgKCh5ICsgaSA8IHZiX3Bvcykg JiYgKCh5ICsgaSkgPj0gdmJfYWJvdmUpKSB7CisgICAgICAgICAgICAgICAgICAgIHAxID0gKHkg KyBpID09IHZiX3BvcyAtIDEpID8gcDAgOiBwMTsKKyAgICAgICAgICAgICAgICAgICAgcDMgPSAo eSArIGkgPj0gdmJfcG9zIC0gMikgPyBwMSA6IHAzOworICAgICAgICAgICAgICAgICAgICBwNSA9 ICh5ICsgaSA+PSB2Yl9wb3MgLSAzKSA/IHAzIDogcDU7CisKKyAgICAgICAgICAgICAgICAgICAg cDIgPSAoeSArIGkgPT0gdmJfcG9zIC0gMSkgPyBwMCA6IHAyOworICAgICAgICAgICAgICAgICAg ICBwNCA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAyKSA/IHAyIDogcDQ7CisgICAgICAgICAgICAgICAg ICAgIHA2ID0gKHkgKyBpID49IHZiX3BvcyAtIDMpID8gcDQgOiBwNjsKKyAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKCh5ICsgaSA+PSB2Yl9wb3MpICYmICgoeSArIGkpIDw9IHZiX2JlbG93KSkg eworICAgICAgICAgICAgICAgICAgICBwMiA9ICh5ICsgaSA9PSB2Yl9wb3MgICAgKSA/IHAwIDog cDI7CisgICAgICAgICAgICAgICAgICAgIHA0ID0gKHkgKyBpIDw9IHZiX3BvcyArIDEpID8gcDIg OiBwNDsKKyAgICAgICAgICAgICAgICAgICAgcDYgPSAoeSArIGkgPD0gdmJfcG9zICsgMikgPyBw NCA6IHA2OworCisgICAgICAgICAgICAgICAgICAgIHAxID0gKHkgKyBpID09IHZiX3BvcyAgICAp ID8gcDAgOiBwMTsKKyAgICAgICAgICAgICAgICAgICAgcDMgPSAoeSArIGkgPD0gdmJfcG9zICsg MSkgPyBwMSA6IHAzOworICAgICAgICAgICAgICAgICAgICBwNSA9ICh5ICsgaSA8PSB2Yl9wb3Mg KyAyKSA/IHAzIDogcDU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9y IChpbnQgaiA9IDA7IGogPCBBTEZfQkxPQ0tfU0laRTsgaisrKSB7CisgICAgICAgICAgICAgICAg ICAgIGludCBzdW0gPSAwOworICAgICAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCBjdXJyID0g KnAwOworCisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMF0gICogRlVOQyhhbGZf Y2xpcCkoY3VyciwgcDVbKzBdLCBwNlsrMF0sIGNsaXBbMF0pOworICAgICAgICAgICAgICAgICAg ICBzdW0gKz0gZmlsdGVyWzFdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAzWysxXSwgcDRbLTFd LCBjbGlwWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclsyXSAgKiBGVU5D KGFsZl9jbGlwKShjdXJyLCBwM1srMF0sIHA0WyswXSwgY2xpcFsyXSk7CisgICAgICAgICAgICAg ICAgICAgIHN1bSArPSBmaWx0ZXJbM10gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDNbLTFdLCBw NFsrMV0sIGNsaXBbM10pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzRdICAq IEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWysyXSwgcDJbLTJdLCBjbGlwWzRdKTsKKyAgICAgICAg ICAgICAgICAgICAgc3VtICs9IGZpbHRlcls1XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMVsr MV0sIHAyWy0xXSwgY2xpcFs1XSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJb Nl0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFbKzBdLCBwMlsrMF0sIGNsaXBbNl0pOworICAg ICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzddICAqIEZVTkMoYWxmX2NsaXApKGN1cnIs IHAxWy0xXSwgcDJbKzFdLCBjbGlwWzddKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZp bHRlcls4XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMVstMl0sIHAyWysyXSwgY2xpcFs4XSk7 CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbOV0gICogRlVOQyhhbGZfY2xpcCko Y3VyciwgcDBbKzNdLCBwMFstM10sIGNsaXBbOV0pOworICAgICAgICAgICAgICAgICAgICBzdW0g Kz0gZmlsdGVyWzEwXSAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAwWysyXSwgcDBbLTJdLCBjbGlw WzEwXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMTFdICogRlVOQyhhbGZf Y2xpcCkoY3VyciwgcDBbKzFdLCBwMFstMV0sIGNsaXBbMTFdKTsKKworICAgICAgICAgICAgICAg ICAgICBpZiAoIWlzX25lYXJfdmIpCisgICAgICAgICAgICAgICAgICAgICAgICBzdW0gPSAoc3Vt ICsgb2Zmc2V0KSA+PiBzaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICAgICAgICAgICAgc3VtID0gKHN1bSArICgxIDw8ICgoc2hpZnQgKyAzKSAtIDEpKSkgPj4g KHNoaWZ0ICsgMyk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBjdXJyOworICAgICAgICAg ICAgICAgICAgICBkc3Rbal0gPSBDTElQKHN1bSk7CisKKyAgICAgICAgICAgICAgICAgICAgcDAr KzsKKyAgICAgICAgICAgICAgICAgICAgcDErKzsKKyAgICAgICAgICAgICAgICAgICAgcDIrKzsK KyAgICAgICAgICAgICAgICAgICAgcDMrKzsKKyAgICAgICAgICAgICAgICAgICAgcDQrKzsKKyAg ICAgICAgICAgICAgICAgICAgcDUrKzsKKyAgICAgICAgICAgICAgICAgICAgcDYrKzsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaWx0ZXIgKz0gQUxGX05V TV9DT0VGRl9MVU1BOworICAgICAgICAgICAgY2xpcCArPSBBTEZfTlVNX0NPRUZGX0xVTUE7Cisg ICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoYWxmX2ZpbHRlcl9jaHJvbWEp KHVpbnQ4X3QqIF9kc3QsIHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCB1aW50OF90KiBfc3Jj LCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwKKyAgICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBo ZWlnaHQsIGNvbnN0IGludDE2X3QqIGZpbHRlciwgY29uc3QgaW50MTZfdCogY2xpcCwgY29uc3Qg aW50IHZiX3BvcykKK3sKKyAgICBjb25zdCBwaXhlbCAqc3JjID0gKHBpeGVsICopX3NyYzsKKyAg ICBjb25zdCBpbnQgc2hpZnQgID0gNzsKKyAgICBjb25zdCBpbnQgb2Zmc2V0ID0gMSA8PCAoIHNo aWZ0IC0gMSApOworICAgIGNvbnN0IGludCB2Yl9hYm92ZSAgPSB2Yl9wb3MgLSAyOworICAgIGNv bnN0IGludCB2Yl9iZWxvdyAgPSB2Yl9wb3MgKyAxOworCisgICAgZHN0X3N0cmlkZSAvPSBzaXpl b2YocGl4ZWwpOworICAgIHNyY19zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGZvciAo aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IEFMRl9CTE9DS19TSVpFKSB7CisgICAgICAgIGZv ciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gQUxGX0JMT0NLX1NJWkUpIHsKKyAgICAgICAg ICAgIGNvbnN0IHBpeGVsICpzMCA9IHNyYyArIHkgKiBzcmNfc3RyaWRlICsgeDsKKyAgICAgICAg ICAgIGNvbnN0IHBpeGVsICpzMSA9IHMwICsgc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0 IHBpeGVsICpzMiA9IHMwIC0gc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpz MyA9IHMxICsgc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzNCA9IHMyIC0g c3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzNSA9IHMzICsgc3JjX3N0cmlk ZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzNiA9IHM0IC0gc3JjX3N0cmlkZTsKKworICAg ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBTEZfQkxPQ0tfU0laRTsgaSsrKSB7CisgICAg ICAgICAgICAgICAgcGl4ZWwgKmRzdCA9IChwaXhlbCAqKV9kc3QgKyAoeSArIGkpICogZHN0X3N0 cmlkZSArIHg7CisKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDAgPSBzMCArIGkgKiBz cmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMSA9IHMxICsgaSAqIHNy Y19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAyID0gczIgKyBpICogc3Jj X3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDMgPSBzMyArIGkgKiBzcmNf c3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwNCA9IHM0ICsgaSAqIHNyY19z dHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnA1ID0gczUgKyBpICogc3JjX3N0 cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDYgPSBzNiArIGkgKiBzcmNfc3Ry aWRlOworCisgICAgICAgICAgICAgICAgY29uc3QgaW50IGlzX25lYXJfdmJfYWJvdmUgPSAoeSAr IGkgPCAgdmJfcG9zKSAmJiAoeSArIGkgPj0gdmJfcG9zIC0gMSk7CisgICAgICAgICAgICAgICAg Y29uc3QgaW50IGlzX25lYXJfdmJfYmVsb3cgPSAoeSArIGkgPj0gdmJfcG9zKSAmJiAoeSArIGkg PD0gdmJfcG9zKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgaXNfbmVhcl92YiA9IGlzX25l YXJfdmJfYWJvdmUgfHwgaXNfbmVhcl92Yl9iZWxvdzsKKworICAgICAgICAgICAgICAgIGlmICgo eSArIGkgPCB2Yl9wb3MpICYmICgoeSArIGkpID49IHZiX2Fib3ZlKSkgeworICAgICAgICAgICAg ICAgICAgICBwMSA9ICh5ICsgaSA9PSB2Yl9wb3MgLSAxKSA/IHAwIDogcDE7CisgICAgICAgICAg ICAgICAgICAgIHAzID0gKHkgKyBpID49IHZiX3BvcyAtIDIpID8gcDEgOiBwMzsKKyAgICAgICAg ICAgICAgICAgICAgcDUgPSAoeSArIGkgPj0gdmJfcG9zIC0gMykgPyBwMyA6IHA1OworCisgICAg ICAgICAgICAgICAgICAgIHAyID0gKHkgKyBpID09IHZiX3BvcyAtIDEpID8gcDAgOiBwMjsKKyAg ICAgICAgICAgICAgICAgICAgcDQgPSAoeSArIGkgPj0gdmJfcG9zIC0gMikgPyBwMiA6IHA0Owor ICAgICAgICAgICAgICAgICAgICBwNiA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAzKSA/IHA0IDogcDY7 CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoeSArIGkgPj0gdmJfcG9zKSAmJiAoKHkgKyBp KSA8PSB2Yl9iZWxvdykpIHsKKyAgICAgICAgICAgICAgICAgICAgcDIgPSAoeSArIGkgPT0gdmJf cG9zICAgICkgPyBwMCA6IHAyOworICAgICAgICAgICAgICAgICAgICBwNCA9ICh5ICsgaSA8PSB2 Yl9wb3MgKyAxKSA/IHAyIDogcDQ7CisgICAgICAgICAgICAgICAgICAgIHA2ID0gKHkgKyBpIDw9 IHZiX3BvcyArIDIpID8gcDQgOiBwNjsKKworICAgICAgICAgICAgICAgICAgICBwMSA9ICh5ICsg aSA9PSB2Yl9wb3MgICAgKSA/IHAwIDogcDE7CisgICAgICAgICAgICAgICAgICAgIHAzID0gKHkg KyBpIDw9IHZiX3BvcyArIDEpID8gcDEgOiBwMzsKKyAgICAgICAgICAgICAgICAgICAgcDUgPSAo eSArIGkgPD0gdmJfcG9zICsgMikgPyBwMyA6IHA1OworICAgICAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgQUxGX0JMT0NLX1NJWkU7IGorKykgewor ICAgICAgICAgICAgICAgICAgICBpbnQgc3VtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY29u c3QgcGl4ZWwgY3VyciA9ICpwMDsKKworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVy WzBdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAzWyswXSwgcDRbKzBdLCBjbGlwWzBdKTsKKyAg ICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclsxXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJy LCBwMVsrMV0sIHAyWy0xXSwgY2xpcFsxXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBm aWx0ZXJbMl0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFbKzBdLCBwMlsrMF0sIGNsaXBbMl0p OworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzNdICAqIEZVTkMoYWxmX2NsaXAp KGN1cnIsIHAxWy0xXSwgcDJbKzFdLCBjbGlwWzNdKTsKKyAgICAgICAgICAgICAgICAgICAgc3Vt ICs9IGZpbHRlcls0XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMFsrMl0sIHAwWy0yXSwgY2xp cFs0XSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNV0gICogRlVOQyhhbGZf Y2xpcCkoY3VyciwgcDBbKzFdLCBwMFstMV0sIGNsaXBbNV0pOworCisgICAgICAgICAgICAgICAg ICAgIGlmICghaXNfbmVhcl92YikKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1bSA9IChzdW0g KyBvZmZzZXQpID4+IHNoaWZ0OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgICAgICAgICAgICBzdW0gPSAoc3VtICsgKDEgPDwgKChzaGlmdCArIDMpIC0gMSkpKSA+PiAo c2hpZnQgKyAzKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGN1cnI7CisgICAgICAgICAg ICAgICAgICAgIGRzdFtqXSA9IENMSVAoc3VtKTsKKworICAgICAgICAgICAgICAgICAgICBwMCsr OworICAgICAgICAgICAgICAgICAgICBwMSsrOworICAgICAgICAgICAgICAgICAgICBwMisrOwor ICAgICAgICAgICAgICAgICAgICBwMysrOworICAgICAgICAgICAgICAgICAgICBwNCsrOworICAg ICAgICAgICAgICAgICAgICBwNSsrOworICAgICAgICAgICAgICAgICAgICBwNisrOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGlj IHZvaWQgRlVOQyhhbGZfZmlsdGVyX2NjKSh1aW50OF90ICpfZHN0LCBwdHJkaWZmX3QgZHN0X3N0 cmlkZSwgY29uc3QgdWludDhfdCAqX2x1bWEsIGNvbnN0IHB0cmRpZmZfdCBsdW1hX3N0cmlkZSwK KyAgICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludCBocywgY29u c3QgaW50IHZzLCBjb25zdCBpbnQxNl90ICpmaWx0ZXIsIGNvbnN0IGludCB2Yl9wb3MpCit7Cisg ICAgY29uc3QgcHRyZGlmZl90IHN0cmlkZSA9IGx1bWFfc3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsK KworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGZvciAoaW50IHkgPSAw OyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg eCsrKSB7CisgICAgICAgICAgICBpbnQgc3VtID0gMDsKKyAgICAgICAgICAgIHBpeGVsICpkc3Qg ID0gKHBpeGVsICopX2RzdCAgKyB5ICogZHN0X3N0cmlkZSArIHg7CisgICAgICAgICAgICBjb25z dCBwaXhlbCAqc3JjICA9IChwaXhlbCAqKV9sdW1hICsgKHkgPDwgdnMpICogc3RyaWRlICsgKHgg PDwgaHMpOworCisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczAgPSBzcmMgLSBzdHJpZGU7Cisg ICAgICAgICAgICBjb25zdCBwaXhlbCAqczEgPSBzcmM7CisgICAgICAgICAgICBjb25zdCBwaXhl bCAqczIgPSBzcmMgKyBzdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczMgPSBzcmMg KyAyICogc3RyaWRlOworCisgICAgICAgICAgICBjb25zdCBpbnQgcG9zID0geSA8PCB2czsKKyAg ICAgICAgICAgIGlmICghdnMgJiYgKHBvcyA9PSB2Yl9wb3MgfHwgcG9zID09IHZiX3BvcyArIDEp KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAocG9zID09ICh2 Yl9wb3MgLSAyKSB8fCBwb3MgPT0gKHZiX3BvcyArIDEpKQorICAgICAgICAgICAgICAgIHMzID0g czI7CisgICAgICAgICAgICBlbHNlICBpZiAocG9zID09ICh2Yl9wb3MgLSAxKSB8fCBwb3MgPT0g dmJfcG9zKQorICAgICAgICAgICAgICAgIHMzID0gczIgPSBzMCA9IHMxOworCisKKyAgICAgICAg ICAgIHN1bSArPSBmaWx0ZXJbMF0gKiAoKnMwIC0gKnNyYyk7CisgICAgICAgICAgICBzdW0gKz0g ZmlsdGVyWzFdICogKCooczEgLSAxKSAtICpzcmMpOworICAgICAgICAgICAgc3VtICs9IGZpbHRl clsyXSAqICgqKHMxICsgMSkgLSAqc3JjKTsKKyAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbM10g KiAoKihzMiAtIDEpIC0gKnNyYyk7CisgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzRdICogKCpz MiAtICpzcmMpOworICAgICAgICAgICAgc3VtICs9IGZpbHRlcls1XSAqICgqKHMyICsgMSkgLSAq c3JjKTsKKyAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNl0gKiAoKnMzIC0gKnNyYyk7CisgICAg ICAgICAgICBzdW0gPSBhdl9jbGlwKChzdW0gKyA2NCkgPj4gNywgLSgxIDw8IChCSVRfREVQVEgg LSAxKSksICgxIDw8IChCSVRfREVQVEggLSAxKSkgLSAxKTsKKyAgICAgICAgICAgIHN1bSArPSAq ZHN0OworICAgICAgICAgICAgKmRzdCA9IGF2X2NsaXBfcGl4ZWwoc3VtKTsKKyAgICAgICAgfQor ICAgIH0KK30KKworI2RlZmluZSBBTEZfRElSX1ZFUlQgICAgICAgIDAKKyNkZWZpbmUgQUxGX0RJ Ul9IT1JaICAgICAgICAxCisjZGVmaW5lIEFMRl9ESVJfRElHQTAgICAgICAgMgorI2RlZmluZSBB TEZfRElSX0RJR0ExICAgICAgIDMKKworc3RhdGljIHZvaWQgRlVOQyhhbGZfZ2V0X2lkeCkoaW50 ICpjbGFzc19pZHgsIGludCAqdHJhbnNwb3NlX2lkeCwgY29uc3QgaW50ICpzdW0sIGNvbnN0IGlu dCBhYykKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IGFyZ192YXJbXSA9IHswLCAxLCAyLCAyLCAy LCAyLCAyLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCA0IH07CisKKyAgICBpbnQgaHYwLCBodjEs IGRpcl9odiwgZDAsIGQxLCBkaXJfZCwgaHZkMSwgaHZkMCwgc3VtX2h2LCBkaXIxOworCisgICAg ZGlyX2h2ID0gc3VtW0FMRl9ESVJfVkVSVF0gPD0gc3VtW0FMRl9ESVJfSE9SWl07CisgICAgaHYx ICAgID0gRkZNQVgoc3VtW0FMRl9ESVJfVkVSVF0sIHN1bVtBTEZfRElSX0hPUlpdKTsKKyAgICBo djAgICAgPSBGRk1JTihzdW1bQUxGX0RJUl9WRVJUXSwgc3VtW0FMRl9ESVJfSE9SWl0pOworCisg ICAgZGlyX2QgID0gc3VtW0FMRl9ESVJfRElHQTBdIDw9IHN1bVtBTEZfRElSX0RJR0ExXTsKKyAg ICBkMSAgICAgPSBGRk1BWChzdW1bQUxGX0RJUl9ESUdBMF0sIHN1bVtBTEZfRElSX0RJR0ExXSk7 CisgICAgZDAgICAgID0gRkZNSU4oc3VtW0FMRl9ESVJfRElHQTBdLCBzdW1bQUxGX0RJUl9ESUdB MV0pOworCisgICAgLy9wcm9tb3RlIHRvIGF2b2lkIG92ZXJmbG93CisgICAgZGlyMSA9ICh1aW50 NjRfdClkMSAqIGh2MCA8PSAodWludDY0X3QpaHYxICogZDA7CisgICAgaHZkMSA9IGRpcjEgPyBo djEgOiBkMTsKKyAgICBodmQwID0gZGlyMSA/IGh2MCA6IGQwOworCisgICAgc3VtX2h2ID0gc3Vt W0FMRl9ESVJfSE9SWl0gKyBzdW1bQUxGX0RJUl9WRVJUXTsKKyAgICAqY2xhc3NfaWR4ID0gYXJn X3Zhclthdl9jbGlwX3VpbnRwMihzdW1faHYgKiBhYyA+PiAoQklUX0RFUFRIIC0gMSksIDQpXTsK KyAgICBpZiAoaHZkMSAqIDIgPiA5ICogaHZkMCkKKyAgICAgICAgKmNsYXNzX2lkeCArPSAoKGRp cjEgPDwgMSkgKyAyKSAqIDU7CisgICAgZWxzZSBpZiAoaHZkMSA+IDIgKiBodmQwKQorICAgICAg ICAqY2xhc3NfaWR4ICs9ICgoZGlyMSA8PCAxKSArIDEpICogNTsKKworICAgICp0cmFuc3Bvc2Vf aWR4ID0gZGlyX2QgKiAyICsgZGlyX2h2OworfQorCitzdGF0aWMgdm9pZCBGVU5DKGFsZl9jbGFz c2lmeSkoaW50ICpjbGFzc19pZHgsIGludCAqdHJhbnNwb3NlX2lkeCwKKyAgICBjb25zdCB1aW50 OF90ICpfc3JjLCBjb25zdCBwdHJkaWZmX3QgX3NyY19zdHJpZGUsIGNvbnN0IGludCB3aWR0aCwg Y29uc3QgaW50IGhlaWdodCwKKyAgICBjb25zdCBpbnQgdmJfcG9zLCBpbnQgKmdyYWRpZW50X3Rt cCkKK3sKKyAgICBpbnQgKmdyYWQ7CisKKyAgICBjb25zdCBpbnQgaCA9IGhlaWdodCArIEFMRl9H UkFESUVOVF9CT1JERVIgKiAyOworICAgIGNvbnN0IGludCB3ID0gd2lkdGggICsgQUxGX0dSQURJ RU5UX0JPUkRFUiAqIDI7CisgICAgY29uc3QgaW50IHNpemUgPSAoQUxGX0JMT0NLX1NJWkUgKyBB TEZfR1JBRElFTlRfQk9SREVSICogMikgLyBBTEZfR1JBRElFTlRfU1RFUDsKKyAgICBjb25zdCBp bnQgZ3N0cmlkZSA9ICh3IC8gQUxGX0dSQURJRU5UX1NURVApICogQUxGX05VTV9ESVI7CisKKyAg ICBjb25zdCBwaXhlbCAqc3JjICAgICAgICAgICA9IChjb25zdCBwaXhlbCAqKV9zcmM7CisgICAg Y29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUgPSBfc3JjX3N0cmlkZSAvIHNpemVvZihwaXhlbCk7 CisgICAgc3JjIC09IChBTEZfR1JBRElFTlRfQk9SREVSICsgMSkgKiBzcmNfc3RyaWRlICsgQUxG X0dSQURJRU5UX0JPUkRFUjsKKworICAgIGdyYWQgPSBncmFkaWVudF90bXA7CisgICAgZm9yIChp bnQgeSA9IDA7IHkgPCBoOyB5ICs9IEFMRl9HUkFESUVOVF9TVEVQKSB7CisgICAgICAgIGNvbnN0 IHBpeGVsICpzMCAgPSBzcmMgKyB5ICogc3JjX3N0cmlkZTsKKyAgICAgICAgY29uc3QgcGl4ZWwg KnMxICA9IHMwICsgc3JjX3N0cmlkZTsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnMyICA9IHMxICsg c3JjX3N0cmlkZTsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnMzICA9IHMyICsgc3JjX3N0cmlkZTsK KworICAgICAgICBpZiAoeSA9PSB2Yl9wb3MpICAgICAgICAgIC8vYWJvdmUKKyAgICAgICAgICAg IHMzID0gczI7CisgICAgICAgIGVsc2UgaWYgKHkgPT0gdmJfcG9zICsgQUxGX0dSQURJRU5UX0JP UkRFUikKKyAgICAgICAgICAgIHMwID0gczE7CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg PCB3OyB4ICs9IEFMRl9HUkFESUVOVF9TVEVQKSB7CisgICAgICAgICAgICAvL3R3byBwb2ludHMg YSB0aW1lCisgICAgICAgICAgICBjb25zdCBwaXhlbCAqYTAgID0gczAgKyB4OworICAgICAgICAg ICAgY29uc3QgcGl4ZWwgKnAwICA9IHMxICsgeDsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpi MCAgPSBzMiArIHg7CisgICAgICAgICAgICBjb25zdCBpbnQgdmFsMCAgID0gKCpwMCkgPDwgMTsK KworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmExICA9IHMxICsgeCArIDE7CisgICAgICAgICAg ICBjb25zdCBwaXhlbCAqcDEgID0gczIgKyB4ICsgMTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVs ICpiMSAgPSBzMyArIHggKyAxOworICAgICAgICAgICAgY29uc3QgaW50IHZhbDEgICA9ICgqcDEp IDw8IDE7CisKKyAgICAgICAgICAgIGdyYWRbQUxGX0RJUl9WRVJUXSAgPSBGRkFCUyh2YWwwIC0g KmEwIC0gKmIwKSArIEZGQUJTKHZhbDEgLSAqYTEgLSAqYjEpOworICAgICAgICAgICAgZ3JhZFtB TEZfRElSX0hPUlpdICA9IEZGQUJTKHZhbDAgLSAqKHAwIC0gMSkgLSAqKHAwICsgMSkpICsgRkZB QlModmFsMSAtICoocDEgLSAxKSAtICoocDEgKyAxKSk7CisgICAgICAgICAgICBncmFkW0FMRl9E SVJfRElHQTBdID0gRkZBQlModmFsMCAtICooYTAgLSAxKSAtICooYjAgKyAxKSkgKyBGRkFCUyh2 YWwxIC0gKihhMSAtIDEpIC0gKihiMSArIDEpKTsKKyAgICAgICAgICAgIGdyYWRbQUxGX0RJUl9E SUdBMV0gPSBGRkFCUyh2YWwwIC0gKihhMCArIDEpIC0gKihiMCAtIDEpKSArIEZGQUJTKHZhbDEg LSAqKGExICsgMSkgLSAqKGIxIC0gMSkpOworICAgICAgICAgICAgZ3JhZCArPSBBTEZfTlVNX0RJ UjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IDsg eSArPSBBTEZfQkxPQ0tfU0laRSApIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gMDsKKyAgICAgICAg aW50IGVuZCAgID0gKEFMRl9CTE9DS19TSVpFICsgQUxGX0dSQURJRU5UX0JPUkRFUiAqIDIpIC8g QUxGX0dSQURJRU5UX1NURVA7CisgICAgICAgIGludCBhYyAgICA9IDI7CisgICAgICAgIGlmICh5 ICsgQUxGX0JMT0NLX1NJWkUgPT0gdmJfcG9zKSB7CisgICAgICAgICAgICBlbmQgLT0gQUxGX0dS QURJRU5UX0JPUkRFUiAvIEFMRl9HUkFESUVOVF9TVEVQOworICAgICAgICAgICAgYWMgPSAzOwor ICAgICAgICB9IGVsc2UgaWYgKHkgPT0gdmJfcG9zKSB7CisgICAgICAgICAgICBzdGFydCArPSBB TEZfR1JBRElFTlRfQk9SREVSIC8gQUxGX0dSQURJRU5UX1NURVA7CisgICAgICAgICAgICBhYyA9 IDM7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCArPSBB TEZfQkxPQ0tfU0laRSkgeworICAgICAgICAgICAgY29uc3QgaW50IHhnID0geCAvIEFMRl9HUkFE SUVOVF9TVEVQOworICAgICAgICAgICAgY29uc3QgaW50IHlnID0geSAvIEFMRl9HUkFESUVOVF9T VEVQOworICAgICAgICAgICAgaW50IHN1bVtBTEZfTlVNX0RJUl0gPSB7IDAgfTsKKworICAgICAg ICAgICAgZ3JhZCA9IGdyYWRpZW50X3RtcCArICh5ZyArIHN0YXJ0KSAqIGdzdHJpZGUgKyB4ZyAq IEFMRl9OVU1fRElSOworICAgICAgICAgICAgLy90b2RvOiBvcHRpbWl6ZSB0aGlzIGxvb3AKKyAg ICAgICAgICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CisgICAgICAgICAg ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAgICAg ICAgc3VtW0FMRl9ESVJfVkVSVF0gICs9IGdyYWRbQUxGX0RJUl9WRVJUXTsKKyAgICAgICAgICAg ICAgICAgICAgc3VtW0FMRl9ESVJfSE9SWl0gICs9IGdyYWRbQUxGX0RJUl9IT1JaXTsKKyAgICAg ICAgICAgICAgICAgICAgc3VtW0FMRl9ESVJfRElHQTBdICs9IGdyYWRbQUxGX0RJUl9ESUdBMF07 CisgICAgICAgICAgICAgICAgICAgIHN1bVtBTEZfRElSX0RJR0ExXSArPSBncmFkW0FMRl9ESVJf RElHQTFdOworICAgICAgICAgICAgICAgICAgICBncmFkICs9IEFMRl9OVU1fRElSOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBncmFkICs9IGdzdHJpZGUgLSBzaXplICogQUxG X05VTV9ESVI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGVU5DKGFsZl9nZXRfaWR4KShj bGFzc19pZHgsIHRyYW5zcG9zZV9pZHgsIHN1bSwgYWMpOworCisgICAgICAgICAgICBjbGFzc19p ZHgrKzsKKyAgICAgICAgICAgIHRyYW5zcG9zZV9pZHgrKzsKKyAgICAgICAgfQorICAgIH0KKwor fQorCitzdGF0aWMgdm9pZCBGVU5DKGFsZl9yZWNvbl9jb2VmZl9hbmRfY2xpcCkoaW50MTZfdCAq Y29lZmYsIGludDE2X3QgKmNsaXAsCisgICAgY29uc3QgaW50ICpjbGFzc19pZHgsIGNvbnN0IGlu dCAqdHJhbnNwb3NlX2lkeCwgY29uc3QgaW50IHNpemUsCisgICAgY29uc3QgaW50MTZfdCAqY29l ZmZfc2V0LCBjb25zdCB1aW50OF90ICpjbGlwX2lkeF9zZXQsIGNvbnN0IHVpbnQ4X3QgKmNsYXNz X3RvX2ZpbHQpCit7CisgICAgY29uc3Qgc3RhdGljIGludCBpbmRleFtdW0FMRl9OVU1fQ09FRkZf TFVNQV0gPSB7CisgICAgICAgIHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDEx IH0sCisgICAgICAgIHsgOSwgNCwgMTAsIDgsIDEsIDUsIDExLCA3LCAzLCAwLCAyLCA2IH0sCisg ICAgICAgIHsgMCwgMywgMiwgMSwgOCwgNywgNiwgNSwgNCwgOSwgMTAsIDExIH0sCisgICAgICAg IHsgOSwgOCwgMTAsIDQsIDMsIDcsIDExLCA1LCAxLCAwLCAyLCA2IH0sCisgICAgfTsKKworICAg IGNvbnN0IGludDE2X3QgY2xpcF9zZXRbXSA9IHsKKyAgICAgICAgMSA8PCBCSVRfREVQVEgsIDEg PDwgKEJJVF9ERVBUSCAtIDMpLCAxIDw8IChCSVRfREVQVEggLSA1KSwgMSA8PCAoQklUX0RFUFRI IC0gNykKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAg ICAgICAgY29uc3QgaW50MTZfdCAgKnNyY19jb2VmZiA9IGNvZWZmX3NldCArIGNsYXNzX3RvX2Zp bHRbY2xhc3NfaWR4W2ldXSAqIEFMRl9OVU1fQ09FRkZfTFVNQTsKKyAgICAgICAgY29uc3QgdWlu dDhfdCAqY2xpcF9pZHggID0gY2xpcF9pZHhfc2V0ICsgY2xhc3NfaWR4W2ldICogQUxGX05VTV9D T0VGRl9MVU1BOworCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgQUxGX05VTV9DT0VGRl9M VU1BOyBqKyspIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBpZHggPSBpbmRleFt0cmFuc3Bvc2Vf aWR4W2ldXVtqXTsKKyAgICAgICAgICAgICpjb2VmZisrID0gc3JjX2NvZWZmW2lkeF07CisgICAg ICAgICAgICAqY2xpcCsrICA9IGNsaXBfc2V0W2NsaXBfaWR4W2lkeF1dOworICAgICAgICB9Cisg ICAgfQorfQorCisjdW5kZWYgQUxGX0RJUl9IT1JaCisjdW5kZWYgQUxGX0RJUl9WRVJUCisjdW5k ZWYgQUxGX0RJUl9ESUdBMAorI3VuZGVmIEFMRl9ESVJfRElHQTEKKworLy8gbGluZSB6ZXJvCisj ZGVmaW5lIFA3IHBpeFstOCAqIHhzdHJpZGVdCisjZGVmaW5lIFA2IHBpeFstNyAqIHhzdHJpZGVd CisjZGVmaW5lIFA1IHBpeFstNiAqIHhzdHJpZGVdCisjZGVmaW5lIFA0IHBpeFstNSAqIHhzdHJp ZGVdCisjZGVmaW5lIFAzIHBpeFstNCAqIHhzdHJpZGVdCisjZGVmaW5lIFAyIHBpeFstMyAqIHhz dHJpZGVdCisjZGVmaW5lIFAxIHBpeFstMiAqIHhzdHJpZGVdCisjZGVmaW5lIFAwIHBpeFstMSAq IHhzdHJpZGVdCisjZGVmaW5lIFEwIHBpeFswICogeHN0cmlkZV0KKyNkZWZpbmUgUTEgcGl4WzEg KiB4c3RyaWRlXQorI2RlZmluZSBRMiBwaXhbMiAqIHhzdHJpZGVdCisjZGVmaW5lIFEzIHBpeFsz ICogeHN0cmlkZV0KKyNkZWZpbmUgUTQgcGl4WzQgKiB4c3RyaWRlXQorI2RlZmluZSBRNSBwaXhb NSAqIHhzdHJpZGVdCisjZGVmaW5lIFE2IHBpeFs2ICogeHN0cmlkZV0KKyNkZWZpbmUgUTcgcGl4 WzcgKiB4c3RyaWRlXQorI2RlZmluZSBQKHgpIHBpeFsoLSh4KS0xKSAqIHhzdHJpZGVdCisjZGVm aW5lIFEoeCkgcGl4Wyh4KSAgICAgICogeHN0cmlkZV0KKworLy8gbGluZSB0aHJlZS4gdXNlZCBv bmx5IGZvciBkZWJsb2NraW5nIGRlY2lzaW9uCisjZGVmaW5lIFRQNyBwaXhbLTggKiB4c3RyaWRl ICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQNiBwaXhbLTcgKiB4c3RyaWRlICsgMyAqIHlzdHJp ZGVdCisjZGVmaW5lIFRQNSBwaXhbLTYgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5l IFRQNCBwaXhbLTUgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQMyBwaXhbLTQg KiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQMiBwaXhbLTMgKiB4c3RyaWRlICsg MyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQMSBwaXhbLTIgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVd CisjZGVmaW5lIFRQMCBwaXhbLTEgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRR MCBwaXhbMCAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRMSBwaXhbMSAgKiB4 c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRMiBwaXhbMiAgKiB4c3RyaWRlICsgMyAq IHlzdHJpZGVdCisjZGVmaW5lIFRRMyBwaXhbMyAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisj ZGVmaW5lIFRRNCBwaXhbNCAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRNSBw aXhbNSAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRNiBwaXhbNiAgKiB4c3Ry aWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRNyBwaXhbNyAgKiB4c3RyaWRlICsgMyAqIHlz dHJpZGVdCisjZGVmaW5lIFRQKHgpIHBpeFsoLSh4KS0xKSAqIHhzdHJpZGUgKyAzICogeXN0cmlk ZV0KKyNkZWZpbmUgVFEoeCkgcGl4Wyh4KSAgICAgICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQor CisjZGVmaW5lIEZQMyBwaXhbLTQgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZQ MiBwaXhbLTMgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZQMSBwaXhbLTIgKiB4 c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZQMCBwaXhbLTEgKiB4c3RyaWRlICsgMSAq IHlzdHJpZGVdCisjZGVmaW5lIEZRMCBwaXhbMCAgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisj ZGVmaW5lIEZRMSBwaXhbMSAgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZRMiBw aXhbMiAgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZRMyBwaXhbMyAgKiB4c3Ry aWRlICsgMSAqIHlzdHJpZGVdCisKK3N0YXRpYyB2b2lkIEZVTkMobG9vcF9maWx0ZXJfbHVtYV9s YXJnZSkocGl4ZWwgKnBpeCwgY29uc3QgcHRyZGlmZl90IHhzdHJpZGUsIGNvbnN0IHB0cmRpZmZf dCB5c3RyaWRlLCBjb25zdCBpbnQzMl90IHRjLAorICAgIGNvbnN0IHVpbnQ4X3Qgbm9fcCwgY29u c3QgdWludDhfdCBub19xLCBjb25zdCB1aW50OF90IG1heF9sZW5fcCwgY29uc3QgdWludDhfdCBt YXhfbGVuX3EpCit7CisgICAgZm9yIChpbnQgZCA9IDA7IGQgPCA0OyBkKyspIHsKKyAgICAgICAg Y29uc3QgaW50IHA2ID0gUDY7CisgICAgICAgIGNvbnN0IGludCBwNSA9IFA1OworICAgICAgICBj b25zdCBpbnQgcDQgPSBQNDsKKyAgICAgICAgY29uc3QgaW50IHAzID0gUDM7CisgICAgICAgIGNv bnN0IGludCBwMiA9IFAyOworICAgICAgICBjb25zdCBpbnQgcDEgPSBQMTsKKyAgICAgICAgY29u c3QgaW50IHAwID0gUDA7CisgICAgICAgIGNvbnN0IGludCBxMCA9IFEwOworICAgICAgICBjb25z dCBpbnQgcTEgPSBRMTsKKyAgICAgICAgY29uc3QgaW50IHEyID0gUTI7CisgICAgICAgIGNvbnN0 IGludCBxMyA9IFEzOworICAgICAgICBjb25zdCBpbnQgcTQgPSBRNDsKKyAgICAgICAgY29uc3Qg aW50IHE1ID0gUTU7CisgICAgICAgIGNvbnN0IGludCBxNiA9IFE2OworICAgICAgICBpbnQgbTsK KyAgICAgICAgaWYgKG1heF9sZW5fcCA9PSA1ICYmIG1heF9sZW5fcSA9PSA1KQorICAgICAgICAg ICAgbSA9IChwNCArIHAzICsgMiAqIChwMiArIHAxICsgcDAgKyBxMCArIHExICsgcTIpICsgcTMg KyBxNCArIDgpID4+IDQ7CisgICAgICAgIGVsc2UgaWYgKG1heF9sZW5fcCA9PSBtYXhfbGVuX3Ep CisgICAgICAgICAgICBtID0gKHA2ICsgcDUgKyBwNCArIHAzICsgcDIgKyBwMSArIDIgKiAocDAg KyBxMCkgKyBxMSArIHEyICsgcTMgKyBxNCArIHE1ICsgcTYgKyA4KSA+PiA0OworICAgICAgICBl bHNlIGlmIChtYXhfbGVuX3AgKyBtYXhfbGVuX3EgPT0gMTIpCisgICAgICAgICAgICBtID0gKHA1 ICsgcDQgKyBwMyArIHAyICsgMiAqIChwMSArIHAwICsgcTAgKyBxMSkgKyBxMiArIHEzICsgcTQg KyBxNSArIDgpID4+IDQ7CisgICAgICAgIGVsc2UgaWYgKG1heF9sZW5fcCArIG1heF9sZW5fcSA9 PSA4KQorICAgICAgICAgICAgbSA9IChwMyArIHAyICsgcDEgKyBwMCArIHEwICsgcTEgKyBxMiAr IHEzICsgNCkgPj4gMzsKKyAgICAgICAgZWxzZSBpZiAobWF4X2xlbl9xID09IDcpCisgICAgICAg ICAgICBtID0gKDIgKiAocDIgKyBwMSArIHAwICsgcTApICsgcDAgKyBwMSArIHExICsgcTIgKyBx MyArIHE0ICsgcTUgKyBxNiArIDgpID4+IDQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG0g PSAocDYgKyBwNSArIHA0ICsgcDMgKyBwMiArIHAxICsgMiAqIChxMiArIHExICsgcTAgKyBwMCkg KyBxMCArIHExICsgOCkgPj4gNDsKKyAgICAgICAgaWYgKCFub19wKSB7CisgICAgICAgICAgICBj b25zdCBpbnQgcmVmcCA9IChQKG1heF9sZW5fcCkgKyBQKG1heF9sZW5fcCAtIDEpICsgMSkgPj4g MTsKKyAgICAgICAgICAgIGlmIChtYXhfbGVuX3AgPT0gMykgeworICAgICAgICAgICAgICAgIFAw ID0gcDAgKyBhdl9jbGlwKCgobSAqIDUzICsgcmVmcCAqIDExICsgMzIpID4+IDYpIC0gcDAsIC0o dGMgKiA2ID4+IDEpLCAodGMgKiA2ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQMSA9IHAxICsg YXZfY2xpcCgoKG0gKiAzMiArIHJlZnAgKiAzMiArIDMyKSA+PiA2KSAtIHAxLCAtKHRjICogNCA+ PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAgICAgUDIgPSBwMiArIGF2X2NsaXAo KChtICogMTEgKyByZWZwICogNTMgKyAzMikgPj4gNikgLSBwMiwgLSh0YyAqIDIgPj4gMSksICh0 YyAqIDIgPj4gMSkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXhfbGVuX3AgPT0gNSkgewor ICAgICAgICAgICAgICAgIFAwID0gcDAgKyBhdl9jbGlwKCgobSAqIDU4ICsgcmVmcCAqICA2ICsg MzIpID4+IDYpIC0gcDAsIC0odGMgKiA2ID4+IDEpLCAodGMgKiA2ID4+IDEpKTsKKyAgICAgICAg ICAgICAgICBQMSA9IHAxICsgYXZfY2xpcCgoKG0gKiA0NSArIHJlZnAgKiAxOSArIDMyKSA+PiA2 KSAtIHAxLCAtKHRjICogNSA+PiAxKSwgKHRjICogNSA+PiAxKSk7CisgICAgICAgICAgICAgICAg UDIgPSBwMiArIGF2X2NsaXAoKChtICogMzIgKyByZWZwICogMzIgKyAzMikgPj4gNikgLSBwMiwg LSh0YyAqIDQgPj4gMSksICh0YyAqIDQgPj4gMSkpOworICAgICAgICAgICAgICAgIFAzID0gcDMg KyBhdl9jbGlwKCgobSAqIDE5ICsgcmVmcCAqIDQ1ICsgMzIpID4+IDYpIC0gcDMsIC0odGMgKiAz ID4+IDEpLCAodGMgKiAzID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQNCA9IHA0ICsgYXZfY2xp cCgoKG0gKiAgNiArIHJlZnAgKiA1OCArIDMyKSA+PiA2KSAtIHA0LCAtKHRjICogMiA+PiAxKSwg KHRjICogMiA+PiAxKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFAw ID0gcDAgKyBhdl9jbGlwKCgobSAqIDU5ICsgcmVmcCAqICA1ICsgMzIpID4+IDYpIC0gcDAsIC0o dGMgKiA2ID4+IDEpLCAodGMgKiA2ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQMSA9IHAxICsg YXZfY2xpcCgoKG0gKiA1MCArIHJlZnAgKiAxNCArIDMyKSA+PiA2KSAtIHAxLCAtKHRjICogNSA+ PiAxKSwgKHRjICogNSA+PiAxKSk7CisgICAgICAgICAgICAgICAgUDIgPSBwMiArIGF2X2NsaXAo KChtICogNDEgKyByZWZwICogMjMgKyAzMikgPj4gNikgLSBwMiwgLSh0YyAqIDQgPj4gMSksICh0 YyAqIDQgPj4gMSkpOworICAgICAgICAgICAgICAgIFAzID0gcDMgKyBhdl9jbGlwKCgobSAqIDMy ICsgcmVmcCAqIDMyICsgMzIpID4+IDYpIC0gcDMsIC0odGMgKiAzID4+IDEpLCAodGMgKiAzID4+ IDEpKTsKKyAgICAgICAgICAgICAgICBQNCA9IHA0ICsgYXZfY2xpcCgoKG0gKiAyMyArIHJlZnAg KiA0MSArIDMyKSA+PiA2KSAtIHA0LCAtKHRjICogMiA+PiAxKSwgKHRjICogMiA+PiAxKSk7Cisg ICAgICAgICAgICAgICAgUDUgPSBwNSArIGF2X2NsaXAoKChtICogMTQgKyByZWZwICogNTAgKyAz MikgPj4gNikgLSBwNSwgLSh0YyAqIDEgPj4gMSksICh0YyAqIDEgPj4gMSkpOworICAgICAgICAg ICAgICAgIFA2ID0gcDYgKyBhdl9jbGlwKCgobSAqICA1ICsgcmVmcCAqIDU5ICsgMzIpID4+IDYp IC0gcDYsIC0odGMgKiAxID4+IDEpLCAodGMgKiAxID4+IDEpKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgICBpZiAoIW5vX3EpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCByZWZx ID0gKFEobWF4X2xlbl9xKSArIFEobWF4X2xlbl9xIC0gMSkgKyAxKSA+PiAxOworICAgICAgICAg ICAgaWYgKG1heF9sZW5fcSA9PSAzKSB7CisgICAgICAgICAgICAgICAgUTAgPSBxMCArIGF2X2Ns aXAoKChtICogNTMgKyByZWZxICogMTEgKyAzMikgPj4gNikgLSBxMCwgIC0odGMgKiA2ID4+IDEp LCAodGMgKiA2ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRMSA9IHExICsgYXZfY2xpcCgoKG0g KiAzMiArIHJlZnEgKiAzMiArIDMyKSA+PiA2KSAtIHExLCAgLSh0YyAqIDQgPj4gMSksICh0YyAq IDQgPj4gMSkpOworICAgICAgICAgICAgICAgIFEyID0gcTIgKyBhdl9jbGlwKCgobSAqIDExICsg cmVmcSAqIDUzICsgMzIpID4+IDYpIC0gcTIsICAtKHRjICogMiA+PiAxKSwgKHRjICogMiA+PiAx KSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1heF9sZW5fcSA9PSA1KSB7CisgICAgICAgICAg ICAgICAgUTAgPSBxMCArIGF2X2NsaXAoKChtICogNTggKyByZWZxICogIDYgKyAzMikgPj4gNikg LSBxMCwgLSh0YyAqIDYgPj4gMSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAgIFEx ID0gcTEgKyBhdl9jbGlwKCgobSAqIDQ1ICsgcmVmcSAqIDE5ICsgMzIpID4+IDYpIC0gcTEsIC0o dGMgKiA1ID4+IDEpLCAodGMgKiA1ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRMiA9IHEyICsg YXZfY2xpcCgoKG0gKiAzMiArIHJlZnEgKiAzMiArIDMyKSA+PiA2KSAtIHEyLCAtKHRjICogNCA+ PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTMgPSBxMyArIGF2X2NsaXAo KChtICogMTkgKyByZWZxICogNDUgKyAzMikgPj4gNikgLSBxMywgLSh0YyAqIDMgPj4gMSksICh0 YyAqIDMgPj4gMSkpOworICAgICAgICAgICAgICAgIFE0ID0gcTQgKyBhdl9jbGlwKCgobSAqICA2 ICsgcmVmcSAqIDU4ICsgMzIpID4+IDYpIC0gcTQsIC0odGMgKiAyID4+IDEpLCAodGMgKiAyID4+ IDEpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUTAgPSBxMCArIGF2 X2NsaXAoKChtICogNTkgKyByZWZxICogIDUgKyAzMikgPj4gNikgLSBxMCwgLSh0YyAqIDYgPj4g MSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAgIFExID0gcTEgKyBhdl9jbGlwKCgo bSAqIDUwICsgcmVmcSAqIDE0ICsgMzIpID4+IDYpIC0gcTEsIC0odGMgKiA1ID4+IDEpLCAodGMg KiA1ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRMiA9IHEyICsgYXZfY2xpcCgoKG0gKiA0MSAr IHJlZnEgKiAyMyArIDMyKSA+PiA2KSAtIHEyLCAtKHRjICogNCA+PiAxKSwgKHRjICogNCA+PiAx KSk7CisgICAgICAgICAgICAgICAgUTMgPSBxMyArIGF2X2NsaXAoKChtICogMzIgKyByZWZxICog MzIgKyAzMikgPj4gNikgLSBxMywgLSh0YyAqIDMgPj4gMSksICh0YyAqIDMgPj4gMSkpOworICAg ICAgICAgICAgICAgIFE0ID0gcTQgKyBhdl9jbGlwKCgobSAqIDIzICsgcmVmcSAqIDQxICsgMzIp ID4+IDYpIC0gcTQsIC0odGMgKiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsKKyAgICAgICAgICAg ICAgICBRNSA9IHE1ICsgYXZfY2xpcCgoKG0gKiAxNCArIHJlZnEgKiA1MCArIDMyKSA+PiA2KSAt IHE1LCAtKHRjICogMSA+PiAxKSwgKHRjICogMSA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTYg PSBxNiArIGF2X2NsaXAoKChtICogIDUgKyByZWZxICogNTkgKyAzMikgPj4gNikgLSBxNiwgLSh0 YyAqIDEgPj4gMSksICh0YyAqIDEgPj4gMSkpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0K KyAgICAgICAgcGl4ICs9IHlzdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKGxv b3BfZmlsdGVyX2x1bWFfc3Ryb25nKShwaXhlbCAqcGl4LCBjb25zdCBwdHJkaWZmX3QgeHN0cmlk ZSwgY29uc3QgcHRyZGlmZl90IHlzdHJpZGUsIGNvbnN0IGludDMyX3QgdGMsCisgICAgY29uc3Qg dWludDhfdCBub19wLCBjb25zdCB1aW50OF90IG5vX3EpCit7CisgICAgY29uc3QgaW50IHRjMiA9 IHRjIDw8IDE7CisgICAgY29uc3QgaW50IHRjMyA9IHRjICogMzsKKyAgICBmb3IgKGludCBkID0g MDsgZCA8IDQ7IGQrKykgeworICAgICAgICBjb25zdCBpbnQgcDMgPSBQMzsKKyAgICAgICAgY29u c3QgaW50IHAyID0gUDI7CisgICAgICAgIGNvbnN0IGludCBwMSA9IFAxOworICAgICAgICBjb25z dCBpbnQgcDAgPSBQMDsKKyAgICAgICAgY29uc3QgaW50IHEwID0gUTA7CisgICAgICAgIGNvbnN0 IGludCBxMSA9IFExOworICAgICAgICBjb25zdCBpbnQgcTIgPSBRMjsKKyAgICAgICAgY29uc3Qg aW50IHEzID0gUTM7CisgICAgICAgIGlmICghbm9fcCkgeworICAgICAgICAgICAgUDAgPSBwMCAr IGF2X2NsaXAoKChwMiArIDIgKiBwMSArIDIgKiBwMCArIDIgKiBxMCArIHExICsgNCkgPj4gMykg LSBwMCwgLXRjMywgdGMzKTsKKyAgICAgICAgICAgIFAxID0gcDEgKyBhdl9jbGlwKCgocDIgKyBw MSArIHAwICsgcTAgKyAyKSA+PiAyKSAtIHAxLCAtdGMyLCB0YzIpOworICAgICAgICAgICAgUDIg PSBwMiArIGF2X2NsaXAoKCgyICogcDMgKyAzICogcDIgKyBwMSArIHAwICsgcTAgKyA0KSA+PiAz KSAtIHAyLCAtdGMsIHRjKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW5vX3EpIHsKKyAgICAg ICAgICAgIFEwID0gcTAgKyBhdl9jbGlwKCgocDEgKyAyICogcDAgKyAyICogcTAgKyAyICogcTEg KyBxMiArIDQpID4+IDMpIC0gcTAsIC10YzMsIHRjMyk7CisgICAgICAgICAgICBRMSA9IHExICsg YXZfY2xpcCgoKHAwICsgcTAgKyBxMSArIHEyICsgMikgPj4gMikgLSBxMSwgLXRjMiwgdGMyKTsK KyAgICAgICAgICAgIFEyID0gcTIgKyBhdl9jbGlwKCgoMiAqIHEzICsgMyAqIHEyICsgcTEgKyBx MCArIHAwICsgNCkgPj4gMykgLSBxMiwgLXRjLCB0Yyk7CisgICAgICAgIH0KKyAgICAgICAgcGl4 ICs9IHlzdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKGxvb3BfZmlsdGVyX2x1 bWFfd2VhaykocGl4ZWwgKnBpeCwgY29uc3QgcHRyZGlmZl90IHhzdHJpZGUsIGNvbnN0IHB0cmRp ZmZfdCB5c3RyaWRlLAorICAgIGNvbnN0IGludDMyX3QgdGMsIGNvbnN0IGludDMyX3QgYmV0YSwg Y29uc3QgdWludDhfdCBub19wLCBjb25zdCB1aW50OF90IG5vX3EsIGNvbnN0IGludCBuZF9wLCBj b25zdCBpbnQgbmRfcSkKK3sKKyAgICBjb25zdCBpbnQgdGNfMiA9IHRjID4+IDE7CisgICAgZm9y IChpbnQgZCA9IDA7IGQgPCA0OyBkKyspIHsKKyAgICAgICAgY29uc3QgaW50IHAyID0gUDI7Cisg ICAgICAgIGNvbnN0IGludCBwMSA9IFAxOworICAgICAgICBjb25zdCBpbnQgcDAgPSBQMDsKKyAg ICAgICAgY29uc3QgaW50IHEwID0gUTA7CisgICAgICAgIGNvbnN0IGludCBxMSA9IFExOworICAg ICAgICBjb25zdCBpbnQgcTIgPSBRMjsKKyAgICAgICAgaW50IGRlbHRhMCA9ICg5ICogKHEwIC0g cDApIC0gMyAqIChxMSAtIHAxKSArIDgpID4+IDQ7CisgICAgICAgIGlmIChhYnMoZGVsdGEwKSA8 IDEwICogdGMpIHsKKyAgICAgICAgICAgIGRlbHRhMCA9IGF2X2NsaXAoZGVsdGEwLCAtdGMsIHRj KTsKKyAgICAgICAgICAgIGlmICghbm9fcCkKKyAgICAgICAgICAgICAgICBQMCA9IGF2X2NsaXBf cGl4ZWwocDAgKyBkZWx0YTApOworICAgICAgICAgICAgaWYgKCFub19xKQorICAgICAgICAgICAg ICAgIFEwID0gYXZfY2xpcF9waXhlbChxMCAtIGRlbHRhMCk7CisgICAgICAgICAgICBpZiAoIW5v X3AgJiYgbmRfcCA+IDEpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgZGVsdGFwMSA9IGF2 X2NsaXAoKCgocDIgKyBwMCArIDEpID4+IDEpIC0gcDEgKyBkZWx0YTApID4+IDEsIC10Y18yLCB0 Y18yKTsKKyAgICAgICAgICAgICAgICBQMSA9IGF2X2NsaXBfcGl4ZWwocDEgKyBkZWx0YXAxKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbm9fcSAmJiBuZF9xID4gMSkgeworICAg ICAgICAgICAgICAgIGNvbnN0IGludCBkZWx0YXExID0gYXZfY2xpcCgoKChxMiArIHEwICsgMSkg Pj4gMSkgLSBxMSAtIGRlbHRhMCkgPj4gMSwgLXRjXzIsIHRjXzIpOworICAgICAgICAgICAgICAg IFExID0gYXZfY2xpcF9waXhlbChxMSArIGRlbHRhcTEpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIHBpeCArPSB5c3RyaWRlOworICAgIH0KKworfQorCitzdGF0aWMgdm9pZCBG VU5DKHZ2Y19sb29wX2ZpbHRlcl9sdW1hKSh1aW50OF90KiBfcGl4LCBwdHJkaWZmX3QgX3hzdHJp ZGUsIHB0cmRpZmZfdCBfeXN0cmlkZSwKKyAgICBjb25zdCBpbnQzMl90ICpfYmV0YSwgY29uc3Qg aW50MzJfdCAqX3RjLCBjb25zdCB1aW50OF90ICpfbm9fcCwgY29uc3QgdWludDhfdCAqX25vX3Es CisgICAgY29uc3QgdWludDhfdCAqX21heF9sZW5fcCwgY29uc3QgdWludDhfdCAqX21heF9sZW5f cSwgaW50IGhvcl9jdHVfZWRnZSkKK3sKKyAgICBjb25zdCBwdHJkaWZmX3QgeHN0cmlkZSA9IF94 c3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICBjb25zdCBwdHJkaWZmX3QgeXN0cmlkZSA9IF95 c3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsr KSB7CisgICAgICAgIHBpeGVsKiBwaXggICAgICA9IChwaXhlbCopX3BpeCArIGkgKiA0ICogeXN0 cmlkZTsKKyAgICAgICAgY29uc3QgaW50IGRwMCAgID0gYWJzKFAyIC0gMiAqIFAxICsgUDApOwor ICAgICAgICBjb25zdCBpbnQgZHEwICAgPSBhYnMoUTIgLSAyICogUTEgKyBRMCk7CisgICAgICAg IGNvbnN0IGludCBkcDMgICA9IGFicyhUUDIgLSAyICogVFAxICsgVFAwKTsKKyAgICAgICAgY29u c3QgaW50IGRxMyAgID0gYWJzKFRRMiAtIDIgKiBUUTEgKyBUUTApOworICAgICAgICBjb25zdCBp bnQgZDAgICAgPSBkcDAgKyBkcTA7CisgICAgICAgIGNvbnN0IGludCBkMyAgICA9IGRwMyArIGRx MzsKKyNpZiBCSVRfREVQVEggPCAxMAorICAgICAgICBjb25zdCBpbnQgdGMgICAgPSAoX3RjW2ld ICsgKDEgPDwgKDkgLSBCSVRfREVQVEgpKSkgPj4gKDEwIC0gQklUX0RFUFRIKTsKKyNlbHNlCisg ICAgICAgIGNvbnN0IGludCB0YyAgICA9IF90Y1tpXSA8PCAoQklUX0RFUFRIIC0gMTApOworI2Vu ZGlmCisgICAgICAgIGNvbnN0IGludCB0YzI1ICA9ICgodGMgKiA1ICsgMSkgPj4gMSk7CisKKyAg ICAgICAgY29uc3QgaW50IG5vX3AgID0gX25vX3BbaV07CisgICAgICAgIGNvbnN0IGludCBub19x ICA9IF9ub19xW2ldOworCisgICAgICAgIGludCBtYXhfbGVuX3AgICA9IF9tYXhfbGVuX3BbaV07 CisgICAgICAgIGludCBtYXhfbGVuX3EgICA9IF9tYXhfbGVuX3FbaV07CisKKyAgICAgICAgY29u c3QgaW50IGxhcmdlX3AgPSAobWF4X2xlbl9wID4gMyAmJiAhaG9yX2N0dV9lZGdlKTsKKyAgICAg ICAgY29uc3QgaW50IGxhcmdlX3EgPSBtYXhfbGVuX3EgPiAzOworICAgICAgICBjb25zdCBpbnQg YmV0YSA9IF9iZXRhW2ldIDw8IEJJVF9ERVBUSCAtIDg7CisKKyAgICAgICAgY29uc3QgaW50IGJl dGFfMyA9IGJldGEgPj4gMzsKKyAgICAgICAgY29uc3QgaW50IGJldGFfMiA9IGJldGEgPj4gMjsK KworICAgICAgICBpZiAoIXRjKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg KGxhcmdlX3AgfHwgbGFyZ2VfcSkgeworICAgICAgICAgICAgY29uc3QgaW50IGRwMGwgPSBsYXJn ZV9wID8gKChkcDAgKyBhYnMoUDUgLSAyICogUDQgKyBQMykgKyAxKSA+PiAxKSA6IGRwMDsKKyAg ICAgICAgICAgIGNvbnN0IGludCBkcTBsID0gbGFyZ2VfcSA/ICgoZHEwICsgYWJzKFE1IC0gMiAq IFE0ICsgUTMpICsgMSkgPj4gMSkgOiBkcTA7CisgICAgICAgICAgICBjb25zdCBpbnQgZHAzbCA9 IGxhcmdlX3AgPyAoKGRwMyArIGFicyhUUDUgLSAyICogVFA0ICsgVFAzKSArIDEpID4+IDEpIDog ZHAzOworICAgICAgICAgICAgY29uc3QgaW50IGRxM2wgPSBsYXJnZV9xID8gKChkcTMgKyBhYnMo VFE1IC0gMiAqIFRRNCArIFRRMykgKyAxKSA+PiAxKSA6IGRxMzsKKyAgICAgICAgICAgIGNvbnN0 IGludCBkMGwgPSBkcDBsICsgZHEwbDsKKyAgICAgICAgICAgIGNvbnN0IGludCBkM2wgPSBkcDNs ICsgZHEzbDsKKyAgICAgICAgICAgIGNvbnN0IGludCBiZXRhNTMgPSBiZXRhICogMyA+PiA1Owor ICAgICAgICAgICAgY29uc3QgaW50IGJldGFfNCA9IGJldGEgPj4gNDsKKyAgICAgICAgICAgIG1h eF9sZW5fcCA9IGxhcmdlX3AgPyBtYXhfbGVuX3AgOiAzOworICAgICAgICAgICAgbWF4X2xlbl9x ID0gbGFyZ2VfcSA/IG1heF9sZW5fcSA6IDM7CisKKyAgICAgICAgICAgIGlmIChkMGwgKyBkM2wg PCBiZXRhKSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHNwMGwgPSBhYnMoUDMgLSBQMCkg KyAobWF4X2xlbl9wID09IDcgPyBhYnMoUDcgLSBQNiAtIFA1ICsgUDQpIDogMCk7CisgICAgICAg ICAgICAgICAgY29uc3QgaW50IHNxMGwgPSBhYnMoUTAgLSBRMykgKyAobWF4X2xlbl9xID09IDcg PyBhYnMoUTQgLSBRNSAtIFE2ICsgUTcpIDogMCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50 IHNwM2wgPSBhYnMoVFAzIC0gVFAwKSArIChtYXhfbGVuX3AgPT0gNyA/IGFicyhUUDcgLSBUUDYg LSBUUDUgKyBUUDQpIDogMCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHNxM2wgPSBhYnMo VFEwIC0gVFEzKSArIChtYXhfbGVuX3EgPT0gNyA/IGFicyhUUTQgLSBUUTUgLSBUUTYgKyBUUTcp IDogMCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHNwMCA9IGxhcmdlX3AgPyAoKHNwMGwg KyBhYnMoUDMgLSAgIFAobWF4X2xlbl9wKSkgKyAxKSA+PiAxKSA6IHNwMGw7CisgICAgICAgICAg ICAgICAgY29uc3QgaW50IHNwMyA9IGxhcmdlX3AgPyAoKHNwM2wgKyBhYnMoVFAzIC0gVFAobWF4 X2xlbl9wKSkgKyAxKSA+PiAxKSA6IHNwM2w7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHNx MCA9IGxhcmdlX3EgPyAoKHNxMGwgKyBhYnMoUTMgLSAgIFEobWF4X2xlbl9xKSkgKyAxKSA+PiAx KSA6IHNxMGw7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHNxMyA9IGxhcmdlX3EgPyAoKHNx M2wgKyBhYnMoVFEzIC0gVFEobWF4X2xlbl9xKSkgKyAxKSA+PiAxKSA6IHNxM2w7CisgICAgICAg ICAgICAgICAgaWYgKHNwMCArIHNxMCA8IGJldGE1MyAmJiBhYnMoUDAgLSBRMCkgPCB0YzI1ICYm CisgICAgICAgICAgICAgICAgICAgIHNwMyArIHNxMyA8IGJldGE1MyAmJiBhYnMoVFAwIC0gVFEw KSA8IHRjMjUgJiYKKyAgICAgICAgICAgICAgICAgICAgKGQwbCA8PCAxKSA8IGJldGFfNCAmJiAo ZDNsIDw8IDEpIDwgYmV0YV80KSB7CisgICAgICAgICAgICAgICAgICAgIEZVTkMobG9vcF9maWx0 ZXJfbHVtYV9sYXJnZSkocGl4LCB4c3RyaWRlLCB5c3RyaWRlLCB0Yywgbm9fcCwgbm9fcSwgbWF4 X2xlbl9wLCBtYXhfbGVuX3EpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGQwICsg ZDMgPCBiZXRhKSB7CisgICAgICAgICAgICBpZiAobWF4X2xlbl9wID4gMiAmJiBtYXhfbGVuX3Eg PiAyICYmCisgICAgICAgICAgICAgICAgYWJzKFAzIC0gUDApICsgYWJzKFEzIC0gUTApIDwgYmV0 YV8zICYmIGFicyhQMCAtIFEwKSA8IHRjMjUgJiYKKyAgICAgICAgICAgICAgICBhYnMoVFAzIC0g VFAwKSArIGFicyhUUTMgLSBUUTApIDwgYmV0YV8zICYmIGFicyhUUDAgLSBUUTApIDwgdGMyNSAm JgorICAgICAgICAgICAgICAgIChkMCA8PCAxKSA8IGJldGFfMiAmJiAoZDMgPDwgMSkgPCBiZXRh XzIpIHsKKyAgICAgICAgICAgICAgICBGVU5DKGxvb3BfZmlsdGVyX2x1bWFfc3Ryb25nKShwaXgs IHhzdHJpZGUsIHlzdHJpZGUsIHRjLCBub19wLCBub19xKTsKKyAgICAgICAgICAgIH0gZWxzZSB7 IC8vIHdlYWsgZmlsdGVyaW5nCisgICAgICAgICAgICAgICAgaW50IG5kX3AgPSAxOworICAgICAg ICAgICAgICAgIGludCBuZF9xID0gMTsKKyAgICAgICAgICAgICAgICBpZiAobWF4X2xlbl9wID4g MSAmJiBtYXhfbGVuX3EgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkcDAgKyBkcDMg PCAoKGJldGEgKyAoYmV0YSA+PiAxKSkgPj4gMykpCisgICAgICAgICAgICAgICAgICAgICAgICBu ZF9wID0gMjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRxMCArIGRxMyA8ICgoYmV0YSArIChi ZXRhID4+IDEpKSA+PiAzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5kX3EgPSAyOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGVU5DKGxvb3BfZmlsdGVyX2x1bWFfd2Vh aykocGl4LCB4c3RyaWRlLCB5c3RyaWRlLCB0YywgYmV0YSwgbm9fcCwgbm9fcSwgbmRfcCwgbmRf cSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZV TkMobG9vcF9maWx0ZXJfY2hyb21hX3N0cm9uZykocGl4ZWwgKnBpeCwgY29uc3QgcHRyZGlmZl90 IHhzdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlLAorICAgIGNvbnN0IGludCBzaXplLCBj b25zdCBpbnQzMl90IHRjLCBjb25zdCB1aW50OF90IG5vX3AsIGNvbnN0IHVpbnQ4X3Qgbm9fcSkK K3sKKyAgICBmb3IgKGludCBkID0gMDsgZCA8IHNpemU7IGQrKykgeworICAgICAgICBjb25zdCBp bnQgcDMgPSBQMzsKKyAgICAgICAgY29uc3QgaW50IHAyID0gUDI7CisgICAgICAgIGNvbnN0IGlu dCBwMSA9IFAxOworICAgICAgICBjb25zdCBpbnQgcDAgPSBQMDsKKyAgICAgICAgY29uc3QgaW50 IHEwID0gUTA7CisgICAgICAgIGNvbnN0IGludCBxMSA9IFExOworICAgICAgICBjb25zdCBpbnQg cTIgPSBRMjsKKyAgICAgICAgY29uc3QgaW50IHEzID0gUTM7CisgICAgICAgIGlmICghbm9fcCkg eworICAgICAgICAgICAgUDAgPSBhdl9jbGlwKChwMyArIHAyICsgcDEgKyAyICogcDAgKyBxMCAr IHExICsgcTIgKyA0KSA+PiAzLCBwMCAtIHRjLCBwMCArIHRjKTsKKyAgICAgICAgICAgIFAxID0g YXZfY2xpcCgoMiAqIHAzICsgcDIgKyAyICogcDEgKyBwMCArIHEwICsgcTEgKyA0KSA+PiAzLCBw MSAtIHRjLCBwMSArIHRjKTsKKyAgICAgICAgICAgIFAyID0gYXZfY2xpcCgoMyAqIHAzICsgMiAq IHAyICsgcDEgKyBwMCArIHEwICsgNCkgPj4gMywgcDIgLSB0YywgcDIgKyB0YyApOworICAgICAg ICB9CisgICAgICAgIGlmICghbm9fcSkgeworICAgICAgICAgICAgUTAgPSBhdl9jbGlwKChwMiAr IHAxICsgcDAgKyAyICogcTAgKyBxMSArIHEyICsgcTMgKyA0KSA+PiAzLCBxMCAtIHRjLCBxMCAr IHRjKTsKKyAgICAgICAgICAgIFExID0gYXZfY2xpcCgocDEgKyBwMCArIHEwICsgMiAqIHExICsg cTIgKyAyICogcTMgKyA0KSA+PiAzLCBxMSAtIHRjLCBxMSArIHRjKTsKKyAgICAgICAgICAgIFEy ID0gYXZfY2xpcCgocDAgKyBxMCArIHExICsgMiAqIHEyICsgMyAqIHEzICsgNCkgPj4gMywgcTIg LSB0YywgcTIgKyB0Yyk7CisgICAgICAgIH0KKyAgICAgICAgcGl4ICs9IHlzdHJpZGU7CisgICAg fQorfQorCitzdGF0aWMgdm9pZCBGVU5DKGxvb3BfZmlsdGVyX2Nocm9tYV9zdHJvbmdfb25lX3Np ZGUpKHBpeGVsICpwaXgsIGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRlLCBjb25zdCBwdHJkaWZmX3Qg eXN0cmlkZSwKKyAgICBjb25zdCBpbnQgc2l6ZSwgY29uc3QgaW50MzJfdCB0YywgY29uc3QgdWlu dDhfdCBub19wLCBjb25zdCB1aW50OF90IG5vX3EpCit7CisgICAgZm9yIChpbnQgZCA9IDA7IGQg PCBzaXplOyBkKyspIHsKKyAgICAgICAgY29uc3QgaW50IHAxID0gUDE7CisgICAgICAgIGNvbnN0 IGludCBwMCA9IFAwOworICAgICAgICBjb25zdCBpbnQgcTAgPSBRMDsKKyAgICAgICAgY29uc3Qg aW50IHExID0gUTE7CisgICAgICAgIGNvbnN0IGludCBxMiA9IFEyOworICAgICAgICBjb25zdCBp bnQgcTMgPSBRMzsKKyAgICAgICAgaWYgKCFub19wKSB7CisgICAgICAgICAgICBQMCA9IGF2X2Ns aXAoKDMgKiBwMSArIDIgKiBwMCArIHEwICsgcTEgKyBxMiArIDQpID4+IDMsIHAwIC0gdGMsIHAw ICsgdGMpOworICAgICAgICB9CisgICAgICAgIGlmICghbm9fcSkgeworICAgICAgICAgICAgUTAg PSBhdl9jbGlwKCgyICogcDEgKyBwMCArIDIgKiBxMCArIHExICsgcTIgKyBxMyArIDQpID4+IDMs IHEwIC0gdGMsIHEwICsgdGMpOworICAgICAgICAgICAgUTEgPSBhdl9jbGlwKChwMSArIHAwICsg cTAgKyAyICogcTEgKyBxMiArIDIgKiBxMyArIDQpID4+IDMsIHExIC0gdGMsIHExICsgdGMpOwor ICAgICAgICAgICAgUTIgPSBhdl9jbGlwKChwMCArIHEwICsgcTEgKyAyICogcTIgKyAzICogcTMg KyA0KSA+PiAzLCBxMiAtIHRjLCBxMiArIHRjKTsKKyAgICAgICAgfQorICAgICAgICBwaXggKz0g eXN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMobG9vcF9maWx0ZXJfY2hyb21h X3dlYWspKHBpeGVsICpwaXgsIGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRlLCBjb25zdCBwdHJkaWZm X3QgeXN0cmlkZSwKKyAgICBjb25zdCBpbnQgc2l6ZSwgY29uc3QgaW50MzJfdCB0YywgY29uc3Qg dWludDhfdCBub19wLCBjb25zdCB1aW50OF90IG5vX3EpCit7CisgICAgZm9yIChpbnQgZCA9IDA7 IGQgPCBzaXplOyBkKyspIHsKKyAgICAgICAgaW50IGRlbHRhMDsKKyAgICAgICAgY29uc3QgaW50 IHAxID0gUDE7CisgICAgICAgIGNvbnN0IGludCBwMCA9IFAwOworICAgICAgICBjb25zdCBpbnQg cTAgPSBRMDsKKyAgICAgICAgY29uc3QgaW50IHExID0gUTE7CisgICAgICAgIGRlbHRhMCA9IGF2 X2NsaXAoKCgocTAgLSBwMCkgKiA0KSArIHAxIC0gcTEgKyA0KSA+PiAzLCAtdGMsIHRjKTsKKyAg ICAgICAgaWYgKCFub19wKQorICAgICAgICAgICAgUDAgPSBhdl9jbGlwX3BpeGVsKHAwICsgZGVs dGEwKTsKKyAgICAgICAgaWYgKCFub19xKQorICAgICAgICAgICAgUTAgPSBhdl9jbGlwX3BpeGVs KHEwIC0gZGVsdGEwKTsKKyAgICAgICAgcGl4ICs9IHlzdHJpZGU7CisgICAgfQorfQorCitzdGF0 aWMgdm9pZCBGVU5DKHZ2Y19sb29wX2ZpbHRlcl9jaHJvbWEpKHVpbnQ4X3QgKl9waXgsIGNvbnN0 IHB0cmRpZmZfdCAgX3hzdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBfeXN0cmlkZSwKKyAgICBjb25z dCBpbnQzMl90ICpfYmV0YSwgY29uc3QgaW50MzJfdCAqX3RjLCBjb25zdCB1aW50OF90ICpfbm9f cCwgY29uc3QgdWludDhfdCAqX25vX3EsCisgICAgY29uc3QgdWludDhfdCAqX21heF9sZW5fcCwg Y29uc3QgdWludDhfdCAqX21heF9sZW5fcSwgY29uc3QgaW50IHNoaWZ0KQoreworICAgIGNvbnN0 IHB0cmRpZmZfdCB4c3RyaWRlID0gX3hzdHJpZGUgLyBzaXplb2YocGl4ZWwpOworICAgIGNvbnN0 IHB0cmRpZmZfdCB5c3RyaWRlID0gX3lzdHJpZGUgLyBzaXplb2YocGl4ZWwpOworICAgIGNvbnN0 IGludCBzaXplICAgICAgICAgID0gc2hpZnQgPyAyIDogNDsKKyAgICBjb25zdCBpbnQgZW5kICAg ICAgICAgICA9IDggLyBzaXplOyAgICAgICAgIC8vIDggc2FtcGxlcyBhIGxvb3AKKworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgZW5kOyBpKyspIHsKKyAgICAgICAgcGl4ZWwgKnBpeCAgICAgICAg ICA9IChwaXhlbCAqKV9waXggKyBpICogc2l6ZSAqIHlzdHJpZGU7CisgICAgICAgIGNvbnN0IHVp bnQ4X3Qgbm9fcCAgPSBfbm9fcFtpXTsKKyAgICAgICAgY29uc3QgdWludDhfdCBub19xICA9IF9u b19xW2ldOworICAgICAgICBjb25zdCBpbnQgYmV0YSAgICAgID0gX2JldGFbaV0gPDwgKEJJVF9E RVBUSCAtIDgpOworICAgICAgICBjb25zdCBpbnQgYmV0YV8zICAgID0gYmV0YSA+PiAzOworICAg ICAgICBjb25zdCBpbnQgYmV0YV8yICAgID0gYmV0YSA+PiAyOworCisjaWYgQklUX0RFUFRIIDwg MTAKKyAgICAgICAgY29uc3QgaW50IHRjID0gKF90Y1tpXSArICgxIDw8ICg5IC0gQklUX0RFUFRI KSkpID4+ICgxMCAtIEJJVF9ERVBUSCk7CisjZWxzZQorICAgICAgICBjb25zdCBpbnQgdGMgPSBf dGNbaV0gPDwgKEJJVF9ERVBUSCAtIDEwKTsKKyNlbmRpZgorICAgICAgICBjb25zdCBpbnQgdGMy NSAgICAgID0gKCh0YyAqIDUgKyAxKSA+PiAxKTsKKworICAgICAgICB1aW50OF90IG1heF9sZW5f cCAgID0gX21heF9sZW5fcFtpXTsKKyAgICAgICAgdWludDhfdCBtYXhfbGVuX3EgICA9IF9tYXhf bGVuX3FbaV07CisKKyAgICAgICAgaWYgKCFtYXhfbGVuX3AgfHwgIW1heF9sZW5fcSB8fCAhdGMp CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAobWF4X2xlbl9xID09IDMpewor ICAgICAgICAgICAgY29uc3QgaW50IHAxbiAgPSBzaGlmdCA/IEZQMSA6IFRQMTsKKyAgICAgICAg ICAgIGNvbnN0IGludCBwMm4gPSBtYXhfbGVuX3AgPT0gMSA/IHAxbiA6IChzaGlmdCA/IEZQMiA6 IFRQMik7CisgICAgICAgICAgICBjb25zdCBpbnQgcDBuICA9IHNoaWZ0ID8gRlAwIDogVFAwOwor ICAgICAgICAgICAgY29uc3QgaW50IHEwbiAgPSBzaGlmdCA/IEZRMCA6IFRRMDsKKyAgICAgICAg ICAgIGNvbnN0IGludCBxMW4gID0gc2hpZnQgPyBGUTEgOiBUUTE7CisgICAgICAgICAgICBjb25z dCBpbnQgcTJuICA9IHNoaWZ0ID8gRlEyIDogVFEyOworICAgICAgICAgICAgY29uc3QgaW50IHAz ICAgPSBtYXhfbGVuX3AgPT0gMSA/IFAxIDogUDM7CisgICAgICAgICAgICBjb25zdCBpbnQgcDIg ICA9IG1heF9sZW5fcCA9PSAxID8gUDEgOiBQMjsKKyAgICAgICAgICAgIGNvbnN0IGludCBwMSAg ID0gUDE7CisgICAgICAgICAgICBjb25zdCBpbnQgcDAgICA9IFAwOworICAgICAgICAgICAgY29u c3QgaW50IGRwMCAgPSBhYnMocDIgLSAyICogcDEgKyBwMCk7CisgICAgICAgICAgICBjb25zdCBp bnQgZHEwICA9IGFicyhRMiAtIDIgKiBRMSArIFEwKTsKKworICAgICAgICAgICAgY29uc3QgaW50 IGRwMSA9IGFicyhwMm4gLSAyICogcDFuICsgcDBuKTsKKyAgICAgICAgICAgIGNvbnN0IGludCBk cTEgPSBhYnMocTJuIC0gMiAqIHExbiArIHEwbik7CisgICAgICAgICAgICBjb25zdCBpbnQgZDAg ID0gZHAwICsgZHEwOworICAgICAgICAgICAgY29uc3QgaW50IGQxICA9IGRwMSArIGRxMTsKKwor ICAgICAgICAgICAgaWYgKGQwICsgZDEgPCBiZXRhKSB7CisgICAgICAgICAgICAgICAgY29uc3Qg aW50IHAzbiA9IG1heF9sZW5fcCA9PSAxID8gcDFuIDogKHNoaWZ0ID8gRlAzIDogVFAzKTsKKyAg ICAgICAgICAgICAgICBjb25zdCBpbnQgcTNuID0gc2hpZnQgPyBGUTMgOiBUUTM7CisgICAgICAg ICAgICAgICAgY29uc3QgaW50IGRzYW0wID0gKGQwIDw8IDEpIDwgYmV0YV8yICYmIChhYnMocDMg LSBwMCkgKyBhYnMoUTAgLSBRMykgICAgIDwgYmV0YV8zKSAmJgorICAgICAgICAgICAgICAgICAg ICBhYnMocDAgLSBRMCkgICA8IHRjMjU7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGRzYW0x ID0gKGQxIDw8IDEpIDwgYmV0YV8yICYmIChhYnMocDNuIC0gcDBuKSArIGFicyhxMG4gLSBxM24p IDwgYmV0YV8zKSAmJgorICAgICAgICAgICAgICAgICAgICBhYnMocDBuIC0gcTBuKSA8IHRjMjU7 CisgICAgICAgICAgICAgICAgaWYgKCFkc2FtMCB8fCAhZHNhbTEpCisgICAgICAgICAgICAgICAg ICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDE7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKworICAgICAgICBpZiAobWF4X2xlbl9wID09IDMgJiYgbWF4X2xlbl9xID09IDMp CisgICAgICAgICAgICBGVU5DKGxvb3BfZmlsdGVyX2Nocm9tYV9zdHJvbmcpKHBpeCwgeHN0cmlk ZSwgeXN0cmlkZSwgc2l6ZSwgdGMsIG5vX3AsIG5vX3EpOworICAgICAgICBlbHNlIGlmIChtYXhf bGVuX3EgPT0gMykKKyAgICAgICAgICAgIEZVTkMobG9vcF9maWx0ZXJfY2hyb21hX3N0cm9uZ19v bmVfc2lkZSkocGl4LCB4c3RyaWRlLCB5c3RyaWRlLCBzaXplLCB0Yywgbm9fcCwgbm9fcSk7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICAgIEZVTkMobG9vcF9maWx0ZXJfY2hyb21hX3dlYWspKHBp eCwgeHN0cmlkZSwgeXN0cmlkZSwgc2l6ZSwgdGMsIG5vX3AsIG5vX3EpOworICAgIH0KK30KKwor c3RhdGljIHZvaWQgRlVOQyh2dmNfaF9sb29wX2ZpbHRlcl9jaHJvbWEpKHVpbnQ4X3QgKnBpeCwg cHRyZGlmZl90IHN0cmlkZSwKKyAgICBjb25zdCBpbnQzMl90ICpiZXRhLCBjb25zdCBpbnQzMl90 ICp0YywgY29uc3QgdWludDhfdCAqbm9fcCwgY29uc3QgdWludDhfdCAqbm9fcSwKKyAgICBjb25z dCB1aW50OF90ICptYXhfbGVuX3AsIGNvbnN0IHVpbnQ4X3QgKm1heF9sZW5fcSwgaW50IHNoaWZ0 KQoreworICAgIEZVTkModnZjX2xvb3BfZmlsdGVyX2Nocm9tYSkocGl4LCBzdHJpZGUsIHNpemVv ZihwaXhlbCksIGJldGEsIHRjLAorICAgICAgICBub19wLCBub19xLCBtYXhfbGVuX3AsIG1heF9s ZW5fcSwgc2hpZnQpOworfQorCitzdGF0aWMgdm9pZCBGVU5DKHZ2Y192X2xvb3BfZmlsdGVyX2No cm9tYSkodWludDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3RyaWRlLAorICAgIGNvbnN0IGludDMyX3Qg KmJldGEsIGNvbnN0IGludDMyX3QgKnRjLCBjb25zdCB1aW50OF90ICpub19wLCBjb25zdCB1aW50 OF90ICpub19xLAorICAgIGNvbnN0IHVpbnQ4X3QgKm1heF9sZW5fcCwgY29uc3QgdWludDhfdCAq bWF4X2xlbl9xLCBpbnQgc2hpZnQpCit7CisgICAgRlVOQyh2dmNfbG9vcF9maWx0ZXJfY2hyb21h KShwaXgsIHNpemVvZihwaXhlbCksIHN0cmlkZSwgYmV0YSwgdGMsCisgICAgICAgIG5vX3AsIG5v X3EsICBtYXhfbGVuX3AsIG1heF9sZW5fcSwgc2hpZnQpOworfQorCitzdGF0aWMgdm9pZCBGVU5D KHZ2Y19oX2xvb3BfZmlsdGVyX2x1bWEpKHVpbnQ4X3QgKnBpeCwgcHRyZGlmZl90IHN0cmlkZSwK KyAgICBjb25zdCBpbnQzMl90ICpiZXRhLCBjb25zdCBpbnQzMl90ICp0YywgY29uc3QgdWludDhf dCAqbm9fcCwgY29uc3QgdWludDhfdCAqbm9fcSwKKyAgICBjb25zdCB1aW50OF90ICptYXhfbGVu X3AsIGNvbnN0IHVpbnQ4X3QgKm1heF9sZW5fcSwgaW50IGhvcl9jdHVfZWRnZSkKK3sKKyAgICBG VU5DKHZ2Y19sb29wX2ZpbHRlcl9sdW1hKShwaXgsIHN0cmlkZSwgc2l6ZW9mKHBpeGVsKSwgYmV0 YSwgdGMsCisgICAgICAgIG5vX3AsIG5vX3EsIG1heF9sZW5fcCwgbWF4X2xlbl9xLCBob3JfY3R1 X2VkZ2UpOworfQorCitzdGF0aWMgdm9pZCBGVU5DKHZ2Y192X2xvb3BfZmlsdGVyX2x1bWEpKHVp bnQ4X3QgKnBpeCwgcHRyZGlmZl90IHN0cmlkZSwKKyAgICBjb25zdCBpbnQzMl90ICpiZXRhLCBj b25zdCBpbnQzMl90ICp0YywgY29uc3QgdWludDhfdCAqbm9fcCwgY29uc3QgdWludDhfdCAqbm9f cSwKKyAgICBjb25zdCB1aW50OF90ICptYXhfbGVuX3AsIGNvbnN0IHVpbnQ4X3QgKm1heF9sZW5f cSwgaW50IGhvcl9jdHVfZWRnZSkKK3sKKyAgICBGVU5DKHZ2Y19sb29wX2ZpbHRlcl9sdW1hKShw aXgsIHNpemVvZihwaXhlbCksIHN0cmlkZSwgYmV0YSwgdGMsCisgICAgICAgIG5vX3AsIG5vX3Es IG1heF9sZW5fcCwgbWF4X2xlbl9xLCBob3JfY3R1X2VkZ2UpOworfQorCitzdGF0aWMgaW50IEZV TkModnZjX2xvb3BfbGFkZl9sZXZlbCkoY29uc3QgdWludDhfdCAqX3BpeCwgY29uc3QgcHRyZGlm Zl90IF94c3RyaWRlLCBjb25zdCBwdHJkaWZmX3QgX3lzdHJpZGUpCit7CisgICAgY29uc3QgcGl4 ZWwgKnBpeCAgICAgICAgPSAocGl4ZWwgKilfcGl4OworICAgIGNvbnN0IHB0cmRpZmZfdCB4c3Ry aWRlID0gX3hzdHJpZGUgLyBzaXplb2YocGl4ZWwpOworICAgIGNvbnN0IHB0cmRpZmZfdCB5c3Ry aWRlID0gX3lzdHJpZGUgLyBzaXplb2YocGl4ZWwpOworICAgIHJldHVybiAoUDAgKyBUUDAgKyBR MCArIFRRMCkgPj4gMjsKK30KKworc3RhdGljIGludCBGVU5DKHZ2Y19oX2xvb3BfbGFkZl9sZXZl bCkoY29uc3QgdWludDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIHJldHVybiBG VU5DKHZ2Y19sb29wX2xhZGZfbGV2ZWwpKHBpeCwgc3RyaWRlLCBzaXplb2YocGl4ZWwpKTsKK30K Kworc3RhdGljIGludCBGVU5DKHZ2Y192X2xvb3BfbGFkZl9sZXZlbCkoY29uc3QgdWludDhfdCAq cGl4LCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIHJldHVybiBGVU5DKHZ2Y19sb29wX2xhZGZf bGV2ZWwpKHBpeCwgc2l6ZW9mKHBpeGVsKSwgc3RyaWRlKTsKK30KKworI3VuZGVmIFA3CisjdW5k ZWYgUDYKKyN1bmRlZiBQNQorI3VuZGVmIFA0CisjdW5kZWYgUDMKKyN1bmRlZiBQMgorI3VuZGVm IFAxCisjdW5kZWYgUDAKKyN1bmRlZiBRMAorI3VuZGVmIFExCisjdW5kZWYgUTIKKyN1bmRlZiBR MworI3VuZGVmIFE0CisjdW5kZWYgUTUKKyN1bmRlZiBRNgorI3VuZGVmIFE3CisKKyN1bmRlZiBU UDcKKyN1bmRlZiBUUDYKKyN1bmRlZiBUUDUKKyN1bmRlZiBUUDQKKyN1bmRlZiBUUDMKKyN1bmRl ZiBUUDIKKyN1bmRlZiBUUDEKKyN1bmRlZiBUUDAKKyN1bmRlZiBUUTAKKyN1bmRlZiBUUTEKKyN1 bmRlZiBUUTIKKyN1bmRlZiBUUTMKKyN1bmRlZiBUUTQKKyN1bmRlZiBUUTUKKyN1bmRlZiBUUTYK KyN1bmRlZiBUUTcKKworc3RhdGljIHZvaWQgRlVOQyhmZl92dmNfbG1jc19kc3BfaW5pdCkoVlZD TE1DU0RTUENvbnRleHQgKmNvbnN0IGxtY3MpCit7CisgICAgbG1jcy0+ZmlsdGVyID0gRlVOQyhs bWNzX2ZpbHRlcl9sdW1hKTsKK30KKworc3RhdGljIHZvaWQgRlVOQyhmZl92dmNfbGZfZHNwX2lu aXQpKFZWQ0xGRFNQQ29udGV4dCAqY29uc3QgbGYpCit7CisgICAgbGYtPmxhZGZfbGV2ZWxbMF0g ICAgICA9IEZVTkModnZjX2hfbG9vcF9sYWRmX2xldmVsKTsKKyAgICBsZi0+bGFkZl9sZXZlbFsx XSAgICAgID0gRlVOQyh2dmNfdl9sb29wX2xhZGZfbGV2ZWwpOworICAgIGxmLT5maWx0ZXJfbHVt YVswXSAgICAgPSBGVU5DKHZ2Y19oX2xvb3BfZmlsdGVyX2x1bWEpOworICAgIGxmLT5maWx0ZXJf bHVtYVsxXSAgICAgPSBGVU5DKHZ2Y192X2xvb3BfZmlsdGVyX2x1bWEpOworICAgIGxmLT5maWx0 ZXJfY2hyb21hWzBdICAgPSBGVU5DKHZ2Y19oX2xvb3BfZmlsdGVyX2Nocm9tYSk7CisgICAgbGYt PmZpbHRlcl9jaHJvbWFbMV0gICA9IEZVTkModnZjX3ZfbG9vcF9maWx0ZXJfY2hyb21hKTsKK30K Kworc3RhdGljIHZvaWQgRlVOQyhmZl92dmNfc2FvX2RzcF9pbml0KShWVkNTQU9EU1BDb250ZXh0 ICpjb25zdCBzYW8pCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhz YW8tPmJhbmRfZmlsdGVyKTsgaSsrKQorICAgICAgICBzYW8tPmJhbmRfZmlsdGVyW2ldID0gRlVO QyhzYW9fYmFuZF9maWx0ZXIpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxF TVMoc2FvLT5lZGdlX2ZpbHRlcik7IGkrKykKKyAgICAgICAgc2FvLT5lZGdlX2ZpbHRlcltpXSA9 IEZVTkMoc2FvX2VkZ2VfZmlsdGVyKTsKKyAgICBzYW8tPmVkZ2VfcmVzdG9yZVswXSA9IEZVTkMo c2FvX2VkZ2VfcmVzdG9yZV8wKTsKKyAgICBzYW8tPmVkZ2VfcmVzdG9yZVsxXSA9IEZVTkMoc2Fv X2VkZ2VfcmVzdG9yZV8xKTsKK30KKworc3RhdGljIHZvaWQgRlVOQyhmZl92dmNfYWxmX2RzcF9p bml0KShWVkNBTEZEU1BDb250ZXh0ICpjb25zdCBhbGYpCit7CisgICAgYWxmLT5maWx0ZXJbTFVN QV0gICAgPSBGVU5DKGFsZl9maWx0ZXJfbHVtYSk7CisgICAgYWxmLT5maWx0ZXJbQ0hST01BXSAg PSBGVU5DKGFsZl9maWx0ZXJfY2hyb21hKTsKKyAgICBhbGYtPmZpbHRlcl9jYyAgICAgICA9IEZV TkMoYWxmX2ZpbHRlcl9jYyk7CisgICAgYWxmLT5jbGFzc2lmeSAgICAgICAgPSBGVU5DKGFsZl9j bGFzc2lmeSk7CisgICAgYWxmLT5yZWNvbl9jb2VmZl9hbmRfY2xpcCA9IEZVTkMoYWxmX3JlY29u X2NvZWZmX2FuZF9jbGlwKTsKK30KLS0gCjIuMjUuMQoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWct ZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1w ZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1w ZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=