From mboxrd@z Thu Jan 1 00:00:00 1970 From: Volodymyr Babchuk Subject: Re: [PATCH v3 06/11] optee: add std call handling Date: Thu, 17 Jan 2019 15:21:10 +0000 Message-ID: <87va2ntimz.fsf@epam.com> References: <20181218211126.6886-1-volodymyr_babchuk@epam.com> <20181218211126.6886-7-volodymyr_babchuk@epam.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 1gk9To-0003ur-N2 for xen-devel@lists.xenproject.org; Thu, 17 Jan 2019 15:21:16 +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 , Jens Wiklander Cc: Volodymyr Babchuk , "xen-devel@lists.xenproject.org" , Stefano Stabellini , Volodymyr Babchuk , "tee-dev@lists.linaro.org" List-Id: xen-devel@lists.xenproject.org CkhlbGxvIEp1bGllbiwKCkp1bGllbiBHcmFsbCB3cml0ZXM6Cgo+IEhpIFZvbG9keW15ciwKPgo+ IE9uIDE4LzEyLzIwMTggMjE6MTEsIFZvbG9keW15ciBCYWJjaHVrIHdyb3RlOgo+PiBGcm9tOiBW b2xvZHlteXIgQmFiY2h1ayA8dmxhZC5iYWJjaHVrQGdtYWlsLmNvbT4KPj4KPj4gVGhlIG1haW4g d2F5IHRvIGNvbW11bmljYXRlIHdpdGggT1AtVEVFIGlzIHRvIGlzc3VlIHN0YW5kYXJkIFNNQ0ND Cj4+IGNhbGwuICJTdGFuZGFyZCIgaXMgYSBTTUNDQyB0ZXJtIGFuZCBpdCBtZWFucyB0aGF0IGNh bGwgY2FuIGJlCj4+IGludGVycnVwdGVkIGFuZCBPUC1URUUgY2FuIHJldHVybiBjb250cm9sIHRv IE5XIGJlZm9yZSBjb21wbGV0aW5nCj4+IHRoZSBjYWxsLgo+Pgo+PiBJbiBjb250cmFzdCB3aXRo IGZhc3QgY2FsbHMsIHdoZXJlIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcwo+PiBhcmUgcGFz c2VkIGluIHJlZ2lzdGVycywgc3RhbmRhcmQgY2FsbHMgdXNlIHNoYXJlZCBtZW1vcnkuIFJlZ2lz dGVyCj4+IHBhaXIgYTEsYTIgaG9sZHMgNjQtYml0IFBBIG9mIGNvbW1hbmQgYnVmZmVyLCB3aGVy ZSBhbGwgYXJndW1lbnRzCj4+IGFyZSBzdG9yZWQgYW5kIHdoaWNoIGlzIHVzZWQgdG8gcmV0dXJu IGRhdGEuIE9QLVRFRSBpbnRlcm5hbGx5Cj4+IGNvcGllcyBjb250ZW50cyBvZiB0aGlzIGJ1ZmZl ciBpbnRvIG93biBzZWN1cmUgbWVtb3J5IGJlZm9yZSBhY2Nlc3NpbmcKPj4gYW5kIHZhbGlkYXRp bmcgYW55IGRhdGEgaW4gY29tbWFuZCBidWZmZXIuIFRoaXMgaXMgZG9uZSB0byBtYWtlIHN1cmUK Pj4gdGhhdCBOVyB3aWxsIG5vdCBjaGFuZ2UgY29udGVudHMgb2YgdGhlIHZhbGlkYXRlZCBwYXJh bWV0ZXJzLgo+Pgo+PiBNZWRpYXRvciBuZWVkcyB0byBkbyB0aGUgc2FtZSBmb3IgbnVtYmVyIG9m IHJlYXNvbnM6Cj4+Cj4+IDEuIFRvIG1ha2Ugc3VyZSB0aGF0IGd1ZXN0IHdpbGwgbm90IGNoYW5n ZSBkYXRhIGFmdGVyIHZhbGlkYXRpb24uCj4+IDIuIFRvIHRyYW5zbGF0ZSBJUEFzIHRvIFBBcyBp biB0aGUgY29tbWFuZCBidWZmZXIgKHRoaXMgaXMgbm90IGRvbmUKPj4gICAgIGluIHRoaXMgcGF0 Y2gpLgo+PiAzLiBUbyBoaWRlIHRyYW5zbGF0ZWQgYWRkcmVzcyBmcm9tIGd1ZXN0LCBzbyBpdCB3 aWxsIG5vdCBiZSBhYmxlCj4+ICAgICB0byBkbyBJUEEtPlBBIHRyYW5zbGF0aW9uIGJ5IG1pc3Vz aW5nIG1lZGlhdG9yLgo+Pgo+PiBEdXJpbmcgc3RhbmRhcmQgY2FsbCBPUC1URUUgY2FuIGlzc3Vl IG11bHRpcGxlICJSUEMgcmV0dXJucyIsIGFza2luZwo+PiBOVyB0byBkbyBzb21lIHdvcmsgZm9y IE9QLVRFRS4gTlcgdGhlbiBpc3N1ZXMgc3BlY2lhbCBjYWxsCj4+IE9QVEVFX1NNQ19DQUxMX1JF VFVSTl9GUk9NX1JQQyB0byByZXN1bWUgaGFuZGxpbmcgb2YgdGhlIG9yaWdpbmFsIGNhbGwuCj4+ IFRodXMsIG1lZGlhdG9yIG5lZWRzIHRvIG1haW50YWluIGNvbnRleHQgZm9yIG9yaWdpbmFsIHN0 YW5kYXJkIGNhbGwKPj4gZHVyaW5nIG11bHRpcGxlIFNNQ0NDIGNhbGxzLgo+Pgo+PiBTdGFuZGFy ZCBjYWxsIGlzIGNvbnNpZGVyZWQgY29tcGxldGUsIHdoZW4gcmV0dXJuZWQgdmFsdWUgaXMKPj4g bm90IGEgUlBDIHJlcXVlc3QuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFZvbG9keW15ciBCYWJjaHVr IDx2bGFkLmJhYmNodWtAZ21haWwuY29tPgo+PiAtLS0KPj4KPj4gICBDaGFuZ2VzIGZyb20gdjI6 Cj4+ICAgIC0gcmVuYW1lZCBzdHJ1Y3QgZG9tYWluX2N0eCB0byBzdHJ1Y3Qgb3B0ZWVfZG9tYWlu Cj4+ICAgIC0gZml4ZWQgY29kaW5nIHN0eWxlCj4+ICAgIC0gTm93IEkgdXNlIGFjY2Vzc19ndWVz dF9tZW1vcnlfYnlfaXBhKCkgaW5zdGVhZCBvZiBtYXBwaW5ncwo+PiAgICAgIHRvIHJlYWQgY29t bWFuZCBidWZmZXIKPj4gICAgLSBBZGRlZCB0cmFja2luZyBmb3IgaW4gZmxpZ2h0IGNhbGxzLCBz byBndWVzdCBjYW4ndCByZXN1bWUKPj4gICAgICB0aGUgc2FtZSBjYWxsIGZyb20gdHdvIENQVXMg c2ltdWx0YW5pb3VzbHkKPj4KPj4gICB4ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMgICAgIHwgMzE5 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4+ICAgeGVuL2luY2x1ZGUvYXNt LWFybS9kb21haW4uaCB8ICAgMyArCj4+ICAgMiBmaWxlcyBjaGFuZ2VkLCAzMjAgaW5zZXJ0aW9u cygrKSwgMiBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS90ZWUv b3B0ZWUuYyBiL3hlbi9hcmNoL2FybS90ZWUvb3B0ZWUuYwo+PiBpbmRleCA1ODQyNDFiMDNhLi5k YzkwZTJlZDhlIDEwMDY0NAo+PiAtLS0gYS94ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMKPj4gKysr IGIveGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5jCj4+IEBAIC0xMiw2ICsxMiw4IEBACj4+ICAgICov Cj4+ICAgICAjaW5jbHVkZSA8eGVuL2RldmljZV90cmVlLmg+Cj4+ICsjaW5jbHVkZSA8eGVuL2Rv bWFpbl9wYWdlLmg+Cj4+ICsjaW5jbHVkZSA8eGVuL2d1ZXN0X2FjY2Vzcy5oPgo+PiAgICNpbmNs dWRlIDx4ZW4vc2NoZWQuaD4KPj4gICAjaW5jbHVkZSA8YXNtL3NtY2NjLmg+Cj4+ICAgI2luY2x1 ZGUgPGFzbS90ZWUvdGVlLmg+Cj4+IEBAIC0yMiwxMSArMjQsMzggQEAKPj4gICAvKiBDbGllbnQg SUQgMCBpcyByZXNlcnZlZCBmb3IgaHlwZXJ2aXNvciBpdHNlbGYgKi8KPj4gICAjZGVmaW5lIE9Q VEVFX0NMSUVOVF9JRChkb21haW4pIChkb21haW4tPmRvbWFpbl9pZCArIDEpCj4+ICAgKy8qCj4+ ICsgKiBNYXhpbWFsIG51bWJlciBvZiBjb25jdXJyZW50IHN0YW5kYXJkIGNhbGxzIGZyb20gb25l IGd1ZXN0LiBUaGlzCj4+ICsgKiBjb3JyZXNwb25kcyB0byBPUFRFRSBjb25maWd1cmF0aW9uIG9w dGlvbiBDRkdfTlVNX1RIUkVBRFMsIGJlY2F1c2UKPj4gKyAqIE9QLVRFRSBzcGF3bnMgYSB0aHJl YWQgZm9yIGV2ZXJ5IHN0YW5kYXJkIGNhbGwuCj4KPiBMb29raW5nIGF0IE9QLVRFRSwgQ0ZHX05V TV9USFJFQURTIHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gdGhlCj4gcGxhdGZvcm0uIElzIHRoZXJl IGFueSB3YXkgdG8gcHJvYmUgdGhhdCBudW1iZXIgb2YgdGhyZWFkcyBmcm9tIFhlbj8KWWVzLCB0 aGlzIGlzIHBlci1wbGF0Zm9ybSBjb25maWd1cmF0aW9uLgpFYXNpZXN0IHdheSBpcyB0byBhZGQg RmFzdCBTTUMgdG8gT1AtVEVFIHRoYXQgd2lsbCByZXBvcnQgdGhpcwpwYXJhbWV0ZXIuCkplbnMs IHdoYXQgZG8geW91IHRoaW5rIGFib3V0IGFkZGluZyBhZGRpdGlvbmFsIGNhbGw/Cgo+IEluIGFu eSBjYXNlLCBJIHRoaW5rIHdlIHNob3VsZCB1cGRhdGUgdGhlIGNvbW1lbnQgdG8gcmVmbGVjdCB0 aGF0IHRoaXMKPiBzZWVtcyB0byBiZSB0aGUgbWF4aW11bSBDRkdfTlVNX1RIUkVBRFMgc3VwcG9y dGVkIGJ5IGFueSB1cHN0cmVhbQo+IHBsYXRmb3JtLgoKQWN0dWFsbHksIE9QLVRFRSBwcm90b2Nv bCBoYXZlIHBvc3NpYmlsaXR5IHRvIGhhbmRsZSBsaW1pdGVkIG51bWJlciBvZgp0aHJlYWRzIGNv cnJlY3RseS4gT1AtVEVFIGNhbiByZXBvcnQgdGhhdCBhbGwgdGhyZWFkcyBhcmUgYnVzeSBhbmQK Y2xpZW50IHdpbGwgd2FpdCBmb3IgYSBmcmVlIG9uZS4gWEVOIGNhbiBkbyB0aGUgc2FtZSwgYWx0 aG91Z2ggdGhpcyBpcyBub3QKaW1wbGVtZW50ZWQgaW4gdGhpcyBwYXRjaCBzZXJpZXMuIEJ1dCBJ IGNhbiBhZGQgdGhpcy4KCkJhc2ljYWxseSB0aGlzIG1lYW5zIHRoYXQgYWxsIGNhbiB3b3JrIGNv cnJlY3RseSBldmVuIHdpdGgKTUFYX1NURF9DQUxMUz09MS4gSXQganVzdCB3aWxsIGJlIG5vdCBz byBlZmZpY2llbnQuCgo+PiArICovCj4+ICsjZGVmaW5lIE1BWF9TVERfQ0FMTFMgICAxNgo+PiAr Cj4+ICAgI2RlZmluZSBPUFRFRV9LTk9XTl9OU0VDX0NBUFMgT1BURUVfU01DX05TRUNfQ0FQX1VO SVBST0NFU1NPUgo+PiAgICNkZWZpbmUgT1BURUVfS05PV05fU0VDX0NBUFMgKE9QVEVFX1NNQ19T RUNfQ0FQX0hBVkVfUkVTRVJWRURfU0hNIHwgXAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE9QVEVFX1NNQ19TRUNfQ0FQX1VOUkVHSVNURVJFRF9TSE0gfCAgXAo+PiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE9QVEVFX1NNQ19TRUNfQ0FQX0RZTkFNSUNfU0hNKQo+ PiAgICsvKgo+PiArICogQ2FsbCBjb250ZXh0LiBPUC1URUUgY2FuIGlzc3VlIG11bHRpcGxlIFJQ QyByZXR1cm5zIGR1cmluZyBvbmUgY2FsbC4KPj4gKyAqIFdlIG5lZWQgdG8gcHJlc2VydmUgY29u dGV4dCBkdXJpbmcgdGhlbS4KPj4gKyAqLwo+PiArc3RydWN0IG9wdGVlX3N0ZF9jYWxsIHsKPj4g KyAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4+ICsgICAgc3RydWN0IG9wdGVlX21zZ19hcmcg Knhlbl9hcmc7Cj4+ICsgICAgcGFkZHJfdCBndWVzdF9hcmdfaXBhOwo+PiArICAgIGludCBvcHRl ZV90aHJlYWRfaWQ7Cj4+ICsgICAgaW50IHJwY19vcDsKPj4gKyAgICBib29sIGluX2ZsaWdodDsK Pj4gK307Cj4+ICsKPj4gKy8qIERvbWFpbiBjb250ZXh0ICovCj4+ICtzdHJ1Y3Qgb3B0ZWVfZG9t YWluIHsKPj4gKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIGNhbGxfbGlzdDsKPj4gKyAgICBhdG9taWNf dCBjYWxsX2NvdW50Owo+PiArICAgIHNwaW5sb2NrX3QgbG9jazsKPj4gK307Cj4+ICsKPj4gICBz dGF0aWMgYm9vbCBvcHRlZV9wcm9iZSh2b2lkKQo+PiAgIHsKPj4gICAgICAgc3RydWN0IGR0X2Rl dmljZV9ub2RlICpub2RlOwo+PiBAQCAtNTIsNiArODEsMTEgQEAgc3RhdGljIGJvb2wgb3B0ZWVf cHJvYmUodm9pZCkKPj4gICBzdGF0aWMgaW50IG9wdGVlX2VuYWJsZShzdHJ1Y3QgZG9tYWluICpk KQo+PiAgIHsKPj4gICAgICAgc3RydWN0IGFybV9zbWNjY19yZXMgcmVzcDsKPj4gKyAgICBzdHJ1 Y3Qgb3B0ZWVfZG9tYWluICpjdHg7Cj4+ICsKPj4gKyAgICBjdHggPSB4emFsbG9jKHN0cnVjdCBv cHRlZV9kb21haW4pOwo+PiArICAgIGlmICggIWN0eCApCj4+ICsgICAgICAgIHJldHVybiAtRU5P TUVNOwo+PiAgICAgICAgIC8qCj4+ICAgICAgICAqIEluZm9ybSBPUC1URUUgYWJvdXQgYSBuZXcg Z3Vlc3QuCj4+IEBAIC02OSw5ICsxMDMsMTYgQEAgc3RhdGljIGludCBvcHRlZV9lbmFibGUoc3Ry dWN0IGRvbWFpbiAqZCkKPj4gICAgICAgewo+PiAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfV0FS TklORywgIlVuYWJsZSB0byBjcmVhdGUgT1BURUUgY2xpZW50OiByYyA9IDB4JVhcbiIsCj4+ICAg ICAgICAgICAgICAgICAgICh1aW50MzJfdClyZXNwLmEwKTsKPj4gKyAgICAgICAgeGZyZWUoY3R4 KTsKPj4gICAgICAgICAgIHJldHVybiAtRU5PREVWOwo+PiAgICAgICB9Cj4+ICAgKyAgICBJTklU X0xJU1RfSEVBRCgmY3R4LT5jYWxsX2xpc3QpOwo+PiArICAgIGF0b21pY19zZXQoJmN0eC0+Y2Fs bF9jb3VudCwgMCk7Cj4+ICsgICAgc3Bpbl9sb2NrX2luaXQoJmN0eC0+bG9jayk7Cj4+ICsKPj4g KyAgICBkLT5hcmNoLnRlZSA9IGN0eDsKPj4gKwo+PiAgICAgICByZXR1cm4gMDsKPj4gICB9Cj4+ ICAgQEAgLTExMSw5ICsxNTIsODYgQEAgc3RhdGljIHZvaWQgc2V0X3JldHVybihzdHJ1Y3QgY3B1 X3VzZXJfcmVncwo+PiAqcmVncywgdWludDMyX3QgcmV0KQo+PiAgICAgICBzZXRfdXNlcl9yZWco cmVncywgNywgMCk7Cj4+ICAgfQo+PiAgICtzdGF0aWMgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICph bGxvY2F0ZV9zdGRfY2FsbChzdHJ1Y3QKPj4gb3B0ZWVfZG9tYWluICpjdHgpCj4+ICt7Cj4+ICsg ICAgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICpjYWxsOwo+PiArICAgIGludCBjb3VudDsKPj4gKwo+ PiArICAgIC8qIE1ha2Ugc3VyZSB0aGF0IGd1ZXN0IGRvZXMgbm90IGV4ZWN1dGUgbW9yZSB0aGFu IE1BWF9TVERfQ0FMTFMgKi8KPj4gKyAgICBjb3VudCA9IGF0b21pY19hZGRfdW5sZXNzKCZjdHgt PmNhbGxfY291bnQsIDEsIE1BWF9TVERfQ0FMTFMpOwo+PiArICAgIGlmICggY291bnQgPT0gTUFY X1NURF9DQUxMUyApCj4+ICsgICAgICAgIHJldHVybiBOVUxMOwo+PiArCj4+ICsgICAgY2FsbCA9 IHh6YWxsb2Moc3RydWN0IG9wdGVlX3N0ZF9jYWxsKTsKPj4gKyAgICBpZiAoICFjYWxsICkKPj4g KyAgICB7Cj4+ICsgICAgICAgIGF0b21pY19kZWMoJmN0eC0+Y2FsbF9jb3VudCk7Cj4+ICsgICAg ICAgIHJldHVybiBOVUxMOwo+PiArICAgIH0KPj4gKwo+PiArICAgIGNhbGwtPm9wdGVlX3RocmVh ZF9pZCA9IC0xOwo+PiArICAgIGNhbGwtPmluX2ZsaWdodCA9IHRydWU7Cj4+ICsKPj4gKyAgICBz cGluX2xvY2soJmN0eC0+bG9jayk7Cj4+ICsgICAgbGlzdF9hZGRfdGFpbCgmY2FsbC0+bGlzdCwg JmN0eC0+Y2FsbF9saXN0KTsKPj4gKyAgICBzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKPj4gKwo+ PiArICAgIHJldHVybiBjYWxsOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBmcmVlX3N0ZF9j YWxsKHN0cnVjdCBvcHRlZV9kb21haW4gKmN0eCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICpjYWxsKQo+PiArewo+PiArICAgIGF0b21pY19kZWMo JmN0eC0+Y2FsbF9jb3VudCk7Cj4+ICsKPj4gKyAgICBzcGluX2xvY2soJmN0eC0+bG9jayk7Cj4+ ICsgICAgbGlzdF9kZWwoJmNhbGwtPmxpc3QpOwo+PiArICAgIHNwaW5fdW5sb2NrKCZjdHgtPmxv Y2spOwo+PiArCj4+ICsgICAgQVNTRVJUKCFjYWxsLT5pbl9mbGlnaHQpOwo+PiArICAgIHhmcmVl KGNhbGwtPnhlbl9hcmcpOwo+PiArICAgIHhmcmVlKGNhbGwpOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICpnZXRfc3RkX2NhbGwoc3RydWN0IG9wdGVlX2RvbWFp biAqY3R4LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCB0aHJlYWRfaWQpCj4+ICt7Cj4+ICsgICAgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICpjYWxsOwo+ PiArCj4+ICsgICAgc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwo+PiArICAgIGxpc3RfZm9yX2VhY2hf ZW50cnkoIGNhbGwsICZjdHgtPmNhbGxfbGlzdCwgbGlzdCApCj4+ICsgICAgewo+PiArICAgICAg ICBpZiAoIGNhbGwtPm9wdGVlX3RocmVhZF9pZCA9PSB0aHJlYWRfaWQgKQo+PiArICAgICAgICB7 Cj4+ICsgICAgICAgICAgICBpZiAoIGNhbGwtPmluX2ZsaWdodCApCj4+ICsgICAgICAgICAgICB7 Cj4+ICsgICAgICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfV0FSTklORywgIkd1ZXN0IHRyaWVz IHRvIGV4ZWN1dGUgY2FsbCB3aGljaCBpcyBhbHJlYWR5IGluIGZsaWdodCIpOwo+PiArICAgICAg ICAgICAgICAgIGdvdG8gb3V0Owo+PiArICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgY2Fs bC0+aW5fZmxpZ2h0ID0gdHJ1ZTsKPj4gKyAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZjdHgtPmxv Y2spOwo+PiArICAgICAgICAgICAgcmV0dXJuIGNhbGw7Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9 Cj4+ICtvdXQ6Cj4+ICsgICAgc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cj4+ICsKPj4gKyAgICBy ZXR1cm4gTlVMTDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgcHV0X3N0ZF9jYWxsKHN0cnVj dCBvcHRlZV9kb21haW4gKmN0eCwgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICpjYWxsKQo+PiArewo+ PiArICAgIHNwaW5fbG9jaygmY3R4LT5sb2NrKTsKPj4gKyAgICBBU1NFUlQoY2FsbC0+aW5fZmxp Z2h0KTsKPj4gKyAgICBjYWxsLT5pbl9mbGlnaHQgPSBmYWxzZTsKPj4gKyAgICBzcGluX3VubG9j aygmY3R4LT5sb2NrKTsKPj4gK30KPj4gKwo+PiAgIHN0YXRpYyB2b2lkIG9wdGVlX2RvbWFpbl9k ZXN0cm95KHN0cnVjdCBkb21haW4gKmQpCj4+ICAgewo+PiAgICAgICBzdHJ1Y3QgYXJtX3NtY2Nj X3JlcyByZXNwOwo+PiArICAgIHN0cnVjdCBvcHRlZV9zdGRfY2FsbCAqY2FsbCwgKmNhbGxfdG1w Owo+PiArICAgIHN0cnVjdCBvcHRlZV9kb21haW4gKmN0eCA9IGQtPmFyY2gudGVlOwo+Pgo+PiAg ICAgICAvKiBBdCB0aGlzIHRpbWUgYWxsIGRvbWFpbiBWQ1BVcyBzaG91bGQgYmUgc3RvcHBlZCAq Lwo+PiAgIEBAIC0xMjQsNiArMjQyLDE5OSBAQCBzdGF0aWMgdm9pZCBvcHRlZV9kb21haW5fZGVz dHJveShzdHJ1Y3QKPj4gZG9tYWluICpkKQo+PiAgICAgICAgKi8KPj4gICAgICAgYXJtX3NtY2Nj X3NtYyhPUFRFRV9TTUNfVk1fREVTVFJPWUVELCBPUFRFRV9DTElFTlRfSUQoZCksIDAsIDAsIDAs IDAsIDAsIDAsCj4+ICAgICAgICAgICAgICAgICAgICAgJnJlc3ApOwo+Cj4gVGhpcyBmdW5jdGlv biBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgZW5hYmxlIGFuZCBzaG91bGQgYmUKPiBpZGVtcG90ZW50 LiBTbyBJIHdvdWRsZCBjaGVjayBkLT5hcmNoLnRlZSBiZWZvcmUgYW5kLi4uCk5vdGhpbmcgYmFk IHdpbGwgaGFwcGVuIGlmIGl0IGNhbGxlZCB3aXRob3V0IGNhbGwgdG8gZW5hYmxlLgoKQnV0IHll cywgSSBuZWVkIHRvIGNoZWNrIGZvciBjdHggIT0gTlVMTC4KCj4+ICsgICAgQVNTRVJUKCFzcGlu X2lzX2xvY2tlZCgmY3R4LT5sb2NrKSk7Cj4+ICsKPj4gKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5 X3NhZmUoIGNhbGwsIGNhbGxfdG1wLCAmY3R4LT5jYWxsX2xpc3QsIGxpc3QgKQo+PiArICAgICAg ICBmcmVlX3N0ZF9jYWxsKGN0eCwgY2FsbCk7Cj4+ICsKPj4gKyAgICBBU1NFUlQoIWF0b21pY19y ZWFkKCZjdHgtPmNhbGxfY291bnQpKTsKPj4gKwo+PiArICAgIHhmcmVlKGQtPmFyY2gudGVlKTsK Pgo+IHVzZSBYRlJFRSBoZXJlLgpPaCwgbG9va3MgbGlrZSBJIG1pc3NlZCB0aGlzIG1hY3JvIGlu dHJvZHVjdGlvbi4gVGhhbmsgeW91IGZvciBwb2ludGluZwpvdXQuCgo+PiArfQo+PiArCj4+ICsv Kgo+PiArICogQ29weSBjb21tYW5kIGJ1ZmZlciBpbnRvIHhlbiBtZW1vcnkgdG86Cj4+ICsgKiAx KSBIaWRlIHRyYW5zbGF0ZWQgYWRkcmVzc2VzIGZyb20gZ3Vlc3QKPj4gKyAqIDIpIE1ha2Ugc3Vy ZSB0aGF0IGd1ZXN0IHdvdWxkbid0IGNoYW5nZSBkYXRhIGluIGNvbW1hbmQgYnVmZmVyIGR1cmlu ZyBjYWxsCj4+ICsgKi8KPj4gK3N0YXRpYyBib29sIGNvcHlfc3RkX3JlcXVlc3Qoc3RydWN0IGNw dV91c2VyX3JlZ3MgKnJlZ3MsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBvcHRlZV9zdGRfY2FsbCAqY2FsbCkKPj4gK3sKPj4gKyAgICBwYWRkcl90IHhlbl9hZGRyOwo+ PiArCj4+ICsgICAgY2FsbC0+Z3Vlc3RfYXJnX2lwYSA9IChwYWRkcl90KWdldF91c2VyX3JlZyhy ZWdzLCAxKSA8PCAzMiB8Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3VzZXJf cmVnKHJlZ3MsIDIpOwo+Cj4gTklUOiBUaGUgaW5kZW50YXRpb24gbG9va3Mgd2VpcmQgaGVyZS4K Pgo+PiArCj4+ICsgICAgLyoKPj4gKyAgICAgKiBDb21tYW5kIGJ1ZmZlciBzaG91bGQgc3RhcnQg YXQgcGFnZSBib3VuZGFyeS4KPj4gKyAgICAgKiBUaGlzIGlzIE9QLVRFRSBBQkkgcmVxdWlyZW1l bnQuCj4+ICsgICAgICovCj4+ICsgICAgaWYgKCBjYWxsLT5ndWVzdF9hcmdfaXBhICYgKE9QVEVF X01TR19OT05DT05USUdfUEFHRV9TSVpFIC0gMSkgKQo+PiArICAgICAgICByZXR1cm4gZmFsc2U7 Cj4+ICsKPj4gKyAgICBjYWxsLT54ZW5fYXJnID0gX3htYWxsb2MoT1BURUVfTVNHX05PTkNPTlRJ R19QQUdFX1NJWkUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QVEVFX01TR19O T05DT05USUdfUEFHRV9TSVpFKTsKPj4gKyAgICBpZiAoICFjYWxsLT54ZW5fYXJnICkKPj4gKyAg ICAgICAgcmV0dXJuIGZhbHNlOwo+PiArCj4+ICsgICAgQlVJTERfQlVHX09OKE9QVEVFX01TR19O T05DT05USUdfUEFHRV9TSVpFID4gUEFHRV9TSVpFKTsKPgo+IEFzIHlvdSB1c2UgX3htYWxsb2Ms IHlvdSBzaG91bGQgbm90IG5lZWQgdGhpcy4gVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeQo+IGlmIHlv dSB1c2UgYWxsb2NfeGVuaGVhcF9wYWdlLgo+ClllcywgcmlnaHQuIFRoaXMgaXMgbGVmdG92ZXIg ZnJvbSB0aW1lIHdoZW4gSSBtYXBwZWQgZ3Vlc3QgcGFnZSBpbnRvClhFTi4gSSdsbCBtb3ZlIGl0 IGRvd24sIHRvIHBsYWNlIHdoZXJlIEkgbWFwIHRoYXQgcGFnZS4KCj4gSSBhbSB3b25kZXJpbmcg d2hldGhlciBpdCBpcyB3aXNlIHRvIGFsbG9jYXRlIHRoZSBtZW1vcnkgZnJvbSB4ZW5oZWFwCj4g YW5kIG5vdCBkb21oZWFwLiBXaGlsZSBvbiBBcm02NCAoZm9yIG5vdykgeGVuaGVhcCBhbmQgZG9t aGVhcCBhcmUgdGhlCj4gc2FtZSwgb24gQXJtMzIgdGhleSBhcmUgZGlmZmVyZW50LiBUaGUgeGVu aGVhcCBpcyBhdCBtb3N0IDFHQiwgc28KPiBwcmV0dHkgbGltaXRlZC4KSG9uZXN0bHksIEkgaGF2 ZSBubyBvcGluaW9uIHRoZXJlLiBXaGF0IGFyZSBsaW1pdGF0aW9ucyBvZiBkb21oZWFwIGluCnRo aXMgY2FzZT8KCgo+IEZ1cnRoZXJtb3JlLCB1c2luZyBkb21oZWFwIHdvdWxkIGhhdmUgdGhlIGFk dmFudGFnZSB0byBhbGxvdyBpbiB0aGUKPiBmdXR1cmUgYWNjb3VudGluZyB0aGUgYWxsb2NhdGlv biB0byB0aGUgZ3Vlc3QgYW5kIGFkZCBtb3JlIHNhZmV0eQo+ICh0aGVyZSBhcmUgZGlzY3Vzc2lv biB0byBtYWtlIGRvbWhlYXAgcGVyIGRvbWFpbikuCj4KPj4gKwo+PiArICAgIGFjY2Vzc19ndWVz dF9tZW1vcnlfYnlfaXBhKGN1cnJlbnQtPmRvbWFpbiwgY2FsbC0+Z3Vlc3RfYXJnX2lwYSwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLT54ZW5fYXJnLCBPUFRFRV9NU0df Tk9OQ09OVElHX1BBR0VfU0laRSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm YWxzZSk7Cj4KPiBZb3UgbmVlZCB0byBjaGVjayB0aGUgcmV0dXJuIG9mIGFjY2Vzc19ndWVzdF9t ZW1vcnlfYnlfaXBhIGFzIHRoaXMKPiBmdW5jdGlvbiBjYW4gZmFpbC4KV2lsbCBkby4KCj4+ICsK Pj4gKyAgICB4ZW5fYWRkciA9IHZpcnRfdG9fbWFkZHIoY2FsbC0+eGVuX2FyZyk7Cj4+ICsKPj4g KyAgICBzZXRfdXNlcl9yZWcocmVncywgMSwgeGVuX2FkZHIgPj4gMzIpOwo+PiArICAgIHNldF91 c2VyX3JlZyhyZWdzLCAyLCB4ZW5fYWRkciAmIDB4RkZGRkZGRkYpOwo+PiArCj4+ICsgICAgcmV0 dXJuIHRydWU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGNvcHlfc3RkX3JlcXVlc3RfYmFj ayhzdHJ1Y3Qgb3B0ZWVfZG9tYWluICpjdHgsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICpjYWxsKQo+Cj4gQ2FuIHlv dSBhZGQgYSBjb21tZW50IG9uIHRvcCBvZiB0aGUgZnVuY3Rpb24gZXhwbGFpbmluZyB3aGF0IGl0 IGRvZXM/Clllcywgc3VyZS4KCiJDb3B5IE9QLVRFRSByZXNwb25zZSBiYWNrIGludG8gZ3Vlc3Qn cyByZXF1ZXN0IGJ1ZmZlciIgd2lsbCBiZSBzdWZmaWNpZW50PwoKPj4gK3sKPj4gKyAgICBzdHJ1 Y3Qgb3B0ZWVfbXNnX2FyZyAqZ3Vlc3RfYXJnOwo+PiArICAgIHN0cnVjdCBwYWdlX2luZm8gKnBh Z2U7Cj4+ICsgICAgdW5zaWduZWQgaW50IGk7Cj4+ICsgICAgdWludDMyX3QgYXR0cjsKPj4gKwo+ PiArICAgIC8qIGNvcHlfc3RkX3JlcXVlc3QoKSB2YWxpZGF0ZWQgSVBBIGZvciB1cyAqLwo+Cj4g Tm90IHJlYWxseSwgdGhlIGd1ZXN0IGlzIGZyZWUgdG8gbW9kaWZ5IHRoZSBzdGFnZS0yIG1hcHBp bmcgb24gYW5vdGhlcgo+IHZDUFUgd2hpbGUgdGhpcyBpcyBoYXBwZW5pbmcuIEkgYWdyZWUgdGhh dCB0aGUgZ3Vlc3Qgd2lsbCBzaG9vdAo+IGhpbXNlbGYsIGJ1dCB3ZSBhdCBsZWFzdCBuZWVkIHRv IG5vdCBoYXZlIHdlaXJkIGJlaGF2aW9yIGhhcHBlbmluZy4KPgo+IEluIHRoYXQgY2FzZSwgSSB3 b3VsZCBjaGVjayB0aGF0IHRoZSB0eXBlIGlzIHAybV9yYW1fcncgYXMgeW91IGRvbid0Cj4gd2Fu dCB0byB3cml0ZSBpbiByZWFkLW9ubHkgb3IgZm9yZWlnbiBtYXBwaW5nLgpIb3cgSSBjYW4gZG8g dGhpcyBhdG9taWNhbGx5PyBJLmUuIHdoYXQgaWYgZ3Vlc3Qgd2lsbCBtYW5nbGUgcDJtIHJpZ2h0 CmFmdGVyIHRoZSBjaGVjaz8KCj4gQWxzbywgYXMgY29weV9zdGRfcmVxdWVzdCgpIGFuZCBjb3B5 X3N0ZF9yZXF1ZXN0X2JhY2sgbWF5IG5vdCBiZQo+IGNhbGxlZCBpbiB0aGUgc2FtZSAidGhyZWFk IiBpdCB3b3VsZCBiZSB1c2VmdWwgaWYgeW91IHNwZWNpZnkgYSBiaXQKPiBtb3JlIHRoZSBpbnRl cmFjdGlvbi4KSSBub3Qgc3VyZSB3aGF0IGRvIHlvdSBtZWFuIHRoZXJlLgoKPgo+PiArICAgIHBh Z2UgPSBnZXRfcGFnZV9mcm9tX2dmbihjdXJyZW50LT5kb21haW4sIHBhZGRyX3RvX3BmbihjYWxs LT5ndWVzdF9hcmdfaXBhKSwKPgo+IFBsZWFzZSB1c2UgZ2ZuX3goZ2FkZHJfdG9fZ2ZuKC4uLikp IHRvIGNsYXJpZnkgdGhpcyBpcyBhIGdmbi4gVGhlCj4gZ2ZuX3ggd2lsbCBiZSB1bm5lY2Vzc2Fy eSBzb29uIHdpdGggYSBjbGVhbnVwIHRoYXQgaXMgY3VycmVudGx5IHVuZGVyCj4gcmV2aWV3LgpT byB0aGVyZSBhcmUgY2hhbmNlcywgdGhhdCBpdCB3aWxsIGJlIHJlbW92ZWQgd2hlbiB0aW1lIHdp bGwgY29tZSB0bwptZXJnZSB0aGlzIHBhdGNoIHNlcmllcz8gOikKCj4KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwgUDJNX0FMTE9DKTsKPj4gKyAgICBpZiAoICFwYWdlICkK Pj4gKyAgICAgICAgcmV0dXJuOwo+PiArCj4+ICsgICAgZ3Vlc3RfYXJnID0gbWFwX2RvbWFpbl9w YWdlKHBhZ2VfdG9fbWZuKHBhZ2UpKTsKPgo+IFNvIGhlcmUgeW91IGFzc3VtZSB0aGF0IFBBR0Vf U0laRSA9PQo+IE9QVEVFX01TR19OT05DT05USUdfUEFHRV9TSVpFLiBDYW4geW91IGFkZCBhIEJV SUxEX0JVR19PTiBqdXN0IGFib3ZlCj4gKHdpdGggYSBjb21tZW50KSBzbyB3ZSBkb24ndCBnZXQg c29tZSBuYXN0eSBzdXJwcmlzZSB3aXRoIDY0SyBzdXBwb3J0LgpZZXMsIHN1cmUuCgo+IEFsc28s IHlvdSBzaG91bGQgYmUgYWJsZSB0byB1c2UgX19tYXBfZG9tYWluX3BhZ2UocGFnZSkgaGVyZS4K T2gsIHRoYW5rIHlvdSBmb3IgcG9pbnRpbmcgdG8gdGhpcyBtYWNyby4gTm90IHRoZSBiZXN0IGRl c2NyaXB0aXZlIG5hbWUsCkkgbXVzdCBzYXkuCgo+Cj4+ICsKPj4gKyAgICBndWVzdF9hcmctPnJl dCA9IGNhbGwtPnhlbl9hcmctPnJldDsKPj4gKyAgICBndWVzdF9hcmctPnJldF9vcmlnaW4gPSBj YWxsLT54ZW5fYXJnLT5yZXRfb3JpZ2luOwo+PiArICAgIGd1ZXN0X2FyZy0+c2Vzc2lvbiA9IGNh bGwtPnhlbl9hcmctPnNlc3Npb247Cj4KPiBOSVQ6IG5ld2xpbmUgaGVyZSBwbGVhc2UuCj4KPj4g KyAgICBmb3IgKCBpID0gMDsgaSA8IGNhbGwtPnhlbl9hcmctPm51bV9wYXJhbXM7IGkrKyApCj4+ ICsgICAgewo+PiArICAgICAgICBhdHRyID0gY2FsbC0+eGVuX2FyZy0+cGFyYW1zW2ldLmF0dHI7 Cj4+ICsKPj4gKyAgICAgICAgc3dpdGNoICggYXR0ciAmIE9QVEVFX01TR19BVFRSX1RZUEVfTUFT SyApCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RN RU1fT1VUUFVUOgo+PiArICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfVE1FTV9JTk9V VDoKPj4gKyAgICAgICAgICAgIGd1ZXN0X2FyZy0+cGFyYW1zW2ldLnUudG1lbS5zaXplID0KPj4g KyAgICAgICAgICAgICAgICBjYWxsLT54ZW5fYXJnLT5wYXJhbXNbaV0udS50bWVtLnNpemU7Cj4+ ICsgICAgICAgICAgICBjb250aW51ZTsKPj4gKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9U WVBFX1ZBTFVFX09VVFBVVDoKPj4gKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZB TFVFX0lOT1VUOgo+PiArICAgICAgICAgICAgZ3Vlc3RfYXJnLT5wYXJhbXNbaV0udS52YWx1ZS5h ID0KPj4gKyAgICAgICAgICAgICAgICBjYWxsLT54ZW5fYXJnLT5wYXJhbXNbaV0udS52YWx1ZS5h Owo+PiArICAgICAgICAgICAgZ3Vlc3RfYXJnLT5wYXJhbXNbaV0udS52YWx1ZS5iID0KPj4gKyAg ICAgICAgICAgICAgICBjYWxsLT54ZW5fYXJnLT5wYXJhbXNbaV0udS52YWx1ZS5iOwo+PiArICAg ICAgICAgICAgY29udGludWU7Cj4+ICsgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9S TUVNX09VVFBVVDoKPj4gKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JNRU1fSU5P VVQ6Cj4+ICsgICAgICAgICAgICBndWVzdF9hcmctPnBhcmFtc1tpXS51LnJtZW0uc2l6ZSA9Cj4+ ICsgICAgICAgICAgICAgICAgY2FsbC0+eGVuX2FyZy0+cGFyYW1zW2ldLnUucm1lbS5zaXplOwo+ PiArICAgICAgICAgICAgY29udGludWU7Cj4+ICsgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJf VFlQRV9OT05FOgo+PiArICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfUk1FTV9JTlBV VDoKPj4gKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RNRU1fSU5QVVQ6Cj4+ICsg ICAgICAgICAgICBjb250aW51ZTsKPj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4gKwo+PiArICAg IHVubWFwX2RvbWFpbl9wYWdlKGd1ZXN0X2FyZyk7Cj4+ICsgICAgcHV0X3BhZ2UocGFnZSk7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGV4ZWN1dGVfc3RkX2NhbGwoc3RydWN0IG9wdGVlX2Rv bWFpbiAqY3R4LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3B1X3Vz ZXJfcmVncyAqcmVncywKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG9w dGVlX3N0ZF9jYWxsICpjYWxsKQo+PiArewo+PiArICAgIHJlZ2lzdGVyX3Qgb3B0ZWVfcmV0Owo+ PiArCj4+ICsgICAgZm9yd2FyZF9jYWxsKHJlZ3MpOwo+PiArCj4+ICsgICAgb3B0ZWVfcmV0ID0g Z2V0X3VzZXJfcmVnKHJlZ3MsIDApOwo+PiArICAgIGlmICggT1BURUVfU01DX1JFVFVSTl9JU19S UEMob3B0ZWVfcmV0KSApCj4+ICsgICAgewo+PiArICAgICAgICBjYWxsLT5vcHRlZV90aHJlYWRf aWQgPSBnZXRfdXNlcl9yZWcocmVncywgMyk7Cj4+ICsgICAgICAgIGNhbGwtPnJwY19vcCA9IE9Q VEVFX1NNQ19SRVRVUk5fR0VUX1JQQ19GVU5DKG9wdGVlX3JldCk7Cj4+ICsgICAgICAgIHB1dF9z dGRfY2FsbChjdHgsIGNhbGwpOwo+PiArICAgICAgICByZXR1cm47Cj4+ICsgICAgfQo+PiArCj4+ ICsgICAgY29weV9zdGRfcmVxdWVzdF9iYWNrKGN0eCwgcmVncywgY2FsbCk7Cj4+ICsKPj4gKyAg ICBwdXRfc3RkX2NhbGwoY3R4LCBjYWxsKTsKPj4gKyAgICBmcmVlX3N0ZF9jYWxsKGN0eCwgY2Fs bCk7Cj4+ICt9Cj4KPiBNb3N0IG9mIHRoZSBjb2RlIGluIHRoaXMgcGF0Y2ggaXMgc2VsZi1leHBs YWluaW5nLCB3aGljaCBpcyBxdWl0ZSBuaWNlCj4gOikuIEhvd2V2ZXIsIEkgdGhpbmsgdGhpcyBm dW5jdGlvbiB3b3VsZCByZXF1aXJlIGV4cGxhaW5pbmcgYSBiaXQgdGhlCj4gbG9naWMuIEZvciBp bnN0YW5jZSBpbiB3aGljaCBjYXNlIHRoZSBjYWxsIHdpbGwgYmUgZnJlZWQuClRoYW5rIHlvdSA6 KQpZZXMsIHRoaXMgZGVwZW5kcyBvbiBpZiBjYWxsIHdhcyBjb21wbGV0ZWQgb3IgaXQgd2FzIGlu dGVycnVwdGVkIGR1ZSB0bwpSUEMsIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSByZXN1bWVkIGxh dGVyLiBJJ2xsIGFkZCBjb21tZW50LgoKPj4gKwo+PiArc3RhdGljIGJvb2wgaGFuZGxlX3N0ZF9j YWxsKHN0cnVjdCBvcHRlZV9kb21haW4gKmN0eCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4gK3sKPj4gKyAgICBzdHJ1Y3Qgb3B0 ZWVfc3RkX2NhbGwgKmNhbGwgPSBhbGxvY2F0ZV9zdGRfY2FsbChjdHgpOwo+PiArCj4+ICsgICAg aWYgKCAhY2FsbCApCj4+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPj4gKwo+PiArICAgIGlmICgg IWNvcHlfc3RkX3JlcXVlc3QocmVncywgY2FsbCkgKQo+PiArICAgICAgICBnb3RvIGVycjsKPj4g Kwo+PiArICAgIC8qIE5vdyB3ZSBjYW4gc2FmZWx5IGV4YW1pbmUgY29udGVudHMgb2YgY29tbWFu ZCBidWZmZXIgKi8KPj4gKyAgICBpZiAoIE9QVEVFX01TR19HRVRfQVJHX1NJWkUoY2FsbC0+eGVu X2FyZy0+bnVtX3BhcmFtcykgPgo+PiArICAgICAgICAgT1BURUVfTVNHX05PTkNPTlRJR19QQUdF X1NJWkUgKQo+PiArICAgICAgICBnb3RvIGVycjsKPj4gKwo+PiArICAgIHN3aXRjaCAoIGNhbGwt Pnhlbl9hcmctPmNtZCApCj4+ICsgICAgewo+PiArICAgIGNhc2UgT1BURUVfTVNHX0NNRF9PUEVO X1NFU1NJT046Cj4+ICsgICAgY2FzZSBPUFRFRV9NU0dfQ01EX0NMT1NFX1NFU1NJT046Cj4+ICsg ICAgY2FzZSBPUFRFRV9NU0dfQ01EX0lOVk9LRV9DT01NQU5EOgo+PiArICAgIGNhc2UgT1BURUVf TVNHX0NNRF9DQU5DRUw6Cj4+ICsgICAgY2FzZSBPUFRFRV9NU0dfQ01EX1JFR0lTVEVSX1NITToK Pj4gKyAgICBjYXNlIE9QVEVFX01TR19DTURfVU5SRUdJU1RFUl9TSE06Cj4+ICsgICAgICAgIGJy ZWFrOwo+PiArICAgIGRlZmF1bHQ6Cj4+ICsgICAgICAgIGdvdG8gZXJyOwo+PiArICAgIH0KPj4g Kwo+PiArICAgIGV4ZWN1dGVfc3RkX2NhbGwoY3R4LCByZWdzLCBjYWxsKTsKPj4gKwo+PiArICAg IHJldHVybiB0cnVlOwo+Cj4gVGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBvZGQgdG8gcmVhZC4gSSB0 aGluayBpdCB3b3VsZCBiZSBtb3JlIGNsZWFyIGlmCj4geW91IG1vdmUgdGhpcyBjb2RlIGJlZm9y ZSB0aGUgYnJlYWsuClllcywgeW91IGFyZSByaWdodC4KCj4+ICsKPj4gK2VycjoKPj4gKyAgICBw dXRfc3RkX2NhbGwoY3R4LCBjYWxsKTsKPj4gKyAgICBmcmVlX3N0ZF9jYWxsKGN0eCwgY2FsbCk7 Cj4+ICsKPj4gKyAgICByZXR1cm4gZmFsc2U7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBib29sIGhh bmRsZV9ycGMoc3RydWN0IG9wdGVlX2RvbWFpbiAqY3R4LCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAq cmVncykKPj4gK3sKPj4gKyAgICBzdHJ1Y3Qgb3B0ZWVfc3RkX2NhbGwgKmNhbGw7Cj4+ICsgICAg aW50IG9wdGVlX3RocmVhZF9pZCA9IGdldF91c2VyX3JlZyhyZWdzLCAzKTsKPj4gKwo+PiArICAg IGNhbGwgPSBnZXRfc3RkX2NhbGwoY3R4LCBvcHRlZV90aHJlYWRfaWQpOwo+PiArCj4+ICsgICAg aWYgKCAhY2FsbCApCj4+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPj4gKwo+PiArICAgIHN3aXRj aCAoIGNhbGwtPnJwY19vcCApCj4+ICsgICAgewo+PiArICAgIGNhc2UgT1BURUVfU01DX1JQQ19G VU5DX0FMTE9DOgo+PiArICAgICAgICAvKiBUT0RPOiBBZGQgaGFuZGxpbmcgKi8KPj4gKyAgICAg ICAgYnJlYWs7Cj4+ICsgICAgY2FzZSBPUFRFRV9TTUNfUlBDX0ZVTkNfRlJFRToKPj4gKyAgICAg ICAgLyogVE9ETzogQWRkIGhhbmRsaW5nICovCj4+ICsgICAgICAgIGJyZWFrOwo+PiArICAgIGNh c2UgT1BURUVfU01DX1JQQ19GVU5DX0ZPUkVJR05fSU5UUjoKPj4gKyAgICAgICAgYnJlYWs7Cj4+ ICsgICAgY2FzZSBPUFRFRV9TTUNfUlBDX0ZVTkNfQ01EOgo+PiArICAgICAgICAvKiBUT0RPOiBB ZGQgaGFuZGxpbmcgKi8KPj4gKyAgICAgICAgYnJlYWs7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAg ZXhlY3V0ZV9zdGRfY2FsbChjdHgsIHJlZ3MsIGNhbGwpOwo+PiArICAgIHJldHVybiB0cnVlOwo+ PiAgIH0KPj4gICAgIHN0YXRpYyBib29sIGhhbmRsZV9leGNoYW5nZV9jYXBhYmlsaXRpZXMoc3Ry dWN0IGNwdV91c2VyX3JlZ3MKPj4gKnJlZ3MpCj4+IEBAIC0xNjEsNiArNDcyLDggQEAgc3RhdGlj IGJvb2wgaGFuZGxlX2V4Y2hhbmdlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgY3B1X3VzZXJfcmVncyAq cmVncykKPj4gICAgIHN0YXRpYyBib29sIG9wdGVlX2hhbmRsZV9jYWxsKHN0cnVjdCBjcHVfdXNl cl9yZWdzICpyZWdzKQo+PiAgIHsKPj4gKyAgICBzdHJ1Y3Qgb3B0ZWVfZG9tYWluICpjdHggPSBj dXJyZW50LT5kb21haW4tPmFyY2gudGVlOwo+PiArCj4+ICAgICAgIHN3aXRjaCAoIGdldF91c2Vy X3JlZyhyZWdzLCAwKSApCj4+ICAgICAgIHsKPj4gICAgICAgY2FzZSBPUFRFRV9TTUNfQ0FMTFNf Q09VTlQ6Cj4+IEBAIC0xNzAsOCArNDgzLDYgQEAgc3RhdGljIGJvb2wgb3B0ZWVfaGFuZGxlX2Nh bGwoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCj4+ICAgICAgIGNhc2UgT1BURUVfU01DX0ZV TkNJRF9HRVRfT1NfUkVWSVNJT046Cj4+ICAgICAgIGNhc2UgT1BURUVfU01DX0VOQUJMRV9TSE1f Q0FDSEU6Cj4+ICAgICAgIGNhc2UgT1BURUVfU01DX0RJU0FCTEVfU0hNX0NBQ0hFOgo+PiAtICAg IGNhc2UgT1BURUVfU01DX0NBTExfV0lUSF9BUkc6Cj4+IC0gICAgY2FzZSBPUFRFRV9TTUNfQ0FM TF9SRVRVUk5fRlJPTV9SUEM6Cj4+ICAgICAgICAgICBmb3J3YXJkX2NhbGwocmVncyk7Cj4+ICAg ICAgICAgICByZXR1cm4gdHJ1ZTsKPj4gICAgICAgY2FzZSBPUFRFRV9TTUNfR0VUX1NITV9DT05G SUc6Cj4+IEBAIC0xODAsNiArNDkxLDEwIEBAIHN0YXRpYyBib29sIG9wdGVlX2hhbmRsZV9jYWxs KHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQo+PiAgICAgICAgICAgcmV0dXJuIHRydWU7Cj4+ ICAgICAgIGNhc2UgT1BURUVfU01DX0VYQ0hBTkdFX0NBUEFCSUxJVElFUzoKPj4gICAgICAgICAg IHJldHVybiBoYW5kbGVfZXhjaGFuZ2VfY2FwYWJpbGl0aWVzKHJlZ3MpOwo+PiArICAgIGNhc2Ug T1BURUVfU01DX0NBTExfV0lUSF9BUkc6Cj4+ICsgICAgICAgIHJldHVybiBoYW5kbGVfc3RkX2Nh bGwoY3R4LCByZWdzKTsKPj4gKyAgICBjYXNlIE9QVEVFX1NNQ19DQUxMX1JFVFVSTl9GUk9NX1JQ QzoKPj4gKyAgICAgICAgcmV0dXJuIGhhbmRsZV9ycGMoY3R4LCByZWdzKTsKPj4gICAgICAgZGVm YXVsdDoKPj4gICAgICAgICAgIHJldHVybiBmYWxzZTsKPj4gICAgICAgfQo+PiBkaWZmIC0tZ2l0 IGEveGVuL2luY2x1ZGUvYXNtLWFybS9kb21haW4uaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vZG9t YWluLmgKPj4gaW5kZXggMTc1ZGU0NDkyNy4uODhiNDg2OTdiZCAxMDA2NDQKPj4gLS0tIGEveGVu L2luY2x1ZGUvYXNtLWFybS9kb21haW4uaAo+PiArKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL2Rv bWFpbi5oCj4+IEBAIC05Nyw2ICs5Nyw5IEBAIHN0cnVjdCBhcmNoX2RvbWFpbgo+PiAgICAgICBz dHJ1Y3QgdnBsMDExIHZwbDAxMTsKPj4gICAjZW5kaWYKPj4gICArI2lmZGVmIENPTkZJR19URUUK Pj4gKyAgICB2b2lkICp0ZWU7Cj4+ICsjZW5kaWYKPgo+IERpZCB5b3UgbG9vayB3aGV0aGVyIHRo ZXJlIGFyZSBhbnkgaG9sZSBpbiBhcmNoX2RvbWFpbiB0aGF0IGNvdWxkIGJlIHJlLXVzZWQ/Ckkg dGhvdWdodCBhYm91dCB0aGF0LiBCdXQgd2hhdCBhcmUgY2hhbmNlcyB0byBmaW5kIDY0Yml0LXdp ZGUsCjY0Yml0LWFsaWduZWQgaG9sZSBpbiBhIHN0cnVjdHVyZT8gSWYgSSByZW1lbWJlciBDIHN0 YW5kYXJkIGNvcnJlY3RseSwKdGhlcmUgYXJlIG5vIHJlYXNvbnMgZm9yIGNvbXBpbGVyIHRvIGxl YXZlIHN1Y2ggaG9sZXMuCgpJJ20gdGFsa2luZyBhYm91dCBhYXJjaDY0IHRoZXJlLCBidXQgSSBh c3N1bWUsIHRoYXQgdGhpcyBpcyB0cnVlIGZvciBhYXJjaDMyL2FybXY3LgoKPj4gICB9ICBfX2Nh Y2hlbGluZV9hbGlnbmVkOwo+PiAgICAgc3RydWN0IGFyY2hfdmNwdQo+Pgo+Cj4gQ2hlZXJzLAoK Ci0tCkJlc3QgcmVnYXJkcyxWb2xvZHlteXIgQmFiY2h1awpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt YW4vbGlzdGluZm8veGVuLWRldmVs