From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t] benchmarks/gem_wsim: Heap allocate VLA structs Date: Fri, 24 May 2019 09:20:47 +0100 Message-ID: References: <20190524072551.24429-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190524072551.24429-1-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDI0LzA1LzIwMTkgMDg6MjUsIENocmlzIFdpbHNvbiB3cm90ZToKPiBBcHBhcmVudGx5IFZM QSBzdHJ1Y3RzIChlLmcuIHN0cnVjdCB7IGludCBhcnJheVtjb3VudF0gfSkgaXMgYSBnY2MKPiBl eHRlbnNpb24gdGhhdCBjbGFuZyByZWZ1c2VzIHRvIHN1cHBvcnQgYXMgaGFuZGxpbmcgbWVtb3J5 IGxheW91dCBpcyB0b28KPiBkaWZmaWN1bHQgZm9yIGl0Lgo+IAo+IE1vdmUgdGhlIG9uLXN0YWNr IFZMQSB0byB0aGUgaGVhcC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlz QGNocmlzLXdpbHNvbi5jby51az4KPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGlu QGludGVsLmNvbT4KPiAtLS0KPiAgIGJlbmNobWFya3MvZ2VtX3dzaW0uYyB8IDE0NiArKysrKysr KysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KPiAgIDEgZmlsZSBjaGFuZ2VkLCA5 NSBpbnNlcnRpb25zKCspLCA1MSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvYmVuY2ht YXJrcy9nZW1fd3NpbS5jIGIvYmVuY2htYXJrcy9nZW1fd3NpbS5jCj4gaW5kZXggZTJmZmI5M2E5 Li4wYTAwMzJiZmYgMTAwNjQ0Cj4gLS0tIGEvYmVuY2htYXJrcy9nZW1fd3NpbS5jCj4gKysrIGIv YmVuY2htYXJrcy9nZW1fd3NpbS5jCj4gQEAgLTE0NDEsNiArMTQ0MSw0OCBAQCBzZXRfY3R4X3Nz ZXUoc3RydWN0IGN0eCAqY3R4LCB1aW50NjRfdCBzbGljZV9tYXNrKQo+ICAgCXJldHVybiBzbGlj ZV9tYXNrOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBzaXplX3Qgc2l6ZW9mX2xvYWRfYmFsYW5jZShp bnQgY291bnQpCj4gK3sKPiArCXN0cnVjdCBpOTE1X2NvbnRleHRfZW5naW5lc19sb2FkX2JhbGFu Y2UgKnB0cjsKPiArCj4gKwlhc3NlcnQoc2l6ZW9mKHB0ci0+ZW5naW5lc1tjb3VudF0pID09IGNv dW50ICogc2l6ZW9mKHB0ci0+ZW5naW5lc1swXSkpOwoKVGhpcyBzZWVtcyB3cm9uZyAtIGlzIGJv dW5kIHRvIHRyaWdnZXIuCgo+ICsJcmV0dXJuIHNpemVvZigqcHRyKSArIHNpemVvZihwdHItPmVu Z2luZXNbY291bnRdKTsKClNvIHNpemUgb2Ygb2YgZW5naW5lIG5lZWRzIHRvIGJlIG11bHRpcGxp ZWQgYnkgY291bnQuCgo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfY29udGV4dF9lbmdp bmVzX2xvYWRfYmFsYW5jZSAqCj4gK2FsbG9jX2xvYWRfYmFsYW5jZShpbnQgY291bnQpCj4gK3sK PiArCXJldHVybiBjYWxsb2MoMSwgc2l6ZW9mX2xvYWRfYmFsYW5jZShjb3VudCkpOwoKSG93IGFi b3V0IGFsbG9jYSBzbyBjbGVhbnVwIGlzIHNpbXBsZXI/IE9yIGlzIGFsbG9jYSBhbHNvIG9uIHRo ZSAKdW5wb3B1bGFyIGxpc3Q/CgpPciBwb3NzaWJseSB3aGF0IFNpbW9uIHN1Z2dlc3RlZCwganVz dCBhIGxhcmdlIHRlbXBvcmFyeSBzdGFjayBhcnJheXMgCndvdWxkIGJlIGVub3VnaCBhbmQgZWFz aWVzdCBkaWZmLiBKdXN0IHdpdGggYW4gYXNzZXJ0IHRoYXQgaXQgZml0cy4KCkkgY2FuIGRvIHRo YXQgaWYgeW91IHdhbnQ/CgpSZWdhcmRzLAoKVHZydGtvCgo+ICt9Cj4gKwo+ICtzdGF0aWMgc2l6 ZV90IHNpemVvZl9wYXJhbV9lbmdpbmVzKGludCBjb3VudCkKPiArewo+ICsJc3RydWN0IGk5MTVf Y29udGV4dF9wYXJhbV9lbmdpbmVzICpwdHI7Cj4gKwo+ICsJYXNzZXJ0KHNpemVvZihwdHItPmVu Z2luZXNbY291bnRdKSA9PSBjb3VudCAqIHNpemVvZihwdHItPmVuZ2luZXNbMF0pKTsKPiArCXJl dHVybiBzaXplb2YoKnB0cikgKyBzaXplb2YocHRyLT5lbmdpbmVzW2NvdW50XSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFtX2VuZ2luZXMgKgo+ICthbGxvY19w YXJhbV9lbmdpbmVzKGludCBjb3VudCkKPiArewo+ICsJcmV0dXJuIGNhbGxvYygxLCBzaXplb2Zf cGFyYW1fZW5naW5lcyhjb3VudCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc2l6ZV90IHNpemVvZl9l bmdpbmVzX2JvbmQoaW50IGNvdW50KQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9jb250ZXh0X2VuZ2lu ZXNfYm9uZCAqcHRyOwo+ICsKPiArCWFzc2VydChzaXplb2YocHRyLT5lbmdpbmVzW2NvdW50XSkg PT0gY291bnQgKiBzaXplb2YocHRyLT5lbmdpbmVzWzBdKSk7Cj4gKwlyZXR1cm4gc2l6ZW9mKCpw dHIpICsgc2l6ZW9mKHB0ci0+ZW5naW5lc1tjb3VudF0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IGk5MTVfY29udGV4dF9lbmdpbmVzX2JvbmQgKgo+ICthbGxvY19lbmdpbmVzX2JvbmQoaW50 IGNvdW50KQo+ICt7Cj4gKwlyZXR1cm4gY2FsbG9jKDEsIHNpemVvZl9lbmdpbmVzX2JvbmQoY291 bnQpKTsKPiArfQo+ICsKPiAgIHN0YXRpYyBpbnQKPiAgIHByZXBhcmVfd29ya2xvYWQodW5zaWdu ZWQgaW50IGlkLCBzdHJ1Y3Qgd29ya2xvYWQgKndyaywgdW5zaWduZWQgaW50IGZsYWdzKQo+ICAg ewo+IEBAIC0xNjc2LDY2ICsxNzE4LDU0IEBAIHByZXBhcmVfd29ya2xvYWQodW5zaWduZWQgaW50 IGlkLCBzdHJ1Y3Qgd29ya2xvYWQgKndyaywgdW5zaWduZWQgaW50IGZsYWdzKQo+ICAgCQl9Cj4g ICAKPiAgIAkJaWYgKGN0eC0+ZW5naW5lX21hcCkgewo+IC0JCQlJOTE1X0RFRklORV9DT05URVhU X1BBUkFNX0VOR0lORVMoc2V0X2VuZ2luZXMsCj4gLQkJCQkJCQkgIGN0eC0+ZW5naW5lX21hcF9j b3VudCArIDEpOwo+IC0JCQlJOTE1X0RFRklORV9DT05URVhUX0VOR0lORVNfTE9BRF9CQUxBTkNF KGxvYWRfYmFsYW5jZSwKPiAtCQkJCQkJCQkgY3R4LT5lbmdpbmVfbWFwX2NvdW50KTsKPiArCQkJ c3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVzICpzZXRfZW5naW5lcyA9Cj4gKwkJCQlh bGxvY19wYXJhbV9lbmdpbmVzKGN0eC0+ZW5naW5lX21hcF9jb3VudCArIDEpOwo+ICsJCQlzdHJ1 Y3QgaTkxNV9jb250ZXh0X2VuZ2luZXNfbG9hZF9iYWxhbmNlICpsb2FkX2JhbGFuY2UgPQo+ICsJ CQkJYWxsb2NfbG9hZF9iYWxhbmNlKGN0eC0+ZW5naW5lX21hcF9jb3VudCk7Cj4gICAJCQlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gcGFyYW0gPSB7Cj4gICAJCQkJLmN0eF9pZCA9 IGN0eF9pZCwKPiAgIAkJCQkucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FUywKPiAt CQkJCS5zaXplID0gc2l6ZW9mKHNldF9lbmdpbmVzKSwKPiAtCQkJCS52YWx1ZSA9IHRvX3VzZXJf cG9pbnRlcigmc2V0X2VuZ2luZXMpLAo+ICsJCQkJLnNpemUgPSBzaXplb2ZfcGFyYW1fZW5naW5l cyhjdHgtPmVuZ2luZV9tYXBfY291bnQgKyAxKSwKPiArCQkJCS52YWx1ZSA9IHRvX3VzZXJfcG9p bnRlcihzZXRfZW5naW5lcyksCj4gICAJCQl9Owo+ICsJCQlzdHJ1Y3QgaTkxNV9jb250ZXh0X2Vu Z2luZXNfYm9uZCAqbGFzdCA9IE5VTEw7Cj4gICAKPiAgIAkJCWlmIChjdHgtPndhbnRzX2JhbGFu Y2UpIHsKPiAtCQkJCXNldF9lbmdpbmVzLmV4dGVuc2lvbnMgPQo+IC0JCQkJCXRvX3VzZXJfcG9p bnRlcigmbG9hZF9iYWxhbmNlKTsKPiArCQkJCXNldF9lbmdpbmVzLT5leHRlbnNpb25zID0KPiAr CQkJCQl0b191c2VyX3BvaW50ZXIobG9hZF9iYWxhbmNlKTsKPiAgIAo+IC0JCQkJbWVtc2V0KCZs b2FkX2JhbGFuY2UsIDAsIHNpemVvZihsb2FkX2JhbGFuY2UpKTsKPiAtCQkJCWxvYWRfYmFsYW5j ZS5iYXNlLm5hbWUgPQo+ICsJCQkJbG9hZF9iYWxhbmNlLT5iYXNlLm5hbWUgPQo+ICAgCQkJCQlJ OTE1X0NPTlRFWFRfRU5HSU5FU19FWFRfTE9BRF9CQUxBTkNFOwo+IC0JCQkJbG9hZF9iYWxhbmNl Lm51bV9zaWJsaW5ncyA9Cj4gKwkJCQlsb2FkX2JhbGFuY2UtPm51bV9zaWJsaW5ncyA9Cj4gICAJ CQkJCWN0eC0+ZW5naW5lX21hcF9jb3VudDsKPiAgIAo+ICAgCQkJCWZvciAoaiA9IDA7IGogPCBj dHgtPmVuZ2luZV9tYXBfY291bnQ7IGorKykKPiAtCQkJCQlsb2FkX2JhbGFuY2UuZW5naW5lc1tq XSA9Cj4gKwkJCQkJbG9hZF9iYWxhbmNlLT5lbmdpbmVzW2pdID0KPiAgIAkJCQkJCWdldF9lbmdp bmUoY3R4LT5lbmdpbmVfbWFwW2pdKTsKPiAtCQkJfSBlbHNlIHsKPiAtCQkJCXNldF9lbmdpbmVz LmV4dGVuc2lvbnMgPSAwOwo+ICAgCQkJfQo+ICAgCj4gICAJCQkvKiBSZXNlcnZlIHNsb3QgZm9y IHZpcnR1YWwgZW5naW5lLiAqLwo+IC0JCQlzZXRfZW5naW5lcy5lbmdpbmVzWzBdLmVuZ2luZV9j bGFzcyA9Cj4gKwkJCXNldF9lbmdpbmVzLT5lbmdpbmVzWzBdLmVuZ2luZV9jbGFzcyA9Cj4gICAJ CQkJSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRDsKPiAtCQkJc2V0X2VuZ2luZXMuZW5naW5lc1sw XS5lbmdpbmVfaW5zdGFuY2UgPQo+ICsJCQlzZXRfZW5naW5lcy0+ZW5naW5lc1swXS5lbmdpbmVf aW5zdGFuY2UgPQo+ICAgCQkJCUk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSURfTk9ORTsKPiAgIAo+ ICAgCQkJZm9yIChqID0gMTsgaiA8PSBjdHgtPmVuZ2luZV9tYXBfY291bnQ7IGorKykKPiAtCQkJ CXNldF9lbmdpbmVzLmVuZ2luZXNbal0gPQo+ICsJCQkJc2V0X2VuZ2luZXMtPmVuZ2luZXNbal0g PQo+ICAgCQkJCQlnZXRfZW5naW5lKGN0eC0+ZW5naW5lX21hcFtqIC0gMV0pOwo+ICAgCj4gKwkJ CWxhc3QgPSBOVUxMOwo+ICAgCQkJZm9yIChqID0gMDsgaiA8IGN0eC0+Ym9uZF9jb3VudDsgaisr KSB7Cj4gICAJCQkJdW5zaWduZWQgbG9uZyBtYXNrID0gY3R4LT5ib25kc1tqXS5tYXNrOwo+IC0J CQkJSTkxNV9ERUZJTkVfQ09OVEVYVF9FTkdJTkVTX0JPTkQoYm9uZCwKPiAtCQkJCQkJCQkgX19i dWlsdGluX3BvcGNvdW50KG1hc2spKTsKPiAtCQkJCXN0cnVjdCBpOTE1X2NvbnRleHRfZW5naW5l c19ib25kICpwID0gTlVMTCwgKnByZXY7Cj4gKwkJCQlzdHJ1Y3QgaTkxNV9jb250ZXh0X2VuZ2lu ZXNfYm9uZCAqYm9uZCA9Cj4gKwkJCQkJYWxsb2NfZW5naW5lc19ib25kKF9fYnVpbHRpbl9wb3Bj b3VudChtYXNrKSk7Cj4gICAJCQkJdW5zaWduZWQgaW50IGIsIGU7Cj4gICAKPiAtCQkJCXByZXYg PSBwOwo+IC0JCQkJcCA9IGFsbG9jYShzaXplb2YoYm9uZCkpOwo+IC0JCQkJYXNzZXJ0KHApOwo+ IC0JCQkJbWVtc2V0KHAsIDAsIHNpemVvZihib25kKSk7Cj4gLQo+IC0JCQkJaWYgKGogPT0gMCkK PiAtCQkJCQlsb2FkX2JhbGFuY2UuYmFzZS5uZXh0X2V4dGVuc2lvbiA9Cj4gLQkJCQkJCXRvX3Vz ZXJfcG9pbnRlcihwKTsKPiAtCQkJCWVsc2UgaWYgKGogPCAoY3R4LT5ib25kX2NvdW50IC0gMSkp Cj4gLQkJCQkJcHJldi0+YmFzZS5uZXh0X2V4dGVuc2lvbiA9Cj4gLQkJCQkJCXRvX3VzZXJfcG9p bnRlcihwKTsKPiArCQkJCWJvbmQtPmJhc2UubmV4dF9leHRlbnNpb24gPSB0b191c2VyX3BvaW50 ZXIobGFzdCk7Cj4gKwkJCQlib25kLT5iYXNlLm5hbWUgPSBJOTE1X0NPTlRFWFRfRU5HSU5FU19F WFRfQk9ORDsKPiAgIAo+IC0JCQkJcC0+YmFzZS5uYW1lID0gSTkxNV9DT05URVhUX0VOR0lORVNf RVhUX0JPTkQ7Cj4gLQkJCQlwLT52aXJ0dWFsX2luZGV4ID0gMDsKPiAtCQkJCXAtPm1hc3RlciA9 IGdldF9lbmdpbmUoY3R4LT5ib25kc1tqXS5tYXN0ZXIpOwo+ICsJCQkJYm9uZC0+dmlydHVhbF9p bmRleCA9IDA7Cj4gKwkJCQlib25kLT5tYXN0ZXIgPSBnZXRfZW5naW5lKGN0eC0+Ym9uZHNbal0u bWFzdGVyKTsKPiAgIAo+ICAgCQkJCWZvciAoYiA9IDAsIGUgPSAwOyBtYXNrOyBlKyssIG1hc2sg Pj49IDEpIHsKPiAgIAkJCQkJdW5zaWduZWQgaW50IGlkeDsKPiBAQCAtMTc0Myw0NCArMTc3Myw1 OCBAQCBwcmVwYXJlX3dvcmtsb2FkKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IHdvcmtsb2FkICp3 cmssIHVuc2lnbmVkIGludCBmbGFncykKPiAgIAkJCQkJaWYgKCEobWFzayAmIDEpKQo+ICAgCQkJ CQkJY29udGludWU7Cj4gICAKPiAtCQkJCQlpZHggPSBmaW5kX2VuZ2luZSgmc2V0X2VuZ2luZXMu ZW5naW5lc1sxXSwKPiArCQkJCQlpZHggPSBmaW5kX2VuZ2luZSgmc2V0X2VuZ2luZXMtPmVuZ2lu ZXNbMV0sCj4gICAJCQkJCQkJICBjdHgtPmVuZ2luZV9tYXBfY291bnQsCj4gICAJCQkJCQkJICBl KTsKPiAtCQkJCQlwLT5lbmdpbmVzW2IrK10gPQo+IC0JCQkJCQlzZXRfZW5naW5lcy5lbmdpbmVz WzEgKyBpZHhdOwo+ICsJCQkJCWJvbmQtPmVuZ2luZXNbYisrXSA9Cj4gKwkJCQkJCXNldF9lbmdp bmVzLT5lbmdpbmVzWzEgKyBpZHhdOwo+ICAgCQkJCX0KPiArCj4gKwkJCQlsYXN0ID0gYm9uZDsK PiAgIAkJCX0KPiArCQkJbG9hZF9iYWxhbmNlLT5iYXNlLm5leHRfZXh0ZW5zaW9uID0gdG9fdXNl cl9wb2ludGVyKGxhc3QpOwo+ICAgCj4gICAJCQlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZw YXJhbSk7Cj4gKwo+ICsJCQl3aGlsZSAobGFzdCkgewo+ICsJCQkJc3RydWN0IGk5MTVfY29udGV4 dF9lbmdpbmVzX2JvbmQgKm5leHQgPQo+ICsJCQkJCWZyb21fdXNlcl9wb2ludGVyKGxhc3QtPmJh c2UubmV4dF9leHRlbnNpb24pOwo+ICsJCQkJZnJlZShsYXN0KTsKPiArCQkJCWxhc3QgPSBuZXh0 Owo+ICsJCQl9Cj4gKwkJCWZyZWUobG9hZF9iYWxhbmNlKTsKPiArCQkJZnJlZShzZXRfZW5naW5l cyk7Cj4gICAJCX0gZWxzZSBpZiAoY3R4LT53YW50c19iYWxhbmNlKSB7Cj4gICAJCQljb25zdCB1 bnNpZ25lZCBpbnQgY291bnQgPSBudW1fZW5naW5lc19pbl9jbGFzcyhWQ1MpOwo+IC0JCQlJOTE1 X0RFRklORV9DT05URVhUX0VOR0lORVNfTE9BRF9CQUxBTkNFKGxvYWRfYmFsYW5jZSwKPiAtCQkJ CQkJCQkgY291bnQpOwo+IC0JCQlJOTE1X0RFRklORV9DT05URVhUX1BBUkFNX0VOR0lORVMoc2V0 X2VuZ2luZXMsCj4gLQkJCQkJCQkgIGNvdW50ICsgMSk7Cj4gKwkJCXN0cnVjdCBpOTE1X2NvbnRl eHRfZW5naW5lc19sb2FkX2JhbGFuY2UgKmxvYWRfYmFsYW5jZSA9Cj4gKwkJCQlhbGxvY19sb2Fk X2JhbGFuY2UoY291bnQpOwo+ICsJCQlzdHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFtX2VuZ2luZXMg KnNldF9lbmdpbmVzID0KPiArCQkJCWFsbG9jX3BhcmFtX2VuZ2luZXMoY291bnQgKyAxKTsKPiAg IAkJCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBwYXJhbSA9IHsKPiAgIAkJCQku Y3R4X2lkID0gY3R4X2lkLAo+ICAgCQkJCS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJ TkVTLAo+IC0JCQkJLnNpemUgPSBzaXplb2Yoc2V0X2VuZ2luZXMpLAo+IC0JCQkJLnZhbHVlID0g dG9fdXNlcl9wb2ludGVyKCZzZXRfZW5naW5lcyksCj4gKwkJCQkuc2l6ZSA9IHNpemVvZl9wYXJh bV9lbmdpbmVzKGNvdW50ICsgMSksCj4gKwkJCQkudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoc2V0 X2VuZ2luZXMpLAo+ICAgCQkJfTsKPiAgIAo+IC0JCQlzZXRfZW5naW5lcy5leHRlbnNpb25zID0g dG9fdXNlcl9wb2ludGVyKCZsb2FkX2JhbGFuY2UpOwo+ICsJCQlzZXRfZW5naW5lcy0+ZXh0ZW5z aW9ucyA9IHRvX3VzZXJfcG9pbnRlcihsb2FkX2JhbGFuY2UpOwo+ICAgCj4gLQkJCXNldF9lbmdp bmVzLmVuZ2luZXNbMF0uZW5naW5lX2NsYXNzID0KPiArCQkJc2V0X2VuZ2luZXMtPmVuZ2luZXNb MF0uZW5naW5lX2NsYXNzID0KPiAgIAkJCQlJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEOwo+IC0J CQlzZXRfZW5naW5lcy5lbmdpbmVzWzBdLmVuZ2luZV9pbnN0YW5jZSA9Cj4gKwkJCXNldF9lbmdp bmVzLT5lbmdpbmVzWzBdLmVuZ2luZV9pbnN0YW5jZSA9Cj4gICAJCQkJSTkxNV9FTkdJTkVfQ0xB U1NfSU5WQUxJRF9OT05FOwo+IC0JCQlmaWxsX2VuZ2luZXNfY2xhc3MoJnNldF9lbmdpbmVzLmVu Z2luZXNbMV0sIFZDUyk7Cj4gKwkJCWZpbGxfZW5naW5lc19jbGFzcygmc2V0X2VuZ2luZXMtPmVu Z2luZXNbMV0sIFZDUyk7Cj4gICAKPiAtCQkJbWVtc2V0KCZsb2FkX2JhbGFuY2UsIDAsIHNpemVv Zihsb2FkX2JhbGFuY2UpKTsKPiAtCQkJbG9hZF9iYWxhbmNlLmJhc2UubmFtZSA9Cj4gKwkJCWxv YWRfYmFsYW5jZS0+YmFzZS5uYW1lID0KPiAgIAkJCQlJOTE1X0NPTlRFWFRfRU5HSU5FU19FWFRf TE9BRF9CQUxBTkNFOwo+IC0JCQlsb2FkX2JhbGFuY2UubnVtX3NpYmxpbmdzID0gY291bnQ7Cj4g KwkJCWxvYWRfYmFsYW5jZS0+bnVtX3NpYmxpbmdzID0gY291bnQ7Cj4gICAKPiAtCQkJZmlsbF9l bmdpbmVzX2NsYXNzKCZsb2FkX2JhbGFuY2UuZW5naW5lc1swXSwgVkNTKTsKPiArCQkJZmlsbF9l bmdpbmVzX2NsYXNzKCZsb2FkX2JhbGFuY2UtPmVuZ2luZXNbMF0sIFZDUyk7Cj4gICAKPiAgIAkJ CWdlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJnBhcmFtKTsKPiArCj4gKwkJCWZyZWUoc2V0X2Vu Z2luZXMpOwo+ICsJCQlmcmVlKGxvYWRfYmFsYW5jZSk7Cj4gICAJCX0KPiAgIAo+ICAgCQlpZiAo d3JrLT5zc2V1KSB7Cj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeA==