From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on2089.outbound.protection.outlook.com [40.107.15.89]) by sourceware.org (Postfix) with ESMTPS id 9079D387384C for ; Tue, 13 Dec 2022 15:02:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9079D387384C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WfMfncVSxDklH/DWzH6jmeXcKpqTcygUw3cRVPxXIo4=; b=NY46+Al2phOdz2hsYOnb1vIgg3JInTl+1rgSI4NHZKYlSh0AAetjJfDyDeHbXtaomHK2++Xtb8TYmyibl1dWHg5zUIbTIloTK6SOUJim+BqyunuBeMenAvdq4HueNeP7dK1hwJEGKLgXWhPN3LwO6IzPGfQ3FO+CaHkadaCrE0E= Received: from AS9P251CA0014.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:50f::18) by PAXPR08MB6749.eurprd08.prod.outlook.com (2603:10a6:102:13d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.10; Tue, 13 Dec 2022 15:02:16 +0000 Received: from AM7EUR03FT033.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:50f:cafe::fd) by AS9P251CA0014.outlook.office365.com (2603:10a6:20b:50f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.8 via Frontend Transport; Tue, 13 Dec 2022 15:02:16 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM7EUR03FT033.mail.protection.outlook.com (100.127.140.129) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5901.21 via Frontend Transport; Tue, 13 Dec 2022 15:02:16 +0000 Received: ("Tessian outbound 2ff13c8f2c05:v130"); Tue, 13 Dec 2022 15:02:15 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 2c420c3d211b07c4 X-CR-MTA-TID: 64aa7808 Received: from be2f3d433b4a.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id D98966FD-0A62-4652-BB54-3E8E13A10C86.1; Tue, 13 Dec 2022 15:02:05 +0000 Received: from EUR01-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id be2f3d433b4a.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 13 Dec 2022 15:02:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ePNq+EbYDI9faaJs7QPSwG7COjYBoLr8gLhQsEkB4/ngOhlS8iMzYxQA5msWmMoKSuRyVX+gSMTnYeRbeUq35odrMipBEXrpCy16lSYBs69T/WEUoMzMsIkHfzUqZOElKgUHUdkOlEI5J4iuw5FD5JX4Vb8NivtyZ57JjIe/AvryFyiVM7/VBKZEK7M5N2pTDZe+lS8Wlc5d1GdnI0BT9le0xbzoVpHYYS0gAxv/sTrqDSSe9ulCW8ufou3jxPmsmGrAX6ryPvIdCZCJrnLw3UF+RUr7HjP7D2QENjMJ2gSPFvGckYlw2+I3g8XKq/TT5xn5L9cvhbtsP/j1O5UiHA== 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=WfMfncVSxDklH/DWzH6jmeXcKpqTcygUw3cRVPxXIo4=; b=TZkriNh7bcTSN8pK+mLz8JNrI0CVG3vxEA9BNKeZ2bj5fVL8Q3NKZ/oCb2zJ/+quHBq0EwB2/KZ3uJKWQ0eAE8ImqhRXeUQ6YVH0vu43TSCjYJW/cA4BxG06B07gBMdZAKSilBVAV1e/IyVfkMco1LHPDEXFWR435NbItKt5GdvRp8pufqcNHRU7lloLczc364oN032Dq7CLamnNxaXCN7C3gdqGtMrNFIx407rvPKsC4MA7C9FGX4WwYue//4rBXS3OD0xsuyxD8HnUJAjzEuAOJ+TQ0MdsRxHJzwzWQ2wtJM1qgf6SNw+aHYBSCrPkjYc4BJbrZKNpW8qduD5Utg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WfMfncVSxDklH/DWzH6jmeXcKpqTcygUw3cRVPxXIo4=; b=NY46+Al2phOdz2hsYOnb1vIgg3JInTl+1rgSI4NHZKYlSh0AAetjJfDyDeHbXtaomHK2++Xtb8TYmyibl1dWHg5zUIbTIloTK6SOUJim+BqyunuBeMenAvdq4HueNeP7dK1hwJEGKLgXWhPN3LwO6IzPGfQ3FO+CaHkadaCrE0E= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by AS4PR08MB7654.eurprd08.prod.outlook.com (2603:10a6:20b:4f0::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.9; Tue, 13 Dec 2022 15:02:00 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7%4]) with mapi id 15.20.5924.008; Tue, 13 Dec 2022 15:02:00 +0000 From: Tamar Christina To: Tamar Christina , Richard Biener CC: "gcc-patches@gcc.gnu.org" , nd , Richard Sandiford Subject: RE: [PATCH 1/2]middle-end: Support early break/return auto-vectorization. Thread-Topic: [PATCH 1/2]middle-end: Support early break/return auto-vectorization. Thread-Index: AQHY7snIAwho+tAVIES+mK7MOEeJC65E4G+AgAAFtPCACQNYAIAAD5cQgAGLM4CAAAJL8IAcc/+w Date: Tue, 13 Dec 2022 15:01:59 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ts-tracking-id: BF72BABE911BDE458472B1E8928DD5F7.0 Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|AS4PR08MB7654:EE_|AM7EUR03FT033:EE_|PAXPR08MB6749:EE_ X-MS-Office365-Filtering-Correlation-Id: b60d57b3-7b8b-4aba-d29a-08dadd1b05ff x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: A6aD4YKPtw2eq6TlJh6fC2O+GC3bBr5k7lXE44dJzuQV7P7BsbsR7ihRFZreVwZBiHkg4PsbBFr/WMK4bhrpLVc0rgyCuD/8ziQFMqzVZ+imlu3RucmbHpzZPqYBc25ccq3qg2ZPuD05sAE+q+oxOCsyKpLS+7Bspp9NOjMHpe8a6XAz2b22cavOSKcMJZnxkCq85LEX/IuR/33wfTV0N5ySlJB59sj4dfRQq/24NHEIOqIX8RCnEVry3aRSzmVS/1rT/U1/u5P4OA+q/xmYMoMMdbJijvXUbiP0S0waH5OE248Os0zyILratg40GegOWFEyCgo2qtPuSSTr3hLr+a6ucTVBndBO7wePNGxIQMV89jKA9XlDlKHqxuDMXDMHWXnrtbb8VIRebV4bs3B57Is9ZbbGLt7jb/vZxDTw7Wm8/lJy/REmqgD3khcv/jOD/Ym8NjOILQiIP2rtcODrETZqFWc75vezZg5vWCW1JwJzaaawx7XfjI3gjJa3bKRslnz4lQDUGPZqu/2x8DCQDe1VPqXjSuzGbVZ9dHhbOwmqyc5U2or27s+BuKhkD6XuA7ZhJ8xjtCd9p5y6mXXw5gGEg2VoBrZYtIfzalDpTj5GavfDZfdriVHpGSDUzGhpWfqKhWZAuEZUpoqV9nmNB4hxQtWFN/NNeZ1BdutyAkgZ8aNDC8wndlaoPFc2z46bD3P4/t3m4qRJsHDfLw/pLg== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB5325.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(396003)(376002)(366004)(136003)(346002)(39860400002)(451199015)(33656002)(83380400001)(38100700002)(122000001)(99936003)(66899015)(86362001)(26005)(9686003)(186003)(6506007)(38070700005)(7696005)(41300700001)(30864003)(5660300002)(8936002)(52536014)(4326008)(2906002)(64756008)(8676002)(55016003)(316002)(71200400001)(66446008)(478600001)(110136005)(66476007)(54906003)(76116006)(66946007)(66556008)(559001)(579004);DIR:OUT;SFP:1101; Content-Type: multipart/mixed; boundary="_002_VI1PR08MB5325308942BD4887854E3DEFFFE39VI1PR08MB5325eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR08MB7654 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT033.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 959e2bd5-14e8-4b08-54cb-08dadd1afc64 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MYqHFiKxXQLL2yDYgty9HvoEEOfOwkDBslrFs8AyPf0FTcdIXlhQpgNKp6cLGwyutJaiiLQputMJmCV1/EewRC8f2d13dCHcyOz7K37iYTkykOx+j6bRT1Nx6Y05/u7HO8ASV8gRX+yR1HTK2f+wtAwh9EzvyLG7mmlSFfbgs/IqJJe9g1PEoJyvfo98E99HjpUvg9e1iG5e8J2uN0S4aSQGvPdUnnysN2vo7nUYez2q7hoOLTzB0StsvgrP/FT7ucTFDuA+JK2EbgHoBH1EyxIFHLa9hKtLPecw6OAd70qLRR0tpweXdw08J58fPi4YUCEAe0+nR3N23MVhczqWm5GnATlMfhA0RwXxAk7PiPbv9whRghg3Gjf75qHMU4oKDS9BOvYf5UlOqX1UFcrW3bR5wMElMKc73ZWvCEyjLfBupmrhOJU+hyZ2kaWuKPYWIkREYFdU5agfnyprtgG//tQvLlhSDQeHvhgkdVLntvL0Lnbklav+ss/d4KJcsuhaoq6MrkZkCN6ahcTJq+wNzC5BgyC4XNXhnsrug74SzL+U3oRUAHU9f/6I+AJKjq9NbuFax5TpZw1DV9+qkIbC0ocGNwtJJ7pTgU2/cX7rd523obw2sSTJ9leUECSUD/01N3dcHYTjcdxus1PvKcW9GA7R6/E/HkjFczAzT/MDZnDmkCUfnVakkYyqyegcHPdNKCKb7EEdydJMyH5NJKKcZw== X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230022)(4636009)(136003)(39860400002)(346002)(376002)(396003)(451199015)(36840700001)(40470700004)(46966006)(81166007)(82740400003)(356005)(36860700001)(82310400005)(99936003)(40480700001)(33656002)(6506007)(54906003)(86362001)(110136005)(8936002)(70206006)(316002)(30864003)(40460700003)(55016003)(70586007)(52536014)(235185007)(8676002)(5660300002)(4326008)(2906002)(47076005)(83380400001)(336012)(478600001)(33964004)(26005)(41300700001)(186003)(9686003)(7696005)(66899015)(579004)(559001);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2022 15:02:16.0072 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b60d57b3-7b8b-4aba-d29a-08dadd1b05ff X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM7EUR03FT033.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6749 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --_002_VI1PR08MB5325308942BD4887854E3DEFFFE39VI1PR08MB5325eurp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgUmljaGksDQoNClRoaXMgaXMgYSByZXNwaW4gb2YgdGhlIG1pZC1lbmQgcGF0Y2guICBDaGFu Z2VzIHNpbmNlIHByZXZpb3VzIHZlcnNpb246DQogLSBUaGUgbWlzbWF0Y2ggaW4gQm9vbGVhbiB0 eXBlcyBpcyBub3cgZml4ZWQsIGFuZCBpdCBnZW5lcmF0ZXMgYW4gT1IgcmVkdWN0aW9uIHdoZW4g aXQgbmVlZHMgdG8uDQogLSBJJ3ZlIHJlZmFjdG9yZWQgdGhpbmdzIGFyb3VuZCB0byBiZSBhIGJp dCBuZWF0ZXINCiAtIEkndmUgc3dpdGNoZWQgdG8gdXNpbmcgaXRlcmF0ZV9maXhfZG9taW5hdG9y cyB3aGljaCBoYXMgc2ltcGxpZmllZCB0aGUgbG9vcCBwZWVsaW5nIGNvZGUgYSB0b24uDQogLSBJ J3ZlIG1vdmVkIHRoZSBjb25kaXRpb25hbHMgaW50byB0aGUgbG9vcCBzdHJ1Y3R1cmUgYW5kIHVz ZSB0aGVtIGZyb20gdGhlcmUuDQogLSBJJ3ZlIG1vdmVkIHRoZSBhbmFseXNpcyBwYXJ0IGVhcmx5 IGludG8gdmVjdF9hbmFseXplX2RhdGFfcmVmX2RlcGVuZGVuY2VzDQogLSBJJ3ZlIHN3aXRjaGVk IHRvIG1vdmluZyB0aGUgc2NhbGFyIGNvZGUgaW5zdGVhZCBvZiB0aGUgdmVjdG9yIGNvZGUsIGFz IG1vdmluZyB2ZWN0b3IgcmVxdWlyZWQgdXMgdG8gdHJhY2sgYSBsb3QgbW9yZSBjb21wbGljYXRl ZCB0aGluZ3MgbGlrZSBpbnRlcm5hbCBmdW5jdGlvbnMuICBJdCB3YXMgYWxzbyBhIGxvdCBtb3Jl IHdvcmsgd2hlbiB0aGUgbG9vcCBpcyB1bnJvbGxlZCBvciBWRiBpcyBpbmNyZWFzZWQgZHVlIHRv IHVucGFja2luZy4gIEkgaGF2ZSB2ZXJpZmllZCBhcyBtdWNoIGFzIEkgY2FuIHRoYXQgd2UgZG9u J3Qgc2VlbSB0byBydW4gaW50byB0cm91YmxlIGRvaW5nIHRoaXMuDQoNCk91dHN0YW5kaW5nIHRo aW5nczoNCiAgLSBTcGxpdCBvZmYgdGhlIFNDRVYgcGFydHMgZnJvbSB0aGUgcmVzdCBvZiB0aGUg cGF0Y2ggKGFuZCBkZXRlcm1pbmUgdGhlICJub3JtYWwiIGV4aXQgYmFzZWQgb24gdGhlIGNvdW50 aW5nIElWIGluc3RlYWQpDQogIC0gTWVyZ2UgdmVjdG9yaXphYmxlX2Vhcmx5X2V4aXQgYW5kIHRy YW5zZm9ybV9lYXJseV9leGl0DQoNCkknbSBzZW5kaW5nIHRoaXMgcGF0Y2ggb3V0IGZvciB5b3Ug dG8gdGFrZSBhIGxvb2sgYXQgdGhlIGlzc3VlIHdlIHdlcmUgZGlzY3Vzc2luZyB0aGUgaXNzdWUg b24gSVJDICh3aGljaCB5b3UgY2FuIHJlcHJvZHVjZSB3aXRoIHRlc3RjYXNlIGdjYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWtfMTYuYykNCg0KVGhhdCBzaG91bGQgYmUgdGhlIGxhc3Qgb3V0c3Rh bmRpbmcgaXNzdWUuICAgTWVhbndoaWxlIEknbGwgZmluaXNoIHVwIHRoZSBzcGxpdHRpbmcgb2Yg U0NFViBhbmQgbWVyZ2luZyB0aGUgdHdvIGZ1bmN0aW9ucy4gDQoNCkFueSBhZGRpdGlvbmFsIGNv bW1lbnRzIGlzIGFwcHJlY2lhdGVkLiBXaWxsIGhvcGVmdWxseSBmaW5pc2ggdGhlIHJlZmFjdG9y aW5nIHRvZGF5IGFuZCBzZW5kIG91dCB0aGUgc3BsaXQgcGF0Y2ggdG9tb3Jyb3cuDQoNClRoYW5r cywNClRhbWFyDQoNCi0tLSBpbmxpbmUgY29weSBvZiBwYXRjaCAtLS0NCg0KZGlmZiAtLWdpdCBh L2djYy9jZmdsb29wLmggYi9nY2MvY2ZnbG9vcC5oDQppbmRleCA1MjhiMTIxOWJjMzdhZDhmMTE0 ZDVjZjM4MWMwY2ZmODk5ZGIzMWVlLi45YzdmMDE5YTUxYWJmZTJkZThlMWRkNzEzNWRlYTI0NjNi MDI1NmEwIDEwMDY0NA0KLS0tIGEvZ2NjL2NmZ2xvb3AuaA0KKysrIGIvZ2NjL2NmZ2xvb3AuaA0K QEAgLTM4NSw2ICszODUsNyBAQCBleHRlcm4gYmFzaWNfYmxvY2sgKmdldF9sb29wX2JvZHlfaW5f Y3VzdG9tX29yZGVyIChjb25zdCBjbGFzcyBsb29wICosIHZvaWQgKiwNCiANCiBleHRlcm4gYXV0 b192ZWM8ZWRnZT4gZ2V0X2xvb3BfZXhpdF9lZGdlcyAoY29uc3QgY2xhc3MgbG9vcCAqLCBiYXNp Y19ibG9jayAqID0gTlVMTCk7DQogZXh0ZXJuIGVkZ2Ugc2luZ2xlX2V4aXQgKGNvbnN0IGNsYXNz IGxvb3AgKik7DQorZXh0ZXJuIGVkZ2Ugbm9ybWFsX2V4aXQgKGNvbnN0IGNsYXNzIGxvb3AgKik7 DQogZXh0ZXJuIGVkZ2Ugc2luZ2xlX2xpa2VseV9leGl0IChjbGFzcyBsb29wICpsb29wLCBjb25z dCB2ZWM8ZWRnZT4gJik7DQogZXh0ZXJuIHVuc2lnbmVkIG51bV9sb29wX2JyYW5jaGVzIChjb25z dCBjbGFzcyBsb29wICopOw0KIA0KZGlmZiAtLWdpdCBhL2djYy9jZmdsb29wLmNjIGIvZ2NjL2Nm Z2xvb3AuY2MNCmluZGV4IDU3YmY3YjE4NTVkNGRkMjBmYjNmNDIzODgxMjQ5MzJkMGNhMmI0OGEu Ljk3YTczNzNmYjZkOTUxNGRhNjAyZDViZTAxMDUwZjJlYzY2MDk0YmMgMTAwNjQ0DQotLS0gYS9n Y2MvY2ZnbG9vcC5jYw0KKysrIGIvZ2NjL2NmZ2xvb3AuY2MNCkBAIC0xODEyLDYgKzE4MTIsMjAg QEAgc2luZ2xlX2V4aXQgKGNvbnN0IGNsYXNzIGxvb3AgKmxvb3ApDQogICAgIHJldHVybiBOVUxM Ow0KIH0NCiANCisvKiBSZXR1cm5zIHRoZSBub3JtYWwgZXhpdCBlZGdlIG9mIExPT1AsIG9yIE5V TEwgaWYgTE9PUCBoYXMgZWl0aGVyIG5vIGV4aXQuDQorICAgSWYgbG9vcHMgZG8gbm90IGhhdmUg dGhlIGV4aXRzIHJlY29yZGVkLCBOVUxMIGlzIHJldHVybmVkIGFsd2F5cy4gICovDQorDQorZWRn ZQ0KK25vcm1hbF9leGl0IChjb25zdCBjbGFzcyBsb29wICpsb29wKQ0KK3sNCisgIHN0cnVjdCBs b29wX2V4aXQgKmV4aXQgPSBsb29wLT5leGl0cy0+bmV4dDsNCisNCisgIGlmICghbG9vcHNfc3Rh dGVfc2F0aXNmaWVzX3AgKExPT1BTX0hBVkVfUkVDT1JERURfRVhJVFMpKQ0KKyAgICByZXR1cm4g TlVMTDsNCisNCisgIHJldHVybiBleGl0LT5lOw0KK30NCisNCiAvKiBSZXR1cm5zIHRydWUgd2hl biBCQiBoYXMgYW4gaW5jb21pbmcgZWRnZSBleGl0aW5nIExPT1AuICAqLw0KIA0KIGJvb2wNCmRp ZmYgLS1naXQgYS9nY2MvZG9jL2xvb3AudGV4aSBiL2djYy9kb2MvbG9vcC50ZXhpDQppbmRleCA2 ZTg2NTdhMDc0ZDI0NDdkYjdhZTliNzVjYmZiYjcxMjgyYjg0Mjg3Li5lMWRlMmFjNDBmODdmODc5 YWI2OTFmNjhiZDQxYjNiYzIxYTgzYmY3IDEwMDY0NA0KLS0tIGEvZ2NjL2RvYy9sb29wLnRleGkN CisrKyBiL2djYy9kb2MvbG9vcC50ZXhpDQpAQCAtMjExLDYgKzIxMSwxMCBAQCByZWxhdGlvbiwg YW5kIGJyZWF0aC1maXJzdCBzZWFyY2ggb3JkZXIsIHJlc3BlY3RpdmVseS4NCiBAaXRlbSBAY29k ZXtzaW5nbGVfZXhpdH06IFJldHVybnMgdGhlIHNpbmdsZSBleGl0IGVkZ2Ugb2YgdGhlIGxvb3As IG9yDQogQGNvZGV7TlVMTH0gaWYgdGhlIGxvb3AgaGFzIG1vcmUgdGhhbiBvbmUgZXhpdC4gIFlv dSBjYW4gb25seSB1c2UgdGhpcw0KIGZ1bmN0aW9uIGlmIEBjb2Rle0xPT1BTX0hBVkVfUkVDT1JE RURfRVhJVFN9IGlzIHVzZWQuDQorZnVuY3Rpb24gaWYgTE9PUFNfSEFWRV9NQVJLRURfU0lOR0xF X0VYSVRTIHByb3BlcnR5IGlzIHVzZWQuDQorQGl0ZW0gQGNvZGV7bm9ybWFsX2V4aXR9OiBSZXR1 cm5zIHRoZSBuYXR1cmFsIGV4aXQgZWRnZSBvZiB0aGUgbG9vcCwNCitldmVuIGlmIHRoZSBsb29w IGhhcyBtb3JlIHRoYW4gb25lIGV4aXQuICBUaGUgbmF0dXJhbCBleGl0IGlzIHRoZSBleGl0DQor dGhhdCB3b3VsZCBub3JtYWxseSBiZSB0YWtlbiB3aGVyZSB0aGUgbG9vcCB0byBiZSBmdWxseSBl eGVjdXRlZC4NCiBAaXRlbSBAY29kZXtnZXRfbG9vcF9leGl0X2VkZ2VzfTogRW51bWVyYXRlcyB0 aGUgZXhpdCBlZGdlcyBvZiBhIGxvb3AuDQogQGl0ZW0gQGNvZGV7anVzdF9vbmNlX2VhY2hfaXRl cmF0aW9uX3B9OiBSZXR1cm5zIHRydWUgaWYgdGhlIGJhc2ljIGJsb2NrDQogaXMgZXhlY3V0ZWQg ZXhhY3RseSBvbmNlIGR1cmluZyBlYWNoIGl0ZXJhdGlvbiBvZiBhIGxvb3AgKHRoYXQgaXMsIGl0 DQpAQCAtNjIzLDQgKzYyNyw0IEBAIG1heGltdW0gdmVyYm9zaXR5IHRoZSBkZXRhaWxzIG9mIGEg ZGF0YSBkZXBlbmRlbmNlIHJlbGF0aW9ucyBhcnJheSwNCiBAY29kZXtkdW1wX2Rpc3RfZGlyX3Zl Y3RvcnN9IHByaW50cyBvbmx5IHRoZSBjbGFzc2ljYWwgZGlzdGFuY2UgYW5kDQogZGlyZWN0aW9u IHZlY3RvcnMgZm9yIGEgZGF0YSBkZXBlbmRlbmNlIHJlbGF0aW9ucyBhcnJheSwgYW5kDQogQGNv ZGV7ZHVtcF9kYXRhX3JlZmVyZW5jZXN9IHByaW50cyB0aGUgZGV0YWlscyBvZiB0aGUgZGF0YSBy ZWZlcmVuY2VzDQotY29udGFpbmVkIGluIGEgZGF0YSByZWZlcmVuY2UgYXJyYXkuDQorY29udGFp bmVkIGluIGEgZGF0YSByZWZlcmVuY2UgYXJyYXkNCmRpZmYgLS1naXQgYS9nY2MvZG9jL3NvdXJj ZWJ1aWxkLnRleGkgYi9nY2MvZG9jL3NvdXJjZWJ1aWxkLnRleGkNCmluZGV4IGZmZTY5ZDZmY2I5 YzQ2Y2Y5N2JhNTcwZTg1YjU2ZTU4NmEwYzliOTkuLmE4MmM3YjhmMWVmYTAxYjAyYjc3MmM5ZGQw ZjViM2RjZGU4MTcwOTEgMTAwNjQ0DQotLS0gYS9nY2MvZG9jL3NvdXJjZWJ1aWxkLnRleGkNCisr KyBiL2djYy9kb2Mvc291cmNlYnVpbGQudGV4aQ0KQEAgLTE2MzcsNiArMTYzNywxMCBAQCBUYXJn ZXQgc3VwcG9ydHMgaGFyZHdhcmUgdmVjdG9ycyBvZiBAY29kZXtmbG9hdH0gd2hlbg0KIEBvcHRp b257LWZ1bnNhZmUtbWF0aC1vcHRpbWl6YXRpb25zfSBpcyBub3QgaW4gZWZmZWN0Lg0KIFRoaXMg aW1wbGllcyBAY29kZXt2ZWN0X2Zsb2F0fS4NCiANCitAaXRlbSB2ZWN0X2Vhcmx5X2JyZWFrDQor VGFyZ2V0IHN1cHBvcnRzIGhhcmR3YXJlIHZlY3Rvcml6YXRpb24gb2YgbG9vcHMgd2l0aCBlYXJs eSBicmVha3MuDQorVGhpcyByZXF1aXJlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY2JyYW5j aCBvcHRhYiBmb3IgdmVjdG9ycy4NCisNCiBAaXRlbSB2ZWN0X2ludA0KIFRhcmdldCBzdXBwb3J0 cyBoYXJkd2FyZSB2ZWN0b3JzIG9mIEBjb2Rle2ludH0uDQogDQpkaWZmIC0tZ2l0IGEvZ2NjL2dl bmVtaXQuY2MgYi9nY2MvZ2VuZW1pdC5jYw0KaW5kZXggOTA5YWM4OWExNmJmOWM3ODMwYjE3MTBm MTc0ZTE5Y2JjNGE4MmE1MS4uY2Y3MmE5MTU0MjQzZDI4MmJjMTA2NzRjM2M4Mzc3M2I3Njg0ODg0 MCAxMDA2NDQNCi0tLSBhL2djYy9nZW5lbWl0LmNjDQorKysgYi9nY2MvZ2VuZW1pdC5jYw0KQEAg LTkwNSw2ICs5MDUsNyBAQCBmcm9tIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uIGZpbGUgYG1kJy4g ICovXG5cbiIpOw0KICAgcHJpbnRmICgiI2luY2x1ZGUgXCJ0bS1jb25zdHJzLmhcIlxuIik7DQog ICBwcmludGYgKCIjaW5jbHVkZSBcImdnYy5oXCJcbiIpOw0KICAgcHJpbnRmICgiI2luY2x1ZGUg XCJ0YXJnZXQuaFwiXG5cbiIpOw0KKyAgcHJpbnRmICgiI2luY2x1ZGUgXCJydHgtdmVjdG9yLWJ1 aWxkZXIuaFwiXG5cbiIpOw0KIA0KICAgLyogUmVhZCB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbi4g ICovDQogDQpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsZS5oIGIvZ2NjL2dpbXBsZS5oDQppbmRleCBh ZGJlYjA2MzE4NmQ0YThlMDA5ZTRkZDE4NGQ3MzYwOWQyYzVkNzhjLi5hNjhiMjlhOTEzNjAyNmU1 YjRkN2RjZDI3ZTczNTJkYzA3YTE3YjUyIDEwMDY0NA0KLS0tIGEvZ2NjL2dpbXBsZS5oDQorKysg Yi9nY2MvZ2ltcGxlLmgNCkBAIC00NzU2LDYgKzQ3NTYsMzAgQEAgZ2ltcGxlX3BoaV9hcmdfaGFz X2xvY2F0aW9uIChjb25zdCBncGhpICpwaGksIHNpemVfdCBpKQ0KICAgcmV0dXJuIGdpbXBsZV9w aGlfYXJnX2xvY2F0aW9uIChwaGksIGkpICE9IFVOS05PV05fTE9DQVRJT047DQogfQ0KIA0KKw0K Ky8qIENoZWNrIGlmIHRoZSBnaW1wbGUgUEhJIG9yIGFueSBhcmd1bWVudHMgdG8gdGhlIHBoaSBo YXMgYSBWREVGLiAgKi8NCitzdGF0aWMgaW5saW5lIGJvb2wNCitnaW1wbGVfcGhpX2hhc192ZGVm IChjb25zdCBncGhpICpwaGkpDQorew0KKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdpbXBs ZV9waGlfbnVtX2FyZ3MgKHBoaSk7IGkrKykNCisgICAgew0KKyAgICAgIHRyZWUgYXJnID0gZ2lt cGxlX3BoaV9hcmdfZGVmIChwaGksIGkpOw0KKyAgICAgIGlmIChUUkVFX0NPREUgKGFyZykgIT0g U1NBX05BTUUpDQorCWNvbnRpbnVlOw0KKw0KKyAgICAgIGdpbXBsZSAqZGVmID0gU1NBX05BTUVf REVGX1NUTVQgKGFyZyk7DQorICAgICAgaWYgKGdpbXBsZV92ZGVmIChkZWYpKQ0KKwlyZXR1cm4g dHJ1ZTsNCisgICAgICBpZiAoYXV0byBwaGkgPSBkeW5fY2FzdDxjb25zdCBncGhpICo+IChkZWYp KQ0KKwl7DQorCSAgaWYgKGdpbXBsZV9waGlfaGFzX3ZkZWYgKHBoaSkpDQorCSAgICByZXR1cm4g dHJ1ZTsNCisJfQ0KKyAgICB9DQorICByZXR1cm4gZmFsc2U7DQorfQ0KKw0KKw0KIC8qIFJldHVy biB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBieSBnaW1wbGVf YXJnLiAgKi8NCiANCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkDQpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEuY2MgYi9nY2MvdGVzdHN1aXRl L2crKy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMS5jYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhODM2NDhj YTM2ZTJjOGZlZWI3ODMzNWZjY2YzZjNiODJhOTdkMmUNCi0tLSAvZGV2L251bGwNCisrKyBiL2dj Yy90ZXN0c3VpdGUvZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xLmNjDQpAQCAtMCwwICsx LDYxIEBADQorLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0 aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0 aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQorDQorLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMg Ii13IC1PMiIgfSAqLw0KKw0KK3ZvaWQgZmFuY3lfYWJvcnQoY2hhciAqLCBpbnQsIGNvbnN0IGNo YXIgKikgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7DQordGVtcGxhdGUgPHVuc2lnbmVk IE4sIHR5cGVuYW1lPiBzdHJ1Y3QgcG9seV9pbnRfcG9kIHsgaW50IGNvZWZmc1tOXTsgfTsNCit0 ZW1wbGF0ZSA8dW5zaWduZWQgTiwgdHlwZW5hbWU+IGNsYXNzIHBvbHlfaW50IDogcHVibGljIHBv bHlfaW50X3BvZDxOLCBpbnQ+IHsNCitwdWJsaWM6DQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2E+ IHBvbHlfaW50ICZvcGVyYXRvcis9KGNvbnN0IHBvbHlfaW50X3BvZDxOLCBDYT4gJik7DQorfTsN Cit0ZW1wbGF0ZSA8dW5zaWduZWQgTiwgdHlwZW5hbWUgQz4NCit0ZW1wbGF0ZSA8dHlwZW5hbWUg Q2E+DQorcG9seV9pbnQ8TiwgQz4gJnBvbHlfaW50PE4sIEM+OjpvcGVyYXRvcis9KGNvbnN0IHBv bHlfaW50X3BvZDxOLCBDYT4gJmEpIHsNCisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0K KyAgICB0aGlzLT5jb2VmZnNbaV0gKz0gYS5jb2VmZnNbaV07DQorICByZXR1cm4gKnRoaXM7DQor fQ0KK3RlbXBsYXRlIDx1bnNpZ25lZCBOLCB0eXBlbmFtZSBDYSwgdHlwZW5hbWUgQ2I+DQorcG9s eV9pbnQ8TiwgbG9uZz4gZXhhY3RfZGl2KHBvbHlfaW50X3BvZDxOLCBDYT4sIENiKSB7DQorICBw b2x5X2ludDxOLCBsb25nPiByOw0KKyAgcmV0dXJuIHI7DQorfQ0KK3N0cnVjdCB2ZWNfcHJlZml4 IHsNCisgIHVuc2lnbmVkIG1fbnVtOw0KK307DQorc3RydWN0IHZsX3B0cjsNCitzdHJ1Y3QgdmFf aGVhcCB7DQorICB0eXBlZGVmIHZsX3B0ciBkZWZhdWx0X2xheW91dDsNCit9Ow0KK3RlbXBsYXRl IDx0eXBlbmFtZSwgdHlwZW5hbWUgQSwgdHlwZW5hbWUgPSB0eXBlbmFtZSBBOjpkZWZhdWx0X2xh eW91dD4NCitzdHJ1Y3QgdmVjOw0KK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPiBz dHJ1Y3QgdmVjPFQsIEEsIGludD4gew0KKyAgVCAmb3BlcmF0b3JbXSh1bnNpZ25lZCk7DQorICB2 ZWNfcHJlZml4IG1fdmVjcGZ4Ow0KKyAgVCBtX3ZlY2RhdGFbXTsNCit9Ow0KK3RlbXBsYXRlIDx0 eXBlbmFtZSBULCB0eXBlbmFtZSBBPiBUICZ2ZWM8VCwgQSwgaW50Pjo6b3BlcmF0b3JbXSh1bnNp Z25lZCBpeCkgew0KKyAgbV92ZWNwZngubV9udW0gPyBmYW5jeV9hYm9ydCgiIiwgOSwgX19GVU5D VElPTl9fKSwgMCA6IDA7DQorICByZXR1cm4gbV92ZWNkYXRhW2l4XTsNCit9DQordGVtcGxhdGUg PHR5cGVuYW1lIFQ+IHN0cnVjdCB2ZWM8VCwgdmFfaGVhcD4gew0KKyAgVCAmb3BlcmF0b3JbXSh1 bnNpZ25lZCBpeCkgeyByZXR1cm4gbV92ZWNbaXhdOyB9DQorICB2ZWM8VCwgdmFfaGVhcCwgaW50 PiBtX3ZlYzsNCit9Ow0KK2NsYXNzIGF1dG9fdmVjIDogcHVibGljIHZlYzxwb2x5X2ludDwyLCBs b25nPiwgdmFfaGVhcD4ge307DQordGVtcGxhdGUgPHR5cGVuYW1lPiBjbGFzcyB2ZWN0b3JfYnVp bGRlciA6IHB1YmxpYyBhdXRvX3ZlYyB7fTsNCitjbGFzcyBpbnRfdmVjdG9yX2J1aWxkZXIgOiBw dWJsaWMgdmVjdG9yX2J1aWxkZXI8aW50PiB7DQorcHVibGljOg0KKyAgaW50X3ZlY3Rvcl9idWls ZGVyKHBvbHlfaW50PDIsIGxvbmc+LCBpbnQsIGludCk7DQorfTsNCitib29sIHZlY3RfZ3JvdXBl ZF9zdG9yZV9zdXBwb3J0ZWQoKSB7DQorICBpbnQgaTsNCisgIHBvbHlfaW50PDIsIGxvbmc+IG5l bHQ7DQorICBpbnRfdmVjdG9yX2J1aWxkZXIgc2VsKG5lbHQsIDIsIDMpOw0KKyAgZm9yIChpID0g MDsgaSA8IDY7IGkrKykNCisgICAgc2VsW2ldICs9IGV4YWN0X2RpdihuZWx0LCAyKTsNCit9DQor DQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0 IiB9IH0gKi8NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy92ZWN0L3ZlY3QtZWFy bHktYnJlYWtfMi5jYyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVh a18yLmNjDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uNmE4MzY0OGNhMzZlMmM4ZmVlYjc4MzM1ZmNjZjNmM2I4MmE5 N2QyZQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdmVjdC92ZWN0 LWVhcmx5LWJyZWFrXzIuY2MNCkBAIC0wLDAgKzEsNjEgQEANCisvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsg fSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCisN CisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLXcgLU8yIiB9ICovDQorDQordm9pZCBmYW5j eV9hYm9ydChjaGFyICosIGludCwgY29uc3QgY2hhciAqKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0 dXJuX18pKTsNCit0ZW1wbGF0ZSA8dW5zaWduZWQgTiwgdHlwZW5hbWU+IHN0cnVjdCBwb2x5X2lu dF9wb2QgeyBpbnQgY29lZmZzW05dOyB9Ow0KK3RlbXBsYXRlIDx1bnNpZ25lZCBOLCB0eXBlbmFt ZT4gY2xhc3MgcG9seV9pbnQgOiBwdWJsaWMgcG9seV9pbnRfcG9kPE4sIGludD4gew0KK3B1Ymxp YzoNCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBDYT4gcG9seV9pbnQgJm9wZXJhdG9yKz0oY29uc3Qg cG9seV9pbnRfcG9kPE4sIENhPiAmKTsNCit9Ow0KK3RlbXBsYXRlIDx1bnNpZ25lZCBOLCB0eXBl bmFtZSBDPg0KK3RlbXBsYXRlIDx0eXBlbmFtZSBDYT4NCitwb2x5X2ludDxOLCBDPiAmcG9seV9p bnQ8TiwgQz46Om9wZXJhdG9yKz0oY29uc3QgcG9seV9pbnRfcG9kPE4sIENhPiAmYSkgew0KKyAg Zm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQorICAgIHRoaXMtPmNvZWZmc1tpXSArPSBhLmNv ZWZmc1tpXTsNCisgIHJldHVybiAqdGhpczsNCit9DQordGVtcGxhdGUgPHVuc2lnbmVkIE4sIHR5 cGVuYW1lIENhLCB0eXBlbmFtZSBDYj4NCitwb2x5X2ludDxOLCBsb25nPiBleGFjdF9kaXYocG9s eV9pbnRfcG9kPE4sIENhPiwgQ2IpIHsNCisgIHBvbHlfaW50PE4sIGxvbmc+IHI7DQorICByZXR1 cm4gcjsNCit9DQorc3RydWN0IHZlY19wcmVmaXggew0KKyAgdW5zaWduZWQgbV9udW07DQorfTsN CitzdHJ1Y3QgdmxfcHRyOw0KK3N0cnVjdCB2YV9oZWFwIHsNCisgIHR5cGVkZWYgdmxfcHRyIGRl ZmF1bHRfbGF5b3V0Ow0KK307DQordGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSBBLCB0eXBl bmFtZSA9IHR5cGVuYW1lIEE6OmRlZmF1bHRfbGF5b3V0Pg0KK3N0cnVjdCB2ZWM7DQordGVtcGxh dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+IHN0cnVjdCB2ZWM8VCwgQSwgaW50PiB7DQorICBU ICZvcGVyYXRvcltdKHVuc2lnbmVkKTsNCisgIHZlY19wcmVmaXggbV92ZWNwZng7DQorICBUIG1f dmVjZGF0YVtdOw0KK307DQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+IFQgJnZl YzxULCBBLCBpbnQ+OjpvcGVyYXRvcltdKHVuc2lnbmVkIGl4KSB7DQorICBtX3ZlY3BmeC5tX251 bSA/IGZhbmN5X2Fib3J0KCIiLCA5LCBfX0ZVTkNUSU9OX18pLCAwIDogMDsNCisgIHJldHVybiBt X3ZlY2RhdGFbaXhdOw0KK30NCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IHZlYzxULCB2 YV9oZWFwPiB7DQorICBUICZvcGVyYXRvcltdKHVuc2lnbmVkIGl4KSB7IHJldHVybiBtX3ZlY1tp eF07IH0NCisgIHZlYzxULCB2YV9oZWFwLCBpbnQ+IG1fdmVjOw0KK307DQorY2xhc3MgYXV0b192 ZWMgOiBwdWJsaWMgdmVjPHBvbHlfaW50PDIsIGxvbmc+LCB2YV9oZWFwPiB7fTsNCit0ZW1wbGF0 ZSA8dHlwZW5hbWU+IGNsYXNzIHZlY3Rvcl9idWlsZGVyIDogcHVibGljIGF1dG9fdmVjIHt9Ow0K K2NsYXNzIGludF92ZWN0b3JfYnVpbGRlciA6IHB1YmxpYyB2ZWN0b3JfYnVpbGRlcjxpbnQ+IHsN CitwdWJsaWM6DQorICBpbnRfdmVjdG9yX2J1aWxkZXIocG9seV9pbnQ8MiwgbG9uZz4sIGludCwg aW50KTsNCit9Ow0KK2Jvb2wgdmVjdF9ncm91cGVkX3N0b3JlX3N1cHBvcnRlZCgpIHsNCisgIGlu dCBpOw0KKyAgcG9seV9pbnQ8MiwgbG9uZz4gbmVsdDsNCisgIGludF92ZWN0b3JfYnVpbGRlciBz ZWwobmVsdCwgMiwgMyk7DQorICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQ0KKyAgICBzZWxbaV0g Kz0gZXhhY3RfZGl2KG5lbHQsIDIpOw0KK30NCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18zLmNjIGIvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzMuY2MNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTJlNWNh NDM0YjJhYzM3YzAzZGJhYTEyMjczZmQ4ZTVhYTIwMThjDQotLS0gL2Rldi9udWxsDQorKysgYi9n Y2MvdGVzdHN1aXRlL2crKy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMy5jYw0KQEAgLTAsMCAr MSwxNiBAQA0KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KKw0KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25z ICItdyAtTzIiIH0gKi8NCisNCitpbnQgYWFyY2g2NF9hZHZzaW1kX3ZhbGlkX2ltbWVkaWF0ZV9o c192YWwzMjsNCitib29sIGFhcmNoNjRfYWR2c2ltZF92YWxpZF9pbW1lZGlhdGVfaHMoKSB7DQor ICBmb3IgKGludCBzaGlmdCA9IDA7IHNoaWZ0IDwgMzI7IHNoaWZ0ICs9IDgpDQorICAgIGlmIChh YXJjaDY0X2FkdnNpbWRfdmFsaWRfaW1tZWRpYXRlX2hzX3ZhbDMyICYgc2hpZnQpDQorICAgICAg cmV0dXJuIGFhcmNoNjRfYWR2c2ltZF92YWxpZF9pbW1lZGlhdGVfaHNfdmFsMzI7DQorICBmb3Ig KDs7KQ0KKyAgICA7DQorfQ0KKw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9P UCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzEuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0OTViMzZhNzJl YWU5NGNiN2FiYzRhMGQxN2E1Yzk3OWZkNzgwODMNCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fMS5jDQpAQCAtMCwwICsx LDExIEBADQorLyogeyBkZy1kbyBydW4gfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IHZlY3RfaW50IH0gKi8NCisNCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9m YXN0IC1zYXZlLXRlbXBzIiB9ICovDQorDQorI2RlZmluZSBOIDgwMw0KKyNkZWZpbmUgUCAwDQor I2luY2x1ZGUgInZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jIg0KKw0KKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8x MC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8xMC5j DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uOWJjZDdmN2U1N2VmOWExZDQ2NDlkMTg1NjliMzQwNjA1MGU1NDYwMw0K LS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5 LWJyZWFrLXJ1bl8xMC5jDQpAQCAtMCwwICsxLDExIEBADQorLyogeyBkZy1kbyBydW4gfSAqLw0K Ky8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0K Ky8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCisNCisvKiB7 IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IC1zYXZlLXRlbXBzIiB9ICovDQorDQorI2Rl ZmluZSBOIDgwMA0KKyNkZWZpbmUgUCA3OTkNCisjaW5jbHVkZSAidmVjdC1lYXJseS1icmVhay10 ZW1wbGF0ZV8yLmMiDQorDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZF Q1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1lYXJseS1icmVhay1ydW5fMi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNmNjMxMDFhNDY3OTA5 ZjMyOGJlN2YzYWNiYzViY2I3MjE5NjdmZg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8yLmMNCkBAIC0wLDAgKzEsMTEg QEANCisvKiB7IGRnLWRvIHJ1biB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9pbnQgfSAqLw0KKw0KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3Qg LXNhdmUtdGVtcHMiIH0gKi8NCisNCisjZGVmaW5lIE4gODAzDQorI2RlZmluZSBQIDgwMg0KKyNp bmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzEuYyINCisNCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fMy5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8zLmMNCm5l dyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi42MjZiOTVlOWI4NTE3MDgxZDQxZDc5NGU5ZTAyNjRkNjMwMWM4NTg5DQotLS0g L2Rldi9udWxsDQorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJl YWstcnVuXzMuYw0KQEAgLTAsMCArMSwxMSBAQA0KKy8qIHsgZGctZG8gcnVuIH0gKi8NCisvKiB7 IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCisvKiB7 IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQorDQorLyogeyBkZy1h ZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCAtc2F2ZS10ZW1wcyIgfSAqLw0KKw0KKyNkZWZpbmUg TiA4MDMNCisjZGVmaW5lIFAgNQ0KKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRl XzEuYyINCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpF RCIgInZlY3QiIH0gfSAqLw0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qv dmVjdC1lYXJseS1icmVhay1ydW5fNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LWVhcmx5LWJyZWFrLXJ1bl80LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTBlNjQyNjEyMDU1MTE1MmE3YmQ4 MDBjMTVkOWVkNmFiMTViYWRhDQotLS0gL2Rldi9udWxsDQorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzQuYw0KQEAgLTAsMCArMSwxMSBAQA0KKy8q IHsgZGctZG8gcnVuIH0gKi8NCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0 X2Vhcmx5X2JyZWFrIH0gKi8NCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0 X2ludCB9ICovDQorDQorLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCAtc2F2ZS10 ZW1wcyIgfSAqLw0KKw0KKyNkZWZpbmUgTiA4MDMNCisjZGVmaW5lIFAgMjc4DQorI2luY2x1ZGUg InZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jIg0KKw0KKy8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl81LmMgYi9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzUuYw0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLjI0MmNmNDg2ZjljNDAwNTVkZjBhZWY1ZmQyMzhkMWFmZjdhN2M3ZGENCi0tLSAvZGV2L251 bGwNCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5f NS5jDQpAQCAtMCwwICsxLDExIEBADQorLyogeyBkZy1kbyBydW4gfSAqLw0KKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCisNCisvKiB7IGRnLWFkZGl0aW9u YWwtb3B0aW9ucyAiLU9mYXN0IC1zYXZlLXRlbXBzIiB9ICovDQorDQorI2RlZmluZSBOIDgwMA0K KyNkZWZpbmUgUCA3OTkNCisjaW5jbHVkZSAidmVjdC1lYXJseS1icmVhay10ZW1wbGF0ZV8xLmMi DQorDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2 ZWN0IiB9IH0gKi8NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qt ZWFybHktYnJlYWstcnVuXzYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVhay1ydW5fNi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWZlNzEzNmI3MjEzYTQ2M2NhNjU3M2M2MDQ3 NmI3YzhmNTMxZGRjYg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl82LmMNCkBAIC0wLDAgKzEsMTEgQEANCisvKiB7IGRn LWRvIHJ1biB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJs eV9icmVhayB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQg fSAqLw0KKw0KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QgLXNhdmUtdGVtcHMi IH0gKi8NCisNCisjZGVmaW5lIE4gODAzDQorI2RlZmluZSBQIDANCisjaW5jbHVkZSAidmVjdC1l YXJseS1icmVhay10ZW1wbGF0ZV8yLmMiDQorDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzcuYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNy5jDQpuZXcgZmlsZSBtb2RlIDEw MDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDJm OTNkNzdkYmEzMWI5MzhmNmZkOWU4YzdmNWU0YWNkZTRhZWVjOQ0KLS0tIC9kZXYvbnVsbA0KKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl83LmMNCkBA IC0wLDAgKzEsMTEgQEANCisvKiB7IGRnLWRvIHJ1biB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVm ZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVm ZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KKw0KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRp b25zICItT2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8NCisNCisjZGVmaW5lIE4gODAzDQorI2RlZmlu ZSBQIDgwMg0KKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIuYyINCisNCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0g fSAqLw0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVhay1ydW5fOC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr LXJ1bl84LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNjE0OTI1NDY1NjA2YjU0YzYzODIyMWZmYjk1YTVlOGQz YmVlNzk3DQotLS0gL2Rldi9udWxsDQorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3Zl Y3QtZWFybHktYnJlYWstcnVuXzguYw0KQEAgLTAsMCArMSwxMSBAQA0KKy8qIHsgZGctZG8gcnVu IH0gKi8NCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFr IH0gKi8NCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQor DQorLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCAtc2F2ZS10ZW1wcyIgfSAqLw0K Kw0KKyNkZWZpbmUgTiA4MDMNCisjZGVmaW5lIFAgNQ0KKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJy ZWFrLXRlbXBsYXRlXzIuYyINCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxP T1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fOS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl85LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQpp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NGUyYjljMzAx NDU2ZWRhOGY5YWQ3ZWFhNjc2MDQ1NjNmMGFmZWU3DQotLS0gL2Rldi9udWxsDQorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzkuYw0KQEAgLTAsMCAr MSwxMSBAQA0KKy8qIHsgZGctZG8gcnVuIH0gKi8NCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZl LXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZl LXRhcmdldCB2ZWN0X2ludCB9ICovDQorDQorLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1P ZmFzdCAtc2F2ZS10ZW1wcyIgfSAqLw0KKw0KKyNkZWZpbmUgTiA4MDMNCisjZGVmaW5lIFAgMjc4 DQorI2luY2x1ZGUgInZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMi5jIg0KKw0KKy8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXRl bXBsYXRlXzEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay10 ZW1wbGF0ZV8xLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjcwYThlMmE1YTlkYzk3NTZlZGI1NTgwZjJkZTAy ZGRjYzk1ZGU5DQotLS0gL2Rldi9udWxsDQorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jDQpAQCAtMCwwICsxLDQ3IEBADQorI2lmbmRl ZiBODQorI2RlZmluZSBOIDgwMw0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgUA0KKyNkZWZpbmUgUCAw DQorI2VuZGlmDQorDQordW5zaWduZWQgdmVjdF9hW05dID0gezB9Ow0KK3Vuc2lnbmVkIHZlY3Rf YltOXSA9IHswfTsNCisgIA0KK19fYXR0cmlidXRlX18oKG5vaXBhLCBub2lubGluZSkpDQordW5z aWduZWQgdGVzdDQodW5zaWduZWQgeCkNCit7DQorIHVuc2lnbmVkIHJldCA9IDA7DQorIGZvciAo aW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyB7DQorICAgdmVjdF9iW2ldID0geCArIGk7DQorICAg aWYgKHZlY3RfYVtpXSA+IHgpDQorICAgICBicmVhazsNCisgICB2ZWN0X2FbaV0gPSB4Ow0KKyAg IA0KKyB9DQorIHJldHVybiByZXQ7DQorfQ0KKw0KK2V4dGVybiB2b2lkIGFib3J0ICgpOw0KKw0K K2ludCBtYWluICgpDQorew0KKw0KKyAgaW50IHggPSAxOw0KKyAgaW50IGlkeCA9IFA7DQorICB2 ZWN0X2FbaWR4XSA9IHggKyAxOw0KKw0KKyAgdGVzdDQoeCk7DQorDQorICBpZiAodmVjdF9iW2lk eF0gIT0gKHggKyBpZHgpKQ0KKyAgICBhYm9ydCAoKTsNCisNCisgIGlmICh2ZWN0X2FbaWR4XSAh PSB4ICsgMSkNCisgICAgYWJvcnQgKCk7DQorDQorICBpZiAoaWR4ID4gMCAmJiB2ZWN0X2FbaWR4 LTFdICE9IHgpDQorICAgIGFib3J0ICgpOw0KKw0KK30NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMi5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIuYw0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLmQwZjkyNGQ5MDQ0MzdlNzE1NjdkMjdjYzFmMTA4OWU1NjA3ZGNhMGQNCi0tLSAvZGV2L251 bGwNCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay10ZW1w bGF0ZV8yLmMNCkBAIC0wLDAgKzEsNTAgQEANCisjaWZuZGVmIE4NCisjZGVmaW5lIE4gODAzDQor I2VuZGlmDQorDQorI2lmbmRlZiBQDQorI2RlZmluZSBQIDANCisjZW5kaWYNCisNCit1bnNpZ25l ZCB2ZWN0X2FbTl0gPSB7MH07DQordW5zaWduZWQgdmVjdF9iW05dID0gezB9Ow0KKyAgDQorX19h dHRyaWJ1dGVfXygobm9pcGEsIG5vaW5saW5lKSkNCit1bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4 KQ0KK3sNCisgdW5zaWduZWQgcmV0ID0gMDsNCisgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKysp DQorIHsNCisgICB2ZWN0X2JbaV0gPSB4ICsgaTsNCisgICBpZiAodmVjdF9hW2ldID4geCkNCisg ICAgIHJldHVybiBpOw0KKyAgIHZlY3RfYVtpXSA9IHg7DQorICAgDQorIH0NCisgcmV0dXJuIHJl dDsNCit9DQorDQorZXh0ZXJuIHZvaWQgYWJvcnQgKCk7DQorDQoraW50IG1haW4gKCkNCit7DQor DQorICBpbnQgeCA9IDE7DQorICBpbnQgaWR4ID0gUDsNCisgIHZlY3RfYVtpZHhdID0geCArIDE7 DQorDQorICB1bnNpZ25lZCByZXMgPSB0ZXN0NCh4KTsNCisNCisgIGlmIChyZXMgIT0gaWR4KQ0K KyAgICBhYm9ydCAoKTsNCisNCisgIGlmICh2ZWN0X2JbaWR4XSAhPSAoeCArIGlkeCkpDQorICAg IGFib3J0ICgpOw0KKw0KKyAgaWYgKHZlY3RfYVtpZHhdICE9IHggKyAxKQ0KKyAgICBhYm9ydCAo KTsNCisNCisgIGlmIChpZHggPiAwICYmIHZlY3RfYVtpZHgtMV0gIT0geCkNCisgICAgYWJvcnQg KCk7DQorDQorfQ0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1l YXJseS1icmVha18xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJl YWtfMS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTFlN2Q2NDg5Yjk5YzI1YjliNGIzZDFjODM5Zjk4NTYyYjZk NGRkNw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LWVhcmx5LWJyZWFrXzEuYw0KQEAgLTAsMCArMSwyNyBAQA0KKy8qIHsgZGctZG8gY29tcGlsZSB9 ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9 ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KKw0K Ky8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCisNCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KKw0K KyNpZm5kZWYgTg0KKyNkZWZpbmUgTiA4MDMNCisjZW5kaWYNCit1bnNpZ25lZCB2ZWN0X2FbTl07 DQordW5zaWduZWQgdmVjdF9iW05dOw0KKyAgDQordW5zaWduZWQgdGVzdDQodW5zaWduZWQgeCkN Cit7DQorIHVuc2lnbmVkIHJldCA9IDA7DQorIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0K KyB7DQorICAgdmVjdF9iW2ldID0geCArIGk7DQorICAgaWYgKHZlY3RfYVtpXSA+IHgpDQorICAg ICBicmVhazsNCisgICB2ZWN0X2FbaV0gPSB4Ow0KKyAgIA0KKyB9DQorIHJldHVybiByZXQ7DQor fQ0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVh a18xMC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEwLmMN Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi45ZTRhZDE3NjMyMDJkZmRhYjNlZDc5NjFlYWQ1MTE0ZmNjNjFhMTFiDQot LS0gL2Rldi9udWxsDQorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHkt YnJlYWtfMTAuYw0KQEAgLTAsMCArMSwyOCBAQA0KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQor LyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQor LyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KKw0KKy8qIHsg ZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCisNCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KKw0KKyNpZm5k ZWYgTg0KKyNkZWZpbmUgTiA4MDMNCisjZW5kaWYNCit1bnNpZ25lZCB2ZWN0X2FbTl07DQordW5z aWduZWQgdmVjdF9iW05dOw0KKyAgDQordW5zaWduZWQgdGVzdDQodW5zaWduZWQgeCxpbnQgeSwg aW50IHopDQorew0KKyB1bnNpZ25lZCByZXQgPSAwOw0KKyBmb3IgKGludCBpID0gMDsgaSA8IE47 IGkrKykNCisgew0KKyAgIHZlY3RfYltpXSA9IHggKyBpOw0KKyAgIGlmICh2ZWN0X2FbaV0gPiB4 KQ0KKyAgICAgYnJlYWs7DQorICAgdmVjdF9hW2ldID0geDsNCisgfQ0KKw0KKyByZXQgPSB4ICsg eSAqIHo7DQorIHJldHVybiByZXQ7DQorfQ0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj dC92ZWN0LWVhcmx5LWJyZWFrXzExLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNjEzZGQ5OTA5ZmIwOTI3OGRk OTJhODFhMjRlZjg1NDk5NGE5ODkwDQotLS0gL2Rldi9udWxsDQorKysgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTEuYw0KQEAgLTAsMCArMSwzMSBAQA0KKy8q IHsgZGctZG8gY29tcGlsZSB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQg dmVjdF9lYXJseV9icmVhayB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQg dmVjdF9pbnQgfSAqLw0KKw0KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0g Ki8NCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIg InZlY3QiIH0gfSAqLw0KKw0KKyNpZm5kZWYgTg0KKyNkZWZpbmUgTiA4MDMNCisjZW5kaWYNCit1 bnNpZ25lZCB2ZWN0X2FbTl07DQordW5zaWduZWQgdmVjdF9iW05dOw0KKyAgDQordW5zaWduZWQg dGVzdDQodW5zaWduZWQgeCwgaW50IHkpDQorew0KKyB1bnNpZ25lZCByZXQgPSAwOw0KK2ZvciAo aW50IG8gPSAwOyBvIDwgeTsgbysrKQ0KK3sNCisgcmV0ICs9IG87DQorIGZvciAoaW50IGkgPSAw OyBpIDwgTjsgaSsrKQ0KKyB7DQorICAgdmVjdF9iW2ldID0geCArIGk7DQorICAgaWYgKHZlY3Rf YVtpXSA+IHgpDQorICAgICBicmVhazsNCisgICB2ZWN0X2FbaV0gPSB4Ow0KKyAgIA0KKyB9DQor fQ0KKyByZXR1cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVj dC1lYXJseS1icmVha18xMi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2MxMGYzMjM4ZjFjYjhlMTMwN2UwMjRh M2ViY2I1YzI1YTM5ZDFiMg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEyLmMNCkBAIC0wLDAgKzEsMzEgQEANCisvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf ZWFybHlfYnJlYWsgfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf aW50IH0gKi8NCisNCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQor DQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0 IiB9IH0gKi8NCisNCisjaWZuZGVmIE4NCisjZGVmaW5lIE4gODAzDQorI2VuZGlmDQordW5zaWdu ZWQgdmVjdF9hW05dOw0KK3Vuc2lnbmVkIHZlY3RfYltOXTsNCisgIA0KK3Vuc2lnbmVkIHRlc3Q0 KHVuc2lnbmVkIHgsIGludCB5KQ0KK3sNCisgdW5zaWduZWQgcmV0ID0gMDsNCitmb3IgKGludCBv ID0gMDsgbyA8IHk7IG8rKykNCit7DQorIHJldCArPSBvOw0KKyBmb3IgKGludCBpID0gMDsgaSA8 IE47IGkrKykNCisgew0KKyAgIHZlY3RfYltpXSA9IHggKyBpOw0KKyAgIGlmICh2ZWN0X2FbaV0g PiB4KQ0KKyAgICAgcmV0dXJuIHZlY3RfYVtpXTsNCisgICB2ZWN0X2FbaV0gPSB4Ow0KKyAgIA0K KyB9DQorfQ0KKyByZXR1cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1lYXJseS1icmVha18xMy5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjk2N2I3Mzk1ZWQ3YzE5ZTM4 YTQzNmQ2ZWRjZmU3YzE1ODBjNzExMw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEzLmMNCkBAIC0wLDAgKzEsMjcgQEANCisv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0 IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0 IHZlY3RfaW50IH0gKi8NCisNCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9 ICovDQorDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQi ICJ2ZWN0IiB9IH0gKi8NCisNCisjaWZuZGVmIE4NCisjZGVmaW5lIE4gODAzDQorI2VuZGlmDQor dW5zaWduZWQgdmVjdF9hW05dOw0KK3Vuc2lnbmVkIHZlY3RfYltOXTsNCisgIA0KK3Vuc2lnbmVk IHRlc3Q0KHVuc2lnbmVkIHgpDQorew0KKyB1bnNpZ25lZCByZXQgPSAwOw0KKyBmb3IgKGludCBp ID0gMDsgaSA8IE47IGkrKykNCisgew0KKyAgIHZlY3RfYltpXSA9IHggKyBpOw0KKyAgIGlmICh2 ZWN0X2FbaV0gPiB4KQ0KKyAgICAgcmV0dXJuIHZlY3RfYVtpXSAqIHg7DQorICAgdmVjdF9hW2ld ID0geDsNCisgICANCisgfQ0KKyByZXR1cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTQuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xNC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDNjY2U1Y2Y2 Y2FkZWNiNTIwYjQ2YmU2NjZiZjYwOGUzYmM2YTUxMQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzE0LmMNCkBAIC0wLDAgKzEs MjUgQEANCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3Rp dmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3Rp dmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCisNCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAi LU9mYXN0IiB9ICovDQorDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZF Q1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCisNCisjZGVmaW5lIE4gODAzDQordW5zaWduZWQgdmVj dF9hW05dOw0KK3Vuc2lnbmVkIHZlY3RfYltOXTsNCisgIA0KK2ludCB0ZXN0NCh1bnNpZ25lZCB4 KQ0KK3sNCisgdW5zaWduZWQgcmV0ID0gMDsNCisgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKysp DQorIHsNCisgICB2ZWN0X2JbaV0gPSB4ICsgaTsNCisgICBpZiAodmVjdF9hW2ldID4geCkNCisg ICAgIHJldHVybiBpOw0KKyAgIHZlY3RfYVtpXSArPSB4ICogdmVjdF9iW2ldOw0KKyAgIA0KKyB9 DQorIHJldHVybiByZXQ7DQorfQ0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1lYXJseS1icmVha18xNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LWVhcmx5LWJyZWFrXzE1LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWM2ODcyZTExMTVmZjY2Njk1ZjVhNTAw ZmZhN2NhMDFjMGY4ZDNhDQotLS0gL2Rldi9udWxsDQorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTUuYw0KQEAgLTAsMCArMSwyNSBAQA0KKy8qIHsgZGct ZG8gY29tcGlsZSB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9l YXJseV9icmVhayB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9p bnQgfSAqLw0KKw0KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCisN CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3Qi IH0gfSAqLw0KKw0KKyNkZWZpbmUgTiA4MDMNCit1bnNpZ25lZCB2ZWN0X2FbTl07DQordW5zaWdu ZWQgdmVjdF9iW05dOw0KKyAgDQoraW50IHRlc3Q0KHVuc2lnbmVkIHgpDQorew0KKyBpbnQgcmV0 ID0gMDsNCisgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQorIHsNCisgICB2ZWN0X2JbaV0g PSB4ICsgaTsNCisgICBpZiAodmVjdF9hW2ldID4geCkNCisgICAgIHJldHVybiBpOw0KKyAgIHZl Y3RfYVtpXSArPSB4ICogdmVjdF9iW2ldOw0KKyAgIA0KKyB9DQorIHJldHVybiByZXQ7DQorfQ0K ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18x Ni5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzE2LmMNCm5l dyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi4zMDgxMmQxMmEzOWJkOTRiNGI4YTNhYWRlNjUxMmIxNjI2OTdkNjU5DQotLS0g L2Rldi9udWxsDQorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJl YWtfMTYuYw0KQEAgLTAsMCArMSwyNSBAQA0KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQorLyog eyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQorLyog eyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KKw0KKy8qIHsgZGct YWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KKw0KKyNkZWZpbmUg TiAxMDI0DQordW5zaWduZWQgdmVjdF9hW05dOw0KK3Vuc2lnbmVkIHZlY3RfYltOXTsNCisgDQor dW5zaWduZWQgdGVzdDQodW5zaWduZWQgeCkNCit7DQorIHVuc2lnbmVkIHJldCA9IDA7DQorIGZv ciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyB7DQorICAgdmVjdF9iW2ldID0geCArIGk7DQor ICAgaWYgKHZlY3RfYVtpXSA+IHgpDQorICAgICByZXR1cm4gdmVjdF9hW2ldOw0KKyAgIHZlY3Rf YVtpXSA9IHg7DQorICAgcmV0ICs9IHZlY3RfYVtpXSArIHZlY3RfYltpXTsNCisgfQ0KKyByZXR1 cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qt ZWFybHktYnJlYWtfMTcuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVha18xNy5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTEwMjI3YTE4NDM1YThlNDdjNWE3NTQ1ODAxODBjNmQz NDBjMDgyMw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWVhcmx5LWJyZWFrXzE3LmMNCkBAIC0wLDAgKzEsMjUgQEANCisvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJl YWsgfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8N CisNCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQorDQorLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8N CisNCisjZGVmaW5lIE4gMTAyNA0KK3Vuc2lnbmVkIHZlY3RfYVtOXTsNCit1bnNpZ25lZCB2ZWN0 X2JbTl07DQorIA0KK3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgpDQorew0KKyB1bnNpZ25lZCBy ZXQgPSAwOw0KKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCisgew0KKyAgIHZlY3RfYltp XSA9IHggKyBpOw0KKyAgIGlmICh2ZWN0X2FbaV0gPiB4KQ0KKyAgICAgcmV0dXJuIHZlY3RfYVtp XTsNCisgICB2ZWN0X2FbaV0gPSB4Ow0KKyAgIHJldCA9IHZlY3RfYVtpXSArIHZlY3RfYltpXTsN CisgfQ0KKyByZXR1cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWVhcmx5LWJyZWFrXzIuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyNjhmNmFlMjQ4NWQwMjc0ZmQ4NWVh NTNjYzFlNDRlZjRiODRkNWMNCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18yLmMNCkBAIC0wLDAgKzEsMjcgQEANCisvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf ZWFybHlfYnJlYWsgfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf aW50IH0gKi8NCisNCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQor DQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0 IiB9IH0gKi8NCisNCisjaW5jbHVkZSA8Y29tcGxleC5oPg0KKw0KKyNkZWZpbmUgTiAxMDI0DQor Y29tcGxleCBkb3VibGUgdmVjdF9hW05dOw0KK2NvbXBsZXggZG91YmxlIHZlY3RfYltOXTsNCisg IA0KK2NvbXBsZXggZG91YmxlIHRlc3Q0KGNvbXBsZXggZG91YmxlIHgpDQorew0KKyBjb21wbGV4 IGRvdWJsZSByZXQgPSAwOw0KKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCisgew0KKyAg IHZlY3RfYltpXSArPSB4ICsgaTsNCisgICBpZiAodmVjdF9hW2ldID09IHgpDQorICAgICByZXR1 cm4gaTsNCisgICB2ZWN0X2FbaV0gKz0geCAqIHZlY3RfYltpXTsNCisgICANCisgfQ0KKyByZXR1 cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qt ZWFybHktYnJlYWtfMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJy ZWFrXzMuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjNmQyOGJkMmQ2ZTZlNzk0MTQ2YmFmODllNDNjM2I3MDI5 M2I3ZDkNCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVj dC1lYXJseS1icmVha18zLmMNCkBAIC0wLDAgKzEsMjAgQEANCisvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsg fSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCisN CisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQorDQorLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICov DQorDQordW5zaWduZWQgdGVzdDQoY2hhciB4LCBjaGFyICp2ZWN0LCBpbnQgbikNCit7ICANCisg dW5zaWduZWQgcmV0ID0gMDsNCisgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspDQorIHsNCisg ICBpZiAodmVjdFtpXSA+IHgpDQorICAgICByZXR1cm4gMTsNCisNCisgICB2ZWN0W2ldID0geDsN CisgfQ0KKyByZXR1cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWVhcmx5LWJyZWFrXzQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxNmM1NmZhZjMzMDQ0OWJmMTk2OWI3 ZTUxZmYxZTk0MjcwZGM4NjENCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha180LmMNCkBAIC0wLDAgKzEsMjMgQEANCisvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf ZWFybHlfYnJlYWsgfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf aW50IH0gKi8NCisNCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQor DQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiTE9PUCBWRUNUT1JJWkVEIiAi dmVjdCIgfSB9ICovDQorDQorI2RlZmluZSBOIDEwMjQNCit1bnNpZ25lZCB2ZWN0W05dOw0KKw0K K3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgpDQorew0KKyB1bnNpZ25lZCByZXQgPSAwOw0KKyBm b3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCisgew0KKyAgIGlmIChpID4gMTYgJiYgdmVjdFtp XSA+IHgpDQorICAgICBicmVhazsNCisNCisgICB2ZWN0W2ldID0geDsNCisgfQ0KKyByZXR1cm4g cmV0Ow0KK30NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFy bHktYnJlYWtfNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr XzUuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLjRhMzZkNjk3OWRiMWZkMWY5N2JhMmEyOTBmNzhhYzNiODRmNmRl MjQNCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1l YXJseS1icmVha181LmMNCkBAIC0wLDAgKzEsMjQgQEANCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAq Lw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAq Lw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCisNCisv KiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQorDQorLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCisNCisj ZGVmaW5lIE4gMTAyNA0KK3Vuc2lnbmVkIHZlY3RfYVtOXTsNCit1bnNpZ25lZCB2ZWN0X2JbTl07 DQorIA0KK3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgpDQorew0KKyB1bnNpZ25lZCByZXQgPSAw Ow0KKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCisgew0KKyAgIHZlY3RfYltpXSA9IHgg KyBpOw0KKyAgIGlmICh2ZWN0X2FbaV0gPiB4KQ0KKyAgICAgcmV0dXJuIHZlY3RfYVtpXTsNCisg ICB2ZWN0X2FbaV0gPSB4Ow0KKyB9DQorIHJldHVybiByZXQ7DQorfQ0KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha182LmMgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDk2MzJk OWFmZGE3ZTA3ZjFhODQxNzUxNGVmNzczNTZmMDAwNDViZA0KLS0tIC9kZXYvbnVsbA0KKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzYuYw0KQEAgLTAsMCAr MSwyNiBAQA0KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KKw0KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25z ICItT2Zhc3QiIH0gKi8NCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtbm90ICJM T09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCisNCisjZGVmaW5lIE4gMTAyNA0KK3Vuc2ln bmVkIHZlY3RfYVtOXTsNCit1bnNpZ25lZCB2ZWN0X2JbTl07DQorICANCit1bnNpZ25lZCB0ZXN0 NCh1bnNpZ25lZCB4KQ0KK3sNCisgdW5zaWduZWQgcmV0ID0gMDsNCisgZm9yIChpbnQgaSA9IDA7 IGkgPCAoTi8yKTsgaSs9MikNCisgew0KKyAgIHZlY3RfYltpXSA9IHggKyBpOw0KKyAgIHZlY3Rf YltpKzFdID0geCArIGkrMTsNCisgICBpZiAodmVjdF9hW2ldID4geCB8fCB2ZWN0X2FbaSsxXSA+ IHgpDQorICAgICBicmVhazsNCisgICB2ZWN0X2FbaV0gKz0geCAqIHZlY3RfYltpXTsNCisgICB2 ZWN0X2FbaSsxXSArPSB4ICogdmVjdF9iW2krMV07IA0KKyB9DQorIHJldHVybiByZXQ7DQorfQ0K ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha183 LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNy5jDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uMTBmZDhiNDI5NTJjNDJmM2QzYTAxNGRhMTAzOTMxY2EzOTQ0MjNkNQ0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr XzcuYw0KQEAgLTAsMCArMSwyNyBAQA0KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQorLyogeyBk Zy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQorLyogeyBk Zy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KKw0KKy8qIHsgZGctYWRk aXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KKw0KKyNpbmNsdWRlIDxj b21wbGV4Lmg+DQorDQorI2RlZmluZSBOIDEwMjQNCitjb21wbGV4IGRvdWJsZSB2ZWN0X2FbTl07 DQorY29tcGxleCBkb3VibGUgdmVjdF9iW05dOw0KKyAgDQorY29tcGxleCBkb3VibGUgdGVzdDQo Y29tcGxleCBkb3VibGUgeCkNCit7DQorIGNvbXBsZXggZG91YmxlIHJldCA9IDA7DQorIGZvciAo aW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyB7DQorICAgdmVjdF9iW2ldICs9IHggKyBpOw0KKyAg IGlmICh2ZWN0X2FbaV0gPT0geCkNCisgICAgIGJyZWFrOw0KKyAgIHZlY3RfYVtpXSArPSB4ICog dmVjdF9iW2ldOw0KKyAgIA0KKyB9DQorIHJldHVybiByZXQ7DQorfQ0KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha184LmMgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfOC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWU3MDZi Mjk1MmNmY2VjZjIwNTQ2YTY3YTczNWI4ZDkwMmNiYjYwNw0KLS0tIC9kZXYvbnVsbA0KKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzguYw0KQEAgLTAsMCAr MSwyNyBAQA0KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQorLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KKw0KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25z ICItT2Zhc3QiIH0gKi8NCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1Ag VkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KKw0KKyNpbmNsdWRlIDxjb21wbGV4Lmg+DQorDQor I2RlZmluZSBOIDEwMjQNCitjaGFyIHZlY3RfYVtOXTsNCitjaGFyIHZlY3RfYltOXTsNCisgIA0K K2NoYXIgdGVzdDQoY2hhciB4LCBjaGFyICogcmVzdHJpY3QgcmVzKQ0KK3sNCisgY2hhciByZXQg PSAwOw0KKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCisgew0KKyAgIHZlY3RfYltpXSAr PSB4ICsgaTsNCisgICBpZiAodmVjdF9hW2ldID4geCkNCisgICAgIGJyZWFrOw0KKyAgIHZlY3Rf YVtpXSArPSB4ICogdmVjdF9iW2ldOw0KKyAgIHJlc1tpXSAqPSB2ZWN0X2JbaV07DQorIH0NCisg cmV0dXJuIHJldDsNCit9DQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWVhcmx5LWJyZWFrXzkuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVha185LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTBmMDJmM2M3Y2FlZjQ1N2FkYmUxYmU4MDJiYmE1 MWNkODE4MzkzDQotLS0gL2Rldi9udWxsDQorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWtfOS5jDQpAQCAtMCwwICsxLDI3IEBADQorLyogeyBkZy1kbyBjb21w aWxlIH0gKi8NCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2Jy ZWFrIH0gKi8NCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICov DQorDQorLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAqLw0KKw0KKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3QgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0g fSAqLw0KKw0KKyNpZm5kZWYgTg0KKyNkZWZpbmUgTiA4MDMNCisjZW5kaWYNCit1bnNpZ25lZCB2 ZWN0X2FbTl07DQordW5zaWduZWQgdmVjdF9iW05dOw0KKyAgDQordW5zaWduZWQgdGVzdDQodW5z aWduZWQgeCkNCit7DQorIHVuc2lnbmVkIHJldCA9IDA7DQorIGZvciAoaW50IGkgPSAwOyBpIDwg TjsgaSsrKQ0KKyB7DQorICAgdmVjdF9hW2ldID0geCArIGk7DQorICAgaWYgKHZlY3RfYVtpXSA+ IHgpDQorICAgICBicmVhazsNCisgICB2ZWN0X2FbaV0gPSB4Ow0KKyAgIA0KKyB9DQorIHJldHVy biByZXQ7DQorfQ0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvbGliL3RhcmdldC1zdXBwb3J0 cy5leHAgYi9nY2MvdGVzdHN1aXRlL2xpYi90YXJnZXQtc3VwcG9ydHMuZXhwDQppbmRleCAyYTA1 OGM2N2M1MzQ2NmZlNDFiNzQ4ZDM3YWI2NjBhZmQ0ZTM0MDNmLi40OWIzMDk5YmY1MTg3YjEyNzNm ZjA3ODA4NjkyZDYyZjJjZmRmYTU1IDEwMDY0NA0KLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9saWIvdGFy Z2V0LXN1cHBvcnRzLmV4cA0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LXN1cHBvcnRz LmV4cA0KQEAgLTM2NTksNiArMzY1OSwxNyBAQCBwcm9jIGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRf dmVjdF9pbnQgeyB9IHsNCiAJfX1dDQogfQ0KIA0KKyMgUmV0dXJuIDEgaWYgdGhlIHRhcmdldCBz dXBwb3J0cyBoYXJkd2FyZSB2ZWN0b3JpemF0aW9uIG9mIGVhcmx5IGJyZWFrcywNCisjIDAgb3Ro ZXJ3aXNlLg0KKyMNCisjIFRoaXMgd29uJ3QgY2hhbmdlIGZvciBkaWZmZXJlbnQgc3VidGFyZ2V0 cyBzbyBjYWNoZSB0aGUgcmVzdWx0Lg0KKw0KK3Byb2MgY2hlY2tfZWZmZWN0aXZlX3RhcmdldF92 ZWN0X2Vhcmx5X2JyZWFrIHsgfSB7DQorICAgIHJldHVybiBbY2hlY2tfY2FjaGVkX2VmZmVjdGl2 ZV90YXJnZXRfaW5kZXhlZCB2ZWN0X2Vhcmx5X2JyZWFrIHsNCisgICAgICBleHByIHsNCisJW2lz dGFyZ2V0IGFhcmNoNjQqLSotKl0NCisJfX1dDQorfQ0KICMgUmV0dXJuIDEgaWYgdGhlIHRhcmdl dCBzdXBwb3J0cyBoYXJkd2FyZSB2ZWN0b3JpemF0aW9uIG9mIGNvbXBsZXggYWRkaXRpb25zIG9m DQogIyBieXRlLCAwIG90aGVyd2lzZS4NCiAjDQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc2NhbGFy LWV2b2x1dGlvbi5oIGIvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5oDQppbmRleCAwZjkwMjA3 YmM3MzNkYjNjZjg1OTc5ZDliMGI5NjJhZWZhMDgzMWQ2Li41YWY3ZDJiYmEwZDYyMTk1NzA0YThk NDFlZjZlNjAwMzI3MTY5NzcwIDEwMDY0NA0KLS0tIGEvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlv bi5oDQorKysgYi9nY2MvdHJlZS1zY2FsYXItZXZvbHV0aW9uLmgNCkBAIC0yMyw2ICsyMyw3IEBA IGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlDQogDQog ZXh0ZXJuIHRyZWUgbnVtYmVyX29mX2xhdGNoX2V4ZWN1dGlvbnMgKGNsYXNzIGxvb3AgKik7DQog ZXh0ZXJuIGdjb25kICpnZXRfbG9vcF9leGl0X2NvbmRpdGlvbiAoY29uc3QgY2xhc3MgbG9vcCAq KTsNCitleHRlcm4gZ2NvbmQgKmdldF9lZGdlX2NvbmRpdGlvbiAoZWRnZSk7DQogDQogZXh0ZXJu IHZvaWQgc2Nldl9pbml0aWFsaXplICh2b2lkKTsNCiBleHRlcm4gYm9vbCBzY2V2X2luaXRpYWxp emVkX3AgKHZvaWQpOw0KZGlmZiAtLWdpdCBhL2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uY2Mg Yi9nY2MvdHJlZS1zY2FsYXItZXZvbHV0aW9uLmNjDQppbmRleCBmNzUzOThhZmI3YzlmZGY0MmU2 OWU5NDBlMjIzMjk0MjE0MzA0OWY2Li4xMDVjZWUzOTI3Nzc0MTUzNTI1MmZlYTU2YzE3ZjdjMDQ3 MDAzY2UxIDEwMDY0NA0KLS0tIGEvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5jYw0KKysrIGIv Z2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5jYw0KQEAgLTg4NCw3ICs4ODQsNyBAQCBzY2V2X2Rm czo6YWRkX3RvX2V2b2x1dGlvbiAodHJlZSBjaHJlY19iZWZvcmUsIGVudW0gdHJlZV9jb2RlIGNv ZGUsDQogICByZXR1cm4gcmVzOw0KIH0NCiANCi0NCisNCg0KIC8qIEZvbGxvdyB0aGUgc3NhIGVk Z2UgaW50byB0aGUgYmluYXJ5IGV4cHJlc3Npb24gUkhTMCBDT0RFIFJIUzEuDQogICAgUmV0dXJu IHRydWUgaWYgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnQgaGFzIGJlZW4gZm91bmQu ICAqLw0KIA0KQEAgLTEyOTMsOCArMTI5MywxNSBAQCBzY2V2X2Rmczo6Zm9sbG93X3NzYV9lZGdl X2V4cHIgKGdpbXBsZSAqYXRfc3RtdCwgdHJlZSBleHByLA0KIGdjb25kICoNCiBnZXRfbG9vcF9l eGl0X2NvbmRpdGlvbiAoY29uc3QgY2xhc3MgbG9vcCAqbG9vcCkNCiB7DQorICByZXR1cm4gZ2V0 X2VkZ2VfY29uZGl0aW9uIChub3JtYWxfZXhpdCAobG9vcCkpOw0KK30NCisNCisvKiBJZiB0aGUg c3RhdGVtZW50IGp1c3QgYmVmb3JlIHRoZSBFWElUX0VER0UgY29udGFpbnMgYSBjb25kaXRpb24g dGhlbg0KKyAgIHJldHVybiB0aGUgY29uZGl0aW9uLCBvdGhlcndpc2UgTlVMTC4gKi8NCisNCitn Y29uZCAqDQorZ2V0X2VkZ2VfY29uZGl0aW9uIChlZGdlIGV4aXRfZWRnZSl7DQogICBnY29uZCAq cmVzID0gTlVMTDsNCi0gIGVkZ2UgZXhpdF9lZGdlID0gc2luZ2xlX2V4aXQgKGxvb3ApOw0KIA0K ICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9TQ0VWKSkNCiAgICAgZnByaW50 ZiAoZHVtcF9maWxlLCAiKGdldF9sb29wX2V4aXRfY29uZGl0aW9uIFxuICAiKTsNCmRpZmYgLS1n aXQgYS9nY2MvdHJlZS12ZWN0LWRhdGEtcmVmcy5jYyBiL2djYy90cmVlLXZlY3QtZGF0YS1yZWZz LmNjDQppbmRleCAxOGIwZjk2MjY3MGZmYzg2ZmU1Y2M0ZTYzMzA5N2YzY2U0NTM0MWZlLi4yYTJm M2I0YWNiNTkwNWEyYmExZjlkM2I1NGEwOGE1NTAyOGNkNDYyIDEwMDY0NA0KLS0tIGEvZ2NjL3Ry ZWUtdmVjdC1kYXRhLXJlZnMuY2MNCisrKyBiL2djYy90cmVlLXZlY3QtZGF0YS1yZWZzLmNjDQpA QCAtNTcwLDYgKzU3MCwxNDQgQEAgdmVjdF9hbmFseXplX2RhdGFfcmVmX2RlcGVuZGVuY2UgKHN0 cnVjdCBkYXRhX2RlcGVuZGVuY2VfcmVsYXRpb24gKmRkciwNCiAgIHJldHVybiBvcHRfcmVzdWx0 OjpzdWNjZXNzICgpOw0KIH0NCiANCisvKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIHZhbGlkYXRl IHdoZXRoZXIgYW4gZWFybHkgYnJlYWsgdmVjdG9yaXphdGlvbg0KKyAgIGlzIHBvc3NpYmxlIGZv ciB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiBzZXF1ZW5jZS4gUmV0dXJucyBUcnVlIGkNCisgICBw b3NzaWJsZSwgb3RoZXJ3aXNlIEZhbHNlLg0KKw0KKyAgIFJlcXVpcmVtZW50czoNCisgICAgIC0g QW55IG1lbW9yeSBhY2Nlc3MgbXVzdCBiZSB0byBhIGZpeGVkIHNpemUgYnVmZmVyLg0KKyAgICAg LSBUaGVyZSBtdXN0IG5vdCBiZSBhbnkgbG9hZHMgYW5kIHN0b3JlcyB0byB0aGUgc2FtZSBvYmpl Y3QuDQorICAgICAtIE11bHRpcGxlIGxvYWRzIGFyZSBhbGxvd2VkIGFzIGxvbmcgYXMgdGhleSBk b24ndCBhbGlhcy4NCisNCisNCisgICBBcmd1bWVudHM6DQorICAgICAtIExPT1BfVklORk86IGxv b3AgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGxvb3AuDQorICAgICAtIENIQUlOOiBDdXJy ZW50bHkgZGV0ZWN0ZWQgc2VxdWVuY2Ugb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgYmVsb25nDQorCSAg ICAgIHRvIHRoZSBjdXJyZW50IGVhcmx5IGJyZWFrLg0KKyAgICAgLSBMT0FEUzogTGlzdCBvZiBh bGwgbG9hZHMgZm91bmQgZHVyaW5nIHRyYXZlcnNhbC4NCisgICAgIC0gQkFTRVM6IExpc3Qgb2Yg YWxsIGxvYWQgZGF0YXJlZmVyZW5jZXMgZm91bmQgZHVyaW5nIHRyYXZlcnNhbC4NCisgICAgIC0g R1NUTVQ6IEN1cnJlbnQgcG9zaXRpb24gdG8gaW5zcGVjdCBmb3IgdmFsaWRpdHkuICBUaGUgc2Vx dWVuY2UNCisJICAgICAgd2lsbCBiZSBtb3ZlZCB1cHdhcmRzIGZyb20gdGhpcyBwb2ludC4gICov DQorDQorc3RhdGljIGJvb2wNCit2YWxpZGF0ZV9lYXJseV9leGl0X3N0bXRzIChsb29wX3ZlY19p bmZvIGxvb3BfdmluZm8sIGhhc2hfc2V0PHRyZWU+ICpjaGFpbiwNCisJCQkgICB2ZWM8dHJlZT4g KmxvYWRzLCB2ZWM8ZGF0YV9yZWZlcmVuY2UgKj4gKmJhc2VzLA0KKwkJCSAgIGdpbXBsZV9zdG10 X2l0ZXJhdG9yICpnc3RtdCkNCit7DQorICBpZiAoZ3NpX2VuZF9wICgqZ3N0bXQpKQ0KKyAgICBy ZXR1cm4gdHJ1ZTsNCisNCisgIGdpbXBsZSAqc3RtdCA9IGdzaV9zdG10ICgqZ3N0bXQpOw0KKyAg aWYgKGdpbXBsZV9oYXNfb3BzIChzdG10KSkNCisgICAgew0KKyAgICAgIHRyZWUgZGVzdCA9IE5V TExfVFJFRTsNCisgICAgICAvKiBUcnkgdG8gZmluZCB0aGUgU1NBX05BTUUgYmVpbmcgZGVmaW5l ZC4gIEZvciBTdGF0ZW1lbnRzIHdpdGggYW4gTEhTDQorCSB1c2UgdGhlIExIUywgaWYgbm90LCBh c3N1bWUgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgb2YgYSBjYWxsIGlzIHRoZQ0KKwkgdmFsdWUg YmVpbmcgZGVmaW5lZC4gIGUuZy4gTUFTS0VEX0xPQUQgZXRjLiAgKi8NCisgICAgICBpZiAoZ2lt cGxlX2hhc19saHMgKHN0bXQpKQ0KKwl7DQorCSAgaWYgKGlzX2dpbXBsZV9hc3NpZ24gKHN0bXQp KQ0KKwkgICAgZGVzdCA9IGdpbXBsZV9hc3NpZ25fbGhzIChzdG10KTsNCisJICBlbHNlIGlmIChj b25zdCBnY2FsbCAqY2FsbCA9IGR5bl9jYXN0IDxjb25zdCBnY2FsbCAqPiAoc3RtdCkpDQorCSAg ICBkZXN0ID0gZ2ltcGxlX2NhbGxfbGhzIChjYWxsKTsNCisJfQ0KKyAgICAgIGVsc2UgaWYgKGNv bnN0IGdjYWxsICpjYWxsID0gZHluX2Nhc3QgPGNvbnN0IGdjYWxsICo+IChzdG10KSkNCisJZGVz dCA9IGdpbXBsZV9hcmcgKGNhbGwsIDApOw0KKw0KKyAgICAgIC8qIERvbid0IG1vdmUgdGhlIHNj YWxhciBpbnN0cnVjdGlvbnMuICAqLw0KKyAgICAgIGJvb2wgbW92ZQ0KKwk9IGRlc3QgJiYgKFZF Q1RPUl9UWVBFX1AgKFRSRUVfVFlQRSAoZGVzdCkpDQorCQkgICB8fCBQT0lOVEVSX1RZUEVfUCAo VFJFRV9UWVBFIChkZXN0KSkpOw0KKw0KKyAgICAgIC8qIElmIHdlIGZvdW5kIHRoZSBkZWZpbmlu ZyBzdGF0ZW1lbnQgb2YgYSBzb21ldGhpbmcgdGhhdCdzIHBhcnQgb2YgdGhlDQorCSBjaGFpbiB0 aGVuIGV4cGFuZCB0aGUgY2hhaW4gd2l0aCB0aGUgbmV3IFNTQV9WQVJzIGJlaW5nIHVzZWQuICAq Lw0KKyAgICAgIGlmIChjaGFpbi0+Y29udGFpbnMgKGRlc3QpKQ0KKwl7DQorCSAgZm9yICh1bnNp Z25lZCB4ID0gMDsgeCA8IGdpbXBsZV9udW1fYXJncyAoc3RtdCk7IHgrKykNCisJICAgIGlmIChU UkVFX0NPREUgKGdpbXBsZV9hcmcgKHN0bXQsIHgpKSA9PSBTU0FfTkFNRSkNCisJICAgICAgY2hh aW4tPmFkZCAoZ2ltcGxlX2FyZyAoc3RtdCwgeCkpOw0KKw0KKwkgIGlmIChkdW1wX2VuYWJsZWRf cCAoKSkNCisJICAgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwN CisJCQkJImZvdW5kIGNoYWluICVHIiwgc3RtdCk7DQorDQorCSAgbW92ZSA9IGZhbHNlOw0KKwl9 DQorDQorICAgICAgc3RtdF92ZWNfaW5mbyBzdG10X3ZpbmZvID0gbG9vcF92aW5mby0+bG9va3Vw X3N0bXQgKHN0bXQpOw0KKyAgICAgIGlmICghc3RtdF92aW5mbykNCisJew0KKwkgICBpZiAoZHVt cF9lbmFibGVkX3AgKCkpDQorCSAgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElN SVpBVElPTiwgdmVjdF9sb2NhdGlvbiwNCisJCQkgICAgICAiZWFybHkgYnJlYWtzIG9ubHkgc3Vw cG9ydGVkLiBVbmtub3duIg0KKwkJCSAgICAgICIgc3RhdGVtZW50OiAlRyIsIHN0bXQpOw0KKwkg ICByZXR1cm4gZmFsc2U7DQorCX0NCisNCisgICAgICBhdXRvIGRyX3JlZiA9IFNUTVRfVklORk9f REFUQV9SRUYgKHN0bXRfdmluZm8pOw0KKyAgICAgIGlmIChkcl9yZWYpDQorCXsNCisJICAgLyog V2UgY3VycmVubHkgb25seSBzdXBwb3J0IHN0YXRpY2FsbHkgYWxsb2NhdGVkIG9iamVjdHMgZHVl IHRvDQorCSAgICAgIG5vdCBoYXZpbmcgZmlyc3QtZmF1bHRpbmcgbG9hZHMgc3VwcG9ydCBvciBw ZWVsaW5nIGZvciBhbGlnbm1lbnQNCisJICAgICAgc3VwcG9ydC4gIENvbXB1dGUgdGhlIGlzaXpl IG9mIHRoZSByZWZlcmVuY2VkIG9iamVjdCAoaXQgY291bGQgYmUNCisJICAgICAgZHluYW1pY2Fs bHkgYWxsb2NhdGVkKS4gICovDQorCSAgIHRyZWUgb2JqID0gRFJfQkFTRV9BRERSRVNTIChkcl9y ZWYpOw0KKwkgICBpZiAoIW9iaiB8fCBUUkVFX0NPREUgKG9iaikgIT0gQUREUl9FWFBSKQ0KKwkg ICAgIHsNCisJICAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCisJCSBkdW1wX3ByaW50Zl9s b2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xvY2F0aW9uLA0KKwkJCQkgICJlYXJs eSBicmVha3Mgb25seSBzdXBwb3J0ZWQgb24gc3RhdGljYWxseSINCisJCQkJICAiIGFsbG9jYXRl ZCBvYmplY3RzLlxuIik7DQorCSAgICAgICByZXR1cm4gZmFsc2U7DQorCSAgICAgfQ0KKw0KKwkg ICB0cmVlIHJlZm9wID0gVFJFRV9PUEVSQU5EIChvYmosIDApOw0KKwkgICB0cmVlIHJlZmJhc2Ug PSBnZXRfYmFzZV9hZGRyZXNzIChyZWZvcCk7DQorCSAgIGlmICghcmVmYmFzZSB8fCAhREVDTF9Q IChyZWZiYXNlKSB8fCAhREVDTF9TSVpFIChyZWZiYXNlKQ0KKwkgICAgICAgfHwgVFJFRV9DT0RF IChERUNMX1NJWkUgKHJlZmJhc2UpKSAhPSBJTlRFR0VSX0NTVCkNCisJICAgICB7DQorCSAgICAg ICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQorCQkgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VE X09QVElNSVpBVElPTiwgdmVjdF9sb2NhdGlvbiwNCisJCQkJICAiZWFybHkgYnJlYWtzIG9ubHkg c3VwcG9ydGVkIG9uIHN0YXRpY2FsbHkiDQorCQkJCSAgIiBhbGxvY2F0ZWQgb2JqZWN0cy5cbiIp Ow0KKwkgICAgICAgcmV0dXJuIGZhbHNlOw0KKwkgICAgIH0NCisNCisJICAgaWYgKCFtb3ZlICYm IERSX0lTX1JFQUQgKGRyX3JlZikpDQorCSAgICAgew0KKwkJbG9hZHMtPnNhZmVfcHVzaCAoZGVz dCk7DQorCQliYXNlcy0+c2FmZV9wdXNoIChkcl9yZWYpOw0KKwkgICAgIH0NCisJICAgZWxzZSBp ZiAoRFJfSVNfV1JJVEUgKGRyX3JlZikpDQorCSAgICAgew0KKwkJZm9yIChhdXRvIGRyIDogYmFz ZXMpDQorCQkgIGlmIChzYW1lX2RhdGFfcmVmc19iYXNlX29iamVjdHMgKGRyLCBkcl9yZWYpKQ0K KwkJICAgIHJldHVybiBmYWxzZTsNCisJICAgICB9DQorCX0NCisNCisgICAgICBpZiAobW92ZSkN CisJew0KKwkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCisJICAgIGR1bXBfcHJpbnRmX2xvYyAo TVNHX05PVEUsIHZlY3RfbG9jYXRpb24sDQorCQkgICAgICAgICAgICAgImFuYWx5emluZyBzdG10 ICVHIiwgc3RtdCk7DQorDQorCSAgZm9yICh0cmVlIHJlZiA6IGxvYWRzKQ0KKwkgICAgaWYgKHN0 bXRfbWF5X2Nsb2JiZXJfcmVmX3AgKHN0bXQsIHJlZiwgdHJ1ZSkpDQorCSAgICAgIHsNCisJICAg ICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQorCQkgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX01J U1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRpb24sDQorCQkJCSAgICJlYXJseSBicmVha3Mg bm90IHN1cHBvcnRlZCBhcyBtZW1vcnkgdXNlZCINCisJCQkJICAgIiBtYXkgYWxpYXMuXG4iKTsN CisJICAgICAgICByZXR1cm4gZmFsc2U7DQorCSAgICAgIH0NCisJfQ0KKyAgICB9DQorDQorICBn c2lfcHJldiAoZ3N0bXQpOw0KKyAgcmV0dXJuIHZhbGlkYXRlX2Vhcmx5X2V4aXRfc3RtdHMgKGxv b3BfdmluZm8sIGNoYWluLCBsb2FkcywgYmFzZXMsIGdzdG10KTsNCit9DQorDQogLyogRnVuY3Rp b24gdmVjdF9hbmFseXplX2RhdGFfcmVmX2RlcGVuZGVuY2VzLg0KIA0KICAgIEV4YW1pbmUgYWxs IHRoZSBkYXRhIHJlZmVyZW5jZXMgaW4gdGhlIGxvb3AsIGFuZCBtYWtlIHN1cmUgdGhlcmUgZG8g bm90DQpAQCAtNjE0LDYgKzc1MiwzMiBAQCB2ZWN0X2FuYWx5emVfZGF0YV9yZWZfZGVwZW5kZW5j ZXMgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCiAJICByZXR1cm4gcmVzOw0KICAgICAgIH0N CiANCisgIC8qIElmIHdlIGhhdmUgZWFybHkgYnJlYWsgc3RhdGVtZW50cyBpbiB0aGUgbG9vcCwg Y2hlY2sgdG8gc2VlIGlmIHRoZXkNCisgICAgIGFyZSBvZiBhIGZvcm0gd2UgY2FuIHZlY3Rvcml6 ZXIuICAqLw0KKyAgaWYgKExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCisg ICAgew0KKyAgICAgIGhhc2hfc2V0PHRyZWU+IGNoYWluOw0KKyAgICAgIGF1dG9fdmVjPHRyZWU+ IGxvYWRzOw0KKyAgICAgIGF1dG9fdmVjPGRhdGFfcmVmZXJlbmNlICo+IGJhc2VzOw0KKw0KKyAg ICAgIGZvciAoZ2NvbmQgKmMgOiBMT09QX1ZJTkZPX0xPT1BfQ09ORFMgKGxvb3BfdmluZm8pKQ0K Kwl7DQorCSAgc3RtdF92ZWNfaW5mbyBsb29wX2NvbmRfaW5mbyA9IGxvb3BfdmluZm8tPmxvb2t1 cF9zdG10IChjKTsNCisJICBpZiAoU1RNVF9WSU5GT19UWVBFIChsb29wX2NvbmRfaW5mbykgIT0g bG9vcF9leGl0X2N0cmxfdmVjX2luZm9fdHlwZSkNCisJICAgIGNvbnRpbnVlOw0KKw0KKwkgIGdp bXBsZSAqc3RtdCA9IFNUTVRfVklORk9fU1RNVCAobG9vcF9jb25kX2luZm8pOw0KKwkgIGdpbXBs ZV9zdG10X2l0ZXJhdG9yIGdzaSA9IGdzaV9mb3Jfc3RtdCAoc3RtdCk7DQorDQorCSAgaWYgKCF2 YWxpZGF0ZV9lYXJseV9leGl0X3N0bXRzIChsb29wX3ZpbmZvLCAmY2hhaW4sICZsb2FkcywgJmJh c2VzLA0KKwkJCQkJICAmZ3NpKSkNCisJICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0 IChzdG10LA0KKwkJCQkgCSAgICJjYW4ndCBzYWZlbHkgYXBwbHkgY29kZSBtb3Rpb24gdG8gIg0K KwkJCQkJICAgImRlcGVuZGVuY2llcyBvZiAlRyB0byB2ZWN0b3JpemUgIg0KKwkJCQkJICAgInRo ZSBlYXJseSBleGl0LlxuIiwgc3RtdCk7DQorCX0NCisgICAgfQ0KKw0KICAgcmV0dXJuIG9wdF9y ZXN1bHQ6OnN1Y2Nlc3MgKCk7DQogfQ0KIA0KQEAgLTIwNzIsNyArMjIzNiw3IEBAIHZlY3RfZW5o YW5jZV9kYXRhX3JlZnNfYWxpZ25tZW50IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8pDQogDQog ICAvKiBDaGVjayBpZiB3ZSBjYW4gcG9zc2libHkgcGVlbCB0aGUgbG9vcC4gICovDQogICBpZiAo IXZlY3RfY2FuX2FkdmFuY2VfaXZzX3AgKGxvb3BfdmluZm8pDQotICAgICAgfHwgIXNscGVlbF9j YW5fZHVwbGljYXRlX2xvb3BfcCAobG9vcCwgc2luZ2xlX2V4aXQgKGxvb3ApKQ0KKyAgICAgIHx8 ICFzbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29wX3AgKGxvb3BfdmluZm8sIG5vcm1hbF9leGl0IChs b29wKSkNCiAgICAgICB8fCBsb29wLT5pbm5lcikNCiAgICAgZG9fcGVlbGluZyA9IGZhbHNlOw0K IA0KZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtZ2VuZXJpYy5jYyBiL2djYy90cmVlLXZlY3Qt Z2VuZXJpYy5jYw0KaW5kZXggNmFkNjM3MmM1NWVlZjk0YTc0MmE4ZmEzNWU3OWQ2NmFhMjRlMmYz Yi4uNjMyZmJmMzhkOTFjMDhmNTRlNzMxZDY5YWI1NmYyYjhjNTU0ZDQ1NiAxMDA2NDQNCi0tLSBh L2djYy90cmVlLXZlY3QtZ2VuZXJpYy5jYw0KKysrIGIvZ2NjL3RyZWUtdmVjdC1nZW5lcmljLmNj DQpAQCAtNTAwLDcgKzUwMCw3IEBAIGV4cGFuZF92ZWN0b3JfY29tcGFyaXNvbiAoZ2ltcGxlX3N0 bXRfaXRlcmF0b3IgKmdzaSwgdHJlZSB0eXBlLCB0cmVlIG9wMCwNCiAJICAgIH0NCiAJICB0ID0g Z2ltcGxpZnlfYnVpbGQxIChnc2ksIFZJRVdfQ09OVkVSVF9FWFBSLCB0eXBlLCB0KTsNCiAJfQ0K LSAgICAgIGVsc2UNCisgICAgICBlbHNlIGlmIChUWVBFX1ZFQ1RPUl9TVUJQQVJUUyAodHlwZSku aXNfY29uc3RhbnQgKCkpDQogCXQgPSBleHBhbmRfdmVjdG9yX3BpZWNld2lzZSAoZ3NpLCBkb19j b21wYXJlLCB0eXBlLA0KIAkJCQkgICAgIFRSRUVfVFlQRSAoVFJFRV9UWVBFIChvcDApKSwgb3Aw LCBvcDEsDQogCQkJCSAgICAgY29kZSwgZmFsc2UpOw0KZGlmZiAtLWdpdCBhL2djYy90cmVlLXZl Y3QtbG9vcC1tYW5pcC5jYyBiL2djYy90cmVlLXZlY3QtbG9vcC1tYW5pcC5jYw0KaW5kZXggMWQ5 NjEzMGM5ODVlMmRlZmQxNDFjZmRmNjAyMjI0YzczYjRiNDFmMi4uMmIxMjFiMGM0NGVhNjliMGFm OTNmNTJmZDg1OTZmNTQ5NTg2NzEyNSAxMDA2NDQNCi0tLSBhL2djYy90cmVlLXZlY3QtbG9vcC1t YW5pcC5jYw0KKysrIGIvZ2NjL3RyZWUtdmVjdC1sb29wLW1hbmlwLmNjDQpAQCAtNzcwLDcgKzc3 MCw3IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX3BhcnRpYWxfdmVjdG9ycyAoY2xhc3MgbG9v cCAqbG9vcCwNCiAgIGFkZF9oZWFkZXJfc2VxIChsb29wLCBoZWFkZXJfc2VxKTsNCiANCiAgIC8q IEdldCBhIGJvb2xlYW4gcmVzdWx0IHRoYXQgdGVsbHMgdXMgd2hldGhlciB0byBpdGVyYXRlLiAg Ki8NCi0gIGVkZ2UgZXhpdF9lZGdlID0gc2luZ2xlX2V4aXQgKGxvb3ApOw0KKyAgZWRnZSBleGl0 X2VkZ2UgPSBub3JtYWxfZXhpdCAobG9vcCk7DQogICB0cmVlX2NvZGUgY29kZSA9IChleGl0X2Vk Z2UtPmZsYWdzICYgRURHRV9UUlVFX1ZBTFVFKSA/IEVRX0VYUFIgOiBORV9FWFBSOw0KICAgdHJl ZSB6ZXJvX2N0cmwgPSBidWlsZF96ZXJvX2NzdCAoVFJFRV9UWVBFICh0ZXN0X2N0cmwpKTsNCiAg IGdjb25kICpjb25kX3N0bXQgPSBnaW1wbGVfYnVpbGRfY29uZCAoY29kZSwgdGVzdF9jdHJsLCB6 ZXJvX2N0cmwsDQpAQCAtNzg5LDcgKzc4OSw3IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX3Bh cnRpYWxfdmVjdG9ycyAoY2xhc3MgbG9vcCAqbG9vcCwNCiAgIGlmIChmaW5hbF9pdikNCiAgICAg ew0KICAgICAgIGdhc3NpZ24gKmFzc2lnbiA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKGZpbmFsX2l2 LCBvcmlnX25pdGVycyk7DQotICAgICAgZ3NpX2luc2VydF9vbl9lZGdlX2ltbWVkaWF0ZSAoc2lu Z2xlX2V4aXQgKGxvb3ApLCBhc3NpZ24pOw0KKyAgICAgIGdzaV9pbnNlcnRfb25fZWRnZV9pbW1l ZGlhdGUgKGV4aXRfZWRnZSwgYXNzaWduKTsNCiAgICAgfQ0KIA0KICAgcmV0dXJuIGNvbmRfc3Rt dDsNCkBAIC03OTksNyArNzk5LDggQEAgdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fcGFydGlhbF92 ZWN0b3JzIChjbGFzcyBsb29wICpsb29wLA0KICAgIGxvb3AgaGFuZGxlcyBleGFjdGx5IFZGIHNj YWxhcnMgcGVyIGl0ZXJhdGlvbi4gICovDQogDQogc3RhdGljIGdjb25kICoNCi12ZWN0X3NldF9s b29wX2NvbmRpdGlvbl9ub3JtYWwgKGNsYXNzIGxvb3AgKmxvb3AsIHRyZWUgbml0ZXJzLCB0cmVl IHN0ZXAsDQordmVjdF9zZXRfbG9vcF9jb25kaXRpb25fbm9ybWFsIChsb29wX3ZlY19pbmZvIGxv b3BfdmluZm8sDQorCQkJCWNsYXNzIGxvb3AgKmxvb3AsIHRyZWUgbml0ZXJzLCB0cmVlIHN0ZXAs DQogCQkJCXRyZWUgZmluYWxfaXYsIGJvb2wgbml0ZXJzX21heWJlX3plcm8sDQogCQkJCWdpbXBs ZV9zdG10X2l0ZXJhdG9yIGxvb3BfY29uZF9nc2kpDQogew0KQEAgLTgwNyw3ICs4MDgsNyBAQCB2 ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9ub3JtYWwgKGNsYXNzIGxvb3AgKmxvb3AsIHRyZWUgbml0 ZXJzLCB0cmVlIHN0ZXAsDQogICBnY29uZCAqY29uZF9zdG10Ow0KICAgZ2NvbmQgKm9yaWdfY29u ZDsNCiAgIGVkZ2UgcGUgPSBsb29wX3ByZWhlYWRlcl9lZGdlIChsb29wKTsNCi0gIGVkZ2UgZXhp dF9lZGdlID0gc2luZ2xlX2V4aXQgKGxvb3ApOw0KKyAgZWRnZSBleGl0X2VkZ2UgPSBub3JtYWxf ZXhpdCAobG9vcCk7DQogICBnaW1wbGVfc3RtdF9pdGVyYXRvciBpbmNyX2dzaTsNCiAgIGJvb2wg aW5zZXJ0X2FmdGVyOw0KICAgZW51bSB0cmVlX2NvZGUgY29kZTsNCkBAIC04NzIsNyArODczLDEx IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX25vcm1hbCAoY2xhc3MgbG9vcCAqbG9vcCwgdHJl ZSBuaXRlcnMsIHRyZWUgc3RlcCwNCiAJIEluIGJvdGggY2FzZXMgdGhlIGxvb3AgbGltaXQgaXMg TklURVJTIC0gU1RFUC4gICovDQogICAgICAgZ2ltcGxlX3NlcSBzZXEgPSBOVUxMOw0KICAgICAg IGxpbWl0ID0gZm9yY2VfZ2ltcGxlX29wZXJhbmQgKG5pdGVycywgJnNlcSwgdHJ1ZSwgTlVMTF9U UkVFKTsNCi0gICAgICBsaW1pdCA9IGdpbXBsZV9idWlsZCAoJnNlcSwgTUlOVVNfRVhQUiwgVFJF RV9UWVBFIChsaW1pdCksIGxpbWl0LCBzdGVwKTsNCisgICAgICAvKiBGb3IgVkxBIGxlYXZlIGxp bWl0ID09IG5pdGVycy4gIFRob3VnaCBJIHdvbmRlciBpZiBtYXliZSBJIHNob3VsZA0KKwkgZm9y Y2UgcGFydGlhbCBsb29wcyBoZXJlIGFuZCB1c2UgdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fcGFy dGlhbF92ZWN0b3JzDQorCSBpbnN0ZWFkLiAgVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgVkwgY2hl Y2sgaXMgdXNlbGVzcyBoZXJlLiAgKi8NCisgICAgICBpZiAoIUxPT1BfVklORk9fRUFSTFlfQlJF QUtTIChsb29wX3ZpbmZvKSAmJiAhTE9PUF9WSU5GT19OSVRFUlNfS05PV05fUCAobG9vcF92aW5m bykpDQorCWxpbWl0ID0gZ2ltcGxlX2J1aWxkICgmc2VxLCBNSU5VU19FWFBSLCBUUkVFX1RZUEUg KGxpbWl0KSwgbGltaXQsIHN0ZXApOw0KICAgICAgIGlmIChzZXEpDQogCXsNCiAJICBiYXNpY19i bG9jayBuZXdfYmIgPSBnc2lfaW5zZXJ0X3NlcV9vbl9lZGdlX2ltbWVkaWF0ZSAocGUsIHNlcSk7 DQpAQCAtOTA3LDcgKzkxMiw4IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX25vcm1hbCAoY2xh c3MgbG9vcCAqbG9vcCwgdHJlZSBuaXRlcnMsIHRyZWUgc3RlcCwNCiAgIGdzaV9pbnNlcnRfYmVm b3JlICgmbG9vcF9jb25kX2dzaSwgY29uZF9zdG10LCBHU0lfU0FNRV9TVE1UKTsNCiANCiAgIC8q IFJlY29yZCB0aGUgbnVtYmVyIG9mIGxhdGNoIGl0ZXJhdGlvbnMuICAqLw0KLSAgaWYgKGxpbWl0 ID09IG5pdGVycykNCisgIGlmIChsaW1pdCA9PSBuaXRlcnMNCisgICAgICB8fCBMT09QX1ZJTkZP X0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpDQogICAgIC8qIENhc2UgQTogdGhlIGxvb3AgaXRl cmF0ZXMgTklURVJTIHRpbWVzLiAgU3VidHJhY3Qgb25lIHRvIGdldCB0aGUNCiAgICAgICAgbGF0 Y2ggY291bnQuICAqLw0KICAgICBsb29wLT5uYl9pdGVyYXRpb25zID0gZm9sZF9idWlsZDIgKE1J TlVTX0VYUFIsIG5pdGVyc190eXBlLCBuaXRlcnMsDQpAQCAtOTE4LDEwICs5MjQsMTcgQEAgdmVj dF9zZXRfbG9vcF9jb25kaXRpb25fbm9ybWFsIChjbGFzcyBsb29wICpsb29wLCB0cmVlIG5pdGVy cywgdHJlZSBzdGVwLA0KICAgICBsb29wLT5uYl9pdGVyYXRpb25zID0gZm9sZF9idWlsZDIgKFRS VU5DX0RJVl9FWFBSLCBuaXRlcnNfdHlwZSwNCiAJCQkJICAgICAgIGxpbWl0LCBzdGVwKTsNCiAN Ci0gIGlmIChmaW5hbF9pdikNCisgIGF1dG9fdmVjPGVkZ2U+IGV4aXRzID0gZ2V0X2xvb3BfZXhp dF9lZGdlcyAobG9vcCk7DQorICAvKiBGb3IgbXVsdGlwbGUgZXhpdHMgd2UndmUgYWxyZWFkeSBt YWludGFpbmVkIExDU1NBIGZvcm0gYW5kIGhhbmRsZWQNCisgICAgIHRoZSBzY2FsYXIgaXRlcmF0 aW9uIHVwZGF0ZSBpbiB0aGUgY29kZSB0aGF0IGRlYWxzIHdpdGggdGhlIG1lcmdlDQorICAgICBi bG9jayBhbmQgaXRzIHVwZGF0ZWQgZ3VhcmQuICBJIGNvdWxkIG1vdmUgdGhhdCBjb2RlIGhlcmUg aW5zdGVhZA0KKyAgICAgb2YgaW4gdmVjdF91cGRhdGVfaXZzX2FmdGVyX2Vhcmx5X2JyZWFrIGJ1 dCBJIGhhdmUgdG8gc3RpbGwgZGVhbA0KKyAgICAgd2l0aCB0aGUgdXBkYXRlcyB0byB0aGUgY291 bnRlciBgaWAuICBTbyBmb3Igbm93IEknbGwga2VlcCB0aGVtDQorICAgICB0b2dldGhlci4gICov DQorICBpZiAoZmluYWxfaXYgJiYgZXhpdHMubGVuZ3RoICgpID09IDEpDQogICAgIHsNCiAgICAg ICBnYXNzaWduICphc3NpZ247DQotICAgICAgZWRnZSBleGl0ID0gc2luZ2xlX2V4aXQgKGxvb3Ap Ow0KKyAgICAgIGVkZ2UgZXhpdCA9IG5vcm1hbF9leGl0IChsb29wKTsNCiAgICAgICBnY2NfYXNz ZXJ0IChzaW5nbGVfcHJlZF9wIChleGl0LT5kZXN0KSk7DQogICAgICAgdHJlZSBwaGlfZGVzdA0K IAk9IGludGVnZXJfemVyb3AgKGluaXQpID8gZmluYWxfaXYgOiBjb3B5X3NzYV9uYW1lIChpbmR4 X2FmdGVyX2luY3IpOw0KQEAgLTk3MiwxMyArOTg1LDE1IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0 aW9uIChjbGFzcyBsb29wICpsb29wLCBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQogICBnY29u ZCAqb3JpZ19jb25kID0gZ2V0X2xvb3BfZXhpdF9jb25kaXRpb24gKGxvb3ApOw0KICAgZ2ltcGxl X3N0bXRfaXRlcmF0b3IgbG9vcF9jb25kX2dzaSA9IGdzaV9mb3Jfc3RtdCAob3JpZ19jb25kKTsN CiANCi0gIGlmIChsb29wX3ZpbmZvICYmIExPT1BfVklORk9fVVNJTkdfUEFSVElBTF9WRUNUT1JT X1AgKGxvb3BfdmluZm8pKQ0KKyAgaWYgKGxvb3BfdmluZm8NCisgICAgICAmJiBMT09QX1ZJTkZP X1VTSU5HX1BBUlRJQUxfVkVDVE9SU19QIChsb29wX3ZpbmZvKSkNCiAgICAgY29uZF9zdG10ID0g dmVjdF9zZXRfbG9vcF9jb25kaXRpb25fcGFydGlhbF92ZWN0b3JzIChsb29wLCBsb29wX3ZpbmZv LA0KIAkJCQkJCQkgbml0ZXJzLCBmaW5hbF9pdiwNCiAJCQkJCQkJIG5pdGVyc19tYXliZV96ZXJv LA0KIAkJCQkJCQkgbG9vcF9jb25kX2dzaSk7DQogICBlbHNlDQotICAgIGNvbmRfc3RtdCA9IHZl Y3Rfc2V0X2xvb3BfY29uZGl0aW9uX25vcm1hbCAobG9vcCwgbml0ZXJzLCBzdGVwLCBmaW5hbF9p diwNCisgICAgY29uZF9zdG10ID0gdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fbm9ybWFsIChsb29w X3ZpbmZvLCBsb29wLCBuaXRlcnMsDQorCQkJCQkJc3RlcCwgZmluYWxfaXYsDQogCQkJCQkJbml0 ZXJzX21heWJlX3plcm8sDQogCQkJCQkJbG9vcF9jb25kX2dzaSk7DQogDQpAQCAtMTA2Niw3ICsx MDgxLDcgQEAgc2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcgKGNsYXNzIGxv b3AgKmxvb3AsDQogICBlZGdlIGV4aXQsIG5ld19leGl0Ow0KICAgYm9vbCBkdXBsaWNhdGVfb3V0 ZXJfbG9vcCA9IGZhbHNlOw0KIA0KLSAgZXhpdCA9IHNpbmdsZV9leGl0IChsb29wKTsNCisgIGV4 aXQgPSBub3JtYWxfZXhpdCAobG9vcCk7DQogICBhdF9leGl0ID0gKGUgPT0gZXhpdCk7DQogICBp ZiAoIWF0X2V4aXQgJiYgZSAhPSBsb29wX3ByZWhlYWRlcl9lZGdlIChsb29wKSkNCiAgICAgcmV0 dXJuIE5VTEw7DQpAQCAtMTEwNCwxMSArMTExOSwxMSBAQCBzbHBlZWxfdHJlZV9kdXBsaWNhdGVf bG9vcF90b19lZGdlX2NmZyAoY2xhc3MgbG9vcCAqbG9vcCwNCiAgIGJic1swXSA9IHByZWhlYWRl cjsNCiAgIG5ld19iYnMgPSBYTkVXVkVDIChiYXNpY19ibG9jaywgc2NhbGFyX2xvb3AtPm51bV9u b2RlcyArIDEpOw0KIA0KLSAgZXhpdCA9IHNpbmdsZV9leGl0IChzY2FsYXJfbG9vcCk7DQorICBl eGl0ID0gbm9ybWFsX2V4aXQgKHNjYWxhcl9sb29wKTsNCiAgIGNvcHlfYmJzIChiYnMsIHNjYWxh cl9sb29wLT5udW1fbm9kZXMgKyAxLCBuZXdfYmJzLA0KIAkgICAgJmV4aXQsIDEsICZuZXdfZXhp dCwgTlVMTCwNCiAJICAgIGF0X2V4aXQgPyBsb29wLT5sYXRjaCA6IGUtPnNyYywgdHJ1ZSk7DQot ICBleGl0ID0gc2luZ2xlX2V4aXQgKGxvb3ApOw0KKyAgZXhpdCA9IG5vcm1hbF9leGl0IChsb29w KTsNCiAgIGJhc2ljX2Jsb2NrIG5ld19wcmVoZWFkZXIgPSBuZXdfYmJzWzBdOw0KIA0KICAgLyog QmVmb3JlIGluc3RhbGxpbmcgUEhJIGFyZ3VtZW50cyBtYWtlIHN1cmUgdGhhdCB0aGUgZWRnZXMN CkBAIC0xMTc2LDEwICsxMTkxLDMwIEBAIHNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2Vk Z2VfY2ZnIChjbGFzcyBsb29wICpsb29wLA0KIAkgICAgICBhZGRfcGhpX2FyZyAocGhpLCBvcmln X2FyZywgbmV3X2V4aXQsIG9yaWdfbG9jdXMpOw0KIAkgICAgfQ0KIAl9DQorDQorICAgICAgLyog aWYgaGF2ZSBtdWx0aXBsZSBleGlzdCwgd2Ugbm93IG5lZWQgdG8gcG9pbnQgdGhlIGFkZGl0aW9u YWwgZXhpdHMNCisJIGZyb20gdGhlIG9sZCBsb29wIHRvIHRoZSBsb29wIHByZS1oZWFkZXIgb2Yg dGhlIG5ldyBjb3BpZWQgbG9vcC4NCisJIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgc2ltcGxl IGVhcmx5IGJyZWFrIHZlY3Rvcml6YXRpb24gc28gYWxsDQorCSBhZGRpdGlvbmFsIGV4aXRzIG11 c3QgZXhpdCB0aGUgbG9vcC4gQWRkaXRpb25hbGx5IHdlIGNhbiBvbmx5IHBsYWNlDQorCSBjb3Bp ZXMgYXQgdGhlIGVuZC4gIGkuZS4gd2UgY2Fubm90IGRvIHByb2xvZ3VlIHBlZWxpbmcuICAqLw0K KyAgICAgIGF1dG9fdmVjPGVkZ2U+IGV4aXRzID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7 DQorICAgICAgYm9vbCBtdWx0aXBsZV9leGl0c19wID0gZXhpdHMubGVuZ3RoICgpID4gMTsNCisN CisgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZXhpdHMubGVuZ3RoICgpOyBpKyspDQor CXsNCisJICByZWRpcmVjdF9lZGdlX2FuZF9icmFuY2ggKGV4aXRzW2ldLCBuZXdfcHJlaGVhZGVy KTsNCisJICBmbHVzaF9wZW5kaW5nX3N0bXRzIChleGl0c1tpXSk7DQorCX0NCisNCisgICAgICAv KiBNYWluIGV4aXQgbXVzdCBiZSB0aGUgbGFzdCB0byBiZSByZXdyaXR0ZW4gYXMgaXQncyB0aGUg Zmlyc3QgcGhpIG5vZGUNCisJIGVudHJ5LiAgVGhlIHJlc3QgYXJlIGluIGFycmF5IG9yZGVyLiAg Ki8NCiAgICAgICByZWRpcmVjdF9lZGdlX2FuZF9icmFuY2hfZm9yY2UgKGUsIG5ld19wcmVoZWFk ZXIpOw0KICAgICAgIGZsdXNoX3BlbmRpbmdfc3RtdHMgKGUpOw0KKw0KICAgICAgIHNldF9pbW1l ZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgbmV3X3ByZWhlYWRlciwgZS0+c3JjKTsN Ci0gICAgICBpZiAod2FzX2ltbV9kb20gfHwgZHVwbGljYXRlX291dGVyX2xvb3ApDQorDQorICAg ICAgYXV0b192ZWM8ZWRnZT4gbmV3X2V4aXRzID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAobmV3X2xv b3ApOw0KKyAgICAgIGlmICgod2FzX2ltbV9kb20gfHwgZHVwbGljYXRlX291dGVyX2xvb3ApICYm ICFtdWx0aXBsZV9leGl0c19wKQ0KIAlzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlO QVRPUlMsIGV4aXRfZGVzdCwgbmV3X2V4aXQtPnNyYyk7DQogDQogICAgICAgLyogQW5kIHJlbW92 ZSB0aGUgbm9uLW5lY2Vzc2FyeSBmb3J3YXJkZXIgYWdhaW4uICBLZWVwIHRoZSBvdGhlcg0KQEAg LTExODksNiArMTIyNCwyMyBAQCBzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2Nm ZyAoY2xhc3MgbG9vcCAqbG9vcCwNCiAgICAgICBkZWxldGVfYmFzaWNfYmxvY2sgKHByZWhlYWRl cik7DQogICAgICAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBzY2Fs YXJfbG9vcC0+aGVhZGVyLA0KIAkJCSAgICAgICBsb29wX3ByZWhlYWRlcl9lZGdlIChzY2FsYXJf bG9vcCktPnNyYyk7DQorDQorICAgICAgLyogRmluYWxseSBhZnRlciB3aXJpbmcgdGhlIG5ldyBl cGlsb2d1ZSB3ZSBuZWVkIHRvIHVwZGF0ZSBpdHMgbWFpbiBleGl0DQorCSB0byB0aGUgb3JpZ2lu YWwgZnVuY3Rpb24gZXhpdCB3ZSByZWNvcmRlZC4gIE90aGVyIGV4aXRzIGFyZSBhbHJlYWR5DQor CSBjb3JyZWN0LiAgKi8NCisgICAgICBpZiAobXVsdGlwbGVfZXhpdHNfcCkNCisJew0KKwkgIGF1 dG9fdmVjPGJhc2ljX2Jsb2NrPiBkb21zOw0KKwkgIGZvciAoZWRnZSBlIDogZXhpdHMpDQorCSAg ICBkb21zLnNhZmVfcHVzaCAoZS0+ZGVzdCk7DQorCSAgZm9yIChlZGdlIGUgOiBuZXdfZXhpdHMp DQorCSAgICBkb21zLnNhZmVfcHVzaCAoZS0+ZGVzdCk7DQorCSAgZG9tcy5zYWZlX3B1c2ggKGV4 aXRfZGVzdCk7DQorCSAgLyogTGlrZWx5IGEgZmFsbC10aHJvdWdoIGVkZ2UsIHNvIHVwZGF0ZSBp ZiBuZWVkZWQuICAqLw0KKwkgIGlmIChzaW5nbGVfc3VjY19wIChleGl0X2Rlc3QpKQ0KKwkgICAg ZG9tcy5zYWZlX3B1c2ggKHNpbmdsZV9zdWNjIChleGl0X2Rlc3QpKTsNCisJICBpdGVyYXRlX2Zp eF9kb21pbmF0b3JzIChDRElfRE9NSU5BVE9SUywgZG9tcywgZmFsc2UpOw0KKwl9DQogICAgIH0N CiAgIGVsc2UgLyogQWRkIHRoZSBjb3B5IGF0IGVudHJ5LiAgKi8NCiAgICAgew0KQEAgLTEzMTAs MjAgKzEzNjIsMjQgQEAgc2xwZWVsX2FkZF9sb29wX2d1YXJkIChiYXNpY19ibG9jayBndWFyZF9i YiwgdHJlZSBjb25kLA0KICAqLw0KIA0KIGJvb2wNCi1zbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29w X3AgKGNvbnN0IGNsYXNzIGxvb3AgKmxvb3AsIGNvbnN0X2VkZ2UgZSkNCitzbHBlZWxfY2FuX2R1 cGxpY2F0ZV9sb29wX3AgKGNvbnN0IGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgY29uc3RfZWRn ZSBlKQ0KIHsNCi0gIGVkZ2UgZXhpdF9lID0gc2luZ2xlX2V4aXQgKGxvb3ApOw0KKyAgY2xhc3Mg bG9vcCAqbG9vcCA9IExPT1BfVklORk9fTE9PUCAobG9vcF92aW5mbyk7DQorICBlZGdlIGV4aXRf ZSA9IG5vcm1hbF9leGl0IChsb29wKTsNCiAgIGVkZ2UgZW50cnlfZSA9IGxvb3BfcHJlaGVhZGVy X2VkZ2UgKGxvb3ApOw0KICAgZ2NvbmQgKm9yaWdfY29uZCA9IGdldF9sb29wX2V4aXRfY29uZGl0 aW9uIChsb29wKTsNCiAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGxvb3BfZXhpdF9nc2kgPSBnc2lf bGFzdF9iYiAoZXhpdF9lLT5zcmMpOw0KICAgdW5zaWduZWQgaW50IG51bV9iYiA9IGxvb3AtPmlu bmVyPyA1IDogMjsNCiANCisgIGlmIChMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5m bykpDQorICAgIG51bV9iYiArPSAxOw0KKw0KICAgLyogQWxsIGxvb3BzIGhhdmUgYW4gb3V0ZXIg c2NvcGU7IHRoZSBvbmx5IGNhc2UgbG9vcC0+b3V0ZXIgaXMgTlVMTCBpcyBmb3INCiAgICAgIHRo ZSBmdW5jdGlvbiBpdHNlbGYuICAqLw0KICAgaWYgKCFsb29wX291dGVyIChsb29wKQ0KICAgICAg IHx8IGxvb3AtPm51bV9ub2RlcyAhPSBudW1fYmINCiAgICAgICB8fCAhZW1wdHlfYmxvY2tfcCAo bG9vcC0+bGF0Y2gpDQotICAgICAgfHwgIXNpbmdsZV9leGl0IChsb29wKQ0KKyAgICAgIHx8ICgh c2luZ2xlX2V4aXQgKGxvb3ApICYmICFMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5m bykpDQogICAgICAgLyogVmVyaWZ5IHRoYXQgbmV3IGxvb3AgZXhpdCBjb25kaXRpb24gY2FuIGJl IHRyaXZpYWxseSBtb2RpZmllZC4gICovDQogICAgICAgfHwgKCFvcmlnX2NvbmQgfHwgb3JpZ19j b25kICE9IGdzaV9zdG10IChsb29wX2V4aXRfZ3NpKSkNCiAgICAgICB8fCAoZSAhPSBleGl0X2Ug JiYgZSAhPSBlbnRyeV9lKSkNCkBAIC0xNTI4LDYgKzE1ODQsMTIgQEAgdmVjdF91cGRhdGVfaXZz X2FmdGVyX3ZlY3Rvcml6ZXIgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCiAgIGdwaGlfaXRl cmF0b3IgZ3NpLCBnc2kxOw0KICAgY2xhc3MgbG9vcCAqbG9vcCA9IExPT1BfVklORk9fTE9PUCAo bG9vcF92aW5mbyk7DQogICBiYXNpY19ibG9jayB1cGRhdGVfYmIgPSB1cGRhdGVfZS0+ZGVzdDsN CisNCisgIC8qIEZvciBlYXJseSBleGl0cyB3ZSdsbCB1cGRhdGUgdGhlIElWcyBpbg0KKyAgICAg dmVjdF91cGRhdGVfaXZzX2FmdGVyX2Vhcmx5X2JyZWFrLiAgKi8NCisgIGlmIChMT09QX1ZJTkZP X0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpDQorICAgIHJldHVybjsNCisNCiAgIGJhc2ljX2Js b2NrIGV4aXRfYmIgPSBzaW5nbGVfZXhpdCAobG9vcCktPmRlc3Q7DQogDQogICAvKiBNYWtlIHN1 cmUgdGhlcmUgZXhpc3RzIGEgc2luZ2xlLXByZWRlY2Vzc29yIGV4aXQgYmI6ICAqLw0KQEAgLTE2 MTMsNiArMTY3NSwxODYgQEAgdmVjdF91cGRhdGVfaXZzX2FmdGVyX3ZlY3Rvcml6ZXIgKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbywNCiAgICAgICAvKiBGaXggcGhpIGV4cHJlc3Npb25zIGluIHRo ZSBzdWNjZXNzb3IgYmIuICAqLw0KICAgICAgIGFkanVzdF9waGlfYW5kX2RlYnVnX3N0bXRzIChw aGkxLCB1cGRhdGVfZSwgbmlfbmFtZSk7DQogICAgIH0NCisgIHJldHVybjsNCit9DQorDQorLyog ICBGdW5jdGlvbiB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfZWFybHlfYnJlYWsuDQorDQorICAgICAi QWR2YW5jZSIgdGhlIGluZHVjdGlvbiB2YXJpYWJsZXMgb2YgTE9PUCB0byB0aGUgdmFsdWUgdGhl eSBzaG91bGQgdGFrZQ0KKyAgICAgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiBMT09QLiAgVGhpcyBp cyBjdXJyZW50bHkgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlDQorICAgICB2ZWN0b3JpemVyIGRvZXMg bm90IGhhbmRsZSBpbmR1Y3Rpb24gdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgYWZ0ZXIgdGhlDQor ICAgICBsb29wLiAgU3VjaCBhIHNpdHVhdGlvbiBvY2N1cnMgd2hlbiB0aGUgbGFzdCBpdGVyYXRp b25zIG9mIExPT1AgYXJlDQorICAgICBwZWVsZWQsIGJlY2F1c2Ugb2YgdGhlIGVhcmx5IGV4aXQu ICBXaXRoIGFuIGVhcmx5IGV4aXQgd2UgYWx3YXlzIHBlZWwgdGhlDQorICAgICBsb29wLg0KKw0K KyAgICAgSW5wdXQ6DQorICAgICAtIExPT1BfVklORk8gLSBhIGxvb3AgaW5mbyBzdHJ1Y3R1cmUg Zm9yIHRoZSBsb29wIHRoYXQgaXMgZ29pbmcgdG8gYmUNCisJCSAgICB2ZWN0b3JpemVkLiBUaGUg bGFzdCBmZXcgaXRlcmF0aW9ucyBvZiBMT09QIHdlcmUgcGVlbGVkLg0KKyAgICAgLSBMT09QIC0g YSBsb29wIHRoYXQgaXMgZ29pbmcgdG8gYmUgdmVjdG9yaXplZC4gVGhlIGxhc3QgZmV3IGl0ZXJh dGlvbnMNCisJICAgICAgb2YgTE9PUCB3ZXJlIHBlZWxlZC4NCisgICAgIC0gVkYgLSBUaGUgbG9v cCB2ZWN0b3JpemF0aW9uIGZhY3Rvci4NCisgICAgIC0gTklURVJTX09SSUcgLSB0aGUgbnVtYmVy IG9mIGl0ZXJhdGlvbnMgdGhhdCBMT09QIGV4ZWN1dGVzIChiZWZvcmUgaXQgaXMNCisJCSAgICAg dmVjdG9yaXplZCkuIGkuZSwgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgaXZzIHNob3VsZCBiZQ0K KwkJICAgICBidW1wZWQuDQorICAgICAtIE5JVEVSU19WRUNUT1IgLSBUaGUgbnVtYmVyIG9mIGl0 ZXJhdGlvbnMgdGhhdCB0aGUgdmVjdG9yIExPT1AgZXhlY3V0ZXMuDQorICAgICAtIFVQREFURV9F IC0gYSBzdWNjZXNzb3IgZWRnZSBvZiBMT09QLT5leGl0IHRoYXQgaXMgb24gdGhlIChvbmx5KSBw YXRoDQorCQkgIGNvbWluZyBvdXQgZnJvbSBMT09QIG9uIHdoaWNoIHRoZXJlIGFyZSB1c2VzIG9m IHRoZSBMT09QIGl2cw0KKwkJICAodGhpcyBpcyB0aGUgcGF0aCBmcm9tIExPT1AtPmV4aXQgdG8g ZXBpbG9nX2xvb3AtPnByZWhlYWRlcikuDQorDQorCQkgIFRoZSBuZXcgZGVmaW5pdGlvbnMgb2Yg dGhlIGl2cyBhcmUgcGxhY2VkIGluIExPT1AtPmV4aXQuDQorCQkgIFRoZSBwaGkgYXJncyBhc3Nv Y2lhdGVkIHdpdGggdGhlIGVkZ2UgVVBEQVRFX0UgaW4gdGhlIGJiDQorCQkgIFVQREFURV9FLT5k ZXN0IGFyZSB1cGRhdGVkIGFjY29yZGluZ2x5Lg0KKw0KKyAgICAgT3V0cHV0Og0KKyAgICAgICAt IElmIGF2YWlsYWJsZSwgdGhlIExDU1NBIHBoaSBub2RlIGZvciB0aGUgbG9vcCBJViB0ZW1wLg0K Kw0KKyAgICAgQXNzdW1wdGlvbiAxOiBMaWtlIHRoZSByZXN0IG9mIHRoZSB2ZWN0b3JpemVyLCB0 aGlzIGZ1bmN0aW9uIGFzc3VtZXMNCisgICAgIGEgc2luZ2xlIGxvb3AgZXhpdCB0aGF0IGhhcyBh IHNpbmdsZSBwcmVkZWNlc3Nvci4NCisNCisgICAgIEFzc3VtcHRpb24gMjogVGhlIHBoaSBub2Rl cyBpbiB0aGUgTE9PUCBoZWFkZXIgYW5kIGluIHVwZGF0ZV9iYiBhcmUNCisgICAgIG9yZ2FuaXpl ZCBpbiB0aGUgc2FtZSBvcmRlci4NCisNCisgICAgIEFzc3VtcHRpb24gMzogVGhlIGFjY2VzcyBm dW5jdGlvbiBvZiB0aGUgaXZzIGlzIHNpbXBsZSBlbm91Z2ggKHNlZQ0KKyAgICAgdmVjdF9jYW5f YWR2YW5jZV9pdnNfcCkuICBUaGlzIGFzc3VtcHRpb24gd2lsbCBiZSByZWxheGVkIGluIHRoZSBm dXR1cmUuDQorDQorICAgICBBc3N1bXB0aW9uIDQ6IEV4YWN0bHkgb25lIG9mIHRoZSBzdWNjZXNz b3JzIG9mIExPT1AgZXhpdC1iYiBpcyBvbiBhIHBhdGgNCisgICAgIGNvbWluZyBvdXQgb2YgTE9P UCBvbiB3aGljaCB0aGUgaXZzIG9mIExPT1AgYXJlIHVzZWQgKHRoaXMgaXMgdGhlIHBhdGgNCisg ICAgIHRoYXQgbGVhZHMgdG8gdGhlIGVwaWxvZyBsb29wOyBvdGhlciBwYXRocyBza2lwIHRoZSBl cGlsb2cgbG9vcCkuICBUaGlzDQorICAgICBwYXRoIHN0YXJ0cyB3aXRoIHRoZSBlZGdlIFVQREFU RV9FLCBhbmQgaXRzIGRlc3RpbmF0aW9uIChkZW5vdGVkIHVwZGF0ZV9iYikNCisgICAgIG5lZWRz IHRvIGhhdmUgaXRzIHBoaXMgdXBkYXRlZC4NCisgKi8NCisNCitzdGF0aWMgdHJlZQ0KK3ZlY3Rf dXBkYXRlX2l2c19hZnRlcl9lYXJseV9icmVhayAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBj bGFzcyBsb29wICosDQorCQkJCSAgIHBvbHlfaW50NjQgdmYsIHRyZWUgbml0ZXJzX29yaWcsDQor CQkJCSAgIHRyZWUgbml0ZXJzX3ZlY3RvciwgZWRnZSB1cGRhdGVfZSkNCit7DQorICBncGhpX2l0 ZXJhdG9yIGdzaSwgZ3NpMTsNCisgIHRyZWUgbmlfbmFtZSwgaXZ0bXAgPSBOVUxMOw0KKyAgY2xh c3MgbG9vcCAqbG9vcCA9IExPT1BfVklORk9fTE9PUCAobG9vcF92aW5mbyk7DQorICBiYXNpY19i bG9jayB1cGRhdGVfYmIgPSB1cGRhdGVfZS0+ZGVzdDsNCisgIGF1dG9fdmVjPGVkZ2U+IGV4aXRz ID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7DQorDQorICBiYXNpY19ibG9jayBleGl0X2Ji ID0gZXhpdHNbMF0tPmRlc3Q7DQorDQorICBpZiAoIUxPT1BfVklORk9fRUFSTFlfQlJFQUtTIChs b29wX3ZpbmZvKSkNCisgICAgcmV0dXJuIE5VTEw7DQorDQorICBmb3IgKGdzaSA9IGdzaV9zdGFy dF9waGlzIChsb29wLT5oZWFkZXIpLCBnc2kxID0gZ3NpX3N0YXJ0X3BoaXMgKHVwZGF0ZV9iYik7 DQorICAgICAgICFnc2lfZW5kX3AgKGdzaSkgJiYgIWdzaV9lbmRfcCAoZ3NpMSk7DQorICAgICAg IGdzaV9uZXh0ICgmZ3NpKSwgZ3NpX25leHQgKCZnc2kxKSkNCisgICAgew0KKyAgICAgIHRyZWUg aW5pdF9leHByOw0KKyAgICAgIHRyZWUgc3RlcF9leHByOw0KKyAgICAgIHRyZWUgdHlwZTsNCisg ICAgICB0cmVlIHZhciwgbmk7DQorICAgICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgbGFzdF9nc2k7 DQorDQorICAgICAgZ3BoaSAqcGhpID0gZ3NpMS5waGkgKCk7DQorICAgICAgdHJlZSBwaGlfc3Nh ID0gUEhJX0FSR19ERUZfRlJPTV9FREdFIChwaGksIGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3Ap KTsNCisgICAgICBncGhpICpwaGkxID0gYXNfYSA8Z3BoaSAqPiAoU1NBX05BTUVfREVGX1NUTVQg KHBoaV9zc2EpKTsNCisgICAgICBzdG10X3ZlY19pbmZvIHBoaV9pbmZvID0gbG9vcF92aW5mby0+ bG9va3VwX3N0bXQgKGdzaS5waGkgKCkpOw0KKyAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkN CisJZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwNCisJCQkgInZlY3Rf dXBkYXRlX2l2c19hZnRlcl9lYXJseV9icmVhazogcGhpOiAlRyIsDQorCQkJIChnaW1wbGUgKilw aGkpOw0KKw0KKyAgICAgIC8qIFNraXAgcmVkdWN0aW9uIGFuZCB2aXJ0dWFsIHBoaXMuICAqLw0K KyAgICAgIGlmICghaXZfcGhpX3AgKHBoaV9pbmZvKSkNCisJew0KKwkgIGlmIChkdW1wX2VuYWJs ZWRfcCAoKSkNCisJICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24s DQorCQkJICAgICAicmVkdWMgb3IgdmlydHVhbCBwaGkuIHNraXAuXG4iKTsNCisJICBjb250aW51 ZTsNCisJfQ0KKw0KKyAgICAgIC8qIEZvciBtdWx0aXBsZSBleGl0cyB3aGVyZSB3ZSBoYW5kbGUg ZWFybHkgZXhpdHMgd2UgbmVlZCB0byBjYXJyeSBvbg0KKwkgd2l0aCB0aGUgcHJldmlvdXMgSVYg YXMgbG9vcCBpdGVyYXRpb24gd2FzIG5vdCBkb25lIGJlY2F1c2Ugd2UgZXhpdGVkDQorCSBlYXJs eS4gIEFzIHN1Y2gganVzdCBncmFiIHRoZSBvcmlnaW5hbCBJVi4gICovDQorICAgICAgaWYgKFNU TVRfVklORk9fVFlQRSAocGhpX2luZm8pICE9IHVuZGVmX3ZlY19pbmZvX3R5cGUpDQorCXsNCisJ ICB0eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfcGhpX3Jlc3VsdCAocGhpKSk7DQorCSAgc3RlcF9l eHByID0gU1RNVF9WSU5GT19MT09QX1BISV9FVk9MVVRJT05fUEFSVCAocGhpX2luZm8pOw0KKwkg IHN0ZXBfZXhwciA9IHVuc2hhcmVfZXhwciAoc3RlcF9leHByKTsNCisNCisJICAvKiBXZSBwcmV2 aW91c2x5IGdlbmVyYXRlZCB0aGUgbmV3IG1lcmdlZCBwaGkgaW4gdGhlIHNhbWUgQkIgYXMgdGhl DQorCSAgICAgZ3VhcmQuICBTbyB1c2UgdGhhdCB0byBwZXJmb3JtIHRoZSBzY2FsaW5nIG9uIHJh dGhlciB0aGFuIHRoZQ0KKwkgICAgIG5vcm1hbCBsb29wIHBoaSB3aGljaCBkb24ndCB0YWtlIHRo ZSBlYXJseSBicmVha3MgaW50byBhY2NvdW50LiAgKi8NCisJICBpbml0X2V4cHIgPSBnaW1wbGVf cGhpX3Jlc3VsdCAocGhpMSk7IC8vUEhJX0FSR19ERUZfRlJPTV9FREdFIChwaGkxLCBsb29wX3By ZWhlYWRlcl9lZGdlIChsb29wKSk7DQorDQorCSAgbmkgPSBmb2xkX2J1aWxkMiAoTVVMVF9FWFBS LCBUUkVFX1RZUEUgKHN0ZXBfZXhwciksDQorCQkJICAgIGZvbGRfY29udmVydCAoVFJFRV9UWVBF IChzdGVwX2V4cHIpLCBpbml0X2V4cHIpLA0KKwkJCSAgICBidWlsZF9pbnRfY3N0IChUUkVFX1RZ UEUgKHN0ZXBfZXhwciksIHZmKSk7DQorDQorCSAgdmFyID0gY3JlYXRlX3RtcF92YXIgKHR5cGUs ICJ0bXAiKTsNCisNCisJICBsYXN0X2dzaSA9IGdzaV9sYXN0X2JiIChleGl0X2JiKTsNCisJICBn aW1wbGVfc2VxIG5ld19zdG10cyA9IE5VTEw7DQorCSAgbmlfbmFtZSA9IGZvcmNlX2dpbXBsZV9v cGVyYW5kIChuaSwgJm5ld19zdG10cywgZmFsc2UsIHZhcik7DQorCSAgLyogRXhpdF9iYiBzaG91 bGRuJ3QgYmUgZW1wdHkuICAqLw0KKwkgIGlmICghZ3NpX2VuZF9wIChsYXN0X2dzaSkpDQorCSAg ICBnc2lfaW5zZXJ0X3NlcV9hZnRlciAoJmxhc3RfZ3NpLCBuZXdfc3RtdHMsIEdTSV9TQU1FX1NU TVQpOw0KKwkgIGVsc2UNCisJICAgIGdzaV9pbnNlcnRfc2VxX2JlZm9yZSAoJmxhc3RfZ3NpLCBu ZXdfc3RtdHMsIEdTSV9TQU1FX1NUTVQpOw0KKw0KKwkgIC8qIEZpeCBwaGkgZXhwcmVzc2lvbnMg aW4gdGhlIHN1Y2Nlc3NvciBiYi4gICovDQorCSAgYWRqdXN0X3BoaV9hbmRfZGVidWdfc3RtdHMg KHBoaSwgdXBkYXRlX2UsIG5pX25hbWUpOw0KKwl9DQorICAgICAgZWxzZSBpZiAoU1RNVF9WSU5G T19UWVBFIChwaGlfaW5mbykgPT0gdW5kZWZfdmVjX2luZm9fdHlwZSkNCisJew0KKwkgIHR5cGUg PSBUUkVFX1RZUEUgKGdpbXBsZV9waGlfcmVzdWx0IChwaGkpKTsNCisJICBzdGVwX2V4cHIgPSBT VE1UX1ZJTkZPX0xPT1BfUEhJX0VWT0xVVElPTl9QQVJUIChwaGlfaW5mbyk7DQorCSAgc3RlcF9l eHByID0gdW5zaGFyZV9leHByIChzdGVwX2V4cHIpOw0KKw0KKwkgIC8qIFdlIHByZXZpb3VzbHkg Z2VuZXJhdGVkIHRoZSBuZXcgbWVyZ2VkIHBoaSBpbiB0aGUgc2FtZSBCQiBhcyB0aGUNCisJICAg ICBndWFyZC4gIFNvIHVzZSB0aGF0IHRvIHBlcmZvcm0gdGhlIHNjYWxpbmcgb24gcmF0aGVyIHRo YW4gdGhlDQorCSAgICAgbm9ybWFsIGxvb3AgcGhpIHdoaWNoIGRvbid0IHRha2UgdGhlIGVhcmx5 IGJyZWFrcyBpbnRvIGFjY291bnQuICAqLw0KKwkgIGluaXRfZXhwciA9IFBISV9BUkdfREVGX0ZS T01fRURHRSAocGhpMSwgbG9vcF9wcmVoZWFkZXJfZWRnZSAobG9vcCkpOw0KKw0KKwkgIGlmICh2 Zi5pc19jb25zdGFudCAoKSkNCisJICAgIHsNCisJICAgICAgbmkgPSBmb2xkX2J1aWxkMiAoTVVM VF9FWFBSLCBUUkVFX1RZUEUgKHN0ZXBfZXhwciksDQorCQkJCWZvbGRfY29udmVydCAoVFJFRV9U WVBFIChzdGVwX2V4cHIpLA0KKwkJCQkJICAgICAgbml0ZXJzX3ZlY3RvciksDQorCQkJCWJ1aWxk X2ludF9jc3QgKFRSRUVfVFlQRSAoc3RlcF9leHByKSwgdmYpKTsNCisNCisJICAgICAgbmkgPSBm b2xkX2J1aWxkMiAoTUlOVVNfRVhQUiwgVFJFRV9UWVBFIChzdGVwX2V4cHIpLA0KKwkJCQlmb2xk X2NvbnZlcnQgKFRSRUVfVFlQRSAoc3RlcF9leHByKSwNCisJCQkJCSAgICAgIG5pdGVyc19vcmln KSwNCisJCQkJZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKHN0ZXBfZXhwciksIG5pKSk7DQorCSAg ICB9DQorCSAgZWxzZQ0KKwkgICAgLyogSWYgdGhlIGxvb3AncyBWRiBpc24ndCBjb25zdGFudCB0 aGVuIHRoZSBsb29wIG11c3QgaGF2ZSBiZWVuDQorCSAgICAgICBtYXNrZWQsIHNvIGF0IHRoZSBl bmQgb2YgdGhlIGxvb3Agd2Uga25vdyB3ZSBoYXZlIGZpbmlzaGVkDQorCSAgICAgICB0aGUgZW50 aXJlIGxvb3AgYW5kIGZvdW5kIG5vdGhpbmcuICAqLw0KKwkgICAgbmkgPSBidWlsZF96ZXJvX2Nz dCAoVFJFRV9UWVBFIChzdGVwX2V4cHIpKTsNCisNCisJICBnY2NfYXNzZXJ0IChUUkVFX0NPREUg KG5pKSA9PSBJTlRFR0VSX0NTVCk7DQorDQorCSAgdmFyID0gY3JlYXRlX3RtcF92YXIgKHR5cGUs ICJ0bXAiKTsNCisNCisJICBsYXN0X2dzaSA9IGdzaV9sYXN0X2JiIChleGl0X2JiKTsNCisJICBn aW1wbGVfc2VxIG5ld19zdG10cyA9IE5VTEw7DQorCSAgbmlfbmFtZSA9IGZvcmNlX2dpbXBsZV9v cGVyYW5kIChuaSwgJm5ld19zdG10cywgZmFsc2UsIHZhcik7DQorCSAgLyogRXhpdF9iYiBzaG91 bGRuJ3QgYmUgZW1wdHkuICAqLw0KKwkgIGlmICghZ3NpX2VuZF9wIChsYXN0X2dzaSkpDQorCSAg ICBnc2lfaW5zZXJ0X3NlcV9hZnRlciAoJmxhc3RfZ3NpLCBuZXdfc3RtdHMsIEdTSV9TQU1FX1NU TVQpOw0KKwkgIGVsc2UNCisJICAgIGdzaV9pbnNlcnRfc2VxX2JlZm9yZSAoJmxhc3RfZ3NpLCBu ZXdfc3RtdHMsIEdTSV9TQU1FX1NUTVQpOw0KKw0KKwkgIGFkanVzdF9waGlfYW5kX2RlYnVnX3N0 bXRzIChwaGkxLCB1cGRhdGVfZSwgbmlfbmFtZSk7DQorDQorCSAgZm9yICh1bnNpZ25lZCBpID0g MTsgaSA8IGV4aXRzLmxlbmd0aCAoKTsgaSsrKQ0KKwkgICAgYWRqdXN0X3BoaV9hbmRfZGVidWdf c3RtdHMgKHBoaTEsIGV4aXRzW2ldLA0KKwkJCQkJYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChz dGVwX2V4cHIpLA0KKwkJCQkJCSAgICAgICB2ZikpOw0KKwkgIGl2dG1wID0gZ2ltcGxlX3BoaV9y ZXN1bHQgKHBoaTEpOw0KKwl9DQorICAgICAgZWxzZQ0KKwljb250aW51ZTsNCisgICAgfQ0KKw0K KyAgcmV0dXJuIGl2dG1wOw0KIH0NCiANCiAvKiBSZXR1cm4gYSBnaW1wbGUgdmFsdWUgY29udGFp bmluZyB0aGUgbWlzYWxpZ25tZW50IChtZWFzdXJlZCBpbiB2ZWN0b3INCkBAIC0yMDk2LDcgKzIz MzgsNyBAQCB2ZWN0X2dlbl92ZWN0b3JfbG9vcF9uaXRlcnNfbXVsdF92ZiAobG9vcF92ZWNfaW5m byBsb29wX3ZpbmZvLA0KICAgY2xhc3MgbG9vcCAqbG9vcCA9IExPT1BfVklORk9fTE9PUCAobG9v cF92aW5mbyk7DQogICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKG5pdGVyc192ZWN0b3IpOw0KICAg dHJlZSBsb2dfdmYgPSBidWlsZF9pbnRfY3N0ICh0eXBlLCBleGFjdF9sb2cyICh2ZikpOw0KLSAg YmFzaWNfYmxvY2sgZXhpdF9iYiA9IHNpbmdsZV9leGl0IChsb29wKS0+ZGVzdDsNCisgIGJhc2lj X2Jsb2NrIGV4aXRfYmIgPSBub3JtYWxfZXhpdCAobG9vcCktPmRlc3Q7DQogDQogICBnY2NfYXNz ZXJ0IChuaXRlcnNfdmVjdG9yX211bHRfdmZfcHRyICE9IE5VTEwpOw0KICAgdHJlZSBuaXRlcnNf dmVjdG9yX211bHRfdmYgPSBmb2xkX2J1aWxkMiAoTFNISUZUX0VYUFIsIHR5cGUsDQpAQCAtMjEy MywxOSArMjM2NSw0NiBAQCBmaW5kX2d1YXJkX2FyZyAoY2xhc3MgbG9vcCAqbG9vcCwgY2xhc3Mg bG9vcCAqZXBpbG9nIEFUVFJJQlVURV9VTlVTRUQsDQogCQlncGhpICpsY3NzYV9waGkpDQogew0K ICAgZ3BoaV9pdGVyYXRvciBnc2k7DQotICBlZGdlIGUgPSBzaW5nbGVfZXhpdCAobG9vcCk7DQor ICBlZGdlIGUgPSBub3JtYWxfZXhpdCAobG9vcCk7DQogDQotICBnY2NfYXNzZXJ0IChzaW5nbGVf cHJlZF9wIChlLT5kZXN0KSk7DQogICBmb3IgKGdzaSA9IGdzaV9zdGFydF9waGlzIChlLT5kZXN0 KTsgIWdzaV9lbmRfcCAoZ3NpKTsgZ3NpX25leHQgKCZnc2kpKQ0KICAgICB7DQogICAgICAgZ3Bo aSAqcGhpID0gZ3NpLnBoaSAoKTsNCi0gICAgICBpZiAob3BlcmFuZF9lcXVhbF9wIChQSElfQVJH X0RFRiAocGhpLCAwKSwNCi0JCQkgICBQSElfQVJHX0RFRiAobGNzc2FfcGhpLCAwKSwgMCkpDQor ICAgICAgLyogTmVzdGVkIGxvb3BzIHdpdGggbXVsdGlwbGUgZXhpdHMgY2FuIGhhdmUgZGlmZmVy ZW50IG5vIyBwaGkgbm9kZQ0KKwkgYXJndW1lbnRzIGJldHdlZW4gdGhlIG1haW4gbG9vcCBhbmQg ZXBpbG9nIGFzIGVwaWxvZyBmYWxscyB0byB0aGUNCisJIHNlY29uZCBsb29wLiAgKi8NCisgICAg ICBpZiAoZ2ltcGxlX3BoaV9udW1fYXJncyAocGhpKSA+IGUtPmRlc3RfaWR4DQorCSAgJiYgb3Bl cmFuZF9lcXVhbF9wIChQSElfQVJHX0RFRiAocGhpLCBlLT5kZXN0X2lkeCksDQorCQkJICAgICAg UEhJX0FSR19ERUYgKGxjc3NhX3BoaSwgMCksIDApKQ0KIAlyZXR1cm4gUEhJX1JFU1VMVCAocGhp KTsNCiAgICAgfQ0KICAgcmV0dXJuIE5VTExfVFJFRTsNCiB9DQogDQorLyogU3RhcnRpbmcgZnJv bSB0aGUgY3VycmVudCBlZGdlIHdhbGsgYWxsIGluc3RydWN0aW9ucyBhbmQgZmluZCB0aGUgbGFz dA0KKyAgIFZVU0UvVkRFRiBpbiB0aGUgYmFzaWMgYmxvY2suICAqLw0KKw0KK3N0YXRpYyB0cmVl DQorZ2ltcGxlX2ZpbmRfbGFzdF9tZW1fdXNlIChlZGdlIGUpDQorew0KKyAgYmFzaWNfYmxvY2sg YmIgPSBlLT5zcmM7DQorICB0cmVlIHJlcyA9IE5VTEw7DQorICBnaW1wbGVfc3RtdF9pdGVyYXRv ciBpdGVyID0gZ3NpX2xhc3RfYmIgKGJiKTsNCisgIGRvDQorICB7DQorICAgIGdpbXBsZSAqc3Rt dCA9IGdzaV9zdG10IChpdGVyKTsNCisgICAgaWYgKChyZXMgPSBnaW1wbGVfdmRlZiAoc3RtdCkp KQ0KKyAgICAgIHJldHVybiByZXM7DQorDQorICAgIGlmICgocmVzID0gZ2ltcGxlX3Z1c2UgKHN0 bXQpKSkNCisgICAgICByZXR1cm4gcmVzOw0KKw0KKyAgICBnc2lfcHJldiAoJml0ZXIpOw0KKyAg fSB3aGlsZSAoIWdzaV9lbmRfcCAoaXRlcikpOw0KKw0KKyAgcmV0dXJuIE5VTEw7DQorfQ0KKw0K IC8qIEZ1bmN0aW9uIHNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnIGR1cGxj aWF0ZXMgRklSU1QvU0VDT05EDQogICAgZnJvbSBTRUNPTkQvRklSU1QgYW5kIHB1dHMgaXQgYXQg dGhlIG9yaWdpbmFsIGxvb3AncyBwcmVoZWFkZXIvZXhpdA0KICAgIGVkZ2UsIHRoZSB0d28gbG9v cHMgYXJlIGFycmFuZ2VkIGFzIGJlbG93Og0KQEAgLTIxODUsNiArMjQ1NCw3IEBAIGZpbmRfZ3Vh cmRfYXJnIChjbGFzcyBsb29wICpsb29wLCBjbGFzcyBsb29wICplcGlsb2cgQVRUUklCVVRFX1VO VVNFRCwNCiBzdGF0aWMgdm9pZA0KIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcyAo bG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KIAkJCQkgICBjbGFzcyBsb29wICpmaXJzdCwgY2xh c3MgbG9vcCAqc2Vjb25kLA0KKwkJCQkgICB0cmVlICpsY3NzYV9pdnRtcCwNCiAJCQkJICAgYm9v bCBjcmVhdGVfbGNzc2FfZm9yX2l2X3BoaXMpDQogew0KICAgZ3BoaV9pdGVyYXRvciBnc2lfdXBk YXRlLCBnc2lfb3JpZzsNCkBAIC0yMTkyLDEwICsyNDYyLDE4IEBAIHNscGVlbF91cGRhdGVfcGhp X25vZGVzX2Zvcl9sb29wcyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KIA0KICAgZWRnZSBm aXJzdF9sYXRjaF9lID0gRURHRV9TVUNDIChmaXJzdC0+bGF0Y2gsIDApOw0KICAgZWRnZSBzZWNv bmRfcHJlaGVhZGVyX2UgPSBsb29wX3ByZWhlYWRlcl9lZGdlIChzZWNvbmQpOw0KLSAgYmFzaWNf YmxvY2sgYmV0d2Vlbl9iYiA9IHNpbmdsZV9leGl0IChmaXJzdCktPmRlc3Q7DQorICBhdXRvX3Zl YzxlZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGZpcnN0KTsNCisgIGJhc2ljX2Js b2NrIGJldHdlZW5fYmIgPSBleGl0c1swXS0+ZGVzdDsNCisNCisgIGJvb2wgZWFybHlfZXhpdCA9 IExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKTsNCisgIC8qIEZvciBlYXJseSBl eGl0cyB3aGVuIHdlIGNyZWF0ZSB0aGUgbWVyZ2UgQkIgd2UgbXVzdCBtYWludGFpbiBpdCBpbg0K KyAgICAgTENTU0EgZm9ybSwgb3RoZXJ3aXNlIHRoZSBmaW5hbCB2ZWN0b3JpemVyIHBhc3NlcyB3 aWxsIGNyZWF0ZSB0aGUNCisgICAgIHdyb25nIFBISSBub2RlcyBoZXJlLiAgKi8NCisgIGNyZWF0 ZV9sY3NzYV9mb3JfaXZfcGhpcyA9IGNyZWF0ZV9sY3NzYV9mb3JfaXZfcGhpcyB8fCBlYXJseV9l eGl0Ow0KIA0KICAgZ2NjX2Fzc2VydCAoYmV0d2Vlbl9iYiA9PSBzZWNvbmRfcHJlaGVhZGVyX2Ut PnNyYyk7DQotICBnY2NfYXNzZXJ0IChzaW5nbGVfcHJlZF9wIChiZXR3ZWVuX2JiKSAmJiBzaW5n bGVfc3VjY19wIChiZXR3ZWVuX2JiKSk7DQorICBnY2NfYXNzZXJ0ICgoc2luZ2xlX3ByZWRfcCAo YmV0d2Vlbl9iYikgJiYgc2luZ2xlX3N1Y2NfcCAoYmV0d2Vlbl9iYikpDQorCSAgICAgIHx8IGVh cmx5X2V4aXQpOw0KICAgLyogRWl0aGVyIHRoZSBmaXJzdCBsb29wIG9yIHRoZSBzZWNvbmQgaXMg dGhlIGxvb3AgdG8gYmUgdmVjdG9yaXplZC4gICovDQogICBnY2NfYXNzZXJ0IChsb29wID09IGZp cnN0IHx8IGxvb3AgPT0gc2Vjb25kKTsNCiANCkBAIC0yMjE1LDEwICsyNDkzLDQwIEBAIHNscGVl bF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0K IAl7DQogCSAgdHJlZSBuZXdfcmVzID0gY29weV9zc2FfbmFtZSAoUEhJX1JFU1VMVCAob3JpZ19w aGkpKTsNCiAJICBncGhpICpsY3NzYV9waGkgPSBjcmVhdGVfcGhpX25vZGUgKG5ld19yZXMsIGJl dHdlZW5fYmIpOw0KLQkgIGFkZF9waGlfYXJnIChsY3NzYV9waGksIGFyZywgc2luZ2xlX2V4aXQg KGZpcnN0KSwgVU5LTk9XTl9MT0NBVElPTik7DQorDQorCSAgLyogVGhlIGZpcnN0IGV4aXQgaXMg YWx3YXlzIHRoZSBsb29wIGxhdGNoLCBzbyBoYW5kbGUgdGhhdA0KKwkgICAgIHNlcGVyYXRlbHku ICAqLw0KKwkgIGdjY19hc3NlcnQgKGFyZyk7DQorCSAgYWRkX3BoaV9hcmcgKGxjc3NhX3BoaSwg YXJnLCBleGl0c1swXSwgVU5LTk9XTl9MT0NBVElPTik7DQorDQorCSAgLyogVGhlIGVhcmx5IGV4 aXRzIGFyZSBwcm9jZXNzZWQgaW4gb3JkZXIgc3RhcnRpbmcgZnJvbSBleGl0IDEuICAqLw0KKwkg IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBleGl0cy5sZW5ndGggKCk7IGkrKykNCisJICAgIHsN CisJICAgICAgdHJlZSBwaGlfYXJnOw0KKwkgICAgICBpZiAoZ2ltcGxlX3BoaV9oYXNfdmRlZiAo b3JpZ19waGkpKQ0KKwkJcGhpX2FyZyA9IGdpbXBsZV9maW5kX2xhc3RfbWVtX3VzZSAoZXhpdHNb aV0pOw0KKwkgICAgICBlbHNlDQorCQkvKiBGb3IgaW5kdWN0aW9uIHZhbHVlcyBqdXN0IGNvcHkg dGhlIHByZXZpb3VzIG9uZSBhcyB0aGUNCisJCSAgIGN1cnJlbnQgaXRlcmF0aW9uIGRpZCBub3Qg ZmluaXNoLiAgV2UnbGwgdXBkYXRlIGFzIG5lZWRlZA0KKwkJICAgbGF0ZXIgb24uICAqLw0KKwkJ cGhpX2FyZyA9IGdpbXBsZV9waGlfcmVzdWx0IChvcmlnX3BoaSk7DQorCSAgICAgIC8qIElmIHdl IGRpZG4ndCBmaW5kIGFueSBqdXN0IGNvcHkgdGhlIGV4aXN0aW5nIG9uZSBhbmQgbGVhdmUNCisJ CSBpdCB0byB0aGUgb3RoZXJzIHRvIGZpeCBpdCB1cC4gICovDQorCSAgICAgIGlmICghcGhpX2Fy ZykNCisJCXBoaV9hcmcgPSBnaW1wbGVfcGhpX3Jlc3VsdCAob3JpZ19waGkpOw0KKwkgICAgICBh ZGRfcGhpX2FyZyAobGNzc2FfcGhpLCBwaGlfYXJnLCBleGl0c1tpXSwgVU5LTk9XTl9MT0NBVElP Tik7DQorCSAgICB9DQogCSAgYXJnID0gbmV3X3JlczsNCiAJfQ0KIA0KKyAgICAgIC8qIE5vcm1h bGx5IGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgaXRlcmF0b3IgY291bnRlciBhbmQg dGhlDQorCSBpdnRlbXBzIGJ1IGxvb2tpbmcgYXQgdGhlIFNUTVRfVklORk9fVFlQRSBvZiB0aGUg cGhpIG5vZGUuDQorCSBob3dldmVyIGZvciBzb21lIHJlYXNvbiB0aGlzIGlzbid0IGNvbnNpc3Rl bnRseSBzZXQuICBJcyB0aGVyZSBhDQorCSBiZXR0ZXIgd2F5Pz8uICAqLw0KKyAgICAgIGlmIChs Y3NzYV9pdnRtcA0KKwkgICYmIGl2X3BoaV9wICh2ZWN0X3BoaV9pbmZvKSkNCisJKmxjc3NhX2l2 dG1wID0gYXJnOw0KKw0KICAgICAgIC8qIFVwZGF0ZSBQSEkgbm9kZSBpbiB0aGUgc2Vjb25kIGxv b3AgYnkgcmVwbGFjaW5nIGFyZyBvbiB0aGUgbG9vcCdzDQogCSBpbmNvbWluZyBlZGdlLiAgKi8N CiAgICAgICBhZGp1c3RfcGhpX2FuZF9kZWJ1Z19zdG10cyAodXBkYXRlX3BoaSwgc2Vjb25kX3By ZWhlYWRlcl9lLCBhcmcpOw0KQEAgLTIyMjgsNyArMjUzNiw4IEBAIHNscGVlbF91cGRhdGVfcGhp X25vZGVzX2Zvcl9sb29wcyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KICAgICAgZm9yIGNv cnJlY3QgdmVjdG9yaXphdGlvbiBvZiBsaXZlIHN0bXRzLiAgKi8NCiAgIGlmIChsb29wID09IGZp cnN0KQ0KICAgICB7DQotICAgICAgYmFzaWNfYmxvY2sgb3JpZ19leGl0ID0gc2luZ2xlX2V4aXQg KHNlY29uZCktPmRlc3Q7DQorICAgICAgYXV0b192ZWM8ZWRnZT4gbmV3X2V4aXRzID0gZ2V0X2xv b3BfZXhpdF9lZGdlcyAoc2Vjb25kKTsNCisgICAgICBiYXNpY19ibG9jayBvcmlnX2V4aXQgPSBu ZXdfZXhpdHNbMF0tPmRlc3Q7DQogICAgICAgZm9yIChnc2lfb3JpZyA9IGdzaV9zdGFydF9waGlz IChvcmlnX2V4aXQpOw0KIAkgICAhZ3NpX2VuZF9wIChnc2lfb3JpZyk7IGdzaV9uZXh0ICgmZ3Np X29yaWcpKQ0KIAl7DQpAQCAtMjI0Myw3ICsyNTUyLDE1IEBAIHNscGVlbF91cGRhdGVfcGhpX25v ZGVzX2Zvcl9sb29wcyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KIA0KIAkgIHRyZWUgbmV3 X3JlcyA9IGNvcHlfc3NhX25hbWUgKG9yaWdfYXJnKTsNCiAJICBncGhpICpsY3BoaSA9IGNyZWF0 ZV9waGlfbm9kZSAobmV3X3JlcywgYmV0d2Vlbl9iYik7DQotCSAgYWRkX3BoaV9hcmcgKGxjcGhp LCBvcmlnX2FyZywgc2luZ2xlX2V4aXQgKGZpcnN0KSwgVU5LTk9XTl9MT0NBVElPTik7DQorCSAg LyogVGhlIGZpcnN0IGV4aXQgaXMgYWx3YXlzIHRoZSBsb29wIGxhdGNoLCBzbyBoYW5kbGUgdGhh dA0KKwkgICAgIHNlcGVyYXRlbHkuICAqLw0KKwkgIGFkZF9waGlfYXJnIChsY3BoaSwgb3JpZ19h cmcsIG5ld19leGl0c1swXSwgVU5LTk9XTl9MT0NBVElPTik7DQorCSAgLyogVGhlIGVhcmx5IGV4 aXRzIGFyZSBwcm9jZXNzZWQgaW4gb3JkZXIgc3RhcnRpbmcgZnJvbSBleGl0IDEuICAqLw0KKwkg IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBuZXdfZXhpdHMubGVuZ3RoICgpOyBpKyspDQorCSAg ICB7DQorCSAgICAgIHRyZWUgcGhpX2FyZyA9IGdpbXBsZV9waGlfcmVzdWx0IChvcmlnX3BoaSk7 DQorCSAgICAgIGFkZF9waGlfYXJnIChsY3BoaSwgcGhpX2FyZywgZXhpdHNbaV0sIFVOS05PV05f TE9DQVRJT04pOw0KKwkgICAgfQ0KIAl9DQogICAgIH0NCiB9DQpAQCAtMjM5MywxMyArMjcxMCwx MSBAQCBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfZ3VhcmQyIChjbGFzcyBsb29wICpsb29w LCBjbGFzcyBsb29wICplcGlsb2csDQogICBnY2NfYXNzZXJ0IChzaW5nbGVfc3VjY19wIChtZXJn ZV9iYikpOw0KICAgZWRnZSBlID0gc2luZ2xlX3N1Y2NfZWRnZSAobWVyZ2VfYmIpOw0KICAgYmFz aWNfYmxvY2sgZXhpdF9iYiA9IGUtPmRlc3Q7DQotICBnY2NfYXNzZXJ0IChzaW5nbGVfcHJlZF9w IChleGl0X2JiKSk7DQotICBnY2NfYXNzZXJ0IChzaW5nbGVfcHJlZCAoZXhpdF9iYikgPT0gc2lu Z2xlX2V4aXQgKGVwaWxvZyktPmRlc3QpOw0KIA0KICAgZm9yIChnc2kgPSBnc2lfc3RhcnRfcGhp cyAoZXhpdF9iYik7ICFnc2lfZW5kX3AgKGdzaSk7IGdzaV9uZXh0ICgmZ3NpKSkNCiAgICAgew0K ICAgICAgIGdwaGkgKnVwZGF0ZV9waGkgPSBnc2kucGhpICgpOw0KLSAgICAgIHRyZWUgb2xkX2Fy ZyA9IFBISV9BUkdfREVGICh1cGRhdGVfcGhpLCAwKTsNCisgICAgICB0cmVlIG9sZF9hcmcgPSBQ SElfQVJHX0RFRiAodXBkYXRlX3BoaSwgZS0+ZGVzdF9pZHgpOw0KIA0KICAgICAgIHRyZWUgbWVy Z2VfYXJnID0gTlVMTF9UUkVFOw0KIA0KQEAgLTI0MzgsMTIgKzI3NTMsMTQgQEAgc3RhdGljIHZv aWQNCiBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbGNzc2EgKGNsYXNzIGxvb3AgKmVwaWxv ZykNCiB7DQogICBncGhpX2l0ZXJhdG9yIGdzaTsNCi0gIGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBz aW5nbGVfZXhpdCAoZXBpbG9nKS0+ZGVzdDsNCisgIGF1dG9fdmVjPGVkZ2U+IGV4aXRzID0gZ2V0 X2xvb3BfZXhpdF9lZGdlcyAoZXBpbG9nKTsNCiANCi0gIGdjY19hc3NlcnQgKHNpbmdsZV9wcmVk X3AgKGV4aXRfYmIpKTsNCi0gIGVkZ2UgZSA9IEVER0VfUFJFRCAoZXhpdF9iYiwgMCk7DQotICBm b3IgKGdzaSA9IGdzaV9zdGFydF9waGlzIChleGl0X2JiKTsgIWdzaV9lbmRfcCAoZ3NpKTsgZ3Np X25leHQgKCZnc2kpKQ0KLSAgICByZW5hbWVfdXNlX29wIChQSElfQVJHX0RFRl9QVFJfRlJPTV9F REdFIChnc2kucGhpICgpLCBlKSk7DQorICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdHMu bGVuZ3RoICgpOyBpKyspDQorICAgIHsNCisgICAgICBiYXNpY19ibG9jayBleGl0X2JiID0gZXhp dHNbaV0tPmRlc3Q7DQorICAgICAgZm9yIChnc2kgPSBnc2lfc3RhcnRfcGhpcyAoZXhpdF9iYik7 ICFnc2lfZW5kX3AgKGdzaSk7IGdzaV9uZXh0ICgmZ3NpKSkNCisJcmVuYW1lX3VzZV9vcCAoUEhJ X0FSR19ERUZfUFRSX0ZST01fRURHRSAoZ3NpLnBoaSAoKSwgZXhpdHNbaV0pKTsNCisgICAgfQ0K IH0NCiANCiAvKiBFUElMT0dVRV9WSU5GTyBpcyBhbiBlcGlsb2d1ZSBsb29wIHRoYXQgd2Ugbm93 IGtub3cgd291bGQgbmVlZCB0bw0KQEAgLTI2MjEsNiArMjkzOCwxNCBAQCB2ZWN0X2RvX3BlZWxp bmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEs DQogICAgIGJvdW5kX2VwaWxvZyArPSB2ZiAtIDE7DQogICBpZiAoTE9PUF9WSU5GT19QRUVMSU5H X0ZPUl9HQVBTIChsb29wX3ZpbmZvKSkNCiAgICAgYm91bmRfZXBpbG9nICs9IDE7DQorICAvKiBG b3IgZWFybHkgYnJlYWtzIHRoZSBzY2FsYXIgbG9vcCBuZWVkcyB0byBleGVjdXRlIGF0IG1vc3Qg VkYgdGltZXMNCisgICAgIHRvIGZpbmQgdGhlIGVsZW1lbnQgdGhhdCBjYXVzZWQgdGhlIGJyZWFr LiAgKi8NCisgIGlmIChMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpDQorICAg IHsNCisgICAgICBib3VuZF9lcGlsb2cgPSB2ZjsNCisgICAgICAvKiBGb3JjZSBhIHNjYWxhciBl cGlsb2d1ZSBhcyB3ZSBjYW4ndCB2ZWN0b3JpemUgdGhlIGluZGV4IGZpbmRpbmcuICAqLw0KKyAg ICAgIHZlY3RfZXBpbG9ndWVzID0gZmFsc2U7DQorICAgIH0NCiAgIGJvb2wgZXBpbG9nX3BlZWxp bmcgPSBtYXliZV9uZSAoYm91bmRfZXBpbG9nLCAwVSk7DQogICBwb2x5X3VpbnQ2NCBib3VuZF9z Y2FsYXIgPSBib3VuZF9lcGlsb2c7DQogDQpAQCAtMjc4MCwxNiArMzEwNSwyNCBAQCB2ZWN0X2Rv X3BlZWxpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0 ZXJzbTEsDQogCQkJCSAgYm91bmRfcHJvbG9nICsgYm91bmRfZXBpbG9nKQ0KIAkJICAgICAgOiAo IUxPT1BfUkVRVUlSRVNfVkVSU0lPTklORyAobG9vcF92aW5mbykNCiAJCQkgfHwgdmVjdF9lcGls b2d1ZXMpKTsNCisNCisgIC8qIFdlIG9ubHkgc3VwcG9ydCBlYXJseSBicmVhayB2ZWN0b3JpemF0 aW9uIG9uIGtub3duIGJvdW5kcyBhdCB0aGlzIHRpbWUuDQorICAgICBUaGlzIG1lYW5zIHRoYXQg aWYgdGhlIHZlY3RvciBsb29wIGNhbid0IGJlIGVudGVyZWQgdGhlbiB3ZSB3b24ndCBnZW5lcmF0 ZQ0KKyAgICAgaXQgYXQgYWxsLiAgU28gZm9yIG5vdyBmb3JjZSBza2lwX3ZlY3RvciBvZmYgYmVj YXVzZSB0aGUgYWRkaXRpb25hbCBjb250cm9sDQorICAgICBmbG93IG1lc3NlcyB3aXRoIHRoZSBC QiBleGl0cyBhbmQgd2UndmUgYWxyZWFkeSBhbmFseXplZCB0aGVtLiAgKi8NCisgc2tpcF92ZWN0 b3IgPSBza2lwX3ZlY3RvciAmJiAhTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8p Ow0KKw0KICAgLyogRXBpbG9nIGxvb3AgbXVzdCBiZSBleGVjdXRlZCBpZiB0aGUgbnVtYmVyIG9m IGl0ZXJhdGlvbnMgZm9yIGVwaWxvZw0KICAgICAgbG9vcCBpcyBrbm93biBhdCBjb21waWxlIHRp bWUsIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGFkZCBhIGNoZWNrIGF0DQogICAgICB0aGUgZW5kIG9m IHZlY3RvciBsb29wIGFuZCBza2lwIHRvIHRoZSBlbmQgb2YgZXBpbG9nIGxvb3AuICAqLw0KICAg Ym9vbCBza2lwX2VwaWxvZyA9IChwcm9sb2dfcGVlbGluZyA8IDANCiAJCSAgICAgIHx8ICFMT09Q X1ZJTkZPX05JVEVSU19LTk9XTl9QIChsb29wX3ZpbmZvKQ0KIAkJICAgICAgfHwgIXZmLmlzX2Nv bnN0YW50ICgpKTsNCi0gIC8qIFBFRUxJTkdfRk9SX0dBUFMgaXMgc3BlY2lhbCBiZWNhdXNlIGVw aWxvZyBsb29wIG11c3QgYmUgZXhlY3V0ZWQuICAqLw0KLSAgaWYgKExPT1BfVklORk9fUEVFTElO R19GT1JfR0FQUyAobG9vcF92aW5mbykpDQorICAvKiBQRUVMSU5HX0ZPUl9HQVBTIGFuZCBwZWVs aW5nIGZvciBlYXJseSBicmVha3MgYXJlIHNwZWNpYWwgYmVjYXVzZSBlcGlsb2cNCisgICAgIGxv b3AgbXVzdCBiZSBleGVjdXRlZC4gICovDQorICBpZiAoTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9H QVBTIChsb29wX3ZpbmZvKQ0KKyAgICAgIHx8IExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29w X3ZpbmZvKSkNCiAgICAgc2tpcF9lcGlsb2cgPSBmYWxzZTsNCi0NCiAgIGNsYXNzIGxvb3AgKnNj YWxhcl9sb29wID0gTE9PUF9WSU5GT19TQ0FMQVJfTE9PUCAobG9vcF92aW5mbyk7DQogICBhdXRv X3ZlYzxwcm9maWxlX2NvdW50PiBvcmlnaW5hbF9jb3VudHM7DQogICBiYXNpY19ibG9jayAqb3Jp Z2luYWxfYmJzID0gTlVMTDsNCkBAIC0yODI4LDcgKzMxNjEsNyBAQCB2ZWN0X2RvX3BlZWxpbmcg KGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQog ICBpZiAocHJvbG9nX3BlZWxpbmcpDQogICAgIHsNCiAgICAgICBlID0gbG9vcF9wcmVoZWFkZXJf ZWRnZSAobG9vcCk7DQotICAgICAgaWYgKCFzbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29wX3AgKGxv b3AsIGUpKQ0KKyAgICAgIGlmICghc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChsb29wX3Zp bmZvLCBlKSkNCiAJew0KIAkgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJ T04sIGxvb3BfbG9jLA0KIAkJCSAgICJsb29wIGNhbid0IGJlIGR1cGxpY2F0ZWQgdG8gcHJlaGVh ZGVyIGVkZ2UuXG4iKTsNCkBAIC0yODQzLDcgKzMxNzYsNyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxv b3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQogCSAg Z2NjX3VucmVhY2hhYmxlICgpOw0KIAl9DQogICAgICAgcHJvbG9nLT5mb3JjZV92ZWN0b3JpemUg PSBmYWxzZTsNCi0gICAgICBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMgKGxvb3Bf dmluZm8sIHByb2xvZywgbG9vcCwgdHJ1ZSk7DQorICAgICAgc2xwZWVsX3VwZGF0ZV9waGlfbm9k ZXNfZm9yX2xvb3BzIChsb29wX3ZpbmZvLCBwcm9sb2csIGxvb3AsIE5VTEwsIHRydWUpOw0KICAg ICAgIGZpcnN0X2xvb3AgPSBwcm9sb2c7DQogICAgICAgcmVzZXRfb3JpZ2luYWxfY29weV90YWJs ZXMgKCk7DQogDQpAQCAtMjkwMiwxMSArMzIzNSwxMyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQogDQogICBp ZiAoZXBpbG9nX3BlZWxpbmcpDQogICAgIHsNCi0gICAgICBlID0gc2luZ2xlX2V4aXQgKGxvb3Ap Ow0KLSAgICAgIGlmICghc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChsb29wLCBlKSkNCisg ICAgICBhdXRvX3ZlYzxlZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGxvb3ApOw0K KyAgICAgIGUgPSBleGl0c1swXTsNCisgICAgICBpZiAoIXNscGVlbF9jYW5fZHVwbGljYXRlX2xv b3BfcCAobG9vcF92aW5mbywgZSkpDQogCXsNCi0JICBkdW1wX3ByaW50Zl9sb2MgKE1TR19NSVNT RURfT1BUSU1JWkFUSU9OLCBsb29wX2xvYywNCi0JCQkgICAibG9vcCBjYW4ndCBiZSBkdXBsaWNh dGVkIHRvIGV4aXQgZWRnZS5cbiIpOw0KKwkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCisJICAg IGR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIGxvb3BfbG9jLA0KKwkJ CSAgICAgImxvb3AgY2FuJ3QgYmUgZHVwbGljYXRlZCB0byBleGl0IGVkZ2UuXG4iKTsNCiAJICBn Y2NfdW5yZWFjaGFibGUgKCk7DQogCX0NCiAgICAgICAvKiBQZWVsIGVwaWxvZyBhbmQgcHV0IGl0 IG9uIGV4aXQgZWRnZSBvZiBsb29wLiAgSWYgd2UgYXJlIHZlY3Rvcml6aW5nDQpAQCAtMjkyMCwx MiArMzI1NSwxNiBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywg dHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQogICAgICAgZXBpbG9nID0gc2xwZWVsX3RyZWVf ZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcgKGxvb3AsIGVwaWxvZywgZSk7DQogICAgICAgaWYg KCFlcGlsb2cpDQogCXsNCi0JICBkdW1wX3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFU SU9OLCBsb29wX2xvYywNCi0JCQkgICAic2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRn ZV9jZmcgZmFpbGVkLlxuIik7DQorCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KKwkgICAgZHVt cF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgbG9vcF9sb2MsDQorCQkJICAg ICAic2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcgZmFpbGVkLlxuIik7DQog CSAgZ2NjX3VucmVhY2hhYmxlICgpOw0KIAl9DQogICAgICAgZXBpbG9nLT5mb3JjZV92ZWN0b3Jp emUgPSBmYWxzZTsNCi0gICAgICBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMgKGxv b3BfdmluZm8sIGxvb3AsIGVwaWxvZywgZmFsc2UpOw0KKw0KKyAgICAgIHRyZWUgZWFybHlfYnJl YWtfaXZfbmFtZTsNCisgICAgICBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMgKGxv b3BfdmluZm8sIGxvb3AsIGVwaWxvZywNCisJCQkJCSAmZWFybHlfYnJlYWtfaXZfbmFtZSwgZmFs c2UpOw0KIA0KICAgICAgIC8qIFNjYWxhciB2ZXJzaW9uIGxvb3AgbWF5IGJlIHByZWZlcnJlZC4g IEluIHRoaXMgY2FzZSwgYWRkIGd1YXJkDQogCSBhbmQgc2tpcCB0byBlcGlsb2cuICBOb3RlIHRo aXMgb25seSBoYXBwZW5zIHdoZW4gdGhlIG51bWJlciBvZg0KQEAgLTI5NzgsNiArMzMxNyw3IEBA IHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB0cmVlIG5pdGVycywg dHJlZSBuaXRlcnNtMSwNCiAgICAgICB2ZWN0X2dlbl92ZWN0b3JfbG9vcF9uaXRlcnMgKGxvb3Bf dmluZm8sIG5pdGVycywNCiAJCQkJICAgbml0ZXJzX3ZlY3Rvciwgc3RlcF92ZWN0b3IsDQogCQkJ CSAgIG5pdGVyc19ub19vdmVyZmxvdyk7DQorDQogICAgICAgaWYgKCFpbnRlZ2VyX29uZXAgKCpz dGVwX3ZlY3RvcikpDQogCXsNCiAJICAvKiBPbiBleGl0IGZyb20gdGhlIGxvb3Agd2Ugd2lsbCBo YXZlIGFuIGVhc3kgd2F5IG9mIGNhbGNhbGF0aW5nDQpAQCAtMjk4Nyw5ICszMzI3LDEzIEBAIHZl Y3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB0cmVlIG5pdGVycywgdHJl ZSBuaXRlcnNtMSwNCiAJICBTU0FfTkFNRV9ERUZfU1RNVCAobml0ZXJzX3ZlY3Rvcl9tdWx0X3Zm KSA9IGdpbXBsZV9idWlsZF9ub3AgKCk7DQogCSAgKm5pdGVyc192ZWN0b3JfbXVsdF92Zl92YXIg PSBuaXRlcnNfdmVjdG9yX211bHRfdmY7DQogCX0NCisgICAgICBlbHNlIGlmIChMT09QX1ZJTkZP X0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpDQorCXZlY3RfZ2VuX3ZlY3Rvcl9sb29wX25pdGVy c19tdWx0X3ZmIChsb29wX3ZpbmZvLCBlYXJseV9icmVha19pdl9uYW1lLA0KKwkJCQkJICAgICAm bml0ZXJzX3ZlY3Rvcl9tdWx0X3ZmKTsNCiAgICAgICBlbHNlDQogCXZlY3RfZ2VuX3ZlY3Rvcl9s b29wX25pdGVyc19tdWx0X3ZmIChsb29wX3ZpbmZvLCAqbml0ZXJzX3ZlY3RvciwNCiAJCQkJCSAg ICAgJm5pdGVyc192ZWN0b3JfbXVsdF92Zik7DQorDQogICAgICAgLyogVXBkYXRlIElWcyBvZiBv cmlnaW5hbCBsb29wIGFzIGlmIHRoZXkgd2VyZSBhZHZhbmNlZCBieQ0KIAkgbml0ZXJzX3ZlY3Rv cl9tdWx0X3ZmIHN0ZXBzLiAgKi8NCiAgICAgICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICh2ZWN0X2Nh bl9hZHZhbmNlX2l2c19wIChsb29wX3ZpbmZvKSk7DQpAQCAtMjk5NywxMiArMzM0MSw5MyBAQCB2 ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSBuaXRlcnMsIHRy ZWUgbml0ZXJzbTEsDQogICAgICAgdmVjdF91cGRhdGVfaXZzX2FmdGVyX3ZlY3Rvcml6ZXIgKGxv b3BfdmluZm8sIG5pdGVyc192ZWN0b3JfbXVsdF92ZiwNCiAJCQkJCXVwZGF0ZV9lKTsNCiANCisg ICAgICAvKiBGb3IgZWFybHkgYnJlYWtzIHdlIG11c3QgY3JlYXRlIGEgZ3VhcmQgdG8gY2hlY2sg aG93IG1hbnkgaXRlcmF0aW9ucw0KKwkgb2YgdGhlIHNjYWxhciBsb29wIGFyZSB5ZXQgdG8gYmUg cGVyZm9ybWVkLiAgKi8NCisgICAgICBpZiAoTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3Bf dmluZm8pKQ0KKwl7DQorCSAgZ2NjX2Fzc2VydCAoZWFybHlfYnJlYWtfaXZfbmFtZSk7DQorCSAg dHJlZSBpdnRtcCA9DQorCSAgICB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfZWFybHlfYnJlYWsgKGxv b3BfdmluZm8sIGVwaWxvZywgdmYsIG5pdGVycywNCisJCQkJCSAgICAgICAqbml0ZXJzX3ZlY3Rv ciwgdXBkYXRlX2UpOw0KKwkgIHRyZWUgZ3VhcmRfY29uZCA9IGZvbGRfYnVpbGQyIChFUV9FWFBS LCBib29sZWFuX3R5cGVfbm9kZSwNCisJCQkJCSBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAobml0 ZXJzKSwNCisJCQkJCQkgICAgICAgaXZ0bXApLA0KKwkJCQkJIGJ1aWxkX3plcm9fY3N0IChUUkVF X1RZUEUgKG5pdGVycykpKTsNCisJICBiYXNpY19ibG9jayBndWFyZF9iYiA9IG5vcm1hbF9leGl0 IChsb29wKS0+ZGVzdDsNCisJICBhdXRvX3ZlYzxlZGdlPiBuZXdfZXhpdHMgPSBnZXRfbG9vcF9l eGl0X2VkZ2VzIChlcGlsb2cpOw0KKwkgIC8qIElmIHdlIGhhZCBhIGZhbGx0aHJvdWdoIGVkZ2Us IHRoZSBndWFyZCB3aWxsIHRoZSB0aHJlYWRlZCB0aHJvdWdoDQorCSAgICAgYW5kIHNvIHdlIG1h eSBuZWVkIHRvIGZpbmQgdGhlIGFjdHVhbCBmaW5hbCBlZGdlLiAgKi8NCisJICBlZGdlIGZpbmFs X2VkZ2UgPSBuZXdfZXhpdHNbMF07DQorCSAgYmFzaWNfYmxvY2sgZ3VhcmRfdG87DQorCSAgYm9v bCBmbl9leGl0X3AgPSBmYWxzZTsNCisJICBpZiAoZ3NpX2VuZF9wIChnc2lfc3RhcnRfbm9uZGVi dWdfYmIgKGZpbmFsX2VkZ2UtPmRlc3QpKQ0KKwkgICAgICAmJiAhZ3NpX2VuZF9wIChnc2lfc3Rh cnRfcGhpcyAoZmluYWxfZWRnZS0+ZGVzdCkpDQorCSAgICAgICYmIHNpbmdsZV9zdWNjX3AgKGZp bmFsX2VkZ2UtPmRlc3QpKQ0KKwkgICAgew0KKwkgICAgICBhdXRvIGdzaSA9IGdzaV9zdGFydF9w aGlzIChmaW5hbF9lZGdlLT5kZXN0KTsNCisJICAgICAgd2hpbGUgKCFnc2lfZW5kX3AgKGdzaSkp DQorCQlnc2lfcmVtb3ZlICgmZ3NpLCB0cnVlKTsNCisJICAgICAgZ3VhcmRfdG8gPSBmaW5hbF9l ZGdlLT5kZXN0Ow0KKwkgICAgICBmbl9leGl0X3AgPSB0cnVlOw0KKwkgICAgfQ0KKwkgIGVsc2UN CisJICAgIGd1YXJkX3RvID0gc3BsaXRfZWRnZSAobm9ybWFsX2V4aXQgKGVwaWxvZykpOw0KKwkg IGVkZ2UgZ3VhcmRfZSA9IHNscGVlbF9hZGRfbG9vcF9ndWFyZCAoZ3VhcmRfYmIsIGd1YXJkX2Nv bmQsIGd1YXJkX3RvLA0KKwkJCQkJCWd1YXJkX2JiLCBwcm9iX2VwaWxvZy5pbnZlcnQgKCksDQor CQkJCQkJaXJyZWRfZmxhZyk7DQorCSAgYmFzaWNfYmxvY2sgZGVzdCA9IHNpbmdsZV9zdWNjIChn dWFyZF90byk7DQorCSAgLyogSWYgd2UgaGF2ZSBhIHNpbmdsZSBwcmVkIHRoZW4gdGhlIHByZXZp b3VzIGJsb2NrIGlzIHRoZSBpbW1lZGlhdGUNCisJICAgICBkb21pbmF0b3IuICAgVGhpcyBtYXkg b3IgbWF5IG5vdCBiZSB0aGUgZ3VhcmQgYmIuICBIb3dldmVyIGlmIHdlDQorCSAgICAgaGF2ZSBt dWx0aXBsZSBwcmVkIHRoZW4gdGhlIGd1YXJkIEJCIG11c3QgYmUgdGhlIGRvbWluYXRvciBhcyBh bGwNCisJICAgICBwcmV2aW91cyBleGl0cyBnb3QgcmV3cml0ZWQgdG8gdGhlIGd1YXJkIEJCLiAg Ki8NCisJICBpZiAoc2luZ2xlX3ByZWRfcCAoZGVzdCkpDQorCSAgICBzZXRfaW1tZWRpYXRlX2Rv bWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIGRlc3QsIGd1YXJkX3RvKTsNCisJICBlbHNlDQorCSAg ICBzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIGRlc3QsIGd1YXJkX2Ji KTsNCisNCisJICAvKiBXZSBtdXN0IHVwZGF0ZSBhbGwgdGhlIGVkZ2VzIGZyb20gdGhlIG5ldyBn dWFyZF9iYi4gICovDQorCSAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2d1YXJkMiAobG9v cCwgZXBpbG9nLCBndWFyZF9lLA0KKwkJCQkJICAgICAgZmluYWxfZWRnZSk7DQorDQorCSAgLyog SWYgd2UgaGF2ZSBhbiBhZGRpdGlvbmFsIGZ1bmN0aW9uZSBleGl0IGJsb2NrLCB0aGVuIHRocmVh ZCB0aGUgdXBkYXRlcw0KKwkgICAgIHRocm91Z2ggdG8gdGhlIGJsb2NrLiAgTGVhdmluZyBpdCB1 cCB0byB0aGUgTENTU0EgY2xlYW51cCBwYXNzIHdpbGwNCisJICAgICBnZXQgdGhlIHdyb25nIHZh bHVlcyBoZXJlIGFzIGl0IGNhbid0IGhhbmRsZSB0aGUgbWVyZ2UgYmxvY2sgd2UganVzdA0KKwkg ICAgIG1hZGUgY29ycmVjdGx5LiAgKi8NCisJICBpZiAoZm5fZXhpdF9wKQ0KKwkgICAgew0KKwkJ Z3BoaV9pdGVyYXRvciBnc2lfdXBkYXRlLCBnc2lfb3JpZywgZ3NpX3ZlY3Q7DQorCQlmb3IgKGdz aV9vcmlnID0gZ3NpX3N0YXJ0X3BoaXMgKGVwaWxvZy0+aGVhZGVyKSwNCisJCSAgICAgZ3NpX3Vw ZGF0ZSA9IGdzaV9zdGFydF9waGlzIChndWFyZF9lLT5kZXN0KSwNCisJCSAgICAgZ3NpX3ZlY3Qg PSBnc2lfc3RhcnRfcGhpcyAobG9vcC0+aGVhZGVyKTsNCisJCSAgICAgIWdzaV9lbmRfcCAoZ3Np X29yaWcpICYmICFnc2lfZW5kX3AgKGdzaV91cGRhdGUpDQorCQkgICAgICYmICFnc2lfZW5kX3Ag KGdzaV92ZWN0KTsNCisJCSAgICAgZ3NpX25leHQgKCZnc2lfb3JpZyksIGdzaV9uZXh0ICgmZ3Np X3VwZGF0ZSksDQorCQkgICAgIGdzaV9uZXh0ICgmZ3NpX3ZlY3QpKQ0KKwkJICB7DQorCQkgICAg Z3BoaSAqb3JpZ19waGkgPSBnc2lfb3JpZy5waGkgKCk7DQorCQkgICAgZ3BoaSAqdXBkYXRlX3Bo aSA9IGdzaV91cGRhdGUucGhpICgpOw0KKwkJICAgIGdwaGkgKnZlY3RfcGhpID0gZ3NpX3ZlY3Qu cGhpICgpOw0KKwkJICAgIHN0bXRfdmVjX2luZm8gcGhpX2luZm8gPSBsb29wX3ZpbmZvLT5sb29r dXBfc3RtdCAodmVjdF9waGkpOw0KKw0KKwkJICAgIGlmIChpdl9waGlfcCAocGhpX2luZm8pKQ0K KwkJICAgICAgY29udGludWU7DQorDQorCQkgICAgdHJlZSBwaGlfYXJnID0gUEhJX0FSR19ERUZf RlJPTV9FREdFIChvcmlnX3BoaSwgdXBkYXRlX2UpOw0KKwkJICAgIFNFVF9QSElfQVJHX0RFRiAo dXBkYXRlX3BoaSwgdXBkYXRlX2UtPmRlc3RfaWR4LCBwaGlfYXJnKTsNCisNCisJCSAgICBwaGlf YXJnID0gUEhJX0FSR19ERUZfRlJPTV9FREdFIChvcmlnX3BoaSwgZ3VhcmRfZSk7DQorCQkgICAg U0VUX1BISV9BUkdfREVGICh1cGRhdGVfcGhpLCBndWFyZF9lLT5kZXN0X2lkeCwgcGhpX2FyZyk7 DQorCQkgIH0NCisJICAgIH0NCisJICBmbHVzaF9wZW5kaW5nX3N0bXRzIChndWFyZF9lKTsNCisJ fQ0KKw0KICAgICAgIGlmIChza2lwX2VwaWxvZykNCiAJew0KIAkgIGd1YXJkX2NvbmQgPSBmb2xk X2J1aWxkMiAoRVFfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsDQogCQkJCSAgICBuaXRlcnMsIG5p dGVyc192ZWN0b3JfbXVsdF92Zik7DQotCSAgZ3VhcmRfYmIgPSBzaW5nbGVfZXhpdCAobG9vcCkt PmRlc3Q7DQotCSAgZ3VhcmRfdG8gPSBzcGxpdF9lZGdlIChzaW5nbGVfZXhpdCAoZXBpbG9nKSk7 DQorCSAgZ3VhcmRfYmIgPSBub3JtYWxfZXhpdCAobG9vcCktPmRlc3Q7DQorCSAgZ3VhcmRfdG8g PSBzcGxpdF9lZGdlIChub3JtYWxfZXhpdCAoZXBpbG9nKSk7DQogCSAgZ3VhcmRfZSA9IHNscGVl bF9hZGRfbG9vcF9ndWFyZCAoZ3VhcmRfYmIsIGd1YXJkX2NvbmQsIGd1YXJkX3RvLA0KIAkJCQkJ ICAgc2tpcF92ZWN0b3IgPyBhbmNob3IgOiBndWFyZF9iYiwNCiAJCQkJCSAgIHByb2JfZXBpbG9n LmludmVydCAoKSwNCkBAIC0zMDEwLDcgKzM0MzUsNyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQogCSAgaWYg KHZlY3RfZXBpbG9ndWVzKQ0KIAkgICAgZXBpbG9ndWVfdmluZm8tPnNraXBfdGhpc19sb29wX2Vk Z2UgPSBndWFyZF9lOw0KIAkgIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9ndWFyZDIgKGxv b3AsIGVwaWxvZywgZ3VhcmRfZSwNCi0JCQkJCSAgICAgIHNpbmdsZV9leGl0IChlcGlsb2cpKTsN CisJCQkJCSAgICAgIG5vcm1hbF9leGl0IChlcGlsb2cpKTsNCiAJICAvKiBPbmx5IG5lZWQgdG8g aGFuZGxlIGJhc2ljIGJsb2NrIGJlZm9yZSBlcGlsb2cgbG9vcCBpZiBpdCdzIG5vdA0KIAkgICAg IHRoZSBndWFyZF9iYiwgd2hpY2ggaXMgdGhlIGNhc2Ugd2hlbiBza2lwX3ZlY3RvciBpcyB0cnVl LiAgKi8NCiAJICBpZiAoZ3VhcmRfYmIgIT0gYmJfYmVmb3JlX2VwaWxvZykNCkBAIC0zMDIzLDcg KzM0NDgsNiBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJl ZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQogCX0NCiAgICAgICBlbHNlDQogCXNscGVlbF91cGRh dGVfcGhpX25vZGVzX2Zvcl9sY3NzYSAoZXBpbG9nKTsNCi0NCiAgICAgICB1bnNpZ25lZCBIT1NU X1dJREVfSU5UIGJvdW5kOw0KICAgICAgIGlmIChib3VuZF9zY2FsYXIuaXNfY29uc3RhbnQgKCZi b3VuZCkpDQogCXsNCkBAIC0zMTE0LDcgKzM1MzgsNiBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQogDQogICBh ZGp1c3RfdmVjLnJlbGVhc2UgKCk7DQogICBmcmVlX29yaWdpbmFsX2NvcHlfdGFibGVzICgpOw0K LQ0KICAgcmV0dXJuIHZlY3RfZXBpbG9ndWVzID8gZXBpbG9nIDogTlVMTDsNCiB9DQogDQpkaWZm IC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1sb29wLmNjIGIvZ2NjL3RyZWUtdmVjdC1sb29wLmNjDQpp bmRleCBhYWNiYjEyNTgwYzg5YTdhMTJiMTFjYzA5NjUwMmQ2NjlhOWUxZTIxLi5mMzdiZDEwNTc1 MDQ0YzI1NjFmNzkyY2I4YmE0ODcwYmVjZmM0YTMwIDEwMDY0NA0KLS0tIGEvZ2NjL3RyZWUtdmVj dC1sb29wLmNjDQorKysgYi9nY2MvdHJlZS12ZWN0LWxvb3AuY2MNCkBAIC04NDQsODAgKzg0NCwx MDYgQEAgdmVjdF9maXh1cF9zY2FsYXJfY3ljbGVzX3dpdGhfcGF0dGVybnMgKGxvb3BfdmVjX2lu Zm8gbG9vcF92aW5mbykNCiAgICBpbiBOVU1CRVJfT0ZfSVRFUkFUSU9OU00xLiAgUGxhY2UgdGhl IGNvbmRpdGlvbiB1bmRlciB3aGljaCB0aGUNCiAgICBuaXRlciBpbmZvcm1hdGlvbiBob2xkcyBp biBBU1NVTVBUSU9OUy4NCiANCi0gICBSZXR1cm4gdGhlIGxvb3AgZXhpdCBjb25kaXRpb24uICAq Lw0KKyAgIFJldHVybiB0aGUgbG9vcCBleGl0IGNvbmRpdGlvbnMuICAqLw0KIA0KIA0KLXN0YXRp YyBnY29uZCAqDQorc3RhdGljIHZlYzxnY29uZCAqPg0KIHZlY3RfZ2V0X2xvb3Bfbml0ZXJzIChj bGFzcyBsb29wICpsb29wLCB0cmVlICphc3N1bXB0aW9ucywNCiAJCSAgICAgIHRyZWUgKm51bWJl cl9vZl9pdGVyYXRpb25zLCB0cmVlICpudW1iZXJfb2ZfaXRlcmF0aW9uc20xKQ0KIHsNCi0gIGVk Z2UgZXhpdCA9IHNpbmdsZV9leGl0IChsb29wKTsNCisgIGF1dG9fdmVjPGVkZ2U+IGV4aXRzID0g Z2V0X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7DQorICB2ZWM8Z2NvbmQgKj4gY29uZHM7DQorICBj b25kcy5jcmVhdGUgKGV4aXRzLmxlbmd0aCAoKSk7DQogICBjbGFzcyB0cmVlX25pdGVyX2Rlc2Mg bml0ZXJfZGVzYzsNCiAgIHRyZWUgbml0ZXJfYXNzdW1wdGlvbnMsIG5pdGVyLCBtYXlfYmVfemVy bzsNCi0gIGdjb25kICpjb25kID0gZ2V0X2xvb3BfZXhpdF9jb25kaXRpb24gKGxvb3ApOw0KIA0K ICAgKmFzc3VtcHRpb25zID0gYm9vbGVhbl90cnVlX25vZGU7DQogICAqbnVtYmVyX29mX2l0ZXJh dGlvbnNtMSA9IGNocmVjX2RvbnRfa25vdzsNCiAgICpudW1iZXJfb2ZfaXRlcmF0aW9ucyA9IGNo cmVjX2RvbnRfa25vdzsNCisNCiAgIERVTVBfVkVDVF9TQ09QRSAoImdldF9sb29wX25pdGVycyIp Ow0KIA0KLSAgaWYgKCFleGl0KQ0KLSAgICByZXR1cm4gY29uZDsNCisgIGlmIChleGl0cy5pc19l bXB0eSAoKSkNCisgICAgcmV0dXJuIGNvbmRzOw0KKw0KKyAgaWYgKGR1bXBfZW5hYmxlZF9wICgp KQ0KKyAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLCAiTG9vcCBo YXMgJWQgZXhpdHMuXG4iLA0KKwkJICAgICBleGl0cy5sZW5ndGggKCkpOw0KIA0KLSAgbWF5X2Jl X3plcm8gPSBOVUxMX1RSRUU7DQotICBpZiAoIW51bWJlcl9vZl9pdGVyYXRpb25zX2V4aXRfYXNz dW1wdGlvbnMgKGxvb3AsIGV4aXQsICZuaXRlcl9kZXNjLCBOVUxMKQ0KLSAgICAgIHx8IGNocmVj X2NvbnRhaW5zX3VuZGV0ZXJtaW5lZCAobml0ZXJfZGVzYy5uaXRlcikpDQotICAgIHJldHVybiBj b25kOw0KKyAgZWRnZSBleGl0Ow0KKyAgdW5zaWduZWQgaW50IGk7DQorICBGT1JfRUFDSF9WRUNf RUxUIChleGl0cywgaSwgZXhpdCkNCisgICAgew0KKyAgICAgIGdjb25kICpjb25kID0gZ2V0X2Vk Z2VfY29uZGl0aW9uIChleGl0KTsNCisgICAgICBpZiAoY29uZCkNCisJY29uZHMuc2FmZV9wdXNo IChjb25kKTsNCiANCi0gIG5pdGVyX2Fzc3VtcHRpb25zID0gbml0ZXJfZGVzYy5hc3N1bXB0aW9u czsNCi0gIG1heV9iZV96ZXJvID0gbml0ZXJfZGVzYy5tYXlfYmVfemVybzsNCi0gIG5pdGVyID0g bml0ZXJfZGVzYy5uaXRlcjsNCisgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQorCWR1bXBf cHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sICJBbmFseXppbmcgZXhpdCAlZC4u LlxuIiwgaSk7DQogDQotICBpZiAobWF5X2JlX3plcm8gJiYgaW50ZWdlcl96ZXJvcCAobWF5X2Jl X3plcm8pKQ0KLSAgICBtYXlfYmVfemVybyA9IE5VTExfVFJFRTsNCisgICAgICBtYXlfYmVfemVy byA9IE5VTExfVFJFRTsNCisgICAgICBpZiAoIW51bWJlcl9vZl9pdGVyYXRpb25zX2V4aXRfYXNz dW1wdGlvbnMgKGxvb3AsIGV4aXQsICZuaXRlcl9kZXNjLCBOVUxMKQ0KKyAgICAgICAgICB8fCBj aHJlY19jb250YWluc191bmRldGVybWluZWQgKG5pdGVyX2Rlc2Mubml0ZXIpKQ0KKwljb250aW51 ZTsNCiANCi0gIGlmIChtYXlfYmVfemVybykNCi0gICAgew0KLSAgICAgIGlmIChDT01QQVJJU09O X0NMQVNTX1AgKG1heV9iZV96ZXJvKSkNCisgICAgICBuaXRlcl9hc3N1bXB0aW9ucyA9IG5pdGVy X2Rlc2MuYXNzdW1wdGlvbnM7DQorICAgICAgbWF5X2JlX3plcm8gPSBuaXRlcl9kZXNjLm1heV9i ZV96ZXJvOw0KKyAgICAgIG5pdGVyID0gbml0ZXJfZGVzYy5uaXRlcjsNCisNCisgICAgICBpZiAo bWF5X2JlX3plcm8gJiYgaW50ZWdlcl96ZXJvcCAobWF5X2JlX3plcm8pKQ0KKwltYXlfYmVfemVy byA9IE5VTExfVFJFRTsNCisNCisgICAgICBpZiAobWF5X2JlX3plcm8pDQogCXsNCi0JICAvKiBU cnkgdG8gY29tYmluZSBtYXlfYmVfemVybyB3aXRoIGFzc3VtcHRpb25zLCB0aGlzIGNhbiBzaW1w bGlmeQ0KLQkgICAgIGNvbXB1dGF0aW9uIG9mIG5pdGVyIGV4cHJlc3Npb24uICAqLw0KLQkgIGlm IChuaXRlcl9hc3N1bXB0aW9ucyAmJiAhaW50ZWdlcl9ub256ZXJvcCAobml0ZXJfYXNzdW1wdGlv bnMpKQ0KLQkgICAgbml0ZXJfYXNzdW1wdGlvbnMgPSBmb2xkX2J1aWxkMiAoVFJVVEhfQU5EX0VY UFIsIGJvb2xlYW5fdHlwZV9ub2RlLA0KLQkJCQkJICAgICBuaXRlcl9hc3N1bXB0aW9ucywNCi0J CQkJCSAgICAgZm9sZF9idWlsZDEgKFRSVVRIX05PVF9FWFBSLA0KLQkJCQkJCQkgIGJvb2xlYW5f dHlwZV9ub2RlLA0KLQkJCQkJCQkgIG1heV9iZV96ZXJvKSk7DQorCSAgaWYgKENPTVBBUklTT05f Q0xBU1NfUCAobWF5X2JlX3plcm8pKQ0KKwkgICAgew0KKwkgICAgICAvKiBUcnkgdG8gY29tYmlu ZSBtYXlfYmVfemVybyB3aXRoIGFzc3VtcHRpb25zLCB0aGlzIGNhbiBzaW1wbGlmeQ0KKwkJIGNv bXB1dGF0aW9uIG9mIG5pdGVyIGV4cHJlc3Npb24uICAqLw0KKwkgICAgICBpZiAobml0ZXJfYXNz dW1wdGlvbnMgJiYgIWludGVnZXJfbm9uemVyb3AgKG5pdGVyX2Fzc3VtcHRpb25zKSkNCisJCW5p dGVyX2Fzc3VtcHRpb25zID0gZm9sZF9idWlsZDIgKFRSVVRIX0FORF9FWFBSLCBib29sZWFuX3R5 cGVfbm9kZSwNCisJCQkJCQkgbml0ZXJfYXNzdW1wdGlvbnMsDQorCQkJCQkJIGZvbGRfYnVpbGQx IChUUlVUSF9OT1RfRVhQUiwNCisJCQkJCQkJICAgICAgYm9vbGVhbl90eXBlX25vZGUsDQorCQkJ CQkJCSAgICAgIG1heV9iZV96ZXJvKSk7DQorCSAgICAgIGVsc2UNCisJCW5pdGVyID0gZm9sZF9i dWlsZDMgKENPTkRfRVhQUiwgVFJFRV9UWVBFIChuaXRlciksIG1heV9iZV96ZXJvLA0KKwkJCQkg ICAgIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAwKSwNCisJCQkJICAgICByZXdy aXRlX3RvX25vbl90cmFwcGluZ19vdmVyZmxvdyAobml0ZXIpKTsNCisNCisJICAgICAgbWF5X2Jl X3plcm8gPSBOVUxMX1RSRUU7DQorCSAgICB9DQorCSAgZWxzZSBpZiAoaW50ZWdlcl9ub256ZXJv cCAobWF5X2JlX3plcm8pICYmIGkgPT0gMCkNCisJICAgIHsNCisJICAgICAgKm51bWJlcl9vZl9p dGVyYXRpb25zbTEgPSBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKG5pdGVyKSwgMCk7DQorCSAg ICAgICpudW1iZXJfb2ZfaXRlcmF0aW9ucyA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0 ZXIpLCAxKTsNCisJICAgICAgY29udGludWU7DQorCSAgICB9DQogCSAgZWxzZQ0KLQkgICAgbml0 ZXIgPSBmb2xkX2J1aWxkMyAoQ09ORF9FWFBSLCBUUkVFX1RZUEUgKG5pdGVyKSwgbWF5X2JlX3pl cm8sDQotCQkJCSBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKG5pdGVyKSwgMCksDQotCQkJCSBy ZXdyaXRlX3RvX25vbl90cmFwcGluZ19vdmVyZmxvdyAobml0ZXIpKTsNCisJICAgIGNvbnRpbnVl Ow0KKyAgICAgICB9DQogDQotCSAgbWF5X2JlX3plcm8gPSBOVUxMX1RSRUU7DQotCX0NCi0gICAg ICBlbHNlIGlmIChpbnRlZ2VyX25vbnplcm9wIChtYXlfYmVfemVybykpDQorICAgICAgLyogTG9v cCBhc3N1bXB0aW9ucyBhcmUgYmFzZWQgb2ZmIHRoZSBub3JtYWwgZXhpdC4gICovDQorICAgICAg aWYgKGkgPT0gMCkNCiAJew0KLQkgICpudW1iZXJfb2ZfaXRlcmF0aW9uc20xID0gYnVpbGRfaW50 X2NzdCAoVFJFRV9UWVBFIChuaXRlciksIDApOw0KLQkgICpudW1iZXJfb2ZfaXRlcmF0aW9ucyA9 IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAxKTsNCi0JICByZXR1cm4gY29uZDsN CisJICAqYXNzdW1wdGlvbnMgPSBuaXRlcl9hc3N1bXB0aW9uczsNCisJICAqbnVtYmVyX29mX2l0 ZXJhdGlvbnNtMSA9IG5pdGVyOw0KKw0KKwkgIC8qIFdlIHdhbnQgdGhlIG51bWJlciBvZiBsb29w IGhlYWRlciBleGVjdXRpb25zIHdoaWNoIGlzIHRoZSBudW1iZXINCisJICAgICBvZiBsYXRjaCBl eGVjdXRpb25zIHBsdXMgb25lLg0KKwkgICAgID8/PyAgRm9yIFVJTlRfTUFYIGxhdGNoIGV4ZWN1 dGlvbnMgdGhpcyBudW1iZXIgb3ZlcmZsb3dzIHRvIHplcm8NCisJICAgICBmb3IgbG9vcHMgbGlr ZSBkbyB7IG4rKzsgfSB3aGlsZSAobiAhPSAwKTsgICovDQorCSAgaWYgKG5pdGVyICYmICFjaHJl Y19jb250YWluc191bmRldGVybWluZWQgKG5pdGVyKSkNCisJICAgIG5pdGVyID0gZm9sZF9idWls ZDIgKFBMVVNfRVhQUiwgVFJFRV9UWVBFIChuaXRlciksDQorCQkJCSB1bnNoYXJlX2V4cHIgKG5p dGVyKSwNCisJCQkJIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAxKSk7DQorCSAg Km51bWJlcl9vZl9pdGVyYXRpb25zID0gbml0ZXI7DQogCX0NCi0gICAgICBlbHNlDQotCXJldHVy biBjb25kOw0KICAgICB9DQogDQotICAqYXNzdW1wdGlvbnMgPSBuaXRlcl9hc3N1bXB0aW9uczsN Ci0gICpudW1iZXJfb2ZfaXRlcmF0aW9uc20xID0gbml0ZXI7DQotDQotICAvKiBXZSB3YW50IHRo ZSBudW1iZXIgb2YgbG9vcCBoZWFkZXIgZXhlY3V0aW9ucyB3aGljaCBpcyB0aGUgbnVtYmVyDQot ICAgICBvZiBsYXRjaCBleGVjdXRpb25zIHBsdXMgb25lLg0KLSAgICAgPz8/ICBGb3IgVUlOVF9N QVggbGF0Y2ggZXhlY3V0aW9ucyB0aGlzIG51bWJlciBvdmVyZmxvd3MgdG8gemVybw0KLSAgICAg Zm9yIGxvb3BzIGxpa2UgZG8geyBuKys7IH0gd2hpbGUgKG4gIT0gMCk7ICAqLw0KLSAgaWYgKG5p dGVyICYmICFjaHJlY19jb250YWluc191bmRldGVybWluZWQgKG5pdGVyKSkNCi0gICAgbml0ZXIg PSBmb2xkX2J1aWxkMiAoUExVU19FWFBSLCBUUkVFX1RZUEUgKG5pdGVyKSwgdW5zaGFyZV9leHBy IChuaXRlciksDQotCQkJICBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKG5pdGVyKSwgMSkpOw0K LSAgKm51bWJlcl9vZl9pdGVyYXRpb25zID0gbml0ZXI7DQorICBpZiAoZHVtcF9lbmFibGVkX3Ag KCkpDQorICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sICJBbGwg bG9vcCBleGl0cyBzdWNjZXNzZnVsbHkgYW5hbHl6ZWQuXG4iKTsNCiANCi0gIHJldHVybiBjb25k Ow0KKyAgcmV0dXJuIGNvbmRzOw0KIH0NCiANCiAvKiBGdW5jdGlvbiBiYl9pbl9sb29wX3ANCkBA IC0xNDU1LDcgKzE0ODEsOCBAQCB2ZWN0X2NvbXB1dGVfc2luZ2xlX3NjYWxhcl9pdGVyYXRpb25f Y29zdCAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvKQ0KIA0KICAgIFZlcmlmeSB0aGF0IGNlcnRh aW4gQ0ZHIHJlc3RyaWN0aW9ucyBob2xkLCBpbmNsdWRpbmc6DQogICAgLSB0aGUgbG9vcCBoYXMg YSBwcmUtaGVhZGVyDQotICAgLSB0aGUgbG9vcCBoYXMgYSBzaW5nbGUgZW50cnkgYW5kIGV4aXQN CisgICAtIHRoZSBsb29wIGhhcyBhIHNpbmdsZSBlbnRyeQ0KKyAgIC0gbmVzdGVkIGxvb3BzIGNh biBoYXZlIG9ubHkgYSBzaW5nbGUgZXhpdC4NCiAgICAtIHRoZSBsb29wIGV4aXQgY29uZGl0aW9u IGlzIHNpbXBsZSBlbm91Z2gNCiAgICAtIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBjYW4gYmUg YW5hbHl6ZWQsIGkuZSwgYSBjb3VudGFibGUgbG9vcC4gIFRoZQ0KICAgICAgbml0ZXIgY291bGQg YmUgYW5hbHl6ZWQgdW5kZXIgc29tZSBhc3N1bXB0aW9ucy4gICovDQpAQCAtMTQ4NCwxMSArMTUx MSw2IEBAIHZlY3RfYW5hbHl6ZV9sb29wX2Zvcm0gKGNsYXNzIGxvb3AgKmxvb3AsIHZlY3RfbG9v cF9mb3JtX2luZm8gKmluZm8pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KICAgICAg ICAgICAgICAgICAgICAgICAgIChleGl0LWJiKSAgKi8NCiANCi0gICAgICBpZiAobG9vcC0+bnVt X25vZGVzICE9IDIpDQotCXJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0 aW9uLA0KLQkJCQkgICAgICAgIm5vdCB2ZWN0b3JpemVkOiINCi0JCQkJICAgICAgICIgY29udHJv bCBmbG93IGluIGxvb3AuXG4iKTsNCi0NCiAgICAgICBpZiAoZW1wdHlfYmxvY2tfcCAobG9vcC0+ aGVhZGVyKSkNCiAJcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24s DQogCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6IGVtcHR5IGxvb3AuXG4iKTsNCkBAIC0xNTU5 LDExICsxNTgxLDEzIEBAIHZlY3RfYW5hbHl6ZV9sb29wX2Zvcm0gKGNsYXNzIGxvb3AgKmxvb3As IHZlY3RfbG9vcF9mb3JtX2luZm8gKmluZm8pDQogICAgICAgICBkdW1wX3ByaW50Zl9sb2MgKE1T R19OT1RFLCB2ZWN0X2xvY2F0aW9uLA0KIAkJCSAiQ29uc2lkZXJpbmcgb3V0ZXItbG9vcCB2ZWN0 b3JpemF0aW9uLlxuIik7DQogICAgICAgaW5mby0+aW5uZXJfbG9vcF9jb25kID0gaW5uZXIubG9v cF9jb25kOw0KKw0KKyAgICAgIGlmICghc2luZ2xlX2V4aXQgKGxvb3ApKQ0KKwlyZXR1cm4gb3B0 X3Jlc3VsdDo6ZmFpbHVyZV9hdCAodmVjdF9sb2NhdGlvbiwNCisJCQkJICAgICAgICJub3QgdmVj dG9yaXplZDogbXVsdGlwbGUgZXhpdHMuXG4iKTsNCisNCiAgICAgfQ0KIA0KLSAgaWYgKCFzaW5n bGVfZXhpdCAobG9vcCkpDQotICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0ICh2ZWN0 X2xvY2F0aW9uLA0KLQkJCQkgICAibm90IHZlY3Rvcml6ZWQ6IG11bHRpcGxlIGV4aXRzLlxuIik7 DQogICBpZiAoRURHRV9DT1VOVCAobG9vcC0+aGVhZGVyLT5wcmVkcykgIT0gMikNCiAgICAgcmV0 dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQogCQkJCSAgICJub3Qg dmVjdG9yaXplZDoiDQpAQCAtMTU3OSwyMSArMTYwMyw0NSBAQCB2ZWN0X2FuYWx5emVfbG9vcF9m b3JtIChjbGFzcyBsb29wICpsb29wLCB2ZWN0X2xvb3BfZm9ybV9pbmZvICppbmZvKQ0KIAkJCQkg ICAibm90IHZlY3Rvcml6ZWQ6IGxhdGNoIGJsb2NrIG5vdCBlbXB0eS5cbiIpOw0KIA0KICAgLyog TWFrZSBzdXJlIHRoZSBleGl0IGlzIG5vdCBhYm5vcm1hbC4gICovDQotICBlZGdlIGUgPSBzaW5n bGVfZXhpdCAobG9vcCk7DQotICBpZiAoZS0+ZmxhZ3MgJiBFREdFX0FCTk9STUFMKQ0KKyAgYXV0 b192ZWM8ZWRnZT4gZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKTsNCisgIGVkZ2Ug bmV4aXQgPSBub3JtYWxfZXhpdCAobG9vcCk7DQorICBmb3IgKGVkZ2UgZSA6IGV4aXRzKQ0KKyAg ICB7DQorICAgICAgaWYgKGUtPmZsYWdzICYgRURHRV9BQk5PUk1BTCkNCisJcmV0dXJuIG9wdF9y ZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQorCQkJCSAgICAgICAibm90IHZlY3Rv cml6ZWQ6Ig0KKwkJCQkgICAgICAgIiBhYm5vcm1hbCBsb29wIGV4aXQgZWRnZS5cbiIpOw0KKyAg ICAgIC8qIEVhcmx5IGJyZWFrIEJCIG11c3QgYmUgYWZ0ZXIgdGhlIG1haW4gZXhpdCBCQi4gIElu IHRoZW9yeSB3ZSBzaG91bGQNCisJIGJlIGFibGUgdG8gdmVjdG9yaXplIHRoZSBpbnZlcnNlIG9y ZGVyLCBidXQgdGhlIGN1cnJlbnQgZmxvdyBpbiB0aGUNCisJIHRoZSB2ZWN0b3JpemVyIGFsd2F5 cyBhc3N1bWVzIHlvdSB1cGRhdGUgc3VjY2VzcyBQSEkgbm9kZXMsIG5vdA0KKwkgcHJlZHMuICAq Lw0KKyAgICAgIGlmIChlICE9IG5leGl0ICYmICFkb21pbmF0ZWRfYnlfcCAoQ0RJX0RPTUlOQVRP UlMsIG5leGl0LT5zcmMsIGUtPnNyYykpDQorCXJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0 ICh2ZWN0X2xvY2F0aW9uLA0KKwkJCQkgICAgICAgIm5vdCB2ZWN0b3JpemVkOiINCisJCQkJICAg ICAgICIgYWJub3JtYWwgbG9vcCBleGl0IGVkZ2Ugb3JkZXIuXG4iKTsNCisgICAgfQ0KKw0KKyAg aWYgKGV4aXRzLmxlbmd0aCAoKSA+IDIpDQogICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJl X2F0ICh2ZWN0X2xvY2F0aW9uLA0KIAkJCQkgICAibm90IHZlY3Rvcml6ZWQ6Ig0KLQkJCQkgICAi IGFibm9ybWFsIGxvb3AgZXhpdCBlZGdlLlxuIik7DQotDQotICBpbmZvLT5sb29wX2NvbmQNCisJ CQkJICAgIiB0b28gbWFueSBleGl0cy4gT25seSAxIGFkZGl0aW9uYWwgZXhpdCINCisJCQkJICAg IiBzdXBwb3J0ZWQuXG4iKTsNCisgIGlmIChsb29wLT5udW1fbm9kZXMgIT0gMiArIGV4aXRzLmxl bmd0aCAoKSAtIDEpDQorICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xv Y2F0aW9uLA0KKwkJCQkgICAibm90IHZlY3Rvcml6ZWQ6Ig0KKwkJCQkgICAiIHVuc3VwcG9ydGVk IGNvbnRyb2wgZmxvdyBpbiBsb29wLlxuIik7DQorICBpbmZvLT5jb25kcw0KICAgICA9IHZlY3Rf Z2V0X2xvb3Bfbml0ZXJzIChsb29wLCAmaW5mby0+YXNzdW1wdGlvbnMsDQogCQkJICAgICZpbmZv LT5udW1iZXJfb2ZfaXRlcmF0aW9ucywNCiAJCQkgICAgJmluZm8tPm51bWJlcl9vZl9pdGVyYXRp b25zbTEpOw0KLSAgaWYgKCFpbmZvLT5sb29wX2NvbmQpDQorDQorICBpZiAoaW5mby0+Y29uZHMu aXNfZW1wdHkgKCkpDQogICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0DQogICAgICAg KHZlY3RfbG9jYXRpb24sDQogICAgICAgICJub3QgdmVjdG9yaXplZDogY29tcGxpY2F0ZWQgZXhp dCBjb25kaXRpb24uXG4iKTsNCiANCisgIGluZm8tPmxvb3BfY29uZCA9IGluZm8tPmNvbmRzWzBd Ow0KKw0KICAgaWYgKGludGVnZXJfemVyb3AgKGluZm8tPmFzc3VtcHRpb25zKQ0KICAgICAgIHx8 ICFpbmZvLT5udW1iZXJfb2ZfaXRlcmF0aW9ucw0KICAgICAgIHx8IGNocmVjX2NvbnRhaW5zX3Vu ZGV0ZXJtaW5lZCAoaW5mby0+bnVtYmVyX29mX2l0ZXJhdGlvbnMpKQ0KQEAgLTE2MzgsOCArMTY4 NiwyMiBAQCB2ZWN0X2NyZWF0ZV9sb29wX3ZpbmZvIChjbGFzcyBsb29wICpsb29wLCB2ZWNfaW5m b19zaGFyZWQgKnNoYXJlZCwNCiAgIGlmICghaW50ZWdlcl9vbmVwIChpbmZvLT5hc3N1bXB0aW9u cykgJiYgIW1haW5fbG9vcF9pbmZvKQ0KICAgICBMT09QX1ZJTkZPX05JVEVSU19BU1NVTVBUSU9O UyAobG9vcF92aW5mbykgPSBpbmZvLT5hc3N1bXB0aW9uczsNCiANCi0gIHN0bXRfdmVjX2luZm8g bG9vcF9jb25kX2luZm8gPSBsb29wX3ZpbmZvLT5sb29rdXBfc3RtdCAoaW5mby0+bG9vcF9jb25k KTsNCi0gIFNUTVRfVklORk9fVFlQRSAobG9vcF9jb25kX2luZm8pID0gbG9vcF9leGl0X2N0cmxf dmVjX2luZm9fdHlwZTsNCisgIGJvb2wgbG9vcF9pdl9jb25kID0gdHJ1ZTsNCisgIGZvciAoZ2Nv bmQgKmNvbmQgOiBpbmZvLT5jb25kcykNCisgICAgew0KKyAgICAgIGlmICghbG9vcF9pdl9jb25k KQ0KKwl7DQorCSAgc3RtdF92ZWNfaW5mbyBsb29wX2NvbmRfaW5mbyA9IGxvb3BfdmluZm8tPmxv b2t1cF9zdG10IChjb25kKTsNCisJICBTVE1UX1ZJTkZPX1RZUEUgKGxvb3BfY29uZF9pbmZvKSA9 IGxvb3BfZXhpdF9jdHJsX3ZlY19pbmZvX3R5cGU7DQorCSAgTE9PUF9WSU5GT19MT09QX0NPTkRT IChsb29wX3ZpbmZvKS5zYWZlX3B1c2ggKGNvbmQpOw0KKwl9DQorICAgICAgbG9vcF9pdl9jb25k ID0gZmFsc2U7DQorICAgIH0NCisNCisgIC8qIENoZWNrIHRvIHNlZSBpZiB3ZSdyZSB2ZWN0b3Jp emluZyBtdWx0aXBsZSBleGl0cy4gICovDQorICBMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9v cF92aW5mbykNCisgICAgPSAhTE9PUF9WSU5GT19MT09QX0NPTkRTIChsb29wX3ZpbmZvKS5pc19l bXB0eSAoKTsNCisNCiAgIGlmIChpbmZvLT5pbm5lcl9sb29wX2NvbmQpDQogICAgIHsNCiAgICAg ICBzdG10X3ZlY19pbmZvIGlubmVyX2xvb3BfY29uZF9pbmZvDQpAQCAtMjI3MCwxMCArMjMzMiwx MyBAQCB2ZWN0X2RldGVybWluZV9wYXJ0aWFsX3ZlY3RvcnNfYW5kX3BlZWxpbmcgKGxvb3BfdmVj X2luZm8gbG9vcF92aW5mbywNCiAgIGJvb2wgbmVlZF9wZWVsaW5nX29yX3BhcnRpYWxfdmVjdG9y c19wDQogICAgID0gdmVjdF9uZWVkX3BlZWxpbmdfb3JfcGFydGlhbF92ZWN0b3JzX3AgKGxvb3Bf dmluZm8pOw0KIA0KLSAgLyogRGVjaWRlIHdoZXRoZXIgdG8gdmVjdG9yaXplIHRoZSBsb29wIHdp dGggcGFydGlhbCB2ZWN0b3JzLiAgKi8NCisgIC8qIERlY2lkZSB3aGV0aGVyIHRvIHZlY3Rvcml6 ZSB0aGUgbG9vcCB3aXRoIHBhcnRpYWwgdmVjdG9ycy4gIEN1cnJlbnRseQ0KKyAgICAgZWFybHkg YnJlYWsgdmVjdG9yaXphdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHBhcnRpYWwgdmVjdG9ycyBhcyB3 ZSBoYXZlDQorICAgICB0byBwZWVsIGEgc2NhbGFyIGxvb3AgdGhhdCB3ZSBjYW4ndCB2ZWN0b3Jp emUuICAqLw0KICAgTE9PUF9WSU5GT19VU0lOR19QQVJUSUFMX1ZFQ1RPUlNfUCAobG9vcF92aW5m bykgPSBmYWxzZTsNCiAgIExPT1BfVklORk9fRVBJTF9VU0lOR19QQVJUSUFMX1ZFQ1RPUlNfUCAo bG9vcF92aW5mbykgPSBmYWxzZTsNCiAgIGlmIChMT09QX1ZJTkZPX0NBTl9VU0VfUEFSVElBTF9W RUNUT1JTX1AgKGxvb3BfdmluZm8pDQorICAgICAgJiYgIUxPT1BfVklORk9fRUFSTFlfQlJFQUtT IChsb29wX3ZpbmZvKQ0KICAgICAgICYmIG5lZWRfcGVlbGluZ19vcl9wYXJ0aWFsX3ZlY3RvcnNf cCkNCiAgICAgew0KICAgICAgIC8qIEZvciBwYXJ0aWFsLXZlY3Rvci11c2FnZT0xLCB0cnkgdG8g cHVzaCB0aGUgaGFuZGxpbmcgb2YgcGFydGlhbA0KQEAgLTI3NDYsMTMgKzI4MTEsMTQgQEAgc3Rh cnRfb3ZlcjoNCiANCiAgIC8qIElmIGFuIGVwaWxvZ3VlIGxvb3AgaXMgcmVxdWlyZWQgbWFrZSBz dXJlIHdlIGNhbiBjcmVhdGUgb25lLiAgKi8NCiAgIGlmIChMT09QX1ZJTkZPX1BFRUxJTkdfRk9S X0dBUFMgKGxvb3BfdmluZm8pDQotICAgICAgfHwgTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9OSVRF UiAobG9vcF92aW5mbykpDQorICAgICAgfHwgTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9OSVRFUiAo bG9vcF92aW5mbykNCisgICAgICB8fCBMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5m bykpDQogICAgIHsNCiAgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQogICAgICAgICBkdW1w X3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLCAiZXBpbG9nIGxvb3AgcmVxdWly ZWRcbiIpOw0KICAgICAgIGlmICghdmVjdF9jYW5fYWR2YW5jZV9pdnNfcCAobG9vcF92aW5mbykN Ci0JICB8fCAhc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChMT09QX1ZJTkZPX0xPT1AgKGxv b3BfdmluZm8pLA0KLQkJCQkJICAgc2luZ2xlX2V4aXQgKExPT1BfVklORk9fTE9PUA0KKwkgIHx8 ICFzbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29wX3AgKGxvb3BfdmluZm8sDQorCQkJCQkgICBub3Jt YWxfZXhpdCAoTE9PUF9WSU5GT19MT09QDQogCQkJCQkJCSAobG9vcF92aW5mbykpKSkNCiAgICAg ICAgIHsNCiAJICBvayA9IG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQpA QCAtMzIzOSw2ICszMzA1LDggQEAgdmVjdF9hbmFseXplX2xvb3AgKGNsYXNzIGxvb3AgKmxvb3As IHZlY19pbmZvX3NoYXJlZCAqc2hhcmVkKQ0KIAkJICAgICAiKioqKiogQ2hvb3NpbmcgdmVjdG9y IG1vZGUgJXNcbiIsDQogCQkgICAgIEdFVF9NT0RFX05BTUUgKGZpcnN0X2xvb3BfdmluZm8tPnZl Y3Rvcl9tb2RlKSk7DQogDQorICBsb29wX2Zvcm1faW5mby5jb25kcy5yZWxlYXNlICgpOw0KKw0K ICAgLyogT25seSB2ZWN0b3JpemUgZXBpbG9ndWVzIGlmIFBBUkFNX1ZFQ1RfRVBJTE9HVUVTX05P TUFTSyBpcw0KICAgICAgZW5hYmxlZCwgU0lNRFVJRCBpcyBub3Qgc2V0LCBpdCBpcyB0aGUgaW5u ZXJtb3N0IGxvb3AgYW5kIHdlIGhhdmUNCiAgICAgIGVpdGhlciBhbHJlYWR5IGZvdW5kIHRoZSBs b29wJ3MgU0lNRExFTiBvciB0aGVyZSB3YXMgbm8gU0lNRExFTiB0bw0KQEAgLTMzNTAsNiArMzQx OCw4IEBAIHZlY3RfYW5hbHl6ZV9sb29wIChjbGFzcyBsb29wICpsb29wLCB2ZWNfaW5mb19zaGFy ZWQgKnNoYXJlZCkNCiAJCQkgICAoZmlyc3RfbG9vcF92aW5mby0+ZXBpbG9ndWVfdmluZm9zWzBd LT52ZWN0b3JfbW9kZSkpOw0KICAgICB9DQogDQorICBsb29wX2Zvcm1faW5mby5jb25kcy5yZWxl YXNlICgpOw0KKw0KICAgcmV0dXJuIGZpcnN0X2xvb3BfdmluZm87DQogfQ0KIA0KQEAgLTU0MDcs NyArNTQ3Nyw3IEBAIHZlY3RfY3JlYXRlX2VwaWxvZ19mb3JfcmVkdWN0aW9uIChsb29wX3ZlY19p bmZvIGxvb3BfdmluZm8sDQogICBiYXNpY19ibG9jayBleGl0X2JiOw0KICAgdHJlZSBzY2FsYXJf ZGVzdDsNCiAgIHRyZWUgc2NhbGFyX3R5cGU7DQotICBnaW1wbGUgKm5ld19waGkgPSBOVUxMLCAq cGhpOw0KKyAgZ2ltcGxlICpuZXdfcGhpID0gTlVMTCwgKnBoaSA9IE5VTEw7DQogICBnaW1wbGVf c3RtdF9pdGVyYXRvciBleGl0X2dzaTsNCiAgIHRyZWUgbmV3X3RlbXAgPSBOVUxMX1RSRUUsIG5l d19uYW1lLCBuZXdfc2NhbGFyX2Rlc3Q7DQogICBnaW1wbGUgKmVwaWxvZ19zdG10ID0gTlVMTDsN CkBAIC01NjI5LDcgKzU2OTksNyBAQCB2ZWN0X2NyZWF0ZV9lcGlsb2dfZm9yX3JlZHVjdGlvbiAo bG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KICAgICAgICAgIFN0b3JlIHRoZW0gaW4gTkVXX1BI SVMuICAqLw0KICAgaWYgKGRvdWJsZV9yZWR1YykNCiAgICAgbG9vcCA9IG91dGVyX2xvb3A7DQot ICBleGl0X2JiID0gc2luZ2xlX2V4aXQgKGxvb3ApLT5kZXN0Ow0KKyAgZXhpdF9iYiA9IG5vcm1h bF9leGl0IChsb29wKS0+ZGVzdDsNCiAgIGV4aXRfZ3NpID0gZ3NpX2FmdGVyX2xhYmVscyAoZXhp dF9iYik7DQogICByZWR1Y19pbnB1dHMuY3JlYXRlIChzbHBfbm9kZSA/IHZlY19udW0gOiBuY29w aWVzKTsNCiAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWNfbnVtOyBpKyspDQpAQCAtNTY0 NSwxMCArNTcxNSwzNyBAQCB2ZWN0X2NyZWF0ZV9lcGlsb2dfZm9yX3JlZHVjdGlvbiAobG9vcF92 ZWNfaW5mbyBsb29wX3ZpbmZvLA0KIAkgIHBoaSA9IGNyZWF0ZV9waGlfbm9kZSAobmV3X2RlZiwg ZXhpdF9iYik7DQogCSAgaWYgKGopDQogCSAgICBkZWYgPSBnaW1wbGVfZ2V0X2xocyAoU1RNVF9W SU5GT19WRUNfU1RNVFMgKHJkZWZfaW5mbylbal0pOw0KLQkgIFNFVF9QSElfQVJHX0RFRiAocGhp LCBzaW5nbGVfZXhpdCAobG9vcCktPmRlc3RfaWR4LCBkZWYpOw0KKwkgIFNFVF9QSElfQVJHX0RF RiAocGhpLCBub3JtYWxfZXhpdCAobG9vcCktPmRlc3RfaWR4LCBkZWYpOw0KIAkgIG5ld19kZWYg PSBnaW1wbGVfY29udmVydCAoJnN0bXRzLCB2ZWN0eXBlLCBuZXdfZGVmKTsNCiAJICByZWR1Y19p bnB1dHMucXVpY2tfcHVzaCAobmV3X2RlZik7DQogCX0NCisJLyogVXBkYXRlIHRoZSBvdGhlciBl eGl0cy4gICovDQorCWlmIChMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpDQor CSAgew0KKwkgICAgYXV0b192ZWM8ZWRnZT4gZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChs b29wKTsNCisJICAgIGdwaGlfaXRlcmF0b3IgZ3NpLCBnc2kxOw0KKwkgICAgZm9yICh1bnNpZ25l ZCBpID0gMTsgaSA8IGV4aXRzLmxlbmd0aCAoKTsgaSsrKQ0KKwkgICAgICB7DQorCQkvKiBGaW5k IHRoZSBwaGkgbm9kZSB0byBwcm9wYWdldCBpbnRvIHRoZSBleGl0IGJsb2NrIGZvciBlYWNoDQor CQkgICBleGl0IGVkZ2UuICAqLw0KKwkJZWRnZSBleGl0ID0gZXhpdHNbaV07DQorCQlmb3IgKGdz aSA9IGdzaV9zdGFydF9waGlzIChleGl0X2JiKSwNCisJCSAgICAgZ3NpMSA9IGdzaV9zdGFydF9w aGlzIChleGl0LT5zcmMpOw0KKwkJICAgICAhZ3NpX2VuZF9wIChnc2kpICYmICFnc2lfZW5kX3Ag KGdzaTEpOw0KKwkJICAgICBnc2lfbmV4dCAoJmdzaSksIGdzaV9uZXh0ICgmZ3NpMSkpDQorCQkg IHsNCisJCSAgICAvKiBUaGVyZSByZWFsbHkgc2hvdWxkIGJlIGEgZnVuY3Rpb24gdG8ganVzdCBn ZXQgdGhlIG51bWJlcg0KKwkJICAgICAgIG9mIHBoaXMgaW5zaWRlIGEgYmIuICAqLw0KKwkJICAg IGlmIChwaGkgJiYgcGhpID09IGdzaS5waGkgKCkpDQorCQkgICAgICB7DQorCQkJZ3BoaSAqcGhp MSA9IGdzaTEucGhpICgpOw0KKwkJCVNFVF9QSElfQVJHX0RFRiAocGhpLCBleGl0LT5kZXN0X2lk eCwNCisJCQkJCSBQSElfUkVTVUxUIChwaGkxKSk7DQorCQkJYnJlYWs7DQorCQkgICAgICB9DQor CQkgIH0NCisJICAgICAgfQ0KKwkgIH0NCiAgICAgICBnc2lfaW5zZXJ0X3NlcV9iZWZvcmUgKCZl eGl0X2dzaSwgc3RtdHMsIEdTSV9TQU1FX1NUTVQpOw0KICAgICB9DQogDQpAQCAtOTM1OCw4ICs5 NDU1LDIyIEBAIHZlY3Rvcml6YWJsZV9pbmR1Y3Rpb24gKGxvb3BfdmVjX2luZm8gbG9vcF92aW5m bywNCiAgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwgInRyYW5z Zm9ybSBpbmR1Y3Rpb24gcGhpLlxuIik7DQogDQogICBwZSA9IGxvb3BfcHJlaGVhZGVyX2VkZ2Ug KGl2X2xvb3ApOw0KLSAgLyogRmluZCB0aGUgZmlyc3QgaW5zZXJ0aW9uIHBvaW50IGluIHRoZSBC Qi4gICovDQorICAvKiBGaW5kIHRoZSBmaXJzdCBpbnNlcnRpb24gcG9pbnQgaW4gdGhlIEJCLiAg SWYgd2UncmUgdmVjdG9yemluZyBhIGJsb2NrIHRoYXQNCisgICAgIGNvbnRhaW5zIGFuIGVhcmx5 IGV4aXQsIHRoZSBJViBuZWVkcyB0byBiZSBtYXRlcmlhbGl6ZWQgaW4gdGhlIGZhbGwNCisgICAg IHRocm91Z2ggYmxvY2sgYXMgd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgSVYgaWYgd2UncmUgZXhp dGluZy4gICovDQogICBiYXNpY19ibG9jayBiYiA9IGdpbXBsZV9iYiAocGhpKTsNCisgIGlmIChM T09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpDQorICAgIHsNCisgICAgICBmb3Ig KGdjb25kICpjb25kIDogTE9PUF9WSU5GT19MT09QX0NPTkRTIChsb29wX3ZpbmZvKSkNCisJew0K KwkgIGJhc2ljX2Jsb2NrIGNvbmRfYmIgPSBnaW1wbGVfYmIgKGNvbmQpOw0KKwkgIGlmIChjb25k X2JiID09IGJiKQ0KKwkgICAgew0KKwkgICAgICBiYiA9IEZBTExUSFJVX0VER0UgKGNvbmRfYmIp LT5kZXN0Ow0KKwkgICAgICBicmVhazsNCisJICAgIH0NCisJfQ0KKyAgICB9DQogICBzaSA9IGdz aV9hZnRlcl9sYWJlbHMgKGJiKTsNCiANCiAgIC8qIEZvciBTTFAgaW5kdWN0aW9uIHdlIGhhdmUg dG8gZ2VuZXJhdGUgc2V2ZXJhbCBJVnMgYXMgZm9yIGV4YW1wbGUNCkBAIC05OTk5LDEzICsxMDEx MCwyNCBAQCB2ZWN0b3JpemFibGVfbGl2ZV9vcGVyYXRpb24gKHZlY19pbmZvICp2aW5mbywNCiAJ ICAgbmV3X3RyZWUgPSBsYW5lX2V4dHJhY3QgPHZlY19saHMnLCAuLi4+Ow0KIAkgICBsaHMnID0g bmV3X3RyZWU7ICAqLw0KIA0KKyAgICAgIC8qIFdoZW4gdmVjdG9yaXppbmcgYW4gZWFybHkgYnJl YWssIGFueSBsaXZlIHN0YXRlbWVudCB0aGF0IGlzIHVzZWQNCisJIG91dHNpZGUgb2YgdGhlIGxv b3AgYXJlIGRlYWQuICBUaGUgbG9vcCB3aWxsIG5ldmVyIGdldCB0byB0aGVtLg0KKwkgV2UgY291 bGQgY2hhbmdlIHRoZSBsaXZlbmVzcyB2YWx1ZSBkdXJpbmcgYW5hbHlzaXMgaW5zdGVhZCBidXQg c2luY2UNCisJIHRoZSBiZWxvdyBjb2RlIGlzIGludmFsaWQgYW55d2F5IGp1c3QgaWdub3JlIGl0 IGR1cmluZyBjb2RlZ2VuLiAgKi8NCisgICAgICBpZiAoTE9PUF9WSU5GT19FQVJMWV9CUkVBS1Mg KGxvb3BfdmluZm8pKQ0KKwlyZXR1cm4gdHJ1ZTsNCisNCiAgICAgICBjbGFzcyBsb29wICpsb29w ID0gTE9PUF9WSU5GT19MT09QIChsb29wX3ZpbmZvKTsNCi0gICAgICBiYXNpY19ibG9jayBleGl0 X2JiID0gc2luZ2xlX2V4aXQgKGxvb3ApLT5kZXN0Ow0KKyAgICAgIGJhc2ljX2Jsb2NrIGV4aXRf YmIgPSBub3JtYWxfZXhpdCAobG9vcCktPmRlc3Q7DQogICAgICAgZ2NjX2Fzc2VydCAoc2luZ2xl X3ByZWRfcCAoZXhpdF9iYikpOw0KIA0KICAgICAgIHRyZWUgdmVjX2xoc19waGkgPSBjb3B5X3Nz YV9uYW1lICh2ZWNfbGhzKTsNCiAgICAgICBnaW1wbGUgKnBoaSA9IGNyZWF0ZV9waGlfbm9kZSAo dmVjX2xoc19waGksIGV4aXRfYmIpOw0KLSAgICAgIFNFVF9QSElfQVJHX0RFRiAocGhpLCBzaW5n bGVfZXhpdCAobG9vcCktPmRlc3RfaWR4LCB2ZWNfbGhzKTsNCisgICAgICAvKiBGb3IgZWFybHkg ZXhpdHMgd2UgbmVlZCB0byBjb21wdXRlIHRoZSByaWdodCBleGl0LiAgVGhlIGN1cnJlbnQNCisJ IGFwcHJvYWNoIHB1bnRzIHRvIGEgc2NhbGFyIGxvb3AgaW5zdGVhZC4gIElmIHdlIHdlcmUgdG8g dmVjdG9yaXplDQorCSB0aGUgZXhpdCBjb25kaXRpb24gYmVsb3cgbmVlZHMgdG8gdGFrZSBpbnRv IGFjY291bnQgdGhlIGRpZmZlcmVuY2UNCisJIGJldHdlZW4gYSBgYnJlYWtgIGVkZ2UgYW5kIGEg YHJldHVybmAgZWRnZS4gICovDQorICAgICAgU0VUX1BISV9BUkdfREVGIChwaGksIG5vcm1hbF9l eGl0IChsb29wKS0+ZGVzdF9pZHgsIHZlY19saHMpOw0KIA0KICAgICAgIGdpbXBsZV9zZXEgc3Rt dHMgPSBOVUxMOw0KICAgICAgIHRyZWUgbmV3X3RyZWU7DQpAQCAtMTA0NDQsNyArMTA1NjYsOCBA QCBzY2FsZV9wcm9maWxlX2Zvcl92ZWN0X2xvb3AgKGNsYXNzIGxvb3AgKmxvb3AsIHVuc2lnbmVk IHZmKQ0KICAgICAgIHNjYWxlX2xvb3BfZnJlcXVlbmNpZXMgKGxvb3AsIHApOw0KICAgICB9DQog DQotICBlZGdlIGV4aXRfZSA9IHNpbmdsZV9leGl0IChsb29wKTsNCisgIGVkZ2UgZXhpdF9lID0g bm9ybWFsX2V4aXQgKGxvb3ApOw0KKw0KICAgZXhpdF9lLT5wcm9iYWJpbGl0eSA9IHByb2ZpbGVf cHJvYmFiaWxpdHk6OmFsd2F5cyAoKSAvIChuZXdfZXN0X25pdGVyICsgMSk7DQogDQogICBlZGdl IGV4aXRfbCA9IHNpbmdsZV9wcmVkX2VkZ2UgKGxvb3AtPmxhdGNoKTsNCkBAIC0xMDc0Nyw2ICsx MDg3MCwxMTUgQEAgdXBkYXRlX2VwaWxvZ3VlX2xvb3BfdmluZm8gKGNsYXNzIGxvb3AgKmVwaWxv Z3VlLCB0cmVlIGFkdmFuY2UpDQogICBlcGlsb2d1ZV92aW5mby0+c2hhcmVkLT5zYXZlX2RhdGFy ZWZzICgpOw0KIH0NCiANCisvKiAgV2hlbiB2ZWN0b3JpemluZyBlYXJseSBicmVhayBzdGF0ZW1l bnRzIGluc3RydWN0aW9ucyB0aGF0IGhhcHBlbiBiZWZvcmUNCisgICAgdGhlIGVhcmx5IGJyZWFr IGluIHRoZSBjdXJyZW50IEJCIG5lZWQgdG8gYmUgbW92ZWQgdG8gYWZ0ZXIgdGhlIGVhcmx5DQor ICAgIGJyZWFrLiAgVGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIHRoYXQgYW5kIGFzc3VtZXMgdGhh dCBhbnkgdmFsaWRhdHkNCisgICAgY2hlY2tzIGhhcyBhbHJlYWR5IGJlZW4gcGVyZm9ybWVkLg0K Kw0KKyAgICBXaGlsZSBtb3ZpbmcgdGhlIGluc3RydWN0aW9ucyBpZiBpdCBlbmNvdW50ZXJzIGEg VlVTRSBvciBWREVGIGl0IHRoZW4NCisgICAgY29ycmVjdHMgdGhlIFZVU0VTIGFzIGl0IG1vdmVz IHRoZSBzdGF0ZW1lbnRzIGFsb25nLiAgQ0hBSU5FRCBjb250YWlucw0KKyAgICB0aGUgbGlzdCBv ZiBTU0FfTkFNRVMgdGhhdCBiZWxvbmcgdG8gdGhlIGRlcGVuZGVuY3kgY2hhaW4gb2YgdGhlIGVh cmx5DQorICAgIGJyZWFrIGNvbmRpdGlvbmFsLiAgR0RFU1QgaXMgdGhlIGxvY2F0aW9uIGluIHdo aWNoIHRvIGluc2VydCB0aGUgbmV3DQorICAgIHN0YXRlbWVudHMuICBHU1RNVCBpcyB0aGUgaXRl cmF0b3IgdG8gd2FsayB1cCB0byBmaW5kIHN0YXRlbWVudHMgdG8NCisgICAgY29uc2lkZXIgbW92 aW5nLiAgUkVBQ0hJTkdfVlVTRSBjb250YWlucyB0aGUgZG9taW5hdGluZyBWVVNFIGZvdW5kIHNv IGZhcg0KKyAgICBhbmQgQ1VSUkVOVF9WREVGIGNvbnRhaW5zIHRoZSBsYXN0IFZERUYgd2UndmUg c2Vlbi4gIFRoZXNlIGFyZSB1cGRhdGVkIGluDQorICAgIHByZS1vcmRlciBhbmQgdXBkYXRlZCBp biBwb3N0LW9yZGVyIGFmdGVyIG1vdmluZyB0aGUgaW5zdHJ1Y3Rpb24uICAqLw0KKw0KK3N0YXRp YyB2b2lkDQorbW92ZV9lYXJseV9leGl0X3N0bXRzIChoYXNoX3NldDx0cmVlPiAqY2hhaW5lZCwg Z2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdkZXN0LA0KKwkJICAgICAgIGdpbXBsZV9zdG10X2l0ZXJh dG9yICpnc3RtdCwgdHJlZSAqcmVhY2hpbmdfdnVzZSwNCisJCSAgICAgICB0cmVlICpjdXJyZW50 X3ZkZWYpDQorew0KKyAgaWYgKGdzaV9lbmRfcCAoKmdzdG10KSkNCisgICAgcmV0dXJuOw0KKw0K KyAgZ2ltcGxlICpzdG10ID0gZ3NpX3N0bXQgKCpnc3RtdCk7DQorICBpZiAoZ2ltcGxlX2hhc19v cHMgKHN0bXQpKQ0KKyAgICB7DQorICAgICAgdHJlZSBkZXN0ID0gTlVMTF9UUkVFOw0KKyAgICAg IC8qIFRyeSB0byBmaW5kIHRoZSBTU0FfTkFNRSBiZWluZyBkZWZpbmVkLiAgRm9yIFN0YXRlbWVu dHMgd2l0aCBhbiBMSFMNCisJIHVzZSB0aGUgTEhTLCBpZiBub3QsIGFzc3VtZSB0aGF0IHRoZSBm aXJzdCBhcmd1bWVudCBvZiBhIGNhbGwgaXMgdGhlDQorCSB2YWx1ZSBiZWluZyBkZWZpbmVkLiAg ZS5nLiBNQVNLRURfTE9BRCBldGMuICAqLw0KKyAgICAgIGlmIChnaW1wbGVfaGFzX2xocyAoc3Rt dCkpDQorCXsNCisJICBpZiAoaXNfZ2ltcGxlX2Fzc2lnbiAoc3RtdCkpDQorCSAgICBkZXN0ID0g Z2ltcGxlX2Fzc2lnbl9saHMgKHN0bXQpOw0KKwkgIGVsc2UgaWYgKGNvbnN0IGdjYWxsICpjYWxs ID0gZHluX2Nhc3QgPGNvbnN0IGdjYWxsICo+IChzdG10KSkNCisJICAgIGRlc3QgPSBnaW1wbGVf Y2FsbF9saHMgKGNhbGwpOw0KKwl9DQorICAgICAgZWxzZSBpZiAoY29uc3QgZ2NhbGwgKmNhbGwg PSBkeW5fY2FzdCA8Y29uc3QgZ2NhbGwgKj4gKHN0bXQpKQ0KKwlkZXN0ID0gZ2ltcGxlX2FyZyAo Y2FsbCwgMCk7DQorDQorICAgICAgLyogRG9uJ3QgbW92ZSB0aGUgc2NhbGFyIGluc3RydWN0aW9u cy4gICovDQorICAgICAgYm9vbCBtb3ZlID0gZGVzdCAhPSBOVUxMX1RSRUU7DQorDQorICAgICAg LyogSWYgd2UgZm91bmQgdGhlIGRlZmluaW5nIHN0YXRlbWVudCBvZiBhIHNvbWV0aGluZyB0aGF0 J3MgcGFydCBvZiB0aGUNCisJIGNoYWluIHRoZW4gZXhwYW5kIHRoZSBjaGFpbiB3aXRoIHRoZSBu ZXcgU1NBX1ZBUnMgYmVpbmcgdXNlZC4gICovDQorICAgICAgaWYgKGNoYWluZWQtPmNvbnRhaW5z IChkZXN0KSkNCisJew0KKwkgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBnaW1wbGVfbnVtX2Fy Z3MgKHN0bXQpOyB4KyspDQorCSAgICBpZiAoVFJFRV9DT0RFIChnaW1wbGVfYXJnIChzdG10LCB4 KSkgPT0gU1NBX05BTUUpDQorCSAgICAgIGNoYWluZWQtPmFkZCAoZ2ltcGxlX2FyZyAoc3RtdCwg eCkpOw0KKw0KKwkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCisJICAgIGR1bXBfcHJpbnRmX2xv YyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sDQorCQkJICAgICAiZm91bmQgY2hhaW4gJUciLCBz dG10KTsNCisJICB1cGRhdGVfc3RtdCAoc3RtdCk7DQorCSAgbW92ZSA9IGZhbHNlOw0KKwl9DQor DQorICAgICAgaWYgKG1vdmUpDQorCXsNCisJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQorCSAg ICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLA0KKwkJCSAgICAgIm1v dmluZyBzdG10ICVHIiwgc3RtdCk7DQorCSAgZ3NpX21vdmVfYmVmb3JlIChnc3RtdCwgZ2Rlc3Qp Ow0KKwkgIGdzaV9wcmV2IChnZGVzdCk7DQorCSAgdHJlZSB2ZGVmID0gZ2ltcGxlX3ZkZWYgKHN0 bXQpOw0KKw0KKwkgIC8qIElmIHdlJ3ZlIG1vdmVkIGEgVkRFRiwgZXh0cmFjdCB0aGUgZGVmaW5p bmcgTUVNIGFuZCB1cGRhdGUNCisJICAgICB1c2FnZXMgb2YgaXQuICBUT0RPOiBJIHRoaW5rIHRo aXMgbWF5IG5lZWQgc29tZSBjb25zdHJhaW50cz8gKi8NCisJICBpZiAodmRlZikNCisJICAgIHsN CisJICAgICAgKmN1cnJlbnRfdmRlZiA9IHZkZWY7DQorCSAgICAgICpyZWFjaGluZ192dXNlID0g Z2ltcGxlX3Z1c2UgKHN0bXQpOw0KKwkgICAgICBpbW1fdXNlX2l0ZXJhdG9yIGltbV9pdGVyOw0K KwkgICAgICBnaW1wbGUgKnVzZV9zdG10Ow0KKwkgICAgICBGT1JfRUFDSF9JTU1fVVNFX1NUTVQg KHVzZV9zdG10LCBpbW1faXRlciwgdmRlZikNCisJCXsNCisJCSAgIGlmICghaXNfYSA8Z3BoaSAq PiAodXNlX3N0bXQpKQ0KKwkJICAgICBjb250aW51ZTsNCisJCSAgIGdwaGkgKnBoaV9zdG10ID0g YXNfYSA8Z3BoaSAqPiAodXNlX3N0bXQpOw0KKw0KKwkJICAgaWYgKGR1bXBfZW5hYmxlZF9wICgp KQ0KKwkJICAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLA0KKwkJ CQkidXBkYXRpbmcgdnVzZSAlRyIsIHVzZV9zdG10KTsNCisNCisJCSAgIGZvciAodW5zaWduZWQg aSA9IDA7IGkgPCBnaW1wbGVfcGhpX251bV9hcmdzIChwaGlfc3RtdCk7IGkrKykNCisJCSAgICBp ZiAoZ2ltcGxlX3BoaV9hcmdfZGVmIChwaGlfc3RtdCwgaSkgPT0gdmRlZikNCisJCSAgICAgIHsN CisJCQlTRVRfVVNFIChQSElfQVJHX0RFRl9QVFIgKHBoaV9zdG10LCBpKSwgZ2ltcGxlX3Z1c2Ug KHN0bXQpKTsNCisJCQlicmVhazsNCisJCSAgICAgIH0NCisJCX0NCisJICAgIH0NCisJICB1cGRh dGVfc3RtdCAoc3RtdCk7DQorCX0NCisgICAgfQ0KKw0KKyAgZ3NpX3ByZXYgKGdzdG10KTsNCisg IG1vdmVfZWFybHlfZXhpdF9zdG10cyAoY2hhaW5lZCwgZ2Rlc3QsIGdzdG10LCByZWFjaGluZ192 dXNlLCBjdXJyZW50X3ZkZWYpOw0KKw0KKyAgaWYgKGdpbXBsZV92dXNlIChzdG10KQ0KKyAgICAg ICYmIHJlYWNoaW5nX3Z1c2UgJiYgKnJlYWNoaW5nX3Z1c2UNCisgICAgICAmJiBnaW1wbGVfdnVz ZSAoc3RtdCkgPT0gKmN1cnJlbnRfdmRlZikNCisgICAgew0KKyAgICAgIHVubGlua19zdG10X3Zk ZWYgKHN0bXQpOw0KKyAgICAgIGdpbXBsZV9zZXRfdnVzZSAoc3RtdCwgKnJlYWNoaW5nX3Z1c2Up Ow0KKyAgICAgIHVwZGF0ZV9zdG10IChzdG10KTsNCisgICAgfQ0KK30NCisNCiAvKiBGdW5jdGlv biB2ZWN0X3RyYW5zZm9ybV9sb29wLg0KIA0KICAgIFRoZSBhbmFseXNpcyBwaGFzZSBoYXMgZGV0 ZXJtaW5lZCB0aGF0IHRoZSBsb29wIGlzIHZlY3Rvcml6YWJsZS4NCkBAIC0xMDc5Myw3ICsxMTAy NSw3IEBAIHZlY3RfdHJhbnNmb3JtX2xvb3AgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgZ2lt cGxlICpsb29wX3ZlY3Rvcml6ZWRfY2FsbCkNCiAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBleGlzdHMg YSBzaW5nbGUtcHJlZGVjZXNzb3IgZXhpdCBiYi4gIERvIHRoaXMgYmVmb3JlIA0KICAgICAgdmVy c2lvbmluZy4gICAqLw0KICAgZWRnZSBlID0gc2luZ2xlX2V4aXQgKGxvb3ApOw0KLSAgaWYgKCEg c2luZ2xlX3ByZWRfcCAoZS0+ZGVzdCkpDQorICBpZiAoZSAmJiAhIHNpbmdsZV9wcmVkX3AgKGUt PmRlc3QpKQ0KICAgICB7DQogICAgICAgc3BsaXRfbG9vcF9leGl0X2VkZ2UgKGUsIHRydWUpOw0K ICAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCkBAIC0xMDgxOSw3ICsxMTA1MSw3IEBAIHZl Y3RfdHJhbnNmb3JtX2xvb3AgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgZ2ltcGxlICpsb29w X3ZlY3Rvcml6ZWRfY2FsbCkNCiAgIGlmIChMT09QX1ZJTkZPX1NDQUxBUl9MT09QIChsb29wX3Zp bmZvKSkNCiAgICAgew0KICAgICAgIGUgPSBzaW5nbGVfZXhpdCAoTE9PUF9WSU5GT19TQ0FMQVJf TE9PUCAobG9vcF92aW5mbykpOw0KLSAgICAgIGlmICghIHNpbmdsZV9wcmVkX3AgKGUtPmRlc3Qp KQ0KKyAgICAgIGlmIChlICYmICEgc2luZ2xlX3ByZWRfcCAoZS0+ZGVzdCkpDQogCXsNCiAJICBz cGxpdF9sb29wX2V4aXRfZWRnZSAoZSwgdHJ1ZSk7DQogCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgp KQ0KQEAgLTEwODg1LDYgKzExMTE3LDI2IEBAIHZlY3RfdHJhbnNmb3JtX2xvb3AgKGxvb3BfdmVj X2luZm8gbG9vcF92aW5mbywgZ2ltcGxlICpsb29wX3ZlY3Rvcml6ZWRfY2FsbCkNCiAgICAgICB2 ZWN0X3NjaGVkdWxlX3NscCAobG9vcF92aW5mbywgTE9PUF9WSU5GT19TTFBfSU5TVEFOQ0VTIChs b29wX3ZpbmZvKSk7DQogICAgIH0NCiANCisgIC8qIEhhbmRsZSBhbnkgY29kZSBtb3Rpb24gdGhh dCB3ZSBuZWVkIHRvIGZvciBlYXJseS1icmVhayB2ZWN0b3JpemF0aW9uIGFmdGVyDQorICAgICB3 ZSd2ZSBkb25lIHBlZWxpbmcgYnV0IGp1c3QgYmVmb3JlIHdlIHN0YXJ0IHZlY3Rvcml6aW5nLiAg Ki8NCisgIGlmIChMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpDQorICAgIHsN CisgICAgICBoYXNoX3NldDx0cmVlPiBjaGFpbmVkOw0KKyAgICAgIGZvciAoZ2NvbmQgKmNvbmQg OiBMT09QX1ZJTkZPX0xPT1BfQ09ORFMgKGxvb3BfdmluZm8pKQ0KKwl7DQorCSAgYmFzaWNfYmxv Y2sgY29uZF9iYiA9IGdpbXBsZV9iYiAoY29uZCk7DQorCSAgYmFzaWNfYmxvY2sgZGVzdF9iYiA9 IEZBTExUSFJVX0VER0UgKGNvbmRfYmIpLT5kZXN0Ow0KKwkgIGdpbXBsZV9zdG10X2l0ZXJhdG9y IGRlc3RfZ3NpID0gZ3NpX3N0YXJ0X2JiIChkZXN0X2JiKTsNCisNCisJICBnaW1wbGVfc3RtdF9p dGVyYXRvciBnc2kyID0gZ3NpX2Zvcl9zdG10IChjb25kKTsNCisJICBmb3IgKHVuc2lnbmVkIGkg PSAwOyBpIDwgZ2ltcGxlX251bV9vcHMgKGNvbmQpOyBpKyspDQorCSAgICBjaGFpbmVkLmFkZCAo Z2ltcGxlX29wIChjb25kLCBpKSk7DQorCSAgdHJlZSB2ZGVmOw0KKwkgIHRyZWUgdnVzZSA9IGdp bXBsZV92dXNlIChjb25kKTsNCisJICBtb3ZlX2Vhcmx5X2V4aXRfc3RtdHMgKCZjaGFpbmVkLCAm ZGVzdF9nc2ksICZnc2kyLCAmdnVzZSwgJnZkZWYpOw0KKwl9DQorICAgIH0NCisNCiAgIC8qIEZP Uk5PVzogdGhlIHZlY3Rvcml6ZXIgc3VwcG9ydHMgb25seSBsb29wcyB3aGljaCBib2R5IGNvbnNp c3QNCiAgICAgIG9mIG9uZSBiYXNpYyBibG9jayAoaGVhZGVyICsgZW1wdHkgbGF0Y2gpLiBXaGVu IHRoZSB2ZWN0b3JpemVyIHdpbGwNCiAgICAgIHN1cHBvcnQgbW9yZSBpbnZvbHZlZCBsb29wIGZv cm1zLCB0aGUgb3JkZXIgYnkgd2hpY2ggdGhlIEJCcyBhcmUNCkBAIC0xMTE1Miw3ICsxMTQwNCw4 IEBAIHZlY3RfdHJhbnNmb3JtX2xvb3AgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgZ2ltcGxl ICpsb29wX3ZlY3Rvcml6ZWRfY2FsbCkNCiANCiAgIC8qIExvb3BzIHZlY3Rvcml6ZWQgd2l0aCBh IHZhcmlhYmxlIGZhY3RvciB3b24ndCBiZW5lZml0IGZyb20NCiAgICAgIHVucm9sbGluZy9wZWVs aW5nLiAgKi8NCi0gIGlmICghdmYuaXNfY29uc3RhbnQgKCkpDQorICBpZiAoIXZmLmlzX2NvbnN0 YW50ICgpDQorICAgICAgJiYgIUxPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkN CiAgICAgew0KICAgICAgIGxvb3AtPnVucm9sbCA9IDE7DQogICAgICAgaWYgKGR1bXBfZW5hYmxl ZF9wICgpKQ0KZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MgYi9nY2MvdHJlZS12 ZWN0LXN0bXRzLmNjDQppbmRleCA1NDg1ZGE1OGIzOGEwZGIyZWExYTM1N2VlODY0N2FlNDdiNTYz YThmLi42YTNhNjA2NWNlMmVlN2RkNTNlYmY4M2M4Nzk2ZDU3ZmM5ODA1NzUwIDEwMDY0NA0KLS0t IGEvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYw0KKysrIGIvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYw0K QEAgLTM0Miw5ICszNDIsMjggQEAgdmVjdF9zdG10X3JlbGV2YW50X3AgKHN0bXRfdmVjX2luZm8g c3RtdF9pbmZvLCBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQogICAqbGl2ZV9wID0gZmFsc2U7 DQogDQogICAvKiBjb25kIHN0bXQgb3RoZXIgdGhhbiBsb29wIGV4aXQgY29uZC4gICovDQotICBp ZiAoaXNfY3RybF9zdG10IChzdG10X2luZm8tPnN0bXQpDQotICAgICAgJiYgU1RNVF9WSU5GT19U WVBFIChzdG10X2luZm8pICE9IGxvb3BfZXhpdF9jdHJsX3ZlY19pbmZvX3R5cGUpDQotICAgICpy ZWxldmFudCA9IHZlY3RfdXNlZF9pbl9zY29wZTsNCisgIGlmIChpc19jdHJsX3N0bXQgKHN0bXRf aW5mby0+c3RtdCkpDQorICAgIHsNCisgICAgICAvKiBJZGVhbGx5IEVER0VfTE9PUF9FWElUIHdv dWxkIGhhdmUgYmVlbiBzZXQgb24gdGhlIGV4aXQgZWRnZSwgYnV0DQorCSBpdCBsb29rcyBsaWtl IGxvb3BfbWFuaXAgZG9lc24ndCBkbyB0aGF0Li4gIFNvIHdlIGhhdmUgdG8gZG8gaXQNCisJIHRo ZSBoYXJkIHdheS4gICovDQorICAgICAgYmFzaWNfYmxvY2sgYmIgPSBnaW1wbGVfYmIgKHN0bXRf aW5mby0+c3RtdCk7DQorICAgICAgYmFzaWNfYmxvY2sgKmJicyA9IExPT1BfVklORk9fQkJTIChs b29wX3ZpbmZvKTsNCisgICAgICBlZGdlIGV4aXQgPSBCUkFOQ0hfRURHRSAoYmIpOw0KKyAgICAg IHVuc2lnbmVkIG5iYnMgPSBsb29wLT5udW1fbm9kZXM7DQorICAgICAgYm9vbCBleGl0X2JiID0g dHJ1ZTsNCisgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmJiczsgaSsrKQ0KKwl7DQor CSAgaWYgKGV4aXQtPmRlc3QgPT0gYmJzW2ldKQ0KKwkgICAgew0KKwkgICAgICBleGl0X2JiID0g ZmFsc2U7DQorCSAgICAgIGJyZWFrOw0KKwkgICAgfQ0KKwl9DQorDQorICAgICAgaWYgKGV4aXRf YmIpDQorCSpyZWxldmFudCA9IHZlY3RfdXNlZF9pbl9zY29wZTsNCisgICAgfQ0KIA0KICAgLyog Y2hhbmdpbmcgbWVtb3J5LiAgKi8NCiAgIGlmIChnaW1wbGVfY29kZSAoc3RtdF9pbmZvLT5zdG10 KSAhPSBHSU1QTEVfUEhJKQ0KQEAgLTM1Nyw2ICszNzYsMTEgQEAgdmVjdF9zdG10X3JlbGV2YW50 X3AgKHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLCBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQog CSpyZWxldmFudCA9IHZlY3RfdXNlZF9pbl9zY29wZTsNCiAgICAgICB9DQogDQorICBhdXRvX3Zl YzxlZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGxvb3ApOw0KKyAgYXV0b19iaXRt YXAgZXhpdF9iYnM7DQorICBmb3IgKGVkZ2UgZXhpdCA6IGV4aXRzKQ0KKyAgICBiaXRtYXBfc2V0 X2JpdCAoZXhpdF9iYnMsIGV4aXQtPmRlc3QtPmluZGV4KTsNCisNCiAgIC8qIHVzZXMgb3V0c2lk ZSB0aGUgbG9vcC4gICovDQogICBGT1JfRUFDSF9QSElfT1JfU1RNVF9ERUYgKGRlZl9wLCBzdG10 X2luZm8tPnN0bXQsIG9wX2l0ZXIsIFNTQV9PUF9ERUYpDQogICAgIHsNCkBAIC0zNzUsNyArMzk5 LDcgQEAgdmVjdF9zdG10X3JlbGV2YW50X3AgKHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLCBsb29w X3ZlY19pbmZvIGxvb3BfdmluZm8sDQogCSAgICAgIC8qIFdlIGV4cGVjdCBhbGwgc3VjaCB1c2Vz IHRvIGJlIGluIHRoZSBsb29wIGV4aXQgcGhpcw0KIAkJIChiZWNhdXNlIG9mIGxvb3AgY2xvc2Vk IGZvcm0pICAgKi8NCiAJICAgICAgZ2NjX2Fzc2VydCAoZ2ltcGxlX2NvZGUgKFVTRV9TVE1UICh1 c2VfcCkpID09IEdJTVBMRV9QSEkpOw0KLQkgICAgICBnY2NfYXNzZXJ0IChiYiA9PSBzaW5nbGVf ZXhpdCAobG9vcCktPmRlc3QpOw0KKwkgICAgICBnY2NfYXNzZXJ0IChiaXRtYXBfYml0X3AgKGV4 aXRfYmJzLCBiYi0+aW5kZXgpKTsNCiANCiAgICAgICAgICAgICAgICpsaXZlX3AgPSB0cnVlOw0K IAkgICAgfQ0KQEAgLTEwNzkwLDYgKzEwODE0LDIyMyBAQCB2ZWN0b3JpemFibGVfY29uZGl0aW9u ICh2ZWNfaW5mbyAqdmluZm8sDQogICByZXR1cm4gdHJ1ZTsNCiB9DQogDQorLyogQ2hlY2sgdG8g c2VlIGlmIHRoZSBjdXJyZW50IGVhcmx5IGJyZWFrIGdpdmVuIGluIFNUTVRfSU5GTyBpcyB2YWxp ZCBmb3INCisgICB2ZWN0b3JpemF0aW9uLiAgKi8NCisNCitzdGF0aWMgYm9vbA0KK3ZlY3Rvcml6 YWJsZV9lYXJseV9leGl0ICh2ZWNfaW5mbyAqdmluZm8sDQorCQkJc3RtdF92ZWNfaW5mbyBzdG10 X2luZm8sIHNscF90cmVlIC8qIHNscF9ub2RlICovLA0KKwkJCXNscF9pbnN0YW5jZSAvKiBzbHBf bm9kZV9pbnN0YW5jZSAqLywNCisJCQlzdG10X3ZlY3Rvcl9mb3JfY29zdCAqIC8qIGNvc3RfdmVj ICovKQ0KK3sNCisgIGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbyA9IGR5bl9jYXN0IDxsb29wX3Zl Y19pbmZvPiAodmluZm8pOw0KKw0KKyAgaWYgKCFsb29wX3ZpbmZvDQorICAgICAgfHwgIWlzX2Eg PGdjb25kICo+IChTVE1UX1ZJTkZPX1NUTVQgKHN0bXRfaW5mbykpKQ0KKyAgICByZXR1cm4gZmFs c2U7DQorDQorICBpZiAoU1RNVF9WSU5GT19ERUZfVFlQRSAoc3RtdF9pbmZvKSAhPSB2ZWN0X2Vh cmx5X2V4aXRfZGVmKQ0KKyAgICByZXR1cm4gZmFsc2U7DQorDQorICAvKiByZWZhY3RvciBhbmQg bWVyZ2Ugd2l0aCB2ZWN0X3RyYW5zZm9ybV9lYXJseV9icmVhay4gICovDQorICBnaW1wbGVfbWF0 Y2hfb3Agb3A7DQorICBpZiAoIWdpbXBsZV9leHRyYWN0X29wIChzdG10X2luZm8tPnN0bXQsICZv cCkpDQorICAgIGdjY191bnJlYWNoYWJsZSAoKTsNCisgIGdjY19hc3NlcnQgKG9wLmNvZGUuaXNf dHJlZV9jb2RlICgpKTsNCisNCisgIHRyZWUgdmVjdHlwZV9pbiA9IFNUTVRfVklORk9fVkVDVFlQ RSAoc3RtdF9pbmZvKTsNCisgIGdjY19hc3NlcnQgKHZlY3R5cGVfaW4pOw0KKw0KKyAgc3RtdF92 ZWNfaW5mbyBvcGVyYW5kMF9pbmZvDQorICAgID0gbG9vcF92aW5mby0+bG9va3VwX3N0bXQgKFNT QV9OQU1FX0RFRl9TVE1UIChvcC5vcHNbMF0pKTsNCisgIGlmICghb3BlcmFuZDBfaW5mbykNCisg ICAgcmV0dXJuIGZhbHNlOw0KKyAgdHJlZSB2ZWN0eXBlX29wID0gU1RNVF9WSU5GT19WRUNUWVBF IChvcGVyYW5kMF9pbmZvKTsNCisNCisgIC8vdHJlZSB2ZWN0eXBlID0gU1RNVF9WSU5GT19WRUNU WVBFIChzdG10X2luZm8pOw0KKyAgdHJlZSB0cnV0aF90eXBlID0gdHJ1dGhfdHlwZV9mb3IgKHZl Y3R5cGVfb3ApOw0KKyAgbWFjaGluZV9tb2RlIG1vZGUgPSBUWVBFX01PREUgKHRydXRoX3R5cGUp Ow0KKyAgaWYgKGRpcmVjdF9vcHRhYl9oYW5kbGVyIChjYnJhbmNoX29wdGFiLCBtb2RlKSA9PSBD T0RFX0ZPUl9ub3RoaW5nKQ0KKyAgICB7DQorICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0K KwkgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRp b24sDQorCQkJCSAiY2FuJ3QgdmVjdG9yaXplIGVhcmx5IGV4aXQgYmVjYXVzZSB0aGUgIg0KKwkJ CQkgInRhcmdldCBkb2Vzbid0IHN1cHBvcnQgZmxhZyBzZXR0aW5nIHZlY3RvciAiDQorCQkJCSAi Y29tcGFyaXNvbnMuXG4iKTsNCisgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgIGlm ICghZXhwYW5kX3ZlY19jbXBfZXhwcl9wICh2ZWN0eXBlX29wLCB0cnV0aF90eXBlLCBORV9FWFBS KSkNCisgICAgew0KKyAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCisJICBkdW1wX3ByaW50 Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xvY2F0aW9uLA0KKwkJCQkgImNh bid0IHZlY3Rvcml6ZSBlYXJseSBleGl0IGJlY2F1c2UgdGhlICINCisJCQkJICJ0YXJnZXQgZG9l cyBub3Qgc3VwcG9ydCBib29sZWFuIHZlY3RvciAiDQorCQkJCSAiY29tcGFyaXNvbnMgZm9yIHR5 cGUgJVQuXG4iLCB0cnV0aF90eXBlKTsNCisgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisN CisgIGlmIChkaXJlY3Rfb3B0YWJfaGFuZGxlciAoaW9yX29wdGFiLCBtb2RlKSA9PSBDT0RFX0ZP Ul9ub3RoaW5nKQ0KKyAgICB7DQorICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KKwkgIGR1 bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRpb24sDQor CQkJCSAiY2FuJ3QgdmVjdG9yaXplIGVhcmx5IGV4aXQgYmVjYXVzZSB0aGUgIg0KKwkJCQkgInRh cmdldCBkb2VzIG5vdCBzdXBwb3J0IGJvb2xlYW4gdmVjdG9yIE9SIGZvciAiDQorCQkJCSAidHlw ZSAlVC5cbiIsIHRydXRoX3R5cGUpOw0KKyAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0K KyAgcmV0dXJuIHRydWU7DQorfQ0KKw0KKw0KKy8qIFRyYW5zZm9ybSB0aGUgZGVmaW5pdGlvbiBz dG10IFNUTVRfSU5GTyBvZiBhbiBlYXJseSBleGl0DQorICAgdmFsdWUuICAqLw0KKw0KK3N0YXRp YyBib29sDQordmVjdF90cmFuc2Zvcm1fZWFybHlfYnJlYWsgKGxvb3BfdmVjX2luZm8gbG9vcF92 aW5mbywNCisJCQkgICAgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sIGdpbXBsZV9zdG10X2l0ZXJh dG9yICpnc2ksDQorCQkJICAgIGdpbXBsZSAqKnZlY19zdG10LCBzbHBfdHJlZSBzbHBfbm9kZSkN Cit7DQorICB0cmVlIHZlY3R5cGVfb3V0ID0gU1RNVF9WSU5GT19WRUNUWVBFIChzdG10X2luZm8p Ow0KKyAgaW50IGk7DQorICBpbnQgbmNvcGllcywgbm9wY29waWVzOw0KKyAgaW50IHZlY19udW07 DQorICBzdG10X3ZlY19pbmZvIG9wZXJhbmQwX2luZm87DQorDQorICBpZiAoIVNUTVRfVklORk9f UkVMRVZBTlRfUCAoc3RtdF9pbmZvKSkNCisgICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgZ2ltcGxl X21hdGNoX29wIG9wOw0KKyAgaWYgKCFnaW1wbGVfZXh0cmFjdF9vcCAoc3RtdF9pbmZvLT5zdG10 LCAmb3ApKQ0KKyAgICBnY2NfdW5yZWFjaGFibGUgKCk7DQorICBnY2NfYXNzZXJ0IChvcC5jb2Rl LmlzX3RyZWVfY29kZSAoKSk7DQorICBhdXRvIGNvZGUgPSB0cmVlX2NvZGUgKG9wLmNvZGUpOw0K Kw0KKyAgdHJlZSB2ZWN0eXBlX2luID0gU1RNVF9WSU5GT19WRUNUWVBFIChzdG10X2luZm8pOw0K KyAgZ2NjX2Fzc2VydCAodmVjdHlwZV9pbik7DQorDQorICBvcGVyYW5kMF9pbmZvID0gbG9vcF92 aW5mby0+bG9va3VwX3N0bXQgKFNTQV9OQU1FX0RFRl9TVE1UIChvcC5vcHNbMF0pKTsNCisgIHRy ZWUgdmVjdHlwZV9vcCA9IFNUTVRfVklORk9fVkVDVFlQRSAob3BlcmFuZDBfaW5mbyk7DQorDQor ICBpZiAoc2xwX25vZGUpDQorICAgIHsNCisgICAgICBuY29waWVzID0gMTsNCisgICAgICBub3Bj b3BpZXMgPSAxOw0KKyAgICAgIHZlY19udW0gPSBTTFBfVFJFRV9OVU1CRVJfT0ZfVkVDX1NUTVRT IChzbHBfbm9kZSk7DQorICAgIH0NCisgIGVsc2UNCisgICAgew0KKyAgICAgIC8qIEJlY2F1c2Ug b2YgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0eXBlcyB3aGVuIGRvaW5nIGEgYm9vbGVhbiByZWR1 Y3Rpb24NCisJIHdlIG11c3QgZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgY29waWVzIGJhc2VkIG9u IHRoZSB0eXBlIG9wZXJhbmRzIG9mDQorCSBvcGVyYW5kcyBvZiB0aGUgY29tcGFyaXNvbiBhbmQg bm90IHRoZSBjb21wYXJpc29uIGl0c2VsZi4gICovDQorICAgICAgbmNvcGllcyA9IHZlY3RfZ2V0 X251bV9jb3BpZXMgKGxvb3BfdmluZm8sIHZlY3R5cGVfaW4pOw0KKyAgICAgIG5vcGNvcGllcyA9 IHZlY3RfZ2V0X251bV9jb3BpZXMgKGxvb3BfdmluZm8sIHZlY3R5cGVfb3ApOw0KKyAgICAgIHZl Y19udW0gPSAxOw0KKyAgICB9DQorDQorICB2ZWNfbG9vcF9tYXNrcyAqbWFza3MgPSAmTE9PUF9W SU5GT19NQVNLUyAobG9vcF92aW5mbyk7DQorICBib29sIG1hc2tlZF9sb29wX3AgPSBMT09QX1ZJ TkZPX0ZVTExZX01BU0tFRF9QIChsb29wX3ZpbmZvKTsNCisNCisgIGlmIChuY29waWVzICE9IG5v cGNvcGllcykNCisgICAgdmVjdHlwZV9vdXQgPSB2ZWN0eXBlX29wOw0KKw0KKyAgLyogVHJhbnNm b3JtLiAgKi8NCisgIHRyZWUgbmV3X3RlbXAgPSBOVUxMX1RSRUU7DQorICBhdXRvX3ZlYzx0cmVl PiB2ZWNfb3BybmRzMDsNCisgIGF1dG9fdmVjPHRyZWU+IHZlY19vcHJuZHMxOw0KKyAgdHJlZSBk ZWYwOw0KKw0KKyAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KKyAgICBkdW1wX3ByaW50Zl9sb2Mg KE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLCAidHJhbnNmb3JtIGVhcmx5LWV4aXQuXG4iKTsNCisN CisgIGdpbXBsZSAqc3RtdCA9IFNUTVRfVklORk9fU1RNVCAoc3RtdF9pbmZvKTsNCisgIGJhc2lj X2Jsb2NrIGNvbmRfYmIgPSBnaW1wbGVfYmIgKHN0bXQpOw0KKyAgZ2ltcGxlX3N0bXRfaXRlcmF0 b3IgIGNvbmRfZ3NpID0gZ3NpX2xhc3RfYmIgKGNvbmRfYmIpOw0KKw0KKyAgdmVjdF9nZXRfdmVj X2RlZnMgKGxvb3BfdmluZm8sIHN0bXRfaW5mbywgc2xwX25vZGUsIG5vcGNvcGllcywNCisJCSAg ICAgb3Aub3BzWzBdLCAmdmVjX29wcm5kczAsIHZlY3R5cGVfb3V0LA0KKwkJICAgICBvcC5vcHNb MV0sICZ2ZWNfb3BybmRzMSwgdmVjdHlwZV9vdXQsDQorCQkgICAgIE5VTEwsIE5VTEwsIE5VTEwp Ow0KKw0KKyAgZ2ltcGxlICpuZXdfc3RtdCA9IE5VTEw7DQorICB0cmVlIGNzdF8wID0gYnVpbGRf emVyb19jc3QgKHRydXRoX3R5cGVfZm9yICh2ZWN0eXBlX291dCkpOw0KKyAgdHJlZSBjc3RfbTEg PSBidWlsZF9taW51c19vbmVfY3N0ICh0cnV0aF90eXBlX2ZvciAodmVjdHlwZV9vdXQpKTsNCisN CisgIEZPUl9FQUNIX1ZFQ19FTFQgKHZlY19vcHJuZHMwLCBpLCBkZWYwKQ0KKyAgICB7DQorICAg ICAgdHJlZSB2b3BbM10gPSB7IGRlZjAsIHZlY19vcHJuZHMxW2ldLCBOVUxMX1RSRUUgfTsNCisJ ew0KKwkgIHRyZWUgY29uZA0KKwkgICAgPSBtYWtlX3RlbXBfc3NhX25hbWUgKHRydXRoX3R5cGVf Zm9yICh2ZWN0eXBlX291dCksIE5VTEwsICJtYXNrIik7DQorCSAgZ2ltcGxlICp2ZWNfY21wID0g Z2ltcGxlX2J1aWxkX2Fzc2lnbiAoY29uZCwgY29kZSwgdm9wWzBdLCB2b3BbMV0pOw0KKwkgIHZl Y3RfZmluaXNoX3N0bXRfZ2VuZXJhdGlvbiAobG9vcF92aW5mbywgc3RtdF9pbmZvLCB2ZWNfY21w LA0KKwkJCQkgICAgICAgJmNvbmRfZ3NpKTsNCisgICAgICAgICAgaWYgKG1hc2tlZF9sb29wX3Ap DQorCSAgICB7DQorCSAgICAgIHRyZWUgbWFzayA9IHZlY3RfZ2V0X2xvb3BfbWFzayAoZ3NpLCBt YXNrcywgdmVjX251bSAqIG5jb3BpZXMsDQorCQkJCQkgICAgICB2ZWN0eXBlX29wLCBpKTsNCisJ ICAgICAgY29uZCA9IHByZXBhcmVfdmVjX21hc2sgKGxvb3BfdmluZm8sIFRSRUVfVFlQRSAobWFz ayksIG1hc2ssDQorCQkJCSAgICAgICBjb25kLCAmY29uZF9nc2kpOw0KKwkgICAgfQ0KKw0KKwkg IG5ld190ZW1wDQorCSAgICA9IG1ha2VfdGVtcF9zc2FfbmFtZSAodHJ1dGhfdHlwZV9mb3IgKHZl Y3R5cGVfb3V0KSwgTlVMTCwgInZleGl0Iik7DQorCSAgbmV3X3N0bXQgPSBnaW1wbGVfYnVpbGRf YXNzaWduIChuZXdfdGVtcCwgVkVDX0NPTkRfRVhQUiwNCisJCQkJCSAgY29uZCwgY3N0X20xLCBj c3RfMCk7DQorCSAgdmVjdF9maW5pc2hfc3RtdF9nZW5lcmF0aW9uIChsb29wX3ZpbmZvLCBzdG10 X2luZm8sIG5ld19zdG10LA0KKwkJCQkgICAgICAgJmNvbmRfZ3NpKTsNCisJfQ0KKw0KKyAgICAg IGlmIChzbHBfbm9kZSkNCisJU0xQX1RSRUVfVkVDX1NUTVRTIChzbHBfbm9kZSkucXVpY2tfcHVz aCAobmV3X3N0bXQpOw0KKyAgICAgIGVsc2UNCisJU1RNVF9WSU5GT19WRUNfU1RNVFMgKHN0bXRf aW5mbykuc2FmZV9wdXNoIChuZXdfc3RtdCk7DQorICAgIH0NCisNCisgIC8qIERldGVybWluZSBp ZiB3ZSBuZWVkIHRvIHJlZHVjZSB0aGUgZmluYWwgdmFsdWUuICAqLw0KKyAgaWYgKG5jb3BpZXMg IT0gbm9wY29waWVzKQ0KKyAgICB7DQorICAgICAgdmVjPGdpbXBsZSAqPiBzdG10czsNCisgICAg ICBpZiAoc2xwX25vZGUpDQorCXN0bXRzID0gU0xQX1RSRUVfVkVDX1NUTVRTIChzbHBfbm9kZSk7 DQorICAgICAgZWxzZQ0KKwlzdG10cyA9IFNUTVRfVklORk9fVkVDX1NUTVRTIChzdG10X2luZm8p Ow0KKw0KKyAgICAgIC8qIFdlIGJ1aWxkIHRoZSByZWR1Y3Rpb25zIGluIGEgd2F5IHRvIG1haW50 YWluIGFzIG11Y2ggcGFyYWxsZWxpc20gYXMNCisJIHBvc3NpYmxlLiAgKi8NCisgICAgICBhdXRv X3ZlYzxnaW1wbGUgKj4gd29ya3NldCAoc3RtdHMubGVuZ3RoICgpKTsNCisgICAgICB3b3Jrc2V0 LnNwbGljZSAoc3RtdHMpOw0KKyAgICAgIHdoaWxlICh3b3Jrc2V0Lmxlbmd0aCAoKSA+IDEpDQor CXsNCisJICBuZXdfdGVtcCA9IG1ha2VfdGVtcF9zc2FfbmFtZSAodHJ1dGhfdHlwZV9mb3IgKHZl Y3R5cGVfb3V0KSwgTlVMTCwNCisJCQkJCSAidmV4aXRfcmVkdWMiKTsNCisJICBnaW1wbGUgKmFy ZzAgPSB3b3Jrc2V0LnBvcCAoKTsNCisJICBnaW1wbGUgKmFyZzEgPSB3b3Jrc2V0LnBvcCAoKTsN CisJICBuZXdfc3RtdCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKG5ld190ZW1wLCBCSVRfSU9SX0VY UFIsDQorCQkJCQkgIGdpbXBsZV9hc3NpZ25fbGhzIChhcmcwKSwNCisJCQkJCSAgZ2ltcGxlX2Fz c2lnbl9saHMgKGFyZzEpKTsNCisJICB2ZWN0X2ZpbmlzaF9zdG10X2dlbmVyYXRpb24gKGxvb3Bf dmluZm8sIHN0bXRfaW5mbywgbmV3X3N0bXQsDQorCQkJCSAgICAgICAmY29uZF9nc2kpOw0KKwkg IHdvcmtzZXQucXVpY2tfaW5zZXJ0ICgwLCBuZXdfc3RtdCk7DQorCX0NCisgICAgfQ0KKw0KKyAg Z2NjX2Fzc2VydCAobmV3X3N0bXQpOw0KKyAgdHJlZSBsaHMgPSBnaW1wbGVfYXNzaWduX2xocyAo bmV3X3N0bXQpOw0KKw0KKyAgdHJlZSB0ID0gZm9sZF9idWlsZDIgKE5FX0VYUFIsIGJvb2xlYW5f dHlwZV9ub2RlLCBsaHMsDQorCQkJYnVpbGRfemVyb19jc3QgKHRydXRoX3R5cGVfZm9yICh2ZWN0 eXBlX291dCkpKTsNCisgIHQgPSBjYW5vbmljYWxpemVfY29uZF9leHByX2NvbmQgKHQpOw0KKyAg Z2ltcGxlX2NvbmRfc2V0X2NvbmRpdGlvbl9mcm9tX3RyZWUgKChnY29uZCopc3RtdCwgdCk7DQor ICB1cGRhdGVfc3RtdCAoc3RtdCk7DQorDQorICBpZiAoIXNscF9ub2RlKQ0KKyAgICAqdmVjX3N0 bXQgPSBTVE1UX1ZJTkZPX1ZFQ19TVE1UUyAoc3RtdF9pbmZvKVswXTsNCisNCisgIHJldHVybiB0 cnVlOw0KK30NCisNCiAvKiB2ZWN0b3JpemFibGVfY29tcGFyaXNvbi4NCiANCiAgICBDaGVjayBp ZiBTVE1UX0lORk8gaXMgY29tcGFyaXNvbiBleHByZXNzaW9uIHRoYXQgY2FuIGJlIHZlY3Rvcml6 ZWQuDQpAQCAtMTExNjcsMTEgKzExNDA4LDE0IEBAIHZlY3RfYW5hbHl6ZV9zdG10ICh2ZWNfaW5m byAqdmluZm8sDQogCQkJICAgICBub2RlX2luc3RhbmNlLCBjb3N0X3ZlYyk7DQogICAgICAgaWYg KCFyZXMpDQogCXJldHVybiByZXM7DQotICAgfQ0KKyAgICB9DQorICBlbHNlIGlmIChpc19jdHJs X3N0bXQgKHN0bXRfaW5mby0+c3RtdCkpDQorICAgIFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRf aW5mbykgPSB2ZWN0X2Vhcmx5X2V4aXRfZGVmOw0KIA0KICAgc3dpdGNoIChTVE1UX1ZJTkZPX0RF Rl9UWVBFIChzdG10X2luZm8pKQ0KICAgICB7DQogICAgICAgY2FzZSB2ZWN0X2ludGVybmFsX2Rl ZjoNCisgICAgICBjYXNlIHZlY3RfZWFybHlfZXhpdF9kZWY6DQogICAgICAgICBicmVhazsNCiAN CiAgICAgICBjYXNlIHZlY3RfcmVkdWN0aW9uX2RlZjoNCkBAIC0xMTIwNCw2ICsxMTQ0OCw3IEBA IHZlY3RfYW5hbHl6ZV9zdG10ICh2ZWNfaW5mbyAqdmluZm8sDQogICAgIHsNCiAgICAgICBnY2Fs bCAqY2FsbCA9IGR5bl9jYXN0IDxnY2FsbCAqPiAoc3RtdF9pbmZvLT5zdG10KTsNCiAgICAgICBn Y2NfYXNzZXJ0IChTVE1UX1ZJTkZPX1ZFQ1RZUEUgKHN0bXRfaW5mbykNCisJCSAgfHwgZ2ltcGxl X2NvZGUgKHN0bXRfaW5mby0+c3RtdCkgPT0gR0lNUExFX0NPTkQNCiAJCSAgfHwgKGNhbGwgJiYg Z2ltcGxlX2NhbGxfbGhzIChjYWxsKSA9PSBOVUxMX1RSRUUpKTsNCiAgICAgICAqbmVlZF90b192 ZWN0b3JpemUgPSB0cnVlOw0KICAgICB9DQpAQCAtMTEyNDYsNyArMTE0OTEsOSBAQCB2ZWN0X2Fu YWx5emVfc3RtdCAodmVjX2luZm8gKnZpbmZvLA0KIAkgIHx8IHZlY3Rvcml6YWJsZV9sY19waGkg KGFzX2EgPGxvb3BfdmVjX2luZm8+ICh2aW5mbyksDQogCQkJCSAgc3RtdF9pbmZvLCBOVUxMLCBu b2RlKQ0KIAkgIHx8IHZlY3Rvcml6YWJsZV9yZWN1cnIgKGFzX2EgPGxvb3BfdmVjX2luZm8+ICh2 aW5mbyksDQotCQkJCSAgIHN0bXRfaW5mbywgTlVMTCwgbm9kZSwgY29zdF92ZWMpKTsNCisJCQkJ ICAgc3RtdF9pbmZvLCBOVUxMLCBub2RlLCBjb3N0X3ZlYykNCisJICB8fCB2ZWN0b3JpemFibGVf ZWFybHlfZXhpdCAodmluZm8sIHN0bXRfaW5mbywNCisJCQkJICAgICAgbm9kZSwgbm9kZV9pbnN0 YW5jZSwgY29zdF92ZWMpKTsNCiAgIGVsc2UNCiAgICAgew0KICAgICAgIGlmIChiYl92aW5mbykN CkBAIC0xMTI2OSw3ICsxMTUxNiwxMCBAQCB2ZWN0X2FuYWx5emVfc3RtdCAodmVjX2luZm8gKnZp bmZvLA0KIAkJCQkJIE5VTEwsIE5VTEwsIG5vZGUsIGNvc3RfdmVjKQ0KIAkgICAgICB8fCB2ZWN0 b3JpemFibGVfY29tcGFyaXNvbiAodmluZm8sIHN0bXRfaW5mbywgTlVMTCwgTlVMTCwgbm9kZSwN CiAJCQkJCSAgY29zdF92ZWMpDQotCSAgICAgIHx8IHZlY3Rvcml6YWJsZV9waGkgKHZpbmZvLCBz dG10X2luZm8sIE5VTEwsIG5vZGUsIGNvc3RfdmVjKSk7DQorCSAgICAgIHx8IHZlY3Rvcml6YWJs ZV9waGkgKHZpbmZvLCBzdG10X2luZm8sIE5VTEwsIG5vZGUsIGNvc3RfdmVjKQ0KKwkgICAgICB8 fCB2ZWN0b3JpemFibGVfZWFybHlfZXhpdCAodmluZm8sIHN0bXRfaW5mbywgbm9kZSwNCisJCQkJ CSAgbm9kZV9pbnN0YW5jZSwgY29zdF92ZWMpKTsNCisNCiAgICAgfQ0KIA0KICAgaWYgKG5vZGUp DQpAQCAtMTE0MjcsNiArMTE2NzcsMTIgQEAgdmVjdF90cmFuc2Zvcm1fc3RtdCAodmVjX2luZm8g KnZpbmZvLA0KICAgICAgIGdjY19hc3NlcnQgKGRvbmUpOw0KICAgICAgIGJyZWFrOw0KIA0KKyAg ICBjYXNlIGxvb3BfZXhpdF9jdHJsX3ZlY19pbmZvX3R5cGU6DQorICAgICAgZG9uZSA9IHZlY3Rf dHJhbnNmb3JtX2Vhcmx5X2JyZWFrIChhc19hIDxsb29wX3ZlY19pbmZvPiAodmluZm8pLCBzdG10 X2luZm8sDQorCQkJCSAgICAgICAgIGdzaSwgJnZlY19zdG10LCBzbHBfbm9kZSk7DQorICAgICAg Z2NjX2Fzc2VydCAoZG9uZSk7DQorICAgICAgYnJlYWs7DQorDQogICAgIGRlZmF1bHQ6DQogICAg ICAgaWYgKCFTVE1UX1ZJTkZPX0xJVkVfUCAoc3RtdF9pbmZvKSkNCiAJew0KQEAgLTExODI1LDYg KzEyMDgxLDkgQEAgdmVjdF9pc19zaW1wbGVfdXNlICh0cmVlIG9wZXJhbmQsIHZlY19pbmZvICp2 aW5mbywgZW51bSB2ZWN0X2RlZl90eXBlICpkdCwNCiAJY2FzZSB2ZWN0X2ZpcnN0X29yZGVyX3Jl Y3VycmVuY2U6DQogCSAgZHVtcF9wcmludGYgKE1TR19OT1RFLCAiZmlyc3Qgb3JkZXIgcmVjdXJy ZW5jZVxuIik7DQogCSAgYnJlYWs7DQorCWNhc2UgdmVjdF9lYXJseV9leGl0X2RlZjoNCisJICBk dW1wX3ByaW50ZiAoTVNHX05PVEUsICJlYXJseSBleGl0XG4iKTsNCisJICBicmVhazsNCiAJY2Fz ZSB2ZWN0X3Vua25vd25fZGVmX3R5cGU6DQogCSAgZHVtcF9wcmludGYgKE1TR19OT1RFLCAidW5r bm93blxuIik7DQogCSAgYnJlYWs7DQpAQCAtMTI1MDQsNiArMTI3NjMsOCBAQCB2ZWN0X2dldF92 ZWN0b3JfdHlwZXNfZm9yX3N0bXQgKHZlY19pbmZvICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10 X2luZm8sDQogICAqbnVuaXRzX3ZlY3R5cGVfb3V0ID0gTlVMTF9UUkVFOw0KIA0KICAgaWYgKGdp bXBsZV9nZXRfbGhzIChzdG10KSA9PSBOVUxMX1RSRUUNCisgICAgICAvKiBBbGxvdyB2ZWN0b3Ig Y29uZGl0aW9uYWxzIHRocm91Z2ggaGVyZS4gICovDQorICAgICAgJiYgIWlzX2N0cmxfc3RtdCAo c3RtdCkNCiAgICAgICAvKiBNQVNLX1NUT1JFIGhhcyBubyBsaHMsIGJ1dCBpcyBvay4gICovDQog ICAgICAgJiYgIWdpbXBsZV9jYWxsX2ludGVybmFsX3AgKHN0bXQsIElGTl9NQVNLX1NUT1JFKSkN CiAgICAgew0KQEAgLTEyNTIwLDcgKzEyNzgxLDcgQEAgdmVjdF9nZXRfdmVjdG9yX3R5cGVzX2Zv cl9zdG10ICh2ZWNfaW5mbyAqdmluZm8sIHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLA0KIAl9DQog DQogICAgICAgcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHN0bXQsDQotCQkJCSAgICAg Im5vdCB2ZWN0b3JpemVkOiBpcnJlZ3VsYXIgc3RtdC4lRyIsIHN0bXQpOw0KKwkJCQkgICAgICJu b3QgdmVjdG9yaXplZDogaXJyZWd1bGFyIHN0bXQ6ICVHIiwgc3RtdCk7DQogICAgIH0NCiANCiAg IHRyZWUgdmVjdHlwZTsNCkBAIC0xMjU0OSw2ICsxMjgxMCw4IEBAIHZlY3RfZ2V0X3ZlY3Rvcl90 eXBlc19mb3Jfc3RtdCAodmVjX2luZm8gKnZpbmZvLCBzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywN CiAJc2NhbGFyX3R5cGUgPSBUUkVFX1RZUEUgKERSX1JFRiAoZHIpKTsNCiAgICAgICBlbHNlIGlm IChnaW1wbGVfY2FsbF9pbnRlcm5hbF9wIChzdG10LCBJRk5fTUFTS19TVE9SRSkpDQogCXNjYWxh cl90eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfY2FsbF9hcmcgKHN0bXQsIDMpKTsNCisgICAgICBl bHNlIGlmIChpc19jdHJsX3N0bXQgKHN0bXQpKQ0KKwlzY2FsYXJfdHlwZSA9IFRSRUVfVFlQRSAo Z2ltcGxlX2NvbmRfcmhzIChzdG10KSk7DQogICAgICAgZWxzZQ0KIAlzY2FsYXJfdHlwZSA9IFRS RUVfVFlQRSAoZ2ltcGxlX2dldF9saHMgKHN0bXQpKTsNCiANCmRpZmYgLS1naXQgYS9nY2MvdHJl ZS12ZWN0b3JpemVyLmggYi9nY2MvdHJlZS12ZWN0b3JpemVyLmgNCmluZGV4IDAxNjk2MWRhODUx MGNhN2RkMmQwN2U3MTZjYmUzNTYyM2VkMmQ5YTUuLjNmNGZjOTBjN2FkYTk3MTNiOWNlNThmODYy NzI2NDhkYWIwY2E2YjcgMTAwNjQ0DQotLS0gYS9nY2MvdHJlZS12ZWN0b3JpemVyLmgNCisrKyBi L2djYy90cmVlLXZlY3Rvcml6ZXIuaA0KQEAgLTYzLDYgKzYzLDcgQEAgZW51bSB2ZWN0X2RlZl90 eXBlIHsNCiAgIHZlY3RfaW50ZXJuYWxfZGVmLA0KICAgdmVjdF9pbmR1Y3Rpb25fZGVmLA0KICAg dmVjdF9yZWR1Y3Rpb25fZGVmLA0KKyAgdmVjdF9lYXJseV9leGl0X2RlZiwNCiAgIHZlY3RfZG91 YmxlX3JlZHVjdGlvbl9kZWYsDQogICB2ZWN0X25lc3RlZF9jeWNsZSwNCiAgIHZlY3RfZmlyc3Rf b3JkZXJfcmVjdXJyZW5jZSwNCkBAIC04MzYsNiArODM3LDEzIEBAIHB1YmxpYzoNCiAgICAgIHdl IG5lZWQgdG8gcGVlbCBvZmYgaXRlcmF0aW9ucyBhdCB0aGUgZW5kIHRvIGZvcm0gYW4gZXBpbG9n dWUgbG9vcC4gICovDQogICBib29sIHBlZWxpbmdfZm9yX25pdGVyOw0KIA0KKyAgLyogV2hlbiB0 aGUgbG9vcCBoYXMgZWFybHkgYnJlYWtzIHRoYXQgd2UgY2FuIHZlY3Rvcml6ZSB3ZSBuZWVkIHRv IHBlZWwNCisgICAgIHRoZSBsb29wIGZvciB0aGUgYnJlYWsgZmluZGluZyBsb29wLiAgKi8NCisg IGJvb2wgZWFybHlfYnJlYWtzOw0KKw0KKyAgLyogTGlzdCBvZiBsb29wIElWIGNvbmRpdGlvbmFs cyBmb3VuZCBpbiB0aGUgbG9vcC4gICovDQorICBhdXRvX3ZlYzxnY29uZCAqPiBjb25kczsNCisN CiAgIC8qIFRydWUgaWYgdGhlcmUgYXJlIG5vIGxvb3AgY2FycmllZCBkYXRhIGRlcGVuZGVuY2ll cyBpbiB0aGUgbG9vcC4NCiAgICAgIElmIGxvb3AtPnNhZmVsZW4gPD0gMSwgdGhlbiB0aGlzIGlz IGFsd2F5cyB0cnVlLCBlaXRoZXIgdGhlIGxvb3ANCiAgICAgIGRpZG4ndCBoYXZlIGFueSBsb29w IGNhcnJpZWQgZGF0YSBkZXBlbmRlbmNpZXMsIG9yIHRoZSBsb29wIGlzIGJlaW5nDQpAQCAtOTIx LDYgKzkyOSw4IEBAIHB1YmxpYzoNCiAjZGVmaW5lIExPT1BfVklORk9fUkVEVUNUSU9OX0NIQUlO UyhMKSAgICAgKEwpLT5yZWR1Y3Rpb25fY2hhaW5zDQogI2RlZmluZSBMT09QX1ZJTkZPX1BFRUxJ TkdfRk9SX0dBUFMoTCkgICAgIChMKS0+cGVlbGluZ19mb3JfZ2Fwcw0KICNkZWZpbmUgTE9PUF9W SU5GT19QRUVMSU5HX0ZPUl9OSVRFUihMKSAgICAoTCktPnBlZWxpbmdfZm9yX25pdGVyDQorI2Rl ZmluZSBMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyhMKSAgICAgICAgIChMKS0+ZWFybHlfYnJlYWtz DQorI2RlZmluZSBMT09QX1ZJTkZPX0xPT1BfQ09ORFMoTCkgICAgICAgICAgIChMKS0+Y29uZHMN CiAjZGVmaW5lIExPT1BfVklORk9fTk9fREFUQV9ERVBFTkRFTkNJRVMoTCkgKEwpLT5ub19kYXRh X2RlcGVuZGVuY2llcw0KICNkZWZpbmUgTE9PUF9WSU5GT19TQ0FMQVJfTE9PUChMKQkgICAoTCkt PnNjYWxhcl9sb29wDQogI2RlZmluZSBMT09QX1ZJTkZPX1NDQUxBUl9MT09QX1NDQUxJTkcoTCkg IChMKS0+c2NhbGFyX2xvb3Bfc2NhbGluZw0KQEAgLTk3MCw3ICs5ODAsNyBAQCBwdWJsaWM6DQog dHlwZWRlZiBvcHRfcG9pbnRlcl93cmFwcGVyIDxsb29wX3ZlY19pbmZvPiBvcHRfbG9vcF92ZWNf aW5mbzsNCiANCiBzdGF0aWMgaW5saW5lIGxvb3BfdmVjX2luZm8NCi1sb29wX3ZlY19pbmZvX2Zv cl9sb29wIChjbGFzcyBsb29wICpsb29wKQ0KK2xvb3BfdmVjX2luZm9fZm9yX2xvb3AgKGNvbnN0 IGNsYXNzIGxvb3AgKmxvb3ApDQogew0KICAgcmV0dXJuIChsb29wX3ZlY19pbmZvKSBsb29wLT5h dXg7DQogfQ0KQEAgLTIxMDcsNyArMjExNyw3IEBAIGNsYXNzIGF1dG9fcHVyZ2VfdmVjdF9sb2Nh dGlvbg0KICAgIGluIHRyZWUtdmVjdC1sb29wLW1hbmlwLmNjLiAgKi8NCiBleHRlcm4gdm9pZCB2 ZWN0X3NldF9sb29wX2NvbmRpdGlvbiAoY2xhc3MgbG9vcCAqLCBsb29wX3ZlY19pbmZvLA0KIAkJ CQkgICAgIHRyZWUsIHRyZWUsIHRyZWUsIGJvb2wpOw0KLWV4dGVybiBib29sIHNscGVlbF9jYW5f ZHVwbGljYXRlX2xvb3BfcCAoY29uc3QgY2xhc3MgbG9vcCAqLCBjb25zdF9lZGdlKTsNCitleHRl cm4gYm9vbCBzbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29wX3AgKGNvbnN0IGxvb3BfdmVjX2luZm8s IGNvbnN0X2VkZ2UpOw0KIGNsYXNzIGxvb3AgKnNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3Rv X2VkZ2VfY2ZnIChjbGFzcyBsb29wICosDQogCQkJCQkJICAgICBjbGFzcyBsb29wICosIGVkZ2Up Ow0KIGNsYXNzIGxvb3AgKnZlY3RfbG9vcF92ZXJzaW9uaW5nIChsb29wX3ZlY19pbmZvLCBnaW1w bGUgKik7DQpAQCAtMjMwNiw2ICsyMzE2LDcgQEAgc3RydWN0IHZlY3RfbG9vcF9mb3JtX2luZm8N CiAgIHRyZWUgbnVtYmVyX29mX2l0ZXJhdGlvbnM7DQogICB0cmVlIG51bWJlcl9vZl9pdGVyYXRp b25zbTE7DQogICB0cmVlIGFzc3VtcHRpb25zOw0KKyAgdmVjPGdjb25kICo+IGNvbmRzOw0KICAg Z2NvbmQgKmxvb3BfY29uZDsNCiAgIGdjb25kICppbm5lcl9sb29wX2NvbmQ7DQogfTsNCmRpZmYg LS1naXQgYS9nY2MvdHJlZS12ZWN0b3JpemVyLmNjIGIvZ2NjL3RyZWUtdmVjdG9yaXplci5jYw0K aW5kZXggNmVjNDk1MTFkNzRiZDJlMGU1ZGQ1MTgyM2E2YzQxMTgwZjA4NzE2Yy4uNGFhNDZjN2Mw ZDgyMzVkM2I3ODNjZTkzMGU1ZGYzNDgwZTFiM2VmOSAxMDA2NDQNCi0tLSBhL2djYy90cmVlLXZl Y3Rvcml6ZXIuY2MNCisrKyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuY2MNCkBAIC0xMzgyLDcgKzEz ODIsOSBAQCBwYXNzX3ZlY3Rvcml6ZTo6ZXhlY3V0ZSAoZnVuY3Rpb24gKmZ1bikNCiAJIHByZWRp Y2F0ZXMgdGhhdCBuZWVkIHRvIGJlIHNoYXJlZCBmb3Igb3B0aW1hbCBwcmVkaWNhdGUgdXNhZ2Uu DQogCSBIb3dldmVyIHJlYXNzb2Mgd2lsbCByZS1vcmRlciB0aGVtIGFuZCBwcmV2ZW50IENTRSBm cm9tIHdvcmtpbmcNCiAJIGFzIGl0IHNob3VsZC4gIENTRSBvbmx5IHRoZSBsb29wIGJvZHksIG5v dCB0aGUgZW50cnkuICAqLw0KLSAgICAgIGJpdG1hcF9zZXRfYml0IChleGl0X2Jicywgc2luZ2xl X2V4aXQgKGxvb3ApLT5kZXN0LT5pbmRleCk7DQorICAgICAgYXV0b192ZWM8ZWRnZT4gZXhpdHMg PSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKTsNCisgICAgICBmb3IgKGVkZ2UgZXhpdCA6IGV4 aXRzKQ0KKwliaXRtYXBfc2V0X2JpdCAoZXhpdF9iYnMsIGV4aXQtPmRlc3QtPmluZGV4KTsNCiAN CiAgICAgICBlZGdlIGVudHJ5ID0gRURHRV9QUkVEIChsb29wX3ByZWhlYWRlcl9lZGdlIChsb29w KS0+c3JjLCAwKTsNCiAgICAgICBkb19ycG9fdm4gKGZ1biwgZW50cnksIGV4aXRfYmJzKTsNCg== --_002_VI1PR08MB5325308942BD4887854E3DEFFFE39VI1PR08MB5325eurp_ Content-Type: application/octet-stream; name="rb16498 (1).patch" Content-Description: rb16498 (1).patch Content-Disposition: attachment; filename="rb16498 (1).patch"; size=115114; creation-date="Tue, 13 Dec 2022 15:01:39 GMT"; modification-date="Tue, 13 Dec 2022 15:01:59 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jZmdsb29wLmggYi9nY2MvY2ZnbG9vcC5oCmluZGV4IDUyOGIxMjE5 YmMzN2FkOGYxMTRkNWNmMzgxYzBjZmY4OTlkYjMxZWUuLjljN2YwMTlhNTFhYmZlMmRlOGUxZGQ3 MTM1ZGVhMjQ2M2IwMjU2YTAgMTAwNjQ0Ci0tLSBhL2djYy9jZmdsb29wLmgKKysrIGIvZ2NjL2Nm Z2xvb3AuaApAQCAtMzg1LDYgKzM4NSw3IEBAIGV4dGVybiBiYXNpY19ibG9jayAqZ2V0X2xvb3Bf Ym9keV9pbl9jdXN0b21fb3JkZXIgKGNvbnN0IGNsYXNzIGxvb3AgKiwgdm9pZCAqLAogCiBleHRl cm4gYXV0b192ZWM8ZWRnZT4gZ2V0X2xvb3BfZXhpdF9lZGdlcyAoY29uc3QgY2xhc3MgbG9vcCAq LCBiYXNpY19ibG9jayAqID0gTlVMTCk7CiBleHRlcm4gZWRnZSBzaW5nbGVfZXhpdCAoY29uc3Qg Y2xhc3MgbG9vcCAqKTsKK2V4dGVybiBlZGdlIG5vcm1hbF9leGl0IChjb25zdCBjbGFzcyBsb29w ICopOwogZXh0ZXJuIGVkZ2Ugc2luZ2xlX2xpa2VseV9leGl0IChjbGFzcyBsb29wICpsb29wLCBj b25zdCB2ZWM8ZWRnZT4gJik7CiBleHRlcm4gdW5zaWduZWQgbnVtX2xvb3BfYnJhbmNoZXMgKGNv bnN0IGNsYXNzIGxvb3AgKik7CiAKZGlmZiAtLWdpdCBhL2djYy9jZmdsb29wLmNjIGIvZ2NjL2Nm Z2xvb3AuY2MKaW5kZXggNTdiZjdiMTg1NWQ0ZGQyMGZiM2Y0MjM4ODEyNDkzMmQwY2EyYjQ4YS4u OTdhNzM3M2ZiNmQ5NTE0ZGE2MDJkNWJlMDEwNTBmMmVjNjYwOTRiYyAxMDA2NDQKLS0tIGEvZ2Nj L2NmZ2xvb3AuY2MKKysrIGIvZ2NjL2NmZ2xvb3AuY2MKQEAgLTE4MTIsNiArMTgxMiwyMCBAQCBz aW5nbGVfZXhpdCAoY29uc3QgY2xhc3MgbG9vcCAqbG9vcCkKICAgICByZXR1cm4gTlVMTDsKIH0K IAorLyogUmV0dXJucyB0aGUgbm9ybWFsIGV4aXQgZWRnZSBvZiBMT09QLCBvciBOVUxMIGlmIExP T1AgaGFzIGVpdGhlciBubyBleGl0LgorICAgSWYgbG9vcHMgZG8gbm90IGhhdmUgdGhlIGV4aXRz IHJlY29yZGVkLCBOVUxMIGlzIHJldHVybmVkIGFsd2F5cy4gICovCisKK2VkZ2UKK25vcm1hbF9l eGl0IChjb25zdCBjbGFzcyBsb29wICpsb29wKQoreworICBzdHJ1Y3QgbG9vcF9leGl0ICpleGl0 ID0gbG9vcC0+ZXhpdHMtPm5leHQ7CisKKyAgaWYgKCFsb29wc19zdGF0ZV9zYXRpc2ZpZXNfcCAo TE9PUFNfSEFWRV9SRUNPUkRFRF9FWElUUykpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0dXJu IGV4aXQtPmU7Cit9CisKIC8qIFJldHVybnMgdHJ1ZSB3aGVuIEJCIGhhcyBhbiBpbmNvbWluZyBl ZGdlIGV4aXRpbmcgTE9PUC4gICovCiAKIGJvb2wKZGlmZiAtLWdpdCBhL2djYy9kb2MvbG9vcC50 ZXhpIGIvZ2NjL2RvYy9sb29wLnRleGkKaW5kZXggNmU4NjU3YTA3NGQyNDQ3ZGI3YWU5Yjc1Y2Jm YmI3MTI4MmI4NDI4Ny4uZTFkZTJhYzQwZjg3Zjg3OWFiNjkxZjY4YmQ0MWIzYmMyMWE4M2JmNyAx MDA2NDQKLS0tIGEvZ2NjL2RvYy9sb29wLnRleGkKKysrIGIvZ2NjL2RvYy9sb29wLnRleGkKQEAg LTIxMSw2ICsyMTEsMTAgQEAgcmVsYXRpb24sIGFuZCBicmVhdGgtZmlyc3Qgc2VhcmNoIG9yZGVy LCByZXNwZWN0aXZlbHkuCiBAaXRlbSBAY29kZXtzaW5nbGVfZXhpdH06IFJldHVybnMgdGhlIHNp bmdsZSBleGl0IGVkZ2Ugb2YgdGhlIGxvb3AsIG9yCiBAY29kZXtOVUxMfSBpZiB0aGUgbG9vcCBo YXMgbW9yZSB0aGFuIG9uZSBleGl0LiAgWW91IGNhbiBvbmx5IHVzZSB0aGlzCiBmdW5jdGlvbiBp ZiBAY29kZXtMT09QU19IQVZFX1JFQ09SREVEX0VYSVRTfSBpcyB1c2VkLgorZnVuY3Rpb24gaWYg TE9PUFNfSEFWRV9NQVJLRURfU0lOR0xFX0VYSVRTIHByb3BlcnR5IGlzIHVzZWQuCitAaXRlbSBA Y29kZXtub3JtYWxfZXhpdH06IFJldHVybnMgdGhlIG5hdHVyYWwgZXhpdCBlZGdlIG9mIHRoZSBs b29wLAorZXZlbiBpZiB0aGUgbG9vcCBoYXMgbW9yZSB0aGFuIG9uZSBleGl0LiAgVGhlIG5hdHVy YWwgZXhpdCBpcyB0aGUgZXhpdAordGhhdCB3b3VsZCBub3JtYWxseSBiZSB0YWtlbiB3aGVyZSB0 aGUgbG9vcCB0byBiZSBmdWxseSBleGVjdXRlZC4KIEBpdGVtIEBjb2Rle2dldF9sb29wX2V4aXRf ZWRnZXN9OiBFbnVtZXJhdGVzIHRoZSBleGl0IGVkZ2VzIG9mIGEgbG9vcC4KIEBpdGVtIEBjb2Rl e2p1c3Rfb25jZV9lYWNoX2l0ZXJhdGlvbl9wfTogUmV0dXJucyB0cnVlIGlmIHRoZSBiYXNpYyBi bG9jawogaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYWNoIGl0ZXJhdGlvbiBvZiBh IGxvb3AgKHRoYXQgaXMsIGl0CkBAIC02MjMsNCArNjI3LDQgQEAgbWF4aW11bSB2ZXJib3NpdHkg dGhlIGRldGFpbHMgb2YgYSBkYXRhIGRlcGVuZGVuY2UgcmVsYXRpb25zIGFycmF5LAogQGNvZGV7 ZHVtcF9kaXN0X2Rpcl92ZWN0b3JzfSBwcmludHMgb25seSB0aGUgY2xhc3NpY2FsIGRpc3RhbmNl IGFuZAogZGlyZWN0aW9uIHZlY3RvcnMgZm9yIGEgZGF0YSBkZXBlbmRlbmNlIHJlbGF0aW9ucyBh cnJheSwgYW5kCiBAY29kZXtkdW1wX2RhdGFfcmVmZXJlbmNlc30gcHJpbnRzIHRoZSBkZXRhaWxz IG9mIHRoZSBkYXRhIHJlZmVyZW5jZXMKLWNvbnRhaW5lZCBpbiBhIGRhdGEgcmVmZXJlbmNlIGFy cmF5LgorY29udGFpbmVkIGluIGEgZGF0YSByZWZlcmVuY2UgYXJyYXkKZGlmZiAtLWdpdCBhL2dj Yy9kb2Mvc291cmNlYnVpbGQudGV4aSBiL2djYy9kb2Mvc291cmNlYnVpbGQudGV4aQppbmRleCBm ZmU2OWQ2ZmNiOWM0NmNmOTdiYTU3MGU4NWI1NmU1ODZhMGM5Yjk5Li5hODJjN2I4ZjFlZmEwMWIw MmI3NzJjOWRkMGY1YjNkY2RlODE3MDkxIDEwMDY0NAotLS0gYS9nY2MvZG9jL3NvdXJjZWJ1aWxk LnRleGkKKysrIGIvZ2NjL2RvYy9zb3VyY2VidWlsZC50ZXhpCkBAIC0xNjM3LDYgKzE2MzcsMTAg QEAgVGFyZ2V0IHN1cHBvcnRzIGhhcmR3YXJlIHZlY3RvcnMgb2YgQGNvZGV7ZmxvYXR9IHdoZW4K IEBvcHRpb257LWZ1bnNhZmUtbWF0aC1vcHRpbWl6YXRpb25zfSBpcyBub3QgaW4gZWZmZWN0Lgog VGhpcyBpbXBsaWVzIEBjb2Rle3ZlY3RfZmxvYXR9LgogCitAaXRlbSB2ZWN0X2Vhcmx5X2JyZWFr CitUYXJnZXQgc3VwcG9ydHMgaGFyZHdhcmUgdmVjdG9yaXphdGlvbiBvZiBsb29wcyB3aXRoIGVh cmx5IGJyZWFrcy4KK1RoaXMgcmVxdWlyZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGNicmFu Y2ggb3B0YWIgZm9yIHZlY3RvcnMuCisKIEBpdGVtIHZlY3RfaW50CiBUYXJnZXQgc3VwcG9ydHMg aGFyZHdhcmUgdmVjdG9ycyBvZiBAY29kZXtpbnR9LgogCmRpZmYgLS1naXQgYS9nY2MvZ2VuZW1p dC5jYyBiL2djYy9nZW5lbWl0LmNjCmluZGV4IDkwOWFjODlhMTZiZjljNzgzMGIxNzEwZjE3NGUx OWNiYzRhODJhNTEuLmNmNzJhOTE1NDI0M2QyODJiYzEwNjc0YzNjODM3NzNiNzY4NDg4NDAgMTAw NjQ0Ci0tLSBhL2djYy9nZW5lbWl0LmNjCisrKyBiL2djYy9nZW5lbWl0LmNjCkBAIC05MDUsNiAr OTA1LDcgQEAgZnJvbSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBmaWxlIGBtZCcuICAqL1xuXG4i KTsKICAgcHJpbnRmICgiI2luY2x1ZGUgXCJ0bS1jb25zdHJzLmhcIlxuIik7CiAgIHByaW50ZiAo IiNpbmNsdWRlIFwiZ2djLmhcIlxuIik7CiAgIHByaW50ZiAoIiNpbmNsdWRlIFwidGFyZ2V0Lmhc IlxuXG4iKTsKKyAgcHJpbnRmICgiI2luY2x1ZGUgXCJydHgtdmVjdG9yLWJ1aWxkZXIuaFwiXG5c biIpOwogCiAgIC8qIFJlYWQgdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uICAqLwogCmRpZmYgLS1n aXQgYS9nY2MvZ2ltcGxlLmggYi9nY2MvZ2ltcGxlLmgKaW5kZXggYWRiZWIwNjMxODZkNGE4ZTAw OWU0ZGQxODRkNzM2MDlkMmM1ZDc4Yy4uYTY4YjI5YTkxMzYwMjZlNWI0ZDdkY2QyN2U3MzUyZGMw N2ExN2I1MiAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBsZS5oCisrKyBiL2djYy9naW1wbGUuaApAQCAt NDc1Niw2ICs0NzU2LDMwIEBAIGdpbXBsZV9waGlfYXJnX2hhc19sb2NhdGlvbiAoY29uc3QgZ3Bo aSAqcGhpLCBzaXplX3QgaSkKICAgcmV0dXJuIGdpbXBsZV9waGlfYXJnX2xvY2F0aW9uIChwaGks IGkpICE9IFVOS05PV05fTE9DQVRJT047CiB9CiAKKworLyogQ2hlY2sgaWYgdGhlIGdpbXBsZSBQ SEkgb3IgYW55IGFyZ3VtZW50cyB0byB0aGUgcGhpIGhhcyBhIFZERUYuICAqLworc3RhdGljIGlu bGluZSBib29sCitnaW1wbGVfcGhpX2hhc192ZGVmIChjb25zdCBncGhpICpwaGkpCit7CisgIGZv ciAodW5zaWduZWQgaSA9IDA7IGkgPCBnaW1wbGVfcGhpX251bV9hcmdzIChwaGkpOyBpKyspCisg ICAgeworICAgICAgdHJlZSBhcmcgPSBnaW1wbGVfcGhpX2FyZ19kZWYgKHBoaSwgaSk7CisgICAg ICBpZiAoVFJFRV9DT0RFIChhcmcpICE9IFNTQV9OQU1FKQorCWNvbnRpbnVlOworCisgICAgICBn aW1wbGUgKmRlZiA9IFNTQV9OQU1FX0RFRl9TVE1UIChhcmcpOworICAgICAgaWYgKGdpbXBsZV92 ZGVmIChkZWYpKQorCXJldHVybiB0cnVlOworICAgICAgaWYgKGF1dG8gcGhpID0gZHluX2Nhc3Q8 Y29uc3QgZ3BoaSAqPiAoZGVmKSkKKwl7CisJICBpZiAoZ2ltcGxlX3BoaV9oYXNfdmRlZiAocGhp KSkKKwkgICAgcmV0dXJuIHRydWU7CisJfQorICAgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCisK IC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBi eSBnaW1wbGVfYXJnLiAgKi8KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZApkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEuY2MgYi9nY2MvdGVz dHN1aXRlL2crKy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMS5jYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTgz NjQ4Y2EzNmUyYzhmZWViNzgzMzVmY2NmM2YzYjgyYTk3ZDJlCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEuY2MKQEAgLTAsMCAr MSw2MSBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3Rp dmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2 ZS10YXJnZXQgdmVjdF9pbnQgfSAqLworCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLXcg LU8yIiB9ICovCisKK3ZvaWQgZmFuY3lfYWJvcnQoY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikg X19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7Cit0ZW1wbGF0ZSA8dW5zaWduZWQgTiwgdHlw ZW5hbWU+IHN0cnVjdCBwb2x5X2ludF9wb2QgeyBpbnQgY29lZmZzW05dOyB9OwordGVtcGxhdGUg PHVuc2lnbmVkIE4sIHR5cGVuYW1lPiBjbGFzcyBwb2x5X2ludCA6IHB1YmxpYyBwb2x5X2ludF9w b2Q8TiwgaW50PiB7CitwdWJsaWM6CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBDYT4gcG9seV9pbnQg Jm9wZXJhdG9yKz0oY29uc3QgcG9seV9pbnRfcG9kPE4sIENhPiAmKTsKK307Cit0ZW1wbGF0ZSA8 dW5zaWduZWQgTiwgdHlwZW5hbWUgQz4KK3RlbXBsYXRlIDx0eXBlbmFtZSBDYT4KK3BvbHlfaW50 PE4sIEM+ICZwb2x5X2ludDxOLCBDPjo6b3BlcmF0b3IrPShjb25zdCBwb2x5X2ludF9wb2Q8Tiwg Q2E+ICZhKSB7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHRoaXMtPmNvZWZm c1tpXSArPSBhLmNvZWZmc1tpXTsKKyAgcmV0dXJuICp0aGlzOworfQordGVtcGxhdGUgPHVuc2ln bmVkIE4sIHR5cGVuYW1lIENhLCB0eXBlbmFtZSBDYj4KK3BvbHlfaW50PE4sIGxvbmc+IGV4YWN0 X2Rpdihwb2x5X2ludF9wb2Q8TiwgQ2E+LCBDYikgeworICBwb2x5X2ludDxOLCBsb25nPiByOwor ICByZXR1cm4gcjsKK30KK3N0cnVjdCB2ZWNfcHJlZml4IHsKKyAgdW5zaWduZWQgbV9udW07Cit9 Oworc3RydWN0IHZsX3B0cjsKK3N0cnVjdCB2YV9oZWFwIHsKKyAgdHlwZWRlZiB2bF9wdHIgZGVm YXVsdF9sYXlvdXQ7Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSBBLCB0eXBlbmFt ZSA9IHR5cGVuYW1lIEE6OmRlZmF1bHRfbGF5b3V0Pgorc3RydWN0IHZlYzsKK3RlbXBsYXRlIDx0 eXBlbmFtZSBULCB0eXBlbmFtZSBBPiBzdHJ1Y3QgdmVjPFQsIEEsIGludD4geworICBUICZvcGVy YXRvcltdKHVuc2lnbmVkKTsKKyAgdmVjX3ByZWZpeCBtX3ZlY3BmeDsKKyAgVCBtX3ZlY2RhdGFb XTsKK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4gVCAmdmVjPFQsIEEsIGlu dD46Om9wZXJhdG9yW10odW5zaWduZWQgaXgpIHsKKyAgbV92ZWNwZngubV9udW0gPyBmYW5jeV9h Ym9ydCgiIiwgOSwgX19GVU5DVElPTl9fKSwgMCA6IDA7CisgIHJldHVybiBtX3ZlY2RhdGFbaXhd OworfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCB2ZWM8VCwgdmFfaGVhcD4geworICBU ICZvcGVyYXRvcltdKHVuc2lnbmVkIGl4KSB7IHJldHVybiBtX3ZlY1tpeF07IH0KKyAgdmVjPFQs IHZhX2hlYXAsIGludD4gbV92ZWM7Cit9OworY2xhc3MgYXV0b192ZWMgOiBwdWJsaWMgdmVjPHBv bHlfaW50PDIsIGxvbmc+LCB2YV9oZWFwPiB7fTsKK3RlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3Mg dmVjdG9yX2J1aWxkZXIgOiBwdWJsaWMgYXV0b192ZWMge307CitjbGFzcyBpbnRfdmVjdG9yX2J1 aWxkZXIgOiBwdWJsaWMgdmVjdG9yX2J1aWxkZXI8aW50PiB7CitwdWJsaWM6CisgIGludF92ZWN0 b3JfYnVpbGRlcihwb2x5X2ludDwyLCBsb25nPiwgaW50LCBpbnQpOworfTsKK2Jvb2wgdmVjdF9n cm91cGVkX3N0b3JlX3N1cHBvcnRlZCgpIHsKKyAgaW50IGk7CisgIHBvbHlfaW50PDIsIGxvbmc+ IG5lbHQ7CisgIGludF92ZWN0b3JfYnVpbGRlciBzZWwobmVsdCwgMiwgMyk7CisgIGZvciAoaSA9 IDA7IGkgPCA2OyBpKyspCisgICAgc2VsW2ldICs9IGV4YWN0X2RpdihuZWx0LCAyKTsKK30KKwor LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9 IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVha18yLmNjIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzIu Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uNmE4MzY0OGNhMzZlMmM4ZmVlYjc4MzM1ZmNjZjNmM2I4MmE5N2QyZQot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVha18yLmNjCkBAIC0wLDAgKzEsNjEgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7 IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8KKy8qIHsg ZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8KKworLyogeyBkZy1hZGRp dGlvbmFsLW9wdGlvbnMgIi13IC1PMiIgfSAqLworCit2b2lkIGZhbmN5X2Fib3J0KGNoYXIgKiwg aW50LCBjb25zdCBjaGFyICopIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOwordGVtcGxh dGUgPHVuc2lnbmVkIE4sIHR5cGVuYW1lPiBzdHJ1Y3QgcG9seV9pbnRfcG9kIHsgaW50IGNvZWZm c1tOXTsgfTsKK3RlbXBsYXRlIDx1bnNpZ25lZCBOLCB0eXBlbmFtZT4gY2xhc3MgcG9seV9pbnQg OiBwdWJsaWMgcG9seV9pbnRfcG9kPE4sIGludD4geworcHVibGljOgorICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgQ2E+IHBvbHlfaW50ICZvcGVyYXRvcis9KGNvbnN0IHBvbHlfaW50X3BvZDxOLCBDYT4g Jik7Cit9OwordGVtcGxhdGUgPHVuc2lnbmVkIE4sIHR5cGVuYW1lIEM+Cit0ZW1wbGF0ZSA8dHlw ZW5hbWUgQ2E+Citwb2x5X2ludDxOLCBDPiAmcG9seV9pbnQ8TiwgQz46Om9wZXJhdG9yKz0oY29u c3QgcG9seV9pbnRfcG9kPE4sIENhPiAmYSkgeworICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkr KykKKyAgICB0aGlzLT5jb2VmZnNbaV0gKz0gYS5jb2VmZnNbaV07CisgIHJldHVybiAqdGhpczsK K30KK3RlbXBsYXRlIDx1bnNpZ25lZCBOLCB0eXBlbmFtZSBDYSwgdHlwZW5hbWUgQ2I+Citwb2x5 X2ludDxOLCBsb25nPiBleGFjdF9kaXYocG9seV9pbnRfcG9kPE4sIENhPiwgQ2IpIHsKKyAgcG9s eV9pbnQ8TiwgbG9uZz4gcjsKKyAgcmV0dXJuIHI7Cit9CitzdHJ1Y3QgdmVjX3ByZWZpeCB7Cisg IHVuc2lnbmVkIG1fbnVtOworfTsKK3N0cnVjdCB2bF9wdHI7CitzdHJ1Y3QgdmFfaGVhcCB7Cisg IHR5cGVkZWYgdmxfcHRyIGRlZmF1bHRfbGF5b3V0OworfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSwg dHlwZW5hbWUgQSwgdHlwZW5hbWUgPSB0eXBlbmFtZSBBOjpkZWZhdWx0X2xheW91dD4KK3N0cnVj dCB2ZWM7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4gc3RydWN0IHZlYzxULCBB LCBpbnQ+IHsKKyAgVCAmb3BlcmF0b3JbXSh1bnNpZ25lZCk7CisgIHZlY19wcmVmaXggbV92ZWNw Zng7CisgIFQgbV92ZWNkYXRhW107Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l IEE+IFQgJnZlYzxULCBBLCBpbnQ+OjpvcGVyYXRvcltdKHVuc2lnbmVkIGl4KSB7CisgIG1fdmVj cGZ4Lm1fbnVtID8gZmFuY3lfYWJvcnQoIiIsIDksIF9fRlVOQ1RJT05fXyksIDAgOiAwOworICBy ZXR1cm4gbV92ZWNkYXRhW2l4XTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgdmVj PFQsIHZhX2hlYXA+IHsKKyAgVCAmb3BlcmF0b3JbXSh1bnNpZ25lZCBpeCkgeyByZXR1cm4gbV92 ZWNbaXhdOyB9CisgIHZlYzxULCB2YV9oZWFwLCBpbnQ+IG1fdmVjOworfTsKK2NsYXNzIGF1dG9f dmVjIDogcHVibGljIHZlYzxwb2x5X2ludDwyLCBsb25nPiwgdmFfaGVhcD4ge307Cit0ZW1wbGF0 ZSA8dHlwZW5hbWU+IGNsYXNzIHZlY3Rvcl9idWlsZGVyIDogcHVibGljIGF1dG9fdmVjIHt9Owor Y2xhc3MgaW50X3ZlY3Rvcl9idWlsZGVyIDogcHVibGljIHZlY3Rvcl9idWlsZGVyPGludD4gewor cHVibGljOgorICBpbnRfdmVjdG9yX2J1aWxkZXIocG9seV9pbnQ8MiwgbG9uZz4sIGludCwgaW50 KTsKK307Citib29sIHZlY3RfZ3JvdXBlZF9zdG9yZV9zdXBwb3J0ZWQoKSB7CisgIGludCBpOwor ICBwb2x5X2ludDwyLCBsb25nPiBuZWx0OworICBpbnRfdmVjdG9yX2J1aWxkZXIgc2VsKG5lbHQs IDIsIDMpOworICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorICAgIHNlbFtpXSArPSBleGFjdF9k aXYobmVsdCwgMik7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBW RUNUT1JJWkVEIiAidmVjdCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMy5jYyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3ZlY3Qv dmVjdC1lYXJseS1icmVha18zLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExMmU1Y2E0MzRiMmFjMzdjMDNkYmFh MTIyNzNmZDhlNWFhMjAxOGMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMy5jYwpAQCAtMCwwICsxLDE2IEBACisvKiB7IGRnLWRv IGNvbXBpbGUgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJs eV9icmVhayB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9 ICovCisKKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItdyAtTzIiIH0gKi8KKworaW50IGFh cmNoNjRfYWR2c2ltZF92YWxpZF9pbW1lZGlhdGVfaHNfdmFsMzI7Citib29sIGFhcmNoNjRfYWR2 c2ltZF92YWxpZF9pbW1lZGlhdGVfaHMoKSB7CisgIGZvciAoaW50IHNoaWZ0ID0gMDsgc2hpZnQg PCAzMjsgc2hpZnQgKz0gOCkKKyAgICBpZiAoYWFyY2g2NF9hZHZzaW1kX3ZhbGlkX2ltbWVkaWF0 ZV9oc192YWwzMiAmIHNoaWZ0KQorICAgICAgcmV0dXJuIGFhcmNoNjRfYWR2c2ltZF92YWxpZF9p bW1lZGlhdGVfaHNfdmFsMzI7CisgIGZvciAoOzspCisgICAgOworfQorCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLwpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8xLmMg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzEuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwLi4yNDk1YjM2YTcyZWFlOTRjYjdhYmM0YTBkMTdhNWM5NzlmZDc4MDgzCi0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1 bl8xLmMKQEAgLTAsMCArMSwxMSBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1yZXF1 aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovCisvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKy8qIHsgZGctYWRkaXRpb25hbC1v cHRpb25zICItT2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8KKworI2RlZmluZSBOIDgwMworI2RlZmlu ZSBQIDAKKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzEuYyIKKworLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8K ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1y dW5fMTAuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5f MTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwLi45YmNkN2Y3ZTU3ZWY5YTFkNDY0OWQxODU2OWIzNDA2MDUwZTU0NjAz Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5 LWJyZWFrLXJ1bl8xMC5jCkBAIC0wLDAgKzEsMTEgQEAKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8q IHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLworLyog eyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLworCisvKiB7IGRnLWFk ZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IC1zYXZlLXRlbXBzIiB9ICovCisKKyNkZWZpbmUgTiA4 MDAKKyNkZWZpbmUgUCA3OTkKKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIu YyIKKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2 ZWN0IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1l YXJseS1icmVhay1ydW5fMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5 LWJyZWFrLXJ1bl8yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNmNjMxMDFhNDY3OTA5ZjMyOGJlN2YzYWNiYzVi Y2I3MjE5NjdmZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qv dmVjdC1lYXJseS1icmVhay1ydW5fMi5jCkBAIC0wLDAgKzEsMTEgQEAKKy8qIHsgZGctZG8gcnVu IH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsg fSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLworCisv KiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IC1zYXZlLXRlbXBzIiB9ICovCisKKyNk ZWZpbmUgTiA4MDMKKyNkZWZpbmUgUCA4MDIKKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRl bXBsYXRlXzEuYyIKKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RP UklaRUQiICJ2ZWN0IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1lYXJseS1icmVhay1ydW5fMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWVhcmx5LWJyZWFrLXJ1bl8zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjI2Yjk1ZTliODUxNzA4MWQ0MWQ3 OTRlOWUwMjY0ZDYzMDFjODU4OQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fMy5jCkBAIC0wLDAgKzEsMTEgQEAKKy8qIHsg ZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFy bHlfYnJlYWsgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQg fSAqLworCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IC1zYXZlLXRlbXBzIiB9 ICovCisKKyNkZWZpbmUgTiA4MDMKKyNkZWZpbmUgUCA1CisjaW5jbHVkZSAidmVjdC1lYXJseS1i cmVhay10ZW1wbGF0ZV8xLmMiCisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9P UCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlMGU2NDI2MTIwNTUx MTUyYTdiZDgwMGMxNWQ5ZWQ2YWIxNWJhZGEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzQuYwpAQCAtMCwwICsxLDExIEBA CisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2 ZWN0X2Vhcmx5X2JyZWFrIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZl Y3RfaW50IH0gKi8KKworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCAtc2F2ZS10 ZW1wcyIgfSAqLworCisjZGVmaW5lIE4gODAzCisjZGVmaW5lIFAgMjc4CisjaW5jbHVkZSAidmVj dC1lYXJseS1icmVhay10ZW1wbGF0ZV8xLmMiCisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzUuYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0MmNm NDg2ZjljNDAwNTVkZjBhZWY1ZmQyMzhkMWFmZjdhN2M3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzUuYwpAQCAtMCww ICsxLDExIEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZl LXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IHZlY3RfaW50IH0gKi8KKworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFz dCAtc2F2ZS10ZW1wcyIgfSAqLworCisjZGVmaW5lIE4gODAwCisjZGVmaW5lIFAgNzk5CisjaW5j bHVkZSAidmVjdC1lYXJseS1icmVhay10ZW1wbGF0ZV8xLmMiCisKKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzYuYyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNi5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLjlmZTcxMzZiNzIxM2E0NjNjYTY1NzNjNjA0NzZiN2M4ZjUzMWRkY2IKLS0tIC9kZXYvbnVs bAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzYu YwpAQCAtMCwwICsxLDExIEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLXJlcXVpcmUt ZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1l ZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8KKworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlv bnMgIi1PZmFzdCAtc2F2ZS10ZW1wcyIgfSAqLworCisjZGVmaW5lIE4gODAzCisjZGVmaW5lIFAg MAorI2luY2x1ZGUgInZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMi5jIgorCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl83 LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzcuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi4wMmY5M2Q3N2RiYTMxYjkzOGY2ZmQ5ZThjN2Y1ZTRhY2RlNGFlZWM5Ci0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr LXJ1bl83LmMKQEAgLTAsMCArMSwxMSBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovCisvKiB7IGRnLXJl cXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKy8qIHsgZGctYWRkaXRpb25h bC1vcHRpb25zICItT2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8KKworI2RlZmluZSBOIDgwMworI2Rl ZmluZSBQIDgwMgorI2luY2x1ZGUgInZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMi5jIgorCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0g fSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJy ZWFrLXJ1bl84LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWst cnVuXzguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi5hNjE0OTI1NDY1NjA2YjU0YzYzODIyMWZmYjk1YTVlOGQzYmVl Nzk3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVh cmx5LWJyZWFrLXJ1bl84LmMKQEAgLTAsMCArMSwxMSBAQAorLyogeyBkZy1kbyBydW4gfSAqLwor LyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovCisv KiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKy8qIHsgZGct YWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8KKworI2RlZmluZSBO IDgwMworI2RlZmluZSBQIDUKKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIu YyIKKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2 ZWN0IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1l YXJseS1icmVhay1ydW5fOS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5 LWJyZWFrLXJ1bl85LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRlMmI5YzMwMTQ1NmVkYThmOWFkN2VhYTY3NjA0 NTYzZjBhZmVlNwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qv dmVjdC1lYXJseS1icmVhay1ydW5fOS5jCkBAIC0wLDAgKzEsMTEgQEAKKy8qIHsgZGctZG8gcnVu IH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsg fSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLworCisv KiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IC1zYXZlLXRlbXBzIiB9ICovCisKKyNk ZWZpbmUgTiA4MDMKKyNkZWZpbmUgUCAyNzgKKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRl bXBsYXRlXzIuYyIKKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RP UklaRUQiICJ2ZWN0IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1lYXJseS1icmVhay10ZW1wbGF0ZV8xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmNzBhOGUyYTVh OWRjOTc1NmVkYjU1ODBmMmRlMDJkZGNjOTVkZTkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jCkBAIC0wLDAg KzEsNDcgQEAKKyNpZm5kZWYgTgorI2RlZmluZSBOIDgwMworI2VuZGlmCisKKyNpZm5kZWYgUAor I2RlZmluZSBQIDAKKyNlbmRpZgorCit1bnNpZ25lZCB2ZWN0X2FbTl0gPSB7MH07Cit1bnNpZ25l ZCB2ZWN0X2JbTl0gPSB7MH07CisgIAorX19hdHRyaWJ1dGVfXygobm9pcGEsIG5vaW5saW5lKSkK K3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgpCit7CisgdW5zaWduZWQgcmV0ID0gMDsKKyBmb3Ig KGludCBpID0gMDsgaSA8IE47IGkrKykKKyB7CisgICB2ZWN0X2JbaV0gPSB4ICsgaTsKKyAgIGlm ICh2ZWN0X2FbaV0gPiB4KQorICAgICBicmVhazsKKyAgIHZlY3RfYVtpXSA9IHg7CisgICAKKyB9 CisgcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIHZvaWQgYWJvcnQgKCk7CisKK2ludCBtYWluICgp Cit7CisKKyAgaW50IHggPSAxOworICBpbnQgaWR4ID0gUDsKKyAgdmVjdF9hW2lkeF0gPSB4ICsg MTsKKworICB0ZXN0NCh4KTsKKworICBpZiAodmVjdF9iW2lkeF0gIT0gKHggKyBpZHgpKQorICAg IGFib3J0ICgpOworCisgIGlmICh2ZWN0X2FbaWR4XSAhPSB4ICsgMSkKKyAgICBhYm9ydCAoKTsK KworICBpZiAoaWR4ID4gMCAmJiB2ZWN0X2FbaWR4LTFdICE9IHgpCisgICAgYWJvcnQgKCk7CisK K30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVh ay10ZW1wbGF0ZV8yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJl YWstdGVtcGxhdGVfMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwZjkyNGQ5MDQ0MzdlNzE1NjdkMjdjYzFmMTA4 OWU1NjA3ZGNhMGQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMi5jCkBAIC0wLDAgKzEsNTAgQEAKKyNpZm5kZWYg TgorI2RlZmluZSBOIDgwMworI2VuZGlmCisKKyNpZm5kZWYgUAorI2RlZmluZSBQIDAKKyNlbmRp ZgorCit1bnNpZ25lZCB2ZWN0X2FbTl0gPSB7MH07Cit1bnNpZ25lZCB2ZWN0X2JbTl0gPSB7MH07 CisgIAorX19hdHRyaWJ1dGVfXygobm9pcGEsIG5vaW5saW5lKSkKK3Vuc2lnbmVkIHRlc3Q0KHVu c2lnbmVkIHgpCit7CisgdW5zaWduZWQgcmV0ID0gMDsKKyBmb3IgKGludCBpID0gMDsgaSA8IE47 IGkrKykKKyB7CisgICB2ZWN0X2JbaV0gPSB4ICsgaTsKKyAgIGlmICh2ZWN0X2FbaV0gPiB4KQor ICAgICByZXR1cm4gaTsKKyAgIHZlY3RfYVtpXSA9IHg7CisgICAKKyB9CisgcmV0dXJuIHJldDsK K30KKworZXh0ZXJuIHZvaWQgYWJvcnQgKCk7CisKK2ludCBtYWluICgpCit7CisKKyAgaW50IHgg PSAxOworICBpbnQgaWR4ID0gUDsKKyAgdmVjdF9hW2lkeF0gPSB4ICsgMTsKKworICB1bnNpZ25l ZCByZXMgPSB0ZXN0NCh4KTsKKworICBpZiAocmVzICE9IGlkeCkKKyAgICBhYm9ydCAoKTsKKwor ICBpZiAodmVjdF9iW2lkeF0gIT0gKHggKyBpZHgpKQorICAgIGFib3J0ICgpOworCisgIGlmICh2 ZWN0X2FbaWR4XSAhPSB4ICsgMSkKKyAgICBhYm9ydCAoKTsKKworICBpZiAoaWR4ID4gMCAmJiB2 ZWN0X2FbaWR4LTFdICE9IHgpCisgICAgYWJvcnQgKCk7CisKK30KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xLmMgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxZTdkNjQ4OWI5 OWMyNWI5YjRiM2QxYzgzOWY5ODU2MmI2ZDRkZDcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMS5jCkBAIC0wLDAgKzEsMjcgQEAK Ky8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0 IHZlY3RfaW50IH0gKi8KKworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAq LworCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZl Y3QiIH0gfSAqLworCisjaWZuZGVmIE4KKyNkZWZpbmUgTiA4MDMKKyNlbmRpZgordW5zaWduZWQg dmVjdF9hW05dOwordW5zaWduZWQgdmVjdF9iW05dOworICAKK3Vuc2lnbmVkIHRlc3Q0KHVuc2ln bmVkIHgpCit7CisgdW5zaWduZWQgcmV0ID0gMDsKKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkr KykKKyB7CisgICB2ZWN0X2JbaV0gPSB4ICsgaTsKKyAgIGlmICh2ZWN0X2FbaV0gPiB4KQorICAg ICBicmVhazsKKyAgIHZlY3RfYVtpXSA9IHg7CisgICAKKyB9CisgcmV0dXJuIHJldDsKK30KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xMC5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEwLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uOWU0YWQxNzYzMjAyZGZkYWIzZWQ3OTYxZWFkNTExNGZjYzYxYTExYgotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xMC5j CkBAIC0wLDAgKzEsMjggQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8KKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8KKworLyogeyBkZy1hZGRpdGlvbmFsLW9w dGlvbnMgIi1PZmFzdCIgfSAqLworCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxP T1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLworCisjaWZuZGVmIE4KKyNkZWZpbmUgTiA4MDMK KyNlbmRpZgordW5zaWduZWQgdmVjdF9hW05dOwordW5zaWduZWQgdmVjdF9iW05dOworICAKK3Vu c2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgsaW50IHksIGludCB6KQoreworIHVuc2lnbmVkIHJldCA9 IDA7CisgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspCisgeworICAgdmVjdF9iW2ldID0geCAr IGk7CisgICBpZiAodmVjdF9hW2ldID4geCkKKyAgICAgYnJlYWs7CisgICB2ZWN0X2FbaV0gPSB4 OworIH0KKworIHJldCA9IHggKyB5ICogejsKKyByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzExLmMgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTEuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNjEz ZGQ5OTA5ZmIwOTI3OGRkOTJhODFhMjRlZjg1NDk5NGE5ODkwCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzExLmMKQEAgLTAsMCAr MSwzMSBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3Rp dmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2 ZS10YXJnZXQgdmVjdF9pbnQgfSAqLworCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9m YXN0IiB9ICovCisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJ WkVEIiAidmVjdCIgfSB9ICovCisKKyNpZm5kZWYgTgorI2RlZmluZSBOIDgwMworI2VuZGlmCit1 bnNpZ25lZCB2ZWN0X2FbTl07Cit1bnNpZ25lZCB2ZWN0X2JbTl07CisgIAordW5zaWduZWQgdGVz dDQodW5zaWduZWQgeCwgaW50IHkpCit7CisgdW5zaWduZWQgcmV0ID0gMDsKK2ZvciAoaW50IG8g PSAwOyBvIDwgeTsgbysrKQoreworIHJldCArPSBvOworIGZvciAoaW50IGkgPSAwOyBpIDwgTjsg aSsrKQorIHsKKyAgIHZlY3RfYltpXSA9IHggKyBpOworICAgaWYgKHZlY3RfYVtpXSA+IHgpCisg ICAgIGJyZWFrOworICAgdmVjdF9hW2ldID0geDsKKyAgIAorIH0KK30KKyByZXR1cm4gcmV0Owor fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr XzEyLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi5jYzEwZjMyMzhmMWNiOGUxMzA3ZTAyNGEzZWJjYjVjMjVhMzlkMWIyCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr XzEyLmMKQEAgLTAsMCArMSwzMSBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGct cmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLworLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLworCisvKiB7IGRnLWFkZGl0aW9u YWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovCisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovCisKKyNpZm5kZWYgTgorI2RlZmluZSBO IDgwMworI2VuZGlmCit1bnNpZ25lZCB2ZWN0X2FbTl07Cit1bnNpZ25lZCB2ZWN0X2JbTl07Cisg IAordW5zaWduZWQgdGVzdDQodW5zaWduZWQgeCwgaW50IHkpCit7CisgdW5zaWduZWQgcmV0ID0g MDsKK2ZvciAoaW50IG8gPSAwOyBvIDwgeTsgbysrKQoreworIHJldCArPSBvOworIGZvciAoaW50 IGkgPSAwOyBpIDwgTjsgaSsrKQorIHsKKyAgIHZlY3RfYltpXSA9IHggKyBpOworICAgaWYgKHZl Y3RfYVtpXSA+IHgpCisgICAgIHJldHVybiB2ZWN0X2FbaV07CisgICB2ZWN0X2FbaV0gPSB4Owor ICAgCisgfQorfQorIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1lYXJseS1icmVha18xMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5NjdiNzM5NWVkN2MxOWUzOGE0 MzZkNmVkY2ZlN2MxNTgwYzcxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTMuYwpAQCAtMCwwICsxLDI3IEBACisvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9l YXJseV9icmVhayB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2lu dCB9ICovCisKKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8KKworLyog eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0g Ki8KKworI2lmbmRlZiBOCisjZGVmaW5lIE4gODAzCisjZW5kaWYKK3Vuc2lnbmVkIHZlY3RfYVtO XTsKK3Vuc2lnbmVkIHZlY3RfYltOXTsKKyAgCit1bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4KQor eworIHVuc2lnbmVkIHJldCA9IDA7CisgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspCisgewor ICAgdmVjdF9iW2ldID0geCArIGk7CisgICBpZiAodmVjdF9hW2ldID4geCkKKyAgICAgcmV0dXJu IHZlY3RfYVtpXSAqIHg7CisgICB2ZWN0X2FbaV0gPSB4OworICAgCisgfQorIHJldHVybiByZXQ7 Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJl YWtfMTQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xNC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAuLjAzY2NlNWNmNmNhZGVjYjUyMGI0NmJlNjY2YmY2MDhlM2JjNmE1MTEKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJl YWtfMTQuYwpAQCAtMCwwICsxLDI1IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBk Zy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovCisvKiB7IGRn LXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKy8qIHsgZGctYWRkaXRp b25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8KKworI2RlZmluZSBOIDgwMwordW5z aWduZWQgdmVjdF9hW05dOwordW5zaWduZWQgdmVjdF9iW05dOworICAKK2ludCB0ZXN0NCh1bnNp Z25lZCB4KQoreworIHVuc2lnbmVkIHJldCA9IDA7CisgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBp KyspCisgeworICAgdmVjdF9iW2ldID0geCArIGk7CisgICBpZiAodmVjdF9hW2ldID4geCkKKyAg ICAgcmV0dXJuIGk7CisgICB2ZWN0X2FbaV0gKz0geCAqIHZlY3RfYltpXTsKKyAgIAorIH0KKyBy ZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LWVhcmx5LWJyZWFrXzE1LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHkt YnJlYWtfMTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWM2ODcyZTExMTVmZjY2Njk1ZjVhNTAwZmZhN2NhMDFj MGY4ZDNhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LWVhcmx5LWJyZWFrXzE1LmMKQEAgLTAsMCArMSwyNSBAQAorLyogeyBkZy1kbyBjb21waWxlIH0g Ki8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAq LworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLworCisvKiB7 IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovCisKKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovCisKKyNkZWZpbmUg TiA4MDMKK3Vuc2lnbmVkIHZlY3RfYVtOXTsKK3Vuc2lnbmVkIHZlY3RfYltOXTsKKyAgCitpbnQg dGVzdDQodW5zaWduZWQgeCkKK3sKKyBpbnQgcmV0ID0gMDsKKyBmb3IgKGludCBpID0gMDsgaSA8 IE47IGkrKykKKyB7CisgICB2ZWN0X2JbaV0gPSB4ICsgaTsKKyAgIGlmICh2ZWN0X2FbaV0gPiB4 KQorICAgICByZXR1cm4gaTsKKyAgIHZlY3RfYVtpXSArPSB4ICogdmVjdF9iW2ldOworICAgCisg fQorIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWtfMTYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1l YXJseS1icmVha18xNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwODEyZDEyYTM5YmQ5NGI0YjhhM2FhZGU2NTEy YjE2MjY5N2Q2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWtfMTYuYwpAQCAtMCwwICsxLDI1IEBACisvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVh ayB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisK Ky8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8KKworLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8KKworI2Rl ZmluZSBOIDEwMjQKK3Vuc2lnbmVkIHZlY3RfYVtOXTsKK3Vuc2lnbmVkIHZlY3RfYltOXTsKKyAK K3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgpCit7CisgdW5zaWduZWQgcmV0ID0gMDsKKyBmb3Ig KGludCBpID0gMDsgaSA8IE47IGkrKykKKyB7CisgICB2ZWN0X2JbaV0gPSB4ICsgaTsKKyAgIGlm ICh2ZWN0X2FbaV0gPiB4KQorICAgICByZXR1cm4gdmVjdF9hW2ldOworICAgdmVjdF9hW2ldID0g eDsKKyAgIHJldCArPSB2ZWN0X2FbaV0gKyB2ZWN0X2JbaV07CisgfQorIHJldHVybiByZXQ7Cit9 CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtf MTcuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xNy5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLjUxMDIyN2ExODQzNWE4ZTQ3YzVhNzU0NTgwMTgwYzZkMzQwYzA4MjMKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtf MTcuYwpAQCAtMCwwICsxLDI1IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovCisvKiB7IGRnLXJl cXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKy8qIHsgZGctYWRkaXRpb25h bC1vcHRpb25zICItT2Zhc3QiIH0gKi8KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w ICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8KKworI2RlZmluZSBOIDEwMjQKK3Vuc2ln bmVkIHZlY3RfYVtOXTsKK3Vuc2lnbmVkIHZlY3RfYltOXTsKKyAKK3Vuc2lnbmVkIHRlc3Q0KHVu c2lnbmVkIHgpCit7CisgdW5zaWduZWQgcmV0ID0gMDsKKyBmb3IgKGludCBpID0gMDsgaSA8IE47 IGkrKykKKyB7CisgICB2ZWN0X2JbaV0gPSB4ICsgaTsKKyAgIGlmICh2ZWN0X2FbaV0gPiB4KQor ICAgICByZXR1cm4gdmVjdF9hW2ldOworICAgdmVjdF9hW2ldID0geDsKKyAgIHJldCA9IHZlY3Rf YVtpXSArIHZlY3RfYltpXTsKKyB9CisgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18yLmMgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyNjhmNmFlMjQ4 NWQwMjc0ZmQ4NWVhNTNjYzFlNDRlZjRiODRkNWMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMi5jCkBAIC0wLDAgKzEsMjcgQEAK Ky8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0 IHZlY3RfaW50IH0gKi8KKworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAq LworCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZl Y3QiIH0gfSAqLworCisjaW5jbHVkZSA8Y29tcGxleC5oPgorCisjZGVmaW5lIE4gMTAyNAorY29t cGxleCBkb3VibGUgdmVjdF9hW05dOworY29tcGxleCBkb3VibGUgdmVjdF9iW05dOworICAKK2Nv bXBsZXggZG91YmxlIHRlc3Q0KGNvbXBsZXggZG91YmxlIHgpCit7CisgY29tcGxleCBkb3VibGUg cmV0ID0gMDsKKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykKKyB7CisgICB2ZWN0X2JbaV0g Kz0geCArIGk7CisgICBpZiAodmVjdF9hW2ldID09IHgpCisgICAgIHJldHVybiBpOworICAgdmVj dF9hW2ldICs9IHggKiB2ZWN0X2JbaV07CisgICAKKyB9CisgcmV0dXJuIHJldDsKK30KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18zLmMgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LjNjNmQyOGJkMmQ2ZTZlNzk0MTQ2YmFmODllNDNjM2I3MDI5M2I3ZDkKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMy5jCkBAIC0w LDAgKzEsMjAgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZm ZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8KKworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMg Ii1PZmFzdCIgfSAqLworCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtbm90ICJMT09Q IFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8KKwordW5zaWduZWQgdGVzdDQoY2hhciB4LCBjaGFy ICp2ZWN0LCBpbnQgbikKK3sgIAorIHVuc2lnbmVkIHJldCA9IDA7CisgZm9yIChpbnQgaSA9IDA7 IGkgPCBuOyBpKyspCisgeworICAgaWYgKHZlY3RbaV0gPiB4KQorICAgICByZXR1cm4gMTsKKwor ICAgdmVjdFtpXSA9IHg7CisgfQorIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMTZjNTZmYWYzMzA0 NDliZjE5NjliN2U1MWZmMWU5NDI3MGRjODYxCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzQuYwpAQCAtMCwwICsxLDIzIEBACisv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQg dmVjdF9lYXJseV9icmVhayB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2 ZWN0X2ludCB9ICovCisKKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8K KworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiTE9PUCBWRUNUT1JJWkVEIiAi dmVjdCIgfSB9ICovCisKKyNkZWZpbmUgTiAxMDI0Cit1bnNpZ25lZCB2ZWN0W05dOworCit1bnNp Z25lZCB0ZXN0NCh1bnNpZ25lZCB4KQoreworIHVuc2lnbmVkIHJldCA9IDA7CisgZm9yIChpbnQg aSA9IDA7IGkgPCBOOyBpKyspCisgeworICAgaWYgKGkgPiAxNiAmJiB2ZWN0W2ldID4geCkKKyAg ICAgYnJlYWs7CisKKyAgIHZlY3RbaV0gPSB4OworIH0KKyByZXR1cm4gcmV0OworfQpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzUuYyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha181LmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u NGEzNmQ2OTc5ZGIxZmQxZjk3YmEyYTI5MGY3OGFjM2I4NGY2ZGUyNAotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha181LmMKQEAgLTAs MCArMSwyNCBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLworCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAi LU9mYXN0IiB9ICovCisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNU T1JJWkVEIiAidmVjdCIgfSB9ICovCisKKyNkZWZpbmUgTiAxMDI0Cit1bnNpZ25lZCB2ZWN0X2Fb Tl07Cit1bnNpZ25lZCB2ZWN0X2JbTl07CisgCit1bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4KQor eworIHVuc2lnbmVkIHJldCA9IDA7CisgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspCisgewor ICAgdmVjdF9iW2ldID0geCArIGk7CisgICBpZiAodmVjdF9hW2ldID4geCkKKyAgICAgcmV0dXJu IHZlY3RfYVtpXTsKKyAgIHZlY3RfYVtpXSA9IHg7CisgfQorIHJldHVybiByZXQ7Cit9CmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNi5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzYuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li4wOTYzMmQ5YWZkYTdlMDdmMWE4NDE3NTE0ZWY3NzM1NmYwMDA0NWJkCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzYuYwpAQCAt MCwwICsxLDI2IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1yZXF1aXJlLWVm ZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZm ZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25z ICItT2Zhc3QiIH0gKi8KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiTE9P UCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovCisKKyNkZWZpbmUgTiAxMDI0Cit1bnNpZ25lZCB2 ZWN0X2FbTl07Cit1bnNpZ25lZCB2ZWN0X2JbTl07CisgIAordW5zaWduZWQgdGVzdDQodW5zaWdu ZWQgeCkKK3sKKyB1bnNpZ25lZCByZXQgPSAwOworIGZvciAoaW50IGkgPSAwOyBpIDwgKE4vMik7 IGkrPTIpCisgeworICAgdmVjdF9iW2ldID0geCArIGk7CisgICB2ZWN0X2JbaSsxXSA9IHggKyBp KzE7CisgICBpZiAodmVjdF9hW2ldID4geCB8fCB2ZWN0X2FbaSsxXSA+IHgpCisgICAgIGJyZWFr OworICAgdmVjdF9hW2ldICs9IHggKiB2ZWN0X2JbaV07CisgICB2ZWN0X2FbaSsxXSArPSB4ICog dmVjdF9iW2krMV07IAorIH0KKyByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzcuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha183LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTBmZDhiNDI5NTJjNDJm M2QzYTAxNGRhMTAzOTMxY2EzOTQ0MjNkNQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha183LmMKQEAgLTAsMCArMSwyNyBAQAorLyog eyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZl Y3RfZWFybHlfYnJlYWsgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVj dF9pbnQgfSAqLworCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovCisK Ky8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIg fSB9ICovCisKKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisKKyNkZWZpbmUgTiAxMDI0Citjb21wbGV4 IGRvdWJsZSB2ZWN0X2FbTl07Citjb21wbGV4IGRvdWJsZSB2ZWN0X2JbTl07CisgIAorY29tcGxl eCBkb3VibGUgdGVzdDQoY29tcGxleCBkb3VibGUgeCkKK3sKKyBjb21wbGV4IGRvdWJsZSByZXQg PSAwOworIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQorIHsKKyAgIHZlY3RfYltpXSArPSB4 ICsgaTsKKyAgIGlmICh2ZWN0X2FbaV0gPT0geCkKKyAgICAgYnJlYWs7CisgICB2ZWN0X2FbaV0g Kz0geCAqIHZlY3RfYltpXTsKKyAgIAorIH0KKyByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzguYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha184LmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWU3MDZi Mjk1MmNmY2VjZjIwNTQ2YTY3YTczNWI4ZDkwMmNiYjYwNwotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha184LmMKQEAgLTAsMCArMSwy NyBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10 YXJnZXQgdmVjdF9pbnQgfSAqLworCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0 IiB9ICovCisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVE IiAidmVjdCIgfSB9ICovCisKKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisKKyNkZWZpbmUgTiAxMDI0 CitjaGFyIHZlY3RfYVtOXTsKK2NoYXIgdmVjdF9iW05dOworICAKK2NoYXIgdGVzdDQoY2hhciB4 LCBjaGFyICogcmVzdHJpY3QgcmVzKQoreworIGNoYXIgcmV0ID0gMDsKKyBmb3IgKGludCBpID0g MDsgaSA8IE47IGkrKykKKyB7CisgICB2ZWN0X2JbaV0gKz0geCArIGk7CisgICBpZiAodmVjdF9h W2ldID4geCkKKyAgICAgYnJlYWs7CisgICB2ZWN0X2FbaV0gKz0geCAqIHZlY3RfYltpXTsKKyAg IHJlc1tpXSAqPSB2ZWN0X2JbaV07CisgfQorIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfOS5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTBmMDJm M2M3Y2FlZjQ1N2FkYmUxYmU4MDJiYmE1MWNkODE4MzkzCi0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzkuYwpAQCAtMCwwICsxLDI3 IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10 YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRh cmdldCB2ZWN0X2ludCB9ICovCisKKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3Qi IH0gKi8KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiTE9PUCBWRUNUT1JJ WkVEIiAidmVjdCIgfSB9ICovCisKKyNpZm5kZWYgTgorI2RlZmluZSBOIDgwMworI2VuZGlmCit1 bnNpZ25lZCB2ZWN0X2FbTl07Cit1bnNpZ25lZCB2ZWN0X2JbTl07CisgIAordW5zaWduZWQgdGVz dDQodW5zaWduZWQgeCkKK3sKKyB1bnNpZ25lZCByZXQgPSAwOworIGZvciAoaW50IGkgPSAwOyBp IDwgTjsgaSsrKQorIHsKKyAgIHZlY3RfYVtpXSA9IHggKyBpOworICAgaWYgKHZlY3RfYVtpXSA+ IHgpCisgICAgIGJyZWFrOworICAgdmVjdF9hW2ldID0geDsKKyAgIAorIH0KKyByZXR1cm4gcmV0 OworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LXN1cHBvcnRzLmV4cCBi L2djYy90ZXN0c3VpdGUvbGliL3RhcmdldC1zdXBwb3J0cy5leHAKaW5kZXggMmEwNThjNjdjNTM0 NjZmZTQxYjc0OGQzN2FiNjYwYWZkNGUzNDAzZi4uNDliMzA5OWJmNTE4N2IxMjczZmYwNzgwODY5 MmQ2MmYyY2ZkZmE1NSAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LXN1cHBv cnRzLmV4cAorKysgYi9nY2MvdGVzdHN1aXRlL2xpYi90YXJnZXQtc3VwcG9ydHMuZXhwCkBAIC0z NjU5LDYgKzM2NTksMTcgQEAgcHJvYyBjaGVja19lZmZlY3RpdmVfdGFyZ2V0X3ZlY3RfaW50IHsg fSB7CiAJfX1dCiB9CiAKKyMgUmV0dXJuIDEgaWYgdGhlIHRhcmdldCBzdXBwb3J0cyBoYXJkd2Fy ZSB2ZWN0b3JpemF0aW9uIG9mIGVhcmx5IGJyZWFrcywKKyMgMCBvdGhlcndpc2UuCisjCisjIFRo aXMgd29uJ3QgY2hhbmdlIGZvciBkaWZmZXJlbnQgc3VidGFyZ2V0cyBzbyBjYWNoZSB0aGUgcmVz dWx0LgorCitwcm9jIGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRfdmVjdF9lYXJseV9icmVhayB7IH0g eworICAgIHJldHVybiBbY2hlY2tfY2FjaGVkX2VmZmVjdGl2ZV90YXJnZXRfaW5kZXhlZCB2ZWN0 X2Vhcmx5X2JyZWFrIHsKKyAgICAgIGV4cHIgeworCVtpc3RhcmdldCBhYXJjaDY0Ki0qLSpdCisJ fX1dCit9CiAjIFJldHVybiAxIGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgaGFyZHdhcmUgdmVjdG9y aXphdGlvbiBvZiBjb21wbGV4IGFkZGl0aW9ucyBvZgogIyBieXRlLCAwIG90aGVyd2lzZS4KICMK ZGlmZiAtLWdpdCBhL2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uaCBiL2djYy90cmVlLXNjYWxh ci1ldm9sdXRpb24uaAppbmRleCAwZjkwMjA3YmM3MzNkYjNjZjg1OTc5ZDliMGI5NjJhZWZhMDgz MWQ2Li41YWY3ZDJiYmEwZDYyMTk1NzA0YThkNDFlZjZlNjAwMzI3MTY5NzcwIDEwMDY0NAotLS0g YS9nY2MvdHJlZS1zY2FsYXItZXZvbHV0aW9uLmgKKysrIGIvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1 dGlvbi5oCkBAIC0yMyw2ICsyMyw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09Q WUlORzMuICBJZiBub3Qgc2VlCiAKIGV4dGVybiB0cmVlIG51bWJlcl9vZl9sYXRjaF9leGVjdXRp b25zIChjbGFzcyBsb29wICopOwogZXh0ZXJuIGdjb25kICpnZXRfbG9vcF9leGl0X2NvbmRpdGlv biAoY29uc3QgY2xhc3MgbG9vcCAqKTsKK2V4dGVybiBnY29uZCAqZ2V0X2VkZ2VfY29uZGl0aW9u IChlZGdlKTsKIAogZXh0ZXJuIHZvaWQgc2Nldl9pbml0aWFsaXplICh2b2lkKTsKIGV4dGVybiBi b29sIHNjZXZfaW5pdGlhbGl6ZWRfcCAodm9pZCk7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zY2Fs YXItZXZvbHV0aW9uLmNjIGIvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5jYwppbmRleCBmNzUz OThhZmI3YzlmZGY0MmU2OWU5NDBlMjIzMjk0MjE0MzA0OWY2Li4xMDVjZWUzOTI3Nzc0MTUzNTI1 MmZlYTU2YzE3ZjdjMDQ3MDAzY2UxIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1zY2FsYXItZXZvbHV0 aW9uLmNjCisrKyBiL2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uY2MKQEAgLTg4NCw3ICs4ODQs NyBAQCBzY2V2X2Rmczo6YWRkX3RvX2V2b2x1dGlvbiAodHJlZSBjaHJlY19iZWZvcmUsIGVudW0g dHJlZV9jb2RlIGNvZGUsCiAgIHJldHVybiByZXM7CiB9CiAKLQorDAogLyogRm9sbG93IHRoZSBz c2EgZWRnZSBpbnRvIHRoZSBiaW5hcnkgZXhwcmVzc2lvbiBSSFMwIENPREUgUkhTMS4KICAgIFJl dHVybiB0cnVlIGlmIHRoZSBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50IGhhcyBiZWVuIGZv dW5kLiAgKi8KIApAQCAtMTI5Myw4ICsxMjkzLDE1IEBAIHNjZXZfZGZzOjpmb2xsb3dfc3NhX2Vk Z2VfZXhwciAoZ2ltcGxlICphdF9zdG10LCB0cmVlIGV4cHIsCiBnY29uZCAqCiBnZXRfbG9vcF9l eGl0X2NvbmRpdGlvbiAoY29uc3QgY2xhc3MgbG9vcCAqbG9vcCkKIHsKKyAgcmV0dXJuIGdldF9l ZGdlX2NvbmRpdGlvbiAobm9ybWFsX2V4aXQgKGxvb3ApKTsKK30KKworLyogSWYgdGhlIHN0YXRl bWVudCBqdXN0IGJlZm9yZSB0aGUgRVhJVF9FREdFIGNvbnRhaW5zIGEgY29uZGl0aW9uIHRoZW4K KyAgIHJldHVybiB0aGUgY29uZGl0aW9uLCBvdGhlcndpc2UgTlVMTC4gKi8KKworZ2NvbmQgKgor Z2V0X2VkZ2VfY29uZGl0aW9uIChlZGdlIGV4aXRfZWRnZSl7CiAgIGdjb25kICpyZXMgPSBOVUxM OwotICBlZGdlIGV4aXRfZWRnZSA9IHNpbmdsZV9leGl0IChsb29wKTsKIAogICBpZiAoZHVtcF9m aWxlICYmIChkdW1wX2ZsYWdzICYgVERGX1NDRVYpKQogICAgIGZwcmludGYgKGR1bXBfZmlsZSwg IihnZXRfbG9vcF9leGl0X2NvbmRpdGlvbiBcbiAgIik7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS12 ZWN0LWRhdGEtcmVmcy5jYyBiL2djYy90cmVlLXZlY3QtZGF0YS1yZWZzLmNjCmluZGV4IDE4YjBm OTYyNjcwZmZjODZmZTVjYzRlNjMzMDk3ZjNjZTQ1MzQxZmUuLjJhMmYzYjRhY2I1OTA1YTJiYTFm OWQzYjU0YTA4YTU1MDI4Y2Q0NjIgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXZlY3QtZGF0YS1yZWZz LmNjCisrKyBiL2djYy90cmVlLXZlY3QtZGF0YS1yZWZzLmNjCkBAIC01NzAsNiArNTcwLDE0NCBA QCB2ZWN0X2FuYWx5emVfZGF0YV9yZWZfZGVwZW5kZW5jZSAoc3RydWN0IGRhdGFfZGVwZW5kZW5j ZV9yZWxhdGlvbiAqZGRyLAogICByZXR1cm4gb3B0X3Jlc3VsdDo6c3VjY2VzcyAoKTsKIH0KIAor LyogVGhpcyBmdW5jdGlvbiB0cmllcyB0byB2YWxpZGF0ZSB3aGV0aGVyIGFuIGVhcmx5IGJyZWFr IHZlY3Rvcml6YXRpb24KKyAgIGlzIHBvc3NpYmxlIGZvciB0aGUgY3VycmVudCBpbnN0cnVjdGlv biBzZXF1ZW5jZS4gUmV0dXJucyBUcnVlIGkKKyAgIHBvc3NpYmxlLCBvdGhlcndpc2UgRmFsc2Uu CisKKyAgIFJlcXVpcmVtZW50czoKKyAgICAgLSBBbnkgbWVtb3J5IGFjY2VzcyBtdXN0IGJlIHRv IGEgZml4ZWQgc2l6ZSBidWZmZXIuCisgICAgIC0gVGhlcmUgbXVzdCBub3QgYmUgYW55IGxvYWRz IGFuZCBzdG9yZXMgdG8gdGhlIHNhbWUgb2JqZWN0LgorICAgICAtIE11bHRpcGxlIGxvYWRzIGFy ZSBhbGxvd2VkIGFzIGxvbmcgYXMgdGhleSBkb24ndCBhbGlhcy4KKworCisgICBBcmd1bWVudHM6 CisgICAgIC0gTE9PUF9WSU5GTzogbG9vcCBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgbG9v cC4KKyAgICAgLSBDSEFJTjogQ3VycmVudGx5IGRldGVjdGVkIHNlcXVlbmNlIG9mIGluc3RydWN0 aW9ucyB0aGF0IGJlbG9uZworCSAgICAgIHRvIHRoZSBjdXJyZW50IGVhcmx5IGJyZWFrLgorICAg ICAtIExPQURTOiBMaXN0IG9mIGFsbCBsb2FkcyBmb3VuZCBkdXJpbmcgdHJhdmVyc2FsLgorICAg ICAtIEJBU0VTOiBMaXN0IG9mIGFsbCBsb2FkIGRhdGFyZWZlcmVuY2VzIGZvdW5kIGR1cmluZyB0 cmF2ZXJzYWwuCisgICAgIC0gR1NUTVQ6IEN1cnJlbnQgcG9zaXRpb24gdG8gaW5zcGVjdCBmb3Ig dmFsaWRpdHkuICBUaGUgc2VxdWVuY2UKKwkgICAgICB3aWxsIGJlIG1vdmVkIHVwd2FyZHMgZnJv bSB0aGlzIHBvaW50LiAgKi8KKworc3RhdGljIGJvb2wKK3ZhbGlkYXRlX2Vhcmx5X2V4aXRfc3Rt dHMgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgaGFzaF9zZXQ8dHJlZT4gKmNoYWluLAorCQkJ ICAgdmVjPHRyZWU+ICpsb2FkcywgdmVjPGRhdGFfcmVmZXJlbmNlICo+ICpiYXNlcywKKwkJCSAg IGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc3RtdCkKK3sKKyAgaWYgKGdzaV9lbmRfcCAoKmdzdG10 KSkKKyAgICByZXR1cm4gdHJ1ZTsKKworICBnaW1wbGUgKnN0bXQgPSBnc2lfc3RtdCAoKmdzdG10 KTsKKyAgaWYgKGdpbXBsZV9oYXNfb3BzIChzdG10KSkKKyAgICB7CisgICAgICB0cmVlIGRlc3Qg PSBOVUxMX1RSRUU7CisgICAgICAvKiBUcnkgdG8gZmluZCB0aGUgU1NBX05BTUUgYmVpbmcgZGVm aW5lZC4gIEZvciBTdGF0ZW1lbnRzIHdpdGggYW4gTEhTCisJIHVzZSB0aGUgTEhTLCBpZiBub3Qs IGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBhIGNhbGwgaXMgdGhlCisJIHZhbHVl IGJlaW5nIGRlZmluZWQuICBlLmcuIE1BU0tFRF9MT0FEIGV0Yy4gICovCisgICAgICBpZiAoZ2lt cGxlX2hhc19saHMgKHN0bXQpKQorCXsKKwkgIGlmIChpc19naW1wbGVfYXNzaWduIChzdG10KSkK KwkgICAgZGVzdCA9IGdpbXBsZV9hc3NpZ25fbGhzIChzdG10KTsKKwkgIGVsc2UgaWYgKGNvbnN0 IGdjYWxsICpjYWxsID0gZHluX2Nhc3QgPGNvbnN0IGdjYWxsICo+IChzdG10KSkKKwkgICAgZGVz dCA9IGdpbXBsZV9jYWxsX2xocyAoY2FsbCk7CisJfQorICAgICAgZWxzZSBpZiAoY29uc3QgZ2Nh bGwgKmNhbGwgPSBkeW5fY2FzdCA8Y29uc3QgZ2NhbGwgKj4gKHN0bXQpKQorCWRlc3QgPSBnaW1w bGVfYXJnIChjYWxsLCAwKTsKKworICAgICAgLyogRG9uJ3QgbW92ZSB0aGUgc2NhbGFyIGluc3Ry dWN0aW9ucy4gICovCisgICAgICBib29sIG1vdmUKKwk9IGRlc3QgJiYgKFZFQ1RPUl9UWVBFX1Ag KFRSRUVfVFlQRSAoZGVzdCkpCisJCSAgIHx8IFBPSU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKGRl c3QpKSk7CisKKyAgICAgIC8qIElmIHdlIGZvdW5kIHRoZSBkZWZpbmluZyBzdGF0ZW1lbnQgb2Yg YSBzb21ldGhpbmcgdGhhdCdzIHBhcnQgb2YgdGhlCisJIGNoYWluIHRoZW4gZXhwYW5kIHRoZSBj aGFpbiB3aXRoIHRoZSBuZXcgU1NBX1ZBUnMgYmVpbmcgdXNlZC4gICovCisgICAgICBpZiAoY2hh aW4tPmNvbnRhaW5zIChkZXN0KSkKKwl7CisJICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgZ2lt cGxlX251bV9hcmdzIChzdG10KTsgeCsrKQorCSAgICBpZiAoVFJFRV9DT0RFIChnaW1wbGVfYXJn IChzdG10LCB4KSkgPT0gU1NBX05BTUUpCisJICAgICAgY2hhaW4tPmFkZCAoZ2ltcGxlX2FyZyAo c3RtdCwgeCkpOworCisJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCisJICAgICAgZHVtcF9wcmlu dGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwKKwkJCQkiZm91bmQgY2hhaW4gJUciLCBz dG10KTsKKworCSAgbW92ZSA9IGZhbHNlOworCX0KKworICAgICAgc3RtdF92ZWNfaW5mbyBzdG10 X3ZpbmZvID0gbG9vcF92aW5mby0+bG9va3VwX3N0bXQgKHN0bXQpOworICAgICAgaWYgKCFzdG10 X3ZpbmZvKQorCXsKKwkgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCisJICAgICBkdW1wX3ByaW50 Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xvY2F0aW9uLAorCQkJICAgICAg ImVhcmx5IGJyZWFrcyBvbmx5IHN1cHBvcnRlZC4gVW5rbm93biIKKwkJCSAgICAgICIgc3RhdGVt ZW50OiAlRyIsIHN0bXQpOworCSAgIHJldHVybiBmYWxzZTsKKwl9CisKKyAgICAgIGF1dG8gZHJf cmVmID0gU1RNVF9WSU5GT19EQVRBX1JFRiAoc3RtdF92aW5mbyk7CisgICAgICBpZiAoZHJfcmVm KQorCXsKKwkgICAvKiBXZSBjdXJyZW5seSBvbmx5IHN1cHBvcnQgc3RhdGljYWxseSBhbGxvY2F0 ZWQgb2JqZWN0cyBkdWUgdG8KKwkgICAgICBub3QgaGF2aW5nIGZpcnN0LWZhdWx0aW5nIGxvYWRz IHN1cHBvcnQgb3IgcGVlbGluZyBmb3IgYWxpZ25tZW50CisJICAgICAgc3VwcG9ydC4gIENvbXB1 dGUgdGhlIGlzaXplIG9mIHRoZSByZWZlcmVuY2VkIG9iamVjdCAoaXQgY291bGQgYmUKKwkgICAg ICBkeW5hbWljYWxseSBhbGxvY2F0ZWQpLiAgKi8KKwkgICB0cmVlIG9iaiA9IERSX0JBU0VfQURE UkVTUyAoZHJfcmVmKTsKKwkgICBpZiAoIW9iaiB8fCBUUkVFX0NPREUgKG9iaikgIT0gQUREUl9F WFBSKQorCSAgICAgeworCSAgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCisJCSBkdW1wX3By aW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xvY2F0aW9uLAorCQkJCSAg ImVhcmx5IGJyZWFrcyBvbmx5IHN1cHBvcnRlZCBvbiBzdGF0aWNhbGx5IgorCQkJCSAgIiBhbGxv Y2F0ZWQgb2JqZWN0cy5cbiIpOworCSAgICAgICByZXR1cm4gZmFsc2U7CisJICAgICB9CisKKwkg ICB0cmVlIHJlZm9wID0gVFJFRV9PUEVSQU5EIChvYmosIDApOworCSAgIHRyZWUgcmVmYmFzZSA9 IGdldF9iYXNlX2FkZHJlc3MgKHJlZm9wKTsKKwkgICBpZiAoIXJlZmJhc2UgfHwgIURFQ0xfUCAo cmVmYmFzZSkgfHwgIURFQ0xfU0laRSAocmVmYmFzZSkKKwkgICAgICAgfHwgVFJFRV9DT0RFIChE RUNMX1NJWkUgKHJlZmJhc2UpKSAhPSBJTlRFR0VSX0NTVCkKKwkgICAgIHsKKwkgICAgICAgaWYg KGR1bXBfZW5hYmxlZF9wICgpKQorCQkgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElN SVpBVElPTiwgdmVjdF9sb2NhdGlvbiwKKwkJCQkgICJlYXJseSBicmVha3Mgb25seSBzdXBwb3J0 ZWQgb24gc3RhdGljYWxseSIKKwkJCQkgICIgYWxsb2NhdGVkIG9iamVjdHMuXG4iKTsKKwkgICAg ICAgcmV0dXJuIGZhbHNlOworCSAgICAgfQorCisJICAgaWYgKCFtb3ZlICYmIERSX0lTX1JFQUQg KGRyX3JlZikpCisJICAgICB7CisJCWxvYWRzLT5zYWZlX3B1c2ggKGRlc3QpOworCQliYXNlcy0+ c2FmZV9wdXNoIChkcl9yZWYpOworCSAgICAgfQorCSAgIGVsc2UgaWYgKERSX0lTX1dSSVRFIChk cl9yZWYpKQorCSAgICAgeworCQlmb3IgKGF1dG8gZHIgOiBiYXNlcykKKwkJICBpZiAoc2FtZV9k YXRhX3JlZnNfYmFzZV9vYmplY3RzIChkciwgZHJfcmVmKSkKKwkJICAgIHJldHVybiBmYWxzZTsK KwkgICAgIH0KKwl9CisKKyAgICAgIGlmIChtb3ZlKQorCXsKKwkgIGlmIChkdW1wX2VuYWJsZWRf cCAoKSkKKwkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwKKwkJ ICAgICAgICAgICAgICJhbmFseXppbmcgc3RtdCAlRyIsIHN0bXQpOworCisJICBmb3IgKHRyZWUg cmVmIDogbG9hZHMpCisJICAgIGlmIChzdG10X21heV9jbG9iYmVyX3JlZl9wIChzdG10LCByZWYs IHRydWUpKQorCSAgICAgIHsKKwkgICAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkKKwkJICBk dW1wX3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xvY2F0aW9uLAor CQkJCSAgICJlYXJseSBicmVha3Mgbm90IHN1cHBvcnRlZCBhcyBtZW1vcnkgdXNlZCIKKwkJCQkg ICAiIG1heSBhbGlhcy5cbiIpOworCSAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICAgIH0KKwl9 CisgICAgfQorCisgIGdzaV9wcmV2IChnc3RtdCk7CisgIHJldHVybiB2YWxpZGF0ZV9lYXJseV9l eGl0X3N0bXRzIChsb29wX3ZpbmZvLCBjaGFpbiwgbG9hZHMsIGJhc2VzLCBnc3RtdCk7Cit9CisK IC8qIEZ1bmN0aW9uIHZlY3RfYW5hbHl6ZV9kYXRhX3JlZl9kZXBlbmRlbmNlcy4KIAogICAgRXhh bWluZSBhbGwgdGhlIGRhdGEgcmVmZXJlbmNlcyBpbiB0aGUgbG9vcCwgYW5kIG1ha2Ugc3VyZSB0 aGVyZSBkbyBub3QKQEAgLTYxNCw2ICs3NTIsMzIgQEAgdmVjdF9hbmFseXplX2RhdGFfcmVmX2Rl cGVuZGVuY2VzIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sCiAJICByZXR1cm4gcmVzOwogICAg ICAgfQogCisgIC8qIElmIHdlIGhhdmUgZWFybHkgYnJlYWsgc3RhdGVtZW50cyBpbiB0aGUgbG9v cCwgY2hlY2sgdG8gc2VlIGlmIHRoZXkKKyAgICAgYXJlIG9mIGEgZm9ybSB3ZSBjYW4gdmVjdG9y aXplci4gICovCisgIGlmIChMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpCisg ICAgeworICAgICAgaGFzaF9zZXQ8dHJlZT4gY2hhaW47CisgICAgICBhdXRvX3ZlYzx0cmVlPiBs b2FkczsKKyAgICAgIGF1dG9fdmVjPGRhdGFfcmVmZXJlbmNlICo+IGJhc2VzOworCisgICAgICBm b3IgKGdjb25kICpjIDogTE9PUF9WSU5GT19MT09QX0NPTkRTIChsb29wX3ZpbmZvKSkKKwl7CisJ ICBzdG10X3ZlY19pbmZvIGxvb3BfY29uZF9pbmZvID0gbG9vcF92aW5mby0+bG9va3VwX3N0bXQg KGMpOworCSAgaWYgKFNUTVRfVklORk9fVFlQRSAobG9vcF9jb25kX2luZm8pICE9IGxvb3BfZXhp dF9jdHJsX3ZlY19pbmZvX3R5cGUpCisJICAgIGNvbnRpbnVlOworCisJICBnaW1wbGUgKnN0bXQg PSBTVE1UX1ZJTkZPX1NUTVQgKGxvb3BfY29uZF9pbmZvKTsKKwkgIGdpbXBsZV9zdG10X2l0ZXJh dG9yIGdzaSA9IGdzaV9mb3Jfc3RtdCAoc3RtdCk7CisKKwkgIGlmICghdmFsaWRhdGVfZWFybHlf ZXhpdF9zdG10cyAobG9vcF92aW5mbywgJmNoYWluLCAmbG9hZHMsICZiYXNlcywKKwkJCQkJICAm Z3NpKSkKKwkgICAgcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHN0bXQsCisJCQkJIAkg ICAiY2FuJ3Qgc2FmZWx5IGFwcGx5IGNvZGUgbW90aW9uIHRvICIKKwkJCQkJICAgImRlcGVuZGVu Y2llcyBvZiAlRyB0byB2ZWN0b3JpemUgIgorCQkJCQkgICAidGhlIGVhcmx5IGV4aXQuXG4iLCBz dG10KTsKKwl9CisgICAgfQorCiAgIHJldHVybiBvcHRfcmVzdWx0OjpzdWNjZXNzICgpOwogfQog CkBAIC0yMDcyLDcgKzIyMzYsNyBAQCB2ZWN0X2VuaGFuY2VfZGF0YV9yZWZzX2FsaWdubWVudCAo bG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvKQogCiAgIC8qIENoZWNrIGlmIHdlIGNhbiBwb3NzaWJs eSBwZWVsIHRoZSBsb29wLiAgKi8KICAgaWYgKCF2ZWN0X2Nhbl9hZHZhbmNlX2l2c19wIChsb29w X3ZpbmZvKQotICAgICAgfHwgIXNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCAobG9vcCwgc2lu Z2xlX2V4aXQgKGxvb3ApKQorICAgICAgfHwgIXNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCAo bG9vcF92aW5mbywgbm9ybWFsX2V4aXQgKGxvb3ApKQogICAgICAgfHwgbG9vcC0+aW5uZXIpCiAg ICAgZG9fcGVlbGluZyA9IGZhbHNlOwogCmRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0LWdlbmVy aWMuY2MgYi9nY2MvdHJlZS12ZWN0LWdlbmVyaWMuY2MKaW5kZXggNmFkNjM3MmM1NWVlZjk0YTc0 MmE4ZmEzNWU3OWQ2NmFhMjRlMmYzYi4uNjMyZmJmMzhkOTFjMDhmNTRlNzMxZDY5YWI1NmYyYjhj NTU0ZDQ1NiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdC1nZW5lcmljLmNjCisrKyBiL2djYy90 cmVlLXZlY3QtZ2VuZXJpYy5jYwpAQCAtNTAwLDcgKzUwMCw3IEBAIGV4cGFuZF92ZWN0b3JfY29t cGFyaXNvbiAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwgdHJlZSB0eXBlLCB0cmVlIG9wMCwK IAkgICAgfQogCSAgdCA9IGdpbXBsaWZ5X2J1aWxkMSAoZ3NpLCBWSUVXX0NPTlZFUlRfRVhQUiwg dHlwZSwgdCk7CiAJfQotICAgICAgZWxzZQorICAgICAgZWxzZSBpZiAoVFlQRV9WRUNUT1JfU1VC UEFSVFMgKHR5cGUpLmlzX2NvbnN0YW50ICgpKQogCXQgPSBleHBhbmRfdmVjdG9yX3BpZWNld2lz ZSAoZ3NpLCBkb19jb21wYXJlLCB0eXBlLAogCQkJCSAgICAgVFJFRV9UWVBFIChUUkVFX1RZUEUg KG9wMCkpLCBvcDAsIG9wMSwKIAkJCQkgICAgIGNvZGUsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL2dj Yy90cmVlLXZlY3QtbG9vcC1tYW5pcC5jYyBiL2djYy90cmVlLXZlY3QtbG9vcC1tYW5pcC5jYwpp bmRleCAxZDk2MTMwYzk4NWUyZGVmZDE0MWNmZGY2MDIyMjRjNzNiNGI0MWYyLi4yYjEyMWIwYzQ0 ZWE2OWIwYWY5M2Y1MmZkODU5NmY1NDk1ODY3MTI1IDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0 LWxvb3AtbWFuaXAuY2MKKysrIGIvZ2NjL3RyZWUtdmVjdC1sb29wLW1hbmlwLmNjCkBAIC03NzAs NyArNzcwLDcgQEAgdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fcGFydGlhbF92ZWN0b3JzIChjbGFz cyBsb29wICpsb29wLAogICBhZGRfaGVhZGVyX3NlcSAobG9vcCwgaGVhZGVyX3NlcSk7CiAKICAg LyogR2V0IGEgYm9vbGVhbiByZXN1bHQgdGhhdCB0ZWxscyB1cyB3aGV0aGVyIHRvIGl0ZXJhdGUu ICAqLwotICBlZGdlIGV4aXRfZWRnZSA9IHNpbmdsZV9leGl0IChsb29wKTsKKyAgZWRnZSBleGl0 X2VkZ2UgPSBub3JtYWxfZXhpdCAobG9vcCk7CiAgIHRyZWVfY29kZSBjb2RlID0gKGV4aXRfZWRn ZS0+ZmxhZ3MgJiBFREdFX1RSVUVfVkFMVUUpID8gRVFfRVhQUiA6IE5FX0VYUFI7CiAgIHRyZWUg emVyb19jdHJsID0gYnVpbGRfemVyb19jc3QgKFRSRUVfVFlQRSAodGVzdF9jdHJsKSk7CiAgIGdj b25kICpjb25kX3N0bXQgPSBnaW1wbGVfYnVpbGRfY29uZCAoY29kZSwgdGVzdF9jdHJsLCB6ZXJv X2N0cmwsCkBAIC03ODksNyArNzg5LDcgQEAgdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fcGFydGlh bF92ZWN0b3JzIChjbGFzcyBsb29wICpsb29wLAogICBpZiAoZmluYWxfaXYpCiAgICAgewogICAg ICAgZ2Fzc2lnbiAqYXNzaWduID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAoZmluYWxfaXYsIG9yaWdf bml0ZXJzKTsKLSAgICAgIGdzaV9pbnNlcnRfb25fZWRnZV9pbW1lZGlhdGUgKHNpbmdsZV9leGl0 IChsb29wKSwgYXNzaWduKTsKKyAgICAgIGdzaV9pbnNlcnRfb25fZWRnZV9pbW1lZGlhdGUgKGV4 aXRfZWRnZSwgYXNzaWduKTsKICAgICB9CiAKICAgcmV0dXJuIGNvbmRfc3RtdDsKQEAgLTc5OSw3 ICs3OTksOCBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9wYXJ0aWFsX3ZlY3RvcnMgKGNsYXNz IGxvb3AgKmxvb3AsCiAgICBsb29wIGhhbmRsZXMgZXhhY3RseSBWRiBzY2FsYXJzIHBlciBpdGVy YXRpb24uICAqLwogCiBzdGF0aWMgZ2NvbmQgKgotdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fbm9y bWFsIChjbGFzcyBsb29wICpsb29wLCB0cmVlIG5pdGVycywgdHJlZSBzdGVwLAordmVjdF9zZXRf bG9vcF9jb25kaXRpb25fbm9ybWFsIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sCisJCQkJY2xh c3MgbG9vcCAqbG9vcCwgdHJlZSBuaXRlcnMsIHRyZWUgc3RlcCwKIAkJCQl0cmVlIGZpbmFsX2l2 LCBib29sIG5pdGVyc19tYXliZV96ZXJvLAogCQkJCWdpbXBsZV9zdG10X2l0ZXJhdG9yIGxvb3Bf Y29uZF9nc2kpCiB7CkBAIC04MDcsNyArODA4LDcgQEAgdmVjdF9zZXRfbG9vcF9jb25kaXRpb25f bm9ybWFsIChjbGFzcyBsb29wICpsb29wLCB0cmVlIG5pdGVycywgdHJlZSBzdGVwLAogICBnY29u ZCAqY29uZF9zdG10OwogICBnY29uZCAqb3JpZ19jb25kOwogICBlZGdlIHBlID0gbG9vcF9wcmVo ZWFkZXJfZWRnZSAobG9vcCk7Ci0gIGVkZ2UgZXhpdF9lZGdlID0gc2luZ2xlX2V4aXQgKGxvb3Ap OworICBlZGdlIGV4aXRfZWRnZSA9IG5vcm1hbF9leGl0IChsb29wKTsKICAgZ2ltcGxlX3N0bXRf aXRlcmF0b3IgaW5jcl9nc2k7CiAgIGJvb2wgaW5zZXJ0X2FmdGVyOwogICBlbnVtIHRyZWVfY29k ZSBjb2RlOwpAQCAtODcyLDcgKzg3MywxMSBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9ub3Jt YWwgKGNsYXNzIGxvb3AgKmxvb3AsIHRyZWUgbml0ZXJzLCB0cmVlIHN0ZXAsCiAJIEluIGJvdGgg Y2FzZXMgdGhlIGxvb3AgbGltaXQgaXMgTklURVJTIC0gU1RFUC4gICovCiAgICAgICBnaW1wbGVf c2VxIHNlcSA9IE5VTEw7CiAgICAgICBsaW1pdCA9IGZvcmNlX2dpbXBsZV9vcGVyYW5kIChuaXRl cnMsICZzZXEsIHRydWUsIE5VTExfVFJFRSk7Ci0gICAgICBsaW1pdCA9IGdpbXBsZV9idWlsZCAo JnNlcSwgTUlOVVNfRVhQUiwgVFJFRV9UWVBFIChsaW1pdCksIGxpbWl0LCBzdGVwKTsKKyAgICAg IC8qIEZvciBWTEEgbGVhdmUgbGltaXQgPT0gbml0ZXJzLiAgVGhvdWdoIEkgd29uZGVyIGlmIG1h eWJlIEkgc2hvdWxkCisJIGZvcmNlIHBhcnRpYWwgbG9vcHMgaGVyZSBhbmQgdXNlIHZlY3Rfc2V0 X2xvb3BfY29uZGl0aW9uX3BhcnRpYWxfdmVjdG9ycworCSBpbnN0ZWFkLiAgVGhlIHByb2JsZW0g aXMgdGhhdCB0aGUgVkwgY2hlY2sgaXMgdXNlbGVzcyBoZXJlLiAgKi8KKyAgICAgIGlmICghTE9P UF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pICYmICFMT09QX1ZJTkZPX05JVEVSU19L Tk9XTl9QIChsb29wX3ZpbmZvKSkKKwlsaW1pdCA9IGdpbXBsZV9idWlsZCAoJnNlcSwgTUlOVVNf RVhQUiwgVFJFRV9UWVBFIChsaW1pdCksIGxpbWl0LCBzdGVwKTsKICAgICAgIGlmIChzZXEpCiAJ ewogCSAgYmFzaWNfYmxvY2sgbmV3X2JiID0gZ3NpX2luc2VydF9zZXFfb25fZWRnZV9pbW1lZGlh dGUgKHBlLCBzZXEpOwpAQCAtOTA3LDcgKzkxMiw4IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9u X25vcm1hbCAoY2xhc3MgbG9vcCAqbG9vcCwgdHJlZSBuaXRlcnMsIHRyZWUgc3RlcCwKICAgZ3Np X2luc2VydF9iZWZvcmUgKCZsb29wX2NvbmRfZ3NpLCBjb25kX3N0bXQsIEdTSV9TQU1FX1NUTVQp OwogCiAgIC8qIFJlY29yZCB0aGUgbnVtYmVyIG9mIGxhdGNoIGl0ZXJhdGlvbnMuICAqLwotICBp ZiAobGltaXQgPT0gbml0ZXJzKQorICBpZiAobGltaXQgPT0gbml0ZXJzCisgICAgICB8fCBMT09Q X1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpCiAgICAgLyogQ2FzZSBBOiB0aGUgbG9v cCBpdGVyYXRlcyBOSVRFUlMgdGltZXMuICBTdWJ0cmFjdCBvbmUgdG8gZ2V0IHRoZQogICAgICAg IGxhdGNoIGNvdW50LiAgKi8KICAgICBsb29wLT5uYl9pdGVyYXRpb25zID0gZm9sZF9idWlsZDIg KE1JTlVTX0VYUFIsIG5pdGVyc190eXBlLCBuaXRlcnMsCkBAIC05MTgsMTAgKzkyNCwxNyBAQCB2 ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9ub3JtYWwgKGNsYXNzIGxvb3AgKmxvb3AsIHRyZWUgbml0 ZXJzLCB0cmVlIHN0ZXAsCiAgICAgbG9vcC0+bmJfaXRlcmF0aW9ucyA9IGZvbGRfYnVpbGQyIChU UlVOQ19ESVZfRVhQUiwgbml0ZXJzX3R5cGUsCiAJCQkJICAgICAgIGxpbWl0LCBzdGVwKTsKIAot ICBpZiAoZmluYWxfaXYpCisgIGF1dG9fdmVjPGVkZ2U+IGV4aXRzID0gZ2V0X2xvb3BfZXhpdF9l ZGdlcyAobG9vcCk7CisgIC8qIEZvciBtdWx0aXBsZSBleGl0cyB3ZSd2ZSBhbHJlYWR5IG1haW50 YWluZWQgTENTU0EgZm9ybSBhbmQgaGFuZGxlZAorICAgICB0aGUgc2NhbGFyIGl0ZXJhdGlvbiB1 cGRhdGUgaW4gdGhlIGNvZGUgdGhhdCBkZWFscyB3aXRoIHRoZSBtZXJnZQorICAgICBibG9jayBh bmQgaXRzIHVwZGF0ZWQgZ3VhcmQuICBJIGNvdWxkIG1vdmUgdGhhdCBjb2RlIGhlcmUgaW5zdGVh ZAorICAgICBvZiBpbiB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfZWFybHlfYnJlYWsgYnV0IEkgaGF2 ZSB0byBzdGlsbCBkZWFsCisgICAgIHdpdGggdGhlIHVwZGF0ZXMgdG8gdGhlIGNvdW50ZXIgYGlg LiAgU28gZm9yIG5vdyBJJ2xsIGtlZXAgdGhlbQorICAgICB0b2dldGhlci4gICovCisgIGlmIChm aW5hbF9pdiAmJiBleGl0cy5sZW5ndGggKCkgPT0gMSkKICAgICB7CiAgICAgICBnYXNzaWduICph c3NpZ247Ci0gICAgICBlZGdlIGV4aXQgPSBzaW5nbGVfZXhpdCAobG9vcCk7CisgICAgICBlZGdl IGV4aXQgPSBub3JtYWxfZXhpdCAobG9vcCk7CiAgICAgICBnY2NfYXNzZXJ0IChzaW5nbGVfcHJl ZF9wIChleGl0LT5kZXN0KSk7CiAgICAgICB0cmVlIHBoaV9kZXN0CiAJPSBpbnRlZ2VyX3plcm9w IChpbml0KSA/IGZpbmFsX2l2IDogY29weV9zc2FfbmFtZSAoaW5keF9hZnRlcl9pbmNyKTsKQEAg LTk3MiwxMyArOTg1LDE1IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uIChjbGFzcyBsb29wICps b29wLCBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sCiAgIGdjb25kICpvcmlnX2NvbmQgPSBnZXRf bG9vcF9leGl0X2NvbmRpdGlvbiAobG9vcCk7CiAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGxvb3Bf Y29uZF9nc2kgPSBnc2lfZm9yX3N0bXQgKG9yaWdfY29uZCk7CiAKLSAgaWYgKGxvb3BfdmluZm8g JiYgTE9PUF9WSU5GT19VU0lOR19QQVJUSUFMX1ZFQ1RPUlNfUCAobG9vcF92aW5mbykpCisgIGlm IChsb29wX3ZpbmZvCisgICAgICAmJiBMT09QX1ZJTkZPX1VTSU5HX1BBUlRJQUxfVkVDVE9SU19Q IChsb29wX3ZpbmZvKSkKICAgICBjb25kX3N0bXQgPSB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9w YXJ0aWFsX3ZlY3RvcnMgKGxvb3AsIGxvb3BfdmluZm8sCiAJCQkJCQkJIG5pdGVycywgZmluYWxf aXYsCiAJCQkJCQkJIG5pdGVyc19tYXliZV96ZXJvLAogCQkJCQkJCSBsb29wX2NvbmRfZ3NpKTsK ICAgZWxzZQotICAgIGNvbmRfc3RtdCA9IHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX25vcm1hbCAo bG9vcCwgbml0ZXJzLCBzdGVwLCBmaW5hbF9pdiwKKyAgICBjb25kX3N0bXQgPSB2ZWN0X3NldF9s b29wX2NvbmRpdGlvbl9ub3JtYWwgKGxvb3BfdmluZm8sIGxvb3AsIG5pdGVycywKKwkJCQkJCXN0 ZXAsIGZpbmFsX2l2LAogCQkJCQkJbml0ZXJzX21heWJlX3plcm8sCiAJCQkJCQlsb29wX2NvbmRf Z3NpKTsKIApAQCAtMTA2Niw3ICsxMDgxLDcgQEAgc2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3Bf dG9fZWRnZV9jZmcgKGNsYXNzIGxvb3AgKmxvb3AsCiAgIGVkZ2UgZXhpdCwgbmV3X2V4aXQ7CiAg IGJvb2wgZHVwbGljYXRlX291dGVyX2xvb3AgPSBmYWxzZTsKIAotICBleGl0ID0gc2luZ2xlX2V4 aXQgKGxvb3ApOworICBleGl0ID0gbm9ybWFsX2V4aXQgKGxvb3ApOwogICBhdF9leGl0ID0gKGUg PT0gZXhpdCk7CiAgIGlmICghYXRfZXhpdCAmJiBlICE9IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxv b3ApKQogICAgIHJldHVybiBOVUxMOwpAQCAtMTEwNCwxMSArMTExOSwxMSBAQCBzbHBlZWxfdHJl ZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZyAoY2xhc3MgbG9vcCAqbG9vcCwKICAgYmJzWzBd ID0gcHJlaGVhZGVyOwogICBuZXdfYmJzID0gWE5FV1ZFQyAoYmFzaWNfYmxvY2ssIHNjYWxhcl9s b29wLT5udW1fbm9kZXMgKyAxKTsKIAotICBleGl0ID0gc2luZ2xlX2V4aXQgKHNjYWxhcl9sb29w KTsKKyAgZXhpdCA9IG5vcm1hbF9leGl0IChzY2FsYXJfbG9vcCk7CiAgIGNvcHlfYmJzIChiYnMs IHNjYWxhcl9sb29wLT5udW1fbm9kZXMgKyAxLCBuZXdfYmJzLAogCSAgICAmZXhpdCwgMSwgJm5l d19leGl0LCBOVUxMLAogCSAgICBhdF9leGl0ID8gbG9vcC0+bGF0Y2ggOiBlLT5zcmMsIHRydWUp OwotICBleGl0ID0gc2luZ2xlX2V4aXQgKGxvb3ApOworICBleGl0ID0gbm9ybWFsX2V4aXQgKGxv b3ApOwogICBiYXNpY19ibG9jayBuZXdfcHJlaGVhZGVyID0gbmV3X2Jic1swXTsKIAogICAvKiBC ZWZvcmUgaW5zdGFsbGluZyBQSEkgYXJndW1lbnRzIG1ha2Ugc3VyZSB0aGF0IHRoZSBlZGdlcwpA QCAtMTE3NiwxMCArMTE5MSwzMCBAQCBzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdl X2NmZyAoY2xhc3MgbG9vcCAqbG9vcCwKIAkgICAgICBhZGRfcGhpX2FyZyAocGhpLCBvcmlnX2Fy ZywgbmV3X2V4aXQsIG9yaWdfbG9jdXMpOwogCSAgICB9CiAJfQorCisgICAgICAvKiBpZiBoYXZl IG11bHRpcGxlIGV4aXN0LCB3ZSBub3cgbmVlZCB0byBwb2ludCB0aGUgYWRkaXRpb25hbCBleGl0 cworCSBmcm9tIHRoZSBvbGQgbG9vcCB0byB0aGUgbG9vcCBwcmUtaGVhZGVyIG9mIHRoZSBuZXcg Y29waWVkIGxvb3AuCisJIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgc2ltcGxlIGVhcmx5IGJy ZWFrIHZlY3Rvcml6YXRpb24gc28gYWxsCisJIGFkZGl0aW9uYWwgZXhpdHMgbXVzdCBleGl0IHRo ZSBsb29wLiBBZGRpdGlvbmFsbHkgd2UgY2FuIG9ubHkgcGxhY2UKKwkgY29waWVzIGF0IHRoZSBl bmQuICBpLmUuIHdlIGNhbm5vdCBkbyBwcm9sb2d1ZSBwZWVsaW5nLiAgKi8KKyAgICAgIGF1dG9f dmVjPGVkZ2U+IGV4aXRzID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7CisgICAgICBib29s IG11bHRpcGxlX2V4aXRzX3AgPSBleGl0cy5sZW5ndGggKCkgPiAxOworCisgICAgICBmb3IgKHVu c2lnbmVkIGkgPSAxOyBpIDwgZXhpdHMubGVuZ3RoICgpOyBpKyspCisJeworCSAgcmVkaXJlY3Rf ZWRnZV9hbmRfYnJhbmNoIChleGl0c1tpXSwgbmV3X3ByZWhlYWRlcik7CisJICBmbHVzaF9wZW5k aW5nX3N0bXRzIChleGl0c1tpXSk7CisJfQorCisgICAgICAvKiBNYWluIGV4aXQgbXVzdCBiZSB0 aGUgbGFzdCB0byBiZSByZXdyaXR0ZW4gYXMgaXQncyB0aGUgZmlyc3QgcGhpIG5vZGUKKwkgZW50 cnkuICBUaGUgcmVzdCBhcmUgaW4gYXJyYXkgb3JkZXIuICAqLwogICAgICAgcmVkaXJlY3RfZWRn ZV9hbmRfYnJhbmNoX2ZvcmNlIChlLCBuZXdfcHJlaGVhZGVyKTsKICAgICAgIGZsdXNoX3BlbmRp bmdfc3RtdHMgKGUpOworCiAgICAgICBzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlO QVRPUlMsIG5ld19wcmVoZWFkZXIsIGUtPnNyYyk7Ci0gICAgICBpZiAod2FzX2ltbV9kb20gfHwg ZHVwbGljYXRlX291dGVyX2xvb3ApCisKKyAgICAgIGF1dG9fdmVjPGVkZ2U+IG5ld19leGl0cyA9 IGdldF9sb29wX2V4aXRfZWRnZXMgKG5ld19sb29wKTsKKyAgICAgIGlmICgod2FzX2ltbV9kb20g fHwgZHVwbGljYXRlX291dGVyX2xvb3ApICYmICFtdWx0aXBsZV9leGl0c19wKQogCXNldF9pbW1l ZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgZXhpdF9kZXN0LCBuZXdfZXhpdC0+c3Jj KTsKIAogICAgICAgLyogQW5kIHJlbW92ZSB0aGUgbm9uLW5lY2Vzc2FyeSBmb3J3YXJkZXIgYWdh aW4uICBLZWVwIHRoZSBvdGhlcgpAQCAtMTE4OSw2ICsxMjI0LDIzIEBAIHNscGVlbF90cmVlX2R1 cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnIChjbGFzcyBsb29wICpsb29wLAogICAgICAgZGVsZXRl X2Jhc2ljX2Jsb2NrIChwcmVoZWFkZXIpOwogICAgICAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3Ig KENESV9ET01JTkFUT1JTLCBzY2FsYXJfbG9vcC0+aGVhZGVyLAogCQkJICAgICAgIGxvb3BfcHJl aGVhZGVyX2VkZ2UgKHNjYWxhcl9sb29wKS0+c3JjKTsKKworICAgICAgLyogRmluYWxseSBhZnRl ciB3aXJpbmcgdGhlIG5ldyBlcGlsb2d1ZSB3ZSBuZWVkIHRvIHVwZGF0ZSBpdHMgbWFpbiBleGl0 CisJIHRvIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBleGl0IHdlIHJlY29yZGVkLiAgT3RoZXIgZXhp dHMgYXJlIGFscmVhZHkKKwkgY29ycmVjdC4gICovCisgICAgICBpZiAobXVsdGlwbGVfZXhpdHNf cCkKKwl7CisJICBhdXRvX3ZlYzxiYXNpY19ibG9jaz4gZG9tczsKKwkgIGZvciAoZWRnZSBlIDog ZXhpdHMpCisJICAgIGRvbXMuc2FmZV9wdXNoIChlLT5kZXN0KTsKKwkgIGZvciAoZWRnZSBlIDog bmV3X2V4aXRzKQorCSAgICBkb21zLnNhZmVfcHVzaCAoZS0+ZGVzdCk7CisJICBkb21zLnNhZmVf cHVzaCAoZXhpdF9kZXN0KTsKKwkgIC8qIExpa2VseSBhIGZhbGwtdGhyb3VnaCBlZGdlLCBzbyB1 cGRhdGUgaWYgbmVlZGVkLiAgKi8KKwkgIGlmIChzaW5nbGVfc3VjY19wIChleGl0X2Rlc3QpKQor CSAgICBkb21zLnNhZmVfcHVzaCAoc2luZ2xlX3N1Y2MgKGV4aXRfZGVzdCkpOworCSAgaXRlcmF0 ZV9maXhfZG9taW5hdG9ycyAoQ0RJX0RPTUlOQVRPUlMsIGRvbXMsIGZhbHNlKTsKKwl9CiAgICAg fQogICBlbHNlIC8qIEFkZCB0aGUgY29weSBhdCBlbnRyeS4gICovCiAgICAgewpAQCAtMTMxMCwy MCArMTM2MiwyNCBAQCBzbHBlZWxfYWRkX2xvb3BfZ3VhcmQgKGJhc2ljX2Jsb2NrIGd1YXJkX2Ji LCB0cmVlIGNvbmQsCiAgKi8KIAogYm9vbAotc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChj b25zdCBjbGFzcyBsb29wICpsb29wLCBjb25zdF9lZGdlIGUpCitzbHBlZWxfY2FuX2R1cGxpY2F0 ZV9sb29wX3AgKGNvbnN0IGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgY29uc3RfZWRnZSBlKQog ewotICBlZGdlIGV4aXRfZSA9IHNpbmdsZV9leGl0IChsb29wKTsKKyAgY2xhc3MgbG9vcCAqbG9v cCA9IExPT1BfVklORk9fTE9PUCAobG9vcF92aW5mbyk7CisgIGVkZ2UgZXhpdF9lID0gbm9ybWFs X2V4aXQgKGxvb3ApOwogICBlZGdlIGVudHJ5X2UgPSBsb29wX3ByZWhlYWRlcl9lZGdlIChsb29w KTsKICAgZ2NvbmQgKm9yaWdfY29uZCA9IGdldF9sb29wX2V4aXRfY29uZGl0aW9uIChsb29wKTsK ICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgbG9vcF9leGl0X2dzaSA9IGdzaV9sYXN0X2JiIChleGl0 X2UtPnNyYyk7CiAgIHVuc2lnbmVkIGludCBudW1fYmIgPSBsb29wLT5pbm5lcj8gNSA6IDI7CiAK KyAgaWYgKExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkKKyAgICBudW1fYmIg Kz0gMTsKKwogICAvKiBBbGwgbG9vcHMgaGF2ZSBhbiBvdXRlciBzY29wZTsgdGhlIG9ubHkgY2Fz ZSBsb29wLT5vdXRlciBpcyBOVUxMIGlzIGZvcgogICAgICB0aGUgZnVuY3Rpb24gaXRzZWxmLiAg Ki8KICAgaWYgKCFsb29wX291dGVyIChsb29wKQogICAgICAgfHwgbG9vcC0+bnVtX25vZGVzICE9 IG51bV9iYgogICAgICAgfHwgIWVtcHR5X2Jsb2NrX3AgKGxvb3AtPmxhdGNoKQotICAgICAgfHwg IXNpbmdsZV9leGl0IChsb29wKQorICAgICAgfHwgKCFzaW5nbGVfZXhpdCAobG9vcCkgJiYgIUxP T1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkKICAgICAgIC8qIFZlcmlmeSB0aGF0 IG5ldyBsb29wIGV4aXQgY29uZGl0aW9uIGNhbiBiZSB0cml2aWFsbHkgbW9kaWZpZWQuICAqLwog ICAgICAgfHwgKCFvcmlnX2NvbmQgfHwgb3JpZ19jb25kICE9IGdzaV9zdG10IChsb29wX2V4aXRf Z3NpKSkKICAgICAgIHx8IChlICE9IGV4aXRfZSAmJiBlICE9IGVudHJ5X2UpKQpAQCAtMTUyOCw2 ICsxNTg0LDEyIEBAIHZlY3RfdXBkYXRlX2l2c19hZnRlcl92ZWN0b3JpemVyIChsb29wX3ZlY19p bmZvIGxvb3BfdmluZm8sCiAgIGdwaGlfaXRlcmF0b3IgZ3NpLCBnc2kxOwogICBjbGFzcyBsb29w ICpsb29wID0gTE9PUF9WSU5GT19MT09QIChsb29wX3ZpbmZvKTsKICAgYmFzaWNfYmxvY2sgdXBk YXRlX2JiID0gdXBkYXRlX2UtPmRlc3Q7CisKKyAgLyogRm9yIGVhcmx5IGV4aXRzIHdlJ2xsIHVw ZGF0ZSB0aGUgSVZzIGluCisgICAgIHZlY3RfdXBkYXRlX2l2c19hZnRlcl9lYXJseV9icmVhay4g ICovCisgIGlmIChMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpCisgICAgcmV0 dXJuOworCiAgIGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBzaW5nbGVfZXhpdCAobG9vcCktPmRlc3Q7 CiAKICAgLyogTWFrZSBzdXJlIHRoZXJlIGV4aXN0cyBhIHNpbmdsZS1wcmVkZWNlc3NvciBleGl0 IGJiOiAgKi8KQEAgLTE2MTMsNiArMTY3NSwxODYgQEAgdmVjdF91cGRhdGVfaXZzX2FmdGVyX3Zl Y3Rvcml6ZXIgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywKICAgICAgIC8qIEZpeCBwaGkgZXhw cmVzc2lvbnMgaW4gdGhlIHN1Y2Nlc3NvciBiYi4gICovCiAgICAgICBhZGp1c3RfcGhpX2FuZF9k ZWJ1Z19zdG10cyAocGhpMSwgdXBkYXRlX2UsIG5pX25hbWUpOwogICAgIH0KKyAgcmV0dXJuOwor fQorCisvKiAgIEZ1bmN0aW9uIHZlY3RfdXBkYXRlX2l2c19hZnRlcl9lYXJseV9icmVhay4KKwor ICAgICAiQWR2YW5jZSIgdGhlIGluZHVjdGlvbiB2YXJpYWJsZXMgb2YgTE9PUCB0byB0aGUgdmFs dWUgdGhleSBzaG91bGQgdGFrZQorICAgICBhZnRlciB0aGUgZXhlY3V0aW9uIG9mIExPT1AuICBU aGlzIGlzIGN1cnJlbnRseSBuZWNlc3NhcnkgYmVjYXVzZSB0aGUKKyAgICAgdmVjdG9yaXplciBk b2VzIG5vdCBoYW5kbGUgaW5kdWN0aW9uIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGFmdGVyIHRo ZQorICAgICBsb29wLiAgU3VjaCBhIHNpdHVhdGlvbiBvY2N1cnMgd2hlbiB0aGUgbGFzdCBpdGVy YXRpb25zIG9mIExPT1AgYXJlCisgICAgIHBlZWxlZCwgYmVjYXVzZSBvZiB0aGUgZWFybHkgZXhp dC4gIFdpdGggYW4gZWFybHkgZXhpdCB3ZSBhbHdheXMgcGVlbCB0aGUKKyAgICAgbG9vcC4KKwor ICAgICBJbnB1dDoKKyAgICAgLSBMT09QX1ZJTkZPIC0gYSBsb29wIGluZm8gc3RydWN0dXJlIGZv ciB0aGUgbG9vcCB0aGF0IGlzIGdvaW5nIHRvIGJlCisJCSAgICB2ZWN0b3JpemVkLiBUaGUgbGFz dCBmZXcgaXRlcmF0aW9ucyBvZiBMT09QIHdlcmUgcGVlbGVkLgorICAgICAtIExPT1AgLSBhIGxv b3AgdGhhdCBpcyBnb2luZyB0byBiZSB2ZWN0b3JpemVkLiBUaGUgbGFzdCBmZXcgaXRlcmF0aW9u cworCSAgICAgIG9mIExPT1Agd2VyZSBwZWVsZWQuCisgICAgIC0gVkYgLSBUaGUgbG9vcCB2ZWN0 b3JpemF0aW9uIGZhY3Rvci4KKyAgICAgLSBOSVRFUlNfT1JJRyAtIHRoZSBudW1iZXIgb2YgaXRl cmF0aW9ucyB0aGF0IExPT1AgZXhlY3V0ZXMgKGJlZm9yZSBpdCBpcworCQkgICAgIHZlY3Rvcml6 ZWQpLiBpLmUsIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGl2cyBzaG91bGQgYmUKKwkJICAgICBi dW1wZWQuCisgICAgIC0gTklURVJTX1ZFQ1RPUiAtIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0 aGF0IHRoZSB2ZWN0b3IgTE9PUCBleGVjdXRlcy4KKyAgICAgLSBVUERBVEVfRSAtIGEgc3VjY2Vz c29yIGVkZ2Ugb2YgTE9PUC0+ZXhpdCB0aGF0IGlzIG9uIHRoZSAob25seSkgcGF0aAorCQkgIGNv bWluZyBvdXQgZnJvbSBMT09QIG9uIHdoaWNoIHRoZXJlIGFyZSB1c2VzIG9mIHRoZSBMT09QIGl2 cworCQkgICh0aGlzIGlzIHRoZSBwYXRoIGZyb20gTE9PUC0+ZXhpdCB0byBlcGlsb2dfbG9vcC0+ cHJlaGVhZGVyKS4KKworCQkgIFRoZSBuZXcgZGVmaW5pdGlvbnMgb2YgdGhlIGl2cyBhcmUgcGxh Y2VkIGluIExPT1AtPmV4aXQuCisJCSAgVGhlIHBoaSBhcmdzIGFzc29jaWF0ZWQgd2l0aCB0aGUg ZWRnZSBVUERBVEVfRSBpbiB0aGUgYmIKKwkJICBVUERBVEVfRS0+ZGVzdCBhcmUgdXBkYXRlZCBh Y2NvcmRpbmdseS4KKworICAgICBPdXRwdXQ6CisgICAgICAgLSBJZiBhdmFpbGFibGUsIHRoZSBM Q1NTQSBwaGkgbm9kZSBmb3IgdGhlIGxvb3AgSVYgdGVtcC4KKworICAgICBBc3N1bXB0aW9uIDE6 IExpa2UgdGhlIHJlc3Qgb2YgdGhlIHZlY3Rvcml6ZXIsIHRoaXMgZnVuY3Rpb24gYXNzdW1lcwor ICAgICBhIHNpbmdsZSBsb29wIGV4aXQgdGhhdCBoYXMgYSBzaW5nbGUgcHJlZGVjZXNzb3IuCisK KyAgICAgQXNzdW1wdGlvbiAyOiBUaGUgcGhpIG5vZGVzIGluIHRoZSBMT09QIGhlYWRlciBhbmQg aW4gdXBkYXRlX2JiIGFyZQorICAgICBvcmdhbml6ZWQgaW4gdGhlIHNhbWUgb3JkZXIuCisKKyAg ICAgQXNzdW1wdGlvbiAzOiBUaGUgYWNjZXNzIGZ1bmN0aW9uIG9mIHRoZSBpdnMgaXMgc2ltcGxl IGVub3VnaCAoc2VlCisgICAgIHZlY3RfY2FuX2FkdmFuY2VfaXZzX3ApLiAgVGhpcyBhc3N1bXB0 aW9uIHdpbGwgYmUgcmVsYXhlZCBpbiB0aGUgZnV0dXJlLgorCisgICAgIEFzc3VtcHRpb24gNDog RXhhY3RseSBvbmUgb2YgdGhlIHN1Y2Nlc3NvcnMgb2YgTE9PUCBleGl0LWJiIGlzIG9uIGEgcGF0 aAorICAgICBjb21pbmcgb3V0IG9mIExPT1Agb24gd2hpY2ggdGhlIGl2cyBvZiBMT09QIGFyZSB1 c2VkICh0aGlzIGlzIHRoZSBwYXRoCisgICAgIHRoYXQgbGVhZHMgdG8gdGhlIGVwaWxvZyBsb29w OyBvdGhlciBwYXRocyBza2lwIHRoZSBlcGlsb2cgbG9vcCkuICBUaGlzCisgICAgIHBhdGggc3Rh cnRzIHdpdGggdGhlIGVkZ2UgVVBEQVRFX0UsIGFuZCBpdHMgZGVzdGluYXRpb24gKGRlbm90ZWQg dXBkYXRlX2JiKQorICAgICBuZWVkcyB0byBoYXZlIGl0cyBwaGlzIHVwZGF0ZWQuCisgKi8KKwor c3RhdGljIHRyZWUKK3ZlY3RfdXBkYXRlX2l2c19hZnRlcl9lYXJseV9icmVhayAobG9vcF92ZWNf aW5mbyBsb29wX3ZpbmZvLCBjbGFzcyBsb29wICosCisJCQkJICAgcG9seV9pbnQ2NCB2ZiwgdHJl ZSBuaXRlcnNfb3JpZywKKwkJCQkgICB0cmVlIG5pdGVyc192ZWN0b3IsIGVkZ2UgdXBkYXRlX2Up Cit7CisgIGdwaGlfaXRlcmF0b3IgZ3NpLCBnc2kxOworICB0cmVlIG5pX25hbWUsIGl2dG1wID0g TlVMTDsKKyAgY2xhc3MgbG9vcCAqbG9vcCA9IExPT1BfVklORk9fTE9PUCAobG9vcF92aW5mbyk7 CisgIGJhc2ljX2Jsb2NrIHVwZGF0ZV9iYiA9IHVwZGF0ZV9lLT5kZXN0OworICBhdXRvX3ZlYzxl ZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGxvb3ApOworCisgIGJhc2ljX2Jsb2Nr IGV4aXRfYmIgPSBleGl0c1swXS0+ZGVzdDsKKworICBpZiAoIUxPT1BfVklORk9fRUFSTFlfQlJF QUtTIChsb29wX3ZpbmZvKSkKKyAgICByZXR1cm4gTlVMTDsKKworICBmb3IgKGdzaSA9IGdzaV9z dGFydF9waGlzIChsb29wLT5oZWFkZXIpLCBnc2kxID0gZ3NpX3N0YXJ0X3BoaXMgKHVwZGF0ZV9i Yik7CisgICAgICAgIWdzaV9lbmRfcCAoZ3NpKSAmJiAhZ3NpX2VuZF9wIChnc2kxKTsKKyAgICAg ICBnc2lfbmV4dCAoJmdzaSksIGdzaV9uZXh0ICgmZ3NpMSkpCisgICAgeworICAgICAgdHJlZSBp bml0X2V4cHI7CisgICAgICB0cmVlIHN0ZXBfZXhwcjsKKyAgICAgIHRyZWUgdHlwZTsKKyAgICAg IHRyZWUgdmFyLCBuaTsKKyAgICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGxhc3RfZ3NpOworCisg ICAgICBncGhpICpwaGkgPSBnc2kxLnBoaSAoKTsKKyAgICAgIHRyZWUgcGhpX3NzYSA9IFBISV9B UkdfREVGX0ZST01fRURHRSAocGhpLCBsb29wX3ByZWhlYWRlcl9lZGdlIChsb29wKSk7CisgICAg ICBncGhpICpwaGkxID0gYXNfYSA8Z3BoaSAqPiAoU1NBX05BTUVfREVGX1NUTVQgKHBoaV9zc2Ep KTsKKyAgICAgIHN0bXRfdmVjX2luZm8gcGhpX2luZm8gPSBsb29wX3ZpbmZvLT5sb29rdXBfc3Rt dCAoZ3NpLnBoaSAoKSk7CisgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCisJZHVtcF9wcmlu dGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwKKwkJCSAidmVjdF91cGRhdGVfaXZzX2Fm dGVyX2Vhcmx5X2JyZWFrOiBwaGk6ICVHIiwKKwkJCSAoZ2ltcGxlICopcGhpKTsKKworICAgICAg LyogU2tpcCByZWR1Y3Rpb24gYW5kIHZpcnR1YWwgcGhpcy4gICovCisgICAgICBpZiAoIWl2X3Bo aV9wIChwaGlfaW5mbykpCisJeworCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQorCSAgICBkdW1w X3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLAorCQkJICAgICAicmVkdWMgb3Ig dmlydHVhbCBwaGkuIHNraXAuXG4iKTsKKwkgIGNvbnRpbnVlOworCX0KKworICAgICAgLyogRm9y IG11bHRpcGxlIGV4aXRzIHdoZXJlIHdlIGhhbmRsZSBlYXJseSBleGl0cyB3ZSBuZWVkIHRvIGNh cnJ5IG9uCisJIHdpdGggdGhlIHByZXZpb3VzIElWIGFzIGxvb3AgaXRlcmF0aW9uIHdhcyBub3Qg ZG9uZSBiZWNhdXNlIHdlIGV4aXRlZAorCSBlYXJseS4gIEFzIHN1Y2gganVzdCBncmFiIHRoZSBv cmlnaW5hbCBJVi4gICovCisgICAgICBpZiAoU1RNVF9WSU5GT19UWVBFIChwaGlfaW5mbykgIT0g dW5kZWZfdmVjX2luZm9fdHlwZSkKKwl7CisJICB0eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfcGhp X3Jlc3VsdCAocGhpKSk7CisJICBzdGVwX2V4cHIgPSBTVE1UX1ZJTkZPX0xPT1BfUEhJX0VWT0xV VElPTl9QQVJUIChwaGlfaW5mbyk7CisJICBzdGVwX2V4cHIgPSB1bnNoYXJlX2V4cHIgKHN0ZXBf ZXhwcik7CisKKwkgIC8qIFdlIHByZXZpb3VzbHkgZ2VuZXJhdGVkIHRoZSBuZXcgbWVyZ2VkIHBo aSBpbiB0aGUgc2FtZSBCQiBhcyB0aGUKKwkgICAgIGd1YXJkLiAgU28gdXNlIHRoYXQgdG8gcGVy Zm9ybSB0aGUgc2NhbGluZyBvbiByYXRoZXIgdGhhbiB0aGUKKwkgICAgIG5vcm1hbCBsb29wIHBo aSB3aGljaCBkb24ndCB0YWtlIHRoZSBlYXJseSBicmVha3MgaW50byBhY2NvdW50LiAgKi8KKwkg IGluaXRfZXhwciA9IGdpbXBsZV9waGlfcmVzdWx0IChwaGkxKTsgLy9QSElfQVJHX0RFRl9GUk9N X0VER0UgKHBoaTEsIGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApKTsKKworCSAgbmkgPSBmb2xk X2J1aWxkMiAoTVVMVF9FWFBSLCBUUkVFX1RZUEUgKHN0ZXBfZXhwciksCisJCQkgICAgZm9sZF9j b252ZXJ0IChUUkVFX1RZUEUgKHN0ZXBfZXhwciksIGluaXRfZXhwciksCisJCQkgICAgYnVpbGRf aW50X2NzdCAoVFJFRV9UWVBFIChzdGVwX2V4cHIpLCB2ZikpOworCisJICB2YXIgPSBjcmVhdGVf dG1wX3ZhciAodHlwZSwgInRtcCIpOworCisJICBsYXN0X2dzaSA9IGdzaV9sYXN0X2JiIChleGl0 X2JiKTsKKwkgIGdpbXBsZV9zZXEgbmV3X3N0bXRzID0gTlVMTDsKKwkgIG5pX25hbWUgPSBmb3Jj ZV9naW1wbGVfb3BlcmFuZCAobmksICZuZXdfc3RtdHMsIGZhbHNlLCB2YXIpOworCSAgLyogRXhp dF9iYiBzaG91bGRuJ3QgYmUgZW1wdHkuICAqLworCSAgaWYgKCFnc2lfZW5kX3AgKGxhc3RfZ3Np KSkKKwkgICAgZ3NpX2luc2VydF9zZXFfYWZ0ZXIgKCZsYXN0X2dzaSwgbmV3X3N0bXRzLCBHU0lf U0FNRV9TVE1UKTsKKwkgIGVsc2UKKwkgICAgZ3NpX2luc2VydF9zZXFfYmVmb3JlICgmbGFzdF9n c2ksIG5ld19zdG10cywgR1NJX1NBTUVfU1RNVCk7CisKKwkgIC8qIEZpeCBwaGkgZXhwcmVzc2lv bnMgaW4gdGhlIHN1Y2Nlc3NvciBiYi4gICovCisJICBhZGp1c3RfcGhpX2FuZF9kZWJ1Z19zdG10 cyAocGhpLCB1cGRhdGVfZSwgbmlfbmFtZSk7CisJfQorICAgICAgZWxzZSBpZiAoU1RNVF9WSU5G T19UWVBFIChwaGlfaW5mbykgPT0gdW5kZWZfdmVjX2luZm9fdHlwZSkKKwl7CisJICB0eXBlID0g VFJFRV9UWVBFIChnaW1wbGVfcGhpX3Jlc3VsdCAocGhpKSk7CisJICBzdGVwX2V4cHIgPSBTVE1U X1ZJTkZPX0xPT1BfUEhJX0VWT0xVVElPTl9QQVJUIChwaGlfaW5mbyk7CisJICBzdGVwX2V4cHIg PSB1bnNoYXJlX2V4cHIgKHN0ZXBfZXhwcik7CisKKwkgIC8qIFdlIHByZXZpb3VzbHkgZ2VuZXJh dGVkIHRoZSBuZXcgbWVyZ2VkIHBoaSBpbiB0aGUgc2FtZSBCQiBhcyB0aGUKKwkgICAgIGd1YXJk LiAgU28gdXNlIHRoYXQgdG8gcGVyZm9ybSB0aGUgc2NhbGluZyBvbiByYXRoZXIgdGhhbiB0aGUK KwkgICAgIG5vcm1hbCBsb29wIHBoaSB3aGljaCBkb24ndCB0YWtlIHRoZSBlYXJseSBicmVha3Mg aW50byBhY2NvdW50LiAgKi8KKwkgIGluaXRfZXhwciA9IFBISV9BUkdfREVGX0ZST01fRURHRSAo cGhpMSwgbG9vcF9wcmVoZWFkZXJfZWRnZSAobG9vcCkpOworCisJICBpZiAodmYuaXNfY29uc3Rh bnQgKCkpCisJICAgIHsKKwkgICAgICBuaSA9IGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIFRSRUVf VFlQRSAoc3RlcF9leHByKSwKKwkJCQlmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoc3RlcF9leHBy KSwKKwkJCQkJICAgICAgbml0ZXJzX3ZlY3RvciksCisJCQkJYnVpbGRfaW50X2NzdCAoVFJFRV9U WVBFIChzdGVwX2V4cHIpLCB2ZikpOworCisJICAgICAgbmkgPSBmb2xkX2J1aWxkMiAoTUlOVVNf RVhQUiwgVFJFRV9UWVBFIChzdGVwX2V4cHIpLAorCQkJCWZvbGRfY29udmVydCAoVFJFRV9UWVBF IChzdGVwX2V4cHIpLAorCQkJCQkgICAgICBuaXRlcnNfb3JpZyksCisJCQkJZm9sZF9jb252ZXJ0 IChUUkVFX1RZUEUgKHN0ZXBfZXhwciksIG5pKSk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgLyog SWYgdGhlIGxvb3AncyBWRiBpc24ndCBjb25zdGFudCB0aGVuIHRoZSBsb29wIG11c3QgaGF2ZSBi ZWVuCisJICAgICAgIG1hc2tlZCwgc28gYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCB3ZSBrbm93IHdl IGhhdmUgZmluaXNoZWQKKwkgICAgICAgdGhlIGVudGlyZSBsb29wIGFuZCBmb3VuZCBub3RoaW5n LiAgKi8KKwkgICAgbmkgPSBidWlsZF96ZXJvX2NzdCAoVFJFRV9UWVBFIChzdGVwX2V4cHIpKTsK KworCSAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChuaSkgPT0gSU5URUdFUl9DU1QpOworCisJICB2 YXIgPSBjcmVhdGVfdG1wX3ZhciAodHlwZSwgInRtcCIpOworCisJICBsYXN0X2dzaSA9IGdzaV9s YXN0X2JiIChleGl0X2JiKTsKKwkgIGdpbXBsZV9zZXEgbmV3X3N0bXRzID0gTlVMTDsKKwkgIG5p X25hbWUgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAobmksICZuZXdfc3RtdHMsIGZhbHNlLCB2YXIp OworCSAgLyogRXhpdF9iYiBzaG91bGRuJ3QgYmUgZW1wdHkuICAqLworCSAgaWYgKCFnc2lfZW5k X3AgKGxhc3RfZ3NpKSkKKwkgICAgZ3NpX2luc2VydF9zZXFfYWZ0ZXIgKCZsYXN0X2dzaSwgbmV3 X3N0bXRzLCBHU0lfU0FNRV9TVE1UKTsKKwkgIGVsc2UKKwkgICAgZ3NpX2luc2VydF9zZXFfYmVm b3JlICgmbGFzdF9nc2ksIG5ld19zdG10cywgR1NJX1NBTUVfU1RNVCk7CisKKwkgIGFkanVzdF9w aGlfYW5kX2RlYnVnX3N0bXRzIChwaGkxLCB1cGRhdGVfZSwgbmlfbmFtZSk7CisKKwkgIGZvciAo dW5zaWduZWQgaSA9IDE7IGkgPCBleGl0cy5sZW5ndGggKCk7IGkrKykKKwkgICAgYWRqdXN0X3Bo aV9hbmRfZGVidWdfc3RtdHMgKHBoaTEsIGV4aXRzW2ldLAorCQkJCQlidWlsZF9pbnRfY3N0IChU UkVFX1RZUEUgKHN0ZXBfZXhwciksCisJCQkJCQkgICAgICAgdmYpKTsKKwkgIGl2dG1wID0gZ2lt cGxlX3BoaV9yZXN1bHQgKHBoaTEpOworCX0KKyAgICAgIGVsc2UKKwljb250aW51ZTsKKyAgICB9 CisKKyAgcmV0dXJuIGl2dG1wOwogfQogCiAvKiBSZXR1cm4gYSBnaW1wbGUgdmFsdWUgY29udGFp bmluZyB0aGUgbWlzYWxpZ25tZW50IChtZWFzdXJlZCBpbiB2ZWN0b3IKQEAgLTIwOTYsNyArMjMz OCw3IEBAIHZlY3RfZ2VuX3ZlY3Rvcl9sb29wX25pdGVyc19tdWx0X3ZmIChsb29wX3ZlY19pbmZv IGxvb3BfdmluZm8sCiAgIGNsYXNzIGxvb3AgKmxvb3AgPSBMT09QX1ZJTkZPX0xPT1AgKGxvb3Bf dmluZm8pOwogICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKG5pdGVyc192ZWN0b3IpOwogICB0cmVl IGxvZ192ZiA9IGJ1aWxkX2ludF9jc3QgKHR5cGUsIGV4YWN0X2xvZzIgKHZmKSk7Ci0gIGJhc2lj X2Jsb2NrIGV4aXRfYmIgPSBzaW5nbGVfZXhpdCAobG9vcCktPmRlc3Q7CisgIGJhc2ljX2Jsb2Nr IGV4aXRfYmIgPSBub3JtYWxfZXhpdCAobG9vcCktPmRlc3Q7CiAKICAgZ2NjX2Fzc2VydCAobml0 ZXJzX3ZlY3Rvcl9tdWx0X3ZmX3B0ciAhPSBOVUxMKTsKICAgdHJlZSBuaXRlcnNfdmVjdG9yX211 bHRfdmYgPSBmb2xkX2J1aWxkMiAoTFNISUZUX0VYUFIsIHR5cGUsCkBAIC0yMTIzLDE5ICsyMzY1 LDQ2IEBAIGZpbmRfZ3VhcmRfYXJnIChjbGFzcyBsb29wICpsb29wLCBjbGFzcyBsb29wICplcGls b2cgQVRUUklCVVRFX1VOVVNFRCwKIAkJZ3BoaSAqbGNzc2FfcGhpKQogewogICBncGhpX2l0ZXJh dG9yIGdzaTsKLSAgZWRnZSBlID0gc2luZ2xlX2V4aXQgKGxvb3ApOworICBlZGdlIGUgPSBub3Jt YWxfZXhpdCAobG9vcCk7CiAKLSAgZ2NjX2Fzc2VydCAoc2luZ2xlX3ByZWRfcCAoZS0+ZGVzdCkp OwogICBmb3IgKGdzaSA9IGdzaV9zdGFydF9waGlzIChlLT5kZXN0KTsgIWdzaV9lbmRfcCAoZ3Np KTsgZ3NpX25leHQgKCZnc2kpKQogICAgIHsKICAgICAgIGdwaGkgKnBoaSA9IGdzaS5waGkgKCk7 Ci0gICAgICBpZiAob3BlcmFuZF9lcXVhbF9wIChQSElfQVJHX0RFRiAocGhpLCAwKSwKLQkJCSAg IFBISV9BUkdfREVGIChsY3NzYV9waGksIDApLCAwKSkKKyAgICAgIC8qIE5lc3RlZCBsb29wcyB3 aXRoIG11bHRpcGxlIGV4aXRzIGNhbiBoYXZlIGRpZmZlcmVudCBubyMgcGhpIG5vZGUKKwkgYXJn dW1lbnRzIGJldHdlZW4gdGhlIG1haW4gbG9vcCBhbmQgZXBpbG9nIGFzIGVwaWxvZyBmYWxscyB0 byB0aGUKKwkgc2Vjb25kIGxvb3AuICAqLworICAgICAgaWYgKGdpbXBsZV9waGlfbnVtX2FyZ3Mg KHBoaSkgPiBlLT5kZXN0X2lkeAorCSAgJiYgb3BlcmFuZF9lcXVhbF9wIChQSElfQVJHX0RFRiAo cGhpLCBlLT5kZXN0X2lkeCksCisJCQkgICAgICBQSElfQVJHX0RFRiAobGNzc2FfcGhpLCAwKSwg MCkpCiAJcmV0dXJuIFBISV9SRVNVTFQgKHBoaSk7CiAgICAgfQogICByZXR1cm4gTlVMTF9UUkVF OwogfQogCisvKiBTdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IGVkZ2Ugd2FsayBhbGwgaW5zdHJ1 Y3Rpb25zIGFuZCBmaW5kIHRoZSBsYXN0CisgICBWVVNFL1ZERUYgaW4gdGhlIGJhc2ljIGJsb2Nr LiAgKi8KKworc3RhdGljIHRyZWUKK2dpbXBsZV9maW5kX2xhc3RfbWVtX3VzZSAoZWRnZSBlKQor eworICBiYXNpY19ibG9jayBiYiA9IGUtPnNyYzsKKyAgdHJlZSByZXMgPSBOVUxMOworICBnaW1w bGVfc3RtdF9pdGVyYXRvciBpdGVyID0gZ3NpX2xhc3RfYmIgKGJiKTsKKyAgZG8KKyAgeworICAg IGdpbXBsZSAqc3RtdCA9IGdzaV9zdG10IChpdGVyKTsKKyAgICBpZiAoKHJlcyA9IGdpbXBsZV92 ZGVmIChzdG10KSkpCisgICAgICByZXR1cm4gcmVzOworCisgICAgaWYgKChyZXMgPSBnaW1wbGVf dnVzZSAoc3RtdCkpKQorICAgICAgcmV0dXJuIHJlczsKKworICAgIGdzaV9wcmV2ICgmaXRlcik7 CisgIH0gd2hpbGUgKCFnc2lfZW5kX3AgKGl0ZXIpKTsKKworICByZXR1cm4gTlVMTDsKK30KKwog LyogRnVuY3Rpb24gc2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcgZHVwbGNp YXRlcyBGSVJTVC9TRUNPTkQKICAgIGZyb20gU0VDT05EL0ZJUlNUIGFuZCBwdXRzIGl0IGF0IHRo ZSBvcmlnaW5hbCBsb29wJ3MgcHJlaGVhZGVyL2V4aXQKICAgIGVkZ2UsIHRoZSB0d28gbG9vcHMg YXJlIGFycmFuZ2VkIGFzIGJlbG93OgpAQCAtMjE4NSw2ICsyNDU0LDcgQEAgZmluZF9ndWFyZF9h cmcgKGNsYXNzIGxvb3AgKmxvb3AsIGNsYXNzIGxvb3AgKmVwaWxvZyBBVFRSSUJVVEVfVU5VU0VE LAogc3RhdGljIHZvaWQKIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcyAobG9vcF92 ZWNfaW5mbyBsb29wX3ZpbmZvLAogCQkJCSAgIGNsYXNzIGxvb3AgKmZpcnN0LCBjbGFzcyBsb29w ICpzZWNvbmQsCisJCQkJICAgdHJlZSAqbGNzc2FfaXZ0bXAsCiAJCQkJICAgYm9vbCBjcmVhdGVf bGNzc2FfZm9yX2l2X3BoaXMpCiB7CiAgIGdwaGlfaXRlcmF0b3IgZ3NpX3VwZGF0ZSwgZ3NpX29y aWc7CkBAIC0yMTkyLDEwICsyNDYyLDE4IEBAIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9s b29wcyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLAogCiAgIGVkZ2UgZmlyc3RfbGF0Y2hfZSA9 IEVER0VfU1VDQyAoZmlyc3QtPmxhdGNoLCAwKTsKICAgZWRnZSBzZWNvbmRfcHJlaGVhZGVyX2Ug PSBsb29wX3ByZWhlYWRlcl9lZGdlIChzZWNvbmQpOwotICBiYXNpY19ibG9jayBiZXR3ZWVuX2Ji ID0gc2luZ2xlX2V4aXQgKGZpcnN0KS0+ZGVzdDsKKyAgYXV0b192ZWM8ZWRnZT4gZXhpdHMgPSBn ZXRfbG9vcF9leGl0X2VkZ2VzIChmaXJzdCk7CisgIGJhc2ljX2Jsb2NrIGJldHdlZW5fYmIgPSBl eGl0c1swXS0+ZGVzdDsKKworICBib29sIGVhcmx5X2V4aXQgPSBMT09QX1ZJTkZPX0VBUkxZX0JS RUFLUyAobG9vcF92aW5mbyk7CisgIC8qIEZvciBlYXJseSBleGl0cyB3aGVuIHdlIGNyZWF0ZSB0 aGUgbWVyZ2UgQkIgd2UgbXVzdCBtYWludGFpbiBpdCBpbgorICAgICBMQ1NTQSBmb3JtLCBvdGhl cndpc2UgdGhlIGZpbmFsIHZlY3Rvcml6ZXIgcGFzc2VzIHdpbGwgY3JlYXRlIHRoZQorICAgICB3 cm9uZyBQSEkgbm9kZXMgaGVyZS4gICovCisgIGNyZWF0ZV9sY3NzYV9mb3JfaXZfcGhpcyA9IGNy ZWF0ZV9sY3NzYV9mb3JfaXZfcGhpcyB8fCBlYXJseV9leGl0OwogCiAgIGdjY19hc3NlcnQgKGJl dHdlZW5fYmIgPT0gc2Vjb25kX3ByZWhlYWRlcl9lLT5zcmMpOwotICBnY2NfYXNzZXJ0IChzaW5n bGVfcHJlZF9wIChiZXR3ZWVuX2JiKSAmJiBzaW5nbGVfc3VjY19wIChiZXR3ZWVuX2JiKSk7Cisg IGdjY19hc3NlcnQgKChzaW5nbGVfcHJlZF9wIChiZXR3ZWVuX2JiKSAmJiBzaW5nbGVfc3VjY19w IChiZXR3ZWVuX2JiKSkKKwkgICAgICB8fCBlYXJseV9leGl0KTsKICAgLyogRWl0aGVyIHRoZSBm aXJzdCBsb29wIG9yIHRoZSBzZWNvbmQgaXMgdGhlIGxvb3AgdG8gYmUgdmVjdG9yaXplZC4gICov CiAgIGdjY19hc3NlcnQgKGxvb3AgPT0gZmlyc3QgfHwgbG9vcCA9PSBzZWNvbmQpOwogCkBAIC0y MjE1LDEwICsyNDkzLDQwIEBAIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcyAobG9v cF92ZWNfaW5mbyBsb29wX3ZpbmZvLAogCXsKIAkgIHRyZWUgbmV3X3JlcyA9IGNvcHlfc3NhX25h bWUgKFBISV9SRVNVTFQgKG9yaWdfcGhpKSk7CiAJICBncGhpICpsY3NzYV9waGkgPSBjcmVhdGVf cGhpX25vZGUgKG5ld19yZXMsIGJldHdlZW5fYmIpOwotCSAgYWRkX3BoaV9hcmcgKGxjc3NhX3Bo aSwgYXJnLCBzaW5nbGVfZXhpdCAoZmlyc3QpLCBVTktOT1dOX0xPQ0FUSU9OKTsKKworCSAgLyog VGhlIGZpcnN0IGV4aXQgaXMgYWx3YXlzIHRoZSBsb29wIGxhdGNoLCBzbyBoYW5kbGUgdGhhdAor CSAgICAgc2VwZXJhdGVseS4gICovCisJICBnY2NfYXNzZXJ0IChhcmcpOworCSAgYWRkX3BoaV9h cmcgKGxjc3NhX3BoaSwgYXJnLCBleGl0c1swXSwgVU5LTk9XTl9MT0NBVElPTik7CisKKwkgIC8q IFRoZSBlYXJseSBleGl0cyBhcmUgcHJvY2Vzc2VkIGluIG9yZGVyIHN0YXJ0aW5nIGZyb20gZXhp dCAxLiAgKi8KKwkgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBleGl0cy5sZW5ndGggKCk7IGkr KykKKwkgICAgeworCSAgICAgIHRyZWUgcGhpX2FyZzsKKwkgICAgICBpZiAoZ2ltcGxlX3BoaV9o YXNfdmRlZiAob3JpZ19waGkpKQorCQlwaGlfYXJnID0gZ2ltcGxlX2ZpbmRfbGFzdF9tZW1fdXNl IChleGl0c1tpXSk7CisJICAgICAgZWxzZQorCQkvKiBGb3IgaW5kdWN0aW9uIHZhbHVlcyBqdXN0 IGNvcHkgdGhlIHByZXZpb3VzIG9uZSBhcyB0aGUKKwkJICAgY3VycmVudCBpdGVyYXRpb24gZGlk IG5vdCBmaW5pc2guICBXZSdsbCB1cGRhdGUgYXMgbmVlZGVkCisJCSAgIGxhdGVyIG9uLiAgKi8K KwkJcGhpX2FyZyA9IGdpbXBsZV9waGlfcmVzdWx0IChvcmlnX3BoaSk7CisJICAgICAgLyogSWYg d2UgZGlkbid0IGZpbmQgYW55IGp1c3QgY29weSB0aGUgZXhpc3Rpbmcgb25lIGFuZCBsZWF2ZQor CQkgaXQgdG8gdGhlIG90aGVycyB0byBmaXggaXQgdXAuICAqLworCSAgICAgIGlmICghcGhpX2Fy ZykKKwkJcGhpX2FyZyA9IGdpbXBsZV9waGlfcmVzdWx0IChvcmlnX3BoaSk7CisJICAgICAgYWRk X3BoaV9hcmcgKGxjc3NhX3BoaSwgcGhpX2FyZywgZXhpdHNbaV0sIFVOS05PV05fTE9DQVRJT04p OworCSAgICB9CiAJICBhcmcgPSBuZXdfcmVzOwogCX0KIAorICAgICAgLyogTm9ybWFsbHkgYWJs ZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBpdGVyYXRvciBjb3VudGVyIGFuZCB0aGUKKwkg aXZ0ZW1wcyBidSBsb29raW5nIGF0IHRoZSBTVE1UX1ZJTkZPX1RZUEUgb2YgdGhlIHBoaSBub2Rl LgorCSBob3dldmVyIGZvciBzb21lIHJlYXNvbiB0aGlzIGlzbid0IGNvbnNpc3RlbnRseSBzZXQu ICBJcyB0aGVyZSBhCisJIGJldHRlciB3YXk/Py4gICovCisgICAgICBpZiAobGNzc2FfaXZ0bXAK KwkgICYmIGl2X3BoaV9wICh2ZWN0X3BoaV9pbmZvKSkKKwkqbGNzc2FfaXZ0bXAgPSBhcmc7CisK ICAgICAgIC8qIFVwZGF0ZSBQSEkgbm9kZSBpbiB0aGUgc2Vjb25kIGxvb3AgYnkgcmVwbGFjaW5n IGFyZyBvbiB0aGUgbG9vcCdzCiAJIGluY29taW5nIGVkZ2UuICAqLwogICAgICAgYWRqdXN0X3Bo aV9hbmRfZGVidWdfc3RtdHMgKHVwZGF0ZV9waGksIHNlY29uZF9wcmVoZWFkZXJfZSwgYXJnKTsK QEAgLTIyMjgsNyArMjUzNiw4IEBAIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcyAo bG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLAogICAgICBmb3IgY29ycmVjdCB2ZWN0b3JpemF0aW9u IG9mIGxpdmUgc3RtdHMuICAqLwogICBpZiAobG9vcCA9PSBmaXJzdCkKICAgICB7Ci0gICAgICBi YXNpY19ibG9jayBvcmlnX2V4aXQgPSBzaW5nbGVfZXhpdCAoc2Vjb25kKS0+ZGVzdDsKKyAgICAg IGF1dG9fdmVjPGVkZ2U+IG5ld19leGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKHNlY29uZCk7 CisgICAgICBiYXNpY19ibG9jayBvcmlnX2V4aXQgPSBuZXdfZXhpdHNbMF0tPmRlc3Q7CiAgICAg ICBmb3IgKGdzaV9vcmlnID0gZ3NpX3N0YXJ0X3BoaXMgKG9yaWdfZXhpdCk7CiAJICAgIWdzaV9l bmRfcCAoZ3NpX29yaWcpOyBnc2lfbmV4dCAoJmdzaV9vcmlnKSkKIAl7CkBAIC0yMjQzLDcgKzI1 NTIsMTUgQEAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xvb3BzIChsb29wX3ZlY19pbmZv IGxvb3BfdmluZm8sCiAKIAkgIHRyZWUgbmV3X3JlcyA9IGNvcHlfc3NhX25hbWUgKG9yaWdfYXJn KTsKIAkgIGdwaGkgKmxjcGhpID0gY3JlYXRlX3BoaV9ub2RlIChuZXdfcmVzLCBiZXR3ZWVuX2Ji KTsKLQkgIGFkZF9waGlfYXJnIChsY3BoaSwgb3JpZ19hcmcsIHNpbmdsZV9leGl0IChmaXJzdCks IFVOS05PV05fTE9DQVRJT04pOworCSAgLyogVGhlIGZpcnN0IGV4aXQgaXMgYWx3YXlzIHRoZSBs b29wIGxhdGNoLCBzbyBoYW5kbGUgdGhhdAorCSAgICAgc2VwZXJhdGVseS4gICovCisJICBhZGRf cGhpX2FyZyAobGNwaGksIG9yaWdfYXJnLCBuZXdfZXhpdHNbMF0sIFVOS05PV05fTE9DQVRJT04p OworCSAgLyogVGhlIGVhcmx5IGV4aXRzIGFyZSBwcm9jZXNzZWQgaW4gb3JkZXIgc3RhcnRpbmcg ZnJvbSBleGl0IDEuICAqLworCSAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG5ld19leGl0cy5s ZW5ndGggKCk7IGkrKykKKwkgICAgeworCSAgICAgIHRyZWUgcGhpX2FyZyA9IGdpbXBsZV9waGlf cmVzdWx0IChvcmlnX3BoaSk7CisJICAgICAgYWRkX3BoaV9hcmcgKGxjcGhpLCBwaGlfYXJnLCBl eGl0c1tpXSwgVU5LTk9XTl9MT0NBVElPTik7CisJICAgIH0KIAl9CiAgICAgfQogfQpAQCAtMjM5 MywxMyArMjcxMCwxMSBAQCBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfZ3VhcmQyIChjbGFz cyBsb29wICpsb29wLCBjbGFzcyBsb29wICplcGlsb2csCiAgIGdjY19hc3NlcnQgKHNpbmdsZV9z dWNjX3AgKG1lcmdlX2JiKSk7CiAgIGVkZ2UgZSA9IHNpbmdsZV9zdWNjX2VkZ2UgKG1lcmdlX2Ji KTsKICAgYmFzaWNfYmxvY2sgZXhpdF9iYiA9IGUtPmRlc3Q7Ci0gIGdjY19hc3NlcnQgKHNpbmds ZV9wcmVkX3AgKGV4aXRfYmIpKTsKLSAgZ2NjX2Fzc2VydCAoc2luZ2xlX3ByZWQgKGV4aXRfYmIp ID09IHNpbmdsZV9leGl0IChlcGlsb2cpLT5kZXN0KTsKIAogICBmb3IgKGdzaSA9IGdzaV9zdGFy dF9waGlzIChleGl0X2JiKTsgIWdzaV9lbmRfcCAoZ3NpKTsgZ3NpX25leHQgKCZnc2kpKQogICAg IHsKICAgICAgIGdwaGkgKnVwZGF0ZV9waGkgPSBnc2kucGhpICgpOwotICAgICAgdHJlZSBvbGRf YXJnID0gUEhJX0FSR19ERUYgKHVwZGF0ZV9waGksIDApOworICAgICAgdHJlZSBvbGRfYXJnID0g UEhJX0FSR19ERUYgKHVwZGF0ZV9waGksIGUtPmRlc3RfaWR4KTsKIAogICAgICAgdHJlZSBtZXJn ZV9hcmcgPSBOVUxMX1RSRUU7CiAKQEAgLTI0MzgsMTIgKzI3NTMsMTQgQEAgc3RhdGljIHZvaWQK IHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sY3NzYSAoY2xhc3MgbG9vcCAqZXBpbG9nKQog ewogICBncGhpX2l0ZXJhdG9yIGdzaTsKLSAgYmFzaWNfYmxvY2sgZXhpdF9iYiA9IHNpbmdsZV9l eGl0IChlcGlsb2cpLT5kZXN0OworICBhdXRvX3ZlYzxlZGdlPiBleGl0cyA9IGdldF9sb29wX2V4 aXRfZWRnZXMgKGVwaWxvZyk7CiAKLSAgZ2NjX2Fzc2VydCAoc2luZ2xlX3ByZWRfcCAoZXhpdF9i YikpOwotICBlZGdlIGUgPSBFREdFX1BSRUQgKGV4aXRfYmIsIDApOwotICBmb3IgKGdzaSA9IGdz aV9zdGFydF9waGlzIChleGl0X2JiKTsgIWdzaV9lbmRfcCAoZ3NpKTsgZ3NpX25leHQgKCZnc2kp KQotICAgIHJlbmFtZV91c2Vfb3AgKFBISV9BUkdfREVGX1BUUl9GUk9NX0VER0UgKGdzaS5waGkg KCksIGUpKTsKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXRzLmxlbmd0aCAoKTsgaSsr KQorICAgIHsKKyAgICAgIGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBleGl0c1tpXS0+ZGVzdDsKKyAg ICAgIGZvciAoZ3NpID0gZ3NpX3N0YXJ0X3BoaXMgKGV4aXRfYmIpOyAhZ3NpX2VuZF9wIChnc2kp OyBnc2lfbmV4dCAoJmdzaSkpCisJcmVuYW1lX3VzZV9vcCAoUEhJX0FSR19ERUZfUFRSX0ZST01f RURHRSAoZ3NpLnBoaSAoKSwgZXhpdHNbaV0pKTsKKyAgICB9CiB9CiAKIC8qIEVQSUxPR1VFX1ZJ TkZPIGlzIGFuIGVwaWxvZ3VlIGxvb3AgdGhhdCB3ZSBub3cga25vdyB3b3VsZCBuZWVkIHRvCkBA IC0yNjIxLDYgKzI5MzgsMTQgQEAgdmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvIGxvb3Bf dmluZm8sIHRyZWUgbml0ZXJzLCB0cmVlIG5pdGVyc20xLAogICAgIGJvdW5kX2VwaWxvZyArPSB2 ZiAtIDE7CiAgIGlmIChMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX0dBUFMgKGxvb3BfdmluZm8pKQog ICAgIGJvdW5kX2VwaWxvZyArPSAxOworICAvKiBGb3IgZWFybHkgYnJlYWtzIHRoZSBzY2FsYXIg bG9vcCBuZWVkcyB0byBleGVjdXRlIGF0IG1vc3QgVkYgdGltZXMKKyAgICAgdG8gZmluZCB0aGUg ZWxlbWVudCB0aGF0IGNhdXNlZCB0aGUgYnJlYWsuICAqLworICBpZiAoTE9PUF9WSU5GT19FQVJM WV9CUkVBS1MgKGxvb3BfdmluZm8pKQorICAgIHsKKyAgICAgIGJvdW5kX2VwaWxvZyA9IHZmOwor ICAgICAgLyogRm9yY2UgYSBzY2FsYXIgZXBpbG9ndWUgYXMgd2UgY2FuJ3QgdmVjdG9yaXplIHRo ZSBpbmRleCBmaW5kaW5nLiAgKi8KKyAgICAgIHZlY3RfZXBpbG9ndWVzID0gZmFsc2U7CisgICAg fQogICBib29sIGVwaWxvZ19wZWVsaW5nID0gbWF5YmVfbmUgKGJvdW5kX2VwaWxvZywgMFUpOwog ICBwb2x5X3VpbnQ2NCBib3VuZF9zY2FsYXIgPSBib3VuZF9lcGlsb2c7CiAKQEAgLTI3ODAsMTYg KzMxMDUsMjQgQEAgdmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sIHRy ZWUgbml0ZXJzLCB0cmVlIG5pdGVyc20xLAogCQkJCSAgYm91bmRfcHJvbG9nICsgYm91bmRfZXBp bG9nKQogCQkgICAgICA6ICghTE9PUF9SRVFVSVJFU19WRVJTSU9OSU5HIChsb29wX3ZpbmZvKQog CQkJIHx8IHZlY3RfZXBpbG9ndWVzKSk7CisKKyAgLyogV2Ugb25seSBzdXBwb3J0IGVhcmx5IGJy ZWFrIHZlY3Rvcml6YXRpb24gb24ga25vd24gYm91bmRzIGF0IHRoaXMgdGltZS4KKyAgICAgVGhp cyBtZWFucyB0aGF0IGlmIHRoZSB2ZWN0b3IgbG9vcCBjYW4ndCBiZSBlbnRlcmVkIHRoZW4gd2Ug d29uJ3QgZ2VuZXJhdGUKKyAgICAgaXQgYXQgYWxsLiAgU28gZm9yIG5vdyBmb3JjZSBza2lwX3Zl Y3RvciBvZmYgYmVjYXVzZSB0aGUgYWRkaXRpb25hbCBjb250cm9sCisgICAgIGZsb3cgbWVzc2Vz IHdpdGggdGhlIEJCIGV4aXRzIGFuZCB3ZSd2ZSBhbHJlYWR5IGFuYWx5emVkIHRoZW0uICAqLwor IHNraXBfdmVjdG9yID0gc2tpcF92ZWN0b3IgJiYgIUxPT1BfVklORk9fRUFSTFlfQlJFQUtTIChs b29wX3ZpbmZvKTsKKwogICAvKiBFcGlsb2cgbG9vcCBtdXN0IGJlIGV4ZWN1dGVkIGlmIHRoZSBu dW1iZXIgb2YgaXRlcmF0aW9ucyBmb3IgZXBpbG9nCiAgICAgIGxvb3AgaXMga25vd24gYXQgY29t cGlsZSB0aW1lLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBhZGQgYSBjaGVjayBhdAogICAgICB0aGUg ZW5kIG9mIHZlY3RvciBsb29wIGFuZCBza2lwIHRvIHRoZSBlbmQgb2YgZXBpbG9nIGxvb3AuICAq LwogICBib29sIHNraXBfZXBpbG9nID0gKHByb2xvZ19wZWVsaW5nIDwgMAogCQkgICAgICB8fCAh TE9PUF9WSU5GT19OSVRFUlNfS05PV05fUCAobG9vcF92aW5mbykKIAkJICAgICAgfHwgIXZmLmlz X2NvbnN0YW50ICgpKTsKLSAgLyogUEVFTElOR19GT1JfR0FQUyBpcyBzcGVjaWFsIGJlY2F1c2Ug ZXBpbG9nIGxvb3AgbXVzdCBiZSBleGVjdXRlZC4gICovCi0gIGlmIChMT09QX1ZJTkZPX1BFRUxJ TkdfRk9SX0dBUFMgKGxvb3BfdmluZm8pKQorICAvKiBQRUVMSU5HX0ZPUl9HQVBTIGFuZCBwZWVs aW5nIGZvciBlYXJseSBicmVha3MgYXJlIHNwZWNpYWwgYmVjYXVzZSBlcGlsb2cKKyAgICAgbG9v cCBtdXN0IGJlIGV4ZWN1dGVkLiAgKi8KKyAgaWYgKExPT1BfVklORk9fUEVFTElOR19GT1JfR0FQ UyAobG9vcF92aW5mbykKKyAgICAgIHx8IExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3Zp bmZvKSkKICAgICBza2lwX2VwaWxvZyA9IGZhbHNlOwotCiAgIGNsYXNzIGxvb3AgKnNjYWxhcl9s b29wID0gTE9PUF9WSU5GT19TQ0FMQVJfTE9PUCAobG9vcF92aW5mbyk7CiAgIGF1dG9fdmVjPHBy b2ZpbGVfY291bnQ+IG9yaWdpbmFsX2NvdW50czsKICAgYmFzaWNfYmxvY2sgKm9yaWdpbmFsX2Ji cyA9IE5VTEw7CkBAIC0yODI4LDcgKzMxNjEsNyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVj X2luZm8gbG9vcF92aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsCiAgIGlmIChwcm9s b2dfcGVlbGluZykKICAgICB7CiAgICAgICBlID0gbG9vcF9wcmVoZWFkZXJfZWRnZSAobG9vcCk7 Ci0gICAgICBpZiAoIXNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCAobG9vcCwgZSkpCisgICAg ICBpZiAoIXNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCAobG9vcF92aW5mbywgZSkpCiAJewog CSAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgbG9vcF9sb2MsCiAJ CQkgICAibG9vcCBjYW4ndCBiZSBkdXBsaWNhdGVkIHRvIHByZWhlYWRlciBlZGdlLlxuIik7CkBA IC0yODQzLDcgKzMxNzYsNyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92 aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsCiAJICBnY2NfdW5yZWFjaGFibGUgKCk7 CiAJfQogICAgICAgcHJvbG9nLT5mb3JjZV92ZWN0b3JpemUgPSBmYWxzZTsKLSAgICAgIHNscGVl bF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcyAobG9vcF92aW5mbywgcHJvbG9nLCBsb29wLCB0 cnVlKTsKKyAgICAgIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcyAobG9vcF92aW5m bywgcHJvbG9nLCBsb29wLCBOVUxMLCB0cnVlKTsKICAgICAgIGZpcnN0X2xvb3AgPSBwcm9sb2c7 CiAgICAgICByZXNldF9vcmlnaW5hbF9jb3B5X3RhYmxlcyAoKTsKIApAQCAtMjkwMiwxMSArMzIz NSwxMyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSBu aXRlcnMsIHRyZWUgbml0ZXJzbTEsCiAKICAgaWYgKGVwaWxvZ19wZWVsaW5nKQogICAgIHsKLSAg ICAgIGUgPSBzaW5nbGVfZXhpdCAobG9vcCk7Ci0gICAgICBpZiAoIXNscGVlbF9jYW5fZHVwbGlj YXRlX2xvb3BfcCAobG9vcCwgZSkpCisgICAgICBhdXRvX3ZlYzxlZGdlPiBleGl0cyA9IGdldF9s b29wX2V4aXRfZWRnZXMgKGxvb3ApOworICAgICAgZSA9IGV4aXRzWzBdOworICAgICAgaWYgKCFz bHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29wX3AgKGxvb3BfdmluZm8sIGUpKQogCXsKLQkgIGR1bXBf cHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIGxvb3BfbG9jLAotCQkJICAgImxv b3AgY2FuJ3QgYmUgZHVwbGljYXRlZCB0byBleGl0IGVkZ2UuXG4iKTsKKwkgIGlmIChkdW1wX2Vu YWJsZWRfcCAoKSkKKwkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElP TiwgbG9vcF9sb2MsCisJCQkgICAgICJsb29wIGNhbid0IGJlIGR1cGxpY2F0ZWQgdG8gZXhpdCBl ZGdlLlxuIik7CiAJICBnY2NfdW5yZWFjaGFibGUgKCk7CiAJfQogICAgICAgLyogUGVlbCBlcGls b2cgYW5kIHB1dCBpdCBvbiBleGl0IGVkZ2Ugb2YgbG9vcC4gIElmIHdlIGFyZSB2ZWN0b3Jpemlu ZwpAQCAtMjkyMCwxMiArMzI1NSwxNiBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVjX2luZm8g bG9vcF92aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsCiAgICAgICBlcGlsb2cgPSBz bHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZyAobG9vcCwgZXBpbG9nLCBlKTsK ICAgICAgIGlmICghZXBpbG9nKQogCXsKLQkgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9P UFRJTUlaQVRJT04sIGxvb3BfbG9jLAotCQkJICAgInNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29w X3RvX2VkZ2VfY2ZnIGZhaWxlZC5cbiIpOworCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQorCSAg ICBkdW1wX3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCBsb29wX2xvYywKKwkJ CSAgICAgInNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnIGZhaWxlZC5cbiIp OwogCSAgZ2NjX3VucmVhY2hhYmxlICgpOwogCX0KICAgICAgIGVwaWxvZy0+Zm9yY2VfdmVjdG9y aXplID0gZmFsc2U7Ci0gICAgICBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMgKGxv b3BfdmluZm8sIGxvb3AsIGVwaWxvZywgZmFsc2UpOworCisgICAgICB0cmVlIGVhcmx5X2JyZWFr X2l2X25hbWU7CisgICAgICBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMgKGxvb3Bf dmluZm8sIGxvb3AsIGVwaWxvZywKKwkJCQkJICZlYXJseV9icmVha19pdl9uYW1lLCBmYWxzZSk7 CiAKICAgICAgIC8qIFNjYWxhciB2ZXJzaW9uIGxvb3AgbWF5IGJlIHByZWZlcnJlZC4gIEluIHRo aXMgY2FzZSwgYWRkIGd1YXJkCiAJIGFuZCBza2lwIHRvIGVwaWxvZy4gIE5vdGUgdGhpcyBvbmx5 IGhhcHBlbnMgd2hlbiB0aGUgbnVtYmVyIG9mCkBAIC0yOTc4LDYgKzMzMTcsNyBAQCB2ZWN0X2Rv X3BlZWxpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0 ZXJzbTEsCiAgICAgICB2ZWN0X2dlbl92ZWN0b3JfbG9vcF9uaXRlcnMgKGxvb3BfdmluZm8sIG5p dGVycywKIAkJCQkgICBuaXRlcnNfdmVjdG9yLCBzdGVwX3ZlY3RvciwKIAkJCQkgICBuaXRlcnNf bm9fb3ZlcmZsb3cpOworCiAgICAgICBpZiAoIWludGVnZXJfb25lcCAoKnN0ZXBfdmVjdG9yKSkK IAl7CiAJICAvKiBPbiBleGl0IGZyb20gdGhlIGxvb3Agd2Ugd2lsbCBoYXZlIGFuIGVhc3kgd2F5 IG9mIGNhbGNhbGF0aW5nCkBAIC0yOTg3LDkgKzMzMjcsMTMgQEAgdmVjdF9kb19wZWVsaW5nIChs b29wX3ZlY19pbmZvIGxvb3BfdmluZm8sIHRyZWUgbml0ZXJzLCB0cmVlIG5pdGVyc20xLAogCSAg U1NBX05BTUVfREVGX1NUTVQgKG5pdGVyc192ZWN0b3JfbXVsdF92ZikgPSBnaW1wbGVfYnVpbGRf bm9wICgpOwogCSAgKm5pdGVyc192ZWN0b3JfbXVsdF92Zl92YXIgPSBuaXRlcnNfdmVjdG9yX211 bHRfdmY7CiAJfQorICAgICAgZWxzZSBpZiAoTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3Bf dmluZm8pKQorCXZlY3RfZ2VuX3ZlY3Rvcl9sb29wX25pdGVyc19tdWx0X3ZmIChsb29wX3ZpbmZv LCBlYXJseV9icmVha19pdl9uYW1lLAorCQkJCQkgICAgICZuaXRlcnNfdmVjdG9yX211bHRfdmYp OwogICAgICAgZWxzZQogCXZlY3RfZ2VuX3ZlY3Rvcl9sb29wX25pdGVyc19tdWx0X3ZmIChsb29w X3ZpbmZvLCAqbml0ZXJzX3ZlY3RvciwKIAkJCQkJICAgICAmbml0ZXJzX3ZlY3Rvcl9tdWx0X3Zm KTsKKwogICAgICAgLyogVXBkYXRlIElWcyBvZiBvcmlnaW5hbCBsb29wIGFzIGlmIHRoZXkgd2Vy ZSBhZHZhbmNlZCBieQogCSBuaXRlcnNfdmVjdG9yX211bHRfdmYgc3RlcHMuICAqLwogICAgICAg Z2NjX2NoZWNraW5nX2Fzc2VydCAodmVjdF9jYW5fYWR2YW5jZV9pdnNfcCAobG9vcF92aW5mbykp OwpAQCAtMjk5NywxMiArMzM0MSw5MyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVjX2luZm8g bG9vcF92aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsCiAgICAgICB2ZWN0X3VwZGF0 ZV9pdnNfYWZ0ZXJfdmVjdG9yaXplciAobG9vcF92aW5mbywgbml0ZXJzX3ZlY3Rvcl9tdWx0X3Zm LAogCQkJCQl1cGRhdGVfZSk7CiAKKyAgICAgIC8qIEZvciBlYXJseSBicmVha3Mgd2UgbXVzdCBj cmVhdGUgYSBndWFyZCB0byBjaGVjayBob3cgbWFueSBpdGVyYXRpb25zCisJIG9mIHRoZSBzY2Fs YXIgbG9vcCBhcmUgeWV0IHRvIGJlIHBlcmZvcm1lZC4gICovCisgICAgICBpZiAoTE9PUF9WSU5G T19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQorCXsKKwkgIGdjY19hc3NlcnQgKGVhcmx5X2Jy ZWFrX2l2X25hbWUpOworCSAgdHJlZSBpdnRtcCA9CisJICAgIHZlY3RfdXBkYXRlX2l2c19hZnRl cl9lYXJseV9icmVhayAobG9vcF92aW5mbywgZXBpbG9nLCB2Ziwgbml0ZXJzLAorCQkJCQkgICAg ICAgKm5pdGVyc192ZWN0b3IsIHVwZGF0ZV9lKTsKKwkgIHRyZWUgZ3VhcmRfY29uZCA9IGZvbGRf YnVpbGQyIChFUV9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwKKwkJCQkJIGZvbGRfY29udmVydCAo VFJFRV9UWVBFIChuaXRlcnMpLAorCQkJCQkJICAgICAgIGl2dG1wKSwKKwkJCQkJIGJ1aWxkX3pl cm9fY3N0IChUUkVFX1RZUEUgKG5pdGVycykpKTsKKwkgIGJhc2ljX2Jsb2NrIGd1YXJkX2JiID0g bm9ybWFsX2V4aXQgKGxvb3ApLT5kZXN0OworCSAgYXV0b192ZWM8ZWRnZT4gbmV3X2V4aXRzID0g Z2V0X2xvb3BfZXhpdF9lZGdlcyAoZXBpbG9nKTsKKwkgIC8qIElmIHdlIGhhZCBhIGZhbGx0aHJv dWdoIGVkZ2UsIHRoZSBndWFyZCB3aWxsIHRoZSB0aHJlYWRlZCB0aHJvdWdoCisJICAgICBhbmQg c28gd2UgbWF5IG5lZWQgdG8gZmluZCB0aGUgYWN0dWFsIGZpbmFsIGVkZ2UuICAqLworCSAgZWRn ZSBmaW5hbF9lZGdlID0gbmV3X2V4aXRzWzBdOworCSAgYmFzaWNfYmxvY2sgZ3VhcmRfdG87CisJ ICBib29sIGZuX2V4aXRfcCA9IGZhbHNlOworCSAgaWYgKGdzaV9lbmRfcCAoZ3NpX3N0YXJ0X25v bmRlYnVnX2JiIChmaW5hbF9lZGdlLT5kZXN0KSkKKwkgICAgICAmJiAhZ3NpX2VuZF9wIChnc2lf c3RhcnRfcGhpcyAoZmluYWxfZWRnZS0+ZGVzdCkpCisJICAgICAgJiYgc2luZ2xlX3N1Y2NfcCAo ZmluYWxfZWRnZS0+ZGVzdCkpCisJICAgIHsKKwkgICAgICBhdXRvIGdzaSA9IGdzaV9zdGFydF9w aGlzIChmaW5hbF9lZGdlLT5kZXN0KTsKKwkgICAgICB3aGlsZSAoIWdzaV9lbmRfcCAoZ3NpKSkK KwkJZ3NpX3JlbW92ZSAoJmdzaSwgdHJ1ZSk7CisJICAgICAgZ3VhcmRfdG8gPSBmaW5hbF9lZGdl LT5kZXN0OworCSAgICAgIGZuX2V4aXRfcCA9IHRydWU7CisJICAgIH0KKwkgIGVsc2UKKwkgICAg Z3VhcmRfdG8gPSBzcGxpdF9lZGdlIChub3JtYWxfZXhpdCAoZXBpbG9nKSk7CisJICBlZGdlIGd1 YXJkX2UgPSBzbHBlZWxfYWRkX2xvb3BfZ3VhcmQgKGd1YXJkX2JiLCBndWFyZF9jb25kLCBndWFy ZF90bywKKwkJCQkJCWd1YXJkX2JiLCBwcm9iX2VwaWxvZy5pbnZlcnQgKCksCisJCQkJCQlpcnJl ZF9mbGFnKTsKKwkgIGJhc2ljX2Jsb2NrIGRlc3QgPSBzaW5nbGVfc3VjYyAoZ3VhcmRfdG8pOwor CSAgLyogSWYgd2UgaGF2ZSBhIHNpbmdsZSBwcmVkIHRoZW4gdGhlIHByZXZpb3VzIGJsb2NrIGlz IHRoZSBpbW1lZGlhdGUKKwkgICAgIGRvbWluYXRvci4gICBUaGlzIG1heSBvciBtYXkgbm90IGJl IHRoZSBndWFyZCBiYi4gIEhvd2V2ZXIgaWYgd2UKKwkgICAgIGhhdmUgbXVsdGlwbGUgcHJlZCB0 aGVuIHRoZSBndWFyZCBCQiBtdXN0IGJlIHRoZSBkb21pbmF0b3IgYXMgYWxsCisJICAgICBwcmV2 aW91cyBleGl0cyBnb3QgcmV3cml0ZWQgdG8gdGhlIGd1YXJkIEJCLiAgKi8KKwkgIGlmIChzaW5n bGVfcHJlZF9wIChkZXN0KSkKKwkgICAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01J TkFUT1JTLCBkZXN0LCBndWFyZF90byk7CisJICBlbHNlCisJICAgIHNldF9pbW1lZGlhdGVfZG9t aW5hdG9yIChDRElfRE9NSU5BVE9SUywgZGVzdCwgZ3VhcmRfYmIpOworCisJICAvKiBXZSBtdXN0 IHVwZGF0ZSBhbGwgdGhlIGVkZ2VzIGZyb20gdGhlIG5ldyBndWFyZF9iYi4gICovCisJICBzbHBl ZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfZ3VhcmQyIChsb29wLCBlcGlsb2csIGd1YXJkX2UsCisJ CQkJCSAgICAgIGZpbmFsX2VkZ2UpOworCisJICAvKiBJZiB3ZSBoYXZlIGFuIGFkZGl0aW9uYWwg ZnVuY3Rpb25lIGV4aXQgYmxvY2ssIHRoZW4gdGhyZWFkIHRoZSB1cGRhdGVzCisJICAgICB0aHJv dWdoIHRvIHRoZSBibG9jay4gIExlYXZpbmcgaXQgdXAgdG8gdGhlIExDU1NBIGNsZWFudXAgcGFz cyB3aWxsCisJICAgICBnZXQgdGhlIHdyb25nIHZhbHVlcyBoZXJlIGFzIGl0IGNhbid0IGhhbmRs ZSB0aGUgbWVyZ2UgYmxvY2sgd2UganVzdAorCSAgICAgbWFkZSBjb3JyZWN0bHkuICAqLworCSAg aWYgKGZuX2V4aXRfcCkKKwkgICAgeworCQlncGhpX2l0ZXJhdG9yIGdzaV91cGRhdGUsIGdzaV9v cmlnLCBnc2lfdmVjdDsKKwkJZm9yIChnc2lfb3JpZyA9IGdzaV9zdGFydF9waGlzIChlcGlsb2ct PmhlYWRlciksCisJCSAgICAgZ3NpX3VwZGF0ZSA9IGdzaV9zdGFydF9waGlzIChndWFyZF9lLT5k ZXN0KSwKKwkJICAgICBnc2lfdmVjdCA9IGdzaV9zdGFydF9waGlzIChsb29wLT5oZWFkZXIpOwor CQkgICAgICFnc2lfZW5kX3AgKGdzaV9vcmlnKSAmJiAhZ3NpX2VuZF9wIChnc2lfdXBkYXRlKQor CQkgICAgICYmICFnc2lfZW5kX3AgKGdzaV92ZWN0KTsKKwkJICAgICBnc2lfbmV4dCAoJmdzaV9v cmlnKSwgZ3NpX25leHQgKCZnc2lfdXBkYXRlKSwKKwkJICAgICBnc2lfbmV4dCAoJmdzaV92ZWN0 KSkKKwkJICB7CisJCSAgICBncGhpICpvcmlnX3BoaSA9IGdzaV9vcmlnLnBoaSAoKTsKKwkJICAg IGdwaGkgKnVwZGF0ZV9waGkgPSBnc2lfdXBkYXRlLnBoaSAoKTsKKwkJICAgIGdwaGkgKnZlY3Rf cGhpID0gZ3NpX3ZlY3QucGhpICgpOworCQkgICAgc3RtdF92ZWNfaW5mbyBwaGlfaW5mbyA9IGxv b3BfdmluZm8tPmxvb2t1cF9zdG10ICh2ZWN0X3BoaSk7CisKKwkJICAgIGlmIChpdl9waGlfcCAo cGhpX2luZm8pKQorCQkgICAgICBjb250aW51ZTsKKworCQkgICAgdHJlZSBwaGlfYXJnID0gUEhJ X0FSR19ERUZfRlJPTV9FREdFIChvcmlnX3BoaSwgdXBkYXRlX2UpOworCQkgICAgU0VUX1BISV9B UkdfREVGICh1cGRhdGVfcGhpLCB1cGRhdGVfZS0+ZGVzdF9pZHgsIHBoaV9hcmcpOworCisJCSAg ICBwaGlfYXJnID0gUEhJX0FSR19ERUZfRlJPTV9FREdFIChvcmlnX3BoaSwgZ3VhcmRfZSk7CisJ CSAgICBTRVRfUEhJX0FSR19ERUYgKHVwZGF0ZV9waGksIGd1YXJkX2UtPmRlc3RfaWR4LCBwaGlf YXJnKTsKKwkJICB9CisJICAgIH0KKwkgIGZsdXNoX3BlbmRpbmdfc3RtdHMgKGd1YXJkX2UpOwor CX0KKwogICAgICAgaWYgKHNraXBfZXBpbG9nKQogCXsKIAkgIGd1YXJkX2NvbmQgPSBmb2xkX2J1 aWxkMiAoRVFfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsCiAJCQkJICAgIG5pdGVycywgbml0ZXJz X3ZlY3Rvcl9tdWx0X3ZmKTsKLQkgIGd1YXJkX2JiID0gc2luZ2xlX2V4aXQgKGxvb3ApLT5kZXN0 OwotCSAgZ3VhcmRfdG8gPSBzcGxpdF9lZGdlIChzaW5nbGVfZXhpdCAoZXBpbG9nKSk7CisJICBn dWFyZF9iYiA9IG5vcm1hbF9leGl0IChsb29wKS0+ZGVzdDsKKwkgIGd1YXJkX3RvID0gc3BsaXRf ZWRnZSAobm9ybWFsX2V4aXQgKGVwaWxvZykpOwogCSAgZ3VhcmRfZSA9IHNscGVlbF9hZGRfbG9v cF9ndWFyZCAoZ3VhcmRfYmIsIGd1YXJkX2NvbmQsIGd1YXJkX3RvLAogCQkJCQkgICBza2lwX3Zl Y3RvciA/IGFuY2hvciA6IGd1YXJkX2JiLAogCQkJCQkgICBwcm9iX2VwaWxvZy5pbnZlcnQgKCks CkBAIC0zMDEwLDcgKzM0MzUsNyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVjX2luZm8gbG9v cF92aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsCiAJICBpZiAodmVjdF9lcGlsb2d1 ZXMpCiAJICAgIGVwaWxvZ3VlX3ZpbmZvLT5za2lwX3RoaXNfbG9vcF9lZGdlID0gZ3VhcmRfZTsK IAkgIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9ndWFyZDIgKGxvb3AsIGVwaWxvZywgZ3Vh cmRfZSwKLQkJCQkJICAgICAgc2luZ2xlX2V4aXQgKGVwaWxvZykpOworCQkJCQkgICAgICBub3Jt YWxfZXhpdCAoZXBpbG9nKSk7CiAJICAvKiBPbmx5IG5lZWQgdG8gaGFuZGxlIGJhc2ljIGJsb2Nr IGJlZm9yZSBlcGlsb2cgbG9vcCBpZiBpdCdzIG5vdAogCSAgICAgdGhlIGd1YXJkX2JiLCB3aGlj aCBpcyB0aGUgY2FzZSB3aGVuIHNraXBfdmVjdG9yIGlzIHRydWUuICAqLwogCSAgaWYgKGd1YXJk X2JiICE9IGJiX2JlZm9yZV9lcGlsb2cpCkBAIC0zMDIzLDcgKzM0NDgsNiBAQCB2ZWN0X2RvX3Bl ZWxpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJz bTEsCiAJfQogICAgICAgZWxzZQogCXNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sY3NzYSAo ZXBpbG9nKTsKLQogICAgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBib3VuZDsKICAgICAgIGlm IChib3VuZF9zY2FsYXIuaXNfY29uc3RhbnQgKCZib3VuZCkpCiAJewpAQCAtMzExNCw3ICszNTM4 LDYgQEAgdmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sIHRyZWUgbml0 ZXJzLCB0cmVlIG5pdGVyc20xLAogCiAgIGFkanVzdF92ZWMucmVsZWFzZSAoKTsKICAgZnJlZV9v cmlnaW5hbF9jb3B5X3RhYmxlcyAoKTsKLQogICByZXR1cm4gdmVjdF9lcGlsb2d1ZXMgPyBlcGls b2cgOiBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0LWxvb3AuY2MgYi9nY2Mv dHJlZS12ZWN0LWxvb3AuY2MKaW5kZXggYWFjYmIxMjU4MGM4OWE3YTEyYjExY2MwOTY1MDJkNjY5 YTllMWUyMS4uZjM3YmQxMDU3NTA0NGMyNTYxZjc5MmNiOGJhNDg3MGJlY2ZjNGEzMCAxMDA2NDQK LS0tIGEvZ2NjL3RyZWUtdmVjdC1sb29wLmNjCisrKyBiL2djYy90cmVlLXZlY3QtbG9vcC5jYwpA QCAtODQ0LDgwICs4NDQsMTA2IEBAIHZlY3RfZml4dXBfc2NhbGFyX2N5Y2xlc193aXRoX3BhdHRl cm5zIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8pCiAgICBpbiBOVU1CRVJfT0ZfSVRFUkFUSU9O U00xLiAgUGxhY2UgdGhlIGNvbmRpdGlvbiB1bmRlciB3aGljaCB0aGUKICAgIG5pdGVyIGluZm9y bWF0aW9uIGhvbGRzIGluIEFTU1VNUFRJT05TLgogCi0gICBSZXR1cm4gdGhlIGxvb3AgZXhpdCBj b25kaXRpb24uICAqLworICAgUmV0dXJuIHRoZSBsb29wIGV4aXQgY29uZGl0aW9ucy4gICovCiAK IAotc3RhdGljIGdjb25kICoKK3N0YXRpYyB2ZWM8Z2NvbmQgKj4KIHZlY3RfZ2V0X2xvb3Bfbml0 ZXJzIChjbGFzcyBsb29wICpsb29wLCB0cmVlICphc3N1bXB0aW9ucywKIAkJICAgICAgdHJlZSAq bnVtYmVyX29mX2l0ZXJhdGlvbnMsIHRyZWUgKm51bWJlcl9vZl9pdGVyYXRpb25zbTEpCiB7Ci0g IGVkZ2UgZXhpdCA9IHNpbmdsZV9leGl0IChsb29wKTsKKyAgYXV0b192ZWM8ZWRnZT4gZXhpdHMg PSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKTsKKyAgdmVjPGdjb25kICo+IGNvbmRzOworICBj b25kcy5jcmVhdGUgKGV4aXRzLmxlbmd0aCAoKSk7CiAgIGNsYXNzIHRyZWVfbml0ZXJfZGVzYyBu aXRlcl9kZXNjOwogICB0cmVlIG5pdGVyX2Fzc3VtcHRpb25zLCBuaXRlciwgbWF5X2JlX3plcm87 Ci0gIGdjb25kICpjb25kID0gZ2V0X2xvb3BfZXhpdF9jb25kaXRpb24gKGxvb3ApOwogCiAgICph c3N1bXB0aW9ucyA9IGJvb2xlYW5fdHJ1ZV9ub2RlOwogICAqbnVtYmVyX29mX2l0ZXJhdGlvbnNt MSA9IGNocmVjX2RvbnRfa25vdzsKICAgKm51bWJlcl9vZl9pdGVyYXRpb25zID0gY2hyZWNfZG9u dF9rbm93OworCiAgIERVTVBfVkVDVF9TQ09QRSAoImdldF9sb29wX25pdGVycyIpOwogCi0gIGlm ICghZXhpdCkKLSAgICByZXR1cm4gY29uZDsKKyAgaWYgKGV4aXRzLmlzX2VtcHR5ICgpKQorICAg IHJldHVybiBjb25kczsKKworICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCisgICAgZHVtcF9wcmlu dGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwgIkxvb3AgaGFzICVkIGV4aXRzLlxuIiwK KwkJICAgICBleGl0cy5sZW5ndGggKCkpOwogCi0gIG1heV9iZV96ZXJvID0gTlVMTF9UUkVFOwot ICBpZiAoIW51bWJlcl9vZl9pdGVyYXRpb25zX2V4aXRfYXNzdW1wdGlvbnMgKGxvb3AsIGV4aXQs ICZuaXRlcl9kZXNjLCBOVUxMKQotICAgICAgfHwgY2hyZWNfY29udGFpbnNfdW5kZXRlcm1pbmVk IChuaXRlcl9kZXNjLm5pdGVyKSkKLSAgICByZXR1cm4gY29uZDsKKyAgZWRnZSBleGl0OworICB1 bnNpZ25lZCBpbnQgaTsKKyAgRk9SX0VBQ0hfVkVDX0VMVCAoZXhpdHMsIGksIGV4aXQpCisgICAg eworICAgICAgZ2NvbmQgKmNvbmQgPSBnZXRfZWRnZV9jb25kaXRpb24gKGV4aXQpOworICAgICAg aWYgKGNvbmQpCisJY29uZHMuc2FmZV9wdXNoIChjb25kKTsKIAotICBuaXRlcl9hc3N1bXB0aW9u cyA9IG5pdGVyX2Rlc2MuYXNzdW1wdGlvbnM7Ci0gIG1heV9iZV96ZXJvID0gbml0ZXJfZGVzYy5t YXlfYmVfemVybzsKLSAgbml0ZXIgPSBuaXRlcl9kZXNjLm5pdGVyOworICAgICAgaWYgKGR1bXBf ZW5hYmxlZF9wICgpKQorCWR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24s ICJBbmFseXppbmcgZXhpdCAlZC4uLlxuIiwgaSk7CiAKLSAgaWYgKG1heV9iZV96ZXJvICYmIGlu dGVnZXJfemVyb3AgKG1heV9iZV96ZXJvKSkKLSAgICBtYXlfYmVfemVybyA9IE5VTExfVFJFRTsK KyAgICAgIG1heV9iZV96ZXJvID0gTlVMTF9UUkVFOworICAgICAgaWYgKCFudW1iZXJfb2ZfaXRl cmF0aW9uc19leGl0X2Fzc3VtcHRpb25zIChsb29wLCBleGl0LCAmbml0ZXJfZGVzYywgTlVMTCkK KyAgICAgICAgICB8fCBjaHJlY19jb250YWluc191bmRldGVybWluZWQgKG5pdGVyX2Rlc2Mubml0 ZXIpKQorCWNvbnRpbnVlOwogCi0gIGlmIChtYXlfYmVfemVybykKLSAgICB7Ci0gICAgICBpZiAo Q09NUEFSSVNPTl9DTEFTU19QIChtYXlfYmVfemVybykpCisgICAgICBuaXRlcl9hc3N1bXB0aW9u cyA9IG5pdGVyX2Rlc2MuYXNzdW1wdGlvbnM7CisgICAgICBtYXlfYmVfemVybyA9IG5pdGVyX2Rl c2MubWF5X2JlX3plcm87CisgICAgICBuaXRlciA9IG5pdGVyX2Rlc2Mubml0ZXI7CisKKyAgICAg IGlmIChtYXlfYmVfemVybyAmJiBpbnRlZ2VyX3plcm9wIChtYXlfYmVfemVybykpCisJbWF5X2Jl X3plcm8gPSBOVUxMX1RSRUU7CisKKyAgICAgIGlmIChtYXlfYmVfemVybykKIAl7Ci0JICAvKiBU cnkgdG8gY29tYmluZSBtYXlfYmVfemVybyB3aXRoIGFzc3VtcHRpb25zLCB0aGlzIGNhbiBzaW1w bGlmeQotCSAgICAgY29tcHV0YXRpb24gb2Ygbml0ZXIgZXhwcmVzc2lvbi4gICovCi0JICBpZiAo bml0ZXJfYXNzdW1wdGlvbnMgJiYgIWludGVnZXJfbm9uemVyb3AgKG5pdGVyX2Fzc3VtcHRpb25z KSkKLQkgICAgbml0ZXJfYXNzdW1wdGlvbnMgPSBmb2xkX2J1aWxkMiAoVFJVVEhfQU5EX0VYUFIs IGJvb2xlYW5fdHlwZV9ub2RlLAotCQkJCQkgICAgIG5pdGVyX2Fzc3VtcHRpb25zLAotCQkJCQkg ICAgIGZvbGRfYnVpbGQxIChUUlVUSF9OT1RfRVhQUiwKLQkJCQkJCQkgIGJvb2xlYW5fdHlwZV9u b2RlLAotCQkJCQkJCSAgbWF5X2JlX3plcm8pKTsKKwkgIGlmIChDT01QQVJJU09OX0NMQVNTX1Ag KG1heV9iZV96ZXJvKSkKKwkgICAgeworCSAgICAgIC8qIFRyeSB0byBjb21iaW5lIG1heV9iZV96 ZXJvIHdpdGggYXNzdW1wdGlvbnMsIHRoaXMgY2FuIHNpbXBsaWZ5CisJCSBjb21wdXRhdGlvbiBv ZiBuaXRlciBleHByZXNzaW9uLiAgKi8KKwkgICAgICBpZiAobml0ZXJfYXNzdW1wdGlvbnMgJiYg IWludGVnZXJfbm9uemVyb3AgKG5pdGVyX2Fzc3VtcHRpb25zKSkKKwkJbml0ZXJfYXNzdW1wdGlv bnMgPSBmb2xkX2J1aWxkMiAoVFJVVEhfQU5EX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLAorCQkJ CQkJIG5pdGVyX2Fzc3VtcHRpb25zLAorCQkJCQkJIGZvbGRfYnVpbGQxIChUUlVUSF9OT1RfRVhQ UiwKKwkJCQkJCQkgICAgICBib29sZWFuX3R5cGVfbm9kZSwKKwkJCQkJCQkgICAgICBtYXlfYmVf emVybykpOworCSAgICAgIGVsc2UKKwkJbml0ZXIgPSBmb2xkX2J1aWxkMyAoQ09ORF9FWFBSLCBU UkVFX1RZUEUgKG5pdGVyKSwgbWF5X2JlX3plcm8sCisJCQkJICAgICBidWlsZF9pbnRfY3N0IChU UkVFX1RZUEUgKG5pdGVyKSwgMCksCisJCQkJICAgICByZXdyaXRlX3RvX25vbl90cmFwcGluZ19v dmVyZmxvdyAobml0ZXIpKTsKKworCSAgICAgIG1heV9iZV96ZXJvID0gTlVMTF9UUkVFOworCSAg ICB9CisJICBlbHNlIGlmIChpbnRlZ2VyX25vbnplcm9wIChtYXlfYmVfemVybykgJiYgaSA9PSAw KQorCSAgICB7CisJICAgICAgKm51bWJlcl9vZl9pdGVyYXRpb25zbTEgPSBidWlsZF9pbnRfY3N0 IChUUkVFX1RZUEUgKG5pdGVyKSwgMCk7CisJICAgICAgKm51bWJlcl9vZl9pdGVyYXRpb25zID0g YnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChuaXRlciksIDEpOworCSAgICAgIGNvbnRpbnVlOwor CSAgICB9CiAJICBlbHNlCi0JICAgIG5pdGVyID0gZm9sZF9idWlsZDMgKENPTkRfRVhQUiwgVFJF RV9UWVBFIChuaXRlciksIG1heV9iZV96ZXJvLAotCQkJCSBidWlsZF9pbnRfY3N0IChUUkVFX1RZ UEUgKG5pdGVyKSwgMCksCi0JCQkJIHJld3JpdGVfdG9fbm9uX3RyYXBwaW5nX292ZXJmbG93IChu aXRlcikpOworCSAgICBjb250aW51ZTsKKyAgICAgICB9CiAKLQkgIG1heV9iZV96ZXJvID0gTlVM TF9UUkVFOwotCX0KLSAgICAgIGVsc2UgaWYgKGludGVnZXJfbm9uemVyb3AgKG1heV9iZV96ZXJv KSkKKyAgICAgIC8qIExvb3AgYXNzdW1wdGlvbnMgYXJlIGJhc2VkIG9mZiB0aGUgbm9ybWFsIGV4 aXQuICAqLworICAgICAgaWYgKGkgPT0gMCkKIAl7Ci0JICAqbnVtYmVyX29mX2l0ZXJhdGlvbnNt MSA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAwKTsKLQkgICpudW1iZXJfb2Zf aXRlcmF0aW9ucyA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAxKTsKLQkgIHJl dHVybiBjb25kOworCSAgKmFzc3VtcHRpb25zID0gbml0ZXJfYXNzdW1wdGlvbnM7CisJICAqbnVt YmVyX29mX2l0ZXJhdGlvbnNtMSA9IG5pdGVyOworCisJICAvKiBXZSB3YW50IHRoZSBudW1iZXIg b2YgbG9vcCBoZWFkZXIgZXhlY3V0aW9ucyB3aGljaCBpcyB0aGUgbnVtYmVyCisJICAgICBvZiBs YXRjaCBleGVjdXRpb25zIHBsdXMgb25lLgorCSAgICAgPz8/ICBGb3IgVUlOVF9NQVggbGF0Y2gg ZXhlY3V0aW9ucyB0aGlzIG51bWJlciBvdmVyZmxvd3MgdG8gemVybworCSAgICAgZm9yIGxvb3Bz IGxpa2UgZG8geyBuKys7IH0gd2hpbGUgKG4gIT0gMCk7ICAqLworCSAgaWYgKG5pdGVyICYmICFj aHJlY19jb250YWluc191bmRldGVybWluZWQgKG5pdGVyKSkKKwkgICAgbml0ZXIgPSBmb2xkX2J1 aWxkMiAoUExVU19FWFBSLCBUUkVFX1RZUEUgKG5pdGVyKSwKKwkJCQkgdW5zaGFyZV9leHByIChu aXRlciksCisJCQkJIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAxKSk7CisJICAq bnVtYmVyX29mX2l0ZXJhdGlvbnMgPSBuaXRlcjsKIAl9Ci0gICAgICBlbHNlCi0JcmV0dXJuIGNv bmQ7CiAgICAgfQogCi0gICphc3N1bXB0aW9ucyA9IG5pdGVyX2Fzc3VtcHRpb25zOwotICAqbnVt YmVyX29mX2l0ZXJhdGlvbnNtMSA9IG5pdGVyOwotCi0gIC8qIFdlIHdhbnQgdGhlIG51bWJlciBv ZiBsb29wIGhlYWRlciBleGVjdXRpb25zIHdoaWNoIGlzIHRoZSBudW1iZXIKLSAgICAgb2YgbGF0 Y2ggZXhlY3V0aW9ucyBwbHVzIG9uZS4KLSAgICAgPz8/ICBGb3IgVUlOVF9NQVggbGF0Y2ggZXhl Y3V0aW9ucyB0aGlzIG51bWJlciBvdmVyZmxvd3MgdG8gemVybwotICAgICBmb3IgbG9vcHMgbGlr ZSBkbyB7IG4rKzsgfSB3aGlsZSAobiAhPSAwKTsgICovCi0gIGlmIChuaXRlciAmJiAhY2hyZWNf Y29udGFpbnNfdW5kZXRlcm1pbmVkIChuaXRlcikpCi0gICAgbml0ZXIgPSBmb2xkX2J1aWxkMiAo UExVU19FWFBSLCBUUkVFX1RZUEUgKG5pdGVyKSwgdW5zaGFyZV9leHByIChuaXRlciksCi0JCQkg IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAxKSk7Ci0gICpudW1iZXJfb2ZfaXRl cmF0aW9ucyA9IG5pdGVyOworICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCisgICAgZHVtcF9wcmlu dGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwgIkFsbCBsb29wIGV4aXRzIHN1Y2Nlc3Nm dWxseSBhbmFseXplZC5cbiIpOwogCi0gIHJldHVybiBjb25kOworICByZXR1cm4gY29uZHM7CiB9 CiAKIC8qIEZ1bmN0aW9uIGJiX2luX2xvb3BfcApAQCAtMTQ1NSw3ICsxNDgxLDggQEAgdmVjdF9j b21wdXRlX3NpbmdsZV9zY2FsYXJfaXRlcmF0aW9uX2Nvc3QgKGxvb3BfdmVjX2luZm8gbG9vcF92 aW5mbykKIAogICAgVmVyaWZ5IHRoYXQgY2VydGFpbiBDRkcgcmVzdHJpY3Rpb25zIGhvbGQsIGlu Y2x1ZGluZzoKICAgIC0gdGhlIGxvb3AgaGFzIGEgcHJlLWhlYWRlcgotICAgLSB0aGUgbG9vcCBo YXMgYSBzaW5nbGUgZW50cnkgYW5kIGV4aXQKKyAgIC0gdGhlIGxvb3AgaGFzIGEgc2luZ2xlIGVu dHJ5CisgICAtIG5lc3RlZCBsb29wcyBjYW4gaGF2ZSBvbmx5IGEgc2luZ2xlIGV4aXQuCiAgICAt IHRoZSBsb29wIGV4aXQgY29uZGl0aW9uIGlzIHNpbXBsZSBlbm91Z2gKICAgIC0gdGhlIG51bWJl ciBvZiBpdGVyYXRpb25zIGNhbiBiZSBhbmFseXplZCwgaS5lLCBhIGNvdW50YWJsZSBsb29wLiAg VGhlCiAgICAgIG5pdGVyIGNvdWxkIGJlIGFuYWx5emVkIHVuZGVyIHNvbWUgYXNzdW1wdGlvbnMu ICAqLwpAQCAtMTQ4NCwxMSArMTUxMSw2IEBAIHZlY3RfYW5hbHl6ZV9sb29wX2Zvcm0gKGNsYXNz IGxvb3AgKmxvb3AsIHZlY3RfbG9vcF9mb3JtX2luZm8gKmluZm8pCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAoZXhpdC1iYikgICovCiAKLSAg ICAgIGlmIChsb29wLT5udW1fbm9kZXMgIT0gMikKLQlyZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVy ZV9hdCAodmVjdF9sb2NhdGlvbiwKLQkJCQkgICAgICAgIm5vdCB2ZWN0b3JpemVkOiIKLQkJCQkg ICAgICAgIiBjb250cm9sIGZsb3cgaW4gbG9vcC5cbiIpOwotCiAgICAgICBpZiAoZW1wdHlfYmxv Y2tfcCAobG9vcC0+aGVhZGVyKSkKIAlyZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAodmVj dF9sb2NhdGlvbiwKIAkJCQkgICAgICAgIm5vdCB2ZWN0b3JpemVkOiBlbXB0eSBsb29wLlxuIik7 CkBAIC0xNTU5LDExICsxNTgxLDEzIEBAIHZlY3RfYW5hbHl6ZV9sb29wX2Zvcm0gKGNsYXNzIGxv b3AgKmxvb3AsIHZlY3RfbG9vcF9mb3JtX2luZm8gKmluZm8pCiAgICAgICAgIGR1bXBfcHJpbnRm X2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sCiAJCQkgIkNvbnNpZGVyaW5nIG91dGVyLWxv b3AgdmVjdG9yaXphdGlvbi5cbiIpOwogICAgICAgaW5mby0+aW5uZXJfbG9vcF9jb25kID0gaW5u ZXIubG9vcF9jb25kOworCisgICAgICBpZiAoIXNpbmdsZV9leGl0IChsb29wKSkKKwlyZXR1cm4g b3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAodmVjdF9sb2NhdGlvbiwKKwkJCQkgICAgICAgIm5vdCB2 ZWN0b3JpemVkOiBtdWx0aXBsZSBleGl0cy5cbiIpOworCiAgICAgfQogCi0gIGlmICghc2luZ2xl X2V4aXQgKGxvb3ApKQotICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xv Y2F0aW9uLAotCQkJCSAgICJub3QgdmVjdG9yaXplZDogbXVsdGlwbGUgZXhpdHMuXG4iKTsKICAg aWYgKEVER0VfQ09VTlQgKGxvb3AtPmhlYWRlci0+cHJlZHMpICE9IDIpCiAgICAgcmV0dXJuIG9w dF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sCiAJCQkJICAgIm5vdCB2ZWN0b3Jp emVkOiIKQEAgLTE1NzksMjEgKzE2MDMsNDUgQEAgdmVjdF9hbmFseXplX2xvb3BfZm9ybSAoY2xh c3MgbG9vcCAqbG9vcCwgdmVjdF9sb29wX2Zvcm1faW5mbyAqaW5mbykKIAkJCQkgICAibm90IHZl Y3Rvcml6ZWQ6IGxhdGNoIGJsb2NrIG5vdCBlbXB0eS5cbiIpOwogCiAgIC8qIE1ha2Ugc3VyZSB0 aGUgZXhpdCBpcyBub3QgYWJub3JtYWwuICAqLwotICBlZGdlIGUgPSBzaW5nbGVfZXhpdCAobG9v cCk7Ci0gIGlmIChlLT5mbGFncyAmIEVER0VfQUJOT1JNQUwpCisgIGF1dG9fdmVjPGVkZ2U+IGV4 aXRzID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7CisgIGVkZ2UgbmV4aXQgPSBub3JtYWxf ZXhpdCAobG9vcCk7CisgIGZvciAoZWRnZSBlIDogZXhpdHMpCisgICAgeworICAgICAgaWYgKGUt PmZsYWdzICYgRURHRV9BQk5PUk1BTCkKKwlyZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAo dmVjdF9sb2NhdGlvbiwKKwkJCQkgICAgICAgIm5vdCB2ZWN0b3JpemVkOiIKKwkJCQkgICAgICAg IiBhYm5vcm1hbCBsb29wIGV4aXQgZWRnZS5cbiIpOworICAgICAgLyogRWFybHkgYnJlYWsgQkIg bXVzdCBiZSBhZnRlciB0aGUgbWFpbiBleGl0IEJCLiAgSW4gdGhlb3J5IHdlIHNob3VsZAorCSBi ZSBhYmxlIHRvIHZlY3Rvcml6ZSB0aGUgaW52ZXJzZSBvcmRlciwgYnV0IHRoZSBjdXJyZW50IGZs b3cgaW4gdGhlCisJIHRoZSB2ZWN0b3JpemVyIGFsd2F5cyBhc3N1bWVzIHlvdSB1cGRhdGUgc3Vj Y2VzcyBQSEkgbm9kZXMsIG5vdAorCSBwcmVkcy4gICovCisgICAgICBpZiAoZSAhPSBuZXhpdCAm JiAhZG9taW5hdGVkX2J5X3AgKENESV9ET01JTkFUT1JTLCBuZXhpdC0+c3JjLCBlLT5zcmMpKQor CXJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLAorCQkJCSAgICAg ICAibm90IHZlY3Rvcml6ZWQ6IgorCQkJCSAgICAgICAiIGFibm9ybWFsIGxvb3AgZXhpdCBlZGdl IG9yZGVyLlxuIik7CisgICAgfQorCisgIGlmIChleGl0cy5sZW5ndGggKCkgPiAyKQogICAgIHJl dHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLAogCQkJCSAgICJub3Qg dmVjdG9yaXplZDoiCi0JCQkJICAgIiBhYm5vcm1hbCBsb29wIGV4aXQgZWRnZS5cbiIpOwotCi0g IGluZm8tPmxvb3BfY29uZAorCQkJCSAgICIgdG9vIG1hbnkgZXhpdHMuIE9ubHkgMSBhZGRpdGlv bmFsIGV4aXQiCisJCQkJICAgIiBzdXBwb3J0ZWQuXG4iKTsKKyAgaWYgKGxvb3AtPm51bV9ub2Rl cyAhPSAyICsgZXhpdHMubGVuZ3RoICgpIC0gMSkKKyAgICByZXR1cm4gb3B0X3Jlc3VsdDo6ZmFp bHVyZV9hdCAodmVjdF9sb2NhdGlvbiwKKwkJCQkgICAibm90IHZlY3Rvcml6ZWQ6IgorCQkJCSAg ICIgdW5zdXBwb3J0ZWQgY29udHJvbCBmbG93IGluIGxvb3AuXG4iKTsKKyAgaW5mby0+Y29uZHMK ICAgICA9IHZlY3RfZ2V0X2xvb3Bfbml0ZXJzIChsb29wLCAmaW5mby0+YXNzdW1wdGlvbnMsCiAJ CQkgICAgJmluZm8tPm51bWJlcl9vZl9pdGVyYXRpb25zLAogCQkJICAgICZpbmZvLT5udW1iZXJf b2ZfaXRlcmF0aW9uc20xKTsKLSAgaWYgKCFpbmZvLT5sb29wX2NvbmQpCisKKyAgaWYgKGluZm8t PmNvbmRzLmlzX2VtcHR5ICgpKQogICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0CiAg ICAgICAodmVjdF9sb2NhdGlvbiwKICAgICAgICAibm90IHZlY3Rvcml6ZWQ6IGNvbXBsaWNhdGVk IGV4aXQgY29uZGl0aW9uLlxuIik7CiAKKyAgaW5mby0+bG9vcF9jb25kID0gaW5mby0+Y29uZHNb MF07CisKICAgaWYgKGludGVnZXJfemVyb3AgKGluZm8tPmFzc3VtcHRpb25zKQogICAgICAgfHwg IWluZm8tPm51bWJlcl9vZl9pdGVyYXRpb25zCiAgICAgICB8fCBjaHJlY19jb250YWluc191bmRl dGVybWluZWQgKGluZm8tPm51bWJlcl9vZl9pdGVyYXRpb25zKSkKQEAgLTE2MzgsOCArMTY4Niwy MiBAQCB2ZWN0X2NyZWF0ZV9sb29wX3ZpbmZvIChjbGFzcyBsb29wICpsb29wLCB2ZWNfaW5mb19z aGFyZWQgKnNoYXJlZCwKICAgaWYgKCFpbnRlZ2VyX29uZXAgKGluZm8tPmFzc3VtcHRpb25zKSAm JiAhbWFpbl9sb29wX2luZm8pCiAgICAgTE9PUF9WSU5GT19OSVRFUlNfQVNTVU1QVElPTlMgKGxv b3BfdmluZm8pID0gaW5mby0+YXNzdW1wdGlvbnM7CiAKLSAgc3RtdF92ZWNfaW5mbyBsb29wX2Nv bmRfaW5mbyA9IGxvb3BfdmluZm8tPmxvb2t1cF9zdG10IChpbmZvLT5sb29wX2NvbmQpOwotICBT VE1UX1ZJTkZPX1RZUEUgKGxvb3BfY29uZF9pbmZvKSA9IGxvb3BfZXhpdF9jdHJsX3ZlY19pbmZv X3R5cGU7CisgIGJvb2wgbG9vcF9pdl9jb25kID0gdHJ1ZTsKKyAgZm9yIChnY29uZCAqY29uZCA6 IGluZm8tPmNvbmRzKQorICAgIHsKKyAgICAgIGlmICghbG9vcF9pdl9jb25kKQorCXsKKwkgIHN0 bXRfdmVjX2luZm8gbG9vcF9jb25kX2luZm8gPSBsb29wX3ZpbmZvLT5sb29rdXBfc3RtdCAoY29u ZCk7CisJICBTVE1UX1ZJTkZPX1RZUEUgKGxvb3BfY29uZF9pbmZvKSA9IGxvb3BfZXhpdF9jdHJs X3ZlY19pbmZvX3R5cGU7CisJICBMT09QX1ZJTkZPX0xPT1BfQ09ORFMgKGxvb3BfdmluZm8pLnNh ZmVfcHVzaCAoY29uZCk7CisJfQorICAgICAgbG9vcF9pdl9jb25kID0gZmFsc2U7CisgICAgfQor CisgIC8qIENoZWNrIHRvIHNlZSBpZiB3ZSdyZSB2ZWN0b3JpemluZyBtdWx0aXBsZSBleGl0cy4g ICovCisgIExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKQorICAgID0gIUxPT1Bf VklORk9fTE9PUF9DT05EUyAobG9vcF92aW5mbykuaXNfZW1wdHkgKCk7CisKICAgaWYgKGluZm8t PmlubmVyX2xvb3BfY29uZCkKICAgICB7CiAgICAgICBzdG10X3ZlY19pbmZvIGlubmVyX2xvb3Bf Y29uZF9pbmZvCkBAIC0yMjcwLDEwICsyMzMyLDEzIEBAIHZlY3RfZGV0ZXJtaW5lX3BhcnRpYWxf dmVjdG9yc19hbmRfcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLAogICBib29sIG5l ZWRfcGVlbGluZ19vcl9wYXJ0aWFsX3ZlY3RvcnNfcAogICAgID0gdmVjdF9uZWVkX3BlZWxpbmdf b3JfcGFydGlhbF92ZWN0b3JzX3AgKGxvb3BfdmluZm8pOwogCi0gIC8qIERlY2lkZSB3aGV0aGVy IHRvIHZlY3Rvcml6ZSB0aGUgbG9vcCB3aXRoIHBhcnRpYWwgdmVjdG9ycy4gICovCisgIC8qIERl Y2lkZSB3aGV0aGVyIHRvIHZlY3Rvcml6ZSB0aGUgbG9vcCB3aXRoIHBhcnRpYWwgdmVjdG9ycy4g IEN1cnJlbnRseQorICAgICBlYXJseSBicmVhayB2ZWN0b3JpemF0aW9uIGRvZXMgbm90IHN1cHBv cnQgcGFydGlhbCB2ZWN0b3JzIGFzIHdlIGhhdmUKKyAgICAgdG8gcGVlbCBhIHNjYWxhciBsb29w IHRoYXQgd2UgY2FuJ3QgdmVjdG9yaXplLiAgKi8KICAgTE9PUF9WSU5GT19VU0lOR19QQVJUSUFM X1ZFQ1RPUlNfUCAobG9vcF92aW5mbykgPSBmYWxzZTsKICAgTE9PUF9WSU5GT19FUElMX1VTSU5H X1BBUlRJQUxfVkVDVE9SU19QIChsb29wX3ZpbmZvKSA9IGZhbHNlOwogICBpZiAoTE9PUF9WSU5G T19DQU5fVVNFX1BBUlRJQUxfVkVDVE9SU19QIChsb29wX3ZpbmZvKQorICAgICAgJiYgIUxPT1Bf VklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKQogICAgICAgJiYgbmVlZF9wZWVsaW5nX29y X3BhcnRpYWxfdmVjdG9yc19wKQogICAgIHsKICAgICAgIC8qIEZvciBwYXJ0aWFsLXZlY3Rvci11 c2FnZT0xLCB0cnkgdG8gcHVzaCB0aGUgaGFuZGxpbmcgb2YgcGFydGlhbApAQCAtMjc0NiwxMyAr MjgxMSwxNCBAQCBzdGFydF9vdmVyOgogCiAgIC8qIElmIGFuIGVwaWxvZ3VlIGxvb3AgaXMgcmVx dWlyZWQgbWFrZSBzdXJlIHdlIGNhbiBjcmVhdGUgb25lLiAgKi8KICAgaWYgKExPT1BfVklORk9f UEVFTElOR19GT1JfR0FQUyAobG9vcF92aW5mbykKLSAgICAgIHx8IExPT1BfVklORk9fUEVFTElO R19GT1JfTklURVIgKGxvb3BfdmluZm8pKQorICAgICAgfHwgTE9PUF9WSU5GT19QRUVMSU5HX0ZP Ul9OSVRFUiAobG9vcF92aW5mbykKKyAgICAgIHx8IExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChs b29wX3ZpbmZvKSkKICAgICB7CiAgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCiAgICAgICAg IGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sICJlcGlsb2cgbG9vcCBy ZXF1aXJlZFxuIik7CiAgICAgICBpZiAoIXZlY3RfY2FuX2FkdmFuY2VfaXZzX3AgKGxvb3Bfdmlu Zm8pCi0JICB8fCAhc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChMT09QX1ZJTkZPX0xPT1Ag KGxvb3BfdmluZm8pLAotCQkJCQkgICBzaW5nbGVfZXhpdCAoTE9PUF9WSU5GT19MT09QCisJICB8 fCAhc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChsb29wX3ZpbmZvLAorCQkJCQkgICBub3Jt YWxfZXhpdCAoTE9PUF9WSU5GT19MT09QCiAJCQkJCQkJIChsb29wX3ZpbmZvKSkpKQogICAgICAg ICB7CiAJICBvayA9IG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sCkBAIC0z MjM5LDYgKzMzMDUsOCBAQCB2ZWN0X2FuYWx5emVfbG9vcCAoY2xhc3MgbG9vcCAqbG9vcCwgdmVj X2luZm9fc2hhcmVkICpzaGFyZWQpCiAJCSAgICAgIioqKioqIENob29zaW5nIHZlY3RvciBtb2Rl ICVzXG4iLAogCQkgICAgIEdFVF9NT0RFX05BTUUgKGZpcnN0X2xvb3BfdmluZm8tPnZlY3Rvcl9t b2RlKSk7CiAKKyAgbG9vcF9mb3JtX2luZm8uY29uZHMucmVsZWFzZSAoKTsKKwogICAvKiBPbmx5 IHZlY3Rvcml6ZSBlcGlsb2d1ZXMgaWYgUEFSQU1fVkVDVF9FUElMT0dVRVNfTk9NQVNLIGlzCiAg ICAgIGVuYWJsZWQsIFNJTURVSUQgaXMgbm90IHNldCwgaXQgaXMgdGhlIGlubmVybW9zdCBsb29w IGFuZCB3ZSBoYXZlCiAgICAgIGVpdGhlciBhbHJlYWR5IGZvdW5kIHRoZSBsb29wJ3MgU0lNRExF TiBvciB0aGVyZSB3YXMgbm8gU0lNRExFTiB0bwpAQCAtMzM1MCw2ICszNDE4LDggQEAgdmVjdF9h bmFseXplX2xvb3AgKGNsYXNzIGxvb3AgKmxvb3AsIHZlY19pbmZvX3NoYXJlZCAqc2hhcmVkKQog CQkJICAgKGZpcnN0X2xvb3BfdmluZm8tPmVwaWxvZ3VlX3ZpbmZvc1swXS0+dmVjdG9yX21vZGUp KTsKICAgICB9CiAKKyAgbG9vcF9mb3JtX2luZm8uY29uZHMucmVsZWFzZSAoKTsKKwogICByZXR1 cm4gZmlyc3RfbG9vcF92aW5mbzsKIH0KIApAQCAtNTQwNyw3ICs1NDc3LDcgQEAgdmVjdF9jcmVh dGVfZXBpbG9nX2Zvcl9yZWR1Y3Rpb24gKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywKICAgYmFz aWNfYmxvY2sgZXhpdF9iYjsKICAgdHJlZSBzY2FsYXJfZGVzdDsKICAgdHJlZSBzY2FsYXJfdHlw ZTsKLSAgZ2ltcGxlICpuZXdfcGhpID0gTlVMTCwgKnBoaTsKKyAgZ2ltcGxlICpuZXdfcGhpID0g TlVMTCwgKnBoaSA9IE5VTEw7CiAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGV4aXRfZ3NpOwogICB0 cmVlIG5ld190ZW1wID0gTlVMTF9UUkVFLCBuZXdfbmFtZSwgbmV3X3NjYWxhcl9kZXN0OwogICBn aW1wbGUgKmVwaWxvZ19zdG10ID0gTlVMTDsKQEAgLTU2MjksNyArNTY5OSw3IEBAIHZlY3RfY3Jl YXRlX2VwaWxvZ19mb3JfcmVkdWN0aW9uIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sCiAgICAg ICAgICBTdG9yZSB0aGVtIGluIE5FV19QSElTLiAgKi8KICAgaWYgKGRvdWJsZV9yZWR1YykKICAg ICBsb29wID0gb3V0ZXJfbG9vcDsKLSAgZXhpdF9iYiA9IHNpbmdsZV9leGl0IChsb29wKS0+ZGVz dDsKKyAgZXhpdF9iYiA9IG5vcm1hbF9leGl0IChsb29wKS0+ZGVzdDsKICAgZXhpdF9nc2kgPSBn c2lfYWZ0ZXJfbGFiZWxzIChleGl0X2JiKTsKICAgcmVkdWNfaW5wdXRzLmNyZWF0ZSAoc2xwX25v ZGUgPyB2ZWNfbnVtIDogbmNvcGllcyk7CiAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWNf bnVtOyBpKyspCkBAIC01NjQ1LDEwICs1NzE1LDM3IEBAIHZlY3RfY3JlYXRlX2VwaWxvZ19mb3Jf cmVkdWN0aW9uIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sCiAJICBwaGkgPSBjcmVhdGVfcGhp X25vZGUgKG5ld19kZWYsIGV4aXRfYmIpOwogCSAgaWYgKGopCiAJICAgIGRlZiA9IGdpbXBsZV9n ZXRfbGhzIChTVE1UX1ZJTkZPX1ZFQ19TVE1UUyAocmRlZl9pbmZvKVtqXSk7Ci0JICBTRVRfUEhJ X0FSR19ERUYgKHBoaSwgc2luZ2xlX2V4aXQgKGxvb3ApLT5kZXN0X2lkeCwgZGVmKTsKKwkgIFNF VF9QSElfQVJHX0RFRiAocGhpLCBub3JtYWxfZXhpdCAobG9vcCktPmRlc3RfaWR4LCBkZWYpOwog CSAgbmV3X2RlZiA9IGdpbXBsZV9jb252ZXJ0ICgmc3RtdHMsIHZlY3R5cGUsIG5ld19kZWYpOwog CSAgcmVkdWNfaW5wdXRzLnF1aWNrX3B1c2ggKG5ld19kZWYpOwogCX0KKwkvKiBVcGRhdGUgdGhl IG90aGVyIGV4aXRzLiAgKi8KKwlpZiAoTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3Bfdmlu Zm8pKQorCSAgeworCSAgICBhdXRvX3ZlYzxlZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRn ZXMgKGxvb3ApOworCSAgICBncGhpX2l0ZXJhdG9yIGdzaSwgZ3NpMTsKKwkgICAgZm9yICh1bnNp Z25lZCBpID0gMTsgaSA8IGV4aXRzLmxlbmd0aCAoKTsgaSsrKQorCSAgICAgIHsKKwkJLyogRmlu ZCB0aGUgcGhpIG5vZGUgdG8gcHJvcGFnZXQgaW50byB0aGUgZXhpdCBibG9jayBmb3IgZWFjaAor CQkgICBleGl0IGVkZ2UuICAqLworCQllZGdlIGV4aXQgPSBleGl0c1tpXTsKKwkJZm9yIChnc2kg PSBnc2lfc3RhcnRfcGhpcyAoZXhpdF9iYiksCisJCSAgICAgZ3NpMSA9IGdzaV9zdGFydF9waGlz IChleGl0LT5zcmMpOworCQkgICAgICFnc2lfZW5kX3AgKGdzaSkgJiYgIWdzaV9lbmRfcCAoZ3Np MSk7CisJCSAgICAgZ3NpX25leHQgKCZnc2kpLCBnc2lfbmV4dCAoJmdzaTEpKQorCQkgIHsKKwkJ ICAgIC8qIFRoZXJlIHJlYWxseSBzaG91bGQgYmUgYSBmdW5jdGlvbiB0byBqdXN0IGdldCB0aGUg bnVtYmVyCisJCSAgICAgICBvZiBwaGlzIGluc2lkZSBhIGJiLiAgKi8KKwkJICAgIGlmIChwaGkg JiYgcGhpID09IGdzaS5waGkgKCkpCisJCSAgICAgIHsKKwkJCWdwaGkgKnBoaTEgPSBnc2kxLnBo aSAoKTsKKwkJCVNFVF9QSElfQVJHX0RFRiAocGhpLCBleGl0LT5kZXN0X2lkeCwKKwkJCQkJIFBI SV9SRVNVTFQgKHBoaTEpKTsKKwkJCWJyZWFrOworCQkgICAgICB9CisJCSAgfQorCSAgICAgIH0K KwkgIH0KICAgICAgIGdzaV9pbnNlcnRfc2VxX2JlZm9yZSAoJmV4aXRfZ3NpLCBzdG10cywgR1NJ X1NBTUVfU1RNVCk7CiAgICAgfQogCkBAIC05MzU4LDggKzk0NTUsMjIgQEAgdmVjdG9yaXphYmxl X2luZHVjdGlvbiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLAogICAgIGR1bXBfcHJpbnRmX2xv YyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sICJ0cmFuc2Zvcm0gaW5kdWN0aW9uIHBoaS5cbiIp OwogCiAgIHBlID0gbG9vcF9wcmVoZWFkZXJfZWRnZSAoaXZfbG9vcCk7Ci0gIC8qIEZpbmQgdGhl IGZpcnN0IGluc2VydGlvbiBwb2ludCBpbiB0aGUgQkIuICAqLworICAvKiBGaW5kIHRoZSBmaXJz dCBpbnNlcnRpb24gcG9pbnQgaW4gdGhlIEJCLiAgSWYgd2UncmUgdmVjdG9yemluZyBhIGJsb2Nr IHRoYXQKKyAgICAgY29udGFpbnMgYW4gZWFybHkgZXhpdCwgdGhlIElWIG5lZWRzIHRvIGJlIG1h dGVyaWFsaXplZCBpbiB0aGUgZmFsbAorICAgICB0aHJvdWdoIGJsb2NrIGFzIHdlIHNob3VsZG4n dCB1cGRhdGUgdGhlIElWIGlmIHdlJ3JlIGV4aXRpbmcuICAqLwogICBiYXNpY19ibG9jayBiYiA9 IGdpbXBsZV9iYiAocGhpKTsKKyAgaWYgKExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3Zp bmZvKSkKKyAgICB7CisgICAgICBmb3IgKGdjb25kICpjb25kIDogTE9PUF9WSU5GT19MT09QX0NP TkRTIChsb29wX3ZpbmZvKSkKKwl7CisJICBiYXNpY19ibG9jayBjb25kX2JiID0gZ2ltcGxlX2Ji IChjb25kKTsKKwkgIGlmIChjb25kX2JiID09IGJiKQorCSAgICB7CisJICAgICAgYmIgPSBGQUxM VEhSVV9FREdFIChjb25kX2JiKS0+ZGVzdDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAg ICB9CiAgIHNpID0gZ3NpX2FmdGVyX2xhYmVscyAoYmIpOwogCiAgIC8qIEZvciBTTFAgaW5kdWN0 aW9uIHdlIGhhdmUgdG8gZ2VuZXJhdGUgc2V2ZXJhbCBJVnMgYXMgZm9yIGV4YW1wbGUKQEAgLTk5 OTksMTMgKzEwMTEwLDI0IEBAIHZlY3Rvcml6YWJsZV9saXZlX29wZXJhdGlvbiAodmVjX2luZm8g KnZpbmZvLAogCSAgIG5ld190cmVlID0gbGFuZV9leHRyYWN0IDx2ZWNfbGhzJywgLi4uPjsKIAkg ICBsaHMnID0gbmV3X3RyZWU7ICAqLwogCisgICAgICAvKiBXaGVuIHZlY3Rvcml6aW5nIGFuIGVh cmx5IGJyZWFrLCBhbnkgbGl2ZSBzdGF0ZW1lbnQgdGhhdCBpcyB1c2VkCisJIG91dHNpZGUgb2Yg dGhlIGxvb3AgYXJlIGRlYWQuICBUaGUgbG9vcCB3aWxsIG5ldmVyIGdldCB0byB0aGVtLgorCSBX ZSBjb3VsZCBjaGFuZ2UgdGhlIGxpdmVuZXNzIHZhbHVlIGR1cmluZyBhbmFseXNpcyBpbnN0ZWFk IGJ1dCBzaW5jZQorCSB0aGUgYmVsb3cgY29kZSBpcyBpbnZhbGlkIGFueXdheSBqdXN0IGlnbm9y ZSBpdCBkdXJpbmcgY29kZWdlbi4gICovCisgICAgICBpZiAoTE9PUF9WSU5GT19FQVJMWV9CUkVB S1MgKGxvb3BfdmluZm8pKQorCXJldHVybiB0cnVlOworCiAgICAgICBjbGFzcyBsb29wICpsb29w ID0gTE9PUF9WSU5GT19MT09QIChsb29wX3ZpbmZvKTsKLSAgICAgIGJhc2ljX2Jsb2NrIGV4aXRf YmIgPSBzaW5nbGVfZXhpdCAobG9vcCktPmRlc3Q7CisgICAgICBiYXNpY19ibG9jayBleGl0X2Ji ID0gbm9ybWFsX2V4aXQgKGxvb3ApLT5kZXN0OwogICAgICAgZ2NjX2Fzc2VydCAoc2luZ2xlX3By ZWRfcCAoZXhpdF9iYikpOwogCiAgICAgICB0cmVlIHZlY19saHNfcGhpID0gY29weV9zc2FfbmFt ZSAodmVjX2xocyk7CiAgICAgICBnaW1wbGUgKnBoaSA9IGNyZWF0ZV9waGlfbm9kZSAodmVjX2xo c19waGksIGV4aXRfYmIpOwotICAgICAgU0VUX1BISV9BUkdfREVGIChwaGksIHNpbmdsZV9leGl0 IChsb29wKS0+ZGVzdF9pZHgsIHZlY19saHMpOworICAgICAgLyogRm9yIGVhcmx5IGV4aXRzIHdl IG5lZWQgdG8gY29tcHV0ZSB0aGUgcmlnaHQgZXhpdC4gIFRoZSBjdXJyZW50CisJIGFwcHJvYWNo IHB1bnRzIHRvIGEgc2NhbGFyIGxvb3AgaW5zdGVhZC4gIElmIHdlIHdlcmUgdG8gdmVjdG9yaXpl CisJIHRoZSBleGl0IGNvbmRpdGlvbiBiZWxvdyBuZWVkcyB0byB0YWtlIGludG8gYWNjb3VudCB0 aGUgZGlmZmVyZW5jZQorCSBiZXR3ZWVuIGEgYGJyZWFrYCBlZGdlIGFuZCBhIGByZXR1cm5gIGVk Z2UuICAqLworICAgICAgU0VUX1BISV9BUkdfREVGIChwaGksIG5vcm1hbF9leGl0IChsb29wKS0+ ZGVzdF9pZHgsIHZlY19saHMpOwogCiAgICAgICBnaW1wbGVfc2VxIHN0bXRzID0gTlVMTDsKICAg ICAgIHRyZWUgbmV3X3RyZWU7CkBAIC0xMDQ0NCw3ICsxMDU2Niw4IEBAIHNjYWxlX3Byb2ZpbGVf Zm9yX3ZlY3RfbG9vcCAoY2xhc3MgbG9vcCAqbG9vcCwgdW5zaWduZWQgdmYpCiAgICAgICBzY2Fs ZV9sb29wX2ZyZXF1ZW5jaWVzIChsb29wLCBwKTsKICAgICB9CiAKLSAgZWRnZSBleGl0X2UgPSBz aW5nbGVfZXhpdCAobG9vcCk7CisgIGVkZ2UgZXhpdF9lID0gbm9ybWFsX2V4aXQgKGxvb3ApOwor CiAgIGV4aXRfZS0+cHJvYmFiaWxpdHkgPSBwcm9maWxlX3Byb2JhYmlsaXR5OjphbHdheXMgKCkg LyAobmV3X2VzdF9uaXRlciArIDEpOwogCiAgIGVkZ2UgZXhpdF9sID0gc2luZ2xlX3ByZWRfZWRn ZSAobG9vcC0+bGF0Y2gpOwpAQCAtMTA3NDcsNiArMTA4NzAsMTE1IEBAIHVwZGF0ZV9lcGlsb2d1 ZV9sb29wX3ZpbmZvIChjbGFzcyBsb29wICplcGlsb2d1ZSwgdHJlZSBhZHZhbmNlKQogICBlcGls b2d1ZV92aW5mby0+c2hhcmVkLT5zYXZlX2RhdGFyZWZzICgpOwogfQogCisvKiAgV2hlbiB2ZWN0 b3JpemluZyBlYXJseSBicmVhayBzdGF0ZW1lbnRzIGluc3RydWN0aW9ucyB0aGF0IGhhcHBlbiBi ZWZvcmUKKyAgICB0aGUgZWFybHkgYnJlYWsgaW4gdGhlIGN1cnJlbnQgQkIgbmVlZCB0byBiZSBt b3ZlZCB0byBhZnRlciB0aGUgZWFybHkKKyAgICBicmVhay4gIFRoaXMgZnVuY3Rpb24gZGVhbHMg d2l0aCB0aGF0IGFuZCBhc3N1bWVzIHRoYXQgYW55IHZhbGlkYXR5CisgICAgY2hlY2tzIGhhcyBh bHJlYWR5IGJlZW4gcGVyZm9ybWVkLgorCisgICAgV2hpbGUgbW92aW5nIHRoZSBpbnN0cnVjdGlv bnMgaWYgaXQgZW5jb3VudGVycyBhIFZVU0Ugb3IgVkRFRiBpdCB0aGVuCisgICAgY29ycmVjdHMg dGhlIFZVU0VTIGFzIGl0IG1vdmVzIHRoZSBzdGF0ZW1lbnRzIGFsb25nLiAgQ0hBSU5FRCBjb250 YWlucworICAgIHRoZSBsaXN0IG9mIFNTQV9OQU1FUyB0aGF0IGJlbG9uZyB0byB0aGUgZGVwZW5k ZW5jeSBjaGFpbiBvZiB0aGUgZWFybHkKKyAgICBicmVhayBjb25kaXRpb25hbC4gIEdERVNUIGlz IHRoZSBsb2NhdGlvbiBpbiB3aGljaCB0byBpbnNlcnQgdGhlIG5ldworICAgIHN0YXRlbWVudHMu ICBHU1RNVCBpcyB0aGUgaXRlcmF0b3IgdG8gd2FsayB1cCB0byBmaW5kIHN0YXRlbWVudHMgdG8K KyAgICBjb25zaWRlciBtb3ZpbmcuICBSRUFDSElOR19WVVNFIGNvbnRhaW5zIHRoZSBkb21pbmF0 aW5nIFZVU0UgZm91bmQgc28gZmFyCisgICAgYW5kIENVUlJFTlRfVkRFRiBjb250YWlucyB0aGUg bGFzdCBWREVGIHdlJ3ZlIHNlZW4uICBUaGVzZSBhcmUgdXBkYXRlZCBpbgorICAgIHByZS1vcmRl ciBhbmQgdXBkYXRlZCBpbiBwb3N0LW9yZGVyIGFmdGVyIG1vdmluZyB0aGUgaW5zdHJ1Y3Rpb24u ICAqLworCitzdGF0aWMgdm9pZAorbW92ZV9lYXJseV9leGl0X3N0bXRzIChoYXNoX3NldDx0cmVl PiAqY2hhaW5lZCwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdkZXN0LAorCQkgICAgICAgZ2ltcGxl X3N0bXRfaXRlcmF0b3IgKmdzdG10LCB0cmVlICpyZWFjaGluZ192dXNlLAorCQkgICAgICAgdHJl ZSAqY3VycmVudF92ZGVmKQoreworICBpZiAoZ3NpX2VuZF9wICgqZ3N0bXQpKQorICAgIHJldHVy bjsKKworICBnaW1wbGUgKnN0bXQgPSBnc2lfc3RtdCAoKmdzdG10KTsKKyAgaWYgKGdpbXBsZV9o YXNfb3BzIChzdG10KSkKKyAgICB7CisgICAgICB0cmVlIGRlc3QgPSBOVUxMX1RSRUU7CisgICAg ICAvKiBUcnkgdG8gZmluZCB0aGUgU1NBX05BTUUgYmVpbmcgZGVmaW5lZC4gIEZvciBTdGF0ZW1l bnRzIHdpdGggYW4gTEhTCisJIHVzZSB0aGUgTEhTLCBpZiBub3QsIGFzc3VtZSB0aGF0IHRoZSBm aXJzdCBhcmd1bWVudCBvZiBhIGNhbGwgaXMgdGhlCisJIHZhbHVlIGJlaW5nIGRlZmluZWQuICBl LmcuIE1BU0tFRF9MT0FEIGV0Yy4gICovCisgICAgICBpZiAoZ2ltcGxlX2hhc19saHMgKHN0bXQp KQorCXsKKwkgIGlmIChpc19naW1wbGVfYXNzaWduIChzdG10KSkKKwkgICAgZGVzdCA9IGdpbXBs ZV9hc3NpZ25fbGhzIChzdG10KTsKKwkgIGVsc2UgaWYgKGNvbnN0IGdjYWxsICpjYWxsID0gZHlu X2Nhc3QgPGNvbnN0IGdjYWxsICo+IChzdG10KSkKKwkgICAgZGVzdCA9IGdpbXBsZV9jYWxsX2xo cyAoY2FsbCk7CisJfQorICAgICAgZWxzZSBpZiAoY29uc3QgZ2NhbGwgKmNhbGwgPSBkeW5fY2Fz dCA8Y29uc3QgZ2NhbGwgKj4gKHN0bXQpKQorCWRlc3QgPSBnaW1wbGVfYXJnIChjYWxsLCAwKTsK KworICAgICAgLyogRG9uJ3QgbW92ZSB0aGUgc2NhbGFyIGluc3RydWN0aW9ucy4gICovCisgICAg ICBib29sIG1vdmUgPSBkZXN0ICE9IE5VTExfVFJFRTsKKworICAgICAgLyogSWYgd2UgZm91bmQg dGhlIGRlZmluaW5nIHN0YXRlbWVudCBvZiBhIHNvbWV0aGluZyB0aGF0J3MgcGFydCBvZiB0aGUK KwkgY2hhaW4gdGhlbiBleHBhbmQgdGhlIGNoYWluIHdpdGggdGhlIG5ldyBTU0FfVkFScyBiZWlu ZyB1c2VkLiAgKi8KKyAgICAgIGlmIChjaGFpbmVkLT5jb250YWlucyAoZGVzdCkpCisJeworCSAg Zm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGdpbXBsZV9udW1fYXJncyAoc3RtdCk7IHgrKykKKwkg ICAgaWYgKFRSRUVfQ09ERSAoZ2ltcGxlX2FyZyAoc3RtdCwgeCkpID09IFNTQV9OQU1FKQorCSAg ICAgIGNoYWluZWQtPmFkZCAoZ2ltcGxlX2FyZyAoc3RtdCwgeCkpOworCisJICBpZiAoZHVtcF9l bmFibGVkX3AgKCkpCisJICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRp b24sCisJCQkgICAgICJmb3VuZCBjaGFpbiAlRyIsIHN0bXQpOworCSAgdXBkYXRlX3N0bXQgKHN0 bXQpOworCSAgbW92ZSA9IGZhbHNlOworCX0KKworICAgICAgaWYgKG1vdmUpCisJeworCSAgaWYg KGR1bXBfZW5hYmxlZF9wICgpKQorCSAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0 X2xvY2F0aW9uLAorCQkJICAgICAibW92aW5nIHN0bXQgJUciLCBzdG10KTsKKwkgIGdzaV9tb3Zl X2JlZm9yZSAoZ3N0bXQsIGdkZXN0KTsKKwkgIGdzaV9wcmV2IChnZGVzdCk7CisJICB0cmVlIHZk ZWYgPSBnaW1wbGVfdmRlZiAoc3RtdCk7CisKKwkgIC8qIElmIHdlJ3ZlIG1vdmVkIGEgVkRFRiwg ZXh0cmFjdCB0aGUgZGVmaW5pbmcgTUVNIGFuZCB1cGRhdGUKKwkgICAgIHVzYWdlcyBvZiBpdC4g IFRPRE86IEkgdGhpbmsgdGhpcyBtYXkgbmVlZCBzb21lIGNvbnN0cmFpbnRzPyAqLworCSAgaWYg KHZkZWYpCisJICAgIHsKKwkgICAgICAqY3VycmVudF92ZGVmID0gdmRlZjsKKwkgICAgICAqcmVh Y2hpbmdfdnVzZSA9IGdpbXBsZV92dXNlIChzdG10KTsKKwkgICAgICBpbW1fdXNlX2l0ZXJhdG9y IGltbV9pdGVyOworCSAgICAgIGdpbXBsZSAqdXNlX3N0bXQ7CisJICAgICAgRk9SX0VBQ0hfSU1N X1VTRV9TVE1UICh1c2Vfc3RtdCwgaW1tX2l0ZXIsIHZkZWYpCisJCXsKKwkJICAgaWYgKCFpc19h IDxncGhpICo+ICh1c2Vfc3RtdCkpCisJCSAgICAgY29udGludWU7CisJCSAgIGdwaGkgKnBoaV9z dG10ID0gYXNfYSA8Z3BoaSAqPiAodXNlX3N0bXQpOworCisJCSAgIGlmIChkdW1wX2VuYWJsZWRf cCAoKSkKKwkJICAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLAor CQkJCSJ1cGRhdGluZyB2dXNlICVHIiwgdXNlX3N0bXQpOworCisJCSAgIGZvciAodW5zaWduZWQg aSA9IDA7IGkgPCBnaW1wbGVfcGhpX251bV9hcmdzIChwaGlfc3RtdCk7IGkrKykKKwkJICAgIGlm IChnaW1wbGVfcGhpX2FyZ19kZWYgKHBoaV9zdG10LCBpKSA9PSB2ZGVmKQorCQkgICAgICB7CisJ CQlTRVRfVVNFIChQSElfQVJHX0RFRl9QVFIgKHBoaV9zdG10LCBpKSwgZ2ltcGxlX3Z1c2UgKHN0 bXQpKTsKKwkJCWJyZWFrOworCQkgICAgICB9CisJCX0KKwkgICAgfQorCSAgdXBkYXRlX3N0bXQg KHN0bXQpOworCX0KKyAgICB9CisKKyAgZ3NpX3ByZXYgKGdzdG10KTsKKyAgbW92ZV9lYXJseV9l eGl0X3N0bXRzIChjaGFpbmVkLCBnZGVzdCwgZ3N0bXQsIHJlYWNoaW5nX3Z1c2UsIGN1cnJlbnRf dmRlZik7CisKKyAgaWYgKGdpbXBsZV92dXNlIChzdG10KQorICAgICAgJiYgcmVhY2hpbmdfdnVz ZSAmJiAqcmVhY2hpbmdfdnVzZQorICAgICAgJiYgZ2ltcGxlX3Z1c2UgKHN0bXQpID09ICpjdXJy ZW50X3ZkZWYpCisgICAgeworICAgICAgdW5saW5rX3N0bXRfdmRlZiAoc3RtdCk7CisgICAgICBn aW1wbGVfc2V0X3Z1c2UgKHN0bXQsICpyZWFjaGluZ192dXNlKTsKKyAgICAgIHVwZGF0ZV9zdG10 IChzdG10KTsKKyAgICB9Cit9CisKIC8qIEZ1bmN0aW9uIHZlY3RfdHJhbnNmb3JtX2xvb3AuCiAK ICAgIFRoZSBhbmFseXNpcyBwaGFzZSBoYXMgZGV0ZXJtaW5lZCB0aGF0IHRoZSBsb29wIGlzIHZl Y3Rvcml6YWJsZS4KQEAgLTEwNzkzLDcgKzExMDI1LDcgQEAgdmVjdF90cmFuc2Zvcm1fbG9vcCAo bG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBnaW1wbGUgKmxvb3BfdmVjdG9yaXplZF9jYWxsKQog ICAvKiBNYWtlIHN1cmUgdGhlcmUgZXhpc3RzIGEgc2luZ2xlLXByZWRlY2Vzc29yIGV4aXQgYmIu ICBEbyB0aGlzIGJlZm9yZSAKICAgICAgdmVyc2lvbmluZy4gICAqLwogICBlZGdlIGUgPSBzaW5n bGVfZXhpdCAobG9vcCk7Ci0gIGlmICghIHNpbmdsZV9wcmVkX3AgKGUtPmRlc3QpKQorICBpZiAo ZSAmJiAhIHNpbmdsZV9wcmVkX3AgKGUtPmRlc3QpKQogICAgIHsKICAgICAgIHNwbGl0X2xvb3Bf ZXhpdF9lZGdlIChlLCB0cnVlKTsKICAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkKQEAgLTEw ODE5LDcgKzExMDUxLDcgQEAgdmVjdF90cmFuc2Zvcm1fbG9vcCAobG9vcF92ZWNfaW5mbyBsb29w X3ZpbmZvLCBnaW1wbGUgKmxvb3BfdmVjdG9yaXplZF9jYWxsKQogICBpZiAoTE9PUF9WSU5GT19T Q0FMQVJfTE9PUCAobG9vcF92aW5mbykpCiAgICAgewogICAgICAgZSA9IHNpbmdsZV9leGl0IChM T09QX1ZJTkZPX1NDQUxBUl9MT09QIChsb29wX3ZpbmZvKSk7Ci0gICAgICBpZiAoISBzaW5nbGVf cHJlZF9wIChlLT5kZXN0KSkKKyAgICAgIGlmIChlICYmICEgc2luZ2xlX3ByZWRfcCAoZS0+ZGVz dCkpCiAJewogCSAgc3BsaXRfbG9vcF9leGl0X2VkZ2UgKGUsIHRydWUpOwogCSAgaWYgKGR1bXBf ZW5hYmxlZF9wICgpKQpAQCAtMTA4ODUsNiArMTExMTcsMjYgQEAgdmVjdF90cmFuc2Zvcm1fbG9v cCAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBnaW1wbGUgKmxvb3BfdmVjdG9yaXplZF9jYWxs KQogICAgICAgdmVjdF9zY2hlZHVsZV9zbHAgKGxvb3BfdmluZm8sIExPT1BfVklORk9fU0xQX0lO U1RBTkNFUyAobG9vcF92aW5mbykpOwogICAgIH0KIAorICAvKiBIYW5kbGUgYW55IGNvZGUgbW90 aW9uIHRoYXQgd2UgbmVlZCB0byBmb3IgZWFybHktYnJlYWsgdmVjdG9yaXphdGlvbiBhZnRlcgor ICAgICB3ZSd2ZSBkb25lIHBlZWxpbmcgYnV0IGp1c3QgYmVmb3JlIHdlIHN0YXJ0IHZlY3Rvcml6 aW5nLiAgKi8KKyAgaWYgKExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkKKyAg ICB7CisgICAgICBoYXNoX3NldDx0cmVlPiBjaGFpbmVkOworICAgICAgZm9yIChnY29uZCAqY29u ZCA6IExPT1BfVklORk9fTE9PUF9DT05EUyAobG9vcF92aW5mbykpCisJeworCSAgYmFzaWNfYmxv Y2sgY29uZF9iYiA9IGdpbXBsZV9iYiAoY29uZCk7CisJICBiYXNpY19ibG9jayBkZXN0X2JiID0g RkFMTFRIUlVfRURHRSAoY29uZF9iYiktPmRlc3Q7CisJICBnaW1wbGVfc3RtdF9pdGVyYXRvciBk ZXN0X2dzaSA9IGdzaV9zdGFydF9iYiAoZGVzdF9iYik7CisKKwkgIGdpbXBsZV9zdG10X2l0ZXJh dG9yIGdzaTIgPSBnc2lfZm9yX3N0bXQgKGNvbmQpOworCSAgZm9yICh1bnNpZ25lZCBpID0gMDsg aSA8IGdpbXBsZV9udW1fb3BzIChjb25kKTsgaSsrKQorCSAgICBjaGFpbmVkLmFkZCAoZ2ltcGxl X29wIChjb25kLCBpKSk7CisJICB0cmVlIHZkZWY7CisJICB0cmVlIHZ1c2UgPSBnaW1wbGVfdnVz ZSAoY29uZCk7CisJICBtb3ZlX2Vhcmx5X2V4aXRfc3RtdHMgKCZjaGFpbmVkLCAmZGVzdF9nc2ks ICZnc2kyLCAmdnVzZSwgJnZkZWYpOworCX0KKyAgICB9CisKICAgLyogRk9STk9XOiB0aGUgdmVj dG9yaXplciBzdXBwb3J0cyBvbmx5IGxvb3BzIHdoaWNoIGJvZHkgY29uc2lzdAogICAgICBvZiBv bmUgYmFzaWMgYmxvY2sgKGhlYWRlciArIGVtcHR5IGxhdGNoKS4gV2hlbiB0aGUgdmVjdG9yaXpl ciB3aWxsCiAgICAgIHN1cHBvcnQgbW9yZSBpbnZvbHZlZCBsb29wIGZvcm1zLCB0aGUgb3JkZXIg Ynkgd2hpY2ggdGhlIEJCcyBhcmUKQEAgLTExMTUyLDcgKzExNDA0LDggQEAgdmVjdF90cmFuc2Zv cm1fbG9vcCAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBnaW1wbGUgKmxvb3BfdmVjdG9yaXpl ZF9jYWxsKQogCiAgIC8qIExvb3BzIHZlY3Rvcml6ZWQgd2l0aCBhIHZhcmlhYmxlIGZhY3RvciB3 b24ndCBiZW5lZml0IGZyb20KICAgICAgdW5yb2xsaW5nL3BlZWxpbmcuICAqLwotICBpZiAoIXZm LmlzX2NvbnN0YW50ICgpKQorICBpZiAoIXZmLmlzX2NvbnN0YW50ICgpCisgICAgICAmJiAhTE9P UF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQogICAgIHsKICAgICAgIGxvb3AtPnVu cm9sbCA9IDE7CiAgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCmRpZmYgLS1naXQgYS9nY2Mv dHJlZS12ZWN0LXN0bXRzLmNjIGIvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYwppbmRleCA1NDg1ZGE1 OGIzOGEwZGIyZWExYTM1N2VlODY0N2FlNDdiNTYzYThmLi42YTNhNjA2NWNlMmVlN2RkNTNlYmY4 M2M4Nzk2ZDU3ZmM5ODA1NzUwIDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0LXN0bXRzLmNjCisr KyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MKQEAgLTM0Miw5ICszNDIsMjggQEAgdmVjdF9zdG10 X3JlbGV2YW50X3AgKHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLCBsb29wX3ZlY19pbmZvIGxvb3Bf dmluZm8sCiAgICpsaXZlX3AgPSBmYWxzZTsKIAogICAvKiBjb25kIHN0bXQgb3RoZXIgdGhhbiBs b29wIGV4aXQgY29uZC4gICovCi0gIGlmIChpc19jdHJsX3N0bXQgKHN0bXRfaW5mby0+c3RtdCkK LSAgICAgICYmIFNUTVRfVklORk9fVFlQRSAoc3RtdF9pbmZvKSAhPSBsb29wX2V4aXRfY3RybF92 ZWNfaW5mb190eXBlKQotICAgICpyZWxldmFudCA9IHZlY3RfdXNlZF9pbl9zY29wZTsKKyAgaWYg KGlzX2N0cmxfc3RtdCAoc3RtdF9pbmZvLT5zdG10KSkKKyAgICB7CisgICAgICAvKiBJZGVhbGx5 IEVER0VfTE9PUF9FWElUIHdvdWxkIGhhdmUgYmVlbiBzZXQgb24gdGhlIGV4aXQgZWRnZSwgYnV0 CisJIGl0IGxvb2tzIGxpa2UgbG9vcF9tYW5pcCBkb2Vzbid0IGRvIHRoYXQuLiAgU28gd2UgaGF2 ZSB0byBkbyBpdAorCSB0aGUgaGFyZCB3YXkuICAqLworICAgICAgYmFzaWNfYmxvY2sgYmIgPSBn aW1wbGVfYmIgKHN0bXRfaW5mby0+c3RtdCk7CisgICAgICBiYXNpY19ibG9jayAqYmJzID0gTE9P UF9WSU5GT19CQlMgKGxvb3BfdmluZm8pOworICAgICAgZWRnZSBleGl0ID0gQlJBTkNIX0VER0Ug KGJiKTsKKyAgICAgIHVuc2lnbmVkIG5iYnMgPSBsb29wLT5udW1fbm9kZXM7CisgICAgICBib29s IGV4aXRfYmIgPSB0cnVlOworICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5iYnM7IGkr KykKKwl7CisJICBpZiAoZXhpdC0+ZGVzdCA9PSBiYnNbaV0pCisJICAgIHsKKwkgICAgICBleGl0 X2JiID0gZmFsc2U7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChleGl0 X2JiKQorCSpyZWxldmFudCA9IHZlY3RfdXNlZF9pbl9zY29wZTsKKyAgICB9CiAKICAgLyogY2hh bmdpbmcgbWVtb3J5LiAgKi8KICAgaWYgKGdpbXBsZV9jb2RlIChzdG10X2luZm8tPnN0bXQpICE9 IEdJTVBMRV9QSEkpCkBAIC0zNTcsNiArMzc2LDExIEBAIHZlY3Rfc3RtdF9yZWxldmFudF9wIChz dG10X3ZlY19pbmZvIHN0bXRfaW5mbywgbG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLAogCSpyZWxl dmFudCA9IHZlY3RfdXNlZF9pbl9zY29wZTsKICAgICAgIH0KIAorICBhdXRvX3ZlYzxlZGdlPiBl eGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGxvb3ApOworICBhdXRvX2JpdG1hcCBleGl0X2Ji czsKKyAgZm9yIChlZGdlIGV4aXQgOiBleGl0cykKKyAgICBiaXRtYXBfc2V0X2JpdCAoZXhpdF9i YnMsIGV4aXQtPmRlc3QtPmluZGV4KTsKKwogICAvKiB1c2VzIG91dHNpZGUgdGhlIGxvb3AuICAq LwogICBGT1JfRUFDSF9QSElfT1JfU1RNVF9ERUYgKGRlZl9wLCBzdG10X2luZm8tPnN0bXQsIG9w X2l0ZXIsIFNTQV9PUF9ERUYpCiAgICAgewpAQCAtMzc1LDcgKzM5OSw3IEBAIHZlY3Rfc3RtdF9y ZWxldmFudF9wIChzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywgbG9vcF92ZWNfaW5mbyBsb29wX3Zp bmZvLAogCSAgICAgIC8qIFdlIGV4cGVjdCBhbGwgc3VjaCB1c2VzIHRvIGJlIGluIHRoZSBsb29w IGV4aXQgcGhpcwogCQkgKGJlY2F1c2Ugb2YgbG9vcCBjbG9zZWQgZm9ybSkgICAqLwogCSAgICAg IGdjY19hc3NlcnQgKGdpbXBsZV9jb2RlIChVU0VfU1RNVCAodXNlX3ApKSA9PSBHSU1QTEVfUEhJ KTsKLQkgICAgICBnY2NfYXNzZXJ0IChiYiA9PSBzaW5nbGVfZXhpdCAobG9vcCktPmRlc3QpOwor CSAgICAgIGdjY19hc3NlcnQgKGJpdG1hcF9iaXRfcCAoZXhpdF9iYnMsIGJiLT5pbmRleCkpOwog CiAgICAgICAgICAgICAgICpsaXZlX3AgPSB0cnVlOwogCSAgICB9CkBAIC0xMDc5MCw2ICsxMDgx NCwyMjMgQEAgdmVjdG9yaXphYmxlX2NvbmRpdGlvbiAodmVjX2luZm8gKnZpbmZvLAogICByZXR1 cm4gdHJ1ZTsKIH0KIAorLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBjdXJyZW50IGVhcmx5IGJyZWFr IGdpdmVuIGluIFNUTVRfSU5GTyBpcyB2YWxpZCBmb3IKKyAgIHZlY3Rvcml6YXRpb24uICAqLwor CitzdGF0aWMgYm9vbAordmVjdG9yaXphYmxlX2Vhcmx5X2V4aXQgKHZlY19pbmZvICp2aW5mbywK KwkJCXN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLCBzbHBfdHJlZSAvKiBzbHBfbm9kZSAqLywKKwkJ CXNscF9pbnN0YW5jZSAvKiBzbHBfbm9kZV9pbnN0YW5jZSAqLywKKwkJCXN0bXRfdmVjdG9yX2Zv cl9jb3N0ICogLyogY29zdF92ZWMgKi8pCit7CisgIGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbyA9 IGR5bl9jYXN0IDxsb29wX3ZlY19pbmZvPiAodmluZm8pOworCisgIGlmICghbG9vcF92aW5mbwor ICAgICAgfHwgIWlzX2EgPGdjb25kICo+IChTVE1UX1ZJTkZPX1NUTVQgKHN0bXRfaW5mbykpKQor ICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoU1RNVF9WSU5GT19ERUZfVFlQRSAoc3RtdF9pbmZv KSAhPSB2ZWN0X2Vhcmx5X2V4aXRfZGVmKQorICAgIHJldHVybiBmYWxzZTsKKworICAvKiByZWZh Y3RvciBhbmQgbWVyZ2Ugd2l0aCB2ZWN0X3RyYW5zZm9ybV9lYXJseV9icmVhay4gICovCisgIGdp bXBsZV9tYXRjaF9vcCBvcDsKKyAgaWYgKCFnaW1wbGVfZXh0cmFjdF9vcCAoc3RtdF9pbmZvLT5z dG10LCAmb3ApKQorICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgZ2NjX2Fzc2VydCAob3AuY29k ZS5pc190cmVlX2NvZGUgKCkpOworCisgIHRyZWUgdmVjdHlwZV9pbiA9IFNUTVRfVklORk9fVkVD VFlQRSAoc3RtdF9pbmZvKTsKKyAgZ2NjX2Fzc2VydCAodmVjdHlwZV9pbik7CisKKyAgc3RtdF92 ZWNfaW5mbyBvcGVyYW5kMF9pbmZvCisgICAgPSBsb29wX3ZpbmZvLT5sb29rdXBfc3RtdCAoU1NB X05BTUVfREVGX1NUTVQgKG9wLm9wc1swXSkpOworICBpZiAoIW9wZXJhbmQwX2luZm8pCisgICAg cmV0dXJuIGZhbHNlOworICB0cmVlIHZlY3R5cGVfb3AgPSBTVE1UX1ZJTkZPX1ZFQ1RZUEUgKG9w ZXJhbmQwX2luZm8pOworCisgIC8vdHJlZSB2ZWN0eXBlID0gU1RNVF9WSU5GT19WRUNUWVBFIChz dG10X2luZm8pOworICB0cmVlIHRydXRoX3R5cGUgPSB0cnV0aF90eXBlX2ZvciAodmVjdHlwZV9v cCk7CisgIG1hY2hpbmVfbW9kZSBtb2RlID0gVFlQRV9NT0RFICh0cnV0aF90eXBlKTsKKyAgaWYg KGRpcmVjdF9vcHRhYl9oYW5kbGVyIChjYnJhbmNoX29wdGFiLCBtb2RlKSA9PSBDT0RFX0ZPUl9u b3RoaW5nKQorICAgIHsKKyAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkKKwkgIGR1bXBfcHJp bnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRpb24sCisJCQkJICJj YW4ndCB2ZWN0b3JpemUgZWFybHkgZXhpdCBiZWNhdXNlIHRoZSAiCisJCQkJICJ0YXJnZXQgZG9l c24ndCBzdXBwb3J0IGZsYWcgc2V0dGluZyB2ZWN0b3IgIgorCQkJCSAiY29tcGFyaXNvbnMuXG4i KTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgaWYgKCFleHBhbmRfdmVjX2NtcF9l eHByX3AgKHZlY3R5cGVfb3AsIHRydXRoX3R5cGUsIE5FX0VYUFIpKQorICAgIHsKKyAgICAgIGlm IChkdW1wX2VuYWJsZWRfcCAoKSkKKwkgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJ TUlaQVRJT04sIHZlY3RfbG9jYXRpb24sCisJCQkJICJjYW4ndCB2ZWN0b3JpemUgZWFybHkgZXhp dCBiZWNhdXNlIHRoZSAiCisJCQkJICJ0YXJnZXQgZG9lcyBub3Qgc3VwcG9ydCBib29sZWFuIHZl Y3RvciAiCisJCQkJICJjb21wYXJpc29ucyBmb3IgdHlwZSAlVC5cbiIsIHRydXRoX3R5cGUpOwor ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBpZiAoZGlyZWN0X29wdGFiX2hhbmRsZXIg KGlvcl9vcHRhYiwgbW9kZSkgPT0gQ09ERV9GT1Jfbm90aGluZykKKyAgICB7CisgICAgICBpZiAo ZHVtcF9lbmFibGVkX3AgKCkpCisJICBkdW1wX3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1J WkFUSU9OLCB2ZWN0X2xvY2F0aW9uLAorCQkJCSAiY2FuJ3QgdmVjdG9yaXplIGVhcmx5IGV4aXQg YmVjYXVzZSB0aGUgIgorCQkJCSAidGFyZ2V0IGRvZXMgbm90IHN1cHBvcnQgYm9vbGVhbiB2ZWN0 b3IgT1IgZm9yICIKKwkJCQkgInR5cGUgJVQuXG4iLCB0cnV0aF90eXBlKTsKKyAgICAgIHJldHVy biBmYWxzZTsKKyAgICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKKworLyogVHJhbnNmb3JtIHRo ZSBkZWZpbml0aW9uIHN0bXQgU1RNVF9JTkZPIG9mIGFuIGVhcmx5IGV4aXQKKyAgIHZhbHVlLiAg Ki8KKworc3RhdGljIGJvb2wKK3ZlY3RfdHJhbnNmb3JtX2Vhcmx5X2JyZWFrIChsb29wX3ZlY19p bmZvIGxvb3BfdmluZm8sCisJCQkgICAgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sIGdpbXBsZV9z dG10X2l0ZXJhdG9yICpnc2ksCisJCQkgICAgZ2ltcGxlICoqdmVjX3N0bXQsIHNscF90cmVlIHNs cF9ub2RlKQoreworICB0cmVlIHZlY3R5cGVfb3V0ID0gU1RNVF9WSU5GT19WRUNUWVBFIChzdG10 X2luZm8pOworICBpbnQgaTsKKyAgaW50IG5jb3BpZXMsIG5vcGNvcGllczsKKyAgaW50IHZlY19u dW07CisgIHN0bXRfdmVjX2luZm8gb3BlcmFuZDBfaW5mbzsKKworICBpZiAoIVNUTVRfVklORk9f UkVMRVZBTlRfUCAoc3RtdF9pbmZvKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgZ2ltcGxlX21h dGNoX29wIG9wOworICBpZiAoIWdpbXBsZV9leHRyYWN0X29wIChzdG10X2luZm8tPnN0bXQsICZv cCkpCisgICAgZ2NjX3VucmVhY2hhYmxlICgpOworICBnY2NfYXNzZXJ0IChvcC5jb2RlLmlzX3Ry ZWVfY29kZSAoKSk7CisgIGF1dG8gY29kZSA9IHRyZWVfY29kZSAob3AuY29kZSk7CisKKyAgdHJl ZSB2ZWN0eXBlX2luID0gU1RNVF9WSU5GT19WRUNUWVBFIChzdG10X2luZm8pOworICBnY2NfYXNz ZXJ0ICh2ZWN0eXBlX2luKTsKKworICBvcGVyYW5kMF9pbmZvID0gbG9vcF92aW5mby0+bG9va3Vw X3N0bXQgKFNTQV9OQU1FX0RFRl9TVE1UIChvcC5vcHNbMF0pKTsKKyAgdHJlZSB2ZWN0eXBlX29w ID0gU1RNVF9WSU5GT19WRUNUWVBFIChvcGVyYW5kMF9pbmZvKTsKKworICBpZiAoc2xwX25vZGUp CisgICAgeworICAgICAgbmNvcGllcyA9IDE7CisgICAgICBub3Bjb3BpZXMgPSAxOworICAgICAg dmVjX251bSA9IFNMUF9UUkVFX05VTUJFUl9PRl9WRUNfU1RNVFMgKHNscF9ub2RlKTsKKyAgICB9 CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBCZWNhdXNlIG9mIHRoZSBkaWZmZXJlbmNlIGJldHdl ZW4gdHlwZXMgd2hlbiBkb2luZyBhIGJvb2xlYW4gcmVkdWN0aW9uCisJIHdlIG11c3QgZGV0ZXJt aW5lIHRoZSBudW1iZXIgb2YgY29waWVzIGJhc2VkIG9uIHRoZSB0eXBlIG9wZXJhbmRzIG9mCisJ IG9wZXJhbmRzIG9mIHRoZSBjb21wYXJpc29uIGFuZCBub3QgdGhlIGNvbXBhcmlzb24gaXRzZWxm LiAgKi8KKyAgICAgIG5jb3BpZXMgPSB2ZWN0X2dldF9udW1fY29waWVzIChsb29wX3ZpbmZvLCB2 ZWN0eXBlX2luKTsKKyAgICAgIG5vcGNvcGllcyA9IHZlY3RfZ2V0X251bV9jb3BpZXMgKGxvb3Bf dmluZm8sIHZlY3R5cGVfb3ApOworICAgICAgdmVjX251bSA9IDE7CisgICAgfQorCisgIHZlY19s b29wX21hc2tzICptYXNrcyA9ICZMT09QX1ZJTkZPX01BU0tTIChsb29wX3ZpbmZvKTsKKyAgYm9v bCBtYXNrZWRfbG9vcF9wID0gTE9PUF9WSU5GT19GVUxMWV9NQVNLRURfUCAobG9vcF92aW5mbyk7 CisKKyAgaWYgKG5jb3BpZXMgIT0gbm9wY29waWVzKQorICAgIHZlY3R5cGVfb3V0ID0gdmVjdHlw ZV9vcDsKKworICAvKiBUcmFuc2Zvcm0uICAqLworICB0cmVlIG5ld190ZW1wID0gTlVMTF9UUkVF OworICBhdXRvX3ZlYzx0cmVlPiB2ZWNfb3BybmRzMDsKKyAgYXV0b192ZWM8dHJlZT4gdmVjX29w cm5kczE7CisgIHRyZWUgZGVmMDsKKworICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCisgICAgZHVt cF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwgInRyYW5zZm9ybSBlYXJseS1l eGl0LlxuIik7CisKKyAgZ2ltcGxlICpzdG10ID0gU1RNVF9WSU5GT19TVE1UIChzdG10X2luZm8p OworICBiYXNpY19ibG9jayBjb25kX2JiID0gZ2ltcGxlX2JiIChzdG10KTsKKyAgZ2ltcGxlX3N0 bXRfaXRlcmF0b3IgIGNvbmRfZ3NpID0gZ3NpX2xhc3RfYmIgKGNvbmRfYmIpOworCisgIHZlY3Rf Z2V0X3ZlY19kZWZzIChsb29wX3ZpbmZvLCBzdG10X2luZm8sIHNscF9ub2RlLCBub3Bjb3BpZXMs CisJCSAgICAgb3Aub3BzWzBdLCAmdmVjX29wcm5kczAsIHZlY3R5cGVfb3V0LAorCQkgICAgIG9w Lm9wc1sxXSwgJnZlY19vcHJuZHMxLCB2ZWN0eXBlX291dCwKKwkJICAgICBOVUxMLCBOVUxMLCBO VUxMKTsKKworICBnaW1wbGUgKm5ld19zdG10ID0gTlVMTDsKKyAgdHJlZSBjc3RfMCA9IGJ1aWxk X3plcm9fY3N0ICh0cnV0aF90eXBlX2ZvciAodmVjdHlwZV9vdXQpKTsKKyAgdHJlZSBjc3RfbTEg PSBidWlsZF9taW51c19vbmVfY3N0ICh0cnV0aF90eXBlX2ZvciAodmVjdHlwZV9vdXQpKTsKKwor ICBGT1JfRUFDSF9WRUNfRUxUICh2ZWNfb3BybmRzMCwgaSwgZGVmMCkKKyAgICB7CisgICAgICB0 cmVlIHZvcFszXSA9IHsgZGVmMCwgdmVjX29wcm5kczFbaV0sIE5VTExfVFJFRSB9OworCXsKKwkg IHRyZWUgY29uZAorCSAgICA9IG1ha2VfdGVtcF9zc2FfbmFtZSAodHJ1dGhfdHlwZV9mb3IgKHZl Y3R5cGVfb3V0KSwgTlVMTCwgIm1hc2siKTsKKwkgIGdpbXBsZSAqdmVjX2NtcCA9IGdpbXBsZV9i dWlsZF9hc3NpZ24gKGNvbmQsIGNvZGUsIHZvcFswXSwgdm9wWzFdKTsKKwkgIHZlY3RfZmluaXNo X3N0bXRfZ2VuZXJhdGlvbiAobG9vcF92aW5mbywgc3RtdF9pbmZvLCB2ZWNfY21wLAorCQkJCSAg ICAgICAmY29uZF9nc2kpOworICAgICAgICAgIGlmIChtYXNrZWRfbG9vcF9wKQorCSAgICB7CisJ ICAgICAgdHJlZSBtYXNrID0gdmVjdF9nZXRfbG9vcF9tYXNrIChnc2ksIG1hc2tzLCB2ZWNfbnVt ICogbmNvcGllcywKKwkJCQkJICAgICAgdmVjdHlwZV9vcCwgaSk7CisJICAgICAgY29uZCA9IHBy ZXBhcmVfdmVjX21hc2sgKGxvb3BfdmluZm8sIFRSRUVfVFlQRSAobWFzayksIG1hc2ssCisJCQkJ ICAgICAgIGNvbmQsICZjb25kX2dzaSk7CisJICAgIH0KKworCSAgbmV3X3RlbXAKKwkgICAgPSBt YWtlX3RlbXBfc3NhX25hbWUgKHRydXRoX3R5cGVfZm9yICh2ZWN0eXBlX291dCksIE5VTEwsICJ2 ZXhpdCIpOworCSAgbmV3X3N0bXQgPSBnaW1wbGVfYnVpbGRfYXNzaWduIChuZXdfdGVtcCwgVkVD X0NPTkRfRVhQUiwKKwkJCQkJICBjb25kLCBjc3RfbTEsIGNzdF8wKTsKKwkgIHZlY3RfZmluaXNo X3N0bXRfZ2VuZXJhdGlvbiAobG9vcF92aW5mbywgc3RtdF9pbmZvLCBuZXdfc3RtdCwKKwkJCQkg ICAgICAgJmNvbmRfZ3NpKTsKKwl9CisKKyAgICAgIGlmIChzbHBfbm9kZSkKKwlTTFBfVFJFRV9W RUNfU1RNVFMgKHNscF9ub2RlKS5xdWlja19wdXNoIChuZXdfc3RtdCk7CisgICAgICBlbHNlCisJ U1RNVF9WSU5GT19WRUNfU1RNVFMgKHN0bXRfaW5mbykuc2FmZV9wdXNoIChuZXdfc3RtdCk7Cisg ICAgfQorCisgIC8qIERldGVybWluZSBpZiB3ZSBuZWVkIHRvIHJlZHVjZSB0aGUgZmluYWwgdmFs dWUuICAqLworICBpZiAobmNvcGllcyAhPSBub3Bjb3BpZXMpCisgICAgeworICAgICAgdmVjPGdp bXBsZSAqPiBzdG10czsKKyAgICAgIGlmIChzbHBfbm9kZSkKKwlzdG10cyA9IFNMUF9UUkVFX1ZF Q19TVE1UUyAoc2xwX25vZGUpOworICAgICAgZWxzZQorCXN0bXRzID0gU1RNVF9WSU5GT19WRUNf U1RNVFMgKHN0bXRfaW5mbyk7CisKKyAgICAgIC8qIFdlIGJ1aWxkIHRoZSByZWR1Y3Rpb25zIGlu IGEgd2F5IHRvIG1haW50YWluIGFzIG11Y2ggcGFyYWxsZWxpc20gYXMKKwkgcG9zc2libGUuICAq LworICAgICAgYXV0b192ZWM8Z2ltcGxlICo+IHdvcmtzZXQgKHN0bXRzLmxlbmd0aCAoKSk7Cisg ICAgICB3b3Jrc2V0LnNwbGljZSAoc3RtdHMpOworICAgICAgd2hpbGUgKHdvcmtzZXQubGVuZ3Ro ICgpID4gMSkKKwl7CisJICBuZXdfdGVtcCA9IG1ha2VfdGVtcF9zc2FfbmFtZSAodHJ1dGhfdHlw ZV9mb3IgKHZlY3R5cGVfb3V0KSwgTlVMTCwKKwkJCQkJICJ2ZXhpdF9yZWR1YyIpOworCSAgZ2lt cGxlICphcmcwID0gd29ya3NldC5wb3AgKCk7CisJICBnaW1wbGUgKmFyZzEgPSB3b3Jrc2V0LnBv cCAoKTsKKwkgIG5ld19zdG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAobmV3X3RlbXAsIEJJVF9J T1JfRVhQUiwKKwkJCQkJICBnaW1wbGVfYXNzaWduX2xocyAoYXJnMCksCisJCQkJCSAgZ2ltcGxl X2Fzc2lnbl9saHMgKGFyZzEpKTsKKwkgIHZlY3RfZmluaXNoX3N0bXRfZ2VuZXJhdGlvbiAobG9v cF92aW5mbywgc3RtdF9pbmZvLCBuZXdfc3RtdCwKKwkJCQkgICAgICAgJmNvbmRfZ3NpKTsKKwkg IHdvcmtzZXQucXVpY2tfaW5zZXJ0ICgwLCBuZXdfc3RtdCk7CisJfQorICAgIH0KKworICBnY2Nf YXNzZXJ0IChuZXdfc3RtdCk7CisgIHRyZWUgbGhzID0gZ2ltcGxlX2Fzc2lnbl9saHMgKG5ld19z dG10KTsKKworICB0cmVlIHQgPSBmb2xkX2J1aWxkMiAoTkVfRVhQUiwgYm9vbGVhbl90eXBlX25v ZGUsIGxocywKKwkJCWJ1aWxkX3plcm9fY3N0ICh0cnV0aF90eXBlX2ZvciAodmVjdHlwZV9vdXQp KSk7CisgIHQgPSBjYW5vbmljYWxpemVfY29uZF9leHByX2NvbmQgKHQpOworICBnaW1wbGVfY29u ZF9zZXRfY29uZGl0aW9uX2Zyb21fdHJlZSAoKGdjb25kKilzdG10LCB0KTsKKyAgdXBkYXRlX3N0 bXQgKHN0bXQpOworCisgIGlmICghc2xwX25vZGUpCisgICAgKnZlY19zdG10ID0gU1RNVF9WSU5G T19WRUNfU1RNVFMgKHN0bXRfaW5mbylbMF07CisKKyAgcmV0dXJuIHRydWU7Cit9CisKIC8qIHZl Y3Rvcml6YWJsZV9jb21wYXJpc29uLgogCiAgICBDaGVjayBpZiBTVE1UX0lORk8gaXMgY29tcGFy aXNvbiBleHByZXNzaW9uIHRoYXQgY2FuIGJlIHZlY3Rvcml6ZWQuCkBAIC0xMTE2NywxMSArMTE0 MDgsMTQgQEAgdmVjdF9hbmFseXplX3N0bXQgKHZlY19pbmZvICp2aW5mbywKIAkJCSAgICAgbm9k ZV9pbnN0YW5jZSwgY29zdF92ZWMpOwogICAgICAgaWYgKCFyZXMpCiAJcmV0dXJuIHJlczsKLSAg IH0KKyAgICB9CisgIGVsc2UgaWYgKGlzX2N0cmxfc3RtdCAoc3RtdF9pbmZvLT5zdG10KSkKKyAg ICBTVE1UX1ZJTkZPX0RFRl9UWVBFIChzdG10X2luZm8pID0gdmVjdF9lYXJseV9leGl0X2RlZjsK IAogICBzd2l0Y2ggKFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5mbykpCiAgICAgewogICAg ICAgY2FzZSB2ZWN0X2ludGVybmFsX2RlZjoKKyAgICAgIGNhc2UgdmVjdF9lYXJseV9leGl0X2Rl ZjoKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgdmVjdF9yZWR1Y3Rpb25fZGVmOgpAQCAt MTEyMDQsNiArMTE0NDgsNyBAQCB2ZWN0X2FuYWx5emVfc3RtdCAodmVjX2luZm8gKnZpbmZvLAog ICAgIHsKICAgICAgIGdjYWxsICpjYWxsID0gZHluX2Nhc3QgPGdjYWxsICo+IChzdG10X2luZm8t PnN0bXQpOwogICAgICAgZ2NjX2Fzc2VydCAoU1RNVF9WSU5GT19WRUNUWVBFIChzdG10X2luZm8p CisJCSAgfHwgZ2ltcGxlX2NvZGUgKHN0bXRfaW5mby0+c3RtdCkgPT0gR0lNUExFX0NPTkQKIAkJ ICB8fCAoY2FsbCAmJiBnaW1wbGVfY2FsbF9saHMgKGNhbGwpID09IE5VTExfVFJFRSkpOwogICAg ICAgKm5lZWRfdG9fdmVjdG9yaXplID0gdHJ1ZTsKICAgICB9CkBAIC0xMTI0Niw3ICsxMTQ5MSw5 IEBAIHZlY3RfYW5hbHl6ZV9zdG10ICh2ZWNfaW5mbyAqdmluZm8sCiAJICB8fCB2ZWN0b3JpemFi bGVfbGNfcGhpIChhc19hIDxsb29wX3ZlY19pbmZvPiAodmluZm8pLAogCQkJCSAgc3RtdF9pbmZv LCBOVUxMLCBub2RlKQogCSAgfHwgdmVjdG9yaXphYmxlX3JlY3VyciAoYXNfYSA8bG9vcF92ZWNf aW5mbz4gKHZpbmZvKSwKLQkJCQkgICBzdG10X2luZm8sIE5VTEwsIG5vZGUsIGNvc3RfdmVjKSk7 CisJCQkJICAgc3RtdF9pbmZvLCBOVUxMLCBub2RlLCBjb3N0X3ZlYykKKwkgIHx8IHZlY3Rvcml6 YWJsZV9lYXJseV9leGl0ICh2aW5mbywgc3RtdF9pbmZvLAorCQkJCSAgICAgIG5vZGUsIG5vZGVf aW5zdGFuY2UsIGNvc3RfdmVjKSk7CiAgIGVsc2UKICAgICB7CiAgICAgICBpZiAoYmJfdmluZm8p CkBAIC0xMTI2OSw3ICsxMTUxNiwxMCBAQCB2ZWN0X2FuYWx5emVfc3RtdCAodmVjX2luZm8gKnZp bmZvLAogCQkJCQkgTlVMTCwgTlVMTCwgbm9kZSwgY29zdF92ZWMpCiAJICAgICAgfHwgdmVjdG9y aXphYmxlX2NvbXBhcmlzb24gKHZpbmZvLCBzdG10X2luZm8sIE5VTEwsIE5VTEwsIG5vZGUsCiAJ CQkJCSAgY29zdF92ZWMpCi0JICAgICAgfHwgdmVjdG9yaXphYmxlX3BoaSAodmluZm8sIHN0bXRf aW5mbywgTlVMTCwgbm9kZSwgY29zdF92ZWMpKTsKKwkgICAgICB8fCB2ZWN0b3JpemFibGVfcGhp ICh2aW5mbywgc3RtdF9pbmZvLCBOVUxMLCBub2RlLCBjb3N0X3ZlYykKKwkgICAgICB8fCB2ZWN0 b3JpemFibGVfZWFybHlfZXhpdCAodmluZm8sIHN0bXRfaW5mbywgbm9kZSwKKwkJCQkJICBub2Rl X2luc3RhbmNlLCBjb3N0X3ZlYykpOworCiAgICAgfQogCiAgIGlmIChub2RlKQpAQCAtMTE0Mjcs NiArMTE2NzcsMTIgQEAgdmVjdF90cmFuc2Zvcm1fc3RtdCAodmVjX2luZm8gKnZpbmZvLAogICAg ICAgZ2NjX2Fzc2VydCAoZG9uZSk7CiAgICAgICBicmVhazsKIAorICAgIGNhc2UgbG9vcF9leGl0 X2N0cmxfdmVjX2luZm9fdHlwZToKKyAgICAgIGRvbmUgPSB2ZWN0X3RyYW5zZm9ybV9lYXJseV9i cmVhayAoYXNfYSA8bG9vcF92ZWNfaW5mbz4gKHZpbmZvKSwgc3RtdF9pbmZvLAorCQkJCSAgICAg ICAgIGdzaSwgJnZlY19zdG10LCBzbHBfbm9kZSk7CisgICAgICBnY2NfYXNzZXJ0IChkb25lKTsK KyAgICAgIGJyZWFrOworCiAgICAgZGVmYXVsdDoKICAgICAgIGlmICghU1RNVF9WSU5GT19MSVZF X1AgKHN0bXRfaW5mbykpCiAJewpAQCAtMTE4MjUsNiArMTIwODEsOSBAQCB2ZWN0X2lzX3NpbXBs ZV91c2UgKHRyZWUgb3BlcmFuZCwgdmVjX2luZm8gKnZpbmZvLCBlbnVtIHZlY3RfZGVmX3R5cGUg KmR0LAogCWNhc2UgdmVjdF9maXJzdF9vcmRlcl9yZWN1cnJlbmNlOgogCSAgZHVtcF9wcmludGYg KE1TR19OT1RFLCAiZmlyc3Qgb3JkZXIgcmVjdXJyZW5jZVxuIik7CiAJICBicmVhazsKKwljYXNl IHZlY3RfZWFybHlfZXhpdF9kZWY6CisJICBkdW1wX3ByaW50ZiAoTVNHX05PVEUsICJlYXJseSBl eGl0XG4iKTsKKwkgIGJyZWFrOwogCWNhc2UgdmVjdF91bmtub3duX2RlZl90eXBlOgogCSAgZHVt cF9wcmludGYgKE1TR19OT1RFLCAidW5rbm93blxuIik7CiAJICBicmVhazsKQEAgLTEyNTA0LDYg KzEyNzYzLDggQEAgdmVjdF9nZXRfdmVjdG9yX3R5cGVzX2Zvcl9zdG10ICh2ZWNfaW5mbyAqdmlu Zm8sIHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLAogICAqbnVuaXRzX3ZlY3R5cGVfb3V0ID0gTlVM TF9UUkVFOwogCiAgIGlmIChnaW1wbGVfZ2V0X2xocyAoc3RtdCkgPT0gTlVMTF9UUkVFCisgICAg ICAvKiBBbGxvdyB2ZWN0b3IgY29uZGl0aW9uYWxzIHRocm91Z2ggaGVyZS4gICovCisgICAgICAm JiAhaXNfY3RybF9zdG10IChzdG10KQogICAgICAgLyogTUFTS19TVE9SRSBoYXMgbm8gbGhzLCBi dXQgaXMgb2suICAqLwogICAgICAgJiYgIWdpbXBsZV9jYWxsX2ludGVybmFsX3AgKHN0bXQsIElG Tl9NQVNLX1NUT1JFKSkKICAgICB7CkBAIC0xMjUyMCw3ICsxMjc4MSw3IEBAIHZlY3RfZ2V0X3Zl Y3Rvcl90eXBlc19mb3Jfc3RtdCAodmVjX2luZm8gKnZpbmZvLCBzdG10X3ZlY19pbmZvIHN0bXRf aW5mbywKIAl9CiAKICAgICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0IChzdG10LAot CQkJCSAgICAgIm5vdCB2ZWN0b3JpemVkOiBpcnJlZ3VsYXIgc3RtdC4lRyIsIHN0bXQpOworCQkJ CSAgICAgIm5vdCB2ZWN0b3JpemVkOiBpcnJlZ3VsYXIgc3RtdDogJUciLCBzdG10KTsKICAgICB9 CiAKICAgdHJlZSB2ZWN0eXBlOwpAQCAtMTI1NDksNiArMTI4MTAsOCBAQCB2ZWN0X2dldF92ZWN0 b3JfdHlwZXNfZm9yX3N0bXQgKHZlY19pbmZvICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2lu Zm8sCiAJc2NhbGFyX3R5cGUgPSBUUkVFX1RZUEUgKERSX1JFRiAoZHIpKTsKICAgICAgIGVsc2Ug aWYgKGdpbXBsZV9jYWxsX2ludGVybmFsX3AgKHN0bXQsIElGTl9NQVNLX1NUT1JFKSkKIAlzY2Fs YXJfdHlwZSA9IFRSRUVfVFlQRSAoZ2ltcGxlX2NhbGxfYXJnIChzdG10LCAzKSk7CisgICAgICBl bHNlIGlmIChpc19jdHJsX3N0bXQgKHN0bXQpKQorCXNjYWxhcl90eXBlID0gVFJFRV9UWVBFIChn aW1wbGVfY29uZF9yaHMgKHN0bXQpKTsKICAgICAgIGVsc2UKIAlzY2FsYXJfdHlwZSA9IFRSRUVf VFlQRSAoZ2ltcGxlX2dldF9saHMgKHN0bXQpKTsKIApkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVj dG9yaXplci5oIGIvZ2NjL3RyZWUtdmVjdG9yaXplci5oCmluZGV4IDAxNjk2MWRhODUxMGNhN2Rk MmQwN2U3MTZjYmUzNTYyM2VkMmQ5YTUuLjNmNGZjOTBjN2FkYTk3MTNiOWNlNThmODYyNzI2NDhk YWIwY2E2YjcgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXZlY3Rvcml6ZXIuaAorKysgYi9nY2MvdHJl ZS12ZWN0b3JpemVyLmgKQEAgLTYzLDYgKzYzLDcgQEAgZW51bSB2ZWN0X2RlZl90eXBlIHsKICAg dmVjdF9pbnRlcm5hbF9kZWYsCiAgIHZlY3RfaW5kdWN0aW9uX2RlZiwKICAgdmVjdF9yZWR1Y3Rp b25fZGVmLAorICB2ZWN0X2Vhcmx5X2V4aXRfZGVmLAogICB2ZWN0X2RvdWJsZV9yZWR1Y3Rpb25f ZGVmLAogICB2ZWN0X25lc3RlZF9jeWNsZSwKICAgdmVjdF9maXJzdF9vcmRlcl9yZWN1cnJlbmNl LApAQCAtODM2LDYgKzgzNywxMyBAQCBwdWJsaWM6CiAgICAgIHdlIG5lZWQgdG8gcGVlbCBvZmYg aXRlcmF0aW9ucyBhdCB0aGUgZW5kIHRvIGZvcm0gYW4gZXBpbG9ndWUgbG9vcC4gICovCiAgIGJv b2wgcGVlbGluZ19mb3Jfbml0ZXI7CiAKKyAgLyogV2hlbiB0aGUgbG9vcCBoYXMgZWFybHkgYnJl YWtzIHRoYXQgd2UgY2FuIHZlY3Rvcml6ZSB3ZSBuZWVkIHRvIHBlZWwKKyAgICAgdGhlIGxvb3Ag Zm9yIHRoZSBicmVhayBmaW5kaW5nIGxvb3AuICAqLworICBib29sIGVhcmx5X2JyZWFrczsKKwor ICAvKiBMaXN0IG9mIGxvb3AgSVYgY29uZGl0aW9uYWxzIGZvdW5kIGluIHRoZSBsb29wLiAgKi8K KyAgYXV0b192ZWM8Z2NvbmQgKj4gY29uZHM7CisKICAgLyogVHJ1ZSBpZiB0aGVyZSBhcmUgbm8g bG9vcCBjYXJyaWVkIGRhdGEgZGVwZW5kZW5jaWVzIGluIHRoZSBsb29wLgogICAgICBJZiBsb29w LT5zYWZlbGVuIDw9IDEsIHRoZW4gdGhpcyBpcyBhbHdheXMgdHJ1ZSwgZWl0aGVyIHRoZSBsb29w CiAgICAgIGRpZG4ndCBoYXZlIGFueSBsb29wIGNhcnJpZWQgZGF0YSBkZXBlbmRlbmNpZXMsIG9y IHRoZSBsb29wIGlzIGJlaW5nCkBAIC05MjEsNiArOTI5LDggQEAgcHVibGljOgogI2RlZmluZSBM T09QX1ZJTkZPX1JFRFVDVElPTl9DSEFJTlMoTCkgICAgIChMKS0+cmVkdWN0aW9uX2NoYWlucwog I2RlZmluZSBMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX0dBUFMoTCkgICAgIChMKS0+cGVlbGluZ19m b3JfZ2FwcwogI2RlZmluZSBMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX05JVEVSKEwpICAgIChMKS0+ cGVlbGluZ19mb3Jfbml0ZXIKKyNkZWZpbmUgTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MoTCkgICAg ICAgICAoTCktPmVhcmx5X2JyZWFrcworI2RlZmluZSBMT09QX1ZJTkZPX0xPT1BfQ09ORFMoTCkg ICAgICAgICAgIChMKS0+Y29uZHMKICNkZWZpbmUgTE9PUF9WSU5GT19OT19EQVRBX0RFUEVOREVO Q0lFUyhMKSAoTCktPm5vX2RhdGFfZGVwZW5kZW5jaWVzCiAjZGVmaW5lIExPT1BfVklORk9fU0NB TEFSX0xPT1AoTCkJICAgKEwpLT5zY2FsYXJfbG9vcAogI2RlZmluZSBMT09QX1ZJTkZPX1NDQUxB Ul9MT09QX1NDQUxJTkcoTCkgIChMKS0+c2NhbGFyX2xvb3Bfc2NhbGluZwpAQCAtOTcwLDcgKzk4 MCw3IEBAIHB1YmxpYzoKIHR5cGVkZWYgb3B0X3BvaW50ZXJfd3JhcHBlciA8bG9vcF92ZWNfaW5m bz4gb3B0X2xvb3BfdmVjX2luZm87CiAKIHN0YXRpYyBpbmxpbmUgbG9vcF92ZWNfaW5mbwotbG9v cF92ZWNfaW5mb19mb3JfbG9vcCAoY2xhc3MgbG9vcCAqbG9vcCkKK2xvb3BfdmVjX2luZm9fZm9y X2xvb3AgKGNvbnN0IGNsYXNzIGxvb3AgKmxvb3ApCiB7CiAgIHJldHVybiAobG9vcF92ZWNfaW5m bykgbG9vcC0+YXV4OwogfQpAQCAtMjEwNyw3ICsyMTE3LDcgQEAgY2xhc3MgYXV0b19wdXJnZV92 ZWN0X2xvY2F0aW9uCiAgICBpbiB0cmVlLXZlY3QtbG9vcC1tYW5pcC5jYy4gICovCiBleHRlcm4g dm9pZCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbiAoY2xhc3MgbG9vcCAqLCBsb29wX3ZlY19pbmZv LAogCQkJCSAgICAgdHJlZSwgdHJlZSwgdHJlZSwgYm9vbCk7Ci1leHRlcm4gYm9vbCBzbHBlZWxf Y2FuX2R1cGxpY2F0ZV9sb29wX3AgKGNvbnN0IGNsYXNzIGxvb3AgKiwgY29uc3RfZWRnZSk7Citl eHRlcm4gYm9vbCBzbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29wX3AgKGNvbnN0IGxvb3BfdmVjX2lu Zm8sIGNvbnN0X2VkZ2UpOwogY2xhc3MgbG9vcCAqc2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3Bf dG9fZWRnZV9jZmcgKGNsYXNzIGxvb3AgKiwKIAkJCQkJCSAgICAgY2xhc3MgbG9vcCAqLCBlZGdl KTsKIGNsYXNzIGxvb3AgKnZlY3RfbG9vcF92ZXJzaW9uaW5nIChsb29wX3ZlY19pbmZvLCBnaW1w bGUgKik7CkBAIC0yMzA2LDYgKzIzMTYsNyBAQCBzdHJ1Y3QgdmVjdF9sb29wX2Zvcm1faW5mbwog ICB0cmVlIG51bWJlcl9vZl9pdGVyYXRpb25zOwogICB0cmVlIG51bWJlcl9vZl9pdGVyYXRpb25z bTE7CiAgIHRyZWUgYXNzdW1wdGlvbnM7CisgIHZlYzxnY29uZCAqPiBjb25kczsKICAgZ2NvbmQg Kmxvb3BfY29uZDsKICAgZ2NvbmQgKmlubmVyX2xvb3BfY29uZDsKIH07CmRpZmYgLS1naXQgYS9n Y2MvdHJlZS12ZWN0b3JpemVyLmNjIGIvZ2NjL3RyZWUtdmVjdG9yaXplci5jYwppbmRleCA2ZWM0 OTUxMWQ3NGJkMmUwZTVkZDUxODIzYTZjNDExODBmMDg3MTZjLi40YWE0NmM3YzBkODIzNWQzYjc4 M2NlOTMwZTVkZjM0ODBlMWIzZWY5IDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0b3JpemVyLmNj CisrKyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuY2MKQEAgLTEzODIsNyArMTM4Miw5IEBAIHBhc3Nf dmVjdG9yaXplOjpleGVjdXRlIChmdW5jdGlvbiAqZnVuKQogCSBwcmVkaWNhdGVzIHRoYXQgbmVl ZCB0byBiZSBzaGFyZWQgZm9yIG9wdGltYWwgcHJlZGljYXRlIHVzYWdlLgogCSBIb3dldmVyIHJl YXNzb2Mgd2lsbCByZS1vcmRlciB0aGVtIGFuZCBwcmV2ZW50IENTRSBmcm9tIHdvcmtpbmcKIAkg YXMgaXQgc2hvdWxkLiAgQ1NFIG9ubHkgdGhlIGxvb3AgYm9keSwgbm90IHRoZSBlbnRyeS4gICov Ci0gICAgICBiaXRtYXBfc2V0X2JpdCAoZXhpdF9iYnMsIHNpbmdsZV9leGl0IChsb29wKS0+ZGVz dC0+aW5kZXgpOworICAgICAgYXV0b192ZWM8ZWRnZT4gZXhpdHMgPSBnZXRfbG9vcF9leGl0X2Vk Z2VzIChsb29wKTsKKyAgICAgIGZvciAoZWRnZSBleGl0IDogZXhpdHMpCisJYml0bWFwX3NldF9i aXQgKGV4aXRfYmJzLCBleGl0LT5kZXN0LT5pbmRleCk7CiAKICAgICAgIGVkZ2UgZW50cnkgPSBF REdFX1BSRUQgKGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApLT5zcmMsIDApOwogICAgICAgZG9f cnBvX3ZuIChmdW4sIGVudHJ5LCBleGl0X2Jicyk7Cg== --_002_VI1PR08MB5325308942BD4887854E3DEFFFE39VI1PR08MB5325eurp_--