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 C3A07406CE for ; Wed, 23 Mar 2022 14:58:17 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 765F868B000; Wed, 23 Mar 2022 16:58:14 +0200 (EET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2031.outbound.protection.outlook.com [40.92.90.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 589A468A43A for ; Wed, 23 Mar 2022 16:58:08 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kt97D4/qU6qcHjT0r4W18KOCy9g0Ze5JUVA17xo6sUwM0uOxGB1q1pfvIUlSHwlF2pYrhNPUC4D3ssOM7/eE19wg1u0bnOYdkeLsXO1nnvDDZwnpbZ7Rw8dIuDWRH4KatIXmusVZFBSI/m3fgRPlM8CnSsH1EdCdUr2tHMTGReB0zjrUa5p1RIW48DRBBaZ+zKO5Yl2DfJRlniGCLIT7Pv9z2h6aOVrGphAjgYCUrrRS32gsMCyOsOB8t5VrMGlJ+7TXBBYfUFw5qT1vOxZdmVOA6ADkRGCSTucw7cLgiVDsmEe+2p7AA3HhwYWyDixMk6YZCjxdKCtPtcKj0uerPQ== 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=vCaDWP0KsRe3ncFJClD/YsgchdcYTuf7uYlJNUSCh8Y=; b=KaSPXlzpdhGgDIx/UUtvT3/9yPFy6T2mZ3VrZcBpbtIFPQAi7+qZ5AEmeA3uECbd95Y5NYcaIrJ6mmeWnw3J4JqNJpT0gE1YsdbbCIAefT349FQQAkklL3660GqMdNRzVDcSybaWJvRh5GrsRLF+sNbKbjr3dsITwJevjYMY3irOTSPl+KWVYJyt1lzeWzbA3EDWS0LVSMgf8+693pjtiEJfMtEzNVm472fxf8hY75Ass7kXnWaEqy2JHBL8zxQqw0WPTGR5s4k94N2V68hrhhCdHvuBvowyO3bmP9D+br93ktNeD7hP7dtTJNAHK/Nu0zruAe2Fr84HFvndT0F11A== 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=vCaDWP0KsRe3ncFJClD/YsgchdcYTuf7uYlJNUSCh8Y=; b=Te80LuKhcKmDISC88tABf4hPZW0IK+Tp1qYMdTjWkSzpYaQVclACMz4zg1Zi3SJfQpYWV8rsykJOZWfsbqr58CIi4I1SdDS2x2cGynMSI0izlFTNUA0N86//dhxYNUZm0D/zX4ll9PrdWBDa+9l/LEjcYZI5OSHUA2jdmqfWtAjNjhF7zodPryxL/0yetROFPbkmUyoU2JIMeKotoQkKNNtAwJFiED+nW4+ftoLUr4NQXrovo468DVxH6ZjRgoyg66pU74ic4SdbF4edPPbRQYovE184qlKGYPmynQCa+KTX63vF1Vc7hANEgyRV1Kx5SES2RbNS2//C9bLWQquY9g== Received: from AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) by HE1PR0102MB2586.eurprd01.prod.exchangelabs.com (2603:10a6:7:18::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5081.16; Wed, 23 Mar 2022 14:58:04 +0000 Received: from AS1PR01MB9564.eurprd01.prod.exchangelabs.com ([fe80::9070:a5fd:e532:bdf8]) by AS1PR01MB9564.eurprd01.prod.exchangelabs.com ([fe80::9070:a5fd:e532:bdf8%3]) with mapi id 15.20.5081.022; Wed, 23 Mar 2022 14:58:04 +0000 Message-ID: Date: Wed, 23 Mar 2022 15:58:02 +0100 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220323110325.5499-1-leo.izen@gmail.com> <20220323110325.5499-2-leo.izen@gmail.com> From: Andreas Rheinhardt In-Reply-To: <20220323110325.5499-2-leo.izen@gmail.com> X-TMN: [ZiNUgLqkgeHaM6+vMK4CNcupIpdh9Y+a] X-ClientProxiedBy: AS9PR06CA0186.eurprd06.prod.outlook.com (2603:10a6:20b:45d::33) To AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 81396192-b362-456c-629e-08da0cdd8855 X-MS-TrafficTypeDiagnostic: HE1PR0102MB2586:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NkV+c60UWF3LK8GuWrgxqYJ7vO1USmIhDPz20fYMWcolzwZw2YWmF92hoUuxW95CQXPMODhcEp830/bD2wR7nVqcdD9dIQQo2VhoqazUl7K/6ss4PlJrWpXx+M9C5QZUhMwxZNV10vPB41w5gCpzi3PWd78OGLzmk8doJSERfPzSUuG0pLch4gBLY0NwZdfu2nKisNPWjmiNMeJsmJCTlY4fAuQv0kLhgRVcp9ojZZ3F5L2BA0+cI7nlSNXQbByPTYJbBGjrkg6vncIXRMqQT7r/eEHEjwkd6bA7hDhhPCaf3xJL+tfvab4hpzCrsQDY2DkuoXanyD6Sjry6x/JkBazykcVkIZsSLJeoHEnIcESaa9E06Gkv7gMyXB7QF5CYAJg0uazSbH0voHzTMlNqopSauKoDghj/jz2SyZ88RyWNIg4pcBKUwURYfGr0bDt8GFT6nPTvwZvHUKNezuwx134+7104nVPYd/2cdR9LTg1/lem7R4+qaqrAlZP6rxOr9DbkNiEakAa4A3i0h2qGCxE/0MGYgVY6rUWABPRWQ8cVCLYrZiG80Na0PC0ifN7BoJQktQLJlJJUwI76SbBUETYCFSydP7oX1F4yCNRROCwNyihJEJjdybPe/r8p4reMOwwVEb43JKyXyBxjaICgGEswIAGuYCX8OwiHD250AzY= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YTFqeG83MzZBS1RWY3RBMkt2TXJVNWt6NWpsdGpqL2NKR01EUENDR1Y2VDBP?= =?utf-8?B?amZCMHpMZGFVR2NBTHZFQ1Q3K25xaWFWRktwYWJhS2JjaExsTEtXVmZTLzlZ?= =?utf-8?B?T2xXRktRd0tzcE56VDJBK3JNR3liSC9nTTduUXBMUGdHRUhNVlM1SU1xWjdW?= =?utf-8?B?QzJyWkJhV0xBQlBCdytNdm04MVdEVVBBRmpPSlphUXg2K2N1Zk93dDViNEla?= =?utf-8?B?alB4WTkxRHd5Z1V2UC8vNWs1cW96SWpjdjdUeENJVmFxQUx6S0grSEtUbGpB?= =?utf-8?B?bjlKUjVYRjYrcjJTS3FET3FmLzJkMUVXRzZCQVltS3ZhY21FelI4WGtCcS9L?= =?utf-8?B?a3hGVWxZUFNhSktjNDBBeEhaVkpPZnhObVFtWkd4R1B0NVJPcnphWEV4SEhx?= =?utf-8?B?QWhRY3lmZnc2U3I0NWFXWXlBSlFuZ1FvR0grQ1B2REtOcEh3cmFhMkhRSFFm?= =?utf-8?B?Si96K1RJdGIwejYxTSsySDQvV3ZXUG8rQXFleHJIeHR6Zys2ck00SHVIMnQ2?= =?utf-8?B?VzRJMUxlc2NJNFczRkhGOTlFWlNvcGNFbTBzWjFzU2RGSU5NUHpSUEc4VDVC?= =?utf-8?B?bmgrRjkvMVZpYkdwR2Y5YUVtQzBGbEpOaDQycTRLUkptSFRVQzdUb0FHdC9M?= =?utf-8?B?WDkwRzMyU2YyNEkwcmFJbWUvcmlwTTdPeUFxcGpRL21XMjdDS0VlUmp5enlU?= =?utf-8?B?b1JPampmZW9QOVQxL0F1ZUkxUExRYmVPRUpodjViL2VibGJPYlZtdkI5VWZ3?= =?utf-8?B?NWIzUk83YlVQK2t2ZzA5c1hYMk9uaHBWOVZZdDcyblBWL3M3cStoa3o1NU9R?= =?utf-8?B?TjlvbVd0TUdmOE41Vm9Yd0VDdGIvSU1DSVkxcENKdkhjaGZieVpzbVBQWWxz?= =?utf-8?B?aHBCbDlzSXowWFMwS2RqR0tiQlRPOXp5M3BCczBTQmRrcjNKSDBVcFRRZ3Zw?= =?utf-8?B?a2YzaTFnUFc3NlYrdWNhano0UUFDYVlybHhwUFprLzRhcWN5RFBpekt5OS9V?= =?utf-8?B?QlRNS2VuVTJkQU5ycjllL2t4aDdlSmlXUlpGbnF1OWh0c2l5UXR6Sjdyektr?= =?utf-8?B?bFZDZU9sZ2NRc1hZbVFoeVI3a2NMb2huRXZHb2RvWFBBL3ZQOUl5eVVJMFlY?= =?utf-8?B?R002Rnk3ckVsdytyU3BNNi9ENnZiMmViUjdHQmZmcm9uamdBTDhrcjVKbXpX?= =?utf-8?B?c0RaQ203WTcxcUpYMkVvMlNhU1NZY0lDTVZNaXZwVVRoMVJzc2o2czd2YlM2?= =?utf-8?B?TXJ0SkJ2eUZzYjlKTjlyOUxOc2Z5dm94aG1NbFc2d0F5bXhMekJpWk1LRmV1?= =?utf-8?B?T2dHZ1R0KzlxMXNFK05wSk91SEdoNEFTRnFPUS9XTXRmc21tZTNKMWNLbDhk?= =?utf-8?B?TDl0VVNzT1BGS2RwN1hrbVdrdHRZaTRMS1Vvd1BaYzdMbzZzRzhiMmp6cVU3?= =?utf-8?B?RzZ5Wk4zU3NPMnYzYVoweTBkanlzendiZGltMEQxUUdEaWZNaXE4S2dkTURJ?= =?utf-8?B?MHVSamVPcDR0bEhoa3huS3pTTlJXY0VBSC9QaFQwKzU3VlNzTTVuQjFBVHBn?= =?utf-8?Q?t1cDHEUNFPW0pO8M06BHmQ1AU=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 81396192-b362-456c-629e-08da0cdd8855 X-MS-Exchange-CrossTenant-AuthSource: AS1PR01MB9564.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Mar 2022 14:58:04.3448 (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: HE1PR0102MB2586 Subject: Re: [FFmpeg-devel] [PATCH v9 2/5] avcodec/libjxl: add Jpeg XL decoding via libjxl 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 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: TGVvIEl6ZW46Cj4gVGhpcyBjb21taXQgYWRkcyBkZWNvZGluZyBzdXBwb3J0IHRvIGxpYmF2Y29k ZWMKPiBmb3IgSnBlZyBYTCBpbWFnZXMgdmlhIHRoZSBleHRlcm5hbCBsaWJyYXJ5IGxpYmp4bC4K PiAtLS0KPiAgTUFJTlRBSU5FUlMgICAgICAgICAgICAgICB8ICAgMSArCj4gIGNvbmZpZ3VyZSAg ICAgICAgICAgICAgICAgfCAgIDUgKwo+ICBkb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhpIHwgICA3 ICsKPiAgbGliYXZjb2RlYy9NYWtlZmlsZSAgICAgICB8ICAgMSArCj4gIGxpYmF2Y29kZWMvYWxs Y29kZWNzLmMgICAgfCAgIDEgKwo+ICBsaWJhdmNvZGVjL2xpYmp4bC5jICAgICAgIHwgIDcwICsr KysrKysrKwo+ICBsaWJhdmNvZGVjL2xpYmp4bC5oICAgICAgIHwgIDQ4ICsrKysrKwo+ICBsaWJh dmNvZGVjL2xpYmp4bGRlYy5jICAgIHwgMzAyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gIDggZmlsZXMgY2hhbmdlZCwgNDM1IGluc2VydGlvbnMoKykKPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlianhsLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxp YmF2Y29kZWMvbGlianhsLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlianhs ZGVjLmMKPiAKPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwo+IGluZGV4 IDJlMGRlOWUyMjQuLjg3NWQyNWNhODkgMTAwNjQ0Cj4gLS0tIGEvTUFJTlRBSU5FUlMKPiArKysg Yi9NQUlOVEFJTkVSUwo+IEBAIC0xOTUsNiArMTk1LDcgQEAgQ29kZWNzOgo+ICAgIGxpYmNvZGVj Mi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9tYXMgSMOkcmRpbgo+ICAgIGxpYmRpcmFj KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF2aWQgQ29ucmFkCj4gICAgbGliZGF2czIu YyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIdWl3ZW4gUmVuCj4gKyAgbGlianhsKi5jLCBs aWJqeGwuaCAgICAgICAgICAgICAgICAgICBMZW8gSXplbgo+ICAgIGxpYmdzbS5jICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTWljaGVsIEJhcmRpYXV4Cj4gICAgbGlia3ZhemFhci5jICAg ICAgICAgICAgICAgICAgICAgICAgICBBcnR0dSBZbMOkLU91dGluZW4KPiAgICBsaWJvcGVuaDI2 NGVuYy5jICAgICAgICAgICAgICAgICAgICAgIE1hcnRpbiBTdG9yc2pvLCBMaW5qaWUgRnUKPiBk aWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4gaW5kZXggYTc5NTNmZmMxNi4uNGUy ODExNGQ5YyAxMDA3NTUKPiAtLS0gYS9jb25maWd1cmUKPiArKysgYi9jb25maWd1cmUKPiBAQCAt MjQwLDYgKzI0MCw3IEBAIEV4dGVybmFsIGxpYnJhcnkgc3VwcG9ydDoKPiAgICAtLWVuYWJsZS1s aWJpZWM2MTg4MyAgICAgZW5hYmxlIGllYzYxODgzIHZpYSBsaWJpZWM2MTg4MyBbbm9dCj4gICAg LS1lbmFibGUtbGliaWxiYyAgICAgICAgIGVuYWJsZSBpTEJDIGRlL2VuY29kaW5nIHZpYSBsaWJp bGJjIFtub10KPiAgICAtLWVuYWJsZS1saWJqYWNrICAgICAgICAgZW5hYmxlIEpBQ0sgYXVkaW8g c291bmQgc2VydmVyIFtub10KPiArICAtLWVuYWJsZS1saWJqeGwgICAgICAgICAgZW5hYmxlIEpQ RUcgWEwgZGVjb2RpbmcgdmlhIGxpYmp4bCBbbm9dCj4gICAgLS1lbmFibGUtbGlia2x2YW5jICAg ICAgIGVuYWJsZSBLZXJuZWwgTGFicyBWQU5DIHByb2Nlc3NpbmcgW25vXQo+ICAgIC0tZW5hYmxl LWxpYmt2YXphYXIgICAgICBlbmFibGUgSEVWQyBlbmNvZGluZyB2aWEgbGlia3ZhemFhciBbbm9d Cj4gICAgLS1lbmFibGUtbGlibGVuc2Z1biAgICAgIGVuYWJsZSBsZW5zZnVuIGxlbnMgY29ycmVj dGlvbiBbbm9dCj4gQEAgLTE4MzMsNiArMTgzNCw3IEBAIEVYVEVSTkFMX0xJQlJBUllfTElTVD0i Cj4gICAgICBsaWJpZWM2MTg4Mwo+ICAgICAgbGliaWxiYwo+ICAgICAgbGliamFjawo+ICsgICAg bGlianhsCj4gICAgICBsaWJrbHZhbmMKPiAgICAgIGxpYmt2YXphYXIKPiAgICAgIGxpYm1vZHBs dWcKPiBAQCAtMzMyOSw2ICszMzMxLDcgQEAgbGliZ3NtX21zX2RlY29kZXJfZGVwcz0ibGliZ3Nt Igo+ICBsaWJnc21fbXNfZW5jb2Rlcl9kZXBzPSJsaWJnc20iCj4gIGxpYmlsYmNfZGVjb2Rlcl9k ZXBzPSJsaWJpbGJjIgo+ICBsaWJpbGJjX2VuY29kZXJfZGVwcz0ibGliaWxiYyIKPiArbGlianhs X2RlY29kZXJfZGVwcz0ibGlianhsIGxpYmp4bF90aHJlYWRzIgo+ICBsaWJrdmF6YWFyX2VuY29k ZXJfZGVwcz0ibGlia3ZhemFhciIKPiAgbGlibW9kcGx1Z19kZW11eGVyX2RlcHM9ImxpYm1vZHBs dWciCj4gIGxpYm1wM2xhbWVfZW5jb2Rlcl9kZXBzPSJsaWJtcDNsYW1lIgo+IEBAIC02NTQxLDYg KzY1NDQsOCBAQCBlbmFibGVkIGxpYmdzbSAgICAgICAgICAgICYmIHsgZm9yIGdzbV9oZHIgaW4g ImdzbS5oIiAiZ3NtL2dzbS5oIjsgZG8KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGVja19saWIgbGliZ3NtICIke2dzbV9oZHJ9IiBnc21fY3JlYXRlIC1sZ3NtICYmIGJy ZWFrOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSB8fCBkaWUgIkVSUk9S OiBsaWJnc20gbm90IGZvdW5kIjsgfQo+ICBlbmFibGVkIGxpYmlsYmMgICAgICAgICAgICYmIHJl cXVpcmUgbGliaWxiYyBpbGJjLmggV2ViUnRjSWxiY2ZpeF9Jbml0RGVjb2RlIC1saWxiYyAkcHRo cmVhZHNfZXh0cmFsaWJzCj4gK2VuYWJsZWQgbGlianhsICAgICAgICAgICAgJiYgcmVxdWlyZV9w a2dfY29uZmlnIGxpYmp4bCAibGlianhsID49IDAuNy4wIiBqeGwvZGVjb2RlLmggSnhsRGVjb2Rl clZlcnNpb24gJiYKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlX3BrZ19j b25maWcgbGlianhsX3RocmVhZHMgImxpYmp4bF90aHJlYWRzID49IDAuNy4wIiBqeGwvdGhyZWFk X3BhcmFsbGVsX3J1bm5lci5oIEp4bFRocmVhZFBhcmFsbGVsUnVubmVyCj4gIGVuYWJsZWQgbGli a2x2YW5jICAgICAgICAgJiYgcmVxdWlyZSBsaWJrbHZhbmMgbGlia2x2YW5jL3ZhbmMuaCBrbHZh bmNfY29udGV4dF9jcmVhdGUgLWxrbHZhbmMKPiAgZW5hYmxlZCBsaWJrdmF6YWFyICAgICAgICAm JiByZXF1aXJlX3BrZ19jb25maWcgbGlia3ZhemFhciAia3ZhemFhciA+PSAwLjguMSIga3ZhemFh ci5oIGt2el9hcGlfZ2V0Cj4gIGVuYWJsZWQgbGlibGVuc2Z1biAgICAgICAgJiYgcmVxdWlyZV9w a2dfY29uZmlnIGxpYmxlbnNmdW4gbGVuc2Z1biBsZW5zZnVuLmggbGZfZGJfbmV3Cj4gZGlmZiAt LWdpdCBhL2RvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkgYi9kb2MvZ2VuZXJhbF9jb250ZW50cy50 ZXhpCj4gaW5kZXggZmNkOWRhMWIzNC4uYTg5MzM0N2ZiZSAxMDA2NDQKPiAtLS0gYS9kb2MvZ2Vu ZXJhbF9jb250ZW50cy50ZXhpCj4gKysrIGIvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aQo+IEBA IC0xNzEsNiArMTcxLDEzIEBAIEdvIHRvIEB1cmx7aHR0cHM6Ly9naXRodWIuY29tL1RpbW90aHlH dS9saWJpbGJjfSBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgZm9yCj4gIGluc3RhbGxpbmcg dGhlIGxpYnJhcnkuIFRoZW4gcGFzcyBAY29kZXstLWVuYWJsZS1saWJpbGJjfSB0byBjb25maWd1 cmUgdG8KPiAgZW5hYmxlIGl0Lgo+ICAKPiArQHNlY3Rpb24gbGlianhsCj4gKwo+ICtKUEVHIFhM IGlzIGFuIGltYWdlIGZvcm1hdCBpbnRlbmRlZCB0byBmdWxseSByZXBsYWNlIGxlZ2FjeSBKUEVH IGZvciBhbiBleHRlbmRlZAo+ICtwZXJpb2Qgb2YgbGlmZS4gU2VlIEB1cmx7aHR0cHM6Ly9qcGVn eGwuaW5mby99IGZvciBtb3JlIGluZm9ybWF0aW9uLCBhbmQgc2VlCj4gK0B1cmx7aHR0cHM6Ly9n aXRodWIuY29tL2xpYmp4bC9saWJqeGx9IGZvciB0aGUgbGlicmFyeSBzb3VyY2UuIFlvdSBjYW4g cGFzcwo+ICtAY29kZXstLWVuYWJsZS1saWJqeGx9IHRvIGNvbmZpZ3VyZSBpbiBvcmRlciBlbmFi bGUgdGhlIGxpYmp4bCB3cmFwcGVyLgo+ICsKPiAgQHNlY3Rpb24gbGlidnB4Cj4gIAo+ICBGRm1w ZWcgY2FuIG1ha2UgdXNlIG9mIHRoZSBsaWJ2cHggbGlicmFyeSBmb3IgVlA4L1ZQOSBkZWNvZGlu ZyBhbmQgZW5jb2RpbmcuCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvTWFrZWZpbGUgYi9saWJh dmNvZGVjL01ha2VmaWxlCj4gaW5kZXggMzcyMzYwMWIzZC4uYzAwYjBkMzI0NiAxMDA2NDQKPiAt LS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCj4gKysrIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+IEBA IC0xMDYwLDYgKzEwNjAsNyBAQCBPQkpTLSQoQ09ORklHX0xJQkdTTV9NU19ERUNPREVSKSAgICAg ICAgICArPSBsaWJnc21kZWMubwo+ICBPQkpTLSQoQ09ORklHX0xJQkdTTV9NU19FTkNPREVSKSAg ICAgICAgICArPSBsaWJnc21lbmMubwo+ICBPQkpTLSQoQ09ORklHX0xJQklMQkNfREVDT0RFUikg ICAgICAgICAgICArPSBsaWJpbGJjLm8KPiAgT0JKUy0kKENPTkZJR19MSUJJTEJDX0VOQ09ERVIp ICAgICAgICAgICAgKz0gbGliaWxiYy5vCj4gK09CSlMtJChDT05GSUdfTElCSlhMX0RFQ09ERVIp ICAgICAgICAgICAgICs9IGxpYmp4bGRlYy5vIGxpYmp4bC5vCj4gIE9CSlMtJChDT05GSUdfTElC S1ZBWkFBUl9FTkNPREVSKSAgICAgICAgICs9IGxpYmt2YXphYXIubwo+ICBPQkpTLSQoQ09ORklH X0xJQk1QM0xBTUVfRU5DT0RFUikgICAgICAgICArPSBsaWJtcDNsYW1lLm8KPiAgT0JKUy0kKENP TkZJR19MSUJPUEVOQ09SRV9BTVJOQl9ERUNPREVSKSAgKz0gbGlib3BlbmNvcmUtYW1yLm8KPiBk aWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9hbGxjb2RlY3MuYyBiL2xpYmF2Y29kZWMvYWxsY29kZWNz LmMKPiBpbmRleCAyMmQ1Njc2MGVjLi5hOWNkNjlkZmNlIDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29k ZWMvYWxsY29kZWNzLmMKPiArKysgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4gQEAgLTc0OSw2 ICs3NDksNyBAQCBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJnc21fbXNfZW5jb2RlcjsKPiAg ZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGliZ3NtX21zX2RlY29kZXI7Cj4gIGV4dGVybiBjb25z dCBGRkNvZGVjIGZmX2xpYmlsYmNfZW5jb2RlcjsKPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZf bGliaWxiY19kZWNvZGVyOwo+ICtleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJqeGxfZGVjb2Rl cjsKPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlibXAzbGFtZV9lbmNvZGVyOwo+ICBleHRl cm4gY29uc3QgRkZDb2RlYyBmZl9saWJvcGVuY29yZV9hbXJuYl9lbmNvZGVyOwo+ICBleHRlcm4g Y29uc3QgRkZDb2RlYyBmZl9saWJvcGVuY29yZV9hbXJuYl9kZWNvZGVyOwo+IGRpZmYgLS1naXQg YS9saWJhdmNvZGVjL2xpYmp4bC5jIGIvbGliYXZjb2RlYy9saWJqeGwuYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uMjA0ZDkxZDhhOAo+IC0tLSAvZGV2L251bGwK PiArKysgYi9saWJhdmNvZGVjL2xpYmp4bC5jCj4gQEAgLTAsMCArMSw3MCBAQAo+ICsvKgo+ICsg KiBKUEVHIFhMIGRlL2VuY29kaW5nIHZpYSBsaWJqeGwsIGNvbW1vbiBzdXBwb3J0IGltcGxlbWVu dGF0aW9uCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMSBMZW8gSXplbiA8bGVvLml6ZW5AZ21haWwu Y29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAq IEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK PiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0 aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBAZmlsZQo+ICsgKiBKUEVHIFhM IHZpYSBsaWJqeGwgY29tbW9uIHN1cHBvcnQgaW1wbGVtZW50YXRpb24KPiArICovCj4gKwo+ICsj aW5jbHVkZSAibGliYXZ1dGlsL2NwdS5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgo+ ICsKPiArI2luY2x1ZGUgPGp4bC9tZW1vcnlfbWFuYWdlci5oPgo+ICsjaW5jbHVkZSAibGlianhs LmgiCj4gKwo+ICtzaXplX3QgZmZfbGlianhsX2dldF90aHJlYWRjb3VudChpbnQgdGhyZWFkcykK PiArewo+ICsgICAgaWYgKHRocmVhZHMgPD0gMCkKPiArICAgICAgICByZXR1cm4gYXZfY3B1X2Nv dW50KCk7Cj4gKyAgICBpZiAodGhyZWFkcyA9PSAxKQo+ICsgICAgICAgIHJldHVybiAwOwo+ICsg ICAgcmV0dXJuIHRocmVhZHM7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBXcmFwcGVyIGFyb3VuZCBh dl9tYWxsb2MgdXNlZCBhcyBhIGpwZWd4bF9hbGxvY19mdW5jLgo+ICsgKgo+ICsgKiBAcGFyYW0g IG9wYXF1ZSBvcGFxdWUgcG9pbnRlciBmb3IganBlZ3hsX2FsbG9jX2Z1bmMsIGFsd2F5cyBpZ25v cmVkCj4gKyAqIEBwYXJhbSAgc2l6ZSBTaXplIGluIGJ5dGVzIGZvciB0aGUgbWVtb3J5IGJsb2Nr IHRvIGJlIGFsbG9jYXRlZAo+ICsgKiBAcmV0dXJuIFBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBi bG9jaywgb3IgYE5VTExgIGlmIGl0IGNhbm5vdCBiZSBhbGxvY2F0ZWQKPiArICovCj4gK3N0YXRp YyB2b2lkICpsaWJqeGxfYXZfbWFsbG9jKHZvaWQgKm9wYXF1ZSwgc2l6ZV90IHNpemUpCj4gK3sK PiArICAgIHJldHVybiBhdl9tYWxsb2Moc2l6ZSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBXcmFw cGVyIGFyb3VuZCBhdl9mcmVlIHVzZWQgYXMgYSBqcGVneGxfZnJlZV9mdW5jLgo+ICsgKgo+ICsg KiBAcGFyYW0gb3BhcXVlICBvcGFxdWUgcG9pbnRlciBmb3IganBlZ3hsX2ZyZWVfZnVuYywgYWx3 YXlzIGlnbm9yZWQKPiArICogQHBhcmFtIGFkZHJlc3MgUG9pbnRlciB0byB0aGUgYWxsb2NhdGVk IGJsb2NrLCB0byBmcmVlLiBgTlVMTGAgcGVybWl0dGVkIGFzIGEgbm8tb3AuCj4gKyAqLwo+ICtz dGF0aWMgdm9pZCBsaWJqeGxfYXZfZnJlZSh2b2lkICpvcGFxdWUsIHZvaWQgKmFkZHJlc3MpCj4g K3sKPiArICAgIGF2X2ZyZWUoYWRkcmVzcyk7Cj4gK30KPiArCj4gK3ZvaWQgZmZfbGlianhsX2lu aXRfbWVtb3J5X21hbmFnZXIoSnhsTWVtb3J5TWFuYWdlciAqbWFuYWdlcikKPiArewo+ICsgICAg bWFuYWdlci0+b3BhcXVlID0gTlVMTDsKPiArICAgIG1hbmFnZXItPmFsbG9jID0gJmxpYmp4bF9h dl9tYWxsb2M7Cj4gKyAgICBtYW5hZ2VyLT5mcmVlID0gJmxpYmp4bF9hdl9mcmVlOwo+ICt9Cj4g ZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvbGlianhsLmggYi9saWJhdmNvZGVjL2xpYmp4bC5oCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi41Mzg3YzQzOGZkCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Y29kZWMvbGlianhsLmgKPiBAQCAtMCwwICsxLDQ4IEBA Cj4gKy8qCj4gKyAqIEpQRUcgWEwgZGUvZW5jb2RpbmcgdmlhIGxpYmp4bCwgY29tbW9uIHN1cHBv cnQgaGVhZGVyCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMSBMZW8gSXplbiA8bGVvLml6ZW5AZ21h aWwuY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4g KyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcg d2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91 bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN QSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBAZmlsZQo+ICsgKiBKUEVH IFhMIHZpYSBsaWJqeGwgY29tbW9uIHN1cHBvcnQgaGVhZGVyCj4gKyAqLwo+ICsKPiArI2lmbmRl ZiBBVkNPREVDX0xJQkpYTF9ICj4gKyNkZWZpbmUgQVZDT0RFQ19MSUJKWExfSAo+ICsKPiArI2lu Y2x1ZGUgPGp4bC9tZW1vcnlfbWFuYWdlci5oPgo+ICsKPiArLyoqCj4gKyAqIFRyYW5zZm9ybSB0 aHJlYWRjb3VudCBpbiBmZm1wZWcgdG8gb25lIHVzZWQgYnkgbGlianhsLgo+ICsgKgo+ICsgKiBA cGFyYW0gIHRocmVhZHMgZmZtcGVnJ3MgdGhyZWFkcyBBVk9wdGlvbgo+ICsgKiBAcmV0dXJuICAg ICAgICAgdGhyZWFkIGNvdW50IGZvciBsaWJqeGwncyBwYXJhbGxlbCBydW5uZXIKPiArICovCj4g K3NpemVfdCBmZl9saWJqeGxfZ2V0X3RocmVhZGNvdW50KGludCB0aHJlYWRzKTsKPiArCj4gKy8q Kgo+ICsgKiBJbml0aWFsaXplIGFuZCBwb3B1bGF0ZSBhIEp4bE1lbW9yeU1hbmFnZXIKPiArICog d2l0aCBhdl9tYWxsb2MoKSBhbmQgYXZfZnJlZSgpIHNvIGxpYmp4bCB3aWxsIHVzZSB0aGVzZQo+ ICsgKiBmdW5jdGlvbnMuCj4gKyAqIEBwYXJhbSBtYW5hZ2VyIGEgcG9pbnRlciB0byBhIEp4bE1l bW9yeU1hbmFnZXIgc3RydWN0Cj4gKyAqLwo+ICt2b2lkIGZmX2xpYmp4bF9pbml0X21lbW9yeV9t YW5hZ2VyKEp4bE1lbW9yeU1hbmFnZXIgKm1hbmFnZXIpOwo+ICsKPiArI2VuZGlmIC8qIEFWQ09E RUNfTElCSlhMX0ggKi8KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9saWJqeGxkZWMuYyBiL2xp YmF2Y29kZWMvbGlianhsZGVjLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAuLmFkMjI5NzFmYmIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2RlYy9saWJq eGxkZWMuYwo+IEBAIC0wLDAgKzEsMzAyIEBACj4gKy8qCj4gKyAqIEpQRUcgWEwgZGVjb2Rpbmcg c3VwcG9ydCB2aWEgbGlianhsCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMSBMZW8gSXplbiA8bGVv Lml6ZW5AZ21haWwuY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcu Cj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAq IEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vu c2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK PiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBAZmlsZQo+ ICsgKiBKUEVHIFhMIGRlY29kZXIgdXNpbmcgbGlianhsCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg ImxpYmF2dXRpbC9hdmFzc2VydC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIgo+ ICsjaW5jbHVkZSAibGliYXZ1dGlsL2Vycm9yLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVt LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwv cGl4ZGVzYy5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGZtdC5oIgo+ICsjaW5jbHVkZSAi bGliYXZ1dGlsL2ZyYW1lLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvdmVyc2lvbi5oIgoKV2hh dCBkbyB5b3UgbmVlZCB2ZXJzaW9uIGZvcj8gQW5kIG9wdC5oPwoKPiArCj4gKyNpbmNsdWRlICJh dmNvZGVjLmgiCj4gKyNpbmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAiaW50 ZXJuYWwuaCIKPiArCj4gKyNpbmNsdWRlIDxqeGwvZGVjb2RlLmg+Cj4gKyNpbmNsdWRlIDxqeGwv dGhyZWFkX3BhcmFsbGVsX3J1bm5lci5oPgo+ICsjaW5jbHVkZSAibGlianhsLmgiCj4gKwo+ICt0 eXBlZGVmIHN0cnVjdCBMaWJKeGxEZWNvZGVDb250ZXh0IHsKPiArICAgIHZvaWQgKnJ1bm5lcjsK PiArICAgIEp4bERlY29kZXIgKmRlY29kZXI7Cj4gKyAgICBKeGxCYXNpY0luZm8gYmFzaWNfaW5m bzsKPiArICAgIEp4bFBpeGVsRm9ybWF0IGp4bF9waXhmbXQ7Cj4gKyAgICBKeGxEZWNvZGVyU3Rh dHVzIGV2ZW50czsKPiArICAgIHVpbnQ4X3QgKmljY3A7Cj4gKyAgICBzaXplX3QgaWNjcF9sZW47 Cj4gK30gTGliSnhsRGVjb2RlQ29udGV4dDsKPiArCj4gK3N0YXRpYyBpbnQgbGlianhsX2luaXRf anhsX2RlY29kZXIoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ICt7Cj4gKyAgICBMaWJKeGxEZWNv ZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGN0eC0+ZXZlbnRz ID0gSlhMX0RFQ19CQVNJQ19JTkZPIHwgSlhMX0RFQ19GVUxMX0lNQUdFIHwgSlhMX0RFQ19GUkFN RSB8IEpYTF9ERUNfQ09MT1JfRU5DT0RJTkc7Cj4gKyAgICBpZiAoSnhsRGVjb2RlclN1YnNjcmli ZUV2ZW50cyhjdHgtPmRlY29kZXIsIGN0eC0+ZXZlbnRzKSAhPSBKWExfREVDX1NVQ0NFU1MpIHsK PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkVycm9yIHN1YnNjcmliaW5n IHRvIEpYTCBldmVudHNcbiIpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ ICsgICAgfQo+ICsKPiArICAgIGlmIChKeGxEZWNvZGVyU2V0UGFyYWxsZWxSdW5uZXIoY3R4LT5k ZWNvZGVyLCBKeGxUaHJlYWRQYXJhbGxlbFJ1bm5lciwgY3R4LT5ydW5uZXIpICE9IEpYTF9ERUNf U1VDQ0VTUykgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVk IHRvIHNldCBKeGxUaHJlYWRQYXJhbGxlbFJ1bm5lclxuIik7Cj4gKyAgICAgICAgcmV0dXJuIEFW RVJST1JfRVhURVJOQUw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgbWVtc2V0KCZjdHgtPmJhc2ljX2lu Zm8sIDAsIHNpemVvZihKeGxCYXNpY0luZm8pKTsKPiArICAgIG1lbXNldCgmY3R4LT5qeGxfcGl4 Zm10LCAwLCBzaXplb2YoSnhsUGl4ZWxGb3JtYXQpKTsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgbGlianhsX2RlY29kZV9pbml0KEFWQ29kZWNDb250ZXh0 ICphdmN0eCkKPiArewo+ICsgICAgTGliSnhsRGVjb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnBy aXZfZGF0YTsKPiArICAgIEp4bE1lbW9yeU1hbmFnZXIgbWFuYWdlcjsKPiArCj4gKyAgICBmZl9s aWJqeGxfaW5pdF9tZW1vcnlfbWFuYWdlcigmbWFuYWdlcik7Cj4gKyAgICBjdHgtPmRlY29kZXIg PSBKeGxEZWNvZGVyQ3JlYXRlKCZtYW5hZ2VyKTsKPiArICAgIGlmICghY3R4LT5kZWNvZGVyKSB7 Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY3JlYXRl IEp4bERlY29kZXJcbiIpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsg ICAgfQo+ICsKPiArICAgIGN0eC0+cnVubmVyID0gSnhsVGhyZWFkUGFyYWxsZWxSdW5uZXJDcmVh dGUoJm1hbmFnZXIsIGZmX2xpYmp4bF9nZXRfdGhyZWFkY291bnQoYXZjdHgtPnRocmVhZF9jb3Vu dCkpOwo+ICsgICAgaWYgKCFjdHgtPnJ1bm5lcikgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBKeGxUaHJlYWRQYXJhbGxlbFJ1bm5lclxu Iik7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgcmV0dXJuIGxpYmp4bF9pbml0X2p4bF9kZWNvZGVyKGF2Y3R4KTsKPiArfQo+ICsKPiArc3Rh dGljIGVudW0gQVZQaXhlbEZvcm1hdCBsaWJqeGxfZ2V0X3BpeF9mbXQoQVZDb2RlY0NvbnRleHQg KmF2Y3R4LCBKeGxCYXNpY0luZm8gKmJhc2ljX2luZm8sIEp4bFBpeGVsRm9ybWF0ICpmb3JtYXQp Cj4gK3sKPiArICAgIGZvcm1hdC0+ZW5kaWFubmVzcyA9IEpYTF9OQVRJVkVfRU5ESUFOOwo+ICsg ICAgZm9ybWF0LT5udW1fY2hhbm5lbHMgPSBiYXNpY19pbmZvLT5udW1fY29sb3JfY2hhbm5lbHMg KyAoYmFzaWNfaW5mby0+YWxwaGFfYml0cyA+IDApOwo+ICsgICAgLyogYXZfbWFsbG9jIGhhbmRs ZXMgYWxpZ25tZW50IGFscmVhZHkgKi8KPiArICAgIGZvcm1hdC0+YWxpZ24gPSAxOwo+ICsgICAg LyogR3JheSAqLwo+ICsgICAgaWYgKGJhc2ljX2luZm8tPm51bV9jb2xvcl9jaGFubmVscyA9PSAx KSB7Cj4gKyAgICAgICAgaWYgKGJhc2ljX2luZm8tPmJpdHNfcGVyX3NhbXBsZSA8PSA4KSB7Cj4g KyAgICAgICAgICAgIGZvcm1hdC0+ZGF0YV90eXBlID0gSlhMX1RZUEVfVUlOVDg7Cj4gKyAgICAg ICAgICAgIHJldHVybiBiYXNpY19pbmZvLT5hbHBoYV9iaXRzID8gQVZfUElYX0ZNVF9ZQTggOiBB Vl9QSVhfRk1UX0dSQVk4Owo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoYmFzaWNfaW5mby0+ ZXhwb25lbnRfYml0c19wZXJfc2FtcGxlIHx8IGJhc2ljX2luZm8tPmJpdHNfcGVyX3NhbXBsZSA+ IDE2KSB7Cj4gKyAgICAgICAgICAgIGlmIChiYXNpY19pbmZvLT5hbHBoYV9iaXRzKQo+ICsgICAg ICAgICAgICAgICAgcmV0dXJuIEFWX1BJWF9GTVRfTk9ORTsKPiArICAgICAgICAgICAgZm9ybWF0 LT5kYXRhX3R5cGUgPSBKWExfVFlQRV9GTE9BVDsKPiArICAgICAgICAgICAgcmV0dXJuIEFWX1BJ WF9GTVRfR1JBWUYzMjsKPiArICAgICAgICB9Cj4gKyAgICAgICAgZm9ybWF0LT5kYXRhX3R5cGUg PSBKWExfVFlQRV9VSU5UMTY7Cj4gKyAgICAgICAgcmV0dXJuIGJhc2ljX2luZm8tPmFscGhhX2Jp dHMgPyBBVl9QSVhfRk1UX1lBMTYgOiBBVl9QSVhfRk1UX0dSQVkxNjsKPiArICAgIH0KPiArICAg IC8qIHJnYiBvbmx5ICovCj4gKyAgICAvKiBsaWJqeGwgb25seSBzdXBwb3J0cyBwYWNrZWQgUkdC IGFuZCBncmF5IG91dHB1dCBhdCB0aGUgbW9tZW50ICovCj4gKyAgICBpZiAoYmFzaWNfaW5mby0+ bnVtX2NvbG9yX2NoYW5uZWxzID09IDMpIHsKPiArICAgICAgICBpZiAoYmFzaWNfaW5mby0+Yml0 c19wZXJfc2FtcGxlIDw9IDgpIHsKPiArICAgICAgICAgICAgZm9ybWF0LT5kYXRhX3R5cGUgPSBK WExfVFlQRV9VSU5UODsKPiArICAgICAgICAgICAgcmV0dXJuIGJhc2ljX2luZm8tPmFscGhhX2Jp dHMgPyBBVl9QSVhfRk1UX1JHQkEgOiBBVl9QSVhfRk1UX1JHQjI0Owo+ICsgICAgICAgIH0KPiAr ICAgICAgICBpZiAoYmFzaWNfaW5mby0+Yml0c19wZXJfc2FtcGxlID4gMTYpCj4gKyAgICAgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJEb3duc2FtcGxpbmcgbGFyZ2VyIGlu dGVnZXIgdG8gMTYtYml0IHZpYSBsaWJqeGxcbiIpOwo+ICsgICAgICAgIGlmIChiYXNpY19pbmZv LT5leHBvbmVudF9iaXRzX3Blcl9zYW1wbGUpCj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX1dBUk5JTkcsICJEb3duc2FtcGxpbmcgZmxvYXQgdG8gMTYtYml0IGludGVnZXIgdmlh IGxpYmp4bFxuIik7Cj4gKyAgICAgICAgZm9ybWF0LT5kYXRhX3R5cGUgPSBKWExfVFlQRV9VSU5U MTY7Cj4gKyAgICAgICAgcmV0dXJuIGJhc2ljX2luZm8tPmFscGhhX2JpdHMgPyBBVl9QSVhfRk1U X1JHQkE2NCA6IEFWX1BJWF9GTVRfUkdCNDg7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gQVZfUElY X0ZNVF9OT05FOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBsaWJqeGxfcm93X2ZpbGwodm9pZCAq YXZmcmFtZSwgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3QgbnVtX3BpeGVscywgY29uc3Qgdm9p ZCAqcGl4ZWxzKQo+ICt7Cj4gKyAgICBBVkZyYW1lICpmcmFtZSA9IGF2ZnJhbWU7Cj4gKyAgICBp bnQgYnl0ZXMgPSBhdl9nZXRfcGFkZGVkX2JpdHNfcGVyX3BpeGVsKGF2X3BpeF9mbXRfZGVzY19n ZXQoZnJhbWUtPmZvcm1hdCkpIC8gODsKPiArICAgIHNpemVfdCBvZmZzZXQgPSB5ICogZnJhbWUt PmxpbmVzaXplWzBdICsgeCAqIGJ5dGVzOwo+ICsgICAgbWVtY3B5KGZyYW1lLT5kYXRhWzBdICsg b2Zmc2V0LCBwaXhlbHMsIG51bV9waXhlbHMgKiBieXRlcyk7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgbGlianhsX2RlY29kZV9mcmFtZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIHZvaWQgKmF2ZnJh bWUsIGludCAqZ290X2ZyYW1lLCBBVlBhY2tldCAqYXZwa3QpCj4gK3sKPiArICAgIExpYkp4bERl Y29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAgICB1aW50OF90ICpidWYg PSBhdnBrdC0+ZGF0YTsKPiArICAgIHNpemVfdCByZW1haW5pbmcgPSBhdnBrdC0+c2l6ZTsKPiAr ICAgIEFWRnJhbWUgKmZyYW1lID0gYXZmcmFtZTsKPiArICAgIEp4bERlY29kZXJTdGF0dXMgc3Rh dHVzOwo+ICsgICAgaW50IGZmX3N0YXR1czsKClRoZSB0eXBpY2FsIG5hbWUgZm9yIHRoaXMgdmFy aWFibGUgd291bGQgYmUgcmV0OyBKeGxEZWNvZGVyU3RhdHVzIGNvdWxkCmJlIGNvdWxkIGpyZXQu Cgo+ICsgICAgKmdvdF9mcmFtZSA9IDA7Cj4gKwo+ICsgICAgd2hpbGUgKDEpIHsKPiArICAgICAg ICAvKgo+ICsgICAgICAgICAqIGl0IG9ubHkgcmV0dXJucyBKWExfREVDX0VSUk9SIGhlcmUgaWYg dGhlIGlucHV0Cj4gKyAgICAgICAgICogd2FzIG5vdCByZWxlYXNlZCBzaW5jZSB0aGUgbGFzdCB0 aW1lIHRoaXMgd2FzIGNhbGxlZAo+ICsgICAgICAgICAqIGlmIHRoaXMgaGFwcGVucywgaXQncyBh IHByb2dyYW1tZXIgZXJyb3IKCklzIGl0IGd1YXJhbnRlZWQgdGhhdCB0aGlzIHdpbGwgbmV2ZXIg aGFwcGVuLCBlLmcuIHdoZW4gZmZfZ2V0X2J1ZmZlcigpCm9yIGFueXRoaW5nIGVsc2UgZmFpbHM/ Cgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIHN0YXR1cyA9IEp4bERlY29kZXJTZXRJbnB1dChj dHgtPmRlY29kZXIsIGJ1ZiwgcmVtYWluaW5nKTsKPiArICAgICAgICBhdl9hc3NlcnQwKHN0YXR1 cyAhPSBKWExfREVDX0VSUk9SKTsKPiArCj4gKyAgICAgICAgc3RhdHVzID0gSnhsRGVjb2RlclBy b2Nlc3NJbnB1dChjdHgtPmRlY29kZXIpOwo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogSnhs RGVjb2RlclJlbGVhc2VJbnB1dCByZXR1cm5zIHRoZSBudW1iZXIKPiArICAgICAgICAgKiBvZiBi eXRlcyByZW1haW5pbmcgdG8gYmUgcmVhZCwgcmF0aGVyIHRoYW4KPiArICAgICAgICAgKiB0aGUg bnVtYmVyIG9mIGJ5dGVzIHRoYXQgaXQgZGlkIHJlYWQKPiArICAgICAgICAgKi8KPiArICAgICAg ICByZW1haW5pbmcgPSBKeGxEZWNvZGVyUmVsZWFzZUlucHV0KGN0eC0+ZGVjb2Rlcik7Cj4gKyAg ICAgICAgYnVmID0gYXZwa3QtPmRhdGEgKyBhdnBrdC0+c2l6ZSAtIHJlbWFpbmluZzsKPiArCj4g KyAgICAgICAgc3dpdGNoKHN0YXR1cykgewo+ICsgICAgICAgIGNhc2UgSlhMX0RFQ19FUlJPUjoK PiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmtub3duIGxpYmp4 bCBkZWNvZGUgZXJyb3JcbiIpOwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5B TDsKPiArICAgICAgICBjYXNlIEpYTF9ERUNfTkVFRF9NT1JFX0lOUFVUOgo+ICsgICAgICAgICAg ICBpZiAocmVtYWluaW5nID09IDApIHsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX1dBUk5JTkcsICJVbmV4cGVjdGVkIGVuZCBvZiBKWEwgY29kZXN0cmVhbVxuIik7Cj4g KyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFQUdBSU4pOwo+ICsgICAgICAgICAgICB9 Cj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiTkVFRF9NT1JFX0lO UFVUIGV2ZW50IGVtaXR0ZWRcbiIpOwo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAg ICBjYXNlIEpYTF9ERUNfQkFTSUNfSU5GTzoKPiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfREVCVUcsICJCQVNJQ19JTkZPIGV2ZW50IGVtaXR0ZWRcbiIpOwo+ICsgICAgICAgICAg ICBpZiAoSnhsRGVjb2RlckdldEJhc2ljSW5mbyhjdHgtPmRlY29kZXIsICZjdHgtPmJhc2ljX2lu Zm8pICE9IEpYTF9ERUNfU1VDQ0VTUykgewo+ICsgICAgICAgICAgICAgICAgLyoKPiArICAgICAg ICAgICAgICAgICAqIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbgo+ICsgICAgICAgICAgICAgICAg ICogaWYgaXQgZG9lcyBpdCBpcyBsaWtlbHkgYSBsaWJqeGwgZGVjb2RlciBidWcKPiArICAgICAg ICAgICAgICAgICAqLwo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJCYWQgbGlianhsIGJhc2ljIGluZm8gZXZlbnRcbiIpOwo+ICsgICAgICAgICAgICAgICAg cmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAg YXZjdHgtPnBpeF9mbXQgPSBsaWJqeGxfZ2V0X3BpeF9mbXQoYXZjdHgsICZjdHgtPmJhc2ljX2lu Zm8sICZjdHgtPmp4bF9waXhmbXQpOwo+ICsgICAgICAgICAgICBpZiAoYXZjdHgtPnBpeF9mbXQg PT0gQVZfUElYX0ZNVF9OT05FKSB7Cj4gKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkJhZCBsaWJqeGwgcGl4ZWwgZm9ybWF0XG4iKTsKPiArICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAg ICAgIGZmX3N0YXR1cyA9IGZmX3NldF9kaW1lbnNpb25zKGF2Y3R4LCBjdHgtPmJhc2ljX2luZm8u eHNpemUsIGN0eC0+YmFzaWNfaW5mby55c2l6ZSk7Cj4gKyAgICAgICAgICAgIGlmIChmZl9zdGF0 dXMgPCAwKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIGZmX3N0YXR1czsKPiArICAgICAgICAg ICAgLyoKPiArICAgICAgICAgICAgICogV2UgcmV3aW5kIHRoZSBkZWNvZGVyIGFuZCBhc2sgZm9y IGV2ZXJ5dGhpbmcgYWdhaW4KPiArICAgICAgICAgICAgICogVGhpcyBmdXR1cmVwcm9vZnMgdGhl IGRlY29kZXIgc2luY2UgaXQgd2lsbCBtYWtlCj4gKyAgICAgICAgICAgICAqIGFkZGluZyBhIHBh cnNlciBvciBhIGRlZGljYXRlZCBkZW11eGVyIG11Y2ggZWFzaWVyCj4gKyAgICAgICAgICAgICAq Lwo+ICsgICAgICAgICAgICBidWYgPSBhdnBrdC0+ZGF0YTsKPiArICAgICAgICAgICAgcmVtYWlu aW5nID0gYXZwa3QtPnNpemU7Cj4gKyAgICAgICAgICAgIEp4bERlY29kZXJSZXdpbmQoY3R4LT5k ZWNvZGVyKTsKPiArICAgICAgICAgICAgY3R4LT5ldmVudHMgJj0gfkpYTF9ERUNfQkFTSUNfSU5G TzsKPiArICAgICAgICAgICAgaWYgKEp4bERlY29kZXJTdWJzY3JpYmVFdmVudHMoY3R4LT5kZWNv ZGVyLCBjdHgtPmV2ZW50cykgIT0gSlhMX0RFQ19TVUNDRVNTKSB7Cj4gKyAgICAgICAgICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkVycm9yIHN1YnNjcmliaW5nIHRvIEpYTCBl dmVudHMgYWZ0ZXIgcmV3aW5kXG4iKTsKPiArICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9S X0VYVEVSTkFMOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsg ICAgICAgIGNhc2UgSlhMX0RFQ19DT0xPUl9FTkNPRElORzoKPiArICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfREVCVUcsICJDT0xPUl9FTkNPRElORyBldmVudCBlbWl0dGVkXG4iKTsK PiArICAgICAgICAgICAgc3RhdHVzID0gSnhsRGVjb2RlckdldElDQ1Byb2ZpbGVTaXplKGN0eC0+ ZGVjb2RlciwgJmN0eC0+anhsX3BpeGZtdCwgSlhMX0NPTE9SX1BST0ZJTEVfVEFSR0VUX09SSUdJ TkFMLCAmY3R4LT5pY2NwX2xlbik7Cj4gKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gSlhMX0RF Q19TVUNDRVNTICYmIGN0eC0+aWNjcF9sZW4gPiAwKSB7Cj4gKyAgICAgICAgICAgICAgICBpZiAo Y3R4LT5pY2NwKQo+ICsgICAgICAgICAgICAgICAgICAgIGF2X2ZyZWVwKCZjdHgtPmljY3ApOwo+ ICsgICAgICAgICAgICAgICAgY3R4LT5pY2NwID0gYXZfbWFsbG9jKGN0eC0+aWNjcF9sZW4pOwoK VXNlIGF2X2J1ZmZlcl9hbGxvYygpIGhlcmUsIGFzIHRoaXMgd2lsbCBhbGxvdyB0byBhdm9pZCB0 aGUgbWVtY3B5IHdoZW4KYXR0YWNoaW5nIHRoZSBwcm9maWxlIHRvIHRoZSBmcmFtZS4KCj4gKyAg ICAgICAgICAgICAgICBpZiAoIWN0eC0+aWNjcCkKPiArICAgICAgICAgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgICAgICAgICAgc3RhdHVzID0gSnhsRGVjb2Rl ckdldENvbG9yQXNJQ0NQcm9maWxlKGN0eC0+ZGVjb2RlciwgJmN0eC0+anhsX3BpeGZtdCwgSlhM X0NPTE9SX1BST0ZJTEVfVEFSR0VUX09SSUdJTkFMLCBjdHgtPmljY3AsIGN0eC0+aWNjcF9sZW4p Owo+ICsgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBKWExfREVDX1NVQ0NFU1MpCj4gKyAg ICAgICAgICAgICAgICAgICAgYXZfZnJlZXAoJmN0eC0+aWNjcCk7Cj4gKyAgICAgICAgICAgIH0K PiArICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgY2FzZSBKWExfREVDX0ZSQU1FOgo+ ICsgICAgICAgIGNhc2UgSlhMX0RFQ19ORUVEX0lNQUdFX09VVF9CVUZGRVI6Cj4gKyAgICAgICAg ICAgIC8qCj4gKyAgICAgICAgICAgICAqIFdlIGRvbid0IGRvIHRoaXMgYXQgYmFzaWMgaW5mbyB0 aW1lCj4gKyAgICAgICAgICAgICAqIGJlY2F1c2UgaXQgd2lsbCBoYXBwZW4gYWdhaW4gd2hlbiB3 ZQo+ICsgICAgICAgICAgICAgKiByZXdpbmQgYW55d2F5Cj4gKyAgICAgICAgICAgICAqLwo+ICsg ICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIiVzIGV2ZW50IGVtaXR0ZWRc biIsIHN0YXR1cyA9PSBKWExfREVDX0ZSQU1FID8gIkZSQU1FIiA6ICJORUVEX0lNQUdFX09VVF9C VUZGRVIiKTsKPiArICAgICAgICAgICAgZmZfc3RhdHVzID0gZmZfZ2V0X2J1ZmZlcihhdmN0eCwg ZnJhbWUsIDApOwo+ICsgICAgICAgICAgICBpZiAoZmZfc3RhdHVzIDwgMCkKPiArICAgICAgICAg ICAgICAgIHJldHVybiBmZl9zdGF0dXM7Cj4gKyAgICAgICAgICAgIGlmIChKeGxEZWNvZGVyU2V0 SW1hZ2VPdXRDYWxsYmFjayhjdHgtPmRlY29kZXIsICZjdHgtPmp4bF9waXhmbXQsICZsaWJqeGxf cm93X2ZpbGwsIGZyYW1lKSAhPSBKWExfREVDX1NVQ0NFU1MpIHsKPiArICAgICAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQmFkIGxpYmp4bCBkZWMgbmVlZCBpbWFnZSBv dXQgYnVmZmVyIGV2ZW50XG4iKTsKPiArICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VY VEVSTkFMOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAg ICAgIGNhc2UgSlhMX0RFQ19GVUxMX0lNQUdFOgo+ICsgICAgICAgICAgICAvKiBmdWxsIGltYWdl IGlzIG9uZSBmcmFtZSwgZXZlbiBpZiBhbmltYXRlZCAqLwo+ICsgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19ERUJVRywgIkZVTExfSU1BR0UgZXZlbnQgZW1pdHRlZFxuIik7Cj4gKyAg ICAgICAgICAgICpnb3RfZnJhbWUgPSAxOwo+ICsgICAgICAgICAgICBmcmFtZS0+cGljdF90eXBl ID0gQVZfUElDVFVSRV9UWVBFX0k7Cj4gKyAgICAgICAgICAgIGZyYW1lLT5rZXlfZnJhbWUgPSAx Owo+ICsgICAgICAgICAgICBpZiAoY3R4LT5pY2NwKSB7Cj4gKyAgICAgICAgICAgICAgICBBVkZy YW1lU2lkZURhdGEgKnNkID0gYXZfZnJhbWVfbmV3X3NpZGVfZGF0YShmcmFtZSwgQVZfRlJBTUVf REFUQV9JQ0NfUFJPRklMRSwgY3R4LT5pY2NwX2xlbik7Cj4gKyAgICAgICAgICAgICAgICBpZiAo IXNkKQo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKyAg ICAgICAgICAgICAgICBtZW1jcHkoc2QtPmRhdGEsIGN0eC0+aWNjcCwgY3R4LT5pY2NwX2xlbik7 Cj4gKyAgICAgICAgICAgICAgICBhdl9kaWN0X3NldCgmc2QtPm1ldGFkYXRhLCAibmFtZSIsICIi LCAwKTsKClRoZSBuYW1lIGlzIG9wdGlvbmFsOyBzbyBkb24ndCBzZXQgdGhpcy4KCj4gKyAgICAg ICAgICAgIH0KPiArICAgICAgICAgICAgcmV0dXJuIGF2cGt0LT5zaXplIC0gcmVtYWluaW5nOwo+ ICsgICAgICAgIGNhc2UgSlhMX0RFQ19TVUNDRVNTOgo+ICsgICAgICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19ERUJVRywgIlNVQ0NFU1MgZXZlbnQgZW1pdHRlZFxuIik7Cj4gKyAgICAgICAg ICAgIC8qCj4gKyAgICAgICAgICAgICAqIFRoZSBmaWxlIGhhcyBmaW5pc2hlZCBkZWNvZGluZwo+ ICsgICAgICAgICAgICAgKiByZXNldCB0aGUgZGVjb2RlciB0byBsZXQgdXMKPiArICAgICAgICAg ICAgICogcmV1c2UgaXQgYWdhaW4gZm9yIHRoZSBuZXh0IGltYWdlCj4gKyAgICAgICAgICAgICAq Lwo+ICsgICAgICAgICAgICBKeGxEZWNvZGVyUmVzZXQoY3R4LT5kZWNvZGVyKTsKPiArICAgICAg ICAgICAgbGlianhsX2luaXRfanhsX2RlY29kZXIoYXZjdHgpOwo+ICsgICAgICAgICAgICBidWYg PSBhdnBrdC0+ZGF0YTsKPiArICAgICAgICAgICAgcmVtYWluaW5nID0gYXZwa3QtPnNpemU7Cj4g KyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkJhZCBsaWJqeGwgZXZlbnQ6ICVkXG4iLCBz dGF0dXMpOwo+ICsgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICAg ICAgfQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgbGlianhsX2RlY29k ZV9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArICAgIExpYkp4bERlY29kZUNv bnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAgICBpZiAoY3R4LT5ydW5uZXIpCj4g KyAgICAgICAgSnhsVGhyZWFkUGFyYWxsZWxSdW5uZXJEZXN0cm95KGN0eC0+cnVubmVyKTsKPiAr ICAgIGN0eC0+cnVubmVyID0gTlVMTDsKPiArICAgIGlmIChjdHgtPmRlY29kZXIpCj4gKyAgICAg ICAgSnhsRGVjb2RlckRlc3Ryb3koY3R4LT5kZWNvZGVyKTsKPiArICAgIGN0eC0+ZGVjb2RlciA9 IE5VTEw7Cj4gKyAgICBpZiAoY3R4LT5pY2NwKQoKVW5uZWNlc3NhcnkgY2hlY2sKCj4gKyAgICAg ICAgYXZfZnJlZXAoJmN0eC0+aWNjcCk7Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArY29u c3QgRkZDb2RlYyBmZl9saWJqeGxfZGVjb2RlciA9IHsKPiArICAgIC5wLm5hbWUgICAgICAgICAg ID0gImxpYmp4bCIsCj4gKyAgICAucC5sb25nX25hbWUgICAgICA9IE5VTExfSUZfQ09ORklHX1NN QUxMKCJsaWJqeGwgSlBFRyBYTCIpLAo+ICsgICAgLnAudHlwZSAgICAgICAgICAgPSBBVk1FRElB X1RZUEVfVklERU8sCj4gKyAgICAucC5pZCAgICAgICAgICAgICA9IEFWX0NPREVDX0lEX0pQRUdY TCwKPiArICAgIC5wcml2X2RhdGFfc2l6ZSAgID0gc2l6ZW9mKExpYkp4bERlY29kZUNvbnRleHQp LAo+ICsgICAgLmluaXQgICAgICAgICAgICAgPSBsaWJqeGxfZGVjb2RlX2luaXQsCj4gKyAgICAu ZGVjb2RlICAgICAgICAgICA9IGxpYmp4bF9kZWNvZGVfZnJhbWUsCj4gKyAgICAuY2xvc2UgICAg ICAgICAgICA9IGxpYmp4bF9kZWNvZGVfY2xvc2UsCj4gKyAgICAucC5jYXBhYmlsaXRpZXMgICA9 IEFWX0NPREVDX0NBUF9EUjEgfCBBVl9DT0RFQ19DQVBfT1RIRVJfVEhSRUFEUywKPiArICAgIC5j YXBzX2ludGVybmFsICAgID0gRkZfQ09ERUNfQ0FQX0FVVE9fVEhSRUFEUyB8IEZGX0NPREVDX0NB UF9JTklUX0NMRUFOVVAsCj4gKyAgICAucC53cmFwcGVyX25hbWUgICA9ICJsaWJqeGwiLAo+ICt9 OwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVn LWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBl Zy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNp dCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdp dGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=