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 DB425481B8 for ; Sun, 12 Nov 2023 10:37:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6888268CC9B; Sun, 12 Nov 2023 12:36:25 +0200 (EET) Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01olkn2035.outbound.protection.outlook.com [40.92.53.35]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AF80A68CC68 for ; Sun, 12 Nov 2023 12:36:19 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DEhY/JEtU2nZmDLvrKYWiMa8yj/IRraJpFRS7VP3Y9VFUupRDpMeQ98Pu4/E7ZUCuMMn2ioQMD8xBtuIMXKPocg+DYE7949u6Kyz/AH8kAvGz55S0iKzR+yTz1UxpAToan6dt8hltCsouRJHh6IHTSIodr+fqwpjAEtLwjHFtBdT68kpro8Sb50niQ8lq4IDHDWZb96zLgAMpoV9RZ1WyXaD5na1OGKeEjgOYiOL5mX35ViGISOQlQVlIuAU/TxlIyWxiB6czEW3zByekqS6xRe/jqKLIPWfBYjv9f81T6npVYcHZwKcw7tbvyQ/ubfgmcOURo9ZW+a2ZSCcc4f75A== 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=0VGOrNi9cQ7Uw6k6rslfHJnCzvK8dzHYLBZibllGTtQ=; b=MPBAv8lFegLGsnaoBj89u8tepDAWEXEGyTA9R/WO9S0ZPv0NC7aFptuLmhGJssXpw7/hHtYRO1alIswsXAETdAhS6lEhxjpKGx8FJ7JMnmY3Y3MFau9BNnqZDK+GT3taoJSMZ4JAa0ddgO1W4zPu+XZcBQ4R6Us1kYUMlREQS32LYA9VJKyVaXUGOtOo+G+VX6gu8PZZuVYm1f4HEDz/id7u7XvDWbYeAF+WSgodc/uqhqTJsyZREMvAziyzJYRISvQS5ltuEl3vYu/2paq6CRjhInkHMtzoI9satkQgSgCo2bBIGN9QbYz3FXgo41KLbRHPaYVw09jq+vp+5x86/g== 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=0VGOrNi9cQ7Uw6k6rslfHJnCzvK8dzHYLBZibllGTtQ=; b=eT3OKPghtiYwFpgdIq6Rhkzm5O7n5yKNRsx4SGpk2na0AhSnvv/8VZ2aveF+/rC9hvZHnKpdiDEg92wa3U5UdIEDAfnyMGWl12vSfVO5DuO1l1+iKlDTKU9Jsav9jnlA6BP6DvRR2SymcoVQlbBUKfK+rE2uoBzXZUYYecvOb/l7Tc6bVIYun2OLo+Nv4IZI4ktBMvn3Mt1SRAjwahLcdW6Wz+Szg3wTCsYbemkl9in6aDsce59ZCMziUPTK4aOqGtREfitnFog/heILkkXbPcbNndyEWRvNolVNPvScuB6OLqcKquk2hPlsFPhLfb3j4BymRae7s1cwYexvNiB/Zw== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYSPR06MB6768.apcprd06.prod.outlook.com (2603:1096:400:475::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Sun, 12 Nov 2023 10:36:01 +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.6954.028; Sun, 12 Nov 2023 10:36:01 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sun, 12 Nov 2023 18:35:22 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231112103526.11245-1-nuomi2021@gmail.com> References: <20231112103526.11245-1-nuomi2021@gmail.com> X-TMN: [imd4DsjPqedeuBZHi7FQa0OuCRn36utA] X-ClientProxiedBy: TYWP286CA0030.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:262::20) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20231112103526.11245-10-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYSPR06MB6768:EE_ X-MS-Office365-Filtering-Correlation-Id: eb2663db-b4fe-4d0a-384b-08dbe36b2a12 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PiR5upm9NPFS1XUloFtTAkAXGy5dybQGWN9ebwoOUH4sG8AB9CCuVNPlWkspvJ8zRiqVW89ie75pkFKjTaT4+bleGSdqnMpbCC5g7sJZXZL+F74GAweUgFGGx7vxGMY8ZLblBrXT4BqEL1cFfc8Zkfq+Kt48Q1bh/Y25ajCftQnI+ezREIvM3vDPyahcDB7vT77/iZ/BEWkjNZQokRi4B+nwXc/6W6AXKd16sJz5J4Y0QPurpBmkFj1UvQ6lS14k0wywGxapeWb5oVsX3cY61hs+mKIlfBJdHzn0UqUIlpB+0CA76EIdUrDXOqyr/aWCCEgsTedT5BNLgmAv+CsCY7tidEs0e5IDXSLSj+u5dT7a0wdP9l9Q5la0uJzqUHTWOTF1rXIhIrs+/eLCDz9uioR9JuYH2fe0lQxho0mSDBVN4iDr3zcu63KYYn+Zpbxatzbo8Fm4LAI/quRpOzOhXGyl2OAn8DgjFrV5BkUAQCMotUf5XD0j7wrZEZhA2nOAMIdEOGdiVI+OCab0rpv+rfpJg+Gnr2nEztTg3ZrG1i2QEaIHDs2anwCLij7gJ8cDf2H0zeL9JzjmOe46292H2aYvXr2iVCVMpgfLI7Xqj6g= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NW5PMkRTR1ZYb2xWK1VObnpYSjZTc1lFQXZ6RUhYTFhrNldsdjc3a0x0REZP?= =?utf-8?B?MWlZcXlEQ2NtWW80M01NS1RwRzJYWmtNSWt2SThWSlNXeHRPMjkyWFlEbGtY?= =?utf-8?B?RnlGd3FHOENLSExITjRCa29lVGxBY0JiSmhjYnh3ZU1qT2lsM2tzTGdpWVdF?= =?utf-8?B?TXdxOVhGUE5YbGtUQXN3bExHY3IzeTVQMU16R2lPL2NEUkJ4ZEZRSkVyNEJj?= =?utf-8?B?OVNTOFdwZjZwNGc1RGdSMjh0OTAwZWFNWVQ5SXdtcmVvNUVsWDNteitQOC8v?= =?utf-8?B?MjI1VG5Sc2NQaStsUHJLSWsvUGl4cVFJZkM3bDlMV2V2QVpOSmlMNmwvNjdn?= =?utf-8?B?d3JiQ3gzeUhZeDdkMzZ4cDVldU1HenNZekQvekgxVmFDeWk1R0Y1K3pyV24v?= =?utf-8?B?TEcyQUtPdFJuQlhuUXdpcEV6dlduRTVkRGZLRDlxMGp1WmxaZHNxU0gvWmx2?= =?utf-8?B?N2VTTzA2N3U3a3JoekhUcjRncEJLMC9qZm9nVnljaDh6aDZVN05uc2h2N0Uv?= =?utf-8?B?QlBqQTk5SkpkSnVFVEp5ZisrMHh2UUVQS2JZckxkS084Q242OGR6cnRpSHht?= =?utf-8?B?MVlRZjAvVW1kNnptYkc5aFc4cXhnUVBPMVFuYUVrcS9nSFlxWWdRenpmVTFo?= =?utf-8?B?TmMvUTZSdVlSeDZhWUhNMm5nRDVmamVPaHcyZWhHQ2J2TnV1MzZQL1lEWWhY?= =?utf-8?B?QS9IY3hGU0gwaS9zUGp3SFpPWXJoVkppaTBKKzltc0xMeVdUS09BbFAxY01y?= =?utf-8?B?MmVocU5mK0lHQ0VKYVprU1QyQVJNQngybzRyQnlPaElRUnpTOG1xNDQyYlI2?= =?utf-8?B?ejFUYjdveUxPdnk2bWEvUkFCY0hqZjVqaS9MVGJGaG94STNLVU10WEpmdGlv?= =?utf-8?B?WVN5SkdubzgrQlkxdVNEdlgyUk95KzM5U0ZpelQrWVZWSVpWUDVDc2Z6MlBx?= =?utf-8?B?c01uSzlURmZick5XOGtlSExLQlBmZDVlK0J6ZVY1bGpSRVUrTURiVUxHVFNT?= =?utf-8?B?TjI5eHIxekpTQ2V0S2U2MSt1bFd0NmxBejN3aVNMaGpXaVBRZ09tZDNkZ1NU?= =?utf-8?B?S0UxbmhQTlBJdU9RYWVvOVlldnVkWkVlR3dEcTBTbS9RNktwd3VNZzFYUUo4?= =?utf-8?B?ZzBsQWllYTgwbmNoVHNVNWNhRDlzOThzN3d6ekE0Mmg3WHNPSkNxQit5SUta?= =?utf-8?B?YlMxUnhJSEEwd0VJNmRLTllmT1pDRDd6VTQ1VzJzTWR0SzFaUVBmQVN1eVBt?= =?utf-8?B?Z3Yyclk1QnhreHFCYlF4SXpiWjVDeEFhcWlMNmdyREd4aGx6OHh2MUcrNGZV?= =?utf-8?B?bUxWbEo4VDBGbjZMQmNDT1owWUw3eFRsbGtoKzhLZlgzeHJCcnJoQkZxREQ4?= =?utf-8?B?MzJ5ZGI0MjlTczdhTXlZV051RlAzVGcxbll4Sld4MnA1bklpcG1La0htVHBI?= =?utf-8?B?R3N0bGV4S1A3ZGNPSkxPUVpyVjdRVU1YSnc5VHpoNWdBVUxIZm9sdWl1STM3?= =?utf-8?B?eVZxQUFaSHRoZ01zeDBsUTZmK29xb29KWG9mOGpTNmw2RnRBQ1dTcTR0NENm?= =?utf-8?B?Q29lZDl5S0VpRll3Z2xreEV4Qmh4SmV0SGhiODZWSWFReWRMc0xOVkxaS1lj?= =?utf-8?B?eTQ5TnVoOUo0eFFLZUVsM1Y4dFJVbUM2d3RMZUlDMHdWcVc0NksrQXV1VUYx?= =?utf-8?Q?IdxB3DcUgxrfQj8jlW7a?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: eb2663db-b4fe-4d0a-384b-08dbe36b2a12 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Nov 2023 10:36:01.2756 (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: TYSPR06MB6768 Subject: [FFmpeg-devel] [PATCH v5 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 ZGV4IDY5MjViNjIxYTYuLjNmNWU2NzdmYWQgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvdnZjL3Z2 Y19jdHUuaAorKysgYi9saWJhdmNvZGVjL3Z2Yy92dmNfY3R1LmgKQEAgLTQ2Miw2ICs0NjIsNyBA QCB0eXBlZGVmIHN0cnVjdCBBTEZQYXJhbXMgewogdm9pZCBmZl92dmNfc2V0X25laWdoYm91cl9h dmFpbGFibGUoVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTAsIGludCB3LCBpbnQg aCk7CiB2b2lkIGZmX3Z2Y19kZWNvZGVfbmVpZ2hib3VyKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGlu dCB4X2N0YiwgaW50IHlfY3RiLCBpbnQgcngsIGludCByeSwgaW50IHJzKTsKIHZvaWQgZmZfdnZj X2N0dV9mcmVlX2N1cyhDVFUgKmN0dSk7CitpbnQgZmZfdnZjX2dldF9xUHkoY29uc3QgVlZDRnJh bWVDb250ZXh0ICpmYywgaW50IHhjLCBpbnQgeWMpOwogdm9pZCBmZl92dmNfZXBfaW5pdF9zdGF0 X2NvZWZmKEVudHJ5UG9pbnQgKmVwLCBpbnQgYml0X2RlcHRoLCBpbnQgcGVyc2lzdGVudF9yaWNl X2FkYXB0YXRpb25fZW5hYmxlZF9mbGFnKTsKIAogI2VuZGlmIC8vIEFWQ09ERUNfVlZDX0NUVV9I CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyLmMgYi9saWJhdmNvZGVjL3Z2 Yy92dmNfZmlsdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTlk Y2RiZTNjOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuYwpA QCAtMCwwICsxLDEzNDggQEAKKy8qCisgKiBWVkMgZmlsdGVycworICoKKyAqIENvcHlyaWdodCAo QykgMjAyMSBOdW8gTWkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgor ICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKyNp bmNsdWRlICJsaWJhdnV0aWwvZnJhbWUuaCIKKworI2luY2x1ZGUgInZ2Y19jdHUuaCIKKyNpbmNs dWRlICJ2dmNfZGF0YS5oIgorI2luY2x1ZGUgInZ2Y19maWx0ZXIuaCIKKyNpbmNsdWRlICJ2dmNf cmVmcy5oIgorCisjZGVmaW5lIExFRlQgICAgICAgIDAKKyNkZWZpbmUgVE9QICAgICAgICAgMQor I2RlZmluZSBSSUdIVCAgICAgICAyCisjZGVmaW5lIEJPVFRPTSAgICAgIDMKKyNkZWZpbmUgTUFY X0VER0VTICAgNAorCisjZGVmaW5lIERFRkFVTFRfSU5UUkFfVENfT0ZGU0VUIDIKKworLy9UYWJs ZSA0MyBEZXJpdmF0aW9uIG9mIHRocmVzaG9sZCB2YXJpYWJsZXMgYmV0YScgYW5kIHRjJyBmcm9t IGlucHV0IFEKK3N0YXRpYyBjb25zdCB1aW50MTZfdCB0Y3RhYmxlWzY2XSA9IHsKKyAgICAgIDAs ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg IDAsICAgMCwgICAwLCAgIDAsCisgICAgICAwLCAgIDAsICAgMywgICA0LCAgIDQsICAgNCwgICA0 LCAgIDUsICAgNSwgICA1LCAgIDUsICAgNywgICA3LCAgIDgsICAgOSwgIDEwLAorICAgICAxMCwg IDExLCAgMTMsICAxNCwgIDE1LCAgMTcsICAxOSwgIDIxLCAgMjQsICAyNSwgIDI5LCAgMzMsICAz NiwgIDQxLCAgNDUsICA1MSwKKyAgICAgNTcsICA2NCwgIDcxLCAgODAsICA4OSwgMTAwLCAxMTIs IDEyNSwgMTQxLCAxNTcsIDE3NywgMTk4LCAyMjIsIDI1MCwgMjgwLCAzMTQsCisgICAgMzUyLCAz OTUsCisKK307CisKKy8vVGFibGUgNDMgRGVyaXZhdGlvbiBvZiB0aHJlc2hvbGQgdmFyaWFibGVz IGJldGEnIGFuZCB0YycgZnJvbSBpbnB1dCBRCitzdGF0aWMgY29uc3QgdWludDhfdCBiZXRhdGFi bGVbNjRdID0geworICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAgIDYsICAgNywgICA4 LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsICAxNiwgIDE3LCAgMTgsICAyMCwg IDIyLCAgMjQsCisgICAgIDI2LCAgMjgsICAzMCwgIDMyLCAgMzQsICAzNiwgIDM4LCAgNDAsICA0 MiwgIDQ0LCAgNDYsICA0OCwgIDUwLCAgNTIsICA1NCwgIDU2LAorICAgICA1OCwgIDYwLCAgNjIs ICA2NCwgIDY2LCAgNjgsICA3MCwgIDcyLCAgNzQsICA3NiwgIDc4LCAgODAsICA4MiwgIDg0LCAg ODYsICA4OCwKK307CisKKworc3RhdGljIGludCBnZXRfcVBjKGNvbnN0IFZWQ0ZyYW1lQ29udGV4 dCAqZmMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQgY2hyb21hKQorewor ICAgIGNvbnN0IGludCB4ICAgICAgICAgICAgID0geDAgPj4gTUlOX1RVX0xPRzI7CisgICAgY29u c3QgaW50IHkgICAgICAgICAgICAgPSB5MCA+PiBNSU5fVFVfTE9HMjsKKyAgICBjb25zdCBpbnQg bWluX3R1X3dpZHRoICA9IGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aDsKKyAgICByZXR1cm4gZmMt PnRhYi5xcFtjaHJvbWFdW3ggKyB5ICogbWluX3R1X3dpZHRoXTsKK30KKworc3RhdGljIHZvaWQg Y29weV9jdGIodWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMsIGNvbnN0IGludCB3aWR0 aCwgY29uc3QgaW50IGhlaWdodCwKKyAgICBjb25zdCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29u c3QgcHRyZGlmZl90IHNyY19zdHJpZGUpCit7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln aHQ7IHkrKykgeworICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHdpZHRoKTsKKworICAgICAgICBk c3QgKz0gZHN0X3N0cmlkZTsKKyAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7CisgICAgfQorfQor CitzdGF0aWMgdm9pZCBjb3B5X3BpeGVsKHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3Jj LCBjb25zdCBpbnQgcGl4ZWxfc2hpZnQpCit7CisgICAgaWYgKHBpeGVsX3NoaWZ0KQorICAgICAg ICAqKHVpbnQxNl90ICopZHN0ID0gKih1aW50MTZfdCAqKXNyYzsKKyAgICBlbHNlCisgICAgICAg ICpkc3QgPSAqc3JjOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3ZlcnQodWludDhfdCAqZHN0LCBj b25zdCB1aW50OF90ICpzcmMsIGNvbnN0IGludCBwaXhlbF9zaGlmdCwgY29uc3QgaW50IGhlaWdo dCwKKyAgICBjb25zdCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgcHRyZGlmZl90IHNyY19z dHJpZGUpCit7CisgICAgaW50IGk7CisgICAgaWYgKHBpeGVsX3NoaWZ0ID09IDApIHsKKyAgICAg ICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgICAgICAgICAqZHN0ID0gKnNy YzsKKyAgICAgICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlOworICAgICAgICAgICAgc3JjICs9IHNy Y19zdHJpZGU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwOyBp IDwgaGVpZ2h0OyBpKyspIHsKKyAgICAgICAgICAgICoodWludDE2X3QgKilkc3QgPSAqKHVpbnQx Nl90ICopc3JjOworICAgICAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgICAgICBz cmMgKz0gc3JjX3N0cmlkZTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgY29w eV9jdGJfdG9faHYoVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgdWludDhfdCAqc3JjLAorICAg IGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNv bnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwKKyAgICBjb25zdCBpbnQgY19pZHgsIGNv bnN0IGludCB4X2N0YiwgY29uc3QgaW50IHlfY3RiLCBjb25zdCBpbnQgdG9wKQoreworICAgIGlu dCBwcyA9IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0OworICAgIGludCB3ICA9IGZjLT5wcy5zcHMt PndpZHRoID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgaW50IGggID0gZmMtPnBz LnNwcy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisKKyAgICBpZiAodG9w KSB7CisgICAgICAgIC8qIHRvcCAqLworICAgICAgICBtZW1jcHkoZmMtPnRhYi5zYW9fcGl4ZWxf YnVmZmVyX2hbY19pZHhdICsgKCgoMiAqIHlfY3RiKSAqIHcgKyB4KSA8PCBwcyksCisgICAgICAg ICAgICBzcmMsIHdpZHRoIDw8IHBzKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBib3R0b20g Ki8KKyAgICAgICAgbWVtY3B5KGZjLT50YWIuc2FvX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XSArICgo KDIgKiB5X2N0YiArIDEpICogdyArIHgpIDw8IHBzKSwKKyAgICAgICAgICAgIHNyYyArIHNyY19z dHJpZGUgKiAoaGVpZ2h0IC0gMSksIHdpZHRoIDw8IHBzKTsKKworICAgICAgICAvKiBjb3B5IHZl cnRpY2FsIGVkZ2VzICovCisgICAgICAgIGNvcHlfdmVydChmYy0+dGFiLnNhb19waXhlbF9idWZm ZXJfdltjX2lkeF0gKyAoKCgyICogeF9jdGIpICogaCArIHkpIDw8IHBzKSwgc3JjLCBwcywgaGVp Z2h0LCAxIDw8IHBzLCBzcmNfc3RyaWRlKTsKKyAgICAgICAgY29weV92ZXJ0KGZjLT50YWIuc2Fv X3BpeGVsX2J1ZmZlcl92W2NfaWR4XSArICgoKDIgKiB4X2N0YiArIDEpICogaCArIHkpIDw8IHBz KSwgc3JjICsgKCh3aWR0aCAtIDEpIDw8IHBzKSwgcHMsIGhlaWdodCwgMSA8PCBwcywgc3JjX3N0 cmlkZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzYW9fY29weV9jdGJfdG9faHYoVlZDTG9j YWxDb250ZXh0ICpsYywgY29uc3QgaW50IHJ4LCBjb25zdCBpbnQgcnksIGNvbnN0IGludCB0b3Ap Cit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgaW50 IGN0Yl9zaXplX3kgICAgPSBmYy0+cHMuc3BzLT5jdGJfc2l6ZV95OworICAgIGNvbnN0IGludCB4 MCAgICAgICAgICAgID0gcnggPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGNv bnN0IGludCB5MCAgICAgICAgICAgID0gcnkgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95 OworCisgICAgZm9yIChpbnQgY19pZHggPSAwOyBjX2lkeCA8IChmYy0+cHMuc3BzLT5yLT5zcHNf Y2hyb21hX2Zvcm1hdF9pZGMgPyAzIDogMSk7IGNfaWR4KyspIHsKKyAgICAgICAgY29uc3QgaW50 IHggICAgICAgICAgICAgICAgPSB4MCA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAg ICAgICBjb25zdCBpbnQgeSAgICAgICAgICAgICAgICA9IHkwID4+IGZjLT5wcy5zcHMtPnZzaGlm dFtjX2lkeF07CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlID0gZmMtPmZyYW1l LT5saW5lc2l6ZVtjX2lkeF07CisgICAgICAgIGNvbnN0IGludCBjdGJfc2l6ZV9oICAgICAgID0g Y3RiX3NpemVfeSA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBp bnQgY3RiX3NpemVfdiAgICAgICA9IGN0Yl9zaXplX3kgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2Nf aWR4XTsKKyAgICAgICAgY29uc3QgaW50IHdpZHRoICAgICAgICAgICAgPSBGRk1JTihjdGJfc2l6 ZV9oLCAoZmMtPnBzLnNwcy0+d2lkdGggID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF0pIC0g eCk7CisgICAgICAgIGNvbnN0IGludCBoZWlnaHQgICAgICAgICAgID0gRkZNSU4oY3RiX3NpemVf diwgKGZjLT5wcy5zcHMtPmhlaWdodCA+PiBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdKSAtIHkp OworICAgICAgICB1aW50OF90ICpzcmMgICAgICAgICAgICAgICA9ICZmYy0+ZnJhbWUtPmRhdGFb Y19pZHhdW3kgKiBzcmNfc3RyaWRlICsgKHggPDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsK KyAgICAgICAgY29weV9jdGJfdG9faHYoZmMsIHNyYywgc3JjX3N0cmlkZSwgeCwgeSwgd2lkdGgs IGhlaWdodCwgY19pZHgsIHJ4LCByeSwgdG9wKTsKKyAgICB9CisKK30KKwordm9pZCBmZl92dmNf c2FvX2NvcHlfY3RiX3RvX2h2KFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCByeCwgY29u c3QgaW50IHJ5LCBjb25zdCBpbnQgbGFzdF9yb3cpCit7CisgICAgaWYgKHJ5KQorICAgICAgICBz YW9fY29weV9jdGJfdG9faHYobGMsIHJ4LCByeSAtIDEsIDApOworCisgICAgc2FvX2NvcHlfY3Ri X3RvX2h2KGxjLCByeCwgcnksIDEpOworCisgICAgaWYgKGxhc3Rfcm93KQorICAgICAgICBzYW9f Y29weV9jdGJfdG9faHYobGMsIHJ4LCByeSwgMCk7Cit9CisKK3ZvaWQgZmZfdnZjX3Nhb19maWx0 ZXIoVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgsIGludCB5KQoreworICAgIFZWQ0ZyYW1lQ29u dGV4dCAqZmMgID0gbGMtPmZjOworICAgIGNvbnN0IGludCBjdGJfc2l6ZV95ID0gZmMtPnBzLnNw cy0+Y3RiX3NpemVfeTsKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBzYW9fdGFiWzE2XSA9IHsg MCwgMSwgMiwgMiwgMywgMywgNCwgNCwgNSwgNSwgNiwgNiwgNywgNywgOCwgOCB9OworICAgIGlu dCBjX2lkeDsKKyAgICBpbnQgZWRnZXNbNF07ICAvLyAwIGxlZnQgMSB0b3AgMiByaWdodCAzIGJv dHRvbQorICAgIGludCB4X2N0YiAgICAgICAgICAgICAgICA9IHggPj4gZmMtPnBzLnNwcy0+Y3Ri X2xvZzJfc2l6ZV95OworICAgIGludCB5X2N0YiAgICAgICAgICAgICAgICA9IHkgPj4gZmMtPnBz LnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIFNBT1BhcmFtcyAqc2FvICAgICAgICAgICA9ICZD VEIoZmMtPnRhYi5zYW8sIHhfY3RiLCB5X2N0Yik7CisgICAgLy8gZmxhZ3MgaW5kaWNhdGluZyB1 bmZpbHRlcmFibGUgZWRnZXMKKyAgICB1aW50OF90IHZlcnRfZWRnZVtdICAgICAgPSB7IDAsIDAg fTsKKyAgICB1aW50OF90IGhvcml6X2VkZ2VbXSAgICAgPSB7IDAsIDAgfTsKKyAgICB1aW50OF90 IGRpYWdfZWRnZVtdICAgICAgPSB7IDAsIDAsIDAsIDAgfTsKKyAgICB1aW50OF90IGxmYXNlICAg ICAgICAgICAgPSBmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19l bmFibGVkX2ZsYWc7CisgICAgdWludDhfdCBub190aWxlX2ZpbHRlciAgID0gZmMtPnBzLnBwcy0+ ci0+bnVtX3RpbGVzX2luX3BpYyA+IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAhZmMtPnBzLnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc190aWxlc19lbmFibGVkX2Zs YWc7CisgICAgdWludDhfdCByZXN0b3JlICAgICAgICAgID0gbm9fdGlsZV9maWx0ZXIgfHwgIWxm YXNlOworICAgIHVpbnQ4X3QgbGVmdF90aWxlX2VkZ2UgICA9IDA7CisgICAgdWludDhfdCByaWdo dF90aWxlX2VkZ2UgID0gMDsKKyAgICB1aW50OF90IHVwX3RpbGVfZWRnZSAgICAgPSAwOworICAg IHVpbnQ4X3QgYm90dG9tX3RpbGVfZWRnZSA9IDA7CisKKyAgICBlZGdlc1tMRUZUXSAgID0geF9j dGIgPT0gMDsKKyAgICBlZGdlc1tUT1BdICAgID0geV9jdGIgPT0gMDsKKyAgICBlZGdlc1tSSUdI VF0gID0geF9jdGIgPT0gZmMtPnBzLnBwcy0+Y3RiX3dpZHRoICAtIDE7CisgICAgZWRnZXNbQk9U VE9NXSA9IHlfY3RiID09IGZjLT5wcy5wcHMtPmN0Yl9oZWlnaHQgLSAxOworCisgICAgaWYgKHJl c3RvcmUpIHsKKyAgICAgICAgaWYgKCFlZGdlc1tMRUZUXSkgeworICAgICAgICAgICAgbGVmdF90 aWxlX2VkZ2UgID0gbm9fdGlsZV9maWx0ZXIgJiYgZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFt4 X2N0Yl0gPT0geF9jdGI7CisgICAgICAgICAgICB2ZXJ0X2VkZ2VbMF0gICAgPSAoIWxmYXNlICYm IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGlj ZV9pZHgsIHhfY3RiIC0gMSwgeV9jdGIpKSB8fCBsZWZ0X3RpbGVfZWRnZTsKKyAgICAgICAgfQor ICAgICAgICBpZiAoIWVkZ2VzW1JJR0hUXSkgeworICAgICAgICAgICAgcmlnaHRfdGlsZV9lZGdl ID0gbm9fdGlsZV9maWx0ZXIgJiYgZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFt4X2N0Yl0gIT0g ZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFt4X2N0YiArIDFdOworICAgICAgICAgICAgdmVydF9l ZGdlWzFdICAgID0gKCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0 YikgIT0gQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiArIDEsIHlfY3RiKSkgfHwgcmlnaHRf dGlsZV9lZGdlOworICAgICAgICB9CisgICAgICAgIGlmICghZWRnZXNbVE9QXSkgeworICAgICAg ICAgICAgdXBfdGlsZV9lZGdlICAgICA9IG5vX3RpbGVfZmlsdGVyICYmIGZjLT5wcy5wcHMtPmN0 Yl90b19yb3dfYmRbeV9jdGJdID09IHlfY3RiOworICAgICAgICAgICAgaG9yaXpfZWRnZVswXSAg ICA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9IENU QihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiIC0gMSkpIHx8IHVwX3RpbGVfZWRnZTsK KyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW0JPVFRPTV0pIHsKKyAgICAgICAgICAgIGJv dHRvbV90aWxlX2VkZ2UgPSBub190aWxlX2ZpbHRlciAmJiBmYy0+cHMucHBzLT5jdGJfdG9fcm93 X2JkW3lfY3RiXSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fcm93X2JkW3lfY3RiICsgMV07CisgICAg ICAgICAgICBob3Jpel9lZGdlWzFdICAgID0gKCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9p ZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIg KyAxKSkgfHwgYm90dG9tX3RpbGVfZWRnZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2Vz W0xFRlRdICYmICFlZGdlc1tUT1BdKSB7CisgICAgICAgICAgICBkaWFnX2VkZ2VbMF0gPSAoIWxm YXNlICYmIENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRh Yi5zbGljZV9pZHgsIHhfY3RiIC0gMSwgeV9jdGIgLSAxKSkgfHwgbGVmdF90aWxlX2VkZ2UgfHwg dXBfdGlsZV9lZGdlOworICAgICAgICB9CisgICAgICAgIGlmICghZWRnZXNbVE9QXSAmJiAhZWRn ZXNbUklHSFRdKSB7CisgICAgICAgICAgICBkaWFnX2VkZ2VbMV0gPSAoIWxmYXNlICYmIENUQihm Yy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgs IHhfY3RiICsgMSwgeV9jdGIgLSAxKSkgfHwgcmlnaHRfdGlsZV9lZGdlIHx8IHVwX3RpbGVfZWRn ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW1JJR0hUXSAmJiAhZWRnZXNbQk9UVE9N XSkgeworICAgICAgICAgICAgZGlhZ19lZGdlWzJdID0gKCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5z bGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiAr IDEsIHlfY3RiICsgMSkpIHx8IHJpZ2h0X3RpbGVfZWRnZSB8fCBib3R0b21fdGlsZV9lZGdlOwor ICAgICAgICB9CisgICAgICAgIGlmICghZWRnZXNbTEVGVF0gJiYgIWVkZ2VzW0JPVFRPTV0pIHsK KyAgICAgICAgICAgIGRpYWdfZWRnZVszXSA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xpY2Vf aWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIgLSAxLCB5 X2N0YiArIDEpKSB8fCBsZWZ0X3RpbGVfZWRnZSB8fCBib3R0b21fdGlsZV9lZGdlOworICAgICAg ICB9CisgICAgfQorCisgICAgZm9yIChjX2lkeCA9IDA7IGNfaWR4IDwgKGZjLT5wcy5zcHMtPnIt PnNwc19jaHJvbWFfZm9ybWF0X2lkYyA/IDMgOiAxKTsgY19pZHgrKykgeworICAgICAgICBpbnQg eDAgICAgICAgPSB4ID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGludCB5 MCAgICAgICA9IHkgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgcHRyZGlm Zl90IHNyY19zdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XTsKKyAgICAgICAgaW50 IGN0Yl9zaXplX2ggPSBjdGJfc2l6ZV95ID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07Cisg ICAgICAgIGludCBjdGJfc2l6ZV92ID0gY3RiX3NpemVfeSA+PiBmYy0+cHMuc3BzLT52c2hpZnRb Y19pZHhdOworICAgICAgICBpbnQgd2lkdGggICAgPSBGRk1JTihjdGJfc2l6ZV9oLCAoZmMtPnBz LnNwcy0+d2lkdGggID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF0pIC0geDApOworICAgICAg ICBpbnQgaGVpZ2h0ICAgPSBGRk1JTihjdGJfc2l6ZV92LCAoZmMtPnBzLnNwcy0+aGVpZ2h0ID4+ IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF0pIC0geTApOworICAgICAgICBpbnQgdGFiICAgICAg PSBzYW9fdGFiWyhGRkFMSUdOKHdpZHRoLCA4KSA+PiAzKSAtIDFdOworICAgICAgICB1aW50OF90 ICpzcmMgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4XVt5MCAqIHNyY19zdHJpZGUgKyAoeDAgPDwg ZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsKKyAgICAgICAgcHRyZGlmZl90IGRzdF9zdHJpZGU7 CisgICAgICAgIHVpbnQ4X3QgKmRzdDsKKworICAgICAgICBzd2l0Y2ggKHNhby0+dHlwZV9pZHhb Y19pZHhdKSB7CisgICAgICAgIGNhc2UgU0FPX0JBTkQ6CisgICAgICAgICAgICBmYy0+dnZjZHNw LnNhby5iYW5kX2ZpbHRlclt0YWJdKHNyYywgc3JjLCBzcmNfc3RyaWRlLCBzcmNfc3RyaWRlLAor ICAgICAgICAgICAgICAgIHNhby0+b2Zmc2V0X3ZhbFtjX2lkeF0sIHNhby0+YmFuZF9wb3NpdGlv bltjX2lkeF0sIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh c2UgU0FPX0VER0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB3ID0gZmMtPnBzLnNwcy0+ d2lkdGggPj4gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgICAgIGludCBoID0g ZmMtPnBzLnNwcy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAg ICAgICBpbnQgc2ggPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKworICAgICAgICAgICAgZHN0 X3N0cmlkZSA9IDIqTUFYX1BCX1NJWkUgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFOwor ICAgICAgICAgICAgZHN0ID0gbGMtPnNhb19idWZmZXIgKyBkc3Rfc3RyaWRlICsgQVZfSU5QVVRf QlVGRkVSX1BBRERJTkdfU0laRTsKKworICAgICAgICAgICAgaWYgKCFlZGdlc1tUT1BdKSB7Cisg ICAgICAgICAgICAgICAgaW50IGxlZnQgPSAxIC0gZWRnZXNbTEVGVF07CisgICAgICAgICAgICAg ICAgaW50IHJpZ2h0ID0gMSAtIGVkZ2VzW1JJR0hUXTsKKyAgICAgICAgICAgICAgICBjb25zdCB1 aW50OF90ICpzcmMxOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRzdDE7CisgICAgICAgICAg ICAgICAgaW50IHBvczsKKworICAgICAgICAgICAgICAgIGRzdDEgPSBkc3QgLSBkc3Rfc3RyaWRl IC0gKGxlZnQgPDwgc2gpOworICAgICAgICAgICAgICAgIHNyYzEgPSBmYy0+dGFiLnNhb19waXhl bF9idWZmZXJfaFtjX2lkeF0gKyAoKCgyICogeV9jdGIgLSAxKSAqIHcgKyB4MCAtIGxlZnQpIDw8 IHNoKTsKKyAgICAgICAgICAgICAgICBwb3MgPSAwOworICAgICAgICAgICAgICAgIGlmIChsZWZ0 KSB7CisgICAgICAgICAgICAgICAgICAgIGNvcHlfcGl4ZWwoZHN0MSwgc3JjMSwgc2gpOworICAg ICAgICAgICAgICAgICAgICBwb3MgKz0gKDEgPDwgc2gpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBtZW1jcHkoZHN0MSArIHBvcywgc3JjMSArIHBvcywgd2lkdGggPDwgc2gp OworICAgICAgICAgICAgICAgIGlmIChyaWdodCkgeworICAgICAgICAgICAgICAgICAgICBwb3Mg Kz0gd2lkdGggPDwgc2g7CisgICAgICAgICAgICAgICAgICAgIGNvcHlfcGl4ZWwoZHN0MSArIHBv cywgc3JjMSArIHBvcywgc2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmICghZWRnZXNbQk9UVE9NXSkgeworICAgICAgICAgICAgICAgIGludCBsZWZ0 ID0gMSAtIGVkZ2VzW0xFRlRdOworICAgICAgICAgICAgICAgIGludCByaWdodCA9IDEgLSBlZGdl c1tSSUdIVF07CisgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjMTsKKyAgICAgICAg ICAgICAgICB1aW50OF90ICpkc3QxOworICAgICAgICAgICAgICAgIGludCBwb3M7CisKKyAgICAg ICAgICAgICAgICBkc3QxID0gZHN0ICsgaGVpZ2h0ICogZHN0X3N0cmlkZSAtIChsZWZ0IDw8IHNo KTsKKyAgICAgICAgICAgICAgICBzcmMxID0gZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX2hbY19p ZHhdICsgKCgoMiAqIHlfY3RiICsgMikgKiB3ICsgeDAgLSBsZWZ0KSA8PCBzaCk7CisgICAgICAg ICAgICAgICAgcG9zID0gMDsKKyAgICAgICAgICAgICAgICBpZiAobGVmdCkgeworICAgICAgICAg ICAgICAgICAgICBjb3B5X3BpeGVsKGRzdDEsIHNyYzEsIHNoKTsKKyAgICAgICAgICAgICAgICAg ICAgcG9zICs9ICgxIDw8IHNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg bWVtY3B5KGRzdDEgKyBwb3MsIHNyYzEgKyBwb3MsIHdpZHRoIDw8IHNoKTsKKyAgICAgICAgICAg ICAgICBpZiAocmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9zICs9IHdpZHRoIDw8IHNo OworICAgICAgICAgICAgICAgICAgICBjb3B5X3BpeGVsKGRzdDEgKyBwb3MsIHNyYzEgKyBwb3Ms IHNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo IWVkZ2VzW0xFRlRdKSB7CisgICAgICAgICAgICAgICAgY29weV92ZXJ0KGRzdCAtICgxIDw8IHNo KSwKKyAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX3ZbY19pZHhd ICsgKCgoMiAqIHhfY3RiIC0gMSkgKiBoICsgeTApIDw8IHNoKSwKKyAgICAgICAgICAgICAgICAg ICAgc2gsIGhlaWdodCwgZHN0X3N0cmlkZSwgMSA8PCBzaCk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAoIWVkZ2VzW1JJR0hUXSkgeworICAgICAgICAgICAgICAgIGNvcHlfdmVydChk c3QgKyAod2lkdGggPDwgc2gpLAorICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnNhb19waXhl bF9idWZmZXJfdltjX2lkeF0gKyAoKCgyICogeF9jdGIgKyAyKSAqIGggKyB5MCkgPDwgc2gpLAor ICAgICAgICAgICAgICAgICAgICBzaCwgaGVpZ2h0LCBkc3Rfc3RyaWRlLCAxIDw8IHNoKTsKKyAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgY29weV9jdGIoZHN0LCBzcmMsICB3aWR0aCA8PCBz aCwgaGVpZ2h0LCBkc3Rfc3RyaWRlLCBzcmNfc3RyaWRlKTsKKyAgICAgICAgICAgIGZjLT52dmNk c3Auc2FvLmVkZ2VfZmlsdGVyW3RhYl0oc3JjLCBkc3QsIHNyY19zdHJpZGUsIHNhby0+b2Zmc2V0 X3ZhbFtjX2lkeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNhby0+ZW9fY2xhc3NbY19pZHhdLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGZjLT52 dmNkc3Auc2FvLmVkZ2VfcmVzdG9yZVtyZXN0b3JlXShzcmMsIGRzdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHJpZGUsIGRzdF9zdHJpZGUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW8sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlcywgd2lk dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWln aHQsIGNfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdmVydF9lZGdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaG9yaXpfZWRnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpYWdfZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg ICAgICB9CisgICAgfQorfQorCisjZGVmaW5lIFRBQl9CUyh0LCB4LCB5KSAgICAgKHQpWygoeSkg Pj4gMikgKiAoZmMtPnRhYi5ic193aWR0aCkgKyAoKHgpID4+IDIpXQorI2RlZmluZSBUQUJfTUFY X0xFTih0LCB4LCB5KSAgKHQpWygoeSkgPj4gMikgKiAoZmMtPnRhYi5ic193aWR0aCkgKyAoKHgp ID4+IDIpXQorCisvLzggc2FtcGxlcyBhIHRpbWUKKyNkZWZpbmUgREVCTE9DS19TVEVQICAgICAg ICAgICAgOAorI2RlZmluZSBMVU1BX0dSSUQgICAgICAgICAgICAgICA0CisjZGVmaW5lIENIUk9N QV9HUklEICAgICAgICAgICAgIDgKKworc3RhdGljIGludCBib3VuZGFyeV9zdHJlbmd0aChjb25z dCBWVkNMb2NhbENvbnRleHQgKmxjLCBNdkZpZWxkICpjdXJyLCBNdkZpZWxkICpuZWlnaCwKKyAg ICBjb25zdCBSZWZQaWNMaXN0ICpuZWlnaF9ycGwpCit7CisgICAgUmVmUGljTGlzdCAqcnBsID0g bGMtPnNjLT5ycGw7CisgICAgaWYgKGN1cnItPnByZWRfZmxhZyA9PSBQRl9CSSAmJiAgbmVpZ2gt PnByZWRfZmxhZyA9PSBQRl9CSSkgeworICAgICAgICAvLyBzYW1lIEwwIGFuZCBMMQorICAgICAg ICBpZiAocnBsWzBdLmxpc3RbY3Vyci0+cmVmX2lkeFswXV0gPT0gbmVpZ2hfcnBsWzBdLmxpc3Rb bmVpZ2gtPnJlZl9pZHhbMF1dICAmJgorICAgICAgICAgICAgcnBsWzBdLmxpc3RbY3Vyci0+cmVm X2lkeFswXV0gPT0gcnBsWzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsxXV0gJiYKKyAgICAgICAgICAg IG5laWdoX3JwbFswXS5saXN0W25laWdoLT5yZWZfaWR4WzBdXSA9PSBuZWlnaF9ycGxbMV0ubGlz dFtuZWlnaC0+cmVmX2lkeFsxXV0pIHsKKyAgICAgICAgICAgIGlmICgoRkZBQlMobmVpZ2gtPm12 WzBdLnggLSBjdXJyLT5tdlswXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5tdlswXS55IC0gY3Vy ci0+bXZbMF0ueSkgPj0gOCB8fAorICAgICAgICAgICAgICAgICBGRkFCUyhuZWlnaC0+bXZbMV0u eCAtIGN1cnItPm12WzFdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzFdLnkgLSBjdXJyLT5t dlsxXS55KSA+PSA4KSAmJgorICAgICAgICAgICAgICAgIChGRkFCUyhuZWlnaC0+bXZbMV0ueCAt IGN1cnItPm12WzBdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzFdLnkgLSBjdXJyLT5tdlsw XS55KSA+PSA4IHx8CisgICAgICAgICAgICAgICAgIEZGQUJTKG5laWdoLT5tdlswXS54IC0gY3Vy ci0+bXZbMV0ueCkgPj0gOCB8fCBGRkFCUyhuZWlnaC0+bXZbMF0ueSAtIGN1cnItPm12WzFdLnkp ID49IDgpKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVsc2UgaWYgKG5laWdoX3JwbFswXS5s aXN0W25laWdoLT5yZWZfaWR4WzBdXSA9PSBycGxbMF0ubGlzdFtjdXJyLT5yZWZfaWR4WzBdXSAm JgorICAgICAgICAgICAgICAgICAgIG5laWdoX3JwbFsxXS5saXN0W25laWdoLT5yZWZfaWR4WzFd XSA9PSBycGxbMV0ubGlzdFtjdXJyLT5yZWZfaWR4WzFdXSkgeworICAgICAgICAgICAgaWYgKEZG QUJTKG5laWdoLT5tdlswXS54IC0gY3Vyci0+bXZbMF0ueCkgPj0gOCB8fCBGRkFCUyhuZWlnaC0+ bXZbMF0ueSAtIGN1cnItPm12WzBdLnkpID49IDggfHwKKyAgICAgICAgICAgICAgICBGRkFCUyhu ZWlnaC0+bXZbMV0ueCAtIGN1cnItPm12WzFdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzFd LnkgLSBjdXJyLT5tdlsxXS55KSA+PSA4KQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVsc2Ug aWYgKG5laWdoX3JwbFsxXS5saXN0W25laWdoLT5yZWZfaWR4WzFdXSA9PSBycGxbMF0ubGlzdFtj dXJyLT5yZWZfaWR4WzBdXSAmJgorICAgICAgICAgICAgICAgICAgIG5laWdoX3JwbFswXS5saXN0 W25laWdoLT5yZWZfaWR4WzBdXSA9PSBycGxbMV0ubGlzdFtjdXJyLT5yZWZfaWR4WzFdXSkgewor ICAgICAgICAgICAgaWYgKEZGQUJTKG5laWdoLT5tdlsxXS54IC0gY3Vyci0+bXZbMF0ueCkgPj0g OCB8fCBGRkFCUyhuZWlnaC0+bXZbMV0ueSAtIGN1cnItPm12WzBdLnkpID49IDggfHwKKyAgICAg ICAgICAgICAgICBGRkFCUyhuZWlnaC0+bXZbMF0ueCAtIGN1cnItPm12WzFdLngpID49IDggfHwg RkZBQlMobmVpZ2gtPm12WzBdLnkgLSBjdXJyLT5tdlsxXS55KSA+PSA4KQorICAgICAgICAgICAg ICAgIHJldHVybiAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAw OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAg ICB9IGVsc2UgaWYgKChjdXJyLT5wcmVkX2ZsYWcgIT0gUEZfQkkpICYmIChuZWlnaC0+cHJlZF9m bGFnICE9IFBGX0JJKSl7IC8vIDEgTVYKKyAgICAgICAgTXYgQSwgQjsKKyAgICAgICAgaW50IHJl Zl9BLCByZWZfQjsKKworICAgICAgICBpZiAoY3Vyci0+cHJlZF9mbGFnICYgMSkgeworICAgICAg ICAgICAgQSAgICAgPSBjdXJyLT5tdlswXTsKKyAgICAgICAgICAgIHJlZl9BID0gcnBsWzBdLmxp c3RbY3Vyci0+cmVmX2lkeFswXV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBICAg ICA9IGN1cnItPm12WzFdOworICAgICAgICAgICAgcmVmX0EgPSBycGxbMV0ubGlzdFtjdXJyLT5y ZWZfaWR4WzFdXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZWlnaC0+cHJlZF9mbGFnICYg MSkgeworICAgICAgICAgICAgQiAgICAgPSBuZWlnaC0+bXZbMF07CisgICAgICAgICAgICByZWZf QiA9IG5laWdoX3JwbFswXS5saXN0W25laWdoLT5yZWZfaWR4WzBdXTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIEIgICAgID0gbmVpZ2gtPm12WzFdOworICAgICAgICAgICAgcmVmX0Ig PSBuZWlnaF9ycGxbMV0ubGlzdFtuZWlnaC0+cmVmX2lkeFsxXV07CisgICAgICAgIH0KKworICAg ICAgICBpZiAocmVmX0EgPT0gcmVmX0IpIHsKKyAgICAgICAgICAgIGlmIChGRkFCUyhBLnggLSBC LngpID49IDggfHwgRkZBQlMoQS55IC0gQi55KSA+PSA4KQorICAgICAgICAgICAgICAgIHJldHVy biAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg ICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHJldHVybiAxOwor fQorCisvL3BhcnQgb2YgOC44LjMuMyBEZXJpdmF0aW9uIHByb2Nlc3Mgb2YgdHJhbnNmb3JtIGJs b2NrIGJvdW5kYXJ5CitzdGF0aWMgdm9pZCBkZXJpdmVfbWF4X2ZpbHRlcl9sZW5ndGhfbHVtYShj b25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBpbnQgcXgsIGNvbnN0IGludCBxeSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19pbnRy YSwgY29uc3QgaW50IGhhc19zdWJibG9jaywgY29uc3QgaW50IHZlcnRpY2FsLCB1aW50OF90ICpt YXhfbGVuX3AsIHVpbnQ4X3QgKm1heF9sZW5fcSkKK3sKKyAgICBjb25zdCBpbnQgcHggPSAgdmVy dGljYWwgPyBxeCAtIDEgOiBxeDsKKyAgICBjb25zdCBpbnQgcHkgPSAhdmVydGljYWwgPyBxeSAt IDEgOiBxeTsKKyAgICBjb25zdCB1aW50OF90ICp0Yl9zaXplID0gdmVydGljYWwgPyBmYy0+dGFi LnRiX3dpZHRoW0xVTUFdIDogZmMtPnRhYi50Yl9oZWlnaHRbTFVNQV07CisgICAgY29uc3QgaW50 IHNpemVfcCA9IHRiX3NpemVbKHB5ID4+IE1JTl9UVV9MT0cyKSAqIGZjLT5wcy5wcHMtPm1pbl90 dV93aWR0aCArIChweCA+PiBNSU5fVFVfTE9HMildOworICAgIGNvbnN0IGludCBzaXplX3EgPSB0 Yl9zaXplWyhxeSA+PiBNSU5fVFVfTE9HMikgKiBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGggKyAo cXggPj4gTUlOX1RVX0xPRzIpXTsKKyAgICBjb25zdCBpbnQgbWluX2NiX2xvZzIgPSBmYy0+cHMu c3BzLT5taW5fY2JfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IG9mZl9wID0gKHB5ID4+IG1p bl9jYl9sb2cyKSAqIGZjLT5wcy5wcHMtPm1pbl9jYl93aWR0aCArIChweCA+PiBtaW5fY2JfbG9n Mik7CisgICAgaWYgKHNpemVfcCA8PSA0IHx8IHNpemVfcSA8PSA0KSB7CisgICAgICAgICptYXhf bGVuX3AgPSAqbWF4X2xlbl9xID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICAqbWF4X2xlbl9w ID0gKm1heF9sZW5fcSA9IDM7CisgICAgICAgIGlmIChzaXplX3AgPj0gMzIpCisgICAgICAgICAg ICAqbWF4X2xlbl9wID0gNzsKKyAgICAgICAgaWYgKHNpemVfcSA+PSAzMikKKyAgICAgICAgICAg ICptYXhfbGVuX3EgPSA3OworICAgIH0KKyAgICBpZiAoaGFzX3N1YmJsb2NrKQorICAgICAgICAq bWF4X2xlbl9xID0gRkZNSU4oNSwgKm1heF9sZW5fcSk7CisgICAgaWYgKGZjLT50YWIubXNmW29m Zl9wXSB8fCBmYy0+dGFiLmlhZltvZmZfcF0pCisgICAgICAgICptYXhfbGVuX3AgPSBGRk1JTig1 LCAqbWF4X2xlbl9wKTsKK30KKworc3RhdGljIHZvaWQgdnZjX2RlYmxvY2tfc3ViYmxvY2tfYnNf dmVydGljYWwoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBpbnQgY2JfeCwg Y29uc3QgaW50IGNiX3ksIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQgd2lk dGgsIGNvbnN0IGludCBoZWlnaHQpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICAqZmMg ID0gbGMtPmZjOworICAgIE12RmllbGQgKnRhYl9tdmYgICAgICAgICAgICA9IGZjLT50YWIubXZm OworICAgIFJlZlBpY0xpc3QgKnJwbCAgICAgICAgICAgICA9IGxjLT5zYy0+cnBsOworICAgIGNv bnN0IGludCBtaW5fcHVfd2lkdGggICAgICA9IGZjLT5wcy5wcHMtPm1pbl9wdV93aWR0aDsKKyAg ICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSAgPSBNSU5fUFVfTE9HMjsKKyAgICB1aW50OF90 IG1heF9sZW5fcCwgbWF4X2xlbl9xOworICAgIGludCBicywgaSwgajsKKworICAgIC8vIGJzIGZv ciBUVSBpbnRlcm5hbCB2ZXJ0aWNhbCBQVSBib3VuZGFyaWVzCisgICAgZm9yIChqID0gMDsgaiA8 IGhlaWdodDsgaiArPSA0KSB7CisgICAgICAgIGludCB5X3B1ID0gKHkwICsgaikgPj4gbG9nMl9t aW5fcHVfc2l6ZTsKKworICAgICAgICBmb3IgKGkgPSA4IC0gKCh4MCAtIGNiX3gpICUgOCk7IGkg PCB3aWR0aDsgaSArPSA4KSB7CisgICAgICAgICAgICBpbnQgeHBfcHUgPSAoeDAgKyBpIC0gMSkg Pj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgICAgIGludCB4cV9wdSA9ICh4MCArIGkpICAg ICA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICAgICAgTXZGaWVsZCAqbGVmdCA9ICZ0YWJf bXZmW3lfcHUgKiBtaW5fcHVfd2lkdGggKyB4cF9wdV07CisgICAgICAgICAgICBNdkZpZWxkICpj dXJyID0gJnRhYl9tdmZbeV9wdSAqIG1pbl9wdV93aWR0aCArIHhxX3B1XTsKKyAgICAgICAgICAg IGNvbnN0IGludCB4ID0geDAgKyBpOworICAgICAgICAgICAgY29uc3QgaW50IHkgPSB5MCArIGo7 CisKKyAgICAgICAgICAgIGJzID0gYm91bmRhcnlfc3RyZW5ndGgobGMsIGN1cnIsIGxlZnQsIHJw bCk7CisgICAgICAgICAgICBUQUJfQlMoZmMtPnRhYi52ZXJ0aWNhbF9ic1tMVU1BXSwgeCwgeSkg PSBiczsKKworCisgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3EgPSAwOworICAgICAg ICAgICAgaWYgKGkgPT0gNCB8fCBpID09IHdpZHRoIC0gNCkKKyAgICAgICAgICAgICAgICBtYXhf bGVuX3AgPSBtYXhfbGVuX3EgPSAxOworICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSA4IHx8IGkg PT0gd2lkdGggLSA4KQorICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDI7 CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9x ID0gMzsKKworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi52ZXJ0aWNhbF9wLCB4LCB5 KSA9IG1heF9sZW5fcDsKKyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50YWIudmVydGljYWxf cSwgeCwgeSkgPSBtYXhfbGVuX3E7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IHZ2Y19kZWJsb2NrX3N1YmJsb2NrX2JzX2hvcml6b250YWwoY29uc3QgVlZDTG9jYWxDb250ZXh0 ICpsYywKKyAgICBjb25zdCBpbnQgY2JfeCwgY29uc3QgaW50IGNiX3ksIGNvbnN0IGludCB4MCwg Y29uc3QgaW50IHkwLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQpCit7CisgICAg Y29uc3QgVlZDRnJhbWVDb250ZXh0ICAqZmMgID0gbGMtPmZjOworICAgIE12RmllbGQqIHRhYl9t dmYgICAgICAgICAgICA9IGZjLT50YWIubXZmOworICAgIFJlZlBpY0xpc3QqIHJwbCAgICAgICAg ICAgICA9IGxjLT5zYy0+cnBsOworICAgIGNvbnN0IGludCBtaW5fcHVfd2lkdGggICAgICA9IGZj LT5wcy5wcHMtPm1pbl9wdV93aWR0aDsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSAg PSBNSU5fUFVfTE9HMjsKKyAgICB1aW50OF90IG1heF9sZW5fcCwgbWF4X2xlbl9xOworICAgIGlu dCBicywgaSwgajsKKworICAgIC8vIGJzIGZvciBUVSBpbnRlcm5hbCBob3Jpem9udGFsIFBVIGJv dW5kYXJpZXMKKyAgICBmb3IgKGogPSA4IC0gKCh5MCAtIGNiX3kpICUgOCk7IGogPCBoZWlnaHQ7 IGogKz0gOCkgeworICAgICAgICBpbnQgeXBfcHUgPSAoeTAgKyBqIC0gMSkgPj4gbG9nMl9taW5f cHVfc2l6ZTsKKyAgICAgICAgaW50IHlxX3B1ID0gKHkwICsgaikgICAgID4+IGxvZzJfbWluX3B1 X3NpemU7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpICs9IDQpIHsKKyAgICAg ICAgICAgIGludCB4X3B1ID0gKHgwICsgaSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAg ICAgIE12RmllbGQgKnRvcCAgPSAmdGFiX212Zlt5cF9wdSAqIG1pbl9wdV93aWR0aCArIHhfcHVd OworICAgICAgICAgICAgTXZGaWVsZCAqY3VyciA9ICZ0YWJfbXZmW3lxX3B1ICogbWluX3B1X3dp ZHRoICsgeF9wdV07CisgICAgICAgICAgICBjb25zdCBpbnQgeCA9IHgwICsgaTsKKyAgICAgICAg ICAgIGNvbnN0IGludCB5ID0geTAgKyBqOworCisgICAgICAgICAgICBicyA9IGJvdW5kYXJ5X3N0 cmVuZ3RoKGxjLCBjdXJyLCB0b3AsIHJwbCk7CisgICAgICAgICAgICBUQUJfQlMoZmMtPnRhYi5o b3Jpem9udGFsX2JzW0xVTUFdLCB4LCB5KSA9IGJzOworCisgICAgICAgICAgICAvL2ZpeG1lOgor ICAgICAgICAgICAgLy9lZGdlVGJGbGFnc1sgeCDiiJIgc2JXIF1bIHkgXSBpcyBlcXVhbCB0byAx CisgICAgICAgICAgICAvL2VkZ2VUYkZsYWdzWyB4ICsgc2JXIF1bIHkgXSBpcyBlcXVhbCB0byAx CisgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3EgPSAwOworICAgICAgICAgICAgaWYg KGogPT0gNCB8fCBqID09IGhlaWdodCAtIDQpCisgICAgICAgICAgICAgICAgbWF4X2xlbl9wID0g bWF4X2xlbl9xID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGogPT0gOCB8fCBqID09IGhlaWdo dCAtIDgpCisgICAgICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMjsKKyAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3EgPSAzOwor ICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi5ob3Jpem9udGFsX3AsIHgsIHkpID0gbWF4 X2xlbl9wOworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi5ob3Jpem9udGFsX3EsIHgs IHkpID0gbWF4X2xlbl9xOworICAgICAgICB9CisgICAgfQorCit9CisKK3N0YXRpYyB2b2lkIHZ2 Y19kZWJsb2NrX2JzX2x1bWFfdmVydGljYWwoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywKKyAg ICBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQg aGVpZ2h0KQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgID0gbGMtPmZjOworICAg IE12RmllbGQgKnRhYl9tdmYgICAgICAgICAgID0gZmMtPnRhYi5tdmY7CisgICAgY29uc3QgaW50 IGxvZzJfbWluX3B1X3NpemUgPSBNSU5fUFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5f dHVfc2l6ZSA9IE1JTl9UVV9MT0cyOworICAgIGNvbnN0IGludCBtaW5fcHVfd2lkdGggICAgID0g ZmMtPnBzLnBwcy0+bWluX3B1X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fdHVfd2lkdGggICAg ID0gZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fY2JfbG9nMiAg ICAgID0gZmMtPnBzLnNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBtaW5f Y2Jfd2lkdGggICAgID0gZmMtPnBzLnBwcy0+bWluX2NiX3dpZHRoOworICAgIGludCBpc19pbnRy YSA9IHRhYl9tdmZbKHkwID4+IGxvZzJfbWluX3B1X3NpemUpICogbWluX3B1X3dpZHRoICsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICh4MCA+PiBsb2cyX21pbl9wdV9zaXplKV0ucHJlZF9m bGFnID09IFBGX0lOVFJBOworICAgIGludCBib3VuZGFyeV9sZWZ0OworICAgIGludCBpLCBicywg aGFzX3ZlcnRpY2FsX3NiID0gMDsKKyAgICB1aW50OF90IG1heF9sZW5fcCwgbWF4X2xlbl9xOwor CisgICAgY29uc3QgaW50IG9mZl9xICAgICAgICAgICAgPSAoeTAgPj4gbWluX2NiX2xvZzIpICog bWluX2NiX3dpZHRoICsgKHgwID4+IG1pbl9jYl9sb2cyKTsKKyAgICBjb25zdCBpbnQgY2JfeCAg ICAgICAgICAgICA9IGZjLT50YWIuY2JfcG9zX3hbTFVNQV1bb2ZmX3FdOworICAgIGNvbnN0IGlu dCBjYl95ICAgICAgICAgICAgID0gZmMtPnRhYi5jYl9wb3NfeVtMVU1BXVtvZmZfcV07CisgICAg Y29uc3QgaW50IGNiX3dpZHRoICAgICAgICAgPSBmYy0+dGFiLmNiX3dpZHRoW0xVTUFdW29mZl9x XTsKKworICAgIGlmICghaXNfaW50cmEpIHsKKyAgICAgICAgaWYgKGZjLT50YWIubXNmW29mZl9x XSB8fCBmYy0+dGFiLmlhZltvZmZfcV0pCisgICAgICAgICAgICBoYXNfdmVydGljYWxfc2IgICA9 IGNiX3dpZHRoICA+IDg7CisgICAgfQorCisgICAgLy8gYnMgZm9yIHZlcnRpY2FsIFRVIGJvdW5k YXJpZXMKKyAgICBib3VuZGFyeV9sZWZ0ID0geDAgPiAwICYmICEoeDAgJiAzKTsKKyAgICBpZiAo Ym91bmRhcnlfbGVmdCAmJgorICAgICAgICAoKCFmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9maWx0 ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICAgIGxjLT5ib3VuZGFy eV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfU0xJQ0UgJiYKKyAgICAgICAgICAgICh4MCAlICgxIDw8 IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDApIHx8CisgICAgICAgICAgICAoIWZj LT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxlZF9mbGFnICYm CisgICAgICAgICAgICBsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZUX1RJTEUgJiYK KyAgICAgICAgICAgICh4MCAlICgxIDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkpID09 IDApKSkKKyAgICAgICAgYm91bmRhcnlfbGVmdCA9IDA7CisKKyAgICBpZiAoYm91bmRhcnlfbGVm dCkgeworICAgICAgICBjb25zdCBSZWZQaWNMaXN0ICpycGxfbGVmdCA9CisgICAgICAgICAgICAo bGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9TTElDRSkgPyBmZl92dmNfZ2V0X3Jl Zl9saXN0KGZjLCBmYy0+cmVmLCB4MCAtIDEsIHkwKSA6IGxjLT5zYy0+cnBsOworICAgICAgICBp bnQgeHBfcHUgPSAoeDAgLSAxKSA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICBpbnQgeHFf cHUgPSAgeDAgICAgICA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICBpbnQgeHBfdHUgPSAo eDAgLSAxKSA+PiBsb2cyX21pbl90dV9zaXplOworICAgICAgICBpbnQgeHFfdHUgPSAgeDAgICAg ICA+PiBsb2cyX21pbl90dV9zaXplOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7 IGkgKz0gNCkgeworICAgICAgICAgICAgY29uc3QgaW50IG9mZl94ID0gY2JfeCAtIHgwOworICAg ICAgICAgICAgaW50IHlfcHUgICAgICA9ICh5MCArIGkpID4+IGxvZzJfbWluX3B1X3NpemU7Cisg ICAgICAgICAgICBpbnQgeV90dSAgICAgID0gKHkwICsgaSkgPj4gbG9nMl9taW5fdHVfc2l6ZTsK KyAgICAgICAgICAgIE12RmllbGQgKmxlZnQgPSAmdGFiX212Zlt5X3B1ICogbWluX3B1X3dpZHRo ICsgeHBfcHVdOworICAgICAgICAgICAgTXZGaWVsZCAqY3VyciA9ICZ0YWJfbXZmW3lfcHUgKiBt aW5fcHVfd2lkdGggKyB4cV9wdV07CisgICAgICAgICAgICB1aW50OF90IGxlZnRfY2JmX2x1bWEg PSBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbTFVNQV1beV90dSAqIG1pbl90dV93aWR0aCArIHhwX3R1 XTsKKyAgICAgICAgICAgIHVpbnQ4X3QgY3Vycl9jYmZfbHVtYSA9IGZjLT50YWIudHVfY29kZWRf ZmxhZ1tMVU1BXVt5X3R1ICogbWluX3R1X3dpZHRoICsgeHFfdHVdOworICAgICAgICAgICAgdWlu dDhfdCBwY21mICAgICAgICAgID0gZmMtPnRhYi5wY21mW0xVTUFdW3lfdHUgKiBtaW5fdHVfd2lk dGggKyB4cF90dV0gJiYKKyAgICAgICAgICAgICAgICBmYy0+dGFiLnBjbWZbTFVNQV1beV90dSAq IG1pbl90dV93aWR0aCArIHhxX3R1XTsKKworICAgICAgICAgICAgaWYgKHBjbWYpCisgICAgICAg ICAgICAgICAgYnMgPSAwOworICAgICAgICAgICAgZWxzZSBpZiAoY3Vyci0+cHJlZF9mbGFnID09 IFBGX0lOVFJBIHx8IGxlZnQtPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCBjdXJyLT5jaWlwX2Zs YWcgfHwgbGVmdC0+Y2lpcF9mbGFnKQorICAgICAgICAgICAgICAgIGJzID0gMjsKKyAgICAgICAg ICAgIGVsc2UgaWYgKGN1cnJfY2JmX2x1bWEgfHwgbGVmdF9jYmZfbHVtYSkKKyAgICAgICAgICAg ICAgICBicyA9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChvZmZfeCAmJiAoKG9mZl94ICUgOCkg fHwgIWhhc192ZXJ0aWNhbF9zYikpCisgICAgICAgICAgICAgICAgYnMgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vaW5zaWRlIGEgY3UsIG5vdCBhbGlnbmVkIHRv IDggb3Igd2l0aCBubyBzdWJibG9ja3MKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg ICBicyA9IGJvdW5kYXJ5X3N0cmVuZ3RoKGxjLCBjdXJyLCBsZWZ0LCBycGxfbGVmdCk7CisKKyAg ICAgICAgICAgIFRBQl9CUyhmYy0+dGFiLnZlcnRpY2FsX2JzW0xVTUFdLCB4MCwgKHkwICsgaSkp ID0gYnM7CisKKyAgICAgICAgICAgIGRlcml2ZV9tYXhfZmlsdGVyX2xlbmd0aF9sdW1hKGZjLCB4 MCwgeTAgKyBpLCBpc19pbnRyYSwgaGFzX3ZlcnRpY2FsX3NiLCAxLCAmbWF4X2xlbl9wLCAmbWF4 X2xlbl9xKTsKKyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50YWIudmVydGljYWxfcCwgeDAs IHkwICsgaSkgPSBtYXhfbGVuX3A7CisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLnZl cnRpY2FsX3EsIHgwLCB5MCArIGkpID0gbWF4X2xlbl9xOworICAgICAgICB9CisgICAgfQorCisg ICAgaWYgKCFpc19pbnRyYSkgeworICAgICAgICBpZiAoZmMtPnRhYi5tc2Zbb2ZmX3FdIHx8IGZj LT50YWIuaWFmW29mZl9xXSkKKyAgICAgICAgICAgIHZ2Y19kZWJsb2NrX3N1YmJsb2NrX2JzX3Zl cnRpY2FsKGxjLCBjYl94LCBjYl95LCB4MCwgeTAsIHdpZHRoLCBoZWlnaHQpOworICAgIH0KKwor fQorc3RhdGljIHZvaWQgdnZjX2RlYmxvY2tfYnNfbHVtYV9ob3Jpem9udGFsKGNvbnN0IFZWQ0xv Y2FsQ29udGV4dCAqbGMsCisgICAgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGlu dCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQg KmZjICA9IGxjLT5mYzsKKyAgICBNdkZpZWxkICp0YWJfbXZmICAgICAgICAgICA9IGZjLT50YWIu bXZmOworICAgIGNvbnN0IGludCBsb2cyX21pbl9wdV9zaXplID0gTUlOX1BVX0xPRzI7CisgICAg Y29uc3QgaW50IGxvZzJfbWluX3R1X3NpemUgPSBNSU5fVFVfTE9HMjsKKyAgICBjb25zdCBpbnQg bWluX3B1X3dpZHRoICAgICA9IGZjLT5wcy5wcHMtPm1pbl9wdV93aWR0aDsKKyAgICBjb25zdCBp bnQgbWluX3R1X3dpZHRoICAgICA9IGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aDsKKyAgICBjb25z dCBpbnQgbWluX2NiX2xvZzIgICAgICA9IGZjLT5wcy5zcHMtPm1pbl9jYl9sb2cyX3NpemVfeTsK KyAgICBjb25zdCBpbnQgbWluX2NiX3dpZHRoICAgICA9IGZjLT5wcy5wcHMtPm1pbl9jYl93aWR0 aDsKKyAgICBpbnQgaXNfaW50cmEgPSB0YWJfbXZmWyh5MCA+PiBsb2cyX21pbl9wdV9zaXplKSAq IG1pbl9wdV93aWR0aCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoeDAgPj4gbG9nMl9t aW5fcHVfc2l6ZSldLnByZWRfZmxhZyA9PSBQRl9JTlRSQTsKKyAgICBpbnQgYm91bmRhcnlfdXBw ZXI7CisgICAgaW50IGksIGJzLCBoYXNfaG9yaXpvbnRhbF9zYiA9IDA7CisgICAgdWludDhfdCBt YXhfbGVuX3AsIG1heF9sZW5fcTsKKworICAgIGNvbnN0IGludCBvZmZfcSAgICAgICAgICAgID0g KHkwID4+IG1pbl9jYl9sb2cyKSAqIG1pbl9jYl93aWR0aCArICh4MCA+PiBtaW5fY2JfbG9nMik7 CisgICAgY29uc3QgaW50IGNiX3ggICAgICAgICAgICAgPSBmYy0+dGFiLmNiX3Bvc194W0xVTUFd W29mZl9xXTsKKyAgICBjb25zdCBpbnQgY2JfeSAgICAgICAgICAgICA9IGZjLT50YWIuY2JfcG9z X3lbTFVNQV1bb2ZmX3FdOworICAgIGNvbnN0IGludCBjYl9oZWlnaHQgICAgICAgID0gZmMtPnRh Yi5jYl9oZWlnaHRbTFVNQV1bb2ZmX3FdOworCisgICAgaWYgKCFpc19pbnRyYSkgeworICAgICAg ICBpZiAoZmMtPnRhYi5tc2Zbb2ZmX3FdIHx8IGZjLT50YWIuaWFmW29mZl9xXSkKKyAgICAgICAg ICAgIGhhc19ob3Jpem9udGFsX3NiID0gY2JfaGVpZ2h0ID4gODsKKyAgICB9CisKKyAgICBib3Vu ZGFyeV91cHBlciA9IHkwID4gMCAmJiAhKHkwICYgMyk7CisgICAgaWYgKGJvdW5kYXJ5X3VwcGVy ICYmCisgICAgICAgICgoIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xp Y2VzX2VuYWJsZWRfZmxhZyAmJgorICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9V TkRBUllfVVBQRVJfU0xJQ0UgJiYKKyAgICAgICAgICAgICh5MCAlICgxIDw8IGZjLT5wcy5zcHMt PmN0Yl9sb2cyX3NpemVfeSkpID09IDApIHx8CisgICAgICAgICAgICAoIWZjLT5wcy5wcHMtPnIt PnBwc19sb29wX2ZpbHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxlZF9mbGFnICYmCisgICAgICAgICAg ICBsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9USUxFICYmCisgICAgICAgICAg ICAoeTAgJSAoMSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSkpCisgICAg ICAgIGJvdW5kYXJ5X3VwcGVyID0gMDsKKworICAgIGlmIChib3VuZGFyeV91cHBlcikgeworICAg ICAgICBjb25zdCBSZWZQaWNMaXN0ICpycGxfdG9wID0KKyAgICAgICAgICAgIChsYy0+Ym91bmRh cnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9TTElDRSkgPyBmZl92dmNfZ2V0X3JlZl9saXN0KGZj LCBmYy0+cmVmLCB4MCwgeTAgLSAxKSA6IGxjLT5zYy0+cnBsOworICAgICAgICBpbnQgeXBfcHUg PSAoeTAgLSAxKSA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICBpbnQgeXFfcHUgPSAgeTAg ICAgICA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICBpbnQgeXBfdHUgPSAoeTAgLSAxKSA+ PiBsb2cyX21pbl90dV9zaXplOworICAgICAgICBpbnQgeXFfdHUgPSAgeTAgICAgICA+PiBsb2cy X21pbl90dV9zaXplOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSArPSA0KSB7 CisgICAgICAgICAgICBjb25zdCBpbnQgb2ZmX3kgPSB5MCAtIGNiX3k7CisgICAgICAgICAgICBp bnQgeF9wdSA9ICh4MCArIGkpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAgICBpbnQg eF90dSA9ICh4MCArIGkpID4+IGxvZzJfbWluX3R1X3NpemU7CisgICAgICAgICAgICBNdkZpZWxk ICp0b3AgID0gJnRhYl9tdmZbeXBfcHUgKiBtaW5fcHVfd2lkdGggKyB4X3B1XTsKKyAgICAgICAg ICAgIE12RmllbGQgKmN1cnIgPSAmdGFiX212Zlt5cV9wdSAqIG1pbl9wdV93aWR0aCArIHhfcHVd OworICAgICAgICAgICAgdWludDhfdCB0b3BfY2JmX2x1bWEgID0gZmMtPnRhYi50dV9jb2RlZF9m bGFnW0xVTUFdW3lwX3R1ICogbWluX3R1X3dpZHRoICsgeF90dV07CisgICAgICAgICAgICB1aW50 OF90IGN1cnJfY2JmX2x1bWEgPSBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbTFVNQV1beXFfdHUgKiBt aW5fdHVfd2lkdGggKyB4X3R1XTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgcGNtZiAgICA9 IGZjLT50YWIucGNtZltMVU1BXVt5cF90dSAqIG1pbl90dV93aWR0aCArIHhfdHVdICYmCisgICAg ICAgICAgICAgICAgZmMtPnRhYi5wY21mW0xVTUFdW3lxX3R1ICogbWluX3R1X3dpZHRoICsgeF90 dV07CisKKyAgICAgICAgICAgIGlmIChwY21mKQorICAgICAgICAgICAgICAgIGJzID0gMDsKKyAg ICAgICAgICAgIGVsc2UgaWYgKGN1cnItPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCB0b3AtPnBy ZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCBjdXJyLT5jaWlwX2ZsYWcgfHwgdG9wLT5jaWlwX2ZsYWcp CisgICAgICAgICAgICAgICAgYnMgPSAyOworICAgICAgICAgICAgZWxzZSBpZiAoY3Vycl9jYmZf bHVtYSB8fCB0b3BfY2JmX2x1bWEpCisgICAgICAgICAgICAgICAgYnMgPSAxOworICAgICAgICAg ICAgZWxzZSBpZiAob2ZmX3kgJiYgKChvZmZfeSAlIDgpIHx8ICFoYXNfaG9yaXpvbnRhbF9zYikp CisgICAgICAgICAgICAgICAgYnMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvL2luc2lkZSBhIGN1LCBub3QgYWxpZ25lZCB0byA4IG9yIHdpdGggbm8gc3ViYmxvY2tz CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnMgPSBib3VuZGFyeV9zdHJlbmd0 aChsYywgY3VyciwgdG9wLCBycGxfdG9wKTsKKworICAgICAgICAgICAgVEFCX0JTKGZjLT50YWIu aG9yaXpvbnRhbF9ic1tMVU1BXSwgeDAgKyBpLCB5MCkgPSBiczsKKworICAgICAgICAgICAgZGVy aXZlX21heF9maWx0ZXJfbGVuZ3RoX2x1bWEoZmMsIHgwICsgaSwgeTAsIGlzX2ludHJhLCBoYXNf aG9yaXpvbnRhbF9zYiwgMCwgJm1heF9sZW5fcCwgJm1heF9sZW5fcSk7CisgICAgICAgICAgICBU QUJfTUFYX0xFTihmYy0+dGFiLmhvcml6b250YWxfcCwgeDAgKyBpLCB5MCkgPSBtYXhfbGVuX3A7 CisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLmhvcml6b250YWxfcSwgeDAgKyBpLCB5 MCkgPSBtYXhfbGVuX3E7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlzX2ludHJhKSB7 CisgICAgICAgIGlmIChmYy0+dGFiLm1zZltvZmZfcV0gfHwgZmMtPnRhYi5pYWZbb2ZmX3FdKQor ICAgICAgICAgICAgdnZjX2RlYmxvY2tfc3ViYmxvY2tfYnNfaG9yaXpvbnRhbChsYywgY2JfeCwg Y2JfeSwgeDAsIHkwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZ2 Y19kZWJsb2NrX2JzX2Nocm9tYV92ZXJ0aWNhbChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLAor ICAgIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGlu dCBoZWlnaHQpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgPSBsYy0+ZmM7Cisg ICAgTXZGaWVsZCAqdGFiX212ZiAgICAgICAgICAgPSBmYy0+dGFiLm12ZjsKKyAgICBjb25zdCBp bnQgbG9nMl9taW5fcHVfc2l6ZSA9IE1JTl9QVV9MT0cyOworICAgIGNvbnN0IGludCBsb2cyX21p bl90dV9zaXplID0gTUlOX1BVX0xPRzI7CisgICAgY29uc3QgaW50IG1pbl9wdV93aWR0aCAgICAg PSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50IG1pbl90dV93aWR0aCAg ICAgPSBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGg7CisgICAgaW50IGJvdW5kYXJ5X2xlZnQsIGk7 CisKKyAgICAvLyBicyBmb3IgdmVydGljYWwgVFUgYm91bmRhcmllcworICAgIGJvdW5kYXJ5X2xl ZnQgPSB4MCA+IDAgJiYgISh4MCAmICgoQ0hST01BX0dSSUQgPDwgZmMtPnBzLnNwcy0+aHNoaWZ0 WzFdKSAtIDEpKTsKKyAgICBpZiAoYm91bmRhcnlfbGVmdCAmJgorICAgICAgICAoKCFmYy0+cHMu cHBzLT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgJiYKKyAg ICAgICAgICBsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZUX1NMSUNFICYmCisgICAg ICAgICAgKHgwICUgKDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95KSkgPT0gMCkgfHwK KyAgICAgICAgICghZmMtPnBzLnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc190aWxlc19l bmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICBsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9M RUZUX1RJTEUgJiYKKyAgICAgICAgICAoeDAgJSAoMSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9z aXplX3kpKSA9PSAwKSkpCisgICAgICAgIGJvdW5kYXJ5X2xlZnQgPSAwOworCisgICAgaWYgKGJv dW5kYXJ5X2xlZnQpIHsKKyAgICAgICAgaW50IHhwX3B1ID0gKHgwIC0gMSkgPj4gbG9nMl9taW5f cHVfc2l6ZTsKKyAgICAgICAgaW50IHhxX3B1ID0gIHgwICAgICAgPj4gbG9nMl9taW5fcHVfc2l6 ZTsKKyAgICAgICAgaW50IHhwX3R1ID0gKHgwIC0gMSkgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKyAg ICAgICAgaW50IHhxX3R1ID0gIHgwICAgICAgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKworICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpICs9IDIpIHsKKyAgICAgICAgICAgIGludCB5X3B1 ICAgICAgPSAoeTAgKyBpKSA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICAgICAgaW50IHlf dHUgICAgICA9ICh5MCArIGkpID4+IGxvZzJfbWluX3R1X3NpemU7CisgICAgICAgICAgICBNdkZp ZWxkICpsZWZ0ID0gJnRhYl9tdmZbeV9wdSAqIG1pbl9wdV93aWR0aCArIHhwX3B1XTsKKyAgICAg ICAgICAgIE12RmllbGQgKmN1cnIgPSAmdGFiX212Zlt5X3B1ICogbWluX3B1X3dpZHRoICsgeHFf cHVdOworICAgICAgICAgICAgY29uc3QgaW50IGxlZnRfdHUgPSB5X3R1ICogbWluX3R1X3dpZHRo ICsgeHBfdHU7CisgICAgICAgICAgICBjb25zdCBpbnQgY3Vycl90dSA9IHlfdHUgKiBtaW5fdHVf d2lkdGggKyB4cV90dTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgcGNtZiA9IGZjLT50YWIu cGNtZltDSFJPTUFdW2xlZnRfdHVdICYmIGZjLT50YWIucGNtZltDSFJPTUFdW2N1cnJfdHVdOwor CisgICAgICAgICAgICBmb3IgKGludCBjID0gQ0I7IGMgPD0gQ1I7IGMrKykgeworICAgICAgICAg ICAgICAgIHVpbnQ4X3QgY2JmICA9IGZjLT50YWIudHVfY29kZWRfZmxhZ1tjXVtsZWZ0X3R1XSB8 CisgICAgICAgICAgICAgICAgICAgIGZjLT50YWIudHVfY29kZWRfZmxhZ1tjXVtjdXJyX3R1XSB8 CisgICAgICAgICAgICAgICAgICAgIGZjLT50YWIudHVfam9pbnRfY2Jjcl9yZXNpZHVhbF9mbGFn W2xlZnRfdHVdIHwKKyAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi50dV9qb2ludF9jYmNyX3Jl c2lkdWFsX2ZsYWdbY3Vycl90dV07CisgICAgICAgICAgICAgICAgaW50IGJzID0gMDsKKworICAg ICAgICAgICAgICAgIGlmIChwY21mKQorICAgICAgICAgICAgICAgICAgICBicyA9IDA7CisgICAg ICAgICAgICAgICAgZWxzZSBpZiAoY3Vyci0+cHJlZF9mbGFnID09IFBGX0lOVFJBIHx8IGxlZnQt PnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCBjdXJyLT5jaWlwX2ZsYWcgfHwgbGVmdC0+Y2lpcF9m bGFnKQorICAgICAgICAgICAgICAgICAgICBicyA9IDI7CisgICAgICAgICAgICAgICAgZWxzZSBp ZiAoY2JmKQorICAgICAgICAgICAgICAgICAgICBicyA9IDE7CisgICAgICAgICAgICAgICAgVEFC X0JTKGZjLT50YWIudmVydGljYWxfYnNbY10sIHgwLCAoeTAgKyBpKSkgPSBiczsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgdnZjX2RlYmxvY2tfYnNf Y2hyb21hX2hvcml6b250YWwoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBp bnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQor eworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgTXZGaWVsZCAq dGFiX212ZiA9IGZjLT50YWIubXZmOworICAgIGNvbnN0IGludCBsb2cyX21pbl9wdV9zaXplID0g TUlOX1BVX0xPRzI7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3R1X3NpemUgPSBNSU5fUFVfTE9H MjsKKyAgICBjb25zdCBpbnQgbWluX3B1X3dpZHRoID0gZmMtPnBzLnBwcy0+bWluX3B1X3dpZHRo OworICAgIGNvbnN0IGludCBtaW5fdHVfd2lkdGggPSBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGg7 CisgICAgaW50IGJvdW5kYXJ5X3VwcGVyOworICAgIGludCBpOworCisgICAgYm91bmRhcnlfdXBw ZXIgPSB5MCA+IDAgJiYgISh5MCAmICgoQ0hST01BX0dSSUQgPDwgZmMtPnBzLnNwcy0+dnNoaWZ0 WzFdKSAtIDEpKTsKKyAgICBpZiAoYm91bmRhcnlfdXBwZXIgJiYKKyAgICAgICAgKCghZmMtPnBz LnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnICYmCisg ICAgICAgICAgICBsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9TTElDRSAmJgor ICAgICAgICAgICAgKHkwICUgKDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95KSkgPT0g MCkgfHwKKyAgICAgICAgICAgICghZmMtPnBzLnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9z c190aWxlc19lbmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICAgICAgICBsYy0+Ym91bmRhcnlfZmxh Z3MgJiBCT1VOREFSWV9VUFBFUl9USUxFICYmCisgICAgICAgICAgICAgICAgKHkwICUgKDEgPDwg ZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95KSkgPT0gMCkpKQorICAgICAgICBib3VuZGFyeV91 cHBlciA9IDA7CisKKyAgICBpZiAoYm91bmRhcnlfdXBwZXIpIHsKKyAgICAgICAgaW50IHlwX3B1 ID0gKHkwIC0gMSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgaW50IHlxX3B1ID0geTAg Pj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgaW50IHlwX3R1ID0gKHkwIC0gMSkgPj4gbG9n Ml9taW5fdHVfc2l6ZTsKKyAgICAgICAgaW50IHlxX3R1ID0geTAgPj4gbG9nMl9taW5fdHVfc2l6 ZTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGg7IGkgKz0gMikgeworICAgICAgICAg ICAgaW50IHhfcHUgPSAoeDAgKyBpKSA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICAgICAg aW50IHhfdHUgPSAoeDAgKyBpKSA+PiBsb2cyX21pbl90dV9zaXplOworICAgICAgICAgICAgTXZG aWVsZCAqdG9wID0gJnRhYl9tdmZbeXBfcHUgKiBtaW5fcHVfd2lkdGggKyB4X3B1XTsKKyAgICAg ICAgICAgIE12RmllbGQgKmN1cnIgPSAmdGFiX212Zlt5cV9wdSAqIG1pbl9wdV93aWR0aCArIHhf cHVdOworICAgICAgICAgICAgY29uc3QgaW50IHRvcF90dSA9IHlwX3R1ICogbWluX3R1X3dpZHRo ICsgeF90dTsKKyAgICAgICAgICAgIGNvbnN0IGludCBjdXJyX3R1ID0geXFfdHUgKiBtaW5fdHVf d2lkdGggKyB4X3R1OworICAgICAgICAgICAgY29uc3QgdWludDhfdCBwY21mID0gZmMtPnRhYi5w Y21mW0NIUk9NQV1bdG9wX3R1XSAmJiBmYy0+dGFiLnBjbWZbQ0hST01BXVtjdXJyX3R1XTsKKwor ICAgICAgICAgICAgZm9yIChpbnQgYyA9IENCOyBjIDw9IENSOyBjKyspIHsKKyAgICAgICAgICAg ICAgICB1aW50OF90IGNiZiA9IGZjLT50YWIudHVfY29kZWRfZmxhZ1tjXVt0b3BfdHVdIHwKKyAg ICAgICAgICAgICAgICAgICAgZmMtPnRhYi50dV9jb2RlZF9mbGFnW2NdW2N1cnJfdHVdIHwKKyAg ICAgICAgICAgICAgICAgICAgZmMtPnRhYi50dV9qb2ludF9jYmNyX3Jlc2lkdWFsX2ZsYWdbdG9w X3R1XSB8CisgICAgICAgICAgICAgICAgICAgIGZjLT50YWIudHVfam9pbnRfY2Jjcl9yZXNpZHVh bF9mbGFnW2N1cnJfdHVdOworICAgICAgICAgICAgICAgIGludCBicyA9IDA7CisKKyAgICAgICAg ICAgICAgICBpZiAocGNtZikKKyAgICAgICAgICAgICAgICAgICAgYnMgPSAwOworICAgICAgICAg ICAgICAgIGVsc2UgaWYgKGN1cnItPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCB0b3AtPnByZWRf ZmxhZyA9PSBQRl9JTlRSQSB8fCBjdXJyLT5jaWlwX2ZsYWcgfHwgdG9wLT5jaWlwX2ZsYWcpCisg ICAgICAgICAgICAgICAgICAgIGJzID0gMjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjYmYp CisgICAgICAgICAgICAgICAgICAgIGJzID0gMTsKKyAgICAgICAgICAgICAgICBUQUJfQlMoZmMt PnRhYi5ob3Jpem9udGFsX2JzW2NdLCB4MCArIGksIHkwKSA9IGJzOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorfQorCit0eXBlZGVmIHZvaWQgKCpkZWJsb2NrX2JzX2ZuKShjb25z dCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwKKyAgICBj b25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQpOworCitzdGF0aWMgdm9pZCB2dmNfZGVi bG9ja19icyhjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgeDAsIGNvbnN0IGlu dCB5MCwgY29uc3QgaW50IHZlcnRpY2FsKQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAq ZmMgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICA9IGZjLT5wcy5zcHM7CisgICAg Y29uc3QgVlZDUFBTICpwcHMgICA9IGZjLT5wcy5wcHM7CisgICAgY29uc3QgaW50IGN0Yl9zaXpl ICA9IHNwcy0+Y3RiX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeF9lbmQgICAgID0gRkZNSU4oeDAg KyBjdGJfc2l6ZSwgcHBzLT53aWR0aCkgPj4gTUlOX1RVX0xPRzI7CisgICAgY29uc3QgaW50IHlf ZW5kICAgICA9IEZGTUlOKHkwICsgY3RiX3NpemUsIHBwcy0+aGVpZ2h0KSA+PiBNSU5fVFVfTE9H MjsKKyAgICBkZWJsb2NrX2JzX2ZuIGRlYmxvY2tfYnNbMl1bMl0gPSB7CisgICAgICAgIHsgdnZj X2RlYmxvY2tfYnNfbHVtYV9ob3Jpem9udGFsLCB2dmNfZGVibG9ja19ic19jaHJvbWFfaG9yaXpv bnRhbCB9LAorICAgICAgICB7IHZ2Y19kZWJsb2NrX2JzX2x1bWFfdmVydGljYWwsICAgdnZjX2Rl YmxvY2tfYnNfY2hyb21hX3ZlcnRpY2FsICAgfQorICAgIH07CisKKyAgICBmb3IgKGludCBpc19j aHJvbWEgPSAwOyBpc19jaHJvbWEgPD0gMTsgaXNfY2hyb21hKyspIHsKKyAgICAgICAgY29uc3Qg aW50IGhzID0gc3BzLT5oc2hpZnRbaXNfY2hyb21hXTsKKyAgICAgICAgY29uc3QgaW50IHZzID0g c3BzLT52c2hpZnRbaXNfY2hyb21hXTsKKyAgICAgICAgZm9yIChpbnQgeSA9IHkwID4+IE1JTl9U VV9MT0cyOyB5IDwgeV9lbmQ7IHkrKykgeworICAgICAgICAgICAgZm9yIChpbnQgeCA9IHgwID4+ IE1JTl9UVV9MT0cyOyB4IDwgeF9lbmQ7IHgrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IGlu dCBvZmYgPSB5ICogZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoICsgeDsKKyAgICAgICAgICAgICAg ICBpZiAoKGZjLT50YWIudGJfcG9zX3gwW2lzX2Nocm9tYV1bb2ZmXSA+PiBNSU5fVFVfTE9HMikg PT0geCAmJiAoZmMtPnRhYi50Yl9wb3NfeTBbaXNfY2hyb21hXVtvZmZdID4+IE1JTl9UVV9MT0cy KSA9PSB5KSB7CisgICAgICAgICAgICAgICAgICAgIGRlYmxvY2tfYnNbdmVydGljYWxdW2lzX2No cm9tYV0obGMsIHggPDwgTUlOX1RVX0xPRzIsIHkgPDwgTUlOX1RVX0xPRzIsCisgICAgICAgICAg ICAgICAgICAgICAgICBmYy0+dGFiLnRiX3dpZHRoW2lzX2Nocm9tYV1bb2ZmXSA8PCBocywgZmMt PnRhYi50Yl9oZWlnaHRbaXNfY2hyb21hXVtvZmZdIDw8IHZzKTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vcGFydCBvZiA4LjguMy4z IERlcml2YXRpb24gcHJvY2VzcyBvZiB0cmFuc2Zvcm0gYmxvY2sgYm91bmRhcnkKK3N0YXRpYyB2 b2lkIG1heF9maWx0ZXJfbGVuZ3RoX2x1bWEoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgY29u c3QgaW50IHF4LCBjb25zdCBpbnQgcXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGludCB2ZXJ0aWNhbCwgdWludDhfdCAqbWF4X2xlbl9wLCB1aW50OF90ICptYXhf bGVuX3EpCit7CisgICAgY29uc3QgdWludDhfdCAqdGFiX2xlbl9wID0gdmVydGljYWwgPyBmYy0+ dGFiLnZlcnRpY2FsX3AgOiBmYy0+dGFiLmhvcml6b250YWxfcDsKKyAgICBjb25zdCB1aW50OF90 ICp0YWJfbGVuX3EgPSB2ZXJ0aWNhbCA/IGZjLT50YWIudmVydGljYWxfcSA6IGZjLT50YWIuaG9y aXpvbnRhbF9xOworICAgICptYXhfbGVuX3AgPSBUQUJfTUFYX0xFTih0YWJfbGVuX3AsIHF4LCBx eSk7CisgICAgKm1heF9sZW5fcSA9IFRBQl9NQVhfTEVOKHRhYl9sZW5fcSwgcXgsIHF5KTsKK30K KworLy9wYXJ0IG9mIDguOC4zLjMgRGVyaXZhdGlvbiBwcm9jZXNzIG9mIHRyYW5zZm9ybSBibG9j ayBib3VuZGFyeQorc3RhdGljIHZvaWQgbWF4X2ZpbHRlcl9sZW5ndGhfY2hyb21hKGNvbnN0IFZW Q0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGludCBxeCwgY29uc3QgaW50IHF5LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB2ZXJ0aWNhbCwgY29uc3QgaW50 IGhvcml6b250YWxfY3R1X2VkZ2UsIGNvbnN0IGludCBicywgdWludDhfdCAqbWF4X2xlbl9wLCB1 aW50OF90ICptYXhfbGVuX3EpCit7CisgICAgY29uc3QgaW50IHB4ID0gIHZlcnRpY2FsID8gcXgg LSAxIDogcXg7CisgICAgY29uc3QgaW50IHB5ID0gIXZlcnRpY2FsID8gcXkgLSAxIDogcXk7Cisg ICAgY29uc3QgdWludDhfdCAqdGJfc2l6ZSA9IHZlcnRpY2FsID8gZmMtPnRhYi50Yl93aWR0aFtD SFJPTUFdIDogZmMtPnRhYi50Yl9oZWlnaHRbQ0hST01BXTsKKworICAgIGNvbnN0IGludCBzaXpl X3AgPSB0Yl9zaXplWyhweSA+PiBNSU5fVFVfTE9HMikgKiBmYy0+cHMucHBzLT5taW5fdHVfd2lk dGggKyAocHggPj4gTUlOX1RVX0xPRzIpXTsKKyAgICBjb25zdCBpbnQgc2l6ZV9xID0gdGJfc2l6 ZVsocXkgPj4gTUlOX1RVX0xPRzIpICogZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoICsgKHF4ID4+ IE1JTl9UVV9MT0cyKV07CisgICAgaWYgKHNpemVfcCA+PSA4ICYmIHNpemVfcSA+PSA4KSB7Cisg ICAgICAgICptYXhfbGVuX3AgPSAqbWF4X2xlbl9xID0gMzsKKyAgICAgICAgaWYgKGhvcml6b250 YWxfY3R1X2VkZ2UpCisgICAgICAgICAgICAqbWF4X2xlbl9wID0gMTsKKyAgICB9IGVsc2Ugewor ICAgICAgICAvL3BhcnQgb2YgOC44LjMuNi40IERlY2lzaW9uIHByb2Nlc3MgZm9yIGNocm9tYSBi bG9jayBlZGdlcworICAgICAgICAqbWF4X2xlbl9wID0gKm1heF9sZW5fcSA9IChicyA9PSAyKTsK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG1heF9maWx0ZXJfbGVuZ3RoKGNvbnN0IFZWQ0ZyYW1l Q29udGV4dCAqZmMsIGNvbnN0IGludCBxeCwgY29uc3QgaW50IHF5LAorICAgIGNvbnN0IGludCBj X2lkeCwgY29uc3QgaW50IHZlcnRpY2FsLCBjb25zdCBpbnQgaG9yaXpvbnRhbF9jdHVfZWRnZSwg Y29uc3QgaW50IGJzLCB1aW50OF90ICptYXhfbGVuX3AsIHVpbnQ4X3QgKm1heF9sZW5fcSkKK3sK KyAgICBpZiAoIWNfaWR4KQorICAgICAgICBtYXhfZmlsdGVyX2xlbmd0aF9sdW1hKGZjLCBxeCwg cXksIHZlcnRpY2FsLCBtYXhfbGVuX3AsIG1heF9sZW5fcSk7CisgICAgZWxzZQorICAgICAgICBt YXhfZmlsdGVyX2xlbmd0aF9jaHJvbWEoZmMsIHF4LCBxeSwgdmVydGljYWwsIGhvcml6b250YWxf Y3R1X2VkZ2UsIGJzLCBtYXhfbGVuX3AsIG1heF9sZW5fcSk7Cit9CisKKyNkZWZpbmUgVENfQ0FM QyhxcCwgYnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICB0Y3RhYmxlW2F2X2NsaXAoKHFwKSArIERFRkFVTFRfSU5UUkFfVENfT0ZGU0VUICog KChicykgLSAxKSArICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgKHRjX29mZnNldCAmIC0y KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg ICAgMCwgTUFYX1FQICsgREVGQVVMVF9JTlRSQV9UQ19PRkZTRVQpXQorCisvLyBwYXJ0IG9mIDgu OC4zLjYuMiBEZWNpc2lvbiBwcm9jZXNzIGZvciBsdW1hIGJsb2NrIGVkZ2VzCitzdGF0aWMgaW50 IGdldF9xcF95KGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IHVpbnQ4X3QgKnNyYywg Y29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBjb25zdCBpbnQgdmVydGljYWwpCit7CisgICAgY29u c3QgVlZDU1BTICpzcHMgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IHFwICAgICAgICA9 IChmZl92dmNfZ2V0X3FQeShmYywgeCAtIHZlcnRpY2FsLCB5IC0gIXZlcnRpY2FsKSArIGZmX3Z2 Y19nZXRfcVB5KGZjLCB4LCB5KSArIDEpID4+IDE7CisgICAgaW50IHFwX29mZnNldCAgICAgICA9 IDA7CisgICAgaW50IGxldmVsOworCisgICAgaWYgKCFzcHMtPnItPnNwc19sYWRmX2VuYWJsZWRf ZmxhZykKKyAgICAgICAgcmV0dXJuIHFwOworCisgICAgbGV2ZWwgPSBmYy0+dnZjZHNwLmxmLmxh ZGZfbGV2ZWxbdmVydGljYWxdKHNyYywgZmMtPmZyYW1lLT5saW5lc2l6ZVtMVU1BXSk7CisgICAg cXBfb2Zmc2V0ID0gc3BzLT5yLT5zcHNfbGFkZl9sb3dlc3RfaW50ZXJ2YWxfcXBfb2Zmc2V0Owor ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3BzLT5udW1fbGFkZl9pbnRlcnZhbHMgLSAxICYmIGxl dmVsID4gc3BzLT5sYWRmX2ludGVydmFsX2xvd2VyX2JvdW5kW2kgKyAxXTsgaSsrKQorICAgICAg ICBxcF9vZmZzZXQgPSBzcHMtPnItPnNwc19sYWRmX3FwX29mZnNldFtpXTsKKworICAgIHJldHVy biBxcCArIHFwX29mZnNldDsKK30KKworLy8gcGFydCBvZiA4LjguMy42LjIgRGVjaXNpb24gcHJv Y2VzcyBmb3IgbHVtYSBibG9jayBlZGdlcworc3RhdGljIGludCBnZXRfcXBfYyhjb25zdCBWVkNG cmFtZUNvbnRleHQgKmZjLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGludCBjX2lk eCwgY29uc3QgaW50IHZlcnRpY2FsKQoreworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+ cHMuc3BzOworICAgIHJldHVybiAoZ2V0X3FQYyhmYywgeCAtIHZlcnRpY2FsLCB5IC0gIXZlcnRp Y2FsLCBjX2lkeCkgKyBnZXRfcVBjKGZjLCB4LCB5LCBjX2lkeCkgLSAyICogc3BzLT5xcF9iZF9v ZmZzZXQgKyAxKSA+PiAxOworfQorCitzdGF0aWMgaW50IGdldF9xcChjb25zdCBWVkNGcmFtZUNv bnRleHQgKmZjLCBjb25zdCB1aW50OF90ICpzcmMsIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwg Y29uc3QgaW50IGNfaWR4LCBjb25zdCBpbnQgdmVydGljYWwpCit7CisgICAgaWYgKCFjX2lkeCkK KyAgICAgICAgcmV0dXJuIGdldF9xcF95KGZjLCBzcmMsIHgsIHksIHZlcnRpY2FsKTsKKyAgICBy ZXR1cm4gZ2V0X3FwX2MoZmMsIHgsIHksIGNfaWR4LCB2ZXJ0aWNhbCk7Cit9CisKK3ZvaWQgZmZf dnZjX2RlYmxvY2tfdmVydGljYWwoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBp bnQgeTApCit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBW VkNTUFMgKnNwcyAgID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBpbnQgY19lbmQgICAgID0gc3Bz LT5yLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPyBWVkNfTUFYX1NBTVBMRV9BUlJBWVMgOiAxOwor ICAgIHVpbnQ4X3QgKnNyYzsKKyAgICBpbnQgeCwgeSwgcXA7CisKKyAgICAvL25vdCB1c2UgdGhp cyB5ZXQsIG1heSBuZWVkZWQgYnkgcGx0LgorICAgIGNvbnN0IHVpbnQ4X3Qgbm9fcFs0XSA9IHsg MCB9OworICAgIGNvbnN0IHVpbnQ4X3Qgbm9fcVs0XSA9IHsgMCB9IDsKKworICAgIGludCBjdGJf bG9nMl9zaXplX3kgPSBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgaW50IHhfZW5k LCB5X2VuZDsKKyAgICBpbnQgY3RiX3NpemUgPSAxIDw8IGN0Yl9sb2cyX3NpemVfeTsKKyAgICBp bnQgY3RiID0gKHgwID4+IGN0Yl9sb2cyX3NpemVfeSkgKworICAgICAgICAoeTAgPj4gY3RiX2xv ZzJfc2l6ZV95KSAqIGZjLT5wcy5wcHMtPmN0Yl93aWR0aDsKKyAgICBEQlBhcmFtcyAgKnBhcmFt cyA9IGZjLT50YWIuZGVibG9jayArIGN0YjsKKworICAgIHZ2Y19kZWJsb2NrX2JzKGxjLCB4MCwg eTAsIDEpOworCisgICAgeF9lbmQgPSB4MCArIGN0Yl9zaXplOworICAgIGlmICh4X2VuZCA+IGZj LT5wcy5zcHMtPndpZHRoKQorICAgICAgICB4X2VuZCA9IGZjLT5wcy5zcHMtPndpZHRoOworICAg IHlfZW5kID0geTAgKyBjdGJfc2l6ZTsKKyAgICBpZiAoeV9lbmQgPiBmYy0+cHMuc3BzLT5oZWln aHQpCisgICAgICAgIHlfZW5kID0gZmMtPnBzLnNwcy0+aGVpZ2h0OworCisgICAgZm9yIChpbnQg Y19pZHggPSAwOyBjX2lkeCA8IGNfZW5kOyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0IGludCBo cyAgICAgICAgICAgID0gc3BzLT5oc2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBpbnQgdnMg ICAgICAgICAgICA9IHNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IGdyaWQg ICAgICAgICAgPSBjX2lkeCA/IChDSFJPTUFfR1JJRCA8PCBocykgOiBMVU1BX0dSSUQ7CisgICAg ICAgIGNvbnN0IGludCB0Y19vZmZzZXQgICAgID0gcGFyYW1zLT50Y19vZmZzZXRbY19pZHhdOwor ICAgICAgICBjb25zdCBpbnQgYmV0YV9vZmZzZXQgICA9IHBhcmFtcy0+YmV0YV9vZmZzZXRbY19p ZHhdOworCisgICAgICAgIGZvciAoeSA9IHkwOyB5IDwgeV9lbmQ7IHkgKz0gKERFQkxPQ0tfU1RF UCA8PCB2cykpIHsKKyAgICAgICAgICAgIGZvciAoeCA9IHgwID8geDAgOiBncmlkOyB4IDwgeF9l bmQ7IHggKz0gZ3JpZCkgeworICAgICAgICAgICAgICAgIGludDMyX3QgYnNbNF0sIGJldGFbNF0s IHRjWzRdLCBhbGxfemVyb19icyA9IDE7CisgICAgICAgICAgICAgICAgdWludDhfdCBtYXhfbGVu X3BbNF0sIG1heF9sZW5fcVs0XTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgREVCTE9DS19TVEVQID4+ICgyIC0gdnMpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg Y29uc3QgaW50IGR5ID0gaSA8PCAyOworICAgICAgICAgICAgICAgICAgICBic1tpXSA9ICh5ICsg ZHkgPCB5X2VuZCkgPyBUQUJfQlMoZmMtPnRhYi52ZXJ0aWNhbF9ic1tjX2lkeF0sIHgsIHkgKyBk eSkgOiAwOworICAgICAgICAgICAgICAgICAgICBpZiAoYnNbaV0pIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHNyYyA9ICZmYy0+ZnJhbWUtPmRhdGFbY19pZHhdWygoeSArIGR5KSA+PiB2cykg KiBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSArICgoeCA+PiBocykgPDwgZmMtPnBzLnNwcy0+ cGl4ZWxfc2hpZnQpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHFwID0gZ2V0X3FwKGZjLCBz cmMsIHgsIHkgKyBkeSwgY19pZHgsIDEpOworCisgICAgICAgICAgICAgICAgICAgICAgICBiZXRh W2ldID0gYmV0YXRhYmxlW2F2X2NsaXAocXAgKyBiZXRhX29mZnNldCwgMCwgTUFYX1FQKV07CisK KyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9maWx0ZXJfbGVuZ3RoKGZjLCB4LCB5ICsgZHks IGNfaWR4LCAxLCAwLCBic1tpXSwgJm1heF9sZW5fcFtpXSwgJm1heF9sZW5fcVtpXSk7CisgICAg ICAgICAgICAgICAgICAgICAgICBhbGxfemVyb19icyA9IDA7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgdGNbaV0gPSBic1tpXSA/IFRDX0NBTEMocXAsIGJzW2ld KSA6IDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFhbGxfemVy b19icykgeworICAgICAgICAgICAgICAgICAgICBzcmMgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4 XVsoeSA+PiB2cykgKiBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSArICgoeCA+PiBocykgPDwg ZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjX2lk eCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmMtPnZ2Y2RzcC5sZi5maWx0ZXJfbHVtYVsx XShzcmMsIGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJldGEsIHRjLCBub19wLCBub19xLCBtYXhfbGVuX3AsIG1heF9sZW5fcSwgMCk7Cisg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmYy0+ dnZjZHNwLmxmLmZpbHRlcl9jaHJvbWFbMV0oc3JjLCBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4 XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXRhLCB0Yywgbm9fcCwgbm9fcSwgbWF4 X2xlbl9wLCBtYXhfbGVuX3EsIHZzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBmZl92 dmNfZGVibG9ja19ob3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwg aW50IHkwKQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgY29uc3Qg VlZDU1BTICpzcHMgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IGNfZW5kICAgICA9IGZj LT5wcy5zcHMtPnItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA/IFZWQ19NQVhfU0FNUExFX0FSUkFZ UyA6IDE7CisgICAgdWludDhfdCogc3JjOworICAgIGludCB4LCB5LCBxcDsKKworICAgIC8vbm90 IHVzZSB0aGlzIHlldCwgbWF5IG5lZWRlZCBieSBwbHQuCisgICAgY29uc3QgdWludDhfdCBub19w WzRdID0geyAwIH07CisgICAgY29uc3QgdWludDhfdCBub19xWzRdID0geyAwIH0gOworCisgICAg aW50IGN0Yl9sb2cyX3NpemVfeSA9IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBp bnQgeF9lbmQsIHlfZW5kOworICAgIGludCBjdGJfc2l6ZSA9IDEgPDwgY3RiX2xvZzJfc2l6ZV95 OworICAgIGludCBjdGIgPSAoeDAgPj4gY3RiX2xvZzJfc2l6ZV95KSArCisgICAgICAgICh5MCA+ PiBjdGJfbG9nMl9zaXplX3kpICogZmMtPnBzLnBwcy0+Y3RiX3dpZHRoOworCisgICAgdnZjX2Rl YmxvY2tfYnMobGMsIHgwLCB5MCwgMCk7CisKKyAgICB4X2VuZCA9IHgwICsgY3RiX3NpemU7Cisg ICAgaWYgKHhfZW5kID4gZmMtPnBzLnNwcy0+d2lkdGgpCisgICAgICAgIHhfZW5kID0gZmMtPnBz LnNwcy0+d2lkdGg7CisgICAgeV9lbmQgPSB5MCArIGN0Yl9zaXplOworICAgIGlmICh5X2VuZCA+ IGZjLT5wcy5zcHMtPmhlaWdodCkKKyAgICAgICAgeV9lbmQgPSBmYy0+cHMuc3BzLT5oZWlnaHQ7 CisKKyAgICBmb3IgKGludCBjX2lkeCA9IDA7IGNfaWR4IDwgY19lbmQ7IGNfaWR4KyspIHsKKyAg ICAgICAgY29uc3QgaW50IGhzICAgICAgICAgICAgPSBzcHMtPmhzaGlmdFtjX2lkeF07CisgICAg ICAgIGNvbnN0IGludCB2cyAgICAgICAgICAgID0gc3BzLT52c2hpZnRbY19pZHhdOworICAgICAg ICBjb25zdCBpbnQgZ3JpZCAgICAgICAgICA9IGNfaWR4ID8gKENIUk9NQV9HUklEIDw8IHZzKSA6 IExVTUFfR1JJRDsKKworICAgICAgICBmb3IgKHkgPSB5MDsgeSA8IHlfZW5kOyB5ICs9IGdyaWQp IHsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaG9yaXpvbnRhbF9jdHVfZWRnZSA9ICEoeSAl IGZjLT5wcy5zcHMtPmN0Yl9zaXplX3kpOworICAgICAgICAgICAgaWYgKCF5KQorICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBmb3IgKHggPSB4MCA/IHgwOiAwOyB4IDwg eF9lbmQ7IHggKz0gKERFQkxPQ0tfU1RFUCA8PCBocykpIHsKKyAgICAgICAgICAgICAgICBpbnQz Ml90IGJzWzRdLCBiZXRhWzRdLCB0Y1s0XSwgYWxsX3plcm9fYnMgPSAxOworICAgICAgICAgICAg ICAgIHVpbnQ4X3QgbWF4X2xlbl9wWzRdLCBtYXhfbGVuX3FbNF07CisKKyAgICAgICAgICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IERFQkxPQ0tfU1RFUCA+PiAoMiAtIGhzKTsgaSsrKSB7Cisg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBkeCA9IGkgPDwgMjsKKyAgICAgICAgICAgICAg ICAgICAgY29uc3QgREJQYXJhbXMgKnBhcmFtcyA9IGZjLT50YWIuZGVibG9jayArIGN0YiAtICh4 ICsgZHggPCB4MCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBiZXRhX29mZnNldCA9 IHBhcmFtcy0+YmV0YV9vZmZzZXRbY19pZHhdOworICAgICAgICAgICAgICAgICAgICBjb25zdCBp bnQgdGNfb2Zmc2V0ID0gcGFyYW1zLT50Y19vZmZzZXRbY19pZHhdOworCisgICAgICAgICAgICAg ICAgICAgIGJzW2ldID0gKHggKyBkeCA8IHhfZW5kKSA/IFRBQl9CUyhmYy0+dGFiLmhvcml6b250 YWxfYnNbY19pZHhdLCB4ICsgZHgsIHkpIDogMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJz W2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSAmZmMtPmZyYW1lLT5kYXRhW2Nf aWR4XVsoeSA+PiB2cykgKiBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSArICgoKHggKyBkeCk+ PiBocykgPDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHFwID0gZ2V0X3FwKGZjLCBzcmMsIHggKyBkeCwgeSwgY19pZHgsIDApOworCisgICAgICAg ICAgICAgICAgICAgICAgICBiZXRhW2ldID0gYmV0YXRhYmxlW2F2X2NsaXAocXAgKyBiZXRhX29m ZnNldCwgMCwgTUFYX1FQKV07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9maWx0ZXJf bGVuZ3RoKGZjLCB4ICsgZHgsIHksIGNfaWR4LCAwLCBob3Jpem9udGFsX2N0dV9lZGdlLCBic1tp XSwgJm1heF9sZW5fcFtpXSwgJm1heF9sZW5fcVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAg ICBhbGxfemVyb19icyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgdGNbaV0gPSBic1tpXSA/IFRDX0NBTEMocXAsIGJzW2ldKSA6IDA7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghYWxsX3plcm9fYnMpIHsKKyAgICAgICAgICAg ICAgICAgICAgc3JjID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1bKHkgPj4gdnMpICogZmMtPmZy YW1lLT5saW5lc2l6ZVtjX2lkeF0gKyAoKHggPj4gaHMpIDw8IGZjLT5wcy5zcHMtPnBpeGVsX3No aWZ0KV07CisgICAgICAgICAgICAgICAgICAgIGlmICghY19pZHgpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGZjLT52dmNkc3AubGYuZmlsdGVyX2x1bWFbMF0oc3JjLCBmYy0+ZnJhbWUtPmxp bmVzaXplW2NfaWR4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXRhLCB0Yywgbm9f cCwgbm9fcSwgbWF4X2xlbl9wLCBtYXhfbGVuX3EsIGhvcml6b250YWxfY3R1X2VkZ2UpOworICAg ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZmMtPnZ2 Y2RzcC5sZi5maWx0ZXJfY2hyb21hWzBdKHNyYywgZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSwgdGMsIG5vX3AsIG5vX3EsIG1heF9s ZW5fcCwgbWF4X2xlbl9xLCBocyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IGFsZl9jb3B5X2JvcmRlcih1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICBj b25zdCBpbnQgcGl4ZWxfc2hpZnQsIGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3Qg cHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlKQoreworICAg IHdpZHRoIDw8PSBwaXhlbF9zaGlmdDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsg aSsrKSB7CisgICAgICAgIG1lbWNweShkc3QsIHNyYywgd2lkdGgpOworICAgICAgICBkc3QgKz0g ZHN0X3N0cmlkZTsKKyAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7CisgICAgfQorfQorCitzdGF0 aWMgdm9pZCBhbGZfZXh0ZW5kX3ZlcnQodWludDhfdCAqX2RzdCwgY29uc3QgdWludDhfdCAqX3Ny YywKKyAgICBjb25zdCBpbnQgcGl4ZWxfc2hpZnQsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50 IGhlaWdodCwgcHRyZGlmZl90IHN0cmlkZSkKK3sKKyAgICBpZiAocGl4ZWxfc2hpZnQgPT0gMCkg eworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgICAgICAg ICBtZW1zZXQoX2RzdCwgKl9zcmMsIHdpZHRoKTsKKyAgICAgICAgICAgIF9zcmMgKz0gc3RyaWRl OworICAgICAgICAgICAgX2RzdCArPSBzdHJpZGU7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor ICAgICAgICBjb25zdCB1aW50MTZfdCAqc3JjID0gKGNvbnN0IHVpbnQxNl90ICopX3NyYzsKKyAg ICAgICAgdWludDE2X3QgKmRzdCA9ICh1aW50MTZfdCAqKV9kc3Q7CisgICAgICAgIHN0cmlkZSA+ Pj0gcGl4ZWxfc2hpZnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkr KykgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3aWR0aDsgaisrKQorICAgICAg ICAgICAgICAgIGRzdFtqXSA9ICpzcmM7CisgICAgICAgICAgICBzcmMgKz0gc3RyaWRlOworICAg ICAgICAgICAgZHN0ICs9IHN0cmlkZTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZv aWQgYWxmX2V4dGVuZF9ob3J6KHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjLAorICAg IGNvbnN0IGludCBwaXhlbF9zaGlmdCwgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25z dCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIHdpZHRoIDw8PSBwaXhlbF9zaGlmdDsKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgICAgIG1lbWNweShkc3QsIHNy Yywgd2lkdGgpOworICAgICAgICBkc3QgKz0gc3RyaWRlOworICAgIH0KK30KKworc3RhdGljIHZv aWQgYWxmX2NvcHlfY3RiX3RvX2h2KFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IHVpbnQ4X3Qg KnNyYywgY29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUsCisgICAgY29uc3QgaW50IHgsIGNvbnN0 IGludCB5LCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludCB4X2N0 YiwgY29uc3QgaW50IHlfY3RiLCBjb25zdCBpbnQgY19pZHgpCit7CisgICAgY29uc3QgaW50IHBz ICAgICAgICAgICAgPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKyAgICBjb25zdCBpbnQgdyAg ICAgICAgICAgICA9IGZjLT5wcy5zcHMtPndpZHRoID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lk eF07CisgICAgY29uc3QgaW50IGggICAgICAgICAgICAgPSBmYy0+cHMuc3BzLT5oZWlnaHQgPj4g ZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgYm9yZGVyX3BpeGVscyA9 IChjX2lkeCA9PSAwKSA/IEFMRl9CT1JERVJfTFVNQSA6IEFMRl9CT1JERVJfQ0hST01BOworICAg IGNvbnN0IGludCBvZmZzZXRfaFtdICAgID0geyAwLCBoZWlnaHQgLSBib3JkZXJfcGl4ZWxzIH07 CisgICAgY29uc3QgaW50IG9mZnNldF92W10gICAgPSB7IDAsIHdpZHRoICAtIGJvcmRlcl9waXhl bHMgfTsKKworICAgIC8qIGNvcHkgaG9yaXpvbnRhbCBlZGdlcyAqLworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMob2Zmc2V0X2gpOyBpKyspIHsKKyAgICAgICAgYWxmX2Nv cHlfYm9yZGVyKGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XVtpXSArICgoYm9yZGVy X3BpeGVscyAqIHlfY3RiICogdyArIHgpPDwgcHMpLAorICAgICAgICAgICAgc3JjICsgb2Zmc2V0 X2hbaV0gKiBzcmNfc3RyaWRlLCBwcywgd2lkdGgsIGJvcmRlcl9waXhlbHMsIHcgPDwgcHMsIHNy Y19zdHJpZGUpOworICAgIH0KKyAgICAvKiBjb3B5IHZlcnRpY2FsIGVkZ2VzICovCisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhvZmZzZXRfdik7IGkrKykgeworICAgICAg ICBhbGZfY29weV9ib3JkZXIoZmMtPnRhYi5hbGZfcGl4ZWxfYnVmZmVyX3ZbY19pZHhdW2ldICsg KChoICogeF9jdGIgKyB5KSAqIChib3JkZXJfcGl4ZWxzIDw8IHBzKSksCisgICAgICAgICAgICBz cmMgKyAob2Zmc2V0X3ZbaV0gPDwgcHMpLCBwcywgYm9yZGVyX3BpeGVscywgaGVpZ2h0LCBib3Jk ZXJfcGl4ZWxzIDw8IHBzLCBzcmNfc3RyaWRlKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFs Zl9maWxsX2JvcmRlcl9oKHVpbnQ4X3QgKmRzdCwgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUs IGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUsCisgICAgY29u c3QgdWludDhfdCAqYm9yZGVyLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBib3JkZXJfcGl4 ZWxzLCBjb25zdCBpbnQgcHMsIGNvbnN0IGludCBlZGdlKQoreworICAgIGlmIChlZGdlKQorICAg ICAgICBhbGZfZXh0ZW5kX2hvcnooZHN0LCBib3JkZXIsIHBzLCB3aWR0aCwgYm9yZGVyX3BpeGVs cywgZHN0X3N0cmlkZSk7CisgICAgZWxzZQorICAgICAgICBhbGZfY29weV9ib3JkZXIoZHN0LCBz cmMsIHBzLCB3aWR0aCwgYm9yZGVyX3BpeGVscywgZHN0X3N0cmlkZSwgc3JjX3N0cmlkZSk7Cit9 CisKK3N0YXRpYyB2b2lkIGFsZl9maWxsX2JvcmRlcl92KHVpbnQ4X3QgKmRzdCwgY29uc3QgcHRy ZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICBjb25zdCB1aW50OF90 ICpib3JkZXIsIGNvbnN0IGludCBib3JkZXJfcGl4ZWxzLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25z dCBpbnQgcGl4ZWxfc2hpZnQsIGNvbnN0IGludCAqZWRnZXMsIGNvbnN0IGludCBlZGdlKQorewor ICAgIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlID0gKGJvcmRlcl9waXhlbHMgPDwgcGl4ZWxf c2hpZnQpOworCisgICAgaWYgKGVkZ2UpIHsKKyAgICAgICAgYWxmX2V4dGVuZF92ZXJ0KGRzdCwg Ym9yZGVyLCBwaXhlbF9zaGlmdCwgYm9yZGVyX3BpeGVscywgaGVpZ2h0ICsgMiAqIGJvcmRlcl9w aXhlbHMsIGRzdF9zdHJpZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy9sZWZ0 L3JpZ2h0CisgICAgYWxmX2NvcHlfYm9yZGVyKGRzdCArIGRzdF9zdHJpZGUgKiBib3JkZXJfcGl4 ZWxzICogZWRnZXNbVE9QXSwgc3JjICsgc3JjX3N0cmlkZSAqIGJvcmRlcl9waXhlbHMgKiBlZGdl c1tUT1BdLAorICAgICAgICBwaXhlbF9zaGlmdCwgYm9yZGVyX3BpeGVscywgaGVpZ2h0ICsgKCFl ZGdlc1tUT1BdICsgIWVkZ2VzW0JPVFRPTV0pICogYm9yZGVyX3BpeGVscywgZHN0X3N0cmlkZSwg c3JjX3N0cmlkZSk7CisKKyAgICAvL3RvcCBsZWZ0L3JpZ2h0CisgICAgaWYgKGVkZ2VzW1RPUF0p CisgICAgICAgIGFsZl9leHRlbmRfaG9yeihkc3QsIGRzdCArIGRzdF9zdHJpZGUgKiBib3JkZXJf cGl4ZWxzLCBwaXhlbF9zaGlmdCwgYm9yZGVyX3BpeGVscywgYm9yZGVyX3BpeGVscywgZHN0X3N0 cmlkZSk7CisKKyAgICAvL2JvdHRvbSBsZWZ0L3JpZ2h0CisgICAgaWYgKGVkZ2VzW0JPVFRPTV0p IHsKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGUgKiAoYm9yZGVyX3BpeGVscyArIGhlaWdodCk7 CisgICAgICAgIGFsZl9leHRlbmRfaG9yeihkc3QsIGRzdCAtIGRzdF9zdHJpZGUsIHBpeGVsX3No aWZ0LCBib3JkZXJfcGl4ZWxzLCBib3JkZXJfcGl4ZWxzLCBkc3Rfc3RyaWRlKTsKKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkIGFsZl9wcmVwYXJlX2J1ZmZlcihWVkNGcmFtZUNvbnRleHQgKmZjLCB1 aW50OF90ICpfZHN0LCBjb25zdCB1aW50OF90ICpfc3JjLCBjb25zdCBpbnQgeCwgY29uc3QgaW50 IHksCisgICAgY29uc3QgaW50IHhfY3RiLCBjb25zdCBpbnQgeV9jdGIsIGNvbnN0IGludCB3aWR0 aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHB0 cmRpZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IGludCBjX2lkeCwgY29uc3QgaW50ICplZGdl cykKK3sKKyAgICBjb25zdCBpbnQgcHMgPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKyAgICBj b25zdCBpbnQgdyA9IGZjLT5wcy5zcHMtPndpZHRoID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lk eF07CisgICAgY29uc3QgaW50IGggPSBmYy0+cHMuc3BzLT5oZWlnaHQgPj4gZmMtPnBzLnNwcy0+ dnNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgYm9yZGVyX3BpeGVscyA9IGNfaWR4ID09IDAg PyBBTEZfQk9SREVSX0xVTUEgOiBBTEZfQk9SREVSX0NIUk9NQTsKKyAgICB1aW50OF90ICpkc3Qs ICpzcmM7CisKKyAgICBjb3B5X2N0YihfZHN0LCBfc3JjLCB3aWR0aCA8PCBwcywgaGVpZ2h0LCBk c3Rfc3RyaWRlLCBzcmNfc3RyaWRlKTsKKworICAgIC8vdG9wCisgICAgc3JjID0gZmMtPnRhYi5h bGZfcGl4ZWxfYnVmZmVyX2hbY19pZHhdWzFdICsgKCgoYm9yZGVyX3BpeGVscyAqICh5X2N0YiAt IDEpKSAqIHcgKyB4KSA8PCBwcyk7CisgICAgZHN0ID0gX2RzdCAtIGJvcmRlcl9waXhlbHMgKiBk c3Rfc3RyaWRlOworICAgIGFsZl9maWxsX2JvcmRlcl9oKGRzdCwgZHN0X3N0cmlkZSwgc3JjLCB3 ICA8PCBwcywgX2RzdCwgd2lkdGgsIGJvcmRlcl9waXhlbHMsIHBzLCBlZGdlc1tUT1BdKTsKKwor ICAgIC8vYm90dG9tCisgICAgc3JjID0gZmMtPnRhYi5hbGZfcGl4ZWxfYnVmZmVyX2hbY19pZHhd WzBdICsgKChib3JkZXJfcGl4ZWxzICogKHlfY3RiICsgMSkgKiB3ICsgeCkgPDwgcHMpOworICAg IGRzdCA9IF9kc3QgKyBoZWlnaHQgKiBkc3Rfc3RyaWRlOworICAgIGFsZl9maWxsX2JvcmRlcl9o KGRzdCwgZHN0X3N0cmlkZSwgc3JjLCB3ICA8PCBwcywgX2RzdCArIChoZWlnaHQgLSAxKSAqIGRz dF9zdHJpZGUsIHdpZHRoLCBib3JkZXJfcGl4ZWxzLCBwcywgZWRnZXNbQk9UVE9NXSk7CisKKwor ICAgIC8vbGVmdAorICAgIHNyYyA9IGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl92W2NfaWR4XVsx XSArIChoICogKHhfY3RiIC0gMSkgKyB5IC0gYm9yZGVyX3BpeGVscykgKiAoYm9yZGVyX3BpeGVs cyA8PCBwcyk7CisgICAgZHN0ID0gX2RzdCAtIChib3JkZXJfcGl4ZWxzIDw8IHBzKSAtIGJvcmRl cl9waXhlbHMgKiBkc3Rfc3RyaWRlOworICAgIGFsZl9maWxsX2JvcmRlcl92KGRzdCwgZHN0X3N0 cmlkZSwgc3JjLCAgZHN0ICsgKGJvcmRlcl9waXhlbHMgPDwgcHMpLCBib3JkZXJfcGl4ZWxzLCBo ZWlnaHQsIHBzLCBlZGdlcywgZWRnZXNbTEVGVF0pOworCisgICAgLy9yaWdodAorICAgIHNyYyA9 IGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl92W2NfaWR4XVswXSArIChoICogKHhfY3RiICsgMSkg KyB5IC0gYm9yZGVyX3BpeGVscykgKiAoYm9yZGVyX3BpeGVscyA8PCBwcyk7CisgICAgZHN0ID0g X2RzdCArICh3aWR0aCA8PCBwcykgLSBib3JkZXJfcGl4ZWxzICogZHN0X3N0cmlkZTsKKyAgICBh bGZfZmlsbF9ib3JkZXJfdihkc3QsIGRzdF9zdHJpZGUsIHNyYywgIGRzdCAtICgxIDw8IHBzKSwg Ym9yZGVyX3BpeGVscywgaGVpZ2h0LCBwcywgZWRnZXMsIGVkZ2VzW1JJR0hUXSk7Cit9CisKKyNk ZWZpbmUgQUxGX01BWF9CTE9DS1NfSU5fQ1RVICAgKE1BWF9DVFVfU0laRSAqIE1BWF9DVFVfU0la RSAvIEFMRl9CTE9DS19TSVpFIC8gQUxGX0JMT0NLX1NJWkUpCisjZGVmaW5lIEFMRl9NQVhfRklM VEVSX1NJWkUgICAgIChBTEZfTUFYX0JMT0NLU19JTl9DVFUgKiBBTEZfTlVNX0NPRUZGX0xVTUEp CisKK3N0YXRpYyB2b2lkIGFsZl9nZXRfY29lZmZfYW5kX2NsaXAoVlZDTG9jYWxDb250ZXh0ICps YywgaW50MTZfdCAqY29lZmYsIGludDE2X3QgKmNsaXAsCisgICAgY29uc3QgdWludDhfdCAqc3Jj LCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgdmJfcG9z LCBBTEZQYXJhbXMgKmFsZikKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICAgICAg ID0gbGMtPmZjOworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhlYWRlciAqcnNoICAgPSBsYy0+c2Mt PnNoLnI7CisgICAgdWludDhfdCBmaXhlZF9jbGlwX3NldFtBTEZfTlVNX0ZJTFRFUlNfTFVNQV1b QUxGX05VTV9DT0VGRl9MVU1BXSA9IHsgMCB9OworICAgIGNvbnN0IGludDE2X3QgKmNvZWZmX3Nl dDsKKyAgICBjb25zdCB1aW50OF90ICpjbGlwX2lkeF9zZXQ7CisgICAgY29uc3QgdWludDhfdCAq Y2xhc3NfdG9fZmlsdDsKKyAgICBjb25zdCBpbnQgc2l6ZSA9IHdpZHRoICogaGVpZ2h0IC8gQUxG X0JMT0NLX1NJWkUgLyBBTEZfQkxPQ0tfU0laRTsKKyAgICBpbnQgY2xhc3NfaWR4W0FMRl9NQVhf QkxPQ0tTX0lOX0NUVV07CisgICAgaW50IHRyYW5zcG9zZV9pZHhbQUxGX01BWF9CTE9DS1NfSU5f Q1RVXTsKKworICAgIGlmIChhbGYtPmN0Yl9maWx0X3NldF9pZHhfeSA8IDE2KSB7CisgICAgICAg IGNvZWZmX3NldCAgICAgICAgICAgPSAmZmZfdnZjX2FsZl9maXhfZmlsdF9jb2VmZlswXVswXTsK KyAgICAgICAgY2xpcF9pZHhfc2V0ICAgICAgICA9ICZmaXhlZF9jbGlwX3NldFswXVswXTsKKyAg ICAgICAgY2xhc3NfdG9fZmlsdCAgICAgICA9IGZmX3Z2Y19hbGZfY2xhc3NfdG9fZmlsdF9tYXBb YWxmLT5jdGJfZmlsdF9zZXRfaWR4X3ldOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IGlu dCBpZCAgICAgICAgPSByc2gtPnNoX2FsZl9hcHNfaWRfbHVtYVthbGYtPmN0Yl9maWx0X3NldF9p ZHhfeSAtIDE2XTsKKyAgICAgICAgY29uc3QgVlZDQUxGICphcHMgICA9IGZjLT5wcy5hbGZfbGlz dFtpZF07CisgICAgICAgIGNvZWZmX3NldCAgICAgICAgICAgPSAmYXBzLT5sdW1hX2NvZWZmWzBd WzBdOworICAgICAgICBjbGlwX2lkeF9zZXQgICAgICAgID0gJmFwcy0+bHVtYV9jbGlwX2lkeFsw XVswXTsKKyAgICAgICAgY2xhc3NfdG9fZmlsdCAgICAgICA9IGZmX3Z2Y19hbGZfYXBzX2NsYXNz X3RvX2ZpbHRfbWFwOworICAgIH0KKyAgICBmYy0+dnZjZHNwLmFsZi5jbGFzc2lmeShjbGFzc19p ZHgsIHRyYW5zcG9zZV9pZHgsIHNyYywgc3JjX3N0cmlkZSwgd2lkdGgsIGhlaWdodCwKKyAgICAg ICAgdmJfcG9zLCBsYy0+YWxmX2dyYWRpZW50X3RtcCk7CisgICAgZmMtPnZ2Y2RzcC5hbGYucmVj b25fY29lZmZfYW5kX2NsaXAoY29lZmYsIGNsaXAsIGNsYXNzX2lkeCwgdHJhbnNwb3NlX2lkeCwg c2l6ZSwKKyAgICAgICAgY29lZmZfc2V0LCBjbGlwX2lkeF9zZXQsIGNsYXNzX3RvX2ZpbHQpOwor fQorCitzdGF0aWMgdm9pZCBhbGZfZmlsdGVyX2x1bWEoVlZDTG9jYWxDb250ZXh0ICpsYywgdWlu dDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgY29uc3QgcHRyZGlmZl90IGRzdF9z dHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlLCBjb25zdCBpbnQgeDAsIGNvbnN0IGlu dCB5MCwKKyAgICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludCBf dmJfcG9zLCBBTEZQYXJhbXMgKmFsZikKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZj ICAgPSBsYy0+ZmM7CisgICAgaW50IHZiX3BvcyAgICAgICAgICAgICAgICAgID0gX3ZiX3BvcyAt IHkwOworICAgIGludDE2X3QgKmNvZWZmICAgICAgICAgICAgICAgPSAoaW50MTZfdCopbGMtPnRt cDsKKyAgICBpbnQxNl90ICpjbGlwICAgICAgICAgICAgICAgPSAoaW50MTZfdCAqKWxjLT50bXAx OworCisgICAgYXZfYXNzZXJ0MChBTEZfTUFYX0ZJTFRFUl9TSVpFIDw9IHNpemVvZihsYy0+dG1w KSk7CisgICAgYXZfYXNzZXJ0MChBTEZfTUFYX0ZJTFRFUl9TSVpFICogc2l6ZW9mKGludDE2X3Qp IDw9IHNpemVvZihsYy0+dG1wMSkpOworCisgICAgYWxmX2dldF9jb2VmZl9hbmRfY2xpcChsYywg Y29lZmYsIGNsaXAsIHNyYywgc3JjX3N0cmlkZSwgd2lkdGgsIGhlaWdodCwgdmJfcG9zLCBhbGYp OworICAgIGZjLT52dmNkc3AuYWxmLmZpbHRlcltMVU1BXShkc3QsIGRzdF9zdHJpZGUsIHNyYywg c3JjX3N0cmlkZSwgd2lkdGgsIGhlaWdodCwgY29lZmYsIGNsaXAsIHZiX3Bvcyk7Cit9CisKK3N0 YXRpYyBpbnQgYWxmX2NsaXBfZnJvbV9pZHgoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgY29u c3QgaW50IGlkeCkKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgID0gZmMtPnBzLnNwczsKKyAg ICBjb25zdCBpbnQgb2Zmc2V0W10gPSB7MCwgMywgNSwgN307CisKKyAgICByZXR1cm4gMSA8PCAo c3BzLT5iaXRfZGVwdGggLSBvZmZzZXRbaWR4XSk7Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9maWx0 ZXJfY2hyb21hKFZWQ0xvY2FsQ29udGV4dCAqbGMsIHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhf dCAqc3JjLAorICAgIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3Qg c3JjX3N0cmlkZSwgY29uc3QgaW50IGNfaWR4LAorICAgIGNvbnN0IGludCB3aWR0aCwgY29uc3Qg aW50IGhlaWdodCwgY29uc3QgaW50IHZiX3BvcywgQUxGUGFyYW1zICphbGYpCit7CisgICAgVlZD RnJhbWVDb250ZXh0ICpmYyAgICAgICAgICAgICA9IGxjLT5mYzsKKyAgICBjb25zdCBIMjY2UmF3 U2xpY2VIZWFkZXIgKnJzaCAgID0gbGMtPnNjLT5zaC5yOworICAgIGNvbnN0IFZWQ0FMRiAqYXBz ICAgICAgICAgICAgICAgPSBmYy0+cHMuYWxmX2xpc3RbcnNoLT5zaF9hbGZfYXBzX2lkX2Nocm9t YV07CisgICAgY29uc3QgaW50IGlkeCAgICAgICAgICAgICAgICAgICA9IGFsZi0+YWxmX2N0Yl9m aWx0ZXJfYWx0X2lkeFtjX2lkeCAtIDFdOworICAgIGNvbnN0IGludDE2X3QgKmNvZWZmICAgICAg ICAgICAgPSBhcHMtPmNocm9tYV9jb2VmZltpZHhdOworICAgIGludDE2X3QgY2xpcFtBTEZfTlVN X0NPRUZGX0NIUk9NQV07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IEFMRl9OVU1fQ09FRkZf Q0hST01BOyBpKyspCisgICAgICAgIGNsaXBbaV0gPSBhbGZfY2xpcF9mcm9tX2lkeChmYywgYXBz LT5jaHJvbWFfY2xpcF9pZHhbaWR4XVtpXSk7CisKKyAgICBmYy0+dnZjZHNwLmFsZi5maWx0ZXJb Q0hST01BXShkc3QsIGRzdF9zdHJpZGUsIHNyYywgc3JjX3N0cmlkZSwgd2lkdGgsIGhlaWdodCwg Y29lZmYsIGNsaXAsIHZiX3Bvcyk7Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9maWx0ZXJfY2MoVlZD TG9jYWxDb250ZXh0ICpsYywgdWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpsdW1hLAorICAg IGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3QgbHVtYV9zdHJpZGUs IGNvbnN0IGludCBjX2lkeCwKKyAgICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQs IGNvbnN0IGludCBocywgY29uc3QgaW50IHZzLCBjb25zdCBpbnQgdmJfcG9zLCBBTEZQYXJhbXMg KmFsZikKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjICAgICAgICAgICAgID0gbGMtPmZjOwor ICAgIGNvbnN0IEgyNjZSYXdTbGljZUhlYWRlciAqcnNoICAgPSBsYy0+c2MtPnNoLnI7CisgICAg Y29uc3QgaW50IGlkeCAgICAgICAgICAgICAgICAgICA9IGNfaWR4IC0gMTsKKyAgICBjb25zdCBp bnQgY2NfYXBzX2lkICAgICAgICAgICAgID0gY19pZHggPT0gQ0IgPyByc2gtPnNoX2FsZl9jY19j Yl9hcHNfaWQgOiByc2gtPnNoX2FsZl9jY19jcl9hcHNfaWQ7CisgICAgY29uc3QgVlZDQUxGICph cHMgICAgICAgICAgICAgICA9IGZjLT5wcy5hbGZfbGlzdFtjY19hcHNfaWRdOworCisgICAgaWYg KGFwcykgeworICAgICAgICBjb25zdCBpbnQxNl90ICpjb2VmZiA9IGFwcy0+Y2NfY29lZmZbaWR4 XVthbGYtPmN0Yl9jY19pZGNbaWR4XSAtIDFdOworCisgICAgICAgIGZjLT52dmNkc3AuYWxmLmZp bHRlcl9jYyhkc3QsIGRzdF9zdHJpZGUsIGx1bWEsIGx1bWFfc3RyaWRlLCB3aWR0aCwgaGVpZ2h0 LCBocywgdnMsIGNvZWZmLCB2Yl9wb3MpOworICAgIH0KK30KKwordm9pZCBmZl92dmNfYWxmX2Nv cHlfY3R1X3RvX2h2KFZWQ0xvY2FsQ29udGV4dCogbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50 IHkwKQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgICAgID0gbGMtPmZjOworICAgIGNvbnN0 IGludCB4X2N0YiAgICAgICAgID0geDAgPj4gZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95Owor ICAgIGNvbnN0IGludCB5X2N0YiAgICAgICAgID0geTAgPj4gZmMtPnBzLnNwcy0+Y3RiX2xvZzJf c2l6ZV95OworICAgIGNvbnN0IGludCBjdGJfc2l6ZV95ICAgID0gZmMtPnBzLnNwcy0+Y3RiX3Np emVfeTsKKyAgICBjb25zdCBpbnQgcHMgICAgICAgICAgICA9IGZjLT5wcy5zcHMtPnBpeGVsX3No aWZ0OworICAgIGNvbnN0IGludCBjX2VuZCAgICAgICAgID0gZmMtPnBzLnNwcy0+ci0+c3BzX2No cm9tYV9mb3JtYXRfaWRjID8gVlZDX01BWF9TQU1QTEVfQVJSQVlTIDogMTsKKworICAgIGZvciAo aW50IGNfaWR4ID0gMDsgY19pZHggPCBjX2VuZDsgY19pZHgrKykgeworICAgICAgICBjb25zdCBp bnQgaHMgICAgICAgID0gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3Qg aW50IHZzICAgICAgICA9IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAgIGNvbnN0 IGludCB4ICAgICAgICAgPSB4MCA+PiBoczsKKyAgICAgICAgY29uc3QgaW50IHkgICAgICAgICA9 IHkwID4+IHZzOworICAgICAgICBjb25zdCBpbnQgd2lkdGggICAgID0gRkZNSU4oZmMtPnBzLnNw cy0+d2lkdGggLSB4MCwgY3RiX3NpemVfeSkgPj4gaHM7CisgICAgICAgIGNvbnN0IGludCBoZWln aHQgICAgPSBGRk1JTihmYy0+cHMuc3BzLT5oZWlnaHQgLSB5MCwgY3RiX3NpemVfeSkgPj4gdnM7 CisKKyAgICAgICAgY29uc3QgaW50IHNyY19zdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2Nf aWR4XTsKKyAgICAgICAgdWludDhfdCogc3JjID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1beSAq IHNyY19zdHJpZGUgKyAoeCA8PCBwcyldOworCisgICAgICAgIGFsZl9jb3B5X2N0Yl90b19odihm Yywgc3JjLCBzcmNfc3RyaWRlLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4X2N0YiwgeV9jdGIsIGNf aWR4KTsKKyAgICB9Cit9CisKK3ZvaWQgZmZfdnZjX2FsZl9maWx0ZXIoVlZDTG9jYWxDb250ZXh0 ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTApCit7CisgICAgVlZDRnJhbWVDb250ZXh0 ICpmYyAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDUFBTICpwcHMgICAgICAgPSBmYy0+cHMu cHBzOworICAgIGNvbnN0IGludCB4X2N0YiAgICAgICAgID0geDAgPj4gZmMtPnBzLnNwcy0+Y3Ri X2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCB5X2N0YiAgICAgICAgID0geTAgPj4gZmMtPnBz LnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBjdGJfc2l6ZV95ICAgID0gZmMt PnBzLnNwcy0+Y3RiX3NpemVfeTsKKyAgICBjb25zdCBpbnQgcHMgICAgICAgICAgICA9IGZjLT5w cy5zcHMtPnBpeGVsX3NoaWZ0OworICAgIGNvbnN0IGludCBwYWRkZWRfc3RyaWRlID0gRURHRV9F TVVfQlVGRkVSX1NUUklERSA8PCBwczsKKyAgICBjb25zdCBpbnQgcGFkZGVkX29mZnNldCA9IHBh ZGRlZF9zdHJpZGUgKiBBTEZfUEFERElOR19TSVpFICsgKEFMRl9QQURESU5HX1NJWkUgPDwgcHMp OworICAgIGNvbnN0IGludCBjX2VuZCAgICAgICAgID0gZmMtPnBzLnNwcy0+ci0+c3BzX2Nocm9t YV9mb3JtYXRfaWRjID8gVlZDX01BWF9TQU1QTEVfQVJSQVlTIDogMTsKKyAgICBBTEZQYXJhbXMg KmFsZiAgICAgICAgICA9ICZDVEIoZmMtPnRhYi5hbGYsIHhfY3RiLCB5X2N0Yik7CisgICAgaW50 IGVkZ2VzW01BWF9FREdFU10gICAgPSB7IHhfY3RiID09IDAsIHlfY3RiID09IDAsIHhfY3RiID09 IHBwcy0+Y3RiX3dpZHRoIC0gMSwgeV9jdGIgPT0gcHBzLT5jdGJfaGVpZ2h0IC0gMSB9OworCisg ICAgaWYgKCFwcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxlZF9mbGFn KSB7CisgICAgICAgIGVkZ2VzW0xFRlRdID0gZWRnZXNbTEVGVF0gfHwgKGxjLT5ib3VuZGFyeV9m bGFncyAmIEJPVU5EQVJZX0xFRlRfVElMRSk7CisgICAgICAgIGVkZ2VzW1RPUF0gID0gZWRnZXNb VE9QXSB8fCAobGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfVElMRSk7CisgICAg ICAgIGVkZ2VzW1JJR0hUXSA9IGVkZ2VzW1JJR0hUXSB8fCBwcHMtPmN0Yl90b19jb2xfYmRbeF9j dGJdICE9IHBwcy0+Y3RiX3RvX2NvbF9iZFt4X2N0YiArIDFdOworICAgICAgICBlZGdlc1tCT1RU T01dID0gZWRnZXNbQk9UVE9NXSB8fCBwcHMtPmN0Yl90b19yb3dfYmRbeV9jdGJdICE9IHBwcy0+ Y3RiX3RvX3Jvd19iZFt5X2N0YiArIDFdOworICAgIH0KKworICAgIGlmICghcHBzLT5yLT5wcHNf bG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcpIHsKKyAgICAgICAgZWRnZXNb TEVGVF0gPSBlZGdlc1tMRUZUXSB8fCAobGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVG VF9TTElDRSk7CisgICAgICAgIGVkZ2VzW1RPUF0gPSBlZGdlc1tUT1BdIHx8IChsYy0+Ym91bmRh cnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9TTElDRSk7CisgICAgICAgIGVkZ2VzW1JJR0hUXSA9 IGVkZ2VzW1JJR0hUXSB8fCBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0g Q1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiArIDEsIHlfY3RiKTsKKyAgICAgICAgZWRnZXNb Qk9UVE9NXSA9IGVkZ2VzW0JPVFRPTV0gfHwgQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0Yiwg eV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiICsgMSk7CisgICAg fQorCisgICAgZm9yIChpbnQgY19pZHggPSAwOyBjX2lkeCA8IGNfZW5kOyBjX2lkeCsrKSB7Cisg ICAgICAgIGNvbnN0IGludCBocyA9IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAg IGNvbnN0IGludCB2cyA9IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAgIGNvbnN0 IGludCBjdGJfc2l6ZV9oID0gY3RiX3NpemVfeSA+PiBoczsKKyAgICAgICAgY29uc3QgaW50IGN0 Yl9zaXplX3YgPSBjdGJfc2l6ZV95ID4+IHZzOworICAgICAgICBjb25zdCBpbnQgeCA9IHgwID4+ IGhzOworICAgICAgICBjb25zdCBpbnQgeSA9IHkwID4+IHZzOworICAgICAgICBjb25zdCBpbnQg cGljX3dpZHRoID0gZmMtPnBzLnNwcy0+d2lkdGggPj4gaHM7CisgICAgICAgIGNvbnN0IGludCBw aWNfaGVpZ2h0ID0gZmMtPnBzLnNwcy0+aGVpZ2h0ID4+IHZzOworICAgICAgICBjb25zdCBpbnQg d2lkdGggID0gRkZNSU4ocGljX3dpZHRoICAtIHgsIGN0Yl9zaXplX2gpOworICAgICAgICBjb25z dCBpbnQgaGVpZ2h0ID0gRkZNSU4ocGljX2hlaWdodCAtIHksIGN0Yl9zaXplX3YpOworICAgICAg ICBjb25zdCBpbnQgc3JjX3N0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdOworICAg ICAgICB1aW50OF90ICpzcmMgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4XVt5ICogc3JjX3N0cmlk ZSArICh4IDw8IHBzKV07CisgICAgICAgIHVpbnQ4X3QgKnBhZGRlZDsKKworICAgICAgICBpZiAo YWxmLT5jdGJfZmxhZ1tjX2lkeF0gfHwgKCFjX2lkeCAmJiAoYWxmLT5jdGJfY2NfaWRjWzBdIHx8 IGFsZi0+Y3RiX2NjX2lkY1sxXSkpKSB7CisgICAgICAgICAgICBwYWRkZWQgPSAoY19pZHggPyBs Yy0+YWxmX2J1ZmZlcl9jaHJvbWEgOiBsYy0+YWxmX2J1ZmZlcl9sdW1hKSArIHBhZGRlZF9vZmZz ZXQ7CisgICAgICAgICAgICBhbGZfcHJlcGFyZV9idWZmZXIoZmMsIHBhZGRlZCwgc3JjLCB4LCB5 LCB4X2N0YiwgeV9jdGIsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgcGFkZGVkX3N0 cmlkZSwgc3JjX3N0cmlkZSwgY19pZHgsIGVkZ2VzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo YWxmLT5jdGJfZmxhZ1tjX2lkeF0pIHsKKyAgICAgICAgICAgIGlmICghY19pZHgpICB7CisgICAg ICAgICAgICAgICAgYWxmX2ZpbHRlcl9sdW1hKGxjLCBzcmMsIHBhZGRlZCwgc3JjX3N0cmlkZSwg cGFkZGVkX3N0cmlkZSwgeCwgeSwKKyAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwg eSArIGN0Yl9zaXplX3YgLSBBTEZfVkJfUE9TX0FCT1ZFX0xVTUEsIGFsZik7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFsZl9maWx0ZXJfY2hyb21hKGxjLCBzcmMsIHBh ZGRlZCwgc3JjX3N0cmlkZSwgcGFkZGVkX3N0cmlkZSwgY19pZHgsCisgICAgICAgICAgICAgICAg ICAgIHdpZHRoLCBoZWlnaHQsIGN0Yl9zaXplX3YgLSBBTEZfVkJfUE9TX0FCT1ZFX0NIUk9NQSwg YWxmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY19pZHggJiYgYWxm LT5jdGJfY2NfaWRjW2NfaWR4IC0gMV0pIHsKKyAgICAgICAgICAgIHBhZGRlZCA9IGxjLT5hbGZf YnVmZmVyX2x1bWEgKyBwYWRkZWRfb2Zmc2V0OworICAgICAgICAgICAgYWxmX2ZpbHRlcl9jYyhs Yywgc3JjLCBwYWRkZWQsIHNyY19zdHJpZGUsIHBhZGRlZF9zdHJpZGUsIGNfaWR4LAorICAgICAg ICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGhzLCB2cywgKGN0Yl9zaXplX3YgPDwgdnMpIC0gQUxG X1ZCX1BPU19BQk9WRV9MVU1BLCBhbGYpOworICAgICAgICB9CisKKyAgICAgICAgYWxmLT5hcHBs aWVkW2NfaWR4XSA9IDE7CisgICAgfQorfQorCisKK3ZvaWQgZmZfdnZjX2xtY3NfZmlsdGVyKGNv bnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSkKK3sKKyAg ICBjb25zdCBTbGljZUNvbnRleHQgKnNjID0gbGMtPnNjOworICAgIGNvbnN0IFZWQ0ZyYW1lQ29u dGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgY29uc3QgaW50IGN0Yl9zaXplICA9IGZjLT5wcy5zcHMt PmN0Yl9zaXplX3k7CisgICAgY29uc3QgaW50IHdpZHRoICAgICA9IEZGTUlOKGZjLT5wcy5wcHMt PndpZHRoICAtIHgsIGN0Yl9zaXplKTsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ICAgID0gRkZNSU4o ZmMtPnBzLnBwcy0+aGVpZ2h0IC0geSwgY3RiX3NpemUpOworICAgIHVpbnQ4X3QgKmRhdGEgICAg ICAgPSBmYy0+ZnJhbWUtPmRhdGFbTFVNQV0gKyB5ICogZmMtPmZyYW1lLT5saW5lc2l6ZVtMVU1B XSArICh4IDw8IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0KTsKKyAgICBpZiAoc2MtPnNoLnItPnNo X2xtY3NfdXNlZF9mbGFnKQorICAgICAgICBmYy0+dnZjZHNwLmxtY3MuZmlsdGVyKGRhdGEsIGZj LT5mcmFtZS0+bGluZXNpemVbTFVNQV0sIHdpZHRoLCBoZWlnaHQsIGZjLT5wcy5sbWNzLmludl9s dXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5oIGIvbGliYXZj b2RlYy92dmMvdnZjX2ZpbHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLmJjNDJlNTU1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL3Z2Yy92dmNfZmls dGVyLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIFZWQyBmaWx0ZXJzCisgKgorICogQ29weXJp Z2h0IChDKSAyMDIyIE51byBNaQorICoKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1w ZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwg b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1 MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNB CisgKi8KKyNpZm5kZWYgQVZDT0RFQ19WVkNfRklMVEVSX0gKKyNkZWZpbmUgQVZDT0RFQ19WVkNf RklMVEVSX0gKKworI2luY2x1ZGUgInZ2Y2RlYy5oIgorCisvKioKKyAqIGxtY3MgZmlsdGVyIGZv ciB0aGUgQ1RVCisgKiBAcGFyYW0gbGMgbG9jYWwgY29udGV4dCBmb3IgQ1RVCisgKiBAcGFyYW0g eDAgeCBwb3NpdGlvbiBmb3IgdGhlIENUVQorICogQHBhcmFtIHkwIHkgcG9zaXRpb24gZm9yIHRo ZSBDVFUKKyAqLwordm9pZCBmZl92dmNfbG1jc19maWx0ZXIoY29uc3QgVlZDTG9jYWxDb250ZXh0 ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTApOworCisvKioKKyAqIHZlcnRpY2FsIGRl YmxvY2sgZmlsdGVyIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0gbGMgbG9jYWwgY29udGV4dCBmb3Ig Q1RVCisgKiBAcGFyYW0geDAgeCBwb3NpdGlvbiBmb3IgdGhlIENUVQorICogQHBhcmFtIHkwIHkg cG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqLwordm9pZCBmZl92dmNfZGVibG9ja192ZXJ0aWNhbChj b25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCk7CisKKy8qKgorICogaG9y aXpvbnRhbCBkZWJsb2NrIGZpbHRlciBmb3IgdGhlIENUVQorICogQHBhcmFtIGxjIGxvY2FsIGNv bnRleHQgZm9yIENUVQorICogQHBhcmFtIHgwIHggcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqIEBw YXJhbSB5MCB5IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKi8KK3ZvaWQgZmZfdnZjX2RlYmxvY2tf aG9yaXpvbnRhbChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCk7CisK Ky8qKgorICogc2FvIGZpbHRlciBmb3IgdGhlIENUVQorICogQHBhcmFtIGxjIGxvY2FsIGNvbnRl eHQgZm9yIENUVQorICogQHBhcmFtIHgwIHggcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqIEBwYXJh bSB5MCB5IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKi8KK3ZvaWQgZmZfdnZjX3Nhb19maWx0ZXIo VlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTApOworCit2b2lk IGZmX3Z2Y19zYW9fY29weV9jdGJfdG9faHYoVlZDTG9jYWxDb250ZXh0KiBsYywgaW50IHJ4LCBp bnQgcnksIGludCBsYXN0X3Jvdyk7Cit2b2lkIGZmX3Z2Y19hbGZfY29weV9jdHVfdG9faHYoVlZD TG9jYWxDb250ZXh0KiBsYywgaW50IHgwLCBpbnQgeTApOworCisvKioKKyAqIGFsZiBmaWx0ZXIg Zm9yIHRoZSBDVFUKKyAqIEBwYXJhbSBsYyBsb2NhbCBjb250ZXh0IGZvciBDVFUKKyAqIEBwYXJh bSB4MCB4IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0geTAgeSBwb3NpdGlvbiBmb3Ig dGhlIENUVQorICovCit2b2lkIGZmX3Z2Y19hbGZfZmlsdGVyKFZWQ0xvY2FsQ29udGV4dCAqbGMs IGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwKTsKKworI2VuZGlmIC8vIEFWQ09ERUNfVlZDX0NU VV9ICmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyX3RlbXBsYXRlLmMgYi9s aWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyX3RlbXBsYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uYTRmMTc5MmVjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29k ZWMvdnZjL3Z2Y19maWx0ZXJfdGVtcGxhdGUuYwpAQCAtMCwwICsxLDExMzUgQEAKKy8qCisgKiBW VkMgZmlsdGVycyBEU1AKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgTnVvIE1pCisgKgorICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj ZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKK3N0YXRpYyB2b2lkIEZVTkMobG1jc19m aWx0ZXJfbHVtYSkodWludDhfdCAqX2RzdCwgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IGlu dCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgdWludDhfdCAqX2x1dCkKK3sKKyAgICBj b25zdCBwaXhlbCAqbHV0ID0gKGNvbnN0IHBpeGVsICopX2x1dDsKKyAgICBwaXhlbCAqZHN0ID0g KHBpeGVsKilfZHN0OworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGZv ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7 IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgZHN0W3hdID0gbHV0W2RzdFt4XV07CisgICAg ICAgIGRzdCArPSBkc3Rfc3RyaWRlOworICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhzYW9f YmFuZF9maWx0ZXIpKHVpbnQ4X3QgKl9kc3QsIGNvbnN0IHVpbnQ4X3QgKl9zcmMsIHB0cmRpZmZf dCBkc3Rfc3RyaWRlLCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwKKyAgICBjb25zdCBpbnQxNl90ICpz YW9fb2Zmc2V0X3ZhbCwgY29uc3QgaW50IHNhb19sZWZ0X2NsYXNzLCBjb25zdCBpbnQgd2lkdGgs IGNvbnN0IGludCBoZWlnaHQpCit7CisgICAgcGl4ZWwgKmRzdCAgICAgICA9IChwaXhlbCAqKV9k c3Q7CisgICAgY29uc3QgcGl4ZWwgKnNyYyA9IChwaXhlbCAqKV9zcmM7CisgICAgaW50IG9mZnNl dF90YWJsZVszMl0gPSB7IDAgfTsKKyAgICBpbnQgaywgeSwgeDsKKyAgICBpbnQgc2hpZnQgID0g QklUX0RFUFRIIC0gNTsKKworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKyAgICBz cmNfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisKKyAgICBmb3IgKGsgPSAwOyBrIDwgNDsgaysr KQorICAgICAgICBvZmZzZXRfdGFibGVbKGsgKyBzYW9fbGVmdF9jbGFzcykgJiAzMV0gPSBzYW9f b2Zmc2V0X3ZhbFtrICsgMV07CisgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7Cisg ICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgZHN0W3hdID0g YXZfY2xpcF9waXhlbChzcmNbeF0gKyBvZmZzZXRfdGFibGVbc3JjW3hdID4+IHNoaWZ0XSk7Cisg ICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlOworICAgICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKKyAg ICB9Cit9CisKKyNkZWZpbmUgQ01QKGEsIGIpICgoKGEpID4gKGIpKSAtICgoYSkgPCAoYikpKQor CitzdGF0aWMgdm9pZCBGVU5DKHNhb19lZGdlX2ZpbHRlcikodWludDhfdCAqX2RzdCwgY29uc3Qg dWludDhfdCAqX3NyYywgcHRyZGlmZl90IGRzdF9zdHJpZGUsCisgICAgY29uc3QgaW50MTZfdCAq c2FvX29mZnNldF92YWwsIGNvbnN0IGludCBlbywgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQg aGVpZ2h0KQoreworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGVkZ2VfaWR4W10gPSB7IDEsIDIs IDAsIDMsIDQgfTsKKyAgICBzdGF0aWMgY29uc3QgaW50OF90IHBvc1s0XVsyXVsyXSA9IHsKKyAg ICAgICAgeyB7IC0xLCAgMCB9LCB7ICAxLCAwIH0gfSwgLy8gaG9yaXpvbnRhbAorICAgICAgICB7 IHsgIDAsIC0xIH0sIHsgIDAsIDEgfSB9LCAvLyB2ZXJ0aWNhbAorICAgICAgICB7IHsgLTEsIC0x IH0sIHsgIDEsIDEgfSB9LCAvLyA0NSBkZWdyZWUKKyAgICAgICAgeyB7ICAxLCAtMSB9LCB7IC0x LCAxIH0gfSwgLy8gMTM1IGRlZ3JlZQorICAgIH07CisgICAgcGl4ZWwgKmRzdCAgICAgICAgICA9 IChwaXhlbCAqKV9kc3Q7CisgICAgY29uc3QgcGl4ZWwgKnNyYyAgICA9IChwaXhlbCAqKV9zcmM7 CisgICAgaW50IGFfc3RyaWRlLCBiX3N0cmlkZTsKKyAgICBpbnQgeCwgeTsKKyAgICBwdHJkaWZm X3Qgc3JjX3N0cmlkZSA9ICgyICogTUFYX1BCX1NJWkUgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElO R19TSVpFKSAvIHNpemVvZihwaXhlbCk7CisgICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwp OworCisgICAgYV9zdHJpZGUgPSBwb3NbZW9dWzBdWzBdICsgcG9zW2VvXVswXVsxXSAqIHNyY19z dHJpZGU7CisgICAgYl9zdHJpZGUgPSBwb3NbZW9dWzFdWzBdICsgcG9zW2VvXVsxXVsxXSAqIHNy Y19zdHJpZGU7CisgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgIGZv ciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAgICAgICBpbnQgZGlmZjAgPSBDTVAo c3JjW3hdLCBzcmNbeCArIGFfc3RyaWRlXSk7CisgICAgICAgICAgICBpbnQgZGlmZjEgPSBDTVAo c3JjW3hdLCBzcmNbeCArIGJfc3RyaWRlXSk7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCAg ICAgICAgPSBlZGdlX2lkeFsyICsgZGlmZjAgKyBkaWZmMV07CisgICAgICAgICAgICBkc3RbeF0g PSBhdl9jbGlwX3BpeGVsKHNyY1t4XSArIHNhb19vZmZzZXRfdmFsW29mZnNldF92YWxdKTsKKyAg ICAgICAgfQorICAgICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKKyAgICAgICAgZHN0ICs9IGRzdF9z dHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKHNhb19lZGdlX3Jlc3RvcmVfMCko dWludDhfdCAqX2RzdCwgY29uc3QgdWludDhfdCAqX3NyYywKKyAgICBwdHJkaWZmX3QgZHN0X3N0 cmlkZSwgcHRyZGlmZl90IHNyY19zdHJpZGUsIGNvbnN0IFNBT1BhcmFtcyAqc2FvLAorICAgIGNv bnN0IGludCAqYm9yZGVycywgY29uc3QgaW50IF93aWR0aCwgY29uc3QgaW50IF9oZWlnaHQsIGNv bnN0IGludCBjX2lkeCwKKyAgICBjb25zdCB1aW50OF90ICp2ZXJ0X2VkZ2UsIGNvbnN0IHVpbnQ4 X3QgKmhvcml6X2VkZ2UsIGNvbnN0IHVpbnQ4X3QgKmRpYWdfZWRnZSkKK3sKKyAgICBpbnQgeCwg eTsKKyAgICBwaXhlbCAqZHN0ICAgICAgICAgICAgICAgICAgICAgID0gKHBpeGVsICopX2RzdDsK KyAgICBjb25zdCBwaXhlbCAqc3JjICAgICAgICAgICAgICAgID0gKHBpeGVsICopX3NyYzsKKyAg ICBjb25zdCBpbnQxNl90ICpzYW9fb2Zmc2V0X3ZhbCAgID0gc2FvLT5vZmZzZXRfdmFsW2NfaWR4 XTsKKyAgICBjb25zdCBpbnQgc2FvX2VvX2NsYXNzICAgICAgICAgID0gc2FvLT5lb19jbGFzc1tj X2lkeF07CisgICAgaW50IGluaXRfeCA9IDAsIHdpZHRoID0gX3dpZHRoLCBoZWlnaHQgPSBfaGVp Z2h0OworCisgICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworICAgIHNyY19zdHJpZGUg Lz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGlmIChzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX1ZFUlQp IHsKKyAgICAgICAgaWYgKGJvcmRlcnNbMF0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFs ID0gc2FvX29mZnNldF92YWxbMF07CisgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0 OyB5KyspIHsKKyAgICAgICAgICAgICAgICBkc3RbeSAqIGRzdF9zdHJpZGVdID0gYXZfY2xpcF9w aXhlbChzcmNbeSAqIHNyY19zdHJpZGVdICsgb2Zmc2V0X3ZhbCk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpbml0X3ggPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChib3JkZXJzWzJd KSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRfdmFsWzBdOworICAg ICAgICAgICAgaW50IG9mZnNldCAgICAgPSB3aWR0aCAtIDE7CisgICAgICAgICAgICBmb3IgKHgg PSAwOyB4IDwgaGVpZ2h0OyB4KyspIHsKKyAgICAgICAgICAgICAgICBkc3RbeCAqIGRzdF9zdHJp ZGUgKyBvZmZzZXRdID0gYXZfY2xpcF9waXhlbChzcmNbeCAqIHNyY19zdHJpZGUgKyBvZmZzZXRd ICsgb2Zmc2V0X3ZhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aWR0aC0tOworICAg ICAgICB9CisgICAgfQorICAgIGlmIChzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX0hPUklaKSB7Cisg ICAgICAgIGlmIChib3JkZXJzWzFdKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNh b19vZmZzZXRfdmFsWzBdOworICAgICAgICAgICAgZm9yICh4ID0gaW5pdF94OyB4IDwgd2lkdGg7 IHgrKykKKyAgICAgICAgICAgICAgICBkc3RbeF0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4XSArIG9m ZnNldF92YWwpOworICAgICAgICB9CisgICAgICAgIGlmIChib3JkZXJzWzNdKSB7CisgICAgICAg ICAgICBpbnQgb2Zmc2V0X3ZhbCAgID0gc2FvX29mZnNldF92YWxbMF07CisgICAgICAgICAgICBw dHJkaWZmX3QgeV9kc3Rfc3RyaWRlID0gZHN0X3N0cmlkZSAqIChoZWlnaHQgLSAxKTsKKyAgICAg ICAgICAgIHB0cmRpZmZfdCB5X3NyY19zdHJpZGUgPSBzcmNfc3RyaWRlICogKGhlaWdodCAtIDEp OworICAgICAgICAgICAgZm9yICh4ID0gaW5pdF94OyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAg ICAgICAgICBkc3RbeCArIHlfZHN0X3N0cmlkZV0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4ICsgeV9z cmNfc3RyaWRlXSArIG9mZnNldF92YWwpOworICAgICAgICAgICAgaGVpZ2h0LS07CisgICAgICAg IH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoc2FvX2VkZ2VfcmVzdG9yZV8xKSh1aW50 OF90ICpfZHN0LCBjb25zdCB1aW50OF90ICpfc3JjLAorICAgIHB0cmRpZmZfdCBkc3Rfc3RyaWRl LCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgY29uc3QgU0FPUGFyYW1zICpzYW8sCisgICAgY29uc3Qg aW50ICpib3JkZXJzLCBjb25zdCBpbnQgX3dpZHRoLCBjb25zdCBpbnQgX2hlaWdodCwgY29uc3Qg aW50IGNfaWR4LAorICAgIGNvbnN0IHVpbnQ4X3QgKnZlcnRfZWRnZSwgY29uc3QgdWludDhfdCAq aG9yaXpfZWRnZSwgY29uc3QgdWludDhfdCAqZGlhZ19lZGdlKQoreworICAgIGludCB4LCB5Owor ICAgIHBpeGVsICpkc3QgICAgICAgICAgICAgICAgICAgICAgPSAocGl4ZWwgKilfZHN0OworICAg IGNvbnN0IHBpeGVsICpzcmMgICAgICAgICAgICAgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGNv bnN0IGludDE2X3QgKnNhb19vZmZzZXRfdmFsICAgPSBzYW8tPm9mZnNldF92YWxbY19pZHhdOwor ICAgIGNvbnN0IGludCBzYW9fZW9fY2xhc3MgICAgICAgICAgPSBzYW8tPmVvX2NsYXNzW2NfaWR4 XTsKKyAgICBpbnQgaW5pdF94ID0gMCwgaW5pdF95ID0gMCwgd2lkdGggPSBfd2lkdGgsIGhlaWdo dCA9IF9oZWlnaHQ7CisKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisgICAgc3Jj X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAgaWYgKHNhb19lb19jbGFzcyAhPSBTQU9f RU9fVkVSVCkgeworICAgICAgICBpZiAoYm9yZGVyc1swXSkgeworICAgICAgICAgICAgaW50IG9m ZnNldF92YWwgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAgICAgIGZvciAoeSA9IDA7IHkg PCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgICAgIGRzdFt5ICogZHN0X3N0cmlkZV0gPSBh dl9jbGlwX3BpeGVsKHNyY1t5ICogc3JjX3N0cmlkZV0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGluaXRfeCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJv cmRlcnNbMl0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFsID0gc2FvX29mZnNldF92YWxb MF07CisgICAgICAgICAgICBpbnQgb2Zmc2V0ICAgICA9IHdpZHRoIC0gMTsKKyAgICAgICAgICAg IGZvciAoeCA9IDA7IHggPCBoZWlnaHQ7IHgrKykgeworICAgICAgICAgICAgICAgIGRzdFt4ICog ZHN0X3N0cmlkZSArIG9mZnNldF0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4ICogc3JjX3N0cmlkZSAr IG9mZnNldF0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdpZHRo LS07CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHNhb19lb19jbGFzcyAhPSBTQU9fRU9fSE9S SVopIHsKKyAgICAgICAgaWYgKGJvcmRlcnNbMV0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRf dmFsID0gc2FvX29mZnNldF92YWxbMF07CisgICAgICAgICAgICBmb3IgKHggPSBpbml0X3g7IHgg PCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgIGRzdFt4XSA9IGF2X2NsaXBfcGl4ZWwoc3Jj W3hdICsgb2Zmc2V0X3ZhbCk7CisgICAgICAgICAgICBpbml0X3kgPSAxOworICAgICAgICB9Cisg ICAgICAgIGlmIChib3JkZXJzWzNdKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCAgID0g c2FvX29mZnNldF92YWxbMF07CisgICAgICAgICAgICBwdHJkaWZmX3QgeV9kc3Rfc3RyaWRlID0g ZHN0X3N0cmlkZSAqIChoZWlnaHQgLSAxKTsKKyAgICAgICAgICAgIHB0cmRpZmZfdCB5X3NyY19z dHJpZGUgPSBzcmNfc3RyaWRlICogKGhlaWdodCAtIDEpOworICAgICAgICAgICAgZm9yICh4ID0g aW5pdF94OyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICBkc3RbeCArIHlfZHN0X3N0 cmlkZV0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4ICsgeV9zcmNfc3RyaWRlXSArIG9mZnNldF92YWwp OworICAgICAgICAgICAgaGVpZ2h0LS07CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAg ICAgIGludCBzYXZlX3VwcGVyX2xlZnQgID0gIWRpYWdfZWRnZVswXSAmJiBzYW9fZW9fY2xhc3Mg PT0gU0FPX0VPXzEzNUQgJiYgIWJvcmRlcnNbMF0gJiYgIWJvcmRlcnNbMV07CisgICAgICAgIGlu dCBzYXZlX3VwcGVyX3JpZ2h0ID0gIWRpYWdfZWRnZVsxXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FP X0VPXzQ1RCAgJiYgIWJvcmRlcnNbMV0gJiYgIWJvcmRlcnNbMl07CisgICAgICAgIGludCBzYXZl X2xvd2VyX3JpZ2h0ID0gIWRpYWdfZWRnZVsyXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FPX0VPXzEz NUQgJiYgIWJvcmRlcnNbMl0gJiYgIWJvcmRlcnNbM107CisgICAgICAgIGludCBzYXZlX2xvd2Vy X2xlZnQgID0gIWRpYWdfZWRnZVszXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FPX0VPXzQ1RCAgJiYg IWJvcmRlcnNbMF0gJiYgIWJvcmRlcnNbM107CisKKyAgICAgICAgLy8gUmVzdG9yZSBwaXhlbHMg dGhhdCBjYW4ndCBiZSBtb2RpZmllZAorICAgICAgICBpZiAodmVydF9lZGdlWzBdICYmIHNhb19l b19jbGFzcyAhPSBTQU9fRU9fVkVSVCkgeworICAgICAgICAgICAgZm9yICh5ID0gaW5pdF95ICsg c2F2ZV91cHBlcl9sZWZ0OyB5IDwgaGVpZ2h0IC0gc2F2ZV9sb3dlcl9sZWZ0OyB5KyspCisgICAg ICAgICAgICAgICAgZHN0W3kgKiBkc3Rfc3RyaWRlXSA9IHNyY1t5ICogc3JjX3N0cmlkZV07Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKHZlcnRfZWRnZVsxXSAmJiBzYW9fZW9fY2xhc3MgIT0gU0FP X0VPX1ZFUlQpIHsKKyAgICAgICAgICAgIGZvciAoeSA9IGluaXRfeSArIHNhdmVfdXBwZXJfcmln aHQ7IHkgPCBoZWlnaHQgLSBzYXZlX2xvd2VyX3JpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAg ZHN0W3kgKiBkc3Rfc3RyaWRlICsgd2lkdGggLSAxXSA9IHNyY1t5ICogc3JjX3N0cmlkZSArIHdp ZHRoIC0gMV07CisgICAgICAgIH0KKworICAgICAgICBpZiAoaG9yaXpfZWRnZVswXSAmJiBzYW9f ZW9fY2xhc3MgIT0gU0FPX0VPX0hPUklaKSB7CisgICAgICAgICAgICBmb3IgKHggPSBpbml0X3gg KyBzYXZlX3VwcGVyX2xlZnQ7IHggPCB3aWR0aCAtIHNhdmVfdXBwZXJfcmlnaHQ7IHgrKykKKyAg ICAgICAgICAgICAgICBkc3RbeF0gPSBzcmNbeF07CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhv cml6X2VkZ2VbMV0gJiYgc2FvX2VvX2NsYXNzICE9IFNBT19FT19IT1JJWikgeworICAgICAgICAg ICAgZm9yICh4ID0gaW5pdF94ICsgc2F2ZV9sb3dlcl9sZWZ0OyB4IDwgd2lkdGggLSBzYXZlX2xv d2VyX3JpZ2h0OyB4KyspCisgICAgICAgICAgICAgICAgZHN0WyhoZWlnaHQgLSAxKSAqIGRzdF9z dHJpZGUgKyB4XSA9IHNyY1soaGVpZ2h0IC0gMSkgKiBzcmNfc3RyaWRlICsgeF07CisgICAgICAg IH0KKyAgICAgICAgaWYgKGRpYWdfZWRnZVswXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FPX0VPXzEz NUQpCisgICAgICAgICAgICBkc3RbMF0gPSBzcmNbMF07CisgICAgICAgIGlmIChkaWFnX2VkZ2Vb MV0gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT180NUQpCisgICAgICAgICAgICBkc3Rbd2lkdGgg LSAxXSA9IHNyY1t3aWR0aCAtIDFdOworICAgICAgICBpZiAoZGlhZ19lZGdlWzJdICYmIHNhb19l b19jbGFzcyA9PSBTQU9fRU9fMTM1RCkKKyAgICAgICAgICAgIGRzdFtkc3Rfc3RyaWRlICogKGhl aWdodCAtIDEpICsgd2lkdGggLSAxXSA9IHNyY1tzcmNfc3RyaWRlICogKGhlaWdodCAtIDEpICsg d2lkdGggLSAxXTsKKyAgICAgICAgaWYgKGRpYWdfZWRnZVszXSAmJiBzYW9fZW9fY2xhc3MgPT0g U0FPX0VPXzQ1RCkKKyAgICAgICAgICAgIGRzdFtkc3Rfc3RyaWRlICogKGhlaWdodCAtIDEpXSA9 IHNyY1tzcmNfc3RyaWRlICogKGhlaWdodCAtIDEpXTsKKworICAgIH0KK30KKworI3VuZGVmIENN UAorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQxNl90IEZVTkMoYWxmX2NsaXApKHBpeGVs IGN1cnIsIHBpeGVsIHYwLCBwaXhlbCB2MSwgaW50MTZfdCBjbGlwKQoreworICAgIHJldHVybiBh dl9jbGlwKHYwIC0gY3VyciwgLWNsaXAsIGNsaXApICsgYXZfY2xpcCh2MSAtIGN1cnIsIC1jbGlw LCBjbGlwKTsKK30KKworc3RhdGljIHZvaWQgRlVOQyhhbGZfZmlsdGVyX2x1bWEpKHVpbnQ4X3Qg Kl9kc3QsIHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCB1aW50OF90ICpfc3JjLCBwdHJkaWZm X3Qgc3JjX3N0cmlkZSwKKyAgICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNv bnN0IGludDE2X3QgKmZpbHRlciwgY29uc3QgaW50MTZfdCAqY2xpcCwgY29uc3QgaW50IHZiX3Bv cykKK3sKKyAgICBjb25zdCBwaXhlbCAqc3JjICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25z dCBpbnQgc2hpZnQgICAgID0gNzsKKyAgICBjb25zdCBpbnQgb2Zmc2V0ICAgID0gMSA8PCAoIHNo aWZ0IC0gMSApOworICAgIGNvbnN0IGludCB2Yl9hYm92ZSAgPSB2Yl9wb3MgLSA0OworICAgIGNv bnN0IGludCB2Yl9iZWxvdyAgPSB2Yl9wb3MgKyAzOworCisgICAgZHN0X3N0cmlkZSAvPSBzaXpl b2YocGl4ZWwpOworICAgIHNyY19zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGZvciAo aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IEFMRl9CTE9DS19TSVpFKSB7CisgICAgICAgIGZv ciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gQUxGX0JMT0NLX1NJWkUpIHsKKyAgICAgICAg ICAgIGNvbnN0IHBpeGVsICpzMCA9IHNyYyArIHkgKiBzcmNfc3RyaWRlICsgeDsKKyAgICAgICAg ICAgIGNvbnN0IHBpeGVsICpzMSA9IHMwICsgc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0 IHBpeGVsICpzMiA9IHMwIC0gc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpz MyA9IHMxICsgc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzNCA9IHMyIC0g c3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzNSA9IHMzICsgc3JjX3N0cmlk ZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzNiA9IHM0IC0gc3JjX3N0cmlkZTsKKworICAg ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBTEZfQkxPQ0tfU0laRTsgaSsrKSB7CisgICAg ICAgICAgICAgICAgcGl4ZWwgKmRzdCA9IChwaXhlbCAqKV9kc3QgKyAoeSArIGkpICogZHN0X3N0 cmlkZSArIHg7CisKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDAgPSBzMCArIGkgKiBz cmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMSA9IHMxICsgaSAqIHNy Y19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAyID0gczIgKyBpICogc3Jj X3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDMgPSBzMyArIGkgKiBzcmNf c3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwNCA9IHM0ICsgaSAqIHNyY19z dHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnA1ID0gczUgKyBpICogc3JjX3N0 cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDYgPSBzNiArIGkgKiBzcmNfc3Ry aWRlOworCisgICAgICAgICAgICAgICAgY29uc3QgaW50IGlzX25lYXJfdmJfYWJvdmUgPSAoeSAr IGkgPCAgdmJfcG9zKSAmJiAoeSArIGkgPj0gdmJfcG9zIC0gMSk7CisgICAgICAgICAgICAgICAg Y29uc3QgaW50IGlzX25lYXJfdmJfYmVsb3cgPSAoeSArIGkgPj0gdmJfcG9zKSAmJiAoeSArIGkg PD0gdmJfcG9zKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgaXNfbmVhcl92YiA9IGlzX25l YXJfdmJfYWJvdmUgfHwgaXNfbmVhcl92Yl9iZWxvdzsKKworICAgICAgICAgICAgICAgIGlmICgo eSArIGkgPCB2Yl9wb3MpICYmICgoeSArIGkpID49IHZiX2Fib3ZlKSkgeworICAgICAgICAgICAg ICAgICAgICBwMSA9ICh5ICsgaSA9PSB2Yl9wb3MgLSAxKSA/IHAwIDogcDE7CisgICAgICAgICAg ICAgICAgICAgIHAzID0gKHkgKyBpID49IHZiX3BvcyAtIDIpID8gcDEgOiBwMzsKKyAgICAgICAg ICAgICAgICAgICAgcDUgPSAoeSArIGkgPj0gdmJfcG9zIC0gMykgPyBwMyA6IHA1OworCisgICAg ICAgICAgICAgICAgICAgIHAyID0gKHkgKyBpID09IHZiX3BvcyAtIDEpID8gcDAgOiBwMjsKKyAg ICAgICAgICAgICAgICAgICAgcDQgPSAoeSArIGkgPj0gdmJfcG9zIC0gMikgPyBwMiA6IHA0Owor ICAgICAgICAgICAgICAgICAgICBwNiA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAzKSA/IHA0IDogcDY7 CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoeSArIGkgPj0gdmJfcG9zKSAmJiAoKHkgKyBp KSA8PSB2Yl9iZWxvdykpIHsKKyAgICAgICAgICAgICAgICAgICAgcDIgPSAoeSArIGkgPT0gdmJf cG9zICAgICkgPyBwMCA6IHAyOworICAgICAgICAgICAgICAgICAgICBwNCA9ICh5ICsgaSA8PSB2 Yl9wb3MgKyAxKSA/IHAyIDogcDQ7CisgICAgICAgICAgICAgICAgICAgIHA2ID0gKHkgKyBpIDw9 IHZiX3BvcyArIDIpID8gcDQgOiBwNjsKKworICAgICAgICAgICAgICAgICAgICBwMSA9ICh5ICsg aSA9PSB2Yl9wb3MgICAgKSA/IHAwIDogcDE7CisgICAgICAgICAgICAgICAgICAgIHAzID0gKHkg KyBpIDw9IHZiX3BvcyArIDEpID8gcDEgOiBwMzsKKyAgICAgICAgICAgICAgICAgICAgcDUgPSAo eSArIGkgPD0gdmJfcG9zICsgMikgPyBwMyA6IHA1OworICAgICAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgQUxGX0JMT0NLX1NJWkU7IGorKykgewor ICAgICAgICAgICAgICAgICAgICBpbnQgc3VtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY29u c3QgcGl4ZWwgY3VyciA9ICpwMDsKKworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVy WzBdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHA1WyswXSwgcDZbKzBdLCBjbGlwWzBdKTsKKyAg ICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclsxXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJy LCBwM1srMV0sIHA0Wy0xXSwgY2xpcFsxXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBm aWx0ZXJbMl0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDNbKzBdLCBwNFsrMF0sIGNsaXBbMl0p OworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzNdICAqIEZVTkMoYWxmX2NsaXAp KGN1cnIsIHAzWy0xXSwgcDRbKzFdLCBjbGlwWzNdKTsKKyAgICAgICAgICAgICAgICAgICAgc3Vt ICs9IGZpbHRlcls0XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMVsrMl0sIHAyWy0yXSwgY2xp cFs0XSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNV0gICogRlVOQyhhbGZf Y2xpcCkoY3VyciwgcDFbKzFdLCBwMlstMV0sIGNsaXBbNV0pOworICAgICAgICAgICAgICAgICAg ICBzdW0gKz0gZmlsdGVyWzZdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWyswXSwgcDJbKzBd LCBjbGlwWzZdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls3XSAgKiBGVU5D KGFsZl9jbGlwKShjdXJyLCBwMVstMV0sIHAyWysxXSwgY2xpcFs3XSk7CisgICAgICAgICAgICAg ICAgICAgIHN1bSArPSBmaWx0ZXJbOF0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFbLTJdLCBw MlsrMl0sIGNsaXBbOF0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzldICAq IEZVTkMoYWxmX2NsaXApKGN1cnIsIHAwWyszXSwgcDBbLTNdLCBjbGlwWzldKTsKKyAgICAgICAg ICAgICAgICAgICAgc3VtICs9IGZpbHRlclsxMF0gKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMFsr Ml0sIHAwWy0yXSwgY2xpcFsxMF0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVy WzExXSAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAwWysxXSwgcDBbLTFdLCBjbGlwWzExXSk7CisK KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc19uZWFyX3ZiKQorICAgICAgICAgICAgICAgICAg ICAgICAgc3VtID0gKHN1bSArIG9mZnNldCkgPj4gc2hpZnQ7CisgICAgICAgICAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1bSA9IChzdW0gKyAoMSA8PCAoKHNoaWZ0 ICsgMykgLSAxKSkpID4+IChzaGlmdCArIDMpOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0g Y3VycjsKKyAgICAgICAgICAgICAgICAgICAgZHN0W2pdID0gQ0xJUChzdW0pOworCisgICAgICAg ICAgICAgICAgICAgIHAwKys7CisgICAgICAgICAgICAgICAgICAgIHAxKys7CisgICAgICAgICAg ICAgICAgICAgIHAyKys7CisgICAgICAgICAgICAgICAgICAgIHAzKys7CisgICAgICAgICAgICAg ICAgICAgIHA0Kys7CisgICAgICAgICAgICAgICAgICAgIHA1Kys7CisgICAgICAgICAgICAgICAg ICAgIHA2Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg ZmlsdGVyICs9IEFMRl9OVU1fQ09FRkZfTFVNQTsKKyAgICAgICAgICAgIGNsaXAgKz0gQUxGX05V TV9DT0VGRl9MVU1BOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKGFs Zl9maWx0ZXJfY2hyb21hKSh1aW50OF90KiBfZHN0LCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29u c3QgdWludDhfdCogX3NyYywgcHRyZGlmZl90IHNyY19zdHJpZGUsCisgICAgY29uc3QgaW50IHdp ZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQxNl90KiBmaWx0ZXIsIGNvbnN0IGludDE2 X3QqIGNsaXAsIGNvbnN0IGludCB2Yl9wb3MpCit7CisgICAgY29uc3QgcGl4ZWwgKnNyYyA9IChw aXhlbCAqKV9zcmM7CisgICAgY29uc3QgaW50IHNoaWZ0ICA9IDc7CisgICAgY29uc3QgaW50IG9m ZnNldCA9IDEgPDwgKCBzaGlmdCAtIDEgKTsKKyAgICBjb25zdCBpbnQgdmJfYWJvdmUgID0gdmJf cG9zIC0gMjsKKyAgICBjb25zdCBpbnQgdmJfYmVsb3cgID0gdmJfcG9zICsgMTsKKworICAgIGRz 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 ICAgc3VtICs9IGZpbHRlclswXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwM1srMF0sIHA0Wysw XSwgY2xpcFswXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMV0gICogRlVO QyhhbGZfY2xpcCkoY3VyciwgcDFbKzFdLCBwMlstMV0sIGNsaXBbMV0pOworICAgICAgICAgICAg ICAgICAgICBzdW0gKz0gZmlsdGVyWzJdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWyswXSwg cDJbKzBdLCBjbGlwWzJdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclszXSAg KiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMVstMV0sIHAyWysxXSwgY2xpcFszXSk7CisgICAgICAg ICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNF0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBb KzJdLCBwMFstMl0sIGNsaXBbNF0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVy WzVdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAwWysxXSwgcDBbLTFdLCBjbGlwWzVdKTsKKwor ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzX25lYXJfdmIpCisgICAgICAgICAgICAgICAgICAg ICAgICBzdW0gPSAoc3VtICsgb2Zmc2V0KSA+PiBzaGlmdDsKKyAgICAgICAgICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3VtID0gKHN1bSArICgxIDw8ICgoc2hpZnQg KyAzKSAtIDEpKSkgPj4gKHNoaWZ0ICsgMyk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBj dXJyOworICAgICAgICAgICAgICAgICAgICBkc3Rbal0gPSBDTElQKHN1bSk7CisKKyAgICAgICAg ICAgICAgICAgICAgcDArKzsKKyAgICAgICAgICAgICAgICAgICAgcDErKzsKKyAgICAgICAgICAg ICAgICAgICAgcDIrKzsKKyAgICAgICAgICAgICAgICAgICAgcDMrKzsKKyAgICAgICAgICAgICAg ICAgICAgcDQrKzsKKyAgICAgICAgICAgICAgICAgICAgcDUrKzsKKyAgICAgICAgICAgICAgICAg ICAgcDYrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoYWxmX2ZpbHRlcl9jYykodWludDhfdCAqX2RzdCwg cHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QgKl9sdW1hLCBjb25zdCBwdHJkaWZm X3QgbHVtYV9zdHJpZGUsCisgICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBj b25zdCBpbnQgaHMsIGNvbnN0IGludCB2cywgY29uc3QgaW50MTZfdCAqZmlsdGVyLCBjb25zdCBp bnQgdmJfcG9zKQoreworICAgIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUgPSBsdW1hX3N0cmlkZSAv IHNpemVvZihwaXhlbCk7CisKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisKKyAg ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHgg PSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAgaW50IHN1bSA9IDA7CisgICAgICAg ICAgICBwaXhlbCAqZHN0ICA9IChwaXhlbCAqKV9kc3QgICsgeSAqIGRzdF9zdHJpZGUgKyB4Owor ICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnNyYyAgPSAocGl4ZWwgKilfbHVtYSArICh5IDw8IHZz KSAqIHN0cmlkZSArICh4IDw8IGhzKTsKKworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMwID0g c3JjIC0gc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMxID0gc3JjOworICAgICAg ICAgICAgY29uc3QgcGl4ZWwgKnMyID0gc3JjICsgc3RyaWRlOworICAgICAgICAgICAgY29uc3Qg cGl4ZWwgKnMzID0gc3JjICsgMiAqIHN0cmlkZTsKKworICAgICAgICAgICAgY29uc3QgaW50IHBv cyA9IHkgPDwgdnM7CisgICAgICAgICAgICBpZiAoIXZzICYmIChwb3MgPT0gdmJfcG9zIHx8IHBv cyA9PSB2Yl9wb3MgKyAxKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg ICAgaWYgKHBvcyA9PSAodmJfcG9zIC0gMikgfHwgcG9zID09ICh2Yl9wb3MgKyAxKSkKKyAgICAg ICAgICAgICAgICBzMyA9IHMyOworICAgICAgICAgICAgZWxzZSAgaWYgKHBvcyA9PSAodmJfcG9z IC0gMSkgfHwgcG9zID09IHZiX3BvcykKKyAgICAgICAgICAgICAgICBzMyA9IHMyID0gczAgPSBz MTsKKworCisgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzBdICogKCpzMCAtICpzcmMpOworICAg ICAgICAgICAgc3VtICs9IGZpbHRlclsxXSAqICgqKHMxIC0gMSkgLSAqc3JjKTsKKyAgICAgICAg ICAgIHN1bSArPSBmaWx0ZXJbMl0gKiAoKihzMSArIDEpIC0gKnNyYyk7CisgICAgICAgICAgICBz dW0gKz0gZmlsdGVyWzNdICogKCooczIgLSAxKSAtICpzcmMpOworICAgICAgICAgICAgc3VtICs9 IGZpbHRlcls0XSAqICgqczIgLSAqc3JjKTsKKyAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNV0g KiAoKihzMiArIDEpIC0gKnNyYyk7CisgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzZdICogKCpz MyAtICpzcmMpOworICAgICAgICAgICAgc3VtID0gYXZfY2xpcCgoc3VtICsgNjQpID4+IDcsIC0o MSA8PCAoQklUX0RFUFRIIC0gMSkpLCAoMSA8PCAoQklUX0RFUFRIIC0gMSkpIC0gMSk7CisgICAg ICAgICAgICBzdW0gKz0gKmRzdDsKKyAgICAgICAgICAgICpkc3QgPSBhdl9jbGlwX3BpeGVsKHN1 bSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNkZWZpbmUgQUxGX0RJUl9WRVJUICAgICAgICAw CisjZGVmaW5lIEFMRl9ESVJfSE9SWiAgICAgICAgMQorI2RlZmluZSBBTEZfRElSX0RJR0EwICAg ICAgIDIKKyNkZWZpbmUgQUxGX0RJUl9ESUdBMSAgICAgICAzCisKK3N0YXRpYyB2b2lkIEZVTkMo YWxmX2dldF9pZHgpKGludCAqY2xhc3NfaWR4LCBpbnQgKnRyYW5zcG9zZV9pZHgsIGNvbnN0IGlu dCAqc3VtLCBjb25zdCBpbnQgYWMpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBhcmdfdmFyW10g PSB7MCwgMSwgMiwgMiwgMiwgMiwgMiwgMywgMywgMywgMywgMywgMywgMywgMywgNCB9OworCisg ICAgaW50IGh2MCwgaHYxLCBkaXJfaHYsIGQwLCBkMSwgZGlyX2QsIGh2ZDEsIGh2ZDAsIHN1bV9o diwgZGlyMTsKKworICAgIGRpcl9odiA9IHN1bVtBTEZfRElSX1ZFUlRdIDw9IHN1bVtBTEZfRElS X0hPUlpdOworICAgIGh2MSAgICA9IEZGTUFYKHN1bVtBTEZfRElSX1ZFUlRdLCBzdW1bQUxGX0RJ Ul9IT1JaXSk7CisgICAgaHYwICAgID0gRkZNSU4oc3VtW0FMRl9ESVJfVkVSVF0sIHN1bVtBTEZf RElSX0hPUlpdKTsKKworICAgIGRpcl9kICA9IHN1bVtBTEZfRElSX0RJR0EwXSA8PSBzdW1bQUxG X0RJUl9ESUdBMV07CisgICAgZDEgICAgID0gRkZNQVgoc3VtW0FMRl9ESVJfRElHQTBdLCBzdW1b QUxGX0RJUl9ESUdBMV0pOworICAgIGQwICAgICA9IEZGTUlOKHN1bVtBTEZfRElSX0RJR0EwXSwg c3VtW0FMRl9ESVJfRElHQTFdKTsKKworICAgIC8vcHJvbW90ZSB0byBhdm9pZCBvdmVyZmxvdwor ICAgIGRpcjEgPSAodWludDY0X3QpZDEgKiBodjAgPD0gKHVpbnQ2NF90KWh2MSAqIGQwOworICAg IGh2ZDEgPSBkaXIxID8gaHYxIDogZDE7CisgICAgaHZkMCA9IGRpcjEgPyBodjAgOiBkMDsKKwor ICAgIHN1bV9odiA9IHN1bVtBTEZfRElSX0hPUlpdICsgc3VtW0FMRl9ESVJfVkVSVF07CisgICAg KmNsYXNzX2lkeCA9IGFyZ192YXJbYXZfY2xpcF91aW50cDIoc3VtX2h2ICogYWMgPj4gKEJJVF9E RVBUSCAtIDEpLCA0KV07CisgICAgaWYgKGh2ZDEgKiAyID4gOSAqIGh2ZDApCisgICAgICAgICpj bGFzc19pZHggKz0gKChkaXIxIDw8IDEpICsgMikgKiA1OworICAgIGVsc2UgaWYgKGh2ZDEgPiAy ICogaHZkMCkKKyAgICAgICAgKmNsYXNzX2lkeCArPSAoKGRpcjEgPDwgMSkgKyAxKSAqIDU7CisK KyAgICAqdHJhbnNwb3NlX2lkeCA9IGRpcl9kICogMiArIGRpcl9odjsKK30KKworc3RhdGljIHZv aWQgRlVOQyhhbGZfY2xhc3NpZnkpKGludCAqY2xhc3NfaWR4LCBpbnQgKnRyYW5zcG9zZV9pZHgs CisgICAgY29uc3QgdWludDhfdCAqX3NyYywgY29uc3QgcHRyZGlmZl90IF9zcmNfc3RyaWRlLCBj b25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsCisgICAgY29uc3QgaW50IHZiX3Bvcywg aW50ICpncmFkaWVudF90bXApCit7CisgICAgaW50ICpncmFkOworCisgICAgY29uc3QgaW50IGgg PSBoZWlnaHQgKyBBTEZfR1JBRElFTlRfQk9SREVSICogMjsKKyAgICBjb25zdCBpbnQgdyA9IHdp ZHRoICArIEFMRl9HUkFESUVOVF9CT1JERVIgKiAyOworICAgIGNvbnN0IGludCBzaXplID0gKEFM Rl9CTE9DS19TSVpFICsgQUxGX0dSQURJRU5UX0JPUkRFUiAqIDIpIC8gQUxGX0dSQURJRU5UX1NU RVA7CisgICAgY29uc3QgaW50IGdzdHJpZGUgPSAodyAvIEFMRl9HUkFESUVOVF9TVEVQKSAqIEFM Rl9OVU1fRElSOworCisgICAgY29uc3QgcGl4ZWwgKnNyYyAgICAgICAgICAgPSAoY29uc3QgcGl4 ZWwgKilfc3JjOworICAgIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlID0gX3NyY19zdHJpZGUg LyBzaXplb2YocGl4ZWwpOworICAgIHNyYyAtPSAoQUxGX0dSQURJRU5UX0JPUkRFUiArIDEpICog c3JjX3N0cmlkZSArIEFMRl9HUkFESUVOVF9CT1JERVI7CisKKyAgICBncmFkID0gZ3JhZGllbnRf dG1wOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSArPSBBTEZfR1JBRElFTlRfU1RFUCkg eworICAgICAgICBjb25zdCBwaXhlbCAqczAgID0gc3JjICsgeSAqIHNyY19zdHJpZGU7CisgICAg ICAgIGNvbnN0IHBpeGVsICpzMSAgPSBzMCArIHNyY19zdHJpZGU7CisgICAgICAgIGNvbnN0IHBp eGVsICpzMiAgPSBzMSArIHNyY19zdHJpZGU7CisgICAgICAgIGNvbnN0IHBpeGVsICpzMyAgPSBz MiArIHNyY19zdHJpZGU7CisKKyAgICAgICAgaWYgKHkgPT0gdmJfcG9zKSAgICAgICAgICAvL2Fi b3ZlCisgICAgICAgICAgICBzMyA9IHMyOworICAgICAgICBlbHNlIGlmICh5ID09IHZiX3BvcyAr IEFMRl9HUkFESUVOVF9CT1JERVIpCisgICAgICAgICAgICBzMCA9IHMxOworCisgICAgICAgIGZv ciAoaW50IHggPSAwOyB4IDwgdzsgeCArPSBBTEZfR1JBRElFTlRfU1RFUCkgeworICAgICAgICAg ICAgLy90d28gcG9pbnRzIGEgdGltZQorICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmEwICA9IHMw ICsgeDsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMCAgPSBzMSArIHg7CisgICAgICAgICAg ICBjb25zdCBwaXhlbCAqYjAgID0gczIgKyB4OworICAgICAgICAgICAgY29uc3QgaW50IHZhbDAg ICA9ICgqcDApIDw8IDE7CisKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICphMSAgPSBzMSArIHgg KyAxOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAxICA9IHMyICsgeCArIDE7CisgICAgICAg ICAgICBjb25zdCBwaXhlbCAqYjEgID0gczMgKyB4ICsgMTsKKyAgICAgICAgICAgIGNvbnN0IGlu dCB2YWwxICAgPSAoKnAxKSA8PCAxOworCisgICAgICAgICAgICBncmFkW0FMRl9ESVJfVkVSVF0g ID0gRkZBQlModmFsMCAtICphMCAtICpiMCkgKyBGRkFCUyh2YWwxIC0gKmExIC0gKmIxKTsKKyAg ICAgICAgICAgIGdyYWRbQUxGX0RJUl9IT1JaXSAgPSBGRkFCUyh2YWwwIC0gKihwMCAtIDEpIC0g KihwMCArIDEpKSArIEZGQUJTKHZhbDEgLSAqKHAxIC0gMSkgLSAqKHAxICsgMSkpOworICAgICAg ICAgICAgZ3JhZFtBTEZfRElSX0RJR0EwXSA9IEZGQUJTKHZhbDAgLSAqKGEwIC0gMSkgLSAqKGIw ICsgMSkpICsgRkZBQlModmFsMSAtICooYTEgLSAxKSAtICooYjEgKyAxKSk7CisgICAgICAgICAg ICBncmFkW0FMRl9ESVJfRElHQTFdID0gRkZBQlModmFsMCAtICooYTAgKyAxKSAtICooYjAgLSAx KSkgKyBGRkFCUyh2YWwxIC0gKihhMSArIDEpIC0gKihiMSAtIDEpKTsKKyAgICAgICAgICAgIGdy YWQgKz0gQUxGX05VTV9ESVI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCB5ID0g MDsgeSA8IGhlaWdodCA7IHkgKz0gQUxGX0JMT0NLX1NJWkUgKSB7CisgICAgICAgIGludCBzdGFy dCA9IDA7CisgICAgICAgIGludCBlbmQgICA9IChBTEZfQkxPQ0tfU0laRSArIEFMRl9HUkFESUVO VF9CT1JERVIgKiAyKSAvIEFMRl9HUkFESUVOVF9TVEVQOworICAgICAgICBpbnQgYWMgICAgPSAy OworICAgICAgICBpZiAoeSArIEFMRl9CTE9DS19TSVpFID09IHZiX3BvcykgeworICAgICAgICAg ICAgZW5kIC09IEFMRl9HUkFESUVOVF9CT1JERVIgLyBBTEZfR1JBRElFTlRfU1RFUDsKKyAgICAg ICAgICAgIGFjID0gMzsKKyAgICAgICAgfSBlbHNlIGlmICh5ID09IHZiX3BvcykgeworICAgICAg ICAgICAgc3RhcnQgKz0gQUxGX0dSQURJRU5UX0JPUkRFUiAvIEFMRl9HUkFESUVOVF9TVEVQOwor ICAgICAgICAgICAgYWMgPSAzOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4 IDwgd2lkdGg7IHggKz0gQUxGX0JMT0NLX1NJWkUpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCB4 ZyA9IHggLyBBTEZfR1JBRElFTlRfU1RFUDsKKyAgICAgICAgICAgIGNvbnN0IGludCB5ZyA9IHkg LyBBTEZfR1JBRElFTlRfU1RFUDsKKyAgICAgICAgICAgIGludCBzdW1bQUxGX05VTV9ESVJdID0g eyAwIH07CisKKyAgICAgICAgICAgIGdyYWQgPSBncmFkaWVudF90bXAgKyAoeWcgKyBzdGFydCkg KiBnc3RyaWRlICsgeGcgKiBBTEZfTlVNX0RJUjsKKyAgICAgICAgICAgIC8vdG9kbzogb3B0aW1p emUgdGhpcyBsb29wCisgICAgICAgICAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkr KykgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7Cisg ICAgICAgICAgICAgICAgICAgIHN1bVtBTEZfRElSX1ZFUlRdICArPSBncmFkW0FMRl9ESVJfVkVS VF07CisgICAgICAgICAgICAgICAgICAgIHN1bVtBTEZfRElSX0hPUlpdICArPSBncmFkW0FMRl9E SVJfSE9SWl07CisgICAgICAgICAgICAgICAgICAgIHN1bVtBTEZfRElSX0RJR0EwXSArPSBncmFk W0FMRl9ESVJfRElHQTBdOworICAgICAgICAgICAgICAgICAgICBzdW1bQUxGX0RJUl9ESUdBMV0g Kz0gZ3JhZFtBTEZfRElSX0RJR0ExXTsKKyAgICAgICAgICAgICAgICAgICAgZ3JhZCArPSBBTEZf TlVNX0RJUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ3JhZCArPSBnc3Ry aWRlIC0gc2l6ZSAqIEFMRl9OVU1fRElSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlVO QyhhbGZfZ2V0X2lkeCkoY2xhc3NfaWR4LCB0cmFuc3Bvc2VfaWR4LCBzdW0sIGFjKTsKKworICAg ICAgICAgICAgY2xhc3NfaWR4Kys7CisgICAgICAgICAgICB0cmFuc3Bvc2VfaWR4Kys7CisgICAg ICAgIH0KKyAgICB9CisKK30KKworc3RhdGljIHZvaWQgRlVOQyhhbGZfcmVjb25fY29lZmZfYW5k X2NsaXApKGludDE2X3QgKmNvZWZmLCBpbnQxNl90ICpjbGlwLAorICAgIGNvbnN0IGludCAqY2xh c3NfaWR4LCBjb25zdCBpbnQgKnRyYW5zcG9zZV9pZHgsIGNvbnN0IGludCBzaXplLAorICAgIGNv bnN0IGludDE2X3QgKmNvZWZmX3NldCwgY29uc3QgdWludDhfdCAqY2xpcF9pZHhfc2V0LCBjb25z dCB1aW50OF90ICpjbGFzc190b19maWx0KQoreworICAgIGNvbnN0IHN0YXRpYyBpbnQgaW5kZXhb XVtBTEZfTlVNX0NPRUZGX0xVTUFdID0geworICAgICAgICB7IDAsIDEsIDIsIDMsIDQsIDUsIDYs IDcsIDgsIDksIDEwLCAxMSB9LAorICAgICAgICB7IDksIDQsIDEwLCA4LCAxLCA1LCAxMSwgNywg MywgMCwgMiwgNiB9LAorICAgICAgICB7IDAsIDMsIDIsIDEsIDgsIDcsIDYsIDUsIDQsIDksIDEw LCAxMSB9LAorICAgICAgICB7IDksIDgsIDEwLCA0LCAzLCA3LCAxMSwgNSwgMSwgMCwgMiwgNiB9 LAorICAgIH07CisKKyAgICBjb25zdCBpbnQxNl90IGNsaXBfc2V0W10gPSB7CisgICAgICAgIDEg PDwgQklUX0RFUFRILCAxIDw8IChCSVRfREVQVEggLSAzKSwgMSA8PCAoQklUX0RFUFRIIC0gNSks IDEgPDwgKEJJVF9ERVBUSCAtIDcpCisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg c2l6ZTsgaSsrKSB7CisgICAgICAgIGNvbnN0IGludDE2X3QgICpzcmNfY29lZmYgPSBjb2VmZl9z ZXQgKyBjbGFzc190b19maWx0W2NsYXNzX2lkeFtpXV0gKiBBTEZfTlVNX0NPRUZGX0xVTUE7Cisg ICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNsaXBfaWR4ICA9IGNsaXBfaWR4X3NldCArIGNsYXNzX2lk eFtpXSAqIEFMRl9OVU1fQ09FRkZfTFVNQTsKKworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8 IEFMRl9OVU1fQ09FRkZfTFVNQTsgaisrKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgaWR4ID0g aW5kZXhbdHJhbnNwb3NlX2lkeFtpXV1bal07CisgICAgICAgICAgICAqY29lZmYrKyA9IHNyY19j b2VmZltpZHhdOworICAgICAgICAgICAgKmNsaXArKyAgPSBjbGlwX3NldFtjbGlwX2lkeFtpZHhd XTsKKyAgICAgICAgfQorICAgIH0KK30KKworI3VuZGVmIEFMRl9ESVJfSE9SWgorI3VuZGVmIEFM Rl9ESVJfVkVSVAorI3VuZGVmIEFMRl9ESVJfRElHQTAKKyN1bmRlZiBBTEZfRElSX0RJR0ExCisK Ky8vIGxpbmUgemVybworI2RlZmluZSBQNyBwaXhbLTggKiB4c3RyaWRlXQorI2RlZmluZSBQNiBw aXhbLTcgKiB4c3RyaWRlXQorI2RlZmluZSBQNSBwaXhbLTYgKiB4c3RyaWRlXQorI2RlZmluZSBQ NCBwaXhbLTUgKiB4c3RyaWRlXQorI2RlZmluZSBQMyBwaXhbLTQgKiB4c3RyaWRlXQorI2RlZmlu ZSBQMiBwaXhbLTMgKiB4c3RyaWRlXQorI2RlZmluZSBQMSBwaXhbLTIgKiB4c3RyaWRlXQorI2Rl ZmluZSBQMCBwaXhbLTEgKiB4c3RyaWRlXQorI2RlZmluZSBRMCBwaXhbMCAqIHhzdHJpZGVdCisj ZGVmaW5lIFExIHBpeFsxICogeHN0cmlkZV0KKyNkZWZpbmUgUTIgcGl4WzIgKiB4c3RyaWRlXQor I2RlZmluZSBRMyBwaXhbMyAqIHhzdHJpZGVdCisjZGVmaW5lIFE0IHBpeFs0ICogeHN0cmlkZV0K KyNkZWZpbmUgUTUgcGl4WzUgKiB4c3RyaWRlXQorI2RlZmluZSBRNiBwaXhbNiAqIHhzdHJpZGVd CisjZGVmaW5lIFE3IHBpeFs3ICogeHN0cmlkZV0KKyNkZWZpbmUgUCh4KSBwaXhbKC0oeCktMSkg KiB4c3RyaWRlXQorI2RlZmluZSBRKHgpIHBpeFsoeCkgICAgICAqIHhzdHJpZGVdCisKKy8vIGxp bmUgdGhyZWUuIHVzZWQgb25seSBmb3IgZGVibG9ja2luZyBkZWNpc2lvbgorI2RlZmluZSBUUDcg cGl4Wy04ICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUDYgcGl4Wy03ICogeHN0 cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUDUgcGl4Wy02ICogeHN0cmlkZSArIDMgKiB5 c3RyaWRlXQorI2RlZmluZSBUUDQgcGl4Wy01ICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2Rl ZmluZSBUUDMgcGl4Wy00ICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUDIgcGl4 Wy0zICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUDEgcGl4Wy0yICogeHN0cmlk ZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUDAgcGl4Wy0xICogeHN0cmlkZSArIDMgKiB5c3Ry aWRlXQorI2RlZmluZSBUUTAgcGl4WzAgICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmlu ZSBUUTEgcGl4WzEgICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUTIgcGl4WzIg ICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUTMgcGl4WzMgICogeHN0cmlkZSAr IDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUTQgcGl4WzQgICogeHN0cmlkZSArIDMgKiB5c3RyaWRl XQorI2RlZmluZSBUUTUgcGl4WzUgICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBU UTYgcGl4WzYgICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUTcgcGl4WzcgICog eHN0cmlkZSArIDMgKiB5c3RyaWRlXQorI2RlZmluZSBUUCh4KSBwaXhbKC0oeCktMSkgKiB4c3Ry aWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRKHgpIHBpeFsoeCkgICAgICAqIHhzdHJpZGUg KyAzICogeXN0cmlkZV0KKworI2RlZmluZSBGUDMgcGl4Wy00ICogeHN0cmlkZSArIDEgKiB5c3Ry aWRlXQorI2RlZmluZSBGUDIgcGl4Wy0zICogeHN0cmlkZSArIDEgKiB5c3RyaWRlXQorI2RlZmlu ZSBGUDEgcGl4Wy0yICogeHN0cmlkZSArIDEgKiB5c3RyaWRlXQorI2RlZmluZSBGUDAgcGl4Wy0x ICogeHN0cmlkZSArIDEgKiB5c3RyaWRlXQorI2RlZmluZSBGUTAgcGl4WzAgICogeHN0cmlkZSAr IDEgKiB5c3RyaWRlXQorI2RlZmluZSBGUTEgcGl4WzEgICogeHN0cmlkZSArIDEgKiB5c3RyaWRl XQorI2RlZmluZSBGUTIgcGl4WzIgICogeHN0cmlkZSArIDEgKiB5c3RyaWRlXQorI2RlZmluZSBG UTMgcGl4WzMgICogeHN0cmlkZSArIDEgKiB5c3RyaWRlXQorCitzdGF0aWMgdm9pZCBGVU5DKGxv b3BfZmlsdGVyX2x1bWFfbGFyZ2UpKHBpeGVsICpwaXgsIGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRl LCBjb25zdCBwdHJkaWZmX3QgeXN0cmlkZSwgY29uc3QgaW50MzJfdCB0YywKKyAgICBjb25zdCB1 aW50OF90IG5vX3AsIGNvbnN0IHVpbnQ4X3Qgbm9fcSwgY29uc3QgdWludDhfdCBtYXhfbGVuX3As IGNvbnN0IHVpbnQ4X3QgbWF4X2xlbl9xKQoreworICAgIGZvciAoaW50IGQgPSAwOyBkIDwgNDsg ZCsrKSB7CisgICAgICAgIGNvbnN0IGludCBwNiA9IFA2OworICAgICAgICBjb25zdCBpbnQgcDUg PSBQNTsKKyAgICAgICAgY29uc3QgaW50IHA0ID0gUDQ7CisgICAgICAgIGNvbnN0IGludCBwMyA9 IFAzOworICAgICAgICBjb25zdCBpbnQgcDIgPSBQMjsKKyAgICAgICAgY29uc3QgaW50IHAxID0g UDE7CisgICAgICAgIGNvbnN0IGludCBwMCA9IFAwOworICAgICAgICBjb25zdCBpbnQgcTAgPSBR MDsKKyAgICAgICAgY29uc3QgaW50IHExID0gUTE7CisgICAgICAgIGNvbnN0IGludCBxMiA9IFEy OworICAgICAgICBjb25zdCBpbnQgcTMgPSBRMzsKKyAgICAgICAgY29uc3QgaW50IHE0ID0gUTQ7 CisgICAgICAgIGNvbnN0IGludCBxNSA9IFE1OworICAgICAgICBjb25zdCBpbnQgcTYgPSBRNjsK KyAgICAgICAgaW50IG07CisgICAgICAgIGlmIChtYXhfbGVuX3AgPT0gNSAmJiBtYXhfbGVuX3Eg PT0gNSkKKyAgICAgICAgICAgIG0gPSAocDQgKyBwMyArIDIgKiAocDIgKyBwMSArIHAwICsgcTAg KyBxMSArIHEyKSArIHEzICsgcTQgKyA4KSA+PiA0OworICAgICAgICBlbHNlIGlmIChtYXhfbGVu X3AgPT0gbWF4X2xlbl9xKQorICAgICAgICAgICAgbSA9IChwNiArIHA1ICsgcDQgKyBwMyArIHAy ICsgcDEgKyAyICogKHAwICsgcTApICsgcTEgKyBxMiArIHEzICsgcTQgKyBxNSArIHE2ICsgOCkg Pj4gNDsKKyAgICAgICAgZWxzZSBpZiAobWF4X2xlbl9wICsgbWF4X2xlbl9xID09IDEyKQorICAg ICAgICAgICAgbSA9IChwNSArIHA0ICsgcDMgKyBwMiArIDIgKiAocDEgKyBwMCArIHEwICsgcTEp ICsgcTIgKyBxMyArIHE0ICsgcTUgKyA4KSA+PiA0OworICAgICAgICBlbHNlIGlmIChtYXhfbGVu X3AgKyBtYXhfbGVuX3EgPT0gOCkKKyAgICAgICAgICAgIG0gPSAocDMgKyBwMiArIHAxICsgcDAg KyBxMCArIHExICsgcTIgKyBxMyArIDQpID4+IDM7CisgICAgICAgIGVsc2UgaWYgKG1heF9sZW5f cSA9PSA3KQorICAgICAgICAgICAgbSA9ICgyICogKHAyICsgcDEgKyBwMCArIHEwKSArIHAwICsg cDEgKyBxMSArIHEyICsgcTMgKyBxNCArIHE1ICsgcTYgKyA4KSA+PiA0OworICAgICAgICBlbHNl CisgICAgICAgICAgICBtID0gKHA2ICsgcDUgKyBwNCArIHAzICsgcDIgKyBwMSArIDIgKiAocTIg KyBxMSArIHEwICsgcDApICsgcTAgKyBxMSArIDgpID4+IDQ7CisgICAgICAgIGlmICghbm9fcCkg eworICAgICAgICAgICAgY29uc3QgaW50IHJlZnAgPSAoUChtYXhfbGVuX3ApICsgUChtYXhfbGVu X3AgLSAxKSArIDEpID4+IDE7CisgICAgICAgICAgICBpZiAobWF4X2xlbl9wID09IDMpIHsKKyAg ICAgICAgICAgICAgICBQMCA9IHAwICsgYXZfY2xpcCgoKG0gKiA1MyArIHJlZnAgKiAxMSArIDMy KSA+PiA2KSAtIHAwLCAtKHRjICogNiA+PiAxKSwgKHRjICogNiA+PiAxKSk7CisgICAgICAgICAg ICAgICAgUDEgPSBwMSArIGF2X2NsaXAoKChtICogMzIgKyByZWZwICogMzIgKyAzMikgPj4gNikg LSBwMSwgLSh0YyAqIDQgPj4gMSksICh0YyAqIDQgPj4gMSkpOworICAgICAgICAgICAgICAgIFAy ID0gcDIgKyBhdl9jbGlwKCgobSAqIDExICsgcmVmcCAqIDUzICsgMzIpID4+IDYpIC0gcDIsIC0o dGMgKiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF4 X2xlbl9wID09IDUpIHsKKyAgICAgICAgICAgICAgICBQMCA9IHAwICsgYXZfY2xpcCgoKG0gKiA1 OCArIHJlZnAgKiAgNiArIDMyKSA+PiA2KSAtIHAwLCAtKHRjICogNiA+PiAxKSwgKHRjICogNiA+ PiAxKSk7CisgICAgICAgICAgICAgICAgUDEgPSBwMSArIGF2X2NsaXAoKChtICogNDUgKyByZWZw ICogMTkgKyAzMikgPj4gNikgLSBwMSwgLSh0YyAqIDUgPj4gMSksICh0YyAqIDUgPj4gMSkpOwor ICAgICAgICAgICAgICAgIFAyID0gcDIgKyBhdl9jbGlwKCgobSAqIDMyICsgcmVmcCAqIDMyICsg MzIpID4+IDYpIC0gcDIsIC0odGMgKiA0ID4+IDEpLCAodGMgKiA0ID4+IDEpKTsKKyAgICAgICAg ICAgICAgICBQMyA9IHAzICsgYXZfY2xpcCgoKG0gKiAxOSArIHJlZnAgKiA0NSArIDMyKSA+PiA2 KSAtIHAzLCAtKHRjICogMyA+PiAxKSwgKHRjICogMyA+PiAxKSk7CisgICAgICAgICAgICAgICAg UDQgPSBwNCArIGF2X2NsaXAoKChtICogIDYgKyByZWZwICogNTggKyAzMikgPj4gNikgLSBwNCwg LSh0YyAqIDIgPj4gMSksICh0YyAqIDIgPj4gMSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBQMCA9IHAwICsgYXZfY2xpcCgoKG0gKiA1OSArIHJlZnAgKiAgNSArIDMy KSA+PiA2KSAtIHAwLCAtKHRjICogNiA+PiAxKSwgKHRjICogNiA+PiAxKSk7CisgICAgICAgICAg ICAgICAgUDEgPSBwMSArIGF2X2NsaXAoKChtICogNTAgKyByZWZwICogMTQgKyAzMikgPj4gNikg LSBwMSwgLSh0YyAqIDUgPj4gMSksICh0YyAqIDUgPj4gMSkpOworICAgICAgICAgICAgICAgIFAy ID0gcDIgKyBhdl9jbGlwKCgobSAqIDQxICsgcmVmcCAqIDIzICsgMzIpID4+IDYpIC0gcDIsIC0o dGMgKiA0ID4+IDEpLCAodGMgKiA0ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQMyA9IHAzICsg YXZfY2xpcCgoKG0gKiAzMiArIHJlZnAgKiAzMiArIDMyKSA+PiA2KSAtIHAzLCAtKHRjICogMyA+ PiAxKSwgKHRjICogMyA+PiAxKSk7CisgICAgICAgICAgICAgICAgUDQgPSBwNCArIGF2X2NsaXAo KChtICogMjMgKyByZWZwICogNDEgKyAzMikgPj4gNikgLSBwNCwgLSh0YyAqIDIgPj4gMSksICh0 YyAqIDIgPj4gMSkpOworICAgICAgICAgICAgICAgIFA1ID0gcDUgKyBhdl9jbGlwKCgobSAqIDE0 ICsgcmVmcCAqIDUwICsgMzIpID4+IDYpIC0gcDUsIC0odGMgKiAxID4+IDEpLCAodGMgKiAxID4+ IDEpKTsKKyAgICAgICAgICAgICAgICBQNiA9IHA2ICsgYXZfY2xpcCgoKG0gKiAgNSArIHJlZnAg KiA1OSArIDMyKSA+PiA2KSAtIHA2LCAtKHRjICogMSA+PiAxKSwgKHRjICogMSA+PiAxKSk7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFub19xKSB7CisgICAgICAgICAg ICBjb25zdCBpbnQgcmVmcSA9IChRKG1heF9sZW5fcSkgKyBRKG1heF9sZW5fcSAtIDEpICsgMSkg Pj4gMTsKKyAgICAgICAgICAgIGlmIChtYXhfbGVuX3EgPT0gMykgeworICAgICAgICAgICAgICAg IFEwID0gcTAgKyBhdl9jbGlwKCgobSAqIDUzICsgcmVmcSAqIDExICsgMzIpID4+IDYpIC0gcTAs ICAtKHRjICogNiA+PiAxKSwgKHRjICogNiA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTEgPSBx MSArIGF2X2NsaXAoKChtICogMzIgKyByZWZxICogMzIgKyAzMikgPj4gNikgLSBxMSwgIC0odGMg KiA0ID4+IDEpLCAodGMgKiA0ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRMiA9IHEyICsgYXZf Y2xpcCgoKG0gKiAxMSArIHJlZnEgKiA1MyArIDMyKSA+PiA2KSAtIHEyLCAgLSh0YyAqIDIgPj4g MSksICh0YyAqIDIgPj4gMSkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXhfbGVuX3EgPT0g NSkgeworICAgICAgICAgICAgICAgIFEwID0gcTAgKyBhdl9jbGlwKCgobSAqIDU4ICsgcmVmcSAq ICA2ICsgMzIpID4+IDYpIC0gcTAsIC0odGMgKiA2ID4+IDEpLCAodGMgKiA2ID4+IDEpKTsKKyAg ICAgICAgICAgICAgICBRMSA9IHExICsgYXZfY2xpcCgoKG0gKiA0NSArIHJlZnEgKiAxOSArIDMy KSA+PiA2KSAtIHExLCAtKHRjICogNSA+PiAxKSwgKHRjICogNSA+PiAxKSk7CisgICAgICAgICAg ICAgICAgUTIgPSBxMiArIGF2X2NsaXAoKChtICogMzIgKyByZWZxICogMzIgKyAzMikgPj4gNikg LSBxMiwgLSh0YyAqIDQgPj4gMSksICh0YyAqIDQgPj4gMSkpOworICAgICAgICAgICAgICAgIFEz ID0gcTMgKyBhdl9jbGlwKCgobSAqIDE5ICsgcmVmcSAqIDQ1ICsgMzIpID4+IDYpIC0gcTMsIC0o dGMgKiAzID4+IDEpLCAodGMgKiAzID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRNCA9IHE0ICsg YXZfY2xpcCgoKG0gKiAgNiArIHJlZnEgKiA1OCArIDMyKSA+PiA2KSAtIHE0LCAtKHRjICogMiA+ PiAxKSwgKHRjICogMiA+PiAxKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIFEwID0gcTAgKyBhdl9jbGlwKCgobSAqIDU5ICsgcmVmcSAqICA1ICsgMzIpID4+IDYpIC0g cTAsIC0odGMgKiA2ID4+IDEpLCAodGMgKiA2ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRMSA9 IHExICsgYXZfY2xpcCgoKG0gKiA1MCArIHJlZnEgKiAxNCArIDMyKSA+PiA2KSAtIHExLCAtKHRj ICogNSA+PiAxKSwgKHRjICogNSA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTIgPSBxMiArIGF2 X2NsaXAoKChtICogNDEgKyByZWZxICogMjMgKyAzMikgPj4gNikgLSBxMiwgLSh0YyAqIDQgPj4g MSksICh0YyAqIDQgPj4gMSkpOworICAgICAgICAgICAgICAgIFEzID0gcTMgKyBhdl9jbGlwKCgo bSAqIDMyICsgcmVmcSAqIDMyICsgMzIpID4+IDYpIC0gcTMsIC0odGMgKiAzID4+IDEpLCAodGMg KiAzID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRNCA9IHE0ICsgYXZfY2xpcCgoKG0gKiAyMyAr IHJlZnEgKiA0MSArIDMyKSA+PiA2KSAtIHE0LCAtKHRjICogMiA+PiAxKSwgKHRjICogMiA+PiAx KSk7CisgICAgICAgICAgICAgICAgUTUgPSBxNSArIGF2X2NsaXAoKChtICogMTQgKyByZWZxICog NTAgKyAzMikgPj4gNikgLSBxNSwgLSh0YyAqIDEgPj4gMSksICh0YyAqIDEgPj4gMSkpOworICAg ICAgICAgICAgICAgIFE2ID0gcTYgKyBhdl9jbGlwKCgobSAqICA1ICsgcmVmcSAqIDU5ICsgMzIp ID4+IDYpIC0gcTYsIC0odGMgKiAxID4+IDEpLCAodGMgKiAxID4+IDEpKTsKKyAgICAgICAgICAg IH0KKworICAgICAgICB9CisgICAgICAgIHBpeCArPSB5c3RyaWRlOworICAgIH0KK30KKworc3Rh dGljIHZvaWQgRlVOQyhsb29wX2ZpbHRlcl9sdW1hX3N0cm9uZykocGl4ZWwgKnBpeCwgY29uc3Qg cHRyZGlmZl90IHhzdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlLCBjb25zdCBpbnQzMl90 IHRjLAorICAgIGNvbnN0IHVpbnQ4X3Qgbm9fcCwgY29uc3QgdWludDhfdCBub19xKQoreworICAg IGNvbnN0IGludCB0YzIgPSB0YyA8PCAxOworICAgIGNvbnN0IGludCB0YzMgPSB0YyAqIDM7Cisg ICAgZm9yIChpbnQgZCA9IDA7IGQgPCA0OyBkKyspIHsKKyAgICAgICAgY29uc3QgaW50IHAzID0g UDM7CisgICAgICAgIGNvbnN0IGludCBwMiA9IFAyOworICAgICAgICBjb25zdCBpbnQgcDEgPSBQ MTsKKyAgICAgICAgY29uc3QgaW50IHAwID0gUDA7CisgICAgICAgIGNvbnN0IGludCBxMCA9IFEw OworICAgICAgICBjb25zdCBpbnQgcTEgPSBRMTsKKyAgICAgICAgY29uc3QgaW50IHEyID0gUTI7 CisgICAgICAgIGNvbnN0IGludCBxMyA9IFEzOworICAgICAgICBpZiAoIW5vX3ApIHsKKyAgICAg ICAgICAgIFAwID0gcDAgKyBhdl9jbGlwKCgocDIgKyAyICogcDEgKyAyICogcDAgKyAyICogcTAg KyBxMSArIDQpID4+IDMpIC0gcDAsIC10YzMsIHRjMyk7CisgICAgICAgICAgICBQMSA9IHAxICsg YXZfY2xpcCgoKHAyICsgcDEgKyBwMCArIHEwICsgMikgPj4gMikgLSBwMSwgLXRjMiwgdGMyKTsK KyAgICAgICAgICAgIFAyID0gcDIgKyBhdl9jbGlwKCgoMiAqIHAzICsgMyAqIHAyICsgcDEgKyBw MCArIHEwICsgNCkgPj4gMykgLSBwMiwgLXRjLCB0Yyk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KCFub19xKSB7CisgICAgICAgICAgICBRMCA9IHEwICsgYXZfY2xpcCgoKHAxICsgMiAqIHAwICsg MiAqIHEwICsgMiAqIHExICsgcTIgKyA0KSA+PiAzKSAtIHEwLCAtdGMzLCB0YzMpOworICAgICAg ICAgICAgUTEgPSBxMSArIGF2X2NsaXAoKChwMCArIHEwICsgcTEgKyBxMiArIDIpID4+IDIpIC0g cTEsIC10YzIsIHRjMik7CisgICAgICAgICAgICBRMiA9IHEyICsgYXZfY2xpcCgoKDIgKiBxMyAr IDMgKiBxMiArIHExICsgcTAgKyBwMCArIDQpID4+IDMpIC0gcTIsIC10YywgdGMpOworICAgICAg ICB9CisgICAgICAgIHBpeCArPSB5c3RyaWRlOworICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVO Qyhsb29wX2ZpbHRlcl9sdW1hX3dlYWspKHBpeGVsICpwaXgsIGNvbnN0IHB0cmRpZmZfdCB4c3Ry aWRlLCBjb25zdCBwdHJkaWZmX3QgeXN0cmlkZSwKKyAgICBjb25zdCBpbnQzMl90IHRjLCBjb25z dCBpbnQzMl90IGJldGEsIGNvbnN0IHVpbnQ4X3Qgbm9fcCwgY29uc3QgdWludDhfdCBub19xLCBj b25zdCBpbnQgbmRfcCwgY29uc3QgaW50IG5kX3EpCit7CisgICAgY29uc3QgaW50IHRjXzIgPSB0 YyA+PiAxOworICAgIGZvciAoaW50IGQgPSAwOyBkIDwgNDsgZCsrKSB7CisgICAgICAgIGNvbnN0 IGludCBwMiA9IFAyOworICAgICAgICBjb25zdCBpbnQgcDEgPSBQMTsKKyAgICAgICAgY29uc3Qg aW50IHAwID0gUDA7CisgICAgICAgIGNvbnN0IGludCBxMCA9IFEwOworICAgICAgICBjb25zdCBp bnQgcTEgPSBRMTsKKyAgICAgICAgY29uc3QgaW50IHEyID0gUTI7CisgICAgICAgIGludCBkZWx0 YTAgPSAoOSAqIChxMCAtIHAwKSAtIDMgKiAocTEgLSBwMSkgKyA4KSA+PiA0OworICAgICAgICBp ZiAoYWJzKGRlbHRhMCkgPCAxMCAqIHRjKSB7CisgICAgICAgICAgICBkZWx0YTAgPSBhdl9jbGlw KGRlbHRhMCwgLXRjLCB0Yyk7CisgICAgICAgICAgICBpZiAoIW5vX3ApCisgICAgICAgICAgICAg ICAgUDAgPSBhdl9jbGlwX3BpeGVsKHAwICsgZGVsdGEwKTsKKyAgICAgICAgICAgIGlmICghbm9f cSkKKyAgICAgICAgICAgICAgICBRMCA9IGF2X2NsaXBfcGl4ZWwocTAgLSBkZWx0YTApOworICAg ICAgICAgICAgaWYgKCFub19wICYmIG5kX3AgPiAxKSB7CisgICAgICAgICAgICAgICAgY29uc3Qg aW50IGRlbHRhcDEgPSBhdl9jbGlwKCgoKHAyICsgcDAgKyAxKSA+PiAxKSAtIHAxICsgZGVsdGEw KSA+PiAxLCAtdGNfMiwgdGNfMik7CisgICAgICAgICAgICAgICAgUDEgPSBhdl9jbGlwX3BpeGVs KHAxICsgZGVsdGFwMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW5vX3EgJiYg bmRfcSA+IDEpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgZGVsdGFxMSA9IGF2X2NsaXAo KCgocTIgKyBxMCArIDEpID4+IDEpIC0gcTEgLSBkZWx0YTApID4+IDEsIC10Y18yLCB0Y18yKTsK KyAgICAgICAgICAgICAgICBRMSA9IGF2X2NsaXBfcGl4ZWwocTEgKyBkZWx0YXExKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwaXggKz0geXN0cmlkZTsKKyAgICB9CisKK30K Kworc3RhdGljIHZvaWQgRlVOQyh2dmNfbG9vcF9maWx0ZXJfbHVtYSkodWludDhfdCogX3BpeCwg cHRyZGlmZl90IF94c3RyaWRlLCBwdHJkaWZmX3QgX3lzdHJpZGUsCisgICAgY29uc3QgaW50MzJf dCAqX2JldGEsIGNvbnN0IGludDMyX3QgKl90YywgY29uc3QgdWludDhfdCAqX25vX3AsIGNvbnN0 IHVpbnQ4X3QgKl9ub19xLAorICAgIGNvbnN0IHVpbnQ4X3QgKl9tYXhfbGVuX3AsIGNvbnN0IHVp bnQ4X3QgKl9tYXhfbGVuX3EsIGludCBob3JfY3R1X2VkZ2UpCit7CisgICAgY29uc3QgcHRyZGlm Zl90IHhzdHJpZGUgPSBfeHN0cmlkZSAvIHNpemVvZihwaXhlbCk7CisgICAgY29uc3QgcHRyZGlm Zl90IHlzdHJpZGUgPSBfeXN0cmlkZSAvIHNpemVvZihwaXhlbCk7CisKKyAgICBmb3IgKGludCBp ID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBwaXhlbCogcGl4ICAgICAgPSAocGl4ZWwqKV9w aXggKyBpICogNCAqIHlzdHJpZGU7CisgICAgICAgIGNvbnN0IGludCBkcDAgICA9IGFicyhQMiAt IDIgKiBQMSArIFAwKTsKKyAgICAgICAgY29uc3QgaW50IGRxMCAgID0gYWJzKFEyIC0gMiAqIFEx ICsgUTApOworICAgICAgICBjb25zdCBpbnQgZHAzICAgPSBhYnMoVFAyIC0gMiAqIFRQMSArIFRQ MCk7CisgICAgICAgIGNvbnN0IGludCBkcTMgICA9IGFicyhUUTIgLSAyICogVFExICsgVFEwKTsK KyAgICAgICAgY29uc3QgaW50IGQwICAgID0gZHAwICsgZHEwOworICAgICAgICBjb25zdCBpbnQg ZDMgICAgPSBkcDMgKyBkcTM7CisjaWYgQklUX0RFUFRIIDwgMTAKKyAgICAgICAgY29uc3QgaW50 IHRjICAgID0gKF90Y1tpXSArICgxIDw8ICg5IC0gQklUX0RFUFRIKSkpID4+ICgxMCAtIEJJVF9E RVBUSCk7CisjZWxzZQorICAgICAgICBjb25zdCBpbnQgdGMgICAgPSBfdGNbaV0gPDwgKEJJVF9E RVBUSCAtIDEwKTsKKyNlbmRpZgorICAgICAgICBjb25zdCBpbnQgdGMyNSAgPSAoKHRjICogNSAr IDEpID4+IDEpOworCisgICAgICAgIGNvbnN0IGludCBub19wICA9IF9ub19wW2ldOworICAgICAg ICBjb25zdCBpbnQgbm9fcSAgPSBfbm9fcVtpXTsKKworICAgICAgICBpbnQgbWF4X2xlbl9wICAg PSBfbWF4X2xlbl9wW2ldOworICAgICAgICBpbnQgbWF4X2xlbl9xICAgPSBfbWF4X2xlbl9xW2ld OworCisgICAgICAgIGNvbnN0IGludCBsYXJnZV9wID0gKG1heF9sZW5fcCA+IDMgJiYgIWhvcl9j dHVfZWRnZSk7CisgICAgICAgIGNvbnN0IGludCBsYXJnZV9xID0gbWF4X2xlbl9xID4gMzsKKyAg ICAgICAgY29uc3QgaW50IGJldGEgPSBfYmV0YVtpXSA8PCBCSVRfREVQVEggLSA4OworCisgICAg ICAgIGNvbnN0IGludCBiZXRhXzMgPSBiZXRhID4+IDM7CisgICAgICAgIGNvbnN0IGludCBiZXRh XzIgPSBiZXRhID4+IDI7CisKKyAgICAgICAgaWYgKCF0YykKKyAgICAgICAgICAgIGNvbnRpbnVl OworCisgICAgICAgIGlmIChsYXJnZV9wIHx8IGxhcmdlX3EpIHsKKyAgICAgICAgICAgIGNvbnN0 IGludCBkcDBsID0gbGFyZ2VfcCA/ICgoZHAwICsgYWJzKFA1IC0gMiAqIFA0ICsgUDMpICsgMSkg Pj4gMSkgOiBkcDA7CisgICAgICAgICAgICBjb25zdCBpbnQgZHEwbCA9IGxhcmdlX3EgPyAoKGRx MCArIGFicyhRNSAtIDIgKiBRNCArIFEzKSArIDEpID4+IDEpIDogZHEwOworICAgICAgICAgICAg Y29uc3QgaW50IGRwM2wgPSBsYXJnZV9wID8gKChkcDMgKyBhYnMoVFA1IC0gMiAqIFRQNCArIFRQ MykgKyAxKSA+PiAxKSA6IGRwMzsKKyAgICAgICAgICAgIGNvbnN0IGludCBkcTNsID0gbGFyZ2Vf cSA/ICgoZHEzICsgYWJzKFRRNSAtIDIgKiBUUTQgKyBUUTMpICsgMSkgPj4gMSkgOiBkcTM7Cisg ICAgICAgICAgICBjb25zdCBpbnQgZDBsID0gZHAwbCArIGRxMGw7CisgICAgICAgICAgICBjb25z dCBpbnQgZDNsID0gZHAzbCArIGRxM2w7CisgICAgICAgICAgICBjb25zdCBpbnQgYmV0YTUzID0g YmV0YSAqIDMgPj4gNTsKKyAgICAgICAgICAgIGNvbnN0IGludCBiZXRhXzQgPSBiZXRhID4+IDQ7 CisgICAgICAgICAgICBtYXhfbGVuX3AgPSBsYXJnZV9wID8gbWF4X2xlbl9wIDogMzsKKyAgICAg ICAgICAgIG1heF9sZW5fcSA9IGxhcmdlX3EgPyBtYXhfbGVuX3EgOiAzOworCisgICAgICAgICAg ICBpZiAoZDBsICsgZDNsIDwgYmV0YSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBzcDBs ID0gYWJzKFAzIC0gUDApICsgKG1heF9sZW5fcCA9PSA3ID8gYWJzKFA3IC0gUDYgLSBQNSArIFA0 KSA6IDApOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBzcTBsID0gYWJzKFEwIC0gUTMpICsg KG1heF9sZW5fcSA9PSA3ID8gYWJzKFE0IC0gUTUgLSBRNiArIFE3KSA6IDApOworICAgICAgICAg ICAgICAgIGNvbnN0IGludCBzcDNsID0gYWJzKFRQMyAtIFRQMCkgKyAobWF4X2xlbl9wID09IDcg PyBhYnMoVFA3IC0gVFA2IC0gVFA1ICsgVFA0KSA6IDApOworICAgICAgICAgICAgICAgIGNvbnN0 IGludCBzcTNsID0gYWJzKFRRMCAtIFRRMykgKyAobWF4X2xlbl9xID09IDcgPyBhYnMoVFE0IC0g VFE1IC0gVFE2ICsgVFE3KSA6IDApOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBzcDAgPSBs YXJnZV9wID8gKChzcDBsICsgYWJzKFAzIC0gICBQKG1heF9sZW5fcCkpICsgMSkgPj4gMSkgOiBz cDBsOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBzcDMgPSBsYXJnZV9wID8gKChzcDNsICsg YWJzKFRQMyAtIFRQKG1heF9sZW5fcCkpICsgMSkgPj4gMSkgOiBzcDNsOworICAgICAgICAgICAg ICAgIGNvbnN0IGludCBzcTAgPSBsYXJnZV9xID8gKChzcTBsICsgYWJzKFEzIC0gICBRKG1heF9s ZW5fcSkpICsgMSkgPj4gMSkgOiBzcTBsOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBzcTMg PSBsYXJnZV9xID8gKChzcTNsICsgYWJzKFRRMyAtIFRRKG1heF9sZW5fcSkpICsgMSkgPj4gMSkg OiBzcTNsOworICAgICAgICAgICAgICAgIGlmIChzcDAgKyBzcTAgPCBiZXRhNTMgJiYgYWJzKFAw IC0gUTApIDwgdGMyNSAmJgorICAgICAgICAgICAgICAgICAgICBzcDMgKyBzcTMgPCBiZXRhNTMg JiYgYWJzKFRQMCAtIFRRMCkgPCB0YzI1ICYmCisgICAgICAgICAgICAgICAgICAgIChkMGwgPDwg MSkgPCBiZXRhXzQgJiYgKGQzbCA8PCAxKSA8IGJldGFfNCkgeworICAgICAgICAgICAgICAgICAg ICBGVU5DKGxvb3BfZmlsdGVyX2x1bWFfbGFyZ2UpKHBpeCwgeHN0cmlkZSwgeXN0cmlkZSwgdGMs IG5vX3AsIG5vX3EsIG1heF9sZW5fcCwgbWF4X2xlbl9xKTsKKyAgICAgICAgICAgICAgICAgICAg Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGlmIChkMCArIGQzIDwgYmV0YSkgeworICAgICAgICAgICAgaWYgKG1heF9sZW5fcCA+ IDIgJiYgbWF4X2xlbl9xID4gMiAmJgorICAgICAgICAgICAgICAgIGFicyhQMyAtIFAwKSArIGFi cyhRMyAtIFEwKSA8IGJldGFfMyAmJiBhYnMoUDAgLSBRMCkgPCB0YzI1ICYmCisgICAgICAgICAg ICAgICAgYWJzKFRQMyAtIFRQMCkgKyBhYnMoVFEzIC0gVFEwKSA8IGJldGFfMyAmJiBhYnMoVFAw IC0gVFEwKSA8IHRjMjUgJiYKKyAgICAgICAgICAgICAgICAoZDAgPDwgMSkgPCBiZXRhXzIgJiYg KGQzIDw8IDEpIDwgYmV0YV8yKSB7CisgICAgICAgICAgICAgICAgRlVOQyhsb29wX2ZpbHRlcl9s dW1hX3N0cm9uZykocGl4LCB4c3RyaWRlLCB5c3RyaWRlLCB0Yywgbm9fcCwgbm9fcSk7CisgICAg ICAgICAgICB9IGVsc2UgeyAvLyB3ZWFrIGZpbHRlcmluZworICAgICAgICAgICAgICAgIGludCBu ZF9wID0gMTsKKyAgICAgICAgICAgICAgICBpbnQgbmRfcSA9IDE7CisgICAgICAgICAgICAgICAg aWYgKG1heF9sZW5fcCA+IDEgJiYgbWF4X2xlbl9xID4gMSkgeworICAgICAgICAgICAgICAgICAg ICBpZiAoZHAwICsgZHAzIDwgKChiZXRhICsgKGJldGEgPj4gMSkpID4+IDMpKQorICAgICAgICAg ICAgICAgICAgICAgICAgbmRfcCA9IDI7CisgICAgICAgICAgICAgICAgICAgIGlmIChkcTAgKyBk cTMgPCAoKGJldGEgKyAoYmV0YSA+PiAxKSkgPj4gMykpCisgICAgICAgICAgICAgICAgICAgICAg ICBuZF9xID0gMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlVOQyhsb29w X2ZpbHRlcl9sdW1hX3dlYWspKHBpeCwgeHN0cmlkZSwgeXN0cmlkZSwgdGMsIGJldGEsIG5vX3As IG5vX3EsIG5kX3AsIG5kX3EpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor CitzdGF0aWMgdm9pZCBGVU5DKGxvb3BfZmlsdGVyX2Nocm9tYV9zdHJvbmcpKHBpeGVsICpwaXgs IGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRlLCBjb25zdCBwdHJkaWZmX3QgeXN0cmlkZSwKKyAgICBj b25zdCBpbnQgc2l6ZSwgY29uc3QgaW50MzJfdCB0YywgY29uc3QgdWludDhfdCBub19wLCBjb25z dCB1aW50OF90IG5vX3EpCit7CisgICAgZm9yIChpbnQgZCA9IDA7IGQgPCBzaXplOyBkKyspIHsK KyAgICAgICAgY29uc3QgaW50IHAzID0gUDM7CisgICAgICAgIGNvbnN0IGludCBwMiA9IFAyOwor ICAgICAgICBjb25zdCBpbnQgcDEgPSBQMTsKKyAgICAgICAgY29uc3QgaW50IHAwID0gUDA7Cisg ICAgICAgIGNvbnN0IGludCBxMCA9IFEwOworICAgICAgICBjb25zdCBpbnQgcTEgPSBRMTsKKyAg ICAgICAgY29uc3QgaW50IHEyID0gUTI7CisgICAgICAgIGNvbnN0IGludCBxMyA9IFEzOworICAg ICAgICBpZiAoIW5vX3ApIHsKKyAgICAgICAgICAgIFAwID0gYXZfY2xpcCgocDMgKyBwMiArIHAx ICsgMiAqIHAwICsgcTAgKyBxMSArIHEyICsgNCkgPj4gMywgcDAgLSB0YywgcDAgKyB0Yyk7Cisg ICAgICAgICAgICBQMSA9IGF2X2NsaXAoKDIgKiBwMyArIHAyICsgMiAqIHAxICsgcDAgKyBxMCAr IHExICsgNCkgPj4gMywgcDEgLSB0YywgcDEgKyB0Yyk7CisgICAgICAgICAgICBQMiA9IGF2X2Ns aXAoKDMgKiBwMyArIDIgKiBwMiArIHAxICsgcDAgKyBxMCArIDQpID4+IDMsIHAyIC0gdGMsIHAy ICsgdGMgKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW5vX3EpIHsKKyAgICAgICAgICAgIFEw ID0gYXZfY2xpcCgocDIgKyBwMSArIHAwICsgMiAqIHEwICsgcTEgKyBxMiArIHEzICsgNCkgPj4g MywgcTAgLSB0YywgcTAgKyB0Yyk7CisgICAgICAgICAgICBRMSA9IGF2X2NsaXAoKHAxICsgcDAg KyBxMCArIDIgKiBxMSArIHEyICsgMiAqIHEzICsgNCkgPj4gMywgcTEgLSB0YywgcTEgKyB0Yyk7 CisgICAgICAgICAgICBRMiA9IGF2X2NsaXAoKHAwICsgcTAgKyBxMSArIDIgKiBxMiArIDMgKiBx MyArIDQpID4+IDMsIHEyIC0gdGMsIHEyICsgdGMpOworICAgICAgICB9CisgICAgICAgIHBpeCAr PSB5c3RyaWRlOworICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhsb29wX2ZpbHRlcl9jaHJv bWFfc3Ryb25nX29uZV9zaWRlKShwaXhlbCAqcGl4LCBjb25zdCBwdHJkaWZmX3QgeHN0cmlkZSwg Y29uc3QgcHRyZGlmZl90IHlzdHJpZGUsCisgICAgY29uc3QgaW50IHNpemUsIGNvbnN0IGludDMy X3QgdGMsIGNvbnN0IHVpbnQ4X3Qgbm9fcCwgY29uc3QgdWludDhfdCBub19xKQoreworICAgIGZv ciAoaW50IGQgPSAwOyBkIDwgc2l6ZTsgZCsrKSB7CisgICAgICAgIGNvbnN0IGludCBwMSA9IFAx OworICAgICAgICBjb25zdCBpbnQgcDAgPSBQMDsKKyAgICAgICAgY29uc3QgaW50IHEwID0gUTA7 CisgICAgICAgIGNvbnN0IGludCBxMSA9IFExOworICAgICAgICBjb25zdCBpbnQgcTIgPSBRMjsK KyAgICAgICAgY29uc3QgaW50IHEzID0gUTM7CisgICAgICAgIGlmICghbm9fcCkgeworICAgICAg ICAgICAgUDAgPSBhdl9jbGlwKCgzICogcDEgKyAyICogcDAgKyBxMCArIHExICsgcTIgKyA0KSA+ PiAzLCBwMCAtIHRjLCBwMCArIHRjKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW5vX3EpIHsK KyAgICAgICAgICAgIFEwID0gYXZfY2xpcCgoMiAqIHAxICsgcDAgKyAyICogcTAgKyBxMSArIHEy ICsgcTMgKyA0KSA+PiAzLCBxMCAtIHRjLCBxMCArIHRjKTsKKyAgICAgICAgICAgIFExID0gYXZf Y2xpcCgocDEgKyBwMCArIHEwICsgMiAqIHExICsgcTIgKyAyICogcTMgKyA0KSA+PiAzLCBxMSAt IHRjLCBxMSArIHRjKTsKKyAgICAgICAgICAgIFEyID0gYXZfY2xpcCgocDAgKyBxMCArIHExICsg MiAqIHEyICsgMyAqIHEzICsgNCkgPj4gMywgcTIgLSB0YywgcTIgKyB0Yyk7CisgICAgICAgIH0K KyAgICAgICAgcGl4ICs9IHlzdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKGxv b3BfZmlsdGVyX2Nocm9tYV93ZWFrKShwaXhlbCAqcGl4LCBjb25zdCBwdHJkaWZmX3QgeHN0cmlk ZSwgY29uc3QgcHRyZGlmZl90IHlzdHJpZGUsCisgICAgY29uc3QgaW50IHNpemUsIGNvbnN0IGlu dDMyX3QgdGMsIGNvbnN0IHVpbnQ4X3Qgbm9fcCwgY29uc3QgdWludDhfdCBub19xKQoreworICAg IGZvciAoaW50IGQgPSAwOyBkIDwgc2l6ZTsgZCsrKSB7CisgICAgICAgIGludCBkZWx0YTA7Cisg ICAgICAgIGNvbnN0IGludCBwMSA9IFAxOworICAgICAgICBjb25zdCBpbnQgcDAgPSBQMDsKKyAg ICAgICAgY29uc3QgaW50IHEwID0gUTA7CisgICAgICAgIGNvbnN0IGludCBxMSA9IFExOworICAg ICAgICBkZWx0YTAgPSBhdl9jbGlwKCgoKHEwIC0gcDApICogNCkgKyBwMSAtIHExICsgNCkgPj4g MywgLXRjLCB0Yyk7CisgICAgICAgIGlmICghbm9fcCkKKyAgICAgICAgICAgIFAwID0gYXZfY2xp cF9waXhlbChwMCArIGRlbHRhMCk7CisgICAgICAgIGlmICghbm9fcSkKKyAgICAgICAgICAgIFEw ID0gYXZfY2xpcF9waXhlbChxMCAtIGRlbHRhMCk7CisgICAgICAgIHBpeCArPSB5c3RyaWRlOwor ICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyh2dmNfbG9vcF9maWx0ZXJfY2hyb21hKSh1aW50 OF90ICpfcGl4LCBjb25zdCBwdHJkaWZmX3QgIF94c3RyaWRlLCBjb25zdCBwdHJkaWZmX3QgX3lz dHJpZGUsCisgICAgY29uc3QgaW50MzJfdCAqX2JldGEsIGNvbnN0IGludDMyX3QgKl90YywgY29u c3QgdWludDhfdCAqX25vX3AsIGNvbnN0IHVpbnQ4X3QgKl9ub19xLAorICAgIGNvbnN0IHVpbnQ4 X3QgKl9tYXhfbGVuX3AsIGNvbnN0IHVpbnQ4X3QgKl9tYXhfbGVuX3EsIGNvbnN0IGludCBzaGlm dCkKK3sKKyAgICBjb25zdCBwdHJkaWZmX3QgeHN0cmlkZSA9IF94c3RyaWRlIC8gc2l6ZW9mKHBp eGVsKTsKKyAgICBjb25zdCBwdHJkaWZmX3QgeXN0cmlkZSA9IF95c3RyaWRlIC8gc2l6ZW9mKHBp eGVsKTsKKyAgICBjb25zdCBpbnQgc2l6ZSAgICAgICAgICA9IHNoaWZ0ID8gMiA6IDQ7CisgICAg Y29uc3QgaW50IGVuZCAgICAgICAgICAgPSA4IC8gc2l6ZTsgICAgICAgICAvLyA4IHNhbXBsZXMg YSBsb29wCisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuZDsgaSsrKSB7CisgICAgICAgIHBp eGVsICpwaXggICAgICAgICAgPSAocGl4ZWwgKilfcGl4ICsgaSAqIHNpemUgKiB5c3RyaWRlOwor ICAgICAgICBjb25zdCB1aW50OF90IG5vX3AgID0gX25vX3BbaV07CisgICAgICAgIGNvbnN0IHVp bnQ4X3Qgbm9fcSAgPSBfbm9fcVtpXTsKKyAgICAgICAgY29uc3QgaW50IGJldGEgICAgICA9IF9i ZXRhW2ldIDw8IChCSVRfREVQVEggLSA4KTsKKyAgICAgICAgY29uc3QgaW50IGJldGFfMyAgICA9 IGJldGEgPj4gMzsKKyAgICAgICAgY29uc3QgaW50IGJldGFfMiAgICA9IGJldGEgPj4gMjsKKwor I2lmIEJJVF9ERVBUSCA8IDEwCisgICAgICAgIGNvbnN0IGludCB0YyA9IChfdGNbaV0gKyAoMSA8 PCAoOSAtIEJJVF9ERVBUSCkpKSA+PiAoMTAgLSBCSVRfREVQVEgpOworI2Vsc2UKKyAgICAgICAg Y29uc3QgaW50IHRjID0gX3RjW2ldIDw8IChCSVRfREVQVEggLSAxMCk7CisjZW5kaWYKKyAgICAg ICAgY29uc3QgaW50IHRjMjUgICAgICA9ICgodGMgKiA1ICsgMSkgPj4gMSk7CisKKyAgICAgICAg dWludDhfdCBtYXhfbGVuX3AgICA9IF9tYXhfbGVuX3BbaV07CisgICAgICAgIHVpbnQ4X3QgbWF4 X2xlbl9xICAgPSBfbWF4X2xlbl9xW2ldOworCisgICAgICAgIGlmICghbWF4X2xlbl9wIHx8ICFt YXhfbGVuX3EgfHwgIXRjKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKG1h eF9sZW5fcSA9PSAzKXsKKyAgICAgICAgICAgIGNvbnN0IGludCBwMW4gID0gc2hpZnQgPyBGUDEg OiBUUDE7CisgICAgICAgICAgICBjb25zdCBpbnQgcDJuID0gbWF4X2xlbl9wID09IDEgPyBwMW4g OiAoc2hpZnQgPyBGUDIgOiBUUDIpOworICAgICAgICAgICAgY29uc3QgaW50IHAwbiAgPSBzaGlm dCA/IEZQMCA6IFRQMDsKKyAgICAgICAgICAgIGNvbnN0IGludCBxMG4gID0gc2hpZnQgPyBGUTAg OiBUUTA7CisgICAgICAgICAgICBjb25zdCBpbnQgcTFuICA9IHNoaWZ0ID8gRlExIDogVFExOwor ICAgICAgICAgICAgY29uc3QgaW50IHEybiAgPSBzaGlmdCA/IEZRMiA6IFRRMjsKKyAgICAgICAg ICAgIGNvbnN0IGludCBwMyAgID0gbWF4X2xlbl9wID09IDEgPyBQMSA6IFAzOworICAgICAgICAg ICAgY29uc3QgaW50IHAyICAgPSBtYXhfbGVuX3AgPT0gMSA/IFAxIDogUDI7CisgICAgICAgICAg ICBjb25zdCBpbnQgcDEgICA9IFAxOworICAgICAgICAgICAgY29uc3QgaW50IHAwICAgPSBQMDsK KyAgICAgICAgICAgIGNvbnN0IGludCBkcDAgID0gYWJzKHAyIC0gMiAqIHAxICsgcDApOworICAg ICAgICAgICAgY29uc3QgaW50IGRxMCAgPSBhYnMoUTIgLSAyICogUTEgKyBRMCk7CisKKyAgICAg ICAgICAgIGNvbnN0IGludCBkcDEgPSBhYnMocDJuIC0gMiAqIHAxbiArIHAwbik7CisgICAgICAg ICAgICBjb25zdCBpbnQgZHExID0gYWJzKHEybiAtIDIgKiBxMW4gKyBxMG4pOworICAgICAgICAg ICAgY29uc3QgaW50IGQwICA9IGRwMCArIGRxMDsKKyAgICAgICAgICAgIGNvbnN0IGludCBkMSAg PSBkcDEgKyBkcTE7CisKKyAgICAgICAgICAgIGlmIChkMCArIGQxIDwgYmV0YSkgeworICAgICAg ICAgICAgICAgIGNvbnN0IGludCBwM24gPSBtYXhfbGVuX3AgPT0gMSA/IHAxbiA6IChzaGlmdCA/ IEZQMyA6IFRQMyk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHEzbiA9IHNoaWZ0ID8gRlEz IDogVFEzOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBkc2FtMCA9IChkMCA8PCAxKSA8IGJl dGFfMiAmJiAoYWJzKHAzIC0gcDApICsgYWJzKFEwIC0gUTMpICAgICA8IGJldGFfMykgJiYKKyAg ICAgICAgICAgICAgICAgICAgYWJzKHAwIC0gUTApICAgPCB0YzI1OworICAgICAgICAgICAgICAg IGNvbnN0IGludCBkc2FtMSA9IChkMSA8PCAxKSA8IGJldGFfMiAmJiAoYWJzKHAzbiAtIHAwbikg KyBhYnMocTBuIC0gcTNuKSA8IGJldGFfMykgJiYKKyAgICAgICAgICAgICAgICAgICAgYWJzKHAw biAtIHEwbikgPCB0YzI1OworICAgICAgICAgICAgICAgIGlmICghZHNhbTAgfHwgIWRzYW0xKQor ICAgICAgICAgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3EgPSAxOworICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3EgPSAxOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1heF9sZW5fcCA9PSAzICYm IG1heF9sZW5fcSA9PSAzKQorICAgICAgICAgICAgRlVOQyhsb29wX2ZpbHRlcl9jaHJvbWFfc3Ry b25nKShwaXgsIHhzdHJpZGUsIHlzdHJpZGUsIHNpemUsIHRjLCBub19wLCBub19xKTsKKyAgICAg ICAgZWxzZSBpZiAobWF4X2xlbl9xID09IDMpCisgICAgICAgICAgICBGVU5DKGxvb3BfZmlsdGVy X2Nocm9tYV9zdHJvbmdfb25lX3NpZGUpKHBpeCwgeHN0cmlkZSwgeXN0cmlkZSwgc2l6ZSwgdGMs IG5vX3AsIG5vX3EpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBGVU5DKGxvb3BfZmlsdGVy X2Nocm9tYV93ZWFrKShwaXgsIHhzdHJpZGUsIHlzdHJpZGUsIHNpemUsIHRjLCBub19wLCBub19x KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkModnZjX2hfbG9vcF9maWx0ZXJfY2hyb21h KSh1aW50OF90ICpwaXgsIHB0cmRpZmZfdCBzdHJpZGUsCisgICAgY29uc3QgaW50MzJfdCAqYmV0 YSwgY29uc3QgaW50MzJfdCAqdGMsIGNvbnN0IHVpbnQ4X3QgKm5vX3AsIGNvbnN0IHVpbnQ4X3Qg Km5vX3EsCisgICAgY29uc3QgdWludDhfdCAqbWF4X2xlbl9wLCBjb25zdCB1aW50OF90ICptYXhf bGVuX3EsIGludCBzaGlmdCkKK3sKKyAgICBGVU5DKHZ2Y19sb29wX2ZpbHRlcl9jaHJvbWEpKHBp eCwgc3RyaWRlLCBzaXplb2YocGl4ZWwpLCBiZXRhLCB0YywKKyAgICAgICAgbm9fcCwgbm9fcSwg bWF4X2xlbl9wLCBtYXhfbGVuX3EsIHNoaWZ0KTsKK30KKworc3RhdGljIHZvaWQgRlVOQyh2dmNf dl9sb29wX2ZpbHRlcl9jaHJvbWEpKHVpbnQ4X3QgKnBpeCwgcHRyZGlmZl90IHN0cmlkZSwKKyAg ICBjb25zdCBpbnQzMl90ICpiZXRhLCBjb25zdCBpbnQzMl90ICp0YywgY29uc3QgdWludDhfdCAq bm9fcCwgY29uc3QgdWludDhfdCAqbm9fcSwKKyAgICBjb25zdCB1aW50OF90ICptYXhfbGVuX3As IGNvbnN0IHVpbnQ4X3QgKm1heF9sZW5fcSwgaW50IHNoaWZ0KQoreworICAgIEZVTkModnZjX2xv b3BfZmlsdGVyX2Nocm9tYSkocGl4LCBzaXplb2YocGl4ZWwpLCBzdHJpZGUsIGJldGEsIHRjLAor ICAgICAgICBub19wLCBub19xLCAgbWF4X2xlbl9wLCBtYXhfbGVuX3EsIHNoaWZ0KTsKK30KKwor c3RhdGljIHZvaWQgRlVOQyh2dmNfaF9sb29wX2ZpbHRlcl9sdW1hKSh1aW50OF90ICpwaXgsIHB0 cmRpZmZfdCBzdHJpZGUsCisgICAgY29uc3QgaW50MzJfdCAqYmV0YSwgY29uc3QgaW50MzJfdCAq dGMsIGNvbnN0IHVpbnQ4X3QgKm5vX3AsIGNvbnN0IHVpbnQ4X3QgKm5vX3EsCisgICAgY29uc3Qg dWludDhfdCAqbWF4X2xlbl9wLCBjb25zdCB1aW50OF90ICptYXhfbGVuX3EsIGludCBob3JfY3R1 X2VkZ2UpCit7CisgICAgRlVOQyh2dmNfbG9vcF9maWx0ZXJfbHVtYSkocGl4LCBzdHJpZGUsIHNp emVvZihwaXhlbCksIGJldGEsIHRjLAorICAgICAgICBub19wLCBub19xLCBtYXhfbGVuX3AsIG1h eF9sZW5fcSwgaG9yX2N0dV9lZGdlKTsKK30KKworc3RhdGljIHZvaWQgRlVOQyh2dmNfdl9sb29w X2ZpbHRlcl9sdW1hKSh1aW50OF90ICpwaXgsIHB0cmRpZmZfdCBzdHJpZGUsCisgICAgY29uc3Qg aW50MzJfdCAqYmV0YSwgY29uc3QgaW50MzJfdCAqdGMsIGNvbnN0IHVpbnQ4X3QgKm5vX3AsIGNv bnN0IHVpbnQ4X3QgKm5vX3EsCisgICAgY29uc3QgdWludDhfdCAqbWF4X2xlbl9wLCBjb25zdCB1 aW50OF90ICptYXhfbGVuX3EsIGludCBob3JfY3R1X2VkZ2UpCit7CisgICAgRlVOQyh2dmNfbG9v cF9maWx0ZXJfbHVtYSkocGl4LCBzaXplb2YocGl4ZWwpLCBzdHJpZGUsIGJldGEsIHRjLAorICAg ICAgICBub19wLCBub19xLCBtYXhfbGVuX3AsIG1heF9sZW5fcSwgaG9yX2N0dV9lZGdlKTsKK30K Kworc3RhdGljIGludCBGVU5DKHZ2Y19sb29wX2xhZGZfbGV2ZWwpKGNvbnN0IHVpbnQ4X3QgKl9w aXgsIGNvbnN0IHB0cmRpZmZfdCBfeHN0cmlkZSwgY29uc3QgcHRyZGlmZl90IF95c3RyaWRlKQor eworICAgIGNvbnN0IHBpeGVsICpwaXggICAgICAgID0gKHBpeGVsICopX3BpeDsKKyAgICBjb25z dCBwdHJkaWZmX3QgeHN0cmlkZSA9IF94c3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICBjb25z dCBwdHJkaWZmX3QgeXN0cmlkZSA9IF95c3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICByZXR1 cm4gKFAwICsgVFAwICsgUTAgKyBUUTApID4+IDI7Cit9CisKK3N0YXRpYyBpbnQgRlVOQyh2dmNf aF9sb29wX2xhZGZfbGV2ZWwpKGNvbnN0IHVpbnQ4X3QgKnBpeCwgcHRyZGlmZl90IHN0cmlkZSkK K3sKKyAgICByZXR1cm4gRlVOQyh2dmNfbG9vcF9sYWRmX2xldmVsKShwaXgsIHN0cmlkZSwgc2l6 ZW9mKHBpeGVsKSk7Cit9CisKK3N0YXRpYyBpbnQgRlVOQyh2dmNfdl9sb29wX2xhZGZfbGV2ZWwp KGNvbnN0IHVpbnQ4X3QgKnBpeCwgcHRyZGlmZl90IHN0cmlkZSkKK3sKKyAgICByZXR1cm4gRlVO Qyh2dmNfbG9vcF9sYWRmX2xldmVsKShwaXgsIHNpemVvZihwaXhlbCksIHN0cmlkZSk7Cit9CisK KyN1bmRlZiBQNworI3VuZGVmIFA2CisjdW5kZWYgUDUKKyN1bmRlZiBQNAorI3VuZGVmIFAzCisj dW5kZWYgUDIKKyN1bmRlZiBQMQorI3VuZGVmIFAwCisjdW5kZWYgUTAKKyN1bmRlZiBRMQorI3Vu ZGVmIFEyCisjdW5kZWYgUTMKKyN1bmRlZiBRNAorI3VuZGVmIFE1CisjdW5kZWYgUTYKKyN1bmRl ZiBRNworCisjdW5kZWYgVFA3CisjdW5kZWYgVFA2CisjdW5kZWYgVFA1CisjdW5kZWYgVFA0Cisj dW5kZWYgVFAzCisjdW5kZWYgVFAyCisjdW5kZWYgVFAxCisjdW5kZWYgVFAwCisjdW5kZWYgVFEw CisjdW5kZWYgVFExCisjdW5kZWYgVFEyCisjdW5kZWYgVFEzCisjdW5kZWYgVFE0CisjdW5kZWYg VFE1CisjdW5kZWYgVFE2CisjdW5kZWYgVFE3CisKK3N0YXRpYyB2b2lkIEZVTkMoZmZfdnZjX2xt Y3NfZHNwX2luaXQpKFZWQ0xNQ1NEU1BDb250ZXh0ICpjb25zdCBsbWNzKQoreworICAgIGxtY3Mt PmZpbHRlciA9IEZVTkMobG1jc19maWx0ZXJfbHVtYSk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMo ZmZfdnZjX2xmX2RzcF9pbml0KShWVkNMRkRTUENvbnRleHQgKmNvbnN0IGxmKQoreworICAgIGxm LT5sYWRmX2xldmVsWzBdICAgICAgPSBGVU5DKHZ2Y19oX2xvb3BfbGFkZl9sZXZlbCk7CisgICAg bGYtPmxhZGZfbGV2ZWxbMV0gICAgICA9IEZVTkModnZjX3ZfbG9vcF9sYWRmX2xldmVsKTsKKyAg ICBsZi0+ZmlsdGVyX2x1bWFbMF0gICAgID0gRlVOQyh2dmNfaF9sb29wX2ZpbHRlcl9sdW1hKTsK KyAgICBsZi0+ZmlsdGVyX2x1bWFbMV0gICAgID0gRlVOQyh2dmNfdl9sb29wX2ZpbHRlcl9sdW1h KTsKKyAgICBsZi0+ZmlsdGVyX2Nocm9tYVswXSAgID0gRlVOQyh2dmNfaF9sb29wX2ZpbHRlcl9j aHJvbWEpOworICAgIGxmLT5maWx0ZXJfY2hyb21hWzFdICAgPSBGVU5DKHZ2Y192X2xvb3BfZmls dGVyX2Nocm9tYSk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoZmZfdnZjX3Nhb19kc3BfaW5pdCko VlZDU0FPRFNQQ29udGV4dCAqY29uc3Qgc2FvKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg RkZfQVJSQVlfRUxFTVMoc2FvLT5iYW5kX2ZpbHRlcik7IGkrKykKKyAgICAgICAgc2FvLT5iYW5k X2ZpbHRlcltpXSA9IEZVTkMoc2FvX2JhbmRfZmlsdGVyKTsKKyAgICBmb3IgKGludCBpID0gMDsg aSA8IEZGX0FSUkFZX0VMRU1TKHNhby0+ZWRnZV9maWx0ZXIpOyBpKyspCisgICAgICAgIHNhby0+ ZWRnZV9maWx0ZXJbaV0gPSBGVU5DKHNhb19lZGdlX2ZpbHRlcik7CisgICAgc2FvLT5lZGdlX3Jl c3RvcmVbMF0gPSBGVU5DKHNhb19lZGdlX3Jlc3RvcmVfMCk7CisgICAgc2FvLT5lZGdlX3Jlc3Rv cmVbMV0gPSBGVU5DKHNhb19lZGdlX3Jlc3RvcmVfMSk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMo ZmZfdnZjX2FsZl9kc3BfaW5pdCkoVlZDQUxGRFNQQ29udGV4dCAqY29uc3QgYWxmKQoreworICAg IGFsZi0+ZmlsdGVyW0xVTUFdICAgID0gRlVOQyhhbGZfZmlsdGVyX2x1bWEpOworICAgIGFsZi0+ ZmlsdGVyW0NIUk9NQV0gID0gRlVOQyhhbGZfZmlsdGVyX2Nocm9tYSk7CisgICAgYWxmLT5maWx0 ZXJfY2MgICAgICAgPSBGVU5DKGFsZl9maWx0ZXJfY2MpOworICAgIGFsZi0+Y2xhc3NpZnkgICAg ICAgID0gRlVOQyhhbGZfY2xhc3NpZnkpOworICAgIGFsZi0+cmVjb25fY29lZmZfYW5kX2NsaXAg PSBGVU5DKGFsZl9yZWNvbl9jb2VmZl9hbmRfY2xpcCk7Cit9Ci0tIAoyLjI1LjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWls aW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxt YW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92 ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3Qg InVuc3Vic2NyaWJlIi4K