From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id C142F38EB for ; Thu, 4 Sep 2014 12:30:31 +0200 (CEST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP; 04 Sep 2014 03:35:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.04,465,1406617200"; d="scan'208";a="594458434" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga002.fm.intel.com with ESMTP; 04 Sep 2014 03:35:09 -0700 Received: from fmsmsx156.amr.corp.intel.com (10.18.116.74) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.195.1; Thu, 4 Sep 2014 03:35:08 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx156.amr.corp.intel.com (10.18.116.74) with Microsoft SMTP Server (TLS) id 14.3.195.1; Thu, 4 Sep 2014 03:35:08 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.198]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.219]) with mapi id 14.03.0195.001; Thu, 4 Sep 2014 18:35:06 +0800 From: "Xie, Huawei" To: Franck Baudin , "Gray, Mark D" , Thomas Monjalon Thread-Topic: [dpdk-dev] Wrong TCP checksum of packets sent by Linux guest (virtIO/vhost) Thread-Index: AQHPx+t7JgP5UdX2C0eA/gdu7JFrHJvwLgsAgACRRYA= Date: Thu, 4 Sep 2014 10:35:05 +0000 Message-ID: References: <1686757.iSdNo6aMGt@xps13> <738D45BC1F695740A983F43CFE1B7EA92D72308F@IRSMSX102.ger.corp.intel.com> <540721E8.2010307@qosmos.com> <54082FC0.1060205@qosmos.com> In-Reply-To: <54082FC0.1060205@qosmos.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Cc: "dev@dpdk.org" , "dpdk-ovs@lists.01.org" Subject: Re: [dpdk-dev] Wrong TCP checksum of packets sent by Linux guest (virtIO/vhost) X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Sep 2014 10:30:32 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogRnJhbmNrIEJhdWRpbiBb bWFpbHRvOmZyYW5jay5iYXVkaW5AcW9zbW9zLmNvbV0NCj4gU2VudDogVGh1cnNkYXksIFNlcHRl bWJlciAwNCwgMjAxNCA1OjI0IFBNDQo+IFRvOiBYaWUsIEh1YXdlaTsgR3JheSwgTWFyayBEOyBU aG9tYXMgTW9uamFsb24NCj4gQ2M6IGRldkBkcGRrLm9yZzsgZHBkay1vdnNAbGlzdHMuMDEub3Jn DQo+IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFdyb25nIFRDUCBjaGVja3N1bSBvZiBwYWNrZXRz IHNlbnQgYnkgTGludXggZ3Vlc3QNCj4gKHZpcnRJTy92aG9zdCkNCj4gDQo+IEhpIEh1YXdlaSwN Cj4gDQo+IE9uIDA5LzA0LzE0IDA0OjU0LCBYaWUsIEh1YXdlaSB3cm90ZToNCj4gPiBIaSBGcmFu Y2s6DQo+ID4gSSBjaGVja2VkIHlvdXIgb3JpZ2luYWwgdGhyZWFkLg0KPiA+IHJvb3QgYXQgbGlu dXgtbmF0aXZlOn4jIHRjcGR1bXAgLXZuZWkgZXRoMA0KPiA+IHRjcGR1bXA6IGxpc3RlbmluZyBv biBldGgwLCBsaW5rLXR5cGUgRU4xME1CIChFdGhlcm5ldCksIGNhcHR1cmUgc2l6ZSA2NTUzNQ0K PiBieXRlcw0KPiA+IDE3OjI3OjA5LjI2MjkyNiAwMDoxYjoyMTpiOTo5YjoyYyA+IDUyOjU0OjAw OjUxOjUxOjEyLCBldGhlcnR5cGUgSVB2NA0KPiAoMHgwODAwKSwgbGVuZ3RoIDc0OiAodG9zIDB4 MCwgdHRsIDY0LCBpZCA0Nzc0Mywgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFRDUCAoNiks DQo+IGxlbmd0aCA2MCkNCj4gPiAgICAgMS4xLjEuMy4zNDI3MiA+IDEuMS4xLjIuNTU1NTogRmxh Z3MgW1NdLCBja3N1bSAweDA0MzUgKGluY29ycmVjdCAtPiAweGIyZGQpLA0KPiBzZXEgMTk2Mzgx ODM1Niwgd2luIDE0NjAwLCBvcHRpb25zIFttc3MgMTQ2MCxzYWNrT0ssVFMgdmFsIDQ5NTMwNjM1 IGVjcg0KPiAwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwDQo+ID4gMTc6Mjc6MDkuMjYzMjIwIDUy OjU0OjAwOjUxOjUxOjEyID4gMDA6MWI6MjE6Yjk6OWI6MmMsIGV0aGVydHlwZSBJUHY0DQo+ICgw eDA4MDApLCBsZW5ndGggNjA6ICh0b3MgMHgwLCB0dGwgNjQsIGlkIDMzNjcsIG9mZnNldCAwLCBm bGFncyBbREZdLCBwcm90byBUQ1AgKDYpLA0KPiBsZW5ndGggNDApDQo+ID4gICAgICAxLjEuMS4y LjU1NTUgPiAxLjEuMS4zLjM0MjcyOiBGbGFncyBbUi5dLCBja3N1bSAweDFkYjQgKGNvcnJlY3Qp LCBzZXEgMCwgYWNrDQo+IDE5NjM4MTgzNTcsIHdpbiAwLCBsZW5ndGggMA0KPiA+DQo+ID4gVGhl IHBhY2tldCBmcm9tIHRoZSBndWVzdCwgcmVjZWl2ZWQgb24gdGhlIG5hdGl2ZSBtYWNoaW5lLCBo YXMgImNvcnJlY3QiDQo+IGNoZWNrc3VtIDB4MWRiNC4gVGhlIFRDUCBjb25uZWN0aW9uIGlzIHJl ZnVzZWQgaXMgZHVlIHRvIHRoaXMgcGFja2V0IGhhcyBSIGZsYWcuDQo+IENvdWxkIHlvdSBjaGVj ayBpZiBpdCBpcyB0aGUgZmlyZXdhbGwgdGhhdCBibG9ja3MgdGhlDQo+ID4gY29ubmVjdGlvbj8N Cj4gPg0KPiA+IEJlc2lkZXMsIEkgZGlkIHNzaCB0Y3AgdGVzdCBiZXR3ZWVuIHR3byBndWVzdCBW TXMsICB0aGUgc3NoIGNvbm5lY3Rpb24gY291bGQNCj4gYmUgZXN0YWJsaXNoZWQgY29ycmVjdGx5 IHdpdGggdHggY2hlY2tzdW0gb2ZmLiBJIGRpZG4ndCB1c2UgT1ZESywgYnV0IHNldCB0aGUgYXJw DQo+IHRhYmxlIGFuZCByb3V0ZSB0YWJsZSBtYW51YWxseS4NCj4gPiBUaGUgcGFja2V0IGZsb3cg aXMNCj4gPiAJR3Vlc3QgQSh2aXJ0aW8pPC0+dmhvc3QgZXhhbXBsZS0+R3Vlc3QgQih2aXJ0aW8p DQo+IEkgcmUtbWFkZSBhIHRlc3QgYmV0d2VlbiB0d28gaWRlbnRpY2FsIFZNcywgVURQIGFuZCBJ Q01QIGFyZSBmaW5lLiBTb21lDQo+IG9ic2VydmF0aW9uczoNCj4gb24gYm90aCBjbGllbnQgJiBz ZXJ2ZXI6DQo+IA0KPiBldGh0b29sIC1rIGV0aDEgfCBncmVwICI6IG9uIg0KPiBnZW5lcmljLXJl Y2VpdmUtb2ZmbG9hZDogb24NCj4gaGlnaGRtYTogb24gW2ZpeGVkXQ0KPiByeC12bGFuLWZpbHRl cjogb24gW2ZpeGVkXQ0KPiANCj4gZXRodG9vbCAtayBldGgxDQo+IEZlYXR1cmVzIGZvciBldGgx Og0KPiByeC1jaGVja3N1bW1pbmc6IG9mZiBbZml4ZWRdDQo+IHR4LWNoZWNrc3VtbWluZzogb2Zm DQo+ICAgICAgICAgIHR4LWNoZWNrc3VtLWlwdjQ6IG9mZiBbZml4ZWRdDQo+ICAgICAgICAgIHR4 LWNoZWNrc3VtLXVubmVlZGVkOiBvZmYgW2ZpeGVkXQ0KPiAgICAgICAgICB0eC1jaGVja3N1bS1p cC1nZW5lcmljOiBvZmYgW2ZpeGVkXQ0KPiAgICAgICAgICB0eC1jaGVja3N1bS1pcHY2OiBvZmYg W2ZpeGVkXQ0KPiAgICAgICAgICB0eC1jaGVja3N1bS1mY29lLWNyYzogb2ZmIFtmaXhlZF0NCj4g ICAgICAgICAgdHgtY2hlY2tzdW0tc2N0cDogb2ZmIFtmaXhlZF0NCj4gc2NhdHRlci1nYXRoZXI6 IG9mZg0KPiAgICAgICAgICB0eC1zY2F0dGVyLWdhdGhlcjogb2ZmIFtmaXhlZF0NCj4gICAgICAg ICAgdHgtc2NhdHRlci1nYXRoZXItZnJhZ2xpc3Q6IG9mZiBbZml4ZWRdDQo+IHRjcC1zZWdtZW50 YXRpb24tb2ZmbG9hZDogb2ZmDQo+ICAgICAgICAgIHR4LXRjcC1zZWdtZW50YXRpb246IG9mZiBb Zml4ZWRdDQo+ICAgICAgICAgIHR4LXRjcC1lY24tc2VnbWVudGF0aW9uOiBvZmYgW2ZpeGVkXQ0K PiAgICAgICAgICB0eC10Y3A2LXNlZ21lbnRhdGlvbjogb2ZmIFtmaXhlZF0NCj4gdWRwLWZyYWdt ZW50YXRpb24tb2ZmbG9hZDogb2ZmIFtmaXhlZF0NCj4gZ2VuZXJpYy1zZWdtZW50YXRpb24tb2Zm bG9hZDogb2ZmIFtyZXF1ZXN0ZWQgb25dDQo+IGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkOiBvbg0K PiBsYXJnZS1yZWNlaXZlLW9mZmxvYWQ6IG9mZiBbZml4ZWRdDQo+IHJ4LXZsYW4tb2ZmbG9hZDog b2ZmIFtmaXhlZF0NCj4gdHgtdmxhbi1vZmZsb2FkOiBvZmYgW2ZpeGVkXQ0KPiBudHVwbGUtZmls dGVyczogb2ZmIFtmaXhlZF0NCj4gcmVjZWl2ZS1oYXNoaW5nOiBvZmYgW2ZpeGVkXQ0KPiBoaWdo ZG1hOiBvbiBbZml4ZWRdDQo+IHJ4LXZsYW4tZmlsdGVyOiBvbiBbZml4ZWRdDQo+IHZsYW4tY2hh bGxlbmdlZDogb2ZmIFtmaXhlZF0NCj4gdHgtbG9ja2xlc3M6IG9mZiBbZml4ZWRdDQo+IG5ldG5z LWxvY2FsOiBvZmYgW2ZpeGVkXQ0KPiB0eC1nc28tcm9idXN0OiBvZmYgW2ZpeGVkXQ0KPiB0eC1m Y29lLXNlZ21lbnRhdGlvbjogb2ZmIFtmaXhlZF0NCj4gZmNvZS1tdHU6IG9mZiBbZml4ZWRdDQo+ IHR4LW5vY2FjaGUtY29weTogb2ZmDQo+IGxvb3BiYWNrOiBvZmYgW2ZpeGVkXQ0KPiANCj4gT24g dGhlIGNsaWVudCBzaWRlOg0KPiAxMTowMDoyMy4yOTY1OTIgSVAgKHRvcyAweDAsIHR0bCA2NCwg aWQgMjUyMzksIG9mZnNldCAwLCBmbGFncyBbREZdLA0KPiBwcm90byBUQ1ANCj4gKDYpLCBsZW5n dGggNjApDQo+ICAgICAgMS4xLjEuMi40NzE5MiA+IDEuMS4xLjEuZHNmOiBGbGFncyBbU10sIGNr c3VtIDB4MDQzMyAoaW5jb3JyZWN0IC0+DQo+IDB4ZTNiZCksIHNlcSAzODg1NzgxOTU2LCB3aW4g MTQ2MDAsIG9wdGlvbnMgW21zcyAxNDYwLHNhY2tPSyxUUyB2YWwNCj4gNDI5NDkxNDM4Nw0KPiBl Y3IgMCxub3Asd3NjYWxlIDVdLCBsZW5ndGggMA0KPiAgICAgICAgICAweDAwMDA6ICA0NTAwIDAw M2MgNjI5NyA0MDAwIDQwMDYgZDQyMCAwMTAxIDAxMDIgRS4uPGIuQC5ALi4uLi4uLg0KPiAgICAg ICAgICAweDAwMTA6ICAwMTAxIDAxMDEgYjg1OCAwMjJiIGU3OWMgNTNjNCAwMDAwIDAwMDAgLi4u Li5YLisuLlMuLi4uLg0KPiAgICAgICAgICAweDAwMjA6ICBhMDAyIDM5MDggMDQzMyAwMDAwIDAy MDQgMDViNCAwNDAyIDA4MGEgLi45Li4zLi4uLi4uLi4uLg0KPiAgICAgICAgICAweDAwMzA6ICBm ZmZmIDMxNTMgMDAwMCAwMDAwIDAxMDMgMDMwNSAuLjFTLi4uLi4uLi4NCj4gMTE6MDA6MjMuMjk2 ODgxIElQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDY1NDMsIG9mZnNldCAwLCBmbGFncyBbREZdLA0K PiBwcm90byBUQ1ANCj4gKDYpLCBsZW5ndGggNDApDQo+ICAgICAgMS4xLjEuMS5kc2YgPiAxLjEu MS4yLjQ3MTkyOiBGbGFncyBbUi5dLCBja3N1bSAweGI1ZTYgKGNvcnJlY3QpLCBzZXEgMCwNCj4g YWNrIDM4ODU3ODE5NTcsIHdpbiAwLCBsZW5ndGggMA0KPiAgICAgICAgICAweDAwMDA6ICA0NTAw IDAwMjggMTk4ZiA0MDAwIDQwMDYgMWQzZCAwMTAxIDAxMDEgRS4uKC4uQC5ALi49Li4uLg0KPiAg ICAgICAgICAweDAwMTA6ICAwMTAxIDAxMDIgMDIyYiBiODU4IDAwMDAgMDAwMCBlNzljIDUzYzUg Li4uLi4rLlguLi4uLi5TLg0KPiAgICAgICAgICAweDAwMjA6ICA1MDE0IDAwMDAgYjVlNiAwMDAw ICAgICAgICAgICAgICAgICAgICAgIFAuLi4uLi4uDQo+IA0KPiBPbiB0aGUgc2VydmVyIHNpZGU6 DQo+IDExOjAwOjIzLjYzMTk5MSBJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCAyNTIzOSwgb2Zmc2V0 IDAsIGZsYWdzIFtERl0sDQo+IHByb3RvIFRDUA0KPiAoNiksIGxlbmd0aCA2MCkNCj4gICAgICAx LjEuMS4yLjQ3MTkyID4gMS4xLjEuMS5kc2Y6IEZsYWdzIFtTXSwgY2tzdW0gMHhlM2JkIChjb3Jy ZWN0KSwgc2VxDQo+IDM4ODU3ODE5NTYsIHdpbiAxNDYwMCwgb3B0aW9ucyBbbXNzIDE0NjAsc2Fj a09LLFRTIHZhbCA0Mjk0OTE0Mzg3IGVjcg0KPiAwLG5vcCx3c2NhbGUgNV0sIGxlbmd0aCAwDQo+ ICAgICAgICAgIDB4MDAwMDogIDQ1MDAgMDAzYyA2Mjk3IDQwMDAgNDAwNiBkNDIwIDAxMDEgMDEw MiBFLi48Yi5ALkAuLi4uLi4uDQo+ICAgICAgICAgIDB4MDAxMDogIDAxMDEgMDEwMSBiODU4IDAy MmIgZTc5YyA1M2M0IDAwMDAgMDAwMCAuLi4uLlguKy4uUy4uLi4uDQo+ICAgICAgICAgIDB4MDAy MDogIGEwMDIgMzkwOCBlM2JkIDAwMDAgMDIwNCAwNWI0IDA0MDIgMDgwYSAuLjkuLi4uLi4uLi4u Li4uDQo+ICAgICAgICAgIDB4MDAzMDogIGZmZmYgMzE1MyAwMDAwIDAwMDAgMDEwMyAwMzA1IC4u MVMuLi4uLi4uLg0KPiAxMTowMDoyMy42MzIwMzQgSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgNjU0 Mywgb2Zmc2V0IDAsIGZsYWdzIFtERl0sDQo+IHByb3RvIFRDUA0KPiAoNiksIGxlbmd0aCA0MCkN Cj4gICAgICAxLjEuMS4xLmRzZiA+IDEuMS4xLjIuNDcxOTI6IEZsYWdzIFtSLl0sIGNrc3VtIDB4 YjVlNiAoY29ycmVjdCksIHNlcSAwLA0KPiBhY2sgMzg4NTc4MTk1Nywgd2luIDAsIGxlbmd0aCAw DQo+ICAgICAgICAgIDB4MDAwMDogIDQ1MDAgMDAyOCAxOThmIDQwMDAgNDAwNiAxZDNkIDAxMDEg MDEwMSBFLi4oLi5ALkAuLj0uLi4uDQo+ICAgICAgICAgIDB4MDAxMDogIDAxMDEgMDEwMiAwMjJi IGI4NTggMDAwMCAwMDAwIGU3OWMgNTNjNSAuLi4uLisuWC4uLi4uLlMuDQo+ICAgICAgICAgIDB4 MDAyMDogIDUwMTQgMDAwMCBiNWU2IDAwMDAgICAgICAgICAgICAgICAgICAgICAgUC4uLi4uLi4N Cj4gDQo+IA0KPiBPbiB0aGUgY2xpZW50LCBldGh0b29sIGFubm91bmNlIHRoYXQgVFggY2hlY2tz dW0gb2ZmbG9hZCBpcyBkaXNhYmxlZCwNCj4gYnV0IHRjcGR1bXAgc2hvdyBpdCdzIG5vdC4gT24g dGhlIHNlcnZlciBzaWRlLCBhbGwgcGFja2V0cyBsb29rcyBmaW5lDQo+IGZyb20gYSBjaGVja3N1 bSBwZXJzcGVjdGl2ZSBidXQgdGhlIFNZTiBpcyBhbnN3ZXJlZCBieSBhIFJTVC4gUGxlYXNlDQo+ IG5vdGUgdGhhdCB0aGUgc2FtZSBpbWFnZXMgYmVoYXZlIGNvcnJlY3RseSB3aXRoIGEgcmVndWxh ciBvcGVudnN3aXRjaCwNCj4gYXMgbG9uZyBhcyBUWCBjaGVja3N1bWluZyBvZmZsb2FkaW5nIGlz IGRpc2FibGVkLg0KSW4geW91ciBwcmV2aW91cyB0ZXN0IGNhc2UsIGV2ZXJ5dGhpbmcgbG9va3Mg ZmluZSBleGNlcHQgdGhhdCBzZXJ2ZXIgc2VuZHMgYSBSU1QgDQpwYWNrZXQuDQpJbiB0aGlzIHRl c3QsIHdlaXJkIHRoZSB2aXJ0aW8gY2xpZW50IHNlbmRzIHBhY2tldCB3aXRoIGluY29ycmVjdCBj aGVja3N1bSB3aXRoIHR4IA0KY2hlY2tzdW0gb2ZmbG9hZGluZyBvZmYuIEJ1dCBhdCBsZWFzdCBS WCBzaWRlIGFsd2F5cyByZWNlaXZlcyBjb3JyZWN0IGNoZWNrc3VtIA0Kd2hpY2ggaW5kaWNhdGVz IHRoZSB2aXJ0aW8gZHJpdmVyIG9uIGNsaWVudCBzaWRlIGdlbmVyYXRlcyBjaGVja3N1bSBmb3Ig aXQgLg0KDQpUaGUgc2VydmVyIHJlY2VpdmVzIGNvcnJlY3QgU1lOIHBhY2tldCB3aXRoIGNvcnJl Y3QgY2hlY2tzdW0sIGJ1dCBpdCBzZW5kcyB0aGUgUlNUIHBhY2tldCwgDQpiZXR0ZXIgcm9vdCBj YXVzZSB0aGlzIGlzc3VlIGZpcnN0Lg0KDQpXaXRoIHZob3N0IGV4YW1wbGUgYXMgdGhlIGJhY2tl bmQsIG5jIHRlc3RzIG9yIHNzaCB0ZXN0cyBhbHdheXMgd29ya3MgZmluZSBvbiBteSBzeXN0ZW0u DQpJZiB5b3UgaGF2ZSBiYW5kd2lkdGgsIHlvdSBjb3VsZCBhbHNvIHRlc3Qgdmhvc3QgYmFja2Vu ZC4gVmhvc3QgY29tbWFuZCBsaW5lIGZ5aToNCmRwZGsvZXhhbXBsZXMvdmhvc3QvYnVpbGQvdmhv c3Qtc3dpdGNoIC1jIDMgLW4gNCAtLWh1Z2UtZGlyIC9kZXYvaHVnZXBhZ2VzIC0tc29ja2V0LW1l bT01MTIsMCANCi0tIC1wIDEgLS1yeC1yZXRyeSAxIC0temVyby1jb3B5IDAgLS12bTJ2bSAyDQoN CkJ0dywgSSBkb24ndCBzZXQgYW55IGNzdW0uLi49b2ZmIGluIHFlbXUgY29tbWFuZCBsaW5lLg0K PiANCj4gSWYgYW55b25lIGhhcyBhbiBlcXVpdmFsZW50IHNldHVwLCBmdW5jdGlvbmluZyBwcm9w ZXJseSwgdGhhbmtzIGZvcg0KPiBzaGFyaW5nIGl0cyBjb25maWd1cmF0aW9ucyBwYXJhbWV0ZXJz LiBpZiBub3QsIEkgbWlnaHQgYmUgYWJsZSB0byB3YWl0DQo+IGZvciB2aG9zdCBiYWNrZW5kIFBN RCBkcml2ZXI6IEkgd2lsbCB0aGVuIHdpdGggdGVzdHBtZCBpbnN0ZWFkIG9mDQo+IGRwZGstb3Zz LCB0byBzZWUgd2hlcmUgaXMgdGhlIHByb2JsZW0gKG1heWJlIGluIG15IGNvbmZpZ3VyYXRpb24u Li4pLg0KPiBXaGVuIHNvIHlvdSBwbGFuIHRvIHJlbGVhc2UgdGhlIHZob3N0IGJhY2tlbmQgUE1E IGRyaXZlcj8NCj4gDQpUaGVyZSBpcyBubyB2aG9zdCBiYWNrZW5kIFBNRCBkcml2ZXIgYnV0IGEg dmhvc3QgbGlicmFyeSBmb3IgaW50ZWdyYXRpb24gd2l0aCBPVkRLLg0KDQo+IFRoYW5rcyENCj4g RnJhbmNrDQo=