From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex =?utf-8?Q?Benn=C3=A9e?= Subject: Re: [PATCH v3 2/4] VSOCK: Introduce virtio-vsock.ko Date: Thu, 10 Dec 2015 21:23:25 +0000 Message-ID: <87io46ov5e.fsf@linaro.org> References: <1449662633-26623-1-git-send-email-stefanha@redhat.com> <1449662633-26623-3-git-send-email-stefanha@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: kvm@vger.kernel.org, "Michael S. Tsirkin" , netdev@vger.kernel.org, virtualization@lists.linux-foundation.org, Matt Benjamin , Asias He , Christoffer Dall , matt.ma@linaro.org To: Stefan Hajnoczi Return-path: In-reply-to: <1449662633-26623-3-git-send-email-stefanha@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org List-Id: netdev.vger.kernel.org ClN0ZWZhbiBIYWpub2N6aSA8c3RlZmFuaGFAcmVkaGF0LmNvbT4gd3JpdGVzOgoKPiBGcm9tOiBB c2lhcyBIZSA8YXNpYXNAcmVkaGF0LmNvbT4KPgo+IFZNIHNvY2tldHMgdmlydGlvIHRyYW5zcG9y dCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBtb2R1bGUgcnVucyBpbiBndWVzdAo+IGtlcm5lbC4KCmNo ZWNrcGF0Y2ggd2FybnMgb24gYSBidW5jaCBvZiB3aGl0ZXNwYWNlL3RhYiBpc3N1ZXMuCgo+Cj4g U2lnbmVkLW9mZi1ieTogQXNpYXMgSGUgPGFzaWFzQHJlZGhhdC5jb20+Cj4gU2lnbmVkLW9mZi1i eTogU3RlZmFuIEhham5vY3ppIDxzdGVmYW5oYUByZWRoYXQuY29tPgo+IC0tLQo+IHYyOgo+ICAq IEZpeCB0b3RhbF90eF9idWYgYWNjb3VudGluZwo+ICAqIEFkZCB2aXJ0aW9fdHJhbnNwb3J0IGds b2JhbCBtdXRleCB0byBwcmV2ZW50IHJhY2VzCj4gLS0tCj4gIG5ldC92bXdfdnNvY2svdmlydGlv X3RyYW5zcG9ydC5jIHwgNDY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ICAxIGZpbGUgY2hhbmdlZCwgNDY2IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IG5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jCj4KPiBkaWZmIC0tZ2l0IGEvbmV0 L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFu c3BvcnQuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZGY2NWRjYQo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYwo+ IEBAIC0wLDAgKzEsNDY2IEBACj4gKy8qCj4gKyAqIHZpcnRpbyB0cmFuc3BvcnQgZm9yIHZzb2Nr Cj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IFJlZCBIYXQsIEluYy4KPiArICog QXV0aG9yOiBBc2lhcyBIZSA8YXNpYXNAcmVkaGF0LmNvbT4KPiArICogICAgICAgICBTdGVmYW4g SGFqbm9jemkgPHN0ZWZhbmhhQHJlZGhhdC5jb20+Cj4gKyAqCj4gKyAqIFNvbWUgb2YgdGhlIGNv ZGUgaXMgdGFrZSBmcm9tIEdlcmQgSG9mZm1hbm4gPGtyYXhlbEByZWRoYXQuY29tPidzCj4gKyAq IGVhcmx5IHZpcnRpby12c29jayBwcm9vZi1vZi1jb25jZXB0IGJpdHMuCj4gKyAqCj4gKyAqIFRo aXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNp b24gMi4KPiArICovCj4gKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgo+ICsjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4gKyNpbmNsdWRlIDxs aW51eC92aXJ0aW8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb192c29j ay5oPgo+ICsjaW5jbHVkZSA8bmV0L3NvY2suaD4KPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+ Cj4gKyNpbmNsdWRlIDxuZXQvYWZfdnNvY2suaD4KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1 ZXVlX3N0cnVjdCAqdmlydGlvX3Zzb2NrX3dvcmtxdWV1ZTsKPiArc3RhdGljIHN0cnVjdCB2aXJ0 aW9fdnNvY2sgKnRoZV92aXJ0aW9fdnNvY2s7Cj4gK3N0YXRpYyBERUZJTkVfTVVURVgodGhlX3Zp cnRpb192c29ja19tdXRleCk7IC8qIHByb3RlY3RzIHRoZV92aXJ0aW9fdnNvY2sgKi8KPiArc3Rh dGljIHZvaWQgdmlydGlvX3Zzb2NrX3J4X2ZpbGwoc3RydWN0IHZpcnRpb192c29jayAqdnNvY2sp Owo+ICsKPiArc3RydWN0IHZpcnRpb192c29jayB7Cj4gKwkvKiBWaXJ0aW8gZGV2aWNlICovCj4g KwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKPiArCS8qIFZpcnRpbyB2aXJ0cXVldWUgKi8K PiArCXN0cnVjdCB2aXJ0cXVldWUgKnZxc1tWU09DS19WUV9NQVhdOwo+ICsJLyogV2FpdCBxdWV1 ZSBmb3Igc2VuZCBwa3QgKi8KPiArCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlX3dhaXQ7Cj4gKwkv KiBXb3JrIGl0ZW0gdG8gc2VuZCBwa3QgKi8KPiArCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF93b3Jr Owo+ICsJLyogV29yayBpdGVtIHRvIHJlY3YgcGt0ICovCj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qg cnhfd29yazsKPiArCS8qIE11dGV4IHRvIHByb3RlY3Qgc2VuZCBwa3QqLwo+ICsJc3RydWN0IG11 dGV4IHR4X2xvY2s7Cj4gKwkvKiBNdXRleCB0byBwcm90ZWN0IHJlY3YgcGt0Ki8KPiArCXN0cnVj dCBtdXRleCByeF9sb2NrOwoKRnVydGhlciBkb3duIEkgZ290IGNvbmZ1c2VkIGJ5IHdoYXQgbG9j ayB3YXMgd2hhdCBhbmQgZXhhY3RseSB3aGF0IHdhcwpiZWluZyBwcm90ZWN0ZWQuIElmIHRoZSBy ZWNlaXZlIGFuZCB0cmFuc21pdCBwYXRocyB0b3VjaCBzZXBhcmF0ZSB0aGluZ3MKaXQgbWlnaHQg YmUgd29ydGggcmUtYXJyYW5naW5nIHRoZSBzdHJ1Y3R1cmUgdG8gbWFrZSBpdCBjbGVhcmVyLCBl ZzoKCiAgIC8qIFRoZSB0cmFuc21pdCBwYXRoIGlzIHByb3RlY3RlZCBieSB0eF9sb2NrICovCiAg IHN0cnVjdCBtdXRleCB0eF9sb2NrOwogICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfd29yazsKICAg Li4KICAgLi4KCiAgIC8qIFRoZSByZWNlaXZlIHBhdGggaXMgcHJvdGVjdGVkIGJ5IHJ4X2xvY2sg Ki8KICAgd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWVfd2FpdDsKICAgLi4KICAgLi4KCiBXaGljaCBt aWdodCBtYWtlIHRoaW5ncyBhIGxpdHRsZSBjbGVhcmVyLiBUaGVuIGFsbCB0aGUgcmVkdW5kYW50 CiBpbmZvcm1hdGlvbiBpbiB0aGUgY29tbWVudHMgY2FuIGJlIHJlbW92ZWQuIEkgZG9uJ3QgbmVl ZCB0byBrbm93IHdoYXQKIGlzIGEgVmlydGlvIGRldmljZSwgdmlydHF1ZXVlIG9yIHdhaXRfcXVl dWUgZXRjIGFzIHRoZXkgYXJlIGltcGxpY2l0IGluCiB0aGUgc3RydWN0dXJlIG5hbWUuCgo+ICsJ LyogTnVtYmVyIG9mIHJlY3YgYnVmZmVycyAqLwo+ICsJaW50IHJ4X2J1Zl9ucjsKPiArCS8qIE51 bWJlciBvZiBtYXggcmVjdiBidWZmZXJzICovCj4gKwlpbnQgcnhfYnVmX21heF9ucjsKPiArCS8q IFVzZWQgZm9yIGdsb2JhbCB0eCBidWYgbGltaXRhdGlvbiAqLwo+ICsJdTMyIHRvdGFsX3R4X2J1 ZjsKPiArCS8qIEd1ZXN0IGNvbnRleHQgaWQsIGp1c3QgbGlrZSBndWVzdCBpcCBhZGRyZXNzICov Cj4gKwl1MzIgZ3Vlc3RfY2lkOwo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCB2aXJ0aW9fdnNv Y2sgKnZpcnRpb192c29ja19nZXQodm9pZCkKPiArewo+ICsJcmV0dXJuIHRoZV92aXJ0aW9fdnNv Y2s7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgdmlydGlvX3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lk KHZvaWQpCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fdnNvY2sgKnZzb2NrID0gdmlydGlvX3Zzb2Nr X2dldCgpOwo+ICsKPiArCXJldHVybiB2c29jay0+Z3Vlc3RfY2lkOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50Cj4gK3ZpcnRpb190cmFuc3BvcnRfc2VuZF9wa3Qoc3RydWN0IHZzb2NrX3NvY2sgKnZz aywKPiArCQkJICBzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvKQo+ICt7Cj4gKwl1 MzIgc3JjX2NpZCwgc3JjX3BvcnQsIGRzdF9jaWQsIGRzdF9wb3J0Owo+ICsJaW50IHJldCwgaW5f c2cgPSAwLCBvdXRfc2cgPSAwOwo+ICsJc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnRyYW5zOwo+ ICsJc3RydWN0IHZpcnRpb192c29ja19wa3QgKnBrdDsKPiArCXN0cnVjdCB2aXJ0aW9fdnNvY2sg KnZzb2NrOwo+ICsJc3RydWN0IHNjYXR0ZXJsaXN0IGhkciwgYnVmLCAqc2dzWzJdOwo+ICsJc3Ry dWN0IHZpcnRxdWV1ZSAqdnE7Cj4gKwl1MzIgcGt0X2xlbiA9IGluZm8tPnBrdF9sZW47Cj4gKwlE RUZJTkVfV0FJVCh3YWl0KTsKPiArCj4gKwl2c29jayA9IHZpcnRpb192c29ja19nZXQoKTsKPiAr CWlmICghdnNvY2spCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJc3JjX2NpZAk9IHZpcnRp b190cmFuc3BvcnRfZ2V0X2xvY2FsX2NpZCgpOwo+ICsJc3JjX3BvcnQgPSB2c2stPmxvY2FsX2Fk ZHIuc3ZtX3BvcnQ7Cj4gKwlpZiAoIWluZm8tPnJlbW90ZV9jaWQpIHsKPiArCQlkc3RfY2lkCT0g dnNrLT5yZW1vdGVfYWRkci5zdm1fY2lkOwo+ICsJCWRzdF9wb3J0ID0gdnNrLT5yZW1vdGVfYWRk ci5zdm1fcG9ydDsKPiArCX0gZWxzZSB7Cj4gKwkJZHN0X2NpZCA9IGluZm8tPnJlbW90ZV9jaWQ7 Cj4gKwkJZHN0X3BvcnQgPSBpbmZvLT5yZW1vdGVfcG9ydDsKPiArCX0KPiArCj4gKwl0cmFucyA9 IHZzay0+dHJhbnM7Cj4gKwl2cSA9IHZzb2NrLT52cXNbVlNPQ0tfVlFfVFhdOwo+ICsKPiArCWlm IChwa3RfbGVuID4gVklSVElPX1ZTT0NLX0RFRkFVTFRfUlhfQlVGX1NJWkUpCj4gKwkJcGt0X2xl biA9IFZJUlRJT19WU09DS19ERUZBVUxUX1JYX0JVRl9TSVpFOwo+ICsJcGt0X2xlbiA9IHZpcnRp b190cmFuc3BvcnRfZ2V0X2NyZWRpdCh0cmFucywgcGt0X2xlbik7Cj4gKwkvKiBEbyBub3Qgc2Vu ZCB6ZXJvIGxlbmd0aCBPUF9SVyBwa3QqLwo+ICsJaWYgKHBrdF9sZW4gPT0gMCAmJiBpbmZvLT5v cCA9PSBWSVJUSU9fVlNPQ0tfT1BfUlcpCj4gKwkJcmV0dXJuIHBrdF9sZW47Cj4gKwo+ICsJLyog UmVzcGVjdCBnbG9iYWwgdHggYnVmIGxpbWl0YXRpb24gKi8KPiArCW11dGV4X2xvY2soJnZzb2Nr LT50eF9sb2NrKTsKPiArCXdoaWxlIChwa3RfbGVuICsgdnNvY2stPnRvdGFsX3R4X2J1ZiA+IFZJ UlRJT19WU09DS19NQVhfVFhfQlVGX1NJWkUpIHsKPiArCQlwcmVwYXJlX3RvX3dhaXRfZXhjbHVz aXZlKCZ2c29jay0+cXVldWVfd2FpdCwgJndhaXQsCj4gKwkJCQkJICBUQVNLX1VOSU5URVJSVVBU SUJMRSk7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZ2c29jay0+dHhfbG9jayk7Cj4gKwkJc2NoZWR1bGUo KTsKPiArCQltdXRleF9sb2NrKCZ2c29jay0+dHhfbG9jayk7Cj4gKwkJZmluaXNoX3dhaXQoJnZz b2NrLT5xdWV1ZV93YWl0LCAmd2FpdCk7Cj4gKwl9Cj4gKwl2c29jay0+dG90YWxfdHhfYnVmICs9 IHBrdF9sZW47Cj4gKwltdXRleF91bmxvY2soJnZzb2NrLT50eF9sb2NrKTsKPiArCj4gKwlwa3Qg PSB2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3BrdCh2c2ssIGluZm8sIHBrdF9sZW4sCj4gKwkJCQkJ IHNyY19jaWQsIHNyY19wb3J0LAo+ICsJCQkJCSBkc3RfY2lkLCBkc3RfcG9ydCk7Cj4gKwlpZiAo IXBrdCkgewo+ICsJCW11dGV4X2xvY2soJnZzb2NrLT50eF9sb2NrKTsKPiArCQl2c29jay0+dG90 YWxfdHhfYnVmIC09IHBrdF9sZW47Cj4gKwkJbXV0ZXhfdW5sb2NrKCZ2c29jay0+dHhfbG9jayk7 Cj4gKwkJdmlydGlvX3RyYW5zcG9ydF9wdXRfY3JlZGl0KHRyYW5zLCBwa3RfbGVuKTsKPiArCQly ZXR1cm4gLUVOT01FTTsKPiArCX0KPiArCj4gKwlwcl9kZWJ1ZygiJXM6aW5mby0+cGt0X2xlbj0g JWRcbiIsIF9fZnVuY19fLCBpbmZvLT5wa3RfbGVuKTsKPiArCj4gKwkvKiBXaWxsIGJlIHJlbGVh c2VkIGluIHZpcnRpb190cmFuc3BvcnRfc2VuZF9wa3Rfd29yayAqLwo+ICsJc29ja19ob2xkKCZ0 cmFucy0+dnNrLT5zayk7Cj4gKwl2aXJ0aW9fdHJhbnNwb3J0X2luY190eF9wa3QocGt0KTsKPiAr Cj4gKwkvKiBQdXQgcGt0IGluIHRoZSB2aXJ0cXVldWUgKi8KPiArCXNnX2luaXRfb25lKCZoZHIs ICZwa3QtPmhkciwgc2l6ZW9mKHBrdC0+aGRyKSk7Cj4gKwlzZ3Nbb3V0X3NnKytdID0gJmhkcjsK PiArCWlmIChpbmZvLT5tc2cgJiYgaW5mby0+cGt0X2xlbiA+IDApIHsKPiArCQlzZ19pbml0X29u ZSgmYnVmLCBwa3QtPmJ1ZiwgcGt0LT5sZW4pOwo+ICsJICAgICAgICBzZ3Nbb3V0X3NnKytdID0g JmJ1ZjsKPiArCX0KPiArCj4gKwltdXRleF9sb2NrKCZ2c29jay0+dHhfbG9jayk7Cj4gKwl3aGls ZSAoKHJldCA9IHZpcnRxdWV1ZV9hZGRfc2dzKHZxLCBzZ3MsIG91dF9zZywgaW5fc2csIHBrdCwK PiArCQkJCQlHRlBfS0VSTkVMKSkgPCAwKSB7Cj4gKwkJcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2 ZSgmdnNvY2stPnF1ZXVlX3dhaXQsICZ3YWl0LAo+ICsJCQkJCSAgVEFTS19VTklOVEVSUlVQVElC TEUpOwo+ICsJCW11dGV4X3VubG9jaygmdnNvY2stPnR4X2xvY2spOwo+ICsJCXNjaGVkdWxlKCk7 Cj4gKwkJbXV0ZXhfbG9jaygmdnNvY2stPnR4X2xvY2spOwo+ICsJCWZpbmlzaF93YWl0KCZ2c29j ay0+cXVldWVfd2FpdCwgJndhaXQpOwo+ICsJfQo+ICsJdmlydHF1ZXVlX2tpY2sodnEpOwo+ICsJ bXV0ZXhfdW5sb2NrKCZ2c29jay0+dHhfbG9jayk7CgpXaGF0IGFyZSB3ZSBwcm90ZWN0aW5nIHdp dGggdHhfbG9jayBoZXJlPyBTZWUgY29tbWVudHMgYWJvdmUgYWJvdXQKbWFraW5nIHRoZSBsb2Nr IHVzYWdlIHNlbWFudGljcyBjbGVhcmVyLgoKPiArCj4gKwlyZXR1cm4gcGt0X2xlbjsKPiArfQo+ ICsKPiArc3RhdGljIHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0X3BrdF9vcHMgdmlydGlvX29wcyA9 IHsKPiArCS5zZW5kX3BrdCA9IHZpcnRpb190cmFuc3BvcnRfc2VuZF9wa3QsCj4gK307Cj4gKwo+ ICtzdGF0aWMgdm9pZCB2aXJ0aW9fdnNvY2tfcnhfZmlsbChzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2 c29jaykKPiArewo+ICsJaW50IGJ1Zl9sZW4gPSBWSVJUSU9fVlNPQ0tfREVGQVVMVF9SWF9CVUZf U0laRTsKPiArCXN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0ICpwa3Q7Cj4gKwlzdHJ1Y3Qgc2NhdHRl cmxpc3QgaGRyLCBidWYsICpzZ3NbMl07Cj4gKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJdnEgPSB2c29jay0+dnFzW1ZTT0NLX1ZRX1JYXTsKPiArCj4gKwlkbyB7 Cj4gKwkJcGt0ID0ga3phbGxvYyhzaXplb2YoKnBrdCksIEdGUF9LRVJORUwpOwo+ICsJCWlmICgh cGt0KSB7Cj4gKwkJCXByX2RlYnVnKCIlczogZmFpbCB0byBhbGxvY2F0ZSBwa3RcbiIsIF9fZnVu Y19fKTsKPiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICsKPiArCQkvKiBUT0RPOiB1c2UgbWVyZ2Vh YmxlIHJ4IGJ1ZmZlciAqLwoKVE9ETydzIHNob3VsZCBlbmQgdXAgaW4gbWVyZ2VkIGNvZGUuCgo+ ICsJCXBrdC0+YnVmID0ga21hbGxvYyhidWZfbGVuLCBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIXBr dC0+YnVmKSB7Cj4gKwkJCXByX2RlYnVnKCIlczogZmFpbCB0byBhbGxvY2F0ZSBwa3QtPmJ1Zlxu IiwgX19mdW5jX18pOwo+ICsJCQlnb3RvIGVycjsKPiArCQl9Cj4gKwo+ICsJCXNnX2luaXRfb25l KCZoZHIsICZwa3QtPmhkciwgc2l6ZW9mKHBrdC0+aGRyKSk7Cj4gKwkJc2dzWzBdID0gJmhkcjsK PiArCj4gKwkJc2dfaW5pdF9vbmUoJmJ1ZiwgcGt0LT5idWYsIGJ1Zl9sZW4pOwo+ICsJICAgICAg ICBzZ3NbMV0gPSAmYnVmOwo+ICsJCXJldCA9IHZpcnRxdWV1ZV9hZGRfc2dzKHZxLCBzZ3MsIDAs IDIsIHBrdCwgR0ZQX0tFUk5FTCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBlcnI7Cj4gKwkJ dnNvY2stPnJ4X2J1Zl9ucisrOwo+ICsJfSB3aGlsZSAodnEtPm51bV9mcmVlKTsKPiArCWlmICh2 c29jay0+cnhfYnVmX25yID4gdnNvY2stPnJ4X2J1Zl9tYXhfbnIpCj4gKwkJdnNvY2stPnJ4X2J1 Zl9tYXhfbnIgPSB2c29jay0+cnhfYnVmX25yOwo+ICtvdXQ6Cj4gKwl2aXJ0cXVldWVfa2ljayh2 cSk7Cj4gKwlyZXR1cm47Cj4gK2VycjoKPiArCXZpcnRxdWV1ZV9raWNrKHZxKTsKPiArCXZpcnRp b190cmFuc3BvcnRfZnJlZV9wa3QocGt0KTsKCllvdSBjb3VsZCBmcmVlIHRoZSBwa3QgbWVtb3J5 IGF0IHRoZSBmYWlsIHNpdGUgYW5kIGp1c3QgaGF2ZSBvbmUgZXhpdCBwYXRoLgoKPiArCXJldHVy bjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9zZW5kX3BrdF93b3Jr KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiArewo+ICsJc3RydWN0IHZpcnRpb192c29jayAq dnNvY2sgPQo+ICsJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdmlydGlvX3Zzb2NrLCB0eF93 b3JrKTsKPiArCXN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0ICpwa3Q7Cj4gKwlib29sIGFkZGVkID0g ZmFsc2U7Cj4gKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKPiArCXVuc2lnbmVkIGludCBsZW47Cj4g KwlzdHJ1Y3Qgc29jayAqc2s7Cj4gKwo+ICsJdnEgPSB2c29jay0+dnFzW1ZTT0NLX1ZRX1RYXTsK PiArCW11dGV4X2xvY2soJnZzb2NrLT50eF9sb2NrKTsKPiArCWRvIHsKCllvdSBjYW4gbW92ZSB0 aGUgZGVjbGFyYXRpb25zIG9mIHBrdC9sZW4gaW50byB0aGUgZG8gYmxvY2suCgo+ICsJCXZpcnRx dWV1ZV9kaXNhYmxlX2NiKHZxKTsKPiArCQl3aGlsZSAoKHBrdCA9IHZpcnRxdWV1ZV9nZXRfYnVm KHZxLCAmbGVuKSkgIT0gTlVMTCkgewoKQW5kIHRoZSBzayBkZWNsYXJhdGlvbiBoZXJlCgo+ICsJ CQlzayA9ICZwa3QtPnRyYW5zLT52c2stPnNrOwo+ICsJCQl2aXJ0aW9fdHJhbnNwb3J0X2RlY190 eF9wa3QocGt0KTsKPiArCQkJLyogUmVsZWFzZSByZWZjbnQgdGFrZW4gaW4gdmlydGlvX3RyYW5z cG9ydF9zZW5kX3BrdCAqLwo+ICsJCQlzb2NrX3B1dChzayk7Cj4gKwkJCXZzb2NrLT50b3RhbF90 eF9idWYgLT0gcGt0LT5sZW47Cj4gKwkJCXZpcnRpb190cmFuc3BvcnRfZnJlZV9wa3QocGt0KTsK PiArCQkJYWRkZWQgPSB0cnVlOwo+ICsJCX0KPiArCX0gd2hpbGUgKCF2aXJ0cXVldWVfZW5hYmxl X2NiKHZxKSk7Cj4gKwltdXRleF91bmxvY2soJnZzb2NrLT50eF9sb2NrKTsKPiArCj4gKwlpZiAo YWRkZWQpCj4gKwkJd2FrZV91cCgmdnNvY2stPnF1ZXVlX3dhaXQpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jayA9Cj4gKwkJY29udGFp bmVyX29mKHdvcmssIHN0cnVjdCB2aXJ0aW9fdnNvY2ssIHJ4X3dvcmspOwo+ICsJc3RydWN0IHZp cnRpb192c29ja19wa3QgKnBrdDsKPiArCXN0cnVjdCB2aXJ0cXVldWUgKnZxOwo+ICsJdW5zaWdu ZWQgaW50IGxlbjsKClNhbWUgYXMgYWJvdmUgZm9yIHBrdCwgbGVuLgoKPiArCj4gKwl2cSA9IHZz b2NrLT52cXNbVlNPQ0tfVlFfUlhdOwo+ICsJbXV0ZXhfbG9jaygmdnNvY2stPnJ4X2xvY2spOwo+ ICsJZG8gewo+ICsJCXZpcnRxdWV1ZV9kaXNhYmxlX2NiKHZxKTsKPiArCQl3aGlsZSAoKHBrdCA9 IHZpcnRxdWV1ZV9nZXRfYnVmKHZxLCAmbGVuKSkgIT0gTlVMTCkgewo+ICsJCQlwa3QtPmxlbiA9 IGxlbjsKPiArCQkJdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChwa3QpOwo+ICsJCQl2c29jay0+ cnhfYnVmX25yLS07Cj4gKwkJfQo+ICsJfSB3aGlsZSAoIXZpcnRxdWV1ZV9lbmFibGVfY2IodnEp KTsKPiArCj4gKwlpZiAodnNvY2stPnJ4X2J1Zl9uciA8IHZzb2NrLT5yeF9idWZfbWF4X25yIC8g MikKPiArCQl2aXJ0aW9fdnNvY2tfcnhfZmlsbCh2c29jayk7Cj4gKwltdXRleF91bmxvY2soJnZz b2NrLT5yeF9sb2NrKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX3Zzb2NrX2N0cmxf ZG9uZShzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKPiArewo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2 aXJ0aW9fdnNvY2tfdHhfZG9uZShzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKPiArewo+ICsJc3RydWN0 IHZpcnRpb192c29jayAqdnNvY2sgPSB2cS0+dmRldi0+cHJpdjsKPiArCj4gKwlpZiAoIXZzb2Nr KQo+ICsJCXJldHVybjsKPiArCXF1ZXVlX3dvcmsodmlydGlvX3Zzb2NrX3dvcmtxdWV1ZSwgJnZz b2NrLT50eF93b3JrKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX3Zzb2NrX3J4X2Rv bmUoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fdnNvY2sgKnZz b2NrID0gdnEtPnZkZXYtPnByaXY7Cj4gKwo+ICsJaWYgKCF2c29jaykKPiArCQlyZXR1cm47Cj4g KwlxdWV1ZV93b3JrKHZpcnRpb192c29ja193b3JrcXVldWUsICZ2c29jay0+cnhfd29yayk7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQKPiArdmlydGlvX3RyYW5zcG9ydF9zb2NrZXRfaW5pdChzdHJ1 Y3QgdnNvY2tfc29jayAqdnNrLCBzdHJ1Y3QgdnNvY2tfc29jayAqcHNrKQo+ICt7Cj4gKwlzdHJ1 Y3QgdmlydGlvX3RyYW5zcG9ydCAqdHJhbnM7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHZp cnRpb190cmFuc3BvcnRfZG9fc29ja2V0X2luaXQodnNrLCBwc2spOwo+ICsJaWYgKHJldCkKPiAr CQlyZXR1cm4gcmV0Owo+ICsKPiArCXRyYW5zID0gdnNrLT50cmFuczsKPiArCXRyYW5zLT5vcHMg PSAmdmlydGlvX29wczsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg dnNvY2tfdHJhbnNwb3J0IHZpcnRpb190cmFuc3BvcnQgPSB7Cj4gKwkuZ2V0X2xvY2FsX2NpZCAg ICAgICAgICAgID0gdmlydGlvX3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkLAo+ICsKPiArCS5pbml0 ICAgICAgICAgICAgICAgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X3NvY2tldF9pbml0LAo+ICsJ LmRlc3RydWN0ICAgICAgICAgICAgICAgICA9IHZpcnRpb190cmFuc3BvcnRfZGVzdHJ1Y3QsCj4g KwkucmVsZWFzZSAgICAgICAgICAgICAgICAgID0gdmlydGlvX3RyYW5zcG9ydF9yZWxlYXNlLAo+ ICsJLmNvbm5lY3QgICAgICAgICAgICAgICAgICA9IHZpcnRpb190cmFuc3BvcnRfY29ubmVjdCwK PiArCS5zaHV0ZG93biAgICAgICAgICAgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X3NodXRkb3du LAo+ICsKPiArCS5kZ3JhbV9iaW5kICAgICAgICAgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X2Rn cmFtX2JpbmQsCj4gKwkuZGdyYW1fZGVxdWV1ZSAgICAgICAgICAgID0gdmlydGlvX3RyYW5zcG9y dF9kZ3JhbV9kZXF1ZXVlLAo+ICsJLmRncmFtX2VucXVldWUgICAgICAgICAgICA9IHZpcnRpb190 cmFuc3BvcnRfZGdyYW1fZW5xdWV1ZSwKPiArCS5kZ3JhbV9hbGxvdyAgICAgICAgICAgICAgPSB2 aXJ0aW9fdHJhbnNwb3J0X2RncmFtX2FsbG93LAo+ICsKPiArCS5zdHJlYW1fZGVxdWV1ZSAgICAg ICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X3N0cmVhbV9kZXF1ZXVlLAo+ICsJLnN0cmVhbV9lbnF1 ZXVlICAgICAgICAgICA9IHZpcnRpb190cmFuc3BvcnRfc3RyZWFtX2VucXVldWUsCj4gKwkuc3Ry ZWFtX2hhc19kYXRhICAgICAgICAgID0gdmlydGlvX3RyYW5zcG9ydF9zdHJlYW1faGFzX2RhdGEs Cj4gKwkuc3RyZWFtX2hhc19zcGFjZSAgICAgICAgID0gdmlydGlvX3RyYW5zcG9ydF9zdHJlYW1f aGFzX3NwYWNlLAo+ICsJLnN0cmVhbV9yY3ZoaXdhdCAgICAgICAgICA9IHZpcnRpb190cmFuc3Bv cnRfc3RyZWFtX3Jjdmhpd2F0LAo+ICsJLnN0cmVhbV9pc19hY3RpdmUgICAgICAgICA9IHZpcnRp b190cmFuc3BvcnRfc3RyZWFtX2lzX2FjdGl2ZSwKPiArCS5zdHJlYW1fYWxsb3cgICAgICAgICAg ICAgPSB2aXJ0aW9fdHJhbnNwb3J0X3N0cmVhbV9hbGxvdywKPiArCj4gKwkubm90aWZ5X3BvbGxf aW4gICAgICAgICAgID0gdmlydGlvX3RyYW5zcG9ydF9ub3RpZnlfcG9sbF9pbiwKPiArCS5ub3Rp ZnlfcG9sbF9vdXQgICAgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X25vdGlmeV9wb2xsX291dCwK PiArCS5ub3RpZnlfcmVjdl9pbml0ICAgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X25vdGlmeV9y ZWN2X2luaXQsCj4gKwkubm90aWZ5X3JlY3ZfcHJlX2Jsb2NrICAgID0gdmlydGlvX3RyYW5zcG9y dF9ub3RpZnlfcmVjdl9wcmVfYmxvY2ssCj4gKwkubm90aWZ5X3JlY3ZfcHJlX2RlcXVldWUgID0g dmlydGlvX3RyYW5zcG9ydF9ub3RpZnlfcmVjdl9wcmVfZGVxdWV1ZSwKPiArCS5ub3RpZnlfcmVj dl9wb3N0X2RlcXVldWUgPSB2aXJ0aW9fdHJhbnNwb3J0X25vdGlmeV9yZWN2X3Bvc3RfZGVxdWV1 ZSwKPiArCS5ub3RpZnlfc2VuZF9pbml0ICAgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X25vdGlm eV9zZW5kX2luaXQsCj4gKwkubm90aWZ5X3NlbmRfcHJlX2Jsb2NrICAgID0gdmlydGlvX3RyYW5z cG9ydF9ub3RpZnlfc2VuZF9wcmVfYmxvY2ssCj4gKwkubm90aWZ5X3NlbmRfcHJlX2VucXVldWUg ID0gdmlydGlvX3RyYW5zcG9ydF9ub3RpZnlfc2VuZF9wcmVfZW5xdWV1ZSwKPiArCS5ub3RpZnlf c2VuZF9wb3N0X2VucXVldWUgPSB2aXJ0aW9fdHJhbnNwb3J0X25vdGlmeV9zZW5kX3Bvc3RfZW5x dWV1ZSwKPiArCj4gKwkuc2V0X2J1ZmZlcl9zaXplICAgICAgICAgID0gdmlydGlvX3RyYW5zcG9y dF9zZXRfYnVmZmVyX3NpemUsCj4gKwkuc2V0X21pbl9idWZmZXJfc2l6ZSAgICAgID0gdmlydGlv X3RyYW5zcG9ydF9zZXRfbWluX2J1ZmZlcl9zaXplLAo+ICsJLnNldF9tYXhfYnVmZmVyX3NpemUg ICAgICA9IHZpcnRpb190cmFuc3BvcnRfc2V0X21heF9idWZmZXJfc2l6ZSwKPiArCS5nZXRfYnVm ZmVyX3NpemUgICAgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X2dldF9idWZmZXJfc2l6ZSwKPiAr CS5nZXRfbWluX2J1ZmZlcl9zaXplICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X2dldF9taW5fYnVm ZmVyX3NpemUsCj4gKwkuZ2V0X21heF9idWZmZXJfc2l6ZSAgICAgID0gdmlydGlvX3RyYW5zcG9y dF9nZXRfbWF4X2J1ZmZlcl9zaXplLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB2aXJ0aW9fdnNv Y2tfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gK3sKPiArCXZxX2NhbGxiYWNr X3QgKmNhbGxiYWNrc1tdID0gewo+ICsJCXZpcnRpb192c29ja19jdHJsX2RvbmUsCj4gKwkJdmly dGlvX3Zzb2NrX3J4X2RvbmUsCj4gKwkJdmlydGlvX3Zzb2NrX3R4X2RvbmUsCj4gKwl9Owo+ICsJ Y29uc3QgY2hhciAqbmFtZXNbXSA9IHsKPiArCQkiY3RybCIsCj4gKwkJInJ4IiwKPiArCQkidHgi LAo+ICsJfTsKPiArCXN0cnVjdCB2aXJ0aW9fdnNvY2sgKnZzb2NrID0gTlVMTDsKPiArCXUzMiBn dWVzdF9jaWQ7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0 aWJsZSgmdGhlX3ZpcnRpb192c29ja19tdXRleCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiBy ZXQ7Cj4gKwo+ICsJLyogT25seSBvbmUgdmlydGlvLXZzb2NrIGRldmljZSBwZXIgZ3Vlc3QgaXMg c3VwcG9ydGVkICovCj4gKwlpZiAodGhlX3ZpcnRpb192c29jaykgewo+ICsJCXJldCA9IC1FQlVT WTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwl2c29jayA9IGt6YWxsb2Moc2l6ZW9mKCp2 c29jayksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCF2c29jaykgewo+ICsJCXJldCA9IC1FTk9NRU07 Cj4gKwkJZ290byBvdXQ7CgpXb24ndCB0aGlzIGF0dGVtcHQgdG8ga2ZyZWUgYSBOVUxMIHZzb2Nr PwoKPiArCX0KPiArCj4gKwl2c29jay0+dmRldiA9IHZkZXY7Cj4gKwo+ICsJcmV0ID0gdnNvY2st PnZkZXYtPmNvbmZpZy0+ZmluZF92cXModnNvY2stPnZkZXYsIFZTT0NLX1ZRX01BWCwKPiArCQkJ CQkgICAgdnNvY2stPnZxcywgY2FsbGJhY2tzLCBuYW1lcyk7Cj4gKwlpZiAocmV0IDwgMCkKPiAr CQlnb3RvIG91dDsKPiArCj4gKwl2ZGV2LT5jb25maWctPmdldCh2ZGV2LCBvZmZzZXRvZihzdHJ1 Y3QgdmlydGlvX3Zzb2NrX2NvbmZpZywgZ3Vlc3RfY2lkKSwKPiArCQkJICAmZ3Vlc3RfY2lkLCBz aXplb2YoZ3Vlc3RfY2lkKSk7Cj4gKwl2c29jay0+Z3Vlc3RfY2lkID0gbGUzMl90b19jcHUoZ3Vl c3RfY2lkKTsKPiArCXByX2RlYnVnKCIlczpndWVzdF9jaWQ9JWRcbiIsIF9fZnVuY19fLCB2c29j ay0+Z3Vlc3RfY2lkKTsKPiArCj4gKwlyZXQgPSB2c29ja19jb3JlX2luaXQoJnZpcnRpb190cmFu c3BvcnQpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290byBvdXRfdnFzOwo+ICsKPiArCXZzb2Nr LT5yeF9idWZfbnIgPSAwOwo+ICsJdnNvY2stPnJ4X2J1Zl9tYXhfbnIgPSAwOwo+ICsKPiArCXZk ZXYtPnByaXYgPSB0aGVfdmlydGlvX3Zzb2NrID0gdnNvY2s7Cj4gKwlpbml0X3dhaXRxdWV1ZV9o ZWFkKCZ2c29jay0+cXVldWVfd2FpdCk7Cj4gKwltdXRleF9pbml0KCZ2c29jay0+dHhfbG9jayk7 Cj4gKwltdXRleF9pbml0KCZ2c29jay0+cnhfbG9jayk7Cj4gKwlJTklUX1dPUksoJnZzb2NrLT5y eF93b3JrLCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmspOwo+ICsJSU5JVF9XT1JLKCZ2 c29jay0+dHhfd29yaywgdmlydGlvX3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKTsKPiArCj4gKwlt dXRleF9sb2NrKCZ2c29jay0+cnhfbG9jayk7Cj4gKwl2aXJ0aW9fdnNvY2tfcnhfZmlsbCh2c29j ayk7Cj4gKwltdXRleF91bmxvY2soJnZzb2NrLT5yeF9sb2NrKTsKPiArCj4gKwltdXRleF91bmxv Y2soJnRoZV92aXJ0aW9fdnNvY2tfbXV0ZXgpOwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtvdXRfdnFz Ogo+ICsJdnNvY2stPnZkZXYtPmNvbmZpZy0+ZGVsX3Zxcyh2c29jay0+dmRldik7Cj4gK291dDoK PiArCWtmcmVlKHZzb2NrKTsKPiArCW11dGV4X3VubG9jaygmdGhlX3ZpcnRpb192c29ja19tdXRl eCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9fdnNvY2tf cmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlv X3Zzb2NrICp2c29jayA9IHZkZXYtPnByaXY7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmdGhlX3ZpcnRp b192c29ja19tdXRleCk7Cj4gKwl0aGVfdmlydGlvX3Zzb2NrID0gTlVMTDsKPiArCXZzb2NrX2Nv cmVfZXhpdCgpOwo+ICsJbXV0ZXhfdW5sb2NrKCZ0aGVfdmlydGlvX3Zzb2NrX211dGV4KTsKPiAr Cj4gKwlrZnJlZSh2c29jayk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdmlydGlvX2Rldmlj ZV9pZCBpZF90YWJsZVtdID0gewo+ICsJeyBWSVJUSU9fSURfVlNPQ0ssIFZJUlRJT19ERVZfQU5Z X0lEIH0sCj4gKwl7IDAgfSwKPiArfTsKPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVy ZXNbXSA9IHsKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdmlydGlvX2RyaXZlciB2aXJ0aW9f dnNvY2tfZHJpdmVyID0gewo+ICsJLmZlYXR1cmVfdGFibGUgPSBmZWF0dXJlcywKPiArCS5mZWF0 dXJlX3RhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGZlYXR1cmVzKSwKPiArCS5kcml2ZXIubmFtZSA9 IEtCVUlMRF9NT0ROQU1FLAo+ICsJLmRyaXZlci5vd25lciA9IFRISVNfTU9EVUxFLAo+ICsJLmlk X3RhYmxlID0gaWRfdGFibGUsCj4gKwkucHJvYmUgPSB2aXJ0aW9fdnNvY2tfcHJvYmUsCj4gKwku cmVtb3ZlID0gdmlydGlvX3Zzb2NrX3JlbW92ZSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgX19p bml0IHZpcnRpb192c29ja19pbml0KHZvaWQpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJdmly dGlvX3Zzb2NrX3dvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZSgidmlydGlvX3Zzb2NrIiwgMCwg MCk7Cj4gKwlpZiAoIXZpcnRpb192c29ja193b3JrcXVldWUpCj4gKwkJcmV0dXJuIC1FTk9NRU07 Cj4gKwlyZXQgPSByZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fdnNvY2tfZHJpdmVyKTsK PiArCWlmIChyZXQpCj4gKwkJZGVzdHJveV93b3JrcXVldWUodmlydGlvX3Zzb2NrX3dvcmtxdWV1 ZSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2V4aXQgdmlydGlv X3Zzb2NrX2V4aXQodm9pZCkKPiArewo+ICsJdW5yZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0 aW9fdnNvY2tfZHJpdmVyKTsKPiArCWRlc3Ryb3lfd29ya3F1ZXVlKHZpcnRpb192c29ja193b3Jr cXVldWUpOwo+ICt9Cj4gKwo+ICttb2R1bGVfaW5pdCh2aXJ0aW9fdnNvY2tfaW5pdCk7Cj4gK21v ZHVsZV9leGl0KHZpcnRpb192c29ja19leGl0KTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIp Owo+ICtNT0RVTEVfQVVUSE9SKCJBc2lhcyBIZSIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oInZp cnRpbyB0cmFuc3BvcnQgZm9yIHZzb2NrIik7Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUodmlydGlv LCBpZF90YWJsZSk7CgoKLS0KQWxleCBCZW5uw6llCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFs aXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91 bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==