From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 43BF343E6F for ; Tue, 16 Apr 2024 11:27:01 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2A0B6402AE; Tue, 16 Apr 2024 11:27:01 +0200 (CEST) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id ADD504029E; Tue, 16 Apr 2024 11:26:59 +0200 (CEST) Received: from mail.maildlp.com (unknown [172.18.186.216]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4VJdt62790z6H6q8; Tue, 16 Apr 2024 17:25:02 +0800 (CST) Received: from frapeml100008.china.huawei.com (unknown [7.182.85.131]) by mail.maildlp.com (Postfix) with ESMTPS id B32BA140CB9; Tue, 16 Apr 2024 17:26:58 +0800 (CST) Received: from frapeml500007.china.huawei.com (7.182.85.172) by frapeml100008.china.huawei.com (7.182.85.131) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Tue, 16 Apr 2024 11:26:58 +0200 Received: from frapeml500007.china.huawei.com ([7.182.85.172]) by frapeml500007.china.huawei.com ([7.182.85.172]) with mapi id 15.01.2507.035; Tue, 16 Apr 2024 11:26:58 +0200 From: Konstantin Ananyev To: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= , Ferruh Yigit , David Marchand , "dev@dpdk.org" CC: "thomas@monjalon.net" , "stable@dpdk.org" , Olivier Matz , Jijiang Liu , Andrew Rybchenko , Kaiwen Deng , "qiming.yang@intel.com" , "yidingx.zhou@intel.com" , Aman Singh , Yuying Zhang , Jerin Jacob Subject: RE: [PATCH v2 3/8] mbuf: fix Tx checksum offload examples Thread-Topic: [PATCH v2 3/8] mbuf: fix Tx checksum offload examples Thread-Index: AQHah2gcwh+zxBWPrEOmSW2nVSxrXbFZuegAgAX4BtCAAE6MMIABTCywgAAbf0CAAzI3UIAAC0aQgAS3UYCAAQ4YgIAARCVQ Date: Tue, 16 Apr 2024 09:26:58 +0000 Message-ID: <151ec53014f64068b07adb3645ba6da8@huawei.com> References: <20240405125039.897933-1-david.marchand@redhat.com> <20240405144604.906695-1-david.marchand@redhat.com> <20240405144604.906695-4-david.marchand@redhat.com> <98CBD80474FA8B44BF855DF32C47DC35E9F36C@smartserver.smartshare.dk> <10b564b42f8d4db387f6302701f24ce3@huawei.com> <98CBD80474FA8B44BF855DF32C47DC35E9F381@smartserver.smartshare.dk> <409157f5da3e4c628ca678dd9e2c7957@huawei.com> <98CBD80474FA8B44BF855DF32C47DC35E9F38F@smartserver.smartshare.dk> <52850a78c83445548a0b78bfd04e6f91@huawei.com> <98CBD80474FA8B44BF855DF32C47DC35E9F39F@smartserver.smartshare.dk> <66d378ca-eb94-4165-9b18-c5fc9b10ea16@amd.com> <98CBD80474FA8B44BF855DF32C47DC35E9F3A4@smartserver.smartshare.dk> In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35E9F3A4@smartserver.smartshare.dk> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.206.138.42] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org DQoNCj4gPiBGcm9tOiBGZXJydWggWWlnaXQgW21haWx0bzpmZXJydWgueWlnaXRAYW1kLmNvbV0N Cj4gPiBTZW50OiBNb25kYXksIDE1IEFwcmlsIDIwMjQgMTcuMDgNCj4gPg0KPiA+IE9uIDQvMTIv MjAyNCAzOjQ0IFBNLCBNb3J0ZW4gQnLDuHJ1cCB3cm90ZToNCj4gPiA+Pj4+Pj4+PiBNYW5kYXRl IHVzZSBvZiBydGVfZXRoX3R4X3ByZXBhcmUoKSBpbiB0aGUgbWJ1ZiBUeCBjaGVja3N1bQ0KPiA+ ID4+IG9mZmxvYWQNCj4gPiA+Pj4+Pj4+PiBleGFtcGxlcy4NCj4gPiA+Pj4+Pj4+DQo+ID4gPj4+ Pj4+PiBJIHN0cm9uZ2x5IGRpc2FncmVlIHdpdGggdGhpcyBjaGFuZ2UhDQo+ID4gPj4+Pj4+Pg0K PiA+ID4+Pj4+Pj4gSXQgd2lsbCBjYXVzZSBhIGh1Z2UgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24g Zm9yIHNoYXBpbmcNCj4gPiA+PiBhcHBsaWNhdGlvbnM6DQo+ID4gPj4+Pj4+Pg0KPiA+ID4+Pj4+ Pj4gQSBwYWNrZXQgd2lsbCBiZSBwcm9jZXNzZWQgYW5kIGZpbmFsaXplZCBhdCBhbiBvdXRwdXQg b3INCj4gPiA+PiBmb3J3YXJkaW5nDQo+ID4gPj4+Pj4+IHBpcGVsaW5lIHN0YWdlLCB3aGVyZSBz b21lIG90aGVyIGZpZWxkcyBtaWdodCBhbHNvIGJlIHdyaXR0ZW4sDQo+ID4gPj4gc28NCj4gPiA+ Pj4+Pj4+IHplcm9pbmcgZS5nLiB0aGUgb3V0X2lwIGNoZWNrc3VtIGF0IHRoaXMgc3RhZ2UgaGFz IGxvdyBjb3N0DQo+ID4gPj4gKG5vIG5ldw0KPiA+ID4+Pj4+PiBjYWNoZSBtaXNzZXMpLg0KPiA+ ID4+Pj4+Pj4NCj4gPiA+Pj4+Pj4+IFRoZW4sIHRoZSBwYWNrZXQgbWlnaHQgYmUgcXVldWVkIGZv ciBRb1Mgb3Igc2ltaWxhci4NCj4gPiA+Pj4+Pj4+DQo+ID4gPj4+Pj4+PiBJZiBydGVfZXRoX3R4 X3ByZXBhcmUoKSBtdXN0IGJlIGNhbGxlZCBhdCB0aGUgZWdyZXNzIHBpcGVsaW5lDQo+ID4gPj4g c3RhZ2UsDQo+ID4gPj4+Pj4+IGl0IGhhcyB0byB3cml0ZSB0byB0aGUgcGFja2V0IGFuZCBjYXVz ZSBhIGNhY2hlIG1pc3MgcGVyIHBhY2tldCwNCj4gPiA+Pj4+Pj4+IGluc3RlYWQgb2Ygc2ltcGx5 IHBhc3Npbmcgb24gdGhlIHBhY2tldCB0byB0aGUgTklDIGhhcmR3YXJlLg0KPiA+ID4+Pj4+Pj4N Cj4gPiA+Pj4+Pj4+IEl0IG11c3QgYmUgcG9zc2libGUgdG8gZmluYWxpemUgdGhlIHBhY2tldCBh dCB0aGUNCj4gPiA+PiBvdXRwdXQvZm9yd2FyZGluZw0KPiA+ID4+Pj4+PiBwaXBlbGluZSBzdGFn ZSENCj4gPiA+Pj4+Pj4NCj4gPiA+Pj4+Pj4gSWYgeW91IGNhbiBmaW5hbGl6ZSB5b3VyIHBhY2tl dCBvbiAgb3V0cHV0L2ZvcndhcmRpbmcsIHRoZW4gd2h5DQo+ID4gPj4geW91DQo+ID4gPj4+Pj4+ IGNhbid0IGludm9rZSB0eF9wcmVwYXJlKCkgb24gdGhlIHNhbWUgc3RhZ2U/DQo+ID4gPj4+Pj4+ IFRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgbWlzdW5kZXJzdGFuZGluZyBhYm91dCB3aGF0IHR4X3By ZXBhcmUoKQ0KPiA+ID4+IGRvZXMgLQ0KPiA+ID4+Pj4+PiBpbiBmYWN0IGl0IGRvZXNuJ3QgY29t bXVuaWNhdGUgd2l0aCBIVyBxdWV1ZSAoZG9lc24ndCB1cGRhdGUgVFhEDQo+ID4gPj4gcmluZywN Cj4gPiA+Pj4+Pj4gZXRjLiksIHdoYXQgaXQgZG9lcyAtIGp1c3QgbWFrZSBjaGFuZ2VzIGluIG1i dWYgaXRzZWxmLg0KPiA+ID4+Pj4+PiBZZXMsIGl0IHJlYWRzIHNvbWUgZmllbGRzIGluIFNXIFRY IHF1ZXVlIHN0cnVjdCAobWF4IG51bWJlciBvZg0KPiA+ID4+IFRYRHMgcGVyDQo+ID4gPj4+Pj4+ IHBhY2tldCwgZXRjLiksIGJ1dCBBRkFJSyBpdCBpcyBzYWZlDQo+ID4gPj4+Pj4+IHRvIGNhbGwg dHhfcHJlcGFyZSgpIGFuZCB0eF9idXJzdCgpIGZyb20gZGlmZmVyZW50IHRocmVhZHMuDQo+ID4g Pj4+Pj4+IEF0IGxlYXN0IG9uIGltcGxlbWVudGF0aW9ucyBJIGFtIGF3YXJlIGFib3V0Lg0KPiA+ ID4+Pj4+PiBKdXN0IGNoZWNrZWQgdGhlIGRvY3MgLSBpdCBzZWVtcyBub3Qgc3RhdGVkIGV4cGxp Y2l0bHkgYW55d2hlcmUsDQo+ID4gPj4gbWlnaHQNCj4gPiA+Pj4+Pj4gYmUgdGhhdCdzIHdoeSBp dCBjYXVzaW5nIHN1Y2ggbWlzdW5kZXJzdGFuZGluZy4NCj4gPiA+Pj4+Pj4NCj4gPiA+Pj4+Pj4+ DQo+ID4gPj4+Pj4+PiBBbHNvLCBob3cgaXMgcnRlX2V0aF90eF9wcmVwYXJlKCkgc3VwcG9zZWQg dG8gd29yayBmb3IgY2xvbmVkDQo+ID4gPj4gcGFja2V0cw0KPiA+ID4+Pj4+PiBlZ3Jlc3Npbmcg b24gZGlmZmVyZW50IE5JQyBoYXJkd2FyZT8NCj4gPiA+Pj4+Pj4NCj4gPiA+Pj4+Pj4gSWYgeW91 IGNyZWF0ZSBhIGNsb25lIG9mIGZ1bGwgcGFja2V0IChpbmNsdWRpbmcgTDIvTDMpIGhlYWRlcnMN Cj4gPiA+PiB0aGVuDQo+ID4gPj4+Pj4+IG9idmlvdXNseSBzdWNoIGNvbnN0cnVjdGlvbiBtaWdo dCBub3QNCj4gPiA+Pj4+Pj4gd29yayBwcm9wZXJseSB3aXRoIHR4X3ByZXBhcmUoKSBvdmVyIHR3 byBkaWZmZXJlbnQgTklDcy4NCj4gPiA+Pj4+Pj4gVGhvdWdoIEluIG1ham9yaXR5IG9mIGNhc2Vz IHlvdSBkbyBjbG9uZSBzZWdtZW50cyB3aXRoIGRhdGEsDQo+ID4gPj4gd2hpbGUgYXQNCj4gPiA+ Pj4+Pj4gbGVhc3QgTDIgaGVhZGVycyBhcmUgcHV0IGludG8gZGlmZmVyZW50IHNlZ21lbnRzLg0K PiA+ID4+Pj4+PiBPbmUgc2ltcGxlIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGtlZXAgTDMgaGVhZGVy IGluIHRoYXQgc2VwYXJhdGUNCj4gPiA+PiBzZWdtZW50Lg0KPiA+ID4+Pj4+PiBCdXQgeWVzLCB0 aGVyZSBpcyBhIHByb2JsZW0gd2hlbiB5b3UnbGwgbmVlZCB0byBzZW5kIGV4YWN0bHkgdGhlDQo+ ID4gPj4gc2FtZQ0KPiA+ID4+Pj4+PiBwYWNrZXQgb3ZlciBkaWZmZXJlbnQgTklDcy4NCj4gPiA+ Pj4+Pj4gQXMgSSByZW1lbWJlciwgZm9yIGJvbmRpbmcgUE1EIHRoaW5ncyBkb24ndCB3b3JrIHF1 aXRlIHdlbGwgaGVyZQ0KPiA+ID4+IC0geW91DQo+ID4gPj4+Pj4+IG1pZ2h0IGhhdmUgYSBib25k IG92ZXIgMiBOSUNzIHdpdGgNCj4gPiA+Pj4+Pj4gZGlmZmVyZW50IHR4X3ByZXBhcmUoKSBhbmQg d2hpY2ggb25lIHRvIGNhbGwgbWlnaHQgYmUgbm90IGNsZWFyDQo+ID4gPj4gdGlsbA0KPiA+ID4+ Pj4+PiBhY3R1YWwgUE1EIHR4X2J1cnN0KCkgaXMgaW52b2tlZC4NCj4gPiA+Pj4+Pj4NCj4gPiA+ Pj4+Pj4+DQo+ID4gPj4+Pj4+PiBJbiB0aGVvcnksIGl0IG1pZ2h0IGdldCBldmVuIHdvcnNlIGlm IHdlIG1ha2UgdGhpcyBvcGFxdWUNCj4gPiA+PiBpbnN0ZWFkIG9mDQo+ID4gPj4+Pj4+IHRyYW5z cGFyZW50IGFuZCBzdGFuZGFyZGl6ZWQ6DQo+ID4gPj4+Pj4+PiBPbmUgUE1EIG1pZ2h0IHJlc2V0 IG91dF9pcCBjaGVja3N1bSB0byAweDAwMDAsIGFuZCBhbm90aGVyIFBNRA0KPiA+ID4+IG1pZ2h0 DQo+ID4gPj4+Pj4+IHJlc2V0IGl0IHRvIDB4RkZGRi4NCj4gPiA+Pj4+Pj4NCj4gPiA+Pj4+Pj4+ DQo+ID4gPj4+Pj4+PiBJIGNhbiBvbmx5IHNlZSBvbmUgc29sdXRpb246DQo+ID4gPj4+Pj4+PiBX ZSBuZWVkIHRvIHN0YW5kYXJkaXplIG9uIGNvbW1vbiBtaW5pbXVtIHJlcXVpcmVtZW50cyBmb3Ig aG93DQo+ID4gPj4gdG8NCj4gPiA+Pj4+Pj4gcHJlcGFyZSBwYWNrZXRzIGZvciBlYWNoIFRYIG9m ZmxvYWQuDQo+ID4gPj4+Pj4+DQo+ID4gPj4+Pj4+IElmIHdlIGNhbiBtYWtlIGVhY2ggYW5kIGV2 ZXJ5IHZlbmRvciB0byBhZ3JlZSBoZXJlIC0gdGhhdA0KPiA+ID4+IGRlZmluaXRlbHkNCj4gPiA+ Pj4+Pj4gd2lsbCBoZWxwIHRvIHNpbXBsaWZ5IHRoaW5ncyBxdWl0ZSBhIGJpdC4NCj4gPiA+Pj4+ Pg0KPiA+ID4+Pj4+IEFuIEFQSSBpcyBtb3JlIHRoYW4gYSBmdW5jdGlvbiBuYW1lIGFuZCBwYXJh bWV0ZXJzLg0KPiA+ID4+Pj4+IEl0IGFsc28gaGFzIHByZWNvbmRpdGlvbnMgYW5kIHBvc3Rjb25k aXRpb25zLg0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gQWxsIG1ham9yIE5JQyB2ZW5kb3JzIGFyZSBj b250cmlidXRpbmcgdG8gRFBESy4NCj4gPiA+Pj4+PiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8g cmVhY2ggY29uc2Vuc3VzIGZvciByZWFzb25hYmxlIG1pbmltdW0NCj4gPiA+PiByZXF1aXJlbWVu dHMNCj4gPiA+Pj4+IGZvciBvZmZsb2Fkcy4NCj4gPiA+Pj4+PiBIYXJkd2FyZS0gYW5kIGRyaXZl ci1zcGVjaWZpYyBleGNlcHRpb25zIGNhbiBiZSBkb2N1bWVudGVkIHdpdGgNCj4gPiA+PiB0aGUg b2ZmbG9hZA0KPiA+ID4+Pj4gZmxhZywgb3Igd2l0aCBydGVfZXRoX3J4L3R4X2J1cnN0KCksIGxp a2UgdGhlIG5vdGUgdG8NCj4gPiA+Pj4+PiBydGVfZXRoX3J4X2J1cnN0KCk6DQo+ID4gPj4+Pj4g IlNvbWUgZHJpdmVycyB1c2luZyB2ZWN0b3IgaW5zdHJ1Y3Rpb25zIHJlcXVpcmUgdGhhdCBuYl9w a3RzIGlzDQo+ID4gPj4gZGl2aXNpYmxlIGJ5DQo+ID4gPj4+PiA0IG9yIDgsIGRlcGVuZGluZyBv biB0aGUgZHJpdmVyIGltcGxlbWVudGF0aW9uLiINCj4gPiA+Pj4+DQo+ID4gPj4+PiBJZiB3ZSBp bnRyb2R1Y2UgYSBydWxlIHRoYXQgZXZlcnlvbmUgc3VwcG9zZWQgdG8gZm9sbG93IGFuZCB0aGVu DQo+ID4gPj4gc3RyYWlnaHR3YXkNCj4gPiA+Pj4+IGFsbG93IHBlb3BsZSB0byBoYXZlIGEgJ2Rv Y3VtZW50ZWQgZXhjZXB0aW9ucycsDQo+ID4gPj4+PiBmb3IgbWUgaXQgbWVhbnMgbGlrZSAnbm8g cnVsZScgaW4gcHJhY3RpY2UuDQo+ID4gPj4+PiBBICdkb2N1bWVudGVkIGV4Y2VwdGlvbnMnIGFw cHJvYWNoIG1pZ2h0IHdvcmsgaWYgeW91IGhhdmUgNQ0KPiA+ID4+IGRpZmZlcmVudCBQTURzIHRv DQo+ID4gPj4+PiBzdXBwb3J0LCBidXQgbm90IHdoZW4geW91IGhhdmUgNTArLg0KPiA+ID4+Pj4g Tm8tb25lIHdvdWxkIHdyaXRlIGFuIGFwcCB3aXRoIHBvc3NpYmxlIDEwIGRpZmZlcmVudCBleGNl cHRpb24NCj4gPiBjYXNlcw0KPiA+ID4+IGluIGhpcw0KPiA+ID4+Pj4gaGVhZC4NCj4gPiA+Pj4+ IEFnYWluLCB3aXRoIHN1Y2ggYXBwcm9hY2ggd2UgY2FuIGZvcmdldCBhYm91dCBiYWNrd2FyZA0K PiA+ID4+IGNvbXBhdGliaWxpdHkuDQo+ID4gPj4+PiBJIHRoaW5rIHdlIGFscmVhZHkgaGFkIHRo aXMgZGlzY3Vzc2lvbiBiZWZvcmUsIG15IG9waW5pb24gcmVtYWlucw0KPiA+ID4+IHRoZSBzYW1l DQo+ID4gPj4+PiBoZXJlIC0NCj4gPiA+Pj4+ICdkb2N1bWVudGVkIGV4Y2VwdGlvbnMnIGFwcHJv YWNoIGlzIGEgd2F5IHRvIHRyb3VibGUuDQo+ID4gPj4+DQo+ID4gPj4+IFRoZSAibWluaW11bSBy ZXF1aXJlbWVudHMiIHNob3VsZCBiZSB0aGUgbG93ZXN0IGNvbW1vbiBkZW5vbWluYXRvcg0KPiA+ IG9mDQo+ID4gPj4gYWxsIE5JQ3MuDQo+ID4gPj4+IEV4Y2VwdGlvbnMgc2hvdWxkIGJlIGV4dHJl bWVseSBmZXcsIGZvciBvdXRsaWVyIE5JQ3MgdGhhdCBzdGlsbCB3YW50DQo+ID4gPj4gdG8gcHJv dmlkZSBhbiBvZmZsb2FkIGFuZCBpdHMgZHJpdmVyIGlzIHVuYWJsZSB0byBsaXZlIHVwIHRvIHRo ZQ0KPiA+ID4+PiBtaW5pbXVtIHJlcXVpcmVtZW50cy4NCj4gPiA+Pj4gQW55IGV4Y2VwdGlvbiBz aG91bGQgcmVxdWlyZSB0ZWNoYm9hcmQgYXBwcm92YWwuIElmIGEgTklDL2RyaXZlcg0KPiA+IGRv ZXMNCj4gPiA+PiBub3Qgc3VwcG9ydCB0aGUgIm1pbmltdW0gcmVxdWlyZW1lbnRzIiBmb3IgYW4g b2ZmbG9hZA0KPiA+ID4+PiBmZWF0dXJlLCBpdCBpcyBub3QgYWxsb3dlZCB0byBjbGFpbSBzdXBw b3J0IGZvciB0aGF0IG9mZmxvYWQNCj4gPiBmZWF0dXJlLA0KPiA+ID4+IG9yIG5lZWRzIHRvIHNl ZWsgYXBwcm92YWwgZm9yIGFuIGV4Y2VwdGlvbi4NCj4gPiA+Pj4NCj4gPiA+Pj4gQXMgYW5vdGhl ciBvcHRpb24gZm9yIE5JQ3Mgbm90IHN1cHBvcnRpbmcgdGhlIG1pbmltdW0gcmVxdWlyZW1lbnRz DQo+ID4gb2YNCj4gPiA+PiBhbiBvZmZsb2FkIGZlYXR1cmUsIHdlIGNvdWxkIGludHJvZHVjZSBv ZmZsb2FkIGZsYWdzIHdpdGgNCj4gPiA+Pj4gZmluZXIgZ3JhbnVsYXJpdHkuIEUuZy4gb25lIG9m ZmxvYWQgZmxhZyBmb3IgImdvbGQgc3RhbmRhcmQiIFRYDQo+ID4gPj4gY2hlY2tzdW0gdXBkYXRl ICh3aGVyZSB0aGUgcGFja2V0J3MgY2hlY2tzdW0gZmllbGQgY2FuIGhhdmUgYW55DQo+ID4gPj4+ IHZhbHVlKSwgYW5kIGFub3RoZXIgb2ZmbG9hZCBmbGFnIGZvciAic2lsdmVyIHN0YW5kYXJkIiBU WCBjaGVja3N1bQ0KPiA+ID4+IHVwZGF0ZSAod2hlcmUgdGhlIHBhY2tldCdzIGNoZWNrc3VtIGZp ZWxkIG11c3QgaGF2ZSBhDQo+ID4gPj4+IHByZWNvbXB1dGVkIHZhbHVlKS4NCj4gPiA+Pg0KPiA+ ID4+IEFjdHVhbGx5IHllcywgSSB3YXMgdGhpbmtpbmcgaW4gdGhlIHNhbWUgZGlyZWN0aW9uIC0g d2UgbmVlZCBzb21lDQo+ID4gZXh0cmENCj4gPiA+PiBBUEkgdG8gYWxsb3cgdXNlciB0byBkaXN0 aW5ndWlzaC4NCj4gPiA+PiBQcm9iYWJseSB3ZSBjYW4gZG8gc29tZXRoaW5nIGxpa2UgdGhhdDog YSBuZXcgQVBJIGZvciB0aGUgZXRoZGV2IGNhbGwNCj4gPiA+PiB0aGF0IHdvdWxkIHRha2UgYXMg YSBwYXJhbWV0ZXINCj4gPiA+PiBUWCBvZmZsb2FkcyBiaXRtYXAgYW5kIGluIHJldHVybiBzcGVj aWZ5IHdvdWxkIGl0IG5lZWQgdG8gbW9kaWZ5DQo+ID4gPj4gY29udGVudHMgb2YgcGFja2V0IHRv IHN1cHBvcnQgdGhlc2UNCj4gPiA+PiBvZmZsb2FkcyBvciBub3QuDQo+ID4gPj4gU29tZXRoaW5n IGxpa2U6DQo+ID4gPj4gaW50IHJ0ZV9ldGhkZXZfdHhfb2ZmbG9hZF9wa3RfbW9kX3JlcXVpcmVk KHVudDY0X3QgdHhfb2ZmbG9hZHMpDQo+ID4gPj4NCj4gPiA+PiBGb3IgdGhlIG1ham9yaXR5IG9m IHRoZSBkcml2ZXJzIHRoYXQgc2F0aXNmeSB0aGVzZSAibWluaW11bQ0KPiA+ID4+IHJlcXVpcmVt ZW50cyIgY29ycmVzcG9uZGluZyBkZXZvcHMNCj4gPiA+PiBlbnRyeSB3aWxsIGJlIGVtcHR5IGFu ZCB3ZSdsbCBhbHdheXMgcmV0dXJuIDAsIG90aGVyd2lzZSBQTUQgaGFzIHRvDQo+ID4gPj4gcHJv dmlkZSBhIHByb3BlciBkZXZvcC4NCj4gPiA+PiBUaGVuIGFnYWluLCBpdCB3b3VsZCBiZSB1cCB0 byB0aGUgdXNlciwgdG8gZGV0ZXJtaW5lIGNhbiBoZSBwYXNzIHNhbWUNCj4gPiA+PiBwYWNrZXQg dG8gMiBkaWZmZXJlbnQgTklDcyBvciBub3QuDQo+ID4gPj4NCj4gPiA+PiBJIHN1cHBvc2UgaXQg aXMgc2ltaWxhciB0byB3aGF0IHlvdSB3ZXJlIHRhbGtpbmcgYWJvdXQ/DQo+ID4gPg0KPiA+ID4g SSB3YXMgdGhpbmtpbmcgc29tZXRoaW5nIG1vcmUgc2ltcGxlOg0KPiA+ID4NCj4gPiA+IFRoZSBO SUMgZXhwb3NlcyBpdHMgUlggYW5kIFRYIG9mZmxvYWQgY2FwYWJpbGl0aWVzIHRvIHRoZSBhcHBs aWNhdGlvbg0KPiA+IHRocm91Z2ggdGhlIHJ4L3R4X29mZmxvYWRfY2FwYSBhbmQgb3RoZXIgZmll bGRzIGluIHRoZSBydGVfZXRoX2Rldl9pbmZvDQo+ID4gc3RydWN0dXJlIHJldHVybmVkIGJ5IHJ0 ZV9ldGhfZGV2X2luZm9fZ2V0KCkuDQo+ID4gPg0KPiA+ID4gRS5nLiB0eF9vZmZsb2FkX2NhcGEg bWlnaHQgaGF2ZSB0aGUgUlRFX0VUSF9UWF9PRkZMT0FEX0lQVjRfQ0tTVU0gZmxhZw0KPiA+IHNl dC4NCj4gPiA+IFRoZXNlIGNhcGFiaWxpdHkgZmxhZ3MgKG9yIGVudW1zKSBhcmUgbW9zdGx5IHVu ZG9jdW1lbnRlZCBpbiB0aGUgY29kZSwNCj4gPiBidXQgSSBndWVzcyB0aGF0IHRoZSBSVEVfRVRI X1RYX09GRkxPQURfSVBWNF9DS1NVTSBjYXBhYmlsaXR5IG1lYW5zIHRoYXQNCj4gPiB0aGUgTklD IGlzIGFibGUgdG8gdXBkYXRlIHRoZSBJUHY0IGhlYWRlciBjaGVja3N1bSBhdCBlZ3Jlc3MgKG9u IHRoZQ0KPiA+IHdpcmUsIGkuZS4gd2l0aG91dCBtb2RpZnlpbmcgdGhlIG1idWYgb3IgcGFja2V0 IGRhdGEpLCBhbmQgdGhhdCB0aGUNCj4gPiBhcHBsaWNhdGlvbiBtdXN0IHNldCBSVEVfTUJVRl9G X1RYX0lQX0NLU1VNIGluIHRoZSBtYnVmcyB0byB1dGlsaXplIHRoaXMNCj4gPiBvZmZsb2FkLg0K PiA+ID4gSSB3b3VsZCBkZWZpbmUgYW5kIGRvY3VtZW50IHdoYXQgZWFjaCBjYXBhYmlsaXR5IGZs YWcvZW51bSBleGFjdGx5DQo+ID4gbWVhbnMsIHRoZSBtaW5pbXVtIHJlcXVpcmVtZW50cyAoYXMg ZGVmaW5lZCBieSB0aGUgRFBESyBjb21tdW5pdHkpIGZvcg0KPiA+IHRoZSBkcml2ZXIgdG8gY2xh aW0gc3VwcG9ydCBmb3IgaXQsIGFuZCB0aGUgcmVxdWlyZW1lbnRzIGZvciBhbg0KPiA+IGFwcGxp Y2F0aW9uIHRvIHVzZSBpdC4NCj4gPiA+DQo+ID4NCj4gPiArMSB0byBpbXByb3ZlIGRvY3VtZW50 YXRpb24sIGFuZCBjbGVhciBvZmZsb2FkIHdoZXJlIGl0IGlzIG5lZWRlZC4NCj4gPg0KPiA+IEFu b3RoZXIgZ2FwIGlzIGluIHRlc3RpbmcsIHdoZW5ldmVyIGEgZGV2aWNlL2RyaXZlciBjbGFpbXMg YW4gb2ZmbG9hZA0KPiA+IGNhcGFiaWxpdHksIHdlIGRvbid0IGhhdmUgYSB0ZXN0IHN1aXQgdG8g Y29uZmlybSBhbmQgdmVyaWZ5IHRoaXMgY2xhaW0uDQo+IA0KPiBZZXAsIGNvbmZvcm1hbmNlIHRl c3RpbmcgaXMgbGFja2luZyBiaWcgdGltZSBpbiBvdXIgQ0kuDQo+IEFkZGluZyB0aGUgdHMtZmFj dG9yeSB0ZXN0cyB0byB0aGUgQ0kgd2FzIGEgYmlnIHN0ZXAgaW4gdGhpcyBkaXJlY3Rpb24uDQo+ IEJ1dCBmb3Igbm93LCB3ZSBhcmUgbW9zdGx5IHJlbHlpbmcgb24gdmVuZG9yJ3MgaW50ZXJuYWwg dGVzdGluZy4NCj4gDQo+ID4NCj4gPg0KPiA+ID4gRm9yIHRoZSBzYWtlIG9mIGRpc2N1c3Npb24s IGxldCdzIHNheSB0aGF0DQo+ID4gUlRFX0VUSF9UWF9PRkZMT0FEX0lQVjRfQ0tTVU0gbWVhbnMg ImdvbGQgc3RhbmRhcmQiIFRYIGNoZWNrc3VtIHVwZGF0ZQ0KPiA+IGNhcGFiaWxpdHkgKGkuZS4g bm8gcmVxdWlyZW1lbnRzIHRvIHRoZSBjaGVja3N1bSBmaWVsZCBpbiB0aGUgcGFja2V0DQo+ID4g Y29udGVudHMpLg0KPiA+ID4gSWYgc29tZSBOSUMgcmVxdWlyZXMgdGhlIGNoZWNrc3VtIGZpZWxk IGluIHRoZSBwYWNrZXQgY29udGVudHMgdG8gaGF2ZQ0KPiA+IGEgcHJlY29tcHV0ZWQgdmFsdWUs IHRoZSBOSUMgd291bGQgbm90IGJlIGFsbG93ZWQgdG8gY2xhaW0gdGhlDQo+ID4gUlRFX0VUSF9U WF9PRkZMT0FEX0lQVjRfQ0tTVU0gY2FwYWJpbGl0eS4NCj4gPiA+IFN1Y2ggYSBOSUMgd291bGQg bmVlZCB0byBkZWZpbmUgYW5kIGRvY3VtZW50IGEgbmV3IGNhcGFiaWxpdHksIGUuZy4NCj4gPiBS VEVfRVRIX1RYX09GRkxPQURfSVBWNF9DS1NVTV9BU1NJU1RFRCwgZm9yIHRoZSAic2lsdmVyIHN0 YW5kYXJkIiBUWA0KPiA+IGNoZWNrc3VtIHVwZGF0ZSBjYXBhYmlsaXR5Lg0KPiA+ID4NCj4gPiA+ IEluIG90aGVyIHdvcmRzOiBJIHdvdWxkIGVuY29kZSB2YXJpYXRpb25zIG9mIG9mZmxvYWQgY2Fw YWJpbGl0aWVzDQo+ID4gZGlyZWN0bHkgaW4gdGhlIGNhcGFiaWxpdGllcyBmbGFncy4NCj4gPiA+ IFRoZW4gd2UgZG9uJ3QgbmVlZCBhZGRpdGlvbmFsIEFQSXMgdG8gaGVscCBpbnRlcnByZXQgdGhv c2UNCj4gPiBjYXBhYmlsaXRpZXMuDQo+ID4gPg0KPiA+ID4gVGhpcyB3YXksIHRoZSBhcHBsaWNh dGlvbiBjYW4gcHJvYmUgdGhlIE5JQyBjYXBhYmlsaXRpZXMgdG8gZGV0ZXJtaW5lDQo+ID4gd2hh dCBjYW4gYmUgb2ZmbG9hZGVkLCBhbmQgaG93IHRvIGRvIGl0Lg0KPiA+ID4NCj4gPiA+IFRoZSBh cHBsaWNhdGlvbiBjYW4gYmUgZGVzaWduZWQgdG86DQo+ID4gPiAxLiB1c2UgYSBjb21tb24gcGFj a2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUsIHV0aWxpemluZyBvbmx5IHRoZSBsb3dlc3QNCj4gPiBj b21tb24gY2FwYWJpbGl0aWVzIGRlbm9taW5hdG9yIG9mIGFsbCBkZXRlY3RlZCBOSUNzLCBvcg0K PiA+ID4gMi4gdXNlIGEgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUsIGhhbmRsaW5nIHBhY2tl dHMgZGlmZmVyZW50bHkNCj4gPiBhY2NvcmRpbmcgdG8gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUg aW52b2x2ZWQgTklDcy4NCj4gPiA+DQo+ID4NCj4gPiBPZmZsb2FkIGNhcGFiaWxpdGllcyBhcmUg YWxyZWFkeSBwcm92aWRlZCB0byBlbmFibGUgYXBwbGljYXRpb25zIGFzIHlvdQ0KPiA+IG1lbnRp b25lZCBhYm92ZS4NCj4gPg0KPiA+IEFncmVlIHRoYXQgJ19BU1NJU1RFRCcgY2FwYWJpbGl0eSBm bGFncyBnaXZlcyBtb3JlIGRldGFpbHMgdG8NCj4gPiBhcHBsaWNhdGlvbiB0byBtYW5hZ2UgaXQg YnV0IG15IGNvbmNlcm4gaXMgaXQgY29tcGxpY2F0ZXMgb2ZmbG9hZGluZw0KPiA+IG1vcmUuDQo+ ID4NCj4gPiBUaGUgbnVtYmVyIG9mICJhc3Npc3RlZCIgb2ZmbG9hZHMgaXMgbm90IG11Y2gsIG1h aW5seSBpdCBpcyBmb3IgY2tzdW0uDQo+ID4gQ3VycmVudCBhcHByb2FjaCBpcyBzaW1wbGVyLCBk ZXZpY2VzIHJlcXVpcmVzIHByZWNvbmRpdGlvbiBpbXBsZW1lbnRzIGl0DQo+ID4gaW4gJ3R4X3By ZXBhcmUnIGFuZCBhcHBsaWNhdGlvbiB1c2luZyB0aGVzZSBvZmZsb2FkcyBjYWxscyBiZWZvcmUN Cj4gPiAndHhfYnVyc3QnLiBEZXZpY2UvZHJpdmVycyBkb2Vzbid0IHJlcXVpcmUgaXQgZG9uJ3Qg aGF2ZSAndHhfcHJlcGFyZScgc28NCj4gPiBubyBpbXBhY3QgdG8gdGhlIGFwcGxpY2F0aW9uLg0K PiA+DQo+ID4gV2lsbCBpdCB3b3JrIHRvIGhhdmUgc29tZXRoaW5nIGluIGJldHdlZW4sIGFub3Ro ZXIgY2FwYWJpbGl0eSB0byBob2xkIGlmDQo+ID4gJ3R4X3ByZXBhcmUnIG5lZWRzIHRvIGJlIGNh bGxlZCB3aXRoIHRoaXMgZGV2aWNlIG9yIG5vdD8NCj4gPiBJdCBjYW4gYmUgcG9zc2libGUgdG8g bWFrZSB0aGlzIHZhcmlhYmxlIDMyYml0cyB0aGF0IGhvbGRzIG9mZmxvYWRzDQo+ID4gcmVxdWly ZSBhc3Npc3RhbmNlIGluIGEgYml0LXdpc2Ugd2F5LCBidXQgSSBwcmVmZXIgc2ltcGxlIGlmDQo+ ID4gJ3R4X3ByZXBhcmUnIHJlcXVpcmVkIGZsYWcsIHRoaXMgbWF5IGhlbHAgYXBwbGljYXRpb24g dG8gZGVjaWRlIHRvIHVzZQ0KPiA+IG9mZmxvYWRzIGluIHRoYXQgZGV2aWNlIGFuZCB0byBjYWxs ICd0eF9wcmVwYXJlJyBvciBub3QuDQo+IA0KPiBDb25zaWRlciBhbiBJUCBNdWx0aWNhc3QgcGFj a2V0IHRvIGJlIHRyYW5zbWl0dGVkIG9uIG1hbnkgcG9ydHMuDQo+IA0KPiBXaXRoIG15IHN1Z2dl c3Rpb24sIHRoZSBwYWNrZXQgY2FuIGJlIHByZXBhcmVkIG9uY2UgLSBpLmUuIHRoZSBvdXRwdXQv Zm9yd2FyZGluZyBzdGFnZSBzZXRzIHRoZSBJUCBoZWFkZXIgY2hlY2tzdW0gYXMgcmVxdWlyZWQg YnkNCj4gdGhlIChsb3dlc3QgY29tbW9uIGRlbm9taW5hdG9yKSBvZmZsb2FkIGNhcGFiaWxpdGll cyBmbGFnIC0gYmVmb3JlIGJlaW5nIGNsb25lZCBmb3IgdHgoKSBvbiBlYWNoIHBvcnQuDQo+IA0K PiBXaXRoIHR4X3ByZXBhcmUoKSwgdGhlIHBhY2tldCBuZWVkcyB0byBiZSBjb3BpZWQgKGRlZXAg Y29weSEpIGZvciBlYWNoIHBvcnQsIGFuZCB0aGVuIHR4X3ByZXBhcmUoKSBuZWVkcyB0byBiZSBj YWxsZWQgZm9yIGVhY2ggcG9ydA0KPiBiZWZvcmUgdHgoKS4NCg0KTm90IHJlYWxseS4gQXQgbGVh c3Qgbm90IGFsd2F5cy4NCkxldCBzYXkgZm9yIG11bHRpY2FzdCwgeW91J2xsIG1vc3QgbGlrZWx5 IHdpbGwgbmVlZCB0byBoYXZlIGEgZGlmZmVyZW50IEwyIGhlYWRlciBmb3IgZWFjaCBldGhkZXYg cG9ydCBhbnl3YXkuDQpVc3VhbCB3YXkgdG8gb3ZlcmNvbWUgaXQgLSBoYXZlIGEgc2VwYXJhdGUg c2VnbWVudCBmb3IgTDIgaGVhZGVyIGF0dGFjaGVkIHRvIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQg ZGF0YSBzZWdtZW50Lg0KTm90aGluZyBzdG9wcyB5b3UgdG8gaGF2ZSBpbm5lci9vdXRlciBMMy9M NCBoZWFkZXJzIGluIHRoYXQgJ2hlYWRlcicgc2VnbWVudCB0b28uDQpUaGVuIHlvdSBkbyBuZWVk IHRvIGhhdmUgYSBtdWx0aXBsZSBjb3BpZXMgb2YgZGF0YSBzZWdtZW50Lg0KDQpBY3R1YWxseSBh ZnRlciBhbm90aGVyIHRob3VnaHQgLSB0aGF0IG1pZ2h0IGJlIGEgc2ltcGxlIHdheSB0byBmaXgg cHJvYmxlbSB3aXRoIGJvbmRpbmcgUE1EOg0KYWxsb3cgaXQgdG8gY3JlYXRlIGEgJ2hlYWRlcicg c2VnbWVudHMgb24gbmVlZC4NCk5vdCBzdXJlIGhvdyBpdCB3aWxsIGFmZmVjdCBwZXJmb3JtYW5j ZSwgYnV0IHNob3VsZCBoZWxwIHRvIGF2b2lkIGN1cnJlbnQgcHJvYmxlbSB3aGVuIHBhY2tldCBj b250ZW50cw0KYXJlIG1vZGlmaWVkIGluIHR4X2J1cnN0KCkuDQoNCj4gVGhlIG9wYXF1ZSB0eF9w cmVwYXJlKCkgY29uY2VwdCB2aW9sYXRlcyB0aGUgY29uY2VwdCBvZiBub3QgbW9kaWZ5aW5nIHRo ZSBwYWNrZXQgYXQgZWdyZXNzLg0KIA0KVGhhdCBhY3R1YWxseSBkZXBlbmRzIHdoZXJlIHlvdSBk cmF3IGEgbGluZSBmb3IgZWdyZXNzOiBiZWZvcmUgb3IgYWZ0ZXIgdHhfcHJlcGFyZSgpLiANCg0K PiBEUERLIGZvbGxvd3MgYSBwcmluY2lwbGUgb2Ygbm90IHVzaW5nIG9wYXF1ZSB0eXBlcywgc28g YXBwbGljYXRpb24gZGV2ZWxvcGVycyBjYW4gb3B0aW1pemUgYWNjb3JkaW5nbHkuIFRoZSBvcGFx dWUgYmVoYXZpb3Igb2YNCj4gdHhfcHJlcGFyZSgpIHZpb2xhdGVzIHRoaXMgcHJpbmNpcGxlLCBh bmQgSSBjb25zaWRlciBpdCBhIGhvcnJpYmxlIGhhY2shDQo+ID4NCj4gPiA+IE5COiBUaGVyZSBt YXkgYmUgb3RoZXIgdmFyaWF0aW9ucyB0aGFuIHJlcXVpcmluZyBwYWNrZXQgY29udGVudHMgdG8g YmUNCj4gPiBtb2RpZmllZCwgYW5kIHRoZXkgbWlnaHQgYmUgZ3JhbnVsYXIuDQo+ID4gPiBFLmcu IGEgTklDIG1pZ2h0IHJlcXVpcmUgYXNzaXN0YW5jZSBmb3IgVENQL1VEUCBjaGVja3N1bSBvZmZs b2FkLCBidXQNCj4gPiBub3QgZm9yIElQIGNoZWNrc3VtIG9mZmxvYWQsIHNvIGEgZnVuY3Rpb24g dGVsbGluZyBpZiBwYWNrZXQgY29udGVudHMNCj4gPiByZXF1aXJlcyBtb2RpZmljYXRpb24gd291 bGQgbm90IHN1ZmZpY2UuDQo+ID4gPiBFLmcuIFJURV9FVEhfVFhfT0ZGTE9BRF9NVUxUSV9TRUdT IGlzIGRlZmluZWQsIGJ1dCB0aGUNCj4gPiBydGVfZXRoX2Rldl9pbmZvIHN0cnVjdHVyZSBkb2Vz bid0IGV4cG9zZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWF4DQo+ID4gbnVtYmVyIG9mIHNlZ21l bnRzIGl0IGNhbiBoYW5kbGUuDQo+ID4gPg0KPiA+DQo+ID4gQW5vdGhlciBnb29kIHBvaW50IHRv IHJlcG9ydCBtYXggbnVtYmVyIG9mIHNlZ21lbnQgY2FuIGJlIGhhbmRsZWQsICsxDQo+ID4NCj4g Pg0KPiA+ID4gUFM6IEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2UgbWlnaHQgZGVmaW5l DQo+ID4gUlRFX0VUSF9UWF9PRkZMT0FEX0lQVjRfQ0tTVU0gYXMgdGhlICJzaWx2ZXIgc3RhbmRh cmQiIG9mZmxvYWQgdG8NCj4gPiBzdXBwb3J0IHRoZSBjdXJyZW50ICJtaW5pbXVtIHJlcXVpcmVt ZW50cyIsIGFuZCBhZGQNCj4gPiBSVEVfRVRIX1RYX09GRkxPQURfSVBWNF9DS1NVTV9BTlkgZm9y IHRoZSAiZ29sZCBzdGFuZGFyZCIgb2ZmbG9hZC4NCj4gPiA+DQo+ID4gPg0KPiA+ID4+DQo+ID4g Pj4+IEZvciByZWZlcmVuY2UsIGNvbnNpZGVyIFJTUywgd2hlcmUgdGhlIGZlYXR1cmUgc3VwcG9y dCBmbGFncyBoYXZlDQo+ID4gdmVyeQ0KPiA+ID4+IGhpZ2ggZ3JhbnVsYXJpdHkuDQo+ID4gPj4+ DQo+ID4gPj4+Pg0KPiA+ID4+Pj4+IFlvdSBtZW50aW9uIHRoZSBib25kaW5nIGRyaXZlciwgd2hp Y2ggaXMgYSBnb29kIGV4YW1wbGUuDQo+ID4gPj4+Pj4gVGhlIHJ0ZV9ldGhfdHhfYnVyc3QoKSBk b2N1bWVudGF0aW9uIGhhcyBhIG5vdGUgYWJvdXQgdGhlIEFQSQ0KPiA+ID4+IHBvc3Rjb25kaXRp b24NCj4gPiA+Pj4+IGV4Y2VwdGlvbiBmb3IgdGhlIGJvbmRpbmcgZHJpdmVyOg0KPiA+ID4+Pj4+ ICJUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IG1vZGlmeSBtYnVmcyAoaW5jbHVkaW5nIHBhY2tldHMg ZGF0YSkNCj4gPiA+PiB1bmxlc3MgdGhlDQo+ID4gPj4+PiByZWZjbnQgaXMgMS4gQW4gZXhjZXB0 aW9uIGlzIHRoZSBib25kaW5nIFBNRCwgWy4uLl0sIG1idWZzDQo+ID4gPj4+Pj4gbWF5IGJlIG1v ZGlmaWVkLiINCj4gPiA+Pj4+DQo+ID4gPj4+PiBGb3IgbWUsIHdoYXQgd2UndmUgZG9uZSBmb3Ig Ym9uZGluZyB0eF9wcmVwYXJlL3R4X2J1cnN0KCkgaXMgYQ0KPiA+ID4+IHJlYWxseSBiYWQNCj4g PiA+Pj4+IGV4YW1wbGUuDQo+ID4gPj4+PiBJbml0aWFsIGFncmVlbWVudCBhbmQgZGVzaWduIGNo b2ljZSB3YXMgdGhhdCB0eF9idXJzdCgpIHNob3VsZCBub3QNCj4gPiA+PiBtb2RpZnkNCj4gPiA+ Pj4+IGNvbnRlbnRzIG9mIHRoZSBwYWNrZXRzDQo+ID4gPj4+PiAodGhhdCBhY3R1YWxseSB3YXMg b25lIG9mIHRoZSByZWFzb25zIHdoeSB0eF9wcmVwYXJlKCkgd2FzDQo+ID4gPj4gaW50cm9kdWNl ZCkuDQo+ID4gPj4+PiBUaGUgb25seSByZWFzb24gSSBhZ3JlZWQgb24gdGhhdCBleGNlcHRpb24g LSBiZWNhdXNlIEkgY291bGRuJ3QNCj4gPiA+PiBjb21lLXVwIHdpdGgNCj4gPiA+Pj4+IHNvbWV0 aGluZyBsZXNzIHVnbGllci4NCj4gPiA+Pj4+DQo+ID4gPj4+PiBBY3R1YWxseSwgdGhlc2UgcHJv YmxlbXMgd2l0aCBib25kaW5nIFBNRCBtYWRlIG1lIHRvIHN0YXJ0IHRoaW5raW5nDQo+ID4gPj4g dGhhdA0KPiA+ID4+Pj4gY3VycmVudA0KPiA+ID4+Pj4gdHhfcHJlcGFyZS90eF9idXJzdCBhcHBy b2FjaCBtaWdodCBuZWVkIHRvIGJlIHJlY29uc2lkZXJlZCBzb21laG93Lg0KPiA+ID4+Pg0KPiA+ ID4+PiBJbiBjYXNlcyB3aGVyZSBhIHByZWNlZGluZyBjYWxsIHRvIHR4X3ByZXBhcmUoKSBpcyBy ZXF1aXJlZCwgaG93IGlzDQo+ID4gaXQNCj4gPiA+PiB3b3JzZSBtb2RpZnlpbmcgdGhlIHBhY2tl dCBpbiB0eF9idXJzdCgpIHRoYW4gbW9kaWZ5aW5nIHRoZQ0KPiA+ID4+PiBwYWNrZXQgaW4gdHhf cHJlcGFyZSgpPw0KPiA+ID4+Pg0KPiA+ID4+PiBCb3RoIGNhc2VzIHZpb2xhdGUgdGhlIHBvc3Rj b25kaXRpb24gdGhhdCBwYWNrZXRzIGFyZSBub3QgbW9kaWZpZWQNCj4gPiBhdA0KPiA+ID4+IGVn cmVzcy4NCj4gPiA+Pj4NCj4gPiA+Pj4+DQo+ID4gPj4+Pj4+IFRoZW4gd2UgY2FuIHByb2JhYmx5 IGhhdmUgb25lIGNvbW1vbiB0eF9wcmVwYXJlKCkgZm9yIGFsbA0KPiA+ID4+IHZlbmRvcnMgOykN Cj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+IFllcywgdGhhdCB3b3VsZCBiZSB0aGUgZ29hbC4NCj4gPiA+ Pj4+PiBNb3JlIHJlYWxpc3RpY2FsbHksIHRoZSBldGhkZXYgbGF5ZXIgY291bGQgcGVyZm9ybSB0 aGUgY29tbW9uDQo+ID4gPj4gY2hlY2tzLCBhbmQNCj4gPiA+Pj4+IG9ubHkgdGhlIG5vbi1jb25m b3JtaW5nIGRyaXZlcnMgd291bGQgaGF2ZSB0byBpbXBsZW1lbnQNCj4gPiA+Pj4+PiB0aGVpciBz cGVjaWZpYyB0d2Vha3MuDQo+ID4gPj4+Pg0KPiA+ID4+Pj4gSG1tLCAgYnV0IHRoYXQncyB3aGF0 IHdlIGhhdmUgcmlnaHQgbm93Og0KPiA+ID4+Pj4gLSBmaWVsZHMgaW4gbWJ1ZiBhbmQgcGFja2V0 IGRhdGEgdGhhdCB1c2VyIGhhcyB0byBmaWxsIGNvcnJlY3RseQ0KPiA+IGFuZA0KPiA+ID4+IGRl dg0KPiA+ID4+Pj4gc3BlY2lmaWMgdHhfcHJlcGFyZSgpLg0KPiA+ID4+Pj4gSG93IHdoYXQgeW91 IHN1Z2dlc3Qgd2lsbCBkaWZmZXIgdGhlbj8NCj4gPiA+Pj4NCj4gPiA+Pj4gWW91J3JlIDEwMCAl IHJpZ2h0IGhlcmUuIFdlIGNvdWxkIG1vdmUgbW9yZSBjaGVja3MgaW50byB0aGUgZXRoZGV2DQo+ ID4gPj4gbGF5ZXIsIHNwZWNpZmljYWxseSBjaGVja3MgcmVsYXRlZCB0byB0aGUgIm1pbmltdW0N Cj4gPiA+Pj4gcmVxdWlyZW1lbnRzIi4NCj4gPiA+Pj4NCj4gPiA+Pj4+IEFuZCBob3cgaXQgd2ls bCBoZWxwIGxldCBzYXkgd2l0aCBib25kaW5nIFBNRCBzaXR1YXRpb24sIG9yIHdpdGgNCj4gPiBU WC0NCj4gPiA+PiBpbmcgb2YgdGhlDQo+ID4gPj4+PiBzYW1lIHBhY2tldCBvdmVyIDIgZGlmZmVy ZW50IE5JQ3M/DQo+ID4gPj4+DQo+ID4gPj4+IFRoZSBib25kaW5nIGRyaXZlciBpcyBicm9rZW4u DQo+ID4gPj4+IEl0IGNhbiBvbmx5IGJlIGZpeGVkIGJ5IG5vdCB2aW9sYXRpbmcgdGhlIGVncmVz cyBwb3N0Y29uZGl0aW9uIGluDQo+ID4gPj4gZWl0aGVyIHR4X2J1cnN0KCkgb3IgdHhfcHJlcGFy ZSgpLg0KPiA+ID4+PiAiTWluaW11bSByZXF1aXJlbWVudHMiIG1pZ2h0IGhlbHAgZG9pbmcgdGhh dC4NCj4gPiA+Pj4NCj4gPiA+Pj4+DQo+ID4gPj4+Pj4gSWYgd2UgZG9uJ3Qgc3RhbmRhcmRpemUg dGhlIG1lYW5pbmcgb2YgdGhlIG9mZmxvYWQgZmxhZ3MsIHRoZQ0KPiA+ID4+IGFwcGxpY2F0aW9u DQo+ID4gPj4+PiBkZXZlbG9wZXJzIGNhbm5vdCB0cnVzdCB0aGVtIQ0KPiA+ID4+Pj4+IEknbSBh ZnJhaWQgdGhpcyBpcyB0aGUgY3VycmVudCBzaXR1YXRpb24gLSBhcHBsaWNhdGlvbiBkZXZlbG9w ZXJzDQo+ID4gPj4gZWl0aGVyDQo+ID4gPj4+PiB0ZXN0IHdpdGggc3BlY2lmaWMgTklDIGhhcmR3 YXJlLCBvciBkb24ndCB1c2UgdGhlIG9mZmxvYWQgZmVhdHVyZXMuDQo+ID4gPj4+Pg0KPiA+ID4+ Pj4gV2VsbCwgSSBoYXZlIHVzZWQgVFggb2ZmbG9hZHMgdGhyb3VnaCBzZXZlcmFsIHByb2plY3Rz LCBpdCB3b3JrZWQNCj4gPiA+PiBxdWl0ZSB3ZWxsLg0KPiA+ID4+Pg0KPiA+ID4+PiBUaGF0IGlz IGdvb2QgdG8gaGVhci4NCj4gPiA+Pj4gQW5kIEkgZG9uJ3Qgb3Bwb3NlIHRvIHRoYXQuDQo+ID4g Pj4+DQo+ID4gPj4+IEluIHRoaXMgZGlzY3Vzc2lvbiwgSSBhbSB3b3JyaWVkIGFib3V0IHRoZSBy b2FkbWFwIGRpcmVjdGlvbiBmb3INCj4gPiBEUERLLg0KPiA+ID4+PiBJIG9wcG9zZSB0byB0aGUg Y29uY2VwdCBvZiByZXF1aXJpbmcgY2FsbGluZyB0eF9wcmVwYXJlKCkgYmVmb3JlDQo+ID4gPj4g Y2FsbGluZyB0eF9idXJzdCgpIHdoZW4gdXNpbmcgb2ZmbG9hZC4gSSB0aGluayBpdCBpcyBjb25j ZXB0dWFsbHkNCj4gPiB3cm9uZywNCj4gPiA+Pj4gYW5kIGJyZWFrcyB0aGUgZWdyZXNzIHBvc3Rj b25kaXRpb24uDQo+ID4gPj4+IEkgcHJvcG9zZSAibWluaW11bSByZXF1aXJlbWVudHMiIGFzIGEg YmV0dGVyIHNvbHV0aW9uLg0KPiA+ID4+Pg0KPiA+ID4+Pj4gVGhvdWdoIGhhdmUgdG8gYWRtaXQs IG5ldmVyIGhhdmUgdG8gdXNlIFRYIG9mZmxvYWRzIHRvZ2V0aGVyIHdpdGgNCj4gPiA+PiBvdXIg Ym9uZGluZw0KPiA+ID4+Pj4gUE1ELg0KPiA+ID4+Pj4NCj4gPiA+DQoNCg==