From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 969EDC7618E for ; Tue, 25 Apr 2023 02:15:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:From:References:Cc:To: Subject:Date:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=R30Bbr3G9Q/ZccGb7z/+/Hfl86QYs9jwjnCOK65caiI=; b=wFD7NMFlOJLeR8HD6bhjr+jOBV gR+yvKB798pUqTMixgESPYaKVjLJFPcbNqp0oqnjwXIx2IlY3lsKLj2ipJ/Ca0UI6Zl1AWVygOWP3 G3WnOSHu3U/LXpw2v+laJ5gdhYY172Rxdjzd/VRS+p52K5HcAE6FzmFjNggsxaVzdzeC1RRU8j41+ 1TrJPdHUsxZYpzdwD7VD6KfDI52XmOg30FpEv3+BEPdCcbqIskpMUED0hMTbbt0beqDVCmfdueBXW P53u5O/HFEbmuDtFc7Iy7qpX9HXcfoqFDkG0uYRemjvDn0F9/eeMxgbVD42a331fRY+7tIo5fo9Du PgACN41w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pr8CJ-0002Am-0W; Tue, 25 Apr 2023 02:14:27 +0000 Received: from mail-db3eur04on0618.outbound.protection.outlook.com ([2a01:111:f400:fe0c::618] helo=EUR04-DB3-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pr8CC-00029n-2d for linux-arm-kernel@lists.infradead.org; Tue, 25 Apr 2023 02:14:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YRycZIowu0YS09rDAUdh5WCIP6UDUc4VyE3w5fwms04ZZCKKlhqqy1svoQfvcmvHYQCppZGqRIj5mWJbsc2Vg1zg2i6W53meKEtGCXogTH+9cgLNjJx8hmCDIpoomo7ukMBxow4O25aW9FsIxpewa4pgaQfC+2Uw+j2J9GxbS+zBnU/EYSodEMhEWftM4MR24hycprmBNJQvGFoGvZn+cqVtynUseEN/xedlD5C41qUFjwP5xRVb6hUNVdx/xshvUhZ/wzDMQOGqK7ltXJH45iHpVUdT6687DUPcaDdg37OucuySFRf/48pxx9lbT70ZvQyfAJv4mDpBVk5OjT7SWA== 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=qDnr/j7KlUf42u8cH4pRHOPfuuNc6/mEyVTXbWf6rTI=; b=V0zHBBnpx0Oyyp6tLcVtGbvmKKiTfUCl1+t9S5itnhhgIjk9XR5y52sZrODStNQ8cN3dRuw+ClZFcGunfiY8YhBvVvus9jZABoSZNl5Cu2b6wb4Nudx5LDJYoY4MXMr87oZOw8j3KZAKlvRrgfrisu6EBV29Me8hMUcwY5eK/B2hb3M75wfYndmQ3TDnxzEB+Wpts5hHcYfH6fqCtcO6UaOnw6oqAlfrDSaF1MKy7R3S/NdH0njY66/jPoWQtX4SKSZToS+9k/uqccDaqrsoduXAxL+NVi91ObKx3ZYNRgMdgtF1ovV4FBkFaZajBqJ/vm8sPTsMgdgnQyzJqzZ1/Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qDnr/j7KlUf42u8cH4pRHOPfuuNc6/mEyVTXbWf6rTI=; b=ma08EKodFP99GsjLSOvM6nIIBACTI8xW4yMqXHhVxYbh6ECjsNVJ/cUkE7elVvy0MoUnyTfZBSAnqzV7iHluu2ONWhmsJkxTkaxSOtmFhXcLHTiU8DtqRg3KAWiRv6RtUX/7X8ah2/f9rd+EJmI3WcBmFO7ibCvDdJw4/fgZYrI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from DU0PR04MB9417.eurprd04.prod.outlook.com (2603:10a6:10:358::11) by DB9PR04MB8265.eurprd04.prod.outlook.com (2603:10a6:10:24f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.33; Tue, 25 Apr 2023 02:14:14 +0000 Received: from DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::b999:f2c6:a8cc:7b4]) by DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::b999:f2c6:a8cc:7b4%5]) with mapi id 15.20.6319.032; Tue, 25 Apr 2023 02:14:13 +0000 Message-ID: Date: Tue, 25 Apr 2023 10:13:56 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: Re: [RFC v1 1/2] scmi: Introduce pinctrl SCMI protocol driver To: Oleksii Moisieiev , Cristian Marussi Cc: "sudeep.holla@arm.com" , Linus Walleij , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-gpio@vger.kernel.org" , "michal.simek@amd.com" , "vincent.guittot@linaro.org" , "souvik.chakravarty@arm.com" References: <54119b2cb43e29f69c5858a5320d3a58f23fed21.1680793130.git.oleksii_moisieiev@epam.com> <6dc456ff-7fc6-3b73-3727-dd048e9a9629@oss.nxp.com> <3e696235-a772-f988-da3d-2166f827267b@epam.com> From: Peng Fan In-Reply-To: <3e696235-a772-f988-da3d-2166f827267b@epam.com> X-ClientProxiedBy: SI1PR02CA0017.apcprd02.prod.outlook.com (2603:1096:4:1f4::10) To DU0PR04MB9417.eurprd04.prod.outlook.com (2603:10a6:10:358::11) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0PR04MB9417:EE_|DB9PR04MB8265:EE_ X-MS-Office365-Filtering-Correlation-Id: 38006719-a934-4697-2bf4-08db4532c348 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3iSI2eVucUlFhFxQ1XJYaXmGc8+rSWyi6WievKVQZZnAt9YM9XDtoL9aktS/jb5KS91HlA+aArCcLuggILvRxamA+eklkfx7+pZlllmfzUyIPk7T9wvYg+rG+Qr3223YTF7jznvL8pax1gfLHen8O+wEwfze3jvMTdRJXbWZ7J1njF+0qbwp+KN59JFxGVBOoZkiio5D59bvEOky1DnAsHuLHW7y7nU73AohI1FUV9Mp4sRNl32k6LbMRFuuo6iCKbo/gp2sg0U7L/X1Er4ta265ieYP/TmuvC5r4ATRNOUcxIKTNyprydGCJ246VS0ae39b3MMtF98qpYinr0MHUtaJrhMhtRcstEqR1Lwean3IeuWOfV3aVuYM/WgXhU7kH6t5c47///uRRM5X7mzRORFWHc2F39ybJhR+KuD1RLOgKOHC17dctAK5rfftNMfDZv5knNB5HRjDugNifaYX++VTXRJxcxdnBZlqPSh1EmDPRrdsiHbPNZp4uuoI5TkQJTNsggSdcdeou4LCJZWEgd5w0LZAotCy5+HXdFEBrzPlpiGg7zhz3S6L4R2QJ539pYmiCq/w6mTIjRcJ4HylWoG82DBo293BELF0RZ6l/i8LjxazPzCf10w5b366/BZxJRzcGMPFvpKIGcPoDQeE+/fjKrK5YCFco+tACDvAnQU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU0PR04MB9417.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(39860400002)(366004)(136003)(396003)(376002)(346002)(451199021)(30864003)(2906002)(66476007)(66556008)(66946007)(316002)(4326008)(44832011)(7416002)(5660300002)(8936002)(8676002)(41300700001)(31696002)(86362001)(186003)(26005)(6512007)(53546011)(38100700002)(478600001)(6666004)(966005)(6486002)(83380400001)(31686004)(2616005)(6506007)(110136005)(54906003)(45980500001)(43740500002)(559001)(579004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RG55Q0ZwdHdldlYxcE1hT3Z1SWVTYUdYK2V5YlZqUEloNzA0WFlHNUNFMTRl?= =?utf-8?B?SkRjZXgwTGxUaVl0dnMzcGc5cnRibnBXZTMwWnV1bHYyWDQ1WG5lV0hLSWND?= =?utf-8?B?S2NoV1pvY0lDNW1ZM1Rwdk1qb2ZHSnpEUFc4bzR3Q2QxbWx4OTBnOUYvRWVV?= =?utf-8?B?ZjVJN3BPZnpZRVMwcUFYY09waDFKVTZqRHRuQ1hIZExBU252eWR3c3NodVAx?= =?utf-8?B?NmR5cHV4c29vQkFkdmt1V2pKbkEvR3I4T0JOV1UvNU96dnNKTnNPWGZDU0tn?= =?utf-8?B?VTE1U216TjZoS3BtSndlRjNpYk5RZElleEhnbkVZREV1RjgwY3NBT2ZCODhN?= =?utf-8?B?SUZVTWdtMFU3cDZodDlSNDRJTDBhakZyUUtkZWc1Z1dOMHQwbXF5V0RnaTFa?= =?utf-8?B?TXJhTTVZbi9BYUwyV2FzRVU5UG9KdGdyK1ErYkZFSEZSemllMDM1TUdCM3Y0?= =?utf-8?B?ei9CN2Y5MXpLMW9MeWpvL0N5KzQybmt0Slg4S2ZnNmthS3BLOHZUK0lUS1Iw?= =?utf-8?B?VjVUREZTNnFwdlhBUjZLbnBQZ2lZN3psSzRZNW43TUh1Unh2S05YUndPa0Jm?= =?utf-8?B?V3VUVUdteFBSOHQ0aUVPeFRNUVlIZm1EYWEvZmt3eUdiazg2T2xqSXVKeUtX?= =?utf-8?B?b211YjlZWTRHaHFSekdKeVhXZUpLbjAxeDZONGRFY0dQbVVsS2RYWXpvZ3VC?= =?utf-8?B?ZEIwYmxuVXo1bXZ0ZE85d2ZqUTZEUGRYV1czejlIVnIrR01vSmkwWFVJYVhs?= =?utf-8?B?dGJVdGtrQ3U1N1YzdkIvSllXSllWNERhN3AxSThGaCt4NmgrTEZLRk5LblFV?= =?utf-8?B?MzFIVjlzTDNvOXF4MGN5YTAyTllONmlCSndybitDS0kwMWJaZ2NJcTJJNFMy?= =?utf-8?B?d2ZiOGlBV2tUTXJJeFAvUXJvcmhPV0xKMlNVcmZhVTdsSFB2ZFJtTHJqZldu?= =?utf-8?B?T3d1bStXM2FyNUNMWHMycW5sWFF4dWJRNFBiblVZVG8vUTJlWkZPWkl2RTB2?= =?utf-8?B?TElReVNPUjg5UGJrcmlHVjF3US9ZMUJCWkdSNWtyMTZWY3AvYTE4dU1PQlVx?= =?utf-8?B?RCtpeGNhc2ZQYjFzOFJPS2QyazZCaGYybk9JaEdybHowWlBCNHp0Z3J2UGlr?= =?utf-8?B?S0pCNklZQ0hHZU96aUlrcXREZ3FEekhsbHNGZUQrRnFka3FPWUxiMGRBY2x1?= =?utf-8?B?R3FvelBZTzlBaG92OFNCWTBacFliWHNqZ3VFL2ZyeEJ0aUQ3NGxMVmRwcS9G?= =?utf-8?B?dkRnN1lyNFdhWjNIaWZwMEtZYzZ2a3hzZ2h3andhOFRHaTBjdExFTHpEWjZn?= =?utf-8?B?NHduTncyNDFHaVRkVmRmN0I3NTArcUtQeFZTVU9CaFJiL0JrMXNjaFU5SExo?= =?utf-8?B?SW1Xbjk2RkIrZWlQNm03MEgzSWtBeVY5NktlaW83Y20rN1FVR0FiOUk4ZjdP?= =?utf-8?B?YlhESFFVNGNVTnE1OXVhVzl2MWo4UVFWMFlnL3k1bjVGRGtLemlBOW1sNEd4?= =?utf-8?B?NzFjUEg1MkYzSVVRVzZYS09sVnZueTZlOTN0TG13Nm9CeTloZ2RYYU5Xazg2?= =?utf-8?B?NHVHZGlDVHRBakJPaHk3TnpGdXhCOUZCMWh0QURVNTROVlJRQk5mYjl5UTlw?= =?utf-8?B?ZUUxdk9PTnZ6SWE3QW1kTVZQUnVVYUhtQ3hPTmJQay9pL0JTMStIV21BK3Y5?= =?utf-8?B?WjM4WlYyWlc4dFJkVzRTL2hGVFdGYmNFSGJIWmZQQlM4cXFOaDlZYUc4S21t?= =?utf-8?B?elFSQmVhV2JTaDNtTVNFNkVIbWJhN1NnKzlaRXBrM3pteVRMNFpudmF4OXNI?= =?utf-8?B?S0RXdDdWVStWWHN4R1MrUk1aMVNZV2I2cmVEemE5UDBsc0lWQUhEcUxUeVRp?= =?utf-8?B?U1RoVThOSVVTQktoa3FWVWR6cHNUK2NsVTNHd1FHWjFHYlo5eUszSVdNT1po?= =?utf-8?B?alp5VTJ4ZCsvcTRyNFNpaCt3TmN1c1ljNXBPTWZ4UFBjeW9NSnhSVHpCQXRM?= =?utf-8?B?UUFNY0FseEdjTEpiUGZIQ01GUzVXOGx6UjMzZC9TRlR0ZlVad3VXdTNHelBz?= =?utf-8?B?VUJiY3RjQ1BrcERuLzhUVlJEMXZHaHIyZjhraDlURkNXNXV4MzNQNU40VnM4?= =?utf-8?Q?jGlFkfmKgBbxZh9O1RQr3yljk?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 38006719-a934-4697-2bf4-08db4532c348 X-MS-Exchange-CrossTenant-AuthSource: DU0PR04MB9417.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2023 02:14:13.6305 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: KTu1YrI/2rG+1hDvpxfwnfAru4t433u0xRcq3faJHXOmkX9uv2wFNlDxrehihzoiHgP/EFALpSqH2p1xaHakcg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8265 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230424_191421_147411_40222DFC X-CRM114-Status: GOOD ( 29.81 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiA0LzI0LzIwMjMgNjozMyBQTSwgT2xla3NpaSBNb2lzaWVpZXYgd3JvdGU6Cj4gCj4gT24g MjQuMDQuMjMgMDQ6NTIsIFBlbmcgRmFuIHdyb3RlOgo+Pgo+Pgo+PiBPbiA0LzIxLzIwMjMgNDo0 MCBQTSwgT2xla3NpaSBNb2lzaWVpZXYgd3JvdGU6Cj4+PiBIaSBQZW5nIEZhbiwKPj4+Cj4+PiBP biAxNy4wNC4yMyAwNTo1NSwgUGVuZyBGYW4gd3JvdGU6Cj4+Pj4KPj4+Pgo+Pj4+IE9uIDQvMTMv MjAyMyA2OjA0IEFNLCBDcmlzdGlhbiBNYXJ1c3NpIHdyb3RlOgo+Pj4+PiBPbiBGcmksIEFwciAw NywgMjAyMyBhdCAxMDoxODoyN0FNICswMDAwLCBPbGVrc2lpIE1vaXNpZWlldiB3cm90ZToKPj4+ Pj4+IEltcGxlbWVudGF0aW9uIG9mIHRoZSBTQ01JIGNsaWVudCBkcml2ZXIsIHdoaWNoIGltcGxl bWVudHMKPj4+Pj4+IFBJTkNUUkxfUFJPVE9DT0wuIFRoaXMgcHJvdG9jb2wgaGFzIElEIDE5IGFu ZCBpcyBkZXNjcmliZWQKPj4+Pj4+IGluIHRoZSBsYXRlc3QgREVOMDA1NiBkb2N1bWVudC4KPj4+ Pj4KPj4+Pj4gSGksCj4+Pj4+Cj4+Pj4+PiBUaGlzIHByb3RvY29sIGlzIHBhcnQgb2YgdGhlIGZl YXR1cmUgdGhhdCB3YXMgZGVzaWduZWQgdG8KPj4+Pj4+IHNlcGFyYXRlIHRoZSBwaW5jdHJsIHN1 YnN5c3RlbSBmcm9tIHRoZSBTQ1AgZmlybXdhcmUuCj4+Pj4+PiBUaGUgaWRlYSBpcyB0byBzZXBh cmF0ZSBjb21tdW5pY2F0aW9uIG9mIHRoZSBwaW4gY29udHJvbAo+Pj4+Pj4gc3Vic3lzdGVtIHdp dGggdGhlIGhhcmR3YXJlIHRvIFNDUCBmaXJtd2FyZQo+Pj4+Pj4gKG9yIGEgc2ltaWxhciBzeXN0 ZW0sIHN1Y2ggYXMgQVRGKSwgd2hpY2ggcHJvdmlkZXMgYW4gaW50ZXJmYWNlCj4+Pj4+PiB0byBn aXZlIHRoZSBPUyBhYmlsaXR5IHRvIGNvbnRyb2wgdGhlIGhhcmR3YXJlIHRocm91Z2ggU0NNSSBw cm90b2NvbC4KPj4+Pj4+IFRoaXMgaXMgYSBnZW5lcmljIGRyaXZlciB0aGF0IGltcGxlbWVudHMg U0NNSSBwcm90b2NvbCwKPj4+Pj4+IGluZGVwZW5kZW50IG9mIHRoZSBwbGF0Zm9ybSB0eXBlLgo+ Pj4+Pj4KPj4+Pj4+IERFTjAwNTYgZG9jdW1lbnQ6Cj4+Pj4+PiBodHRwczovL3VybGRlZmVuc2Uu Y29tL3YzL19faHR0cHM6Ly9kZXZlbG9wZXIuYXJtLmNvbS9kb2N1bWVudGF0aW9uL2RlbjAwNTYv bGF0ZXN0X187ISFHRl8yOWRiY1FJVUJQQSF5MmhSM1BFR0d4aVBqVmVYQmNnR3lWMDNEUERoemdV S1IwdUh2c1RwaWFmS2dCYXI4RWdjNm9PT3MtSWtGSXF1aFNmLXFCemx0cUVNeXpSWkhxOGVDNGck Cj4+Pj4+Pgo+Pj4+Pj4gW2RldmVsb3BlclsuXWFybVsuXWNvbV0KPj4+Pj4+Cj4+Pj4+Cj4+Pj4+ IE5vIG5lZWQgdG8gc3BlY2lmeSBhbGwgb2YgdGhpcyBpbiB0aGUgY29tbWl0IG1lc3NhZ2UsIGp1 c3QgYSBub3RlIHRoYXQKPj4+Pj4geW91IGFyZSBhZGRpbmcgYSBuZXcgU0NNSXYzLjIgUGluY29u dHJvbCBwcm90b2NvbCwgaGlnaGxpZ2h0aW5nCj4+Pj4+IGFueXRoaW5nCj4+Pj4+IHRoYXQgaGFz IGJlZW4gbGVmdCBvdXQgaW4gdGhpcyBwYXRjaCAoaWYgYW55KSB3aWxsIGJlIGVub3VnaC4KPj4+ Pgo+Pj4+IElzIGl0IHBvc3NpYmxlIHRvIGV4dGVuZCB0aGUgc3BlYyB0byBzdXBwb3J0IG11bHRp bHBsZSB1aW50MzJfdCBmb3IgUElOCj4+Pj4gQ09ORklHIFNFVD8KPj4+Pgo+Pj4+IFdpdGggb25s eSBvbmUgdWludDMyX3QgY291bGQgbm90IHNhdGlzZnkgaS5NWCByZXF1aXJlbWVudC4KPj4+Pgo+ Pj4+IFRoYW5rcywKPj4+PiBQZW5nLgo+Pj4+Cj4+PiBJSVVDIHlvdSBhcmUgZXhwZWN0aW5nIHRv IGhhdmUgYW4gYWJpbGl0eSB0byBzZXQgc29tZSBraW5kIG9mIGFycmF5IG9mCj4+PiB1aW50MzJf dCBjb25maWcgdmFsdWVzIHRvIHNvbWUgc3BlY2lmaWMgQ29uZmlnVHlwZT8KPj4+Cj4+PiBJJ20g bm90IHN1cmUgaWYgaXQncyBzdXBwb3J0ZWQgYnkgcGludGN0cmwgc3Vic3lzdGVtIHJpZ2h0IG5v dy4gSSB3YXMKPj4+IHVuYWJsZSB0byBmaW5kIGFuIGV4YW1wbGUgaW4gdGhlIGV4aXN0aW5nIGRl dmljZS10cmVlIHBpbmN0cmwgYmluZGluZ3MuCj4+PiBUaGlzIG1ha2VzIG1lIHRoaW5rIHRoYXQg dGhpcyBraW5kIG9mIGJpbmRpbmcgaXMgT0VNIHNwZWNpZmljLgo+Pgo+PiBMb29rIGF0IGFyY2gv YXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDkzLTExeDExLWV2ay5kdHMKPj4KPj4gVGFrZSBs cHVhcnQgZm9yIGV4YW1wbGU6Cj4+IE1YOTNfUEFEX1VBUlQxX1JYRF9fTFBVQVJUMV9SWMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgzMWUKPj4KPj4gVGhlIG1hY3JvIE1YOTNf UEFEX1VBUlQxX1JYRF9fTFBVQVJUMV9SWCBpcyBhbiBhcnJheS4KPj4KPj4gaS5NWCBwaW5jdHJs IGRyaXZlciB1c2UKPj4gbXV4IHJlZywgbXV4IHZhbHVlLCBzZWxlY3QgcmVnLCBzZWxlY3QgdmFs dWUsIHBhZCByZWcsIHBhZCB2YWx1ZQo+Pgo+PiBwaW5jdHJsIGRyaXZlciB3aWxsIGJlIGhhbmRs ZWQgYnkgU0NNSSBmaXJtd2FyZSBmb3IgbmV3IGkuTVggU29DLgo+Pgo+PiBXaXRoIGN1cnJlbnQg c3BlYywgb25seSBvbmUgdWludDMyIGlzIGxvdyBzcGVlZC4gU28gaWYgdGhlIHNwZWMKPj4gY291 bGQgZXh0ZW5kZWQgdG8gc3VwcG9ydCBtb3JlIHVpbnQzMiB3aXRoIHBpbiBjb25maWcgc2V0LAo+ PiB3ZSBjb3VsZCB1c2Ugb25lIFNDTUkgY2FsbCB0byBzdXBwb3J0IGkuTVggcGluY3RybC4KPj4K Pj4gVGhhbmtzCj4+IFBlbmcuCj4+Cj4gSGkgUGVuZyBGYW4sCj4gCj4gVGhhbmsgeW91IGZvciB0 aGUgZXhhbXBsZS4KPiAKPiBBY2NvcmRpbmcgdG8gdGhlIGNvbW1lbnQgZm9yIHRoZSBmdW5jdGlv biBpbXhfcGluY3RybF9wYXJzZV9waW5fbW1pbzoKPiAKPiAvKgo+ICAgwqAqIEVhY2ggcGluIHJl cHJlc2VudGVkIGluIGZzbCxwaW5zIGNvbnNpc3RzIG9mIGEgbnVtYmVyIG9mIHUzMiBQSU5fRlVO Q19JRAo+ICAgwqAqIGFuZCAxIHUzMiBDT05GSUcsIHRoZSB0b3RhbCBzaXplIGlzIFBJTl9GVU5D X0lEICsgQ09ORklHIGZvciBlYWNoIHBpbi4KPiAgIMKgKiBGb3IgZ2VuZXJpY19waW5jb25mIGNh c2UsIHRoZXJlJ3Mgbm8gZXh0cmEgdTMyIENPTkZJRy4KPiAgIMKgKgo+ICAgwqAqIFBJTl9GVU5D X0lEIGZvcm1hdDoKPiAgIMKgKiBEZWZhdWx0Ogo+ICAgwqAqwqDCoMKgwqAgPG11eF9yZWcgY29u Zl9yZWcgaW5wdXRfcmVnIG11eF9tb2RlIGlucHV0X3ZhbD4KPiAgIMKgKiBTSEFSRV9NVVhfQ09O Rl9SRUc6Cj4gICDCoCrCoMKgwqDCoCA8bXV4X2NvbmZfcmVnIGlucHV0X3JlZyBtdXhfbW9kZSBp bnB1dF92YWw+Cj4gICDCoCogSU1YX1VTRV9TQ1U6Cj4gICDCoCrCoMKgwqDCoMKgIDxwaW5faWQg bXV4X21vZGU+Cj4gICDCoCovCj4gCj4gSUlVQyB0aGlzIHNheXMgdGhhdCBpbiBzY3UgZm9ybWF0 IGl0IGlzIGV4cGVjdGVkIHRvIHVzZSA8cGluX2lkCj4gbXV4X21vZGU+LiBUaGlzIGZpdCdzIHBy b3RvY29sIGV4cGVjdGF0aW9ucy4KClRoZSBjb21tZW50cyBhcmUgbWlzbGVhZGluZywgaXQgc2hv dWxkIGJlIHBpbl9pZCBtdXhfbW9kZSBjb25maWdfc2V0dGluZwpTZWUgYXJjaC9hcm02NC9ib290 L2R0cy9mcmVlc2NhbGUvaW14OHFtLW1lay5kdHMKCj4gCj4gVGhlIGlkZWEgd2FzIHRvIG1ha2Ug YWxsIHBsYXRmb3JtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBzdWNoIGFzCj4gPG11eF9yZWcg Y29uZl9yZWcgaW5wdXRfcmVnIG11eF9tb2RlIGlucHV0X3ZhbD4KPiAKPiBvbiB0aGUgU0NQIEZp cm13YXJlIHNpZGUgYW5kIGhpZGUgaXQgdW5kZXIgUGluIElEIGFuZCBDb25maWcgVHlwZSBzbwo+ IENsaWVudCBzaWRlIGNhbiBhcHBseSBnZW5lcmljIGNvbmZpZyBpbiB0aGUgZGV2aWNlIHRyZWUu Cj4gCj4gQ2FuJ3QgeW91IHVzZSBzY3UgZm9ybWF0IGhlcmU/IE9yIGV4ZWN1dGUKPiBpbXhfcGlu Y29uZl9kZWNvZGVfZ2VuZXJpY19jb25maWcgb24gU0NNSSBzZXJ2ZXIgc2lkZT8KClRlY2huaWNh bGx5IHdpdGggb25lIGNvbmZpZyB2YWx1ZSBpcyBkb2FibGUsIGJ1dCB0aGF0IG1lYW5zClNDTUkg bmVlZHMgZXhwb3NlIG1hbnkgcGluIGlkcywgc3VjaCBhcyBwaW4gaWQgU0RIQ19DRCwKaXQgY291 bGQgYmUgbXV4ZWQgYXMgU0RIQ19DRCwgR1BJTzFfNSwgU0FJX1JYLiBUaGVuCnNjbWkgbmVlZHMg ZXhwb3J0OgpTREhDX0NEX1NESENfQ0QKU0RIQ19DRF9HUElPMV81ClNESENfQ0RfU0FJX1JYCgoK SWYgd2l0aCBtdWx0aXBsZSB1aW50MzJfdmFsdWUgc3VwcG9ydCBieSBzcGVjLApzY21pIGp1c3Qg bmVlZHMgZXhwb3J0cyBTREhDX0NELCB3aXRoIG90aGVyIHZhbHVlcyBwYXNzZWQKdGhyb3VnaCB1 aW50MzIgdmFsdWUuCgpSZWdhcmRzLApQZW5nLgoKCgo+IAo+IEJlc3QgcmVnYXJkcywKPiAKPiBP bGVrc2lpLgo+IAo+Pj4KPj4+IE1heWJlIGl0IGNhbiBiZSBpbXBsZW1lbnRlZCBieSBhZGRpbmcg bmV3IElEcyB0byBPRU0gc3BlY2lmaWMgcmFuZ2UKPj4+ICgxOTItMjU1KSB3aGljaCBpcyByZXNl cnZlZCBmb3IgT0VNIHNwZWNpZmljIHVuaXRzIChTZWUgVGFibGUgMjMgb2YKPj4+IERFTjAwNTZF KS4KPj4+Cj4+PiBCZXN0IHJlZ2FyZHMsCj4+Pgo+Pj4gT2xla3NpaQo+Pj4KPj4+Cj4+Pj4+IFlv dSBjYW4gbG9vayBhdCB0aGUgdmVyeSBmaXJzdCBjb21taXQgbG9ncyBvZiBleGlzdGluZyBwcm90 b3MgYXMgYW4KPj4+Pj4gZXhhbXBsZSBsaWtlOiBkcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3Bv d2VyY2FwLmMKPj4+Pj4KPj4+Pj4gU29tZSBtb3JlIGNvbW1lbnRzIGRvd24gYmVsb3csIEknbGwg bW9zdGx5IHNraXAgYW55dGhpbmcgcmVsYXRlZCB0bwo+Pj4+PiB0aGUKPj4+Pj4gU0NNSSBBUEkg Y2hhbmdlIEkgbWVudGlvbmVkIGJlZm9yZS4uLgo+Pj4+Pgo+Pj4+PiBJJ2xsIGFsc28gd29udCBj b21tZW50IG9uIG1vcmUgdHJpdmlhbCBzdHVmZiByZWxhdGVkIHRvIHN0eWxlLCBCVVQKPj4+Pj4g dGhlcmUKPj4+Pj4gYXJlIGxvdHMgb2YgdGhlbTogeW91IHNob3VsZCBydW4KPj4+Pj4KPj4+Pj4g Li9zY3JpcHRzL2NoZWNrcGF0Y2gucGwgLS1zdHJpY3QgPHlvdXItZ2l0LWZvcm1hdC1wYXRjaC1m aWxlPgo+Pj4+Pgo+Pj4+PiBmb3IgZWFjaCBwYXRjaCBpbiB0aGUgc2VyaWVzLiAoYW5kIGZpeCBh Y2NvcmRpbmdseS4uc3BhY2luZywKPj4+Pj4gYnJhY2tldHMuLi5ldGMpCj4+Pj4+Cj4+Pj4+PiBT aWduZWQtb2ZmLWJ5OiBPbGVrc2lpIE1vaXNpZWlldiA8b2xla3NpaV9tb2lzaWVpZXZAZXBhbS5j b20+Cj4+Pj4+PiAtLS0KPj4+Pj4+ICDCoMKgIE1BSU5UQUlORVJTwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDYgKwo+Pj4+Pj4gIMKgwqAgZHJp dmVycy9maXJtd2FyZS9hcm1fc2NtaS9NYWtlZmlsZcKgIHzCoMKgIDIgKy0KPj4+Pj4+ICDCoMKg IGRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvY29tbW9uLmjCoCB8wqDCoCAxICsKPj4+Pj4+ICDC oMKgIGRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvZHJpdmVyLmPCoCB8wqDCoCAzICsKPj4+Pj4+ ICDCoMKgIGRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcGluY3RybC5jIHwgOTA1Cj4+Pj4+PiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+Pj4+PiAgwqDCoCBkcml2ZXJzL3BpbmN0cmwv S2NvbmZpZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA5ICsKPj4+Pj4+ICDCoMKgIGlu Y2x1ZGUvbGludXgvc2NtaV9wcm90b2NvbC5owqDCoMKgwqDCoMKgIHzCoCA1OCArLQo+Pj4+Pj4g IMKgwqAgNyBmaWxlcyBjaGFuZ2VkLCA5ODIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkK Pj4+Pj4+ICDCoMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2Zpcm13YXJlL2FybV9zY21p L3BpbmN0cmwuYwo+Pj4+Pj4KPj4+Pj4+IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5U QUlORVJTCj4+Pj4+PiBpbmRleCAyODFkZTIxM2VmNDcuLmFiYzU0M2ZkNzU0NCAxMDA2NDQKPj4+ Pj4+IC0tLSBhL01BSU5UQUlORVJTCj4+Pj4+PiArKysgYi9NQUlOVEFJTkVSUwo+Pj4+Pj4gQEAg LTE2OTYxLDYgKzE2OTYxLDEyIEBAIEY6wqDCoMKgIGRyaXZlcnMvcmVzZXQvcmVzZXQtc2NtaS5j Cj4+Pj4+PiAgwqDCoCBGOsKgwqDCoCBpbmNsdWRlL2xpbnV4L3NjW21wXWlfcHJvdG9jb2wuaAo+ Pj4+Pj4gIMKgwqAgRjrCoMKgwqAgaW5jbHVkZS90cmFjZS9ldmVudHMvc2NtaS5oCj4+Pj4+PiAg wqDCoCArUElOQ1RSTCBEUklWRVIgRk9SIFNZU1RFTSBDT05UUk9MICYgUE9XRVIvTUFOQUdFTUVO VCBJTlRFUkZBQ0UKPj4+Pj4+IChTQ1BJL1NDTUkpCj4+Pj4+PiArTTrCoMKgwqAgT2xla3NpaSBN b2lzaWVpZXYgPG9sZWtzaWlfbW9pc2llaWV2QGVwYW0uY29tPgo+Pj4+Pj4gK0w6wqDCoMKgIGxp bnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwo+Pj4+Pj4gK1M6wqDCoMKgIE1haW50 YWluZWQKPj4+Pj4+ICtGOsKgwqDCoCBkcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3BpbmN0cmwu Ywo+Pj4+Pj4gKwo+Pj4+Pj4gIMKgwqAgU1lTVEVNIFJFU0VUL1NIVVRET1dOIERSSVZFUlMKPj4+ Pj4+ICDCoMKgIE06wqDCoMKgIFNlYmFzdGlhbiBSZWljaGVsIDxzcmVAa2VybmVsLm9yZz4KPj4+ Pj4+ICDCoMKgIEw6wqDCoMKgIGxpbnV4LXBtQHZnZXIua2VybmVsLm9yZwo+Pj4+Pj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvTWFrZWZpbGUKPj4+Pj4+IGIvZHJpdmVy cy9maXJtd2FyZS9hcm1fc2NtaS9NYWtlZmlsZQo+Pj4+Pj4gaW5kZXggYmMwZDU0ZjhlODYxLi41 Y2VjMzU3ZmJmYTggMTAwNjQ0Cj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21p L01ha2VmaWxlCj4+Pj4+PiArKysgYi9kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL01ha2VmaWxl Cj4+Pj4+PiBAQCAtNCw3ICs0LDcgQEAgc2NtaS1kcml2ZXIteSA9IGRyaXZlci5vIG5vdGlmeS5v Cj4+Pj4+PiAgwqDCoCBzY21pLXRyYW5zcG9ydC15ID0gc2htZW0ubwo+Pj4+Pj4gIMKgwqAgc2Nt aS10cmFuc3BvcnQtJChDT05GSUdfTUFJTEJPWCkgKz0gbWFpbGJveC5vCj4+Pj4+PiAgwqDCoCBz Y21pLXRyYW5zcG9ydC0kKENPTkZJR19IQVZFX0FSTV9TTUNDQ19ESVNDT1ZFUlkpICs9IHNtYy5v Cj4+Pj4+PiAtc2NtaS1wcm90b2NvbHMteSA9IGJhc2UubyBjbG9jay5vIHBlcmYubyBwb3dlci5v IHJlc2V0Lm8gc2Vuc29ycy5vCj4+Pj4+PiBzeXN0ZW0ubwo+Pj4+Pj4gK3NjbWktcHJvdG9jb2xz LXkgPSBiYXNlLm8gY2xvY2subyBwZXJmLm8gcG93ZXIubyByZXNldC5vIHNlbnNvcnMubwo+Pj4+ Pj4gc3lzdGVtLm8gcGluY3RybC5vCj4+Pj4+PiAgwqDCoCBzY21pLW1vZHVsZS1vYmpzIDo9ICQo c2NtaS1idXMteSkgJChzY21pLWRyaXZlci15KQo+Pj4+Pj4gJChzY21pLXByb3RvY29scy15KSBc Cj4+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAkKHNjbWktdHJhbnNwb3J0LXkp Cj4+Pj4+PiAgwqDCoCBvYmotJChDT05GSUdfQVJNX1NDTUlfUFJPVE9DT0wpICs9IHNjbWktbW9k dWxlLm8KPj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL2NvbW1v bi5oCj4+Pj4+PiBiL2RyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvY29tbW9uLmgKPj4+Pj4+IGlu ZGV4IDY1MDYzZmE5NDhkNC4uOGJiYjQwNGFiZThkIDEwMDY0NAo+Pj4+Pj4gLS0tIGEvZHJpdmVy cy9maXJtd2FyZS9hcm1fc2NtaS9jb21tb24uaAo+Pj4+Pj4gKysrIGIvZHJpdmVycy9maXJtd2Fy ZS9hcm1fc2NtaS9jb21tb24uaAo+Pj4+Pj4gQEAgLTE3MCw2ICsxNzAsNyBAQCBERUNMQVJFX1ND TUlfUkVHSVNURVJfVU5SRUdJU1RFUihwb3dlcik7Cj4+Pj4+PiAgwqDCoCBERUNMQVJFX1NDTUlf UkVHSVNURVJfVU5SRUdJU1RFUihyZXNldCk7Cj4+Pj4+PiAgwqDCoCBERUNMQVJFX1NDTUlfUkVH SVNURVJfVU5SRUdJU1RFUihzZW5zb3JzKTsKPj4+Pj4+ICDCoMKgIERFQ0xBUkVfU0NNSV9SRUdJ U1RFUl9VTlJFR0lTVEVSKHN5c3RlbSk7Cj4+Pj4+PiArREVDTEFSRV9TQ01JX1JFR0lTVEVSX1VO UkVHSVNURVIocGluY3RybCk7Cj4+Pj4+PiAgwqDCoCDCoCAjZGVmaW5lIERFRklORV9TQ01JX1BS T1RPQ09MX1JFR0lTVEVSX1VOUkVHSVNURVIoaWQsIG5hbWUpIFwKPj4+Pj4+ICDCoMKgIGludCBf X2luaXQgc2NtaV8jI25hbWUjI19yZWdpc3Rlcih2b2lkKSBcCj4+Pj4+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9kcml2ZXIuYwo+Pj4+Pj4gYi9kcml2ZXJzL2Zpcm13 YXJlL2FybV9zY21pL2RyaXZlci5jCj4+Pj4+PiBpbmRleCAzZGZkOGI2YTBlYmYuLmZiOTUyNWZi M2MyNCAxMDA2NDQKPj4+Pj4+IC0tLSBhL2RyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvZHJpdmVy LmMKPj4+Pj4+ICsrKyBiL2RyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvZHJpdmVyLmMKPj4+Pj4+ IEBAIC03NDMsNiArNzQzLDcgQEAgc3RhdGljIHN0cnVjdCBzY21pX3Byb3RfZGV2bmFtZXMgZGV2 bmFtZXNbXSA9IHsKPj4+Pj4+ICDCoMKgwqDCoMKgwqAgeyBTQ01JX1BST1RPQ09MX0NMT0NLLMKg IHsgImNsb2NrcyIgfSx9LAo+Pj4+Pj4gIMKgwqDCoMKgwqDCoCB7IFNDTUlfUFJPVE9DT0xfU0VO U09SLCB7ICJod21vbiIgfSx9LAo+Pj4+Pj4gIMKgwqDCoMKgwqDCoCB7IFNDTUlfUFJPVE9DT0xf UkVTRVQswqAgeyAicmVzZXQiIH0sfSwKPj4+Pj4+ICvCoMKgwqAgeyBTQ01JX1BST1RPQ09MX1BJ TkNUUkwswqAgeyAicGluY3RybCIgfSx9LAo+Pj4+Pj4gIMKgwqAgfTsKPj4+Pj4+ICDCoMKgIMKg IHN0YXRpYyBpbmxpbmUgdm9pZAo+Pj4+Pj4gQEAgLTk0Nyw2ICs5NDgsNyBAQCBzdGF0aWMgaW50 IF9faW5pdCBzY21pX2RyaXZlcl9pbml0KHZvaWQpCj4+Pj4+PiAgwqDCoMKgwqDCoMKgIHNjbWlf cmVzZXRfcmVnaXN0ZXIoKTsKPj4+Pj4+ICDCoMKgwqDCoMKgwqAgc2NtaV9zZW5zb3JzX3JlZ2lz dGVyKCk7Cj4+Pj4+PiAgwqDCoMKgwqDCoMKgIHNjbWlfc3lzdGVtX3JlZ2lzdGVyKCk7Cj4+Pj4+ PiArwqDCoMKgIHNjbWlfcGluY3RybF9yZWdpc3RlcigpOwo+Pj4+Pj4gIMKgwqAgwqDCoMKgwqDC oCByZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzY21pX2RyaXZlcik7Cj4+Pj4+PiAg wqDCoCB9Cj4+Pj4+PiBAQCAtOTYyLDYgKzk2NCw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBzY21p X2RyaXZlcl9leGl0KHZvaWQpCj4+Pj4+PiAgwqDCoMKgwqDCoMKgIHNjbWlfcmVzZXRfdW5yZWdp c3RlcigpOwo+Pj4+Pj4gIMKgwqDCoMKgwqDCoCBzY21pX3NlbnNvcnNfdW5yZWdpc3RlcigpOwo+ Pj4+Pj4gIMKgwqDCoMKgwqDCoCBzY21pX3N5c3RlbV91bnJlZ2lzdGVyKCk7Cj4+Pj4+PiArwqDC oMKgIHNjbWlfcGluY3RybF91bnJlZ2lzdGVyKCk7Cj4+Pj4+PiAgwqDCoCDCoMKgwqDCoMKgIHBs YXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzY21pX2RyaXZlcik7Cj4+Pj4+PiAgwqDCoCB9Cj4+ Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9waW5jdHJsLmMKPj4+ Pj4+IGIvZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9waW5jdHJsLmMKPj4+Pj4+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4+Pj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjAzNzI3MGQ3ZjM5Ygo+Pj4+ Pj4gLS0tIC9kZXYvbnVsbAo+Pj4+Pj4gKysrIGIvZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9w aW5jdHJsLmMKPj4+Pj4+IEBAIC0wLDAgKzEsOTA1IEBACj4+Pj4+PiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKPj4+Pj4+ICsvKgo+Pj4+Pj4gKyAqIFN5c3RlbSBDb250cm9s IGFuZCBNYW5hZ2VtZW50IEludGVyZmFjZSAoU0NNSSkgUGluY3RybCBQcm90b2NvbAo+Pj4+Pj4g KyAqCj4+Pj4+PiArICogQ29weXJpZ2h0IChDKSAyMDIxIEVQQU0uCj4+Pj4+Cj4+Pj4+IG5pdHBp Y2s6IHVwZGF0ZSAoQykgeWVhcnMKPj4+Pj4KPj4+Pj4+ICsgKi8KPj4+Pj4+ICsKPj4+Pj4+ICsj ZGVmaW5lIHByX2ZtdChmbXQpICJTQ01JIE5vdGlmaWNhdGlvbnMgUElOQ1RSTCAtICIgZm10Cj4+ Pj4+PiArCj4+Pj4+Cj4+Pj4+IFRoaXMgaXMgbm90IG5lZWRlZCwgbm8gbm90aWZzIGluIHRoaXMg cHJvdG8uCj4+Pj4+Cj4+Pj4+PiArI2luY2x1ZGUgPGxpbnV4L3NjbWlfcHJvdG9jb2wuaD4KPj4+ Pj4+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+Pj4+Pj4gKwo+Pj4+Pj4gKyNpbmNsdWRlICJj b21tb24uaCIKPj4+Pj4+ICsjaW5jbHVkZSAibm90aWZ5LmgiCj4+Pj4+Cj4+Pj4+IE5vdGlmcyBu b3QgbmVlZGVkLCBhbmQgaW4gdGhlIG5ldyBBUEkgd29ybGQgeW91J2xsIGp1c3QgbmVlZCBhOgo+ Pj4+Pgo+Pj4+PiAgwqDCoCAjaW5jbHVkZSAicHJvdG9jb2xzLmgiCj4+Pj4+Cj4+Pj4+PiArCj4+ Pj4+PiArI2RlZmluZSBTRVRfVFlQRSh4KSAoKHgpICYgMHgzKQo+Pj4+Pj4gKwo+Pj4+Pgo+Pj4+ PiBFdmVuIGlmIHRyaXZpYWwgYmV0dGVyIHRvIHVzZSBzdGQgYml0ZmllbGQuaCBtYWNyb3MgbGlr ZQo+Pj4+PiBGSUVMRF9HRVQoKSBCSVQoKSAuLi4gZXRjCj4+Pj4+Cj4+Pj4+PiArZW51bSBzY21p X3BpbmN0cmxfcHJvdG9jb2xfY21kIHsKPj4+Pj4+ICvCoMKgwqAgUElOQ1RSTF9BVFRSSUJVVEVT ID0gMHgzLAo+Pj4+Pj4gK8KgwqDCoCBQSU5DVFJMX0xJU1RfQVNTT0NJQVRJT05TID0gMHg0LAo+ Pj4+Pj4gK8KgwqDCoCBQSU5DVFJMX0NPTkZJR19HRVQgPSAweDUsCj4+Pj4+PiArwqDCoMKgIFBJ TkNUUkxfQ09ORklHX1NFVCA9IDB4NiwKPj4+Pj4+ICvCoMKgwqAgUElOQ1RSTF9GVU5DVElPTl9T RUxFQ1QgPSAweDcsCj4+Pj4+PiArwqDCoMKgIFBJTkNUUkxfUkVRVUVTVCA9IDB4OCwKPj4+Pj4+ ICvCoMKgwqAgUElOQ1RSTF9SRUxFQVNFID0gMHg5LAo+Pj4+Pj4gK8KgwqDCoCBQSU5DVFJMX05B TUVfR0VUID0gMHhhLAo+Pj4+Pj4gK8KgwqDCoCBQSU5DVFJMX1NFVF9QRVJNSVNTSU9OUyA9IDB4 Ygo+Pj4+Pj4gK307Cj4+Pj4+PiArCj4+Pj4+PiArZW51bSBzY21pX3BpbmN0cmxfc2VsZWN0b3Jf dHlwZSB7Cj4+Pj4+PiArwqDCoMKgIFBJTl9UWVBFID0gMCwKPj4+Pj4+ICvCoMKgwqAgR1JPVVBf VFlQRSwKPj4+Pj4+ICvCoMKgwqAgRlVOQ1RJT05fVFlQRQo+Pj4+Pj4gK307Cj4+Pj4+PiArCj4+ Pj4+PiArc3RydWN0IHNjbWlfZ3JvdXBfaW5mbyB7Cj4+Pj4+PiArwqDCoMKgIGJvb2wgcHJlc2Vu dDsKPj4+Pj4+ICvCoMKgwqAgY2hhciAqbmFtZTsKPj4+Pj4+ICvCoMKgwqAgdW5zaWduZWQgaW50 ICpncm91cF9waW5zOwo+Pj4+Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgbnJfcGluczsKPj4+Pj4+ ICt9Owo+Pj4+Pj4gKwo+Pj4+Pj4gK3N0cnVjdCBzY21pX2Z1bmN0aW9uX2luZm8gewo+Pj4+Pj4g K8KgwqDCoCBib29sIHByZXNlbnQ7Cj4+Pj4+PiArwqDCoMKgIGNoYXIgKm5hbWU7Cj4+Pj4+PiAr wqDCoMKgIHVuc2lnbmVkIGludCAqZ3JvdXBzOwo+Pj4+Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQg bnJfZ3JvdXBzOwo+Pj4+Pj4gK307Cj4+Pj4+PiArCj4+Pj4+PiArc3RydWN0IHNjbWlfcGluX2lu Zm8gewo+Pj4+Pj4gK8KgwqDCoCBib29sIHByZXNlbnQ7Cj4+Pj4+PiArwqDCoMKgIGNoYXIgKm5h bWU7Cj4+Pj4+PiArfTsKPj4+Pj4+ICsKPj4+Pj4+ICtzdHJ1Y3Qgc2NtaV9waW5jdHJsX2luZm8g ewo+Pj4+Pj4gK8KgwqDCoCB1MzIgdmVyc2lvbjsKPj4+Pj4+ICvCoMKgwqAgdTE2IG5yX2dyb3Vw czsKPj4+Pj4+ICvCoMKgwqAgdTE2IG5yX2Z1bmN0aW9uczsKPj4+Pj4+ICvCoMKgwqAgdTE2IG5y X3BpbnM7Cj4+Pj4+Cj4+Pj4+IFNpbmNlIHRoZXNlIHZhcnMgYXJlIG5vdCByZWxhdGVkIHRvIHN0 cmljbHkgc3BhY2VkIG1lc3NhZ2UgZmllbGRzCj4+Pj4+IChldmVuIHRob3VnaAo+Pj4+PiBkZXJp dmVkIGZyb20gc3VjaCBtZXNzYWdlcykgZG8gbm90IHVzZSBzaXplZCB0eXBlcywgeW91IGNhbiBq dXN0Cj4+Pj4+IHN0aWNrIHdpdGgKPj4+Pj4gdW5zaWduZWQgaW50LiAoaXQgaXMgYWxzbyBiZXR0 ZXIgbm90IHRvIG1peCBzaXplZCBhbmQgdW5zaXplZCB0eXBlcwo+Pj4+PiBpbiB0aGUgc2FtZQo+ Pj4+PiBzdHJ1Y3QpLiBUaGlzIGFsc28gY291bGQgY29tZSBoYW5keSBpZiB0aGVzZSB3aWxsIGJl IGV4cG9zZWQgdG8gdGhlCj4+Pj4+IHVzZXIKPj4+Pj4gaW4gc2NtaV9wcm90b2NvbC5oIGluIHRo ZSBmdXR1cmUgKG1vcmUgb24gdGhpcyBkb3duIGJlbG93KQo+Pj4+Pgo+Pj4+Pj4gK8KgwqDCoCBz dHJ1Y3Qgc2NtaV9ncm91cF9pbmZvICpncm91cHM7Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBzY21p X2Z1bmN0aW9uX2luZm8gKmZ1bmN0aW9uczsKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IHNjbWlfcGlu X2luZm8gKnBpbnM7Cj4+Pj4+PiArfTsKPj4+Pj4+ICsKPj4+Pj4+ICtzdHJ1Y3Qgc2NtaV9jb25m X3R4IHsKPj4+Pj4+ICvCoMKgwqAgX19sZTMyIGlkZW50aWZpZXI7Cj4+Pj4+PiArI2RlZmluZSBT RVRfVFlQRV9CSVRTKGF0dHIsIHgpICgoKGF0dHIpICYgMHhGRkZGRkNGRikgfCAoeCAmIDB4MykK Pj4+Pj4+IDw8IDgpCj4+Pj4+PiArI2RlZmluZSBTRVRfQ09ORklHKGF0dHIsIHgpICgoKGF0dHIp ICYgMHhGRikgfCAoeCAmIDB4RkYpKQo+Pj4+Pgo+Pj4+PiBVc2UgYml0ZmllbGQuaCBsaWtlIEZJ RUxEX1NFVCAvIEdFTk1BU0sgZXRjCj4+Pj4+Cj4+Pj4+PiArwqDCoMKgIF9fbGUzMiBhdHRyaWJ1 dGVzOwo+Pj4+Pj4gK307Cj4+Pj4+PiArCj4+Pj4+PiArc3RhdGljIGludCBzY21pX3BpbmN0cmxf YXR0cmlidXRlc19nZXQoY29uc3Qgc3RydWN0IHNjbWlfaGFuZGxlCj4+Pj4+PiAqaGFuZGxlLAo+ Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBzY21pX3BpbmN0cmxfaW5mbyAqcGkpCj4+Pj4+PiArewo+Pj4+Pj4gK8KgwqDCoCBpbnQgcmV0 Owo+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3Qgc2NtaV94ZmVyICp0Owo+Pj4+Pj4gK8KgwqDCoCBzdHJ1 Y3Qgc2NtaV9tc2dfcGluY3RybF9wcm90b2NvbF9hdHRyaWJ1dGVzIHsKPj4+Pj4+ICsjZGVmaW5l IEdST1VQU19OUih4KSAoKHgpID4+IDE2KQo+Pj4+Pj4gKyNkZWZpbmUgUElOU19OUih4KSAoKHgp ICYgMHhmZmZmKQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIF9fbGUzMiBhdHRyaWJ1dGVzX2xvdzsK Pj4+Pj4+ICsjZGVmaW5lIEZVTkNUSU9OU19OUih4KSAoKHgpICYgMHhmZmZmKQo+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIF9fbGUzMiBhdHRyaWJ1dGVzX2hpZ2g7Cj4+Pj4+PiArwqDCoMKgIH0gKmF0 dHI7Cj4+Pj4+Cj4+Pj4+IEZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSByZXN0IG9mIHRoZSBzdGFj ayAobW9zdGx5IDpEKSwgcGxlYXNlIG1vdmUKPj4+Pj4gdGhpcyBzdHJ1Y3QKPj4+Pj4gZGVmaW5p dGlvbiBhbmQgcmVsYXRlZCBtYWNyb3Mgb3V0c2lkZSBpbiB0aGUgZ2xvYmFsIHNjb3BlIHJpZ2h0 IGFmdGVyCj4+Pj4+IGNvbW1hbmQKPj4+Pj4gZW51bS4gKGFuZCB1c2UgYml0ZmllbGQgbWFjcm9z IC4uLikKPj4+Pj4KPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgaWYgKCFwaSkKPj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcmV0ID0g c2NtaV94ZmVyX2dldF9pbml0KGhhbmRsZSwgUFJPVE9DT0xfQVRUUklCVVRFUywKPj4+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTQ01JX1BST1RPQ09MX1BJTkNUUkwsIDAs IHNpemVvZigqYXR0ciksICZ0KTsKPj4+Pj4+ICvCoMKgwqAgaWYgKHJldCkKPj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBhdHRyID0gdC0+ cnguYnVmOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCByZXQgPSBzY21pX2RvX3hmZXIoaGFuZGxl LCB0KTsKPj4+Pj4+ICvCoMKgwqAgaWYgKCFyZXQpIHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBw aS0+bnJfZnVuY3Rpb25zID0KPj4+Pj4+ICsgbGUxNl90b19jcHUoRlVOQ1RJT05TX05SKGF0dHIt PmF0dHJpYnV0ZXNfaGlnaCkpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHBpLT5ucl9ncm91cHMg PQo+Pj4+Pj4gbGUxNl90b19jcHUoR1JPVVBTX05SKGF0dHItPmF0dHJpYnV0ZXNfbG93KSk7Cj4+ Pj4+PiArwqDCoMKgwqDCoMKgwqAgcGktPm5yX3BpbnMgPSBsZTE2X3RvX2NwdShQSU5TX05SKGF0 dHItPmF0dHJpYnV0ZXNfbG93KSk7Cj4+Pj4+PiArwqDCoMKgIH0KPj4+Pj4+ICsKPj4+Pj4+ICvC oMKgwqAgc2NtaV94ZmVyX3B1dChoYW5kbGUsIHQpOwo+Pj4+Pj4gK8KgwqDCoCByZXR1cm4gcmV0 Owo+Pj4+Pj4gK30KPj4+Pj4+ICsKPj4+Pj4+ICtzdGF0aWMgaW50IHNjbWlfcGluY3RybF9nZXRf Z3JvdXBzX2NvdW50KGNvbnN0IHN0cnVjdCBzY21pX2hhbmRsZQo+Pj4+Pj4gKmhhbmRsZSkKPj4+ Pj4+ICt7Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBzY21pX3BpbmN0cmxfaW5mbyAqcGk7Cj4+Pj4+ PiArCj4+Pj4+PiArwqDCoMKgIGlmICghaGFuZGxlIHx8ICFoYW5kbGUtPnBpbmN0cmxfcHJpdikK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT0RFVjsKPj4+Pj4+ICsKPj4+Pj4+ICvC oMKgwqAgcGkgPSBoYW5kbGUtPnBpbmN0cmxfcHJpdjsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAg cmV0dXJuIHBpLT5ucl9ncm91cHM7Cj4+Pj4+PiArfQo+Pj4+Pj4gKwo+Pj4+Pj4gK3N0YXRpYyBp bnQgc2NtaV9waW5jdHJsX2dldF9waW5zX2NvdW50KGNvbnN0IHN0cnVjdCBzY21pX2hhbmRsZQo+ Pj4+Pj4gKmhhbmRsZSkKPj4+Pj4+ICt7Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBzY21pX3BpbmN0 cmxfaW5mbyAqcGk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIGlmICghaGFuZGxlIHx8ICFoYW5k bGUtPnBpbmN0cmxfcHJpdikKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT0RFVjsK Pj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcGkgPSBoYW5kbGUtPnBpbmN0cmxfcHJpdjsKPj4+Pj4+ ICsKPj4+Pj4+ICvCoMKgwqAgcmV0dXJuIHBpLT5ucl9waW5zOwo+Pj4+Pj4gK30KPj4+Pj4+ICsK Pj4+Pj4+ICtzdGF0aWMgaW50IHNjbWlfcGluY3RybF9nZXRfZnVuY3Rpb25zX2NvdW50KGNvbnN0 IHN0cnVjdAo+Pj4+Pj4gc2NtaV9oYW5kbGUgKmhhbmRsZSkKPj4+Pj4+ICt7Cj4+Pj4+PiArwqDC oMKgIHN0cnVjdCBzY21pX3BpbmN0cmxfaW5mbyAqcGk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKg IGlmICghaGFuZGxlIHx8ICFoYW5kbGUtPnBpbmN0cmxfcHJpdikKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVOT0RFVjsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcGkgPSBoYW5kbGUt PnBpbmN0cmxfcHJpdjsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcmV0dXJuIHBpLT5ucl9mdW5j dGlvbnM7Cj4+Pj4+PiArfQo+Pj4+Pj4gKwo+Pj4+Pj4gK3N0YXRpYyBpbnQgc2NtaV9waW5jdHJs X3ZhbGlkYXRlX2lkKGNvbnN0IHN0cnVjdCBzY21pX2hhbmRsZQo+Pj4+Pj4gKmhhbmRsZSwKPj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgaWRlbnRpZmll ciwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIHNj bWlfcGluY3RybF9zZWxlY3Rvcl90eXBlIHR5cGUpCj4+Pj4+PiArewo+Pj4+Pj4gK8KgwqDCoCBz dHJ1Y3Qgc2NtaV9waW5jdHJsX2luZm8gKnBpOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBpZiAo IWhhbmRsZSB8fCAhaGFuZGxlLT5waW5jdHJsX3ByaXYpCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FTk9ERVY7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHN3aXRjaCAodHlwZSkgewo+ Pj4+Pj4gK8KgwqDCoCBjYXNlIFBJTl9UWVBFOgo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHBpID0g aGFuZGxlLT5waW5jdHJsX3ByaXY7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIChpZGVudGlmaWVyIDwgcGktPm5yX3BpbnMpID8gMCA6IC1FSU5WQUw7Cj4+Pj4+PiArwqDC oMKgIGNhc2UgR1JPVVBfVFlQRToKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gKGlkZW50 aWZpZXIgPAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2NtaV9waW5jdHJsX2dldF9n cm91cHNfY291bnQoaGFuZGxlKSkgPwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCA6 IC1FSU5WQUw7Cj4+Pj4+PiArwqDCoMKgIGNhc2UgRlVOQ1RJT05fVFlQRToKPj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gKGlkZW50aWZpZXIgPAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc2NtaV9waW5jdHJsX2dldF9mdW5jdGlvbnNfY291bnQoaGFuZGxlKSkgPwo+Pj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCA6IC1FSU5WQUw7Cj4+Pj4+PiArwqDCoMKgIGRlZmF1 bHQ6Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4+PiArwqDCoMKg IH0KPj4+Pj4KPj4+Pj4gSGVyZSBJIHdvdWxkIGp1c3QgcGljayB0aGUgcmlnaHQgdmFsdWUgdG8g Y29tcGFyZSwgYnJlYWsgYW5kIHRoZW4KPj4+Pj4gY29tcGFyZSBhbmQgZXhpdCwgc29tZXRoaW5n IGFyb3VuZGYgdGhlIGxpbmVzIG9mOgo+Pj4+Pgo+Pj4+PiAgwqDCoMKgwqDCoGNhc2UgUElOX1RZ UEU6Cj4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgIC4uLgo+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHZhbCA9IHBpLT5ucl9waW5zOwo+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsK Pj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqAgLi4uCj4+Pj4+ICDCoMKgwqDCoMKgY2FzZSBHUk9VUF9U WVBFOgo+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoCB2YWwgPSBzY21pX3BpbmN0cmxfZ2V0X2dyb3Vw c19jb3VudCgpKTsKPj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+Pj4+Cj4+Pj4+ICDC oMKgwqDCoMKgLi4uLgo+Pj4+PiAgwqDCoMKgwqDCoC4uLi4KPj4+Pj4gIMKgwqDCoMKgwqDCoMKg wqAgZGVmYXVsdDoKPj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4+ ICDCoMKgwqDCoMKgfQo+Pj4+Pgo+Pj4+PiAgwqDCoMKgwqDCoGlmIChpZGVudGlmaWVyID49IHZh bCkKPj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4+Cj4+Pj4+ICDC oMKgwqDCoMKgcmV0dXJuIDA7Cj4+Pj4+IH0KPj4+Pj4KPj4+Pj4gLi4uIGl0J3MgZWFzaWVyIHRv IHJlYWQuIFdoYXQgZG8geW91IHRoaW5rID8KPj4+Pj4KPj4+Pj4KPj4+Pj4+ICt9Cj4+Pj4+PiAr Cj4+Pj4+PiArc3RhdGljIGludCBzY21pX3BpbmN0cmxfZ2V0X25hbWUoY29uc3Qgc3RydWN0IHNj bWlfaGFuZGxlICpoYW5kbGUsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdTMyIGlkZW50aWZpZXIsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZW51bSBzY21pX3BpbmN0cmxfc2VsZWN0b3JfdHlwZSB0eXBlLAo+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNoYXIgKipuYW1lKQo+Pj4+Pj4gK3sKPj4+Pj4KPj4+ Pj4gQXMgc2FpZCwgdGhlcmUgaXMgY29tbW9uIGhlbHBlciBmb3IgdGhpcywgYnV0IGl0IHdpbGwg bmVlZCBzb21lIHNtYWxsCj4+Pj4+IGFkYXB0YXRpb24gaW4gdGhlIFNDTUkgY29yZSB0byB3b3Jr IGhlcmUgc28ga2VlcCBpdCBhcyBpdCBpcywgYW5kCj4+Pj4+IEknbGwgdGFrZQo+Pj4+PiBjYXJl IG9mIHRoaXMgbGF0ZXIsIGlmIGl0IHNvdW5kcyBmaW5lIGZvciB5b3UuCj4+Pj4+Cj4+Pj4+PiAr wqDCoMKgIHN0cnVjdCBzY21pX3hmZXIgKnQ7Cj4+Pj4+PiArwqDCoMKgIGludCByZXQgPSAwOwo+ Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3Qgc2NtaV9uYW1lX3R4IHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCBfX2xlMzIgaWRlbnRpZmllcjsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBfX2xlMzIgZmxhZ3M7 Cj4+Pj4+PiArwqDCoMKgIH0gKnR4Owo+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3Qgc2NtaV9uYW1lX3J4 IHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBfX2xlMzIgZmxhZ3M7Cj4+Pj4+PiArwqDCoMKgwqDC oMKgwqAgdTggbmFtZVs2NF07Cj4+Pj4+PiArwqDCoMKgIH0gKnJ4Owo+Pj4+Pj4gKwo+Pj4+Pj4g K8KgwqDCoCBpZiAoIWhhbmRsZSB8fCAhbmFtZSkKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVJTlZBTDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcmV0ID0gc2NtaV9waW5jdHJsX3Zh bGlkYXRlX2lkKGhhbmRsZSwgaWRlbnRpZmllciwgdHlwZSk7Cj4+Pj4+PiArwqDCoMKgIGlmIChy ZXQpCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4+ICsKPj4+Pj4+ICvC oMKgwqAgcmV0ID0gc2NtaV94ZmVyX2dldF9pbml0KGhhbmRsZSwgUElOQ1RSTF9OQU1FX0dFVCwK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTQ01JX1BST1RPQ09MX1BJ TkNUUkwsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKCp0 eCksIHNpemVvZigqcngpLCAmdCk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHR4ID0gdC0+dHgu YnVmOwo+Pj4+Pj4gK8KgwqDCoCByeCA9IHQtPnJ4LmJ1ZjsKPj4+Pj4+ICvCoMKgwqAgdHgtPmlk ZW50aWZpZXIgPSBpZGVudGlmaWVyOwo+Pj4+Pj4gK8KgwqDCoCB0eC0+ZmxhZ3MgPSBTRVRfVFlQ RShjcHVfdG9fbGUzMih0eXBlKSk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHJldCA9IHNjbWlf ZG9feGZlcihoYW5kbGUsIHQpOwo+Pj4+Pj4gK8KgwqDCoCBpZiAocmV0KQo+Pj4+Pj4gK8KgwqDC oMKgwqDCoMKgIGdvdG8gb3V0Owo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBpZiAocngtPmZsYWdz KSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCBnb3RvIG91dDsKPj4+Pj4+ICvCoMKgwqAgfQo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDC oCAqbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXMiLCByeC0+bmFtZSk7Cj4+Pj4+PiAr wqDCoMKgIGlmICghKm5hbWUpCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVOT01FTTsK Pj4+Pj4+ICsgb3V0Ogo+Pj4+Pj4gK8KgwqDCoCBzY21pX3hmZXJfcHV0KGhhbmRsZSwgdCk7Cj4+ Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+PiArfQo+Pj4+Pj4gKwo+Pj4+ Pj4gK3N0YXRpYyBpbnQgc2NtaV9waW5jdHJsX2F0dHJpYnV0ZXMoY29uc3Qgc3RydWN0IHNjbWlf aGFuZGxlICpoYW5kbGUsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGVudW0gc2NtaV9waW5jdHJsX3NlbGVjdG9yX3R5cGUgdHlwZSwKPj4+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIHNlbGVjdG9yLCBjaGFyICoqbmFtZSwK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50 ICpuX2VsZW1zKQo+Pj4+Pj4gK3sKPj4+Pj4+ICvCoMKgwqAgaW50IHJldCA9IDA7Cj4+Pj4+PiAr wqDCoMKgIHN0cnVjdCBzY21pX3hmZXIgKnQ7Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBzY21pX3Bp bmN0cmxfYXR0cmlidXRlc190eCB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgX19sZTMyIGlkZW50 aWZpZXI7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgX19sZTMyIGZsYWdzOwo+Pj4+Pj4gK8KgwqDC oCB9ICp0eDsKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IHNjbWlfcGluY3RybF9hdHRyaWJ1dGVzX3J4 IHsKPj4+Pj4+ICsjZGVmaW5lIEVYVF9OQU1FX0ZMQUcoeCkgKCh4KSAmIEJJVCgzMSkpCj4+Pj4+ PiArI2RlZmluZSBOVU1fRUxFTVMoeCkgKCh4KSAmIDB4ZmZmZikKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCBfX2xlMzIgYXR0cmlidXRlczsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB1OCBuYW1lWzE2 XTsKPj4+Pj4+ICvCoMKgwqAgfSAqcng7Cj4+Pj4+Cj4+Pj4+IERpdHRvLiBNb3ZlIHRoZXNlIGRl ZnMgb3V0c2lkZSwgYml0ZmllbGQuaCBmb3IgbWFjcm9zIGFuZCB0cnkgdG8KPj4+Pj4gdXNlIHRo ZQo+Pj4+PiBzYW1lIG5hbWluZyBzdHlsZSBmb3IgbWVzc2FnZSBzdHJ1Y3RzIGFzIGluIG90aGVy IHByb3RvcywgaS5lLgo+Pj4+Pgo+Pj4+PiAgwqDCoMKgwqDCoGZvciBjb21tYW5kczrCoMKgwqDC oCBzdHJ1Y3Qgc2NtaV9tc2dfcGluY3RybF9hdHRyaWJ1dGVzCj4+Pj4+ICDCoMKgwqDCoMKgZm9y IHJlcGxpZXM6wqDCoMKgwqAgc3RydWN0IHNjbWlfcmVzcF9waW5jdHJsX2F0dHJpYnV0ZXMKPj4+ Pj4KPj4+Pj4gKG9yIHNvbWUgdmFyaWF0aW9ucyBhcm91bmQgdGhhdC4uLgo+Pj4+PiAgwqDCoMKg wqDCoHNjbWlfbXNnX2NtZF8qwqAgc2NtaV9tc2dfcmVzcF8qCj4+Pj4+Cj4+Pj4+ICDCoMKgwqAg d2UgaGF2ZSBub3QgYmVlbiBmdWxseSBjb25zaXN0ZW50IHJlYWxseSwgc28gSSBkb250IHdhbnQg dG8gYmUKPj4+Pj4gIMKgwqDCoCBwZWRhbnRpYyBoZXJlLCBidXQgd2UgbmV2ZXIgdXNlZCB0eC9y eCBpbiBtZXNzYWdlIGNvbnRleHQgc2luY2UKPj4+Pj4gaXQgaXMKPj4+Pj4gIMKgwqDCoCBhbHJl YWR5IChtaXMpLXVzZWQgaW4gU0NNSSBjaGFubmVsIGNvbnRleHQuLi4pCj4+Pj4+Cj4+Pj4+PiAr Cj4+Pj4+PiArwqDCoMKgIGlmICghaGFuZGxlIHx8ICFuYW1lKQo+Pj4+Pj4gK8KgwqDCoMKgwqDC oMKgIHJldHVybiAtRUlOVkFMOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCByZXQgPSBzY21pX3Bp bmN0cmxfdmFsaWRhdGVfaWQoaGFuZGxlLCBzZWxlY3RvciwgdHlwZSk7Cj4+Pj4+PiArwqDCoMKg IGlmIChyZXQpCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4+ICsKPj4+ Pj4+ICvCoMKgwqAgcmV0ID0gc2NtaV94ZmVyX2dldF9pbml0KGhhbmRsZSwgUElOQ1RSTF9BVFRS SUJVVEVTLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTQ01JX1BST1RPQ09MX1BJ TkNUUkwsIHNpemVvZigqdHgpLCBzaXplb2YoKnJ4KSwgJnQpOwo+Pj4+Pj4gK8KgwqDCoCBpZiAo cmV0KQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+PiArCj4+Pj4+PiAr wqDCoMKgIHR4ID0gdC0+dHguYnVmOwo+Pj4+Pj4gK8KgwqDCoCByeCA9IHQtPnJ4LmJ1ZjsKPj4+ Pj4+ICvCoMKgwqAgdHgtPmlkZW50aWZpZXIgPSBzZWxlY3RvcjsKPj4+Pj4+ICvCoMKgwqAgdHgt PmZsYWdzID0gU0VUX1RZUEUoY3B1X3RvX2xlMzIodHlwZSkpOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8Kg wqDCoCByZXQgPSBzY21pX2RvX3hmZXIoaGFuZGxlLCB0KTsKPj4+Pj4+ICvCoMKgwqAgaWYgKHJl dCkKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIG91dDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKg wqAgKm5fZWxlbXMgPSBOVU1fRUxFTVMocngtPmF0dHJpYnV0ZXMpOwo+Pj4+Pj4gKwo+Pj4+Pj4g K8KgwqDCoCBpZiAoIUVYVF9OQU1FX0ZMQUcocngtPmF0dHJpYnV0ZXMpKSB7Cj4+Pj4+PiArwqDC oMKgwqDCoMKgwqAgKm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzIiwgcngtPm5hbWUp Owo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghKm5hbWUpCj4+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXQgPSAtRU5PTUVNOwo+Pj4+Pj4gK8KgwqDCoCB9IGVsc2UKPj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCByZXQgPSBzY21pX3BpbmN0cmxfZ2V0X25hbWUoaGFuZGxlLCBzZWxlY3Rv ciwgdHlwZSwgbmFtZSk7Cj4+Pj4+PiArIG91dDoKPj4+Pj4+ICvCoMKgwqAgc2NtaV94ZmVyX3B1 dChoYW5kbGUsIHQpOwo+Pj4+Pj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4gK30KPj4+Pj4+ ICsKPj4+Pj4+ICtzdGF0aWMgaW50IHNjbWlfcGluY3RybF9saXN0X2Fzc29jaWF0aW9ucyhjb25z dCBzdHJ1Y3Qgc2NtaV9oYW5kbGUKPj4+Pj4+ICpoYW5kbGUsCj4+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBzZWxlY3RvciwKPj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSBzY21pX3BpbmN0cmxf c2VsZWN0b3JfdHlwZSB0eXBlLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB1aW50MTZfdCBzaXplLCB1bnNpZ25lZCBpbnQgKmFycmF5KQo+Pj4+Pj4g K3sKPj4+Pj4KPj4+Pj4gVGhpcyBpcyB0aGUgb3RoZXIgZnVuY3Rpb25hbGl0aWVzIHlvdSBjb3Vs ZCBpbXBsZW1lbnQgc3RyYWlnaHQgYXdheQo+Pj4+PiB1c2luZwo+Pj4+PiBwaC0+aG9wcyBoZWxw ZXJzIChpdGVyYXRvcnMpIGJ1dCBqdXN0IGxlYXZlIGl0IHRoaXMgd2F5LCBhbmQgSSdsbAo+Pj4+ PiBwb3J0IGl0IGxhdGVyCj4+Pj4+IChvbmNlIHdlIHJldGVzdGVkIGFsbCBvZiB0aGlzIGFzIHdv cmtpbmcgd2l0aCB0aGUgbmV3IEFQSSBidXQgd2l0aG91dAo+Pj4+PiBhbnkKPj4+Pj4gcGgtPmhv cHMgdXNhZ2UuLkkgdGhpbmsgaXQgaXMgc2FmZXIgdG8gY2hhbmdlIG9uZSBiaXQgYXQgdGltZS4u LiA6UCkKPj4+Pj4KPj4+Pj4+ICvCoMKgwqAgc3RydWN0IHNjbWlfeGZlciAqdDsKPj4+Pj4+ICvC oMKgwqAgc3RydWN0IHNjbWlfcGluY3RybF9saXN0X2Fzc29jX3R4IHsKPj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCBfX2xlMzIgaWRlbnRpZmllcjsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBfX2xlMzIg ZmxhZ3M7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgX19sZTMyIGluZGV4Owo+Pj4+Pj4gK8KgwqDC oCB9ICp0eDsKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IHNjbWlfcGluY3RybF9saXN0X2Fzc29jX3J4 IHsKPj4+Pj4+ICsjZGVmaW5lIFJFVFVSTkVEKHgpICgoeCkgJiAweEZGRikKPj4+Pj4+ICsjZGVm aW5lIFJFTUFJTklORyh4KSAoKHgpID4+IDE2KQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIF9fbGUz MiBmbGFnczsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBfX2xlMTYgYXJyYXlbXTsKPj4+Pj4+ICvC oMKgwqAgfSAqcng7Cj4+Pj4+Cj4+Pj4+IERpdHRvLCBhYm91dCBzdHJ1Y3QgbmFtaW5nIGFuZCBt YWNyb3MuCj4+Pj4+Cj4+Pj4+PiArwqDCoMKgIHUxNiB0b3RfbnVtX3JldCA9IDAsIGxvb3BfbnVt X3JldDsKPj4+Pj4+ICvCoMKgwqAgdTE2IHJlbWFpbmluZ19udW1fcmV0Owo+Pj4+Pj4gK8KgwqDC oCBpbnQgcmV0LCBsb29wOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBpZiAoIWhhbmRsZSB8fCAh YXJyYXkgfHwgIXNpemUpCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ Pj4+PiArCj4+Pj4+PiArwqDCoMKgIGlmICh0eXBlID09IFBJTl9UWVBFKQo+Pj4+Pj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCByZXQgPSBz Y21pX3BpbmN0cmxfdmFsaWRhdGVfaWQoaGFuZGxlLCBzZWxlY3RvciwgdHlwZSk7Cj4+Pj4+PiAr wqDCoMKgIGlmIChyZXQpCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4+ ICsKPj4+Pj4+ICvCoMKgwqAgcmV0ID0gc2NtaV94ZmVyX2dldF9pbml0KGhhbmRsZSwgUElOQ1RS TF9MSVNUX0FTU09DSUFUSU9OUywKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBTQ01JX1BST1RPQ09MX1BJTkNUUkwsIHNpemVvZigqdHgpLAo+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsICZ0KTsKPj4+Pj4+ICvCoMKgwqAgaWYgKHJldCkK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDC oCB0eCA9IHQtPnR4LmJ1ZjsKPj4+Pj4+ICvCoMKgwqAgcnggPSB0LT5yeC5idWY7Cj4+Pj4+PiAr Cj4+Pj4+PiArwqDCoMKgIGRvIHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB0eC0+aWRlbnRpZmll ciA9IGNwdV90b19sZTMyKHNlbGVjdG9yKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB0eC0+Zmxh Z3MgPSBTRVRfVFlQRShjcHVfdG9fbGUzMih0eXBlKSk7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAg dHgtPmluZGV4ID0gY3B1X3RvX2xlMzIodG90X251bV9yZXQpOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIHJldCA9IHNjbWlfZG9feGZlcihoYW5kbGUsIHQpOwo+Pj4+Pj4gK8KgwqDC oMKgwqDCoMKgIGlmIChyZXQpCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsK Pj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBsb29wX251bV9yZXQgPSBsZTMyX3RvX2Nw dShSRVRVUk5FRChyeC0+ZmxhZ3MpKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZW1haW5pbmdf bnVtX3JldCA9IGxlMzJfdG9fY3B1KFJFTUFJTklORyhyeC0+ZmxhZ3MpKTsKPj4+Pj4+ICsKPj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGxvb3AgPSAwOyBsb29wIDwgbG9vcF9udW1fcmV0OyBs b29wKyspIHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICh0b3RfbnVtX3JldCAr IGxvb3AgPj0gc2l6ZSkgewo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXQgPSAtRU1TR1NJWkU7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdv dG8gb3V0Owo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+Pj4gKwo+Pj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXJyYXlbdG90X251bV9yZXQgKyBsb29wXSA9Cj4+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxlMTZfdG9fY3B1KHJ4LT5hcnJheVts b29wXSk7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgIHRvdF9udW1fcmV0ICs9IGxvb3BfbnVtX3JldDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCBzY21pX3Jlc2V0X3J4X3RvX21heHN6KGhhbmRsZSwgdCk7Cj4+Pj4+PiArwqDC oMKgIH0gd2hpbGUgKHJlbWFpbmluZ19udW1fcmV0ID4gMCk7Cj4+Pj4+PiArb3V0Ogo+Pj4+Pj4g K8KgwqDCoCBzY21pX3hmZXJfcHV0KGhhbmRsZSwgdCk7Cj4+Pj4+PiArwqDCoMKgIHJldHVybiBy ZXQ7Cj4+Pj4+PiArfQo+Pj4+Pj4gKwo+Pj4+Pj4gK3N0YXRpYyBpbnQgc2NtaV9waW5jdHJsX3Jl cXVlc3RfY29uZmlnKGNvbnN0IHN0cnVjdCBzY21pX2hhbmRsZQo+Pj4+Pj4gKmhhbmRsZSwKPj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgc2Vs ZWN0b3IsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZW51bSBzY21pX3BpbmN0cmxfc2VsZWN0b3JfdHlwZSB0eXBlLAo+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiAqY29uZmlnKQo+Pj4+Pj4g K3sKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IHNjbWlfeGZlciAqdDsKPj4+Pj4+ICvCoMKgwqAgc3Ry dWN0IHNjbWlfY29uZl90eCAqdHg7Cj4+Pj4+PiArwqDCoMKgIF9fbGUzMiAqcGFja2VkX2NvbmZp ZzsKPj4+Pj4+ICvCoMKgwqAgdTMyIGF0dHJpYnV0ZXMgPSAwOwo+Pj4+Pj4gK8KgwqDCoCBpbnQg cmV0Owo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBpZiAoIWhhbmRsZSB8fCAhY29uZmlnIHx8IHR5 cGUgPT0gRlVOQ1RJT05fVFlQRSkKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZB TDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcmV0ID0gc2NtaV9waW5jdHJsX3ZhbGlkYXRlX2lk KGhhbmRsZSwgc2VsZWN0b3IsIHR5cGUpOwo+Pj4+Pj4gK8KgwqDCoCBpZiAocmV0KQo+Pj4+Pj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHJldCA9 IHNjbWlfeGZlcl9nZXRfaW5pdChoYW5kbGUsIFBJTkNUUkxfQ09ORklHX0dFVCwKPj4+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTQ01JX1BST1RPQ09MX1BJTkNUUkwsCj4+ Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKCp0eCksIHNpemVv ZigqcGFja2VkX2NvbmZpZyksICZ0KTsKPj4+Pj4+ICvCoMKgwqAgaWYgKHJldCkKPj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCB0eCA9IHQt PnR4LmJ1ZjsKPj4+Pj4+ICvCoMKgwqAgcGFja2VkX2NvbmZpZyA9IHQtPnJ4LmJ1ZjsKPj4+Pj4+ ICvCoMKgwqAgdHgtPmlkZW50aWZpZXIgPSBjcHVfdG9fbGUzMihzZWxlY3Rvcik7Cj4+Pj4+PiAr wqDCoMKgIGF0dHJpYnV0ZXMgPSBTRVRfVFlQRV9CSVRTKGF0dHJpYnV0ZXMsIHR5cGUpOwo+Pj4+ Pj4gK8KgwqDCoCBhdHRyaWJ1dGVzID0gU0VUX0NPTkZJRyhhdHRyaWJ1dGVzLCAqY29uZmlnKTsK Pj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgdHgtPmF0dHJpYnV0ZXMgPSBjcHVfdG9fbGUzMihhdHRy aWJ1dGVzKTsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcmV0ID0gc2NtaV9kb194ZmVyKGhhbmRs ZSwgdCk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIGlmICghcmV0KQo+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgICpjb25maWcgPSBsZTMyX3RvX2NwdSgqcGFja2VkX2NvbmZpZyk7Cj4+Pj4+PiArCj4+ Pj4+PiArwqDCoMKgIHNjbWlfeGZlcl9wdXQoaGFuZGxlLCB0KTsKPj4+Pj4+ICvCoMKgwqAgcmV0 dXJuIHJldDsKPj4+Pj4+ICt9Cj4+Pj4+PiArCj4+Pj4+PiArc3RhdGljIGludCBzY21pX3BpbmN0 cmxfZ2V0X2NvbmZpZyhjb25zdCBzdHJ1Y3Qgc2NtaV9oYW5kbGUKPj4+Pj4+ICpoYW5kbGUsIHUz MiBwaW4sCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiAq Y29uZmlnKQo+Pj4+Pj4gK3sKPj4+Pj4+ICvCoMKgwqAgcmV0dXJuIHNjbWlfcGluY3RybF9yZXF1 ZXN0X2NvbmZpZyhoYW5kbGUsIHBpbiwgUElOX1RZUEUsCj4+Pj4+PiBjb25maWcpOwo+Pj4+Pj4g K30KPj4+Pj4+ICsKPj4+Pj4+ICtzdGF0aWMgaW50IHNjbWlfcGluY3RybF9hcHBseV9jb25maWco Y29uc3Qgc3RydWN0IHNjbWlfaGFuZGxlCj4+Pj4+PiAqaGFuZGxlLAo+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIHNlbGVjdG9yLAo+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSBzY21pX3BpbmN0cmxf c2VsZWN0b3JfdHlwZSB0eXBlLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgdTMyIGNvbmZpZykKPj4+Pj4+ICt7Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBz Y21pX3hmZXIgKnQ7Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBzY21pX2NvbmZfdHggKnR4Owo+Pj4+ Pj4gK8KgwqDCoCB1MzIgYXR0cmlidXRlcyA9IDA7Cj4+Pj4+PiArwqDCoMKgIGludCByZXQ7Cj4+ Pj4+PiArCj4+Pj4+PiArwqDCoMKgIGlmICghaGFuZGxlIHx8IHR5cGUgPT0gRlVOQ1RJT05fVFlQ RSkKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+Pj4+ICsKPj4+Pj4+ ICvCoMKgwqAgcmV0ID0gc2NtaV9waW5jdHJsX3ZhbGlkYXRlX2lkKGhhbmRsZSwgc2VsZWN0b3Is IHR5cGUpOwo+Pj4+Pj4gK8KgwqDCoCBpZiAocmV0KQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiByZXQ7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHJldCA9IHNjbWlfeGZlcl9nZXRfaW5p dChoYW5kbGUsIFBJTkNUUkxfQ09ORklHX1NFVCwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBTQ01JX1BST1RPQ09MX1BJTkNUUkwsCj4+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKCp0eCksIDAsICZ0KTsKPj4+Pj4+ICvCoMKgwqAg aWYgKHJldCkKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4gKwo+Pj4+ Pj4gK8KgwqDCoCB0eCA9IHQtPnR4LmJ1ZjsKPj4+Pj4+ICvCoMKgwqAgdHgtPmlkZW50aWZpZXIg PSBjcHVfdG9fbGUzMihzZWxlY3Rvcik7Cj4+Pj4+PiArwqDCoMKgIGF0dHJpYnV0ZXMgPSBTRVRf VFlQRV9CSVRTKGF0dHJpYnV0ZXMsIHR5cGUpOwo+Pj4+Pj4gK8KgwqDCoCBhdHRyaWJ1dGVzID0g U0VUX0NPTkZJRyhhdHRyaWJ1dGVzLCBjb25maWcpOwo+Pj4+Pj4gK8KgwqDCoCB0eC0+YXR0cmli dXRlcyA9IGNwdV90b19sZTMyKGF0dHJpYnV0ZXMpOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBy ZXQgPSBzY21pX2RvX3hmZXIoaGFuZGxlLCB0KTsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgc2Nt aV94ZmVyX3B1dChoYW5kbGUsIHQpOwo+Pj4+Pj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4g K30KPj4+Pj4+ICsKPj4+Pj4+ICtzdGF0aWMgaW50IHNjbWlfcGluY3RybF9zZXRfY29uZmlnKGNv bnN0IHN0cnVjdCBzY21pX2hhbmRsZQo+Pj4+Pj4gKmhhbmRsZSwgdTMyIHBpbiwKPj4+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGNvbmZpZykKPj4+Pj4+ICt7 Cj4+Pj4+PiArwqDCoMKgIHJldHVybiBzY21pX3BpbmN0cmxfYXBwbHlfY29uZmlnKGhhbmRsZSwg cGluLCBQSU5fVFlQRSwgY29uZmlnKTsKPj4+Pj4+ICt9Cj4+Pj4+PiArCj4+Pj4+PiArc3RhdGlj IGludCBzY21pX3BpbmN0cmxfZ2V0X2NvbmZpZ19ncm91cChjb25zdCBzdHJ1Y3Qgc2NtaV9oYW5k bGUKPj4+Pj4+ICpoYW5kbGUsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB1MzIgZ3JvdXAsIHUzMiAqY29uZmlnKQo+Pj4+Pj4gK3sKPj4+Pj4+ICvCoMKg wqAgcmV0dXJuIHNjbWlfcGluY3RybF9yZXF1ZXN0X2NvbmZpZyhoYW5kbGUsIGdyb3VwLCBHUk9V UF9UWVBFLAo+Pj4+Pj4gY29uZmlnKTsKPj4+Pj4+ICt9Cj4+Pj4+PiArCj4+Pj4+PiArc3RhdGlj IGludCBzY21pX3BpbmN0cmxfc2V0X2NvbmZpZ19ncm91cChjb25zdCBzdHJ1Y3Qgc2NtaV9oYW5k bGUKPj4+Pj4+ICpoYW5kbGUsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB1MzIgZ3JvdXAsIHUzMiBjb25maWcpCj4+Pj4+PiArewo+Pj4+Pj4gK8KgwqDC oCByZXR1cm4gc2NtaV9waW5jdHJsX2FwcGx5X2NvbmZpZyhoYW5kbGUsIGdyb3VwLCBHUk9VUF9U WVBFLAo+Pj4+Pj4gY29uZmlnKTsKPj4+Pj4+ICt9Cj4+Pj4+PiArCj4+Pj4+PiArc3RhdGljIGlu dCBzY21pX3BpbmN0cmxfZnVuY3Rpb25fc2VsZWN0KGNvbnN0IHN0cnVjdCBzY21pX2hhbmRsZQo+ Pj4+Pj4gKmhhbmRsZSwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB1MzIgaWRlbnRpZmllciwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBlbnVtIHNjbWlfcGluY3RybF9zZWxlY3Rvcl90eXBlIHR5cGUsCj4+Pj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGZ1bmN0aW9uX2lkKQo+ Pj4+Pj4gK3sKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IHNjbWlfeGZlciAqdDsKPj4+Pj4+ICvCoMKg wqAgc3RydWN0IHNjbWlfZnVuY19zZXRfdHggewo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIF9fbGUz MiBpZGVudGlmaWVyOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIF9fbGUzMiBmdW5jdGlvbl9pZDsK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBfX2xlMzIgZmxhZ3M7Cj4+Pj4+PiArwqDCoMKgIH0gKnR4 Owo+Pj4+Pgo+Pj4+PiBEaXR0by4KPj4+Pj4KPj4+Pj4+ICvCoMKgwqAgaW50IHJldDsKPj4+Pj4+ ICsKPj4+Pj4+ICvCoMKgwqAgaWYgKCFoYW5kbGUgfHwgdHlwZSA9PSBGVU5DVElPTl9UWVBFKQo+ Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8Kg wqDCoCByZXQgPSBzY21pX3BpbmN0cmxfdmFsaWRhdGVfaWQoaGFuZGxlLCBpZGVudGlmaWVyLCB0 eXBlKTsKPj4+Pj4+ICvCoMKgwqAgaWYgKHJldCkKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gcmV0Owo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCByZXQgPSBzY21pX3hmZXJfZ2V0X2luaXQo aGFuZGxlLCBQSU5DVFJMX0ZVTkNUSU9OX1NFTEVDVCwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBTQ01JX1BST1RPQ09MX1BJTkNUUkwsCj4+Pj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKCp0eCksIDAsICZ0KTsKPj4+Pj4+ICvCoMKg wqAgaWYgKHJldCkKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4gKwo+ Pj4+Pj4gK8KgwqDCoCB0eCA9IHQtPnR4LmJ1ZjsKPj4+Pj4+ICvCoMKgwqAgdHgtPmlkZW50aWZp ZXIgPSBjcHVfdG9fbGUzMihpZGVudGlmaWVyKTsKPj4+Pj4+ICvCoMKgwqAgdHgtPmZ1bmN0aW9u X2lkID0gY3B1X3RvX2xlMzIoZnVuY3Rpb25faWQpOwo+Pj4+Pj4gK8KgwqDCoCB0eC0+ZmxhZ3Mg PSBTRVRfVFlQRShjcHVfdG9fbGUzMih0eXBlKSk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHJl dCA9IHNjbWlfZG9feGZlcihoYW5kbGUsIHQpOwo+Pj4+Pj4gK8KgwqDCoCBzY21pX3hmZXJfcHV0 KGhhbmRsZSwgdCk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+PiAr fQo+Pj4+Pj4gKwo+Pj4+Pj4gK3N0YXRpYyBpbnQgc2NtaV9waW5jdHJsX3JlcXVlc3QoY29uc3Qg c3RydWN0IHNjbWlfaGFuZGxlICpoYW5kbGUsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHUzMiBpZGVudGlmaWVyLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBlbnVtIHNjbWlfcGluY3RybF9zZWxlY3Rvcl90eXBlIHR5cGUpCj4+Pj4+PiArewo+ Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3Qgc2NtaV94ZmVyICp0Owo+Pj4+Pj4gK8KgwqDCoCBpbnQgcmV0 Owo+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3Qgc2NtaV9yZXF1ZXN0X3R4IHsKPj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCBfX2xlMzIgaWRlbnRpZmllcjsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBfX2xlMzIg ZmxhZ3M7Cj4+Pj4+PiArwqDCoMKgIH0gKnR4Owo+Pj4+Pj4gKwo+Pj4+Pgo+Pj4+PiBEaXR0by4K Pj4+Pj4KPj4+Pj4+ICvCoMKgwqAgaWYgKCFoYW5kbGUgfHwgdHlwZSA9PSBGVU5DVElPTl9UWVBF KQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4+Pj4gKwo+Pj4+Pj4g K8KgwqDCoCByZXQgPSBzY21pX3BpbmN0cmxfdmFsaWRhdGVfaWQoaGFuZGxlLCBpZGVudGlmaWVy LCB0eXBlKTsKPj4+Pj4+ICvCoMKgwqAgaWYgKHJldCkKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gcmV0Owo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCByZXQgPSBzY21pX3hmZXJfZ2V0X2lu aXQoaGFuZGxlLCBQSU5DVFJMX1JFUVVFU1QsCj4+Pj4+PiBTQ01JX1BST1RPQ09MX1BJTkNUUkws Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKCp0eCksIDAs ICZ0KTsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgdHggPSB0LT50eC5idWY7Cj4+Pj4+PiArwqDC oMKgIHR4LT5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKPj4+Pj4+ICvCoMKgwqAgdHgtPmZsYWdz ID0gU0VUX1RZUEUoY3B1X3RvX2xlMzIodHlwZSkpOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBy ZXQgPSBzY21pX2RvX3hmZXIoaGFuZGxlLCB0KTsKPj4+Pj4+ICvCoMKgwqAgc2NtaV94ZmVyX3B1 dChoYW5kbGUsIHQpOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4g K30KPj4+Pj4+ICsKPj4+Pj4+ICtzdGF0aWMgaW50IHNjbWlfcGluY3RybF9yZXF1ZXN0X3Bpbihj b25zdCBzdHJ1Y3Qgc2NtaV9oYW5kbGUKPj4+Pj4+ICpoYW5kbGUsIHUzMiBwaW4pCj4+Pj4+PiAr ewo+Pj4+Pj4gK8KgwqDCoCByZXR1cm4gc2NtaV9waW5jdHJsX3JlcXVlc3QoaGFuZGxlLCBwaW4s IFBJTl9UWVBFKTsKPj4+Pj4+ICt9Cj4+Pj4+PiArCj4+Pj4+PiArc3RhdGljIGludCBzY21pX3Bp bmN0cmxfZnJlZShjb25zdCBzdHJ1Y3Qgc2NtaV9oYW5kbGUgKmhhbmRsZSwgdTMyCj4+Pj4+PiBp ZGVudGlmaWVyLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0g c2NtaV9waW5jdHJsX3NlbGVjdG9yX3R5cGUgdHlwZSkKPj4+Pj4+ICt7Cj4+Pj4+PiArwqDCoMKg IHN0cnVjdCBzY21pX3hmZXIgKnQ7Cj4+Pj4+PiArwqDCoMKgIGludCByZXQ7Cj4+Pj4+PiArwqDC oMKgIHN0cnVjdCBzY21pX3JlcXVlc3RfdHggewo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIF9fbGUz MiBpZGVudGlmaWVyOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIF9fbGUzMiBmbGFnczsKPj4+Pj4+ ICvCoMKgwqAgfSAqdHg7Cj4+Pj4+PiArCj4+Pj4+IERpdHRvLgo+Pj4+Pgo+Pj4+Pj4gK8KgwqDC oCBpZiAoIWhhbmRsZSB8fCB0eXBlID09IEZVTkNUSU9OX1RZUEUpCj4+Pj4+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHJldCA9IHNjbWlf cGluY3RybF92YWxpZGF0ZV9pZChoYW5kbGUsIGlkZW50aWZpZXIsIHR5cGUpOwo+Pj4+Pj4gK8Kg wqDCoCBpZiAocmV0KQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+PiAr Cj4+Pj4+PiArwqDCoMKgIHJldCA9IHNjbWlfeGZlcl9nZXRfaW5pdChoYW5kbGUsIFBJTkNUUkxf UkVMRUFTRSwKPj4+Pj4+IFNDTUlfUFJPVE9DT0xfUElOQ1RSTCwKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2YoKnR4KSwgMCwgJnQpOwo+Pj4+Pj4gKwo+Pj4+ Pj4gK8KgwqDCoCB0eCA9IHQtPnR4LmJ1ZjsKPj4+Pj4+ICvCoMKgwqAgdHgtPmlkZW50aWZpZXIg PSBpZGVudGlmaWVyOwo+Pj4+Pj4gK8KgwqDCoCB0eC0+ZmxhZ3MgPSBTRVRfVFlQRShjcHVfdG9f bGUzMih0eXBlKSk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHJldCA9IHNjbWlfZG9feGZlciho YW5kbGUsIHQpOwo+Pj4+Pj4gK8KgwqDCoCBzY21pX3hmZXJfcHV0KGhhbmRsZSwgdCk7Cj4+Pj4+ PiArCj4+Pj4+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+PiArfQo+Pj4+Pj4gKwo+Pj4+Pj4g K3N0YXRpYyBpbnQgc2NtaV9waW5jdHJsX2ZyZWVfcGluKGNvbnN0IHN0cnVjdCBzY21pX2hhbmRs ZSAqaGFuZGxlLAo+Pj4+Pj4gdTMyIHBpbikKPj4+Pj4+ICt7Cj4+Pj4+PiArwqDCoMKgIHJldHVy biBzY21pX3BpbmN0cmxfZnJlZShoYW5kbGUsIHBpbiwgUElOX1RZUEUpOwo+Pj4+Pj4gK30KPj4+ Pj4+ICsKPj4+Pj4+ICsKPj4+Pj4+ICtzdGF0aWMgaW50IHNjbWlfcGluY3RybF9nZXRfZ3JvdXBf aW5mbyhjb25zdCBzdHJ1Y3Qgc2NtaV9oYW5kbGUKPj4+Pj4+ICpoYW5kbGUsCj4+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIHNlbGVjdG9yLAo+ Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBzY21pX2dyb3VwX2luZm8gKmdyb3VwKQo+Pj4+Pj4gK3sKPj4+Pj4+ICvCoMKgwqAgaW50IHJl dCA9IDA7Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBzY21pX3BpbmN0cmxfaW5mbyAqcGk7Cj4+Pj4+ PiArCj4+Pj4+PiArwqDCoMKgIGlmICghaGFuZGxlIHx8ICFoYW5kbGUtPnBpbmN0cmxfcHJpdiB8 fCAhZ3JvdXApCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4+PiAr Cj4+Pj4+PiArwqDCoMKgIHBpID0gaGFuZGxlLT5waW5jdHJsX3ByaXY7Cj4+Pj4+PiArCj4+Pj4+ PiArwqDCoMKgIHJldCA9IHNjbWlfcGluY3RybF9hdHRyaWJ1dGVzKGhhbmRsZSwgR1JPVVBfVFlQ RSwgc2VsZWN0b3IsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICZncm91cC0+bmFtZSwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJmdyb3VwLT5ucl9waW5zKTsKPj4+Pj4+ICvCoMKgwqAgaWYgKHJldCkK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDC oCBpZiAoIWdyb3VwLT5ucl9waW5zKSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2Vyciho YW5kbGUtPmRldiwgIkdyb3VwICVkIGhhcyAwIGVsZW1lbnRzIiwgc2VsZWN0b3IpOwo+Pj4+Pj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PREFUQTsKPj4+Pj4+ICvCoMKgwqAgfQo+Pj4+Pj4g Kwo+Pj4+Pj4gK8KgwqDCoCBncm91cC0+Z3JvdXBfcGlucyA9IGRldm1fa21hbGxvY19hcnJheSho YW5kbGUtPmRldiwKPj4+Pj4+IGdyb3VwLT5ucl9waW5zLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKCpncm91cC0+Z3Jv dXBfcGlucyksCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBHRlBfS0VSTkVMKTsKPj4+Pj4KPj4+Pj4gSSB0aGluayB5b3UgY2FuIGp1 c3QgdXNlIGZvciB0aGUgYXJyYXkgYWxsb2NhdGlvbgo+Pj4+Pgo+Pj4+PiAgwqDCoMKgwqDCoGRl dm1fa2NhbGxvYyhkZXYsIG4sIHNpemUsIGZsYWdzKQo+Pj4+Pgo+Pj4+PiBhbmQgaXQgd2lsbCBh ZGQgYWxzbyBfX0dGUF9aRVJPIGludGVybmFsbHkgdG8gY2xlYXIgaXQuCj4+Pj4+IChpbmRlZWQg aXQgY2FsbHMgaW4gdHVybiBkZXZtX2ttYWxsb2NfYXJyYXkpCj4+Pj4+Cj4+Pj4+IC4uLkJVVCBJ IHRoaW5rIHRoZXJlIGlzIGEgZnVydGhlciB0cmlja3kgaXNzdWUgaGVyZSByZWxhdGVkIHRvIG1l bW9yeQo+Pj4+PiBhbGxvY2F0aW9uLi4uCj4+Pj4+Cj4+Pj4+IFlvdSBjYWxsIHRoaXMgYW5kIG90 aGVycyBmdW5jdGlvbiBvZiB0aGlzIGtpbmQgZnJvbSBzb21lCj4+Pj4+IHNjbWlfcGluY3RybF9v cHMsCj4+Pj4+IGxpa2UgaW4gc2NtaV9waW5jdHJsX2dldF9ncm91cF9waW5zCj4+Pj4+IChzY21p X3BpbmN0cmxfb3BzLT5nZXRfZ3JvdXBfcGlucyksCj4+Pj4+IGFuZCB0aGVuIHRoaXMgaXMgaW4g dHVybiBjYWxsZWQgYnkgdGhlIFNDTUkgUGluY3RybCBkcml2ZXIgdmlhCj4+Pj4+IHBpbmN0cmxf b3BzLT5nZXRfZ3JvdXBfcGlucyBBTkQgeW91IHNldCBhIHByZXNlbnQgZmxhZyBzbyB0aGF0IHlv dQo+Pj4+PiBpc3N1ZSBhCj4+Pj4+IFBJTkNUUkxfTElTVF9BU1NPQ0lBVElPTlMgYW5kIGFsbG9j YXRlIGhlcmUgYSBuZXcgZ3JvdXBfcGlucyBhcnJheQo+Pj4+PiBqdXN0Cj4+Pj4+IHRoZSBmaXJz dCB0aW1lOiBidXQgdGhlc2UgYXJlIG5ldmVyIHJlbGVhc2VkIGFueXdoZXJlLCBzaW5jZSwgZXZl bgo+Pj4+PiB0aG91Z2gKPj4+Pj4gbGF6aWx5IGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB3aGVuIGFz a2VkIGZvciwgdGhlc2UgYXJlIHN0YXRpYyBkYXRhCj4+Pj4+IHRoYXQKPj4+Pj4geW91IHBhc3Mg dG8gdGhlIGNhbGxlci91c2VyIG9mIHRoaXMgcHJvdG9jb2wgYW5kIHNvIHlvdSBjYW5ub3QgcmVs ZWFzZQo+Pj4+PiB0aGVtIGFueXRpbWUgc29vbiwgaW5kZWVkLgo+Pj4+Pgo+Pj4+PiBUaGUgY29y ZSBTQ01JIHN0YWNrIHVzdWFsbHkgdGFrZXMgY2FyZSB0byB0cmFjayBhbmQgcmVsZWFzZSBhbGwg dGhlCj4+Pj4+IGRldm1fCj4+Pj4+IHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgdGhlIHByb3RvY29s IE9OTFkgaWYgdGhleSB3ZXJlIGFsbG9jYXRlZCB3aXRoCj4+Pj4+IGRldnJlcwo+Pj4+PiB3aGls ZSBpbnNpZGUgc2NtaV9waW5jdHJsX3Byb3RvY29sX2luaXQoKSBmdW5jdGlvbi4KPj4+Pj4gKHNl ZQo+Pj4+PiBkcml2ZXJzL2Zpcm13YXJlL2FybS1zY21pL2RyaXZlci5jOnNjbWlfYWxsb2NfaW5p dF9wcm90b2NvbF9pbnN0YW5jZSgpCj4+Pj4+ICDCoMKgIGFuZCBzY21pX3Byb3RvY29sX3JlbGVh c2UpCj4+Pj4+Cj4+Pj4+IEJVVCB5b3UgZG8gbm90IGFsbG9jYXRlIHRoZXNlIGFycmF5cyBpbnNp ZGUgdGhlIHByb3RvY29sLWluaXQKPj4+Pj4gZnVuY3Rpb24sCj4+Pj4+IHlvdSBhbGxvY2F0ZSB0 aGVtIHRoZSBmaXJzdCB0aW1lIHRoZXNlIG9wcyBhcmUgY2FsbGVkIGF0IHJ1bnRpbWUuCj4+Pj4+ Cj4+Pj4+IElmIHlvdSB1bmJpbmQvdW5sb2FkIGFsbCB0aGUgZHJpdmVycyB1c2luZyB0aGlzIHBy b3RvY29sIGFuZCB0aGVuCj4+Pj4+IHJlbG9hZAo+Pj4+PiB0aGVtLCBhbGwgdGhlIGRldm1fIGFs bG9jYXRpb25zIGluIHByb3RvY29sX2luaXQgd2lsbCBiZSBmcmVlZCBhbmQKPj4+Pj4gcmVhbGxv Y2F0ZWQgQlVUIHRoZXNlIGFycmF5cyB3aWxsIG5ldmVyIGJlIGZyZWVkICh0aGV5IGFyZSBib3Vk biB0bwo+Pj4+PiBoYW5kbGUtPmRldikKPj4+Pj4gYW5kIGluc3RlYWQgdGhleSB3aWxsIGJlIHJl YWxsb2NhdGVkIG11bHRpcGxlIHRpbWVzIChwcmVzZW50IGZsYWcKPj4+Pj4gd2lsbCBiZSBjbGVh cmVkCj4+Pj4+IG9uIHVubG9hZCksIHJlbWFpbmVkIHVudXNlZCBhbmQgZnJlZWQgZmluYWxseSBv bmx5IHdoZW4gdGhlIHdob2xlCj4+Pj4+IFNDTUkgc3RhY2sgaXMKPj4+Pj4gdW5iaW5kL3VubG9h ZGVkLgo+Pj4+Pgo+Pj4+PiBZb3UgdXNlIGEgcHJlc2VudCBmbGFnIHRvIGF2b2lkIHJlaXNzdWlu ZyB0aGUgc2FtZSBxdWVyeSBhbmQKPj4+Pj4gcmVhbGxvY2F0aW5nIGFsbCB0aGUgYXJyYXlzIGVh Y2ggdGltZSBhIGRyaXZlciBjYWxscyB0aGVzZQo+Pj4+PiBwcm90b2NvbF9vcHMgb25lLCBidXQg cmVhbGx5IGFsbCB0aGVzZSBkYXRhIGlzIGF2YWlsYWJsZSBlYXJseSBvbiBhdAo+Pj4+PiBwcm90 b2NvbCBpbml0IHRpbWUgYW5kIHRoZXkgYXJlIG5vdCBzdXBwb3NlZCB0byBjaGFuZ2UgYXQgcnVu dGltZSwKPj4+Pj4gZG9udCB0aGV5ID8KPj4+Pj4KPj4+Pj4gRXZlbiBpbiBhIHZpcnR1YWxpemVk IGVudmlyb25tZW50LCB5b3UgYm9vdCBhbiBhZ2VudCBhbmQgdGhlIFNDTUkKPj4+Pj4gcGxhdGZv cm0gc2VydmVyIHByb3ZpZGVzIHRvIHRoZSBhZ2VudCB0aGUgbGlzdCBvZiBhc3NvY2lhdGlvbnMg d2hlbgo+Pj4+PiBxdWVyaWVkIGJ1dCB0aGVuIHRoaXMgZG9lcyBub3QgY2hhbmdlIHVudGlsIHRo ZSBuZXh0IHJlYm9vdCByaWdodCA/Cj4+Pj4+IChpbmRlZWQgeW91IGRvIG5vdCBxdWVyeSBtb3Jl IHRoYW4gb25jZS4uLikKPj4+Pj4KPj4+Pj4gVGhlIGFnZW50IGNhbiBvbmx5IGNoYW5nZSB0aGUg UElOIHN0YXR1cyB3aXRoIENPTkZJR19TRVQgb3IKPj4+Pj4gRlVOQ1RJT05fU0VMRUNUIG9yIFJF UVVFU1QgdGhlIGV4Y2x1c2l2ZSB1c2Ugb2YgYSBwaW4vZ3JvdXAsIGJ1dCBpdCBpcwo+Pj4+PiBu b3QgdGhhdCB0aGUgcGxhdGZvcm0gY2FuIGNoYW5nZSB0aGUgcGluL2dyb3VwcyBhc3NvY2lhaW9u IGZvciB0aGUKPj4+Pj4gc2FtZQo+Pj4+PiBhZ2VudCBhdCBydW4gdGltZSwgdGhpcyBhcmUgc3Rh dGljIGRhdGEgZm9yIHRoZSB3aG9sZSBsaWZlIG9mIHRoZQo+Pj4+PiBhZ2VudC4KPj4+Pj4KPj4+ Pj4gQW0gSSByaWdodCA/Cj4+Pj4+Cj4+Pj4+IElPVyBJIHRoaW5rIHRoZXJlIGlzIHNvbWUgcG90 ZW50aWFsIG1lbW9yeSBsZWFrIG9uIHVuYmluZC9iaW5kIGFuZCBpdAo+Pj4+PiB3b3VsZAo+Pj4+ PiBiZSBiZXR0ZXIgdG8gcXVlcnkgYW5kIGFsbG9jYXRlIGFsbCBvZiB0aGVzZSByZXNvdXJjZXMg YXQgaW5pdCB0aW1lCj4+Pj4+IGFuZCBrZWVwCj4+Pj4+IHRoZW0gcmVhZHkgdG8gYmUgcmV0cmll dmVkIGJ5IHN1YnNlcXVlbnQgb3BlcmF0aW9ucywgc2luY2UgdGhlCj4+Pj4+IGxpZmV0aW1lCj4+ Pj4+IG9mIHRoZXNlIHJlc291cmNlcyBpcyBwcmV0dHkgbG9uZyBhbmQgdGhleSBhcmUgYmFzaWNh bGx5IHJlcHJlc2VudGluZwo+Pj4+PiBzdGF0aWMgZGF0YSB0aGF0IGRvZXMgbm90IGNoYW5nZSBh ZnRlciB0aGUgaW5pdC9wcm9iZSBwaGFzZXMuCj4+Pj4+Cj4+Pj4+IEluZGVlZCwgYWxsIHRoZSBv dGhlciBwcm90b2NvbHMgdXN1YWxseSBhbGxvY2F0ZSBhbGwgdGhlIG5lZWRlZAo+Pj4+PiByZXNv dXJjZXMgYW5kIHF1ZXJ5IGFsbCB0aGUgYXZhaWxhYmxlIFNDTUkgcmVzb3VyY2VzIG9uY2UgZm9y IGFsbAo+Pj4+PiBkdXJpbmcKPj4+Pj4gdGhlIHByb3RvY29sX2luaXQsIHN0b3JpbmcgYWxsIHRo ZSByZXRyaWV2ZWQgaW5mbyBpbiBzb21lIHN0cnVjdAo+Pj4+PiAqX2luZm8KPj4+Pj4gZXhwb3Nl ZCBpbiBzY21pX3Byb3RvY29sLmggYW5kIHRoZW4gcHJvdmlkZSBzb21lIHJlbGF0ZWQKPj4+Pj4g cHJvdG9jb2xfb3BzIHRvCj4+Pj4+IGdldCB0aGUgbnVtYmVyIG9mIHJlc291cmNlcyBhbmQgdG8g cmV0cmlldmUgc3BlY2lmaWMgZG9tYWluIGluZm8KPj4+Pj4gZGVzY3JpcHRvcnMuCj4+Pj4+ICh2 b2x0YWdlLmMgaXMgYW4gZXhhbXBsZSBhbmQgbW9yZSBvbiB0aGlzIGRvd24gYmVsb3cuLi4pCj4+ Pj4+Cj4+Pj4+IFRoaXMgd2F5LCBhbnkgZHluYW1pYyBhbGxvY2F0aW9uIGlzIGRvbmUgZHVyaW5n IHByb3RvY29sX2luaXQsIHNvCj4+Pj4+IGl0IGNhbiBiZSBhdXRvbWF0aWNhbGx5IGZyZWVkIGJ5 IHRoZSBTQ01JIGNvcmUgb25jZSB0aGVyZSBhcmUgbm8gbW9yZQo+Pj4+PiB1c2VycyBvZiB0aGF0 IHByb3RvY29sLCBhbmQgYWxsIG9mIHRoaXMgc3RhdGljIGluZm8gZGF0YSBpcyBxdWVyaWVkCj4+ Pj4+IGFuZCByZXRyaWV2ZWQgb25jZSBmb3IgYWxsIGF0IHByb3RvY29sIGluaXRpYWxpemF0aW9u IHRpbWUsIGF2b2lkaW5nCj4+Pj4+IHVubmVlZGVkIG1lc3NhZ2UgZXhjaGFuZ2VzIHRvIHJldHJp ZXZlIGFsd2F5cyB0aGUgc2FtZSBkYXRhLgo+Pj4+PiAod2hpY2ggeW91IGF2b2lkIGFueXdheSB3 aXRoIHRoZSBwcmVzZW50IGZsYWcpCj4+Pj4+Cj4+Pj4+IElmIHlvdSBoYXZlIGEgZ29vZCByZWFz b24gdG8gaW5zdGVhZCBwZXJmb3JtIHRoaXMgc29ydCBvZiBsYXp5Cj4+Pj4+IGFsbG9jYXRpb24v cXVlcnkgcGVyZm9ybWVkIG9ubHkgYXQgdGhlIGxhc3QgbWludXRlIHdoZW4gc29tZW9uZSBhc2sK Pj4+Pj4gZm9yCj4+Pj4+IHRoYXQgc3BlY2lmaWMgcmVzb3VyY2UsIHlvdSB3aWxswqAgaGF2ZSB0 byBwcm92aWRlIGFsc28gYQo+Pj4+PiAuaW5zdGFuY2VfZGVpbml0Cj4+Pj4+IGZ1bmN0aW9uIHRv IGNsZWFuIGFueXRoaW5nIHlvdSBhbGxvY2F0ZWQgb3V0IG9mIHRoZSAuaW5zdGFuY2VfaW5pdAo+ Pj4+PiByb3V0aW5lOyBidXQgdGhpcyB3b3VsZCBzZWVtIHN0cmFuZ2UgdG8gbWUgc2luY2UgYW55 IHJlc291cmNlIHRoYXQgaXMKPj4+Pj4gZGlzY292ZXJlZCBhdCBpbml0IHdpbGwgYmUgZXZlbnR1 YWxseSBpbW1lZGlhdGVseSBxdWVyaWVkIGJ5IGEgZHJpdmVyCj4+Pj4+IHdoaWNoIHVzZXMgdGhp cyBwcm90b2NvbC4uLmFtIEkgbWlzc2luZyBzb21ldGhpbmcgPwo+Pj4+Pgo+Pj4+Pj4gK8KgwqDC oCBpZiAoIWdyb3VwLT5ncm91cF9waW5zKSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0g LUVOT01FTTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycjsKPj4+Pj4+ICvCoMKgwqAg fQo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCByZXQgPSBzY21pX3BpbmN0cmxfbGlzdF9hc3NvY2lh dGlvbnMoaGFuZGxlLCBzZWxlY3RvciwKPj4+Pj4+IEdST1VQX1RZUEUsCj4+Pj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdyb3VwLT5ucl9waW5z LCBncm91cC0+Z3JvdXBfcGlucyk7Cj4+Pj4+PiArwqDCoMKgIGlmIChyZXQpCj4+Pj4+PiArwqDC oMKgwqDCoMKgwqAgZ290byBlcnJfZ3JvdXBzOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBncm91 cC0+cHJlc2VudCA9IHRydWU7Cj4+Pj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4+Pj4gKwo+Pj4+ Pj4gKyBlcnJfZ3JvdXBzOgo+Pj4+Pj4gK8KgwqDCoCBrZnJlZShncm91cC0+Z3JvdXBfcGlucyk7 Cj4+Pj4+PiArIGVycjoKPj4+Pj4+ICvCoMKgwqAga2ZyZWUoZ3JvdXAtPm5hbWUpOwo+Pj4+Pj4g K8KgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4gK30KPj4+Pj4+ICsKPj4+Pj4+ICtzdGF0aWMgaW50 IHNjbWlfcGluY3RybF9nZXRfZ3JvdXBfbmFtZShjb25zdCBzdHJ1Y3Qgc2NtaV9oYW5kbGUKPj4+ Pj4+ICpoYW5kbGUsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdTMyIHNlbGVjdG9yLCBjb25zdCBjaGFyICoqbmFtZSkKPj4+Pj4+ICt7Cj4+Pj4+ PiArwqDCoMKgIGludCByZXQ7Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBzY21pX3BpbmN0cmxfaW5m byAqcGk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIGlmICghaGFuZGxlIHx8ICFoYW5kbGUtPnBp bmN0cmxfcHJpdiB8fCAhbmFtZSkKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZB TDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcGkgPSBoYW5kbGUtPnBpbmN0cmxfcHJpdjsKPj4+ Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgaWYgKHNlbGVjdG9yID4gcGktPm5yX2dyb3VwcykKPj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAg aWYgKCFwaS0+Z3JvdXBzW3NlbGVjdG9yXS5wcmVzZW50KSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKg wqAgcmV0ID0gc2NtaV9waW5jdHJsX2dldF9ncm91cF9pbmZvKGhhbmRsZSwgc2VsZWN0b3IsCj4+ Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JnBpLT5ncm91cHNbc2VsZWN0b3JdKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+ Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4+ICvCoMKgwqAg fQo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCAqbmFtZSA9IHBpLT5ncm91cHNbc2VsZWN0b3JdLm5h bWU7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4+Pj4gK30KPj4+Pj4+ICsK Pj4+Pj4+ICtzdGF0aWMgaW50IHNjbWlfcGluY3RybF9nZXRfZ3JvdXBfcGlucyhjb25zdCBzdHJ1 Y3Qgc2NtaV9oYW5kbGUKPj4+Pj4+ICpoYW5kbGUsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIHNlbGVjdG9yLCBjb25zdCB1bnNpZ25lZCBp bnQgKipwaW5zLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHVuc2lnbmVkIGludCAqbnJfcGlucykKPj4+Pj4+ICt7Cj4+Pj4+PiArwqDCoMKgIGlu dCByZXQ7Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBzY21pX3BpbmN0cmxfaW5mbyAqcGk7Cj4+Pj4+ PiArCj4+Pj4+PiArwqDCoMKgIGlmICghaGFuZGxlIHx8ICFoYW5kbGUtPnBpbmN0cmxfcHJpdiB8 fCAhcGlucyB8fCAhbnJfcGlucykKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZB TDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcGkgPSBoYW5kbGUtPnBpbmN0cmxfcHJpdjsKPj4+ Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgaWYgKHNlbGVjdG9yID4gcGktPm5yX2dyb3VwcykKPj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAg aWYgKCFwaS0+Z3JvdXBzW3NlbGVjdG9yXS5wcmVzZW50KSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKg wqAgcmV0ID0gc2NtaV9waW5jdHJsX2dldF9ncm91cF9pbmZvKGhhbmRsZSwgc2VsZWN0b3IsCj4+ Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JnBpLT5ncm91cHNbc2VsZWN0b3JdKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+ Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4+ICvCoMKgwqAg fQo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCAqcGlucyA9IHBpLT5ncm91cHNbc2VsZWN0b3JdLmdy b3VwX3BpbnM7Cj4+Pj4+PiArwqDCoMKgICpucl9waW5zID0gcGktPmdyb3Vwc1tzZWxlY3Rvcl0u bnJfcGluczsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4+ICt9Cj4+ Pj4+PiArCj4+Pj4+PiArc3RhdGljIGludCBzY21pX3BpbmN0cmxfZ2V0X2Z1bmN0aW9uX2luZm8o Y29uc3Qgc3RydWN0IHNjbWlfaGFuZGxlCj4+Pj4+PiAqaGFuZGxlLAo+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgc2VsZWN0b3IsCj4+Pj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBzY21pX2Z1 bmN0aW9uX2luZm8gKmZ1bmMpCj4+Pj4+PiArewo+Pj4+Pj4gK8KgwqDCoCBpbnQgcmV0ID0gMDsK Pj4+Pj4+ICvCoMKgwqAgc3RydWN0IHNjbWlfcGluY3RybF9pbmZvICpwaTsKPj4+Pj4+ICsKPj4+ Pj4+ICvCoMKgwqAgaWYgKCFoYW5kbGUgfHwgIWhhbmRsZS0+cGluY3RybF9wcml2IHx8ICFmdW5j KQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4+Pj4gKwo+Pj4+Pj4g K8KgwqDCoCBwaSA9IGhhbmRsZS0+cGluY3RybF9wcml2Owo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDC oCByZXQgPSBzY21pX3BpbmN0cmxfYXR0cmlidXRlcyhoYW5kbGUsIEZVTkNUSU9OX1RZUEUsIHNl bGVjdG9yLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmZnVuYy0+bmFtZSwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJmZ1bmMtPm5yX2dyb3Vwcyk7Cj4+Pj4+PiArwqDCoMKgIGlmIChyZXQpCj4+Pj4+ PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgaWYg KCFmdW5jLT5ucl9ncm91cHMpIHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGhhbmRs ZS0+ZGV2LCAiRnVuY3Rpb24gJWQgaGFzIDAgZWxlbWVudHMiLAo+Pj4+Pj4gc2VsZWN0b3IpOwo+ Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PREFUQTsKPj4+Pj4+ICvCoMKgwqAgfQo+ Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBmdW5jLT5ncm91cHMgPSBkZXZtX2ttYWxsb2NfYXJyYXko aGFuZGxlLT5kZXYsIGZ1bmMtPm5yX2dyb3VwcywKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKCpmdW5jLT5ncm91cHMpLAo+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRlBfS0VSTkVMKTsKPj4+ Pj4+ICvCoMKgwqAgaWYgKCFmdW5jLT5ncm91cHMpIHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXQgPSAtRU5PTUVNOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyOwo+Pj4+Pj4gK8Kg wqDCoCB9Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHJldCA9IHNjbWlfcGluY3RybF9saXN0X2Fz c29jaWF0aW9ucyhoYW5kbGUsIHNlbGVjdG9yLAo+Pj4+Pj4gRlVOQ1RJT05fVFlQRSwKPj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZnVuYy0+ bnJfZ3JvdXBzLCBmdW5jLT5ncm91cHMpOwo+Pj4+Pj4gK8KgwqDCoCBpZiAocmV0KQo+Pj4+Pj4g K8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2Z1bmNzOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBm dW5jLT5wcmVzZW50ID0gdHJ1ZTsKPj4+Pj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+Pj4+PiArCj4+ Pj4+PiArIGVycl9mdW5jczoKPj4+Pj4+ICvCoMKgwqAga2ZyZWUoZnVuYy0+Z3JvdXBzKTsKPj4+ Pj4+ICsgZXJyOgo+Pj4+Pj4gK8KgwqDCoCBrZnJlZShmdW5jLT5uYW1lKTsKPj4+Pj4+ICvCoMKg wqAgcmV0dXJuIHJldDsKPj4+Pj4+ICt9Cj4+Pj4+PiArCj4+Pj4+PiArc3RhdGljIGludCBzY21p X3BpbmN0cmxfZ2V0X2Z1bmN0aW9uX25hbWUoY29uc3Qgc3RydWN0IHNjbWlfaGFuZGxlCj4+Pj4+ PiAqaGFuZGxlLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB1MzIgc2VsZWN0b3IsIGNvbnN0IGNoYXIgKipuYW1lKQo+Pj4+Pj4gK3sKPj4+Pj4+ICvC oMKgwqAgaW50IHJldDsKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IHNjbWlfcGluY3RybF9pbmZvICpw aTsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgaWYgKCFoYW5kbGUgfHwgIWhhbmRsZS0+cGluY3Ry bF9wcml2IHx8ICFuYW1lKQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBwaSA9IGhhbmRsZS0+cGluY3RybF9wcml2Owo+Pj4+Pj4g Kwo+Pj4+Pj4gK8KgwqDCoCBpZiAoc2VsZWN0b3IgPiBwaS0+bnJfZnVuY3Rpb25zKQo+Pj4+Pj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBp ZiAoIXBpLT5mdW5jdGlvbnNbc2VsZWN0b3JdLnByZXNlbnQpIHsKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCByZXQgPSBzY21pX3BpbmN0cmxfZ2V0X2Z1bmN0aW9uX2luZm8oaGFuZGxlLCBzZWxlY3Rv ciwKPj4+Pj4+ICsgJnBpLT5mdW5jdGlvbnNbc2VsZWN0b3JdKTsKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCBpZiAocmV0KQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsK Pj4+Pj4+ICvCoMKgwqAgfQo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCAqbmFtZSA9IHBpLT5mdW5j dGlvbnNbc2VsZWN0b3JdLm5hbWU7Cj4+Pj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4+Pj4gK30K Pj4+Pj4+ICsKPj4+Pj4+ICtzdGF0aWMgaW50IHNjbWlfcGluY3RybF9nZXRfZnVuY3Rpb25fZ3Jv dXBzKGNvbnN0IHN0cnVjdAo+Pj4+Pj4gc2NtaV9oYW5kbGUgKmhhbmRsZSwKPj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBzZWxlY3RvciwK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVu c2lnbmVkIGludCAqbnJfZ3JvdXBzLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgdW5zaWduZWQgaW50ICoqZ3JvdXBzKQo+Pj4+Pj4g K3sKPj4+Pj4+ICvCoMKgwqAgaW50IHJldDsKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IHNjbWlfcGlu Y3RybF9pbmZvICpwaTsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgaWYgKCFoYW5kbGUgfHwgIWhh bmRsZS0+cGluY3RybF9wcml2IHx8ICFncm91cHMgfHwgIW5yX2dyb3VwcykKPj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcGkgPSBo YW5kbGUtPnBpbmN0cmxfcHJpdjsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgaWYgKHNlbGVjdG9y ID4gcGktPm5yX2Z1bmN0aW9ucykKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZB TDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgaWYgKCFwaS0+ZnVuY3Rpb25zW3NlbGVjdG9yXS5w cmVzZW50KSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gc2NtaV9waW5jdHJsX2dldF9m dW5jdGlvbl9pbmZvKGhhbmRsZSwgc2VsZWN0b3IsCj4+Pj4+PiArICZwaS0+ZnVuY3Rpb25zW3Nl bGVjdG9yXSk7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkKPj4+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+PiArwqDCoMKgIH0KPj4+Pj4+ICsKPj4+ Pj4+ICvCoMKgwqAgKmdyb3VwcyA9IHBpLT5mdW5jdGlvbnNbc2VsZWN0b3JdLmdyb3VwczsKPj4+ Pj4+ICvCoMKgwqAgKm5yX2dyb3VwcyA9IHBpLT5mdW5jdGlvbnNbc2VsZWN0b3JdLm5yX2dyb3Vw czsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4+ICt9Cj4+Pj4+PiAr Cj4+Pj4+PiArc3RhdGljIGludCBzY21pX3BpbmN0cmxfc2V0X211eChjb25zdCBzdHJ1Y3Qgc2Nt aV9oYW5kbGUgKmhhbmRsZSwKPj4+Pj4+IHUzMiBzZWxlY3RvciwKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGdyb3VwKQo+Pj4+Pj4gK3sKPj4+Pj4+ICvCoMKgwqAg cmV0dXJuIHNjbWlfcGluY3RybF9mdW5jdGlvbl9zZWxlY3QoaGFuZGxlLCBncm91cCwgR1JPVVBf VFlQRSwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHNlbGVjdG9yKTsKPj4+Pj4+ICt9Cj4+Pj4+PiArCj4+Pj4+PiArc3RhdGljIGludCBzY21p X3BpbmN0cmxfZ2V0X3Bpbl9pbmZvKGNvbnN0IHN0cnVjdCBzY21pX2hhbmRsZQo+Pj4+Pj4gKmhh bmRsZSwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUz MiBzZWxlY3Rvciwgc3RydWN0IHNjbWlfcGluX2luZm8gKnBpbikKPj4+Pj4+ICt7Cj4+Pj4+PiAr wqDCoMKgIGludCByZXQgPSAwOwo+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3Qgc2NtaV9waW5jdHJsX2lu Zm8gKnBpOwo+Pj4+Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgbl9lbGVtczsKPj4+Pj4+ICsKPj4+ Pj4+ICvCoMKgwqAgaWYgKCFoYW5kbGUgfHwgIWhhbmRsZS0+cGluY3RybF9wcml2IHx8ICFwaW4p Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4+PiArCj4+Pj4+PiAr wqDCoMKgIHBpID0gaGFuZGxlLT5waW5jdHJsX3ByaXY7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKg IHJldCA9IHNjbWlfcGluY3RybF9hdHRyaWJ1dGVzKGhhbmRsZSwgUElOX1RZUEUsIHNlbGVjdG9y LAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcGlu LT5uYW1lLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmbl9lbGVtcyk7Cj4+Pj4+PiArwqDCoMKgIGlmIChyZXQpCj4+Pj4+PiArwqDCoMKgwqDCoMKg wqAgcmV0dXJuIHJldDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgaWYgKG5fZWxlbXMgIT0gcGkt Pm5yX3BpbnMpIHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGhhbmRsZS0+ZGV2LCAi V3JvbmcgcGluIGNvdW50IGV4cGVjdGVkICVkIGhhcyAlZCIsCj4+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBwaS0+bnJfcGlucywgbl9lbGVtcyk7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FTk9EQVRBOwo+Pj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKg IGlmICgqKHBpbi0+bmFtZSkgPT0gMCkgewo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIo aGFuZGxlLT5kZXYsICJQaW4gbmFtZSBpcyBlbXB0eSIpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKg IGdvdG8gZXJyOwo+Pj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHBpbi0+ cHJlc2VudCA9IHRydWU7Cj4+Pj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4+Pj4gKwo+Pj4+Pj4g KyBlcnI6Cj4+Pj4+PiArwqDCoMKgIGtmcmVlKHBpbi0+bmFtZSk7Cj4+Pj4+PiArwqDCoMKgIHJl dHVybiByZXQ7Cj4+Pj4+PiArfQo+Pj4+Pj4gKwo+Pj4+Pj4gK3N0YXRpYyBpbnQgc2NtaV9waW5j dHJsX2dldF9waW5fbmFtZShjb25zdCBzdHJ1Y3Qgc2NtaV9oYW5kbGUKPj4+Pj4+ICpoYW5kbGUs IHUzMiBzZWxlY3RvciwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNvbnN0IGNoYXIgKipuYW1lKQo+Pj4+Pj4gK3sKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKg wqAgaW50IHJldDsKPj4+Pj4+ICvCoMKgwqAgc3RydWN0IHNjbWlfcGluY3RybF9pbmZvICpwaTsK Pj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgaWYgKCFoYW5kbGUgfHwgIWhhbmRsZS0+cGluY3RybF9w cml2IHx8ICFuYW1lKQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4+ Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBwaSA9IGhhbmRsZS0+cGluY3RybF9wcml2Owo+Pj4+Pj4gKwo+ Pj4+Pj4gK8KgwqDCoCBpZiAoc2VsZWN0b3IgPiBwaS0+bnJfcGlucykKPj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgaWYgKCFwaS0+ cGluc1tzZWxlY3Rvcl0ucHJlc2VudCkgewo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IHNj bWlfcGluY3RybF9nZXRfcGluX2luZm8oaGFuZGxlLCBzZWxlY3RvciwKPj4+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZwaS0+cGluc1tzZWxlY3Rv cl0pOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+PiArCj4+Pj4+PiAr wqDCoMKgICpuYW1lID0gcGktPnBpbnNbc2VsZWN0b3JdLm5hbWU7Cj4+Pj4+PiArCj4+Pj4+PiAr wqDCoMKgIHJldHVybiAwOwo+Pj4+Pj4gK30KPj4+Pj4+ICsKPj4+Pj4+ICsKPj4+Pj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IHNjbWlfcGluY3RybF9vcHMgcGluY3RybF9vcHMgPSB7Cj4+Pj4+PiAr wqDCoMKgIC5nZXRfZ3JvdXBzX2NvdW50ID0gc2NtaV9waW5jdHJsX2dldF9ncm91cHNfY291bnQs Cj4+Pj4+PiArwqDCoMKgIC5nZXRfZ3JvdXBfbmFtZSA9IHNjbWlfcGluY3RybF9nZXRfZ3JvdXBf bmFtZSwKPj4+Pj4+ICvCoMKgwqAgLmdldF9ncm91cF9waW5zID0gc2NtaV9waW5jdHJsX2dldF9n cm91cF9waW5zLAo+Pj4+Pj4gK8KgwqDCoCAuZ2V0X2Z1bmN0aW9uc19jb3VudCA9IHNjbWlfcGlu Y3RybF9nZXRfZnVuY3Rpb25zX2NvdW50LAo+Pj4+Pj4gK8KgwqDCoCAuZ2V0X2Z1bmN0aW9uX25h bWUgPSBzY21pX3BpbmN0cmxfZ2V0X2Z1bmN0aW9uX25hbWUsCj4+Pj4+PiArwqDCoMKgIC5nZXRf ZnVuY3Rpb25fZ3JvdXBzID0gc2NtaV9waW5jdHJsX2dldF9mdW5jdGlvbl9ncm91cHMsCj4+Pj4+ PiArwqDCoMKgIC5zZXRfbXV4ID0gc2NtaV9waW5jdHJsX3NldF9tdXgsCj4+Pj4+PiArwqDCoMKg IC5nZXRfcGluX25hbWUgPSBzY21pX3BpbmN0cmxfZ2V0X3Bpbl9uYW1lLAo+Pj4+Pj4gK8KgwqDC oCAuZ2V0X3BpbnNfY291bnQgPSBzY21pX3BpbmN0cmxfZ2V0X3BpbnNfY291bnQsCj4+Pj4+PiAr wqDCoMKgIC5nZXRfY29uZmlnID0gc2NtaV9waW5jdHJsX2dldF9jb25maWcsCj4+Pj4+PiArwqDC oMKgIC5zZXRfY29uZmlnID0gc2NtaV9waW5jdHJsX3NldF9jb25maWcsCj4+Pj4+PiArwqDCoMKg IC5nZXRfY29uZmlnX2dyb3VwID0gc2NtaV9waW5jdHJsX2dldF9jb25maWdfZ3JvdXAsCj4+Pj4+ PiArwqDCoMKgIC5zZXRfY29uZmlnX2dyb3VwID0gc2NtaV9waW5jdHJsX3NldF9jb25maWdfZ3Jv dXAsCj4+Pj4+PiArwqDCoMKgIC5yZXF1ZXN0X3BpbiA9IHNjbWlfcGluY3RybF9yZXF1ZXN0X3Bp biwKPj4+Pj4+ICvCoMKgwqAgLmZyZWVfcGluID0gc2NtaV9waW5jdHJsX2ZyZWVfcGluCj4+Pj4+ PiArfTsKPj4+Pj4+ICsKPj4+Pj4+ICtzdGF0aWMgaW50IHNjbWlfcGluY3RybF9wcm90b2NvbF9p bml0KHN0cnVjdCBzY21pX2hhbmRsZSAqaGFuZGxlKQo+Pj4+Pj4gK3sKPj4+Pj4+ICvCoMKgwqAg dTMyIHZlcnNpb247Cj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBzY21pX3BpbmN0cmxfaW5mbyAqcGlu Zm87Cj4+Pj4+PiArwqDCoMKgIGludCByZXQ7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIGlmICgh aGFuZGxlKQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4+Pj4gKwo+ Pj4+Pj4gK8KgwqDCoCBzY21pX3ZlcnNpb25fZ2V0KGhhbmRsZSwgU0NNSV9QUk9UT0NPTF9QSU5D VFJMLCAmdmVyc2lvbik7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIGRldl9kYmcoaGFuZGxlLT5k ZXYsICJQaW5jdHJsIFZlcnNpb24gJWQuJWRcbiIsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgUFJP VE9DT0xfUkVWX01BSk9SKHZlcnNpb24pLCBQUk9UT0NPTF9SRVZfTUlOT1IodmVyc2lvbikpOwo+ Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBwaW5mbyA9IGRldm1fa3phbGxvYyhoYW5kbGUtPmRldiwg c2l6ZW9mKCpwaW5mbyksIEdGUF9LRVJORUwpOwo+Pj4+Pj4gK8KgwqDCoCBpZiAoIXBpbmZvKQo+ Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8Kg wqDCoCByZXQgPSBzY21pX3BpbmN0cmxfYXR0cmlidXRlc19nZXQoaGFuZGxlLCBwaW5mbyk7Cj4+ Pj4+PiArwqDCoMKgIGlmIChyZXQpCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmcmVlOwo+ Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBwaW5mby0+cGlucyA9IGRldm1fa21hbGxvY19hcnJheSho YW5kbGUtPmRldiwgcGluZm8tPm5yX3BpbnMsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2YoKnBpbmZvLT5waW5zKSwKPj4+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJP KTsKPj4+Pj4KPj4+Pj4gIMKgwqAgZGV2bV9rY2FsbG9jKCkgemVyb2VzIG9uIGl0cyBvd24KPj4+ Pj4KPj4+Pj4+ICvCoMKgwqAgaWYgKCFwaW5mby0+cGlucykgewo+Pj4+Pj4gK8KgwqDCoMKgwqDC oMKgIHJldCA9IC1FTk9NRU07Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmcmVlOwo+Pj4+ Pj4gK8KgwqDCoCB9Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHBpbmZvLT5ncm91cHMgPSBkZXZt X2ttYWxsb2NfYXJyYXkoaGFuZGxlLT5kZXYsCj4+Pj4+PiBwaW5mby0+bnJfZ3JvdXBzLAo+Pj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZigq cGluZm8tPmdyb3VwcyksCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwo+Pj4+Pgo+Pj4+PiBEaXR0by4K Pj4+Pj4+ICvCoMKgwqAgaWYgKCFwaW5mby0+Z3JvdXBzKSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKg wqAgcmV0ID0gLUVOT01FTTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZyZWU7Cj4+Pj4+ PiArwqDCoMKgIH0KPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcGluZm8tPmZ1bmN0aW9ucyA9IGRl dm1fa21hbGxvY19hcnJheShoYW5kbGUtPmRldiwKPj4+Pj4+IHBpbmZvLT5ucl9mdW5jdGlvbnMs Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc2l6ZW9mKCpwaW5mby0+ZnVuY3Rpb25zKSwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7 Cj4+Pj4+PiArwqDCoMKgIGlmICghcGluZm8tPmZ1bmN0aW9ucykgewo+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgIHJldCA9IC1FTk9NRU07Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmcmVlOwo+ Pj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHBpbmZvLT52ZXJzaW9uID0g dmVyc2lvbjsKPj4+Pj4+ICvCoMKgwqAgaGFuZGxlLT5waW5jdHJsX29wcyA9ICZwaW5jdHJsX29w czsKPj4+Pj4+ICvCoMKgwqAgaGFuZGxlLT5waW5jdHJsX3ByaXYgPSBwaW5mbzsKPj4+Pj4+ICsK Pj4+Pj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+Pj4+PiArZnJlZToKPj4+Pj4+ICvCoMKgwqAgaWYg KHBpbmZvKSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2bV9rZnJlZShoYW5kbGUtPmRldiwg cGluZm8tPnBpbnMpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRldm1fa2ZyZWUoaGFuZGxlLT5k ZXYsIHBpbmZvLT5mdW5jdGlvbnMpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRldm1fa2ZyZWUo aGFuZGxlLT5kZXYsIHBpbmZvLT5ncm91cHMpOwo+Pj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+Cj4+Pj4+ IFRoZXNlIGZyZWVzIGFyZSByZWFsbHkgbm90IG5lZWRlZC4uLmlmIHRoaXMgZnVuY3Rpb24gcmV0 dXJuIGZhaWx1cmUKPj4+Pj4gYW55Cj4+Pj4+IGRldnJlcyBhbGxvY2F0ZWQgaW4gaXQgaXMgZnJl ZWQgYnkgdGhlIFNDTUkgY29yZS4gKGFzIHNhaWQKPj4+Pj4gYWJvdmUuLi5pbiBhCj4+Pj4+IHJl Y2VudCBrZXJuZWwgd2l0aCB0aGUgbmV3IEFQSSBvZiBjb3Vyc2UpCj4+Pj4+Cj4+Pj4+PiArCj4+ Pj4+PiArwqDCoMKgIGRldm1fa2ZyZWUoaGFuZGxlLT5kZXYsIHBpbmZvKTsKPj4+Pj4+ICsKPj4+ Pj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4+ICt9Cj4+Pj4+PiArCj4+Pj4+PiArREVGSU5F X1NDTUlfUFJPVE9DT0xfUkVHSVNURVJfVU5SRUdJU1RFUihTQ01JX1BST1RPQ09MX1BJTkNUUkws Cj4+Pj4+PiBwaW5jdHJsKQo+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9LY29u ZmlnIGIvZHJpdmVycy9waW5jdHJsL0tjb25maWcKPj4+Pj4+IGluZGV4IDgxNTA5NTMyNmUyZC4u NjhhZGQ0ZDA2ZThjIDEwMDY0NAo+Pj4+Pj4gLS0tIGEvZHJpdmVycy9waW5jdHJsL0tjb25maWcK Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvcGluY3RybC9LY29uZmlnCj4+Pj4+PiBAQCAtNDMxLDQgKzQz MSwxMyBAQCBjb25maWcgUElOQ1RSTF9FUVVJTElCUklVTQo+Pj4+Pj4gIMKgwqDCoMKgwqDCoMKg wqAgcGluIGZ1bmN0aW9ucywgY29uZmlndXJlIEdQSU8gYXR0cmlidXRlcyBmb3IgTEdNIFNvQyBw aW5zLgo+Pj4+Pj4gUGlubXV4IGFuZAo+Pj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqAgcGluY29uZiBz ZXR0aW5ncyBhcmUgcmV0cmlldmVkIGZyb20gZGV2aWNlIHRyZWUuCj4+Pj4+PiAgwqDCoCArY29u ZmlnIFBJTkNUUkxfU0NNSQo+Pj4+Pj4gK8KgwqDCoCBib29sICJQaW5jdHJsIGRyaXZlciBjb250 cm9sbGVkIHZpYSBTQ01JIGludGVyZmFjZSIKPj4+Pj4+ICvCoMKgwqAgZGVwZW5kcyBvbiBBUk1f U0NNSV9QUk9UT0NPTCB8fCBDT01QSUxFX1RFU1QKPj4+Pj4+ICvCoMKgwqAgaGVscAo+Pj4+Pj4g K8KgwqDCoMKgwqAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgcGluY3RybCB3aGlj aCBpcyBjb250cm9sbGVkCj4+Pj4+PiArwqDCoMKgwqDCoCBieSBmaXJtd2FyZSB0aGF0IGltcGxl bWVudHMgdGhlIFNDTUkgaW50ZXJmYWNlLgo+Pj4+Pj4gK8KgwqDCoMKgwqAgSXQgdXNlcyBTQ01J IE1lc3NhZ2UgUHJvdG9jb2wgdG8gaW50ZXJhY3Qgd2l0aCB0aGUKPj4+Pj4+ICvCoMKgwqDCoMKg IGZpcm13YXJlIHByb3ZpZGluZyBhbGwgdGhlIHBpbmN0cmwgY29udHJvbHMuCj4+Pj4+PiArCj4+ Pj4+Cj4+Pj4+IFRoaXMgZG9lcyBOT1QgYmVsb25nIHRvIHRoaXMgcGF0Y2gsIGJ1dCB0byB0aGUg bmV4dCByaWdodCA/Cj4+Pj4+Cj4+Pj4+PiAgwqDCoCBlbmRpZgo+Pj4+Pj4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvbGludXgvc2NtaV9wcm90b2NvbC5oCj4+Pj4+PiBiL2luY2x1ZGUvbGludXgvc2Nt aV9wcm90b2NvbC5oCj4+Pj4+PiBpbmRleCA5Y2QzMTJhMWZmOTIuLjZhOTA5ZWYzYmY1MSAxMDA2 NDQKPj4+Pj4+IC0tLSBhL2luY2x1ZGUvbGludXgvc2NtaV9wcm90b2NvbC5oCj4+Pj4+PiArKysg Yi9pbmNsdWRlL2xpbnV4L3NjbWlfcHJvdG9jb2wuaAo+Pj4+Pj4gQEAgLTEyLDcgKzEyLDggQEAK Pj4+Pj4+ICDCoMKgICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgo+Pj4+Pj4gIMKgwqAgI2lu Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4+Pj4+PiAgwqDCoCAtI2RlZmluZSBTQ01JX01BWF9TVFJf U0laRcKgwqDCoCAxNgo+Pj4+Pj4gKyNkZWZpbmUgU0NNSV9NQVhfU1RSX1NJWkUgMTYKPj4+Pj4+ ICsjZGVmaW5lIFNDTUlfTUFYX1NUUl9FWFRfU0laRSA2NAo+Pj4+Pgo+Pj4+PiBUaGlzIGlzIGhh bmRsZWQgYXMgcGFydCBvZiBob3cgdGhlIGV4dGVuZGVkIG5hbWVzIGFyZSBoYW5kbGVkIHdpdGgK Pj4+Pj4gcGgtPmhvcHMKPj4+Pj4gaW4gYSBjb21tb24gd2F5LCBhcyBJIHdhcyBzYXlpbmcsIHNv IHBsZWFzZSBtb3ZlIHRoaXMgaWYgeW91IG5lZWQKPj4+Pj4gaXQgaW4KPj4+Pj4gdGhlIHByb3Rv Y29sIGNvZGUsIHRoZW4gSSdsbCBwb3J0IHRvIHRoZSBwaC0+aG9wcyBpbnRlcmZhY2UgYW5kIGNs ZWFuCj4+Pj4+IHVwLgo+Pj4+Pgo+Pj4+Pj4gIMKgwqAgI2RlZmluZSBTQ01JX01BWF9OVU1fUkFU RVPCoMKgwqAgMTYKPj4+Pj4+ICDCoMKgIMKgIC8qKgo+Pj4+Pj4gQEAgLTI1Miw2ICsyNTMsNTUg QEAgc3RydWN0IHNjbWlfbm90aWZ5X29wcyB7Cj4+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKPj4+ Pj4+ICDCoMKgIH07Cj4+Pj4+PiAgwqDCoCArLyoqCj4+Pj4+PiArICogc3RydWN0IHNjbWlfcGlu Y3RybF9vcHMgLSByZXByZXNlbnRzIHRoZSB2YXJpb3VzIG9wZXJhdGlvbnMKPj4+Pj4+IHByb3Zp ZGVkCj4+Pj4+PiArICogYnkgU0NNSSBQaW5jdHJsIFByb3RvY29sCj4+Pj4+PiArICoKPj4+Pj4+ ICsgKiBAZ2V0X2dyb3Vwc19jb3VudDogcmV0dXJucyBjb3VudCBvZiB0aGUgcmVnaXN0ZXJlZCBn cm91cHMKPj4+Pj4+ICsgKiBAZ2V0X2dyb3VwX25hbWU6IHJldHVybnMgZ3JvdXAgbmFtZSBieSBp bmRleAo+Pj4+Pj4gKyAqIEBnZXRfZ3JvdXBfcGluczogcmV0dXJucyB0aGUgc2V0IG9mIHBpbnMs IGFzc2lnbmVkIHRvIHRoZQo+Pj4+Pj4gc3BlY2lmaWVkIGdyb3VwCj4+Pj4+PiArICogQGdldF9m dW5jdGlvbnNfY291bnQ6IHJldHVybnMgY291bnQgb2YgdGhlIHJlZ2lzdGVyZWQgZnVjbnRpb25z Cj4+Pj4+PiArICogQGdldF9mdW5jdGlvbl9uYW1lOiByZXR1cm5zIGZ1bmN0aW9uIG5hbWUgYnkg aW5kZXMKPj4+Pj4+ICsgKiBAZ2V0X2Z1bmN0aW9uX2dyb3VwczogcmV0dXJucyB0aGUgc2V0IG9m IGdyb3VwcywgYXNzaWduZWQgdG8gdGhlCj4+Pj4+PiBzcGVjaWZpZWQKPj4+Pj4+ICsgKsKgwqDC oCBmdW5jdGlvbgo+Pj4+Pj4gKyAqIEBzZXRfbXV4OiBzZXQgbXV4aW5nIGZ1bmN0aW9uIGZvciBn cm91cHMgb2YgcGlucwo+Pj4+Pj4gKyAqIEBnZXRfcGluczogcmV0dXJucyB0aGUgc2V0IG9mIHBp bnMsIHJlZ2lzdGVyZWQgaW4gZHJpdmVyCj4+Pj4+PiArICogQGdldF9jb25maWc6IHJldHVybnMg Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yIHBpbgo+Pj4+Pj4gKyAqIEBzZXRfY29uZmlnOiBz ZXRzIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBmb3IgcGluCj4+Pj4+PiArICogQGdldF9j b25maWdfZ3JvdXA6IHJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGZvciBhCj4+ Pj4+PiBncm91cCBvZiBwaW5zCj4+Pj4+PiArICogQHNldF9jb25maWdfZ3JvdXA6IHNldHMgdGhl IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGZvciBhIGdyb3Vwcwo+Pj4+Pj4gb2YgcGlucwo+Pj4+ Pj4gKyAqIEByZXF1ZXN0X3BpbjogYXF1aXJlIHBpbiBiZWZvcmUgc2VsZWN0aW5nIG11eCBzZXR0 aW5nCj4+Pj4+PiArICogQGZyZWVfcGluOiBmcmVlcyBwaW4sIGFjcXVpcmVkIGJ5IHJlcXVlc3Rf cGluIGNhbGwKPj4+Pj4+ICsgKi8KPj4+Pj4+ICtzdHJ1Y3Qgc2NtaV9waW5jdHJsX29wcyB7Cj4+ Pj4+PiArwqDCoMKgIGludCAoKmdldF9ncm91cHNfY291bnQpKGNvbnN0IHN0cnVjdCBzY21pX2hh bmRsZSAqaGFuZGxlKTsKPj4+Pj4+ICvCoMKgwqAgaW50ICgqZ2V0X2dyb3VwX25hbWUpKGNvbnN0 IHN0cnVjdCBzY21pX2hhbmRsZSAqaGFuZGxlcywgdTMyCj4+Pj4+PiBzZWxlY3RvciwKPj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGNoYXIgKipuYW1lKTsK Pj4+Pj4+ICvCoMKgwqAgaW50ICgqZ2V0X2dyb3VwX3BpbnMpKGNvbnN0IHN0cnVjdCBzY21pX2hh bmRsZSAqaGFuZGxlLCB1MzIKPj4+Pj4+IHNlbGVjdG9yLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgdW5zaWduZWQgaW50ICoqcGlucywgdW5zaWduZWQg aW50ICpucl9waW5zKTsKPj4+Pj4+ICvCoMKgwqAgaW50ICgqZ2V0X2Z1bmN0aW9uc19jb3VudCko Y29uc3Qgc3RydWN0IHNjbWlfaGFuZGxlICpoYW5kbGUpOwo+Pj4+Pj4gK8KgwqDCoCBpbnQgKCpn ZXRfZnVuY3Rpb25fbmFtZSkoY29uc3Qgc3RydWN0IHNjbWlfaGFuZGxlICpoYW5kbGUsIHUzMgo+ Pj4+Pj4gc2VsZWN0b3IsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y29uc3QgY2hhciAqKm5hbWUpOwo+Pj4+Pj4gK8KgwqDCoCBpbnQgKCpnZXRfZnVuY3Rpb25fZ3Jv dXBzKShjb25zdCBzdHJ1Y3Qgc2NtaV9oYW5kbGUgKmhhbmRsZSwKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIHNlbGVjdG9yLCB1bnNpZ25lZCBpbnQgKm5y X2dyb3VwcywKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29u c3QgdW5zaWduZWQgaW50ICoqZ3JvdXBzKTsKPj4+Pj4+ICvCoMKgwqAgaW50ICgqc2V0X211eCko Y29uc3Qgc3RydWN0IHNjbWlfaGFuZGxlICpoYW5kbGUsIHUzMiBzZWxlY3RvciwKPj4+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBncm91cCk7Cj4+Pj4+PiArwqDCoMKgIGlu dCAoKmdldF9waW5fbmFtZSkoY29uc3Qgc3RydWN0IHNjbWlfaGFuZGxlICpoYW5kbGUsIHUzMgo+ Pj4+Pj4gc2VsZWN0b3IsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNv bnN0IGNoYXIgKipuYW1lKTsKPj4+Pj4+ICvCoMKgwqAgaW50ICgqZ2V0X3BpbnNfY291bnQpKGNv bnN0IHN0cnVjdCBzY21pX2hhbmRsZSAqaGFuZGxlKTsKPj4+Pj4+ICvCoMKgwqAgaW50ICgqZ2V0 X2NvbmZpZykoY29uc3Qgc3RydWN0IHNjbWlfaGFuZGxlICpoYW5kbGUsIHUzMiBwaW4sCj4+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyICpjb25maWcpOwo+Pj4+Pj4gK8KgwqDC oCBpbnQgKCpzZXRfY29uZmlnKShjb25zdCBzdHJ1Y3Qgc2NtaV9oYW5kbGUgKmhhbmRsZSwgdTMy IHBpbiwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgY29uZmlnKTsKPj4+ Pj4+ICvCoMKgwqAgaW50ICgqZ2V0X2NvbmZpZ19ncm91cCkoY29uc3Qgc3RydWN0IHNjbWlfaGFu ZGxlICpoYW5kbGUsIHUzMgo+Pj4+Pj4gcGluLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHUzMiAqY29uZmlnKTsKPj4+Pj4+ICvCoMKgwqAgaW50ICgqc2V0X2NvbmZpZ19ncm91 cCkoY29uc3Qgc3RydWN0IHNjbWlfaGFuZGxlICpoYW5kbGUsIHUzMgo+Pj4+Pj4gcGluLAo+Pj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBjb25maWcpOwo+Pj4+Pj4gK8KgwqDC oCBpbnQgKCpyZXF1ZXN0X3BpbikoY29uc3Qgc3RydWN0IHNjbWlfaGFuZGxlICpoYW5kbGUsIHUz MiBwaW4pOwo+Pj4+Pj4gK8KgwqDCoCBpbnQgKCpmcmVlX3BpbikoY29uc3Qgc3RydWN0IHNjbWlf aGFuZGxlICpoYW5kbGUsIHUzMiBwaW4pOwo+Pj4+Pj4gK307Cj4+Pj4+PiArCj4+Pj4+Cj4+Pj4+ IEFzIG1lbnRpb25lZCBhYm92ZSwgaGVyZSB5b3UgY291bGQgZHJvcCBhIGxvdCBvZiB0aGlzCj4+ Pj4+IGdldF9YX2NvdW50L25hbWUvcGlucwo+Pj4+PiBhbmQgaW5zdGVhZCBleHBvc2UgYSBmZXcg b2YgdGhlIGludGVybmFsIHByb29jb2wgc3RydWN0IHNjbWlfX1hfaW5mbwo+Pj4+PiBhbmQgdGhl bgo+Pj4+PiBwcm92aWRlIGp1c3QgYSBtZWFuIHRvIHF1ZXJ5IGhvdyBtYW55IHJlc291cmNlIGFy ZSB0aGVyZSBhbmQgdGhlbiBnZXQKPj4+Pj4gdGhlIGluZm8KPj4+Pj4gZGVzY3JpcHRvciB5b3Ug d2FudCBmb3IgdGhlIHNwZWNpZmljIGRvbWFpbl9pZCwgaS5lLjoKPj4+Pj4KPj4+Pj4gIMKgwqDC oMKgwqAgaW50ICgqbnVtX2RvbWFpbnNfZ2V0KShwaCwgdHlwZSkKPj4+Pj4gIMKgwqDCoMKgwqAg dm9pZCAqKCppbmZvX2dldCkocGgsIHR5cGUsIGRvbWFpbl9pZCk7Cj4+Pj4+Cj4+Pj4+IFRoYW5r cywKPj4+Pj4gQ3Jpc3RpYW4KPj4+Pj4KPj4+Pj4KPj4+Pj4gX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KPj4+Pj4gbGludXgtYXJtLWtlcm5lbCBtYWlsaW5n IGxpc3QKPj4+Pj4gbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCj4+Pj4+IGh0 dHBzOi8vdXJsZGVmZW5zZS5jb20vdjMvX19odHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWxfXzshIUdGXzI5ZGJjUUlVQlBBIXkyaFIzUEVH R3hpUGpWZVhCY2dHeVYwM0RQRGh6Z1VLUjB1SHZzVHBpYWZLZ0JhcjhFZ2M2b09Pcy1Ja0ZJcXVo U2YtcUJ6bHRxRU15elJaclppN3FsayQKPj4+Pj4KPj4+Pj4gW2xpc3RzWy5daW5mcmFkZWFkWy5d b3JnXQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt YXJtLWtlcm5lbAo=