linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Gix, Brian" <brian.gix@intel.com>
To: "marcel@holtmann.org" <marcel@holtmann.org>
Cc: "johan.hedberg@gmail.com" <johan.hedberg@gmail.com>,
	"linux-bluetooth@vger.kernel.org"
	<linux-bluetooth@vger.kernel.org>,
	"Stotland, Inga" <inga.stotland@intel.com>
Subject: Re: [PATCH BlueZ v5 02/14] mesh: Mesh crypto support
Date: Sun, 8 Jul 2018 15:07:00 +0000	[thread overview]
Message-ID: <1531062419.7346.19.camel@intel.com> (raw)
In-Reply-To: <26C9EEB7-AC2B-4880-9C01-C287F45BB6CA@holtmann.org>

SGkgTWFyY2VsLA0KDQpBbGwgb2YgeW91ciBiZWxvdyBjb21tZW50cyB3aWxsIGJlIGluY29ycG9y
YXRlZCBpbnRvIHBhdGNoc2V0IHY2DQoNCk9uIEZyaSwgMjAxOC0wNy0wNiBhdCAyMDoxMCArMDIw
MCwgTWFyY2VsIEhvbHRtYW5uIHdyb3RlOg0KPiBIaSBCcmlhbiwNCj4gDQo+ID4gLS0tDQo+ID4g
bWVzaC9jcnlwdG8uYyB8IDE2MDcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrDQo+ID4gMSBmaWxlIGNoYW5nZWQsIDE2MDcgaW5zZXJ0aW9u
cygrKQ0KPiA+IGNyZWF0ZSBtb2RlIDEwMDY0NCBtZXNoL2NyeXB0by5jDQo+IA0KPiB3aGF0IEkg
YW0gbWlzc2luZyBpcyBhIHVuaXQvdGVzdC1tZXNoLWNyeXB0byB3aXRoIHRoZSBNZXNoIHRlc3Qg
dmVjdG9ycy4NCj4gDQo+ID4gDQo+ID4gZGlmZiAtLWdpdCBhL21lc2gvY3J5cHRvLmMgYi9tZXNo
L2NyeXB0by5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAu
LmM0MjRjZjYyMg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9tZXNoL2NyeXB0by5jDQo+
ID4gQEAgLTAsMCArMSwxNjA3IEBADQo+ID4gKy8qDQo+ID4gKyAqDQo+ID4gKyAqICBCbHVlWiAt
IEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGludXgNCj4gPiArICoNCj4gPiArICogIENv
cHlyaWdodCAoQykgMjAxOCAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
DQo+ID4gKyAqDQo+ID4gKyAqDQo+ID4gKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+ID4gKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQo+ID4gKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXINCj4gPiArICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLg0KPiA+ICsgKg0KPiA+ICsgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQo+ID4gKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZg0KPiA+ICsgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCj4gPiArICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ID4gKyAqDQo+ID4gKyAqLw0KPiA+ICsNCj4g
PiArI2lmZGVmIEhBVkVfQ09ORklHX0gNCj4gPiArI2luY2x1ZGUgPGNvbmZpZy5oPg0KPiA+ICsj
ZW5kaWYNCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxmY250bC5oPg0KPiA+ICsjaW5jbHVkZSA8dW5p
c3RkLmg+DQo+ID4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gPiArI2luY2x1ZGUgPHN5cy9zb2Nr
ZXQuaD4NCj4gPiArI2luY2x1ZGUgPGVsbC9lbGwuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxs
aW51eC9pZl9hbGcuaD4NCj4gPiArDQo+ID4gKyNpZm5kZWYgU09MX0FMRw0KPiA+ICsjZGVmaW5l
IFNPTF9BTEcJCTI3OQ0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKyNpZm5kZWYgQUxHX1NFVF9B
RUFEX0FVVEhTSVpFDQo+ID4gKyNkZWZpbmUgQUxHX1NFVF9BRUFEX0FVVEhTSVpFCTUNCj4gPiAr
I2VuZGlmDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAibWVzaC9tZXNoLmgiDQo+ID4gKyNpbmNsdWRl
ICJtZXNoL25vZGUuaCINCj4gPiArI2luY2x1ZGUgIm1lc2gvbmV0LmgiDQo+ID4gKyNpbmNsdWRl
ICJtZXNoL2NyeXB0by5oIg0KPiA+ICsjaW5jbHVkZSAibWVzaC9kaXNwbGF5LmgiDQo+IA0KPiBO
byBpZGVhIHdoeSB5b3Ugd291bGQgbmVlZCBtZXNoL2Rpc3BsYXkuaCBoZXJlLg0KPiANCj4gPiAr
DQo+ID4gK3N0YXRpYyBpbnQgYWxnX25ldyhpbnQgZmQsIGNvbnN0IHZvaWQgKmtleXZhbCwgc29j
a2xlbl90IGtleWxlbiwNCj4gPiArCQkJCQkJCXNpemVfdCBtaWNfc2l6ZSkNCj4gPiArew0KPiA+
ICsJaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9BTEcsIEFMR19TRVRfS0VZLCBrZXl2YWwsIGtleWxl
bikgPCAwKSB7DQo+ID4gKwkJbF9lcnJvcigia2V5Iik7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+
ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChtaWNfc2l6ZSAmJg0KPiA+ICsJCXNldHNvY2tvcHQoZmQs
IFNPTF9BTEcsIEFMR19TRVRfQUVBRF9BVVRIU0laRSwNCj4gPiArCQkJCQkJCU5VTEwsIG1pY19z
aXplKSA8IDApIHsNCj4gPiArCQlsX2Vycm9yKCJ0YWdsZW4iKTsNCj4gDQo+IEkgYW0gbm90IHN1
cmUgd2Ugc2hvdWxkIHByaW50IGVycm9ycyBoZXJlLg0KPiANCj4gPiArCQlyZXR1cm4gLTE7DQo+
ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBhY2NlcHQ0KCkg
d2l0aCBTT0NLX0NMT0VYRUMgKi8NCj4gPiArCXJldHVybiBhY2NlcHQoZmQsIE5VTEwsIDApOw0K
PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBhbGdfZW5jcnlwdChpbnQgZmQsIGNvbnN0
IHZvaWQgKmluYnVmLCBzaXplX3QgaW5sZW4sDQo+ID4gKwkJCQkJCXZvaWQgKm91dGJ1Ziwgc2l6
ZV90IG91dGxlbikNCj4gPiArew0KPiA+ICsJX191MzIgYWxnX29wID0gQUxHX09QX0VOQ1JZUFQ7
DQo+ID4gKwljaGFyIGNidWZbQ01TR19TUEFDRShzaXplb2YoYWxnX29wKSldOw0KPiA+ICsJc3Ry
dWN0IGNtc2doZHIgKmNtc2c7DQo+ID4gKwlzdHJ1Y3QgbXNnaGRyIG1zZzsNCj4gPiArCXN0cnVj
dCBpb3ZlYyBpb3Y7DQo+ID4gKwlzc2l6ZV90IGxlbjsNCj4gPiArDQo+ID4gKwltZW1zZXQoY2J1
ZiwgMCwgc2l6ZW9mKGNidWYpKTsNCj4gPiArCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7
DQo+ID4gKw0KPiA+ICsJbXNnLm1zZ19jb250cm9sID0gY2J1ZjsNCj4gPiArCW1zZy5tc2dfY29u
dHJvbGxlbiA9IHNpemVvZihjYnVmKTsNCj4gPiArDQo+ID4gKwljbXNnID0gQ01TR19GSVJTVEhE
UigmbXNnKTsNCj4gPiArCWNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfQUxHOw0KPiA+ICsJY21zZy0+
Y21zZ190eXBlID0gQUxHX1NFVF9PUDsNCj4gPiArCWNtc2ctPmNtc2dfbGVuID0gQ01TR19MRU4o
c2l6ZW9mKGFsZ19vcCkpOw0KPiA+ICsJbWVtY3B5KENNU0dfREFUQShjbXNnKSwgJmFsZ19vcCwg
c2l6ZW9mKGFsZ19vcCkpOw0KPiA+ICsNCj4gPiArCWlvdi5pb3ZfYmFzZSA9ICh2b2lkICopIGlu
YnVmOw0KPiA+ICsJaW92Lmlvdl9sZW4gPSBpbmxlbjsNCj4gPiArDQo+ID4gKwltc2cubXNnX2lv
diA9ICZpb3Y7DQo+ID4gKwltc2cubXNnX2lvdmxlbiA9IDE7DQo+ID4gKw0KPiA+ICsJbGVuID0g
c2VuZG1zZyhmZCwgJm1zZywgMCk7DQo+ID4gKwlpZiAobGVuIDwgMCkNCj4gPiArCQlyZXR1cm4g
ZmFsc2U7DQo+ID4gKw0KPiA+ICsJbGVuID0gcmVhZChmZCwgb3V0YnVmLCBvdXRsZW4pOw0KPiA+
ICsJaWYgKGxlbiA8IDApDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCXJldHVy
biB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGFlc19lY2Jfc2V0dXAoY29u
c3QgdWludDhfdCBrZXlbMTZdKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qgc29ja2FkZHJfYWxnIHNh
bGc7DQo+ID4gKwlpbnQgZmQsIG5mZDsNCj4gPiArDQo+ID4gKwlmZCA9IHNvY2tldChQRl9BTEcs
IFNPQ0tfU0VRUEFDS0VUIHwgU09DS19DTE9FWEVDLCAwKTsNCj4gPiArCWlmIChmZCA8IDApDQo+
ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsNCj4gPiArCW1lbXNldCgmc2FsZywgMCwgc2l6ZW9mKHNh
bGcpKTsNCj4gPiArCXNhbGcuc2FsZ19mYW1pbHkgPSBBRl9BTEc7DQo+ID4gKwlzdHJjcHkoKGNo
YXIgKikgc2FsZy5zYWxnX3R5cGUsICJza2NpcGhlciIpOw0KPiA+ICsJc3RyY3B5KChjaGFyICop
IHNhbGcuc2FsZ19uYW1lLCAiZWNiKGFlcykiKTsNCj4gPiArDQo+ID4gKwlpZiAoYmluZChmZCwg
KHN0cnVjdCBzb2NrYWRkciAqKSAmc2FsZywgc2l6ZW9mKHNhbGcpKSA8IDApIHsNCj4gPiArCQlj
bG9zZShmZCk7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW5mZCA9
IGFsZ19uZXcoZmQsIGtleSwgMTYsIDApOw0KPiA+ICsNCj4gPiArCWNsb3NlKGZkKTsNCj4gPiAr
DQo+ID4gKwlyZXR1cm4gbmZkOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBhZXNf
ZWNiKGludCBmZCwgY29uc3QgdWludDhfdCBwbGFpbnRleHRbMTZdLCB1aW50OF90IGVuY3J5cHRl
ZFsxNl0pDQo+ID4gK3sNCj4gPiArCXJldHVybiBhbGdfZW5jcnlwdChmZCwgcGxhaW50ZXh0LCAx
NiwgZW5jcnlwdGVkLCAxNik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGFlc19l
Y2JfZGVzdHJveShpbnQgZmQpDQo+ID4gK3sNCj4gPiArCWNsb3NlKGZkKTsNCj4gPiArfQ0KPiA+
ICsNCj4gPiArc3RhdGljIGJvb2wgYWVzX2VjYl9vbmUoY29uc3QgdWludDhfdCBrZXlbMTZdLA0K
PiA+ICsJCQljb25zdCB1aW50OF90IHBsYWludGV4dFsxNl0sIHVpbnQ4X3QgZW5jcnlwdGVkWzE2
XSkNCj4gPiArew0KPiA+ICsJYm9vbCByZXN1bHQ7DQo+ID4gKwlpbnQgZmQ7DQo+ID4gKw0KPiA+
ICsJZmQgPSBhZXNfZWNiX3NldHVwKGtleSk7DQo+ID4gKwlpZiAoZmQgPCAwKQ0KPiA+ICsJCXJl
dHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlyZXN1bHQgPSBhZXNfZWNiKGZkLCBwbGFpbnRleHQs
IGVuY3J5cHRlZCk7DQo+ID4gKw0KPiA+ICsJYWVzX2VjYl9kZXN0cm95KGZkKTsNCj4gPiArDQo+
ID4gKwlyZXR1cm4gcmVzdWx0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfYWVzX2Vj
Yl9vbmUoY29uc3QgdWludDhfdCBrZXlbMTZdLA0KPiA+ICsJCQljb25zdCB1aW50OF90IHBsYWlu
dGV4dFsxNl0sIHVpbnQ4X3QgZW5jcnlwdGVkWzE2XSkNCj4gPiArew0KPiA+ICsJcmV0dXJuIGFl
c19lY2Jfb25lKGtleSwgcGxhaW50ZXh0LCBlbmNyeXB0ZWQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+
ICsvKiBNYXhpbXVtIG1lc3NhZ2UgbGVuZ3RoIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBhZXNfY21h
YyAqLw0KPiA+ICsjZGVmaW5lIENNQUNfTVNHX01BWAkoNjQgKyA2NCArIDE3KQ0KPiA+ICsNCj4g
PiArc3RhdGljIGludCBhZXNfY21hY19zZXR1cChjb25zdCB1aW50OF90IGtleVsxNl0pDQo+ID4g
K3sNCj4gPiArCXN0cnVjdCBzb2NrYWRkcl9hbGcgc2FsZzsNCj4gPiArCWludCBmZCwgbmZkOw0K
PiA+ICsNCj4gPiArCWZkID0gc29ja2V0KFBGX0FMRywgU09DS19TRVFQQUNLRVQgfCBTT0NLX0NM
T0VYRUMsIDApOw0KPiA+ICsJaWYgKGZkIDwgMCkNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKw0K
PiA+ICsJbWVtc2V0KCZzYWxnLCAwLCBzaXplb2Yoc2FsZykpOw0KPiA+ICsJc2FsZy5zYWxnX2Zh
bWlseSA9IEFGX0FMRzsNCj4gPiArCXN0cmNweSgoY2hhciAqKSBzYWxnLnNhbGdfdHlwZSwgImhh
c2giKTsNCj4gPiArCXN0cmNweSgoY2hhciAqKSBzYWxnLnNhbGdfbmFtZSwgImNtYWMoYWVzKSIp
Ow0KPiA+ICsNCj4gPiArCWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopICZzYWxnLCBz
aXplb2Yoc2FsZykpIDwgMCkgew0KPiA+ICsJCWNsb3NlKGZkKTsNCj4gPiArCQlyZXR1cm4gLTE7
DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbmZkID0gYWxnX25ldyhmZCwga2V5LCAxNiwgMCk7DQo+
ID4gKw0KPiA+ICsJY2xvc2UoZmQpOw0KPiA+ICsNCj4gPiArCXJldHVybiBuZmQ7DQo+ID4gK30N
Cj4gPiArDQo+ID4gK3N0YXRpYyBib29sIGFlc19jbWFjKGludCBmZCwgY29uc3QgdWludDhfdCAq
bXNnLA0KPiA+ICsJCQkJCXNpemVfdCBtc2dfbGVuLCB1aW50OF90IHJlc1sxNl0pDQo+ID4gK3sN
Cj4gPiArCXNzaXplX3QgbGVuOw0KPiA+ICsNCj4gPiArCWlmIChtc2dfbGVuID4gQ01BQ19NU0df
TUFYKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlsZW4gPSBzZW5kKGZkLCBt
c2csIG1zZ19sZW4sIDApOw0KPiA+ICsJaWYgKGxlbiA8IDApDQo+ID4gKwkJcmV0dXJuIGZhbHNl
Ow0KPiA+ICsNCj4gPiArCWxlbiA9IHJlYWQoZmQsIHJlcywgMTYpOw0KPiA+ICsJaWYgKGxlbiA8
IDApDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+
ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBhZXNfY21hY19kZXN0cm95KGludCBmZCkNCj4g
PiArew0KPiA+ICsJY2xvc2UoZmQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGFl
c19jbWFjX05fc3RhcnQoY29uc3QgdWludDhfdCBOWzE2XSkNCj4gPiArew0KPiA+ICsJaW50IGZk
Ow0KPiA+ICsNCj4gPiArCWZkID0gYWVzX2NtYWNfc2V0dXAoTik7DQo+ID4gKwlyZXR1cm4gZmQ7
DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIGFlc19jbWFjX29uZShjb25zdCB1aW50
OF90IGtleVsxNl0sIGNvbnN0IHZvaWQgKm1zZywNCj4gPiArCQkJCQlzaXplX3QgbXNnX2xlbiwg
dWludDhfdCByZXNbMTZdKQ0KPiA+ICt7DQo+ID4gKwlib29sIHJlc3VsdDsNCj4gPiArCWludCBm
ZDsNCj4gPiArDQo+ID4gKwlmZCA9IGFlc19jbWFjX3NldHVwKGtleSk7DQo+ID4gKwlpZiAoZmQg
PCAwKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlyZXN1bHQgPSBhZXNfY21h
YyhmZCwgbXNnLCBtc2dfbGVuLCByZXMpOw0KPiA+ICsNCj4gPiArCWFlc19jbWFjX2Rlc3Ryb3ko
ZmQpOw0KPiA+ICsNCj4gPiArCXJldHVybiByZXN1bHQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jv
b2wgbWVzaF9jcnlwdG9fYWVzX2NtYWMoY29uc3QgdWludDhfdCBrZXlbMTZdLCBjb25zdCB1aW50
OF90ICptc2csDQo+ID4gKwkJCQkJc2l6ZV90IG1zZ19sZW4sIHVpbnQ4X3QgcmVzWzE2XSkNCj4g
PiArew0KPiA+ICsJcmV0dXJuIGFlc19jbWFjX29uZShrZXksIG1zZywgbXNnX2xlbiwgcmVzKTsN
Cj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19hZXNfY2NtX2VuY3J5cHQoY29u
c3QgdWludDhfdCBub25jZVsxM10sIGNvbnN0IHVpbnQ4X3Qga2V5WzE2XSwNCj4gPiArCQkJCQlj
b25zdCB1aW50OF90ICphYWQsIHVpbnQxNl90IGFhZF9sZW4sDQo+ID4gKwkJCQkJY29uc3QgdWlu
dDhfdCAqbXNnLCB1aW50MTZfdCBtc2dfbGVuLA0KPiA+ICsJCQkJCXVpbnQ4X3QgKm91dF9tc2cs
DQo+ID4gKwkJCQkJdm9pZCAqb3V0X21pYywgc2l6ZV90IG1pY19zaXplKQ0KPiA+ICt7DQo+ID4g
Kwl1aW50OF90IHBtc2dbMTZdLCBjbWljWzE2XSwgY21zZ1sxNl07DQo+ID4gKwl1aW50OF90IG1p
Y1sxNl0sIFhuWzE2XTsNCj4gPiArCXVpbnQxNl90IGJsa19jbnQsIGxhc3RfYmxrOw0KPiA+ICsJ
Ym9vbCByZXN1bHQ7DQo+ID4gKwlzaXplX3QgaSwgajsNCj4gPiArCWludCBmZDsNCj4gPiArDQo+
ID4gKwlpZiAoYWFkX2xlbiA+PSAweGZmMDApIHsNCj4gPiArCQlsX2Vycm9yKCJVbnN1cHBvcnRl
ZCBBQUQgc2l6ZSIpOw0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArCX0NCj4gDQo+IFNhbWUg
Y29tbWVudCBmb3IgdGhlIGVycm9ycy4NCj4gDQo+IEluIGEgZm9sbG93IHVwIHBhdGNoLCBJIHdv
dWxkIHByZWZlciB0aGF0IHdlIG1vdmUgb3ZlciB0byB1c2UgdGhlIGtlcm5lbCBBRVMtQ01BQyBz
dXBwb3J0Lg0KPiANCj4gPiArDQo+ID4gKwlmZCA9IGFlc19lY2Jfc2V0dXAoa2V5KTsNCj4gPiAr
CWlmIChmZCA8IDApDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCS8qIENfbWlj
ID0gZShBcHBLZXksIDB4MDEgfHwgbm9uY2UgfHwgMHgwMDAwKSAqLw0KPiA+ICsJcG1zZ1swXSA9
IDB4MDE7DQo+ID4gKwltZW1jcHkocG1zZyArIDEsIG5vbmNlLCAxMyk7DQo+ID4gKwlsX3B1dF9i
ZTE2KDB4MDAwMCwgcG1zZyArIDE0KTsNCj4gPiArDQo+ID4gKwlyZXN1bHQgPSBhZXNfZWNiKGZk
LCBwbXNnLCBjbWljKTsNCj4gPiArCWlmICghcmVzdWx0KQ0KPiA+ICsJCWdvdG8gZG9uZTsNCj4g
PiArDQo+ID4gKwkvKiBYXzAgPSBlKEFwcEtleSwgMHgwOSB8fCBub25jZSB8fCBsZW5ndGgpICov
DQo+ID4gKwlpZiAobWljX3NpemUgPT0gc2l6ZW9mKHVpbnQ2NF90KSkNCj4gPiArCQlwbXNnWzBd
ID0gMHgxOSB8IChhYWRfbGVuID8gMHg0MCA6IDB4MDApOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXBt
c2dbMF0gPSAweDA5IHwgKGFhZF9sZW4gPyAweDQwIDogMHgwMCk7DQo+ID4gKw0KPiA+ICsJbWVt
Y3B5KHBtc2cgKyAxLCBub25jZSwgMTMpOw0KPiA+ICsJbF9wdXRfYmUxNihtc2dfbGVuLCBwbXNn
ICsgMTQpOw0KPiA+ICsNCj4gPiArCXJlc3VsdCA9IGFlc19lY2IoZmQsIHBtc2csIFhuKTsNCj4g
PiArCWlmICghcmVzdWx0KQ0KPiA+ICsJCWdvdG8gZG9uZTsNCj4gPiArDQo+ID4gKwkvKiBJZiBB
QUQgaXMgYmVpbmcgdXNlZCB0byBhdXRoZW50aWNhdGUsIGluY2x1ZGUgaXQgaGVyZSAqLw0KPiA+
ICsJaWYgKGFhZF9sZW4pIHsNCj4gPiArCQlsX3B1dF9iZTE2KGFhZF9sZW4sIHBtc2cpOw0KPiA+
ICsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHVpbnQxNl90KTsgaSsrKQ0KPiA+ICsJ
CQlwbXNnW2ldID0gWG5baV0gXiBwbXNnW2ldOw0KPiA+ICsNCj4gPiArCQlqID0gMDsNCj4gPiAr
CQlhYWRfbGVuICs9IHNpemVvZih1aW50MTZfdCk7DQo+ID4gKwkJd2hpbGUgKGFhZF9sZW4gPiAx
Nikgew0KPiA+ICsJCQlkbyB7DQo+ID4gKwkJCQlwbXNnW2ldID0gWG5baV0gXiBhYWRbal07DQo+
ID4gKwkJCQlpKyssIGorKzsNCj4gPiArCQkJfSB3aGlsZSAoaSA8IDE2KTsNCj4gPiArDQo+ID4g
KwkJCWFhZF9sZW4gLT0gMTY7DQo+ID4gKwkJCWkgPSAwOw0KPiA+ICsNCj4gPiArCQkJcmVzdWx0
ID0gYWVzX2VjYihmZCwgcG1zZywgWG4pOw0KPiA+ICsJCQlpZiAoIXJlc3VsdCkNCj4gPiArCQkJ
CWdvdG8gZG9uZTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBhYWRf
bGVuOyBpKyssIGorKykNCj4gPiArCQkJcG1zZ1tpXSA9IFhuW2ldIF4gYWFkW2pdOw0KPiA+ICsN
Cj4gPiArCQlmb3IgKGkgPSBhYWRfbGVuOyBpIDwgMTY7IGkrKykNCj4gPiArCQkJcG1zZ1tpXSA9
IFhuW2ldOw0KPiA+ICsNCj4gPiArCQlyZXN1bHQgPSBhZXNfZWNiKGZkLCBwbXNnLCBYbik7DQo+
ID4gKwkJaWYgKCFyZXN1bHQpDQo+ID4gKwkJCWdvdG8gZG9uZTsNCj4gPiArCX0NCj4gPiArDQo+
ID4gKwlsYXN0X2JsayA9IG1zZ19sZW4gJSAxNjsNCj4gPiArCWJsa19jbnQgPSAobXNnX2xlbiAr
IDE1KSAvIDE2Ow0KPiA+ICsJaWYgKCFsYXN0X2JsaykNCj4gPiArCQlsYXN0X2JsayA9IDE2Ow0K
PiA+ICsNCj4gPiArCWZvciAoaiA9IDA7IGogPCBibGtfY250OyBqKyspIHsNCj4gPiArCQlpZiAo
aiArIDEgPT0gYmxrX2NudCkgew0KPiA+ICsJCQkvKiBYXzEgPSBlKEFwcEtleSwgWF8wIF4gUGF5
bG9hZFswLTE1XSkgKi8NCj4gPiArCQkJZm9yIChpID0gMDsgaSA8IGxhc3RfYmxrOyBpKyspDQo+
ID4gKwkJCQlwbXNnW2ldID0gWG5baV0gXiBtc2dbKGogKiAxNikgKyBpXTsNCj4gPiArCQkJZm9y
IChpID0gbGFzdF9ibGs7IGkgPCAxNjsgaSsrKQ0KPiA+ICsJCQkJcG1zZ1tpXSA9IFhuW2ldIF4g
MHgwMDsNCj4gPiArDQo+ID4gKwkJCXJlc3VsdCA9IGFlc19lY2IoZmQsIHBtc2csIFhuKTsNCj4g
PiArCQkJaWYgKCFyZXN1bHQpDQo+ID4gKwkJCQlnb3RvIGRvbmU7DQo+ID4gKw0KPiA+ICsJCQkv
KiBNSUMgPSBDX21pYyBeIFhfMSAqLw0KPiA+ICsJCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKG1p
Yyk7IGkrKykNCj4gPiArCQkJCW1pY1tpXSA9IGNtaWNbaV0gXiBYbltpXTsNCj4gPiArDQo+ID4g
KwkJCS8qIENfMSA9IGUoQXBwS2V5LCAweDAxIHx8IG5vbmNlIHx8IDB4MDAwMSkgKi8NCj4gPiAr
CQkJcG1zZ1swXSA9IDB4MDE7DQo+ID4gKwkJCW1lbWNweShwbXNnICsgMSwgbm9uY2UsIDEzKTsN
Cj4gPiArCQkJbF9wdXRfYmUxNihqICsgMSwgcG1zZyArIDE0KTsNCj4gPiArDQo+ID4gKwkJCXJl
c3VsdCA9IGFlc19lY2IoZmQsIHBtc2csIGNtc2cpOw0KPiA+ICsJCQlpZiAoIXJlc3VsdCkNCj4g
PiArCQkJCWdvdG8gZG9uZTsNCj4gPiArDQo+ID4gKwkJCWlmIChvdXRfbXNnKSB7DQo+ID4gKwkJ
CQkvKiBFbmNyeXB0ZWQgPSBQYXlsb2FkWzAtMTVdIF4gQ18xICovDQo+ID4gKwkJCQlmb3IgKGkg
PSAwOyBpIDwgbGFzdF9ibGs7IGkrKykNCj4gPiArCQkJCQlvdXRfbXNnWyhqICogMTYpICsgaV0g
PQ0KPiA+ICsJCQkJCQltc2dbKGogKiAxNikgKyBpXSBeIGNtc2dbaV07DQo+ID4gKw0KPiA+ICsJ
CQl9DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJLyogWF8xID0gZShBcHBLZXksIFhfMCBeIFBh
eWxvYWRbMC0xNV0pICovDQo+ID4gKwkJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQ0KPiA+ICsJ
CQkJcG1zZ1tpXSA9IFhuW2ldIF4gbXNnWyhqICogMTYpICsgaV07DQo+ID4gKw0KPiA+ICsJCQly
ZXN1bHQgPSBhZXNfZWNiKGZkLCBwbXNnLCBYbik7DQo+ID4gKwkJCWlmICghcmVzdWx0KQ0KPiA+
ICsJCQkJZ290byBkb25lOw0KPiA+ICsNCj4gPiArCQkJLyogQ18xID0gZShBcHBLZXksIDB4MDEg
fHwgbm9uY2UgfHwgMHgwMDAxKSAqLw0KPiA+ICsJCQlwbXNnWzBdID0gMHgwMTsNCj4gPiArCQkJ
bWVtY3B5KHBtc2cgKyAxLCBub25jZSwgMTMpOw0KPiA+ICsJCQlsX3B1dF9iZTE2KGogKyAxLCBw
bXNnICsgMTQpOw0KPiA+ICsNCj4gPiArCQkJcmVzdWx0ID0gYWVzX2VjYihmZCwgcG1zZywgY21z
Zyk7DQo+ID4gKwkJCWlmICghcmVzdWx0KQ0KPiA+ICsJCQkJZ290byBkb25lOw0KPiA+ICsNCj4g
PiArCQkJaWYgKG91dF9tc2cpIHsNCj4gPiArCQkJCS8qIEVuY3J5cHRlZCA9IFBheWxvYWRbMC0x
NV0gXiBDX04gKi8NCj4gPiArCQkJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQ0KPiA+ICsJCQkJ
CW91dF9tc2dbKGogKiAxNikgKyBpXSA9DQo+ID4gKwkJCQkJCW1zZ1soaiAqIDE2KSArIGldIF4g
Y21zZ1tpXTsNCj4gPiArCQkJfQ0KPiA+ICsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+
ICsJaWYgKG91dF9tc2cpDQo+ID4gKwkJbWVtY3B5KG91dF9tc2cgKyBtc2dfbGVuLCBtaWMsIG1p
Y19zaXplKTsNCj4gPiArDQo+ID4gKwlpZiAob3V0X21pYykgew0KPiA+ICsJCXN3aXRjaCAobWlj
X3NpemUpIHsNCj4gPiArCQljYXNlIHNpemVvZih1aW50MzJfdCk6DQo+ID4gKwkJCSoodWludDMy
X3QgKilvdXRfbWljID0gbF9nZXRfYmUzMihtaWMpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQlj
YXNlIHNpemVvZih1aW50NjRfdCk6DQo+ID4gKwkJCSoodWludDY0X3QgKilvdXRfbWljID0gbF9n
ZXRfYmU2NChtaWMpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQlkZWZhdWx0Og0KPiA+ICsJCQls
X2Vycm9yKCJVbnN1cHBvcnRlZCBNSUMgc2l6ZSIpOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiAr
DQo+ID4gK2RvbmU6DQo+ID4gKwlhZXNfZWNiX2Rlc3Ryb3koZmQpOw0KPiA+ICsNCj4gPiArCXJl
dHVybiByZXN1bHQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wgbWVzaF9jcnlwdG9fYWVzX2Nj
bV9kZWNyeXB0KGNvbnN0IHVpbnQ4X3Qgbm9uY2VbMTNdLCBjb25zdCB1aW50OF90IGtleVsxNl0s
DQo+ID4gKwkJCQljb25zdCB1aW50OF90ICphYWQsIHVpbnQxNl90IGFhZF9sZW4sDQo+ID4gKwkJ
CQljb25zdCB1aW50OF90ICplbmNfbXNnLCB1aW50MTZfdCBlbmNfbXNnX2xlbiwNCj4gPiArCQkJ
CXVpbnQ4X3QgKm91dF9tc2csDQo+ID4gKwkJCQl2b2lkICpvdXRfbWljLCBzaXplX3QgbWljX3Np
emUpDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3QgbXNnWzE2XSwgcG1zZ1sxNl0sIGNtaWNbMTZdLCBj
bXNnWzE2XSwgWG5bMTZdOw0KPiA+ICsJdWludDhfdCBtaWNbMTZdOw0KPiA+ICsJdWludDE2X3Qg
bXNnX2xlbiA9IGVuY19tc2dfbGVuIC0gbWljX3NpemU7DQo+ID4gKwl1aW50MTZfdCBsYXN0X2Js
aywgYmxrX2NudDsNCj4gPiArCWJvb2wgcmVzdWx0Ow0KPiA+ICsJc2l6ZV90IGksIGo7DQo+ID4g
KwlpbnQgZmQ7DQo+ID4gKw0KPiA+ICsJaWYgKGVuY19tc2dfbGVuIDwgNSB8fCBhYWRfbGVuID49
IDB4ZmYwMCkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJZmQgPSBhZXNfZWNi
X3NldHVwKGtleSk7DQo+ID4gKwlpZiAoZmQgPCAwKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4g
PiArDQo+ID4gKwkvKiBDX21pYyA9IGUoQXBwS2V5LCAweDAxIHx8IG5vbmNlIHx8IDB4MDAwMCkg
Ki8NCj4gPiArCXBtc2dbMF0gPSAweDAxOw0KPiA+ICsJbWVtY3B5KHBtc2cgKyAxLCBub25jZSwg
MTMpOw0KPiA+ICsJbF9wdXRfYmUxNigweDAwMDAsIHBtc2cgKyAxNCk7DQo+ID4gKw0KPiA+ICsJ
cmVzdWx0ID0gYWVzX2VjYihmZCwgcG1zZywgY21pYyk7DQo+ID4gKwlpZiAoIXJlc3VsdCkNCj4g
PiArCQlnb3RvIGRvbmU7DQo+ID4gKw0KPiA+ICsJLyogWF8wID0gZShBcHBLZXksIDB4MDkgfHwg
bm9uY2UgfHwgbGVuZ3RoKSAqLw0KPiA+ICsJaWYgKG1pY19zaXplID09IHNpemVvZih1aW50NjRf
dCkpDQo+ID4gKwkJcG1zZ1swXSA9IDB4MTkgfCAoYWFkX2xlbiA/IDB4NDAgOiAweDAwKTsNCj4g
PiArCWVsc2UNCj4gPiArCQlwbXNnWzBdID0gMHgwOSB8IChhYWRfbGVuID8gMHg0MCA6IDB4MDAp
Ow0KPiA+ICsNCj4gPiArCW1lbWNweShwbXNnICsgMSwgbm9uY2UsIDEzKTsNCj4gPiArCWxfcHV0
X2JlMTYobXNnX2xlbiwgcG1zZyArIDE0KTsNCj4gPiArDQo+ID4gKwlyZXN1bHQgPSBhZXNfZWNi
KGZkLCBwbXNnLCBYbik7DQo+ID4gKwlpZiAoIXJlc3VsdCkNCj4gPiArCQlnb3RvIGRvbmU7DQo+
ID4gKw0KPiA+ICsJLyogSWYgQUFEIGlzIGJlaW5nIHVzZWQgdG8gYXV0aGVudGljYXRlLCBpbmNs
dWRlIGl0IGhlcmUgKi8NCj4gPiArCWlmIChhYWRfbGVuKSB7DQo+ID4gKwkJbF9wdXRfYmUxNihh
YWRfbGVuLCBwbXNnKTsNCj4gPiArDQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZih1aW50
MTZfdCk7IGkrKykNCj4gPiArCQkJcG1zZ1tpXSA9IFhuW2ldIF4gcG1zZ1tpXTsNCj4gPiArDQo+
ID4gKwkJaiA9IDA7DQo+ID4gKwkJYWFkX2xlbiArPSBzaXplb2YodWludDE2X3QpOw0KPiA+ICsJ
CXdoaWxlIChhYWRfbGVuID4gMTYpIHsNCj4gPiArCQkJZG8gew0KPiA+ICsJCQkJcG1zZ1tpXSA9
IFhuW2ldIF4gYWFkW2pdOw0KPiA+ICsJCQkJaSsrLCBqKys7DQo+ID4gKwkJCX0gd2hpbGUgKGkg
PCAxNik7DQo+ID4gKw0KPiA+ICsJCQlhYWRfbGVuIC09IDE2Ow0KPiA+ICsJCQlpID0gMDsNCj4g
PiArDQo+ID4gKwkJCXJlc3VsdCA9IGFlc19lY2IoZmQsIHBtc2csIFhuKTsNCj4gPiArCQkJaWYg
KCFyZXN1bHQpDQo+ID4gKwkJCQlnb3RvIGRvbmU7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlm
b3IgKGkgPSAwOyBpIDwgYWFkX2xlbjsgaSsrLCBqKyspDQo+ID4gKwkJCXBtc2dbaV0gPSBYbltp
XSBeIGFhZFtqXTsNCj4gPiArDQo+ID4gKwkJZm9yIChpID0gYWFkX2xlbjsgaSA8IDE2OyBpKysp
DQo+ID4gKwkJCXBtc2dbaV0gPSBYbltpXTsNCj4gPiArDQo+ID4gKwkJcmVzdWx0ID0gYWVzX2Vj
YihmZCwgcG1zZywgWG4pOw0KPiA+ICsJCWlmICghcmVzdWx0KQ0KPiA+ICsJCQlnb3RvIGRvbmU7
DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbGFzdF9ibGsgPSBtc2dfbGVuICUgMTY7DQo+ID4gKwli
bGtfY250ID0gKG1zZ19sZW4gKyAxNSkgLyAxNjsNCj4gPiArCWlmICghbGFzdF9ibGspDQo+ID4g
KwkJbGFzdF9ibGsgPSAxNjsNCj4gPiArDQo+ID4gKwlmb3IgKGogPSAwOyBqIDwgYmxrX2NudDsg
aisrKSB7DQo+ID4gKwkJaWYgKGogKyAxID09IGJsa19jbnQpIHsNCj4gPiArCQkJLyogQ18xID0g
ZShBcHBLZXksIDB4MDEgfHwgbm9uY2UgfHwgMHgwMDAxKSAqLw0KPiA+ICsJCQlwbXNnWzBdID0g
MHgwMTsNCj4gPiArCQkJbWVtY3B5KHBtc2cgKyAxLCBub25jZSwgMTMpOw0KPiA+ICsJCQlsX3B1
dF9iZTE2KGogKyAxLCBwbXNnICsgMTQpOw0KPiA+ICsNCj4gPiArCQkJcmVzdWx0ID0gYWVzX2Vj
YihmZCwgcG1zZywgY21zZyk7DQo+ID4gKwkJCWlmICghcmVzdWx0KQ0KPiA+ICsJCQkJZ290byBk
b25lOw0KPiA+ICsNCj4gPiArCQkJLyogRW5jcnlwdGVkID0gUGF5bG9hZFswLTE1XSBeIENfMSAq
Lw0KPiA+ICsJCQlmb3IgKGkgPSAwOyBpIDwgbGFzdF9ibGs7IGkrKykNCj4gPiArCQkJCW1zZ1tp
XSA9IGVuY19tc2dbKGogKiAxNikgKyBpXSBeIGNtc2dbaV07DQo+ID4gKw0KPiA+ICsJCQlpZiAo
b3V0X21zZykNCj4gPiArCQkJCW1lbWNweShvdXRfbXNnICsgKGogKiAxNiksIG1zZywgbGFzdF9i
bGspOw0KPiA+ICsNCj4gPiArCQkJLyogWF8xID0gZShBcHBLZXksIFhfMCBeIFBheWxvYWRbMC0x
NV0pICovDQo+ID4gKwkJCWZvciAoaSA9IDA7IGkgPCBsYXN0X2JsazsgaSsrKQ0KPiA+ICsJCQkJ
cG1zZ1tpXSA9IFhuW2ldIF4gbXNnW2ldOw0KPiA+ICsJCQlmb3IgKGkgPSBsYXN0X2JsazsgaSA8
IDE2OyBpKyspDQo+ID4gKwkJCQlwbXNnW2ldID0gWG5baV0gXiAweDAwOw0KPiA+ICsNCj4gPiAr
CQkJcmVzdWx0ID0gYWVzX2VjYihmZCwgcG1zZywgWG4pOw0KPiA+ICsJCQlpZiAoIXJlc3VsdCkN
Cj4gPiArCQkJCWdvdG8gZG9uZTsNCj4gPiArDQo+ID4gKwkJCS8qIE1JQyA9IENfbWljIF4gWF8x
ICovDQo+ID4gKwkJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YobWljKTsgaSsrKQ0KPiA+ICsJCQkJ
bWljW2ldID0gY21pY1tpXSBeIFhuW2ldOw0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCS8qIENf
MSA9IGUoQXBwS2V5LCAweDAxIHx8IG5vbmNlIHx8IDB4MDAwMSkgKi8NCj4gPiArCQkJcG1zZ1sw
XSA9IDB4MDE7DQo+ID4gKwkJCW1lbWNweShwbXNnICsgMSwgbm9uY2UsIDEzKTsNCj4gPiArCQkJ
bF9wdXRfYmUxNihqICsgMSwgcG1zZyArIDE0KTsNCj4gPiArDQo+ID4gKwkJCXJlc3VsdCA9IGFl
c19lY2IoZmQsIHBtc2csIGNtc2cpOw0KPiA+ICsJCQlpZiAoIXJlc3VsdCkNCj4gPiArCQkJCWdv
dG8gZG9uZTsNCj4gPiArDQo+ID4gKwkJCS8qIEVuY3J5cHRlZCA9IFBheWxvYWRbMC0xNV0gXiBD
XzEgKi8NCj4gPiArCQkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspDQo+ID4gKwkJCQltc2dbaV0g
PSBlbmNfbXNnWyhqICogMTYpICsgaV0gXiBjbXNnW2ldOw0KPiA+ICsNCj4gPiArCQkJaWYgKG91
dF9tc2cpDQo+ID4gKwkJCQltZW1jcHkob3V0X21zZyArIChqICogMTYpLCBtc2csIDE2KTsNCj4g
PiArDQo+ID4gKwkJCS8qIFhfMSA9IGUoQXBwS2V5LCBYXzAgXiBQYXlsb2FkWzAtMTVdKSAqLw0K
PiA+ICsJCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykNCj4gPiArCQkJCXBtc2dbaV0gPSBYbltp
XSBeIG1zZ1tpXTsNCj4gPiArDQo+ID4gKwkJCXJlc3VsdCA9IGFlc19lY2IoZmQsIHBtc2csIFhu
KTsNCj4gPiArCQkJaWYgKCFyZXN1bHQpDQo+ID4gKwkJCQlnb3RvIGRvbmU7DQo+ID4gKwkJfQ0K
PiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChvdXRfbWljKSB7DQo+ID4gKwkJc3dpdGNoIChtaWNf
c2l6ZSkgew0KPiA+ICsJCWNhc2Ugc2l6ZW9mKHVpbnQzMl90KToNCj4gPiArCQkJKih1aW50MzJf
dCAqKW91dF9taWMgPSBsX2dldF9iZTMyKG1pYyk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNh
c2Ugc2l6ZW9mKHVpbnQ2NF90KToNCj4gPiArCQkJKih1aW50NjRfdCAqKW91dF9taWMgPSBsX2dl
dF9iZTY0KG1pYyk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCWxf
ZXJyb3IoIlVuc3VwcG9ydGVkIE1JQyBzaXplIik7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsN
Cj4gPiArZG9uZToNCj4gPiArCWFlc19lY2JfZGVzdHJveShmZCk7DQo+ID4gKw0KPiA+ICsJcmV0
dXJuIHJlc3VsdDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19rMShjb25z
dCB1aW50OF90IGlrbVsxNl0sIGNvbnN0IHVpbnQ4X3Qgc2FsdFsxNl0sDQo+ID4gKwkJY29uc3Qg
dm9pZCAqaW5mbywgc2l6ZV90IGluZm9fbGVuLCB1aW50OF90IG9rbVsxNl0pDQo+ID4gK3sNCj4g
PiArCXVpbnQ4X3QgcmVzWzE2XTsNCj4gPiArDQo+ID4gKwlpZiAoIWFlc19jbWFjX29uZShzYWx0
LCBpa20sIDE2LCByZXMpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlyZXR1
cm4gYWVzX2NtYWNfb25lKHJlcywgaW5mbywgaW5mb19sZW4sIG9rbSk7DQo+ID4gK30NCj4gPiAr
DQo+ID4gK2Jvb2wgbWVzaF9jcnlwdG9fazIoY29uc3QgdWludDhfdCBuWzE2XSwgY29uc3QgdWlu
dDhfdCAqcCwgc2l6ZV90IHBfbGVuLA0KPiA+ICsJCQkJCQkJdWludDhfdCBuZXRfaWRbMV0sDQo+
ID4gKwkJCQkJCQl1aW50OF90IGVuY19rZXlbMTZdLA0KPiA+ICsJCQkJCQkJdWludDhfdCBwcml2
X2tleVsxNl0pDQo+ID4gK3sNCj4gPiArCWludCBmZDsNCj4gPiArCXVpbnQ4X3Qgb3V0cHV0WzE2
XTsNCj4gPiArCXVpbnQ4X3QgdFsxNl07DQo+ID4gKwl1aW50OF90ICpzdGFnZTsNCj4gPiArCWJv
b2wgc3VjY2VzcyA9IGZhbHNlOw0KPiA+ICsNCj4gPiArCXByaW50X3BhY2tldCgiSzItTiIsIG4s
IDE2KTsNCj4gPiArCXN0YWdlID0gbF9tYWxsb2Moc2l6ZW9mKG91dHB1dCkgKyBwX2xlbiArIDEp
Ow0KPiA+ICsJaWYgKHN0YWdlID09IE5VTEwpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiANCj4g
SSBwcmVmZXIgaWYgKCFzdGFnZSkgY29uc3RydWN0cy4NCj4gDQo+ID4gKw0KPiA+ICsJaWYgKCFt
ZXNoX2NyeXB0b19zMSgic21rMiIsIDQsIHN0YWdlKSkNCj4gPiArCQlnb3RvIGZhaWw7DQo+ID4g
KwlwcmludF9wYWNrZXQoIksyLVMxKHNtazIpIiwgc3RhZ2UsIDE2KTsNCj4gPiArCXByaW50X3Bh
Y2tldCgiSzItUCIsIHAsIHBfbGVuKTsNCj4gDQo+IFRoaXMgcHJpbnRfcGFja2V0IGlzIHJlYWxs
eSBub3QgYWNjZXB0YWJsZS4NCj4gDQo+ID4gKw0KPiA+ICsJaWYgKCFhZXNfY21hY19vbmUoc3Rh
Z2UsIG4sIDE2LCB0KSkNCj4gPiArCQlnb3RvIGZhaWw7DQo+ID4gKw0KPiA+ICsJcHJpbnRfcGFj
a2V0KCJLMi1UIiwgdCwgMTYpOw0KPiA+ICsNCj4gPiArCWZkID0gYWVzX2NtYWNfTl9zdGFydCh0
KTsNCj4gPiArCWlmIChmZCA8IDApDQo+ID4gKwkJZ290byBmYWlsOw0KPiA+ICsNCj4gPiArCW1l
bWNweShzdGFnZSwgcCwgcF9sZW4pOw0KPiA+ICsJc3RhZ2VbcF9sZW5dID0gMTsNCj4gPiArDQo+
ID4gKwlpZiAoIWFlc19jbWFjKGZkLCBzdGFnZSwgcF9sZW4gKyAxLCBvdXRwdXQpKQ0KPiA+ICsJ
CWdvdG8gZG9uZTsNCj4gPiArDQo+ID4gKwlwcmludF9wYWNrZXQoIksyLVQxIiwgb3V0cHV0LCAx
Nik7DQo+ID4gKw0KPiA+ICsJbmV0X2lkWzBdID0gb3V0cHV0WzE1XSAmIDB4N2Y7DQo+ID4gKw0K
PiA+ICsJbWVtY3B5KHN0YWdlLCBvdXRwdXQsIDE2KTsNCj4gPiArCW1lbWNweShzdGFnZSArIDE2
LCBwLCBwX2xlbik7DQo+ID4gKwlzdGFnZVtwX2xlbiArIDE2XSA9IDI7DQo+ID4gKw0KPiA+ICsJ
aWYgKCFhZXNfY21hYyhmZCwgc3RhZ2UsIHBfbGVuICsgMTYgKyAxLCBvdXRwdXQpKQ0KPiA+ICsJ
CWdvdG8gZG9uZTsNCj4gPiArCXByaW50X3BhY2tldCgiSzItVDIiLCBvdXRwdXQsIDE2KTsNCj4g
PiArDQo+ID4gKwltZW1jcHkoZW5jX2tleSwgb3V0cHV0LCAxNik7DQo+ID4gKw0KPiA+ICsJbWVt
Y3B5KHN0YWdlLCBvdXRwdXQsIDE2KTsNCj4gPiArCW1lbWNweShzdGFnZSArIDE2LCBwLCBwX2xl
bik7DQo+ID4gKwlzdGFnZVtwX2xlbiArIDE2XSA9IDM7DQo+ID4gKw0KPiA+ICsJaWYgKCFhZXNf
Y21hYyhmZCwgc3RhZ2UsIHBfbGVuICsgMTYgKyAxLCBvdXRwdXQpKQ0KPiA+ICsJCWdvdG8gZG9u
ZTsNCj4gPiArCXByaW50X3BhY2tldCgiSzItVDMiLCBvdXRwdXQsIDE2KTsNCj4gPiArDQo+ID4g
KwltZW1jcHkocHJpdl9rZXksIG91dHB1dCwgMTYpOw0KPiA+ICsJc3VjY2VzcyA9IHRydWU7DQo+
ID4gKw0KPiA+ICtkb25lOg0KPiA+ICsJYWVzX2NtYWNfZGVzdHJveShmZCk7DQo+ID4gK2ZhaWw6
DQo+ID4gKwlsX2ZyZWUoc3RhZ2UpOw0KPiA+ICsNCj4gPiArCXJldHVybiBzdWNjZXNzOw0KPiA+
ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBjcnlwdG9fMTI4KGNvbnN0IHVpbnQ4X3Qgblsx
Nl0sIGNvbnN0IGNoYXIgKnMsIHVpbnQ4X3Qgb3V0MTI4WzE2XSkNCj4gPiArew0KPiA+ICsJdWlu
dDhfdCBpZDEyOFtdID0geyAnaScsICdkJywgJzEnLCAnMicsICc4JywgMHgwMSB9Ow0KPiA+ICsJ
dWludDhfdCBzYWx0WzE2XTsNCj4gPiArDQo+ID4gKwlpZiAoIW1lc2hfY3J5cHRvX3MxKHMsIDQs
IHNhbHQpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gbWVzaF9j
cnlwdG9fazEobiwgc2FsdCwgaWQxMjgsIHNpemVvZihpZDEyOCksIG91dDEyOCk7DQo+ID4gK30N
Cj4gPiArDQo+ID4gK2Jvb2wgbWVzaF9jcnlwdG9fbmtpayhjb25zdCB1aW50OF90IG5bMTZdLCB1
aW50OF90IGlkZW50aXR5X2tleVsxNl0pDQo+ID4gK3sNCj4gPiArCXJldHVybiBjcnlwdG9fMTI4
KG4sICJua2lrIiwgaWRlbnRpdHlfa2V5KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNo
X2NyeXB0b19pZGVudGl0eShjb25zdCB1aW50OF90IG5ldF9rZXlbMTZdLCB1aW50MTZfdCBhZGRy
LA0KPiA+ICsJCQkJCQkJdWludDhfdCBpZFsxNl0pDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3QgaWRf
a2V5WzE2XTsNCj4gPiArCXVpbnQ4X3QgdG1wWzE2XTsNCj4gPiArDQo+ID4gKwlwcmludF9wYWNr
ZXQoIk5ldF9LZXkiLCBuZXRfa2V5LCAxNik7DQo+ID4gKw0KPiA+ICsJaWYgKCFtZXNoX2NyeXB0
b19ua2lrKG5ldF9rZXksIGlkX2tleSkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4g
PiArCXByaW50X3BhY2tldCgiSURfS2V5IiwgaWRfa2V5LCAxNik7DQo+ID4gKw0KPiA+ICsJaWYg
KCFsX2dldF9iZTY0KGlkICsgOCkpDQo+ID4gKwkJbF9nZXRyYW5kb20oaWQgKyA4LCA4KTsNCj4g
PiArDQo+ID4gKwltZW1zZXQodG1wLCAwLCBzaXplb2YodG1wKSk7DQo+ID4gKwltZW1jcHkodG1w
ICsgNiwgaWQgKyA4LCA4KTsNCj4gPiArCWxfcHV0X2JlMTYoYWRkciwgdG1wICsgMTQpOw0KPiA+
ICsNCj4gPiArCXByaW50X3BhY2tldCgiTm9uY2UiLCB0bXAsIDE2KTsNCj4gPiArCWlmICghYWVz
X2VjYl9vbmUoaWRfa2V5LCB0bXAsIHRtcCkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsN
Cj4gPiArCXByaW50X3BhY2tldCgicmVzdWx0IiwgdG1wLCAxNik7DQo+ID4gKw0KPiA+ICsJbWVt
Y3B5KGlkLCB0bXAgKyA4LCA4KTsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0K
PiA+ICtib29sIG1lc2hfY3J5cHRvX25rYmsoY29uc3QgdWludDhfdCBuWzE2XSwgdWludDhfdCBi
ZWFjb25fa2V5WzE2XSkNCj4gPiArew0KPiA+ICsJcmV0dXJuIGNyeXB0b18xMjgobiwgIm5rYmsi
LCBiZWFjb25fa2V5KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19ua3Br
KGNvbnN0IHVpbnQ4X3QgblsxNl0sIHVpbnQ4X3QgcHJveHlfa2V5WzE2XSkNCj4gPiArew0KPiA+
ICsJcmV0dXJuIGNyeXB0b18xMjgobiwgIm5rcGsiLCBwcm94eV9rZXkpOw0KPiA+ICt9DQo+ID4g
Kw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX2szKGNvbnN0IHVpbnQ4X3QgblsxNl0sIHVpbnQ4X3Qg
b3V0NjRbOF0pDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3QgdG1wWzE2XTsNCj4gPiArCXVpbnQ4X3Qg
dFsxNl07DQo+ID4gKwl1aW50OF90IGlkNjRbXSA9IHsgJ2knLCAnZCcsICc2JywgJzQnLCAweDAx
IH07DQo+ID4gKw0KPiA+ICsJaWYgKCFtZXNoX2NyeXB0b19zMSgic21rMyIsIDQsIHRtcCkpDQo+
ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCWlmICghYWVzX2NtYWNfb25lKHRtcCwg
biwgMTYsIHQpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlpZiAoIWFlc19j
bWFjX29uZSh0LCBpZDY0LCBzaXplb2YoaWQ2NCksIHRtcCkpDQo+ID4gKwkJcmV0dXJuIGZhbHNl
Ow0KPiA+ICsNCj4gPiArCW1lbWNweShvdXQ2NCwgdG1wICsgOCwgOCk7DQo+ID4gKw0KPiA+ICsJ
cmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wgbWVzaF9jcnlwdG9fazQoY29u
c3QgdWludDhfdCBhWzE2XSwgdWludDhfdCBvdXQ2WzFdKQ0KPiA+ICt7DQo+ID4gKwl1aW50OF90
IHRtcFsxNl07DQo+ID4gKwl1aW50OF90IHRbMTZdOw0KPiA+ICsJdWludDhfdCBpZDZbXSA9IHsg
J2knLCAnZCcsICc2JywgMHgwMSB9Ow0KPiANCj4gVGhlc2Ugc2hvdWxkIGNvbWUgZmlyc3QgYW5k
IG1vc3QgbGlrZWx5IGJlIGRlY2xhcmVkIGNvbnN0Lg0KPiANCj4gPiArDQo+ID4gKwlpZiAoIW1l
c2hfY3J5cHRvX3MxKCJzbWs0IiwgNCwgdG1wKSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4g
Kw0KPiA+ICsJaWYgKCFhZXNfY21hY19vbmUodG1wLCBhLCAxNiwgdCkpDQo+ID4gKwkJcmV0dXJu
IGZhbHNlOw0KPiA+ICsNCj4gPiArCWlmICghYWVzX2NtYWNfb25lKHQsIGlkNiwgc2l6ZW9mKGlk
NiksIHRtcCkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCW91dDZbMF0gPSB0
bXBbMTVdICYgMHgzZjsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICti
b29sIG1lc2hfY3J5cHRvX2JlYWNvbl9jbWFjKGNvbnN0IHVpbnQ4X3QgZW5jcnlwdGlvbl9rZXlb
MTZdLA0KPiA+ICsJCQkJY29uc3QgdWludDhfdCBuZXR3b3JrX2lkWzhdLA0KPiA+ICsJCQkJdWlu
dDMyX3QgaXZfaW5kZXgsIGJvb2wga3IsIGJvb2wgaXUsDQo+ID4gKwkJCQl1aW50NjRfdCAqY21h
YykNCj4gPiArew0KPiA+ICsJdWludDhfdCBtc2dbMTNdLCB0bXBbMTZdOw0KPiA+ICsNCj4gPiAr
CWlmICghY21hYykNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJbXNnWzBdID0g
a3IgPyAweDAxIDogMHgwMDsNCj4gPiArCW1zZ1swXSB8PSBpdSA/IDB4MDIgOiAweDAwOw0KPiA+
ICsJbWVtY3B5KG1zZyArIDEsIG5ldHdvcmtfaWQsIDgpOw0KPiA+ICsJbF9wdXRfYmUzMihpdl9p
bmRleCwgbXNnICsgOSk7DQo+ID4gKw0KPiA+ICsJaWYgKCFhZXNfY21hY19vbmUoZW5jcnlwdGlv
bl9rZXksIG1zZywgMTMsIHRtcCkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiAr
CSpjbWFjID0gbF9nZXRfYmU2NCh0bXApOw0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+
ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX25ldHdvcmtfbm9uY2UoYm9vbCBjdGws
IHVpbnQ4X3QgdHRsLCB1aW50MzJfdCBzZXEsDQo+ID4gKwkJCQl1aW50MTZfdCBzcmMsIHVpbnQz
Ml90IGl2X2luZGV4LA0KPiA+ICsJCQkJdWludDhfdCBub25jZVsxM10pDQo+ID4gK3sNCj4gPiAr
CW5vbmNlWzBdID0gMDsNCj4gPiArCW5vbmNlWzFdID0gKHR0bCAmIFRUTF9NQVNLKSB8IChjdGwg
PyBDVEwgOiAweDAwKTsNCj4gPiArCW5vbmNlWzJdID0gKHNlcSA+PiAxNikgJiAweGZmOw0KPiA+
ICsJbm9uY2VbM10gPSAoc2VxID4+IDgpICYgMHhmZjsNCj4gPiArCW5vbmNlWzRdID0gc2VxICYg
MHhmZjsNCj4gPiArDQo+ID4gKwkvKiBTUkMgKi8NCj4gPiArCWxfcHV0X2JlMTYoc3JjLCBub25j
ZSArIDUpOw0KPiA+ICsNCj4gPiArCWxfcHV0X2JlMTYoMCwgbm9uY2UgKyA3KTsNCj4gPiArDQo+
ID4gKwkvKiBJViBJbmRleCAqLw0KPiA+ICsJbF9wdXRfYmUzMihpdl9pbmRleCwgbm9uY2UgKyA5
KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBt
ZXNoX2NyeXB0b19uZXR3b3JrX2VuY3J5cHQoYm9vbCBjdGwsIHVpbnQ4X3QgdHRsLA0KPiA+ICsJ
CQkJdWludDMyX3Qgc2VxLCB1aW50MTZfdCBzcmMsDQo+ID4gKwkJCQl1aW50MzJfdCBpdl9pbmRl
eCwNCj4gPiArCQkJCWNvbnN0IHVpbnQ4X3QgbmV0X2tleVsxNl0sDQo+ID4gKwkJCQljb25zdCB1
aW50OF90ICplbmNfbXNnLCB1aW50OF90IGVuY19tc2dfbGVuLA0KPiA+ICsJCQkJdWludDhfdCAq
b3V0LCB2b2lkICpuZXRfbWljKQ0KPiA+ICt7DQo+ID4gKwl1aW50OF90IG5vbmNlWzEzXTsNCj4g
PiArDQo+ID4gKwlpZiAoIW1lc2hfY3J5cHRvX25ldHdvcmtfbm9uY2UoY3RsLCB0dGwsIHNlcSwg
c3JjLCBpdl9pbmRleCwgbm9uY2UpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4g
KwlyZXR1cm4gbWVzaF9jcnlwdG9fYWVzX2NjbV9lbmNyeXB0KG5vbmNlLCBuZXRfa2V5LCBOVUxM
LCAwLCBlbmNfbXNnLA0KPiA+ICsJCQkJZW5jX21zZ19sZW4sIG91dCwgbmV0X21pYywNCj4gPiAr
CQkJCWN0bCA/IHNpemVvZih1aW50NjRfdCkgOiBzaXplb2YodWludDMyX3QpKTsNCj4gPiArfQ0K
PiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19uZXR3b3JrX2RlY3J5cHQoYm9vbCBjdGwsIHVp
bnQ4X3QgdHRsLA0KPiA+ICsJCQkJdWludDMyX3Qgc2VxLCB1aW50MTZfdCBzcmMsDQo+ID4gKwkJ
CQl1aW50MzJfdCBpdl9pbmRleCwNCj4gPiArCQkJCWNvbnN0IHVpbnQ4X3QgbmV0X2tleVsxNl0s
DQo+ID4gKwkJCQljb25zdCB1aW50OF90ICplbmNfbXNnLCB1aW50OF90IGVuY19tc2dfbGVuLA0K
PiA+ICsJCQkJdWludDhfdCAqb3V0LCB2b2lkICpuZXRfbWljLCBzaXplX3QgbWljX3NpemUpDQo+
ID4gK3sNCj4gPiArCXVpbnQ4X3Qgbm9uY2VbMTNdOw0KPiA+ICsNCj4gPiArCWlmICghbWVzaF9j
cnlwdG9fbmV0d29ya19ub25jZShjdGwsIHR0bCwgc2VxLCBzcmMsIGl2X2luZGV4LCBub25jZSkp
DQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCXJldHVybiBtZXNoX2NyeXB0b19h
ZXNfY2NtX2RlY3J5cHQobm9uY2UsIG5ldF9rZXksIE5VTEwsIDAsDQo+ID4gKwkJCQkJCWVuY19t
c2csIGVuY19tc2dfbGVuLCBvdXQsDQo+ID4gKwkJCQkJCW5ldF9taWMsIG1pY19zaXplKTsNCj4g
PiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19hcHBsaWNhdGlvbl9ub25jZSh1aW50
MzJfdCBzZXEsIHVpbnQxNl90IHNyYywNCj4gPiArCQkJCQl1aW50MTZfdCBkc3QsIHVpbnQzMl90
IGl2X2luZGV4LA0KPiA+ICsJCQkJCWJvb2wgYXN6bWljLCB1aW50OF90IG5vbmNlWzEzXSkNCj4g
PiArew0KPiA+ICsJbm9uY2VbMF0gPSAweDAxOw0KPiA+ICsJbm9uY2VbMV0gPSBhc3ptaWMgPyAw
eDgwIDogMHgwMDsNCj4gPiArCW5vbmNlWzJdID0gKHNlcSAmIDB4MDBmZjAwMDApID4+IDE2Ow0K
PiA+ICsJbm9uY2VbM10gPSAoc2VxICYgMHgwMDAwZmYwMCkgPj4gODsNCj4gPiArCW5vbmNlWzRd
ID0gKHNlcSAmIDB4MDAwMDAwZmYpOw0KPiA+ICsJbm9uY2VbNV0gPSAoc3JjICYgMHhmZjAwKSA+
PiA4Ow0KPiA+ICsJbm9uY2VbNl0gPSAoc3JjICYgMHgwMGZmKTsNCj4gPiArCW5vbmNlWzddID0g
KGRzdCAmIDB4ZmYwMCkgPj4gODsNCj4gPiArCW5vbmNlWzhdID0gKGRzdCAmIDB4MDBmZik7DQo+
ID4gKwlsX3B1dF9iZTMyKGl2X2luZGV4LCBub25jZSArIDkpOw0KPiA+ICsNCj4gPiArCXJldHVy
biB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX2RldmljZV9ub25j
ZSh1aW50MzJfdCBzZXEsIHVpbnQxNl90IHNyYywNCj4gPiArCQkJCQl1aW50MTZfdCBkc3QsIHVp
bnQzMl90IGl2X2luZGV4LA0KPiA+ICsJCQkJCWJvb2wgYXN6bWljLCB1aW50OF90IG5vbmNlWzEz
XSkNCj4gPiArew0KPiA+ICsJbm9uY2VbMF0gPSAweDAyOw0KPiA+ICsJbm9uY2VbMV0gPSBhc3pt
aWMgPyAweDgwIDogMHgwMDsNCj4gPiArCW5vbmNlWzJdID0gKHNlcSAmIDB4MDBmZjAwMDApID4+
IDE2Ow0KPiA+ICsJbm9uY2VbM10gPSAoc2VxICYgMHgwMDAwZmYwMCkgPj4gODsNCj4gPiArCW5v
bmNlWzRdID0gKHNlcSAmIDB4MDAwMDAwZmYpOw0KPiA+ICsJbm9uY2VbNV0gPSAoc3JjICYgMHhm
ZjAwKSA+PiA4Ow0KPiA+ICsJbm9uY2VbNl0gPSAoc3JjICYgMHgwMGZmKTsNCj4gPiArCW5vbmNl
WzddID0gKGRzdCAmIDB4ZmYwMCkgPj4gODsNCj4gPiArCW5vbmNlWzhdID0gKGRzdCAmIDB4MDBm
Zik7DQo+ID4gKwlsX3B1dF9iZTMyKGl2X2luZGV4LCBub25jZSArIDkpOw0KPiA+ICsNCj4gPiAr
CXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX2FwcGxp
Y2F0aW9uX2VuY3J5cHQodWludDhfdCBrZXlfaWQsIHVpbnQzMl90IHNlcSwgdWludDE2X3Qgc3Jj
LA0KPiA+ICsJCQkJCXVpbnQxNl90IGRzdCwgdWludDMyX3QgaXZfaW5kZXgsDQo+ID4gKwkJCQkJ
Y29uc3QgdWludDhfdCBhcHBfa2V5WzE2XSwNCj4gPiArCQkJCQljb25zdCB1aW50OF90ICphYWQs
IHVpbnQ4X3QgYWFkX2xlbiwNCj4gPiArCQkJCQljb25zdCB1aW50OF90ICptc2csIHVpbnQ4X3Qg
bXNnX2xlbiwNCj4gPiArCQkJCQl1aW50OF90ICpvdXQsDQo+ID4gKwkJCQkJdm9pZCAqYXBwX21p
Yywgc2l6ZV90IG1pY19zaXplKQ0KPiA+ICt7DQo+ID4gKwl1aW50OF90IG5vbmNlWzEzXTsNCj4g
PiArCWJvb2wgYXN6bWljID0gKG1pY19zaXplID09IHNpemVvZih1aW50NjRfdCkpID8gdHJ1ZSA6
IGZhbHNlOw0KPiANCj4gSXMgdGhpcyBzaXplb2YodWludDY0X3QpIGNvbnN0cnVjdCByZWFsbHkg
YSBnb29kIGlkZWE/DQo+IA0KPiA+ICsNCj4gPiArCWlmICgha2V5X2lkICYmICFtZXNoX2NyeXB0
b19kZXZpY2Vfbm9uY2Uoc2VxLCBzcmMsIGRzdCwNCj4gPiArCQkJCQkJaXZfaW5kZXgsIGFzem1p
Yywgbm9uY2UpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlpZiAoa2V5X2lk
ICYmICFtZXNoX2NyeXB0b19hcHBsaWNhdGlvbl9ub25jZShzZXEsIHNyYywgZHN0LA0KPiA+ICsJ
CQkJCQlpdl9pbmRleCwgYXN6bWljLCBub25jZSkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+
ICsNCj4gPiArCXJldHVybiBtZXNoX2NyeXB0b19hZXNfY2NtX2VuY3J5cHQobm9uY2UsIGFwcF9r
ZXksIGFhZCwgYWFkX2xlbiwNCj4gPiArCQkJCQkJbXNnLCBtc2dfbGVuLA0KPiA+ICsJCQkJCQlv
dXQsIGFwcF9taWMsIG1pY19zaXplKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2Ny
eXB0b19hcHBsaWNhdGlvbl9kZWNyeXB0KHVpbnQ4X3Qga2V5X2lkLCB1aW50MzJfdCBzZXEsIHVp
bnQxNl90IHNyYywNCj4gPiArCQkJCXVpbnQxNl90IGRzdCwgdWludDMyX3QgaXZfaW5kZXgsDQo+
ID4gKwkJCQljb25zdCB1aW50OF90IGFwcF9rZXlbMTZdLA0KPiA+ICsJCQkJY29uc3QgdWludDhf
dCAqYWFkLCB1aW50OF90IGFhZF9sZW4sDQo+ID4gKwkJCQljb25zdCB1aW50OF90ICplbmNfbXNn
LCB1aW50OF90IGVuY19tc2dfbGVuLA0KPiA+ICsJCQkJdWludDhfdCAqb3V0LCB2b2lkICphcHBf
bWljLCBzaXplX3QgbWljX3NpemUpDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3Qgbm9uY2VbMTNdOw0K
PiA+ICsJYm9vbCBhc3ptaWMgPSAobWljX3NpemUgPT0gc2l6ZW9mKHVpbnQ2NF90KSkgPyB0cnVl
IDogZmFsc2U7DQo+ID4gKw0KPiA+ICsJaWYgKCFrZXlfaWQgJiYgIW1lc2hfY3J5cHRvX2Rldmlj
ZV9ub25jZShzZXEsIHNyYywgZHN0LA0KPiA+ICsJCQkJCQlpdl9pbmRleCwgYXN6bWljLCBub25j
ZSkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCWlmIChrZXlfaWQgJiYgIW1l
c2hfY3J5cHRvX2FwcGxpY2F0aW9uX25vbmNlKHNlcSwgc3JjLCBkc3QsDQo+ID4gKwkJCQkJCWl2
X2luZGV4LCBhc3ptaWMsIG5vbmNlKSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+
ICsJcmV0dXJuIG1lc2hfY3J5cHRvX2Flc19jY21fZGVjcnlwdChub25jZSwgYXBwX2tleSwNCj4g
PiArCQkJCQkJYWFkLCBhYWRfbGVuLCBlbmNfbXNnLA0KPiA+ICsJCQkJCQllbmNfbXNnX2xlbiwg
b3V0LA0KPiA+ICsJCQkJCQlhcHBfbWljLCBtaWNfc2l6ZSk7DQo+ID4gK30NCj4gPiArDQo+ID4g
K2Jvb2wgbWVzaF9jcnlwdG9fc2Vzc2lvbl9rZXkoY29uc3QgdWludDhfdCBzZWNyZXRbMzJdLA0K
PiA+ICsJCQkJCWNvbnN0IHVpbnQ4X3Qgc2FsdFsxNl0sDQo+ID4gKwkJCQkJdWludDhfdCBzZXNz
aW9uX2tleVsxNl0pDQo+ID4gK3sNCj4gPiArCWNvbnN0IHVpbnQ4X3QgcHJza1s0XSA9ICJwcnNr
IjsNCj4gPiArDQo+ID4gKwlpZiAoIWFlc19jbWFjX29uZShzYWx0LCBzZWNyZXQsIDMyLCBzZXNz
aW9uX2tleSkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCXJldHVybiBhZXNf
Y21hY19vbmUoc2Vzc2lvbl9rZXksIHByc2ssIDQsIHNlc3Npb25fa2V5KTsNCj4gPiArfQ0KPiA+
ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19ub25jZShjb25zdCB1aW50OF90IHNlY3JldFszMl0s
DQo+ID4gKwkJCQkJY29uc3QgdWludDhfdCBzYWx0WzE2XSwNCj4gPiArCQkJCQl1aW50OF90IG5v
bmNlWzEzXSkNCj4gPiArew0KPiA+ICsJY29uc3QgdWludDhfdCBwcnNuWzRdID0gInByc24iOw0K
PiA+ICsJdWludDhfdCB0bXBbMTZdOw0KPiA+ICsJYm9vbCByZXN1bHQ7DQo+ID4gKw0KPiA+ICsJ
aWYgKCFhZXNfY21hY19vbmUoc2FsdCwgc2VjcmV0LCAzMiwgdG1wKSkNCj4gPiArCQlyZXR1cm4g
ZmFsc2U7DQo+ID4gKw0KPiA+ICsJcmVzdWx0ID0gIGFlc19jbWFjX29uZSh0bXAsIHByc24sIDQs
IHRtcCk7DQo+IA0KPiBEb3VibGUgc3BhY2VzLg0KPiANCj4gPiArDQo+ID4gKwlpZiAocmVzdWx0
KQ0KPiA+ICsJCW1lbWNweShub25jZSwgdG1wICsgMywgMTMpOw0KPiA+ICsNCj4gPiArCXJldHVy
biByZXN1bHQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wgbWVzaF9jcnlwdG9fczEoY29uc3Qg
dm9pZCAqaW5mbywgc2l6ZV90IGxlbiwgdWludDhfdCBzYWx0WzE2XSkNCj4gPiArew0KPiA+ICsJ
Y29uc3QgdWludDhfdCB6ZXJvWzE2XSA9IHswfTsNCj4gDQo+ICA9IHsgMCwgfTsNCj4gDQo+ID4g
Kw0KPiA+ICsJcmV0dXJuIGFlc19jbWFjX29uZSh6ZXJvLCBpbmZvLCBsZW4sIHNhbHQpOw0KPiA+
ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX3Byb3ZfcHJvdl9zYWx0KGNvbnN0IHVp
bnQ4X3QgY29uZl9zYWx0WzE2XSwNCj4gPiArCQkJCQljb25zdCB1aW50OF90IHByb3ZfcmFuZFsx
Nl0sDQo+ID4gKwkJCQkJY29uc3QgdWludDhfdCBkZXZfcmFuZFsxNl0sDQo+ID4gKwkJCQkJdWlu
dDhfdCBwcm92X3NhbHRbMTZdKQ0KPiA+ICt7DQo+ID4gKwljb25zdCB1aW50OF90IHplcm9bMTZd
ID0gezB9Ow0KPiA+ICsJdWludDhfdCB0bXBbMTYgKiAzXTsNCj4gPiArDQo+ID4gKwltZW1jcHko
dG1wLCBjb25mX3NhbHQsIDE2KTsNCj4gPiArCW1lbWNweSh0bXAgKyAxNiwgcHJvdl9yYW5kLCAx
Nik7DQo+ID4gKwltZW1jcHkodG1wICsgMzIsIGRldl9yYW5kLCAxNik7DQo+ID4gKw0KPiA+ICsJ
cmV0dXJuIGFlc19jbWFjX29uZSh6ZXJvLCB0bXAsIHNpemVvZih0bXApLCBwcm92X3NhbHQpOw0K
PiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX3Byb3ZfY29uZl9rZXkoY29uc3Qg
dWludDhfdCBzZWNyZXRbMzJdLA0KPiA+ICsJCQkJCWNvbnN0IHVpbnQ4X3Qgc2FsdFsxNl0sDQo+
ID4gKwkJCQkJdWludDhfdCBjb25mX2tleVsxNl0pDQo+ID4gK3sNCj4gPiArCWNvbnN0IHVpbnQ4
X3QgcHJja1s0XSA9ICJwcmNrIjsNCj4gPiArDQo+ID4gKwlpZiAoIWFlc19jbWFjX29uZShzYWx0
LCBzZWNyZXQsIDMyLCBjb25mX2tleSkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4g
PiArCXJldHVybiBhZXNfY21hY19vbmUoY29uZl9rZXksIHByY2ssIDQsIGNvbmZfa2V5KTsNCj4g
PiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19kZXZpY2Vfa2V5KGNvbnN0IHVpbnQ4
X3Qgc2VjcmV0WzMyXSwNCj4gPiArCQkJCQkJY29uc3QgdWludDhfdCBzYWx0WzE2XSwNCj4gPiAr
CQkJCQkJdWludDhfdCBkZXZpY2Vfa2V5WzE2XSkNCj4gPiArew0KPiA+ICsJY29uc3QgdWludDhf
dCBwcmRrWzRdID0gInByZGsiOw0KPiA+ICsNCj4gPiArCWlmICghYWVzX2NtYWNfb25lKHNhbHQs
IHNlY3JldCwgMzIsIGRldmljZV9rZXkpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+
ID4gKwlyZXR1cm4gYWVzX2NtYWNfb25lKGRldmljZV9rZXksIHByZGssIDQsIGRldmljZV9rZXkp
Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX3ZpcnR1YWxfYWRkcihjb25z
dCB1aW50OF90IHZpcnR1YWxfbGFiZWxbMTZdLA0KPiA+ICsJCQkJCQl1aW50MTZfdCAqYWRkcikN
Cj4gPiArew0KPiA+ICsJdWludDhfdCB0bXBbMTZdOw0KPiA+ICsNCj4gPiArCWlmICghbWVzaF9j
cnlwdG9fczEoInZ0YWQiLCA0LCB0bXApKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+
ID4gKwlpZiAoIWFkZHIgfHwgIWFlc19jbWFjX29uZSh0bXAsIHZpcnR1YWxfbGFiZWwsIDE2LCB0
bXApKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwkqYWRkciA9IChsX2dldF9i
ZTE2KHRtcCArIDE0KSAmIDB4M2ZmZikgfCAweDgwMDA7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRy
dWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wgbWVzaF9jcnlwdG9fcHJpdmFjeV9jb3VudGVy
KHVpbnQzMl90IGl2X2luZGV4LA0KPiA+ICsJCQkJCQljb25zdCB1aW50OF90ICpwYXlsb2FkLA0K
PiA+ICsJCQkJCQl1aW50OF90IHByaXZhY3lfY291bnRlclsxNl0pDQo+ID4gK3sNCj4gPiArCW1l
bXNldChwcml2YWN5X2NvdW50ZXIsIDAsIDUpOw0KPiA+ICsJbF9wdXRfYmUzMihpdl9pbmRleCwg
cHJpdmFjeV9jb3VudGVyICsgNSk7DQo+ID4gKwltZW1jcHkocHJpdmFjeV9jb3VudGVyICsgOSwg
cGF5bG9hZCwgNyk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+
ID4gK2Jvb2wgbWVzaF9jcnlwdG9fbmV0d29ya19vYmZ1c2NhdGUoY29uc3QgdWludDhfdCBwcml2
YWN5X2tleVsxNl0sDQo+ID4gKwkJCQkJY29uc3QgdWludDhfdCBwcml2YWN5X2NvdW50ZXJbMTZd
LA0KPiA+ICsJCQkJCWJvb2wgY3RsLCB1aW50OF90IHR0bCwgdWludDMyX3Qgc2VxLA0KPiA+ICsJ
CQkJCXVpbnQxNl90IHNyYywgdWludDhfdCAqb3V0KQ0KPiA+ICt7DQo+ID4gKwl1aW50OF90IGVj
YlsxNl0sIHRtcFsxNl07DQo+ID4gKwlpbnQgaTsNCj4gPiArDQo+ID4gKwlpZiAoIWFlc19lY2Jf
b25lKHByaXZhY3lfa2V5LCBwcml2YWN5X2NvdW50ZXIsIGVjYikpDQo+ID4gKwkJcmV0dXJuIGZh
bHNlOw0KPiA+ICsNCj4gPiArCXRtcFswXSA9ICgoISFjdGwpIDw8IDcpIHwgKHR0bCAmIFRUTF9N
QVNLKTsNCj4gPiArCXRtcFsxXSA9IChzZXEgJiAweGZmMDAwMCkgPj4gMTY7DQo+ID4gKwl0bXBb
Ml0gPSAoc2VxICYgMHgwMGZmMDApID4+IDg7DQo+ID4gKwl0bXBbM10gPSAoc2VxICYgMHgwMDAw
ZmYpOw0KPiA+ICsJdG1wWzRdID0gKHNyYyAmIDB4ZmYwMCkgPj4gODsNCj4gPiArCXRtcFs1XSA9
IChzcmMgJiAweDAwZmYpOw0KPiA+ICsNCj4gPiArCWlmIChvdXQpIHsNCj4gPiArCQlmb3IgKGkg
PSAwOyBpIDwgNjsgaSsrKQ0KPiA+ICsJCQlvdXRbaV0gPSBlY2JbaV0gXiB0bXBbaV07DQo+ID4g
Kwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wg
bWVzaF9jcnlwdG9fbmV0d29ya19jbGFyaWZ5KGNvbnN0IHVpbnQ4X3QgcHJpdmFjeV9rZXlbMTZd
LA0KPiA+ICsJCQkJY29uc3QgdWludDhfdCBwcml2YWN5X2NvdW50ZXJbMTZdLA0KPiA+ICsJCQkJ
Y29uc3QgdWludDhfdCBuZXRfaGRyWzZdLA0KPiA+ICsJCQkJYm9vbCAqY3RsLCB1aW50OF90ICp0
dGwsDQo+ID4gKwkJCQl1aW50MzJfdCAqc2VxLCB1aW50MTZfdCAqc3JjKQ0KPiA+ICt7DQo+ID4g
Kwl1aW50OF90IGVjYlsxNl0sIHRtcFs2XTsNCj4gPiArCWludCBpOw0KPiA+ICsNCj4gPiArCWlm
ICghYWVzX2VjYl9vbmUocHJpdmFjeV9rZXksIHByaXZhY3lfY291bnRlciwgZWNiKSkNCj4gPiAr
CQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IDY7IGkrKykNCj4g
PiArCQl0bXBbaV0gPSBlY2JbaV0gXiBuZXRfaGRyW2ldOw0KPiA+ICsNCj4gPiArCWlmIChjdGwp
DQo+ID4gKwkJKmN0bCA9ICEhKHRtcFswXSAmIENUTCk7DQo+ID4gKw0KPiA+ICsJaWYgKHR0bCkN
Cj4gPiArCQkqdHRsID0gdG1wWzBdICYgVFRMX01BU0s7DQo+ID4gKw0KPiA+ICsJaWYgKHNlcSkN
Cj4gPiArCQkqc2VxID0gbF9nZXRfYmUzMih0bXApICYgU0VRX01BU0s7DQo+ID4gKw0KPiA+ICsJ
aWYgKHNyYykNCj4gPiArCQkqc3JjID0gbF9nZXRfYmUxNih0bXAgKyA0KTsNCj4gPiArDQo+ID4g
KwlyZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19wYWNr
ZXRfYnVpbGQoYm9vbCBjdGwsIHVpbnQ4X3QgdHRsLA0KPiA+ICsJCQkJdWludDMyX3Qgc2VxLA0K
PiA+ICsJCQkJdWludDE2X3Qgc3JjLCB1aW50MTZfdCBkc3QsDQo+ID4gKwkJCQl1aW50OF90IG9w
Y29kZSwNCj4gPiArCQkJCWJvb2wgc2VnbWVudGVkLCB1aW50OF90IGtleV9pZCwNCj4gPiArCQkJ
CWJvb2wgc3ptaWMsIGJvb2wgcmVsYXksIHVpbnQxNl90IHNlcVplcm8sDQo+ID4gKwkJCQl1aW50
OF90IHNlZ08sIHVpbnQ4X3Qgc2VnTiwNCj4gPiArCQkJCWNvbnN0IHVpbnQ4X3QgKnBheWxvYWQs
IHVpbnQ4X3QgcGF5bG9hZF9sZW4sDQo+ID4gKwkJCQl1aW50OF90ICpwYWNrZXQsIHVpbnQ4X3Qg
KnBhY2tldF9sZW4pDQo+ID4gK3sNCj4gPiArCXVpbnQzMl90IGhkcjsNCj4gPiArCXNpemVfdCBu
Ow0KPiA+ICsNCj4gPiArCWxfcHV0X2JlMzIoc2VxLCBwYWNrZXQgKyAxKTsNCj4gPiArCXBhY2tl
dFsxXSA9IChjdGwgPyBDVEwgOiAwKSB8ICh0dGwgJiBUVExfTUFTSyk7DQo+ID4gKw0KPiA+ICsJ
bF9wdXRfYmUxNihzcmMsIHBhY2tldCArIDUpOw0KPiA+ICsJbF9wdXRfYmUxNihkc3QsIHBhY2tl
dCArIDcpOw0KPiA+ICsJbiA9IDk7DQo+ID4gKw0KPiA+ICsJaWYgKCFjdGwpIHsNCj4gPiArCQlo
ZHIgPSBzZWdtZW50ZWQgPDwgU0VHX0hEUl9TSElGVDsNCj4gPiArCQloZHIgfD0gKGtleV9pZCAm
IEtFWV9JRF9NQVNLKSA8PCBLRVlfSERSX1NISUZUOw0KPiA+ICsJCWlmIChzZWdtZW50ZWQpIHsN
Cj4gPiArCQkJaGRyIHw9IHN6bWljIDw8IFNaTUlDX0hEUl9TSElGVDsNCj4gPiArCQkJaGRyIHw9
IChzZXFaZXJvICYgU0VRX1pFUk9fTUFTSykgPDwgU0VRX1pFUk9fSERSX1NISUZUOw0KPiA+ICsJ
CQloZHIgfD0gKHNlZ08gJiBTRUdfTUFTSykgPDwgU0VHT19IRFJfU0hJRlQ7DQo+ID4gKwkJCWhk
ciB8PSAoc2VnTiAmIFNFR19NQVNLKSA8PCBTRUdOX0hEUl9TSElGVDsNCj4gPiArCQl9DQo+ID4g
KwkJbF9wdXRfYmUzMihoZHIsIHBhY2tldCArIG4pOw0KPiA+ICsNCj4gPiArCQkvKiBPbmx5IGZp
cnN0IG9jdGV0IGlzIHZhbGlkIGZvciB1bnNlZ21lbnRlZCBtZXNzYWdlcyAqLw0KPiA+ICsJCWlm
IChzZWdtZW50ZWQpDQo+ID4gKwkJCW4gKz0gNDsNCj4gPiArCQllbHNlDQo+ID4gKwkJCW4gKz0g
MTsNCj4gPiArDQo+ID4gKwkJbWVtY3B5KHBhY2tldCArIG4sIHBheWxvYWQsIHBheWxvYWRfbGVu
KTsNCj4gPiArDQo+ID4gKwkJbF9wdXRfYmUzMigweDAwMDAwMDAwLCBwYWNrZXQgKyBwYXlsb2Fk
X2xlbiArIG4pOw0KPiA+ICsJCWlmIChwYWNrZXRfbGVuKQ0KPiA+ICsJCQkqcGFja2V0X2xlbiA9
IHBheWxvYWRfbGVuICsgbiArIDQ7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWlmICgob3Bjb2Rl
ICYgT1BDT0RFX01BU0spICE9IG9wY29kZSkNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsN
Cj4gPiArCQloZHIgPSBvcGNvZGUgPDwgS0VZX0hEUl9TSElGVDsNCj4gPiArCQlsX3B1dF9iZTMy
KGhkciwgcGFja2V0ICsgbik7DQo+ID4gKwkJbiArPSAxOw0KPiA+ICsNCj4gPiArCQltZW1jcHko
cGFja2V0ICsgbiwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOw0KPiA+ICsJCW4gKz0gcGF5bG9hZF9s
ZW47DQo+ID4gKw0KPiA+ICsJCWxfcHV0X2JlNjQoMHgwMDAwMDAwMDAwMDAwMDAwLCBwYWNrZXQg
KyBuKTsNCj4gPiArCQlpZiAocGFja2V0X2xlbikNCj4gPiArCQkJKnBhY2tldF9sZW4gPSBuICsg
ODsNCj4gPiArCX0NCj4gPiArDQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4g
PiArDQo+ID4gK2Jvb2wgbWVzaF9jcnlwdG9fcGFja2V0X3BhcnNlKGNvbnN0IHVpbnQ4X3QgKnBh
Y2tldCwgdWludDhfdCBwYWNrZXRfbGVuLA0KPiA+ICsJCQkJYm9vbCAqY3RsLCB1aW50OF90ICp0
dGwsIHVpbnQzMl90ICpzZXEsDQo+ID4gKwkJCQl1aW50MTZfdCAqc3JjLCB1aW50MTZfdCAqZHN0
LA0KPiA+ICsJCQkJdWludDMyX3QgKmNvb2tpZSwgdWludDhfdCAqb3Bjb2RlLA0KPiA+ICsJCQkJ
Ym9vbCAqc2VnbWVudGVkLCB1aW50OF90ICprZXlfaWQsDQo+ID4gKwkJCQlib29sICpzem1pYywg
Ym9vbCAqcmVsYXksIHVpbnQxNl90ICpzZXFaZXJvLA0KPiA+ICsJCQkJdWludDhfdCAqc2VnTywg
dWludDhfdCAqc2VnTiwNCj4gPiArCQkJCWNvbnN0IHVpbnQ4X3QgKipwYXlsb2FkLCB1aW50OF90
ICpwYXlsb2FkX2xlbikNCj4gPiArew0KPiA+ICsJdWludDMyX3QgaGRyOw0KPiA+ICsJdWludDE2
X3QgdGhpc19kc3Q7DQo+ID4gKwlib29sIGlzX3NlZ21lbnRlZDsNCj4gPiArDQo+ID4gKwlpZiAo
cGFja2V0X2xlbiA8IDE0KQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwl0aGlz
X2RzdCA9IGxfZ2V0X2JlMTYocGFja2V0ICsgNyk7DQo+ID4gKw0KPiA+ICsJLyogVHJ5IHRvIGtl
ZXAgYml0cyBpbiB0aGUgb3JkZXIgdGhleSBleGlzdCB3aXRoaW4gdGhlIHBhY2tldCAqLw0KPiA+
ICsJaWYgKGN0bCkNCj4gPiArCQkqY3RsID0gISEocGFja2V0WzFdICYgQ1RMKTsNCj4gPiArDQo+
ID4gKwlpZiAodHRsKQ0KPiA+ICsJCSp0dGwgPSBwYWNrZXRbMV0gJiBUVExfTUFTSzsNCj4gPiAr
DQo+ID4gKwlpZiAoc2VxKQ0KPiA+ICsJCSpzZXEgPSBsX2dldF9iZTMyKHBhY2tldCArIDEpICYg
U0VRX01BU0s7DQo+ID4gKw0KPiA+ICsJaWYgKHNyYykNCj4gPiArCQkqc3JjID0gbF9nZXRfYmUx
NihwYWNrZXQgKyA1KTsNCj4gPiArDQo+ID4gKwlpZiAoZHN0KQ0KPiA+ICsJCSpkc3QgPSB0aGlz
X2RzdDsNCj4gPiArDQo+ID4gKwloZHIgPSBsX2dldF9iZTMyKHBhY2tldCArIDkpOw0KPiA+ICsN
Cj4gPiArCWlzX3NlZ21lbnRlZCA9ICEhKChoZHIgPj4gU0VHX0hEUl9TSElGVCkgJiB0cnVlKTsN
Cj4gPiArCWlmIChzZWdtZW50ZWQpDQo+ID4gKwkJKnNlZ21lbnRlZCA9IGlzX3NlZ21lbnRlZDsN
Cj4gPiArDQo+ID4gKwlpZiAocGFja2V0WzFdICYgQ1RMKSB7DQo+ID4gKwkJdWludDhfdCB0aGlz
X29wY29kZSA9IHBhY2tldFs5XSAmIE9QQ09ERV9NQVNLOw0KPiA+ICsNCj4gPiArCQlpZiAoY29v
a2llKQ0KPiA+ICsJCQkqY29va2llID0gbF9nZXRfYmUzMihwYWNrZXQgKyA5KTsNCj4gPiArDQo+
ID4gKwkJaWYgKG9wY29kZSkNCj4gPiArCQkJKm9wY29kZSA9IHRoaXNfb3Bjb2RlOw0KPiA+ICsN
Cj4gPiArCQlpZiAodGhpc19kc3QgJiYgdGhpc19vcGNvZGUgPT0gTkVUX09QX1NFR19BQ0tOT1dM
RURHRSkgew0KPiA+ICsJCQlpZiAocmVsYXkpDQo+ID4gKwkJCQkqcmVsYXkgPSAhISgoaGRyID4+
IFJFTEFZX0hEUl9TSElGVCkgJiB0cnVlKTsNCj4gPiArDQo+ID4gKwkJCWlmIChzZXFaZXJvKQ0K
PiA+ICsJCQkJKnNlcVplcm8gPSAoaGRyID4+IFNFUV9aRVJPX0hEUl9TSElGVCkgJg0KPiA+ICsJ
CQkJCQkJCVNFUV9aRVJPX01BU0s7DQo+ID4gKw0KPiA+ICsJCQlpZiAocGF5bG9hZCkNCj4gPiAr
CQkJCSpwYXlsb2FkID0gcGFja2V0ICsgOTsNCj4gPiArDQo+ID4gKwkJCWlmIChwYXlsb2FkX2xl
bikNCj4gPiArCQkJCSpwYXlsb2FkX2xlbiA9IHBhY2tldF9sZW4gLSA5IC0gODsNCj4gPiArCQl9
IGVsc2Ugew0KPiA+ICsJCQlpZiAocGF5bG9hZCkNCj4gPiArCQkJCSpwYXlsb2FkID0gcGFja2V0
ICsgMTA7DQo+ID4gKw0KPiA+ICsJCQlpZiAocGF5bG9hZF9sZW4pDQo+ID4gKwkJCQkqcGF5bG9h
ZF9sZW4gPSBwYWNrZXRfbGVuIC0gMTAgLSA4Ow0KPiA+ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+
ID4gKwkJaWYgKGNvb2tpZSkNCj4gPiArCQkJKmNvb2tpZSA9IGxfZ2V0X2JlMzIocGFja2V0ICsg
cGFja2V0X2xlbiAtIDgpOw0KPiA+ICsNCj4gPiArCQlpZiAoa2V5X2lkKQ0KPiA+ICsJCQkqa2V5
X2lkID0gKGhkciA+PiBLRVlfSERSX1NISUZUKSAmIEtFWV9JRF9NQVNLOw0KPiA+ICsNCj4gPiAr
CQlpZiAoaXNfc2VnbWVudGVkKSB7DQo+ID4gKwkJCWlmIChzem1pYykNCj4gPiArCQkJCSpzem1p
YyA9ICEhKChoZHIgPj4gU1pNSUNfSERSX1NISUZUKSAmIHRydWUpOw0KPiA+ICsNCj4gPiArCQkJ
aWYgKHNlcVplcm8pDQo+ID4gKwkJCQkqc2VxWmVybyA9IChoZHIgPj4gU0VRX1pFUk9fSERSX1NI
SUZUKSAmDQo+ID4gKwkJCQkJCQkJU0VRX1pFUk9fTUFTSzsNCj4gPiArDQo+ID4gKwkJCWlmIChz
ZWdPKQ0KPiA+ICsJCQkJKnNlZ08gPSAoaGRyID4+IFNFR09fSERSX1NISUZUKSAmIFNFR19NQVNL
Ow0KPiA+ICsNCj4gPiArCQkJaWYgKHNlZ04pDQo+ID4gKwkJCQkqc2VnTiA9IChoZHIgPj4gU0VH
Tl9IRFJfU0hJRlQpICYgU0VHX01BU0s7DQo+ID4gKw0KPiA+ICsJCQlpZiAocGF5bG9hZCkNCj4g
PiArCQkJCSpwYXlsb2FkID0gcGFja2V0ICsgMTM7DQo+ID4gKw0KPiA+ICsJCQlpZiAocGF5bG9h
ZF9sZW4pDQo+ID4gKwkJCQkqcGF5bG9hZF9sZW4gPSBwYWNrZXRfbGVuIC0gMTMgLSA0Ow0KPiA+
ICsJCX0gZWxzZSB7DQo+ID4gKwkJCWlmIChwYXlsb2FkKQ0KPiA+ICsJCQkJKnBheWxvYWQgPSBw
YWNrZXQgKyAxMDsNCj4gPiArDQo+ID4gKwkJCWlmIChwYXlsb2FkX2xlbikNCj4gPiArCQkJCSpw
YXlsb2FkX2xlbiA9IHBhY2tldF9sZW4gLSAxMCAtIDQ7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+
ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5
cHRvX3BheWxvYWRfZW5jcnlwdCh1aW50OF90ICphYWQsIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQs
DQo+ID4gKwkJCQl1aW50OF90ICpvdXQsIHVpbnQxNl90IHBheWxvYWRfbGVuLA0KPiA+ICsJCQkJ
dWludDE2X3Qgc3JjLCB1aW50MTZfdCBkc3QsIHVpbnQ4X3Qga2V5X2lkLA0KPiA+ICsJCQkJdWlu
dDMyX3Qgc2VxX251bSwgdWludDMyX3QgaXZfaW5kZXgsDQo+ID4gKwkJCQlib29sIGFzem1pYywN
Cj4gPiArCQkJCWNvbnN0IHVpbnQ4X3QgYXBwbGljYXRpb25fa2V5WzE2XSkNCj4gPiArew0KPiA+
ICsJdWludDhfdCBhcHBsaWNhdGlvbl9ub25jZVsxM10gPSB7IDB4MDEsIH07DQo+ID4gKw0KPiA+
ICsJaWYgKHBheWxvYWRfbGVuIDwgMSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+
ICsJLyogS2V5X0lEID09IDAgbWVhbnMgdGhlIERldmljZSBLZXkgaXMgYmVpbmcgdXNlZCAqLw0K
PiA+ICsJaWYgKCFrZXlfaWQpDQo+ID4gKwkJYXBwbGljYXRpb25fbm9uY2VbMF0gPSAweDAyOw0K
PiA+ICsNCj4gPiArCS8qIFNlcSBOdW0gKi8NCj4gPiArCWxfcHV0X2JlMzIoc2VxX251bSwgYXBw
bGljYXRpb25fbm9uY2UgKyAxKTsNCj4gPiArDQo+ID4gKwkvKiBBU1pNSUMgKi8NCj4gPiArCWFw
cGxpY2F0aW9uX25vbmNlWzFdIHw9IGFzem1pYyA/IDB4ODAgOiAweDAwOw0KPiA+ICsNCj4gPiAr
CS8qIFNSQyAqLw0KPiA+ICsJbF9wdXRfYmUxNihzcmMsIGFwcGxpY2F0aW9uX25vbmNlICsgNSk7
DQo+ID4gKw0KPiA+ICsJLyogRFNUICovDQo+ID4gKwlsX3B1dF9iZTE2KGRzdCwgYXBwbGljYXRp
b25fbm9uY2UgKyA3KTsNCj4gPiArDQo+ID4gKwkvKiBJViBJbmRleCAqLw0KPiA+ICsJbF9wdXRf
YmUzMihpdl9pbmRleCwgYXBwbGljYXRpb25fbm9uY2UgKyA5KTsNCj4gPiArDQo+ID4gKwkvKiBw
cmludF9wYWNrZXQoIkFBRCIsIGFhZCwgYWFkID8gMTYgOiAwKTsgKi8NCj4gPiArCS8qIHByaW50
X3BhY2tldCgiTm9uY2UiLCBhcHBsaWNhdGlvbl9ub25jZSwgMTMpOyAqLw0KPiA+ICsJLyogcHJp
bnRfcGFja2V0KCJLZXkiLCBhcHBsaWNhdGlvbl9rZXksIDE2KTsgKi8NCj4gPiArCS8qIHByaW50
X3BhY2tldCgiUGF5bG9hZFtjbHJdIiwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOyAqLw0KPiA+ICsN
Cj4gPiArCWlmICghbWVzaF9jcnlwdG9fYWVzX2NjbV9lbmNyeXB0KGFwcGxpY2F0aW9uX25vbmNl
LCBhcHBsaWNhdGlvbl9rZXksDQo+ID4gKwkJCQkJYWFkLCBhYWQgPyAxNiA6IDAsDQo+ID4gKwkJ
CQkJcGF5bG9hZCwgcGF5bG9hZF9sZW4sDQo+ID4gKwkJCQkJb3V0LCBOVUxMLA0KPiA+ICsJCQkJ
CWFzem1pYyA/IDggOiA0KSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJLyog
cHJpbnRfcGFja2V0KCJQYXlsb2FkW2VuY10iLCBvdXQsIHBheWxvYWRfbGVuICsgKGFzem1pYyA/
IDggOiA0KSk7ICovDQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+
ID4gK2Jvb2wgbWVzaF9jcnlwdG9fcGF5bG9hZF9kZWNyeXB0KHVpbnQ4X3QgKmFhZCwgdWludDE2
X3QgYWFkX2xlbiwNCj4gPiArCQkJCWNvbnN0IHVpbnQ4X3QgKnBheWxvYWQsIHVpbnQxNl90IHBh
eWxvYWRfbGVuLA0KPiA+ICsJCQkJYm9vbCBzem1pY3QsDQo+ID4gKwkJCQl1aW50MTZfdCBzcmMs
IHVpbnQxNl90IGRzdCwNCj4gPiArCQkJCXVpbnQ4X3Qga2V5X2lkLCB1aW50MzJfdCBzZXFfbnVt
LA0KPiA+ICsJCQkJdWludDMyX3QgaXZfaW5kZXgsIHVpbnQ4X3QgKm91dCwNCj4gPiArCQkJCWNv
bnN0IHVpbnQ4X3QgYXBwX2tleVsxNl0pDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3QgYXBwX25vbmNl
WzEzXSA9IHsgMHgwMSwgfTsNCj4gPiArCXVpbnQzMl90IG1pYzMyOw0KPiA+ICsJdWludDY0X3Qg
bWljNjQ7DQo+ID4gKw0KPiA+ICsJaWYgKHBheWxvYWRfbGVuIDwgNSB8fCAhb3V0KQ0KPiA+ICsJ
CXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwkvKiBLZXlfSUQgPT0gMCBtZWFucyB0aGUgRGV2
aWNlIEtleSBpcyBiZWluZyB1c2VkICovDQo+ID4gKwlpZiAoIWtleV9pZCkNCj4gPiArCQlhcHBf
bm9uY2VbMF0gPSAweDAyOw0KPiA+ICsNCj4gPiArCS8qIFNlcSBOdW0gKi8NCj4gPiArCWxfcHV0
X2JlMzIoc2VxX251bSwgYXBwX25vbmNlICsgMSk7DQo+ID4gKw0KPiA+ICsJLyogQVNaTUlDICov
DQo+ID4gKwlhcHBfbm9uY2VbMV0gfD0gc3ptaWN0ID8gMHg4MCA6IDB4MDA7DQo+ID4gKw0KPiA+
ICsJLyogU1JDICovDQo+ID4gKwlsX3B1dF9iZTE2KHNyYywgYXBwX25vbmNlICsgNSk7DQo+ID4g
Kw0KPiA+ICsJLyogRFNUICovDQo+ID4gKwlsX3B1dF9iZTE2KGRzdCwgYXBwX25vbmNlICsgNyk7
DQo+ID4gKw0KPiA+ICsJLyogSVYgSW5kZXggKi8NCj4gPiArCWxfcHV0X2JlMzIoaXZfaW5kZXgs
IGFwcF9ub25jZSArIDkpOw0KPiA+ICsNCj4gPiArCW1lbWNweShvdXQsIHBheWxvYWQsIHBheWxv
YWRfbGVuKTsNCj4gPiArDQo+ID4gKwkvKiBwcmludF9wYWNrZXQoIkFBRCIsIGFhZCwgYWFkX2xl
bik7ICovDQo+ID4gKwkvKiBwcmludF9wYWNrZXQoIk5vbmNlIiwgYXBwX25vbmNlLCAxMyk7ICov
DQo+ID4gKwkvKiBwcmludF9wYWNrZXQoIktleSIsIGFwcF9rZXksIDE2KTsgKi8NCj4gPiArCS8q
IHByaW50X3BhY2tldCgiUGF5bG9hZFtlbmNdIiwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOyAqLw0K
PiA+ICsNCj4gPiArCWlmIChzem1pY3QpIHsNCj4gPiArCQlpZiAoIW1lc2hfY3J5cHRvX2Flc19j
Y21fZGVjcnlwdChhcHBfbm9uY2UsIGFwcF9rZXksDQo+ID4gKwkJCQkJYWFkLCBhYWRfbGVuLA0K
PiA+ICsJCQkJCXBheWxvYWQsIHBheWxvYWRfbGVuLA0KPiA+ICsJCQkJCW91dCwgJm1pYzY0LCBz
aXplb2YobWljNjQpKSkNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCQltaWM2
NCBePSBsX2dldF9iZTY0KG91dCArIHBheWxvYWRfbGVuIC0gOCk7DQo+ID4gKwkJbF9wdXRfYmU2
NChtaWM2NCwgb3V0ICsgcGF5bG9hZF9sZW4gLSA4KTsNCj4gPiArDQo+ID4gKwkJLyogcHJpbnRf
cGFja2V0KCJQYXlsb2FkW2Nscl0iLCBvdXQsIHBheWxvYWRfbGVuIC0gOCk7ICovDQo+ID4gKw0K
PiA+ICsJCWlmIChtaWM2NCkNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsJfSBlbHNlIHsN
Cj4gPiArCQlpZiAoIW1lc2hfY3J5cHRvX2Flc19jY21fZGVjcnlwdChhcHBfbm9uY2UsIGFwcF9r
ZXksDQo+ID4gKwkJCQkJYWFkLCBhYWRfbGVuLA0KPiA+ICsJCQkJCXBheWxvYWQsIHBheWxvYWRf
bGVuLA0KPiA+ICsJCQkJCW91dCwgJm1pYzMyLCBzaXplb2YobWljMzIpKSkNCj4gPiArCQkJcmV0
dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCQltaWMzMiBePSBsX2dldF9iZTMyKG91dCArIHBheWxv
YWRfbGVuIC0gNCk7DQo+ID4gKwkJbF9wdXRfYmUzMihtaWMzMiwgb3V0ICsgcGF5bG9hZF9sZW4g
LSA0KTsNCj4gPiArDQo+ID4gKwkJLyogcHJpbnRfcGFja2V0KCJQYXlsb2FkW2Nscl0iLCBvdXQs
IHBheWxvYWRfbGVuIC0gNCk7ICovDQo+ID4gKw0KPiA+ICsJCWlmIChtaWMzMikNCj4gPiArCQkJ
cmV0dXJuIGZhbHNlOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9
DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfY3J5cHRvX3BhY2tldF9lbmNvZGUodWludDhfdCAqcGFj
a2V0LCB1aW50OF90IHBhY2tldF9sZW4sDQo+ID4gKwkJCQljb25zdCB1aW50OF90IG5ldHdvcmtf
a2V5WzE2XSwNCj4gPiArCQkJCXVpbnQzMl90IGl2X2luZGV4LA0KPiA+ICsJCQkJY29uc3QgdWlu
dDhfdCBwcml2YWN5X2tleVsxNl0pDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3QgbmV0d29ya19ub25j
ZVsxM10gPSB7IDB4MDAsIDB4MDAgfTsNCj4gPiArCXVpbnQ4X3QgcHJpdmFjeV9jb3VudGVyWzE2
XSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgfTsNCj4gPiArCXVpbnQ4X3QgdG1w
WzE2XTsNCj4gPiArCWludCBpOw0KPiA+ICsNCj4gPiArCWlmIChwYWNrZXRfbGVuIDwgMTQpDQo+
ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCS8qIERldGVjdCBQcm94eSBwYWNrZXQg
YnkgQ1RMID09IHRydWUgJiYgRFNUID09IDB4MDAwMCAqLw0KPiA+ICsJaWYgKChwYWNrZXRbMV0g
JiBDVEwpICYmIGxfZ2V0X2JlMTYocGFja2V0ICsgNykgPT0gMCkNCj4gPiArCQluZXR3b3JrX25v
bmNlWzBdID0gMHgwMzsgLyogIFByb3h5IE5vbmNlICovDQo+ID4gKwllbHNlDQo+ID4gKwkJLyog
Q1RMICsgVFRMICovDQo+ID4gKwkJbmV0d29ya19ub25jZVsxXSA9IHBhY2tldFsxXTsNCj4gPiAr
DQo+ID4gKwkvKiBTZXEgTnVtICovDQo+ID4gKwluZXR3b3JrX25vbmNlWzJdID0gcGFja2V0WzJd
Ow0KPiA+ICsJbmV0d29ya19ub25jZVszXSA9IHBhY2tldFszXTsNCj4gPiArCW5ldHdvcmtfbm9u
Y2VbNF0gPSBwYWNrZXRbNF07DQo+ID4gKw0KPiA+ICsJLyogU1JDICovDQo+ID4gKwluZXR3b3Jr
X25vbmNlWzVdID0gcGFja2V0WzVdOw0KPiA+ICsJbmV0d29ya19ub25jZVs2XSA9IHBhY2tldFs2
XTsNCj4gPiArDQo+ID4gKwkvKiBEU1Qgbm90IGF2YWlsYWJsZSAqLw0KPiA+ICsJbmV0d29ya19u
b25jZVs3XSA9IDA7DQo+ID4gKwluZXR3b3JrX25vbmNlWzhdID0gMDsNCj4gPiArDQo+ID4gKwkv
KiBJViBJbmRleCAqLw0KPiA+ICsJbF9wdXRfYmUzMihpdl9pbmRleCwgbmV0d29ya19ub25jZSAr
IDkpOw0KPiA+ICsNCj4gPiArCS8qIHByaW50X3BhY2tldCgiTmV0LU5vbmNlIiwgbmV0d29ya19u
b25jZSwgMTMpOyAqLw0KPiA+ICsJLyogcHJpbnRfcGFja2V0KCJOZXQtS2V5IiwgbmV0d29ya19r
ZXksIDE2KTsgKi8NCj4gPiArCS8qIHByaW50X3BhY2tldCgiTmV0LVBheWxvYWRbY2xyXSIsIHBh
Y2tldCwgcGFja2V0X2xlbik7ICovDQo+ID4gKw0KPiA+ICsJLyogQ2hlY2sgZm9yIExvbmcgbmV0
LU1JQyAqLw0KPiA+ICsJaWYgKHBhY2tldFsxXSAmIENUTCkgew0KPiA+ICsJCWlmICghbWVzaF9j
cnlwdG9fYWVzX2NjbV9lbmNyeXB0KG5ldHdvcmtfbm9uY2UsIG5ldHdvcmtfa2V5LA0KPiA+ICsJ
CQkJCU5VTEwsIDAsDQo+ID4gKwkJCQkJcGFja2V0ICsgNywgcGFja2V0X2xlbiAtIDcgLSA4LA0K
PiA+ICsJCQkJCXBhY2tldCArIDcsIE5VTEwsIHNpemVvZih1aW50NjRfdCkpKQ0KPiA+ICsJCQly
ZXR1cm4gZmFsc2U7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWlmICghbWVzaF9jcnlwdG9fYWVz
X2NjbV9lbmNyeXB0KG5ldHdvcmtfbm9uY2UsIG5ldHdvcmtfa2V5LA0KPiA+ICsJCQkJCU5VTEws
IDAsDQo+ID4gKwkJCQkJcGFja2V0ICsgNywgcGFja2V0X2xlbiAtIDcgLSA0LA0KPiA+ICsJCQkJ
CXBhY2tldCArIDcsIE5VTEwsIHNpemVvZih1aW50MzJfdCkpKQ0KPiA+ICsJCQlyZXR1cm4gZmFs
c2U7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogcHJpbnRfcGFja2V0KCJOZXQtUGF5bG9hZFtl
bmNdIiwgcGFja2V0LCBwYWNrZXRfbGVuKTsgKi8NCj4gPiArDQo+ID4gKwlsX3B1dF9iZTMyKGl2
X2luZGV4LCBwcml2YWN5X2NvdW50ZXIgKyA1KTsNCj4gPiArCW1lbWNweShwcml2YWN5X2NvdW50
ZXIgKyA5LCBwYWNrZXQgKyA3LCA3KTsNCj4gPiArDQo+ID4gKwkvKiBwcmludF9wYWNrZXQoIlBy
aXYtUmFuZG9tIiwgcHJpdmFjeV9jb3VudGVyLCAxNik7ICovDQo+ID4gKw0KPiA+ICsJLyogcHJp
bnRfcGFja2V0KCJQcml2LUtleSIsIHByaXZhY3lfa2V5LCAxNik7ICovDQo+ID4gKw0KPiA+ICsN
Cj4gPiArCWlmICghYWVzX2VjYl9vbmUocHJpdmFjeV9rZXksIHByaXZhY3lfY291bnRlciwgdG1w
KSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IDY7
IGkrKykNCj4gPiArCQlwYWNrZXRbMSArIGldIF49IHRtcFtpXTsNCj4gPiArDQo+ID4gKwkvKiBw
cmludF9wYWNrZXQoIk5ldC1Qcml2YXRlIiwgcGFja2V0LCBwYWNrZXRfbGVuKTsgKi8NCj4gPiAr
DQo+ID4gKwlyZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0
b19wYWNrZXRfZGVjb2RlKGNvbnN0IHVpbnQ4X3QgKnBhY2tldCwgdWludDhfdCBwYWNrZXRfbGVu
LA0KPiA+ICsJCQkJYm9vbCBwcm94eSwgdWludDhfdCAqb3V0LCB1aW50MzJfdCBpdl9pbmRleCwN
Cj4gPiArCQkJCWNvbnN0IHVpbnQ4X3QgbmV0d29ya19rZXlbMTZdLA0KPiA+ICsJCQkJY29uc3Qg
dWludDhfdCBwcml2YWN5X2tleVsxNl0pDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3QgcHJpdmFjeV9j
b3VudGVyWzE2XSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgfTsNCj4gPiArCXVp
bnQ4X3QgbmV0d29ya19ub25jZVsxM10gPSB7IDB4MDAsIDB4MDAsIH07DQo+ID4gKwl1aW50OF90
IHRtcFsxNl07DQo+ID4gKwl1aW50MTZfdCBzcmM7DQo+ID4gKwlpbnQgaTsNCj4gPiArDQo+ID4g
KwlpZiAocGFja2V0X2xlbiA8IDE0KQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4g
KwkvKiBwcmludF9wYWNrZXQoIlByaXYtS2V5IiwgcHJpdmFjeV9rZXksIDE2KTsgKi8NCj4gPiAr
DQo+ID4gKwlsX3B1dF9iZTMyKGl2X2luZGV4LCBwcml2YWN5X2NvdW50ZXIgKyA1KTsNCj4gPiAr
CW1lbWNweShwcml2YWN5X2NvdW50ZXIgKyA5LCBwYWNrZXQgKyA3LCA3KTsNCj4gPiArDQo+ID4g
KwkvKiBwcmludF9wYWNrZXQoIlByaXYtUmFuZG9tIiwgcHJpdmFjeV9jb3VudGVyLCAxNik7ICov
DQo+ID4gKw0KPiA+ICsJaWYgKCFhZXNfZWNiX29uZShwcml2YWN5X2tleSwgcHJpdmFjeV9jb3Vu
dGVyLCB0bXApKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwltZW1jcHkob3V0
LCBwYWNrZXQsIHBhY2tldF9sZW4pOw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IDY7IGkrKykNCj4g
PiArCQlvdXRbMSArIGldIF49IHRtcFtpXTsNCj4gPiArDQo+ID4gKwlzcmMgID0gbF9nZXRfYmUx
NihvdXQgKyA1KTsNCj4gPiArDQo+ID4gKwkvKiBQcmUtY2hlY2sgU1JDIGFkZHJlc3MgZm9yIGls
bGVnYWwgdmFsdWVzICovDQo+ID4gKwlpZiAoIXNyYyB8fCBzcmMgPj0gMHg4MDAwKQ0KPiA+ICsJ
CXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwkvKiBEZXRlY3QgUHJveHkgcGFja2V0IGJ5IENU
TCA9PSB0cnVlICYmIHByb3h5ID09IHRydWUgKi8NCj4gPiArCWlmICgob3V0WzFdICYgQ1RMKSAm
JiBwcm94eSkNCj4gPiArCQluZXR3b3JrX25vbmNlWzBdID0gMHgwMzsgLyogIFByb3h5IE5vbmNl
ICovDQo+ID4gKwllbHNlDQo+ID4gKwkJLyogQ1RMICsgVFRMICovDQo+ID4gKwkJbmV0d29ya19u
b25jZVsxXSA9IG91dFsxXTsNCj4gPiArDQo+ID4gKwkvKiBTZXEgTnVtICovDQo+ID4gKwluZXR3
b3JrX25vbmNlWzJdID0gb3V0WzJdOw0KPiA+ICsJbmV0d29ya19ub25jZVszXSA9IG91dFszXTsN
Cj4gPiArCW5ldHdvcmtfbm9uY2VbNF0gPSBvdXRbNF07DQo+ID4gKw0KPiA+ICsJLyogU1JDICov
DQo+ID4gKwluZXR3b3JrX25vbmNlWzVdID0gb3V0WzVdOw0KPiA+ICsJbmV0d29ya19ub25jZVs2
XSA9IG91dFs2XTsNCj4gPiArDQo+ID4gKwkvKiBEU1Qgbm90IGF2YWlsYWJsZSAqLw0KPiA+ICsJ
bmV0d29ya19ub25jZVs3XSA9IDA7DQo+ID4gKwluZXR3b3JrX25vbmNlWzhdID0gMDsNCj4gPiAr
DQo+ID4gKwkvKiBJViBJbmRleCAqLw0KPiA+ICsJbF9wdXRfYmUzMihpdl9pbmRleCwgbmV0d29y
a19ub25jZSArIDkpOw0KPiA+ICsNCj4gPiArCS8qIHByaW50X3BhY2tldCgiTmV0LU5vbmNlIiwg
bmV0d29ya19ub25jZSwgMTMpOyAqLw0KPiA+ICsJLyogcHJpbnRfcGFja2V0KCJOZXQtS2V5Iiwg
bmV0d29ya19rZXksIDE2KTsgKi8NCj4gPiArCS8qIHByaW50X3BhY2tldCgiTmV0LVBrdFtlbmNd
Iiwgb3V0LCBwYWNrZXRfbGVuKTsgKi8NCj4gPiArDQo+ID4gKwkvKiBDaGVjayBmb3IgTG9uZyBN
SUMgKi8NCj4gPiArCWlmIChvdXRbMV0gJiBDVEwpIHsNCj4gPiArCQl1aW50NjRfdCBtaWM7DQo+
ID4gKw0KPiA+ICsJCWlmICghbWVzaF9jcnlwdG9fYWVzX2NjbV9kZWNyeXB0KG5ldHdvcmtfbm9u
Y2UsIG5ldHdvcmtfa2V5LA0KPiA+ICsJCQkJCU5VTEwsIDAsIHBhY2tldCArIDcsIHBhY2tldF9s
ZW4gLSA3LA0KPiA+ICsJCQkJCW91dCArIDcsICZtaWMsIHNpemVvZihtaWMpKSkNCj4gPiArCQkJ
cmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCQltaWMgXj0gbF9nZXRfYmU2NChvdXQgKyBwYWNr
ZXRfbGVuIC0gOCk7DQo+ID4gKwkJbF9wdXRfYmU2NChtaWMsIG91dCArIHBhY2tldF9sZW4gLSA4
KTsNCj4gPiArDQo+ID4gKwkJaWYgKG1pYykNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsJ
fSBlbHNlIHsNCj4gPiArCQl1aW50MzJfdCBtaWM7DQo+ID4gKw0KPiA+ICsJCWlmICghbWVzaF9j
cnlwdG9fYWVzX2NjbV9kZWNyeXB0KG5ldHdvcmtfbm9uY2UsIG5ldHdvcmtfa2V5LA0KPiA+ICsJ
CQkJCU5VTEwsIDAsIHBhY2tldCArIDcsIHBhY2tldF9sZW4gLSA3LA0KPiA+ICsJCQkJCW91dCAr
IDcsICZtaWMsIHNpemVvZihtaWMpKSkNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4g
PiArCQltaWMgXj0gbF9nZXRfYmUzMihvdXQgKyBwYWNrZXRfbGVuIC0gNCk7DQo+ID4gKwkJbF9w
dXRfYmUzMihtaWMsIG91dCArIHBhY2tldF9sZW4gLSA0KTsNCj4gPiArDQo+ID4gKwkJaWYgKG1p
YykNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIHByaW50
X3BhY2tldCgiTmV0LVBrdFtjbHJdIiwgb3V0LCBwYWNrZXRfbGVuKTsgKi8NCj4gPiArDQo+ID4g
KwlyZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2NyeXB0b19wYWNr
ZXRfbGFiZWwodWludDhfdCAqcGFja2V0LCB1aW50OF90IHBhY2tldF9sZW4sDQo+ID4gKwkJCQl1
aW50MTZfdCBpdl9pbmRleCwgdWludDhfdCBuZXR3b3JrX2lkKQ0KPiA+ICt7DQo+ID4gKwlwYWNr
ZXRbMF0gPSAoaXZfaW5kZXggJiAweDAwMDEpIDw8IDcgfCAobmV0d29ya19pZCAmIDB4N2YpOw0K
PiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiByZXZlcnNl
ZCwgOC1iaXQsIHBvbHk9MHgwNyAqLw0KPiA+ICtzdGF0aWMgY29uc3QgdWludDhfdCBjcmNfdGFi
bGVbMjU2XSA9IHsNCj4gPiArCTB4MDAsIDB4OTEsIDB4ZTMsIDB4NzIsIDB4MDcsIDB4OTYsIDB4
ZTQsIDB4NzUsDQo+ID4gKwkweDBlLCAweDlmLCAweGVkLCAweDdjLCAweDA5LCAweDk4LCAweGVh
LCAweDdiLA0KPiA+ICsJMHgxYywgMHg4ZCwgMHhmZiwgMHg2ZSwgMHgxYiwgMHg4YSwgMHhmOCwg
MHg2OSwNCj4gPiArCTB4MTIsIDB4ODMsIDB4ZjEsIDB4NjAsIDB4MTUsIDB4ODQsIDB4ZjYsIDB4
NjcsDQo+ID4gKw0KPiA+ICsJMHgzOCwgMHhhOSwgMHhkYiwgMHg0YSwgMHgzZiwgMHhhZSwgMHhk
YywgMHg0ZCwNCj4gPiArCTB4MzYsIDB4YTcsIDB4ZDUsIDB4NDQsIDB4MzEsIDB4YTAsIDB4ZDIs
IDB4NDMsDQo+ID4gKwkweDI0LCAweGI1LCAweGM3LCAweDU2LCAweDIzLCAweGIyLCAweGMwLCAw
eDUxLA0KPiA+ICsJMHgyYSwgMHhiYiwgMHhjOSwgMHg1OCwgMHgyZCwgMHhiYywgMHhjZSwgMHg1
ZiwNCj4gPiArDQo+ID4gKwkweDcwLCAweGUxLCAweDkzLCAweDAyLCAweDc3LCAweGU2LCAweDk0
LCAweDA1LA0KPiA+ICsJMHg3ZSwgMHhlZiwgMHg5ZCwgMHgwYywgMHg3OSwgMHhlOCwgMHg5YSwg
MHgwYiwNCj4gPiArCTB4NmMsIDB4ZmQsIDB4OGYsIDB4MWUsIDB4NmIsIDB4ZmEsIDB4ODgsIDB4
MTksDQo+ID4gKwkweDYyLCAweGYzLCAweDgxLCAweDEwLCAweDY1LCAweGY0LCAweDg2LCAweDE3
LA0KPiA+ICsNCj4gPiArCTB4NDgsIDB4ZDksIDB4YWIsIDB4M2EsIDB4NGYsIDB4ZGUsIDB4YWMs
IDB4M2QsDQo+ID4gKwkweDQ2LCAweGQ3LCAweGE1LCAweDM0LCAweDQxLCAweGQwLCAweGEyLCAw
eDMzLA0KPiA+ICsJMHg1NCwgMHhjNSwgMHhiNywgMHgyNiwgMHg1MywgMHhjMiwgMHhiMCwgMHgy
MSwNCj4gPiArCTB4NWEsIDB4Y2IsIDB4YjksIDB4MjgsIDB4NWQsIDB4Y2MsIDB4YmUsIDB4MmYs
DQo+ID4gKw0KPiA+ICsJMHhlMCwgMHg3MSwgMHgwMywgMHg5MiwgMHhlNywgMHg3NiwgMHgwNCwg
MHg5NSwNCj4gPiArCTB4ZWUsIDB4N2YsIDB4MGQsIDB4OWMsIDB4ZTksIDB4NzgsIDB4MGEsIDB4
OWIsDQo+ID4gKwkweGZjLCAweDZkLCAweDFmLCAweDhlLCAweGZiLCAweDZhLCAweDE4LCAweDg5
LA0KPiA+ICsJMHhmMiwgMHg2MywgMHgxMSwgMHg4MCwgMHhmNSwgMHg2NCwgMHgxNiwgMHg4NywN
Cj4gPiArDQo+ID4gKwkweGQ4LCAweDQ5LCAweDNiLCAweGFhLCAweGRmLCAweDRlLCAweDNjLCAw
eGFkLA0KPiA+ICsJMHhkNiwgMHg0NywgMHgzNSwgMHhhNCwgMHhkMSwgMHg0MCwgMHgzMiwgMHhh
MywNCj4gPiArCTB4YzQsIDB4NTUsIDB4MjcsIDB4YjYsIDB4YzMsIDB4NTIsIDB4MjAsIDB4YjEs
DQo+ID4gKwkweGNhLCAweDViLCAweDI5LCAweGI4LCAweGNkLCAweDVjLCAweDJlLCAweGJmLA0K
PiA+ICsNCj4gPiArCTB4OTAsIDB4MDEsIDB4NzMsIDB4ZTIsIDB4OTcsIDB4MDYsIDB4NzQsIDB4
ZTUsDQo+ID4gKwkweDllLCAweDBmLCAweDdkLCAweGVjLCAweDk5LCAweDA4LCAweDdhLCAweGVi
LA0KPiA+ICsJMHg4YywgMHgxZCwgMHg2ZiwgMHhmZSwgMHg4YiwgMHgxYSwgMHg2OCwgMHhmOSwN
Cj4gPiArCTB4ODIsIDB4MTMsIDB4NjEsIDB4ZjAsIDB4ODUsIDB4MTQsIDB4NjYsIDB4ZjcsDQo+
ID4gKw0KPiA+ICsJMHhhOCwgMHgzOSwgMHg0YiwgMHhkYSwgMHhhZiwgMHgzZSwgMHg0YywgMHhk
ZCwNCj4gPiArCTB4YTYsIDB4MzcsIDB4NDUsIDB4ZDQsIDB4YTEsIDB4MzAsIDB4NDIsIDB4ZDMs
DQo+ID4gKwkweGI0LCAweDI1LCAweDU3LCAweGM2LCAweGIzLCAweDIyLCAweDUwLCAweGMxLA0K
PiA+ICsJMHhiYSwgMHgyYiwgMHg1OSwgMHhjOCwgMHhiZCwgMHgyYywgMHg1ZSwgMHhjZg0KPiA+
ICt9Ow0KPiA+ICsNCj4gPiArdWludDhfdCBtZXNoX2NyeXB0b19jb21wdXRlX2Zjcyhjb25zdCB1
aW50OF90ICpwYWNrZXQsIHVpbnQ4X3QgcGFja2V0X2xlbikNCj4gPiArew0KPiA+ICsJdWludDhf
dCBmY3MgPSAweGZmOw0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8
IHBhY2tldF9sZW47IGkrKykNCj4gPiArCQlmY3MgPSBjcmNfdGFibGVbZmNzIF4gcGFja2V0W2ld
XTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMHhmZiAtIGZjczsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr
Ym9vbCBtZXNoX2NyeXB0b19jaGVja19mY3MoY29uc3QgdWludDhfdCAqcGFja2V0LCB1aW50OF90
IHBhY2tldF9sZW4sDQo+ID4gKwkJCQkJCQl1aW50OF90IHJlY2VpdmVkX2ZjcykNCj4gPiArew0K
PiA+ICsJdWludDhfdCBmY3MgPSAweGZmOw0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJZm9y
IChpID0gMDsgaSA8IHBhY2tldF9sZW47IGkrKykNCj4gPiArCQlmY3MgPSBjcmNfdGFibGVbZmNz
IF4gcGFja2V0W2ldXTsNCj4gPiArDQo+ID4gKwlmY3MgPSBjcmNfdGFibGVbZmNzIF4gcmVjZWl2
ZWRfZmNzXTsNCj4gPiArDQo+ID4gKwlpZiAoZmNzICE9IDB4Y2YpDQo+ID4gKwkJbF9lcnJvcigi
SU9UIFdhcm5pbmchIENSQyAlMi4yeCAhPSAweGNmIiwgZmNzKTsNCj4gDQo+IFRoaXMgb25lIGlz
IGJhZCBhcyB3ZWxsLiBUaGUgY2FsbGVyIGNhbiBwcmludCBhbiBlcnJvciBpZiBjaG9zZW4uDQo+
IA0KPiBSZWdhcmRzDQo+IA0KPiBNYXJjZWwNCj4g

  reply	other threads:[~2018-07-08 15:07 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-06 17:12 [PATCH BlueZ v5 00/14] Bluetooth Mesh Daemon Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 01/14] mesh: Shared private meshd interfaces Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 02/14] mesh: Mesh crypto support Brian Gix
2018-07-06 18:10   ` Marcel Holtmann
2018-07-08 15:07     ` Gix, Brian [this message]
2018-07-06 17:12 ` [PATCH BlueZ v5 03/14] mesh: Infrastructure for Mesh daemon Brian Gix
2018-07-06 18:20   ` Marcel Holtmann
2018-07-08 15:05     ` Gix, Brian
2018-07-14 16:23       ` Marcel Holtmann
2018-07-06 17:12 ` [PATCH BlueZ v5 04/14] mesh: Initial Mesh Friendship support Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 05/14] mesh: Provisioning logic for mesh Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 06/14] mesh: Upper and Lower mesh transport Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 07/14] mesh: Add Accessors to Transport layer data Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 08/14] mesh: Header files for mesh access layer and utilities Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 09/14] mesh: Source " Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 10/14] mesh: Source code for handling access layer mux/demux Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 11/14] mesh: Mesh config server model Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 12/14] mesh: Read and write mesh configuration in JSON format Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 13/14] mesh: Sample device composition " Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 14/14] Makefile for meshd Brian Gix
2018-07-06 17:23   ` Marcel Holtmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1531062419.7346.19.camel@intel.com \
    --to=brian.gix@intel.com \
    --cc=inga.stotland@intel.com \
    --cc=johan.hedberg@gmail.com \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=marcel@holtmann.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).