Received: by 2002:ac0:98c7:0:0:0:0:0 with SMTP id g7-v6csp1161975imd; Thu, 1 Nov 2018 11:08:30 -0700 (PDT) X-Google-Smtp-Source: AJdET5d2cfl4+z3IFB2I7i4h/ILYaTzj3S+NRlZef/q8Uvh2+MqpZdq9Hm15c9p4BBHehCHf9WbX X-Received: by 2002:a62:f715:: with SMTP id h21-v6mr8450859pfi.169.1541095710710; Thu, 01 Nov 2018 11:08:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1541095710; cv=none; d=google.com; s=arc-20160816; b=dikwruCGP93Wp8z7rgx1mGzG3WmB+Eaj1rXyCidnIlXJk3qe+4GyQyQk35fD6i7Zj2 mN+jdwknW9urlLmpdugrPImJSuZmIxsK8V34LxvmZsssXNCigU0HB8A4LCVoJ08cfu+k DJVLyosVX8wry5Vc6dUn68p1qG8zvl8jCV4SpkfDIpGsycnmNkBL+W2VljN8WZReeCKD ck9AWgmL5zX+dFGTO5VKoIOI4WmJxn+N3up7gQgtvL9XkuXE5trt8CBbhDPaEVBUnc+U 7hw7zlrA7WMv6ANKjo1sFU1bKBCuZ9HKQgnuF+S2hECm7xr4DBaDsXm3RcSVQvOTIDTn gwgQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :spamdiagnosticmetadata:spamdiagnosticoutput:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature; bh=yhUopgH3Dyw0nqBTNx6zVP2uTgGrpNrGHM7mYj8EQuM=; b=PP21Ej97fBt9A8vsLZmgPlmkFuXNLaDQG0yAaLRR9/Y12uNZrP1+Wero0qA7N85kLs gajKd/gxKoOl4W9qt/tMLPxT6YOLV//h7ejlhjlcD6hXHxeIYTjNZu+1LijcTjmkJzIj ISTL2jDMPIsdEU9W3jnxgJG4UPQRyaYCcxCX+xTLo1Qdvv3gT7bnapyVZTEoSS9fe4f3 JaTso7vprATMaIbnLETNqsxi/FaGabVW/xGKOKo4uXqUbZwK4ejDnKn6/lK9rdo7vP4b 9QyKSqK6wPoCDHg7a/MO0nEQ+e42YDxLvBiP/ZTUNAgSRLKRvlRY7g1h8pJK3SpCFJ23 hs/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=waRmgBBG; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b12-v6si30046950pls.367.2018.11.01.11.08.01; Thu, 01 Nov 2018 11:08:30 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=waRmgBBG; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727744AbeKBCfX (ORCPT + 99 others); Thu, 1 Nov 2018 22:35:23 -0400 Received: from mail-cys01nam02on0086.outbound.protection.outlook.com ([104.47.37.86]:56592 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727573AbeKBCfW (ORCPT ); Thu, 1 Nov 2018 22:35:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yhUopgH3Dyw0nqBTNx6zVP2uTgGrpNrGHM7mYj8EQuM=; b=waRmgBBGGDIAOapPms3Vu4P80upi5xtOWBAU3bW1WeuTJJ3nnDPOcQs2DZ0evFkhfFuL9Z/YO2bOJJZNyEMFlbHnSuFU8BuDQhf7u2WX71RlJjtdAY/J86uOxzKyFBDjdhwSEnRwbvqEl5m0ocDCoQf2c6OdgnL1uLrQGpa2ZnU= Received: from BL0PR02MB5633.namprd02.prod.outlook.com (20.177.241.80) by BL0PR02MB4355.namprd02.prod.outlook.com (10.167.172.220) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.21; Thu, 1 Nov 2018 17:31:12 +0000 Received: from BL0PR02MB5633.namprd02.prod.outlook.com ([fe80::10a6:cbf4:6c39:e88e]) by BL0PR02MB5633.namprd02.prod.outlook.com ([fe80::10a6:cbf4:6c39:e88e%3]) with mapi id 15.20.1273.028; Thu, 1 Nov 2018 17:31:11 +0000 From: Anurag Kumar Vulisha To: sundeep subbaraya CC: "kishon@ti.com" , Michal Simek , "robh+dt@kernel.org" , Mark Rutland , "vivek.gautam@codeaurora.org" , "v.anuragkumar@gmail.com" , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" Subject: RE: [PATCH v3 1/2] phy: zynqmp: Add phy driver for xilinx zynqmp phy core Thread-Topic: [PATCH v3 1/2] phy: zynqmp: Add phy driver for xilinx zynqmp phy core Thread-Index: AQHURTd3PNqvUueTTkW+ldEgMOgvCqU7fpWAgAAD8DA= Date: Thu, 1 Nov 2018 17:31:11 +0000 Message-ID: References: <1536165747-6405-1-git-send-email-anurag.kumar.vulisha@xilinx.com> <1536165747-6405-2-git-send-email-anurag.kumar.vulisha@xilinx.com> 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: spf=none (sender IP is ) smtp.mailfrom=anuragku@xilinx.com; x-originating-ip: [182.18.177.170] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BL0PR02MB4355;6:yUzEYSbCCXE119iSoOM513+8M3dgS+ZNj+LJdSzZnRfjPLVZhzeoIYFMrOmNlX043yrweR19OyuqyuVInQQxXQHDjJcytbiZlWDzijIzTRXyjd4J2ooMUI1VIfgrK6+cEmECqMvEc4l+six1yAUZ841Ii6wjzzNb99y3/DqUW5enYcszVUvBD6rpFA0+cmg6pSUyUVf+ZxIVuMYxkDz/5PqI+ZZTz1w2LbttDJWE3rujFgS0eSAhNoN4YOSRtFtryAMfdXj5O425ZG4dW+h/QKtCqpQNg5a/l+Q+6XlAoccQHait7+svbT084IMEP3rU1gz7X2X5qnHa3UmAtF7XNrgf0AWkTv63t+qw7Uz318jyv+QTLJTCwdtHz3N09ySWGZzMI1+UW2cptqq+D+Zt613GwSXHt8Sq0VDHyaKZoLzjZfDJblPKN0bYHGAdheNRPmRgekgnpgA3OrWnpe3wVQ==;5:gKttVT2EUqY7+jLDLtBy1r+RfS7iMbb0REmHtC0JukZFNaDGvqSgsu2wdyiuOSmV+PqhZskexzsiGpbUh1aees908rwMEfyfxd7pIuwW1mkIydGz24COleADFIk/nFdQ5ALTJXvhud34EP9EVwIWuTjDaZLiq7lJMt4zylK45Lw=;7:8PqimEyDMFMiA8Z+5SmS4EFjgIrLmixgjIFVgWCPJG0Lv8oIzZLgL6qcauIhU0jGrA4lc6KaGz6K923YiWM8JgaaccBRddD7Iq+MZC1P4RqaOJh7ns3jM+9SeObZdSPmJgfAzYhgms3OVv6pphnm2A== x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-ms-office365-filtering-correlation-id: c321a363-d4fb-4ebd-4e8b-08d6401fd146 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020);SRVR:BL0PR02MB4355; x-ms-traffictypediagnostic: BL0PR02MB4355: x-ld-processed: 657af505-d5df-48d0-8300-c31994686c5c,ExtAddr x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(85827821059158)(31051911155226)(9452136761055)(258649278758335)(21532816269658)(163750095850)(192813158149592)(180628864354917); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231382)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(6055026)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:BL0PR02MB4355;BCL:0;PCL:0;RULEID:;SRVR:BL0PR02MB4355; x-forefront-prvs: 0843C17679 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(396003)(366004)(136003)(39860400002)(376002)(346002)(189003)(13464003)(199004)(5660300001)(446003)(6436002)(8936002)(6916009)(561614003)(2900100001)(6116002)(3846002)(55016002)(86362001)(6306002)(575784001)(53946003)(25786009)(102836004)(9686003)(53936002)(478600001)(26005)(486006)(6506007)(476003)(186003)(229853002)(6246003)(8676002)(14454004)(39060400002)(81156014)(11346002)(81166006)(105586002)(14444005)(256004)(68736007)(5250100002)(106356001)(66066001)(99286004)(4744004)(74316002)(71200400001)(71190400001)(305945005)(7736002)(2906002)(4326008)(76176011)(316002)(33656002)(7696005)(97736004)(54906003)(559001)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:BL0PR02MB4355;H:BL0PR02MB5633.namprd02.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: xilinx.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: IB0FF8Jjl2S/Yr3MjwY51LYa2pPLdWO7vrS3DWB7iwVy/7hPhHARA/YZ4X9ocDE5DnNj9w98LOSy5oLti3zFKbEEccCi6mRYH0Ke2kWQgDeIj0G91f4vHiJYpKYolLTUQadvYYliRIEhgj7OaqS239spEu5bM4W0mRNIg26zErVmJid9iLaYmvRJCXWSIW3VCHH4VNlzHAdrL2ZvEF6wxOU+DyNvsGb1DT2tsC5mhHzQwYZO53g2b/yU1OHnGZ/gmfH239OVrnxiEgD03AGK4X/3/jQLP28wMnFJsBZN6mtBiSaJNFvQsAFPuR7wzJ7LtbgyluWy1GyirIEah0PmRRNwabliVe0A3cnszmTgbgY= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM 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: c321a363-d4fb-4ebd-4e8b-08d6401fd146 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Nov 2018 17:31:11.6481 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR02MB4355 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgU3VuZGVlcCwNCg0KPi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+RnJvbTogc3VuZGVl cCBzdWJiYXJheWEgW21haWx0bzpzdW5kZWVwLmxrbWxAZ21haWwuY29tXQ0KPlNlbnQ6IFRodXJz ZGF5LCBOb3ZlbWJlciAwMSwgMjAxOCAxMDozMSBQTQ0KPlRvOiBBbnVyYWcgS3VtYXIgVnVsaXNo YSA8YW51cmFna3VAeGlsaW54LmNvbT4NCj5DYzoga2lzaG9uQHRpLmNvbTsgTWljaGFsIFNpbWVr IDxtaWNoYWxzQHhpbGlueC5jb20+OyByb2JoK2R0QGtlcm5lbC5vcmc7IE1hcmsNCj5SdXRsYW5k IDxtYXJrLnJ1dGxhbmRAYXJtLmNvbT47IHZpdmVrLmdhdXRhbUBjb2RlYXVyb3JhLm9yZzsNCj52 LmFudXJhZ2t1bWFyQGdtYWlsLmNvbTsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgbGlu dXgtYXJtLQ0KPmtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBkZXZpY2V0cmVlQHZnZXIua2Vy bmVsLm9yZw0KPlN1YmplY3Q6IFJlOiBbUEFUQ0ggdjMgMS8yXSBwaHk6IHp5bnFtcDogQWRkIHBo eSBkcml2ZXIgZm9yIHhpbGlueCB6eW5xbXAgcGh5IGNvcmUNCj4NCj5IaSBBbnVyYWcsDQo+DQo+ T24gV2VkLCBTZXAgNSwgMjAxOCBhdCAxMDoxNCBQTSBBbnVyYWcgS3VtYXIgVnVsaXNoYQ0KPjxh bnVyYWcua3VtYXIudnVsaXNoYUB4aWxpbnguY29tPiB3cm90ZToNCj4+DQo+PiBaeW5xTVAgU29D IGhhcyBhIEdpZ2FiaXQgVHJhbnNjZWl2ZXIgd2l0aCBmb3VyIGxhbmVzLiBBbGwgdGhlIGhpZ2gg c3BlZWQNCj4+IHBlcmlwaGVyYWxzIHN1Y2ggYXMgVVNCLCBTQVRBLCBQQ0lFLCBEaXNwbGF5IFBv cnQgYW5kIEV0aGVybmV0IFNHTUlJIGNhbg0KPj4gcmVseSBvbiBhbnkgb2YgdGhlIGZvdXIgR1Qg bGFuZXMgZm9yIFBIWSBsYXllci4gVGhpcyBwYXRjaCBhZGRzIGRyaXZlcg0KPj4gZm9yIHRoYXQg WnlucU1QIEdUIGNvcmUuDQo+Pg0KPj4gU2lnbmVkLW9mZi1ieTogQW51cmFnIEt1bWFyIFZ1bGlz aGEgPGFudXJhZy5rdW1hci52dWxpc2hhQHhpbGlueC5jb20+DQo+PiAtLS0NCj4+IENoYW5nZXMg aW4gdjM6DQo+PiAgICAgICAgIDEuIENvcnJlY3RlZCB0aGUgRG9jdW1lbnRhdGlvbiBhcyBzdWdn ZXN0ZWQgYnkgVml2ZWsgR2F1dGFtDQo+Pg0KPj4gQ2hhbmdlcyBpbiB2MjoNCj4+ICAgICAgICAg MS4gRml4ZWQgdGhlIGNvbXBpbGF0aW9uIGVycm9yIHdoZW4gY29tcGlsZWQgcGh5LXp5bnFtcC5j IGFzIGEgbW9kdWxlDQo+PiAgICAgICAgIDIuIEFkZGVkIENPTkZJR19QTSBtYWNybyBpbiBwaHkt enlucW1wLmMgZHJpdmVyDQo+PiAtLS0NCj4+ICBkcml2ZXJzL3BoeS9LY29uZmlnICAgICAgICAg ICAgfCAgICA4ICsNCj4+ICBkcml2ZXJzL3BoeS9NYWtlZmlsZSAgICAgICAgICAgfCAgICAxICsN Cj4+ICBkcml2ZXJzL3BoeS9waHktenlucW1wLmMgICAgICAgfCAxNTgxDQo+KysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPj4gIGluY2x1ZGUvZHQtYmluZGluZ3MvcGh5 L3BoeS5oICB8ICAgIDIgKw0KPj4gIGluY2x1ZGUvbGludXgvcGh5L3BoeS16eW5xbXAuaCB8ICAg NTIgKysNCj4+ICA1IGZpbGVzIGNoYW5nZWQsIDE2NDQgaW5zZXJ0aW9ucygrKQ0KPj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BoeS9waHktenlucW1wLmMNCj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgaW5jbHVkZS9saW51eC9waHkvcGh5LXp5bnFtcC5oDQo+Pg0KPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvcGh5L0tjb25maWcgYi9kcml2ZXJzL3BoeS9LY29uZmlnDQo+PiBpbmRleCA1Yzhk NDUyLi4xNGNmMzMzMCAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvcGh5L0tjb25maWcNCj4+ICsr KyBiL2RyaXZlcnMvcGh5L0tjb25maWcNCj4+IEBAIC00MCw2ICs0MCwxNCBAQCBjb25maWcgUEhZ X1hHRU5FDQo+PiAgICAgICAgIGhlbHANCj4+ICAgICAgICAgICBUaGlzIG9wdGlvbiBlbmFibGVz IHN1cHBvcnQgZm9yIEFQTSBYLUdlbmUgU29DIG11bHRpLXB1cnBvc2UgUEhZLg0KPj4NCj4+ICtj b25maWcgUEhZX1hJTElOWF9aWU5RTVANCj4+ICsgICAgICAgdHJpc3RhdGUgIlhpbGlueCBaeW5x TVAgUEhZIGRyaXZlciINCj4+ICsgICAgICAgZGVwZW5kcyBvbiBBUkNIX1pZTlFNUA0KPj4gKyAg ICAgICBzZWxlY3QgR0VORVJJQ19QSFkNCj4+ICsgICAgICAgaGVscA0KPj4gKyAgICAgICAgIEVu YWJsZSB0aGlzIHRvIHN1cHBvcnQgWnlucU1QIEhpZ2ggU3BlZWQgR2lnYWJpdCBUcmFuc2NlaXZl cg0KPj4gKyAgICAgICAgIHRoYXQgaXMgcGFydCBvZiBaeW5xTVAgU29DLg0KPj4gKw0KPj4gIHNv dXJjZSAiZHJpdmVycy9waHkvYWxsd2lubmVyL0tjb25maWciDQo+PiAgc291cmNlICJkcml2ZXJz L3BoeS9hbWxvZ2ljL0tjb25maWciDQo+PiAgc291cmNlICJkcml2ZXJzL3BoeS9icm9hZGNvbS9L Y29uZmlnIg0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L01ha2VmaWxlIGIvZHJpdmVycy9w aHkvTWFrZWZpbGUNCj4+IGluZGV4IDg0ZTNiZDkuLmYyYThkMjcgMTAwNjQ0DQo+PiAtLS0gYS9k cml2ZXJzL3BoeS9NYWtlZmlsZQ0KPj4gKysrIGIvZHJpdmVycy9waHkvTWFrZWZpbGUNCj4+IEBA IC03LDYgKzcsNyBAQCBvYmotJChDT05GSUdfR0VORVJJQ19QSFkpICAgICAgICAgICAgICAgKz0g cGh5LWNvcmUubw0KPj4gIG9iai0kKENPTkZJR19QSFlfTFBDMThYWF9VU0JfT1RHKSAgICAgICs9 IHBoeS1scGMxOHh4LXVzYi1vdGcubw0KPj4gIG9iai0kKENPTkZJR19QSFlfWEdFTkUpICAgICAg ICAgICAgICAgICAgICAgICAgKz0gcGh5LXhnZW5lLm8NCj4+ICBvYmotJChDT05GSUdfUEhZX1BJ U1RBQ0hJT19VU0IpICAgICAgICAgICAgICAgICs9IHBoeS1waXN0YWNoaW8tdXNiLm8NCj4+ICtv YmotJChDT05GSUdfUEhZX1hJTElOWF9aWU5RTVApICAgICAgICAgICAgICAgICs9IHBoeS16eW5x bXAubw0KPj4gIG9iai0kKENPTkZJR19BUkNIX1NVTlhJKSAgICAgICAgICAgICAgICs9IGFsbHdp bm5lci8NCj4+ICBvYmotJChDT05GSUdfQVJDSF9NRVNPTikgICAgICAgICAgICAgICArPSBhbWxv Z2ljLw0KPj4gIG9iai0kKENPTkZJR19MQU5USVEpICAgICAgICAgICAgICAgICAgICs9IGxhbnRp cS8NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9waHktenlucW1wLmMgYi9kcml2ZXJzL3Bo eS9waHktenlucW1wLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAw Li44NGVmYzNkDQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9kcml2ZXJzL3BoeS9waHktenlu cW1wLmMNCj4+IEBAIC0wLDAgKzEsMTU4MSBAQA0KPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wDQo+PiArLyoNCj4+ICsgKiBwaHktenlucW1wLmMgLSBQSFkgZHJpdmVyIGZv ciBYaWxpbnggWnlucU1QIEdULg0KPj4gKyAqDQo+PiArICogQ29weXJpZ2h0IChDKSAyMDE4IFhp bGlueCBJbmMuDQo+PiArICoNCj4+ICsgKiBBdXRob3I6IEFudXJhZyBLdW1hciBWdWxpc2hhIDxh bnVyYWdrdUB4aWxpbnguY29tPg0KPg0KPlRoaXMgZHJpdmVyIHdhcyBpbml0aWFsbHkgd3JpdHRl biBieSBtZSBhbmQgc2VudCBmb3IgcmV2aWV3IHRpbGwgdjI6DQo+aHR0cHM6Ly9sb3JlLmtlcm5l bC5vcmcvcGF0Y2h3b3JrL3BhdGNoLzYzNTMxNy8NCj5JIHJlbWVtYmVyIHRoZXJlIHdhcyBubyBz dXBwb3J0IGZvciByZXNldCB0aGF0IHRpbWUgYW5kIGNvdWxkIG5vdA0KPnRlc3QgRFAuDQo+SSBn dWVzcyB5b3Ugc2hvdWxkIGFkZCBteSBuYW1lIHRvby4NCj5TdWJiYXJheWEgU3VuZGVlcCA8c3Vu ZGVlcC5sa21sQGdtYWlsLmNvbT4uDQo+DQo+VGhhbmtzLA0KPlN1bmRlZXANCj4NCg0KQXMgSSB3 YXMgbm90IGF3YXJlIG9mIHRoZSBtYWlsaW5nIGxpc3QgdGhhdCB5b3UgaGF2ZSBlYXJsaWVyIGlu aXRpYXRlZCwgSSBzdGFydGVkIGEgbmV3IHRocmVhZC4NCkkgdGhpbmsgYnkgdGhlIHRpbWUgSSBz dGFydGVkIHdvcmtpbmcgb24gdGhpcyBkcml2ZXIgeW91IGhhdmUgbGVmdCBvdXIgY29tcGFueSBh bmQgSSBjb250aW51ZWQNCndvcmtpbmcgb24gdGhpcyBpbnRlcm5hbCBkcml2ZXIuIFNpbmNlIEkg d2FzIG5vdCBhd2FyZSBvZiB5b3VyIHByZXNlbnQgbWFpbCBpZCBhbmQgdGhlIG1haWxpbmcNCmxp c3QgdGhhdCB5b3UgaGF2ZSBpbml0aWF0ZWQgLCBJIGhhdmVuJ3QgYWRkZWQgeW91ciBuYW1lLiBT b3JyeSBmb3IgdGhhdC4gU2luY2UgSSBnb3QgeW91ciBtYWlsIGlkDQpub3csIEkgd2lsbCBhZGQg eW91ciBuYW1lIHRvbyBpbnRvIHRoaXMuIA0KDQpUaGFua3MsDQpBbnVyYWcNCg0KPj4gKyAqDQo+ PiArICogVGhpcyBkcml2ZXIgaXMgdGVzdGVkIGZvciBVU0IsIFNBVEEgYW5kIERpc3BsYXkgUG9y dCBjdXJyZW50bHkuDQo+PiArICogT3RoZXIgY29udHJvbGxlcnMgUENJZSBhbmQgU0dNSUkgc2hv dWxkIGFsc28gd29yayBidXQgdGhhdCBpcw0KPj4gKyAqIGV4cGVyaW1lbnRhbCBhcyBvZiBub3cu DQo+PiArICovDQo+PiArDQo+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPj4gKyNpbmNsdWRl IDxsaW51eC9kZWxheS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPg0KPj4gKyNpbmNsdWRl IDxsaW51eC9rZXJuZWwuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+PiArI2lu Y2x1ZGUgPGxpbnV4L29mLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+DQo+ PiArI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvcGh5 L3BoeS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5LXp5bnFtcC5oPg0KPj4gKyNpbmNs dWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvZGVsYXku aD4NCj4+ICsjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcGh5L3BoeS5oPg0KPj4gKyNpbmNsdWRlIDxs aW51eC9yZXNldC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+DQo+PiArI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4NCj4+ICsNCj4+ICsvKiBJbnRlciBDb25uZWN0IE1hdHJpeCBwYXJhbWV0 ZXJzICovDQo+PiArI2RlZmluZSBJQ01fQ0ZHMCAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAx MA0KPj4gKyNkZWZpbmUgSUNNX0NGRzEgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMTQNCj4+ ICsjZGVmaW5lIElDTV9DRkcwX0wwX01BU0sgICAgICAgICAgICAgICAweDA3DQo+PiArI2RlZmlu ZSBJQ01fQ0ZHMF9MMV9NQVNLICAgICAgICAgICAgICAgMHg3MA0KPj4gKyNkZWZpbmUgSUNNX0NG RzFfTDJfTUFTSyAgICAgICAgICAgICAgIDB4MDcNCj4+ICsjZGVmaW5lIElDTV9DRkcyX0wzX01B U0sgICAgICAgICAgICAgICAweDcwDQo+PiArI2RlZmluZSBJQ01fQ0ZHX1NISUZUICAgICAgICAg ICAgICAgICAgNA0KPj4gKw0KPj4gKy8qIEludGVyIENvbm5lY3QgTWF0cml4IGFsbG93ZWQgcHJv dG9jb2xzICovDQo+PiArI2RlZmluZSBJQ01fUFJPVE9DT0xfUEQgICAgICAgICAgICAgICAgICAg ICAgICAweDANCj4+ICsjZGVmaW5lIElDTV9QUk9UT0NPTF9QQ0lFICAgICAgICAgICAgICAweDEN Cj4+ICsjZGVmaW5lIElDTV9QUk9UT0NPTF9TQVRBICAgICAgICAgICAgICAweDINCj4+ICsjZGVm aW5lIElDTV9QUk9UT0NPTF9VU0IgICAgICAgICAgICAgICAweDMNCj4+ICsjZGVmaW5lIElDTV9Q Uk9UT0NPTF9EUCAgICAgICAgICAgICAgICAgICAgICAgIDB4NA0KPj4gKyNkZWZpbmUgSUNNX1BS T1RPQ09MX1NHTUlJICAgICAgICAgICAgIDB4NQ0KPj4gKw0KPj4gKy8qIFRlc3QgTW9kZSBjb21t b24gcmVzZXQgY29udHJvbCAgcGFyYW1ldGVycyAqLw0KPj4gKyNkZWZpbmUgVE1fQ01OX1JTVCAg ICAgICAgICAgICAgICAgICAgIDB4MTAwMTgNCj4+ICsjZGVmaW5lIFRNX0NNTl9SU1RfRU4gICAg ICAgICAgICAgICAgICAweDENCj4+ICsjZGVmaW5lIFRNX0NNTl9SU1RfU0VUICAgICAgICAgICAg ICAgICAweDINCj4+ICsjZGVmaW5lIFRNX0NNTl9SU1RfTUFTSyAgICAgICAgICAgICAgICAgICAg ICAgIDB4Mw0KPj4gKw0KPj4gKy8qIFJlZmNsayBzZWxlY3Rpb24gcGFyYW1ldGVycyAqLw0KPj4g KyNkZWZpbmUgUExMX1JFRl9TRUwwICAgICAgICAgICAgICAgICAgIDB4MTAwMDANCj4+ICsjZGVm aW5lIFBMTF9SRUZfT0ZGU0VUICAgICAgICAgICAgICAgICAweDQNCj4+ICsjZGVmaW5lIFBMTF9G UkVRX01BU0sgICAgICAgICAgICAgICAgICAweDFGDQo+PiArI2RlZmluZSBQTExfU1RBVFVTX1JF QURfT0ZGU0VUICAgICAgICAgMHg0MDAwDQo+PiArI2RlZmluZSBQTExfU1RBVFVTX0xPQ0tFRCAg ICAgICAgICAgICAgMHgxMA0KPj4gKw0KPj4gKy8qIFBMTCBTU0Mgc3RlcCBzaXplIG9mZnNldHMg Ki8NCj4+ICsjZGVmaW5lIEwwX0wwX1JFRl9DTEtfU0VMICAgICAgICAgICAgICAweDI4NjANCj4+ ICsjZGVmaW5lIEwwX1BMTF9TU19TVEVQU18wX0xTQiAgICAgICAgICAweDIzNjgNCj4+ICsjZGVm aW5lIEwwX1BMTF9TU19TVEVQU18xX01TQiAgICAgICAgICAweDIzNkMNCj4+ICsjZGVmaW5lIEww X1BMTF9TU19TVEVQX1NJWkVfMF9MU0IgICAgICAweDIzNzANCj4+ICsjZGVmaW5lIEwwX1BMTF9T U19TVEVQX1NJWkVfMSAgICAgICAgICAweDIzNzQNCj4+ICsjZGVmaW5lIEwwX1BMTF9TU19TVEVQ X1NJWkVfMiAgICAgICAgICAweDIzNzgNCj4+ICsjZGVmaW5lIEwwX1BMTF9TU19TVEVQX1NJWkVf M19NU0IgICAgICAweDIzN0MNCj4+ICsjZGVmaW5lIEwwX1BMTF9TVEFUVVNfUkVBRF8xICAgICAg ICAgICAweDIzRTQNCj4+ICsNCj4+ICsvKiBTU0Mgc3RlcCBzaXplIHBhcmFtZXRlcnMgKi8NCj4+ ICsjZGVmaW5lIFNURVBfU0laRV9PRkZTRVQgICAgICAgICAgICAgICAweDQwMDANCj4+ICsjZGVm aW5lIFNURVBfU0laRV8wX01BU0sgICAgICAgICAgICAgICAweEZGDQo+PiArI2RlZmluZSBTVEVQ X1NJWkVfMV9NQVNLICAgICAgICAgICAgICAgMHhGRg0KPj4gKyNkZWZpbmUgU1RFUF9TSVpFXzJf TUFTSyAgICAgICAgICAgICAgIDB4RkYNCj4+ICsjZGVmaW5lIFNURVBfU0laRV8zX01BU0sgICAg ICAgICAgICAgICAweDMNCj4+ICsjZGVmaW5lIFNURVBfU0laRV9TSElGVCAgICAgICAgICAgICAg ICAgICAgICAgIDgNCj4+ICsjZGVmaW5lIEZPUkNFX1NURVBfU0laRSAgICAgICAgICAgICAgICAg ICAgICAgIDB4MTANCj4+ICsjZGVmaW5lIEZPUkNFX1NURVBTICAgICAgICAgICAgICAgICAgICAw eDIwDQo+PiArI2RlZmluZSBTVEVQU19PRkZTRVQgICAgICAgICAgICAgICAgICAgMHg0MDAwDQo+ PiArI2RlZmluZSBTVEVQU18wX01BU0sgICAgICAgICAgICAgICAgICAgMHhGRg0KPj4gKyNkZWZp bmUgU1RFUFNfMV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDcNCj4+ICsNCj4+ICsvKiBCRyBj YWxpYnJhdGlvbiBwYXJhbWV0ZXJzICovDQo+PiArI2RlZmluZSBCR0NBTF9SRUZfU0VMICAgICAg ICAgICAgICAgICAgMHgxMDAyOA0KPj4gKyNkZWZpbmUgQkdDQUxfUkVGX1ZBTFVFICAgICAgICAg ICAgICAgICAgICAgICAgMHgwQw0KPj4gKw0KPj4gKy8qIENhbGlicmF0aW9uIGRpZ2l0YWwgbG9n aWMgcGFyYW1ldGVycyAqLw0KPj4gKyNkZWZpbmUgTDNfVE1fQ0FMSUJfRElHMTkgICAgICAgICAg ICAgIDB4RUM0Qw0KPj4gKyNkZWZpbmUgTDNfQ0FMSUJfRE9ORV9TVEFUVVMgICAgICAgICAgIDB4 RUYxNA0KPj4gKyNkZWZpbmUgTDNfVE1fQ0FMSUJfRElHMTggICAgICAgICAgICAgIDB4RUM0OA0K Pj4gKyNkZWZpbmUgTDNfVE1fQ0FMSUJfRElHMTlfTlNXICAgICAgICAgIDB4MDcNCj4+ICsjZGVm aW5lIEwzX1RNX0NBTElCX0RJRzE4X05TVyAgICAgICAgICAweEUwDQo+PiArI2RlZmluZSBMM19U TV9PVkVSUklERV9OU1dfQ09ERSAgICAgICAgIDB4MjANCj4+ICsjZGVmaW5lIEwzX0NBTElCX0RP TkUgICAgICAgICAgICAgICAgICAweDAyDQo+PiArI2RlZmluZSBMM19OU1dfU0hJRlQgICAgICAg ICAgICAgICAgICAgNQ0KPj4gKyNkZWZpbmUgTDNfTlNXX1BJUEVfU0hJRlQgICAgICAgICAgICAg IDQNCj4+ICsjZGVmaW5lIEwzX05TV19DQUxJQl9TSElGVCAgICAgICAgICAgICAzDQo+PiArDQo+ PiArLyogRE4gUmVzaXN0b3IgY2FsaWJyYXRpb24gY29kZSBwYXJhbWV0ZXJzICovDQo+PiArI2Rl ZmluZSBMMF9UWFBNQV9TVF8zICAgICAgICAgICAgICAgICAgMHgwQjBDDQo+PiArI2RlZmluZSBM MF9ETl9DQUxJQl9DT0RFICAgICAgICAgICAgICAgMHgzRg0KPj4gKw0KPj4gKy8qIFBMTCBUZXN0 IE1vZGUgcmVnaXN0ZXIgcGFyYW1ldGVycyAqLw0KPj4gKyNkZWZpbmUgTDBfVE1fUExMX0RJR18z NyAgICAgICAgICAgICAgIDB4MjA5NA0KPj4gKyNkZWZpbmUgTDBfVE1fUExMX0RJR18zN19PRkZT RVQgICAgICAgICAgICAgICAgMHg0MDAwDQo+PiArI2RlZmluZSBMMF9UTV9DT0FSU0VfQ09ERV9M SU1JVCAgICAgICAgICAgICAgICAweDEwDQo+PiArDQo+PiArLyogUENTIGNvbnRyb2wgcGFyYW1l dGVycyAqLw0KPj4gKyNkZWZpbmUgTDBfVE1fRElHXzYgICAgICAgICAgICAgICAgICAgIDB4MTA2 Qw0KPj4gKyNkZWZpbmUgTDBfVFhfRElHXzYxICAgICAgICAgICAgICAgICAgIDB4MDBGNA0KPj4g KyNkZWZpbmUgTDBfVE1fRElHXzZfT0ZGU0VUICAgICAgICAgICAgIDB4NDAwMA0KPj4gKyNkZWZp bmUgTDBfVFhfRElHXzYxX09GRlNFVCAgICAgICAgICAgIDB4NDAwMA0KPj4gKyNkZWZpbmUgTDBf VE1fRElTX0RFU0NSQU1CTEVfREVDT0RFUiAgIDB4MEYNCj4+ICsjZGVmaW5lIEwwX1RNX0RJU0FC TEVfU0NSQU1CTEVfRU5DT0RFUiAweDBGDQo+PiArDQo+PiArLyogVFggRGUtZW1waGFzaXMgcGFy YW1ldGVycyAqLw0KPj4gKyNkZWZpbmUgTDBfVFhfQU5BX1RNXzE4ICAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDQ4DQo+PiArI2RlZmluZSBMMF9UWF9BTkFfVE1fMTE4ICAgICAgICAgICAgICAg MHgwMUQ4DQo+PiArI2RlZmluZSBMMF9UWF9BTkFfVE1fMThfT0ZGU0VUICAgICAgICAgMHg0MDAw DQo+PiArI2RlZmluZSBMMF9UWF9BTkFfVE1fMTE4X09GRlNFVCAgICAgICAgICAgICAgICAweDQw MDANCj4+ICsjZGVmaW5lIEwwX1RYX0FOQV9UTV8xMThfRk9SQ0VfMTdfMCAgICBCSVQoMCkNCj4+ ICsNCj4+ICsvKiBQTUEgY29udHJvbCBwYXJhbWV0ZXJzICovDQo+PiArI2RlZmluZSBMMF9UWFBN RF9UTV80NSAgICAgICAgICAgICAgICAgMHgwQ0I0DQo+PiArI2RlZmluZSBMMF9UWFBNRF9UTV80 OCAgICAgICAgICAgICAgICAgMHgwQ0MwDQo+PiArI2RlZmluZSBMMF9UWFBNRF9UTV80NV9PRkZT RVQgICAgICAgICAgMHg0MDAwDQo+PiArI2RlZmluZSBMMF9UWFBNRF9UTV80OF9PRkZTRVQgICAg ICAgICAgMHg0MDAwDQo+PiArI2RlZmluZSBMMF9UWFBNRF9UTV80NV9PVkVSX0RQX01BSU4gICAg QklUKDApDQo+PiArI2RlZmluZSBMMF9UWFBNRF9UTV80NV9FTkFCTEVfRFBfTUFJTiAgQklUKDEp DQo+PiArI2RlZmluZSBMMF9UWFBNRF9UTV80NV9PVkVSX0RQX1BPU1QxICAgQklUKDIpDQo+PiAr I2RlZmluZSBMMF9UWFBNRF9UTV80NV9FTkFCTEVfRFBfUE9TVDEgQklUKDMpDQo+PiArI2RlZmlu ZSBMMF9UWFBNRF9UTV80NV9PVkVSX0RQX1BPU1QyICAgQklUKDQpDQo+PiArI2RlZmluZSBMMF9U WFBNRF9UTV80NV9FTkFCTEVfRFBfUE9TVDIgQklUKDUpDQo+PiArDQo+PiArLyogQnVzIHdpZHRo IHBhcmFtZXRlcnMgKi8NCj4+ICsjZGVmaW5lIFRYX1BST1RfQlVTX1dJRFRIICAgICAgICAgICAg ICAweDEwMDQwDQo+PiArI2RlZmluZSBSWF9QUk9UX0JVU19XSURUSCAgICAgICAgICAgICAgMHgx MDA0NA0KPj4gKyNkZWZpbmUgUFJPVF9CVVNfV0lEVEhfMTAgICAgICAgICAgICAgIDB4MA0KPj4g KyNkZWZpbmUgUFJPVF9CVVNfV0lEVEhfMjAgICAgICAgICAgICAgIDB4MQ0KPj4gKyNkZWZpbmUg UFJPVF9CVVNfV0lEVEhfNDAgICAgICAgICAgICAgIDB4Mg0KPj4gKyNkZWZpbmUgUFJPVF9CVVNf V0lEVEhfU0hJRlQgICAgICAgICAgIDINCj4+ICsNCj4+ICsvKiBNYXggbnVtYmVyIG9mIEdUIGxh bmVzICovDQo+PiArI2RlZmluZSBNQVhfTEFORVMgICAgICAgICAgICAgICAgICAgICAgNA0KPj4g Kw0KPj4gKy8qIE1heCBBbGxvd2VkIHJlZmNsayBmcmVxdWVuY2llcyAqLw0KPj4gKyNkZWZpbmUg TUFYX1JFRkNMSyAgICAgICAgICAgICAgICAgICAgIDEzDQo+PiArDQo+PiArLyogTGFuZSBDTEsg c2hhcmluZyBtYXNrICovDQo+PiArI2RlZmluZSBMQU5FX0NMS19TSEFSRV9NQVNLICAgICAgICAg ICAgMHg4Rg0KPj4gKw0KPj4gKy8qIFNJT1UgU0FUQSBjb250cm9sIHJlZ2lzdGVyICovDQo+PiAr I2RlZmluZSBTQVRBX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgMHgwMTAwDQo+PiArDQo+PiAr LyogVG90YWwgbnVtYmVyIG9mIGNvbnRyb2xsZXJzICovDQo+PiArI2RlZmluZSBDT05UUk9MTEVS U19QRVJfTEFORSAgICAgICAgICAgNQ0KPj4gKw0KPj4gKy8qIFVTQiBwaXBlIGNvbnRyb2wgcGFy YW1ldGVycyAqLw0KPj4gKyNkZWZpbmUgUElQRV9DTEtfT0ZGU0VUICAgICAgICAgICAgICAgICAg ICAgICAgMHg3Yw0KPj4gKyNkZWZpbmUgUElQRV9QT1dFUl9PRkZTRVQgICAgICAgICAgICAgIDB4 ODANCj4+ICsjZGVmaW5lIFBJUEVfQ0xLX09OICAgICAgICAgICAgICAgICAgICAxDQo+PiArI2Rl ZmluZSBQSVBFX0NMS19PRkYgICAgICAgICAgICAgICAgICAgMA0KPj4gKyNkZWZpbmUgUElQRV9Q T1dFUl9PTiAgICAgICAgICAgICAgICAgIDENCj4+ICsjZGVmaW5lIFBJUEVfUE9XRVJfT0ZGICAg ICAgICAgICAgICAgICAwDQo+PiArDQo+PiArLyogUHJvdG9jb2wgVHlwZSBQcGFyYW1ldGVycyAq Lw0KPj4gKyNkZWZpbmUgWFBTR1RSX1RZUEVfVVNCMCAgICAgICAgICAgICAgIDAgIC8qIFVTQiBj b250cm9sbGVyIDAgKi8NCj4+ICsjZGVmaW5lIFhQU0dUUl9UWVBFX1VTQjEgICAgICAgICAgICAg ICAxICAvKiBVU0IgY29udHJvbGxlciAxICovDQo+PiArI2RlZmluZSBYUFNHVFJfVFlQRV9TQVRB XzAgICAgICAgICAgICAgMiAgLyogU0FUQSBjb250cm9sbGVyIGxhbmUgMCAqLw0KPj4gKyNkZWZp bmUgWFBTR1RSX1RZUEVfU0FUQV8xICAgICAgICAgICAgIDMgIC8qIFNBVEEgY29udHJvbGxlciBs YW5lIDEgKi8NCj4+ICsjZGVmaW5lIFhQU0dUUl9UWVBFX1BDSUVfMCAgICAgICAgICAgICA0ICAv KiBQQ0llIGNvbnRyb2xsZXIgbGFuZSAwICovDQo+PiArI2RlZmluZSBYUFNHVFJfVFlQRV9QQ0lF XzEgICAgICAgICAgICAgNSAgLyogUENJZSBjb250cm9sbGVyIGxhbmUgMSAqLw0KPj4gKyNkZWZp bmUgWFBTR1RSX1RZUEVfUENJRV8yICAgICAgICAgICAgIDYgIC8qIFBDSWUgY29udHJvbGxlciBs YW5lIDIgKi8NCj4+ICsjZGVmaW5lIFhQU0dUUl9UWVBFX1BDSUVfMyAgICAgICAgICAgICA3ICAv KiBQQ0llIGNvbnRyb2xsZXIgbGFuZSAzICovDQo+PiArI2RlZmluZSBYUFNHVFJfVFlQRV9EUF8w ICAgICAgICAgICAgICAgOCAgLyogRGlzcGxheSBQb3J0IGNvbnRyb2xsZXIgbGFuZSAwICovDQo+ PiArI2RlZmluZSBYUFNHVFJfVFlQRV9EUF8xICAgICAgICAgICAgICAgOSAgLyogRGlzcGxheSBQ b3J0IGNvbnRyb2xsZXIgbGFuZSAxICovDQo+PiArI2RlZmluZSBYUFNHVFJfVFlQRV9TR01JSTAg ICAgICAgICAgICAgMTAgLyogRXRoZXJuZXQgU0dNSUkgY29udHJvbGxlciAwICovDQo+PiArI2Rl ZmluZSBYUFNHVFJfVFlQRV9TR01JSTEgICAgICAgICAgICAgMTEgLyogRXRoZXJuZXQgU0dNSUkg Y29udHJvbGxlciAxICovDQo+PiArI2RlZmluZSBYUFNHVFJfVFlQRV9TR01JSTIgICAgICAgICAg ICAgMTIgLyogRXRoZXJuZXQgU0dNSUkgY29udHJvbGxlciAyICovDQo+PiArI2RlZmluZSBYUFNH VFJfVFlQRV9TR01JSTMgICAgICAgICAgICAgMTMgLyogRXRoZXJuZXQgU0dNSUkgY29udHJvbGxl ciAzICovDQo+PiArDQo+PiArLyogVGltZW91dCB2YWx1ZXMgKi8NCj4+ICsjZGVmaW5lIFJTVF9U SU1FT1VUX01TICAgICAgICAgICAgICAgICAxMDAwDQo+PiArI2RlZmluZSBUSU1FT1VUX1VTICAg ICAgICAgICAgICAgICAgICAgMTAwMA0KPj4gKw0KPj4gKy8qDQo+PiArICogVGhpcyB0YWJsZSBo b2xkcyB0aGUgdmFsaWQgY29tYmluYXRpb25zIG9mIGNvbnRyb2xsZXJzIGFuZA0KPj4gKyAqIGxh bmVzKEludGVyY29ubmVjdCBNYXRyaXgpLg0KPj4gKyAqLw0KPj4gK3N0YXRpYyB1bnNpZ25lZCBp bnQgaWNtX21hdHJpeFtNQVhfTEFORVNdW0NPTlRST0xMRVJTX1BFUl9MQU5FXSA9IHsNCj4+ICsg ICAgICAgeyBYUFNHVFJfVFlQRV9QQ0lFXzAsIFhQU0dUUl9UWVBFX1NBVEFfMCwgWFBTR1RSX1RZ UEVfVVNCMCwNCj4+ICsgICAgICAgICAgICAgICBYUFNHVFJfVFlQRV9EUF8xLCBYUFNHVFJfVFlQ RV9TR01JSTAgfSwNCj4+ICsgICAgICAgeyBYUFNHVFJfVFlQRV9QQ0lFXzEsIFhQU0dUUl9UWVBF X1NBVEFfMSwgWFBTR1RSX1RZUEVfVVNCMCwNCj4+ICsgICAgICAgICAgICAgICBYUFNHVFJfVFlQ RV9EUF8wLCBYUFNHVFJfVFlQRV9TR01JSTEgfSwNCj4+ICsgICAgICAgeyBYUFNHVFJfVFlQRV9Q Q0lFXzIsIFhQU0dUUl9UWVBFX1NBVEFfMCwgWFBTR1RSX1RZUEVfVVNCMCwNCj4+ICsgICAgICAg ICAgICAgICBYUFNHVFJfVFlQRV9EUF8xLCBYUFNHVFJfVFlQRV9TR01JSTIgfSwNCj4+ICsgICAg ICAgeyBYUFNHVFJfVFlQRV9QQ0lFXzMsIFhQU0dUUl9UWVBFX1NBVEFfMSwgWFBTR1RSX1RZUEVf VVNCMSwNCj4+ICsgICAgICAgICAgICAgICBYUFNHVFJfVFlQRV9EUF8wLCBYUFNHVFJfVFlQRV9T R01JSTMgfQ0KPj4gK307DQo+PiArDQo+PiArLyogQWxsb3dlZCBQTEwgcmVmZXJlbmNlIGNsb2Nr IGZyZXF1ZW5jaWVzICovDQo+PiArZW51bSBwbGxfZnJlcXVlbmNpZXMgew0KPj4gKyAgICAgICBS RUZfMTlfMk0gPSAwLA0KPj4gKyAgICAgICBSRUZfMjBNLA0KPj4gKyAgICAgICBSRUZfMjRNLA0K Pj4gKyAgICAgICBSRUZfMjZNLA0KPj4gKyAgICAgICBSRUZfMjdNLA0KPj4gKyAgICAgICBSRUZf MzhfNE0sDQo+PiArICAgICAgIFJFRl80ME0sDQo+PiArICAgICAgIFJFRl81Mk0sDQo+PiArICAg ICAgIFJFRl8xMDBNLA0KPj4gKyAgICAgICBSRUZfMTA4TSwNCj4+ICsgICAgICAgUkVGXzEyNU0s DQo+PiArICAgICAgIFJFRl8xMzVNLA0KPj4gKyAgICAgICBSRUZfMTUwTSwNCj4+ICt9Ow0KPj4g Kw0KPj4gKy8qKg0KPj4gKyAqIHN0cnVjdCB4cHNndHJfcGh5IC0gcmVwcmVzZW50YXRpb24gb2Yg YSBsYW5lDQo+PiArICogQHBoeTogcG9pbnRlciB0byB0aGUga2VybmVsIFBIWSBkZXZpY2UNCj4+ ICsgKiBAdHlwZTogY29udHJvbGxlciB3aGljaCB1c2VzIHRoaXMgbGFuZQ0KPj4gKyAqIEBsYW5l OiBsYW5lIG51bWJlcg0KPj4gKyAqIEBwcm90b2NvbDogcHJvdG9jb2wgaW4gd2hpY2ggdGhlIGxh bmUgb3BlcmF0ZXMNCj4+ICsgKiBAcmVmX2NsazogZW51bSBvZiBhbGxvd2VkIHJlZiBjbG9jayBy YXRlcyBmb3IgdGhpcyBsYW5lIFBMTA0KPj4gKyAqIEBwbGxfbG9jazogUExMIHN0YXR1cw0KPj4g KyAqIEBza2lwX3BoeV9pbml0OiBza2lwIHBoeV9pbml0KCkgaWYgdHJ1ZQ0KPj4gKyAqIEBkYXRh OiBwb2ludGVyIHRvIGhvbGQgcHJpdmF0ZSBkYXRhDQo+PiArICogQHJlZmNsa19yYXRlOiBQTEwg cmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeQ0KPj4gKyAqIEBzaGFyZV9sYW5lY2xrOiBsYW5lIG51 bWJlciBvZiB0aGUgY2xvY2sgdG8gYmUgc2hhcmVkDQo+PiArICovDQo+PiArc3RydWN0IHhwc2d0 cl9waHkgew0KPj4gKyAgICAgICBzdHJ1Y3QgcGh5ICpwaHk7DQo+PiArICAgICAgIHU4IHR5cGU7 DQo+PiArICAgICAgIHU4IGxhbmU7DQo+PiArICAgICAgIHU4IHByb3RvY29sOw0KPj4gKyAgICAg ICBlbnVtIHBsbF9mcmVxdWVuY2llcyByZWZfY2xrOw0KPj4gKyAgICAgICBib29sIHBsbF9sb2Nr Ow0KPj4gKyAgICAgICBib29sIHNraXBfcGh5X2luaXQ7DQo+PiArICAgICAgIHZvaWQgKmRhdGE7 DQo+PiArICAgICAgIHUzMiByZWZjbGtfcmF0ZTsNCj4+ICsgICAgICAgdTMyIHNoYXJlX2xhbmVj bGs7DQo+PiArfTsNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBzdHJ1Y3QgeHBzZ3RyX3NzYyAtIHN0 cnVjdHVyZSB0byBob2xkIFNTQyBzZXR0aW5ncyBmb3IgYSBsYW5lDQo+PiArICogQHJlZmNsa19y YXRlOiBQTEwgcmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeQ0KPj4gKyAqIEBwbGxfcmVmX2Nsazog dmFsdWUgdG8gYmUgd3JpdHRlbiB0byByZWdpc3RlciBmb3IgY29ycmVzcG9uZGluZyByZWYgY2xr IHJhdGUNCj4+ICsgKiBAc3RlcHM6IG51bWJlciBvZiBzdGVwcyBvZiBTU0MgKFNwcmVhZCBTcGVj dHJ1bSBDbG9jaykNCj4+ICsgKiBAc3RlcF9zaXplOiBzdGVwIHNpemUgb2YgZWFjaCBzdGVwDQo+ PiArICovDQo+PiArc3RydWN0IHhwc2d0cl9zc2Mgew0KPj4gKyAgICAgICB1MzIgcmVmY2xrX3Jh dGU7DQo+PiArICAgICAgIHU4ICBwbGxfcmVmX2NsazsNCj4+ICsgICAgICAgdTMyIHN0ZXBzOw0K Pj4gKyAgICAgICB1MzIgc3RlcF9zaXplOw0KPj4gK307DQo+PiArDQo+PiArLyogbG9va3VwIHRh YmxlIHRvIGhvbGQgYWxsIHNldHRpbmdzIG5lZWRlZCBmb3IgYSByZWYgY2xvY2sgZnJlcXVlbmN5 ICovDQo+PiArc3RhdGljIHN0cnVjdCB4cHNndHJfc3NjIHNzY19sb29rdXBbTUFYX1JFRkNMS10g PSB7DQo+PiArICAgICAgIHsxOTIwMDAwMCwgMHgwNSwgNjA4LCAyNjQwMjB9LA0KPj4gKyAgICAg ICB7MjAwMDAwMDAsIDB4MDYsIDYzNCwgMjQzNDU0fSwNCj4+ICsgICAgICAgezI0MDAwMDAwLCAw eDA3LCA3NjAsIDE2ODk3M30sDQo+PiArICAgICAgIHsyNjAwMDAwMCwgMHgwOCwgODI0LCAxNDM4 NjB9LA0KPj4gKyAgICAgICB7MjcwMDAwMDAsIDB4MDksIDg1NiwgODY1NTF9LA0KPj4gKyAgICAg ICB7Mzg0MDAwMDAsIDB4MEEsIDEyMTgsIDY1ODk2fSwNCj4+ICsgICAgICAgezQwMDAwMDAwLCAw eDBCLCA2MzQsIDI0MzQ1NH0sDQo+PiArICAgICAgIHs1MjAwMDAwMCwgMHgwQywgODI0LCAxNDM4 NjB9LA0KPj4gKyAgICAgICB7MTAwMDAwMDAwLCAweDBELCAxMDU4LCA4NzUzM30sDQo+PiArICAg ICAgIHsxMDgwMDAwMDAsIDB4MEUsIDg1NiwgODY1NTF9LA0KPj4gKyAgICAgICB7MTI1MDAwMDAw LCAweDBGLCA5OTIsIDExOTQ5N30sDQo+PiArICAgICAgIHsxMzUwMDAwMDAsIDB4MTAsIDEwNzAs IDU1MzkzfSwNCj4+ICsgICAgICAgezE1MDAwMDAwMCwgMHgxMSwgNzkyLCAxODcwOTF9DQo+PiAr fTsNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBzdHJ1Y3QgeHBzZ3RyX2RldiAtIHJlcHJlc2VudGF0 aW9uIG9mIGEgWnluTVAgR1QgZGV2aWNlDQo+PiArICogQGRldjogcG9pbnRlciB0byBkZXZpY2UN Cj4+ICsgKiBAc2VyZGVzOiBzZXJkZXMgYmFzZSBhZGRyZXNzDQo+PiArICogQHNpb3U6IHNpb3Ug YmFzZSBhZGRyZXNzDQo+PiArICogQGd0cl9tdXRleDogbXV0ZXggZm9yIGxvY2tpbmcNCj4+ICsg KiBAcGh5czogcG9pbnRlciB0byBhbGwgdGhlIGxhbmVzDQo+PiArICogQHR4X3Rlcm1fZml4OiBm aXggZm9yIEdUIGlzc3VlDQo+PiArICogQHNhdmVkX2ljbV9jZmcwOiBzdG9yZWQgdmFsdWUgb2Yg SUNNIENGRzAgcmVnaXN0ZXINCj4+ICsgKiBAc2F2ZWRfaWNtX2NmZzE6IHN0b3JlZCB2YWx1ZSBv ZiBJQ00gQ0ZHMSByZWdpc3Rlcg0KPj4gKyAqIEBzYXRhX3JzdDogYSByZXNldCBjb250cm9sIGZv ciBTQVRBDQo+PiArICogQGRwX3JzdDogYSByZXNldCBjb250cm9sIGZvciBEUA0KPj4gKyAqIEB1 c2IwX2Nyc3Q6IGEgcmVzZXQgY29udHJvbCBmb3IgdXNiMCBjb3JlDQo+PiArICogQHVzYjFfY3Jz dDogYSByZXNldCBjb250cm9sIGZvciB1c2IxIGNvcmUNCj4+ICsgKiBAdXNiMF9oaWJyc3Q6IGEg cmVzZXQgY29udHJvbCBmb3IgdXNiMCBoaWJlcm5hdGlvbiBtb2R1bGUNCj4+ICsgKiBAdXNiMV9o aWJyc3Q6IGEgcmVzZXQgY29udHJvbCBmb3IgdXNiMSBoaWJlcm5hdGlvbiBtb2R1bGUNCj4+ICsg KiBAdXNiMF9hcGJyc3Q6IGEgcmVzZXQgY29udHJvbCBmb3IgdXNiMCBhcGIgYnVzDQo+PiArICog QHVzYjFfYXBicnN0OiBhIHJlc2V0IGNvbnRyb2wgZm9yIHVzYjEgYXBiIGJ1cw0KPj4gKyAqIEBn ZW0wX3JzdDogYSByZXNldCBjb250cm9sIGZvciBnZW0wDQo+PiArICogQGdlbTFfcnN0OiBhIHJl c2V0IGNvbnRyb2wgZm9yIGdlbTENCj4+ICsgKiBAZ2VtMl9yc3Q6IGEgcmVzZXQgY29udHJvbCBm b3IgZ2VtMg0KPj4gKyAqIEBnZW0zX3JzdDogYSByZXNldCBjb250cm9sIGZvciBnZW0zDQo+PiAr ICovDQo+PiArc3RydWN0IHhwc2d0cl9kZXYgew0KPj4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlICpk ZXY7DQo+PiArICAgICAgIHZvaWQgX19pb21lbSAqc2VyZGVzOw0KPj4gKyAgICAgICB2b2lkIF9f aW9tZW0gKnNpb3U7DQo+PiArICAgICAgIHN0cnVjdCBtdXRleCBndHJfbXV0ZXg7IC8qIG11dGV4 IGZvciBsb2NraW5nICovDQo+PiArICAgICAgIHN0cnVjdCB4cHNndHJfcGh5ICoqcGh5czsNCj4+ ICsgICAgICAgYm9vbCB0eF90ZXJtX2ZpeDsNCj4+ICsgICAgICAgdW5zaWduZWQgaW50IHNhdmVk X2ljbV9jZmcwOw0KPj4gKyAgICAgICB1bnNpZ25lZCBpbnQgc2F2ZWRfaWNtX2NmZzE7DQo+PiAr ICAgICAgIHN0cnVjdCByZXNldF9jb250cm9sICpzYXRhX3JzdDsNCj4+ICsgICAgICAgc3RydWN0 IHJlc2V0X2NvbnRyb2wgKmRwX3JzdDsNCj4+ICsgICAgICAgc3RydWN0IHJlc2V0X2NvbnRyb2wg KnVzYjBfY3JzdDsNCj4+ICsgICAgICAgc3RydWN0IHJlc2V0X2NvbnRyb2wgKnVzYjFfY3JzdDsN Cj4+ICsgICAgICAgc3RydWN0IHJlc2V0X2NvbnRyb2wgKnVzYjBfaGlicnN0Ow0KPj4gKyAgICAg ICBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqdXNiMV9oaWJyc3Q7DQo+PiArICAgICAgIHN0cnVjdCBy ZXNldF9jb250cm9sICp1c2IwX2FwYnJzdDsNCj4+ICsgICAgICAgc3RydWN0IHJlc2V0X2NvbnRy b2wgKnVzYjFfYXBicnN0Ow0KPj4gKyAgICAgICBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqZ2VtMF9y c3Q7DQo+PiArICAgICAgIHN0cnVjdCByZXNldF9jb250cm9sICpnZW0xX3JzdDsNCj4+ICsgICAg ICAgc3RydWN0IHJlc2V0X2NvbnRyb2wgKmdlbTJfcnN0Ow0KPj4gKyAgICAgICBzdHJ1Y3QgcmVz ZXRfY29udHJvbCAqZ2VtM19yc3Q7DQo+PiArfTsNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiB4cHNn dHJfb3ZlcnJpZGVfZGVlbXBoIC0gb3ZlcnJpZGUgUElQRSBUWCBkZS1lbXBoYXNpcw0KPj4gKyAq IEBwaHk6IHBvaW50ZXIgdG8gcGh5DQo+PiArICogQHBsdmw6IHByZS1lbXBoYXNpcyBsZXZlbA0K Pj4gKyAqIEB2bHZsOiB2b2x0YWdlIHN3aW5nIGxldmVsDQo+PiArICoNCj4+ICsgKiBSZXR1cm46 IE5vbmUNCj4+ICsgKi8NCj4+ICt2b2lkIHhwc2d0cl9vdmVycmlkZV9kZWVtcGgoc3RydWN0IHBo eSAqcGh5LCB1OCBwbHZsLCB1OCB2bHZsKQ0KPj4gK3sNCj4+ICsgICAgICAgc3RydWN0IHhwc2d0 cl9waHkgKmd0cl9waHkgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsNCj4+ICsgICAgICAgc3RydWN0 IHhwc2d0cl9kZXYgKmd0cl9kZXYgPSBndHJfcGh5LT5kYXRhOw0KPj4gKyAgICAgICBzdGF0aWMg dTggcGVbNF1bNF0gPSB7IHsgMHgyLCAweDIsIDB4MiwgMHgyIH0sDQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeyAweDEsIDB4MSwgMHgxLCAweEZGIH0sDQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeyAweDAsIDB4MCwgMHhGRiwgMHhGRiB9LA0KPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9IH07DQo+ PiArDQo+PiArICAgICAgIHdyaXRlbChwZVtwbHZsXVt2bHZsXSwNCj4+ICsgICAgICAgICAgICAg IGd0cl9kZXYtPnNlcmRlcyArIGd0cl9waHktPmxhbmUgKiBMMF9UWF9BTkFfVE1fMThfT0ZGU0VU ICsNCj4+ICsgICAgICAgICAgICAgIEwwX1RYX0FOQV9UTV8xOCk7DQo+PiArfQ0KPj4gK0VYUE9S VF9TWU1CT0xfR1BMKHhwc2d0cl9vdmVycmlkZV9kZWVtcGgpOw0KPj4gKw0KPj4gKy8qKg0KPj4g KyAqIHhwc2d0cl9tYXJnaW5pbmdfZmFjdG9yIC0gYWRqdXN0IG1hcmdpbmluZyBmYWN0b3IgdmFs dWUNCj4+ICsgKiBAcGh5OiBwb2ludGVyIHRvIHBoeQ0KPj4gKyAqIEBwbHZsOiBwcmUtZW1waGFz aXMgbGV2ZWwNCj4+ICsgKiBAdmx2bDogdm9sdGFnZSBzd2luZyBsZXZlbA0KPj4gKyAqDQo+PiAr ICogUmV0dXJuOiBOb25lDQo+PiArICovDQo+PiArdm9pZCB4cHNndHJfbWFyZ2luaW5nX2ZhY3Rv cihzdHJ1Y3QgcGh5ICpwaHksIHU4IHBsdmwsIHU4IHZsdmwpDQo+PiArew0KPj4gKyAgICAgICBz dHJ1Y3QgeHBzZ3RyX3BoeSAqZ3RyX3BoeSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOw0KPj4gKyAg ICAgICBzdHJ1Y3QgeHBzZ3RyX2RldiAqZ3RyX2RldiA9IGd0cl9waHktPmRhdGE7DQo+PiArICAg ICAgIHN0YXRpYyB1OCB2c1s0XVs0XSA9IHsgeyAweDJhLCAweDI3LCAweDI0LCAweDIwIH0sDQo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAweDI3LCAweDIzLCAweDIwLCAweEZG IH0sDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAweDI0LCAweDIwLCAweEZG LCAweEZGIH0sDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAweEZGLCAweEZG LCAweEZGLCAweEZGIH0gfTsNCj4+ICsNCj4+ICsgICAgICAgd3JpdGVsKHZzW3BsdmxdW3Zsdmxd LA0KPj4gKyAgICAgICAgICAgICAgZ3RyX2Rldi0+c2VyZGVzICsgZ3RyX3BoeS0+bGFuZSAqIEww X1RYUE1EX1RNXzQ4X09GRlNFVCArDQo+PiArICAgICAgICAgICAgICBMMF9UWFBNRF9UTV80OCk7 DQo+PiArfQ0KPj4gK0VYUE9SVF9TWU1CT0xfR1BMKHhwc2d0cl9tYXJnaW5pbmdfZmFjdG9yKTsN Cj4+ICsNCj4+ICsvKioNCj4+ICsgKiB4cHNndHJfY29uZmlndXJlX3BsbCAtIGNvbmZpZ3VyZXMg U1NDIHNldHRpbmdzIGZvciBhIGxhbmUNCj4+ICsgKiBAZ3RyX3BoeTogcG9pbnRlciB0byBsYW5l DQo+PiArICoNCj4+ICsgKiBSZXR1cm46IE5vbmUNCj4+ICsgKi8NCj4+ICtzdGF0aWMgdm9pZCB4 cHNndHJfY29uZmlndXJlX3BsbChzdHJ1Y3QgeHBzZ3RyX3BoeSAqZ3RyX3BoeSkNCj4+ICt7DQo+ PiArICAgICAgIHN0cnVjdCB4cHNndHJfZGV2ICpndHJfZGV2ID0gZ3RyX3BoeS0+ZGF0YTsNCj4+ ICsgICAgICAgdTMyIHJlZzsNCj4+ICsgICAgICAgdTMyIG9mZnNldDsNCj4+ICsgICAgICAgdTMy IHN0ZXBzOw0KPj4gKyAgICAgICB1MzIgc2l6ZTsNCj4+ICsgICAgICAgdTggcGxsX3JlZl9jbGs7 DQo+PiArDQo+PiArICAgICAgIHN0ZXBzID0gc3NjX2xvb2t1cFtndHJfcGh5LT5yZWZfY2xrXS5z dGVwczsNCj4+ICsgICAgICAgc2l6ZSA9IHNzY19sb29rdXBbZ3RyX3BoeS0+cmVmX2Nsa10uc3Rl cF9zaXplOw0KPj4gKyAgICAgICBwbGxfcmVmX2NsayA9IHNzY19sb29rdXBbZ3RyX3BoeS0+cmVm X2Nsa10ucGxsX3JlZl9jbGs7DQo+PiArDQo+PiArICAgICAgIG9mZnNldCA9IGd0cl9waHktPmxh bmUgKiBQTExfUkVGX09GRlNFVCArIFBMTF9SRUZfU0VMMDsNCj4+ICsgICAgICAgcmVnID0gcmVh ZGwoZ3RyX2Rldi0+c2VyZGVzICsgb2Zmc2V0KTsNCj4+ICsgICAgICAgcmVnID0gKHJlZyAmIH5Q TExfRlJFUV9NQVNLKSB8IHBsbF9yZWZfY2xrOw0KPj4gKyAgICAgICB3cml0ZWwocmVnLCBndHJf ZGV2LT5zZXJkZXMgKyBvZmZzZXQpOw0KPj4gKw0KPj4gKyAgICAgICAvKiBFbmFibGUgbGFuZSBj bG9jayBzaGFyaW5nLCBpZiByZXF1aXJlZCAqLw0KPj4gKyAgICAgICBpZiAoZ3RyX3BoeS0+c2hh cmVfbGFuZWNsayAhPSBndHJfcGh5LT5sYW5lKSB7DQo+PiArICAgICAgICAgICAgICAgLyogTGFu ZTMgUmVmIENsb2NrIFNlbGVjdGlvbiBSZWdpc3RlciAqLw0KPj4gKyAgICAgICAgICAgICAgIG9m ZnNldCA9IGd0cl9waHktPmxhbmUgKiBQTExfUkVGX09GRlNFVCArIEwwX0wwX1JFRl9DTEtfU0VM Ow0KPj4gKyAgICAgICAgICAgICAgIHJlZyA9IHJlYWRsKGd0cl9kZXYtPnNlcmRlcyArIG9mZnNl dCk7DQo+PiArICAgICAgICAgICAgICAgcmVnID0gKHJlZyAmIH5MQU5FX0NMS19TSEFSRV9NQVNL KSB8DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IGd0cl9waHktPnNo YXJlX2xhbmVjbGspOw0KPj4gKyAgICAgICAgICAgICAgIHdyaXRlbChyZWcsIGd0cl9kZXYtPnNl cmRlcyArIG9mZnNldCk7DQo+PiArICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgLyogU1NDIHN0 ZXAgc2l6ZSBbNzowXSAqLw0KPj4gKyAgICAgICBvZmZzZXQgPSBndHJfcGh5LT5sYW5lICogU1RF UF9TSVpFX09GRlNFVCArIEwwX1BMTF9TU19TVEVQX1NJWkVfMF9MU0I7DQo+PiArICAgICAgIHJl ZyA9IHJlYWRsKGd0cl9kZXYtPnNlcmRlcyArIG9mZnNldCk7DQo+PiArICAgICAgIHJlZyA9IChy ZWcgJiB+U1RFUF9TSVpFXzBfTUFTSykgfA0KPj4gKyAgICAgICAgICAgICAgIChzaXplICYgU1RF UF9TSVpFXzBfTUFTSyk7DQo+PiArICAgICAgIHdyaXRlbChyZWcsIGd0cl9kZXYtPnNlcmRlcyAr IG9mZnNldCk7DQo+PiArDQo+PiArICAgICAgIC8qIFNTQyBzdGVwIHNpemUgWzE1OjhdICovDQo+ PiArICAgICAgIHNpemUgPSBzaXplID4+IFNURVBfU0laRV9TSElGVDsNCj4+ICsgICAgICAgb2Zm c2V0ID0gZ3RyX3BoeS0+bGFuZSAqIFNURVBfU0laRV9PRkZTRVQgKyBMMF9QTExfU1NfU1RFUF9T SVpFXzE7DQo+PiArICAgICAgIHJlZyA9IHJlYWRsKGd0cl9kZXYtPnNlcmRlcyArIG9mZnNldCk7 DQo+PiArICAgICAgIHJlZyA9IChyZWcgJiB+U1RFUF9TSVpFXzFfTUFTSykgfA0KPj4gKyAgICAg ICAgICAgICAgIChzaXplICYgU1RFUF9TSVpFXzFfTUFTSyk7DQo+PiArICAgICAgIHdyaXRlbChy ZWcsIGd0cl9kZXYtPnNlcmRlcyArIG9mZnNldCk7DQo+PiArDQo+PiArICAgICAgIC8qIFNTQyBz dGVwIHNpemUgWzIzOjE2XSAqLw0KPj4gKyAgICAgICBzaXplID0gc2l6ZSA+PiBTVEVQX1NJWkVf U0hJRlQ7DQo+PiArICAgICAgIG9mZnNldCA9IGd0cl9waHktPmxhbmUgKiBTVEVQX1NJWkVfT0ZG U0VUICsgTDBfUExMX1NTX1NURVBfU0laRV8yOw0KPj4gKyAgICAgICByZWcgPSByZWFkbChndHJf ZGV2LT5zZXJkZXMgKyBvZmZzZXQpOw0KPj4gKyAgICAgICByZWcgPSAocmVnICYgflNURVBfU0la RV8yX01BU0spIHwNCj4+ICsgICAgICAgICAgICAgICAoc2l6ZSAmIFNURVBfU0laRV8yX01BU0sp Ow0KPj4gKyAgICAgICB3cml0ZWwocmVnLCBndHJfZGV2LT5zZXJkZXMgKyBvZmZzZXQpOw0KPj4g Kw0KPj4gKyAgICAgICAvKiBTU0Mgc3RlcHMgWzc6MF0gKi8NCj4+ICsgICAgICAgb2Zmc2V0ID0g Z3RyX3BoeS0+bGFuZSAqIFNURVBTX09GRlNFVCArIEwwX1BMTF9TU19TVEVQU18wX0xTQjsNCj4+ ICsgICAgICAgcmVnID0gcmVhZGwoZ3RyX2Rldi0+c2VyZGVzICsgb2Zmc2V0KTsNCj4+ICsgICAg ICAgcmVnID0gKHJlZyAmIH5TVEVQU18wX01BU0spIHwNCj4+ICsgICAgICAgICAgICAgICAoc3Rl cHMgJiBTVEVQU18wX01BU0spOw0KPj4gKyAgICAgICB3cml0ZWwocmVnLCBndHJfZGV2LT5zZXJk ZXMgKyBvZmZzZXQpOw0KPj4gKw0KPj4gKyAgICAgICAvKiBTU0Mgc3RlcHMgWzEwOjhdICovDQo+ PiArICAgICAgIHN0ZXBzID0gc3RlcHMgPj4gU1RFUF9TSVpFX1NISUZUOw0KPj4gKyAgICAgICBv ZmZzZXQgPSBndHJfcGh5LT5sYW5lICogU1RFUFNfT0ZGU0VUICsgTDBfUExMX1NTX1NURVBTXzFf TVNCOw0KPj4gKyAgICAgICByZWcgPSByZWFkbChndHJfZGV2LT5zZXJkZXMgKyBvZmZzZXQpOw0K Pj4gKyAgICAgICByZWcgPSAocmVnICYgflNURVBTXzFfTUFTSykgfA0KPj4gKyAgICAgICAgICAg ICAgIChzdGVwcyAmIFNURVBTXzFfTUFTSyk7DQo+PiArICAgICAgIHdyaXRlbChyZWcsIGd0cl9k ZXYtPnNlcmRlcyArIG9mZnNldCk7DQo+PiArDQo+PiArICAgICAgIC8qIFNTQyBzdGVwIHNpemUg WzI0OjI1XSAqLw0KPj4gKyAgICAgICBzaXplID0gc2l6ZSA+PiBTVEVQX1NJWkVfU0hJRlQ7DQo+ PiArICAgICAgIG9mZnNldCA9IGd0cl9waHktPmxhbmUgKiBTVEVQX1NJWkVfT0ZGU0VUICsgTDBf UExMX1NTX1NURVBfU0laRV8zX01TQjsNCj4+ICsgICAgICAgcmVnID0gcmVhZGwoZ3RyX2Rldi0+ c2VyZGVzICsgb2Zmc2V0KTsNCj4+ICsgICAgICAgcmVnID0gKHJlZyAmIH5TVEVQX1NJWkVfM19N QVNLKSB8DQo+PiArICAgICAgICAgICAgICAgKHNpemUgJiBTVEVQX1NJWkVfM19NQVNLKTsNCj4+ ICsgICAgICAgcmVnIHw9IEZPUkNFX1NURVBfU0laRSB8IEZPUkNFX1NURVBTOw0KPj4gKyAgICAg ICB3cml0ZWwocmVnLCBndHJfZGV2LT5zZXJkZXMgKyBvZmZzZXQpOw0KPj4gK30NCj4+ICsNCj4+ ICsvKioNCj4+ICsgKiB4cHNndHJfbGFuZV9zZXRwcm90b2NvbCAtIHNldHMgcmVxdWlyZWQgcHJv dG9jb2wgaW4gSUNNIHJlZ2lzdGVycw0KPj4gKyAqIEBndHJfcGh5OiBwb2ludGVyIHRvIGxhbmUN Cj4+ICsgKg0KPj4gKyAqIFJldHVybjogTm9uZQ0KPj4gKyAqLw0KPj4gK3N0YXRpYyB2b2lkIHhw c2d0cl9sYW5lX3NldHByb3RvY29sKHN0cnVjdCB4cHNndHJfcGh5ICpndHJfcGh5KQ0KPj4gK3sN Cj4+ICsgICAgICAgc3RydWN0IHhwc2d0cl9kZXYgKmd0cl9kZXYgPSBndHJfcGh5LT5kYXRhOw0K Pj4gKyAgICAgICB1MzIgcmVnOw0KPj4gKyAgICAgICB1OCBwcm90b2NvbCA9IGd0cl9waHktPnBy b3RvY29sOw0KPj4gKw0KPj4gKyAgICAgICBzd2l0Y2ggKGd0cl9waHktPmxhbmUpIHsNCj4+ICsg ICAgICAgY2FzZSAwOg0KPj4gKyAgICAgICAgICAgICAgIHJlZyA9IHJlYWRsKGd0cl9kZXYtPnNl cmRlcyArIElDTV9DRkcwKTsNCj4+ICsgICAgICAgICAgICAgICByZWcgPSAocmVnICYgfklDTV9D RkcwX0wwX01BU0spIHwgcHJvdG9jb2w7DQo+PiArICAgICAgICAgICAgICAgd3JpdGVsKHJlZywg Z3RyX2Rldi0+c2VyZGVzICsgSUNNX0NGRzApOw0KPj4gKyAgICAgICAgICAgICAgIGJyZWFrOw0K Pj4gKyAgICAgICBjYXNlIDE6DQo+PiArICAgICAgICAgICAgICAgcmVnID0gcmVhZGwoZ3RyX2Rl di0+c2VyZGVzICsgSUNNX0NGRzApOw0KPj4gKyAgICAgICAgICAgICAgIHJlZyA9IChyZWcgJiB+ SUNNX0NGRzBfTDFfTUFTSykgfCAocHJvdG9jb2wgPDwgSUNNX0NGR19TSElGVCk7DQo+PiArICAg ICAgICAgICAgICAgd3JpdGVsKHJlZywgZ3RyX2Rldi0+c2VyZGVzICsgSUNNX0NGRzApOw0KPj4g KyAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICBjYXNlIDI6DQo+PiArICAgICAgICAg ICAgICAgcmVnID0gcmVhZGwoZ3RyX2Rldi0+c2VyZGVzICsgSUNNX0NGRzEpOw0KPj4gKyAgICAg ICAgICAgICAgIHJlZyA9IChyZWcgJiB+SUNNX0NGRzBfTDBfTUFTSykgfCBwcm90b2NvbDsNCj4+ ICsgICAgICAgICAgICAgICB3cml0ZWwocmVnLCBndHJfZGV2LT5zZXJkZXMgKyBJQ01fQ0ZHMSk7 DQo+PiArICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgIGNhc2UgMzoNCj4+ICsgICAg ICAgICAgICAgICByZWcgPSByZWFkbChndHJfZGV2LT5zZXJkZXMgKyBJQ01fQ0ZHMSk7DQo+PiAr ICAgICAgICAgICAgICAgcmVnID0gKHJlZyAmIH5JQ01fQ0ZHMF9MMV9NQVNLKSB8IChwcm90b2Nv bCA8PCBJQ01fQ0ZHX1NISUZUKTsNCj4+ICsgICAgICAgICAgICAgICB3cml0ZWwocmVnLCBndHJf ZGV2LT5zZXJkZXMgKyBJQ01fQ0ZHMSk7DQo+PiArICAgICAgICAgICAgICAgYnJlYWs7DQo+PiAr ICAgICAgIGRlZmF1bHQ6DQo+PiArICAgICAgICAgICAgICAgLyogV2UgYWxyZWFkeSBjaGVja2Vk IDAgPD0gbGFuZSA8PSAzICovDQo+PiArICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAg IH0NCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICogeHBzZ3RyX2dldF9zc2MgLSBnZXRzIHRo ZSByZXF1aXJlZCBzc2Mgc2V0dGluZ3MgYmFzZWQgb24gY2xrIHJhdGUNCj4+ICsgKiBAZ3RyX3Bo eTogcG9pbnRlciB0byBsYW5lDQo+PiArICoNCj4+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBv ciBlcnJvciBvbiBmYWlsdXJlDQo+PiArICovDQo+PiArc3RhdGljIGludCB4cHNndHJfZ2V0X3Nz YyhzdHJ1Y3QgeHBzZ3RyX3BoeSAqZ3RyX3BoeSkNCj4+ICt7DQo+PiArICAgICAgIHUzMiBpOw0K Pj4gKw0KPj4gKyAgICAgICAvKg0KPj4gKyAgICAgICAgKiBBc3NpZ24gdGhlIHJlcXVpcmVkIHNw cmVhZCBzcGVjdHJ1bShTU0MpIHNldHRpbmdzDQo+PiArICAgICAgICAqIGZyb20gbGFuZSByZWZl cm5jZSBjbGsgcmF0ZQ0KPj4gKyAgICAgICAgKi8NCj4+ICsgICAgICAgZm9yIChpID0gMCA7IGkg PCBBUlJBWV9TSVpFKHNzY19sb29rdXApOyBpKyspIHsNCj4+ICsgICAgICAgICAgICAgICBpZiAo Z3RyX3BoeS0+cmVmY2xrX3JhdGUgPT0gc3NjX2xvb2t1cFtpXS5yZWZjbGtfcmF0ZSkgew0KPj4g KyAgICAgICAgICAgICAgICAgICAgICAgZ3RyX3BoeS0+cmVmX2NsayA9IGk7DQo+PiArICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4+ICsgICAgICAgICAgICAgICB9DQo+PiArICAg ICAgIH0NCj4+ICsNCj4+ICsgICAgICAgLyogRGlkIG5vdCBnZXQgdmFsaWQgc3NjIHNldHRpbmdz Ki8NCj4+ICsgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4g KyAqIHhwc2d0cl9jb25maWd1cmVfbGFuZSAtIGNvbmZpZ3VyZXMgU1NDIHNldHRpbmdzIGZvciBh IGxhbmUNCj4+ICsgKiBAZ3RyX3BoeTogcG9pbnRlciB0byBsYW5lDQo+PiArICoNCj4+ICsgKiBS ZXR1cm46IDAgb24gc3VjY2VzcyBvciBlcnJvciBvbiBmYWlsdXJlDQo+PiArICovDQo+PiArc3Rh dGljIGludCB4cHNndHJfY29uZmlndXJlX2xhbmUoc3RydWN0IHhwc2d0cl9waHkgKmd0cl9waHkp DQo+PiArew0KPj4gKyAgICAgICBzd2l0Y2ggKGd0cl9waHktPnR5cGUpIHsNCj4+ICsgICAgICAg Y2FzZSBYUFNHVFJfVFlQRV9VU0IwOg0KPj4gKyAgICAgICBjYXNlIFhQU0dUUl9UWVBFX1VTQjE6 DQo+PiArICAgICAgICAgICAgICAgZ3RyX3BoeS0+cHJvdG9jb2wgPSBJQ01fUFJPVE9DT0xfVVNC Ow0KPj4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICBjYXNlIFhQU0dUUl9UWVBF X1NBVEFfMDoNCj4+ICsgICAgICAgY2FzZSBYUFNHVFJfVFlQRV9TQVRBXzE6DQo+PiArICAgICAg ICAgICAgICAgZ3RyX3BoeS0+cHJvdG9jb2wgPSBJQ01fUFJPVE9DT0xfU0FUQTsNCj4+ICsgICAg ICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAgY2FzZSBYUFNHVFJfVFlQRV9EUF8wOg0KPj4g KyAgICAgICBjYXNlIFhQU0dUUl9UWVBFX0RQXzE6DQo+PiArICAgICAgICAgICAgICAgZ3RyX3Bo eS0+cHJvdG9jb2wgPSBJQ01fUFJPVE9DT0xfRFA7DQo+PiArICAgICAgICAgICAgICAgYnJlYWs7 DQo+PiArICAgICAgIGNhc2UgWFBTR1RSX1RZUEVfUENJRV8wOg0KPj4gKyAgICAgICBjYXNlIFhQ U0dUUl9UWVBFX1BDSUVfMToNCj4+ICsgICAgICAgY2FzZSBYUFNHVFJfVFlQRV9QQ0lFXzI6DQo+ PiArICAgICAgIGNhc2UgWFBTR1RSX1RZUEVfUENJRV8zOg0KPj4gKyAgICAgICAgICAgICAgIGd0 cl9waHktPnByb3RvY29sID0gSUNNX1BST1RPQ09MX1BDSUU7DQo+PiArICAgICAgICAgICAgICAg YnJlYWs7DQo+PiArICAgICAgIGNhc2UgWFBTR1RSX1RZUEVfU0dNSUkwOg0KPj4gKyAgICAgICBj YXNlIFhQU0dUUl9UWVBFX1NHTUlJMToNCj4+ICsgICAgICAgY2FzZSBYUFNHVFJfVFlQRV9TR01J STI6DQo+PiArICAgICAgIGNhc2UgWFBTR1RSX1RZUEVfU0dNSUkzOg0KPj4gKyAgICAgICAgICAg ICAgIGd0cl9waHktPnByb3RvY29sID0gSUNNX1BST1RPQ09MX1NHTUlJOw0KPj4gKyAgICAgICAg ICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICBkZWZhdWx0Og0KPj4gKyAgICAgICAgICAgICAgIGd0 cl9waHktPnByb3RvY29sID0gSUNNX1BST1RPQ09MX1BEOw0KPj4gKyAgICAgICAgICAgICAgIGJy ZWFrOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIC8qIEdldCBTU0Mgc2V0dGluc2cg Zm9yIHJlZmVybmNlIGNsayByYXRlICovDQo+PiArICAgICAgIGlmICh4cHNndHJfZ2V0X3NzYyhn dHJfcGh5KSA8IDApDQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+PiArDQo+ PiArICAgICAgIHJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiB4cHNndHJf Y29uZmlnX3VzYnBpcGUgLSBjb25maWd1cmVzIHRoZSBQSVBFMyBzaWduYWxzIGZvciBVU0INCj4+ ICsgKiBAZ3RyX3BoeTogcG9pbnRlciB0byBndHIgcGh5IGRldmljZQ0KPj4gKyAqDQo+PiArICog UmV0dXJuOiBOb25lDQo+PiArICovDQo+PiArc3RhdGljIHZvaWQgeHBzZ3RyX2NvbmZpZ191c2Jw aXBlKHN0cnVjdCB4cHNndHJfcGh5ICpndHJfcGh5KQ0KPj4gK3sNCj4+ICsgICAgICAgc3RydWN0 IHBoeSAqcGh5ID0gZ3RyX3BoeS0+cGh5Ow0KPj4gKyAgICAgICBzdHJ1Y3QgeHBzZ3RyX2RldiAq Z3RyX2RldiA9IGd0cl9waHktPmRhdGE7DQo+PiArICAgICAgIHZvaWQgX19pb21lbSAqcmVncyA9 IGRldl9nZXRfcGxhdGRhdGEoJnBoeS0+ZGV2KTsNCj4+ICsNCj4+ICsgICAgICAgaWYgKHJlZ3Mp IHsNCj4+ICsgICAgICAgICAgICAgICAvKiBTZXQgUElQRSBwb3dlciBwcmVzZW50IHNpZ25hbCAq Lw0KPj4gKyAgICAgICAgICAgICAgIHdyaXRlbChQSVBFX1BPV0VSX09OLCByZWdzICsgUElQRV9Q T1dFUl9PRkZTRVQpOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIC8qIENsZWFyIFBJUEUgQ0xL IHNpZ25hbCAqLw0KPj4gKyAgICAgICAgICAgICAgIHdyaXRlbChQSVBFX0NMS19PRkYsIHJlZ3Mg KyBQSVBFX0NMS19PRkZTRVQpOw0KPj4gKyAgICAgICB9IGVsc2Ugew0KPj4gKyAgICAgICAgICAg ICAgIGRldl9pbmZvKGd0cl9kZXYtPmRldiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAi JXM6IE5vIHZhbGlkIFBsYXRmb3JtX2RhdGEgZm91bmRcbiIsIF9fZnVuY19fKTsNCj4+ICsgICAg ICAgfQ0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiB4cHNndHJfcmVzZXRfYXNzZXJ0IC0g YXNzZXJ0cyByZXNldCB1c2luZyByZXNldCBmcmFtZXdvcmsNCj4+ICsgKiBAcnN0YzogcG9pbnRl ciB0byByZXNldF9jb250cm9sDQo+PiArICoNCj4+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBv ciBlcnJvciBvbiBmYWlsdXJlDQo+PiArICovDQo+PiArc3RhdGljIGludCB4cHNndHJfcmVzZXRf YXNzZXJ0KHN0cnVjdCByZXNldF9jb250cm9sICpyc3RjKQ0KPj4gK3sNCj4+ICsgICAgICAgdW5z aWduZWQgbG9uZyBsb29wX3RpbWUgPSBtc2Vjc190b19qaWZmaWVzKFJTVF9USU1FT1VUX01TKTsN Cj4+ICsgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0Ow0KPj4gKw0KPj4gKyAgICAgICByZXNl dF9jb250cm9sX2Fzc2VydChyc3RjKTsNCj4+ICsNCj4+ICsgICAgICAgLyogd2FpdCB1bnRpbCBy ZXNldCBpcyBhc3NlcnRlZCBvciB0aW1lb3V0ICovDQo+PiArICAgICAgIHRpbWVvdXQgPSBqaWZm aWVzICsgbG9vcF90aW1lOw0KPj4gKw0KPj4gKyAgICAgICB3aGlsZSAoIXRpbWVfYWZ0ZXJfZXEo amlmZmllcywgdGltZW91dCkpIHsNCj4+ICsgICAgICAgICAgICAgICBpZiAocmVzZXRfY29udHJv bF9zdGF0dXMocnN0YykgPiAwKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7 DQo+PiArDQo+PiArICAgICAgICAgICAgICAgY3B1X3JlbGF4KCk7DQo+PiArICAgICAgIH0NCj4+ ICsNCj4+ICsgICAgICAgcmV0dXJuIC1FVElNRURPVVQ7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0K Pj4gKyAqIHhwc2d0cl9yZXNldF9yZWxlYXNlIC0gZGUtYXNzZXJ0cyByZXNldCB1c2luZyByZXNl dCBmcmFtZXdvcmsNCj4+ICsgKiBAcnN0YzogcG9pbnRlciB0byByZXNldF9jb250cm9sDQo+PiAr ICoNCj4+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBlcnJvciBvbiBmYWlsdXJlDQo+PiAr ICovDQo+PiArc3RhdGljIGludCB4cHNndHJfcmVzZXRfcmVsZWFzZShzdHJ1Y3QgcmVzZXRfY29u dHJvbCAqcnN0YykNCj4+ICt7DQo+PiArICAgICAgIHVuc2lnbmVkIGxvbmcgbG9vcF90aW1lID0g bXNlY3NfdG9famlmZmllcyhSU1RfVElNRU9VVF9NUyk7DQo+PiArICAgICAgIHVuc2lnbmVkIGxv bmcgdGltZW91dDsNCj4+ICsNCj4+ICsgICAgICAgcmVzZXRfY29udHJvbF9kZWFzc2VydChyc3Rj KTsNCj4+ICsNCj4+ICsgICAgICAgLyogd2FpdCB1bnRpbCByZXNldCBpcyBkZS1hc3NlcnRlZCBv ciB0aW1lb3V0ICovDQo+PiArICAgICAgIHRpbWVvdXQgPSBqaWZmaWVzICsgbG9vcF90aW1lOw0K Pj4gKyAgICAgICB3aGlsZSAoIXRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHsNCj4+ ICsgICAgICAgICAgICAgICBpZiAoIXJlc2V0X2NvbnRyb2xfc3RhdHVzKHJzdGMpKQ0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+PiArDQo+PiArICAgICAgICAgICAgICAg Y3B1X3JlbGF4KCk7DQo+PiArICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgcmV0dXJuIC1FVElN RURPVVQ7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIHhwc2d0cl9jb250cm9sbGVyX3Jl c2V0IC0gcHV0cyBjb250cm9sbGVyIGluIHJlc2V0DQo+PiArICogQGd0cl9waHk6IHBvaW50ZXIg dG8gbGFuZQ0KPj4gKyAqDQo+PiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3Igb24g ZmFpbHVyZQ0KPj4gKyAqLw0KPj4gK3N0YXRpYyBpbnQgeHBzZ3RyX2NvbnRyb2xsZXJfcmVzZXQo c3RydWN0IHhwc2d0cl9waHkgKmd0cl9waHkpDQo+PiArew0KPj4gKyAgICAgICBzdHJ1Y3QgeHBz Z3RyX2RldiAqZ3RyX2RldiA9IGd0cl9waHktPmRhdGE7DQo+PiArICAgICAgIGludCByZXQ7DQo+ PiArDQo+PiArICAgICAgIHN3aXRjaCAoZ3RyX3BoeS0+dHlwZSkgew0KPj4gKyAgICAgICBjYXNl IFhQU0dUUl9UWVBFX1VTQjA6DQo+PiArICAgICAgICAgICAgICAgcmV0ID0geHBzZ3RyX3Jlc2V0 X2Fzc2VydChndHJfZGV2LT51c2IwX2Nyc3QpOw0KPj4gKyAgICAgICAgICAgICAgIGlmIChyZXQg IT0gMCkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gKw0KPj4gKyAgICAg ICAgICAgICAgIHJldCA9IHhwc2d0cl9yZXNldF9hc3NlcnQoZ3RyX2Rldi0+dXNiMF9oaWJyc3Qp Ow0KPj4gKyAgICAgICAgICAgICAgIGlmIChyZXQgIT0gMCkNCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIHJldCA9IHhwc2d0cl9yZXNl dF9hc3NlcnQoZ3RyX2Rldi0+dXNiMF9hcGJyc3QpOw0KPj4gKyAgICAgICAgICAgICAgIGJyZWFr Ow0KPj4gKyAgICAgICBjYXNlIFhQU0dUUl9UWVBFX1VTQjE6DQo+PiArICAgICAgICAgICAgICAg cmV0ID0geHBzZ3RyX3Jlc2V0X2Fzc2VydChndHJfZGV2LT51c2IxX2Nyc3QpOw0KPj4gKyAgICAg ICAgICAgICAgIGlmIChyZXQgIT0gMCkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIHJldCA9IHhwc2d0cl9yZXNldF9hc3NlcnQoZ3Ry X2Rldi0+dXNiMV9oaWJyc3QpOw0KPj4gKyAgICAgICAgICAgICAgIGlmIChyZXQgIT0gMCkNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAg IHJldCA9IHhwc2d0cl9yZXNldF9hc3NlcnQoZ3RyX2Rldi0+dXNiMV9hcGJyc3QpOw0KPj4gKyAg ICAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICBjYXNlIFhQU0dUUl9UWVBFX1NBVEFfMDoN Cj4+ICsgICAgICAgY2FzZSBYUFNHVFJfVFlQRV9TQVRBXzE6DQo+PiArICAgICAgICAgICAgICAg cmV0ID0geHBzZ3RyX3Jlc2V0X2Fzc2VydChndHJfZGV2LT5zYXRhX3JzdCk7DQo+PiArICAgICAg ICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgIGNhc2UgWFBTR1RSX1RZUEVfRFBfMDoNCj4+ICsg ICAgICAgY2FzZSBYUFNHVFJfVFlQRV9EUF8xOg0KPj4gKyAgICAgICAgICAgICAgIHJldCA9IHhw c2d0cl9yZXNldF9hc3NlcnQoZ3RyX2Rldi0+ZHBfcnN0KTsNCj4+ICsgICAgICAgICAgICAgICBi cmVhazsNCj4+ICsgICAgICAgY2FzZSBYUFNHVFJfVFlQRV9TR01JSTA6DQo+PiArICAgICAgICAg ICAgICAgcmV0ID0geHBzZ3RyX3Jlc2V0X2Fzc2VydChndHJfZGV2LT5nZW0wX3JzdCk7DQo+PiAr ICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgIGNhc2UgWFBTR1RSX1RZUEVfU0dNSUkx Og0KPj4gKyAgICAgICAgICAgICAgIHJldCA9IHhwc2d0cl9yZXNldF9hc3NlcnQoZ3RyX2Rldi0+ Z2VtMV9yc3QpOw0KPj4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICBjYXNlIFhQ U0dUUl9UWVBFX1NHTUlJMjoNCj4+ICsgICAgICAgICAgICAgICByZXQgPSB4cHNndHJfcmVzZXRf YXNzZXJ0KGd0cl9kZXYtPmdlbTJfcnN0KTsNCj4+ICsgICAgICAgICAgICAgICBicmVhazsNCj4+ ICsgICAgICAgY2FzZSBYUFNHVFJfVFlQRV9TR01JSTM6DQo+PiArICAgICAgICAgICAgICAgcmV0 ID0geHBzZ3RyX3Jlc2V0X2Fzc2VydChndHJfZGV2LT5nZW0zX3JzdCk7DQo+PiArICAgICAgICAg ICAgICAgYnJlYWs7DQo+PiArICAgICAgIGRlZmF1bHQ6DQo+PiArICAgICAgICAgICAgICAgcmV0 ID0gLUVJTlZBTDsNCj4+ICsgICAgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAgfQ0KPj4g Kw0KPj4gKyAgICAgICByZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiB4 cHNndHJfY29udHJvbGxlcl9yZWxlYXNlX3Jlc2V0IC0gcmVsZWFzZXMgY29udHJvbGxlciBmcm9t IHJlc2V0DQo+PiArICogQGd0cl9waHk6IHBvaW50ZXIgdG8gbGFuZQ0KPj4gKyAqDQo+PiArICog UmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3Igb24gZmFpbHVyZQ0KPj4gKyAqLw0KPj4gK3N0 YXRpYyBpbnQgeHBzZ3RyX2NvbnRyb2xsZXJfcmVsZWFzZV9yZXNldChzdHJ1Y3QgeHBzZ3RyX3Bo eSAqZ3RyX3BoeSkNCj4+ICt7DQo+PiArICAgICAgIHN0cnVjdCB4cHNndHJfZGV2ICpndHJfZGV2 ID0gZ3RyX3BoeS0+ZGF0YTsNCj4+ICsgICAgICAgaW50IHJldDsNCj4+ICsNCj4+ICsgICAgICAg c3dpdGNoIChndHJfcGh5LT50eXBlKSB7DQo+PiArICAgICAgIGNhc2UgWFBTR1RSX1RZUEVfVVNC MDoNCj4+ICsgICAgICAgICAgICAgICByZXQgPSB4cHNndHJfcmVzZXRfcmVsZWFzZShndHJfZGV2 LT51c2IwX2FwYnJzdCk7DQo+PiArICAgICAgICAgICAgICAgaWYgKHJldCAhPSAwKQ0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArDQo+PiArICAgICAgICAgICAgICAgLyog Q29uZmlnIFBJUEUzIHNpZ25hbHMgYWZ0ZXIgcmVsZWFzaW5nIEFQQiByZXNldCAqLw0KPj4gKyAg ICAgICAgICAgICAgIHhwc2d0cl9jb25maWdfdXNicGlwZShndHJfcGh5KTsNCj4+ICsNCj4+ICsg ICAgICAgICAgICAgICByZXQgPSB4cHNndHJfcmVzZXRfcmVsZWFzZShndHJfZGV2LT51c2IwX2Ny c3QpOw0KPj4gKyAgICAgICAgICAgICAgIGlmIChyZXQgIT0gMCkNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIHJldCA9IHhwc2d0cl9y ZXNldF9yZWxlYXNlKGd0cl9kZXYtPnVzYjBfaGlicnN0KTsNCj4+ICsgICAgICAgICAgICAgICBi cmVhazsNCj4+ICsgICAgICAgY2FzZSBYUFNHVFJfVFlQRV9VU0IxOg0KPj4gKyAgICAgICAgICAg ICAgIHJldCA9IHhwc2d0cl9yZXNldF9yZWxlYXNlKGd0cl9kZXYtPnVzYjFfYXBicnN0KTsNCj4+ ICsgICAgICAgICAgICAgICBpZiAocmV0ICE9IDApDQo+PiArICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICAvKiBDb25maWcgUElQRTMgc2lnbmFs cyBhZnRlciByZWxlYXNpbmcgQVBCIHJlc2V0ICovDQo+PiArICAgICAgICAgICAgICAgeHBzZ3Ry X2NvbmZpZ191c2JwaXBlKGd0cl9waHkpOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIHJldCA9 IHhwc2d0cl9yZXNldF9yZWxlYXNlKGd0cl9kZXYtPnVzYjFfY3JzdCk7DQo+PiArICAgICAgICAg ICAgICAgaWYgKHJldCAhPSAwKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ PiArDQo+PiArICAgICAgICAgICAgICAgcmV0ID0geHBzZ3RyX3Jlc2V0X3JlbGVhc2UoZ3RyX2Rl di0+dXNiMV9oaWJyc3QpOw0KPj4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICBj YXNlIFhQU0dUUl9UWVBFX1NBVEFfMDoNCj4+ICsgICAgICAgY2FzZSBYUFNHVFJfVFlQRV9TQVRB XzE6DQo+PiArICAgICAgICAgICAgICAgcmV0ID0geHBzZ3RyX3Jlc2V0X3JlbGVhc2UoZ3RyX2Rl di0+c2F0YV9yc3QpOw0KPj4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICBjYXNl IFhQU0dUUl9UWVBFX0RQXzA6DQo+PiArICAgICAgIGNhc2UgWFBTR1RSX1RZUEVfRFBfMToNCj4+ ICsgICAgICAgICAgICAgICByZXQgPSB4cHNndHJfcmVzZXRfcmVsZWFzZShndHJfZGV2LT5kcF9y c3QpOw0KPj4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICBjYXNlIFhQU0dUUl9U WVBFX1NHTUlJMDoNCj4+ICsgICAgICAgICAgICAgICByZXQgPSB4cHNndHJfcmVzZXRfcmVsZWFz ZShndHJfZGV2LT5nZW0wX3JzdCk7DQo+PiArICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAg ICAgIGNhc2UgWFBTR1RSX1RZUEVfU0dNSUkxOg0KPj4gKyAgICAgICAgICAgICAgIHJldCA9IHhw c2d0cl9yZXNldF9yZWxlYXNlKGd0cl9kZXYtPmdlbTFfcnN0KTsNCj4+ICsgICAgICAgICAgICAg ICBicmVhazsNCj4+ICsgICAgICAgY2FzZSBYUFNHVFJfVFlQRV9TR01JSTI6DQo+PiArICAgICAg ICAgICAgICAgcmV0ID0geHBzZ3RyX3Jlc2V0X3JlbGVhc2UoZ3RyX2Rldi0+Z2VtMl9yc3QpOw0K Pj4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICBjYXNlIFhQU0dUUl9UWVBFX1NH TUlJMzoNCj4+ICsgICAgICAgICAgICAgICByZXQgPSB4cHNndHJfcmVzZXRfcmVsZWFzZShndHJf ZGV2LT5nZW0zX3JzdCk7DQo+PiArICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgIGRl ZmF1bHQ6DQo+PiArICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsNCj4+ICsgICAgICAgICAg ICAgICBicmVhazsNCj4+ICsgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICByZXR1cm4gcmV0Ow0K Pj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiB4cHNndHJfdXNiX3JzdF9hc3NlcnQgLSBhc3Nl cnQgVVNCIGNvcmUgcmVzZXQNCj4+ICsgKiBAcGh5OiBwb2ludGVyIHRvIHBoeQ0KPj4gKyAqDQo+ PiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3Igb24gZmFpbHVyZQ0KPj4gKyAqLw0K Pj4gK2ludCB4cHNndHJfdXNiX2Nyc3RfYXNzZXJ0KHN0cnVjdCBwaHkgKnBoeSkNCj4+ICt7DQo+ PiArICAgICAgIHN0cnVjdCB4cHNndHJfcGh5ICpndHJfcGh5ID0gcGh5X2dldF9kcnZkYXRhKHBo eSk7DQo+PiArICAgICAgIHN0cnVjdCB4cHNndHJfZGV2ICpndHJfZGV2ID0gZ3RyX3BoeS0+ZGF0 YTsNCj4+ICsgICAgICAgaW50IHJldDsNCj4+ICsNCj4+ICsgICAgICAgc3dpdGNoIChndHJfcGh5 LT50eXBlKSB7DQo+PiArICAgICAgIGNhc2UgWFBTR1RSX1RZUEVfVVNCMDoNCj4+ICsgICAgICAg ICAgICAgICByZXQgPSB4cHNndHJfcmVzZXRfYXNzZXJ0KGd0cl9kZXYtPnVzYjBfY3JzdCk7DQo+ PiArICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgIGNhc2UgWFBTR1RSX1RZUEVfVVNC MToNCj4+ICsgICAgICAgICAgICAgICByZXQgPSB4cHNndHJfcmVzZXRfYXNzZXJ0KGd0cl9kZXYt PnVzYjFfY3JzdCk7DQo+PiArICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgIGRlZmF1 bHQ6DQo+PiArICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsNCj4+ICsgICAgICAgICAgICAg ICBicmVhazsNCj4+ICsgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICByZXR1cm4gcmV0Ow0KPj4g K30NCj4+ICtFWFBPUlRfU1lNQk9MKHhwc2d0cl91c2JfY3JzdF9hc3NlcnQpOw0KPj4gKw0KPj4g Ky8qKg0KPj4gKyAqIHhwc2d0cl91c2JfcnN0X3JlbGVhc2UgLSByZWxlYXNlIFVTQiBjb3JlIHJl c2V0DQo+PiArICogQHBoeTogcG9pbnRlciB0byBwaHkNCj4+ICsgKg0KPj4gKyAqIFJldHVybjog MCBvbiBzdWNjZXNzIG9yIGVycm9yIG9uIGZhaWx1cmUNCj4+ICsgKi8NCj4+ICtpbnQgeHBzZ3Ry X3VzYl9jcnN0X3JlbGVhc2Uoc3RydWN0IHBoeSAqcGh5KQ0KPj4gK3sNCj4+ICsgICAgICAgc3Ry dWN0IHhwc2d0cl9waHkgKmd0cl9waHkgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsNCj4+ICsgICAg ICAgc3RydWN0IHhwc2d0cl9kZXYgKmd0cl9kZXYgPSBndHJfcGh5LT5kYXRhOw0KPj4gKyAgICAg ICBpbnQgcmV0Ow0KPj4gKw0KPj4gKyAgICAgICBzd2l0Y2ggKGd0cl9waHktPnR5cGUpIHsNCj4+ ICsgICAgICAgY2FzZSBYUFNHVFJfVFlQRV9VU0IwOg0KPj4gKyAgICAgICAgICAgICAgIHJldCA9 IHhwc2d0cl9yZXNldF9yZWxlYXNlKGd0cl9kZXYtPnVzYjBfY3JzdCk7DQo+PiArICAgICAgICAg ICAgICAgYnJlYWs7DQo+PiArICAgICAgIGNhc2UgWFBTR1RSX1RZUEVfVVNCMToNCj4+ICsgICAg ICAgICAgICAgICByZXQgPSB4cHNndHJfcmVzZXRfcmVsZWFzZShndHJfZGV2LT51c2IxX2Nyc3Qp Ow0KPj4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICBkZWZhdWx0Og0KPj4gKyAg ICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7DQo+PiArICAgICAgICAgICAgICAgYnJlYWs7DQo+ PiArICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgcmV0dXJuIHJldDsNCj4+ICt9DQo+PiArRVhQ T1JUX1NZTUJPTCh4cHNndHJfdXNiX2Nyc3RfcmVsZWFzZSk7DQo+PiArDQo+PiArLyoqDQo+PiAr ICogeHBzZ3RyX3dhaXRfcGxsX2xvY2sgLSBXYWl0cyB1bnRpbCBQTEwgaXMgbG9ja2VkIG9yIHRp bWVkb3V0DQo+PiArICogQHBoeTogcG9pbnRlciB0byBwaHkNCj4+ICsgKg0KPj4gKyAqIFJldHVy bjogMCBvbiBzdWNjZXNzIG9yIGVycm9yIG9uIGZhaWx1cmUNCj4+ICsgKi8NCj4+ICtpbnQgeHBz Z3RyX3dhaXRfcGxsX2xvY2soc3RydWN0IHBoeSAqcGh5KQ0KPj4gK3sNCj4+ICsgICAgICAgc3Ry dWN0IHhwc2d0cl9waHkgKmd0cl9waHkgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsNCj4+ICsgICAg ICAgc3RydWN0IHhwc2d0cl9kZXYgKmd0cl9kZXYgPSBndHJfcGh5LT5kYXRhOw0KPj4gKyAgICAg ICB1MzIgb2Zmc2V0LCByZWc7DQo+PiArICAgICAgIHUzMiB0aW1lb3V0ID0gVElNRU9VVF9VUzsN Cj4+ICsgICAgICAgaW50IHJldCA9IDA7DQo+PiArDQo+PiArICAgICAgIC8qIENoZWNrIHBsbCBp cyBsb2NrZWQgKi8NCj4+ICsgICAgICAgb2Zmc2V0ID0gZ3RyX3BoeS0+bGFuZSAqIFBMTF9TVEFU VVNfUkVBRF9PRkZTRVQgKw0KPkwwX1BMTF9TVEFUVVNfUkVBRF8xOw0KPj4gKyAgICAgICBkZXZf ZGJnKGd0cl9kZXYtPmRldiwgIldhaXRpbmcgZm9yIFBMTCBsb2NrLi4uXG4iKTsNCj4+ICsNCj4+ ICsgICAgICAgZG8gew0KPj4gKyAgICAgICAgICAgICAgIHJlZyA9IHJlYWRsKGd0cl9kZXYtPnNl cmRlcyArIG9mZnNldCk7DQo+PiArICAgICAgICAgICAgICAgaWYgKChyZWcgJiBQTExfU1RBVFVT X0xPQ0tFRCkgPT0gUExMX1NUQVRVU19MT0NLRUQpDQo+PiArICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICBpZiAoIS0tdGltZW91dCkgew0KPj4g KyAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycihndHJfZGV2LT5kZXYsICJQTEwgbG9jayB0 aW1lIG91dFxuIik7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRVRJTUVET1VU Ow0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgICAgICAgICAg fQ0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIHVkZWxheSgxKTsNCj4+ICsgICAgICAgfSB3aGls ZSAodGltZW91dCA+IDApOw0KPj4gKw0KPj4gKyAgICAgICBpZiAocmV0ID09IDApDQo+PiArICAg ICAgICAgICAgICAgZ3RyX3BoeS0+cGxsX2xvY2sgPSB0cnVlOw0KPj4gKw0KPj4gKyAgICAgICBk ZXZfaW5mbyhndHJfZGV2LT5kZXYsICJMYW5lOiVkIHR5cGU6JWQgcHJvdG9jb2w6JWQgcGxsX2xv Y2tlZDolc1xuIiwNCj4+ICsgICAgICAgICAgICAgICAgZ3RyX3BoeS0+bGFuZSwgZ3RyX3BoeS0+ dHlwZSwgZ3RyX3BoeS0+cHJvdG9jb2wsDQo+PiArICAgICAgICAgICAgICAgIGd0cl9waHktPnBs bF9sb2NrID8gInllcyIgOiAibm8iKTsNCj4+ICsgICAgICAgcmV0dXJuIHJldDsNCj4+ICt9DQo+ PiArRVhQT1JUX1NZTUJPTF9HUEwoeHBzZ3RyX3dhaXRfcGxsX2xvY2spOw0KPj4gKw0KPj4gKy8q Kg0KPj4gKyAqIHhwc2d0cl9zZXRfdHh3aWR0aCAtIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgdHgg YnVzIHdpZHRoIG9mIHRoZSBsYW5lDQo+PiArICogQGd0cl9waHk6IHBvaW50ZXIgdG8gbGFuZQ0K Pj4gKyAqIEB3aWR0aDogdHggYnVzIHdpZHRoIHNpemUNCj4+ICsgKg0KPj4gKyAqIFJldHVybjog Tm9uZQ0KPj4gKyAqLw0KPj4gK3N0YXRpYyB2b2lkIHhwc2d0cl9zZXRfdHh3aWR0aChzdHJ1Y3Qg eHBzZ3RyX3BoeSAqZ3RyX3BoeSwgdTMyIHdpZHRoKQ0KPj4gK3sNCj4+ICsgICAgICAgc3RydWN0 IHhwc2d0cl9kZXYgKmd0cl9kZXYgPSBndHJfcGh5LT5kYXRhOw0KPj4gKw0KPj4gKyAgICAgICB3 cml0ZWwoZ3RyX3BoeS0+bGFuZSAqIFBST1RfQlVTX1dJRFRIX1NISUZUID4+IHdpZHRoLA0KPj4g KyAgICAgICAgICAgICAgZ3RyX2Rldi0+c2VyZGVzICsgVFhfUFJPVF9CVVNfV0lEVEgpOw0KPj4g K30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiB4cHNndHJfc2V0X3J4d2lkdGggLSBUaGlzIGZ1bmN0 aW9uIHNldHMgdGhlIHJ4IGJ1cyB3aWR0aCBvZiB0aGUgbGFuZQ0KPj4gKyAqIEBndHJfcGh5OiBw b2ludGVyIHRvIGxhbmUNCj4+ICsgKiBAd2lkdGg6IHJ4IGJ1cyB3aWR0aCBzaXplDQo+PiArICoN Cj4+ICsgKiBSZXR1cm46IE5vbmUNCj4+ICsgKi8NCj4+ICtzdGF0aWMgdm9pZCB4cHNndHJfc2V0 X3J4d2lkdGgoc3RydWN0IHhwc2d0cl9waHkgKmd0cl9waHksIHUzMiB3aWR0aCkNCj4+ICt7DQo+ PiArICAgICAgIHN0cnVjdCB4cHNndHJfZGV2ICpndHJfZGV2ID0gZ3RyX3BoeS0+ZGF0YTsNCj4+ ICsNCj4+ICsgICAgICAgd3JpdGVsKGd0cl9waHktPmxhbmUgKiBQUk9UX0JVU19XSURUSF9TSElG VCA+PiB3aWR0aCwNCj4+ICsgICAgICAgICAgICAgIGd0cl9kZXYtPnNlcmRlcyArIFJYX1BST1Rf QlVTX1dJRFRIKTsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICogeHBzZ3RyX2J5cGFzc19z Y3JhbWVuYyAtIFRoaXMgYnlwYXNzZXMgc2NyYW1ibGVyIGFuZCA4Yi8xMGIgZW5jb2RlciBmZWF0 dXJlDQo+PiArICogQGd0cl9waHk6IHBvaW50ZXIgdG8gbGFuZQ0KPj4gKyAqDQo+PiArICogUmV0 dXJuOiBOb25lDQo+PiArICovDQo+PiArc3RhdGljIHZvaWQgeHBzZ3RyX2J5cGFzc19zY3JhbWVu YyhzdHJ1Y3QgeHBzZ3RyX3BoeSAqZ3RyX3BoeSkNCj4+ICt7DQo+PiArICAgICAgIHUzMiBvZmZz ZXQ7DQo+PiArICAgICAgIHN0cnVjdCB4cHNndHJfZGV2ICpndHJfZGV2ID0gZ3RyX3BoeS0+ZGF0 YTsNCj4+ICsNCj4+ICsgICAgICAgLyogYnlwYXNzIFNjcmFtYmxlciBhbmQgOGIvMTBiIEVuY29k ZXIgKi8NCj4+ICsgICAgICAgb2Zmc2V0ID0gZ3RyX3BoeS0+bGFuZSAqIEwwX1RYX0RJR182MV9P RkZTRVQgKyBMMF9UWF9ESUdfNjE7DQo+PiArICAgICAgIHdyaXRlbChMMF9UTV9ESVNBQkxFX1ND UkFNQkxFX0VOQ09ERVIsIGd0cl9kZXYtPnNlcmRlcyArIG9mZnNldCk7DQo+PiArfQ0KPj4gKw0K Pj4gKy8qKg0KPj4gKyAqIHhwc2d0cl9ieXBhc3NfZGVzY3JhbWRlYyAtIGJ5cGFzc2VzIGRlc2Ny YW1ibGVyIGFuZCA4Yi8xMGIgZW5jb2RlciBmZWF0dXJlDQo+PiArICogQGd0cl9waHk6IHBvaW50 ZXIgdG8gbGFuZQ0KPj4gKyAqDQo+PiArICogUmV0dXJuOiBOb25lDQo+PiArICovDQo+PiArc3Rh dGljIHZvaWQgeHBzZ3RyX2J5cGFzc19kZXNjcmFtZGVjKHN0cnVjdCB4cHNndHJfcGh5ICpndHJf cGh5KQ0KPj4gK3sNCj4+ICsgICAgICAgdTMyIG9mZnNldDsNCj4+ICsgICAgICAgc3RydWN0IHhw c2d0cl9kZXYgKmd0cl9kZXYgPSBndHJfcGh5LT5kYXRhOw0KPj4gKw0KPj4gKyAgICAgICAvKiBi eXBhc3MgRGVzY3JhbWJsZXIgYW5kIDhiLzEwYiBkZWNvZGVyICovDQo+PiArICAgICAgIG9mZnNl dCA9IGd0cl9waHktPmxhbmUgKiBMMF9UTV9ESUdfNl9PRkZTRVQgKyBMMF9UTV9ESUdfNjsNCj4+ ICsgICAgICAgd3JpdGVsKEwwX1RNX0RJU19ERVNDUkFNQkxFX0RFQ09ERVIsIGd0cl9kZXYtPnNl cmRlcyArIG9mZnNldCk7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIHhwc2d0cl9taXNj X3NnbWlpIC0gbWlzY2VsbGFuZW91cyBzZXR0aW5ncyBmb3IgU0dNSUkNCj4+ICsgKiBAZ3RyX3Bo eTogcG9pbnRlciB0byBsYW5lDQo+PiArICoNCj4+ICsgKiBSZXR1cm46IE5vbmUNCj4+ICsgKi8N Cj4+ICtzdGF0aWMgdm9pZCB4cHNndHJfbWlzY19zZ21paShzdHJ1Y3QgeHBzZ3RyX3BoeSAqZ3Ry X3BoeSkNCj4+ICt7DQo+PiArICAgICAgIC8qIFNldCBTR01JSSBwcm90b2NvbCB0eCBidXMgd2lk dGggMTAgYml0cyAqLw0KPj4gKyAgICAgICB4cHNndHJfc2V0X3R4d2lkdGgoZ3RyX3BoeSwgUFJP VF9CVVNfV0lEVEhfMTApOw0KPj4gKw0KPj4gKyAgICAgICAvKiBTZXQgU0dNSUkgcHJvdG9jb2wg cnggYnVzIHdpZHRoIDEwIGJpdHMgKi8NCj4+ICsgICAgICAgeHBzZ3RyX3NldF9yeHdpZHRoKGd0 cl9waHksIFBST1RfQlVTX1dJRFRIXzEwKTsNCj4+ICsNCj4+ICsgICAgICAgLyogYnlwYXNzIERl c2NyYW1ibGVyIGFuZCA4Yi8xMGIgZGVjb2RlciAqLw0KPj4gKyAgICAgICB4cHNndHJfYnlwYXNz X2Rlc2NyYW1kZWMoZ3RyX3BoeSk7DQo+PiArDQo+PiArICAgICAgIC8qIGJ5cGFzcyBTY3JhbWJs ZXIgYW5kIDhiLzEwYiBFbmNvZGVyICovDQo+PiArICAgICAgIHhwc2d0cl9ieXBhc3Nfc2NyYW1l bmMoZ3RyX3BoeSk7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIHhwc2d0cl9taXNjX3Nh dGEgLSBtaXNjZWxsYW5lb3VzIHNldHRpbmdzIGZvciBTQVRBDQo+PiArICogQGd0cl9waHk6IHBv aW50ZXIgdG8gbGFuZQ0KPj4gKyAqDQo+PiArICogUmV0dXJuOiBOb25lDQo+PiArICovDQo+PiAr c3RhdGljIHZvaWQgeHBzZ3RyX21pc2Nfc2F0YShzdHJ1Y3QgeHBzZ3RyX3BoeSAqZ3RyX3BoeSkN Cj4+ICt7DQo+PiArICAgICAgIHN0cnVjdCB4cHNndHJfZGV2ICpndHJfZGV2ID0gZ3RyX3BoeS0+ ZGF0YTsNCj4+ICsNCj4+ICsgICAgICAgLyogYnlwYXNzIERlc2NyYW1ibGVyIGFuZCA4Yi8xMGIg ZGVjb2RlciAqLw0KPj4gKyAgICAgICB4cHNndHJfYnlwYXNzX2Rlc2NyYW1kZWMoZ3RyX3BoeSk7 DQo+PiArDQo+PiArICAgICAgIC8qIGJ5cGFzcyBTY3JhbWJsZXIgYW5kIDhiLzEwYiBFbmNvZGVy ICovDQo+PiArICAgICAgIHhwc2d0cl9ieXBhc3Nfc2NyYW1lbmMoZ3RyX3BoeSk7DQo+PiArDQo+ PiArICAgICAgIHdyaXRlbChndHJfcGh5LT5sYW5lLCBndHJfZGV2LT5zaW91ICsgU0FUQV9DT05U Uk9MX09GRlNFVCk7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIHhwc2d0cl9waHlpbml0 X3JlcXVpcmVkIC0gY2hlY2sgaWYgcGh5X2luaXQgZm9yIHRoZSBsYW5lIGNhbiBiZSBza2lwcGVk DQo+PiArICogQGd0cl9waHk6IHBvaW50ZXIgdG8gdGhlIHBoeSBsYW5lDQo+PiArICoNCj4+ICsg KiBSZXR1cm46IHRydWUgaWYgcGh5X2luaXQgY2FuIGJlIHNraXBwZWQgb3IgZmFsc2UNCj4+ICsg Ki8NCj4+ICtzdGF0aWMgYm9vbCB4cHNndHJfcGh5aW5pdF9yZXF1aXJlZChzdHJ1Y3QgeHBzZ3Ry X3BoeSAqZ3RyX3BoeSkNCj4+ICt7DQo+PiArICAgICAgIC8qDQo+PiArICAgICAgICAqIEFzIFVT QiBtYXkgc2F2ZSB0aGUgc25hcHNob3Qgb2YgdGhlIHN0YXRlcyBkdXJpbmcgaGliZXJuYXRpb24s IGRvaW5nDQo+PiArICAgICAgICAqIHBoeV9pbml0KCkgd2lsbCBwdXQgdGhlIFVTQiBjb250cm9s bGVyIGludG8gcmVzZXQsIHJlc3VsdGluZyBpbiB0aGUNCj4+ICsgICAgICAgICogbG9zaW5nIG9m IHRoZSBzYXZlZCBzbmFwc2hvdC4gU28gdHJ5IHRvIGF2b2lkIHBoeV9pbml0KCkgZm9yIFVTQg0K Pj4gKyAgICAgICAgKiBleGNlcHQgd2hlbiBndHJfcGh5LT5za2lwX3BoeV9pbml0IGlzIGZhbHNl ICh0aGlzIGhhcHBlbnMgd2hlbiBGUEQgaXMNCj4+ICsgICAgICAgICogc2h1dGRvd24gZHVyaW5n IHN1c3BlbmQgb3Igd2hlbiBndCBsYW5lIGlzIGNoYW5nZWQgZnJvbSBjdXJyZW50IG9uZSkNCj4+ ICsgICAgICAgICovDQo+PiArICAgICAgIGlmIChndHJfcGh5LT5wcm90b2NvbCA9PSBJQ01fUFJP VE9DT0xfVVNCICYmIGd0cl9waHktPnNraXBfcGh5X2luaXQpDQo+PiArICAgICAgICAgICAgICAg cmV0dXJuIHRydWU7DQo+PiArICAgICAgIGVsc2UNCj4+ICsgICAgICAgICAgICAgICByZXR1cm4g ZmFsc2U7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIHhwc2d0cl9waHlfaW5pdCAtIGlu aXRpYWxpemVzIGEgbGFuZQ0KPj4gKyAqIEBwaHk6IHBvaW50ZXIgdG8ga2VybmVsIFBIWSBkZXZp Y2UNCj4+ICsgKg0KPj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGVycm9yIG9uIGZhaWx1 cmUNCj4+ICsgKi8NCj4+ICtzdGF0aWMgaW50IHhwc2d0cl9waHlfaW5pdChzdHJ1Y3QgcGh5ICpw aHkpDQo+PiArew0KPj4gKyAgICAgICBzdHJ1Y3QgeHBzZ3RyX3BoeSAqZ3RyX3BoeSA9IHBoeV9n ZXRfZHJ2ZGF0YShwaHkpOw0KPj4gKyAgICAgICBzdHJ1Y3QgeHBzZ3RyX2RldiAqZ3RyX2RldiA9 IGd0cl9waHktPmRhdGE7DQo+PiArICAgICAgIGludCByZXQgPSAwOw0KPj4gKyAgICAgICB1MzIg b2Zmc2V0Ow0KPj4gKyAgICAgICB1MzIgcmVnOw0KPj4gKyAgICAgICB1MzIgbnN3Ow0KPj4gKyAg ICAgICB1MzIgdGltZW91dCA9IFRJTUVPVVRfVVM7DQo+PiArDQo+PiArICAgICAgIG11dGV4X2xv Y2soJmd0cl9kZXYtPmd0cl9tdXRleCk7DQo+PiArDQo+PiArICAgICAgIC8qIENoZWNrIGlmIHBo eV9pbml0KCkgaXMgcmVxdWlyZWQgICovDQo+PiArICAgICAgIGlmICh4cHNndHJfcGh5aW5pdF9y ZXF1aXJlZChndHJfcGh5KSkNCj4+ICsgICAgICAgICAgICAgICBnb3RvIG91dDsNCj4+ICsNCj4+ ICsgICAgICAgLyogUHV0IGNvbnRyb2xsZXIgaW4gcmVzZXQgKi8NCj4+ICsgICAgICAgcmV0ID0g eHBzZ3RyX2NvbnRyb2xsZXJfcmVzZXQoZ3RyX3BoeSk7DQo+PiArICAgICAgIGlmIChyZXQgIT0g MCkgew0KPj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoZ3RyX2Rldi0+ZGV2LCAiRmFpbGVkIHRv IGFzc2VydCByZXNldFxuIik7DQo+PiArICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+PiArICAg ICAgIH0NCj4+ICsNCj4+ICsgICAgICAgLyoNCj4+ICsgICAgICAgICogVGhlcmUgaXMgYSBmdW5j dGlvbmFsIGlzc3VlIGluIHRoZSBHVC4gVGhlIFRYIHRlcm1pbmF0aW9uIHJlc2lzdGFuY2UNCj4+ ICsgICAgICAgICogY2FuIGJlIG91dCBvZiBzcGVjIGR1ZSB0byBhIGlzc3VlIGluIHRoZSBjYWxp YnJhdGlvbiBsb2dpYy4gQmVsb3cgaXMNCj4+ICsgICAgICAgICogdGhlIHdvcmthcm91bmQgdG8g Zml4IGl0LiBUaGlzIGJlbG93IGlzIHJlcXVpcmVkIGZvciBYQ1pVOUVHIHNpbGljb24uDQo+PiAr ICAgICAgICAqLw0KPj4gKyAgICAgICBpZiAoZ3RyX2Rldi0+dHhfdGVybV9maXgpIHsNCj4+ICsg ICAgICAgICAgICAgICAvKiBFbmFibGluZyBUZXN0IE1vZGUgY29udHJvbCBmb3IgQ01OIFJlc3Qg Ki8NCj4+ICsgICAgICAgICAgICAgICByZWcgPSByZWFkbChndHJfZGV2LT5zZXJkZXMgKyBUTV9D TU5fUlNUKTsNCj4+ICsgICAgICAgICAgICAgICByZWcgPSAocmVnICYgflRNX0NNTl9SU1RfTUFT SykgfCBUTV9DTU5fUlNUX1NFVDsNCj4+ICsgICAgICAgICAgICAgICB3cml0ZWwocmVnLCBndHJf ZGV2LT5zZXJkZXMgKyBUTV9DTU5fUlNUKTsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICAvKiBT ZXQgVGVzdCBNb2RlIHJlc2V0ICovDQo+PiArICAgICAgICAgICAgICAgcmVnID0gcmVhZGwoZ3Ry X2Rldi0+c2VyZGVzICsgVE1fQ01OX1JTVCk7DQo+PiArICAgICAgICAgICAgICAgcmVnID0gKHJl ZyAmIH5UTV9DTU5fUlNUX01BU0spIHwgVE1fQ01OX1JTVF9FTjsNCj4+ICsgICAgICAgICAgICAg ICB3cml0ZWwocmVnLCBndHJfZGV2LT5zZXJkZXMgKyBUTV9DTU5fUlNUKTsNCj4+ICsNCj4+ICsg ICAgICAgICAgICAgICB3cml0ZWwoMHgwMCwgZ3RyX2Rldi0+c2VyZGVzICsgTDNfVE1fQ0FMSUJf RElHMTgpOw0KPj4gKyAgICAgICAgICAgICAgIHdyaXRlbChMM19UTV9PVkVSUklERV9OU1dfQ09E RSwgZ3RyX2Rldi0+c2VyZGVzICsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TDNfVE1fQ0FMSUJfRElHMTkpOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIC8qIEFzIGEgcGFy dCBvZiB3b3JrIGFyb3VuZCBzZXF1ZW5jZSBmb3IgUE1PUyBjYWxpYnJhdGlvbiBmaXgsDQo+PiAr ICAgICAgICAgICAgICAgICogd2UgbmVlZCB0byBjb25maWd1cmUgYW55IGxhbmUgSUNNX0NGRyB0 byB2YWxpZCBwcm90b2NvbC4gVGhpcw0KPj4gKyAgICAgICAgICAgICAgICAqIHdpbGwgZGVhc3Nl cnQgdGhlIENNTl9SZXNldG4gc2lnbmFsLg0KPj4gKyAgICAgICAgICAgICAgICAqLw0KPj4gKyAg ICAgICAgICAgICAgIHhwc2d0cl9sYW5lX3NldHByb3RvY29sKGd0cl9waHkpOw0KPj4gKw0KPj4g KyAgICAgICAgICAgICAgIC8qIENsZWFyIFRlc3QgTW9kZSByZXNldCAqLw0KPj4gKyAgICAgICAg ICAgICAgIHJlZyA9IHJlYWRsKGd0cl9kZXYtPnNlcmRlcyArIFRNX0NNTl9SU1QpOw0KPj4gKyAg ICAgICAgICAgICAgIHJlZyA9IChyZWcgJiB+VE1fQ01OX1JTVF9NQVNLKSB8IFRNX0NNTl9SU1Rf U0VUOw0KPj4gKyAgICAgICAgICAgICAgIHdyaXRlbChyZWcsIGd0cl9kZXYtPnNlcmRlcyArIFRN X0NNTl9SU1QpOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIGRldl9kYmcoZ3RyX2Rldi0+ZGV2 LCAiY2FsaWJyYXRpbmcuLi5cbiIpOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIGRvIHsNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IHJlYWRsKGd0cl9kZXYtPnNlcmRlcyArIEwz X0NBTElCX0RPTkVfU1RBVFVTKTsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmVn ICYgTDNfQ0FMSUJfRE9ORSkgPT0gTDNfQ0FMSUJfRE9ORSkNCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIS0tdGltZW91dCkgew0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZf ZXJyKGd0cl9kZXYtPmRldiwgImNhbGlicmF0aW9uIHRpbWUgb3V0XG4iKTsNCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVUSU1FRE9VVDsNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+PiArICAgICAgICAgICAgICAgICAgICAg ICB9DQo+PiArICAgICAgICAgICAgICAgICAgICAgICB1ZGVsYXkoMSk7DQo+PiArICAgICAgICAg ICAgICAgfSB3aGlsZSAodGltZW91dCA+IDApOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIGRl dl9kYmcoZ3RyX2Rldi0+ZGV2LCAiY2FsaWJyYXRpb24gZG9uZVxuIik7DQo+PiArDQo+PiArICAg ICAgICAgICAgICAgLyogUmVhZGluZyBOTU9TIFJlZ2lzdGVyIENvZGUgKi8NCj4+ICsgICAgICAg ICAgICAgICBuc3cgPSByZWFkbChndHJfZGV2LT5zZXJkZXMgKyBMMF9UWFBNQV9TVF8zKTsNCj4+ ICsNCj4+ICsgICAgICAgICAgICAgICAvKiBTZXQgVGVzdCBNb2RlIHJlc2V0ICovDQo+PiArICAg ICAgICAgICAgICAgcmVnID0gcmVhZGwoZ3RyX2Rldi0+c2VyZGVzICsgVE1fQ01OX1JTVCk7DQo+ PiArICAgICAgICAgICAgICAgcmVnID0gKHJlZyAmIH5UTV9DTU5fUlNUX01BU0spIHwgVE1fQ01O X1JTVF9FTjsNCj4+ICsgICAgICAgICAgICAgICB3cml0ZWwocmVnLCBndHJfZGV2LT5zZXJkZXMg KyBUTV9DTU5fUlNUKTsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICBuc3cgPSBuc3cgJiBMMF9E Tl9DQUxJQl9DT0RFOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIC8qIFdyaXRpbmcgTk1PUyBy ZWdpc3RlciB2YWx1ZXMgYmFjayBbNTozXSAqLw0KPj4gKyAgICAgICAgICAgICAgIHJlZyA9IG5z dyA+PiBMM19OU1dfQ0FMSUJfU0hJRlQ7DQo+PiArICAgICAgICAgICAgICAgd3JpdGVsKHJlZywg Z3RyX2Rldi0+c2VyZGVzICsgTDNfVE1fQ0FMSUJfRElHMTkpOw0KPj4gKw0KPj4gKyAgICAgICAg ICAgICAgIC8qIFdyaXRpbmcgTk1PUyByZWdpc3RlciB2YWx1ZSBbMjowXSAqLw0KPj4gKyAgICAg ICAgICAgICAgIHJlZyA9ICgobnN3ICYgTDNfVE1fQ0FMSUJfRElHMTlfTlNXKSA8PCBMM19OU1df U0hJRlQpIHwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgxIDw8IEwzX05TV19QSVBFX1NISUZUKTsNCj4+ICsgICAgICAgICAgICAgICB3cml0ZWwo cmVnLCBndHJfZGV2LT5zZXJkZXMgKyBMM19UTV9DQUxJQl9ESUcxOCk7DQo+PiArDQo+PiArICAg ICAgICAgICAgICAgLyogQ2xlYXIgVGVzdCBNb2RlIHJlc2V0ICovDQo+PiArICAgICAgICAgICAg ICAgcmVnID0gcmVhZGwoZ3RyX2Rldi0+c2VyZGVzICsgVE1fQ01OX1JTVCk7DQo+PiArICAgICAg ICAgICAgICAgcmVnID0gKHJlZyAmIH5UTV9DTU5fUlNUX01BU0spIHwgVE1fQ01OX1JTVF9TRVQ7 DQo+PiArICAgICAgICAgICAgICAgd3JpdGVsKHJlZywgZ3RyX2Rldi0+c2VyZGVzICsgVE1fQ01O X1JTVCk7DQo+PiArDQo+PiArICAgICAgICAgICAgICAgZ3RyX2Rldi0+dHhfdGVybV9maXggPSBm YWxzZTsNCj4+ICsgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICAvKiBFbmFibGUgY29hcnNlIGNv ZGUgc2F0dXJhdGlvbiBsaW1pdGluZyBsb2dpYyAqLw0KPj4gKyAgICAgICBvZmZzZXQgPSBndHJf cGh5LT5sYW5lICogTDBfVE1fUExMX0RJR18zN19PRkZTRVQgKyBMMF9UTV9QTExfRElHXzM3Ow0K Pj4gKyAgICAgICB3cml0ZWwoTDBfVE1fQ09BUlNFX0NPREVfTElNSVQsIGd0cl9kZXYtPnNlcmRl cyArIG9mZnNldCk7DQo+PiArDQo+PiArICAgICAgIHhwc2d0cl9jb25maWd1cmVfcGxsKGd0cl9w aHkpOw0KPj4gKyAgICAgICB4cHNndHJfbGFuZV9zZXRwcm90b2NvbChndHJfcGh5KTsNCj4+ICsN Cj4+ICsgICAgICAgaWYgKGd0cl9waHktPnByb3RvY29sID09IElDTV9QUk9UT0NPTF9TQVRBKQ0K Pj4gKyAgICAgICAgICAgICAgIHhwc2d0cl9taXNjX3NhdGEoZ3RyX3BoeSk7DQo+PiArDQo+PiAr ICAgICAgIGlmIChndHJfcGh5LT5wcm90b2NvbCA9PSBJQ01fUFJPVE9DT0xfU0dNSUkpDQo+PiAr ICAgICAgICAgICAgICAgeHBzZ3RyX21pc2Nfc2dtaWkoZ3RyX3BoeSk7DQo+PiArDQo+PiArICAg ICAgIC8qIEJyaW5nIGNvbnRyb2xsZXIgb3V0IG9mIHJlc2V0ICovDQo+PiArICAgICAgIHJldCA9 IHhwc2d0cl9jb250cm9sbGVyX3JlbGVhc2VfcmVzZXQoZ3RyX3BoeSk7DQo+PiArICAgICAgIGlm IChyZXQgIT0gMCkgew0KPj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoZ3RyX2Rldi0+ZGV2LCAi RmFpbGVkIHRvIHJlbGVhc2UgcmVzZXRcbiIpOw0KPj4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0 Ow0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIC8qIFdhaXQgdGlsbCBwbGwgaXMgbG9j a2VkIGZvciBhbGwgcHJvdG9jb2xzIGV4Y2VwdCBEUC4gRm9yIERQDQo+PiArICAgICAgICAqIHBs bCBsb2NraW5nIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGZyb20gZHJpdmVyLg0KPj4gKyAgICAg ICAgKi8NCj4+ICsgICAgICAgaWYgKGd0cl9waHktPnByb3RvY29sICE9IElDTV9QUk9UT0NPTF9E UCkgew0KPj4gKyAgICAgICAgICAgICAgIHJldCA9IHhwc2d0cl93YWl0X3BsbF9sb2NrKHBoeSk7 DQo+PiArICAgICAgICAgICAgICAgaWYgKHJldCAhPSAwKQ0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgZ290byBvdXQ7DQo+PiArICAgICAgIH0gZWxzZSB7DQo+PiArICAgICAgICAgICAgICAg b2Zmc2V0ID0gZ3RyX3BoeS0+bGFuZSAqIEwwX1RYUE1EX1RNXzQ1X09GRlNFVCArIEwwX1RYUE1E X1RNXzQ1Ow0KPj4gKyAgICAgICAgICAgICAgIHJlZyA9IEwwX1RYUE1EX1RNXzQ1X09WRVJfRFBf TUFJTiB8DQo+PiArICAgICAgICAgICAgICAgICAgICAgTDBfVFhQTURfVE1fNDVfRU5BQkxFX0RQ X01BSU4gfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgIEwwX1RYUE1EX1RNXzQ1X09WRVJfRFBf UE9TVDEgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgIEwwX1RYUE1EX1RNXzQ1X09WRVJfRFBf UE9TVDIgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgIEwwX1RYUE1EX1RNXzQ1X0VOQUJMRV9E UF9QT1NUMjsNCj4+ICsgICAgICAgICAgICAgICB3cml0ZWwocmVnLCBndHJfZGV2LT5zZXJkZXMg KyBvZmZzZXQpOw0KPj4gKyAgICAgICAgICAgICAgIG9mZnNldCA9IGd0cl9waHktPmxhbmUgKiBM MF9UWF9BTkFfVE1fMTE4X09GRlNFVCArDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgTDBf VFhfQU5BX1RNXzExODsNCj4+ICsgICAgICAgICAgICAgICB3cml0ZWwoTDBfVFhfQU5BX1RNXzEx OF9GT1JDRV8xN18wLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICBndHJfZGV2LT5zZXJkZXMg KyBvZmZzZXQpOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArb3V0Og0KPj4gKyAgICAgICBtdXRl eF91bmxvY2soJmd0cl9kZXYtPmd0cl9tdXRleCk7DQo+PiArICAgICAgIHJldHVybiByZXQ7DQo+ PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIHhwc2d0cl9zZXRfbGFuZXR5cGUgLSBkZXJpdmVz IGxhbmUgdHlwZSBmcm9tIGR0cyBhcmd1bWVudHMNCj4+ICsgKiBAZ3RyX3BoeTogcG9pbnRlciB0 byBsYW5lDQo+PiArICogQGNvbnRyb2xsZXI6IHR5cGUgb2YgY29udHJvbGxlcg0KPj4gKyAqIEBp bnN0YW5jZV9udW06IGluc3RhbmNlIG51bWJlciBvZiB0aGUgY29udHJvbGxlciBpbiBjYXNlIG11 bHRpbGFuZSBjb250cm9sbGVyDQo+PiArICoNCj4+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBv ciBlcnJvciBvbiBmYWlsdXJlDQo+PiArICovDQo+PiArc3RhdGljIGludCB4cHNndHJfc2V0X2xh bmV0eXBlKHN0cnVjdCB4cHNndHJfcGh5ICpndHJfcGh5LCB1OCBjb250cm9sbGVyLA0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGluc3RhbmNlX251bSkNCj4+ICt7DQo+PiAr ICAgICAgIHN3aXRjaCAoY29udHJvbGxlcikgew0KPj4gKyAgICAgICBjYXNlIFBIWV9UWVBFX1NB VEE6DQo+PiArICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZV9udW0pDQo+PiArICAgICAgICAg ICAgICAgICAgICAgICBndHJfcGh5LT50eXBlID0gWFBTR1RSX1RZUEVfU0FUQV8wOw0KPj4gKyAg ICAgICAgICAgICAgIGVsc2UgaWYgKGluc3RhbmNlX251bSA9PSAxKQ0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgZ3RyX3BoeS0+dHlwZSA9IFhQU0dUUl9UWVBFX1NBVEFfMTsNCj4+ICsgICAg ICAgICAgICAgICBlbHNlDQo+PiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZB TDsNCj4+ICsgICAgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAgY2FzZSBQSFlfVFlQRV9V U0IzOg0KPj4gKyAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2VfbnVtKQ0KPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgZ3RyX3BoeS0+dHlwZSA9IFhQU0dUUl9UWVBFX1VTQjA7DQo+PiArICAg ICAgICAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2VfbnVtID09IDEpDQo+PiArICAgICAgICAgICAg ICAgICAgICAgICBndHJfcGh5LT50eXBlID0gWFBTR1RSX1RZUEVfVVNCMTsNCj4+ICsgICAgICAg ICAgICAgICBlbHNlDQo+PiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsN Cj4+ICsgICAgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAgY2FzZSBQSFlfVFlQRV9EUDoN Cj4+ICsgICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlX251bSkNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIGd0cl9waHktPnR5cGUgPSBYUFNHVFJfVFlQRV9EUF8wOw0KPj4gKyAgICAgICAg ICAgICAgIGVsc2UgaWYgKGluc3RhbmNlX251bSA9PSAxKQ0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgZ3RyX3BoeS0+dHlwZSA9IFhQU0dUUl9UWVBFX0RQXzE7DQo+PiArICAgICAgICAgICAg ICAgZWxzZQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+PiAr ICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgIGNhc2UgUEhZX1RZUEVfUENJRToNCj4+ ICsgICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlX251bSkNCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgIGd0cl9waHktPnR5cGUgPSBYUFNHVFJfVFlQRV9QQ0lFXzA7DQo+PiArICAgICAgICAg ICAgICAgZWxzZSBpZiAoaW5zdGFuY2VfbnVtID09IDEpDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICBndHJfcGh5LT50eXBlID0gWFBTR1RSX1RZUEVfUENJRV8xOw0KPj4gKyAgICAgICAgICAg ICAgIGVsc2UgaWYgKGluc3RhbmNlX251bSA9PSAyKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgZ3RyX3BoeS0+dHlwZSA9IFhQU0dUUl9UWVBFX1BDSUVfMjsNCj4+ICsgICAgICAgICAgICAg ICBlbHNlIGlmIChpbnN0YW5jZV9udW0gPT0gMykNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg IGd0cl9waHktPnR5cGUgPSBYUFNHVFJfVFlQRV9QQ0lFXzM7DQo+PiArICAgICAgICAgICAgICAg ZWxzZQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+PiArICAg ICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgIGNhc2UgUEhZX1RZUEVfU0dNSUk6DQo+PiAr ICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZV9udW0pDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICBndHJfcGh5LT50eXBlID0gWFBTR1RSX1RZUEVfU0dNSUkwOw0KPj4gKyAgICAgICAgICAg ICAgIGVsc2UgaWYgKGluc3RhbmNlX251bSA9PSAxKQ0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgZ3RyX3BoeS0+dHlwZSA9IFhQU0dUUl9UWVBFX1NHTUlJMTsNCj4+ICsgICAgICAgICAgICAg ICBlbHNlIGlmIChpbnN0YW5jZV9udW0gPT0gMikNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg IGd0cl9waHktPnR5cGUgPSBYUFNHVFJfVFlQRV9TR01JSTI7DQo+PiArICAgICAgICAgICAgICAg ZWxzZSBpZiAoaW5zdGFuY2VfbnVtID09IDMpDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBn dHJfcGh5LT50eXBlID0gWFBTR1RSX1RZUEVfU0dNSUkzOw0KPj4gKyAgICAgICAgICAgICAgIGVs c2UNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPj4gKyAgICAg ICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICBkZWZhdWx0Og0KPj4gKyAgICAgICAgICAgICAg IHJldHVybiAtRUlOVkFMOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIHJldHVybiAw Ow0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiB4cHNndHJfeGxhdGUgLSBwcm92aWRlcyBh IFBIWSBzcGVjaWZpYyB0byBhIGNvbnRyb2xsZXINCj4+ICsgKiBAZGV2OiBwb2ludGVyIHRvIGRl dmljZQ0KPj4gKyAqIEBhcmdzOiBhcmd1bWVudHMgZnJvbSBkdHMNCj4+ICsgKg0KPj4gKyAqIFJl dHVybjogcG9pbnRlciB0byBrZXJuZWwgUEhZIGRldmljZSBvciBlcnJvciBvbiBmYWlsdXJlDQo+ PiArICovDQo+PiArc3RhdGljIHN0cnVjdCBwaHkgKnhwc2d0cl94bGF0ZShzdHJ1Y3QgZGV2aWNl ICpkZXYsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBvZl9waGFu ZGxlX2FyZ3MgKmFyZ3MpDQo+PiArew0KPj4gKyAgICAgICBzdHJ1Y3QgeHBzZ3RyX2RldiAqZ3Ry X2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPj4gKyAgICAgICBzdHJ1Y3QgeHBzZ3RyX3Bo eSAqZ3RyX3BoeSA9IE5VTEw7DQo+PiArICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5bm9k ZSA9IGFyZ3MtPm5wOw0KPj4gKyAgICAgICBpbnQgaW5kZXg7DQo+PiArICAgICAgIGludCBpOw0K Pj4gKyAgICAgICB1OCBjb250cm9sbGVyOw0KPj4gKyAgICAgICB1OCBpbnN0YW5jZV9udW07DQo+ PiArDQo+PiArICAgICAgIGlmIChhcmdzLT5hcmdzX2NvdW50ICE9IDQpIHsNCj4+ICsgICAgICAg ICAgICAgICBkZXZfZXJyKGRldiwgIkludmFsaWQgbnVtYmVyIG9mIGNlbGxzIGluICdwaHknIHBy b3BlcnR5XG4iKTsNCj4+ICsgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsN Cj4+ICsgICAgICAgfQ0KPj4gKyAgICAgICBpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocGh5 bm9kZSkpIHsNCj4+ICsgICAgICAgICAgICAgICBkZXZfd2FybihkZXYsICJyZXF1ZXN0ZWQgUEhZ IGlzIGRpc2FibGVkXG4iKTsNCj4+ICsgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5P REVWKTsNCj4+ICsgICAgICAgfQ0KPj4gKyAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBv Zl9nZXRfY2hpbGRfY291bnQoZGV2LT5vZl9ub2RlKTsgaW5kZXgrKykgew0KPj4gKyAgICAgICAg ICAgICAgIGlmIChwaHlub2RlID09IGd0cl9kZXYtPnBoeXNbaW5kZXhdLT5waHktPmRldi5vZl9u b2RlKSB7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICBndHJfcGh5ID0gZ3RyX2Rldi0+cGh5 c1tpbmRleF07DQo+PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAg ICAgICAgICB9DQo+PiArICAgICAgIH0NCj4+ICsgICAgICAgaWYgKCFndHJfcGh5KSB7DQo+PiAr ICAgICAgICAgICAgICAgZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZmluZCBhcHByb3ByaWF0ZSBw aHlcbiIpOw0KPj4gKyAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FSU5WQUwpOw0KPj4g KyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIC8qIGdldCB0eXBlIG9mIGNvbnRyb2xsZXIgZnJv bSBwaHlzICovDQo+PiArICAgICAgIGNvbnRyb2xsZXIgPSBhcmdzLT5hcmdzWzBdOw0KPj4gKw0K Pj4gKyAgICAgICAvKiBnZXQgY29udHJvbGxlciBpbnN0YW5jZSBudW1iZXIgKi8NCj4+ICsgICAg ICAgaW5zdGFuY2VfbnVtID0gYXJncy0+YXJnc1sxXTsNCj4+ICsNCj4+ICsgICAgICAgLyogQ2hl Y2sgaWYgbGFuZSBzaGFyaW5nIGlzIHJlcXVpcmVkICovDQo+PiArICAgICAgIGd0cl9waHktPnNo YXJlX2xhbmVjbGsgPSBhcmdzLT5hcmdzWzJdOw0KPj4gKw0KPj4gKyAgICAgICAvKiBnZXQgdGhl IHJlcXVpcmVkIGNsayByYXRlIGZvciBjb250cm9sbGVyIGZyb20gcGh5cyAqLw0KPj4gKyAgICAg ICBndHJfcGh5LT5yZWZjbGtfcmF0ZSA9IGFyZ3MtPmFyZ3NbM107DQo+PiArDQo+PiArICAgICAg IC8qIGRlcml2ZSBsYW5lIHR5cGUgKi8NCj4+ICsgICAgICAgaWYgKHhwc2d0cl9zZXRfbGFuZXR5 cGUoZ3RyX3BoeSwgY29udHJvbGxlciwgaW5zdGFuY2VfbnVtKSA8IDApIHsNCj4+ICsgICAgICAg ICAgICAgICBkZXZfZXJyKGd0cl9kZXYtPmRldiwgIkludmFsaWQgbGFuZSB0eXBlXG4iKTsNCj4+ ICsgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsNCj4+ICsgICAgICAgfQ0K Pj4gKw0KPj4gKyAgICAgICAvKiBjb25maWd1cmVzIFNTQyBzZXR0aW5ncyBmb3IgYSBsYW5lICov DQo+PiArICAgICAgIGlmICh4cHNndHJfY29uZmlndXJlX2xhbmUoZ3RyX3BoeSkgPCAwKSB7DQo+ PiArICAgICAgICAgICAgICAgZGV2X2VycihndHJfZGV2LT5kZXYsICJJbnZhbGlkIGNsb2NrIHJh dGU6ICVkXG4iLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ3RyX3BoeS0+cmVmY2xrX3Jh dGUpOw0KPj4gKyAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FSU5WQUwpOw0KPj4gKyAg ICAgICB9DQo+PiArDQo+PiArICAgICAgIC8qDQo+PiArICAgICAgICAqIENoZWNrIEludGVyY29u bmVjdCBNYXRyaXggaXMgb2JleWVkIGkuZSwgZ2l2ZW4gbGFuZSB0eXBlDQo+PiArICAgICAgICAq IGlzIGFsbG93ZWQgdG8gb3BlcmF0ZSBvbiB0aGUgbGFuZS4NCj4+ICsgICAgICAgICovDQo+PiAr ICAgICAgIGZvciAoaSA9IDA7IGkgPCBDT05UUk9MTEVSU19QRVJfTEFORTsgaSsrKSB7DQo+PiAr ICAgICAgICAgICAgICAgaWYgKGljbV9tYXRyaXhbaW5kZXhdW2ldID09IGd0cl9waHktPnR5cGUp DQo+PiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3RyX3BoeS0+cGh5Ow0KPj4gKyAg ICAgICB9DQo+PiArDQo+PiArICAgICAgIC8qIFNob3VsZCBub3QgcmVhY2ggaGVyZSAqLw0KPj4g KyAgICAgICByZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+ PiArICogeHBzZ3RyX3BoeV9leGl0IC0gY2xlYXJzIHByZXZpb3VzIGluaXRpYWxpemVkIHZhcmlh Ymxlcw0KPj4gKyAqIEBwaHk6IHBvaW50ZXIgdG8ga2VybmVsIFBIWSBkZXZpY2UNCj4+ICsgKg0K Pj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGVycm9yIHZhbHVlIG9uIGZhaWx1cmUNCj4+ ICsgKi8NCj4+ICtzdGF0aWMgaW50IHhwc2d0cl9waHlfZXhpdChzdHJ1Y3QgcGh5ICpwaHkpDQo+ PiArew0KPj4gKyAgICAgICBzdHJ1Y3QgeHBzZ3RyX3BoeSAqZ3RyX3BoeSA9IHBoeV9nZXRfZHJ2 ZGF0YShwaHkpOw0KPj4gKw0KPj4gKyAgICAgICBpZiAoIWd0cl9waHkpDQo+PiArICAgICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+PiArDQo+PiArICAgICAgIC8qIEFzIHdlIGFyZSBleGl0 aW5nLCBjbGVhciBza2lwX3BoeV9pbml0IGZsYWcgKi8NCj4+ICsgICAgICAgZ3RyX3BoeS0+c2tp cF9waHlfaW5pdCA9IGZhbHNlOw0KPj4gKw0KPj4gKyAgICAgICByZXR1cm4gMDsNCj4+ICt9DQo+ PiArDQo+PiArc3RhdGljIHN0cnVjdCBwaHlfb3BzIHhwc2d0cl9waHlvcHMgPSB7DQo+PiArICAg ICAgIC5pbml0ICAgICAgICAgICA9IHhwc2d0cl9waHlfaW5pdCwNCj4+ICsgICAgICAgLmV4aXQg ICAgICAgICAgID0geHBzZ3RyX3BoeV9leGl0LA0KPj4gKyAgICAgICAub3duZXIgICAgICAgICAg PSBUSElTX01PRFVMRSwNCj4+ICt9Ow0KPj4gKw0KPj4gKy8qDQo+PiArICogeHBzZ3RyX2dldF9y ZXNldHMgLSBHZXRzIHJlc2V0IHNpZ25hbHMgYmFzZWQgb24gcmVzZXQtbmFtZXMgcHJvcGVydHkN Cj4+ICsgKiBAZ3RyX2RldjogcG9pbnRlciB0byBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHJlc2V0 IGluZm9ybWF0aW9uDQo+PiArICoNCj4+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBlcnJv ciB2YWx1ZSBvbiBmYWlsdXJlDQo+PiArICovDQo+PiArc3RhdGljIGludCB4cHNndHJfZ2V0X3Jl c2V0cyhzdHJ1Y3QgeHBzZ3RyX2RldiAqZ3RyX2RldikNCj4+ICt7DQo+PiArICAgICAgIGNoYXIg Km5hbWU7DQo+PiArICAgICAgIHN0cnVjdCByZXNldF9jb250cm9sICpyc3RfdGVtcDsNCj4+ICsN Cj4+ICsgICAgICAgZ3RyX2Rldi0+c2F0YV9yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KGd0 cl9kZXYtPmRldiwgInNhdGFfcnN0Iik7DQo+PiArICAgICAgIGlmIChJU19FUlIoZ3RyX2Rldi0+ c2F0YV9yc3QpKSB7DQo+PiArICAgICAgICAgICAgICAgbmFtZSA9ICJzYXRhX3JzdCI7DQo+PiAr ICAgICAgICAgICAgICAgcnN0X3RlbXAgPSBndHJfZGV2LT5zYXRhX3JzdDsNCj4+ICsgICAgICAg ICAgICAgICBnb3RvIGVycm9yOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIGd0cl9k ZXYtPmRwX3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZ3RyX2Rldi0+ZGV2LCAiZHBfcnN0 Iik7DQo+PiArICAgICAgIGlmIChJU19FUlIoZ3RyX2Rldi0+ZHBfcnN0KSkgew0KPj4gKyAgICAg ICAgICAgICAgIG5hbWUgPSAiZHBfcnN0IjsNCj4+ICsgICAgICAgICAgICAgICByc3RfdGVtcCA9 IGd0cl9kZXYtPmRwX3JzdDsNCj4+ICsgICAgICAgICAgICAgICBnb3RvIGVycm9yOw0KPj4gKyAg ICAgICB9DQo+PiArDQo+PiArICAgICAgIGd0cl9kZXYtPnVzYjBfY3JzdCA9IGRldm1fcmVzZXRf Y29udHJvbF9nZXQoZ3RyX2Rldi0+ZGV2LCAidXNiMF9jcnN0Iik7DQo+PiArICAgICAgIGlmIChJ U19FUlIoZ3RyX2Rldi0+dXNiMF9jcnN0KSkgew0KPj4gKyAgICAgICAgICAgICAgIG5hbWUgPSAi dXNiMF9jcnN0IjsNCj4+ICsgICAgICAgICAgICAgICByc3RfdGVtcCA9IGd0cl9kZXYtPnVzYjBf Y3JzdDsNCj4+ICsgICAgICAgICAgICAgICBnb3RvIGVycm9yOw0KPj4gKyAgICAgICB9DQo+PiAr DQo+PiArICAgICAgIGd0cl9kZXYtPnVzYjFfY3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQo Z3RyX2Rldi0+ZGV2LCAidXNiMV9jcnN0Iik7DQo+PiArICAgICAgIGlmIChJU19FUlIoZ3RyX2Rl di0+dXNiMV9jcnN0KSkgew0KPj4gKyAgICAgICAgICAgICAgIG5hbWUgPSAidXNiMV9jcnN0IjsN Cj4+ICsgICAgICAgICAgICAgICByc3RfdGVtcCA9IGd0cl9kZXYtPnVzYjFfY3JzdDsNCj4+ICsg ICAgICAgICAgICAgICBnb3RvIGVycm9yOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAg IGd0cl9kZXYtPnVzYjBfaGlicnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldChndHJfZGV2LT5k ZXYsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAidXNiMF9oaWJyc3QiKTsNCj4+ICsgICAgICAgaWYgKElTX0VSUihndHJfZGV2LT51c2Iw X2hpYnJzdCkpIHsNCj4+ICsgICAgICAgICAgICAgICBuYW1lID0gInVzYjBfaGlicnN0IjsNCj4+ ICsgICAgICAgICAgICAgICByc3RfdGVtcCA9IGd0cl9kZXYtPnVzYjBfaGlicnN0Ow0KPj4gKyAg ICAgICAgICAgICAgIGdvdG8gZXJyb3I7DQo+PiArICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAg Z3RyX2Rldi0+dXNiMV9oaWJyc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KGd0cl9kZXYtPmRl diwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJ1c2IxX2hpYnJzdCIpOw0KPj4gKyAgICAgICBpZiAoSVNfRVJSKGd0cl9kZXYtPnVzYjFf aGlicnN0KSkgew0KPj4gKyAgICAgICAgICAgICAgIG5hbWUgPSAidXNiMV9oaWJyc3QiOw0KPj4g KyAgICAgICAgICAgICAgIHJzdF90ZW1wID0gZ3RyX2Rldi0+dXNiMV9oaWJyc3Q7DQo+PiArICAg ICAgICAgICAgICAgZ290byBlcnJvcjsNCj4+ICsgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICBn dHJfZGV2LT51c2IwX2FwYnJzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZ3RyX2Rldi0+ZGV2 LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgInVzYjBfYXBicnN0Iik7DQo+PiArICAgICAgIGlmIChJU19FUlIoZ3RyX2Rldi0+dXNiMF9h cGJyc3QpKSB7DQo+PiArICAgICAgICAgICAgICAgbmFtZSA9ICJ1c2IwX2FwYnJzdCI7DQo+PiAr ICAgICAgICAgICAgICAgcnN0X3RlbXAgPSBndHJfZGV2LT51c2IwX2FwYnJzdDsNCj4+ICsgICAg ICAgICAgICAgICBnb3RvIGVycm9yOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIGd0 cl9kZXYtPnVzYjFfYXBicnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldChndHJfZGV2LT5kZXYs DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAidXNiMV9hcGJyc3QiKTsNCj4+ICsgICAgICAgaWYgKElTX0VSUihndHJfZGV2LT51c2IxX2Fw YnJzdCkpIHsNCj4+ICsgICAgICAgICAgICAgICBuYW1lID0gInVzYjFfYXBicnN0IjsNCj4+ICsg ICAgICAgICAgICAgICByc3RfdGVtcCA9IGd0cl9kZXYtPnVzYjFfYXBicnN0Ow0KPj4gKyAgICAg ICAgICAgICAgIGdvdG8gZXJyb3I7DQo+PiArICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgZ3Ry X2Rldi0+Z2VtMF9yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KGd0cl9kZXYtPmRldiwgImdl bTBfcnN0Iik7DQo+PiArICAgICAgIGlmIChJU19FUlIoZ3RyX2Rldi0+Z2VtMF9yc3QpKSB7DQo+ PiArICAgICAgICAgICAgICAgbmFtZSA9ICJnZW0wX3JzdCI7DQo+PiArICAgICAgICAgICAgICAg cnN0X3RlbXAgPSBndHJfZGV2LT5nZW0wX3JzdDsNCj4+ICsgICAgICAgICAgICAgICBnb3RvIGVy cm9yOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIGd0cl9kZXYtPmdlbTFfcnN0ID0g ZGV2bV9yZXNldF9jb250cm9sX2dldChndHJfZGV2LT5kZXYsICJnZW0xX3JzdCIpOw0KPj4gKyAg ICAgICBpZiAoSVNfRVJSKGd0cl9kZXYtPmdlbTFfcnN0KSkgew0KPj4gKyAgICAgICAgICAgICAg IG5hbWUgPSAiZ2VtMV9yc3QiOw0KPj4gKyAgICAgICAgICAgICAgIHJzdF90ZW1wID0gZ3RyX2Rl di0+Z2VtMV9yc3Q7DQo+PiArICAgICAgICAgICAgICAgZ290byBlcnJvcjsNCj4+ICsgICAgICAg fQ0KPj4gKw0KPj4gKyAgICAgICBndHJfZGV2LT5nZW0yX3JzdCA9IGRldm1fcmVzZXRfY29udHJv bF9nZXQoZ3RyX2Rldi0+ZGV2LCAiZ2VtMl9yc3QiKTsNCj4+ICsgICAgICAgaWYgKElTX0VSUihn dHJfZGV2LT5nZW0yX3JzdCkpIHsNCj4+ICsgICAgICAgICAgICAgICBuYW1lID0gImdlbTJfcnN0 IjsNCj4+ICsgICAgICAgICAgICAgICByc3RfdGVtcCA9IGd0cl9kZXYtPmdlbTJfcnN0Ow0KPj4g KyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7DQo+PiArICAgICAgIH0NCj4+ICsNCj4+ICsgICAg ICAgZ3RyX2Rldi0+Z2VtM19yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KGd0cl9kZXYtPmRl diwgImdlbTNfcnN0Iik7DQo+PiArICAgICAgIGlmIChJU19FUlIoZ3RyX2Rldi0+Z2VtM19yc3Qp KSB7DQo+PiArICAgICAgICAgICAgICAgbmFtZSA9ICJnZW0zX3JzdCI7DQo+PiArICAgICAgICAg ICAgICAgcnN0X3RlbXAgPSBndHJfZGV2LT5nZW0zX3JzdDsNCj4+ICsgICAgICAgICAgICAgICBn b3RvIGVycm9yOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIHJldHVybiAwOw0KPj4g K2Vycm9yOg0KPj4gKyAgICAgICBkZXZfZXJyKGd0cl9kZXYtPmRldiwgImZhaWxlZCB0byBnZXQg JXMgcmVzZXQgc2lnbmFsXG4iLCBuYW1lKTsNCj4+ICsgICAgICAgcmV0dXJuIFBUUl9FUlIocnN0 X3RlbXApOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiB4cHNndHJfcHJvYmUgLSBUaGUg ZGV2aWNlIHByb2JlIGZ1bmN0aW9uIGZvciBkcml2ZXIgaW5pdGlhbGl6YXRpb24uDQo+PiArICog QHBkZXY6IHBvaW50ZXIgdG8gdGhlIHBsYXRmb3JtIGRldmljZSBzdHJ1Y3R1cmUuDQo+PiArICoN Cj4+ICsgKiBSZXR1cm46IDAgZm9yIHN1Y2Nlc3MgYW5kIGVycm9yIHZhbHVlIG9uIGZhaWx1cmUN Cj4+ICsgKi8NCj4+ICtzdGF0aWMgaW50IHhwc2d0cl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQ0KPj4gK3sNCj4+ICsgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwg Km5wID0gcGRldi0+ZGV2Lm9mX25vZGU7DQo+PiArICAgICAgIHN0cnVjdCB4cHNndHJfZGV2ICpn dHJfZGV2Ow0KPj4gKyAgICAgICBzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwcm92aWRlcjsNCj4+ICsg ICAgICAgc3RydWN0IHBoeSAqcGh5Ow0KPj4gKyAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlczsN Cj4+ICsgICAgICAgaW50IGxhbmVjb3VudCwgcG9ydCA9IDAsIGluZGV4ID0gMDsNCj4+ICsgICAg ICAgaW50IGVycjsNCj4+ICsNCj4+ICsgICAgICAgZ3RyX2RldiA9IGRldm1fa3phbGxvYygmcGRl di0+ZGV2LCBzaXplb2YoKmd0cl9kZXYpLCBHRlBfS0VSTkVMKTsNCj4+ICsgICAgICAgaWYgKCFn dHJfZGV2KQ0KPj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPj4gKw0KPj4gKyAg ICAgICByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0Vf TUVNLCAic2VyZGVzIik7DQo+PiArICAgICAgIGd0cl9kZXYtPnNlcmRlcyA9IGRldm1faW9yZW1h cF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOw0KPj4gKyAgICAgICBpZiAoSVNfRVJSKGd0cl9k ZXYtPnNlcmRlcykpDQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIoZ3RyX2Rldi0+ c2VyZGVzKTsNCj4+ICsNCj4+ICsgICAgICAgcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5 bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInNpb3UiKTsNCj4+ICsgICAgICAgZ3RyX2Rldi0+ c2lvdSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOw0KPj4gKyAgICAg ICBpZiAoSVNfRVJSKGd0cl9kZXYtPnNpb3UpKQ0KPj4gKyAgICAgICAgICAgICAgIHJldHVybiBQ VFJfRVJSKGd0cl9kZXYtPnNpb3UpOw0KPj4gKw0KPj4gKyAgICAgICBsYW5lY291bnQgPSBvZl9n ZXRfY2hpbGRfY291bnQobnApOw0KPj4gKyAgICAgICBpZiAobGFuZWNvdW50ID4gTUFYX0xBTkVT IHx8IGxhbmVjb3VudCA9PSAwKQ0KPj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0K Pj4gKw0KPj4gKyAgICAgICBndHJfZGV2LT5waHlzID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYs IHNpemVvZihwaHkpICogbGFuZWNvdW50LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdGUF9LRVJORUwpOw0KPj4gKyAgICAgICBpZiAoIWd0cl9kZXYtPnBoeXMpDQo+ PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+PiArDQo+PiArICAgICAgIGd0cl9k ZXYtPmRldiA9ICZwZGV2LT5kZXY7DQo+PiArICAgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIGd0cl9kZXYpOw0KPj4gKyAgICAgICBtdXRleF9pbml0KCZndHJfZGV2LT5ndHJfbXV0ZXgp Ow0KPj4gKw0KPj4gKyAgICAgICBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJ4bG54 LHp5bnFtcC1wc2d0ciIpKQ0KPj4gKyAgICAgICAgICAgICAgIGd0cl9kZXYtPnR4X3Rlcm1fZml4 ID0NCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwg InhsbngsdHhfdGVybWluYXRpb25fZml4Iik7DQo+PiArDQo+PiArICAgICAgIGVyciA9IHhwc2d0 cl9nZXRfcmVzZXRzKGd0cl9kZXYpOw0KPj4gKyAgICAgICBpZiAoZXJyKSB7DQo+PiArICAgICAg ICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCByZXNldHM6ICVkXG4i LCBlcnIpOw0KPj4gKyAgICAgICAgICAgICAgIHJldHVybiBlcnI7DQo+PiArICAgICAgIH0NCj4+ ICsNCj4+ICsgICAgICAgZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHsNCj4+ICsg ICAgICAgICAgICAgICBzdHJ1Y3QgeHBzZ3RyX3BoeSAqZ3RyX3BoeTsNCj4+ICsNCj4+ICsgICAg ICAgICAgICAgICBndHJfcGh5ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZ3Ry X3BoeSksDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRlBfS0VS TkVMKTsNCj4+ICsgICAgICAgICAgICAgICBpZiAoIWd0cl9waHkpDQo+PiArICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICAvKiBB c3NpZ24gbGFuZSBudW1iZXIgdG8gZ3RyX3BoeSBpbnN0YW5jZSAqLw0KPj4gKyAgICAgICAgICAg ICAgIGd0cl9waHktPmxhbmUgPSBpbmRleDsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICAvKiBE aXNhYmxlIGxhbmUgc2hhcmluZyBhcyBkZWZhdWx0ICovDQo+PiArICAgICAgICAgICAgICAgZ3Ry X3BoeS0+c2hhcmVfbGFuZWNsayA9IC0xOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIGd0cl9k ZXYtPnBoeXNbcG9ydF0gPSBndHJfcGh5Ow0KPj4gKyAgICAgICAgICAgICAgIHBoeSA9IGRldm1f cGh5X2NyZWF0ZSgmcGRldi0+ZGV2LCBjaGlsZCwgJnhwc2d0cl9waHlvcHMpOw0KPj4gKyAgICAg ICAgICAgICAgIGlmIChJU19FUlIocGh5KSkgew0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBQSFlcbiIpOw0KPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIocGh5KTsNCj4+ICsgICAgICAgICAgICAg ICB9DQo+PiArICAgICAgICAgICAgICAgZ3RyX2Rldi0+cGh5c1twb3J0XS0+cGh5ID0gcGh5Ow0K Pj4gKyAgICAgICAgICAgICAgIHBoeV9zZXRfZHJ2ZGF0YShwaHksIGd0cl9kZXYtPnBoeXNbcG9y dF0pOw0KPj4gKyAgICAgICAgICAgICAgIGd0cl9waHktPmRhdGEgPSBndHJfZGV2Ow0KPj4gKyAg ICAgICAgICAgICAgIHBvcnQrKzsNCj4+ICsgICAgICAgICAgICAgICBpbmRleCsrOw0KPj4gKyAg ICAgICB9DQo+PiArICAgICAgIHByb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0 ZXIoJnBkZXYtPmRldiwgeHBzZ3RyX3hsYXRlKTsNCj4+ICsgICAgICAgaWYgKElTX0VSUihwcm92 aWRlcikpIHsNCj4+ICsgICAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJyZWdpc3Rl cmluZyBwcm92aWRlciBmYWlsZWRcbiIpOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIFBUUl9FUlIocHJvdmlkZXIpOw0KPj4gKyAgICAgICB9DQo+PiArICAgICAgIHJldHVybiAw Ow0KPj4gK30NCj4+ICsNCj4+ICsjaWZkZWYgQ09ORklHX1BNDQo+PiArLyoqDQo+PiArICogeHBz Z3RyX3N1c3BlbmQgLSBUaGUgZnVuY3Rpb24gZm9yIGRyaXZlciBzdXNwZW5kLg0KPj4gKyAqIEBk ZXY6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUuDQo+PiArICoNCj4+ICsgKiBSZXR1 cm46IDAgZm9yIHN1Y2Nlc3MgYW5kIGVycm9yIHZhbHVlIG9uIGZhaWx1cmUNCj4+ICsgKi8NCj4+ ICtzdGF0aWMgaW50IHhwc2d0cl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikNCj4+ICt7DQo+ PiArICAgICAgIHN0cnVjdCB4cHNndHJfZGV2ICpndHJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRl dik7DQo+PiArDQo+PiArICAgICAgIGlmICghZ3RyX2RldikNCj4+ICsgICAgICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsNCj4+ICsNCj4+ICsgICAgICAgLyogU2F2ZSB0aGUgc25hcHNob3QgSUNN X0NGRyByZWdpc3RlcnMgKi8NCj4+ICsgICAgICAgZ3RyX2Rldi0+c2F2ZWRfaWNtX2NmZzAgPSBy ZWFkbChndHJfZGV2LT5zZXJkZXMgKyBJQ01fQ0ZHMCk7DQo+PiArICAgICAgIGd0cl9kZXYtPnNh dmVkX2ljbV9jZmcxID0gcmVhZGwoZ3RyX2Rldi0+c2VyZGVzICsgSUNNX0NGRzEpOw0KPj4gKw0K Pj4gKyAgICAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICogeHBzZ3Ry X3Jlc3VtZSAtIFRoZSBmdW5jdGlvbiBmb3IgZHJpdmVyIHJlc3VtZS4NCj4+ICsgKiBAZGV2OiBw b2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlLg0KPj4gKyAqDQo+PiArICogUmV0dXJuOiAw IGZvciBzdWNjZXNzIGFuZCBlcnJvciB2YWx1ZSBvbiBmYWlsdXJlDQo+PiArICovDQo+PiArc3Rh dGljIGludCB4cHNndHJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikNCj4+ICt7DQo+PiArICAg ICAgIHVuc2lnbmVkIGludCBpY21fY2ZnMCwgaWNtX2NmZzEsIGluZGV4Ow0KPj4gKyAgICAgICBi b29sIHNraXBfcGh5X2luaXQ7DQo+PiArICAgICAgIHN0cnVjdCB4cHNndHJfcGh5ICpndHJfcGh5 Ow0KPj4gKyAgICAgICBzdHJ1Y3QgeHBzZ3RyX2RldiAqZ3RyX2RldiA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOw0KPj4gKw0KPj4gKyAgICAgICBpZiAoIWd0cl9kZXYpDQo+PiArICAgICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7DQo+PiArDQo+PiArICAgICAgIGljbV9jZmcwID0gcmVhZGwoZ3Ry X2Rldi0+c2VyZGVzICsgSUNNX0NGRzApOw0KPj4gKyAgICAgICBpY21fY2ZnMSA9IHJlYWRsKGd0 cl9kZXYtPnNlcmRlcyArIElDTV9DRkcxKTsNCj4+ICsNCj4+ICsgICAgICAgLyogUmV0dXJuIGlm IG5vIGd0IGxhbmVzIGdvdCBjb25maWd1cmVkIGJlZm9yZSBzdXNwZW5kICovDQo+PiArICAgICAg IGlmICghZ3RyX2Rldi0+c2F2ZWRfaWNtX2NmZzAgJiYgIWd0cl9kZXYtPnNhdmVkX2ljbV9jZmcx KQ0KPj4gKyAgICAgICAgICAgICAgIHJldHVybiAwOw0KPj4gKw0KPj4gKyAgICAgICAvKiBDaGVj ayBpZiB0aGUgSUNNIGNvbmZpZ3VyYXRpb25zIGNoYW5nZWQgYWZ0ZXIgc3VzcGVuZCAqLw0KPj4g KyAgICAgICBpZiAoaWNtX2NmZzAgPT0gZ3RyX2Rldi0+c2F2ZWRfaWNtX2NmZzAgJiYNCj4+ICsg ICAgICAgICAgIGljbV9jZmcxID09IGd0cl9kZXYtPnNhdmVkX2ljbV9jZmcxKQ0KPj4gKyAgICAg ICAgICAgICAgIHNraXBfcGh5X2luaXQgPSB0cnVlOw0KPj4gKyAgICAgICBlbHNlDQo+PiArICAg ICAgICAgICAgICAgc2tpcF9waHlfaW5pdCA9IGZhbHNlOw0KPj4gKw0KPj4gKyAgICAgICAvKiBU aGlzIGJlbG93IHVwZGF0ZXMgdGhlIHNraXBfcGh5X2luaXQgZm9yIGFsbCBndHJfcGh5IGluc3Rh bmNlcyAqLw0KPj4gKyAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBvZl9nZXRfY2hpbGRf Y291bnQoZGV2LT5vZl9ub2RlKTsgaW5kZXgrKykgew0KPj4gKyAgICAgICAgICAgICAgIGd0cl9w aHkgPSBndHJfZGV2LT5waHlzW2luZGV4XTsNCj4+ICsgICAgICAgICAgICAgICBndHJfcGh5LT5z a2lwX3BoeV9pbml0ID0gc2tpcF9waHlfaW5pdDsNCj4+ICsgICAgICAgfQ0KPj4gKw0KPj4gKyAg ICAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiArI2VuZGlmIC8qIENPTkZJR19QTSAqLw0KPj4gKw0K Pj4gKy8qIGRldmljZSBQTSBvcHMgKi8NCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9v cHMgeHBzZ3RyX3BtX29wcyA9IHsNCj4+ICsgICAgICAgU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMo eHBzZ3RyX3N1c3BlbmQsIHhwc2d0cl9yZXN1bWUpDQo+PiArfTsNCj4+ICsNCj4+ICsvKiBNYXRj aCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqLw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIHhwc2d0cl9vZl9tYXRjaFtdID0gew0KPj4gKyAgICAgICB7IC5jb21w YXRpYmxlID0gInhsbngsenlucW1wLXBzZ3RyIiwgfSwNCj4+ICsgICAgICAgeyAuY29tcGF0aWJs ZSA9ICJ4bG54LHp5bnFtcC1wc2d0ci12MS4xIiwgfSwNCj4+ICsgICAgICAge30sDQo+PiArfTsN Cj4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4cHNndHJfb2ZfbWF0Y2gpOw0KPj4gKw0KPj4g K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHhwc2d0cl9kcml2ZXIgPSB7DQo+PiArICAg ICAgIC5wcm9iZSA9IHhwc2d0cl9wcm9iZSwNCj4+ICsgICAgICAgLmRyaXZlciA9IHsNCj4+ICsg ICAgICAgICAgICAgICAubmFtZSA9ICJ4aWxpbngtcHNndHIiLA0KPj4gKyAgICAgICAgICAgICAg IC5vZl9tYXRjaF90YWJsZSA9IHhwc2d0cl9vZl9tYXRjaCwNCj4+ICsgICAgICAgICAgICAgICAu cG0gPSAgJnhwc2d0cl9wbV9vcHMsDQo+PiArICAgICAgIH0sDQo+PiArfTsNCj4+ICsNCj4+ICtt b2R1bGVfcGxhdGZvcm1fZHJpdmVyKHhwc2d0cl9kcml2ZXIpOw0KPj4gKw0KPj4gK01PRFVMRV9B VVRIT1IoIlhpbGlueCBJbmMuIik7DQo+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPj4g K01PRFVMRV9ERVNDUklQVElPTigiWGlsaW54IFp5bnFNUCBIaWdoIHNwZWVkIEdpZ2FiaXQgVHJh bnNjZWl2ZXIiKTsNCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL3BoeS9waHku aCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvcGh5L3BoeS5oDQo+PiBpbmRleCBkMTZlODc1Li4wOWNj MGE2IDEwMDY0NA0KPj4gLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9waHkvcGh5LmgNCj4+ICsr KyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvcGh5L3BoeS5oDQo+PiBAQCAtMTYsNSArMTYsNyBAQA0K Pj4gICNkZWZpbmUgUEhZX1RZUEVfVVNCMiAgICAgICAgICAzDQo+PiAgI2RlZmluZSBQSFlfVFlQ RV9VU0IzICAgICAgICAgIDQNCj4+ICAjZGVmaW5lIFBIWV9UWVBFX1VGUyAgICAgICAgICAgNQ0K Pj4gKyNkZWZpbmUgUEhZX1RZUEVfRFAgICAgICAgICAgICA2DQo+PiArI2RlZmluZSBQSFlfVFlQ RV9TR01JSSAgICAgICAgIDcNCj4+DQo+PiAgI2VuZGlmIC8qIF9EVF9CSU5ESU5HU19QSFkgKi8N Cj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS9waHktenlucW1wLmggYi9pbmNsdWRl L2xpbnV4L3BoeS9waHktenlucW1wLmgNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRl eCAwMDAwMDAwLi44ZGZkNzNmDQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9pbmNsdWRlL2xp bnV4L3BoeS9waHktenlucW1wLmgNCj4+IEBAIC0wLDAgKzEsNTIgQEANCj4+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPj4gKy8qDQo+PiArICogWGlsaW54IFp5bnFN UCBQSFkgaGVhZGVyDQo+PiArICoNCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggWGlsaW54LCBJ bmMuDQo+PiArICoNCj4+ICsgKiBBdXRob3I6IEFudXJhZyBLdW1hciBWdWxpc2hhIDxhbnVyYWdr dUB4aWxpbnguY29tPg0KPj4gKyAqIEF1dGhvcjogSHl1biBXb28gS3dvbiA8aHl1bmtAeGlsaW54 LmNvbT4NCj4+ICsgKg0KPj4gKyAqLw0KPj4gKw0KPj4gKyNpZm5kZWYgX1BIWV9aWU5RTVBfSF8N Cj4+ICsjZGVmaW5lIF9QSFlfWllOUU1QX0hfDQo+PiArDQo+PiArI2luY2x1ZGUgPGxpbnV4L3Bo eS9waHkuaD4NCj4+ICsNCj4+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfUEhZX1hJTElOWF9aWU5R TVApDQo+PiArdm9pZCB4cHNndHJfb3ZlcnJpZGVfZGVlbXBoKHN0cnVjdCBwaHkgKnBoeSwgdTgg cGx2bCwgdTggdmx2bCk7DQo+PiArdm9pZCB4cHNndHJfbWFyZ2luaW5nX2ZhY3RvcihzdHJ1Y3Qg cGh5ICpwaHksIHU4IHBsdmwsIHU4IHZsdmwpOw0KPj4gK2ludCB4cHNndHJfd2FpdF9wbGxfbG9j ayhzdHJ1Y3QgcGh5ICpwaHkpOw0KPj4gK2ludCB4cHNndHJfdXNiX2Nyc3RfYXNzZXJ0KHN0cnVj dCBwaHkgKnBoeSk7DQo+PiAraW50IHhwc2d0cl91c2JfY3JzdF9yZWxlYXNlKHN0cnVjdCBwaHkg KnBoeSk7DQo+PiArI2Vsc2UNCj4+ICsNCj4+ICtzdGF0aWMgaW5saW5lIGludCB4cHNndHJfb3Zl cnJpZGVfZGVlbXBoKHN0cnVjdCBwaHkgKmJhc2UsIHU4IHBsdmwsIHU4IHZsdmwpDQo+PiArew0K Pj4gKyAgICAgICByZXR1cm4gLUVOT0RFVjsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGlubGlu ZSBpbnQgeHBzZ3RyX21hcmdpbmluZ19mYWN0b3Ioc3RydWN0IHBoeSAqYmFzZSwgdTggcGx2bCwg dTggdmx2bCkNCj4+ICt7DQo+PiArICAgICAgIHJldHVybiAtRU5PREVWOw0KPj4gK30NCj4+ICsN Cj4+ICtleHRlcm4gaW5saW5lIGludCB4cHNndHJfd2FpdF9wbGxfbG9jayhzdHJ1Y3QgcGh5ICpw aHkpDQo+PiArew0KPj4gKyAgICAgICByZXR1cm4gLUVOT0RFVjsNCj4+ICt9DQo+PiArDQo+PiAr ZXh0ZXJuIGlubGluZSBpbnQgeHBzZ3RyX3VzYl9jcnN0X2Fzc2VydChzdHJ1Y3QgcGh5ICpwaHkp DQo+PiArew0KPj4gKyAgICAgICByZXR1cm4gLUVOT0RFVjsNCj4+ICt9DQo+PiArDQo+PiArZXh0 ZXJuIGlubGluZSBpbnQgeHBzZ3RyX3VzYl9jcnN0X3JlbGVhc2Uoc3RydWN0IHBoeSAqcGh5KQ0K Pj4gK3sNCj4+ICsgICAgICAgcmV0dXJuIC1FTk9ERVY7DQo+PiArfQ0KPj4gKw0KPj4gKyNlbmRp Zg0KPj4gKw0KPj4gKyNlbmRpZiAvKiBfUEhZX1pZTlFNUF9IXyAqLw0KPj4gLS0NCj4+IDIuMS4x DQo+Pg0K