Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2350307imu; Sun, 16 Dec 2018 23:47:46 -0800 (PST) X-Google-Smtp-Source: AFSGD/Vi3Woq8y1VNuSI2WqzMaIYgsITSPkRhlXuGAnfzgRNVgn1SNStNCeTPzQ+hTxBefg1Ikj+ X-Received: by 2002:a17:902:c05:: with SMTP id 5mr11930996pls.155.1545032866612; Sun, 16 Dec 2018 23:47:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545032866; cv=none; d=google.com; s=arc-20160816; b=B9fPHPooe5B5JDC+nGJIF/ZrtvsAFjAZeTWjCyXhwWqetO+3/gWSehv4vpJIcK/WmA /BRhKNy1ynBPesLP5WxWrJDuiJRuEviwMNdVPVGMY2ZFYbt+SlhuRwIDnneRSMVCShyc MnDkZ8Lw/s2m+YjG90OtQZr90zq5T0x/+2oxTWxuGsL5U7AunHWzfipPw0zS+d2+yqmt RBjagK+HSbX73ZljBcYW5QM692z0ExAG/RUjmyLuYOjF0cYGiKtyBC1NNpbqK3OxLKmA M4sWN/GckBj3XhSOhrKzewrnAKuwbZTlN8GhCxwNW/ANmLfLswDb55rvjM7wzBjlptGV qspQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from; bh=BZjjLfxpYe2ZDsxRiVayvK1pGISh+W/qQxbieO00rPQ=; b=ozkPe+CxUJZcxBIr6VdauA3+Q3Dp2S6Hwed9nv1Vh5Cj2Or2aVHZuMeJlBp5ugI9Ia jeUZD+gi3Il/izeKgVqM0MFSRAnX+5vUZxhC6hn5q/P6eylrMFGZVgBpMw/C99UCRlJu x6vwaESBc9TitwKInsuE02bUz8RPm6iqUaw8jY7dh6Qkw7JZXg6GCUz+qas1vnnTZ14I GFQvUZvB3nUYmNEsh1GUrzimy6Ly0pYwKWZ58PZCK9r15CPhH4lKGXljM2ODTD1bkYnL LiRrjXduxA1kbTF2cJ2lCTMV1BlLsr/lyrySOMU1/P5dBgc8DKKgHcgAuCZf7tL2MFz7 9Czw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k30si10276586pgb.113.2018.12.16.23.47.31; Sun, 16 Dec 2018 23:47:46 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726566AbeLQHqd (ORCPT + 99 others); Mon, 17 Dec 2018 02:46:33 -0500 Received: from skedge04.snt-world.com ([91.208.41.69]:53510 "EHLO skedge04.snt-world.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726349AbeLQHqd (ORCPT ); Mon, 17 Dec 2018 02:46:33 -0500 Received: from sntmail14r.snt-is.com (unknown [10.203.32.184]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by skedge04.snt-world.com (Postfix) with ESMTPS id 9F58967A7B0; Mon, 17 Dec 2018 08:46:11 +0100 (CET) Received: from sntmail12r.snt-is.com (10.203.32.182) by sntmail14r.snt-is.com (10.203.32.184) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1466.3; Mon, 17 Dec 2018 08:46:11 +0100 Received: from sntmail12r.snt-is.com ([fe80::e551:8750:7bba:3305]) by sntmail12r.snt-is.com ([fe80::e551:8750:7bba:3305%5]) with mapi id 15.01.1466.003; Mon, 17 Dec 2018 08:46:11 +0100 From: Schrempf Frieder To: Han Xu , "linux-mtd@lists.infradead.org" , "boris.brezillon@bootlin.com" , "linux-spi@vger.kernel.org" , Marek Vasut CC: "dwmw2@infradead.org" , "computersforpeace@gmail.com" , "richard@nod.at" , "miquel.raynal@bootlin.com" , "broonie@kernel.org" , David Wolfe , Fabio Estevam , Prabhakar Kushwaha , Yogesh Narayan Gaur , "shawnguo@kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v7 6/9] mtd: fsl-quadspi: Remove the driver as it was replaced by spi-fsl-qspi.c Thread-Topic: [PATCH v7 6/9] mtd: fsl-quadspi: Remove the driver as it was replaced by spi-fsl-qspi.c Thread-Index: AQHUi9vLKytvF73GTE2yrHpz6rQsoqV+dhSAgAQalwA= Date: Mon, 17 Dec 2018 07:46:10 +0000 Message-ID: References: <1543932685-15011-1-git-send-email-frieder.schrempf@kontron.de> <1543932685-15011-7-git-send-email-frieder.schrempf@kontron.de> In-Reply-To: Accept-Language: de-DE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.25.9.42] x-c2processedorg: 51b406b7-48a2-4d03-b652-521f56ac89f3 Content-Type: text/plain; charset="utf-8" Content-ID: <9C3FF2E01F1230498C700B9DBD6EA8E8@snt-world.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-SnT-MailScanner-Information: Please contact the ISP for more information X-SnT-MailScanner-ID: 9F58967A7B0.A0846 X-SnT-MailScanner: Found to be clean X-SnT-MailScanner-SpamCheck: X-SnT-MailScanner-From: frieder.schrempf@kontron.de X-SnT-MailScanner-To: boris.brezillon@bootlin.com, broonie@kernel.org, computersforpeace@gmail.com, david.wolfe@nxp.com, dwmw2@infradead.org, fabio.estevam@nxp.com, han.xu@nxp.com, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, linux-spi@vger.kernel.org, marek.vasut@gmail.com, miquel.raynal@bootlin.com, prabhakar.kushwaha@nxp.com, richard@nod.at, shawnguo@kernel.org, yogeshnarayan.gaur@nxp.com X-Spam-Status: No Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgSGFuLA0KDQpPbiAxNC4xMi4xOCAxODowNSwgSGFuIFh1IHdyb3RlOg0KPiANCj4gDQo+PiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPj4gRnJvbTogU2NocmVtcGYgRnJpZWRlciA8ZnJp ZWRlci5zY2hyZW1wZkBrb250cm9uLmRlPg0KPj4gU2VudDogVHVlc2RheSwgRGVjZW1iZXIgNCwg MjAxOCA4OjE1IEFNDQo+PiBUbzogbGludXgtbXRkQGxpc3RzLmluZnJhZGVhZC5vcmc7IGJvcmlz LmJyZXppbGxvbkBib290bGluLmNvbTsgbGludXgtDQo+PiBzcGlAdmdlci5rZXJuZWwub3JnOyBN YXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPg0KPj4gQ2M6IGR3bXcyQGluZnJhZGVh ZC5vcmc7IGNvbXB1dGVyc2ZvcnBlYWNlQGdtYWlsLmNvbTsNCj4+IHJpY2hhcmRAbm9kLmF0OyBt aXF1ZWwucmF5bmFsQGJvb3RsaW4uY29tOyBicm9vbmllQGtlcm5lbC5vcmc7IERhdmlkDQo+PiBX b2xmZSA8ZGF2aWQud29sZmVAbnhwLmNvbT47IEZhYmlvIEVzdGV2YW0gPGZhYmlvLmVzdGV2YW1A bnhwLmNvbT47DQo+PiBQcmFiaGFrYXIgS3VzaHdhaGEgPHByYWJoYWthci5rdXNod2FoYUBueHAu Y29tPjsgWW9nZXNoIE5hcmF5YW4NCj4+IEdhdXIgPHlvZ2VzaG5hcmF5YW4uZ2F1ckBueHAuY29t PjsgSGFuIFh1IDxoYW4ueHVAbnhwLmNvbT47DQo+PiBzaGF3bmd1b0BrZXJuZWwub3JnOyBTY2hy ZW1wZiBGcmllZGVyIDxmcmllZGVyLnNjaHJlbXBmQGtvbnRyb24uZGU+Ow0KPj4gbGludXgta2Vy bmVsQHZnZXIua2VybmVsLm9yZw0KPj4gU3ViamVjdDogW1BBVENIIHY3IDYvOV0gbXRkOiBmc2wt cXVhZHNwaTogUmVtb3ZlIHRoZSBkcml2ZXIgYXMgaXQgd2FzDQo+PiByZXBsYWNlZCBieSBzcGkt ZnNsLXFzcGkuYw0KPj4NCj4+IEZyb206IEZyaWVkZXIgU2NocmVtcGYgPGZyaWVkZXIuc2NocmVt cGZAa29udHJvbi5kZT4NCj4+DQo+PiBUaGVyZSdzIGEgbmV3IGRyaXZlciB1c2luZyB0aGUgU1BJ IG1lbW9yeSBpbnRlcmZhY2Ugb2YgdGhlIFNQSSBmcmFtZXdvcmsgYXQNCj4+IHNwaS9zcGktZnNs LXFzcGkuYywgd2hpY2ggY2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBtMjVwODAuYyB0byByZXBs YWNlIHRoZQ0KPj4gZnVuY3Rpb25hbGl0eSBvZiB0aGlzIFNQSSBOT1IgZHJpdmVyLg0KPj4NCj4+ IFRoZSBuZXcgZHJpdmVyIGlzIGFscmVhZHkgaW4gdXNlIGFuZCB0aGlzIGNvZGUgaXMgbm90IGNv bXBpbGVkIGFueW1vcmUsIHNvDQo+PiBsZXQncyByZW1vdmUgaXQuDQo+Pg0KPj4gU2lnbmVkLW9m Zi1ieTogRnJpZWRlciBTY2hyZW1wZiA8ZnJpZWRlci5zY2hyZW1wZkBrb250cm9uLmRlPg0KPj4g LS0tDQo+PiAgIGRyaXZlcnMvbXRkL3NwaS1ub3IvZnNsLXF1YWRzcGkuYyB8IDEyMjQgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+ICAgMSBmaWxlIGNoYW5nZWQsIDEyMjQgZGVs ZXRpb25zKC0pDQo+Pg0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3NwaS1ub3IvZnNsLXF1 YWRzcGkuYyBiL2RyaXZlcnMvbXRkL3NwaS1ub3IvZnNsLQ0KPj4gcXVhZHNwaS5jDQo+PiBkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDFmZjM0MzAuLjAwMDAwMDANCj4+IC0tLSBh L2RyaXZlcnMvbXRkL3NwaS1ub3IvZnNsLXF1YWRzcGkuYw0KPj4gKysrIC9kZXYvbnVsbA0KPj4g QEAgLTEsMTIyNCArMCwwIEBADQo+PiAtLyoNCj4+IC0gKiBGcmVlc2NhbGUgUXVhZFNQSSBkcml2 ZXIuDQo+PiAtICoNCj4+IC0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgRnJlZXNjYWxlIFNlbWljb25k dWN0b3IsIEluYy4NCj4+IC0gKg0KPj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQo+PiAtICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkNCj4+IC0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLCBvcg0KPj4gLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uDQo+PiAtICovDQo+PiAtI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPj4gLSNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4NCj4+IC0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ PiAtI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+DQo+PiAtI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt X2RldmljZS5oPg0KPj4gLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPg0KPj4gLSNpbmNsdWRlIDxs aW51eC9kZWxheS5oPg0KPj4gLSNpbmNsdWRlIDxsaW51eC9pby5oPg0KPj4gLSNpbmNsdWRlIDxs aW51eC9jbGsuaD4NCj4+IC0jaW5jbHVkZSA8bGludXgvZXJyLmg+DQo+PiAtI2luY2x1ZGUgPGxp bnV4L29mLmg+DQo+PiAtI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPg0KPj4gLSNpbmNsdWRl IDxsaW51eC90aW1lci5oPg0KPj4gLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+DQo+PiAtI2lu Y2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4NCj4+IC0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5o Pg0KPj4gLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPg0KPj4gLSNpbmNsdWRlIDxs aW51eC9tdGQvc3BpLW5vci5oPg0KPj4gLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPg0KPj4gLSNp bmNsdWRlIDxsaW51eC9wbV9xb3MuaD4NCj4+IC0jaW5jbHVkZSA8bGludXgvc2l6ZXMuaD4NCj4+ IC0NCj4+IC0vKiBDb250cm9sbGVyIG5lZWRzIGRyaXZlciB0byBzd2FwIGVuZGlhbiAqLw0KPj4g LSNkZWZpbmUgUVVBRFNQSV9RVUlSS19TV0FQX0VORElBTgkoMSA8PCAwKQ0KPj4gLS8qIENvbnRy b2xsZXIgbmVlZHMgNHggaW50ZXJuYWwgY2xvY2sgKi8NCj4+IC0jZGVmaW5lIFFVQURTUElfUVVJ UktfNFhfSU5UX0NMSwkoMSA8PCAxKQ0KPj4gLS8qDQo+PiAtICogVEtUMjUzODkwLCBDb250cm9s bGVyIG5lZWRzIGRyaXZlciB0byBmaWxsIHR4ZmlmbyB0aWxsIDE2IGJ5dGUgdG8NCj4+IC0gKiB0 cmlnZ2VyIGRhdGEgdHJhbnNmZXIgZXZlbiB0aG91Z2ggZXh0ZXJuIGRhdGEgd2lsbCBub3QgdHJh bnNmZXJyZWQuDQo+PiAtICovDQo+PiAtI2RlZmluZSBRVUFEU1BJX1FVSVJLX1RLVDI1Mzg5MAkJ KDEgPDwgMikNCj4+IC0vKiBDb250cm9sbGVyIGNhbm5vdCB3YWtlIHVwIGZyb20gd2FpdCBtb2Rl LCBUS1QyNDU2MTggKi8NCj4+IC0jZGVmaW5lIFFVQURTUElfUVVJUktfVEtUMjQ1NjE4ICAgICAg ICAgKDEgPDwgMykNCj4+IC0NCj4+IC0vKiBUaGUgcmVnaXN0ZXJzICovDQo+PiAtI2RlZmluZSBR VUFEU1BJX01DUgkJCTB4MDANCj4+IC0jZGVmaW5lIFFVQURTUElfTUNSX1JFU0VSVkVEX1NISUZU CTE2DQo+PiAtI2RlZmluZSBRVUFEU1BJX01DUl9SRVNFUlZFRF9NQVNLCSgweEYgPDwNCj4+IFFV QURTUElfTUNSX1JFU0VSVkVEX1NISUZUKQ0KPj4gLSNkZWZpbmUgUVVBRFNQSV9NQ1JfTURJU19T SElGVAkJMTQNCj4+IC0jZGVmaW5lIFFVQURTUElfTUNSX01ESVNfTUFTSwkJKDEgPDwNCj4+IFFV QURTUElfTUNSX01ESVNfU0hJRlQpDQo+PiAtI2RlZmluZSBRVUFEU1BJX01DUl9DTFJfVFhGX1NI SUZUCTExDQo+PiAtI2RlZmluZSBRVUFEU1BJX01DUl9DTFJfVFhGX01BU0sJKDEgPDwNCj4+IFFV QURTUElfTUNSX0NMUl9UWEZfU0hJRlQpDQo+PiAtI2RlZmluZSBRVUFEU1BJX01DUl9DTFJfUlhG X1NISUZUCTEwDQo+PiAtI2RlZmluZSBRVUFEU1BJX01DUl9DTFJfUlhGX01BU0sJKDEgPDwNCj4+ IFFVQURTUElfTUNSX0NMUl9SWEZfU0hJRlQpDQo+PiAtI2RlZmluZSBRVUFEU1BJX01DUl9ERFJf RU5fU0hJRlQJNw0KPj4gLSNkZWZpbmUgUVVBRFNQSV9NQ1JfRERSX0VOX01BU0sJCSgxIDw8DQo+ PiBRVUFEU1BJX01DUl9ERFJfRU5fU0hJRlQpDQo+PiAtI2RlZmluZSBRVUFEU1BJX01DUl9FTkRf Q0ZHX1NISUZUCTINCj4+IC0jZGVmaW5lIFFVQURTUElfTUNSX0VORF9DRkdfTUFTSwkoMyA8PA0K Pj4gUVVBRFNQSV9NQ1JfRU5EX0NGR19TSElGVCkNCj4+IC0jZGVmaW5lIFFVQURTUElfTUNSX1NX UlNUSERfU0hJRlQJMQ0KPj4gLSNkZWZpbmUgUVVBRFNQSV9NQ1JfU1dSU1RIRF9NQVNLCSgxIDw8 DQo+PiBRVUFEU1BJX01DUl9TV1JTVEhEX1NISUZUKQ0KPj4gLSNkZWZpbmUgUVVBRFNQSV9NQ1Jf U1dSU1RTRF9TSElGVAkwDQo+PiAtI2RlZmluZSBRVUFEU1BJX01DUl9TV1JTVFNEX01BU0sJKDEg PDwNCj4+IFFVQURTUElfTUNSX1NXUlNUU0RfU0hJRlQpDQo+PiAtDQo+PiAtI2RlZmluZSBRVUFE U1BJX0lQQ1IJCQkweDA4DQo+PiAtI2RlZmluZSBRVUFEU1BJX0lQQ1JfU0VRSURfU0hJRlQJMjQN Cj4+IC0jZGVmaW5lIFFVQURTUElfSVBDUl9TRVFJRF9NQVNLCQkoMHhGIDw8DQo+PiBRVUFEU1BJ X0lQQ1JfU0VRSURfU0hJRlQpDQo+PiAtDQo+PiAtI2RlZmluZSBRVUFEU1BJX0JVRjBDUgkJCTB4 MTANCj4+IC0jZGVmaW5lIFFVQURTUElfQlVGMUNSCQkJMHgxNA0KPj4gLSNkZWZpbmUgUVVBRFNQ SV9CVUYyQ1IJCQkweDE4DQo+PiAtI2RlZmluZSBRVUFEU1BJX0JVRlhDUl9JTlZBTElEX01TVFJJ RAkweGUNCj4+IC0NCj4+IC0jZGVmaW5lIFFVQURTUElfQlVGM0NSCQkJMHgxYw0KPj4gLSNkZWZp bmUgUVVBRFNQSV9CVUYzQ1JfQUxMTVNUX1NISUZUCTMxDQo+PiAtI2RlZmluZSBRVUFEU1BJX0JV RjNDUl9BTExNU1RfTUFTSwkoMSA8PA0KPj4gUVVBRFNQSV9CVUYzQ1JfQUxMTVNUX1NISUZUKQ0K Pj4gLSNkZWZpbmUgUVVBRFNQSV9CVUYzQ1JfQURBVFNaX1NISUZUCQk4DQo+PiAtI2RlZmluZSBR VUFEU1BJX0JVRjNDUl9BREFUU1pfTUFTSwkoMHhGRiA8PA0KPj4gUVVBRFNQSV9CVUYzQ1JfQURB VFNaX1NISUZUKQ0KPj4gLQ0KPj4gLSNkZWZpbmUgUVVBRFNQSV9CRkdFTkNSCQkJMHgyMA0KPj4g LSNkZWZpbmUgUVVBRFNQSV9CRkdFTkNSX1BBUl9FTl9TSElGVAkxNg0KPj4gLSNkZWZpbmUgUVVB RFNQSV9CRkdFTkNSX1BBUl9FTl9NQVNLCSgxIDw8DQo+PiAoUVVBRFNQSV9CRkdFTkNSX1BBUl9F Tl9TSElGVCkpDQo+PiAtI2RlZmluZSBRVUFEU1BJX0JGR0VOQ1JfU0VRSURfU0hJRlQJMTINCj4+ IC0jZGVmaW5lIFFVQURTUElfQkZHRU5DUl9TRVFJRF9NQVNLCSgweEYgPDwNCj4+IFFVQURTUElf QkZHRU5DUl9TRVFJRF9TSElGVCkNCj4+IC0NCj4+IC0jZGVmaW5lIFFVQURTUElfQlVGMElORAkJ CTB4MzANCj4+IC0jZGVmaW5lIFFVQURTUElfQlVGMUlORAkJCTB4MzQNCj4+IC0jZGVmaW5lIFFV QURTUElfQlVGMklORAkJCTB4MzgNCj4+IC0jZGVmaW5lIFFVQURTUElfU0ZBUgkJCTB4MTAwDQo+ PiAtDQo+PiAtI2RlZmluZSBRVUFEU1BJX1NNUFIJCQkweDEwOA0KPj4gLSNkZWZpbmUgUVVBRFNQ SV9TTVBSX0REUlNNUF9TSElGVAkxNg0KPj4gLSNkZWZpbmUgUVVBRFNQSV9TTVBSX0REUlNNUF9N QVNLCSg3IDw8DQo+PiBRVUFEU1BJX1NNUFJfRERSU01QX1NISUZUKQ0KPj4gLSNkZWZpbmUgUVVB RFNQSV9TTVBSX0ZTRExZX1NISUZUCTYNCj4+IC0jZGVmaW5lIFFVQURTUElfU01QUl9GU0RMWV9N QVNLCQkoMSA8PA0KPj4gUVVBRFNQSV9TTVBSX0ZTRExZX1NISUZUKQ0KPj4gLSNkZWZpbmUgUVVB RFNQSV9TTVBSX0ZTUEhTX1NISUZUCTUNCj4+IC0jZGVmaW5lIFFVQURTUElfU01QUl9GU1BIU19N QVNLCQkoMSA8PA0KPj4gUVVBRFNQSV9TTVBSX0ZTUEhTX1NISUZUKQ0KPj4gLSNkZWZpbmUgUVVB RFNQSV9TTVBSX0hTRU5BX1NISUZUCTANCj4+IC0jZGVmaW5lIFFVQURTUElfU01QUl9IU0VOQV9N QVNLCQkoMSA8PA0KPj4gUVVBRFNQSV9TTVBSX0hTRU5BX1NISUZUKQ0KPj4gLQ0KPj4gLSNkZWZp bmUgUVVBRFNQSV9SQlNSCQkJMHgxMGMNCj4+IC0jZGVmaW5lIFFVQURTUElfUkJTUl9SREJGTF9T SElGVAk4DQo+PiAtI2RlZmluZSBRVUFEU1BJX1JCU1JfUkRCRkxfTUFTSwkJKDB4M0YgPDwNCj4+ IFFVQURTUElfUkJTUl9SREJGTF9TSElGVCkNCj4+IC0NCj4+IC0jZGVmaW5lIFFVQURTUElfUkJD VAkJCTB4MTEwDQo+PiAtI2RlZmluZSBRVUFEU1BJX1JCQ1RfV01SS19NQVNLCQkweDFGDQo+PiAt I2RlZmluZSBRVUFEU1BJX1JCQ1RfUlhCUkRfU0hJRlQJOA0KPj4gLSNkZWZpbmUgUVVBRFNQSV9S QkNUX1JYQlJEX1VTRUlQUwkoMHgxIDw8DQo+PiBRVUFEU1BJX1JCQ1RfUlhCUkRfU0hJRlQpDQo+ PiAtDQo+PiAtI2RlZmluZSBRVUFEU1BJX1RCU1IJCQkweDE1MA0KPj4gLSNkZWZpbmUgUVVBRFNQ SV9UQkRSCQkJMHgxNTQNCj4+IC0jZGVmaW5lIFFVQURTUElfU1IJCQkweDE1Yw0KPj4gLSNkZWZp bmUgUVVBRFNQSV9TUl9JUF9BQ0NfU0hJRlQJCTENCj4+IC0jZGVmaW5lIFFVQURTUElfU1JfSVBf QUNDX01BU0sJCSgweDEgPDwNCj4+IFFVQURTUElfU1JfSVBfQUNDX1NISUZUKQ0KPj4gLSNkZWZp bmUgUVVBRFNQSV9TUl9BSEJfQUNDX1NISUZUCTINCj4+IC0jZGVmaW5lIFFVQURTUElfU1JfQUhC X0FDQ19NQVNLCQkoMHgxIDw8DQo+PiBRVUFEU1BJX1NSX0FIQl9BQ0NfU0hJRlQpDQo+PiAtDQo+ PiAtI2RlZmluZSBRVUFEU1BJX0ZSCQkJMHgxNjANCj4+IC0jZGVmaW5lIFFVQURTUElfRlJfVEZG X01BU0sJCTB4MQ0KPj4gLQ0KPj4gLSNkZWZpbmUgUVVBRFNQSV9TRkExQUQJCQkweDE4MA0KPj4g LSNkZWZpbmUgUVVBRFNQSV9TRkEyQUQJCQkweDE4NA0KPj4gLSNkZWZpbmUgUVVBRFNQSV9TRkIx QUQJCQkweDE4OA0KPj4gLSNkZWZpbmUgUVVBRFNQSV9TRkIyQUQJCQkweDE4Yw0KPj4gLSNkZWZp bmUgUVVBRFNQSV9SQkRSCQkJMHgyMDANCj4+IC0NCj4+IC0jZGVmaW5lIFFVQURTUElfTFVUS0VZ CQkJMHgzMDANCj4+IC0jZGVmaW5lIFFVQURTUElfTFVUS0VZX1ZBTFVFCQkweDVBRjA1QUYwDQo+ PiAtDQo+PiAtI2RlZmluZSBRVUFEU1BJX0xDS0NSCQkJMHgzMDQNCj4+IC0jZGVmaW5lIFFVQURT UElfTENLRVJfTE9DSwkJMHgxDQo+PiAtI2RlZmluZSBRVUFEU1BJX0xDS0VSX1VOTE9DSwkJMHgy DQo+PiAtDQo+PiAtI2RlZmluZSBRVUFEU1BJX1JTRVIJCQkweDE2NA0KPj4gLSNkZWZpbmUgUVVB RFNQSV9SU0VSX1RGSUUJCSgweDEgPDwgMCkNCj4+IC0NCj4+IC0jZGVmaW5lIFFVQURTUElfTFVU X0JBU0UJCTB4MzEwDQo+PiAtDQo+PiAtLyoNCj4+IC0gKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUg TFVUIHJlZ2lzdGVyIHNob3dzIGJlbG93Og0KPj4gLSAqDQo+PiAtICogIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPj4gLSAqICB8IElOU1RSMSB8 IFBBRDEgfCBPUFJORDEgfCBJTlNUUjAgfCBQQUQwIHwgT1BSTkQwIHwNCj4+IC0gKiAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+PiAtICovDQo+ PiAtI2RlZmluZSBPUFJORDBfU0hJRlQJCTANCj4+IC0jZGVmaW5lIFBBRDBfU0hJRlQJCTgNCj4+ IC0jZGVmaW5lIElOU1RSMF9TSElGVAkJMTANCj4+IC0jZGVmaW5lIE9QUk5EMV9TSElGVAkJMTYN Cj4+IC0NCj4+IC0vKiBJbnN0cnVjdGlvbiBzZXQgZm9yIHRoZSBMVVQgcmVnaXN0ZXIuICovDQo+ PiAtI2RlZmluZSBMVVRfU1RPUAkJMA0KPj4gLSNkZWZpbmUgTFVUX0NNRAkJCTENCj4+IC0jZGVm aW5lIExVVF9BRERSCQkyDQo+PiAtI2RlZmluZSBMVVRfRFVNTVkJCTMNCj4+IC0jZGVmaW5lIExV VF9NT0RFCQk0DQo+PiAtI2RlZmluZSBMVVRfTU9ERTIJCTUNCj4+IC0jZGVmaW5lIExVVF9NT0RF NAkJNg0KPj4gLSNkZWZpbmUgTFVUX0ZTTF9SRUFECQk3DQo+PiAtI2RlZmluZSBMVVRfRlNMX1dS SVRFCQk4DQo+PiAtI2RlZmluZSBMVVRfSk1QX09OX0NTCQk5DQo+PiAtI2RlZmluZSBMVVRfQURE Ul9ERFIJCTEwDQo+PiAtI2RlZmluZSBMVVRfTU9ERV9ERFIJCTExDQo+PiAtI2RlZmluZSBMVVRf TU9ERTJfRERSCQkxMg0KPj4gLSNkZWZpbmUgTFVUX01PREU0X0REUgkJMTMNCj4+IC0jZGVmaW5l IExVVF9GU0xfUkVBRF9ERFIJCTE0DQo+PiAtI2RlZmluZSBMVVRfRlNMX1dSSVRFX0REUgkJMTUN Cj4+IC0jZGVmaW5lIExVVF9EQVRBX0xFQVJOCQkxNg0KPj4gLQ0KPj4gLS8qDQo+PiAtICogVGhl IFBBRCBkZWZpbml0aW9ucyBmb3IgTFVUIHJlZ2lzdGVyLg0KPj4gLSAqDQo+PiAtICogVGhlIHBh ZCBzdGFuZHMgZm9yIHRoZSBsaW5lcyBudW1iZXIgb2YgSU9bMDozXS4NCj4+IC0gKiBGb3IgZXhh bXBsZSwgdGhlIFF1YWQgcmVhZCBuZWVkIGZvdXIgSU8gbGluZXMsIHNvIHlvdSBzaG91bGQNCj4+ IC0gKiBzZXQgTFVUX1BBRDQgd2hpY2ggbWVhbnMgd2UgdXNlIGZvdXIgSU8gbGluZXMuDQo+PiAt ICovDQo+PiAtI2RlZmluZSBMVVRfUEFEMQkJMA0KPj4gLSNkZWZpbmUgTFVUX1BBRDIJCTENCj4+ IC0jZGVmaW5lIExVVF9QQUQ0CQkyDQo+PiAtDQo+PiAtLyogT3ByYW5kcyBmb3IgdGhlIExVVCBy ZWdpc3Rlci4gKi8NCj4+IC0jZGVmaW5lIEFERFIyNEJJVAkJMHgxOA0KPj4gLSNkZWZpbmUgQURE UjMyQklUCQkweDIwDQo+PiAtDQo+PiAtLyogTWFjcm9zIGZvciBjb25zdHJ1Y3RpbmcgdGhlIExV VCByZWdpc3Rlci4gKi8NCj4+IC0jZGVmaW5lIExVVDAoaW5zLCBwYWQsIG9wcikJCQkJCQlcDQo+ PiAtCQkoKChvcHIpIDw8IE9QUk5EMF9TSElGVCkgfCAoKExVVF8jI3BhZCkgPDwgUEFEMF9TSElG VCkgfCBcDQo+PiAtCQkoKExVVF8jI2lucykgPDwgSU5TVFIwX1NISUZUKSkNCj4+IC0NCj4+IC0j ZGVmaW5lIExVVDEoaW5zLCBwYWQsIG9wcikJKExVVDAoaW5zLCBwYWQsIG9wcikgPDwgT1BSTkQx X1NISUZUKQ0KPj4gLQ0KPj4gLS8qIG90aGVyIG1hY3JvcyBmb3IgTFVUIHJlZ2lzdGVyLiAqLw0K Pj4gLSNkZWZpbmUgUVVBRFNQSV9MVVQoeCkgICAgICAgICAgKFFVQURTUElfTFVUX0JBU0UgKyAo eCkgKiA0KQ0KPj4gLSNkZWZpbmUgUVVBRFNQSV9MVVRfTlVNCQk2NA0KPj4gLQ0KPj4gLS8qIFNF UUlEIC0tIHdlIGNhbiBoYXZlIDE2IHNlcWlkcyBhdCBtb3N0LiAqLw0KPj4gLSNkZWZpbmUgU0VR SURfUkVBRAkJMA0KPj4gLSNkZWZpbmUgU0VRSURfV1JFTgkJMQ0KPj4gLSNkZWZpbmUgU0VRSURf V1JESQkJMg0KPj4gLSNkZWZpbmUgU0VRSURfUkRTUgkJMw0KPj4gLSNkZWZpbmUgU0VRSURfU0UJ CTQNCj4+IC0jZGVmaW5lIFNFUUlEX0NISVBfRVJBU0UJNQ0KPj4gLSNkZWZpbmUgU0VRSURfUFAJ CTYNCj4+IC0jZGVmaW5lIFNFUUlEX1JESUQJCTcNCj4+IC0jZGVmaW5lIFNFUUlEX1dSU1IJCTgN Cj4+IC0jZGVmaW5lIFNFUUlEX1JEQ1IJCTkNCj4+IC0jZGVmaW5lIFNFUUlEX0VONEIJCTEwDQo+ PiAtI2RlZmluZSBTRVFJRF9CUldSCQkxMQ0KPj4gLQ0KPj4gLSNkZWZpbmUgUVVBRFNQSV9NSU5f SU9NQVAgU1pfNE0NCj4+IC0NCj4+IC1lbnVtIGZzbF9xc3BpX2RldnR5cGUgew0KPj4gLQlGU0xf UVVBRFNQSV9WWUJSSUQsDQo+PiAtCUZTTF9RVUFEU1BJX0lNWDZTWCwNCj4+IC0JRlNMX1FVQURT UElfSU1YN0QsDQo+PiAtCUZTTF9RVUFEU1BJX0lNWDZVTCwNCj4+IC0JRlNMX1FVQURTUElfTFMx MDIxQSwNCj4+IC0JRlNMX1FVQURTUElfTFMyMDgwQSwNCj4+IC19Ow0KPj4gLQ0KPj4gLXN0cnVj dCBmc2xfcXNwaV9kZXZ0eXBlX2RhdGEgew0KPj4gLQllbnVtIGZzbF9xc3BpX2RldnR5cGUgZGV2 dHlwZTsNCj4+IC0JaW50IHJ4ZmlmbzsNCj4+IC0JaW50IHR4ZmlmbzsNCj4+IC0JaW50IGFoYl9i dWZfc2l6ZTsNCj4+IC0JaW50IGRyaXZlcl9kYXRhOw0KPj4gLX07DQo+PiAtDQo+PiAtc3RhdGlj IGNvbnN0IHN0cnVjdCBmc2xfcXNwaV9kZXZ0eXBlX2RhdGEgdnlicmlkX2RhdGEgPSB7DQo+PiAt CS5kZXZ0eXBlID0gRlNMX1FVQURTUElfVllCUklELA0KPj4gLQkucnhmaWZvID0gMTI4LA0KPj4g LQkudHhmaWZvID0gNjQsDQo+PiAtCS5haGJfYnVmX3NpemUgPSAxMDI0LA0KPj4gLQkuZHJpdmVy X2RhdGEgPSBRVUFEU1BJX1FVSVJLX1NXQVBfRU5ESUFOLA0KPj4gLX07DQo+PiAtDQo+PiAtc3Rh dGljIGNvbnN0IHN0cnVjdCBmc2xfcXNwaV9kZXZ0eXBlX2RhdGEgaW14NnN4X2RhdGEgPSB7DQo+ PiAtCS5kZXZ0eXBlID0gRlNMX1FVQURTUElfSU1YNlNYLA0KPj4gLQkucnhmaWZvID0gMTI4LA0K Pj4gLQkudHhmaWZvID0gNTEyLA0KPj4gLQkuYWhiX2J1Zl9zaXplID0gMTAyNCwNCj4+IC0JLmRy aXZlcl9kYXRhID0gUVVBRFNQSV9RVUlSS180WF9JTlRfQ0xLDQo+PiAtCQkgICAgICAgfCBRVUFE U1BJX1FVSVJLX1RLVDI0NTYxOCwNCj4+IC19Ow0KPj4gLQ0KPj4gLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgZnNsX3FzcGlfZGV2dHlwZV9kYXRhIGlteDdkX2RhdGEgPSB7DQo+PiAtCS5kZXZ0eXBlID0g RlNMX1FVQURTUElfSU1YN0QsDQo+PiAtCS5yeGZpZm8gPSA1MTIsDQo+PiAtCS50eGZpZm8gPSA1 MTIsDQo+PiAtCS5haGJfYnVmX3NpemUgPSAxMDI0LA0KPj4gLQkuZHJpdmVyX2RhdGEgPSBRVUFE U1BJX1FVSVJLX1RLVDI1Mzg5MA0KPj4gLQkJICAgICAgIHwgUVVBRFNQSV9RVUlSS180WF9JTlRf Q0xLLA0KPj4gLX07DQo+PiAtDQo+PiAtc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfcXNwaV9kZXZ0 eXBlX2RhdGEgaW14NnVsX2RhdGEgPSB7DQo+PiAtCS5kZXZ0eXBlID0gRlNMX1FVQURTUElfSU1Y NlVMLA0KPj4gLQkucnhmaWZvID0gMTI4LA0KPj4gLQkudHhmaWZvID0gNTEyLA0KPj4gLQkuYWhi X2J1Zl9zaXplID0gMTAyNCwNCj4+IC0JLmRyaXZlcl9kYXRhID0gUVVBRFNQSV9RVUlSS19US1Qy NTM4OTANCj4+IC0JCSAgICAgICB8IFFVQURTUElfUVVJUktfNFhfSU5UX0NMSywNCj4+IC19Ow0K Pj4gLQ0KPj4gLXN0YXRpYyBzdHJ1Y3QgZnNsX3FzcGlfZGV2dHlwZV9kYXRhIGxzMTAyMWFfZGF0 YSA9IHsNCj4+IC0JLmRldnR5cGUgPSBGU0xfUVVBRFNQSV9MUzEwMjFBLA0KPj4gLQkucnhmaWZv ID0gMTI4LA0KPj4gLQkudHhmaWZvID0gNjQsDQo+PiAtCS5haGJfYnVmX3NpemUgPSAxMDI0LA0K Pj4gLQkuZHJpdmVyX2RhdGEgPSAwLA0KPj4gLX07DQo+PiAtDQo+PiAtc3RhdGljIGNvbnN0IHN0 cnVjdCBmc2xfcXNwaV9kZXZ0eXBlX2RhdGEgbHMyMDgwYV9kYXRhID0gew0KPj4gLQkuZGV2dHlw ZSA9IEZTTF9RVUFEU1BJX0xTMjA4MEEsDQo+PiAtCS5yeGZpZm8gPSAxMjgsDQo+PiAtCS50eGZp Zm8gPSA2NCwNCj4+IC0JLmFoYl9idWZfc2l6ZSA9IDEwMjQsDQo+PiAtCS5kcml2ZXJfZGF0YSA9 IFFVQURTUElfUVVJUktfVEtUMjUzODkwLA0KPj4gLX07DQo+PiAtDQo+PiAtDQo+PiAtI2RlZmlu ZSBGU0xfUVNQSV9NQVhfQ0hJUAk0DQo+PiAtc3RydWN0IGZzbF9xc3BpIHsNCj4+IC0Jc3RydWN0 IHNwaV9ub3Igbm9yW0ZTTF9RU1BJX01BWF9DSElQXTsNCj4+IC0Jdm9pZCBfX2lvbWVtICppb2Jh c2U7DQo+PiAtCXZvaWQgX19pb21lbSAqYWhiX2FkZHI7DQo+PiAtCXUzMiBtZW1tYXBfcGh5Ow0K Pj4gLQl1MzIgbWVtbWFwX29mZnM7DQo+PiAtCXUzMiBtZW1tYXBfbGVuOw0KPj4gLQlzdHJ1Y3Qg Y2xrICpjbGssICpjbGtfZW47DQo+PiAtCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4+IC0Jc3RydWN0 IGNvbXBsZXRpb24gYzsNCj4+IC0JY29uc3Qgc3RydWN0IGZzbF9xc3BpX2RldnR5cGVfZGF0YSAq ZGV2dHlwZV9kYXRhOw0KPj4gLQl1MzIgbm9yX3NpemU7DQo+PiAtCXUzMiBub3JfbnVtOw0KPj4g LQl1MzIgY2xrX3JhdGU7DQo+PiAtCXVuc2lnbmVkIGludCBjaGlwX2Jhc2VfYWRkcjsgLyogV2Ug bWF5IHN1cHBvcnQgdHdvIGNoaXBzLiAqLw0KPj4gLQlib29sIGhhc19zZWNvbmRfY2hpcDsNCj4+ IC0JYm9vbCBiaWdfZW5kaWFuOw0KPj4gLQlzdHJ1Y3QgbXV0ZXggbG9jazsNCj4+IC0Jc3RydWN0 IHBtX3Fvc19yZXF1ZXN0IHBtX3Fvc19yZXE7DQo+PiAtfTsNCj4+IC0NCj4+IC1zdGF0aWMgaW5s aW5lIGludCBuZWVkc19zd2FwX2VuZGlhbihzdHJ1Y3QgZnNsX3FzcGkgKnEpIC17DQo+PiAtCXJl dHVybiBxLT5kZXZ0eXBlX2RhdGEtPmRyaXZlcl9kYXRhICYNCj4+IFFVQURTUElfUVVJUktfU1dB UF9FTkRJQU47DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyBpbmxpbmUgaW50IG5lZWRzXzR4X2Ns b2NrKHN0cnVjdCBmc2xfcXNwaSAqcSkgLXsNCj4+IC0JcmV0dXJuIHEtPmRldnR5cGVfZGF0YS0+ ZHJpdmVyX2RhdGEgJg0KPj4gUVVBRFNQSV9RVUlSS180WF9JTlRfQ0xLOw0KPj4gLX0NCj4+IC0N Cj4+IC1zdGF0aWMgaW5saW5lIGludCBuZWVkc19maWxsX3R4ZmlmbyhzdHJ1Y3QgZnNsX3FzcGkg KnEpIC17DQo+PiAtCXJldHVybiBxLT5kZXZ0eXBlX2RhdGEtPmRyaXZlcl9kYXRhICYgUVVBRFNQ SV9RVUlSS19US1QyNTM4OTA7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyBpbmxpbmUgaW50IG5l ZWRzX3dha2V1cF93YWl0X21vZGUoc3RydWN0IGZzbF9xc3BpICpxKSAtew0KPj4gLQlyZXR1cm4g cS0+ZGV2dHlwZV9kYXRhLT5kcml2ZXJfZGF0YSAmIFFVQURTUElfUVVJUktfVEtUMjQ1NjE4Ow0K Pj4gLX0NCj4+IC0NCj4+IC0vKg0KPj4gLSAqIFIvVyBmdW5jdGlvbnMgZm9yIGJpZy0gb3IgbGl0 dGxlLWVuZGlhbiByZWdpc3RlcnM6DQo+PiAtICogVGhlIHFTUEkgY29udHJvbGxlcidzIGVuZGlh biBpcyBpbmRlcGVuZGVudCBvZiB0aGUgQ1BVIGNvcmUncyBlbmRpYW4uDQo+PiAtICogU28gZmFy LCBhbHRob3VnaCB0aGUgQ1BVIGNvcmUgaXMgbGl0dGxlLWVuZGlhbiBidXQgdGhlIHFTUEkgaGF2 ZSB0d28NCj4+IC0gKiB2ZXJzaW9ucyBmb3IgYmlnLWVuZGlhbiBhbmQgbGl0dGxlLWVuZGlhbi4N Cj4+IC0gKi8NCj4+IC1zdGF0aWMgdm9pZCBxc3BpX3dyaXRlbChzdHJ1Y3QgZnNsX3FzcGkgKnEs IHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikgLXsNCj4+IC0JaWYgKHEtPmJpZ19lbmRpYW4p DQo+PiAtCQlpb3dyaXRlMzJiZSh2YWwsIGFkZHIpOw0KPj4gLQllbHNlDQo+PiAtCQlpb3dyaXRl MzIodmFsLCBhZGRyKTsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIHUzMiBxc3BpX3JlYWRsKHN0 cnVjdCBmc2xfcXNwaSAqcSwgdm9pZCBfX2lvbWVtICphZGRyKSAtew0KPj4gLQlpZiAocS0+Ymln X2VuZGlhbikNCj4+IC0JCXJldHVybiBpb3JlYWQzMmJlKGFkZHIpOw0KPj4gLQllbHNlDQo+PiAt CQlyZXR1cm4gaW9yZWFkMzIoYWRkcik7DQo+PiAtfQ0KPj4gLQ0KPj4gLS8qDQo+PiAtICogQW4g SUMgYnVnIG1ha2VzIHVzIHRvIHJlLWFycmFuZ2UgdGhlIDMyLWJpdCBkYXRhLg0KPj4gLSAqIFRo ZSBmb2xsb3dpbmcgY2hpcHMsIHN1Y2ggYXMgSU1YNlNMWCwgaGF2ZSBmaXhlZCB0aGlzIGJ1Zy4N Cj4+IC0gKi8NCj4+IC1zdGF0aWMgaW5saW5lIHUzMiBmc2xfcXNwaV9lbmRpYW5feGNoZyhzdHJ1 Y3QgZnNsX3FzcGkgKnEsIHUzMiBhKSAtew0KPj4gLQlyZXR1cm4gbmVlZHNfc3dhcF9lbmRpYW4o cSkgPyBfX3N3YWIzMihhKSA6IGE7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyBpbmxpbmUgdm9p ZCBmc2xfcXNwaV91bmxvY2tfbHV0KHN0cnVjdCBmc2xfcXNwaSAqcSkgLXsNCj4+IC0JcXNwaV93 cml0ZWwocSwgUVVBRFNQSV9MVVRLRVlfVkFMVUUsIHEtPmlvYmFzZSArDQo+PiBRVUFEU1BJX0xV VEtFWSk7DQo+PiAtCXFzcGlfd3JpdGVsKHEsIFFVQURTUElfTENLRVJfVU5MT0NLLCBxLT5pb2Jh c2UgKw0KPj4gUVVBRFNQSV9MQ0tDUik7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyBpbmxpbmUg dm9pZCBmc2xfcXNwaV9sb2NrX2x1dChzdHJ1Y3QgZnNsX3FzcGkgKnEpIC17DQo+PiAtCXFzcGlf d3JpdGVsKHEsIFFVQURTUElfTFVUS0VZX1ZBTFVFLCBxLT5pb2Jhc2UgKw0KPj4gUVVBRFNQSV9M VVRLRVkpOw0KPj4gLQlxc3BpX3dyaXRlbChxLCBRVUFEU1BJX0xDS0VSX0xPQ0ssIHEtPmlvYmFz ZSArIFFVQURTUElfTENLQ1IpOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgaXJxcmV0dXJuX3Qg ZnNsX3FzcGlfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKSAtew0KPj4gLQlzdHJ1 Y3QgZnNsX3FzcGkgKnEgPSBkZXZfaWQ7DQo+PiAtCXUzMiByZWc7DQo+PiAtDQo+PiAtCS8qIGNs ZWFyIGludGVycnVwdCAqLw0KPj4gLQlyZWcgPSBxc3BpX3JlYWRsKHEsIHEtPmlvYmFzZSArIFFV QURTUElfRlIpOw0KPj4gLQlxc3BpX3dyaXRlbChxLCByZWcsIHEtPmlvYmFzZSArIFFVQURTUElf RlIpOw0KPj4gLQ0KPj4gLQlpZiAocmVnICYgUVVBRFNQSV9GUl9URkZfTUFTSykNCj4+IC0JCWNv bXBsZXRlKCZxLT5jKTsNCj4+IC0NCj4+IC0JZGV2X2RiZyhxLT5kZXYsICJRVUFEU1BJX0ZSIDog MHglLjh4OjB4JS44eFxuIiwgcS0NCj4+PiBjaGlwX2Jhc2VfYWRkciwgcmVnKTsNCj4+IC0JcmV0 dXJuIElSUV9IQU5ETEVEOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgdm9pZCBmc2xfcXNwaV9p bml0X2x1dChzdHJ1Y3QgZnNsX3FzcGkgKnEpIC17DQo+PiAtCXZvaWQgX19pb21lbSAqYmFzZSA9 IHEtPmlvYmFzZTsNCj4+IC0JaW50IHJ4ZmlmbyA9IHEtPmRldnR5cGVfZGF0YS0+cnhmaWZvOw0K Pj4gLQl1MzIgbHV0X2Jhc2U7DQo+PiAtCWludCBpOw0KPj4gLQ0KPj4gLQlzdHJ1Y3Qgc3BpX25v ciAqbm9yID0gJnEtPm5vclswXTsNCj4+IC0JdTggYWRkcmxlbiA9IChub3ItPmFkZHJfd2lkdGgg PT0gMykgPyBBRERSMjRCSVQgOiBBRERSMzJCSVQ7DQo+PiAtCXU4IHJlYWRfb3AgPSBub3ItPnJl YWRfb3Bjb2RlOw0KPj4gLQl1OCByZWFkX2RtID0gbm9yLT5yZWFkX2R1bW15Ow0KPj4gLQ0KPj4g LQlmc2xfcXNwaV91bmxvY2tfbHV0KHEpOw0KPj4gLQ0KPj4gLQkvKiBDbGVhciBhbGwgdGhlIExV VCB0YWJsZSAqLw0KPj4gLQlmb3IgKGkgPSAwOyBpIDwgUVVBRFNQSV9MVVRfTlVNOyBpKyspDQo+ PiAtCQlxc3BpX3dyaXRlbChxLCAwLCBiYXNlICsgUVVBRFNQSV9MVVRfQkFTRSArIGkgKiA0KTsN Cj4+IC0NCj4+IC0JLyogUmVhZCAqLw0KPj4gLQlsdXRfYmFzZSA9IFNFUUlEX1JFQUQgKiA0Ow0K Pj4gLQ0KPj4gLQlxc3BpX3dyaXRlbChxLCBMVVQwKENNRCwgUEFEMSwgcmVhZF9vcCkgfCBMVVQx KEFERFIsIFBBRDEsDQo+PiBhZGRybGVuKSwNCj4+IC0JCQliYXNlICsgUVVBRFNQSV9MVVQobHV0 X2Jhc2UpKTsNCj4+IC0JcXNwaV93cml0ZWwocSwgTFVUMChEVU1NWSwgUEFEMSwgcmVhZF9kbSkg fA0KPj4gLQkJICAgIExVVDEoRlNMX1JFQUQsIFBBRDQsIHJ4ZmlmbyksDQo+PiAtCQkJYmFzZSAr IFFVQURTUElfTFVUKGx1dF9iYXNlICsgMSkpOw0KPj4gLQ0KPj4gLQkvKiBXcml0ZSBlbmFibGUg Ki8NCj4+IC0JbHV0X2Jhc2UgPSBTRVFJRF9XUkVOICogNDsNCj4+IC0JcXNwaV93cml0ZWwocSwg TFVUMChDTUQsIFBBRDEsIFNQSU5PUl9PUF9XUkVOKSwNCj4+IC0JCQliYXNlICsgUVVBRFNQSV9M VVQobHV0X2Jhc2UpKTsNCj4+IC0NCj4+IC0JLyogUGFnZSBQcm9ncmFtICovDQo+PiAtCWx1dF9i YXNlID0gU0VRSURfUFAgKiA0Ow0KPj4gLQ0KPj4gLQlxc3BpX3dyaXRlbChxLCBMVVQwKENNRCwg UEFEMSwgbm9yLT5wcm9ncmFtX29wY29kZSkgfA0KPj4gLQkJICAgIExVVDEoQUREUiwgUEFEMSwg YWRkcmxlbiksDQo+PiAtCQkJYmFzZSArIFFVQURTUElfTFVUKGx1dF9iYXNlKSk7DQo+PiAtCXFz cGlfd3JpdGVsKHEsIExVVDAoRlNMX1dSSVRFLCBQQUQxLCAwKSwNCj4+IC0JCQliYXNlICsgUVVB RFNQSV9MVVQobHV0X2Jhc2UgKyAxKSk7DQo+PiAtDQo+PiAtCS8qIFJlYWQgU3RhdHVzICovDQo+ PiAtCWx1dF9iYXNlID0gU0VRSURfUkRTUiAqIDQ7DQo+PiAtCXFzcGlfd3JpdGVsKHEsIExVVDAo Q01ELCBQQUQxLCBTUElOT1JfT1BfUkRTUikgfA0KPj4gLQkJCUxVVDEoRlNMX1JFQUQsIFBBRDEs IDB4MSksDQo+PiAtCQkJYmFzZSArIFFVQURTUElfTFVUKGx1dF9iYXNlKSk7DQo+PiAtDQo+PiAt CS8qIEVyYXNlIGEgc2VjdG9yICovDQo+PiAtCWx1dF9iYXNlID0gU0VRSURfU0UgKiA0Ow0KPj4g LQ0KPj4gLQlxc3BpX3dyaXRlbChxLCBMVVQwKENNRCwgUEFEMSwgbm9yLT5lcmFzZV9vcGNvZGUp IHwNCj4+IC0JCSAgICBMVVQxKEFERFIsIFBBRDEsIGFkZHJsZW4pLA0KPj4gLQkJCWJhc2UgKyBR VUFEU1BJX0xVVChsdXRfYmFzZSkpOw0KPj4gLQ0KPj4gLQkvKiBFcmFzZSB0aGUgd2hvbGUgY2hp cCAqLw0KPj4gLQlsdXRfYmFzZSA9IFNFUUlEX0NISVBfRVJBU0UgKiA0Ow0KPj4gLQlxc3BpX3dy aXRlbChxLCBMVVQwKENNRCwgUEFEMSwgU1BJTk9SX09QX0NISVBfRVJBU0UpLA0KPj4gLQkJCWJh c2UgKyBRVUFEU1BJX0xVVChsdXRfYmFzZSkpOw0KPj4gLQ0KPj4gLQkvKiBSRUFEIElEICovDQo+ PiAtCWx1dF9iYXNlID0gU0VRSURfUkRJRCAqIDQ7DQo+PiAtCXFzcGlfd3JpdGVsKHEsIExVVDAo Q01ELCBQQUQxLCBTUElOT1JfT1BfUkRJRCkgfA0KPj4gLQkJCUxVVDEoRlNMX1JFQUQsIFBBRDEs IDB4OCksDQo+PiAtCQkJYmFzZSArIFFVQURTUElfTFVUKGx1dF9iYXNlKSk7DQo+PiAtDQo+PiAt CS8qIFdyaXRlIFJlZ2lzdGVyICovDQo+PiAtCWx1dF9iYXNlID0gU0VRSURfV1JTUiAqIDQ7DQo+ PiAtCXFzcGlfd3JpdGVsKHEsIExVVDAoQ01ELCBQQUQxLCBTUElOT1JfT1BfV1JTUikgfA0KPj4g LQkJCUxVVDEoRlNMX1dSSVRFLCBQQUQxLCAweDIpLA0KPj4gLQkJCWJhc2UgKyBRVUFEU1BJX0xV VChsdXRfYmFzZSkpOw0KPj4gLQ0KPj4gLQkvKiBSZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIg Ki8NCj4+IC0JbHV0X2Jhc2UgPSBTRVFJRF9SRENSICogNDsNCj4+IC0JcXNwaV93cml0ZWwocSwg TFVUMChDTUQsIFBBRDEsIFNQSU5PUl9PUF9SRENSKSB8DQo+PiAtCQkJTFVUMShGU0xfUkVBRCwg UEFEMSwgMHgxKSwNCj4+IC0JCQliYXNlICsgUVVBRFNQSV9MVVQobHV0X2Jhc2UpKTsNCj4+IC0N Cj4+IC0JLyogV3JpdGUgZGlzYWJsZSAqLw0KPj4gLQlsdXRfYmFzZSA9IFNFUUlEX1dSREkgKiA0 Ow0KPj4gLQlxc3BpX3dyaXRlbChxLCBMVVQwKENNRCwgUEFEMSwgU1BJTk9SX09QX1dSREkpLA0K Pj4gLQkJCWJhc2UgKyBRVUFEU1BJX0xVVChsdXRfYmFzZSkpOw0KPj4gLQ0KPj4gLQkvKiBFbnRl ciA0IEJ5dGUgTW9kZSAoTWljcm9uKSAqLw0KPj4gLQlsdXRfYmFzZSA9IFNFUUlEX0VONEIgKiA0 Ow0KPj4gLQlxc3BpX3dyaXRlbChxLCBMVVQwKENNRCwgUEFEMSwgU1BJTk9SX09QX0VONEIpLA0K Pj4gLQkJCWJhc2UgKyBRVUFEU1BJX0xVVChsdXRfYmFzZSkpOw0KPj4gLQ0KPj4gLQkvKiBFbnRl ciA0IEJ5dGUgTW9kZSAoU3BhbnNpb24pICovDQo+PiAtCWx1dF9iYXNlID0gU0VRSURfQlJXUiAq IDQ7DQo+PiAtCXFzcGlfd3JpdGVsKHEsIExVVDAoQ01ELCBQQUQxLCBTUElOT1JfT1BfQlJXUiks DQo+PiAtCQkJYmFzZSArIFFVQURTUElfTFVUKGx1dF9iYXNlKSk7DQo+PiAtDQo+PiAtCWZzbF9x c3BpX2xvY2tfbHV0KHEpOw0KPj4gLX0NCj4+IC0NCj4+IC0vKiBHZXQgdGhlIFNFUUlEIGZvciB0 aGUgY29tbWFuZCAqLw0KPj4gLXN0YXRpYyBpbnQgZnNsX3FzcGlfZ2V0X3NlcWlkKHN0cnVjdCBm c2xfcXNwaSAqcSwgdTggY21kKSAtew0KPj4gLQlzd2l0Y2ggKGNtZCkgew0KPj4gLQljYXNlIFNQ SU5PUl9PUF9SRUFEXzFfMV80Og0KPj4gLQljYXNlIFNQSU5PUl9PUF9SRUFEXzFfMV80XzRCOg0K Pj4gLQkJcmV0dXJuIFNFUUlEX1JFQUQ7DQo+PiAtCWNhc2UgU1BJTk9SX09QX1dSRU46DQo+PiAt CQlyZXR1cm4gU0VRSURfV1JFTjsNCj4+IC0JY2FzZSBTUElOT1JfT1BfV1JESToNCj4+IC0JCXJl dHVybiBTRVFJRF9XUkRJOw0KPj4gLQljYXNlIFNQSU5PUl9PUF9SRFNSOg0KPj4gLQkJcmV0dXJu IFNFUUlEX1JEU1I7DQo+PiAtCWNhc2UgU1BJTk9SX09QX1NFOg0KPj4gLQkJcmV0dXJuIFNFUUlE X1NFOw0KPj4gLQljYXNlIFNQSU5PUl9PUF9DSElQX0VSQVNFOg0KPj4gLQkJcmV0dXJuIFNFUUlE X0NISVBfRVJBU0U7DQo+PiAtCWNhc2UgU1BJTk9SX09QX1BQOg0KPj4gLQkJcmV0dXJuIFNFUUlE X1BQOw0KPj4gLQljYXNlIFNQSU5PUl9PUF9SRElEOg0KPj4gLQkJcmV0dXJuIFNFUUlEX1JESUQ7 DQo+PiAtCWNhc2UgU1BJTk9SX09QX1dSU1I6DQo+PiAtCQlyZXR1cm4gU0VRSURfV1JTUjsNCj4+ IC0JY2FzZSBTUElOT1JfT1BfUkRDUjoNCj4+IC0JCXJldHVybiBTRVFJRF9SRENSOw0KPj4gLQlj YXNlIFNQSU5PUl9PUF9FTjRCOg0KPj4gLQkJcmV0dXJuIFNFUUlEX0VONEI7DQo+PiAtCWNhc2Ug U1BJTk9SX09QX0JSV1I6DQo+PiAtCQlyZXR1cm4gU0VRSURfQlJXUjsNCj4+IC0JZGVmYXVsdDoN Cj4+IC0JCWlmIChjbWQgPT0gcS0+bm9yWzBdLmVyYXNlX29wY29kZSkNCj4+IC0JCQlyZXR1cm4g U0VRSURfU0U7DQo+PiAtCQlkZXZfZXJyKHEtPmRldiwgIlVuc3VwcG9ydGVkIGNtZCAweCUuMnhc biIsIGNtZCk7DQo+PiAtCQlicmVhazsNCj4+IC0JfQ0KPj4gLQlyZXR1cm4gLUVJTlZBTDsNCj4+ IC19DQo+PiAtDQo+PiAtc3RhdGljIGludA0KPj4gLWZzbF9xc3BpX3J1bmNtZChzdHJ1Y3QgZnNs X3FzcGkgKnEsIHU4IGNtZCwgdW5zaWduZWQgaW50IGFkZHIsIGludCBsZW4pIC17DQo+PiAtCXZv aWQgX19pb21lbSAqYmFzZSA9IHEtPmlvYmFzZTsNCj4+IC0JaW50IHNlcWlkOw0KPj4gLQl1MzIg cmVnLCByZWcyOw0KPj4gLQlpbnQgZXJyOw0KPj4gLQ0KPj4gLQlpbml0X2NvbXBsZXRpb24oJnEt PmMpOw0KPj4gLQlkZXZfZGJnKHEtPmRldiwgInRvIDB4JS44eDoweCUuOHgsIGxlbjolZCwgY21k OiUuMnhcbiIsDQo+PiAtCQkJcS0+Y2hpcF9iYXNlX2FkZHIsIGFkZHIsIGxlbiwgY21kKTsNCj4+ IC0NCj4+IC0JLyogc2F2ZSB0aGUgcmVnICovDQo+PiAtCXJlZyA9IHFzcGlfcmVhZGwocSwgYmFz ZSArIFFVQURTUElfTUNSKTsNCj4+IC0NCj4+IC0JcXNwaV93cml0ZWwocSwgcS0+bWVtbWFwX3Bo eSArIHEtPmNoaXBfYmFzZV9hZGRyICsgYWRkciwNCj4+IC0JCQliYXNlICsgUVVBRFNQSV9TRkFS KTsNCj4+IC0JcXNwaV93cml0ZWwocSwgUVVBRFNQSV9SQkNUX1dNUktfTUFTSyB8DQo+PiBRVUFE U1BJX1JCQ1RfUlhCUkRfVVNFSVBTLA0KPj4gLQkJCWJhc2UgKyBRVUFEU1BJX1JCQ1QpOw0KPj4g LQlxc3BpX3dyaXRlbChxLCByZWcgfCBRVUFEU1BJX01DUl9DTFJfUlhGX01BU0ssIGJhc2UgKw0K Pj4gUVVBRFNQSV9NQ1IpOw0KPj4gLQ0KPj4gLQlkbyB7DQo+PiAtCQlyZWcyID0gcXNwaV9yZWFk bChxLCBiYXNlICsgUVVBRFNQSV9TUik7DQo+PiAtCQlpZiAocmVnMiAmIChRVUFEU1BJX1NSX0lQ X0FDQ19NQVNLIHwNCj4+IFFVQURTUElfU1JfQUhCX0FDQ19NQVNLKSkgew0KPj4gLQkJCXVkZWxh eSgxKTsNCj4+IC0JCQlkZXZfZGJnKHEtPmRldiwgIlRoZSBjb250cm9sbGVyIGlzIGJ1c3ksIDB4 JXhcbiIsDQo+PiByZWcyKTsNCj4+IC0JCQljb250aW51ZTsNCj4+IC0JCX0NCj4+IC0JCWJyZWFr Ow0KPj4gLQl9IHdoaWxlICgxKTsNCj4+IC0NCj4+IC0JLyogdHJpZ2dlciB0aGUgTFVUIG5vdyAq Lw0KPj4gLQlzZXFpZCA9IGZzbF9xc3BpX2dldF9zZXFpZChxLCBjbWQpOw0KPj4gLQlpZiAoc2Vx aWQgPCAwKQ0KPj4gLQkJcmV0dXJuIHNlcWlkOw0KPj4gLQ0KPj4gLQlxc3BpX3dyaXRlbChxLCAo c2VxaWQgPDwgUVVBRFNQSV9JUENSX1NFUUlEX1NISUZUKSB8IGxlbiwNCj4+IC0JCQliYXNlICsg UVVBRFNQSV9JUENSKTsNCj4+IC0NCj4+IC0JLyogV2FpdCBmb3IgdGhlIGludGVycnVwdC4gKi8N Cj4+IC0JaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnEtPmMsIG1zZWNzX3RvX2pp ZmZpZXMoMTAwMCkpKSB7DQo+PiAtCQlkZXZfZXJyKHEtPmRldiwNCj4+IC0JCQkiY21kIDB4JS4y eCB0aW1lb3V0LCBhZGRyQCUuOHgsIEZSOjB4JS44eCwNCj4+IFNSOjB4JS44eFxuIiwNCj4+IC0J CQljbWQsIGFkZHIsIHFzcGlfcmVhZGwocSwgYmFzZSArIFFVQURTUElfRlIpLA0KPj4gLQkJCXFz cGlfcmVhZGwocSwgYmFzZSArIFFVQURTUElfU1IpKTsNCj4+IC0JCWVyciA9IC1FVElNRURPVVQ7 DQo+PiAtCX0gZWxzZSB7DQo+PiAtCQllcnIgPSAwOw0KPj4gLQl9DQo+PiAtDQo+PiAtCS8qIHJl c3RvcmUgdGhlIE1DUiAqLw0KPj4gLQlxc3BpX3dyaXRlbChxLCByZWcsIGJhc2UgKyBRVUFEU1BJ X01DUik7DQo+PiAtDQo+PiAtCXJldHVybiBlcnI7DQo+PiAtfQ0KPj4gLQ0KPj4gLS8qIFJlYWQg b3V0IHRoZSBkYXRhIGZyb20gdGhlIFFVQURTUElfUkJEUiBidWZmZXIgcmVnaXN0ZXJzLiAqLyAt c3RhdGljDQo+PiB2b2lkIGZzbF9xc3BpX3JlYWRfZGF0YShzdHJ1Y3QgZnNsX3FzcGkgKnEsIGlu dCBsZW4sIHU4ICpyeGJ1ZikgLXsNCj4+IC0JdTMyIHRtcDsNCj4+IC0JaW50IGkgPSAwOw0KPj4g LQ0KPj4gLQl3aGlsZSAobGVuID4gMCkgew0KPj4gLQkJdG1wID0gcXNwaV9yZWFkbChxLCBxLT5p b2Jhc2UgKyBRVUFEU1BJX1JCRFIgKyBpICogNCk7DQo+PiAtCQl0bXAgPSBmc2xfcXNwaV9lbmRp YW5feGNoZyhxLCB0bXApOw0KPj4gLQkJZGV2X2RiZyhxLT5kZXYsICJjaGlwIGFkZHI6MHglLjh4 LCByY3Y6MHglLjh4XG4iLA0KPj4gLQkJCQlxLT5jaGlwX2Jhc2VfYWRkciwgdG1wKTsNCj4+IC0N Cj4+IC0JCWlmIChsZW4gPj0gNCkgew0KPj4gLQkJCSooKHUzMiAqKXJ4YnVmKSA9IHRtcDsNCj4+ IC0JCQlyeGJ1ZiArPSA0Ow0KPj4gLQkJfSBlbHNlIHsNCj4+IC0JCQltZW1jcHkocnhidWYsICZ0 bXAsIGxlbik7DQo+PiAtCQkJYnJlYWs7DQo+PiAtCQl9DQo+PiAtDQo+PiAtCQlsZW4gLT0gNDsN Cj4+IC0JCWkrKzsNCj4+IC0JfQ0KPj4gLX0NCj4+IC0NCj4+IC0vKg0KPj4gLSAqIElmIHdlIGhh dmUgY2hhbmdlZCB0aGUgY29udGVudCBvZiB0aGUgZmxhc2ggYnkgd3JpdGluZyBvciBlcmFzaW5n LA0KPj4gLSAqIHdlIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgQUhCIGJ1ZmZlci4gSWYgd2UgZG8g bm90IGRvIHNvLCB3ZSBtYXkgcmVhZA0KPj4gb3V0DQo+PiAtICogdGhlIHdyb25nIGRhdGEuIFRo ZSBzcGVjIHRlbGxzIHVzIHJlc2V0IHRoZSBBSEIgZG9tYWluIGFuZCBTZXJpYWwgRmxhc2gNCj4+ IC0gKiBkb21haW4gYXQgdGhlIHNhbWUgdGltZS4NCj4+IC0gKi8NCj4+IC1zdGF0aWMgaW5saW5l IHZvaWQgZnNsX3FzcGlfaW52YWxpZChzdHJ1Y3QgZnNsX3FzcGkgKnEpIC17DQo+PiAtCXUzMiBy ZWc7DQo+PiAtDQo+PiAtCXJlZyA9IHFzcGlfcmVhZGwocSwgcS0+aW9iYXNlICsgUVVBRFNQSV9N Q1IpOw0KPj4gLQlyZWcgfD0gUVVBRFNQSV9NQ1JfU1dSU1RIRF9NQVNLIHwNCj4+IFFVQURTUElf TUNSX1NXUlNUU0RfTUFTSzsNCj4+IC0JcXNwaV93cml0ZWwocSwgcmVnLCBxLT5pb2Jhc2UgKyBR VUFEU1BJX01DUik7DQo+PiAtDQo+PiAtCS8qDQo+PiAtCSAqIFRoZSBtaW5pbXVtIGRlbGF5IDog MSBBSEIgKyAyIFNGQ0sgY2xvY2tzLg0KPj4gLQkgKiBEZWxheSAxIHVzIGlzIGVub3VnaC4NCj4+ IC0JICovDQo+PiAtCXVkZWxheSgxKTsNCj4+IC0NCj4+IC0JcmVnICY9IH4oUVVBRFNQSV9NQ1Jf U1dSU1RIRF9NQVNLIHwNCj4+IFFVQURTUElfTUNSX1NXUlNUU0RfTUFTSyk7DQo+PiAtCXFzcGlf d3JpdGVsKHEsIHJlZywgcS0+aW9iYXNlICsgUVVBRFNQSV9NQ1IpOw0KPj4gLX0NCj4+IC0NCj4+ IC1zdGF0aWMgc3NpemVfdCBmc2xfcXNwaV9ub3Jfd3JpdGUoc3RydWN0IGZzbF9xc3BpICpxLCBz dHJ1Y3Qgc3BpX25vciAqbm9yLA0KPj4gLQkJCQl1OCBvcGNvZGUsIHVuc2lnbmVkIGludCB0bywg dTMyICp0eGJ1ZiwNCj4+IC0JCQkJdW5zaWduZWQgY291bnQpDQo+PiAtew0KPj4gLQlpbnQgcmV0 LCBpLCBqOw0KPj4gLQl1MzIgdG1wOw0KPj4gLQ0KPj4gLQlkZXZfZGJnKHEtPmRldiwgInRvIDB4 JS44eDoweCUuOHgsIGxlbiA6ICVkXG4iLA0KPj4gLQkJcS0+Y2hpcF9iYXNlX2FkZHIsIHRvLCBj b3VudCk7DQo+PiAtDQo+PiAtCS8qIGNsZWFyIHRoZSBUWCBGSUZPLiAqLw0KPj4gLQl0bXAgPSBx c3BpX3JlYWRsKHEsIHEtPmlvYmFzZSArIFFVQURTUElfTUNSKTsNCj4+IC0JcXNwaV93cml0ZWwo cSwgdG1wIHwgUVVBRFNQSV9NQ1JfQ0xSX1RYRl9NQVNLLCBxLT5pb2Jhc2UgKw0KPj4gUVVBRFNQ SV9NQ1IpOw0KPj4gLQ0KPj4gLQkvKiBmaWxsIHRoZSBUWCBkYXRhIHRvIHRoZSBGSUZPICovDQo+ PiAtCWZvciAoaiA9IDAsIGkgPSAoKGNvdW50ICsgMykgLyA0KTsgaiA8IGk7IGorKykgew0KPj4g LQkJdG1wID0gZnNsX3FzcGlfZW5kaWFuX3hjaGcocSwgKnR4YnVmKTsNCj4+IC0JCXFzcGlfd3Jp dGVsKHEsIHRtcCwgcS0+aW9iYXNlICsgUVVBRFNQSV9UQkRSKTsNCj4+IC0JCXR4YnVmKys7DQo+ PiAtCX0NCj4+IC0NCj4+IC0JLyogZmlsbCB0aGUgVFhGSUZPIHVwdG8gMTYgYnl0ZXMgZm9yIGku TVg3ZCAqLw0KPj4gLQlpZiAobmVlZHNfZmlsbF90eGZpZm8ocSkpDQo+PiAtCQlmb3IgKDsgaSA8 IDQ7IGkrKykNCj4+IC0JCQlxc3BpX3dyaXRlbChxLCB0bXAsIHEtPmlvYmFzZSArIFFVQURTUElf VEJEUik7DQo+PiAtDQo+PiAtCS8qIFRyaWdnZXIgaXQgKi8NCj4+IC0JcmV0ID0gZnNsX3FzcGlf cnVuY21kKHEsIG9wY29kZSwgdG8sIGNvdW50KTsNCj4+IC0NCj4+IC0JaWYgKHJldCA9PSAwKQ0K Pj4gLQkJcmV0dXJuIGNvdW50Ow0KPj4gLQ0KPj4gLQlyZXR1cm4gcmV0Ow0KPj4gLX0NCj4+IC0N Cj4+IC1zdGF0aWMgdm9pZCBmc2xfcXNwaV9zZXRfbWFwX2FkZHIoc3RydWN0IGZzbF9xc3BpICpx KSAtew0KPj4gLQlpbnQgbm9yX3NpemUgPSBxLT5ub3Jfc2l6ZTsNCj4+IC0Jdm9pZCBfX2lvbWVt ICpiYXNlID0gcS0+aW9iYXNlOw0KPj4gLQ0KPj4gLQlxc3BpX3dyaXRlbChxLCBub3Jfc2l6ZSAr IHEtPm1lbW1hcF9waHksIGJhc2UgKw0KPj4gUVVBRFNQSV9TRkExQUQpOw0KPj4gLQlxc3BpX3dy aXRlbChxLCBub3Jfc2l6ZSAqIDIgKyBxLT5tZW1tYXBfcGh5LCBiYXNlICsNCj4+IFFVQURTUElf U0ZBMkFEKTsNCj4+IC0JcXNwaV93cml0ZWwocSwgbm9yX3NpemUgKiAzICsgcS0+bWVtbWFwX3Bo eSwgYmFzZSArDQo+PiBRVUFEU1BJX1NGQjFBRCk7DQo+PiAtCXFzcGlfd3JpdGVsKHEsIG5vcl9z aXplICogNCArIHEtPm1lbW1hcF9waHksIGJhc2UgKw0KPj4gUVVBRFNQSV9TRkIyQUQpOw0KPj4g LX0NCj4+IC0NCj4+IC0vKg0KPj4gLSAqIFRoZXJlIGFyZSB0d28gZGlmZmVyZW50IHdheXMgdG8g cmVhZCBvdXQgdGhlIGRhdGEgZnJvbSB0aGUgZmxhc2g6DQo+PiAtICogIHRoZSAiSVAgQ29tbWFu ZCBSZWFkIiBhbmQgdGhlICJBSEIgQ29tbWFuZCBSZWFkIi4NCj4+IC0gKg0KPj4gLSAqIFRoZSBJ QyBndXkgc3VnZ2VzdHMgd2UgdXNlIHRoZSAiQUhCIENvbW1hbmQgUmVhZCIgd2hpY2ggaXMgZmFz dGVyDQo+PiAtICogdGhlbiB0aGUgIklQIENvbW1hbmQgUmVhZCIuIChXaGF0J3MgbW9yZSBpcyB0 aGF0IHRoZXJlIGlzIGEgYnVnIGluDQo+PiAtICogdGhlICJJUCBDb21tYW5kIFJlYWQiIGluIHRo ZSBWeWJyaWQuKQ0KPj4gLSAqDQo+PiAtICogQWZ0ZXIgd2Ugc2V0IHVwIHRoZSByZWdpc3RlcnMg Zm9yIHRoZSAiQUhCIENvbW1hbmQgUmVhZCIsIHdlIGNhbiB1c2UNCj4+IC0gKiB0aGUgbWVtY3B5 IHRvIHJlYWQgdGhlIGRhdGEgZGlyZWN0bHkuIEEgIm1pc3NlZCIgYWNjZXNzIHRvIHRoZSBidWZm ZXINCj4+IC0gKiBjYXVzZXMgdGhlIGNvbnRyb2xsZXIgdG8gY2xlYXIgdGhlIGJ1ZmZlciwgYW5k IHVzZSB0aGUgc2VxdWVuY2UgcG9pbnRlZA0KPj4gLSAqIGJ5IHRoZSBRVUFEU1BJX0JGR0VOQ1Jb U0VRSURdIHRvIGluaXRpYXRlIGEgcmVhZCBmcm9tIHRoZSBmbGFzaC4NCj4+IC0gKi8NCj4+IC1z dGF0aWMgaW50IGZzbF9xc3BpX2luaXRfYWhiX3JlYWQoc3RydWN0IGZzbF9xc3BpICpxKSAtew0K Pj4gLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBxLT5pb2Jhc2U7DQo+PiAtCWludCBzZXFpZDsNCj4+ IC0NCj4+IC0JLyogQUhCIGNvbmZpZ3VyYXRpb24gZm9yIGFjY2VzcyBidWZmZXIgMC8xLzIgLiov DQo+PiAtCXFzcGlfd3JpdGVsKHEsIFFVQURTUElfQlVGWENSX0lOVkFMSURfTVNUUklELCBiYXNl ICsNCj4+IFFVQURTUElfQlVGMENSKTsNCj4+IC0JcXNwaV93cml0ZWwocSwgUVVBRFNQSV9CVUZY Q1JfSU5WQUxJRF9NU1RSSUQsIGJhc2UgKw0KPj4gUVVBRFNQSV9CVUYxQ1IpOw0KPj4gLQlxc3Bp X3dyaXRlbChxLCBRVUFEU1BJX0JVRlhDUl9JTlZBTElEX01TVFJJRCwgYmFzZSArDQo+PiBRVUFE U1BJX0JVRjJDUik7DQo+PiAtCS8qDQo+PiAtCSAqIFNldCBBREFUU1ogd2l0aCB0aGUgbWF4aW11 bSBBSEIgYnVmZmVyIHNpemUgdG8gaW1wcm92ZSB0aGUNCj4+IC0JICogcmVhZCBwZXJmb3JtYW5j ZS4NCj4+IC0JICovDQo+PiAtCXFzcGlfd3JpdGVsKHEsIFFVQURTUElfQlVGM0NSX0FMTE1TVF9N QVNLIHwNCj4+IC0JCQkoKHEtPmRldnR5cGVfZGF0YS0+YWhiX2J1Zl9zaXplIC8gOCkNCj4+IC0J CQk8PCBRVUFEU1BJX0JVRjNDUl9BREFUU1pfU0hJRlQpLA0KPj4gLQkJCWJhc2UgKyBRVUFEU1BJ X0JVRjNDUik7DQo+PiAtDQo+PiAtCS8qIFdlIG9ubHkgdXNlIHRoZSBidWZmZXIzICovDQo+PiAt CXFzcGlfd3JpdGVsKHEsIDAsIGJhc2UgKyBRVUFEU1BJX0JVRjBJTkQpOw0KPj4gLQlxc3BpX3dy aXRlbChxLCAwLCBiYXNlICsgUVVBRFNQSV9CVUYxSU5EKTsNCj4+IC0JcXNwaV93cml0ZWwocSwg MCwgYmFzZSArIFFVQURTUElfQlVGMklORCk7DQo+PiAtDQo+PiAtCS8qIFNldCB0aGUgZGVmYXVs dCBsdXQgc2VxdWVuY2UgZm9yIEFIQiBSZWFkLiAqLw0KPj4gLQlzZXFpZCA9IGZzbF9xc3BpX2dl dF9zZXFpZChxLCBxLT5ub3JbMF0ucmVhZF9vcGNvZGUpOw0KPj4gLQlpZiAoc2VxaWQgPCAwKQ0K Pj4gLQkJcmV0dXJuIHNlcWlkOw0KPj4gLQ0KPj4gLQlxc3BpX3dyaXRlbChxLCBzZXFpZCA8PCBR VUFEU1BJX0JGR0VOQ1JfU0VRSURfU0hJRlQsDQo+PiAtCQlxLT5pb2Jhc2UgKyBRVUFEU1BJX0JG R0VOQ1IpOw0KPj4gLQ0KPj4gLQlyZXR1cm4gMDsNCj4+IC19DQo+PiAtDQo+PiAtLyogVGhpcyBm dW5jdGlvbiB3YXMgdXNlZCB0byBwcmVwYXJlIGFuZCBlbmFibGUgUVNQSSBjbG9jayAqLyAtc3Rh dGljIGludA0KPj4gZnNsX3FzcGlfY2xrX3ByZXBfZW5hYmxlKHN0cnVjdCBmc2xfcXNwaSAqcSkg LXsNCj4+IC0JaW50IHJldDsNCj4+IC0NCj4+IC0JcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHEt PmNsa19lbik7DQo+PiAtCWlmIChyZXQpDQo+PiAtCQlyZXR1cm4gcmV0Ow0KPj4gLQ0KPj4gLQly ZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocS0+Y2xrKTsNCj4+IC0JaWYgKHJldCkgew0KPj4gLQkJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHEtPmNsa19lbik7DQo+PiAtCQlyZXR1cm4gcmV0Ow0KPj4g LQl9DQo+PiAtDQo+PiAtCWlmIChuZWVkc193YWtldXBfd2FpdF9tb2RlKHEpKQ0KPj4gLQkJcG1f cW9zX2FkZF9yZXF1ZXN0KCZxLT5wbV9xb3NfcmVxLA0KPj4gUE1fUU9TX0NQVV9ETUFfTEFURU5D WSwgMCk7DQo+PiAtDQo+PiAtCXJldHVybiAwOw0KPj4gLX0NCj4+IC0NCj4+IC0vKiBUaGlzIGZ1 bmN0aW9uIHdhcyB1c2VkIHRvIGRpc2FibGUgYW5kIHVucHJlcGFyZSBRU1BJIGNsb2NrICovIC1z dGF0aWMgdm9pZA0KPj4gZnNsX3FzcGlfY2xrX2Rpc2FibGVfdW5wcmVwKHN0cnVjdCBmc2xfcXNw aSAqcSkgLXsNCj4+IC0JaWYgKG5lZWRzX3dha2V1cF93YWl0X21vZGUocSkpDQo+PiAtCQlwbV9x b3NfcmVtb3ZlX3JlcXVlc3QoJnEtPnBtX3Fvc19yZXEpOw0KPj4gLQ0KPj4gLQljbGtfZGlzYWJs ZV91bnByZXBhcmUocS0+Y2xrKTsNCj4+IC0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHEtPmNsa19l bik7DQo+PiAtDQo+PiAtfQ0KPj4gLQ0KPj4gLS8qIFdlIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGRv IHNvbWUgYmFzaWMgaW5pdCBmb3Igc3BpX25vcl9zY2FuKCkuICovIC1zdGF0aWMgaW50DQo+PiBm c2xfcXNwaV9ub3Jfc2V0dXAoc3RydWN0IGZzbF9xc3BpICpxKSAtew0KPj4gLQl2b2lkIF9faW9t ZW0gKmJhc2UgPSBxLT5pb2Jhc2U7DQo+PiAtCXUzMiByZWc7DQo+PiAtCWludCByZXQ7DQo+PiAt DQo+PiAtCS8qIGRpc2FibGUgYW5kIHVucHJlcGFyZSBjbG9jayB0byBhdm9pZCBnbGl0Y2ggcGFz cyB0byBjb250cm9sbGVyICovDQo+PiAtCWZzbF9xc3BpX2Nsa19kaXNhYmxlX3VucHJlcChxKTsN Cj4+IC0NCj4+IC0JLyogdGhlIGRlZmF1bHQgZnJlcXVlbmN5LCB3ZSB3aWxsIGNoYW5nZSBpdCBp biB0aGUgZnV0dXJlLiAqLw0KPj4gLQlyZXQgPSBjbGtfc2V0X3JhdGUocS0+Y2xrLCA2NjAwMDAw MCk7DQo+PiAtCWlmIChyZXQpDQo+PiAtCQlyZXR1cm4gcmV0Ow0KPj4gLQ0KPj4gLQlyZXQgPSBm c2xfcXNwaV9jbGtfcHJlcF9lbmFibGUocSk7DQo+PiAtCWlmIChyZXQpDQo+PiAtCQlyZXR1cm4g cmV0Ow0KPj4gLQ0KPj4gLQkvKiBSZXNldCB0aGUgbW9kdWxlICovDQo+PiAtCXFzcGlfd3JpdGVs KHEsIFFVQURTUElfTUNSX1NXUlNUU0RfTUFTSyB8DQo+PiBRVUFEU1BJX01DUl9TV1JTVEhEX01B U0ssDQo+PiAtCQliYXNlICsgUVVBRFNQSV9NQ1IpOw0KPj4gLQl1ZGVsYXkoMSk7DQo+PiAtDQo+ PiAtCS8qIEluaXQgdGhlIExVVCB0YWJsZS4gKi8NCj4+IC0JZnNsX3FzcGlfaW5pdF9sdXQocSk7 DQo+PiAtDQo+PiAtCS8qIERpc2FibGUgdGhlIG1vZHVsZSAqLw0KPj4gLQlxc3BpX3dyaXRlbChx LCBRVUFEU1BJX01DUl9NRElTX01BU0sgfA0KPj4gUVVBRFNQSV9NQ1JfUkVTRVJWRURfTUFTSywN Cj4+IC0JCQliYXNlICsgUVVBRFNQSV9NQ1IpOw0KPj4gLQ0KPj4gLQlyZWcgPSBxc3BpX3JlYWRs KHEsIGJhc2UgKyBRVUFEU1BJX1NNUFIpOw0KPj4gLQlxc3BpX3dyaXRlbChxLCByZWcgJiB+KFFV QURTUElfU01QUl9GU0RMWV9NQVNLDQo+PiAtCQkJfCBRVUFEU1BJX1NNUFJfRlNQSFNfTUFTSw0K Pj4gLQkJCXwgUVVBRFNQSV9TTVBSX0hTRU5BX01BU0sNCj4+IC0JCQl8IFFVQURTUElfU01QUl9E RFJTTVBfTUFTSyksIGJhc2UgKw0KPj4gUVVBRFNQSV9TTVBSKTsNCj4+IC0NCj4+IC0JLyogRW5h YmxlIHRoZSBtb2R1bGUgKi8NCj4+IC0JcXNwaV93cml0ZWwocSwgUVVBRFNQSV9NQ1JfUkVTRVJW RURfTUFTSyB8DQo+PiBRVUFEU1BJX01DUl9FTkRfQ0ZHX01BU0ssDQo+PiAtCQkJYmFzZSArIFFV QURTUElfTUNSKTsNCj4+IC0NCj4+IC0JLyogY2xlYXIgYWxsIGludGVycnVwdCBzdGF0dXMgKi8N Cj4+IC0JcXNwaV93cml0ZWwocSwgMHhmZmZmZmZmZiwgcS0+aW9iYXNlICsgUVVBRFNQSV9GUik7 DQo+PiAtDQo+PiAtCS8qIGVuYWJsZSB0aGUgaW50ZXJydXB0ICovDQo+PiAtCXFzcGlfd3JpdGVs KHEsIFFVQURTUElfUlNFUl9URklFLCBxLT5pb2Jhc2UgKyBRVUFEU1BJX1JTRVIpOw0KPj4gLQ0K Pj4gLQlyZXR1cm4gMDsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIGludCBmc2xfcXNwaV9ub3Jf c2V0dXBfbGFzdChzdHJ1Y3QgZnNsX3FzcGkgKnEpIC17DQo+PiAtCXVuc2lnbmVkIGxvbmcgcmF0 ZSA9IHEtPmNsa19yYXRlOw0KPj4gLQlpbnQgcmV0Ow0KPj4gLQ0KPj4gLQlpZiAobmVlZHNfNHhf Y2xvY2socSkpDQo+PiAtCQlyYXRlICo9IDQ7DQo+PiAtDQo+PiAtCS8qIGRpc2FibGUgYW5kIHVu cHJlcGFyZSBjbG9jayB0byBhdm9pZCBnbGl0Y2ggcGFzcyB0byBjb250cm9sbGVyICovDQo+PiAt CWZzbF9xc3BpX2Nsa19kaXNhYmxlX3VucHJlcChxKTsNCj4+IC0NCj4+IC0JcmV0ID0gY2xrX3Nl dF9yYXRlKHEtPmNsaywgcmF0ZSk7DQo+PiAtCWlmIChyZXQpDQo+PiAtCQlyZXR1cm4gcmV0Ow0K Pj4gLQ0KPj4gLQlyZXQgPSBmc2xfcXNwaV9jbGtfcHJlcF9lbmFibGUocSk7DQo+PiAtCWlmIChy ZXQpDQo+PiAtCQlyZXR1cm4gcmV0Ow0KPj4gLQ0KPj4gLQkvKiBJbml0IHRoZSBMVVQgdGFibGUg YWdhaW4uICovDQo+PiAtCWZzbF9xc3BpX2luaXRfbHV0KHEpOw0KPj4gLQ0KPj4gLQkvKiBJbml0 IGZvciBBSEIgcmVhZCAqLw0KPj4gLQlyZXR1cm4gZnNsX3FzcGlfaW5pdF9haGJfcmVhZChxKTsN Cj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZnNsX3Fz cGlfZHRfaWRzW10gPSB7DQo+PiAtCXsgLmNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXFzcGkiLCAu ZGF0YSA9ICZ2eWJyaWRfZGF0YSwgfSwNCj4+IC0JeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14NnN4 LXFzcGkiLCAuZGF0YSA9ICZpbXg2c3hfZGF0YSwgfSwNCj4+IC0JeyAuY29tcGF0aWJsZSA9ICJm c2wsaW14N2QtcXNwaSIsIC5kYXRhID0gJmlteDdkX2RhdGEsIH0sDQo+PiAtCXsgLmNvbXBhdGli bGUgPSAiZnNsLGlteDZ1bC1xc3BpIiwgLmRhdGEgPSAmaW14NnVsX2RhdGEsIH0sDQo+PiAtCXsg LmNvbXBhdGlibGUgPSAiZnNsLGxzMTAyMWEtcXNwaSIsIC5kYXRhID0gKHZvaWQgKikmbHMxMDIx YV9kYXRhLCB9LA0KPj4gLQl7IC5jb21wYXRpYmxlID0gImZzbCxsczIwODBhLXFzcGkiLCAuZGF0 YSA9ICZsczIwODBhX2RhdGEsIH0sDQo+PiAtCXsgLyogc2VudGluZWwgKi8gfQ0KPj4gLX07DQo+ PiAtTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZnNsX3FzcGlfZHRfaWRzKTsNCj4+IC0NCj4+IC1z dGF0aWMgdm9pZCBmc2xfcXNwaV9zZXRfYmFzZV9hZGRyKHN0cnVjdCBmc2xfcXNwaSAqcSwgc3Ry dWN0IHNwaV9ub3IgKm5vcikgLXsNCj4+IC0JcS0+Y2hpcF9iYXNlX2FkZHIgPSBxLT5ub3Jfc2l6 ZSAqIChub3IgLSBxLT5ub3IpOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgaW50IGZzbF9xc3Bp X3JlYWRfcmVnKHN0cnVjdCBzcGlfbm9yICpub3IsIHU4IG9wY29kZSwgdTggKmJ1ZiwgaW50IGxl bikNCj4+IC17DQo+PiAtCWludCByZXQ7DQo+PiAtCXN0cnVjdCBmc2xfcXNwaSAqcSA9IG5vci0+ cHJpdjsNCj4+IC0NCj4+IC0JcmV0ID0gZnNsX3FzcGlfcnVuY21kKHEsIG9wY29kZSwgMCwgbGVu KTsNCj4+IC0JaWYgKHJldCkNCj4+IC0JCXJldHVybiByZXQ7DQo+PiAtDQo+PiAtCWZzbF9xc3Bp X3JlYWRfZGF0YShxLCBsZW4sIGJ1Zik7DQo+PiAtCXJldHVybiAwOw0KPj4gLX0NCj4+IC0NCj4+ IC1zdGF0aWMgaW50IGZzbF9xc3BpX3dyaXRlX3JlZyhzdHJ1Y3Qgc3BpX25vciAqbm9yLCB1OCBv cGNvZGUsIHU4ICpidWYsIGludCBsZW4pDQo+PiAtew0KPj4gLQlzdHJ1Y3QgZnNsX3FzcGkgKnEg PSBub3ItPnByaXY7DQo+PiAtCWludCByZXQ7DQo+PiAtDQo+PiAtCWlmICghYnVmKSB7DQo+PiAt CQlyZXQgPSBmc2xfcXNwaV9ydW5jbWQocSwgb3Bjb2RlLCAwLCAxKTsNCj4+IC0JCWlmIChyZXQp DQo+PiAtCQkJcmV0dXJuIHJldDsNCj4+IC0NCj4+IC0JCWlmIChvcGNvZGUgPT0gU1BJTk9SX09Q X0NISVBfRVJBU0UpDQo+PiAtCQkJZnNsX3FzcGlfaW52YWxpZChxKTsNCj4+IC0NCj4+IC0JfSBl bHNlIGlmIChsZW4gPiAwKSB7DQo+PiAtCQlyZXQgPSBmc2xfcXNwaV9ub3Jfd3JpdGUocSwgbm9y LCBvcGNvZGUsIDAsDQo+PiAtCQkJCQkodTMyICopYnVmLCBsZW4pOw0KPj4gLQkJaWYgKHJldCA+ IDApDQo+PiAtCQkJcmV0dXJuIDA7DQo+PiAtCX0gZWxzZSB7DQo+PiAtCQlkZXZfZXJyKHEtPmRl diwgImludmFsaWQgY21kICVkXG4iLCBvcGNvZGUpOw0KPj4gLQkJcmV0ID0gLUVJTlZBTDsNCj4+ IC0JfQ0KPj4gLQ0KPj4gLQlyZXR1cm4gcmV0Ow0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgc3Np emVfdCBmc2xfcXNwaV93cml0ZShzdHJ1Y3Qgc3BpX25vciAqbm9yLCBsb2ZmX3QgdG8sDQo+PiAt CQkJICAgICAgc2l6ZV90IGxlbiwgY29uc3QgdV9jaGFyICpidWYpDQo+PiAtew0KPj4gLQlzdHJ1 Y3QgZnNsX3FzcGkgKnEgPSBub3ItPnByaXY7DQo+PiAtCXNzaXplX3QgcmV0ID0gZnNsX3FzcGlf bm9yX3dyaXRlKHEsIG5vciwgbm9yLT5wcm9ncmFtX29wY29kZSwgdG8sDQo+PiAtCQkJCQkgKHUz MiAqKWJ1ZiwgbGVuKTsNCj4+IC0NCj4+IC0JLyogaW52YWxpZCB0aGUgZGF0YSBpbiB0aGUgQUhC IGJ1ZmZlci4gKi8NCj4+IC0JZnNsX3FzcGlfaW52YWxpZChxKTsNCj4+IC0JcmV0dXJuIHJldDsN Cj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIHNzaXplX3QgZnNsX3FzcGlfcmVhZChzdHJ1Y3Qgc3Bp X25vciAqbm9yLCBsb2ZmX3QgZnJvbSwNCj4+IC0JCQkgICAgIHNpemVfdCBsZW4sIHVfY2hhciAq YnVmKQ0KPj4gLXsNCj4+IC0Jc3RydWN0IGZzbF9xc3BpICpxID0gbm9yLT5wcml2Ow0KPj4gLQl1 OCBjbWQgPSBub3ItPnJlYWRfb3Bjb2RlOw0KPj4gLQ0KPj4gLQkvKiBpZiBuZWNlc3NhcnksaW9y ZW1hcCBidWZmZXIgYmVmb3JlIEFIQiByZWFkLCAqLw0KPj4gLQlpZiAoIXEtPmFoYl9hZGRyKSB7 DQo+PiAtCQlxLT5tZW1tYXBfb2ZmcyA9IHEtPmNoaXBfYmFzZV9hZGRyICsgZnJvbTsNCj4+IC0J CXEtPm1lbW1hcF9sZW4gPSBsZW4gPiBRVUFEU1BJX01JTl9JT01BUCA/IGxlbiA6DQo+PiBRVUFE U1BJX01JTl9JT01BUDsNCj4+IC0NCj4+IC0JCXEtPmFoYl9hZGRyID0gaW9yZW1hcF9ub2NhY2hl KA0KPj4gLQkJCQlxLT5tZW1tYXBfcGh5ICsgcS0+bWVtbWFwX29mZnMsDQo+PiAtCQkJCXEtPm1l bW1hcF9sZW4pOw0KPj4gLQkJaWYgKCFxLT5haGJfYWRkcikgew0KPj4gLQkJCWRldl9lcnIocS0+ ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOw0KPj4gLQkJCXJldHVybiAtRU5PTUVNOw0KPj4gLQkJ fQ0KPj4gLQkvKiBpb3JlbWFwIGlmIHRoZSBkYXRhIHJlcXVlc3RlZCBpcyBvdXQgb2YgcmFuZ2Ug Ki8NCj4+IC0JfSBlbHNlIGlmIChxLT5jaGlwX2Jhc2VfYWRkciArIGZyb20gPCBxLT5tZW1tYXBf b2Zmcw0KPj4gLQkJCXx8IHEtPmNoaXBfYmFzZV9hZGRyICsgZnJvbSArIGxlbiA+DQo+PiAtCQkJ cS0+bWVtbWFwX29mZnMgKyBxLT5tZW1tYXBfbGVuKSB7DQo+PiAtCQlpb3VubWFwKHEtPmFoYl9h ZGRyKTsNCj4+IC0NCj4+IC0JCXEtPm1lbW1hcF9vZmZzID0gcS0+Y2hpcF9iYXNlX2FkZHIgKyBm cm9tOw0KPj4gLQkJcS0+bWVtbWFwX2xlbiA9IGxlbiA+IFFVQURTUElfTUlOX0lPTUFQID8gbGVu IDoNCj4+IFFVQURTUElfTUlOX0lPTUFQOw0KPj4gLQkJcS0+YWhiX2FkZHIgPSBpb3JlbWFwX25v Y2FjaGUoDQo+PiAtCQkJCXEtPm1lbW1hcF9waHkgKyBxLT5tZW1tYXBfb2ZmcywNCj4+IC0JCQkJ cS0+bWVtbWFwX2xlbik7DQo+PiAtCQlpZiAoIXEtPmFoYl9hZGRyKSB7DQo+PiAtCQkJZGV2X2Vy cihxLT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7DQo+PiAtCQkJcmV0dXJuIC1FTk9NRU07DQo+ PiAtCQl9DQo+PiAtCX0NCj4+IC0NCj4+IC0JZGV2X2RiZyhxLT5kZXYsICJjbWQgWyV4XSxyZWFk IGZyb20gJXAsIGxlbjolemRcbiIsDQo+PiAtCQljbWQsIHEtPmFoYl9hZGRyICsgcS0+Y2hpcF9i YXNlX2FkZHIgKyBmcm9tIC0gcS0NCj4+PiBtZW1tYXBfb2ZmcywNCj4+IC0JCWxlbik7DQo+PiAt DQo+PiAtCS8qIFJlYWQgb3V0IHRoZSBkYXRhIGRpcmVjdGx5IGZyb20gdGhlIEFIQiBidWZmZXIu Ki8NCj4+IC0JbWVtY3B5KGJ1ZiwgcS0+YWhiX2FkZHIgKyBxLT5jaGlwX2Jhc2VfYWRkciArIGZy b20gLSBxLQ0KPj4+IG1lbW1hcF9vZmZzLA0KPj4gLQkJbGVuKTsNCj4+IC0NCj4+IC0JcmV0dXJu IGxlbjsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIGludCBmc2xfcXNwaV9lcmFzZShzdHJ1Y3Qg c3BpX25vciAqbm9yLCBsb2ZmX3Qgb2ZmcykgLXsNCj4+IC0Jc3RydWN0IGZzbF9xc3BpICpxID0g bm9yLT5wcml2Ow0KPj4gLQlpbnQgcmV0Ow0KPj4gLQ0KPj4gLQlkZXZfZGJnKG5vci0+ZGV2LCAi JWRLaUIgYXQgMHglMDh4OjB4JTA4eFxuIiwNCj4+IC0JCW5vci0+bXRkLmVyYXNlc2l6ZSAvIDEw MjQsIHEtPmNoaXBfYmFzZV9hZGRyLCAodTMyKW9mZnMpOw0KPj4gLQ0KPj4gLQlyZXQgPSBmc2xf cXNwaV9ydW5jbWQocSwgbm9yLT5lcmFzZV9vcGNvZGUsIG9mZnMsIDApOw0KPj4gLQlpZiAocmV0 KQ0KPj4gLQkJcmV0dXJuIHJldDsNCj4+IC0NCj4+IC0JZnNsX3FzcGlfaW52YWxpZChxKTsNCj4+ IC0JcmV0dXJuIDA7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyBpbnQgZnNsX3FzcGlfcHJlcChz dHJ1Y3Qgc3BpX25vciAqbm9yLCBlbnVtIHNwaV9ub3Jfb3BzIG9wcykgLXsNCj4+IC0Jc3RydWN0 IGZzbF9xc3BpICpxID0gbm9yLT5wcml2Ow0KPj4gLQlpbnQgcmV0Ow0KPj4gLQ0KPj4gLQltdXRl eF9sb2NrKCZxLT5sb2NrKTsNCj4+IC0NCj4+IC0JcmV0ID0gZnNsX3FzcGlfY2xrX3ByZXBfZW5h YmxlKHEpOw0KPj4gLQlpZiAocmV0KQ0KPj4gLQkJZ290byBlcnJfbXV0ZXg7DQo+PiAtDQo+PiAt CWZzbF9xc3BpX3NldF9iYXNlX2FkZHIocSwgbm9yKTsNCj4+IC0JcmV0dXJuIDA7DQo+PiAtDQo+ PiAtZXJyX211dGV4Og0KPj4gLQltdXRleF91bmxvY2soJnEtPmxvY2spOw0KPj4gLQlyZXR1cm4g cmV0Ow0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgdm9pZCBmc2xfcXNwaV91bnByZXAoc3RydWN0 IHNwaV9ub3IgKm5vciwgZW51bSBzcGlfbm9yX29wcyBvcHMpIC17DQo+PiAtCXN0cnVjdCBmc2xf cXNwaSAqcSA9IG5vci0+cHJpdjsNCj4+IC0NCj4+IC0JZnNsX3FzcGlfY2xrX2Rpc2FibGVfdW5w cmVwKHEpOw0KPj4gLQltdXRleF91bmxvY2soJnEtPmxvY2spOw0KPj4gLX0NCj4+IC0NCj4+IC1z dGF0aWMgaW50IGZzbF9xc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpIC17 DQo+PiAtCWNvbnN0IHN0cnVjdCBzcGlfbm9yX2h3Y2FwcyBod2NhcHMgPSB7DQo+PiAtCQkubWFz ayA9IFNOT1JfSFdDQVBTX1JFQURfMV8xXzQgfA0KPj4gLQkJCVNOT1JfSFdDQVBTX1BQLA0KPj4g LQl9Ow0KPj4gLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7DQo+ PiAtCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQo+PiAtCXN0cnVjdCBmc2xfcXNw aSAqcTsNCj4+IC0Jc3RydWN0IHJlc291cmNlICpyZXM7DQo+PiAtCXN0cnVjdCBzcGlfbm9yICpu b3I7DQo+PiAtCXN0cnVjdCBtdGRfaW5mbyAqbXRkOw0KPj4gLQlpbnQgcmV0LCBpID0gMDsNCj4+ IC0NCj4+IC0JcSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcSksIEdGUF9LRVJORUwpOw0K Pj4gLQlpZiAoIXEpDQo+PiAtCQlyZXR1cm4gLUVOT01FTTsNCj4+IC0NCj4+IC0JcS0+bm9yX251 bSA9IG9mX2dldF9jaGlsZF9jb3VudChkZXYtPm9mX25vZGUpOw0KPj4gLQlpZiAoIXEtPm5vcl9u dW0gfHwgcS0+bm9yX251bSA+IEZTTF9RU1BJX01BWF9DSElQKQ0KPj4gLQkJcmV0dXJuIC1FTk9E RVY7DQo+PiAtDQo+PiAtCXEtPmRldiA9IGRldjsNCj4+IC0JcS0+ZGV2dHlwZV9kYXRhID0gb2Zf ZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7DQo+PiAtCWlmICghcS0+ZGV2dHlwZV9kYXRhKQ0K Pj4gLQkJcmV0dXJuIC1FTk9ERVY7DQo+PiAtCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHEp Ow0KPj4gLQ0KPj4gLQkvKiBmaW5kIHRoZSByZXNvdXJjZXMgKi8NCj4+IC0JcmVzID0gcGxhdGZv cm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwNCj4+ICJRdWFkU1BJ Iik7DQo+PiAtCXEtPmlvYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7DQo+ PiAtCWlmIChJU19FUlIocS0+aW9iYXNlKSkNCj4+IC0JCXJldHVybiBQVFJfRVJSKHEtPmlvYmFz ZSk7DQo+PiAtDQo+PiAtCXEtPmJpZ19lbmRpYW4gPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAs ICJiaWctZW5kaWFuIik7DQo+PiAtCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUo cGRldiwgSU9SRVNPVVJDRV9NRU0sDQo+PiAtCQkJCQkiUXVhZFNQSS1tZW1vcnkiKTsNCj4+IC0J aWYgKCFkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbihkZXYsIHJlcy0+c3RhcnQsIHJlc291cmNlX3Np emUocmVzKSwNCj4+IC0JCQkJICAgICByZXMtPm5hbWUpKSB7DQo+PiAtCQlkZXZfZXJyKGRldiwg ImNhbid0IHJlcXVlc3QgcmVnaW9uIGZvciByZXNvdXJjZSAlcFJcbiIsIHJlcyk7DQo+PiAtCQly ZXR1cm4gLUVCVVNZOw0KPj4gLQl9DQo+PiAtDQo+PiAtCXEtPm1lbW1hcF9waHkgPSByZXMtPnN0 YXJ0Ow0KPj4gLQ0KPj4gLQkvKiBmaW5kIHRoZSBjbG9ja3MgKi8NCj4+IC0JcS0+Y2xrX2VuID0g ZGV2bV9jbGtfZ2V0KGRldiwgInFzcGlfZW4iKTsNCj4+IC0JaWYgKElTX0VSUihxLT5jbGtfZW4p KQ0KPj4gLQkJcmV0dXJuIFBUUl9FUlIocS0+Y2xrX2VuKTsNCj4+IC0NCj4+IC0JcS0+Y2xrID0g ZGV2bV9jbGtfZ2V0KGRldiwgInFzcGkiKTsNCj4+IC0JaWYgKElTX0VSUihxLT5jbGspKQ0KPj4g LQkJcmV0dXJuIFBUUl9FUlIocS0+Y2xrKTsNCj4+IC0NCj4+IC0JcmV0ID0gZnNsX3FzcGlfY2xr X3ByZXBfZW5hYmxlKHEpOw0KPj4gLQlpZiAocmV0KSB7DQo+PiAtCQlkZXZfZXJyKGRldiwgImNh biBub3QgZW5hYmxlIHRoZSBjbG9ja1xuIik7DQo+PiAtCQlnb3RvIGNsa19mYWlsZWQ7DQo+PiAt CX0NCj4+IC0NCj4+IC0JLyogZmluZCB0aGUgaXJxICovDQo+PiAtCXJldCA9IHBsYXRmb3JtX2dl dF9pcnEocGRldiwgMCk7DQo+PiAtCWlmIChyZXQgPCAwKSB7DQo+PiAtCQlkZXZfZXJyKGRldiwg ImZhaWxlZCB0byBnZXQgdGhlIGlycTogJWRcbiIsIHJldCk7DQo+PiAtCQlnb3RvIGlycV9mYWls ZWQ7DQo+PiAtCX0NCj4+IC0NCj4+IC0JcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIHJldCwN Cj4+IC0JCQlmc2xfcXNwaV9pcnFfaGFuZGxlciwgMCwgcGRldi0+bmFtZSwgcSk7DQo+PiAtCWlm IChyZXQpIHsNCj4+IC0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgaXJxOiAlZFxu IiwgcmV0KTsNCj4+IC0JCWdvdG8gaXJxX2ZhaWxlZDsNCj4+IC0JfQ0KPj4gLQ0KPj4gLQlyZXQg PSBmc2xfcXNwaV9ub3Jfc2V0dXAocSk7DQo+PiAtCWlmIChyZXQpDQo+PiAtCQlnb3RvIGlycV9m YWlsZWQ7DQo+PiAtDQo+PiAtCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJmc2wscXNwaS1oYXMt c2Vjb25kLWNoaXAiLCBOVUxMKSkNCj4+IC0JCXEtPmhhc19zZWNvbmRfY2hpcCA9IHRydWU7DQo+ PiAtDQo+PiAtCW11dGV4X2luaXQoJnEtPmxvY2spOw0KPj4gLQ0KPj4gLQkvKiBpdGVyYXRlIHRo ZSBzdWJub2Rlcy4gKi8NCj4+IC0JZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUoZGV2 LT5vZl9ub2RlLCBucCkgew0KPj4gLQkJLyogc2tpcCB0aGUgaG9sZXMgKi8NCj4+IC0JCWlmICgh cS0+aGFzX3NlY29uZF9jaGlwKQ0KPj4gLQkJCWkgKj0gMjsNCj4+IC0NCj4+IC0JCW5vciA9ICZx LT5ub3JbaV07DQo+PiAtCQltdGQgPSAmbm9yLT5tdGQ7DQo+PiAtDQo+PiAtCQlub3ItPmRldiA9 IGRldjsNCj4+IC0JCXNwaV9ub3Jfc2V0X2ZsYXNoX25vZGUobm9yLCBucCk7DQo+PiAtCQlub3It PnByaXYgPSBxOw0KPj4gLQ0KPj4gLQkJaWYgKHEtPm5vcl9udW0gPiAxICYmICFtdGQtPm5hbWUp IHsNCj4+IC0JCQlpbnQgc3BpZmxhc2hfaWR4Ow0KPj4gLQ0KPj4gLQkJCXJldCA9IG9mX3Byb3Bl cnR5X3JlYWRfdTMyKG5wLCAicmVnIiwgJnNwaWZsYXNoX2lkeCk7DQo+PiAtCQkJaWYgKCFyZXQp IHsNCj4+IC0JCQkJbXRkLT5uYW1lID0gZGV2bV9rYXNwcmludGYoZGV2LA0KPj4gR0ZQX0tFUk5F TCwNCj4+IC0JCQkJCQkJICAgIiVzLSVkIiwNCj4+IC0JCQkJCQkJICAgZGV2X25hbWUoZGV2KSwN Cj4+IC0JCQkJCQkJICAgc3BpZmxhc2hfaWR4KTsNCj4+IC0JCQkJaWYgKCFtdGQtPm5hbWUpIHsN Cj4+IC0JCQkJCXJldCA9IC1FTk9NRU07DQo+PiAtCQkJCQlnb3RvIG11dGV4X2ZhaWxlZDsNCj4+ IC0JCQkJfQ0KPj4gLQkJCX0gZWxzZSB7DQo+PiAtCQkJCWRldl93YXJuKGRldiwgInJlZyBwcm9w ZXJ0eSBpcyBtaXNzaW5nXG4iKTsNCj4+IC0JCQl9DQo+PiAtCQl9DQo+PiAtDQo+PiAtCQkvKiBm aWxsIHRoZSBob29rcyAqLw0KPj4gLQkJbm9yLT5yZWFkX3JlZyA9IGZzbF9xc3BpX3JlYWRfcmVn Ow0KPj4gLQkJbm9yLT53cml0ZV9yZWcgPSBmc2xfcXNwaV93cml0ZV9yZWc7DQo+PiAtCQlub3It PnJlYWQgPSBmc2xfcXNwaV9yZWFkOw0KPj4gLQkJbm9yLT53cml0ZSA9IGZzbF9xc3BpX3dyaXRl Ow0KPj4gLQkJbm9yLT5lcmFzZSA9IGZzbF9xc3BpX2VyYXNlOw0KPj4gLQ0KPj4gLQkJbm9yLT5w cmVwYXJlID0gZnNsX3FzcGlfcHJlcDsNCj4+IC0JCW5vci0+dW5wcmVwYXJlID0gZnNsX3FzcGlf dW5wcmVwOw0KPj4gLQ0KPj4gLQkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJzcGkt bWF4LWZyZXF1ZW5jeSIsDQo+PiAtCQkJCSZxLT5jbGtfcmF0ZSk7DQo+PiAtCQlpZiAocmV0IDwg MCkNCj4+IC0JCQlnb3RvIG11dGV4X2ZhaWxlZDsNCj4+IC0NCj4+IC0JCS8qIHNldCB0aGUgY2hp cCBhZGRyZXNzIGZvciBSRUFESUQgKi8NCj4+IC0JCWZzbF9xc3BpX3NldF9iYXNlX2FkZHIocSwg bm9yKTsNCj4+IC0NCj4+IC0JCXJldCA9IHNwaV9ub3Jfc2Nhbihub3IsIE5VTEwsICZod2NhcHMp Ow0KPj4gLQkJaWYgKHJldCkNCj4+IC0JCQlnb3RvIG11dGV4X2ZhaWxlZDsNCj4+IC0NCj4+IC0J CXJldCA9IG10ZF9kZXZpY2VfcmVnaXN0ZXIobXRkLCBOVUxMLCAwKTsNCj4+IC0JCWlmIChyZXQp DQo+PiAtCQkJZ290byBtdXRleF9mYWlsZWQ7DQo+PiAtDQo+PiAtCQkvKiBTZXQgdGhlIGNvcnJl Y3QgTk9SIHNpemUgbm93LiAqLw0KPj4gLQkJaWYgKHEtPm5vcl9zaXplID09IDApIHsNCj4+IC0J CQlxLT5ub3Jfc2l6ZSA9IG10ZC0+c2l6ZTsNCj4+IC0NCj4+IC0JCQkvKiBNYXAgdGhlIFNQSSBO T1IgdG8gYWNjZXNzaWFibGUgYWRkcmVzcyAqLw0KPj4gLQkJCWZzbF9xc3BpX3NldF9tYXBfYWRk cihxKTsNCj4+IC0JCX0NCj4+IC0NCj4+IC0JCS8qDQo+PiAtCQkgKiBUaGUgVFggRklGTyBpcyA2 NCBieXRlcyBpbiB0aGUgVnlicmlkLCBidXQgdGhlIFBhZ2UgUHJvZ3JhbQ0KPj4gLQkJICogbWF5 IHdyaXRlcyAyNjUgYnl0ZXMgcGVyIHRpbWUuIFRoZSB3cml0ZSBpcyB3b3JraW5nIGluIHRoZQ0K Pj4gLQkJICogdW5pdCBvZiB0aGUgVFggRklGTywgbm90IGluIHRoZSB1bml0IG9mIHRoZSBTUEkg Tk9SJ3MgcGFnZQ0KPj4gLQkJICogc2l6ZS4NCj4+IC0JCSAqDQo+PiAtCQkgKiBTbyBzaHJpbmsg dGhlIHNwaV9ub3ItPnBhZ2Vfc2l6ZSBpZiBpdCBpcyBsYXJnZXIgdGhlbiB0aGUNCj4+IC0JCSAq IFRYIEZJRk8uDQo+PiAtCQkgKi8NCj4+IC0JCWlmIChub3ItPnBhZ2Vfc2l6ZSA+IHEtPmRldnR5 cGVfZGF0YS0+dHhmaWZvKQ0KPj4gLQkJCW5vci0+cGFnZV9zaXplID0gcS0+ZGV2dHlwZV9kYXRh LT50eGZpZm87DQo+PiAtDQo+PiAtCQlpKys7DQo+PiAtCX0NCj4+IC0NCj4+IC0JLyogZmluaXNo IHRoZSByZXN0IGluaXQuICovDQo+PiAtCXJldCA9IGZzbF9xc3BpX25vcl9zZXR1cF9sYXN0KHEp Ow0KPj4gLQlpZiAocmV0KQ0KPj4gLQkJZ290byBsYXN0X2luaXRfZmFpbGVkOw0KPj4gLQ0KPj4g LQlmc2xfcXNwaV9jbGtfZGlzYWJsZV91bnByZXAocSk7DQo+PiAtCXJldHVybiAwOw0KPj4gLQ0K Pj4gLWxhc3RfaW5pdF9mYWlsZWQ6DQo+PiAtCWZvciAoaSA9IDA7IGkgPCBxLT5ub3JfbnVtOyBp KyspIHsNCj4+IC0JCS8qIHNraXAgdGhlIGhvbGVzICovDQo+PiAtCQlpZiAoIXEtPmhhc19zZWNv bmRfY2hpcCkNCj4+IC0JCQlpICo9IDI7DQo+PiAtCQltdGRfZGV2aWNlX3VucmVnaXN0ZXIoJnEt Pm5vcltpXS5tdGQpOw0KPj4gLQl9DQo+PiAtbXV0ZXhfZmFpbGVkOg0KPj4gLQltdXRleF9kZXN0 cm95KCZxLT5sb2NrKTsNCj4+IC1pcnFfZmFpbGVkOg0KPj4gLQlmc2xfcXNwaV9jbGtfZGlzYWJs ZV91bnByZXAocSk7DQo+PiAtY2xrX2ZhaWxlZDoNCj4+IC0JZGV2X2VycihkZXYsICJGcmVlc2Nh bGUgUXVhZFNQSSBwcm9iZSBmYWlsZWRcbiIpOw0KPj4gLQlyZXR1cm4gcmV0Ow0KPj4gLX0NCj4+ IC0NCj4+IC1zdGF0aWMgaW50IGZzbF9xc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KSAtew0KPj4gLQlzdHJ1Y3QgZnNsX3FzcGkgKnEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0 YShwZGV2KTsNCj4+IC0JaW50IGk7DQo+PiAtDQo+PiAtCWZvciAoaSA9IDA7IGkgPCBxLT5ub3Jf bnVtOyBpKyspIHsNCj4+IC0JCS8qIHNraXAgdGhlIGhvbGVzICovDQo+PiAtCQlpZiAoIXEtPmhh c19zZWNvbmRfY2hpcCkNCj4+IC0JCQlpICo9IDI7DQo+PiAtCQltdGRfZGV2aWNlX3VucmVnaXN0 ZXIoJnEtPm5vcltpXS5tdGQpOw0KPj4gLQl9DQo+PiAtDQo+PiAtCS8qIGRpc2FibGUgdGhlIGhh cmR3YXJlICovDQo+PiAtCXFzcGlfd3JpdGVsKHEsIFFVQURTUElfTUNSX01ESVNfTUFTSywgcS0+ aW9iYXNlICsNCj4+IFFVQURTUElfTUNSKTsNCj4+IC0JcXNwaV93cml0ZWwocSwgMHgwLCBxLT5p b2Jhc2UgKyBRVUFEU1BJX1JTRVIpOw0KPj4gLQ0KPj4gLQltdXRleF9kZXN0cm95KCZxLT5sb2Nr KTsNCj4+IC0NCj4+IC0JaWYgKHEtPmFoYl9hZGRyKQ0KPj4gLQkJaW91bm1hcChxLT5haGJfYWRk cik7DQo+PiAtDQo+PiAtCXJldHVybiAwOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgaW50IGZz bF9xc3BpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90 DQo+PiBzdGF0ZSkgLXsNCj4+IC0JcmV0dXJuIDA7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyBp bnQgZnNsX3FzcGlfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpIC17DQo+PiAt CWludCByZXQ7DQo+PiAtCXN0cnVjdCBmc2xfcXNwaSAqcSA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KHBkZXYpOw0KPj4gLQ0KPj4gLQlyZXQgPSBmc2xfcXNwaV9jbGtfcHJlcF9lbmFibGUocSk7DQo+ PiAtCWlmIChyZXQpDQo+PiAtCQlyZXR1cm4gcmV0Ow0KPj4gLQ0KPj4gLQlmc2xfcXNwaV9ub3Jf c2V0dXAocSk7DQo+PiAtCWZzbF9xc3BpX3NldF9tYXBfYWRkcihxKTsNCj4+IC0JZnNsX3FzcGlf bm9yX3NldHVwX2xhc3QocSk7DQo+PiAtDQo+PiAtCWZzbF9xc3BpX2Nsa19kaXNhYmxlX3VucHJl cChxKTsNCj4+IC0NCj4+IC0JcmV0dXJuIDA7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9xc3BpX2RyaXZlciA9IHsNCj4+IC0JLmRyaXZlciA9IHsN Cj4+IC0JCS5uYW1lCT0gImZzbC1xdWFkc3BpIiwNCj4+IC0JCS5vZl9tYXRjaF90YWJsZSA9IGZz bF9xc3BpX2R0X2lkcywNCj4+IC0JfSwNCj4+IC0JLnByb2JlICAgICAgICAgID0gZnNsX3FzcGlf cHJvYmUsDQo+PiAtCS5yZW1vdmUJCT0gZnNsX3FzcGlfcmVtb3ZlLA0KPj4gLQkuc3VzcGVuZAk9 IGZzbF9xc3BpX3N1c3BlbmQsDQo+PiAtCS5yZXN1bWUJCT0gZnNsX3FzcGlfcmVzdW1lLA0KPj4g LX07DQo+PiAtbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihmc2xfcXNwaV9kcml2ZXIpOw0KPj4gLQ0K Pj4gLU1PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIFF1YWRTUEkgQ29udHJvbGxlciBEcml2 ZXIiKTsgLQ0KPj4gTU9EVUxFX0FVVEhPUigiRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLiIp OyAtTU9EVUxFX0xJQ0VOU0UoIkdQTA0KPj4gdjIiKTsNCj4+IC0tDQo+PiAyLjcuNA0KPiANCj4g QWNrZWQtYnk6IEhhbiBYdSA8aGFuLnh1QG54cC5jb20+DQo+IFRlc3RlZC1ieTogSGFuIFh1IDxo YW4ueHVAbnhwLmNvbT4NCg0KQ291bGQgeW91IGFsc28gYWRkIHRoZSB0YWdzIHRvIHRoZSBwYXRj aCB0aGF0IGFkZHMgdGhlIG5ldyBkcml2ZXI/DQpodHRwczovL3BhdGNod29yay5vemxhYnMub3Jn L3BhdGNoLzEwMDc2NTAvDQoNClRoYW5rcywNCkZyaWVkZXI=