From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id A6719A00E6 for ; Mon, 5 Aug 2019 12:59:05 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D4D661BE0E; Mon, 5 Aug 2019 12:59:04 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id D0A1D1BDEB for ; Mon, 5 Aug 2019 12:59:02 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Aug 2019 03:59:01 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,349,1559545200"; d="scan'208";a="176279481" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga003.jf.intel.com with ESMTP; 05 Aug 2019 03:59:01 -0700 Received: from fmsmsx125.amr.corp.intel.com (10.18.125.40) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 5 Aug 2019 03:59:00 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX125.amr.corp.intel.com (10.18.125.40) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 5 Aug 2019 03:59:00 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.80]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.139]) with mapi id 14.03.0439.000; Mon, 5 Aug 2019 18:58:58 +0800 From: "Yu, Jin" To: "Bie, Tiwei" CC: "dev@dpdk.org" , "Liu, Changpeng" , "maxime.coquelin@redhat.com" , "Wang, Zhihong" , Lin Li , Xun Ni , Yu Zhang Thread-Topic: [PATCH v4 1/2] vhost: support inflight share memory protocol feature Thread-Index: AQHVR59iKbzG17vcBEKetzT/udHz7KblUhkAgAcUeuA= Date: Mon, 5 Aug 2019 10:58:57 +0000 Message-ID: References: <20190725212335.9675> <20190731204050.40633-1-jin.yu@intel.com> <20190731204050.40633-2-jin.yu@intel.com> <20190801063827.GA22488@___> In-Reply-To: <20190801063827.GA22488@___> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZmZmOGUzMTItNjA0ZC00Y2JlLWE5NjItNWM1NzAxMWY5ZmVlIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoibERibmwyUGE4RFVla3k0WFR4T09lOSthZU90cVJ0T21KVzFRYVZEem5wSHpUaUo4QXlOYzBhOHhXcVNJVjNwcyJ9 x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v4 1/2] vhost: support inflight share memory protocol feature X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" VGhhbmtzIFRpd2VpLg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEJp ZSwgVGl3ZWkNCj4gU2VudDogVGh1cnNkYXksIEF1Z3VzdCAxLCAyMDE5IDI6MzggUE0NCj4gVG86 IFl1LCBKaW4gPGppbi55dUBpbnRlbC5jb20+DQo+IENjOiBkZXZAZHBkay5vcmc7IExpdSwgQ2hh bmdwZW5nIDxjaGFuZ3BlbmcubGl1QGludGVsLmNvbT47DQo+IG1heGltZS5jb3F1ZWxpbkByZWRo YXQuY29tOyBXYW5nLCBaaGlob25nIDx6aGlob25nLndhbmdAaW50ZWwuY29tPjsNCj4gTGluIExp IDxsaWxpbjI0QGJhaWR1LmNvbT47IFh1biBOaSA8bml4dW5AYmFpZHUuY29tPjsgWXUgWmhhbmcN Cj4gPHpoYW5neXUzMUBiYWlkdS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjQgMS8yXSB2 aG9zdDogc3VwcG9ydCBpbmZsaWdodCBzaGFyZSBtZW1vcnkgcHJvdG9jb2wNCj4gZmVhdHVyZQ0K PiANCj4gT24gVGh1LCBBdWcgMDEsIDIwMTkgYXQgMDQ6NDA6NDlBTSArMDgwMCwgSmluWXUgd3Jv dGU6DQo+ID4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgbWVzc2FnZXMgVkhPU1RfVVNF Ul9HRVRfSU5GTElHSFRfRkQNCj4gYW5kDQo+ID4gVkhPU1RfVVNFUl9TRVRfSU5GTElHSFRfRkQg dG8gc3VwcG9ydCB0cmFuc2ZlcnJpbmcgYSBzaGFyZWQgYnVmZmVyDQo+ID4gYmV0d2VlbiBxZW11 IGFuZCBiYWNrZW5kLg0KPiA+DQo+ID4gRmlyc3RseSwgcWVtdSB1c2VzIFZIT1NUX1VTRVJfR0VU X0lORkxJR0hUX0ZEIHRvIGdldCB0aGUgc2hhcmVkIGJ1ZmZlcg0KPiA+IGZyb20gYmFja2VuZC4g VGhlbiBxZW11IHNob3VsZCBzZW5kIGl0IGJhY2sgdGhyb3VnaA0KPiA+IFZIT1NUX1VTRVJfU0VU X0lORkxJR0hUX0ZEIGVhY2ggdGltZSB3ZSBzdGFydCB2aG9zdC11c2VyLg0KPiA+DQo+ID4gVGhp cyBzaGFyZWQgYnVmZmVyIGlzIHVzZWQgdG8gcHJvY2VzcyBpbmZsaWdodCBJL08gd2hlbiBiYWNr ZW5kDQo+ID4gcmVjb25uZWN0Lg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogTGluIExpIDxsaWxp bjI0QGJhaWR1LmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBYdW4gTmkgPG5peHVuQGJhaWR1LmNv bT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBZdSBaaGFuZyA8emhhbmd5dTMxQGJhaWR1LmNvbT4NCj4g PiBTaWduZWQtb2ZmLWJ5OiBKaW4gWXUgPGppbi55dUBpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4g djEgLSBzcGVjaWZ5IHRoZSBBUElzIGFyZSBzcGxpdC1yaW5nIG9ubHkNCj4gPiB2MiAtIGZpeCBB UElzIGFuZCBqdWRnZSBzcGxpdCBvciBwYWNrZWQNCj4gPiB2MyAtIEFkZCBydGVfdmhvc3RfIHBy ZWZpeCBhbmQgZml4IG9uZSBpc3N1ZS4NCj4gPiB2NCAtIGFkZCB0aGUgcGFja2VkIHJpbmcgc3Vw cG9ydA0KPiA+IC0tLQ0KPiA+ICBsaWIvbGlicnRlX3Zob3N0L3J0ZV92aG9zdC5oICAgICAgICAg ICB8IDMwMSArKysrKysrKysrKysrKysrKy0NCj4gPiAgbGliL2xpYnJ0ZV92aG9zdC9ydGVfdmhv c3RfdmVyc2lvbi5tYXAgfCAgMTIgKw0KPiA+ICBsaWIvbGlicnRlX3Zob3N0L3Zob3N0LmMgICAg ICAgICAgICAgICB8IDM5OSArKysrKysrKysrKysrKysrKysrKysrLQ0KPiA+ICBsaWIvbGlicnRl X3Zob3N0L3Zob3N0LmggICAgICAgICAgICAgICB8ICA1NCArKy0tDQo+ID4gIGxpYi9saWJydGVf dmhvc3Qvdmhvc3RfdXNlci5jICAgICAgICAgIHwgNDIzICsrKysrKysrKysrKysrKysrKysrKysr Ky0NCj4gPiAgbGliL2xpYnJ0ZV92aG9zdC92aG9zdF91c2VyLmggICAgICAgICAgfCAgMTMgKy0N Cj4gPiAgNiBmaWxlcyBjaGFuZ2VkLCAxMTczIGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygt KQ0KPiANCj4gVGhlcmUgYXJlIHNvbWUgY29kaW5nIHN0eWxlIGlzc3VlcyByZXBvcnRlZCBieSBk ZXZ0b29scy9jaGVja3BhdGNoZXMuc2gsDQo+IHBsZWFzZSBnZXQgdGhlbSBmaXhlZDoNCg0KU29y cnkuIFdpbGwgZml4IHRoZW0gaW4gdGhlIG5leHQgdmVyc2lvbi4NCj4gDQo+IFdBUk5JTkc6TE9O R19MSU5FOiBsaW5lIG92ZXIgODAgY2hhcmFjdGVycw0KPiAjMzcyOiBGSUxFOiBsaWIvbGlicnRl X3Zob3N0L3J0ZV92aG9zdC5oOjk1MjoNCj4gKwkJdWludDE2X3QgcXVldWVfaWQsIGJvb2wgKmF2 YWlsX3dyYXBfY291bnRlciwgYm9vbA0KPiArKnVzZWRfd3JhcF9jb3VudGVyKTsNCj4gDQo+IFdB Uk5JTkc6TE9OR19MSU5FOiBsaW5lIG92ZXIgODAgY2hhcmFjdGVycw0KPiAjNjIyOiBGSUxFOiBs aWIvbGlicnRlX3Zob3N0L3Zob3N0LmM6OTM1Og0KPiArCQl2cS0+aW5mbGlnaHRfcGFja2VkLT5k ZXNjW2ZyZWVfaGVhZF0uYWRkciA9DQo+ICt2cS0+ZGVzY19wYWNrZWRbaGVhZF0uYWRkcjsNCj4g DQo+IFdBUk5JTkc6TE9OR19MSU5FOiBsaW5lIG92ZXIgODAgY2hhcmFjdGVycw0KPiAjNjIzOiBG SUxFOiBsaWIvbGlicnRlX3Zob3N0L3Zob3N0LmM6OTM2Og0KPiArCQl2cS0+aW5mbGlnaHRfcGFj a2VkLT5kZXNjW2ZyZWVfaGVhZF0ubGVuID0gdnEtDQo+ID5kZXNjX3BhY2tlZFtoZWFkXS5sZW47 DQo+IA0KPiBXQVJOSU5HOkxPTkdfTElORTogbGluZSBvdmVyIDgwIGNoYXJhY3RlcnMNCj4gIzYy NDogRklMRTogbGliL2xpYnJ0ZV92aG9zdC92aG9zdC5jOjkzNzoNCj4gKwkJdnEtPmluZmxpZ2h0 X3BhY2tlZC0+ZGVzY1tmcmVlX2hlYWRdLmZsYWdzID0NCj4gK3ZxLT5kZXNjX3BhY2tlZFtoZWFk XS5mbGFnczsNCj4gDQo+IFdBUk5JTkc6TE9OR19MSU5FOiBsaW5lIG92ZXIgODAgY2hhcmFjdGVy cw0KPiAjNjI1OiBGSUxFOiBsaWIvbGlicnRlX3Zob3N0L3Zob3N0LmM6OTM4Og0KPiArCQl2cS0+ aW5mbGlnaHRfcGFja2VkLT5kZXNjW2ZyZWVfaGVhZF0uaWQgPSB2cS0NCj4gPmRlc2NfcGFja2Vk W2hlYWRdLmlkOw0KPiANCj4gV0FSTklORzpMT05HX0xJTkU6IGxpbmUgb3ZlciA4MCBjaGFyYWN0 ZXJzDQo+ICM3ODM6IEZJTEU6IGxpYi9saWJydGVfdmhvc3Qvdmhvc3QuYzoxMDk2Og0KPiArCQl2 cS0+aW5mbGlnaHRfcGFja2VkLT51c2VkX2lkeCAmPSB2cS0+aW5mbGlnaHRfcGFja2VkLQ0KPiA+ ZGVzY19udW0gLSAxOw0KPiANCj4gV0FSTklORzpMT05HX0xJTkU6IGxpbmUgb3ZlciA4MCBjaGFy YWN0ZXJzDQo+ICM4MDM6IEZJTEU6IGxpYi9saWJydGVfdmhvc3Qvdmhvc3QuYzoxMjc4Og0KPiAr CWlmIChkZXYgPT0gTlVMTCB8fCBhdmFpbF93cmFwX2NvdW50ZXIgPT0gTlVMTCB8fA0KPiB1c2Vk X3dyYXBfY291bnRlciA9PQ0KPiArTlVMTCkNCj4gDQo+IFdBUk5JTkc6TE9OR19MSU5FOiBsaW5l IG92ZXIgODAgY2hhcmFjdGVycw0KPiAjODI2OiBGSUxFOiBsaWIvbGlicnRlX3Zob3N0L3Zob3N0 LmM6MTMwMToNCj4gKwkqbGFzdF9hdmFpbF9pZHggPQ0KPiArZGV2LT52aXJ0cXVldWVbcXVldWVf aWRdLT5pbmZsaWdodF9wYWNrZWQtPm9sZF91c2VkX2lkeDsNCj4gDQo+IFdBUk5JTkc6TE9OR19M SU5FOiBsaW5lIG92ZXIgODAgY2hhcmFjdGVycw0KPiAjODMzOiBGSUxFOiBsaWIvbGlicnRlX3Zo b3N0L3Zob3N0LmM6MTMwODoNCj4gKwkJdWludDE2X3QgcXVldWVfaWQsIGJvb2wgKmF2YWlsX3dy YXBfY291bnRlciwgYm9vbA0KPiAqdXNlZF93cmFwX2NvdW50ZXIpDQo+IA0KPiBXQVJOSU5HOkxP TkdfTElORTogbGluZSBvdmVyIDgwIGNoYXJhY3RlcnMNCj4gIzgzNzogRklMRTogbGliL2xpYnJ0 ZV92aG9zdC92aG9zdC5jOjEzMTI6DQo+ICsJaWYgKGRldiA9PSBOVUxMIHx8IGF2YWlsX3dyYXBf Y291bnRlciA9PSBOVUxMIHx8DQo+IHVzZWRfd3JhcF9jb3VudGVyID09DQo+ICtOVUxMKQ0KPiAN Cj4gV0FSTklORzpMT05HX0xJTkU6IGxpbmUgb3ZlciA4MCBjaGFyYWN0ZXJzDQo+ICMxMTE2OiBG SUxFOiBsaWIvbGlicnRlX3Zob3N0L3Zob3N0X3VzZXIuYzoxMjQ4Og0KPiArCQlzaXplb2YodWlu dDY0X3QpICogMSArIHNpemVvZih1aW50MTZfdCkgKiA0LA0KPiBJTkZMSUdIVF9BTElHTk1FTlQp Ow0KPiANCj4gV0FSTklORzpMT05HX0xJTkU6IGxpbmUgb3ZlciA4MCBjaGFyYWN0ZXJzDQo+ICMx MTIyOiBGSUxFOiBsaWIvbGlicnRlX3Zob3N0L3Zob3N0X3VzZXIuYzoxMjU0Og0KPiArCQlzaXpl b2YodWludDY0X3QpICogMSArIHNpemVvZih1aW50MTZfdCkgKiA2ICsgc2l6ZW9mKHVpbnQ4X3Qp ICogOSwNCj4gDQo+IFdBUk5JTkc6TE9OR19MSU5FOiBsaW5lIG92ZXIgODAgY2hhcmFjdGVycw0K PiAjMTI1ODogRklMRTogbGliL2xpYnJ0ZV92aG9zdC92aG9zdF91c2VyLmM6MTM5MDoNCj4gKwkJ CXZxLT5pbmZsaWdodF9wYWNrZWQgPSAoc3RydWN0IGluZmxpZ2h0X2luZm9fcGFja2VkDQo+ICop YWRkcjsNCj4gDQo+IFdBUk5JTkc6TE9OR19MSU5FOiBsaW5lIG92ZXIgODAgY2hhcmFjdGVycw0K PiAjMTI5MzogRklMRTogbGliL2xpYnJ0ZV92aG9zdC92aG9zdF91c2VyLmM6MTQ1NDoNCj4gK3Zo b3N0X2NoZWNrX3F1ZXVlX2luZmxpZ2h0c19zcGxpdChzdHJ1Y3QgdmlydGlvX25ldCAqZGV2LCBz dHJ1Y3QNCj4gK3Zob3N0X3ZpcnRxdWV1ZSAqdnEpDQo+IA0KPiBXQVJOSU5HOkxPTkdfTElORTog bGluZSBvdmVyIDgwIGNoYXJhY3RlcnMNCj4gIzEzMTg6IEZJTEU6IGxpYi9saWJydGVfdmhvc3Qv dmhvc3RfdXNlci5jOjE0Nzk6DQo+ICsJCWluZmxpZ2h0X3NwbGl0LT5kZXNjW2luZmxpZ2h0X3Nw bGl0LT5sYXN0X2luZmxpZ2h0X2lvXS5pbmZsaWdodCA9IDA7DQo+IA0KPiBXQVJOSU5HOkxPTkdf TElORTogbGluZSBvdmVyIDgwIGNoYXJhY3RlcnMNCj4gIzEzNDk6IEZJTEU6IGxpYi9saWJydGVf dmhvc3Qvdmhvc3RfdXNlci5jOjE1MTA6DQo+ICsJCQkJcmVzdWJtaXQtPnJlc3VibWl0X2xpc3Rb cmVzdWJtaXQtDQo+ID5yZXN1Ym1pdF9udW1dLmluZGV4ID0gaTsNCj4gDQo+IFdBUk5JTkc6TE9O R19MSU5FOiBsaW5lIG92ZXIgODAgY2hhcmFjdGVycw0KPiAjMTM1MDogRklMRTogbGliL2xpYnJ0 ZV92aG9zdC92aG9zdF91c2VyLmM6MTUxMToNCj4gKwkJCQlyZXN1Ym1pdC0+cmVzdWJtaXRfbGlz dFtyZXN1Ym1pdC0NCj4gPnJlc3VibWl0X251bV0uY291bnRlciA9DQo+IA0KPiBXQVJOSU5HOkxP TkdfTElORTogbGluZSBvdmVyIDgwIGNoYXJhY3RlcnMNCj4gIzEzOTQ6IEZJTEU6IGxpYi9saWJy dGVfdmhvc3Qvdmhvc3RfdXNlci5jOjE1NTU6DQo+ICsJCWlmIChpbmZsaWdodF9wYWNrZWQtPmRl c2NbaW5mbGlnaHRfcGFja2VkLQ0KPiA+b2xkX3VzZWRfaWR4XS5pbmZsaWdodCA9PQ0KPiArMCkg ew0KPiANCj4gV0FSTklORzpMT05HX0xJTkU6IGxpbmUgb3ZlciA4MCBjaGFyYWN0ZXJzDQo+ICMx Mzk1OiBGSUxFOiBsaWIvbGlicnRlX3Zob3N0L3Zob3N0X3VzZXIuYzoxNTU2Og0KPiArCQkJaW5m bGlnaHRfcGFja2VkLT5vbGRfdXNlZF9pZHggPSBpbmZsaWdodF9wYWNrZWQtDQo+ID51c2VkX2lk eDsNCj4gDQo+IEVSUk9SOlRSQUlMSU5HX1dISVRFU1BBQ0U6IHRyYWlsaW5nIHdoaXRlc3BhY2UN Cj4gIzEzOTY6IEZJTEU6IGxpYi9saWJydGVfdmhvc3Qvdmhvc3RfdXNlci5jOjE1NTc6DQo+ICte SV5JXklpbmZsaWdodF9wYWNrZWQtPm9sZF91c2VkX3dyYXBfY291bnRlciA9ICQNCj4gDQo+IFdB Uk5JTkc6TE9OR19MSU5FOiBsaW5lIG92ZXIgODAgY2hhcmFjdGVycw0KPiAjMTM5ODogRklMRTog bGliL2xpYnJ0ZV92aG9zdC92aG9zdF91c2VyLmM6MTU1OToNCj4gKwkJCWluZmxpZ2h0X3BhY2tl ZC0+b2xkX2ZyZWVfaGVhZCA9IGluZmxpZ2h0X3BhY2tlZC0NCj4gPmZyZWVfaGVhZDsNCj4gDQo+ IFdBUk5JTkc6TE9OR19MSU5FOiBsaW5lIG92ZXIgODAgY2hhcmFjdGVycw0KPiAjMTQwMDogRklM RTogbGliL2xpYnJ0ZV92aG9zdC92aG9zdF91c2VyLmM6MTU2MToNCj4gKwkJCWluZmxpZ2h0X3Bh Y2tlZC0+dXNlZF9pZHggPSBpbmZsaWdodF9wYWNrZWQtDQo+ID5vbGRfdXNlZF9pZHg7DQo+IA0K PiBXQVJOSU5HOkxPTkdfTElORTogbGluZSBvdmVyIDgwIGNoYXJhY3RlcnMNCj4gIzE0MDM6IEZJ TEU6IGxpYi9saWJydGVfdmhvc3Qvdmhvc3RfdXNlci5jOjE1NjQ6DQo+ICsJCQlpbmZsaWdodF9w YWNrZWQtPmZyZWVfaGVhZCA9IGluZmxpZ2h0X3BhY2tlZC0NCj4gPm9sZF9mcmVlX2hlYWQ7DQo+ IA0KPiBXQVJOSU5HOkxPTkdfTElORTogbGluZSBvdmVyIDgwIGNoYXJhY3RlcnMNCj4gIzE0MjA6 IEZJTEU6IGxpYi9saWJydGVfdmhvc3Qvdmhvc3RfdXNlci5jOjE1ODE6DQo+ICsJCQkJCQkgc2l6 ZW9mKHN0cnVjdA0KPiBydGVfdmhvc3RfcmVzdWJtaXRfZGVzYykpOw0KPiANCj4gV0FSTklORzpM T05HX0xJTkU6IGxpbmUgb3ZlciA4MCBjaGFyYWN0ZXJzDQo+ICMxNDI4OiBGSUxFOiBsaWIvbGli cnRlX3Zob3N0L3Zob3N0X3VzZXIuYzoxNTg5Og0KPiArCQkJCXJlc3VibWl0LT5yZXN1Ym1pdF9s aXN0W3Jlc3VibWl0LQ0KPiA+cmVzdWJtaXRfbnVtXS5pbmRleCA9IGk7DQo+IA0KPiBXQVJOSU5H OkxPTkdfTElORTogbGluZSBvdmVyIDgwIGNoYXJhY3RlcnMNCj4gIzE0Mjk6IEZJTEU6IGxpYi9s aWJydGVfdmhvc3Qvdmhvc3RfdXNlci5jOjE1OTA6DQo+ICsJCQkJcmVzdWJtaXQtPnJlc3VibWl0 X2xpc3RbcmVzdWJtaXQtDQo+ID5yZXN1Ym1pdF9udW1dLmNvdW50ZXIgPQ0KPiANCj4gV0FSTklO RzpOT19BVVRIT1JfU0lHTl9PRkY6IE1pc3NpbmcgU2lnbmVkLW9mZi1ieTogbGluZSBieSBub21p bmFsDQo+IHBhdGNoIGF1dGhvciAnSmluWXUgPGppbi55dUBpbnRlbC5jb20+Jw0KPiANCj4gdG90 YWw6IDEgZXJyb3JzLCAyNiB3YXJuaW5ncywgMTQyNSBsaW5lcyBjaGVja2VkIF9fcnRlX2V4cGVy aW1lbnRhbCBtdXN0DQo+IGFwcGVhciBhbG9uZSBvbiB0aGUgbGluZSBpbW1lZGlhdGVseSBwcmVj ZWRpbmcgdGhlIHJldHVybiB0eXBlIG9mIGEgZnVuY3Rpb24uDQo+IF9fcnRlX2V4cGVyaW1lbnRh bCBtdXN0IGFwcGVhciBhbG9uZSBvbiB0aGUgbGluZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcNCj4g dGhlIHJldHVybiB0eXBlIG9mIGEgZnVuY3Rpb24uDQo+IF9fcnRlX2V4cGVyaW1lbnRhbCBtdXN0 IGFwcGVhciBhbG9uZSBvbiB0aGUgbGluZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcNCj4gdGhlIHJl dHVybiB0eXBlIG9mIGEgZnVuY3Rpb24uDQo+IF9fcnRlX2V4cGVyaW1lbnRhbCBtdXN0IGFwcGVh ciBhbG9uZSBvbiB0aGUgbGluZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcNCj4gdGhlIHJldHVybiB0 eXBlIG9mIGEgZnVuY3Rpb24uDQo+IF9fcnRlX2V4cGVyaW1lbnRhbCBtdXN0IGFwcGVhciBhbG9u ZSBvbiB0aGUgbGluZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcNCj4gdGhlIHJldHVybiB0eXBlIG9m IGEgZnVuY3Rpb24uDQo+IF9fcnRlX2V4cGVyaW1lbnRhbCBtdXN0IGFwcGVhciBhbG9uZSBvbiB0 aGUgbGluZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcNCj4gdGhlIHJldHVybiB0eXBlIG9mIGEgZnVu Y3Rpb24uDQo+IF9fcnRlX2V4cGVyaW1lbnRhbCBtdXN0IGFwcGVhciBhbG9uZSBvbiB0aGUgbGlu ZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcNCj4gdGhlIHJldHVybiB0eXBlIG9mIGEgZnVuY3Rpb24u DQo+IF9fcnRlX2V4cGVyaW1lbnRhbCBtdXN0IGFwcGVhciBhbG9uZSBvbiB0aGUgbGluZSBpbW1l ZGlhdGVseSBwcmVjZWRpbmcNCj4gdGhlIHJldHVybiB0eXBlIG9mIGEgZnVuY3Rpb24uDQo+IF9f cnRlX2V4cGVyaW1lbnRhbCBtdXN0IGFwcGVhciBhbG9uZSBvbiB0aGUgbGluZSBpbW1lZGlhdGVs eSBwcmVjZWRpbmcNCj4gdGhlIHJldHVybiB0eXBlIG9mIGEgZnVuY3Rpb24uDQo+IF9fcnRlX2V4 cGVyaW1lbnRhbCBtdXN0IGFwcGVhciBhbG9uZSBvbiB0aGUgbGluZSBpbW1lZGlhdGVseSBwcmVj ZWRpbmcNCj4gdGhlIHJldHVybiB0eXBlIG9mIGEgZnVuY3Rpb24uDQo+IF9fcnRlX2V4cGVyaW1l bnRhbCBtdXN0IGFwcGVhciBhbG9uZSBvbiB0aGUgbGluZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcN Cj4gdGhlIHJldHVybiB0eXBlIG9mIGEgZnVuY3Rpb24uDQo+IF9fcnRlX2V4cGVyaW1lbnRhbCBt dXN0IGFwcGVhciBhbG9uZSBvbiB0aGUgbGluZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcNCj4gdGhl IHJldHVybiB0eXBlIG9mIGEgZnVuY3Rpb24uDQo+IA0KPiANCj4gPiArDQo+ID4gK3N0cnVjdCB2 cmluZ19wYWNrZWRfZGVzYyB7DQo+ID4gKwl1aW50NjRfdCBhZGRyOw0KPiA+ICsJdWludDMyX3Qg bGVuOw0KPiA+ICsJdWludDE2X3QgaWQ7DQo+ID4gKwl1aW50MTZfdCBmbGFnczsNCj4gPiArfTsN Cj4gDQo+IFlvdSBzaG91bGQga2VlcCB0aGUgZ3VhcmQsIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJl IGJ1aWxkIGlzc3VlcyB3aGVuDQo+IGxpbnV4L3ZpcnRpb19yaW5nLmggZGVmaW5lcyBhYm92ZSB0 eXBlLg0KDQpHb3QgaXQuDQo+IA0KPiA+ICsNCj4gPiArc3RydWN0IHZyaW5nX3NwbGl0X2Rlc2Mg ew0KPiA+ICsJdWludDY0X3QgYWRkcjsNCj4gPiArCXVpbnQzMl90IGxlbjsNCj4gPiArCXVpbnQx Nl90IGZsYWdzOw0KPiA+ICsJdWludDE2X3QgbmV4dDsNCj4gPiArfTsNCj4gDQo+IFlvdSBkb24n dCBuZWVkIHRvIHJlZGVmaW5lIHRoZSBkZXNjcmlwdG9yIGZvciBzcGxpdCByaW5nLCB5b3UgY2Fu IHVzZSB0aGUgb25lDQo+IHByb3ZpZGVkIGJ5IGxpbnV4L3ZpcnRpb19yaW5nLmgNCg0KR290IGl0 Lg0KPiANCj4gDQo+ID4gK2ludA0KPiA+ICtydGVfdmhvc3Rfc2V0X2luZmxpZ2h0X2Rlc2NfcGFj a2VkKGludCB2aWQsIHVpbnQxNl90IHZyaW5nX2lkeCwNCj4gPiArCXVpbnQxNl90IGhlYWQsIHVp bnQxNl90IGxhc3QsIHVpbnQxNl90ICppbmZsaWdodF9lbnRyeSkgew0KPiA+ICsJc3RydWN0IHZp cnRpb19uZXQgKmRldjsNCj4gPiArCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOw0KPiA+ICsJ dWludDE2X3Qgb2xkX2ZyZWVfaGVhZCwgZnJlZV9oZWFkOw0KPiA+ICsNCj4gPiArCWRldiA9IGdl dF9kZXZpY2UodmlkKTsNCj4gPiArCWlmICh1bmxpa2VseSghZGV2KSkNCj4gPiArCQlyZXR1cm4g LTE7DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5KCEoZGV2LT5wcm90b2NvbF9mZWF0dXJlcyAm DQo+ID4gKwkJKDFVTEwgPDwgVkhPU1RfVVNFUl9QUk9UT0NPTF9GX0lORkxJR0hUX1NITUZEKSkp KQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsNCj4gPiArCWlmICh1bmxpa2VseSghdnFfaXNfcGFj a2VkKGRldikpKQ0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArDQo+ID4gKwlpZiAodW5saWtlbHko dnJpbmdfaWR4ID49IFZIT1NUX01BWF9WUklORykpDQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsN Cj4gPiArCXZxID0gZGV2LT52aXJ0cXVldWVbdnJpbmdfaWR4XTsNCj4gPiArCWlmICh1bmxpa2Vs eSghdnEpKQ0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArDQo+ID4gKwlpZiAodW5saWtlbHkoIXZx LT5pbmZsaWdodF9zcGxpdCkpDQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsNCj4gPiArCWZyZWVf aGVhZCA9IHZxLT5pbmZsaWdodF9wYWNrZWQtPmZyZWVfaGVhZDsNCj4gPiArCW9sZF9mcmVlX2hl YWQgPSB2cS0+aW5mbGlnaHRfcGFja2VkLT5vbGRfZnJlZV9oZWFkOw0KPiA+ICsNCj4gPiArCS8q IGluaXQgaGVhZGVyIGRlc2NyaXB0b3IgKi8NCj4gPiArCXZxLT5pbmZsaWdodF9wYWNrZWQtPmRl c2Nbb2xkX2ZyZWVfaGVhZF0ubnVtID0gMDsNCj4gPiArCXZxLT5pbmZsaWdodF9wYWNrZWQtPmRl c2Nbb2xkX2ZyZWVfaGVhZF0uY291bnRlciA9IHZxLQ0KPiA+Z2xvYmFsX2NvdW50ZXIrKzsNCj4g PiArCXZxLT5pbmZsaWdodF9wYWNrZWQtPmRlc2Nbb2xkX2ZyZWVfaGVhZF0uaW5mbGlnaHQgPSAx Ow0KPiA+ICsNCj4gPiArCXdoaWxlIChoZWFkICE9ICgobGFzdCArIDEpICYgKHZxLT5zaXplIC0g MSkpKSB7DQo+ID4gKwkJdnEtPmluZmxpZ2h0X3BhY2tlZC0+ZGVzY1tvbGRfZnJlZV9oZWFkXS5u dW0rKzsNCj4gPiArCQl2cS0+aW5mbGlnaHRfcGFja2VkLT5kZXNjW2ZyZWVfaGVhZF0uYWRkciA9 IHZxLQ0KPiA+ZGVzY19wYWNrZWRbaGVhZF0uYWRkcjsNCj4gPiArCQl2cS0+aW5mbGlnaHRfcGFj a2VkLT5kZXNjW2ZyZWVfaGVhZF0ubGVuID0gdnEtDQo+ID5kZXNjX3BhY2tlZFtoZWFkXS5sZW47 DQo+ID4gKwkJdnEtPmluZmxpZ2h0X3BhY2tlZC0+ZGVzY1tmcmVlX2hlYWRdLmZsYWdzID0gdnEt DQo+ID5kZXNjX3BhY2tlZFtoZWFkXS5mbGFnczsNCj4gPiArCQl2cS0+aW5mbGlnaHRfcGFja2Vk LT5kZXNjW2ZyZWVfaGVhZF0uaWQgPSB2cS0NCj4gPmRlc2NfcGFja2VkW2hlYWRdLmlkOw0KPiA+ ICsJCXZxLT5pbmZsaWdodF9wYWNrZWQtPmRlc2Nbb2xkX2ZyZWVfaGVhZF0ubGFzdCA9IGZyZWVf aGVhZDsNCj4gPiArCQlmcmVlX2hlYWQgPSB2cS0+aW5mbGlnaHRfcGFja2VkLT5kZXNjW2ZyZWVf aGVhZF0ubmV4dDsNCj4gPiArCQl2cS0+aW5mbGlnaHRfcGFja2VkLT5mcmVlX2hlYWQgPSBmcmVl X2hlYWQ7DQo+ID4gKwkJaGVhZCA9IChoZWFkICsgMSkgJiAodnEtPnNpemUgLSAxKTsNCj4gDQo+ IFlvdSBjYW4ndCBhc3N1bWUgdGhlIHJpbmcgc2l6ZSB3aWxsIGJlIGEgcG93ZXIgb2YgdHdvIGlu IHBhY2tlZCByaW5nLg0KDQpZZWFoLCBJIGhhdmUgY2hlY2tlZCB0aGUgc3BlYyBhZ2FpbiwgSSBt aXNzIGl0LiBXaWxsIGZpeCBpdCBpbiBuZXh0IHZlcnNpb24uDQo+IA0KPiANCj4gPiAraW50DQo+ ID4gK3J0ZV92aG9zdF9jbHJfaW5mbGlnaHRfZGVzY19wYWNrZWQoaW50IHZpZCwgdWludDE2X3Qg dnJpbmdfaWR4LA0KPiA+ICsJdWludDE2X3QgaGVhZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZp cnRpb19uZXQgKmRldjsNCj4gPiArCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOw0KPiA+ICsN Cj4gPiArCWRldiA9IGdldF9kZXZpY2UodmlkKTsNCj4gPiArCWlmICh1bmxpa2VseSghZGV2KSkN Cj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5KCEoZGV2LT5wcm90 b2NvbF9mZWF0dXJlcyAmDQo+ID4gKwkJKDFVTEwgPDwgVkhPU1RfVVNFUl9QUk9UT0NPTF9GX0lO RkxJR0hUX1NITUZEKSkpKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsNCj4gPiArCWlmICh1bmxp a2VseSghdnFfaXNfcGFja2VkKGRldikpKQ0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArDQo+ID4g KwlpZiAodW5saWtlbHkodnJpbmdfaWR4ID49IFZIT1NUX01BWF9WUklORykpDQo+ID4gKwkJcmV0 dXJuIC0xOw0KPiA+ICsNCj4gPiArCXZxID0gZGV2LT52aXJ0cXVldWVbdnJpbmdfaWR4XTsNCj4g PiArCWlmICh1bmxpa2VseSghdnEpKQ0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArDQo+ID4gKwlp ZiAodW5saWtlbHkoIXZxLT5pbmZsaWdodF9wYWNrZWQpKQ0KPiA+ICsJCXJldHVybiAtMTsNCj4g PiArDQo+ID4gKwlydGVfY29tcGlsZXJfYmFycmllcigpOw0KPiA+ICsNCj4gPiArCXZxLT5pbmZs aWdodF9wYWNrZWQtPmRlc2NbaGVhZF0uaW5mbGlnaHQgPSAwOw0KPiA+ICsNCj4gPiArCXJ0ZV9j b21waWxlcl9iYXJyaWVyKCk7DQo+ID4gKw0KPiA+ICsJdnEtPmluZmxpZ2h0X3BhY2tlZC0+b2xk X2ZyZWVfaGVhZCA9IHZxLT5pbmZsaWdodF9wYWNrZWQtDQo+ID5mcmVlX2hlYWQ7DQo+ID4gKwl2 cS0+aW5mbGlnaHRfcGFja2VkLT5vbGRfdXNlZF9pZHggPSB2cS0+aW5mbGlnaHRfcGFja2VkLT51 c2VkX2lkeDsNCj4gPiArCXZxLT5pbmZsaWdodF9wYWNrZWQtPm9sZF91c2VkX3dyYXBfY291bnRl ciA9DQo+ID4gKwl2cS0+aW5mbGlnaHRfcGFja2VkLT51c2VkX3dyYXBfY291bnRlcjsNCj4gDQo+ IFRoZSBpbmRlbnQgb2YgdGhlIGxhc3QgbGluZSBuZWVkcyB0byBiZSBmaXhlZC4NCj4gDQo+IA0K PiA+ICtpbnQNCj4gPiArcnRlX3Zob3N0X3NldF9sYXN0X2luZmxpZ2h0X2lvX3BhY2tlZChpbnQg dmlkLCB1aW50MTZfdCB2cmluZ19pZHgsDQo+ID4gKwl1aW50MTZfdCBoZWFkKQ0KPiA+ICt7DQo+ ID4gKwlzdHJ1Y3QgdmlydGlvX25ldCAqZGV2Ow0KPiA+ICsJc3RydWN0IHZob3N0X3ZpcnRxdWV1 ZSAqdnE7DQo+ID4gKw0KPiA+ICsJZGV2ID0gZ2V0X2RldmljZSh2aWQpOw0KPiA+ICsJaWYgKHVu bGlrZWx5KCFkZXYpKQ0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArDQo+ID4gKwlpZiAodW5saWtl bHkoIShkZXYtPnByb3RvY29sX2ZlYXR1cmVzICYNCj4gPiArCQkoMVVMTCA8PCBWSE9TVF9VU0VS X1BST1RPQ09MX0ZfSU5GTElHSFRfU0hNRkQpKSkpDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKw0K PiA+ICsJaWYgKHVubGlrZWx5KCF2cV9pc19wYWNrZWQoZGV2KSkpDQo+ID4gKwkJcmV0dXJuIC0x Ow0KPiA+ICsNCj4gPiArCWlmICh1bmxpa2VseSh2cmluZ19pZHggPj0gVkhPU1RfTUFYX1ZSSU5H KSkNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKw0KPiA+ICsJdnEgPSBkZXYtPnZpcnRxdWV1ZVt2 cmluZ19pZHhdOw0KPiA+ICsJaWYgKCF2cSkNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKw0KPiA+ ICsJaWYgKHVubGlrZWx5KCF2cS0+aW5mbGlnaHRfcGFja2VkKSkNCj4gPiArCQlyZXR1cm4gLTE7 DQo+ID4gKw0KPiA+ICsJdnEtPmluZmxpZ2h0X3BhY2tlZC0+ZGVzY1t2cS0+aW5mbGlnaHRfcGFj a2VkLQ0KPiA+ZGVzY1toZWFkXS5sYXN0XS5uZXh0ID0NCj4gPiArCXZxLT5pbmZsaWdodF9wYWNr ZWQtPmZyZWVfaGVhZDsNCj4gDQo+IERpdHRvLg0KPiANCj4gPiArCXZxLT5pbmZsaWdodF9wYWNr ZWQtPmZyZWVfaGVhZCA9IGhlYWQ7DQo+ID4gKwl2cS0+aW5mbGlnaHRfcGFja2VkLT51c2VkX2lk eCArPSB2cS0+aW5mbGlnaHRfcGFja2VkLQ0KPiA+ZGVzY1toZWFkXS5udW07DQo+ID4gKwlpZiAo dnEtPmluZmxpZ2h0X3BhY2tlZC0+dXNlZF9pZHggPj0gdnEtPmluZmxpZ2h0X3BhY2tlZC0+ZGVz Y19udW0pDQo+IHsNCj4gPiArCQl2cS0+aW5mbGlnaHRfcGFja2VkLT51c2VkX2lkeCAmPSB2cS0+ aW5mbGlnaHRfcGFja2VkLQ0KPiA+ZGVzY19udW0gLSAxOw0KPiANCj4gQ2FuJ3QgYXNzdW1lIHRo ZSByaW5nIHNpemUgd2lsbCBiZSBhIHBvd2VyIG9mIHR3by4NCj4gDQo+ID4gKwkJdnEtPmluZmxp Z2h0X3BhY2tlZC0+dXNlZF93cmFwX2NvdW50ZXIgPQ0KPiA+ICsJCSF2cS0+aW5mbGlnaHRfcGFj a2VkLT51c2VkX3dyYXBfY291bnRlcjsNCj4gDQo+IFRoZSBpbmRlbnQgbmVlZHMgdG8gYmUgZml4 ZWQuDQo+IA0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICB1aW50MTZfdA0KPiA+ICBydGVfdmhvc3RfYXZhaWxfZW50cmllcyhpbnQgdmlkLCB1aW50 MTZfdCBxdWV1ZV9pZCkgIHsgQEAgLTk1MCw2DQo+ID4gKzEyNzAsNjEgQEAgaW50IHJ0ZV92aG9z dF9nZXRfdnJpbmdfYmFzZShpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gPiAgCXJldHVy biAwOw0KPiA+ICB9DQo+ID4NCj4gPiAraW50IHJ0ZV92aG9zdF9nZXRfdnJpbmdfYmFzZV9jb3Vu dGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+ICsJCWJvb2wgKmF2YWlsX3dyYXBf Y291bnRlciwgYm9vbCAqdXNlZF93cmFwX2NvdW50ZXIpIHsNCj4gPiArCXN0cnVjdCB2aXJ0aW9f bmV0ICpkZXYgPSBnZXRfZGV2aWNlKHZpZCk7DQo+ID4gKw0KPiA+ICsJaWYgKGRldiA9PSBOVUxM IHx8IGF2YWlsX3dyYXBfY291bnRlciA9PSBOVUxMIHx8DQo+IHVzZWRfd3JhcF9jb3VudGVyID09 IE5VTEwpDQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsNCj4gPiArCSphdmFpbF93cmFwX2NvdW50 ZXIgPSBkZXYtPnZpcnRxdWV1ZVtxdWV1ZV9pZF0tDQo+ID5hdmFpbF93cmFwX2NvdW50ZXI7DQo+ ID4gKwkqdXNlZF93cmFwX2NvdW50ZXIgPSBkZXYtPnZpcnRxdWV1ZVtxdWV1ZV9pZF0tDQo+ID51 c2VkX3dyYXBfY291bnRlcjsNCj4gDQo+IEkgdGhpbmsgd2Ugc2hvdWxkIHJlcG9ydCB3cmFwIGNv dW50ZXJzIGluIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdHMgZm9yIHBhY2tlZA0KPiByaW5nIGlu IHJ0ZV92aG9zdF9nZXRfdnJpbmdfYmFzZSgpLg0KDQpPaywgSSBqdXN0IGRvbid0IHdhbnQgdG8g Y2hhbmdlIHRoZSBydGVfdmhvc3RfZ2V0X3ZyaW5nX2Jhc2UoKSBmdW5jdGlvbi4gSSB0aGluayBp dCdzIHdpZGVseSB1c2VkLg0KPiANCj4gDQo+ID4gK2ludCBydGVfdmhvc3Rfc2V0X3ZyaW5nX2Jh c2VfY291bnRlcihpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gPiArCQlib29sIGF2YWls X3dyYXBfY291bnRlciwgYm9vbCB1c2VkX3dyYXBfY291bnRlcikgew0KPiA+ICsJc3RydWN0IHZp cnRpb19uZXQgKmRldiA9IGdldF9kZXZpY2UodmlkKTsNCj4gPiArDQo+ID4gKwlpZiAoIWRldikN Cj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKw0KPiA+ICsJZGV2LT52aXJ0cXVldWVbcXVldWVfaWRd LT5hdmFpbF93cmFwX2NvdW50ZXIgPQ0KPiBhdmFpbF93cmFwX2NvdW50ZXI7DQo+ID4gKwlkZXYt PnZpcnRxdWV1ZVtxdWV1ZV9pZF0tPnVzZWRfd3JhcF9jb3VudGVyID0NCj4gdXNlZF93cmFwX2Nv dW50ZXI7DQo+IA0KPiBEaXR0by4NCj4gDQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+IA0KPiBDYW4geW91IHByb3ZpZGUgc29tZSBzdGVwcyBpbiB5b3VyIGNvdmVyIGxl dHRlciBmb3IgdXMgdG8gZ2l2ZSBpdCBhIHRyeSB3aXRoDQo+IHlvdXIgZXhhbXBsZT8NCg0KSXQn cyBPSyAsIHdpbGwgZG8gdGhpcyBpbiB0aGUgbmV4dCB2ZXJzaW9uLg0KPiANCj4gVGhhbmtzLA0K PiBUaXdlaQ0K