From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from [59.151.112.132] (helo=heian.cn.fujitsu.com) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1aqrUV-0003DF-9e for kexec@lists.infradead.org; Fri, 15 Apr 2016 00:20:10 +0000 Message-ID: <57103332.7020803@cn.fujitsu.com> Date: Fri, 15 Apr 2016 08:17:54 +0800 From: =?UTF-8?B?Ilpob3UsIFdlbmppYW4v5ZGo5paH5YmRIg==?= MIME-Version: 1.0 Subject: Re: [PATCH v6] Improve the performance of --num-threads -d 31 References: <1460612555-19430-1-git-send-email-zhouwj-fnst@cn.fujitsu.com> <570F3110.1090008@cn.fujitsu.com> <20160414095734.GA5031@dhcp-128-25.nay.redhat.com> In-Reply-To: <20160414095734.GA5031@dhcp-128-25.nay.redhat.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "kexec" Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: Minfei Huang Cc: Atsushi Kumagai , kexec@lists.infradead.org T24gMDQvMTQvMjAxNiAwNTo1NyBQTSwgTWluZmVpIEh1YW5nIHdyb3RlOgo+IE9uIDA0LzE0LzE2 IGF0IDAxOjU2cG0sICJaaG91LCBXZW5qaWFuL+WRqOaWh+WJkSIgd3JvdGU6Cj4+IEhlbGxvIEF0 c3VzaGksCj4+Cj4+IEkgY2FsY3VsYXRlZCB0aGUgbWVtb3J5IGNvc3Qgb2YgZWFjaCB0aHJlYWQs IGFuZCB0aGUgcmVzdWx0IGlzIGFib3V0IDUwS0IuCj4+IEJ1dCBJIGZpbmQgZWFjaCB0aHJlYWQg d2lsbCB0YWtlIGEgbGl0dGxlIG1vcmUgdGhhbiAxMDBLQiBhY3R1YWxseS4KPj4gQW5kIEkgc2V0 IHRoZSByZXNlcnZlZCBtZW1vcnkgZm9yIGVhY2ggdGhyZWFkIHRvIDIwMEtCIGluIHRoaXMgdmVy c2lvbi4KPj4KPj4gSSB0aGluayAyMDBLQiBpcyBhIHByb3BlciB2YWx1ZS4KPgo+IEhpLCBaaG91 Lgo+Cj4gSXMgdGhlcmUgYSBnZW5lcmFsIGZvcm11bGFyIHByb3ZpZGVkIHRvIHVzZXIgdG8gY2Fs Y3VsYXRlIHJvdWdoIHJlc2VydmVkCj4gbWVtb3J5LCBpZiBvcHRpb24gbnVtLXRocmVhZHMgaXMg dXNlZD8KPgoKSGkgTWluZmVpLAoKVGhhdCBpcwptYXhfdGhyZWFkcyA9ICgoZnJlZV9tZW1vcnkg LSA0TUIpICogMC42KSAvIDIwMEtCIC4KCkFuZCBtYXliZSBmcmVlX21lbW9yeSA9IHJlc2VydmVk X21lbW9yeSAtIDEwME1CLiBJJ20gbm90IHN1cmUgYWJvdXQgaXQuCgpCdXQgaXMgaXQgbmVjZXNz YXJ5IGZvciB1c2VyIHRvIGNhbGN1bGF0ZT8KSWYgdXNlciB1c2UgdG9vIG11Y2ggdGhyZWFkcywg dGhpcyBwYXRjaCB3aWxsIHJlc2V0IGl0IHRvIGEgcHJvcGVyIHZhbHVlLgoKLS0gClRoYW5rcwpa aG91Cgo+IFRoYW5rcwo+IE1pbmZlaQo+Cj4+Cj4+IC0tCj4+IFRoYW5rcwo+PiBaaG91Cj4+Cj4+ IE9uIDA0LzE0LzIwMTYgMDE6NDIgUE0sIFpob3UgV2VuamlhbiB3cm90ZToKPj4+IHY2Ogo+Pj4g ICAgICAgICAgMS4gYWRkcmVzcyBBdHN1c2hpIEt1bWFnYWkncyBjb21tZW50cyBhYm91dCBjYWxj dWxhdGluZyBhbmQgcmVzZXJ2aW5nIG1lbW9yeQo+Pj4gdjU6Cj4+PiAgICAgICAgICAxLiByZW1v dmUgdW51c2VkIHZhcmlhYmxlIGNoZWNrX291dAo+Pj4gICAgICAgICAgMi4gcmVzZXQgbnVtX3Ro cmVhZHMgaWYgbWVtb3J5IGlzIG5vdCBlbm91Z2gKPj4+IHY0Ogo+Pj4gICAgICAgICAgMS4gZml4 IGEgYnVnIGNhdXNlZCBieSB0aGUgbG9naWMKPj4+IHYzOgo+Pj4gICAgICAgICAgMS4gcmVtb3Zl IHNvbWUgdW51c2VkIHZhcmlhYmxlcwo+Pj4gICAgICAgICAgMi4gZml4IGEgYnVnIGNhdXNlZCBi eSB0aGUgd3JvbmcgbG9naWMKPj4+ICAgICAgICAgIDMuIGZpeCBhIGJ1ZyBjYXVzZWQgYnkgb3B0 aW1pc2luZwo+Pj4gICAgICAgICAgNC4gaW1wcm92ZSBtb3JlIHBlcmZvcm1hbmNlIGJ5IHVzaW5n IE1pbm9ydSBVc3VpJ3MgY29kZQo+Pj4KPj4+IG11bHRpLXRocmVhZHMgaW1wbGVtZW50YXRpb24g d2lsbCBpbnRyb2R1Y2UgZXh0cmEgY29zdCB3aGVuIGhhbmRsaW5nCj4+PiBlYWNoIHBhZ2UuIFRo ZSBvcmlnaW4gaW1wbGVtZW50YXRpb24gd2lsbCBhbHNvIGRvIHRoZSBleHRyYSB3b3JrIGZvcgo+ Pj4gZmlsdGVyZWQgcGFnZXMuIFNvIHRoZXJlIGlzIGEgYmlnIHBlcmZvcm1hbmNlIGRlZ3JhZGF0 aW9uIGluCj4+PiAtLW51bS10aHJlYWRzIC1kIDMxLgo+Pj4gVGhlIG5ldyBpbXBsZW1lbnRhdGlv biB3b24ndCBkbyB0aGUgZXh0cmEgd29yayBmb3IgZmlsdGVyZWQgcGFnZXMgYW55Cj4+PiBtb3Jl LiBTbyB0aGUgcGVyZm9ybWFuY2Ugb2YgLWQgMzEgaXMgY2xvc2UgdG8gdGhhdCBvZiBzZXJpYWwg cHJvY2Vzc2luZy4KPj4+Cj4+PiBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGlzIGp1c3QgbGlrZSB0 aGUgZm9sbG93aW5nOgo+Pj4gICAgICAgICAgKiBUaGUgYmFzaWMgaWRlYSBpcyBwcm9kdWNlciBw cm9kdWNpbmcgcGFnZSBhbmQgY29uc3VtZXIgd3JpdGluZyBwYWdlLgo+Pj4gICAgICAgICAgKiBF YWNoIHByb2R1Y2VyIGhhdmUgYSBwYWdlX2ZsYWdfYnVmIGxpc3Qgd2hpY2ggaXMgdXNlZCBmb3Ig c3RvcmluZwo+Pj4gICAgICAgICAgICBwYWdlJ3MgZGVzY3JpcHRpb24uCj4+PiAgICAgICAgICAq IFRoZSBzaXplIG9mIHBhZ2VfZmxhZ19idWYgaXMgbGl0dGxlIHNvIGl0IHdvbid0IHRha2UgdG9v IG11Y2ggbWVtb3J5Lgo+Pj4gICAgICAgICAgKiBBbmQgYWxsIHByb2R1Y2VycyB3aWxsIHNoYXJl IGEgcGFnZV9kYXRhX2J1ZiBhcnJheSB3aGljaCBpcwo+Pj4gICAgICAgICAgICB1c2VkIGZvciBz dG9yaW5nIHBhZ2UncyBjb21wcmVzc2VkIGRhdGEuCj4+PiAgICAgICAgICAqIFRoZSBtYWluIHRo cmVhZCBpcyB0aGUgY29uc3VtZXIuIEl0IHdpbGwgZmluZCB0aGUgbmV4dCBwZm4gYW5kIHdyaXRl Cj4+PiAgICAgICAgICAgIGl0IGludG8gZmlsZS4KPj4+ICAgICAgICAgICogVGhlIG5leHQgcGZu IGlzIHNtYWxsZXN0IHBmbiBpbiBhbGwgcGFnZV9mbGFnX2J1Zi4KPj4+Cj4+PiBTaWduZWQtb2Zm LWJ5OiBNaW5vcnUgVXN1aSA8bWluLXVzdWlAdGkuanAubmVjLmNvbT4KPj4+IFNpZ25lZC1vZmYt Ynk6IFpob3UgV2VuamlhbiA8emhvdXdqLWZuc3RAY24uZnVqaXRzdS5jb20+Cj4+PiAtLS0KPj4+ ICAgbWFrZWR1bXBmaWxlLmMgfCAzMjAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+PiAgIG1ha2VkdW1wZmlsZS5oIHwgIDM4ICsrKyst LS0KPj4+ICAgMiBmaWxlcyBjaGFuZ2VkLCAyMTAgaW5zZXJ0aW9ucygrKSwgMTQ4IGRlbGV0aW9u cygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9tYWtlZHVtcGZpbGUuYyBiL21ha2VkdW1wZmlsZS5j Cj4+PiBpbmRleCBmYTBiNzc5Li5hODI2MzIxIDEwMDY0NAo+Pj4gLS0tIGEvbWFrZWR1bXBmaWxl LmMKPj4+ICsrKyBiL21ha2VkdW1wZmlsZS5jCj4+PiBAQCAtMzQ4MSw5ICszNDgxLDggQEAgaW5p dGlhbF9mb3JfcGFyYWxsZWwoKQo+Pj4gICB7Cj4+PiAgIAl1bnNpZ25lZCBsb25nIGxlbl9idWZf b3V0Owo+Pj4gICAJdW5zaWduZWQgbG9uZyBwYWdlX2RhdGFfYnVmX3NpemU7Cj4+PiAtCXVuc2ln bmVkIGxvbmcgbGltaXRfc2l6ZTsKPj4+IC0JaW50IHBhZ2VfZGF0YV9udW07Cj4+PiAtCWludCBp Owo+Pj4gKwlzdHJ1Y3QgcGFnZV9mbGFnICpjdXJyZW50Owo+Pj4gKwlpbnQgaSwgajsKPj4+Cj4+ PiAgIAlsZW5fYnVmX291dCA9IGNhbGN1bGF0ZV9sZW5fYnVmX291dChpbmZvLT5wYWdlX3NpemUp Owo+Pj4KPj4+IEBAIC0zNTUzLDIwICszNTUyLDcgQEAgaW5pdGlhbF9mb3JfcGFyYWxsZWwoKQo+ Pj4gICAjZW5kaWYKPj4+ICAgCX0KPj4+Cj4+PiAtCS8qCj4+PiAtCSAqIGdldCBhIHNhZmUgbnVt YmVyIG9mIHBhZ2VfZGF0YQo+Pj4gLQkgKi8KPj4+IC0JcGFnZV9kYXRhX2J1Zl9zaXplID0gTUFY KGxlbl9idWZfb3V0LCBpbmZvLT5wYWdlX3NpemUpOwo+Pj4gLQo+Pj4gLQlsaW1pdF9zaXplID0g KGdldF9mcmVlX21lbW9yeV9zaXplKCkKPj4+IC0JCSAgICAgIC0gTUFQX1JFR0lPTiAqIGluZm8t Pm51bV90aHJlYWRzKSAqIDAuNjsKPj4+IC0KPj4+IC0JcGFnZV9kYXRhX251bSA9IGxpbWl0X3Np emUgLyBwYWdlX2RhdGFfYnVmX3NpemU7Cj4+PiAtCj4+PiAtCWluZm8tPm51bV9idWZmZXJzID0g TUlOKE5VTV9CVUZGRVJTLCBwYWdlX2RhdGFfbnVtKTsKPj4+IC0KPj4+IC0JREVCVUdfTVNHKCJO dW1iZXIgb2Ygc3RydWN0IHBhZ2VfZGF0YSBmb3IgcHJvZHVjZS9jb25zdW1lOiAlZFxuIiwKPj4+ IC0JCQlpbmZvLT5udW1fYnVmZmVycyk7Cj4+PiArCWluZm8tPm51bV9idWZmZXJzID0gUEFHRV9E QVRBX05VTSAqIGluZm8tPm51bV90aHJlYWRzOwo+Pj4KPj4+ICAgCS8qCj4+PiAgIAkgKiBhbGxv Y2F0ZSBtZW1vcnkgZm9yIHBhZ2VfZGF0YQo+Pj4gQEAgLTM1NzksNiArMzU2NSw3IEBAIGluaXRp YWxfZm9yX3BhcmFsbGVsKCkKPj4+ICAgCX0KPj4+ICAgCW1lbXNldChpbmZvLT5wYWdlX2RhdGFf YnVmLCAwLCBzaXplb2Yoc3RydWN0IHBhZ2VfZGF0YSkgKiBpbmZvLT5udW1fYnVmZmVycyk7Cj4+ Pgo+Pj4gKwlwYWdlX2RhdGFfYnVmX3NpemUgPSBNQVgobGVuX2J1Zl9vdXQsIGluZm8tPnBhZ2Vf c2l6ZSk7Cj4+PiAgIAlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX2J1ZmZlcnM7IGkrKykgewo+ Pj4gICAJCWlmICgoaW5mby0+cGFnZV9kYXRhX2J1ZltpXS5idWYgPSBtYWxsb2MocGFnZV9kYXRh X2J1Zl9zaXplKSkgPT0gTlVMTCkgewo+Pj4gICAJCQlNU0coIkNhbid0IGFsbG9jYXRlIG1lbW9y eSBmb3IgYnVmIG9mIHBhZ2VfZGF0YV9idWYuICVzXG4iLAo+Pj4gQEAgLTM1ODgsNiArMzU3NSwz NiBAQCBpbml0aWFsX2Zvcl9wYXJhbGxlbCgpCj4+PiAgIAl9Cj4+Pgo+Pj4gICAJLyoKPj4+ICsJ ICogaW5pdGlhbCBwYWdlX2ZsYWcgZm9yIGVhY2ggdGhyZWFkCj4+PiArCSAqLwo+Pj4gKwlpZiAo KGluZm8tPnBhZ2VfZmxhZ19idWYgPSBtYWxsb2Moc2l6ZW9mKHZvaWQgKikgKiBpbmZvLT5udW1f dGhyZWFkcykpCj4+PiArCSAgICA9PSBOVUxMKSB7Cj4+PiArCQlNU0coIkNhbid0IGFsbG9jYXRl IG1lbW9yeSBmb3IgcGFnZV9mbGFnX2J1Zi4gJXNcbiIsCj4+PiArCQkJCXN0cmVycm9yKGVycm5v KSk7Cj4+PiArCQlyZXR1cm4gRkFMU0U7Cj4+PiArCX0KPj4+ICsJbWVtc2V0KGluZm8tPnBhZ2Vf ZmxhZ19idWYsIDAsIHNpemVvZih2b2lkICopICogaW5mby0+bnVtX3RocmVhZHMpOwo+Pj4gKwo+ Pj4gKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX3RocmVhZHM7IGkrKykgewo+Pj4gKwkJaWYg KChpbmZvLT5wYWdlX2ZsYWdfYnVmW2ldID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcGFnZV9m bGFnKSkpID09IE5VTEwpIHsKPj4+ICsJCQlNU0coIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3Ig cGFnZV9mbGFnLiAlc1xuIiwKPj4+ICsJCQkJc3RyZXJyb3IoZXJybm8pKTsKPj4+ICsJCQlyZXR1 cm4gRkFMU0U7Cj4+PiArCQl9Cj4+PiArCQljdXJyZW50ID0gaW5mby0+cGFnZV9mbGFnX2J1Zltp XTsKPj4+ICsKPj4+ICsJCWZvciAoaiA9IDE7IGogPCBQQUdFX0ZMQUdfTlVNOyBqKyspIHsKPj4+ ICsJCQlpZiAoKGN1cnJlbnQtPm5leHQgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwYWdlX2Zs YWcpKSkgPT0gTlVMTCkgewo+Pj4gKwkJCQlNU0coIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3Ig cGFnZV9mbGFnLiAlc1xuIiwKPj4+ICsJCQkJCXN0cmVycm9yKGVycm5vKSk7Cj4+PiArCQkJCXJl dHVybiBGQUxTRTsKPj4+ICsJCQl9Cj4+PiArCQkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7Cj4+ PiArCQl9Cj4+PiArCQljdXJyZW50LT5uZXh0ID0gaW5mby0+cGFnZV9mbGFnX2J1ZltpXTsKPj4+ ICsJfQo+Pj4gKwo+Pj4gKwkvKgo+Pj4gICAJICogaW5pdGlhbCBmZF9tZW1vcnkgZm9yIHRocmVh ZHMKPj4+ICAgCSAqLwo+Pj4gICAJZm9yIChpID0gMDsgaSA8IGluZm8tPm51bV90aHJlYWRzOyBp KyspIHsKPj4+IEBAIC0zNjEyLDcgKzM2MjksOCBAQCBpbml0aWFsX2Zvcl9wYXJhbGxlbCgpCj4+ PiAgIHZvaWQKPj4+ICAgZnJlZV9mb3JfcGFyYWxsZWwoKQo+Pj4gICB7Cj4+PiAtCWludCBpOwo+ Pj4gKwlpbnQgaSwgajsKPj4+ICsJc3RydWN0IHBhZ2VfZmxhZyAqY3VycmVudDsKPj4+Cj4+PiAg IAlpZiAoaW5mby0+dGhyZWFkcyAhPSBOVUxMKSB7Cj4+PiAgIAkJZm9yIChpID0gMDsgaSA8IGlu Zm8tPm51bV90aHJlYWRzOyBpKyspIHsKPj4+IEBAIC0zNjU1LDYgKzM2NzMsMTkgQEAgZnJlZV9m b3JfcGFyYWxsZWwoKQo+Pj4gICAJCWZyZWUoaW5mby0+cGFnZV9kYXRhX2J1Zik7Cj4+PiAgIAl9 Cj4+Pgo+Pj4gKwlpZiAoaW5mby0+cGFnZV9mbGFnX2J1ZiAhPSBOVUxMKSB7Cj4+PiArCQlmb3Ig KGkgPSAwOyBpIDwgaW5mby0+bnVtX3RocmVhZHM7IGkrKykgewo+Pj4gKwkJCWZvciAoaiA9IDA7 IGogPCBQQUdFX0ZMQUdfTlVNOyBqKyspIHsKPj4+ICsJCQkJaWYgKGluZm8tPnBhZ2VfZmxhZ19i dWZbaV0gIT0gTlVMTCkgewo+Pj4gKwkJCQkJY3VycmVudCA9IGluZm8tPnBhZ2VfZmxhZ19idWZb aV07Cj4+PiArCQkJCQlpbmZvLT5wYWdlX2ZsYWdfYnVmW2ldID0gY3VycmVudC0+bmV4dDsKPj4+ ICsJCQkJCWZyZWUoY3VycmVudCk7Cj4+PiArCQkJCX0KPj4+ICsJCQl9Cj4+PiArCQl9Cj4+PiAr CQlmcmVlKGluZm8tPnBhZ2VfZmxhZ19idWYpOwo+Pj4gKwl9Cj4+PiArCj4+PiAgIAlpZiAoaW5m by0+cGFyYWxsZWxfaW5mbyA9PSBOVUxMKQo+Pj4gICAJCXJldHVybjsKPj4+Cj4+PiBAQCAtNzA3 NSwxMSArNzEwNiwxMSBAQCB2b2lkICoKPj4+ICAga2R1bXBfdGhyZWFkX2Z1bmN0aW9uX2N5Y2xp Yyh2b2lkICphcmcpIHsKPj4+ICAgCXZvaWQgKnJldHZhbCA9IFBUSFJFQURfRkFJTDsKPj4+ICAg CXN0cnVjdCB0aHJlYWRfYXJncyAqa2R1bXBfdGhyZWFkX2FyZ3MgPSAoc3RydWN0IHRocmVhZF9h cmdzICopYXJnOwo+Pj4gLQlzdHJ1Y3QgcGFnZV9kYXRhICpwYWdlX2RhdGFfYnVmID0ga2R1bXBf dGhyZWFkX2FyZ3MtPnBhZ2VfZGF0YV9idWY7Cj4+PiArCXZvbGF0aWxlIHN0cnVjdCBwYWdlX2Rh dGEgKnBhZ2VfZGF0YV9idWYgPSBrZHVtcF90aHJlYWRfYXJncy0+cGFnZV9kYXRhX2J1ZjsKPj4+ ICsJdm9sYXRpbGUgc3RydWN0IHBhZ2VfZmxhZyAqcGFnZV9mbGFnX2J1ZiA9IGtkdW1wX3RocmVh ZF9hcmdzLT5wYWdlX2ZsYWdfYnVmOwo+Pj4gICAJc3RydWN0IGN5Y2xlICpjeWNsZSA9IGtkdW1w X3RocmVhZF9hcmdzLT5jeWNsZTsKPj4+IC0JaW50IHBhZ2VfZGF0YV9udW0gPSBrZHVtcF90aHJl YWRfYXJncy0+cGFnZV9kYXRhX251bTsKPj4+IC0JbWRmX3Bmbl90IHBmbjsKPj4+IC0JaW50IGlu ZGV4Owo+Pj4gKwltZGZfcGZuX3QgcGZuID0gY3ljbGUtPnN0YXJ0X3BmbjsKPj4+ICsJaW50IGlu ZGV4ID0ga2R1bXBfdGhyZWFkX2FyZ3MtPnRocmVhZF9udW07Cj4+PiAgIAlpbnQgYnVmX3JlYWR5 Owo+Pj4gICAJaW50IGR1bXBhYmxlOwo+Pj4gICAJaW50IGZkX21lbW9yeSA9IDA7Cj4+PiBAQCAt NzEyNSw0NyArNzE1Niw0OCBAQCBrZHVtcF90aHJlYWRfZnVuY3Rpb25fY3ljbGljKHZvaWQgKmFy Zykgewo+Pj4gICAJCQkJCQlrZHVtcF90aHJlYWRfYXJncy0+dGhyZWFkX251bSk7Cj4+PiAgIAl9 Cj4+Pgo+Pj4gLQl3aGlsZSAoMSkgewo+Pj4gLQkJLyogZ2V0IG5leHQgcGZuICovCj4+PiAtCQlw dGhyZWFkX211dGV4X2xvY2soJmluZm8tPmN1cnJlbnRfcGZuX211dGV4KTsKPj4+IC0JCXBmbiA9 IGluZm8tPmN1cnJlbnRfcGZuOwo+Pj4gLQkJaW5mby0+Y3VycmVudF9wZm4rKzsKPj4+IC0JCXB0 aHJlYWRfbXV0ZXhfdW5sb2NrKCZpbmZvLT5jdXJyZW50X3Bmbl9tdXRleCk7Cj4+PiAtCj4+PiAt CQlpZiAocGZuID49IGtkdW1wX3RocmVhZF9hcmdzLT5lbmRfcGZuKQo+Pj4gLQkJCWJyZWFrOwo+ Pj4gLQo+Pj4gLQkJaW5kZXggPSAtMTsKPj4+ICsJLyoKPj4+ICsJICogZmlsdGVyZWQgcGFnZSB3 b24ndCB0YWtlIGFueXRoaW5nCj4+PiArCSAqIHVuZmlsdGVyZWQgemVybyBwYWdlIHdpbGwgb25s eSB0YWtlIGEgcGFnZV9mbGFnX2J1Zgo+Pj4gKwkgKiB1bmZpbHRlcmVkIG5vbi16ZXJvIHBhZ2Ug d2lsbCB0YWtlIGEgcGFnZV9mbGFnX2J1ZiBhbmQgYSBwYWdlX2RhdGFfYnVmCj4+PiArCSAqLwo+ Pj4gKwl3aGlsZSAocGZuIDwgY3ljbGUtPmVuZF9wZm4pIHsKPj4+ICAgCQlidWZfcmVhZHkgPSBG QUxTRTsKPj4+Cj4+PiArCQlwdGhyZWFkX211dGV4X2xvY2soJmluZm8tPnBhZ2VfZGF0YV9tdXRl eCk7Cj4+PiArCQl3aGlsZSAocGFnZV9kYXRhX2J1ZltpbmRleF0udXNlZCAhPSBGQUxTRSkgewo+ Pj4gKwkJCWluZGV4ID0gKGluZGV4ICsgMSkgJSBpbmZvLT5udW1fYnVmZmVyczsKPj4+ICsJCX0K Pj4+ICsJCXBhZ2VfZGF0YV9idWZbaW5kZXhdLnVzZWQgPSBUUlVFOwo+Pj4gKwkJcHRocmVhZF9t dXRleF91bmxvY2soJmluZm8tPnBhZ2VfZGF0YV9tdXRleCk7Cj4+PiArCj4+PiAgIAkJd2hpbGUg KGJ1Zl9yZWFkeSA9PSBGQUxTRSkgewo+Pj4gICAJCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKPj4+ IC0KPj4+IC0JCQlpbmRleCA9IHBmbiAlIHBhZ2VfZGF0YV9udW07Cj4+PiAtCj4+PiAtCQkJaWYg KHBmbiAtIGluZm8tPmNvbnN1bWVkX3BmbiA+IGluZm8tPm51bV9idWZmZXJzKQo+Pj4gKwkJCWlm IChwYWdlX2ZsYWdfYnVmLT5yZWFkeSA9PSBGTEFHX1JFQURZKQo+Pj4gICAJCQkJY29udGludWU7 Cj4+Pgo+Pj4gLQkJCWlmIChwYWdlX2RhdGFfYnVmW2luZGV4XS5yZWFkeSAhPSAwKQo+Pj4gLQkJ CQljb250aW51ZTsKPj4+IC0KPj4+IC0JCQlwdGhyZWFkX211dGV4X2xvY2soJnBhZ2VfZGF0YV9i dWZbaW5kZXhdLm11dGV4KTsKPj4+IC0KPj4+IC0JCQlpZiAocGFnZV9kYXRhX2J1ZltpbmRleF0u cmVhZHkgIT0gMCkKPj4+IC0JCQkJZ290byB1bmxvY2s7Cj4+PiAtCj4+PiAtCQkJYnVmX3JlYWR5 ID0gVFJVRTsKPj4+ICsJCQkvKiBnZXQgbmV4dCBkdW1wYWJsZSBwZm4gKi8KPj4+ICsJCQlwdGhy ZWFkX211dGV4X2xvY2soJmluZm8tPmN1cnJlbnRfcGZuX211dGV4KTsKPj4+ICsJCQlmb3IgKHBm biA9IGluZm8tPmN1cnJlbnRfcGZuOyBwZm4gPCBjeWNsZS0+ZW5kX3BmbjsgcGZuKyspIHsKPj4+ ICsJCQkJZHVtcGFibGUgPSBpc19kdW1wYWJsZSgKPj4+ICsJCQkJCWluZm8tPmZkX2JpdG1hcCA/ ICZiaXRtYXBfcGFyYWxsZWwgOiBpbmZvLT5iaXRtYXAyLAo+Pj4gKwkJCQkJcGZuLAo+Pj4gKwkJ CQkJY3ljbGUpOwo+Pj4gKwkJCQlpZiAoZHVtcGFibGUpCj4+PiArCQkJCQlicmVhazsKPj4+ICsJ CQl9Cj4+PiArCQkJaW5mby0+Y3VycmVudF9wZm4gPSBwZm4gKyAxOwo+Pj4KPj4+IC0JCQlwYWdl X2RhdGFfYnVmW2luZGV4XS5wZm4gPSBwZm47Cj4+PiAtCQkJcGFnZV9kYXRhX2J1ZltpbmRleF0u cmVhZHkgPSAxOwo+Pj4gKwkJCXBhZ2VfZmxhZ19idWYtPnBmbiA9IHBmbjsKPj4+ICsJCQlwYWdl X2ZsYWdfYnVmLT5yZWFkeSA9IEZMQUdfRklMTElORzsKPj4+ICsJCQlwdGhyZWFkX211dGV4X3Vu bG9jaygmaW5mby0+Y3VycmVudF9wZm5fbXV0ZXgpOwo+Pj4gKwkJCXNlbV9wb3N0KCZpbmZvLT5w YWdlX2ZsYWdfYnVmX3NlbSk7Cj4+Pgo+Pj4gLQkJCWR1bXBhYmxlID0gaXNfZHVtcGFibGUoCj4+ PiAtCQkJCWluZm8tPmZkX2JpdG1hcCA/ICZiaXRtYXBfcGFyYWxsZWwgOiBpbmZvLT5iaXRtYXAy LAo+Pj4gLQkJCQlwZm4sCj4+PiAtCQkJCWN5Y2xlKTsKPj4+IC0JCQlwYWdlX2RhdGFfYnVmW2lu ZGV4XS5kdW1wYWJsZSA9IGR1bXBhYmxlOwo+Pj4gLQkJCWlmICghZHVtcGFibGUpCj4+PiAtCQkJ CWdvdG8gdW5sb2NrOwo+Pj4gKwkJCWlmIChwZm4gPj0gY3ljbGUtPmVuZF9wZm4pIHsKPj4+ICsJ CQkJaW5mby0+Y3VycmVudF9wZm4gPSBjeWNsZS0+ZW5kX3BmbjsKPj4+ICsJCQkJcGFnZV9kYXRh X2J1ZltpbmRleF0udXNlZCA9IEZBTFNFOwo+Pj4gKwkJCQlicmVhazsKPj4+ICsJCQl9Cj4+Pgo+ Pj4gICAJCQlpZiAoIXJlYWRfcGZuX3BhcmFsbGVsKGZkX21lbW9yeSwgcGZuLCBidWYsCj4+PiAg IAkJCQkJICAgICAgICZiaXRtYXBfbWVtb3J5X3BhcmFsbGVsLAo+Pj4gQEAgLTcxNzgsMTEgKzcy MTAsMTEgQEAga2R1bXBfdGhyZWFkX2Z1bmN0aW9uX2N5Y2xpYyh2b2lkICphcmcpIHsKPj4+Cj4+ PiAgIAkJCWlmICgoaW5mby0+ZHVtcF9sZXZlbCAmIERMX0VYQ0xVREVfWkVSTykKPj4+ICAgCQkJ ICAgICYmIGlzX3plcm9fcGFnZShidWYsIGluZm8tPnBhZ2Vfc2l6ZSkpIHsKPj4+IC0JCQkJcGFn ZV9kYXRhX2J1ZltpbmRleF0uemVybyA9IFRSVUU7Cj4+PiAtCQkJCWdvdG8gdW5sb2NrOwo+Pj4g KwkJCQlwYWdlX2ZsYWdfYnVmLT56ZXJvID0gVFJVRTsKPj4+ICsJCQkJZ290byBuZXh0Owo+Pj4g ICAJCQl9Cj4+Pgo+Pj4gLQkJCXBhZ2VfZGF0YV9idWZbaW5kZXhdLnplcm8gPSBGQUxTRTsKPj4+ ICsJCQlwYWdlX2ZsYWdfYnVmLT56ZXJvID0gRkFMU0U7Cj4+Pgo+Pj4gICAJCQkvKgo+Pj4gICAJ CQkgKiBDb21wcmVzcyB0aGUgcGFnZSBkYXRhLgo+Pj4gQEAgLTcyMzIsMTIgKzcyNjQsMTQgQEAg a2R1bXBfdGhyZWFkX2Z1bmN0aW9uX2N5Y2xpYyh2b2lkICphcmcpIHsKPj4+ICAgCQkJCXBhZ2Vf ZGF0YV9idWZbaW5kZXhdLnNpemUgID0gaW5mby0+cGFnZV9zaXplOwo+Pj4gICAJCQkJbWVtY3B5 KHBhZ2VfZGF0YV9idWZbaW5kZXhdLmJ1ZiwgYnVmLCBpbmZvLT5wYWdlX3NpemUpOwo+Pj4gICAJ CQl9Cj4+PiAtdW5sb2NrOgo+Pj4gLQkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwYWdlX2RhdGFf YnVmW2luZGV4XS5tdXRleCk7Cj4+PiArCQkJcGFnZV9mbGFnX2J1Zi0+aW5kZXggPSBpbmRleDsK Pj4+ICsJCQlidWZfcmVhZHkgPSBUUlVFOwo+Pj4gK25leHQ6Cj4+PiArCQkJcGFnZV9mbGFnX2J1 Zi0+cmVhZHkgPSBGTEFHX1JFQURZOwo+Pj4gKwkJCXBhZ2VfZmxhZ19idWYgPSBwYWdlX2ZsYWdf YnVmLT5uZXh0Owo+Pj4KPj4+ICAgCQl9Cj4+PiAgIAl9Cj4+PiAtCj4+PiAgIAlyZXR2YWwgPSBO VUxMOwo+Pj4KPj4+ICAgZmFpbDoKPj4+IEBAIC03MjY1LDE0ICs3Mjk5LDE1IEBAIHdyaXRlX2tk dW1wX3BhZ2VzX3BhcmFsbGVsX2N5Y2xpYyhzdHJ1Y3QgY2FjaGVfZGF0YSAqY2RfaGVhZGVyLAo+ Pj4gICAJc3RydWN0IHBhZ2VfZGVzYyBwZDsKPj4+ICAgCXN0cnVjdCB0aW1ldmFsIHR2X3N0YXJ0 Owo+Pj4gICAJc3RydWN0IHRpbWV2YWwgbGFzdCwgbmV3Owo+Pj4gLQl1bnNpZ25lZCBsb25nIGxv bmcgY29uc3VtaW5nX3BmbjsKPj4+ICAgCXB0aHJlYWRfdCAqKnRocmVhZHMgPSBOVUxMOwo+Pj4g ICAJc3RydWN0IHRocmVhZF9hcmdzICprZHVtcF90aHJlYWRfYXJncyA9IE5VTEw7Cj4+PiAgIAl2 b2lkICp0aHJlYWRfcmVzdWx0Owo+Pj4gLQlpbnQgcGFnZV9kYXRhX251bTsKPj4+ICsJaW50IHBh Z2VfYnVmX251bTsKPj4+ICAgCXN0cnVjdCBwYWdlX2RhdGEgKnBhZ2VfZGF0YV9idWYgPSBOVUxM Owo+Pj4gICAJaW50IGk7Cj4+PiAgIAlpbnQgaW5kZXg7Cj4+PiArCWludCBlbmRfY291bnQsIGNv bnN1bWluZzsKPj4+ICsJbWRmX3Bmbl90IGN1cnJlbnRfcGZuLCB0ZW1wX3BmbjsKPj4+Cj4+PiAg IAlpZiAoaW5mby0+ZmxhZ19lbGZfZHVtcGZpbGUpCj4+PiAgIAkJcmV0dXJuIEZBTFNFOwo+Pj4g QEAgLTcyODQsMTMgKzczMTksNiBAQCB3cml0ZV9rZHVtcF9wYWdlc19wYXJhbGxlbF9jeWNsaWMo c3RydWN0IGNhY2hlX2RhdGEgKmNkX2hlYWRlciwKPj4+ICAgCQlnb3RvIG91dDsKPj4+ICAgCX0K Pj4+Cj4+PiAtCXJlcyA9IHB0aHJlYWRfbXV0ZXhfaW5pdCgmaW5mby0+Y29uc3VtZWRfcGZuX211 dGV4LCBOVUxMKTsKPj4+IC0JaWYgKHJlcyAhPSAwKSB7Cj4+PiAtCQlFUlJNU0coIkNhbid0IGlu aXRpYWxpemUgY29uc3VtZWRfcGZuX211dGV4LiAlc1xuIiwKPj4+IC0JCQkJc3RyZXJyb3IocmVz KSk7Cj4+PiAtCQlnb3RvIG91dDsKPj4+IC0JfQo+Pj4gLQo+Pj4gICAJcmVzID0gcHRocmVhZF9t dXRleF9pbml0KCZpbmZvLT5maWx0ZXJfbXV0ZXgsIE5VTEwpOwo+Pj4gICAJaWYgKHJlcyAhPSAw KSB7Cj4+PiAgIAkJRVJSTVNHKCJDYW4ndCBpbml0aWFsaXplIGZpbHRlcl9tdXRleC4gJXNcbiIs IHN0cmVycm9yKHJlcykpOwo+Pj4gQEAgLTczMTQsMzYgKzczNDIsMjMgQEAgd3JpdGVfa2R1bXBf cGFnZXNfcGFyYWxsZWxfY3ljbGljKHN0cnVjdCBjYWNoZV9kYXRhICpjZF9oZWFkZXIsCj4+PiAg IAllbmRfcGZuICAgPSBjeWNsZS0+ZW5kX3BmbjsKPj4+Cj4+PiAgIAlpbmZvLT5jdXJyZW50X3Bm biA9IHN0YXJ0X3BmbjsKPj4+IC0JaW5mby0+Y29uc3VtZWRfcGZuID0gc3RhcnRfcGZuIC0gMTsK Pj4+Cj4+PiAgIAl0aHJlYWRzID0gaW5mby0+dGhyZWFkczsKPj4+ICAgCWtkdW1wX3RocmVhZF9h cmdzID0gaW5mby0+a2R1bXBfdGhyZWFkX2FyZ3M7Cj4+Pgo+Pj4gLQlwYWdlX2RhdGFfbnVtID0g aW5mby0+bnVtX2J1ZmZlcnM7Cj4+PiArCXBhZ2VfYnVmX251bSA9IGluZm8tPm51bV9idWZmZXJz Owo+Pj4gICAJcGFnZV9kYXRhX2J1ZiA9IGluZm8tPnBhZ2VfZGF0YV9idWY7Cj4+PiArCXB0aHJl YWRfbXV0ZXhfaW5pdCgmaW5mby0+cGFnZV9kYXRhX211dGV4LCBOVUxMKTsKPj4+ICsJc2VtX2lu aXQoJmluZm8tPnBhZ2VfZmxhZ19idWZfc2VtLCAwLCAwKTsKPj4+Cj4+PiAtCWZvciAoaSA9IDA7 IGkgPCBwYWdlX2RhdGFfbnVtOyBpKyspIHsKPj4+IC0JCS8qCj4+PiAtCQkgKiBwcm9kdWNlciB3 aWxsIHVzZSBwZm4gaW4gcGFnZV9kYXRhX2J1ZiB0byBkZWNpZGUgdGhlCj4+PiAtCQkgKiBjb25z dW1lZCBwZm4KPj4+IC0JCSAqLwo+Pj4gLQkJcGFnZV9kYXRhX2J1ZltpXS5wZm4gPSBzdGFydF9w Zm4gLSAxOwo+Pj4gLQkJcGFnZV9kYXRhX2J1ZltpXS5yZWFkeSA9IDA7Cj4+PiAtCQlyZXMgPSBw dGhyZWFkX211dGV4X2luaXQoJnBhZ2VfZGF0YV9idWZbaV0ubXV0ZXgsIE5VTEwpOwo+Pj4gLQkJ aWYgKHJlcyAhPSAwKSB7Cj4+PiAtCQkJRVJSTVNHKCJDYW4ndCBpbml0aWFsaXplIG11dGV4IG9m IHBhZ2VfZGF0YV9idWYuICVzXG4iLAo+Pj4gLQkJCQkJc3RyZXJyb3IocmVzKSk7Cj4+PiAtCQkJ Z290byBvdXQ7Cj4+PiAtCQl9Cj4+PiAtCX0KPj4+ICsJZm9yIChpID0gMDsgaSA8IHBhZ2VfYnVm X251bTsgaSsrKQo+Pj4gKwkJcGFnZV9kYXRhX2J1ZltpXS51c2VkID0gRkFMU0U7Cj4+Pgo+Pj4g ICAJZm9yIChpID0gMDsgaSA8IGluZm8tPm51bV90aHJlYWRzOyBpKyspIHsKPj4+ICAgCQlrZHVt cF90aHJlYWRfYXJnc1tpXS50aHJlYWRfbnVtID0gaTsKPj4+ICAgCQlrZHVtcF90aHJlYWRfYXJn c1tpXS5sZW5fYnVmX291dCA9IGxlbl9idWZfb3V0Owo+Pj4gLQkJa2R1bXBfdGhyZWFkX2FyZ3Nb aV0uc3RhcnRfcGZuID0gc3RhcnRfcGZuOwo+Pj4gLQkJa2R1bXBfdGhyZWFkX2FyZ3NbaV0uZW5k X3BmbiA9IGVuZF9wZm47Cj4+PiAtCQlrZHVtcF90aHJlYWRfYXJnc1tpXS5wYWdlX2RhdGFfbnVt ID0gcGFnZV9kYXRhX251bTsKPj4+ICAgCQlrZHVtcF90aHJlYWRfYXJnc1tpXS5wYWdlX2RhdGFf YnVmID0gcGFnZV9kYXRhX2J1ZjsKPj4+ICsJCWtkdW1wX3RocmVhZF9hcmdzW2ldLnBhZ2VfZmxh Z19idWYgPSBpbmZvLT5wYWdlX2ZsYWdfYnVmW2ldOwo+Pj4gICAJCWtkdW1wX3RocmVhZF9hcmdz W2ldLmN5Y2xlID0gY3ljbGU7Cj4+Pgo+Pj4gICAJCXJlcyA9IHB0aHJlYWRfY3JlYXRlKHRocmVh ZHNbaV0sIE5VTEwsCj4+PiBAQCAtNzM1Niw1NSArNzM3MSw4NiBAQCB3cml0ZV9rZHVtcF9wYWdl c19wYXJhbGxlbF9jeWNsaWMoc3RydWN0IGNhY2hlX2RhdGEgKmNkX2hlYWRlciwKPj4+ICAgCQl9 Cj4+PiAgIAl9Cj4+Pgo+Pj4gLQljb25zdW1pbmdfcGZuID0gc3RhcnRfcGZuOwo+Pj4gLQlpbmRl eCA9IC0xOwo+Pj4gKwllbmRfY291bnQgPSAwOwo+Pj4gKwl3aGlsZSAoMSkgewo+Pj4gKwkJY29u c3VtaW5nID0gMDsKPj4+Cj4+PiAtCWdldHRpbWVvZmRheSgmbGFzdCwgTlVMTCk7Cj4+PiArCQkv Kgo+Pj4gKwkJICogVGhlIGJhc2ljIGlkZWEgaXMgcHJvZHVjZXIgcHJvZHVjaW5nIHBhZ2UgYW5k IGNvbnN1bWVyIHdyaXRpbmcgcGFnZS4KPj4+ICsJCSAqIEVhY2ggcHJvZHVjZXIgaGF2ZSBhIHBh Z2VfZmxhZ19idWYgbGlzdCB3aGljaCBpcyB1c2VkIGZvciBzdG9yaW5nIHBhZ2UncyBkZXNjcmlw dGlvbi4KPj4+ICsJCSAqIFRoZSBzaXplIG9mIHBhZ2VfZmxhZ19idWYgaXMgbGl0dGxlIHNvIGl0 IHdvbid0IHRha2UgdG9vIG11Y2ggbWVtb3J5Lgo+Pj4gKwkJICogQW5kIGFsbCBwcm9kdWNlcnMg d2lsbCBzaGFyZSBhIHBhZ2VfZGF0YV9idWYgYXJyYXkgd2hpY2ggaXMgdXNlZCBmb3Igc3Rvcmlu ZyBwYWdlJ3MgY29tcHJlc3NlZCBkYXRhLgo+Pj4gKwkJICogVGhlIG1haW4gdGhyZWFkIGlzIHRo ZSBjb25zdW1lci4gSXQgd2lsbCBmaW5kIHRoZSBuZXh0IHBmbiBhbmQgd3JpdGUgaXQgaW50byBm aWxlLgo+Pj4gKwkJICogVGhlIG5leHQgcGZuIGlzIHNtYWxsZXN0IHBmbiBpbiBhbGwgcGFnZV9m bGFnX2J1Zi4KPj4+ICsJCSAqLwo+Pj4gKwkJc2VtX3dhaXQoJmluZm8tPnBhZ2VfZmxhZ19idWZf c2VtKTsKPj4+ICsJCWdldHRpbWVvZmRheSgmbGFzdCwgTlVMTCk7Cj4+PiArCQl3aGlsZSAoMSkg ewo+Pj4gKwkJCWN1cnJlbnRfcGZuID0gZW5kX3BmbjsKPj4+Cj4+PiAtCXdoaWxlIChjb25zdW1p bmdfcGZuIDwgZW5kX3Bmbikgewo+Pj4gLQkJaW5kZXggPSBjb25zdW1pbmdfcGZuICUgcGFnZV9k YXRhX251bTsKPj4+ICsJCQkvKgo+Pj4gKwkJCSAqIHBhZ2VfZmxhZ19idWYgaXMgaW4gY2lyY3Vs YXIgbGlua2VkIGxpc3QuCj4+PiArCQkJICogVGhlIGFycmF5IGluZm8tPnBhZ2VfZmxhZ19idWZb XSByZWNvcmRzIHRoZSBjdXJyZW50IHBhZ2VfZmxhZ19idWYgaW4gZWFjaCB0aHJlYWQncwo+Pj4g KwkJCSAqIHBhZ2VfZmxhZ19idWYgbGlzdC4KPj4+ICsJCQkgKiBjb25zdW1pbmcgaXMgdXNlZCBm b3IgcmVjb3JkaW5nIGluIHdoaWNoIHRocmVhZCB0aGUgcGZuIGlzIHRoZSBzbWFsbGVzdC4KPj4+ ICsJCQkgKiBjdXJyZW50X3BmbiBpcyB1c2VkIGZvciByZWNvcmRpbmcgdGhlIHZhbHVlIG9mIHBm biB3aGVuIGNoZWNraW5nIHRoZSBwZm4uCj4+PiArCQkJICovCj4+PiArCQkJZm9yIChpID0gMDsg aSA8IGluZm8tPm51bV90aHJlYWRzOyBpKyspIHsKPj4+ICsJCQkJaWYgKGluZm8tPnBhZ2VfZmxh Z19idWZbaV0tPnJlYWR5ID09IEZMQUdfVU5VU0VEKQo+Pj4gKwkJCQkJY29udGludWU7Cj4+PiAr CQkJCXRlbXBfcGZuID0gaW5mby0+cGFnZV9mbGFnX2J1ZltpXS0+cGZuOwo+Pj4KPj4+IC0JCWdl dHRpbWVvZmRheSgmbmV3LCBOVUxMKTsKPj4+IC0JCWlmIChuZXcudHZfc2VjIC0gbGFzdC50dl9z ZWMgPiBXQUlUX1RJTUUpIHsKPj4+IC0JCQlFUlJNU0coIkNhbid0IGdldCBkYXRhIG9mIHBmbiAl bGx4LlxuIiwgY29uc3VtaW5nX3Bmbik7Cj4+PiAtCQkJZ290byBvdXQ7Cj4+PiAtCQl9Cj4+PiAr CQkJCS8qCj4+PiArCQkJCSAqIGNvdW50IGhvdyBtYW55IHRocmVhZHMgaGF2ZSByZWFjaGVkIHRo ZSBlbmQuCj4+PiArCQkJCSAqLwo+Pj4gKwkJCQlpZiAodGVtcF9wZm4gPj0gZW5kX3Bmbikgewo+ Pj4gKwkJCQkJaW5mby0+cGFnZV9mbGFnX2J1ZltpXS0+cmVhZHkgPSBGTEFHX1VOVVNFRDsKPj4+ ICsJCQkJCWVuZF9jb3VudCsrOwo+Pj4gKwkJCQkJY29udGludWU7Cj4+PiArCQkJCX0KPj4+Cj4+ PiAtCQkvKgo+Pj4gLQkJICogY2hlY2sgcGZuIGZpcnN0IHdpdGhvdXQgbXV0ZXggbG9ja2VkIHRv IHJlZHVjZSB0aGUgdGltZQo+Pj4gLQkJICogdHJ5aW5nIHRvIGxvY2sgdGhlIG11dGV4Cj4+PiAt CQkgKi8KPj4+IC0JCWlmIChwYWdlX2RhdGFfYnVmW2luZGV4XS5wZm4gIT0gY29uc3VtaW5nX3Bm bikKPj4+IC0JCQljb250aW51ZTsKPj4+ICsJCQkJaWYgKGN1cnJlbnRfcGZuIDwgdGVtcF9wZm4p Cj4+PiArCQkJCQljb250aW51ZTsKPj4+Cj4+PiAtCQlpZiAocHRocmVhZF9tdXRleF90cnlsb2Nr KCZwYWdlX2RhdGFfYnVmW2luZGV4XS5tdXRleCkgIT0gMCkKPj4+IC0JCQljb250aW51ZTsKPj4+ ICsJCQkJY29uc3VtaW5nID0gaTsKPj4+ICsJCQkJY3VycmVudF9wZm4gPSB0ZW1wX3BmbjsKPj4+ ICsJCQl9Cj4+Pgo+Pj4gLQkJLyogY2hlY2sgd2hldGhlciB0aGUgZm91bmQgb25lIGlzIHJlYWR5 IHRvIGJlIGNvbnN1bWVkICovCj4+PiAtCQlpZiAocGFnZV9kYXRhX2J1ZltpbmRleF0ucGZuICE9 IGNvbnN1bWluZ19wZm4gfHwKPj4+IC0JCSAgICBwYWdlX2RhdGFfYnVmW2luZGV4XS5yZWFkeSAh PSAxKSB7Cj4+PiAtCQkJZ290byB1bmxvY2s7Cj4+PiArCQkJLyoKPj4+ICsJCQkgKiBJZiBhbGwg dGhlIHRocmVhZHMgaGF2ZSByZWFjaGVkIHRoZSBlbmQsIHdlIHdpbGwgZmluaXNoIHdyaXRpbmcu Cj4+PiArCQkJICovCj4+PiArCQkJaWYgKGVuZF9jb3VudCA+PSBpbmZvLT5udW1fdGhyZWFkcykK Pj4+ICsJCQkJZ290byBmaW5pc2g7Cj4+PiArCj4+PiArCQkJLyoKPj4+ICsJCQkgKiBJZiB0aGUg cGFnZV9mbGFnX2J1ZiBpcyBub3QgcmVhZHksIHRoZSBwZm4gcmVjb3JkZWQgbWF5IGJlIGNoYW5n ZWQuCj4+PiArCQkJICogU28gd2Ugc2hvdWxkIHJlY2hlY2suCj4+PiArCQkJICovCj4+PiArCQkJ aWYgKGluZm8tPnBhZ2VfZmxhZ19idWZbY29uc3VtaW5nXS0+cmVhZHkgIT0gRkxBR19SRUFEWSkg ewo+Pj4gKwkJCQlnZXR0aW1lb2ZkYXkoJm5ldywgTlVMTCk7Cj4+PiArCQkJCWlmIChuZXcudHZf c2VjIC0gbGFzdC50dl9zZWMgPiBXQUlUX1RJTUUpIHsKPj4+ICsJCQkJCUVSUk1TRygiQ2FuJ3Qg Z2V0IGRhdGEgb2YgcGZuLlxuIik7Cj4+PiArCQkJCQlnb3RvIG91dDsKPj4+ICsJCQkJfQo+Pj4g KwkJCQljb250aW51ZTsKPj4+ICsJCQl9Cj4+PiArCj4+PiArCQkJaWYgKGN1cnJlbnRfcGZuID09 IGluZm8tPnBhZ2VfZmxhZ19idWZbY29uc3VtaW5nXS0+cGZuKQo+Pj4gKwkJCQlicmVhazsKPj4+ ICAgCQl9Cj4+Pgo+Pj4gICAJCWlmICgobnVtX2R1bXBlZCAlIHBlcikgPT0gMCkKPj4+ICAgCQkJ cHJpbnRfcHJvZ3Jlc3MoUFJPR1JFU1NfQ09QWSwgbnVtX2R1bXBlZCwgaW5mby0+bnVtX2R1bXBh YmxlKTsKPj4+Cj4+PiAtCQkvKiBuZXh0IHBmbiBpcyBmb3VuZCwgcmVmcmVzaCBsYXN0IGhlcmUg Ki8KPj4+IC0JCWxhc3QgPSBuZXc7Cj4+PiAtCQljb25zdW1pbmdfcGZuKys7Cj4+PiAtCQlpbmZv LT5jb25zdW1lZF9wZm4rKzsKPj4+IC0JCXBhZ2VfZGF0YV9idWZbaW5kZXhdLnJlYWR5ID0gMDsK Pj4+IC0KPj4+IC0JCWlmIChwYWdlX2RhdGFfYnVmW2luZGV4XS5kdW1wYWJsZSA9PSBGQUxTRSkK Pj4+IC0JCQlnb3RvIHVubG9jazsKPj4+IC0KPj4+ICAgCQludW1fZHVtcGVkKys7Cj4+Pgo+Pj4g LQkJaWYgKHBhZ2VfZGF0YV9idWZbaW5kZXhdLnplcm8gPT0gVFJVRSkgewo+Pj4gKwo+Pj4gKwkJ aWYgKGluZm8tPnBhZ2VfZmxhZ19idWZbY29uc3VtaW5nXS0+emVybyA9PSBUUlVFKSB7Cj4+PiAg IAkJCWlmICghd3JpdGVfY2FjaGUoY2RfaGVhZGVyLCBwZF96ZXJvLCBzaXplb2YocGFnZV9kZXNj X3QpKSkKPj4+ICAgCQkJCWdvdG8gb3V0Owo+Pj4gICAJCQlwZm5femVybysrOwo+Pj4gICAJCX0g ZWxzZSB7Cj4+PiArCQkJaW5kZXggPSBpbmZvLT5wYWdlX2ZsYWdfYnVmW2NvbnN1bWluZ10tPmlu ZGV4Owo+Pj4gICAJCQlwZC5mbGFncyAgICAgID0gcGFnZV9kYXRhX2J1ZltpbmRleF0uZmxhZ3M7 Cj4+PiAgIAkJCXBkLnNpemUgICAgICAgPSBwYWdlX2RhdGFfYnVmW2luZGV4XS5zaXplOwo+Pj4g ICAJCQlwZC5wYWdlX2ZsYWdzID0gMDsKPj4+IEBAIC03NDIwLDEyICs3NDY2LDEyIEBAIHdyaXRl X2tkdW1wX3BhZ2VzX3BhcmFsbGVsX2N5Y2xpYyhzdHJ1Y3QgY2FjaGVfZGF0YSAqY2RfaGVhZGVy LAo+Pj4gICAJCQkgKi8KPj4+ICAgCQkJaWYgKCF3cml0ZV9jYWNoZShjZF9wYWdlLCBwYWdlX2Rh dGFfYnVmW2luZGV4XS5idWYsIHBkLnNpemUpKQo+Pj4gICAJCQkJZ290byBvdXQ7Cj4+PiAtCj4+ PiArCQkJcGFnZV9kYXRhX2J1ZltpbmRleF0udXNlZCA9IEZBTFNFOwo+Pj4gICAJCX0KPj4+IC11 bmxvY2s6Cj4+PiAtCQlwdGhyZWFkX211dGV4X3VubG9jaygmcGFnZV9kYXRhX2J1ZltpbmRleF0u bXV0ZXgpOwo+Pj4gKwkJaW5mby0+cGFnZV9mbGFnX2J1Zltjb25zdW1pbmddLT5yZWFkeSA9IEZM QUdfVU5VU0VEOwo+Pj4gKwkJaW5mby0+cGFnZV9mbGFnX2J1Zltjb25zdW1pbmddID0gaW5mby0+ cGFnZV9mbGFnX2J1Zltjb25zdW1pbmddLT5uZXh0Owo+Pj4gICAJfQo+Pj4gLQo+Pj4gK2Zpbmlz aDoKPj4+ICAgCXJldCA9IFRSVUU7Cj4+PiAgIAkvKgo+Pj4gICAJICogcHJpbnQgWzEwMCAlXQo+ Pj4gQEAgLTc0NjMsMTUgKzc1MDksOSBAQCBvdXQ6Cj4+PiAgIAkJfQo+Pj4gICAJfQo+Pj4KPj4+ IC0JaWYgKHBhZ2VfZGF0YV9idWYgIT0gTlVMTCkgewo+Pj4gLQkJZm9yIChpID0gMDsgaSA8IHBh Z2VfZGF0YV9udW07IGkrKykgewo+Pj4gLQkJCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmcGFnZV9k YXRhX2J1ZltpXS5tdXRleCk7Cj4+PiAtCQl9Cj4+PiAtCX0KPj4+IC0KPj4+ICsJc2VtX2Rlc3Ry b3koJmluZm8tPnBhZ2VfZmxhZ19idWZfc2VtKTsKPj4+ICAgCXB0aHJlYWRfcndsb2NrX2Rlc3Ry b3koJmluZm8tPnVzZW1tYXBfcndsb2NrKTsKPj4+ICAgCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgm aW5mby0+ZmlsdGVyX211dGV4KTsKPj4+IC0JcHRocmVhZF9tdXRleF9kZXN0cm95KCZpbmZvLT5j b25zdW1lZF9wZm5fbXV0ZXgpOwo+Pj4gICAJcHRocmVhZF9tdXRleF9kZXN0cm95KCZpbmZvLT5j dXJyZW50X3Bmbl9tdXRleCk7Cj4+Pgo+Pj4gICAJcmV0dXJuIHJldDsKPj4+IEBAIC03NTY0LDYg Kzc2MDQsNyBAQCB3cml0ZV9rZHVtcF9wYWdlc19jeWNsaWMoc3RydWN0IGNhY2hlX2RhdGEgKmNk X2hlYWRlciwgc3RydWN0IGNhY2hlX2RhdGEgKmNkX3BhZwo+Pj4gICAJCW51bV9kdW1wZWQrKzsK Pj4+ICAgCQlpZiAoIXJlYWRfcGZuKHBmbiwgYnVmKSkKPj4+ICAgCQkJZ290byBvdXQ7Cj4+PiAr Cj4+PiAgIAkJZmlsdGVyX2RhdGFfYnVmZmVyKGJ1ZiwgcGZuX3RvX3BhZGRyKHBmbiksIGluZm8t PnBhZ2Vfc2l6ZSk7Cj4+Pgo+Pj4gICAJCS8qCj4+PiBAQCAtMTAyMDEsNyArMTAyNDIsNiBAQCBv dXQ6Cj4+PiAgIAlyZXR1cm4gZnJlZV9zaXplOwo+Pj4gICB9Cj4+Pgo+Pj4gLQo+Pj4gICAvKgo+ Pj4gICAgKiBDaG9vc2UgdGhlIGxlc3MgdmFsdWUgb2YgdGhlIHRocmVlIGJlbG93IGFzIHRoZSBz aXplIG9mIGN5Y2xpYyBidWZmZXIuCj4+PiAgICAqICAtIHRoZSBzaXplIGVub3VnaCBmb3Igc3Rv cmluZyB0aGUgMXN0IG9yIDJuZCBiaXRtYXAgZm9yIHRoZSB3aG9sZSBvZiB2bWNvcmUKPj4+IEBA IC0xMDIyMyw2ICsxMDI2MywyMCBAQCBjYWxjdWxhdGVfY3ljbGljX2J1ZmZlcl9zaXplKHZvaWQp IHsKPj4+ICAgCSAqICBmcmVlIG1lbW9yeSBmb3Igc2FmZXR5Lgo+Pj4gICAJICovCj4+PiAgIAls aW1pdF9zaXplID0gZ2V0X2ZyZWVfbWVtb3J5X3NpemUoKSAqIDAuNjsKPj4+ICsKPj4+ICsJLyoK Pj4+ICsJICogUmVjYWxjdWxhdGUgdGhlIGxpbWl0X3NpemUgYWNjb3JkaW5nIHRvIG51bV90aHJl YWRzLgo+Pj4gKwkgKiBBbmQgcmVzZXQgbnVtX3RocmVhZHMgaWYgdGhlcmUgaXMgbm90IGVub3Vn aCBtZW1vcnkuCj4+PiArCSAqLwo+Pj4gKwlpZiAobGltaXRfc2l6ZSAtIG1heGltdW1fc2l6ZSA8 IFRIUkVBRF9SRUdJT04gKiBpbmZvLT5udW1fdGhyZWFkcykgewo+Pj4gKwkJTVNHKCJUaGVyZSBp c24ndCBlbm91Z2ggbWVtb3J5IGZvciAlZCB0aHJlYWRzLlxuIiwgaW5mby0+bnVtX3RocmVhZHMp Owo+Pj4gKwo+Pj4gKwkJaW5mby0+bnVtX3RocmVhZHMgPSBNQVgoMCwgbGltaXRfc2l6ZSAtIG1h eGltdW1fc2l6ZSkgLyBUSFJFQURfUkVHSU9OOwo+Pj4gKwkJTVNHKCItLW51bV90aHJlYWRzIGlz IHNldCB0byAlZC5cbiIsIGluZm8tPm51bV90aHJlYWRzKTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwls aW1pdF9zaXplID0gbGltaXRfc2l6ZSAtIFRIUkVBRF9SRUdJT04gKiBpbmZvLT5udW1fdGhyZWFk czsKPj4+ICsKPj4+ICAgCS8qIFRyeSB0byBrZWVwIGJvdGggMXN0IGFuZCAybmQgYml0bWFwIGF0 IHRoZSBzYW1lIHRpbWUuICovCj4+PiAgIAliaXRtYXBfc2l6ZSA9IGluZm8tPm1heF9tYXBuciAq IDIgLyBCSVRQRVJCWVRFOwo+Pj4KPj4+IGRpZmYgLS1naXQgYS9tYWtlZHVtcGZpbGUuaCBiL21h a2VkdW1wZmlsZS5oCj4+PiBpbmRleCBlMGI1YmJmLi4zMjJkMzFiIDEwMDY0NAo+Pj4gLS0tIGEv bWFrZWR1bXBmaWxlLmgKPj4+ICsrKyBiL21ha2VkdW1wZmlsZS5oCj4+PiBAQCAtNDQsNiArNDQs NyBAQAo+Pj4gICAjaW5jbHVkZSAicHJpbnRfaW5mby5oIgo+Pj4gICAjaW5jbHVkZSAic2FkdW1w X21vZC5oIgo+Pj4gICAjaW5jbHVkZSA8cHRocmVhZC5oPgo+Pj4gKyNpbmNsdWRlIDxzZW1hcGhv cmUuaD4KPj4+Cj4+PiAgIC8qCj4+PiAgICAqIFJlc3VsdCBvZiBjb21tYW5kCj4+PiBAQCAtOTc0 LDEwICs5NzUsMTEgQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVsb25nbG9uZzsK Pj4+ICAgICogZm9yIHBhcmFsbGVsIHByb2Nlc3MKPj4+ICAgICovCj4+Pgo+Pj4gLSNkZWZpbmUg UEFHRV9EQVRBX05VTQkoNTApCj4+PiArI2RlZmluZSBQQUdFX0ZMQUdfTlVNCSgyMCkKPj4+ICsj ZGVmaW5lIFBBR0VfREFUQV9OVU0JKDUpCj4+PiAgICNkZWZpbmUgV0FJVF9USU1FCSg2MCAqIDEw KQo+Pj4gICAjZGVmaW5lIFBUSFJFQURfRkFJTAkoKHZvaWQgKiktMikKPj4+IC0jZGVmaW5lIE5V TV9CVUZGRVJTCSg1MCkKPj4+ICsjZGVmaW5lIFRIUkVBRF9SRUdJT04JKDIwMCAqIDEwMjQpCj4+ Pgo+Pj4gICBzdHJ1Y3QgbW1hcF9jYWNoZSB7Cj4+PiAgIAljaGFyCSptbWFwX2J1ZjsKPj4+IEBA IC05ODUsMjggKzk4NywzMyBAQCBzdHJ1Y3QgbW1hcF9jYWNoZSB7Cj4+PiAgIAlvZmZfdCAgIG1t YXBfZW5kX29mZnNldDsKPj4+ICAgfTsKPj4+Cj4+PiArZW51bSB7Cj4+PiArCUZMQUdfVU5VU0VE LAo+Pj4gKwlGTEFHX1JFQURZLAo+Pj4gKwlGTEFHX0ZJTExJTkcKPj4+ICt9Owo+Pj4gK3N0cnVj dCBwYWdlX2ZsYWcgewo+Pj4gKwltZGZfcGZuX3QgcGZuOwo+Pj4gKwljaGFyIHplcm87Cj4+PiAr CWNoYXIgcmVhZHk7Cj4+PiArCXNob3J0IGluZGV4Owo+Pj4gKwlzdHJ1Y3QgcGFnZV9mbGFnICpu ZXh0Owo+Pj4gK307Cj4+PiArCj4+PiAgIHN0cnVjdCBwYWdlX2RhdGEKPj4+ICAgewo+Pj4gLQlt ZGZfcGZuX3QgcGZuOwo+Pj4gLQlpbnQgZHVtcGFibGU7Cj4+PiAtCWludCB6ZXJvOwo+Pj4gLQl1 bnNpZ25lZCBpbnQgZmxhZ3M7Cj4+PiAgIAlsb25nIHNpemU7Cj4+PiAgIAl1bnNpZ25lZCBjaGFy ICpidWY7Cj4+PiAtCXB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKPj4+IC0JLyoKPj4+IC0JICogd2hl dGhlciB0aGUgcGFnZV9kYXRhIGlzIHJlYWR5IHRvIGJlIGNvbnN1bWVkCj4+PiAtCSAqLwo+Pj4g LQlpbnQgcmVhZHk7Cj4+PiArCWludCBmbGFnczsKPj4+ICsJaW50IHVzZWQ7Cj4+PiAgIH07Cj4+ Pgo+Pj4gICBzdHJ1Y3QgdGhyZWFkX2FyZ3Mgewo+Pj4gICAJaW50IHRocmVhZF9udW07Cj4+PiAg IAl1bnNpZ25lZCBsb25nIGxlbl9idWZfb3V0Owo+Pj4gLQltZGZfcGZuX3Qgc3RhcnRfcGZuLCBl bmRfcGZuOwo+Pj4gLQlpbnQgcGFnZV9kYXRhX251bTsKPj4+ICAgCXN0cnVjdCBjeWNsZSAqY3lj bGU7Cj4+PiAgIAlzdHJ1Y3QgcGFnZV9kYXRhICpwYWdlX2RhdGFfYnVmOwo+Pj4gKwlzdHJ1Y3Qg cGFnZV9mbGFnICpwYWdlX2ZsYWdfYnVmOwo+Pj4gICB9Owo+Pj4KPj4+ICAgLyoKPj4+IEBAIC0x Mjk1LDExICsxMzAyLDEyIEBAIHN0cnVjdCBEdW1wSW5mbyB7Cj4+PiAgIAlwdGhyZWFkX3QgKip0 aHJlYWRzOwo+Pj4gICAJc3RydWN0IHRocmVhZF9hcmdzICprZHVtcF90aHJlYWRfYXJnczsKPj4+ ICAgCXN0cnVjdCBwYWdlX2RhdGEgKnBhZ2VfZGF0YV9idWY7Cj4+PiArCXN0cnVjdCBwYWdlX2Zs YWcgKipwYWdlX2ZsYWdfYnVmOwo+Pj4gKwlzZW1fdCBwYWdlX2ZsYWdfYnVmX3NlbTsKPj4+ICAg CXB0aHJlYWRfcndsb2NrX3QgdXNlbW1hcF9yd2xvY2s7Cj4+PiAgIAltZGZfcGZuX3QgY3VycmVu dF9wZm47Cj4+PiAgIAlwdGhyZWFkX211dGV4X3QgY3VycmVudF9wZm5fbXV0ZXg7Cj4+PiAtCW1k Zl9wZm5fdCBjb25zdW1lZF9wZm47Cj4+PiAtCXB0aHJlYWRfbXV0ZXhfdCBjb25zdW1lZF9wZm5f bXV0ZXg7Cj4+PiArCXB0aHJlYWRfbXV0ZXhfdCBwYWdlX2RhdGFfbXV0ZXg7Cj4+PiAgIAlwdGhy ZWFkX211dGV4X3QgZmlsdGVyX211dGV4Owo+Pj4gICB9Owo+Pj4gICBleHRlcm4gc3RydWN0IER1 bXBJbmZvCQkqaW5mbzsKPj4+Cj4+Cj4+Cj4+Cj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCj4+IGtleGVjIG1haWxpbmcgbGlzdAo+PiBrZXhlY0BsaXN0 cy5pbmZyYWRlYWQub3JnCj4+IGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8va2V4ZWMKCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmtleGVjIG1haWxpbmcgbGlzdAprZXhlY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8va2V4ZWMK