From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by inbox.dpdk.org (Postfix) with ESMTP id A6719A00E6
	for <public@inbox.dpdk.org>; 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 <dev@dpdk.org>; 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" <jin.yu@intel.com>
To: "Bie, Tiwei" <tiwei.bie@intel.com>
CC: "dev@dpdk.org" <dev@dpdk.org>, "Liu, Changpeng" <changpeng.liu@intel.com>, 
 "maxime.coquelin@redhat.com" <maxime.coquelin@redhat.com>, "Wang, Zhihong"
 <zhihong.wang@intel.com>, Lin Li <lilin24@baidu.com>, Xun Ni
 <nixun@baidu.com>, Yu Zhang <zhangyu31@baidu.com>
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: <B9FBC361811A3D4DBB02350807E29F7B0B943538@SHSMSX101.ccr.corp.intel.com>
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 <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

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