From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] drm/atomic: Add for_each_{connector, crtc, plane}_in_state helper macros Date: Sat, 11 Apr 2015 18:50:37 +0200 Message-ID: <20150411165037.GP6092@phenom.ffwll.local> References: <1428667119-18836-1-git-send-email-ander.conselvan.de.oliveira@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f171.google.com (mail-wi0-f171.google.com [209.85.212.171]) by gabe.freedesktop.org (Postfix) with ESMTP id 19DE46E1CE for ; Sat, 11 Apr 2015 09:48:39 -0700 (PDT) Received: by wiax7 with SMTP id x7so35532747wia.0 for ; Sat, 11 Apr 2015 09:48:38 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1428667119-18836-1-git-send-email-ander.conselvan.de.oliveira@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Ander Conselvan de Oliveira Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBBcHIgMTAsIDIwMTUgYXQgMDI6NTg6MzlQTSArMDMwMCwgQW5kZXIgQ29uc2VsdmFu IGRlIE9saXZlaXJhIHdyb3RlOgo+IFRoaXMgc2F2ZXMgc29tZSB0eXBpbmcgd2hlbmV2ZXIgYSBp dGVyYXRpb24gb3ZlciBhbGwgdGhlIGNvbm5lY3RvciwKPiBjcnRjIG9yIHBsYW5lIHN0YXRlcyBp biB0aGUgYXRvbWljIHN0YXRlIGlzIHdyaXR0ZW4sIHdoaWNoIGhhcHBlbnMKPiBxdWl0ZSBvZnRl bi4KPiAKPiBDYzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IFNpZ25lZC1vZmYt Ynk6IEFuZGVyIENvbnNlbHZhbiBkZSBPbGl2ZWlyYSA8YW5kZXIuY29uc2VsdmFuLmRlLm9saXZl aXJhQGludGVsLmNvbT4KCkFwcGxpZWQgdG8gZHJtLW1pc2MsIHRoYW5rcy4KLURhbmllbAoKPiAt LS0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYyAgICAgICAgfCAgNjIgKysrLS0tLS0t Cj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jIHwgMjUzICsrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICBpbmNsdWRlL2RybS9kcm1fYXRvbWljLmggICAg ICAgICAgICB8ICAyNCArKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgMTE3IGluc2VydGlvbnMoKyks IDIyMiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9h dG9taWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKPiBpbmRleCA1N2VmZGJlLi42 ODIzNmJkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCj4gQEAgLTkwOSwxNCArOTA5LDEzIEBAIGlu dAo+ICBkcm1fYXRvbWljX2Nvbm5lY3RvcnNfZm9yX2NydGMoc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlLAo+ICAJCQkgICAgICAgc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICB7Cj4gLQlp bnQgaSwgbnVtX2Nvbm5lY3RlZF9jb25uZWN0b3JzID0gMDsKPiAtCj4gLQlmb3IgKGkgPSAwOyBp IDwgc3RhdGUtPm51bV9jb25uZWN0b3I7IGkrKykgewo+IC0JCXN0cnVjdCBkcm1fY29ubmVjdG9y X3N0YXRlICpjb25uX3N0YXRlOwo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsK PiArCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlOwo+ICAKPiAtCQljb25u X3N0YXRlID0gc3RhdGUtPmNvbm5lY3Rvcl9zdGF0ZXNbaV07Cj4gKwlpbnQgaSwgbnVtX2Nvbm5l Y3RlZF9jb25uZWN0b3JzID0gMDsKPiAgCj4gLQkJaWYgKGNvbm5fc3RhdGUgJiYgY29ubl9zdGF0 ZS0+Y3J0YyA9PSBjcnRjKQo+ICsJZm9yX2VhY2hfY29ubmVjdG9yX2luX3N0YXRlKHN0YXRlLCBj b25uZWN0b3IsIGNvbm5fc3RhdGUsIGkpIHsKPiArCQlpZiAoY29ubl9zdGF0ZS0+Y3J0YyA9PSBj cnRjKQo+ICAJCQludW1fY29ubmVjdGVkX2Nvbm5lY3RvcnMrKzsKPiAgCX0KPiAgCj4gQEAgLTk2 OCwxOSArOTY3LDE2IEBAIGludCBkcm1fYXRvbWljX2NoZWNrX29ubHkoc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gc3RhdGUt PmRldjsKPiAgCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZkZXYtPm1vZGVfY29u ZmlnOwo+IC0JaW50IG5wbGFuZXMgPSBjb25maWctPm51bV90b3RhbF9wbGFuZTsKPiAtCWludCBu Y3J0Y3MgPSBjb25maWctPm51bV9jcnRjOwo+ICsJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4g KwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKPiArCXN0cnVjdCBkcm1fY3J0 YyAqY3J0YzsKPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiAgCWludCBp LCByZXQgPSAwOwo+ICAKPiAgCURSTV9ERUJVR19BVE9NSUMoImNoZWNraW5nICVwXG4iLCBzdGF0 ZSk7Cj4gIAo+IC0JZm9yIChpID0gMDsgaSA8IG5wbGFuZXM7IGkrKykgewo+IC0JCXN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lID0gc3RhdGUtPnBsYW5lc1tpXTsKPiAtCj4gLQkJaWYgKCFwbGFuZSkK PiAtCQkJY29udGludWU7Cj4gLQo+IC0JCXJldCA9IGRybV9hdG9taWNfcGxhbmVfY2hlY2socGxh bmUsIHN0YXRlLT5wbGFuZV9zdGF0ZXNbaV0pOwo+ICsJZm9yX2VhY2hfcGxhbmVfaW5fc3RhdGUo c3RhdGUsIHBsYW5lLCBwbGFuZV9zdGF0ZSwgaSkgewo+ICsJCXJldCA9IGRybV9hdG9taWNfcGxh bmVfY2hlY2socGxhbmUsIHBsYW5lX3N0YXRlKTsKPiAgCQlpZiAocmV0KSB7Cj4gIAkJCURSTV9E RUJVR19BVE9NSUMoIltQTEFORTolZF0gYXRvbWljIGNvcmUgY2hlY2sgZmFpbGVkXG4iLAo+ICAJ CQkJCSBwbGFuZS0+YmFzZS5pZCk7Cj4gQEAgLTk4OCwxMyArOTg0LDggQEAgaW50IGRybV9hdG9t aWNfY2hlY2tfb25seShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gIAkJfQo+ICAJ fQo+ICAKPiAtCWZvciAoaSA9IDA7IGkgPCBuY3J0Y3M7IGkrKykgewo+IC0JCXN0cnVjdCBkcm1f Y3J0YyAqY3J0YyA9IHN0YXRlLT5jcnRjc1tpXTsKPiAtCj4gLQkJaWYgKCFjcnRjKQo+IC0JCQlj b250aW51ZTsKPiAtCj4gLQkJcmV0ID0gZHJtX2F0b21pY19jcnRjX2NoZWNrKGNydGMsIHN0YXRl LT5jcnRjX3N0YXRlc1tpXSk7Cj4gKwlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRj LCBjcnRjX3N0YXRlLCBpKSB7Cj4gKwkJcmV0ID0gZHJtX2F0b21pY19jcnRjX2NoZWNrKGNydGMs IGNydGNfc3RhdGUpOwo+ICAJCWlmIChyZXQpIHsKPiAgCQkJRFJNX0RFQlVHX0FUT01JQygiW0NS VEM6JWRdIGF0b21pYyBjb3JlIGNoZWNrIGZhaWxlZFxuIiwKPiAgCQkJCQkgY3J0Yy0+YmFzZS5p ZCk7Cj4gQEAgLTEwMDYsMTMgKzk5Nyw3IEBAIGludCBkcm1fYXRvbWljX2NoZWNrX29ubHkoc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICAJCXJldCA9IGNvbmZpZy0+ZnVuY3MtPmF0 b21pY19jaGVjayhzdGF0ZS0+ZGV2LCBzdGF0ZSk7Cj4gIAo+ICAJaWYgKCFzdGF0ZS0+YWxsb3df bW9kZXNldCkgewo+IC0JCWZvciAoaSA9IDA7IGkgPCBuY3J0Y3M7IGkrKykgewo+IC0JCQlzdHJ1 Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+Y3J0Y3NbaV07Cj4gLQkJCXN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9IHN0YXRlLT5jcnRjX3N0YXRlc1tpXTsKPiAtCj4gLQkJCWlm ICghY3J0YykKPiAtCQkJCWNvbnRpbnVlOwo+IC0KPiArCQlmb3JfZWFjaF9jcnRjX2luX3N0YXRl KHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Cj4gIAkJCWlmIChjcnRjX3N0YXRlLT5tb2Rl X2NoYW5nZWQgfHwKPiAgCQkJICAgIGNydGNfc3RhdGUtPmFjdGl2ZV9jaGFuZ2VkKSB7Cj4gIAkJ CQlEUk1fREVCVUdfQVRPTUlDKCJbQ1JUQzolZF0gcmVxdWlyZXMgZnVsbCBtb2Rlc2V0XG4iLAo+ IEBAIC0xMjEwLDYgKzExOTUsOCBAQCBpbnQgZHJtX21vZGVfYXRvbWljX2lvY3RsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCj4gIAlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7Cj4gIAlz dHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggY3R4Owo+ICAJc3RydWN0IGRybV9wbGFuZSAq cGxhbmU7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKmNydGNfc3RhdGU7Cj4gIAl1bnNpZ25lZCBwbGFuZV9tYXNrID0gMDsKPiAgCWludCByZXQg PSAwOwo+ICAJdW5zaWduZWQgaW50IGksIGo7Cj4gQEAgLTEzMTMsMTUgKzEzMDAsOSBAQCByZXRy eToKPiAgCX0KPiAgCj4gIAlpZiAoYXJnLT5mbGFncyAmIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVO VCkgewo+IC0JCWludCBuY3J0Y3MgPSBkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjOwo+IC0KPiAt CQlmb3IgKGkgPSAwOyBpIDwgbmNydGNzOyBpKyspIHsKPiAtCQkJc3RydWN0IGRybV9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlID0gc3RhdGUtPmNydGNfc3RhdGVzW2ldOwo+ICsJCWZvcl9lYWNoX2Ny dGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsIGkpIHsKPiAgCQkJc3RydWN0IGRy bV9wZW5kaW5nX3ZibGFua19ldmVudCAqZTsKPiAgCj4gLQkJCWlmICghY3J0Y19zdGF0ZSkKPiAt CQkJCWNvbnRpbnVlOwo+IC0KPiAgCQkJZSA9IGNyZWF0ZV92YmxhbmtfZXZlbnQoZGV2LCBmaWxl X3ByaXYsIGFyZy0+dXNlcl9kYXRhKTsKPiAgCQkJaWYgKCFlKSB7Cj4gIAkJCQlyZXQgPSAtRU5P TUVNOwo+IEBAIC0xMzczLDE0ICsxMzU0LDcgQEAgZmFpbDoKPiAgCQlnb3RvIGJhY2tvZmY7Cj4g IAo+ICAJaWYgKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQpIHsKPiAtCQlp bnQgbmNydGNzID0gZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YzsKPiAtCj4gLQkJZm9yIChpID0g MDsgaSA8IG5jcnRjczsgaSsrKSB7Cj4gLQkJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSA9IHN0YXRlLT5jcnRjX3N0YXRlc1tpXTsKPiAtCj4gLQkJCWlmICghY3J0Y19zdGF0ZSkK PiAtCQkJCWNvbnRpbnVlOwo+IC0KPiArCQlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBj cnRjLCBjcnRjX3N0YXRlLCBpKSB7Cj4gIAkJCWRlc3Ryb3lfdmJsYW5rX2V2ZW50KGRldiwgZmls ZV9wcml2LCBjcnRjX3N0YXRlLT5ldmVudCk7Cj4gIAkJCWNydGNfc3RhdGUtPmV2ZW50ID0gTlVM TDsKPiAgCQl9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBl ci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPiBpbmRleCBlNjdkNGQ2 Li5hMmZiMGQ0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBl ci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPiBAQCAtMjQ4 LDMwICsyNDgsMjQgQEAgdXBkYXRlX2Nvbm5lY3Rvcl9yb3V0aW5nKHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSwgaW50IGNvbm5faWR4KQo+ICBzdGF0aWMgaW50Cj4gIG1vZGVfZml4dXAo c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICB7Cj4gLQlpbnQgbmNydGNzID0gc3Rh dGUtPmRldi0+bW9kZV9jb25maWcubnVtX2NydGM7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7 Cj4gIAlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yOwo+ICAJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5f c3RhdGU7Cj4gIAlpbnQgaTsKPiAgCWJvb2wgcmV0Owo+ICAKPiAtCWZvciAoaSA9IDA7IGkgPCBu Y3J0Y3M7IGkrKykgewo+IC0JCWNydGNfc3RhdGUgPSBzdGF0ZS0+Y3J0Y19zdGF0ZXNbaV07Cj4g LQo+IC0JCWlmICghY3J0Y19zdGF0ZSB8fCAhY3J0Y19zdGF0ZS0+bW9kZV9jaGFuZ2VkKQo+ICsJ Zm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkgewo+ICsJ CWlmICghY3J0Y19zdGF0ZS0+bW9kZV9jaGFuZ2VkKQo+ICAJCQljb250aW51ZTsKPiAgCj4gIAkJ ZHJtX21vZGVfY29weSgmY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZSwgJmNydGNfc3RhdGUtPm1v ZGUpOwo+ICAJfQo+ICAKPiAtCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVtX2Nvbm5lY3Rvcjsg aSsrKSB7Cj4gKwlmb3JfZWFjaF9jb25uZWN0b3JfaW5fc3RhdGUoc3RhdGUsIGNvbm5lY3Rvciwg Y29ubl9zdGF0ZSwgaSkgewo+ICAJCWNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVu Y3MgKmZ1bmNzOwo+ICAJCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKPiAgCj4gLQkJY29u bl9zdGF0ZSA9IHN0YXRlLT5jb25uZWN0b3Jfc3RhdGVzW2ldOwo+IC0KPiAtCQlpZiAoIWNvbm5f c3RhdGUpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAgCQlXQVJOX09OKCEhY29ubl9zdGF0ZS0+YmVz dF9lbmNvZGVyICE9ICEhY29ubl9zdGF0ZS0+Y3J0Yyk7Cj4gIAo+ICAJCWlmICghY29ubl9zdGF0 ZS0+Y3J0YyB8fCAhY29ubl9zdGF0ZS0+YmVzdF9lbmNvZGVyKQo+IEBAIC0zMTYsMTQgKzMxMCwx MCBAQCBtb2RlX2ZpeHVwKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiAgCQl9Cj4g IAl9Cj4gIAo+IC0JZm9yIChpID0gMDsgaSA8IG5jcnRjczsgaSsrKSB7Cj4gKwlmb3JfZWFjaF9j cnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Cj4gIAkJY29uc3Qgc3Ry dWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqZnVuY3M7Cj4gLQkJc3RydWN0IGRybV9jcnRjICpj cnRjOwo+ICAKPiAtCQljcnRjX3N0YXRlID0gc3RhdGUtPmNydGNfc3RhdGVzW2ldOwo+IC0JCWNy dGMgPSBzdGF0ZS0+Y3J0Y3NbaV07Cj4gLQo+IC0JCWlmICghY3J0Y19zdGF0ZSB8fCAhY3J0Y19z dGF0ZS0+bW9kZV9jaGFuZ2VkKQo+ICsJCWlmICghY3J0Y19zdGF0ZS0+bW9kZV9jaGFuZ2VkKQo+ ICAJCQljb250aW51ZTsKPiAgCj4gIAkJZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKPiBA QCAtMzcxLDE4ICszNjEsMTMgQEAgaW50Cj4gIGRybV9hdG9taWNfaGVscGVyX2NoZWNrX21vZGVz ZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSkKPiAgewo+IC0JaW50IG5jcnRjcyA9IGRldi0+bW9kZV9jb25maWcubnVtX2NydGM7 Cj4gIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gIAlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNy dGNfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICsJc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5lY3Rvcl9zdGF0ZTsKPiAgCWludCBpLCByZXQ7Cj4g IAo+IC0JZm9yIChpID0gMDsgaSA8IG5jcnRjczsgaSsrKSB7Cj4gLQkJY3J0YyA9IHN0YXRlLT5j cnRjc1tpXTsKPiAtCQljcnRjX3N0YXRlID0gc3RhdGUtPmNydGNfc3RhdGVzW2ldOwo+IC0KPiAt CQlpZiAoIWNydGMpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiArCWZvcl9lYWNoX2NydGNfaW5fc3Rh dGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsIGkpIHsKPiAgCQlpZiAoIWRybV9tb2RlX2VxdWFs KCZjcnRjLT5zdGF0ZS0+bW9kZSwgJmNydGNfc3RhdGUtPm1vZGUpKSB7Cj4gIAkJCURSTV9ERUJV R19BVE9NSUMoIltDUlRDOiVkXSBtb2RlIGNoYW5nZWRcbiIsCj4gIAkJCQkJIGNydGMtPmJhc2Uu aWQpOwo+IEBAIC0zOTYsNyArMzgxLDcgQEAgZHJtX2F0b21pY19oZWxwZXJfY2hlY2tfbW9kZXNl dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCX0KPiAgCX0KPiAgCj4gLQlmb3IgKGkgPSAw OyBpIDwgc3RhdGUtPm51bV9jb25uZWN0b3I7IGkrKykgewo+ICsJZm9yX2VhY2hfY29ubmVjdG9y X2luX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IsIGNvbm5lY3Rvcl9zdGF0ZSwgaSkgewo+ICAJCS8q Cj4gIAkJICogVGhpcyBvbmx5IHNldHMgY3J0Yy0+bW9kZV9jaGFuZ2VkIGZvciByb3V0aW5nIGNo YW5nZXMsCj4gIAkJICogZHJpdmVycyBtdXN0IHNldCBjcnRjLT5tb2RlX2NoYW5nZWQgdGhlbXNl bHZlcyB3aGVuIGNvbm5lY3Rvcgo+IEBAIC00MTMsMTUgKzM5OCw5IEBAIGRybV9hdG9taWNfaGVs cGVyX2NoZWNrX21vZGVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCSAqIGNvbmZpZ3Vy YXRpb24uIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBjYWxsaW5nIG1vZGVfZml4dXAgaW4gY2Fz ZSBhCj4gIAkgKiBjcnRjIG9ubHkgY2hhbmdlZCBpdHMgbW9kZSBidXQgaGFzIHRoZSBzYW1lIHNl dCBvZiBjb25uZWN0b3JzLgo+ICAJICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgbmNydGNzOyBpKysp IHsKPiArCWZvcl9lYWNoX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsIGkp IHsKPiAgCQlpbnQgbnVtX2Nvbm5lY3RvcnM7Cj4gIAo+IC0JCWNydGMgPSBzdGF0ZS0+Y3J0Y3Nb aV07Cj4gLQkJY3J0Y19zdGF0ZSA9IHN0YXRlLT5jcnRjX3N0YXRlc1tpXTsKPiAtCj4gLQkJaWYg KCFjcnRjKQo+IC0JCQljb250aW51ZTsKPiAtCj4gIAkJLyoKPiAgCQkgKiBXZSBtdXN0IHNldCAt PmFjdGl2ZV9jaGFuZ2VkIGFmdGVyIHdhbGtpbmcgY29ubmVjdG9ycyBmb3IKPiAgCQkgKiBvdGhl cndpc2UgYW4gdXBkYXRlIHRoYXQgb25seSBjaGFuZ2VzIGFjdGl2ZSB3b3VsZCByZXN1bHQgaW4K PiBAQCAtNDc2LDE3ICs0NTUsMTQgQEAgaW50Cj4gIGRybV9hdG9taWNfaGVscGVyX2NoZWNrX3Bs YW5lcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCQkgICAgICAgc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlKQo+ICB7Cj4gLQlpbnQgbnBsYW5lcyA9IGRldi0+bW9kZV9jb25maWcu bnVtX3RvdGFsX3BsYW5lOwo+IC0JaW50IG5jcnRjcyA9IGRldi0+bW9kZV9jb25maWcubnVtX2Ny dGM7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KmNydGNfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiArCXN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOwo+ICAJaW50IGksIHJldCA9IDA7Cj4gIAo+IC0JZm9y IChpID0gMDsgaSA8IG5wbGFuZXM7IGkrKykgewo+ICsJZm9yX2VhY2hfcGxhbmVfaW5fc3RhdGUo c3RhdGUsIHBsYW5lLCBwbGFuZV9zdGF0ZSwgaSkgewo+ICAJCWNvbnN0IHN0cnVjdCBkcm1fcGxh bmVfaGVscGVyX2Z1bmNzICpmdW5jczsKPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IHN0 YXRlLT5wbGFuZXNbaV07Cj4gLQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUg PSBzdGF0ZS0+cGxhbmVfc3RhdGVzW2ldOwo+IC0KPiAtCQlpZiAoIXBsYW5lKQo+IC0JCQljb250 aW51ZTsKPiAgCj4gIAkJZnVuY3MgPSBwbGFuZS0+aGVscGVyX3ByaXZhdGU7Cj4gIAo+IEBAIC01 MDMsMTIgKzQ3OSw4IEBAIGRybV9hdG9taWNfaGVscGVyX2NoZWNrX3BsYW5lcyhzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAo+ICAJCX0KPiAgCX0KPiAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgbmNydGNz OyBpKyspIHsKPiArCWZvcl9lYWNoX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3Rh dGUsIGkpIHsKPiAgCQljb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpmdW5jczsK PiAtCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+Y3J0Y3NbaV07Cj4gLQo+IC0JCWlm ICghY3J0YykKPiAtCQkJY29udGludWU7Cj4gIAo+ICAJCWZ1bmNzID0gY3J0Yy0+aGVscGVyX3By aXZhdGU7Cj4gIAo+IEBAIC01NjcsMjIgKzUzOSwyMCBAQCBFWFBPUlRfU1lNQk9MKGRybV9hdG9t aWNfaGVscGVyX2NoZWNrKTsKPiAgc3RhdGljIHZvaWQKPiAgZGlzYWJsZV9vdXRwdXRzKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUpCj4g IHsKPiAtCWludCBuY3J0Y3MgPSBvbGRfc3RhdGUtPmRldi0+bW9kZV9jb25maWcubnVtX2NydGM7 Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICsJc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlOwo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZTsKPiAgCWludCBpOwo+ICAK PiAtCWZvciAoaSA9IDA7IGkgPCBvbGRfc3RhdGUtPm51bV9jb25uZWN0b3I7IGkrKykgewo+ICsJ Zm9yX2VhY2hfY29ubmVjdG9yX2luX3N0YXRlKG9sZF9zdGF0ZSwgY29ubmVjdG9yLCBvbGRfY29u bl9zdGF0ZSwgaSkgewo+ICAJCWNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3Mg KmZ1bmNzOwo+IC0JCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9zdGF0ZTsK PiAtCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICAJCXN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcjsKPiAgCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRl Owo+ICAKPiAtCQlvbGRfY29ubl9zdGF0ZSA9IG9sZF9zdGF0ZS0+Y29ubmVjdG9yX3N0YXRlc1tp XTsKPiAtCQljb25uZWN0b3IgPSBvbGRfc3RhdGUtPmNvbm5lY3RvcnNbaV07Cj4gLQo+ICAJCS8q IFNodXQgZG93biBldmVyeXRoaW5nIHRoYXQncyBpbiB0aGUgY2hhbmdlc2V0IGFuZCBjdXJyZW50 bHkKPiAgCQkgKiBzdGlsbCBvbi4gU28gbmVlZCB0byBjaGVjayB0aGUgb2xkLCBzYXZlZCBzdGF0 ZS4gKi8KPiAtCQlpZiAoIW9sZF9jb25uX3N0YXRlIHx8ICFvbGRfY29ubl9zdGF0ZS0+Y3J0YykK PiArCQlpZiAoIW9sZF9jb25uX3N0YXRlLT5jcnRjKQo+ICAJCQljb250aW51ZTsKPiAgCj4gIAkJ b2xkX2NydGNfc3RhdGUgPSBvbGRfc3RhdGUtPmNydGNfc3RhdGVzW2RybV9jcnRjX2luZGV4KG9s ZF9jb25uX3N0YXRlLT5jcnRjKV07Cj4gQEAgLTYyMywxNiArNTkzLDExIEBAIGRpc2FibGVfb3V0 cHV0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqb2xk X3N0YXRlKQo+ICAJCQllbmNvZGVyLT5icmlkZ2UtPmZ1bmNzLT5wb3N0X2Rpc2FibGUoZW5jb2Rl ci0+YnJpZGdlKTsKPiAgCX0KPiAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgbmNydGNzOyBpKyspIHsK PiArCWZvcl9lYWNoX2NydGNfaW5fc3RhdGUob2xkX3N0YXRlLCBjcnRjLCBvbGRfY3J0Y19zdGF0 ZSwgaSkgewo+ICAJCWNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmZ1bmNzOwo+ IC0JCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiAtCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9s ZF9jcnRjX3N0YXRlOwo+IC0KPiAtCQljcnRjID0gb2xkX3N0YXRlLT5jcnRjc1tpXTsKPiAtCQlv bGRfY3J0Y19zdGF0ZSA9IG9sZF9zdGF0ZS0+Y3J0Y19zdGF0ZXNbaV07Cj4gIAo+ICAJCS8qIFNo dXQgZG93biBldmVyeXRoaW5nIHRoYXQgbmVlZHMgYSBmdWxsIG1vZGVzZXQuICovCj4gLQkJaWYg KCFjcnRjIHx8ICFuZWVkc19tb2Rlc2V0KGNydGMtPnN0YXRlKSkKPiArCQlpZiAoIW5lZWRzX21v ZGVzZXQoY3J0Yy0+c3RhdGUpKQo+ICAJCQljb250aW51ZTsKPiAgCj4gIAkJaWYgKCFvbGRfY3J0 Y19zdGF0ZS0+YWN0aXZlKQo+IEBAIC02NTcsMTYgKzYyMiwxNSBAQCBkaXNhYmxlX291dHB1dHMo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0 ZSkKPiAgc3RhdGljIHZvaWQKPiAgc2V0X3JvdXRpbmdfbGlua3Moc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPiAgewo+IC0JaW50IG5j cnRjcyA9IG9sZF9zdGF0ZS0+ZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YzsKPiArCXN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAq b2xkX2Nvbm5fc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gKwlzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlOwo+ICAJaW50IGk7Cj4gIAo+ICAJLyogY2xlYXIg b3V0IGV4aXN0aW5nIGxpbmtzICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgb2xkX3N0YXRlLT5udW1f Y29ubmVjdG9yOyBpKyspIHsKPiAtCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ IC0KPiAtCQljb25uZWN0b3IgPSBvbGRfc3RhdGUtPmNvbm5lY3RvcnNbaV07Cj4gLQo+IC0JCWlm ICghY29ubmVjdG9yIHx8ICFjb25uZWN0b3ItPmVuY29kZXIpCj4gKwlmb3JfZWFjaF9jb25uZWN0 b3JfaW5fc3RhdGUob2xkX3N0YXRlLCBjb25uZWN0b3IsIG9sZF9jb25uX3N0YXRlLCBpKSB7Cj4g KwkJaWYgKCFjb25uZWN0b3ItPmVuY29kZXIpCj4gIAkJCWNvbnRpbnVlOwo+ICAKPiAgCQlXQVJO X09OKCFjb25uZWN0b3ItPmVuY29kZXItPmNydGMpOwo+IEBAIC02NzYsMTIgKzY0MCw4IEBAIHNl dF9yb3V0aW5nX2xpbmtzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpvbGRfc3RhdGUpCj4gIAl9Cj4gIAo+ICAJLyogc2V0IG5ldyBsaW5rcyAqLwo+IC0J Zm9yIChpID0gMDsgaSA8IG9sZF9zdGF0ZS0+bnVtX2Nvbm5lY3RvcjsgaSsrKSB7Cj4gLQkJc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiAtCj4gLQkJY29ubmVjdG9yID0gb2xkX3N0 YXRlLT5jb25uZWN0b3JzW2ldOwo+IC0KPiAtCQlpZiAoIWNvbm5lY3RvciB8fCAhY29ubmVjdG9y LT5zdGF0ZS0+Y3J0YykKPiArCWZvcl9lYWNoX2Nvbm5lY3Rvcl9pbl9zdGF0ZShvbGRfc3RhdGUs IGNvbm5lY3Rvciwgb2xkX2Nvbm5fc3RhdGUsIGkpIHsKPiArCQlpZiAoIWNvbm5lY3Rvci0+c3Rh dGUtPmNydGMpCj4gIAkJCWNvbnRpbnVlOwo+ICAKPiAgCQlpZiAoV0FSTl9PTighY29ubmVjdG9y LT5zdGF0ZS0+YmVzdF9lbmNvZGVyKSkKPiBAQCAtNjkyLDE0ICs2NTIsNyBAQCBzZXRfcm91dGlu Z19saW5rcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq b2xkX3N0YXRlKQo+ICAJfQo+ICAKPiAgCS8qIHNldCBsZWdhY3kgc3RhdGUgaW4gdGhlIGNydGMg c3RydWN0dXJlICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgbmNydGNzOyBpKyspIHsKPiAtCQlzdHJ1 Y3QgZHJtX2NydGMgKmNydGM7Cj4gLQo+IC0JCWNydGMgPSBvbGRfc3RhdGUtPmNydGNzW2ldOwo+ IC0KPiAtCQlpZiAoIWNydGMpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiArCWZvcl9lYWNoX2NydGNf aW5fc3RhdGUob2xkX3N0YXRlLCBjcnRjLCBvbGRfY3J0Y19zdGF0ZSwgaSkgewo+ICAJCWNydGMt Pm1vZGUgPSBjcnRjLT5zdGF0ZS0+bW9kZTsKPiAgCQljcnRjLT5lbmFibGVkID0gY3J0Yy0+c3Rh dGUtPmVuYWJsZTsKPiAgCQljcnRjLT54ID0gY3J0Yy0+cHJpbWFyeS0+c3RhdGUtPnNyY194ID4+ IDE2Owo+IEBAIC03MTAsMTYgKzY2MywxNiBAQCBzZXRfcm91dGluZ19saW5rcyhzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqb2xkX3N0YXRlKQo+ICBzdGF0 aWMgdm9pZAo+ICBjcnRjX3NldF9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUpCj4gIHsKPiAtCWludCBuY3J0Y3MgPSBvbGRfc3Rh dGUtPmRldi0+bW9kZV9jb25maWcubnVtX2NydGM7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7 Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlOwo+ICsJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpv bGRfY29ubl9zdGF0ZTsKPiAgCWludCBpOwo+ICAKPiAtCWZvciAoaSA9IDA7IGkgPCBuY3J0Y3M7 IGkrKykgewo+ICsJZm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShvbGRfc3RhdGUsIGNydGMsIG9sZF9j cnRjX3N0YXRlLCBpKSB7Cj4gIAkJY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAq ZnVuY3M7Cj4gLQkJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+IC0KPiAtCQljcnRjID0gb2xkX3N0 YXRlLT5jcnRjc1tpXTsKPiAgCj4gLQkJaWYgKCFjcnRjIHx8ICFjcnRjLT5zdGF0ZS0+bW9kZV9j aGFuZ2VkKQo+ICsJCWlmICghY3J0Yy0+c3RhdGUtPm1vZGVfY2hhbmdlZCkKPiAgCQkJY29udGlu dWU7Cj4gIAo+ICAJCWZ1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7Cj4gQEAgLTczMiwxNiAr Njg1LDEzIEBAIGNydGNfc2V0X21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPiAgCQl9Cj4gIAl9Cj4gIAo+IC0JZm9yIChpID0g MDsgaSA8IG9sZF9zdGF0ZS0+bnVtX2Nvbm5lY3RvcjsgaSsrKSB7Cj4gKwlmb3JfZWFjaF9jb25u ZWN0b3JfaW5fc3RhdGUob2xkX3N0YXRlLCBjb25uZWN0b3IsIG9sZF9jb25uX3N0YXRlLCBpKSB7 Cj4gIAkJY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZnVuY3M7Cj4gLQkJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiAgCQlzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKm5ld19jcnRjX3N0YXRlOwo+ICAJCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKPiAg CQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwgKmFkanVzdGVkX21vZGU7Cj4gIAo+IC0J CWNvbm5lY3RvciA9IG9sZF9zdGF0ZS0+Y29ubmVjdG9yc1tpXTsKPiAtCj4gLQkJaWYgKCFjb25u ZWN0b3IgfHwgIWNvbm5lY3Rvci0+c3RhdGUtPmJlc3RfZW5jb2RlcikKPiArCQlpZiAoIWNvbm5l Y3Rvci0+c3RhdGUtPmJlc3RfZW5jb2RlcikKPiAgCQkJY29udGludWU7Cj4gIAo+ICAJCWVuY29k ZXIgPSBjb25uZWN0b3ItPnN0YXRlLT5iZXN0X2VuY29kZXI7Cj4gQEAgLTgwOSwxNyArNzU5LDE3 IEBAIEVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZGlzYWJs ZXMpOwo+ICB2b2lkIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2VuYWJsZXMoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqb2xkX3N0YXRlKQo+ICB7Cj4gLQlpbnQgbmNydGNzID0gb2xkX3N0YXRlLT5kZXYtPm1vZGVf Y29uZmlnLm51bV9jcnRjOwo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICsJc3RydWN0IGRy bV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZTsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3I7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGU7 Cj4gIAlpbnQgaTsKPiAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgbmNydGNzOyBpKyspIHsKPiArCWZv cl9lYWNoX2NydGNfaW5fc3RhdGUob2xkX3N0YXRlLCBjcnRjLCBvbGRfY3J0Y19zdGF0ZSwgaSkg ewo+ICAJCWNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmZ1bmNzOwo+IC0JCXN0 cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiAtCj4gLQkJY3J0YyA9IG9sZF9zdGF0ZS0+Y3J0Y3NbaV07 Cj4gIAo+ICAJCS8qIE5lZWQgdG8gZmlsdGVyIG91dCBDUlRDcyB3aGVyZSBvbmx5IHBsYW5lcyBj aGFuZ2UuICovCj4gLQkJaWYgKCFjcnRjIHx8ICFuZWVkc19tb2Rlc2V0KGNydGMtPnN0YXRlKSkK PiArCQlpZiAoIW5lZWRzX21vZGVzZXQoY3J0Yy0+c3RhdGUpKQo+ICAJCQljb250aW51ZTsKPiAg Cj4gIAkJaWYgKCFjcnRjLT5zdGF0ZS0+YWN0aXZlKQo+IEBAIC04MzgsMTQgKzc4OCwxMSBAQCB2 b2lkIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2VuYWJsZXMoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiAgCQl9Cj4gIAl9Cj4gIAo+IC0JZm9yIChpID0gMDsgaSA8IG9sZF9zdGF0 ZS0+bnVtX2Nvbm5lY3RvcjsgaSsrKSB7Cj4gKwlmb3JfZWFjaF9jb25uZWN0b3JfaW5fc3RhdGUo b2xkX3N0YXRlLCBjb25uZWN0b3IsIG9sZF9jb25uX3N0YXRlLCBpKSB7Cj4gIAkJY29uc3Qgc3Ry dWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZnVuY3M7Cj4gLQkJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcjsKPiAgCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Cj4gIAo+ IC0JCWNvbm5lY3RvciA9IG9sZF9zdGF0ZS0+Y29ubmVjdG9yc1tpXTsKPiAtCj4gLQkJaWYgKCFj b25uZWN0b3IgfHwgIWNvbm5lY3Rvci0+c3RhdGUtPmJlc3RfZW5jb2RlcikKPiArCQlpZiAoIWNv bm5lY3Rvci0+c3RhdGUtPmJlc3RfZW5jb2RlcikKPiAgCQkJY29udGludWU7Cj4gIAo+ICAJCWlm ICghY29ubmVjdG9yLT5zdGF0ZS0+Y3J0Yy0+c3RhdGUtPmFjdGl2ZSB8fAo+IEBAIC04NzksMTMg KzgyNiwxMiBAQCBFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0 X2VuYWJsZXMpOwo+ICBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9mZW5jZXMoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKPiAgCQkJICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiAgewo+ IC0JaW50IG5wbGFuZXMgPSBkZXYtPm1vZGVfY29uZmlnLm51bV90b3RhbF9wbGFuZTsKPiArCXN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGU7Cj4gIAlpbnQgaTsKPiAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgbnBsYW5lczsgaSsrKSB7 Cj4gLQkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBzdGF0ZS0+cGxhbmVzW2ldOwo+IC0KPiAt CQlpZiAoIXBsYW5lIHx8ICFwbGFuZS0+c3RhdGUtPmZlbmNlKQo+ICsJZm9yX2VhY2hfcGxhbmVf aW5fc3RhdGUoc3RhdGUsIHBsYW5lLCBwbGFuZV9zdGF0ZSwgaSkgewo+ICsJCWlmICghcGxhbmUt PnN0YXRlLT5mZW5jZSkKPiAgCQkJY29udGludWU7Cj4gIAo+ICAJCVdBUk5fT04oIXBsYW5lLT5z dGF0ZS0+ZmIpOwo+IEBAIC05MDIsMTYgKzg0OCw5IEBAIHN0YXRpYyBib29sIGZyYW1lYnVmZmVy X2NoYW5nZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgewo+ICAJc3RydWN0IGRybV9wbGFu ZSAqcGxhbmU7Cj4gIAlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGU7Cj4g LQlpbnQgbnBsYW5lcyA9IG9sZF9zdGF0ZS0+ZGV2LT5tb2RlX2NvbmZpZy5udW1fdG90YWxfcGxh bmU7Cj4gIAlpbnQgaTsKPiAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgbnBsYW5lczsgaSsrKSB7Cj4g LQkJcGxhbmUgPSBvbGRfc3RhdGUtPnBsYW5lc1tpXTsKPiAtCQlvbGRfcGxhbmVfc3RhdGUgPSBv bGRfc3RhdGUtPnBsYW5lX3N0YXRlc1tpXTsKPiAtCj4gLQkJaWYgKCFwbGFuZSkKPiAtCQkJY29u dGludWU7Cj4gLQo+ICsJZm9yX2VhY2hfcGxhbmVfaW5fc3RhdGUob2xkX3N0YXRlLCBwbGFuZSwg b2xkX3BsYW5lX3N0YXRlLCBpKSB7Cj4gIAkJaWYgKHBsYW5lLT5zdGF0ZS0+Y3J0YyAhPSBjcnRj ICYmCj4gIAkJICAgIG9sZF9wbGFuZV9zdGF0ZS0+Y3J0YyAhPSBjcnRjKQo+ICAJCQljb250aW51 ZTsKPiBAQCAtOTQwLDE2ICs4NzksOSBAQCBkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92Ymxh bmtzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIHsKPiAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YzsKPiAgCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGU7Cj4gLQlpbnQgbmNy dGNzID0gb2xkX3N0YXRlLT5kZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjOwo+ICAJaW50IGksIHJl dDsKPiAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgbmNydGNzOyBpKyspIHsKPiAtCQljcnRjID0gb2xk X3N0YXRlLT5jcnRjc1tpXTsKPiAtCQlvbGRfY3J0Y19zdGF0ZSA9IG9sZF9zdGF0ZS0+Y3J0Y19z dGF0ZXNbaV07Cj4gLQo+IC0JCWlmICghY3J0YykKPiAtCQkJY29udGludWU7Cj4gLQo+ICsJZm9y X2VhY2hfY3J0Y19pbl9zdGF0ZShvbGRfc3RhdGUsIGNydGMsIG9sZF9jcnRjX3N0YXRlLCBpKSB7 Cj4gIAkJLyogTm8gb25lIGNhcmVzIGFib3V0IHRoZSBvbGQgc3RhdGUsIHNvIGFidXNlIGl0IGZv ciB0cmFja2luZwo+ICAJCSAqIGFuZCBzdG9yZSB3aGV0aGVyIHdlIGhvbGQgYSB2YmxhbmsgcmVm ZXJlbmNlIChhbmQgc2hvdWxkIGRvIGEKPiAgCQkgKiB2Ymxhbmsgd2FpdCkgaW4gdGhlIC0+ZW5h YmxlIGJvb2xlYW4uICovCj4gQEAgLTk3NCwxMSArOTA2LDggQEAgZHJtX2F0b21pY19oZWxwZXJf d2FpdF9mb3JfdmJsYW5rcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCW9sZF9jcnRjX3N0 YXRlLT5sYXN0X3ZibGFua19jb3VudCA9IGRybV92YmxhbmtfY291bnQoZGV2LCBpKTsKPiAgCX0K PiAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgbmNydGNzOyBpKyspIHsKPiAtCQljcnRjID0gb2xkX3N0 YXRlLT5jcnRjc1tpXTsKPiAtCQlvbGRfY3J0Y19zdGF0ZSA9IG9sZF9zdGF0ZS0+Y3J0Y19zdGF0 ZXNbaV07Cj4gLQo+IC0JCWlmICghY3J0YyB8fCAhb2xkX2NydGNfc3RhdGUtPmVuYWJsZSkKPiAr CWZvcl9lYWNoX2NydGNfaW5fc3RhdGUob2xkX3N0YXRlLCBjcnRjLCBvbGRfY3J0Y19zdGF0ZSwg aSkgewo+ICsJCWlmICghb2xkX2NydGNfc3RhdGUtPmVuYWJsZSkKPiAgCQkJY29udGludWU7Cj4g IAo+ICAJCXJldCA9IHdhaXRfZXZlbnRfdGltZW91dChkZXYtPnZibGFua1tpXS5xdWV1ZSwKPiBA QCAtMTE3NiwxNiArMTEwNSwxNCBAQCBFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX3By ZXBhcmVfcGxhbmVzKTsKPiAgdm9pZCBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfcGxhbmVzKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpvbGRfc3RhdGUpCj4gIHsKPiAtCWludCBucGxhbmVzID0gZGV2LT5tb2RlX2NvbmZpZy5udW1f dG90YWxfcGxhbmU7Cj4gLQlpbnQgbmNydGNzID0gZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YzsK PiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xk X2NydGNfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiArCXN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZTsKPiAgCWludCBpOwo+ICAKPiAtCWZvciAoaSA9 IDA7IGkgPCBuY3J0Y3M7IGkrKykgewo+ICsJZm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShvbGRfc3Rh dGUsIGNydGMsIG9sZF9jcnRjX3N0YXRlLCBpKSB7Cj4gIAkJY29uc3Qgc3RydWN0IGRybV9jcnRj X2hlbHBlcl9mdW5jcyAqZnVuY3M7Cj4gLQkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gb2xkX3N0 YXRlLT5jcnRjc1tpXTsKPiAtCj4gLQkJaWYgKCFjcnRjKQo+IC0JCQljb250aW51ZTsKPiAgCj4g IAkJZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKPiAgCj4gQEAgLTExOTUsMTMgKzExMjIs OCBAQCB2b2lkIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKPiAgCQlmdW5jcy0+YXRvbWljX2JlZ2luKGNydGMpOwo+ICAJfQo+ICAKPiAtCWZv ciAoaSA9IDA7IGkgPCBucGxhbmVzOyBpKyspIHsKPiArCWZvcl9lYWNoX3BsYW5lX2luX3N0YXRl KG9sZF9zdGF0ZSwgcGxhbmUsIG9sZF9wbGFuZV9zdGF0ZSwgaSkgewo+ICAJCWNvbnN0IHN0cnVj dCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzICpmdW5jczsKPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSA9IG9sZF9zdGF0ZS0+cGxhbmVzW2ldOwo+IC0JCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg Km9sZF9wbGFuZV9zdGF0ZTsKPiAtCj4gLQkJaWYgKCFwbGFuZSkKPiAtCQkJY29udGludWU7Cj4g IAo+ICAJCWZ1bmNzID0gcGxhbmUtPmhlbHBlcl9wcml2YXRlOwo+ICAKPiBAQCAtMTIyMCwxMiAr MTE0Miw4IEBAIHZvaWQgZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5lcyhzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAo+ICAJCQlmdW5jcy0+YXRvbWljX3VwZGF0ZShwbGFuZSwgb2xkX3BsYW5l X3N0YXRlKTsKPiAgCX0KPiAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgbmNydGNzOyBpKyspIHsKPiAr CWZvcl9lYWNoX2NydGNfaW5fc3RhdGUob2xkX3N0YXRlLCBjcnRjLCBvbGRfY3J0Y19zdGF0ZSwg aSkgewo+ICAJCWNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmZ1bmNzOwo+IC0J CXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IG9sZF9zdGF0ZS0+Y3J0Y3NbaV07Cj4gLQo+IC0JCWlm ICghY3J0YykKPiAtCQkJY29udGludWU7Cj4gIAo+ICAJCWZ1bmNzID0gY3J0Yy0+aGVscGVyX3By aXZhdGU7Cj4gIAo+IEBAIC0xMjUyLDE4ICsxMTcwLDE0IEBAIEVYUE9SVF9TWU1CT0woZHJtX2F0 b21pY19oZWxwZXJfY29tbWl0X3BsYW5lcyk7Cj4gIHZvaWQgZHJtX2F0b21pY19oZWxwZXJfY2xl YW51cF9wbGFuZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCQkJCSAgICAgIHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUpCj4gIHsKPiAtCWludCBucGxhbmVzID0gZGV2LT5t b2RlX2NvbmZpZy5udW1fdG90YWxfcGxhbmU7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsK PiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOwo+ICAJaW50IGk7Cj4gIAo+ IC0JZm9yIChpID0gMDsgaSA8IG5wbGFuZXM7IGkrKykgewo+ICsJZm9yX2VhY2hfcGxhbmVfaW5f c3RhdGUob2xkX3N0YXRlLCBwbGFuZSwgcGxhbmVfc3RhdGUsIGkpIHsKPiAgCQljb25zdCBzdHJ1 Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyAqZnVuY3M7Cj4gLQkJc3RydWN0IGRybV9wbGFuZSAq cGxhbmUgPSBvbGRfc3RhdGUtPnBsYW5lc1tpXTsKPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSA9IG9sZF9zdGF0ZS0+cGxhbmVfc3RhdGVzW2ldOwo+ICAJCXN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKm9sZF9mYjsKPiAgCj4gLQkJaWYgKCFwbGFuZSkKPiAtCQkJY29udGlu dWU7Cj4gLQo+ICAJCWZ1bmNzID0gcGxhbmUtPmhlbHBlcl9wcml2YXRlOwo+ICAKPiAgCQlvbGRf ZmIgPSBwbGFuZV9zdGF0ZS0+ZmI7Cj4gQEAgLTE1MTIsOCArMTQyNiwxMCBAQCBzdGF0aWMgaW50 IHVwZGF0ZV9vdXRwdXRfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICAJ CQkgICAgICAgc3RydWN0IGRybV9tb2RlX3NldCAqc2V0KQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gc2V0LT5jcnRjLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4g KwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yOwo+ICAJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3Rh dGU7Cj4gLQlpbnQgbmNydGNzID0gc3RhdGUtPmRldi0+bW9kZV9jb25maWcubnVtX2NydGM7Cj4g IAlpbnQgcmV0LCBpLCBqOwo+ICAKPiAgCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmRldi0+bW9k ZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCwKPiBAQCAtMTUyOSwyNyArMTQ0NSwxNCBAQCBzdGF0 aWMgaW50IHVwZGF0ZV9vdXRwdXRfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl LAo+ICAJCQlyZXR1cm4gUFRSX0VSUihjb25uX3N0YXRlKTsKPiAgCX0KPiAgCj4gLQlmb3IgKGkg PSAwOyBpIDwgbmNydGNzOyBpKyspIHsKPiAtCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0 ZS0+Y3J0Y3NbaV07Cj4gLQo+IC0JCWlmICghY3J0YykKPiAtCQkJY29udGludWU7Cj4gLQo+ICsJ Zm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkgewo+ICAJ CXJldCA9IGRybV9hdG9taWNfYWRkX2FmZmVjdGVkX2Nvbm5lY3RvcnMoc3RhdGUsIGNydGMpOwo+ ICAJCWlmIChyZXQpCj4gIAkJCXJldHVybiByZXQ7Cj4gIAl9Cj4gIAo+ICAJLyogVGhlbiByZWNv bXB1dGUgY29ubmVjdG9yLT5jcnRjIGxpbmtzIGFuZCBjcnRjIGVuYWJsaW5nIHN0YXRlLiAqLwo+ IC0JZm9yIChpID0gMDsgaSA8IHN0YXRlLT5udW1fY29ubmVjdG9yOyBpKyspIHsKPiAtCQlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+IC0KPiAtCQljb25uZWN0b3IgPSBzdGF0ZS0+ Y29ubmVjdG9yc1tpXTsKPiAtCQljb25uX3N0YXRlID0gc3RhdGUtPmNvbm5lY3Rvcl9zdGF0ZXNb aV07Cj4gLQo+IC0JCWlmICghY29ubmVjdG9yKQo+IC0JCQljb250aW51ZTsKPiAtCj4gKwlmb3Jf ZWFjaF9jb25uZWN0b3JfaW5fc3RhdGUoc3RhdGUsIGNvbm5lY3RvciwgY29ubl9zdGF0ZSwgaSkg ewo+ICAJCWlmIChjb25uX3N0YXRlLT5jcnRjID09IHNldC0+Y3J0Yykgewo+ICAJCQlyZXQgPSBk cm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3IoY29ubl9zdGF0ZSwKPiAgCQkJCQkJCQlO VUxMKTsKPiBAQCAtMTU2OCwxMyArMTQ3MSw3IEBAIHN0YXRpYyBpbnQgdXBkYXRlX291dHB1dF9z dGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gIAkJfQo+ICAJfQo+ICAKPiAt CWZvciAoaSA9IDA7IGkgPCBuY3J0Y3M7IGkrKykgewo+IC0JCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YyA9IHN0YXRlLT5jcnRjc1tpXTsKPiAtCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUgPSBzdGF0ZS0+Y3J0Y19zdGF0ZXNbaV07Cj4gLQo+IC0JCWlmICghY3J0YykKPiAtCQkJY29u dGludWU7Cj4gLQo+ICsJZm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19z dGF0ZSwgaSkgewo+ICAJCS8qIERvbid0IHVwZGF0ZSAtPmVuYWJsZSBmb3IgdGhlIENSVEMgaW4g dGhlIHNldF9jb25maWcgcmVxdWVzdCwKPiAgCQkgKiBzaW5jZSBhIG1pc21hdGNoIHdvdWxkIGlu ZGljYXRlIGEgYnVnIGluIHRoZSB1cHBlciBsYXllcnMuCj4gIAkJICogVGhlIGFjdHVhbCBtb2Rl c2V0IGNvZGUgbGF0ZXIgb24gd2lsbCBjYXRjaCBhbnkKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9k cm0vZHJtX2F0b21pYy5oIGIvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oCj4gaW5kZXggNTExNjhh OC4uYzE1NzEwMzQgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oCj4gKysr IGIvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oCj4gQEAgLTc1LDQgKzc1LDI4IEBAIGludCBfX211 c3RfY2hlY2sgZHJtX2F0b21pY19jaGVja19vbmx5KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz dGF0ZSk7Cj4gIGludCBfX211c3RfY2hlY2sgZHJtX2F0b21pY19jb21taXQoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlKTsKPiAgaW50IF9fbXVzdF9jaGVjayBkcm1fYXRvbWljX2FzeW5j X2NvbW1pdChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ICAKPiArI2RlZmluZSBm b3JfZWFjaF9jb25uZWN0b3JfaW5fc3RhdGUoc3RhdGUsIGNvbm5lY3RvciwgY29ubmVjdG9yX3N0 YXRlLCBfX2kpIFwKPiArCWZvciAoKF9faSkgPSAwOwkJCQkJCQlcCj4gKwkgICAgIChjb25uZWN0 b3IpID0gKHN0YXRlKS0+Y29ubmVjdG9yc1tfX2ldLAkJCVwKPiArCSAgICAgKGNvbm5lY3Rvcl9z dGF0ZSkgPSAoc3RhdGUpLT5jb25uZWN0b3Jfc3RhdGVzW19faV0sCVwKPiArCSAgICAgKF9faSkg PCAoc3RhdGUpLT5udW1fY29ubmVjdG9yOwkJCQlcCj4gKwkgICAgIChfX2kpKyspCQkJCQkJCVwK PiArCQlpZiAoY29ubmVjdG9yKQo+ICsKPiArI2RlZmluZSBmb3JfZWFjaF9jcnRjX2luX3N0YXRl KHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBfX2kpCVwKPiArCWZvciAoKF9faSkgPSAwOwkJCQkJ CVwKPiArCSAgICAgKGNydGMpID0gKHN0YXRlKS0+Y3J0Y3NbX19pXSwJCQlcCj4gKwkgICAgIChj cnRjX3N0YXRlKSA9IChzdGF0ZSktPmNydGNfc3RhdGVzW19faV0sCQlcCj4gKwkgICAgIChfX2kp IDwgKHN0YXRlKS0+ZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YzsJXAo+ICsJICAgICAoX19pKSsr KQkJCQkJCVwKPiArCQlpZiAoY3J0Y19zdGF0ZSkKPiArCj4gKyNkZWZpbmUgZm9yX2VhY2hfcGxh bmVfaW5fc3RhdGUoc3RhdGUsIHBsYW5lLCBwbGFuZV9zdGF0ZSwgX19pKQlcCj4gKwlmb3IgKChf X2kpID0gMDsJCQkJCQlcCj4gKwkgICAgIChwbGFuZSkgPSAoc3RhdGUpLT5wbGFuZXNbX19pXSwJ CQlcCj4gKwkgICAgIChwbGFuZV9zdGF0ZSkgPSAoc3RhdGUpLT5wbGFuZV9zdGF0ZXNbX19pXSwJ XAo+ICsJICAgICAoX19pKSA8IChzdGF0ZSktPmRldi0+bW9kZV9jb25maWcubnVtX3RvdGFsX3Bs YW5lOwlcCj4gKwkgICAgIChfX2kpKyspCQkJCQkJXAo+ICsJCWlmIChwbGFuZV9zdGF0ZSkKPiAr Cj4gICNlbmRpZiAvKiBEUk1fQVRPTUlDX0hfICovCj4gLS0gCj4gMi4xLjAKPiAKCi0tIApEYW5p ZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxv Zy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=