From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?ISO-8859-15?Q?Christian_K=F6nig?= Subject: Re: [PATCH 1/3] drm/amdkfd: Do copy_to/from_user in general kfd_ioctl() Date: Mon, 29 Dec 2014 14:45:29 +0100 Message-ID: <54A15AF9.3070905@vodafone.de> References: <1419856973-3223-1-git-send-email-oded.gabbay@amd.com> <54A15195.6020509@vodafone.de> <54A15597.9020906@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from pegasos-out.vodafone.de (pegasos-out.vodafone.de [80.84.1.38]) by gabe.freedesktop.org (Postfix) with ESMTP id 2311089F77 for ; Mon, 29 Dec 2014 05:46:11 -0800 (PST) In-Reply-To: <54A15597.9020906@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Oded Gabbay , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org QW0gMjkuMTIuMjAxNCB1bSAxNDoyMiBzY2hyaWViIE9kZWQgR2FiYmF5Ogo+Cj4KPiBPbiAxMi8y OS8yMDE0IDAzOjA1IFBNLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+PiBBbSAyOS4xMi4yMDE0 IHVtIDEzOjQyIHNjaHJpZWIgT2RlZCBHYWJiYXk6Cj4+PiBUaGlzIHBhdGNoIG1vdmVzIHRoZSBj b3B5X3RvX3VzZXIoKSBhbmQgY29weV9mcm9tX3VzZXIoKSBjYWxscyBmcm9tIHRoZQo+Pj4gZGlm ZmVyZW50IGlvY3RsIGZ1bmN0aW9ucyBpbiBhbWRrZmQgdG8gdGhlIGdlbmVyYWwga2ZkX2lvY3Rs KCkgCj4+PiBmdW5jdGlvbiwgYXMKPj4+IHRoaXMgaXMgYSBjb21tb24gY29kZSBmb3IgYWxsIGlv Y3Rscy4KPj4+Cj4+PiBUaGlzIHdhcyBkb25lIGFjY29yZGluZyB0byBleGFtcGxlIHRha2VuIGZy b20gZHJtX2lvY3RsLmMKPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBPZGVkIEdhYmJheSA8b2RlZC5n YWJiYXlAYW1kLmNvbT4KPj4KPj4gSW4gZ2VuZXJhbCBzb3VuZHMgbGlrZSBhIGdvb2QgaWRlYSB0 byBtZSBhbmQgdGhlIHBhdGNoIGlzICJSZXZpZXdlZC1ieToKPj4gQ2hyaXN0aWFuIEvDtm5pZyA8 Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPiIgZm9yIG5vdy4KPj4KPj4gV2hhdCByZWFsbHkgcXVl c3Rpb25zIG1lIGlzIHdoeSB3ZSBuZWVkIGFsbCB0aGlzIGNvZGUgZHVwbGljYXRpb24gYW5kIAo+ PiBjYW4ndAo+PiByZXVzZSB0aGUgRFJNIGluZnJhc3RydWN0dXJlIGZvciB0aGlzLiBCdXQgdGhh dCdzIG1vcmUgYSBwcm9ibGVtIGluIAo+PiB0aGUgbG9uZyB0ZXJtLgo+Pgo+IERvIHlvdSBtZWFu IHJlZ2lzdGVyaW5nIGFzIERSTSBJT0NUTCA/Cj4gT3IgZG8geW91IG1lYW4gc29tZXRoaW5nIGVs c2UgPwo+Cj4gSWYgaXQgaXMgdGhlIGZvcm1lciwgdGhhbiBJIHRoaW5rIHRoZSBtYWluIHByb2Js ZW0gaXMgdGhhdCB3ZSB1c2UgCj4gZGlmZmVyZW50IGRldmljZXMgKC9kZXYva2ZkIHZzLiAvZGV2 L2RyaS8pCgpBaCwgeWVzIG9mIGNvdXJzZS4gSSBzaW1wbHkga2VlcCBmb3JnZXR0aW5nIHRoYXQg d2UgaGF2ZSB0d28gZGV2aWNlIApub2RlcyBmb3IgdGhlIHNhbWUgcGh5c2ljYWwgaGFyZHdhcmUu CgpDaHJpc3RpYW4uCgo+Cj4gSWYgaXQgaXMgdGhlIGxhdHRlciwgY291bGQgeW91IGdpdmUgbWUg bW9yZSBzcGVjaWZpY3MgPwo+Cj4gICAgIE9kZWQKPgo+PiBSZWdhcmRzLAo+PiBDaHJpc3RpYW4u Cj4+Cj4+PiAtLS0KPj4+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYu YyB8IDIzNCAKPj4+ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KPj4+ICAgMSBmaWxl IGNoYW5nZWQsIDExNyBpbnNlcnRpb25zKCspLCAxMTcgZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9jaGFyZGV2LmMKPj4+IGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYwo+Pj4gaW5kZXggN2Q0OTc0 Yi4uNTQ2MGFkMiAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tm ZF9jaGFyZGV2LmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9jaGFy ZGV2LmMKPj4+IEBAIC0xMjcsMTcgKzEyNywxNCBAQCBzdGF0aWMgaW50IGtmZF9vcGVuKHN0cnVj dCBpbm9kZSAqaW5vZGUsIAo+Pj4gc3RydWN0IGZpbGUKPj4+ICpmaWxlcCkKPj4+ICAgICAgIHJl dHVybiAwOwo+Pj4gICB9Cj4+PiAtc3RhdGljIGxvbmcga2ZkX2lvY3RsX2dldF92ZXJzaW9uKHN0 cnVjdCBmaWxlICpmaWxlcCwgc3RydWN0IAo+Pj4ga2ZkX3Byb2Nlc3MgKnAsCj4+PiAtICAgICAg ICAgICAgICAgICAgICB2b2lkIF9fdXNlciAqYXJnKQo+Pj4gK3N0YXRpYyBpbnQga2ZkX2lvY3Rs X2dldF92ZXJzaW9uKHN0cnVjdCBmaWxlICpmaWxlcCwgc3RydWN0IAo+Pj4ga2ZkX3Byb2Nlc3Mg KnAsCj4+PiArICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQo+Pj4gICB7Cj4+PiAtICAg IHN0cnVjdCBrZmRfaW9jdGxfZ2V0X3ZlcnNpb25fYXJncyBhcmdzOwo+Pj4gKyAgICBzdHJ1Y3Qg a2ZkX2lvY3RsX2dldF92ZXJzaW9uX2FyZ3MgKmFyZ3MgPSBkYXRhOwo+Pj4gICAgICAgaW50IGVy ciA9IDA7Cj4+PiAtICAgIGFyZ3MubWFqb3JfdmVyc2lvbiA9IEtGRF9JT0NUTF9NQUpPUl9WRVJT SU9OOwo+Pj4gLSAgICBhcmdzLm1pbm9yX3ZlcnNpb24gPSBLRkRfSU9DVExfTUlOT1JfVkVSU0lP TjsKPj4+IC0KPj4+IC0gICAgaWYgKGNvcHlfdG9fdXNlcihhcmcsICZhcmdzLCBzaXplb2YoYXJn cykpKQo+Pj4gLSAgICAgICAgZXJyID0gLUVGQVVMVDsKPj4+ICsgICAgYXJncy0+bWFqb3JfdmVy c2lvbiA9IEtGRF9JT0NUTF9NQUpPUl9WRVJTSU9OOwo+Pj4gKyAgICBhcmdzLT5taW5vcl92ZXJz aW9uID0gS0ZEX0lPQ1RMX01JTk9SX1ZFUlNJT047Cj4+PiAgICAgICByZXR1cm4gZXJyOwo+Pj4g ICB9Cj4+PiBAQCAtMjIxLDEwICsyMTgsMTAgQEAgc3RhdGljIGludCBzZXRfcXVldWVfcHJvcGVy dGllc19mcm9tX3VzZXIoc3RydWN0Cj4+PiBxdWV1ZV9wcm9wZXJ0aWVzICpxX3Byb3BlcnRpZXMs Cj4+PiAgICAgICByZXR1cm4gMDsKPj4+ICAgfQo+Pj4gLXN0YXRpYyBsb25nIGtmZF9pb2N0bF9j cmVhdGVfcXVldWUoc3RydWN0IGZpbGUgKmZpbGVwLCBzdHJ1Y3QgCj4+PiBrZmRfcHJvY2VzcyAq cCwKPj4+IC0gICAgICAgICAgICAgICAgICAgIHZvaWQgX191c2VyICphcmcpCj4+PiArc3RhdGlj IGludCBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlcCwgc3RydWN0IAo+ Pj4ga2ZkX3Byb2Nlc3MgKnAsCj4+PiArICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQo+ Pj4gICB7Cj4+PiAtICAgIHN0cnVjdCBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlX2FyZ3MgYXJnczsK Pj4+ICsgICAgc3RydWN0IGtmZF9pb2N0bF9jcmVhdGVfcXVldWVfYXJncyAqYXJncyA9IGRhdGE7 Cj4+PiAgICAgICBzdHJ1Y3Qga2ZkX2RldiAqZGV2Owo+Pj4gICAgICAgaW50IGVyciA9IDA7Cj4+ PiAgICAgICB1bnNpZ25lZCBpbnQgcXVldWVfaWQ7Cj4+PiBAQCAtMjMzLDE2ICsyMzAsMTMgQEAg c3RhdGljIGxvbmcga2ZkX2lvY3RsX2NyZWF0ZV9xdWV1ZShzdHJ1Y3QgZmlsZSAKPj4+ICpmaWxl cCwKPj4+IHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKPj4+ICAgICAgIG1lbXNldCgmcV9wcm9wZXJ0 aWVzLCAwLCBzaXplb2Yoc3RydWN0IHF1ZXVlX3Byb3BlcnRpZXMpKTsKPj4+IC0gICAgaWYgKGNv cHlfZnJvbV91c2VyKCZhcmdzLCBhcmcsIHNpemVvZihhcmdzKSkpCj4+PiAtICAgICAgICByZXR1 cm4gLUVGQVVMVDsKPj4+IC0KPj4+ICAgICAgIHByX2RlYnVnKCJrZmQ6IGNyZWF0aW5nIHF1ZXVl IGlvY3RsXG4iKTsKPj4+IC0gICAgZXJyID0gc2V0X3F1ZXVlX3Byb3BlcnRpZXNfZnJvbV91c2Vy KCZxX3Byb3BlcnRpZXMsICZhcmdzKTsKPj4+ICsgICAgZXJyID0gc2V0X3F1ZXVlX3Byb3BlcnRp ZXNfZnJvbV91c2VyKCZxX3Byb3BlcnRpZXMsIGFyZ3MpOwo+Pj4gICAgICAgaWYgKGVycikKPj4+ ICAgICAgICAgICByZXR1cm4gZXJyOwo+Pj4gLSAgICBkZXYgPSBrZmRfZGV2aWNlX2J5X2lkKGFy Z3MuZ3B1X2lkKTsKPj4+ICsgICAgZGV2ID0ga2ZkX2RldmljZV9ieV9pZChhcmdzLT5ncHVfaWQp Owo+Pj4gICAgICAgaWYgKGRldiA9PSBOVUxMKQo+Pj4gICAgICAgICAgIHJldHVybiAtRUlOVkFM Owo+Pj4gQEAgLTI1MCw3ICsyNDQsNyBAQCBzdGF0aWMgbG9uZyBrZmRfaW9jdGxfY3JlYXRlX3F1 ZXVlKHN0cnVjdCBmaWxlIAo+Pj4gKmZpbGVwLAo+Pj4gc3RydWN0IGtmZF9wcm9jZXNzICpwLAo+ Pj4gICAgICAgcGRkID0ga2ZkX2JpbmRfcHJvY2Vzc190b19kZXZpY2UoZGV2LCBwKTsKPj4+ICAg ICAgIGlmIChJU19FUlIocGRkKSkgewo+Pj4gLSAgICAgICAgZXJyID0gUFRSX0VSUihwZGQpOwo+ Pj4gKyAgICAgICAgZXJyID0gLUVTUkNIOwo+Pj4gICAgICAgICAgIGdvdG8gZXJyX2JpbmRfcHJv Y2VzczsKPj4+ICAgICAgIH0KPj4+IEBAIC0yNjMsMzMgKzI1NywyNiBAQCBzdGF0aWMgbG9uZyBr ZmRfaW9jdGxfY3JlYXRlX3F1ZXVlKHN0cnVjdCBmaWxlIAo+Pj4gKmZpbGVwLAo+Pj4gc3RydWN0 IGtmZF9wcm9jZXNzICpwLAo+Pj4gICAgICAgaWYgKGVyciAhPSAwKQo+Pj4gICAgICAgICAgIGdv dG8gZXJyX2NyZWF0ZV9xdWV1ZTsKPj4+IC0gICAgYXJncy5xdWV1ZV9pZCA9IHF1ZXVlX2lkOwo+ Pj4gKyAgICBhcmdzLT5xdWV1ZV9pZCA9IHF1ZXVlX2lkOwo+Pj4gICAgICAgLyogUmV0dXJuIGdw dV9pZCBhcyBkb29yYmVsbCBvZmZzZXQgZm9yIG1tYXAgdXNhZ2UgKi8KPj4+IC0gICAgYXJncy5k b29yYmVsbF9vZmZzZXQgPSBhcmdzLmdwdV9pZCA8PCBQQUdFX1NISUZUOwo+Pj4gLQo+Pj4gLSAg ICBpZiAoY29weV90b191c2VyKGFyZywgJmFyZ3MsIHNpemVvZihhcmdzKSkpIHsKPj4+IC0gICAg ICAgIGVyciA9IC1FRkFVTFQ7Cj4+PiAtICAgICAgICBnb3RvIGVycl9jb3B5X2FyZ3Nfb3V0Owo+ Pj4gLSAgICB9Cj4+PiArICAgIGFyZ3MtPmRvb3JiZWxsX29mZnNldCA9IGFyZ3MtPmdwdV9pZCA8 PCBQQUdFX1NISUZUOwo+Pj4gICAgICAgbXV0ZXhfdW5sb2NrKCZwLT5tdXRleCk7Cj4+PiAtICAg IHByX2RlYnVnKCJrZmQ6IHF1ZXVlIGlkICVkIHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseVxuIiwg Cj4+PiBhcmdzLnF1ZXVlX2lkKTsKPj4+ICsgICAgcHJfZGVidWcoImtmZDogcXVldWUgaWQgJWQg d2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5XG4iLCAKPj4+IGFyZ3MtPnF1ZXVlX2lkKTsKPj4+ICAg ICAgIHByX2RlYnVnKCJyaW5nIGJ1ZmZlciBhZGRyZXNzID09IDB4JTAxNmxsWFxuIiwKPj4+IC0g ICAgICAgICAgICBhcmdzLnJpbmdfYmFzZV9hZGRyZXNzKTsKPj4+ICsgICAgICAgICAgICBhcmdz LT5yaW5nX2Jhc2VfYWRkcmVzcyk7Cj4+PiAgICAgICBwcl9kZWJ1ZygicmVhZCBwdHIgYWRkcmVz cyAgICA9PSAweCUwMTZsbFhcbiIsCj4+PiAtICAgICAgICAgICAgYXJncy5yZWFkX3BvaW50ZXJf YWRkcmVzcyk7Cj4+PiArICAgICAgICAgICAgYXJncy0+cmVhZF9wb2ludGVyX2FkZHJlc3MpOwo+ Pj4gICAgICAgcHJfZGVidWcoIndyaXRlIHB0ciBhZGRyZXNzICAgPT0gMHglMDE2bGxYXG4iLAo+ Pj4gLSAgICAgICAgICAgIGFyZ3Mud3JpdGVfcG9pbnRlcl9hZGRyZXNzKTsKPj4+ICsgICAgICAg ICAgICBhcmdzLT53cml0ZV9wb2ludGVyX2FkZHJlc3MpOwo+Pj4gICAgICAgcmV0dXJuIDA7Cj4+ PiAtZXJyX2NvcHlfYXJnc19vdXQ6Cj4+PiAtICAgIHBxbV9kZXN0cm95X3F1ZXVlKCZwLT5wcW0s IHF1ZXVlX2lkKTsKPj4+ICAgZXJyX2NyZWF0ZV9xdWV1ZToKPj4+ICAgZXJyX2JpbmRfcHJvY2Vz czoKPj4+ICAgICAgIG11dGV4X3VubG9jaygmcC0+bXV0ZXgpOwo+Pj4gQEAgLTI5Nyw5OSArMjg0 LDkwIEBAIGVycl9iaW5kX3Byb2Nlc3M6Cj4+PiAgIH0KPj4+ICAgc3RhdGljIGludCBrZmRfaW9j dGxfZGVzdHJveV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IAo+Pj4ga2ZkX3Byb2Nl c3MgKnAsCj4+PiAtICAgICAgICAgICAgICAgICAgICB2b2lkIF9fdXNlciAqYXJnKQo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSkKPj4+ICAgewo+Pj4gICAgICAgaW50IHJldHZh bDsKPj4+IC0gICAgc3RydWN0IGtmZF9pb2N0bF9kZXN0cm95X3F1ZXVlX2FyZ3MgYXJnczsKPj4+ IC0KPj4+IC0gICAgaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCBhcmcsIHNpemVvZihhcmdzKSkp Cj4+PiAtICAgICAgICByZXR1cm4gLUVGQVVMVDsKPj4+ICsgICAgc3RydWN0IGtmZF9pb2N0bF9k ZXN0cm95X3F1ZXVlX2FyZ3MgKmFyZ3MgPSBkYXRhOwo+Pj4gICAgICAgcHJfZGVidWcoImtmZDog ZGVzdHJveWluZyBxdWV1ZSBpZCAlZCBmb3IgUEFTSUQgJWRcbiIsCj4+PiAtICAgICAgICAgICAg ICAgIGFyZ3MucXVldWVfaWQsCj4+PiArICAgICAgICAgICAgICAgIGFyZ3MtPnF1ZXVlX2lkLAo+ Pj4gICAgICAgICAgICAgICAgICAgcC0+cGFzaWQpOwo+Pj4gICAgICAgbXV0ZXhfbG9jaygmcC0+ bXV0ZXgpOwo+Pj4gLSAgICByZXR2YWwgPSBwcW1fZGVzdHJveV9xdWV1ZSgmcC0+cHFtLCBhcmdz LnF1ZXVlX2lkKTsKPj4+ICsgICAgcmV0dmFsID0gcHFtX2Rlc3Ryb3lfcXVldWUoJnAtPnBxbSwg YXJncy0+cXVldWVfaWQpOwo+Pj4gICAgICAgbXV0ZXhfdW5sb2NrKCZwLT5tdXRleCk7Cj4+PiAg ICAgICByZXR1cm4gcmV0dmFsOwo+Pj4gICB9Cj4+PiAgIHN0YXRpYyBpbnQga2ZkX2lvY3RsX3Vw ZGF0ZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IAo+Pj4ga2ZkX3Byb2Nlc3MgKnAs Cj4+PiAtICAgICAgICAgICAgICAgICAgICB2b2lkIF9fdXNlciAqYXJnKQo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgdm9pZCAqZGF0YSkKPj4+ICAgewo+Pj4gICAgICAgaW50IHJldHZhbDsKPj4+ IC0gICAgc3RydWN0IGtmZF9pb2N0bF91cGRhdGVfcXVldWVfYXJncyBhcmdzOwo+Pj4gKyAgICBz dHJ1Y3Qga2ZkX2lvY3RsX3VwZGF0ZV9xdWV1ZV9hcmdzICphcmdzID0gZGF0YTsKPj4+ICAgICAg IHN0cnVjdCBxdWV1ZV9wcm9wZXJ0aWVzIHByb3BlcnRpZXM7Cj4+PiAtICAgIGlmIChjb3B5X2Zy b21fdXNlcigmYXJncywgYXJnLCBzaXplb2YoYXJncykpKQo+Pj4gLSAgICAgICAgcmV0dXJuIC1F RkFVTFQ7Cj4+PiAtCj4+PiAtICAgIGlmIChhcmdzLnF1ZXVlX3BlcmNlbnRhZ2UgPiBLRkRfTUFY X1FVRVVFX1BFUkNFTlRBR0UpIHsKPj4+ICsgICAgaWYgKGFyZ3MtPnF1ZXVlX3BlcmNlbnRhZ2Ug PiBLRkRfTUFYX1FVRVVFX1BFUkNFTlRBR0UpIHsKPj4+ICAgICAgICAgICBwcl9lcnIoImtmZDog cXVldWUgcGVyY2VudGFnZSBtdXN0IGJlIGJldHdlZW4gMCB0bwo+Pj4gS0ZEX01BWF9RVUVVRV9Q RVJDRU5UQUdFXG4iKTsKPj4+ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+ICAgICAgIH0K Pj4+IC0gICAgaWYgKGFyZ3MucXVldWVfcHJpb3JpdHkgPiBLRkRfTUFYX1FVRVVFX1BSSU9SSVRZ KSB7Cj4+PiArICAgIGlmIChhcmdzLT5xdWV1ZV9wcmlvcml0eSA+IEtGRF9NQVhfUVVFVUVfUFJJ T1JJVFkpIHsKPj4+ICAgICAgICAgICBwcl9lcnIoImtmZDogcXVldWUgcHJpb3JpdHkgbXVzdCBi ZSBiZXR3ZWVuIDAgdG8KPj4+IEtGRF9NQVhfUVVFVUVfUFJJT1JJVFlcbiIpOwo+Pj4gICAgICAg ICAgIHJldHVybiAtRUlOVkFMOwo+Pj4gICAgICAgfQo+Pj4gLSAgICBpZiAoKGFyZ3MucmluZ19i YXNlX2FkZHJlc3MpICYmCj4+PiArICAgIGlmICgoYXJncy0+cmluZ19iYXNlX2FkZHJlc3MpICYm Cj4+PiAgICAgICAgICAgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLAo+Pj4gLSAgICAgICAgICAg IChjb25zdCB2b2lkIF9fdXNlciAqKSBhcmdzLnJpbmdfYmFzZV9hZGRyZXNzLAo+Pj4gKyAgICAg ICAgICAgIChjb25zdCB2b2lkIF9fdXNlciAqKSBhcmdzLT5yaW5nX2Jhc2VfYWRkcmVzcywKPj4+ ICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQ2NF90KSkpKSB7Cj4+PiAgICAgICAgICAgcHJfZXJy KCJrZmQ6IGNhbid0IGFjY2VzcyByaW5nIGJhc2UgYWRkcmVzc1xuIik7Cj4+PiAgICAgICAgICAg cmV0dXJuIC1FRkFVTFQ7Cj4+PiAgICAgICB9Cj4+PiAtICAgIGlmICghaXNfcG93ZXJfb2ZfMihh cmdzLnJpbmdfc2l6ZSkgJiYgKGFyZ3MucmluZ19zaXplICE9IDApKSB7Cj4+PiArICAgIGlmICgh aXNfcG93ZXJfb2ZfMihhcmdzLT5yaW5nX3NpemUpICYmIChhcmdzLT5yaW5nX3NpemUgIT0gMCkp IHsKPj4+ICAgICAgICAgICBwcl9lcnIoImtmZDogcmluZyBzaXplIG11c3QgYmUgYSBwb3dlciBv ZiAyIG9yIDBcbiIpOwo+Pj4gICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4gICAgICAgfQo+ Pj4gLSAgICBwcm9wZXJ0aWVzLnF1ZXVlX2FkZHJlc3MgPSBhcmdzLnJpbmdfYmFzZV9hZGRyZXNz Owo+Pj4gLSAgICBwcm9wZXJ0aWVzLnF1ZXVlX3NpemUgPSBhcmdzLnJpbmdfc2l6ZTsKPj4+IC0g ICAgcHJvcGVydGllcy5xdWV1ZV9wZXJjZW50ID0gYXJncy5xdWV1ZV9wZXJjZW50YWdlOwo+Pj4g LSAgICBwcm9wZXJ0aWVzLnByaW9yaXR5ID0gYXJncy5xdWV1ZV9wcmlvcml0eTsKPj4+ICsgICAg cHJvcGVydGllcy5xdWV1ZV9hZGRyZXNzID0gYXJncy0+cmluZ19iYXNlX2FkZHJlc3M7Cj4+PiAr ICAgIHByb3BlcnRpZXMucXVldWVfc2l6ZSA9IGFyZ3MtPnJpbmdfc2l6ZTsKPj4+ICsgICAgcHJv cGVydGllcy5xdWV1ZV9wZXJjZW50ID0gYXJncy0+cXVldWVfcGVyY2VudGFnZTsKPj4+ICsgICAg cHJvcGVydGllcy5wcmlvcml0eSA9IGFyZ3MtPnF1ZXVlX3ByaW9yaXR5Owo+Pj4gICAgICAgcHJf ZGVidWcoImtmZDogdXBkYXRpbmcgcXVldWUgaWQgJWQgZm9yIFBBU0lEICVkXG4iLAo+Pj4gLSAg ICAgICAgICAgIGFyZ3MucXVldWVfaWQsIHAtPnBhc2lkKTsKPj4+ICsgICAgICAgICAgICBhcmdz LT5xdWV1ZV9pZCwgcC0+cGFzaWQpOwo+Pj4gICAgICAgbXV0ZXhfbG9jaygmcC0+bXV0ZXgpOwo+ Pj4gLSAgICByZXR2YWwgPSBwcW1fdXBkYXRlX3F1ZXVlKCZwLT5wcW0sIGFyZ3MucXVldWVfaWQs ICZwcm9wZXJ0aWVzKTsKPj4+ICsgICAgcmV0dmFsID0gcHFtX3VwZGF0ZV9xdWV1ZSgmcC0+cHFt LCBhcmdzLT5xdWV1ZV9pZCwgJnByb3BlcnRpZXMpOwo+Pj4gICAgICAgbXV0ZXhfdW5sb2NrKCZw LT5tdXRleCk7Cj4+PiAgICAgICByZXR1cm4gcmV0dmFsOwo+Pj4gICB9Cj4+PiAtc3RhdGljIGxv bmcga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5KHN0cnVjdCBmaWxlICpmaWxlcCwKPj4+IC0g ICAgICAgICAgICAgICAgc3RydWN0IGtmZF9wcm9jZXNzICpwLCB2b2lkIF9fdXNlciAqYXJnKQo+ Pj4gK3N0YXRpYyBpbnQga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5KHN0cnVjdCBmaWxlICpm aWxlcCwKPj4+ICsgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwgdm9p ZCAqZGF0YSkKPj4+ICAgewo+Pj4gLSAgICBzdHJ1Y3Qga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9s aWN5X2FyZ3MgYXJnczsKPj4+ICsgICAgc3RydWN0IGtmZF9pb2N0bF9zZXRfbWVtb3J5X3BvbGlj eV9hcmdzICphcmdzID0gZGF0YTsKPj4+ICAgICAgIHN0cnVjdCBrZmRfZGV2ICpkZXY7Cj4+PiAg ICAgICBpbnQgZXJyID0gMDsKPj4+ICAgICAgIHN0cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2UgKnBk ZDsKPj4+ICAgICAgIGVudW0gY2FjaGVfcG9saWN5IGRlZmF1bHRfcG9saWN5LCBhbHRlcm5hdGVf cG9saWN5Owo+Pj4gLSAgICBpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIGFyZywgc2l6ZW9mKGFy Z3MpKSkKPj4+IC0gICAgICAgIHJldHVybiAtRUZBVUxUOwo+Pj4gLQo+Pj4gLSAgICBpZiAoYXJn cy5kZWZhdWx0X3BvbGljeSAhPSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9DT0hFUkVOVAo+Pj4gLSAg ICAgICAgJiYgYXJncy5kZWZhdWx0X3BvbGljeSAhPSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9OT05D T0hFUkVOVCkgewo+Pj4gKyAgICBpZiAoYXJncy0+ZGVmYXVsdF9wb2xpY3kgIT0gS0ZEX0lPQ19D QUNIRV9QT0xJQ1lfQ09IRVJFTlQKPj4+ICsgICAgICAgICYmIGFyZ3MtPmRlZmF1bHRfcG9saWN5 ICE9IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX05PTkNPSEVSRU5UKSB7Cj4+PiAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7Cj4+PiAgICAgICB9Cj4+PiAtICAgIGlmIChhcmdzLmFsdGVybmF0ZV9wb2xp Y3kgIT0gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfQ09IRVJFTlQKPj4+IC0gICAgICAgICYmIGFyZ3Mu YWx0ZXJuYXRlX3BvbGljeSAhPSAKPj4+IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX05PTkNPSEVSRU5U KSB7Cj4+PiArICAgIGlmIChhcmdzLT5hbHRlcm5hdGVfcG9saWN5ICE9IEtGRF9JT0NfQ0FDSEVf UE9MSUNZX0NPSEVSRU5UCj4+PiArICAgICAgICAmJiBhcmdzLT5hbHRlcm5hdGVfcG9saWN5ICE9 IAo+Pj4gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfTk9OQ09IRVJFTlQpIHsKPj4+ICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKPj4+ICAgICAgIH0KPj4+IC0gICAgZGV2ID0ga2ZkX2RldmljZV9ieV9p ZChhcmdzLmdwdV9pZCk7Cj4+PiArICAgIGRldiA9IGtmZF9kZXZpY2VfYnlfaWQoYXJncy0+Z3B1 X2lkKTsKPj4+ICAgICAgIGlmIChkZXYgPT0gTlVMTCkKPj4+ICAgICAgICAgICByZXR1cm4gLUVJ TlZBTDsKPj4+IEBAIC0zOTcsMjMgKzM3NSwyMyBAQCBzdGF0aWMgbG9uZyBrZmRfaW9jdGxfc2V0 X21lbW9yeV9wb2xpY3koc3RydWN0IAo+Pj4gZmlsZSAqZmlsZXAsCj4+PiAgICAgICBwZGQgPSBr ZmRfYmluZF9wcm9jZXNzX3RvX2RldmljZShkZXYsIHApOwo+Pj4gICAgICAgaWYgKElTX0VSUihw ZGQpKSB7Cj4+PiAtICAgICAgICBlcnIgPSBQVFJfRVJSKHBkZCk7Cj4+PiArICAgICAgICBlcnIg PSAtRVNSQ0g7Cj4+PiAgICAgICAgICAgZ290byBvdXQ7Cj4+PiAgICAgICB9Cj4+PiAtICAgIGRl ZmF1bHRfcG9saWN5ID0gKGFyZ3MuZGVmYXVsdF9wb2xpY3kgPT0gCj4+PiBLRkRfSU9DX0NBQ0hF X1BPTElDWV9DT0hFUkVOVCkKPj4+ICsgICAgZGVmYXVsdF9wb2xpY3kgPSAoYXJncy0+ZGVmYXVs dF9wb2xpY3kgPT0gCj4+PiBLRkRfSU9DX0NBQ0hFX1BPTElDWV9DT0hFUkVOVCkKPj4+ICAgICAg ICAgICAgICAgID8gY2FjaGVfcG9saWN5X2NvaGVyZW50IDogY2FjaGVfcG9saWN5X25vbmNvaGVy ZW50Owo+Pj4gICAgICAgYWx0ZXJuYXRlX3BvbGljeSA9Cj4+PiAtICAgICAgICAoYXJncy5hbHRl cm5hdGVfcG9saWN5ID09IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5UKQo+Pj4gKyAgICAg ICAgKGFyZ3MtPmFsdGVybmF0ZV9wb2xpY3kgPT0gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfQ09IRVJF TlQpCj4+PiAgICAgICAgICAgICAgPyBjYWNoZV9wb2xpY3lfY29oZXJlbnQgOiBjYWNoZV9wb2xp Y3lfbm9uY29oZXJlbnQ7Cj4+PiAgICAgICBpZiAoIWRldi0+ZHFtLT5zZXRfY2FjaGVfbWVtb3J5 X3BvbGljeShkZXYtPmRxbSwKPj4+ICAgICAgICAgICAgICAgICAgICZwZGQtPnFwZCwKPj4+ICAg ICAgICAgICAgICAgICAgIGRlZmF1bHRfcG9saWN5LAo+Pj4gICAgICAgICAgICAgICAgICAgYWx0 ZXJuYXRlX3BvbGljeSwKPj4+IC0gICAgICAgICAgICAgICAgKHZvaWQgX191c2VyICopYXJncy5h bHRlcm5hdGVfYXBlcnR1cmVfYmFzZSwKPj4+IC0gICAgICAgICAgICAgICAgYXJncy5hbHRlcm5h dGVfYXBlcnR1cmVfc2l6ZSkpCj4+PiArICAgICAgICAgICAgICAgICh2b2lkIF9fdXNlciAqKWFy Z3MtPmFsdGVybmF0ZV9hcGVydHVyZV9iYXNlLAo+Pj4gKyAgICAgICAgICAgICAgICBhcmdzLT5h bHRlcm5hdGVfYXBlcnR1cmVfc2l6ZSkpCj4+PiAgICAgICAgICAgZXJyID0gLUVJTlZBTDsKPj4+ ICAgb3V0Ogo+Pj4gQEAgLTQyMiw1MyArNDAwLDQ0IEBAIG91dDoKPj4+ICAgICAgIHJldHVybiBl cnI7Cj4+PiAgIH0KPj4+IC1zdGF0aWMgbG9uZyBrZmRfaW9jdGxfZ2V0X2Nsb2NrX2NvdW50ZXJz KHN0cnVjdCBmaWxlICpmaWxlcCwKPj4+IC0gICAgICAgICAgICAgICAgc3RydWN0IGtmZF9wcm9j ZXNzICpwLCB2b2lkIF9fdXNlciAqYXJnKQo+Pj4gK3N0YXRpYyBpbnQga2ZkX2lvY3RsX2dldF9j bG9ja19jb3VudGVycyhzdHJ1Y3QgZmlsZSAqZmlsZXAsCj4+PiArICAgICAgICAgICAgICAgIHN0 cnVjdCBrZmRfcHJvY2VzcyAqcCwgdm9pZCAqZGF0YSkKPj4+ICAgewo+Pj4gLSAgICBzdHJ1Y3Qg a2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVyc19hcmdzIGFyZ3M7Cj4+PiArICAgIHN0cnVjdCBr ZmRfaW9jdGxfZ2V0X2Nsb2NrX2NvdW50ZXJzX2FyZ3MgKmFyZ3MgPSBkYXRhOwo+Pj4gICAgICAg c3RydWN0IGtmZF9kZXYgKmRldjsKPj4+ICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0aW1lOwo+Pj4g LSAgICBpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIGFyZywgc2l6ZW9mKGFyZ3MpKSkKPj4+IC0g ICAgICAgIHJldHVybiAtRUZBVUxUOwo+Pj4gLQo+Pj4gLSAgICBkZXYgPSBrZmRfZGV2aWNlX2J5 X2lkKGFyZ3MuZ3B1X2lkKTsKPj4+ICsgICAgZGV2ID0ga2ZkX2RldmljZV9ieV9pZChhcmdzLT5n cHVfaWQpOwo+Pj4gICAgICAgaWYgKGRldiA9PSBOVUxMKQo+Pj4gICAgICAgICAgIHJldHVybiAt RUlOVkFMOwo+Pj4gICAgICAgLyogUmVhZGluZyBHUFUgY2xvY2sgY291bnRlciBmcm9tIEtHRCAq Lwo+Pj4gLSAgICBhcmdzLmdwdV9jbG9ja19jb3VudGVyID0ga2ZkMmtnZC0+Z2V0X2dwdV9jbG9j a19jb3VudGVyKGRldi0+a2dkKTsKPj4+ICsgICAgYXJncy0+Z3B1X2Nsb2NrX2NvdW50ZXIgPSAK Pj4+IGtmZDJrZ2QtPmdldF9ncHVfY2xvY2tfY291bnRlcihkZXYtPmtnZCk7Cj4+PiAgICAgICAv KiBObyBhY2Nlc3MgdG8gcmR0c2MuIFVzaW5nIHJhdyBtb25vdG9uaWMgdGltZSAqLwo+Pj4gICAg ICAgZ2V0cmF3bW9ub3RvbmljKCZ0aW1lKTsKPj4+IC0gICAgYXJncy5jcHVfY2xvY2tfY291bnRl ciA9ICh1aW50NjRfdCl0aW1lc3BlY190b19ucygmdGltZSk7Cj4+PiArICAgIGFyZ3MtPmNwdV9j bG9ja19jb3VudGVyID0gKHVpbnQ2NF90KXRpbWVzcGVjX3RvX25zKCZ0aW1lKTsKPj4+ICAgICAg IGdldF9tb25vdG9uaWNfYm9vdHRpbWUoJnRpbWUpOwo+Pj4gLSAgICBhcmdzLnN5c3RlbV9jbG9j a19jb3VudGVyID0gKHVpbnQ2NF90KXRpbWVzcGVjX3RvX25zKCZ0aW1lKTsKPj4+ICsgICAgYXJn cy0+c3lzdGVtX2Nsb2NrX2NvdW50ZXIgPSAodWludDY0X3QpdGltZXNwZWNfdG9fbnMoJnRpbWUp Owo+Pj4gICAgICAgLyogU2luY2UgdGhlIGNvdW50ZXIgaXMgaW4gbmFuby1zZWNvbmRzIHdlIHVz ZSAxR0h6IGZyZXF1ZW5jeSAqLwo+Pj4gLSAgICBhcmdzLnN5c3RlbV9jbG9ja19mcmVxID0gMTAw MDAwMDAwMDsKPj4+IC0KPj4+IC0gICAgaWYgKGNvcHlfdG9fdXNlcihhcmcsICZhcmdzLCBzaXpl b2YoYXJncykpKQo+Pj4gLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Cj4+PiArICAgIGFyZ3MtPnN5 c3RlbV9jbG9ja19mcmVxID0gMTAwMDAwMDAwMDsKPj4+ICAgICAgIHJldHVybiAwOwo+Pj4gICB9 Cj4+PiAgIHN0YXRpYyBpbnQga2ZkX2lvY3RsX2dldF9wcm9jZXNzX2FwZXJ0dXJlcyhzdHJ1Y3Qg ZmlsZSAqZmlscCwKPj4+IC0gICAgICAgICAgICAgICAgc3RydWN0IGtmZF9wcm9jZXNzICpwLCB2 b2lkIF9fdXNlciAqYXJnKQo+Pj4gKyAgICAgICAgICAgICAgICBzdHJ1Y3Qga2ZkX3Byb2Nlc3Mg KnAsIHZvaWQgKmRhdGEpCj4+PiAgIHsKPj4+IC0gICAgc3RydWN0IGtmZF9pb2N0bF9nZXRfcHJv Y2Vzc19hcGVydHVyZXNfYXJncyBhcmdzOwo+Pj4gKyAgICBzdHJ1Y3Qga2ZkX2lvY3RsX2dldF9w cm9jZXNzX2FwZXJ0dXJlc19hcmdzICphcmdzID0gZGF0YTsKPj4+ICAgICAgIHN0cnVjdCBrZmRf cHJvY2Vzc19kZXZpY2VfYXBlcnR1cmVzICpwQXBlcnR1cmU7Cj4+PiAgICAgICBzdHJ1Y3Qga2Zk X3Byb2Nlc3NfZGV2aWNlICpwZGQ7Cj4+PiAgICAgICBkZXZfZGJnKGtmZF9kZXZpY2UsICJnZXQg YXBlcnR1cmVzIGZvciBQQVNJRCAlZCIsIHAtPnBhc2lkKTsKPj4+IC0gICAgaWYgKGNvcHlfZnJv bV91c2VyKCZhcmdzLCBhcmcsIHNpemVvZihhcmdzKSkpCj4+PiAtICAgICAgICByZXR1cm4gLUVG QVVMVDsKPj4+IC0KPj4+IC0gICAgYXJncy5udW1fb2Zfbm9kZXMgPSAwOwo+Pj4gKyAgICBhcmdz LT5udW1fb2Zfbm9kZXMgPSAwOwo+Pj4gICAgICAgbXV0ZXhfbG9jaygmcC0+bXV0ZXgpOwo+Pj4g QEAgLTQ3Nyw3ICs0NDYsOCBAQCBzdGF0aWMgaW50IAo+Pj4ga2ZkX2lvY3RsX2dldF9wcm9jZXNz X2FwZXJ0dXJlcyhzdHJ1Y3QgZmlsZSAqZmlscCwKPj4+ICAgICAgICAgICAvKiBSdW4gb3ZlciBh bGwgcGRkIG9mIHRoZSBwcm9jZXNzICovCj4+PiAgICAgICAgICAgcGRkID0ga2ZkX2dldF9maXJz dF9wcm9jZXNzX2RldmljZV9kYXRhKHApOwo+Pj4gICAgICAgICAgIGRvIHsKPj4+IC0gICAgICAg ICAgICBwQXBlcnR1cmUgPSAmYXJncy5wcm9jZXNzX2FwZXJ0dXJlc1thcmdzLm51bV9vZl9ub2Rl c107Cj4+PiArICAgICAgICAgICAgcEFwZXJ0dXJlID0KPj4+ICsgJmFyZ3MtPnByb2Nlc3NfYXBl cnR1cmVzW2FyZ3MtPm51bV9vZl9ub2Rlc107Cj4+PiAgICAgICAgICAgICAgIHBBcGVydHVyZS0+ Z3B1X2lkID0gcGRkLT5kZXYtPmlkOwo+Pj4gICAgICAgICAgICAgICBwQXBlcnR1cmUtPmxkc19i YXNlID0gcGRkLT5sZHNfYmFzZTsKPj4+ICAgICAgICAgICAgICAgcEFwZXJ0dXJlLT5sZHNfbGlt aXQgPSBwZGQtPmxkc19saW1pdDsKPj4+IEBAIC00ODcsNyArNDU3LDcgQEAgc3RhdGljIGludCAK Pj4+IGtmZF9pb2N0bF9nZXRfcHJvY2Vzc19hcGVydHVyZXMoc3RydWN0IGZpbGUgKmZpbHAsCj4+ PiAgICAgICAgICAgICAgIHBBcGVydHVyZS0+c2NyYXRjaF9saW1pdCA9IHBkZC0+c2NyYXRjaF9s aW1pdDsKPj4+ICAgICAgICAgICAgICAgZGV2X2RiZyhrZmRfZGV2aWNlLAo+Pj4gLSAgICAgICAg ICAgICAgICAibm9kZSBpZCAldVxuIiwgYXJncy5udW1fb2Zfbm9kZXMpOwo+Pj4gKyAgICAgICAg ICAgICAgICAibm9kZSBpZCAldVxuIiwgYXJncy0+bnVtX29mX25vZGVzKTsKPj4+ICAgICAgICAg ICAgICAgZGV2X2RiZyhrZmRfZGV2aWNlLAo+Pj4gICAgICAgICAgICAgICAgICAgImdwdSBpZCAl dVxuIiwgcGRkLT5kZXYtPmlkKTsKPj4+ICAgICAgICAgICAgICAgZGV2X2RiZyhrZmRfZGV2aWNl LAo+Pj4gQEAgLTUwMywyMyArNDczLDIzIEBAIHN0YXRpYyBpbnQgCj4+PiBrZmRfaW9jdGxfZ2V0 X3Byb2Nlc3NfYXBlcnR1cmVzKHN0cnVjdCBmaWxlCj4+PiAqZmlscCwKPj4+ICAgICAgICAgICAg ICAgZGV2X2RiZyhrZmRfZGV2aWNlLAo+Pj4gICAgICAgICAgICAgICAgICAgInNjcmF0Y2hfbGlt aXQgJWxsWFxuIiwgcGRkLT5zY3JhdGNoX2xpbWl0KTsKPj4+IC0gICAgICAgICAgICBhcmdzLm51 bV9vZl9ub2RlcysrOwo+Pj4gKyAgICAgICAgICAgIGFyZ3MtPm51bV9vZl9ub2RlcysrOwo+Pj4g ICAgICAgICAgIH0gd2hpbGUgKChwZGQgPSBrZmRfZ2V0X25leHRfcHJvY2Vzc19kZXZpY2VfZGF0 YShwLCBwZGQpKSAKPj4+ICE9IE5VTEwgJiYKPj4+IC0gICAgICAgICAgICAgICAgKGFyZ3MubnVt X29mX25vZGVzIDwgTlVNX09GX1NVUFBPUlRFRF9HUFVTKSk7Cj4+PiArICAgICAgICAgICAgICAg IChhcmdzLT5udW1fb2Zfbm9kZXMgPCBOVU1fT0ZfU1VQUE9SVEVEX0dQVVMpKTsKPj4+ICAgICAg IH0KPj4+ICAgICAgIG11dGV4X3VubG9jaygmcC0+bXV0ZXgpOwo+Pj4gLSAgICBpZiAoY29weV90 b191c2VyKGFyZywgJmFyZ3MsIHNpemVvZihhcmdzKSkpCj4+PiAtICAgICAgICByZXR1cm4gLUVG QVVMVDsKPj4+IC0KPj4+ICAgICAgIHJldHVybiAwOwo+Pj4gICB9Cj4+PiAgIHN0YXRpYyBsb25n IGtmZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsIAo+Pj4gdW5z aWduZWQgbG9uZyBhcmcpCj4+PiAgIHsKPj4+ICAgICAgIHN0cnVjdCBrZmRfcHJvY2VzcyAqcHJv Y2VzczsKPj4+IC0gICAgbG9uZyBlcnIgPSAtRUlOVkFMOwo+Pj4gKyAgICBjaGFyIHN0YWNrX2tk YXRhWzEyOF07Cj4+PiArICAgIGNoYXIgKmtkYXRhID0gTlVMTDsKPj4+ICsgICAgdW5zaWduZWQg aW50IHVzaXplLCBhc2l6ZTsKPj4+ICsgICAgaW50IHJldGNvZGUgPSAtRUlOVkFMOwo+Pj4gICAg ICAgZGV2X2RiZyhrZmRfZGV2aWNlLAo+Pj4gICAgICAgICAgICJpb2N0bCBjbWQgMHgleCAoIyVk KSwgYXJnIDB4JWx4XG4iLAo+Pj4gQEAgLTUyOSw1NCArNDk5LDg0IEBAIHN0YXRpYyBsb25nIGtm ZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIAo+Pj4gdW5zaWduZWQgaW50Cj4+PiBjbWQsIHVu c2lnbmVkIGxvbmcgYXJnKQo+Pj4gICAgICAgaWYgKElTX0VSUihwcm9jZXNzKSkKPj4+ICAgICAg ICAgICByZXR1cm4gUFRSX0VSUihwcm9jZXNzKTsKPj4+ICsgICAgaWYgKGNtZCAmIChJT0NfSU4g fCBJT0NfT1VUKSkgewo+Pj4gKyAgICAgICAgaWYgKGFzaXplIDw9IHNpemVvZihzdGFja19rZGF0 YSkpIHsKPj4+ICsgICAgICAgICAgICBrZGF0YSA9IHN0YWNrX2tkYXRhOwo+Pj4gKyAgICAgICAg fSBlbHNlIHsKPj4+ICsgICAgICAgICAgICBrZGF0YSA9IGttYWxsb2MoYXNpemUsIEdGUF9LRVJO RUwpOwo+Pj4gKyAgICAgICAgICAgIGlmICgha2RhdGEpIHsKPj4+ICsgICAgICAgICAgICAgICAg cmV0Y29kZSA9IC1FTk9NRU07Cj4+PiArICAgICAgICAgICAgICAgIGdvdG8gZXJyX2kxOwo+Pj4g KyAgICAgICAgICAgIH0KPj4+ICsgICAgICAgIH0KPj4+ICsgICAgICAgIGlmIChhc2l6ZSA+IHVz aXplKQo+Pj4gKyAgICAgICAgICAgIG1lbXNldChrZGF0YSArIHVzaXplLCAwLCBhc2l6ZSAtIHVz aXplKTsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICBpZiAoY21kICYgSU9DX0lOKSB7Cj4+PiAr ICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoa2RhdGEsICh2b2lkIF9fdXNlciAqKWFyZywgdXNp emUpICE9IDApIHsKPj4+ICsgICAgICAgICAgICByZXRjb2RlID0gLUVGQVVMVDsKPj4+ICsgICAg ICAgICAgICBnb3RvIGVycl9pMTsKPj4+ICsgICAgICAgIH0KPj4+ICsgICAgfSBlbHNlIGlmIChj bWQgJiBJT0NfT1VUKSB7Cj4+PiArICAgICAgICBtZW1zZXQoa2RhdGEsIDAsIHVzaXplKTsKPj4+ ICsgICAgfQo+Pj4gKwo+Pj4gKwo+Pj4gICAgICAgc3dpdGNoIChjbWQpIHsKPj4+ICAgICAgIGNh c2UgS0ZEX0lPQ19HRVRfVkVSU0lPTjoKPj4+IC0gICAgICAgIGVyciA9IGtmZF9pb2N0bF9nZXRf dmVyc2lvbihmaWxlcCwgcHJvY2VzcywgKHZvaWQgX191c2VyIAo+Pj4gKilhcmcpOwo+Pj4gKyAg ICAgICAgcmV0Y29kZSA9IGtmZF9pb2N0bF9nZXRfdmVyc2lvbihmaWxlcCwgcHJvY2Vzcywga2Rh dGEpOwo+Pj4gICAgICAgICAgIGJyZWFrOwo+Pj4gICAgICAgY2FzZSBLRkRfSU9DX0NSRUFURV9R VUVVRToKPj4+IC0gICAgICAgIGVyciA9IGtmZF9pb2N0bF9jcmVhdGVfcXVldWUoZmlsZXAsIHBy b2Nlc3MsCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgX191c2VyICopYXJnKTsK Pj4+ICsgICAgICAgIHJldGNvZGUgPSBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlKGZpbGVwLCBwcm9j ZXNzLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGtkYXRhKTsKPj4+ICAgICAgICAgICBi cmVhazsKPj4+ICAgICAgIGNhc2UgS0ZEX0lPQ19ERVNUUk9ZX1FVRVVFOgo+Pj4gLSAgICAgICAg ZXJyID0ga2ZkX2lvY3RsX2Rlc3Ryb3lfcXVldWUoZmlsZXAsIHByb2Nlc3MsCj4+PiAtICAgICAg ICAgICAgICAgICAgICAgICAgKHZvaWQgX191c2VyICopYXJnKTsKPj4+ICsgICAgICAgIHJldGNv ZGUgPSBrZmRfaW9jdGxfZGVzdHJveV9xdWV1ZShmaWxlcCwgcHJvY2VzcywKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICBrZGF0YSk7Cj4+PiAgICAgICAgICAgYnJlYWs7Cj4+PiAgICAgICBj YXNlIEtGRF9JT0NfU0VUX01FTU9SWV9QT0xJQ1k6Cj4+PiAtICAgICAgICBlcnIgPSBrZmRfaW9j dGxfc2V0X21lbW9yeV9wb2xpY3koZmlsZXAsIHByb2Nlc3MsCj4+PiAtICAgICAgICAgICAgICAg ICAgICAgICAgKHZvaWQgX191c2VyICopYXJnKTsKPj4+ICsgICAgICAgIHJldGNvZGUgPSBrZmRf aW9jdGxfc2V0X21lbW9yeV9wb2xpY3koZmlsZXAsIHByb2Nlc3MsCj4+PiArICAgICAgICAgICAg ICAgICAgICAgICAga2RhdGEpOwo+Pj4gICAgICAgICAgIGJyZWFrOwo+Pj4gICAgICAgY2FzZSBL RkRfSU9DX0dFVF9DTE9DS19DT1VOVEVSUzoKPj4+IC0gICAgICAgIGVyciA9IGtmZF9pb2N0bF9n ZXRfY2xvY2tfY291bnRlcnMoZmlsZXAsIHByb2Nlc3MsCj4+PiAtICAgICAgICAgICAgICAgICAg ICAgICAgKHZvaWQgX191c2VyICopYXJnKTsKPj4+ICsgICAgICAgIHJldGNvZGUgPSBrZmRfaW9j dGxfZ2V0X2Nsb2NrX2NvdW50ZXJzKGZpbGVwLCBwcm9jZXNzLAo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIGtkYXRhKTsKPj4+ICAgICAgICAgICBicmVhazsKPj4+ICAgICAgIGNhc2UgS0ZE X0lPQ19HRVRfUFJPQ0VTU19BUEVSVFVSRVM6Cj4+PiAtICAgICAgICBlcnIgPSBrZmRfaW9jdGxf Z2V0X3Byb2Nlc3NfYXBlcnR1cmVzKGZpbGVwLCBwcm9jZXNzLAo+Pj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICh2b2lkIF9fdXNlciAqKWFyZyk7Cj4+PiArICAgICAgICByZXRjb2RlID0ga2Zk X2lvY3RsX2dldF9wcm9jZXNzX2FwZXJ0dXJlcyhmaWxlcCwgcHJvY2VzcywKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICBrZGF0YSk7Cj4+PiAgICAgICAgICAgYnJlYWs7Cj4+PiAgICAgICBj YXNlIEtGRF9JT0NfVVBEQVRFX1FVRVVFOgo+Pj4gLSAgICAgICAgZXJyID0ga2ZkX2lvY3RsX3Vw ZGF0ZV9xdWV1ZShmaWxlcCwgcHJvY2VzcywKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAo dm9pZCBfX3VzZXIgKilhcmcpOwo+Pj4gKyAgICAgICAgcmV0Y29kZSA9IGtmZF9pb2N0bF91cGRh dGVfcXVldWUoZmlsZXAsIHByb2Nlc3MsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAga2Rh dGEpOwo+Pj4gICAgICAgICAgIGJyZWFrOwo+Pj4gICAgICAgZGVmYXVsdDoKPj4+IC0gICAgICAg IGRldl9lcnIoa2ZkX2RldmljZSwKPj4+ICsgICAgICAgIGRldl9kYmcoa2ZkX2RldmljZSwKPj4+ ICAgICAgICAgICAgICAgInVua25vd24gaW9jdGwgY21kIDB4JXgsIGFyZyAweCVseClcbiIsCj4+ PiAgICAgICAgICAgICAgIGNtZCwgYXJnKTsKPj4+IC0gICAgICAgIGVyciA9IC1FSU5WQUw7Cj4+ PiArICAgICAgICByZXRjb2RlID0gLUVJTlZBTDsKPj4+ICAgICAgICAgICBicmVhazsKPj4+ICAg ICAgIH0KPj4+IC0gICAgaWYgKGVyciA8IDApCj4+PiAtICAgICAgICBkZXZfZXJyKGtmZF9kZXZp Y2UsCj4+PiAtICAgICAgICAgICAgImlvY3RsIGVycm9yICVsZCBmb3IgaW9jdGwgY21kIDB4JXgg KCMlZClcbiIsCj4+PiAtICAgICAgICAgICAgZXJyLCBjbWQsIF9JT0NfTlIoY21kKSk7Cj4+PiAr ICAgIGlmIChjbWQgJiBJT0NfT1VUKQo+Pj4gKyAgICAgICAgaWYgKGNvcHlfdG9fdXNlcigodm9p ZCBfX3VzZXIgKilhcmcsIGtkYXRhLCB1c2l6ZSkgIT0gMCkKPj4+ICsgICAgICAgICAgICByZXRj b2RlID0gLUVGQVVMVDsKPj4+IC0gICAgcmV0dXJuIGVycjsKPj4+ICtlcnJfaTE6Cj4+PiArICAg IGlmIChrZGF0YSAhPSBzdGFja19rZGF0YSkKPj4+ICsgICAgICAgIGtmcmVlKGtkYXRhKTsKPj4+ ICsKPj4+ICsgICAgaWYgKHJldGNvZGUpCj4+PiArICAgICAgICBkZXZfZGJnKGtmZF9kZXZpY2Us ICJyZXQgPSAlZFxuIiwgcmV0Y29kZSk7Cj4+PiArCj4+PiArICAgIHJldHVybiByZXRjb2RlOwo+ Pj4gICB9Cj4+PiAgIHN0YXRpYyBpbnQga2ZkX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+PgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK