From mboxrd@z Thu Jan 1 00:00:00 1970 From: Volodymyr Babchuk Subject: Re: [PATCH v2 10/13] optee: add support for RPC commands Date: Mon, 10 Sep 2018 21:14:24 +0300 Message-ID: <3a15069f-59ef-8bfa-6143-56bc64c795bd@epam.com> References: <1535993677-20816-1-git-send-email-volodymyr_babchuk@epam.com> <1535993677-20816-11-git-send-email-volodymyr_babchuk@epam.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fzQht-0004MI-Ge for xen-devel@lists.xenproject.org; Mon, 10 Sep 2018 18:14:41 +0000 In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Julien Grall , xen-devel@lists.xenproject.org, xen-devel@lists.xen.org Cc: tee-dev@lists.linaro.org, Stefano Stabellini List-Id: xen-devel@lists.xenproject.org SGksCgpPbiAxMC4wOS4xOCAxODozNCwgSnVsaWVuIEdyYWxsIHdyb3RlOgo+IEhpIFZvbG9keW15 ciwKPiAKPiBPbiAwMy8wOS8xOCAxNzo1NCwgVm9sb2R5bXlyIEJhYmNodWsgd3JvdGU6Cj4+IE9Q LVRFRSBjYW4gaXNzdWUgbXVsdGlwbGUgUlBDIHJlcXVlc3RzLiBXZSBhcmUgaW50ZXJlc3RlZCBt b3N0bHkgaW4KPj4gcmVxdWVzdCB0aGF0IGFza3MgTlcgdG8gYWxsb2NhdGUvZnJlZSBzaGFyZWQg bWVtb3J5IGZvciBPUC1URUUKPj4gbmVlZHMsIGJlY3Vhc2UgbWVkaWF0b3IgbmVlZCB0byBkbyBh ZGRyZXNzIHRyYW5zbGF0aW9uIGluIHRoZSBzYW1lCj4gCj4gcy9iZWN1YXNlL2JlY2F1c2UvCj4g cy9uZWVkL25lZWRzLwo+IAo+IHRoZSBtZWRpYXRvcgo+IAo+IAo+PiB3YXkgYXMgaXQgd2FzIGRv bmUgZm9yIHNoYXJlZCBidWZmZXJzIHJlZ2lzdGVyZWQgYnkgTlcuCj4+Cj4+IEFzIG1lZGlhdG9y IG5vdyBhY2Nlc3NlcyBzaGFyZWQgY29tbWFuZCBidWZmZXIsIHdlIG5lZWQgdG8gc2hhZG93Cj4g Cj4gIkFzIHRoZSIKPiAKPj4gaXQgaW4gdGhlIHNhbWUgd2F5LCBhcyB3ZSBzaGFkb3cgcmVxdWVz dCBidWZmZXJzIGZvciBTVEQgY2FsbHMuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFZvbG9keW15ciBC YWJjaHVrIDx2b2xvZHlteXJfYmFiY2h1a0BlcGFtLmNvbT4KPj4gLS0tCj4+IMKgIHhlbi9hcmNo L2FybS90ZWUvb3B0ZWUuYyB8IDEzNyAKPj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0KPj4gwqAgMSBmaWxlIGNoYW5nZWQsIDEyNiBpbnNlcnRpb25zKCsp LCAxMSBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS90ZWUvb3B0 ZWUuYyBiL3hlbi9hcmNoL2FybS90ZWUvb3B0ZWUuYwo+PiBpbmRleCA4YmZjZmRjLi5iMmQ3OTVl IDEwMDY0NAo+PiAtLS0gYS94ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMKPj4gKysrIGIveGVuL2Fy Y2gvYXJtL3RlZS9vcHRlZS5jCj4+IEBAIC00NSw2ICs0NSw3IEBAIHN0cnVjdCBzdGRfY2FsbF9j dHggewo+PiDCoCBzdHJ1Y3Qgc2htX3JwYyB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGxpc3RfaGVh ZCBsaXN0Owo+PiDCoMKgwqDCoMKgIHN0cnVjdCBvcHRlZV9tc2dfYXJnICpndWVzdF9hcmc7Cj4+ ICvCoMKgwqAgc3RydWN0IG9wdGVlX21zZ19hcmcgKnhlbl9hcmc7Cj4+IMKgwqDCoMKgwqAgc3Ry dWN0IHBhZ2UgKmd1ZXN0X3BhZ2U7Cj4+IMKgwqDCoMKgwqAgbWZuX3QgZ3Vlc3RfbWZuOwo+PiDC oMKgwqDCoMKgIHVpbnQ2NF90IGNvb2tpZTsKPj4gQEAgLTMwMyw2ICszMDQsMTAgQEAgc3RhdGlj IHN0cnVjdCBzaG1fcnBjIAo+PiAqYWxsb2NhdGVfYW5kX21hcF9zaG1fcnBjKHN0cnVjdCBkb21h aW5fY3R4ICpjdHgsIHBhZGRyX3QKPj4gwqDCoMKgwqDCoCBpZiAoICFzaG1fcnBjICkKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyOwo+PiArwqDCoMKgIHNobV9ycGMtPnhlbl9hcmcgPSBh bGxvY194ZW5oZWFwX3BhZ2UoKTsKPj4gK8KgwqDCoCBpZiAoICFzaG1fcnBjLT54ZW5fYXJnICkK Pj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyOwo+PiArCj4+IMKgwqDCoMKgwqAgc2htX3JwYy0+ Z3Vlc3RfbWZuID0gbG9va3VwX2FuZF9waW5fZ3Vlc3RfcmFtX2FkZHIoZ2FkZHIsIE5VTEwpOwo+ PiDCoMKgwqDCoMKgIGlmICggbWZuX2VxKHNobV9ycGMtPmd1ZXN0X21mbiwgSU5WQUxJRF9NRk4p ICkKPj4gQEAgLTMyNCw2ICszMjksMTAgQEAgc3RhdGljIHN0cnVjdCBzaG1fcnBjIAo+PiAqYWxs b2NhdGVfYW5kX21hcF9zaG1fcnBjKHN0cnVjdCBkb21haW5fY3R4ICpjdHgsIHBhZGRyX3QKPj4g wqAgZXJyOgo+PiDCoMKgwqDCoMKgIGF0b21pY19kZWMoJmN0eC0+c2htX3JwY19jb3VudCk7Cj4+ ICsKPj4gK8KgwqDCoCBpZiAoIHNobV9ycGMtPnhlbl9hcmcgKQo+PiArwqDCoMKgwqDCoMKgwqAg ZnJlZV94ZW5oZWFwX3BhZ2Uoc2htX3JwYy0+eGVuX2FyZyk7Cj4+ICsKPj4gwqDCoMKgwqDCoCB4 ZnJlZShzaG1fcnBjKTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPj4gwqAgfQo+PiBAQCAt MzQ2LDkgKzM1NSwxMCBAQCBzdGF0aWMgdm9pZCBmcmVlX3NobV9ycGMoc3RydWN0IGRvbWFpbl9j dHggKmN0eCwgCj4+IHVpbnQ2NF90IGNvb2tpZSkKPj4gwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKg wqAgc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cj4+IC3CoMKgwqAgaWYgKCAhZm91bmQgKSB7Cj4+ ICvCoMKgwqAgaWYgKCAhZm91bmQgKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiAt wqDCoMKgIH0KPiAKPiBUaGF0IGNoYW5nZSBzaG91bGQgYmUgZm9sZGVkIGludG8gdGhlIHBhdGNo IGFkZGluZyB0aGUge30uCj4gCj4+ICsKPj4gK8KgwqDCoCBmcmVlX3hlbmhlYXBfcGFnZShzaG1f cnBjLT54ZW5fYXJnKTsKPj4gwqDCoMKgwqDCoCBpZiAoIHNobV9ycGMtPmd1ZXN0X2FyZyApIHsK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHVucGluX2d1ZXN0X3JhbV9hZGRyKHNobV9ycGMtPmd1ZXN0 X21mbik7Cj4+IEBAIC0zNTgsNiArMzY4LDI0IEBAIHN0YXRpYyB2b2lkIGZyZWVfc2htX3JwYyhz dHJ1Y3QgZG9tYWluX2N0eCAqY3R4LCAKPj4gdWludDY0X3QgY29va2llKQo+PiDCoMKgwqDCoMKg IHhmcmVlKHNobV9ycGMpOwo+PiDCoCB9Cj4+ICtzdGF0aWMgc3RydWN0IHNobV9ycGMgKmZpbmRf c2htX3JwYyhzdHJ1Y3QgZG9tYWluX2N0eCAqY3R4LCB1aW50NjRfdCAKPj4gY29va2llKQo+PiAr ewo+PiArwqDCoMKgIHN0cnVjdCBzaG1fcnBjICpzaG1fcnBjOwo+PiArCj4+ICvCoMKgwqAgc3Bp bl9sb2NrKCZjdHgtPmxvY2spOwo+PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkoIHNobV9y cGMsICZjdHgtPnNobV9ycGNfbGlzdCwgbGlzdCApCj4+ICvCoMKgwqAgewo+PiArwqDCoMKgwqDC oMKgwqAgaWYgKCBzaG1fcnBjLT5jb29raWUgPT0gY29va2llICkKPj4gK8KgwqDCoMKgwqDCoMKg IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcGluX3VubG9jaygmY3R4LT5s b2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gc2htX3JwYzsK Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgc3Bpbl91bmxvY2so JmN0eC0+bG9jayk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gTlVMTDsKPj4gK30KPj4gKwo+PiDC oCBzdGF0aWMgc3RydWN0IHNobV9idWYgKmFsbG9jYXRlX3NobV9idWYoc3RydWN0IGRvbWFpbl9j dHggKmN0eCwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50NjRfdCBjb29raWUsCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IHBhZ2VzX2NudCkKPj4gQEAgLTcwNCw2ICs3 MzIsMjggQEAgc3RhdGljIGJvb2wgY29weV9zdGRfcmVxdWVzdF9iYWNrKHN0cnVjdCAKPj4gZG9t YWluX2N0eCAqY3R4LAo+PiDCoMKgwqDCoMKgIHJldHVybiB0cnVlOwo+PiDCoCB9Cj4+ICtzdGF0 aWMgdm9pZCBoYW5kbGVfcnBjX3JldHVybihzdHJ1Y3QgZG9tYWluX2N0eCAqY3R4LAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICpjYWxsKQo+ PiArewo+PiArwqDCoMKgIGNhbGwtPm9wdGVlX3RocmVhZF9pZCA9IGdldF91c2VyX3JlZyhyZWdz LCAzKTsKPj4gK8KgwqDCoCBjYWxsLT5ycGNfb3AgPSBPUFRFRV9TTUNfUkVUVVJOX0dFVF9SUENf RlVOQyhnZXRfdXNlcl9yZWcocmVncywgMCkpOwo+PiArCj4+ICvCoMKgwqAgaWYgKCBjYWxsLT5y cGNfb3AgPT0gT1BURUVfU01DX1JQQ19GVU5DX0NNRCApCj4+ICvCoMKgwqAgewo+PiArwqDCoMKg wqDCoMKgwqAgLyogQ29weSBSUEMgcmVxdWVzdCBmcm9tIHNoYWRvd2VkIGJ1ZmZlciB0byBndWVz dCAqLwo+PiArwqDCoMKgwqDCoMKgwqAgdWludDY0X3QgY29va2llID0gZ2V0X3VzZXJfcmVnKHJl Z3MsIDEpIDw8IDMyIHwgCj4+IGdldF91c2VyX3JlZyhyZWdzLCAyKTsKPj4gK8KgwqDCoMKgwqDC oMKgIHN0cnVjdCBzaG1fcnBjICpzaG1fcnBjID0gZmluZF9zaG1fcnBjKGN0eCwgY29va2llKTsK PiAKPiBOZXdsaW5lIGJldHdlZW4gZGVjbGFyYXRpb24gYW5kIGNvZGUuClNvcnJ5LCBhbm90aGVy IGhhYml0IGZyb20ga2VybmVsIGNvZGluZyBzdHlsZSA6KAoKPj4gK8KgwqDCoMKgwqDCoMKgIGlm ICggIXNobV9ycGMgKQo+PiArwqDCoMKgwqDCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBncHJpbnRrKFhFTkxPR19FUlIsICJDYW4ndCBmaW5kIFNITS1SUEMgd2l0aCBjb29raWUg Cj4+ICVseFxuIiwgY29va2llKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+ PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqAgbWVtY3B5KHNobV9ycGMtPmd1 ZXN0X2FyZywgc2htX3JwYy0+eGVuX2FyZywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgT1BURUVfTVNHX0dFVF9BUkdfU0laRShzaG1fcnBjLT54ZW5fYXJnLT5udW1fcGFyYW1zKSk7 Cj4+ICvCoMKgwqAgfQo+PiArfQo+PiArCj4+IMKgIHN0YXRpYyBib29sIGV4ZWN1dGVfc3RkX2Nh bGwoc3RydWN0IGRvbWFpbl9jdHggKmN0eCwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpy ZWdzLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IHN0ZF9jYWxsX2N0eCAqY2FsbCkKPj4gQEAgLTcxNSw4ICs3NjUs NyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlX3N0ZF9jYWxsKHN0cnVjdCBkb21haW5fY3R4ICpjdHgs Cj4+IMKgwqDCoMKgwqAgb3B0ZWVfcmV0ID0gZ2V0X3VzZXJfcmVnKHJlZ3MsIDApOwo+PiDCoMKg wqDCoMKgIGlmICggT1BURUVfU01DX1JFVFVSTl9JU19SUEMob3B0ZWVfcmV0KSApCj4+IMKgwqDC oMKgwqAgewo+PiAtwqDCoMKgwqDCoMKgwqAgY2FsbC0+b3B0ZWVfdGhyZWFkX2lkID0gZ2V0X3Vz ZXJfcmVnKHJlZ3MsIDMpOwo+PiAtwqDCoMKgwqDCoMKgwqAgY2FsbC0+cnBjX29wID0gT1BURUVf U01DX1JFVFVSTl9HRVRfUlBDX0ZVTkMob3B0ZWVfcmV0KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGhh bmRsZV9ycGNfcmV0dXJuKGN0eCwgcmVncywgY2FsbCk7Cj4gCj4gSXQgd291bGQgbWFrZSBzZW5z ZSB0byBpbnRyb2R1Y2UgaGFuZGxlX3JwY19yZXR1cm4gd2hlcmUgeW91IGFjdHVhbGx5IAo+IGFk ZCB0aG9zZSAyIGxpbmVzLgo+IAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHRydWU7Cj4+ IMKgwqDCoMKgwqAgfQo+PiBAQCAtNzgzLDYgKzgzMiw3NCBAQCBvdXQ6Cj4+IMKgwqDCoMKgwqAg cmV0dXJuIHJldDsKPj4gwqAgfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBoYW5kbGVfcnBjX2NtZF9h bGxvYyhzdHJ1Y3QgZG9tYWluX2N0eCAqY3R4LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY3B1X3VzZXJf cmVncyAqcmVncywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHN0ZF9jYWxsX2N0eCAqY2FsbCwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IHNobV9ycGMgKnNobV9ycGMpCj4+ICt7Cj4+ICvCoMKgwqAgaWYgKCBzaG1f cnBjLT54ZW5fYXJnLT5wYXJhbXNbMF0uYXR0ciAhPSAKPj4gKE9QVEVFX01TR19BVFRSX1RZUEVf VE1FTV9PVVRQVVQgfAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgT1BURUVfTVNH X0FUVFJfTk9OQ09OVElHKSApCj4+ICvCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqAgZ3ByaW50 ayhYRU5MT0dfV0FSTklORywgIkludmFsaWQgYXR0cnMgZm9yIHNoYXJlZCBtZW0gCj4+IGJ1ZmZl clxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvC oMKgwqAgLyogTGFzdCBlbnRyeSBpbiBub25fY29udGlnIGFycmF5IGlzIHVzZWQgdG8gaG9sZCBS UEMtYWxsb2NhdGVkIAo+PiBidWZmZXIgKi8KPj4gK8KgwqDCoCBpZiAoIGNhbGwtPm5vbl9jb250 aWdbTUFYX05PTkNPTlRJR19FTlRSSUVTIC0gMV0gKQo+PiArwqDCoMKgIHsKPj4gK8KgwqDCoMKg wqDCoMKgIGZyZWVfeGVuaGVhcF9wYWdlcyhjYWxsLT5ub25fY29udGlnW01BWF9OT05DT05USUdf RU5UUklFUyAtIDFdLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgCj4+IGNhbGwtPm5v bl9jb250aWdfb3JkZXJbTUFYX05PTkNPTlRJR19FTlRSSUVTIC0gMV0pOwo+PiArwqDCoMKgwqDC oMKgwqAgY2FsbC0+bm9uX2NvbnRpZ1tNQVhfTk9OQ09OVElHX0VOVFJJRVMgLSAxXSA9IE5VTEw7 Cj4+ICvCoMKgwqAgfQo+IAo+IFRoaXMgaXMgcXVpdGUgb2RkLiBXaHkgZG9uJ3QgeW91IGp1c3Qg ZGVueSBhbGxvY2F0aW5nIGluZm9ybWF0aW9uIGluIHRoZSAKPiBub25fY29uZmlnIGFycmF5PyBU aGlzIHdvdWxkIGF2b2lkIHRvIHNpbGVudGx5IGRyb3BwZWQgYW55IHBhZ2UgdGhhdCBtYXkgCj4g aGF2ZSBiZWVuIGxpbmtlZCB0b2dldGhlciBhbmQgcG90ZW50aWFsbHkgdXNlZCBzdGlsbCBpbiB1 c2UuCk5vLCB0aGlzLCBhY3R1YWxseSBpcyBwYXJ0IG9mIHRoZSBwcm90b2NvbC4gT1AtVEVFIGNh biBhc2sgdG8gYWxsb2NhdGUgCm1vcmUgc2hhcmVkIGJ1ZmZlcnMsIG9uZSBwZXIgUlBDIHJldHVy bi4KY2FsbC0+bm9uX2NvbnRpZ1t4XSBpcyBuZWVkZWQgdG8gaG9sZCBsaXN0IG9mIHBhZ2VzIHVu dGlsIE9QX1RFRSAKY29uc3VtZXMgdGhlbS4gVGhlIGl0IGNhbiBiZSBmcmVlZCBhbmQgcmV1c2Vk IHRvIGFsbG9jYXRlIG5leHQgYnVmZmVyLgpDb25zaWRlciB0aGlzOgoKMS4gT1AtVEVFIGlzc3Vl cyBSUEMgImFsbG9jYXRlIGJ1ZmZlciIKMi4gTlcgcmV0dXJucyBsaXN0IG9mIHBhZ2VzCjMuIE1l ZGlhdG9yIHRyYW5zbGF0ZXMgYW5kIHN0b3JlcyBhZGRyZXNzIGluIG5vbl9jb250aWdbeF0KNC4g T1AtVEVFIGJlZ2lucyB0byBjb25zdW1lIHRoaXMgbGlzdAo1LiBJUlEgYXJyaXZlcyBhbmQgT1At VEVFIGZvcmNlZCB0byBicmVhayB0aGUgd29yawo2LiBNZWRpYXRvciByZWNlaXZlcyBjb250cm9s IGJhY2ssIGJ1dCBpdCBzaG91bGQgbm90IGZyZWUgbm9uX2NvbnRpZ1t4XSwKICAgIGJlY2F1c2Ug aXQgaXMgbm90IHN1cmUgb2YgT1AtVEVFIGZpbmlzaGVkIHJlYWRpbmcgZnJvbSBpdAo3LiBYZW4v Z3Vlc3QgaGFuZGxlcyB0aGUgSVJRIGFuZCByZXR1cm5zIGNvbnRyb2wgYmFjayB0byBPUC1URUUK OC4gT1AtVEVFIGZpbmlzaGVzIHByb2Nlc3NpbmcgdGhpcyBidWZmZXJzIGFuZCBhc2tzIGZvciBh bm90aGVyIG9uZQo5LiBOVyByZXR1cm5zIGxpc3Qgb2YgcGFnZXMgZm9yIHRoZSBuZXh0IGJ1ZmZl cgoxMC4gQXQgdGhpcyBwb2ludCBtZWRpYXRvciBpcyBzdXJlIHRoYXQgT1AtVEVFIGZpbmlzaGVk IHByb2Nlc3NpbmcKICAgICBvbGQgbm9uX2NvbnRpZ1t4XSwgc28gaXQgY2FuIGZyZWUgaXQgYW5k IGFsbG9jYXRlZCBhbm90aGVyLgoKPiAKPiBJIHdvdWxkIGFsc28gcHJlZmVyIGlmIHlvdSBpbnRy b2R1Y2UgYSBkZWZpbmUgZm9yIHRoYXQgUkNQLWFsbG9jYXRlZCAKPiBidWZmZXIuCj4gCj4+ICvC oMKgwqAgdHJhbnNsYXRlX25vbmNvbnRpZyhjdHgsIGNhbGwsIHNobV9ycGMtPnhlbl9hcmctPnBh cmFtcyArIDAsCj4gCj4gV2hhdCBkb2VzIHRoZSAiKyAwIiBzdGFuZCBmb3I/Cj4gCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE1BWF9OT05DT05USUdf RU5UUklFUyAtIDEpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBoYW5kbGVfcnBjX2NtZChz dHJ1Y3QgZG9tYWluX2N0eCAqY3R4LCBzdHJ1Y3QgCj4+IGNwdV91c2VyX3JlZ3MgKnJlZ3MsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cnVjdCBzdGRfY2FsbF9jdHggKmNhbGwpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IHNobV9ycGMg KnNobV9ycGM7Cj4+ICvCoMKgwqAgdWludDY0X3QgY29va2llOwo+PiArwqDCoMKgIGludCBudW1f cGFyYW1zOwo+PiArCj4+ICvCoMKgwqAgY29va2llID0gZ2V0X3VzZXJfcmVnKHJlZ3MsIDEpIDw8 IDMyIHwgZ2V0X3VzZXJfcmVnKHJlZ3MsIDIpOwo+PiArCj4+ICvCoMKgwqAgc2htX3JwYyA9IGZp bmRfc2htX3JwYyhjdHgsIGNvb2tpZSk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoICFzaG1fcnBjICkK Pj4gK8KgwqDCoCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBncHJpbnRrKFhFTkxPR19FUlIsICJDYW4n dCBmaW5kIFNITS1SUEMgd2l0aCBjb29raWUgJWx4XG4iLCAKPj4gY29va2llKTsKPj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybjsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBudW1fcGFyYW1z ID0gc2htX3JwYy0+Z3Vlc3RfYXJnLT5udW1fcGFyYW1zOwo+PiArCj4+ICvCoMKgwqAgYmFycmll cigpOyAvKiBFbnN1cmUgdGhhdCBudW1fcGFyYW1zIGlzIHJlYWQgb25jZSAqLwo+IAo+IEkgd291 bGQgdXNlOgo+IAo+IG51bV9wYXJhbXMgPSBBQ0NFU1NfT05DRShzaG1fcnBjLT5ndWVzdF9hcmct Pm51bV9wYXJhbXMpOwpJIGxvb2tlZCBmb3IgdGhpcyBtYWNybywgYnV0IHNvbWVob3cgbWlzc2Vk IGl0LiBUaGFua3MgZm9yIHBvaW50aW5nIG91dC4KCj4+ICvCoMKgwqAgaWYgKCBPUFRFRV9NU0df R0VUX0FSR19TSVpFKG51bV9wYXJhbXMpID4gCj4+IE9QVEVFX01TR19OT05DT05USUdfUEFHRV9T SVpFICkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gKwo+PiArwqDCoMKgIG1lbWNweShz aG1fcnBjLT54ZW5fYXJnLCBzaG1fcnBjLT5ndWVzdF9hcmcsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoCBPUFRFRV9NU0dfR0VUX0FSR19TSVpFKG51bV9wYXJhbXMpKTsKPj4gKwo+PiArwqDCoMKg IHN3aXRjaCAoc2htX3JwYy0+eGVuX2FyZy0+Y21kKSB7Cj4+ICvCoMKgwqAgY2FzZSBPUFRFRV9N U0dfUlBDX0NNRF9HRVRfVElNRToKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKg IGNhc2UgT1BURUVfTVNHX1JQQ19DTURfV0FJVF9RVUVVRToKPj4gK8KgwqDCoMKgwqDCoMKgIGJy ZWFrOwo+PiArwqDCoMKgIGNhc2UgT1BURUVfTVNHX1JQQ19DTURfU1VTUEVORDoKPj4gK8KgwqDC oMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgT1BURUVfTVNHX1JQQ19DTURfU0hNX0FM TE9DOgo+PiArwqDCoMKgwqDCoMKgwqAgaGFuZGxlX3JwY19jbWRfYWxsb2MoY3R4LCByZWdzLCBj YWxsLCBzaG1fcnBjKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2Ug T1BURUVfTVNHX1JQQ19DTURfU0hNX0ZSRUU6Cj4+ICvCoMKgwqDCoMKgwqDCoCBmcmVlX3NobV9i dWYoY3R4LCBzaG1fcnBjLT54ZW5fYXJnLT5wYXJhbXNbMF0udS52YWx1ZS5iKTsKPj4gK8KgwqDC oMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGRlZmF1bHQ6Cj4+ICvCoMKgwqDCoMKgwqDCoCBi cmVhazsKPj4gK8KgwqDCoCB9Cj4+ICt9Cj4+ICsKPj4gwqAgc3RhdGljIHZvaWQgaGFuZGxlX3Jw Y19mdW5jX2FsbG9jKHN0cnVjdCBkb21haW5fY3R4ICpjdHgsCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCj4+IMKgIHsKPj4gQEAgLTc5NiwxMyArOTEzLDExIEBA IHN0YXRpYyB2b2lkIGhhbmRsZV9ycGNfZnVuY19hbGxvYyhzdHJ1Y3QgCj4+IGRvbWFpbl9jdHgg KmN0eCwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBzaG1fcnBjICpzaG1fcnBjOwo+PiDC oMKgwqDCoMKgwqDCoMKgwqAgc2htX3JwYyA9IGFsbG9jYXRlX2FuZF9tYXBfc2htX3JwYyhjdHgs IHB0ciwgY29va2llKTsKPj4gLcKgwqDCoMKgwqDCoMKgIGlmICggIXNobV9ycGMgKQo+PiAtwqDC oMKgwqDCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCAhc2htX3JwYyApIHsKPiAKPiBQ bGVhc2UgdHJ5IHRvIGF2b2lkIGNoYW5naW5nIHRoZSBjb2Rpbmcgc3R5bGUgaW4gZGlmZmVyZW50 IHBhdGNoLiBCdXQgCj4gdGhpcyBvbmUgaXMgd3JvbmcuClllcCA6KCB0aGlzIGlzIHRoZSBhcnRp ZmFjdCBmcm9tIHNwbGl0dGluZyB0aGUgYmlnIHBhdGNoLgoKPj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZ3ByaW50ayhYRU5MT0dfV0FSTklORywgIkZhaWxlZCB0byBhbGxvY2F0ZSBzaG1f cnBjIAo+PiBvYmplY3RcbiIpOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdHIgPSAwOwo+ PiAtwqDCoMKgwqDCoMKgwqAgfQo+PiAtwqDCoMKgwqDCoMKgwqAgZWxzZQo+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBwdHIgPSBtZm5fdG9fbWFkZHIoc2htX3JwYy0+Z3Vlc3RfbWZuKTsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHRyID0gfjA7Cj4gCj4gQ2FuIHlvdSBleHBsYWluIHdo eSB5b3UgY2hhbmdlIGZyb20gMCB0byB+MD8KSSBoYWQgdG8gaW50cm9kdWNlIHRoaXMgaW4gdGhl IG9yaWdpbmFsIHBhdGNoLCBhY3R1YWxseS4KCj4+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2UKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHRyID0gdmlydF90b19tYWRkcihzaG1fcnBjLT54ZW5f YXJnKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNldF91c2VyX3JlZyhyZWdzLCAxLCBwdHIgPj4g MzIpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc2V0X3VzZXJfcmVnKHJlZ3MsIDIsIHB0ciAmIDB4 RkZGRkZGRkYpOwo+PiBAQCAtODMzLDcgKzk0OCw3IEBAIHN0YXRpYyBib29sIGhhbmRsZV9ycGMo c3RydWN0IGRvbWFpbl9jdHggKmN0eCwgCj4+IHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQo+ PiDCoMKgwqDCoMKgIGNhc2UgT1BURUVfU01DX1JQQ19GVU5DX0ZPUkVJR05fSU5UUjoKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiDCoMKgwqDCoMKgIGNhc2UgT1BURUVfU01DX1JQQ19G VU5DX0NNRDoKPj4gLcKgwqDCoMKgwqDCoMKgIC8qIFRPRE86IEFkZCBoYW5kbGluZyAqLwo+PiAr wqDCoMKgwqDCoMKgwqAgaGFuZGxlX3JwY19jbWQoY3R4LCByZWdzLCBjYWxsKTsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIGJyZWFrOwo+PiDCoMKgwqDCoMKgIH0KPj4KPiAKPiBDaGVlcnMsCj4gCgot LSAKVm9sb2R5bXlyIEJhYmNodWsKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnBy b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94 ZW4tZGV2ZWw=