From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3FC10C433DF for ; Tue, 16 Jun 2020 13:18:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DB20320FC3 for ; Tue, 16 Jun 2020 13:18:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="hLd4ZU+y" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727804AbgFPNSP (ORCPT ); Tue, 16 Jun 2020 09:18:15 -0400 Received: from mailout1.w2.samsung.com ([211.189.100.11]:49756 "EHLO mailout1.w2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726692AbgFPNSO (ORCPT ); Tue, 16 Jun 2020 09:18:14 -0400 Received: from uscas1p1.samsung.com (unknown [182.198.245.206]) by mailout1.w2.samsung.com (KnoxPortal) with ESMTP id 20200616131812usoutp0180f9e7e639a5d54bdf36ed878f1af400~ZCK9XkXc40685206852usoutp01H; Tue, 16 Jun 2020 13:18:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w2.samsung.com 20200616131812usoutp0180f9e7e639a5d54bdf36ed878f1af400~ZCK9XkXc40685206852usoutp01H DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1592313492; bh=PzW7b+qH0+28j3e83xjq3C1IEzT2BBQA+pJfwYFDbYI=; h=From:To:CC:Subject:Date:In-Reply-To:References:From; b=hLd4ZU+yOJNNLH22SqMQ9hVZnxumEAwiQPM9yjen7wLk6MmAttwJSFl3jCFiSWLNU N2D0odHkyFqd3HLIleHEtuscJFO1k1w1GsQx+0GnhGygyBoyMWQkiE1YX8Pv6NqKRn l8imaqs5508LFCTbUgVy0EM+e4wenzSvQSmfaiV8= Received: from ussmges2new.samsung.com (u111.gpu85.samsung.co.kr [203.254.195.111]) by uscas1p2.samsung.com (KnoxPortal) with ESMTP id 20200616131812uscas1p2d9eb35347729d107c1db558705238dc5~ZCK9AM9NC0506305063uscas1p22; Tue, 16 Jun 2020 13:18:12 +0000 (GMT) Received: from uscas1p1.samsung.com ( [182.198.245.206]) by ussmges2new.samsung.com (USCPEMTA) with SMTP id B2.42.43965.396C8EE5; Tue, 16 Jun 2020 09:18:11 -0400 (EDT) Received: from ussmgxs2new.samsung.com (u91.gpu85.samsung.co.kr [203.254.195.91]) by uscas1p1.samsung.com (KnoxPortal) with ESMTP id 20200616131811uscas1p12e9388d1fa81f4e1ef1aff9db5f70804~ZCK8l0iGK1272612726uscas1p1w; Tue, 16 Jun 2020 13:18:11 +0000 (GMT) X-AuditID: cbfec36f-227ff7000002abbd-59-5ee8c6939241 Received: from SSI-EX4.ssi.samsung.com ( [105.128.2.145]) by ussmgxs2new.samsung.com (USCPEXMTA) with SMTP id C5.7A.59630.396C8EE5; Tue, 16 Jun 2020 09:18:11 -0400 (EDT) Received: from SSI-EX3.ssi.samsung.com (105.128.2.228) by SSI-EX4.ssi.samsung.com (105.128.2.229) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.1.1713.5; Tue, 16 Jun 2020 06:18:10 -0700 Received: from SSI-EX3.ssi.samsung.com ([fe80::8d80:5816:c578:8c36]) by SSI-EX3.ssi.samsung.com ([fe80::8d80:5816:c578:8c36%3]) with mapi id 15.01.1713.004; Tue, 16 Jun 2020 06:18:10 -0700 From: Judy Brock To: Judy Brock , =?utf-8?B?TWF0aWFzIEJqw7hybGluZw==?= , =?utf-8?B?SmF2aWVyIEdvbnrDoWxleg==?= CC: Jens Axboe , Niklas Cassel , Damien Le Moal , Ajay Joshi , "Sagi Grimberg" , Keith Busch , "Dmitry Fomichev" , Aravind Ramesh , "linux-nvme@lists.infradead.org" , "linux-block@vger.kernel.org" , Hans Holmberg , Christoph Hellwig , =?utf-8?B?TWF0aWFzIEJqw7hybGluZw==?= Subject: RE: [PATCH 5/5] nvme: support for zoned namespaces Thread-Topic: [PATCH 5/5] nvme: support for zoned namespaces Thread-Index: AQHWQ23O6HVrKIfYL0qwGW6H27y34ajbg+8AgAAKNQCAAAvBAP//kHpQgAB6BAD//5N7cIAAAWwA Date: Tue, 16 Jun 2020 13:18:10 +0000 Message-ID: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [105.128.2.176] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected X-Brightmail-Tracker: H4sIAAAAAAAAA01SaUhUYRTle+8572mNPifRW4LgSIVK2iLxSikJg/kV+aMfGamTPsbKjXla GYRDZTaO6ISSueSWTC6pqTkuKS6pY5maDZFKrqUpLlnikqk1M0/Jf+fec+6558KlcNG42T7q angUKw+XhooFFoS2Y6nnUErHlP9hdbEHk116kEnXryKmZChZwMTFL2NMabxKwKhn20mmqKQd Y5RdHzBG29QiYBoHXZkczQTJqB8s4UxhTRvBjK5/JZmymR+Et5Wkd7iCkNzL/UJI9N3REtWn VSSpKoiVvB5QCCSLlQ6S+GYVdp7ys/AKZkOv3mDl7qcCLUIWan+RkR1F+K3O/meEAn3IxhOQ OQW0B+jv6zAjFtFFCHSaEwnIwoDjMPizqRdsi15NDuA8UYpAP5lvxhc/EYyonpN80YxgbaHO 5CWgnaH9/V3CSNjQTxGkJhYiI4HTbQSUzZrwHtoTNh73kUZsQ3tBWuYwzmM/aFBmmfoEvR/6 vsyb+kL6JFT0jpqwuWG2dW7B5INoW1h59wLj/e1g8FsOxue2hvzMhq1DbWGzfmzrHkcYWZk2 +FMGvTOU17vzo46Qqhoj+VXW8Db9G8HL90JLYb/pFqDnSOh8OW+aBdoHktMCeI09bAxpMF5T jyAl6d1WoUOg7uxBvMoT8peKSX6bJWysjSM1csrYkTvjf6aMHZkydmTKRUQxsovmuDAZyx0N Z2+6cdIwLjpc5hYUEVaJDJ/Xtfkmohb1FgS1IppC4t1CRd6Uv8hMeoOLCWtFQOFiG+GZ7i5/ kTBYGnOblUcEyKNDWa4V2VOE2E44Oj59WUTLpFHsdZaNZOXbLEaZ71Og3T3r2mNJ9hd2Ke/I 32PdMSV5P3w6W2Jcr6QPPTl7yfGN4shy9d9K3d1QD2KqP2EiNkozdtpyOPe3FXfxoU3i95lr 3gca3Y57Wh+3/Bg1OxYY+UjmIF9LSZ10OndCl/i5RpsXp7SM1Hjn+WJ765I8IlxmyquWdNW4 b9a0E9Y0szgiJrgQ6REXXM5J/wFpRfc4dQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrMIsWRmVeSWpSXmKPExsWS2cA0UXfysRdxBufnyVjMW6tuMfPyD0aL 1Xf72Sxa278xWaxt72azmPDmKLvFytVHmSw6T19gsti2/yCbxd5b2hbzlz1lt5jQ9pXZYsX2 IywWD/48ZrdY9/o9iwO/x/l7G1k8mhfcYfG4fLbUo/vqD0aPzUvqPXbfbGDz+LxJzqP9QDdT AEcUl01Kak5mWWqRvl0CV8aHHZ/YC46tZK44cWMxSwPjhXnMXYycHBICJhJbnt0Esrk4hARW M0pM/f6ODcL5yChxcH4PlHOAUeLMgrdgLWwCmhJHzzSxgCREBGYzShzdu5EVJMEscIRFYt0b RhBbWMBa4u+0i+wgtoiAjcT02feYIewoiT2dc8DiLAKqEhfvvAOL8wpYSWw8/wDMFhJ4yyyx bp8siM0JNOfQ2w9gMxkFxCS+n1rDBLFLXOLWk/lMED8ISCzZcx7qH1GJl4//sULYihL3v78E 2sUBVK8psX6XPkSrosSU7ofsEGsFJU7OfMICUS4pcXDFDZYJjOKzkGyYhdA9C0n3LCTdCxhZ VjGKlxYX56ZXFBvlpZbrFSfmFpfmpesl5+duYgQmhdP/DkfvYLy5JPkQowAHoxIPb8PCF3FC rIllxZW5hxglOJiVRHidzp6OE+JNSaysSi3Kjy8qzUktPsQozcGiJM5bLr4gSkggPbEkNTs1 tSC1CCbLxMEp1cCotf3ljvzc/qvGZ7wXLBNKuz1NOu5u7dFbrPPWfPi6+FbwnJcKgtulHH5M q+Lp59HS58zR7MrPn/Xx4PLu1E3pJwrZFX7dkzqr6JTHsvvAymqLhqfqN3fenJy0b3vlgjXl 9zZUTJ2qeeXuJS5Nhd77c994rd549rLS897HrVWyFZ1atyazeKduV2Ipzkg01GIuKk4EAMNj rUIGAwAA X-CMS-MailID: 20200616131811uscas1p12e9388d1fa81f4e1ef1aff9db5f70804 CMS-TYPE: 301P X-CMS-RootMailID: 20200616123503uscas1p22ce22054a1b4152a20437b5abdd55119 References: <20200615233424.13458-1-keith.busch@wdc.com> <20200615233424.13458-6-keith.busch@wdc.com> <20200616104142.zxw25txhsg2eyhsb@mpHalley.local> <20200616120018.en337lcs5y2jh5ne@mpHalley.local> <3ab4032c18a8411389d3879026cde2a2@samsung.com> <7c76c93b-d8de-831c-f41c-3ee3a8e48169@lightnvm.io> Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org DQpXYWl0IGEgbWludXRlLiBJIHRoaW5rIEkgbWlzdW5kZXJzdG9vZCB3aGF0IERhbWllbiB3YXMg cmVmZXJyaW5nIHRvIHcvcmVzcGVjdCB0byB0aGUgcGVyZm9ybWFuY2UgcGVuYWx0eS4gSSB0b29r IGl0IHRvIG1lYW4gYSBwZW5hbHR5IGluY3VycmVkIGJ5IGhhdmluZyB0byBkbyB0cmFuc2xhdGlv biAobGlrZSBhIFNDU0kgdHJhbnNsYXRpb24gbGF5ZXIsIGV0Yy4pIGJ1dCBpZiBoZSB3YXMgcmVm ZXJyaW5nIHRvIHRoZSBmYWN0IHRoYXQgQXBwZW5kIGdpdmVzIHF1ZXVlIGRlcHRoID4gMSBhbmQg aGUgd2FzIGFzc3VtaW5nIG5vbi1ab25lIEFwcGVuZCBTU0RzIHdvdWxkIG9ubHkgc3VwcG9ydCBR RCA9IDEsIHRoZW4gd2UgYXJlIGFsbCBnb29kIHNpbmNlIFpSV0EgaXMgYW4gYWx0ZXJuYXRlIGFw cHJvYWNoIHRvIGFjaGlldmluZyBRRCA+MS4NCg0KSWYgdGhhdCdzIHdoYXQgeW91IG1lYW50IERh bWllbiwgbXkgYmFkLg0KDQpUaGFua3MsDQpKdWR5DQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQpGcm9tOiBsaW51eC1udm1lIFttYWlsdG86bGludXgtbnZtZS1ib3VuY2VzQGxpc3RzLmlu ZnJhZGVhZC5vcmddIE9uIEJlaGFsZiBPZiBKdWR5IEJyb2NrDQpTZW50OiBUdWVzZGF5LCBKdW5l IDE2LCAyMDIwIDY6MTMgQU0NClRvOiBNYXRpYXMgQmrDuHJsaW5nOyBKYXZpZXIgR29uesOhbGV6 DQpDYzogSmVucyBBeGJvZTsgTmlrbGFzIENhc3NlbDsgRGFtaWVuIExlIE1vYWw7IEFqYXkgSm9z aGk7IFNhZ2kgR3JpbWJlcmc7IEtlaXRoIEJ1c2NoOyBEbWl0cnkgRm9taWNoZXY7IEFyYXZpbmQg UmFtZXNoOyBsaW51eC1udm1lQGxpc3RzLmluZnJhZGVhZC5vcmc7IGxpbnV4LWJsb2NrQHZnZXIu a2VybmVsLm9yZzsgSGFucyBIb2xtYmVyZzsgQ2hyaXN0b3BoIEhlbGx3aWc7IE1hdGlhcyBCasO4 cmxpbmcNClN1YmplY3Q6IFJFOiBbUEFUQ0ggNS81XSBudm1lOiBzdXBwb3J0IGZvciB6b25lZCBu YW1lc3BhY2VzDQoNClNvcnJ5IGFnYWluIHRoZW4gaWYgSSBvdmVycmVhY3RlZC4gQnV0IGl0IHNl ZW1lZCB0aGF0IERhbWllbiBlc3NlbnRpYWxseSBzYWlkIHRoYXQgYXQgYmVzdCBub24tIFpvbmUg QXBwZW5kIFpOUyBTU0RzIHdpbGwgYmUgYXQgYSBsYXJnZSBwZXJmb3JtYW5jZSBkaXNhZHZhbnRh Z2UuIEkgYXNzdW1lIHRoYXQgaXMgZXZlbiB3aXRoIHRoZSBwYXRjaGVzIEphdmllciBjcmVhdGVz LiBEdWUgdG8gdGhlIGZhY3QgdGhhdCB0aGUgd2hvbGUgc3RhY2sgaXMgbWFuZGF0aW5nIEFwcGVu ZCBmcm9tIHRvcCBkb3duIGFuZCBhbnl0aGluZyB0aGF0IGRvZXNuJ3QgbmF0aXZlbHkgc3VwcG9y dCB0aGF0IGNhbid0IHJlYWxseSBiZSBpbnRlZ3JhdGVkIHNlYW1sZXNzbHkgbm8gbWF0dGVyIHdo YXQuDQoNCklmIHRoYXQncyB0cnVlLCB0aGVuIGhvdyB3aWxsIHBhdGNoZXMgc29sdmUgaXQ/DQoN Ci0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBNYXRpYXMgQmrDuHJsaW5nIFttYWls dG86bWJAbGlnaHRudm0uaW9dIA0KU2VudDogVHVlc2RheSwgSnVuZSAxNiwgMjAyMCA1OjM4IEFN DQpUbzogSnVkeSBCcm9jazsgSmF2aWVyIEdvbnrDoWxleg0KQ2M6IEplbnMgQXhib2U7IE5pa2xh cyBDYXNzZWw7IERhbWllbiBMZSBNb2FsOyBBamF5IEpvc2hpOyBTYWdpIEdyaW1iZXJnOyBLZWl0 aCBCdXNjaDsgRG1pdHJ5IEZvbWljaGV2OyBBcmF2aW5kIFJhbWVzaDsgbGludXgtbnZtZUBsaXN0 cy5pbmZyYWRlYWQub3JnOyBsaW51eC1ibG9ja0B2Z2VyLmtlcm5lbC5vcmc7IEhhbnMgSG9sbWJl cmc7IENocmlzdG9waCBIZWxsd2lnOyBNYXRpYXMgQmrDuHJsaW5nDQpTdWJqZWN0OiBSZTogW1BB VENIIDUvNV0gbnZtZTogc3VwcG9ydCBmb3Igem9uZWQgbmFtZXNwYWNlcw0KDQpPbiAxNi8wNi8y MDIwIDE0LjM1LCBKdWR5IEJyb2NrIHdyb3RlOg0KPiAJPj4+IEEgbmFtZXNwYWNlIHRoYXQgZG9l cyBub3Qgc3VwcG9ydCBhcHBlbmQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLg0KPg0K PiBJIGFtIG5vdCB0aGF0IGtub3dsZWRnZWFibGUgYWJvdXQgTGludXgga2VybmVsIGRyaXZlcnMg c28gbWF5YmUgdGhpcyBpcyBhIGR1bWIgcXVlc3Rpb24gYnV0IHdvbid0IHRoZSBkcml2ZXIgaW4g cXVlc3Rpb24gYmUgdGhlIGRlZmF1bHQga2VybmVsIGRyaXZlciBmb3IgWk5TIGRldmljZXM/IElm IHNvLCB3aHkgd291bGQgdGhhdCBkcml2ZXIgZGVsaWJlcmF0ZWx5IHJlamVjdCBhIGRldmljZSB3 aGljaCBpcyAxMDAlIGNvbXBsaWFudCB3aXRoIHRoZSBaTlMgc3BlYz8NCj4gVGhhdCB3b3VsZCBz ZWVtIHRvIGZhdm9yIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyB3aGljaCBzZWVtcyBsaWtlIGFu IGluYXBwcm9wcmlhdGUgdGhpbmcgZm9yIGEgY29tbXVuaXR5IGRyaXZlciB0byBkbyB1bmxlc3Mg dGhlcmUgaXMgYW4gYWN0dWFsIHRlY2huaWNhbCByZWFzb24gdGhlIGRyaXZlciBpcyB1bmFibGUg dG8gZnVuY3Rpb24gdy9vIGFwcGVuZC4gSXMgdGhlcmUgYW55IHN1Y2ggcmVhc29uIGFuZCBpZiBz byB3aGF0IGlzIGl0PyBUaGFua3MgYW5kIHNvcnJ5IGlmIEkndmUgbWlzdW5kZXJzdG9vZC4NCg0K SGkgSnVkeSwNCg0KVGhpcyBoYXMgYmVlbiBzb2x2ZWQuIEphdmllciBoYXMgc2FpZCBoZSB3aWxs IHNlbmQgcGF0Y2hlcyB0aGF0IHN1cHBvcnRzIA0KdGhlIGFib3ZlIHVzZS1jYXNlLiBJdCBpcyBv dXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoc2V0Lg0KDQpCZXN0LCBNYXRpYXMNCg0KPiBK dWR5DQo+DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IGxpbnV4LW52bWUg W21haWx0bzpsaW51eC1udm1lLWJvdW5jZXNAbGlzdHMuaW5mcmFkZWFkLm9yZ10gT24gQmVoYWxm IE9mIEphdmllciBHb256w6FsZXoNCj4gU2VudDogVHVlc2RheSwgSnVuZSAxNiwgMjAyMCA1OjAw IEFNDQo+IFRvOiBNYXRpYXMgQmrDuHJsaW5nDQo+IENjOiBKZW5zIEF4Ym9lOyBOaWtsYXMgQ2Fz c2VsOyBEYW1pZW4gTGUgTW9hbDsgQWpheSBKb3NoaTsgU2FnaSBHcmltYmVyZzsgS2VpdGggQnVz Y2g7IERtaXRyeSBGb21pY2hldjsgQXJhdmluZCBSYW1lc2g7IGxpbnV4LW52bWVAbGlzdHMuaW5m cmFkZWFkLm9yZzsgbGludXgtYmxvY2tAdmdlci5rZXJuZWwub3JnOyBIYW5zIEhvbG1iZXJnOyBD aHJpc3RvcGggSGVsbHdpZzsgTWF0aWFzIEJqw7hybGluZw0KPiBTdWJqZWN0OiBSZTogW1BBVENI IDUvNV0gbnZtZTogc3VwcG9ydCBmb3Igem9uZWQgbmFtZXNwYWNlcw0KPg0KPiBPbiAxNi4wNi4y MDIwIDEzOjE4LCBNYXRpYXMgQmrDuHJsaW5nIHdyb3RlOg0KPj4gT24gMTYvMDYvMjAyMCAxMi40 MSwgSmF2aWVyIEdvbnrDoWxleiB3cm90ZToNCj4+PiBPbiAxNi4wNi4yMDIwIDA4OjM0LCBLZWl0 aCBCdXNjaCB3cm90ZToNCj4+Pj4gQWRkIHN1cHBvcnQgZm9yIE5WTSBFeHByZXNzIFpvbmVkIE5h bWVzcGFjZXMgKFpOUykgQ29tbWFuZCBTZXQgZGVmaW5lZA0KPj4+PiBpbiBOVk0gRXhwcmVzcyBU UDQwNTMuIFpvbmVkIG5hbWVzcGFjZXMgYXJlIGRpc2NvdmVyZWQgYmFzZWQgb24gdGhlaXINCj4+ Pj4gQ29tbWFuZCBTZXQgSWRlbnRpZmllciByZXBvcnRlZCBpbiB0aGUgbmFtZXNwYWNlcyBOYW1l c3BhY2UNCj4+Pj4gSWRlbnRpZmljYXRpb24gRGVzY3JpcHRvciBsaXN0LiBBIHN1Y2Nlc3NmdWxs eSBkaXNjb3ZlcmVkIFpvbmVkDQo+Pj4+IE5hbWVzcGFjZSB3aWxsIGJlIHJlZ2lzdGVyZWQgd2l0 aCB0aGUgYmxvY2sgbGF5ZXIgYXMgYSBob3N0IG1hbmFnZWQNCj4+Pj4gem9uZWQgYmxvY2sgZGV2 aWNlIHdpdGggWm9uZSBBcHBlbmQgY29tbWFuZCBzdXBwb3J0LiBBIG5hbWVzcGFjZSB0aGF0DQo+ Pj4+IGRvZXMgbm90IHN1cHBvcnQgYXBwZW5kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZl ci4NCj4+PiBXaHkgYXJlIHdlIGVuZm9yY2luZyB0aGUgYXBwZW5kIGNvbW1hbmQ/IEFwcGVuZCBp cyBvcHRpb25hbCBvbiB0aGUNCj4+PiBjdXJyZW50IFpOUyBzcGVjaWZpY2F0aW9uLCBzbyB3ZSBz aG91bGQgbm90IG1ha2UgdGhpcyBtYW5kYXRvcnkgaW4gdGhlDQo+Pj4gaW1wbGVtZW50YXRpb24u IFNlZSBzcGVjaWZpY3MgYmVsb3cuDQo+PiBUaGVyZSBpcyBhbHJlYWR5IGdlbmVyYWwgc3VwcG9y dCBpbiB0aGUga2VybmVsIGZvciB0aGUgem9uZSBhcHBlbmQNCj4+IGNvbW1hbmQuIEZlZWwgZnJl ZSB0byBzdWJtaXQgcGF0Y2hlcyB0byBlbXVsYXRlIHRoZSBzdXBwb3J0LiBJdCBpcw0KPj4gb3V0 c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaHNldC4NCj4+DQo+IEl0IGlzIGZpbmUgdGhhdCB0 aGUga2VybmVsIHN1cHBvcnRzIGFwcGVuZCwgYnV0IHRoZSBaTlMgc3BlY2lmaWNhdGlvbg0KPiBk b2VzIG5vdCBpbXBvc2UgdGhlIGltcGxlbWVudGF0aW9uIGZvciBhcHBlbmQsIHNvIHRoZSBkcml2 ZXIgc2hvdWxkIG5vdA0KPiBkbyB0aGF0IGVpdGhlci4NCj4NCj4gWk5TIFNTRHMgdGhhdCBjaG9v c2UgdG8gbGVhdmUgYXBwZW5kIGFzIGEgbm9uLWltcGxlbWVudGVkIG9wdGlvbmFsDQo+IGNvbW1h bmQgc2hvdWxkIG5vdCByZWx5IG9uIGVtdWxhdGVkIFNXIHN1cHBvcnQsIHNwZWNpYWxseSB3aGVu DQo+IHRyYWRpdGlvbmFsIHdyaXRlcyB3b3JrIHZlcnkgZmluZSBmb3IgYSBsYXJnZSBwYXJ0IG9m IGN1cnJlbnQgWk5TIHVzZQ0KPiBjYXNlcy4NCj4NCj4gUGxlYXNlLCByZW1vdmUgdGhpcyB2aXJ0 dWFsIGNvbnN0cmFpbnQuDQo+DQo+Pj4+IFNpZ25lZC1vZmYtYnk6IEhhbnMgSG9sbWJlcmcgPGhh bnMuaG9sbWJlcmdAd2RjLmNvbT4NCj4+Pj4gU2lnbmVkLW9mZi1ieTogRG1pdHJ5IEZvbWljaGV2 IDxkbWl0cnkuZm9taWNoZXZAd2RjLmNvbT4NCj4+Pj4gU2lnbmVkLW9mZi1ieTogQWpheSBKb3No aSA8YWpheS5qb3NoaUB3ZGMuY29tPg0KPj4+PiBTaWduZWQtb2ZmLWJ5OiBBcmF2aW5kIFJhbWVz aCA8YXJhdmluZC5yYW1lc2hAd2RjLmNvbT4NCj4+Pj4gU2lnbmVkLW9mZi1ieTogTmlrbGFzIENh c3NlbCA8bmlrbGFzLmNhc3NlbEB3ZGMuY29tPg0KPj4+PiBTaWduZWQtb2ZmLWJ5OiBNYXRpYXMg QmrDuHJsaW5nIDxtYXRpYXMuYmpvcmxpbmdAd2RjLmNvbT4NCj4+Pj4gU2lnbmVkLW9mZi1ieTog RGFtaWVuIExlIE1vYWwgPGRhbWllbi5sZW1vYWxAd2RjLmNvbT4NCj4+Pj4gU2lnbmVkLW9mZi1i eTogS2VpdGggQnVzY2ggPGtlaXRoLmJ1c2NoQHdkYy5jb20+DQo+Pj4+IC0tLQ0KPj4+PiBkcml2 ZXJzL252bWUvaG9zdC9NYWtlZmlsZSB8wqDCoCAxICsNCj4+Pj4gZHJpdmVycy9udm1lL2hvc3Qv Y29yZS5jwqDCoCB8wqAgOTEgKysrKysrKysrKysrLS0NCj4+Pj4gZHJpdmVycy9udm1lL2hvc3Qv bnZtZS5owqDCoCB8wqAgMzkgKysrKysrDQo+Pj4+IGRyaXZlcnMvbnZtZS9ob3N0L3pucy5jwqDC oMKgIHwgMjM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4+Pj4gaW5j bHVkZS9saW51eC9udm1lLmjCoMKgwqDCoMKgwqAgfCAxMTEgKysrKysrKysrKysrKysrKysNCj4+ Pj4gNSBmaWxlcyBjaGFuZ2VkLCA0NjggaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pDQo+ Pj4+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL252bWUvaG9zdC96bnMuYw0KPj4+Pg0KPj4+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL252bWUv aG9zdC9NYWtlZmlsZQ0KPj4+PiBpbmRleCBmYzdiMjZiZTY5MmQuLmQ3ZjZhODc2ODdiOCAxMDA2 NDQNCj4+Pj4gLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGUNCj4+Pj4gKysrIGIvZHJp dmVycy9udm1lL2hvc3QvTWFrZWZpbGUNCj4+Pj4gQEAgLTEzLDYgKzEzLDcgQEAgbnZtZS1jb3Jl LXnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOj0gY29yZS5vDQo+Pj4+IG52bWUtY29y ZS0kKENPTkZJR19UUkFDSU5HKcKgwqDCoMKgwqDCoMKgICs9IHRyYWNlLm8NCj4+Pj4gbnZtZS1j b3JlLSQoQ09ORklHX05WTUVfTVVMVElQQVRIKcKgwqDCoCArPSBtdWx0aXBhdGgubw0KPj4+PiBu dm1lLWNvcmUtJChDT05GSUdfTlZNKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gbGlnaHRudm0u bw0KPj4+PiArbnZtZS1jb3JlLSQoQ09ORklHX0JMS19ERVZfWk9ORUQpwqDCoMKgICs9IHpucy5v DQo+Pj4+IG52bWUtY29yZS0kKENPTkZJR19GQVVMVF9JTkpFQ1RJT05fREVCVUdfRlMpwqDCoMKg ICs9IGZhdWx0X2luamVjdC5vDQo+Pj4+IG52bWUtY29yZS0kKENPTkZJR19OVk1FX0hXTU9OKcKg wqDCoMKgwqDCoMKgICs9IGh3bW9uLm8NCj4+Pj4NCj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bnZtZS9ob3N0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYw0KPj4+PiBpbmRleCA1 OGYxMzdiOWYyYzUuLmU5NjE5MTBkYTRhYyAxMDA2NDQNCj4+Pj4gLS0tIGEvZHJpdmVycy9udm1l L2hvc3QvY29yZS5jDQo+Pj4+ICsrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYw0KPj4+PiBA QCAtODksNyArODksNyBAQCBzdGF0aWMgZGV2X3QgbnZtZV9jaHJfZGV2dDsNCj4+Pj4gc3RhdGlj IHN0cnVjdCBjbGFzcyAqbnZtZV9jbGFzczsNCj4+Pj4gc3RhdGljIHN0cnVjdCBjbGFzcyAqbnZt ZV9zdWJzeXNfY2xhc3M7DQo+Pj4+DQo+Pj4+IC1zdGF0aWMgaW50IG52bWVfcmV2YWxpZGF0ZV9k aXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsNCj4+Pj4gK3N0YXRpYyBpbnQgX252bWVfcmV2YWxp ZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsNCj4+Pj4gc3RhdGljIHZvaWQgbnZtZV9w dXRfc3Vic3lzdGVtKHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKTsNCj4+Pj4gc3RhdGlj IHZvaWQgbnZtZV9yZW1vdmVfaW52YWxpZF9uYW1lc3BhY2VzKHN0cnVjdCBudm1lX2N0cmwgKmN0 cmwsDQo+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 bnNpZ25lZCBuc2lkKTsNCj4+Pj4gQEAgLTI4Nyw2ICsyODcsMTAgQEAgdm9pZCBudm1lX2NvbXBs ZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEpDQo+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IG52bWVfcmV0cnlfcmVxKHJlcSk7DQo+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy bjsNCj4+Pj4gIMKgwqDCoMKgwqDCoMKgIH0NCj4+Pj4gK8KgwqDCoCB9IGVsc2UgaWYgKElTX0VO QUJMRUQoQ09ORklHX0JMS19ERVZfWk9ORUQpICYmDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXFfb3AocmVxKSA9PSBSRVFfT1BfWk9ORV9BUFBFTkQpIHsNCj4+Pj4gK8KgwqDCoMKgwqDC oMKgIHJlcS0+X19zZWN0b3IgPSBudm1lX2xiYV90b19zZWN0KHJlcS0+cS0+cXVldWVkYXRhLA0K Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZTY0X3RvX2NwdShudm1lX3JlcShyZXEpLT5y ZXN1bHQudTY0KSk7DQo+Pj4+ICDCoMKgwqDCoH0NCj4+Pj4NCj4+Pj4gIMKgwqDCoMKgbnZtZV90 cmFjZV9iaW9fY29tcGxldGUocmVxLCBzdGF0dXMpOw0KPj4+PiBAQCAtNjczLDcgKzY3Nyw4IEBA IHN0YXRpYyBpbmxpbmUgYmxrX3N0YXR1c190DQo+Pj4+IG52bWVfc2V0dXBfd3JpdGVfemVyb2Vz KHN0cnVjdCBudm1lX25zICpucywNCj4+Pj4gfQ0KPj4+Pg0KPj4+PiBzdGF0aWMgaW5saW5lIGJs a19zdGF0dXNfdCBudm1lX3NldHVwX3J3KHN0cnVjdCBudm1lX25zICpucywNCj4+Pj4gLcKgwqDC oMKgwqDCoMKgIHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCBudm1lX2NvbW1hbmQgKmNtbmQp DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgbnZtZV9j b21tYW5kICpjbW5kLA0KPj4+PiArwqDCoMKgwqDCoMKgwqAgZW51bSBudm1lX29wY29kZSBvcCkN Cj4+Pj4gew0KPj4+PiAgwqDCoMKgwqBzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsID0gbnMtPmN0cmw7 DQo+Pj4+ICDCoMKgwqDCoHUxNiBjb250cm9sID0gMDsNCj4+Pj4gQEAgLTY4Nyw3ICs2OTIsNyBA QCBzdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdA0KPj4+PiBudm1lX3NldHVwX3J3KHN0cnVjdCBu dm1lX25zICpucywNCj4+Pj4gIMKgwqDCoMKgaWYgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX1JBSEVB RCkNCj4+Pj4gIMKgwqDCoMKgwqDCoMKgIGRzbWdtdCB8PSBOVk1FX1JXX0RTTV9GUkVRX1BSRUZF VENIOw0KPj4+Pg0KPj4+PiAtwqDCoMKgIGNtbmQtPnJ3Lm9wY29kZSA9IChycV9kYXRhX2Rpcihy ZXEpID8gbnZtZV9jbWRfd3JpdGUgOg0KPj4+PiBudm1lX2NtZF9yZWFkKTsNCj4+Pj4gK8KgwqDC oCBjbW5kLT5ydy5vcGNvZGUgPSBvcDsNCj4+Pj4gIMKgwqDCoMKgY21uZC0+cncubnNpZCA9IGNw dV90b19sZTMyKG5zLT5oZWFkLT5uc19pZCk7DQo+Pj4+ICDCoMKgwqDCoGNtbmQtPnJ3LnNsYmEg PSBjcHVfdG9fbGU2NChudm1lX3NlY3RfdG9fbGJhKG5zLCBibGtfcnFfcG9zKHJlcSkpKTsNCj4+ Pj4gIMKgwqDCoMKgY21uZC0+cncubGVuZ3RoID0gY3B1X3RvX2xlMTYoKGJsa19ycV9ieXRlcyhy ZXEpID4+DQo+Pj4+IG5zLT5sYmFfc2hpZnQpIC0gMSk7DQo+Pj4+IEBAIC03MTYsNiArNzIxLDgg QEAgc3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QNCj4+Pj4gbnZtZV9zZXR1cF9ydyhzdHJ1Y3Qg bnZtZV9ucyAqbnMsDQo+Pj4+ICDCoMKgwqDCoMKgwqDCoCBjYXNlIE5WTUVfTlNfRFBTX1BJX1RZ UEUyOg0KPj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250cm9sIHw9IE5WTUVfUldfUFJJ TkZPX1BSQ0hLX0dVQVJEIHwNCj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIE5WTUVfUldfUFJJTkZPX1BSQ0hLX1JFRjsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKG9wID09IG52bWVfY21kX3pvbmVfYXBwZW5kKQ0KPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRyb2wgfD0gTlZNRV9SV19BUFBFTkRfUElSRU1BUDsNCj4+ Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY21uZC0+cncucmVmdGFnID0gY3B1X3RvX2xlMzIo dDEwX3BpX3JlZl90YWcocmVxKSk7DQo+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFr Ow0KPj4+PiAgwqDCoMKgwqDCoMKgwqAgfQ0KPj4+PiBAQCAtNzU2LDYgKzc2MywxOSBAQCBibGtf c3RhdHVzX3QgbnZtZV9zZXR1cF9jbWQoc3RydWN0IG52bWVfbnMNCj4+Pj4gKm5zLCBzdHJ1Y3Qg cmVxdWVzdCAqcmVxLA0KPj4+PiAgwqDCoMKgwqBjYXNlIFJFUV9PUF9GTFVTSDoNCj4+Pj4gIMKg wqDCoMKgwqDCoMKgIG52bWVfc2V0dXBfZmx1c2gobnMsIGNtZCk7DQo+Pj4+ICDCoMKgwqDCoMKg wqDCoCBicmVhazsNCj4+Pj4gK8KgwqDCoCBjYXNlIFJFUV9PUF9aT05FX1JFU0VUX0FMTDoNCj4+ Pj4gK8KgwqDCoCBjYXNlIFJFUV9PUF9aT05FX1JFU0VUOg0KPj4+PiArwqDCoMKgwqDCoMKgwqAg cmV0ID0gbnZtZV9zZXR1cF96b25lX21nbXRfc2VuZChucywgcmVxLCBjbWQsIE5WTUVfWk9ORV9S RVNFVCk7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4+Pj4gK8KgwqDCoCBjYXNlIFJF UV9PUF9aT05FX09QRU46DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBudm1lX3NldHVwX3pv bmVfbWdtdF9zZW5kKG5zLCByZXEsIGNtZCwgTlZNRV9aT05FX09QRU4pOw0KPj4+PiArwqDCoMKg wqDCoMKgwqAgYnJlYWs7DQo+Pj4+ICvCoMKgwqAgY2FzZSBSRVFfT1BfWk9ORV9DTE9TRToNCj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IG52bWVfc2V0dXBfem9uZV9tZ210X3NlbmQobnMsIHJl cSwgY21kLCBOVk1FX1pPTkVfQ0xPU0UpOw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+ Pj4+ICvCoMKgwqAgY2FzZSBSRVFfT1BfWk9ORV9GSU5JU0g6DQo+Pj4+ICvCoMKgwqDCoMKgwqDC oCByZXQgPSBudm1lX3NldHVwX3pvbmVfbWdtdF9zZW5kKG5zLCByZXEsIGNtZCwNCj4+Pj4gTlZN RV9aT05FX0ZJTklTSCk7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4+Pj4gIMKgwqDC oMKgY2FzZSBSRVFfT1BfV1JJVEVfWkVST0VTOg0KPj4+PiAgwqDCoMKgwqDCoMKgwqAgcmV0ID0g bnZtZV9zZXR1cF93cml0ZV96ZXJvZXMobnMsIHJlcSwgY21kKTsNCj4+Pj4gIMKgwqDCoMKgwqDC oMKgIGJyZWFrOw0KPj4+PiBAQCAtNzYzLDggKzc4MywxMyBAQCBibGtfc3RhdHVzX3QgbnZtZV9z ZXR1cF9jbWQoc3RydWN0IG52bWVfbnMNCj4+Pj4gKm5zLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLA0K Pj4+PiAgwqDCoMKgwqDCoMKgwqAgcmV0ID0gbnZtZV9zZXR1cF9kaXNjYXJkKG5zLCByZXEsIGNt ZCk7DQo+Pj4+ICDCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4+Pj4gIMKgwqDCoMKgY2FzZSBSRVFf T1BfUkVBRDoNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IG52bWVfc2V0dXBfcncobnMsIHJl cSwgY21kLCBudm1lX2NtZF9yZWFkKTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPj4+ PiAgwqDCoMKgwqBjYXNlIFJFUV9PUF9XUklURToNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldCA9 IG52bWVfc2V0dXBfcncobnMsIHJlcSwgY21kKTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9 IG52bWVfc2V0dXBfcncobnMsIHJlcSwgY21kLCBudm1lX2NtZF93cml0ZSk7DQo+Pj4+ICvCoMKg wqDCoMKgwqDCoCBicmVhazsNCj4+Pj4gK8KgwqDCoCBjYXNlIFJFUV9PUF9aT05FX0FQUEVORDoN Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IG52bWVfc2V0dXBfcncobnMsIHJlcSwgY21kLCBu dm1lX2NtZF96b25lX2FwcGVuZCk7DQo+Pj4+ICDCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4+Pj4g IMKgwqDCoMKgZGVmYXVsdDoNCj4+Pj4gIMKgwqDCoMKgwqDCoMKgIFdBUk5fT05fT05DRSgxKTsN Cj4+Pj4gQEAgLTEzOTIsMTQgKzE0MTcsMjMgQEAgc3RhdGljIHUzMiBudm1lX3Bhc3N0aHJ1X3N0 YXJ0KHN0cnVjdA0KPj4+PiBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucywNCj4+ Pj4gIMKgwqDCoMKgcmV0dXJuIGVmZmVjdHM7DQo+Pj4+IH0NCj4+Pj4NCj4+Pj4gLXN0YXRpYyB2 b2lkIG52bWVfdXBkYXRlX2Zvcm1hdHMoc3RydWN0IG52bWVfY3RybCAqY3RybCkNCj4+Pj4gK3N0 YXRpYyB2b2lkIG52bWVfdXBkYXRlX2Zvcm1hdHMoc3RydWN0IG52bWVfY3RybCAqY3RybCwgdTMy ICplZmZlY3RzKQ0KPj4+PiB7DQo+Pj4+ICDCoMKgwqDCoHN0cnVjdCBudm1lX25zICpuczsNCj4+ Pj4NCj4+Pj4gIMKgwqDCoMKgZG93bl9yZWFkKCZjdHJsLT5uYW1lc3BhY2VzX3J3c2VtKTsNCj4+ Pj4gIMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRyeShucywgJmN0cmwtPm5hbWVzcGFjZXMsIGxp c3QpDQo+Pj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAobnMtPmRpc2sgJiYgbnZtZV9yZXZhbGlkYXRl X2Rpc2sobnMtPmRpc2spKQ0KPj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKG5zLT5kaXNrICYmIF9u dm1lX3JldmFsaWRhdGVfZGlzayhucy0+ZGlzaykpDQo+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG52bWVfc2V0X3F1ZXVlX2R5aW5nKG5zKTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGVsc2Ug aWYgKGJsa19xdWV1ZV9pc196b25lZChucy0+ZGlzay0+cXVldWUpKSB7DQo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIC8qDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBJTyBj b21tYW5kcyBhcmUgcmVxdWlyZWQgdG8gZnVsbHkgcmV2YWxpZGF0ZSBhIHpvbmVkDQo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBkZXZpY2UuIEZvcmNlIHRoZSBjb21tYW5kIGVmZmVj dHMgdG8gdHJpZ2dlciByZXNjYW4NCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHdv cmsgc28gcmVwb3J0IHpvbmVzIGNhbiBydW4gaW4gYSBjb250ZXh0IHdpdGgNCj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqIHVuZnJvemVuIElPIHF1ZXVlcy4NCj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqLw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqZWZmZWN0 cyB8PSBOVk1FX0NNRF9FRkZFQ1RTX05DQzsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4+Pj4g IMKgwqDCoMKgdXBfcmVhZCgmY3RybC0+bmFtZXNwYWNlc19yd3NlbSk7DQo+Pj4+IH0NCj4+Pj4N Cj4+Pj4gQEAgLTE0MTEsNyArMTQ0NSw3IEBAIHN0YXRpYyB2b2lkIG52bWVfcGFzc3RocnVfZW5k KHN0cnVjdA0KPj4+PiBudm1lX2N0cmwgKmN0cmwsIHUzMiBlZmZlY3RzKQ0KPj4+PiAgwqDCoMKg wqAgKiB0aGlzIGNvbW1hbmQuDQo+Pj4+ICDCoMKgwqDCoCAqLw0KPj4+PiAgwqDCoMKgwqBpZiAo ZWZmZWN0cyAmIE5WTUVfQ01EX0VGRkVDVFNfTEJDQykNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgIG52 bWVfdXBkYXRlX2Zvcm1hdHMoY3RybCk7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBudm1lX3VwZGF0 ZV9mb3JtYXRzKGN0cmwsICZlZmZlY3RzKTsNCj4+Pj4gIMKgwqDCoMKgaWYgKGVmZmVjdHMgJiAo TlZNRV9DTURfRUZGRUNUU19MQkNDIHwgTlZNRV9DTURfRUZGRUNUU19DU0VfTUFTSykpIHsNCj4+ Pj4gIMKgwqDCoMKgwqDCoMKgIG52bWVfdW5mcmVlemUoY3RybCk7DQo+Pj4+ICDCoMKgwqDCoMKg wqDCoCBudm1lX21wYXRoX3VuZnJlZXplKGN0cmwtPnN1YnN5cyk7DQo+Pj4+IEBAIC0xNTI2LDcg KzE1NjAsNyBAQCBzdGF0aWMgaW50IG52bWVfdXNlcl9jbWQ2NChzdHJ1Y3QgbnZtZV9jdHJsDQo+ Pj4+ICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsDQo+Pj4+ICDCoCogSXNzdWUgaW9jdGwgcmVx dWVzdHMgb24gdGhlIGZpcnN0IGF2YWlsYWJsZSBwYXRoLsKgIE5vdGUgdGhhdA0KPj4+PiB1bmxp a2Ugbm9ybWFsDQo+Pj4+ICDCoCogYmxvY2sgbGF5ZXIgcmVxdWVzdHMgd2Ugd2lsbCBub3QgcmV0 cnkgZmFpbGVkIHJlcXVlc3Qgb24NCj4+Pj4gYW5vdGhlciBjb250cm9sbGVyLg0KPj4+PiAgwqAq Lw0KPj4+PiAtc3RhdGljIHN0cnVjdCBudm1lX25zICpudm1lX2dldF9uc19mcm9tX2Rpc2soc3Ry dWN0IGdlbmRpc2sgKmRpc2ssDQo+Pj4+ICtzdHJ1Y3QgbnZtZV9ucyAqbnZtZV9nZXRfbnNfZnJv bV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrLA0KPj4+PiAgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IG52bWVfbnNfaGVhZCAqKmhlYWQsIGludCAqc3JjdV9pZHgpDQo+Pj4+IHsNCj4+Pj4gI2lmZGVm IENPTkZJR19OVk1FX01VTFRJUEFUSA0KPj4+PiBAQCAtMTU0Niw3ICsxNTgwLDcgQEAgc3RhdGlj IHN0cnVjdCBudm1lX25zDQo+Pj4+ICpudm1lX2dldF9uc19mcm9tX2Rpc2soc3RydWN0IGdlbmRp c2sgKmRpc2ssDQo+Pj4+ICDCoMKgwqDCoHJldHVybiBkaXNrLT5wcml2YXRlX2RhdGE7DQo+Pj4+ IH0NCj4+Pj4NCj4+Pj4gLXN0YXRpYyB2b2lkIG52bWVfcHV0X25zX2Zyb21fZGlzayhzdHJ1Y3Qg bnZtZV9uc19oZWFkICpoZWFkLCBpbnQgaWR4KQ0KPj4+PiArdm9pZCBudm1lX3B1dF9uc19mcm9t X2Rpc2soc3RydWN0IG52bWVfbnNfaGVhZCAqaGVhZCwgaW50IGlkeCkNCj4+Pj4gew0KPj4+PiAg wqDCoMKgwqBpZiAoaGVhZCkNCj4+Pj4gIMKgwqDCoMKgwqDCoMKgIHNyY3VfcmVhZF91bmxvY2so JmhlYWQtPnNyY3UsIGlkeCk7DQo+Pj4+IEBAIC0xOTM5LDIxICsxOTczLDI4IEBAIHN0YXRpYyB2 b2lkIG52bWVfdXBkYXRlX2Rpc2tfaW5mbyhzdHJ1Y3QNCj4+Pj4gZ2VuZGlzayAqZGlzaywNCj4+ Pj4NCj4+Pj4gc3RhdGljIGludCBfX252bWVfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNr ICpkaXNrLCBzdHJ1Y3QNCj4+Pj4gbnZtZV9pZF9ucyAqaWQpDQo+Pj4+IHsNCj4+Pj4gK8KgwqDC oCB1bnNpZ25lZCBsYmFmID0gaWQtPmZsYmFzICYgTlZNRV9OU19GTEJBU19MQkFfTUFTSzsNCj4+ Pj4gIMKgwqDCoMKgc3RydWN0IG52bWVfbnMgKm5zID0gZGlzay0+cHJpdmF0ZV9kYXRhOw0KPj4+ PiAgwqDCoMKgwqBzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsID0gbnMtPmN0cmw7DQo+Pj4+ICvCoMKg wqAgaW50IHJldDsNCj4+Pj4gIMKgwqDCoMKgdTMyIGlvYjsNCj4+Pj4NCj4+Pj4gIMKgwqDCoMKg LyoNCj4+Pj4gIMKgwqDCoMKgICogSWYgaWRlbnRpZnkgbmFtZXNwYWNlIGZhaWxlZCwgdXNlIGRl ZmF1bHQgNTEyIGJ5dGUgYmxvY2sgc2l6ZSBzbw0KPj4+PiAgwqDCoMKgwqAgKiBibG9jayBsYXll ciBjYW4gdXNlIGJlZm9yZSBmYWlsaW5nIHJlYWQvd3JpdGUgZm9yIDAgY2FwYWNpdHkuDQo+Pj4+ ICDCoMKgwqDCoCAqLw0KPj4+PiAtwqDCoMKgIG5zLT5sYmFfc2hpZnQgPSBpZC0+bGJhZltpZC0+ ZmxiYXMgJiBOVk1FX05TX0ZMQkFTX0xCQV9NQVNLXS5kczsNCj4+Pj4gK8KgwqDCoCBucy0+bGJh X3NoaWZ0ID0gaWQtPmxiYWZbbGJhZl0uZHM7DQo+Pj4+ICDCoMKgwqDCoGlmIChucy0+bGJhX3No aWZ0ID09IDApDQo+Pj4+ICDCoMKgwqDCoMKgwqDCoCBucy0+bGJhX3NoaWZ0ID0gOTsNCj4+Pj4N Cj4+Pj4gIMKgwqDCoMKgc3dpdGNoIChucy0+aGVhZC0+aWRzLmNzaSkgew0KPj4+PiAgwqDCoMKg wqBjYXNlIE5WTUVfQ1NJX05WTToNCj4+Pj4gIMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPj4+PiAr wqDCoMKgIGNhc2UgTlZNRV9DU0lfWk5TOg0KPj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gbnZt ZV91cGRhdGVfem9uZV9pbmZvKGRpc2ssIG5zLCBsYmFmKTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKg IGlmIChyZXQpDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7DQo+Pj4+ ICvCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4+Pj4gIMKgwqDCoMKgZGVmYXVsdDoNCj4+Pj4gIMKg wqDCoMKgwqDCoMKgIGRldl93YXJuKGN0cmwtPmRldmljZSwgInVua25vd24gY3NpOiVkIG5zOiVk XG4iLA0KPj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBucy0+aGVhZC0+aWRzLmNzaSwgbnMt PmhlYWQtPm5zX2lkKTsNCj4+Pj4gQEAgLTE5NjcsNyArMjAwOCw3IEBAIHN0YXRpYyBpbnQgX19u dm1lX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QNCj4+Pj4gZ2VuZGlzayAqZGlzaywgc3RydWN0IG52 bWVfaWRfbnMgKmlkKQ0KPj4+PiAgwqDCoMKgwqDCoMKgwqAgaW9iID0gbnZtZV9sYmFfdG9fc2Vj dChucywgbGUxNl90b19jcHUoaWQtPm5vaW9iKSk7DQo+Pj4+DQo+Pj4+ICDCoMKgwqDCoG5zLT5m ZWF0dXJlcyA9IDA7DQo+Pj4+IC3CoMKgwqAgbnMtPm1zID0gbGUxNl90b19jcHUoaWQtPmxiYWZb aWQtPmZsYmFzICYNCj4+Pj4gTlZNRV9OU19GTEJBU19MQkFfTUFTS10ubXMpOw0KPj4+PiArwqDC oMKgIG5zLT5tcyA9IGxlMTZfdG9fY3B1KGlkLT5sYmFmW2xiYWZdLm1zKTsNCj4+Pj4gIMKgwqDC oMKgLyogdGhlIFBJIGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIG1ldGFkYXRhIGVxdWFsIHQxMCBw aSB0dXBsZQ0KPj4+PiBzaXplICovDQo+Pj4+ICDCoMKgwqDCoGlmIChucy0+bXMgPT0gc2l6ZW9m KHN0cnVjdCB0MTBfcGlfdHVwbGUpKQ0KPj4+PiAgwqDCoMKgwqDCoMKgwqAgbnMtPnBpX3R5cGUg PSBpZC0+ZHBzICYgTlZNRV9OU19EUFNfUElfTUFTSzsNCj4+Pj4gQEAgLTIwMTAsNyArMjA1MSw3 IEBAIHN0YXRpYyBpbnQgX19udm1lX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QNCj4+Pj4gZ2VuZGlz ayAqZGlzaywgc3RydWN0IG52bWVfaWRfbnMgKmlkKQ0KPj4+PiAgwqDCoMKgwqByZXR1cm4gMDsN Cj4+Pj4gfQ0KPj4+Pg0KPj4+PiAtc3RhdGljIGludCBudm1lX3JldmFsaWRhdGVfZGlzayhzdHJ1 Y3QgZ2VuZGlzayAqZGlzaykNCj4+Pj4gK3N0YXRpYyBpbnQgX252bWVfcmV2YWxpZGF0ZV9kaXNr KHN0cnVjdCBnZW5kaXNrICpkaXNrKQ0KPj4+PiB7DQo+Pj4+ICDCoMKgwqDCoHN0cnVjdCBudm1l X25zICpucyA9IGRpc2stPnByaXZhdGVfZGF0YTsNCj4+Pj4gIMKgwqDCoMKgc3RydWN0IG52bWVf Y3RybCAqY3RybCA9IG5zLT5jdHJsOw0KPj4+PiBAQCAtMjA1OCw2ICsyMDk5LDI4IEBAIHN0YXRp YyBpbnQgbnZtZV9yZXZhbGlkYXRlX2Rpc2soc3RydWN0DQo+Pj4+IGdlbmRpc2sgKmRpc2spDQo+ Pj4+ICDCoMKgwqDCoHJldHVybiByZXQ7DQo+Pj4+IH0NCj4+Pj4NCj4+Pj4gK3N0YXRpYyBpbnQg bnZtZV9yZXZhbGlkYXRlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spDQo+Pj4+ICt7DQo+Pj4+ ICvCoMKgwqAgaW50IHJldDsNCj4+Pj4gKw0KPj4+PiArwqDCoMKgIHJldCA9IF9udm1lX3JldmFs aWRhdGVfZGlzayhkaXNrKTsNCj4+Pj4gK8KgwqDCoCBpZiAocmV0KQ0KPj4+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIHJldDsNCj4+Pj4gKw0KPj4+PiArI2lmZGVmIENPTkZJR19CTEtfREVWX1pP TkVEDQo+Pj4+ICvCoMKgwqAgaWYgKGJsa19xdWV1ZV9pc196b25lZChkaXNrLT5xdWV1ZSkpIHsN Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBudm1lX25zICpucyA9IGRpc2stPnByaXZhdGVf ZGF0YTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBudm1lX2N0cmwgKmN0cmwgPSBucy0+ Y3RybDsNCj4+Pj4gKw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gYmxrX3JldmFsaWRhdGVf ZGlza196b25lcyhkaXNrLCBOVUxMKTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghcmV0KQ0K Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBibGtfcXVldWVfbWF4X3pvbmVfYXBwZW5kX3Nl Y3RvcnMoZGlzay0+cXVldWUsDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0cmwtPm1heF96b25lX2FwcGVuZCk7DQo+Pj4+ ICvCoMKgwqAgfQ0KPj4+PiArI2VuZGlmDQo+Pj4+ICvCoMKgwqAgcmV0dXJuIHJldDsNCj4+Pj4g K30NCj4+Pj4gKw0KPj4+PiBzdGF0aWMgY2hhciBudm1lX3ByX3R5cGUoZW51bSBwcl90eXBlIHR5 cGUpDQo+Pj4+IHsNCj4+Pj4gIMKgwqDCoMKgc3dpdGNoICh0eXBlKSB7DQo+Pj4+IEBAIC0yMTg4 LDYgKzIyNTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25z DQo+Pj4+IG52bWVfZm9wcyA9IHsNCj4+Pj4gIMKgwqDCoMKgLnJlbGVhc2XCoMKgwqAgPSBudm1l X3JlbGVhc2UsDQo+Pj4+ICDCoMKgwqDCoC5nZXRnZW/CoMKgwqDCoMKgwqDCoCA9IG52bWVfZ2V0 Z2VvLA0KPj4+PiAgwqDCoMKgwqAucmV2YWxpZGF0ZV9kaXNrPSBudm1lX3JldmFsaWRhdGVfZGlz aywNCj4+Pj4gK8KgwqDCoCAucmVwb3J0X3pvbmVzwqDCoMKgID0gbnZtZV9yZXBvcnRfem9uZXMs DQo+Pj4+ICDCoMKgwqDCoC5wcl9vcHPCoMKgwqDCoMKgwqDCoCA9ICZudm1lX3ByX29wcywNCj4+ Pj4gfTsNCj4+Pj4NCj4+Pj4gQEAgLTIyMTMsNiArMjI3Nyw3IEBAIGNvbnN0IHN0cnVjdCBibG9j a19kZXZpY2Vfb3BlcmF0aW9ucw0KPj4+PiBudm1lX25zX2hlYWRfb3BzID0gew0KPj4+PiAgwqDC oMKgwqAuaW9jdGzCoMKgwqDCoMKgwqDCoCA9IG52bWVfaW9jdGwsDQo+Pj4+ICDCoMKgwqDCoC5j b21wYXRfaW9jdGzCoMKgwqAgPSBudm1lX2NvbXBhdF9pb2N0bCwNCj4+Pj4gIMKgwqDCoMKgLmdl dGdlb8KgwqDCoMKgwqDCoMKgID0gbnZtZV9nZXRnZW8sDQo+Pj4+ICvCoMKgwqAgLnJlcG9ydF96 b25lc8KgwqDCoCA9IG52bWVfcmVwb3J0X3pvbmVzLA0KPj4+PiAgwqDCoMKgwqAucHJfb3BzwqDC oMKgwqDCoMKgwqAgPSAmbnZtZV9wcl9vcHMsDQo+Pj4+IH07DQo+Pj4+ICNlbmRpZiAvKiBDT05G SUdfTlZNRV9NVUxUSVBBVEggKi8NCj4+Pj4gQEAgLTQ0MzksNiArNDUwNCw4IEBAIHN0YXRpYyBp bmxpbmUgdm9pZCBfbnZtZV9jaGVja19zaXplKHZvaWQpDQo+Pj4+ICDCoMKgwqDCoEJVSUxEX0JV R19PTihzaXplb2Yoc3RydWN0IG52bWVfY29tbWFuZCkgIT0gNjQpOw0KPj4+PiAgwqDCoMKgwqBC VUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBudm1lX2lkX2N0cmwpICE9DQo+Pj4+IE5WTUVfSURF TlRJRllfREFUQV9TSVpFKTsNCj4+Pj4gIMKgwqDCoMKgQlVJTERfQlVHX09OKHNpemVvZihzdHJ1 Y3QgbnZtZV9pZF9ucykgIT0gTlZNRV9JREVOVElGWV9EQVRBX1NJWkUpOw0KPj4+PiArwqDCoMKg IEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG52bWVfaWRfbnNfem5zKSAhPQ0KPj4+PiBOVk1F X0lERU5USUZZX0RBVEFfU0laRSk7DQo+Pj4+ICvCoMKgwqAgQlVJTERfQlVHX09OKHNpemVvZihz dHJ1Y3QgbnZtZV9pZF9jdHJsX3pucykgIT0NCj4+Pj4gTlZNRV9JREVOVElGWV9EQVRBX1NJWkUp Ow0KPj4+PiAgwqDCoMKgwqBCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBudm1lX2xiYV9yYW5n ZV90eXBlKSAhPSA2NCk7DQo+Pj4+ICDCoMKgwqDCoEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0 IG52bWVfc21hcnRfbG9nKSAhPSA1MTIpOw0KPj4+PiAgwqDCoMKgwqBCVUlMRF9CVUdfT04oc2l6 ZW9mKHN0cnVjdCBudm1lX2RiYnVmKSAhPSA2NCk7DQo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L252bWUvaG9zdC9udm1lLmggYi9kcml2ZXJzL252bWUvaG9zdC9udm1lLmgNCj4+Pj4gaW5kZXgg NTg0MjhlM2E1OTBlLi42NjJmOTVmYmQ5MDkgMTAwNjQ0DQo+Pj4+IC0tLSBhL2RyaXZlcnMvbnZt ZS9ob3N0L252bWUuaA0KPj4+PiArKysgYi9kcml2ZXJzL252bWUvaG9zdC9udm1lLmgNCj4+Pj4g QEAgLTIzOSw2ICsyMzksOSBAQCBzdHJ1Y3QgbnZtZV9jdHJsIHsNCj4+Pj4gIMKgwqDCoMKgdTMy IG1heF9od19zZWN0b3JzOw0KPj4+PiAgwqDCoMKgwqB1MzIgbWF4X3NlZ21lbnRzOw0KPj4+PiAg wqDCoMKgwqB1MzIgbWF4X2ludGVncml0eV9zZWdtZW50czsNCj4+Pj4gKyNpZmRlZiBDT05GSUdf QkxLX0RFVl9aT05FRA0KPj4+PiArwqDCoMKgIHUzMiBtYXhfem9uZV9hcHBlbmQ7DQo+Pj4+ICsj ZW5kaWYNCj4+Pj4gIMKgwqDCoMKgdTE2IGNyZHRbM107DQo+Pj4+ICDCoMKgwqDCoHUxNiBvbmNz Ow0KPj4+PiAgwqDCoMKgwqB1MTYgb2FjczsNCj4+Pj4gQEAgLTQwMyw2ICs0MDYsOSBAQCBzdHJ1 Y3QgbnZtZV9ucyB7DQo+Pj4+ICDCoMKgwqDCoHUxNiBzZ3M7DQo+Pj4+ICDCoMKgwqDCoHUzMiBz d3M7DQo+Pj4+ICDCoMKgwqDCoHU4IHBpX3R5cGU7DQo+Pj4+ICsjaWZkZWYgQ09ORklHX0JMS19E RVZfWk9ORUQNCj4+Pj4gK8KgwqDCoCB1NjQgenN6ZTsNCj4+Pj4gKyNlbmRpZg0KPj4+PiAgwqDC oMKgwqB1bnNpZ25lZCBsb25nIGZlYXR1cmVzOw0KPj4+PiAgwqDCoMKgwqB1bnNpZ25lZCBsb25n IGZsYWdzOw0KPj4+PiAjZGVmaW5lIE5WTUVfTlNfUkVNT1ZJTkfCoMKgwqAgMA0KPj4+PiBAQCAt NTY4LDYgKzU3NCw5IEBAIGludCBudm1lX2RlbGV0ZV9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0 cmwpOw0KPj4+Pg0KPj4+PiBpbnQgbnZtZV9nZXRfbG9nKHN0cnVjdCBudm1lX2N0cmwgKmN0cmws IHUzMiBuc2lkLCB1OCBsb2dfcGFnZSwgdTgNCj4+Pj4gbHNwLCB1OCBjc2ksDQo+Pj4+ICDCoMKg wqDCoMKgwqDCoCB2b2lkICpsb2csIHNpemVfdCBzaXplLCB1NjQgb2Zmc2V0KTsNCj4+Pj4gK3N0 cnVjdCBudm1lX25zICpudm1lX2dldF9uc19mcm9tX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2ss DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbnZtZV9uc19oZWFkICoqaGVhZCwgaW50ICpz cmN1X2lkeCk7DQo+Pj4+ICt2b2lkIG52bWVfcHV0X25zX2Zyb21fZGlzayhzdHJ1Y3QgbnZtZV9u c19oZWFkICpoZWFkLCBpbnQgaWR4KTsNCj4+Pj4NCj4+Pj4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBh dHRyaWJ1dGVfZ3JvdXAgKm52bWVfbnNfaWRfYXR0cl9ncm91cHNbXTsNCj4+Pj4gZXh0ZXJuIGNv bnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBudm1lX25zX2hlYWRfb3BzOw0KPj4+ PiBAQCAtNjg5LDYgKzY5OCwzNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQNCj4+Pj4gbnZtZV9tcGF0 aF9zdGFydF9mcmVlemUoc3RydWN0IG52bWVfc3Vic3lzdGVtICpzdWJzeXMpDQo+Pj4+IH0NCj4+ Pj4gI2VuZGlmIC8qIENPTkZJR19OVk1FX01VTFRJUEFUSCAqLw0KPj4+Pg0KPj4+PiArI2lmZGVm IENPTkZJR19CTEtfREVWX1pPTkVEDQo+Pj4+ICtpbnQgbnZtZV91cGRhdGVfem9uZV9pbmZvKHN0 cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsDQo+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsYmFmKTsNCj4+Pj4gKw0KPj4+PiAraW50IG52bWVf cmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsDQo+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgbnJfem9uZXMsIHJlcG9y dF96b25lc19jYiBjYiwgdm9pZCAqZGF0YSk7DQo+Pj4+ICsNCj4+Pj4gK2Jsa19zdGF0dXNfdCBu dm1lX3NldHVwX3pvbmVfbWdtdF9zZW5kKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0DQo+Pj4+ IHJlcXVlc3QgKnJlcSwNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBudm1lX2NvbW1hbmQgKmNtbmQsDQo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIG52bWVfem9uZV9tZ210X2FjdGlv biBhY3Rpb24pOw0KPj4+PiArI2Vsc2UNCj4+Pj4gKyNkZWZpbmUgbnZtZV9yZXBvcnRfem9uZXMg TlVMTA0KPj4+PiArDQo+Pj4+ICtzdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBudm1lX3NldHVw X3pvbmVfbWdtdF9zZW5kKHN0cnVjdA0KPj4+PiBudm1lX25zICpucywNCj4+Pj4gK8KgwqDCoMKg wqDCoMKgIHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCBudm1lX2NvbW1hbmQgKmNtbmQsDQo+ Pj4+ICvCoMKgwqDCoMKgwqDCoCBlbnVtIG52bWVfem9uZV9tZ210X2FjdGlvbiBhY3Rpb24pDQo+ Pj4+ICt7DQo+Pj4+ICvCoMKgwqAgcmV0dXJuIEJMS19TVFNfTk9UU1VQUDsNCj4+Pj4gK30NCj4+ Pj4gKw0KPj4+PiArc3RhdGljIGlubGluZSBpbnQgbnZtZV91cGRhdGVfem9uZV9pbmZvKHN0cnVj dCBnZW5kaXNrICpkaXNrLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IG52bWVfbnMgKm5zLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbGJhZikNCj4+Pj4gK3sNCj4+Pj4gK8KgwqDCoCBkZXZf d2Fybihucy0+Y3RybC0+ZGV2aWNlLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoCAiUGxlYXNlIGVu YWJsZSBDT05GSUdfQkxLX0RFVl9aT05FRCB0byBzdXBwb3J0IFpOUw0KPj4+PiBkZXZpY2VzXG4i KTsNCj4+Pj4gK8KgwqDCoCByZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsNCj4+Pj4gK30NCj4+Pj4g KyNlbmRpZg0KPj4+PiArDQo+Pj4+ICNpZmRlZiBDT05GSUdfTlZNDQo+Pj4+IGludCBudm1lX252 bV9yZWdpc3RlcihzdHJ1Y3QgbnZtZV9ucyAqbnMsIGNoYXIgKmRpc2tfbmFtZSwgaW50IG5vZGUp Ow0KPj4+PiB2b2lkIG52bWVfbnZtX3VucmVnaXN0ZXIoc3RydWN0IG52bWVfbnMgKm5zKTsNCj4+ Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3pucy5jIGIvZHJpdmVycy9udm1lL2hv c3Qvem5zLmMNCj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+Pj4gaW5kZXggMDAwMDAwMDAw MDAwLi5jMDhmNjI4MWI2MTQNCj4+Pj4gLS0tIC9kZXYvbnVsbA0KPj4+PiArKysgYi9kcml2ZXJz L252bWUvaG9zdC96bnMuYw0KPj4+PiBAQCAtMCwwICsxLDIzOCBAQA0KPj4+PiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4+Pj4gKy8qDQo+Pj4+ICsgKiBDb3B5cmlnaHQg KEMpIDIwMjAgV2VzdGVybiBEaWdpdGFsIENvcnBvcmF0aW9uIG9yIGl0cyBhZmZpbGlhdGVzLg0K Pj4+PiArICovDQo+Pj4+ICsNCj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4NCj4+Pj4g KyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+DQo+Pj4+ICsjaW5jbHVkZSAibnZtZS5oIg0KPj4+ PiArDQo+Pj4+ICtzdGF0aWMgaW50IG52bWVfc2V0X21heF9hcHBlbmQoc3RydWN0IG52bWVfY3Ry bCAqY3RybCkNCj4+Pj4gK3sNCj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgbnZtZV9jb21tYW5kIGMgPSB7 IH07DQo+Pj4+ICvCoMKgwqAgc3RydWN0IG52bWVfaWRfY3RybF96bnMgKmlkOw0KPj4+PiArwqDC oMKgIGludCBzdGF0dXM7DQo+Pj4+ICsNCj4+Pj4gK8KgwqDCoCBpZCA9IGt6YWxsb2Moc2l6ZW9m KCppZCksIEdGUF9LRVJORUwpOw0KPj4+PiArwqDCoMKgIGlmICghaWQpDQo+Pj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gLUVOT01FTTsNCj4+Pj4gKw0KPj4+PiArwqDCoMKgIGMuaWRlbnRpZnku b3Bjb2RlID0gbnZtZV9hZG1pbl9pZGVudGlmeTsNCj4+Pj4gK8KgwqDCoCBjLmlkZW50aWZ5LmNu cyA9IE5WTUVfSURfQ05TX0NTX0NUUkw7DQo+Pj4+ICvCoMKgwqAgYy5pZGVudGlmeS5jc2kgPSBO Vk1FX0NTSV9aTlM7DQo+Pj4+ICsNCj4+Pj4gK8KgwqDCoCBzdGF0dXMgPSBudm1lX3N1Ym1pdF9z eW5jX2NtZChjdHJsLT5hZG1pbl9xLCAmYywgaWQsIHNpemVvZigqaWQpKTsNCj4+Pj4gK8KgwqDC oCBpZiAoc3RhdHVzKSB7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBrZnJlZShpZCk7DQo+Pj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gc3RhdHVzOw0KPj4+PiArwqDCoMKgIH0NCj4+Pj4gKw0KPj4+ PiArwqDCoMKgIGN0cmwtPm1heF96b25lX2FwcGVuZCA9IDEgPDwgKGlkLT56YW1kcyArIDMpOw0K Pj4+PiArwqDCoMKgIGtmcmVlKGlkKTsNCj4+Pj4gK8KgwqDCoCByZXR1cm4gMDsNCj4+Pj4gK30N Cj4+Pj4gKw0KPj4+PiAraW50IG52bWVfdXBkYXRlX3pvbmVfaW5mbyhzdHJ1Y3QgZ2VuZGlzayAq ZGlzaywgc3RydWN0IG52bWVfbnMgKm5zLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgbGJhZikNCj4+Pj4gK3sNCj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgbnZtZV9lZmZl Y3RzX2xvZyAqbG9nID0gbnMtPmhlYWQtPmVmZmVjdHM7DQo+Pj4+ICvCoMKgwqAgc3RydWN0IHJl cXVlc3RfcXVldWUgKnEgPSBkaXNrLT5xdWV1ZTsNCj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgbnZtZV9j b21tYW5kIGMgPSB7IH07DQo+Pj4+ICvCoMKgwqAgc3RydWN0IG52bWVfaWRfbnNfem5zICppZDsN Cj4+Pj4gK8KgwqDCoCBpbnQgc3RhdHVzOw0KPj4+PiArDQo+Pj4+ICvCoMKgwqAgLyogRHJpdmVy IHJlcXVpcmVzIHpvbmUgYXBwZW5kIHN1cHBvcnQgKi8NCj4+Pj4gK8KgwqDCoCBpZiAoIShsb2ct PmlvY3NbbnZtZV9jbWRfem9uZV9hcHBlbmRdICYgTlZNRV9DTURfRUZGRUNUU19DU1VQUCkpDQo+ Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT0RFVjsNCj4+PiBGb2xsb3dpbmcgdXAgb24g dGhlIGluaXRpYWwgY29tbWVudCwgdGhpcyBjaGVjayBzaG91bGQgZ28uDQo+PiBTZWUgZmlyc3Qg Y29tbWVudC4NCj4gU2VlIGFib3ZlIGFuZCBwbGVhc2UgcmVtb3ZlLg0KPg0KPj4+PiArDQo+Pj4+ ICvCoMKgwqAgLyogTGF6aWx5IHF1ZXJ5IGNvbnRyb2xsZXIgYXBwZW5kIGxpbWl0IGZvciB0aGUg Zmlyc3Qgem9uZWQNCj4+Pj4gbmFtZXNwYWNlICovDQo+Pj4+ICvCoMKgwqAgaWYgKCFucy0+Y3Ry bC0+bWF4X3pvbmVfYXBwZW5kKSB7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBzdGF0dXMgPSBudm1l X3NldF9tYXhfYXBwZW5kKG5zLT5jdHJsKTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChzdGF0 dXMpDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBzdGF0dXM7DQo+Pj4+ICvC oMKgwqAgfQ0KPj4+IFRoaXMgc2hvdWxkIG9ubHkgYmUgYXBwbGllZCBpZiBhcHBlbmQgaXMgc3Vw cG9ydGVkLg0KPj4gU2VlIGZpcnN0IGNvbW1lbnQuDQo+Pg0KPj4+PiArDQo+Pj4+ICvCoMKgwqAg aWQgPSBremFsbG9jKHNpemVvZigqaWQpLCBHRlBfS0VSTkVMKTsNCj4+Pj4gK8KgwqDCoCBpZiAo IWlkKQ0KPj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07DQo+Pj4+ICsNCj4+Pj4g K8KgwqDCoCBjLmlkZW50aWZ5Lm9wY29kZSA9IG52bWVfYWRtaW5faWRlbnRpZnk7DQo+Pj4+ICvC oMKgwqAgYy5pZGVudGlmeS5uc2lkID0gY3B1X3RvX2xlMzIobnMtPmhlYWQtPm5zX2lkKTsNCj4+ Pj4gK8KgwqDCoCBjLmlkZW50aWZ5LmNucyA9IE5WTUVfSURfQ05TX0NTX05TOw0KPj4+PiArwqDC oMKgIGMuaWRlbnRpZnkuY3NpID0gTlZNRV9DU0lfWk5TOw0KPj4+PiArDQo+Pj4+ICvCoMKgwqAg c3RhdHVzID0gbnZtZV9zdWJtaXRfc3luY19jbWQobnMtPmN0cmwtPmFkbWluX3EsICZjLCBpZCwN Cj4+Pj4gc2l6ZW9mKCppZCkpOw0KPj4+PiArwqDCoMKgIGlmIChzdGF0dXMpDQo+Pj4+ICvCoMKg wqDCoMKgwqDCoCBnb3RvIGZyZWVfZGF0YTsNCj4+Pj4gKw0KPj4+PiArwqDCoMKgIC8qDQo+Pj4+ ICvCoMKgwqDCoCAqIFdlIGN1cnJlbnRseSBkbyBub3QgaGFuZGxlIGRldmljZXMgcmVxdWlyaW5n IGFueSBvZiB0aGUgem9uZWQNCj4+Pj4gK8KgwqDCoMKgICogb3BlcmF0aW9uIGNoYXJhY3Rlcmlz dGljcy4NCj4+Pj4gK8KgwqDCoMKgICovDQo+Pj4+ICvCoMKgwqAgaWYgKGlkLT56b2MpIHsNCj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIHN0YXR1cyA9IC1FSU5WQUw7DQo+Pj4+ICvCoMKgwqDCoMKgwqDC oCBnb3RvIGZyZWVfZGF0YTsNCj4+Pj4gK8KgwqDCoCB9DQo+Pj4gSSB1bmRlcnN0YW5kIHRoYXQg IlZhcmlhYmxlIFpvbmUgQ2FwYWNpdHkiIGlzIG5vdCBzdXBwb3J0ZWQgYXMgaXQNCj4+PiByZXF1 aXJlcyBtYWpvciBjaGFuZ2VzIGF0IHRoaXMgbW9tZW50LCBidXQgd2Ugc2hvdWxkIHN1cHBvcnQg Y29udHJvbGxlcnMNCj4+PiB0aGF0IGVuYWJsZSAiWm9uZSBBY3RpdmUgRXhjdXJzaW9ucyIsIGV2 ZW4gd2hlbiB0aGUgQUVSIGV2ZW50IGlzIG5vdA0KPj4+IGltcGxlbWVudGVkIGluIHRoaXMgcGF0 Y2hzZXQuDQo+Pg0KPj4gTkFLLiBTaW1pbGFybHkgdG8gVlpDLCB0aGlzIGFsbG93cyBhbiB1bnN1 c3BlY3RpbmcgdXNlciB0byBoYXZlIG1ham9yDQo+PiBkYXRhIGxvc3Mgd2hlbiBhIHpvbmUgaXMg c3VkZGVubHkgbW92ZWQgdG8gRnVsbC4NCj4gSSBidXkgdGhhdC4NCj4NCj4+DQo+Pj4+ICsNCj4+ Pj4gK8KgwqDCoCBucy0+enN6ZSA9IG52bWVfbGJhX3RvX3NlY3QobnMsIGxlNjRfdG9fY3B1KGlk LT5sYmFmZVtsYmFmXS56c3plKSk7DQo+Pj4+ICvCoMKgwqAgaWYgKCFucy0+enN6ZSkgew0KPj4+ PiArwqDCoMKgwqDCoMKgwqAgc3RhdHVzID0gLUVJTlZBTDsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKg IGdvdG8gZnJlZV9kYXRhOw0KPj4+PiArwqDCoMKgIH0NCj4+Pj4gKw0KPj4+PiArwqDCoMKgIHEt PmxpbWl0cy56b25lZCA9IEJMS19aT05FRF9ITTsNCj4+Pj4gK8KgwqDCoCBibGtfcXVldWVfZmxh Z19zZXQoUVVFVUVfRkxBR19aT05FX1JFU0VUQUxMLCBxKTsNCj4+Pj4gK2ZyZWVfZGF0YToNCj4+ Pj4gK8KgwqDCoCBrZnJlZShpZCk7DQo+Pj4+ICvCoMKgwqAgcmV0dXJuIHN0YXR1czsNCj4+Pj4g K30NCj4+Pj4gKw0KPj4+PiArc3RhdGljIHZvaWQgKm52bWVfem5zX2FsbG9jX3JlcG9ydF9idWZm ZXIoc3RydWN0IG52bWVfbnMgKm5zLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBucl96b25lcywgc2l6ZV90ICpidWZsZW4pDQo+ Pj4+ICt7DQo+Pj4+ICvCoMKgwqAgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBucy0+ZGlzay0+ cXVldWU7DQo+Pj4+ICvCoMKgwqAgc2l6ZV90IGJ1ZnNpemU7DQo+Pj4+ICvCoMKgwqAgdm9pZCAq YnVmOw0KPj4+PiArDQo+Pj4+ICvCoMKgwqAgY29uc3Qgc2l6ZV90IG1pbl9idWZzaXplID0gc2l6 ZW9mKHN0cnVjdCBudm1lX3pvbmVfcmVwb3J0KSArDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKHN0cnVjdCBudm1lX3pvbmVfZGVzY3JpcHRvcik7DQo+ Pj4+ICsNCj4+Pj4gK8KgwqDCoCBucl96b25lcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbnJfem9u ZXMsDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ2V0X2NhcGFjaXR5KG5zLT5kaXNr KSA+PiBpbG9nMihucy0+enN6ZSkpOw0KPj4+PiArDQo+Pj4+ICvCoMKgwqAgYnVmc2l6ZSA9IHNp emVvZihzdHJ1Y3QgbnZtZV96b25lX3JlcG9ydCkgKw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgbnJf em9uZXMgKiBzaXplb2Yoc3RydWN0IG52bWVfem9uZV9kZXNjcmlwdG9yKTsNCj4+Pj4gK8KgwqDC oCBidWZzaXplID0gbWluX3Qoc2l6ZV90LCBidWZzaXplLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKSA8PCBTRUNUT1JfU0hJRlQpOw0KPj4+PiAr wqDCoMKgIGJ1ZnNpemUgPSBtaW5fdChzaXplX3QsIGJ1ZnNpemUsIHF1ZXVlX21heF9zZWdtZW50 cyhxKSA8PA0KPj4+PiBQQUdFX1NISUZUKTsNCj4+Pj4gKw0KPj4+PiArwqDCoMKgIHdoaWxlIChi dWZzaXplID49IG1pbl9idWZzaXplKSB7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBidWYgPSBfX3Zt YWxsb2MoYnVmc2l6ZSwNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRlBf S0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX05PUkVUUlkpOw0KPj4+PiArwqDCoMKgwqDCoMKg wqAgaWYgKGJ1Zikgew0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqYnVmbGVuID0gYnVm c2l6ZTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGJ1ZjsNCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIH0NCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGJ1ZnNpemUgPj49IDE7DQo+Pj4+ ICvCoMKgwqAgfQ0KPj4+PiArwqDCoMKgIHJldHVybiBOVUxMOw0KPj4+PiArfQ0KPj4+PiArDQo+ Pj4+ICtzdGF0aWMgaW50IF9fbnZtZV9uc19yZXBvcnRfem9uZXMoc3RydWN0IG52bWVfbnMgKm5z LCBzZWN0b3JfdCBzZWN0b3IsDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBudm1lX3pvbmVfcmVwb3J0ICpyZXBvcnQsDQo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdCBidWZsZW4pDQo+Pj4+ICt7DQo+Pj4+ICvCoMKg wqAgc3RydWN0IG52bWVfY29tbWFuZCBjID0geyB9Ow0KPj4+PiArwqDCoMKgIGludCByZXQ7DQo+ Pj4+ICsNCj4+Pj4gK8KgwqDCoCBjLnptci5vcGNvZGUgPSBudm1lX2NtZF96b25lX21nbXRfcmVj djsNCj4+Pj4gK8KgwqDCoCBjLnptci5uc2lkID0gY3B1X3RvX2xlMzIobnMtPmhlYWQtPm5zX2lk KTsNCj4+Pj4gK8KgwqDCoCBjLnptci5zbGJhID0gY3B1X3RvX2xlNjQobnZtZV9zZWN0X3RvX2xi YShucywgc2VjdG9yKSk7DQo+Pj4+ICvCoMKgwqAgYy56bXIubnVtZCA9IGNwdV90b19sZTMyKG52 bWVfYnl0ZXNfdG9fbnVtZChidWZsZW4pKTsNCj4+Pj4gK8KgwqDCoCBjLnptci56cmEgPSBOVk1F X1pSQV9aT05FX1JFUE9SVDsNCj4+Pj4gK8KgwqDCoCBjLnptci56cmFzZiA9IE5WTUVfWlJBU0Zf Wk9ORV9SRVBPUlRfQUxMOw0KPj4+PiArwqDCoMKgIGMuem1yLnByID0gTlZNRV9SRVBPUlRfWk9O RV9QQVJUSUFMOw0KPj4+PiArDQo+Pj4+ICvCoMKgwqAgcmV0ID0gbnZtZV9zdWJtaXRfc3luY19j bWQobnMtPnF1ZXVlLCAmYywgcmVwb3J0LCBidWZsZW4pOw0KPj4+PiArwqDCoMKgIGlmIChyZXQp DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Ow0KPj4+PiArDQo+Pj4+ICvCoMKgwqAg cmV0dXJuIGxlNjRfdG9fY3B1KHJlcG9ydC0+bnJfem9uZXMpOw0KPj4+PiArfQ0KPj4+PiArDQo+ Pj4+ICtzdGF0aWMgaW50IG52bWVfem9uZV9wYXJzZV9lbnRyeShzdHJ1Y3QgbnZtZV9ucyAqbnMs DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbnZtZV96b25l X2Rlc2NyaXB0b3IgKmVudHJ5LA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgaW50IGlkeCwgcmVwb3J0X3pvbmVzX2NiIGNiLA0KPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdm9pZCAqZGF0YSkNCj4+Pj4gK3sNCj4+Pj4gK8KgwqDC oCBzdHJ1Y3QgYmxrX3pvbmUgem9uZSA9IHsgfTsNCj4+Pj4gKw0KPj4+PiArwqDCoMKgIGlmICgo ZW50cnktPnp0ICYgMHhmKSAhPSBOVk1FX1pPTkVfVFlQRV9TRVFXUklURV9SRVEpIHsNCj4+Pj4g K8KgwqDCoMKgwqDCoMKgIGRldl9lcnIobnMtPmN0cmwtPmRldmljZSwgImludmFsaWQgem9uZSB0 eXBlICUjeFxuIiwNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnRyeS0+ enQpOw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7DQo+Pj4+ICvCoMKgwqAg fQ0KPj4+PiArDQo+Pj4+ICvCoMKgwqAgem9uZS50eXBlID0gQkxLX1pPTkVfVFlQRV9TRVFXUklU RV9SRVE7DQo+Pj4+ICvCoMKgwqAgem9uZS5jb25kID0gZW50cnktPnpzID4+IDQ7DQo+Pj4+ICvC oMKgwqAgem9uZS5sZW4gPSBucy0+enN6ZTsNCj4+Pj4gK8KgwqDCoCB6b25lLmNhcGFjaXR5ID0g bnZtZV9sYmFfdG9fc2VjdChucywgbGU2NF90b19jcHUoZW50cnktPnpjYXApKTsNCj4+Pj4gK8Kg wqDCoCB6b25lLnN0YXJ0ID0gbnZtZV9sYmFfdG9fc2VjdChucywgbGU2NF90b19jcHUoZW50cnkt PnpzbGJhKSk7DQo+Pj4+ICvCoMKgwqAgem9uZS53cCA9IG52bWVfbGJhX3RvX3NlY3QobnMsIGxl NjRfdG9fY3B1KGVudHJ5LT53cCkpOw0KPj4+PiArDQo+Pj4+ICvCoMKgwqAgcmV0dXJuIGNiKCZ6 b25lLCBpZHgsIGRhdGEpOw0KPj4+PiArfQ0KPj4+PiArDQo+Pj4+ICtzdGF0aWMgaW50IG52bWVf bnNfcmVwb3J0X3pvbmVzKHN0cnVjdCBudm1lX25zICpucywgc2VjdG9yX3Qgc2VjdG9yLA0KPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgbnJfem9uZXMsIHJlcG9ydF96 b25lc19jYiBjYiwgdm9pZCAqZGF0YSkNCj4+Pj4gK3sNCj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgbnZt ZV96b25lX3JlcG9ydCAqcmVwb3J0Ow0KPj4+PiArwqDCoMKgIGludCByZXQsIHpvbmVfaWR4ID0g MDsNCj4+Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgbnosIGk7DQo+Pj4+ICvCoMKgwqAgc2l6ZV90 IGJ1ZmxlbjsNCj4+Pj4gKw0KPj4+PiArwqDCoMKgIHJlcG9ydCA9IG52bWVfem5zX2FsbG9jX3Jl cG9ydF9idWZmZXIobnMsIG5yX3pvbmVzLCAmYnVmbGVuKTsNCj4+Pj4gK8KgwqDCoCBpZiAoIXJl cG9ydCkNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOw0KPj4+PiArDQo+Pj4+ ICvCoMKgwqAgc2VjdG9yICY9IH4obnMtPnpzemUgLSAxKTsNCj4+Pj4gK8KgwqDCoCB3aGlsZSAo em9uZV9pZHggPCBucl96b25lcyAmJiBzZWN0b3IgPCBnZXRfY2FwYWNpdHkobnMtPmRpc2spKSB7 DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBtZW1zZXQocmVwb3J0LCAwLCBidWZsZW4pOw0KPj4+PiAr wqDCoMKgwqDCoMKgwqAgcmV0ID0gX19udm1lX25zX3JlcG9ydF96b25lcyhucywgc2VjdG9yLCBy ZXBvcnQsIGJ1Zmxlbik7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkNCj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfZnJlZTsNCj4+Pj4gKw0KPj4+PiArwqDC oMKgwqDCoMKgwqAgbnogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHJldCwgbnJfem9uZXMpOw0KPj4+ PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFueikNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YnJlYWs7DQo+Pj4+ICsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBueiAm JiB6b25lX2lkeCA8IG5yX3pvbmVzOyBpKyspIHsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0ID0gbnZtZV96b25lX3BhcnNlX2VudHJ5KG5zLCAmcmVwb3J0LT5lbnRyaWVzW2ldLA0K Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHpvbmVfaWR4LCBjYiwgZGF0YSk7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlm IChyZXQpDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfZnJl ZTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgem9uZV9pZHgrKzsNCj4+Pj4gK8KgwqDC oMKgwqDCoMKgIH0NCj4+Pj4gKw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgc2VjdG9yICs9IG5zLT56 c3plICogbno7DQo+Pj4+ICvCoMKgwqAgfQ0KPj4+PiArDQo+Pj4+ICvCoMKgwqAgcmV0ID0gem9u ZV9pZHg7DQo+Pj4+ICtvdXRfZnJlZToNCj4+Pj4gK8KgwqDCoCBrdmZyZWUocmVwb3J0KTsNCj4+ Pj4gK8KgwqDCoCByZXR1cm4gcmV0Ow0KPj4+PiArfQ0KPj4+PiArDQo+Pj4+ICtpbnQgbnZtZV9y ZXBvcnRfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvciwNCj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBucl96b25lcywgcmVwb3J0 X3pvbmVzX2NiIGNiLCB2b2lkICpkYXRhKQ0KPj4+PiArew0KPj4+PiArwqDCoMKgIHN0cnVjdCBu dm1lX25zX2hlYWQgKmhlYWQgPSBOVUxMOw0KPj4+PiArwqDCoMKgIHN0cnVjdCBudm1lX25zICpu czsNCj4+Pj4gK8KgwqDCoCBpbnQgc3JjdV9pZHgsIHJldDsNCj4+Pj4gKw0KPj4+PiArwqDCoMKg IG5zID0gbnZtZV9nZXRfbnNfZnJvbV9kaXNrKGRpc2ssICZoZWFkLCAmc3JjdV9pZHgpOw0KPj4+ PiArwqDCoMKgIGlmICh1bmxpa2VseSghbnMpKQ0KPj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IC1FV09VTERCTE9DSzsNCj4+Pj4gKw0KPj4+PiArwqDCoMKgIGlmIChucy0+aGVhZC0+aWRzLmNz aSA9PSBOVk1FX0NTSV9aTlMpDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBudm1lX25zX3Jl cG9ydF96b25lcyhucywgc2VjdG9yLCBucl96b25lcywgY2IsIGRhdGEpOw0KPj4+PiArwqDCoMKg IGVsc2UNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IC1FSU5WQUw7DQo+Pj4+ICvCoMKgwqAg bnZtZV9wdXRfbnNfZnJvbV9kaXNrKGhlYWQsIHNyY3VfaWR4KTsNCj4+Pj4gKw0KPj4+PiArwqDC oMKgIHJldHVybiByZXQ7DQo+Pj4+ICt9DQo+Pj4+ICsNCj4+Pj4gK2Jsa19zdGF0dXNfdCBudm1l X3NldHVwX3pvbmVfbWdtdF9zZW5kKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0DQo+Pj4+IHJl cXVlc3QgKnJlcSwNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBudm1lX2NvbW1hbmQgKmMs IGVudW0gbnZtZV96b25lX21nbXRfYWN0aW9uIGFjdGlvbikNCj4+Pj4gK3sNCj4+Pj4gK8KgwqDC oCBjLT56bXMub3Bjb2RlID0gbnZtZV9jbWRfem9uZV9tZ210X3NlbmQ7DQo+Pj4+ICvCoMKgwqAg Yy0+em1zLm5zaWQgPSBjcHVfdG9fbGUzMihucy0+aGVhZC0+bnNfaWQpOw0KPj4+PiArwqDCoMKg IGMtPnptcy5zbGJhID0gY3B1X3RvX2xlNjQobnZtZV9zZWN0X3RvX2xiYShucywgYmxrX3JxX3Bv cyhyZXEpKSk7DQo+Pj4+ICvCoMKgwqAgYy0+em1zLmFjdGlvbiA9IGFjdGlvbjsNCj4+Pj4gKw0K Pj4+PiArwqDCoMKgIGlmIChyZXFfb3AocmVxKSA9PSBSRVFfT1BfWk9ORV9SRVNFVF9BTEwpDQo+ Pj4+ICvCoMKgwqDCoMKgwqDCoCBjLT56bXMuc2VsZWN0ID0gMTsNCj4+Pj4gKw0KPj4+PiArwqDC oMKgIHJldHVybiBCTEtfU1RTX09LOw0KPj4+PiArfQ0KPj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9saW51eC9udm1lLmggYi9pbmNsdWRlL2xpbnV4L252bWUuaA0KPj4+PiBpbmRleCBlYTI1ZGE1 NzJlZWQuLjdiM2ZhN2RlMDdiZCAxMDA2NDQNCj4+Pj4gLS0tIGEvaW5jbHVkZS9saW51eC9udm1l LmgNCj4+Pj4gKysrIGIvaW5jbHVkZS9saW51eC9udm1lLmgNCj4+Pj4gQEAgLTM3NCw2ICszNzQs MzAgQEAgc3RydWN0IG52bWVfaWRfbnMgew0KPj4+PiAgwqDCoMKgwqBfX3U4wqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB2c1szNzEyXTsNCj4+Pj4gfTsNCj4+Pj4NCj4+Pj4gK3N0cnVjdCBudm1lX3pu c19sYmFmZSB7DQo+Pj4+ICvCoMKgwqAgX19sZTY0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB6c3pl Ow0KPj4+PiArwqDCoMKgIF9fdTjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHpkZXM7DQo+Pj4+ICvC oMKgwqAgX191OMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnN2ZDlbN107DQo+Pj4+ICt9Ow0KPj4+ PiArDQo+Pj4+ICtzdHJ1Y3QgbnZtZV9pZF9uc196bnMgew0KPj4+PiArwqDCoMKgIF9fbGUxNsKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgem9jOw0KPj4+PiArwqDCoMKgIF9fbGUxNsKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgb3pjczsNCj4+Pj4gK8KgwqDCoCBfX2xlMzLCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG1hcjsNCj4+Pj4gK8KgwqDCoCBfX2xlMzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1vcjsN Cj4+Pj4gK8KgwqDCoCBfX2xlMzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJybDsNCj4+Pj4gK8Kg wqDCoCBfX2xlMzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZybDsNCj4+Pj4gK8KgwqDCoCBfX3U4 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByc3ZkMjBbMjc5Nl07DQo+Pj4+ICvCoMKgwqAgc3RydWN0 IG52bWVfem5zX2xiYWZlwqDCoMKgIGxiYWZlWzE2XTsNCj4+Pj4gK8KgwqDCoCBfX3U4wqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByc3ZkMzA3Mls3NjhdOw0KPj4+PiArwqDCoMKgIF9fdTjCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHZzWzI1Nl07DQo+Pj4+ICt9Ow0KPj4+PiArDQo+Pj4+ICtzdHJ1Y3Qg bnZtZV9pZF9jdHJsX3pucyB7DQo+Pj4+ICvCoMKgwqAgX191OMKgwqDCoCB6YW1kczsNCj4+Pj4g K8KgwqDCoCBfX3U4wqDCoMKgIHJzdmQxWzQwOTVdOw0KPj4+PiArfTsNCj4+Pj4gKw0KPj4+PiBl bnVtIHsNCj4+Pj4gIMKgwqDCoMKgTlZNRV9JRF9DTlNfTlPCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ID0gMHgwMCwNCj4+Pj4gIMKgwqDCoMKgTlZNRV9JRF9DTlNfQ1RSTMKgwqDCoMKgwqDCoMKgID0g MHgwMSwNCj4+Pj4gQEAgLTM5Miw2ICs0MTYsNyBAQCBlbnVtIHsNCj4+Pj4NCj4+Pj4gZW51bSB7 DQo+Pj4+ICDCoMKgwqDCoE5WTUVfQ1NJX05WTcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAwLA0K Pj4+PiArwqDCoMKgIE5WTUVfQ1NJX1pOU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAyLA0KPj4+ PiB9Ow0KPj4+Pg0KPj4+PiBlbnVtIHsNCj4+Pj4gQEAgLTUzMiw2ICs1NTcsMjcgQEAgc3RydWN0 IG52bWVfYW5hX3JzcF9oZHIgew0KPj4+PiAgwqDCoMKgwqBfX2xlMTbCoMKgwqAgcnN2ZDEwWzNd Ow0KPj4+PiB9Ow0KPj4+Pg0KPj4+PiArc3RydWN0IG52bWVfem9uZV9kZXNjcmlwdG9yIHsNCj4+ Pj4gK8KgwqDCoCBfX3U4wqDCoMKgwqDCoMKgwqAgenQ7DQo+Pj4+ICvCoMKgwqAgX191OMKgwqDC oMKgwqDCoMKgIHpzOw0KPj4+PiArwqDCoMKgIF9fdTjCoMKgwqDCoMKgwqDCoCB6YTsNCj4+Pj4g K8KgwqDCoCBfX3U4wqDCoMKgwqDCoMKgwqAgcnN2ZDNbNV07DQo+Pj4+ICvCoMKgwqAgX19sZTY0 wqDCoMKgwqDCoMKgwqAgemNhcDsNCj4+Pj4gK8KgwqDCoCBfX2xlNjTCoMKgwqDCoMKgwqDCoCB6 c2xiYTsNCj4+Pj4gK8KgwqDCoCBfX2xlNjTCoMKgwqDCoMKgwqDCoCB3cDsNCj4+Pj4gK8KgwqDC oCBfX3U4wqDCoMKgwqDCoMKgwqAgcnN2ZDMyWzMyXTsNCj4+Pj4gK307DQo+Pj4+ICsNCj4+Pj4g K2VudW0gew0KPj4+PiArwqDCoMKgIE5WTUVfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUcKgwqDCoCA9 IDB4MiwNCj4+Pj4gK307DQo+Pj4+ICsNCj4+Pj4gK3N0cnVjdCBudm1lX3pvbmVfcmVwb3J0IHsN Cj4+Pj4gK8KgwqDCoCBfX2xlNjTCoMKgwqDCoMKgwqDCoCBucl96b25lczsNCj4+Pj4gK8KgwqDC oCBfX3U4wqDCoMKgwqDCoMKgwqAgcmVzdjhbNTZdOw0KPj4+PiArwqDCoMKgIHN0cnVjdCBudm1l X3pvbmVfZGVzY3JpcHRvciBlbnRyaWVzW107DQo+Pj4+ICt9Ow0KPj4+PiArDQo+Pj4+IGVudW0g ew0KPj4+PiAgwqDCoMKgwqBOVk1FX1NNQVJUX0NSSVRfU1BBUkXCoMKgwqDCoMKgwqDCoCA9IDEg PDwgMCwNCj4+Pj4gIMKgwqDCoMKgTlZNRV9TTUFSVF9DUklUX1RFTVBFUkFUVVJFwqDCoMKgID0g MSA8PCAxLA0KPj4+PiBAQCAtNjI2LDYgKzY3Miw5IEBAIGVudW0gbnZtZV9vcGNvZGUgew0KPj4+ PiAgwqDCoMKgwqBudm1lX2NtZF9yZXN2X3JlcG9ydMKgwqDCoCA9IDB4MGUsDQo+Pj4+ICDCoMKg wqDCoG52bWVfY21kX3Jlc3ZfYWNxdWlyZcKgwqDCoCA9IDB4MTEsDQo+Pj4+ICDCoMKgwqDCoG52 bWVfY21kX3Jlc3ZfcmVsZWFzZcKgwqDCoCA9IDB4MTUsDQo+Pj4+ICvCoMKgwqAgbnZtZV9jbWRf em9uZV9tZ210X3NlbmTCoMKgwqAgPSAweDc5LA0KPj4+PiArwqDCoMKgIG52bWVfY21kX3pvbmVf bWdtdF9yZWN2wqDCoMKgID0gMHg3YSwNCj4+Pj4gK8KgwqDCoCBudm1lX2NtZF96b25lX2FwcGVu ZMKgwqDCoCA9IDB4N2QsDQo+Pj4+IH07DQo+Pj4+DQo+Pj4+ICNkZWZpbmUgbnZtZV9vcGNvZGVf bmFtZShvcGNvZGUpwqDCoMKgIHsgb3Bjb2RlLCAjb3Bjb2RlIH0NCj4+Pj4gQEAgLTc2NCw2ICs4 MTMsNyBAQCBzdHJ1Y3QgbnZtZV9yd19jb21tYW5kIHsNCj4+Pj4gZW51bSB7DQo+Pj4+ICDCoMKg wqDCoE5WTUVfUldfTFLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gMSA8PCAxNSwNCj4+Pj4gIMKg wqDCoMKgTlZNRV9SV19GVUHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gMSA8PCAxNCwNCj4+Pj4g K8KgwqDCoCBOVk1FX1JXX0FQUEVORF9QSVJFTUFQwqDCoMKgwqDCoMKgwqAgPSAxIDw8IDksDQo+ Pj4+ICDCoMKgwqDCoE5WTUVfUldfRFNNX0ZSRVFfVU5TUEVDwqDCoMKgwqDCoMKgwqAgPSAwLA0K Pj4+PiAgwqDCoMKgwqBOVk1FX1JXX0RTTV9GUkVRX1RZUElDQUzCoMKgwqAgPSAxLA0KPj4+PiAg wqDCoMKgwqBOVk1FX1JXX0RTTV9GUkVRX1JBUkXCoMKgwqDCoMKgwqDCoCA9IDIsDQo+Pj4+IEBA IC04MjksNiArODc5LDUzIEBAIHN0cnVjdCBudm1lX3dyaXRlX3plcm9lc19jbWQgew0KPj4+PiAg wqDCoMKgwqBfX2xlMTbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFwcG1hc2s7DQo+Pj4+IH07DQo+ Pj4+DQo+Pj4+ICtlbnVtIG52bWVfem9uZV9tZ210X2FjdGlvbiB7DQo+Pj4+ICvCoMKgwqAgTlZN RV9aT05FX0NMT1NFwqDCoMKgwqDCoMKgwqAgPSAweDEsDQo+Pj4+ICvCoMKgwqAgTlZNRV9aT05F X0ZJTklTSMKgwqDCoCA9IDB4MiwNCj4+Pj4gK8KgwqDCoCBOVk1FX1pPTkVfT1BFTsKgwqDCoMKg wqDCoMKgID0gMHgzLA0KPj4+PiArwqDCoMKgIE5WTUVfWk9ORV9SRVNFVMKgwqDCoMKgwqDCoMKg ID0gMHg0LA0KPj4+PiArwqDCoMKgIE5WTUVfWk9ORV9PRkZMSU5FwqDCoMKgID0gMHg1LA0KPj4+ PiArwqDCoMKgIE5WTUVfWk9ORV9TRVRfREVTQ19FWFTCoMKgwqAgPSAweDEwLA0KPj4+PiArfTsN Cj4+Pj4gKw0KPj4+PiArc3RydWN0IG52bWVfem9uZV9tZ210X3NlbmRfY21kIHsNCj4+Pj4gK8Kg wqDCoCBfX3U4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcGNvZGU7DQo+Pj4+ICvCoMKgwqAgX191 OMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmxhZ3M7DQo+Pj4+ICvCoMKgwqAgX191MTbCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGNvbW1hbmRfaWQ7DQo+Pj4+ICvCoMKgwqAgX19sZTMywqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBuc2lkOw0KPj4+PiArwqDCoMKgIF9fbGUzMsKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY2R3MlsyXTsNCj4+Pj4gK8KgwqDCoCBfX2xlNjTCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IG1ldGFkYXRhOw0KPj4+PiArwqDCoMKgIHVuaW9uIG52bWVfZGF0YV9wdHLCoMKgwqAgZHB0cjsN Cj4+Pj4gK8KgwqDCoCBfX2xlNjTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNsYmE7DQo+Pj4+ICvC oMKgwqAgX19sZTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjZHcxMjsNCj4+Pj4gK8KgwqDCoCBf X3U4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhY3Rpb247DQo+Pj4gV2h5IG5vdCB6c2EgdG8gbWFr ZSBpdCBlYXNpZXIgdG8gbWF0Y2ggdG8gdGhlIHNwZWMNCj4+Pg0KPj4+DQo+Pj4+ICvCoMKgwqAg X191OMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZWN0Ow0KPj4+IHNlbF9hbGw/DQo+Pj4NCj4+ Pj4gK8KgwqDCoCBfX3U4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByc3ZkMTNbMl07DQo+Pj4+ICvC oMKgwqAgX19sZTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjZHcxNFsyXTsNCj4+Pj4gK307DQo+ Pj4+ICsNCj4+Pj4gK3N0cnVjdCBudm1lX3pvbmVfbWdtdF9yZWN2X2NtZCB7DQo+Pj4+ICvCoMKg wqAgX191OMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3Bjb2RlOw0KPj4+PiArwqDCoMKgIF9fdTjC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZsYWdzOw0KPj4+PiArwqDCoMKgIF9fdTE2wqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBjb21tYW5kX2lkOw0KPj4+PiArwqDCoMKgIF9fbGUzMsKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgbnNpZDsNCj4+Pj4gK8KgwqDCoCBfX2xlNjTCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJzdmQyWzJdOw0KPj4+PiArwqDCoMKgIHVuaW9uIG52bWVfZGF0YV9wdHLCoMKgwqAgZHB0 cjsNCj4+Pj4gK8KgwqDCoCBfX2xlNjTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNsYmE7DQo+Pj4+ ICvCoMKgwqAgX19sZTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBudW1kOw0KPj4+PiArwqDCoMKg IF9fdTjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHpyYTsNCj4+Pj4gK8KgwqDCoCBfX3U4wqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB6cmFzZjsNCj4+Pj4gK8KgwqDCoCBfX3U4wqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBwcjsNCj4+PiBQYXJ0aWFsIFJlcG9ydCBpcyBqdXN0IG9uZSBiaXQgaW4gdGhlICJa b25lIFJlY2VpdmUgQWN0aW9uIFNwZWNpZmljDQo+Pj4gRmVhdHVyZXMiLiBXaGF0IGFib3V0IHpy YXNmZT8NCj4+IFRoZXJlIGN1cnJlbnRseSBubyB1c2VycyBvZiBwciwgYW5kIGJpdCAxLTcgYXJl IHJlc2VydmVkIGluIHRoZSBzcGVjLg0KPj4gVXNlcnMgb2YgdGhlIHByIHZhcmlhYmxlIHNob3Vs ZCBzaGlmdCBhbmQgbWFzayBhcyBuZWNlc3NhcnkuDQo+Pg0KPj4genJhc2YgbG9va3MgZ29vZCB0 byBtZS4gSXQgaXMgZGVmaW5lZCBhcyBhIGJ5dGUgaW4gdGhlIHNwZWMuDQo+IEkgbWVhbnQgZm9y IHRoZSBwciB2YXJpYWJsZSBuYW1lLiBBZ3JlZSB3aXRoIHRoZSByZXN0Lg0KPg0KPj4+PiArwqDC oMKgIF9fdTjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJzdmQxMzsNCj4+Pj4gK8KgwqDCoCBfX2xl MzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNkdzE0WzJdOw0KPj4+PiArfTsNCj4+Pj4gKw0KPj4+ PiArZW51bSB7DQo+Pj4+ICvCoMKgwqAgTlZNRV9aUkFfWk9ORV9SRVBPUlTCoMKgwqDCoMKgwqDC oCA9IDAsDQo+Pj4+ICvCoMKgwqAgTlZNRV9aUkFTRl9aT05FX1JFUE9SVF9BTEzCoMKgwqAgPSAw LA0KPj4+PiArwqDCoMKgIE5WTUVfUkVQT1JUX1pPTkVfUEFSVElBTMKgwqDCoCA9IDEsDQo+Pj4+ ICt9Ow0KPj4+PiArDQo+Pj4+IC8qIEZlYXR1cmVzICovDQo+Pj4+DQo+Pj4+IGVudW0gew0KPj4+ PiBAQCAtMTMwMCw2ICsxMzk3LDggQEAgc3RydWN0IG52bWVfY29tbWFuZCB7DQo+Pj4+ICDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgbnZtZV9mb3JtYXRfY21kIGZvcm1hdDsNCj4+Pj4gIMKgwqDCoMKg wqDCoMKgIHN0cnVjdCBudm1lX2RzbV9jbWQgZHNtOw0KPj4+PiAgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IG52bWVfd3JpdGVfemVyb2VzX2NtZCB3cml0ZV96ZXJvZXM7DQo+Pj4+ICvCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgbnZtZV96b25lX21nbXRfc2VuZF9jbWQgem1zOw0KPj4+PiArwqDCoMKgwqDC oMKgwqAgc3RydWN0IG52bWVfem9uZV9tZ210X3JlY3ZfY21kIHptcjsNCj4+Pj4gIMKgwqDCoMKg wqDCoMKgIHN0cnVjdCBudm1lX2Fib3J0X2NtZCBhYm9ydDsNCj4+Pj4gIMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBudm1lX2dldF9sb2dfcGFnZV9jb21tYW5kIGdldF9sb2dfcGFnZTsNCj4+Pj4gIMKg wqDCoMKgwqDCoMKgIHN0cnVjdCBudm1mX2NvbW1vbl9jb21tYW5kIGZhYnJpY3M7DQo+Pj4+IEBA IC0xNDMzLDYgKzE1MzIsMTggQEAgZW51bSB7DQo+Pj4+ICDCoMKgwqDCoE5WTUVfU0NfRElTQ09W RVJZX1JFU1RBUlTCoMKgwqAgPSAweDE5MCwNCj4+Pj4gIMKgwqDCoMKgTlZNRV9TQ19BVVRIX1JF UVVJUkVEwqDCoMKgwqDCoMKgwqAgPSAweDE5MSwNCj4+Pj4NCj4+Pj4gK8KgwqDCoCAvKg0KPj4+ PiArwqDCoMKgwqAgKiBJL08gQ29tbWFuZCBTZXQgU3BlY2lmaWMgLSBab25lZCBjb21tYW5kczoN Cj4+Pj4gK8KgwqDCoMKgICovDQo+Pj4+ICvCoMKgwqAgTlZNRV9TQ19aT05FX0JPVU5EQVJZX0VS Uk9SwqDCoMKgID0gMHgxYjgsDQo+Pj4+ICvCoMKgwqAgTlZNRV9TQ19aT05FX0ZVTEzCoMKgwqDC oMKgwqDCoCA9IDB4MWI5LA0KPj4+PiArwqDCoMKgIE5WTUVfU0NfWk9ORV9SRUFEX09OTFnCoMKg wqDCoMKgwqDCoCA9IDB4MWJhLA0KPj4+PiArwqDCoMKgIE5WTUVfU0NfWk9ORV9PRkZMSU5FwqDC oMKgwqDCoMKgwqAgPSAweDFiYiwNCj4+Pj4gK8KgwqDCoCBOVk1FX1NDX1pPTkVfSU5WQUxJRF9X UklURcKgwqDCoCA9IDB4MWJjLA0KPj4+PiArwqDCoMKgIE5WTUVfU0NfWk9ORV9UT09fTUFOWV9B Q1RJVkXCoMKgwqAgPSAweDFiZCwNCj4+Pj4gK8KgwqDCoCBOVk1FX1NDX1pPTkVfVE9PX01BTllf T1BFTsKgwqDCoCA9IDB4MWJlLA0KPj4+PiArwqDCoMKgIE5WTUVfU0NfWk9ORV9JTlZBTElEX1RS QU5TSVRJT07CoMKgwqAgPSAweDFiZiwNCj4+Pj4gKw0KPj4+PiAgwqDCoMKgwqAvKg0KPj4+PiAg wqDCoMKgwqAgKiBNZWRpYSBhbmQgRGF0YSBJbnRlZ3JpdHkgRXJyb3JzOg0KPj4+PiAgwqDCoMKg wqAgKi8NCj4+Pj4gLS0gDQo+Pj4+IDIuMjQuMQ0KPj4+Pg0KPiBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiBsaW51eC1udm1lIG1haWxpbmcgbGlzdA0K PiBsaW51eC1udm1lQGxpc3RzLmluZnJhZGVhZC5vcmcNCj4gaHR0cHM6Ly91cmxkZWZlbnNlLnBy b29mcG9pbnQuY29tL3YyL3VybD91PWh0dHBzLTNBX19wcm90ZWN0Mi5maXJlZXllLmNvbV91cmwt M0ZrLTNENWY5MjNhZTctMkQwMjQwMmM0Mi0yRDVmOTNiMWE4LTJEMGNjNDdhMzFiZWU4LTJEYWI3 MjQxOTBlYWZkZmVhOC0yNnEtM0QxLTI2dS0zRGh0dHBzLTI1M0EtMjUyRi0yNTJGdXJsZGVmZW5z ZS5wcm9vZnBvaW50LmNvbS0yNTJGdjItMjUyRnVybC0yNTNGdS0yNTNEaHR0cC0yRDNBLTVGLTVG bGlzdHMuaW5mcmFkZWFkLm9yZy01Rm1haWxtYW4tNUZsaXN0aW5mby01RmxpbnV4LTJEMkRudm1l LTI1MjZkLTI1M0REd0lHYVEtMjUyNmMtMjUzREpmZVdsQmE2VmJEeVRYcmFNRU5qeS01RmItNUYw eUtXdXFRNHFZLTJERlBoeEs0eDh3LTJEVGZnUkJEeWVWNGhWUVFCRWdMMi0yNTI2ci0yNTNEWUpN LTVGUVBrMncxQ1JJbzVOTkJYbkNYR3pObm1JSWZHLTVGaVRSczZjaEJmNnMtMjUyNm0tMjUzRHZ1 QXhpekcxYVgxRGMxVGowTlBXVWJod21aSWUxWTEya05JYkpITElkQlUtMjUyNnMtMjUzRHVDSVZo WTIyYW44amQwRkp2MWxpenB2LTVGdkEwdHBlMzd4cHo0YWY2S0ExMC0yNTI2ZS0yNTNEJmQ9RHdJ RGFRJmM9SmZlV2xCYTZWYkR5VFhyYU1FTmp5X2JfMHlLV3VxUTRxWS1GUGh4SzR4OHctVGZnUkJE eWVWNGhWUVFCRWdMMiZyPVlKTV9RUGsydzFDUklvNU5OQlhuQ1hHek5ubUlJZkdfaVRSczZjaEJm NnMmbT1FZkQ2Mm1zdTRwR3lSc1VJTlQ2UnQzVVBKcUt2b04yLWVDX3hZZGdEQkkwJnM9emk2VHFn aktZWWNMLXJ1THV3N0xELUNqcVdKQldoQnNOWDVZenp4bFZSWSZlPSANCg0KDQpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KbGludXgtbnZtZSBtYWlsaW5n IGxpc3QNCmxpbnV4LW52bWVAbGlzdHMuaW5mcmFkZWFkLm9yZw0KaHR0cHM6Ly91cmxkZWZlbnNl LnByb29mcG9pbnQuY29tL3YyL3VybD91PWh0dHAtM0FfX2xpc3RzLmluZnJhZGVhZC5vcmdfbWFp bG1hbl9saXN0aW5mb19saW51eC0yRG52bWUmZD1Ed0lHYVEmYz1KZmVXbEJhNlZiRHlUWHJhTUVO anlfYl8weUtXdXFRNHFZLUZQaHhLNHg4dy1UZmdSQkR5ZVY0aFZRUUJFZ0wyJnI9WUpNX1FQazJ3 MUNSSW81Tk5CWG5DWEd6Tm5tSUlmR19pVFJzNmNoQmY2cyZtPURwb2RvNUFOVzA4ZWtGNzRGMzdq OUpZclBPTHZ1ZmgtNkc3RjFhcUNoMG8mcz1yNEJWNnNqTFhMRGJVd2ViaElnSG41dDFKNXJaV053 Nnl0VFJHWXQ2dGJNJmU9IA0K