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 A15174805B for ; Sun, 10 Dec 2023 12:54:44 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5F09D68D0FF; Sun, 10 Dec 2023 14:53:48 +0200 (EET) Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01olkn2071.outbound.protection.outlook.com [40.92.53.71]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1C12B68D0E6 for ; Sun, 10 Dec 2023 14:53:46 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FnwprVVZNj/j5H/d79XHn8qk1TbtxA5XEZlE8woOwMWFOKdAT4cqJBqMFtxM/fvmOOctYpmLpoZvyIaJPo2MTki3g+u/yUs88ga0z3C34mlBKS976Dk0BxXO2vTb3ORckq4n49XR2geBLudlaXmbaABWDniCq560D8kFaY1uoeM5g2FsPROPLJ6QCrM7bitNihrZPLq2DATOQF2tfDRQW//D2aPjahtdJlMkqa4ZrzgL7xsyVzRBUEKKQZngZ2wJaRrlAsQXvazzRFcOWtIj3bskl47xI4HNO4w4k21sz5defOZ/lY4XjIySa77IN06Jsj9RJxZETftfiQvzABowFQ== 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=nW7WlPmRpX97zWK3oJdnBToQH7a4sSdmJT+hObdDIlU=; b=QylHcO2O+3e2VJaojlnp4r7V7z6PelEQEne5UjbwdyXvQLIQJfXQWAyC3rbvCjQ9zy1J1hLLtEFnIooyni02IsTRIU0kxPb9jY4XDE6nUhHGldq2838Qg/ZLEle71SokJmmXF8Hhyc0XNRIX9rc2w0pev8F9PDQIfNzoa8Bv9H1DUDY4U6t5zNuRBUtyiO3TpmTO/FDKMnl6DLgw1AkvhzFUrudlb/ntBkOxNw8fQnjSmaaqD19qK08qhADlJbRjrg0d3yaoz/OP3XOHnSiC+3xBhbPg75yy3r495ZP7YDuQdxZh54csduOGjsg74UAe27iM5ZmcVTW0VlhzQV8moA== 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=nW7WlPmRpX97zWK3oJdnBToQH7a4sSdmJT+hObdDIlU=; b=oM/CIOgwGaGyzUv5jixOtBqyw3y4M5b4Wnu83R+cCWQ6rtY5nbrIxzQNgybB1Bd4dDEd4vTD02Z6Pj1Y3Ia6NnZzOfIDDqLMsI03Uj+zLLVfqDIjvXLFzo52KZ9J3imn99lUkdwgEKrNtl+NeRsrelGy1iLbUJI37j/sdAzybe6IwFYxdGIesNOj/NQ7vzxKRpXJvHXIL1ZJ2MogZlbgkUW1Pmgfz5MVN2FfxDTxPt8xTMcrmqnYviQGHo4vdsF/Kw8ODVYhkEhTfvEECa419HbpeyGa8IUGSw1q6Vj9DcCKgoAIrDubkDrteTr3E8kccYmVZ3aI19JzQIa4Fw+eeQ== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by SEZPR06MB7644.apcprd06.prod.outlook.com (2603:1096:101:249::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.30; Sun, 10 Dec 2023 12:53:28 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::80b3:be24:949c:e49f]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::80b3:be24:949c:e49f%4]) with mapi id 15.20.7068.030; Sun, 10 Dec 2023 12:53:28 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sun, 10 Dec 2023 20:53:03 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231210125308.1838-1-nuomi2021@gmail.com> References: <20231210125308.1838-1-nuomi2021@gmail.com> X-TMN: [36LtwtM98b03PHeKqNWu7U1nCtgMX0kM] X-ClientProxiedBy: TY2PR02CA0031.apcprd02.prod.outlook.com (2603:1096:404:a6::19) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20231210125308.1838-9-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|SEZPR06MB7644:EE_ X-MS-Office365-Filtering-Correlation-Id: e6391d56-1990-41f2-e2f2-08dbf97f0102 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XUKqE/oNAEbaq6XMV1u7MVYL7PUR7fSwm44Xb0KPO8hJ1r7BZN5+kpi3z4deAqgwsYIqdyl+by8qp0x0DD29GQPf0i4ukiDhz7cFz3a2AO1mowOrm5FpRzMkH7wgVbbhq+uXejXXe9VSCLoIRl4kVW8XkmJqviUKS7esOoSR+q5oGFlt1wmUWGFQOEhLYR6amrxJ9INsx22dOY68q6Fbq/U9uTM/5QvZVIuHWuRT2irYSYqnoVNQv2qooysNxq0KbYRwQXGoiVSymOROFfNki0igq8WQBekKaA3aTHElHVg7/D6ETO/CMDthgQnyZ79M9zxVGHi1hHuoJRDqRVRCZhCm75YXmQ7PzfMjaK6NH/BfNTawRhAhbTS2mo+V8wxfzUSzQZHpE9DJGUT1o+BcR4exQ+VNAoA1Fr3BzqT+kOJT+6TqMtcT8YvuefthYbCoBeOsIIVJzGuaIVWnyTH+f6KI4fOJU3Y2VgevtrOaGPp+OObhffqp4IJz3rQQ4JdGYSAxEg5XacBx/B7Qr59szg0KGZucgM/pTjK20pcvDruFYObcF8wEGx7W+DVhGI53qq/EOHn+q0ksF+KOpUPWm3oevgZ5R5H81ilIfS+RAunHVvxPWbAAEOLWK5aZqnQd X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UDVwNnlvWFNCK1VxYlBjdmo4WHh0SmdsU3Q2RHl4Yk5rZjMrWk5DVzkxTlZa?= =?utf-8?B?QjFsR3pMUkpDcDZLRzlyQ3o4NEtkTWx2MGgwVUx6K0ZtSjFZYzA0TnJlVkd3?= =?utf-8?B?QlRteHRMRnFqb2hpRkZad2tYVzczbDdVb28vbTdkMGQ4YTdXQzliUGpzOGE1?= =?utf-8?B?TTMrcTcxUEd1dzJLbHI5TThQbGJ3K3p2cklQZ1N4R1dLd20rSW9Hd05RRE1p?= =?utf-8?B?MVlVeUpBanVpZ3dOMmhCaEhCcTZ4U0Z4RXJlNmdrQnRHZStlclY4M2VFakF6?= =?utf-8?B?UzdJKzZPZmZ5MGRXTGx6U1d0dU5vRzhxRlBxYmtYR20xVlUwVk1mN2xWdTRB?= =?utf-8?B?YXViUmQ5dCtrNDU5K1VSeTh0LzJucEJHUG1aQTdpTGpXNC9ZT0k2N25RSEt1?= =?utf-8?B?TmxWblJRN1B2ZjFRNGZZSlVGQ2NjQjdTSUNERUdBVU84NlYwbEdDbDQveVA5?= =?utf-8?B?YWc1aXErdVR6QkMvNkhMdzZqMGNpWXJlZFRJd0dWSG9VMG5QNXFtZ1FNb0Q2?= =?utf-8?B?VUZYajJQZ21MdU4yVzJCUSttVGJiL2JnVmdXZGYrZFZxaHFVekFWMzZzYmlv?= =?utf-8?B?NFpqalRjUzNxVWhiV0ZiK2kzZThTSTlxNFVCV1E1SkdkaGh5TWZHMGVQZGlq?= =?utf-8?B?VmR1ZkRGaW1Lc2t4T2UvLzdzbHF5TkNSOGVBbFVxWnpqWUs5cElmQ252TUFt?= =?utf-8?B?UVVBTldIQ1RTQnNpamZEdUk0YTg4b3VBMTRyV3JFNHRaV2NHSGt6YnlpRzZi?= =?utf-8?B?aW1USjR1aE9JSUxsZkt0VFZ4c0pYcW5NbGEyd0FvK01RRmNHbjVvMTR0KzFv?= =?utf-8?B?OHVGY1RLaDJOWnM4OFozRGc3SEJ0MHVnTk1HRHpjNHEvUmhwSlpTc1gzcVh2?= =?utf-8?B?NVFKNnoxUFpMMnNNMmNPSWhNNkdWRklGRzVZcU56SDFKRzRuLzIxMkozZGdw?= =?utf-8?B?Q3RGOFNadjdlV1VxczBaRFczRlRnR285S1Z1aXNDODZqRnJMWUZDOEI1L3lj?= =?utf-8?B?cTN3U3lRajFtY0pRMEFvWHZIMEZpZkQ5L0t3cSt0aGFLV2F5WTl5VGJ5Wkxs?= =?utf-8?B?Sy80OUQzNHlPWlZHR2tKZUdPWGtCZjZUNTRpb0VGNDYzNjMwcSt0b3gvb1ZO?= =?utf-8?B?anl5MWFPcnBKQ21OZGVQckpBeXJjd2RPVEFCWThHRWpGNUM5eFI4bHJRSEsv?= =?utf-8?B?ZmNWQlJ1bzB4N1dzWWJ4WCtGbzRZSytCUHp4ZHZNazZvTmRLc0tWaXhtdDRM?= =?utf-8?B?OXlZVi93TFYxSWk5dUExTFM4S0JZUEk2UUNyRVYyd1Z2WlNteU5PUi9vL3Fy?= =?utf-8?B?Q09GNERiaWZ0Q0VXQnBjWllCZmU4eUJiaGxIK1BjMEs4b2hSVkVIZkREWnVO?= =?utf-8?B?K25GL3Y2TnVYYlBYbzI4K2RYekRycUhnd2krSHpWck11VGY0eGorYjd5VzNY?= =?utf-8?B?Tkt4TmY3S1BsdHBqZXppZTY4VjZ3VzNWeUpuUWQ1cUc0V2NSeVZqTWtDMkdT?= =?utf-8?B?alRBWWtMbk1KKytSMFY2MnlQTlFpKzlkR1ljQVBEdDFSZlBFeG1mK1F5R0Z6?= =?utf-8?B?UWFvSlQvT25pRDVlYW4zbG5YZWUxSVNHeldzdm5heGtYcmp0QlRDeUQvWmtK?= =?utf-8?B?MDNCa3A3K0NHcGdBWXhtNVc5ZDVwQ244Y1I4SklRK2NVQThQNC9NZ3ZiM3J2?= =?utf-8?Q?GxkNNHwdmbZWZqAUZXex?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e6391d56-1990-41f2-e2f2-08dbf97f0102 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Dec 2023 12:53:27.8588 (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: SEZPR06MB7644 Subject: [FFmpeg-devel] [PATCH v7 09/14] vvcdec: add intra prediction 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: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgIDEgKwogbGliYXZj b2RlYy92dmMvdnZjX2N0dS5jICAgICAgICAgICAgfCAgIDUwICsrCiBsaWJhdmNvZGVjL3Z2Yy92 dmNfY3R1LmggICAgICAgICAgICB8ICAgIDIgKwogbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMg ICAgICAgICAgfCAgNzk3ICsrKysrKysrKysrKysrKysrKysrKwogbGliYXZjb2RlYy92dmMvdnZj X2ludHJhLmggICAgICAgICAgfCAgIDQ5ICsrCiBsaWJhdmNvZGVjL3Z2Yy92dmNfaW50cmFfdGVt cGxhdGUuYyB8IDEwMTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA2IGZpbGVzIGNoYW5n ZWQsIDE5MTQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnZj L3Z2Y19pbnRyYS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dmMvdnZjX2ludHJh LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z2Yy92dmNfaW50cmFfdGVtcGxhdGUu YwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL01ha2VmaWxlIGIvbGliYXZjb2RlYy92dmMv TWFrZWZpbGUKaW5kZXggNTc5NmY5YWQ0Mi4uM2IxYWM3MjAyOSAxMDA2NDQKLS0tIGEvbGliYXZj b2RlYy92dmMvTWFrZWZpbGUKKysrIGIvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKQEAgLTYsNiAr Niw3IEBAIE9CSlMtJChDT05GSUdfVlZDX0RFQ09ERVIpICAgICAgICAgICs9ICB2dmMvdnZjZGVj Lm8gICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dnZjL3Z2Y19jdHUubyAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZ2Yy92dmNfZGF0YS5vICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2ludGVyLm8gICAgICAgICBcCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19pbnRyYS5vICAgICAgICAgXAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfaXR4XzFkLm8g ICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZj X212cy5vICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdnZjL3Z2Y19wcy5vICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMv dnZjX2N0dS5jIGIvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5jCmluZGV4IDNkMzFiODYyYWUuLjYx MzhkMmZjOWYgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuYworKysgYi9saWJh dmNvZGVjL3Z2Yy92dmNfY3R1LmMKQEAgLTIwLDEwICsyMCw0MSBAQAogICogRm91bmRhdGlvbiwg SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxIFVTQQogICovCiAKKyNpbmNsdWRlICJsaWJhdmNvZGVjL3JlZnN0cnVjdC5oIgorCiAjaW5j bHVkZSAidnZjX2NhYmFjLmgiCiAjaW5jbHVkZSAidnZjX2N0dS5oIgogI2luY2x1ZGUgInZ2Y19t dnMuaCIKIAordm9pZCBmZl92dmNfZGVjb2RlX25laWdoYm91cihWVkNMb2NhbENvbnRleHQgKmxj LCBjb25zdCBpbnQgeF9jdGIsIGNvbnN0IGludCB5X2N0YiwKKyAgICBjb25zdCBpbnQgcngsIGNv bnN0IGludCByeSwgY29uc3QgaW50IHJzKQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBs Yy0+ZmM7CisgICAgY29uc3QgaW50IGN0Yl9zaXplICAgICAgICAgPSBmYy0+cHMuc3BzLT5jdGJf c2l6ZV95OworCisgICAgbGMtPmVuZF9vZl90aWxlc194ID0gZmMtPnBzLnNwcy0+d2lkdGg7Cisg ICAgbGMtPmVuZF9vZl90aWxlc195ID0gZmMtPnBzLnNwcy0+aGVpZ2h0OworICAgIGlmIChmYy0+ cHMucHBzLT5jdGJfdG9fY29sX2JkW3J4XSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fY29sX2JkW3J4 ICsgMV0pCisgICAgICAgIGxjLT5lbmRfb2ZfdGlsZXNfeCA9IEZGTUlOKHhfY3RiICsgY3RiX3Np emUsIGxjLT5lbmRfb2ZfdGlsZXNfeCk7CisgICAgaWYgKGZjLT5wcy5wcHMtPmN0Yl90b19yb3df YmRbcnldICE9IGZjLT5wcy5wcHMtPmN0Yl90b19yb3dfYmRbcnkgKyAxXSkKKyAgICAgICAgbGMt PmVuZF9vZl90aWxlc195ID0gRkZNSU4oeV9jdGIgKyBjdGJfc2l6ZSwgbGMtPmVuZF9vZl90aWxl c195KTsKKworICAgIGxjLT5ib3VuZGFyeV9mbGFncyA9IDA7CisgICAgaWYgKHJ4ID4gMCAmJiBm Yy0+cHMucHBzLT5jdGJfdG9fY29sX2JkW3J4XSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fY29sX2Jk W3J4IC0gMV0pCisgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyB8PSBCT1VOREFSWV9MRUZUX1RJ TEU7CisgICAgaWYgKHJ4ID4gMCAmJiBmYy0+dGFiLnNsaWNlX2lkeFtyc10gIT0gZmMtPnRhYi5z bGljZV9pZHhbcnMgLSAxXSkKKyAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzIHw9IEJPVU5EQVJZ X0xFRlRfU0xJQ0U7CisgICAgaWYgKHJ5ID4gMCAmJiBmYy0+cHMucHBzLT5jdGJfdG9fcm93X2Jk W3J5XSAhPSBmYy0+cHMucHBzLT5jdGJfdG9fcm93X2JkW3J5IC0gMV0pCisgICAgICAgIGxjLT5i b3VuZGFyeV9mbGFncyB8PSBCT1VOREFSWV9VUFBFUl9USUxFOworICAgIGlmIChyeSA+IDAgJiYg ZmMtPnRhYi5zbGljZV9pZHhbcnNdICE9IGZjLT50YWIuc2xpY2VfaWR4W3JzIC0gZmMtPnBzLnBw cy0+Y3RiX3dpZHRoXSkKKyAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzIHw9IEJPVU5EQVJZX1VQ UEVSX1NMSUNFOworICAgIGxjLT5jdGJfbGVmdF9mbGFnID0gcnggPiAwICYmICEobGMtPmJvdW5k YXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9USUxFKTsKKyAgICBsYy0+Y3RiX3VwX2ZsYWcgICA9 IHJ5ID4gMCAmJiAhKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX1VQUEVSX1RJTEUpICYm ICEobGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0UpOworICAgIGxjLT5j dGJfdXBfcmlnaHRfZmxhZyA9IGxjLT5jdGJfdXBfZmxhZyAmJiAoZmMtPnBzLnBwcy0+Y3RiX3Rv X2NvbF9iZFtyeF0gPT0gZmMtPnBzLnBwcy0+Y3RiX3RvX2NvbF9iZFtyeCArIDFdKSAmJgorICAg ICAgICAoZmMtPnBzLnBwcy0+Y3RiX3RvX3Jvd19iZFtyeV0gPT0gZmMtPnBzLnBwcy0+Y3RiX3Rv X3Jvd19iZFtyeSAtIDFdKTsKKyAgICBsYy0+Y3RiX3VwX2xlZnRfZmxhZyA9IGxjLT5jdGJfbGVm dF9mbGFnICYmIGxjLT5jdGJfdXBfZmxhZzsKK30KKwogdm9pZCBmZl92dmNfc2V0X25laWdoYm91 cl9hdmFpbGFibGUoVlZDTG9jYWxDb250ZXh0ICpsYywKICAgICBjb25zdCBpbnQgeDAsIGNvbnN0 IGludCB5MCwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoKQogewpAQCAtMzksNiArNzAsMjUgQEAg dm9pZCBmZl92dmNfc2V0X25laWdoYm91cl9hdmFpbGFibGUoVlZDTG9jYWxDb250ZXh0ICpsYywK ICAgICBsYy0+bmEuY2FuZF91cF9yaWdodCA9IGxjLT5uYS5jYW5kX3VwX3JpZ2h0X3NhcCAmJiAo eDAgKyB3KSA8IGxjLT5lbmRfb2ZfdGlsZXNfeDsKIH0KIAordm9pZCBmZl92dmNfY3R1X2ZyZWVf Y3VzKENUVSAqY3R1KQoreworICAgIENvZGluZ1VuaXQgKipjdXMgID0gJmN0dS0+Y3VzOworICAg IHdoaWxlICgqY3VzKSB7CisgICAgICAgIENvZGluZ1VuaXQgKmN1ICAgICAgICAgID0gKmN1czsK KyAgICAgICAgVHJhbnNmb3JtVW5pdCAqKmhlYWQgICAgPSAmY3UtPnR1cy5oZWFkOworCisgICAg ICAgICpjdXMgPSBjdS0+bmV4dDsKKworICAgICAgICB3aGlsZSAoKmhlYWQpIHsKKyAgICAgICAg ICAgIFRyYW5zZm9ybVVuaXQgKnR1ID0gKmhlYWQ7CisgICAgICAgICAgICAqaGVhZCA9IHR1LT5u ZXh0OworICAgICAgICAgICAgZmZfcmVmc3RydWN0X3VucmVmKCZ0dSk7CisgICAgICAgIH0KKyAg ICAgICAgY3UtPnR1cy50YWlsID0gTlVMTDsKKworICAgICAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYo JmN1KTsKKyAgICB9Cit9CiAKIHZvaWQgZmZfdnZjX2VwX2luaXRfc3RhdF9jb2VmZihFbnRyeVBv aW50ICplcCwKIAljb25zdCBpbnQgYml0X2RlcHRoLCBjb25zdCBpbnQgcGVyc2lzdGVudF9yaWNl X2FkYXB0YXRpb25fZW5hYmxlZF9mbGFnKQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZj X2N0dS5oIGIvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oCmluZGV4IDgyODAxYjU1OGUuLjU3NzEz NmIyZTIgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuaAorKysgYi9saWJhdmNv ZGVjL3Z2Yy92dmNfY3R1LmgKQEAgLTQ2MCw2ICs0NjAsOCBAQCB0eXBlZGVmIHN0cnVjdCBBTEZQ YXJhbXMgewogCiAvL3V0aWxzCiB2b2lkIGZmX3Z2Y19zZXRfbmVpZ2hib3VyX2F2YWlsYWJsZShW VkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCwgaW50IHcsIGludCBoKTsKK3ZvaWQg ZmZfdnZjX2RlY29kZV9uZWlnaGJvdXIoVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHhfY3RiLCBp bnQgeV9jdGIsIGludCByeCwgaW50IHJ5LCBpbnQgcnMpOwordm9pZCBmZl92dmNfY3R1X2ZyZWVf Y3VzKENUVSAqY3R1KTsKIHZvaWQgZmZfdnZjX2VwX2luaXRfc3RhdF9jb2VmZihFbnRyeVBvaW50 ICplcCwgaW50IGJpdF9kZXB0aCwgaW50IHBlcnNpc3RlbnRfcmljZV9hZGFwdGF0aW9uX2VuYWJs ZWRfZmxhZyk7CiAKICNlbmRpZiAvLyBBVkNPREVDX1ZWQ19WVkNfQ1RVX0gKZGlmZiAtLWdpdCBh L2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYS5jIGIvbGliYXZjb2RlYy92dmMvdnZjX2ludHJhLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uODQwMjFhMzEwYwotLS0gL2Rl di9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYS5jCkBAIC0wLDAgKzEsNzk3IEBA CisvKgorICogVlZDIGludHJhIHByZWRpY3Rpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg TnVvIE1pCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0 LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaW5jbHVkZSAi bGliYXZ1dGlsL2ZyYW1lLmgiCisKKyNpbmNsdWRlICJ2dmNfZGF0YS5oIgorI2luY2x1ZGUgInZ2 Y19pbnRlci5oIgorI2luY2x1ZGUgInZ2Y19pbnRyYS5oIgorI2luY2x1ZGUgInZ2Y19pdHhfMWQu aCIKKworc3RhdGljIGludCBpc19jY2xtKGVudW0gSW50cmFQcmVkTW9kZSBtb2RlKQoreworICAg IHJldHVybiBtb2RlID09IElOVFJBX0xUX0NDTE0gfHwgbW9kZSA9PSBJTlRSQV9MX0NDTE0gfHwg bW9kZSA9PSBJTlRSQV9UX0NDTE07Cit9CisKK3N0YXRpYyBpbnQgZGVyaXZlX2lsZm5zdF9wcmVk X21vZGVfaW50cmEoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgVHJhbnNmb3JtQmxv Y2sgKnRiKQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAg Y29uc3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IENvZGluZ1VuaXQgKmN1 ICAgICAgICAgID0gbGMtPmN1OworICAgIGNvbnN0IGludCB4X3RiICAgICAgICAgICAgICAgID0g dGItPngwID4+IGZjLT5wcy5zcHMtPm1pbl9jYl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQg eV90YiAgICAgICAgICAgICAgICA9IHRiLT55MCA+PiBmYy0+cHMuc3BzLT5taW5fY2JfbG9nMl9z aXplX3k7CisgICAgY29uc3QgaW50IHhfYyAgICAgICAgICAgICAgICAgPSAodGItPngwICsgKHRi LT50Yl93aWR0aCA8PCBzcHMtPmhzaGlmdFsxXSA+PiAxKSApID4+IGZjLT5wcy5zcHMtPm1pbl9j Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeV9jICAgICAgICAgICAgICAgICA9ICh0Yi0+ eTAgKyAodGItPnRiX2hlaWdodCA8PCBzcHMtPnZzaGlmdFsxXSA+PiAxKSkgPj4gZmMtPnBzLnNw cy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBtaW5fY2Jfd2lkdGggICAgICAg ID0gZmMtPnBzLnBwcy0+bWluX2NiX3dpZHRoOworICAgIGNvbnN0IGludCBpbnRyYV9taXBfZmxh ZyAgICAgID0gU0FNUExFX0NUQihmYy0+dGFiLmltZiwgeF90YiwgeV90Yik7CisgICAgaW50IHBy ZWRfbW9kZV9pbnRyYSA9IHRiLT5jX2lkeCA9PSAwID8gY3UtPmludHJhX3ByZWRfbW9kZV95IDog Y3UtPmludHJhX3ByZWRfbW9kZV9jOworICAgIGlmIChpbnRyYV9taXBfZmxhZyAmJiAhdGItPmNf aWR4KSB7CisgICAgICAgIHByZWRfbW9kZV9pbnRyYSA9IElOVFJBX1BMQU5BUjsKKyAgICB9IGVs c2UgaWYgKGlzX2NjbG0ocHJlZF9tb2RlX2ludHJhKSkgeworICAgICAgICBpbnQgaW50cmFfbWlw X2ZsYWdfYyA9IFNBTVBMRV9DVEIoZmMtPnRhYi5pbWYsIHhfYywgeV9jKTsKKyAgICAgICAgaW50 IGN1X3ByZWRfbW9kZSA9IFNBTVBMRV9DVEIoZmMtPnRhYi5jcG1bMF0sIHhfYywgeV9jKTsKKyAg ICAgICAgaWYgKGludHJhX21pcF9mbGFnX2MpIHsKKyAgICAgICAgICAgIHByZWRfbW9kZV9pbnRy YSA9IElOVFJBX1BMQU5BUjsKKyAgICAgICAgfSBlbHNlIGlmIChjdV9wcmVkX21vZGUgPT0gTU9E RV9JQkMgfHwgY3VfcHJlZF9tb2RlID09IE1PREVfUExUKSB7CisgICAgICAgICAgICBwcmVkX21v ZGVfaW50cmEgPSBJTlRSQV9EQzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByZWRf bW9kZV9pbnRyYSA9IFNBTVBMRV9DVEIoZmMtPnRhYi5pcG0sIHhfYywgeV9jKTsKKyAgICAgICAg fQorICAgIH0KKyAgICBwcmVkX21vZGVfaW50cmEgPSBmZl92dmNfd2lkZV9hbmdsZV9tb2RlX21h cHBpbmcoY3UsIHRiLT50Yl93aWR0aCwgdGItPnRiX2hlaWdodCwgdGItPmNfaWR4LCBwcmVkX21v ZGVfaW50cmEpOworCisgICAgcmV0dXJuIHByZWRfbW9kZV9pbnRyYTsKK30KKworLy84LjcuNCBU cmFuc2Zvcm1hdGlvbiBwcm9jZXNzIGZvciBzY2FsZWQgdHJhbnNmb3JtIGNvZWZmaWNpZW50cwor c3RhdGljIHZvaWQgaWxmbnN0X3RyYW5zZm9ybShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBU cmFuc2Zvcm1CbG9jayAqdGIpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgICAgID0g bGMtPmZjLT5wcy5zcHM7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgICAgICAgID0gbGMtPmN1 OworICAgIGNvbnN0IGludCB3ICAgICAgICAgICAgICAgICA9IHRiLT50Yl93aWR0aDsKKyAgICBj b25zdCBpbnQgaCAgICAgICAgICAgICAgICAgPSB0Yi0+dGJfaGVpZ2h0OworICAgIGNvbnN0IGlu dCBuX2xmbnN0X291dF9zaXplICA9ICh3ID49IDggJiYgaCA+PSA4KSA/IDQ4IDogMTY7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8vLzwgbkxmbnN0T3V0U2l6ZQorICAgIGNvbnN0IGludCBsb2cy X2xmbnN0X3NpemUgICA9ICh3ID49IDggJiYgaCA+PSA4KSA/IDMgOiAyOyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vLzwgbG9nMkxmbnN0U2l6ZQorICAgIGNvbnN0IGludCBuX2xmbnN0X3Np emUgICAgICA9IDEgPDwgbG9nMl9sZm5zdF9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vLzwgbkxmbnN0U2l6ZQorICAgIGNvbnN0IGludCBub25femVyb19zaXplICAgICA9 ICgodyA9PSA4ICYmIGggPT0gOCkgfHwgKHcgPT0gNCAmJiBoID09IDQpKSA/IDggOiAxNjsgIC8v Lzwgbm9uWmVyb1NpemUKKyAgICBjb25zdCBpbnQgcHJlZF9tb2RlX2ludHJhICAgPSBkZXJpdmVf aWxmbnN0X3ByZWRfbW9kZV9pbnRyYShsYywgdGIpOworICAgIGNvbnN0IGludCB0cmFuc3Bvc2Ug ICAgICAgICA9IHByZWRfbW9kZV9pbnRyYSA+IDM0OworICAgIGludCB1WzE2XSwgdls0OF07CisK KyAgICBmb3IgKGludCB4ID0gMDsgeCA8IG5vbl96ZXJvX3NpemU7IHgrKykgeworICAgICAgICBp bnQgeGMgPSBmZl92dmNfZGlhZ19zY2FuX3hbMl1bMl1beF07CisgICAgICAgIGludCB5YyA9IGZm X3Z2Y19kaWFnX3NjYW5feVsyXVsyXVt4XTsKKyAgICAgICAgdVt4XSA9IHRiLT5jb2VmZnNbdyAq IHljICsgeGNdOworICAgIH0KKyAgICBmZl92dmNfaW52X2xmbnN0XzFkKHYsIHUsIG5vbl96ZXJv X3NpemUsIG5fbGZuc3Rfb3V0X3NpemUsIHByZWRfbW9kZV9pbnRyYSwKKyAgICAgICAgICAgICAg ICAgICAgICAgIGN1LT5sZm5zdF9pZHgsIHNwcy0+bG9nMl90cmFuc2Zvcm1fcmFuZ2UpOworICAg IGlmICh0cmFuc3Bvc2UpIHsKKyAgICAgICAgaW50ICpkc3QgPSB0Yi0+Y29lZmZzOworICAgICAg ICBjb25zdCBpbnQgKnNyYyA9IHY7CisgICAgICAgIGlmIChuX2xmbnN0X3NpemUgPT0gNCkgewor ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCA0OyB5KyspIHsKKyAgICAgICAgICAgICAg ICBkc3RbMF0gPSBzcmNbMF07CisgICAgICAgICAgICAgICAgZHN0WzFdID0gc3JjWzRdOworICAg ICAgICAgICAgICAgIGRzdFsyXSA9IHNyY1s4XTsKKyAgICAgICAgICAgICAgICBkc3RbM10gPSBz cmNbMTJdOworICAgICAgICAgICAgICAgIHNyYysrOworICAgICAgICAgICAgICAgIGRzdCArPSB3 OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChpbnQg eSA9IDA7IHkgPCA4OyB5KyspIHsKKyAgICAgICAgICAgICAgICBkc3RbMF0gPSBzcmNbMF07Cisg ICAgICAgICAgICAgICAgZHN0WzFdID0gc3JjWzhdOworICAgICAgICAgICAgICAgIGRzdFsyXSA9 IHNyY1sxNl07CisgICAgICAgICAgICAgICAgZHN0WzNdID0gc3JjWzI0XTsKKyAgICAgICAgICAg ICAgICBpZiAoeSA8IDQpIHsKKyAgICAgICAgICAgICAgICAgICAgZHN0WzRdID0gc3JjWzMyXTsK KyAgICAgICAgICAgICAgICAgICAgZHN0WzVdID0gc3JjWzM2XTsKKyAgICAgICAgICAgICAgICAg ICAgZHN0WzZdID0gc3JjWzQwXTsKKyAgICAgICAgICAgICAgICAgICAgZHN0WzddID0gc3JjWzQ0 XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3JjKys7CisgICAgICAgICAg ICAgICAgZHN0ICs9IHc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7 CisgICAgICAgIGludCAqZHN0ID0gdGItPmNvZWZmczsKKyAgICAgICAgY29uc3QgaW50ICpzcmMg PSB2OworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG5fbGZuc3Rfc2l6ZTsgeSsrKSB7Cisg ICAgICAgICAgICBpbnQgc2l6ZSA9ICh5IDwgNCkgPyBuX2xmbnN0X3NpemUgOiA0OworICAgICAg ICAgICAgbWVtY3B5KGRzdCwgc3JjLCBzaXplICogc2l6ZW9mKGludCkpOworICAgICAgICAgICAg c3JjICs9IHNpemU7CisgICAgICAgICAgICBkc3QgKz0gdzsKKyAgICAgICAgfQorICAgIH0KKyAg ICB0Yi0+bWF4X3NjYW5feCA9IG5fbGZuc3Rfc2l6ZSAtIDE7CisgICAgdGItPm1heF9zY2FuX3kg PSBuX2xmbnN0X3NpemUgLSAxOworfQorCisvL3BhcnQgb2YgOC43LjQgVHJhbnNmb3JtYXRpb24g cHJvY2VzcyBmb3Igc2NhbGVkIHRyYW5zZm9ybSBjb2VmZmljaWVudHMKK3N0YXRpYyB2b2lkIGRl cml2ZV90cmFuc2Zvcm1fdHlwZShjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBWVkNM b2NhbENvbnRleHQgKmxjLCBjb25zdCBUcmFuc2Zvcm1CbG9jayAqdGIsIGVudW0gVHhUeXBlICp0 cmgsIGVudW0gVHhUeXBlICp0cnYpCit7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgPSBsYy0+ Y3U7CisgICAgc3RhdGljIGNvbnN0IGVudW0gVHhUeXBlIG10c190b190cmhbXSA9IHtEQ1QyLCBE U1Q3LCBEQ1Q4LCBEU1Q3LCBEQ1Q4fTsKKyAgICBzdGF0aWMgY29uc3QgZW51bSBUeFR5cGUgbXRz X3RvX3RydltdID0ge0RDVDIsIERTVDcsIERTVDcsIERDVDgsIERDVDh9OworICAgIGNvbnN0IFZW Q1NQUyAqc3BzICAgICAgID0gZmMtPnBzLnNwczsKKyAgICBpbnQgaW1wbGljaXRfbXRzX2VuYWJs ZWQgPSAwOworICAgIGlmICh0Yi0+Y19pZHggfHwgKGN1LT5pc3Bfc3BsaXRfdHlwZSAhPSBJU1Bf Tk9fU1BMSVQgJiYgY3UtPmxmbnN0X2lkeCkpIHsKKyAgICAgICAgKnRyaCA9ICp0cnYgPSBEQ1Qy OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNwcy0+ci0+c3BzX210c19lbmFi bGVkX2ZsYWcpIHsKKyAgICAgICAgaWYgKGN1LT5pc3Bfc3BsaXRfdHlwZSAhPSBJU1BfTk9fU1BM SVQgfHwKKyAgICAgICAgICAgIChjdS0+c2J0X2ZsYWcgJiYgRkZNQVgodGItPnRiX3dpZHRoLCB0 Yi0+dGJfaGVpZ2h0KSA8PSAzMikgfHwKKyAgICAgICAgICAgICghc3BzLT5yLT5zcHNfZXhwbGlj aXRfbXRzX2ludHJhX2VuYWJsZWRfZmxhZyAmJiBjdS0+cHJlZF9tb2RlID09IE1PREVfSU5UUkEg JiYKKyAgICAgICAgICAgICFjdS0+bGZuc3RfaWR4ICYmICFjdS0+aW50cmFfbWlwX2ZsYWcpKSB7 CisgICAgICAgICAgICBpbXBsaWNpdF9tdHNfZW5hYmxlZCA9IDE7CisgICAgICAgIH0KKyAgICB9 CisgICAgaWYgKGltcGxpY2l0X210c19lbmFibGVkKSB7CisgICAgICAgIGNvbnN0IGludCB3ID0g dGItPnRiX3dpZHRoOworICAgICAgICBjb25zdCBpbnQgaCA9IHRiLT50Yl9oZWlnaHQ7CisgICAg ICAgIGlmIChjdS0+c2J0X2ZsYWcpIHsKKyAgICAgICAgICAgICp0cmggPSAoY3UtPnNidF9ob3Jp em9udGFsX2ZsYWcgIHx8IGN1LT5zYnRfcG9zX2ZsYWcpID8gRFNUNyA6IERDVDg7CisgICAgICAg ICAgICAqdHJ2ID0gKCFjdS0+c2J0X2hvcml6b250YWxfZmxhZyB8fCBjdS0+c2J0X3Bvc19mbGFn KSA/IERTVDcgOiBEQ1Q4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKnRyaCA9ICh3 ID49IDQgJiYgdyA8PSAxNikgPyBEU1Q3IDogRENUMjsKKyAgICAgICAgICAgICp0cnYgPSAoaCA+ PSA0ICYmIGggPD0gMTYpID8gRFNUNyA6IERDVDI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu OworICAgIH0KKyAgICAqdHJoID0gbXRzX3RvX3RyaFtjdS0+bXRzX2lkeF07CisgICAgKnRydiA9 IG10c190b190cnZbY3UtPm10c19pZHhdOworfQorCitzdGF0aWMgdm9pZCBhZGRfcmVzaWR1YWxf Zm9yX2pvaW50X2NvZGluZ19jaHJvbWEoVlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBU cmFuc2Zvcm1Vbml0ICp0dSwgVHJhbnNmb3JtQmxvY2sgKnRiLCBjb25zdCBpbnQgY2hyb21hX3Nj YWxlKQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgID0gbGMtPmZjOworICAgIGNv bnN0IENvZGluZ1VuaXQgKmN1ID0gbGMtPmN1OworICAgIGNvbnN0IGludCBjX3NpZ24gPSAxIC0g MiAqIGZjLT5wcy5waC5yLT5waF9qb2ludF9jYmNyX3NpZ25fZmxhZzsKKyAgICBjb25zdCBpbnQg c2hpZnQgID0gdHUtPmNvZGVkX2ZsYWdbMV0gXiB0dS0+Y29kZWRfZmxhZ1syXTsKKyAgICBjb25z dCBpbnQgY19pZHggID0gMSArIHR1LT5jb2RlZF9mbGFnWzFdOworICAgIGNvbnN0IHB0cmRpZmZf dCBzdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XTsKKyAgICBjb25zdCBpbnQgaHMg PSBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCB2cyA9IGZjLT5wcy5z cHMtPnZzaGlmdFtjX2lkeF07CisgICAgdWludDhfdCAqZHN0ID0gJmZjLT5mcmFtZS0+ZGF0YVtj X2lkeF1bKHRiLT55MCA+PiB2cykgKiBzdHJpZGUgKworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCh0Yi0+eDAgPj4gaHMpIDw8IGZjLT5wcy5zcHMtPnBpeGVsX3No aWZ0KV07CisgICAgaWYgKGNocm9tYV9zY2FsZSkgeworICAgICAgICBmYy0+dnZjZHNwLml0eC5w cmVkX3Jlc2lkdWFsX2pvaW50KHRiLT5jb2VmZnMsIHRiLT50Yl93aWR0aCwgdGItPnRiX2hlaWdo dCwgY19zaWduLCBzaGlmdCk7CisgICAgICAgIGZjLT52dmNkc3AuaW50cmEubG1jc19zY2FsZV9j aHJvbWEobGMsIHRiLT5jb2VmZnMsIHRiLT5jb2VmZnMsIHRiLT50Yl93aWR0aCwgdGItPnRiX2hl aWdodCwgY3UtPngwLCBjdS0+eTApOworICAgICAgICBmYy0+dnZjZHNwLml0eC5hZGRfcmVzaWR1 YWwoZHN0LCB0Yi0+Y29lZmZzLCB0Yi0+dGJfd2lkdGgsIHRiLT50Yl9oZWlnaHQsIHN0cmlkZSk7 CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmMtPnZ2Y2RzcC5pdHguYWRkX3Jlc2lkdWFsX2pvaW50 KGRzdCwgdGItPmNvZWZmcywgdGItPnRiX3dpZHRoLCB0Yi0+dGJfaGVpZ2h0LCBzdHJpZGUsIGNf c2lnbiwgc2hpZnQpOworICAgIH0KK30KKworc3RhdGljIGludCBhZGRfcmVjb25zdHJ1Y3RlZF9h cmVhKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCBjaF90eXBlLCBjb25zdCBpbnQgeDAs IGNvbnN0IGludCB5MCwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoKQoreworICAgIGNvbnN0IFZW Q1NQUyAqc3BzICAgICAgID0gbGMtPmZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IGhzID0gc3Bz LT5oc2hpZnRbY2hfdHlwZV07CisgICAgY29uc3QgaW50IHZzID0gc3BzLT52c2hpZnRbY2hfdHlw ZV07CisgICAgUmVjb25zdHJ1Y3RlZEFyZWEgKmE7CisKKyAgICBpZiAobGMtPm51bV9yYXNbY2hf dHlwZV0gPj0gRkZfQVJSQVlfRUxFTVMobGMtPnJhc1tjaF90eXBlXSkpCisgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgYSA9ICZsYy0+cmFzW2NoX3R5cGVdW2xjLT5u dW1fcmFzW2NoX3R5cGVdXTsKKyAgICBhLT54ID0geDAgPj4gaHM7CisgICAgYS0+eSA9IHkwID4+ IHZzOworICAgIGEtPncgPSB3ID4+IGhzOworICAgIGEtPmggPSBoID4+IHZzOworICAgIGxjLT5u dW1fcmFzW2NoX3R5cGVdKys7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRk X3R1X2FyZWEoY29uc3QgVHJhbnNmb3JtVW5pdCAqdHUsIGludCAqeDAsIGludCAqeTAsIGludCAq dywgaW50ICpoKQoreworICAgICp4MCA9IHR1LT54MDsKKyAgICAqeTAgPSB0dS0+eTA7CisgICAg KncgPSB0dS0+d2lkdGg7CisgICAgKmggPSB0dS0+aGVpZ2h0OworfQorCisjZGVmaW5lIE1JTl9J U1BfUFJFRF9XSURUSCA0CitzdGF0aWMgaW50IGdldF9sdW1hX3ByZWRpY3RfdW5pdChjb25zdCBD b2RpbmdVbml0ICpjdSwgY29uc3QgVHJhbnNmb3JtVW5pdCAqdHUsIGNvbnN0IGludCBpZHgsIGlu dCAqeDAsIGludCAqeTAsIGludCAqdywgaW50ICpoKQoreworICAgIGludCBoYXNfbHVtYSA9IDE7 CisgICAgYWRkX3R1X2FyZWEodHUsIHgwLCB5MCwgdywgaCk7CisgICAgaWYgKGN1LT5pc3Bfc3Bs aXRfdHlwZSA9PSBJU1BfVkVSX1NQTElUICYmIHR1LT53aWR0aCA8IE1JTl9JU1BfUFJFRF9XSURU SCkgeworICAgICAgICAqdyA9IE1JTl9JU1BfUFJFRF9XSURUSDsKKyAgICAgICAgaGFzX2x1bWEg PSAhKGlkeCAlIChNSU5fSVNQX1BSRURfV0lEVEggLyB0dS0+d2lkdGgpKTsKKyAgICB9CisgICAg cmV0dXJuIGhhc19sdW1hOworfQorCitzdGF0aWMgaW50IGdldF9jaHJvbWFfcHJlZGljdF91bml0 KGNvbnN0IENvZGluZ1VuaXQgKmN1LCBjb25zdCBUcmFuc2Zvcm1Vbml0ICp0dSwgY29uc3QgaW50 IGlkeCwgaW50ICp4MCwgaW50ICp5MCwgaW50ICp3LCBpbnQgKmgpCit7CisgICAgaWYgKGN1LT5p c3Bfc3BsaXRfdHlwZSA9PSBJU1BfTk9fU1BMSVQpIHsKKyAgICAgICAgYWRkX3R1X2FyZWEodHUs IHgwLCB5MCwgdywgaCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAoaWR4ID09 IGN1LT5udW1faW50cmFfc3VicGFydGl0aW9ucyAtIDEpIHsKKyAgICAgICAgKngwID0gY3UtPngw OworICAgICAgICAqeTAgPSBjdS0+eTA7CisgICAgICAgICp3ID0gY3UtPmNiX3dpZHRoOworICAg ICAgICAqaCA9IGN1LT5jYl9oZWlnaHQ7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBy ZXR1cm4gMDsKK30KKworLy84LjQuNS4xIEdlbmVyYWwgZGVjb2RpbmcgcHJvY2VzcyBmb3IgaW50 cmEgYmxvY2tzCitzdGF0aWMgdm9pZCBwcmVkaWN0X2ludHJhKFZWQ0xvY2FsQ29udGV4dCAqbGMs IGNvbnN0IFRyYW5zZm9ybVVuaXQgKnR1LCBjb25zdCBpbnQgaWR4LCBjb25zdCBpbnQgdGFyZ2V0 X2NoX3R5cGUpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgICAgICAgID0gbGMt PmZjOworICAgIGNvbnN0IENvZGluZ1VuaXQgKmN1ICAgICAgICA9IGxjLT5jdTsKKyAgICBjb25z dCBWVkNUcmVlVHlwZSB0cmVlX3R5cGUgPSBjdS0+dHJlZV90eXBlOworICAgIGludCB4MCwgeTAs IHcsIGg7CisgICAgaWYgKGN1LT5wcmVkX21vZGUgIT0gTU9ERV9JTlRSQSkgeworICAgICAgICBh ZGRfcmVjb25zdHJ1Y3RlZF9hcmVhKGxjLCB0YXJnZXRfY2hfdHlwZSwgdHUtPngwLCB0dS0+eTAs IHR1LT53aWR0aCwgdHUtPmhlaWdodCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg KCF0YXJnZXRfY2hfdHlwZSAmJiB0cmVlX3R5cGUgIT0gRFVBTF9UUkVFX0NIUk9NQSkgeworICAg ICAgICBpZiAoZ2V0X2x1bWFfcHJlZGljdF91bml0KGN1LCB0dSwgaWR4LCAmeDAsICZ5MCwgJncs ICZoKSkgeworICAgICAgICAgICAgZmZfdnZjX3NldF9uZWlnaGJvdXJfYXZhaWxhYmxlKGxjLCB4 MCwgeTAsIHcsIGgpOworICAgICAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5pbnRyYV9wcmVkKGxj LCB4MCwgeTAsIHcsIGgsIDApOworICAgICAgICAgICAgYWRkX3JlY29uc3RydWN0ZWRfYXJlYShs YywgMCwgeDAsIHkwLCB3LCBoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodGFyZ2V0X2No X3R5cGUgJiYgdHJlZV90eXBlICE9IERVQUxfVFJFRV9MVU1BKSB7CisgICAgICAgIGlmIChnZXRf Y2hyb21hX3ByZWRpY3RfdW5pdChjdSwgdHUsIGlkeCwgJngwLCAmeTAsICZ3LCAmaCkpeworICAg ICAgICAgICAgZmZfdnZjX3NldF9uZWlnaGJvdXJfYXZhaWxhYmxlKGxjLCB4MCwgeTAsIHcsIGgp OworICAgICAgICAgICAgaWYgKGlzX2NjbG0oY3UtPmludHJhX3ByZWRfbW9kZV9jKSkgeworICAg ICAgICAgICAgICAgIGZjLT52dmNkc3AuaW50cmEuaW50cmFfY2NsbV9wcmVkKGxjLCB4MCwgeTAs IHcsIGgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmYy0+dnZjZHNw LmludHJhLmludHJhX3ByZWQobGMsIHgwLCB5MCwgdywgaCwgMSk7CisgICAgICAgICAgICAgICAg ZmMtPnZ2Y2RzcC5pbnRyYS5pbnRyYV9wcmVkKGxjLCB4MCwgeTAsIHcsIGgsIDIpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgYWRkX3JlY29uc3RydWN0ZWRfYXJlYShsYywgMSwgeDAsIHkw LCB3LCBoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgc2NhbGVfY2xpcChp bnQgKmNvZWZmLCBjb25zdCBpbnQgbnp3LCBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsCisgICAg Y29uc3QgaW50IHNoaWZ0LCBjb25zdCBpbnQgbG9nMl90cmFuc2Zvcm1fcmFuZ2UpCit7CisgICAg Y29uc3QgaW50IGFkZCA9IDEgPDwgKHNoaWZ0IC0gMSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkg PCBoOyB5KyspIHsKKyAgICAgICAgaW50ICpwID0gY29lZmYgKyB5ICogdzsKKyAgICAgICAgZm9y IChpbnQgeCA9IDA7IHggPCBuenc7IHgrKykgeworICAgICAgICAgICAgKnAgPSBhdl9jbGlwX2lu dHAyKCgqcCArIGFkZCkgPj4gc2hpZnQsIGxvZzJfdHJhbnNmb3JtX3JhbmdlKTsKKyAgICAgICAg ICAgIHArKzsKKyAgICAgICAgfQorICAgICAgICBtZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSAqICh3 IC0gbnp3KSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzY2FsZShpbnQgKm91dCwgY29uc3Qg aW50ICppbiwgY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBpbnQgc2hpZnQpCit7Cisg ICAgY29uc3QgaW50IGFkZCA9IDEgPDwgKHNoaWZ0IC0gMSk7CisgICAgZm9yIChpbnQgeSA9IDA7 IHkgPCBoOyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4KyspIHsKKyAg ICAgICAgICAgIGludCAqbyA9IG91dCArIHkgKiB3ICsgeDsKKyAgICAgICAgICAgIGNvbnN0IGlu dCAqaSA9IGluICsgeSAqIHcgKyB4OworICAgICAgICAgICAgKm8gPSAoKmkgKyBhZGQpID4+IHNo aWZ0OworICAgICAgICB9CisgICAgfQorfQorCisvLyBwYXJ0IG9mIDguNy4zIFNjYWxpbmcgcHJv Y2VzcyBmb3IgdHJhbnNmb3JtIGNvZWZmaWNpZW50cworc3RhdGljIHZvaWQgZGVyaXZlX3FwKGNv bnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IFRyYW5zZm9ybVVuaXQgKnR1LCBUcmFuc2Zv cm1CbG9jayAqdGIpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgICAgICAgICA9IGxj LT5mYy0+cHMuc3BzOworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhlYWRlciAqcnNoICAgPSBsYy0+ c2MtPnNoLnI7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgICAgICAgICAgICA9IGxjLT5jdTsK KyAgICBpbnQgcXAsIHFwX2FjdF9vZmZzZXQ7CisKKyAgICBpZiAodGItPmNfaWR4ID09IDApIHsK KyAgICAgICAgLy9maXggbWUKKyAgICAgICAgcXAgPSBjdS0+cXBbTFVNQV0gKyBzcHMtPnFwX2Jk X29mZnNldDsKKyAgICAgICAgcXBfYWN0X29mZnNldCA9IGN1LT5hY3RfZW5hYmxlZF9mbGFnID8g LTUgOiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IGludCBpc19qY2JjciA9IHR1LT5q b2ludF9jYmNyX3Jlc2lkdWFsX2ZsYWcgJiYgdHUtPmNvZGVkX2ZsYWdbQ0JdICYmIHR1LT5jb2Rl ZF9mbGFnW0NSXTsKKyAgICAgICAgY29uc3QgaW50IGlkeCA9IGlzX2pjYmNyID8gSkNCQ1IgOiB0 Yi0+Y19pZHg7CisgICAgICAgIHFwID0gY3UtPnFwW2lkeF07CisgICAgICAgIHFwX2FjdF9vZmZz ZXQgPSBjdS0+YWN0X2VuYWJsZWRfZmxhZyA/IDEgOiAwOworICAgIH0KKyAgICBpZiAodGItPnRz KSB7CisgICAgICAgIGNvbnN0IGludCBxcF9wcmltZV90c19taW4gPSA0ICsgNiAqIHNwcy0+ci0+ c3BzX21pbl9xcF9wcmltZV90czsKKworICAgICAgICB0Yi0+cXAgPSBhdl9jbGlwKHFwICsgcXBf YWN0X29mZnNldCwgcXBfcHJpbWVfdHNfbWluLCA2MyArIHNwcy0+cXBfYmRfb2Zmc2V0KTsKKyAg ICAgICAgdGItPnJlY3Rfbm9uX3RzX2ZsYWcgPSAwOworICAgICAgICB0Yi0+YmRfc2hpZnQgPSAx MDsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBpbnQgbG9nX3N1bSA9IHRiLT5sb2cyX3Ri X3dpZHRoICsgdGItPmxvZzJfdGJfaGVpZ2h0OworICAgICAgICBjb25zdCBpbnQgcmVjdF9ub25f dHNfZmxhZyA9IGxvZ19zdW0gJiAxOworCisgICAgICAgIHRiLT5xcCA9IGF2X2NsaXAocXAgKyBx cF9hY3Rfb2Zmc2V0LCAwLCA2MyArIHNwcy0+cXBfYmRfb2Zmc2V0KTsKKyAgICAgICAgdGItPnJl Y3Rfbm9uX3RzX2ZsYWcgPSByZWN0X25vbl90c19mbGFnOworICAgICAgICB0Yi0+YmRfc2hpZnQg PSBzcHMtPmJpdF9kZXB0aCArIHJlY3Rfbm9uX3RzX2ZsYWcgKyAobG9nX3N1bSAvIDIpCisgICAg ICAgICAgICAgICAgICAgICArIDEwIC0gc3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSArIHJzaC0+ c2hfZGVwX3F1YW50X3VzZWRfZmxhZzsKKyAgICB9CisgICAgdGItPmJkX29mZnNldCA9ICgxIDw8 IHRiLT5iZF9zaGlmdCkgPj4gMTsKK30KKworLy84LjcuMyBTY2FsaW5nIHByb2Nlc3MgZm9yIHRy YW5zZm9ybSBjb2VmZmljaWVudHMKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludCBkZXJpdmVf c2NhbGUoY29uc3QgVHJhbnNmb3JtQmxvY2sgKnRiLCBjb25zdCBpbnQgc2hfZGVwX3F1YW50X3Vz ZWRfZmxhZykKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCByZW02WzYzICsgMiAqIDYgKyAx XSA9IHsKKyAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwg MiwgMywgNCwgNSwgMCwgMSwgMiwKKyAgICAgICAgMywgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwg MCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwKKyAgICAgICAgMCwgMSwgMiwgMywg NCwgNSwgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMywKKyAg ICAgICAgNCwgNSwgMCwgMSwgMiwgMywgNCwgNSwgMCwgMSwgMiwgMworICAgIH07CisKKyAgICBz dGF0aWMgY29uc3QgdWludDhfdCBkaXY2WzYzICsgMiAqIDYgKyAxXSA9IHsKKyAgICAgICAgMCwg MCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMiwgMiwgMywgIDMs ICAzLAorICAgICAgICAzLCAzLCAzLCA0LCA0LCA0LCA0LCA0LCA0LCA1LCA1LCA1LCA1LCA1LCA1 LCA2LCA2LCA2LCA2LCAgNiwgIDYsCisgICAgICAgIDcsIDcsIDcsIDcsIDcsIDcsIDgsIDgsIDgs IDgsIDgsIDgsIDksIDksIDksIDksIDksIDksIDEwLCAxMCwgMTAsIDEwLAorICAgICAgICAxMCwg MTAsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDEyLCAxMiwgMTIsIDEyCisgICAgfTsKKworICAg IGNvbnN0IHN0YXRpYyBpbnQgbGV2ZWxfc2NhbGVbMl1bNl0gPSB7CisgICAgICAgIHsgNDAsIDQ1 LCA1MSwgNTcsIDY0LCA3MiB9LAorICAgICAgICB7IDU3LCA2NCwgNzIsIDgwLCA5MCwgMTAyIH0K KyAgICB9OworICAgIGNvbnN0IGludCBhZGRpbiA9IHNoX2RlcF9xdWFudF91c2VkX2ZsYWcgJiYg IXRiLT50czsKKyAgICBjb25zdCBpbnQgcXAgICAgPSB0Yi0+cXAgKyBhZGRpbjsKKworICAgIHJl dHVybiBsZXZlbF9zY2FsZVt0Yi0+cmVjdF9ub25fdHNfZmxhZ11bcmVtNltxcF1dIDw8IGRpdjZb cXBdOworfQorCisvLzguNy4zIFNjYWxpbmcgcHJvY2VzcyBmb3IgdHJhbnNmb3JtIGNvZWZmaWNp ZW50cworc3RhdGljIGNvbnN0IHVpbnQ4X3QqIGRlcml2ZV9zY2FsZV9tKGNvbnN0IFZWQ0xvY2Fs Q29udGV4dCAqbGMsIGNvbnN0IFRyYW5zZm9ybUJsb2NrICp0YiwgdWludDhfdCAqc2NhbGVfbSkK K3sKKyAgICAvL1RhYmxlIDM4IOKAkyBTcGVjaWZpY2F0aW9uIG9mIHRoZSBzY2FsaW5nIG1hdHJp eCBpZGVudGlmaWVyIHZhcmlhYmxlIGlkIGFjY29yZGluZyB0byBwcmVkTW9kZSwgY0lkeCwgblRi VywgYW5kIG5UYkgKKyAgICBjb25zdCBpbnQgaWRzWzJdWzNdWzZdID0geworICAgICAgICB7Cisg ICAgICAgICAgICB7ICAwLCAgMiwgIDgsIDE0LCAyMCwgMjYgfSwKKyAgICAgICAgICAgIHsgIDAs ICAzLCAgOSwgMTUsIDIxLCAyMSB9LAorICAgICAgICAgICAgeyAgMCwgIDQsIDEwLCAxNiwgMjIs IDIyIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgeyAgMCwgIDUsIDExLCAx NywgMjMsIDI3IH0sCisgICAgICAgICAgICB7ICAwLCAgNiwgMTIsIDE4LCAyNCwgMjQgfSwKKyAg ICAgICAgICAgIHsgIDEsICA3LCAxMywgMTksIDI1LCAyNSB9LAorICAgICAgICB9CisgICAgfTsK KyAgICBjb25zdCBWVkNGcmFtZVBhcmFtU2V0cyAqcHMgICAgID0gJmxjLT5mYy0+cHM7CisgICAg Y29uc3QgVlZDU1BTICpzcHMgICAgICAgICAgICAgICA9IHBzLT5zcHM7CisgICAgY29uc3QgSDI2 NlJhd1NsaWNlSGVhZGVyICpyc2ggICA9IGxjLT5zYy0+c2gucjsKKyAgICBjb25zdCBDb2RpbmdV bml0ICpjdSAgICAgICAgICAgID0gbGMtPmN1OworICAgIGNvbnN0IFZWQ1NjYWxpbmdMaXN0ICpz bCAgICAgICAgPSBwcy0+c2w7CisgICAgY29uc3QgaW50IGlkID0gaWRzW2N1LT5wcmVkX21vZGUg IT0gTU9ERV9JTlRSQV1bdGItPmNfaWR4XVtGRk1BWCh0Yi0+bG9nMl90Yl9oZWlnaHQsIHRiLT5s b2cyX3RiX3dpZHRoKSAtIDFdOworICAgIGNvbnN0IGludCBsb2cyX21hdHJpeF9zaXplID0gKGlk IDwgMikgPyAxIDogKGlkIDwgOCkgPyAyIDogMzsKKyAgICB1aW50OF90ICpwID0gc2NhbGVfbTsK KworICAgIGF2X2Fzc2VydDAoIXNwcy0+ci0+c3BzX3NjYWxpbmdfbWF0cml4X2Zvcl9hbHRlcm5h dGl2ZV9jb2xvdXJfc3BhY2VfZGlzYWJsZWRfZmxhZyk7CisKKyAgICBpZiAoIXJzaC0+c2hfZXhw bGljaXRfc2NhbGluZ19saXN0X3VzZWRfZmxhZyB8fCB0Yi0+dHMgfHwKKyAgICAgICAgc3BzLT5y LT5zcHNfc2NhbGluZ19tYXRyaXhfZm9yX2xmbnN0X2Rpc2FibGVkX2ZsYWcgJiYgY3UtPmFwcGx5 X2xmbnN0X2ZsYWdbdGItPmNfaWR4XSkKKyAgICAgICAgcmV0dXJuIGZmX3Z2Y19kZWZhdWx0X3Nj YWxlX207CisKKyAgICBpZiAoIXNsKSB7CisgICAgICAgIGF2X2xvZyhsYy0+ZmMtPmF2Y3R4LCBB Vl9MT0dfV0FSTklORywgImJ1Zzogbm8gc2NhbGluZyBsaXN0IGFwcywgaWQgPSAlZCIsIHBzLT5w aC5yLT5waF9zY2FsaW5nX2xpc3RfYXBzX2lkKTsKKyAgICAgICAgcmV0dXJuIGZmX3Z2Y19kZWZh dWx0X3NjYWxlX207CisgICAgfQorCisgICAgZm9yIChpbnQgeSA9IHRiLT5taW5fc2Nhbl95OyB5 IDw9IHRiLT5tYXhfc2Nhbl95OyB5KyspIHsKKyAgICAgICAgY29uc3QgaW50IG9mZiA9IHkgPDwg bG9nMl9tYXRyaXhfc2l6ZSA+PiB0Yi0+bG9nMl90Yl9oZWlnaHQgPDwgbG9nMl9tYXRyaXhfc2l6 ZTsKKyAgICAgICAgY29uc3QgdWludDhfdCAqbSA9ICZzbC0+c2NhbGluZ19tYXRyaXhfcmVjW2lk XVtvZmZdOworCisgICAgICAgIGZvciAoaW50IHggPSB0Yi0+bWluX3NjYW5feDsgeCA8PSB0Yi0+ bWF4X3NjYW5feDsgeCsrKQorICAgICAgICAgICAgKnArKyA9IG1beCA8PCBsb2cyX21hdHJpeF9z aXplID4+IHRiLT5sb2cyX3RiX3dpZHRoXTsKKyAgICB9CisgICAgaWYgKGlkID49IFNMX1NUQVJU XzE2eDE2ICYmICF0Yi0+bWluX3NjYW5feCAmJiAhdGItPm1pbl9zY2FuX3kpCisgICAgICAgICpz Y2FsZV9tID0gc2wtPnNjYWxpbmdfbWF0cml4X2RjX3JlY1tpZCAtIFNMX1NUQVJUXzE2eDE2XTsK KworICAgIHJldHVybiBzY2FsZV9tOworfQorCisvLzguNy4zIFNjYWxpbmcgcHJvY2VzcyBmb3Ig dHJhbnNmb3JtIGNvZWZmaWNpZW50cworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgaW50IHNjYWxl X2NvZWZmKGNvbnN0IFRyYW5zZm9ybUJsb2NrICp0YiwgaW50IGNvZWZmLAorICAgIGNvbnN0IGlu dCBzY2FsZSwgY29uc3QgaW50IHNjYWxlX20sIGNvbnN0IGludCBsb2cyX3RyYW5zZm9ybV9yYW5n ZSkKK3sKKyAgICBjb2VmZiA9IChjb2VmZiAqIHNjYWxlICogc2NhbGVfbSArIHRiLT5iZF9vZmZz ZXQpID4+IHRiLT5iZF9zaGlmdDsKKyAgICBjb2VmZiA9IGF2X2NsaXBfaW50cDIoY29lZmYsIGxv ZzJfdHJhbnNmb3JtX3JhbmdlKTsKKyAgICByZXR1cm4gY29lZmY7Cit9CisKK3N0YXRpYyB2b2lk IGRlcXVhbnQoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgVHJhbnNmb3JtVW5pdCAq dHUsIFRyYW5zZm9ybUJsb2NrICp0YikKK3sKKyAgICB1aW50OF90IHRtcFtNQVhfVEJfU0laRSAq IE1BWF9UQl9TSVpFXTsKKyAgICBjb25zdCBIMjY2UmF3U2xpY2VIZWFkZXIgKnJzaCAgID0gbGMt PnNjLT5zaC5yOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgICAgICAgICAgICAgPSBsYy0+ZmMt PnBzLnNwczsKKyAgICBjb25zdCB1aW50OF90ICpzY2FsZV9tICAgICAgICAgID0gZGVyaXZlX3Nj YWxlX20obGMsIHRiLCB0bXApOworICAgIGludCBzY2FsZTsKKworICAgIGRlcml2ZV9xcChsYywg dHUsIHRiKTsKKyAgICBzY2FsZSA9IGRlcml2ZV9zY2FsZSh0YiwgcnNoLT5zaF9kZXBfcXVhbnRf dXNlZF9mbGFnKTsKKworICAgIGZvciAoaW50IHkgPSB0Yi0+bWluX3NjYW5feTsgeSA8PSB0Yi0+ bWF4X3NjYW5feTsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHggPSB0Yi0+bWluX3NjYW5feDsg eCA8PSB0Yi0+bWF4X3NjYW5feDsgeCsrKSB7CisgICAgICAgICAgICBpbnQgKmNvZWZmID0gdGIt PmNvZWZmcyArIHkgKiB0Yi0+dGJfd2lkdGggKyB4OworCisgICAgICAgICAgICBpZiAoKmNvZWZm KQorICAgICAgICAgICAgICAgICpjb2VmZiA9IHNjYWxlX2NvZWZmKHRiLCAqY29lZmYsIHNjYWxl LCAqc2NhbGVfbSwgc3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSk7CisgICAgICAgICAgICBzY2Fs ZV9tKys7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vdHJhbnNtYXRyaXhbMF1bMF0KKyNkZWZp bmUgRENUX0EgNjQKK3N0YXRpYyB2b2lkIGl0eF8yZChjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZj LCBUcmFuc2Zvcm1CbG9jayAqdGIsIGNvbnN0IGVudW0gVHhUeXBlIHRyaCwgY29uc3QgZW51bSBU eFR5cGUgdHJ2KQoreworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAg IGNvbnN0IGludCB3ICAgICAgICAgPSB0Yi0+dGJfd2lkdGg7CisgICAgY29uc3QgaW50IGggICAg ICAgICA9IHRiLT50Yl9oZWlnaHQ7CisgICAgY29uc3Qgc2l6ZV90IG56dyAgICA9IHRiLT5tYXhf c2Nhbl94ICsgMTsKKyAgICBjb25zdCBzaXplX3QgbnpoICAgID0gdGItPm1heF9zY2FuX3kgKyAx OworICAgIGNvbnN0IGludCBzaGlmdFtdICAgPSB7IDcsIDUgKyBzcHMtPmxvZzJfdHJhbnNmb3Jt X3JhbmdlIC0gc3BzLT5iaXRfZGVwdGggfTsKKworICAgIGlmICh3ID09IGggJiYgbnp3ID09IDEg JiYgbnpoID09IDEgJiYgdHJoID09IERDVDIgJiYgdHJ2ID09IERDVDIpIHsKKyAgICAgICAgY29u c3QgaW50IGFkZFtdID0geyAxIDw8IChzaGlmdFswXSAtIDEpLCAxIDw8IChzaGlmdFsxXSAtIDEp IH07CisgICAgICAgIGNvbnN0IGludCB0ICAgICA9ICh0Yi0+Y29lZmZzWzBdICogRENUX0EgKyBh ZGRbMF0pID4+IHNoaWZ0WzBdOworICAgICAgICBjb25zdCBpbnQgZGMgICAgPSAodCAqIERDVF9B ICsgYWRkWzFdKSA+PiBzaGlmdFsxXTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHcg KiBoOyBpKyspCisgICAgICAgICAgICB0Yi0+Y29lZmZzW2ldID0gZGM7CisKKyAgICAgICAgcmV0 dXJuOworICAgIH0KKworICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnp3OyB4KyspCisgICAgICAg IGZjLT52dmNkc3AuaXR4Lml0eFt0cnZdW3RiLT5sb2cyX3RiX2hlaWdodCAtIDFdKHRiLT5jb2Vm ZnMgKyB4LCB3LCBuemgpOworICAgIHNjYWxlX2NsaXAodGItPmNvZWZmcywgbnp3LCB3LCBoLCBz aGlmdFswXSwgc3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSk7CisKKyAgICBmb3IgKGludCB5ID0g MDsgeSA8IGg7IHkrKykKKyAgICAgICAgZmMtPnZ2Y2RzcC5pdHguaXR4W3RyaF1bdGItPmxvZzJf dGJfd2lkdGggLSAxXSh0Yi0+Y29lZmZzICsgeSAqIHcsIDEsIG56dyk7CisgICAgc2NhbGUodGIt PmNvZWZmcywgdGItPmNvZWZmcywgdywgaCwgc2hpZnRbMV0pOworfQorCitzdGF0aWMgdm9pZCBp dHhfMWQoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgVHJhbnNmb3JtQmxvY2sgKnRiLCBjb25z dCBlbnVtIFR4VHlwZSB0cmgsIGNvbnN0IGVudW0gVHhUeXBlIHRydikKK3sKKyAgICBjb25zdCBW VkNTUFMgKnNwcyAgID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBpbnQgdyAgICAgICAgID0gdGIt PnRiX3dpZHRoOworICAgIGNvbnN0IGludCBoICAgICAgICAgPSB0Yi0+dGJfaGVpZ2h0OworICAg IGNvbnN0IHNpemVfdCBuencgICAgPSB0Yi0+bWF4X3NjYW5feCArIDE7CisgICAgY29uc3Qgc2l6 ZV90IG56aCAgICA9IHRiLT5tYXhfc2Nhbl95ICsgMTsKKworICAgIGlmICgodyA+IDEgJiYgbnp3 ID09IDEgJiYgdHJoID09IERDVDIpIHx8IChoID4gMSAmJiBuemggPT0gMSAmJiB0cnYgPT0gRENU MikpIHsKKyAgICAgICAgY29uc3QgaW50IHNoaWZ0ID0gNiArIHNwcy0+bG9nMl90cmFuc2Zvcm1f cmFuZ2UgLSBzcHMtPmJpdF9kZXB0aDsKKyAgICAgICAgY29uc3QgaW50IGFkZCAgID0gMSA8PCAo c2hpZnQgLSAxKTsKKyAgICAgICAgY29uc3QgaW50IGRjICAgID0gKHRiLT5jb2VmZnNbMF0gKiBE Q1RfQSArIGFkZCkgPj4gc2hpZnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3ICog aDsgaSsrKQorICAgICAgICAgICAgdGItPmNvZWZmc1tpXSA9IGRjOworCisgICAgICAgIHJldHVy bjsKKyAgICB9CisKKyAgICBpZiAodyA+IDEpCisgICAgICAgIGZjLT52dmNkc3AuaXR4Lml0eFt0 cmhdW3RiLT5sb2cyX3RiX3dpZHRoIC0gMV0odGItPmNvZWZmcywgMSwgbnp3KTsKKyAgICBlbHNl CisgICAgICAgIGZjLT52dmNkc3AuaXR4Lml0eFt0cnZdW3RiLT5sb2cyX3RiX2hlaWdodCAtIDFd KHRiLT5jb2VmZnMsIDEsIG56aCk7CisgICAgc2NhbGUodGItPmNvZWZmcywgdGItPmNvZWZmcywg dywgaCwgNiArIHNwcy0+bG9nMl90cmFuc2Zvcm1fcmFuZ2UgLSBzcHMtPmJpdF9kZXB0aCk7Cit9 CisKK3N0YXRpYyB2b2lkIHRyYW5zZm9ybV9iZHBjbShUcmFuc2Zvcm1CbG9jayAqdGIsIGNvbnN0 IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IENvZGluZ1VuaXQgKmN1KQoreworICAgIGNvbnN0 IFZWQ1NQUyAqc3BzICAgICAgICA9IGxjLT5mYy0+cHMuc3BzOworICAgIGNvbnN0IEludHJhUHJl ZE1vZGUgbW9kZSA9IHRiLT5jX2lkeCA/IGN1LT5pbnRyYV9wcmVkX21vZGVfYyA6IGN1LT5pbnRy YV9wcmVkX21vZGVfeTsKKyAgICBjb25zdCBpbnQgdmVydGljYWwgICAgICAgPSBtb2RlID09IElO VFJBX1ZFUlQ7CisgICAgbGMtPmZjLT52dmNkc3AuaXR4LnRyYW5zZm9ybV9iZHBjbSh0Yi0+Y29l ZmZzLCB0Yi0+dGJfd2lkdGgsIHRiLT50Yl9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2ZXJ0aWNhbCwgc3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSk7Cisg ICAgaWYgKHZlcnRpY2FsKQorICAgICAgICB0Yi0+bWF4X3NjYW5feSA9IHRiLT50Yl9oZWlnaHQg LSAxOworICAgIGVsc2UKKyAgICAgICAgdGItPm1heF9zY2FuX3ggPSB0Yi0+dGJfd2lkdGggLSAx OworfQorCitzdGF0aWMgdm9pZCBpdHJhbnNmb3JtKFZWQ0xvY2FsQ29udGV4dCAqbGMsIFRyYW5z Zm9ybVVuaXQgKnR1LCBjb25zdCBpbnQgdHVfaWR4LCBjb25zdCBpbnQgdGFyZ2V0X2NoX3R5cGUp Cit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgID0gbGMtPmZjOworICAgIGNvbnN0 IFZWQ1NQUyAqc3BzICAgICAgICAgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgVlZDU0ggKnNo ICAgICAgICAgICAgID0gJmxjLT5zYy0+c2g7CisgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgICAg ICAgID0gbGMtPmN1OworICAgIGNvbnN0IGludCBwcyAgICAgICAgICAgICAgICA9IGZjLT5wcy5z cHMtPnBpeGVsX3NoaWZ0OworICAgIERFQ0xBUkVfQUxJR05FRCgzMiwgaW50LCB0ZW1wKVtNQVhf VEJfU0laRSAqIE1BWF9UQl9TSVpFXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHUtPm5i X3RiczsgaSsrKSB7CisgICAgICAgIFRyYW5zZm9ybUJsb2NrICp0YiAgPSAmdHUtPnRic1tpXTsK KyAgICAgICAgY29uc3QgaW50IGNfaWR4ICAgICA9IHRiLT5jX2lkeDsKKyAgICAgICAgY29uc3Qg aW50IGNoX3R5cGUgICA9IGNfaWR4ID4gMDsKKworICAgICAgICBpZiAoY2hfdHlwZSA9PSB0YXJn ZXRfY2hfdHlwZSAmJiB0Yi0+aGFzX2NvZWZmcykgeworICAgICAgICAgICAgY29uc3QgaW50IHcg ICAgICAgICAgICAgPSB0Yi0+dGJfd2lkdGg7CisgICAgICAgICAgICBjb25zdCBpbnQgaCAgICAg ICAgICAgICA9IHRiLT50Yl9oZWlnaHQ7CisgICAgICAgICAgICBjb25zdCBpbnQgY2hyb21hX3Nj YWxlICA9IGNoX3R5cGUgJiYgc2gtPnItPnNoX2xtY3NfdXNlZF9mbGFnICYmIGZjLT5wcy5waC5y LT5waF9jaHJvbWFfcmVzaWR1YWxfc2NhbGVfZmxhZyAmJiAodyAqIGggPiA0KTsKKyAgICAgICAg ICAgIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUgID0gZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF07 CisgICAgICAgICAgICBjb25zdCBpbnQgaHMgICAgICAgICAgICA9IHNwcy0+aHNoaWZ0W2NfaWR4 XTsKKyAgICAgICAgICAgIGNvbnN0IGludCB2cyAgICAgICAgICAgID0gc3BzLT52c2hpZnRbY19p ZHhdOworICAgICAgICAgICAgdWludDhfdCAqZHN0ICAgICAgICAgICAgPSAmZmMtPmZyYW1lLT5k YXRhW2NfaWR4XVsodGItPnkwID4+IHZzKSAqIHN0cmlkZSArICgodGItPngwID4+IGhzKSA8PCBw cyldOworCisgICAgICAgICAgICBpZiAoY3UtPmJkcGNtX2ZsYWdbdGItPmNfaWR4XSkKKyAgICAg ICAgICAgICAgICB0cmFuc2Zvcm1fYmRwY20odGIsIGxjLCBjdSk7CisgICAgICAgICAgICBkZXF1 YW50KGxjLCB0dSwgdGIpOworICAgICAgICAgICAgaWYgKCF0Yi0+dHMpIHsKKyAgICAgICAgICAg ICAgICBlbnVtIFR4VHlwZSB0cmgsIHRydjsKKworICAgICAgICAgICAgICAgIGlmIChjdS0+YXBw bHlfbGZuc3RfZmxhZ1tjX2lkeF0pCisgICAgICAgICAgICAgICAgICAgIGlsZm5zdF90cmFuc2Zv cm0obGMsIHRiKTsKKyAgICAgICAgICAgICAgICBkZXJpdmVfdHJhbnNmb3JtX3R5cGUoZmMsIGxj LCB0YiwgJnRyaCwgJnRydik7CisgICAgICAgICAgICAgICAgaWYgKHcgPiAxICYmIGggPiAxKQor ICAgICAgICAgICAgICAgICAgICBpdHhfMmQoZmMsIHRiLCB0cmgsIHRydik7CisgICAgICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpdHhfMWQoZmMsIHRiLCB0cmgsIHRydik7 CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaHJvbWFfc2NhbGUpCisgICAgICAg ICAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5sbWNzX3NjYWxlX2Nocm9tYShsYywgdGVtcCwgdGIt PmNvZWZmcywgdywgaCwgY3UtPngwLCBjdS0+eTApOworICAgICAgICAgICAgZmMtPnZ2Y2RzcC5p dHguYWRkX3Jlc2lkdWFsKGRzdCwgY2hyb21hX3NjYWxlID8gdGVtcCA6IHRiLT5jb2VmZnMsIHcs IGgsIHN0cmlkZSk7CisKKyAgICAgICAgICAgIGlmICh0dS0+am9pbnRfY2Jjcl9yZXNpZHVhbF9m bGFnICYmIHRiLT5jX2lkeCkKKyAgICAgICAgICAgICAgICBhZGRfcmVzaWR1YWxfZm9yX2pvaW50 X2NvZGluZ19jaHJvbWEobGMsIHR1LCB0YiwgY2hyb21hX3NjYWxlKTsKKyAgICAgICAgfQorICAg IH0KK30KKworc3RhdGljIGludCByZWNvbnN0cnVjdChWVkNMb2NhbENvbnRleHQgKmxjKQorewor ICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgQ29kaW5nVW5pdCAqY3UgICAg ICA9IGxjLT5jdTsKKyAgICBjb25zdCBpbnQgc3RhcnQgICAgID0gY3UtPnRyZWVfdHlwZSA9PSBE VUFMX1RSRUVfQ0hST01BOworICAgIGNvbnN0IGludCBlbmQgICAgICAgPSBmYy0+cHMuc3BzLT5y LT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgJiYgKGN1LT50cmVlX3R5cGUgIT0gRFVBTF9UUkVFX0xV TUEpOworCisgICAgZm9yIChpbnQgY2hfdHlwZSA9IHN0YXJ0OyBjaF90eXBlIDw9IGVuZDsgY2hf dHlwZSsrKSB7CisgICAgICAgIFRyYW5zZm9ybVVuaXQgKnR1ID0gY3UtPnR1cy5oZWFkOworICAg ICAgICBmb3IgKGludCBpID0gMDsgdHU7IGkrKykgeworICAgICAgICAgICAgcHJlZGljdF9pbnRy YShsYywgdHUsIGksIGNoX3R5cGUpOworICAgICAgICAgICAgaXRyYW5zZm9ybShsYywgdHUsIGks IGNoX3R5cGUpOworICAgICAgICAgICAgdHUgPSB0dS0+bmV4dDsKKyAgICAgICAgfQorICAgIH0K KyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX3Z2Y19yZWNvbnN0cnVjdChWVkNMb2NhbENvbnRl eHQgKmxjLCBjb25zdCBpbnQgcnMsIGNvbnN0IGludCByeCwgY29uc3QgaW50IHJ5KQoreworICAg IGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgICA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMg KnNwcyAgICAgICAgICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IGludCB4X2N0YiAgICAgICAg ICAgICA9IHJ4IDw8IHNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCB5X2N0YiAg ICAgICAgICAgICA9IHJ5IDw8IHNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIENUVSAqY3R1ICAg ICAgICAgICAgICAgICAgICA9IGZjLT50YWIuY3R1cyArIHJzOworICAgIENvZGluZ1VuaXQgKmN1 ICAgICAgICAgICAgICA9IGN0dS0+Y3VzOworICAgIGludCByZXQgICAgICAgICAgICAgICAgICAg ICA9IDA7CisKKyAgICBsYy0+bnVtX3Jhc1swXSA9IGxjLT5udW1fcmFzWzFdID0gMDsKKyAgICBs Yy0+bG1jcy54X3ZwZHUgPSAtMTsKKyAgICBsYy0+bG1jcy55X3ZwZHUgPSAtMTsKKyAgICBmZl92 dmNfZGVjb2RlX25laWdoYm91cihsYywgeF9jdGIsIHlfY3RiLCByeCwgcnksIHJzKTsKKyAgICB3 aGlsZSAoY3UpIHsKKyAgICAgICAgbGMtPmN1ID0gY3U7CisKKyAgICAgICAgaWYgKGN1LT5jaWlw X2ZsYWcpCisgICAgICAgICAgICBmZl92dmNfcHJlZGljdF9jaWlwKGxjKTsKKyAgICAgICAgaWYg KGN1LT5jb2RlZF9mbGFnKSB7CisgICAgICAgICAgICByZXQgPSByZWNvbnN0cnVjdChsYyk7Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGRfcmVjb25zdHJ1Y3RlZF9hcmVhKGxjLCBM VU1BLCBjdS0+eDAsIGN1LT55MCwgY3UtPmNiX3dpZHRoLCBjdS0+Y2JfaGVpZ2h0KTsKKyAgICAg ICAgICAgIGFkZF9yZWNvbnN0cnVjdGVkX2FyZWEobGMsIENIUk9NQSwgY3UtPngwLCBjdS0+eTAs IGN1LT5jYl93aWR0aCwgY3UtPmNiX2hlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAgY3UgPSBj dS0+bmV4dDsKKyAgICB9CisgICAgZmZfdnZjX2N0dV9mcmVlX2N1cyhjdHUpOworICAgIHJldHVy biByZXQ7Cit9CisKK2ludCBmZl92dmNfZ2V0X21pcF9zaXplX2lkKGNvbnN0IGludCB3LCBjb25z dCBpbnQgaCkKK3sKKyAgICBpZiAodyA9PSA0ICYmIGggPT0gNCkKKyAgICAgICAgcmV0dXJuIDA7 CisgICAgaWYgKCh3ID09IDQgfHwgaCA9PSA0KSB8fCAodyA9PSA4ICYmIGggPT0gOCkpCisgICAg ICAgIHJldHVybiAxOworICAgIHJldHVybiAyOworfQorCitpbnQgZmZfdnZjX25zY2FsZV9kZXJp dmUoY29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBpbnQgbW9kZSkKK3sKKyAgICBpbnQg c2lkZV9zaXplLCBuc2NhbGU7CisgICAgYXZfYXNzZXJ0MChtb2RlIDwgSU5UUkFfTFRfQ0NMTSAm JiAhKG1vZGUgPiBJTlRSQV9IT1JaICYmIG1vZGUgPCBJTlRSQV9WRVJUKSk7CisgICAgaWYgKG1v ZGUgPT0gSU5UUkFfUExBTkFSIHx8IG1vZGUgPT0gSU5UUkFfREMgfHwKKyAgICAgICAgbW9kZSA9 PSBJTlRSQV9IT1JaIHx8IG1vZGUgPT0gSU5UUkFfVkVSVCkgeworICAgICAgICBuc2NhbGUgPSAo YXZfbG9nMih3KSArIGF2X2xvZzIoaCkgLSAyKSA+PiAyOworICAgIH0gZWxzZSB7CisgICAgICAg IGNvbnN0IGludCBpbnRyYV9wcmVkX2FuZ2xlID0gZmZfdnZjX2ludHJhX3ByZWRfYW5nbGVfZGVy aXZlKG1vZGUpOworICAgICAgICBjb25zdCBpbnQgaW52X2FuZ2xlICAgICAgICA9IGZmX3Z2Y19p bnRyYV9pbnZfYW5nbGVfZGVyaXZlKGludHJhX3ByZWRfYW5nbGUpOworICAgICAgICBpZiAobW9k ZSA+PSBJTlRSQV9WRVJUKQorICAgICAgICAgICAgc2lkZV9zaXplID0gaDsKKyAgICAgICAgaWYg KG1vZGUgPD0gSU5UUkFfSE9SWikKKyAgICAgICAgICAgIHNpZGVfc2l6ZSA9IHc7CisgICAgICAg IG5zY2FsZSA9IEZGTUlOKDIsIGF2X2xvZzIoc2lkZV9zaXplKSAtIGF2X2xvZzIoMyAqIGludl9h bmdsZSAtIDIpICsgOCk7CisgICAgfQorICAgIHJldHVybiBuc2NhbGU7Cit9CisKK2ludCBmZl92 dmNfbmVlZF9wZHBjKGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29uc3QgdWludDhfdCBiZHBj bV9mbGFnLCBjb25zdCBpbnQgbW9kZSwgY29uc3QgaW50IHJlZl9pZHgpCit7CisgICAgYXZfYXNz ZXJ0MChtb2RlIDwgSU5UUkFfTFRfQ0NMTSk7CisgICAgaWYgKCh3ID49IDQgJiYgaCA+PSA0KSAm JiAhcmVmX2lkeCAmJiAhYmRwY21fZmxhZykgeworICAgICAgICBpbnQgbnNjYWxlOworICAgICAg ICBpZiAobW9kZSA9PSBJTlRSQV9QTEFOQVIgfHwgbW9kZSA9PSBJTlRSQV9EQyB8fAorICAgICAg ICAgICAgbW9kZSA9PSBJTlRSQV9IT1JaIHx8IG1vZGUgPT0gSU5UUkFfVkVSVCkKKyAgICAgICAg ICAgIHJldHVybiAxOworICAgICAgICBpZiAobW9kZSA+IElOVFJBX0hPUlogJiYgbW9kZSA8IElO VFJBX1ZFUlQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgbnNjYWxlID0gZmZfdnZj X25zY2FsZV9kZXJpdmUodywgaCwgbW9kZSk7CisgICAgICAgIHJldHVybiBuc2NhbGUgPj0gMDsK KworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IFJlY29uc3RydWN0ZWRB cmVhKiBnZXRfcmVjb25zdHJ1Y3RlZF9hcmVhKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNv bnN0IGludCB4LCBjb25zdCBpbnQgeSwgY29uc3QgaW50IGNfaWR4KQoreworICAgIGNvbnN0IGlu dCBjaF90eXBlID0gY19pZHggPiAwOworICAgIGZvciAoaW50IGkgPSBsYy0+bnVtX3Jhc1tjaF90 eXBlXSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIGNvbnN0IFJlY29uc3RydWN0ZWRBcmVh KiBhID0gJmxjLT5yYXNbY2hfdHlwZV1baV07CisgICAgICAgIGNvbnN0IGludCByID0gKGEtPngg KyBhLT53KTsKKyAgICAgICAgY29uc3QgaW50IGIgPSAoYS0+eSArIGEtPmgpOworICAgICAgICBp ZiAoYS0+eCA8PSB4ICYmIHggPCByICYmIGEtPnkgPD0geSAmJiB5IDwgYikKKyAgICAgICAgICAg IHJldHVybiBhOworCisgICAgICAgIC8vaXQncyB0b28gZmFyIGF3YXksIG5vIG5lZWQgY2hlY2sg aXQ7CisgICAgICAgIGlmICh4ID49IHIgJiYgeSA+PSBiKQorICAgICAgICAgICAgYnJlYWs7Cisg ICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitpbnQgZmZfdnZjX2dldF90b3BfYXZhaWxhYmxl KGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwgaW50 IHRhcmdldF9zaXplLCBjb25zdCBpbnQgY19pZHgpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250 ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyA9IGZjLT5wcy5zcHM7Cisg ICAgY29uc3QgaW50IGhzID0gc3BzLT5oc2hpZnRbY19pZHhdOworICAgIGNvbnN0IGludCB2cyA9 IHNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgbG9nMl9jdGJfc2l6ZV92ICAgPSBz cHMtPmN0Yl9sb2cyX3NpemVfeSAtIHZzOworICAgIGNvbnN0IGludCBlbmRfb2ZfY3RiX3ggICAg ICA9ICgobGMtPmN1LT54MCA+PiBzcHMtPmN0Yl9sb2cyX3NpemVfeSkgKyAxKSA8PCBzcHMtPmN0 Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeTBiICAgICAgICAgICAgICAgPSBhdl9tb2Rf dWludHAyKHksIGxvZzJfY3RiX3NpemVfdik7CisgICAgY29uc3QgaW50IG1heF94ICAgICAgICAg ICAgID0gRkZNSU4oZmMtPnBzLnBwcy0+d2lkdGgsIGVuZF9vZl9jdGJfeCkgPj4gaHM7CisgICAg Y29uc3QgUmVjb25zdHJ1Y3RlZEFyZWEgKmE7CisgICAgaW50IHB4ID0geDsKKworICAgIGlmICgh eTBiKSB7CisgICAgICAgIGlmICghbGMtPmN0Yl91cF9mbGFnKQorICAgICAgICAgICAgcmV0dXJu IDA7CisgICAgICAgIHRhcmdldF9zaXplID0gRkZNSU4odGFyZ2V0X3NpemUsIChsYy0+ZW5kX29m X3RpbGVzX3ggPj4gaHMpIC0geCk7CisgICAgICAgIGlmIChzcHMtPnItPnNwc19lbnRyb3B5X2Nv ZGluZ19zeW5jX2VuYWJsZWRfZmxhZykKKyAgICAgICAgICAgIHRhcmdldF9zaXplID0gRkZNSU4o dGFyZ2V0X3NpemUsIChlbmRfb2ZfY3RiX3ggPj4gaHMpIC0geCk7CisgICAgICAgIHJldHVybiB0 YXJnZXRfc2l6ZTsKKyAgICB9CisKKyAgICB0YXJnZXRfc2l6ZSA9IEZGTUFYKDAsIEZGTUlOKHRh cmdldF9zaXplLCBtYXhfeCAtIHgpKTsKKyAgICB3aGlsZSAodGFyZ2V0X3NpemUgPiAwICYmIChh ID0gZ2V0X3JlY29uc3RydWN0ZWRfYXJlYShsYywgcHgsIHkgLSAxLCBjX2lkeCkpKSB7CisgICAg ICAgIGNvbnN0IGludCBzeiA9IEZGTUlOKHRhcmdldF9zaXplLCBhLT54ICsgYS0+dyAtIHB4KTsK KyAgICAgICAgcHggKz0gc3o7CisgICAgICAgIHRhcmdldF9zaXplIC09IHN6OworICAgIH0KKyAg ICByZXR1cm4gcHggLSB4OworfQorCitpbnQgZmZfdnZjX2dldF9sZWZ0X2F2YWlsYWJsZShjb25z dCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGludCB0YXJn ZXRfc2l6ZSwgY29uc3QgaW50IGNfaWR4KQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAq ZmMgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDU1BTICpzcHMgPSBmYy0+cHMuc3BzOworICAgIGNv bnN0IGludCBocyA9IHNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgdnMgPSBzcHMt PnZzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IGxvZzJfY3RiX3NpemVfaCAgID0gIHNwcy0+ Y3RiX2xvZzJfc2l6ZV95IC0gaHM7CisgICAgY29uc3QgaW50IHgwYiAgICAgICAgICAgICAgID0g YXZfbW9kX3VpbnRwMih4LCBsb2cyX2N0Yl9zaXplX2gpOworICAgIGNvbnN0IGludCBlbmRfb2Zf Y3RiX3kgICAgICA9ICgobGMtPmN1LT55MCA+PiBzcHMtPmN0Yl9sb2cyX3NpemVfeSkgKyAxKSA8 PCBzcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgbWF4X3kgICAgICAgICAgICAg PSBGRk1JTihmYy0+cHMucHBzLT5oZWlnaHQsIGVuZF9vZl9jdGJfeSkgPj4gdnM7CisgICAgY29u c3QgUmVjb25zdHJ1Y3RlZEFyZWEgKmE7CisgICAgaW50ICBweSA9IHk7CisKKyAgICBpZiAoIXgw YiAmJiAhbGMtPmN0Yl9sZWZ0X2ZsYWcpCisgICAgICAgIHJldHVybiAwOworCisgICAgdGFyZ2V0 X3NpemUgPSBGRk1BWCgwLCBGRk1JTih0YXJnZXRfc2l6ZSwgbWF4X3kgLSB5KSk7CisgICAgaWYg KCF4MGIpCisgICAgICAgIHJldHVybiB0YXJnZXRfc2l6ZTsKKworICAgIHdoaWxlICh0YXJnZXRf c2l6ZSA+IDAgJiYgKGEgPSBnZXRfcmVjb25zdHJ1Y3RlZF9hcmVhKGxjLCB4IC0gMSwgcHksIGNf aWR4KSkpIHsKKyAgICAgICAgY29uc3QgaW50IHN6ID0gRkZNSU4odGFyZ2V0X3NpemUsIGEtPnkg KyBhLT5oIC0gcHkpOworICAgICAgICBweSArPSBzejsKKyAgICAgICAgdGFyZ2V0X3NpemUgLT0g c3o7CisgICAgfQorICAgIHJldHVybiBweSAtIHk7Cit9CisKK3N0YXRpYyBpbnQgbGVzcyhjb25z dCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworICAgIHJldHVybiAqKGNvbnN0IGludCopYSAt ICooY29uc3QgaW50KiliOworfQorCitpbnQgZmZfdnZjX3JlZl9maWx0ZXJfZmxhZ19kZXJpdmUo Y29uc3QgaW50IG1vZGUpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBtb2Rlc1tdID0geyAtMTQs IC0xMiwgLTEwLCAtNiwgSU5UUkFfUExBTkFSLCAyLCAzNCwgNjYsIDcyLCA3NiwgNzgsIDgwfTsK KyAgICByZXR1cm4gYnNlYXJjaCgmbW9kZSwgbW9kZXMsIEZGX0FSUkFZX0VMRU1TKG1vZGVzKSwg c2l6ZW9mKGludCksIGxlc3MpICE9IE5VTEw7Cit9CisKK2ludCBmZl92dmNfaW50cmFfcHJlZF9h bmdsZV9kZXJpdmUoY29uc3QgaW50IHByZWRfbW9kZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50 IGFuZ2xlc1tdID0geworICAgICAgICAgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA2LCAgIDgs ICAxMCwgIDEyLCAgMTQsICAxNiwgIDE4LCAgMjAsICAyMywgIDI2LCAyOSwKKyAgICAgICAgIDMy LCAgMzUsICAzOSwgIDQ1LCAgNTEsICA1NywgIDY0LCAgNzMsICA4NiwgMTAyLCAxMjgsIDE3MSwg MjU2LCAzNDEsIDUxMgorICAgIH07CisgICAgaW50IHNpZ24gPSAxLCBpZHgsIGludHJhX3ByZWRf YW5nbGU7CisgICAgaWYgKHByZWRfbW9kZSA+IElOVFJBX0RJQUcpIHsKKyAgICAgICAgaWR4ID0g cHJlZF9tb2RlIC0gSU5UUkFfVkVSVDsKKyAgICB9IGVsc2UgaWYgKHByZWRfbW9kZSA+IDApIHsK KyAgICAgICAgaWR4ID0gSU5UUkFfSE9SWiAtIHByZWRfbW9kZTsKKyAgICB9IGVsc2UgeworICAg ICAgICBpZHggPSBJTlRSQV9IT1JaIC0gMiAtIHByZWRfbW9kZTsKKyAgICB9CisgICAgaWYgKGlk eCA8IDApIHsKKyAgICAgICAgaWR4ID0gLWlkeDsKKyAgICAgICAgc2lnbiA9IC0xOworICAgIH0K KyAgICBpbnRyYV9wcmVkX2FuZ2xlID0gc2lnbiAqIGFuZ2xlc1tpZHhdOworICAgIHJldHVybiBp bnRyYV9wcmVkX2FuZ2xlOworfQorCisjZGVmaW5lIFJPVU5EKGYpIChpbnQpKGYgPCAwID8gLSgt ZiArIDAuNSkgOiAoZiArIDAuNSkpCitpbnQgZmZfdnZjX2ludHJhX2ludl9hbmdsZV9kZXJpdmUo Y29uc3QgaW50IGludHJhX3ByZWRfYW5nbGUpCit7CisgICAgZmxvYXQgaW52X2FuZ2xlOworICAg IGF2X2Fzc2VydDAoaW50cmFfcHJlZF9hbmdsZSk7CisgICAgaW52X2FuZ2xlID0gMzIgKiA1MTIu MCAvIGludHJhX3ByZWRfYW5nbGU7CisgICAgcmV0dXJuIFJPVU5EKGludl9hbmdsZSk7Cit9CisK Ky8vOC40LjUuMi43IFdpZGUgYW5nbGUgaW50cmEgcHJlZGljdGlvbiBtb2RlIG1hcHBpbmcgcHJv Y2VzCitpbnQgZmZfdnZjX3dpZGVfYW5nbGVfbW9kZV9tYXBwaW5nKGNvbnN0IENvZGluZ1VuaXQg KmN1LAorICAgIGNvbnN0IGludCB0Yl93aWR0aCwgY29uc3QgaW50IHRiX2hlaWdodCwgY29uc3Qg aW50IGNfaWR4LCBpbnQgcHJlZF9tb2RlX2ludHJhKQoreworICAgIGludCBudywgbmgsIHdoX3Jh dGlvLCBtaW4sIG1heDsKKworICAgIGlmIChjdS0+aXNwX3NwbGl0X3R5cGUgPT0gSVNQX05PX1NQ TElUIHx8IGNfaWR4KSB7CisgICAgICAgIG53ID0gdGJfd2lkdGg7CisgICAgICAgIG5oID0gdGJf aGVpZ2h0OworICAgIH0gZWxzZSB7CisgICAgICAgIG53ID0gY3UtPmNiX3dpZHRoOworICAgICAg ICBuaCA9IGN1LT5jYl9oZWlnaHQ7CisgICAgfQorICAgIHdoX3JhdGlvICAgID0gRkZBQlMoZmZf bG9nMihudykgLSBmZl9sb2cyKG5oKSk7CisgICAgbWF4ICAgICAgICAgPSAod2hfcmF0aW8gPiAx KSA/ICg4ICArIDIgKiB3aF9yYXRpbykgOiA4OworICAgIG1pbiAgICAgICAgID0gKHdoX3JhdGlv ID4gMSkgPyAoNjAgLSAyICogd2hfcmF0aW8pIDogNjA7CisKKyAgICBpZiAobncgPiBuaCAmJiBw cmVkX21vZGVfaW50cmEgPj0yICYmIHByZWRfbW9kZV9pbnRyYSA8IG1heCkKKyAgICAgICAgcHJl ZF9tb2RlX2ludHJhICs9IDY1OworICAgIGVsc2UgaWYgKG5oID4gbncgJiYgcHJlZF9tb2RlX2lu dHJhIDw9IDY2ICYmIHByZWRfbW9kZV9pbnRyYSA+IG1pbikKKyAgICAgICAgcHJlZF9tb2RlX2lu dHJhIC09IDY3OworICAgIHJldHVybiBwcmVkX21vZGVfaW50cmE7Cit9CmRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL3Z2Yy92dmNfaW50cmEuaCBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYS5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjZiNjc0MDA4ZjkKLS0tIC9kZXYv bnVsbAorKysgYi9saWJhdmNvZGVjL3Z2Yy92dmNfaW50cmEuaApAQCAtMCwwICsxLDQ5IEBACisv KgorICogVlZDIGludHJhIHByZWRpY3Rpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgTnVv IE1pCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaWZuZGVmIEFWQ09E RUNfVlZDX1ZWQ19JTlRSQV9ICisjZGVmaW5lIEFWQ09ERUNfVlZDX1ZWQ19JTlRSQV9ICisKKyNp bmNsdWRlICJ2dmNfY3R1LmgiCisKKy8qKgorICogcmVjb25zdHJ1Y3QgYSBDVFUKKyAqIEBwYXJh bSBsYyBsb2NhbCBjb250ZXh0IGZvciBDVFUKKyAqIEBwYXJhbSBycyByYXN0ZXIgb3JkZXIgZm9y IHRoZSBDVFUuCisgKiBAcGFyYW0gcnggcmFzdGVyIG9yZGVyIHggZm9yIHRoZSBDVFUuCisgKiBA cGFyYW0gcnkgcmFzdGVyIG9yZGVyIHkgZm9yIHRoZSBDVFUuCisgKiBAcmV0dXJuIEFWRVJST1IK KyAqLworaW50IGZmX3Z2Y19yZWNvbnN0cnVjdChWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBp bnQgcnMsIGNvbnN0IGludCByeCwgY29uc3QgaW50IHJ5KTsKKworLy91dGlscyBmb3IgdnZjX2lu dHJhX3RlbXBsYXRlCitpbnQgZmZfdnZjX2dldF90b3BfYXZhaWxhYmxlKGNvbnN0IFZWQ0xvY2Fs Q29udGV4dCAqbGMsIGludCB4MCwgaW50IHkwLCBpbnQgdGFyZ2V0X3NpemUsIGludCBjX2lkeCk7 CitpbnQgZmZfdnZjX2dldF9sZWZ0X2F2YWlsYWJsZShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxj LCBpbnQgeDAsIGludCB5MCwgaW50IHRhcmdldF9zaXplLCBpbnQgY19pZHgpOworaW50IGZmX3Z2 Y19nZXRfbWlwX3NpemVfaWQoaW50IHcsIGludCBoKTsKK2ludCBmZl92dmNfbmVlZF9wZHBjKGlu dCB3LCBpbnQgaCwgdWludDhfdCBiZHBjbV9mbGFnLCBpbnQgbW9kZSwgaW50IHJlZl9pZHgpOwor aW50IGZmX3Z2Y19uc2NhbGVfZGVyaXZlKGludCB3LCBpbnQgaCwgaW50IG1vZGUpOworaW50IGZm X3Z2Y19yZWZfZmlsdGVyX2ZsYWdfZGVyaXZlKGludCBtb2RlKTsKK2ludCBmZl92dmNfaW50cmFf cHJlZF9hbmdsZV9kZXJpdmUoaW50IHByZWRfbW9kZSk7CitpbnQgZmZfdnZjX2ludHJhX2ludl9h bmdsZV9kZXJpdmUoaW50IHByZWRfbW9kZSk7CitpbnQgZmZfdnZjX3dpZGVfYW5nbGVfbW9kZV9t YXBwaW5nKGNvbnN0IENvZGluZ1VuaXQgKmN1LAorICAgIGludCB0Yl93aWR0aCwgaW50IHRiX2hl aWdodCwgaW50IGNfaWR4LCBpbnQgcHJlZF9tb2RlX2ludHJhKTsKKworI2VuZGlmIC8vIEFWQ09E RUNfVlZDX1ZWQ19JTlRSQV9ICmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z2Yy92dmNfaW50cmFf dGVtcGxhdGUuYyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19pbnRyYV90ZW1wbGF0ZS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjlmYjQ3NTQ5ZDUKLS0tIC9kZXYvbnVsbAor KysgYi9saWJhdmNvZGVjL3Z2Yy92dmNfaW50cmFfdGVtcGxhdGUuYwpAQCAtMCwwICsxLDEwMTUg QEAKKy8qCisgKiBWVkMgaW50cmEgcHJlZGljdGlvbiBEU1AKKyAqCisgKiBDb3B5cmlnaHQgKEMp IDIwMjEtMjAyMyBOdW9taQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAq CisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLwor CisjaW5jbHVkZSAibGliYXZjb2RlYy9iaXRfZGVwdGhfdGVtcGxhdGUuYyIKKworI2luY2x1ZGUg InZ2Y19pbnRyYS5oIgorCisjZGVmaW5lIFBPUyh4LCB5KSBzcmNbKHgpICsgc3RyaWRlICogKHkp XQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMoY2NsbV9saW5lYXJfcHJlZCko VlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsCisgICAgY29u c3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBwaXhlbCogcGRzeSwgY29uc3QgaW50ICphLCBj b25zdCBpbnQgKmIsIGNvbnN0IGludCAqaykKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNwcyA9IGZj LT5wcy5zcHM7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBWVkNfTUFYX1NBTVBMRV9BUlJBWVMg LSAxOyBpKyspIHsKKyAgICAgICAgY29uc3QgaW50IGNfaWR4ID0gaSArIDE7CisgICAgICAgIGNv bnN0IGludCB4ID0geDAgPj4gc3BzLT5oc2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBpbnQg eSA9IHkwID4+IHNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgcHRyZGlmZl90IHN0 cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICAg ICAgcGl4ZWwgKnNyYyA9IChwaXhlbCopZmMtPmZyYW1lLT5kYXRhW2NfaWR4XSArIHggKyB5ICog c3RyaWRlOworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgeworICAgICAgICAg ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4KyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBp bnQgZHN5ID0gcGRzeVt5ICogdyArIHhdOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBwcmVk ID0gKChkc3kgKiBhW2ldKSA+PiBrW2ldKSArIGJbaV07CisgICAgICAgICAgICAgICAgUE9TKHgs IHkpID0gQ0xJUChwcmVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor I2RlZmluZSBNQVhfUElDS19QT1MgNAorI2RlZmluZSBUT1AgIDAKKyNkZWZpbmUgTEVGVCAxCisK K3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX2dldF9wYXJhbXNfZGVmYXVs dCkoaW50ICphLCBpbnQgKmIsIGludCAqaykKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7 IGkrKykgeworICAgICAgICBhW2ldID0ga1tpXSA9IDA7CisgICAgICAgIGJbaV0gPSAxIDw8IChC SVRfREVQVEggLSAxKTsKKyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludCBG VU5DKGNjbG1fZ2V0X3NlbGVjdF9wb3MpKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAg Y29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0 IGludCBhdmFpbF90LCBjb25zdCBpbnQgYXZhaWxfbCwKKyAgICBpbnQgY250WzJdLCBpbnQgcG9z WzJdW01BWF9QSUNLX1BPU10pCit7CisgICAgY29uc3QgZW51bSBJbnRyYVByZWRNb2RlIG1vZGUg PSBsYy0+Y3UtPmludHJhX3ByZWRfbW9kZV9jOworICAgIGNvbnN0IGludCBudW1faXM0ID0gIWF2 YWlsX3QgfHwgIWF2YWlsX2wgfHwgbW9kZSAhPSBJTlRSQV9MVF9DQ0xNOworICAgIGludCBudW1f c2FtcFsyXTsKKworICAgIGlmIChtb2RlID09IElOVFJBX0xUX0NDTE0pIHsKKyAgICAgICAgbnVt X3NhbXBbVE9QXSAgPSBhdmFpbF90ID8gdyA6IDA7CisgICAgICAgIG51bV9zYW1wW0xFRlRdID0g YXZhaWxfbCA/IGggOiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIG51bV9zYW1wW1RPUF0gPSAo YXZhaWxfdCAmJiBtb2RlID09IElOVFJBX1RfQ0NMTSkgPyBmZl92dmNfZ2V0X3RvcF9hdmFpbGFi bGUobGMsICB4LCB5LCB3ICsgRkZNSU4odywgaCksIDEpIDogMDsKKyAgICAgICAgbnVtX3NhbXBb TEVGVF0gPSAoYXZhaWxfbCAmJiBtb2RlID09IElOVFJBX0xfQ0NMTSkgPyBmZl92dmNfZ2V0X2xl ZnRfYXZhaWxhYmxlKGxjLCB4LCB5LCBoICsgRkZNSU4odywgaCksIDEpIDogMDsKKyAgICB9Cisg ICAgaWYgKCFudW1fc2FtcFtUT1BdICYmICFudW1fc2FtcFtMRUZUXSkgeworICAgICAgICByZXR1 cm4gMDsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IFRPUDsgaSA8PSBMRUZUOyBpKyspIHsKKyAg ICAgICAgY29uc3QgaW50IHN0YXJ0ID0gbnVtX3NhbXBbaV0gPj4gKDIgKyBudW1faXM0KTsKKyAg ICAgICAgY29uc3QgaW50IHN0ZXAgID0gRkZNQVgoMSwgbnVtX3NhbXBbaV0gPj4gKDEgKyBudW1f aXM0KSkgOworICAgICAgICBjbnRbaV0gPSBGRk1JTihudW1fc2FtcFtpXSwgKDEgKyBudW1faXM0 KSA8PCAxKTsKKyAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjbnRbaV07IGMrKykKKyAgICAg ICAgICAgIHBvc1tpXVtjXSA9IHN0YXJ0ICsgYyAqIHN0ZXA7CisgICAgfQorICAgIHJldHVybiAx OworfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMoY2NsbV9zZWxlY3RfbHVt YV80NDQpKGNvbnN0IHBpeGVsICpzcmMsIGNvbnN0IGludCBzdGVwLAorICAgIGNvbnN0IGludCBj bnQsIGNvbnN0IGludCBwb3NbTUFYX1BJQ0tfUE9TXSwgIHBpeGVsICpzZWxfbHVtYSkKK3sKKyAg ICBmb3IgKGludCBpID0gMDsgaSA8IGNudDsgaSsrKQorICAgICAgICBzZWxfbHVtYVtpXSA9IHNy Y1twb3NbaV0gKiBzdGVwXTsKK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5D KGNjbG1fc2VsZWN0X2x1bWEpKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsCisgICAgY29uc3Qg aW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCBhdmFpbF90LCBjb25zdCBpbnQgYXZhaWxf bCwgY29uc3QgaW50IGNudFsyXSwgY29uc3QgaW50IHBvc1syXVtNQVhfUElDS19QT1NdLAorICAg IHBpeGVsICpzZWxfbHVtYSkKK3sKKyAgICBjb25zdCBWVkNTUFMgKnNwcyA9IGZjLT5wcy5zcHM7 CisKKyAgICBjb25zdCBpbnQgYl9jdHVfYm91bmRhcnkgPSAhYXZfbW9kX3VpbnRwMih5MCwgc3Bz LT5jdGJfbG9nMl9zaXplX3kpOworICAgIGNvbnN0IGludCBocyA9IHNwcy0+aHNoaWZ0WzFdOwor ICAgIGNvbnN0IGludCB2cyA9IHNwcy0+dnNoaWZ0WzFdOworICAgIGNvbnN0IHB0cmRpZmZfdCBz dHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplWzBdIC8gc2l6ZW9mKHBpeGVsKTsKKworICAgIGlm ICghaHMgJiYgIXZzKSB7CisgICAgICAgIGNvbnN0IHBpeGVsKiBzcmMgPSAocGl4ZWwqKWZjLT5m cmFtZS0+ZGF0YVswXSArIHgwICsgeTAgKiBzdHJpZGU7CisgICAgICAgIEZVTkMoY2NsbV9zZWxl Y3RfbHVtYV80NDQpKHNyYyAtIGF2YWlsX3QgKiBzdHJpZGUsIDEsIGNudFtUT1BdLCBwb3NbVE9Q XSwgc2VsX2x1bWEpOworICAgICAgICBGVU5DKGNjbG1fc2VsZWN0X2x1bWFfNDQ0KShzcmMgLSBh dmFpbF9sLCBzdHJpZGUsIGNudFtMRUZUXSwgcG9zW0xFRlRdLCBzZWxfbHVtYSArIGNudFtUT1Bd KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyB0b3AKKyAgICAgICAgaWYgKHZzICYmICFiX2N0 dV9ib3VuZGFyeSkgeworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnNvdXJjZSA9IChwaXhlbCAq KWZjLT5mcmFtZS0+ZGF0YVswXSArIHgwICsgKHkwIC0gMikgKiBzdHJpZGU7CisgICAgICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IGNudFtUT1BdOyBpKyspIHsKKyAgICAgICAgICAgICAgICBj b25zdCBpbnQgeCA9IHBvc1tUT1BdW2ldIDw8IGhzOworICAgICAgICAgICAgICAgIGNvbnN0IHBp eGVsICpzcmMgPSBzb3VyY2UgKyB4OworICAgICAgICAgICAgICAgIGNvbnN0IGludCBoYXNfbGVm dCA9IHggfHwgYXZhaWxfbDsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCBsID0gaGFzX2xl ZnQgPyBQT1MoLTEsIDApIDogUE9TKDAsIDApOworICAgICAgICAgICAgICAgIGlmIChzcHMtPnIt PnNwc19jaHJvbWFfdmVydGljYWxfY29sbG9jYXRlZF9mbGFnKSB7CisgICAgICAgICAgICAgICAg ICAgIHNlbF9sdW1hW2ldID0gKFBPUygwLCAtMSkgKyBsICsgNCAqIFBPUygwLCAwKSArIFBPUygx LCAwKSArIFBPUygwLCAxKSArIDQpID4+IDM7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgbDEgPSBoYXNfbGVmdCA/IFBPUygtMSwgMSkg OiBQT1MoMCwgMSk7CisgICAgICAgICAgICAgICAgICAgIHNlbF9sdW1hW2ldID0gKGwgKyBsMSAr IDIgKiAoUE9TKDAsIDApICsgUE9TKDAsIDEpKSArIFBPUygxLCAwKSArIFBPUygxLCAxKSArIDQp ID4+IDM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnNvdXJjZSA9IChwaXhlbCopZmMtPmZyYW1lLT5k YXRhWzBdICsgeDAgKyAoeTAgLSAxKSAqIHN0cmlkZTsKKyAgICAgICAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgY250W1RPUF07IGkrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCB4ID0g cG9zW1RPUF1baV0gPDwgaHM7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnNyYyA9IHNv dXJjZSArIHg7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGhhc19sZWZ0ID0geCB8fCBhdmFp bF9sOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsIGwgPSBoYXNfbGVmdCA/IFBPUygtMSwg MCkgOiBQT1MoMCwgMCk7CisgICAgICAgICAgICAgICAgc2VsX2x1bWFbaV0gPSAobCArIDIgKiBQ T1MoMCwgMCkgKyBQT1MoMSwgMCkgKyAyKSA+PiAyOworICAgICAgICAgICAgfQorICAgICAgICB9 CisKKyAgICAgICAgLy8gbGVmdAorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAq bGVmdDsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzb3VyY2UgPSAocGl4ZWwgKilmYy0+ZnJh bWUtPmRhdGFbMF0gKyB4MCArIHkwICogc3RyaWRlIC0gKDEgKyBocykgKiBhdmFpbF9sOworICAg ICAgICAgICAgbGVmdCA9IHNvdXJjZSAtIGF2YWlsX2w7CisKKyAgICAgICAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgY250W0xFRlRdOyBpKyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQg eSA9IHBvc1tMRUZUXVtpXSA8PCB2czsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgb2Zmc2V0 ID0geSAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqbCAgID0gbGVmdCAr IG9mZnNldDsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqc3JjID0gc291cmNlICsgb2Zm c2V0OworICAgICAgICAgICAgICAgIHBpeGVsIHByZWQ7CisgICAgICAgICAgICAgICAgaWYgKCF2 cykgeworICAgICAgICAgICAgICAgICAgICBwcmVkID0gKCpsICsgMiAqIFBPUygwLCAwKSArIFBP UygxLCAwKSArIDIpID4+IDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKHNwcy0+ci0+c3BzX2Nocm9tYV92ZXJ0aWNhbF9jb2xsb2NhdGVkX2ZsYWcp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBoYXNfdG9wID0geSB8fCBhdmFp bF90OworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgdCA9IGhhc190b3AgPyBQ T1MoMCwgLTEpIDogUE9TKDAsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgcHJlZCA9ICgq bCArIHQgKyA0ICogUE9TKDAsIDApICsgUE9TKDEsIDApICsgUE9TKDAsIDEpICsgNCkgPj4gMzsK KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBy ZWQgPSAoKmwgKyAqKGwgKyBzdHJpZGUpICsgMiAqIFBPUygwLCAwKSArIDIgKiBQT1MoMCwgMSkg KyBQT1MoMSwgMCkgKyBQT1MoMSwgMSkgKyA0KSA+PiAzOworICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNlbF9sdW1hW2kgKyBjbnRbVE9Q XV0gPSBwcmVkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMg YXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMoY2NsbV9zZWxlY3RfY2hyb21hKShjb25zdCBWVkNG cmFtZUNvbnRleHQgKmZjLAorICAgIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwgY29uc3QgaW50 IGNudFsyXSwgY29uc3QgaW50IHBvc1syXVtNQVhfUElDS19QT1NdLAorICAgIHBpeGVsIHNlbFtd W01BWF9QSUNLX1BPUyAqIDJdKQoreworICAgIGZvciAoaW50IGNfaWR4ID0gMTsgY19pZHggPCBW VkNfTUFYX1NBTVBMRV9BUlJBWVM7IGNfaWR4KyspIHsKKyAgICAgICAgY29uc3QgcHRyZGlmZl90 IHN0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdIC8gc2l6ZW9mKHBpeGVsKTsKKwor ICAgICAgICAvL3RvcAorICAgICAgICBjb25zdCBwaXhlbCAqc3JjID0gKHBpeGVsKilmYy0+ZnJh bWUtPmRhdGFbY19pZHhdICsgeCArICh5IC0gMSkqIHN0cmlkZTsKKyAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBjbnRbVE9QXTsgaSsrKSB7CisgICAgICAgICAgICBzZWxbY19pZHhdW2ldID0g c3JjW3Bvc1tUT1BdW2ldXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vbGVmdAorICAgICAgICBz cmMgPSAocGl4ZWwqKWZjLT5mcmFtZS0+ZGF0YVtjX2lkeF0gKyB4IC0gMSArIHkgKiBzdHJpZGU7 CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY250W0xFRlRdOyBpKyspIHsKKyAgICAgICAg ICAgIHNlbFtjX2lkeF1baSArIGNudFtUT1BdXSA9IHNyY1twb3NbTEVGVF1baV0gKiBzdHJpZGVd OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBpbnQgRlVO QyhjY2xtX3NlbGVjdF9zYW1wbGVzKShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLAorICAgIGNv bnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0 IGludCBhdmFpbF90LCBjb25zdCBpbnQgYXZhaWxfbCwKKyAgICBwaXhlbCBzZWxbXVtNQVhfUElD S19QT1MgKiAyXSkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjID0gbGMtPmZjOwor ICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IGludCB4ICA9 IHgwID4+IHNwcy0+aHNoaWZ0WzFdOworICAgIGNvbnN0IGludCB5ICA9IHkwID4+IHNwcy0+dnNo aWZ0WzFdOworICAgIGludCBjbnRbMl0sIHBvc1syXVtNQVhfUElDS19QT1NdOworCisgICAgaWYg KCFGVU5DKGNjbG1fZ2V0X3NlbGVjdF9wb3MpKGxjLCB4LCB5LCB3LCBoLCBhdmFpbF90LCBhdmFp bF9sLCBjbnQsIHBvcykpCisgICAgICAgIHJldHVybiAwOworCisgICAgRlVOQyhjY2xtX3NlbGVj dF9sdW1hKShmYywgeDAsIHkwLCBhdmFpbF90LCBhdmFpbF9sLCBjbnQsIHBvcywgc2VsW0xVTUFd KTsKKyAgICBGVU5DKGNjbG1fc2VsZWN0X2Nocm9tYSkoZmMsIHgsIHksIGNudCwgcG9zLCBzZWwp OworCisgICAgaWYgKGNudFtUT1BdICsgY250W0xFRlRdID09IDIpIHsKKyAgICAgICAgZm9yIChp bnQgY19pZHggPSAwOyBjX2lkeCA8IFZWQ19NQVhfU0FNUExFX0FSUkFZUzsgY19pZHgrKykgewor ICAgICAgICAgICAgc2VsW2NfaWR4XVszXSA9IHNlbFtjX2lkeF1bMF07CisgICAgICAgICAgICBz ZWxbY19pZHhdWzJdID0gc2VsW2NfaWR4XVsxXTsKKyAgICAgICAgICAgIHNlbFtjX2lkeF1bMF0g PSBzZWxbY19pZHhdWzFdOworICAgICAgICAgICAgc2VsW2NfaWR4XVsxXSA9IHNlbFtjX2lkeF1b M107CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBhdl9hbHdh eXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX2dldF9taW5fbWF4KSgKKyAgICBjb25zdCBwaXhlbCBz ZWxbXVtNQVhfUElDS19QT1MgKiAyXSwgaW50ICptaW4sIGludCAqbWF4KQoreworICAgIGludCBt aW5fZ3JwX2lkeFtdID0geyAwLCAyIH07CisgICAgaW50IG1heF9ncnBfaWR4W10gPSB7IDEsIDMg fTsKKworICAgIGlmIChzZWxbTFVNQV1bbWluX2dycF9pZHhbMF1dID4gc2VsW0xVTUFdW21pbl9n cnBfaWR4WzFdXSkKKyAgICAgICAgRkZTV0FQKGludCwgbWluX2dycF9pZHhbMF0sIG1pbl9ncnBf aWR4WzFdKTsKKyAgICBpZiAoc2VsW0xVTUFdW21heF9ncnBfaWR4WzBdXSA+IHNlbFtMVU1BXVtt YXhfZ3JwX2lkeFsxXV0pCisgICAgICAgIEZGU1dBUChpbnQsIG1heF9ncnBfaWR4WzBdLCBtYXhf Z3JwX2lkeFsxXSk7CisgICAgaWYgKHNlbFtMVU1BXVttaW5fZ3JwX2lkeFswXV0gPiBzZWxbTFVN QV1bbWF4X2dycF9pZHhbMV1dKSB7CisgICAgICAgIEZGU1dBUChpbnQsIG1pbl9ncnBfaWR4WzBd LCBtYXhfZ3JwX2lkeFswXSk7CisgICAgICAgIEZGU1dBUChpbnQsIG1pbl9ncnBfaWR4WzFdLCBt YXhfZ3JwX2lkeFsxXSk7CisgICAgfQorICAgIGlmIChzZWxbTFVNQV1bbWluX2dycF9pZHhbMV1d ID4gc2VsW0xVTUFdW21heF9ncnBfaWR4WzBdXSkKKyAgICAgICAgRkZTV0FQKGludCwgbWluX2dy cF9pZHhbMV0sIG1heF9ncnBfaWR4WzBdKTsKKyAgICBmb3IgKGludCBjX2lkeCA9IDA7IGNfaWR4 IDwgVlZDX01BWF9TQU1QTEVfQVJSQVlTOyBjX2lkeCsrKSB7CisgICAgICAgIG1heFtjX2lkeF0g PSAoc2VsW2NfaWR4XVttYXhfZ3JwX2lkeFswXV0gKyBzZWxbY19pZHhdW21heF9ncnBfaWR4WzFd XSArIDEpID4+IDE7CisgICAgICAgIG1pbltjX2lkeF0gPSAoc2VsW2NfaWR4XVttaW5fZ3JwX2lk eFswXV0gKyBzZWxbY19pZHhdW21pbl9ncnBfaWR4WzFdXSArIDEpID4+IDE7CisgICAgfQorfQor CitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMoY2NsbV9nZXRfcGFyYW1zKShjb25z dCBWVkNMb2NhbENvbnRleHQgKmxjLAorICAgIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBj b25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IGludCBhdmFpbF90LCBjb25zdCBpbnQgYXZh aWxfbCwKKyAgICBpbnQgKmEsIGludCAqYiwgaW50ICprKQoreworICAgIHBpeGVsIHNlbFtWVkNf TUFYX1NBTVBMRV9BUlJBWVNdW01BWF9QSUNLX1BPUyAqIDJdOworICAgIGludCBtYXhbVlZDX01B WF9TQU1QTEVfQVJSQVlTXSwgbWluW1ZWQ19NQVhfU0FNUExFX0FSUkFZU107CisgICAgaW50IGRp ZmY7CisKKyAgICBpZiAoIUZVTkMoY2NsbV9zZWxlY3Rfc2FtcGxlcykobGMsIHgwLCB5MCwgdywg aCwgYXZhaWxfdCwgYXZhaWxfbCwgc2VsKSkgeworICAgICAgICBGVU5DKGNjbG1fZ2V0X3BhcmFt c19kZWZhdWx0KShhLCBiLCBrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZVTkMo Y2NsbV9nZXRfbWluX21heCkoc2VsLCBtaW4sIG1heCk7CisKKyAgICBkaWZmID0gbWF4W0xVTUFd IC0gbWluW0xVTUFdOworICAgIGlmIChkaWZmID09IDApIHsKKyAgICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgICAgICAgIGFbaV0gPSBrW2ldID0gMDsKKyAgICAgICAg ICAgIGJbaV0gPSBtaW5baSArIDFdOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9 CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgICAgY29uc3Qgc3RhdGlj IGludCBkaXZfc2lnX3RhYmxlW10gPSB7MCwgNywgNiwgNSwgNSwgNCwgNCwgMywgMywgMiwgMiwg MSwgMSwgMSwgMSwgMH07CisgICAgICAgIGNvbnN0IGludCBkaWZmYyA9IG1heFtpICsgMV0gLSBt aW5baSArIDFdOworICAgICAgICBpbnQgIHggPSBhdl9sb2cyKGRpZmYpOworICAgICAgICBpbnQg IHksIHYsIHNpZ24sIGFkZDsKKyAgICAgICAgY29uc3QgaW50IG5vcm1fZGlmZiA9ICgoZGlmZiA8 PCA0KSA+PiB4KSAmIDE1OworICAgICAgICB4ICs9IChub3JtX2RpZmYpID8gMSA6IDA7CisgICAg ICAgIHkgPSBhYnMoZGlmZmMpID4gMCA/IGF2X2xvZzIoYWJzKGRpZmZjKSkgKyAxIDogMDsKKyAg ICAgICAgdiA9IGRpdl9zaWdfdGFibGVbbm9ybV9kaWZmXSB8IDg7CisgICAgICAgIGFkZCA9ICgx IDw8IHkgPj4gMSk7CisgICAgICAgIGFbaV0gPSAoZGlmZmMgKiB2ICsgYWRkKSA+PiB5OworICAg ICAgICBrW2ldID0gRkZNQVgoMSwgMyArIHggLXkpOworICAgICAgICBzaWduID0gYVtpXSA8IDAg PyAtMSA6IChhW2ldID4gMCk7CisgICAgICAgIGFbaV0gPSAoKDMgKyB4IC0geSkgPCAxKSA/ICBz aWduICogMTUgOiBhW2ldOworICAgICAgICBiW2ldID0gbWluW2kgKyAxXSAtICgoYVtpXSAqIG1p blswXSkgPj4ga1tpXSk7CisgICAgfQorCit9CisKKyN1bmRlZiBUT1AKKyN1bmRlZiBMRUZUCisK K3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhjY2xtX2dldF9sdW1hX3JlY19waXhl bHMpKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsCisgICAgY29uc3QgaW50IHgwLCBjb25zdCBp bnQgeTAsIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29uc3QgaW50IGF2YWlsX3QsIGNvbnN0 IGludCBhdmFpbF9sLAorICAgIHBpeGVsICpwZHN5KQoreworICAgIGNvbnN0IGludCBocyAgICAg ICAgICAgID0gZmMtPnBzLnNwcy0+aHNoaWZ0WzFdOworICAgIGNvbnN0IGludCB2cyAgICAgICAg ICAgID0gZmMtPnBzLnNwcy0+dnNoaWZ0WzFdOworICAgIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUg ID0gZmMtPmZyYW1lLT5saW5lc2l6ZVswXSAvIHNpemVvZihwaXhlbCk7CisgICAgY29uc3QgcGl4 ZWwgKnNvdXJjZSAgICAgPSAocGl4ZWwqKWZjLT5mcmFtZS0+ZGF0YVswXSArIHgwICsgeTAgKiBz dHJpZGU7CisgICAgY29uc3QgcGl4ZWwgKmxlZnQgICAgICAgPSBzb3VyY2UgLSBhdmFpbF9sOwor ICAgIGNvbnN0IHBpeGVsICp0b3AgICAgICAgID0gc291cmNlIC0gYXZhaWxfdCAqIHN0cmlkZTsK KworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0gZmMtPnBzLnNwczsKKyAgICBpZiAoIWhzICYmICF2 cykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGg7IGkrKykKKyAgICAgICAgICAgIG1l bWNweShwZHN5ICsgaSAqIHcsIHNvdXJjZSArIGkgKiBzdHJpZGUsIHcgKiBzaXplb2YocGl4ZWwp KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGg7IGkr KykgeworICAgICAgICBjb25zdCBwaXhlbCAqc3JjICA9IHNvdXJjZTsKKyAgICAgICAgY29uc3Qg cGl4ZWwgKmwgPSBsZWZ0OworICAgICAgICBjb25zdCBwaXhlbCAqdCA9IHRvcDsKKyAgICAgICAg aWYgKCF2cykgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3OyBqKyspIHsKKyAg ICAgICAgICAgICAgICBwaXhlbCBwcmVkICA9ICgqbCArIDIgKiBQT1MoMCwgMCkgKyBQT1MoMSwg MCkgKyAyKSA+PiAyOworICAgICAgICAgICAgICAgIHBkc3lbaSAqIHcgKyBqXSA9IHByZWQ7Cisg ICAgICAgICAgICAgICAgc3JjICs9IDI7CisgICAgICAgICAgICAgICAgbCA9IHNyYyAtIDE7Cisg ICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzcHMtPnIt PnNwc19jaHJvbWFfdmVydGljYWxfY29sbG9jYXRlZF9mbGFnKSAgeworICAgICAgICAgICAgICAg IGZvciAoaW50IGogPSAwOyBqIDwgdzsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIHBpeGVs IHByZWQgID0gKCpsICsgKnQgKyA0ICogUE9TKDAsIDApICsgUE9TKDEsIDApICsgUE9TKDAsIDEp ICsgNCkgPj4gMzsKKyAgICAgICAgICAgICAgICAgICAgcGRzeVtpICogdyArIGpdID0gcHJlZDsK KyAgICAgICAgICAgICAgICAgICAgc3JjICs9IDI7CisgICAgICAgICAgICAgICAgICAgIHQgKz0g MjsKKyAgICAgICAgICAgICAgICAgICAgbCA9IHNyYyAtIDE7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8 IHc7IGorKykgeworICAgICAgICAgICAgICAgICAgICBwaXhlbCBwcmVkICA9ICgqbCArICoobCAr IHN0cmlkZSkgKyAyICogUE9TKDAsIDApICsgMiAqIFBPUygwLCAxKSArIFBPUygxLCAwKSArIFBP UygxLCAxKSArIDQpID4+IDM7CisKKyAgICAgICAgICAgICAgICAgICAgcGRzeVtpICogdyArIGpd ID0gcHJlZDsKKyAgICAgICAgICAgICAgICAgICAgc3JjICs9IDI7CisgICAgICAgICAgICAgICAg ICAgIGwgPSBzcmMgLSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgICBzb3VyY2UgKz0gKHN0cmlkZSA8PCB2cyk7CisgICAgICAgIGxlZnQgICAr PSAoc3RyaWRlIDw8IHZzKTsKKyAgICAgICAgdG9wICAgID0gc291cmNlIC0gc3RyaWRlOworICAg IH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKGNjbG1fcHJlZF9kZWZh dWx0KShWVkNGcmFtZUNvbnRleHQgKmZjLAorICAgIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwg Y29uc3QgaW50IHcsIGNvbnN0IGludCBoLCBjb25zdCBpbnQgYXZhaWxfdCwgY29uc3QgaW50IGF2 YWlsX2wpCit7CisgICAgZm9yIChpbnQgY19pZHggPSAxOyBjX2lkeCA8IFZWQ19NQVhfU0FNUExF X0FSUkFZUzsgY19pZHgrKykgeworICAgICAgICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlID0gZmMt PmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0gLyBzaXplb2YocGl4ZWwpOworICAgICAgICBwaXhlbCAq ZHN0ID0gKHBpeGVsKilmYy0+ZnJhbWUtPmRhdGFbY19pZHhdICsgeCArIHkgKiBzdHJpZGU7Cisg ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaDsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGlu dCBqID0gMDsgaiA8IHc7IGorKykgeworICAgICAgICAgICAgICAgIGRzdFtqXSA9IDEgPDwgKEJJ VF9ERVBUSCAtIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZHN0ICs9IHN0cmlkZTsK KyAgICAgICAgfQorICAgIH0KK30KKworLy84LjQuNS4yLjE0IFNwZWNpZmljYXRpb24gb2YgSU5U UkFfTFRfQ0NMTSwgSU5UUkFfTF9DQ0xNIGFuZCBJTlRSQV9UX0NDTE0gaW50cmEgcHJlZGljdGlv biBtb2RlCitzdGF0aWMgdm9pZCBGVU5DKGludHJhX2NjbG1fcHJlZCkoY29uc3QgVlZDTG9jYWxD b250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAsCisgICAgY29uc3QgaW50IHdp ZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgICAgID0g bGMtPmZjOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBp bnQgYXZhaWxfdCA9IGZmX3Z2Y19nZXRfdG9wX2F2YWlsYWJsZShsYywgeDAsIHkwLCAxLCAwKTsK KyAgICBjb25zdCBpbnQgYXZhaWxfbCA9IGZmX3Z2Y19nZXRfbGVmdF9hdmFpbGFibGUobGMsIHgw LCB5MCwgMSwgMCk7CisgICAgY29uc3QgaW50IGhzID0gc3BzLT5oc2hpZnRbMV07CisgICAgY29u c3QgaW50IHZzID0gc3BzLT52c2hpZnRbMV07CisgICAgY29uc3QgaW50IHggID0geDAgPj4gaHM7 CisgICAgY29uc3QgaW50IHkgID0geTAgPj4gdnM7CisgICAgY29uc3QgaW50IHcgID0gd2lkdGgg Pj4gaHM7CisgICAgY29uc3QgaW50IGggID0gaGVpZ2h0ID4+IHZzOworICAgIGludCBhWzJdLCBi WzJdLCBrWzJdOworCisgICAgcGl4ZWwgZHN5W01BWF9UQl9TSVpFICogTUFYX1RCX1NJWkVdOwor ICAgIGlmICghYXZhaWxfdCAmJiAhYXZhaWxfbCkgeworICAgICAgICBGVU5DKGNjbG1fcHJlZF9k ZWZhdWx0KShmYywgeCwgeSwgdywgaCwgYXZhaWxfdCwgYXZhaWxfbCk7CisgICAgICAgIHJldHVy bjsKKyAgICB9CisgICAgRlVOQyhjY2xtX2dldF9sdW1hX3JlY19waXhlbHMpKGZjLCB4MCwgeTAs IHcsIGgsIGF2YWlsX3QsIGF2YWlsX2wsIGRzeSk7CisgICAgRlVOQyhjY2xtX2dldF9wYXJhbXMp IChsYywgeDAsIHkwLCB3LCBoLCBhdmFpbF90LCBhdmFpbF9sLCBhLCBiLCBrKTsKKyAgICBGVU5D KGNjbG1fbGluZWFyX3ByZWQpKGZjLCB4MCwgeTAsIHcsIGgsIGRzeSwgYSwgYiwgayk7Cit9CisK K3N0YXRpYyBpbnQgRlVOQyhsbWNzX3N1bV9zYW1wbGVzKShjb25zdCBwaXhlbCAqc3RhcnQsIHB0 cmRpZmZfdCBzdHJpZGUsIGNvbnN0IGludCBhdmFpbCwgY29uc3QgaW50IHRhcmdldF9zaXplKQor eworICAgIGNvbnN0IGludCBzaXplID0gRkZNSU4oYXZhaWwsIHRhcmdldF9zaXplKTsKKyAgICBp bnQgc3VtID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAg ICBzdW0gKz0gKnN0YXJ0OworICAgICAgICBzdGFydCArPSBzdHJpZGU7CisgICAgfQorICAgIHN1 bSArPSAqKHN0YXJ0IC0gc3RyaWRlKSAqICh0YXJnZXRfc2l6ZSAtIHNpemUpOworICAgIHJldHVy biBzdW07Cit9CisKKy8vIDguNy41LjMgUGljdHVyZSByZWNvbnN0cnVjdGlvbiB3aXRoIGx1bWEg ZGVwZW5kZW50IGNocm9tYSByZXNpZHVhbCBzY2FsaW5nIHByb2Nlc3MgZm9yIGNocm9tYSBzYW1w bGVzCitzdGF0aWMgaW50IEZVTkMobG1jc19kZXJpdmVfY2hyb21hX3NjYWxlKShWVkNMb2NhbENv bnRleHQgKmxjLCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCkKK3sKKyAgICBWVkNGcmFtZUNv bnRleHQgKmZjID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ0xNQ1MgKmxtY3MgPSAmZmMtPnBzLmxt Y3M7CisgICAgY29uc3QgaW50IHNpemVfeSAgICA9IEZGTUlOKGZjLT5wcy5zcHMtPmN0Yl9zaXpl X3ksIDY0KTsKKworICAgIGNvbnN0IGludCB4ID0geDAgJiB+KHNpemVfeSAtIDEpOworICAgIGNv bnN0IGludCB5ID0geTAgJiB+KHNpemVfeSAtIDEpOworICAgIGlmIChsYy0+bG1jcy54X3ZwZHUg IT0geCB8fCBsYy0+bG1jcy55X3ZwZHUgIT0geSkgeworICAgICAgICBpbnQgY250ID0gMCwgbHVt YSA9IDAsIGk7CisgICAgICAgIGNvbnN0IHBpeGVsICpzcmMgPSAoY29uc3QgcGl4ZWwgKikoZmMt PmZyYW1lLT5kYXRhW0xVTUFdICsgeSAqIGZjLT5mcmFtZS0+bGluZXNpemVbTFVNQV0gKyAoeCA8 PCBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdCkpOworICAgICAgICBjb25zdCBwdHJkaWZmX3Qgc3Ry aWRlID0gZmMtPmZyYW1lLT5saW5lc2l6ZVtMVU1BXSAvIHNpemVvZihwaXhlbCk7CisgICAgICAg IGNvbnN0IGludCBhdmFpbF90ID0gZmZfdnZjX2dldF90b3BfYXZhaWxhYmxlIChsYywgeCwgeSwg MSwgMCk7CisgICAgICAgIGNvbnN0IGludCBhdmFpbF9sID0gZmZfdnZjX2dldF9sZWZ0X2F2YWls YWJsZShsYywgeCwgeSwgMSwgMCk7CisgICAgICAgIGlmIChhdmFpbF9sKSB7CisgICAgICAgICAg ICBsdW1hICs9IEZVTkMobG1jc19zdW1fc2FtcGxlcykoc3JjIC0gMSwgc3RyaWRlLCBmYy0+cHMu cHBzLT5oZWlnaHQgLSB5LCBzaXplX3kpOworICAgICAgICAgICAgY250ID0gc2l6ZV95OworICAg ICAgICB9CisgICAgICAgIGlmIChhdmFpbF90KSB7CisgICAgICAgICAgICBsdW1hICs9IEZVTkMo bG1jc19zdW1fc2FtcGxlcykoc3JjIC0gc3RyaWRlLCAxLCBmYy0+cHMucHBzLT53aWR0aCAtIHgs IHNpemVfeSk7CisgICAgICAgICAgICBjbnQgKz0gc2l6ZV95OworICAgICAgICB9CisgICAgICAg IGlmIChjbnQpCisgICAgICAgICAgICBsdW1hID0gKGx1bWEgKyAoY250ID4+IDEpKSA+PiBhdl9s b2cyKGNudCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGx1bWEgPSAxIDw8IChCSVRfREVQ VEggLSAxKTsKKworICAgICAgICBmb3IgKGkgPSBsbWNzLT5taW5fYmluX2lkeDsgaSA8PSBsbWNz LT5tYXhfYmluX2lkeDsgaSsrKSB7CisgICAgICAgICAgICBpZiAobHVtYSA8IGxtY3MtPnBpdm90 W2kgKyAxXSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpID0g RkZNSU4oaSwgTE1DU19NQVhfQklOX1NJWkUgLSAxKTsKKworICAgICAgICBsYy0+bG1jcy5jaHJv bWFfc2NhbGUgPSBsbWNzLT5jaHJvbWFfc2NhbGVfY29lZmZbaV07CisgICAgICAgIGxjLT5sbWNz LnhfdnBkdSA9IHg7CisgICAgICAgIGxjLT5sbWNzLnlfdnBkdSA9IHk7CisgICAgfQorICAgIHJl dHVybiBsYy0+bG1jcy5jaHJvbWFfc2NhbGU7Cit9CisKKy8vIDguNy41LjMgUGljdHVyZSByZWNv bnN0cnVjdGlvbiB3aXRoIGx1bWEgZGVwZW5kZW50IGNocm9tYSByZXNpZHVhbCBzY2FsaW5nIHBy b2Nlc3MgZm9yIGNocm9tYSBzYW1wbGVzCitzdGF0aWMgdm9pZCBGVU5DKGxtY3Nfc2NhbGVfY2hy b21hKShWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQgKmRzdCwgY29uc3QgaW50ICpjb2VmZiwKKyAg ICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludCB4MF9jdSwgY29u c3QgaW50IHkwX2N1KQoreworICAgIGNvbnN0IGludCBjaHJvbWFfc2NhbGUgPSBGVU5DKGxtY3Nf ZGVyaXZlX2Nocm9tYV9zY2FsZSkobGMsIHgwX2N1LCB5MF9jdSk7CisKKyAgICBmb3IgKGludCB5 ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk dGg7IHgrKykgeworICAgICAgICAgICAgY29uc3QgaW50IGMgPSBhdl9jbGlwX2ludHAyKCpjb2Vm ZiwgQklUX0RFUFRIKTsKKworICAgICAgICAgICAgaWYgKGMgPiAwKQorICAgICAgICAgICAgICAg ICpkc3QgPSAoYyAqIGNocm9tYV9zY2FsZSArICgxIDw8IDEwKSkgPj4gMTE7CisgICAgICAgICAg ICBlbHNlCisgICAgICAgICAgICAgICAgKmRzdCA9IC0oKC1jICogY2hyb21hX3NjYWxlICsgKDEg PDwgMTApKSA+PiAxMSk7CisgICAgICAgICAgICBjb2VmZisrOworICAgICAgICAgICAgZHN0Kys7 CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgRlVO QyhyZWZfZmlsdGVyKShjb25zdCBwaXhlbCAqbGVmdCwgY29uc3QgcGl4ZWwgKnRvcCwKKyAgICBw aXhlbCAqZmlsdGVyZWRfbGVmdCwgcGl4ZWwgKmZpbHRlcmVkX3RvcCwgY29uc3QgaW50IGxlZnRf c2l6ZSwgY29uc3QgaW50IHRvcF9zaXplLAorICAgIGNvbnN0IGludCB1bmZpbHRlcl9sYXN0X29u ZSkKK3sKKyAgICBmaWx0ZXJlZF9sZWZ0Wy0xXSA9IGZpbHRlcmVkX3RvcFstMV0gPSAobGVmdFsw XSArICAyICogbGVmdFstMV0gKyB0b3BbMF0gKyAyICkgPj4gMjsKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IGxlZnRfc2l6ZSAtIHVuZmlsdGVyX2xhc3Rfb25lOyBpKyspIHsKKyAgICAgICAgZmls dGVyZWRfbGVmdFtpXSA9IChsZWZ0W2ktIDFdICsgMiAqIGxlZnRbaV0gKyBsZWZ0W2kgKyAxXSAr IDIpID4+IDI7CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG9wX3NpemUgLSB1bmZp bHRlcl9sYXN0X29uZTsgaSsrKSB7CisgICAgICAgIGZpbHRlcmVkX3RvcFtpXSA9ICh0b3BbaS0x XSArIDIgKiB0b3BbaV0gKyB0b3BbaSArIDFdICsgMikgPj4gMjsKKyAgICB9CisgICAgaWYgKHVu ZmlsdGVyX2xhc3Rfb25lKSB7CisgICAgICAgIGZpbHRlcmVkX3RvcFt0b3Bfc2l6ZSAtIDFdID0g dG9wW3RvcF9zaXplIC0gMV07CisgICAgICAgIGZpbHRlcmVkX2xlZnRbbGVmdF9zaXplIC0gMV0g PSBsZWZ0W2xlZnRfc2l6ZSAtIDFdOworICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxp bmUgdm9pZCBGVU5DKHByZXBhcmVfaW50cmFfZWRnZV9wYXJhbXMpKGNvbnN0IFZWQ0xvY2FsQ29u dGV4dCAqbGMsCisgICAgSW50cmFFZGdlUGFyYW1zKiBlZGdlLCBjb25zdCBwaXhlbCAqc3JjLCBj b25zdCBwdHJkaWZmX3Qgc3RyaWRlLAorICAgIGNvbnN0IGludCB4LCBpbnQgeSwgaW50IHcsIGlu dCBoLCBpbnQgY19pZHgsIGNvbnN0IGludCBpc19pbnRyYV9taXAsCisgICAgY29uc3QgaW50IG1v ZGUsIGNvbnN0IGludCByZWZfaWR4LCBjb25zdCBpbnQgbmVlZF9wZHBjKQoreworI2RlZmluZSBF WFRFTkQocHRyLCB2YWwsIGxlbikgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICBmb3IgKGkgPSAwOyBpIDwgKGxlbik7IGkrKykgICAgICAgXAor ICAgICAgICAqKHB0ciArIGkpID0gdmFsOyAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorICAg IGNvbnN0IENvZGluZ1VuaXQgKmN1ID0gbGMtPmN1OworICAgIGNvbnN0IGludCByZWZfZmlsdGVy X2ZsYWcgPSBpc19pbnRyYV9taXAgPyAwIDogZmZfdnZjX3JlZl9maWx0ZXJfZmxhZ19kZXJpdmUo bW9kZSk7CisgICAgY29uc3QgaW50IGZpbHRlcl9mbGFnID0gIXJlZl9pZHggJiYgdyAqIGggPiAz MiAmJiAhY19pZHggJiYKKyAgICAgICAgY3UtPmlzcF9zcGxpdF90eXBlID09IElTUF9OT19TUExJ VCAmJiByZWZfZmlsdGVyX2ZsYWc7CisgICAgaW50IGNhbmRfdXBfbGVmdCAgICAgID0gbGMtPm5h LmNhbmRfdXBfbGVmdDsKKyAgICBwaXhlbCAgKmxlZnQgICAgICAgICAgPSAocGl4ZWwqKWVkZ2Ut PmxlZnRfYXJyYXkgKyBNQVhfVEJfU0laRSArIDM7CisgICAgcGl4ZWwgICp0b3AgICAgICAgICAg ID0gKHBpeGVsKillZGdlLT50b3BfYXJyYXkgICsgTUFYX1RCX1NJWkUgKyAzOworICAgIHBpeGVs ICAqZmlsdGVyZWRfbGVmdCA9IChwaXhlbCopZWRnZS0+ZmlsdGVyZWRfbGVmdF9hcnJheSArIE1B WF9UQl9TSVpFICsgMzsKKyAgICBwaXhlbCAgKmZpbHRlcmVkX3RvcCAgPSAocGl4ZWwqKWVkZ2Ut PmZpbHRlcmVkX3RvcF9hcnJheSAgKyBNQVhfVEJfU0laRSArIDM7CisgICAgY29uc3QgaW50IHJl Zl9saW5lID0gcmVmX2lkeCA9PSAzID8gLTQgOiAoLTEgLSByZWZfaWR4KTsKKyAgICBpbnQgbGVm dF9zaXplLCB0b3Bfc2l6ZSwgdW5maWx0ZXJfbGVmdF9zaXplLCB1bmZpbHRlcl90b3Bfc2l6ZTsK KyAgICBpbnQgbGVmdF9hdmFpbGFibGUsIHRvcF9hdmFpbGFibGU7CisgICAgaW50IHJlZncsIHJl Zmg7CisgICAgaW50IGludHJhX3ByZWRfYW5nbGUsIGludl9hbmdsZTsKKyAgICBpbnQgaTsKKwor ICAgIGlmIChpc19pbnRyYV9taXAgfHwgbW9kZSA9PSBJTlRSQV9QTEFOQVIpIHsKKyAgICAgICAg bGVmdF9zaXplID0gaCArIDE7CisgICAgICAgIHRvcF9zaXplICA9IHcgKyAxOworICAgICAgICB1 bmZpbHRlcl9sZWZ0X3NpemUgPSBsZWZ0X3NpemUgKyBmaWx0ZXJfZmxhZzsKKyAgICAgICAgdW5m aWx0ZXJfdG9wX3NpemUgID0gdG9wX3NpemUgICsgZmlsdGVyX2ZsYWc7CisgICAgfSBlbHNlIGlm IChtb2RlID09IElOVFJBX0RDKSB7CisgICAgICAgIHVuZmlsdGVyX2xlZnRfc2l6ZSA9IGxlZnRf c2l6ZSA9IGg7CisgICAgICAgIHVuZmlsdGVyX3RvcF9zaXplID0gdG9wX3NpemUgID0gdzsKKyAg ICB9IGVsc2UgaWYgKG1vZGUgPT0gSU5UUkFfVkVSVCkgeworICAgICAgICAvL3dlIG1heSBuZWVk IDEgcGl4ZWwgdG8gcHJlZGljdCB0aGUgdG9wIGxlZnQuCisgICAgICAgIHVuZmlsdGVyX2xlZnRf c2l6ZSA9IGxlZnRfc2l6ZSA9IG5lZWRfcGRwYyA/IGggOiAxOworICAgICAgICB1bmZpbHRlcl90 b3Bfc2l6ZSA9IHRvcF9zaXplICA9IHc7CisgICAgfSBlbHNlIGlmIChtb2RlID09IElOVFJBX0hP UlopIHsKKyAgICAgICAgdW5maWx0ZXJfbGVmdF9zaXplID0gbGVmdF9zaXplID0gaDsKKyAgICAg ICAgLy9ldmVuIG5lZWRfcGRwYyA9PSAwLCB3ZSBtYXkgbmVlZCAxIHBpeGVsIHRvIHByZWRpY3Qg dGhlIHRvcCBsZWZ0LgorICAgICAgICB1bmZpbHRlcl90b3Bfc2l6ZSA9IHRvcF9zaXplID0gbmVl ZF9wZHBjID8gdyA6IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGN1LT5pc3Bfc3BsaXRf dHlwZSA9PSBJU1BfTk9fU1BMSVQgfHwgY19pZHgpIHsKKyAgICAgICAgICAgIHJlZncgPSB3ICog MjsKKyAgICAgICAgICAgIHJlZmggPSBoICogMjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIHJlZncgPSBjdS0+Y2Jfd2lkdGggKyB3OworICAgICAgICAgICAgcmVmaCA9IGN1LT5jYl9o ZWlnaHQgKyBoOworICAgICAgICB9CisgICAgICAgIGludHJhX3ByZWRfYW5nbGUgPSBmZl92dmNf aW50cmFfcHJlZF9hbmdsZV9kZXJpdmUobW9kZSk7CisgICAgICAgIGludl9hbmdsZSA9IGZmX3Z2 Y19pbnRyYV9pbnZfYW5nbGVfZGVyaXZlKGludHJhX3ByZWRfYW5nbGUpOworICAgICAgICB1bmZp bHRlcl90b3Bfc2l6ZSA9IHRvcF9zaXplICA9IHJlZnc7CisgICAgICAgIHVuZmlsdGVyX2xlZnRf c2l6ZSA9IGxlZnRfc2l6ZSA9IHJlZmg7CisgICAgfQorCisgICAgbGVmdF9hdmFpbGFibGUgPSBm Zl92dmNfZ2V0X2xlZnRfYXZhaWxhYmxlKGxjLCB4LCB5LCB1bmZpbHRlcl9sZWZ0X3NpemUsIGNf aWR4KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVmdF9hdmFpbGFibGU7IGkrKykKKyAgICAgICAg bGVmdFtpXSA9IFBPUyhyZWZfbGluZSwgaSk7CisKKyAgICB0b3BfYXZhaWxhYmxlID0gZmZfdnZj X2dldF90b3BfYXZhaWxhYmxlKGxjLCB4LCB5LCB1bmZpbHRlcl90b3Bfc2l6ZSwgY19pZHgpOwor ICAgIG1lbWNweSh0b3AsIHNyYyArIHJlZl9saW5lICogc3RyaWRlLCB0b3BfYXZhaWxhYmxlICog c2l6ZW9mKHBpeGVsKSk7CisKKyAgICBmb3IgKGludCBpID0gLTE7IGkgPj0gcmVmX2xpbmU7IGkt LSkgeworICAgICAgICBpZiAoY2FuZF91cF9sZWZ0KSB7CisgICAgICAgICAgICBsZWZ0W2ldID0g UE9TKHJlZl9saW5lLCBpKTsKKyAgICAgICAgICAgIHRvcFtpXSAgPSBQT1MoaSwgcmVmX2xpbmUp OworICAgICAgICB9IGVsc2UgaWYgKGxlZnRfYXZhaWxhYmxlKSB7CisgICAgICAgICAgICBsZWZ0 W2ldID0gdG9wW2ldID0gbGVmdFswXTsKKyAgICAgICAgfSBlbHNlIGlmICh0b3BfYXZhaWxhYmxl KSB7CisgICAgICAgICAgICBsZWZ0W2ldID0gdG9wW2ldID0gdG9wWzBdOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgbGVmdFtpXSA9IHRvcFtpXSA9IDEgPDwgKEJJVF9ERVBUSCAtIDEp OworICAgICAgICB9CisgICAgfQorCisgICAgRVhURU5EKHRvcCArIHRvcF9hdmFpbGFibGUsIHRv cFt0b3BfYXZhaWxhYmxlLTFdLCB1bmZpbHRlcl90b3Bfc2l6ZSAtIHRvcF9hdmFpbGFibGUpOwor ICAgIEVYVEVORChsZWZ0ICsgbGVmdF9hdmFpbGFibGUsIGxlZnRbbGVmdF9hdmFpbGFibGUtMV0s IHVuZmlsdGVyX2xlZnRfc2l6ZSAtIGxlZnRfYXZhaWxhYmxlKTsKKworICAgIGlmIChyZWZfZmls dGVyX2ZsYWcpIHsKKyAgICAgICAgaWYgKCFyZWZfaWR4ICYmIHcgKiBoID4gMzIgJiYgIWNfaWR4 ICYmIGN1LT5pc3Bfc3BsaXRfdHlwZSA9PSBJU1BfTk9fU1BMSVQgKSB7CisgICAgICAgICAgICBj b25zdCBpbnQgdW5maWx0ZXJfbGFzdF9vbmUgPSBsZWZ0X3NpemUgPT0gdW5maWx0ZXJfbGVmdF9z aXplOworICAgICAgICAgICAgRlVOQyhyZWZfZmlsdGVyKShsZWZ0LCB0b3AsIGZpbHRlcmVkX2xl ZnQsIGZpbHRlcmVkX3RvcCwgdW5maWx0ZXJfbGVmdF9zaXplLCB1bmZpbHRlcl90b3Bfc2l6ZSwg dW5maWx0ZXJfbGFzdF9vbmUpOworICAgICAgICAgICAgbGVmdCA9IGZpbHRlcmVkX2xlZnQ7Cisg ICAgICAgICAgICB0b3AgID0gZmlsdGVyZWRfdG9wOworICAgICAgICB9CisgICAgfQorICAgIGlm ICghaXNfaW50cmFfbWlwICYmIG1vZGUgIT0gSU5UUkFfUExBTkFSICYmIG1vZGUgIT0gSU5UUkFf REMpIHsKKyAgICAgICAgaWYgKHJlZl9maWx0ZXJfZmxhZyB8fCByZWZfaWR4IHx8IGN1LT5pc3Bf c3BsaXRfdHlwZSAhPSBJU1BfTk9fU1BMSVQpIHsKKyAgICAgICAgICAgIGVkZ2UtPmZpbHRlcl9m bGFnID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBtaW5fZGlz dF92ZXJfaG9yID0gRkZNSU4oYWJzKG1vZGUgLSA1MCksIGFicyhtb2RlIC0gMTgpKTsKKyAgICAg ICAgICAgIGNvbnN0IGludCBpbnRyYV9ob3JfdmVyX2Rpc3RfdGhyZXNbXSA9IHsyNCwgMTQsIDIs IDAsIDB9OworICAgICAgICAgICAgY29uc3QgaW50IG50YnMgPSAoYXZfbG9nMih3KSArIGF2X2xv ZzIoaCkpID4+IDE7CisgICAgICAgICAgICBlZGdlLT5maWx0ZXJfZmxhZyA9IG1pbl9kaXN0X3Zl cl9ob3IgPiBpbnRyYV9ob3JfdmVyX2Rpc3RfdGhyZXNbbnRicyAtIDJdOworICAgICAgICB9CisK KyAgICAgICAgaWYgKG1vZGUgIT0gSU5UUkFfVkVSVCAmJiBtb2RlICE9IElOVFJBX0hPUlopIHsK KyAgICAgICAgICAgIGlmIChtb2RlID49IElOVFJBX0RJQUcpIHsKKyAgICAgICAgICAgICAgICBp ZiAoaW50cmFfcHJlZF9hbmdsZSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWwgKnAg PSB0b3AgLSAocmVmX2lkeCArIDEpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g LWg7IHggPCAwOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBpZHgg PSAtMSAtIHJlZl9pZHggKyBGRk1JTigoeCppbnZfYW5nbGUgKyAyNTYpID4+IDksIGgpOworICAg ICAgICAgICAgICAgICAgICAgICAgcFt4XSA9IGxlZnRbaWR4XTsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAo aW50IGkgPSByZWZ3OyBpIDw9IHJlZncgKyBGRk1BWCgxLCB3L2gpICogcmVmX2lkeCArIDE7IGkr KykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvcFtpXSA9IHRvcFtyZWZ3IC0gMV07CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo aW50cmFfcHJlZF9hbmdsZSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWwgKnAgPSBs ZWZ0IC0gKHJlZl9pZHggKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IC13 OyB4IDwgMDsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgaWR4ID0g LTEgLSByZWZfaWR4ICsgRkZNSU4oKHgqaW52X2FuZ2xlICsgMjU2KSA+PiA5LCB3KTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHBbeF0gPSB0b3BbaWR4XTsKKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50 IGkgPSByZWZoOyBpIDw9IHJlZmggKyBGRk1BWCgxLCBoL3cpICogcmVmX2lkeCArIDE7IGkrKykK KyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRbaV0gPSBsZWZ0W3JlZmggLSAxXTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWRnZS0+ bGVmdCA9ICh1aW50OF90KilsZWZ0OworICAgIGVkZ2UtPnRvcCAgPSAodWludDhfdCopdG9wOwor fQorCisvLzguNC4xIEdlbmVyYWwgZGVjb2RpbmcgcHJvY2VzcyBmb3IgY29kaW5nIHVuaXRzIGNv ZGVkIGluIGludHJhIHByZWRpY3Rpb24gbW9kZQorc3RhdGljIHZvaWQgRlVOQyhpbnRyYV9wcmVk KShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCwKKyAgICBjb25zdCBp bnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGludCBjX2lkeCkKK3sKKyAgICBWVkNGcmFtZUNv bnRleHQgKmZjICAgICA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyA9IGZjLT5wcy5z cHM7CisgICAgY29uc3QgVlZDUFBTICpwcHMgPSBmYy0+cHMucHBzOworICAgIGNvbnN0IENvZGlu Z1VuaXQgKmN1ID0gbGMtPmN1OworICAgIGNvbnN0IGludCBsb2cyX21pbl9jYl9zaXplICAgID0g c3BzLT5taW5fY2JfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IG1pbl9jYl93aWR0aCAgICAg ICAgPSBwcHMtPm1pbl9jYl93aWR0aDsKKyAgICBjb25zdCBpbnQgeF9jYiAgICAgICAgICAgICAg ICA9IHgwID4+IGxvZzJfbWluX2NiX3NpemU7CisgICAgY29uc3QgaW50IHlfY2IgICAgICAgICAg ICAgICAgPSB5MCA+PiBsb2cyX21pbl9jYl9zaXplOworCisgICAgY29uc3QgaW50IGhzaGlmdCA9 IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IHZzaGlmdCA9IGZjLT5w cy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IHggPSB4MCA+PiBoc2hpZnQ7Cisg ICAgY29uc3QgaW50IHkgPSB5MCA+PiB2c2hpZnQ7CisgICAgY29uc3QgaW50IHcgPSB3aWR0aCA+ PiBoc2hpZnQ7CisgICAgY29uc3QgaW50IGggPSBoZWlnaHQgPj4gdnNoaWZ0OworICAgIGNvbnN0 IHB0cmRpZmZfdCBzdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSAvIHNpemVvZihw aXhlbCk7CisKKyAgICBjb25zdCBpbnQgcHJlZF9tb2RlID0gY19pZHggPyBjdS0+aW50cmFfcHJl ZF9tb2RlX2MgOiBjdS0+aW50cmFfcHJlZF9tb2RlX3k7CisgICAgY29uc3QgaW50IG1vZGUgPSBm Zl92dmNfd2lkZV9hbmdsZV9tb2RlX21hcHBpbmcoY3UsIHcsIGgsIGNfaWR4LCBwcmVkX21vZGUp OworCisgICAgY29uc3QgaW50IGludHJhX21pcF9mbGFnICA9IFNBTVBMRV9DVEIoZmMtPnRhYi5p bWYsIHhfY2IsIHlfY2IpOworICAgIGNvbnN0IGludCBpc19pbnRyYV9taXAgICAgPSBpbnRyYV9t aXBfZmxhZyAmJiAoIWNfaWR4IHx8IGN1LT5taXBfY2hyb21hX2RpcmVjdF9mbGFnKTsKKyAgICBj b25zdCBpbnQgcmVmX2lkeCA9IGNfaWR4ID8gMCA6IGN1LT5pbnRyYV9sdW1hX3JlZl9pZHg7Cisg ICAgY29uc3QgaW50IG5lZWRfcGRwYyA9IGZmX3Z2Y19uZWVkX3BkcGModywgaCwgY3UtPmJkcGNt X2ZsYWdbY19pZHhdLCBtb2RlLCByZWZfaWR4KTsKKworCisgICAgcGl4ZWwgKnNyYyA9IChwaXhl bCopZmMtPmZyYW1lLT5kYXRhW2NfaWR4XSArIHggKyB5ICogc3RyaWRlOworICAgIEludHJhRWRn ZVBhcmFtcyBlZGdlOworCisgICAgRlVOQyhwcmVwYXJlX2ludHJhX2VkZ2VfcGFyYW1zKShsYywg JmVkZ2UsIHNyYywgc3RyaWRlLCB4LCB5LCB3LCBoLCBjX2lkeCwgaXNfaW50cmFfbWlwLCBtb2Rl LCByZWZfaWR4LCBuZWVkX3BkcGMpOworCisgICAgaWYgKGlzX2ludHJhX21pcCkgeworICAgICAg ICBpbnQgaW50cmFfbWlwX3RyYW5zcG9zZWRfZmxhZyA9IFNBTVBMRV9DVEIoZmMtPnRhYi5pbXRm LCB4X2NiLCB5X2NiKTsKKyAgICAgICAgaW50IGludHJhX21pcF9tb2RlID0gU0FNUExFX0NUQihm Yy0+dGFiLmltbSwgeF9jYiwgeV9jYik7CisKKyAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5wcmVk X21pcCgodWludDhfdCAqKXNyYywgZWRnZS50b3AsIGVkZ2UubGVmdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgIHcsIGgsIHN0cmlkZSwgaW50cmFfbWlwX21vZGUsIGludHJhX21pcF90cmFuc3Bv c2VkX2ZsYWcpOworICAgIH0gZWxzZSBpZiAobW9kZSA9PSBJTlRSQV9QTEFOQVIpIHsKKyAgICAg ICAgZmMtPnZ2Y2RzcC5pbnRyYS5wcmVkX3BsYW5hcigodWludDhfdCAqKXNyYywgZWRnZS50b3As IGVkZ2UubGVmdCwgdywgaCwgc3RyaWRlKTsKKyAgICB9IGVsc2UgaWYgKG1vZGUgPT0gSU5UUkFf REMpIHsKKyAgICAgICAgZmMtPnZ2Y2RzcC5pbnRyYS5wcmVkX2RjKCh1aW50OF90ICopc3JjLCBl ZGdlLnRvcCwgZWRnZS5sZWZ0LCB3LCBoLCBzdHJpZGUpOworICAgIH0gZWxzZSBpZiAobW9kZSA9 PSBJTlRSQV9WRVJUKSB7CisgICAgICAgIGZjLT52dmNkc3AuaW50cmEucHJlZF92KCh1aW50OF90 ICopc3JjLCBlZGdlLnRvcCwgdywgaCwgc3RyaWRlKTsKKyAgICB9IGVsc2UgaWYgKG1vZGUgPT0g SU5UUkFfSE9SWikgeworICAgICAgICBmYy0+dnZjZHNwLmludHJhLnByZWRfaCgodWludDhfdCAq KXNyYywgZWRnZS5sZWZ0LCB3LCBoLCBzdHJpZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlm IChtb2RlID49IElOVFJBX0RJQUcpIHsKKyAgICAgICAgICAgIGZjLT52dmNkc3AuaW50cmEucHJl ZF9hbmd1bGFyX3YoKHVpbnQ4X3QgKilzcmMsIGVkZ2UudG9wLCBlZGdlLmxlZnQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdywgaCwgc3RyaWRlLCBjX2lkeCwgbW9kZSwgcmVm X2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLmZpbHRlcl9mbGFn LCBuZWVkX3BkcGMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmMtPnZ2Y2RzcC5p bnRyYS5wcmVkX2FuZ3VsYXJfaCgodWludDhfdCAqKXNyYywgZWRnZS50b3AsIGVkZ2UubGVmdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBzdHJpZGUsIGNfaWR4LCBt b2RlLCByZWZfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UuZmls dGVyX2ZsYWcsIG5lZWRfcGRwYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG5lZWRfcGRw YykgeworICAgICAgICAvLzguNC41LjIuMTUgUG9zaXRpb24tZGVwZW5kZW50IGludHJhIHByZWRp Y3Rpb24gc2FtcGxlIGZpbHRlcmluZyBwcm9jZXNzCisgICAgICAgIGlmICghaXNfaW50cmFfbWlw ICYmIChtb2RlID09IElOVFJBX1BMQU5BUiB8fCBtb2RlID09IElOVFJBX0RDIHx8CisgICAgICAg ICAgICBtb2RlID09IElOVFJBX1ZFUlQgfHwgbW9kZSA9PSBJTlRSQV9IT1JaKSkgeworICAgICAg ICAgICAgY29uc3QgaW50IHNjYWxlID0gKGF2X2xvZzIodykgKyBhdl9sb2cyKGgpIC0gMikgPj4g MjsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpsZWZ0ID0gKHBpeGVsKillZGdlLmxlZnQ7Cisg ICAgICAgICAgICBjb25zdCBwaXhlbCAqdG9wICA9IChwaXhlbCopZWRnZS50b3A7CisgICAgICAg ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgeworICAgICAgICAgICAgICAgIGZvciAo aW50IHggPSAwOyB4IDwgdzsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBsLCB0LCB3 bCwgd3QsIHByZWQ7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsIHZhbDsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKG1vZGUgPT0gSU5UUkFfUExBTkFSIHx8IG1vZGUgPT0gSU5UUkFfREMpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIGwgID0gbGVmdFt5XTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHQgPSB0b3BbeF07CisgICAgICAgICAgICAgICAgICAgICAgICB3bCA9IDMyID4+IEZG TUlOKCh4IDw8IDEpID4+IHNjYWxlLCAzMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3dCA9 IDMyID4+IEZGTUlOKCh5IDw8IDEpID4+IHNjYWxlLCAzMSk7CisgICAgICAgICAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsICA9IGxlZnRbeV0gLSBsZWZ0Wy0x XSArIFBPUyh4LHkpOworICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHRvcFt4XSAtIHRvcFst MV0gKyBQT1MoeCx5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdsID0gKG1vZGUgPT0gSU5U UkFfVkVSVCkgPyAgKDMyID4+IEZGTUlOKCh4IDw8IDEpID4+IHNjYWxlLCAzMSkpIDogMDsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHd0ID0gKG1vZGUgPT0gSU5UUkFfSE9SWikgPyAgKDMyID4+ IEZGTUlOKCh5IDw8IDEpID4+IHNjYWxlLCAzMSkpIDogMDsKKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICB2YWwgPSBQT1MoeCwgeSk7CisgICAgICAgICAgICAgICAg ICAgIHByZWQgID0gdmFsICsgKCh3bCAqIChsIC0gdmFsKSArIHd0ICogKHQgLSB2YWwpICsgMzIp ID4+IDYpOworICAgICAgICAgICAgICAgICAgICBQT1MoeCwgeSkgPSBDTElQKHByZWQpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworLy84 LjQuNS4yLjExIFNwZWNpZmljYXRpb24gb2YgSU5UUkFfUExBTkFSIGludHJhIHByZWRpY3Rpb24g bW9kZQorc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKHByZWRfcGxhbmFyKSh1aW50 OF90ICpfc3JjLCBjb25zdCB1aW50OF90ICpfdG9wLAorICAgIGNvbnN0IHVpbnQ4X3QgKl9sZWZ0 LCBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUpCit7Cisg ICAgaW50IHgsIHk7CisgICAgcGl4ZWwgKnNyYyAgICAgICAgPSAocGl4ZWwgKilfc3JjOworICAg IGNvbnN0IHBpeGVsICp0b3AgID0gKGNvbnN0IHBpeGVsICopX3RvcDsKKyAgICBjb25zdCBwaXhl bCAqbGVmdCA9IChjb25zdCBwaXhlbCAqKV9sZWZ0OworICAgIGNvbnN0IGludCBsb2d3ICA9IGF2 X2xvZzIodyk7CisgICAgY29uc3QgaW50IGxvZ2ggID0gYXZfbG9nMihoKTsKKyAgICBjb25zdCBp bnQgc2l6ZSAgPSAgdyAqIGg7CisgICAgY29uc3QgaW50IHNoaWZ0ID0gKGxvZ3cgKyBsb2doICsg MSk7CisgICAgZm9yICh5ID0gMDsgeSA8IGg7IHkrKykgeworICAgICAgICBmb3IgKHggPSAwOyB4 IDwgdzsgeCsrKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJlZF92ID0gKChoIC0gMSAtIHkp ICogdG9wW3hdICArICh5ICsgMSkgKiBsZWZ0W2hdKSA8PCBsb2d3OworICAgICAgICAgICAgY29u c3QgaW50IHByZWRfaCA9ICgodyAtIDEgLSB4KSAqIGxlZnRbeV0gKyAoeCArIDEpICogdG9wW3dd KSA8PCBsb2doOworICAgICAgICAgICAgY29uc3QgaW50IHByZWQgPSAocHJlZF92ICsgcHJlZF9o ICsgc2l6ZSkgPj4gc2hpZnQ7CisgICAgICAgICAgICBQT1MoeCwgeSkgPSBwcmVkOworICAgICAg ICB9CisgICAgfQorfQorCisvLzguNC41LjIuMyBNSVAgYm91bmRhcnkgc2FtcGxlIGRvd25zYW1w bGluZyBwcm9jZXNzCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMobWlwX2Rvd25z YW1wbGluZykoaW50ICpyZWR1Y2VkLCBjb25zdCBpbnQgYm91bmRhcnlfc2l6ZSwKKyAgICBjb25z dCBwaXhlbCAqcmVmLCBjb25zdCBpbnQgbl90Yl9zKQoreworICAgIGNvbnN0IGludCBiX2R3biA9 IG5fdGJfcyAvIGJvdW5kYXJ5X3NpemU7CisgICAgY29uc3QgaW50IGxvZzIgPSBhdl9sb2cyKGJf ZHduKTsKKworICAgIGlmIChib3VuZGFyeV9zaXplID09IG5fdGJfcykgeworICAgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IG5fdGJfczsgaSsrKQorICAgICAgICAgICAgcmVkdWNlZFtpXSA9IHJl ZltpXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGJv dW5kYXJ5X3NpemU7IGkrKykgeworICAgICAgICBpbnQgcjsKKyAgICAgICAgciA9ICpyZWYrKzsK KyAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPCBiX2R3bjsgaisrKQorICAgICAgICAgICAgciAr PSAqcmVmKys7CisgICAgICAgIHJlZHVjZWRbaV0gPSAociArICgxIDw8IChsb2cyIC0gMSkpKSA+ PiBsb2cyOworICAgIH0KK30KKworc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKG1p cF9yZWR1Y2VkX3ByZWQpKHBpeGVsICpzcmMsIGNvbnN0IHB0cmRpZmZfdCBzdHJpZGUsCisgICAg Y29uc3QgaW50IHVwX2hvciwgY29uc3QgaW50IHVwX3ZlciwgY29uc3QgaW50IHByZWRfc2l6ZSwg Y29uc3QgaW50ICpyZWR1Y2VkLCBjb25zdCBpbnQgcmVkdWNlZF9zaXplLAorICAgIGNvbnN0IGlu dCBvdywgY29uc3QgaW50IHRlbXAwLCBjb25zdCB1aW50OF90ICptYXRyaXgsIGludCBpc190cmFu c3Bvc2VkKQoreworICAgIHNyYyA9ICZQT1ModXBfaG9yIC0gMSwgdXBfdmVyIC0gMSk7CisgICAg Zm9yIChpbnQgeSA9IDA7IHkgPCBwcmVkX3NpemU7IHkrKykgeworICAgICAgICBmb3IgKGludCB4 ID0gMDsgeCA8IHByZWRfc2l6ZTsgeCsrKSB7CisgICAgICAgICAgICBpbnQgcHJlZCA9IDA7Cisg ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZHVjZWRfc2l6ZTsgaSsrKQorICAgICAg ICAgICAgICAgIHByZWQgKz0gcmVkdWNlZFtpXSAqIG1hdHJpeFtpXTsKKyAgICAgICAgICAgIG1h dHJpeCArPSByZWR1Y2VkX3NpemU7CisgICAgICAgICAgICBwcmVkID0gKChwcmVkICsgb3cpID4+ IDYpICsgdGVtcDA7CisgICAgICAgICAgICBwcmVkID0gYXZfY2xpcChwcmVkLCAwLCAoMTw8QklU X0RFUFRIKSAtIDEpOworICAgICAgICAgICAgaWYgKGlzX3RyYW5zcG9zZWQpCisgICAgICAgICAg ICAgICAgUE9TKHkgKiB1cF9ob3IsIHggKiB1cF92ZXIpID0gcHJlZDsKKyAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICBQT1MoeCAqIHVwX2hvciwgeSAqIHVwX3ZlcikgPSBwcmVkOwor ICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB2b2lkIEZVTkMo bWlwX3Vwc2FtcGxpbmdfMWQpKHBpeGVsICpkc3QsIGNvbnN0IGludCBkc3Rfc3RlcCwgY29uc3Qg aW50IGRzdF9zdHJpZGUsIGNvbnN0IGludCBkc3RfaGVpZ2h0LCBjb25zdCBpbnQgZmFjdG9yLAor ICAgIGNvbnN0IHBpeGVsICpib3VuZGFyeSwgY29uc3QgaW50IGJvdW5kYXJ5X3N0ZXAsICBjb25z dCBpbnQgcHJlZF9zaXplKQoreworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkc3RfaGVpZ2h0 OyBpKyspIHsKKyAgICAgICAgY29uc3QgcGl4ZWwgKmJlZm9yZSA9IGJvdW5kYXJ5OworICAgICAg ICBjb25zdCBwaXhlbCAqYWZ0ZXIgID0gZHN0IC0gZHN0X3N0ZXA7CisgICAgICAgIHBpeGVsICpk ID0gZHN0OworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHByZWRfc2l6ZTsgaisrKSB7Cisg ICAgICAgICAgICBhZnRlciArPSBkc3Rfc3RlcCAqIGZhY3RvcjsKKyAgICAgICAgICAgIGZvciAo aW50IGsgPSAxOyBrIDwgZmFjdG9yOyBrKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgbWlkID0g KGZhY3RvciAtIGspICogKCpiZWZvcmUpICsgayAqICgqYWZ0ZXIpOworICAgICAgICAgICAgICAg ICpkID0gKG1pZCArIGZhY3RvciAvIDIpIC8gZmFjdG9yOworICAgICAgICAgICAgICAgIGQgKz0g ZHN0X3N0ZXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiZWZvcmUgPSBhZnRlcjsKKyAg ICAgICAgICAgIGQgKz0gZHN0X3N0ZXA7CisgICAgICAgIH0KKyAgICAgICAgYm91bmRhcnkgKz0g Ym91bmRhcnlfc3RlcDsKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgfQorfQorCisv LzguNC41LjIuMiBNYXRyaXgtYmFzZWQgaW50cmEgc2FtcGxlIHByZWRpY3Rpb24KK3N0YXRpYyBh dl9hbHdheXNfaW5saW5lIHZvaWQgRlVOQyhwcmVkX21pcCkodWludDhfdCAqX3NyYywgY29uc3Qg dWludDhfdCAqX3RvcCwKKyAgICBjb25zdCB1aW50OF90ICpfbGVmdCwgY29uc3QgaW50IHcsIGNv bnN0IGludCBoLCBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlLAorICAgIGludCBtb2RlX2lkLCBpbnQg aXNfdHJhbnNwb3NlZCkKK3sKKyAgICBwaXhlbCAqc3JjICAgICAgICA9IChwaXhlbCAqKV9zcmM7 CisgICAgY29uc3QgcGl4ZWwgKnRvcCAgPSAoY29uc3QgcGl4ZWwgKilfdG9wOworICAgIGNvbnN0 IHBpeGVsICpsZWZ0ID0gKGNvbnN0IHBpeGVsICopX2xlZnQ7CisKKyAgICBjb25zdCBpbnQgc2l6 ZV9pZCA9IGZmX3Z2Y19nZXRfbWlwX3NpemVfaWQodywgaCk7CisgICAgc3RhdGljIGNvbnN0IGlu dCBib3VuZGFyeV9zaXplc1tdID0gezIsIDQsIDR9OworICAgIHN0YXRpYyBjb25zdCBpbnQgcHJl ZF9zaXplc1tdID0gezQsIDQsIDh9OworICAgIGNvbnN0IGludCBib3VuZGFyeV9zaXplID0gYm91 bmRhcnlfc2l6ZXNbc2l6ZV9pZF07CisgICAgY29uc3QgaW50IHByZWRfc2l6ZSAgICAgPSBwcmVk X3NpemVzW3NpemVfaWRdOworICAgIGNvbnN0IGludCBpbl9zaXplID0gMiAqIGJvdW5kYXJ5X3Np emUgLSAoKHNpemVfaWQgPT0gMikgPyAxIDogMCk7CisgICAgY29uc3QgdWludDhfdCAqbWF0cml4 ID0gZmZfdnZjX2dldF9taXBfbWF0cml4KHNpemVfaWQsIG1vZGVfaWQpOworICAgIGNvbnN0IGlu dCB1cF9ob3IgPSB3IC8gcHJlZF9zaXplOworICAgIGNvbnN0IGludCB1cF92ZXIgPSBoIC8gcHJl ZF9zaXplOworCisgICAgaW50IHJlZHVjZWRbMTZdOworICAgIGludCAqcmVkX3QgID0gcmVkdWNl ZDsKKyAgICBpbnQgKnJlZF9sICA9IHJlZHVjZWQgKyBib3VuZGFyeV9zaXplOworICAgIGludCBv ZmYgPSAxLCBvdyA9IDA7CisgICAgaW50IHRlbXAwOworCisgICAgaWYgKGlzX3RyYW5zcG9zZWQp IHsKKyAgICAgICAgRkZTV0FQKGludCosIHJlZF90LCByZWRfbCk7CisgICAgfQorICAgIEZVTkMo bWlwX2Rvd25zYW1wbGluZykocmVkX3QsIGJvdW5kYXJ5X3NpemUsIHRvcCwgdyk7CisgICAgRlVO QyhtaXBfZG93bnNhbXBsaW5nKShyZWRfbCwgYm91bmRhcnlfc2l6ZSwgbGVmdCwgaCk7CisKKyAg ICB0ZW1wMCA9IHJlZHVjZWRbMF07CisgICAgaWYgKHNpemVfaWQgIT0gMikgeworICAgICAgICBv ZmYgPSAwOworICAgICAgICBvdyA9ICgxIDw8IChCSVRfREVQVEggLSAxKSkgLSB0ZW1wMDsKKyAg ICB9IGVsc2UgeworICAgICAgICBvdyA9IHJlZHVjZWRbMV0gLSB0ZW1wMDsKKyAgICB9CisgICAg cmVkdWNlZFswXSA9IG93OworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgaW5fc2l6ZTsgaSsrKSB7 CisgICAgICAgIHJlZHVjZWRbaV0gPSByZWR1Y2VkW2kgKyBvZmZdIC0gdGVtcDA7CisgICAgICAg IG93ICs9IHJlZHVjZWRbaV07CisgICAgfQorICAgIG93ID0gMzIgLSAzMiAqIG93OworCisgICAg RlVOQyhtaXBfcmVkdWNlZF9wcmVkKShzcmMsIHN0cmlkZSwgdXBfaG9yLCB1cF92ZXIsIHByZWRf c2l6ZSwgcmVkdWNlZCwgaW5fc2l6ZSwgb3csIHRlbXAwLCBtYXRyaXgsIGlzX3RyYW5zcG9zZWQp OworICAgIGlmICh1cF9ob3IgPiAxIHx8IHVwX3ZlciA+IDEpIHsKKyAgICAgICAgaWYgKHVwX2hv ciA+IDEpCisgICAgICAgICAgICBGVU5DKG1pcF91cHNhbXBsaW5nXzFkKSgmUE9TKDAsIHVwX3Zl ciAtIDEpLCAxLCB1cF92ZXIgKiBzdHJpZGUsIHByZWRfc2l6ZSwgdXBfaG9yLCBsZWZ0ICsgdXBf dmVyIC0gMSwgdXBfdmVyLCBwcmVkX3NpemUpOworICAgICAgICBpZiAodXBfdmVyID4gMSkKKyAg ICAgICAgICAgIEZVTkMobWlwX3Vwc2FtcGxpbmdfMWQpKHNyYywgc3RyaWRlLCAxLCB3LCB1cF92 ZXIsIHRvcCwgMSwgcHJlZF9zaXplKTsKKyAgICB9Cit9CisKK3N0YXRpYyBhdl9hbHdheXNfaW5s aW5lIHBpeGVsIEZVTkMocHJlZF9kY192YWwpKGNvbnN0IHBpeGVsICp0b3AsIGNvbnN0IHBpeGVs ICpsZWZ0LAorICAgIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCkKK3sKKyAgICBwaXhlbCBkY192 YWw7CisgICAgaW50IHN1bSA9IDA7CisgICAgdW5zaWduZWQgaW50IG9mZnNldCA9ICh3ID09IGgp ID8gKHcgPDwgMSkgOiBGRk1BWCh3LCBoKTsKKyAgICBjb25zdCBpbnQgc2hpZnQgPSBhdl9sb2cy KG9mZnNldCk7CisgICAgb2Zmc2V0ID4+PSAxOworICAgIGlmICh3ID49IGgpIHsKKyAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCB3OyBpKyspCisgICAgICAgICAgICBzdW0gKz0gdG9wW2ldOwor ICAgIH0KKyAgICBpZiAodyA8PSBoKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaDsg aSsrKQorICAgICAgICAgICAgc3VtICs9IGxlZnRbaV07CisgICAgfQorICAgIGRjX3ZhbCA9IChz dW0gKyBvZmZzZXQpID4+IHNoaWZ0OworICAgIHJldHVybiBkY192YWw7Cit9CisKKy8vOC40LjUu Mi4xMiBTcGVjaWZpY2F0aW9uIG9mIElOVFJBX0RDIGludHJhIHByZWRpY3Rpb24gbW9kZQorc3Rh dGljIGF2X2Fsd2F5c19pbmxpbmUgdm9pZCBGVU5DKHByZWRfZGMpKHVpbnQ4X3QgKl9zcmMsIGNv bnN0IHVpbnQ4X3QgKl90b3AsCisgICAgY29uc3QgdWludDhfdCAqX2xlZnQsIGNvbnN0IGludCB3 LCBjb25zdCBpbnQgaCwgY29uc3QgcHRyZGlmZl90IHN0cmlkZSkKK3sKKyAgICBpbnQgeCwgeTsK KyAgICBwaXhlbCAqc3JjICAgICAgICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBwaXhl bCAqdG9wICAgID0gKGNvbnN0IHBpeGVsICopX3RvcDsKKyAgICBjb25zdCBwaXhlbCAqbGVmdCAg ID0gKGNvbnN0IHBpeGVsICopX2xlZnQ7CisgICAgY29uc3QgcGl4ZWwgZGMgICAgICA9IEZVTkMo cHJlZF9kY192YWwpKHRvcCwgbGVmdCwgdywgaCk7CisgICAgY29uc3QgcGl4ZWw0IGEgICAgICA9 IFBJWEVMX1NQTEFUX1g0KGRjKTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAg ICAgIHBpeGVsICpzID0gc3JjOworICAgICAgICBmb3IgKHggPSAwOyB4IDwgdzsgeCArPSA0KSB7 CisgICAgICAgICAgICBBVl9XTjRQKHMsIGEpOworICAgICAgICAgICAgcyArPSA0OworICAgICAg ICB9CisgICAgICAgIHNyYyArPSBzdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgYXZfYWx3YXlz X2lubGluZSB2b2lkIEZVTkMocHJlZF92KSh1aW50OF90ICpfc3JjLCBjb25zdCB1aW50OF90ICpf dG9wLAorICAgIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29uc3QgcHRyZGlmZl90IHN0cmlk ZSkKK3sKKyAgICBwaXhlbCAqc3JjICAgICAgICAgID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25z dCBwaXhlbCAqdG9wICAgID0gKGNvbnN0IHBpeGVsICopX3RvcDsKKyAgICBmb3IgKGludCB5ID0g MDsgeSA8IGg7IHkrKykgeworICAgICAgICBtZW1jcHkoc3JjLCB0b3AsIHNpemVvZihwaXhlbCkg ICogdyk7CisgICAgICAgIHNyYyArPSBzdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBG VU5DKHByZWRfaCkodWludDhfdCAqX3NyYywgY29uc3QgdWludDhfdCAqX2xlZnQsIGNvbnN0IGlu dCB3LCBjb25zdCBpbnQgaCwKKyAgICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIHBp eGVsICpzcmMgICAgICAgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGNvbnN0IHBpeGVsICpsZWZ0 ICAgID0gKGNvbnN0IHBpeGVsICopX2xlZnQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5 KyspIHsKKyAgICAgICAgY29uc3QgcGl4ZWw0IGEgPSBQSVhFTF9TUExBVF9YNChsZWZ0W3ldKTsK KyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4ICs9IDQpIHsKKyAgICAgICAgICAgIEFW X1dONFAoJlBPUyh4LCB5KSwgYSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNkZWZpbmUgSU5U UkFfTFVNQV9GSUxURVIocCkgICAgQ0xJUCgocFswXSAqIGZbMF0gKyBwWzFdICogZlsxXSArIHBb Ml0gKiBmWzJdICsgcFszXSAqIGZbM10gKyAzMikgPj4gNikKKyNkZWZpbmUgSU5UUkFfQ0hST01B X0ZJTFRFUihwKSAgKCgoMzIgLSBmYWN0KSAqIHBbMV0gKyBmYWN0ICogcFsyXSArIDE2KSA+PiA1 KQorCisvLzguNC41LjIuMTMgU3BlY2lmaWNhdGlvbiBvZiBJTlRSQV9BTkdVTEFSMi4uSU5UUkFf QU5HVUxBUjY2IGludHJhIHByZWRpY3Rpb24gbW9kZXMKK3N0YXRpYyB2b2lkIEZVTkMocHJlZF9h bmd1bGFyX3YpKHVpbnQ4X3QgKl9zcmMsIGNvbnN0IHVpbnQ4X3QgKl90b3AsIGNvbnN0IHVpbnQ4 X3QgKl9sZWZ0LAorICAgIGNvbnN0IGludCB3LCBjb25zdCBpbnQgaCwgY29uc3QgcHRyZGlmZl90 IHN0cmlkZSwgY29uc3QgaW50IGNfaWR4LCBjb25zdCBpbnQgbW9kZSwKKyAgICBjb25zdCBpbnQg cmVmX2lkeCwgY29uc3QgaW50IGZpbHRlcl9mbGFnLCBjb25zdCBpbnQgbmVlZF9wZHBjKQorewor ICAgIHBpeGVsICpzcmMgICAgICAgICAgPSAocGl4ZWwgKilfc3JjOworICAgIGNvbnN0IHBpeGVs ICpsZWZ0ICAgPSAoY29uc3QgcGl4ZWwgKilfbGVmdDsKKyAgICBjb25zdCBwaXhlbCAqdG9wICAg ID0gKGNvbnN0IHBpeGVsICopX3RvcCAtICgxICsgcmVmX2lkeCk7CisgICAgY29uc3QgaW50IGlu dHJhX3ByZWRfYW5nbGUgPSBmZl92dmNfaW50cmFfcHJlZF9hbmdsZV9kZXJpdmUobW9kZSk7Cisg ICAgaW50IHBvcyA9ICgxICsgcmVmX2lkeCkgKiBpbnRyYV9wcmVkX2FuZ2xlOworICAgIGNvbnN0 IGludCBkcCA9IGludHJhX3ByZWRfYW5nbGU7CisgICAgY29uc3QgaW50IGlzX2x1bWEgPSAhY19p ZHg7CisgICAgaW50IG5zY2FsZSwgaW52X2FuZ2xlOworCisgICAgaWYgKG5lZWRfcGRwYykgewor ICAgICAgICBpbnZfYW5nbGUgPSBmZl92dmNfaW50cmFfaW52X2FuZ2xlX2Rlcml2ZShpbnRyYV9w cmVkX2FuZ2xlKTsKKyAgICAgICAgbnNjYWxlID0gZmZfdnZjX25zY2FsZV9kZXJpdmUodywgaCwg bW9kZSk7CisgICAgfQorCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5KyspIHsKKyAgICAg ICAgY29uc3QgaW50IGlkeCAgID0gKHBvcyA+PiA1KSArIHJlZl9pZHg7CisgICAgICAgIGNvbnN0 IGludCBmYWN0ID0gcG9zICYgMzE7CisgICAgICAgIGlmICghZmFjdCAmJiAoIWlzX2x1bWEgfHwg IWZpbHRlcl9mbGFnKSkgeworICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4Kysp IHsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcCA9IHRvcCArIHggKyBpZHggKyAxOwor ICAgICAgICAgICAgICAgIFBPUyh4LCB5KSA9ICpwOworICAgICAgICAgICAgfQorICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgaWYgKCFjX2lkeCkgeworICAgICAgICAgICAgICAgIGNvbnN0 IGludDhfdCAqZiA9IGZmX3Z2Y19pbnRyYV9sdW1hX2ZpbHRlcltmaWx0ZXJfZmxhZ11bZmFjdF07 CisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4KyspIHsKKyAgICAgICAg ICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAgPSB0b3AgKyB4ICsgaWR4OworICAgICAgICAgICAg ICAgICAgICBQT1MoeCwgeSkgPSBJTlRSQV9MVU1BX0ZJTFRFUihwKTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAw OyB4IDwgdzsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwID0gdG9w ICsgeCArIGlkeDsKKyAgICAgICAgICAgICAgICAgICAgUE9TKHgsIHkpID0gSU5UUkFfQ0hST01B X0ZJTFRFUihwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgaWYgKG5lZWRfcGRwYykgeworICAgICAgICAgICAgaW50IGludl9hbmdsZV9zdW0g PSAyNTYgKyBpbnZfYW5nbGU7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IEZGTUlO KHcsIDMgPDwgbnNjYWxlKTsgeCsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgbCAg ID0gbGVmdFt5ICsgKGludl9hbmdsZV9zdW0gPj4gOSldOworICAgICAgICAgICAgICAgIGNvbnN0 IHBpeGVsIHZhbCA9IFBPUyh4LCB5KTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgd2wgICAg PSAzMiA+PiAoKHggPDwgMSkgPj4gbnNjYWxlKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQg cHJlZCAgPSB2YWwgKyAoKChsIC0gdmFsKSAqIHdsICsgMzIpID4+IDYpOworICAgICAgICAgICAg ICAgIFBPUyh4LCB5KSA9IENMSVAocHJlZCk7CisgICAgICAgICAgICAgICAgaW52X2FuZ2xlX3N1 bSArPSBpbnZfYW5nbGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcG9zICs9 IGRwOworICAgIH0KK30KKworLy84LjQuNS4yLjEzIFNwZWNpZmljYXRpb24gb2YgSU5UUkFfQU5H VUxBUjIuLklOVFJBX0FOR1VMQVI2NiBpbnRyYSBwcmVkaWN0aW9uIG1vZGVzCitzdGF0aWMgdm9p ZCBGVU5DKHByZWRfYW5ndWxhcl9oKSh1aW50OF90ICpfc3JjLCBjb25zdCB1aW50OF90ICpfdG9w LCBjb25zdCB1aW50OF90ICpfbGVmdCwKKyAgICBjb25zdCBpbnQgdywgY29uc3QgaW50IGgsIGNv bnN0IHB0cmRpZmZfdCBzdHJpZGUsIGNvbnN0IGludCBjX2lkeCwgY29uc3QgaW50IG1vZGUsCisg ICAgY29uc3QgaW50IHJlZl9pZHgsIGNvbnN0IGludCBmaWx0ZXJfZmxhZywgY29uc3QgaW50IG5l ZWRfcGRwYykKK3sKKyAgICBwaXhlbCAqc3JjICAgICAgICAgID0gKHBpeGVsICopX3NyYzsKKyAg ICBjb25zdCBwaXhlbCAqbGVmdCAgID0gKGNvbnN0IHBpeGVsICopX2xlZnQgLSAoMSArIHJlZl9p ZHgpOworICAgIGNvbnN0IHBpeGVsICp0b3AgICAgPSAoY29uc3QgcGl4ZWwgKilfdG9wOworICAg IGNvbnN0IGludCBpc19sdW1hID0gIWNfaWR4OworICAgIGNvbnN0IGludCBpbnRyYV9wcmVkX2Fu Z2xlID0gZmZfdnZjX2ludHJhX3ByZWRfYW5nbGVfZGVyaXZlKG1vZGUpOworICAgIGNvbnN0IGlu dCBkcCA9IGludHJhX3ByZWRfYW5nbGU7CisgICAgaW50IG5zY2FsZSA9IDAsIGludl9hbmdsZSwg aW52X2FuZ2xlX3N1bTsKKworICAgIGlmIChuZWVkX3BkcGMpIHsKKyAgICAgICAgaW52X2FuZ2xl ID0gZmZfdnZjX2ludHJhX2ludl9hbmdsZV9kZXJpdmUoaW50cmFfcHJlZF9hbmdsZSk7CisgICAg ICAgIGludl9hbmdsZV9zdW0gPSAyNTYgKyBpbnZfYW5nbGU7CisgICAgICAgIG5zY2FsZSA9IGZm X3Z2Y19uc2NhbGVfZGVyaXZlKHcsIGgsIG1vZGUpOworICAgIH0KKworICAgIGZvciAoaW50IHkg PSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICAgIGludCBwb3MgPSAoMSArIHJlZl9pZHgpICogaW50 cmFfcHJlZF9hbmdsZTsKKyAgICAgICAgaW50IHd0OworICAgICAgICBpZiAobmVlZF9wZHBjKQor ICAgICAgICAgICAgd3QgPSAoMzIgPj4gKCh5ICogMikgPj4gbnNjYWxlKSk7CisKKyAgICAgICAg Zm9yIChpbnQgeCA9IDA7IHggPCB3OyB4KyspIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBpZHgg ID0gKHBvcyA+PiA1KSArIHJlZl9pZHg7CisgICAgICAgICAgICBjb25zdCBpbnQgZmFjdCA9IHBv cyAmIDMxOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAgPSBsZWZ0ICsgeSArIGlkeDsKKyAg ICAgICAgICAgIGludCBwcmVkOworICAgICAgICAgICAgaWYgKCFmYWN0ICYmICghaXNfbHVtYSB8 fCAhZmlsdGVyX2ZsYWcpKSB7CisgICAgICAgICAgICAgICAgcHJlZCA9IHBbMV07CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghY19pZHgpIHsKKyAgICAgICAgICAg ICAgICAgICAgY29uc3QgaW50OF90ICpmID0gZmZfdnZjX2ludHJhX2x1bWFfZmlsdGVyW2ZpbHRl cl9mbGFnXVtmYWN0XTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZCA9IElOVFJBX0xVTUFfRklM VEVSKHApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBy ZWQgPSBJTlRSQV9DSFJPTUFfRklMVEVSKHApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmIChuZWVkX3BkcGMpIHsKKyAgICAgICAgICAgICAgICBpZiAo eSA8ICgzIDw8IG5zY2FsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgdCA9 IHRvcFt4ICsgKGludl9hbmdsZV9zdW0gPj4gOSldOworICAgICAgICAgICAgICAgICAgICBwcmVk ID0gQ0xJUChwcmVkICsgKCgodCAtIHByZWQpICogd3QgKyAzMikgPj4gNikpOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBPUyh4LCB5KSA9IHByZWQ7Cisg ICAgICAgICAgICBwb3MgKz0gZHA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5lZWRfcGRwYykK KyAgICAgICAgICAgIGludl9hbmdsZV9zdW0gKz0gaW52X2FuZ2xlOworICAgIH0KK30KKworc3Rh dGljIHZvaWQgRlVOQyhmZl92dmNfaW50cmFfZHNwX2luaXQpKFZWQ0ludHJhRFNQQ29udGV4dCAq Y29uc3QgaW50cmEpCit7CisgICAgaW50cmEtPmxtY3Nfc2NhbGVfY2hyb21hICA9IEZVTkMobG1j c19zY2FsZV9jaHJvbWEpOworICAgIGludHJhLT5pbnRyYV9jY2xtX3ByZWQgICAgPSBGVU5DKGlu dHJhX2NjbG1fcHJlZCk7CisgICAgaW50cmEtPmludHJhX3ByZWQgICAgICAgICA9IEZVTkMoaW50 cmFfcHJlZCk7CisgICAgaW50cmEtPnByZWRfcGxhbmFyICAgICAgICA9IEZVTkMocHJlZF9wbGFu YXIpOworICAgIGludHJhLT5wcmVkX21pcCAgICAgICAgICAgPSBGVU5DKHByZWRfbWlwKTsKKyAg ICBpbnRyYS0+cHJlZF9kYyAgICAgICAgICAgID0gRlVOQyhwcmVkX2RjKTsKKyAgICBpbnRyYS0+ cHJlZF92ICAgICAgICAgICAgID0gRlVOQyhwcmVkX3YpOworICAgIGludHJhLT5wcmVkX2ggICAg ICAgICAgICAgPSBGVU5DKHByZWRfaCk7CisgICAgaW50cmEtPnByZWRfYW5ndWxhcl92ICAgICA9 IEZVTkMocHJlZF9hbmd1bGFyX3YpOworICAgIGludHJhLT5wcmVkX2FuZ3VsYXJfaCAgICAgPSBG VU5DKHByZWRfYW5ndWxhcl9oKTsKK30KLS0gCjIuMjUuMQoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1w ZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9m Zm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApm Zm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUi Lgo=