From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3298AA046B for ; Wed, 21 Aug 2019 07:32:42 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 00B261BEE0; Wed, 21 Aug 2019 07:32:40 +0200 (CEST) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30088.outbound.protection.outlook.com [40.107.3.88]) by dpdk.org (Postfix) with ESMTP id E7C741BEDE for ; Wed, 21 Aug 2019 07:32:38 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fFlKWOYXk+fxgyhN45j8u+lbTxr+8uF4ioJODSMVoGnO4WYJzDOhZ7tZTU0RH1OHGeiFZJcefXKbyeZSOWjPBzu1YITioOFvuUMrzl0Nk/4JUj9Ta1ULOAzTf9SihEHLkbPZrCqIiJDSk9lwWacUpntG0bzTL23xw1XUO7KlA0IMmzXtZC8OnZ4to4AwBmtU905ptDgdpCpNGspn8pX8489lJFPHdbtqLfL0B5b8gGVHYuIl02RmzaYpUTZyGt+LRSfx6SVkeomHxG2fiRO8ulusXLKsWdca7kZlf30i6VRNb7b3mcTFnei7u+X9lGXdSdpviHXwS42kKf/3aEK1fQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JihxiN9CsBu5adRNMNXBxgkiFQQPw7f/4G04ru9OaJw=; b=eLp72pb1XHvog/GJ4Fh34Q2qwlKEBePUQcetW0cWiHgOS4+e5woa6oGQPRDsUK4sOo9ZIB64mOzUpsTavg48Y+KzmAaDweFULVeytYXxUiNBYBHSa2GOKV6MrPLQcYD9zfIHW9ba87FyrSuyT0u7Fzi555VWfE/BJhwIuND1bQbE6U1kFTeY2bj1rXFYlzYcBonJ2bIaSETpW1nN3G+2LOcUVvL7DR+EUj+JZmAaxSgIxQh8gSpHs4HVGOppoDOY3ME/oLdQjDXCaUyTZ6g1mpeCCYVwVslvXO4AJFIJVeff0neJ31bCn/lw1oikANWFg9X/yCu7MbVlNUOGqvLHIA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JihxiN9CsBu5adRNMNXBxgkiFQQPw7f/4G04ru9OaJw=; b=svvU9WD4zdpoGhor7yQuLj4hftr9iE8i/hiGGdss7kYsduUWRtTwuhBe+js4njHPLYJsw/oMnttgyJG/w2rcL/pOhJspEZX2r7fE260qnFoXLTpuadu+pB0junozgd2zxGcpVM9BfR/PelLKoRajk7UQNjhiBt7hUhegA7eAiJU= Received: from AM0PR0502MB3795.eurprd05.prod.outlook.com (52.133.45.150) by AM0PR0502MB3700.eurprd05.prod.outlook.com (52.133.44.154) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Wed, 21 Aug 2019 05:32:36 +0000 Received: from AM0PR0502MB3795.eurprd05.prod.outlook.com ([fe80::c9fe:8276:60a1:1dee]) by AM0PR0502MB3795.eurprd05.prod.outlook.com ([fe80::c9fe:8276:60a1:1dee%6]) with mapi id 15.20.2178.020; Wed, 21 Aug 2019 05:32:36 +0000 From: Shahaf Shuler To: Thomas Monjalon , "dev@dpdk.org" CC: "jerinj@marvell.com" , Pavan Nikhilesh , Hemant Agrawal , Opher Reviv , Alex Rosenbaum , Dovrat Zifroni , Prasun Kapoor , Nipun Gupta , "Wang, Xiang W" , "Richardson, Bruce" , "yang.a.hong@intel.com" , "harry.chang@intel.com" , "gu.jian1@zte.com.cn" , "shanjiangh@chinatelecom.cn" , "zhangy.yun@chinatelecom.cn" , "lixingfu@huachentel.com" , "wushuai@inspur.com" , "yuyingxia@yxlink.com" , "fanchenggang@sunyainfo.com" , "davidfgao@tencent.com" , "liuzhong1@chinaunicom.cn" , "zhaoyong11@huawei.com" , "oc@yunify.com" , "jim@netgate.com" , "hongjun.ni@intel.com" , "j.bromhead@titan-ic.com" , "deri@ntop.org" , "fc@napatech.com" , "arthur.su@lionic.com" Thread-Topic: [dpdk-dev] [RFC PATCH v1] regexdev: introduce regexdev subsystem Thread-Index: AQHVU11phJzTGKaamk+WjoI+trNqP6cFGk1g Date: Wed, 21 Aug 2019 05:32:36 +0000 Message-ID: References: <20190627155036.56940-1-jerinj@marvell.com> <8285913.8xKIzI91KM@xps> <1922242.dABWq9CbNQ@xps> In-Reply-To: <1922242.dABWq9CbNQ@xps> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=shahafs@mellanox.com; x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0aa66f81-48b3-4a88-b2b7-08d725f8f97b x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020); SRVR:AM0PR0502MB3700; x-ms-traffictypediagnostic: AM0PR0502MB3700: x-ms-exchange-purlcount: 2 x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:962; x-forefront-prvs: 0136C1DDA4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(366004)(136003)(346002)(376002)(396003)(189003)(199004)(99286004)(6506007)(11346002)(45080400002)(478600001)(4326008)(9686003)(6436002)(6246003)(25786009)(81156014)(81166006)(8936002)(8676002)(2501003)(53936002)(7416002)(966005)(3846002)(71200400001)(6116002)(71190400001)(30864003)(53946003)(86362001)(110136005)(54906003)(7736002)(66066001)(26005)(6306002)(55016002)(305945005)(7696005)(5660300002)(229853002)(446003)(76176011)(2906002)(74316002)(256004)(102836004)(486006)(66476007)(66946007)(66446008)(76116006)(14444005)(33656002)(186003)(64756008)(476003)(316002)(52536014)(66556008)(14454004)(91820200001)(559001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR0502MB3700; H:AM0PR0502MB3795.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: Y0t72JdF+WtSO4gN12nXmFG8EprUaBckeqhDWKlyiXOiD3ap2rT+4gTHq7iF9zGyAYn7sla0KJYNBYjtxgY7xW104QoHUUlp/WTIkGg8XP82+rmYHANCKh4mwjtxPpFz96JI5cCrbOdICBg2egtUQc5NZWV97v1ApEMQR4+olW6wAcCFyGViXaIXl8BoPcFNuhU1RmuBCa94VbwpmE1jv908Z6W5qxvwtPLQ0Ontz51ot4wcAIXsDTww/Q4/wsKjvf7mi+hR2qJASh+cqZbb8VItAXdEXAJjb+4dD1pC2pyAkWHZ2tUB7b7xvdt9CGtUEMP8Ey10JhZeyf8G9mY/Ou1SX/Z3uBauXpq/BhFVWG7FYZaPropBp2DCWGEZCntty3Bkt8XUJjEVuD31uodKO2nWVD2VhyAGl/Re7DpLdAY= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0aa66f81-48b3-4a88-b2b7-08d725f8f97b X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Aug 2019 05:32:36.0786 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: f5xudVrbwasgEWhenBwE09q0am0CN+8zezyDoglODhObZxiKip6InmJ/PSf1YIMYLR1ozaVY4feUaEnGtvcttw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0502MB3700 Subject: Re: [dpdk-dev] [RFC PATCH v1] regexdev: introduce regexdev subsystem X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgSmVyaW4sDQoNClRodXJzZGF5LCBBdWd1c3QgMTUsIDIwMTkgMjozNCBQTSwgVGhvbWFzIE1v bmphbG9uOg0KPiBTdWJqZWN0OiBSZTogW2RwZGstZGV2XSBbUkZDIFBBVENIIHYxXSByZWdleGRl djogaW50cm9kdWNlIHJlZ2V4ZGV2DQo+IHN1YnN5c3RlbQ0KPiANCj4gK0NjIG1vcmUNCj4gDQo+ IC0tLS0tLS0tLS0tLQ0KPiANCj4gRnJvbTogSmVyaW4gSmFjb2IgPGplcmluakBtYXJ2ZWxsLmNv bT4NCj4gDQo+IEV2ZW4gdGhvdWdoIHRoZXJlIGFyZSBzb21lIHZlbmRvcnMgd2hpY2ggb2ZmZXIg UmVnZXggSFcgb2ZmbG9hZCwgZHVlIHRvDQo+IGxhY2sgb2Ygc3RhbmRhcmQgQVBJLCBJdCBpcyBk aWZmY3VsdCBmb3IgRFBESyBjb25zdW1lciB0byB1c2UgdGhlbQ0KPiBpbiBhIHBvcnRhYmxlIHdh eS4NCj4gDQo+IFRoaXMgX1JGQ18gYXR0ZW1wdHMgdG8gc3RhbmRhcmRpemUgdGhlIFJlZ0V4L0RQ SSBvZmZsb2FkIEFQSXMgZm9yIERQREsuDQo+IA0KPiBUaGUgRG94eWdlbiBnZW5lcmF0ZWQgUkZD IEFQSSBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZSBoZXJlOg0KPiBodHRwczovL2V1cjAzLnNhZmVs aW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cHMlM0ElMkYlMkZkcmVhDQo+IG15 LW5vZXRoZXItDQo+IDIyNzc3ZS5uZXRsaWZ5LmNvbSUyRnJ0ZV9fcmVnZXhkZXZfOGguaHRtbCZh bXA7ZGF0YT0wMiU3QzAxJTdDc2hhDQo+IGhhZnMlNDBtZWxsYW5veC5jb20lN0NkZjkzNDE2Y2Y0 ZTg0OThhOTgyYzA4ZDcyMTc0ODkzNyU3Q2E2NTI5NzFjDQo+IDdkMmU0ZDliYTZhNGQxNDkyNTZm NDYxYiU3QzAlN0MwJTdDNjM3MDE0NjU2NzM5OTkzMTMxJmFtcDtzZGF0YQ0KPiA9NlpBT3JMbWoz c2Y3THJQUmx6RTdJeXFrSzhiNGN2RklRcUs2elN3RjRhdyUzRCZhbXA7cmVzZXJ2ZWQ9MA0KPiAN Cj4gVGhpcyBSRkMgY3JhZnRlZCBiYXNlZCBvbiBTVyBSZWdleCBBUEkgZnJhbWV3b3JrcyBzdWNo IGFzIGxpYnBjcmUgYW5kDQo+IGh5cGVyc2NhbiBhbmQgYSBmZXcgb2YgdGhlIFJlZ0V4IEhXIElQ cyB3aGljaCBJIGFtIGF3YXJlIG9mLg0KPiANCj4gUmVnRXggcGF0dGVybiBtYXRjaGluZyBhcHBs aWNhdGlvbnM6DQo+IOKAoiBOZXh0IEdlbmVyYXRpb24gRmlyZXdhbGxzIChOR0ZXKQ0KPiDigKIg RGVlcCBQYWNrZXQgYW5kIEZsb3cgSW5zcGVjdGlvbiAoRFBJKQ0KPiDigKIgSW50cnVzaW9uIFBy ZXZlbnRpb24gU3lzdGVtcyAoSVBTKQ0KPiDigKIgRERvUyBNaXRpZ2F0aW9uDQo+IOKAoiBOZXR3 b3JrIE1vbml0b3JpbmcNCj4g4oCiIERhdGEgTG9zcyBQcmV2ZW50aW9uIChETFApDQo+IOKAoiBT bWFydCBOSUNzDQo+IOKAoiBHcmFtbWFyIGJhc2VkIGNvbnRlbnQgcHJvY2Vzc2luZw0KPiDigKIg VVJMLCBzcGFtIGFuZCBhZHdhcmUgZmlsdGVyaW5nDQo+IOKAoiBBZHZhbmNlZCBhdWRpdGluZyBh bmQgcG9saWNpbmcgb2YgdXNlci9hcHBsaWNhdGlvbiBzZWN1cml0eSBwb2xpY2llcw0KPiDigKIg RmluYW5jaWFsIGRhdGEgbWluaW5nIC0gcGFyc2luZyBvZiBzdHJlYW1lZCBmaW5hbmNpYWwgZmVl ZHMNCg0KSSB0aGluayB0d28gbW9yZSBpbXBvcnRhbnQgdXNlIGNhc2UgdG8gYWRkIChhdCBsZWFz dCBvbiB0aGUgZG9jIG9mIHRoaXMgc3Vic3lzdGVtKSBhcmU6DQoqIGFwcGxpY2F0aW9uIHJlY29n bml0aW9uIA0KKiBtZW1vcnkgaW50cm9zcGVjdGlvbiANCg0KDQo+IA0KPiBSZXF1ZXN0IHRvIHJl dmlldyBmcm9tIEhXIGFuZCBTVyBSZWdFeCB2ZW5kb3JzIGFuZCBSZWdFeCBhcHBsaWNhdGlvbg0K PiB1c2Vycw0KPiB0byBoYXZlIHBvcnRhYmxlIERQREsgQVBJIGZvciBSZWdFeC4NCj4gDQo+IFRo ZSBBUEkgc2NoZW1hdGljcyBhcmUgYmFzZWQgY3J5cHRvZGV2LCBldmVudGRldiBhbmQgZXRoZGV2 IGV4aXN0aW5nDQo+IGRldmljZSBBUEkuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBKZXJpbiBKYWNv YiA8amVyaW5qQG1hcnZlbGwuY29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBQYXZhbiBOaWtoaWxlc2gg PHBiaGFnYXZhdHVsYUBtYXJ2ZWxsLmNvbT4NCj4gLS0tDQo+IA0KPiBSVEUgUmVnRXggRGV2aWNl IEFQSQ0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiANCj4gRGVmaW5lcyBSVEUgUmVnRXggRGV2 aWNlIEFQSXMgZm9yIFJlZ0V4IG9wZXJhdGlvbnMgYW5kIGl0cyBwcm92aXNpb25pbmcuDQo+IA0K PiBUaGUgUmVnRXggRGV2aWNlIEFQSSBpcyBjb21wb3NlZCBvZiB0d28gcGFydHM6DQo+IA0KPiAt IFRoZSBhcHBsaWNhdGlvbi1vcmllbnRlZCBSZWdFeCBBUEkgdGhhdCBpbmNsdWRlcyBmdW5jdGlv bnMgdG8gc2V0dXANCj4gYSBSZWdFeCBkZXZpY2UgKGNvbmZpZ3VyZSBpdCwgc2V0dXAgaXRzIHF1 ZXVlIHBhaXJzIGFuZCBzdGFydCBpdCksDQo+IHVwZGF0ZSB0aGUgcnVsZSBkYXRhYmFzZSBhbmQg c28gb24uDQo+IA0KPiAtIFRoZSBkcml2ZXItb3JpZW50ZWQgUmVnRXggQVBJIHRoYXQgZXhwb3J0 cyBhIGZ1bmN0aW9uIGFsbG93aW5nDQo+IGEgUmVnRXggcG9sbCBNb2RlIERyaXZlciAoUE1EKSB0 byBzaW11bHRhbmVvdXNseSByZWdpc3RlciBpdHNlbGYgYXMNCj4gYSBSZWdFeCBkZXZpY2UgZHJp dmVyLg0KPiANCj4gUmVnRXggZGV2aWNlIGNvbXBvbmVudHMgYW5kIGRlZmluaXRpb25zOg0KPiAN Cj4gICAgICstLS0tLS0tLS0tLS0tLS0tLSsNCj4gICAgIHwgICAgICAgICAgICAgICAgIHwNCj4g ICAgIHwgICAgICAgICAgICAgICAgIG8tLS0tLS0tLS0rICAgIHJ0ZV9yZWdleF9bZW58ZGVdcXVl dWVfYnVyc3QoKQ0KPiAgICAgfCAgIFBDUkUgYmFzZWQgICAgby0tLS0tLSsgIHwgICAgICAgICAg ICAgICB8DQo+ICAgICB8ICBSZWdFeCBwYXR0ZXJuICB8ICAgICAgfCAgfCAgKy0tLS0tLS0tKyAg IHwNCj4gICAgIHwgbWF0Y2hpbmcgZW5naW5lIG8tLS0tLS0rLS0rLS1vICAgICAgICB8ICAgfCAg ICArLS0tLS0tKw0KPiAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgIHwgIHwgIHwgcXVldWUg IHw8PT1vPT09PnxDb3JlIDB8DQo+ICAgICB8ICAgICAgICAgICAgICAgICBvLS0tLSsgfCAgfCAg fCBwYWlyIDAgfCAgICAgICAgfCAgICAgIHwNCj4gICAgIHwgICAgICAgICAgICAgICAgIHwgICAg fCB8ICB8ICArLS0tLS0tLS0rICAgICAgICArLS0tLS0tKw0KPiAgICAgKy0tLS0tLS0tLS0tLS0t LS0tKyAgICB8IHwgIHwNCj4gICAgICAgICAgICBeICAgICAgICAgICAgICAgfCB8ICB8ICArLS0t LS0tLS0rDQo+ICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgfCAgfCAgfCAgICAgICAgfCAg ICAgICAgKy0tLS0tLSsNCj4gICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCArLS0rLS1vIHF1 ZXVlICB8PD09PT09PT58Q29yZSAxfA0KPiAgICAgICAgUnVsZXxEYXRhYmFzZSAgICAgICB8ICAg IHwgIHwgcGFpciAxIHwgICAgICAgIHwgICAgICB8DQo+ICAgICArLS0tLS0tKy0tLS0tLS0tLS0r ICAgIHwgICAgfCAgKy0tLS0tLS0tKyAgICAgICAgKy0tLS0tLSsNCj4gICAgIHwgICAgIEdyb3Vw IDAgICAgIHwgICAgfCAgICB8DQo+ICAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAgIHwgICAgfCAg Ky0tLS0tLS0tKyAgICAgICAgKy0tLS0tLSsNCj4gICAgIHwgfCBSdWxlcyAwLi5uICB8IHwgICAg fCAgICB8ICB8ICAgICAgICB8ICAgICAgICB8Q29yZSAyfA0KPiAgICAgfCArLS0tLS0tLS0tLS0t LSsgfCAgICB8ICAgICstLW8gcXVldWUgIHw8PT09PT09PnwgICAgICB8DQo+ICAgICB8ICAgICBH cm91cCAxICAgICB8ICAgIHwgICAgICAgfCBwYWlyIDIgfCAgICAgICAgKy0tLS0tLSsNCj4gICAg IHwgKy0tLS0tLS0tLS0tLS0rIHwgICAgfCAgICAgICArLS0tLS0tLS0rDQo+ICAgICB8IHwgUnVs ZXMgMC4ubiAgfCB8ICAgIHwNCj4gICAgIHwgKy0tLS0tLS0tLS0tLS0rIHwgICAgfCAgICAgICAr LS0tLS0tLS0rDQo+ICAgICB8ICAgICBHcm91cCAyICAgICB8ICAgIHwgICAgICAgfCAgICAgICAg fCAgICAgICAgKy0tLS0tLSsNCj4gICAgIHwgKy0tLS0tLS0tLS0tLS0rIHwgICAgfCAgICAgICB8 IHF1ZXVlICB8PD09PT09PT58Q29yZSBufA0KPiAgICAgfCB8IFJ1bGVzIDAuLm4gIHwgfCAgICAr LS0tLS0tLW8gcGFpciBuIHwgICAgICAgIHwgICAgICB8DQo+ICAgICB8ICstLS0tLS0tLS0tLS0t KyB8ICAgICAgICAgICAgKy0tLS0tLS0tKyAgICAgICAgKy0tLS0tLSsNCj4gICAgIHwgICAgIEdy b3VwIG4gICAgIHwNCj4gICAgIHwgKy0tLS0tLS0tLS0tLS0rIHw8LS0tLS0tLXJ0ZV9yZWdleF9y dWxlX2RiX3VwZGF0ZSgpDQo+ICAgICB8IHwgUnVsZXMgMC4ubiAgfCB8PC0tLS0tLS1ydGVfcmVn ZXhfcnVsZV9kYl9pbXBvcnQoKQ0KPiAgICAgfCArLS0tLS0tLS0tLS0tLSsgfC0tLS0tLS0+cnRl X3JlZ2V4X3J1bGVfZGJfZXhwb3J0KCkNCj4gICAgICstLS0tLS0tLS0tLS0tLS0tLSsNCj4gDQo+ IFJlZ0V4OiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBhIGNvbmNpc2UgYW5kIGZsZXhpYmxlIG1l YW5zIGZvciBtYXRjaGluZw0KPiBzdHJpbmdzIG9mIHRleHQsIHN1Y2ggYXMgcGFydGljdWxhciBj aGFyYWN0ZXJzLCB3b3Jkcywgb3IgcGF0dGVybnMgb2YNCj4gY2hhcmFjdGVycy4gQSBjb21tb24g YWJicmV2aWF0aW9uIGZvciB0aGlzIGlzIOKAnFJlZ0V44oCdLg0KPiANCj4gUmVnRXggZGV2aWNl OiBBIGhhcmR3YXJlIG9yIHNvZnR3YXJlLWJhc2VkIGltcGxlbWVudGF0aW9uIG9mIFJlZ0V4DQo+ IGRldmljZSBBUEkgZm9yIFBDUkUgYmFzZWQgcGF0dGVybiBtYXRjaGluZyBzeW50YXggYW5kIHNl bWFudGljcy4NCj4gDQo+IFBDUkUgUmVnRXggc3ludGF4IGFuZCBzZW1hbnRpY3Mgc3BlY2lmaWNh dGlvbjoNCj4gaHR0cHM6Ly9ldXIwMy5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/ dXJsPWh0dHAlM0ElMkYlMkZyZWdleA0KPiBraXQuc291cmNlZm9yZ2UubmV0JTJGRG9jdW1lbnRh dGlvbiUyRnBjcmUlMkZwY3JlcGF0dGVybi5odG1sJmFtcDtkDQo+IGF0YT0wMiU3QzAxJTdDc2hh aGFmcyU0MG1lbGxhbm94LmNvbSU3Q2RmOTM0MTZjZjRlODQ5OGE5ODJjMDhkNzIxDQo+IDc0ODkz NyU3Q2E2NTI5NzFjN2QyZTRkOWJhNmE0ZDE0OTI1NmY0NjFiJTdDMCU3QzAlN0M2MzcwMTQ2NTY3 Mw0KPiA5OTkzMTMxJmFtcDtzZGF0YT1CMExTTXVibGREeTNVbEY1NVozd2hoTmlScTZlcDFweEI4 UnJ0NURJdGZ3JTMNCj4gRCZhbXA7cmVzZXJ2ZWQ9MA0KPiANCj4gUmVnRXggcXVldWUgcGFpcjog RWFjaCBSZWdFeCBkZXZpY2Ugc2hvdWxkIGhhdmUgb25lIG9yIG1vcmUgcXVldWUgcGFpciB0bw0K PiB0cmFuc21pdCBhIGJ1cnN0IG9mIHBhdHRlcm4gbWF0Y2hpbmcgcmVxdWVzdCBhbmQgcmVjZWl2 ZSBhIGJ1cnN0IG9mDQo+IHJlY2VpdmUgdGhlIHBhdHRlcm4gbWF0Y2hpbmcgcmVzcG9uc2UuIFRo ZSBwYXR0ZXJuIG1hdGNoaW5nDQo+IHJlcXVlc3QvcmVzcG9uc2UNCj4gZW1iZWRkZWQgaW4gKnJ0 ZV9yZWdleF9vcHMqIHN0cnVjdHVyZS4NCj4gDQo+IFJ1bGU6IEEgcGF0dGVybiBtYXRjaGluZyBy dWxlIGV4cHJlc3NlZCBpbiBQQ1JFIFJlZ0V4IHN5bnRheCBhbG9uZyB3aXRoDQo+IE1hdGNoIElE IGFuZCBHcm91cCBJRCB0byBpZGVudGlmeSB0aGUgcnVsZSB1cG9uIHRoZSBtYXRjaC4NCj4gDQo+ IFJ1bGUgZGF0YWJhc2U6IFRoZSBSZWdFeCBkZXZpY2UgYWNjZXB0cyByZWd1bGFyIGV4cHJlc3Np b25zIGFuZCBjb252ZXJ0cw0KPiB0aGVtDQo+IGludG8gYSBjb21waWxlZCBydWxlIGRhdGFiYXNl IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBzY2FuIGRhdGEuDQo+IENvbXBpbGF0aW9uIGFsbG93 cyB0aGUgZGV2aWNlIHRvIGFuYWx5emUgdGhlIGdpdmVuIHBhdHRlcm4ocykgYW5kDQo+IHByZS1k ZXRlcm1pbmUgaG93IHRvIHNjYW4gZm9yIHRoZXNlIHBhdHRlcm5zIGluIGFuIG9wdGltaXplZCBm YXNoaW9uIHRoYXQNCj4gd291bGQgYmUgZmFyIHRvbyBleHBlbnNpdmUgdG8gY29tcHV0ZSBhdCBy dW4tdGltZS4gQSBydWxlIGRhdGFiYXNlIGNvbnRhaW5zDQo+IGEgc2V0IG9mIHJ1bGVzIHRoYXQg Y29tcGlsZWQgaW4gZGV2aWNlIHNwZWNpZmljIGJpbmFyeSBmb3JtLg0KPiANCj4gTWF0Y2ggSUQg b3IgUnVsZSBJRDogQSB1bmlxdWUgaWRlbnRpZmllciBwcm92aWRlZCBhdCB0aGUgdGltZSBvZiBy dWxlDQo+IGNyZWF0aW9uIGZvciB0aGUgYXBwbGljYXRpb24gdG8gaWRlbnRpZnkgdGhlIHJ1bGUg dXBvbiBtYXRjaC4NCj4gDQo+IEdyb3VwIElEOiBHcm91cCBvZiBydWxlcyBjYW4gYmUgZ3JvdXBl ZCB1bmRlciBvbmUgZ3JvdXAgSUQgdG8gZW5hYmxlDQo+IHJ1bGUgaXNvbGF0aW9uIGFuZCBlZmZl Y3RpdmUgcGF0dGVybiBtYXRjaGluZy4gQSB1bmlxdWUgZ3JvdXAgaWRlbnRpZmllcg0KPiBwcm92 aWRlZCBhdCB0aGUgdGltZSBvZiBydWxlIGNyZWF0aW9uIGZvciB0aGUgYXBwbGljYXRpb24gdG8g aWRlbnRpZnkgdGhlDQo+IHJ1bGUgdXBvbiBtYXRjaC4NCj4gDQo+IFNjYW46IEEgcGF0dGVybiBt YXRjaGluZyByZXF1ZXN0IHRocm91Z2ggKmVucXVldWUqIEFQSS4NCj4gDQo+IEl0IG1heSBwb3Nz aWJsZSB0aGF0IGEgZ2l2ZW4gUmVnRXggZGV2aWNlIG1heSBub3Qgc3VwcG9ydCBhbGwgdGhlIGZl YXR1cmVzDQo+IG9mIFBDUkUuIFRoZSBhcHBsaWNhdGlvbiBtYXkgcHJvYmUgdW5zdXBwb3J0ZWQg ZmVhdHVyZXMgdGhyb3VnaA0KPiBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpwY3JlX3Vuc3Vw X2ZsYWdzDQo+IA0KPiBCeSBkZWZhdWx0LCBhbGwgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgUmVnRXgg RGV2aWNlIEFQSSBleHBvcnRlZCBieSBhIFBNRA0KPiBhcmUgbG9jay1mcmVlIGZ1bmN0aW9ucyB3 aGljaCBhc3N1bWUgdG8gbm90IGJlIGludm9rZWQgaW4gcGFyYWxsZWwgb24NCj4gZGlmZmVyZW50 IGxvZ2ljYWwgY29yZXMgdG8gd29yayBvbiB0aGUgc2FtZSB0YXJnZXQgb2JqZWN0LiBGb3IgaW5z dGFuY2UsDQo+IHRoZSBkZXF1ZXVlIGZ1bmN0aW9uIG9mIGEgUE1EIGNhbm5vdCBiZSBpbnZva2Vk IGluIHBhcmFsbGVsIG9uIHR3byBsb2dpY2FsDQo+IGNvcmVzIHRvIG9wZXJhdGVzIG9uIHNhbWUg UmVnRXggcXVldWUgcGFpci4gT2YgY291cnNlLCB0aGlzIGZ1bmN0aW9uDQo+IGNhbiBiZSBpbnZv a2VkIGluIHBhcmFsbGVsIGJ5IGRpZmZlcmVudCBsb2dpY2FsIGNvcmUgb24gZGlmZmVyZW50IHF1 ZXVlIHBhaXIuDQo+IEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXBwZXIgbGV2ZWwg YXBwbGljYXRpb24gdG8gZW5mb3JjZSB0aGlzIHJ1bGUuDQo+IA0KPiBJbiBhbGwgZnVuY3Rpb25z IG9mIHRoZSBSZWdFeCBBUEksIHRoZSBSZWdFeCBkZXZpY2UgaXMNCj4gZGVzaWduYXRlZCBieSBh biBpbnRlZ2VyID49IDAgbmFtZWQgdGhlIGRldmljZSBpZGVudGlmaWVyICpkZXZfaWQqDQo+IA0K PiBBdCB0aGUgUmVnRXggZHJpdmVyIGxldmVsLCBSZWdFeCBkZXZpY2VzIGFyZSByZXByZXNlbnRl ZCBieSBhIGdlbmVyaWMNCj4gZGF0YSBzdHJ1Y3R1cmUgb2YgdHlwZSAqcnRlX3JlZ2V4X2Rldiou DQo+IA0KPiBSZWdFeCBkZXZpY2VzIGFyZSBkeW5hbWljYWxseSByZWdpc3RlcmVkIGR1cmluZyB0 aGUgUENJL1NvQyBkZXZpY2UgcHJvYmluZw0KPiBwaGFzZSBwZXJmb3JtZWQgYXQgRUFMIGluaXRp YWxpemF0aW9uIHRpbWUuDQo+IFdoZW4gYSBSZWdFeCBkZXZpY2UgaXMgYmVpbmcgcHJvYmVkLCBh ICpydGVfcmVnZXhfZGV2KiBzdHJ1Y3R1cmUgYW5kDQo+IGEgbmV3IGRldmljZSBpZGVudGlmaWVy IGFyZSBhbGxvY2F0ZWQgZm9yIHRoYXQgZGV2aWNlLiBUaGVuLCB0aGUNCj4gcmVnZXhfZGV2X2lu aXQoKSBmdW5jdGlvbiBzdXBwbGllZCBieSB0aGUgUmVnRXggZHJpdmVyIG1hdGNoaW5nIHRoZSBw cm9iZWQNCj4gZGV2aWNlIGlzIGludm9rZWQgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgZGV2 aWNlLg0KPiANCj4gVGhlIHJvbGUgb2YgdGhlIGRldmljZSBpbml0IGZ1bmN0aW9uIGNvbnNpc3Rz IG9mIHJlc2V0dGluZyB0aGUgaGFyZHdhcmUgb3INCj4gc29mdHdhcmUgUmVnRXggZHJpdmVyIGlt cGxlbWVudGF0aW9ucy4NCj4gDQo+IElmIHRoZSBkZXZpY2UgaW5pdCBvcGVyYXRpb24gaXMgc3Vj Y2Vzc2Z1bCwgdGhlIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4NCj4gdGhlIGRldmljZSBpZGVudGlm aWVyIGFzc2lnbmVkIHRvIHRoZSBuZXcgZGV2aWNlIGFuZCBpdHMgYXNzb2NpYXRlZA0KPiAqcnRl X3JlZ2V4X2Rldiogc3RydWN0dXJlIGlzIGVmZmVjdGl2ZWx5IHJlZ2lzdGVyZWQuDQo+IE90aGVy d2lzZSwgYm90aCB0aGUgKnJ0ZV9yZWdleF9kZXYqIHN0cnVjdHVyZSBhbmQgdGhlIGRldmljZSBp ZGVudGlmaWVyIGFyZQ0KPiBmcmVlZC4NCj4gDQo+IFRoZSBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkg dGhlIGFwcGxpY2F0aW9uIFJlZ0V4IEFQSSB0byBzZXR1cCBhIGRldmljZQ0KPiBkZXNpZ25hdGVk IGJ5IGl0cyBkZXZpY2UgaWRlbnRpZmllciBtdXN0IGJlIGludm9rZWQgaW4gdGhlIGZvbGxvd2lu ZyBvcmRlcjoNCj4gLSBydGVfcmVnZXhfZGV2X2NvbmZpZ3VyZSgpDQo+IC0gcnRlX3JlZ2V4X3F1 ZXVlX3BhaXJfc2V0dXAoKQ0KPiAtIHJ0ZV9yZWdleF9kZXZfc3RhcnQoKQ0KPiANCj4gVGhlbiwg dGhlIGFwcGxpY2F0aW9uIGNhbiBpbnZva2UsIGluIGFueSBvcmRlciwgdGhlIGZ1bmN0aW9ucw0K PiBleHBvcnRlZCBieSB0aGUgUmVnRXggQVBJIHRvIGVucXVldWUgcGF0dGVybiBtYXRjaGluZyBq b2IsIGRlcXVldWUNCj4gcGF0dGVybg0KPiBtYXRjaGluZyByZXNwb25zZSwgZ2V0IHRoZSBzdGF0 cywgdXBkYXRlIHRoZSBydWxlIGRhdGFiYXNlLA0KPiBnZXQvc2V0IGRldmljZSBhdHRyaWJ1dGVz IGFuZCBzbyBvbg0KPiANCj4gSWYgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGNoYW5nZSB0aGUg Y29uZmlndXJhdGlvbiAoaS5lLiBjYWxsDQo+IHJ0ZV9yZWdleF9kZXZfY29uZmlndXJlKCkgb3Ig cnRlX3JlZ2V4X3F1ZXVlX3BhaXJfc2V0dXAoKSksIGl0IG11c3QgY2FsbA0KPiBydGVfcmVnZXhf ZGV2X3N0b3AoKSBmaXJzdCB0byBzdG9wIHRoZSBkZXZpY2UgYW5kIHRoZW4gZG8gdGhlDQo+IHJl Y29uZmlndXJhdGlvbg0KPiBiZWZvcmUgY2FsbGluZyBydGVfcmVnZXhfZGV2X3N0YXJ0KCkgYWdh aW4uIFRoZSBlbnF1ZXVlIGFuZCBkZXF1ZXVlDQo+IGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIGlu dm9rZWQgd2hlbiB0aGUgZGV2aWNlIGlzIHN0b3BwZWQuDQo+IA0KPiBGaW5hbGx5LCBhbiBhcHBs aWNhdGlvbiBjYW4gY2xvc2UgYSBSZWdFeCBkZXZpY2UgYnkgaW52b2tpbmcgdGhlDQo+IHJ0ZV9y ZWdleF9kZXZfY2xvc2UoKSBmdW5jdGlvbi4NCj4gDQo+IEVhY2ggZnVuY3Rpb24gb2YgdGhlIGFw cGxpY2F0aW9uIFJlZ0V4IEFQSSBpbnZva2VzIGEgc3BlY2lmaWMgZnVuY3Rpb24NCj4gb2YgdGhl IFBNRCB0aGF0IGNvbnRyb2xzIHRoZSB0YXJnZXQgZGV2aWNlIGRlc2lnbmF0ZWQgYnkgaXRzIGRl dmljZQ0KPiBpZGVudGlmaWVyLg0KPiANCj4gRm9yIHRoaXMgcHVycG9zZSwgYWxsIGRldmljZS1z cGVjaWZpYyBmdW5jdGlvbnMgb2YgYSBSZWdFeCBkcml2ZXIgYXJlDQo+IHN1cHBsaWVkIHRocm91 Z2ggYSBzZXQgb2YgcG9pbnRlcnMgY29udGFpbmVkIGluIGEgZ2VuZXJpYyBzdHJ1Y3R1cmUgb2Yg dHlwZQ0KPiAqcmVnZXhfZGV2X29wcyouDQo+IFRoZSBhZGRyZXNzIG9mIHRoZSAqcmVnZXhfZGV2 X29wcyogc3RydWN0dXJlIGlzIHN0b3JlZCBpbiB0aGUNCj4gKnJ0ZV9yZWdleF9kZXYqDQo+IHN0 cnVjdHVyZSBieSB0aGUgZGV2aWNlIGluaXQgZnVuY3Rpb24gb2YgdGhlIFJlZ0V4IGRyaXZlciwg d2hpY2ggaXMNCj4gaW52b2tlZCBkdXJpbmcgdGhlIFBDSS9Tb0MgZGV2aWNlIHByb2JpbmcgcGhh c2UsIGFzIGV4cGxhaW5lZCBlYXJsaWVyLg0KPiANCj4gSW4gb3RoZXIgd29yZHMsIGVhY2ggZnVu Y3Rpb24gb2YgdGhlIFJlZ0V4IEFQSSBzaW1wbHkgcmV0cmlldmVzIHRoZQ0KPiAqcnRlX3JlZ2V4 X2Rldiogc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlIGlkZW50aWZpZXIgYW5k DQo+IHBlcmZvcm1zIGFuIGluZGlyZWN0IGludm9jYXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcg ZHJpdmVyIGZ1bmN0aW9uDQo+IHN1cHBsaWVkIGluIHRoZSAqcmVnZXhfZGV2X29wcyogc3RydWN0 dXJlIG9mIHRoZSAqcnRlX3JlZ2V4X2RldioNCj4gc3RydWN0dXJlLg0KPiANCj4gRm9yIHBlcmZv cm1hbmNlIHJlYXNvbnMsIHRoZSBhZGRyZXNzIG9mIHRoZSBmYXN0LXBhdGggZnVuY3Rpb25zIG9m IHRoZQ0KPiBSZWdFeCBkcml2ZXIgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgKnJlZ2V4X2Rldl9v cHMqIHN0cnVjdHVyZS4NCj4gSW5zdGVhZCwgdGhleSBhcmUgZGlyZWN0bHkgc3RvcmVkIGF0IHRo ZSBiZWdpbm5pbmcgb2YgdGhlICpydGVfcmVnZXhfZGV2Kg0KPiBzdHJ1Y3R1cmUgdG8gYXZvaWQg YW4gZXh0cmEgaW5kaXJlY3QgbWVtb3J5IGFjY2VzcyBkdXJpbmcgdGhlaXIgaW52b2NhdGlvbi4N Cj4gDQo+IFJURSBSZWdFeCBkZXZpY2UgZHJpdmVycyBkbyBub3QgdXNlIGludGVycnVwdHMgZm9y IGVucXVldWUgb3IgZGVxdWV1ZQ0KPiBvcGVyYXRpb24uIEluc3RlYWQsIFJlZ0V4IGRyaXZlcnMg ZXhwb3J0IFBvbGwtTW9kZSBlbnF1ZXVlIGFuZCBkZXF1ZXVlDQo+IGZ1bmN0aW9ucyB0byBhcHBs aWNhdGlvbnMuDQo+IA0KPiBUaGUgKmVucXVldWUqIG9wZXJhdGlvbiBzdWJtaXRzIGEgYnVyc3Qg b2YgUmVnRXggcGF0dGVybiBtYXRjaGluZw0KPiByZXF1ZXN0DQo+IHRvIHRoZSBSZWdFeCBkZXZp Y2UgYW5kIHRoZSAqZGVxdWV1ZSogb3BlcmF0aW9uIGdldHMgYSBidXJzdCBvZiBwYXR0ZXJuDQo+ IG1hdGNoaW5nIHJlc3BvbnNlIGZvciB0aGUgb25lcyBzdWJtaXR0ZWQgdGhyb3VnaCAqZW5xdWV1 ZSogb3BlcmF0aW9uLg0KPiANCj4gVHlwaWNhbCBhcHBsaWNhdGlvbiB1dGlsaXNhdGlvbiBvZiB0 aGUgUmVnRXggZGV2aWNlIEFQSSB3aWxsIGZvbGxvdyB0aGUNCj4gZm9sbG93aW5nIHByb2dyYW1t aW5nIGZsb3cuDQo+IA0KPiAtIHJ0ZV9yZWdleF9kZXZfY29uZmlndXJlKCkNCj4gLSBydGVfcmVn ZXhfcXVldWVfcGFpcl9zZXR1cCgpDQo+IC0gcnRlX3JlZ2V4X3J1bGVfZGJfdXBkYXRlKCkgTmVl ZHMgdG8gaW52b2tlIGlmIHByZWNvbXBpbGVkIHJ1bGUgZGF0YWJhc2UNCj4gbm90DQo+IHByb3Zp ZGVkIGluIHJ0ZV9yZWdleF9kZXZfY29uZmlnOjpydWxlX2RiIGZvciBydGVfcmVnZXhfZGV2X2Nv bmZpZ3VyZSgpDQo+IGFuZC9vciBhcHBsaWNhdGlvbiBuZWVkcyB0byB1cGRhdGUgcnVsZSBkYXRh YmFzZS4NCj4gLSBDcmVhdGUgb3IgcmV1c2UgZXhpdGluZyBtZW1wb29sIGZvciAqcnRlX3JlZ2V4 X29wcyogb2JqZWN0cy4NCj4gLSBydGVfcmVnZXhfZGV2X3N0YXJ0KCkNCj4gLSBydGVfcmVnZXhf ZW5xdWV1ZV9idXJzdCgpDQo+IC0gcnRlX3JlZ2V4X2RlcXVldWVfYnVyc3QoKQ0KPiANCj4gLS0t DQo+IA0KPiBjb25maWcvY29tbW9uX2Jhc2UgICAgICAgICAgICAgICAgIHwgICAgNSArDQo+IGRv Yy9hcGkvZG94eS1hcGktaW5kZXgubWQgICAgICAgICAgfCAgICAxICsNCj4gZG9jL2FwaS9kb3h5 LWFwaS5jb25mLmluICAgICAgICAgICB8ICAgIDEgKw0KPiBsaWIvTWFrZWZpbGUgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgMiArDQo+IGxpYi9saWJydGVfcmVnZXhkZXYvTWFrZWZpbGUgICAg ICAgfCAgIDIzICsNCj4gbGliL2xpYnJ0ZV9yZWdleGRldi9ydGVfcmVnZXhkZXYuYyB8ICAgIDUg Kw0KPiBsaWIvbGlicnRlX3JlZ2V4ZGV2L3J0ZV9yZWdleGRldi5oIHwgMTI0Nw0KPiArKysrKysr KysrKysrKysrKysrKysrKysrKysrDQo+IDcgZmlsZXMgY2hhbmdlZCwgMTI4NCBpbnNlcnRpb25z KCspDQo+IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGlicnRlX3JlZ2V4ZGV2L01ha2VmaWxlDQo+ IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGlicnRlX3JlZ2V4ZGV2L3J0ZV9yZWdleGRldi5jDQo+ IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGlicnRlX3JlZ2V4ZGV2L3J0ZV9yZWdleGRldi5oDQo+ IA0KPiBkaWZmIC0tZ2l0IGEvY29uZmlnL2NvbW1vbl9iYXNlIGIvY29uZmlnL2NvbW1vbl9iYXNl DQo+IGluZGV4IGU0MDZlNzgzNi4uOTg2MDkzZDZlIDEwMDY0NA0KPiAtLS0gYS9jb25maWcvY29t bW9uX2Jhc2UNCj4gKysrIGIvY29uZmlnL2NvbW1vbl9iYXNlDQo+IEBAIC03NDYsNiArNzQ2LDEx IEBADQo+IENPTkZJR19SVEVfTElCUlRFX1BNRF9EUEFBMl9RRE1BX1JBV0RFVj1uDQo+ICMNCj4g Q09ORklHX1JURV9MSUJSVEVfUE1EX0lGUEdBX1JBV0RFVj15DQo+IA0KPiArIw0KPiArIyBDb21w aWxlIHJlZ2V4IGRldmljZSBzdXBwb3J0DQo+ICsjDQo+ICtDT05GSUdfUlRFX0xJQlJURV9SRUdF WERFVj15DQo+ICsNCj4gIw0KPiAjIENvbXBpbGUgbGlicnRlX3JpbmcNCj4gIw0KPiBkaWZmIC0t Z2l0IGEvZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZCBiL2RvYy9hcGkvZG94eS1hcGktaW5kZXgu bWQNCj4gaW5kZXggNzE1MjQ4ZGQxLi5hMGJjMjdhZTQgMTAwNjQ0DQo+IC0tLSBhL2RvYy9hcGkv ZG94eS1hcGktaW5kZXgubWQNCj4gKysrIGIvZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZA0KPiBA QCAtMjYsNiArMjYsNyBAQCBUaGUgcHVibGljIEFQSSBoZWFkZXJzIGFyZSBncm91cGVkIGJ5IHRv cGljczoNCj4gW2V2ZW50X3RpbWVyX2FkYXB0ZXJdICAgIChAcmVmIHJ0ZV9ldmVudF90aW1lcl9h ZGFwdGVyLmgpLA0KPiBbZXZlbnRfY3J5cHRvX2FkYXB0ZXJdICAgKEByZWYgcnRlX2V2ZW50X2Ny eXB0b19hZGFwdGVyLmgpLA0KPiBbcmF3ZGV2XSAgICAgICAgICAgICAoQHJlZiBydGVfcmF3ZGV2 LmgpLA0KPiArICBbcmVnZXhkZXZdICAgICAgICAgICAoQHJlZiBydGVfcmVnZXhkZXYuaCksDQo+ IFttZXRyaWNzXSAgICAgICAgICAgIChAcmVmIHJ0ZV9tZXRyaWNzLmgpLA0KPiBbYml0cmF0ZV0g ICAgICAgICAgICAoQHJlZiBydGVfYml0cmF0ZS5oKSwNCj4gW2xhdGVuY3ldICAgICAgICAgICAg KEByZWYgcnRlX2xhdGVuY3lzdGF0cy5oKSwNCj4gZGlmZiAtLWdpdCBhL2RvYy9hcGkvZG94eS1h cGkuY29uZi5pbiBiL2RvYy9hcGkvZG94eS1hcGkuY29uZi5pbg0KPiBpbmRleCBiOTg5NmNiNjMu LjdhZGI4MjFiYiAxMDA2NDQNCj4gLS0tIGEvZG9jL2FwaS9kb3h5LWFwaS5jb25mLmluDQo+ICsr KyBiL2RvYy9hcGkvZG94eS1hcGkuY29uZi5pbg0KPiBAQCAtNTMsNiArNTMsNyBAQCBJTlBVVCAg ICAgICAgICAgICAgICAgICA9IEBUT1BESVJAL2RvYy9hcGkvZG94eS1hcGktDQo+IGluZGV4Lm1k IFwNCj4gQFRPUERJUkAvbGliL2xpYnJ0ZV9yYXdkZXYgXA0KPiBAVE9QRElSQC9saWIvbGlicnRl X3JjdSBcDQo+IEBUT1BESVJAL2xpYi9saWJydGVfcmVvcmRlciBcDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgIEBUT1BESVJAL2xpYi9saWJydGVfcmVnZXhkZXYgXA0KPiBAVE9QRElSQC9s aWIvbGlicnRlX3JpbmcgXA0KPiBAVE9QRElSQC9saWIvbGlicnRlX3NjaGVkIFwNCj4gQFRPUERJ UkAvbGliL2xpYnJ0ZV9zZWN1cml0eSBcDQo+IGRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9s aWIvTWFrZWZpbGUNCj4gaW5kZXggNzkxZTBkOTkxLi41N2RlOTY5MWEgMTAwNjQ0DQo+IC0tLSBh L2xpYi9NYWtlZmlsZQ0KPiArKysgYi9saWIvTWFrZWZpbGUNCj4gQEAgLTQ0LDYgKzQ0LDggQEAg REVQRElSUy1saWJydGVfZXZlbnRkZXYgOj0gbGlicnRlX2VhbCBsaWJydGVfcmluZw0KPiBsaWJy dGVfZXRoZGV2IGxpYnJ0ZV9oYXNoIFwNCj4gbGlicnRlX21lbXBvb2wgbGlicnRlX3RpbWVyIGxp YnJ0ZV9jcnlwdG9kZXYNCj4gRElSUy0kKENPTkZJR19SVEVfTElCUlRFX1JBV0RFVikgKz0gbGli cnRlX3Jhd2Rldg0KPiBERVBESVJTLWxpYnJ0ZV9yYXdkZXYgOj0gbGlicnRlX2VhbCBsaWJydGVf ZXRoZGV2DQo+ICtESVJTLSQoQ09ORklHX1JURV9MSUJSVEVfUkVHRVhERVYpICs9IGxpYnJ0ZV9y ZWdleGRldg0KPiArREVQRElSUy1saWJydGVfcmVnZXhkZXYgOj0gbGlicnRlX2VhbA0KPiBESVJT LSQoQ09ORklHX1JURV9MSUJSVEVfVkhPU1QpICs9IGxpYnJ0ZV92aG9zdA0KPiBERVBESVJTLWxp YnJ0ZV92aG9zdCA6PSBsaWJydGVfZWFsIGxpYnJ0ZV9tZW1wb29sIGxpYnJ0ZV9tYnVmDQo+IGxp YnJ0ZV9ldGhkZXYgXA0KPiAJCQlsaWJydGVfbmV0DQo+IGRpZmYgLS1naXQgYS9saWIvbGlicnRl X3JlZ2V4ZGV2L01ha2VmaWxlIGIvbGliL2xpYnJ0ZV9yZWdleGRldi9NYWtlZmlsZQ0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAuLjcyM2I0YjI4Yw0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL2xpYi9saWJydGVfcmVnZXhkZXYvTWFrZWZpbGUNCj4gQEAgLTAsMCAr MSwyMyBAQA0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsj IENvcHlyaWdodChDKSAyMDE5IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQo+ICsjDQo+ICsN Cj4gK2luY2x1ZGUgJChSVEVfU0RLKS9tay9ydGUudmFycy5taw0KPiArDQo+ICsjIGxpYnJhcnkg bmFtZQ0KPiArTElCID0gbGlicnRlX3JlZ2V4ZGV2LmENCj4gKw0KPiArIyBsaWJyYXJ5IHZlcnNp b24NCj4gK0xJQkFCSVZFUiA6PSAxDQo+ICsNCj4gKyMgYnVpbGQgZmxhZ3MNCj4gK0NGTEFHUyAr PSAtTzMNCj4gK0NGTEFHUyArPSAkKFdFUlJPUl9GTEFHUykNCj4gKw0KPiArIyBsaWJyYXJ5IHNv dXJjZSBmaWxlcw0KPiArU1JDUy15ICs9IHJ0ZV9yZWdleGRldi5jDQo+ICsNCj4gKyMgZXhwb3J0 IGluY2x1ZGUgZmlsZXMNCj4gK1NZTUxJTksteS1pbmNsdWRlICs9IHJ0ZV9yZWdleGRldi5oDQo+ ICsNCj4gK2luY2x1ZGUgJChSVEVfU0RLKS9tay9ydGUubGliLm1rDQo+IGRpZmYgLS1naXQgYS9s aWIvbGlicnRlX3JlZ2V4ZGV2L3J0ZV9yZWdleGRldi5jDQo+IGIvbGliL2xpYnJ0ZV9yZWdleGRl di9ydGVfcmVnZXhkZXYuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAw MDAuLmU1YmUwZjI5Yw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2xpYi9saWJydGVfcmVnZXhk ZXYvcnRlX3JlZ2V4ZGV2LmMNCj4gQEAgLTAsMCArMSw1IEBADQo+ICsvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQoQykgMjAxOSBNYXJ2ZWxs IEludGVybmF0aW9uYWwgTHRkLg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxydGVfcmVnZXhk ZXYuaD4NCj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmVnZXhkZXYvcnRlX3JlZ2V4ZGV2LmgN Cj4gYi9saWIvbGlicnRlX3JlZ2V4ZGV2L3J0ZV9yZWdleGRldi5oDQo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMC4uNzY1ZGE0YWFhDQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvbGliL2xpYnJ0ZV9yZWdleGRldi9ydGVfcmVnZXhkZXYuaA0KPiBAQCAtMCwwICsxLDEy NDcgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gKyAq IENvcHlyaWdodChDKSAyMDE5IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQo+ICsgKi8NCj4g Kw0KPiArI2lmbmRlZiBfUlRFX1JFR0VYREVWX0hfDQo+ICsjZGVmaW5lIF9SVEVfUkVHRVhERVZf SF8NCj4gKw0KPiArLyoqDQo+ICsgKiBAZmlsZQ0KPiArICoNCj4gKyAqIFJURSBSZWdFeCBEZXZp Y2UgQVBJDQo+ICsgKg0KPiArICogRGVmaW5lcyBSVEUgUmVnRXggRGV2aWNlIEFQSXMgZm9yIFJl Z0V4IG9wZXJhdGlvbnMgYW5kIGl0cyBwcm92aXNpb25pbmcuDQo+ICsgKg0KPiArICogVGhlIFJl Z0V4IERldmljZSBBUEkgaXMgY29tcG9zZWQgb2YgdHdvIHBhcnRzOg0KPiArICoNCj4gKyAqIC0g VGhlIGFwcGxpY2F0aW9uLW9yaWVudGVkIFJlZ0V4IEFQSSB0aGF0IGluY2x1ZGVzIGZ1bmN0aW9u cyB0byBzZXR1cA0KPiArICogICBhIFJlZ0V4IGRldmljZSAoY29uZmlndXJlIGl0LCBzZXR1cCBp dHMgcXVldWUgcGFpcnMgYW5kIHN0YXJ0IGl0KSwNCj4gKyAqICAgdXBkYXRlIHRoZSBydWxlIGRh dGFiYXNlIGFuZCBzbyBvbi4NCj4gKyAqDQo+ICsgKiAtIFRoZSBkcml2ZXItb3JpZW50ZWQgUmVn RXggQVBJIHRoYXQgZXhwb3J0cyBhIGZ1bmN0aW9uIGFsbG93aW5nDQo+ICsgKiAgIGEgUmVnRXgg cG9sbCBNb2RlIERyaXZlciAoUE1EKSB0byBzaW11bHRhbmVvdXNseSByZWdpc3RlciBpdHNlbGYg YXMNCj4gKyAqICAgYSBSZWdFeCBkZXZpY2UgZHJpdmVyLg0KPiArICoNCj4gKyAqIFJlZ0V4IGRl dmljZSBjb21wb25lbnRzIGFuZCBkZWZpbml0aW9uczoNCj4gKyAqDQo+ICsgKiAgICAgKy0tLS0t LS0tLS0tLS0tLS0tKw0KPiArICogICAgIHwgICAgICAgICAgICAgICAgIHwNCj4gKyAqICAgICB8 ICAgICAgICAgICAgICAgICBvLS0tLS0tLS0tKyAgICBydGVfcmVnZXhfW2VufGRlXXF1ZXVlX2J1 cnN0KCkNCj4gKyAqICAgICB8ICAgUENSRSBiYXNlZCAgICBvLS0tLS0tKyAgfCAgICAgICAgICAg ICAgIHwNCj4gKyAqICAgICB8ICBSZWdFeCBwYXR0ZXJuICB8ICAgICAgfCAgfCAgKy0tLS0tLS0t KyAgIHwNCj4gKyAqICAgICB8IG1hdGNoaW5nIGVuZ2luZSBvLS0tLS0tKy0tKy0tbyAgICAgICAg fCAgIHwgICAgKy0tLS0tLSsNCj4gKyAqICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAgfCAg fCAgfCBxdWV1ZSAgfDw9PW89PT0+fENvcmUgMHwNCj4gKyAqICAgICB8ICAgICAgICAgICAgICAg ICBvLS0tLSsgfCAgfCAgfCBwYWlyIDAgfCAgICAgICAgfCAgICAgIHwNCj4gKyAqICAgICB8ICAg ICAgICAgICAgICAgICB8ICAgIHwgfCAgfCAgKy0tLS0tLS0tKyAgICAgICAgKy0tLS0tLSsNCj4g KyAqICAgICArLS0tLS0tLS0tLS0tLS0tLS0rICAgIHwgfCAgfA0KPiArICogICAgICAgICAgICBe ICAgICAgICAgICAgICAgfCB8ICB8ICArLS0tLS0tLS0rDQo+ICsgKiAgICAgICAgICAgIHwgICAg ICAgICAgICAgICB8IHwgIHwgIHwgICAgICAgIHwgICAgICAgICstLS0tLS0rDQo+ICsgKiAgICAg ICAgICAgIHwgICAgICAgICAgICAgICB8ICstLSstLW8gcXVldWUgIHw8PT09PT09PnxDb3JlIDF8 DQo+ICsgKiAgICAgICAgUnVsZXxEYXRhYmFzZSAgICAgICB8ICAgIHwgIHwgcGFpciAxIHwgICAg ICAgIHwgICAgICB8DQo+ICsgKiAgICAgKy0tLS0tLSstLS0tLS0tLS0tKyAgICB8ICAgIHwgICst LS0tLS0tLSsgICAgICAgICstLS0tLS0rDQo+ICsgKiAgICAgfCAgICAgR3JvdXAgMCAgICAgfCAg ICB8ICAgIHwNCj4gKyAqICAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAgIHwgICAgfCAgKy0tLS0t LS0tKyAgICAgICAgKy0tLS0tLSsNCj4gKyAqICAgICB8IHwgUnVsZXMgMC4ubiAgfCB8ICAgIHwg ICAgfCAgfCAgICAgICAgfCAgICAgICAgfENvcmUgMnwNCj4gKyAqICAgICB8ICstLS0tLS0tLS0t LS0tKyB8ICAgIHwgICAgKy0tbyBxdWV1ZSAgfDw9PT09PT0+fCAgICAgIHwNCj4gKyAqICAgICB8 ICAgICBHcm91cCAxICAgICB8ICAgIHwgICAgICAgfCBwYWlyIDIgfCAgICAgICAgKy0tLS0tLSsN Cj4gKyAqICAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAgIHwgICAgICAgKy0tLS0tLS0tKw0KPiAr ICogICAgIHwgfCBSdWxlcyAwLi5uICB8IHwgICAgfA0KPiArICogICAgIHwgKy0tLS0tLS0tLS0t LS0rIHwgICAgfCAgICAgICArLS0tLS0tLS0rDQo+ICsgKiAgICAgfCAgICAgR3JvdXAgMiAgICAg fCAgICB8ICAgICAgIHwgICAgICAgIHwgICAgICAgICstLS0tLS0rDQo+ICsgKiAgICAgfCArLS0t LS0tLS0tLS0tLSsgfCAgICB8ICAgICAgIHwgcXVldWUgIHw8PT09PT09PnxDb3JlIG58DQo+ICsg KiAgICAgfCB8IFJ1bGVzIDAuLm4gIHwgfCAgICArLS0tLS0tLW8gcGFpciBuIHwgICAgICAgIHwg ICAgICB8DQo+ICsgKiAgICAgfCArLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICAgICstLS0tLS0t LSsgICAgICAgICstLS0tLS0rDQo+ICsgKiAgICAgfCAgICAgR3JvdXAgbiAgICAgfA0KPiArICog ICAgIHwgKy0tLS0tLS0tLS0tLS0rIHw8LS0tLS0tLXJ0ZV9yZWdleF9ydWxlX2RiX3VwZGF0ZSgp DQo+ICsgKiAgICAgfCB8IFJ1bGVzIDAuLm4gIHwgfDwtLS0tLS0tcnRlX3JlZ2V4X3J1bGVfZGJf aW1wb3J0KCkNCj4gKyAqICAgICB8ICstLS0tLS0tLS0tLS0tKyB8LS0tLS0tLT5ydGVfcmVnZXhf cnVsZV9kYl9leHBvcnQoKQ0KPiArICogICAgICstLS0tLS0tLS0tLS0tLS0tLSsNCj4gKyAqDQo+ ICsgKiBSZWdFeDogQSByZWd1bGFyIGV4cHJlc3Npb24gaXMgYSBjb25jaXNlIGFuZCBmbGV4aWJs ZSBtZWFucyBmb3IgbWF0Y2hpbmcNCj4gKyAqIHN0cmluZ3Mgb2YgdGV4dCwgc3VjaCBhcyBwYXJ0 aWN1bGFyIGNoYXJhY3RlcnMsIHdvcmRzLCBvciBwYXR0ZXJucyBvZg0KPiArICogY2hhcmFjdGVy cy4gQSBjb21tb24gYWJicmV2aWF0aW9uIGZvciB0aGlzIGlzIOKAnFJlZ0V44oCdLg0KPiArICoN Cj4gKyAqIFJlZ0V4IGRldmljZTogQSBoYXJkd2FyZSBvciBzb2Z0d2FyZS1iYXNlZCBpbXBsZW1l bnRhdGlvbiBvZiBSZWdFeA0KPiArICogZGV2aWNlIEFQSSBmb3IgUENSRSBiYXNlZCBwYXR0ZXJu IG1hdGNoaW5nIHN5bnRheCBhbmQgc2VtYW50aWNzLg0KPiArICoNCj4gKyAqIFBDUkUgUmVnRXgg c3ludGF4IGFuZCBzZW1hbnRpY3Mgc3BlY2lmaWNhdGlvbjoNCj4gKyAqDQo+IGh0dHBzOi8vZXVy MDMuc2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwJTNBJTJGJTJGcmVn ZXgNCj4ga2l0LnNvdXJjZWZvcmdlLm5ldCUyRkRvY3VtZW50YXRpb24lMkZwY3JlJTJGcGNyZXBh dHRlcm4uaHRtbCZhbXA7ZA0KPiBhdGE9MDIlN0MwMSU3Q3NoYWhhZnMlNDBtZWxsYW5veC5jb20l N0NkZjkzNDE2Y2Y0ZTg0OThhOTgyYzA4ZDcyMQ0KPiA3NDg5MzclN0NhNjUyOTcxYzdkMmU0ZDli YTZhNGQxNDkyNTZmNDYxYiU3QzAlN0MwJTdDNjM3MDE0NjU2NzMNCj4gOTk5MzEzMSZhbXA7c2Rh dGE9QjBMU011YmxkRHkzVWxGNTVaM3doaE5pUnE2ZXAxcHhCOFJydDVESXRmdyUzDQo+IEQmYW1w O3Jlc2VydmVkPTANCj4gKyAqDQo+ICsgKiBSZWdFeCBxdWV1ZSBwYWlyOiBFYWNoIFJlZ0V4IGRl dmljZSBzaG91bGQgaGF2ZSBvbmUgb3IgbW9yZSBxdWV1ZQ0KPiBwYWlyIHRvDQo+ICsgKiB0cmFu c21pdCBhIGJ1cnN0IG9mIHBhdHRlcm4gbWF0Y2hpbmcgcmVxdWVzdCBhbmQgcmVjZWl2ZSBhIGJ1 cnN0IG9mDQo+ICsgKiByZWNlaXZlIHRoZSBwYXR0ZXJuIG1hdGNoaW5nIHJlc3BvbnNlLiBUaGUg cGF0dGVybiBtYXRjaGluZw0KPiByZXF1ZXN0L3Jlc3BvbnNlDQo+ICsgKiBlbWJlZGRlZCBpbiAq cnRlX3JlZ2V4X29wcyogc3RydWN0dXJlLg0KPiArICoNCj4gKyAqIFJ1bGU6IEEgcGF0dGVybiBt YXRjaGluZyBydWxlIGV4cHJlc3NlZCBpbiBQQ1JFIFJlZ0V4IHN5bnRheCBhbG9uZyB3aXRoDQo+ ICsgKiBNYXRjaCBJRCBhbmQgR3JvdXAgSUQgdG8gaWRlbnRpZnkgdGhlIHJ1bGUgdXBvbiB0aGUg bWF0Y2guDQo+ICsgKg0KPiArICogUnVsZSBkYXRhYmFzZTogVGhlIFJlZ0V4IGRldmljZSBhY2Nl cHRzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kDQo+IGNvbnZlcnRzIHRoZW0NCj4gKyAqIGludG8g YSBjb21waWxlZCBydWxlIGRhdGFiYXNlIHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBzY2FuIGRh dGEuDQo+ICsgKiBDb21waWxhdGlvbiBhbGxvd3MgdGhlIGRldmljZSB0byBhbmFseXplIHRoZSBn aXZlbiBwYXR0ZXJuKHMpIGFuZA0KPiArICogcHJlLWRldGVybWluZSBob3cgdG8gc2NhbiBmb3Ig dGhlc2UgcGF0dGVybnMgaW4gYW4gb3B0aW1pemVkIGZhc2hpb24NCj4gdGhhdA0KPiArICogd291 bGQgYmUgZmFyIHRvbyBleHBlbnNpdmUgdG8gY29tcHV0ZSBhdCBydW4tdGltZS4gQSBydWxlIGRh dGFiYXNlDQo+IGNvbnRhaW5zDQo+ICsgKiBhIHNldCBvZiBydWxlcyB0aGF0IGNvbXBpbGVkIGlu IGRldmljZSBzcGVjaWZpYyBiaW5hcnkgZm9ybS4NCj4gKyAqDQo+ICsgKiBNYXRjaCBJRCBvciBS dWxlIElEOiBBIHVuaXF1ZSBpZGVudGlmaWVyIHByb3ZpZGVkIGF0IHRoZSB0aW1lIG9mIHJ1bGUN Cj4gKyAqIGNyZWF0aW9uIGZvciB0aGUgYXBwbGljYXRpb24gdG8gaWRlbnRpZnkgdGhlIHJ1bGUg dXBvbiBtYXRjaC4NCj4gKyAqDQo+ICsgKiBHcm91cCBJRDogR3JvdXAgb2YgcnVsZXMgY2FuIGJl IGdyb3VwZWQgdW5kZXIgb25lIGdyb3VwIElEIHRvIGVuYWJsZQ0KPiArICogcnVsZSBpc29sYXRp b24gYW5kIGVmZmVjdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLiBBIHVuaXF1ZSBncm91cCBpZGVudGlm aWVyDQo+ICsgKiBwcm92aWRlZCBhdCB0aGUgdGltZSBvZiBydWxlIGNyZWF0aW9uIGZvciB0aGUg YXBwbGljYXRpb24gdG8gaWRlbnRpZnkgdGhlDQo+ICsgKiBydWxlIHVwb24gbWF0Y2guDQo+ICsg Kg0KPiArICogU2NhbjogQSBwYXR0ZXJuIG1hdGNoaW5nIHJlcXVlc3QgdGhyb3VnaCAqZW5xdWV1 ZSogQVBJLg0KPiArICoNCj4gKyAqIEl0IG1heSBwb3NzaWJsZSB0aGF0IGEgZ2l2ZW4gUmVnRXgg ZGV2aWNlIG1heSBub3Qgc3VwcG9ydCBhbGwgdGhlIGZlYXR1cmVzDQo+ICsgKiBvZiBQQ1JFLiBU aGUgYXBwbGljYXRpb24gbWF5IHByb2JlIHVuc3VwcG9ydGVkIGZlYXR1cmVzIHRocm91Z2gNCj4g KyAqIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCj4gKyAqDQo+ ICsgKiBCeSBkZWZhdWx0LCBhbGwgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgUmVnRXggRGV2aWNlIEFQ SSBleHBvcnRlZCBieSBhIFBNRA0KPiArICogYXJlIGxvY2stZnJlZSBmdW5jdGlvbnMgd2hpY2gg YXNzdW1lIHRvIG5vdCBiZSBpbnZva2VkIGluIHBhcmFsbGVsIG9uDQo+ICsgKiBkaWZmZXJlbnQg bG9naWNhbCBjb3JlcyB0byB3b3JrIG9uIHRoZSBzYW1lIHRhcmdldCBvYmplY3QuIEZvciBpbnN0 YW5jZSwNCj4gKyAqIHRoZSBkZXF1ZXVlIGZ1bmN0aW9uIG9mIGEgUE1EIGNhbm5vdCBiZSBpbnZv a2VkIGluIHBhcmFsbGVsIG9uIHR3bw0KPiBsb2dpY2FsDQo+ICsgKiBjb3JlcyB0byBvcGVyYXRl cyBvbiBzYW1lIFJlZ0V4IHF1ZXVlIHBhaXIuIE9mIGNvdXJzZSwgdGhpcyBmdW5jdGlvbg0KPiAr ICogY2FuIGJlIGludm9rZWQgaW4gcGFyYWxsZWwgYnkgZGlmZmVyZW50IGxvZ2ljYWwgY29yZSBv biBkaWZmZXJlbnQgcXVldWUNCj4gcGFpci4NCj4gKyAqIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0 eSBvZiB0aGUgdXBwZXIgbGV2ZWwgYXBwbGljYXRpb24gdG8gZW5mb3JjZSB0aGlzIHJ1bGUuDQo+ ICsgKg0KPiArICogSW4gYWxsIGZ1bmN0aW9ucyBvZiB0aGUgUmVnRXggQVBJLCB0aGUgUmVnRXgg ZGV2aWNlIGlzDQo+ICsgKiBkZXNpZ25hdGVkIGJ5IGFuIGludGVnZXIgPj0gMCBuYW1lZCB0aGUg ZGV2aWNlIGlkZW50aWZpZXIgKmRldl9pZCoNCj4gKyAqDQo+ICsgKiBBdCB0aGUgUmVnRXggZHJp dmVyIGxldmVsLCBSZWdFeCBkZXZpY2VzIGFyZSByZXByZXNlbnRlZCBieSBhIGdlbmVyaWMNCj4g KyAqIGRhdGEgc3RydWN0dXJlIG9mIHR5cGUgKnJ0ZV9yZWdleF9kZXYqLg0KPiArICoNCj4gKyAq IFJlZ0V4IGRldmljZXMgYXJlIGR5bmFtaWNhbGx5IHJlZ2lzdGVyZWQgZHVyaW5nIHRoZSBQQ0kv U29DIGRldmljZQ0KPiBwcm9iaW5nDQo+ICsgKiBwaGFzZSBwZXJmb3JtZWQgYXQgRUFMIGluaXRp YWxpemF0aW9uIHRpbWUuDQo+ICsgKiBXaGVuIGEgUmVnRXggZGV2aWNlIGlzIGJlaW5nIHByb2Jl ZCwgYSAqcnRlX3JlZ2V4X2Rldiogc3RydWN0dXJlIGFuZA0KPiArICogYSBuZXcgZGV2aWNlIGlk ZW50aWZpZXIgYXJlIGFsbG9jYXRlZCBmb3IgdGhhdCBkZXZpY2UuIFRoZW4sIHRoZQ0KPiArICog cmVnZXhfZGV2X2luaXQoKSBmdW5jdGlvbiBzdXBwbGllZCBieSB0aGUgUmVnRXggZHJpdmVyIG1h dGNoaW5nIHRoZQ0KPiBwcm9iZWQNCj4gKyAqIGRldmljZSBpcyBpbnZva2VkIHRvIHByb3Blcmx5 IGluaXRpYWxpemUgdGhlIGRldmljZS4NCj4gKyAqDQo+ICsgKiBUaGUgcm9sZSBvZiB0aGUgZGV2 aWNlIGluaXQgZnVuY3Rpb24gY29uc2lzdHMgb2YgcmVzZXR0aW5nIHRoZSBoYXJkd2FyZSBvcg0K PiArICogc29mdHdhcmUgUmVnRXggZHJpdmVyIGltcGxlbWVudGF0aW9ucy4NCj4gKyAqDQo+ICsg KiBJZiB0aGUgZGV2aWNlIGluaXQgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoZSBjb3JyZXNw b25kZW5jZSBiZXR3ZWVuDQo+ICsgKiB0aGUgZGV2aWNlIGlkZW50aWZpZXIgYXNzaWduZWQgdG8g dGhlIG5ldyBkZXZpY2UgYW5kIGl0cyBhc3NvY2lhdGVkDQo+ICsgKiAqcnRlX3JlZ2V4X2Rldiog c3RydWN0dXJlIGlzIGVmZmVjdGl2ZWx5IHJlZ2lzdGVyZWQuDQo+ICsgKiBPdGhlcndpc2UsIGJv dGggdGhlICpydGVfcmVnZXhfZGV2KiBzdHJ1Y3R1cmUgYW5kIHRoZSBkZXZpY2UgaWRlbnRpZmll cg0KPiBhcmUNCj4gKyAqIGZyZWVkLg0KPiArICoNCj4gKyAqIFRoZSBmdW5jdGlvbnMgZXhwb3J0 ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIFJlZ0V4IEFQSSB0byBzZXR1cCBhIGRldmljZQ0KPiArICog ZGVzaWduYXRlZCBieSBpdHMgZGV2aWNlIGlkZW50aWZpZXIgbXVzdCBiZSBpbnZva2VkIGluIHRo ZSBmb2xsb3dpbmcgb3JkZXI6DQo+ICsgKiAgICAgLSBydGVfcmVnZXhfZGV2X2NvbmZpZ3VyZSgp DQo+ICsgKiAgICAgLSBydGVfcmVnZXhfcXVldWVfcGFpcl9zZXR1cCgpDQo+ICsgKiAgICAgLSBy dGVfcmVnZXhfZGV2X3N0YXJ0KCkNCj4gKyAqDQo+ICsgKiBUaGVuLCB0aGUgYXBwbGljYXRpb24g Y2FuIGludm9rZSwgaW4gYW55IG9yZGVyLCB0aGUgZnVuY3Rpb25zDQo+ICsgKiBleHBvcnRlZCBi eSB0aGUgUmVnRXggQVBJIHRvIGVucXVldWUgcGF0dGVybiBtYXRjaGluZyBqb2IsIGRlcXVldWUN Cj4gcGF0dGVybg0KPiArICogbWF0Y2hpbmcgcmVzcG9uc2UsIGdldCB0aGUgc3RhdHMsIHVwZGF0 ZSB0aGUgcnVsZSBkYXRhYmFzZSwNCj4gKyAqIGdldC9zZXQgZGV2aWNlIGF0dHJpYnV0ZXMgYW5k IHNvIG9uDQo+ICsgKg0KPiArICogSWYgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGNoYW5nZSB0 aGUgY29uZmlndXJhdGlvbiAoaS5lLiBjYWxsDQo+ICsgKiBydGVfcmVnZXhfZGV2X2NvbmZpZ3Vy ZSgpIG9yIHJ0ZV9yZWdleF9xdWV1ZV9wYWlyX3NldHVwKCkpLCBpdCBtdXN0DQo+IGNhbGwNCj4g KyAqIHJ0ZV9yZWdleF9kZXZfc3RvcCgpIGZpcnN0IHRvIHN0b3AgdGhlIGRldmljZSBhbmQgdGhl biBkbyB0aGUNCj4gcmVjb25maWd1cmF0aW9uDQo+ICsgKiBiZWZvcmUgY2FsbGluZyBydGVfcmVn ZXhfZGV2X3N0YXJ0KCkgYWdhaW4uIFRoZSBlbnF1ZXVlIGFuZCBkZXF1ZXVlDQo+ICsgKiBmdW5j dGlvbnMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIHdoZW4gdGhlIGRldmljZSBpcyBzdG9wcGVkLg0K PiArICoNCj4gKyAqIEZpbmFsbHksIGFuIGFwcGxpY2F0aW9uIGNhbiBjbG9zZSBhIFJlZ0V4IGRl dmljZSBieSBpbnZva2luZyB0aGUNCj4gKyAqIHJ0ZV9yZWdleF9kZXZfY2xvc2UoKSBmdW5jdGlv bi4NCj4gKyAqDQo+ICsgKiBFYWNoIGZ1bmN0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbiBSZWdFeCBB UEkgaW52b2tlcyBhIHNwZWNpZmljIGZ1bmN0aW9uDQo+ICsgKiBvZiB0aGUgUE1EIHRoYXQgY29u dHJvbHMgdGhlIHRhcmdldCBkZXZpY2UgZGVzaWduYXRlZCBieSBpdHMgZGV2aWNlDQo+ICsgKiBp ZGVudGlmaWVyLg0KPiArICoNCj4gKyAqIEZvciB0aGlzIHB1cnBvc2UsIGFsbCBkZXZpY2Utc3Bl Y2lmaWMgZnVuY3Rpb25zIG9mIGEgUmVnRXggZHJpdmVyIGFyZQ0KPiArICogc3VwcGxpZWQgdGhy b3VnaCBhIHNldCBvZiBwb2ludGVycyBjb250YWluZWQgaW4gYSBnZW5lcmljIHN0cnVjdHVyZSBv ZiB0eXBlDQo+ICsgKiAqcmVnZXhfZGV2X29wcyouDQo+ICsgKiBUaGUgYWRkcmVzcyBvZiB0aGUg KnJlZ2V4X2Rldl9vcHMqIHN0cnVjdHVyZSBpcyBzdG9yZWQgaW4gdGhlDQo+ICpydGVfcmVnZXhf ZGV2Kg0KPiArICogc3RydWN0dXJlIGJ5IHRoZSBkZXZpY2UgaW5pdCBmdW5jdGlvbiBvZiB0aGUg UmVnRXggZHJpdmVyLCB3aGljaCBpcw0KPiArICogaW52b2tlZCBkdXJpbmcgdGhlIFBDSS9Tb0Mg ZGV2aWNlIHByb2JpbmcgcGhhc2UsIGFzIGV4cGxhaW5lZCBlYXJsaWVyLg0KPiArICoNCj4gKyAq IEluIG90aGVyIHdvcmRzLCBlYWNoIGZ1bmN0aW9uIG9mIHRoZSBSZWdFeCBBUEkgc2ltcGx5IHJl dHJpZXZlcyB0aGUNCj4gKyAqICpydGVfcmVnZXhfZGV2KiBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3 aXRoIHRoZSBkZXZpY2UgaWRlbnRpZmllciBhbmQNCj4gKyAqIHBlcmZvcm1zIGFuIGluZGlyZWN0 IGludm9jYXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgZHJpdmVyIGZ1bmN0aW9uDQo+ICsgKiBz dXBwbGllZCBpbiB0aGUgKnJlZ2V4X2Rldl9vcHMqIHN0cnVjdHVyZSBvZiB0aGUgKnJ0ZV9yZWdl eF9kZXYqDQo+IHN0cnVjdHVyZS4NCj4gKyAqDQo+ICsgKiBGb3IgcGVyZm9ybWFuY2UgcmVhc29u cywgdGhlIGFkZHJlc3Mgb2YgdGhlIGZhc3QtcGF0aCBmdW5jdGlvbnMgb2YgdGhlDQo+ICsgKiBS ZWdFeCBkcml2ZXIgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgKnJlZ2V4X2Rldl9vcHMqIHN0cnVj dHVyZS4NCj4gKyAqIEluc3RlYWQsIHRoZXkgYXJlIGRpcmVjdGx5IHN0b3JlZCBhdCB0aGUgYmVn aW5uaW5nIG9mIHRoZSAqcnRlX3JlZ2V4X2RldioNCj4gKyAqIHN0cnVjdHVyZSB0byBhdm9pZCBh biBleHRyYSBpbmRpcmVjdCBtZW1vcnkgYWNjZXNzIGR1cmluZyB0aGVpcg0KPiBpbnZvY2F0aW9u Lg0KPiArICoNCj4gKyAqIFJURSBSZWdFeCBkZXZpY2UgZHJpdmVycyBkbyBub3QgdXNlIGludGVy cnVwdHMgZm9yIGVucXVldWUgb3IgZGVxdWV1ZQ0KPiArICogb3BlcmF0aW9uLiBJbnN0ZWFkLCBS ZWdFeCBkcml2ZXJzIGV4cG9ydCBQb2xsLU1vZGUgZW5xdWV1ZSBhbmQNCj4gZGVxdWV1ZQ0KPiAr ICogZnVuY3Rpb25zIHRvIGFwcGxpY2F0aW9ucy4NCj4gKyAqDQo+ICsgKiBUaGUgKmVucXVldWUq IG9wZXJhdGlvbiBzdWJtaXRzIGEgYnVyc3Qgb2YgUmVnRXggcGF0dGVybiBtYXRjaGluZw0KPiBy ZXF1ZXN0DQo+ICsgKiB0byB0aGUgUmVnRXggZGV2aWNlIGFuZCB0aGUgKmRlcXVldWUqIG9wZXJh dGlvbiBnZXRzIGEgYnVyc3Qgb2YgcGF0dGVybg0KPiArICogbWF0Y2hpbmcgcmVzcG9uc2UgZm9y IHRoZSBvbmVzIHN1Ym1pdHRlZCB0aHJvdWdoICplbnF1ZXVlKg0KPiBvcGVyYXRpb24uDQo+ICsg Kg0KPiArICogVHlwaWNhbCBhcHBsaWNhdGlvbiB1dGlsaXNhdGlvbiBvZiB0aGUgUmVnRXggZGV2 aWNlIEFQSSB3aWxsIGZvbGxvdyB0aGUNCj4gKyAqIGZvbGxvd2luZyBwcm9ncmFtbWluZyBmbG93 Lg0KPiArICoNCj4gKyAqIC0gcnRlX3JlZ2V4X2Rldl9jb25maWd1cmUoKQ0KPiArICogLSBydGVf cmVnZXhfcXVldWVfcGFpcl9zZXR1cCgpDQo+ICsgKiAtIHJ0ZV9yZWdleF9ydWxlX2RiX3VwZGF0 ZSgpIE5lZWRzIHRvIGludm9rZSBpZiBwcmVjb21waWxlZCBydWxlDQo+IGRhdGFiYXNlIG5vdA0K PiArICogICBwcm92aWRlZCBpbiBydGVfcmVnZXhfZGV2X2NvbmZpZzo6cnVsZV9kYiBmb3INCj4g cnRlX3JlZ2V4X2Rldl9jb25maWd1cmUoKQ0KPiArICogICBhbmQvb3IgYXBwbGljYXRpb24gbmVl ZHMgdG8gdXBkYXRlIHJ1bGUgZGF0YWJhc2UuDQo+ICsgKiAtIENyZWF0ZSBvciByZXVzZSBleGl0 aW5nIG1lbXBvb2wgZm9yICpydGVfcmVnZXhfb3BzKiBvYmplY3RzLg0KPiArICogLSBydGVfcmVn ZXhfZGV2X3N0YXJ0KCkNCj4gKyAqIC0gcnRlX3JlZ2V4X2VucXVldWVfYnVyc3QoKQ0KPiArICog LSBydGVfcmVnZXhfZGVxdWV1ZV9idXJzdCgpDQo+ICsgKg0KPiArICovDQo+ICsNCj4gKyNpZmRl ZiBfX2NwbHVzcGx1cw0KPiArZXh0ZXJuICJDIiB7DQo+ICsjZW5kaWYNCj4gKw0KPiArI2luY2x1 ZGUgPHJ0ZV9jb21tb24uaD4NCj4gKyNpbmNsdWRlIDxydGVfY29uZmlnLmg+DQo+ICsjaW5jbHVk ZSA8cnRlX2Rldi5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9lcnJuby5oPg0KPiArI2luY2x1ZGUgPHJ0 ZV9tZW1vcnkuaD4NCj4gKw0KPiArLyoqDQo+ICsgKiBHZXQgdGhlIHRvdGFsIG51bWJlciBvZiBS ZWdFeCBkZXZpY2VzIHRoYXQgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseQ0KPiArICogaW5pdGlhbGlz ZWQuDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogICBUaGUgdG90YWwgbnVtYmVyIG9mIHVz YWJsZSBSZWdFeCBkZXZpY2VzLg0KPiArICovDQo+ICt1aW50OF90DQo+ICtydGVfcmVnZXhfZGV2 X2NvdW50KHZvaWQpOw0KPiArDQo+ICsvKioNCj4gKyAqIEdldCB0aGUgZGV2aWNlIGlkZW50aWZp ZXIgZm9yIHRoZSBuYW1lZCBSZWdFeCBkZXZpY2UuDQo+ICsgKg0KPiArICogQHBhcmFtIG5hbWUN Cj4gKyAqICAgUmVnRXggZGV2aWNlIG5hbWUgdG8gc2VsZWN0IHRoZSBSZWdFeCBkZXZpY2UgaWRl bnRpZmllci4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFJldHVybnMgUmVnRXggZGV2 aWNlIGlkZW50aWZpZXIgb24gc3VjY2Vzcy4NCj4gKyAqICAgLSA8MDogRmFpbHVyZSB0byBmaW5k IG5hbWVkIFJlZ0V4IGRldmljZS4NCj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhfZGV2X2dl dF9kZXZfaWQoY29uc3QgY2hhciAqbmFtZSk7DQo+ICsNCj4gKy8qIEVudW1lcmF0ZXMgUmVnRXgg ZGV2aWNlIGNhcGFiaWxpdGllcyAqLw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVWX0NBUEFfUlVO VElNRV9DT01QSUxBVElPTl9GICgxVUxMIDw8IDApDQo+ICsvKio8IFJlZ0V4IGRldmljZSBkb2Vz IHN1cHBvcnQgY29tcGlsaW5nIHRoZSBydWxlcyBhdCBydW50aW1lIHVubGlrZQ0KPiArICogbG9h ZGluZyBvbmx5IHRoZSBwcmUtYnVpbHQgcnVsZSBkYXRhYmFzZSB1c2luZw0KPiArICogc3RydWN0 IHJ0ZV9yZWdleF9kZXZfY29uZmlnOjpydWxlX2RiIGluIHJ0ZV9yZWdleF9kZXZfY29uZmlndXJl KCkNCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfY29uZmlnOjpydWxlX2RiLCBydGVf cmVnZXhfZGV2X2NvbmZpZ3VyZSgpDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2lu Zm86OnJlZ2V4X2Rldl9jYXBhDQo+ICsgKi8NCj4gKw0KPiArDQo+ICsvKiBFbnVtZXJhdGVzIHVu c3VwcG9ydGVkIFBDUkUgZmVhdHVyZXMgZm9yIHRoZSBSZWdFeCBkZXZpY2UgKi8NCj4gKyNkZWZp bmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQX1NUQVJUX0FOQ0hPUl9GICgxVUxMIDw8IDApDQo+ ICsvKio8IFJlZ0V4IGRldmljZSBkb2Vzbid0IHN1cHBvcnQgUENSRSBBbmNob3IgdG8gc3RhcnQg b2YgbWF0Y2ggZmxhZy4NCj4gKyAqIEV4YW1wbGUgUmVnRXggaXMgJy9cR2Zvb1xkLycuIEhlcmUg J1xHJyBhc3NlcnRzIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgdGhlDQo+ICsgKiBwcmV2aW91cyBt YXRjaCBvciB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyBmb3IgdGhlIGZpcnN0IG1hdGNoLg0KPiAr ICogVGhpcyBwb3NpdGlvbiB3aWxsIGNoYW5nZSBlYWNoIHRpbWUgdGhlIFJlZ0V4IGlzIGFwcGxp ZWQgdG8gdGhlIHN1YmplY3QNCj4gKyAqIHN0cmluZy4gSWYgdGhlIFJlZ0V4IGlzIGFwcGxpZWQg dG8gJ2ZvbzFmb28yWmZvbzMnIHRoZSBmaXJzdCB0d28gbWF0Y2hlcyB3aWxsDQo+ICsgKiBiZSBz dWNjZXNzZnVsIGZvciAnZm9vMWZvbzInIGFuZCBmYWlsIGZvciAnWmZvbzMnLg0KPiArICogQHNl ZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpwY3JlX3Vuc3VwX2ZsYWdzDQo+ICsgKi8NCj4g Kw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5TVVBfQVRPTUlDX0dST1VQSU5HX0Yg KDFVTEwgPDwNCj4gMSkNCj4gKy8qKjwgUmVnRXggZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBQQ1JF IEF0b21pYyBncm91cGluZy4NCj4gKyAqIEF0b21pYyBncm91cHMgYXJlIHJlcHJlc2VudGVkIGJ5 ICcoPz4pJy4gQW4gYXRvbWljIGdyb3VwIGlzIGEgZ3JvdXAgdGhhdCwNCj4gKyAqIHdoZW4gdGhl IFJlZ0V4IGVuZ2luZSBleGl0cyBmcm9tIGl0LCBhdXRvbWF0aWNhbGx5IHRocm93cyBhd2F5IGFs bA0KPiArICogYmFja3RyYWNraW5nIHBvc2l0aW9ucyByZW1lbWJlcmVkIGJ5IGFueSB0b2tlbnMg aW5zaWRlIHRoZSBncm91cC4NCj4gKyAqIEV4YW1wbGUgUmVnRXggaXMgJ2EoPz5iY3xiKWMnIGlm IHRoZSBnaXZlbiBwYXR0ZXJucyBhcmUgJ2FiYycgYW5kICdhYmNjJw0KPiB0aGVuDQo+ICsgKiAn YShiY3xiKWMnIG1hdGNoZXMgYm90aCB3aGVyZSBhcyAnYSg/PmJjfGIpYycgbWF0Y2hlcyBvbmx5 IGFiY2MgYmVjYXVzZQ0KPiArICogYXRvbWljIGdyb3VwcyBkb24ndCBhbGxvdyBiYWNrdHJhY2lu ZyBiYWNrIHRvICdiJy4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNy ZV91bnN1cF9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JF X1VOU1VQX0JBQ0tUUkFDS0lOR19DVFJMX0YgKDFVTEwgPDwNCj4gMikNCj4gKy8qKjwgUmVnRXgg ZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBQQ1JFIGJhY2t0cmFja2luZyBjb250cm9sIHZlcmJzLg0K PiArICogU29tZSBleGFtcGxlcyBvZiBiYWNrdHJhY2luZyB2ZXJicyBhcmUgKCpDT01NSVQpLCAo KkFDQ0VQVCksICgqRkFJTCksDQo+ICsgKiAoKlNLSVApLCAoKlBSVU5FKS4NCj4gKyAqIEBzZWUg c3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KPiArICovDQo+ICsN Cj4gKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQX0NBTExPVVRTX0YgKDFVTEwgPDwg MykNCj4gKy8qKjwgUmVnRXggZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBQQ1JFIGNhbGxvdXRzLg0K PiArICogUENSRSBzdXBwb3J0cyBjYWxsaW5nIGV4dGVybmFsIGZ1bmN0aW9uIGluIGJldHdlZW4g bWF0Y2hlcyBieSB1c2luZw0KPiAnKD9DKScuDQo+ICsgKiBFeGFtcGxlIFJlZ0V4ICdBQkMoP0Mp RCcgaWYgYSBnaXZlbiBwYXR0ZXIgaXMgJ0FCQ0QnIHRoZW4gdGhlIFJlZ0V4DQo+IGVuZ2luZQ0K PiArICogd2lsbCBwYXJzZSBBQkMgcGVyZm9ybSBhIHVzZXJkZWZpbmVkIGNhbGxvdXQgYW5kIHJl dHVybiBhIHN1Y2Nlc3NmdWwNCj4gbWF0Y2ggYXQNCj4gKyAqIEQuDQo+ICsgKiBAc2VlIHN0cnVj dCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsj ZGVmaW5lIFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF9CQUNLUkVGRVJFTkNFX0YgKDFVTEwgPDwg NCkNCj4gKy8qKjwgUmVnRXggZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBQQ1JFIGJhY2tyZWZlcmVu Y2UuDQo+ICsgKiBFeGFtcGxlIFJlZ0V4IGlzICcoXDJBQkN8KEdISSkpKycgXDIgbWF0Y2hlcyB0 aGUgc2FtZSB0ZXh0IGFzIG1vc3QNCj4gcmVjZW50bHkNCj4gKyAqIG1hdGNoZWQgYnkgdGhlIDJu ZCBjYXB0dXJpbmcgZ3JvdXAgaS5lLiAnR0hJJy4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdl eF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRF X1JFR0VYX0RFVl9QQ1JFX1VOU1VQX0dSRUVEWV9GICgxVUxMIDw8IDUpDQo+ICsvKio8IFJlZ0V4 IGRldmljZSBkb2Vzbid0IHN1cHBvcnQgUENSRSBHcmVlZHkgbW9kZS4NCj4gKyAqIEZvciBleGFt cGxlIGlmIHRoZSBSZWdFeCBpcyAnQUJcZCo/JyB0aGVuICcqPycgcmVwcmVzZW50cyB6ZXJvIG9y DQo+IHVubGltaXRlZA0KPiArICogbWF0Y2hlcy4gSW4gZ3JlZWR5IG1vZGUgdGhlIHBhdHRlcm4g J0FCMTIzNDUnIHdpbGwgYmUgbWF0Y2hlZA0KPiBjb21wbGV0ZWx5DQo+ICsgKiB3aGVyZSBhcyB0 aGUgdW5ncmVlZHkgbW9kZSAnQUInIHdpbGwgYmUgcmV0dXJuZWQgYXMgdGhlIG1hdGNoLg0KPiAr ICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpwY3JlX3Vuc3VwX2ZsYWdzDQo+ICsg Ki8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5TVVBfTE9PS0FST1VORF9B U1JUX0YgKDFVTEwgPDwNCj4gNikNCj4gKy8qKjwgUmVnRXggZGV2aWNlIGRvZXNuJ3Qgc3VwcG9y dCBQQ1JFIExvb2thcm91bmQgYXNzZXJ0aW9ucw0KPiArICogKFplcm8td2lkdGggYXNzZXJ0aW9u cykuIEV4YW1wbGUgUmVnRXggaXMgJ1thLXpdK1xkKyg/PSF7Myx9KScgaWYNCj4gKyAqIHRoZSBn aXZlbiBwYXR0ZXJuIGlzICdkd2FkMTIzNCEnIHRoZSBSZWdFeCBlbmdpbmUgZG9lc24ndCByZXBv cnQgYW55DQo+IG1hdGNoZXMNCj4gKyAqIGJlY2F1c2UgdGhlIGFzc2VydCAnKD89IXszLH0pJyBm YWlscy4gVGhlIHBhdHRlcm4gJ2R3YWQxMjMhISEnIHdvdWxkIHJldHVybg0KPiBhDQo+ICsgKiBz dWNjZXNzZnVsIG1hdGNoLg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpw Y3JlX3Vuc3VwX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVWX1BD UkVfVU5TVVBfTUFUQ0hfUE9JTlRfUlNUX0YgKDFVTEwgPDwNCj4gNykNCj4gKy8qKjwgUmVnRXgg ZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBQQ1JFIG1hdGNoIHBvaW50IHJlc2V0IGRpcmVjdGl2ZS4N Cj4gKyAqIEV4YW1wbGUgUmVnRXggaXMgJ1thLXpdK1xLXGQrJyBpZiB0aGUgcGF0dGVybiBpcyAn ZHdhZDEyMycNCj4gKyAqIHRoZW4gZXZlbiB0aG91Z2ggdGhlIGVudGlyZSBwYXR0ZXJuIG1hdGNo ZXMgb25seSAnMTIzJw0KPiArICogaXMgcmVwb3J0ZWQgYXMgYSBtYXRjaC4NCj4gKyAqIEBzZWUg c3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KPiArICovDQo+ICsN Cj4gKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQX05FV0xJTkVfQ09OVkVOVElPTlNf Rg0KPiAoMVVMTCA8PCA4KQ0KPiArLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFBD UkUgbmV3bGluZSBjb252ZW50aW9uLg0KPiArICogTmV3bGluZSBjb252ZW50aW9ucyBhcmUgcmVw cmVzZW50ZWQgYXMgZm9sbG93czoNCj4gKyAqICgqQ1IpICAgICAgICBjYXJyaWFnZSByZXR1cm4N Cj4gKyAqICgqTEYpICAgICAgICBsaW5lZmVlZA0KPiArICogKCpDUkxGKSAgICAgIGNhcnJpYWdl IHJldHVybiwgZm9sbG93ZWQgYnkgbGluZWZlZWQNCj4gKyAqICgqQU5ZQ1JMRikgICBhbnkgb2Yg dGhlIHRocmVlIGFib3ZlDQo+ICsgKiAoKkFOWSkgICAgICAgYWxsIFVuaWNvZGUgbmV3bGluZSBz ZXF1ZW5jZXMNCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1 cF9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQ X05FV0xJTkVfU0VRX0YgKDFVTEwgPDwgOSkNCj4gKy8qKjwgUmVnRXggZGV2aWNlIGRvZXNuJ3Qg c3VwcG9ydCBQQ1JFIG5ld2xpbmUgc2VxdWVuY2UuDQo+ICsgKiBUaGUgZXNjYXBlIHNlcXVlbmNl ICdcUicgd2lsbCBtYXRjaCBhbnkgbmV3bGluZSBzZXF1ZW5jZS4NCj4gKyAqIEl0IGlzIGVxdWl2 YWxlbnQgdG86ICcoPz5cclxufFxufFx4MGJ8XGZ8XHJ8XHg4NSknLg0KPiArICogQHNlZSBzdHJ1 Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpwY3JlX3Vuc3VwX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiAr I2RlZmluZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5TVVBfUE9TU0VTU0lWRV9RVUFMSUZJRVJTX0Yg KDFVTEwNCj4gPDwgMTApDQo+ICsvKio8IFJlZ0V4IGRldmljZSBkb2Vzbid0IHN1cHBvcnQgUENS RSBwb3NzZXNzaXZlIHF1YWxpZmllcnMuDQo+ICsgKiBFeGFtcGxlIFJlZ0V4IHBvc3Nlc3NpdmUg cXVhbGlmaWVycyAnKisnLCAnKysnLCAnPysnLCAne20sbn0rJy4NCj4gKyAqIFBvc3Nlc3NpdmUg cXVhbnRpZmllciByZXBlYXRzIHRoZSB0b2tlbiBhcyBtYW55IHRpbWVzIGFzIHBvc3NpYmxlIGFu ZCBpdA0KPiBkb2VzDQo+ICsgKiBub3QgZ2l2ZSB1cCBtYXRjaGVzIGFzIHRoZSBlbmdpbmUgYmFj a3RyYWNrcy4gV2l0aCBhIHBvc3Nlc3NpdmUNCj4gcXVhbnRpZmllciwNCj4gKyAqIHRoZSBkZWFs IGlzIGFsbCBvciBub3RoaW5nLg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZv OjpwY3JlX3Vuc3VwX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVW X1BDUkVfVU5TVVBfU1VCUk9VVElORV9SRUZFUkVOQ0VTX0YNCj4gKDFVTEwgPDwgMTEpDQo+ICsv Kio8IFJlZ0V4IGRldmljZSBkb2Vzbid0IHN1cHBvcnQgUENSRSBTdWJyb3V0aW5lIHJlZmVyZW5j ZXMuDQo+ICsgKiBQQ1JFIFN1YnJvdXRpbmUgcmVmZXJlbmNlcyBhbGxvdyBmb3Igc3ViIHBhdHRl cm5zIHRvIGJlIGFzc2Vzc2VkDQo+ICsgKiBhcyBwYXJ0IG9mIHRoZSBSZWdFeC4gRXhhbXBsZSBS ZWdFeCBpcyAnKGZvb3xmdXp6KVxnPDE+K2JhcicgbWF0Y2hlcyB0aGUNCj4gKyAqIHBhdHRlcm4g J2Zvb2Zvb2Z1enpmb29mdXp6YmFyJy4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZf aW5mbzo6cGNyZV91bnN1cF9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VY X0RFVl9QQ1JFX1VOU1VQX1VURl84X0YgKDFVTEwgPDwgMTIpDQo+ICsvKio8IFJlZ0V4IGRldmlj ZSBkb2Vzbid0IHN1cHBvcnQgVVRGLTggY2hhcmFjdGVyIGVuY29kaW5nLg0KPiArICogQHNlZSBz dHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpwY3JlX3Vuc3VwX2ZsYWdzDQo+ICsgKi8NCj4gKw0K PiArI2RlZmluZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5TVVBfVVRGXzE2X0YgKDFVTEwgPDwgMTMp DQo+ICsvKio8IFJlZ0V4IGRldmljZSBkb2Vzbid0IHN1cHBvcnQgVVRGLTE2IGNoYXJhY3RlciBl bmNvZGluZy4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1 cF9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQ X1VURl8zMl9GICgxVUxMIDw8IDE0KQ0KPiArLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBw b3J0IFVURi0zMiBjaGFyYWN0ZXIgZW5jb2RpbmcuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVn ZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJU RV9SRUdFWF9ERVZfUENSRV9VTlNVUF9XT1JEX0JPVU5EQVJZX0YgKDFVTEwgPDwNCj4gMTUpDQo+ ICsvKio8IFJlZ0V4IGRldmljZSBkb2Vzbid0IHN1cHBvcnQgd29yZCBib3VuZGFyaWVzLg0KPiAr ICogVGhlIG1ldGEgY2hhcmFjdGVyICdcYicgcmVwcmVzZW50cyB3b3JkIGJvdW5kYXJ5IGFuY2hv ci4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFn cw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQX0ZPUldB UkRfUkVGRVJFTkNFU19GICgxVUxMDQo+IDw8IDE2KQ0KPiArLyoqPCBSZWdFeCBkZXZpY2UgZG9l c24ndCBzdXBwb3J0IEZvcndhcmQgcmVmZXJlbmNlcy4NCj4gKyAqIEZvcndhcmQgcmVmZXJlbmNl cyBhbGxvdyB5b3UgdG8gdXNlIGEgYmFjayByZWZlcmVuY2UgdG8gYSBncm91cCB0aGF0DQo+IGFw cGVhcnMNCj4gKyAqIGxhdGVyIGluIHRoZSBSZWdFeC4gRXhhbXBsZSBSZWdFeCBpcyAnKFwzQUJD fChERUZ8KEdISSkpKSsnIG1hdGNoZXMgdGhlDQo+ICsgKiBmb2xsb3dpbmcgc3RyaW5nICdHSElH SElBQkNERUYnLg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpwY3JlX3Vu c3VwX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArLyogRW51bWVyYXRlcyBQQ1JFIHJ1bGUgZmxhZ3Mg Ki8NCj4gKyNkZWZpbmUgUlRFX1JFR0VYX1BDUkVfUlVMRV9BTExPV19FTVBUWV9GICgxVUxMIDw8 IDApDQo+ICsvKio8IFdoZW4gdGhpcyBmbGFnIGlzIHNldCwgdGhlIHBhdHRlcm4gdGhhdCBjYW4g bWF0Y2ggYWdhaW5zdCBhbiBlbXB0eQ0KPiBzdHJpbmcsDQo+ICsgKiBzdWNoIGFzICcuKicgYXJl IGFsbG93ZWQuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnJ1bGVfZmxh Z3MsIHN0cnVjdA0KPiBydGVfcmVnZXhfcnVsZTo6cnVsZV9mbGFncw0KPiArICovDQo+ICsNCj4g KyNkZWZpbmUgUlRFX1JFR0VYX1BDUkVfUlVMRV9BTkNIT1JFRF9GICgxVUxMIDw8IDEpDQo+ICsv Kio8IFdoZW4gdGhpcyBmbGFnIGlzIHNldCwgdGhlIHBhdHRlcm4gaXMgZm9yY2VkIHRvIGJlICJh bmNob3JlZCIsIHRoYXQgaXMsIGl0DQo+ICsgKiBpcyBjb25zdHJhaW5lZCB0byBtYXRjaCBvbmx5 IGF0IHRoZSBmaXJzdCBtYXRjaGluZyBwb2ludCBpbiB0aGUgc3RyaW5nIHRoYXQNCj4gKyAqIGlz IGJlaW5nIHNlYXJjaGVkLiBTaW1pbGFyIHRvICdeJyBhbmQgcmVwcmVzZW50ZWQgYnkgXEEuDQo+ ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVjdA0K PiBydGVfcmVnZXhfcnVsZTo6cnVsZV9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRF X1JFR0VYX1BDUkVfUlVMRV9DQVNFTEVTU19GICgxVUxMIDw8IDIpDQo+ICsvKio8IFdoZW4gdGhp cyBmbGFnIGlzIHNldCwgbGV0dGVycyBpbiB0aGUgcGF0dGVybiBtYXRjaCBib3RoIHVwcGVyIGFu ZA0KPiBsb3dlcg0KPiArICogY2FzZSBsZXR0ZXJzIGluIHRoZSBzdWJqZWN0Lg0KPiArICogQHNl ZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpydWxlX2ZsYWdzLCBzdHJ1Y3QNCj4gcnRlX3Jl Z2V4X3J1bGU6OnJ1bGVfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9Q Q1JFX1JVTEVfRE9UQUxMX0YgKDFVTEwgPDwgMykNCj4gKy8qKjwgV2hlbiB0aGlzIGZsYWcgaXMg c2V0LCBhIGRvdCBtZXRhY2hhcmFjdGVyIGluIHRoZSBwYXR0ZXJuIG1hdGNoZXMgYW55DQo+ICsg KiBjaGFyYWN0ZXIsIGluY2x1ZGluZyBvbmUgdGhhdCBpbmRpY2F0ZXMgYSBuZXdsaW5lLg0KPiAr ICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpydWxlX2ZsYWdzLCBzdHJ1Y3QNCj4g cnRlX3JlZ2V4X3J1bGU6OnJ1bGVfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9S RUdFWF9QQ1JFX1JVTEVfRFVQTkFNRVNfRiAoMVVMTCA8PCA0KQ0KPiArLyoqPCBXaGVuIHRoaXMg ZmxhZyBpcyBzZXQsIG5hbWVzIHVzZWQgdG8gaWRlbnRpZnkgY2FwdHVyZSBncm91cHMgbmVlZCBu b3QNCj4gYmUNCj4gKyAqIHVuaXF1ZS4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZf aW5mbzo6cnVsZV9mbGFncywgc3RydWN0DQo+IHJ0ZV9yZWdleF9ydWxlOjpydWxlX2ZsYWdzDQo+ ICsgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfUENSRV9SVUxFX0VYVEVOREVEX0YgKDFV TEwgPDwgNSkNCj4gKy8qKjwgV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCBtb3N0IHdoaXRlIHNwYWNl IGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4gYXJlDQo+ICsgKiB0b3RhbGx5IGlnbm9yZWQgZXhj ZXB0IHdoZW4gZXNjYXBlZCBvciBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MuDQo+ICsgKiBAc2Vl IHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVjdA0KPiBydGVfcmVn ZXhfcnVsZTo6cnVsZV9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX1BD UkVfUlVMRV9NQVRDSF9VTlNFVF9CQUNLUkVGX0YgKDFVTEwgPDwgNikNCj4gKy8qKjwgV2hlbiB0 aGlzIGZsYWcgaXMgc2V0LCBhIGJhY2tyZWZlcmVuY2UgdG8gYW4gdW5zZXQgY2FwdHVyZSBncm91 cA0KPiBtYXRjaGVzIGFuDQo+ICsgKiBlbXB0eSBzdHJpbmcuDQo+ICsgKiBAc2VlIFJURV9SRUdF WF9ERVZfUENSRV9VTlNVUF9GT1JXQVJEX1JFRkVSRU5DRVNfRg0KPiArICogQHNlZSBzdHJ1Y3Qg cnRlX3JlZ2V4X2Rldl9pbmZvOjpydWxlX2ZsYWdzLCBzdHJ1Y3QNCj4gcnRlX3JlZ2V4X3J1bGU6 OnJ1bGVfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9QQ1JFX1JVTEVf TVVMVElMSU5FX0YgKDFVTEwgPDwgNykNCj4gKy8qKjwgV2hlbiB0aGlzIGZsYWcgIGlzIHNldCwg dGhlICdeJyBhbmQgJyQnIGNvbnN0cnVjdHMgbWF0Y2ggaW1tZWRpYXRlbHkNCj4gKyAqIGZvbGxv d2luZyBvciBpbW1lZGlhdGVseSBiZWZvcmUgaW50ZXJuYWwgbmV3bGluZXMgaW4gdGhlIHN1Ympl Y3Qgc3RyaW5nLA0KPiArICogcmVzcGVjdGl2ZWx5LCBhcyB3ZWxsIGFzIGF0IHRoZSB2ZXJ5IHN0 YXJ0IGFuZCBlbmQuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnJ1bGVf ZmxhZ3MsIHN0cnVjdA0KPiBydGVfcmVnZXhfcnVsZTo6cnVsZV9mbGFncw0KPiArICovDQo+ICsN Cj4gKyNkZWZpbmUgUlRFX1JFR0VYX1BDUkVfUlVMRV9OT19BVVRPX0NBUFRVUkVfRiAoMVVMTCA8 PCA4KQ0KPiArLyoqPCBXaGVuIHRoaXMgRmxhZyBpcyBzZXQsIGl0IGRpc2FibGVzIHRoZSB1c2Ug b2YgbnVtYmVyZWQgY2FwdHVyaW5nDQo+ICsgKiBwYXJlbnRoZXNlcyBpbiB0aGUgcGF0dGVybi4g UmVmZXJlbmNlcyB0byBjYXB0dXJlIGdyb3Vwcw0KPiAoYmFja3JlZmVyZW5jZXMgb3INCj4gKyAq IHJlY3Vyc2lvbi9zdWJyb3V0aW5lIGNhbGxzKSBtYXkgb25seSByZWZlciB0byBuYW1lZCBncm91 cHMsIHRob3VnaCB0aGUNCj4gKyAqIHJlZmVyZW5jZSBjYW4gYmUgYnkgbmFtZSBvciBieSBudW1i ZXIuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MsIHN0 cnVjdA0KPiBydGVfcmVnZXhfcnVsZTo6cnVsZV9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZp bmUgUlRFX1JFR0VYX1BDUkVfUlVMRV9VQ1BfRiAoMVVMTCA8PCA5KQ0KPiArLyoqPCBCeSBkZWZh dWx0LCBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMgYXJlIHJlY29nbml6ZWQsIFdoZW4gdGhpcyBmbGFn IGlzIHNldCwNCj4gKyAqIFVuaWNvZGUgcHJvcGVydGllcyBhcmUgdXNlZCBpbnN0ZWFkIHRvIGNs YXNzaWZ5IGNoYXJhY3RlcnMuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86 OnJ1bGVfZmxhZ3MsIHN0cnVjdA0KPiBydGVfcmVnZXhfcnVsZTo6cnVsZV9mbGFncw0KPiArICov DQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX1BDUkVfUlVMRV9VTkdSRUVEWV9GICgxVUxMIDw8 IDEwKQ0KPiArLyoqPCBXaGVuIHRoaXMgZmxhZyBpcyBzZXQsIHRoZSAiZ3JlZWRpbmVzcyIgb2Yg dGhlIHF1YW50aWZpZXJzIGlzIGludmVydGVkDQo+ICsgKiBzbyB0aGF0IHRoZXkgYXJlIG5vdCBn cmVlZHkgYnkgZGVmYXVsdCwgYnV0IGJlY29tZSBncmVlZHkgaWYgZm9sbG93ZWQgYnkNCj4gKyAq ICc/Jy4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cnVsZV9mbGFncywg c3RydWN0DQo+IHJ0ZV9yZWdleF9ydWxlOjpydWxlX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2Rl ZmluZSBSVEVfUkVHRVhfUENSRV9SVUxFX1VURl9GICgxVUxMIDw8IDExKQ0KPiArLyoqPCBXaGVu IHRoaXMgZmxhZyBpcyBzZXQsIFJlZ0V4IGVuZ2luZSBoYXMgdG8gcmVnYXJkIGJvdGggdGhlIHBh dHRlcm4gYW5kDQo+IHRoZQ0KPiArICogc3ViamVjdCBzdHJpbmdzIHRoYXQgYXJlIHN1YnNlcXVl bnRseSBwcm9jZXNzZWQgYXMgc3RyaW5ncyBvZiBVVEYNCj4gY2hhcmFjdGVycw0KPiArICogaW5z dGVhZCBvZiBzaW5nbGUtY29kZS11bml0IHN0cmluZ3MuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVf cmVnZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVjdA0KPiBydGVfcmVnZXhfcnVsZTo6cnVs ZV9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX1BDUkVfUlVMRV9ORVZF Ul9CQUNLU0xBU0hfQ19GICgxVUxMIDw8IDEyKQ0KPiArLyoqPCBUaGlzIEZsYWcgbG9ja3Mgb3V0 IHRoZSB1c2Ugb2YgJ1xDJyBpbiB0aGUgcGF0dGVybiB0aGF0IGlzIGJlaW5nIGNvbXBpbGVkLg0K PiArICogVGhpcyBlc2NhcGUgbWF0Y2hlcyBvbmUgZGF0YSB1bml0LCBldmVuIGluIFVURiBtb2Rl IHdoaWNoIGNhbiBjYXVzZQ0KPiArICogdW5wcmVkaWN0YWJsZSBiZWhhdmlvciBpbiBVVEYtOCBv ciBVVEYtMTYgbW9kZXMsIGJlY2F1c2UgaXQgbWF5IGxlYXZlDQo+IHRoZQ0KPiArICogY3VycmVu dCBtYXRjaGluZyBwb2ludCBpbiB0aGUgbWlkZGxlIG9mIGEgbXVsdGktY29kZS11bml0IGNoYXJh Y3Rlci4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cnVsZV9mbGFncywg c3RydWN0DQo+IHJ0ZV9yZWdleF9ydWxlOjpydWxlX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArDQo+ ICsvKioNCj4gKyAqIFJlZ0V4IGRldmljZSBpbmZvcm1hdGlvbg0KPiArICovDQo+ICtzdHJ1Y3Qg cnRlX3JlZ2V4X2Rldl9pbmZvIHsNCj4gKwljb25zdCBjaGFyICpkcml2ZXJfbmFtZTsgLyoqPCBS ZWdFeCBkcml2ZXIgbmFtZSAqLw0KPiArCXN0cnVjdCBydGVfZGV2aWNlICpkZXY7CS8qKjwgRGV2 aWNlIGluZm9ybWF0aW9uICovDQo+ICsJdWludDhfdCBtYXhfbWF0Y2hlczsNCj4gKwkvKio8IE1h eGltdW0gbWF0Y2hlcyBwZXIgc2NhbiBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UgKi8NCj4gKwl1 aW50MTZfdCBtYXhfcXVldWVfcGFpcnM7DQo+ICsJLyoqPCBNYXhpbXVtIHF1ZXVlIHBhaXJzIHN1 cHBvcnRlZCBieSB0aGlzIGRldmljZSAqLw0KPiArCXVpbnQxNl90IG1heF9wYXlsb2FkX3NpemU7 DQo+ICsJLyoqPCBNYXhpbXVtIHBheWxvYWQgc2l6ZSBmb3IgYSBwYXR0ZXJuIG1hdGNoIHJlcXVl c3Qgb3Igc2Nhbi4NCj4gKwkgKiBAc2VlIFJURV9SRUdFWF9ERVZfQ0ZHX0NST1NTX0JVRkZFUl9T Q0FOX0YNCj4gKwkgKi8NCj4gKwl1aW50MTZfdCBtYXhfcnVsZXNfcGVyX2dyb3VwOw0KPiArCS8q KjwgTWF4aW11bSBydWxlcyBzdXBwb3J0ZWQgcGVyIGdyb3VwIGJ5IHRoaXMgZGV2aWNlICovDQo+ ICsJdWludDE2X3QgbWF4X2dyb3VwczsNCj4gKwkvKio8IE1heGltdW0gZ3JvdXAgc3VwcG9ydGVk IGJ5IHRoaXMgZGV2aWNlICovDQo+ICsJdWludDMyX3QgcmVnZXhfZGV2X2NhcGE7DQo+ICsJLyoq PCBSZWdFeCBkZXZpY2UgY2FwYWJpbGl0aWVzLiBAc2VlIFJURV9SRUdFWF9ERVZfQ0FQQV8qICov DQo+ICsJdWludDY0X3QgcnVsZV9mbGFnczsNCj4gKwkvKio8IFN1cHBvcnRlZCBjb21waWxlciBy dWxlIGZsYWdzLg0KPiArCSAqIEBzZWUgUlRFX1JFR0VYX1BDUkVfUlVMRV8qLCBzdHJ1Y3QgcnRl X3JlZ2V4X3J1bGU6OnJ1bGVfZmxhZ3MNCj4gKwkgKi8NCj4gKwl1aW50NjRfdCBwY3JlX3Vuc3Vw X2ZsYWdzOw0KPiArCS8qKjwgVW5zdXBwb3J0ZWQgUENSRSBmZWF0dXJlcyBmb3IgdGhpcyBSZWdF eCBkZXZpY2UuDQo+ICsJICogQHNlZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5TVVBfKg0KPiArCSAq Lw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBSZXRyaWV2ZSB0aGUgY29udGV4dHVhbCBpbmZv cm1hdGlvbiBvZiBhIFJlZ0V4IGRldmljZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gZGV2X2lkDQo+ ICsgKiAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXZpY2UuDQo+ICsgKg0KPiArICogQHBhcmFt W291dF0gZGV2X2luZm8NCj4gKyAqICAgQSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIG9mIHR5cGUg KnJ0ZV9yZWdleF9kZXZfaW5mbyogdG8gYmUgZmlsbGVkIHdpdGgNCj4gdGhlDQo+ICsgKiAgIGNv bnRleHR1YWwgaW5mb3JtYXRpb24gb2YgdGhlIGRldmljZS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJu DQo+ICsgKiAgIC0gMDogU3VjY2VzcywgZHJpdmVyIHVwZGF0ZXMgdGhlIGNvbnRleHR1YWwgaW5m b3JtYXRpb24gb2YgdGhlIFJlZ0V4DQo+IGRldmljZQ0KPiArICogICAtIDwwOiBFcnJvciBjb2Rl IHJldHVybmVkIGJ5IHRoZSBkcml2ZXIgaW5mbyBnZXQgZnVuY3Rpb24uDQo+ICsgKg0KPiArICov DQo+ICtpbnQNCj4gK3J0ZV9yZWdleF9kZXZfaW5mb19nZXQodWludDhfdCBkZXZfaWQsIHN0cnVj dCBydGVfcmVnZXhfZGV2X2luZm8NCj4gKmRldl9pbmZvKTsNCj4gKw0KPiArLyogRW51bWVyYXRl cyBSZWdFeCBkZXZpY2UgY29uZmlndXJhdGlvbiBmbGFncyAqLw0KPiArI2RlZmluZSBSVEVfUkVH RVhfREVWX0NGR19DUk9TU19CVUZGRVJfU0NBTl9GICgxVUxMIDw8IDApDQo+ICsvKio8IENyb3Nz IGJ1ZmZlciBzY2FuIHJlZmVycyB0byB0aGUgYWJpbGl0eSB0byBiZSBhYmxlIHRvIGRldGVjdA0K PiArICogbWF0Y2hlcyB0aGF0IG9jY3VyIGFjcm9zcyBidWZmZXIgYm91bmRhcmllcywgd2hlcmUg dGhlIGJ1ZmZlcnMgYXJlDQo+IHJlbGF0ZWQNCj4gKyAqIHRvIGVhY2ggb3RoZXIgaW4gc29tZSB3 YXkuIEVuYWJsZSB0aGlzIGZsYWcgd2hlbiB0byBzY2FuIHBheWxvYWQgc2l6ZQ0KPiArICogZ3Jl YXRlciBzdHJ1Y3Qgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6bWF4X3BheWxvYWRfc2l6ZSBh bmQvb3INCj4gKyAqIG1hdGNoZXMgY2FuIHByZXNlbnQgYWNyb3NzIHNjYW4gYnVmZmVyIGJvdW5k YXJpZXMuDQo+ICsgKg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjptYXhf cGF5bG9hZF9zaXplDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2NvbmZpZzo6ZGV2 X2NmZ19mbGFncywNCj4gcnRlX3JlZ2V4X2Rldl9jb25maWd1cmUoKQ0KPiArICogQHNlZSBSVEVf UkVHRVhfT1BTX1JTUF9QTUlfU09KX0YNCj4gKyAqIEBzZWUgUlRFX1JFR0VYX09QU19SU1BfUE1J X0VPSl9GDQo+ICsgKi8NCj4gKw0KPiArLyoqIFJlZ0V4IGRldmljZSBjb25maWd1cmF0aW9uIHN0 cnVjdHVyZSAqLw0KPiArc3RydWN0IHJ0ZV9yZWdleF9kZXZfY29uZmlnIHsNCj4gKwl1aW50OF90 IG5iX21heF9tYXRjaGVzOw0KPiArCS8qKjwgTWF4aW11bSBtYXRjaGVzIHBlciBzY2FuIGNvbmZp Z3VyZWQgb24gdGhpcyBkZXZpY2UuDQo+ICsJICogVGhpcyB2YWx1ZSBjYW5ub3QgZXhjZWVkIHRo ZSAqbWF4X21hdGNoZXMqDQo+ICsJICogd2hpY2ggcHJldmlvdXNseSBwcm92aWRlZCBpbiBydGVf cmVnZXhfZGV2X2luZm9fZ2V0KCkuDQo+ICsJICogVGhlIHZhbHVlIDAgaXMgYWxsb3dlZCwgaW4g d2hpY2ggY2FzZSwgdmFsdWUgMSB1c2VkLg0KPiArCSAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9k ZXZfaW5mbzo6bWF4X21hdGNoZXMNCj4gKwkgKi8NCj4gKwl1aW50MTZfdCBuYl9xdWV1ZV9wYWly czsNCj4gKwkvKio8IE51bWJlciBvZiBSZWdFeCBxdWV1ZSBwYWlycyB0byBjb25maWd1cmUgb24g dGhpcyBkZXZpY2UuDQo+ICsJICogVGhpcyB2YWx1ZSBjYW5ub3QgZXhjZWVkIHRoZSAqbWF4X3F1 ZXVlX3BhaXJzKiB3aGljaA0KPiBwcmV2aW91c2x5DQo+ICsJICogcHJvdmlkZWQgaW4gcnRlX3Jl Z2V4X2Rldl9pbmZvX2dldCgpLg0KPiArCSAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5m bzo6bWF4X3F1ZXVlX3BhaXJzDQo+ICsJICovDQo+ICsJdWludDE2X3QgbmJfcnVsZXNfcGVyX2dy b3VwOw0KPiArCS8qKjwgTnVtYmVyIG9mIHJ1bGVzIHBlciBncm91cCB0byBjb25maWd1cmUgb24g dGhpcyBkZXZpY2UuDQo+ICsJICogVGhpcyB2YWx1ZSBjYW5ub3QgZXhjZWVkIHRoZSAqbWF4X3J1 bGVzX3Blcl9ncm91cCoNCj4gKwkgKiB3aGljaCBwcmV2aW91c2x5IHByb3ZpZGVkIGluIHJ0ZV9y ZWdleF9kZXZfaW5mb19nZXQoKS4NCj4gKwkgKiBUaGUgdmFsdWUgMCBpcyBhbGxvd2VkLCBpbiB3 aGljaCBjYXNlLA0KPiArCSAqIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86Om1heF9ydWxlc19w ZXJfZ3JvdXAgdXNlZC4NCj4gKwkgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86Om1h eF9ydWxlc19wZXJfZ3JvdXANCj4gKwkgKi8NCj4gKwl1aW50MTZfdCBuYl9ncm91cHM7DQo+ICsJ LyoqPCBOdW1iZXIgb2YgZ3JvdXBzIHRvIGNvbmZpZ3VyZSBvbiB0aGlzIGRldmljZS4NCj4gKwkg KiBUaGlzIHZhbHVlIGNhbm5vdCBleGNlZWQgdGhlICptYXhfZ3JvdXBzKg0KPiArCSAqIHdoaWNo IHByZXZpb3VzbHkgcHJvdmlkZWQgaW4gcnRlX3JlZ2V4X2Rldl9pbmZvX2dldCgpLg0KPiArCSAq IEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6bWF4X2dyb3Vwcw0KPiArCSAqLw0KPiAr CWNvbnN0IGNoYXIgKnJ1bGVfZGI7DQo+ICsJLyoqPCBJbXBvcnQgaW5pdGlhbCBzZXQgb2YgcHJl YnVpbHQgcnVsZSBkYXRhYmFzZSBvbiB0aGlzIGRldmljZS4NCj4gKwkgKiBUaGUgdmFsdWUgTlVM TCBpcyBhbGxvd2VkLCBpbiB3aGljaCBjYXNlLCB0aGUgZGV2aWNlIHdpbGwgbm90DQo+ICsJICog YmUgY29uZmlndXJlZCBwcmVidWlsdCBydWxlIGRhdGFiYXNlLiBBcHBsaWNhdGlvbiBtYXkgdXNl DQo+ICsJICogcnRlX3JlZ2V4X3J1bGVfZGJfdXBkYXRlKCkgb3IgcnRlX3JlZ2V4X3J1bGVfZGJf aW1wb3J0KCkgQVBJDQo+ICsJICogdG8gdXBkYXRlIG9yIGltcG9ydCBydWxlIGRhdGFiYXNlIGFm dGVyIHRoZQ0KPiArCSAqIHJ0ZV9yZWdleF9kZXZfY29uZmlndXJlKCkuDQo+ICsJICogQHNlZSBy dGVfcmVnZXhfcnVsZV9kYl91cGRhdGUoKSwgcnRlX3JlZ2V4X3J1bGVfZGJfaW1wb3J0KCkNCj4g KwkgKi8NCj4gKwl1aW50MzJfdCBydWxlX2RiX2xlbjsNCj4gKwkvKio8IExlbmd0aCBvZiAqcnVs ZV9kYiogYnVmZmVyLiAqLw0KPiArCXVpbnQzMl90IGRldl9jZmdfZmxhZ3M7DQo+ICsJLyoqPCBS ZWdFeCBkZXZpY2UgY29uZmlndXJhdGlvbiBmbGFncywgU2VlIFJURV9SRUdFWF9ERVZfQ0ZHXyoN Cj4gKi8NCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogQ29uZmlndXJlIGEgUmVnRXggZGV2aWNl Lg0KPiArICoNCj4gKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBpbnZva2VkIGZpcnN0IGJlZm9y ZSBhbnkgb3RoZXIgZnVuY3Rpb24gaW4gdGhlDQo+ICsgKiBBUEkuIFRoaXMgZnVuY3Rpb24gY2Fu IGFsc28gYmUgcmUtaW52b2tlZCB3aGVuIGEgZGV2aWNlIGlzIGluIHRoZQ0KPiArICogc3RvcHBl ZCBzdGF0ZS4NCj4gKyAqDQo+ICsgKiBUaGUgY2FsbGVyIG1heSB1c2UgcnRlX3JlZ2V4X2Rldl9p bmZvX2dldCgpIHRvIGdldCB0aGUgY2FwYWJpbGl0eSBvZiBlYWNoDQo+ICsgKiByZXNvdXJjZXMg YXZhaWxhYmxlIGZvciB0aGlzIHJlZ2V4IGRldmljZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gZGV2 X2lkDQo+ICsgKiAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXZpY2UgdG8gY29uZmlndXJlLg0K PiArICogQHBhcmFtIGNmZw0KPiArICogICBUaGUgUmVnRXggZGV2aWNlIGNvbmZpZ3VyYXRpb24g c3RydWN0dXJlLg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgLSAwOiBTdWNjZXNzLCBk ZXZpY2UgY29uZmlndXJlZC4NCj4gKyAqICAgLSA8MDogRXJyb3IgY29kZSByZXR1cm5lZCBieSB0 aGUgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24uDQo+ICsgKi8NCj4gK2ludA0KPiArcnRl X3JlZ2V4X2Rldl9jb25maWd1cmUodWludDhfdCBkZXZfaWQsIGNvbnN0IHN0cnVjdA0KPiBydGVf cmVnZXhfZGV2X2NvbmZpZyAqY2ZnKTsNCj4gKw0KPiArLyogRW51bWVyYXRlcyBSZWdFeCBxdWV1 ZSBwYWlyIGNvbmZpZ3VyYXRpb24gZmxhZ3MgKi8NCj4gKyNkZWZpbmUgUlRFX1JFR0VYX1FVRVVF X1BBSVJfQ0ZHX09PU19GICgxVUxMIDw8IDApDQo+ICsvKio8IE91dCBvZiBvcmRlciBzY2FuLCBJ ZiBub3Qgc2V0LCBhIHNjYW4gbXVzdCByZXRpcmUgYWZ0ZXIgcHJldmlvdXNseSBpc3N1ZWQNCj4g KyAqIGluLW9yZGVyIHNjYW5zIHRvIHRoaXMgcXVldWUgcGFpci4gSWYgc2V0LCB0aGlzIHNjYW4g Y2FuIGJlIHJldGlyZWQgYXMgc29vbg0KPiArICogYXMgZGV2aWNlIHJldHVybnMgY29tcGxldGlv bi4gQXBwbGljYXRpb24gc2hvdWxkIG5vdCBzZXQgb3V0IG9mIG9yZGVyIHNjYW4NCj4gKyAqIGZs YWcgaWYgaXQgbmVlZHMgdG8gbWFpbnRhaW4gdGhlIGluZ3Jlc3Mgb3JkZXIgb2Ygc2NhbiByZXF1 ZXN0Lg0KPiArICoNCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9xcF9jb25mOjpxcF9jb25m X2ZsYWdzLA0KPiBydGVfcmVnZXhfcXVldWVfcGFpcl9zZXR1cCgpDQo+ICsgKi8NCj4gKw0KPiAr c3RydWN0IHJ0ZV9yZWdleF9vcHM7DQo+ICt0eXBlZGVmIHZvaWQgKCpyZWdleGRldl9zdG9wX2Zs dXNoX3QpKHVpbnQ4X3QgZGV2X2lkLCB1aW50MTZfdCBxcF9pZCwNCj4gKwkJCQkgICAgICBzdHJ1 Y3QgcnRlX3JlZ2V4X29wcyAqb3ApOw0KPiArLyoqPCBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQg ZHVyaW5nIHJ0ZV9yZWdleF9kZXZfc3RvcCgpLCBpbnZva2VkIG9uY2UNCj4gcGVyDQo+ICsgKiBm bHVzaGVkIFJlZ0V4IG9wLg0KPiArICovDQo+ICsNCj4gKy8qKiBSZWdFeCBxdWV1ZSBwYWlyIGNv bmZpZ3VyYXRpb24gc3RydWN0dXJlICovDQo+ICtzdHJ1Y3QgcnRlX3JlZ2V4X3FwX2NvbmYgew0K PiArCXVpbnQzMl90IHFwX2NvbmZfZmxhZ3M7DQo+ICsJLyoqPCBRdWV1ZSBwYWlyIGNvbmZpZyBm bGFncywgU2VlIFJURV9SRUdFWF9RVUVVRV9QQUlSX0NGR18qDQo+ICovDQo+ICsJdWludDE2X3Qg bmJfZGVzYzsNCj4gKwkvKio8IFRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgdG8gYWxsb2NhdGUg Zm9yIHRoaXMgcXVldWUgcGFpci4gKi8NCj4gKwlyZWdleGRldl9zdG9wX2ZsdXNoX3QgY2I7DQo+ ICsJLyoqPCBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgZHVyaW5nIHJ0ZV9yZWdleF9kZXZfc3Rv cCgpLCBpbnZva2VkDQo+ICsJICogb25jZSBwZXIgZmx1c2hlZCByZWdleCBvcC4gVmFsdWUgTlVM TCBpcyBhbGxvd2VkLCBpbiB3aGljaCBjYXNlDQo+ICsJICogY2FsbGJhY2sgd2lsbCBub3QgYmUg aW52b2tlZC4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBwcm9wZXJseQ0KPiArCSAqIGRp c3Bvc2Ugb2Ygb3V0c3RhbmRpbmcgcmVnZXggb3BzIGZyb20gcmVzcG9uc2UgcXVldWUsDQo+ICsJ ICogZm9yIGV4YW1wbGUgb3BzIGNvbnRhaW5pbmcgbWVtb3J5IHBvaW50ZXJzLg0KPiArCSAqIEBz ZWUgcnRlX3JlZ2V4X2Rldl9zdG9wKCkNCj4gKwkgKi8NCj4gK307DQo+ICsNCj4gKy8qKg0KPiAr ICogQWxsb2NhdGUgYW5kIHNldCB1cCBhIFJlZ0V4IHF1ZXVlIHBhaXIgZm9yIGEgUmVnRXggZGV2 aWNlLg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4gKyAqICAgVGhlIGlkZW50aWZpZXIg b2YgdGhlIGRldmljZS4NCj4gKyAqIEBwYXJhbSBxdWV1ZV9wYWlyX2lkDQo+ICsgKiAgIFRoZSBp bmRleCBvZiB0aGUgUmVnRXggcXVldWUgcGFpciB0byBzZXR1cC4gVGhlIHZhbHVlIG11c3QgYmUg aW4gdGhlDQo+IHJhbmdlDQo+ICsgKiAgIFswLCBuYl9xdWV1ZV9wYWlycyAtIDFdIHByZXZpb3Vz bHkgc3VwcGxpZWQgdG8NCj4gcnRlX3JlZ2V4X2Rldl9jb25maWd1cmUoKS4NCj4gKyAqIEBwYXJh bSBxcF9jb25mDQo+ICsgKiAgIFRoZSBwb2ludGVyIHRvIHRoZSBjb25maWd1cmF0aW9uIGRhdGEg dG8gYmUgdXNlZCBmb3IgdGhlIFJlZ0V4IHF1ZXVlDQo+IHBhaXIuDQo+ICsgKiAgIE5VTEwgdmFs dWUgaXMgYWxsb3dlZCwgaW4gd2hpY2ggY2FzZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24JdXNlZC4N Cj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIC0gMDogU3VjY2VzcywgUmVnRXggcXVldWUg cGFpciBjb3JyZWN0bHkgc2V0IHVwLg0KPiArICogICAtIDwwOiBSZWdFeCBxdWV1ZSBjb25maWd1 cmF0aW9uIGZhaWxlZA0KPiArICovDQo+ICtpbnQNCj4gK3J0ZV9yZWdleF9xdWV1ZV9wYWlyX3Nl dHVwKHVpbnQ4X3QgZGV2X2lkLCB1aW50OF90IHF1ZXVlX3BhaXJfaWQsDQo+ICsJCQkgICBjb25z dCBzdHJ1Y3QgcnRlX3JlZ2V4X3FwX2NvbmYgKnFwX2NvbmYpOw0KPiArDQo+ICsvKioNCj4gKyAq IFN0YXJ0IGEgUmVnRXggZGV2aWNlLg0KPiArICoNCj4gKyAqIFRoZSBkZXZpY2Ugc3RhcnQgc3Rl cCBpcyB0aGUgbGFzdCBvbmUgYW5kIGNvbnNpc3RzIG9mIHNldHRpbmcgdGhlIFJlZ0V4DQo+ICsg KiBxdWV1ZXMgdG8gc3RhcnQgYWNjZXB0aW5nIHRoZSBwYXR0ZXJuIG1hdGNoaW5nIHNjYW4gcmVx dWVzdHMuDQo+ICsgKg0KPiArICogT24gc3VjY2VzcywgYWxsIGJhc2ljIGZ1bmN0aW9ucyBleHBv cnRlZCBieSB0aGUgQVBJIChSZWdFeCBlbnF1ZXVlLA0KPiArICogUmVnRXggZGVxdWV1ZSBhbmQg c28gb24pIGNhbiBiZSBpbnZva2VkLg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4gKyAq ICAgUmVnRXggZGV2aWNlIGlkZW50aWZpZXINCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgLSAwOiBT dWNjZXNzLCBkZXZpY2Ugc3RhcnRlZC4NCj4gKyAqICAgLSA8MDogRGV2aWNlIHN0YXJ0IGZhaWxl ZC4NCj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhfZGV2X3N0YXJ0KHVpbnQ4X3QgZGV2X2lk KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBTdG9wIGEgUmVnRXggZGV2aWNlLg0KPiArICoNCj4gKyAq IFN0b3AgYSBSZWdFeCBkZXZpY2UuIFRoZSBkZXZpY2UgY2FuIGJlIHJlc3RhcnRlZCB3aXRoIGEg Y2FsbCB0bw0KPiArICogcnRlX3JlZ2V4X2Rldl9zdGFydCgpLg0KPiArICoNCj4gKyAqIFRoaXMg ZnVuY3Rpb24gY2F1c2VzIGFsbCBxdWV1ZWQgcmVzcG9uc2UgcmVnZXggb3BzIHRvIGJlIGRyYWlu ZWQgaW4gdGhlDQo+ICsgKiByZXNwb25zZSBxdWV1ZS4gV2hpbGUgZHJhaW5pbmcgb3BzIG91dCBv ZiB0aGUgZGV2aWNlLA0KPiArICogc3RydWN0IHJ0ZV9yZWdleF9xcF9jb25mOjpjYiB3aWxsIGJl IGludm9rZWQgZm9yIGVhY2ggb3BzLg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4gKyAq ICAgUmVnRXggZGV2aWNlIGlkZW50aWZpZXIuDQo+ICsgKg0KPiArICogQHNlZSBzdHJ1Y3QgcnRl X3JlZ2V4X3FwX2NvbmY6OmNiLCBydGVfcmVnZXhfcXVldWVfcGFpcl9zZXR1cCgpDQo+ICsgKi8N Cj4gK3ZvaWQNCj4gK3J0ZV9yZWdleF9kZXZfc3RvcCh1aW50OF90IGRldl9pZCk7DQo+ICsNCj4g Ky8qKg0KPiArICogQ2xvc2UgYSBSZWdFeCBkZXZpY2UuIFRoZSBkZXZpY2UgY2Fubm90IGJlIHJl c3RhcnRlZCENCj4gKyAqDQo+ICsgKiBAcGFyYW0gZGV2X2lkDQo+ICsgKiAgIFJlZ0V4IGRldmlj ZSBpZGVudGlmaWVyDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogIC0gMCBvbiBzdWNjZXNz ZnVsbHkgY2xvc2VkIHRoZSBkZXZpY2UuDQo+ICsgKiAgLSA8MCBvbiBmYWlsdXJlIHRvIGNsb3Nl IHRoZSBkZXZpY2UuDQo+ICsgKi8NCj4gK2ludA0KPiArcnRlX3JlZ2V4X2Rldl9jbG9zZSh1aW50 OF90IGRldl9pZCk7DQo+ICsNCj4gKy8qIERldmljZSBnZXQvc2V0IGF0dHJpYnV0ZXMgKi8NCj4g Kw0KPiArLyoqIEVudW1lcmF0ZXMgUmVnRXggZGV2aWNlIGF0dHJpYnV0ZSBpZGVudGlmaWVyICov DQo+ICtlbnVtIHJ0ZV9yZWdleF9kZXZfYXR0cl9pZCB7DQo+ICsJUlRFX1JFR0VYX0RFVl9BVFRS X1NPQ0tFVF9JRCwNCj4gKwkvKio8IFRoZSBOVU1BIHNvY2tldCBpZCB0byB3aGljaCB0aGUgZGV2 aWNlIGlzIGNvbm5lY3RlZCBvcg0KPiArCSAqIGEgZGVmYXVsdCBvZiB6ZXJvIGlmIHRoZSBzb2Nr ZXQgY291bGQgbm90IGJlIGRldGVybWluZWQuDQo+ICsJICogZGF0YXR5cGU6ICppbnQqDQo+ICsJ ICogb3BlcmF0aW9uOiAqZ2V0Kg0KPiArCSAqLw0KPiArCVJURV9SRUdFWF9ERVZfQVRUUl9NQVhf TUFUQ0hFUywNCj4gKwkvKio8IE1heGltdW0gbnVtYmVyIG9mIG1hdGNoZXMgcGVyIHNjYW4uDQo+ ICsJICogZGF0YXR5cGU6ICp1aW50OF90Kg0KPiArCSAqIG9wZXJhdGlvbjogKmdldCogYW5kICpz ZXQqDQo+ICsJICoNCj4gKwkgKiBAc2VlIFJURV9SRUdFWF9PUFNfUlNQX01BWF9NQVRDSF9GDQo+ ICsJICovDQo+ICsJUlRFX1JFR0VYX0RFVl9BVFRSX01BWF9TQ0FOX1RJTUVPVVQsDQo+ICsJLyoq PCBVcHBlciBib3VuZCBzY2FuIHRpbWUgaW4gbnMuDQo+ICsJICogZGF0YXR5cGU6ICp1aW50MTZf dCoNCj4gKwkgKiBvcGVyYXRpb246ICpnZXQqIGFuZCAqc2V0Kg0KPiArCSAqDQo+ICsJICogQHNl ZSBSVEVfUkVHRVhfT1BTX1JTUF9NQVhfU0NBTl9USU1FT1VUX0YNCj4gKwkgKi8NCj4gKwlSVEVf UkVHRVhfREVWX0FUVFJfTUFYX1BSRUZJWCwNCj4gKwkvKio8IE1heGltdW0gbnVtYmVyIG9mIHBy ZWZpeCBkZXRlY3RlZCBwZXIgc2Nhbi4NCj4gKwkgKiBUaGlzIHdvdWxkIGJlIHVzZWZ1bCBmb3Ig ZGVuaWFsIG9mIHNlcnZpY2UgZGV0ZWN0aW9uLg0KPiArCSAqIGRhdGF0eXBlOiAqdWludDE2X3Qq DQo+ICsJICogb3BlcmF0aW9uOiAqZ2V0KiBhbmQgKnNldCoNCj4gKwkgKg0KPiArCSAqIEBzZWUg UlRFX1JFR0VYX09QU19SU1BfTUFYX1BSRUZJWF9GDQo+ICsJICovDQo+ICt9Ow0KPiArDQo+ICsv KioNCj4gKyAqIEdldCBhbiBhdHRyaWJ1dGUgZnJvbSBhIFJlZ0V4IGRldmljZS4NCj4gKyAqDQo+ ICsgKiBAcGFyYW0gZGV2X2lkIFJlZ0V4IGRldmljZSBpZGVudGlmaWVyDQo+ICsgKiBAcGFyYW0g YXR0cl9pZCBUaGUgYXR0cmlidXRlIElEIHRvIHJldHJpZXZlDQo+ICsgKiBAcGFyYW1bb3V0XSBh dHRyX3ZhbHVlIEEgcG9pbnRlciB0aGF0IHdpbGwgYmUgZmlsbGVkIGluIHdpdGggdGhlIGF0dHJp YnV0ZQ0KPiArICogICAgICAgICAgICAgdmFsdWUgaWYgc3VjY2Vzc2Z1bC4NCj4gKyAqDQo+ICsg KiBAcmV0dXJuDQo+ICsgKiAgIC0gMDogU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBhdHRyaWJ1dGUg dmFsdWUuDQo+ICsgKiAgIC0gLUVJTlZBTDogSW52YWxpZCBkZXZpY2Ugb3IgICphdHRyX2lkKiBw cm92aWRlZCwgb3IgKmF0dHJfdmFsdWUqIGlzIE5VTEwuDQo+ICsgKiAgIC0gLUVOT1RTVVA6IGlm IHRoZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IHNwZWNpZmljICphdHRyX2lkKi4NCj4gKyAqLw0K PiAraW50DQo+ICtydGVfcmVnZXhfZGV2X2F0dHJfZ2V0KHVpbnQ4X3QgZGV2X2lkLCBlbnVtIHJ0 ZV9yZWdleF9kZXZfYXR0cl9pZA0KPiBhdHRyX2lkLA0KPiArCQkgICAgICAgdm9pZCAqYXR0cl92 YWx1ZSk7DQo+ICsNCj4gKy8qKg0KPiArICogU2V0IGFuIGF0dHJpYnV0ZSB0byBhIFJlZ0V4IGRl dmljZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gZGV2X2lkIFJlZ0V4IGRldmljZSBpZGVudGlmaWVy DQo+ICsgKiBAcGFyYW0gYXR0cl9pZCBUaGUgYXR0cmlidXRlIElEIHRvIHJldHJpZXZlDQo+ICsg KiBAcGFyYW0gYXR0cl92YWx1ZSBBIHBvaW50ZXIgdGhhdCB3aWxsIGJlIGZpbGxlZCBpbiB3aXRo IHRoZSBhdHRyaWJ1dGUgdmFsdWUNCj4gKyAqICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBhcHBs aWNhdGlvbg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgLSAwOiBTdWNjZXNzZnVsbHkg YXBwbGllZCB0aGUgYXR0cmlidXRlIHZhbHVlLg0KPiArICogICAtIC1FSU5WQUw6IEludmFsaWQg ZGV2aWNlIG9yICAqYXR0cl9pZCogcHJvdmlkZWQsIG9yICphdHRyX3ZhbHVlKiBpcyBOVUxMLg0K PiArICogICAtIC1FTk9UU1VQOiBpZiB0aGUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBzcGVjaWZp YyAqYXR0cl9pZCouDQo+ICsgKi8NCj4gK2ludA0KPiArcnRlX3JlZ2V4X2Rldl9hdHRyX3NldCh1 aW50OF90IGRldl9pZCwgZW51bSBydGVfcmVnZXhfZGV2X2F0dHJfaWQNCj4gYXR0cl9pZCwNCj4g KwkJICAgICAgIGNvbnN0IHZvaWQgKmF0dHJfdmFsdWUpOw0KPiArDQo+ICsvKiBSdWxlIHJlbGF0 ZWQgQVBJcyAqLw0KPiArLyoqIEVudW1lcmF0ZXMgUmVnRXggcnVsZSBvcGVyYXRpb24gKi8NCj4g K2VudW0gcnRlX3JlZ2V4X3J1bGVfb3Agew0KPiArCVJURV9SRUdFWF9SVUxFX09QX0FERCwNCj4g KwkvKio8IEFkZCBSZWdFeCBydWxlIHRvIHJ1bGUgZGF0YWJhc2UgKi8NCj4gKwlSVEVfUkVHRVhf UlVMRV9PUF9SRU1PVkUNCj4gKwkvKio8IFJlbW92ZSBSZWdFeCBydWxlIGZyb20gcnVsZSBkYXRh YmFzZSAqLw0KPiArfTsNCj4gKw0KPiArLyoqIFN0cnVjdHVyZSB0byBob2xkIGEgUmVnRXggcnVs ZSBhdHRyaWJ1dGVzICovDQo+ICtzdHJ1Y3QgcnRlX3JlZ2V4X3J1bGUgew0KPiArCWVudW0gcnRl X3JlZ2V4X3J1bGVfb3Agb3A7DQo+ICsJLyoqPCBPUCB0eXBlIG9mIHRoZSBydWxlIGVpdGhlciBh IE9QX0FERCBvciBPUF9ERUxFVEUgKi8NCj4gKwl1aW50MTZfdCBncm91cF9pZDsNCj4gKwkvKio8 IEdyb3VwIGlkZW50aWZpZXIgdG8gd2hpY2ggdGhlIHJ1bGUgYmVsb25ncyB0by4gKi8NCj4gKwl1 aW50MzJfdCBydWxlX2lkOw0KPiArCS8qKjwgUnVsZSBpZGVudGlmaWVyIHdoaWNoIGlzIHJldHVy bmVkIG9uIHN1Y2Nlc3NmdWwgbWF0Y2guICovDQo+ICsJY29uc3QgY2hhciAqcGNyZV9ydWxlOw0K PiArCS8qKjwgQnVmZmVyIHRvIGhvbGQgdGhlIFBDUkUgcnVsZS4gKi8NCj4gKwl1aW50MTZfdCBw Y3JlX3J1bGVfbGVuOw0KPiArCS8qKjwgTGVuZ3RoIG9mIHRoZSBQQ1JFIHJ1bGUqLw0KPiArCXVp bnQ2NF90IHJ1bGVfZmxhZ3M7DQo+ICsJLyogUENSRSBydWxlIGZsYWdzLiBTdXBwb3J0ZWQgZGV2 aWNlIHNwZWNpZmljIFBDUkUgcnVsZXMgZW51bWVyYXRlZA0KPiArCSAqIGluIHN0cnVjdCBydGVf cmVnZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MuIEZvciBzdWNjZXNzZnVsIHJ1bGUNCj4gKwkgKiBk YXRhYmFzZSB1cGRhdGUsIGFwcGxpY2F0aW9uIG5lZWRzIHRvIHByb3ZpZGUgb25seSBzdXBwb3J0 ZWQNCj4gKwkgKiBydWxlIGZsYWdzLg0KPiArCSAqIEBTZWUgUlRFX1JFR0VYX1BDUkVfUlVMRV8q LCBzdHJ1Y3QNCj4gcnRlX3JlZ2V4X2Rldl9pbmZvOjpydWxlX2ZsYWdzDQo+ICsJICovDQo+ICt9 Ow0KPiArDQo+ICsvKioNCj4gKyAqIFVwZGF0ZSB0aGUgcnVsZSBkYXRhYmFzZSBvZiBhIFJlZ0V4 IGRldmljZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gZGV2X2lkIFJlZ0V4IGRldmljZSBpZGVudGlm aWVyDQo+ICsgKiBAcGFyYW0gcnVsZXMNCj4gKyAqICAgUG9pbnRzIHRvIGFuIGFycmF5IG9mICpu Yl9ydWxlcyogb2JqZWN0cyBvZiB0eXBlICpydGVfcmVnZXhfcnVsZSoNCj4gc3RydWN0dXJlDQo+ ICsgKiAgIHdoaWNoIGNvbnRhaW4gdGhlIHJlZ2V4IHJ1bGVzIGF0dHJpYnV0ZXMgdG8gYmUgdXBk YXRlZCBpbiBydWxlIGRhdGFiYXNlLg0KPiArICogQHBhcmFtIG5iX3J1bGVzDQo+ICsgKiAgIFRo ZSBudW1iZXIgb2YgUENSRSBydWxlcyB0byB1cGRhdGUgdGhlIHJ1bGUgZGF0YWJhc2UuDQo+ICsg Kg0KPiArICogQHJldHVybg0KPiArICogICBUaGUgbnVtYmVyIG9mIHJlZ2V4IHJ1bGVzIGFjdHVh bGx5IHVwZGF0ZWQgb24gdGhlIHJlZ2V4IGRldmljZSdzIHJ1bGUNCj4gKyAqICAgZGF0YWJhc2Uu IFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgdGhlICpuYl9y dWxlcyoNCj4gKyAqICAgcGFyYW1ldGVyIHdoZW4gdGhlIHJlZ2V4IGRldmljZXMgZmFpbHMgdG8g dXBkYXRlIHRoZSBydWxlIGRhdGFiYXNlIG9yDQo+ICsgKiAgIGlmIGludmFsaWQgcGFyYW1ldGVy cyBhcmUgc3BlY2lmaWVkIGluIGEgKnJ0ZV9yZWdleF9ydWxlKi4NCj4gKyAqICAgSWYgdGhlIHJl dHVybiB2YWx1ZSBpcyBsZXNzIHRoYW4gKm5iX3J1bGVzKiwgdGhlIHJlbWFpbmluZyBQQ1JFIHJ1 bGVzDQo+ICsgKiAgIGF0IHRoZSBlbmQgb2YgKnJ1bGVzKiBhcmUgbm90IGNvbnN1bWVkIGFuZCB0 aGUgY2FsbGVyIGhhcyB0byB0YWtlDQo+ICsgKiAgIGNhcmUgb2YgdGhlbSBhbmQgcnRlX2Vycm5v IGlzIHNldCBhY2NvcmRpbmdseS4NCj4gKyAqICAgUG9zc2libGUgZXJybm8gdmFsdWVzIGluY2x1 ZGU6DQo+ICsgKiAgIC0gLUVJTlZBTDogIEludmFsaWQgZGV2aWNlIElEIG9yIHJ1bGVzIGlzIE5V TEwNCj4gKyAqICAgLSAtRU5PVFNVUDogVGhlIGxhc3QgcHJvY2Vzc2VkIHJ1bGUgaXMgbm90IHN1 cHBvcnRlZCBvbiB0aGlzIGRldmljZS4NCj4gKyAqICAgLSAtRU5PU1BDOiBObyBzcGFjZSBhdmFp bGFibGUgaW4gcnVsZSBkYXRhYmFzZS4NCj4gKyAqDQo+ICsgKiBAc2VlIHJ0ZV9yZWdleF9ydWxl X2RiX2ltcG9ydCgpLCBydGVfcmVnZXhfcnVsZV9kYl9leHBvcnQoKQ0KPiArICovDQo+ICt1aW50 MTZfdA0KPiArcnRlX3JlZ2V4X3J1bGVfZGJfdXBkYXRlKHVpbnQ4X3QgZGV2X2lkLCBjb25zdCBz dHJ1Y3QgcnRlX3JlZ2V4X3J1bGUNCj4gKnJ1bGVzLA0KPiArCQkJIHVpbnQxNl90IG5iX3J1bGVz KTsNCg0KSSB0aGluayB0aGUgZnVuY3Rpb24gbmFtZSBpcyBub3QgdG9vIGluZm9ybWF0aXZlLiBJ ZiB0aGlzIGZ1bmN0aW9uIG1lYW50IHRvIGNvbXBpbGUgdGhlIHJ1bGUgdGhlbiBpdCBzaG91bGQg YmUgZXhwbGljaXQgb24gdGhlIGZ1bmN0aW9uIG5hbWUuIA0KDQo+ICsNCj4gKy8qKg0KPiArICog SW1wb3J0IGEgcHJlYnVpbHQgcnVsZSBkYXRhYmFzZSBmcm9tIGEgYnVmZmVyIHRvIGEgUmVnRXgg ZGV2aWNlLg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQgUmVnRXggZGV2aWNlIGlkZW50aWZp ZXINCj4gKyAqIEBwYXJhbSBydWxlX2RiDQo+ICsgKiAgIFBvaW50cyB0byBwcmVidWlsdCBydWxl IGRhdGFiYXNlLg0KPiArICogQHBhcmFtIHJ1bGVfZGJfbGVuDQo+ICsgKiAgIExlbmd0aCBvZiB0 aGUgcnVsZSBkYXRhYmFzZS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIC0gMDogU3Vj Y2Vzc2Z1bGx5IHVwZGF0ZWQgdGhlIHByZWJ1aWx0IHJ1bGUgZGF0YWJhc2UuDQo+ICsgKiAgIC0g LUVJTlZBTDogIEludmFsaWQgZGV2aWNlIElEIG9yIHJ1bGVfZGIgaXMgTlVMTA0KPiArICogICAt IC1FTk9UU1VQOiBSdWxlIGRhdGFiYXNlIGltcG9ydCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMg ZGV2aWNlLg0KPiArICogICAtIC1FTk9TUEM6IE5vIHNwYWNlIGF2YWlsYWJsZSBpbiBydWxlIGRh dGFiYXNlLg0KPiArICoNCj4gKyAqIEBzZWUgcnRlX3JlZ2V4X3J1bGVfZGJfdXBkYXRlKCksIHJ0 ZV9yZWdleF9ydWxlX2RiX2V4cG9ydCgpDQo+ICsgKi8NCj4gK2ludA0KPiArcnRlX3JlZ2V4X3J1 bGVfZGJfaW1wb3J0KHVpbnQ4X3QgZGV2X2lkLCBjb25zdCBjaGFyICpydWxlX2RiLA0KPiArCQkJ IHVpbnQzMl90IHJ1bGVfZGJfbGVuKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBFeHBvcnQgdGhlIHBy ZWJ1aWx0IHJ1bGUgZGF0YWJhc2UgZnJvbSBhIFJlZ0V4IGRldmljZSB0byB0aGUgYnVmZmVyLg0K PiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQgUmVnRXggZGV2aWNlIGlkZW50aWZpZXINCj4gKyAq IEBwYXJhbVtvdXRdIHJ1bGVfZGINCj4gKyAqICAgQmxvY2sgb2YgbWVtb3J5IHRvIGluc2VydCB0 aGUgcnVsZSBkYXRhYmFzZS4gTXVzdCBiZSBhdCBsZWFzdCBzaXplIGluDQo+ICsgKiAgIGNhcGFj aXR5LiBJZiBzZXQgdG8gTlVMTCwgZnVuY3Rpb24gcmV0dXJucyByZXF1aXJlZCBjYXBhY2l0eS4N Cj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIC0gMDogU3VjY2Vzc2Z1bGx5IGV4cG9ydGVk IHRoZSBwcmVidWlsdCBydWxlIGRhdGFiYXNlLg0KPiArICogICAtIHNpemU6IElmIHJ1bGVfZGIg c2V0IHRvIE5VTEwgdGhlbiByZXF1aXJlZCBjYXBhY2l0eSBmb3IgKnJ1bGVfZGIqDQo+ICsgKiAg IC0gLUVJTlZBTDogIEludmFsaWQgZGV2aWNlIElEDQo+ICsgKiAgIC0gLUVOT1RTVVA6IFJ1bGUg ZGF0YWJhc2UgZXhwb3J0IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UuDQo+ICsgKg0K PiArICogQHNlZSBydGVfcmVnZXhfcnVsZV9kYl91cGRhdGUoKSwgcnRlX3JlZ2V4X3J1bGVfZGJf aW1wb3J0KCkNCj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhfcnVsZV9kYl9leHBvcnQodWlu dDhfdCBkZXZfaWQsIGNoYXIgKnJ1bGVfZGIpOw0KPiArDQo+ICsvKiBFeHRlbmRlZCBzdGF0aXN0 aWNzICovDQo+ICsvKiogTWF4aW11bSBuYW1lIGxlbmd0aCBmb3IgZXh0ZW5kZWQgc3RhdGlzdGlj cyBjb3VudGVycyAqLw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVWX1hTVEFUU19OQU1FX1NJWkUg NjQNCj4gKw0KPiArLyoqDQo+ICsgKiBBIG5hbWUta2V5IGxvb2t1cCBlbGVtZW50IGZvciBleHRl bmRlZCBzdGF0aXN0aWNzLg0KPiArICoNCj4gKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8g bWFwIGJldHdlZW4gbmFtZXMgYW5kIElEIG51bWJlcnMNCj4gKyAqIGZvciBleHRlbmRlZCBSZWdF eCBkZXZpY2Ugc3RhdGlzdGljcy4NCj4gKyAqLw0KPiArc3RydWN0IHJ0ZV9yZWdleF9kZXZfeHN0 YXRzX21hcCB7DQo+ICsJdWludDE2X3QgaWQ7DQo+ICsJLyoqPCB4c3RhdCBpZGVudGlmaWVyICov DQo+ICsJY2hhciBuYW1lW1JURV9SRUdFWF9ERVZfWFNUQVRTX05BTUVfU0laRV07DQo+ICsJLyoq PCB4c3RhdCBuYW1lICovDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIFJldHJpZXZlIG5hbWVz IG9mIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2YgYSByZWdleCBkZXZpY2UuDQo+ICsgKg0KPiArICog QHBhcmFtIGRldl9pZA0KPiArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgcmVnZXggZGV2aWNl Lg0KPiArICogQHBhcmFtW291dF0geHN0YXRzX21hcA0KPiArICogICBCbG9jayBvZiBtZW1vcnkg dG8gaW5zZXJ0IGlkIGFuZCBuYW1lcyBpbnRvLiBNdXN0IGJlIGF0IGxlYXN0IHNpemUgaW4NCj4g KyAqICAgY2FwYWNpdHkuIElmIHNldCB0byBOVUxMLCBmdW5jdGlvbiByZXR1cm5zIHJlcXVpcmVk IGNhcGFjaXR5Lg0KPiArICogQHJldHVybg0KPiArICogICAtIHBvc2l0aXZlIHZhbHVlIG9uIHN1 Y2Nlc3M6DQo+ICsgKiAgICAgICAgLVRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBl bnRyaWVzIGZpbGxlZCBpbiB0aGUgc3RhdHMgbWFwLg0KPiArICogICAgICAgIC1JZiB4c3RhdHNf bWFwIHNldCB0byBOVUxMIHRoZW4gcmVxdWlyZWQgY2FwYWNpdHkgZm9yIHhzdGF0c19tYXAuDQo+ ICsgKiAgIC0gbmVnYXRpdmUgdmFsdWUgb24gZXJyb3I6DQo+ICsgKiAgICAgIC1FTk9ERVYgZm9y IGludmFsaWQgKmRldl9pZCoNCj4gKyAqICAgICAgLUVOT1RTVVAgaWYgdGhlIGRldmljZSBkb2Vz bid0IHN1cHBvcnQgdGhpcyBmdW5jdGlvbi4NCj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhf ZGV2X3hzdGF0c19uYW1lc19nZXQodWludDhfdCBkZXZfaWQsDQo+ICsJCQkgICAgICAgc3RydWN0 IHJ0ZV9yZWdleF9kZXZfeHN0YXRzX21hcCAqeHN0YXRzX21hcCk7DQo+ICsNCj4gKy8qKg0KPiAr ICogUmV0cmlldmUgZXh0ZW5kZWQgc3RhdGlzdGljcyBvZiBhbiByZWdleCBkZXZpY2UuDQo+ICsg Kg0KPiArICogQHBhcmFtIGRldl9pZA0KPiArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGV2 aWNlLg0KPiArICogQHBhcmFtIGlkcw0KPiArICogICBUaGUgaWQgbnVtYmVycyBvZiB0aGUgc3Rh dHMgdG8gZ2V0LiBUaGUgaWRzIGNhbiBiZSBnb3QgZnJvbSB0aGUgc3RhdA0KPiArICogICBwb3Np dGlvbiBpbiB0aGUgc3RhdCBsaXN0IGZyb20gcnRlX3JlZ2V4X2Rldl94c3RhdHNfbmFtZXNfZ2V0 KCksIG9yDQo+ICsgKiAgIGJ5IHVzaW5nIHJ0ZV9yZWdleF9kZXZfeHN0YXRzX2J5X25hbWVfZ2V0 KCkuDQo+ICsgKiBAcGFyYW1bb3V0XSB2YWx1ZXMNCj4gKyAqICAgVGhlIHZhbHVlcyBmb3IgZWFj aCBzdGF0cyByZXF1ZXN0IGJ5IElELg0KPiArICogQHBhcmFtIG4NCj4gKyAqICAgVGhlIG51bWJl ciBvZiBzdGF0cyByZXF1ZXN0ZWQNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgLSBwb3NpdGl2ZSB2 YWx1ZTogbnVtYmVyIG9mIHN0YXQgZW50cmllcyBmaWxsZWQgaW50byB0aGUgdmFsdWVzIGFycmF5 DQo+ICsgKiAgIC0gbmVnYXRpdmUgdmFsdWUgb24gZXJyb3I6DQo+ICsgKiAgICAgIC1FTk9ERVYg Zm9yIGludmFsaWQgKmRldl9pZCoNCj4gKyAqICAgICAgLUVOT1RTVVAgaWYgdGhlIGRldmljZSBk b2Vzbid0IHN1cHBvcnQgdGhpcyBmdW5jdGlvbi4NCj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVn ZXhfZGV2X3hzdGF0c19nZXQodWludDhfdCBkZXZfaWQsIGNvbnN0IHVpbnQxNl90IGlkc1tdLA0K PiArCQkJIHVpbnQ2NF90IHZhbHVlc1tdLCB1aW50MTZfdCBuKTsNCj4gKw0KPiArLyoqDQo+ICsg KiBSZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYSBzaW5nbGUgc3RhdCBieSByZXF1ZXN0aW5nIGl0IGJ5 IG5hbWUuDQo+ICsgKg0KPiArICogQHBhcmFtIGRldl9pZA0KPiArICogICBUaGUgaWRlbnRpZmll ciBvZiB0aGUgZGV2aWNlDQo+ICsgKiBAcGFyYW0gbmFtZQ0KPiArICogICBUaGUgc3RhdCBuYW1l IHRvIHJldHJpZXZlDQo+ICsgKiBAcGFyYW1bb3V0XSBpZA0KPiArICogICBJZiBub24tTlVMTCwg dGhlIG51bWVyaWNhbCBpZCBvZiB0aGUgc3RhdCB3aWxsIGJlIHJldHVybmVkLCBzbyB0aGF0IGZ1 cnRoZXINCj4gKyAqICAgcmVxdWVzdHMgZm9yIHRoZSBzdGF0IGNhbiBiZSBnb3QgdXNpbmcgcnRl X3JlZ2V4X2Rldl94c3RhdHNfZ2V0LCB3aGljaA0KPiB3aWxsDQo+ICsgKiAgIGJlIGZhc3RlciBh cyBpdCBkb2Vzbid0IG5lZWQgdG8gc2NhbiBhIGxpc3Qgb2YgbmFtZXMgZm9yIHRoZSBzdGF0Lg0K PiArICogQHBhcmFtW291dF0gdmFsdWUNCj4gKyAqICAgTXVzdCBiZSBub24tTlVMTCwgcmV0cmll dmVkIHhzdGF0IHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoaXMgYWRkcmVzcy4NCj4gKyAqDQo+ ICsgKiBAcmV0dXJuDQo+ICsgKiAgIC0gMDogU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB4c3RhdCB2 YWx1ZS4NCj4gKyAqICAgLSAtRUlOVkFMOiBpbnZhbGlkIHBhcmFtZXRlcnMNCj4gKyAqICAgLSAt RU5PVFNVUDogaWYgbm90IHN1cHBvcnRlZC4NCj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhf ZGV2X3hzdGF0c19ieV9uYW1lX2dldCh1aW50OF90IGRldl9pZCwgY29uc3QgY2hhciAqbmFtZSwN Cj4gKwkJCQkgdWludDE2X3QgKmlkLCB1aW50NjRfdCAqdmFsdWUpOw0KPiArDQo+ICsvKioNCj4g KyAqIFJlc2V0IHRoZSB2YWx1ZXMgb2YgdGhlIHhzdGF0cyBvZiB0aGUgc2VsZWN0ZWQgY29tcG9u ZW50IGluIHRoZSBkZXZpY2UuDQo+ICsgKg0KPiArICogQHBhcmFtIGRldl9pZA0KPiArICogICBU aGUgaWRlbnRpZmllciBvZiB0aGUgZGV2aWNlDQo+ICsgKiBAcGFyYW0gaWRzDQo+ICsgKiAgIFNl bGVjdHMgc3BlY2lmaWMgc3RhdGlzdGljcyB0byBiZSByZXNldC4gV2hlbiBOVUxMLCBhbGwgc3Rh dGlzdGljcyB3aWxsIGJlDQo+ICsgKiAgIHJlc2V0LiBJZiBub24tTlVMTCwgbXVzdCBwb2ludCB0 byBhcnJheSBvZiBhdCBsZWFzdCAqbmJfaWRzKiBzaXplLg0KPiArICogQHBhcmFtIG5iX2lkcw0K PiArICogICBUaGUgbnVtYmVyIG9mIGlkcyBhdmFpbGFibGUgZnJvbSB0aGUgKmlkcyogYXJyYXku IElnbm9yZWQgd2hlbiBpZHMgaXMNCj4gTlVMTC4NCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgLSAw OiBTdWNjZXNzZnVsbHkgcmVzZXQgdGhlIHN0YXRpc3RpY3MgdG8gemVyby4NCj4gKyAqICAgLSAt RUlOVkFMOiBpbnZhbGlkIHBhcmFtZXRlcnMNCj4gKyAqICAgLSAtRU5PVFNVUDogaWYgbm90IHN1 cHBvcnRlZC4NCj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhfZGV2X3hzdGF0c19yZXNldCh1 aW50OF90IGRldl9pZCwgY29uc3QgdWludDE2X3QgaWRzW10sDQo+ICsJCQkgICB1aW50MTZfdCBu Yl9pZHMpOw0KPiArDQo+ICsvKioNCj4gKyAqIFRyaWdnZXIgdGhlIFJlZ0V4IGRldmljZSBzZWxm IHRlc3QuDQo+ICsgKg0KPiArICogQHBhcmFtIGRldl9pZA0KPiArICogICBUaGUgaWRlbnRpZmll ciBvZiB0aGUgZGV2aWNlDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIC0gMDogU2VsZnRlc3Qgc3Vj Y2Vzc2Z1bA0KPiArICogICAtIC1FTk9UU1VQIGlmIHRoZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0 IHNlbGZ0ZXN0DQo+ICsgKiAgIC0gb3RoZXIgdmFsdWVzIDwgMCBvbiBmYWlsdXJlLg0KPiArICov DQo+ICtpbnQgcnRlX3JlZ2V4X2Rldl9zZWxmdGVzdCh1aW50OF90IGRldl9pZCk7DQo+ICsNCj4g Ky8qKg0KPiArICogRHVtcCBpbnRlcm5hbCBpbmZvcm1hdGlvbiBhYm91dCAqZGV2X2lkKiB0byB0 aGUgRklMRSogcHJvdmlkZWQgaW4gKmYqLg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4g KyAqICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRldmljZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0g Zg0KPiArICogICBBIHBvaW50ZXIgdG8gYSBmaWxlIGZvciBvdXRwdXQNCj4gKyAqDQo+ICsgKiBA cmV0dXJuDQo+ICsgKiAgIC0gMDogb24gc3VjY2Vzcw0KPiArICogICAtIDwwOiBvbiBmYWlsdXJl Lg0KPiArICovDQo+ICtpbnQNCj4gK3J0ZV9yZWdleF9kZXZfZHVtcCh1aW50OF90IGRldl9pZCwg RklMRSAqZik7DQo+ICsNCj4gKy8qIEZhc3QgcGF0aCBBUElzICovDQo+ICsNCj4gKy8qKg0KPiAr ICogVGhlIGdlbmVyaWMgKnJ0ZV9yZWdleF9tYXRjaCogc3RydWN0dXJlIHRvIGhvbGQgdGhlIFJl Z0V4IG1hdGNoDQo+IGF0dHJpYnV0ZXMuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfb3Bz OjptYXRjaGVzDQo+ICsgKi8NCj4gK3N0cnVjdCBydGVfcmVnZXhfbWF0Y2ggew0KPiArCVJURV9T VERfQzExDQo+ICsJdW5pb24gew0KPiArCQl1aW50NjRfdCB1NjQ7DQo+ICsJCXN0cnVjdCB7DQo+ ICsJCQl1aW50MzJfdCBydWxlX2lkOjIwOw0KPiArCQkJLyoqPCBSdWxlIGlkZW50aWZpZXIgdG8g d2hpY2ggdGhlIHBhdHRlcm4gbWF0Y2hlZC4NCj4gKwkJCSAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdl eF9ydWxlOjpydWxlX2lkDQo+ICsJCQkgKi8NCj4gKwkJCXVpbnQzMl90IGdyb3VwX2lkOjEyOw0K PiArCQkJLyoqPCBHcm91cCBpZGVudGlmaWVyIG9mIHRoZSBydWxlIHdoaWNoIHRoZSBwYXR0ZXJu DQo+ICsJCQkgKiBtYXRjaGVkLiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfcnVsZTo6Z3JvdXBfaWQN Cj4gKwkJCSAqLw0KPiArCQkJdWludDE2X3Qgb2Zmc2V0Ow0KPiArCQkJLyoqPCBTdGFydGluZyBC eXRlIFBvc2l0aW9uIGZvciBtYXRjaGVkIHJ1bGUuICovDQo+ICsJCQl1aW50MTZfdCBsZW47DQo+ ICsJCQkvKio8IExlbmd0aCBvZiBtYXRjaCBpbiBieXRlcyAqLw0KPiArCQl9Ow0KPiArCX07DQo+ ICt9Ow0KPiArDQo+ICsvKiBFbnVtZXJhdGVzIFJlZ0V4IHJlcXVlc3QgZmxhZ3MuICovDQo+ICsj ZGVmaW5lIFJURV9SRUdFWF9PUFNfUkVRX0dST1VQX0lEMV9WQUxJRF9GICgxIDw8IDApDQo+ICsv Kio8IFNldCB3aGVuIHN0cnVjdCBydGVfcmVnZXhfcnVsZTo6Z3JvdXBfaWQxIHZhbGlkICovDQo+ ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX09QU19SRVFfR1JPVVBfSUQyX1ZBTElEX0YgKDEgPDwg MSkNCj4gKy8qKjwgU2V0IHdoZW4gc3RydWN0IHJ0ZV9yZWdleF9ydWxlOjpncm91cF9pZDIgdmFs aWQgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfT1BTX1JFUV9HUk9VUF9JRDNfVkFMSURf RiAoMSA8PCAyKQ0KPiArLyoqPCBTZXQgd2hlbiBzdHJ1Y3QgcnRlX3JlZ2V4X3J1bGU6Omdyb3Vw X2lkMyB2YWxpZCAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9PUFNfUkVRX1NUT1BfT05f TUFUQ0hfRiAoMSA8PCA0KQ0KPiArLyoqPCBUaGUgUmVnRXggZW5naW5lIHdpbGwgc3RvcCBzY2Fu bmluZyBhbmQgcmV0dXJuIHRoZSBmaXJzdCBtYXRjaC4gKi8NCj4gKw0KPiArI2RlZmluZSBSVEVf UkVHRVhfT1BTX1JFUV9NQVRDSF9ISUdIX1BSSU9SSVRZX0YgKDEgPDwgNSkNCj4gKy8qKjwgSW4g SGlnaCBQcmlvcml0eSBtb2RlIGEgbWF4aW11bSBvZiBvbmUgbWF0Y2ggd2lsbCBiZSByZXR1cm5l ZCBwZXINCj4gc2NhbiB0bw0KPiArICogcmVkdWNlIHRoZSBwb3N0LXByb2Nlc3NpbmcgcmVxdWly ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiBUaGUgbWF0Y2ggd2l0aA0KPiB0aGUNCj4gKyAqIGxvd2Vz dCBSdWxlIGlkLCBsb3dlc3Qgc3RhcnQgcG9pbnRlciBhbmQgbG93ZXN0IG1hdGNoIGxlbmd0aCB3 aWxsIGJlDQo+ICsgKiByZXR1cm5lZC4NCj4gKyAqDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVn ZXhfb3BzOjpuYl9hY3R1YWxfbWF0Y2hlcw0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X29w czo6bmJfbWF0Y2hlcw0KPiArICovDQo+ICsNCj4gKw0KPiArLyogRW51bWVyYXRlcyBSZWdFeCBy ZXNwb25zZSBmbGFncy4gKi8NCj4gKyNkZWZpbmUgUlRFX1JFR0VYX09QU19SU1BfUE1JX1NPSl9G ICgxIDw8IDApDQo+ICsvKio8IEluZGljYXRlcyB0aGF0IHRoZSBSZWdFeCBkZXZpY2UgaGFzIGVu Y291bnRlcmVkIGEgcGFydGlhbCBtYXRjaCBhdCB0aGUNCj4gKyAqIHN0YXJ0IG9mIHNjYW4gaW4g dGhlIGdpdmVuIGJ1ZmZlci4NCj4gKyAqDQo+ICsgKiBAc2VlIFJURV9SRUdFWF9ERVZfQ0ZHX0NS T1NTX0JVRkZFUl9TQ0FOX0YNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9PUFNf UlNQX1BNSV9FT0pfRiAoMSA8PCAxKQ0KPiArLyoqPCBJbmRpY2F0ZXMgdGhhdCB0aGUgUmVnRXgg ZGV2aWNlIGhhcyBlbmNvdW50ZXJlZCBhIHBhcnRpYWwgbWF0Y2ggYXQgdGhlDQo+ICsgKiBlbmQg b2Ygc2NhbiBpbiB0aGUgZ2l2ZW4gYnVmZmVyLg0KPiArICoNCj4gKyAqIEBzZWUgUlRFX1JFR0VY X0RFVl9DRkdfQ1JPU1NfQlVGRkVSX1NDQU5fRg0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRF X1JFR0VYX09QU19SU1BfTUFYX1NDQU5fVElNRU9VVF9GICgxIDw8IDIpDQo+ICsvKio8IEluZGlj YXRlcyB0aGF0IHRoZSBSZWdFeCBkZXZpY2UgaGFzIGV4Y2VlZGVkIHRoZSBtYXggdGltZW91dCB3 aGlsZQ0KPiArICogc2Nhbm5pbmcgdGhlIGdpdmVuIGJ1ZmZlci4NCj4gKyAqDQo+ICsgKiBAc2Vl IFJURV9SRUdFWF9ERVZfQVRUUl9NQVhfU0NBTl9USU1FT1VUDQo+ICsgKi8NCj4gKw0KPiArI2Rl ZmluZSBSVEVfUkVHRVhfT1BTX1JTUF9NQVhfTUFUQ0hfRiAoMSA8PCAzKQ0KPiArLyoqPCBJbmRp Y2F0ZXMgdGhhdCB0aGUgUmVnRXggZGV2aWNlIGhhcyBleGNlZWRlZCB0aGUgbWF4IG1hdGNoZXMg d2hpbGUNCj4gKyAqIHNjYW5uaW5nIHRoZSBnaXZlbiBidWZmZXIuDQo+ICsgKg0KPiArICogQHNl ZSBSVEVfUkVHRVhfREVWX0FUVFJfTUFYX01BVENIRVMNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5l IFJURV9SRUdFWF9PUFNfUlNQX01BWF9QUkVGSVhfRiAoMSA8PCA0KQ0KPiArLyoqPCBJbmRpY2F0 ZXMgdGhhdCB0aGUgUmVnRXggZGV2aWNlIGhhcyByZWFjaGVkIHRoZSBtYXggYWxsb3dlZCBwcmVm aXgNCj4gbGVuZ3RoDQo+ICsgKiB3aGlsZSBzY2FubmluZyB0aGUgZ2l2ZW4gYnVmZmVyLg0KPiAr ICoNCj4gKyAqIEBzZWUgUlRFX1JFR0VYX0RFVl9BVFRSX01BWF9QUkVGSVgNCj4gKyAqLw0KPiAr DQo+ICsvKioNCj4gKyAqIFRoZSBnZW5lcmljICpydGVfcmVnZXhfb3BzKiBzdHJ1Y3R1cmUgdG8g aG9sZCB0aGUgUmVnRXggYXR0cmlidXRlcw0KPiArICogZm9yIGVucXVldWUgYW5kIGRlcXVldWUg b3BlcmF0aW9uLg0KPiArICovDQo+ICtzdHJ1Y3QgcnRlX3JlZ2V4X29wcyB7DQo+ICsJLyogVzAg Ki8NCj4gKwl1aW50MTZfdCByZXFfZmxhZ3M7DQo+ICsJLyoqPCBSZXF1ZXN0IGZsYWdzIGZvciB0 aGUgUmVnRXggb3BzLg0KPiArCSAqIEBzZWUgUlRFX1JFR0VYX09QU19SRVFfKg0KPiArCSAqLw0K PiArCXVpbnQxNl90IHNjYW5fc2l6ZTsNCj4gKwkvKio8IFNjYW4gc2l6ZSBvZiB0aGUgYnVmZmVy IHRvIGJlIHNjYW5uZWQgaW4gYnl0ZXMuICovDQo+ICsJdWludDE2X3QgcnNwX2ZsYWdzOw0KPiAr CS8qKjwgUmVzcG9uc2UgZmxhZ3MgZm9yIHRoZSBSZWdFeCBvcHMuDQo+ICsJICogQHNlZSBSVEVf UkVHRVhfT1BTX1JTUF8qDQo+ICsJICovDQo+ICsJdWludDhfdCBuYl9hY3R1YWxfbWF0Y2hlczsN Cj4gKwkvKio8IFRoZSB0b3RhbCBudW1iZXIgb2YgYWN0dWFsIG1hdGNoZXMgZGV0ZWN0ZWQgYnkg dGhlIFJlZ2V4DQo+IGRldmljZS4qLw0KPiArCXVpbnQ4X3QgbmJfbWF0Y2hlczsNCj4gKwkvKio8 IFRoZSB0b3RhbCBudW1iZXIgb2YgbWF0Y2hlcyByZXR1cm5lZCBieSB0aGUgUmVnRXggZGV2aWNl IGZvcg0KPiB0aGlzDQo+ICsJICogc2Nhbi4gVGhlIHNpemUgb2YgKnJ0ZV9yZWdleF9vcHM6Om1h dGNoZXMqIHplcm8gbGVuZ3RoIGFycmF5IHdpbGwNCj4gYmUNCj4gKwkgKiB0aGlzIHZhbHVlLg0K PiArCSAqDQo+ICsJICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X29wczo6bWF0Y2hlcywgc3RydWN0 IHJ0ZV9yZWdleF9tYXRjaA0KPiArCSAqLw0KPiArDQo+ICsJLyogVzEgKi8NCj4gKwlSVEVfU1RE X0MxMQ0KPiArCXVuaW9uIHsNCj4gKwkJdWludDY0X3QgdTY0Ow0KPiArCQkvKio8ICBBbGxvdyA4 LWJ5dGUgcmVzZXJ2ZWQgb24gMzItYml0IHN5c3RlbSAqLw0KPiArCQl2b2lkICpidWZfYWRkcjsN Cj4gKwkJLyoqPCBWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHBhdHRlcm4gdG8gYmUgbWF0Y2hlZC4g Ki8NCj4gKwl9Ow0KPiArDQo+ICsJLyogVzIgKi8NCj4gKwlydGVfaW92YV90IGJ1Zl9pb3ZhOw0K PiArCS8qKjwgSU9WQSBhZGRyZXNzIG9mIHRoZSBwYXR0ZXJuIHRvIGJlIG1hdGNoZWQuICovDQo+ ICsNCj4gKwkvKiBXMyAqLw0KPiArCXVpbnQxNl90IGdyb3VwX2lkMDsNCj4gKwkvKio8IEZpcnN0 IGdyb3VwX2lkIHRvIG1hdGNoIHRoZSBydWxlIGFnYWluc3QuIE1pbmltdW0gb25lIGdyb3VwIGlk DQo+ICsJICogbXVzdCBiZSBwcm92aWRlZCBieSBhcHBsaWNhdGlvbi4NCj4gKwkgKiBXaGVuIFJU RV9SRUdFWF9PUFNfUkVRX0dST1VQX0lEMV9WQUxJRF9GIHNldCB0aGVuDQo+IGdyb3VwX2lkMQ0K PiArCSAqIGlzIHZhbGlkLCByZXNwZWN0aXZlbHkgc2ltaWxhciBmbGFncyBmb3IgZ3JvdXBfaWQy IGFuZCBncm91cF9pZDMuDQo+ICsJICogVXBvbiB0aGUgbWF0Y2gsIHN0cnVjdCBydGVfcmVnZXhf bWF0Y2g6Omdyb3VwX2lkIHNoYWxsIGJlDQo+IHVwZGF0ZWQNCj4gKwkgKiB3aXRoIG1hdGNoaW5n IGdyb3VwIElEIGJ5IHRoZSBkZXZpY2UuIEdyb3VwIElEIHNjaGVtZSBwcm92aWRlcw0KPiArCSAq IHJ1bGUgaXNvbGF0aW9uIGFuZCBlZmZlY3RpdmUgcGF0dGVybiBtYXRjaGluZy4NCj4gKwkgKi8N Cj4gKwl1aW50MTZfdCBncm91cF9pZDE7DQo+ICsJLyoqPCBTZWNvbmQgZ3JvdXBfaWQgdG8gbWF0 Y2ggdGhlIHJ1bGUgYWdhaW5zdC4NCj4gKwkgKg0KPiArCSAqIEBzZWUgUlRFX1JFR0VYX09QU19S RVFfR1JPVVBfSUQxX1ZBTElEX0YNCj4gKwkgKi8NCj4gKwl1aW50MTZfdCBncm91cF9pZDI7DQo+ ICsJLyoqPCBUaGlyZCBncm91cF9pZCB0byBtYXRjaCB0aGUgcnVsZSBhZ2FpbnN0Lg0KPiArCSAq DQo+ICsJICogQHNlZSBSVEVfUkVHRVhfT1BTX1JFUV9HUk9VUF9JRDJfVkFMSURfRg0KPiArCSAq Lw0KPiArCXVpbnQxNl90IGdyb3VwX2lkMzsNCj4gKwkvKio8IEZvcnRoIGdyb3VwX2lkIHRvIG1h dGNoIHRoZSBydWxlIGFnYWluc3QuDQo+ICsJICoNCj4gKwkgKiBAc2VlIFJURV9SRUdFWF9PUFNf UkVRX0dST1VQX0lEM19WQUxJRF9GDQo+ICsJICovDQo+ICsNCj4gKwkvKiBXNCAqLw0KPiArCVJU RV9TVERfQzExDQo+ICsJdW5pb24gew0KPiArCQl1aW50NjRfdCB1c2VyX2lkOw0KPiArCQkvKio8 IEFwcGxpY2F0aW9uIHNwZWNpZmljIG9wYXF1ZSB2YWx1ZS4gQW4gYXBwbGljYXRpb24gbWF5DQo+ IHVzZQ0KPiArCQkgKiB0aGlzIGZpZWxkIHRvIGhvbGQgYXBwbGljYXRpb24gc3BlY2lmaWMgdmFs dWUgdG8gc2hhcmUNCj4gKwkJICogYmV0d2VlbiBkZXF1ZXVlIGFuZCBlbnF1ZXVlIG9wZXJhdGlv bi4NCj4gKwkJICogSW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCBtb2RpZnkgdGhpcyBmaWVsZC4N Cj4gKwkJICovDQo+ICsJCXZvaWQgKnVzZXJfcHRyOw0KPiArCQkvKio8IFBvaW50ZXIgcmVwcmVz ZW50YXRpb24gb2YgKnVzZXJfaWQqICovDQo+ICsJfTsNCg0KU2luY2Ugd2UgdGFyZ2V0IHRoZSBy ZWdleCBzdWJzeXN0ZW0gZm9yIGJvdGggcmVnZXggYW5kIERQSSBJIHRoaW5rIGl0IHdpbGwgYmUg Z29vZCB0byBhZGQgYW5vdGhlciB1aW50NjRfdCBmaWVsZCBjYWxsZWQgY29ubmVjdGlvbl9pZC4g DQpEZXZpY2UgdGhhdCBzdXBwb3J0IERQSSBjYW4gcmVmZXIgdG8gaXQgYXMgYW5vdGhlciBtYXRj aCBhYmxlIGZpZWxkIHdoZW4gbG9va2luZyB1cCBmb3IgbWF0Y2hlcyBvbiB0aGUgZ2l2ZW4gYnVm ZmVyLiANCg0KVGhpcyBmaWVsZCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgdXNlcl9pZCwgYXMgaXQg aXMgbm90IG9wYXF1ZSBmb3IgdGhlIGRldmljZS4gDQoNCj4gKw0KPiArCS8qIFc1ICovDQo+ICsJ c3RydWN0IHJ0ZV9yZWdleF9tYXRjaCBtYXRjaGVzW107DQo+ICsJLyoqPCBaZXJvIGxlbmd0aCBh cnJheSB0byBob2xkIHRoZSBtYXRjaCB0dXBsZXMuDQo+ICsJICogVGhlIHN0cnVjdCBydGVfcmVn ZXhfb3BzOjpuYl9tYXRjaGVzIHZhbHVlIGhvbGRzIHRoZSBudW1iZXIgb2YNCj4gKwkgKiBlbGVt ZW50cyBpbiB0aGlzIGFycmF5Lg0KPiArCSAqDQo+ICsJICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4 X29wczo6bmJfbWF0Y2hlcw0KPiArCSAqLw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBFbnF1 ZXVlIGEgYnVyc3Qgb2Ygc2NhbiByZXF1ZXN0IG9uIGEgUmVnRXggZGV2aWNlLg0KPiArICoNCj4g KyAqIFRoZSBydGVfcmVnZXhfZW5xdWV1ZV9idXJzdCgpIGZ1bmN0aW9uIGlzIGludm9rZWQgdG8g cGxhY2UNCj4gKyAqIHJlZ2V4IG9wZXJhdGlvbnMgb24gdGhlIHF1ZXVlICpxcF9pZCogb2YgdGhl IGRldmljZSBkZXNpZ25hdGVkIGJ5DQo+ICsgKiBpdHMgKmRldl9pZCouDQo+ICsgKg0KPiArICog VGhlICpuYl9vcHMqIHBhcmFtZXRlciBpcyB0aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgdG8gcHJv Y2VzcyB3aGljaA0KPiBhcmUNCj4gKyAqIHN1cHBsaWVkIGluIHRoZSAqb3BzKiBhcnJheSBvZiAq cnRlX3JlZ2V4X29wKiBzdHJ1Y3R1cmVzLg0KPiArICoNCj4gKyAqIFRoZSBydGVfcmVnZXhfZW5x dWV1ZV9idXJzdCgpIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZg0KPiArICogb3BlcmF0 aW9ucyBpdCBhY3R1YWxseSBlbnF1ZXVlZCBmb3IgcHJvY2Vzc2luZy4gQSByZXR1cm4gdmFsdWUg ZXF1YWwgdG8NCj4gKyAqICpuYl9vcHMqIG1lYW5zIHRoYXQgYWxsIHBhY2tldHMgaGF2ZSBiZWVu IGVucXVldWVkLg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4gKyAqICAgVGhlIGlkZW50 aWZpZXIgb2YgdGhlIGRldmljZS4NCj4gKyAqIEBwYXJhbSBxcF9pZA0KPiArICogICBUaGUgaW5k ZXggb2YgdGhlIHF1ZXVlIHBhaXIgd2hpY2ggcGFja2V0cyBhcmUgdG8gYmUgZW5xdWV1ZWQgZm9y DQo+ICsgKiAgIHByb2Nlc3NpbmcuIFRoZSB2YWx1ZSBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCwg bmJfcXVldWVfcGFpcnMgLSAxXQ0KPiArICogICBwcmV2aW91c2x5IHN1cHBsaWVkIHRvIHJ0ZV9y ZWdleF9kZXZfY29uZmlndXJlKCkuDQo+ICsgKiBAcGFyYW0gb3BzDQo+ICsgKiAgIFRoZSBhZGRy ZXNzIG9mIGFuIGFycmF5IG9mICpuYl9vcHMqIHBvaW50ZXJzIHRvICpydGVfcmVnZXhfb3AqDQo+ IHN0cnVjdHVyZXMNCj4gKyAqICAgd2hpY2ggY29udGFpbiB0aGUgcmVnZXggb3BlcmF0aW9ucyB0 byBiZSBwcm9jZXNzZWQuDQo+ICsgKiBAcGFyYW0gbmJfb3BzDQo+ICsgKiAgIFRoZSBudW1iZXIg b2Ygb3BlcmF0aW9ucyB0byBwcm9jZXNzLg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAg VGhlIG51bWJlciBvZiBvcGVyYXRpb25zIGFjdHVhbGx5IGVucXVldWVkIG9uIHRoZSByZWdleCBk ZXZpY2UuIFRoZQ0KPiByZXR1cm4NCj4gKyAqICAgdmFsdWUgY2FuIGJlIGxlc3MgdGhhbiB0aGUg dmFsdWUgb2YgdGhlICpuYl9vcHMqIHBhcmFtZXRlciB3aGVuIHRoZQ0KPiArICogICByZWdleCBk ZXZpY2VzIHF1ZXVlIGlzIGZ1bGwgb3IgaWYgaW52YWxpZCBwYXJhbWV0ZXJzIGFyZSBzcGVjaWZp ZWQgaW4NCj4gKyAqICAgYSAqcnRlX3JlZ2V4X29wKi4gSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBs ZXNzIHRoYW4gKm5iX29wcyosIHRoZQ0KPiByZW1haW5pbmcNCj4gKyAqICAgb3BzIGF0IHRoZSBl bmQgb2YgKm9wcyogYXJlIG5vdCBjb25zdW1lZCBhbmQgdGhlIGNhbGxlciBoYXMgdG8gdGFrZQ0K PiBjYXJlDQo+ICsgKiAgIG9mIHRoZW0uDQo+ICsgKi8NCj4gK3VpbnQxNl90DQo+ICtydGVfcmVn ZXhfZW5xdWV1ZV9idXJzdCh1aW50OF90IGRldl9pZCwgdWludDE2X3QgcXBfaWQsDQo+ICsJCQlz dHJ1Y3QgcnRlX3JlZ2V4X29wcyAqKm9wcywgdWludDE2X3QgbmJfb3BzKTsNCj4gKw0KPiArLyoq DQo+ICsgKg0KPiArICogRGVxdWV1ZSBhIGJ1cnN0IG9mIHNjYW4gcmVzcG9uc2UgZnJvbSBhIHF1 ZXVlIG9uIHRoZSBSZWdFeCBkZXZpY2UuDQo+ICsgKiBUaGUgZGVxdWV1ZWQgb3BlcmF0aW9uIGFy ZSBzdG9yZWQgaW4gKnJ0ZV9yZWdleF9vcCogc3RydWN0dXJlcw0KPiArICogd2hvc2UgcG9pbnRl cnMgYXJlIHN1cHBsaWVkIGluIHRoZSAqb3BzKiBhcnJheS4NCj4gKyAqDQo+ICsgKiBUaGUgcnRl X3JlZ2V4X2RlcXVldWVfYnVyc3QoKSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygb3Bz DQo+ICsgKiBhY3R1YWxseSBkZXF1ZXVlZCwgd2hpY2ggaXMgdGhlIG51bWJlciBvZiAqcnRlX3Jl Z2V4X29wKiBkYXRhDQo+IHN0cnVjdHVyZXMNCj4gKyAqIGVmZmVjdGl2ZWx5IHN1cHBsaWVkIGlu dG8gdGhlICpvcHMqIGFycmF5Lg0KPiArICoNCj4gKyAqIEEgcmV0dXJuIHZhbHVlIGVxdWFsIHRv ICpuYl9vcHMqIGluZGljYXRlcyB0aGF0IHRoZSBxdWV1ZSBjb250YWluZWQNCj4gKyAqIGF0IGxl YXN0ICpuYl9vcHMqIG9wZXJhdGlvbnMsIGFuZCB0aGlzIGlzIGxpa2VseSB0byBzaWduaWZ5IHRo YXQgb3RoZXINCj4gKyAqIHByb2Nlc3NlZCBvcGVyYXRpb25zIHJlbWFpbiBpbiB0aGUgZGV2aWNl cyBvdXRwdXQgcXVldWUuIEFwcGxpY2F0aW9ucw0KPiArICogaW1wbGVtZW50aW5nIGEgInJldHJp ZXZlIGFzIG1hbnkgcHJvY2Vzc2VkIG9wZXJhdGlvbnMgYXMgcG9zc2libGUiDQo+IHBvbGljeQ0K PiArICogY2FuIGNoZWNrIHRoaXMgc3BlY2lmaWMgY2FzZSBhbmQga2VlcCBpbnZva2luZyB0aGUN Cj4gKyAqIHJ0ZV9yZWdleF9kZXF1ZXVlX2J1cnN0KCkgZnVuY3Rpb24gdW50aWwgYSB2YWx1ZSBs ZXNzIHRoYW4NCj4gKyAqICpuYl9vcHMqIGlzIHJldHVybmVkLg0KPiArICoNCj4gKyAqIFRoZSBy dGVfcmVnZXhfZGVxdWV1ZV9idXJzdCgpIGZ1bmN0aW9uIGRvZXMgbm90IHByb3ZpZGUgYW55IGVy cm9yDQo+ICsgKiBub3RpZmljYXRpb24gdG8gYXZvaWQgdGhlIGNvcnJlc3BvbmRpbmcgb3Zlcmhl YWQuDQo+ICsgKg0KPiArICogQHBhcmFtIGRldl9pZA0KPiArICogICBUaGUgUmVnRXggZGV2aWNl IGlkZW50aWZpZXINCj4gKyAqIEBwYXJhbSBxcF9pZA0KPiArICogICBUaGUgaW5kZXggb2YgdGhl IHF1ZXVlIHBhaXIgZnJvbSB3aGljaCB0byByZXRyaWV2ZSBwcm9jZXNzZWQgcGFja2V0cy4NCj4g KyAqICAgVGhlIHZhbHVlIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCBuYl9xdWV1ZV9wYWlycyAt IDFdIHByZXZpb3VzbHkNCj4gKyAqICAgc3VwcGxpZWQgdG8gcnRlX3JlZ2V4X2Rldl9jb25maWd1 cmUoKS4NCj4gKyAqIEBwYXJhbSBvcHMNCj4gKyAqICAgVGhlIGFkZHJlc3Mgb2YgYW4gYXJyYXkg b2YgcG9pbnRlcnMgdG8gKnJ0ZV9yZWdleF9vcCogc3RydWN0dXJlcyB0aGF0DQo+IG11c3QNCj4g KyAqICAgYmUgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlICpuYl9vcHMqIHBvaW50ZXJzIGluIGl0Lg0K PiArICogQHBhcmFtIG5iX29wcw0KPiArICogICBUaGUgbWF4aW11bSBudW1iZXIgb2Ygb3BlcmF0 aW9ucyB0byBkZXF1ZXVlLg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgVGhlIG51bWJl ciBvZiBvcGVyYXRpb25zIGFjdHVhbGx5IGRlcXVldWVkLCB3aGljaCBpcyB0aGUgbnVtYmVyDQo+ ICsgKiAgIG9mIHBvaW50ZXJzIHRvICpydGVfcmVnZXhfb3AqIHN0cnVjdHVyZXMgZWZmZWN0aXZl bHkgc3VwcGxpZWQgdG8gdGhlDQo+ICsgKiAgICpvcHMqIGFycmF5LiBJZiB0aGUgcmV0dXJuIHZh bHVlIGlzIGxlc3MgdGhhbiAqbmJfb3BzKiwgdGhlIHJlbWFpbmluZw0KPiArICogICBvcHMgYXQg dGhlIGVuZCBvZiAqb3BzKiBhcmUgbm90IGNvbnN1bWVkIGFuZCB0aGUgY2FsbGVyIGhhcyB0byB0 YWtlDQo+IGNhcmUNCj4gKyAqICAgb2YgdGhlbS4NCj4gKyAqLw0KPiArdWludDE2X3QNCj4gK3J0 ZV9yZWdleF9kZXF1ZXVlX2J1cnN0KHVpbnQ4X3QgZGV2X2lkLCB1aW50MTZfdCBxcF9pZCwNCj4g KwkJCXN0cnVjdCBydGVfcmVnZXhfb3BzICoqb3BzLCB1aW50MTZfdCBuYl9vcHMpOw0KPiArDQo+ ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gK30NCj4gKyNlbmRpZg0KPiArDQo+ICsjZW5kaWYgLyog X1JURV9SRUdFWERFVl9IXyAqLw0KPiANCg0K