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 6F8D6484B1 for ; Tue, 5 Dec 2023 14:47:59 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EA00368CF59; Tue, 5 Dec 2023 16:46:17 +0200 (EET) Received: from APC01-TYZ-obe.outbound.protection.outlook.com (mail-tyzapc01olkn2032.outbound.protection.outlook.com [40.92.107.32]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 44ABD68CF29 for ; Tue, 5 Dec 2023 16:46:10 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jyRiKPV752pFf+jDe4bK0AqB1LhH0m+fbrBBo8c38aBHQUg5y3Fi8P76KixRpP4ineJO5/osuT+wcMuvSZj4y5EKHSRPML/0i1rDDyn/dR7cgPvh4cEXpZTKn/rbSKkIyfgkHWPRufpVv7eIE0Fk3A39qAgpTUPxDuGE47OXLJ2sP6Vy+MWU8vZ+BXW858MBDhnlF9IsdpZuqIW5hSfiqmvvJFIJduI8YRh5d+YJOE+jaw8lrgk27nQpmknNLG9KilE8+/6o3WaYjE0Rk+VmJ92MhmgD6skk0vDBcIbvaUkc/brIv97ejqoqfSMrynkmRI0OWgILpf1fA9OuHhH6yw== 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=hzWUHfuB/dUmTX33wmSHApbnRJIrt4Q1pNYRiDFqt70=; b=VbH35ipvbuUV/gkqkzVUzMCqCjr5YgRsrCj9vDve7T63I8/R8biNJAuxqPTt/nsN4idMYjTNDGqzpoEBY9ETy+CZjipgtdkLcmM6lr+8+93WsjOl3t1T/yMyYxGIyWcLINQ2hKA54uvJ8s5auTGpKHJOHafKMHlDGcDbL/6jCIs64AAlOLELZSvnRV46TE2FdTXp480EWGN7/0NOk5XfhN6Og6RzD2BPICfyNH0TfG87RSXs0NJ9CYfeQwMb8xjUYfL0pGlV3ppaemzgT9Od8ClmxAM0dnOX+31MHA064wWzvMx2Bg6/r8YVzR82jBWKmgmCoEYKSxnczCcM11fxVg== 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=hzWUHfuB/dUmTX33wmSHApbnRJIrt4Q1pNYRiDFqt70=; b=twChGnn3s+TU/ovoL2VAGM2EaY1hUAEqmuBIk9h/roe9+Ue2Ko5hA/UM6Q9x2R2tnTGA4cNwZTaaXpe7z8snPy5Cbt11zNU/ximzW9i+PhD3h8zEzFUKLp8tHkuMbTyc6pTaii1SRgLJhQH9UoX5ubYKfKiMDHDqWfefUQ6q6QCug09xrIymhSOU5gGxVmUTqcaOJFk2DsDuL9ogC1Ueu0HUV+U1lG5agIzl1olL/VVaTCBq0Cl4AewgpB/LmKbGTiqiWlIL+GhsdmDEwI5nXNwW3yx++wacWn3jHZND8cEAfCNjbqaeJVk7VxYZmHHA9te5w8O49vkALki6r4bRKQ== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by JH0PR06MB6294.apcprd06.prod.outlook.com (2603:1096:990:14::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.33; Tue, 5 Dec 2023 14:45:55 +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.7046.034; Tue, 5 Dec 2023 14:45:55 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Dec 2023 22:45:15 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231205144519.7334-1-nuomi2021@gmail.com> References: <20231205144519.7334-1-nuomi2021@gmail.com> X-TMN: [mFEptbKiBVRgr6PlpsiVYfxP10vDh8f+] X-ClientProxiedBy: SG3P274CA0015.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::27) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20231205144519.7334-10-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|JH0PR06MB6294:EE_ X-MS-Office365-Filtering-Correlation-Id: 5d02cfd9-c289-44c3-4217-08dbf5a0e28b X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LYxdK7IewrlX4SFNg6+e9Wm3SOdbNY0ji4abjPQtnT8iSFSx/1nSE2jnpqlZNKClMHK2bCAQED5zz8kEUBwZwDwxCscVv8WB8uTG47K+/3ID0Ip6VEoOCswNtp2PJphvdxGZ558eu+UTgDRYydoe1XDgvfKcbo9ENLg6cYrMm0cYfT9lvlUW3OXnrEEGfQGTAvd3QHn+H/mO/a3nkr2ZHlUbW8vM10UzC7vJWmGEWaYsJmrA4hfZc2koT82xEQtNEe3YiNB+ly5J/dB+WFRhHoDLlkk0yDJgvSkGaIshwW7rkkPy81RBdY1wM/yOFE+cVpacsXbpcV1zEuNpwuJ2tYfCamMxTjItzyn67H5KZJONEFbb62qpJNt36tfAxv/vXtNQTXmo0aLNIUhrFXyqWXkCR2YldwP++oJQHFu2Dfmv2rwwJC3AmTWGdBI5uEe+lM/vS1ZBS8evOMDwvYWy83+ycECCdtiD9EXPbr3htI4GUcHGEQb5d2j53R5GfB9IXo1gNuKd+rkq6eQM+tAuuLjRjGLT/kyw9JPWvd287sqfeliJHLLnrP9rMAnr4aDdnfj1j5oJ1jkzQukYRkbS6l3yzzvvflJryB6lRu0JeFg= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OENkVGxsaUJlRlV4RlM2Y3dvUmpSQVlCR2JNeCtleHo3UTFIQm1uSlZkSWNF?= =?utf-8?B?eDhnTGRwRlkycm42T0QxY1BCSVFKRHQ0WnhCaVpnQVA5bW9GTmgxa2FnU3gz?= =?utf-8?B?ZHhyLzFTZ0Z2NWlJOHZpUzVybURSWWlYWDZiWnU2UEdRaVV0MUM2RXpwUXQv?= =?utf-8?B?bEI2QTIrMUswVVpickVXU29UWW44MmxKRXpOa0NtTEZGaEZaTzUxa2JyRDNu?= =?utf-8?B?OVIza3VtSnlwYUlneHNtMzdGdnA0NU91SE1EaE9BZ0QralJIdWFxSWJHdU4v?= =?utf-8?B?V2RURys4a0k3Q0lZc2xsWW1GWVpSOGtjUXNPUE5ub1hUTEtUUXdQRjlpcHFH?= =?utf-8?B?cy9TVFdmSVhPNW9JMnhOdlFnQWhGOTB2M2hQaE91QnJvb2JrLzM2Q1FnVG9i?= =?utf-8?B?bGJZY1Yybmw4OFNxcnQvTDFGODY2anFtVFVVbXVORVNNaWoyZWNJUFVNYTJK?= =?utf-8?B?MlRyaFptRUdOYTI0cjNEN2tWSkkyWEZONzZOV1hQanhIQmptallSZGp6MGhz?= =?utf-8?B?NTdoYTNnZ21uL3ZWMDRYZTBGRGI4aStwczNybThJUWZPZTAwcVdua3NYNXVI?= =?utf-8?B?L0lUZEVkTzB2ZWk2LzZncGR0UXg4ZlN0Y0VIWlR2V21hYWZKOTJLTVZSZVp0?= =?utf-8?B?VkJDNVF6ZVozL2REN0g3Rmc0R3NueGU1ZlNQVFgza1lyaGFUc1M5NHpvUjJJ?= =?utf-8?B?cWxqdjdXZFVrTnBTTGhicEtSOEtsQnhjWXNxYzhoOXdjTkZvb2JSSGtLK2VR?= =?utf-8?B?WXQvd1lYV2tJVGJTbUNBRGcvdXFxUGtiSVkwZmN0dXVNVnZkVFpCTWo1dWJS?= =?utf-8?B?NmUwcXNpL2dPWlB0aTNmQ1IvdUx0Q0wzdUJCN0p4Z3IzZDlORDNDakFvV08x?= =?utf-8?B?SjJQQ1lSK1IzZ3VEOUR0Nm5zcUNiMjdqaWFKOGFtWjdtc2w0Mm9wNGx1NkJo?= =?utf-8?B?aXl3VEkybUM0VGEwcDNJLzdVdXZieFpDRGdrMmV2L1RCeFlJcDhRbTQ0ZEN0?= =?utf-8?B?RGJqenFWanRFNkhNMHg5RjEzUjA0cnQ3NFN2NmQ4ajFSTU4vUEFVMXdHZ0Ft?= =?utf-8?B?b01pcTROaWdVWk9UQmY1emt2ZXVtayt2RlZPb1BRdnZQMmJCc0RPUUZSN1hM?= =?utf-8?B?THJqSkxPUGpKY3NrcTRlRzkyNTRvbU5MZjl3NU5xa3haREJ4WmdRT1hpdjdF?= =?utf-8?B?d0h3eXRsTzdXNHQ2ZjFyZ2pLcGticnZFSVlpTzJ2UWlnaDRkWCtSSXQ0OEhl?= =?utf-8?B?SExyOUVPdGMyOEx0U3RYS3RNU2JrS3B2NjFJVGZPaXVlMUpqdytyaXNJZk1E?= =?utf-8?B?R2tyd3dRdEZ4RlVncVh6WDBhQXRuRHVVSDRmZy84c0lKRzlzYU1zL0NtSzE2?= =?utf-8?B?Uk0rSVB0VmZBU2JWOEtVWWNZQkdmbVNObDd2VDA2czF1ZEFEdlRCWGYrdkVE?= =?utf-8?B?cG4wM0lWaDcvbXNIbWhGSmhvak1CUEU2R0UxR0llQm9OdHIrTEo3N1lYTGIv?= =?utf-8?B?ZE0rM1JSN2VQS2NkNWhFRjh0M2o0TGI0Q216eXY2UVRRVWpFdm44OFk2Ukph?= =?utf-8?B?OE1iM244eEdqRHB1eU1jWll3QUttNFlKaUNBN3FJMkh0aUlCSkJmUTgyQzVE?= =?utf-8?B?UVNkcWZsd0pyS1FlV0pTM3k2MExxclc3WkVVM0tacHFXcDU4b1ZTMVB0WS9i?= =?utf-8?Q?C+ztHjTdgEXcfWfbbr8w?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5d02cfd9-c289-44c3-4217-08dbf5a0e28b X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Dec 2023 14:45:55.0703 (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: JH0PR06MB6294 Subject: [FFmpeg-devel] [PATCH v6 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 LjE5ZGNkYmUzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVy 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 cmNfc3RyaWRlKQoreworICAgIGludCBpOworICAgIGlmIChwaXhlbF9zaGlmdCA9PSAwKSB7Cisg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAgICAgICAgKmRzdCA9 ICpzcmM7CisgICAgICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAgICAgICAgICAgIHNyYyAr PSBzcmNfc3RyaWRlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpID0g MDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgICAgICAgICAqKHVpbnQxNl90ICopZHN0ID0gKih1 aW50MTZfdCAqKXNyYzsKKyAgICAgICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlOworICAgICAgICAg ICAgc3JjICs9IHNyY19zdHJpZGU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IGNvcHlfY3RiX3RvX2h2KFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IHVpbnQ4X3QgKnNyYywK KyAgICBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgY29uc3QgaW50IHgsIGNvbnN0IGludCB5 LCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsCisgICAgY29uc3QgaW50IGNfaWR4 LCBjb25zdCBpbnQgeF9jdGIsIGNvbnN0IGludCB5X2N0YiwgY29uc3QgaW50IHRvcCkKK3sKKyAg ICBpbnQgcHMgPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKyAgICBpbnQgdyAgPSBmYy0+cHMu c3BzLT53aWR0aCA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgIGludCBoICA9IGZj LT5wcy5zcHMtPmhlaWdodCA+PiBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdOworCisgICAgaWYg KHRvcCkgeworICAgICAgICAvKiB0b3AgKi8KKyAgICAgICAgbWVtY3B5KGZjLT50YWIuc2FvX3Bp eGVsX2J1ZmZlcl9oW2NfaWR4XSArICgoKDIgKiB5X2N0YikgKiB3ICsgeCkgPDwgcHMpLAorICAg ICAgICAgICAgc3JjLCB3aWR0aCA8PCBwcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogYm90 dG9tICovCisgICAgICAgIG1lbWNweShmYy0+dGFiLnNhb19waXhlbF9idWZmZXJfaFtjX2lkeF0g KyAoKCgyICogeV9jdGIgKyAxKSAqIHcgKyB4KSA8PCBwcyksCisgICAgICAgICAgICBzcmMgKyBz cmNfc3RyaWRlICogKGhlaWdodCAtIDEpLCB3aWR0aCA8PCBwcyk7CisKKyAgICAgICAgLyogY29w eSB2ZXJ0aWNhbCBlZGdlcyAqLworICAgICAgICBjb3B5X3ZlcnQoZmMtPnRhYi5zYW9fcGl4ZWxf YnVmZmVyX3ZbY19pZHhdICsgKCgoMiAqIHhfY3RiKSAqIGggKyB5KSA8PCBwcyksIHNyYywgcHMs IGhlaWdodCwgMSA8PCBwcywgc3JjX3N0cmlkZSk7CisgICAgICAgIGNvcHlfdmVydChmYy0+dGFi LnNhb19waXhlbF9idWZmZXJfdltjX2lkeF0gKyAoKCgyICogeF9jdGIgKyAxKSAqIGggKyB5KSA8 PCBwcyksIHNyYyArICgod2lkdGggLSAxKSA8PCBwcyksIHBzLCBoZWlnaHQsIDEgPDwgcHMsIHNy Y19zdHJpZGUpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2FvX2NvcHlfY3RiX3RvX2h2KFZW Q0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCByeCwgY29uc3QgaW50IHJ5LCBjb25zdCBpbnQg dG9wKQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgICAgID0gbGMtPmZjOworICAgIGNvbnN0 IGludCBjdGJfc2l6ZV95ICAgID0gZmMtPnBzLnNwcy0+Y3RiX3NpemVfeTsKKyAgICBjb25zdCBp bnQgeDAgICAgICAgICAgICA9IHJ4IDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAg ICBjb25zdCBpbnQgeTAgICAgICAgICAgICA9IHJ5IDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3Np emVfeTsKKworICAgIGZvciAoaW50IGNfaWR4ID0gMDsgY19pZHggPCAoZmMtPnBzLnNwcy0+ci0+ c3BzX2Nocm9tYV9mb3JtYXRfaWRjID8gMyA6IDEpOyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0 IGludCB4ICAgICAgICAgICAgICAgID0geDAgPj4gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsK KyAgICAgICAgY29uc3QgaW50IHkgICAgICAgICAgICAgICAgPSB5MCA+PiBmYy0+cHMuc3BzLT52 c2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSA9IGZjLT5m cmFtZS0+bGluZXNpemVbY19pZHhdOworICAgICAgICBjb25zdCBpbnQgY3RiX3NpemVfaCAgICAg ICA9IGN0Yl9zaXplX3kgPj4gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29u c3QgaW50IGN0Yl9zaXplX3YgICAgICAgPSBjdGJfc2l6ZV95ID4+IGZjLT5wcy5zcHMtPnZzaGlm dFtjX2lkeF07CisgICAgICAgIGNvbnN0IGludCB3aWR0aCAgICAgICAgICAgID0gRkZNSU4oY3Ri X3NpemVfaCwgKGZjLT5wcy5zcHMtPndpZHRoICA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhd KSAtIHgpOworICAgICAgICBjb25zdCBpbnQgaGVpZ2h0ICAgICAgICAgICA9IEZGTUlOKGN0Yl9z aXplX3YsIChmYy0+cHMuc3BzLT5oZWlnaHQgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XSkg LSB5KTsKKyAgICAgICAgdWludDhfdCAqc3JjICAgICAgICAgICAgICAgPSAmZmMtPmZyYW1lLT5k YXRhW2NfaWR4XVt5ICogc3JjX3N0cmlkZSArICh4IDw8IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0 KV07CisgICAgICAgIGNvcHlfY3RiX3RvX2h2KGZjLCBzcmMsIHNyY19zdHJpZGUsIHgsIHksIHdp ZHRoLCBoZWlnaHQsIGNfaWR4LCByeCwgcnksIHRvcCk7CisgICAgfQorCit9CisKK3ZvaWQgZmZf dnZjX3Nhb19jb3B5X2N0Yl90b19odihWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgcngs IGNvbnN0IGludCByeSwgY29uc3QgaW50IGxhc3Rfcm93KQoreworICAgIGlmIChyeSkKKyAgICAg ICAgc2FvX2NvcHlfY3RiX3RvX2h2KGxjLCByeCwgcnkgLSAxLCAwKTsKKworICAgIHNhb19jb3B5 X2N0Yl90b19odihsYywgcngsIHJ5LCAxKTsKKworICAgIGlmIChsYXN0X3JvdykKKyAgICAgICAg c2FvX2NvcHlfY3RiX3RvX2h2KGxjLCByeCwgcnksIDApOworfQorCit2b2lkIGZmX3Z2Y19zYW9f ZmlsdGVyKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4LCBpbnQgeSkKK3sKKyAgICBWVkNGcmFt ZUNvbnRleHQgKmZjICA9IGxjLT5mYzsKKyAgICBjb25zdCBpbnQgY3RiX3NpemVfeSA9IGZjLT5w cy5zcHMtPmN0Yl9zaXplX3k7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc2FvX3RhYlsxNl0g PSB7IDAsIDEsIDIsIDIsIDMsIDMsIDQsIDQsIDUsIDUsIDYsIDYsIDcsIDcsIDgsIDggfTsKKyAg ICBpbnQgY19pZHg7CisgICAgaW50IGVkZ2VzWzRdOyAgLy8gMCBsZWZ0IDEgdG9wIDIgcmlnaHQg MyBib3R0b20KKyAgICBpbnQgeF9jdGIgICAgICAgICAgICAgICAgPSB4ID4+IGZjLT5wcy5zcHMt PmN0Yl9sb2cyX3NpemVfeTsKKyAgICBpbnQgeV9jdGIgICAgICAgICAgICAgICAgPSB5ID4+IGZj LT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBTQU9QYXJhbXMgKnNhbyAgICAgICAgICAg PSAmQ1RCKGZjLT50YWIuc2FvLCB4X2N0YiwgeV9jdGIpOworICAgIC8vIGZsYWdzIGluZGljYXRp bmcgdW5maWx0ZXJhYmxlIGVkZ2VzCisgICAgdWludDhfdCB2ZXJ0X2VkZ2VbXSAgICAgID0geyAw LCAwIH07CisgICAgdWludDhfdCBob3Jpel9lZGdlW10gICAgID0geyAwLCAwIH07CisgICAgdWlu dDhfdCBkaWFnX2VkZ2VbXSAgICAgID0geyAwLCAwLCAwLCAwIH07CisgICAgdWludDhfdCBsZmFz ZSAgICAgICAgICAgID0gZmMtPnBzLnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGlj ZXNfZW5hYmxlZF9mbGFnOworICAgIHVpbnQ4X3Qgbm9fdGlsZV9maWx0ZXIgICA9IGZjLT5wcy5w cHMtPnItPm51bV90aWxlc19pbl9waWMgPiAxICYmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxl ZF9mbGFnOworICAgIHVpbnQ4X3QgcmVzdG9yZSAgICAgICAgICA9IG5vX3RpbGVfZmlsdGVyIHx8 ICFsZmFzZTsKKyAgICB1aW50OF90IGxlZnRfdGlsZV9lZGdlICAgPSAwOworICAgIHVpbnQ4X3Qg cmlnaHRfdGlsZV9lZGdlICA9IDA7CisgICAgdWludDhfdCB1cF90aWxlX2VkZ2UgICAgID0gMDsK KyAgICB1aW50OF90IGJvdHRvbV90aWxlX2VkZ2UgPSAwOworCisgICAgZWRnZXNbTEVGVF0gICA9 IHhfY3RiID09IDA7CisgICAgZWRnZXNbVE9QXSAgICA9IHlfY3RiID09IDA7CisgICAgZWRnZXNb UklHSFRdICA9IHhfY3RiID09IGZjLT5wcy5wcHMtPmN0Yl93aWR0aCAgLSAxOworICAgIGVkZ2Vz W0JPVFRPTV0gPSB5X2N0YiA9PSBmYy0+cHMucHBzLT5jdGJfaGVpZ2h0IC0gMTsKKworICAgIGlm IChyZXN0b3JlKSB7CisgICAgICAgIGlmICghZWRnZXNbTEVGVF0pIHsKKyAgICAgICAgICAgIGxl ZnRfdGlsZV9lZGdlICA9IG5vX3RpbGVfZmlsdGVyICYmIGZjLT5wcy5wcHMtPmN0Yl90b19jb2xf YmRbeF9jdGJdID09IHhfY3RiOworICAgICAgICAgICAgdmVydF9lZGdlWzBdICAgID0gKCFsZmFz ZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIu c2xpY2VfaWR4LCB4X2N0YiAtIDEsIHlfY3RiKSkgfHwgbGVmdF90aWxlX2VkZ2U7CisgICAgICAg IH0KKyAgICAgICAgaWYgKCFlZGdlc1tSSUdIVF0pIHsKKyAgICAgICAgICAgIHJpZ2h0X3RpbGVf ZWRnZSA9IG5vX3RpbGVfZmlsdGVyICYmIGZjLT5wcy5wcHMtPmN0Yl90b19jb2xfYmRbeF9jdGJd ICE9IGZjLT5wcy5wcHMtPmN0Yl90b19jb2xfYmRbeF9jdGIgKyAxXTsKKyAgICAgICAgICAgIHZl cnRfZWRnZVsxXSAgICA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0Yiwg eV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIgKyAxLCB5X2N0YikpIHx8IHJp Z2h0X3RpbGVfZWRnZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW1RPUF0pIHsKKyAg ICAgICAgICAgIHVwX3RpbGVfZWRnZSAgICAgPSBub190aWxlX2ZpbHRlciAmJiBmYy0+cHMucHBz LT5jdGJfdG9fcm93X2JkW3lfY3RiXSA9PSB5X2N0YjsKKyAgICAgICAgICAgIGhvcml6X2VkZ2Vb MF0gICAgPSAoIWxmYXNlICYmIENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAh PSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YiAtIDEpKSB8fCB1cF90aWxlX2Vk Z2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFlZGdlc1tCT1RUT01dKSB7CisgICAgICAgICAg ICBib3R0b21fdGlsZV9lZGdlID0gbm9fdGlsZV9maWx0ZXIgJiYgZmMtPnBzLnBwcy0+Y3RiX3Rv X3Jvd19iZFt5X2N0Yl0gIT0gZmMtPnBzLnBwcy0+Y3RiX3RvX3Jvd19iZFt5X2N0YiArIDFdOwor ICAgICAgICAgICAgaG9yaXpfZWRnZVsxXSAgICA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xp Y2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlf Y3RiICsgMSkpIHx8IGJvdHRvbV90aWxlX2VkZ2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFl ZGdlc1tMRUZUXSAmJiAhZWRnZXNbVE9QXSkgeworICAgICAgICAgICAgZGlhZ19lZGdlWzBdID0g KCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZj LT50YWIuc2xpY2VfaWR4LCB4X2N0YiAtIDEsIHlfY3RiIC0gMSkpIHx8IGxlZnRfdGlsZV9lZGdl IHx8IHVwX3RpbGVfZWRnZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW1RPUF0gJiYg IWVkZ2VzW1JJR0hUXSkgeworICAgICAgICAgICAgZGlhZ19lZGdlWzFdID0gKCFsZmFzZSAmJiBD VEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xpY2Vf aWR4LCB4X2N0YiArIDEsIHlfY3RiIC0gMSkpIHx8IHJpZ2h0X3RpbGVfZWRnZSB8fCB1cF90aWxl X2VkZ2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFlZGdlc1tSSUdIVF0gJiYgIWVkZ2VzW0JP VFRPTV0pIHsKKyAgICAgICAgICAgIGRpYWdfZWRnZVsyXSA9ICghbGZhc2UgJiYgQ1RCKGZjLT50 YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9j dGIgKyAxLCB5X2N0YiArIDEpKSB8fCByaWdodF90aWxlX2VkZ2UgfHwgYm90dG9tX3RpbGVfZWRn ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW0xFRlRdICYmICFlZGdlc1tCT1RUT01d KSB7CisgICAgICAgICAgICBkaWFnX2VkZ2VbM10gPSAoIWxmYXNlICYmIENUQihmYy0+dGFiLnNs aWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiIC0g MSwgeV9jdGIgKyAxKSkgfHwgbGVmdF90aWxlX2VkZ2UgfHwgYm90dG9tX3RpbGVfZWRnZTsKKyAg ICAgICAgfQorICAgIH0KKworICAgIGZvciAoY19pZHggPSAwOyBjX2lkeCA8IChmYy0+cHMuc3Bz LT5yLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPyAzIDogMSk7IGNfaWR4KyspIHsKKyAgICAgICAg aW50IHgwICAgICAgID0geCA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgICAgICBp bnQgeTAgICAgICAgPSB5ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAgIHB0 cmRpZmZfdCBzcmNfc3RyaWRlID0gZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF07CisgICAgICAg IGludCBjdGJfc2l6ZV9oID0gY3RiX3NpemVfeSA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhd OworICAgICAgICBpbnQgY3RiX3NpemVfdiA9IGN0Yl9zaXplX3kgPj4gZmMtPnBzLnNwcy0+dnNo aWZ0W2NfaWR4XTsKKyAgICAgICAgaW50IHdpZHRoICAgID0gRkZNSU4oY3RiX3NpemVfaCwgKGZj LT5wcy5zcHMtPndpZHRoICA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdKSAtIHgwKTsKKyAg ICAgICAgaW50IGhlaWdodCAgID0gRkZNSU4oY3RiX3NpemVfdiwgKGZjLT5wcy5zcHMtPmhlaWdo dCA+PiBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdKSAtIHkwKTsKKyAgICAgICAgaW50IHRhYiAg ICAgID0gc2FvX3RhYlsoRkZBTElHTih3aWR0aCwgOCkgPj4gMykgLSAxXTsKKyAgICAgICAgdWlu dDhfdCAqc3JjID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1beTAgKiBzcmNfc3RyaWRlICsgKHgw IDw8IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0KV07CisgICAgICAgIHB0cmRpZmZfdCBkc3Rfc3Ry aWRlOworICAgICAgICB1aW50OF90ICpkc3Q7CisKKyAgICAgICAgc3dpdGNoIChzYW8tPnR5cGVf aWR4W2NfaWR4XSkgeworICAgICAgICBjYXNlIFNBT19CQU5EOgorICAgICAgICAgICAgZmMtPnZ2 Y2RzcC5zYW8uYmFuZF9maWx0ZXJbdGFiXShzcmMsIHNyYywgc3JjX3N0cmlkZSwgc3JjX3N0cmlk ZSwKKyAgICAgICAgICAgICAgICBzYW8tPm9mZnNldF92YWxbY19pZHhdLCBzYW8tPmJhbmRfcG9z aXRpb25bY19pZHhdLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlIFNBT19FREdFOgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgdyA9IGZjLT5wcy5z cHMtPndpZHRoID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgICAgICBpbnQg aCA9IGZjLT5wcy5zcHMtPmhlaWdodCA+PiBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdOworICAg ICAgICAgICAgaW50IHNoID0gZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQ7CisKKyAgICAgICAgICAg IGRzdF9zdHJpZGUgPSAyKk1BWF9QQl9TSVpFICsgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0la RTsKKyAgICAgICAgICAgIGRzdCA9IGxjLT5zYW9fYnVmZmVyICsgZHN0X3N0cmlkZSArIEFWX0lO UFVUX0JVRkZFUl9QQURESU5HX1NJWkU7CisKKyAgICAgICAgICAgIGlmICghZWRnZXNbVE9QXSkg eworICAgICAgICAgICAgICAgIGludCBsZWZ0ID0gMSAtIGVkZ2VzW0xFRlRdOworICAgICAgICAg ICAgICAgIGludCByaWdodCA9IDEgLSBlZGdlc1tSSUdIVF07CisgICAgICAgICAgICAgICAgY29u c3QgdWludDhfdCAqc3JjMTsKKyAgICAgICAgICAgICAgICB1aW50OF90ICpkc3QxOworICAgICAg ICAgICAgICAgIGludCBwb3M7CisKKyAgICAgICAgICAgICAgICBkc3QxID0gZHN0IC0gZHN0X3N0 cmlkZSAtIChsZWZ0IDw8IHNoKTsKKyAgICAgICAgICAgICAgICBzcmMxID0gZmMtPnRhYi5zYW9f cGl4ZWxfYnVmZmVyX2hbY19pZHhdICsgKCgoMiAqIHlfY3RiIC0gMSkgKiB3ICsgeDAgLSBsZWZ0 KSA8PCBzaCk7CisgICAgICAgICAgICAgICAgcG9zID0gMDsKKyAgICAgICAgICAgICAgICBpZiAo bGVmdCkgeworICAgICAgICAgICAgICAgICAgICBjb3B5X3BpeGVsKGRzdDEsIHNyYzEsIHNoKTsK KyAgICAgICAgICAgICAgICAgICAgcG9zICs9ICgxIDw8IHNoKTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgbWVtY3B5KGRzdDEgKyBwb3MsIHNyYzEgKyBwb3MsIHdpZHRoIDw8 IHNoKTsKKyAgICAgICAgICAgICAgICBpZiAocmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAg cG9zICs9IHdpZHRoIDw8IHNoOworICAgICAgICAgICAgICAgICAgICBjb3B5X3BpeGVsKGRzdDEg KyBwb3MsIHNyYzEgKyBwb3MsIHNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBpZiAoIWVkZ2VzW0JPVFRPTV0pIHsKKyAgICAgICAgICAgICAgICBpbnQg bGVmdCA9IDEgLSBlZGdlc1tMRUZUXTsKKyAgICAgICAgICAgICAgICBpbnQgcmlnaHQgPSAxIC0g ZWRnZXNbUklHSFRdOworICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyYzE7CisgICAg ICAgICAgICAgICAgdWludDhfdCAqZHN0MTsKKyAgICAgICAgICAgICAgICBpbnQgcG9zOworCisg ICAgICAgICAgICAgICAgZHN0MSA9IGRzdCArIGhlaWdodCAqIGRzdF9zdHJpZGUgLSAobGVmdCA8 PCBzaCk7CisgICAgICAgICAgICAgICAgc3JjMSA9IGZjLT50YWIuc2FvX3BpeGVsX2J1ZmZlcl9o W2NfaWR4XSArICgoKDIgKiB5X2N0YiArIDIpICogdyArIHgwIC0gbGVmdCkgPDwgc2gpOworICAg ICAgICAgICAgICAgIHBvcyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQpIHsKKyAgICAg ICAgICAgICAgICAgICAgY29weV9waXhlbChkc3QxLCBzcmMxLCBzaCk7CisgICAgICAgICAgICAg ICAgICAgIHBvcyArPSAoMSA8PCBzaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIG1lbWNweShkc3QxICsgcG9zLCBzcmMxICsgcG9zLCB3aWR0aCA8PCBzaCk7CisgICAgICAg ICAgICAgICAgaWYgKHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIHBvcyArPSB3aWR0aCA8 PCBzaDsKKyAgICAgICAgICAgICAgICAgICAgY29weV9waXhlbChkc3QxICsgcG9zLCBzcmMxICsg cG9zLCBzaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKCFlZGdlc1tMRUZUXSkgeworICAgICAgICAgICAgICAgIGNvcHlfdmVydChkc3QgLSAoMSA8 PCBzaCksCisgICAgICAgICAgICAgICAgICAgIGZjLT50YWIuc2FvX3BpeGVsX2J1ZmZlcl92W2Nf aWR4XSArICgoKDIgKiB4X2N0YiAtIDEpICogaCArIHkwKSA8PCBzaCksCisgICAgICAgICAgICAg ICAgICAgIHNoLCBoZWlnaHQsIGRzdF9zdHJpZGUsIDEgPDwgc2gpOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKCFlZGdlc1tSSUdIVF0pIHsKKyAgICAgICAgICAgICAgICBjb3B5X3Zl cnQoZHN0ICsgKHdpZHRoIDw8IHNoKSwKKyAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi5zYW9f cGl4ZWxfYnVmZmVyX3ZbY19pZHhdICsgKCgoMiAqIHhfY3RiICsgMikgKiBoICsgeTApIDw8IHNo KSwKKyAgICAgICAgICAgICAgICAgICAgc2gsIGhlaWdodCwgZHN0X3N0cmlkZSwgMSA8PCBzaCk7 CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvcHlfY3RiKGRzdCwgc3JjLCAgd2lkdGgg PDwgc2gsIGhlaWdodCwgZHN0X3N0cmlkZSwgc3JjX3N0cmlkZSk7CisgICAgICAgICAgICBmYy0+ dnZjZHNwLnNhby5lZGdlX2ZpbHRlclt0YWJdKHNyYywgZHN0LCBzcmNfc3RyaWRlLCBzYW8tPm9m ZnNldF92YWxbY19pZHhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzYW8tPmVvX2NsYXNzW2NfaWR4XSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBm Yy0+dnZjZHNwLnNhby5lZGdlX3Jlc3RvcmVbcmVzdG9yZV0oc3JjLCBkc3QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyaWRlLCBkc3Rfc3Ry aWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Fv LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZXMs IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aGVpZ2h0LCBjX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZlcnRfZWRnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGhvcml6X2VkZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkaWFnX2VkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICAgICAgfQorICAgIH0KK30KKworI2RlZmluZSBUQUJfQlModCwgeCwgeSkgICAgICh0KVso KHkpID4+IDIpICogKGZjLT50YWIuYnNfd2lkdGgpICsgKCh4KSA+PiAyKV0KKyNkZWZpbmUgVEFC X01BWF9MRU4odCwgeCwgeSkgICh0KVsoKHkpID4+IDIpICogKGZjLT50YWIuYnNfd2lkdGgpICsg KCh4KSA+PiAyKV0KKworLy84IHNhbXBsZXMgYSB0aW1lCisjZGVmaW5lIERFQkxPQ0tfU1RFUCAg ICAgICAgICAgIDgKKyNkZWZpbmUgTFVNQV9HUklEICAgICAgICAgICAgICAgNAorI2RlZmluZSBD SFJPTUFfR1JJRCAgICAgICAgICAgICA4CisKK3N0YXRpYyBpbnQgYm91bmRhcnlfc3RyZW5ndGgo Y29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgTXZGaWVsZCAqY3VyciwgTXZGaWVsZCAqbmVpZ2gs CisgICAgY29uc3QgUmVmUGljTGlzdCAqbmVpZ2hfcnBsKQoreworICAgIFJlZlBpY0xpc3QgKnJw bCA9IGxjLT5zYy0+cnBsOworICAgIGlmIChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZfQkkgJiYgIG5l aWdoLT5wcmVkX2ZsYWcgPT0gUEZfQkkpIHsKKyAgICAgICAgLy8gc2FtZSBMMCBhbmQgTDEKKyAg ICAgICAgaWYgKHJwbFswXS5saXN0W2N1cnItPnJlZl9pZHhbMF1dID09IG5laWdoX3JwbFswXS5s aXN0W25laWdoLT5yZWZfaWR4WzBdXSAgJiYKKyAgICAgICAgICAgIHJwbFswXS5saXN0W2N1cnIt PnJlZl9pZHhbMF1dID09IHJwbFsxXS5saXN0W2N1cnItPnJlZl9pZHhbMV1dICYmCisgICAgICAg ICAgICBuZWlnaF9ycGxbMF0ubGlzdFtuZWlnaC0+cmVmX2lkeFswXV0gPT0gbmVpZ2hfcnBsWzFd Lmxpc3RbbmVpZ2gtPnJlZl9pZHhbMV1dKSB7CisgICAgICAgICAgICBpZiAoKEZGQUJTKG5laWdo LT5tdlswXS54IC0gY3Vyci0+bXZbMF0ueCkgPj0gOCB8fCBGRkFCUyhuZWlnaC0+bXZbMF0ueSAt IGN1cnItPm12WzBdLnkpID49IDggfHwKKyAgICAgICAgICAgICAgICAgRkZBQlMobmVpZ2gtPm12 WzFdLnggLSBjdXJyLT5tdlsxXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5tdlsxXS55IC0gY3Vy ci0+bXZbMV0ueSkgPj0gOCkgJiYKKyAgICAgICAgICAgICAgICAoRkZBQlMobmVpZ2gtPm12WzFd LnggLSBjdXJyLT5tdlswXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5tdlsxXS55IC0gY3Vyci0+ bXZbMF0ueSkgPj0gOCB8fAorICAgICAgICAgICAgICAgICBGRkFCUyhuZWlnaC0+bXZbMF0ueCAt IGN1cnItPm12WzFdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzBdLnkgLSBjdXJyLT5tdlsx XS55KSA+PSA4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIGlmIChuZWlnaF9ycGxb MF0ubGlzdFtuZWlnaC0+cmVmX2lkeFswXV0gPT0gcnBsWzBdLmxpc3RbY3Vyci0+cmVmX2lkeFsw XV0gJiYKKyAgICAgICAgICAgICAgICAgICBuZWlnaF9ycGxbMV0ubGlzdFtuZWlnaC0+cmVmX2lk eFsxXV0gPT0gcnBsWzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsxXV0pIHsKKyAgICAgICAgICAgIGlm IChGRkFCUyhuZWlnaC0+bXZbMF0ueCAtIGN1cnItPm12WzBdLngpID49IDggfHwgRkZBQlMobmVp Z2gtPm12WzBdLnkgLSBjdXJyLT5tdlswXS55KSA+PSA4IHx8CisgICAgICAgICAgICAgICAgRkZB QlMobmVpZ2gtPm12WzFdLnggLSBjdXJyLT5tdlsxXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5t dlsxXS55IC0gY3Vyci0+bXZbMV0ueSkgPj0gOCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsK KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBl bHNlIGlmIChuZWlnaF9ycGxbMV0ubGlzdFtuZWlnaC0+cmVmX2lkeFsxXV0gPT0gcnBsWzBdLmxp c3RbY3Vyci0+cmVmX2lkeFswXV0gJiYKKyAgICAgICAgICAgICAgICAgICBuZWlnaF9ycGxbMF0u bGlzdFtuZWlnaC0+cmVmX2lkeFswXV0gPT0gcnBsWzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsxXV0p IHsKKyAgICAgICAgICAgIGlmIChGRkFCUyhuZWlnaC0+bXZbMV0ueCAtIGN1cnItPm12WzBdLngp ID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzFdLnkgLSBjdXJyLT5tdlswXS55KSA+PSA4IHx8Cisg ICAgICAgICAgICAgICAgRkZBQlMobmVpZ2gtPm12WzBdLnggLSBjdXJyLT5tdlsxXS54KSA+PSA4 IHx8IEZGQUJTKG5laWdoLT5tdlswXS55IC0gY3Vyci0+bXZbMV0ueSkgPj0gOCkKKyAgICAgICAg ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1 cm4gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9 CisgICAgfSBlbHNlIGlmICgoY3Vyci0+cHJlZF9mbGFnICE9IFBGX0JJKSAmJiAobmVpZ2gtPnBy ZWRfZmxhZyAhPSBQRl9CSSkpeyAvLyAxIE1WCisgICAgICAgIE12IEEsIEI7CisgICAgICAgIGlu dCByZWZfQSwgcmVmX0I7CisKKyAgICAgICAgaWYgKGN1cnItPnByZWRfZmxhZyAmIDEpIHsKKyAg ICAgICAgICAgIEEgICAgID0gY3Vyci0+bXZbMF07CisgICAgICAgICAgICByZWZfQSA9IHJwbFsw XS5saXN0W2N1cnItPnJlZl9pZHhbMF1dOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg QSAgICAgPSBjdXJyLT5tdlsxXTsKKyAgICAgICAgICAgIHJlZl9BID0gcnBsWzFdLmxpc3RbY3Vy ci0+cmVmX2lkeFsxXV07CisgICAgICAgIH0KKworICAgICAgICBpZiAobmVpZ2gtPnByZWRfZmxh ZyAmIDEpIHsKKyAgICAgICAgICAgIEIgICAgID0gbmVpZ2gtPm12WzBdOworICAgICAgICAgICAg cmVmX0IgPSBuZWlnaF9ycGxbMF0ubGlzdFtuZWlnaC0+cmVmX2lkeFswXV07CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICBCICAgICA9IG5laWdoLT5tdlsxXTsKKyAgICAgICAgICAgIHJl Zl9CID0gbmVpZ2hfcnBsWzFdLmxpc3RbbmVpZ2gtPnJlZl9pZHhbMV1dOworICAgICAgICB9CisK KyAgICAgICAgaWYgKHJlZl9BID09IHJlZl9CKSB7CisgICAgICAgICAgICBpZiAoRkZBQlMoQS54 IC0gQi54KSA+PSA4IHx8IEZGQUJTKEEueSAtIEIueSkgPj0gOCkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg ICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4g MTsKK30KKworLy9wYXJ0IG9mIDguOC4zLjMgRGVyaXZhdGlvbiBwcm9jZXNzIG9mIHRyYW5zZm9y bSBibG9jayBib3VuZGFyeQorc3RhdGljIHZvaWQgZGVyaXZlX21heF9maWx0ZXJfbGVuZ3RoX2x1 bWEoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgaW50IHF4LCBjb25zdCBpbnQgcXks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgaXNf aW50cmEsIGNvbnN0IGludCBoYXNfc3ViYmxvY2ssIGNvbnN0IGludCB2ZXJ0aWNhbCwgdWludDhf dCAqbWF4X2xlbl9wLCB1aW50OF90ICptYXhfbGVuX3EpCit7CisgICAgY29uc3QgaW50IHB4ID0g IHZlcnRpY2FsID8gcXggLSAxIDogcXg7CisgICAgY29uc3QgaW50IHB5ID0gIXZlcnRpY2FsID8g cXkgLSAxIDogcXk7CisgICAgY29uc3QgdWludDhfdCAqdGJfc2l6ZSA9IHZlcnRpY2FsID8gZmMt PnRhYi50Yl93aWR0aFtMVU1BXSA6IGZjLT50YWIudGJfaGVpZ2h0W0xVTUFdOworICAgIGNvbnN0 IGludCBzaXplX3AgPSB0Yl9zaXplWyhweSA+PiBNSU5fVFVfTE9HMikgKiBmYy0+cHMucHBzLT5t aW5fdHVfd2lkdGggKyAocHggPj4gTUlOX1RVX0xPRzIpXTsKKyAgICBjb25zdCBpbnQgc2l6ZV9x ID0gdGJfc2l6ZVsocXkgPj4gTUlOX1RVX0xPRzIpICogZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRo ICsgKHF4ID4+IE1JTl9UVV9MT0cyKV07CisgICAgY29uc3QgaW50IG1pbl9jYl9sb2cyID0gZmMt PnBzLnNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBvZmZfcCA9IChweSA+ PiBtaW5fY2JfbG9nMikgKiBmYy0+cHMucHBzLT5taW5fY2Jfd2lkdGggKyAocHggPj4gbWluX2Ni X2xvZzIpOworICAgIGlmIChzaXplX3AgPD0gNCB8fCBzaXplX3EgPD0gNCkgeworICAgICAgICAq bWF4X2xlbl9wID0gKm1heF9sZW5fcSA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKm1heF9s ZW5fcCA9ICptYXhfbGVuX3EgPSAzOworICAgICAgICBpZiAoc2l6ZV9wID49IDMyKQorICAgICAg ICAgICAgKm1heF9sZW5fcCA9IDc7CisgICAgICAgIGlmIChzaXplX3EgPj0gMzIpCisgICAgICAg ICAgICAqbWF4X2xlbl9xID0gNzsKKyAgICB9CisgICAgaWYgKGhhc19zdWJibG9jaykKKyAgICAg ICAgKm1heF9sZW5fcSA9IEZGTUlOKDUsICptYXhfbGVuX3EpOworICAgIGlmIChmYy0+dGFiLm1z ZltvZmZfcF0gfHwgZmMtPnRhYi5pYWZbb2ZmX3BdKQorICAgICAgICAqbWF4X2xlbl9wID0gRkZN SU4oNSwgKm1heF9sZW5fcCk7Cit9CisKK3N0YXRpYyB2b2lkIHZ2Y19kZWJsb2NrX3N1YmJsb2Nr X2JzX3ZlcnRpY2FsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29uc3QgaW50IGNi X3gsIGNvbnN0IGludCBjYl95LCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50 IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAg KmZjICA9IGxjLT5mYzsKKyAgICBNdkZpZWxkICp0YWJfbXZmICAgICAgICAgICAgPSBmYy0+dGFi Lm12ZjsKKyAgICBSZWZQaWNMaXN0ICpycGwgICAgICAgICAgICAgPSBsYy0+c2MtPnJwbDsKKyAg ICBjb25zdCBpbnQgbWluX3B1X3dpZHRoICAgICAgPSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7 CisgICAgY29uc3QgaW50IGxvZzJfbWluX3B1X3NpemUgID0gTUlOX1BVX0xPRzI7CisgICAgdWlu dDhfdCBtYXhfbGVuX3AsIG1heF9sZW5fcTsKKyAgICBpbnQgYnMsIGksIGo7CisKKyAgICAvLyBi cyBmb3IgVFUgaW50ZXJuYWwgdmVydGljYWwgUFUgYm91bmRhcmllcworICAgIGZvciAoaiA9IDA7 IGogPCBoZWlnaHQ7IGogKz0gNCkgeworICAgICAgICBpbnQgeV9wdSA9ICh5MCArIGopID4+IGxv ZzJfbWluX3B1X3NpemU7CisKKyAgICAgICAgZm9yIChpID0gOCAtICgoeDAgLSBjYl94KSAlIDgp OyBpIDwgd2lkdGg7IGkgKz0gOCkgeworICAgICAgICAgICAgaW50IHhwX3B1ID0gKHgwICsgaSAt IDEpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAgICBpbnQgeHFfcHUgPSAoeDAgKyBp KSAgICAgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgICAgIE12RmllbGQgKmxlZnQgPSAm dGFiX212Zlt5X3B1ICogbWluX3B1X3dpZHRoICsgeHBfcHVdOworICAgICAgICAgICAgTXZGaWVs ZCAqY3VyciA9ICZ0YWJfbXZmW3lfcHUgKiBtaW5fcHVfd2lkdGggKyB4cV9wdV07CisgICAgICAg ICAgICBjb25zdCBpbnQgeCA9IHgwICsgaTsKKyAgICAgICAgICAgIGNvbnN0IGludCB5ID0geTAg KyBqOworCisgICAgICAgICAgICBicyA9IGJvdW5kYXJ5X3N0cmVuZ3RoKGxjLCBjdXJyLCBsZWZ0 LCBycGwpOworICAgICAgICAgICAgVEFCX0JTKGZjLT50YWIudmVydGljYWxfYnNbTFVNQV0sIHgs IHkpID0gYnM7CisKKworICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMDsKKyAg ICAgICAgICAgIGlmIChpID09IDQgfHwgaSA9PSB3aWR0aCAtIDQpCisgICAgICAgICAgICAgICAg bWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGkgPT0gOCB8 fCBpID09IHdpZHRoIC0gOCkKKyAgICAgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3Eg PSAyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9s ZW5fcSA9IDM7CisKKyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50YWIudmVydGljYWxfcCwg eCwgeSkgPSBtYXhfbGVuX3A7CisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLnZlcnRp Y2FsX3EsIHgsIHkpID0gbWF4X2xlbl9xOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMg dm9pZCB2dmNfZGVibG9ja19zdWJibG9ja19ic19ob3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29u dGV4dCAqbGMsCisgICAgY29uc3QgaW50IGNiX3gsIGNvbnN0IGludCBjYl95LCBjb25zdCBpbnQg eDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQorewor ICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAgKmZjICA9IGxjLT5mYzsKKyAgICBNdkZpZWxkKiB0 YWJfbXZmICAgICAgICAgICAgPSBmYy0+dGFiLm12ZjsKKyAgICBSZWZQaWNMaXN0KiBycGwgICAg ICAgICAgICAgPSBsYy0+c2MtPnJwbDsKKyAgICBjb25zdCBpbnQgbWluX3B1X3dpZHRoICAgICAg PSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3B1X3Np emUgID0gTUlOX1BVX0xPRzI7CisgICAgdWludDhfdCBtYXhfbGVuX3AsIG1heF9sZW5fcTsKKyAg ICBpbnQgYnMsIGksIGo7CisKKyAgICAvLyBicyBmb3IgVFUgaW50ZXJuYWwgaG9yaXpvbnRhbCBQ VSBib3VuZGFyaWVzCisgICAgZm9yIChqID0gOCAtICgoeTAgLSBjYl95KSAlIDgpOyBqIDwgaGVp Z2h0OyBqICs9IDgpIHsKKyAgICAgICAgaW50IHlwX3B1ID0gKHkwICsgaiAtIDEpID4+IGxvZzJf bWluX3B1X3NpemU7CisgICAgICAgIGludCB5cV9wdSA9ICh5MCArIGopICAgICA+PiBsb2cyX21p bl9wdV9zaXplOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSArPSA0KSB7Cisg ICAgICAgICAgICBpbnQgeF9wdSA9ICh4MCArIGkpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAg ICAgICAgICBNdkZpZWxkICp0b3AgID0gJnRhYl9tdmZbeXBfcHUgKiBtaW5fcHVfd2lkdGggKyB4 X3B1XTsKKyAgICAgICAgICAgIE12RmllbGQgKmN1cnIgPSAmdGFiX212Zlt5cV9wdSAqIG1pbl9w dV93aWR0aCArIHhfcHVdOworICAgICAgICAgICAgY29uc3QgaW50IHggPSB4MCArIGk7CisgICAg ICAgICAgICBjb25zdCBpbnQgeSA9IHkwICsgajsKKworICAgICAgICAgICAgYnMgPSBib3VuZGFy eV9zdHJlbmd0aChsYywgY3VyciwgdG9wLCBycGwpOworICAgICAgICAgICAgVEFCX0JTKGZjLT50 YWIuaG9yaXpvbnRhbF9ic1tMVU1BXSwgeCwgeSkgPSBiczsKKworICAgICAgICAgICAgLy9maXht ZToKKyAgICAgICAgICAgIC8vZWRnZVRiRmxhZ3NbIHgg4oiSIHNiVyBdWyB5IF0gaXMgZXF1YWwg dG8gMQorICAgICAgICAgICAgLy9lZGdlVGJGbGFnc1sgeCArIHNiVyBdWyB5IF0gaXMgZXF1YWwg dG8gMQorICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMDsKKyAgICAgICAgICAg IGlmIChqID09IDQgfHwgaiA9PSBoZWlnaHQgLSA0KQorICAgICAgICAgICAgICAgIG1heF9sZW5f cCA9IG1heF9sZW5fcSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChqID09IDggfHwgaiA9PSBo ZWlnaHQgLSA4KQorICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDI7Cisg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0g MzsKKyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50YWIuaG9yaXpvbnRhbF9wLCB4LCB5KSA9 IG1heF9sZW5fcDsKKyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50YWIuaG9yaXpvbnRhbF9x LCB4LCB5KSA9IG1heF9sZW5fcTsKKyAgICAgICAgfQorICAgIH0KKworfQorCitzdGF0aWMgdm9p ZCB2dmNfZGVibG9ja19ic19sdW1hX3ZlcnRpY2FsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMs CisgICAgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwgY29uc3Qg aW50IGhlaWdodCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICA9IGxjLT5mYzsK KyAgICBNdkZpZWxkICp0YWJfbXZmICAgICAgICAgICA9IGZjLT50YWIubXZmOworICAgIGNvbnN0 IGludCBsb2cyX21pbl9wdV9zaXplID0gTUlOX1BVX0xPRzI7CisgICAgY29uc3QgaW50IGxvZzJf bWluX3R1X3NpemUgPSBNSU5fVFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbWluX3B1X3dpZHRoICAg ICA9IGZjLT5wcy5wcHMtPm1pbl9wdV93aWR0aDsKKyAgICBjb25zdCBpbnQgbWluX3R1X3dpZHRo ICAgICA9IGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aDsKKyAgICBjb25zdCBpbnQgbWluX2NiX2xv ZzIgICAgICA9IGZjLT5wcy5zcHMtPm1pbl9jYl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQg bWluX2NiX3dpZHRoICAgICA9IGZjLT5wcy5wcHMtPm1pbl9jYl93aWR0aDsKKyAgICBpbnQgaXNf aW50cmEgPSB0YWJfbXZmWyh5MCA+PiBsb2cyX21pbl9wdV9zaXplKSAqIG1pbl9wdV93aWR0aCAr CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoeDAgPj4gbG9nMl9taW5fcHVfc2l6ZSldLnBy ZWRfZmxhZyA9PSBQRl9JTlRSQTsKKyAgICBpbnQgYm91bmRhcnlfbGVmdDsKKyAgICBpbnQgaSwg YnMsIGhhc192ZXJ0aWNhbF9zYiA9IDA7CisgICAgdWludDhfdCBtYXhfbGVuX3AsIG1heF9sZW5f cTsKKworICAgIGNvbnN0IGludCBvZmZfcSAgICAgICAgICAgID0gKHkwID4+IG1pbl9jYl9sb2cy KSAqIG1pbl9jYl93aWR0aCArICh4MCA+PiBtaW5fY2JfbG9nMik7CisgICAgY29uc3QgaW50IGNi X3ggICAgICAgICAgICAgPSBmYy0+dGFiLmNiX3Bvc194W0xVTUFdW29mZl9xXTsKKyAgICBjb25z dCBpbnQgY2JfeSAgICAgICAgICAgICA9IGZjLT50YWIuY2JfcG9zX3lbTFVNQV1bb2ZmX3FdOwor ICAgIGNvbnN0IGludCBjYl93aWR0aCAgICAgICAgID0gZmMtPnRhYi5jYl93aWR0aFtMVU1BXVtv ZmZfcV07CisKKyAgICBpZiAoIWlzX2ludHJhKSB7CisgICAgICAgIGlmIChmYy0+dGFiLm1zZltv ZmZfcV0gfHwgZmMtPnRhYi5pYWZbb2ZmX3FdKQorICAgICAgICAgICAgaGFzX3ZlcnRpY2FsX3Ni ICAgPSBjYl93aWR0aCAgPiA4OworICAgIH0KKworICAgIC8vIGJzIGZvciB2ZXJ0aWNhbCBUVSBi b3VuZGFyaWVzCisgICAgYm91bmRhcnlfbGVmdCA9IHgwID4gMCAmJiAhKHgwICYgMyk7CisgICAg aWYgKGJvdW5kYXJ5X2xlZnQgJiYKKyAgICAgICAgKCghZmMtPnBzLnBwcy0+ci0+cHBzX2xvb3Bf ZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnICYmCisgICAgICAgICAgICBsYy0+Ym91 bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZUX1NMSUNFICYmCisgICAgICAgICAgICAoeDAgJSAo MSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSB8fAorICAgICAgICAgICAg KCFmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxh ZyAmJgorICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9USUxF ICYmCisgICAgICAgICAgICAoeDAgJSAoMSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kp KSA9PSAwKSkpCisgICAgICAgIGJvdW5kYXJ5X2xlZnQgPSAwOworCisgICAgaWYgKGJvdW5kYXJ5 X2xlZnQpIHsKKyAgICAgICAgY29uc3QgUmVmUGljTGlzdCAqcnBsX2xlZnQgPQorICAgICAgICAg ICAgKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfU0xJQ0UpID8gZmZfdnZjX2dl dF9yZWZfbGlzdChmYywgZmMtPnJlZiwgeDAgLSAxLCB5MCkgOiBsYy0+c2MtPnJwbDsKKyAgICAg ICAgaW50IHhwX3B1ID0gKHgwIC0gMSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgaW50 IHhxX3B1ID0gIHgwICAgICAgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgaW50IHhwX3R1 ID0gKHgwIC0gMSkgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKyAgICAgICAgaW50IHhxX3R1ID0gIHgw ICAgICAgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaGVp Z2h0OyBpICs9IDQpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBvZmZfeCA9IGNiX3ggLSB4MDsK KyAgICAgICAgICAgIGludCB5X3B1ICAgICAgPSAoeTAgKyBpKSA+PiBsb2cyX21pbl9wdV9zaXpl OworICAgICAgICAgICAgaW50IHlfdHUgICAgICA9ICh5MCArIGkpID4+IGxvZzJfbWluX3R1X3Np emU7CisgICAgICAgICAgICBNdkZpZWxkICpsZWZ0ID0gJnRhYl9tdmZbeV9wdSAqIG1pbl9wdV93 aWR0aCArIHhwX3B1XTsKKyAgICAgICAgICAgIE12RmllbGQgKmN1cnIgPSAmdGFiX212Zlt5X3B1 ICogbWluX3B1X3dpZHRoICsgeHFfcHVdOworICAgICAgICAgICAgdWludDhfdCBsZWZ0X2NiZl9s dW1hID0gZmMtPnRhYi50dV9jb2RlZF9mbGFnW0xVTUFdW3lfdHUgKiBtaW5fdHVfd2lkdGggKyB4 cF90dV07CisgICAgICAgICAgICB1aW50OF90IGN1cnJfY2JmX2x1bWEgPSBmYy0+dGFiLnR1X2Nv ZGVkX2ZsYWdbTFVNQV1beV90dSAqIG1pbl90dV93aWR0aCArIHhxX3R1XTsKKyAgICAgICAgICAg IHVpbnQ4X3QgcGNtZiAgICAgICAgICA9IGZjLT50YWIucGNtZltMVU1BXVt5X3R1ICogbWluX3R1 X3dpZHRoICsgeHBfdHVdICYmCisgICAgICAgICAgICAgICAgZmMtPnRhYi5wY21mW0xVTUFdW3lf dHUgKiBtaW5fdHVfd2lkdGggKyB4cV90dV07CisKKyAgICAgICAgICAgIGlmIChwY21mKQorICAg ICAgICAgICAgICAgIGJzID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1cnItPnByZWRfZmxh ZyA9PSBQRl9JTlRSQSB8fCBsZWZ0LT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgY3Vyci0+Y2lp cF9mbGFnIHx8IGxlZnQtPmNpaXBfZmxhZykKKyAgICAgICAgICAgICAgICBicyA9IDI7CisgICAg ICAgICAgICBlbHNlIGlmIChjdXJyX2NiZl9sdW1hIHx8IGxlZnRfY2JmX2x1bWEpCisgICAgICAg ICAgICAgICAgYnMgPSAxOworICAgICAgICAgICAgZWxzZSBpZiAob2ZmX3ggJiYgKChvZmZfeCAl IDgpIHx8ICFoYXNfdmVydGljYWxfc2IpKQorICAgICAgICAgICAgICAgIGJzID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vL2luc2lkZSBhIGN1LCBub3QgYWxpZ25l ZCB0byA4IG9yIHdpdGggbm8gc3ViYmxvY2tzCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgICAgYnMgPSBib3VuZGFyeV9zdHJlbmd0aChsYywgY3VyciwgbGVmdCwgcnBsX2xlZnQpOwor CisgICAgICAgICAgICBUQUJfQlMoZmMtPnRhYi52ZXJ0aWNhbF9ic1tMVU1BXSwgeDAsICh5MCAr IGkpKSA9IGJzOworCisgICAgICAgICAgICBkZXJpdmVfbWF4X2ZpbHRlcl9sZW5ndGhfbHVtYShm YywgeDAsIHkwICsgaSwgaXNfaW50cmEsIGhhc192ZXJ0aWNhbF9zYiwgMSwgJm1heF9sZW5fcCwg Jm1heF9sZW5fcSk7CisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLnZlcnRpY2FsX3As IHgwLCB5MCArIGkpID0gbWF4X2xlbl9wOworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRh Yi52ZXJ0aWNhbF9xLCB4MCwgeTAgKyBpKSA9IG1heF9sZW5fcTsKKyAgICAgICAgfQorICAgIH0K KworICAgIGlmICghaXNfaW50cmEpIHsKKyAgICAgICAgaWYgKGZjLT50YWIubXNmW29mZl9xXSB8 fCBmYy0+dGFiLmlhZltvZmZfcV0pCisgICAgICAgICAgICB2dmNfZGVibG9ja19zdWJibG9ja19i c192ZXJ0aWNhbChsYywgY2JfeCwgY2JfeSwgeDAsIHkwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9 CisKK30KK3N0YXRpYyB2b2lkIHZ2Y19kZWJsb2NrX2JzX2x1bWFfaG9yaXpvbnRhbChjb25zdCBW VkNMb2NhbENvbnRleHQgKmxjLAorICAgIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25z dCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250 ZXh0ICpmYyAgPSBsYy0+ZmM7CisgICAgTXZGaWVsZCAqdGFiX212ZiAgICAgICAgICAgPSBmYy0+ dGFiLm12ZjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSA9IE1JTl9QVV9MT0cyOwor ICAgIGNvbnN0IGludCBsb2cyX21pbl90dV9zaXplID0gTUlOX1RVX0xPRzI7CisgICAgY29uc3Qg aW50IG1pbl9wdV93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAgY29u c3QgaW50IG1pbl90dV93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGg7CisgICAg Y29uc3QgaW50IG1pbl9jYl9sb2cyICAgICAgPSBmYy0+cHMuc3BzLT5taW5fY2JfbG9nMl9zaXpl X3k7CisgICAgY29uc3QgaW50IG1pbl9jYl93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fY2Jf d2lkdGg7CisgICAgaW50IGlzX2ludHJhID0gdGFiX212ZlsoeTAgPj4gbG9nMl9taW5fcHVfc2l6 ZSkgKiBtaW5fcHVfd2lkdGggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgKHgwID4+IGxv ZzJfbWluX3B1X3NpemUpXS5wcmVkX2ZsYWcgPT0gUEZfSU5UUkE7CisgICAgaW50IGJvdW5kYXJ5 X3VwcGVyOworICAgIGludCBpLCBicywgaGFzX2hvcml6b250YWxfc2IgPSAwOworICAgIHVpbnQ4 X3QgbWF4X2xlbl9wLCBtYXhfbGVuX3E7CisKKyAgICBjb25zdCBpbnQgb2ZmX3EgICAgICAgICAg ICA9ICh5MCA+PiBtaW5fY2JfbG9nMikgKiBtaW5fY2Jfd2lkdGggKyAoeDAgPj4gbWluX2NiX2xv ZzIpOworICAgIGNvbnN0IGludCBjYl94ICAgICAgICAgICAgID0gZmMtPnRhYi5jYl9wb3NfeFtM VU1BXVtvZmZfcV07CisgICAgY29uc3QgaW50IGNiX3kgICAgICAgICAgICAgPSBmYy0+dGFiLmNi X3Bvc195W0xVTUFdW29mZl9xXTsKKyAgICBjb25zdCBpbnQgY2JfaGVpZ2h0ICAgICAgICA9IGZj LT50YWIuY2JfaGVpZ2h0W0xVTUFdW29mZl9xXTsKKworICAgIGlmICghaXNfaW50cmEpIHsKKyAg ICAgICAgaWYgKGZjLT50YWIubXNmW29mZl9xXSB8fCBmYy0+dGFiLmlhZltvZmZfcV0pCisgICAg ICAgICAgICBoYXNfaG9yaXpvbnRhbF9zYiA9IGNiX2hlaWdodCA+IDg7CisgICAgfQorCisgICAg Ym91bmRhcnlfdXBwZXIgPSB5MCA+IDAgJiYgISh5MCAmIDMpOworICAgIGlmIChib3VuZGFyeV91 cHBlciAmJgorICAgICAgICAoKCFmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3Nz X3NsaWNlc19lbmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAm IEJPVU5EQVJZX1VQUEVSX1NMSUNFICYmCisgICAgICAgICAgICAoeTAgJSAoMSA8PCBmYy0+cHMu c3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSB8fAorICAgICAgICAgICAgKCFmYy0+cHMucHBz LT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxhZyAmJgorICAgICAg ICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfVElMRSAmJgorICAgICAg ICAgICAgKHkwICUgKDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95KSkgPT0gMCkpKQor ICAgICAgICBib3VuZGFyeV91cHBlciA9IDA7CisKKyAgICBpZiAoYm91bmRhcnlfdXBwZXIpIHsK KyAgICAgICAgY29uc3QgUmVmUGljTGlzdCAqcnBsX3RvcCA9CisgICAgICAgICAgICAobGMtPmJv dW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0UpID8gZmZfdnZjX2dldF9yZWZfbGlz dChmYywgZmMtPnJlZiwgeDAsIHkwIC0gMSkgOiBsYy0+c2MtPnJwbDsKKyAgICAgICAgaW50IHlw X3B1ID0gKHkwIC0gMSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgaW50IHlxX3B1ID0g IHkwICAgICAgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgaW50IHlwX3R1ID0gKHkwIC0g MSkgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKyAgICAgICAgaW50IHlxX3R1ID0gIHkwICAgICAgPj4g bG9nMl9taW5fdHVfc2l6ZTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGg7IGkgKz0g NCkgeworICAgICAgICAgICAgY29uc3QgaW50IG9mZl95ID0geTAgLSBjYl95OworICAgICAgICAg ICAgaW50IHhfcHUgPSAoeDAgKyBpKSA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICAgICAg aW50IHhfdHUgPSAoeDAgKyBpKSA+PiBsb2cyX21pbl90dV9zaXplOworICAgICAgICAgICAgTXZG aWVsZCAqdG9wICA9ICZ0YWJfbXZmW3lwX3B1ICogbWluX3B1X3dpZHRoICsgeF9wdV07CisgICAg ICAgICAgICBNdkZpZWxkICpjdXJyID0gJnRhYl9tdmZbeXFfcHUgKiBtaW5fcHVfd2lkdGggKyB4 X3B1XTsKKyAgICAgICAgICAgIHVpbnQ4X3QgdG9wX2NiZl9sdW1hICA9IGZjLT50YWIudHVfY29k ZWRfZmxhZ1tMVU1BXVt5cF90dSAqIG1pbl90dV93aWR0aCArIHhfdHVdOworICAgICAgICAgICAg dWludDhfdCBjdXJyX2NiZl9sdW1hID0gZmMtPnRhYi50dV9jb2RlZF9mbGFnW0xVTUFdW3lxX3R1 ICogbWluX3R1X3dpZHRoICsgeF90dV07CisgICAgICAgICAgICBjb25zdCB1aW50OF90IHBjbWYg ICAgPSBmYy0+dGFiLnBjbWZbTFVNQV1beXBfdHUgKiBtaW5fdHVfd2lkdGggKyB4X3R1XSAmJgor ICAgICAgICAgICAgICAgIGZjLT50YWIucGNtZltMVU1BXVt5cV90dSAqIG1pbl90dV93aWR0aCAr IHhfdHVdOworCisgICAgICAgICAgICBpZiAocGNtZikKKyAgICAgICAgICAgICAgICBicyA9IDA7 CisgICAgICAgICAgICBlbHNlIGlmIChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgdG9w LT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgY3Vyci0+Y2lpcF9mbGFnIHx8IHRvcC0+Y2lpcF9m bGFnKQorICAgICAgICAgICAgICAgIGJzID0gMjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJf Y2JmX2x1bWEgfHwgdG9wX2NiZl9sdW1hKQorICAgICAgICAgICAgICAgIGJzID0gMTsKKyAgICAg ICAgICAgIGVsc2UgaWYgKG9mZl95ICYmICgob2ZmX3kgJSA4KSB8fCAhaGFzX2hvcml6b250YWxf c2IpKQorICAgICAgICAgICAgICAgIGJzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy9pbnNpZGUgYSBjdSwgbm90IGFsaWduZWQgdG8gOCBvciB3aXRoIG5vIHN1YmJs b2NrcworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJzID0gYm91bmRhcnlfc3Ry ZW5ndGgobGMsIGN1cnIsIHRvcCwgcnBsX3RvcCk7CisKKyAgICAgICAgICAgIFRBQl9CUyhmYy0+ dGFiLmhvcml6b250YWxfYnNbTFVNQV0sIHgwICsgaSwgeTApID0gYnM7CisKKyAgICAgICAgICAg IGRlcml2ZV9tYXhfZmlsdGVyX2xlbmd0aF9sdW1hKGZjLCB4MCArIGksIHkwLCBpc19pbnRyYSwg aGFzX2hvcml6b250YWxfc2IsIDAsICZtYXhfbGVuX3AsICZtYXhfbGVuX3EpOworICAgICAgICAg ICAgVEFCX01BWF9MRU4oZmMtPnRhYi5ob3Jpem9udGFsX3AsIHgwICsgaSwgeTApID0gbWF4X2xl bl9wOworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi5ob3Jpem9udGFsX3EsIHgwICsg aSwgeTApID0gbWF4X2xlbl9xOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFpc19pbnRy YSkgeworICAgICAgICBpZiAoZmMtPnRhYi5tc2Zbb2ZmX3FdIHx8IGZjLT50YWIuaWFmW29mZl9x XSkKKyAgICAgICAgICAgIHZ2Y19kZWJsb2NrX3N1YmJsb2NrX2JzX2hvcml6b250YWwobGMsIGNi X3gsIGNiX3ksIHgwLCB5MCwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorfQorCitzdGF0aWMgdm9p ZCB2dmNfZGVibG9ja19ic19jaHJvbWFfdmVydGljYWwoY29uc3QgVlZDTG9jYWxDb250ZXh0ICps YywKKyAgICBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25z dCBpbnQgaGVpZ2h0KQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgID0gbGMtPmZj OworICAgIE12RmllbGQgKnRhYl9tdmYgICAgICAgICAgID0gZmMtPnRhYi5tdmY7CisgICAgY29u c3QgaW50IGxvZzJfbWluX3B1X3NpemUgPSBNSU5fUFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbG9n Ml9taW5fdHVfc2l6ZSA9IE1JTl9QVV9MT0cyOworICAgIGNvbnN0IGludCBtaW5fcHVfd2lkdGgg ICAgID0gZmMtPnBzLnBwcy0+bWluX3B1X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fdHVfd2lk dGggICAgID0gZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoOworICAgIGludCBib3VuZGFyeV9sZWZ0 LCBpOworCisgICAgLy8gYnMgZm9yIHZlcnRpY2FsIFRVIGJvdW5kYXJpZXMKKyAgICBib3VuZGFy eV9sZWZ0ID0geDAgPiAwICYmICEoeDAgJiAoKENIUk9NQV9HUklEIDw8IGZjLT5wcy5zcHMtPmhz aGlmdFsxXSkgLSAxKSk7CisgICAgaWYgKGJvdW5kYXJ5X2xlZnQgJiYKKyAgICAgICAgKCghZmMt PnBzLnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnICYm CisgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9TTElDRSAmJgor ICAgICAgICAgICh4MCAlICgxIDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDAp IHx8CisgICAgICAgICAoIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3NfdGls ZXNfZW5hYmxlZF9mbGFnICYmCisgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRB UllfTEVGVF9USUxFICYmCisgICAgICAgICAgKHgwICUgKDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xv ZzJfc2l6ZV95KSkgPT0gMCkpKQorICAgICAgICBib3VuZGFyeV9sZWZ0ID0gMDsKKworICAgIGlm IChib3VuZGFyeV9sZWZ0KSB7CisgICAgICAgIGludCB4cF9wdSA9ICh4MCAtIDEpID4+IGxvZzJf bWluX3B1X3NpemU7CisgICAgICAgIGludCB4cV9wdSA9ICB4MCAgICAgID4+IGxvZzJfbWluX3B1 X3NpemU7CisgICAgICAgIGludCB4cF90dSA9ICh4MCAtIDEpID4+IGxvZzJfbWluX3R1X3NpemU7 CisgICAgICAgIGludCB4cV90dSA9ICB4MCAgICAgID4+IGxvZzJfbWluX3R1X3NpemU7CisKKyAg ICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSArPSAyKSB7CisgICAgICAgICAgICBpbnQg eV9wdSAgICAgID0gKHkwICsgaSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgICAgIGlu dCB5X3R1ICAgICAgPSAoeTAgKyBpKSA+PiBsb2cyX21pbl90dV9zaXplOworICAgICAgICAgICAg TXZGaWVsZCAqbGVmdCA9ICZ0YWJfbXZmW3lfcHUgKiBtaW5fcHVfd2lkdGggKyB4cF9wdV07Cisg ICAgICAgICAgICBNdkZpZWxkICpjdXJyID0gJnRhYl9tdmZbeV9wdSAqIG1pbl9wdV93aWR0aCAr IHhxX3B1XTsKKyAgICAgICAgICAgIGNvbnN0IGludCBsZWZ0X3R1ID0geV90dSAqIG1pbl90dV93 aWR0aCArIHhwX3R1OworICAgICAgICAgICAgY29uc3QgaW50IGN1cnJfdHUgPSB5X3R1ICogbWlu X3R1X3dpZHRoICsgeHFfdHU7CisgICAgICAgICAgICBjb25zdCB1aW50OF90IHBjbWYgPSBmYy0+ dGFiLnBjbWZbQ0hST01BXVtsZWZ0X3R1XSAmJiBmYy0+dGFiLnBjbWZbQ0hST01BXVtjdXJyX3R1 XTsKKworICAgICAgICAgICAgZm9yIChpbnQgYyA9IENCOyBjIDw9IENSOyBjKyspIHsKKyAgICAg ICAgICAgICAgICB1aW50OF90IGNiZiAgPSBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbY11bbGVmdF90 dV0gfAorICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbY11bY3Vycl90 dV0gfAorICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnR1X2pvaW50X2NiY3JfcmVzaWR1YWxf ZmxhZ1tsZWZ0X3R1XSB8CisgICAgICAgICAgICAgICAgICAgIGZjLT50YWIudHVfam9pbnRfY2Jj cl9yZXNpZHVhbF9mbGFnW2N1cnJfdHVdOworICAgICAgICAgICAgICAgIGludCBicyA9IDA7CisK KyAgICAgICAgICAgICAgICBpZiAocGNtZikKKyAgICAgICAgICAgICAgICAgICAgYnMgPSAwOwor ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnItPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCBs ZWZ0LT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgY3Vyci0+Y2lpcF9mbGFnIHx8IGxlZnQtPmNp aXBfZmxhZykKKyAgICAgICAgICAgICAgICAgICAgYnMgPSAyOworICAgICAgICAgICAgICAgIGVs c2UgaWYgKGNiZikKKyAgICAgICAgICAgICAgICAgICAgYnMgPSAxOworICAgICAgICAgICAgICAg IFRBQl9CUyhmYy0+dGFiLnZlcnRpY2FsX2JzW2NdLCB4MCwgKHkwICsgaSkpID0gYnM7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZ2Y19kZWJsb2Nr X2JzX2Nocm9tYV9ob3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29u c3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdo dCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMtPmZjOworICAgIE12Rmll bGQgKnRhYl9tdmYgPSBmYy0+dGFiLm12ZjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6 ZSA9IE1JTl9QVV9MT0cyOworICAgIGNvbnN0IGludCBsb2cyX21pbl90dV9zaXplID0gTUlOX1BV X0xPRzI7CisgICAgY29uc3QgaW50IG1pbl9wdV93aWR0aCA9IGZjLT5wcy5wcHMtPm1pbl9wdV93 aWR0aDsKKyAgICBjb25zdCBpbnQgbWluX3R1X3dpZHRoID0gZmMtPnBzLnBwcy0+bWluX3R1X3dp ZHRoOworICAgIGludCBib3VuZGFyeV91cHBlcjsKKyAgICBpbnQgaTsKKworICAgIGJvdW5kYXJ5 X3VwcGVyID0geTAgPiAwICYmICEoeTAgJiAoKENIUk9NQV9HUklEIDw8IGZjLT5wcy5zcHMtPnZz aGlmdFsxXSkgLSAxKSk7CisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyICYmCisgICAgICAgICgoIWZj LT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyAm JgorICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0Ug JiYKKyAgICAgICAgICAgICh5MCAlICgxIDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkp ID09IDApIHx8CisgICAgICAgICAgICAoIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9h Y3Jvc3NfdGlsZXNfZW5hYmxlZF9mbGFnICYmCisgICAgICAgICAgICAgICAgbGMtPmJvdW5kYXJ5 X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfVElMRSAmJgorICAgICAgICAgICAgICAgICh5MCAlICgx IDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDApKSkKKyAgICAgICAgYm91bmRh cnlfdXBwZXIgPSAwOworCisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyKSB7CisgICAgICAgIGludCB5 cF9wdSA9ICh5MCAtIDEpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgIGludCB5cV9wdSA9 IHkwID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgIGludCB5cF90dSA9ICh5MCAtIDEpID4+ IGxvZzJfbWluX3R1X3NpemU7CisgICAgICAgIGludCB5cV90dSA9IHkwID4+IGxvZzJfbWluX3R1 X3NpemU7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpICs9IDIpIHsKKyAgICAg ICAgICAgIGludCB4X3B1ID0gKHgwICsgaSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAg ICAgIGludCB4X3R1ID0gKHgwICsgaSkgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKyAgICAgICAgICAg IE12RmllbGQgKnRvcCA9ICZ0YWJfbXZmW3lwX3B1ICogbWluX3B1X3dpZHRoICsgeF9wdV07Cisg ICAgICAgICAgICBNdkZpZWxkICpjdXJyID0gJnRhYl9tdmZbeXFfcHUgKiBtaW5fcHVfd2lkdGgg KyB4X3B1XTsKKyAgICAgICAgICAgIGNvbnN0IGludCB0b3BfdHUgPSB5cF90dSAqIG1pbl90dV93 aWR0aCArIHhfdHU7CisgICAgICAgICAgICBjb25zdCBpbnQgY3Vycl90dSA9IHlxX3R1ICogbWlu X3R1X3dpZHRoICsgeF90dTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgcGNtZiA9IGZjLT50 YWIucGNtZltDSFJPTUFdW3RvcF90dV0gJiYgZmMtPnRhYi5wY21mW0NIUk9NQV1bY3Vycl90dV07 CisKKyAgICAgICAgICAgIGZvciAoaW50IGMgPSBDQjsgYyA8PSBDUjsgYysrKSB7CisgICAgICAg ICAgICAgICAgdWludDhfdCBjYmYgPSBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbY11bdG9wX3R1XSB8 CisgICAgICAgICAgICAgICAgICAgIGZjLT50YWIudHVfY29kZWRfZmxhZ1tjXVtjdXJyX3R1XSB8 CisgICAgICAgICAgICAgICAgICAgIGZjLT50YWIudHVfam9pbnRfY2Jjcl9yZXNpZHVhbF9mbGFn W3RvcF90dV0gfAorICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnR1X2pvaW50X2NiY3JfcmVz aWR1YWxfZmxhZ1tjdXJyX3R1XTsKKyAgICAgICAgICAgICAgICBpbnQgYnMgPSAwOworCisgICAg ICAgICAgICAgICAgaWYgKHBjbWYpCisgICAgICAgICAgICAgICAgICAgIGJzID0gMDsKKyAgICAg ICAgICAgICAgICBlbHNlIGlmIChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgdG9wLT5w cmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgY3Vyci0+Y2lpcF9mbGFnIHx8IHRvcC0+Y2lpcF9mbGFn KQorICAgICAgICAgICAgICAgICAgICBicyA9IDI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo Y2JmKQorICAgICAgICAgICAgICAgICAgICBicyA9IDE7CisgICAgICAgICAgICAgICAgVEFCX0JT KGZjLT50YWIuaG9yaXpvbnRhbF9ic1tjXSwgeDAgKyBpLCB5MCkgPSBiczsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgIH0KK30KKwordHlwZWRlZiB2b2lkICgqZGVibG9ja19ic19mbiko Y29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsCisg ICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KTsKKworc3RhdGljIHZvaWQgdnZj X2RlYmxvY2tfYnMoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25z dCBpbnQgeTAsIGNvbnN0IGludCB2ZXJ0aWNhbCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRl eHQgKmZjID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOwor ICAgIGNvbnN0IFZWQ1BQUyAqcHBzICAgPSBmYy0+cHMucHBzOworICAgIGNvbnN0IGludCBjdGJf c2l6ZSAgPSBzcHMtPmN0Yl9zaXplX3k7CisgICAgY29uc3QgaW50IHhfZW5kICAgICA9IEZGTUlO KHgwICsgY3RiX3NpemUsIHBwcy0+d2lkdGgpID4+IE1JTl9UVV9MT0cyOworICAgIGNvbnN0IGlu dCB5X2VuZCAgICAgPSBGRk1JTih5MCArIGN0Yl9zaXplLCBwcHMtPmhlaWdodCkgPj4gTUlOX1RV X0xPRzI7CisgICAgZGVibG9ja19ic19mbiBkZWJsb2NrX2JzWzJdWzJdID0geworICAgICAgICB7 IHZ2Y19kZWJsb2NrX2JzX2x1bWFfaG9yaXpvbnRhbCwgdnZjX2RlYmxvY2tfYnNfY2hyb21hX2hv cml6b250YWwgfSwKKyAgICAgICAgeyB2dmNfZGVibG9ja19ic19sdW1hX3ZlcnRpY2FsLCAgIHZ2 Y19kZWJsb2NrX2JzX2Nocm9tYV92ZXJ0aWNhbCAgIH0KKyAgICB9OworCisgICAgZm9yIChpbnQg aXNfY2hyb21hID0gMDsgaXNfY2hyb21hIDw9IDE7IGlzX2Nocm9tYSsrKSB7CisgICAgICAgIGNv bnN0IGludCBocyA9IHNwcy0+aHNoaWZ0W2lzX2Nocm9tYV07CisgICAgICAgIGNvbnN0IGludCB2 cyA9IHNwcy0+dnNoaWZ0W2lzX2Nocm9tYV07CisgICAgICAgIGZvciAoaW50IHkgPSB5MCA+PiBN SU5fVFVfTE9HMjsgeSA8IHlfZW5kOyB5KyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IHggPSB4 MCA+PiBNSU5fVFVfTE9HMjsgeCA8IHhfZW5kOyB4KyspIHsKKyAgICAgICAgICAgICAgICBjb25z dCBpbnQgb2ZmID0geSAqIGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aCArIHg7CisgICAgICAgICAg ICAgICAgaWYgKChmYy0+dGFiLnRiX3Bvc194MFtpc19jaHJvbWFdW29mZl0gPj4gTUlOX1RVX0xP RzIpID09IHggJiYgKGZjLT50YWIudGJfcG9zX3kwW2lzX2Nocm9tYV1bb2ZmXSA+PiBNSU5fVFVf TE9HMikgPT0geSkgeworICAgICAgICAgICAgICAgICAgICBkZWJsb2NrX2JzW3ZlcnRpY2FsXVtp c19jaHJvbWFdKGxjLCB4IDw8IE1JTl9UVV9MT0cyLCB5IDw8IE1JTl9UVV9MT0cyLAorICAgICAg ICAgICAgICAgICAgICAgICAgZmMtPnRhYi50Yl93aWR0aFtpc19jaHJvbWFdW29mZl0gPDwgaHMs IGZjLT50YWIudGJfaGVpZ2h0W2lzX2Nocm9tYV1bb2ZmXSA8PCB2cyk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisvL3BhcnQgb2YgOC44 LjMuMyBEZXJpdmF0aW9uIHByb2Nlc3Mgb2YgdHJhbnNmb3JtIGJsb2NrIGJvdW5kYXJ5CitzdGF0 aWMgdm9pZCBtYXhfZmlsdGVyX2xlbmd0aF9sdW1hKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMs IGNvbnN0IGludCBxeCwgY29uc3QgaW50IHF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBpbnQgdmVydGljYWwsIHVpbnQ4X3QgKm1heF9sZW5fcCwgdWludDhfdCAq bWF4X2xlbl9xKQoreworICAgIGNvbnN0IHVpbnQ4X3QgKnRhYl9sZW5fcCA9IHZlcnRpY2FsID8g ZmMtPnRhYi52ZXJ0aWNhbF9wIDogZmMtPnRhYi5ob3Jpem9udGFsX3A7CisgICAgY29uc3QgdWlu dDhfdCAqdGFiX2xlbl9xID0gdmVydGljYWwgPyBmYy0+dGFiLnZlcnRpY2FsX3EgOiBmYy0+dGFi Lmhvcml6b250YWxfcTsKKyAgICAqbWF4X2xlbl9wID0gVEFCX01BWF9MRU4odGFiX2xlbl9wLCBx eCwgcXkpOworICAgICptYXhfbGVuX3EgPSBUQUJfTUFYX0xFTih0YWJfbGVuX3EsIHF4LCBxeSk7 Cit9CisKKy8vcGFydCBvZiA4LjguMy4zIERlcml2YXRpb24gcHJvY2VzcyBvZiB0cmFuc2Zvcm0g YmxvY2sgYm91bmRhcnkKK3N0YXRpYyB2b2lkIG1heF9maWx0ZXJfbGVuZ3RoX2Nocm9tYShjb25z dCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBpbnQgcXgsIGNvbnN0IGludCBxeSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgdmVydGljYWwsIGNvbnN0 IGludCBob3Jpem9udGFsX2N0dV9lZGdlLCBjb25zdCBpbnQgYnMsIHVpbnQ4X3QgKm1heF9sZW5f cCwgdWludDhfdCAqbWF4X2xlbl9xKQoreworICAgIGNvbnN0IGludCBweCA9ICB2ZXJ0aWNhbCA/ IHF4IC0gMSA6IHF4OworICAgIGNvbnN0IGludCBweSA9ICF2ZXJ0aWNhbCA/IHF5IC0gMSA6IHF5 OworICAgIGNvbnN0IHVpbnQ4X3QgKnRiX3NpemUgPSB2ZXJ0aWNhbCA/IGZjLT50YWIudGJfd2lk dGhbQ0hST01BXSA6IGZjLT50YWIudGJfaGVpZ2h0W0NIUk9NQV07CisKKyAgICBjb25zdCBpbnQg c2l6ZV9wID0gdGJfc2l6ZVsocHkgPj4gTUlOX1RVX0xPRzIpICogZmMtPnBzLnBwcy0+bWluX3R1 X3dpZHRoICsgKHB4ID4+IE1JTl9UVV9MT0cyKV07CisgICAgY29uc3QgaW50IHNpemVfcSA9IHRi X3NpemVbKHF5ID4+IE1JTl9UVV9MT0cyKSAqIGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aCArIChx eCA+PiBNSU5fVFVfTE9HMildOworICAgIGlmIChzaXplX3AgPj0gOCAmJiBzaXplX3EgPj0gOCkg eworICAgICAgICAqbWF4X2xlbl9wID0gKm1heF9sZW5fcSA9IDM7CisgICAgICAgIGlmIChob3Jp em9udGFsX2N0dV9lZGdlKQorICAgICAgICAgICAgKm1heF9sZW5fcCA9IDE7CisgICAgfSBlbHNl IHsKKyAgICAgICAgLy9wYXJ0IG9mIDguOC4zLjYuNCBEZWNpc2lvbiBwcm9jZXNzIGZvciBjaHJv bWEgYmxvY2sgZWRnZXMKKyAgICAgICAgKm1heF9sZW5fcCA9ICptYXhfbGVuX3EgPSAoYnMgPT0g Mik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBtYXhfZmlsdGVyX2xlbmd0aChjb25zdCBWVkNG cmFtZUNvbnRleHQgKmZjLCBjb25zdCBpbnQgcXgsIGNvbnN0IGludCBxeSwKKyAgICBjb25zdCBp bnQgY19pZHgsIGNvbnN0IGludCB2ZXJ0aWNhbCwgY29uc3QgaW50IGhvcml6b250YWxfY3R1X2Vk Z2UsIGNvbnN0IGludCBicywgdWludDhfdCAqbWF4X2xlbl9wLCB1aW50OF90ICptYXhfbGVuX3Ep Cit7CisgICAgaWYgKCFjX2lkeCkKKyAgICAgICAgbWF4X2ZpbHRlcl9sZW5ndGhfbHVtYShmYywg cXgsIHF5LCB2ZXJ0aWNhbCwgbWF4X2xlbl9wLCBtYXhfbGVuX3EpOworICAgIGVsc2UKKyAgICAg ICAgbWF4X2ZpbHRlcl9sZW5ndGhfY2hyb21hKGZjLCBxeCwgcXksIHZlcnRpY2FsLCBob3Jpem9u dGFsX2N0dV9lZGdlLCBicywgbWF4X2xlbl9wLCBtYXhfbGVuX3EpOworfQorCisjZGVmaW5lIFRD X0NBTEMocXAsIGJzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgdGN0YWJsZVthdl9jbGlwKChxcCkgKyBERUZBVUxUX0lOVFJBX1RDX09GRlNF VCAqICgoYnMpIC0gMSkgKyAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICh0Y19vZmZzZXQg JiAtMiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg ICAgICAgIDAsIE1BWF9RUCArIERFRkFVTFRfSU5UUkFfVENfT0ZGU0VUKV0KKworLy8gcGFydCBv ZiA4LjguMy42LjIgRGVjaXNpb24gcHJvY2VzcyBmb3IgbHVtYSBibG9jayBlZGdlcworc3RhdGlj IGludCBnZXRfcXBfeShjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCB1aW50OF90ICpz cmMsIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwgY29uc3QgaW50IHZlcnRpY2FsKQoreworICAg IGNvbnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IGludCBxcCAgICAg ICAgPSAoZmZfdnZjX2dldF9xUHkoZmMsIHggLSB2ZXJ0aWNhbCwgeSAtICF2ZXJ0aWNhbCkgKyBm Zl92dmNfZ2V0X3FQeShmYywgeCwgeSkgKyAxKSA+PiAxOworICAgIGludCBxcF9vZmZzZXQgICAg ICAgPSAwOworICAgIGludCBsZXZlbDsKKworICAgIGlmICghc3BzLT5yLT5zcHNfbGFkZl9lbmFi bGVkX2ZsYWcpCisgICAgICAgIHJldHVybiBxcDsKKworICAgIGxldmVsID0gZmMtPnZ2Y2RzcC5s Zi5sYWRmX2xldmVsW3ZlcnRpY2FsXShzcmMsIGZjLT5mcmFtZS0+bGluZXNpemVbTFVNQV0pOwor ICAgIHFwX29mZnNldCA9IHNwcy0+ci0+c3BzX2xhZGZfbG93ZXN0X2ludGVydmFsX3FwX29mZnNl dDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNwcy0+bnVtX2xhZGZfaW50ZXJ2YWxzIC0gMSAm JiBsZXZlbCA+IHNwcy0+bGFkZl9pbnRlcnZhbF9sb3dlcl9ib3VuZFtpICsgMV07IGkrKykKKyAg ICAgICAgcXBfb2Zmc2V0ID0gc3BzLT5yLT5zcHNfbGFkZl9xcF9vZmZzZXRbaV07CisKKyAgICBy ZXR1cm4gcXAgKyBxcF9vZmZzZXQ7Cit9CisKKy8vIHBhcnQgb2YgOC44LjMuNi4yIERlY2lzaW9u IHByb2Nlc3MgZm9yIGx1bWEgYmxvY2sgZWRnZXMKK3N0YXRpYyBpbnQgZ2V0X3FwX2MoY29uc3Qg VlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBjb25zdCBpbnQg Y19pZHgsIGNvbnN0IGludCB2ZXJ0aWNhbCkKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgID0g ZmMtPnBzLnNwczsKKyAgICByZXR1cm4gKGdldF9xUGMoZmMsIHggLSB2ZXJ0aWNhbCwgeSAtICF2 ZXJ0aWNhbCwgY19pZHgpICsgZ2V0X3FQYyhmYywgeCwgeSwgY19pZHgpIC0gMiAqIHNwcy0+cXBf YmRfb2Zmc2V0ICsgMSkgPj4gMTsKK30KKworc3RhdGljIGludCBnZXRfcXAoY29uc3QgVlZDRnJh bWVDb250ZXh0ICpmYywgY29uc3QgdWludDhfdCAqc3JjLCBjb25zdCBpbnQgeCwgY29uc3QgaW50 IHksIGNvbnN0IGludCBjX2lkeCwgY29uc3QgaW50IHZlcnRpY2FsKQoreworICAgIGlmICghY19p ZHgpCisgICAgICAgIHJldHVybiBnZXRfcXBfeShmYywgc3JjLCB4LCB5LCB2ZXJ0aWNhbCk7Cisg ICAgcmV0dXJuIGdldF9xcF9jKGZjLCB4LCB5LCBjX2lkeCwgdmVydGljYWwpOworfQorCit2b2lk IGZmX3Z2Y19kZWJsb2NrX3ZlcnRpY2FsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4 MCwgaW50IHkwKQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgY29u c3QgVlZDU1BTICpzcHMgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IGNfZW5kICAgICA9 IHNwcy0+ci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID8gVlZDX01BWF9TQU1QTEVfQVJSQVlTIDog MTsKKyAgICB1aW50OF90ICpzcmM7CisgICAgaW50IHgsIHksIHFwOworCisgICAgLy9ub3QgdXNl IHRoaXMgeWV0LCBtYXkgbmVlZGVkIGJ5IHBsdC4KKyAgICBjb25zdCB1aW50OF90IG5vX3BbNF0g PSB7IDAgfTsKKyAgICBjb25zdCB1aW50OF90IG5vX3FbNF0gPSB7IDAgfSA7CisKKyAgICBpbnQg Y3RiX2xvZzJfc2l6ZV95ID0gZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGludCB4 X2VuZCwgeV9lbmQ7CisgICAgaW50IGN0Yl9zaXplID0gMSA8PCBjdGJfbG9nMl9zaXplX3k7Cisg ICAgaW50IGN0YiA9ICh4MCA+PiBjdGJfbG9nMl9zaXplX3kpICsKKyAgICAgICAgKHkwID4+IGN0 Yl9sb2cyX3NpemVfeSkgKiBmYy0+cHMucHBzLT5jdGJfd2lkdGg7CisgICAgREJQYXJhbXMgICpw YXJhbXMgPSBmYy0+dGFiLmRlYmxvY2sgKyBjdGI7CisKKyAgICB2dmNfZGVibG9ja19icyhsYywg eDAsIHkwLCAxKTsKKworICAgIHhfZW5kID0geDAgKyBjdGJfc2l6ZTsKKyAgICBpZiAoeF9lbmQg PiBmYy0+cHMuc3BzLT53aWR0aCkKKyAgICAgICAgeF9lbmQgPSBmYy0+cHMuc3BzLT53aWR0aDsK KyAgICB5X2VuZCA9IHkwICsgY3RiX3NpemU7CisgICAgaWYgKHlfZW5kID4gZmMtPnBzLnNwcy0+ aGVpZ2h0KQorICAgICAgICB5X2VuZCA9IGZjLT5wcy5zcHMtPmhlaWdodDsKKworICAgIGZvciAo aW50IGNfaWR4ID0gMDsgY19pZHggPCBjX2VuZDsgY19pZHgrKykgeworICAgICAgICBjb25zdCBp bnQgaHMgICAgICAgICAgICA9IHNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50 IHZzICAgICAgICAgICAgPSBzcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAgIGNvbnN0IGludCBn cmlkICAgICAgICAgID0gY19pZHggPyAoQ0hST01BX0dSSUQgPDwgaHMpIDogTFVNQV9HUklEOwor ICAgICAgICBjb25zdCBpbnQgdGNfb2Zmc2V0ICAgICA9IHBhcmFtcy0+dGNfb2Zmc2V0W2NfaWR4 XTsKKyAgICAgICAgY29uc3QgaW50IGJldGFfb2Zmc2V0ICAgPSBwYXJhbXMtPmJldGFfb2Zmc2V0 W2NfaWR4XTsKKworICAgICAgICBmb3IgKHkgPSB5MDsgeSA8IHlfZW5kOyB5ICs9IChERUJMT0NL X1NURVAgPDwgdnMpKSB7CisgICAgICAgICAgICBmb3IgKHggPSB4MCA/IHgwIDogZ3JpZDsgeCA8 IHhfZW5kOyB4ICs9IGdyaWQpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGJzWzRdLCBiZXRh WzRdLCB0Y1s0XSwgYWxsX3plcm9fYnMgPSAxOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWF4 X2xlbl9wWzRdLCBtYXhfbGVuX3FbNF07CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IERFQkxPQ0tfU1RFUCA+PiAoMiAtIHZzKTsgaSsrKSB7CisgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGludCBkeSA9IGkgPDwgMjsKKyAgICAgICAgICAgICAgICAgICAgYnNbaV0gPSAo eSArIGR5IDwgeV9lbmQpID8gVEFCX0JTKGZjLT50YWIudmVydGljYWxfYnNbY19pZHhdLCB4LCB5 ICsgZHkpIDogMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJzW2ldKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBzcmMgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4XVsoKHkgKyBkeSkgPj4g dnMpICogZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0gKyAoKHggPj4gaHMpIDw8IGZjLT5wcy5z cHMtPnBpeGVsX3NoaWZ0KV07CisgICAgICAgICAgICAgICAgICAgICAgICBxcCA9IGdldF9xcChm Yywgc3JjLCB4LCB5ICsgZHksIGNfaWR4LCAxKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg YmV0YVtpXSA9IGJldGF0YWJsZVthdl9jbGlwKHFwICsgYmV0YV9vZmZzZXQsIDAsIE1BWF9RUCld OworCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfZmlsdGVyX2xlbmd0aChmYywgeCwgeSAr IGR5LCBjX2lkeCwgMSwgMCwgYnNbaV0sICZtYXhfbGVuX3BbaV0sICZtYXhfbGVuX3FbaV0pOwor ICAgICAgICAgICAgICAgICAgICAgICAgYWxsX3plcm9fYnMgPSAwOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRjW2ldID0gYnNbaV0gPyBUQ19DQUxDKHFwLCBi c1tpXSkgOiAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghYWxs X3plcm9fYnMpIHsKKyAgICAgICAgICAgICAgICAgICAgc3JjID0gJmZjLT5mcmFtZS0+ZGF0YVtj X2lkeF1bKHkgPj4gdnMpICogZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0gKyAoKHggPj4gaHMp IDw8IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0KV07CisgICAgICAgICAgICAgICAgICAgIGlmICgh Y19pZHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjLT52dmNkc3AubGYuZmlsdGVyX2x1 bWFbMV0oc3JjLCBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBiZXRhLCB0Yywgbm9fcCwgbm9fcSwgbWF4X2xlbl9wLCBtYXhfbGVuX3EsIDAp OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg ZmMtPnZ2Y2RzcC5sZi5maWx0ZXJfY2hyb21hWzFdKHNyYywgZmMtPmZyYW1lLT5saW5lc2l6ZVtj X2lkeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSwgdGMsIG5vX3AsIG5vX3Es IG1heF9sZW5fcCwgbWF4X2xlbl9xLCB2cyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg ZmZfdnZjX2RlYmxvY2tfaG9yaXpvbnRhbChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQg eDAsIGludCB5MCkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMtPmZjOworICAgIGNv bnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IGludCBjX2VuZCAgICAg PSBmYy0+cHMuc3BzLT5yLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPyBWVkNfTUFYX1NBTVBMRV9B UlJBWVMgOiAxOworICAgIHVpbnQ4X3QqIHNyYzsKKyAgICBpbnQgeCwgeSwgcXA7CisKKyAgICAv L25vdCB1c2UgdGhpcyB5ZXQsIG1heSBuZWVkZWQgYnkgcGx0LgorICAgIGNvbnN0IHVpbnQ4X3Qg bm9fcFs0XSA9IHsgMCB9OworICAgIGNvbnN0IHVpbnQ4X3Qgbm9fcVs0XSA9IHsgMCB9IDsKKwor ICAgIGludCBjdGJfbG9nMl9zaXplX3kgPSBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7Cisg ICAgaW50IHhfZW5kLCB5X2VuZDsKKyAgICBpbnQgY3RiX3NpemUgPSAxIDw8IGN0Yl9sb2cyX3Np emVfeTsKKyAgICBpbnQgY3RiID0gKHgwID4+IGN0Yl9sb2cyX3NpemVfeSkgKworICAgICAgICAo eTAgPj4gY3RiX2xvZzJfc2l6ZV95KSAqIGZjLT5wcy5wcHMtPmN0Yl93aWR0aDsKKworICAgIHZ2 Y19kZWJsb2NrX2JzKGxjLCB4MCwgeTAsIDApOworCisgICAgeF9lbmQgPSB4MCArIGN0Yl9zaXpl OworICAgIGlmICh4X2VuZCA+IGZjLT5wcy5zcHMtPndpZHRoKQorICAgICAgICB4X2VuZCA9IGZj LT5wcy5zcHMtPndpZHRoOworICAgIHlfZW5kID0geTAgKyBjdGJfc2l6ZTsKKyAgICBpZiAoeV9l bmQgPiBmYy0+cHMuc3BzLT5oZWlnaHQpCisgICAgICAgIHlfZW5kID0gZmMtPnBzLnNwcy0+aGVp Z2h0OworCisgICAgZm9yIChpbnQgY19pZHggPSAwOyBjX2lkeCA8IGNfZW5kOyBjX2lkeCsrKSB7 CisgICAgICAgIGNvbnN0IGludCBocyAgICAgICAgICAgID0gc3BzLT5oc2hpZnRbY19pZHhdOwor ICAgICAgICBjb25zdCBpbnQgdnMgICAgICAgICAgICA9IHNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAg ICAgICAgY29uc3QgaW50IGdyaWQgICAgICAgICAgPSBjX2lkeCA/IChDSFJPTUFfR1JJRCA8PCB2 cykgOiBMVU1BX0dSSUQ7CisKKyAgICAgICAgZm9yICh5ID0geTA7IHkgPCB5X2VuZDsgeSArPSBn cmlkKSB7CisgICAgICAgICAgICBjb25zdCB1aW50OF90IGhvcml6b250YWxfY3R1X2VkZ2UgPSAh KHkgJSBmYy0+cHMuc3BzLT5jdGJfc2l6ZV95KTsKKyAgICAgICAgICAgIGlmICgheSkKKyAgICAg ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgZm9yICh4ID0geDAgPyB4MDogMDsg eCA8IHhfZW5kOyB4ICs9IChERUJMT0NLX1NURVAgPDwgaHMpKSB7CisgICAgICAgICAgICAgICAg aW50MzJfdCBic1s0XSwgYmV0YVs0XSwgdGNbNF0sIGFsbF96ZXJvX2JzID0gMTsKKyAgICAgICAg ICAgICAgICB1aW50OF90IG1heF9sZW5fcFs0XSwgbWF4X2xlbl9xWzRdOworCisgICAgICAgICAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBERUJMT0NLX1NURVAgPj4gKDIgLSBocyk7IGkrKykg eworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgZHggPSBpIDw8IDI7CisgICAgICAgICAg ICAgICAgICAgIGNvbnN0IERCUGFyYW1zICpwYXJhbXMgPSBmYy0+dGFiLmRlYmxvY2sgKyBjdGIg LSAoeCArIGR4IDwgeDApOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgYmV0YV9vZmZz ZXQgPSBwYXJhbXMtPmJldGFfb2Zmc2V0W2NfaWR4XTsKKyAgICAgICAgICAgICAgICAgICAgY29u c3QgaW50IHRjX29mZnNldCA9IHBhcmFtcy0+dGNfb2Zmc2V0W2NfaWR4XTsKKworICAgICAgICAg ICAgICAgICAgICBic1tpXSA9ICh4ICsgZHggPCB4X2VuZCkgPyBUQUJfQlMoZmMtPnRhYi5ob3Jp em9udGFsX2JzW2NfaWR4XSwgeCArIGR4LCB5KSA6IDA7CisgICAgICAgICAgICAgICAgICAgIGlm IChic1tpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gJmZjLT5mcmFtZS0+ZGF0 YVtjX2lkeF1bKHkgPj4gdnMpICogZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0gKyAoKCh4ICsg ZHgpPj4gaHMpIDw8IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0KV07CisgICAgICAgICAgICAgICAg ICAgICAgICBxcCA9IGdldF9xcChmYywgc3JjLCB4ICsgZHgsIHksIGNfaWR4LCAwKTsKKworICAg ICAgICAgICAgICAgICAgICAgICAgYmV0YVtpXSA9IGJldGF0YWJsZVthdl9jbGlwKHFwICsgYmV0 YV9vZmZzZXQsIDAsIE1BWF9RUCldOworCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfZmls dGVyX2xlbmd0aChmYywgeCArIGR4LCB5LCBjX2lkeCwgMCwgaG9yaXpvbnRhbF9jdHVfZWRnZSwg YnNbaV0sICZtYXhfbGVuX3BbaV0sICZtYXhfbGVuX3FbaV0pOworICAgICAgICAgICAgICAgICAg ICAgICAgYWxsX3plcm9fYnMgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgIHRjW2ldID0gYnNbaV0gPyBUQ19DQUxDKHFwLCBic1tpXSkgOiAwOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWFsbF96ZXJvX2JzKSB7CisgICAgICAg ICAgICAgICAgICAgIHNyYyA9ICZmYy0+ZnJhbWUtPmRhdGFbY19pZHhdWyh5ID4+IHZzKSAqIGZj LT5mcmFtZS0+bGluZXNpemVbY19pZHhdICsgKCh4ID4+IGhzKSA8PCBmYy0+cHMuc3BzLT5waXhl bF9zaGlmdCldOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNfaWR4KSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBmYy0+dnZjZHNwLmxmLmZpbHRlcl9sdW1hWzBdKHNyYywgZmMtPmZyYW1l LT5saW5lc2l6ZVtjX2lkeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSwgdGMs IG5vX3AsIG5vX3EsIG1heF9sZW5fcCwgbWF4X2xlbl9xLCBob3Jpem9udGFsX2N0dV9lZGdlKTsK KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZj LT52dmNkc3AubGYuZmlsdGVyX2Nocm9tYVswXShzcmMsIGZjLT5mcmFtZS0+bGluZXNpemVbY19p ZHhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJldGEsIHRjLCBub19wLCBub19xLCBt YXhfbGVuX3AsIG1heF9sZW5fcSwgaHMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMg dm9pZCBhbGZfY29weV9ib3JkZXIodWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMsCisg ICAgY29uc3QgaW50IHBpeGVsX3NoaWZ0LCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNv bnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSkKK3sK KyAgICB3aWR0aCA8PD0gcGl4ZWxfc2hpZnQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWln aHQ7IGkrKykgeworICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHdpZHRoKTsKKyAgICAgICAgZHN0 ICs9IGRzdF9zdHJpZGU7CisgICAgICAgIHNyYyArPSBzcmNfc3RyaWRlOworICAgIH0KK30KKwor c3RhdGljIHZvaWQgYWxmX2V4dGVuZF92ZXJ0KHVpbnQ4X3QgKl9kc3QsIGNvbnN0IHVpbnQ4X3Qg Kl9zcmMsCisgICAgY29uc3QgaW50IHBpeGVsX3NoaWZ0LCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0 IGludCBoZWlnaHQsIHB0cmRpZmZfdCBzdHJpZGUpCit7CisgICAgaWYgKHBpeGVsX3NoaWZ0ID09 IDApIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAg ICAgICAgbWVtc2V0KF9kc3QsICpfc3JjLCB3aWR0aCk7CisgICAgICAgICAgICBfc3JjICs9IHN0 cmlkZTsKKyAgICAgICAgICAgIF9kc3QgKz0gc3RyaWRlOworICAgICAgICB9CisgICAgfSBlbHNl IHsKKyAgICAgICAgY29uc3QgdWludDE2X3QgKnNyYyA9IChjb25zdCB1aW50MTZfdCAqKV9zcmM7 CisgICAgICAgIHVpbnQxNl90ICpkc3QgPSAodWludDE2X3QgKilfZHN0OworICAgICAgICBzdHJp ZGUgPj49IHBpeGVsX3NoaWZ0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaGVpZ2h0 OyBpKyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgd2lkdGg7IGorKykKKyAg ICAgICAgICAgICAgICBkc3Rbal0gPSAqc3JjOworICAgICAgICAgICAgc3JjICs9IHN0cmlkZTsK KyAgICAgICAgICAgIGRzdCArPSBzdHJpZGU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRp YyB2b2lkIGFsZl9leHRlbmRfaG9yeih1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYywK KyAgICBjb25zdCBpbnQgcGl4ZWxfc2hpZnQsIGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwg Y29uc3QgcHRyZGlmZl90IHN0cmlkZSkKK3sKKyAgICB3aWR0aCA8PD0gcGl4ZWxfc2hpZnQ7Cisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAgICBtZW1jcHkoZHN0 LCBzcmMsIHdpZHRoKTsKKyAgICAgICAgZHN0ICs9IHN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRp YyB2b2lkIGFsZl9jb3B5X2N0Yl90b19odihWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCB1aW50 OF90ICpzcmMsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IGludCB4LCBj b25zdCBpbnQgeSwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQg eF9jdGIsIGNvbnN0IGludCB5X2N0YiwgY29uc3QgaW50IGNfaWR4KQoreworICAgIGNvbnN0IGlu dCBwcyAgICAgICAgICAgID0gZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQ7CisgICAgY29uc3QgaW50 IHcgICAgICAgICAgICAgPSBmYy0+cHMuc3BzLT53aWR0aCA+PiBmYy0+cHMuc3BzLT5oc2hpZnRb Y19pZHhdOworICAgIGNvbnN0IGludCBoICAgICAgICAgICAgID0gZmMtPnBzLnNwcy0+aGVpZ2h0 ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IGJvcmRlcl9waXhl bHMgPSAoY19pZHggPT0gMCkgPyBBTEZfQk9SREVSX0xVTUEgOiBBTEZfQk9SREVSX0NIUk9NQTsK KyAgICBjb25zdCBpbnQgb2Zmc2V0X2hbXSAgICA9IHsgMCwgaGVpZ2h0IC0gYm9yZGVyX3BpeGVs cyB9OworICAgIGNvbnN0IGludCBvZmZzZXRfdltdICAgID0geyAwLCB3aWR0aCAgLSBib3JkZXJf cGl4ZWxzIH07CisKKyAgICAvKiBjb3B5IGhvcml6b250YWwgZWRnZXMgKi8KKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKG9mZnNldF9oKTsgaSsrKSB7CisgICAgICAgIGFs Zl9jb3B5X2JvcmRlcihmYy0+dGFiLmFsZl9waXhlbF9idWZmZXJfaFtjX2lkeF1baV0gKyAoKGJv cmRlcl9waXhlbHMgKiB5X2N0YiAqIHcgKyB4KTw8IHBzKSwKKyAgICAgICAgICAgIHNyYyArIG9m ZnNldF9oW2ldICogc3JjX3N0cmlkZSwgcHMsIHdpZHRoLCBib3JkZXJfcGl4ZWxzLCB3IDw8IHBz LCBzcmNfc3RyaWRlKTsKKyAgICB9CisgICAgLyogY29weSB2ZXJ0aWNhbCBlZGdlcyAqLworICAg IGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMob2Zmc2V0X3YpOyBpKyspIHsKKyAg ICAgICAgYWxmX2NvcHlfYm9yZGVyKGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl92W2NfaWR4XVtp XSArICgoaCAqIHhfY3RiICsgeSkgKiAoYm9yZGVyX3BpeGVscyA8PCBwcykpLAorICAgICAgICAg ICAgc3JjICsgKG9mZnNldF92W2ldIDw8IHBzKSwgcHMsIGJvcmRlcl9waXhlbHMsIGhlaWdodCwg Ym9yZGVyX3BpeGVscyA8PCBwcywgc3JjX3N0cmlkZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9p ZCBhbGZfZmlsbF9ib3JkZXJfaCh1aW50OF90ICpkc3QsIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3Ry aWRlLCBjb25zdCB1aW50OF90ICpzcmMsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlLAorICAg IGNvbnN0IHVpbnQ4X3QgKmJvcmRlciwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgYm9yZGVy X3BpeGVscywgY29uc3QgaW50IHBzLCBjb25zdCBpbnQgZWRnZSkKK3sKKyAgICBpZiAoZWRnZSkK KyAgICAgICAgYWxmX2V4dGVuZF9ob3J6KGRzdCwgYm9yZGVyLCBwcywgd2lkdGgsIGJvcmRlcl9w aXhlbHMsIGRzdF9zdHJpZGUpOworICAgIGVsc2UKKyAgICAgICAgYWxmX2NvcHlfYm9yZGVyKGRz dCwgc3JjLCBwcywgd2lkdGgsIGJvcmRlcl9waXhlbHMsIGRzdF9zdHJpZGUsIHNyY19zdHJpZGUp OworfQorCitzdGF0aWMgdm9pZCBhbGZfZmlsbF9ib3JkZXJfdih1aW50OF90ICpkc3QsIGNvbnN0 IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgY29uc3QgdWlu dDhfdCAqYm9yZGVyLCBjb25zdCBpbnQgYm9yZGVyX3BpeGVscywgY29uc3QgaW50IGhlaWdodCwg Y29uc3QgaW50IHBpeGVsX3NoaWZ0LCBjb25zdCBpbnQgKmVkZ2VzLCBjb25zdCBpbnQgZWRnZSkK K3sKKyAgICBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSA9IChib3JkZXJfcGl4ZWxzIDw8IHBp eGVsX3NoaWZ0KTsKKworICAgIGlmIChlZGdlKSB7CisgICAgICAgIGFsZl9leHRlbmRfdmVydChk c3QsIGJvcmRlciwgcGl4ZWxfc2hpZnQsIGJvcmRlcl9waXhlbHMsIGhlaWdodCArIDIgKiBib3Jk ZXJfcGl4ZWxzLCBkc3Rfc3RyaWRlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v bGVmdC9yaWdodAorICAgIGFsZl9jb3B5X2JvcmRlcihkc3QgKyBkc3Rfc3RyaWRlICogYm9yZGVy X3BpeGVscyAqIGVkZ2VzW1RPUF0sIHNyYyArIHNyY19zdHJpZGUgKiBib3JkZXJfcGl4ZWxzICog ZWRnZXNbVE9QXSwKKyAgICAgICAgcGl4ZWxfc2hpZnQsIGJvcmRlcl9waXhlbHMsIGhlaWdodCAr ICghZWRnZXNbVE9QXSArICFlZGdlc1tCT1RUT01dKSAqIGJvcmRlcl9waXhlbHMsIGRzdF9zdHJp ZGUsIHNyY19zdHJpZGUpOworCisgICAgLy90b3AgbGVmdC9yaWdodAorICAgIGlmIChlZGdlc1tU T1BdKQorICAgICAgICBhbGZfZXh0ZW5kX2hvcnooZHN0LCBkc3QgKyBkc3Rfc3RyaWRlICogYm9y ZGVyX3BpeGVscywgcGl4ZWxfc2hpZnQsIGJvcmRlcl9waXhlbHMsIGJvcmRlcl9waXhlbHMsIGRz dF9zdHJpZGUpOworCisgICAgLy9ib3R0b20gbGVmdC9yaWdodAorICAgIGlmIChlZGdlc1tCT1RU T01dKSB7CisgICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlICogKGJvcmRlcl9waXhlbHMgKyBoZWln aHQpOworICAgICAgICBhbGZfZXh0ZW5kX2hvcnooZHN0LCBkc3QgLSBkc3Rfc3RyaWRlLCBwaXhl bF9zaGlmdCwgYm9yZGVyX3BpeGVscywgYm9yZGVyX3BpeGVscywgZHN0X3N0cmlkZSk7CisgICAg fQorfQorCitzdGF0aWMgdm9pZCBhbGZfcHJlcGFyZV9idWZmZXIoVlZDRnJhbWVDb250ZXh0ICpm YywgdWludDhfdCAqX2RzdCwgY29uc3QgdWludDhfdCAqX3NyYywgY29uc3QgaW50IHgsIGNvbnN0 IGludCB5LAorICAgIGNvbnN0IGludCB4X2N0YiwgY29uc3QgaW50IHlfY3RiLCBjb25zdCBpbnQg d2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25z dCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwKKyAgICBjb25zdCBpbnQgY19pZHgsIGNvbnN0IGludCAq ZWRnZXMpCit7CisgICAgY29uc3QgaW50IHBzID0gZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQ7Cisg ICAgY29uc3QgaW50IHcgPSBmYy0+cHMuc3BzLT53aWR0aCA+PiBmYy0+cHMuc3BzLT5oc2hpZnRb Y19pZHhdOworICAgIGNvbnN0IGludCBoID0gZmMtPnBzLnNwcy0+aGVpZ2h0ID4+IGZjLT5wcy5z cHMtPnZzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IGJvcmRlcl9waXhlbHMgPSBjX2lkeCA9 PSAwID8gQUxGX0JPUkRFUl9MVU1BIDogQUxGX0JPUkRFUl9DSFJPTUE7CisgICAgdWludDhfdCAq ZHN0LCAqc3JjOworCisgICAgY29weV9jdGIoX2RzdCwgX3NyYywgd2lkdGggPDwgcHMsIGhlaWdo dCwgZHN0X3N0cmlkZSwgc3JjX3N0cmlkZSk7CisKKyAgICAvL3RvcAorICAgIHNyYyA9IGZjLT50 YWIuYWxmX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XVsxXSArICgoKGJvcmRlcl9waXhlbHMgKiAoeV9j dGIgLSAxKSkgKiB3ICsgeCkgPDwgcHMpOworICAgIGRzdCA9IF9kc3QgLSBib3JkZXJfcGl4ZWxz ICogZHN0X3N0cmlkZTsKKyAgICBhbGZfZmlsbF9ib3JkZXJfaChkc3QsIGRzdF9zdHJpZGUsIHNy YywgdyAgPDwgcHMsIF9kc3QsIHdpZHRoLCBib3JkZXJfcGl4ZWxzLCBwcywgZWRnZXNbVE9QXSk7 CisKKyAgICAvL2JvdHRvbQorICAgIHNyYyA9IGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl9oW2Nf aWR4XVswXSArICgoYm9yZGVyX3BpeGVscyAqICh5X2N0YiArIDEpICogdyArIHgpIDw8IHBzKTsK KyAgICBkc3QgPSBfZHN0ICsgaGVpZ2h0ICogZHN0X3N0cmlkZTsKKyAgICBhbGZfZmlsbF9ib3Jk ZXJfaChkc3QsIGRzdF9zdHJpZGUsIHNyYywgdyAgPDwgcHMsIF9kc3QgKyAoaGVpZ2h0IC0gMSkg KiBkc3Rfc3RyaWRlLCB3aWR0aCwgYm9yZGVyX3BpeGVscywgcHMsIGVkZ2VzW0JPVFRPTV0pOwor CisKKyAgICAvL2xlZnQKKyAgICBzcmMgPSBmYy0+dGFiLmFsZl9waXhlbF9idWZmZXJfdltjX2lk eF1bMV0gKyAoaCAqICh4X2N0YiAtIDEpICsgeSAtIGJvcmRlcl9waXhlbHMpICogKGJvcmRlcl9w aXhlbHMgPDwgcHMpOworICAgIGRzdCA9IF9kc3QgLSAoYm9yZGVyX3BpeGVscyA8PCBwcykgLSBi b3JkZXJfcGl4ZWxzICogZHN0X3N0cmlkZTsKKyAgICBhbGZfZmlsbF9ib3JkZXJfdihkc3QsIGRz dF9zdHJpZGUsIHNyYywgIGRzdCArIChib3JkZXJfcGl4ZWxzIDw8IHBzKSwgYm9yZGVyX3BpeGVs cywgaGVpZ2h0LCBwcywgZWRnZXMsIGVkZ2VzW0xFRlRdKTsKKworICAgIC8vcmlnaHQKKyAgICBz cmMgPSBmYy0+dGFiLmFsZl9waXhlbF9idWZmZXJfdltjX2lkeF1bMF0gKyAoaCAqICh4X2N0YiAr IDEpICsgeSAtIGJvcmRlcl9waXhlbHMpICogKGJvcmRlcl9waXhlbHMgPDwgcHMpOworICAgIGRz dCA9IF9kc3QgKyAod2lkdGggPDwgcHMpIC0gYm9yZGVyX3BpeGVscyAqIGRzdF9zdHJpZGU7Cisg ICAgYWxmX2ZpbGxfYm9yZGVyX3YoZHN0LCBkc3Rfc3RyaWRlLCBzcmMsICBkc3QgLSAoMSA8PCBw cyksIGJvcmRlcl9waXhlbHMsIGhlaWdodCwgcHMsIGVkZ2VzLCBlZGdlc1tSSUdIVF0pOworfQor CisjZGVmaW5lIEFMRl9NQVhfQkxPQ0tTX0lOX0NUVSAgIChNQVhfQ1RVX1NJWkUgKiBNQVhfQ1RV X1NJWkUgLyBBTEZfQkxPQ0tfU0laRSAvIEFMRl9CTE9DS19TSVpFKQorI2RlZmluZSBBTEZfTUFY X0ZJTFRFUl9TSVpFICAgICAoQUxGX01BWF9CTE9DS1NfSU5fQ1RVICogQUxGX05VTV9DT0VGRl9M VU1BKQorCitzdGF0aWMgdm9pZCBhbGZfZ2V0X2NvZWZmX2FuZF9jbGlwKFZWQ0xvY2FsQ29udGV4 dCAqbGMsIGludDE2X3QgKmNvZWZmLCBpbnQxNl90ICpjbGlwLAorICAgIGNvbnN0IHVpbnQ4X3Qg KnNyYywgcHRyZGlmZl90IHNyY19zdHJpZGUsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHZi X3BvcywgQUxGUGFyYW1zICphbGYpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAg ICAgICA9IGxjLT5mYzsKKyAgICBjb25zdCBIMjY2UmF3U2xpY2VIZWFkZXIgKnJzaCAgID0gbGMt PnNjLT5zaC5yOworICAgIHVpbnQ4X3QgZml4ZWRfY2xpcF9zZXRbQUxGX05VTV9GSUxURVJTX0xV TUFdW0FMRl9OVU1fQ09FRkZfTFVNQV0gPSB7IDAgfTsKKyAgICBjb25zdCBpbnQxNl90ICpjb2Vm Zl9zZXQ7CisgICAgY29uc3QgdWludDhfdCAqY2xpcF9pZHhfc2V0OworICAgIGNvbnN0IHVpbnQ4 X3QgKmNsYXNzX3RvX2ZpbHQ7CisgICAgY29uc3QgaW50IHNpemUgPSB3aWR0aCAqIGhlaWdodCAv IEFMRl9CTE9DS19TSVpFIC8gQUxGX0JMT0NLX1NJWkU7CisgICAgaW50IGNsYXNzX2lkeFtBTEZf TUFYX0JMT0NLU19JTl9DVFVdOworICAgIGludCB0cmFuc3Bvc2VfaWR4W0FMRl9NQVhfQkxPQ0tT X0lOX0NUVV07CisKKyAgICBpZiAoYWxmLT5jdGJfZmlsdF9zZXRfaWR4X3kgPCAxNikgeworICAg ICAgICBjb2VmZl9zZXQgICAgICAgICAgID0gJmZmX3Z2Y19hbGZfZml4X2ZpbHRfY29lZmZbMF1b MF07CisgICAgICAgIGNsaXBfaWR4X3NldCAgICAgICAgPSAmZml4ZWRfY2xpcF9zZXRbMF1bMF07 CisgICAgICAgIGNsYXNzX3RvX2ZpbHQgICAgICAgPSBmZl92dmNfYWxmX2NsYXNzX3RvX2ZpbHRf bWFwW2FsZi0+Y3RiX2ZpbHRfc2V0X2lkeF95XTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25z dCBpbnQgaWQgICAgICAgID0gcnNoLT5zaF9hbGZfYXBzX2lkX2x1bWFbYWxmLT5jdGJfZmlsdF9z ZXRfaWR4X3kgLSAxNl07CisgICAgICAgIGNvbnN0IFZWQ0FMRiAqYXBzICAgPSBmYy0+cHMuYWxm X2xpc3RbaWRdOworICAgICAgICBjb2VmZl9zZXQgICAgICAgICAgID0gJmFwcy0+bHVtYV9jb2Vm ZlswXVswXTsKKyAgICAgICAgY2xpcF9pZHhfc2V0ICAgICAgICA9ICZhcHMtPmx1bWFfY2xpcF9p ZHhbMF1bMF07CisgICAgICAgIGNsYXNzX3RvX2ZpbHQgICAgICAgPSBmZl92dmNfYWxmX2Fwc19j bGFzc190b19maWx0X21hcDsKKyAgICB9CisgICAgZmMtPnZ2Y2RzcC5hbGYuY2xhc3NpZnkoY2xh c3NfaWR4LCB0cmFuc3Bvc2VfaWR4LCBzcmMsIHNyY19zdHJpZGUsIHdpZHRoLCBoZWlnaHQsCisg ICAgICAgIHZiX3BvcywgbGMtPmFsZl9ncmFkaWVudF90bXApOworICAgIGZjLT52dmNkc3AuYWxm LnJlY29uX2NvZWZmX2FuZF9jbGlwKGNvZWZmLCBjbGlwLCBjbGFzc19pZHgsIHRyYW5zcG9zZV9p ZHgsIHNpemUsCisgICAgICAgIGNvZWZmX3NldCwgY2xpcF9pZHhfc2V0LCBjbGFzc190b19maWx0 KTsKK30KKworc3RhdGljIHZvaWQgYWxmX2ZpbHRlcl9sdW1hKFZWQ0xvY2FsQ29udGV4dCAqbGMs IHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjLAorICAgIGNvbnN0IHB0cmRpZmZfdCBk c3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgY29uc3QgaW50IHgwLCBjb25z dCBpbnQgeTAsCisgICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBp bnQgX3ZiX3BvcywgQUxGUGFyYW1zICphbGYpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0 ICpmYyAgID0gbGMtPmZjOworICAgIGludCB2Yl9wb3MgICAgICAgICAgICAgICAgICA9IF92Yl9w b3MgLSB5MDsKKyAgICBpbnQxNl90ICpjb2VmZiAgICAgICAgICAgICAgID0gKGludDE2X3QqKWxj LT50bXA7CisgICAgaW50MTZfdCAqY2xpcCAgICAgICAgICAgICAgID0gKGludDE2X3QgKilsYy0+ dG1wMTsKKworICAgIGF2X2Fzc2VydDAoQUxGX01BWF9GSUxURVJfU0laRSA8PSBzaXplb2YobGMt PnRtcCkpOworICAgIGF2X2Fzc2VydDAoQUxGX01BWF9GSUxURVJfU0laRSAqIHNpemVvZihpbnQx Nl90KSA8PSBzaXplb2YobGMtPnRtcDEpKTsKKworICAgIGFsZl9nZXRfY29lZmZfYW5kX2NsaXAo bGMsIGNvZWZmLCBjbGlwLCBzcmMsIHNyY19zdHJpZGUsIHdpZHRoLCBoZWlnaHQsIHZiX3Bvcywg YWxmKTsKKyAgICBmYy0+dnZjZHNwLmFsZi5maWx0ZXJbTFVNQV0oZHN0LCBkc3Rfc3RyaWRlLCBz cmMsIHNyY19zdHJpZGUsIHdpZHRoLCBoZWlnaHQsIGNvZWZmLCBjbGlwLCB2Yl9wb3MpOworfQor CitzdGF0aWMgaW50IGFsZl9jbGlwX2Zyb21faWR4KGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMs IGNvbnN0IGludCBpZHgpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICA9IGZjLT5wcy5zcHM7 CisgICAgY29uc3QgaW50IG9mZnNldFtdID0gezAsIDMsIDUsIDd9OworCisgICAgcmV0dXJuIDEg PDwgKHNwcy0+Yml0X2RlcHRoIC0gb2Zmc2V0W2lkeF0pOworfQorCitzdGF0aWMgdm9pZCBhbGZf ZmlsdGVyX2Nocm9tYShWVkNMb2NhbENvbnRleHQgKmxjLCB1aW50OF90ICpkc3QsIGNvbnN0IHVp bnQ4X3QgKnNyYywKKyAgICBjb25zdCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgcHRyZGlm Zl90IHNyY19zdHJpZGUsIGNvbnN0IGludCBjX2lkeCwKKyAgICBjb25zdCBpbnQgd2lkdGgsIGNv bnN0IGludCBoZWlnaHQsIGNvbnN0IGludCB2Yl9wb3MsIEFMRlBhcmFtcyAqYWxmKQoreworICAg IFZWQ0ZyYW1lQ29udGV4dCAqZmMgICAgICAgICAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgSDI2 NlJhd1NsaWNlSGVhZGVyICpyc2ggICA9IGxjLT5zYy0+c2gucjsKKyAgICBjb25zdCBWVkNBTEYg KmFwcyAgICAgICAgICAgICAgID0gZmMtPnBzLmFsZl9saXN0W3JzaC0+c2hfYWxmX2Fwc19pZF9j aHJvbWFdOworICAgIGNvbnN0IGludCBpZHggICAgICAgICAgICAgICAgICAgPSBhbGYtPmFsZl9j dGJfZmlsdGVyX2FsdF9pZHhbY19pZHggLSAxXTsKKyAgICBjb25zdCBpbnQxNl90ICpjb2VmZiAg ICAgICAgICAgID0gYXBzLT5jaHJvbWFfY29lZmZbaWR4XTsKKyAgICBpbnQxNl90IGNsaXBbQUxG X05VTV9DT0VGRl9DSFJPTUFdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBTEZfTlVNX0NP RUZGX0NIUk9NQTsgaSsrKQorICAgICAgICBjbGlwW2ldID0gYWxmX2NsaXBfZnJvbV9pZHgoZmMs IGFwcy0+Y2hyb21hX2NsaXBfaWR4W2lkeF1baV0pOworCisgICAgZmMtPnZ2Y2RzcC5hbGYuZmls dGVyW0NIUk9NQV0oZHN0LCBkc3Rfc3RyaWRlLCBzcmMsIHNyY19zdHJpZGUsIHdpZHRoLCBoZWln aHQsIGNvZWZmLCBjbGlwLCB2Yl9wb3MpOworfQorCitzdGF0aWMgdm9pZCBhbGZfZmlsdGVyX2Nj KFZWQ0xvY2FsQ29udGV4dCAqbGMsIHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqbHVtYSwK KyAgICBjb25zdCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgcHRyZGlmZl90IGx1bWFfc3Ry aWRlLCBjb25zdCBpbnQgY19pZHgsCisgICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVp Z2h0LCBjb25zdCBpbnQgaHMsIGNvbnN0IGludCB2cywgY29uc3QgaW50IHZiX3BvcywgQUxGUGFy YW1zICphbGYpCit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyAgICAgICAgICAgICA9IGxjLT5m YzsKKyAgICBjb25zdCBIMjY2UmF3U2xpY2VIZWFkZXIgKnJzaCAgID0gbGMtPnNjLT5zaC5yOwor ICAgIGNvbnN0IGludCBpZHggICAgICAgICAgICAgICAgICAgPSBjX2lkeCAtIDE7CisgICAgY29u c3QgaW50IGNjX2Fwc19pZCAgICAgICAgICAgICA9IGNfaWR4ID09IENCID8gcnNoLT5zaF9hbGZf Y2NfY2JfYXBzX2lkIDogcnNoLT5zaF9hbGZfY2NfY3JfYXBzX2lkOworICAgIGNvbnN0IFZWQ0FM RiAqYXBzICAgICAgICAgICAgICAgPSBmYy0+cHMuYWxmX2xpc3RbY2NfYXBzX2lkXTsKKworICAg IGlmIChhcHMpIHsKKyAgICAgICAgY29uc3QgaW50MTZfdCAqY29lZmYgPSBhcHMtPmNjX2NvZWZm W2lkeF1bYWxmLT5jdGJfY2NfaWRjW2lkeF0gLSAxXTsKKworICAgICAgICBmYy0+dnZjZHNwLmFs Zi5maWx0ZXJfY2MoZHN0LCBkc3Rfc3RyaWRlLCBsdW1hLCBsdW1hX3N0cmlkZSwgd2lkdGgsIGhl aWdodCwgaHMsIHZzLCBjb2VmZiwgdmJfcG9zKTsKKyAgICB9Cit9CisKK3ZvaWQgZmZfdnZjX2Fs Zl9jb3B5X2N0dV90b19odihWVkNMb2NhbENvbnRleHQqIGxjLCBjb25zdCBpbnQgeDAsIGNvbnN0 IGludCB5MCkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjICAgICA9IGxjLT5mYzsKKyAgICBj b25zdCBpbnQgeF9jdGIgICAgICAgICA9IHgwID4+IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVf eTsKKyAgICBjb25zdCBpbnQgeV9jdGIgICAgICAgICA9IHkwID4+IGZjLT5wcy5zcHMtPmN0Yl9s b2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgY3RiX3NpemVfeSAgICA9IGZjLT5wcy5zcHMtPmN0 Yl9zaXplX3k7CisgICAgY29uc3QgaW50IHBzICAgICAgICAgICAgPSBmYy0+cHMuc3BzLT5waXhl bF9zaGlmdDsKKyAgICBjb25zdCBpbnQgY19lbmQgICAgICAgICA9IGZjLT5wcy5zcHMtPnItPnNw c19jaHJvbWFfZm9ybWF0X2lkYyA/IFZWQ19NQVhfU0FNUExFX0FSUkFZUyA6IDE7CisKKyAgICBm b3IgKGludCBjX2lkeCA9IDA7IGNfaWR4IDwgY19lbmQ7IGNfaWR4KyspIHsKKyAgICAgICAgY29u c3QgaW50IGhzICAgICAgICA9IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGNv bnN0IGludCB2cyAgICAgICAgPSBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdOworICAgICAgICBj b25zdCBpbnQgeCAgICAgICAgID0geDAgPj4gaHM7CisgICAgICAgIGNvbnN0IGludCB5ICAgICAg ICAgPSB5MCA+PiB2czsKKyAgICAgICAgY29uc3QgaW50IHdpZHRoICAgICA9IEZGTUlOKGZjLT5w cy5zcHMtPndpZHRoIC0geDAsIGN0Yl9zaXplX3kpID4+IGhzOworICAgICAgICBjb25zdCBpbnQg aGVpZ2h0ICAgID0gRkZNSU4oZmMtPnBzLnNwcy0+aGVpZ2h0IC0geTAsIGN0Yl9zaXplX3kpID4+ IHZzOworCisgICAgICAgIGNvbnN0IGludCBzcmNfc3RyaWRlID0gZmMtPmZyYW1lLT5saW5lc2l6 ZVtjX2lkeF07CisgICAgICAgIHVpbnQ4X3QqIHNyYyA9ICZmYy0+ZnJhbWUtPmRhdGFbY19pZHhd W3kgKiBzcmNfc3RyaWRlICsgKHggPDwgcHMpXTsKKworICAgICAgICBhbGZfY29weV9jdGJfdG9f aHYoZmMsIHNyYywgc3JjX3N0cmlkZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgeF9jdGIsIHlfY3Ri LCBjX2lkeCk7CisgICAgfQorfQorCit2b2lkIGZmX3Z2Y19hbGZfZmlsdGVyKFZWQ0xvY2FsQ29u dGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwKQoreworICAgIFZWQ0ZyYW1lQ29u dGV4dCAqZmMgICAgID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1BQUyAqcHBzICAgICAgID0gZmMt PnBzLnBwczsKKyAgICBjb25zdCBpbnQgeF9jdGIgICAgICAgICA9IHgwID4+IGZjLT5wcy5zcHMt PmN0Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeV9jdGIgICAgICAgICA9IHkwID4+IGZj LT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgY3RiX3NpemVfeSAgICA9 IGZjLT5wcy5zcHMtPmN0Yl9zaXplX3k7CisgICAgY29uc3QgaW50IHBzICAgICAgICAgICAgPSBm Yy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKyAgICBjb25zdCBpbnQgcGFkZGVkX3N0cmlkZSA9IEVE R0VfRU1VX0JVRkZFUl9TVFJJREUgPDwgcHM7CisgICAgY29uc3QgaW50IHBhZGRlZF9vZmZzZXQg PSBwYWRkZWRfc3RyaWRlICogQUxGX1BBRERJTkdfU0laRSArIChBTEZfUEFERElOR19TSVpFIDw8 IHBzKTsKKyAgICBjb25zdCBpbnQgY19lbmQgICAgICAgICA9IGZjLT5wcy5zcHMtPnItPnNwc19j aHJvbWFfZm9ybWF0X2lkYyA/IFZWQ19NQVhfU0FNUExFX0FSUkFZUyA6IDE7CisgICAgQUxGUGFy YW1zICphbGYgICAgICAgICAgPSAmQ1RCKGZjLT50YWIuYWxmLCB4X2N0YiwgeV9jdGIpOworICAg IGludCBlZGdlc1tNQVhfRURHRVNdICAgID0geyB4X2N0YiA9PSAwLCB5X2N0YiA9PSAwLCB4X2N0 YiA9PSBwcHMtPmN0Yl93aWR0aCAtIDEsIHlfY3RiID09IHBwcy0+Y3RiX2hlaWdodCAtIDEgfTsK KworICAgIGlmICghcHBzLT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRf ZmxhZykgeworICAgICAgICBlZGdlc1tMRUZUXSA9IGVkZ2VzW0xFRlRdIHx8IChsYy0+Ym91bmRh cnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZUX1RJTEUpOworICAgICAgICBlZGdlc1tUT1BdICA9IGVk Z2VzW1RPUF0gfHwgKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX1VQUEVSX1RJTEUpOwor ICAgICAgICBlZGdlc1tSSUdIVF0gPSBlZGdlc1tSSUdIVF0gfHwgcHBzLT5jdGJfdG9fY29sX2Jk W3hfY3RiXSAhPSBwcHMtPmN0Yl90b19jb2xfYmRbeF9jdGIgKyAxXTsKKyAgICAgICAgZWRnZXNb Qk9UVE9NXSA9IGVkZ2VzW0JPVFRPTV0gfHwgcHBzLT5jdGJfdG9fcm93X2JkW3lfY3RiXSAhPSBw cHMtPmN0Yl90b19yb3dfYmRbeV9jdGIgKyAxXTsKKyAgICB9CisKKyAgICBpZiAoIXBwcy0+ci0+ cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnKSB7CisgICAgICAgIGVk Z2VzW0xFRlRdID0gZWRnZXNbTEVGVF0gfHwgKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZ X0xFRlRfU0xJQ0UpOworICAgICAgICBlZGdlc1tUT1BdID0gZWRnZXNbVE9QXSB8fCAobGMtPmJv dW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0UpOworICAgICAgICBlZGdlc1tSSUdI VF0gPSBlZGdlc1tSSUdIVF0gfHwgQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIp ICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIgKyAxLCB5X2N0Yik7CisgICAgICAgIGVk Z2VzW0JPVFRPTV0gPSBlZGdlc1tCT1RUT01dIHx8IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9j dGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YiArIDEpOwor ICAgIH0KKworICAgIGZvciAoaW50IGNfaWR4ID0gMDsgY19pZHggPCBjX2VuZDsgY19pZHgrKykg eworICAgICAgICBjb25zdCBpbnQgaHMgPSBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAg ICAgICBjb25zdCBpbnQgdnMgPSBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdOworICAgICAgICBj b25zdCBpbnQgY3RiX3NpemVfaCA9IGN0Yl9zaXplX3kgPj4gaHM7CisgICAgICAgIGNvbnN0IGlu dCBjdGJfc2l6ZV92ID0gY3RiX3NpemVfeSA+PiB2czsKKyAgICAgICAgY29uc3QgaW50IHggPSB4 MCA+PiBoczsKKyAgICAgICAgY29uc3QgaW50IHkgPSB5MCA+PiB2czsKKyAgICAgICAgY29uc3Qg aW50IHBpY193aWR0aCA9IGZjLT5wcy5zcHMtPndpZHRoID4+IGhzOworICAgICAgICBjb25zdCBp bnQgcGljX2hlaWdodCA9IGZjLT5wcy5zcHMtPmhlaWdodCA+PiB2czsKKyAgICAgICAgY29uc3Qg aW50IHdpZHRoICA9IEZGTUlOKHBpY193aWR0aCAgLSB4LCBjdGJfc2l6ZV9oKTsKKyAgICAgICAg Y29uc3QgaW50IGhlaWdodCA9IEZGTUlOKHBpY19oZWlnaHQgLSB5LCBjdGJfc2l6ZV92KTsKKyAg ICAgICAgY29uc3QgaW50IHNyY19zdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XTsK KyAgICAgICAgdWludDhfdCAqc3JjID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1beSAqIHNyY19z dHJpZGUgKyAoeCA8PCBwcyldOworICAgICAgICB1aW50OF90ICpwYWRkZWQ7CisKKyAgICAgICAg aWYgKGFsZi0+Y3RiX2ZsYWdbY19pZHhdIHx8ICghY19pZHggJiYgKGFsZi0+Y3RiX2NjX2lkY1sw XSB8fCBhbGYtPmN0Yl9jY19pZGNbMV0pKSkgeworICAgICAgICAgICAgcGFkZGVkID0gKGNfaWR4 ID8gbGMtPmFsZl9idWZmZXJfY2hyb21hIDogbGMtPmFsZl9idWZmZXJfbHVtYSkgKyBwYWRkZWRf b2Zmc2V0OworICAgICAgICAgICAgYWxmX3ByZXBhcmVfYnVmZmVyKGZjLCBwYWRkZWQsIHNyYywg eCwgeSwgeF9jdGIsIHlfY3RiLCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgIHBhZGRl ZF9zdHJpZGUsIHNyY19zdHJpZGUsIGNfaWR4LCBlZGdlcyk7CisgICAgICAgIH0KKyAgICAgICAg aWYgKGFsZi0+Y3RiX2ZsYWdbY19pZHhdKSB7CisgICAgICAgICAgICBpZiAoIWNfaWR4KSAgewor ICAgICAgICAgICAgICAgIGFsZl9maWx0ZXJfbHVtYShsYywgc3JjLCBwYWRkZWQsIHNyY19zdHJp ZGUsIHBhZGRlZF9zdHJpZGUsIHgsIHksCisgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWln aHQsIHkgKyBjdGJfc2l6ZV92IC0gQUxGX1ZCX1BPU19BQk9WRV9MVU1BLCBhbGYpOworICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhbGZfZmlsdGVyX2Nocm9tYShsYywgc3Jj LCBwYWRkZWQsIHNyY19zdHJpZGUsIHBhZGRlZF9zdHJpZGUsIGNfaWR4LAorICAgICAgICAgICAg ICAgICAgICB3aWR0aCwgaGVpZ2h0LCBjdGJfc2l6ZV92IC0gQUxGX1ZCX1BPU19BQk9WRV9DSFJP TUEsIGFsZik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNfaWR4ICYm IGFsZi0+Y3RiX2NjX2lkY1tjX2lkeCAtIDFdKSB7CisgICAgICAgICAgICBwYWRkZWQgPSBsYy0+ YWxmX2J1ZmZlcl9sdW1hICsgcGFkZGVkX29mZnNldDsKKyAgICAgICAgICAgIGFsZl9maWx0ZXJf Y2MobGMsIHNyYywgcGFkZGVkLCBzcmNfc3RyaWRlLCBwYWRkZWRfc3RyaWRlLCBjX2lkeCwKKyAg ICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBocywgdnMsIChjdGJfc2l6ZV92IDw8IHZzKSAt IEFMRl9WQl9QT1NfQUJPVkVfTFVNQSwgYWxmKTsKKyAgICAgICAgfQorCisgICAgICAgIGFsZi0+ YXBwbGllZFtjX2lkeF0gPSAxOworICAgIH0KK30KKworCit2b2lkIGZmX3Z2Y19sbWNzX2ZpbHRl cihjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHkpCit7 CisgICAgY29uc3QgU2xpY2VDb250ZXh0ICpzYyA9IGxjLT5zYzsKKyAgICBjb25zdCBWVkNGcmFt ZUNvbnRleHQgKmZjID0gbGMtPmZjOworICAgIGNvbnN0IGludCBjdGJfc2l6ZSAgPSBmYy0+cHMu c3BzLT5jdGJfc2l6ZV95OworICAgIGNvbnN0IGludCB3aWR0aCAgICAgPSBGRk1JTihmYy0+cHMu cHBzLT53aWR0aCAgLSB4LCBjdGJfc2l6ZSk7CisgICAgY29uc3QgaW50IGhlaWdodCAgICA9IEZG TUlOKGZjLT5wcy5wcHMtPmhlaWdodCAtIHksIGN0Yl9zaXplKTsKKyAgICB1aW50OF90ICpkYXRh ICAgICAgID0gZmMtPmZyYW1lLT5kYXRhW0xVTUFdICsgeSAqIGZjLT5mcmFtZS0+bGluZXNpemVb TFVNQV0gKyAoeCA8PCBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdCk7CisgICAgaWYgKHNjLT5zaC5y LT5zaF9sbWNzX3VzZWRfZmxhZykKKyAgICAgICAgZmMtPnZ2Y2RzcC5sbWNzLmZpbHRlcihkYXRh LCBmYy0+ZnJhbWUtPmxpbmVzaXplW0xVTUFdLCB3aWR0aCwgaGVpZ2h0LCBmYy0+cHMubG1jcy5p bnZfbHV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuaCBiL2xp YmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi4yYWU0YzMzZTJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZj X2ZpbHRlci5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBWVkMgZmlsdGVycworICoKKyAqIENv cHlyaWdodCAoQykgMjAyMiBOdW8gTWkKKyAqCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQorICovCisjaWZuZGVmIEFWQ09ERUNfVlZDX1ZWQ19GSUxURVJfSAorI2RlZmluZSBBVkNP REVDX1ZWQ19WVkNfRklMVEVSX0gKKworI2luY2x1ZGUgInZ2Y2RlYy5oIgorCisvKioKKyAqIGxt Y3MgZmlsdGVyIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0gbGMgbG9jYWwgY29udGV4dCBmb3IgQ1RV CisgKiBAcGFyYW0geDAgeCBwb3NpdGlvbiBmb3IgdGhlIENUVQorICogQHBhcmFtIHkwIHkgcG9z aXRpb24gZm9yIHRoZSBDVFUKKyAqLwordm9pZCBmZl92dmNfbG1jc19maWx0ZXIoY29uc3QgVlZD TG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTApOworCisvKioKKyAq IHZlcnRpY2FsIGRlYmxvY2sgZmlsdGVyIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0gbGMgbG9jYWwg Y29udGV4dCBmb3IgQ1RVCisgKiBAcGFyYW0geDAgeCBwb3NpdGlvbiBmb3IgdGhlIENUVQorICog QHBhcmFtIHkwIHkgcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqLwordm9pZCBmZl92dmNfZGVibG9j a192ZXJ0aWNhbChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCk7CisK Ky8qKgorICogaG9yaXpvbnRhbCBkZWJsb2NrIGZpbHRlciBmb3IgdGhlIENUVQorICogQHBhcmFt IGxjIGxvY2FsIGNvbnRleHQgZm9yIENUVQorICogQHBhcmFtIHgwIHggcG9zaXRpb24gZm9yIHRo ZSBDVFUKKyAqIEBwYXJhbSB5MCB5IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKi8KK3ZvaWQgZmZf dnZjX2RlYmxvY2tfaG9yaXpvbnRhbChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeDAs IGludCB5MCk7CisKKy8qKgorICogc2FvIGZpbHRlciBmb3IgdGhlIENUVQorICogQHBhcmFtIGxj IGxvY2FsIGNvbnRleHQgZm9yIENUVQorICogQHBhcmFtIHgwIHggcG9zaXRpb24gZm9yIHRoZSBD VFUKKyAqIEBwYXJhbSB5MCB5IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKi8KK3ZvaWQgZmZfdnZj X3Nhb19maWx0ZXIoVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQg eTApOworCit2b2lkIGZmX3Z2Y19zYW9fY29weV9jdGJfdG9faHYoVlZDTG9jYWxDb250ZXh0KiBs YywgaW50IHJ4LCBpbnQgcnksIGludCBsYXN0X3Jvdyk7Cit2b2lkIGZmX3Z2Y19hbGZfY29weV9j dHVfdG9faHYoVlZDTG9jYWxDb250ZXh0KiBsYywgaW50IHgwLCBpbnQgeTApOworCisvKioKKyAq IGFsZiBmaWx0ZXIgZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSBsYyBsb2NhbCBjb250ZXh0IGZvciBD VFUKKyAqIEBwYXJhbSB4MCB4IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0geTAgeSBw b3NpdGlvbiBmb3IgdGhlIENUVQorICovCit2b2lkIGZmX3Z2Y19hbGZfZmlsdGVyKFZWQ0xvY2Fs Q29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwKTsKKworI2VuZGlmIC8vIEFW Q09ERUNfVlZDX1ZWQ19DVFVfSApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRl cl90ZW1wbGF0ZS5jIGIvbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlcl90ZW1wbGF0ZS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmE0ZjE3OTJlYzQKLS0tIC9kZXYvbnVs bAorKysgYi9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyX3RlbXBsYXRlLmMKQEAgLTAsMCArMSwx MTM1IEBACisvKgorICogVlZDIGZpbHRlcnMgRFNQCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIy IE51byBNaQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1w ZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCitzdGF0aWMg dm9pZCBGVU5DKGxtY3NfZmlsdGVyX2x1bWEpKHVpbnQ4X3QgKl9kc3QsIHB0cmRpZmZfdCBkc3Rf c3RyaWRlLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IHVpbnQ4X3Qg Kl9sdXQpCit7CisgICAgY29uc3QgcGl4ZWwgKmx1dCA9IChjb25zdCBwaXhlbCAqKV9sdXQ7Cisg ICAgcGl4ZWwgKmRzdCA9IChwaXhlbCopX2RzdDsKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihw aXhlbCk7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAg IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgIGRzdFt4XSA9IGx1 dFtkc3RbeF1dOworICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRp YyB2b2lkIEZVTkMoc2FvX2JhbmRfZmlsdGVyKSh1aW50OF90ICpfZHN0LCBjb25zdCB1aW50OF90 ICpfc3JjLCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgcHRyZGlmZl90IHNyY19zdHJpZGUsCisgICAg Y29uc3QgaW50MTZfdCAqc2FvX29mZnNldF92YWwsIGNvbnN0IGludCBzYW9fbGVmdF9jbGFzcywg Y29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQoreworICAgIHBpeGVsICpkc3QgICAg ICAgPSAocGl4ZWwgKilfZHN0OworICAgIGNvbnN0IHBpeGVsICpzcmMgPSAocGl4ZWwgKilfc3Jj OworICAgIGludCBvZmZzZXRfdGFibGVbMzJdID0geyAwIH07CisgICAgaW50IGssIHksIHg7Cisg ICAgaW50IHNoaWZ0ICA9IEJJVF9ERVBUSCAtIDU7CisKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVv ZihwaXhlbCk7CisgICAgc3JjX3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAgZm9yIChr ID0gMDsgayA8IDQ7IGsrKykKKyAgICAgICAgb2Zmc2V0X3RhYmxlWyhrICsgc2FvX2xlZnRfY2xh c3MpICYgMzFdID0gc2FvX29mZnNldF92YWxbayArIDFdOworICAgIGZvciAoeSA9IDA7IHkgPCBo ZWlnaHQ7IHkrKykgeworICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAg ICAgICAgIGRzdFt4XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3hdICsgb2Zmc2V0X3RhYmxlW3NyY1t4 XSA+PiBzaGlmdF0pOworICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAgICAgICAgc3JjICs9 IHNyY19zdHJpZGU7CisgICAgfQorfQorCisjZGVmaW5lIENNUChhLCBiKSAoKChhKSA+IChiKSkg LSAoKGEpIDwgKGIpKSkKKworc3RhdGljIHZvaWQgRlVOQyhzYW9fZWRnZV9maWx0ZXIpKHVpbnQ4 X3QgKl9kc3QsIGNvbnN0IHVpbnQ4X3QgKl9zcmMsIHB0cmRpZmZfdCBkc3Rfc3RyaWRlLAorICAg IGNvbnN0IGludDE2X3QgKnNhb19vZmZzZXRfdmFsLCBjb25zdCBpbnQgZW8sIGNvbnN0IGludCB3 aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBlZGdl X2lkeFtdID0geyAxLCAyLCAwLCAzLCA0IH07CisgICAgc3RhdGljIGNvbnN0IGludDhfdCBwb3Nb NF1bMl1bMl0gPSB7CisgICAgICAgIHsgeyAtMSwgIDAgfSwgeyAgMSwgMCB9IH0sIC8vIGhvcml6 b250YWwKKyAgICAgICAgeyB7ICAwLCAtMSB9LCB7ICAwLCAxIH0gfSwgLy8gdmVydGljYWwKKyAg ICAgICAgeyB7IC0xLCAtMSB9LCB7ICAxLCAxIH0gfSwgLy8gNDUgZGVncmVlCisgICAgICAgIHsg eyAgMSwgLTEgfSwgeyAtMSwgMSB9IH0sIC8vIDEzNSBkZWdyZWUKKyAgICB9OworICAgIHBpeGVs ICpkc3QgICAgICAgICAgPSAocGl4ZWwgKilfZHN0OworICAgIGNvbnN0IHBpeGVsICpzcmMgICAg PSAocGl4ZWwgKilfc3JjOworICAgIGludCBhX3N0cmlkZSwgYl9zdHJpZGU7CisgICAgaW50IHgs IHk7CisgICAgcHRyZGlmZl90IHNyY19zdHJpZGUgPSAoMiAqIE1BWF9QQl9TSVpFICsgQVZfSU5Q VVRfQlVGRkVSX1BBRERJTkdfU0laRSkgLyBzaXplb2YocGl4ZWwpOworICAgIGRzdF9zdHJpZGUg Lz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGFfc3RyaWRlID0gcG9zW2VvXVswXVswXSArIHBvc1tl b11bMF1bMV0gKiBzcmNfc3RyaWRlOworICAgIGJfc3RyaWRlID0gcG9zW2VvXVsxXVswXSArIHBv c1tlb11bMV1bMV0gKiBzcmNfc3RyaWRlOworICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkr KykgeworICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAg aW50IGRpZmYwID0gQ01QKHNyY1t4XSwgc3JjW3ggKyBhX3N0cmlkZV0pOworICAgICAgICAgICAg aW50IGRpZmYxID0gQ01QKHNyY1t4XSwgc3JjW3ggKyBiX3N0cmlkZV0pOworICAgICAgICAgICAg aW50IG9mZnNldF92YWwgICAgICAgID0gZWRnZV9pZHhbMiArIGRpZmYwICsgZGlmZjFdOworICAg ICAgICAgICAgZHN0W3hdID0gYXZfY2xpcF9waXhlbChzcmNbeF0gKyBzYW9fb2Zmc2V0X3ZhbFtv ZmZzZXRfdmFsXSk7CisgICAgICAgIH0KKyAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7CisgICAg ICAgIGRzdCArPSBkc3Rfc3RyaWRlOworICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhzYW9f ZWRnZV9yZXN0b3JlXzApKHVpbnQ4X3QgKl9kc3QsIGNvbnN0IHVpbnQ4X3QgKl9zcmMsCisgICAg cHRyZGlmZl90IGRzdF9zdHJpZGUsIHB0cmRpZmZfdCBzcmNfc3RyaWRlLCBjb25zdCBTQU9QYXJh bXMgKnNhbywKKyAgICBjb25zdCBpbnQgKmJvcmRlcnMsIGNvbnN0IGludCBfd2lkdGgsIGNvbnN0 IGludCBfaGVpZ2h0LCBjb25zdCBpbnQgY19pZHgsCisgICAgY29uc3QgdWludDhfdCAqdmVydF9l ZGdlLCBjb25zdCB1aW50OF90ICpob3Jpel9lZGdlLCBjb25zdCB1aW50OF90ICpkaWFnX2VkZ2Up Cit7CisgICAgaW50IHgsIHk7CisgICAgcGl4ZWwgKmRzdCAgICAgICAgICAgICAgICAgICAgICA9 IChwaXhlbCAqKV9kc3Q7CisgICAgY29uc3QgcGl4ZWwgKnNyYyAgICAgICAgICAgICAgICA9IChw aXhlbCAqKV9zcmM7CisgICAgY29uc3QgaW50MTZfdCAqc2FvX29mZnNldF92YWwgICA9IHNhby0+ b2Zmc2V0X3ZhbFtjX2lkeF07CisgICAgY29uc3QgaW50IHNhb19lb19jbGFzcyAgICAgICAgICA9 IHNhby0+ZW9fY2xhc3NbY19pZHhdOworICAgIGludCBpbml0X3ggPSAwLCB3aWR0aCA9IF93aWR0 aCwgaGVpZ2h0ID0gX2hlaWdodDsKKworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsK KyAgICBzcmNfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisKKyAgICBpZiAoc2FvX2VvX2NsYXNz ICE9IFNBT19FT19WRVJUKSB7CisgICAgICAgIGlmIChib3JkZXJzWzBdKSB7CisgICAgICAgICAg ICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRfdmFsWzBdOworICAgICAgICAgICAgZm9yICh5 ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgICAgICAgICAgZHN0W3kgKiBkc3Rfc3Ry aWRlXSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3kgKiBzcmNfc3RyaWRlXSArIG9mZnNldF92YWwpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5pdF94ID0gMTsKKyAgICAgICAgfQorICAgICAg ICBpZiAoYm9yZGVyc1syXSkgeworICAgICAgICAgICAgaW50IG9mZnNldF92YWwgPSBzYW9fb2Zm c2V0X3ZhbFswXTsKKyAgICAgICAgICAgIGludCBvZmZzZXQgICAgID0gd2lkdGggLSAxOworICAg ICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGhlaWdodDsgeCsrKSB7CisgICAgICAgICAgICAgICAg ZHN0W3ggKiBkc3Rfc3RyaWRlICsgb2Zmc2V0XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3ggKiBzcmNf c3RyaWRlICsgb2Zmc2V0XSArIG9mZnNldF92YWwpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgd2lkdGgtLTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc2FvX2VvX2NsYXNzICE9IFNB T19FT19IT1JJWikgeworICAgICAgICBpZiAoYm9yZGVyc1sxXSkgeworICAgICAgICAgICAgaW50 IG9mZnNldF92YWwgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAgICAgIGZvciAoeCA9IGlu aXRfeDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICAgICAgZHN0W3hdID0gYXZfY2xpcF9w aXhlbChzcmNbeF0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYm9yZGVy c1szXSkgeworICAgICAgICAgICAgaW50IG9mZnNldF92YWwgICA9IHNhb19vZmZzZXRfdmFsWzBd OworICAgICAgICAgICAgcHRyZGlmZl90IHlfZHN0X3N0cmlkZSA9IGRzdF9zdHJpZGUgKiAoaGVp Z2h0IC0gMSk7CisgICAgICAgICAgICBwdHJkaWZmX3QgeV9zcmNfc3RyaWRlID0gc3JjX3N0cmlk ZSAqIChoZWlnaHQgLSAxKTsKKyAgICAgICAgICAgIGZvciAoeCA9IGluaXRfeDsgeCA8IHdpZHRo OyB4KyspCisgICAgICAgICAgICAgICAgZHN0W3ggKyB5X2RzdF9zdHJpZGVdID0gYXZfY2xpcF9w aXhlbChzcmNbeCArIHlfc3JjX3N0cmlkZV0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgICAgIGhl aWdodC0tOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKHNhb19lZGdl X3Jlc3RvcmVfMSkodWludDhfdCAqX2RzdCwgY29uc3QgdWludDhfdCAqX3NyYywKKyAgICBwdHJk aWZmX3QgZHN0X3N0cmlkZSwgcHRyZGlmZl90IHNyY19zdHJpZGUsIGNvbnN0IFNBT1BhcmFtcyAq c2FvLAorICAgIGNvbnN0IGludCAqYm9yZGVycywgY29uc3QgaW50IF93aWR0aCwgY29uc3QgaW50 IF9oZWlnaHQsIGNvbnN0IGludCBjX2lkeCwKKyAgICBjb25zdCB1aW50OF90ICp2ZXJ0X2VkZ2Us IGNvbnN0IHVpbnQ4X3QgKmhvcml6X2VkZ2UsIGNvbnN0IHVpbnQ4X3QgKmRpYWdfZWRnZSkKK3sK KyAgICBpbnQgeCwgeTsKKyAgICBwaXhlbCAqZHN0ICAgICAgICAgICAgICAgICAgICAgID0gKHBp eGVsICopX2RzdDsKKyAgICBjb25zdCBwaXhlbCAqc3JjICAgICAgICAgICAgICAgID0gKHBpeGVs ICopX3NyYzsKKyAgICBjb25zdCBpbnQxNl90ICpzYW9fb2Zmc2V0X3ZhbCAgID0gc2FvLT5vZmZz ZXRfdmFsW2NfaWR4XTsKKyAgICBjb25zdCBpbnQgc2FvX2VvX2NsYXNzICAgICAgICAgID0gc2Fv LT5lb19jbGFzc1tjX2lkeF07CisgICAgaW50IGluaXRfeCA9IDAsIGluaXRfeSA9IDAsIHdpZHRo ID0gX3dpZHRoLCBoZWlnaHQgPSBfaGVpZ2h0OworCisgICAgZHN0X3N0cmlkZSAvPSBzaXplb2Yo cGl4ZWwpOworICAgIHNyY19zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGlmIChzYW9f ZW9fY2xhc3MgIT0gU0FPX0VPX1ZFUlQpIHsKKyAgICAgICAgaWYgKGJvcmRlcnNbMF0pIHsKKyAg ICAgICAgICAgIGludCBvZmZzZXRfdmFsID0gc2FvX29mZnNldF92YWxbMF07CisgICAgICAgICAg ICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgICAgICAgICBkc3RbeSAq IGRzdF9zdHJpZGVdID0gYXZfY2xpcF9waXhlbChzcmNbeSAqIHNyY19zdHJpZGVdICsgb2Zmc2V0 X3ZhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbml0X3ggPSAxOworICAgICAgICB9 CisgICAgICAgIGlmIChib3JkZXJzWzJdKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9 IHNhb19vZmZzZXRfdmFsWzBdOworICAgICAgICAgICAgaW50IG9mZnNldCAgICAgPSB3aWR0aCAt IDE7CisgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgaGVpZ2h0OyB4KyspIHsKKyAgICAgICAg ICAgICAgICBkc3RbeCAqIGRzdF9zdHJpZGUgKyBvZmZzZXRdID0gYXZfY2xpcF9waXhlbChzcmNb eCAqIHNyY19zdHJpZGUgKyBvZmZzZXRdICsgb2Zmc2V0X3ZhbCk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICB3aWR0aC0tOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzYW9fZW9fY2xh c3MgIT0gU0FPX0VPX0hPUklaKSB7CisgICAgICAgIGlmIChib3JkZXJzWzFdKSB7CisgICAgICAg ICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRfdmFsWzBdOworICAgICAgICAgICAgZm9y ICh4ID0gaW5pdF94OyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICBkc3RbeF0gPSBh dl9jbGlwX3BpeGVsKHNyY1t4XSArIG9mZnNldF92YWwpOworICAgICAgICAgICAgaW5pdF95ID0g MTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYm9yZGVyc1szXSkgeworICAgICAgICAgICAgaW50 IG9mZnNldF92YWwgICA9IHNhb19vZmZzZXRfdmFsWzBdOworICAgICAgICAgICAgcHRyZGlmZl90 IHlfZHN0X3N0cmlkZSA9IGRzdF9zdHJpZGUgKiAoaGVpZ2h0IC0gMSk7CisgICAgICAgICAgICBw dHJkaWZmX3QgeV9zcmNfc3RyaWRlID0gc3JjX3N0cmlkZSAqIChoZWlnaHQgLSAxKTsKKyAgICAg ICAgICAgIGZvciAoeCA9IGluaXRfeDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICAgICAg ZHN0W3ggKyB5X2RzdF9zdHJpZGVdID0gYXZfY2xpcF9waXhlbChzcmNbeCArIHlfc3JjX3N0cmlk ZV0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgICAgIGhlaWdodC0tOworICAgICAgICB9CisgICAg fQorCisgICAgeworICAgICAgICBpbnQgc2F2ZV91cHBlcl9sZWZ0ICA9ICFkaWFnX2VkZ2VbMF0g JiYgc2FvX2VvX2NsYXNzID09IFNBT19FT18xMzVEICYmICFib3JkZXJzWzBdICYmICFib3JkZXJz WzFdOworICAgICAgICBpbnQgc2F2ZV91cHBlcl9yaWdodCA9ICFkaWFnX2VkZ2VbMV0gJiYgc2Fv X2VvX2NsYXNzID09IFNBT19FT180NUQgICYmICFib3JkZXJzWzFdICYmICFib3JkZXJzWzJdOwor ICAgICAgICBpbnQgc2F2ZV9sb3dlcl9yaWdodCA9ICFkaWFnX2VkZ2VbMl0gJiYgc2FvX2VvX2Ns YXNzID09IFNBT19FT18xMzVEICYmICFib3JkZXJzWzJdICYmICFib3JkZXJzWzNdOworICAgICAg ICBpbnQgc2F2ZV9sb3dlcl9sZWZ0ICA9ICFkaWFnX2VkZ2VbM10gJiYgc2FvX2VvX2NsYXNzID09 IFNBT19FT180NUQgICYmICFib3JkZXJzWzBdICYmICFib3JkZXJzWzNdOworCisgICAgICAgIC8v IFJlc3RvcmUgcGl4ZWxzIHRoYXQgY2FuJ3QgYmUgbW9kaWZpZWQKKyAgICAgICAgaWYgKHZlcnRf ZWRnZVswXSAmJiBzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX1ZFUlQpIHsKKyAgICAgICAgICAgIGZv ciAoeSA9IGluaXRfeSArIHNhdmVfdXBwZXJfbGVmdDsgeSA8IGhlaWdodCAtIHNhdmVfbG93ZXJf bGVmdDsgeSsrKQorICAgICAgICAgICAgICAgIGRzdFt5ICogZHN0X3N0cmlkZV0gPSBzcmNbeSAq IHNyY19zdHJpZGVdOworICAgICAgICB9CisgICAgICAgIGlmICh2ZXJ0X2VkZ2VbMV0gJiYgc2Fv X2VvX2NsYXNzICE9IFNBT19FT19WRVJUKSB7CisgICAgICAgICAgICBmb3IgKHkgPSBpbml0X3kg KyBzYXZlX3VwcGVyX3JpZ2h0OyB5IDwgaGVpZ2h0IC0gc2F2ZV9sb3dlcl9yaWdodDsgeSsrKQor ICAgICAgICAgICAgICAgIGRzdFt5ICogZHN0X3N0cmlkZSArIHdpZHRoIC0gMV0gPSBzcmNbeSAq IHNyY19zdHJpZGUgKyB3aWR0aCAtIDFdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGhvcml6 X2VkZ2VbMF0gJiYgc2FvX2VvX2NsYXNzICE9IFNBT19FT19IT1JJWikgeworICAgICAgICAgICAg Zm9yICh4ID0gaW5pdF94ICsgc2F2ZV91cHBlcl9sZWZ0OyB4IDwgd2lkdGggLSBzYXZlX3VwcGVy X3JpZ2h0OyB4KyspCisgICAgICAgICAgICAgICAgZHN0W3hdID0gc3JjW3hdOworICAgICAgICB9 CisgICAgICAgIGlmIChob3Jpel9lZGdlWzFdICYmIHNhb19lb19jbGFzcyAhPSBTQU9fRU9fSE9S SVopIHsKKyAgICAgICAgICAgIGZvciAoeCA9IGluaXRfeCArIHNhdmVfbG93ZXJfbGVmdDsgeCA8 IHdpZHRoIC0gc2F2ZV9sb3dlcl9yaWdodDsgeCsrKQorICAgICAgICAgICAgICAgIGRzdFsoaGVp Z2h0IC0gMSkgKiBkc3Rfc3RyaWRlICsgeF0gPSBzcmNbKGhlaWdodCAtIDEpICogc3JjX3N0cmlk ZSArIHhdOworICAgICAgICB9CisgICAgICAgIGlmIChkaWFnX2VkZ2VbMF0gJiYgc2FvX2VvX2Ns YXNzID09IFNBT19FT18xMzVEKQorICAgICAgICAgICAgZHN0WzBdID0gc3JjWzBdOworICAgICAg ICBpZiAoZGlhZ19lZGdlWzFdICYmIHNhb19lb19jbGFzcyA9PSBTQU9fRU9fNDVEKQorICAgICAg ICAgICAgZHN0W3dpZHRoIC0gMV0gPSBzcmNbd2lkdGggLSAxXTsKKyAgICAgICAgaWYgKGRpYWdf ZWRnZVsyXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FPX0VPXzEzNUQpCisgICAgICAgICAgICBkc3Rb ZHN0X3N0cmlkZSAqIChoZWlnaHQgLSAxKSArIHdpZHRoIC0gMV0gPSBzcmNbc3JjX3N0cmlkZSAq IChoZWlnaHQgLSAxKSArIHdpZHRoIC0gMV07CisgICAgICAgIGlmIChkaWFnX2VkZ2VbM10gJiYg c2FvX2VvX2NsYXNzID09IFNBT19FT180NUQpCisgICAgICAgICAgICBkc3RbZHN0X3N0cmlkZSAq IChoZWlnaHQgLSAxKV0gPSBzcmNbc3JjX3N0cmlkZSAqIChoZWlnaHQgLSAxKV07CisKKyAgICB9 Cit9CisKKyN1bmRlZiBDTVAKKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgaW50MTZfdCBGVU5D KGFsZl9jbGlwKShwaXhlbCBjdXJyLCBwaXhlbCB2MCwgcGl4ZWwgdjEsIGludDE2X3QgY2xpcCkK K3sKKyAgICByZXR1cm4gYXZfY2xpcCh2MCAtIGN1cnIsIC1jbGlwLCBjbGlwKSArIGF2X2NsaXAo djEgLSBjdXJyLCAtY2xpcCwgY2xpcCk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoYWxmX2ZpbHRl cl9sdW1hKSh1aW50OF90ICpfZHN0LCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgdWludDhf dCAqX3NyYywgcHRyZGlmZl90IHNyY19zdHJpZGUsCisgICAgY29uc3QgaW50IHdpZHRoLCBjb25z dCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQxNl90ICpmaWx0ZXIsIGNvbnN0IGludDE2X3QgKmNsaXAs IGNvbnN0IGludCB2Yl9wb3MpCit7CisgICAgY29uc3QgcGl4ZWwgKnNyYyAgICA9IChwaXhlbCAq KV9zcmM7CisgICAgY29uc3QgaW50IHNoaWZ0ICAgICA9IDc7CisgICAgY29uc3QgaW50IG9mZnNl dCAgICA9IDEgPDwgKCBzaGlmdCAtIDEgKTsKKyAgICBjb25zdCBpbnQgdmJfYWJvdmUgID0gdmJf cG9zIC0gNDsKKyAgICBjb25zdCBpbnQgdmJfYmVsb3cgID0gdmJfcG9zICsgMzsKKworICAgIGRz dF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKyAgICBzcmNfc3RyaWRlIC89IHNpemVvZihwaXhl bCk7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBBTEZfQkxPQ0tfU0la RSkgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4ICs9IEFMRl9CTE9DS19T SVpFKSB7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczAgPSBzcmMgKyB5ICogc3JjX3N0cmlk ZSArIHg7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczEgPSBzMCArIHNyY19zdHJpZGU7Cisg ICAgICAgICAgICBjb25zdCBwaXhlbCAqczIgPSBzMCAtIHNyY19zdHJpZGU7CisgICAgICAgICAg ICBjb25zdCBwaXhlbCAqczMgPSBzMSArIHNyY19zdHJpZGU7CisgICAgICAgICAgICBjb25zdCBw aXhlbCAqczQgPSBzMiAtIHNyY19zdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczUg PSBzMyArIHNyY19zdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczYgPSBzNCAtIHNy Y19zdHJpZGU7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQUxGX0JMT0NLX1NJ WkU7IGkrKykgeworICAgICAgICAgICAgICAgIHBpeGVsICpkc3QgPSAocGl4ZWwgKilfZHN0ICsg KHkgKyBpKSAqIGRzdF9zdHJpZGUgKyB4OworCisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwg KnAwID0gczAgKyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAq cDEgPSBzMSArIGkgKiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpw MiA9IHMyICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAz ID0gczMgKyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDQg PSBzNCArIGkgKiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwNSA9 IHM1ICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnA2ID0g czYgKyBpICogc3JjX3N0cmlkZTsKKworICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19uZWFy X3ZiX2Fib3ZlID0gKHkgKyBpIDwgIHZiX3BvcykgJiYgKHkgKyBpID49IHZiX3BvcyAtIDEpOwor ICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19uZWFyX3ZiX2JlbG93ID0gKHkgKyBpID49IHZi X3BvcykgJiYgKHkgKyBpIDw9IHZiX3Bvcyk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGlz X25lYXJfdmIgPSBpc19uZWFyX3ZiX2Fib3ZlIHx8IGlzX25lYXJfdmJfYmVsb3c7CisKKyAgICAg ICAgICAgICAgICBpZiAoKHkgKyBpIDwgdmJfcG9zKSAmJiAoKHkgKyBpKSA+PSB2Yl9hYm92ZSkp IHsKKyAgICAgICAgICAgICAgICAgICAgcDEgPSAoeSArIGkgPT0gdmJfcG9zIC0gMSkgPyBwMCA6 IHAxOworICAgICAgICAgICAgICAgICAgICBwMyA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAyKSA/IHAx IDogcDM7CisgICAgICAgICAgICAgICAgICAgIHA1ID0gKHkgKyBpID49IHZiX3BvcyAtIDMpID8g cDMgOiBwNTsKKworICAgICAgICAgICAgICAgICAgICBwMiA9ICh5ICsgaSA9PSB2Yl9wb3MgLSAx KSA/IHAwIDogcDI7CisgICAgICAgICAgICAgICAgICAgIHA0ID0gKHkgKyBpID49IHZiX3BvcyAt IDIpID8gcDIgOiBwNDsKKyAgICAgICAgICAgICAgICAgICAgcDYgPSAoeSArIGkgPj0gdmJfcG9z IC0gMykgPyBwNCA6IHA2OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHkgKyBpID49IHZi X3BvcykgJiYgKCh5ICsgaSkgPD0gdmJfYmVsb3cpKSB7CisgICAgICAgICAgICAgICAgICAgIHAy ID0gKHkgKyBpID09IHZiX3BvcyAgICApID8gcDAgOiBwMjsKKyAgICAgICAgICAgICAgICAgICAg cDQgPSAoeSArIGkgPD0gdmJfcG9zICsgMSkgPyBwMiA6IHA0OworICAgICAgICAgICAgICAgICAg ICBwNiA9ICh5ICsgaSA8PSB2Yl9wb3MgKyAyKSA/IHA0IDogcDY7CisKKyAgICAgICAgICAgICAg ICAgICAgcDEgPSAoeSArIGkgPT0gdmJfcG9zICAgICkgPyBwMCA6IHAxOworICAgICAgICAgICAg ICAgICAgICBwMyA9ICh5ICsgaSA8PSB2Yl9wb3MgKyAxKSA/IHAxIDogcDM7CisgICAgICAgICAg ICAgICAgICAgIHA1ID0gKHkgKyBpIDw9IHZiX3BvcyArIDIpID8gcDMgOiBwNTsKKyAgICAgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IEFMRl9CTE9D S19TSVpFOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHN1bSA9IDA7CisgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHBpeGVsIGN1cnIgPSAqcDA7CisKKyAgICAgICAgICAgICAgICAg ICAgc3VtICs9IGZpbHRlclswXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwNVsrMF0sIHA2Wysw XSwgY2xpcFswXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMV0gICogRlVO QyhhbGZfY2xpcCkoY3VyciwgcDNbKzFdLCBwNFstMV0sIGNsaXBbMV0pOworICAgICAgICAgICAg ICAgICAgICBzdW0gKz0gZmlsdGVyWzJdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAzWyswXSwg cDRbKzBdLCBjbGlwWzJdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclszXSAg KiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwM1stMV0sIHA0WysxXSwgY2xpcFszXSk7CisgICAgICAg ICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNF0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFb KzJdLCBwMlstMl0sIGNsaXBbNF0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVy WzVdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWysxXSwgcDJbLTFdLCBjbGlwWzVdKTsKKyAg ICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls2XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJy LCBwMVsrMF0sIHAyWyswXSwgY2xpcFs2XSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBm aWx0ZXJbN10gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFbLTFdLCBwMlsrMV0sIGNsaXBbN10p OworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzhdICAqIEZVTkMoYWxmX2NsaXAp KGN1cnIsIHAxWy0yXSwgcDJbKzJdLCBjbGlwWzhdKTsKKyAgICAgICAgICAgICAgICAgICAgc3Vt ICs9IGZpbHRlcls5XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMFsrM10sIHAwWy0zXSwgY2xp cFs5XSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMTBdICogRlVOQyhhbGZf Y2xpcCkoY3VyciwgcDBbKzJdLCBwMFstMl0sIGNsaXBbMTBdKTsKKyAgICAgICAgICAgICAgICAg ICAgc3VtICs9IGZpbHRlclsxMV0gKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMFsrMV0sIHAwWy0x XSwgY2xpcFsxMV0pOworCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNfbmVhcl92YikKKyAg ICAgICAgICAgICAgICAgICAgICAgIHN1bSA9IChzdW0gKyBvZmZzZXQpID4+IHNoaWZ0OworICAg ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzdW0gPSAoc3Vt ICsgKDEgPDwgKChzaGlmdCArIDMpIC0gMSkpKSA+PiAoc2hpZnQgKyAzKTsKKyAgICAgICAgICAg ICAgICAgICAgc3VtICs9IGN1cnI7CisgICAgICAgICAgICAgICAgICAgIGRzdFtqXSA9IENMSVAo c3VtKTsKKworICAgICAgICAgICAgICAgICAgICBwMCsrOworICAgICAgICAgICAgICAgICAgICBw MSsrOworICAgICAgICAgICAgICAgICAgICBwMisrOworICAgICAgICAgICAgICAgICAgICBwMysr OworICAgICAgICAgICAgICAgICAgICBwNCsrOworICAgICAgICAgICAgICAgICAgICBwNSsrOwor ICAgICAgICAgICAgICAgICAgICBwNisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGZpbHRlciArPSBBTEZfTlVNX0NPRUZGX0xVTUE7CisgICAgICAgICAg ICBjbGlwICs9IEFMRl9OVU1fQ09FRkZfTFVNQTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3Rh dGljIHZvaWQgRlVOQyhhbGZfZmlsdGVyX2Nocm9tYSkodWludDhfdCogX2RzdCwgcHRyZGlmZl90 IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QqIF9zcmMsIHB0cmRpZmZfdCBzcmNfc3RyaWRlLAor ICAgIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgaW50MTZfdCogZmls dGVyLCBjb25zdCBpbnQxNl90KiBjbGlwLCBjb25zdCBpbnQgdmJfcG9zKQoreworICAgIGNvbnN0 IHBpeGVsICpzcmMgPSAocGl4ZWwgKilfc3JjOworICAgIGNvbnN0IGludCBzaGlmdCAgPSA3Owor ICAgIGNvbnN0IGludCBvZmZzZXQgPSAxIDw8ICggc2hpZnQgLSAxICk7CisgICAgY29uc3QgaW50 IHZiX2Fib3ZlICA9IHZiX3BvcyAtIDI7CisgICAgY29uc3QgaW50IHZiX2JlbG93ICA9IHZiX3Bv cyArIDE7CisKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisgICAgc3JjX3N0cmlk ZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkg Kz0gQUxGX0JMT0NLX1NJWkUpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg eCArPSBBTEZfQkxPQ0tfU0laRSkgeworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMwID0gc3Jj ICsgeSAqIHNyY19zdHJpZGUgKyB4OworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMxID0gczAg KyBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMyID0gczAgLSBzcmNfc3Ry aWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMzID0gczEgKyBzcmNfc3RyaWRlOworICAg ICAgICAgICAgY29uc3QgcGl4ZWwgKnM0ID0gczIgLSBzcmNfc3RyaWRlOworICAgICAgICAgICAg Y29uc3QgcGl4ZWwgKnM1ID0gczMgKyBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4 ZWwgKnM2ID0gczQgLSBzcmNfc3RyaWRlOworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg aSA8IEFMRl9CTE9DS19TSVpFOyBpKyspIHsKKyAgICAgICAgICAgICAgICBwaXhlbCAqZHN0ID0g KHBpeGVsICopX2RzdCArICh5ICsgaSkgKiBkc3Rfc3RyaWRlICsgeDsKKworICAgICAgICAgICAg ICAgIGNvbnN0IHBpeGVsICpwMCA9IHMwICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAg ICAgY29uc3QgcGl4ZWwgKnAxID0gczEgKyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAg ICBjb25zdCBwaXhlbCAqcDIgPSBzMiArIGkgKiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAg IGNvbnN0IHBpeGVsICpwMyA9IHMzICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAg Y29uc3QgcGl4ZWwgKnA0ID0gczQgKyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBj b25zdCBwaXhlbCAqcDUgPSBzNSArIGkgKiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNv bnN0IHBpeGVsICpwNiA9IHM2ICsgaSAqIHNyY19zdHJpZGU7CisKKyAgICAgICAgICAgICAgICBj b25zdCBpbnQgaXNfbmVhcl92Yl9hYm92ZSA9ICh5ICsgaSA8ICB2Yl9wb3MpICYmICh5ICsgaSA+ PSB2Yl9wb3MgLSAxKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgaXNfbmVhcl92Yl9iZWxv dyA9ICh5ICsgaSA+PSB2Yl9wb3MpICYmICh5ICsgaSA8PSB2Yl9wb3MpOworICAgICAgICAgICAg ICAgIGNvbnN0IGludCBpc19uZWFyX3ZiID0gaXNfbmVhcl92Yl9hYm92ZSB8fCBpc19uZWFyX3Zi X2JlbG93OworCisgICAgICAgICAgICAgICAgaWYgKCh5ICsgaSA8IHZiX3BvcykgJiYgKCh5ICsg aSkgPj0gdmJfYWJvdmUpKSB7CisgICAgICAgICAgICAgICAgICAgIHAxID0gKHkgKyBpID09IHZi X3BvcyAtIDEpID8gcDAgOiBwMTsKKyAgICAgICAgICAgICAgICAgICAgcDMgPSAoeSArIGkgPj0g dmJfcG9zIC0gMikgPyBwMSA6IHAzOworICAgICAgICAgICAgICAgICAgICBwNSA9ICh5ICsgaSA+ PSB2Yl9wb3MgLSAzKSA/IHAzIDogcDU7CisKKyAgICAgICAgICAgICAgICAgICAgcDIgPSAoeSAr IGkgPT0gdmJfcG9zIC0gMSkgPyBwMCA6IHAyOworICAgICAgICAgICAgICAgICAgICBwNCA9ICh5 ICsgaSA+PSB2Yl9wb3MgLSAyKSA/IHAyIDogcDQ7CisgICAgICAgICAgICAgICAgICAgIHA2ID0g KHkgKyBpID49IHZiX3BvcyAtIDMpID8gcDQgOiBwNjsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKCh5ICsgaSA+PSB2Yl9wb3MpICYmICgoeSArIGkpIDw9IHZiX2JlbG93KSkgeworICAgICAg ICAgICAgICAgICAgICBwMiA9ICh5ICsgaSA9PSB2Yl9wb3MgICAgKSA/IHAwIDogcDI7CisgICAg ICAgICAgICAgICAgICAgIHA0ID0gKHkgKyBpIDw9IHZiX3BvcyArIDEpID8gcDIgOiBwNDsKKyAg ICAgICAgICAgICAgICAgICAgcDYgPSAoeSArIGkgPD0gdmJfcG9zICsgMikgPyBwNCA6IHA2Owor CisgICAgICAgICAgICAgICAgICAgIHAxID0gKHkgKyBpID09IHZiX3BvcyAgICApID8gcDAgOiBw MTsKKyAgICAgICAgICAgICAgICAgICAgcDMgPSAoeSArIGkgPD0gdmJfcG9zICsgMSkgPyBwMSA6 IHAzOworICAgICAgICAgICAgICAgICAgICBwNSA9ICh5ICsgaSA8PSB2Yl9wb3MgKyAyKSA/IHAz IDogcDU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9 IDA7IGogPCBBTEZfQkxPQ0tfU0laRTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBz dW0gPSAwOworICAgICAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCBjdXJyID0gKnAwOworCisg ICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMF0gICogRlVOQyhhbGZfY2xpcCkoY3Vy ciwgcDNbKzBdLCBwNFsrMF0sIGNsaXBbMF0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0g ZmlsdGVyWzFdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWysxXSwgcDJbLTFdLCBjbGlwWzFd KTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclsyXSAgKiBGVU5DKGFsZl9jbGlw KShjdXJyLCBwMVsrMF0sIHAyWyswXSwgY2xpcFsyXSk7CisgICAgICAgICAgICAgICAgICAgIHN1 bSArPSBmaWx0ZXJbM10gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFbLTFdLCBwMlsrMV0sIGNs aXBbM10pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzRdICAqIEZVTkMoYWxm X2NsaXApKGN1cnIsIHAwWysyXSwgcDBbLTJdLCBjbGlwWzRdKTsKKyAgICAgICAgICAgICAgICAg ICAgc3VtICs9IGZpbHRlcls1XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMFsrMV0sIHAwWy0x XSwgY2xpcFs1XSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc19uZWFyX3ZiKQorICAg ICAgICAgICAgICAgICAgICAgICAgc3VtID0gKHN1bSArIG9mZnNldCkgPj4gc2hpZnQ7CisgICAg ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1bSA9IChzdW0g KyAoMSA8PCAoKHNoaWZ0ICsgMykgLSAxKSkpID4+IChzaGlmdCArIDMpOworICAgICAgICAgICAg ICAgICAgICBzdW0gKz0gY3VycjsKKyAgICAgICAgICAgICAgICAgICAgZHN0W2pdID0gQ0xJUChz dW0pOworCisgICAgICAgICAgICAgICAgICAgIHAwKys7CisgICAgICAgICAgICAgICAgICAgIHAx Kys7CisgICAgICAgICAgICAgICAgICAgIHAyKys7CisgICAgICAgICAgICAgICAgICAgIHAzKys7 CisgICAgICAgICAgICAgICAgICAgIHA0Kys7CisgICAgICAgICAgICAgICAgICAgIHA1Kys7Cisg ICAgICAgICAgICAgICAgICAgIHA2Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKGFsZl9maWx0ZXJfY2Mp KHVpbnQ4X3QgKl9kc3QsIHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCB1aW50OF90ICpfbHVt YSwgY29uc3QgcHRyZGlmZl90IGx1bWFfc3RyaWRlLAorICAgIGNvbnN0IGludCB3aWR0aCwgY29u c3QgaW50IGhlaWdodCwgY29uc3QgaW50IGhzLCBjb25zdCBpbnQgdnMsIGNvbnN0IGludDE2X3Qg KmZpbHRlciwgY29uc3QgaW50IHZiX3BvcykKK3sKKyAgICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRl ID0gbHVtYV9zdHJpZGUgLyBzaXplb2YocGl4ZWwpOworCisgICAgZHN0X3N0cmlkZSAvPSBzaXpl b2YocGl4ZWwpOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAg ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgIGludCBz dW0gPSAwOworICAgICAgICAgICAgcGl4ZWwgKmRzdCAgPSAocGl4ZWwgKilfZHN0ICArIHkgKiBk c3Rfc3RyaWRlICsgeDsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzcmMgID0gKHBpeGVsICop X2x1bWEgKyAoeSA8PCB2cykgKiBzdHJpZGUgKyAoeCA8PCBocyk7CisKKyAgICAgICAgICAgIGNv bnN0IHBpeGVsICpzMCA9IHNyYyAtIHN0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpz MSA9IHNyYzsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzMiA9IHNyYyArIHN0cmlkZTsKKyAg ICAgICAgICAgIGNvbnN0IHBpeGVsICpzMyA9IHNyYyArIDIgKiBzdHJpZGU7CisKKyAgICAgICAg ICAgIGNvbnN0IGludCBwb3MgPSB5IDw8IHZzOworICAgICAgICAgICAgaWYgKCF2cyAmJiAocG9z ID09IHZiX3BvcyB8fCBwb3MgPT0gdmJfcG9zICsgMSkpCisgICAgICAgICAgICAgICAgY29udGlu dWU7CisKKyAgICAgICAgICAgIGlmIChwb3MgPT0gKHZiX3BvcyAtIDIpIHx8IHBvcyA9PSAodmJf cG9zICsgMSkpCisgICAgICAgICAgICAgICAgczMgPSBzMjsKKyAgICAgICAgICAgIGVsc2UgIGlm IChwb3MgPT0gKHZiX3BvcyAtIDEpIHx8IHBvcyA9PSB2Yl9wb3MpCisgICAgICAgICAgICAgICAg czMgPSBzMiA9IHMwID0gczE7CisKKworICAgICAgICAgICAgc3VtICs9IGZpbHRlclswXSAqICgq czAgLSAqc3JjKTsKKyAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMV0gKiAoKihzMSAtIDEpIC0g KnNyYyk7CisgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzJdICogKCooczEgKyAxKSAtICpzcmMp OworICAgICAgICAgICAgc3VtICs9IGZpbHRlclszXSAqICgqKHMyIC0gMSkgLSAqc3JjKTsKKyAg ICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNF0gKiAoKnMyIC0gKnNyYyk7CisgICAgICAgICAgICBz dW0gKz0gZmlsdGVyWzVdICogKCooczIgKyAxKSAtICpzcmMpOworICAgICAgICAgICAgc3VtICs9 IGZpbHRlcls2XSAqICgqczMgLSAqc3JjKTsKKyAgICAgICAgICAgIHN1bSA9IGF2X2NsaXAoKHN1 bSArIDY0KSA+PiA3LCAtKDEgPDwgKEJJVF9ERVBUSCAtIDEpKSwgKDEgPDwgKEJJVF9ERVBUSCAt IDEpKSAtIDEpOworICAgICAgICAgICAgc3VtICs9ICpkc3Q7CisgICAgICAgICAgICAqZHN0ID0g YXZfY2xpcF9waXhlbChzdW0pOworICAgICAgICB9CisgICAgfQorfQorCisjZGVmaW5lIEFMRl9E SVJfVkVSVCAgICAgICAgMAorI2RlZmluZSBBTEZfRElSX0hPUlogICAgICAgIDEKKyNkZWZpbmUg QUxGX0RJUl9ESUdBMCAgICAgICAyCisjZGVmaW5lIEFMRl9ESVJfRElHQTEgICAgICAgMworCitz dGF0aWMgdm9pZCBGVU5DKGFsZl9nZXRfaWR4KShpbnQgKmNsYXNzX2lkeCwgaW50ICp0cmFuc3Bv c2VfaWR4LCBjb25zdCBpbnQgKnN1bSwgY29uc3QgaW50IGFjKQoreworICAgIHN0YXRpYyBjb25z dCBpbnQgYXJnX3ZhcltdID0gezAsIDEsIDIsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDMsIDMs IDMsIDMsIDQgfTsKKworICAgIGludCBodjAsIGh2MSwgZGlyX2h2LCBkMCwgZDEsIGRpcl9kLCBo dmQxLCBodmQwLCBzdW1faHYsIGRpcjE7CisKKyAgICBkaXJfaHYgPSBzdW1bQUxGX0RJUl9WRVJU XSA8PSBzdW1bQUxGX0RJUl9IT1JaXTsKKyAgICBodjEgICAgPSBGRk1BWChzdW1bQUxGX0RJUl9W RVJUXSwgc3VtW0FMRl9ESVJfSE9SWl0pOworICAgIGh2MCAgICA9IEZGTUlOKHN1bVtBTEZfRElS X1ZFUlRdLCBzdW1bQUxGX0RJUl9IT1JaXSk7CisKKyAgICBkaXJfZCAgPSBzdW1bQUxGX0RJUl9E SUdBMF0gPD0gc3VtW0FMRl9ESVJfRElHQTFdOworICAgIGQxICAgICA9IEZGTUFYKHN1bVtBTEZf RElSX0RJR0EwXSwgc3VtW0FMRl9ESVJfRElHQTFdKTsKKyAgICBkMCAgICAgPSBGRk1JTihzdW1b QUxGX0RJUl9ESUdBMF0sIHN1bVtBTEZfRElSX0RJR0ExXSk7CisKKyAgICAvL3Byb21vdGUgdG8g YXZvaWQgb3ZlcmZsb3cKKyAgICBkaXIxID0gKHVpbnQ2NF90KWQxICogaHYwIDw9ICh1aW50NjRf dClodjEgKiBkMDsKKyAgICBodmQxID0gZGlyMSA/IGh2MSA6IGQxOworICAgIGh2ZDAgPSBkaXIx ID8gaHYwIDogZDA7CisKKyAgICBzdW1faHYgPSBzdW1bQUxGX0RJUl9IT1JaXSArIHN1bVtBTEZf RElSX1ZFUlRdOworICAgICpjbGFzc19pZHggPSBhcmdfdmFyW2F2X2NsaXBfdWludHAyKHN1bV9o diAqIGFjID4+IChCSVRfREVQVEggLSAxKSwgNCldOworICAgIGlmIChodmQxICogMiA+IDkgKiBo dmQwKQorICAgICAgICAqY2xhc3NfaWR4ICs9ICgoZGlyMSA8PCAxKSArIDIpICogNTsKKyAgICBl bHNlIGlmIChodmQxID4gMiAqIGh2ZDApCisgICAgICAgICpjbGFzc19pZHggKz0gKChkaXIxIDw8 IDEpICsgMSkgKiA1OworCisgICAgKnRyYW5zcG9zZV9pZHggPSBkaXJfZCAqIDIgKyBkaXJfaHY7 Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoYWxmX2NsYXNzaWZ5KShpbnQgKmNsYXNzX2lkeCwgaW50 ICp0cmFuc3Bvc2VfaWR4LAorICAgIGNvbnN0IHVpbnQ4X3QgKl9zcmMsIGNvbnN0IHB0cmRpZmZf dCBfc3JjX3N0cmlkZSwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LAorICAgIGNv bnN0IGludCB2Yl9wb3MsIGludCAqZ3JhZGllbnRfdG1wKQoreworICAgIGludCAqZ3JhZDsKKwor ICAgIGNvbnN0IGludCBoID0gaGVpZ2h0ICsgQUxGX0dSQURJRU5UX0JPUkRFUiAqIDI7CisgICAg Y29uc3QgaW50IHcgPSB3aWR0aCAgKyBBTEZfR1JBRElFTlRfQk9SREVSICogMjsKKyAgICBjb25z dCBpbnQgc2l6ZSA9IChBTEZfQkxPQ0tfU0laRSArIEFMRl9HUkFESUVOVF9CT1JERVIgKiAyKSAv IEFMRl9HUkFESUVOVF9TVEVQOworICAgIGNvbnN0IGludCBnc3RyaWRlID0gKHcgLyBBTEZfR1JB RElFTlRfU1RFUCkgKiBBTEZfTlVNX0RJUjsKKworICAgIGNvbnN0IHBpeGVsICpzcmMgICAgICAg ICAgID0gKGNvbnN0IHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlk ZSA9IF9zcmNfc3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICBzcmMgLT0gKEFMRl9HUkFESUVO VF9CT1JERVIgKyAxKSAqIHNyY19zdHJpZGUgKyBBTEZfR1JBRElFTlRfQk9SREVSOworCisgICAg Z3JhZCA9IGdyYWRpZW50X3RtcDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkgKz0gQUxG X0dSQURJRU5UX1NURVApIHsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnMwICA9IHNyYyArIHkgKiBz cmNfc3RyaWRlOworICAgICAgICBjb25zdCBwaXhlbCAqczEgID0gczAgKyBzcmNfc3RyaWRlOwor ICAgICAgICBjb25zdCBwaXhlbCAqczIgID0gczEgKyBzcmNfc3RyaWRlOworICAgICAgICBjb25z dCBwaXhlbCAqczMgID0gczIgKyBzcmNfc3RyaWRlOworCisgICAgICAgIGlmICh5ID09IHZiX3Bv cykgICAgICAgICAgLy9hYm92ZQorICAgICAgICAgICAgczMgPSBzMjsKKyAgICAgICAgZWxzZSBp ZiAoeSA9PSB2Yl9wb3MgKyBBTEZfR1JBRElFTlRfQk9SREVSKQorICAgICAgICAgICAgczAgPSBz MTsKKworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHggKz0gQUxGX0dSQURJRU5UX1NU RVApIHsKKyAgICAgICAgICAgIC8vdHdvIHBvaW50cyBhIHRpbWUKKyAgICAgICAgICAgIGNvbnN0 IHBpeGVsICphMCAgPSBzMCArIHg7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDAgID0gczEg KyB4OworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmIwICA9IHMyICsgeDsKKyAgICAgICAgICAg IGNvbnN0IGludCB2YWwwICAgPSAoKnAwKSA8PCAxOworCisgICAgICAgICAgICBjb25zdCBwaXhl bCAqYTEgID0gczEgKyB4ICsgMTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMSAgPSBzMiAr IHggKyAxOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmIxICA9IHMzICsgeCArIDE7CisgICAg ICAgICAgICBjb25zdCBpbnQgdmFsMSAgID0gKCpwMSkgPDwgMTsKKworICAgICAgICAgICAgZ3Jh ZFtBTEZfRElSX1ZFUlRdICA9IEZGQUJTKHZhbDAgLSAqYTAgLSAqYjApICsgRkZBQlModmFsMSAt ICphMSAtICpiMSk7CisgICAgICAgICAgICBncmFkW0FMRl9ESVJfSE9SWl0gID0gRkZBQlModmFs MCAtICoocDAgLSAxKSAtICoocDAgKyAxKSkgKyBGRkFCUyh2YWwxIC0gKihwMSAtIDEpIC0gKihw MSArIDEpKTsKKyAgICAgICAgICAgIGdyYWRbQUxGX0RJUl9ESUdBMF0gPSBGRkFCUyh2YWwwIC0g KihhMCAtIDEpIC0gKihiMCArIDEpKSArIEZGQUJTKHZhbDEgLSAqKGExIC0gMSkgLSAqKGIxICsg MSkpOworICAgICAgICAgICAgZ3JhZFtBTEZfRElSX0RJR0ExXSA9IEZGQUJTKHZhbDAgLSAqKGEw ICsgMSkgLSAqKGIwIC0gMSkpICsgRkZBQlModmFsMSAtICooYTEgKyAxKSAtICooYjEgLSAxKSk7 CisgICAgICAgICAgICBncmFkICs9IEFMRl9OVU1fRElSOworICAgICAgICB9CisgICAgfQorCisg ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgOyB5ICs9IEFMRl9CTE9DS19TSVpFICkgewor ICAgICAgICBpbnQgc3RhcnQgPSAwOworICAgICAgICBpbnQgZW5kICAgPSAoQUxGX0JMT0NLX1NJ WkUgKyBBTEZfR1JBRElFTlRfQk9SREVSICogMikgLyBBTEZfR1JBRElFTlRfU1RFUDsKKyAgICAg ICAgaW50IGFjICAgID0gMjsKKyAgICAgICAgaWYgKHkgKyBBTEZfQkxPQ0tfU0laRSA9PSB2Yl9w b3MpIHsKKyAgICAgICAgICAgIGVuZCAtPSBBTEZfR1JBRElFTlRfQk9SREVSIC8gQUxGX0dSQURJ RU5UX1NURVA7CisgICAgICAgICAgICBhYyA9IDM7CisgICAgICAgIH0gZWxzZSBpZiAoeSA9PSB2 Yl9wb3MpIHsKKyAgICAgICAgICAgIHN0YXJ0ICs9IEFMRl9HUkFESUVOVF9CT1JERVIgLyBBTEZf R1JBRElFTlRfU1RFUDsKKyAgICAgICAgICAgIGFjID0gMzsKKyAgICAgICAgfQorICAgICAgICBm b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4ICs9IEFMRl9CTE9DS19TSVpFKSB7CisgICAgICAg ICAgICBjb25zdCBpbnQgeGcgPSB4IC8gQUxGX0dSQURJRU5UX1NURVA7CisgICAgICAgICAgICBj b25zdCBpbnQgeWcgPSB5IC8gQUxGX0dSQURJRU5UX1NURVA7CisgICAgICAgICAgICBpbnQgc3Vt W0FMRl9OVU1fRElSXSA9IHsgMCB9OworCisgICAgICAgICAgICBncmFkID0gZ3JhZGllbnRfdG1w ICsgKHlnICsgc3RhcnQpICogZ3N0cmlkZSArIHhnICogQUxGX05VTV9ESVI7CisgICAgICAgICAg ICAvL3RvZG86IG9wdGltaXplIHRoaXMgbG9vcAorICAgICAgICAgICAgZm9yIChpbnQgaSA9IHN0 YXJ0OyBpIDwgZW5kOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8 IHNpemU7IGorKykgeworICAgICAgICAgICAgICAgICAgICBzdW1bQUxGX0RJUl9WRVJUXSAgKz0g Z3JhZFtBTEZfRElSX1ZFUlRdOworICAgICAgICAgICAgICAgICAgICBzdW1bQUxGX0RJUl9IT1Ja XSAgKz0gZ3JhZFtBTEZfRElSX0hPUlpdOworICAgICAgICAgICAgICAgICAgICBzdW1bQUxGX0RJ Ul9ESUdBMF0gKz0gZ3JhZFtBTEZfRElSX0RJR0EwXTsKKyAgICAgICAgICAgICAgICAgICAgc3Vt W0FMRl9ESVJfRElHQTFdICs9IGdyYWRbQUxGX0RJUl9ESUdBMV07CisgICAgICAgICAgICAgICAg ICAgIGdyYWQgKz0gQUxGX05VTV9ESVI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIGdyYWQgKz0gZ3N0cmlkZSAtIHNpemUgKiBBTEZfTlVNX0RJUjsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIEZVTkMoYWxmX2dldF9pZHgpKGNsYXNzX2lkeCwgdHJhbnNwb3NlX2lkeCwg c3VtLCBhYyk7CisKKyAgICAgICAgICAgIGNsYXNzX2lkeCsrOworICAgICAgICAgICAgdHJhbnNw b3NlX2lkeCsrOworICAgICAgICB9CisgICAgfQorCit9CisKK3N0YXRpYyB2b2lkIEZVTkMoYWxm X3JlY29uX2NvZWZmX2FuZF9jbGlwKShpbnQxNl90ICpjb2VmZiwgaW50MTZfdCAqY2xpcCwKKyAg ICBjb25zdCBpbnQgKmNsYXNzX2lkeCwgY29uc3QgaW50ICp0cmFuc3Bvc2VfaWR4LCBjb25zdCBp bnQgc2l6ZSwKKyAgICBjb25zdCBpbnQxNl90ICpjb2VmZl9zZXQsIGNvbnN0IHVpbnQ4X3QgKmNs aXBfaWR4X3NldCwgY29uc3QgdWludDhfdCAqY2xhc3NfdG9fZmlsdCkKK3sKKyAgICBjb25zdCBz dGF0aWMgaW50IGluZGV4W11bQUxGX05VTV9DT0VGRl9MVU1BXSA9IHsKKyAgICAgICAgeyAwLCAx LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEgfSwKKyAgICAgICAgeyA5LCA0LCAxMCwg OCwgMSwgNSwgMTEsIDcsIDMsIDAsIDIsIDYgfSwKKyAgICAgICAgeyAwLCAzLCAyLCAxLCA4LCA3 LCA2LCA1LCA0LCA5LCAxMCwgMTEgfSwKKyAgICAgICAgeyA5LCA4LCAxMCwgNCwgMywgNywgMTEs IDUsIDEsIDAsIDIsIDYgfSwKKyAgICB9OworCisgICAgY29uc3QgaW50MTZfdCBjbGlwX3NldFtd ID0geworICAgICAgICAxIDw8IEJJVF9ERVBUSCwgMSA8PCAoQklUX0RFUFRIIC0gMyksIDEgPDwg KEJJVF9ERVBUSCAtIDUpLCAxIDw8IChCSVRfREVQVEggLSA3KQorICAgIH07CisKKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBjb25zdCBpbnQxNl90ICAqc3Jj X2NvZWZmID0gY29lZmZfc2V0ICsgY2xhc3NfdG9fZmlsdFtjbGFzc19pZHhbaV1dICogQUxGX05V TV9DT0VGRl9MVU1BOworICAgICAgICBjb25zdCB1aW50OF90ICpjbGlwX2lkeCAgPSBjbGlwX2lk eF9zZXQgKyBjbGFzc19pZHhbaV0gKiBBTEZfTlVNX0NPRUZGX0xVTUE7CisKKyAgICAgICAgZm9y IChpbnQgaiA9IDA7IGogPCBBTEZfTlVNX0NPRUZGX0xVTUE7IGorKykgeworICAgICAgICAgICAg Y29uc3QgaW50IGlkeCA9IGluZGV4W3RyYW5zcG9zZV9pZHhbaV1dW2pdOworICAgICAgICAgICAg KmNvZWZmKysgPSBzcmNfY29lZmZbaWR4XTsKKyAgICAgICAgICAgICpjbGlwKysgID0gY2xpcF9z ZXRbY2xpcF9pZHhbaWR4XV07CisgICAgICAgIH0KKyAgICB9Cit9CisKKyN1bmRlZiBBTEZfRElS X0hPUloKKyN1bmRlZiBBTEZfRElSX1ZFUlQKKyN1bmRlZiBBTEZfRElSX0RJR0EwCisjdW5kZWYg QUxGX0RJUl9ESUdBMQorCisvLyBsaW5lIHplcm8KKyNkZWZpbmUgUDcgcGl4Wy04ICogeHN0cmlk ZV0KKyNkZWZpbmUgUDYgcGl4Wy03ICogeHN0cmlkZV0KKyNkZWZpbmUgUDUgcGl4Wy02ICogeHN0 cmlkZV0KKyNkZWZpbmUgUDQgcGl4Wy01ICogeHN0cmlkZV0KKyNkZWZpbmUgUDMgcGl4Wy00ICog eHN0cmlkZV0KKyNkZWZpbmUgUDIgcGl4Wy0zICogeHN0cmlkZV0KKyNkZWZpbmUgUDEgcGl4Wy0y ICogeHN0cmlkZV0KKyNkZWZpbmUgUDAgcGl4Wy0xICogeHN0cmlkZV0KKyNkZWZpbmUgUTAgcGl4 WzAgKiB4c3RyaWRlXQorI2RlZmluZSBRMSBwaXhbMSAqIHhzdHJpZGVdCisjZGVmaW5lIFEyIHBp eFsyICogeHN0cmlkZV0KKyNkZWZpbmUgUTMgcGl4WzMgKiB4c3RyaWRlXQorI2RlZmluZSBRNCBw aXhbNCAqIHhzdHJpZGVdCisjZGVmaW5lIFE1IHBpeFs1ICogeHN0cmlkZV0KKyNkZWZpbmUgUTYg cGl4WzYgKiB4c3RyaWRlXQorI2RlZmluZSBRNyBwaXhbNyAqIHhzdHJpZGVdCisjZGVmaW5lIFAo eCkgcGl4WygtKHgpLTEpICogeHN0cmlkZV0KKyNkZWZpbmUgUSh4KSBwaXhbKHgpICAgICAgKiB4 c3RyaWRlXQorCisvLyBsaW5lIHRocmVlLiB1c2VkIG9ubHkgZm9yIGRlYmxvY2tpbmcgZGVjaXNp b24KKyNkZWZpbmUgVFA3IHBpeFstOCAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUg VFA2IHBpeFstNyAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFA1IHBpeFstNiAq IHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFA0IHBpeFstNSAqIHhzdHJpZGUgKyAz ICogeXN0cmlkZV0KKyNkZWZpbmUgVFAzIHBpeFstNCAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0K KyNkZWZpbmUgVFAyIHBpeFstMyAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFAx IHBpeFstMiAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFAwIHBpeFstMSAqIHhz dHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFEwIHBpeFswICAqIHhzdHJpZGUgKyAzICog eXN0cmlkZV0KKyNkZWZpbmUgVFExIHBpeFsxICAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNk ZWZpbmUgVFEyIHBpeFsyICAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFEzIHBp eFszICAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFE0IHBpeFs0ICAqIHhzdHJp ZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFE1IHBpeFs1ICAqIHhzdHJpZGUgKyAzICogeXN0 cmlkZV0KKyNkZWZpbmUgVFE2IHBpeFs2ICAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZp bmUgVFE3IHBpeFs3ICAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFAoeCkgcGl4 WygtKHgpLTEpICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUSh4KSBwaXhbKHgp ICAgICAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisKKyNkZWZpbmUgRlAzIHBpeFstNCAqIHhz dHJpZGUgKyAxICogeXN0cmlkZV0KKyNkZWZpbmUgRlAyIHBpeFstMyAqIHhzdHJpZGUgKyAxICog eXN0cmlkZV0KKyNkZWZpbmUgRlAxIHBpeFstMiAqIHhzdHJpZGUgKyAxICogeXN0cmlkZV0KKyNk ZWZpbmUgRlAwIHBpeFstMSAqIHhzdHJpZGUgKyAxICogeXN0cmlkZV0KKyNkZWZpbmUgRlEwIHBp eFswICAqIHhzdHJpZGUgKyAxICogeXN0cmlkZV0KKyNkZWZpbmUgRlExIHBpeFsxICAqIHhzdHJp ZGUgKyAxICogeXN0cmlkZV0KKyNkZWZpbmUgRlEyIHBpeFsyICAqIHhzdHJpZGUgKyAxICogeXN0 cmlkZV0KKyNkZWZpbmUgRlEzIHBpeFszICAqIHhzdHJpZGUgKyAxICogeXN0cmlkZV0KKworc3Rh dGljIHZvaWQgRlVOQyhsb29wX2ZpbHRlcl9sdW1hX2xhcmdlKShwaXhlbCAqcGl4LCBjb25zdCBw dHJkaWZmX3QgeHN0cmlkZSwgY29uc3QgcHRyZGlmZl90IHlzdHJpZGUsIGNvbnN0IGludDMyX3Qg dGMsCisgICAgY29uc3QgdWludDhfdCBub19wLCBjb25zdCB1aW50OF90IG5vX3EsIGNvbnN0IHVp bnQ4X3QgbWF4X2xlbl9wLCBjb25zdCB1aW50OF90IG1heF9sZW5fcSkKK3sKKyAgICBmb3IgKGlu dCBkID0gMDsgZCA8IDQ7IGQrKykgeworICAgICAgICBjb25zdCBpbnQgcDYgPSBQNjsKKyAgICAg ICAgY29uc3QgaW50IHA1ID0gUDU7CisgICAgICAgIGNvbnN0IGludCBwNCA9IFA0OworICAgICAg ICBjb25zdCBpbnQgcDMgPSBQMzsKKyAgICAgICAgY29uc3QgaW50IHAyID0gUDI7CisgICAgICAg IGNvbnN0IGludCBwMSA9IFAxOworICAgICAgICBjb25zdCBpbnQgcDAgPSBQMDsKKyAgICAgICAg Y29uc3QgaW50IHEwID0gUTA7CisgICAgICAgIGNvbnN0IGludCBxMSA9IFExOworICAgICAgICBj b25zdCBpbnQgcTIgPSBRMjsKKyAgICAgICAgY29uc3QgaW50IHEzID0gUTM7CisgICAgICAgIGNv bnN0IGludCBxNCA9IFE0OworICAgICAgICBjb25zdCBpbnQgcTUgPSBRNTsKKyAgICAgICAgY29u c3QgaW50IHE2ID0gUTY7CisgICAgICAgIGludCBtOworICAgICAgICBpZiAobWF4X2xlbl9wID09 IDUgJiYgbWF4X2xlbl9xID09IDUpCisgICAgICAgICAgICBtID0gKHA0ICsgcDMgKyAyICogKHAy ICsgcDEgKyBwMCArIHEwICsgcTEgKyBxMikgKyBxMyArIHE0ICsgOCkgPj4gNDsKKyAgICAgICAg ZWxzZSBpZiAobWF4X2xlbl9wID09IG1heF9sZW5fcSkKKyAgICAgICAgICAgIG0gPSAocDYgKyBw NSArIHA0ICsgcDMgKyBwMiArIHAxICsgMiAqIChwMCArIHEwKSArIHExICsgcTIgKyBxMyArIHE0 ICsgcTUgKyBxNiArIDgpID4+IDQ7CisgICAgICAgIGVsc2UgaWYgKG1heF9sZW5fcCArIG1heF9s ZW5fcSA9PSAxMikKKyAgICAgICAgICAgIG0gPSAocDUgKyBwNCArIHAzICsgcDIgKyAyICogKHAx ICsgcDAgKyBxMCArIHExKSArIHEyICsgcTMgKyBxNCArIHE1ICsgOCkgPj4gNDsKKyAgICAgICAg ZWxzZSBpZiAobWF4X2xlbl9wICsgbWF4X2xlbl9xID09IDgpCisgICAgICAgICAgICBtID0gKHAz ICsgcDIgKyBwMSArIHAwICsgcTAgKyBxMSArIHEyICsgcTMgKyA0KSA+PiAzOworICAgICAgICBl bHNlIGlmIChtYXhfbGVuX3EgPT0gNykKKyAgICAgICAgICAgIG0gPSAoMiAqIChwMiArIHAxICsg cDAgKyBxMCkgKyBwMCArIHAxICsgcTEgKyBxMiArIHEzICsgcTQgKyBxNSArIHE2ICsgOCkgPj4g NDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbSA9IChwNiArIHA1ICsgcDQgKyBwMyArIHAy ICsgcDEgKyAyICogKHEyICsgcTEgKyBxMCArIHAwKSArIHEwICsgcTEgKyA4KSA+PiA0OworICAg ICAgICBpZiAoIW5vX3ApIHsKKyAgICAgICAgICAgIGNvbnN0IGludCByZWZwID0gKFAobWF4X2xl bl9wKSArIFAobWF4X2xlbl9wIC0gMSkgKyAxKSA+PiAxOworICAgICAgICAgICAgaWYgKG1heF9s ZW5fcCA9PSAzKSB7CisgICAgICAgICAgICAgICAgUDAgPSBwMCArIGF2X2NsaXAoKChtICogNTMg KyByZWZwICogMTEgKyAzMikgPj4gNikgLSBwMCwgLSh0YyAqIDYgPj4gMSksICh0YyAqIDYgPj4g MSkpOworICAgICAgICAgICAgICAgIFAxID0gcDEgKyBhdl9jbGlwKCgobSAqIDMyICsgcmVmcCAq IDMyICsgMzIpID4+IDYpIC0gcDEsIC0odGMgKiA0ID4+IDEpLCAodGMgKiA0ID4+IDEpKTsKKyAg ICAgICAgICAgICAgICBQMiA9IHAyICsgYXZfY2xpcCgoKG0gKiAxMSArIHJlZnAgKiA1MyArIDMy KSA+PiA2KSAtIHAyLCAtKHRjICogMiA+PiAxKSwgKHRjICogMiA+PiAxKSk7CisgICAgICAgICAg ICB9IGVsc2UgaWYgKG1heF9sZW5fcCA9PSA1KSB7CisgICAgICAgICAgICAgICAgUDAgPSBwMCAr IGF2X2NsaXAoKChtICogNTggKyByZWZwICogIDYgKyAzMikgPj4gNikgLSBwMCwgLSh0YyAqIDYg Pj4gMSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAgIFAxID0gcDEgKyBhdl9jbGlw KCgobSAqIDQ1ICsgcmVmcCAqIDE5ICsgMzIpID4+IDYpIC0gcDEsIC0odGMgKiA1ID4+IDEpLCAo dGMgKiA1ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQMiA9IHAyICsgYXZfY2xpcCgoKG0gKiAz MiArIHJlZnAgKiAzMiArIDMyKSA+PiA2KSAtIHAyLCAtKHRjICogNCA+PiAxKSwgKHRjICogNCA+ PiAxKSk7CisgICAgICAgICAgICAgICAgUDMgPSBwMyArIGF2X2NsaXAoKChtICogMTkgKyByZWZw ICogNDUgKyAzMikgPj4gNikgLSBwMywgLSh0YyAqIDMgPj4gMSksICh0YyAqIDMgPj4gMSkpOwor ICAgICAgICAgICAgICAgIFA0ID0gcDQgKyBhdl9jbGlwKCgobSAqICA2ICsgcmVmcCAqIDU4ICsg MzIpID4+IDYpIC0gcDQsIC0odGMgKiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsKKyAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUDAgPSBwMCArIGF2X2NsaXAoKChtICogNTkg KyByZWZwICogIDUgKyAzMikgPj4gNikgLSBwMCwgLSh0YyAqIDYgPj4gMSksICh0YyAqIDYgPj4g MSkpOworICAgICAgICAgICAgICAgIFAxID0gcDEgKyBhdl9jbGlwKCgobSAqIDUwICsgcmVmcCAq IDE0ICsgMzIpID4+IDYpIC0gcDEsIC0odGMgKiA1ID4+IDEpLCAodGMgKiA1ID4+IDEpKTsKKyAg ICAgICAgICAgICAgICBQMiA9IHAyICsgYXZfY2xpcCgoKG0gKiA0MSArIHJlZnAgKiAyMyArIDMy KSA+PiA2KSAtIHAyLCAtKHRjICogNCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAg ICAgICAgUDMgPSBwMyArIGF2X2NsaXAoKChtICogMzIgKyByZWZwICogMzIgKyAzMikgPj4gNikg LSBwMywgLSh0YyAqIDMgPj4gMSksICh0YyAqIDMgPj4gMSkpOworICAgICAgICAgICAgICAgIFA0 ID0gcDQgKyBhdl9jbGlwKCgobSAqIDIzICsgcmVmcCAqIDQxICsgMzIpID4+IDYpIC0gcDQsIC0o dGMgKiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQNSA9IHA1ICsg YXZfY2xpcCgoKG0gKiAxNCArIHJlZnAgKiA1MCArIDMyKSA+PiA2KSAtIHA1LCAtKHRjICogMSA+ PiAxKSwgKHRjICogMSA+PiAxKSk7CisgICAgICAgICAgICAgICAgUDYgPSBwNiArIGF2X2NsaXAo KChtICogIDUgKyByZWZwICogNTkgKyAzMikgPj4gNikgLSBwNiwgLSh0YyAqIDEgPj4gMSksICh0 YyAqIDEgPj4gMSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghbm9f cSkgeworICAgICAgICAgICAgY29uc3QgaW50IHJlZnEgPSAoUShtYXhfbGVuX3EpICsgUShtYXhf bGVuX3EgLSAxKSArIDEpID4+IDE7CisgICAgICAgICAgICBpZiAobWF4X2xlbl9xID09IDMpIHsK KyAgICAgICAgICAgICAgICBRMCA9IHEwICsgYXZfY2xpcCgoKG0gKiA1MyArIHJlZnEgKiAxMSAr IDMyKSA+PiA2KSAtIHEwLCAgLSh0YyAqIDYgPj4gMSksICh0YyAqIDYgPj4gMSkpOworICAgICAg ICAgICAgICAgIFExID0gcTEgKyBhdl9jbGlwKCgobSAqIDMyICsgcmVmcSAqIDMyICsgMzIpID4+ IDYpIC0gcTEsICAtKHRjICogNCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAg ICAgUTIgPSBxMiArIGF2X2NsaXAoKChtICogMTEgKyByZWZxICogNTMgKyAzMikgPj4gNikgLSBx MiwgIC0odGMgKiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsKKyAgICAgICAgICAgIH0gZWxzZSBp ZiAobWF4X2xlbl9xID09IDUpIHsKKyAgICAgICAgICAgICAgICBRMCA9IHEwICsgYXZfY2xpcCgo KG0gKiA1OCArIHJlZnEgKiAgNiArIDMyKSA+PiA2KSAtIHEwLCAtKHRjICogNiA+PiAxKSwgKHRj ICogNiA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTEgPSBxMSArIGF2X2NsaXAoKChtICogNDUg KyByZWZxICogMTkgKyAzMikgPj4gNikgLSBxMSwgLSh0YyAqIDUgPj4gMSksICh0YyAqIDUgPj4g MSkpOworICAgICAgICAgICAgICAgIFEyID0gcTIgKyBhdl9jbGlwKCgobSAqIDMyICsgcmVmcSAq IDMyICsgMzIpID4+IDYpIC0gcTIsIC0odGMgKiA0ID4+IDEpLCAodGMgKiA0ID4+IDEpKTsKKyAg ICAgICAgICAgICAgICBRMyA9IHEzICsgYXZfY2xpcCgoKG0gKiAxOSArIHJlZnEgKiA0NSArIDMy KSA+PiA2KSAtIHEzLCAtKHRjICogMyA+PiAxKSwgKHRjICogMyA+PiAxKSk7CisgICAgICAgICAg ICAgICAgUTQgPSBxNCArIGF2X2NsaXAoKChtICogIDYgKyByZWZxICogNTggKyAzMikgPj4gNikg LSBxNCwgLSh0YyAqIDIgPj4gMSksICh0YyAqIDIgPj4gMSkpOworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBRMCA9IHEwICsgYXZfY2xpcCgoKG0gKiA1OSArIHJlZnEgKiAg NSArIDMyKSA+PiA2KSAtIHEwLCAtKHRjICogNiA+PiAxKSwgKHRjICogNiA+PiAxKSk7CisgICAg ICAgICAgICAgICAgUTEgPSBxMSArIGF2X2NsaXAoKChtICogNTAgKyByZWZxICogMTQgKyAzMikg Pj4gNikgLSBxMSwgLSh0YyAqIDUgPj4gMSksICh0YyAqIDUgPj4gMSkpOworICAgICAgICAgICAg ICAgIFEyID0gcTIgKyBhdl9jbGlwKCgobSAqIDQxICsgcmVmcSAqIDIzICsgMzIpID4+IDYpIC0g cTIsIC0odGMgKiA0ID4+IDEpLCAodGMgKiA0ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRMyA9 IHEzICsgYXZfY2xpcCgoKG0gKiAzMiArIHJlZnEgKiAzMiArIDMyKSA+PiA2KSAtIHEzLCAtKHRj ICogMyA+PiAxKSwgKHRjICogMyA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTQgPSBxNCArIGF2 X2NsaXAoKChtICogMjMgKyByZWZxICogNDEgKyAzMikgPj4gNikgLSBxNCwgLSh0YyAqIDIgPj4g MSksICh0YyAqIDIgPj4gMSkpOworICAgICAgICAgICAgICAgIFE1ID0gcTUgKyBhdl9jbGlwKCgo bSAqIDE0ICsgcmVmcSAqIDUwICsgMzIpID4+IDYpIC0gcTUsIC0odGMgKiAxID4+IDEpLCAodGMg KiAxID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRNiA9IHE2ICsgYXZfY2xpcCgoKG0gKiAgNSAr IHJlZnEgKiA1OSArIDMyKSA+PiA2KSAtIHE2LCAtKHRjICogMSA+PiAxKSwgKHRjICogMSA+PiAx KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgICAgICBwaXggKz0geXN0cmlkZTsK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMobG9vcF9maWx0ZXJfbHVtYV9zdHJvbmcpKHBp eGVsICpwaXgsIGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRlLCBjb25zdCBwdHJkaWZmX3QgeXN0cmlk ZSwgY29uc3QgaW50MzJfdCB0YywKKyAgICBjb25zdCB1aW50OF90IG5vX3AsIGNvbnN0IHVpbnQ4 X3Qgbm9fcSkKK3sKKyAgICBjb25zdCBpbnQgdGMyID0gdGMgPDwgMTsKKyAgICBjb25zdCBpbnQg dGMzID0gdGMgKiAzOworICAgIGZvciAoaW50IGQgPSAwOyBkIDwgNDsgZCsrKSB7CisgICAgICAg IGNvbnN0IGludCBwMyA9IFAzOworICAgICAgICBjb25zdCBpbnQgcDIgPSBQMjsKKyAgICAgICAg Y29uc3QgaW50IHAxID0gUDE7CisgICAgICAgIGNvbnN0IGludCBwMCA9IFAwOworICAgICAgICBj b25zdCBpbnQgcTAgPSBRMDsKKyAgICAgICAgY29uc3QgaW50IHExID0gUTE7CisgICAgICAgIGNv bnN0IGludCBxMiA9IFEyOworICAgICAgICBjb25zdCBpbnQgcTMgPSBRMzsKKyAgICAgICAgaWYg KCFub19wKSB7CisgICAgICAgICAgICBQMCA9IHAwICsgYXZfY2xpcCgoKHAyICsgMiAqIHAxICsg MiAqIHAwICsgMiAqIHEwICsgcTEgKyA0KSA+PiAzKSAtIHAwLCAtdGMzLCB0YzMpOworICAgICAg ICAgICAgUDEgPSBwMSArIGF2X2NsaXAoKChwMiArIHAxICsgcDAgKyBxMCArIDIpID4+IDIpIC0g cDEsIC10YzIsIHRjMik7CisgICAgICAgICAgICBQMiA9IHAyICsgYXZfY2xpcCgoKDIgKiBwMyAr IDMgKiBwMiArIHAxICsgcDAgKyBxMCArIDQpID4+IDMpIC0gcDIsIC10YywgdGMpOworICAgICAg ICB9CisgICAgICAgIGlmICghbm9fcSkgeworICAgICAgICAgICAgUTAgPSBxMCArIGF2X2NsaXAo KChwMSArIDIgKiBwMCArIDIgKiBxMCArIDIgKiBxMSArIHEyICsgNCkgPj4gMykgLSBxMCwgLXRj MywgdGMzKTsKKyAgICAgICAgICAgIFExID0gcTEgKyBhdl9jbGlwKCgocDAgKyBxMCArIHExICsg cTIgKyAyKSA+PiAyKSAtIHExLCAtdGMyLCB0YzIpOworICAgICAgICAgICAgUTIgPSBxMiArIGF2 X2NsaXAoKCgyICogcTMgKyAzICogcTIgKyBxMSArIHEwICsgcDAgKyA0KSA+PiAzKSAtIHEyLCAt dGMsIHRjKTsKKyAgICAgICAgfQorICAgICAgICBwaXggKz0geXN0cmlkZTsKKyAgICB9Cit9CisK K3N0YXRpYyB2b2lkIEZVTkMobG9vcF9maWx0ZXJfbHVtYV93ZWFrKShwaXhlbCAqcGl4LCBjb25z dCBwdHJkaWZmX3QgeHN0cmlkZSwgY29uc3QgcHRyZGlmZl90IHlzdHJpZGUsCisgICAgY29uc3Qg aW50MzJfdCB0YywgY29uc3QgaW50MzJfdCBiZXRhLCBjb25zdCB1aW50OF90IG5vX3AsIGNvbnN0 IHVpbnQ4X3Qgbm9fcSwgY29uc3QgaW50IG5kX3AsIGNvbnN0IGludCBuZF9xKQoreworICAgIGNv bnN0IGludCB0Y18yID0gdGMgPj4gMTsKKyAgICBmb3IgKGludCBkID0gMDsgZCA8IDQ7IGQrKykg eworICAgICAgICBjb25zdCBpbnQgcDIgPSBQMjsKKyAgICAgICAgY29uc3QgaW50IHAxID0gUDE7 CisgICAgICAgIGNvbnN0IGludCBwMCA9IFAwOworICAgICAgICBjb25zdCBpbnQgcTAgPSBRMDsK KyAgICAgICAgY29uc3QgaW50IHExID0gUTE7CisgICAgICAgIGNvbnN0IGludCBxMiA9IFEyOwor ICAgICAgICBpbnQgZGVsdGEwID0gKDkgKiAocTAgLSBwMCkgLSAzICogKHExIC0gcDEpICsgOCkg Pj4gNDsKKyAgICAgICAgaWYgKGFicyhkZWx0YTApIDwgMTAgKiB0YykgeworICAgICAgICAgICAg ZGVsdGEwID0gYXZfY2xpcChkZWx0YTAsIC10YywgdGMpOworICAgICAgICAgICAgaWYgKCFub19w KQorICAgICAgICAgICAgICAgIFAwID0gYXZfY2xpcF9waXhlbChwMCArIGRlbHRhMCk7CisgICAg ICAgICAgICBpZiAoIW5vX3EpCisgICAgICAgICAgICAgICAgUTAgPSBhdl9jbGlwX3BpeGVsKHEw IC0gZGVsdGEwKTsKKyAgICAgICAgICAgIGlmICghbm9fcCAmJiBuZF9wID4gMSkgeworICAgICAg ICAgICAgICAgIGNvbnN0IGludCBkZWx0YXAxID0gYXZfY2xpcCgoKChwMiArIHAwICsgMSkgPj4g MSkgLSBwMSArIGRlbHRhMCkgPj4gMSwgLXRjXzIsIHRjXzIpOworICAgICAgICAgICAgICAgIFAx ID0gYXZfY2xpcF9waXhlbChwMSArIGRlbHRhcDEpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKCFub19xICYmIG5kX3EgPiAxKSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGRl bHRhcTEgPSBhdl9jbGlwKCgoKHEyICsgcTAgKyAxKSA+PiAxKSAtIHExIC0gZGVsdGEwKSA+PiAx LCAtdGNfMiwgdGNfMik7CisgICAgICAgICAgICAgICAgUTEgPSBhdl9jbGlwX3BpeGVsKHExICsg ZGVsdGFxMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcGl4ICs9IHlzdHJp ZGU7CisgICAgfQorCit9CisKK3N0YXRpYyB2b2lkIEZVTkModnZjX2xvb3BfZmlsdGVyX2x1bWEp KHVpbnQ4X3QqIF9waXgsIHB0cmRpZmZfdCBfeHN0cmlkZSwgcHRyZGlmZl90IF95c3RyaWRlLAor ICAgIGNvbnN0IGludDMyX3QgKl9iZXRhLCBjb25zdCBpbnQzMl90ICpfdGMsIGNvbnN0IHVpbnQ4 X3QgKl9ub19wLCBjb25zdCB1aW50OF90ICpfbm9fcSwKKyAgICBjb25zdCB1aW50OF90ICpfbWF4 X2xlbl9wLCBjb25zdCB1aW50OF90ICpfbWF4X2xlbl9xLCBpbnQgaG9yX2N0dV9lZGdlKQorewor ICAgIGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRlID0gX3hzdHJpZGUgLyBzaXplb2YocGl4ZWwpOwor ICAgIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlID0gX3lzdHJpZGUgLyBzaXplb2YocGl4ZWwpOwor CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgICAgcGl4ZWwqIHBpeCAg ICAgID0gKHBpeGVsKilfcGl4ICsgaSAqIDQgKiB5c3RyaWRlOworICAgICAgICBjb25zdCBpbnQg ZHAwICAgPSBhYnMoUDIgLSAyICogUDEgKyBQMCk7CisgICAgICAgIGNvbnN0IGludCBkcTAgICA9 IGFicyhRMiAtIDIgKiBRMSArIFEwKTsKKyAgICAgICAgY29uc3QgaW50IGRwMyAgID0gYWJzKFRQ MiAtIDIgKiBUUDEgKyBUUDApOworICAgICAgICBjb25zdCBpbnQgZHEzICAgPSBhYnMoVFEyIC0g MiAqIFRRMSArIFRRMCk7CisgICAgICAgIGNvbnN0IGludCBkMCAgICA9IGRwMCArIGRxMDsKKyAg ICAgICAgY29uc3QgaW50IGQzICAgID0gZHAzICsgZHEzOworI2lmIEJJVF9ERVBUSCA8IDEwCisg ICAgICAgIGNvbnN0IGludCB0YyAgICA9IChfdGNbaV0gKyAoMSA8PCAoOSAtIEJJVF9ERVBUSCkp KSA+PiAoMTAgLSBCSVRfREVQVEgpOworI2Vsc2UKKyAgICAgICAgY29uc3QgaW50IHRjICAgID0g X3RjW2ldIDw8IChCSVRfREVQVEggLSAxMCk7CisjZW5kaWYKKyAgICAgICAgY29uc3QgaW50IHRj MjUgID0gKCh0YyAqIDUgKyAxKSA+PiAxKTsKKworICAgICAgICBjb25zdCBpbnQgbm9fcCAgPSBf bm9fcFtpXTsKKyAgICAgICAgY29uc3QgaW50IG5vX3EgID0gX25vX3FbaV07CisKKyAgICAgICAg aW50IG1heF9sZW5fcCAgID0gX21heF9sZW5fcFtpXTsKKyAgICAgICAgaW50IG1heF9sZW5fcSAg ID0gX21heF9sZW5fcVtpXTsKKworICAgICAgICBjb25zdCBpbnQgbGFyZ2VfcCA9IChtYXhfbGVu X3AgPiAzICYmICFob3JfY3R1X2VkZ2UpOworICAgICAgICBjb25zdCBpbnQgbGFyZ2VfcSA9IG1h eF9sZW5fcSA+IDM7CisgICAgICAgIGNvbnN0IGludCBiZXRhID0gX2JldGFbaV0gPDwgQklUX0RF UFRIIC0gODsKKworICAgICAgICBjb25zdCBpbnQgYmV0YV8zID0gYmV0YSA+PiAzOworICAgICAg ICBjb25zdCBpbnQgYmV0YV8yID0gYmV0YSA+PiAyOworCisgICAgICAgIGlmICghdGMpCisgICAg ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAobGFyZ2VfcCB8fCBsYXJnZV9xKSB7Cisg ICAgICAgICAgICBjb25zdCBpbnQgZHAwbCA9IGxhcmdlX3AgPyAoKGRwMCArIGFicyhQNSAtIDIg KiBQNCArIFAzKSArIDEpID4+IDEpIDogZHAwOworICAgICAgICAgICAgY29uc3QgaW50IGRxMGwg PSBsYXJnZV9xID8gKChkcTAgKyBhYnMoUTUgLSAyICogUTQgKyBRMykgKyAxKSA+PiAxKSA6IGRx MDsKKyAgICAgICAgICAgIGNvbnN0IGludCBkcDNsID0gbGFyZ2VfcCA/ICgoZHAzICsgYWJzKFRQ NSAtIDIgKiBUUDQgKyBUUDMpICsgMSkgPj4gMSkgOiBkcDM7CisgICAgICAgICAgICBjb25zdCBp bnQgZHEzbCA9IGxhcmdlX3EgPyAoKGRxMyArIGFicyhUUTUgLSAyICogVFE0ICsgVFEzKSArIDEp ID4+IDEpIDogZHEzOworICAgICAgICAgICAgY29uc3QgaW50IGQwbCA9IGRwMGwgKyBkcTBsOwor ICAgICAgICAgICAgY29uc3QgaW50IGQzbCA9IGRwM2wgKyBkcTNsOworICAgICAgICAgICAgY29u c3QgaW50IGJldGE1MyA9IGJldGEgKiAzID4+IDU7CisgICAgICAgICAgICBjb25zdCBpbnQgYmV0 YV80ID0gYmV0YSA+PiA0OworICAgICAgICAgICAgbWF4X2xlbl9wID0gbGFyZ2VfcCA/IG1heF9s ZW5fcCA6IDM7CisgICAgICAgICAgICBtYXhfbGVuX3EgPSBsYXJnZV9xID8gbWF4X2xlbl9xIDog MzsKKworICAgICAgICAgICAgaWYgKGQwbCArIGQzbCA8IGJldGEpIHsKKyAgICAgICAgICAgICAg ICBjb25zdCBpbnQgc3AwbCA9IGFicyhQMyAtIFAwKSArIChtYXhfbGVuX3AgPT0gNyA/IGFicyhQ NyAtIFA2IC0gUDUgKyBQNCkgOiAwKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3EwbCA9 IGFicyhRMCAtIFEzKSArIChtYXhfbGVuX3EgPT0gNyA/IGFicyhRNCAtIFE1IC0gUTYgKyBRNykg OiAwKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3AzbCA9IGFicyhUUDMgLSBUUDApICsg KG1heF9sZW5fcCA9PSA3ID8gYWJzKFRQNyAtIFRQNiAtIFRQNSArIFRQNCkgOiAwKTsKKyAgICAg ICAgICAgICAgICBjb25zdCBpbnQgc3EzbCA9IGFicyhUUTAgLSBUUTMpICsgKG1heF9sZW5fcSA9 PSA3ID8gYWJzKFRRNCAtIFRRNSAtIFRRNiArIFRRNykgOiAwKTsKKyAgICAgICAgICAgICAgICBj b25zdCBpbnQgc3AwID0gbGFyZ2VfcCA/ICgoc3AwbCArIGFicyhQMyAtICAgUChtYXhfbGVuX3Ap KSArIDEpID4+IDEpIDogc3AwbDsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3AzID0gbGFy Z2VfcCA/ICgoc3AzbCArIGFicyhUUDMgLSBUUChtYXhfbGVuX3ApKSArIDEpID4+IDEpIDogc3Az bDsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3EwID0gbGFyZ2VfcSA/ICgoc3EwbCArIGFi cyhRMyAtICAgUShtYXhfbGVuX3EpKSArIDEpID4+IDEpIDogc3EwbDsKKyAgICAgICAgICAgICAg ICBjb25zdCBpbnQgc3EzID0gbGFyZ2VfcSA/ICgoc3EzbCArIGFicyhUUTMgLSBUUShtYXhfbGVu X3EpKSArIDEpID4+IDEpIDogc3EzbDsKKyAgICAgICAgICAgICAgICBpZiAoc3AwICsgc3EwIDwg YmV0YTUzICYmIGFicyhQMCAtIFEwKSA8IHRjMjUgJiYKKyAgICAgICAgICAgICAgICAgICAgc3Az ICsgc3EzIDwgYmV0YTUzICYmIGFicyhUUDAgLSBUUTApIDwgdGMyNSAmJgorICAgICAgICAgICAg ICAgICAgICAoZDBsIDw8IDEpIDwgYmV0YV80ICYmIChkM2wgPDwgMSkgPCBiZXRhXzQpIHsKKyAg ICAgICAgICAgICAgICAgICAgRlVOQyhsb29wX2ZpbHRlcl9sdW1hX2xhcmdlKShwaXgsIHhzdHJp ZGUsIHlzdHJpZGUsIHRjLCBub19wLCBub19xLCBtYXhfbGVuX3AsIG1heF9sZW5fcSk7CisgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZDAgKyBkMyA8IGJldGEpIHsKKyAgICAgICAgICAg IGlmIChtYXhfbGVuX3AgPiAyICYmIG1heF9sZW5fcSA+IDIgJiYKKyAgICAgICAgICAgICAgICBh YnMoUDMgLSBQMCkgKyBhYnMoUTMgLSBRMCkgPCBiZXRhXzMgJiYgYWJzKFAwIC0gUTApIDwgdGMy NSAmJgorICAgICAgICAgICAgICAgIGFicyhUUDMgLSBUUDApICsgYWJzKFRRMyAtIFRRMCkgPCBi ZXRhXzMgJiYgYWJzKFRQMCAtIFRRMCkgPCB0YzI1ICYmCisgICAgICAgICAgICAgICAgKGQwIDw8 IDEpIDwgYmV0YV8yICYmIChkMyA8PCAxKSA8IGJldGFfMikgeworICAgICAgICAgICAgICAgIEZV TkMobG9vcF9maWx0ZXJfbHVtYV9zdHJvbmcpKHBpeCwgeHN0cmlkZSwgeXN0cmlkZSwgdGMsIG5v X3AsIG5vX3EpOworICAgICAgICAgICAgfSBlbHNlIHsgLy8gd2VhayBmaWx0ZXJpbmcKKyAgICAg ICAgICAgICAgICBpbnQgbmRfcCA9IDE7CisgICAgICAgICAgICAgICAgaW50IG5kX3EgPSAxOwor ICAgICAgICAgICAgICAgIGlmIChtYXhfbGVuX3AgPiAxICYmIG1heF9sZW5fcSA+IDEpIHsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKGRwMCArIGRwMyA8ICgoYmV0YSArIChiZXRhID4+IDEpKSA+ PiAzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5kX3AgPSAyOworICAgICAgICAgICAgICAg ICAgICBpZiAoZHEwICsgZHEzIDwgKChiZXRhICsgKGJldGEgPj4gMSkpID4+IDMpKQorICAgICAg ICAgICAgICAgICAgICAgICAgbmRfcSA9IDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIEZVTkMobG9vcF9maWx0ZXJfbHVtYV93ZWFrKShwaXgsIHhzdHJpZGUsIHlzdHJpZGUs IHRjLCBiZXRhLCBub19wLCBub19xLCBuZF9wLCBuZF9xKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhsb29wX2ZpbHRlcl9jaHJvbWFfc3Ry b25nKShwaXhlbCAqcGl4LCBjb25zdCBwdHJkaWZmX3QgeHN0cmlkZSwgY29uc3QgcHRyZGlmZl90 IHlzdHJpZGUsCisgICAgY29uc3QgaW50IHNpemUsIGNvbnN0IGludDMyX3QgdGMsIGNvbnN0IHVp bnQ4X3Qgbm9fcCwgY29uc3QgdWludDhfdCBub19xKQoreworICAgIGZvciAoaW50IGQgPSAwOyBk IDwgc2l6ZTsgZCsrKSB7CisgICAgICAgIGNvbnN0IGludCBwMyA9IFAzOworICAgICAgICBjb25z dCBpbnQgcDIgPSBQMjsKKyAgICAgICAgY29uc3QgaW50IHAxID0gUDE7CisgICAgICAgIGNvbnN0 IGludCBwMCA9IFAwOworICAgICAgICBjb25zdCBpbnQgcTAgPSBRMDsKKyAgICAgICAgY29uc3Qg aW50IHExID0gUTE7CisgICAgICAgIGNvbnN0IGludCBxMiA9IFEyOworICAgICAgICBjb25zdCBp bnQgcTMgPSBRMzsKKyAgICAgICAgaWYgKCFub19wKSB7CisgICAgICAgICAgICBQMCA9IGF2X2Ns aXAoKHAzICsgcDIgKyBwMSArIDIgKiBwMCArIHEwICsgcTEgKyBxMiArIDQpID4+IDMsIHAwIC0g dGMsIHAwICsgdGMpOworICAgICAgICAgICAgUDEgPSBhdl9jbGlwKCgyICogcDMgKyBwMiArIDIg KiBwMSArIHAwICsgcTAgKyBxMSArIDQpID4+IDMsIHAxIC0gdGMsIHAxICsgdGMpOworICAgICAg ICAgICAgUDIgPSBhdl9jbGlwKCgzICogcDMgKyAyICogcDIgKyBwMSArIHAwICsgcTAgKyA0KSA+ PiAzLCBwMiAtIHRjLCBwMiArIHRjICk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFub19xKSB7 CisgICAgICAgICAgICBRMCA9IGF2X2NsaXAoKHAyICsgcDEgKyBwMCArIDIgKiBxMCArIHExICsg cTIgKyBxMyArIDQpID4+IDMsIHEwIC0gdGMsIHEwICsgdGMpOworICAgICAgICAgICAgUTEgPSBh dl9jbGlwKChwMSArIHAwICsgcTAgKyAyICogcTEgKyBxMiArIDIgKiBxMyArIDQpID4+IDMsIHEx IC0gdGMsIHExICsgdGMpOworICAgICAgICAgICAgUTIgPSBhdl9jbGlwKChwMCArIHEwICsgcTEg KyAyICogcTIgKyAzICogcTMgKyA0KSA+PiAzLCBxMiAtIHRjLCBxMiArIHRjKTsKKyAgICAgICAg fQorICAgICAgICBwaXggKz0geXN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMo bG9vcF9maWx0ZXJfY2hyb21hX3N0cm9uZ19vbmVfc2lkZSkocGl4ZWwgKnBpeCwgY29uc3QgcHRy ZGlmZl90IHhzdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlLAorICAgIGNvbnN0IGludCBz aXplLCBjb25zdCBpbnQzMl90IHRjLCBjb25zdCB1aW50OF90IG5vX3AsIGNvbnN0IHVpbnQ4X3Qg bm9fcSkKK3sKKyAgICBmb3IgKGludCBkID0gMDsgZCA8IHNpemU7IGQrKykgeworICAgICAgICBj b25zdCBpbnQgcDEgPSBQMTsKKyAgICAgICAgY29uc3QgaW50IHAwID0gUDA7CisgICAgICAgIGNv bnN0IGludCBxMCA9IFEwOworICAgICAgICBjb25zdCBpbnQgcTEgPSBRMTsKKyAgICAgICAgY29u c3QgaW50IHEyID0gUTI7CisgICAgICAgIGNvbnN0IGludCBxMyA9IFEzOworICAgICAgICBpZiAo IW5vX3ApIHsKKyAgICAgICAgICAgIFAwID0gYXZfY2xpcCgoMyAqIHAxICsgMiAqIHAwICsgcTAg KyBxMSArIHEyICsgNCkgPj4gMywgcDAgLSB0YywgcDAgKyB0Yyk7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKCFub19xKSB7CisgICAgICAgICAgICBRMCA9IGF2X2NsaXAoKDIgKiBwMSArIHAwICsg MiAqIHEwICsgcTEgKyBxMiArIHEzICsgNCkgPj4gMywgcTAgLSB0YywgcTAgKyB0Yyk7CisgICAg ICAgICAgICBRMSA9IGF2X2NsaXAoKHAxICsgcDAgKyBxMCArIDIgKiBxMSArIHEyICsgMiAqIHEz ICsgNCkgPj4gMywgcTEgLSB0YywgcTEgKyB0Yyk7CisgICAgICAgICAgICBRMiA9IGF2X2NsaXAo KHAwICsgcTAgKyBxMSArIDIgKiBxMiArIDMgKiBxMyArIDQpID4+IDMsIHEyIC0gdGMsIHEyICsg dGMpOworICAgICAgICB9CisgICAgICAgIHBpeCArPSB5c3RyaWRlOworICAgIH0KK30KKworc3Rh dGljIHZvaWQgRlVOQyhsb29wX2ZpbHRlcl9jaHJvbWFfd2VhaykocGl4ZWwgKnBpeCwgY29uc3Qg cHRyZGlmZl90IHhzdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlLAorICAgIGNvbnN0IGlu dCBzaXplLCBjb25zdCBpbnQzMl90IHRjLCBjb25zdCB1aW50OF90IG5vX3AsIGNvbnN0IHVpbnQ4 X3Qgbm9fcSkKK3sKKyAgICBmb3IgKGludCBkID0gMDsgZCA8IHNpemU7IGQrKykgeworICAgICAg ICBpbnQgZGVsdGEwOworICAgICAgICBjb25zdCBpbnQgcDEgPSBQMTsKKyAgICAgICAgY29uc3Qg aW50IHAwID0gUDA7CisgICAgICAgIGNvbnN0IGludCBxMCA9IFEwOworICAgICAgICBjb25zdCBp bnQgcTEgPSBRMTsKKyAgICAgICAgZGVsdGEwID0gYXZfY2xpcCgoKChxMCAtIHAwKSAqIDQpICsg cDEgLSBxMSArIDQpID4+IDMsIC10YywgdGMpOworICAgICAgICBpZiAoIW5vX3ApCisgICAgICAg ICAgICBQMCA9IGF2X2NsaXBfcGl4ZWwocDAgKyBkZWx0YTApOworICAgICAgICBpZiAoIW5vX3Ep CisgICAgICAgICAgICBRMCA9IGF2X2NsaXBfcGl4ZWwocTAgLSBkZWx0YTApOworICAgICAgICBw aXggKz0geXN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkModnZjX2xvb3BfZmls dGVyX2Nocm9tYSkodWludDhfdCAqX3BpeCwgY29uc3QgcHRyZGlmZl90ICBfeHN0cmlkZSwgY29u c3QgcHRyZGlmZl90IF95c3RyaWRlLAorICAgIGNvbnN0IGludDMyX3QgKl9iZXRhLCBjb25zdCBp bnQzMl90ICpfdGMsIGNvbnN0IHVpbnQ4X3QgKl9ub19wLCBjb25zdCB1aW50OF90ICpfbm9fcSwK KyAgICBjb25zdCB1aW50OF90ICpfbWF4X2xlbl9wLCBjb25zdCB1aW50OF90ICpfbWF4X2xlbl9x LCBjb25zdCBpbnQgc2hpZnQpCit7CisgICAgY29uc3QgcHRyZGlmZl90IHhzdHJpZGUgPSBfeHN0 cmlkZSAvIHNpemVvZihwaXhlbCk7CisgICAgY29uc3QgcHRyZGlmZl90IHlzdHJpZGUgPSBfeXN0 cmlkZSAvIHNpemVvZihwaXhlbCk7CisgICAgY29uc3QgaW50IHNpemUgICAgICAgICAgPSBzaGlm dCA/IDIgOiA0OworICAgIGNvbnN0IGludCBlbmQgICAgICAgICAgID0gOCAvIHNpemU7ICAgICAg ICAgLy8gOCBzYW1wbGVzIGEgbG9vcAorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmQ7IGkr KykgeworICAgICAgICBwaXhlbCAqcGl4ICAgICAgICAgID0gKHBpeGVsICopX3BpeCArIGkgKiBz aXplICogeXN0cmlkZTsKKyAgICAgICAgY29uc3QgdWludDhfdCBub19wICA9IF9ub19wW2ldOwor ICAgICAgICBjb25zdCB1aW50OF90IG5vX3EgID0gX25vX3FbaV07CisgICAgICAgIGNvbnN0IGlu dCBiZXRhICAgICAgPSBfYmV0YVtpXSA8PCAoQklUX0RFUFRIIC0gOCk7CisgICAgICAgIGNvbnN0 IGludCBiZXRhXzMgICAgPSBiZXRhID4+IDM7CisgICAgICAgIGNvbnN0IGludCBiZXRhXzIgICAg PSBiZXRhID4+IDI7CisKKyNpZiBCSVRfREVQVEggPCAxMAorICAgICAgICBjb25zdCBpbnQgdGMg PSAoX3RjW2ldICsgKDEgPDwgKDkgLSBCSVRfREVQVEgpKSkgPj4gKDEwIC0gQklUX0RFUFRIKTsK KyNlbHNlCisgICAgICAgIGNvbnN0IGludCB0YyA9IF90Y1tpXSA8PCAoQklUX0RFUFRIIC0gMTAp OworI2VuZGlmCisgICAgICAgIGNvbnN0IGludCB0YzI1ICAgICAgPSAoKHRjICogNSArIDEpID4+ IDEpOworCisgICAgICAgIHVpbnQ4X3QgbWF4X2xlbl9wICAgPSBfbWF4X2xlbl9wW2ldOworICAg ICAgICB1aW50OF90IG1heF9sZW5fcSAgID0gX21heF9sZW5fcVtpXTsKKworICAgICAgICBpZiAo IW1heF9sZW5fcCB8fCAhbWF4X2xlbl9xIHx8ICF0YykKKyAgICAgICAgICAgIGNvbnRpbnVlOwor CisgICAgICAgIGlmIChtYXhfbGVuX3EgPT0gMyl7CisgICAgICAgICAgICBjb25zdCBpbnQgcDFu ICA9IHNoaWZ0ID8gRlAxIDogVFAxOworICAgICAgICAgICAgY29uc3QgaW50IHAybiA9IG1heF9s ZW5fcCA9PSAxID8gcDFuIDogKHNoaWZ0ID8gRlAyIDogVFAyKTsKKyAgICAgICAgICAgIGNvbnN0 IGludCBwMG4gID0gc2hpZnQgPyBGUDAgOiBUUDA7CisgICAgICAgICAgICBjb25zdCBpbnQgcTBu ICA9IHNoaWZ0ID8gRlEwIDogVFEwOworICAgICAgICAgICAgY29uc3QgaW50IHExbiAgPSBzaGlm dCA/IEZRMSA6IFRRMTsKKyAgICAgICAgICAgIGNvbnN0IGludCBxMm4gID0gc2hpZnQgPyBGUTIg OiBUUTI7CisgICAgICAgICAgICBjb25zdCBpbnQgcDMgICA9IG1heF9sZW5fcCA9PSAxID8gUDEg OiBQMzsKKyAgICAgICAgICAgIGNvbnN0IGludCBwMiAgID0gbWF4X2xlbl9wID09IDEgPyBQMSA6 IFAyOworICAgICAgICAgICAgY29uc3QgaW50IHAxICAgPSBQMTsKKyAgICAgICAgICAgIGNvbnN0 IGludCBwMCAgID0gUDA7CisgICAgICAgICAgICBjb25zdCBpbnQgZHAwICA9IGFicyhwMiAtIDIg KiBwMSArIHAwKTsKKyAgICAgICAgICAgIGNvbnN0IGludCBkcTAgID0gYWJzKFEyIC0gMiAqIFEx ICsgUTApOworCisgICAgICAgICAgICBjb25zdCBpbnQgZHAxID0gYWJzKHAybiAtIDIgKiBwMW4g KyBwMG4pOworICAgICAgICAgICAgY29uc3QgaW50IGRxMSA9IGFicyhxMm4gLSAyICogcTFuICsg cTBuKTsKKyAgICAgICAgICAgIGNvbnN0IGludCBkMCAgPSBkcDAgKyBkcTA7CisgICAgICAgICAg ICBjb25zdCBpbnQgZDEgID0gZHAxICsgZHExOworCisgICAgICAgICAgICBpZiAoZDAgKyBkMSA8 IGJldGEpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcDNuID0gbWF4X2xlbl9wID09IDEg PyBwMW4gOiAoc2hpZnQgPyBGUDMgOiBUUDMpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBx M24gPSBzaGlmdCA/IEZRMyA6IFRRMzsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgZHNhbTAg PSAoZDAgPDwgMSkgPCBiZXRhXzIgJiYgKGFicyhwMyAtIHAwKSArIGFicyhRMCAtIFEzKSAgICAg PCBiZXRhXzMpICYmCisgICAgICAgICAgICAgICAgICAgIGFicyhwMCAtIFEwKSAgIDwgdGMyNTsK KyAgICAgICAgICAgICAgICBjb25zdCBpbnQgZHNhbTEgPSAoZDEgPDwgMSkgPCBiZXRhXzIgJiYg KGFicyhwM24gLSBwMG4pICsgYWJzKHEwbiAtIHEzbikgPCBiZXRhXzMpICYmCisgICAgICAgICAg ICAgICAgICAgIGFicyhwMG4gLSBxMG4pIDwgdGMyNTsKKyAgICAgICAgICAgICAgICBpZiAoIWRz YW0wIHx8ICFkc2FtMSkKKyAgICAgICAgICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9x ID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWF4X2xlbl9wID0g bWF4X2xlbl9xID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICht YXhfbGVuX3AgPT0gMyAmJiBtYXhfbGVuX3EgPT0gMykKKyAgICAgICAgICAgIEZVTkMobG9vcF9m aWx0ZXJfY2hyb21hX3N0cm9uZykocGl4LCB4c3RyaWRlLCB5c3RyaWRlLCBzaXplLCB0Yywgbm9f cCwgbm9fcSk7CisgICAgICAgIGVsc2UgaWYgKG1heF9sZW5fcSA9PSAzKQorICAgICAgICAgICAg RlVOQyhsb29wX2ZpbHRlcl9jaHJvbWFfc3Ryb25nX29uZV9zaWRlKShwaXgsIHhzdHJpZGUsIHlz dHJpZGUsIHNpemUsIHRjLCBub19wLCBub19xKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg RlVOQyhsb29wX2ZpbHRlcl9jaHJvbWFfd2VhaykocGl4LCB4c3RyaWRlLCB5c3RyaWRlLCBzaXpl LCB0Yywgbm9fcCwgbm9fcSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKHZ2Y19oX2xv b3BfZmlsdGVyX2Nocm9tYSkodWludDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3RyaWRlLAorICAgIGNv bnN0IGludDMyX3QgKmJldGEsIGNvbnN0IGludDMyX3QgKnRjLCBjb25zdCB1aW50OF90ICpub19w LCBjb25zdCB1aW50OF90ICpub19xLAorICAgIGNvbnN0IHVpbnQ4X3QgKm1heF9sZW5fcCwgY29u c3QgdWludDhfdCAqbWF4X2xlbl9xLCBpbnQgc2hpZnQpCit7CisgICAgRlVOQyh2dmNfbG9vcF9m aWx0ZXJfY2hyb21hKShwaXgsIHN0cmlkZSwgc2l6ZW9mKHBpeGVsKSwgYmV0YSwgdGMsCisgICAg ICAgIG5vX3AsIG5vX3EsIG1heF9sZW5fcCwgbWF4X2xlbl9xLCBzaGlmdCk7Cit9CisKK3N0YXRp YyB2b2lkIEZVTkModnZjX3ZfbG9vcF9maWx0ZXJfY2hyb21hKSh1aW50OF90ICpwaXgsIHB0cmRp ZmZfdCBzdHJpZGUsCisgICAgY29uc3QgaW50MzJfdCAqYmV0YSwgY29uc3QgaW50MzJfdCAqdGMs IGNvbnN0IHVpbnQ4X3QgKm5vX3AsIGNvbnN0IHVpbnQ4X3QgKm5vX3EsCisgICAgY29uc3QgdWlu dDhfdCAqbWF4X2xlbl9wLCBjb25zdCB1aW50OF90ICptYXhfbGVuX3EsIGludCBzaGlmdCkKK3sK KyAgICBGVU5DKHZ2Y19sb29wX2ZpbHRlcl9jaHJvbWEpKHBpeCwgc2l6ZW9mKHBpeGVsKSwgc3Ry aWRlLCBiZXRhLCB0YywKKyAgICAgICAgbm9fcCwgbm9fcSwgIG1heF9sZW5fcCwgbWF4X2xlbl9x LCBzaGlmdCk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkModnZjX2hfbG9vcF9maWx0ZXJfbHVtYSko dWludDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3RyaWRlLAorICAgIGNvbnN0IGludDMyX3QgKmJldGEs IGNvbnN0IGludDMyX3QgKnRjLCBjb25zdCB1aW50OF90ICpub19wLCBjb25zdCB1aW50OF90ICpu b19xLAorICAgIGNvbnN0IHVpbnQ4X3QgKm1heF9sZW5fcCwgY29uc3QgdWludDhfdCAqbWF4X2xl bl9xLCBpbnQgaG9yX2N0dV9lZGdlKQoreworICAgIEZVTkModnZjX2xvb3BfZmlsdGVyX2x1bWEp KHBpeCwgc3RyaWRlLCBzaXplb2YocGl4ZWwpLCBiZXRhLCB0YywKKyAgICAgICAgbm9fcCwgbm9f cSwgbWF4X2xlbl9wLCBtYXhfbGVuX3EsIGhvcl9jdHVfZWRnZSk7Cit9CisKK3N0YXRpYyB2b2lk IEZVTkModnZjX3ZfbG9vcF9maWx0ZXJfbHVtYSkodWludDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3Ry aWRlLAorICAgIGNvbnN0IGludDMyX3QgKmJldGEsIGNvbnN0IGludDMyX3QgKnRjLCBjb25zdCB1 aW50OF90ICpub19wLCBjb25zdCB1aW50OF90ICpub19xLAorICAgIGNvbnN0IHVpbnQ4X3QgKm1h eF9sZW5fcCwgY29uc3QgdWludDhfdCAqbWF4X2xlbl9xLCBpbnQgaG9yX2N0dV9lZGdlKQorewor ICAgIEZVTkModnZjX2xvb3BfZmlsdGVyX2x1bWEpKHBpeCwgc2l6ZW9mKHBpeGVsKSwgc3RyaWRl LCBiZXRhLCB0YywKKyAgICAgICAgbm9fcCwgbm9fcSwgbWF4X2xlbl9wLCBtYXhfbGVuX3EsIGhv cl9jdHVfZWRnZSk7Cit9CisKK3N0YXRpYyBpbnQgRlVOQyh2dmNfbG9vcF9sYWRmX2xldmVsKShj b25zdCB1aW50OF90ICpfcGl4LCBjb25zdCBwdHJkaWZmX3QgX3hzdHJpZGUsIGNvbnN0IHB0cmRp ZmZfdCBfeXN0cmlkZSkKK3sKKyAgICBjb25zdCBwaXhlbCAqcGl4ICAgICAgICA9IChwaXhlbCAq KV9waXg7CisgICAgY29uc3QgcHRyZGlmZl90IHhzdHJpZGUgPSBfeHN0cmlkZSAvIHNpemVvZihw aXhlbCk7CisgICAgY29uc3QgcHRyZGlmZl90IHlzdHJpZGUgPSBfeXN0cmlkZSAvIHNpemVvZihw aXhlbCk7CisgICAgcmV0dXJuIChQMCArIFRQMCArIFEwICsgVFEwKSA+PiAyOworfQorCitzdGF0 aWMgaW50IEZVTkModnZjX2hfbG9vcF9sYWRmX2xldmVsKShjb25zdCB1aW50OF90ICpwaXgsIHB0 cmRpZmZfdCBzdHJpZGUpCit7CisgICAgcmV0dXJuIEZVTkModnZjX2xvb3BfbGFkZl9sZXZlbCko cGl4LCBzdHJpZGUsIHNpemVvZihwaXhlbCkpOworfQorCitzdGF0aWMgaW50IEZVTkModnZjX3Zf bG9vcF9sYWRmX2xldmVsKShjb25zdCB1aW50OF90ICpwaXgsIHB0cmRpZmZfdCBzdHJpZGUpCit7 CisgICAgcmV0dXJuIEZVTkModnZjX2xvb3BfbGFkZl9sZXZlbCkocGl4LCBzaXplb2YocGl4ZWwp LCBzdHJpZGUpOworfQorCisjdW5kZWYgUDcKKyN1bmRlZiBQNgorI3VuZGVmIFA1CisjdW5kZWYg UDQKKyN1bmRlZiBQMworI3VuZGVmIFAyCisjdW5kZWYgUDEKKyN1bmRlZiBQMAorI3VuZGVmIFEw CisjdW5kZWYgUTEKKyN1bmRlZiBRMgorI3VuZGVmIFEzCisjdW5kZWYgUTQKKyN1bmRlZiBRNQor I3VuZGVmIFE2CisjdW5kZWYgUTcKKworI3VuZGVmIFRQNworI3VuZGVmIFRQNgorI3VuZGVmIFRQ NQorI3VuZGVmIFRQNAorI3VuZGVmIFRQMworI3VuZGVmIFRQMgorI3VuZGVmIFRQMQorI3VuZGVm IFRQMAorI3VuZGVmIFRRMAorI3VuZGVmIFRRMQorI3VuZGVmIFRRMgorI3VuZGVmIFRRMworI3Vu ZGVmIFRRNAorI3VuZGVmIFRRNQorI3VuZGVmIFRRNgorI3VuZGVmIFRRNworCitzdGF0aWMgdm9p ZCBGVU5DKGZmX3Z2Y19sbWNzX2RzcF9pbml0KShWVkNMTUNTRFNQQ29udGV4dCAqY29uc3QgbG1j cykKK3sKKyAgICBsbWNzLT5maWx0ZXIgPSBGVU5DKGxtY3NfZmlsdGVyX2x1bWEpOworfQorCitz dGF0aWMgdm9pZCBGVU5DKGZmX3Z2Y19sZl9kc3BfaW5pdCkoVlZDTEZEU1BDb250ZXh0ICpjb25z dCBsZikKK3sKKyAgICBsZi0+bGFkZl9sZXZlbFswXSAgICAgID0gRlVOQyh2dmNfaF9sb29wX2xh ZGZfbGV2ZWwpOworICAgIGxmLT5sYWRmX2xldmVsWzFdICAgICAgPSBGVU5DKHZ2Y192X2xvb3Bf bGFkZl9sZXZlbCk7CisgICAgbGYtPmZpbHRlcl9sdW1hWzBdICAgICA9IEZVTkModnZjX2hfbG9v cF9maWx0ZXJfbHVtYSk7CisgICAgbGYtPmZpbHRlcl9sdW1hWzFdICAgICA9IEZVTkModnZjX3Zf bG9vcF9maWx0ZXJfbHVtYSk7CisgICAgbGYtPmZpbHRlcl9jaHJvbWFbMF0gICA9IEZVTkModnZj X2hfbG9vcF9maWx0ZXJfY2hyb21hKTsKKyAgICBsZi0+ZmlsdGVyX2Nocm9tYVsxXSAgID0gRlVO Qyh2dmNfdl9sb29wX2ZpbHRlcl9jaHJvbWEpOworfQorCitzdGF0aWMgdm9pZCBGVU5DKGZmX3Z2 Y19zYW9fZHNwX2luaXQpKFZWQ1NBT0RTUENvbnRleHQgKmNvbnN0IHNhbykKK3sKKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHNhby0+YmFuZF9maWx0ZXIpOyBpKyspCisg ICAgICAgIHNhby0+YmFuZF9maWx0ZXJbaV0gPSBGVU5DKHNhb19iYW5kX2ZpbHRlcik7CisgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhzYW8tPmVkZ2VfZmlsdGVyKTsgaSsr KQorICAgICAgICBzYW8tPmVkZ2VfZmlsdGVyW2ldID0gRlVOQyhzYW9fZWRnZV9maWx0ZXIpOwor ICAgIHNhby0+ZWRnZV9yZXN0b3JlWzBdID0gRlVOQyhzYW9fZWRnZV9yZXN0b3JlXzApOworICAg IHNhby0+ZWRnZV9yZXN0b3JlWzFdID0gRlVOQyhzYW9fZWRnZV9yZXN0b3JlXzEpOworfQorCitz dGF0aWMgdm9pZCBGVU5DKGZmX3Z2Y19hbGZfZHNwX2luaXQpKFZWQ0FMRkRTUENvbnRleHQgKmNv bnN0IGFsZikKK3sKKyAgICBhbGYtPmZpbHRlcltMVU1BXSAgICA9IEZVTkMoYWxmX2ZpbHRlcl9s dW1hKTsKKyAgICBhbGYtPmZpbHRlcltDSFJPTUFdICA9IEZVTkMoYWxmX2ZpbHRlcl9jaHJvbWEp OworICAgIGFsZi0+ZmlsdGVyX2NjICAgICAgID0gRlVOQyhhbGZfZmlsdGVyX2NjKTsKKyAgICBh bGYtPmNsYXNzaWZ5ICAgICAgICA9IEZVTkMoYWxmX2NsYXNzaWZ5KTsKKyAgICBhbGYtPnJlY29u X2NvZWZmX2FuZF9jbGlwID0gRlVOQyhhbGZfcmVjb25fY29lZmZfYW5kX2NsaXApOworfQotLSAK Mi4yNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpm Zm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8v ZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUs IHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5v cmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==