Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp1238344ybl; Fri, 23 Aug 2019 15:58:53 -0700 (PDT) X-Google-Smtp-Source: APXvYqw2bHVkM00rPr6vjlJ1ejpEFcMdeUDIfCj+DKgIZwetiIKIl6/bX7tgt7XRL0vGt0LFi9B6 X-Received: by 2002:aa7:81d4:: with SMTP id c20mr7946840pfn.235.1566601133789; Fri, 23 Aug 2019 15:58:53 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1566601133; cv=pass; d=google.com; s=arc-20160816; b=i/1bUG0AQxgr8gmz97AMUysBAy5Kfe1sG3mnMo2bne+yyGW/K+Eti1Mg/N3vJbwXTQ D0dgbeN0tq0yQqOgll9OEcFFL4R+aLZhXvBvwM/eC8glw+725CFN+F39o86H2ZM6irnG wZU0LG6m4vyXqffd+m3jG0+Do6R8oq2BRcxhCDFqw6+pcACJIayeLg0GaxvEQro+V+90 Pv5HRAmrnyLx0NnSbxcMs+UOtQUzbYhVgca7F9a5g9IX6UIQb2/jlV1gPTYjKrwxIl9+ l/2zj3gR+G7A41HmbNuWFuLBFhcbc7DmMhtkNo9BKSTDfZKdXjdP5OzkROldqE8sAH3P stXA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature; bh=qIbDDX1Wk26ow55RlCzCwaJ4NbU6r7mm3wLNkD8Xtw8=; b=cgZ7FtAZeNLNL2uyUUKo+6E6v/gK9WNrfeFx8/kBnCciRYHrY1ylZT8V0fMGsMsm+9 fIO3G858LYiXfYS0tquE8TgXX6vHEQHjoehOokFELF6FBxVP5Brb28Xz0xAXPEHJHfTh 7SC09tk0Di+bCOiL4hFhH03AAKyzzUgdFau12QLl8B2dRci5b58OX4W/5owVwc7/M4sw jwg/E/YqwSnuaUvNLDgHwcZXki0PLlNSGWTAh8bYCanRZvEQI1gz0YMciDlDygizBixi iMWmpWSAJH5s0vh93+bWqTwiJbQSz2T+wgdHfnUfNZ8bHSX8ttcZsHSFh+akXNZQ3RIE PJPA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=SlNXHL15; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v24si3105183pgn.64.2019.08.23.15.58.38; Fri, 23 Aug 2019 15:58:53 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=SlNXHL15; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388351AbfHWKQi (ORCPT + 99 others); Fri, 23 Aug 2019 06:16:38 -0400 Received: from mail-eopbgr150059.outbound.protection.outlook.com ([40.107.15.59]:52345 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731077AbfHWKQh (ORCPT ); Fri, 23 Aug 2019 06:16:37 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Xj1JxOe1qPv0I7hxt9rVfj4vABsqKZSQGJC/te3WpHxeXaxP5Mh8Ht3850dAv4eS2SwZrydHpFmk36PhybfUDOg6Ajn4636+cRzpXMW/DCLldgFDuoLCbzoUcLvhuNsyhNqcf6B4VzFeOasqQM7h3AreWOfAtDrsm/KefyVd20OdwfpufyqT8dm9rLVO98c6qKH/pLTLt5LJnzlSqY65g07RhzEmpf3BdeCqBTnVN2JP0nBUHKajIoJh84VNRpi8DYZOrGVmNIRLggdSX1B3cbECYkML2uUO4NhsL4Gm79cmWYqPAHhQmgsS1j6V1WWZLvKQgJUvS33vin1/ETJSOg== 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-SenderADCheck; bh=qIbDDX1Wk26ow55RlCzCwaJ4NbU6r7mm3wLNkD8Xtw8=; b=HezDIRvlxVAdh2C5Dtg9hyp61m2Vjce+emy7JSjU26VdMRfb2Lg1gHqCIgIkoBzu5A1nAfCJAPZaNUjHHems7KowZawS24LMKiTCJ61PKTH3+wBi203B0yFCqugkehbT2vpl8wp4GdA/grF/nO17M577NjJNKkWK5LSsd8biiXONGb8uykq4ikqZXQq2ue3LmO/VG2uMSXCE+QVMi6FLAjvdK0jcZgn+mANqD2oX3VG9T3sMsc+p+9yVNqyLjYd1WJp2x8foWwietLLtBvDHVzpL5V+udt+AAYGS0Q7NdYcPPFxdptrrfz7Ju6LRghze8/ueslzv+d6381ojfEibpA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qIbDDX1Wk26ow55RlCzCwaJ4NbU6r7mm3wLNkD8Xtw8=; b=SlNXHL15xniVasFxWdn+zj8+nN8hjHluqu/jvxX+b4ChrkU7fbeE71prmEvwpq+0tJ2Y0GsGthLRilcAMYAYBaLKBtLrG42UjWCijDy5MtrXAeSv1vzpPoYzQhy0o643LD8AmekTqnGy9TRdQ2Hn93OT/UyebK2viQHLzt/J0tQ= Received: from DB8PR04MB6715.eurprd04.prod.outlook.com (20.179.251.14) by DB8PR04MB7162.eurprd04.prod.outlook.com (52.135.62.205) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Fri, 23 Aug 2019 10:16:17 +0000 Received: from DB8PR04MB6715.eurprd04.prod.outlook.com ([fe80::b0ab:d127:ca27:e1fa]) by DB8PR04MB6715.eurprd04.prod.outlook.com ([fe80::b0ab:d127:ca27:e1fa%7]) with mapi id 15.20.2178.020; Fri, 23 Aug 2019 10:16:17 +0000 From: Robert Chiras To: "agx@sigxcpu.org" CC: dl-linux-imx , "linux-kernel@vger.kernel.org" , "robh+dt@kernel.org" , "narmstrong@baylibre.com" , "devicetree@vger.kernel.org" , "festevam@gmail.com" , "lee.jones@linaro.org" , "jernej.skrabec@siol.net" , "daniel@ffwll.ch" , "mark.rutland@arm.com" , "a.hajda@samsung.com" , "dri-devel@lists.freedesktop.org" , "jonas@kwiboo.se" , "shawnguo@kernel.org" , "linux-arm-kernel@lists.infradead.org" , "airlied@linux.ie" , "sam@ravnborg.org" , "Laurent.pinchart@ideasonboard.com" , "kernel@pengutronix.de" , "arnd@arndb.de" , "s.hauer@pengutronix.de" Subject: Re: [EXT] [PATCH v3 2/2] drm/bridge: Add NWL MIPI DSI host controller support Thread-Topic: [EXT] [PATCH v3 2/2] drm/bridge: Add NWL MIPI DSI host controller support Thread-Index: AQHVWNaTAvmbOg/Q4kSx8LbxMJJTHacHJnOAgAA/DACAASBrgA== Date: Fri, 23 Aug 2019 10:16:17 +0000 Message-ID: <1566555375.3209.108.camel@nxp.com> References: <1566479899.3209.101.camel@nxp.com> <20190822170358.GA7485@bogon.m.sigxcpu.org> In-Reply-To: <20190822170358.GA7485@bogon.m.sigxcpu.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.18.5.2-0ubuntu3.2 authentication-results: spf=none (sender IP is ) smtp.mailfrom=robert.chiras@nxp.com; x-originating-ip: [89.37.124.34] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 380de0a5-a237-4fc0-c79a-08d727b2efc5 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);SRVR:DB8PR04MB7162; x-ms-traffictypediagnostic: DB8PR04MB7162: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-forefront-prvs: 0138CD935C x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(39860400002)(396003)(346002)(366004)(376002)(136003)(199004)(189003)(2351001)(5024004)(14444005)(256004)(7416002)(7736002)(229853002)(6916009)(66446008)(64756008)(66556008)(66476007)(6512007)(5640700003)(81156014)(81166006)(50226002)(6486002)(8936002)(53946003)(86362001)(66574012)(11346002)(2616005)(476003)(103116003)(36756003)(305945005)(5660300002)(53936002)(71200400001)(71190400001)(486006)(44832011)(446003)(6246003)(76176011)(99286004)(54906003)(6506007)(30864003)(102836004)(26005)(25786009)(186003)(4326008)(76116006)(91956017)(2501003)(8676002)(66946007)(1730700003)(6436002)(3846002)(6116002)(66066001)(2906002)(478600001)(316002)(14454004)(99106002)(579004)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:DB8PR04MB7162;H:DB8PR04MB6715.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: x4OZJozOAkHfRGhRnoFmDbnhSOPbZPBHq9/OULrglKNkoH/WAMP7fDqtaQOo0fAyRbCaG4ZQY8YL6p2gsRHQmc8KCY7C/YN4PsNdje14FtifRDklLo6Ch37d4J7Xb3/HwJ2/qtY8BDfbsgNWZvR61IMf5sTiiQEzh8FqVUGo5Oa3E6hCVuPCD77FtJgD6/C5U3KT3tK1fi6EAb/1EQBwOLPxkaoy4yUcU26yaGMUqLoo6X5htYMoNvqIDknKc+qEj2PYUdHNey0znm6PCD6R5bSmj6OhDo8iuPF72+ydkIzCIb4nLWBjyk0cXOMtCoRXvgz0KN+OpEmBtRj1m5vhh2B4j97llsBqVRUXYotLDjwF+rpQS/5G8HXPyuhsg4aZnikTtaSqKLlPQ7lfW19O4Yy092C6CFka/QH/HvZVFNk= Content-Type: text/plain; charset="utf-8" Content-ID: <6563FF733339AA44A250189F09AE5154@eurprd04.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 380de0a5-a237-4fc0-c79a-08d727b2efc5 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Aug 2019 10:16:17.4004 (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: nFzisS5j6DWjURYxzGTkzJAshalr2NNgFSnph4a9LCosjRAwwXZmOcTLeR5fYQ4RHWVsc3HYGZl53O+VYsrgOQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7162 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgR3VpZG8sDQoNCk9uIEpvLCAyMDE5LTA4LTIyIGF0IDE5OjAzICswMjAwLCBHdWlkbyBHw7xu dGhlciB3cm90ZToNCj4gSGkgUm9iZXJ0LA0KPiB0aGFua3MgZm9yIHlvdXIgY29tbWVudHMhIE1v c3Qgb2YgdGhpcyBtYWtlIHNlbnNlLCBpIGhhdmUgc29tZQ0KPiBjb21tZW50cw0KPiBpbmxpbmUg YmVsb3cgKG1vc3RseSBzaW5jZSBJIG9ubHkgaGF2ZSBhY2Nlc3MgdG8gdGhlIGlteDhtcSByZWZl cmVuY2UNCj4gbWFudWFsIGJ1dCBub3QgdG8gdGhlIGFueSBOV0wgSVAgZG9jcyk6DQo+IA0KPiBP biBUaHUsIEF1ZyAyMiwgMjAxOSBhdCAwMToxODoyMVBNICswMDAwLCBSb2JlcnQgQ2hpcmFzIHdy b3RlOg0KPiA+IA0KPiA+IEhpIEd1aWRvLA0KPiA+IA0KPiA+IEkgYWRkZWQgbXkgc2lnbmVkLW9m ZiwgcGx1cyBzb21lIGNvbW1lbnRzIGlubGluZS4NCj4gPiANCj4gPiBPbiBKbywgMjAxOS0wOC0y MiBhdCAxMjo0NCArMDIwMCwgR3VpZG8gR8O8bnRoZXIgd3JvdGU6DQo+ID4gPiANCj4gPiA+IFRo aXMgYWRkcyBpbml0aWFsIHN1cHBvcnQgZm9yIHRoZSBOV0wgTUlQSSBEU0kgSG9zdCBjb250cm9s bGVyDQo+ID4gPiBmb3VuZA0KPiA+ID4gb24NCj4gPiA+IGkuTVg4IFNvQ3MuDQo+ID4gPiANCj4g PiA+IEl0IGFkZHMgc3VwcG9ydCBmb3IgdGhlIGkuTVg4TVEgYnV0IHRoZSBzYW1lIElQIGNhbiBi ZSBmb3VuZCBvbg0KPiA+ID4gZS5nLiB0aGUgaS5NWDhRWFAuDQo+ID4gPiANCj4gPiA+IEl0IGhh cyBiZWVuIHRlc3RlZCBvbiB0aGUgTGlicmVtIDUgZGV2a2l0IHVzaW5nIG14c2ZiLg0KPiA+ID4g DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBHdWlkbyBHw7xudGhlciA8YWd4QHNpZ3hjcHUub3JnPg0K PiA+IFNpZ25lZC1vZmYtYnk6IFJvYmVydCBDaGlyYXMgPHJvYmVydC5jaGlyYXNAbnhwLmNvbT4N Cj4gVGhhbmtzIQ0KPiANCj4gPiANCj4gPiA+IA0KPiA+ID4gQ28tZGV2ZWxvcGVkLWJ5OiBSb2Jl cnQgQ2hpcmFzIDxyb2JlcnQuY2hpcmFzQG54cC5jb20+DQo+ID4gPiAtLS0NCj4gPiA+IMKgZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqAy ICsNCj4gPiA+IMKgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZcKgwqDCoMKgwqDCoMKg wqDCoMKgfMKgwqDCoDEgKw0KPiA+ID4gwqBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kv S2NvbmZpZ8KgwqDCoHzCoMKgMTYgKw0KPiA+ID4gwqBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253 bC1kc2kvTWFrZWZpbGXCoMKgfMKgwqDCoDQgKw0KPiA+ID4gwqBkcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL253bC1kc2kvbndsLWRydi5jIHwgNTAxICsrKysrKysrKysrKysrKysNCj4gPiA+IMKgZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kcnYuaCB8wqDCoDY1ICsrKw0KPiA+ID4g wqBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRzaS5jIHwgNzAwDQo+ID4gPiAr KysrKysrKysrKysrKysrKysrKysrKw0KPiA+ID4gwqBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253 bC1kc2kvbndsLWRzaS5oIHwgMTEyICsrKysNCj4gPiA+IMKgOCBmaWxlcyBjaGFuZ2VkLCAxNDAx IGluc2VydGlvbnMoKykNCj4gPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvbndsLWRzaS9LY29uZmlnDQo+ID4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvTWFrZWZpbGUNCj4gPiA+IMKgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHJ2LmMNCj4gPiA+IMKg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHJ2 LmgNCj4gPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvbnds LWRzaS9ud2wtZHNpLmMNCj4gPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvbndsLWRzaS9ud2wtZHNpLmgNCj4gPiA+IA0KPiA+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZw0KPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL0tjb25maWcNCj4gPiA+IGluZGV4IDFjYzlmNTAyYzFmMi4uNzk4MGI1YzIxNTZmIDEwMDY0 NA0KPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnDQo+ID4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcNCj4gPiA+IEBAIC0xNTQsNiArMTU0LDgg QEAgc291cmNlDQo+ID4gPiAiZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9LY29uZmln Ig0KPiA+ID4gDQo+ID4gPiDCoHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hZHY3NTEx L0tjb25maWciDQo+ID4gPiANCj4gPiA+ICtzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv bndsLWRzaS9LY29uZmlnIg0KPiA+ID4gKw0KPiA+ID4gwqBzb3VyY2UgImRyaXZlcnMvZ3B1L2Ry bS9icmlkZ2Uvc3lub3BzeXMvS2NvbmZpZyINCj4gPiA+IA0KPiA+ID4gwqBlbmRtZW51DQo+ID4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQ0KPiA+ID4gYi9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlDQo+ID4gPiBpbmRleCA0OTM0ZmNmNWE2Zjgu LmQ5ZjZjMGY3NzU5MiAxMDA2NDQNCj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv TWFrZWZpbGUNCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUNCj4g PiA+IEBAIC0xNiw0ICsxNiw1IEBAIG9iai0kKENPTkZJR19EUk1fQU5BTE9HSVhfRFApICs9IGFu YWxvZ2l4Lw0KPiA+ID4gwqBvYmotJChDT05GSUdfRFJNX0kyQ19BRFY3NTExKSArPSBhZHY3NTEx Lw0KPiA+ID4gwqBvYmotJChDT05GSUdfRFJNX1RJX1NONjVEU0k4NikgKz0gdGktc242NWRzaTg2 Lm8NCj4gPiA+IMKgb2JqLSQoQ09ORklHX0RSTV9USV9URlA0MTApICs9IHRpLXRmcDQxMC5vDQo+ ID4gPiArb2JqLSQoQ09ORklHX0RSTV9OV0xfTUlQSV9EU0kpICs9IG53bC1kc2kvDQo+ID4gPiDC oG9iai15ICs9IHN5bm9wc3lzLw0KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvbndsLWRzaS9LY29uZmlnDQo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvbnds LWRzaS9LY29uZmlnDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXggMDAw MDAwMDAwMDAwLi4zYjE1N2E5ZjIyMjkNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9LY29uZmlnDQo+ID4gPiBAQCAtMCwwICsx LDE2IEBADQo+ID4gPiArY29uZmlnIERSTV9OV0xfTUlQSV9EU0kNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoHRyaXN0YXRlICJTdXBwb3J0IGZvciBOb3J0aHdlc3QgTG9naWMgTUlQSSBEU0kgSG9zdA0K PiA+ID4gY29udHJvbGxlciINCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGRlcGVuZHMgb24gRFJNDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBkZXBlbmRzIG9uIENPTU1PTl9DTEsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoGRlcGVuZHMgb24gT0YgJiYgSEFTX0lPTUVNDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBz ZWxlY3QgRFJNX0tNU19IRUxQRVINCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHNlbGVjdCBEUk1fTUlQ SV9EU0kNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHNlbGVjdCBEUk1fUEFORUxfQlJJREdFDQo+ID4g PiArwqDCoMKgwqDCoMKgwqBzZWxlY3QgR0VORVJJQ19QSFlfTUlQSV9EUEhZDQo+ID4gPiArwqDC oMKgwqDCoMKgwqBzZWxlY3QgTUZEX1NZU0NPTg0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0 IE1VTFRJUExFWEVSDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzZWxlY3QgUkVHTUFQX01NSU8NCj4g PiA+ICvCoMKgwqDCoMKgwqDCoGhlbHANCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqBUaGlzIGVu YWJsZXMgdGhlIE5vcnRod2VzdCBMb2dpYyBNSVBJIERTSSBIb3N0DQo+ID4gPiBjb250cm9sbGVy DQo+ID4gPiBhcw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoGZvciBleGFtcGxlIGZvdW5kIG9u IE5YUCdzIGkuTVg4IFByb2Nlc3NvcnMuDQo+ID4gPiArDQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL01ha2VmaWxlDQo+ID4gPiBiL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvbndsLWRzaS9NYWtlZmlsZQ0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uODA0YmFmMmYxOTE2DQo+ID4gPiAtLS0gL2Rldi9u dWxsDQo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvTWFrZWZpbGUN Cj4gPiA+IEBAIC0wLDAgKzEsNCBAQA0KPiA+ID4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjANCj4gPiA+ICtud2wtbWlwaS1kc2kteSA6PSBud2wtZHJ2Lm8gbndsLWRzaS5vDQo+ ID4gPiArb2JqLSQoQ09ORklHX0RSTV9OV0xfTUlQSV9EU0kpICs9IG53bC1taXBpLWRzaS5vDQo+ ID4gPiAraGVhZGVyLXRlc3QteSArPSBud2wtZHJ2LmggbndsLWRzaS5oDQo+ID4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kcnYuYw0KPiA+ID4gYi9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRydi5jDQo+ID4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5lNDU3NDM4NzM4YzANCj4gPiA+ IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRz aS9ud2wtZHJ2LmMNCj4gPiA+IEBAIC0wLDAgKzEsNTAxIEBADQo+ID4gPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQo+ID4gPiArLyoNCj4gPiA+ICsgKiBpLk1YOCBOV0wg TUlQSSBEU0kgaG9zdCBkcml2ZXINCj4gPiA+ICsgKg0KPiA+ID4gKyAqIENvcHlyaWdodCAoQykg MjAxNyBOWFANCj4gPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgUHVyaXNtIFNQQw0KPiA+ID4g KyAqLw0KPiA+ID4gKw0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gPiA+ICsjaW5j bHVkZSA8bGludXgvaXJxLmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4N Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4 L211eC9jb25zdW1lci5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KPiA+ID4gKyNp bmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9waHkv cGh5Lmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+DQo+ID4gPiArI2luY2x1ZGUg PGxpbnV4L3JlZ21hcC5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9zeXNfc29jLmg+DQo+ID4g PiArDQo+ID4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPg0KPiA+ID4gKyNp bmNsdWRlIDxkcm0vZHJtX29mLmg+DQo+ID4gPiArI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4N Cj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4NCj4gPiA+ICsNCj4gPiA+ ICsjaW5jbHVkZSAibndsLWRydi5oIg0KPiA+ID4gKyNpbmNsdWRlICJud2wtZHNpLmgiDQo+ID4g PiArDQo+ID4gPiArI2RlZmluZSBEUlZfTkFNRSAibndsLWRzaSINCj4gPiA+ICsNCj4gPiA+ICsv KiBQb3NzaWJsZSBwbGF0Zm9ybSBzcGVjaWZpYyBjbG9ja3MgKi8NCj4gPiA+ICsjZGVmaW5lIE5X TF9EU0lfQ0xLX0NPUkXCoMKgwqDCoMKgwqDCoCJjb3JlIg0KPiA+ID4gKw0KPiA+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBud2xfZHNpX3JlZ21hcF9jb25maWcgPSB7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqAucmVnX2JpdHMgPSAxNiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oC52YWxfYml0cyA9IDMyLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgLnJlZ19zdHJpZGUgPSA0LA0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgLm1heF9yZWdpc3RlciA9IE5XTF9EU0lfSVJRX01BU0syLA0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgLm5hbWUgPSBEUlZfTkFNRSwNCj4gPiA+ICt9Ow0KPiA+ID4g Kw0KPiA+ID4gK3N0cnVjdCBud2xfZHNpX3BsYXRmb3JtX2RhdGEgew0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgaW50ICgqcG93ZXJvbikoc3RydWN0IG53bF9kc2kgKmRzaSk7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqBpbnQgKCpwb3dlcm9mZikoc3RydWN0IG53bF9kc2kgKmRzaSk7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqBpbnQgKCpzZWxlY3RfaW5wdXQpKHN0cnVjdCBud2xfZHNpICpkc2kpOw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgaW50ICgqZGVzZWxlY3RfaW5wdXQpKHN0cnVjdCBud2xfZHNpICpk c2kpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2lfcGxhdF9jbGtfY29uZmln DQo+ID4gPiBjbGtfY29uZmlnW05XTF9EU0lfTUFYX1BMQVRGT1JNX0NMT0NLU107DQo+ID4gPiAr fTsNCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBud2xfZHNpICpicmlkZ2Vf dG9fZHNpKHN0cnVjdCBkcm1fYnJpZGdlDQo+ID4gPiAqYnJpZGdlKQ0KPiA+ID4gK3sNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiBjb250YWluZXJfb2YoYnJpZGdlLCBzdHJ1Y3QgbndsX2Rz aSwgYnJpZGdlKTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGludCBud2xfZHNp X3NldF9wbGF0Zm9ybV9jbG9ja3Moc3RydWN0IG53bF9kc2kgKmRzaSwgYm9vbA0KPiA+ID4gZW5h YmxlKQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9 IGRzaS0+ZGV2Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqaWQ7DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgY2xrICpjbGs7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzaXpl X3QgaTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxvbmcgcmF0ZTsNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoGludCByZXQsIHJlc3VsdCA9IDA7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKg wqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICIlcyBwbGF0Zm9ybSBjbG9ja3NcbiIs DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBlbmFibGUgPyAiZW5hYmxpbmciIDogImRpc2FibGluZyIpOw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHNpLT5wZGF0YS0+Y2xrX2NvbmZp Zyk7IGkrKykNCj4gPiA+IHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoIWRzaS0+Y2xrX2NvbmZpZ1tpXS5wcmVzZW50KQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZTsNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZCA9IGRzaS0+Y2xrX2NvbmZpZ1tpXS5pZDsNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbGsgPSBkc2ktPmNsa19jb25maWdbaV0uY2xr Ow0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChlbmFi bGUpIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBEUk1fREVWX0VSUk9SKGRldiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAiRmFpbGVkIHRvIGVuYWJsZQ0KPiA+ID4gJXMNCj4gPiA+IGNsazogJWRcbiIsDQo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWQsIHJldCk7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXN1bHQgPSByZXN1bHQgPzogcmV0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiRW5hYmxlZCAlcyBjbGsNCj4gPiA+IEAlbHUgSHpcbiIsDQo+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlkLCByYXRlKTsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVsc2Ugew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrKTsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJN X0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRGlzYWJsZWQgJXMNCj4gPiA+IGNsa1xuIiwgaWQpOw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICvCoMKgwqDCoMKg wqDCoH0NCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXN1bHQ7DQo+ID4g PiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgbndsX2RzaV9wbGF0X2VuYWJsZShzdHJ1 Y3QgbndsX2RzaSAqZHNpKQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBk ZXZpY2UgKmRldiA9IGRzaS0+ZGV2Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsNCj4g PiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChkc2ktPnBkYXRhLT5zZWxlY3RfaW5wdXQp DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHNpLT5wZGF0YS0+c2VsZWN0 X2lucHV0KGRzaSk7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBud2xfZHNp X3NldF9wbGF0Zm9ybV9jbG9ja3MoZHNpLCB0cnVlKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChyZXQgPCAwKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBy ZXQ7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBkc2ktPnBkYXRhLT5wb3dl cm9uKGRzaSk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBw b3dlciBvbiBEU0k6DQo+ID4gPiAlZFxuIiwNCj4gPiA+IHJldCk7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgdm9pZCBu d2xfZHNpX3BsYXRfZGlzYWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNpKQ0KPiA+ID4gK3sNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoGRzaS0+cGRhdGEtPnBvd2Vyb2ZmKGRzaSk7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqBud2xfZHNpX3NldF9wbGF0Zm9ybV9jbG9ja3MoZHNpLCBmYWxzZSk7DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqBpZiAoZHNpLT5wZGF0YS0+ZGVzZWxlY3RfaW5wdXQpDQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHNpLT5wZGF0YS0+ZGVzZWxlY3RfaW5wdXQoZHNp KTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIHZvaWQgbndsX2RzaV9icmlkZ2Vf ZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7DQo+ ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX2Rpc2FibGUoZHNpKTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfcGxhdF9kaXNhYmxlKGRzaSk7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqBwbV9ydW50aW1lX3B1dChkc2ktPmRldik7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ ID4gK3N0YXRpYyBpbnQgbndsX2RzaV9nZXRfZHBoeV9wYXJhbXMoc3RydWN0IG53bF9kc2kgKmRz aSwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlDQo+ID4g PiAqbW9kZSwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuaW9uIHBoeV9jb25maWd1cmVfb3B0cw0KPiA+ ID4gKnBoeV9vcHRzKQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxv bmcgcmF0ZTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7DQo+ID4gPiArDQo+ID4gPiAr wqDCoMKgwqDCoMKgwqBpZiAoZHNpLT5sYW5lcyA8IDEgfHwgZHNpLT5sYW5lcyA+IDQpDQo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiAr DQo+ID4gPiArwqDCoMKgwqDCoMKgwqAvKg0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAqIFNvIGZh ciB0aGUgRFBIWSBzcGVjIG1pbmltYWwgdGltaW5ncyB3b3JrIGZvciBib3RoDQo+ID4gPiBtaXhl bA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAqIGRwaHkgYW5kIG53bCBkc2kgaG9zdA0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqAqLw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gcGh5X21pcGlf ZHBoeV9nZXRfZGVmYXVsdF9jb25maWcoDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgbW9kZS0+Y3J0Y19jbG9jayAqIDEwMDAsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCksIGRz aS0NCj4gPiA+ID4gDQo+ID4gPiA+IGxhbmVzLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCZwaHlfb3B0cy0+bWlwaV9kcGh5KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChyZXQgPCAwKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBy ZXQ7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqByYXRlID0gY2xrX2dldF9yYXRlKGRz aS0+dHhfZXNjX2Nsayk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZF Uihkc2ktPmRldiwgIkxQIGNsayBpcyBAJWx1IEh6XG4iLA0KPiA+ID4gcmF0ZSk7DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqBwaHlfb3B0cy0+bWlwaV9kcGh5LmxwX2Nsa19yYXRlID0gcmF0ZTsNCj4g PiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICtzdGF0aWMgYm9vbCBud2xfZHNpX2JyaWRnZV9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QNCj4g PiA+IGRybV9kaXNwbGF5X21vZGUNCj4gPiA+ICptb2RlLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IGRybV9kaXNwbGF5X21vZGUNCj4gPiA+ICphZGp1c3RlZF9tb2RlKQ0KPiA+ID4g K3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIEF0IGxlYXN0IExDRElGICsgTldMIG5lZWRzIGFj dGl2ZSBoaWdoIHN5bmMgKi8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGFkanVzdGVkX21vZGUtPmZs YWdzIHw9IChEUk1fTU9ERV9GTEFHX1BIU1lOQyB8DQo+ID4gPiBEUk1fTU9ERV9GTEFHX1BWU1lO Qyk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBhZGp1c3RlZF9tb2RlLT5mbGFncyAmPSB+KERSTV9N T0RFX0ZMQUdfTkhTWU5DIHwNCj4gPiA+IERSTV9NT0RFX0ZMQUdfTlZTWU5DKTsNCj4gPiA+ICsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4g PiA+ICtzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMNCj4gPiA+ICtud2xfZHNpX2JyaWRnZV9t b2RlX3ZhbGlkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsDQo+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSkNCj4gPiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg bndsX2RzaSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgaW50IGJwcCA9IG1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAoZHNpLT5mb3JtYXQpOw0K PiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKG1vZGUtPmNsb2NrICogYnBwID4gMTUw MDAwMDApDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE1PREVf Q0xPQ0tfSElHSDsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChtb2RlLT5jbG9j ayAqIGJwcCA8IDgwMDAwKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiBNT0RFX0NMT0NLX0xPVzsNCj4gPiBUaGVzZSBsaW1pdHMgKDgwTUJQUyBtaW4gYW5kIDE1 MDBNQlBTIG1heCkgYXJlIHBlciBsYW5lLCBzbyB5b3UNCj4gPiBzaG91bGQNCj4gPiBpbnZvbHZl IHRoZSBudW1iZXJzIG9mIGxhbmVzIGhlcmUsIHRvby4gQWNjb3JkaW5nIHRvIHRoaXMgZm9ybXVs YSwNCj4gPiB5b3UNCj4gPiBsaW1pdCB0aGUgbWF4aW11bSBEU0kgdGhyb3VnaHB1dCB0byAxLjVH YnBzLCB3aGlsZSB0aGUgbWF4aW11bSBpcw0KPiA+IDZHYnBzDQo+ID4gKDEuNSAqIDQgbGFuZXMp DQo+IFlvdSdyZSByaWdodC4gSSB0aG91Z2h0IGkgaGFkIHRoZSBudW1iZXIgb2YgbGFuZXMgaW4g YnV0IHNlZW1zIGkNCj4gZm9yZ290LiB0aGFua3MuDQo+IA0KPiA+IA0KPiA+ID4gDQo+ID4gPiAr DQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gTU9ERV9PSzsNCj4gPiA+ICt9DQo+ID4gPiAr DQo+ID4gPiArc3RhdGljIHZvaWQNCj4gPiA+ICtud2xfZHNpX2JyaWRnZV9tb2RlX3NldChzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29u c3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUNCj4gPiA+ICphZGp1c3RlZF9tb2RlKQ0KPiA+ID4g K3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9f ZHNpKGJyaWRnZSk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBk c2ktPmRldjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyBu ZXdfY2ZnOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyBwaHlfcmVmX3JhdGU7 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgcmV0ID0gbndsX2RzaV9nZXRfZHBoeV9wYXJhbXMoZHNpLCBhZGp1c3RlZF9tb2RlLA0K PiA+ID4gJm5ld19jZmcpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApDQo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiA+ID4gKw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgLyoNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgKiBJZiBocyBjbG9jayBp cyB1bmNoYW5nZWQsIHdlJ3JlIGFsbCBnb29kIC0gYWxsDQo+ID4gPiBwYXJhbWV0ZXJzDQo+ID4g PiBhcmUNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgKiBkZXJpdmVkIGZyb20gaXQgYXRtLg0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqAqLw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKG5ld19jZmcu bWlwaV9kcGh5LmhzX2Nsa19yYXRlID09IGRzaS0NCj4gPiA+ID4gDQo+ID4gPiA+IHBoeV9jZmcu bWlwaV9kcGh5LmhzX2Nsa19yYXRlKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybjsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHBoeV9yZWZfcmF0ZSA9 IGNsa19nZXRfcmF0ZShkc2ktPnBoeV9yZWZfY2xrKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoERS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlBIWSBhdCByZWYgcmF0ZTogJWx1XG4iLA0KPiA+ID4g cGh5X3JlZl9yYXRlKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIFNhdmUgdGhlIG5ldyBkZXNp cmVkIHBoeSBjb25maWcgKi8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoG1lbWNweSgmZHNpLT5waHlf Y2ZnLCAmbmV3X2NmZywgc2l6ZW9mKG5ld19jZmcpKTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoG1lbWNweSgmZHNpLT5tb2RlLCBhZGp1c3RlZF9tb2RlLCBzaXplb2YoZHNpLT5tb2Rl KSk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKGFk anVzdGVkX21vZGUpOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgdm9pZCBud2xf ZHNpX2JyaWRnZV9wcmVfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpDQo+ID4gPiAr ew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2kgKmRzaSA9IGJyaWRnZV90b19k c2koYnJpZGdlKTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHBtX3J1bnRpbWVfZ2V0 X3N5bmMoZHNpLT5kZXYpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV9wbGF0X2VuYWJs ZShkc2kpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV9lbmFibGUoZHNpKTsNCj4gPiA+ ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGludCBud2xfZHNpX2JyaWRnZV9hdHRhY2goc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSkNCj4gPiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgbndsX2RzaSAqZHNpID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsNCj4gPiA+ICsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBkcm1fYnJpZGdlX2F0dGFjaChicmlkZ2UtPmVuY29k ZXIsIGRzaS0NCj4gPiA+ID5wYW5lbF9icmlkZ2UsDQo+ID4gPiBicmlkZ2UpOw0KPiA+ID4gK30N Cj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mgbnds X2RzaV9icmlkZ2VfZnVuY3MgPSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqAucHJlX2VuYWJsZSA9 IG53bF9kc2lfYnJpZGdlX3ByZV9lbmFibGUsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqAuZGlzYWJs ZcKgwqDCoMKgPSBud2xfZHNpX2JyaWRnZV9kaXNhYmxlLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg Lm1vZGVfZml4dXAgPSBud2xfZHNpX2JyaWRnZV9tb2RlX2ZpeHVwLA0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgLm1vZGVfc2V0wqDCoMKgPSBud2xfZHNpX2JyaWRnZV9tb2RlX3NldCwNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoC5tb2RlX3ZhbGlkID0gbndsX2RzaV9icmlkZ2VfbW9kZV92YWxpZCwNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoC5hdHRhY2jCoMKgwqDCoMKgPSBud2xfZHNpX2JyaWRnZV9hdHRh Y2gsDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IG53bF9kc2lfcGFyc2Vf ZHQoc3RydWN0IG53bF9kc2kgKmRzaSkNCj4gPiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRzaS0NCj4g PiA+ID5kZXYpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNsayAqY2xrOw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqY2xrX2lkOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg dm9pZCBfX2lvbWVtICpiYXNlOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaW50IGksIHJldDsNCj4g PiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGRzaS0+cGh5ID0gZGV2bV9waHlfZ2V0KGRzaS0+ ZGV2LCAiZHBoeSIpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihkc2ktPnBoeSkp IHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBQVFJfRVJSKGRz aS0+cGh5KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0ICE9 IC1FUFJPQkVfREVGRVIpDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJDb3VsZCBub3QgZ2V0DQo+ID4g PiBQSFk6DQo+ID4gPiAlZFxuIiwgcmV0KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgLyogUGxhdGZvcm0gZGVwZW5kZW50IGNsb2NrcyAqLw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgbWVtY3B5KGRzaS0+Y2xrX2NvbmZpZywgZHNpLT5wZGF0YS0+Y2xrX2Nv bmZpZywNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6ZW9mKGRzaS0+cGRh dGEtPmNsa19jb25maWcpKTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGRzaS0+cGRhdGEtPmNsa19jb25maWcpOyBpKyspDQo+ID4gPiB7 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFkc2ktPmNsa19jb25m aWdbaV0ucHJlc2VudCkNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY29udGludWU7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY2xrX2lkID0gZHNpLT5jbGtfY29uZmlnW2ldLmlkOw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsayA9IGRldm1fY2xrX2dldChkc2ktPmRldiwgY2xr X2lkKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGNs aykpIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0ID0gUFRSX0VSUihjbGspOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdl dCAlcw0KPiA+ID4gY2xvY2s6ICVkXG4iLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2xrX2lk LCByZXQpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0N Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZF Uihkc2ktPmRldiwgIlNldHVwIGNsayAlcw0KPiA+ID4gKHJhdGU6DQo+ID4gPiAlbHUpXG4iLA0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsa19pZCwgY2xrX2dldF9yYXRlKGNsaykpOw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRzaS0+Y2xrX2NvbmZpZ1tpXS5jbGsgPSBj bGs7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKg wqAvKiBEU0kgY2xvY2tzICovDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBjbGsgPSBkZXZtX2Nsa19n ZXQoZHNpLT5kZXYsICJwaHlfcmVmIik7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJS KGNsaykpIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBQVFJf RVJSKGNsayk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9F UlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgcGh5X3JlZg0KPiA+ID4gY2xvY2s6DQo+ID4g PiAlZFxuIiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgZHNpLT5waHlfcmVmX2NsayA9IGNsazsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoGNsayA9IGRldm1fY2xrX2dldChkc2ktPmRldiwgInJ4X2VzYyIpOw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgaWYgKElTX0VSUihjbGspKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0ID0gUFRSX0VSUihjbGspOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IHJ4X2VzYw0K PiA+ID4gY2xvY2s6DQo+ID4gPiAlZFxuIiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0KTsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg fQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHNpLT5yeF9lc2NfY2xrID0gY2xrOw0KPiA+ID4gKw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgY2xrID0gZGV2bV9jbGtfZ2V0KGRzaS0+ZGV2LCAidHhfZXNj Iik7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGNsaykpIHsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBQVFJfRVJSKGNsayk7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxl ZCB0byBnZXQgdHhfZXNjDQo+ID4gPiBjbG9jazoNCj4gPiA+ICVkXG4iLA0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQp Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ID4g PiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBkc2ktPnR4X2VzY19jbGsg PSBjbGs7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBkc2ktPm11eCA9IGRldm1fbXV4 X2NvbnRyb2xfZ2V0KGRzaS0+ZGV2LCBOVUxMKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChJ U19FUlIoZHNpLT5tdXgpKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0ID0gUFRSX0VSUihkc2ktPm11eCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFp bGVkIHRvIGdldA0KPiA+ID4gbXV4Og0KPiA+ID4gJWRcbiIsIHJldCk7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oH0NCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGJhc2UgPSBkZXZtX3BsYXRmb3JtX2lv cmVtYXBfcmVzb3VyY2UocGRldiwgMCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJS KGJhc2UpKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJf RVJSKGJhc2UpOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHNpLT5yZWdtYXAgPQ0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldm1fcmVnbWFwX2luaXRfbW1p byhkc2ktPmRldiwgYmFzZSwNCj4gPiA+ICZud2xfZHNpX3JlZ21hcF9jb25maWcpOw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihkc2ktPnJlZ21hcCkpIHsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBQVFJfRVJSKGRzaS0+cmVnbWFwKTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAi RmFpbGVkIHRvIGNyZWF0ZSBOV0wgRFNJDQo+ID4gPiByZWdtYXA6ICVkXG4iLA0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXQpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBkc2kt PmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBp ZiAoZHNpLT5pcnEgPCAwKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg RFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgZGV2aWNlDQo+ID4gPiBJUlE6 DQo+ID4gPiAlZFxuIiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHNpLT5pcnEpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiBkc2ktPmlycTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0N Cj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGRzaS0+cnN0YyA9IGRldm1fcmVzZXRfY29u dHJvbF9hcnJheV9nZXQoZHNpLT5kZXYsIGZhbHNlLA0KPiA+ID4gdHJ1ZSk7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqBpZiAoSVNfRVJSKGRzaS0+cnN0YykpIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCBy ZXNldHM6DQo+ID4gPiAlbGRcbiIsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFBUUl9FUlIoZHNpLT5yc3RjKSk7DQo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIFBUUl9FUlIoZHNpLT5yc3Rj KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oHJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IGlteDhtcV9k c2lfc2VsZWN0X2lucHV0KHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ID4gPiArew0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGRldmljZV9ub2RlICpyZW1vdGU7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqB1MzIgdXNlX2Rjc3MgPSAxOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsNCj4g PiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJlbW90ZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVf bm9kZShkc2ktPmRldi0+b2Zfbm9kZSwgMCwNCj4gPiA+IDApOw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKHN0cmNtcChyZW1vdGUtPm5hbWUsICJsY2RpZiIpID09IDApDQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdXNlX2Rjc3MgPSAwOw0KPiA+ID4gKw0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgRFJNX0RFVl9JTkZPKGRzaS0+ZGV2LCAiVXNpbmcgJXMgYXMgaW5wdXQgc291 cmNlXG4iLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAo dXNlX2Rjc3MpID8gIkRDU1MiIDogIkxDRElGIik7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDC oMKgwqByZXQgPSBtdXhfY29udHJvbF90cnlfc2VsZWN0KGRzaS0+bXV4LCB1c2VfZGNzcyk7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIHNlbGVjdCBp bnB1dDoNCj4gPiA+ICVkXG4iLCByZXQpOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg b2Zfbm9kZV9wdXQocmVtb3RlKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgaW14OG1xX2RzaV9k ZXNlbGVjdF9pbnB1dChzdHJ1Y3QgbndsX2RzaSAqZHNpKQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoGludCByZXQ7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBt dXhfY29udHJvbF9kZXNlbGVjdChkc2ktPm11eCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAo cmV0IDwgMCkNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VS Uk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGRlc2VsZWN0DQo+ID4gPiBpbnB1dDoNCj4gPiA+ICVk XG4iLCByZXQpOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4g PiA+ICt9DQo+ID4gPiArDQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGludCBpbXg4bXFfZHNpX3Bv d2Vyb24oc3RydWN0IG53bF9kc2kgKmRzaSkNCj4gPiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqBpbnQgcmV0ID0gMDsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIG90aGVyd2lz ZSB0aGUgZGlzcGxheSBzdGF5cyBibGFuayAqLw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgdXNsZWVw X3JhbmdlKDIwMCwgMzAwKTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChkc2kt PnJzdGMpDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gcmVzZXRf Y29udHJvbF9kZWFzc2VydChkc2ktPnJzdGMpOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgcmV0dXJuIHJldDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGludCBpbXg4 bXFfZHNpX3Bvd2Vyb2ZmKHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ID4gPiArew0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgaW50IHJldCA9IDA7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBp ZiAoZHNpLT5xdWlya3MgJiBTUkNfUkVTRVRfUVVJUkspDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBp ZiAoZHNpLT5yc3RjKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9 IHJlc2V0X2NvbnRyb2xfYXNzZXJ0KGRzaS0+cnN0Yyk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gcmV0Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9icmlkZ2VfdGltaW5ncyBud2xfZHNpX3RpbWluZ3MgPSB7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqAuaW5wdXRfYnVzX2ZsYWdzID0gRFJNX0JVU19GTEFHX0RFX0xPVywNCj4gPiA+ICt9Ow0K PiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbndsX2RzaV9wbGF0Zm9ybV9kYXRh IGlteDhtcV9kZXYgPSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqAucG93ZXJvbiA9ICZpbXg4bXFf ZHNpX3Bvd2Vyb24sDQo+ID4gPiArwqDCoMKgwqDCoMKgwqAucG93ZXJvZmYgPSAmaW14OG1xX2Rz aV9wb3dlcm9mZiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC5zZWxlY3RfaW5wdXQgPSAmaW14OG1x X2RzaV9zZWxlY3RfaW5wdXQsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqAuZGVzZWxlY3RfaW5wdXQg PSAmaW14OG1xX2RzaV9kZXNlbGVjdF9pbnB1dCwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC5jbGtf Y29uZmlnID0gew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHsgLmlkID0g TldMX0RTSV9DTEtfQ09SRSwgLnByZXNlbnQgPSB0cnVlIH0sDQo+ID4gPiArwqDCoMKgwqDCoMKg wqB9LA0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgbndsX2RzaV9kdF9pZHNbXSA9IHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHsgLmNv bXBhdGlibGUgPSAiZnNsLGlteDhtcS1ud2wtZHNpIiwgLmRhdGEgPQ0KPiA+ID4gJmlteDhtcV9k ZXYsIH0sDQo+ID4gPiArwqDCoMKgwqDCoMKgwqB7IC8qIHNlbnRpbmVsICovIH0NCj4gPiA+ICt9 Ow0KPiA+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG53bF9kc2lfZHRfaWRzKTsNCj4gPiA+ ICsNCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRlIG53bF9k c2lfcXVpcmtzX21hdGNoW10NCj4gPiA+ID0gew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgeyAuc29j X2lkID0gImkuTVg4TVEiLCAucmV2aXNpb24gPSAiMi4wIiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqAuZGF0YSA9ICh2b2lkICopKEUxMTQxOF9IU19NT0RFX1FVSVJLIHwNCj4gPiA+IFNSQ19S RVNFVF9RVUlSSykgfSwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHsgLyogc2VudGluZWwuICovIH0s DQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IG53bF9kc2lfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQgPQ0KPiA+ID4gb2ZfbWF0Y2hfZGV2aWNl KG53bF9kc2lfZHRfaWRzLCBkZXYpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0 IG53bF9kc2lfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBvZl9pZC0+ZGF0YTsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBzb2NfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cjsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2k7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqBpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHNpID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCpkc2kpLCBHRlBfS0VSTkVMKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oGlmICghZHNpKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAt RU5PTUVNOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHNpLT5kZXYgPSBkZXY7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBkc2ktPnBkYXRhID0gcGRhdGE7DQo+ID4gPiArDQo+ID4gPiAr wqDCoMKgwqDCoMKgwqByZXQgPSBud2xfZHNpX3BhcnNlX2R0KGRzaSk7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqBpZiAocmV0KQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiByZXQ7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBkZXZtX3JlcXVl c3RfaXJxKGRldiwgZHNpLT5pcnEsDQo+ID4gPiBud2xfZHNpX2lycV9oYW5kbGVyLCAwLA0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRldl9uYW1lKGRldiksIGRzaSk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0 IDwgMCkgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJS T1IoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSVJRICVkOg0KPiA+ID4gJWRcbiIsDQo+ID4gPiBk c2ktPmlycSwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgZHNpLT5kc2lfaG9zdC5vcHMgPSAmbndsX2RzaV9ob3N0X29wczsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoGRzaS0+ZHNpX2hvc3QuZGV2ID0gZGV2Ow0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgcmV0ID0gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTUlQSSBo b3N0Og0KPiA+ID4gJWRcbiIsIHJldCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIHJldDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoGF0dHIgPSBzb2NfZGV2aWNlX21hdGNoKG53bF9kc2lfcXVpcmtzX21h dGNoKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChhdHRyKQ0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGRzaS0+cXVpcmtzID0gKHVpbnRwdHJfdClhdHRyLT5kYXRhOw0K PiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHNpLT5icmlkZ2UuZHJpdmVyX3ByaXZhdGUg PSBkc2k7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBkc2ktPmJyaWRnZS5mdW5jcyA9ICZud2xfZHNp X2JyaWRnZV9mdW5jczsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGRzaS0+YnJpZGdlLm9mX25vZGUg PSBkZXYtPm9mX25vZGU7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBkc2ktPmJyaWRnZS50aW1pbmdz ID0gJm53bF9kc2lfdGltaW5nczsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGRybV9i cmlkZ2VfYWRkKCZkc2ktPmJyaWRnZSk7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBk ZXZfc2V0X2RydmRhdGEoZGV2LCBkc2kpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcG1fcnVudGlt ZV9lbmFibGUoZGV2KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPiA+ID4gK30N Cj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IG53bF9kc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpDQo+ID4gPiArew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53 bF9kc2kgKmRzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ID4gKw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgbWlwaV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtz dGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBud2xfZHNpX2RyaXZlciA9IHsNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoC5wcm9iZcKgwqDCoMKgwqDCoMKgwqDCoMKgPSBud2xfZHNpX3Byb2JlLA0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgLnJlbW92ZcKgwqDCoMKgwqDCoMKgwqDCoD0gbndsX2RzaV9y ZW1vdmUsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqAuZHJpdmVywqDCoMKgwqDCoMKgwqDCoMKgPSB7 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm9mX21hdGNoX3RhYmxlID0g bndsX2RzaV9kdF9pZHMsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm5h bWXCoMKgwqA9IERSVl9OQU1FLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfSwNCj4gPiA+ICt9Ow0K PiA+ID4gKw0KPiA+ID4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobndsX2RzaV9kcml2ZXIpOw0K PiA+ID4gKw0KPiA+ID4gK01PRFVMRV9BVVRIT1IoIk5YUCBTZW1pY29uZHVjdG9yIik7DQo+ID4g PiArTU9EVUxFX0FVVEhPUigiUHVyaXNtIFNQQyIpOw0KPiA+ID4gK01PRFVMRV9ERVNDUklQVElP TigiTm9ydGh3ZXN0IExvZ2ljIE1JUEktRFNJIGRyaXZlciIpOw0KPiA+ID4gK01PRFVMRV9MSUNF TlNFKCJHUEwiKTsgLyogR1BMdjIgb3IgbGF0ZXIgKi8NCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRydi5oDQo+ID4gPiBiL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHJ2LmgNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjFlNzJhOTIyMTQwMQ0KPiA+ID4gLS0tIC9kZXYv bnVsbA0KPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kcnYu aA0KPiA+ID4gQEAgLTAsMCArMSw2NSBAQA0KPiA+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wKyAqLw0KPiA+ID4gKy8qDQo+ID4gPiArICogTldMIE1JUEkgRFNJIGhvc3Qg ZHJpdmVyDQo+ID4gPiArICoNCj4gPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTlhQDQo+ID4g PiArICogQ29weXJpZ2h0IChDKSAyMDE5IFB1cmlzbSBTUEMNCj4gPiA+ICsgKi8NCj4gPiA+ICsN Cj4gPiA+ICsjaWZuZGVmIF9fTldMX0RSVl9IX18NCj4gPiA+ICsjZGVmaW5lIF9fTldMX0RSVl9I X18NCj4gPiA+ICsNCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvbXV4L2NvbnN1bWVyLmg+DQo+ID4g PiArI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4NCj4gPiA+ICsNCj4gPiA+ICsjaW5jbHVkZSA8 ZHJtL2RybV9icmlkZ2UuaD4NCj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPg0K PiA+ID4gKw0KPiA+ID4gK3N0cnVjdCBud2xfZHNpX3BsYXRmb3JtX2RhdGE7DQo+ID4gPiArDQo+ ID4gPiArLyogaS5NWDggTldMIHF1aXJrcyAqLw0KPiA+ID4gKy8qIGkuTVg4TVEgZXJyYXRhIEUx MTQxOCAqLw0KPiA+ID4gKyNkZWZpbmUgRTExNDE4X0hTX01PREVfUVVJUkvCoMKgwqDCoMKgwqDC oEJJVCgwKQ0KPiA+ID4gKy8qIFNraXAgRFNJIGJpdHMgaW4gU1JDIG9uIGRpc2FibGUgdG8gYXZv aWQgYmxhbmsgZGlzcGxheSBvbg0KPiA+ID4gZW5hYmxlDQo+ID4gPiAqLw0KPiA+ID4gKyNkZWZp bmUgU1JDX1JFU0VUX1FVSVJLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oEJJVCgxKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9NQVhfUExBVEZPUk1fQ0xP Q0tTIDENCj4gPiA+ICtzdHJ1Y3QgbndsX2RzaV9wbGF0X2Nsa19jb25maWcgew0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgY29uc3QgY2hhciAqaWQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg Y2xrICpjbGs7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBib29sIHByZXNlbnQ7DQo+ID4gPiArfTsN Cj4gPiA+ICsNCj4gPiA+ICtzdHJ1Y3QgbndsX2RzaSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWlw aV9kc2lfaG9zdCBkc2lfaG9zdDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fYnJp ZGdlICpwYW5lbF9icmlkZ2U7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpk ZXY7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5ICpwaHk7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqB1bmlvbiBwaHlfY29uZmlndXJlX29wdHMgcGh5X2NmZzsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoHVuc2lnbmVkIGludCBxdWlya3M7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgaXJxOw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdGM7DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbXV4X2NvbnRyb2wgKm11eDsNCj4gPiA+ICsNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoC8qIERTSSBjbG9ja3MgKi8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBjbGsgKnBoeV9yZWZfY2xrOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNsayAqcnhf ZXNjX2NsazsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBjbGsgKnR4X2VzY19jbGs7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqAvKiBQbGF0Zm9ybSBkZXBlbmRlbnQgY2xvY2tzICovDQo+ID4g PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbndsX2RzaV9wbGF0X2Nsa19jb25maWcNCj4gPiA+IGNs a19jb25maWdbTldMX0RTSV9NQVhfUExBVEZPUk1fQ0xPQ0tTXTsNCj4gPiA+ICsNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoC8qIGRzaSBsYW5lcyAqLw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIGxh bmVzOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZW51bSBtaXBpX2RzaV9waXhlbF9mb3JtYXQgZm9y bWF0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbW9kZTsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxvbmcgZHNpX21vZGVfZmxhZ3M7DQo+ID4g PiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbndsX2RzaV90cmFuc2ZlciAqeGZlcjsN Cj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBud2xfZHNpX3BsYXRm b3JtX2RhdGEgKnBkYXRhOw0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArI2VuZGlmIC8qIF9f TldMX0RSVl9IX18gKi8NCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L253bC1kc2kvbndsLWRzaS5jDQo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRz aS9ud2wtZHNpLmMNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiBpbmRleCAwMDAw MDAwMDAwMDAuLmZkMDMwYWY1NWJiNA0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kc2kuYw0KPiA+ID4gQEAgLTAsMCAr MSw3MDAgQEANCj4gPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCj4g PiA+ICsvKg0KPiA+ID4gKyAqIE5XTCBNSVBJIERTSSBob3N0IGRyaXZlcg0KPiA+ID4gKyAqDQo+ ID4gPiArICogQ29weXJpZ2h0IChDKSAyMDE3IE5YUA0KPiA+ID4gKyAqIENvcHlyaWdodCAoQykg MjAxOSBQdXJpc20gU1BDDQo+ID4gPiArICovDQo+ID4gPiArDQo+ID4gPiArI2luY2x1ZGUgPGxp bnV4L2JpdGZpZWxkLmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ID4gKyNp bmNsdWRlIDxsaW51eC9pcnEuaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQo+ ID4gPiArI2luY2x1ZGUgPGxpbnV4L3RpbWU2NC5oPg0KPiA+ID4gKw0KPiA+ID4gKyNpbmNsdWRl IDx2aWRlby9taXBpX2Rpc3BsYXkuaD4NCj4gPiA+ICsjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2Rl Lmg+DQo+ID4gPiArDQo+ID4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPg0K PiA+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+DQo+ID4gPiArI2luY2x1ZGUg PGRybS9kcm1fb2YuaD4NCj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPg0KPiA+ID4g KyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+DQo+ID4gPiArDQo+ID4gPiArI2luY2x1ZGUgIm53 bC1kcnYuaCINCj4gPiA+ICsjaW5jbHVkZSAibndsLWRzaS5oIg0KPiA+ID4gKw0KPiA+ID4gKyNk ZWZpbmUgTldMX0RTSV9NSVBJX0ZJRk9fVElNRU9VVCBtc2Vjc190b19qaWZmaWVzKDUwMCkNCj4g PiA+ICsNCj4gPiA+ICsvKg0KPiA+ID4gKyAqIFBLVF9DT05UUk9MIGZvcm1hdDoNCj4gPiA+ICsg KiBbMTU6IDBdIC0gd29yZCBjb3VudA0KPiA+ID4gKyAqIFsxNzoxNl0gLSB2aXJ0dWFsIGNoYW5u ZWwNCj4gPiA+ICsgKiBbMjM6MThdIC0gZGF0YSB0eXBlDQo+ID4gPiArICogWzI0XcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAtIExQIG9yIEhTIHNlbGVjdCAoMCAtIExQLCAxIC0gSFMpDQo+ID4gPiAr ICogWzI1XcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAtIHBlcmZvcm0gQlRBIGFmdGVyIHBhY2tldCBp cyBzZW50DQo+ID4gPiArICogWzI2XcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAtIHBlcmZvcm0gQlRB IG9ubHksIG5vIHBhY2tldCB0eA0KPiA+ID4gKyAqLw0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9X Qyh4KcKgwqDCoMKgwqDCoMKgwqDCoMKgRklFTERfUFJFUChHRU5NQVNLKDE1LCAwKSwgKHgpKQ0K PiA+ID4gKyNkZWZpbmUgTldMX0RTSV9UWF9WQyh4KcKgwqDCoMKgwqDCoMKgRklFTERfUFJFUChH RU5NQVNLKDE3LCAxNiksICh4KSkNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfVFhfRFQoeCnCoMKg wqDCoMKgwqDCoEZJRUxEX1BSRVAoR0VOTUFTSygyMywgMTgpLCAoeCkpDQo+ID4gPiArI2RlZmlu ZSBOV0xfRFNJX0hTX1NFTCh4KcKgwqDCoMKgwqDCoEZJRUxEX1BSRVAoR0VOTUFTSygyNCwgMjQp LCAoeCkpDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0JUQV9UWCh4KcKgwqDCoMKgwqDCoEZJRUxE X1BSRVAoR0VOTUFTSygyNSwgMjUpLCAoeCkpDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0JUQV9O T19UWCh4KcKgwqDCoEZJRUxEX1BSRVAoR0VOTUFTSygyNiwgMjYpLCAoeCkpDQo+ID4gPiArDQo+ ID4gPiArLyoNCj4gPiA+ICsgKiBSWF9QS1RfSEVBREVSIGZvcm1hdDoNCj4gPiA+ICsgKiBbMTU6 IDBdIC0gd29yZCBjb3VudA0KPiA+ID4gKyAqIFsyMToxNl0gLSBkYXRhIHR5cGUNCj4gPiA+ICsg KiBbMjM6MjJdIC0gdmlydHVhbCBjaGFubmVsDQo+ID4gPiArICovDQo+ID4gPiArI2RlZmluZSBO V0xfRFNJX1JYX0RUKHgpwqDCoMKgwqDCoMKgwqBGSUVMRF9HRVQoR0VOTUFTSygyMSwgMTYpLCAo eCkpDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1JYX1ZDKHgpwqDCoMKgwqDCoMKgwqBGSUVMRF9H RVQoR0VOTUFTSygyMywgMjIpLCAoeCkpDQo+ID4gPiArDQo+ID4gPiArLyogRFNJIFZpZGVvIG1v ZGUgKi8NCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfVk1fQlVSU1RfTU9ERV9XSVRIX1NZTkNfUFVM U0VTwqDCoMKgwqDCoMKgwqDCoMKgMA0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9WTV9OT05fQlVS U1RfTU9ERV9XSVRIX1NZTkNfRVZFTlRTwqDCoMKgwqDCoEJJVCgwKQ0KPiA+ID4gKyNkZWZpbmUg TldMX0RTSV9WTV9CVVJTVF9NT0RFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoEJJVCgxKQ0KPiA+ID4gKw0KPiA+ID4gKy8qICogRFBJIGNvbG9yIGNv ZGluZyAqLw0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9EUElfMTZfQklUXzU2NV9QQUNLRUTCoMKg MA0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9EUElfMTZfQklUXzU2NV9BTElHTkVEIDENCj4gPiA+ ICsjZGVmaW5lIE5XTF9EU0lfRFBJXzE2X0JJVF81NjVfU0hJRlRFRCAyDQo+ID4gPiArI2RlZmlu ZSBOV0xfRFNJX0RQSV8xOF9CSVRfUEFDS0VEwqDCoMKgwqDCoMKgMw0KPiA+ID4gKyNkZWZpbmUg TldMX0RTSV9EUElfMThfQklUX0FMSUdORUTCoMKgwqDCoMKgNA0KPiA+ID4gKyNkZWZpbmUgTldM X0RTSV9EUElfMjRfQklUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA1DQo+ID4gPiArDQo+ID4g PiArLyogKiBEUEkgUGl4ZWwgZm9ybWF0ICovDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1BJWEVM X0ZPUk1BVF8xNsKgwqAwDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8xOMKg wqBCSVQoMCkNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfUElYRUxfRk9STUFUXzE4TCBCSVQoMSkN Cj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfUElYRUxfRk9STUFUXzI0wqDCoChCSVQoMCkgfCBCSVQo MSkpDQo+ID4gPiArDQo+ID4gPiArZW51bSB0cmFuc2Zlcl9kaXJlY3Rpb24gew0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgRFNJX1BBQ0tFVF9TRU5ELA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgRFNJX1BB Q0tFVF9SRUNFSVZFLA0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArc3RydWN0IG53bF9kc2lf dHJhbnNmZXIgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21z ZyAqbXNnOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG1pcGlfZHNpX3BhY2tldCBwYWNr ZXQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0ZWQ7DQo+ ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgc3RhdHVzOyAvKiBzdGF0dXMgb2YgdHJh bnNtaXNzaW9uICovDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBlbnVtIHRyYW5zZmVyX2RpcmVjdGlv biBkaXJlY3Rpb247DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBib29sIG5lZWRfYnRhOw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgdTggY21kOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTE2IHJ4X3dvcmRf Y291bnQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzaXplX3QgdHhfbGVuOyAvKiBpbiBieXRlcyAq Lw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc2l6ZV90IHJ4X2xlbjsgLyogaW4gYnl0ZXMgKi8NCj4g PiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgbndsX2RzaV93cml0ZShzdHJ1Y3Qg bndsX2RzaSAqZHNpLCB1bnNpZ25lZCBpbnQgcmVnLA0KPiA+ID4gdTMyDQo+ID4gPiB2YWwpDQo+ ID4gPiArew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsNCj4gPiA+ICsNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoHJldCA9IHJlZ21hcF93cml0ZShkc2ktPnJlZ21hcCwgcmVnLCB2YWwpOw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkZhaWxlZCB0 byB3cml0ZSBOV0wgRFNJIHJlZyAweCV4Og0KPiA+ID4gJWRcbiIsIHJlZywNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0K PiA+ID4gK3N0YXRpYyB1MzIgbndsX2RzaV9yZWFkKHN0cnVjdCBud2xfZHNpICpkc2ksIHUzMiBy ZWcpDQo+ID4gPiArew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IHZhbDsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKg wqByZXQgPSByZWdtYXBfcmVhZChkc2ktPnJlZ21hcCwgcmVnLCAmdmFsKTsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoGlmIChyZXQgPCAwKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBOV0wgRFNJDQo+ID4g PiByZWcNCj4gPiA+IDB4JXg6ICVkXG4iLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWcsIHJldCk7DQo+ID4gPiArDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gdmFsOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ ICtzdGF0aWMgdTMyIG53bF9kc2lfZ2V0X2RwaV9waXhlbF9mb3JtYXQoZW51bQ0KPiA+ID4gbWlw aV9kc2lfcGl4ZWxfZm9ybWF0DQo+ID4gPiBmb3JtYXQpDQo+ID4gPiArew0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgc3dpdGNoIChmb3JtYXQpIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGNhc2UgTUlQ SV9EU0lfRk1UX1JHQjU2NToNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gTldMX0RTSV9QSVhFTF9GT1JNQVRfMTY7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBjYXNl IE1JUElfRFNJX0ZNVF9SR0I2NjY6DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIE5XTF9EU0lfUElYRUxfRk9STUFUXzE4TDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oGNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIE5XTF9EU0lfUElYRUxfRk9STUFUXzE4Ow0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4Og0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8yNDsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoGRlZmF1bHQ6DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArfQ0K PiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgUFNFQ19QRVJfU0VDIDEwMDAwMDAwMDAwMDBMTA0KPiA+ ID4gKy8qDQo+ID4gPiArICogcHMyYmMgLSBQaWNvc2Vjb25kcyB0byBieXRlIGNsb2NrIGN5Y2xl cw0KPiA+ID4gKyAqLw0KPiA+ID4gK3N0YXRpYyB1MzIgcHMyYmMoc3RydWN0IG53bF9kc2kgKmRz aSwgdW5zaWduZWQgbG9uZyBsb25nIHBzKQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oGludCBicHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsNCj4g PiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBESVZfUk9VTkRfVVAocHMgKiBkc2kt Pm1vZGUuY2xvY2sgKiAxMDAwICogYnBwLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRzaS0+bGFuZXMgKiA4ICogUFNFQ19QRVJf U0VDKTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoNCj4gPiA+ICsgKiB1aTJiYyAtIFVJ IHRpbWUgcGVyaW9kcyB0byBieXRlIGNsb2NrIGN5Y2xlcw0KPiA+ID4gKyAqLw0KPiA+ID4gK3N0 YXRpYyB1MzIgdWkyYmMoc3RydWN0IG53bF9kc2kgKmRzaSwgdW5zaWduZWQgbG9uZyBsb25nIHVp KQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCBicHAgPSBtaXBpX2RzaV9waXhl bF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoHJldHVybiBESVZfUk9VTkRfVVAodWkgKiBkc2ktPmxhbmVzLCBkc2ktPm1vZGUuY2xvY2sg Kg0KPiA+ID4gMTAwMCAqDQo+ID4gPiBicHApOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsv Kg0KPiA+ID4gKyAqIHVzMmJjIC0gbWljcm8gc2Vjb25kcyB0byBscCBjbG9jayBjeWNsZXMNCj4g PiA+ICsgKi8NCj4gPiA+ICtzdGF0aWMgdTMyIHVzMmxwKHUzMiBscF9jbGtfcmF0ZSwgdW5zaWdu ZWQgbG9uZyB1cykNCj4gPiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gRElWX1JP VU5EX1VQKHVzICogbHBfY2xrX3JhdGUsIFVTRUNfUEVSX1NFQyk7DQo+ID4gPiArfQ0KPiA+ID4g Kw0KPiA+ID4gK3N0YXRpYyBpbnQgbndsX2RzaV9jb25maWdfaG9zdChzdHJ1Y3QgbndsX2RzaSAq ZHNpKQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBjeWNsZXM7DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X2NvbmZpZ3VyZV9vcHRzX21pcGlfZHBoeSAqY2ZnID0g JmRzaS0NCj4gPiA+ID4gDQo+ID4gPiA+IHBoeV9jZmcubWlwaV9kcGh5Ow0KPiA+ID4gKw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGRzaS0+bGFuZXMgPCAxIHx8IGRzaS0+bGFuZXMgPiA0KQ0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOw0KPiA+ ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYs ICJEU0kgTGFuZXMgJWRcbiIsIGRzaS0NCj4gPiA+ID5sYW5lcyk7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfTlVNX0xBTkVTLCBkc2ktPmxhbmVz IC0NCj4gPiA+IDEpOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGRzaS0+ZHNp X21vZGVfZmxhZ3MgJiBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUykNCj4gPiA+IHsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldM X0RTSV9DRkdfTk9OQ09OVElOVU9VU19DTEssDQo+ID4gPiAweDAxKTsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfQVVU T0lOU0VSVF9FT1RQLA0KPiA+ID4gMHgwMSk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ug ew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNp LCBOV0xfRFNJX0NGR19OT05DT05USU5VT1VTX0NMSywNCj4gPiA+IDB4MDApOw0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NG R19BVVRPSU5TRVJUX0VPVFAsDQo+ID4gPiAweDAwKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0N Cj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIHZhbHVlcyBpbiBieXRlIGNsb2NrIGN5 Y2xlcyAqLw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgY3ljbGVzID0gdWkyYmMoZHNpLCBjZmctPmNs a19wcmUpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5k ZXYsICJjZmdfdF9wcmU6IDB4JXhcbiIsDQo+ID4gPiBjeWNsZXMpOw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX1RfUFJFLCBjeWNsZXMpOw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgY3ljbGVzID0gcHMyYmMoZHNpLCBjZmctPmxweCArIGNmZy0+Y2xr X3ByZXBhcmUgKyBjZmctDQo+ID4gPiA+IA0KPiA+ID4gPiBjbGtfemVybyk7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190eF9nYXAgKHBy ZSk6DQo+ID4gPiAweCV4XG4iLA0KPiA+ID4gY3ljbGVzKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oGN5Y2xlcyArPSB1aTJiYyhkc2ksIGNmZy0+Y2xrX3ByZSk7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190eF9nYXA6IDB4JXhcbiIsDQo+ ID4gPiBjeWNsZXMpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5X TF9EU0lfQ0ZHX1RfUE9TVCwgY3ljbGVzKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGN5Y2xlcyA9 IHBzMmJjKGRzaSwgY2ZnLT5oc19leGl0KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZf REVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiY2ZnX3R4X2dhcDogMHgleFxuIiwNCj4gPiA+IGN5Y2xl cyk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdf VFhfR0FQLCBjeWNsZXMpOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93 cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0VYVFJBX0NNRFNfQUZURVJfRU9UUCwNCj4gPiA+IDB4MDEp Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0hU WF9UT19DT1VOVCwgMHgwMCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRz aSwgTldMX0RTSV9DRkdfTFJYX0hfVE9fQ09VTlQsIDB4MDApOw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0JUQV9IX1RPX0NPVU5ULCAweDAwKTsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIEluIExQIGNsb2NrIGN5Y2xlcyAqLw0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgY3ljbGVzID0gdXMybHAoY2ZnLT5scF9jbGtfcmF0ZSwgY2ZnLT53YWtldXAp Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJj ZmdfdHdha2V1cDogMHgleFxuIiwNCj4gPiA+IGN5Y2xlcyk7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfVFdBS0VVUCwgY3ljbGVzKTsNCj4gPiA+ ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4g PiA+ICtzdGF0aWMgaW50IG53bF9kc2lfY29uZmlnX2RwaShzdHJ1Y3QgbndsX2RzaSAqZHNpKQ0K PiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBjb2xvcl9mb3JtYXQsIG1vZGU7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBib29sIGJ1cnN0X21vZGU7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqBpbnQgaGZyb250X3BvcmNoLCBoYmFja19wb3JjaCwgdmZyb250X3BvcmNoLCB2YmFja19wb3Jj aDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCBoc3luY19sZW4sIHZzeW5jX2xlbjsNCj4gPiA+ ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGhmcm9udF9wb3JjaCA9IGRzaS0+bW9kZS5oc3luY19z dGFydCAtIGRzaS0NCj4gPiA+ID5tb2RlLmhkaXNwbGF5Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg aHN5bmNfbGVuID0gZHNpLT5tb2RlLmhzeW5jX2VuZCAtIGRzaS0+bW9kZS5oc3luY19zdGFydDsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoGhiYWNrX3BvcmNoID0gZHNpLT5tb2RlLmh0b3RhbCAtIGRz aS0+bW9kZS5oc3luY19lbmQ7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqB2ZnJvbnRf cG9yY2ggPSBkc2ktPm1vZGUudnN5bmNfc3RhcnQgLSBkc2ktDQo+ID4gPiA+bW9kZS52ZGlzcGxh eTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHZzeW5jX2xlbiA9IGRzaS0+bW9kZS52c3luY19lbmQg LSBkc2ktPm1vZGUudnN5bmNfc3RhcnQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB2YmFja19wb3Jj aCA9IGRzaS0+bW9kZS52dG90YWwgLSBkc2ktPm1vZGUudnN5bmNfZW5kOw0KPiA+ID4gKw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJoZnJvbnRf cG9yY2ggPSAlZFxuIiwNCj4gPiA+IGhmcm9udF9wb3JjaCk7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImhiYWNrX3BvcmNoID0gJWRcbiIsDQo+ ID4gPiBoYmFja19wb3JjaCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RS SVZFUihkc2ktPmRldiwgImhzeW5jX2xlbiA9ICVkXG4iLA0KPiA+ID4gaHN5bmNfbGVuKTsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiaGRpc3Bs YXkgPSAlZFxuIiwgZHNpLQ0KPiA+ID4gPiANCj4gPiA+ID4gbW9kZS5oZGlzcGxheSk7DQo+ID4g PiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgInZmcm9udF9w b3JjaCA9ICVkXG4iLA0KPiA+ID4gdmZyb250X3BvcmNoKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAidmJhY2tfcG9yY2ggPSAlZFxuIiwNCj4g PiA+IHZiYWNrX3BvcmNoKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJ VkVSKGRzaS0+ZGV2LCAidnN5bmNfbGVuID0gJWRcbiIsDQo+ID4gPiB2c3luY19sZW4pOw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJ2YWN0aXZl ID0gJWRcbiIsIGRzaS0NCj4gPiA+ID4gDQo+ID4gPiA+IG1vZGUudmRpc3BsYXkpOw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJjbG9jayA9ICVk IGtIelxuIiwgZHNpLQ0KPiA+ID4gPiANCj4gPiA+ID4gbW9kZS5jbG9jayk7DQo+ID4gPiArDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBjb2xvcl9mb3JtYXQgPSBud2xfZHNpX2dldF9kcGlfcGl4ZWxf Zm9ybWF0KGRzaS0+Zm9ybWF0KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChjb2xvcl9mb3Jt YXQgPCAwKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9F UlJPUihkc2ktPmRldiwgIkludmFsaWQgY29sb3IgZm9ybWF0DQo+ID4gPiAweCV4XG4iLA0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkc2ktPmZvcm1hdCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIGNvbG9yX2Zvcm1hdDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICvCoMKg wqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAicGl4ZWwgZm10ID0gJWRc biIsIGRzaS0NCj4gPiA+ID4gDQo+ID4gPiA+IGZvcm1hdCk7DQo+ID4gPiArDQo+ID4gPiArwqDC oMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9JTlRFUkZBQ0VfQ09MT1JfQ09E SU5HLA0KPiA+ID4gTldMX0RTSV9EUElfMjRfQklUKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoG53 bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1BJWEVMX0ZPUk1BVCwgY29sb3JfZm9ybWF0KTsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoC8qDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoCogQWRqdXN0aW5n IGlucHV0IHBvbGFyaXR5IGJhc2VkIG9uIHRoZSB2aWRlbyBtb2RlDQo+ID4gPiByZXN1bHRzDQo+ ID4gPiBpbg0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAqIGEgYmxhY2sgc2NyZWVuIHNvIGFsd2F5 cyBwaWNrIGFjdGl2ZSBsb3c6DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoCovDQo+ID4gPiArwqDC oMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9WU1lOQ19QT0xBUklUWSwNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX1ZT WU5DX1BPTEFSSVRZX0FDVElWRV9MT1cpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93 cml0ZShkc2ksIE5XTF9EU0lfSFNZTkNfUE9MQVJJVFksDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTldMX0RTSV9IU1lOQ19QT0xBUklUWV9BQ1RJVkVf TE9XKTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGJ1cnN0X21vZGUgPSAoZHNpLT5k c2lfbW9kZV9mbGFncyAmDQo+ID4gPiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUKSAmJg0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAhKGRzaS0+ZHNpX21v ZGVfZmxhZ3MgJg0KPiA+ID4gTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKTsNCj4gPiA+ ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChidXJzdF9tb2RlKSB7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVklERU9f TU9ERSwNCj4gPiA+IE5XTF9EU0lfVk1fQlVSU1RfTU9ERSk7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfUElYRUxfRklGT19T RU5EX0xFVkVMLA0KPiA+ID4gMjU2KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSB7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbW9kZSA9ICgoZHNpLT5kc2lfbW9k ZV9mbGFncyAmDQo+ID4gPiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpID8NCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoE5XTF9EU0lfVk1fQlVSU1RfTU9ERV9XSVRIX1NZTkNfUA0KPiA+ID4gVUxTRQ0KPiA+ ID4gUyA6DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX1ZNX05PTl9CVVJTVF9NT0RFX1dJVEhfU1kNCj4g PiA+IE5DX0UNCj4gPiA+IFZFTlRTKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9WSURFT19NT0RFLCBtb2RlKTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RT SV9QSVhFTF9GSUZPX1NFTkRfTEVWRUwsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRzaS0+bW9kZS5oZGlzcGxheSk7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBud2xf ZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9IRlAsIGhmcm9udF9wb3JjaCk7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9IQlAsIGhiYWNrX3BvcmNoKTsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0hTQSwgaHN5bmNf bGVuKTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBO V0xfRFNJX0VOQUJMRV9NVUxUX1BLVFMsIDB4MCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBud2xf ZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9CTExQX01PREUsIDB4MSk7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9FTkFCTEVfTVVMVF9QS1RTLCAweDApOw0K PiA+IE5XTF9EU0lfRU5BQkxFX01VTFRfUEtUUyBpcyB3cml0dGVuIHR3aWNlLCBieSBtaXN0YWtl LCBzbyByZW1vdmUNCj4gPiB0aGlzDQo+ID4gbGluZS4gSSBkaWQgdGhlIHNhbWUgbWlzdGFrZSBv biBOWFAgdHJlZSwgSSB0aGluayB5b3UgZ290IGl0IGZyb20NCj4gPiB0aGVyZQ0KPiBEcm9wcGVk Lg0KPiANCj4gPiANCj4gPiA6KQ0KPiA+ID4gDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBud2xfZHNp X3dyaXRlKGRzaSwgTldMX0RTSV9VU0VfTlVMTF9QS1RfQkxMUCwgMHgwKTsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZDLCAweDApOw0KPiA+ID4gKw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfUElYRUxfUEFZ TE9BRF9TSVpFLCBkc2ktDQo+ID4gPiA+IA0KPiA+ID4gPiBtb2RlLmhkaXNwbGF5KTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZBQ1RJVkUsIGRzaS0+ bW9kZS52ZGlzcGxheSAtDQo+ID4gPiAxKTsNCj4gPiBWQUNUSVZFIHNob2xkIGNvbnRhaW4gdGhl IG51bWJlciBvZiBsaW5lcyBpbiB0aGUgdmVydGljYWwgYXJlYS4gIi0NCj4gPiAxIg0KPiA+IHN1 YnRyYWN0aW9uIHdhcyBhY3R1YWxseSB3cm9uZy4NCj4gU28gaXMgdGhhdCBhbiBlcnJvciBpbiB0 aGUgaW14OE1RIHJlZmVyZW5jZSBtYW51YWwgd2hpY2ggc2F5cyBpbg0KPiBNSVBJX0RTSV9IT1NU X0RQSV9JTlRGQ19EU0lfSE9TVF9DRkdfRFBJX1ZBQ1RJVkU6DQo+IA0KPiDCoCBTZXRzIHRoZSBu dW1iZXIgb2YgbGluZXMgaW4gdGhlIHZlcnRpY2FsIGFjdGl2ZSBhcmVhLiBUaGlzIGZpZWxkIGlz DQo+IMKgIGVxdWl2YWxlbnQgdG8gKHJlYWwgdmVydGljYWwgc2l6ZSkgLSAxLiBGb3IgZXhhbXBs ZSwgZm9yIGFuIGltYWdlDQo+IG9mDQo+IMKgIHNpemUgNjQweDQ4MCwgdGhlIGJpdCBmaWVsZCBz aG91bGQgYmUgc2V0IGFzIDQ3OS4NCj4gDQo+IElzIHNvIEknbGwgZml4IHRoYXQgYnV0IGl0J2Qg YmUgZ3JlYXQgaWYgeW91IGNvdWxkIGNvbmZpcm0uIEkgZG9uJ3QNCj4gc2VlDQo+IGFueSB2aXN1 YWwgZGlmZmVyZW5jZSB3aXRoIHRoZSBwYW5lbCBpIGhhdmUgaGVyZS4NCldlbGwsIEkgaGF2ZSBo ZXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBSTSBmb3IgdGhlIERTSSBJUCBibG9jay4NCk5v dywgcmVnYXJkaW5nIHRoZcKgTUlQSV9EU0lfSE9TVF9EUElfSU5URkNfRFNJX0hPU1RfQ0ZHX0RQ SV9WQUNUSVZFLA0KdGhhdCBpcyBhY3R1YWxseSBhIHBvcnQgcmVnaXN0ZXIgZm9yIHRoZSBhY3R1 YWwgdmFsdWUgdHJhbnNtaXR0ZWQgdG8NCnRoZSBEU0kgYmxvY2suIElmIHRoZSBtYW51YWwgZm9y IDhNUSBpcyBsaWtlIHRoYXQsIHRoZW4gbGVhdmUgaXQgdGhpcw0Kd2F5ICh0aGV5IGtub3cgYmV0 dGVyIGhvdyB0aGV5IGltcGxlbWVudGVkIHRoaXMgcG9ydCkuIEl0IGlzIHN0cmFuZ2UNCnRob3Vn aCwgdGhhdCB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIHdpdGggb3Igd2l0aG91dCB0aGUgIi0xIi4N Cj4gDQo+ID4gDQo+ID4gPiANCj4gPiA+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNp LCBOV0xfRFNJX1ZCUCwgdmJhY2tfcG9yY2gpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgbndsX2Rz aV93cml0ZShkc2ksIE5XTF9EU0lfVkZQLCB2ZnJvbnRfcG9yY2gpOw0KPiA+ID4gKw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRp YyB2b2lkIG53bF9kc2lfaW5pdF9pbnRlcnJ1cHRzKHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ID4g PiArew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIGlycV9lbmFibGU7DQo+ID4gPiArDQo+ID4g PiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9JUlFfTUFTSywgMHhm ZmZmZmZmZik7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RT SV9JUlFfTUFTSzIsIDB4Nyk7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpcnFfZW5h YmxlID0gfih1MzIpKE5XTF9EU0lfVFhfUEtUX0RPTkVfTUFTSyB8DQo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTldMX0RTSV9SWF9Q S1RfSERSX1JDVkRfTUFTSyB8DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTldMX0RTSV9UWF9GSUZPX09WRkxXX01BU0sgfA0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oE5XTF9EU0lfSFNfVFhfVElNRU9VVF9NQVNLKTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0lSUV9NQVNLLCBpcnFfZW5hYmxlKTsNCj4g PiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGludCBud2xfZHNpX2hvc3RfYXR0YWNoKHN0 cnVjdCBtaXBpX2RzaV9ob3N0ICpkc2lfaG9zdCwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWlwaV9kc2lf ZGV2aWNlICpkZXZpY2UpDQo+ID4gPiArew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53 bF9kc2kgKmRzaSA9IGNvbnRhaW5lcl9vZihkc2lfaG9zdCwgc3RydWN0DQo+ID4gPiBud2xfZHNp LA0KPiA+ID4gZHNpX2hvc3QpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAq ZGV2ID0gZHNpLT5kZXY7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgRFJNX0RFVl9JTkZPKGRldiwgImxhbmVzPSV1LCBmb3JtYXQ9MHgleCBmbGFncz0weCVseFxu IiwNCj4gPiA+IGRldmljZS0+bGFuZXMsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRldmljZS0+Zm9ybWF0LCBkZXZpY2UtPm1vZGVfZmxhZ3MpOw0KPiA+ ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGRldmljZS0+bGFuZXMgPCAxIHx8IGRldmlj ZS0+bGFuZXMgPiA0KQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biAtRUlOVkFMOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHNpLT5sYW5lcyA9IGRl dmljZS0+bGFuZXM7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBkc2ktPmZvcm1hdCA9IGRldmljZS0+ Zm9ybWF0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHNpLT5kc2lfbW9kZV9mbGFncyA9IGRldmlj ZS0+bW9kZV9mbGFnczsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRybV9v Zl9maW5kX3BhbmVsX29yX2JyaWRnZShkc2ktPmRldi0+b2Zfbm9kZSwgMSwNCj4gPiA+IDAsDQo+ ID4gPiAmcGFuZWwsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZicmlkZ2UpOw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KHBhbmVsKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJpZGdlID0g ZHJtX3BhbmVsX2JyaWRnZV9hZGQocGFuZWwsDQo+ID4gPiBEUk1fTU9ERV9DT05ORUNUT1JfRFNJ KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGJyaWRn ZSkpDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiBQVFJfRVJSKGJyaWRnZSk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiAr DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBkc2ktPnBhbmVsX2JyaWRnZSA9IGJyaWRnZTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoGRybV9icmlkZ2VfYWRkKCZkc2ktPmJyaWRnZSk7DQo+ID4gPiArDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiAr c3RhdGljIGludCBud2xfZHNpX2hvc3RfZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpkc2lf aG9zdCwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpDQo+ID4gPiAr ew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2kgKmRzaSA9IGNvbnRhaW5lcl9v Zihkc2lfaG9zdCwgc3RydWN0DQo+ID4gPiBud2xfZHNpLA0KPiA+ID4gZHNpX2hvc3QpOw0KPiA+ ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHJtX29mX3BhbmVsX2JyaWRnZV9yZW1vdmUoZHNp LT5kZXYtPm9mX25vZGUsIDEsIDApOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHJtX2JyaWRnZV9y ZW1vdmUoJmRzaS0+YnJpZGdlKTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVy biAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgYm9vbCBud2xfZHNpX3JlYWRf cGFja2V0KHN0cnVjdCBud2xfZHNpICpkc2ksIHUzMiBzdGF0dXMpDQo+ID4gPiArew0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgbndsX2RzaV90cmFuc2ZlciAqeGZlciA9IGRzaS0+eGZlcjsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoHU4ICpwYXlsb2FkID0geGZlci0+bXNnLT5yeF9idWY7DQo+ID4g PiArwqDCoMKgwqDCoMKgwqB1MzIgdmFsOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTE2IHdvcmRf Y291bnQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB1OCBjaGFubmVsOw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgdTggZGF0YV90eXBlOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgeGZlci0+ c3RhdHVzID0gMDsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh4ZmVyLT5yeF93 b3JkX2NvdW50ID09IDApIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoIShzdGF0dXMgJiBOV0xfRFNJX1JYX1BLVF9IRFJfUkNWRCkpDQo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBHZXQgdGhlIFJYIGhlYWRlciBhbmQg cGFyc2UgaXQgKi8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBu d2xfZHNpX3JlYWQoZHNpLCBOV0xfRFNJX1JYX1BLVF9IRUFERVIpOw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdvcmRfY291bnQgPSBOV0xfRFNJX1dDKHZhbCk7DQo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbm5lbCA9IE5XTF9EU0lfUlhfVkMo dmFsKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkYXRhX3R5cGUgPSBO V0xfRFNJX1JYX0RUKHZhbCk7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKGNoYW5uZWwgIT0geGZlci0+bXNnLT5jaGFubmVsKSB7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1Io ZGV2LA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIlslMDJYXSBDaGFubmVsIG1pc21hdGNoDQo+ ID4gPiAoJXUgIT0NCj4gPiA+ICV1KVxuIiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhmZXIt PmNtZCwgY2hhbm5lbCwgeGZlci0NCj4gPiA+ID5tc2ctDQo+ID4gPiA+IA0KPiA+ID4gPiBjaGFu bmVsKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIHRydWU7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQ0K PiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN3aXRjaCAoZGF0 YV90eXBlKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZQ0KPiA+ ID4gTUlQSV9EU0lfUlhfR0VORVJJQ19TSE9SVF9SRUFEX1JFU1BPTlNFXzJCWVRFOg0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBGYWxsIHRo cm91Z2ggKi8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIE1JUElf RFNJX1JYX0RDU19TSE9SVF9SRUFEX1JFU1BPTlNFXzJCWVRFOg0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoeGZlci0+bXNnLT5yeF9sZW4g PiAxKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAvKiByZWFkIHNlY29uZCBieXRlICovDQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBw YXlsb2FkWzFdID0gd29yZF9jb3VudCA+PiA4Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKyt4ZmVyLT5yeF9sZW47 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0N Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyog RmFsbCB0aHJvdWdoICovDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2Fz ZQ0KPiA+ID4gTUlQSV9EU0lfUlhfR0VORVJJQ19TSE9SVF9SRUFEX1JFU1BPTlNFXzFCWVRFOg0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBG YWxsIHRocm91Z2ggKi8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNl IE1JUElfRFNJX1JYX0RDU19TSE9SVF9SRUFEX1JFU1BPTlNFXzFCWVRFOg0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoeGZlci0+bXNnLT5y eF9sZW4gPiAwKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiByZWFkIGZpcnN0IGJ5dGUgKi8NCj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHBheWxvYWRbMF0gPSB3b3JkX2NvdW50ICYgMHhmZjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCsreGZlci0+ cnhfbGVuOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB9DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHhmZXItPnN0YXR1cyA9IHhmZXItPnJ4X2xlbjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBNSVBJX0RTSV9SWF9BQ0tOT1dMRURHRV9BTkRf RVJST1JfUkVQT1JUOg0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB3b3JkX2NvdW50ICY9IDB4ZmY7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZGV2LCAiWyUwMlhdIERT SSBlcnJvcg0KPiA+ID4gcmVwb3J0Og0KPiA+ID4gMHglMDJ4XG4iLA0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgeGZlci0+Y21kLCB3b3JkX2NvdW50KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZlci0+c3RhdHVzID0gLUVQUk9UTzsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHRydWU7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh3b3JkX2NvdW50ID4geGZl ci0+bXNnLT5yeF9sZW4pIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUigNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldiwNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCJbJTAyWF0gUmVjZWl2ZSBidWZmZXIgdG9vIHNtYWxsOg0KPiA+ID4gJWx1DQo+ID4gPiAo PCAldSlcbiIsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLT5jbWQsIHhmZXItPm1zZy0+cnhfbGVuLA0KPiA+ ID4gd29yZF9jb3VudCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0NCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4 ZmVyLT5yeF93b3JkX2NvdW50ID0gd29yZF9jb3VudDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0g ZWxzZSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogU2V0IHdvcmRf Y291bnQgZnJvbSBwcmV2aW91cyBoZWFkZXIgcmVhZCAqLw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHdvcmRfY291bnQgPSB4ZmVyLT5yeF93b3JkX2NvdW50Ow0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyogSWYgUlgg cGF5bG9hZCBpcyBub3QgeWV0IHJlY2VpdmVkLCB3YWl0IGZvciBpdCAqLw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgaWYgKCEoc3RhdHVzICYgTldMX0RTSV9SWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkQp KQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsNCj4g PiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIFJlYWQgdGhlIFJYIHBheWxvYWQgKi8NCj4g PiA+ICvCoMKgwqDCoMKgwqDCoHdoaWxlICh3b3JkX2NvdW50ID49IDQpIHsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBud2xfZHNpX3JlYWQoZHNpLCBOV0xfRFNJ X1JYX1BBWUxPQUQpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBheWxv YWRbMF0gPSAodmFsID4+IDApICYgMHhmZjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBwYXlsb2FkWzFdID0gKHZhbCA+PiA4KSAmIDB4ZmY7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcGF5bG9hZFsyXSA9ICh2YWwgPj4gMTYpICYgMHhmZjsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXlsb2FkWzNdID0gKHZhbCA+PiAy NCkgJiAweGZmOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBheWxvYWQg Kz0gNDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLT5yeF9sZW4g Kz0gNDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3b3JkX2NvdW50IC09 IDQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKg wqBpZiAod29yZF9jb3VudCA+IDApIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB2YWwgPSBud2xfZHNpX3JlYWQoZHNpLCBOV0xfRFNJX1JYX1BBWUxPQUQpOw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN3aXRjaCAod29yZF9jb3VudCkgew0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgMzoNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGF5bG9hZFsyXSA9ICh2YWwg Pj4gMTYpICYgMHhmZjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgKyt4ZmVyLT5yeF9sZW47DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEZhbGwgdGhyb3VnaCAqLw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgMjoNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGF5bG9hZFsxXSA9ICh2YWwgPj4gOCkgJiAw eGZmOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqArK3hmZXItPnJ4X2xlbjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLyogRmFsbCB0aHJvdWdoICovDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgY2FzZSAxOg0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBwYXlsb2FkWzBdID0gKHZhbCA+PiAwKSAmIDB4ZmY7DQo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCsreGZlci0+ cnhfbGVuOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBicmVhazsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4g PiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqB4ZmVyLT5z dGF0dXMgPSB4ZmVyLT5yeF9sZW47DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gdHJ1ZTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIHZvaWQgbndsX2RzaV9m aW5pc2hfdHJhbnNtaXNzaW9uKHN0cnVjdCBud2xfZHNpICpkc2ksIHUzMg0KPiA+ID4gc3RhdHVz KQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpX3RyYW5zZmVy ICp4ZmVyID0gZHNpLT54ZmVyOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgYm9vbCBlbmRfcGFja2V0 ID0gZmFsc2U7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIXhmZXIpDQo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiA+ID4gKw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKHN0YXR1cyAmIE5XTF9EU0lfVFhfRklGT19PVkZMVykgew0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1JfUkFURUxJTUlU RUQoZHNpLT5kZXYsICJ0eCBmaWZvDQo+ID4gPiBvdmVyZmxvd1xuIik7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0K PiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0YXR1cyAmIE5XTF9EU0lfSFNfVFhf VElNRU9VVCkgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZf RVJST1JfUkFURUxJTUlURUQoZHNpLT5kZXYsICJIUyB0eA0KPiA+ID4gdGltZW91dFxuIik7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHhmZXItPmRpcmVj dGlvbiA9PSBEU0lfUEFDS0VUX1NFTkQgJiYNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg c3RhdHVzICYgTldMX0RTSV9UWF9QS1RfRE9ORSkgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHhmZXItPnN0YXR1cyA9IHhmZXItPnR4X2xlbjsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbmRfcGFja2V0ID0gdHJ1ZTsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoH0gZWxzZSBpZiAoc3RhdHVzICYgTldMX0RTSV9EUEhZX0RJUkVDVElPTiAmJg0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgoc3RhdHVzICYgKE5XTF9E U0lfUlhfUEtUX0hEUl9SQ1ZEIHwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX1JYX1BLVF9QQVlMT0FEX0RB VEFfUkNWRCkpDQo+ID4gPiApKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZW5kX3BhY2tldCA9IG53bF9kc2lfcmVhZF9wYWNrZXQoZHNpLCBzdGF0dXMpOw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGVuZF9w YWNrZXQpDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29tcGxldGUoJnhm ZXItPmNvbXBsZXRlZCk7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIG53 bF9kc2lfYmVnaW5fdHJhbnNtaXNzaW9uKHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ID4gPiArew0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2lfdHJhbnNmZXIgKnhmZXIgPSBkc2kt PnhmZXI7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWlwaV9kc2lfcGFja2V0ICpwa3Qg PSAmeGZlci0+cGFja2V0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgY29uc3QgdTggKnBheWxvYWQ7 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzaXplX3QgbGVuZ3RoOw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgdTE2IHdvcmRfY291bnQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB1OCBoc19tb2RlOw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgdTMyIHZhbDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBoc193 b3JrYXJvdW5kID0gMDsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIFNlbmQgdGhl IHBheWxvYWQsIGlmIGFueSAqLw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgbGVuZ3RoID0gcGt0LT5w YXlsb2FkX2xlbmd0aDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHBheWxvYWQgPSBwa3QtPnBheWxv YWQ7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqB3aGlsZSAobGVuZ3RoID49IDQpIHsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSAqKHUzMiAqKXBheWxv YWQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaHNfd29ya2Fyb3VuZCB8 PSAhKHZhbCAmIDB4RkZGRjAwKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9UWF9QQVlMT0FELCB2YWwpOw0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBheWxvYWQgKz0gNDsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsZW5ndGggLT0gNDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oH0NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIFNlbmQgdGhlIHJlc3Qgb2YgdGhlIHBheWxvYWQg Ki8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHZhbCA9IDA7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBz d2l0Y2ggKGxlbmd0aCkgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgY2FzZSAzOg0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCB8PSBwYXlsb2FkWzJdIDw8IDE2Ow0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEZhbGwgdGhyb3VnaCAqLw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgY2FzZSAyOg0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHZhbCB8PSBwYXlsb2FkWzFdIDw8IDg7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaHNfd29ya2Fyb3VuZCB8PSAhKHZhbCAmIDB4RkZGRjAwKTsNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBGYWxsIHRocm91Z2ggKi8NCj4gPiA+ICvC oMKgwqDCoMKgwqDCoGNhc2UgMToNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB2YWwgfD0gcGF5bG9hZFswXTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9UWF9QQVlMT0FELCB2YWwpOw0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg fQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgeGZlci0+dHhfbGVuID0gcGt0LT5wYXlsb2FkX2xlbmd0 aDsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qDQo+ID4gPiArwqDCoMKgwqDCoMKg wqDCoCogU2VuZCB0aGUgaGVhZGVyDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoCogaGVhZGVyWzBd ID0gVmlydHVhbCBDaGFubmVsICsgRGF0YSBUeXBlDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoCog aGVhZGVyWzFdID0gV29yZCBDb3VudCBMU0IgKExQKSBvciBmaXJzdCBwYXJhbSAoU1ApDQo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoCogaGVhZGVyWzJdID0gV29yZCBDb3VudCBNU0IgKExQKSBvciBz ZWNvbmQgcGFyYW0gKFNQKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAqLw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgd29yZF9jb3VudCA9IHBrdC0+aGVhZGVyWzFdIHwgKHBrdC0+aGVhZGVyWzJdIDw8 IDgpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGhzX3dvcmthcm91bmQgJiYgKGRzaS0+cXVp cmtzICYNCj4gPiA+IEUxMTQxOF9IU19NT0RFX1FVSVJLKSkgew0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LA0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCJVc2luZyBocyBtb2RlIHdvcmthcm91bmQNCj4gPiA+IGZvcg0KPiA+ ID4gY21kIDB4JXhcbiIsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZlci0+Y21kKTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBoc19tb2RlID0gMTsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoH0gZWxzZSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aHNfbW9kZSA9ICh4ZmVyLT5tc2ctPmZsYWdzICYNCj4gPiA+IE1JUElfRFNJX01TR19VU0VfTFBN KSA/DQo+ID4gPiAwIDogMTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICvCoMKgwqDC oMKgwqDCoHZhbCA9IE5XTF9EU0lfV0Mod29yZF9jb3VudCkgfCBOV0xfRFNJX1RYX1ZDKHhmZXIt Pm1zZy0NCj4gPiA+ID4gDQo+ID4gPiA+IGNoYW5uZWwpIHwNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoE5XTF9EU0lfVFhfRFQoeGZlci0+bXNnLT50eXBlKSB8DQo+ID4gPiBOV0xf RFNJX0hTX1NFTChoc19tb2RlKSB8DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBO V0xfRFNJX0JUQV9UWCh4ZmVyLT5uZWVkX2J0YSk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBud2xf ZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9QS1RfQ09OVFJPTCwgdmFsKTsNCj4gPiA+ICsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoC8qIFNlbmQgcGFja2V0IGNvbW1hbmQgKi8NCj4gPiA+ICvCoMKgwqDC oMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1NFTkRfUEFDS0VULCAweDEpOw0KPiA+ ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgc3NpemVfdCBud2xfZHNpX2hvc3RfdHJhbnNm ZXIoc3RydWN0IG1pcGlfZHNpX2hvc3QNCj4gPiA+ICpkc2lfaG9zdCwNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnDQo+ID4gPiAqbXNnKQ0KPiA+ID4gK3sN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2kgPSBjb250YWluZXJfb2Yo ZHNpX2hvc3QsIHN0cnVjdA0KPiA+ID4gbndsX2RzaSwNCj4gPiA+IGRzaV9ob3N0KTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpX3RyYW5zZmVyIHhmZXI7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqBzc2l6ZV90IHJldCA9IDA7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKg wqAvKiBDcmVhdGUgcGFja2V0IHRvIGJlIHNlbnQgKi8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGRz aS0+eGZlciA9ICZ4ZmVyOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gbWlwaV9kc2lfY3Jl YXRlX3BhY2tldCgmeGZlci5wYWNrZXQsIG1zZyk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAo cmV0IDwgMCkgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRzaS0+eGZl ciA9IE5VTEw7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJl dDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oGlmICgobXNnLT50eXBlICYgTUlQSV9EU0lfR0VORVJJQ19SRUFEX1JFUVVFU1RfMF9QQVJBTSB8 fA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zZy0+dHlwZSAmIE1JUElfRFNJX0dF TkVSSUNfUkVBRF9SRVFVRVNUXzFfUEFSQU0gfHwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBtc2ctPnR5cGUgJiBNSVBJX0RTSV9HRU5FUklDX1JFQURfUkVRVUVTVF8yX1BBUkFNIHx8 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNnLT50eXBlICYgTUlQSV9EU0lfRENT X1JFQUQpICYmDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zZy0+cnhfbGVuID4gMCAm JiBtc2ctPnJ4X2J1ZiAhPSBOVUxMKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHhmZXIuZGlyZWN0aW9uID0gRFNJX1BBQ0tFVF9SRUNFSVZFOw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgZWxzZQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhmZXIuZGly ZWN0aW9uID0gRFNJX1BBQ0tFVF9TRU5EOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg eGZlci5uZWVkX2J0YSA9ICh4ZmVyLmRpcmVjdGlvbiA9PSBEU0lfUEFDS0VUX1JFQ0VJVkUpOw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgeGZlci5uZWVkX2J0YSB8PSAobXNnLT5mbGFncyAmIE1JUElf RFNJX01TR19SRVFfQUNLKSA/IDENCj4gPiA+IDogMDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHhm ZXIubXNnID0gbXNnOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgeGZlci5zdGF0dXMgPSAtRVRJTUVE T1VUOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgeGZlci5yeF93b3JkX2NvdW50ID0gMDsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoHhmZXIucnhfbGVuID0gMDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHhm ZXIuY21kID0gMHgwMDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChtc2ctPnR4X2xlbiA+IDAp DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZlci5jbWQgPSAoKHU4ICop KG1zZy0+dHhfYnVmKSlbMF07DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpbml0X2NvbXBsZXRpb24o JnhmZXIuY29tcGxldGVkKTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGNs a19wcmVwYXJlX2VuYWJsZShkc2ktPnJ4X2VzY19jbGspOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg aWYgKHJldCA8IDApIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1f REVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSByeF9lc2MNCj4gPiA+IGNsazoN Cj4gPiA+ICV6ZFxuIiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJFbmFibGVkIHJ4X2Vz YyBjbGsgQCVsdQ0KPiA+ID4gSHpcbiIsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbGtfZ2V0X3JhdGUoZHNpLT5yeF9lc2Nf Y2xrKSk7DQo+ID4gVGhpcyB3aWxsIGJlIHByaW50ZWQgZXZlcnkgdGltZSBhIERTSSBjb21tYW5k IGlzIHNlbnQsIG9mIGNvdXJzZSwNCj4gPiB3aGVuDQo+ID4gZGVidWdnaW5nIG9ubHksIGJ1dCBz dGlsbDogYXJlIHlvdSBzdXJlIHlvdSBuZWVkIHRoaXMgaW5mbz8NCj4gaSdkIGxpa2UgdG8ga2Vl cCBpdCBmb3IgdGhlIG1vbWVudCwgaXQncyBvbmx5IG9uIGR1cmluZyBpbml0IGFuZCBvbmx5DQo+ IGluDQo+IGRlYnVnIGJ1dCBoZWxwcyB0byBzZWUgY2xvY2tzIGFyZSB0b2dnbGVkIGNvcnJlY3Rs eS4NCj4gDQo+ID4gDQo+ID4gPiANCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIElu aXRpYXRlIHRoZSBEU0kgcGFja2V0IHRyYW5zbWlzaW9uICovDQo+ID4gPiArwqDCoMKgwqDCoMKg wqBud2xfZHNpX2JlZ2luX3RyYW5zbWlzc2lvbihkc2kpOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnhmZXIuY29tcGxldGVk LA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTldMX0RTSV9NSVBJX0ZJRk9fVElNRU9V DQo+ID4gPiBUKSkNCj4gPiA+IHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBEUk1fREVWX0VSUk9SKGRzaV9ob3N0LT5kZXYsICJbJTAyWF0gRFNJIHRyYW5zZmVyDQo+ID4g PiB0aW1lZCBvdXRcbiIsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhmZXIuY21kKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXQgPSAtRVRJTUVET1VUOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg fSBlbHNlIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSB4ZmVy LnN0YXR1czsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoGNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnJ4X2VzY19jbGspOw0KPiA+ID4gKw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4g PiArY29uc3Qgc3RydWN0IG1pcGlfZHNpX2hvc3Rfb3BzIG53bF9kc2lfaG9zdF9vcHMgPSB7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqAuYXR0YWNoID0gbndsX2RzaV9ob3N0X2F0dGFjaCwNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoC5kZXRhY2ggPSBud2xfZHNpX2hvc3RfZGV0YWNoLA0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgLnRyYW5zZmVyID0gbndsX2RzaV9ob3N0X3RyYW5zZmVyLA0KPiA+ID4gK307 DQo+ID4gPiArDQo+ID4gPiAraXJxcmV0dXJuX3QgbndsX2RzaV9pcnFfaGFuZGxlcihpbnQgaXJx LCB2b2lkICpkYXRhKQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBpcnFfc3Rh dHVzOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2kgKmRzaSA9IGRhdGE7DQo+ ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpcnFfc3RhdHVzID0gbndsX2RzaV9yZWFkKGRz aSwgTldMX0RTSV9JUlFfU1RBVFVTKTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChpcnFfc3RhdHVzICYgTldMX0RTSV9UWF9QS1RfRE9ORSB8fA0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqBpcnFfc3RhdHVzICYgTldMX0RTSV9SWF9QS1RfSERSX1JDVkQgfHwNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaXJxX3N0YXR1cyAmIE5XTF9EU0lfUlhfUEtUX1BBWUxP QURfREFUQV9SQ1ZEKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9k c2lfZmluaXNoX3RyYW5zbWlzc2lvbihkc2ksIGlycV9zdGF0dXMpOw0KPiA+ID4gKw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4g PiA+ICtpbnQgbndsX2RzaV9lbmFibGUoc3RydWN0IG53bF9kc2kgKmRzaSkNCj4gPiA+ICt7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoHVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyAqcGh5X2NmZyA9ICZkc2kt PnBoeV9jZmc7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKCFkc2ktPmxhbmVzKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsICJOZWVkIERTSSBsYW5lczogJWRcbiIs IGRzaS0NCj4gPiA+ID4gDQo+ID4gPiA+IGxhbmVzKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0NCj4g PiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IHBoeV9pbml0KGRzaS0+cGh5KTsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gaW5pdCBEU0kgcGh5 Og0KPiA+ID4gJWRcbiIsDQo+ID4gPiByZXQpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBwaHlfY29uZmlndXJlKGRzaS0+cGh5LCBwaHlfY2Zn KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gY29uZmln dXJlIERTSSBwaHk6DQo+ID4gPiAlZFxuIiwgcmV0KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4g Kw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+dHhf ZXNjX2Nsayk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgew0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWls ZWQgdG8gZW5hYmxlIHR4X2VzYw0KPiA+ID4gY2xrOg0KPiA+ID4gJWRcbiIsDQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdf RFJJVkVSKGRzaS0+ZGV2LCAiRW5hYmxlZCB0eF9lc2MgY2xrIEAlbHUNCj4gPiA+IEh6XG4iLA0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgY2xrX2dldF9yYXRlKGRzaS0+dHhfZXNjX2NsaykpOw0KPiA+ID4gKw0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgcmV0ID0gbndsX2RzaV9jb25maWdfaG9zdChkc2kpOw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgaWYgKHJldCA8IDApIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBzZXQgdXAgRFNJOiAlZCIsDQo+ID4g PiByZXQpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBy ZXQgPSBud2xfZHNpX2NvbmZpZ19kcGkoZHNpKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChy ZXQgPCAwKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9F UlJPUihkZXYsICJGYWlsZWQgdG8gc2V0IHVwIERQSTogJWQiLA0KPiA+ID4gcmV0KTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gcGh5X3Bvd2Vy X29uKGRzaS0+cGh5KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsICJGYWls ZWQgdG8gcG93ZXIgb24gRFBIWQ0KPiA+ID4gKCVkKVxuIiwNCj4gPiA+IHJldCk7DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoH0NCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfaW5pdF9pbnRl cnJ1cHRzKGRzaSk7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4g PiA+ICt9DQo+ID4gSSBzZWUgdGhhdCB5b3UgZG8gYWxsIHRoZSBpbml0aWFsaXphdGlvbiBmcm9t IHRoZSBwcmVfZW5hYmxlIHN0YWdlLg0KPiA+IElmDQo+ID4geW91IHBvd2VyIG9uIHRoZSBEUEhZ LCB0aGUgRFNJIGhvc3QgYmxvY2sgd2lsbCBzdGFydCB0cmFuc21pdHRpbmcNCj4gPiBwaXhlbA0K PiA+IGRhdGEgb24gdGhlIGRhdGEgbGFuZXMuIFdlIGhhZCBzb21lIGN1c3RvbWVycyB0aGF0IGNv bXBsYWluZWQgYWJvdXQNCj4gPiB0aGlzLCBzbyBJIHRoaW5rIGlzIGJldHRlciB0byBob2xkIG9u IHRoZSBwaXhlbCBmbG93IHVudGlsIHRoZQ0KPiA+IHdob2xlDQo+ID4gcGl4ZWwgcGlwZSBpcyBj b21wbGV0ZWx5IGluaXRpYWxpemVkLg0KPiBJIGhhZCB0aGUgZHBoeSBwb3dlciBvbiBwYXN0IHRo ZSBkc2kgaG9zdCBzZXR1cCB0byBtYWtlIHN1cmUgdGhlIGhvc3QNCj4gc2VuZHMgZGF0YSBtYXRj aGluZyB0aGUgZHBoeSBzZXR1cC4gSSdtIGhhcHB5IHRvIGNoYW5nZSB0aGF0IGJ1dC4uLg0KPiAN Cj4gPiANCj4gPiBXaGF0IEkgcmVjb21tZW5kIGhlcmUsIGlzIHRvIGFsc28gdXNlIHRoZSBlbmFi bGUgc3RhZ2UgaW4gdGhlDQo+ID4gYnJpZGdlDQo+ID4gYW5kIG1vdmUgbndsX2RzaV9jb25maWdf aG9zdCBpbiB0aGVyZS4gVGh1cywgdGhlIGNhbGwgZmxvdyB3aWxsIGJlOg0KPiA+IDEuIGJyaWRn ZS0+cHJlX2VuYWJsZSAoRFNJIGlzIGNvbmZpZ3VyZWQsIGJ1dCBub3Qgc3RyZWFtaW5nIHNpbmNl DQo+ID4gdGhlDQo+ID4gaG9zdCBpcyBub3QgeWV0IGNvbmZpZ3VyZWQpDQo+IC4uLndoYXQgcGFy YW1ldGVyIGV4YWN0bHkgaXMgZ2F0aW5nIHRoZSBwaXhlbCBzdHJlYW0gaW4NCj4gbndsX2RzaV9j b25maWdfaG9zdCgpID/CoMKgYmVjYXVzZSB0aGF0IGlzIHdoYXQgd291bGQgbmVlZCB0byBnbyBp bnRvDQo+IGVuYWJsZSBhdCBsZWFzdCwgcmlnaHQ/IFRoZSBmdW5jdGlvbiBpcyBtb3N0bHkgY29u Y2VybmVkIHdpdGggSFMgbW9kZQ0KPiBzZXR1cCBhbmQgZnJvbSB0aGUgZG9jcyBub3RoaW5nIHN0 YW5kcyBvdXQgdGhhdCB3b3VsZCBlbmFibGUvZGlzYWJsZQ0KPiB0aGUNCj4gcGl4ZWwgc3RyZWFt IHBlciBzZS4gT3IgZG8geW91IG1lYW4gbndsX2RzaV9jb25maWdfZHBpKCkgPw0KSWYgdGhlIERQ SSBpcyBub3QgY29uZmlndXJlZCwgdGhlIERTSSB3b24ndCB3b3JrIGF0IGFsbCAoYXQgbGVhc3Qg dGhpcw0KaXMgd2hhdCBJIHJlbWVtYmVyIHdoYXQgSSBnb3Qgd2hlbiB0cnlpbmcgdGhpcywgYnV0 IEkgd2lsbCBkb3VibGUNCmNoZWNrKS4gSW5kZWVkLCB0aGUgRFBJIG1ha2VzIG1vcmUgc2Vuc2Ug aGVyZS4gSSB3aWxsIGRvdWJsZSBjaGVjayBhbmQNCnZlcmlmeSB3aXRoIHRoZSBzY2hlbWF0aWNz IGFuZCBjb21lIGJhY2sgd2l0aCBtb3JlIGluZm8uDQo+IA0KPiBUaGFua3MgYSBsb3QgZm9yIHlv dXIgY29tbWVudHMhDQo+IMKgLS0gR3VpZG8NCj4gDQo+ID4gDQo+ID4gMi4gcGFuZWwtPnByZXBh cmUgKHBhbmVsIHdpbGwgdXNlIHRoZSBEU0kgQVBCIGJsb2NrIHRvIHNlbmQgRFNJDQo+ID4gY29t bWFuZHMpDQo+ID4gMy4gYnJpZGdlLT5lbmFibGUgKERTSSBob3N0IGJsb2NrIGlzIGNvbmZpZ3Vy ZWQsIERTSSBzdGFydHMNCj4gPiBzdHJlYW1taW5nDQo+ID4gcGl4ZWxzKQ0KPiA+IDMuIHBhbmVs LT5lbmFibGUgKHBhbmVsIGlzIHJlYWR5IHRvIGRpc3BsYXkgdGhlIHBpeGVsIGZsb3cpDQo+ID4g PiANCj4gPiA+ICsNCj4gPiA+ICtpbnQgbndsX2RzaV9kaXNhYmxlKHN0cnVjdCBud2xfZHNpICpk c2kpDQo+ID4gPiArew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2ID0g ZHNpLT5kZXY7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJEaXNhYmxpbmcgY2xvY2tzIGFuZCBwaHlcbiIpOw0KPiA+ID4gKw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgcGh5X3Bvd2VyX29mZihkc2ktPnBoeSk7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqBwaHlfZXhpdChkc2ktPnBoeSk7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqAv KiBEaXNhYmxpbmcgdGhlIGNsb2NrIGJlZm9yZSB0aGUgcGh5IGJyZWFrcyBlbmFibGluZyBkc2kN Cj4gPiA+IGFnYWluICovDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBjbGtfZGlzYWJsZV91bnByZXBh cmUoZHNpLT50eF9lc2NfY2xrKTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVy biAwOw0KPiA+ID4gK30NCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L253bC1kc2kvbndsLWRzaS5oDQo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRz aS9ud2wtZHNpLmgNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiBpbmRleCAwMDAw MDAwMDAwMDAuLjU3OWIzNjZkZTY1Mg0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kc2kuaA0KPiA+ID4gQEAgLTAsMCAr MSwxMTIgQEANCj4gPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgKi8N Cj4gPiA+ICsvKg0KPiA+ID4gKyAqIE5XTCBNSVBJIERTSSBob3N0IGRyaXZlcg0KPiA+ID4gKyAq DQo+ID4gPiArICogQ29weXJpZ2h0IChDKSAyMDE3IE5YUA0KPiA+ID4gKyAqIENvcHlyaWdodCAo QykgMjAxOSBQdXJpc20gU1BDDQo+ID4gPiArICovDQo+ID4gPiArI2lmbmRlZiBfX05XTF9EU0lf SF9fDQo+ID4gPiArI2RlZmluZSBfX05XTF9EU0lfSF9fDQo+ID4gPiArDQo+ID4gPiArI2luY2x1 ZGUgPGxpbnV4L2lycXJldHVybi5oPg0KPiA+ID4gKw0KPiA+ID4gKyNpbmNsdWRlIDxkcm0vZHJt X21pcGlfZHNpLmg+DQo+ID4gPiArDQo+ID4gPiArI2luY2x1ZGUgIm53bC1kcnYuaCINCj4gPiA+ ICsNCj4gPiA+ICsvKiBEU0kgSE9TVCByZWdpc3RlcnMgKi8NCj4gPiA+ICsjZGVmaW5lIE5XTF9E U0lfQ0ZHX05VTV9MQU5FU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MA0K PiA+ID4gKyNkZWZpbmUgTldMX0RTSV9DRkdfTk9OQ09OVElOVU9VU19DTEvCoMKgwqDCoMKgwqDC oMKgwqDCoDB4NA0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9DRkdfVF9QUkXCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4OA0KPiA+ID4gKyNkZWZpbmUgTldMX0RT SV9DRkdfVF9QT1NUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHhj DQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0NGR19UWF9HQVDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAweDEwDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0NGR19BVVRP SU5TRVJUX0VPVFDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDE0DQo+ID4gPiArI2RlZmluZSBO V0xfRFNJX0NGR19FWFRSQV9DTURTX0FGVEVSX0VPVFDCoMKgwqDCoMKgwqAweDE4DQo+ID4gPiAr I2RlZmluZSBOV0xfRFNJX0NGR19IVFhfVE9fQ09VTlTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAweDFjDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0NGR19MUlhfSF9UT19DT1VOVMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMA0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9DRkdfQlRB X0hfVE9fQ09VTlTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjQNCj4gPiA+ICsjZGVmaW5l IE5XTF9EU0lfQ0ZHX1RXQUtFVVDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgMHgyOA0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9DRkdfU1RBVFVTX09VVMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDJjDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1JYX0VS Uk9SX1NUQVRVU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oDB4MzANCj4gPiA+ICsNCj4gPiA+ICsvKiBEU0kgRFBJIHJlZ2lzdGVycyAqLw0KPiA+ID4gKyNk ZWZpbmUgTldMX0RTSV9QSVhFTF9QQVlMT0FEX1NJWkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oDB4MjAwDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZJRk9fU0VORF9MRVZFTMKgwqDC oMKgwqDCoMKgwqDCoMKgMHgyMDQNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfSU5URVJGQUNFX0NP TE9SX0NPRElOR8KgwqDCoMKgwqDCoMKgwqDCoDB4MjA4DQo+ID4gPiArI2RlZmluZSBOV0xfRFNJ X1BJWEVMX0ZPUk1BVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMGMN Cj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfVlNZTkNfUE9MQVJJVFnCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMHgyMTANCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfVlNZTkNfUE9MQVJJ VFlfQUNUSVZFX0xPV8KgwqDCoMKgwqDCoDANCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfVlNZTkNf UE9MQVJJVFlfQUNUSVZFX0hJR0jCoMKgwqDCoMKgQklUKDEpDQo+ID4gPiArDQo+ID4gPiArI2Rl ZmluZSBOV0xfRFNJX0hTWU5DX1BPTEFSSVRZwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoDB4MjE0DQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0hTWU5DX1BPTEFSSVRZX0FDVElWRV9M T1fCoMKgwqDCoMKgwqAwDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0hTWU5DX1BPTEFSSVRZX0FD VElWRV9ISUdIwqDCoMKgwqDCoEJJVCgxKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgTldMX0RT SV9WSURFT19NT0RFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgy MTgNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfSEZQwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIxYw0KPiA+ID4gKyNkZWZpbmUgTldMX0RT SV9IQlDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoDB4MjIwDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0hTQcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMjQNCj4gPiA+ICsjZGVmaW5l IE5XTF9EU0lfRU5BQkxFX01VTFRfUEtUU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4 MjI4DQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1ZCUMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMmMNCj4gPiA+ICsjZGVmaW5lIE5XTF9E U0lfVkZQwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAweDIzMA0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9CTExQX01PREXCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjM0DQo+ID4gPiArI2RlZmluZSBOV0xf RFNJX1VTRV9OVUxMX1BLVF9CTExQwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjM4DQo+ ID4gPiArI2RlZmluZSBOV0xfRFNJX1ZBQ1RJVkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyM2MNCj4gPiA+ICsjZGVmaW5l IE5XTF9EU0lfVkPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgMHgyNDANCj4gPiA+ICsNCj4gPiA+ICsvKiBEU0kgQVBCIFBLVCBjb250cm9s ICovDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1RYX1BBWUxPQUTCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDI4MA0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9QS1Rf Q09OVFJPTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDI4NA0KPiA+ ID4gKyNkZWZpbmUgTldMX0RTSV9TRU5EX1BBQ0tFVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAweDI4OA0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9QS1RfU1RBVFVTwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyOGMNCj4gPiA+ICsjZGVm aW5lIE5XTF9EU0lfUEtUX0ZJRk9fV1JfTEVWRUzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg MHgyOTANCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfUEtUX0ZJRk9fUkRfTEVWRUzCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgMHgyOTQNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfUlhfUEFZTE9B RMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4Mjk4DQo+ID4gPiAr I2RlZmluZSBOV0xfRFNJX1JYX1BLVF9IRUFERVLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAweDI5Yw0KPiA+ID4gKw0KPiA+ID4gKy8qIERTSSBJUlEgaGFuZGxpbmcgKi8NCj4g PiA+ICsjZGVmaW5lIE5XTF9EU0lfSVJRX1NUQVRVU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoDB4MmEwDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1NNX05PVF9JRExF wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgwKQ0KPiA+ID4gKyNk ZWZpbmUgTldMX0RTSV9UWF9QS1RfRE9ORcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBCSVQoMSkNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfRFBIWV9ESVJFQ1RJT07CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDIpDQo+ID4gPiArI2RlZmluZSBOV0xf RFNJX1RYX0ZJRk9fT1ZGTFfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQo MykNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfVFhfRklGT19VREZMV8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg0KQ0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9SWF9GSUZP X09WRkxXwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDUpDQo+ID4gPiAr I2RlZmluZSBOV0xfRFNJX1JYX0ZJRk9fVURGTFfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBCSVQoNikNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfUlhfUEtUX0hEUl9SQ1ZEwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDcpDQo+ID4g PiArI2RlZmluZSBOV0xfRFNJX1JYX1BLVF9QQVlMT0FEX0RBVEFfUkNWRMKgwqDCoMKgwqDCoMKg QklUKDgpDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0JUQV9USU1FT1VUwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgyOSkNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lf TFBfUlhfVElNRU9VVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgzMCkN Cj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfSFNfVFhfVElNRU9VVMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoEJJVCgzMSkNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lf SVJRX1NUQVRVUzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyYTQN Cj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfU0lOR0xFX0JJVF9FQ0NfRVJSwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBCSVQoMCkNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfTVVMVElfQklUX0VDQ19F UlLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDEpDQo+ID4gPiArI2RlZmluZSBOV0xf RFNJX0NSQ19FUlLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgQklUKDIpDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJ X0lSUV9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4 MmE4DQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1NNX05PVF9JRExFX01BU0vCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBCSVQoMCkNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfVFhfUEtUX0RP TkVfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgxKQ0KPiA+ID4gKyNkZWZp bmUgTldMX0RTSV9EUEhZX0RJUkVDVElPTl9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklU KDIpDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1RYX0ZJRk9fT1ZGTFdfTUFTS8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgQklUKDMpDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1RYX0ZJRk9fVURG TFdfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDQpDQo+ID4gPiArI2RlZmluZSBO V0xfRFNJX1JYX0ZJRk9fT1ZGTFdfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDUp DQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1JYX0ZJRk9fVURGTFdfTUFTS8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgQklUKDYpDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1JYX1BLVF9IRFJfUkNW RF9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg3KQ0KPiA+ID4gKyNkZWZpbmUgTldMX0RT SV9SWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkRfTUFTS8KgwqBCSVQoOCkNCj4gPiA+ICsjZGVmaW5l IE5XTF9EU0lfQlRBX1RJTUVPVVRfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJ VCgyOSkNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfTFBfUlhfVElNRU9VVF9NQVNLwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBCSVQoMzApDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0hTX1RYX1RJ TUVPVVRfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDMxKQ0KPiA+ID4gKw0KPiA+ ID4gKyNkZWZpbmUgTldMX0RTSV9JUlFfTUFTSzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoDB4MmFjDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1NJTkdMRV9CSVRf RUNDX0VSUl9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMCkNCj4gPiA+ ICsjZGVmaW5lIE5XTF9EU0lfTVVMVElfQklUX0VDQ19FUlJfTUFTS8KgwqDCoMKgwqDCoMKgwqDC oEJJVCgxKQ0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9DUkNfRVJSX01BU0vCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgyKQ0KPiA+ID4gKw0KPiA+ID4gK2V4dGVybiBj b25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMgbndsX2RzaV9ob3N0X29wczsNCj4gPiA+ICsN Cj4gPiA+ICtpcnFyZXR1cm5fdCBud2xfZHNpX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRh dGEpOw0KPiA+ID4gK2ludCBud2xfZHNpX2VuYWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNpKTsNCj4g PiA+ICtpbnQgbndsX2RzaV9kaXNhYmxlKHN0cnVjdCBud2xfZHNpICpkc2kpOw0KPiA+ID4gKw0K PiA+ID4gKyNlbmRpZiAvKiBfX05XTF9EU0lfSF9fICovDQo+ID4gPiAtLQ0KPiA+ID4gMi4yMC4x DQo+ID4gPiANCj4gPiA+IA0KPiA+IEJlc3QgcmVnYXJkcywNCj4gPiBSb2JlcnQ=