Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp534480ybg; Mon, 1 Jun 2020 07:49:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz77eqOK3f4iZLsKOeF1GEYgzQMOYt+Iet31xv83fBuHIWysuviGMIa5n6G+UbYiEMW8KrH X-Received: by 2002:a17:906:2e1a:: with SMTP id n26mr19144698eji.425.1591022960092; Mon, 01 Jun 2020 07:49:20 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1591022960; cv=pass; d=google.com; s=arc-20160816; b=NO8wddoxPb7vaOnzwRvG9RswwuwAu5Pz9jPPVQcnr7RE3Yqrh86rY2ikP0IGr7BoVm IJiORAZAscelfT0IpOdzPvEir1XAfHlc4sifh0IIzzTLGA/NLbqCW2Rps4eWXqRZk1JV 8sNVn+CrgCfDWJeJfYzlVG4c6f9jELlHEk4qTG1gRToV5KrUY32kZXmF4CfwLrF2M5Vu q1j3ZV/dTAfiTstT7qeIE699QZdYFJyVcZBBw9aWk7P4q5q2/Y2oNJTnWhITqzGp88Ed xzhEEM31JR9HjIxyk6xXxTa2pkjHeI8paQ+CQ/fB5c+O/TouwXrOXx6+8W5LMJmfDx3w 5ALw== 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-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:to:from:dkim-signature; bh=g2I8H+mvwwZ+u60e2C2sOkU5mdQygBmGRcWecWKDkwM=; b=Lfm/UFn1ZPE8LDPENAtoweGcDEhaJ1zcmOMDfSmm/pn5dtLLflnBeDJPEfTp6EY0M3 SsBh9xnDDfuxw79ZWnzSyNSmKX4GIPqeeq4Gei6uslNrKOTbSLSC+twtfE+Wzg6kSF20 K/WmB6Hu/pwho8UL2IWok23yQiWpIYAWYnuIIRmeAkgwmMA8lOEqLqaQM0JOG5ck58iQ T+ZloTmELhn09OFSanxLVBxa1fEI/E0RK5tTsy/Q/kJOCHAJb/tEXRiDBc29G923hpyf CJq2o8OwVknZCL1rOy7JVpmbUdJtYAAd9S1oT6rPnLKbgXRJ1h+Sxod2jsb5oK2c639Z Mctg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector2-xilinx-onmicrosoft-com header.b=WVwK3wm6; arc=pass (i=1 spf=pass spfdomain=xilinx.com dkim=pass dkdomain=xilinx.com dmarc=pass fromdomain=xilinx.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u22si9807217eds.253.2020.06.01.07.48.55; Mon, 01 Jun 2020 07:49:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector2-xilinx-onmicrosoft-com header.b=WVwK3wm6; arc=pass (i=1 spf=pass spfdomain=xilinx.com dkim=pass dkdomain=xilinx.com dmarc=pass fromdomain=xilinx.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726944AbgFAOpC (ORCPT + 99 others); Mon, 1 Jun 2020 10:45:02 -0400 Received: from mail-dm6nam10on2040.outbound.protection.outlook.com ([40.107.93.40]:6176 "EHLO NAM10-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726110AbgFAOpB (ORCPT ); Mon, 1 Jun 2020 10:45:01 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RKPQVAL8BDLFhfuArKRJPwVO/+2pKQDrukxo1sVgw3OaX/sFhJWYqPx0ppKqD0sJwH7R3MMxPf16mKNacT7yqHHc0VHBaee0lj0Qk17qQ54eYnYkRaNZBEb8vgNhKCR9hYXVNgWk7u7ykYbnJn3TgWusYh8KGQ1mgOEG1yp3zs2ZE4wdsdHikdMwmM3aLIa6uLCZSfi25efWAB8TwHcn+Luz5/NcFsLo+B/fss7scpHXpad7/dhMPW+8+0JApwtO4RhkBCX2ImoPFQ3jTM74LleE4ypqVxf4T6naDs7NonSgqYjFN2PvLm9UPk2vad5gJKYX23BhOvR0dxZLP7iDRA== 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=g2I8H+mvwwZ+u60e2C2sOkU5mdQygBmGRcWecWKDkwM=; b=efSUkLtqVe90KU/2wXxhi87a7dSHUbR/4V915JChx5SLQa3aKHr2zSXgpW8daJTs3yPxf7bQCHGE63HV+GfpdegV5thdLQlM96RmH6LayjKah/TUxl4PFyAgSS7OKADu/oe4oFz7F4IWySX959NkXAxl2637DReONpLMMF7iIFsuvZUv3hLYGoKFiyinl1lZwQ6qXqYL9mm9hyniospLV8K0fz/aP3n49ES0i+0wMnRpYIfeHeSjSd9/YBfWCgf7ZguBpYSMLXX+2JrBGksWrNtqKY5n+2F9yGKEBJYhI+duMk8ZIyNUx/e9vLTW/QMJ0Z/voFHNFz9GY74mmrMfAQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=xilinx.com; dmarc=pass action=none header.from=xilinx.com; dkim=pass header.d=xilinx.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=g2I8H+mvwwZ+u60e2C2sOkU5mdQygBmGRcWecWKDkwM=; b=WVwK3wm6gKwa0sxjqPwVkuvWqQ84biLJemF74kqBwciS/I4YW3viwryM1u3FoE3Jre4BLAlR1GVKMQf0l5NvX305iMI6fxR136hX4g5rhS140j/kFu2VEP9zI8Sp4YfdlgaGVs8FRjrNNVoBWQcjXs/LS/SQ2KgCbJuuNia/dss= Received: from DM6PR02MB6876.namprd02.prod.outlook.com (2603:10b6:5:22c::11) by DM6PR02MB5594.namprd02.prod.outlook.com (2603:10b6:5:34::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3045.19; Mon, 1 Jun 2020 14:44:33 +0000 Received: from DM6PR02MB6876.namprd02.prod.outlook.com ([fe80::ad68:d392:e519:f671]) by DM6PR02MB6876.namprd02.prod.outlook.com ([fe80::ad68:d392:e519:f671%9]) with mapi id 15.20.3045.024; Mon, 1 Jun 2020 14:44:33 +0000 From: Vishal Sagar To: Hans Verkuil , Hyun Kwon , "laurent.pinchart@ideasonboard.com" , "mchehab@kernel.org" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , Michal Simek , "linux-media@vger.kernel.org" , "devicetree@vger.kernel.org" , "hans.verkuil@cisco.com" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Dinesh Kumar , Sandip Kothari , Joe Perches Subject: RE: [PATCH v2 2/2] media: v4l: xilinx: Add Xilinx UHD-SDI Rx Subsystem driver Thread-Topic: [PATCH v2 2/2] media: v4l: xilinx: Add Xilinx UHD-SDI Rx Subsystem driver Thread-Index: AQHWHjEiqUZz1pXhF0WpN20jJIL4b6ia3GKAgCjSvKCAAFon4A== Date: Mon, 1 Jun 2020 14:44:33 +0000 Message-ID: References: <20200429141705.18755-1-vishal.sagar@xilinx.com> <20200429141705.18755-3-vishal.sagar@xilinx.com> <368b7efb-3faf-bb71-2bd0-826f2ab031e6@xs4all.nl> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-TNEF-Correlator: authentication-results: xs4all.nl; dkim=none (message not signed) header.d=none;xs4all.nl; dmarc=none action=none header.from=xilinx.com; x-originating-ip: [149.199.50.130] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: fafeba7a-02ff-4e58-e154-08d8063a4cc8 x-ms-traffictypediagnostic: DM6PR02MB5594: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0421BF7135 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: M1I3O+xcj+A0U8rYPwTHgXV5viXES7ZLe9yF7qPDzkP7lbAKgfIYG/FsMdngNUNZYitY96qZsjgjjqZ1ylJhO+r7pvryr5yhV0/f+dTJGjq62f3DeXHjz1HSyvpvTpyIAwYfx9yTeSAy3Um06WNQ8fukD04wL0I0heocHQtpPQD5VjnkdP5BiyWCscRIxXwxldQ9r6pSVmvNlaCAI0yHIzayBCBoasJh5VJH+1SZd8aaSvV8FgYj62FvMCIxct4wUQMxWMI0QGqsM9H0ZhLUYBXD/YZ+4uAKDHtC7sAlaRkpTLMUHViFVfgJD4QxEwRObOfLeByHSGyRV+IdXuI2/wky9rWbrCkjQVuyjd2yySs= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR02MB6876.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(366004)(39860400002)(346002)(376002)(396003)(136003)(8676002)(2940100002)(7416002)(110136005)(66446008)(64756008)(316002)(7696005)(8936002)(186003)(6506007)(86362001)(26005)(53546011)(66476007)(478600001)(30864003)(55016002)(19627235002)(71200400001)(83380400001)(76116006)(2906002)(33656002)(9686003)(52536014)(66556008)(5660300002)(66946007)(921003)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: X1oGkONSf+48l9gVTXPbaAh4OqDsBs4jexRTB3SDSitHj6yKnrn2f8qNfjmtQWPdtn4zYvAYm21KcX3iBpxyZmk16/kQrddD6wcAxHo6B/IiJFx8o3P1ehl/W1AxreqcWAH9x+EYNcd7cVBt1XTuQr0ugT0cyCV1Bb983m/peFz/RUO7eAMTk2+bCon+m0cnrGI7StPFnytFh4uXyDAqIVa6DY7IEph7hitOdK7/3vPhcjrgySM1t/2zqGjJPxxk2pSbtlCf1mZ0WFQA3SBUJFePN55Z4og2qVeeCXCkjcgA2BFSqf2AqhN02/75pIAwd8/TveFdOnszNZagopefhBtW2oKfpyv9qM/1loxblo3TUJe34RJ8t3sV6/jAAq/Fpo89EJ405z+j99J4zB9RhBdJrf2UeVNpf7WKYX9Tnd0xZWn4MZXP/12uwN41rBWwrh4V/aeMqsSojVL9FeHXPdcC5g87nBAM+XM+R8n/9DZR45ey740pM9+d3T5Y6Gix Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-Network-Message-Id: fafeba7a-02ff-4e58-e154-08d8063a4cc8 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Jun 2020 14:44:33.7256 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: aPJnahJX9syio19aC+nk/rjLLHeAzKdDWSU2cthpvFC2h2GF+LT6HIqCDV7Ex98t82oouV3NsNYaKWk0wCxr6Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR02MB5594 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org UGxlYXNlIGlnbm9yZSB0aGlzIGVtYWlsIC4uIA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQo+IEZyb206IFZpc2hhbCBTYWdhcg0KPiBTZW50OiBNb25kYXksIEp1bmUgMSwgMjAyMCA4 OjEyIFBNDQo+IFRvOiBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD47IEh5dW4gS3dv biA8aHl1bmtAeGlsaW54LmNvbT47DQo+IGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNv bTsgbWNoZWhhYkBrZXJuZWwub3JnOw0KPiByb2JoK2R0QGtlcm5lbC5vcmc7IG1hcmsucnV0bGFu ZEBhcm0uY29tOyBNaWNoYWwgU2ltZWsNCj4gPG1pY2hhbHNAeGlsaW54LmNvbT47IGxpbnV4LW1l ZGlhQHZnZXIua2VybmVsLm9yZzsNCj4gZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc7IGhhbnMu dmVya3VpbEBjaXNjby5jb207IGxpbnV4LWFybS0NCj4ga2VybmVsQGxpc3RzLmluZnJhZGVhZC5v cmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IERpbmVzaCBLdW1hcg0KPiA8ZGluZXNo a0B4aWxpbnguY29tPjsgU2FuZGlwIEtvdGhhcmkgPHNhbmRpcGtAeGlsaW54LmNvbT47IEpvZSBQ ZXJjaGVzDQo+IDxqb2VAcGVyY2hlcy5jb20+DQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjIgMi8y XSBtZWRpYTogdjRsOiB4aWxpbng6IEFkZCBYaWxpbnggVUhELVNESSBSeCBTdWJzeXN0ZW0NCj4g ZHJpdmVyDQo+IA0KPiBIaSBIYW5zLA0KPiANCj4gVGhhbmtzIGZvciByZXZpZXdpbmchDQo+IA0K PiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogSGFucyBWZXJrdWlsIDxo dmVya3VpbEB4czRhbGwubmw+DQo+ID4gU2VudDogV2VkbmVzZGF5LCBNYXkgNiwgMjAyMCAzOjI1 IFBNDQo+ID4gVG86IFZpc2hhbCBTYWdhciA8dnNhZ2FyQHhpbGlueC5jb20+OyBIeXVuIEt3b24g PGh5dW5rQHhpbGlueC5jb20+Ow0KPiA+IGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNv bTsgbWNoZWhhYkBrZXJuZWwub3JnOw0KPiA+IHJvYmgrZHRAa2VybmVsLm9yZzsgbWFyay5ydXRs YW5kQGFybS5jb207IE1pY2hhbCBTaW1law0KPiA+IDxtaWNoYWxzQHhpbGlueC5jb20+OyBsaW51 eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmc7DQo+ID4gZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc7 IGhhbnMudmVya3VpbEBjaXNjby5jb207IGxpbnV4LWFybS0NCj4gPiBrZXJuZWxAbGlzdHMuaW5m cmFkZWFkLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgRGluZXNoIEt1bWFyDQo+ ID4gPGRpbmVzaGtAeGlsaW54LmNvbT47IFNhbmRpcCBLb3RoYXJpIDxzYW5kaXBrQHhpbGlueC5j b20+OyBKb2UgUGVyY2hlcw0KPiA+IDxqb2VAcGVyY2hlcy5jb20+DQo+ID4gU3ViamVjdDogUmU6 IFtQQVRDSCB2MiAyLzJdIG1lZGlhOiB2NGw6IHhpbGlueDogQWRkIFhpbGlueCBVSEQtU0RJIFJ4 DQo+IFN1YnN5c3RlbQ0KPiA+IGRyaXZlcg0KPiA+DQo+ID4gSGkgVmlzaGFsLA0KPiA+DQo+ID4g VGhhbmsgeW91IGZvciB0aGlzIHBhdGNoLg0KPiA+DQo+ID4gSSBoYXZlIHNvbWUgY29tbWVudHMg YmVsb3c6DQo+ID4NCj4gPiBPbiAyOS8wNC8yMDIwIDE2OjE3LCBWaXNoYWwgU2FnYXIgd3JvdGU6 DQo+ID4gPiBUaGUgWGlsaW54IFVIRC1TREkgUnggc3Vic3lzdGVtIHNvZnQgSVAgaXMgdXNlZCB0 byBjYXB0dXJlIG5hdGl2ZSBTREkNCj4gPiA+IHN0cmVhbXMgZnJvbSBTREkgc291cmNlcyBsaWtl IFNESSBicm9hZGNhc3QgZXF1aXBtZW50IGxpa2UgY2FtZXJhcyBhbmQNCj4gPiA+IG1peGVycy4g VGhpcyBibG9jayBvdXRwdXRzIGVpdGhlciBuYXRpdmUgU0RJLCBuYXRpdmUgdmlkZW8gb3INCj4g PiA+IEFYSTQtU3RyZWFtIGNvbXBsaWFudCBkYXRhIHN0cmVhbSBmb3IgZnVydGhlciBwcm9jZXNz aW5nLiBQbGVhc2UgcmVmZXINCj4gPiA+IHRvIFBHMjkwIGZvciBkZXRhaWxzLg0KPiA+ID4NCj4g PiA+IFRoZSBkcml2ZXIgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIElQIHRvIGFkZCBmcmFtZXIs IHNlYXJjaCBmb3INCj4gPiA+IHNwZWNpZmljIG1vZGVzLCBnZXQgdGhlIGRldGVjdGVkIG1vZGUs IHN0cmVhbSBwYXJhbWV0ZXJzLCBlcnJvcnMsIGV0Yy4NCj4gPiA+IEl0IGFsc28gZ2VuZXJhdGVz IGV2ZW50cyBmb3IgdmlkZW8gbG9jay91bmxvY2ssIGJyaWRnZSBvdmVyL3VuZGVyIGZsb3cuDQo+ ID4gPg0KPiA+ID4gVGhlIGRyaXZlciBzdXBwb3J0cyAxMC8xMiBicGMgWVVWIDQyMiBtZWRpYSBi dXMgZm9ybWF0IGN1cnJlbnRseS4gSXQgYWxzbw0KPiA+ID4gZGVjb2RlcyB0aGUgc3RyZWFtIHBh cmFtZXRlcnMgYmFzZWQgb24gdGhlIFNUMzUyIHBhY2tldCBlbWJlZGRlZCBpbg0KPiB0aGUNCj4g PiA+IHN0cmVhbS4gSW4gY2FzZSB0aGUgU1QzNTIgcGFja2V0IGlzbid0IHByZXNlbnQgaW4gdGhl IHN0cmVhbSwgdGhlIGNvcmUncw0KPiA+ID4gZGV0ZWN0ZWQgcHJvcGVydGllcyBhcmUgdXNlZCB0 byBzZXQgc3RyZWFtIHByb3BlcnRpZXMuDQo+ID4gPg0KPiA+ID4gVGhlIGRyaXZlciBjdXJyZW50 bHkgc3VwcG9ydHMgb25seSB0aGUgQVhJNC1TdHJlYW0gSVAgY29uZmlndXJhdGlvbi4NCj4gPiA+ DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBWaXNoYWwgU2FnYXIgPHZpc2hhbC5zYWdhckB4aWxpbngu Y29tPg0KPiA+ID4gLS0tDQo+ID4gPiB2Mg0KPiA+ID4gLSBBZGRlZCBEViB0aW1pbmcgc3VwcG9y dCBiYXNlZCBvbiBIYW5zIFZlcmt1aWzFmyBmZWVkYmFjaw0KPiA+ID4gLSBNb3JlIGRvY3VtZW50 YXRpb24gdG8gY3VzdG9tIHY0bCBjb250cm9scyBhbmQgZXZlbnRzDQo+ID4gPiAtIEZpeGVkIEh5 dW7FmyBjb21tZW50cw0KPiA+ID4gLSBBZGRlZCBtYWNybyBmb3IgbWFza2luZyBhbmQgc2hpZnRp bmcgYXMgcGVyIEpvZSBQZXJjaGVzIGNvbW1lbnRzDQo+ID4gPiAtIFVwZGF0ZWQgdG8gbGF0ZXN0 IGFzIHBlciBYaWxpbnggZ2l0aHViIHJlcG8gZHJpdmVyIGxpa2UNCj4gPiA+ICAgYWRkaW5nIG5l dyBEViB0aW1pbmdzIG5vdCBpbiBtYWlubGluZSB5ZXQgdXB0aWxsIDAzLzIxLzIwDQo+ID4gPg0K PiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcgICAgICAgICB8ICAg MTEgKw0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L01ha2VmaWxlICAgICAg ICB8ICAgIDEgKw0KPiA+ID4gIC4uLi9tZWRpYS9wbGF0Zm9ybS94aWxpbngveGlsaW54LXNkaXJ4 c3MuYyAgICB8IDIxNjIgKysrKysrKysrKysrKysrKysNCj4gPiA+ICBpbmNsdWRlL3VhcGkvbGlu dXgveGlsaW54LXNkaXJ4c3MuaCAgICAgICAgICAgfCAgMTc5ICsrDQo+ID4gPiAgaW5jbHVkZS91 YXBpL2xpbnV4L3hpbGlueC12NGwyLWNvbnRyb2xzLmggICAgIHwgICA2NyArDQo+ID4gPiAgNSBm aWxlcyBjaGFuZ2VkLCAyNDIwIGluc2VydGlvbnMoKykNCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngveGlsaW54LXNkaXJ4c3MuYw0KPiA+ID4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXNkaXJ4c3MuaA0K PiA+ID4NCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9L Y29uZmlnDQo+ID4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9LY29uZmlnDQo+ID4g PiBpbmRleCAwMWM5NmZiNjY0MTQuLjc3MDkxMzE4YTljOSAxMDA2NDQNCj4gPiA+IC0tLSBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcNCj4gPiA+ICsrKyBiL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcNCj4gPiA+IEBAIC0xMiw2ICsxMiwxNyBAQCBj b25maWcgVklERU9fWElMSU5YDQo+ID4gPg0KPiA+ID4gIGlmIFZJREVPX1hJTElOWA0KPiA+ID4N Cj4gPiA+ICtjb25maWcgVklERU9fWElMSU5YX1NESVJYU1MNCj4gPiA+ICsJdHJpc3RhdGUgIlhp bGlueCBVSEQgU0RJIFJ4IFN1YnN5c3RlbSINCj4gPiA+ICsJaGVscA0KPiA+ID4gKwkgIERyaXZl ciBmb3IgWGlsaW54IFVIRC1TREkgUnggU3Vic3lzdGVtLiBUaGlzIGlzIGEgVjRMIHN1Yi1kZXZp Y2UNCj4gPiA+ICsJICBiYXNlZCBkcml2ZXIgdGhhdCB0YWtlcyBpbnB1dCBmcm9tIGEgU0RJIHNv dXJjZSBsaWtlIFNESSBjYW1lcmEgYW5kDQo+ID4gPiArCSAgY29udmVydHMgaXQgaW50byBhbiBB WEk0LVN0cmVhbS4gVGhlIHN1YnN5c3RlbSBjb21wcmlzZXMgb2YgYSBTTVBURQ0KPiA+ID4gKwkg IFVIRC1TREkgUnggY29yZSwgYSBTREkgUnggdG8gTmF0aXZlIFZpZGVvIGJyaWRnZSBhbmQgYSBW aWRlbyBJbiB0bw0KPiA+ID4gKwkgIEFYSTQtU3RyZWFtIGJyaWRnZS4gVGhlIGRyaXZlciBpcyB1 c2VkIHRvIHNldCBkaWZmZXJlbnQgc3RyZWFtDQo+ID4gPiArCSAgZGV0ZWN0aW9uIG1vZGVzIGFu ZCBpZGVudGlmeSBzdHJlYW0gcHJvcGVydGllcyB0byBwcm9wZXJseSBjb25maWd1cmUNCj4gPiA+ ICsJICBkb3duc3RyZWFtLg0KPiA+ID4gKw0KPiA+ID4gIGNvbmZpZyBWSURFT19YSUxJTlhfVFBH DQo+ID4gPiAgCXRyaXN0YXRlICJYaWxpbnggVmlkZW8gVGVzdCBQYXR0ZXJuIEdlbmVyYXRvciIN Cj4gPiA+ICAJZGVwZW5kcyBvbiBWSURFT19YSUxJTlgNCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9NYWtlZmlsZQ0KPiA+IGIvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS94aWxpbngvTWFrZWZpbGUNCj4gPiA+IGluZGV4IDRjZGMwYjFlYzdhNS4uNmMzNzVm MDNmNTg3IDEwMDY0NA0KPiA+ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngv TWFrZWZpbGUNCj4gPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L01ha2Vm aWxlDQo+ID4gPiBAQCAtMiw2ICsyLDcgQEANCj4gPiA+DQo+ID4gPiAgeGlsaW54LXZpZGVvLW9i anMgKz0geGlsaW54LWRtYS5vIHhpbGlueC12aXAubyB4aWxpbngtdmlwcC5vDQo+ID4gPg0KPiA+ ID4gK29iai0kKENPTkZJR19WSURFT19YSUxJTlhfU0RJUlhTUykgKz0geGlsaW54LXNkaXJ4c3Mu bw0KPiA+ID4gIG9iai0kKENPTkZJR19WSURFT19YSUxJTlgpICs9IHhpbGlueC12aWRlby5vDQo+ ID4gPiAgb2JqLSQoQ09ORklHX1ZJREVPX1hJTElOWF9UUEcpICs9IHhpbGlueC10cGcubw0KPiA+ ID4gIG9iai0kKENPTkZJR19WSURFT19YSUxJTlhfVlRDKSArPSB4aWxpbngtdnRjLm8NCj4gPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC94aWxpbngtc2Rpcnhz cy5jDQo+ID4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC94aWxpbngtc2Rpcnhzcy5j DQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5j NTM2ZWEzYWFhMGQNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0veGlsaW54L3hpbGlueC1zZGlyeHNzLmMNCj4gPiA+IEBAIC0wLDAgKzEsMjE2 MiBAQA0KPiA+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ID4gPiAr LyoNCj4gPiA+ICsgKiBEcml2ZXIgZm9yIFhpbGlueCBTREkgUnggU3Vic3lzdGVtDQo+ID4gPiAr ICoNCj4gPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDIwIFhpbGlueCwgSW5jLg0KPiA+ ID4gKyAqDQo+ID4gPiArICogQ29udGFjdHM6IFZpc2hhbCBTYWdhciA8dmlzaGFsLnNhZ2FyQHhp bGlueC5jb20+DQo+ID4gPiArICoNCj4gPiA+ICsgKi8NCj4gPiA+ICsNCj4gPiA+ICsjaW5jbHVk ZSA8ZHQtYmluZGluZ3MvbWVkaWEveGlsaW54LXZpcC5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51 eC9iaXRvcHMuaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4NCj4gPiA+ICsj aW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ ID4gPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9p bnRlcnJ1cHQuaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4NCj4gPiA+ICsjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEu aD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gPiArI2lu Y2x1ZGUgPGxpbnV4L3BtLmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gPiA+ ICsjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvc3Bp bmxvY2tfdHlwZXMuaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCj4gPiA+ICsj aW5jbHVkZSA8bGludXgvdjRsMi1kdi10aW1pbmdzLmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4 L3Y0bDItc3ViZGV2Lmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3hpbGlueC1zZGlyeHNzLmg+ DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3hpbGlueC12NGwyLWNvbnRyb2xzLmg+DQo+ID4gPiAr I2luY2x1ZGUgPG1lZGlhL21lZGlhLWVudGl0eS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxtZWRpYS92 NGwyLWNvbW1vbi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+DQo+ID4g PiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4NCj4gPiA+ICsjaW5jbHVkZSA8bWVkaWEv djRsMi1md25vZGUuaD4NCj4gPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4NCj4g PiA+ICsjaW5jbHVkZSAieGlsaW54LXZpcC5oIg0KPiA+ID4gKw0KPiA+ID4gKy8qDQo+ID4gPiAr ICogU0RJIFJ4IHJlZ2lzdGVyIG1hcCwgYml0bWFzayBhbmQgb2Zmc2V0cw0KPiA+ID4gKyAqLw0K PiA+ID4gKyNkZWZpbmUgWFNESVJYX1JTVF9DVFJMX1JFRwkJMHgwMA0KPiA+ID4gKyNkZWZpbmUg WFNESVJYX01ETF9DVFJMX1JFRwkJMHgwNA0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX0dMQkxfSUVS X1JFRwkJMHgwQw0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX0lTUl9SRUcJCQkweDEwDQo+ID4gPiAr I2RlZmluZSBYU0RJUlhfSUVSX1JFRwkJCTB4MTQNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1 Ml9WQUxJRF9SRUcJCTB4MTgNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9EUzFfUkVHCQkw eDFDDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfU1QzNTJfRFMzX1JFRwkJMHgyMA0KPiA+ID4gKyNk ZWZpbmUgWFNESVJYX1NUMzUyX0RTNV9SRUcJCTB4MjQNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9T VDM1Ml9EUzdfUkVHCQkweDI4DQo+ID4gPiArI2RlZmluZSBYU0RJUlhfU1QzNTJfRFM5X1JFRwkJ MHgyQw0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTMTFfUkVHCQkweDMwDQo+ID4gPiAr I2RlZmluZSBYU0RJUlhfU1QzNTJfRFMxM19SRUcJCTB4MzQNCj4gPiA+ICsjZGVmaW5lIFhTRElS WF9TVDM1Ml9EUzE1X1JFRwkJMHgzOA0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX1ZFUlNJT05fUkVH CQkweDNDDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfU1NfQ09ORklHX1JFRwkJMHg0MA0KPiA+ID4g KyNkZWZpbmUgWFNESVJYX01PREVfREVUX1NUQVRfUkVHCTB4NDQNCj4gPiA+ICsjZGVmaW5lIFhT RElSWF9UU19ERVRfU1RBVF9SRUcJCTB4NDgNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfU1RB VF9SRUcJCTB4NEMNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0VOX1JFRwkweDUw DQo+ID4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9SRUcJCTB4NTQNCj4gPiA+ICsjZGVm aW5lIFhTRElSWF9DUkNfRVJSQ05UX1JFRwkJMHg1OA0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX1ZJ RF9MT0NLX1dJTkRPV19SRUcJMHg1Qw0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX1NCX1JYX1NUU19S RUcJCTB4NjANCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9TU19FTl9N QVNLCQkJQklUKDApDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfU1JTVF9NQVNLCQkJ QklUKDEpDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfUlNUX0NSQ19FUlJDTlRfTUFT SwkJQklUKDIpDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfUlNUX0VESF9FUlJDTlRf TUFTSwkJQklUKDMpDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfU0RJUlhfQlJJREdF X0VOQl9NQVNLCQlCSVQoOCkNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9WSURJTl9B WEk0U19NT0RfRU5CX01BU0sJQklUKDkpDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxf QlJJREdFX0NIX0ZNVF9PRkZTRVQJCTEwDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxf QlJJREdFX0NIX0ZNVF9NQVNLDQo+IAlHRU5NQVNLKDEyLA0KPiA+IDEwKQ0KPiA+ID4gKyNkZWZp bmUgWFNESVJYX1JTVF9DVFJMX0JSSURHRV9DSF9GTVRfWVVWNDQ0CQkxDQo+ID4gPiArDQo+ID4g PiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfRlJNX0VOX01BU0sJCUJJVCg0KQ0KPiA+ID4gKyNk ZWZpbmUgWFNESVJYX01ETF9DVFJMX01PREVfREVUX0VOX01BU0sJQklUKDUpDQo+ID4gPiArI2Rl ZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV9IRF9FTl9NQVNLCQlCSVQoOCkNCj4gPiA+ICsjZGVm aW5lIFhTRElSWF9NRExfQ1RSTF9NT0RFX1NEX0VOX01BU0sJCUJJVCg5KQ0KPiA+ID4gKyNkZWZp bmUgWFNESVJYX01ETF9DVFJMX01PREVfM0dfRU5fTUFTSwkJQklUKDEwKQ0KPiA+ID4gKyNkZWZp bmUgWFNESVJYX01ETF9DVFJMX01PREVfNkdfRU5fTUFTSwkJQklUKDExKQ0KPiA+ID4gKyNkZWZp bmUgWFNESVJYX01ETF9DVFJMX01PREVfMTJHSV9FTl9NQVNLCUJJVCgxMikNCj4gPiA+ICsjZGVm aW5lIFhTRElSWF9NRExfQ1RSTF9NT0RFXzEyR0ZfRU5fTUFTSwlCSVQoMTMpDQo+ID4gPiArI2Rl ZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV9BVVRPX0RFVF9NQVNLCUdFTk1BU0soMTMsDQo+ID4g OCkNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9GT1JDRURfTU9ERV9P RkZTRVQJMTYNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9GT1JDRURfTU9ERV9NQVNL CUdFTk1BU0soMTgsDQo+IDE2KQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX0dMQkxf SU5UUl9FTl9NQVNLCUJJVCgwKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX0lOVFJf VklETE9DS19NQVNLCUJJVCgwKQ0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX0lOVFJfVklEVU5MT0NL X01BU0sJQklUKDEpDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfSU5UUl9PVkVSRkxPV19NQVNLCUJJ VCg5KQ0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX0lOVFJfVU5ERVJGTE9XX01BU0sJQklUKDEwKQ0K PiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX0lOVFJfQUxMX01BU0sJKFhTRElSWF9JTlRS X1ZJRExPQ0tfTUFTSyB8XA0KPiA+ID4gKwkJCQlYU0RJUlhfSU5UUl9WSURVTkxPQ0tfTUFTSyB8 XA0KPiA+ID4gKwkJCQlYU0RJUlhfSU5UUl9PVkVSRkxPV19NQVNLIHxcDQo+ID4gPiArCQkJCVhT RElSWF9JTlRSX1VOREVSRkxPV19NQVNLKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgWFNESVJY X1NUMzUyX1ZBTElEX0RTMV9NQVNLCUJJVCgwKQ0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUy X1ZBTElEX0RTM19NQVNLCUJJVCgxKQ0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElE X0RTNV9NQVNLCUJJVCgyKQ0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElEX0RTN19N QVNLCUJJVCgzKQ0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElEX0RTOV9NQVNLCUJJ VCg0KQ0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElEX0RTMTFfTUFTSwlCSVQoNSkN Cj4gPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9WQUxJRF9EUzEzX01BU0sJQklUKDYpDQo+ID4g PiArI2RlZmluZSBYU0RJUlhfU1QzNTJfVkFMSURfRFMxNV9NQVNLCUJJVCg3KQ0KPiA+ID4gKw0K PiA+ID4gKyNkZWZpbmUgWFNESVJYX01PREVfREVUX1NUQVRfUlhfTU9ERV9NQVNLCUdFTk1BU0so MiwNCj4gMCkNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9NT0RFX0RFVF9TVEFUX01PREVfTE9DS19N QVNLCUJJVCgzKQ0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX01PREVfREVUX1NUQVRfQUNUX1NUUkVB TV9NQVNLCUdFTk1BU0soNiwNCj4gPiA0KQ0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX01PREVfREVU X1NUQVRfQUNUX1NUUkVBTV9PRkZTRVQJNA0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX01PREVfREVU X1NUQVRfTFZMQl8zR19NQVNLCUJJVCg3KQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgWFNESVJY X1RTX0RFVF9TVEFUX0xPQ0tFRF9NQVNLCQlCSVQoMCkNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9U U19ERVRfU1RBVF9TQ0FOX01BU0sJCUJJVCgxKQ0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX1RTX0RF VF9TVEFUX1NDQU5fT0ZGU0VUCQkoMSkNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RB VF9GQU1JTFlfTUFTSwkJR0VOTUFTSyg3LA0KPiA+IDQpDQo+ID4gPiArI2RlZmluZSBYU0RJUlhf VFNfREVUX1NUQVRfRkFNSUxZX09GRlNFVAkoNCkNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9UU19E RVRfU1RBVF9SQVRFX01BU0sJCUdFTk1BU0soMTEsIDgpDQo+ID4gPiArI2RlZmluZSBYU0RJUlhf VFNfREVUX1NUQVRfUkFURV9PRkZTRVQJCSg4KQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgWFNE SVJYX1RTX0RFVF9TVEFUX1JBVEVfTk9ORQkJMHgwDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfVFNf REVUX1NUQVRfUkFURV8yM185OEhaCQkweDINCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRf U1RBVF9SQVRFXzI0SFoJCTB4Mw0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX1RTX0RFVF9TVEFUX1JB VEVfNDdfOTVIWgkJMHg0DQo+ID4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8y NUhaCQkweDUNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI5Xzk3SFoJ CTB4Ng0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfMzBIWgkJMHg3DQo+ ID4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV80OEhaCQkweDgNCj4gPiA+ICsj ZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzUwSFoJCTB4OQ0KPiA+ID4gKyNkZWZpbmUg WFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfNTlfOTRIWgkJMHhBDQo+ID4gPiArI2RlZmluZSBYU0RJ UlhfVFNfREVUX1NUQVRfUkFURV82MEhaCQkweEINCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhT RElSWF9FREhfU1RBVF9FREhfQVBfTUFTSwlCSVQoMCkNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9F REhfU1RBVF9FREhfRkZfTUFTSwlCSVQoMSkNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfU1RB VF9FREhfQU5DX01BU0sJQklUKDIpDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfRURIX1NUQVRfQVBf RkxBR19NQVNLCUdFTk1BU0soOCwgNCkNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfU1RBVF9G Rl9GTEFHX01BU0sJR0VOTUFTSygxMywgOSkNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfU1RB VF9BTkNfRkxBR19NQVNLCUdFTk1BU0soMTgsIDE0KQ0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX0VE SF9TVEFUX1BLVF9GTEFHX01BU0sJR0VOTUFTSygyMiwgMTkpDQo+ID4gPiArDQo+ID4gPiArI2Rl ZmluZSBYU0RJUlhfRURIX0VSUkNOVF9DT1VOVF9NQVNLCUdFTk1BU0soMTUsIDApDQo+ID4gPiAr DQo+ID4gPiArI2RlZmluZSBYU0RJUlhfQ1JDX0VSUkNOVF9DT1VOVF9NQVNLCUdFTk1BU0soMzEs IDE2KQ0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX0NSQ19FUlJDTlRfRFNfQ1JDX01BU0sJR0VOTUFT SygxNSwgMCkNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9WRVJTSU9OX1JFVl9NQVNL CQlHRU5NQVNLKDcsIDApDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfVkVSU0lPTl9QQVRDSElEX01B U0sJR0VOTUFTSygxMSwgOCkNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9WRVJTSU9OX1ZFUl9SRVZf TUFTSwlHRU5NQVNLKDE1LCAxMikNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9WRVJTSU9OX1ZFUl9N SU5fTUFTSwlHRU5NQVNLKDIzLCAxNikNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9WRVJTSU9OX1ZF Ul9NQUpfTUFTSwlHRU5NQVNLKDMxLCAyNCkNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhTRElS WF9TU19DT05GSUdfRURIX0lOQ0xVREVEX01BU0sJCUJJVCgxKQ0KPiA+ID4gKw0KPiA+ID4gKyNk ZWZpbmUgWFNESVJYX1NUQVRfU0JfUlhfVERBVEFfQ0hBTkdFX0RPTkVfTUFTSwlCSVQoMCkNCj4g PiA+ICsjZGVmaW5lIFhTRElSWF9TVEFUX1NCX1JYX1REQVRBX0NIQU5HRV9GQUlMX01BU0sJQklU KDEpDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfU1RBVF9TQl9SWF9UREFUQV9HVF9SRVNFVERPTkVf TUFTSwlCSVQoMikNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9TVEFUX1NCX1JYX1REQVRBX0dUX0JJ VFJBVEVfTUFTSwkJQklUKDMpDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfREVGQVVM VF9XSURUSAkoMTkyMCkNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9ERUZBVUxUX0hFSUdIVAkoMTA4 MCkNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9NQVhfU1RSX0xFTkdUSAkxNg0KPiA+ ID4gKw0KPiA+ID4gKyNkZWZpbmUgWFNESVJYU1NfU0RJX1NURF8zRwkJMA0KPiA+ID4gKyNkZWZp bmUgWFNESVJYU1NfU0RJX1NURF82RwkJMQ0KPiA+ID4gKyNkZWZpbmUgWFNESVJYU1NfU0RJX1NU RF8xMkdfOERTCTINCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9ERUZBVUxUX1ZJREVP X0xPQ0tfV0lORE9XCTB4MzAwMA0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX01PREVf SERfTUFTSwkweDANCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9NT0RFX1NEX01BU0sJMHgxDQo+ID4g PiArI2RlZmluZSBYU0RJUlhfTU9ERV8zR19NQVNLCTB4Mg0KPiA+ID4gKyNkZWZpbmUgWFNESVJY X01PREVfNkdfTUFTSwkweDQNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9NT0RFXzEyR0lfTUFTSwkw eDUNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9NT0RFXzEyR0ZfTUFTSwkweDYNCj4gPiA+ICsNCj4g PiA+ICsvKiBNYXhpbXVtIG51bWJlciBvZiBldmVudHMgcGVyIGZpbGUgaGFuZGxlLiAqLw0KPiA+ ID4gKyNkZWZpbmUgWFNESVJYX01BWF9FVkVOVFMJKDEyOCkNCj4gPiA+ICsNCj4gPiA+ICsvKiBT VDM1MiByZWxhdGVkIG1hY3JvcyAqLw0KPiA+ID4gKyNkZWZpbmUgWFNUMzUyX1BBWUxPQURfQllU RTFfTUFTSwkweEZGDQo+ID4gPiArI2RlZmluZSBYU1QzNTJfUEFZTE9BRF9CWVRFMV9PRkZTRVQJ MA0KPiA+ID4gKyNkZWZpbmUgWFNUMzUyX1BBWUxPQURfQllURTJfT0ZGU0VUCTgNCj4gPiA+ICsj ZGVmaW5lIFhTVDM1Ml9QQVlMT0FEX0JZVEUzX09GRlNFVAkxNg0KPiA+ID4gKyNkZWZpbmUgWFNU MzUyX1BBWUxPQURfQllURTRfT0ZGU0VUCTI0DQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBYU1Qz NTJfQllURTFfU1QyOTJfMXg3MjBMXzFfNUcJCTB4ODQNCj4gPiA+ICsjZGVmaW5lIFhTVDM1Ml9C WVRFMV9TVDI5Ml8xeDEwODBMXzFfNUcJCTB4ODUNCj4gPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRF MV9TVDQyNV8yMDA4Xzc1MExfM0dCCTB4ODgNCj4gPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMV9T VDQyNV8yMDA4XzExMjVMXzNHQQkweDg5DQo+ID4gPiArI2RlZmluZSBYU1QzNTJfQllURTFfU1Qz NzJfRExfM0dCCQkweDhBDQo+ID4gPiArI2RlZmluZSBYU1QzNTJfQllURTFfU1QzNzJfMng3MjBM XzNHQgkJMHg4Qg0KPiA+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUxX1NUMzcyXzJ4MTA4MExfM0dC CQkweDhDDQo+ID4gPiArI2RlZmluZSBYU1QzNTJfQllURTFfU1QyMDgxXzEwXzIxNjBMXzZHCQkw eEMwDQo+ID4gPiArI2RlZmluZSBYU1QzNTJfQllURTFfU1QyMDgxXzEwXzJfMTA4MExfNkcJMHhD MQ0KPiA+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUxX1NUMjA4MV8xMF9ETF8yMTYwTF82RwkweEMy DQo+ID4gPiArI2RlZmluZSBYU1QzNTJfQllURTFfU1QyMDgyXzEwXzIxNjBMXzEyRwkweENFDQo+ ID4gPiArDQo+ID4gPiArI2RlZmluZSBYU1QzNTJfQllURTJfVFNfVFlQRV9NQVNLCQlCSVQoMTUp DQo+ID4gPiArI2RlZmluZSBYU1QzNTJfQllURTJfVFNfVFlQRV9PRkZTRVQJCTE1DQo+ID4gPiAr I2RlZmluZSBYU1QzNTJfQllURTJfUElDX1RZUEVfTUFTSwkJQklUKDE0KQ0KPiA+ID4gKyNkZWZp bmUgWFNUMzUyX0JZVEUyX1BJQ19UWVBFX09GRlNFVAkJMTQNCj4gPiA+ICsjZGVmaW5lIFhTVDM1 Ml9CWVRFMl9UU19QSUNfVFlQRV9JTlRFUkxBQ0VECTANCj4gPiA+ICsjZGVmaW5lIFhTVDM1Ml9C WVRFMl9UU19QSUNfVFlQRV9QUk9HUkVTU0lWRQkxDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBY U1QzNTJfQllURTJfRlBTX01BU0sJCQkweEYNCj4gPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9G UFNfT0ZGU0VUCQkJOA0KPiA+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU18yNEYJCQkweDIN Cj4gPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfMjQJCQkweDMNCj4gPiA+ICsjZGVmaW5l IFhTVDM1Ml9CWVRFMl9GUFNfNDhGCQkJMHg0DQo+ID4gPiArI2RlZmluZSBYU1QzNTJfQllURTJf RlBTXzI1CQkJMHg1DQo+ID4gPiArI2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzMwRgkJCTB4Ng0K PiA+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU18zMAkJCTB4Nw0KPiA+ID4gKyNkZWZpbmUg WFNUMzUyX0JZVEUyX0ZQU180OAkJCTB4OA0KPiA+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQ U181MAkJCTB4OQ0KPiA+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU182MEYJCQkweEENCj4g PiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfNjAJCQkweEINCj4gPiA+ICsvKiBUYWJsZSA0 IFNUIDIwODEtMTA6MjAxNSAqLw0KPiA+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU185NgkJ CTB4Qw0KPiA+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU18xMDAJCQkweEQNCj4gPiA+ICsj ZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfMTIwCQkJMHhFDQo+ID4gPiArI2RlZmluZSBYU1QzNTJf QllURTJfRlBTXzEyMEYJCQkweEYNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRF M19BQ1RfTFVNQV9DT1VOVF9NQVNLCUJJVCgyMikNCj4gPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRF M19BQ1RfTFVNQV9DT1VOVF9PRkZTRVQJMjINCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhTVDM1 Ml9CWVRFM19DT0xPUl9GT1JNQVRfTUFTSwkJR0VOTUFTSygxOSwNCj4gPiAxNikNCj4gPiA+ICsj ZGVmaW5lIFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfT0ZGU0VUCTE2DQo+ID4gPiArI2RlZmlu ZSBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFUXzQyMgkJMHgwDQo+ID4gPiArI2RlZmluZSBYU1Qz NTJfQllURTNfQ09MT1JfRk9STUFUX1lVVjQ0NAkweDENCj4gPiA+ICsjZGVmaW5lIFhTVDM1Ml9C WVRFM19DT0xPUl9GT1JNQVRfNDIwCQkweDMNCj4gPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFM19D T0xPUl9GT1JNQVRfR0JSCQkweDINCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRF NF9CSVRfREVQVEhfTUFTSwkJR0VOTUFTSygyNSwgMjQpDQo+ID4gPiArI2RlZmluZSBYU1QzNTJf QllURTRfQklUX0RFUFRIX09GRlNFVAkJMjQNCj4gPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFNF9C SVRfREVQVEhfMTAJCTB4MQ0KPiA+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEU0X0JJVF9ERVBUSF8x MgkJMHgyDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBDTEtfSU5UCQkxNDg1MDAwMDBVTA0KPiA+ ID4gKw0KPiA+ID4gKyNkZWZpbmUgcnNoaWZ0X2FuZF9tYXNrKHZhbCwgdHlwZSkgXA0KPiA+ID4g KwkJKCgodmFsKSA+PiB0eXBlIyNfT0ZGU0VUKSAmIHR5cGUjI19NQVNLKQ0KPiA+ID4gKw0KPiA+ ID4gKyNkZWZpbmUgbWFza19hbmRfcnNoaWZ0KHZhbCwgdHlwZSkgXA0KPiA+ID4gKwkJKCgodmFs KSAmIHR5cGUjI19NQVNLKSA+PiB0eXBlIyNfT0ZGU0VUKQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0K PiA+ID4gKyAqIGVudW0gc2RpX2ZhbWlseV9lbmMgLSBTREkgVHJhbnNwb3J0IFZpZGVvIEZvcm1h dCBEZXRlY3RlZCB3aXRoIEFjdGl2ZQ0KPiA+IFBpeGVscw0KPiA+ID4gKyAqIEBYU0RJUlhfU01Q VEVfU1RfMjc0OiBTTVBURSBTVCAyNzQgZGV0ZWN0ZWQgd2l0aCBBUCAxOTIweDEwODANCj4gPiA+ ICsgKiBAWFNESVJYX1NNUFRFX1NUXzI5NjogU01QVEUgU1QgMjk2IGRldGVjdGVkIHdpdGggQVAg MTI4MHg3MjANCj4gPiA+ICsgKiBAWFNESVJYX1NNUFRFX1NUXzIwNDhfMjogU01QVEUgU1QgMjA0 OC0yIGRldGVjdGVkIHdpdGggQVANCj4gPiAyMDQ4eDEwODANCj4gPiA+ICsgKiBAWFNESVJYX1NN UFRFX1NUXzI5NTogU01QVEUgU1QgMjk1IGRldGVjdGVkIHdpdGggQVAgMTkyMHgxMDgwDQo+ID4g PiArICogQFhTRElSWF9OVFNDOiBOVFNDIGVuY29kaW5nIGRldGVjdGVkIHdpdGggQVAgNzIweDQ4 Ng0KPiA+ID4gKyAqIEBYU0RJUlhfUEFMOiBQQUwgZW5jb2RpbmcgZGV0ZWN0ZWQgd2l0aCBBUCA3 MjB4NTc2DQo+ID4gPiArICogQFhTRElSWF9UU19VTktOT1dOOiBVbmtub3duIFNNUFRFIFRyYW5z cG9ydCBmYW1pbHkgdHlwZQ0KPiA+ID4gKyAqLw0KPiA+ID4gK2VudW0gc2RpX2ZhbWlseV9lbmMg ew0KPiA+ID4gKwlYU0RJUlhfU01QVEVfU1RfMjc0CT0gMCwNCj4gPiA+ICsJWFNESVJYX1NNUFRF X1NUXzI5Ngk9IDEsDQo+ID4gPiArCVhTRElSWF9TTVBURV9TVF8yMDQ4XzIJPSAyLA0KPiA+ID4g KwlYU0RJUlhfU01QVEVfU1RfMjk1CT0gMywNCj4gPiA+ICsJWFNESVJYX05UU0MJCT0gOCwNCj4g PiA+ICsJWFNESVJYX1BBTAkJPSA5LA0KPiA+ID4gKwlYU0RJUlhfVFNfVU5LTk9XTgk9IDE1DQo+ ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgKiBzdHJ1Y3QgeHNkaXJ4c3Nf Y29yZSAtIENvcmUgY29uZmlndXJhdGlvbiBTREkgUnggU3Vic3lzdGVtIGRldmljZQ0KPiA+IHN0 cnVjdHVyZQ0KPiA+ID4gKyAqIEBkZXY6IFBsYXRmb3JtIHN0cnVjdHVyZQ0KPiA+ID4gKyAqIEBp b21lbTogQmFzZSBhZGRyZXNzIG9mIHN1YnN5c3RlbQ0KPiA+ID4gKyAqIEBpcnE6IHJlcXVlc3Rl ZCBpcnEgbnVtYmVyDQo+ID4gPiArICogQGluY2x1ZGVfZWRoOiBFREggcHJvY2Vzc29yIHByZXNl bmNlDQo+ID4gPiArICogQG1vZGU6IDNHLzZHLzEyRyBtb2RlDQo+ID4gPiArICogQGNsa3M6IGFy cmF5IG9mIGNsb2Nrcw0KPiA+ID4gKyAqIEBudW1fY2xrczogbnVtYmVyIG9mIGNsb2Nrcw0KPiA+ ID4gKyAqIEBicGM6IEJpdHMgcGVyIGNvbXBvbmVudCwgY2FuIGJlIDEwIG9yIDEyDQo+ID4gPiAr ICovDQo+ID4gPiArc3RydWN0IHhzZGlyeHNzX2NvcmUgew0KPiA+ID4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXY7DQo+ID4gPiArCXZvaWQgX19pb21lbSAqaW9tZW07DQo+ID4gPiArCWludCBpcnE7DQo+ ID4gPiArCWJvb2wgaW5jbHVkZV9lZGg7DQo+ID4gPiArCWludCBtb2RlOw0KPiA+ID4gKwlzdHJ1 Y3QgY2xrX2J1bGtfZGF0YSAqY2xrczsNCj4gPiA+ICsJaW50IG51bV9jbGtzOw0KPiA+ID4gKwl1 MzIgYnBjOw0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogc3RydWN0 IHhzZGlyeHNzX3N0YXRlIC0gU0RJIFJ4IFN1YnN5c3RlbSBkZXZpY2Ugc3RydWN0dXJlDQo+ID4g PiArICogQGNvcmU6IENvcmUgc3RydWN0dXJlIGZvciBNSVBJIFNESSBSeCBTdWJzeXN0ZW0NCj4g PiA+ICsgKiBAc3ViZGV2OiBUaGUgdjRsMiBzdWJkZXYgc3RydWN0dXJlDQo+ID4gPiArICogQGN0 cmxfaGFuZGxlcjogY29udHJvbCBoYW5kbGVyDQo+ID4gPiArICogQGV2ZW50OiBIb2xkcyB0aGUg dmlkZW8gdW5sb2NrIGV2ZW50DQo+ID4gPiArICogQGZvcm1hdDogQWN0aXZlIFY0TDIgZm9ybWF0 IG9uIHNvdXJjZSBwYWQNCj4gPiA+ICsgKiBAZGVmYXVsdF9mb3JtYXQ6IGRlZmF1bHQgVjRMMiBt ZWRpYSBidXMgZm9ybWF0DQo+ID4gPiArICogQGZyYW1lX2ludGVydmFsOiBDYXB0dXJlcyB0aGUg ZnJhbWUgcmF0ZQ0KPiA+ID4gKyAqIEBwYWQ6IHNvdXJjZSBtZWRpYSBwYWQNCj4gPiA+ICsgKiBA dmlkbG9ja3dpbjogVmlkZW8gbG9jayB3aW5kb3cgdmFsdWUgc2V0IGJ5IGNvbnRyb2wNCj4gPiA+ ICsgKiBAZWRobWFzazogRURIIG1hc2sgc2V0IGJ5IGNvbnRyb2wNCj4gPiA+ICsgKiBAc2VhcmNo bWFzazogU2VhcmNoIG1hc2sgc2V0IGJ5IGNvbnRyb2wNCj4gPiA+ICsgKiBAc3RyZWFtaW5nOiBG bGFnIGZvciBzdG9yaW5nIHN0cmVhbWluZyBzdGF0ZQ0KPiA+ID4gKyAqIEB2aWRsb2NrZWQ6IEZs YWcgaW5kaWNhdGluZyBTREkgUnggaGFzIGxvY2tlZCBvbnRvIHZpZGVvIHN0cmVhbQ0KPiA+ID4g KyAqIEB0c19pc19pbnRlcmxhY2VkOiBGbGFnIGluZGljYXRpbmcgVHJhbnNwb3J0IFN0cmVhbSBp cyBpbnRlcmxhY2VkLg0KPiA+ID4gKyAqIEBmcmFtZXJfZW5hYmxlOiBGbGFnIGZvciBmcmFtZXIg ZW5hYmxlZCBvciBub3Qgc2V0IGJ5IGNvbnRyb2wNCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFRoaXMg c3RydWN0dXJlIGNvbnRhaW5zIHRoZSBkZXZpY2UgZHJpdmVyIHJlbGF0ZWQgcGFyYW1ldGVycw0K PiA+ID4gKyAqLw0KPiA+ID4gK3N0cnVjdCB4c2Rpcnhzc19zdGF0ZSB7DQo+ID4gPiArCXN0cnVj dCB4c2Rpcnhzc19jb3JlIGNvcmU7DQo+ID4gPiArCXN0cnVjdCB2NGwyX3N1YmRldiBzdWJkZXY7 DQo+ID4gPiArCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBjdHJsX2hhbmRsZXI7DQo+ID4gPiAr CXN0cnVjdCB2NGwyX2V2ZW50IGV2ZW50Ow0KPiA+ID4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1l Zm10IGZvcm1hdDsNCj4gPiA+ICsJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBkZWZhdWx0X2Zv cm1hdDsNCj4gPiA+ICsJc3RydWN0IHY0bDJfZnJhY3QgZnJhbWVfaW50ZXJ2YWw7DQo+ID4gPiAr CXN0cnVjdCBtZWRpYV9wYWQgcGFkOw0KPiA+ID4gKwl1MzIgdmlkbG9ja3dpbjsNCj4gPiA+ICsJ dTMyIGVkaG1hc2s7DQo+ID4gPiArCXUxNiBzZWFyY2htYXNrOw0KPiA+ID4gKwlib29sIHN0cmVh bWluZzsNCj4gPiA+ICsJYm9vbCB2aWRsb2NrZWQ7DQo+ID4gPiArCWJvb2wgdHNfaXNfaW50ZXJs YWNlZDsNCj4gPiA+ICsJYm9vbCBmcmFtZXJfZW5hYmxlOw0KPiA+ID4gK307DQo+ID4gPiArDQo+ ID4gPiArLyogTGlzdCBvZiBjbG9ja3MgcmVxdWlyZWQgYnkgVUhELVNESSBSeCBzdWJzeXN0ZW0g Ki8NCj4gPiA+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHhzZGlyeHNzX2Nsa3NbXSA9IHsN Cj4gPiA+ICsJInNfYXhpX2FjbGsiLCAic2RpX3J4X2NsayIsICJ2aWRlb19vdXRfY2xrIiwNCj4g PiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gKy8qIFRPRE8gLSBBZGQgWVVWIDQ0NC80MjAgYW5kIFJC RyAxMC8xMiBicGMgbWJ1cyBmb3JtYXRzIGhlcmUgKi8NCj4gPiA+ICtzdGF0aWMgY29uc3QgdTMy IHhzZGlyeHNzXzEwYnBjX21idXNfZm10c1tdID0gew0KPiA+ID4gKwlNRURJQV9CVVNfRk1UX1VZ VlkxMF8xWDIwLA0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGNvbnN0IHUzMiB4 c2Rpcnhzc18xMmJwY19tYnVzX2ZtdHNbXSA9IHsNCj4gPiA+ICsJTUVESUFfQlVTX0ZNVF9VWVZZ MTJfMVgyNCwNCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg djRsMl9kdl90aW1pbmdzIGZtdF9jYXBbXSA9IHsNCj4gPiA+ICsJVjRMMl9EVl9CVF9TRElfNzIw WDQ4N0k2MCwNCj4gPiA+ICsJVjRMMl9EVl9CVF9DRUFfNzIwWDU3Nkk1MCwNCj4gPiA+ICsJVjRM Ml9EVl9CVF9DRUFfMTI4MFg3MjBQMjQsDQo+ID4gPiArCVY0TDJfRFZfQlRfQ0VBXzEyODBYNzIw UDI1LA0KPiA+ID4gKwlWNEwyX0RWX0JUX0NFQV8xMjgwWDcyMFAzMCwNCj4gPiA+ICsJVjRMMl9E Vl9CVF9DRUFfMTI4MFg3MjBQNTAsDQo+ID4gPiArCVY0TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDYw LA0KPiA+ID4gKwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQMjQsDQo+ID4gPiArCVY0TDJfRFZf QlRfQ0VBXzE5MjBYMTA4MFAzMCwNCj4gPiA+ICsJVjRMMl9EVl9CVF9DRUFfMTkyMFgxMDgwSTUw LA0KPiA+ID4gKwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBJNjAsDQo+ID4gPiArCVY0TDJfRFZf QlRfQ0VBXzE5MjBYMTA4MFA1MCwNCj4gPiA+ICsJVjRMMl9EVl9CVF9DRUFfMTkyMFgxMDgwUDYw LA0KPiA+ID4gKwlWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQMjQsDQo+ID4gPiArCVY0TDJfRFZf QlRfQ0VBXzM4NDBYMjE2MFAzMCwNCj4gPiA+ICsJVjRMMl9EVl9CVF9DRUFfMzg0MFgyMTYwUDUw LA0KPiA+ID4gKwlWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQNjAsDQo+ID4gPiArCVY0TDJfRFZf QlRfQ0VBXzQwOTZYMjE2MFAyNCwNCj4gPiA+ICsJVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDI1 LA0KPiA+ID4gKwlWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQMzAsDQo+ID4gPiArCVY0TDJfRFZf QlRfQ0VBXzQwOTZYMjE2MFA1MCwNCj4gPiA+ICsJVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDYw LA0KPiA+ID4gKw0KPiA+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDI0LA0KPiA+ID4g KwlYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDI1LA0KPiA+ID4gKwlYTE5YX1Y0TDJfRFZfQlRf MjA0OFgxMDgwUDMwLA0KPiA+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwSTQ4LA0KPiA+ ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwSTUwLA0KPiA+ID4gKwlYTE5YX1Y0TDJfRFZf QlRfMjA0OFgxMDgwSTYwLA0KPiA+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDQ4LA0K PiA+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDUwLA0KPiA+ID4gKwlYTE5YX1Y0TDJf RFZfQlRfMjA0OFgxMDgwUDYwLA0KPiA+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMTkyMFgxMDgwUDQ4 LA0KPiA+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMTkyMFgxMDgwSTQ4LA0KPiA+ID4gKwlYTE5YX1Y0 TDJfRFZfQlRfMzg0MFgyMTYwUDQ4LA0KPiA+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfNDA5NlgyMTYw UDQ4LA0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArc3RydWN0IHhzZGlyeHNzX2R2X21hcCB7 DQo+ID4gPiArCXUzMiB3aWR0aDsNCj4gPiA+ICsJdTMyIGhlaWdodDsNCj4gPiA+ICsJdTMyIGZw czsNCj4gPiA+ICsJc3RydWN0IHY0bDJfZHZfdGltaW5ncyBmb3JtYXQ7DQo+ID4gPiArfTsNCj4g PiA+ICsNCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHhzZGlyeHNzX2R2X21hcCB4c2Rpcnhz c19kdl90aW1pbmdzW10gPSB7DQo+ID4gPiArCS8qIFNEIC0gNzIweDQ4N2k2MCAqLw0KPiA+ID4g Kwl7IDcyMCwgMjQzLCAzMCwgVjRMMl9EVl9CVF9TRElfNzIwWDQ4N0k2MCB9LA0KPiA+ID4gKwkv KiBTRCAtIDcyMHg1NzZpNTAgKi8NCj4gPiA+ICsJeyA3MjAsIDI4OCwgMjUsIFY0TDJfRFZfQlRf Q0VBXzcyMFg1NzZJNTAgfSwNCj4gPiA+ICsJLyogSEQgLSAxMjgweDcyMHAyMy45OCAqLw0KPiA+ ID4gKwkvKiBIRCAtIDEyODB4NzIwcDI0ICovDQo+ID4gPiArCXsgMTI4MCwgNzIwLCAyNCwgVjRM Ml9EVl9CVF9DRUFfMTI4MFg3MjBQMjQgfSwNCj4gPiA+ICsJLyogSEQgLSAxMjgweDcyMHAyNSAq Lw0KPiA+ID4gKwl7IDEyODAsIDcyMCwgMjUsIFY0TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDI1IH0s DQo+ID4gPiArCS8qIEhEIC0gMTI4MHg3MjBwMjkuOTcgKi8NCj4gPiA+ICsJLyogSEQgLSAxMjgw eDcyMHAzMCAqLw0KPiA+ID4gKwl7IDEyODAsIDcyMCwgMzAsIFY0TDJfRFZfQlRfQ0VBXzEyODBY NzIwUDMwIH0sDQo+ID4gPiArCS8qIEhEIC0gMTI4MHg3MjBwNTAgKi8NCj4gPiA+ICsJeyAxMjgw LCA3MjAsIDUwLCBWNEwyX0RWX0JUX0NFQV8xMjgwWDcyMFA1MCB9LA0KPiA+ID4gKwkvKiBIRCAt IDEyODB4NzIwcDU5Ljk0ICovDQo+ID4gPiArCS8qIEhEIC0gMTI4MHg3MjBwNjAgKi8NCj4gPiA+ ICsJeyAxMjgwLCA3MjAsIDYwLCBWNEwyX0RWX0JUX0NFQV8xMjgwWDcyMFA2MCB9LA0KPiA+ID4g KwkvKiBIRCAtIDE5MjB4MTA4MHAyMy45OCAqLw0KPiA+ID4gKwkvKiBIRCAtIDE5MjB4MTA4MHAy NCAqLw0KPiA+ID4gKwl7IDE5MjAsIDEwODAsIDI0LCBWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQ MjQgfSwNCj4gPiA+ICsJLyogSEQgLSAxOTIweDEwODBwMjUgKi8NCj4gPiA+ICsJeyAxOTIwLCAx MDgwLCAyNSwgVjRMMl9EVl9CVF9DRUFfMTkyMFgxMDgwUDI1IH0sDQo+ID4gPiArCS8qIEhEIC0g MTkyMHgxMDgwcDI5Ljk3ICovDQo+ID4gPiArCS8qIEhEIC0gMTkyMHgxMDgwcDMwICovDQo+ID4g PiArCXsgMTkyMCwgMTA4MCwgMzAsIFY0TDJfRFZfQlRfQ0VBXzE5MjBYMTA4MFAzMCB9LA0KPiA+ ID4gKw0KPiA+ID4gKwkvKiBIRCAtIDIwNDh4MTA4MHAyMy45OCAqLw0KPiA+ID4gKwkvKiBIRCAt IDIwNDh4MTA4MHAyNCAqLw0KPiA+ID4gKwl7IDIwNDgsIDEwODAsIDI0LCBYTE5YX1Y0TDJfRFZf QlRfMjA0OFgxMDgwUDI0IH0sDQo+ID4gPiArCS8qIEhEIC0gMjA0OHgxMDgwcDI1ICovDQo+ID4g PiArCXsgMjA0OCwgMTA4MCwgMjQsIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQMjUgfSwNCj4g PiA+ICsJLyogSEQgLSAyMDQ4eDEwODBwMjkuOTcgKi8NCj4gPiA+ICsJLyogSEQgLSAyMDQ4eDEw ODBwMzAgKi8NCj4gPiA+ICsJeyAyMDQ4LCAxMDgwLCAyNCwgWExOWF9WNEwyX0RWX0JUXzIwNDhY MTA4MFAzMCB9LA0KPiA+ID4gKwkvKiBIRCAtIDE5MjB4MTA4MGk0Ny45NSAqLw0KPiA+ID4gKwkv KiBIRCAtIDE5MjB4MTA4MGk0OCAqLw0KPiA+ID4gKwl7IDE5MjAsIDU0MCwgMjQsIFhMTlhfVjRM Ml9EVl9CVF8xOTIwWDEwODBJNDggfSwNCj4gPiA+ICsNCj4gPiA+ICsJLyogSEQgLSAxOTIweDEw ODBpNTAgKi8NCj4gPiA+ICsJeyAxOTIwLCA1NDAsIDI1LCBWNEwyX0RWX0JUX0NFQV8xOTIwWDEw ODBJNTAgfSwNCj4gPiA+ICsJLyogSEQgLSAxOTIweDEwODBpNTkuOTQgKi8NCj4gPiA+ICsJLyog SEQgLSAxOTIweDEwODBpNjAgKi8NCj4gPiA+ICsJeyAxOTIwLCA1NDAsIDMwLCBWNEwyX0RWX0JU X0NFQV8xOTIwWDEwODBJNjAgfSwNCj4gPiA+ICsNCj4gPiA+ICsJLyogSEQgLSAyMDQ4eDEwODBp NDcuOTUgKi8NCj4gPiA+ICsJLyogSEQgLSAyMDQ4eDEwODBpNDggKi8NCj4gPiA+ICsJeyAyMDQ4 LCA1NDAsIDI0LCBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwSTQ4IH0sDQo+ID4gPiArCS8qIEhE IC0gMjA0OHgxMDgwaTUwICovDQo+ID4gPiArCXsgMjA0OCwgNTQwLCAyNSwgWExOWF9WNEwyX0RW X0JUXzIwNDhYMTA4MEk1MCB9LA0KPiA+ID4gKwkvKiBIRCAtIDIwNDh4MTA4MGk1OS45NCAqLw0K PiA+ID4gKwkvKiBIRCAtIDIwNDh4MTA4MGk2MCAqLw0KPiA+ID4gKwl7IDIwNDgsIDU0MCwgMzAs IFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBJNjAgfSwNCj4gPiA+ICsJLyogM0cgLSAxOTIweDEw ODBwNDcuOTUgKi8NCj4gPiA+ICsJLyogM0cgLSAxOTIweDEwODBwNDggKi8NCj4gPiA+ICsJeyAx OTIwLCAxMDgwLCA0OCwgWExOWF9WNEwyX0RWX0JUXzE5MjBYMTA4MFA0OCB9LA0KPiA+ID4gKw0K PiA+ID4gKwkvKiAzRyAtIDE5MjB4MTA4MHA1MCAxNDguNSAqLw0KPiA+ID4gKwl7IDE5MjAsIDEw ODAsIDUwLCBWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQNTAgfSwNCj4gPiA+ICsJLyogM0cgLSAx OTIweDEwODBwNTkuOTQgMTQ4LjUvMS4wMDEgKi8NCj4gPiA+ICsJLyogM0cgLSAxOTIweDEwODBw NjAgMTQ4LjUgKi8NCj4gPiA+ICsJeyAxOTIwLCAxMDgwLCA2MCwgVjRMMl9EVl9CVF9DRUFfMTky MFgxMDgwUDYwIH0sDQo+ID4gPiArDQo+ID4gPiArCS8qIDNHIC0gMjA0OHgxMDgwcDQ3Ljk1ICov DQo+ID4gPiArCS8qIDNHIC0gMjA0OHgxMDgwcDQ4ICovDQo+ID4gPiArCXsgMjA0OCwgMTA4MCwg NDgsIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQNDggfSwNCj4gPiA+ICsJLyogM0cgLSAyMDQ4 eDEwODBwNTAgKi8NCj4gPiA+ICsJeyAyMDQ4LCAxMDgwLCA1MCwgWExOWF9WNEwyX0RWX0JUXzIw NDhYMTA4MFA1MCB9LA0KPiA+ID4gKwkvKiAzRyAtIDIwNDh4MTA4MHA1OS45NCAqLw0KPiA+ID4g KwkvKiAzRyAtIDIwNDh4MTA4MHA2MCAqLw0KPiA+ID4gKwl7IDIwNDgsIDEwODAsIDYwLCBYTE5Y X1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDYwIH0sDQo+ID4gPiArDQo+ID4gPiArCS8qIDZHIC0gMzg0 MFgyMTYwcDIzLjk4ICovDQo+ID4gPiArCS8qIDZHIC0gMzg0MFgyMTYwcDI0ICovDQo+ID4gPiAr CXsgMzg0MCwgMjE2MCwgMjQsIFY0TDJfRFZfQlRfQ0VBXzM4NDBYMjE2MFAyNCB9LA0KPiA+ID4g KwkvKiA2RyAtIDM4NDBYMjE2MHAyNSAqLw0KPiA+ID4gKwl7IDM4NDAsIDIxNjAsIDI1LCBWNEwy X0RWX0JUX0NFQV8zODQwWDIxNjBQMjUgfSwNCj4gPiA+ICsJLyogNkcgLSAzODQwWDIxNjBwMjku OTcgKi8NCj4gPiA+ICsJLyogNkcgLSAzODQwWDIxNjBwMzAgKi8NCj4gPiA+ICsJeyAzODQwLCAy MTYwLCAzMCwgVjRMMl9EVl9CVF9DRUFfMzg0MFgyMTYwUDMwIH0sDQo+ID4gPiArCS8qIDZHIC0g NDA5NlgyMTYwcDIzLjk4ICovDQo+ID4gPiArCS8qIDZHIC0gNDA5NlgyMTYwcDI0ICovDQo+ID4g PiArCXsgNDA5NiwgMjE2MCwgMjQsIFY0TDJfRFZfQlRfQ0VBXzQwOTZYMjE2MFAyNCB9LA0KPiA+ ID4gKwkvKiA2RyAtIDQwOTZYMjE2MHAyNSAqLw0KPiA+ID4gKwl7IDQwOTYsIDIxNjAsIDI1LCBW NEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQMjUgfSwNCj4gPiA+ICsJLyogNkcgLSA0MDk2WDIxNjBw MjkuOTcgKi8NCj4gPiA+ICsJLyogNkcgLSA0MDk2WDIxNjBwMzAgKi8NCj4gPiA+ICsJeyA0MDk2 LCAyMTYwLCAzMCwgVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDMwIH0sDQo+ID4gPiArCS8qIDEy RyAtIDM4NDBYMjE2MHA0Ny45NSAqLw0KPiA+ID4gKwkvKiAxMkcgLSAzODQwWDIxNjBwNDggKi8N Cj4gPiA+ICsJeyAzODQwLCAyMTYwLCA0OCwgWExOWF9WNEwyX0RWX0JUXzM4NDBYMjE2MFA0OCB9 LA0KPiA+ID4gKw0KPiA+ID4gKwkvKiAxMkcgLSAzODQwWDIxNjBwNTAgKi8NCj4gPiA+ICsJeyAz ODQwLCAyMTYwLCA1MCwgVjRMMl9EVl9CVF9DRUFfMzg0MFgyMTYwUDUwIH0sDQo+ID4gPiArCS8q IDEyRyAtIDM4NDBYMjE2MHA1OS45NCAqLw0KPiA+ID4gKwkvKiAxMkcgLSAzODQwWDIxNjBwNjAg Ki8NCj4gPiA+ICsJeyAzODQwLCAyMTYwLCA2MCwgVjRMMl9EVl9CVF9DRUFfMzg0MFgyMTYwUDYw IH0sDQo+ID4gPiArDQo+ID4gPiArCS8qIDEyRyAtIDQwOTZYMjE2MHA0Ny45NSAqLw0KPiA+ID4g KwkvKiAxMkcgLSA0MDk2WDIxNjBwNDggKi8NCj4gPiA+ICsJeyAzODQwLCAyMTYwLCA0OCwgWExO WF9WNEwyX0RWX0JUXzQwOTZYMjE2MFA0OCB9LA0KPiA+ID4gKw0KPiA+ID4gKwkvKiAxMkcgLSA0 MDk2WDIxNjBwNTAgKi8NCj4gPiA+ICsJeyA0MDk2LCAyMTYwLCA1MCwgVjRMMl9EVl9CVF9DRUFf NDA5NlgyMTYwUDUwIH0sDQo+ID4gPiArCS8qIDEyRyAtIDQwOTZYMjE2MHA1OS45NCAqLw0KPiA+ ID4gKwkvKiAxMkcgLSA0MDk2WDIxNjBwNjAgKi8NCj4gPiA+ICsJeyA0MDk2LCAyMTYwLCA2MCwg VjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDYwIH0sDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqDQo+ID4gPiArdG9feHNkaXJ4 c3NzdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldikNCj4gPiA+ICt7DQo+ID4gPiArCXJl dHVybiBjb250YWluZXJfb2Yoc3ViZGV2LCBzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUsIHN1YmRldik7 DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qDQo+ID4gPiArICogUmVnaXN0ZXIgcmVsYXRl ZCBvcGVyYXRpb25zDQo+ID4gPiArICovDQo+ID4gPiArc3RhdGljIGlubGluZSB1MzIgeHNkaXJ4 c3NfcmVhZChzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqeHNkaXJ4c3MsIHUzMiBhZGRyKQ0KPiA+ID4g K3sNCj4gPiA+ICsJcmV0dXJuIGlvcmVhZDMyKHhzZGlyeHNzLT5pb21lbSArIGFkZHIpOw0KPiA+ ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4c3Nfd3JpdGUo c3RydWN0IHhzZGlyeHNzX2NvcmUgKnhzZGlyeHNzLCB1MzIgYWRkciwNCj4gPiA+ICsJCQkJICB1 MzIgdmFsdWUpDQo+ID4gPiArew0KPiA+ID4gKwlpb3dyaXRlMzIodmFsdWUsIHhzZGlyeHNzLT5p b21lbSArIGFkZHIpOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW5saW5lIHZv aWQgeHNkaXJ4c3NfY2xyKHN0cnVjdCB4c2Rpcnhzc19jb3JlICp4c2RpcnhzcywgdTMyIGFkZHIs DQo+ID4gPiArCQkJCXUzMiBjbHIpDQo+ID4gPiArew0KPiA+ID4gKwl4c2Rpcnhzc193cml0ZSh4 c2RpcnhzcywgYWRkciwgeHNkaXJ4c3NfcmVhZCh4c2RpcnhzcywgYWRkcikgJiB+Y2xyKTsNCj4g PiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGlubGluZSB2b2lkIHhzZGlyeHNzX3NldChz dHJ1Y3QgeHNkaXJ4c3NfY29yZSAqeHNkaXJ4c3MsIHUzMiBhZGRyLA0KPiA+ID4gKwkJCQl1MzIg c2V0KQ0KPiA+ID4gK3sNCj4gPiA+ICsJeHNkaXJ4c3Nfd3JpdGUoeHNkaXJ4c3MsIGFkZHIsIHhz ZGlyeHNzX3JlYWQoeHNkaXJ4c3MsIGFkZHIpIHwgc2V0KTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ ID4gPiArc3RhdGljIGlubGluZSB2b2lkIHhzZGlyeF9jb3JlX2Rpc2FibGUoc3RydWN0IHhzZGly eHNzX2NvcmUgKmNvcmUpDQo+ID4gPiArew0KPiA+ID4gKwl4c2Rpcnhzc19jbHIoY29yZSwgWFNE SVJYX1JTVF9DVFJMX1JFRywNCj4gPiBYU0RJUlhfUlNUX0NUUkxfU1NfRU5fTUFTSyk7DQo+ID4g PiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCB4c2RpcnhfY29yZV9lbmFi bGUoc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUpDQo+ID4gPiArew0KPiA+ID4gKwl4c2Rpcnhz c19zZXQoY29yZSwgWFNESVJYX1JTVF9DVFJMX1JFRywNCj4gPiBYU0RJUlhfUlNUX0NUUkxfU1Nf RU5fTUFTSyk7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgeHNkaXJ4X3Nl dF9tb2RlZGV0ZWN0KHN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlLCB1MTYgbWFzaykNCj4gPiA+ ICt7DQo+ID4gPiArCXUzMiB2YWw7DQo+ID4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvcmUt PmRldjsNCj4gPiA+ICsNCj4gPiA+ICsJbWFzayAmPSBYU0RJUlhfREVURUNUX0FMTF9NT0RFUzsN Cj4gPiA+ICsJaWYgKCFtYXNrKSB7DQo+ID4gPiArCQlkZXZfZXJyKGRldiwgIkludmFsaWQgYml0 IG1hc2sgPSAweCUwOHhcbiIsIG1hc2spOw0KPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4g PiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJZGV2X2RiZyhkZXYsICJtYXNrID0gMHgleFxuIiwgbWFz ayk7DQo+ID4gPiArDQo+ID4gPiArCXZhbCA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX01E TF9DVFJMX1JFRyk7DQo+ID4gPiArCXZhbCAmPSB+WFNESVJYX01ETF9DVFJMX01PREVfREVUX0VO X01BU0s7DQo+ID4gPiArCXZhbCAmPSB+WFNESVJYX01ETF9DVFJMX01PREVfQVVUT19ERVRfTUFT SzsNCj4gPiA+ICsJdmFsICY9IH5YU0RJUlhfTURMX0NUUkxfRk9SQ0VEX01PREVfTUFTSzsNCj4g PiA+ICsNCj4gPiA+ICsJaWYgKGh3ZWlnaHQxNihtYXNrKSA+IDEpIHsNCj4gPiA+ICsJCS8qIE11 bHRpIG1vZGUgZGV0ZWN0aW9uIGFzIG1vcmUgdGhhbiAxIGJpdCBzZXQgaW4gbWFzayAqLw0KPiA+ ID4gKwkJZGV2X2RiZyhkZXYsICJEZXRlY3QgbXVsdGlwbGUgbW9kZXNcbiIpOw0KPiA+ID4gKw0K PiA+ID4gKwkJaWYgKG1hc2sgJiBCSVQoWFNESVJYX01PREVfU0RfT0ZGU0VUKSkNCj4gPiA+ICsJ CQl2YWwgfD0gWFNESVJYX01ETF9DVFJMX01PREVfU0RfRU5fTUFTSzsNCj4gPiA+ICsJCWlmICht YXNrICYgQklUKFhTRElSWF9NT0RFX0hEX09GRlNFVCkpDQo+ID4gPiArCQkJdmFsIHw9IFhTRElS WF9NRExfQ1RSTF9NT0RFX0hEX0VOX01BU0s7DQo+ID4gPiArCQlpZiAobWFzayAmIEJJVChYU0RJ UlhfTU9ERV8zR19PRkZTRVQpKQ0KPiA+ID4gKwkJCXZhbCB8PSBYU0RJUlhfTURMX0NUUkxfTU9E RV8zR19FTl9NQVNLOw0KPiA+ID4gKwkJaWYgKG1hc2sgJiBCSVQoWFNESVJYX01PREVfNkdfT0ZG U0VUKSkNCj4gPiA+ICsJCQl2YWwgfD0gWFNESVJYX01ETF9DVFJMX01PREVfNkdfRU5fTUFTSzsN Cj4gPiA+ICsJCWlmIChtYXNrICYgQklUKFhTRElSWF9NT0RFXzEyR0lfT0ZGU0VUKSkNCj4gPiA+ ICsJCQl2YWwgfD0gWFNESVJYX01ETF9DVFJMX01PREVfMTJHSV9FTl9NQVNLOw0KPiA+ID4gKwkJ aWYgKG1hc2sgJiBCSVQoWFNESVJYX01PREVfMTJHRl9PRkZTRVQpKQ0KPiA+ID4gKwkJCXZhbCB8 PSBYU0RJUlhfTURMX0NUUkxfTU9ERV8xMkdGX0VOX01BU0s7DQo+ID4gPiArDQo+ID4gPiArCQl2 YWwgfD0gWFNESVJYX01ETF9DVFJMX01PREVfREVUX0VOX01BU0s7DQo+ID4gPiArCX0gZWxzZSB7 DQo+ID4gPiArCQkvKiBGaXhlZCBNb2RlICovDQo+ID4gPiArCQl1MzIgZm9yY2VkX21vZGVfbWFz azsNCj4gPiA+ICsNCj4gPiA+ICsJCWRldl9kYmcoZGV2LCAiRGV0ZWN0IGZpeGVkIG1vZGVcbiIp Ow0KPiA+ID4gKw0KPiA+ID4gKwkJLyogRmluZCBvZmZzZXQgb2YgZmlyc3QgYml0IHNldCAqLw0K PiA+ID4gKwkJc3dpdGNoIChfX2ZmcyhtYXNrKSkgew0KPiA+ID4gKwkJY2FzZSBYU0RJUlhfTU9E RV9TRF9PRkZTRVQ6DQo+ID4gPiArCQkJZm9yY2VkX21vZGVfbWFzayA9IFhTRElSWF9NT0RFX1NE X01BU0s7DQo+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiArCQljYXNlIFhTRElSWF9NT0RFX0hEX09G RlNFVDoNCj4gPiA+ICsJCQlmb3JjZWRfbW9kZV9tYXNrID0gWFNESVJYX01PREVfSERfTUFTSzsN Cj4gPiA+ICsJCQlicmVhazsNCj4gPiA+ICsJCWNhc2UgWFNESVJYX01PREVfM0dfT0ZGU0VUOg0K PiA+ID4gKwkJCWZvcmNlZF9tb2RlX21hc2sgPSBYU0RJUlhfTU9ERV8zR19NQVNLOw0KPiA+ID4g KwkJCWJyZWFrOw0KPiA+ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV82R19PRkZTRVQ6DQo+ID4gPiAr CQkJZm9yY2VkX21vZGVfbWFzayA9IFhTRElSWF9NT0RFXzZHX01BU0s7DQo+ID4gPiArCQkJYnJl YWs7DQo+ID4gPiArCQljYXNlIFhTRElSWF9NT0RFXzEyR0lfT0ZGU0VUOg0KPiA+ID4gKwkJCWZv cmNlZF9tb2RlX21hc2sgPSBYU0RJUlhfTU9ERV8xMkdJX01BU0s7DQo+ID4gPiArCQkJYnJlYWs7 DQo+ID4gPiArCQljYXNlIFhTRElSWF9NT0RFXzEyR0ZfT0ZGU0VUOg0KPiA+ID4gKwkJCWZvcmNl ZF9tb2RlX21hc2sgPSBYU0RJUlhfTU9ERV8xMkdGX01BU0s7DQo+ID4gPiArCQkJYnJlYWs7DQo+ ID4gPiArCQlkZWZhdWx0Og0KPiA+ID4gKwkJCWZvcmNlZF9tb2RlX21hc2sgPSAwOw0KPiA+ID4g KwkJfQ0KPiA+ID4gKwkJZGV2X2RiZyhkZXYsICJGb3JjZWQgTW9kZSBNYXNrIDogMHgleFxuIiwN Cj4gPiA+ICsJCQlmb3JjZWRfbW9kZV9tYXNrKTsNCj4gPiA+ICsJCXZhbCB8PSBmb3JjZWRfbW9k ZV9tYXNrIDw8DQo+ID4gWFNESVJYX01ETF9DVFJMX0ZPUkNFRF9NT0RFX09GRlNFVDsNCj4gPiA+ ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlkZXZfZGJnKGRldiwgIk1vZGVzIHRvIGJlIGRldGVjdGVk IDogc2RpIGN0cmwgcmVnID0gMHglMDh4XG4iLA0KPiA+ID4gKwkJdmFsKTsNCj4gPiA+ICsJeHNk aXJ4c3Nfd3JpdGUoY29yZSwgWFNESVJYX01ETF9DVFJMX1JFRywgdmFsKTsNCj4gPiA+ICsNCj4g PiA+ICsJcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIHhz ZGlyeF9mcmFtZXIoc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUsIGJvb2wgZmxhZykNCj4gPiA+ ICt7DQo+ID4gPiArCWlmIChmbGFnKQ0KPiA+ID4gKwkJeHNkaXJ4c3Nfc2V0KGNvcmUsIFhTRElS WF9NRExfQ1RSTF9SRUcsDQo+ID4gPiArCQkJICAgICBYU0RJUlhfTURMX0NUUkxfRlJNX0VOX01B U0spOw0KPiA+ID4gKwllbHNlDQo+ID4gPiArCQl4c2Rpcnhzc19jbHIoY29yZSwgWFNESVJYX01E TF9DVFJMX1JFRywNCj4gPiA+ICsJCQkgICAgIFhTRElSWF9NRExfQ1RSTF9GUk1fRU5fTUFTSyk7 DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIHhzZGlyeF9zZXRlZGhlcnJj bnR0cmlnZ2VyKHN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlLCB1MzINCj4gPiBlbmFibGUpDQo+ ID4gPiArew0KPiA+ID4gKwl1MzIgdmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfRURI X0VSUkNOVF9FTl9SRUcpOw0KPiA+ID4gKw0KPiA+ID4gKwl2YWwgPSBlbmFibGUgJiBYU0RJUlhf RURIX0FMTEVSUl9NQVNLOw0KPiA+ID4gKw0KPiA+ID4gKwl4c2Rpcnhzc193cml0ZShjb3JlLCBY U0RJUlhfRURIX0VSUkNOVF9FTl9SRUcsIHZhbCk7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4g K3N0YXRpYyBpbmxpbmUgdm9pZCB4c2Rpcnhfc2V0dmlkbG9ja3dpbmRvdyhzdHJ1Y3QgeHNkaXJ4 c3NfY29yZSAqY29yZSwgdTMyDQo+ID4gdmFsKQ0KPiA+ID4gK3sNCj4gPiA+ICsJLyoNCj4gPiA+ ICsJICogVGhlIHZpZGVvIGxvY2sgd2luZG93IGlzIHRoZSBhbW91bnQgb2YgdGltZSBmb3Igd2hp Y2ggdGhlDQo+ID4gPiArCSAqIHRoZSBtb2RlIGFuZCB0cmFuc3BvcnQgc3RyZWFtIHNob3VsZCBi ZSBsb2NrZWQgdG8gZ2V0IHRoZQ0KPiA+ID4gKwkgKiB2aWRlbyBsb2NrIGludGVycnVwdC4NCj4g PiA+ICsJICovDQo+ID4gPiArCXhzZGlyeHNzX3dyaXRlKGNvcmUsIFhTRElSWF9WSURfTE9DS19X SU5ET1dfUkVHLCB2YWwpOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW5saW5l IHZvaWQgeHNkaXJ4X2Rpc2FibGVpbnRyKHN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlLCB1MzIg bWFzaykNCj4gPiA+ICt7DQo+ID4gPiArCXhzZGlyeHNzX2Nscihjb3JlLCBYU0RJUlhfSUVSX1JF RywgbWFzayk7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCB4 c2RpcnhfZW5hYmxlaW50cihzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSwgdTMyIG1hc2spDQo+ ID4gPiArew0KPiA+ID4gKwl4c2Rpcnhzc19zZXQoY29yZSwgWFNESVJYX0lFUl9SRUcsIG1hc2sp Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgdm9pZCB4c2RpcnhfZ2xvYmFsaW50 cihzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSwgYm9vbCBmbGFnKQ0KPiA+ID4gK3sNCj4gPiA+ ICsJaWYgKGZsYWcpDQo+ID4gPiArCQl4c2Rpcnhzc19zZXQoY29yZSwgWFNESVJYX0dMQkxfSUVS X1JFRywNCj4gPiA+ICsJCQkgICAgIFhTRElSWF9HTEJMX0lOVFJfRU5fTUFTSyk7DQo+ID4gPiAr CWVsc2UNCj4gPiA+ICsJCXhzZGlyeHNzX2Nscihjb3JlLCBYU0RJUlhfR0xCTF9JRVJfUkVHLA0K PiA+ID4gKwkJCSAgICAgWFNESVJYX0dMQkxfSU5UUl9FTl9NQVNLKTsNCj4gPiA+ICt9DQo+ID4g PiArDQo+ID4gPiArc3RhdGljIGlubGluZSB2b2lkIHhzZGlyeF9jbGVhcmludHIoc3RydWN0IHhz ZGlyeHNzX2NvcmUgKmNvcmUsIHUzMiBtYXNrKQ0KPiA+ID4gK3sNCj4gPiA+ICsJeHNkaXJ4c3Nf c2V0KGNvcmUsIFhTRElSWF9JU1JfUkVHLCBtYXNrKTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4g PiArc3RhdGljIHZvaWQgeHNkaXJ4X3ZpZF9icmlkZ2VfY29udHJvbChzdHJ1Y3QgeHNkaXJ4c3Nf Y29yZSAqY29yZSwNCj4gPiA+ICsJCQkJICAgICAgYm9vbCBlbmFibGUpDQo+ID4gPiArew0KPiA+ ID4gKwl1MzIgbWFzayA9IFhTRElSWF9SU1RfQ1RSTF9TRElSWF9CUklER0VfRU5CX01BU0s7DQo+ ID4gPiArDQo+ID4gPiArCS8qDQo+ID4gPiArCSAqIFRPRE8gLSBFbmFibGUgWVVWNDQ0L1JCRyBm b3JtYXQgaW4gdGhlIGJyaWRnZSBiYXNlZA0KPiA+ID4gKwkgKiBvbiBCWVRFMyBjb2xvciBmb3Jt YXQuDQo+ID4gPiArCSAqIFhTRElSWF9SU1RfQ1RSTF9CUklER0VfQ0hfRk1UX1lVVjQ0NA0KPiA+ ID4gKwkgKi8NCj4gPiA+ICsJaWYgKGVuYWJsZSkNCj4gPiA+ICsJCXhzZGlyeHNzX3NldChjb3Jl LCBYU0RJUlhfUlNUX0NUUkxfUkVHLCBtYXNrKTsNCj4gPiA+ICsJZWxzZQ0KPiA+ID4gKwkJeHNk aXJ4c3NfY2xyKGNvcmUsIFhTRElSWF9SU1RfQ1RSTF9SRUcsIG1hc2spOw0KPiA+ID4gK30NCj4g PiA+ICsNCj4gPiA+ICtzdGF0aWMgdm9pZCB4c2RpcnhfYXhpczRfYnJpZGdlX2NvbnRyb2woc3Ry dWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUsDQo+ID4gPiArCQkJCQlib29sIGVuYWJsZSkNCj4gPiA+ ICt7DQo+ID4gPiArCWlmIChlbmFibGUpDQo+ID4gPiArCQl4c2Rpcnhzc19zZXQoY29yZSwgWFNE SVJYX1JTVF9DVFJMX1JFRywNCj4gPiA+ICsNCj4gPiBYU0RJUlhfUlNUX0NUUkxfVklESU5fQVhJ NFNfTU9EX0VOQl9NQVNLKTsNCj4gPiA+ICsJZWxzZQ0KPiA+ID4gKwkJeHNkaXJ4c3NfY2xyKGNv cmUsIFhTRElSWF9SU1RfQ1RSTF9SRUcsDQo+ID4gPiArDQo+ID4gWFNESVJYX1JTVF9DVFJMX1ZJ RElOX0FYSTRTX01PRF9FTkJfTUFTSyk7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRp YyB2b2lkIHhzZGlyeF9zdHJlYW1mbG93X2NvbnRyb2woc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNv cmUsIGJvb2wNCj4gPiBlbmFibGUpDQo+ID4gPiArew0KPiA+ID4gKwkvKiBUaGUgc2RpIHRvIG5h dGl2ZSBicmlkZ2UgaXMgZm9sbG93ZWQgYnkgbmF0aXZlIHRvIGF4aXM0IGJyaWRnZSAqLw0KPiA+ ID4gKwlpZiAoZW5hYmxlKSB7DQo+ID4gPiArCQl4c2RpcnhfYXhpczRfYnJpZGdlX2NvbnRyb2wo Y29yZSwgZW5hYmxlKTsNCj4gPiA+ICsJCXhzZGlyeF92aWRfYnJpZGdlX2NvbnRyb2woY29yZSwg ZW5hYmxlKTsNCj4gPiA+ICsJfSBlbHNlIHsNCj4gPiA+ICsJCXhzZGlyeF92aWRfYnJpZGdlX2Nv bnRyb2woY29yZSwgZW5hYmxlKTsNCj4gPiA+ICsJCXhzZGlyeF9heGlzNF9icmlkZ2VfY29udHJv bChjb3JlLCBlbmFibGUpOw0KPiA+ID4gKwl9DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0 YXRpYyB2b2lkIHhzZGlyeHNzX2dldF9mcmFtZXJhdGUoc3RydWN0IHY0bDJfZnJhY3QgKmZyYW1l X2ludGVydmFsLA0KPiA+ID4gKwkJCQkgICB1MzIgZnJhbWVyYXRlKQ0KPiA+ID4gK3sNCj4gPiA+ ICsJc3dpdGNoIChmcmFtZXJhdGUpIHsNCj4gPiA+ICsJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRf UkFURV8yM185OEhaOg0KPiA+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEwMDE7 DQo+ID4gPiArCQlmcmFtZV9pbnRlcnZhbC0+ZGVub21pbmF0b3IgPSAyNDAwMDsNCj4gPiA+ICsJ CWJyZWFrOw0KPiA+ID4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI0SFo6DQo+ID4g PiArCQlmcmFtZV9pbnRlcnZhbC0+bnVtZXJhdG9yID0gMTAwMDsNCj4gPiA+ICsJCWZyYW1lX2lu dGVydmFsLT5kZW5vbWluYXRvciA9IDI0MDAwOw0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNh c2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfMjVIWjoNCj4gPiA+ICsJCWZyYW1lX2ludGVydmFs LT5udW1lcmF0b3IgPSAxMDAwOw0KPiA+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9y ID0gMjUwMDA7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJY2FzZSBYU0RJUlhfVFNfREVUX1NU QVRfUkFURV8yOV85N0haOg0KPiA+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEw MDE7DQo+ID4gPiArCQlmcmFtZV9pbnRlcnZhbC0+ZGVub21pbmF0b3IgPSAzMDAwMDsNCj4gPiA+ ICsJCWJyZWFrOw0KPiA+ID4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzMwSFo6DQo+ ID4gPiArCQlmcmFtZV9pbnRlcnZhbC0+bnVtZXJhdG9yID0gMTAwMDsNCj4gPiA+ICsJCWZyYW1l X2ludGVydmFsLT5kZW5vbWluYXRvciA9IDMwMDAwOw0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiAr CWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfNDdfOTVIWjoNCj4gPiA+ICsJCWZyYW1lX2lu dGVydmFsLT5udW1lcmF0b3IgPSAxMDAxOw0KPiA+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9t aW5hdG9yID0gNDgwMDA7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJY2FzZSBYU0RJUlhfVFNf REVUX1NUQVRfUkFURV80OEhaOg0KPiA+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9 IDEwMDA7DQo+ID4gPiArCQlmcmFtZV9pbnRlcnZhbC0+ZGVub21pbmF0b3IgPSA0ODAwMDsNCj4g PiA+ICsJCWJyZWFrOw0KPiA+ID4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzUwSFo6 DQo+ID4gPiArCQlmcmFtZV9pbnRlcnZhbC0+bnVtZXJhdG9yID0gMTAwMDsNCj4gPiA+ICsJCWZy YW1lX2ludGVydmFsLT5kZW5vbWluYXRvciA9IDUwMDAwOw0KPiA+ID4gKwkJYnJlYWs7DQo+ID4g PiArCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfNTlfOTRIWjoNCj4gPiA+ICsJCWZyYW1l X2ludGVydmFsLT5udW1lcmF0b3IgPSAxMDAxOw0KPiA+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRl bm9taW5hdG9yID0gNjAwMDA7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJY2FzZSBYU0RJUlhf VFNfREVUX1NUQVRfUkFURV82MEhaOg0KPiA+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRv ciA9IDEwMDA7DQo+ID4gPiArCQlmcmFtZV9pbnRlcnZhbC0+ZGVub21pbmF0b3IgPSA2MDAwMDsN Cj4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gKwlkZWZhdWx0Og0KPiA+ID4gKwkJZnJhbWVfaW50ZXJ2 YWwtPm51bWVyYXRvciA9IDE7DQo+ID4gPiArCQlmcmFtZV9pbnRlcnZhbC0+ZGVub21pbmF0b3Ig PSAxOw0KPiA+ID4gKwl9DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIHhz ZGlyeHNzX3NldF9ndGNsayhzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnN0YXRlKQ0KPiA+ID4gK3sN Cj4gPiA+ICsJc3RydWN0IGNsayAqZ3RjbGs7DQo+ID4gPiArCXVuc2lnbmVkIGxvbmcgY2xrcmF0 ZTsNCj4gPiA+ICsJaW50IHJldCwgaXNfZnJhYzsNCj4gPiA+ICsJc3RydWN0IHhzZGlyeHNzX2Nv cmUgKmNvcmUgPSAmc3RhdGUtPmNvcmU7DQo+ID4gPiArCXUzMiBtb2RlOw0KPiA+ID4gKwlzdGF0 aWMgaW50IHByZXZfaXNfZnJhYyA9IC0xOw0KPiA+ID4gKw0KPiA+ID4gKwltb2RlID0geHNkaXJ4 c3NfcmVhZChjb3JlLCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOw0KPiA+ID4gKwltb2RlICY9 IFhTRElSWF9NT0RFX0RFVF9TVEFUX1JYX01PREVfTUFTSzsNCj4gPiA+ICsNCj4gPiA+ICsJLyoN Cj4gPiA+ICsJICogVE9ETzogRm9yIG5vdywgZG9uJ3QgY2hhbmdlIHRoZSBjbG9jayByYXRlIGZv ciBhbnkgbW9kZSBleGNlcHQNCj4gPiAxMkcuDQo+ID4gPiArCSAqIEluIGZ1dHVyZSwgY29uZmln dXJlIGd0IGNsb2NrIGZvciBhbGwgbW9kZXMgYW5kIGVuYWJsZSBjbG9jayBvbmx5DQo+ID4gPiAr CSAqIHdoZW4gbmVlZGVkIChzdHJlYW0gb24vb2ZmKS4NCj4gPiA+ICsJICovDQo+ID4gPiArCWlm IChtb2RlICE9IFhTRElSWF9NT0RFXzEyR0lfTUFTSyAmJiBtb2RlICE9DQo+ID4gWFNESVJYX01P REVfMTJHRl9NQVNLKQ0KPiA+ID4gKwkJcmV0dXJuOw0KPiA+ID4gKw0KPiA+ID4gKwlpc19mcmFj ID0gc3RhdGUtPmZyYW1lX2ludGVydmFsLm51bWVyYXRvciA9PSAxMDAxID8gMSA6IDA7DQo+ID4g PiArDQo+ID4gPiArCWlmIChwcmV2X2lzX2ZyYWMgPT0gaXNfZnJhYykNCj4gPiA+ICsJCXJldHVy bjsNCj4gPiA+ICsNCj4gPiA+ICsJeHNkaXJ4X2NvcmVfZGlzYWJsZShjb3JlKTsNCj4gPiA+ICsJ eHNkaXJ4X2dsb2JhbGludHIoY29yZSwgZmFsc2UpOw0KPiA+ID4gKwl4c2RpcnhfZGlzYWJsZWlu dHIoY29yZSwgWFNESVJYX0lOVFJfQUxMX01BU0spOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBnZXQg c2RpX3J4X2NsayAqLw0KPiA+ID4gKwlndGNsayA9IGNvcmUtPmNsa3NbMV0uY2xrOw0KPiA+ID4g KwljbGtyYXRlID0gY2xrX2dldF9yYXRlKGd0Y2xrKTsNCj4gPiA+ICsJaXNfZnJhYyA9IHN0YXRl LT5mcmFtZV9pbnRlcnZhbC5udW1lcmF0b3IgPT0gMTAwMSA/IDEgOiAwOw0KPiA+ID4gKw0KPiA+ ID4gKwkvKiBjYWxjdWFsdGUgY2xrcmF0ZSAqLw0KPiA+ID4gKwlpZiAoIWlzX2ZyYWMpDQo+ID4g PiArCQljbGtyYXRlID0gQ0xLX0lOVDsNCj4gPiA+ICsJZWxzZQ0KPiA+ID4gKwkJY2xrcmF0ZSA9 IChDTEtfSU5UICogMTAwMCkgLyAxMDAxOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXQgPSBjbGtfc2V0 X3JhdGUoZ3RjbGssIGNsa3JhdGUpOw0KPiA+ID4gKwlpZiAocmV0KQ0KPiA+ID4gKwkJZGV2X2Vy cihjb3JlLT5kZXYsICJmYWlsZWQgdG8gc2V0IGNsayByYXRlID0gJWRcbiIsIHJldCk7DQo+ID4g PiArDQo+ID4gPiArCWNsa3JhdGUgPSBjbGtfZ2V0X3JhdGUoZ3RjbGspOw0KPiA+ID4gKw0KPiA+ ID4gKwlkZXZfZGJnKGNvcmUtPmRldiwgImNsa3JhdGUgPSAlbHUgaXNfZnJhYyA9ICVkXG4iLA0K PiA+ID4gKwkJY2xrcmF0ZSwgaXNfZnJhYyk7DQo+ID4gPiArDQo+ID4gPiArCXhzZGlyeF9mcmFt ZXIoY29yZSwgc3RhdGUtPmZyYW1lcl9lbmFibGUpOw0KPiA+ID4gKwl4c2Rpcnhfc2V0ZWRoZXJy Y250dHJpZ2dlcihjb3JlLCBzdGF0ZS0+ZWRobWFzayk7DQo+ID4gPiArCXhzZGlyeF9zZXR2aWRs b2Nrd2luZG93KGNvcmUsIHN0YXRlLT52aWRsb2Nrd2luKTsNCj4gPiA+ICsJeHNkaXJ4X3NldF9t b2RlZGV0ZWN0KGNvcmUsIHN0YXRlLT5zZWFyY2htYXNrKTsNCj4gPiA+ICsJeHNkaXJ4X2VuYWJs ZWludHIoY29yZSwgWFNESVJYX0lOVFJfQUxMX01BU0spOw0KPiA+ID4gKwl4c2RpcnhfZ2xvYmFs aW50cihjb3JlLCB0cnVlKTsNCj4gPiA+ICsJeHNkaXJ4X2NvcmVfZW5hYmxlKGNvcmUpOw0KPiA+ ID4gKw0KPiA+ID4gKwlwcmV2X2lzX2ZyYWMgPSBpc19mcmFjOw0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICsvKioNCj4gPiA+ICsgKiB4c2RpcnhfZ2V0X3N0cmVhbV9wcm9wZXJ0aWVzIC0gR2V0 IFNESSBSeCBzdHJlYW0gcHJvcGVydGllcw0KPiA+ID4gKyAqIEBzdGF0ZTogcG9pbnRlciB0byBk cml2ZXIgc3RhdGUNCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24gZGVjb2RlcyB0 aGUgc3RyZWFtJ3MgU1QzNTIgcGF5bG9hZCAoaWYgYXZhaWxhYmxlKSB0byBnZXQNCj4gPiA+ICsg KiBzdHJlYW0gcHJvcGVydGllcyBsaWtlIHdpZHRoLCBoZWlnaHQsIHBpY3R1cmUgdHlwZQ0KPiA+ IChpbnRlcmxhY2VkL3Byb2dyZXNzaXZlKSwNCj4gPiA+ICsgKiBldGMuDQo+ID4gPiArICoNCj4g PiA+ICsgKiBSZXR1cm46IDAgZm9yIHN1Y2Nlc3MgZWxzZSBlcnJvcnMNCj4gPiA+ICsgKi8NCj4g PiA+ICtzdGF0aWMgaW50IHhzZGlyeF9nZXRfc3RyZWFtX3Byb3BlcnRpZXMoc3RydWN0IHhzZGly eHNzX3N0YXRlICpzdGF0ZSkNCj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3Jl ICpjb3JlID0gJnN0YXRlLT5jb3JlOw0KPiA+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb3Jl LT5kZXY7DQo+ID4gPiArCXUzMiBtb2RlLCBwYXlsb2FkID0gMCwgdmFsLCBmYW1pbHksIHZhbGlk LCB0c2NhbjsNCj4gPiA+ICsJdTggYnl0ZTEgPSAwLCBhY3RpdmVfbHVtYSA9IDAsIHBpY190eXBl ID0gMCwgZnJhbWVyYXRlID0gMDsNCj4gPiA+ICsJdTggc2FtcGxpbmcgPSBYU1QzNTJfQllURTNf Q09MT1JfRk9STUFUXzQyMjsNCj4gPiA+ICsJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm9y bWF0ID0gJnN0YXRlLT5mb3JtYXQ7DQo+ID4gPiArCXUzMiBicGMgPSBYU1QzNTJfQllURTRfQklU X0RFUFRIXzEwOw0KPiA+ID4gKw0KPiA+ID4gKwltb2RlID0geHNkaXJ4c3NfcmVhZChjb3JlLCBY U0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOw0KPiA+ID4gKwltb2RlICY9IFhTRElSWF9NT0RFX0RF VF9TVEFUX1JYX01PREVfTUFTSzsNCj4gPiA+ICsNCj4gPiA+ICsJdmFsaWQgPSB4c2Rpcnhzc19y ZWFkKGNvcmUsIFhTRElSWF9TVDM1Ml9WQUxJRF9SRUcpOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAo bW9kZSA+PSBYU0RJUlhfTU9ERV8zR19NQVNLICYmICF2YWxpZCkgew0KPiA+ID4gKwkJZGV2X2Vy cihkZXYsICJObyB2YWxpZCBTVDM1MiBwYXlsb2FkIHByZXNlbnQgZXZlbiBmb3IgM0cNCj4gPiBt b2RlIGFuZCBhYm92ZVxuIik7DQo+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ICsJfQ0K PiA+ID4gKw0KPiA+ID4gKwl2YWwgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9UU19ERVRf U1RBVF9SRUcpOw0KPiA+ID4gKwlpZiAodmFsaWQgJiBYU0RJUlhfU1QzNTJfVkFMSURfRFMxX01B U0spIHsNCj4gPiA+ICsJCXBheWxvYWQgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9TVDM1 Ml9EUzFfUkVHKTsNCj4gPiA+ICsJCWJ5dGUxID0gcnNoaWZ0X2FuZF9tYXNrKHBheWxvYWQsIFhT VDM1Ml9QQVlMT0FEX0JZVEUxKTsNCj4gPiA+ICsJCWFjdGl2ZV9sdW1hID0gbWFza19hbmRfcnNo aWZ0KHBheWxvYWQsDQo+ID4gPiArDQo+ID4gWFNUMzUyX0JZVEUzX0FDVF9MVU1BX0NPVU5UKTsN Cj4gPiA+ICsJCXBpY190eXBlID0gbWFza19hbmRfcnNoaWZ0KHBheWxvYWQsDQo+ID4gWFNUMzUy X0JZVEUyX1BJQ19UWVBFKTsNCj4gPiA+ICsJCWZyYW1lcmF0ZSA9IHJzaGlmdF9hbmRfbWFzayhw YXlsb2FkLCBYU1QzNTJfQllURTJfRlBTKTsNCj4gPiA+ICsJCXRzY2FuID0gbWFza19hbmRfcnNo aWZ0KHBheWxvYWQsIFhTVDM1Ml9CWVRFMl9UU19UWVBFKTsNCj4gPiA+ICsJCXNhbXBsaW5nID0g bWFza19hbmRfcnNoaWZ0KHBheWxvYWQsDQo+ID4gWFNUMzUyX0JZVEUzX0NPTE9SX0ZPUk1BVCk7 DQo+ID4gPiArCQlicGMgPSBtYXNrX2FuZF9yc2hpZnQocGF5bG9hZCwgWFNUMzUyX0JZVEU0X0JJ VF9ERVBUSCk7DQo+ID4gPiArCX0gZWxzZSB7DQo+ID4gPiArCQlkZXZfZGJnKGRldiwgIk5vIFNU MzUyIHBheWxvYWQgYXZhaWxhYmxlIDogTW9kZSA9ICVkXG4iLA0KPiA+IG1vZGUpOw0KPiA+ID4g KwkJZnJhbWVyYXRlID0gbWFza19hbmRfcnNoaWZ0KHZhbCwNCj4gPiBYU0RJUlhfVFNfREVUX1NU QVRfUkFURSk7DQo+ID4gPiArCQl0c2NhbiA9IG1hc2tfYW5kX3JzaGlmdCh2YWwsIFhTRElSWF9U U19ERVRfU1RBVF9TQ0FOKTsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoKGJwYyA9 PSBYU1QzNTJfQllURTRfQklUX0RFUFRIXzEwICYmIGNvcmUtPmJwYyAhPSAxMCkgfHwNCj4gPiA+ ICsJICAgIChicGMgPT0gWFNUMzUyX0JZVEU0X0JJVF9ERVBUSF8xMiAmJiBjb3JlLT5icGMgIT0g MTIpKSB7DQo+ID4gPiArCQlkZXZfZGJnKGRldiwgIkJpdCBkZXB0aCBub3Qgc3VwcG9ydGVkLiBi cGMgPSAlZCBjb3JlLT5icGMgPQ0KPiA+ICVkXG4iLA0KPiA+ID4gKwkJCWJwYywgY29yZS0+YnBj KTsNCj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiAr CWZhbWlseSA9IG1hc2tfYW5kX3JzaGlmdCh2YWwsIFhTRElSWF9UU19ERVRfU1RBVF9GQU1JTFkp Ow0KPiA+ID4gKwlzdGF0ZS0+dHNfaXNfaW50ZXJsYWNlZCA9IHRzY2FuID8gZmFsc2UgOiB0cnVl Ow0KPiA+ID4gKw0KPiA+ID4gKwlkZXZfZGJnKGRldiwgInRzX2lzX2ludGVybGFjZWQgPSAlZCwg ZmFtaWx5ID0gJWRcbiIsDQo+ID4gPiArCQlzdGF0ZS0+dHNfaXNfaW50ZXJsYWNlZCwgZmFtaWx5 KTsNCj4gPiA+ICsNCj4gPiA+ICsJc3dpdGNoIChtb2RlKSB7DQo+ID4gPiArCWNhc2UgWFNESVJY X01PREVfSERfTUFTSzoNCj4gPiA+ICsJCWlmICghdmFsaWQpIHsNCj4gPiA+ICsJCQkvKiBObyBw YXlsb2FkIG9idGFpbmVkICovDQo+ID4gPiArCQkJZGV2X2RiZyhkZXYsICJmcmFtZSByYXRlIDog JWQsIHRzY2FuID0gJWRcbiIsDQo+ID4gPiArCQkJCWZyYW1lcmF0ZSwgdHNjYW4pOw0KPiA+ID4g KwkJCS8qDQo+ID4gPiArCQkJICogTk9URSA6IEEgcHJvZ3Jlc3NpdmUgc2VnbWVudGVkIGZyYW1l IHBTRiB3aWxsIGJlDQo+ID4gPiArCQkJICogcmVwb3J0ZWQgaW5jb3JyZWN0bHkgYXMgSW50ZXJs YWNlZCBhcyB3ZSByZWx5IG9uIElQJ3MNCj4gPiA+ICsJCQkgKiB0cmFuc3BvcnQgc2NhbiBsb2Nr ZWQgYml0Lg0KPiA+ID4gKwkJCSAqLw0KPiA+ID4gKwkJCWRldl93YXJuKGRldiwgInBTRiB3aWxs IGJlIGluY29ycmVjdGx5IHJlcG9ydGVkIGFzDQo+ID4gSW50ZXJsYWNlZFxuIik7DQo+ID4gPiAr DQo+ID4gPiArCQkJc3dpdGNoIChmcmFtZXJhdGUpIHsNCj4gPiA+ICsJCQljYXNlIFhTRElSWF9U U19ERVRfU1RBVF9SQVRFXzIzXzk4SFo6DQo+ID4gPiArCQkJY2FzZSBYU0RJUlhfVFNfREVUX1NU QVRfUkFURV8yNEhaOg0KPiA+ID4gKwkJCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfMjVI WjoNCj4gPiA+ICsJCQljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI5Xzk3SFo6DQo+ID4g PiArCQkJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8zMEhaOg0KPiA+ID4gKwkJCQlpZiAo ZmFtaWx5ID09IFhTRElSWF9TTVBURV9TVF8yOTYpIHsNCj4gPiA+ICsJCQkJCWZvcm1hdC0+d2lk dGggPSAxMjgwOw0KPiA+ID4gKwkJCQkJZm9ybWF0LT5oZWlnaHQgPSA3MjA7DQo+ID4gPiArCQkJ CQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KPiA+ID4gKwkJCQl9IGVsc2UgaWYg KGZhbWlseSA9PSBYU0RJUlhfU01QVEVfU1RfMjA0OF8yKQ0KPiA+IHsNCj4gPiA+ICsJCQkJCWZv cm1hdC0+d2lkdGggPSAyMDQ4Ow0KPiA+ID4gKwkJCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOw0K PiA+ID4gKwkJCQkJaWYgKHRzY2FuKQ0KPiA+ID4gKwkJCQkJCWZvcm1hdC0+ZmllbGQgPQ0KPiA+ IFY0TDJfRklFTERfTk9ORTsNCj4gPiA+ICsJCQkJCWVsc2UNCj4gPiA+ICsJCQkJCQlmb3JtYXQt PmZpZWxkID0NCj4gPiA+ICsNCj4gPiAJVjRMMl9GSUVMRF9BTFRFUk5BVEU7DQo+ID4gPiArCQkJ CX0gZWxzZSB7DQo+ID4gPiArCQkJCQlmb3JtYXQtPndpZHRoID0gMTkyMDsNCj4gPiA+ICsJCQkJ CWZvcm1hdC0+aGVpZ2h0ID0gMTA4MDsNCj4gPiA+ICsJCQkJCWlmICh0c2NhbikNCj4gPiA+ICsJ CQkJCQlmb3JtYXQtPmZpZWxkID0NCj4gPiBWNEwyX0ZJRUxEX05PTkU7DQo+ID4gPiArCQkJCQll bHNlDQo+ID4gPiArCQkJCQkJZm9ybWF0LT5maWVsZCA9DQo+ID4gPiArDQo+ID4gCVY0TDJfRklF TERfQUxURVJOQVRFOw0KPiA+ID4gKwkJCQl9DQo+ID4gPiArCQkJCWJyZWFrOw0KPiA+ID4gKwkJ CWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfNTBIWjoNCj4gPiA+ICsJCQljYXNlIFhTRElS WF9UU19ERVRfU1RBVF9SQVRFXzU5Xzk0SFo6DQo+ID4gPiArCQkJY2FzZSBYU0RJUlhfVFNfREVU X1NUQVRfUkFURV82MEhaOg0KPiA+ID4gKwkJCQlpZiAoZmFtaWx5ID09IFhTRElSWF9TTVBURV9T VF8yNzQpIHsNCj4gPiA+ICsJCQkJCWZvcm1hdC0+d2lkdGggPSAxOTIwOw0KPiA+ID4gKwkJCQkJ Zm9ybWF0LT5oZWlnaHQgPSAxMDgwOw0KPiA+ID4gKwkJCQl9IGVsc2Ugew0KPiA+ID4gKwkJCQkJ Zm9ybWF0LT53aWR0aCA9IDEyODA7DQo+ID4gPiArCQkJCQlmb3JtYXQtPmhlaWdodCA9IDcyMDsN Cj4gPiA+ICsJCQkJfQ0KPiA+ID4gKwkJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05F Ow0KPiA+ID4gKwkJCQlicmVhazsNCj4gPiA+ICsJCQlkZWZhdWx0Og0KPiA+ID4gKwkJCQlmb3Jt YXQtPndpZHRoID0gMTkyMDsNCj4gPiA+ICsJCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOw0KPiA+ ID4gKwkJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KPiA+ID4gKwkJCX0NCj4g PiA+ICsJCX0gZWxzZSB7DQo+ID4gPiArCQkJZGV2X2RiZyhkZXYsICJHb3QgdGhlIHBheWxvYWRc biIpOw0KPiA+ID4gKwkJCXN3aXRjaCAoYnl0ZTEpIHsNCj4gPiA+ICsJCQljYXNlIFhTVDM1Ml9C WVRFMV9TVDI5Ml8xeDcyMExfMV81RzoNCj4gPiA+ICsJCQkJLyogU01QVEUgU1QgMjkyLTEgZm9y IDcyMCBsaW5lIHBheWxvYWRzICovDQo+ID4gPiArCQkJCWZvcm1hdC0+d2lkdGggPSAxMjgwOw0K PiA+ID4gKwkJCQlmb3JtYXQtPmhlaWdodCA9IDcyMDsNCj4gPiA+ICsJCQkJYnJlYWs7DQo+ID4g PiArCQkJY2FzZSBYU1QzNTJfQllURTFfU1QyOTJfMXgxMDgwTF8xXzVHOg0KPiA+ID4gKwkJCQkv KiBTTVBURSBTVCAyOTItMSBmb3IgMTA4MCBsaW5lIHBheWxvYWRzICovDQo+ID4gPiArCQkJCWZv cm1hdC0+aGVpZ2h0ID0gMTA4MDsNCj4gPiA+ICsJCQkJaWYgKGFjdGl2ZV9sdW1hKQ0KPiA+ID4g KwkJCQkJZm9ybWF0LT53aWR0aCA9IDIwNDg7DQo+ID4gPiArCQkJCWVsc2UNCj4gPiA+ICsJCQkJ CWZvcm1hdC0+d2lkdGggPSAxOTIwOw0KPiA+ID4gKwkJCQlicmVhazsNCj4gPiA+ICsJCQlkZWZh dWx0Og0KPiA+ID4gKwkJCQlkZXZfZGJnKGRldiwgIlVua25vd24gSEQgTW9kZSBTTVBURQ0KPiA+ IHN0YW5kYXJkXG4iKTsNCj4gPiA+ICsJCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiArCQkJfQ0K PiA+ID4gKwkJfQ0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNhc2UgWFNESVJYX01PREVfU0Rf TUFTSzoNCj4gPiA+ICsJCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0FMVEVSTkFURTsNCj4g PiA+ICsNCj4gPiA+ICsJCXN3aXRjaCAoZmFtaWx5KSB7DQo+ID4gPiArCQljYXNlIFhTRElSWF9O VFNDOg0KPiA+ID4gKwkJCWZvcm1hdC0+d2lkdGggPSA3MjA7DQo+ID4gPiArCQkJZm9ybWF0LT5o ZWlnaHQgPSA0ODY7DQo+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiArCQljYXNlIFhTRElSWF9QQUw6 DQo+ID4gPiArCQkJZm9ybWF0LT53aWR0aCA9IDcyMDsNCj4gPiA+ICsJCQlmb3JtYXQtPmhlaWdo dCA9IDU3NjsNCj4gPiA+ICsJCQlicmVhazsNCj4gPiA+ICsJCWRlZmF1bHQ6DQo+ID4gPiArCQkJ ZGV2X2RiZyhkZXYsICJVbmtub3duIFNEIE1vZGUgU01QVEUgc3RhbmRhcmRcbiIpOw0KPiA+ID4g KwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4gKwkJfQ0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiAr CWNhc2UgWFNESVJYX01PREVfM0dfTUFTSzoNCj4gPiA+ICsJCXN3aXRjaCAoYnl0ZTEpIHsNCj4g PiA+ICsJCWNhc2UgWFNUMzUyX0JZVEUxX1NUNDI1XzIwMDhfNzUwTF8zR0I6DQo+ID4gPiArCQkJ LyogU2VjIDQuMS42LjEgU01QVEUgNDI1LTIwMDggKi8NCj4gPiA+ICsJCWNhc2UgWFNUMzUyX0JZ VEUxX1NUMzcyXzJ4NzIwTF8zR0I6DQo+ID4gPiArCQkJLyogVGFibGUgMTMgU01QVEUgNDI1LTIw MDggKi8NCj4gPiA+ICsJCQlmb3JtYXQtPndpZHRoID0gMTI4MDsNCj4gPiA+ICsJCQlmb3JtYXQt PmhlaWdodCA9IDcyMDsNCj4gPiA+ICsJCQlicmVhazsNCj4gPiA+ICsJCWNhc2UgWFNUMzUyX0JZ VEUxX1NUNDI1XzIwMDhfMTEyNUxfM0dBOg0KPiA+ID4gKwkJCS8qIFNUMzUyIFRhYmxlIFNNUFRF IDQyNS0xICovDQo+ID4gPiArCQljYXNlIFhTVDM1Ml9CWVRFMV9TVDM3Ml9ETF8zR0I6DQo+ID4g PiArCQkJLyogVGFibGUgMTMgU01QVEUgNDI1LTIwMDggKi8NCj4gPiA+ICsJCWNhc2UgWFNUMzUy X0JZVEUxX1NUMzcyXzJ4MTA4MExfM0dCOg0KPiA+ID4gKwkJCS8qIFRhYmxlIDEzIFNNUFRFIDQy NS0yMDA4ICovDQo+ID4gPiArCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOw0KPiA+ID4gKwkJCWlm IChhY3RpdmVfbHVtYSkNCj4gPiA+ICsJCQkJZm9ybWF0LT53aWR0aCA9IDIwNDg7DQo+ID4gPiAr CQkJZWxzZQ0KPiA+ID4gKwkJCQlmb3JtYXQtPndpZHRoID0gMTkyMDsNCj4gPiA+ICsJCQlicmVh azsNCj4gPiA+ICsJCWRlZmF1bHQ6DQo+ID4gPiArCQkJZGV2X2RiZyhkZXYsICJVbmtub3duIDNH IE1vZGUgU01QVEUgc3RhbmRhcmRcbiIpOw0KPiA+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ ID4gKwkJfQ0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNhc2UgWFNESVJYX01PREVfNkdfTUFT SzoNCj4gPiA+ICsJCXN3aXRjaCAoYnl0ZTEpIHsNCj4gPiA+ICsJCWNhc2UgWFNUMzUyX0JZVEUx X1NUMjA4MV8xMF9ETF8yMTYwTF82RzoNCj4gPiA+ICsJCQkvKiBEdWFsIGxpbmsgNkcgKi8NCj4g PiA+ICsJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMjA4MV8xMF8yMTYwTF82RzoNCj4gPiA+ICsJCQkv KiBUYWJsZSAzIFNNUFRFIFNUIDIwODEtMTAgKi8NCj4gPiA+ICsJCQlmb3JtYXQtPmhlaWdodCA9 IDIxNjA7DQo+ID4gPiArCQkJaWYgKGFjdGl2ZV9sdW1hKQ0KPiA+ID4gKwkJCQlmb3JtYXQtPndp ZHRoID0gNDA5NjsNCj4gPiA+ICsJCQllbHNlDQo+ID4gPiArCQkJCWZvcm1hdC0+d2lkdGggPSAz ODQwOw0KPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gKwkJY2FzZSBYU1QzNTJfQllURTFfU1QyMDgx XzEwXzJfMTA4MExfNkc6DQo+ID4gPiArCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOw0KPiA+ID4g KwkJCWlmIChhY3RpdmVfbHVtYSkNCj4gPiA+ICsJCQkJZm9ybWF0LT53aWR0aCA9IDIwNDg7DQo+ ID4gPiArCQkJZWxzZQ0KPiA+ID4gKwkJCQlmb3JtYXQtPndpZHRoID0gMTkyMDsNCj4gPiA+ICsJ CQlicmVhazsNCj4gPiA+ICsJCWRlZmF1bHQ6DQo+ID4gPiArCQkJZGV2X2RiZyhkZXYsICJVbmtu b3duIDZHIE1vZGUgU01QVEUgc3RhbmRhcmRcbiIpOw0KPiA+ID4gKwkJCXJldHVybiAtRUlOVkFM Ow0KPiA+ID4gKwkJfQ0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNhc2UgWFNESVJYX01PREVf MTJHSV9NQVNLOg0KPiA+ID4gKwljYXNlIFhTRElSWF9NT0RFXzEyR0ZfTUFTSzoNCj4gPiA+ICsJ CXN3aXRjaCAoYnl0ZTEpIHsNCj4gPiA+ICsJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMjA4Ml8xMF8y MTYwTF8xMkc6DQo+ID4gPiArCQkJLyogU2VjdGlvbiA0LjMuMSBTTVBURSBTVCAyMDgyLTEwICov DQo+ID4gPiArCQkJZm9ybWF0LT5oZWlnaHQgPSAyMTYwOw0KPiA+ID4gKwkJCWlmIChhY3RpdmVf bHVtYSkNCj4gPiA+ICsJCQkJZm9ybWF0LT53aWR0aCA9IDQwOTY7DQo+ID4gPiArCQkJZWxzZQ0K PiA+ID4gKwkJCQlmb3JtYXQtPndpZHRoID0gMzg0MDsNCj4gPiA+ICsJCQlicmVhazsNCj4gPiA+ ICsJCWRlZmF1bHQ6DQo+ID4gPiArCQkJZGV2X2RiZyhkZXYsICJVbmtub3duIDEyRyBNb2RlIFNN UFRFDQo+ID4gc3RhbmRhcmRcbiIpOw0KPiA+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4g KwkJfQ0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWRlZmF1bHQ6DQo+ID4gPiArCQlkZXZfZXJy KGRldiwgIkludmFsaWQgTW9kZVxuIik7DQo+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlpZiAodmFsaWQpIHsNCj4gPiA+ICsJCWlmIChwaWNfdHlw ZSkNCj4gPiA+ICsJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KPiA+ID4gKwkJ ZWxzZQ0KPiA+ID4gKwkJCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0FMVEVSTkFURTsNCj4g PiA+ICsNCj4gPiA+ICsJCWlmIChmb3JtYXQtPmhlaWdodCA9PSAxMDgwICYmIHBpY190eXBlICYm ICF0c2NhbikNCj4gPiA+ICsJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9BTFRFUk5BVEU7 DQo+ID4gPiArDQo+ID4gPiArCQkvKg0KPiA+ID4gKwkJICogSW4gM0dCIERMIHBTRiBtb2RlIHRo ZSB2aWRlbyBpcyBzaW1pbGFyIHRvIGludGVybGFjZWQuDQo+ID4gPiArCQkgKiBTbyB0aG91Z2gg aXQgaXMgYSBwcm9ncmVzc2l2ZSB2aWRlbywgaXRzIHRyYW5zcG9ydCBpcw0KPiA+ID4gKwkJICog aW50ZXJsYWNlZCBhbmQgaXMgc2VudCBhcyB0d28gd2lkdGggeCAoaGVpZ2h0LzIpIGJ1ZmZlcnMu DQo+ID4gPiArCQkgKi8NCj4gPiA+ICsJCWlmIChieXRlMSA9PSBYU1QzNTJfQllURTFfU1QzNzJf RExfM0dCKSB7DQo+ID4gPiArCQkJaWYgKHN0YXRlLT50c19pc19pbnRlcmxhY2VkKQ0KPiA+ID4g KwkJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9BTFRFUk5BVEU7DQo+ID4gPiArCQkJZWxz ZQ0KPiA+ID4gKwkJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KPiA+ID4gKwkJ fQ0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCWlmIChmb3JtYXQtPmZpZWxkID09IFY0TDJf RklFTERfQUxURVJOQVRFKQ0KPiA+ID4gKwkJZm9ybWF0LT5oZWlnaHQgPSBmb3JtYXQtPmhlaWdo dCAvIDI7DQo+ID4gPiArDQo+ID4gPiArCXN3aXRjaCAoc2FtcGxpbmcpIHsNCj4gPiA+ICsJY2Fz ZSBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFUXzQyMjoNCj4gPiA+ICsJCWlmIChjb3JlLT5icGMg PT0gMTApDQo+ID4gPiArCQkJZm9ybWF0LT5jb2RlID0gTUVESUFfQlVTX0ZNVF9VWVZZMTBfMVgy MDsNCj4gPiA+ICsJCWVsc2UNCj4gPiA+ICsJCQlmb3JtYXQtPmNvZGUgPSBNRURJQV9CVVNfRk1U X1VZVlkxMl8xWDI0Ow0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNhc2UgWFNUMzUyX0JZVEUz X0NPTE9SX0ZPUk1BVF80MjA6DQo+ID4gPiArCWNhc2UgWFNUMzUyX0JZVEUzX0NPTE9SX0ZPUk1B VF9ZVVY0NDQ6DQo+ID4gPiArCWNhc2UgWFNUMzUyX0JZVEUzX0NPTE9SX0ZPUk1BVF9HQlI6DQo+ ID4gPiArCQlmb3JtYXQtPmNvZGUgPSAwOw0KPiA+ID4gKwkJZGV2X2RiZyhkZXYsICJObyBjb3Jy ZXNwb25kaW5nIG1lZGlhIGJ1cyBmb3JtYXRzXG4iKTsNCj4gPiA+ICsJCWJyZWFrOw0KPiA+ID4g KwlkZWZhdWx0Og0KPiA+ID4gKwkJZGV2X2VycihkZXYsICJVbnN1cHBvcnRlZCBjb2xvciBmb3Jt YXQgOiAlZFxuIiwgc2FtcGxpbmcpOw0KPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiAr CX0NCj4gPiA+ICsNCj4gPiA+ICsJeHNkaXJ4c3NfZ2V0X2ZyYW1lcmF0ZSgmc3RhdGUtPmZyYW1l X2ludGVydmFsLCBmcmFtZXJhdGUpOw0KPiA+ID4gKw0KPiA+ID4gKwlkZXZfZGJnKGRldiwgIlN0 cmVhbSB3aWR0aCA9ICVkIGhlaWdodCA9ICVkIEZpZWxkID0gJWQgcGF5bG9hZCA9DQo+ID4gMHgl MDh4IHRzID0gMHglMDh4XG4iLA0KPiA+ID4gKwkJZm9ybWF0LT53aWR0aCwgZm9ybWF0LT5oZWln aHQsIGZvcm1hdC0+ZmllbGQsIHBheWxvYWQsIHZhbCk7DQo+ID4gPiArCWRldl9kYmcoZGV2LCAi ZnJhbWUgcmF0ZSBudW1lcmF0b3IgPSAlZCBkZW5vbWluYXRvciA9ICVkXG4iLA0KPiA+ID4gKwkJ c3RhdGUtPmZyYW1lX2ludGVydmFsLm51bWVyYXRvciwNCj4gPiA+ICsJCXN0YXRlLT5mcmFtZV9p bnRlcnZhbC5kZW5vbWluYXRvcik7DQo+ID4gPiArCWRldl9kYmcoZGV2LCAiU3RyZWFtIGNvZGUg PSAweCV4XG4iLCBmb3JtYXQtPmNvZGUpOw0KPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ICt9DQo+ ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogeHNkaXJ4c3NfaXJxX2hhbmRsZXIgLSBJbnRl cnJ1cHQgaGFuZGxlciBmb3IgU0RJIFJ4DQo+ID4gPiArICogQGlycTogSVJRIG51bWJlcg0KPiA+ ID4gKyAqIEBkZXZfaWQ6IFBvaW50ZXIgdG8gZGV2aWNlIHN0YXRlDQo+ID4gPiArICoNCj4gPiA+ ICsgKiBUaGUgU0RJIFJ4IGludGVycnVwdHMgYXJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGNv cnJlc3BvbmRpbmcgYml0Lg0KPiA+ID4gKyAqDQo+ID4gPiArICogUmV0dXJuOiBJUlFfSEFORExF RCBhZnRlciBoYW5kbGluZyBpbnRlcnJ1cHRzDQo+ID4gPiArICovDQo+ID4gPiArc3RhdGljIGly cXJldHVybl90IHhzZGlyeHNzX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkNCj4g PiA+ICt7DQo+ID4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHhz ZGlyeHNzX3N0YXRlICopZGV2X2lkOw0KPiA+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29y ZSA9ICZzdGF0ZS0+Y29yZTsNCj4gPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY29yZS0+ZGV2 Ow0KPiA+ID4gKwl1MzIgc3RhdHVzOw0KPiA+ID4gKw0KPiA+ID4gKwlzdGF0dXMgPSB4c2Rpcnhz c19yZWFkKGNvcmUsIFhTRElSWF9JU1JfUkVHKTsNCj4gPiA+ICsJeHNkaXJ4c3Nfd3JpdGUoY29y ZSwgWFNESVJYX0lTUl9SRUcsIHN0YXR1cyk7DQo+ID4gPiArCWRldl9kYmcoZGV2LCAiaW50ZXJy dXB0IHN0YXR1cyA9IDB4JTA4eFxuIiwgc3RhdHVzKTsNCj4gPiA+ICsNCj4gPiA+ICsJaWYgKHN0 YXR1cyAmIFhTRElSWF9JTlRSX1ZJRExPQ0tfTUFTSyB8fA0KPiA+ID4gKwkgICAgc3RhdHVzICYg WFNESVJYX0lOVFJfVklEVU5MT0NLX01BU0spIHsNCj4gPiA+ICsJCXUzMiB2YWwxLCB2YWwyOw0K PiA+ID4gKw0KPiA+ID4gKwkJZGV2X2RiZyhkZXYsICJ2aWRlbyBsb2NrL3VubG9jayBpbnRlcnJ1 cHRcbiIpOw0KPiA+ID4gKw0KPiA+ID4gKwkJeHNkaXJ4X3N0cmVhbWZsb3dfY29udHJvbChjb3Jl LCBmYWxzZSk7DQo+ID4gPiArCQlzdGF0ZS0+c3RyZWFtaW5nID0gZmFsc2U7DQo+ID4gPiArDQo+ ID4gPiArCQl2YWwxID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9S RUcpOw0KPiA+ID4gKwkJdmFsMiA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX1RTX0RFVF9T VEFUX1JFRyk7DQo+ID4gPiArDQo+ID4gPiArCQlpZiAoKHZhbDEgJiBYU0RJUlhfTU9ERV9ERVRf U1RBVF9NT0RFX0xPQ0tfTUFTSykgJiYNCj4gPiA+ICsJCSAgICAodmFsMiAmIFhTRElSWF9UU19E RVRfU1RBVF9MT0NLRURfTUFTSykpIHsNCj4gPiA+ICsJCQl1MzIgbWFzayA9DQo+ID4gWFNESVJY X1JTVF9DVFJMX1JTVF9DUkNfRVJSQ05UX01BU0sgfA0KPiA+ID4gKw0KPiA+IFhTRElSWF9SU1Rf Q1RSTF9SU1RfRURIX0VSUkNOVF9NQVNLOw0KPiA+ID4gKw0KPiA+ID4gKwkJCWRldl9kYmcoZGV2 LCAidmlkZW8gbG9jayBpbnRlcnJ1cHRcbiIpOw0KPiA+ID4gKw0KPiA+ID4gKwkJCXhzZGlyeHNz X3NldChjb3JlLCBYU0RJUlhfUlNUX0NUUkxfUkVHLCBtYXNrKTsNCj4gPiA+ICsJCQl4c2Rpcnhz c19jbHIoY29yZSwgWFNESVJYX1JTVF9DVFJMX1JFRywgbWFzayk7DQo+ID4gPiArDQo+ID4gPiAr CQkJdmFsMSA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX1NUMzUyX1ZBTElEX1JFRyk7DQo+ ID4gPiArCQkJdmFsMiA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX1NUMzUyX0RTMV9SRUcp Ow0KPiA+ID4gKw0KPiA+ID4gKwkJCWRldl9kYmcoZGV2LCAidmFsaWQgc3QzNTIgbWFzayA9IDB4 JTA4eFxuIiwgdmFsMSk7DQo+ID4gPiArCQkJZGV2X2RiZyhkZXYsICJzdDM1MiBwYXlsb2FkID0g MHglMDh4XG4iLCB2YWwyKTsNCj4gPiA+ICsNCj4gPiA+ICsJCQlpZiAoIXhzZGlyeF9nZXRfc3Ry ZWFtX3Byb3BlcnRpZXMoc3RhdGUpKSB7DQo+ID4gPiArCQkJCXN0YXRlLT52aWRsb2NrZWQgPSB0 cnVlOw0KPiA+ID4gKwkJCQl4c2Rpcnhzc19zZXRfZ3RjbGsoc3RhdGUpOw0KPiA+ID4gKwkJCX0g ZWxzZSB7DQo+ID4gPiArCQkJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGdldCBzdHJlYW0NCj4g PiBwcm9wZXJ0aWVzIVxuIik7DQo+ID4gPiArCQkJCXN0YXRlLT52aWRsb2NrZWQgPSBmYWxzZTsN Cj4gPiA+ICsJCQl9DQo+ID4gPiArCQl9IGVsc2Ugew0KPiA+ID4gKwkJCWRldl9kYmcoZGV2LCAi dmlkZW8gdW5sb2NrIGludGVycnVwdFxuIik7DQo+ID4gPiArCQkJc3RhdGUtPnZpZGxvY2tlZCA9 IGZhbHNlOw0KPiA+ID4gKwkJfQ0KPiA+ID4gKw0KPiA+ID4gKwkJbWVtc2V0KCZzdGF0ZS0+ZXZl bnQsIDAsIHNpemVvZihzdGF0ZS0+ZXZlbnQpKTsNCj4gPiA+ICsJCXN0YXRlLT5ldmVudC50eXBl ID0gVjRMMl9FVkVOVF9TT1VSQ0VfQ0hBTkdFOw0KPiA+ID4gKwkJc3RhdGUtPmV2ZW50LnUuc3Jj X2NoYW5nZS5jaGFuZ2VzID0NCj4gPiA+ICsJCQlWNEwyX0VWRU5UX1NSQ19DSF9SRVNPTFVUSU9O Ow0KPiA+ID4gKwkJdjRsMl9zdWJkZXZfbm90aWZ5X2V2ZW50KCZzdGF0ZS0+c3ViZGV2LCAmc3Rh dGUtPmV2ZW50KTsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoc3RhdHVzICYgWFNE SVJYX0lOVFJfVU5ERVJGTE9XX01BU0spIHsNCj4gPiA+ICsJCWRldl9kYmcoZGV2LCAiVmlkZW8g aW4gdG8gQVhJNCBTdHJlYW0gY29yZSB1bmRlcmZsb3cNCj4gPiBpbnRlcnJ1cHRcbiIpOw0KPiA+ ID4gKw0KPiA+ID4gKwkJbWVtc2V0KCZzdGF0ZS0+ZXZlbnQsIDAsIHNpemVvZihzdGF0ZS0+ZXZl bnQpKTsNCj4gPiA+ICsJCXN0YXRlLT5ldmVudC50eXBlID0gVjRMMl9FVkVOVF9YSUxJTlhfU0RJ UlhfVU5ERVJGTE9XOw0KPiA+ID4gKwkJdjRsMl9zdWJkZXZfbm90aWZ5X2V2ZW50KCZzdGF0ZS0+ c3ViZGV2LCAmc3RhdGUtPmV2ZW50KTsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlpZiAo c3RhdHVzICYgWFNESVJYX0lOVFJfT1ZFUkZMT1dfTUFTSykgew0KPiA+ID4gKwkJZGV2X2RiZyhk ZXYsICJWaWRlbyBpbiB0byBBWEk0IFN0cmVhbSBjb3JlIG92ZXJmbG93DQo+ID4gaW50ZXJydXB0 XG4iKTsNCj4gPiA+ICsNCj4gPiA+ICsJCW1lbXNldCgmc3RhdGUtPmV2ZW50LCAwLCBzaXplb2Yo c3RhdGUtPmV2ZW50KSk7DQo+ID4gPiArCQlzdGF0ZS0+ZXZlbnQudHlwZSA9IFY0TDJfRVZFTlRf WElMSU5YX1NESVJYX09WRVJGTE9XOw0KPiA+ID4gKwkJdjRsMl9zdWJkZXZfbm90aWZ5X2V2ZW50 KCZzdGF0ZS0+c3ViZGV2LCAmc3RhdGUtPmV2ZW50KTsNCj4gPiA+ICsJfQ0KPiA+ID4gKwlyZXR1 cm4gSVJRX0hBTkRMRUQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAq IHhzZGlyeHNzX3N1YnNjcmliZV9ldmVudCAtIFN1YnNjcmliZSB0byB2aWRlbyBsb2NrIGFuZCB1 bmxvY2sgZXZlbnQNCj4gPiA+ICsgKiBAc2Q6IFY0TDIgU3ViIGRldmljZQ0KPiA+ID4gKyAqIEBm aDogVjRMMiBGaWxlIEhhbmRsZQ0KPiA+ID4gKyAqIEBzdWI6IFN1YmNyaWJlIGV2ZW50IHN0cnVj dHVyZQ0KPiA+ID4gKyAqDQo+ID4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9ycyBv dGhlcndpc2UNCj4gPiA+ICsgKi8NCj4gPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX3N1YnNjcmli ZV9ldmVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ID4gKwkJCQkgICAgc3RydWN0IHY0 bDJfZmggKmZoLA0KPiA+ID4gKwkJCQkgICAgc3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9u ICpzdWIpDQo+ID4gPiArew0KPiA+ID4gKwlpbnQgcmV0Ow0KPiA+ID4gKwlzdHJ1Y3QgeHNkaXJ4 c3Nfc3RhdGUgKnhzZGlyeHNzID0gdG9feHNkaXJ4c3NzdGF0ZShzZCk7DQo+ID4gPiArCXN0cnVj dCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5jb3JlOw0KPiA+ID4gKw0KPiA+ID4g Kwlzd2l0Y2ggKHN1Yi0+dHlwZSkgew0KPiA+ID4gKwljYXNlIFY0TDJfRVZFTlRfWElMSU5YX1NE SVJYX1VOREVSRkxPVzoNCj4gPiA+ICsJY2FzZSBWNEwyX0VWRU5UX1hJTElOWF9TRElSWF9PVkVS RkxPVzoNCj4gPiA+ICsJCXJldCA9IHY0bDJfZXZlbnRfc3Vic2NyaWJlKGZoLCBzdWIsIFhTRElS WF9NQVhfRVZFTlRTLA0KPiA+IE5VTEwpOw0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNhc2Ug VjRMMl9FVkVOVF9TT1VSQ0VfQ0hBTkdFOg0KPiA+ID4gKwkJcmV0ID0gdjRsMl9zcmNfY2hhbmdl X2V2ZW50X3N1YnNjcmliZShmaCwgc3ViKTsNCj4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gKwlkZWZh dWx0Og0KPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4NCj4gPiBUaGlzIHNob3VsZCBjYWxs IHY0bDJfY3RybF9zdWJzY3JpYmVfZXZlbnQgaW5zdGVhZCwgb3RoZXJ3aXNlIGNvbnRyb2wgZXZl bnRzDQo+ID4gd291bGRuJ3QgYmUgc3VwcG9ydGVkLg0KPiA+DQo+IA0KPiBPayBJIHdpbGwgYWRk IHY0bDJfY3RybF9zdWJzY3JpYmVfZXZlbnQoKSBoZXJlLg0KPiANCj4gPiA+ICsJfQ0KPiA+ID4g KwlkZXZfZGJnKGNvcmUtPmRldiwgIkV2ZW50IHN1YnNjcmliZWQgOiAweCUwOHhcbiIsIHN1Yi0+ dHlwZSk7DQo+ID4gPiArCXJldHVybiByZXQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8q Kg0KPiA+ID4gKyAqIHhzZGlyeHNzX3Vuc3Vic2NyaWJlX2V2ZW50IC0gVW5zdWJzY3JpYmUgZnJv bSBhbGwgZXZlbnRzIHJlZ2lzdGVyZWQNCj4gPiA+ICsgKiBAc2Q6IFY0TDIgU3ViIGRldmljZQ0K PiA+ID4gKyAqIEBmaDogVjRMMiBmaWxlIGhhbmRsZQ0KPiA+ID4gKyAqIEBzdWI6IHBvaW50ZXIg dG8gRXZlbnQgdW5zdWJzY3JpcHRpb24gc3RydWN0dXJlDQo+ID4gPiArICoNCj4gPiA+ICsgKiBS ZXR1cm46IHplcm8gb24gc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuDQo+ID4g PiArICovDQo+ID4gPiArc3RhdGljIGludCB4c2Rpcnhzc191bnN1YnNjcmliZV9ldmVudChzdHJ1 Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ID4gKwkJCQkgICAgICBzdHJ1Y3QgdjRsMl9maCAqZmgs DQo+ID4gPiArCQkJCSAgICAgIHN0cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbiAqc3ViKQ0K PiA+ID4gK3sNCj4gPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcyA9IHRvX3hz ZGlyeHNzc3RhdGUoc2QpOw0KPiA+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSA9ICZ4 c2Rpcnhzcy0+Y29yZTsNCj4gPiA+ICsNCj4gPiA+ICsJZGV2X2RiZyhjb3JlLT5kZXYsICJFdmVu dCB1bnN1YnNjcmliZSA6IDB4JTA4eFxuIiwgc3ViLT50eXBlKTsNCj4gPiA+ICsJcmV0dXJuIHY0 bDJfZXZlbnRfdW5zdWJzY3JpYmUoZmgsIHN1Yik7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4g Ky8qKg0KPiA+ID4gKyAqIHhzZGlyeHNzX3NfY3RybCAtIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhl IFhpbGlueCBTREkgUnggVjRMMiBjb250cm9scw0KPiA+ID4gKyAqIEBjdHJsOiBWNEwyIGNvbnRy b2wgdG8gYmUgc2V0DQo+ID4gPiArICoNCj4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQg dG8gc2V0IHRoZSBWNEwyIGNvbnRyb2xzIGZvciB0aGUgWGlsaW54IFNESSBSeA0KPiA+ID4gKyAq IFN1YnN5c3RlbS4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBl cnJvcnMgb3RoZXJ3aXNlDQo+ID4gPiArICovDQo+ID4gPiArc3RhdGljIGludCB4c2Rpcnhzc19z X2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkNCj4gPiA+ICt7DQo+ID4gPiArCWludCByZXQg PSAwOw0KPiA+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0NCj4gPiA+ICsJ CWNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUsDQo+ID4g PiArCQkJICAgICBjdHJsX2hhbmRsZXIpOw0KPiA+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAq Y29yZSA9ICZ4c2Rpcnhzcy0+Y29yZTsNCj4gPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY29y ZS0+ZGV2Ow0KPiA+ID4gKw0KPiA+ID4gKwlkZXZfZGJnKGRldiwgInNldCBjdHJsIGlkID0gMHgl MDh4IHZhbCA9IDB4JTA4eFxuIiwNCj4gPiA+ICsJCWN0cmwtPmlkLCBjdHJsLT52YWwpOw0KPiA+ ID4gKw0KPiA+ID4gKwlpZiAoeHNkaXJ4c3MtPnN0cmVhbWluZykgew0KPiA+ID4gKwkJZGV2X2Vy cihkZXYsICJDYW5ub3Qgc2V0IGNvbnRyb2xzIHdoaWxlIHN0cmVhbWluZ1xuIik7DQo+ID4gPiAr CQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwl4c2RpcnhfY29y ZV9kaXNhYmxlKGNvcmUpOw0KPiA+ID4gKwlzd2l0Y2ggKGN0cmwtPmlkKSB7DQo+ID4gPiArCWNh c2UgVjRMMl9DSURfWElMSU5YX1NESVJYX0ZSQU1FUjoNCj4gPiA+ICsJCXhzZGlyeF9mcmFtZXIo Y29yZSwgY3RybC0+dmFsKTsNCj4gPiA+ICsJCXhzZGlyeHNzLT5mcmFtZXJfZW5hYmxlID0gY3Ry bC0+dmFsOw0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNhc2UgVjRMMl9DSURfWElMSU5YX1NE SVJYX1ZJRExPQ0tfV0lORE9XOg0KPiA+ID4gKwkJeHNkaXJ4X3NldHZpZGxvY2t3aW5kb3coY29y ZSwgY3RybC0+dmFsKTsNCj4gPiA+ICsJCXhzZGlyeHNzLT52aWRsb2Nrd2luID0gY3RybC0+dmFs Ow0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNhc2UgVjRMMl9DSURfWElMSU5YX1NESVJYX0VE SF9FUlJDTlRfRU5BQkxFOg0KPiA+ID4gKwkJeHNkaXJ4X3NldGVkaGVycmNudHRyaWdnZXIoY29y ZSwgY3RybC0+dmFsKTsNCj4gPiA+ICsJCXhzZGlyeHNzLT5lZGhtYXNrID0gY3RybC0+dmFsOw0K PiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNhc2UgVjRMMl9DSURfWElMSU5YX1NESVJYX1NFQVJD SF9NT0RFUzoNCj4gPiA+ICsJCWlmIChjdHJsLT52YWwpIHsNCj4gPiA+ICsJCQlpZiAoY29yZS0+ bW9kZSA9PSBYU0RJUlhTU19TRElfU1REXzNHKSB7DQo+ID4gPiArCQkJCWRldl9kYmcoZGV2LCAi VXB0byAzRyBzdXBwb3J0ZWRcbiIpOw0KPiA+ID4gKwkJCQljdHJsLT52YWwgJj0gfihCSVQoWFNE SVJYX01PREVfNkdfT0ZGU0VUKQ0KPiA+IHwNCj4gPiA+ICsJCQkJCSAgICAgICBCSVQoWFNESVJY X01PREVfMTJHSV9PRkZTRVQpDQo+ID4gfA0KPiA+ID4gKw0KPiA+IEJJVChYU0RJUlhfTU9ERV8x MkdGX09GRlNFVCkpOw0KPiA+ID4gKwkJCX0NCj4gPiA+ICsNCj4gPiA+ICsJCQlpZiAoY29yZS0+ bW9kZSA9PSBYU0RJUlhTU19TRElfU1REXzZHKSB7DQo+ID4gPiArCQkJCWRldl9kYmcoZGV2LCAi VXB0byA2RyBzdXBwb3J0ZWRcbiIpOw0KPiA+ID4gKwkJCQljdHJsLT52YWwgJj0NCj4gPiB+KEJJ VChYU0RJUlhfTU9ERV8xMkdJX09GRlNFVCkgfA0KPiA+ID4gKw0KPiA+IEJJVChYU0RJUlhfTU9E RV8xMkdGX09GRlNFVCkpOw0KPiA+ID4gKwkJCX0NCj4gPiA+ICsNCj4gPiA+ICsJCQlyZXQgPSB4 c2Rpcnhfc2V0X21vZGVkZXRlY3QoY29yZSwgY3RybC0+dmFsKTsNCj4gPiA+ICsJCQlpZiAoIXJl dCkNCj4gPiA+ICsJCQkJeHNkaXJ4c3MtPnNlYXJjaG1hc2sgPSBjdHJsLT52YWw7DQo+ID4gPiAr CQl9IGVsc2Ugew0KPiA+ID4gKwkJCWRldl9lcnIoZGV2LCAiU2VsZWN0IGF0IGxlYXN0IG9uZSBt b2RlIVxuIik7DQo+ID4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiArCQl9DQo+ID4gPiAr CQlicmVhazsNCj4gPiA+ICsJZGVmYXVsdDoNCj4gPiA+ICsJCXhzZGlyeHNzX3NldChjb3JlLCBY U0RJUlhfUlNUX0NUUkxfUkVHLA0KPiA+ID4gKwkJCSAgICAgWFNESVJYX1JTVF9DVFJMX1NTX0VO X01BU0spOw0KPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiArCX0NCj4gPiA+ICsJeHNk aXJ4X2NvcmVfZW5hYmxlKGNvcmUpOw0KPiA+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ID4gK30NCj4g PiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgKiB4c2Rpcnhzc19nX3ZvbGF0aWxlX2N0cmwgLSBn ZXQgdGhlIFhpbGlueCBTREkgUnggY29udHJvbHMNCj4gPiA+ICsgKiBAY3RybDogUG9pbnRlciB0 byBWNEwyIGNvbnRyb2wNCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNz LCBlcnJvcnMgb3RoZXJ3aXNlDQo+ID4gPiArICovDQo+ID4gPiArc3RhdGljIGludCB4c2Rpcnhz c19nX3ZvbGF0aWxlX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkNCj4gPiA+ICt7DQo+ID4g PiArCXUzMiB2YWw7DQo+ID4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPQ0K PiA+ID4gKwkJY29udGFpbmVyX29mKGN0cmwtPmhhbmRsZXIsDQo+ID4gPiArCQkJICAgICBzdHJ1 Y3QgeHNkaXJ4c3Nfc3RhdGUsIGN0cmxfaGFuZGxlcik7DQo+ID4gPiArCXN0cnVjdCB4c2Rpcnhz c19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5jb3JlOw0KPiA+ID4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBjb3JlLT5kZXY7DQo+ID4gPiArDQo+ID4gPiArCXN3aXRjaCAoY3RybC0+aWQpIHsNCj4g PiA+ICsJY2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfTU9ERV9ERVRFQ1Q6DQo+ID4gPiArCQlp ZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQpIHsNCj4gPiA+ICsJCQlkZXZfZXJyKGRldiwgIkNhbid0 IGdldCB2YWx1ZXMgd2hlbiB2aWRlbyBub3QNCj4gPiBsb2NrZWQhXG4iKTsNCj4gPiA+ICsJCQly ZXR1cm4gLUVJTlZBTDsNCj4gPiA+ICsJCX0NCj4gPiA+ICsJCXZhbCA9IHhzZGlyeHNzX3JlYWQo Y29yZSwgWFNESVJYX01PREVfREVUX1NUQVRfUkVHKTsNCj4gPiA+ICsJCXZhbCAmPSBYU0RJUlhf TU9ERV9ERVRfU1RBVF9SWF9NT0RFX01BU0s7DQo+ID4gPiArDQo+ID4gPiArCQlzd2l0Y2ggKHZh bCkgew0KPiA+ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV9TRF9NQVNLOg0KPiA+ID4gKwkJCWN0cmwt PnZhbCA9IFhTRElSWF9NT0RFX1NEX09GRlNFVDsNCj4gPiA+ICsJCQlicmVhazsNCj4gPiA+ICsJ CWNhc2UgWFNESVJYX01PREVfSERfTUFTSzoNCj4gPiA+ICsJCQljdHJsLT52YWwgPSBYU0RJUlhf TU9ERV9IRF9PRkZTRVQ7DQo+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiArCQljYXNlIFhTRElSWF9N T0RFXzNHX01BU0s6DQo+ID4gPiArCQkJY3RybC0+dmFsID0gWFNESVJYX01PREVfM0dfT0ZGU0VU Ow0KPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV82R19NQVNLOg0K PiA+ID4gKwkJCWN0cmwtPnZhbCA9IFhTRElSWF9NT0RFXzZHX09GRlNFVDsNCj4gPiA+ICsJCQli cmVhazsNCj4gPiA+ICsJCWNhc2UgWFNESVJYX01PREVfMTJHSV9NQVNLOg0KPiA+ID4gKwkJCWN0 cmwtPnZhbCA9IFhTRElSWF9NT0RFXzEyR0lfT0ZGU0VUOw0KPiA+ID4gKwkJCWJyZWFrOw0KPiA+ ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV8xMkdGX01BU0s6DQo+ID4gPiArCQkJY3RybC0+dmFsID0g WFNESVJYX01PREVfMTJHRl9PRkZTRVQ7DQo+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiArCQl9DQo+ ID4gPiArCQlicmVhazsNCj4gPiA+ICsJY2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfQ1JDOg0K PiA+ID4gKwkJY3RybC0+dmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfQ1JDX0VSUkNO VF9SRUcpOw0KPiA+ID4gKwkJeHNkaXJ4c3Nfd3JpdGUoY29yZSwgWFNESVJYX0NSQ19FUlJDTlRf UkVHLCAweEZGRkYpOw0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNhc2UgVjRMMl9DSURfWElM SU5YX1NESVJYX0VESF9FUlJDTlQ6DQo+ID4gPiArCQl2YWwgPSB4c2Rpcnhzc19yZWFkKGNvcmUs IFhTRElSWF9NT0RFX0RFVF9TVEFUX1JFRyk7DQo+ID4gPiArCQl2YWwgJj0gWFNESVJYX01PREVf REVUX1NUQVRfUlhfTU9ERV9NQVNLOw0KPiA+ID4gKwkJaWYgKHZhbCA9PSBYU0RJUlhfTU9ERV9T RF9NQVNLKSB7DQo+ID4gPiArCQkJY3RybC0+dmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLA0KPiA+ IFhTRElSWF9FREhfRVJSQ05UX1JFRyk7DQo+ID4gPiArCQl9IGVsc2Ugew0KPiA+ID4gKwkJCWRl dl9kYmcoZGV2LCAiJWQgLSBub3QgaW4gU0QgbW9kZVxuIiwgY3RybC0+aWQpOw0KPiA+ID4gKwkJ CXJldHVybiAtRUlOVkFMOw0KPiA+ID4gKwkJfQ0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNh c2UgVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9TVEFUVVM6DQo+ID4gPiArCQl2YWwgPSB4c2Rp cnhzc19yZWFkKGNvcmUsIFhTRElSWF9NT0RFX0RFVF9TVEFUX1JFRyk7DQo+ID4gPiArCQl2YWwg Jj0gWFNESVJYX01PREVfREVUX1NUQVRfUlhfTU9ERV9NQVNLOw0KPiA+ID4gKwkJaWYgKHZhbCA9 PSBYU0RJUlhfTU9ERV9TRF9NQVNLKSB7DQo+ID4gPiArCQkJY3RybC0+dmFsID0geHNkaXJ4c3Nf cmVhZChjb3JlLA0KPiA+IFhTRElSWF9FREhfU1RBVF9SRUcpOw0KPiA+ID4gKwkJfSBlbHNlIHsN Cj4gPiA+ICsJCQlkZXZfZGJnKGRldiwgIiVkIC0gbm90IGluIFNEIG1vZGVcbiIsIGN0cmwtPmlk KTsNCj4gPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ICsJCX0NCj4gPiA+ICsJCWJyZWFr Ow0KPiA+ID4gKwljYXNlIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9UU19JU19JTlRFUkxBQ0VEOg0K PiA+ID4gKwkJaWYgKCF4c2Rpcnhzcy0+dmlkbG9ja2VkKSB7DQo+ID4gPiArCQkJZGV2X2Vycihk ZXYsICJDYW4ndCBnZXQgdmFsdWVzIHdoZW4gdmlkZW8gbm90DQo+ID4gbG9ja2VkIVxuIik7DQo+ ID4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiArCQl9DQo+ID4gPiArCQljdHJsLT52YWwg PSB4c2Rpcnhzcy0+dHNfaXNfaW50ZXJsYWNlZDsNCj4gPg0KPiA+IFRoaXMgY29udHJvbCBtYWtl cyBubyBzZW5zZTogdGhlIHY0bDJfZHZfdGltaW5ncyBzdHJ1Y3Qgd2lsbCBhbHJlYWR5IHRlbGwg eW91DQo+ID4gaWYgaXQgaXMgYW4gaW50ZXJsYWNlZCBmb3JtYXQgb3Igbm90LiBTYW1lIGZvciB2 NGwyX21idXNfZnJhbWVmbXQuDQo+ID4NCj4gDQo+IFRoZSBTREkgaGFzIGEgY29uY2VwdCBvZiBz dXBwb3J0aW5nIHByb2dyZXNzaXZlLCBpbnRlcmxhY2VkIChib3RoIGFzIHdlIGtub3cNCj4gbm9y bWFsbHkpIGFuZCBhIHByb2dyZXNzaXZlIHNlZ21lbnRlZCBmcmFtZXMocHNmKS4NCj4gVGhlIHBy b2dyZXNzaXZlIHNlZ21lbnRlZCBmcmFtZXMgaGF2ZSB0aGVpciB2aWRlbyBjb250ZW50IGluIHBy b2dyZXNzaXZlDQo+IGZvcm1hdCBidXQgdGhlIHRyYW5zcG9ydCBzdHJlYW0gaXMgaW50ZXJsYWNl ZC4NCj4gVGhpcyBpcyBkaXN0aW5ndWlzaGVkIHVzaW5nIHRoZSBiaXQgNiBhbmQgNyBvZiBCeXRl IDIgaW4gdGhlIDQgYnl0ZSBTVDM1MiBwYXlsb2FkLg0KPiBSZWZlciB0byBzZWMgNS4zIGluIFNN UFRFIFNUIDM1MjoyMDEwLg0KPiANCj4gVGhpcyBjb250cm9sIGNhbiBiZSB1c2VkIGJ5IHRoZSBh cHBsaWNhdGlvbiB0byBkaXN0aW5ndWlzaCBub3JtYWwgaW50ZXJsYWNlZCBhbmQNCj4gcHJvZ3Jl c3NpdmUgc2VnbWVudGVkIGZyYW1lcy4NCj4gDQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJY2Fz ZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfQUNUSVZFX1NUUkVBTVM6DQo+ID4gPiArCQlpZiAoIXhz ZGlyeHNzLT52aWRsb2NrZWQpIHsNCj4gPiA+ICsJCQlkZXZfZXJyKGRldiwgIkNhbid0IGdldCB2 YWx1ZXMgd2hlbiB2aWRlbyBub3QNCj4gPiBsb2NrZWQhXG4iKTsNCj4gPiA+ICsJCQlyZXR1cm4g LUVJTlZBTDsNCj4gPiA+ICsJCX0NCj4gPiA+ICsJCXZhbCA9IHhzZGlyeHNzX3JlYWQoY29yZSwg WFNESVJYX01PREVfREVUX1NUQVRfUkVHKTsNCj4gPiA+ICsJCXZhbCAmPSBYU0RJUlhfTU9ERV9E RVRfU1RBVF9BQ1RfU1RSRUFNX01BU0s7DQo+ID4gPiArCQl2YWwgPj49IFhTRElSWF9NT0RFX0RF VF9TVEFUX0FDVF9TVFJFQU1fT0ZGU0VUOw0KPiA+ID4gKwkJY3RybC0+dmFsID0gMSA8PCB2YWw7 DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJY2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfSVNf M0dCOg0KPiA+ID4gKwkJaWYgKCF4c2Rpcnhzcy0+dmlkbG9ja2VkKSB7DQo+ID4gPiArCQkJZGV2 X2VycihkZXYsICJDYW4ndCBnZXQgdmFsdWVzIHdoZW4gdmlkZW8gbm90DQo+ID4gbG9ja2VkIVxu Iik7DQo+ID4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiArCQl9DQo+ID4gPiArCQl2YWwg PSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9NT0RFX0RFVF9TVEFUX1JFRyk7DQo+ID4gPiAr CQl2YWwgJj0gWFNESVJYX01PREVfREVUX1NUQVRfTFZMQl8zR19NQVNLOw0KPiA+ID4gKwkJY3Ry bC0+dmFsID0gdmFsID8gdHJ1ZSA6IGZhbHNlOw0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWRl ZmF1bHQ6DQo+ID4gPiArCQlkZXZfZXJyKGRldiwgIkdldCBJbnZhbGlkIGNvbnRyb2wgaWQgMHgl MHhcbiIsIGN0cmwtPmlkKTsNCj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4gKwl9DQo+ ID4gPiArCWRldl9kYmcoZGV2LCAiR2V0IGN0cmwgaWQgPSAweCUwOHggdmFsID0gMHglMDh4XG4i LCBjdHJsLT5pZCwNCj4gPiA+ICsJCWN0cmwtPnZhbCk7DQo+ID4gPiArCXJldHVybiAwOw0KPiA+ ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgKiB4c2Rpcnhzc19sb2dfc3RhdHVz IC0gTG9ncyB0aGUgc3RhdHVzIG9mIHRoZSBTREkgUnggU3Vic3lzdGVtDQo+ID4gPiArICogQHNk OiBQb2ludGVyIHRvIFY0TDIgc3ViZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ID4gKyAqDQo+ID4gPiAr ICogVGhpcyBmdW5jdGlvbiBwcmludHMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIFhpbGlueCBTREkg UnggU3Vic3lzdGVtDQo+ID4gPiArICoNCj4gPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0K PiA+ID4gKyAqLw0KPiA+ID4gK3N0YXRpYyBpbnQgeHNkaXJ4c3NfbG9nX3N0YXR1cyhzdHJ1Y3Qg djRsMl9zdWJkZXYgKnNkKQ0KPiA+ID4gK3sNCj4gPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRl ICp4c2RpcnhzcyA9IHRvX3hzZGlyeHNzc3RhdGUoc2QpOw0KPiA+ID4gKwlzdHJ1Y3QgeHNkaXJ4 c3NfY29yZSAqY29yZSA9ICZ4c2Rpcnhzcy0+Y29yZTsNCj4gPiA+ICsJdTMyIGk7DQo+ID4gPiAr DQo+ID4gPiArCXY0bDJfaW5mbyhzZCwgIioqKioqIFNESSBSeCBzdWJzeXN0ZW0gcmVnIGR1bXAg c3RhcnQgKioqKipcbiIpOw0KPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgMHgyODsgaSsrKSB7DQo+ ID4gPiArCQl1MzIgZGF0YTsNCj4gPiA+ICsNCj4gPiA+ICsJCWRhdGEgPSB4c2Rpcnhzc19yZWFk KGNvcmUsIGkgKiA0KTsNCj4gPiA+ICsJCXY0bDJfaW5mbyhzZCwgIm9mZnNldCAweCUwOHggZGF0 YSAweCUwOHhcbiIsDQo+ID4gPiArCQkJICBpICogNCwgZGF0YSk7DQo+ID4gPiArCX0NCj4gPiA+ ICsJdjRsMl9pbmZvKHNkLCAiKioqKiogU0RJIFJ4IHN1YnN5c3RlbSByZWcgZHVtcCBlbmQgKioq KipcbiIpOw0KPiA+ID4gKwlyZXR1cm4gMDsNCj4gPg0KPiA+IEkgc3VnZ2VzdCBjYWxsaW5nIHY0 bDJfY3RybF9zdWJkZXZfbG9nX3N0YXR1cygpIGFzIHdlbGwgdG8gbG9nIGFsbCBjb250cm9scy4N Cj4gPg0KPiANCj4gT2suIEkgd2lsbCBhZGQgdGhpcyBpbiB0aGUgbmV4dCB2ZXJzaW9uLg0KPiAN Cj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogeHNkaXJ4c3NfZ19mcmFt ZV9pbnRlcnZhbCAtIEdldCB0aGUgZnJhbWUgaW50ZXJ2YWwNCj4gPiA+ICsgKiBAc2Q6IFY0TDIg U3ViIGRldmljZQ0KPiA+ID4gKyAqIEBmaTogUG9pbnRlciB0byBWNGwyIFN1YiBkZXZpY2UgZnJh bWUgaW50ZXJ2YWwgc3RydWN0dXJlDQo+ID4gPiArICoNCj4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9u IGlzIHVzZWQgdG8gZ2V0IHRoZSBmcmFtZSBpbnRlcnZhbC4NCj4gPiA+ICsgKiBUaGUgZnJhbWUg cmF0ZSBjYW4gYmUgaW50ZWdyYWwgb3IgZnJhY3Rpb25hbC4NCj4gPiA+ICsgKiBJbnRlZ3JhbCBm cmFtZSByYXRlIGUuZy4gbnVtZXJhdG9yID0gMTAwMCwgZGVub21pbmF0b3IgPSAyNDAwMCA9PiAy NA0KPiA+IGZwcw0KPiA+ID4gKyAqIEZyYWN0aW9uYWwgZnJhbWUgcmF0ZSBlLmcuIG51bWVyYXRv ciA9IDEwMDEsIGRlbm9taW5hdG9yID0gMjQwMDAgPT4NCj4gPiAyMy45NyBmcHMNCj4gPiA+ICsg Kg0KPiA+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzDQo+ID4gPiArICovDQo+ID4gPiArc3Rh dGljIGludCB4c2Rpcnhzc19nX2ZyYW1lX2ludGVydmFsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2Qs DQo+ID4gPiArCQkJCSAgICAgc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX2ludGVydmFsICpmaSkN Cj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194 c2Rpcnhzc3N0YXRlKHNkKTsNCj4gPiA+ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUgPSAm eHNkaXJ4c3MtPmNvcmU7DQo+ID4gPiArDQo+ID4gPiArCWlmICgheHNkaXJ4c3MtPnZpZGxvY2tl ZCkgew0KPiA+ID4gKwkJZGV2X2Vycihjb3JlLT5kZXYsICJWaWRlbyBub3QgbG9ja2VkIVxuIik7 DQo+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlm aS0+aW50ZXJ2YWwgPSB4c2Rpcnhzcy0+ZnJhbWVfaW50ZXJ2YWw7DQo+ID4gPiArDQo+ID4gPiAr CWRldl9kYmcoY29yZS0+ZGV2LCAiZnJhbWUgcmF0ZSBudW1lcmF0b3IgPSAlZCBkZW5vbWluYXRv ciA9ICVkXG4iLA0KPiA+ID4gKwkJeHNkaXJ4c3MtPmZyYW1lX2ludGVydmFsLm51bWVyYXRvciwN Cj4gPiA+ICsJCXhzZGlyeHNzLT5mcmFtZV9pbnRlcnZhbC5kZW5vbWluYXRvcik7DQo+ID4gPiAr CXJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgKiB4c2Rp cnhzc19zX3N0cmVhbSAtIEl0IGlzIHVzZWQgdG8gc3RhcnQvc3RvcCB0aGUgc3RyZWFtaW5nLg0K PiA+ID4gKyAqIEBzZDogVjRMMiBTdWIgZGV2aWNlDQo+ID4gPiArICogQGVuYWJsZTogRmxhZyAo VHJ1ZSAvIEZhbHNlKQ0KPiA+ID4gKyAqDQo+ID4gPiArICogVGhpcyBmdW5jdGlvbiBjb250cm9s cyB0aGUgc3RhcnQgb3Igc3RvcCBvZiBzdHJlYW1pbmcgZm9yIHRoZQ0KPiA+ID4gKyAqIFhpbGlu eCBTREkgUnggU3Vic3lzdGVtLg0KPiA+ID4gKyAqDQo+ID4gPiArICogUmV0dXJuOiAwIG9uIHN1 Y2Nlc3MsIGVycm9ycyBvdGhlcndpc2UNCj4gPiA+ICsgKi8NCj4gPiA+ICtzdGF0aWMgaW50IHhz ZGlyeHNzX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpDQo+ID4g PiArew0KPiA+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0gdG9feHNkaXJ4 c3NzdGF0ZShzZCk7DQo+ID4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnhzZGly eHNzLT5jb3JlOw0KPiA+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb3JlLT5kZXY7DQo+ID4g PiArDQo+ID4gPiArCWlmIChlbmFibGUpIHsNCj4gPiA+ICsJCWlmICgheHNkaXJ4c3MtPnZpZGxv Y2tlZCkgew0KPiA+ID4gKwkJCWRldl9kYmcoZGV2LCAiVmlkZW8gaXMgbm90IGxvY2tlZFxuIik7 DQo+ID4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiArCQl9DQo+ID4gPiArCQlpZiAoeHNk aXJ4c3MtPnN0cmVhbWluZykgew0KPiA+ID4gKwkJCWRldl9kYmcoZGV2LCAiQWxyZWFkeSBzdHJl YW1pbmdcbiIpOw0KPiA+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4gKwkJfQ0KPiA+ID4g Kw0KPiA+ID4gKwkJeHNkaXJ4X3N0cmVhbWZsb3dfY29udHJvbChjb3JlLCB0cnVlKTsNCj4gPiA+ ICsJCXhzZGlyeHNzLT5zdHJlYW1pbmcgPSB0cnVlOw0KPiA+ID4gKwkJZGV2X2RiZyhkZXYsICJT dHJlYW1pbmcgc3RhcnRlZFxuIik7DQo+ID4gPiArCX0gZWxzZSB7DQo+ID4gPiArCQlpZiAoIXhz ZGlyeHNzLT5zdHJlYW1pbmcpIHsNCj4gPiA+ICsJCQlkZXZfZGJnKGRldiwgIlN0b3BwZWQgc3Ry ZWFtaW5nIGFscmVhZHlcbiIpOw0KPiA+ID4gKwkJCXJldHVybiAwOw0KPiA+ID4gKwkJfQ0KPiA+ ID4gKw0KPiA+ID4gKwkJeHNkaXJ4X3N0cmVhbWZsb3dfY29udHJvbChjb3JlLCBmYWxzZSk7DQo+ ID4gPiArCQl4c2Rpcnhzcy0+c3RyZWFtaW5nID0gZmFsc2U7DQo+ID4gPiArCQlkZXZfZGJnKGRl diwgIlN0cmVhbWluZyBzdG9wcGVkXG4iKTsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwly ZXR1cm4gMDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogeHNkaXJ4 c3NfZ19pbnB1dF9zdGF0dXMgLSBJdCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgdmlkZW8g c2lnbmFsDQo+ID4gPiArICogaXMgcHJlc2VudCAvIGxvY2tlZCBvbnRvIG9yIG5vdC4NCj4gPiA+ ICsgKg0KPiA+ID4gKyAqIEBzZDogVjRMMiBTdWIgZGV2aWNlDQo+ID4gPiArICogQHN0YXR1czog c3RhdHVzIG9mIHNpZ25hbCBsb2NrZWQNCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFRoaXMgaXMgdXNl ZCB0byBkZXRlcm1pbmUgaWYgdGhlIHZpZGVvIHNpZ25hbCBpcyBwcmVzZW50IGFuZCBsb2NrZWQg b250bw0KPiA+ID4gKyAqIGJ5IHRoZSBTREkgUnggY29yZSBvciBub3QgYmFzZWQgb24gdmlkbG9j a2VkIGZsYWcuDQo+ID4gPiArICoNCj4gPiA+ICsgKiBSZXR1cm46IHplcm8gb24gc3VjY2Vzcw0K PiA+ID4gKyAqLw0KPiA+ID4gK3N0YXRpYyBpbnQgeHNkaXJ4c3NfZ19pbnB1dF9zdGF0dXMoc3Ry dWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyICpzdGF0dXMpDQo+ID4gPiArew0KPiA+ID4gKwlzdHJ1 Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0gdG9feHNkaXJ4c3NzdGF0ZShzZCk7DQo+ID4g PiArDQo+ID4gPiArCWlmICgheHNkaXJ4c3MtPnZpZGxvY2tlZCkNCj4gPiA+ICsJCSpzdGF0dXMg PSBWNEwyX0lOX1NUX05PX1NZTkMgfCBWNEwyX0lOX1NUX05PX1NJR05BTDsNCj4gPiA+ICsJZWxz ZQ0KPiA+ID4gKwkJKnN0YXR1cyA9IDA7DQo+ID4gPiArDQo+ID4gPiArCXJldHVybiAwOw0KPiA+ ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAq DQo+ID4gPiArX194c2Rpcnhzc19nZXRfcGFkX2Zvcm1hdChzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUg KnhzZGlyeHNzLA0KPiA+ID4gKwkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNm ZywNCj4gPiA+ICsJCQkgIHVuc2lnbmVkIGludCBwYWQsIHUzMiB3aGljaCkNCj4gPiA+ICt7DQo+ ID4gPiArCXN3aXRjaCAod2hpY2gpIHsNCj4gPiA+ICsJY2FzZSBWNEwyX1NVQkRFVl9GT1JNQVRf VFJZOg0KPiA+ID4gKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KCZ4c2Rpcnhz cy0+c3ViZGV2LCBjZmcsDQo+ID4gcGFkKTsNCj4gPiA+ICsJY2FzZSBWNEwyX1NVQkRFVl9GT1JN QVRfQUNUSVZFOg0KPiA+ID4gKwkJcmV0dXJuICZ4c2Rpcnhzcy0+Zm9ybWF0Ow0KPiA+ID4gKwlk ZWZhdWx0Og0KPiA+ID4gKwkJcmV0dXJuIE5VTEw7DQo+ID4gPiArCX0NCj4gPiA+ICt9DQo+ID4g PiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogeHNkaXJ4c3NfaW5pdF9jZmcgLSBJbml0aWFsaXNl IHRoZSBwYWQgZm9ybWF0IGNvbmZpZyB0byBkZWZhdWx0DQo+ID4gPiArICogQHNkOiBQb2ludGVy IHRvIFY0TDIgU3ViIGRldmljZSBzdHJ1Y3R1cmUNCj4gPiA+ICsgKiBAY2ZnOiBQb2ludGVyIHRv IHN1YiBkZXZpY2UgcGFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQ0KPiA+ID4gKyAqDQo+ID4gPiAr ICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHBhZCBmb3JtYXQgd2l0 aCB0aGUgZGVmYXVsdA0KPiA+ID4gKyAqIHZhbHVlcy4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFJl dHVybjogMCBvbiBzdWNjZXNzDQo+ID4gPiArICovDQo+ID4gPiArc3RhdGljIGludCB4c2Rpcnhz c19pbml0X2NmZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ID4gKwkJCSAgICAgc3RydWN0 IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZykNCj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCB4 c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194c2Rpcnhzc3N0YXRlKHNkKTsNCj4gPiA+ICsJ c3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm9ybWF0Ow0KPiA+ID4gKw0KPiA+ID4gKwlmb3Jt YXQgPSB2NGwyX3N1YmRldl9nZXRfdHJ5X2Zvcm1hdChzZCwgY2ZnLCAwKTsNCj4gPiA+ICsJKmZv cm1hdCA9IHhzZGlyeHNzLT5kZWZhdWx0X2Zvcm1hdDsNCj4gPiA+ICsNCj4gPiA+ICsJcmV0dXJu IDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAqIHhzZGlyeHNzX2dl dF9mb3JtYXQgLSBHZXQgdGhlIHBhZCBmb3JtYXQNCj4gPiA+ICsgKiBAc2Q6IFBvaW50ZXIgdG8g VjRMMiBTdWIgZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ID4gKyAqIEBjZmc6IFBvaW50ZXIgdG8gc3Vi IGRldmljZSBwYWQgaW5mb3JtYXRpb24gc3RydWN0dXJlDQo+ID4gPiArICogQGZtdDogUG9pbnRl ciB0byBwYWQgbGV2ZWwgbWVkaWEgYnVzIGZvcm1hdA0KPiA+ID4gKyAqDQo+ID4gPiArICogVGhp cyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgcGFkIGZvcm1hdCBpbmZvcm1hdGlvbi4NCj4g PiA+ICsgKg0KPiA+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzDQo+ID4gPiArICovDQo+ID4g PiArc3RhdGljIGludCB4c2Rpcnhzc19nZXRfZm9ybWF0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2Qs DQo+ID4gPiArCQkJICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsDQo+ ID4gPiArCQkJICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkNCj4gPiA+ICt7 DQo+ID4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194c2Rpcnhzc3N0 YXRlKHNkKTsNCj4gPiA+ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUgPSAmeHNkaXJ4c3Mt PmNvcmU7DQo+ID4gPiArDQo+ID4gPiArCWlmICgheHNkaXJ4c3MtPnZpZGxvY2tlZCkgew0KPiA+ ID4gKwkJZGV2X2Vycihjb3JlLT5kZXYsICJWaWRlbyBub3QgbG9ja2VkIVxuIik7DQo+ID4gPiAr CQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlmbXQtPmZvcm1h dCA9ICpfX3hzZGlyeHNzX2dldF9wYWRfZm9ybWF0KHhzZGlyeHNzLCBjZmcsDQo+ID4gPiArCQkJ CQkJIGZtdC0+cGFkLCBmbXQtPndoaWNoKTsNCj4gPiA+ICsNCj4gPiA+ICsJZGV2X2RiZyhjb3Jl LT5kZXYsICJTdHJlYW0gd2lkdGggPSAlZCBoZWlnaHQgPSAlZCBGaWVsZCA9ICVkXG4iLA0KPiA+ ID4gKwkJZm10LT5mb3JtYXQud2lkdGgsIGZtdC0+Zm9ybWF0LmhlaWdodCwgZm10LT5mb3JtYXQu ZmllbGQpOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ ID4gPiArLyoqDQo+ID4gPiArICogeHNkaXJ4c3Nfc2V0X2Zvcm1hdCAtIFRoaXMgaXMgdXNlZCB0 byBzZXQgdGhlIHBhZCBmb3JtYXQNCj4gPiA+ICsgKiBAc2Q6IFBvaW50ZXIgdG8gVjRMMiBTdWIg ZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ID4gKyAqIEBjZmc6IFBvaW50ZXIgdG8gc3ViIGRldmljZSBw YWQgaW5mb3JtYXRpb24gc3RydWN0dXJlDQo+ID4gPiArICogQGZtdDogUG9pbnRlciB0byBwYWQg bGV2ZWwgbWVkaWEgYnVzIGZvcm1hdA0KPiA+ID4gKyAqDQo+ID4gPiArICogVGhpcyBmdW5jdGlv biBpcyB1c2VkIHRvIHNldCB0aGUgcGFkIGZvcm1hdC4NCj4gPiA+ICsgKiBTaW5jZSB0aGUgcGFk IGZvcm1hdCBpcyBmaXhlZCBpbiBoYXJkd2FyZSwgaXQgY2FuJ3QgYmUNCj4gPiA+ICsgKiBtb2Rp ZmllZCBvbiBydW4gdGltZS4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFJldHVybjogMCBvbiBzdWNj ZXNzDQo+ID4gPiArICovDQo+ID4gPiArc3RhdGljIGludCB4c2Rpcnhzc19zZXRfZm9ybWF0KHN0 cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gPiArCQkJICAgICAgIHN0cnVjdCB2NGwyX3N1YmRl dl9wYWRfY29uZmlnICpjZmcsDQo+ID4gPiArCQkJICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9m b3JtYXQgKmZtdCkNCj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQg Kl9fZm9ybWF0Ow0KPiA+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0gdG9f eHNkaXJ4c3NzdGF0ZShzZCk7DQo+ID4gPiArDQo+ID4gPiArCWRldl9kYmcoeHNkaXJ4c3MtPmNv cmUuZGV2LA0KPiA+ID4gKwkJInNldCB3aWR0aCAlZCBoZWlnaHQgJWQgY29kZSAlZCBmaWVsZCAl ZCBjb2xvcnNwYWNlICVkXG4iLA0KPiA+ID4gKwkJZm10LT5mb3JtYXQud2lkdGgsIGZtdC0+Zm9y bWF0LmhlaWdodCwNCj4gPiA+ICsJCWZtdC0+Zm9ybWF0LmNvZGUsIGZtdC0+Zm9ybWF0LmZpZWxk LA0KPiA+ID4gKwkJZm10LT5mb3JtYXQuY29sb3JzcGFjZSk7DQo+ID4gPiArDQo+ID4gPiArCV9f Zm9ybWF0ID0gX194c2Rpcnhzc19nZXRfcGFkX2Zvcm1hdCh4c2RpcnhzcywgY2ZnLA0KPiA+ID4g KwkJCQkJICAgICBmbXQtPnBhZCwgZm10LT53aGljaCk7DQo+ID4gPiArDQo+ID4gPiArCS8qIEN1 cnJlbnRseSByZXNldCB0aGUgY29kZSB0byBvbmUgZml4ZWQgaW4gaGFyZHdhcmUgKi8NCj4gPiA+ ICsJLyogVE9ETyA6IEFkZCBjaGVja3MgZm9yIHdpZHRoIGhlaWdodCAqLw0KPiA+ID4gKwlmbXQt PmZvcm1hdC5jb2RlID0gX19mb3JtYXQtPmNvZGU7DQo+ID4NCj4gPiBJdCBzaG91bGQgZmlsbCBp biB0aGUgd2lkdGggYW5kIGhlaWdodCBiYXNlZCBvbiB0aGUgY3VycmVudCBEViB0aW1pbmdzLg0K PiA+IERpdHRvIGZvciB0aGUgZmllbGQgKEkgYXNzdW1lIHRoYXQncyBmaXhlZCBhcyB3ZWxsIGJh c2VkIG9uIHdoZXRoZXIgdGhpcw0KPiA+IGlzIGludGVybGFjZWQgb3Igbm90KS4gSSdtIG5vdCBz dXJlIGhvdyBjb2xvcnNwYWNlIGluZm9ybWF0aW9uIGlzIGhhbmRsZWQNCj4gPiBmb3IgU0RJLg0K PiA+DQo+IA0KPiBZZXMuIEkgd2lsbCB1cGRhdGUgdGhpcyBsb2dpYyB0byB1cGRhdGUgdGhlIHdp ZHRoLCBoZWlnaHQgYW5kIGZpZWxkIGJhc2VkIG9uDQo+IGN1cnJlbnQgRFYgdGltaW5ncy4NCj4g UGxlYXNlIGhhdmUgYSBsb29rIGF0IHRoaXMgaW4gdGhlIG5leHQgdmVyc2lvbi4NCj4gVGhlIGN1 cnJlbnQgSVAgc3VwcG9ydHMgQlQ3MDkgY29sb3JpbWV0cnkuDQo+IFRoZSBjb2xvcmltZXRyeSBp bmZvcm1hdGlvbiBvZiBpbmNvbWluZyBzdHJlYW0gaXMgcHJlc2VudCBpbiB0aGUgU1QgMzUyDQo+ IHBheWxvYWQgQnl0ZSAzIChiaXQgNSBhbmQgYml0IDQpIGFzIHBlciBTTVBURSBTVCAyMDgxLTEw OjIwMTguDQo+IEI1OjQgPSAwIC0+IEJUIDcwOSBhcyBwZXIgU01QVEUgU1QgMjc0DQo+IA0KPiA+ ID4gKw0KPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ ID4gPiArICogeHNkaXJ4c3NfZW51bV9tYnVzX2NvZGUgLSBIYW5kbGUgcGl4ZWwgZm9ybWF0IGVu dW1lcmF0aW9uDQo+ID4gPiArICogQHNkOiBwb2ludGVyIHRvIHY0bDIgc3ViZGV2IHN0cnVjdHVy ZQ0KPiA+ID4gKyAqIEBjZmc6IFY0TDIgc3ViZGV2IHBhZCBjb25maWd1cmF0aW9uDQo+ID4gPiAr ICogQGNvZGU6IHBvaW50ZXIgdG8gdjRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW0gc3RydWN0dXJl DQo+ID4gPiArICoNCj4gPiA+ICsgKiBSZXR1cm46IC1FSU5WQUwgb3IgemVybyBvbiBzdWNjZXNz DQo+ID4gPiArICovDQo+ID4gPiArc3RhdGljIGludCB4c2Rpcnhzc19lbnVtX21idXNfY29kZShz dHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ID4gKwkJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZf cGFkX2NvbmZpZyAqY2ZnLA0KPiA+ID4gKwkJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfbWJ1c19j b2RlX2VudW0NCj4gPiAqY29kZSkNCj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCB4c2Rpcnhzc19z dGF0ZSAqeHNkaXJ4c3MgPSB0b194c2Rpcnhzc3N0YXRlKHNkKTsNCj4gPiA+ICsJdTMyIGluZGV4 ID0gY29kZS0+aW5kZXg7DQo+ID4gPiArCXUzMiBtYXhpbmRleDsNCj4gPiA+ICsNCj4gPiA+ICsJ aWYgKHhzZGlyeHNzLT5jb3JlLmJwYyA9PSAxMCkNCj4gPiA+ICsJCW1heGluZGV4ID0gQVJSQVlf U0laRSh4c2Rpcnhzc18xMGJwY19tYnVzX2ZtdHMpOw0KPiA+ID4gKwllbHNlDQo+ID4gPiArCQlt YXhpbmRleCA9IEFSUkFZX1NJWkUoeHNkaXJ4c3NfMTJicGNfbWJ1c19mbXRzKTsNCj4gPiA+ICsN Cj4gPiA+ICsJaWYgKGNvZGUtPnBhZCB8fCBpbmRleCA+PSBtYXhpbmRleCkNCj4gPiA+ICsJCXJl dHVybiAtRUlOVkFMOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoeHNkaXJ4c3MtPmNvcmUuYnBjID09 IDEwKQ0KPiA+ID4gKwkJY29kZS0+Y29kZSA9IHhzZGlyeHNzXzEwYnBjX21idXNfZm10c1tpbmRl eF07DQo+ID4gPiArCWVsc2UNCj4gPiA+ICsJCWNvZGUtPmNvZGUgPSB4c2Rpcnhzc18xMmJwY19t YnVzX2ZtdHNbaW5kZXhdOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ICt9DQo+ ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogeHNkaXJ4c3NfZW51bV9kdl90aW1pbmdzOiBF bnVtZXJhdGUgYWxsIHRoZSBzdXBwb3J0ZWQgRFYgdGltaW5ncw0KPiA+ID4gKyAqIEBzZDogcG9p bnRlciB0byB2NGwyIHN1YmRldiBzdHJ1Y3R1cmUNCj4gPiA+ICsgKiBAdGltaW5nczogRFYgdGlt aW5ncyBzdHJ1Y3R1cmUgdG8gYmUgcmV0dXJuZWQuDQo+ID4gPiArICoNCj4gPiA+ICsgKiBSZXR1 cm46IC1FSU5WQUwgaW5jYXNlIG9mIGludmFsaWQgaW5kZXggYW5kIHBhZCBvciB6ZXJvIG9uIHN1 Y2Nlc3MNCj4gPiA+ICsgKi8NCj4gPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX2VudW1fZHZfdGlt aW5ncyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ID4gKwkJCQkgICAgc3RydWN0IHY0bDJf ZW51bV9kdl90aW1pbmdzICp0aW1pbmdzKQ0KPiA+ID4gK3sNCj4gPiA+ICsJaWYgKHRpbWluZ3Mt PmluZGV4ID49IEFSUkFZX1NJWkUoZm10X2NhcCkpDQo+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsN Cj4gPiA+ICsNCj4gPiA+ICsJaWYgKHRpbWluZ3MtPnBhZCAhPSAwKQ0KPiA+ID4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ID4gPiArDQo+ID4gPiArCXRpbWluZ3MtPnRpbWluZ3MgPSBmbXRfY2FwW3Rp bWluZ3MtPmluZGV4XTsNCj4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ ID4gKy8qKg0KPiA+ID4gKyAqIHhzZGlyeHNzX3F1ZXJ5X2R2X3RpbWluZ3M6IFF1ZXJ5IGZvciB0 aGUgY3VycmVudCBEViB0aW1pbmdzDQo+ID4gPiArICogQHNkOiBwb2ludGVyIHRvIHY0bDIgc3Vi ZGV2IHN0cnVjdHVyZQ0KPiA+ID4gKyAqIEB0aW1pbmdzOiBEViB0aW1pbmdzIHN0cnVjdHVyZSB0 byBiZSByZXR1cm5lZC4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFJldHVybjogLUVOT0xDSyB3aGVu IHZpZGVvIGlzIG5vdCBsb2NrZWQsIC1FUkFOR0Ugd2hlbg0KPiBjb3JyZXNwb25kaW5nDQo+ID4g dGltaW5nDQo+ID4gPiArICogZW50cnkgaXMgbm90IGZvdW5kIG9yIHplcm8gb24gc3VjY2Vzcy4N Cj4gPiA+ICsgKi8NCj4gPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX3F1ZXJ5X2R2X3RpbWluZ3Mo c3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiA+ICsJCQkJICAgICBzdHJ1Y3QgdjRsMl9kdl90 aW1pbmdzICp0aW1pbmdzKQ0KPiA+ID4gK3sNCj4gPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRl ICpzdGF0ZSA9IHRvX3hzZGlyeHNzc3RhdGUoc2QpOw0KPiA+ID4gKwl1bnNpZ25lZCBpbnQgaTsN Cj4gPiA+ICsNCj4gPiA+ICsJaWYgKCFzdGF0ZS0+dmlkbG9ja2VkKQ0KPiA+ID4gKwkJcmV0dXJu IC1FTk9MQ0s7DQo+ID4gPiArDQo+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHhz ZGlyeHNzX2R2X3RpbWluZ3MpOyBpKyspIHsNCj4gPiA+ICsJCWlmIChzdGF0ZS0+Zm9ybWF0Lndp ZHRoID09IHhzZGlyeHNzX2R2X3RpbWluZ3NbaV0ud2lkdGggJiYNCj4gPiA+ICsJCSAgICBzdGF0 ZS0+Zm9ybWF0LmhlaWdodCA9PSB4c2Rpcnhzc19kdl90aW1pbmdzW2ldLmhlaWdodCAmJg0KPiA+ ID4gKwkJICAgIHN0YXRlLT5mcmFtZV9pbnRlcnZhbC5kZW5vbWluYXRvciA9PQ0KPiA+ID4gKwkJ ICAgICh4c2Rpcnhzc19kdl90aW1pbmdzW2ldLmZwcyAqIDEwMDApKSB7DQo+ID4gPiArCQkJKnRp bWluZ3MgPSB4c2Rpcnhzc19kdl90aW1pbmdzW2ldLmZvcm1hdDsNCj4gPiA+ICsJCQlyZXR1cm4g MDsNCj4gPiA+ICsJCX0NCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gLUVSQU5H RTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4g PiA+ICsgKiBNZWRpYSBPcGVyYXRpb25zDQo+ID4gPiArICovDQo+ID4gPiArDQo+ID4gPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBtZWRpYV9lbnRpdHlfb3BlcmF0aW9ucyB4c2Rpcnhzc19tZWRpYV9v cHMgPSB7DQo+ID4gPiArCS5saW5rX3ZhbGlkYXRlID0gdjRsMl9zdWJkZXZfbGlua192YWxpZGF0 ZQ0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0 cmxfb3BzIHhzZGlyeHNzX2N0cmxfb3BzID0gew0KPiA+ID4gKwkuZ192b2xhdGlsZV9jdHJsID0g eHNkaXJ4c3NfZ192b2xhdGlsZV9jdHJsLA0KPiA+ID4gKwkuc19jdHJsCT0geHNkaXJ4c3Nfc19j dHJsDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJf Y3RybF9jb25maWcgeHNkaXJ4c3NfZWRoX2N0cmxzW10gPSB7DQo+ID4gPiArCXsNCj4gPiA+ICsJ CS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMsDQo+ID4gPiArCQkuaWQJPSBWNEwyX0NJRF9YSUxJ TlhfU0RJUlhfRURIX0VSUkNOVF9FTkFCTEUsDQo+ID4gPiArCQkubmFtZQk9ICJTREkgUnggOiBF REggRXJyb3IgQ291bnQgRW5hYmxlIiwNCj4gPiA+ICsJCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVf QklUTUFTSywNCj4gPiA+ICsJCS5taW4JPSAwLA0KPiA+ID4gKwkJLm1heAk9IFhTRElSWF9FREhf QUxMRVJSX01BU0ssDQo+ID4gPiArCQkuZGVmCT0gMCwNCj4gPiA+ICsJfSwgew0KPiA+ID4gKwkJ Lm9wcwk9ICZ4c2Rpcnhzc19jdHJsX29wcywNCj4gPiA+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElO WF9TRElSWF9FREhfRVJSQ05ULA0KPiA+ID4gKwkJLm5hbWUJPSAiU0RJIFJ4IDogRURIIEVycm9y IENvdW50IiwNCj4gPiA+ICsJCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwNCj4gPiA+ ICsJCS5taW4JPSAwLA0KPiA+ID4gKwkJLm1heAk9IDB4RkZGRiwNCj4gPiA+ICsJCS5zdGVwCT0g MSwNCj4gPiA+ICsJCS5kZWYJPSAwLA0KPiA+ID4gKwkJLmZsYWdzICA9IFY0TDJfQ1RSTF9GTEFH X1ZPTEFUSUxFIHwNCj4gPiBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFksDQo+ID4gPiArCX0sIHsN Cj4gPiA+ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMsDQo+ID4gPiArCQkuaWQJPSBWNEwy X0NJRF9YSUxJTlhfU0RJUlhfRURIX1NUQVRVUywNCj4gPiA+ICsJCS5uYW1lCT0gIlNESSBSeCA6 IEVESCBTdGF0dXMiLA0KPiA+ID4gKwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLA0K PiA+ID4gKwkJLm1pbgk9IDAsDQo+ID4gPiArCQkubWF4CT0gMHhGRkZGRkZGRiwNCj4gPiA+ICsJ CS5zdGVwCT0gMSwNCj4gPiA+ICsJCS5kZWYJPSAwLA0KPiA+ID4gKwkJLmZsYWdzICA9IFY0TDJf Q1RSTF9GTEFHX1ZPTEFUSUxFIHwNCj4gPiBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFksDQo+ID4g PiArCX0NCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRs Ml9jdHJsX2NvbmZpZyB4c2Rpcnhzc19jdHJsc1tdID0gew0KPiA+ID4gKwl7DQo+ID4gPiArCQku b3BzCT0gJnhzZGlyeHNzX2N0cmxfb3BzLA0KPiA+ID4gKwkJLmlkCT0gVjRMMl9DSURfWElMSU5Y X1NESVJYX0ZSQU1FUiwNCj4gPiA+ICsJCS5uYW1lCT0gIlNESSBSeCA6IEVuYWJsZSBGcmFtZXIi LA0KPiA+ID4gKwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLA0KPiA+ID4gKwkJLm1p bgk9IGZhbHNlLA0KPiA+ID4gKwkJLm1heAk9IHRydWUsDQo+ID4gPiArCQkuc3RlcAk9IDEsDQo+ ID4gPiArCQkuZGVmCT0gdHJ1ZSwNCj4gPiA+ICsJfSwgew0KPiA+ID4gKwkJLm9wcwk9ICZ4c2Rp cnhzc19jdHJsX29wcywNCj4gPiA+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElOWF9TRElSWF9WSURM T0NLX1dJTkRPVywNCj4gPiA+ICsJCS5uYW1lCT0gIlNESSBSeCA6IFZpZGVvIExvY2sgV2luZG93 IiwNCj4gPiA+ICsJCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwNCj4gPiA+ICsJCS5t aW4JPSAwLA0KPiA+ID4gKwkJLm1heAk9IDB4RkZGRkZGRkYsDQo+ID4gPiArCQkuc3RlcAk9IDEs DQo+ID4gPiArCQkuZGVmCT0gWFNESVJYX0RFRkFVTFRfVklERU9fTE9DS19XSU5ET1csDQo+ID4g PiArCX0sIHsNCj4gPiA+ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMsDQo+ID4gPiArCQku aWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfU0VBUkNIX01PREVTLA0KPiA+ID4gKwkJLm5hbWUJ PSAiU0RJIFJ4IDogTW9kZXMgc2VhcmNoIE1hc2siLA0KPiA+ID4gKwkJLnR5cGUJPSBWNEwyX0NU UkxfVFlQRV9CSVRNQVNLLA0KPiA+ID4gKwkJLm1pbgk9IDAsDQo+ID4gPiArCQkubWF4CT0gWFNE SVJYX0RFVEVDVF9BTExfTU9ERVMsDQo+ID4gPiArCQkuZGVmCT0gWFNESVJYX0RFVEVDVF9BTExf TU9ERVMsDQo+ID4gPiArCX0sIHsNCj4gPiA+ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMs DQo+ID4gPiArCQkuaWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfTU9ERV9ERVRFQ1QsDQo+ID4g PiArCQkubmFtZQk9ICJTREkgUnggOiBNb2RlIERldGVjdCBTdGF0dXMiLA0KPiA+ID4gKwkJLnR5 cGUJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLA0KPiA+ID4gKwkJLm1pbgk9IFhTRElSWF9NT0RF X1NEX09GRlNFVCwNCj4gPiA+ICsJCS5tYXgJPSBYU0RJUlhfTU9ERV8xMkdGX09GRlNFVCwNCj4g PiA+ICsJCS5zdGVwCT0gMSwNCj4gPiA+ICsJCS5mbGFncyAgPSBWNEwyX0NUUkxfRkxBR19WT0xB VElMRSB8DQo+ID4gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZLA0KPiA+ID4gKwl9LCB7DQo+ID4g PiArCQkub3BzCT0gJnhzZGlyeHNzX2N0cmxfb3BzLA0KPiA+ID4gKwkJLmlkCT0gVjRMMl9DSURf WElMSU5YX1NESVJYX0NSQywNCj4gPiA+ICsJCS5uYW1lCT0gIlNESSBSeCA6IENSQyBFcnJvciBz dGF0dXMiLA0KPiA+ID4gKwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLA0KPiA+ID4g KwkJLm1pbgk9IDAsDQo+ID4gPiArCQkubWF4CT0gMHhGRkZGRkZGRiwNCj4gPiA+ICsJCS5zdGVw CT0gMSwNCj4gPiA+ICsJCS5kZWYJPSAwLA0KPiA+ID4gKwkJLmZsYWdzICA9IFY0TDJfQ1RSTF9G TEFHX1ZPTEFUSUxFIHwNCj4gPiBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFksDQo+ID4gPiArCX0s IHsNCj4gPiA+ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMsDQo+ID4gPiArCQkuaWQJPSBW NEwyX0NJRF9YSUxJTlhfU0RJUlhfVFNfSVNfSU5URVJMQUNFRCwNCj4gPiA+ICsJCS5uYW1lCT0g IlNESSBSeCA6IFRTIGlzIEludGVybGFjZWQiLA0KPiA+ID4gKwkJLnR5cGUJPSBWNEwyX0NUUkxf VFlQRV9CT09MRUFOLA0KPiA+ID4gKwkJLm1pbgk9IGZhbHNlLA0KPiA+ID4gKwkJLm1heAk9IHRy dWUsDQo+ID4gPiArCQkuZGVmCT0gZmFsc2UsDQo+ID4gPiArCQkuc3RlcAk9IDEsDQo+ID4gPiAr CQkuZmxhZ3MgID0gVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUgfA0KPiA+IFY0TDJfQ1RSTF9GTEFH X1JFQURfT05MWSwNCj4gPiA+ICsJfSwgew0KPiA+ID4gKwkJLm9wcwk9ICZ4c2Rpcnhzc19jdHJs X29wcywNCj4gPiA+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElOWF9TRElSWF9BQ1RJVkVfU1RSRUFN UywNCj4gPiA+ICsJCS5uYW1lCT0gIlNESSBSeCA6IEFjdGl2ZSBTdHJlYW1zIiwNCj4gPiA+ICsJ CS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwNCj4gPiA+ICsJCS5taW4JPSAxLA0KPiA+ ID4gKwkJLm1heAk9IDE2LA0KPiA+ID4gKwkJLmRlZgk9IDEsDQo+ID4gPiArCQkuc3RlcAk9IDEs DQo+ID4gPiArCQkuZmxhZ3MgID0gVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUgfA0KPiA+IFY0TDJf Q1RSTF9GTEFHX1JFQURfT05MWSwNCj4gPiA+ICsJfSwgew0KPiA+ID4gKwkJLm9wcwk9ICZ4c2Rp cnhzc19jdHJsX29wcywNCj4gPiA+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElOWF9TRElSWF9JU18z R0IsDQo+ID4gPiArCQkubmFtZQk9ICJTREkgUnggOiBJcyAzR0IiLA0KPiA+ID4gKwkJLnR5cGUJ PSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLA0KPiA+ID4gKwkJLm1pbgk9IGZhbHNlLA0KPiA+ID4g KwkJLm1heAk9IHRydWUsDQo+ID4gPiArCQkuZGVmCT0gZmFsc2UsDQo+ID4gPiArCQkuc3RlcAk9 IDEsDQo+ID4gPiArCQkuZmxhZ3MgID0gVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUgfA0KPiA+IFY0 TDJfQ1RSTF9GTEFHX1JFQURfT05MWSwNCj4gPiA+ICsJfQ0KPiA+DQo+ID4gQWxsIHRoZXNlIGNv bnRyb2xzIG5lZWQgdG8gYmUgZG9jdW1lbnRlZCBpbiB0aGUgaGVhZGVyLiBTb21lIG9mIHRoZXNl DQo+IGNvbnRyb2xzDQo+ID4gbWF5IHR1cm4gb3V0IHRvIGJlIGNvbnRyb2xzIHRoYXQgY2FuIGJl IHN0YW5kYXJkaXplZCBmb3IgU0RJIHJlY2VpdmVycywgb3RoZXJzDQo+ID4gbWlnaHQgYmUgbW9y ZSB2ZW5kb3Igb3IgZHJpdmVyIHNwZWNpZmljLg0KPiA+DQo+IA0KPiBJIGhhdmUgZG9jdW1lbnRl ZCB0aGVzZSBpbiB0aGUgaGVhZGVyLiBCdXQgaXQgc2VlbXMgaW5zdWZmaWNpZW50LiBMZXQgbWUg YWRkDQo+IG1vcmUgaW5mbyBpbiBpdC4NCj4gTW9zdCBvZiB0aGlzIGlzIElQIHNwZWNpZmljLiBQ cm9iYWJseSBNb2RlIGRldGVjdGVkIGFuZCBBY3RpdmUgc3RyZWFtcyBjYW4gYmUNCj4gc3RhbmRh cmRpemVkLg0KPiANCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgeHNkaXJ4c3NfY29yZV9vcHMgPSB7DQo+ID4gPiArCS5s b2dfc3RhdHVzID0geHNkaXJ4c3NfbG9nX3N0YXR1cywNCj4gPiA+ICsJLnN1YnNjcmliZV9ldmVu dCA9IHhzZGlyeHNzX3N1YnNjcmliZV9ldmVudCwNCj4gPiA+ICsJLnVuc3Vic2NyaWJlX2V2ZW50 ID0geHNkaXJ4c3NfdW5zdWJzY3JpYmVfZXZlbnQNCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHhzZGlyeHNzX3ZpZGVv X29wcyA9IHsNCj4gPiA+ICsJLmdfZnJhbWVfaW50ZXJ2YWwgPSB4c2Rpcnhzc19nX2ZyYW1lX2lu dGVydmFsLA0KPiA+ID4gKwkuc19zdHJlYW0gPSB4c2Rpcnhzc19zX3N0cmVhbSwNCj4gPiA+ICsJ LmdfaW5wdXRfc3RhdHVzID0geHNkaXJ4c3NfZ19pbnB1dF9zdGF0dXMsDQo+ID4gPiArCS5xdWVy eV9kdl90aW1pbmdzID0geHNkaXJ4c3NfcXVlcnlfZHZfdGltaW5ncywNCj4gPg0KPiA+IFRoaXMg aXMgbWlzc2luZyBnL3NfZHZfdGltaW5ncy4gWW91IG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUg Y3VycmVudA0KPiA+IHRpbWluZ3MgaW4gdGhlIGRyaXZlciBzdGF0ZTogdHlwaWNhbGx5IHVzZXJz cGFjZSB3aWxsIHF1ZXJ5IHRpbWluZ3MgYW5kDQo+ID4gaWYgdGhhdCByZXR1cm5zIHZhbGlkIHRp bWluZ3MgaXQgd2lsbCBzZXQgdGhlbSAoc19kdl90aW1pbmdzKS4gV2l0aA0KPiA+IGdfZHZfdGlt aW5ncyB0aGUgbGFzdCBzZXQgdGltaW5ncyBhcmUgcmV0dXJuZWQuDQo+ID4NCj4gDQo+IFRoYW5r cyBmb3Igc2hhcmluZyB0aGlzIGluZm9ybWF0aW9uLiBJIGRpZG4ndCBnZXQgdGhlIHNlcXVlbmNl IGZyb20gdGhlIGN1cnJlbnQNCj4gZG9jdW1lbnRhdGlvbi4NCj4gTGV0IG1lIGtub3cgaWYgdGhl cmUgaXMgYSBzdGFuZGFyZCBhcHBsaWNhdGlvbiB0aGF0IEkgbWF5IHJlZmVyIHRvIGZvciB0aGlz Lg0KPiANCj4gPiBJZiB0aGUgdGltaW5ncyBjaGFuZ2UgdGhlbiB0aGUgZHJpdmVyIHN0b3BzIHN0 cmVhbWluZyBhbmQgcmVwb3J0cyB0aGUNCj4gPiBTT1VSQ0VfQ0hBTkdFIGV2ZW50LCBhdCB3aGlj aCBwb2ludCB1c2Vyc3BhY2Ugd2lsbCBxdWVyeSB0aGUgbmV3IHRpbWluZ3MuDQo+ID4NCj4gDQo+ IFRoZSBTT1VSQ0VfQ0hBTkdFIGV2ZW50IHdpbGwgYmUgZ2VuZXJhdGVkIG9ubHkgYWZ0ZXIgc3Rv cHBpbmcgdGhlDQo+IHN0cmVhbWluZyB0byB0aGUgZG93bnN0cmVhbSBieQ0KPiBkaXNhYmxpbmcg dGhlIGJyaWRnZXMuIFRoZSBjb3JlIHdpbGwgYWx3YXlzIGJlIGVuYWJsZWQgdG8gZGV0ZWN0IGFu eSBvdGhlcg0KPiBpbmNvbWluZyBzdHJlYW0uDQo+IE9uY2UgYSBuZXcgaW5jb21pbmcgc3RyZWFt IGlzIGRldGVjdGVkIGZvciB2aWRlb19sb2NrX3dpbmRvdyBhbW91bnQgb2YNCj4gdGltZSwgIGEg dmlkZW8gbG9jayBpbnRlcnJ1cHQgb2NjdXJzLg0KPiANCj4gPiBUaGUgcmVwb3J0ZWQgbWVkaWFi dXMgZm9ybWF0IHJlc29sdXRpb24gb25seSBjaGFuZ2VzIHdoZW4gc19kdl90aW1pbmdzDQo+ID4g aXMgY2FsbGVkOiBpdCdzIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IHdpZHRoL2hlaWdodCBpbmZvLg0K PiA+DQo+IA0KPiBJIHdpbGwgY3JlYXRlIGFub3RoZXIgdjRsMl9tYnVzX2ZyYW1lZm10IG1lbWJl ciBpbiB0aGUgc3RhdGUgc3RydWN0dXJlIHdoaWNoDQo+IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRo ZSBkZXRlY3RlZCBmb3JtYXRzIGluIHRoZSBzX2R2X3RpbWluZ3MuDQo+IFRoZW4gYXBwbGljYXRp b24gbWF5IGNhbGwgZ2V0L3NldF9mbXQoKS4NCj4gDQo+ID4gSW4gb3RoZXIgd29yZHM6IHRoZSB0 aW1pbmdzIHJlcG9ydGVkIGJ5IGdfZHZfdGltaW5ncyBhcmUgY29udHJvbGxlZCBieQ0KPiA+IHVz ZXJzcGFjZSwgdGhlIHRpbWluZ3MgcmVwb3J0ZWQgYnkgcXVlcnlfZHZfdGltaW5ncyByZWZsZWN0 IHRoZSBhY3R1YWwNCj4gPiB0aW1pbmdzIHJlY2VpdmVkIG9uIHRoZSBTREkgYnVzLg0KPiA+DQo+ IA0KPiBUaGFua3MgZm9yIHRoaXMgZGV0YWlsZWQgZXhwbGFuYXRpb24uIPCfmIoNCj4gDQo+ID4g PiArfTsNCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3Bh ZF9vcHMgeHNkaXJ4c3NfcGFkX29wcyA9IHsNCj4gPiA+ICsJLmluaXRfY2ZnID0geHNkaXJ4c3Nf aW5pdF9jZmcsDQo+ID4gPiArCS5nZXRfZm10ID0geHNkaXJ4c3NfZ2V0X2Zvcm1hdCwNCj4gPiA+ ICsJLnNldF9mbXQgPSB4c2Rpcnhzc19zZXRfZm9ybWF0LA0KPiA+ID4gKwkuZW51bV9tYnVzX2Nv ZGUgPSB4c2Rpcnhzc19lbnVtX21idXNfY29kZSwNCj4gPiA+ICsJLmVudW1fZHZfdGltaW5ncyA9 IHhzZGlyeHNzX2VudW1fZHZfdGltaW5ncywNCj4gPg0KPiA+IFRoaXMgaXMgbWlzc2luZyBkdl90 aW1pbmdzX2NhcC4NCj4gPg0KPiANCj4gSSB3aWxsIGFkZCB0aGlzIGluIHRoZSBuZXh0IHZlcnNp b24uDQo+IA0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2 NGwyX3N1YmRldl9vcHMgeHNkaXJ4c3Nfb3BzID0gew0KPiA+ID4gKwkuY29yZSA9ICZ4c2Rpcnhz c19jb3JlX29wcywNCj4gPiA+ICsJLnZpZGVvID0gJnhzZGlyeHNzX3ZpZGVvX29wcywNCj4gPiA+ ICsJLnBhZCA9ICZ4c2Rpcnhzc19wYWRfb3BzDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICsv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ID4gKyAqIFBsYXRmb3JtIERldmljZSBEcml2ZXIN Cj4gPiA+ICsgKi8NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX3BhcnNlX29m KHN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MpDQo+ID4gPiArew0KPiA+ID4gKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSB4c2Rpcnhzcy0+Y29yZS5kZXYtPm9mX25vZGU7DQo+ID4g PiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5jb3JlOw0KPiA+ID4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb3JlLT5kZXY7DQo+ID4gPiArCXN0cnVjdCBmd25vZGVf aGFuZGxlICplcCwgKnJlcDsNCj4gPiA+ICsJaW50IHJldDsNCj4gPiA+ICsJY29uc3QgY2hhciAq c2RpX3N0ZDsNCj4gPiA+ICsNCj4gPiA+ICsJY29yZS0+aW5jbHVkZV9lZGggPSBvZl9wcm9wZXJ0 eV9yZWFkX2Jvb2wobm9kZSwgInhsbngsaW5jbHVkZS1lZGgiKTsNCj4gPiA+ICsJZGV2X2RiZyhk ZXYsICJFREggcHJvcGVydHkgPSAlc1xuIiwNCj4gPiA+ICsJCWNvcmUtPmluY2x1ZGVfZWRoID8g IlByZXNlbnQiIDogIkFic2VudCIpOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXQgPSBvZl9wcm9wZXJ0 eV9yZWFkX3N0cmluZyhub2RlLCAieGxueCxsaW5lLXJhdGUiLCAmc2RpX3N0ZCk7DQo+ID4gPiAr CWlmIChyZXQgPCAwKSB7DQo+ID4gPiArCQlkZXZfZXJyKGRldiwgInhsbngsbGluZS1yYXRlIHBy b3BlcnR5IG5vdCBmb3VuZFxuIik7DQo+ID4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ID4gKwl9DQo+ ID4gPiArDQo+ID4gPiArCWlmICghc3RybmNtcChzZGlfc3RkLCAiMTJHX1NESV84RFMiLCBYU0RJ UlhfTUFYX1NUUl9MRU5HVEgpKSB7DQo+ID4gPiArCQljb3JlLT5tb2RlID0gWFNESVJYU1NfU0RJ X1NURF8xMkdfOERTOw0KPiA+ID4gKwl9IGVsc2UgaWYgKCFzdHJuY21wKHNkaV9zdGQsICI2R19T REkiLCBYU0RJUlhfTUFYX1NUUl9MRU5HVEgpKSB7DQo+ID4gPiArCQljb3JlLT5tb2RlID0gWFNE SVJYU1NfU0RJX1NURF82RzsNCj4gPiA+ICsJfSBlbHNlIGlmICghc3RybmNtcChzZGlfc3RkLCAi M0dfU0RJIiwgWFNESVJYX01BWF9TVFJfTEVOR1RIKSkgew0KPiA+ID4gKwkJY29yZS0+bW9kZSA9 IFhTRElSWFNTX1NESV9TVERfM0c7DQo+ID4gPiArCX0gZWxzZSB7DQo+ID4gPiArCQlkZXZfZXJy KGRldiwgIkludmFsaWQgTGluZSBSYXRlXG4iKTsNCj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOw0K PiA+ID4gKwl9DQo+ID4gPiArCWRldl9kYmcoZGV2LCAiU0RJIFJ4IExpbmUgUmF0ZSA9ICVzLCBt b2RlID0gJWRcbiIsIHNkaV9zdGQsDQo+ID4gPiArCQljb3JlLT5tb2RlKTsNCj4gPiA+ICsNCj4g PiA+ICsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInhsbngsYnBwIiwgJmNvcmUt PmJwYyk7DQo+ID4gPiArCWlmIChyZXQgPCAwKSB7DQo+ID4gPiArCQlkZXZfZXJyKGRldiwgImZh aWxlZCB0byBnZXQgeGxueCxicHBcbiIpOw0KPiA+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiA+ICsJ fQ0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoY29yZS0+YnBjICE9IDEwICYmIGNvcmUtPmJwYyAhPSAx Mikgew0KPiA+ID4gKwkJZGV2X2VycihkZXYsICJiaXRzIHBlciBjb21wb25lbnQ9JXUuIENhbiBi ZSAxMCBvciAxMiBvbmx5XG4iLA0KPiA+ID4gKwkJCWNvcmUtPmJwYyk7DQo+ID4gPiArCQlyZXR1 cm4gLUVJTlZBTDsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwllcCA9IGZ3bm9kZV9ncmFw aF9nZXRfZW5kcG9pbnRfYnlfaWQoZGV2X2Z3bm9kZShkZXYpLCAwLCAwLA0KPiA+ID4gKw0KPiA+ IEZXTk9ERV9HUkFQSF9FTkRQT0lOVF9ORVhUKTsNCj4gPiA+ICsJaWYgKCFlcCkgew0KPiA+ID4g KwkJZGV2X2VycihkZXYsICJubyBzb3VyY2UgcG9ydCBmb3VuZCIpOw0KPiA+ID4gKwkJcmV0ID0g LUVJTlZBTDsNCj4gPiA+ICsJCWdvdG8gZHRfcGFyc2VfZG9uZTsNCj4gPiA+ICsJfQ0KPiA+ID4g Kw0KPiA+ID4gKwlyZXAgPSBmd25vZGVfZ3JhcGhfZ2V0X3JlbW90ZV9lbmRwb2ludChlcCk7DQo+ ID4gPiArCWlmICghcmVwKSB7DQo+ID4gPiArCQlkZXZfZXJyKGRldiwgIm5vIHJlbW90ZSBzaW5r IGVuZHBvaW50IGZvdW5kIik7DQo+ID4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ID4gKwl9DQo+ ID4gPiArDQo+ID4gPiArCWZ3bm9kZV9oYW5kbGVfcHV0KHJlcCk7DQo+ID4gPiArZHRfcGFyc2Vf ZG9uZToNCj4gPiA+ICsJZndub2RlX2hhbmRsZV9wdXQoZXApOw0KPiA+ID4gKwlyZXR1cm4gcmV0 Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gPiArew0KPiA+ID4gKwlzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnN1YmRldjsNCj4gPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2Rpcnhz czsNCj4gPiA+ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmU7DQo+ID4gPiArCXN0cnVjdCBk ZXZpY2UgKmRldjsNCj4gPiA+ICsJaW50IHJldDsNCj4gPiA+ICsJdW5zaWduZWQgaW50IG51bV9j dHJscywgbnVtX2VkaF9jdHJscyA9IDAsIGk7DQo+ID4gPiArDQo+ID4gPiArCXhzZGlyeHNzID0g ZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqeHNkaXJ4c3MpLCBHRlBfS0VSTkVMKTsN Cj4gPiA+ICsJaWYgKCF4c2RpcnhzcykNCj4gPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ID4g Kw0KPiA+ID4gKwl4c2Rpcnhzcy0+Y29yZS5kZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ID4gKwljb3Jl ID0gJnhzZGlyeHNzLT5jb3JlOw0KPiA+ID4gKwlkZXYgPSBjb3JlLT5kZXY7DQo+ID4gPiArDQo+ ID4gPiArCS8qIFJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyICovDQo+ID4gPiArCWNvcmUtPmly cSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQo+ID4gPiArCXJldCA9IGRldm1fcmVxdWVz dF90aHJlYWRlZF9pcnEoZGV2LCBjb3JlLT5pcnEsIE5VTEwsDQo+ID4gPiArCQkJCQl4c2Rpcnhz c19pcnFfaGFuZGxlciwgSVJRRl9PTkVTSE9ULA0KPiA+ID4gKwkJCQkJZGV2X25hbWUoZGV2KSwg eHNkaXJ4c3MpOw0KPiA+ID4gKwlpZiAocmV0KSB7DQo+ID4gPiArCQlkZXZfZXJyKGRldiwgIkVy ciA9ICVkIEludGVycnVwdCBoYW5kbGVyIHJlZyBmYWlsZWQhXG4iLA0KPiA+ID4gKwkJCXJldCk7 DQo+ID4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCWNvcmUt Pm51bV9jbGtzID0gQVJSQVlfU0laRSh4c2Rpcnhzc19jbGtzKTsNCj4gPiA+ICsJY29yZS0+Y2xr cyA9IGRldm1fa2NhbGxvYyhkZXYsIGNvcmUtPm51bV9jbGtzLA0KPiA+ID4gKwkJCQkgIHNpemVv ZigqY29yZS0+Y2xrcyksIEdGUF9LRVJORUwpOw0KPiA+ID4gKwlpZiAoIWNvcmUtPmNsa3MpDQo+ ID4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiA+ICsNCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8 IGNvcmUtPm51bV9jbGtzOyBpKyspDQo+ID4gPiArCQljb3JlLT5jbGtzW2ldLmlkID0geHNkaXJ4 c3NfY2xrc1tpXTsNCj4gPiA+ICsNCj4gPiA+ICsJcmV0ID0gZGV2bV9jbGtfYnVsa19nZXQoZGV2 LCBjb3JlLT5udW1fY2xrcywgY29yZS0+Y2xrcyk7DQo+ID4gPiArCWlmIChyZXQpDQo+ID4gPiAr CQlyZXR1cm4gcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKwlyZXQgPSBjbGtfYnVsa19wcmVwYXJlX2Vu YWJsZShjb3JlLT5udW1fY2xrcywgY29yZS0+Y2xrcyk7DQo+ID4gPiArCWlmIChyZXQpDQo+ID4g PiArCQlyZXR1cm4gcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKwlyZXQgPSB4c2Rpcnhzc19wYXJzZV9v Zih4c2Rpcnhzcyk7DQo+ID4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ID4gKwkJZ290byBjbGtfZXJy Ow0KPiA+ID4gKw0KPiA+ID4gKwljb3JlLT5pb21lbSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9y ZXNvdXJjZShwZGV2LCAwKTsNCj4gPiA+ICsJaWYgKElTX0VSUihjb3JlLT5pb21lbSkpIHsNCj4g PiA+ICsJCXJldCA9IFBUUl9FUlIoY29yZS0+aW9tZW0pOw0KPiA+ID4gKwkJZ290byBjbGtfZXJy Ow0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCS8qIFJlc2V0IHRoZSBjb3JlICovDQo+ID4g PiArCXhzZGlyeF9zdHJlYW1mbG93X2NvbnRyb2woY29yZSwgZmFsc2UpOw0KPiA+ID4gKwl4c2Rp cnhfY29yZV9kaXNhYmxlKGNvcmUpOw0KPiA+ID4gKwl4c2RpcnhfY2xlYXJpbnRyKGNvcmUsIFhT RElSWF9JTlRSX0FMTF9NQVNLKTsNCj4gPiA+ICsJeHNkaXJ4X2Rpc2FibGVpbnRyKGNvcmUsIFhT RElSWF9JTlRSX0FMTF9NQVNLKTsNCj4gPiA+ICsJeHNkaXJ4X2VuYWJsZWludHIoY29yZSwgWFNE SVJYX0lOVFJfQUxMX01BU0spOw0KPiA+ID4gKwl4c2RpcnhfZ2xvYmFsaW50cihjb3JlLCB0cnVl KTsNCj4gPiA+ICsJeHNkaXJ4c3Nfd3JpdGUoY29yZSwgWFNESVJYX0NSQ19FUlJDTlRfUkVHLCAw eEZGRkYpOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBJbml0aWFsaXplIFY0TDIgc3ViZGV2aWNlIGFu ZCBtZWRpYSBlbnRpdHkgKi8NCj4gPiA+ICsJeHNkaXJ4c3MtPnBhZC5mbGFncyA9IE1FRElBX1BB RF9GTF9TT1VSQ0U7DQo+ID4gPiArDQo+ID4gPiArCS8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQg Zm9ybWF0ICovDQo+ID4gPiArCWlmIChjb3JlLT5icGMgPT0gMTApDQo+ID4gPiArCQl4c2Rpcnhz cy0+ZGVmYXVsdF9mb3JtYXQuY29kZSA9DQo+ID4gTUVESUFfQlVTX0ZNVF9VWVZZMTBfMVgyMDsN Cj4gPiA+ICsJZWxzZQ0KPiA+ID4gKwkJeHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0LmNvZGUgPQ0K PiA+IE1FRElBX0JVU19GTVRfVVlWWTEyXzFYMjQ7DQo+ID4gPiArCXhzZGlyeHNzLT5kZWZhdWx0 X2Zvcm1hdC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsNCj4gPiA+ICsJeHNkaXJ4c3MtPmRlZmF1 bHRfZm9ybWF0LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfREVGQVVMVDsNCj4gPg0KPiA+ IFRoaXMgc2hvdWxkbid0IGJlIERFRkFVTFQuIENhbiB5b3UgZXhwbGFpbiBhIGJpdCBob3cgY29s b3JzcGFjZSAob3INCj4gPiBjb2xvcmltZXRyeQ0KPiA+IGluIGdlbmVyYWwpIGlzIGRldGVybWlu ZWQgZm9yIFNEST8NCj4gPg0KPiANCj4gVGhhdCBpcyBjb3JyZWN0LiBBcyBtZW50aW9uZWQgZWFy bGllciB0aGUgY29sb3JzcGFjZSBpbiBTREkgaXMgZGV0ZXJtaW5lZCBieSBiaXQNCj4gNSBhbmQg NCBvZiBieXRlIDMgb2YgdGhlIDQgYnl0ZSBTVCAzNTIgcGF5bG9hZCBhcyBwZXIgU01QVEUgMjA4 MS0xMDoyMDE4DQo+IA0KPiA+ID4gKwl4c2Rpcnhzcy0+ZGVmYXVsdF9mb3JtYXQud2lkdGggPSBY U0RJUlhfREVGQVVMVF9XSURUSDsNCj4gPiA+ICsJeHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0Lmhl aWdodCA9IFhTRElSWF9ERUZBVUxUX0hFSUdIVDsNCj4gPiA+ICsNCj4gPiA+ICsJeHNkaXJ4c3Mt PmZvcm1hdCA9IHhzZGlyeHNzLT5kZWZhdWx0X2Zvcm1hdDsNCj4gPiA+ICsNCj4gPiA+ICsJLyog SW5pdGlhbGl6ZSBWNEwyIHN1YmRldmljZSBhbmQgbWVkaWEgZW50aXR5ICovDQo+ID4gPiArCXN1 YmRldiA9ICZ4c2Rpcnhzcy0+c3ViZGV2Ow0KPiA+ID4gKwl2NGwyX3N1YmRldl9pbml0KHN1YmRl diwgJnhzZGlyeHNzX29wcyk7DQo+ID4gPiArDQo+ID4gPiArCXN1YmRldi0+ZGV2ID0gJnBkZXYt PmRldjsNCj4gPiA+ICsJc3Ryc2NweShzdWJkZXYtPm5hbWUsIGRldl9uYW1lKGRldiksIHNpemVv ZihzdWJkZXYtPm5hbWUpKTsNCj4gPiA+ICsNCj4gPiA+ICsJc3ViZGV2LT5mbGFncyB8PSBWNEwy X1NVQkRFVl9GTF9IQVNfRVZFTlRTIHwNCj4gPiBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERTsN Cj4gPiA+ICsNCj4gPiA+ICsJc3ViZGV2LT5lbnRpdHkub3BzID0gJnhzZGlyeHNzX21lZGlhX29w czsNCj4gPiA+ICsNCj4gPiA+ICsJdjRsMl9zZXRfc3ViZGV2ZGF0YShzdWJkZXYsIHhzZGlyeHNz KTsNCj4gPiA+ICsNCj4gPiA+ICsJcmV0ID0gbWVkaWFfZW50aXR5X3BhZHNfaW5pdCgmc3ViZGV2 LT5lbnRpdHksIDEsICZ4c2Rpcnhzcy0+cGFkKTsNCj4gPiA+ICsJaWYgKHJldCA8IDApDQo+ID4g PiArCQlnb3RvIGVycm9yOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBJbml0aWFsaXNlIGFuZCByZWdp c3RlciB0aGUgY29udHJvbHMgKi8NCj4gPiA+ICsJbnVtX2N0cmxzID0gQVJSQVlfU0laRSh4c2Rp cnhzc19jdHJscyk7DQo+ID4gPiArDQo+ID4gPiArCWlmIChjb3JlLT5pbmNsdWRlX2VkaCkNCj4g PiA+ICsJCW51bV9lZGhfY3RybHMgPSBBUlJBWV9TSVpFKHhzZGlyeHNzX2VkaF9jdHJscyk7DQo+ ID4gPiArDQo+ID4gPiArCXY0bDJfY3RybF9oYW5kbGVyX2luaXQoJnhzZGlyeHNzLT5jdHJsX2hh bmRsZXIsDQo+ID4gPiArCQkJICAgICAgIChudW1fY3RybHMgKyBudW1fZWRoX2N0cmxzKSk7DQo+ ID4gPiArDQo+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1fY3RybHM7IGkrKykgew0KPiA+ID4g KwkJc3RydWN0IHY0bDJfY3RybCAqY3RybDsNCj4gPiA+ICsNCj4gPiA+ICsJCWRldl9kYmcoZGV2 LCAiJWQgJXMgY3RybCA9IDB4JXhcbiIsIGksIHhzZGlyeHNzX2N0cmxzW2ldLm5hbWUsDQo+ID4g PiArCQkJeHNkaXJ4c3NfY3RybHNbaV0uaWQpOw0KPiA+ID4gKw0KPiA+ID4gKwkJY3RybCA9IHY0 bDJfY3RybF9uZXdfY3VzdG9tKCZ4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyLA0KPiA+ID4gKwkJCQkJ ICAgICZ4c2Rpcnhzc19jdHJsc1tpXSwgTlVMTCk7DQo+ID4gPiArCQlpZiAoIWN0cmwpIHsNCj4g PiA+ICsJCQlkZXZfZGJnKGRldiwgIkZhaWxlZCB0byBhZGQgJXMgY3RybFxuIiwNCj4gPiA+ICsJ CQkJeHNkaXJ4c3NfY3RybHNbaV0ubmFtZSk7DQo+ID4gPiArCQkJZ290byBlcnJvcjsNCj4gPiA+ ICsJCX0NCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoY29yZS0+aW5jbHVkZV9lZGgp IHsNCj4gPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBudW1fZWRoX2N0cmxzOyBpKyspIHsNCj4gPiA+ ICsJCQlzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsOw0KPiA+ID4gKw0KPiA+ID4gKwkJCWRldl9kYmco ZGV2LCAiJWQgJXMgY3RybCA9IDB4JXhcbiIsIGksDQo+ID4gPiArCQkJCXhzZGlyeHNzX2VkaF9j dHJsc1tpXS5uYW1lLA0KPiA+ID4gKwkJCQl4c2Rpcnhzc19lZGhfY3RybHNbaV0uaWQpOw0KPiA+ ID4gKw0KPiA+ID4gKwkJCWN0cmwgPSB2NGwyX2N0cmxfbmV3X2N1c3RvbSgmeHNkaXJ4c3MtPmN0 cmxfaGFuZGxlciwNCj4gPiA+ICsJCQkJCQkgICAgJnhzZGlyeHNzX2VkaF9jdHJsc1tpXSwNCj4g PiA+ICsJCQkJCQkgICAgTlVMTCk7DQo+ID4gPiArCQkJaWYgKCFjdHJsKSB7DQo+ID4gPiArCQkJ CWRldl9kYmcoZGV2LCAiRmFpbGVkIHRvIGFkZCAlcyBjdHJsXG4iLA0KPiA+ID4gKwkJCQkJeHNk aXJ4c3NfZWRoX2N0cmxzW2ldLm5hbWUpOw0KPiA+ID4gKwkJCQlnb3RvIGVycm9yOw0KPiA+ID4g KwkJCX0NCj4gPiA+ICsJCX0NCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoeHNkaXJ4 c3MtPmN0cmxfaGFuZGxlci5lcnJvcikgew0KPiA+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gYWRkIGNvbnRyb2xzXG4iKTsNCj4gPiA+ICsJCXJldCA9IHhzZGlyeHNzLT5jdHJsX2hhbmRs ZXIuZXJyb3I7DQo+ID4gPiArCQlnb3RvIGVycm9yOw0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4g PiArCXN1YmRldi0+Y3RybF9oYW5kbGVyID0gJnhzZGlyeHNzLT5jdHJsX2hhbmRsZXI7DQo+ID4g PiArDQo+ID4gPiArCXJldCA9IHY0bDJfY3RybF9oYW5kbGVyX3NldHVwKCZ4c2Rpcnhzcy0+Y3Ry bF9oYW5kbGVyKTsNCj4gPiA+ICsJaWYgKHJldCA8IDApIHsNCj4gPiA+ICsJCWRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIHNldCBjb250cm9sc1xuIik7DQo+ID4gPiArCQlnb3RvIGVycm9yOw0KPiA+ ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHhzZGly eHNzKTsNCj4gPiA+ICsNCj4gPiA+ICsJcmV0ID0gdjRsMl9hc3luY19yZWdpc3Rlcl9zdWJkZXYo c3ViZGV2KTsNCj4gPiA+ICsJaWYgKHJldCA8IDApIHsNCj4gPiA+ICsJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIHJlZ2lzdGVyIHN1YmRldlxuIik7DQo+ID4gPiArCQlnb3RvIGVycm9yOw0KPiA+ ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCXhzZGlyeHNzLT5zdHJlYW1pbmcgPSBmYWxzZTsNCj4g PiA+ICsNCj4gPiA+ICsJeHNkaXJ4X2NvcmVfZW5hYmxlKGNvcmUpOw0KPiA+ID4gKw0KPiA+ID4g KwlkZXZfaW5mbyhkZXYsICJwcm9iZSBzdWNjZXNzXG4iKTsNCj4gPiA+ICsNCj4gPiA+ICsJcmV0 dXJuIDA7DQo+ID4gPiArZXJyb3I6DQo+ID4gPiArCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnhz ZGlyeHNzLT5jdHJsX2hhbmRsZXIpOw0KPiA+ID4gKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmc3Vi ZGV2LT5lbnRpdHkpOw0KPiA+ID4gKwl4c2RpcnhfZ2xvYmFsaW50cihjb3JlLCBmYWxzZSk7DQo+ ID4gPiArCXhzZGlyeF9kaXNhYmxlaW50cihjb3JlLCBYU0RJUlhfSU5UUl9BTExfTUFTSyk7DQo+ ID4gPiArY2xrX2VycjoNCj4gPiA+ICsJY2xrX2J1bGtfZGlzYWJsZV91bnByZXBhcmUoY29yZS0+ bnVtX2Nsa3MsIGNvcmUtPmNsa3MpOw0KPiA+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ID4gK30NCj4g PiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQ0KPiA+ID4gK3sNCj4gPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4 c2RpcnhzcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ID4gKwlzdHJ1Y3QgeHNk aXJ4c3NfY29yZSAqY29yZSA9ICZ4c2Rpcnhzcy0+Y29yZTsNCj4gPiA+ICsJc3RydWN0IHY0bDJf c3ViZGV2ICpzdWJkZXYgPSAmeHNkaXJ4c3MtPnN1YmRldjsNCj4gPiA+ICsNCj4gPiA+ICsJdjRs Ml9hc3luY191bnJlZ2lzdGVyX3N1YmRldihzdWJkZXYpOw0KPiA+ID4gKwl2NGwyX2N0cmxfaGFu ZGxlcl9mcmVlKCZ4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyKTsNCj4gPiA+ICsJbWVkaWFfZW50aXR5 X2NsZWFudXAoJnN1YmRldi0+ZW50aXR5KTsNCj4gPiA+ICsNCj4gPiA+ICsJeHNkaXJ4X2dsb2Jh bGludHIoY29yZSwgZmFsc2UpOw0KPiA+ID4gKwl4c2RpcnhfZGlzYWJsZWludHIoY29yZSwgWFNE SVJYX0lOVFJfQUxMX01BU0spOw0KPiA+ID4gKwl4c2RpcnhfY29yZV9kaXNhYmxlKGNvcmUpOw0K PiA+ID4gKwl4c2Rpcnhfc3RyZWFtZmxvd19jb250cm9sKGNvcmUsIGZhbHNlKTsNCj4gPiA+ICsN Cj4gPiA+ICsJY2xrX2J1bGtfZGlzYWJsZV91bnByZXBhcmUoY29yZS0+bnVtX2Nsa3MsIGNvcmUt PmNsa3MpOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ ID4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeHNkaXJ4c3Nfb2ZfaWRfdGFi bGVbXSA9IHsNCj4gPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHYtc21wdGUtdWhkc2RpLXJ4 LXNzLTIuMCIgfSwNCj4gPiA+ICsJeyB9DQo+ID4gPiArfTsNCj4gPiA+ICtNT0RVTEVfREVWSUNF X1RBQkxFKG9mLCB4c2Rpcnhzc19vZl9pZF90YWJsZSk7DQo+ID4gPiArDQo+ID4gPiArc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeHNkaXJ4c3NfZHJpdmVyID0gew0KPiA+ID4gKwkuZHJp dmVyID0gew0KPiA+ID4gKwkJLm5hbWUJCT0gInhpbGlueC1zZGlyeHNzIiwNCj4gPiA+ICsJCS5v Zl9tYXRjaF90YWJsZQk9IHhzZGlyeHNzX29mX2lkX3RhYmxlLA0KPiA+ID4gKwl9LA0KPiA+ID4g KwkucHJvYmUJCQk9IHhzZGlyeHNzX3Byb2JlLA0KPiA+ID4gKwkucmVtb3ZlCQkJPSB4c2Rpcnhz c19yZW1vdmUsDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJp dmVyKHhzZGlyeHNzX2RyaXZlcik7DQo+ID4gPiArDQo+ID4gPiArTU9EVUxFX0FVVEhPUigiVmlz aGFsIFNhZ2FyIDx2c2FnYXJAeGlsaW54LmNvbT4iKTsNCj4gPiA+ICtNT0RVTEVfREVTQ1JJUFRJ T04oIlhpbGlueCBTREkgUnggU3Vic3lzdGVtIERyaXZlciIpOw0KPiA+ID4gK01PRFVMRV9MSUNF TlNFKCJHUEwgdjIiKTsNCj4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgveGls aW54LXNkaXJ4c3MuaCBiL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngtDQo+ID4gc2Rpcnhzcy5o DQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi42 ZjJhMDkzOTY4ZDkNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL2luY2x1ZGUvdWFw aS9saW51eC94aWxpbngtc2Rpcnhzcy5oDQo+ID4gPiBAQCAtMCwwICsxLDE3OSBAQA0KPiA+ID4g Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1u b3RlICovDQo+ID4gPiArLyoNCj4gPiA+ICsgKiBYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbSBtb2Rl LCBldmVudCwgY3VzdG9tIHRpbWluZ3MNCj4gPiA+ICsgKiBhbmQgZmxhZyBkZWZpbml0aW9ucy4N Cj4gPiA+ICsgKg0KPiA+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxOSAtIDIwMjAgWGlsaW54LCBJ bmMuDQo+ID4gPiArICoNCj4gPiA+ICsgKiBDb250YWN0czogVmlzaGFsIFNhZ2FyIDx2aXNoYWwu c2FnYXJAeGlsaW54LmNvbT4NCj4gPiA+ICsgKi8NCj4gPiA+ICsNCj4gPiA+ICsjaWZuZGVmIF9f VUFQSV9YSUxJTlhfU0RJUlhTU19IX18NCj4gPiA+ICsjZGVmaW5lIF9fVUFQSV9YSUxJTlhfU0RJ UlhTU19IX18NCj4gPiA+ICsNCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCj4gPiA+ ICsjaW5jbHVkZSA8bGludXgvdjRsMi1kdi10aW1pbmdzLmg+DQo+ID4gPiArI2luY2x1ZGUgPGxp bnV4L3ZpZGVvZGV2Mi5oPg0KPiA+ID4gKw0KPiA+ID4gKy8qDQo+ID4gPiArICogRXZlbnRzDQo+ ID4gPiArICoNCj4gPiA+ICsgKiBWNEwyX0VWRU5UX1hJTElOWF9TRElSWF9VTkRFUkZMT1c6IFZp ZGVvIGluIHRvIEFYSTQgU3RyZWFtIGNvcmUNCj4gPiB1bmRlcmZsb3dlZA0KPiA+ID4gKyAqIFY0 TDJfRVZFTlRfWElMSU5YX1NESVJYX09WRVJGTE9XOiBWaWRlbyBpbiB0byBBWEk0IFN0cmVhbSBj b3JlDQo+ID4gb3ZlcmZsb3dlZA0KPiA+ID4gKyAqLw0KPiA+ID4gKyNkZWZpbmUgVjRMMl9FVkVO VF9YSUxJTlhfU0RJUlhfQ0xBU1MNCj4gPiAoVjRMMl9FVkVOVF9QUklWQVRFX1NUQVJUIHwgMHgy MDApDQo+ID4gPiArI2RlZmluZSBWNEwyX0VWRU5UX1hJTElOWF9TRElSWF9VTkRFUkZMT1cNCj4g PiAoVjRMMl9FVkVOVF9YSUxJTlhfU0RJUlhfQ0xBU1MgfCAweDEpDQo+ID4gPiArI2RlZmluZSBW NEwyX0VWRU5UX1hJTElOWF9TRElSWF9PVkVSRkxPVw0KPiA+IChWNEwyX0VWRU5UX1hJTElOWF9T RElSWF9DTEFTUyB8IDB4MikNCj4gPiA+ICsNCj4gPiA+ICsvKg0KPiA+ID4gKyAqIFRoaXMgZW51 bSBpcyB1c2VkIHRvIHByZXBhcmUgdGhlIGJpdG1hc2sgb2YgbW9kZXMgdG8gYmUgZGV0ZWN0ZWQN Cj4gPiA+ICsgKi8NCj4gPiA+ICtlbnVtIHsNCj4gPiA+ICsJWFNESVJYX01PREVfU0RfT0ZGU0VU ID0gMCwNCj4gPiA+ICsJWFNESVJYX01PREVfSERfT0ZGU0VULA0KPiA+ID4gKwlYU0RJUlhfTU9E RV8zR19PRkZTRVQsDQo+ID4gPiArCVhTRElSWF9NT0RFXzZHX09GRlNFVCwNCj4gPiA+ICsJWFNE SVJYX01PREVfMTJHSV9PRkZTRVQsDQo+ID4gPiArCVhTRElSWF9NT0RFXzEyR0ZfT0ZGU0VULA0K PiA+ID4gKwlYU0RJUlhfTU9ERV9OVU1fU1VQUE9SVEVELA0KPiA+ID4gK307DQo+ID4gPiArDQo+ ID4gPiArI2RlZmluZSBYU0RJUlhfREVURUNUX0FMTF9NT0RFUw0KPiA+IAkoQklUKFhTRElSWF9N T0RFX1NEX09GRlNFVCkgfCBcDQo+ID4gPiArCQkJCQlCSVQoWFNESVJYX01PREVfSERfT0ZGU0VU KSB8IFwNCj4gPiA+ICsJCQkJCUJJVChYU0RJUlhfTU9ERV8zR19PRkZTRVQpIHwgXA0KPiA+ID4g KwkJCQkJQklUKFhTRElSWF9NT0RFXzZHX09GRlNFVCkgfCBcDQo+ID4gPiArCQkJCQlCSVQoWFNE SVJYX01PREVfMTJHSV9PRkZTRVQpIHwgXA0KPiA+ID4gKwkJCQkJQklUKFhTRElSWF9NT0RFXzEy R0ZfT0ZGU0VUKSkNCj4gPiA+ICsNCj4gPiA+ICsvKg0KPiA+ID4gKyAqIEVESCBFcnJvciBUeXBl cw0KPiA+ID4gKyAqIEFOQyAtIEFuY2lsbGFyeSBEYXRhIFBhY2tldCBFcnJvcnMNCj4gPiA+ICsg KiBGRiAtIEZ1bGwgRmllbGQgRXJyb3JzDQo+ID4gPiArICogQVAgLSBBY3RpdmUgUG9ydGlvbiBF cnJvcnMNCj4gPiA+ICsgKi8NCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJS Q05UX0FOQ19FREhfRVJSCQlCSVQoMCkNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05U X0FOQ19FREFfRVJSCQlCSVQoMSkNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FO Q19JREhfRVJSCQlCSVQoMikNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FOQ19J REFfRVJSCQlCSVQoMykNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FOQ19VRVNf RVJSCQlCSVQoNCkNCj4gPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0ZGX0VESF9FUlIJ CUJJVCg1KQ0KPiA+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfRkZfRURBX0VSUgkJQklU KDYpDQo+ID4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9GRl9JREhfRVJSCQlCSVQoNykN Cj4gPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0ZGX0lEQV9FUlIJCUJJVCg4KQ0KPiA+ ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfRkZfVUVTX0VSUgkJQklUKDkpDQo+ID4gPiAr I2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BUF9FREhfRVJSCQlCSVQoMTApDQo+ID4gPiArI2Rl ZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BUF9FREFfRVJSCQlCSVQoMTEpDQo+ID4gPiArI2RlZmlu ZSBYU0RJUlhfRURIX0VSUkNOVF9BUF9JREhfRVJSCQlCSVQoMTIpDQo+ID4gPiArI2RlZmluZSBY U0RJUlhfRURIX0VSUkNOVF9BUF9JREFfRVJSCQlCSVQoMTMpDQo+ID4gPiArI2RlZmluZSBYU0RJ UlhfRURIX0VSUkNOVF9BUF9VRVNfRVJSCQlCSVQoMTQpDQo+ID4gPiArI2RlZmluZSBYU0RJUlhf RURIX0VSUkNOVF9QS1RfQ0hLU1VNX0VSUglCSVQoMTUpDQo+ID4gPiArDQo+ID4gPiArI2RlZmlu ZSBYU0RJUlhfRURIX0FMTEVSUl9NQVNLCQkweEZGRkYNCj4gPiA+ICsNCj4gPiA+ICsvKiBYaWxp bnggRFYgdGltaW5ncyBub3QgaW4gbWFpbmxpbmUgeWV0ICovDQo+ID4gPiArI2RlZmluZSBYTE5Y X1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDI0IHsgXA0KPiA+ID4gKwkudHlwZSA9IFY0TDJfRFZfQlRf NjU2XzExMjAsIFwNCj4gPiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMjA0OCwgMTA4MCwgMCwg XA0KPiA+ID4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9M LCBcDQo+ID4gPiArCQk3NDI1MDAwMCwgNTEwLCA0NCwgMTQ4LCA0LCA1LCAzNiwgMCwgMCwgMCwg XA0KPiA+ID4gKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcDQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ ID4gKyNkZWZpbmUgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFAyNSB7IFwNCj4gPiA+ICsJLnR5 cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCBcDQo+ID4gPiArCVY0TDJfSU5JVF9CVF9USU1JTkdT KDIwNDgsIDEwODAsIDAsIFwNCj4gPiA+ICsJCVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJf RFZfVlNZTkNfUE9TX1BPTCwgXA0KPiA+ID4gKwkJNzQyNTAwMDAsIDQwMCwgNDQsIDE0OCwgNCwg NSwgMzYsIDAsIDAsIDAsIFwNCj4gPiA+ICsJCVY0TDJfRFZfQlRfU1REX1NESSkgXA0KPiA+ID4g K30NCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQMzAg eyBcDQo+ID4gPiArCS50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgXA0KPiA+ID4gKwlWNEwy X0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgwLCAwLCBcDQo+ID4gPiArCQlWNEwyX0RWX0hTWU5D X1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwNCj4gPiA+ICsJCTc0MjUwMDAwLCA2 NiwgMjAsIDY2LCA0LCA1LCAzNiwgMCwgMCwgMCwgXA0KPiA+ID4gKwkJVjRMMl9EVl9CVF9TVERf U0RJKSBcDQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgWExOWF9WNEwyX0RWX0JU XzIwNDhYMTA4MEk0OCB7IFwNCj4gPiA+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCBc DQo+ID4gPiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDIwNDgsIDEwODAsIDEsIFwNCj4gPiA+ICsJ CVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXA0KPiA+ID4g KwkJNzQyNTAwMDAsIDMyOSwgNDQsIDMyOSwgMiwgNSwgMTUsIDMsIDUsIDE1LCBcDQo+ID4gPiAr CQlWNEwyX0RWX0JUX1NURF9TREkpIFwNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArI2RlZmlu ZSBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwSTUwIHsgXA0KPiA+ID4gKwkudHlwZSA9IFY0TDJf RFZfQlRfNjU2XzExMjAsIFwNCj4gPiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMjA0OCwgMTA4 MCwgMSwgXA0KPiA+ID4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19Q T1NfUE9MLCBcDQo+ID4gPiArCQk3NDI1MDAwMCwgMjc0LCA0NCwgMjc0LCAyLCA1LCAxNSwgMywg NSwgMTUsIFwNCj4gPiA+ICsJCVY0TDJfRFZfQlRfU1REX1NESSkgXA0KPiA+ID4gK30NCj4gPiA+ ICsNCj4gPiA+ICsjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBJNjAgeyBcDQo+ID4g PiArCS50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgXA0KPiA+ID4gKwlWNEwyX0lOSVRfQlRf VElNSU5HUygyMDQ4LCAxMDgwLCAxLCBcDQo+ID4gPiArCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wg fCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwNCj4gPiA+ICsJCTc0MjUwMDAwLCA2NiwgMjAsIDY2 LCAyLCA1LCAxNSwgMywgNSwgMTUsIFwNCj4gPiA+ICsJCVY0TDJfRFZfQlRfU1REX1NESSkgXA0K PiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8xOTIwWDEw ODBQNDggeyBcDQo+ID4gPiArCS50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgXA0KPiA+ID4g KwlWNEwyX0lOSVRfQlRfVElNSU5HUygxOTIwLCAxMDgwLCAwLCBcDQo+ID4gPiArCQlWNEwyX0RW X0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwNCj4gPiA+ICsJCTE0ODUw MDAwMCwgNjM4LCA0NCwgMTQ4LCA0LCA1LCAzNiwgMCwgMCwgMCwgXA0KPiA+ID4gKwkJVjRMMl9E Vl9CVF9TVERfU0RJKSBcDQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgWExOWF9W NEwyX0RWX0JUXzIwNDhYMTA4MFA0OCB7IFwNCj4gPiA+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1 Nl8xMTIwLCBcDQo+ID4gPiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDIwNDgsIDEwODAsIDAsIFwN Cj4gPiA+ICsJCVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwg XA0KPiA+ID4gKwkJMTQ4NTAwMDAwLCA1MTAsIDQ0LCAxNDgsIDQsIDUsIDM2LCAwLCAwLCAwLCBc DQo+ID4gPiArCQlWNEwyX0RWX0JUX1NURF9TREkpIFwNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4g PiArI2RlZmluZSBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDUwIHsgXA0KPiA+ID4gKwkudHlw ZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsIFwNCj4gPiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1Mo MjA0OCwgMTA4MCwgMCwgXA0KPiA+ID4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9E Vl9WU1lOQ19QT1NfUE9MLCBcDQo+ID4gPiArCQkxNDg1MDAwMDAsIDQwMCwgNDQsIDE0OCwgNCwg NSwgMzYsIDAsIDAsIDAsIFwNCj4gPiA+ICsJCVY0TDJfRFZfQlRfU1REX1NESSkgXA0KPiA+ID4g K30NCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQNjAg eyBcDQo+ID4gPiArCS50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgXA0KPiA+ID4gKwlWNEwy X0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgwLCAwLCBcDQo+ID4gPiArCQlWNEwyX0RWX0hTWU5D X1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwNCj4gPiA+ICsJCTE0ODUwMDAwMCwg ODgsIDQ0LCAyMCwgNCwgNSwgMzYsIDAsIDAsIDAsIFwNCj4gPiA+ICsJCVY0TDJfRFZfQlRfU1RE X1NESSkgXA0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFhMTlhfVjRMMl9EVl9C VF8zODQwWDIxNjBQNDggeyBcDQo+ID4gPiArCS50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwg XA0KPiA+ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygzODQwLCAyMTYwLCAwLCBcDQo+ID4gPiAr CQlWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwNCj4gPiA+ ICsJCTU5NDAwMDAwMCwgMTI3NiwgODgsIDI5NiwgOCwgMTAsIDcyLCAwLCAwLCAwLCBcDQo+ID4g PiArCQlWNEwyX0RWX0JUX1NURF9TREkpIFwNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArI2Rl ZmluZSBYTE5YX1Y0TDJfRFZfQlRfNDA5NlgyMTYwUDQ4IHsgXA0KPiA+ID4gKwkudHlwZSA9IFY0 TDJfRFZfQlRfNjU2XzExMjAsIFwNCj4gPiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoNDA5Niwg MjE2MCwgMCwgXA0KPiA+ID4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lO Q19QT1NfUE9MLCBcDQo+ID4gPiArCQk1OTQwMDAwMDAsIDEwMjAsIDg4LCAyOTYsIDgsIDEwLCA3 MiwgMCwgMCwgMCwgXA0KPiA+ID4gKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcDQo+ID4gPiArfQ0K PiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgWExOWF9WNEwyX0RWX0JUXzE5MjBYMTA4MEk0OCB7IFwN Cj4gPiA+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCBcDQo+ID4gPiArCVY0TDJfSU5J VF9CVF9USU1JTkdTKDE5MjAsIDEwODAsIDEsIFwNCj4gPiA+ICsJCVY0TDJfRFZfSFNZTkNfUE9T X1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXA0KPiA+ID4gKwkJMTQ4NTAwMDAwLCAzNzEs IDg4LCAzNzEsIDIsIDUsIDE1LCAzLCA1LCAxNSwgXA0KPiA+ID4gKwkJVjRMMl9EVl9CVF9TVERf U0RJKSBcDQo+ID4gPiArfQ0KPiA+DQo+ID4gV2h5IG5vdCBhZGQgdGhlc2UgdG8gdjRsMi1kdi10 aW1pbmdzLmg/IEkgZG8gbmVlZCB0byBrbm93IG9uIHdoaWNoIHN0YW5kYXJkDQo+ID4gdGhleSBh cmUgYmFzZWQuDQo+ID4NCj4gPiA+ICsNCj4gPiA+ICsjZW5kaWYgLyogX19VQVBJX1hJTElOWF9T RElSWFNTX0hfXyAqLw0KPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC94aWxp bngtdjRsMi1jb250cm9scy5oDQo+ID4gYi9pbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXY0bDIt Y29udHJvbHMuaA0KPiA+ID4gaW5kZXggYjY0NDFmZTcwNWM1Li5lOWRlNjVlODI2NDIgMTAwNjQ0 DQo+ID4gPiAtLS0gYS9pbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXY0bDItY29udHJvbHMuaA0K PiA+ID4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC12NGwyLWNvbnRyb2xzLmgNCj4g Pg0KPiA+IFdoeSBpcyB0aGlzIGluIGEgc2VwYXJhdGUgaGVhZGVyPyBJdCBzZWVtcyB0byBtZSB0 aGF0IGl0IG1ha2VzIG1vcmUgc2Vuc2UgdG8NCj4gPiBoYXZlDQo+ID4gYSBzaW5nbGUgcHVibGlj IGhlYWRlciBmb3IgdGhpcyBkcml2ZXIuDQo+ID4NCj4gPiA+IEBAIC03MSw0ICs3MSw3MSBAQA0K PiA+ID4gIC8qIE5vaXNlIGxldmVsICovDQo+ID4gPiAgI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhf VFBHX05PSVNFX0dBSU4NCj4gPiAJKFY0TDJfQ0lEX1hJTElOWF9UUEcgKyAxNykNCj4gPiA+DQo+ ID4gPiArLyoNCj4gPiA+ICsgKiBYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbQ0KPiA+ID4gKyAqLw0K PiA+ID4gKw0KPiA+ID4gKy8qIFRoZSBiYXNlIGZvciB0aGUgc2RpIHJ4IGRyaXZlciBjb250cm9s cy4NCj4gPiA+ICsgKiBXZSByZXNlcnZlIDMyIGNvbnRyb2xzIGZvciB0aGlzIGRyaXZlci4NCj4g PiA+ICsgKg0KPiA+ID4gKyAqIFRoZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIXyogY29udHJv bHMgYXJlIHByZXNlbnQgb25seSBpZg0KPiA+ID4gKyAqIEVESCBpcyBlbmFibGVkLg0KPiA+ID4g KyAqIFRoZSBjb250cm9scyB3aGljaCBjYW4gYmUgc2V0IHNob3VsZCBvbmx5IGJlIHNldCBiZWZv cmUgZW5hYmxpbmcNCj4gPiA+ICsgKiBzdHJlYW1pbmcuIFRoZSBjb250cm9scyB3aGljaCBjYW4g YmUgZ290IHNob3VsZCBiZSBjYWxsZWQgd2hpbGUNCj4gPiA+ICsgKiBzdHJlYW1pbmcgdG8gZ2V0 IGNvcnJlY3QgdmFsdWVzLg0KPiA+ID4gKyAqIFRoZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfTU9E RV9ERVRFQ1QgY2FuIGJlIGNhbGxlZCB3aGVuIHF1ZXJ5DQo+ID4gZHYgdGltaW5nDQo+ID4gPiAr ICogcmV0dXJucyBhIHZhbGlkIHRpbWluZy4NCj4gPiA+ICsgKi8NCj4gPiA+ICsNCj4gPiA+ICsj ZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWA0KPiA+IAkoVjRMMl9DSURfWElMSU5YX0JBU0Ug KyAweDIwKQ0KPiA+ID4gKw0KPiA+ID4gKy8qIEZyYW1lciBDb250cm9sIHRvIGVuYWJsZSBvciBk aXNhYmxlIHRoZSBmcmFtZXIgKi8NCj4gPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElS WF9GUkFNRVINCj4gPiAJKFY0TDJfQ0lEX1hJTElOWF9TRElSWCArIDEpDQo+ID4gPiArLyoNCj4g PiA+ICsgKiBWaWRlbyBMb2NrIFdpbmRvdyBDb250cm9sIHRvIHNldCB0aGUgdmlkZW8gbG9jayB3 aW5kb3cgdmFsdWUNCj4gPiA+ICsgKiBUaGlzIGlzIHRoZSBhbW91bnQgb2YgdGltZSB0aGUgbW9k ZSBhbmQgdHJhbnNwb3J0IHN0cmVhbSBuZWVkDQo+ID4gPiArICogdG8gYmUgbG9ja2VkIGJlZm9y ZSBhIHZpZGVvIGxvY2sgaW50ZXJydXB0IG9jY3Vycy4NCj4gPiA+ICsgKi8NCj4gPiA+ICsjZGVm aW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9WSURMT0NLX1dJTkRPVw0KPiA+IAkoVjRMMl9DSURf WElMSU5YX1NESVJYICsgMikNCj4gPiA+ICsvKiBFREggRXJyb3IgTWFzayBDb250cm9sIHRvIGVu YWJsZSBFREggZXJyb3IgY291bnQgKi8NCj4gPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9T RElSWF9FREhfRVJSQ05UX0VOQUJMRQ0KPiA+IAkoVjRMMl9DSURfWElMSU5YX1NESVJYICsgMykN Cj4gPiA+ICsvKg0KPiA+ID4gKyAqIE1vZGUgc2VhcmNoIENvbnRyb2wgdG8gcGFzcyB0aGUgYml0 IG1hc2sgb2YgbW9kZXMgdG8gZGV0ZWN0Lg0KPiA+ID4gKyAqDQo+ID4gPiArICogYml0IDAgc2V0 IHRvIGRldGVjdCBTRCBtb2RlLA0KPiA+ID4gKyAqIGJpdCAxIHNldCB0byBkZXRlY3QgSEQgbW9k ZSwNCj4gPiA+ICsgKiBiaXQgMiBzZXQgdG8gZGV0ZWN0IDNHICgzR0EgJiAzR0IpIG1vZGUsDQo+ ID4gPiArICogYml0IDMgc2V0IHRvIGRldGVjdCA2RyBtb2RlLA0KPiA+ID4gKyAqIGJpdCA0IHNl dCB0byBkZXRlY3QgMTJHIGludGVnZXIgZnJhbWUgcmF0ZSBtb2RlLA0KPiA+ID4gKyAqIGJpdCA1 IHNldCB0byBkZXRlY3QgMTJHIGZyYWN0aW9uYWwgZnJhbWUgcmF0ZSBtb2RlLA0KPiA+ID4gKyAq Lw0KPiA+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYX1NFQVJDSF9NT0RFUw0KPiA+ IAkoVjRMMl9DSURfWElMSU5YX1NESVJYICsgNCkNCj4gPiA+ICsvKg0KPiA+ID4gKyAqIEdldCBE ZXRlY3RlZCBNb2RlIGNvbnRyb2wNCj4gPiA+ICsgKg0KPiA+ID4gKyAqIENvbnRyb2wgVmFsdWUg LSBNb2RlIGRldGVjdGVkDQo+ID4gPiArICogICAgICAgIDAgICAgICAtICAgICBTRA0KPiA+ID4g KyAqICAgICAgICAxICAgICAgLSAgICAgSEQNCj4gPiA+ICsgKiAgICAgICAgMiAgICAgIC0gICAg IDNHICgzR0EgJiAzR0IpDQo+ID4gPiArICogICAgICAgIDMgICAgICAtICAgICA2Rw0KPiA+ID4g KyAqICAgICAgICA0ICAgICAgLSAgICAgMTJHIGludGVnZXIgZnJhbWUgcmF0ZQ0KPiA+ID4gKyAq ICAgICAgICA1ICAgICAgLSAgICAgMTJHIGZyYWN0aW9uYWwgZnJhbWUgcmF0ZQ0KPiA+ID4gKyAq Lw0KPiA+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYX01PREVfREVURUNUDQo+ID4g CShWNEwyX0NJRF9YSUxJTlhfU0RJUlggKyA1KQ0KPiA+ID4gKy8qIEdldCBudW1iZXIgb2YgQ1JD IGVycm9ycyBzdGF0dXMgY29udHJvbCAqLw0KPiA+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5Y X1NESVJYX0NSQw0KPiA+IAkoVjRMMl9DSURfWElMSU5YX1NESVJYICsgNikNCj4gPiA+ICsvKiBH ZXQgRURIIGVycm9yIGNvdW50IGNvbnRyb2wgKi8NCj4gPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJ TElOWF9TRElSWF9FREhfRVJSQ05UDQo+ID4gCShWNEwyX0NJRF9YSUxJTlhfU0RJUlggKyA3KQ0K PiA+ID4gKy8qIEdldCBFREggc3RhdHVzIGNvbnRyb2wgKi8NCj4gPiA+ICsjZGVmaW5lIFY0TDJf Q0lEX1hJTElOWF9TRElSWF9FREhfU1RBVFVTDQo+ID4gCShWNEwyX0NJRF9YSUxJTlhfU0RJUlgg KyA4KQ0KPiA+ID4gKy8qIEdldCBUcmFuc3BvcnQgSW50ZXJsYWNlZCBzdGF0dXMgd2hldGhlciBp dCBpcyBpbnRlcmxhY2VkIG9yIG5vdCAqLw0KPiA+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5Y X1NESVJYX1RTX0lTX0lOVEVSTEFDRUQNCj4gPiAJKFY0TDJfQ0lEX1hJTElOWF9TRElSWCArIDkp DQo+ID4gPiArLyogR2V0IG51bWJlciBvZiBBY3RpdmUgU3RyZWFtcyAqLw0KPiA+ID4gKyNkZWZp bmUgVjRMMl9DSURfWElMSU5YX1NESVJYX0FDVElWRV9TVFJFQU1TDQo+ID4gCShWNEwyX0NJRF9Y SUxJTlhfU0RJUlggKyAxMCkNCj4gPiA+ICsvKg0KPiA+ID4gKyAqIEdldCBpZiB0aGUgZGV0ZWN0 ZWQgbW9kZSBpcyAzR0IuDQo+ID4gPiArICogQ2FuIGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2hlZCBi ZXR3ZWVuIDNHQSBhbmQgM0dCDQo+ID4gPiArICovDQo+ID4gPiArI2RlZmluZSBWNEwyX0NJRF9Y SUxJTlhfU0RJUlhfSVNfM0dCDQo+ID4gCShWNEwyX0NJRF9YSUxJTlhfU0RJUlggKyAxMSkNCj4g PiA+ICsNCj4gPiA+ICAjZW5kaWYgLyogX19VQVBJX1hJTElOWF9WNEwyX0NPTlRST0xTX0hfXyAq Lw0KPiA+ID4NCj4gPg0KPiA+IFJlZ2FyZHMsDQo+ID4NCj4gPiAJSGFucw0K