From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [RFC] WIP: optee: add OP-TEE mediator Date: Mon, 4 Dec 2017 16:29:10 +0000 Message-ID: <6233ff5e-a745-c755-8cc5-01677b276385@linaro.org> References: <92b77e94-00ff-d81b-e4e0-bb7cf4ce5a55@linaro.org> <1511802097-17286-1-git-send-email-volodymyr_babchuk@epam.com> <79401ae2-a697-948e-3a2b-1c618d32004c@linaro.org> <20171204162437.GB23683@EPUAKYIW2556.kyiv.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.84_2) (envelope-from ) id 1eLtcK-00043y-1u for xen-devel@lists.xenproject.org; Mon, 04 Dec 2017 16:29:16 +0000 Received: by mail-wr0-x241.google.com with SMTP id x49so17966234wrb.13 for ; Mon, 04 Dec 2017 08:29:13 -0800 (PST) In-Reply-To: <20171204162437.GB23683@EPUAKYIW2556.kyiv.epam.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Volodymyr Babchuk Cc: xen-devel , Stefano Stabellini , stuart.yoder@arm.com List-Id: xen-devel@lists.xenproject.org CgpPbiAwNC8xMi8xNyAxNjoyNCwgVm9sb2R5bXlyIEJhYmNodWsgd3JvdGU6Cj4gT24gTW9uLCBE ZWMgMDQsIDIwMTcgYXQgMDI6MzA6MzJQTSArMDAwMCwgSnVsaWVuIEdyYWxsIHdyb3RlOgo+PiBP biAwMS8xMi8xNyAyMjo1OCwgU3RlZmFubyBTdGFiZWxsaW5pIHdyb3RlOgo+Pj4gT24gTW9uLCAy NyBOb3YgMjAxNywgVm9sb2R5bXlyIEJhYmNodWsgd3JvdGU6Cj4+PiA9IFBhZ2UgcGlubmluZyA9 Cj4+Pgo+Pj4gR3Vlc3QgcGFnZXMgcGFzc2VkIHRvIE9QLVRFRSBuZWVkIHRvIGJlIHBpbm5lZCAo b3RoZXJ3aXNlIFhlbiBkb2Vzbid0Cj4+PiBndWFyYW50ZWUgdGhleSdsbCBiZSBhdmFpbGFibGUp LiBJIHRoaW5rIHRoZSByaWdodCBmdW5jdGlvbiB0byBjYWxsIGZvcgo+Pj4gdGhhdCBpcyBnZXRf cGFnZV9mcm9tX2dmbiBvciBnZXRfcGFnZS4KPj4KPj4gTm8gZGlyZWN0IHVzZSBvZiBnZXRfcGFn ZSBwbGVhc2UuIFdlIGFscmVhZHkgaGF2ZSBwbGVudHkgb2YgaGVscGVyIHRvIGRlYWwKPj4gd2l0 aCB0aGUgdHJhbnNsYXRpb24gR0ZOIC0+IFBhZ2Ugb3IgZXZlbiBjb3B5aW5nIGRhdGEuIEkgZG9u J3Qgd2FudCB0byBzZWUKPj4gbW9yZSBvcGVuLWNvZGluZyB2ZXJzaW9uIGJlY2F1c2UgaXQgbWFr ZXMgZGlmZmljdWx0IHRvIGludGVyYWN0aW9uIHdpdGgKPj4gb3RoZXIgZmVhdHVyZXMgc3VjaCBh cyBtZW1hY2Nlc3MgYW5kIFBvRC4KPiBPa2F5LiBDb3VsZCB5b3UgcGxlYXNlIHN1Z2dlc3Qgd2hh dCBBUEkgc2hvdWxkIGJlIHVzZWQgaW4gbXkgY2FzZT8KClBsZWFzZSByZWFkIG15IHByZXZpb3Vz IGUtbWFpbCB1bnRpbCB0aGUgZW5kLiBJIHByb3ZpZGVkIHN1Z2dlc3Rpb25zIGhvdyAKdG8gaGFu ZGxlIHBpbm5pbmcuLi4KCj4gCj4+Pj4gLS0tCj4+Pj4KPj4+PiBBZGQgT1AtVEVFIG1lZGlhdG9y IGFzIGFuIGV4YW1wbGUgaG93IFRFRSBtZWRpYXRvciBmcmFtZXdvcmsKPj4+PiB3b3Jrcy4KPj4+ Pgo+Pj4+IE9QLVRFRSBtZWRpYXRvciBzdXBwb3J0IGFkZHJlc3MgdHJhbnNsYXRpb24gZm9yIERv bVVzLgo+Pj4+IEl0IHRyYWNrcyBleGVjdXRpb24gb2YgU1REIGNhbGxzLCBjb3JyZWN0bHkgaGFu ZGxlcyBtZW1vcnktcmVsYXRlZCBSUEMKPj4+PiByZXF1ZXN0cywgdHJhY2tzIGJ1ZmZlciBhbGxv Y2F0ZWQgZm9yIFJQQ3MuCj4+Pj4KPj4+PiBXaXRoIHRoaXMgcGF0Y2ggT1AtVEVFIHN1Y2Nlc3Nm dWxseSBwYXNzZXMgb3duIHRlc3RzLCB3aGlsZSBjbGllbnQgaXMKPj4+PiBydW5uaW5nIGluIERv bVUuIEN1cnJlbnRseSBpdCBsYWNrcyBzb21lIGNvZGUgZm9yIGV4Y2VwdGlvbmFsIGNhc2VzLAo+ Pj4+IGJlY2F1c2UgdGhpcyBwYXRjaCB3YXMgdXNlZCBtb3N0bHkgdG8gZGVidWcgdmlydHVhbGl6 YXRpb24gaW4gT1AtVEVFLgo+Pj4+IE5ldmVydGhlbGVzcywgaXQgcHJvdmlkZXMgYWxsIGZlYXR1 cmVzIG5lZWRlZCBmb3IgT1AtVEVFIG1lZGlhdGlvbi4KPj4+Pgo+Pj4+IFdBUk5JTkc6IFRoaXMg aXMgYSBkZXZlbG9wbWVudCBwYXRjaCwgaXQgZG9lcyBub3QgY292ZXIgYWxsIGNvcm5lcgo+Pj4+ IGNhc2VzLCBzbywgcGxlYXNlIGRvbid0IHVzZSBpdCBpbiBwcm9kdWN0aW9uLgo+Pj4+Cj4+Pj4g SXQgd2FzIHRlc3RlZCBvbiBSQ0FSIFNhbHZhdG9yLU0zIGJvYXJkLgo+Pj4+Cj4+Pj4gU2lnbmVk LW9mZi1ieTogVm9sb2R5bXlyIEJhYmNodWsgPHZvbG9keW15cl9iYWJjaHVrQGVwYW0uY29tPgo+ Pj4+IC0tLQo+Pj4+ICAgeGVuL2FyY2gvYXJtL3RlZS9LY29uZmlnICAgICB8ICAgNCArCj4+Pj4g ICB4ZW4vYXJjaC9hcm0vdGVlL01ha2VmaWxlICAgIHwgICAxICsKPj4+PiAgIHhlbi9hcmNoL2Fy bS90ZWUvb3B0ZWUuYyAgICAgfCA3NjUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+Pj4+ICAgeGVuL2FyY2gvYXJtL3RlZS9vcHRlZV9zbWMuaCB8ICA1MCArKysK Pj4+PiAgIDQgZmlsZXMgY2hhbmdlZCwgODIwIGluc2VydGlvbnMoKykKPj4+PiAgIGNyZWF0ZSBt b2RlIDEwMDY0NCB4ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMKPj4+Pgo+Pj4+IGRpZmYgLS1naXQg YS94ZW4vYXJjaC9hcm0vdGVlL0tjb25maWcgYi94ZW4vYXJjaC9hcm0vdGVlL0tjb25maWcKPj4+ PiBpbmRleCBlNjlkZTI5Li43YzZiNWM2IDEwMDY0NAo+Pj4+IC0tLSBhL3hlbi9hcmNoL2FybS90 ZWUvS2NvbmZpZwo+Pj4+ICsrKyBiL3hlbi9hcmNoL2FybS90ZWUvS2NvbmZpZwo+Pj4+IEBAIC0w LDAgKzEsNCBAQAo+Pj4+ICtjb25maWcgQVJNX09QVEVFCj4+Pj4gKwlib29sICJFbmFibGUgT1At VEVFIG1lZGlhdG9yIgo+Pj4+ICsJZGVmYXVsdCBuCj4+Pj4gKwlkZXBlbmRzIG9uIEFSTV9URUUK Pj4+PiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3RlZS9NYWtlZmlsZSBiL3hlbi9hcmNoL2Fy bS90ZWUvTWFrZWZpbGUKPj4+PiBpbmRleCBjNTRkNDc5Li45ZDkzYjQyIDEwMDY0NAo+Pj4+IC0t LSBhL3hlbi9hcmNoL2FybS90ZWUvTWFrZWZpbGUKPj4+PiArKysgYi94ZW4vYXJjaC9hcm0vdGVl L01ha2VmaWxlCj4+Pj4gQEAgLTEgKzEsMiBAQAo+Pj4+ICAgb2JqLXkgKz0gdGVlLm8KPj4+PiAr b2JqLSQoQ09ORklHX0FSTV9PUFRFRSkgKz0gb3B0ZWUubwo+Pj4+IGRpZmYgLS1naXQgYS94ZW4v YXJjaC9hcm0vdGVlL29wdGVlLmMgYi94ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMKPj4+PiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+Pj4+IGluZGV4IDAwMDAwMDAuLjU5YzM2MDAKPj4+PiAtLS0gL2Rl di9udWxsCj4+Pj4gKysrIGIveGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5jCj4+Pj4gQEAgLTAsMCAr MSw3NjUgQEAKPj4+PiArLyoKPj4+PiArICogeGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5jCj4+Pj4g KyAqCj4+Pj4gKyAqIE9QLVRFRSBtZWRpYXRvcgo+Pj4+ICsgKgo+Pj4+ICsgKiBWb2xvZHlteXIg QmFiY2h1ayA8dm9sb2R5bXlyX2JhYmNodWtAZXBhbS5jb20+Cj4+Pj4gKyAqIENvcHlyaWdodCAo YykgMjAxNyBFUEFNIFN5c3RlbXMuCj4+Pj4gKyAqCj4+Pj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4+Pj4g KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFzCj4+Pj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgo+Pj4+ICsgKgo+Pj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4+PiArICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4+PiArICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQo+Pj4+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz Lgo+Pj4+ICsgKi8KPj4+PiArCj4+Pj4gKyNpbmNsdWRlIDx4ZW4vZG9tYWluX3BhZ2UuaD4KPj4+ PiArI2luY2x1ZGUgPHhlbi90eXBlcy5oPgo+Pj4+ICsjaW5jbHVkZSA8eGVuL3NjaGVkLmg+Cj4+ Pj4gKwo+Pj4+ICsjaW5jbHVkZSA8YXNtL3AybS5oPgo+Pj4+ICsjaW5jbHVkZSA8YXNtL3RlZS5o Pgo+Pj4+ICsKPj4+PiArI2luY2x1ZGUgIm9wdGVlX21zZy5oIgo+Pj4+ICsjaW5jbHVkZSAib3B0 ZWVfc21jLmgiCj4+Pj4gKwo+Pj4+ICsvKgo+Pj4+ICsgKiBHbG9iYWwgVE9ETzoKPj4+PiArICog IDEuIENyZWF0ZSBwZXItZG9tYWluIGNvbnRleHQsIHdoZXJlIGNhbGwgYW5kIHNobSB3aWxsIGJl IHN0b3JlZAo+Pj4+ICsgKiAgMi4gUGluIHBhZ2VzIHNoYXJlZCBiZXR3ZWVuIE9QLVRFRSBhbmQg Z3Vlc3QKPj4+PiArICovCj4+Pj4gKy8qCj4+Pj4gKyAqIE9QLVRFRSB2aW9sYXRlcyBTTUNDQyB3 aGVuIGl0IGRlZmluZXMgb3duIFVJRC4gU28gd2UgbmVlZAo+Pj4+ICsgKiB0byBwbGFjZSBieXRl cyBpbiBjb3JyZWN0IG9yZGVyLgo+Pj4+ICsgKi8KPj4+PiArI2RlZmluZSBPUFRFRV9VSUQgICh4 ZW5fdXVpZF90KXt7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4+Pj4gKyAgICAodWludDhfdCkoT1BURUVfTVNHX1VJRF8wID4+ICAwKSwgKHVpbnQ4X3Qp KE9QVEVFX01TR19VSURfMCA+PiAgOCksICAgICAgICAgXAo+Pj4+ICsgICAgKHVpbnQ4X3QpKE9Q VEVFX01TR19VSURfMCA+PiAxNiksICh1aW50OF90KShPUFRFRV9NU0dfVUlEXzAgPj4gMjQpLCAg ICAgICAgIFwKPj4+PiArICAgICh1aW50OF90KShPUFRFRV9NU0dfVUlEXzEgPj4gIDApLCAodWlu dDhfdCkoT1BURUVfTVNHX1VJRF8xID4+ICA4KSwgICAgICAgICBcCj4+Pj4gKyAgICAodWludDhf dCkoT1BURUVfTVNHX1VJRF8xID4+IDE2KSwgKHVpbnQ4X3QpKE9QVEVFX01TR19VSURfMSA+PiAy NCksICAgICAgICAgXAo+Pj4+ICsgICAgKHVpbnQ4X3QpKE9QVEVFX01TR19VSURfMiA+PiAgMCks ICh1aW50OF90KShPUFRFRV9NU0dfVUlEXzIgPj4gIDgpLCAgICAgICAgIFwKPj4+PiArICAgICh1 aW50OF90KShPUFRFRV9NU0dfVUlEXzIgPj4gMTYpLCAodWludDhfdCkoT1BURUVfTVNHX1VJRF8y ID4+IDI0KSwgICAgICAgICBcCj4+Pj4gKyAgICAodWludDhfdCkoT1BURUVfTVNHX1VJRF8zID4+ ICAwKSwgKHVpbnQ4X3QpKE9QVEVFX01TR19VSURfMyA+PiAgOCksICAgICAgICAgXAo+Pj4+ICsg ICAgKHVpbnQ4X3QpKE9QVEVFX01TR19VSURfMyA+PiAxNiksICh1aW50OF90KShPUFRFRV9NU0df VUlEXzMgPj4gMjQpLCAgICAgICAgIFwKPj4+PiArICAgIH19Cj4+Pj4gKwo+Pj4+ICsjZGVmaW5l IE1BWF9OT05DT05USUdfRU5UUklFUyAgIDgKPj4+PiArCj4+Pj4gKy8qCj4+Pj4gKyAqIENhbGwg Y29udGV4dC4gT1AtVEVFIGNhbiBpc3N1ZSBtdWxpdHBsZSBSUEMgcmV0dXJucyBkdXJpbmcgb25l IGNhbGwuCj4+Pj4gKyAqIFdlIG5lZWQgdG8gcHJlc2VydmUgY29udGV4dCBkdXJpbmcgdGhlbS4K Pj4+PiArICovCj4+Pj4gK3N0cnVjdCBzdGRfY2FsbF9jdHggewo+Pj4+ICsgICAgc3RydWN0IGxp c3RfaGVhZCBsaXN0Owo+Pj4+ICsgICAgc3RydWN0IG9wdGVlX21zZ19hcmcgKmd1ZXN0X2FyZzsK Pj4+PiArICAgIHN0cnVjdCBvcHRlZV9tc2dfYXJnICp4ZW5fYXJnOwo+Pj4+ICsgICAgdm9pZCAq bm9uX2NvbnRpZ1tNQVhfTk9OQ09OVElHX0VOVFJJRVNdOwo+Pj4+ICsgICAgaW50IG5vbl9jb250 aWdfb3JkZXJbTUFYX05PTkNPTlRJR19FTlRSSUVTXTsKPj4+PiArICAgIGludCBvcHRlZV90aHJl YWRfaWQ7Cj4+Pj4gKyAgICBpbnQgcnBjX29wOwo+Pj4+ICsgICAgZG9taWRfdCBkb21pZDsKPj4+ PiArfTsKPj4+PiArc3RhdGljIExJU1RfSEVBRChjYWxsX2N0eF9saXN0KTsKPj4+PiArc3RhdGlj IERFRklORV9TUElOTE9DSyhjYWxsX2N0eF9saXN0X2xvY2spOwo+Pj4+ICsKPj4+PiArLyoKPj4+ PiArICogQ29tbWFuZCBidWZmZXIgc2hhcmVkIGJldHdlZW4gT1AtVEVFIGFuZCBndWVzdC4KPj4+ PiArICogV2FybmluZyEgSW4gdGhlIHByb3BlciBpbXBsZW1lbnRhdGlvbiB0aGlzIFNITSBidWZm ZXIgKnByb2JhYmx5KiBzaG91bGQKPj4+PiArICogYnkgc2hhZG93ZWQgYnkgWEVOLgo+Pj4+ICsg KiBUT0RPOiBSZWNvbnNpZGVyIHRoaXMuCj4+Pj4gKyAqLwo+Pj4+ICtzdHJ1Y3Qgc2htIHsKPj4+ PiArICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPj4+PiArICAgIHN0cnVjdCBvcHRlZV9tc2df YXJnICpndWVzdF9hcmc7Cj4+Pj4gKyAgICBzdHJ1Y3QgcGFnZSAqZ3Vlc3RfcGFnZTsKPj4+PiAr ICAgIG1mbl90IGd1ZXN0X21mbjsKPj4+PiArICAgIHVpbnQ2NF90IGNvb2tpZTsKPj4+PiArICAg IGRvbWlkX3QgZG9taWQ7Cj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgTElTVF9IRUFEKHNo bV9saXN0KTsKPj4+PiArc3RhdGljIERFRklORV9TUElOTE9DSyhzaG1fbGlzdF9sb2NrKTsKPj4+ PiArCj4+Pj4gK3N0YXRpYyBpbnQgb3B0ZWVfaW5pdCh2b2lkKQo+Pj4+ICt7Cj4+Pj4gKyAgICBw cmludGsoIk9QLVRFRSBtZWRpYXRvciBpbml0IGRvbmVcbiIpOwo+Pj4+ICsgICAgcmV0dXJuIDA7 Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyB2b2lkIG9wdGVlX2RvbWFpbl9jcmVhdGUoc3Ry dWN0IGRvbWFpbiAqZCkKPj4+PiArewo+Pj4+ICsgICAgcmVnaXN0ZXJfdCByZXNwWzRdOwo+Pj4+ ICsgICAgY2FsbF9zbWNjY19zbWMoT1BURUVfU01DX1ZNX0NSRUFURUQsCj4+Pj4gKyAgICAgICAg ICAgICAgICAgICBkLT5kb21haW5faWQgKyAxLCAwLCAwLCAwLCAwLCAwLCAwLCByZXNwKTsKPj4+ PiArICAgIGlmICggcmVzcFswXSAhPSBPUFRFRV9TTUNfUkVUVVJOX09LICkKPj4+PiArICAgICAg ICBncHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiT1AtVEVFIGRvbid0IHdhbnQgdG8gc3VwcG9ydCBk b21haW46ICVkXG4iLAo+Pj4+ICsgICAgICAgICAgICAgICAgKHVpbnQzMl90KXJlc3BbMF0pOwo+ Pj4+ICsgICAgLyogVE9ETzogQ2hhbmdlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHRvIGJlIGFibGUg dG8gcmV0dW4gZXJyb3IgKi8KPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIHZvaWQgb3B0ZWVf ZG9tYWluX2Rlc3Ryb3koc3RydWN0IGRvbWFpbiAqZCkKPj4+PiArewo+Pj4+ICsgICAgcmVnaXN0 ZXJfdCByZXNwWzRdOwo+Pj4+ICsgICAgY2FsbF9zbWNjY19zbWMoT1BURUVfU01DX1ZNX0RFU1RS T1lFRCwKPj4+PiArICAgICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCArIDEsIDAsIDAsIDAs IDAsIDAsIDAsIHJlc3ApOwo+Pj4+ICsgICAgLyogVE9ETzogQ2xlYW4gY2FsbCBjb250ZXh0cyBh bmQgU0hNcyBhc3NvY2lhdGVkIHdpdGggZG9tYWluICovCj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0 YXRpYyBib29sIGZvcndhcmRfY2FsbChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4+PiAr ewo+Pj4+ICsgICAgcmVnaXN0ZXJfdCByZXNwWzRdOwo+Pj4+ICsKPj4+PiArICAgIC8qIFRPRE86 IFVzZSBzZXBhcmF0ZSByZWdpc3RlcnMgc2V0IHRvIHByZXZlbnQgbGVha2FnZSB0byBndWVzdCAq Lwo+Pj4+ICsgICAgY2FsbF9zbWNjY19zbWMoZ2V0X3VzZXJfcmVnKHJlZ3MsIDApLAo+Pj4+ICsg ICAgICAgICAgICAgICAgICAgZ2V0X3VzZXJfcmVnKHJlZ3MsIDEpLAo+Pj4+ICsgICAgICAgICAg ICAgICAgICAgZ2V0X3VzZXJfcmVnKHJlZ3MsIDIpLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAg Z2V0X3VzZXJfcmVnKHJlZ3MsIDMpLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgZ2V0X3VzZXJf cmVnKHJlZ3MsIDQpLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgZ2V0X3VzZXJfcmVnKHJlZ3Ms IDUpLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgZ2V0X3VzZXJfcmVnKHJlZ3MsIDYpLAo+Pj4+ ICsgICAgICAgICAgICAgICAgICAgLyogVk0gaWQgMCBpcyByZXNlcnZlZCBmb3IgaHlwZXJ2aXNv ciBpdHNlbGYgKi8KPj4+PiArICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPmRvbWFpbi0+ZG9t YWluX2lkICsgMSwKPj4+Cj4+PiBUaGlzIGRvZXNuJ3QgbG9vayBsaWtlIGl0IHdvdWxkIHdyYXAg YXJvdW5kIHNhZmVseS4KPj4KPj4gV2VsbCBvcmRpbmFyeSBkb21haW4gd2lsbCBhbHdheXMgaGF2 ZSBhIGRvbWFpbiBJRCA8IERPTUlEX0ZJUlNUX1JFU0VSVkVSCj4+ICgweDdGRjApLiBTbyB0aGVy ZSBhcmUgbm8gaXNzdWUgaGVyZS4gQWx0aG91Z2gsIHdlIG1heSB3YW50IGEgQlVJTERfQlVHX09O KCkKPj4gdG8gY2F0Y2ggY2hhbmdlIG9mIERPTUlEX0ZJUlNUX1JFU0VSVkVELgo+Pgo+Pj4KPj4+ Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICByZXNwKTsKPj4+PiArCj4+Pj4gKyAgICBzZXRfdXNl cl9yZWcocmVncywgMCwgcmVzcFswXSk7Cj4+Pj4gKyAgICBzZXRfdXNlcl9yZWcocmVncywgMSwg cmVzcFsxXSk7Cj4+Pj4gKyAgICBzZXRfdXNlcl9yZWcocmVncywgMiwgcmVzcFsyXSk7Cj4+Pj4g KyAgICBzZXRfdXNlcl9yZWcocmVncywgMywgcmVzcFszXSk7Cj4+Pj4gKwo+Pj4+ICsgICAgcmV0 dXJuIHRydWU7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBzdHJ1Y3Qgc3RkX2NhbGxfY3R4 ICphbGxvY2F0ZV9zdGRfY2FsbF9jdHgodm9pZCkKPj4+PiArewo+Pj4+ICsgICAgc3RydWN0IHN0 ZF9jYWxsX2N0eCAqcmV0Owo+Pj4+ICsKPj4+PiArICAgIHJldCA9IHh6YWxsb2Moc3RydWN0IHN0 ZF9jYWxsX2N0eCk7Cj4+Pj4gKyAgICBpZiAoICFyZXQgKQo+Pj4+ICsgICAgICAgIHJldHVybiBO VUxMOwo+Pj4+ICsKPj4+PiArICAgIHJldC0+b3B0ZWVfdGhyZWFkX2lkID0gLTE7Cj4+Cj4+IFlv dSBzZXQgaXQgdG8gLTEuIEJ1dCBuby1vbmUgaXMgY2hlY2tpbmcgdGhhdCB2YWx1ZS4gU28gd2hh dCBpcyB0aGUgcHVycG9zZQo+PiBvZiBzZXR0aW5nIHRvIC0xIGFuZCBub3QgMD8KPj4KPj4+PiAr ICAgIHJldC0+ZG9taWQgPSAtMTsKPj4KPj4gUGxlYXNlIHVzZSBET01JRF9JTlZBTElEIHJhdGhl ciB0aGFuIC0xLiBZb3UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBsYXR0ZXIKPj4gd2lsbCBiZSB1 c2VkIGluIHRoZSBmdXR1cmUgZm9yIGEgZG9tYWluLgo+Pgo+Pj4+ICsKPj4+PiArICAgIHNwaW5f bG9jaygmY2FsbF9jdHhfbGlzdF9sb2NrKTsKPj4+PiArICAgIGxpc3RfYWRkX3RhaWwoJnJldC0+ bGlzdCwgJmNhbGxfY3R4X2xpc3QpOwo+Pj4+ICsgICAgc3Bpbl91bmxvY2soJmNhbGxfY3R4X2xp c3RfbG9jayk7Cj4+Pj4gKwo+Pj4+ICsgICAgcmV0dXJuIHJldDsKPj4+PiArfQo+Pj4+ICsKPj4+ PiArc3RhdGljIHZvaWQgZnJlZV9zdGRfY2FsbF9jdHgoc3RydWN0IHN0ZF9jYWxsX2N0eCAqY3R4 KQo+Pj4+ICt7Cj4+Pj4gKyAgICBzcGluX2xvY2soJmNhbGxfY3R4X2xpc3RfbG9jayk7Cj4+Pj4g KyAgICBsaXN0X2RlbCgmY3R4LT5saXN0KTsKPj4+PiArICAgIHNwaW5fdW5sb2NrKCZjYWxsX2N0 eF9saXN0X2xvY2spOwo+Pj4+ICsKPj4+PiArICAgIGlmIChjdHgtPnhlbl9hcmcpCj4+Pj4gKyAg ICAgICAgZnJlZV94ZW5oZWFwX3BhZ2UoY3R4LT54ZW5fYXJnKTsKPj4+PiArCj4+Pj4gKyAgICBp ZiAoY3R4LT5ndWVzdF9hcmcpCj4+Pj4gKyAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UoY3R4LT5n dWVzdF9hcmcpOwo+Pj4+ICsKPj4+PiArICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX05PTkNP TlRJR19FTlRSSUVTOyBpKyspIHsKPj4+PiArICAgICAgICBpZiAoY3R4LT5ub25fY29udGlnW2ld KQo+Pj4+ICsgICAgICAgICAgICBmcmVlX3hlbmhlYXBfcGFnZXMoY3R4LT5ub25fY29udGlnW2ld LCBjdHgtPm5vbl9jb250aWdfb3JkZXJbaV0pOwo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiArICAg IHhmcmVlKGN0eCk7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBzdHJ1Y3Qgc3RkX2NhbGxf Y3R4ICpmaW5kX2N0eChpbnQgdGhyZWFkX2lkLCBkb21pZF90IGRvbWlkKQo+Pj4+ICt7Cj4+Pj4g KyAgICBzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICpjdHg7Cj4+Pj4gKwo+Pj4+ICsgICAgc3Bpbl9sb2Nr KCZjYWxsX2N0eF9saXN0X2xvY2spOwo+Pj4+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSggY3R4 LCAmY2FsbF9jdHhfbGlzdCwgbGlzdCApCj4+Pj4gKyAgICB7Cj4+Pj4gKyAgICAgICAgaWYgIChj dHgtPmRvbWlkID09IGRvbWlkICYmIGN0eC0+b3B0ZWVfdGhyZWFkX2lkID09IHRocmVhZF9pZCAp Cj4+Pj4gKyAgICAgICAgewo+Pj4+ICsgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJmNhbGxf Y3R4X2xpc3RfbG9jayk7Cj4+Pj4gKyAgICAgICAgICAgICAgICByZXR1cm4gY3R4Owo+Pj4+ICsg ICAgICAgIH0KPj4+PiArICAgIH0KPj4+PiArICAgIHNwaW5fdW5sb2NrKCZjYWxsX2N0eF9saXN0 X2xvY2spOwo+Pj4+ICsKPj4+PiArICAgIHJldHVybiBOVUxMOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ ICsjZGVmaW5lIFBBR0VMSVNUX0VOVFJJRVNfUEVSX1BBR0UgICAgICAgICAgICAgICAgICAgICAg IFwKPj4+PiArICAgICgoT1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUgLyBzaXplb2YodTY0 KSkgLSAxKQo+Pj4+ICsKPj4+PiArc3RhdGljIHNpemVfdCBnZXRfcGFnZXNfbGlzdF9zaXplKHNp emVfdCBudW1fZW50cmllcykKPj4+PiArewo+Pj4+ICsgICAgaW50IHBhZ2VzID0gRElWX1JPVU5E X1VQKG51bV9lbnRyaWVzLCBQQUdFTElTVF9FTlRSSUVTX1BFUl9QQUdFKTsKPj4+PiArCj4+Pj4g KyAgICByZXR1cm4gcGFnZXMgKiBPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRTsKPj4+PiAr fQo+Pj4+ICsKPj4+PiArc3RhdGljIG1mbl90IGxvb2t1cF9ndWVzdF9yYW1fYWRkcihwYWRkcl90 IGdhZGRyKQo+Pj4+ICt7Cj4+Pj4gKyAgICBtZm5fdCBtZm47Cj4+Pj4gKyAgICBnZm5fdCBnZm47 Cj4+Pj4gKyAgICBwMm1fdHlwZV90IHQ7Cj4+Pj4gKyAgICBnZm4gPSBnYWRkcl90b19nZm4oZ2Fk ZHIpOwo+Pj4+ICsgICAgbWZuID0gcDJtX2xvb2t1cChjdXJyZW50LT5kb21haW4sIGdmbiwgJnQp Owo+Pj4+ICsgICAgaWYgKCB0ICE9IHAybV9yYW1fcncgfHwgbWZuX2VxKG1mbiwgSU5WQUxJRF9N Rk4pICkgewo+Pj4+ICsgICAgICAgIGdwcmludGsoWEVOTE9HX0lORk8sICJEb21haW4gdHJpZXMg dG8gdXNlIGludmFsaWQgZ2ZuXG4iKTsKPj4+PiArICAgICAgICByZXR1cm4gSU5WQUxJRF9NRk47 Cj4+Pj4gKyAgICB9Cj4+Pj4gKyAgICByZXR1cm4gbWZuOwo+Pj4+ICt9ID4+ICsKPj4+PiArc3Rh dGljIHN0cnVjdCBzaG0gKmFsbG9jYXRlX2FuZF9tYXBfc2htKHBhZGRyX3QgZ2FkZHIsIHVpbnQ2 NF90IGNvb2tpZSkKPj4+PiArewo+Pj4+ICsgICAgc3RydWN0IHNobSAqcmV0Owo+Pj4+ICsKPj4+ PiArICAgIHJldCA9IHh6YWxsb2Moc3RydWN0IHNobSk7Cj4+Pj4gKyAgICBpZiAoICFyZXQgKQo+ Pj4+ICsgICAgICAgIHJldHVybiBOVUxMOwo+Pj4+ICsKPj4+PiArICAgIHJldC0+Z3Vlc3RfbWZu ID0gbG9va3VwX2d1ZXN0X3JhbV9hZGRyKGdhZGRyKTsKPj4+PiArCj4+Pj4gKyAgICBpZiAoIG1m bl9lcShyZXQtPmd1ZXN0X21mbiwgSU5WQUxJRF9NRk4pICkKPj4+PiArICAgIHsKPj4+PiArICAg ICAgICB4ZnJlZShyZXQpOwo+Pj4+ICsgICAgICAgIHJldHVybiBOVUxMOwo+Pj4+ICsgICAgfQo+ Pj4+ICsKPj4+PiArICAgIHJldC0+Z3Vlc3RfYXJnID0gbWFwX2RvbWFpbl9wYWdlKHJldC0+Z3Vl c3RfbWZuKTsKPj4KPj4gbWFwX2RvbWFpbl9wYWdlKCkgY2FuIG5ldmVyIGZhaWwsIGJ1dCB5b3Ug dXNlIGl0IHRoZSB3cm9uZyB3YXkuIFRoZSBwdXJwb3NlCj4+IG9mIHRoaXMgZnVuY3Rpb24gaXMg dG8gbWFwIHRoZSBtZW1vcnkgZm9yIGEgdmVyeSBzaG9ydCBsaWZldGltZSwgYW5kIG9ubHkgYQo+ PiB0aGUgY3VycmVudCBwQ1BVICh3aGVuIHRoZSBhbGwgdGhlIFJBTSBpcyBub3QgYWx3YXlzIG1h cHBlZCkuIEhlcmUsIHlvdSBzZWVtCj4+IHRvIHVzZSBhY3Jvc3MgU01DIGNhbGwgKGUuZyBmb3Ig UlBDKS4KPj4KPj4gTG9va2luZyBhdCB0aGUgdXNhZ2UgaW4gdGhlIGNvZGUsIHlvdSBvbmx5IG1h cCBpdCBpbiBvcmRlciB0byBjb3B5IHRoZQo+PiBhcmd1bWVudHMgdG8vZnJvbSB0aGUgZ3Vlc3Qu Cj4+Cj4+IG1hcF9kb21haW5fcGFnZSgpIHdpbGwgbm90IHRha2UgYSByZWZlcmVuY2Ugb24gdGhl IHBhZ2UgYW5kIHByZXZlbnQgdGhlIHBhZ2UKPj4gdG8gZGlzYXBwZWFyIGZyb20gdGhlIGd1ZXN0 LiBTbyB0aGlzIGJpdHMgaXMgdW5zYWZlLgo+Pgo+PiBGb3IgdGhlIGFyZ3VtZW50cywgdGhlIGJl c3QgaXMgdG8gdXNlIGd1ZXN0IGNvcHkgaGVscGVycyAoc2VlCj4+IGFjY2Vzc19ndWVzdF9tZW1v cnlfYnlfaXBhKS4gWW91IG1pZ2h0IHdhbnQgdG8gbG9vayBhdCBbMV0gYXMgaXQgaW1wcm92ZXMK Pj4gdGhlIHVzZSBvZiBhY2Nlc3NfZ3Vlc3RfbWVtb3J5X2J5X2lwYS4KPj4KPj4+PiArICAgIGlm ICggIXJldC0+Z3Vlc3RfYXJnICkKPj4+PiArICAgIHsKPj4+PiArICAgICAgICBncHJpbnRrKFhF TkxPR19JTkZPLCAiQ291bGQgbm90IG1hcCBkb21haW4gcGFnZVxuIik7Cj4+Pj4gKyAgICAgICAg eGZyZWUocmV0KTsKPj4+PiArICAgICAgICByZXR1cm4gTlVMTDsKPj4+PiArICAgIH0KPj4+PiAr ICAgIHJldC0+Y29va2llID0gY29va2llOwo+Pj4+ICsgICAgcmV0LT5kb21pZCA9IGN1cnJlbnQt PmRvbWFpbi0+ZG9tYWluX2lkOwo+Pj4+ICsKPj4+PiArICAgIHNwaW5fbG9jaygmc2htX2xpc3Rf bG9jayk7Cj4+Pj4gKyAgICBsaXN0X2FkZF90YWlsKCZyZXQtPmxpc3QsICZzaG1fbGlzdCk7Cj4+ Pj4gKyAgICBzcGluX3VubG9jaygmc2htX2xpc3RfbG9jayk7Cj4+Pj4gKyAgICByZXR1cm4gcmV0 Owo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCBmcmVlX3NobSh1aW50NjRfdCBjb29r aWUsIGRvbWlkX3QgZG9taWQpCj4+Pj4gK3sKPj4+PiArICAgIHN0cnVjdCBzaG0gKnNobSwgKmZv dW5kID0gTlVMTDsKPj4+PiArICAgIHNwaW5fbG9jaygmc2htX2xpc3RfbG9jayk7Cj4+Pj4gKwo+ Pj4+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSggc2htLCAmc2htX2xpc3QsIGxpc3QgKQo+Pj4+ ICsgICAgewo+Pj4+ICsgICAgICAgIGlmICAoc2htLT5kb21pZCA9PSBkb21pZCAmJiBzaG0tPmNv b2tpZSA9PSBjb29raWUgKQo+Pj4+ICsgICAgICAgIHsKPj4+PiArICAgICAgICAgICAgZm91bmQg PSBzaG07Cj4+Pj4gKyAgICAgICAgICAgIGxpc3RfZGVsKCZmb3VuZC0+bGlzdCk7Cj4+Pj4gKyAg ICAgICAgICAgIGJyZWFrOwo+Pj4+ICsgICAgICAgIH0KPj4+PiArICAgIH0KPj4+PiArICAgIHNw aW5fdW5sb2NrKCZzaG1fbGlzdF9sb2NrKTsKPj4+PiArCj4+Pj4gKyAgICBpZiAoICFmb3VuZCAp IHsKPj4+PiArICAgICAgICByZXR1cm47Cj4+Pj4gKyAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgaWYg KCBmb3VuZC0+Z3Vlc3RfYXJnICkKPj4+PiArICAgICAgICB1bm1hcF9kb21haW5fcGFnZShmb3Vu ZC0+Z3Vlc3RfYXJnKTsKPj4+PiArCj4+Pj4gKyAgICB4ZnJlZShmb3VuZCk7Cj4+Pj4gK30KPj4+ PiArCj4+Pj4gK3N0YXRpYyBzdHJ1Y3Qgc2htICpmaW5kX3NobSh1aW50NjRfdCBjb29raWUsIGRv bWlkX3QgZG9taWQpCj4+Pj4gK3sKPj4+PiArICAgIHN0cnVjdCBzaG0gKnNobTsKPj4+PiArCj4+ Pj4gKyAgICBzcGluX2xvY2soJnNobV9saXN0X2xvY2spOwo+Pj4+ICsgICAgbGlzdF9mb3JfZWFj aF9lbnRyeSggc2htLCAmc2htX2xpc3QsIGxpc3QgKQo+Pj4+ICsgICAgewo+Pj4+ICsgICAgICAg IGlmICggc2htLT5kb21pZCA9PSBkb21pZCAmJiBzaG0tPmNvb2tpZSA9PSBjb29raWUgKQo+Pj4+ ICsgICAgICAgIHsKPj4+PiArICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZzaG1fbGlzdF9s b2NrKTsKPj4+PiArICAgICAgICAgICAgICAgIHJldHVybiBzaG07Cj4+Pj4gKyAgICAgICAgfQo+ Pj4+ICsgICAgfQo+Pj4+ICsgICAgc3Bpbl91bmxvY2soJnNobV9saXN0X2xvY2spOwo+Pj4+ICsK Pj4+PiArICAgIHJldHVybiBOVUxMOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgYm9vbCB0 cmFuc2xhdGVfbm9uY29udGlnKHN0cnVjdCBzdGRfY2FsbF9jdHggKmN0eCwKPj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFtICpwYXJhbSwK Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWR4KQo+Pj4+ICt7Cj4+ Pj4gKyAgICAvKgo+Pj4+ICsgICAgICogUmVmZXIgdG8gT1BURUVfTVNHX0FUVFJfTk9OQ09OVElH IGRlc2NyaXB0aW9uIGluIG9wdGVlX21zZy5oIGZvciBkZXRhaWxzLgo+Pj4+ICsgICAgICoKPj4+ PiArICAgICAqIFdBUk5JTkc6IFRoaXMgaXMgdGVzdCBjb2RlLiBJdCB3b3JrcyBvbmx5IHdpdGgg eGVuIHBhZ2Ugc2l6ZSA9PSA0MDk2Cj4+Cj4+IFRoYXQncyBhIGNhbGwgZm9yIGEgQlVJTERfQlVH X09OKCkuCj4+Cj4+Pj4gKyAgICAgKi8KPj4+PiArICAgIHVpbnQ2NF90IHNpemU7Cj4+Pj4gKyAg ICBpbnQgcGFnZV9vZmZzZXQ7Cj4+Pj4gKyAgICBpbnQgbnVtX3BhZ2VzOwo+Pj4+ICsgICAgaW50 IG9yZGVyOwo+Pj4+ICsgICAgaW50IGVudHJpZXNfb25fcGFnZSA9IDA7Cj4+Pj4gKyAgICBwYWRk cl90IGdhZGRyOwo+Pj4+ICsgICAgbWZuX3QgZ3Vlc3RfbWZuOwo+Pj4+ICsgICAgc3RydWN0IHsK Pj4+PiArICAgICAgICB1aW50NjRfdCBwYWdlc19saXN0W1BBR0VMSVNUX0VOVFJJRVNfUEVSX1BB R0VdOwo+Pj4+ICsgICAgICAgIHVpbnQ2NF90IG5leHRfcGFnZV9kYXRhOwo+Pj4+ICsgICAgfSAq cGFnZXNfZGF0YV9ndWVzdCwgKnBhZ2VzX2RhdGFfeGVuLCAqcGFnZXNfZGF0YV94ZW5fc3RhcnQ7 Cj4+Pj4gKwo+Pj4+ICsgICAgcGFnZV9vZmZzZXQgPSBwYXJhbS0+dS50bWVtLmJ1Zl9wdHIgJiAo T1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUgLSAxKTsKPj4+PiArCj4+Pj4gKyAgICBzaXpl ID0gUk9VTkRVUChwYXJhbS0+dS50bWVtLnNpemUgKyBwYWdlX29mZnNldCwKPj4+PiArICAgICAg ICAgICAgICAgICAgIE9QVEVFX01TR19OT05DT05USUdfUEFHRV9TSVpFKTsKPj4+PiArCj4+Pj4g KyAgICBudW1fcGFnZXMgPSBESVZfUk9VTkRfVVAoc2l6ZSwgT1BURUVfTVNHX05PTkNPTlRJR19Q QUdFX1NJWkUpOwo+Pgo+PiBXaGF0IGlzIHRoZSBsaW1pdCBmb3IgbnVtX3BhZ2VzPyBJIGNhbid0 IHNlZSBhbnl0aGluZyBpbiB0aGUgY29kZSB0aGF0Cj4+IHByZXZlbnQgYW55IGhpZ2ggbnVtYmVy IGFuZCBtaWdodCBleGhhdXN0IFhlbiBtZW1vcnkuCj4+Cj4+Pj4gKwo+Pj4+ICsgICAgb3JkZXIg PSBnZXRfb3JkZXJfZnJvbV9ieXRlcyhnZXRfcGFnZXNfbGlzdF9zaXplKG51bV9wYWdlcykpOwo+ Pj4+ICsKPj4+PiArICAgIHBhZ2VzX2RhdGFfeGVuX3N0YXJ0ID0gYWxsb2NfeGVuaGVhcF9wYWdl cyhvcmRlciwgMCk7Cj4+Pj4gKyAgICBpZiAoIXBhZ2VzX2RhdGFfeGVuX3N0YXJ0KQo+Pj4+ICsg ICAgICAgIHJldHVybiBmYWxzZTsKPj4+PiArCj4+Pj4gKyAgICBnYWRkciA9IHBhcmFtLT51LnRt ZW0uYnVmX3B0ciAmIH4oT1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUgLSAxKTsKPj4+PiAr ICAgIGd1ZXN0X21mbiA9IGxvb2t1cF9ndWVzdF9yYW1fYWRkcihnYWRkcik7Cj4+Pj4gKyAgICBp ZiAoIG1mbl9lcShndWVzdF9tZm4sIElOVkFMSURfTUZOKSApCj4+Pj4gKyAgICAgICAgZ290byBl cnJfZnJlZTsKPj4+PiArCj4+Pj4gKyAgICBwYWdlc19kYXRhX2d1ZXN0ID0gbWFwX2RvbWFpbl9w YWdlKGd1ZXN0X21mbik7Cj4+Cj4+IFNpbWlsYXJseSBoZXJlLCB5b3UgbWF5IHdhbnQgdG8gdXNl IGFjY2Vzc19ndWVzdF9ieV9pcGEuIFRoaXMgd2lsbCBkbyBhbGwKPj4gdGhlIHNhZmV0eSBjaGVj ayBmb3IgY29weSBmcm9tIGd1ZXN0IG1lbW9yeS4KPj4KPj4gRnVydGhlcm1vcmUsIEkgdGhpbmsg dGhpcyBpcyBnb2luZyB0byBzaW1wbGlmeSBhIGxvdCB0aGlzIGNvZGUuCj4+Cj4+Cj4+Pj4gKyAg ICBpZiAoIXBhZ2VzX2RhdGFfZ3Vlc3QpCj4+Pj4gKyAgICAgICAgZ290byBlcnJfZnJlZTsKPj4+ PiArCj4+Pj4gKyAgICBwYWdlc19kYXRhX3hlbiA9IHBhZ2VzX2RhdGFfeGVuX3N0YXJ0Owo+Pj4+ ICsgICAgd2hpbGUgKCBudW1fcGFnZXMgKSB7Cj4+Pj4gKyAgICAgICAgbWZuX3QgZW50cnlfbWZu ID0gbG9va3VwX2d1ZXN0X3JhbV9hZGRyKAo+Pj4+ICsgICAgICAgICAgICBwYWdlc19kYXRhX2d1 ZXN0LT5wYWdlc19saXN0W2VudHJpZXNfb25fcGFnZV0pOwo+Pj4+ICsKPj4+PiArICAgICAgICBp ZiAoIG1mbl9lcShlbnRyeV9tZm4sIElOVkFMSURfTUZOKSApCj4+Pj4gKyAgICAgICAgICAgIGdv dG8gZXJyX3VubWFwOwo+Pgo+PiBZb3Ugd291bGQgbmVlZCB0byBnZXQgYSByZWZlcmVuY2Ugb24g ZWFjaCBwYWdlLCBhbmQgcmVsZWFzZSBpdCBpbiBlcnJfdW5tYXAKPj4gb3Igd2hlbiB0aGUgY29t bWFuZCBpcyBkb25lLiBnZXRfcGFnZV9mcm9tX2dmbiBjb3VsZCBkbyBpdCBmb3IgeW91Lgo+Pgo+ Pj4+ICsKPj4+PiArICAgICAgICBwYWdlc19kYXRhX3hlbi0+cGFnZXNfbGlzdFtlbnRyaWVzX29u X3BhZ2VdID0gbWZuX3RvX21hZGRyKGVudHJ5X21mbik7Cj4+Pj4gKyAgICAgICAgZW50cmllc19v bl9wYWdlKys7Cj4+Pj4gKwo+Pj4+ICsgICAgICAgIGlmICggZW50cmllc19vbl9wYWdlID09IFBB R0VMSVNUX0VOVFJJRVNfUEVSX1BBR0UgKSB7Cj4+Pj4gKyAgICAgICAgICAgIHBhZ2VzX2RhdGFf eGVuLT5uZXh0X3BhZ2VfZGF0YSA9IHZpcnRfdG9fbWFkZHIocGFnZXNfZGF0YV94ZW4gKyAxKTsK Pj4+PiArICAgICAgICAgICAgcGFnZXNfZGF0YV94ZW4rKzsKPj4+PiArICAgICAgICAgICAgZ2Fk ZHIgPSBwYWdlc19kYXRhX2d1ZXN0LT5uZXh0X3BhZ2VfZGF0YTsKPj4+PiArICAgICAgICAgICAg dW5tYXBfZG9tYWluX3BhZ2UocGFnZXNfZGF0YV9ndWVzdCk7Cj4+Pj4gKyAgICAgICAgICAgIGd1 ZXN0X21mbiA9IGxvb2t1cF9ndWVzdF9yYW1fYWRkcihnYWRkcik7Cj4+Pj4gKyAgICAgICAgICAg IGlmICggbWZuX2VxKGd1ZXN0X21mbiwgSU5WQUxJRF9NRk4pICkKPj4+PiArICAgICAgICAgICAg ICAgIGdvdG8gZXJyX2ZyZWU7Cj4+Pj4gKwo+Pj4+ICsgICAgICAgICAgICBwYWdlc19kYXRhX2d1 ZXN0ID0gbWFwX2RvbWFpbl9wYWdlKGd1ZXN0X21mbik7Cj4+Pj4gKyAgICAgICAgICAgIGlmICgg IXBhZ2VzX2RhdGFfZ3Vlc3QgKQo+Pj4+ICsgICAgICAgICAgICAgICAgZ290byBlcnJfZnJlZTsK Pj4+PiArICAgICAgICAgICAgLyogUm9sbCBvdmVyIHRvIHRoZSBuZXh0IHBhZ2UgKi8KPj4+PiAr ICAgICAgICAgICAgZW50cmllc19vbl9wYWdlID0gMDsKPj4+PiArICAgICAgICB9Cj4+Pj4gKyAg ICAgICAgbnVtX3BhZ2VzLS07Cj4+Pj4gKyAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgdW5tYXBfZG9t YWluX3BhZ2UocGFnZXNfZGF0YV9ndWVzdCk7Cj4+Pj4gKwo+Pj4+ICsgICAgcGFyYW0tPnUudG1l bS5idWZfcHRyID0gdmlydF90b19tYWRkcihwYWdlc19kYXRhX3hlbl9zdGFydCkgfCBwYWdlX29m ZnNldDsKPj4KPj4gSSBhbSBub3Qgc3VyZSB0byB1bmRlcnN0YW5kIHdoeSB5b3UgYXJlIGFwcGx5 IHRoZSBvZmZzZXQgb2YgdGhlIGd1ZXN0IGJ1ZmZlcgo+PiB0byB4ZW4gYnVmZmVyLgo+Pgo+Pj4+ ICsKPj4+PiArICAgIGN0eC0+bm9uX2NvbnRpZ1tpZHhdID0gcGFnZXNfZGF0YV94ZW5fc3RhcnQ7 Cj4+Pj4gKyAgICBjdHgtPm5vbl9jb250aWdfb3JkZXJbaWR4XSA9IG9yZGVyOwo+Pj4+ICsKPj4+ PiArICAgIHVubWFwX2RvbWFpbl9wYWdlKHBhZ2VzX2RhdGFfZ3Vlc3QpOwo+Pj4+ICsgICAgcmV0 dXJuIHRydWU7Cj4+Pj4gKwo+Pj4+ICtlcnJfdW5tYXA6Cj4+Pj4gKyAgICB1bm1hcF9kb21haW5f cGFnZShwYWdlc19kYXRhX2d1ZXN0KTsKPj4+PiArZXJyX2ZyZWU6Cj4+Pj4gKyAgICBmcmVlX3hl bmhlYXBfcGFnZXMocGFnZXNfZGF0YV94ZW5fc3RhcnQsIG9yZGVyKTsKPj4+PiArICAgIHJldHVy biBmYWxzZTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGJvb2wgdHJhbnNsYXRlX3BhcmFt cyhzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICpjdHgpCj4+Pj4gK3sKPj4+PiArICAgIHVuc2lnbmVkIGlu dCBpOwo+Pj4+ICsgICAgdWludDMyX3QgYXR0cjsKPj4+PiArCj4+Pj4gKyAgICBmb3IgKCBpID0g MDsgaSA8IGN0eC0+eGVuX2FyZy0+bnVtX3BhcmFtczsgaSsrICkgewo+Pj4+ICsgICAgICAgIGF0 dHIgPSBjdHgtPnhlbl9hcmctPnBhcmFtc1tpXS5hdHRyOwo+Pj4+ICsKPj4+PiArICAgICAgICBz d2l0Y2ggKCBhdHRyICYgT1BURUVfTVNHX0FUVFJfVFlQRV9NQVNLICkgewo+Pj4+ICsgICAgICAg IGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9UTUVNX0lOUFVUOgo+Pj4+ICsgICAgICAgIGNhc2Ug T1BURUVfTVNHX0FUVFJfVFlQRV9UTUVNX09VVFBVVDoKPj4+PiArICAgICAgICBjYXNlIE9QVEVF X01TR19BVFRSX1RZUEVfVE1FTV9JTk9VVDoKPj4+PiArICAgICAgICAgICAgaWYgKCBhdHRyICYg T1BURUVfTVNHX0FUVFJfTk9OQ09OVElHICkgewo+Pj4+ICsgICAgICAgICAgICAgICAgaWYgKCAh dHJhbnNsYXRlX25vbmNvbnRpZyhjdHgsIGN0eC0+eGVuX2FyZy0+cGFyYW1zICsgaSwgaSkgKQo+ Pj4+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPj4+PiArICAgICAgICAgICAg fQo+Pj4+ICsgICAgICAgICAgICBlbHNlIHsKPj4+PiArICAgICAgICAgICAgICAgIGdwcmludGso WEVOTE9HX1dBUk5JTkcsICJHdWVzdCB0cmllcyB0byB1c2Ugb2xkIHRtZW0gYXJnXG4iKTsKPj4+ PiArICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPj4+PiArICAgICAgICAgICAgfQo+Pj4+ ICsgICAgICAgICAgICBicmVhazsKPj4+PiArICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZ UEVfTk9ORToKPj4+PiArICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVfSU5Q VVQ6Cj4+Pj4gKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX09VVFBVVDoK Pj4+PiArICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVfSU5PVVQ6Cj4+Pj4g KyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JNRU1fSU5QVVQ6Cj4+Pj4gKyAgICAg ICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JNRU1fT1VUUFVUOgo+Pj4+ICsgICAgICAgIGNh c2UgT1BURUVfTVNHX0FUVFJfVFlQRV9STUVNX0lOT1VUOgo+Pj4+ICsgICAgICAgICAgICBjb250 aW51ZTsKPj4+PiArICAgICAgICB9Cj4+Pj4gKyAgICB9Cj4+Pj4gKyAgICByZXR1cm4gdHJ1ZTsK Pj4+PiArfQo+Pj4+ICsKPj4+PiArLyoKPj4+PiArICogQ29weSBjb21tYW5kIGJ1ZmZlciBpbnRv IHhlbiBtZW1vcnkgdG86Cj4+Pj4gKyAqIDEpIEhpZGUgdHJhbnNsYXRlZCBhZGRyZXNzZXMgZnJv bSBndWVzdAo+Pj4+ICsgKiAyKSBNYWtlIHN1cmUgdGhhdCBndWVzdCB3b3VsZG4ndCBjaGFuZ2Ug ZGF0YSBpbiBjb21tYW5kIGJ1ZmZlciBkdXJpbmcgY2FsbAo+Pj4+ICsgKi8KPj4+PiArc3RhdGlj IGJvb2wgY29weV9zdGRfcmVxdWVzdChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncywKPj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICpjdHgpCj4+ Pj4gK3sKPj4+PiArICAgIHBhZGRyX3QgY21kX2dhZGRyLCB4ZW5fYWRkcjsKPj4+PiArICAgIG1m bl90IGNtZF9tZm47Cj4+Pj4gKwo+Pj4+ICsgICAgY21kX2dhZGRyID0gKHBhZGRyX3QpZ2V0X3Vz ZXJfcmVnKHJlZ3MsIDEpIDw8IDMyIHwKPj4+PiArICAgICAgICBnZXRfdXNlcl9yZWcocmVncywg Mik7Cj4+Pj4gKwo+Pj4+ICsgICAgLyoKPj4+PiArICAgICAqIENvbW1hbmQgYnVmZmVyIHNob3Vs ZCBzdGFydCBhdCBwYWdlIGJvdW5kYXJ5Lgo+Pj4+ICsgICAgICogVGhpcyBpcyBPUC1URUUgQUJJ IHJlcXVpcmVtZW50Lgo+Pj4+ICsgICAgICovCj4+Pj4gKyAgICBpZiAoIGNtZF9nYWRkciAmIChP UFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSAtIDEpICkKPj4+PiArICAgICAgICByZXR1cm4g ZmFsc2U7Cj4+Pj4gKwo+Pj4+ICsgICAgY21kX21mbiA9IGxvb2t1cF9ndWVzdF9yYW1fYWRkcihj bWRfZ2FkZHIpOwo+Pj4+ICsgICAgaWYgKCBtZm5fZXEoY21kX21mbiwgSU5WQUxJRF9NRk4pICkK Pj4+PiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4+Pj4gKwo+Pj4+ICsgICAgY3R4LT5ndWVzdF9h cmcgPSBtYXBfZG9tYWluX3BhZ2UoY21kX21mbik7Cj4+Pj4gKyAgICBpZiAoICFjdHgtPmd1ZXN0 X2FyZyApCj4+Pj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+Pj4+ICsKPj4+PiArICAgIGN0eC0+ eGVuX2FyZyA9IGFsbG9jX3hlbmhlYXBfcGFnZSgpOwo+Pj4+ICsgICAgaWYgKCAhY3R4LT54ZW5f YXJnICkKPj4+PiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4+Pj4gKwo+Pj4+ICsgICAgbWVtY3B5 KGN0eC0+eGVuX2FyZywgY3R4LT5ndWVzdF9hcmcsIE9QVEVFX01TR19OT05DT05USUdfUEFHRV9T SVpFKTsKPj4KPj4gSGF2ZSBhIGxvb2sgYSBndWVzdCBjb3B5IGhlbHBlcnMuCj4+Cj4+IENoZWVy cywKPj4KPj4gWzFdCj4+IGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvYXJjaGl2ZXMvaHRt bC94ZW4tZGV2ZWwvMjAxNy0xMS9tc2cwMTQ4MS5odG1sCj4+Cj4+IC0tIAo+PiBKdWxpZW4gR3Jh bGwKCi0tIApKdWxpZW4gR3JhbGwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnBy b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94 ZW4tZGV2ZWw=