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 1ag7Kb-0000gL-4c for kexec@lists.infradead.org; Wed, 16 Mar 2016 09:01:37 +0000 Message-ID: <56E92076.3060204@cn.fujitsu.com> Date: Wed, 16 Mar 2016 16:59:34 +0800 From: =?UTF-8?B?Ilpob3UsIFdlbmppYW4v5ZGo5paH5YmRIg==?= MIME-Version: 1.0 Subject: Re: [PATCH v4] Improve the performance of --num-threads -d 31 References: <1457483231-2092-1-git-send-email-zhouwj-fnst@cn.fujitsu.com> <20160315063430.GA12981@dhcp-128-25.nay.redhat.com> <56E7B5D9.30303@cn.fujitsu.com> <20160315093316.GA13722@dhcp-128-25.nay.redhat.com> <56E8BD1D.5010209@cn.fujitsu.com> <20160316080422.GA8137@dhcp-128-25.nay.redhat.com> <56E918CC.3010409@cn.fujitsu.com> In-Reply-To: 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: kexec@lists.infradead.org SGkgTWluZmVpLAoKVGhhbmtzIGEgbG90IGZvciB5b3VyIGluZm9ybWF0aW9uIQoKQWNjb3JkaW5n IHRvIHlvdXIgZGVzY3JpcHRpb24gYW5kIHN0cmFjZSBsb2csCml0IHNlZW1zIHRoZXJlIGlzIHNv bWV0aGluZyB3cm9uZyBpbiBpbml0aWFsX2Zvcl9wYXJhbGxlbCgpLgoKSSByZXZpZXdlZCB0aGUg cmVsZXZhbnQgY29kZSwgYnV0IGhhdmVuJ3QgZ290IGFueSBpZGVhLgpBbmQgSSBoYXZlIG9uZSBt b3JlIHF1ZXN0aW9uLgpEb2VzIGl0IGhhcHBlbiBldmVyeSB0aW1lIHdpdGggdGhlIHNhbWUgY29t bWFuZD8KCi0tIApUaGFua3MKWmhvdQoKT24gMDMvMTYvMjAxNiAwNDozMiBQTSwgTWluZmVpIEh1 YW5nIHdyb3RlOgo+Cj4+IE9uIE1hciAxNiwgMjAxNiwgYXQgMTY6MjYsIFpob3UsIFdlbmppYW4v 5ZGo5paH5YmRIDx6aG91d2otZm5zdEBjbi5mdWppdHN1LmNvbT4gd3JvdGU6Cj4+Cj4+IE9uIDAz LzE2LzIwMTYgMDQ6MDQgUE0sIE1pbmZlaSBIdWFuZyB3cm90ZToKPj4+IE9uIDAzLzE2LzE2IGF0 IDA5OjU1YW0sICJaaG91LCBXZW5qaWFuL+WRqOaWh+WJkSIgd3JvdGU6Cj4+Pj4gSGkgTWluZmVp LAo+Pj4+Cj4+Pj4gSSBoYXZlIHNvbWUgcXVlc3Rpb25zLgo+Pj4+Cj4+Pj4gSWYgdGhlIHZhbHVl IG9mIG51bS10aHJlYWRzIGlzIDgsCj4+Pj4gMS4gSG93IG11Y2ggaXMgdGhlIGZyZWUgbWVtb3J5 IGJlZm9yZSBydW5uaW5nIG1ha2VkdW1wZmlsZSBmYWlsZWQ/Cj4+Pgo+Pj4gSG1tLCB0aGlzIG1h Y2hpbmUgaXMgcmVzZXJ2ZWQgYnkgb3RoZXIsIEkgaGF2ZSBubyBhY2Nlc3MgdG8gdGFrZSBhIGxv b2sKPj4+IGFib3V0IHJlc2VydmVkIG1lbW9yeS4gQWxsIG9mIHRoZSBjb25maWd1cmF0aW9uIGFy ZSBzZXQgYnkgZGVmYXVsdC4KPj4+IE1heWJlIGl0J3MgYWJvdXQgNDIwTS4KPj4+Cj4+Cj4+IEkg ZG9uJ3QgbWVhbiB0aGUgcmVzZXJ2ZWQgbWVtb3J5Lgo+PiBJIG1lYW4gdGhlIGZyZWUgbWVtb3J5 Lgo+Cj4gU29ycnksIHRoZXJlIGlzIG5vIHJlY29yZCBhYm91dCBzdWNoIGluZm8uCj4KPj4KPj4+ Pgo+Pj4+IDIuIEhvdyBtdWNoIGlzIHRoZSBmcmVlIG1lbW9yeSBiZWZvcmUgcnVubmluZyBtYWtl ZHVtcGZpbGUgc3VjY2Vzcz8KPj4+Cj4+PiBJIGRvbid0IG1lbXRpb24gdGhpcyBkdXJpbmcgdGVz dGluZyBpdC4KPj4+Cj4+Pj4KPj4+Pgo+Pj4+IEFuZCB0aGUgZm9sbG93aW5nIHJlc3VsdCBpcyB2 ZXJ5IHN0cmFuZ2UgaWYgYWxsIGNhY2hlIGhhcyBiZWVuIGRyb3BwZWQuCj4+Pj4gbWFrZWR1bXBm aWxlIC0tbnVtLXRocmVhZHMgMzAgLWQgMzEKPj4+PiAgICAgIHJlYWwgICAgMG0wLjAwNnMKPj4+ PiAgICAgIHVzZXIgICAgMG0wLjAwMnMKPj4+PiAgICAgIHN5cyAwbTAuMDA0cwo+Pj4KPj4+IEZv ciB0aGlzIGNhc2UsIG1ha2VkdW1wZmlsZSBmYWlscyB0byBkdW1wIHZtY29yZSB3aXRoIG9wdGlv bgo+Pj4gLS1udW0tdGhyZWFkcyAzMC4KPj4+Cj4+PiBJIHN1c3BlY3QgdGhlIGZvbGxvd2luZyBv dXRwdXQgZnJvbSBzdHJhY2UuCj4+Pgo+Pj4+PiAxMzEzIG1tYXAoTlVMTCwgMTg0NDY3NDQwNDg1 ODQzODg2MDgsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VT LCAtMSwgMCkgPSAtMSBFTk9NRU0gKENhbm5vdCBhbGxvY2F0ZSBtZW1vcnkpCj4+Pj4+IDEzMTQg bW1hcChOVUxMLCAxODQ0Njc0NDA0ODU4NDUyMzc3NiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1B UF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKSA9IC0xIEVOT01FTSAoQ2Fubm90IGFsbG9j YXRlIG1lbW9yeSkKPj4+Pj4gMTMxNSBtbWFwKE5VTEwsIDEzNDIxNzcyOCwgUFJPVF9OT05FLCBN QVBfUFJJVkFURXxNQVBfQU5PTllNT1VTfE1BUF9OT1JFU0VSVkUsIC0xLCAwKSA9IDB4N2Y1OTI3 YmIyMDAwCj4+Cj4+IEkgc2VlLgo+Pgo+PiBJcyB0aGVyZSBhbnkgZXJyb3IgbWVzc2FnZXM/Cj4+ IFN1Y2ggYXMgIm91dCBvZiBtZW1vcnnigJ0/Cj4KPiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyB0 b28gbGFyZ2UgMTg0NDY3NDQwNDg1ODQzODg2MDg/Cj4KPj4KPj4gSG93IGFib3V0IGl0IHdpdGhv dXQgdGhlIHBhdGNoPwo+Cj4gSXQgd29ya3Mgd2VsbCB3aXRob3V0IHRoaXMgcGF0Y2ggZnJvbSBt eSB0ZXN0Lgo+Cj4+Cj4+IFdpbGwgaXQgb2NjdXIgaWYgZG91YmxlIHRoZSByZXNlcnZlZCBtZW1v cnk/Cj4KPiBOby4gSSBqdXN0IHRlc3RlZCBhbGwgb2YgdGhlIHRlc3QgY2FzZXMuCj4KPj4KPj4g QlRXLCBjYW4gaXQgYmUgcmVwcm9kdWNlZCBpbiBvdGhlciBtYWNoaW5lcz8KPgo+IE5vLCBJIGhh dmUgb25seSBvbmUgd2l0aCBzdWNoIGxhcmdlIG1lbW9yeS4KPgo+PiBJIGhhdmVuJ3QgZ2V0IHN1 Y2ggcmVzdWx0IGluIG15IG1hY2hpbmUgeWV0Lgo+Pgo+PiBJbiBteSBtYWNoaW5lLCB0aGUgbnVt YmVyIG9mIGZyZWUgbWVtb3J5IHdpbGwgbm90IGFsd2F5cyB0aGUgc2FtZQo+PiBhZnRlciBleGVj dXRpbmcgbWFrZWR1bXBmaWxlIGVhY2ggdGltZS4KPj4gU28gaWYgdGhlcmUgaXMgbm90IGVub3Vn aCBtZW1vcnksIG1ha2VkdW1wZmlsZSB3aWxsIGZhaWwgc29tZXRpbWVzLgo+PiBCdXQgSSdtIG5v dCBzdXJlIHdoZXRoZXIgdGhleSBhcmUgdGhlIHNhbWUgaXNzdWUuCj4+Cj4+IC0tCj4+IFRoYW5r cwo+PiBaaG91Cj4+Cj4+Pgo+Pj4gVGhhbmtzCj4+PiBNaW5mZWkKPj4+Cj4+Pj4KPj4+PiAtLQo+ Pj4+IFRoYW5rcwo+Pj4+IFpob3UKPj4+Pgo+Pj4+IE9uIDAzLzE1LzIwMTYgMDU6MzMgUE0sIE1p bmZlaSBIdWFuZyB3cm90ZToKPj4+Pj4gT24gMDMvMTUvMTYgYXQgMDM6MTJwbSwgIlpob3UsIFdl bmppYW4v5ZGo5paH5YmRIiB3cm90ZToKPj4+Pj4+IEhlbGxvIE1pbmZlaSwKPj4+Pj4+Cj4+Pj4+ PiBJIGd1ZXNzIHRoZSByZXN1bHQgaXMgYWZmZWN0ZWQgYnkgdGhlIGNhY2hlcy4KPj4+Pj4+IEhv dyBhYm91dCBleGVjdXRpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGJlZm9yZSBydW5uaW5nIG1h a2VkdW1wZmlsZSBlYWNoIHRpbWU/Cj4+Pj4+PiAjIGVjaG8gMyA+IC9wcm9jL3N5cy92bS9kcm9w X2NhY2hlcwo+Pj4+Pgo+Pj4+PiBIaSwgWmhvdS4KPj4+Pj4KPj4+Pj4gU2VlbSB0aGVyZSBpcyBh IGJ1ZyBkdXJpbmcgZHVtcGluZyB2bWNvcmUgd2l0aCBvcHRpb24gbnVtLXRocmVhZHMuCj4+Pj4+ Cj4+Pj4+IDEzMDcgb3BlbigiL3Byb2MvbWVtaW5mbyIsIE9fUkRPTkxZKSAgICAgICAgID0gNAo+ Pj4+PiAxMzA4IGZzdGF0KDQsIHtzdF9tb2RlPVNfSUZSRUd8MDQ0NCwgc3Rfc2l6ZT0wLCAuLi59 KSA9IDAKPj4+Pj4gMTMwOSBtbWFwKE5VTEwsIDQwOTYsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBN QVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCkgPSAweDdmNTkzMjJkMzAwMAo+Pj4+PiAx MzEwIHJlYWQoNCwgIk1lbVRvdGFsOiAgICAgICAgIDM4NTQ1MiBrQlxuTWVtRiIuLi4sIDEwMjQp ID0gMTAyNAo+Pj4+PiAxMzExIGNsb3NlKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA9IDAKPj4+Pj4gMTMxMiBtdW5tYXAoMHg3ZjU5MzIyZDMwMDAsIDQwOTYpICAgICAgICAgICAg PSAwCj4+Pj4+IDEzMTMgbW1hcChOVUxMLCAxODQ0Njc0NDA0ODU4NDM4ODYwOCwgUFJPVF9SRUFE fFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKSA9IC0xIEVOT01F TSAoQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSkKPj4+Pj4gMTMxNCBtbWFwKE5VTEwsIDE4NDQ2NzQ0 MDQ4NTg0NTIzNzc2LCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEV8TUFQX0FOT05Z TU9VUywgLTEsIDApID0gLTEgRU5PTUVNIChDYW5ub3QgYWxsb2NhdGUgbWVtb3J5KQo+Pj4+PiAx MzE1IG1tYXAoTlVMTCwgMTM0MjE3NzI4LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFfE1BUF9BTk9O WU1PVVN8TUFQX05PUkVTRVJWRSwgLTEsIDApID0gMHg3ZjU5MjdiYjIwMDAKPj4+Pj4gMTMxNiBt dW5tYXAoMHg3ZjU5MjdiYjIwMDAsIDQ1MTM3OTIpICAgICAgICAgPSAwCj4+Pj4+IDEzMTcgbXVu bWFwKDB4N2Y1OTJjMDAwMDAwLCA2MjU5NTA3MikgICAgICAgID0gMAo+Pj4+PiAxMzE4IG1wcm90 ZWN0KDB4N2Y1OTI4MDAwMDAwLCAxMzUxNjgsIFBST1RfUkVBRHxQUk9UX1dSSVRFKSA9IDAKPj4+ Pj4gMTMxOSBtbWFwKE5VTEwsIDE4NDQ2NzQ0MDQ4NTg0Mzg4NjA4LCBQUk9UX1JFQUR8UFJPVF9X UklURSwgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgLTEsIDApID0gLTEgRU5PTUVNIChDYW5u b3QgYWxsb2NhdGUgbWVtb3J5KQo+Pj4+Pgo+Pj4+PiBUaGFua3MKPj4+Pj4gTWluZmVpCj4+Pj4+ Cj4+Pj4+Pgo+Pj4+Pj4gLS0KPj4+Pj4+IFRoYW5rcwo+Pj4+Pj4gWmhvdQo+Pj4+Pj4KPj4+Pj4+ IE9uIDAzLzE1LzIwMTYgMDI6MzQgUE0sIE1pbmZlaSBIdWFuZyB3cm90ZToKPj4+Pj4+PiBIaSwg WmhvdS4KPj4+Pj4+Pgo+Pj4+Pj4+IEkgaGF2ZSBhcHBsaWVkIHRoaXMgcGF0Y2ggYmFzZSBvbiAx LjUuOS4gVGhlcmUgYXJlIHNldmVyYWwgdGVzdGNhc2VzIEkKPj4+Pj4+PiBoYXZlIHRlc3RlZC4K Pj4+Pj4+Pgo+Pj4+Pj4+IC0gbWFrZWR1bXBmaWxlIC0tbnVtLXRocmVhZHMgNjQgLWQgMzEKPj4+ Pj4+PiAgICAgIHJlYWwgICAgMG0wLjAxMHMKPj4+Pj4+PiAgICAgIHVzZXIgICAgMG0wLjAwMnMK Pj4+Pj4+PiAgICAgIHN5cyAwbTAuMDA5cwo+Pj4+Pj4+Cj4+Pj4+Pj4gLSBtYWtlZHVtcGZpbGUg LS1udW0tdGhyZWFkcyAzMSAtZCAzMQo+Pj4+Pj4+ICAgICAgcmVhbCAgICAybTQwLjkxNXMKPj4+ Pj4+PiAgICAgIHVzZXIgICAgMTBtNTAuOTAwcwo+Pj4+Pj4+ICAgICAgc3lzIDIzbTkuNjY0cwo+ Pj4+Pj4+Cj4+Pj4+Pj4gbWFrZWR1bXBmaWxlIC0tbnVtLXRocmVhZHMgMzAgLWQgMzEKPj4+Pj4+ PiAgICAgIHJlYWwgICAgMG0wLjAwNnMKPj4+Pj4+PiAgICAgIHVzZXIgICAgMG0wLjAwMnMKPj4+ Pj4+PiAgICAgIHN5cyAwbTAuMDA0cwo+Pj4+Pj4+Cj4+Pj4+Pj4gbWFrZWR1bXBmaWxlIC0tbnVt LXRocmVhZHMgMzIgLWQgMzEKPj4+Pj4+PiAgICAgIHJlYWwgICAgMG0wLjAwN3MKPj4+Pj4+PiAg ICAgIHVzZXIgICAgMG0wLjAwMnMKPj4+Pj4+PiAgICAgIHN5cyAwbTAuMDA1cwo+Pj4+Pj4+Cj4+ Pj4+Pj4gLSBtYWtlZHVtcGZpbGUgLS1udW0tdGhyZWFkcyA4IC1kIDMxCj4+Pj4+Pj4gICAgICBy ZWFsICAgIDJtMzIuNjkycwo+Pj4+Pj4+ICAgICAgdXNlciAgICA3bTQuNjMwcwo+Pj4+Pj4+ICAg ICAgc3lzIDJtMC4zNjlzCj4+Pj4+Pj4KPj4+Pj4+PiAtIG1ha2VkdW1wZmlsZSAtLW51bS10aHJl YWRzIDEgLWQgMzEKPj4+Pj4+PiAgICAgIHJlYWwgICAgNG00Mi40MjNzCj4+Pj4+Pj4gICAgICB1 c2VyICAgIDdtMjcuMTUzcwo+Pj4+Pj4+ICAgICAgc3lzIDBtMjIuNDkwcwo+Pj4+Pj4+Cj4+Pj4+ Pj4gLSBtYWtlZHVtcGZpbGUub3JpZyAtZCAzMQo+Pj4+Pj4+ICAgICAgcmVhbCAgICA0bTEuMjk3 cwo+Pj4+Pj4+ICAgICAgdXNlciAgICAzbTM5LjY5NnMKPj4+Pj4+PiAgICAgIHN5cyAwbTE1LjIw MHMKPj4+Pj4+Pgo+Pj4+Pj4+IFRoaXMgcGF0Y2ggaGFzIGEgaHVnZSBpbmNyZW1lbnQgdG8gdGhl IGZpbHRlciBwZXJmb3JtYW5jZSB1bmRlciAzMS4gQnV0Cj4+Pj4+Pj4gaXQgaXMgbm90IHN0YWJs ZSwgc2luY2UgbWFrZWR1bXBmaWxlIGZhaWxzIHRvIGR1bXAgdm1jb3JlIGludGVybWl0dGVudGx5 Lgo+Pj4+Pj4+IFlvdSBjYW4gZmluZCB0aGUgYWJvdmUgdGVzdCByZXN1bHQsIG1ha2VkdW1wZmls ZSBmYWlscyB0byBkdW1wIHZtY29yZQo+Pj4+Pj4+IHdpdGggb3B0aW9uIC0tbnVtLXRocmVhZHMg NjQsIGFsc28gaXQgbWF5IG9jY3VyIHdpdGggb3B0aW9uCj4+Pj4+Pj4gLS1udW1iZXItdGhyZWFk cyA4Lgo+Pj4+Pj4+Cj4+Pj4+Pj4gVGhhbmtzCj4+Pj4+Pj4gTWluZmVpCj4+Pj4+Pj4KPj4+Pj4+ PiBPbiAwMy8wOS8xNiBhdCAwODoyN2FtLCBaaG91IFdlbmppYW4gd3JvdGU6Cj4+Pj4+Pj4+IHY0 Ogo+Pj4+Pj4+PiAgICAgICAgICAxLiBmaXggYSBidWcgY2F1c2VkIGJ5IHRoZSBsb2dpYwo+Pj4+ Pj4+PiB2MzoKPj4+Pj4+Pj4gICAgICAgICAgMS4gcmVtb3ZlIHNvbWUgdW51c2VkIHZhcmlhYmxl cwo+Pj4+Pj4+PiAgICAgICAgICAyLiBmaXggYSBidWcgY2F1c2VkIGJ5IHRoZSB3cm9uZyBsb2dp Ywo+Pj4+Pj4+PiAgICAgICAgICAzLiBmaXggYSBidWcgY2F1c2VkIGJ5IG9wdGltaXNpbmcKPj4+ Pj4+Pj4gICAgICAgICAgNC4gaW1wcm92ZSBtb3JlIHBlcmZvcm1hbmNlIGJ5IHVzaW5nIE1pbm9y dSBVc3VpJ3MgY29kZQo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBtdWx0aS10aHJlYWRzIGltcGxlbWVudGF0 aW9uIHdpbGwgaW50cm9kdWNlIGV4dHJhIGNvc3Qgd2hlbiBoYW5kbGluZwo+Pj4+Pj4+PiBlYWNo IHBhZ2UuIFRoZSBvcmlnaW4gaW1wbGVtZW50YXRpb24gd2lsbCBhbHNvIGRvIHRoZSBleHRyYSB3 b3JrIGZvcgo+Pj4+Pj4+PiBmaWx0ZXJlZCBwYWdlcy4gU28gdGhlcmUgaXMgYSBiaWcgcGVyZm9y bWFuY2UgZGVncmFkYXRpb24gaW4KPj4+Pj4+Pj4gLS1udW0tdGhyZWFkcyAtZCAzMS4KPj4+Pj4+ Pj4gVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiB3b24ndCBkbyB0aGUgZXh0cmEgd29yayBmb3IgZmls dGVyZWQgcGFnZXMgYW55Cj4+Pj4+Pj4+IG1vcmUuIFNvIHRoZSBwZXJmb3JtYW5jZSBvZiAtZCAz MSBpcyBjbG9zZSB0byB0aGF0IG9mIHNlcmlhbCBwcm9jZXNzaW5nLgo+Pj4+Pj4+Pgo+Pj4+Pj4+ PiBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGlzIGp1c3QgbGlrZSB0aGUgZm9sbG93aW5nOgo+Pj4+ Pj4+PiAgICAgICAgICAqIFRoZSBiYXNpYyBpZGVhIGlzIHByb2R1Y2VyIHByb2R1Y2luZyBwYWdl IGFuZCBjb25zdW1lciB3cml0aW5nIHBhZ2UuCj4+Pj4+Pj4+ICAgICAgICAgICogRWFjaCBwcm9k dWNlciBoYXZlIGEgcGFnZV9mbGFnX2J1ZiBsaXN0IHdoaWNoIGlzIHVzZWQgZm9yIHN0b3JpbmcK Pj4+Pj4+Pj4gICAgICAgICAgICBwYWdlJ3MgZGVzY3JpcHRpb24uCj4+Pj4+Pj4+ICAgICAgICAg ICogVGhlIHNpemUgb2YgcGFnZV9mbGFnX2J1ZiBpcyBsaXR0bGUgc28gaXQgd29uJ3QgdGFrZSB0 b28gbXVjaCBtZW1vcnkuCj4+Pj4+Pj4+ICAgICAgICAgICogQW5kIGFsbCBwcm9kdWNlcnMgd2ls bCBzaGFyZSBhIHBhZ2VfZGF0YV9idWYgYXJyYXkgd2hpY2ggaXMKPj4+Pj4+Pj4gICAgICAgICAg ICB1c2VkIGZvciBzdG9yaW5nIHBhZ2UncyBjb21wcmVzc2VkIGRhdGEuCj4+Pj4+Pj4+ICAgICAg ICAgICogVGhlIG1haW4gdGhyZWFkIGlzIHRoZSBjb25zdW1lci4gSXQgd2lsbCBmaW5kIHRoZSBu ZXh0IHBmbiBhbmQgd3JpdGUKPj4+Pj4+Pj4gICAgICAgICAgICBpdCBpbnRvIGZpbGUuCj4+Pj4+ Pj4+ICAgICAgICAgICogVGhlIG5leHQgcGZuIGlzIHNtYWxsZXN0IHBmbiBpbiBhbGwgcGFnZV9m bGFnX2J1Zi4KPj4+Pj4+Pj4KPj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogTWlub3J1IFVzdWkgPG1p bi11c3VpQHRpLmpwLm5lYy5jb20+Cj4+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IFpob3UgV2Vuamlh biA8emhvdXdqLWZuc3RAY24uZnVqaXRzdS5jb20+Cj4+Pj4+Pj4+IC0tLQo+Pj4+Pj4+PiAgIG1h a2VkdW1wZmlsZS5jIHwgMjk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4+Pj4+PiAgIG1ha2VkdW1wZmlsZS5oIHwgIDM1ICsrKyst LS0KPj4+Pj4+Pj4gICAyIGZpbGVzIGNoYW5nZWQsIDIwMiBpbnNlcnRpb25zKCspLCAxMzEgZGVs ZXRpb25zKC0pCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9tYWtlZHVtcGZpbGUuYyBi L21ha2VkdW1wZmlsZS5jCj4+Pj4+Pj4+IGluZGV4IGZhMGI3NzkuLjJiMDg2NGEgMTAwNjQ0Cj4+ Pj4+Pj4+IC0tLSBhL21ha2VkdW1wZmlsZS5jCj4+Pj4+Pj4+ICsrKyBiL21ha2VkdW1wZmlsZS5j Cj4+Pj4+Pj4+IEBAIC0zNDgzLDcgKzM0ODMsOCBAQCBpbml0aWFsX2Zvcl9wYXJhbGxlbCgpCj4+ Pj4+Pj4+ICAgCXVuc2lnbmVkIGxvbmcgcGFnZV9kYXRhX2J1Zl9zaXplOwo+Pj4+Pj4+PiAgIAl1 bnNpZ25lZCBsb25nIGxpbWl0X3NpemU7Cj4+Pj4+Pj4+ICAgCWludCBwYWdlX2RhdGFfbnVtOwo+ Pj4+Pj4+PiAtCWludCBpOwo+Pj4+Pj4+PiArCXN0cnVjdCBwYWdlX2ZsYWcgKmN1cnJlbnQ7Cj4+ Pj4+Pj4+ICsJaW50IGksIGo7Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+ICAgCWxlbl9idWZfb3V0ID0gY2Fs Y3VsYXRlX2xlbl9idWZfb3V0KGluZm8tPnBhZ2Vfc2l6ZSk7Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IEBA IC0zNTYwLDEwICszNTYxLDE2IEBAIGluaXRpYWxfZm9yX3BhcmFsbGVsKCkKPj4+Pj4+Pj4KPj4+ Pj4+Pj4gICAJbGltaXRfc2l6ZSA9IChnZXRfZnJlZV9tZW1vcnlfc2l6ZSgpCj4+Pj4+Pj4+ICAg CQkgICAgICAtIE1BUF9SRUdJT04gKiBpbmZvLT5udW1fdGhyZWFkcykgKiAwLjY7Cj4+Pj4+Pj4+ ICsJaWYgKGxpbWl0X3NpemUgPCAwKSB7Cj4+Pj4+Pj4+ICsJCU1TRygiRnJlZSBtZW1vcnkgaXMg bm90IGVub3VnaCBmb3IgbXVsdGktdGhyZWFkc1xuIik7Cj4+Pj4+Pj4+ICsJCXJldHVybiBGQUxT RTsKPj4+Pj4+Pj4gKwl9Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+ICAgCXBhZ2VfZGF0YV9udW0gPSBsaW1p dF9zaXplIC8gcGFnZV9kYXRhX2J1Zl9zaXplOwo+Pj4+Pj4+PiArCWluZm8tPm51bV9idWZmZXJz ID0gMyAqIGluZm8tPm51bV90aHJlYWRzOwo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAtCWluZm8tPm51bV9i dWZmZXJzID0gTUlOKE5VTV9CVUZGRVJTLCBwYWdlX2RhdGFfbnVtKTsKPj4+Pj4+Pj4gKwlpbmZv LT5udW1fYnVmZmVycyA9IE1BWChpbmZvLT5udW1fYnVmZmVycywgTlVNX0JVRkZFUlMpOwo+Pj4+ Pj4+PiArCWluZm8tPm51bV9idWZmZXJzID0gTUlOKGluZm8tPm51bV9idWZmZXJzLCBwYWdlX2Rh dGFfbnVtKTsKPj4+Pj4+Pj4KPj4+Pj4+Pj4gICAJREVCVUdfTVNHKCJOdW1iZXIgb2Ygc3RydWN0 IHBhZ2VfZGF0YSBmb3IgcHJvZHVjZS9jb25zdW1lOiAlZFxuIiwKPj4+Pj4+Pj4gICAJCQlpbmZv LT5udW1fYnVmZmVycyk7Cj4+Pj4+Pj4+IEBAIC0zNTg4LDYgKzM1OTUsMzYgQEAgaW5pdGlhbF9m b3JfcGFyYWxsZWwoKQo+Pj4+Pj4+PiAgIAl9Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+ICAgCS8qCj4+Pj4+ Pj4+ICsJICogaW5pdGlhbCBwYWdlX2ZsYWcgZm9yIGVhY2ggdGhyZWFkCj4+Pj4+Pj4+ICsJICov Cj4+Pj4+Pj4+ICsJaWYgKChpbmZvLT5wYWdlX2ZsYWdfYnVmID0gbWFsbG9jKHNpemVvZih2b2lk ICopICogaW5mby0+bnVtX3RocmVhZHMpKQo+Pj4+Pj4+PiArCSAgICA9PSBOVUxMKSB7Cj4+Pj4+ Pj4+ICsJCU1TRygiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBwYWdlX2ZsYWdfYnVmLiAlc1xu IiwKPj4+Pj4+Pj4gKwkJCQlzdHJlcnJvcihlcnJubykpOwo+Pj4+Pj4+PiArCQlyZXR1cm4gRkFM U0U7Cj4+Pj4+Pj4+ICsJfQo+Pj4+Pj4+PiArCW1lbXNldChpbmZvLT5wYWdlX2ZsYWdfYnVmLCAw LCBzaXplb2Yodm9pZCAqKSAqIGluZm8tPm51bV90aHJlYWRzKTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+ PiArCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5udW1fdGhyZWFkczsgaSsrKSB7Cj4+Pj4+Pj4+ICsJ CWlmICgoaW5mby0+cGFnZV9mbGFnX2J1ZltpXSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBh Z2VfZmxhZykpKSA9PSBOVUxMKSB7Cj4+Pj4+Pj4+ICsJCQlNU0coIkNhbid0IGFsbG9jYXRlIG1l bW9yeSBmb3IgcGFnZV9mbGFnLiAlc1xuIiwKPj4+Pj4+Pj4gKwkJCQlzdHJlcnJvcihlcnJubykp Owo+Pj4+Pj4+PiArCQkJcmV0dXJuIEZBTFNFOwo+Pj4+Pj4+PiArCQl9Cj4+Pj4+Pj4+ICsJCWN1 cnJlbnQgPSBpbmZvLT5wYWdlX2ZsYWdfYnVmW2ldOwo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsJCWZv ciAoaiA9IDE7IGogPCBOVU1fQlVGRkVSUzsgaisrKSB7Cj4+Pj4+Pj4+ICsJCQlpZiAoKGN1cnJl bnQtPm5leHQgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwYWdlX2ZsYWcpKSkgPT0gTlVMTCkg ewo+Pj4+Pj4+PiArCQkJCU1TRygiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBwYWdlX2ZsYWcu ICVzXG4iLAo+Pj4+Pj4+PiArCQkJCQlzdHJlcnJvcihlcnJubykpOwo+Pj4+Pj4+PiArCQkJCXJl dHVybiBGQUxTRTsKPj4+Pj4+Pj4gKwkJCX0KPj4+Pj4+Pj4gKwkJCWN1cnJlbnQgPSBjdXJyZW50 LT5uZXh0Owo+Pj4+Pj4+PiArCQl9Cj4+Pj4+Pj4+ICsJCWN1cnJlbnQtPm5leHQgPSBpbmZvLT5w YWdlX2ZsYWdfYnVmW2ldOwo+Pj4+Pj4+PiArCX0KPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArCS8qCj4+ Pj4+Pj4+ICAgCSAqIGluaXRpYWwgZmRfbWVtb3J5IGZvciB0aHJlYWRzCj4+Pj4+Pj4+ICAgCSAq Lwo+Pj4+Pj4+PiAgIAlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX3RocmVhZHM7IGkrKykgewo+ Pj4+Pj4+PiBAQCAtMzYxMiw3ICszNjQ5LDggQEAgaW5pdGlhbF9mb3JfcGFyYWxsZWwoKQo+Pj4+ Pj4+PiAgIHZvaWQKPj4+Pj4+Pj4gICBmcmVlX2Zvcl9wYXJhbGxlbCgpCj4+Pj4+Pj4+ICAgewo+ Pj4+Pj4+PiAtCWludCBpOwo+Pj4+Pj4+PiArCWludCBpLCBqOwo+Pj4+Pj4+PiArCXN0cnVjdCBw YWdlX2ZsYWcgKmN1cnJlbnQ7Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+ICAgCWlmIChpbmZvLT50aHJlYWRz ICE9IE5VTEwpIHsKPj4+Pj4+Pj4gICAJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5udW1fdGhyZWFk czsgaSsrKSB7Cj4+Pj4+Pj4+IEBAIC0zNjU1LDYgKzM2OTMsMTkgQEAgZnJlZV9mb3JfcGFyYWxs ZWwoKQo+Pj4+Pj4+PiAgIAkJZnJlZShpbmZvLT5wYWdlX2RhdGFfYnVmKTsKPj4+Pj4+Pj4gICAJ fQo+Pj4+Pj4+Pgo+Pj4+Pj4+PiArCWlmIChpbmZvLT5wYWdlX2ZsYWdfYnVmICE9IE5VTEwpIHsK Pj4+Pj4+Pj4gKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPm51bV90aHJlYWRzOyBpKyspIHsKPj4+ Pj4+Pj4gKwkJCWZvciAoaiA9IDA7IGogPCBOVU1fQlVGRkVSUzsgaisrKSB7Cj4+Pj4+Pj4+ICsJ CQkJaWYgKGluZm8tPnBhZ2VfZmxhZ19idWZbaV0gIT0gTlVMTCkgewo+Pj4+Pj4+PiArCQkJCQlj dXJyZW50ID0gaW5mby0+cGFnZV9mbGFnX2J1ZltpXTsKPj4+Pj4+Pj4gKwkJCQkJaW5mby0+cGFn ZV9mbGFnX2J1ZltpXSA9IGN1cnJlbnQtPm5leHQ7Cj4+Pj4+Pj4+ICsJCQkJCWZyZWUoY3VycmVu dCk7Cj4+Pj4+Pj4+ICsJCQkJfQo+Pj4+Pj4+PiArCQkJfQo+Pj4+Pj4+PiArCQl9Cj4+Pj4+Pj4+ ICsJCWZyZWUoaW5mby0+cGFnZV9mbGFnX2J1Zik7Cj4+Pj4+Pj4+ICsJfQo+Pj4+Pj4+PiArCj4+ Pj4+Pj4+ICAgCWlmIChpbmZvLT5wYXJhbGxlbF9pbmZvID09IE5VTEwpCj4+Pj4+Pj4+ICAgCQly ZXR1cm47Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IEBAIC03MDc1LDExICs3MTI2LDExIEBAIHZvaWQgKgo+ Pj4+Pj4+PiAgIGtkdW1wX3RocmVhZF9mdW5jdGlvbl9jeWNsaWModm9pZCAqYXJnKSB7Cj4+Pj4+ Pj4+ICAgCXZvaWQgKnJldHZhbCA9IFBUSFJFQURfRkFJTDsKPj4+Pj4+Pj4gICAJc3RydWN0IHRo cmVhZF9hcmdzICprZHVtcF90aHJlYWRfYXJncyA9IChzdHJ1Y3QgdGhyZWFkX2FyZ3MgKilhcmc7 Cj4+Pj4+Pj4+IC0Jc3RydWN0IHBhZ2VfZGF0YSAqcGFnZV9kYXRhX2J1ZiA9IGtkdW1wX3RocmVh ZF9hcmdzLT5wYWdlX2RhdGFfYnVmOwo+Pj4+Pj4+PiArCXZvbGF0aWxlIHN0cnVjdCBwYWdlX2Rh dGEgKnBhZ2VfZGF0YV9idWYgPSBrZHVtcF90aHJlYWRfYXJncy0+cGFnZV9kYXRhX2J1ZjsKPj4+ Pj4+Pj4gKwl2b2xhdGlsZSBzdHJ1Y3QgcGFnZV9mbGFnICpwYWdlX2ZsYWdfYnVmID0ga2R1bXBf dGhyZWFkX2FyZ3MtPnBhZ2VfZmxhZ19idWY7Cj4+Pj4+Pj4+ICAgCXN0cnVjdCBjeWNsZSAqY3lj bGUgPSBrZHVtcF90aHJlYWRfYXJncy0+Y3ljbGU7Cj4+Pj4+Pj4+IC0JaW50IHBhZ2VfZGF0YV9u dW0gPSBrZHVtcF90aHJlYWRfYXJncy0+cGFnZV9kYXRhX251bTsKPj4+Pj4+Pj4gLQltZGZfcGZu X3QgcGZuOwo+Pj4+Pj4+PiAtCWludCBpbmRleDsKPj4+Pj4+Pj4gKwltZGZfcGZuX3QgcGZuID0g Y3ljbGUtPnN0YXJ0X3BmbjsKPj4+Pj4+Pj4gKwlpbnQgaW5kZXggPSBrZHVtcF90aHJlYWRfYXJn cy0+dGhyZWFkX251bTsKPj4+Pj4+Pj4gICAJaW50IGJ1Zl9yZWFkeTsKPj4+Pj4+Pj4gICAJaW50 IGR1bXBhYmxlOwo+Pj4+Pj4+PiAgIAlpbnQgZmRfbWVtb3J5ID0gMDsKPj4+Pj4+Pj4gQEAgLTcx MjUsNDcgKzcxNzYsNDggQEAga2R1bXBfdGhyZWFkX2Z1bmN0aW9uX2N5Y2xpYyh2b2lkICphcmcp IHsKPj4+Pj4+Pj4gICAJCQkJCQlrZHVtcF90aHJlYWRfYXJncy0+dGhyZWFkX251bSk7Cj4+Pj4+ Pj4+ICAgCX0KPj4+Pj4+Pj4KPj4+Pj4+Pj4gLQl3aGlsZSAoMSkgewo+Pj4+Pj4+PiAtCQkvKiBn ZXQgbmV4dCBwZm4gKi8KPj4+Pj4+Pj4gLQkJcHRocmVhZF9tdXRleF9sb2NrKCZpbmZvLT5jdXJy ZW50X3Bmbl9tdXRleCk7Cj4+Pj4+Pj4+IC0JCXBmbiA9IGluZm8tPmN1cnJlbnRfcGZuOwo+Pj4+ Pj4+PiAtCQlpbmZvLT5jdXJyZW50X3BmbisrOwo+Pj4+Pj4+PiAtCQlwdGhyZWFkX211dGV4X3Vu bG9jaygmaW5mby0+Y3VycmVudF9wZm5fbXV0ZXgpOwo+Pj4+Pj4+PiAtCj4+Pj4+Pj4+IC0JCWlm IChwZm4gPj0ga2R1bXBfdGhyZWFkX2FyZ3MtPmVuZF9wZm4pCj4+Pj4+Pj4+IC0JCQlicmVhazsK Pj4+Pj4+Pj4gLQo+Pj4+Pj4+PiAtCQlpbmRleCA9IC0xOwo+Pj4+Pj4+PiArCS8qCj4+Pj4+Pj4+ ICsJICogZmlsdGVyZWQgcGFnZSB3b24ndCB0YWtlIGFueXRoaW5nCj4+Pj4+Pj4+ICsJICogdW5m aWx0ZXJlZCB6ZXJvIHBhZ2Ugd2lsbCBvbmx5IHRha2UgYSBwYWdlX2ZsYWdfYnVmCj4+Pj4+Pj4+ ICsJICogdW5maWx0ZXJlZCBub24temVybyBwYWdlIHdpbGwgdGFrZSBhIHBhZ2VfZmxhZ19idWYg YW5kIGEgcGFnZV9kYXRhX2J1Zgo+Pj4+Pj4+PiArCSAqLwo+Pj4+Pj4+PiArCXdoaWxlIChwZm4g PCBjeWNsZS0+ZW5kX3Bmbikgewo+Pj4+Pj4+PiAgIAkJYnVmX3JlYWR5ID0gRkFMU0U7Cj4+Pj4+ Pj4+Cj4+Pj4+Pj4+ICsJCXB0aHJlYWRfbXV0ZXhfbG9jaygmaW5mby0+cGFnZV9kYXRhX211dGV4 KTsKPj4+Pj4+Pj4gKwkJd2hpbGUgKHBhZ2VfZGF0YV9idWZbaW5kZXhdLnVzZWQgIT0gRkFMU0Up IHsKPj4+Pj4+Pj4gKwkJCWluZGV4ID0gKGluZGV4ICsgMSkgJSBpbmZvLT5udW1fYnVmZmVyczsK Pj4+Pj4+Pj4gKwkJfQo+Pj4+Pj4+PiArCQlwYWdlX2RhdGFfYnVmW2luZGV4XS51c2VkID0gVFJV RTsKPj4+Pj4+Pj4gKwkJcHRocmVhZF9tdXRleF91bmxvY2soJmluZm8tPnBhZ2VfZGF0YV9tdXRl eCk7Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gICAJCXdoaWxlIChidWZfcmVhZHkgPT0gRkFMU0UpIHsK Pj4+Pj4+Pj4gICAJCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKPj4+Pj4+Pj4gLQo+Pj4+Pj4+PiAt CQkJaW5kZXggPSBwZm4gJSBwYWdlX2RhdGFfbnVtOwo+Pj4+Pj4+PiAtCj4+Pj4+Pj4+IC0JCQlp ZiAocGZuIC0gaW5mby0+Y29uc3VtZWRfcGZuID4gaW5mby0+bnVtX2J1ZmZlcnMpCj4+Pj4+Pj4+ ICsJCQlpZiAocGFnZV9mbGFnX2J1Zi0+cmVhZHkgPT0gRkxBR19SRUFEWSkKPj4+Pj4+Pj4gICAJ CQkJY29udGludWU7Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IC0JCQlpZiAocGFnZV9kYXRhX2J1ZltpbmRl eF0ucmVhZHkgIT0gMCkKPj4+Pj4+Pj4gLQkJCQljb250aW51ZTsKPj4+Pj4+Pj4gLQo+Pj4+Pj4+ PiAtCQkJcHRocmVhZF9tdXRleF9sb2NrKCZwYWdlX2RhdGFfYnVmW2luZGV4XS5tdXRleCk7Cj4+ Pj4+Pj4+IC0KPj4+Pj4+Pj4gLQkJCWlmIChwYWdlX2RhdGFfYnVmW2luZGV4XS5yZWFkeSAhPSAw KQo+Pj4+Pj4+PiAtCQkJCWdvdG8gdW5sb2NrOwo+Pj4+Pj4+PiAtCj4+Pj4+Pj4+IC0JCQlidWZf cmVhZHkgPSBUUlVFOwo+Pj4+Pj4+PiArCQkJLyogZ2V0IG5leHQgZHVtcGFibGUgcGZuICovCj4+ Pj4+Pj4+ICsJCQlwdGhyZWFkX211dGV4X2xvY2soJmluZm8tPmN1cnJlbnRfcGZuX211dGV4KTsK Pj4+Pj4+Pj4gKwkJCWZvciAocGZuID0gaW5mby0+Y3VycmVudF9wZm47IHBmbiA8IGN5Y2xlLT5l bmRfcGZuOyBwZm4rKykgewo+Pj4+Pj4+PiArCQkJCWR1bXBhYmxlID0gaXNfZHVtcGFibGUoCj4+ Pj4+Pj4+ICsJCQkJCWluZm8tPmZkX2JpdG1hcCA/ICZiaXRtYXBfcGFyYWxsZWwgOiBpbmZvLT5i aXRtYXAyLAo+Pj4+Pj4+PiArCQkJCQlwZm4sCj4+Pj4+Pj4+ICsJCQkJCWN5Y2xlKTsKPj4+Pj4+ Pj4gKwkJCQlpZiAoZHVtcGFibGUpCj4+Pj4+Pj4+ICsJCQkJCWJyZWFrOwo+Pj4+Pj4+PiArCQkJ fQo+Pj4+Pj4+PiArCQkJaW5mby0+Y3VycmVudF9wZm4gPSBwZm4gKyAxOwo+Pj4+Pj4+Pgo+Pj4+ Pj4+PiAtCQkJcGFnZV9kYXRhX2J1ZltpbmRleF0ucGZuID0gcGZuOwo+Pj4+Pj4+PiAtCQkJcGFn ZV9kYXRhX2J1ZltpbmRleF0ucmVhZHkgPSAxOwo+Pj4+Pj4+PiArCQkJcGFnZV9mbGFnX2J1Zi0+ cGZuID0gcGZuOwo+Pj4+Pj4+PiArCQkJcGFnZV9mbGFnX2J1Zi0+cmVhZHkgPSBGTEFHX0ZJTExJ Tkc7Cj4+Pj4+Pj4+ICsJCQlwdGhyZWFkX211dGV4X3VubG9jaygmaW5mby0+Y3VycmVudF9wZm5f bXV0ZXgpOwo+Pj4+Pj4+PiArCQkJc2VtX3Bvc3QoJmluZm8tPnBhZ2VfZmxhZ19idWZfc2VtKTsK Pj4+Pj4+Pj4KPj4+Pj4+Pj4gLQkJCWR1bXBhYmxlID0gaXNfZHVtcGFibGUoCj4+Pj4+Pj4+IC0J CQkJaW5mby0+ZmRfYml0bWFwID8gJmJpdG1hcF9wYXJhbGxlbCA6IGluZm8tPmJpdG1hcDIsCj4+ Pj4+Pj4+IC0JCQkJcGZuLAo+Pj4+Pj4+PiAtCQkJCWN5Y2xlKTsKPj4+Pj4+Pj4gLQkJCXBhZ2Vf ZGF0YV9idWZbaW5kZXhdLmR1bXBhYmxlID0gZHVtcGFibGU7Cj4+Pj4+Pj4+IC0JCQlpZiAoIWR1 bXBhYmxlKQo+Pj4+Pj4+PiAtCQkJCWdvdG8gdW5sb2NrOwo+Pj4+Pj4+PiArCQkJaWYgKHBmbiA+ PSBjeWNsZS0+ZW5kX3Bmbikgewo+Pj4+Pj4+PiArCQkJCWluZm8tPmN1cnJlbnRfcGZuID0gY3lj bGUtPmVuZF9wZm47Cj4+Pj4+Pj4+ICsJCQkJcGFnZV9kYXRhX2J1ZltpbmRleF0udXNlZCA9IEZB TFNFOwo+Pj4+Pj4+PiArCQkJCWJyZWFrOwo+Pj4+Pj4+PiArCQkJfQo+Pj4+Pj4+Pgo+Pj4+Pj4+ PiAgIAkJCWlmICghcmVhZF9wZm5fcGFyYWxsZWwoZmRfbWVtb3J5LCBwZm4sIGJ1ZiwKPj4+Pj4+ Pj4gICAJCQkJCSAgICAgICAmYml0bWFwX21lbW9yeV9wYXJhbGxlbCwKPj4+Pj4+Pj4gQEAgLTcx NzgsMTEgKzcyMzAsMTEgQEAga2R1bXBfdGhyZWFkX2Z1bmN0aW9uX2N5Y2xpYyh2b2lkICphcmcp IHsKPj4+Pj4+Pj4KPj4+Pj4+Pj4gICAJCQlpZiAoKGluZm8tPmR1bXBfbGV2ZWwgJiBETF9FWENM VURFX1pFUk8pCj4+Pj4+Pj4+ICAgCQkJICAgICYmIGlzX3plcm9fcGFnZShidWYsIGluZm8tPnBh Z2Vfc2l6ZSkpIHsKPj4+Pj4+Pj4gLQkJCQlwYWdlX2RhdGFfYnVmW2luZGV4XS56ZXJvID0gVFJV RTsKPj4+Pj4+Pj4gLQkJCQlnb3RvIHVubG9jazsKPj4+Pj4+Pj4gKwkJCQlwYWdlX2ZsYWdfYnVm LT56ZXJvID0gVFJVRTsKPj4+Pj4+Pj4gKwkJCQlnb3RvIG5leHQ7Cj4+Pj4+Pj4+ICAgCQkJfQo+ Pj4+Pj4+Pgo+Pj4+Pj4+PiAtCQkJcGFnZV9kYXRhX2J1ZltpbmRleF0uemVybyA9IEZBTFNFOwo+ Pj4+Pj4+PiArCQkJcGFnZV9mbGFnX2J1Zi0+emVybyA9IEZBTFNFOwo+Pj4+Pj4+Pgo+Pj4+Pj4+ PiAgIAkJCS8qCj4+Pj4+Pj4+ICAgCQkJICogQ29tcHJlc3MgdGhlIHBhZ2UgZGF0YS4KPj4+Pj4+ Pj4gQEAgLTcyMTAsNiArNzI2Miw3IEBAIGtkdW1wX3RocmVhZF9mdW5jdGlvbl9jeWNsaWModm9p ZCAqYXJnKSB7Cj4+Pj4+Pj4+ICAgCQkJCXBhZ2VfZGF0YV9idWZbaW5kZXhdLmZsYWdzID0KPj4+ Pj4+Pj4gICAJCQkJCQkJRFVNUF9ESF9DT01QUkVTU0VEX0xaTzsKPj4+Pj4+Pj4gICAJCQkJcGFn ZV9kYXRhX2J1ZltpbmRleF0uc2l6ZSAgPSBzaXplX291dDsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiAg IAkJCQltZW1jcHkocGFnZV9kYXRhX2J1ZltpbmRleF0uYnVmLCBidWZfb3V0LCBzaXplX291dCk7 Cj4+Pj4+Pj4+ICAgI2VuZGlmCj4+Pj4+Pj4+ICAgI2lmZGVmIFVTRVNOQVBQWQo+Pj4+Pj4+PiBA QCAtNzIzMiwxMiArNzI4NSwxNCBAQCBrZHVtcF90aHJlYWRfZnVuY3Rpb25fY3ljbGljKHZvaWQg KmFyZykgewo+Pj4+Pj4+PiAgIAkJCQlwYWdlX2RhdGFfYnVmW2luZGV4XS5zaXplICA9IGluZm8t PnBhZ2Vfc2l6ZTsKPj4+Pj4+Pj4gICAJCQkJbWVtY3B5KHBhZ2VfZGF0YV9idWZbaW5kZXhdLmJ1 ZiwgYnVmLCBpbmZvLT5wYWdlX3NpemUpOwo+Pj4+Pj4+PiAgIAkJCX0KPj4+Pj4+Pj4gLXVubG9j azoKPj4+Pj4+Pj4gLQkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwYWdlX2RhdGFfYnVmW2luZGV4 XS5tdXRleCk7Cj4+Pj4+Pj4+ICsJCQlwYWdlX2ZsYWdfYnVmLT5pbmRleCA9IGluZGV4Owo+Pj4+ Pj4+PiArCQkJYnVmX3JlYWR5ID0gVFJVRTsKPj4+Pj4+Pj4gK25leHQ6Cj4+Pj4+Pj4+ICsJCQlw YWdlX2ZsYWdfYnVmLT5yZWFkeSA9IEZMQUdfUkVBRFk7Cj4+Pj4+Pj4+ICsJCQlwYWdlX2ZsYWdf YnVmID0gcGFnZV9mbGFnX2J1Zi0+bmV4dDsKPj4+Pj4+Pj4KPj4+Pj4+Pj4gICAJCX0KPj4+Pj4+ Pj4gICAJfQo+Pj4+Pj4+PiAtCj4+Pj4+Pj4+ICAgCXJldHZhbCA9IE5VTEw7Cj4+Pj4+Pj4+Cj4+ Pj4+Pj4+ICAgZmFpbDoKPj4+Pj4+Pj4gQEAgLTcyNjUsMTQgKzczMjAsMTUgQEAgd3JpdGVfa2R1 bXBfcGFnZXNfcGFyYWxsZWxfY3ljbGljKHN0cnVjdCBjYWNoZV9kYXRhICpjZF9oZWFkZXIsCj4+ Pj4+Pj4+ICAgCXN0cnVjdCBwYWdlX2Rlc2MgcGQ7Cj4+Pj4+Pj4+ICAgCXN0cnVjdCB0aW1ldmFs IHR2X3N0YXJ0Owo+Pj4+Pj4+PiAgIAlzdHJ1Y3QgdGltZXZhbCBsYXN0LCBuZXc7Cj4+Pj4+Pj4+ IC0JdW5zaWduZWQgbG9uZyBsb25nIGNvbnN1bWluZ19wZm47Cj4+Pj4+Pj4+ICAgCXB0aHJlYWRf dCAqKnRocmVhZHMgPSBOVUxMOwo+Pj4+Pj4+PiAgIAlzdHJ1Y3QgdGhyZWFkX2FyZ3MgKmtkdW1w X3RocmVhZF9hcmdzID0gTlVMTDsKPj4+Pj4+Pj4gICAJdm9pZCAqdGhyZWFkX3Jlc3VsdDsKPj4+ Pj4+Pj4gLQlpbnQgcGFnZV9kYXRhX251bTsKPj4+Pj4+Pj4gKwlpbnQgcGFnZV9idWZfbnVtOwo+ Pj4+Pj4+PiAgIAlzdHJ1Y3QgcGFnZV9kYXRhICpwYWdlX2RhdGFfYnVmID0gTlVMTDsKPj4+Pj4+ Pj4gICAJaW50IGk7Cj4+Pj4+Pj4+ICAgCWludCBpbmRleDsKPj4+Pj4+Pj4gKwlpbnQgZW5kX2Nv dW50LCBjb25zdW1pbmcsIGNoZWNrX2NvdW50Owo+Pj4+Pj4+PiArCW1kZl9wZm5fdCBjdXJyZW50 X3BmbiwgdGVtcF9wZm47Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+ICAgCWlmIChpbmZvLT5mbGFnX2VsZl9k dW1wZmlsZSkKPj4+Pj4+Pj4gICAJCXJldHVybiBGQUxTRTsKPj4+Pj4+Pj4gQEAgLTcyODQsMTMg KzczNDAsNiBAQCB3cml0ZV9rZHVtcF9wYWdlc19wYXJhbGxlbF9jeWNsaWMoc3RydWN0IGNhY2hl X2RhdGEgKmNkX2hlYWRlciwKPj4+Pj4+Pj4gICAJCWdvdG8gb3V0Owo+Pj4+Pj4+PiAgIAl9Cj4+ Pj4+Pj4+Cj4+Pj4+Pj4+IC0JcmVzID0gcHRocmVhZF9tdXRleF9pbml0KCZpbmZvLT5jb25zdW1l ZF9wZm5fbXV0ZXgsIE5VTEwpOwo+Pj4+Pj4+PiAtCWlmIChyZXMgIT0gMCkgewo+Pj4+Pj4+PiAt CQlFUlJNU0coIkNhbid0IGluaXRpYWxpemUgY29uc3VtZWRfcGZuX211dGV4LiAlc1xuIiwKPj4+ Pj4+Pj4gLQkJCQlzdHJlcnJvcihyZXMpKTsKPj4+Pj4+Pj4gLQkJZ290byBvdXQ7Cj4+Pj4+Pj4+ IC0JfQo+Pj4+Pj4+PiAtCj4+Pj4+Pj4+ICAgCXJlcyA9IHB0aHJlYWRfbXV0ZXhfaW5pdCgmaW5m by0+ZmlsdGVyX211dGV4LCBOVUxMKTsKPj4+Pj4+Pj4gICAJaWYgKHJlcyAhPSAwKSB7Cj4+Pj4+ Pj4+ICAgCQlFUlJNU0coIkNhbid0IGluaXRpYWxpemUgZmlsdGVyX211dGV4LiAlc1xuIiwgc3Ry ZXJyb3IocmVzKSk7Cj4+Pj4+Pj4+IEBAIC03MzE0LDM2ICs3MzYzLDIzIEBAIHdyaXRlX2tkdW1w X3BhZ2VzX3BhcmFsbGVsX2N5Y2xpYyhzdHJ1Y3QgY2FjaGVfZGF0YSAqY2RfaGVhZGVyLAo+Pj4+ Pj4+PiAgIAllbmRfcGZuICAgPSBjeWNsZS0+ZW5kX3BmbjsKPj4+Pj4+Pj4KPj4+Pj4+Pj4gICAJ aW5mby0+Y3VycmVudF9wZm4gPSBzdGFydF9wZm47Cj4+Pj4+Pj4+IC0JaW5mby0+Y29uc3VtZWRf cGZuID0gc3RhcnRfcGZuIC0gMTsKPj4+Pj4+Pj4KPj4+Pj4+Pj4gICAJdGhyZWFkcyA9IGluZm8t PnRocmVhZHM7Cj4+Pj4+Pj4+ICAgCWtkdW1wX3RocmVhZF9hcmdzID0gaW5mby0+a2R1bXBfdGhy ZWFkX2FyZ3M7Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IC0JcGFnZV9kYXRhX251bSA9IGluZm8tPm51bV9i dWZmZXJzOwo+Pj4+Pj4+PiArCXBhZ2VfYnVmX251bSA9IGluZm8tPm51bV9idWZmZXJzOwo+Pj4+ Pj4+PiAgIAlwYWdlX2RhdGFfYnVmID0gaW5mby0+cGFnZV9kYXRhX2J1ZjsKPj4+Pj4+Pj4gKwlw dGhyZWFkX211dGV4X2luaXQoJmluZm8tPnBhZ2VfZGF0YV9tdXRleCwgTlVMTCk7Cj4+Pj4+Pj4+ ICsJc2VtX2luaXQoJmluZm8tPnBhZ2VfZmxhZ19idWZfc2VtLCAwLCAwKTsKPj4+Pj4+Pj4KPj4+ Pj4+Pj4gLQlmb3IgKGkgPSAwOyBpIDwgcGFnZV9kYXRhX251bTsgaSsrKSB7Cj4+Pj4+Pj4+IC0J CS8qCj4+Pj4+Pj4+IC0JCSAqIHByb2R1Y2VyIHdpbGwgdXNlIHBmbiBpbiBwYWdlX2RhdGFfYnVm IHRvIGRlY2lkZSB0aGUKPj4+Pj4+Pj4gLQkJICogY29uc3VtZWQgcGZuCj4+Pj4+Pj4+IC0JCSAq Lwo+Pj4+Pj4+PiAtCQlwYWdlX2RhdGFfYnVmW2ldLnBmbiA9IHN0YXJ0X3BmbiAtIDE7Cj4+Pj4+ Pj4+IC0JCXBhZ2VfZGF0YV9idWZbaV0ucmVhZHkgPSAwOwo+Pj4+Pj4+PiAtCQlyZXMgPSBwdGhy ZWFkX211dGV4X2luaXQoJnBhZ2VfZGF0YV9idWZbaV0ubXV0ZXgsIE5VTEwpOwo+Pj4+Pj4+PiAt CQlpZiAocmVzICE9IDApIHsKPj4+Pj4+Pj4gLQkJCUVSUk1TRygiQ2FuJ3QgaW5pdGlhbGl6ZSBt dXRleCBvZiBwYWdlX2RhdGFfYnVmLiAlc1xuIiwKPj4+Pj4+Pj4gLQkJCQkJc3RyZXJyb3IocmVz KSk7Cj4+Pj4+Pj4+IC0JCQlnb3RvIG91dDsKPj4+Pj4+Pj4gLQkJfQo+Pj4+Pj4+PiAtCX0KPj4+ Pj4+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgcGFnZV9idWZfbnVtOyBpKyspCj4+Pj4+Pj4+ICsJCXBh Z2VfZGF0YV9idWZbaV0udXNlZCA9IEZBTFNFOwo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAgIAlmb3IgKGkg PSAwOyBpIDwgaW5mby0+bnVtX3RocmVhZHM7IGkrKykgewo+Pj4+Pj4+PiAgIAkJa2R1bXBfdGhy ZWFkX2FyZ3NbaV0udGhyZWFkX251bSA9IGk7Cj4+Pj4+Pj4+ICAgCQlrZHVtcF90aHJlYWRfYXJn c1tpXS5sZW5fYnVmX291dCA9IGxlbl9idWZfb3V0Owo+Pj4+Pj4+PiAtCQlrZHVtcF90aHJlYWRf YXJnc1tpXS5zdGFydF9wZm4gPSBzdGFydF9wZm47Cj4+Pj4+Pj4+IC0JCWtkdW1wX3RocmVhZF9h cmdzW2ldLmVuZF9wZm4gPSBlbmRfcGZuOwo+Pj4+Pj4+PiAtCQlrZHVtcF90aHJlYWRfYXJnc1tp XS5wYWdlX2RhdGFfbnVtID0gcGFnZV9kYXRhX251bTsKPj4+Pj4+Pj4gICAJCWtkdW1wX3RocmVh ZF9hcmdzW2ldLnBhZ2VfZGF0YV9idWYgPSBwYWdlX2RhdGFfYnVmOwo+Pj4+Pj4+PiArCQlrZHVt cF90aHJlYWRfYXJnc1tpXS5wYWdlX2ZsYWdfYnVmID0gaW5mby0+cGFnZV9mbGFnX2J1ZltpXTsK Pj4+Pj4+Pj4gICAJCWtkdW1wX3RocmVhZF9hcmdzW2ldLmN5Y2xlID0gY3ljbGU7Cj4+Pj4+Pj4+ Cj4+Pj4+Pj4+ICAgCQlyZXMgPSBwdGhyZWFkX2NyZWF0ZSh0aHJlYWRzW2ldLCBOVUxMLAo+Pj4+ Pj4+PiBAQCAtNzM1Niw1NSArNzM5Miw4OCBAQCB3cml0ZV9rZHVtcF9wYWdlc19wYXJhbGxlbF9j eWNsaWMoc3RydWN0IGNhY2hlX2RhdGEgKmNkX2hlYWRlciwKPj4+Pj4+Pj4gICAJCX0KPj4+Pj4+ Pj4gICAJfQo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAtCWNvbnN1bWluZ19wZm4gPSBzdGFydF9wZm47Cj4+ Pj4+Pj4+IC0JaW5kZXggPSAtMTsKPj4+Pj4+Pj4gKwllbmRfY291bnQgPSAwOwo+Pj4+Pj4+PiAr CXdoaWxlICgxKSB7Cj4+Pj4+Pj4+ICsJCWNvbnN1bWluZyA9IDA7Cj4+Pj4+Pj4+ICsJCWNoZWNr X2NvdW50ID0gMDsKPj4+Pj4+Pj4KPj4+Pj4+Pj4gLQlnZXR0aW1lb2ZkYXkoJmxhc3QsIE5VTEwp Owo+Pj4+Pj4+PiArCQkvKgo+Pj4+Pj4+PiArCQkgKiBUaGUgYmFzaWMgaWRlYSBpcyBwcm9kdWNl ciBwcm9kdWNpbmcgcGFnZSBhbmQgY29uc3VtZXIgd3JpdGluZyBwYWdlLgo+Pj4+Pj4+PiArCQkg KiBFYWNoIHByb2R1Y2VyIGhhdmUgYSBwYWdlX2ZsYWdfYnVmIGxpc3Qgd2hpY2ggaXMgdXNlZCBm b3Igc3RvcmluZyBwYWdlJ3MgZGVzY3JpcHRpb24uCj4+Pj4+Pj4+ICsJCSAqIFRoZSBzaXplIG9m IHBhZ2VfZmxhZ19idWYgaXMgbGl0dGxlIHNvIGl0IHdvbid0IHRha2UgdG9vIG11Y2ggbWVtb3J5 Lgo+Pj4+Pj4+PiArCQkgKiBBbmQgYWxsIHByb2R1Y2VycyB3aWxsIHNoYXJlIGEgcGFnZV9kYXRh X2J1ZiBhcnJheSB3aGljaCBpcyB1c2VkIGZvciBzdG9yaW5nIHBhZ2UncyBjb21wcmVzc2VkIGRh dGEuCj4+Pj4+Pj4+ICsJCSAqIFRoZSBtYWluIHRocmVhZCBpcyB0aGUgY29uc3VtZXIuIEl0IHdp bGwgZmluZCB0aGUgbmV4dCBwZm4gYW5kIHdyaXRlIGl0IGludG8gZmlsZS4KPj4+Pj4+Pj4gKwkJ ICogVGhlIG5leHQgcGZuIGlzIHNtYWxsZXN0IHBmbiBpbiBhbGwgcGFnZV9mbGFnX2J1Zi4KPj4+ Pj4+Pj4gKwkJICovCj4+Pj4+Pj4+ICsJCXNlbV93YWl0KCZpbmZvLT5wYWdlX2ZsYWdfYnVmX3Nl bSk7Cj4+Pj4+Pj4+ICsJCWdldHRpbWVvZmRheSgmbGFzdCwgTlVMTCk7Cj4+Pj4+Pj4+ICsJCXdo aWxlICgxKSB7Cj4+Pj4+Pj4+ICsJCQljdXJyZW50X3BmbiA9IGVuZF9wZm47Cj4+Pj4+Pj4+Cj4+ Pj4+Pj4+IC0Jd2hpbGUgKGNvbnN1bWluZ19wZm4gPCBlbmRfcGZuKSB7Cj4+Pj4+Pj4+IC0JCWlu ZGV4ID0gY29uc3VtaW5nX3BmbiAlIHBhZ2VfZGF0YV9udW07Cj4+Pj4+Pj4+ICsJCQkvKgo+Pj4+ Pj4+PiArCQkJICogcGFnZV9mbGFnX2J1ZiBpcyBpbiBjaXJjdWxhciBsaW5rZWQgbGlzdC4KPj4+ Pj4+Pj4gKwkJCSAqIFRoZSBhcnJheSBpbmZvLT5wYWdlX2ZsYWdfYnVmW10gcmVjb3JkcyB0aGUg Y3VycmVudCBwYWdlX2ZsYWdfYnVmIGluIGVhY2ggdGhyZWFkJ3MKPj4+Pj4+Pj4gKwkJCSAqIHBh Z2VfZmxhZ19idWYgbGlzdC4KPj4+Pj4+Pj4gKwkJCSAqIGNvbnN1bWluZyBpcyB1c2VkIGZvciBy ZWNvcmRpbmcgaW4gd2hpY2ggdGhyZWFkIHRoZSBwZm4gaXMgdGhlIHNtYWxsZXN0Lgo+Pj4+Pj4+ PiArCQkJICogY3VycmVudF9wZm4gaXMgdXNlZCBmb3IgcmVjb3JkaW5nIHRoZSB2YWx1ZSBvZiBw Zm4gd2hlbiBjaGVja2luZyB0aGUgcGZuLgo+Pj4+Pj4+PiArCQkJICovCj4+Pj4+Pj4+ICsJCQlm b3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX3RocmVhZHM7IGkrKykgewo+Pj4+Pj4+PiArCQkJCWlm IChpbmZvLT5wYWdlX2ZsYWdfYnVmW2ldLT5yZWFkeSA9PSBGTEFHX1VOVVNFRCkKPj4+Pj4+Pj4g KwkJCQkJY29udGludWU7Cj4+Pj4+Pj4+ICsJCQkJdGVtcF9wZm4gPSBpbmZvLT5wYWdlX2ZsYWdf YnVmW2ldLT5wZm47Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IC0JCWdldHRpbWVvZmRheSgmbmV3LCBOVUxM KTsKPj4+Pj4+Pj4gLQkJaWYgKG5ldy50dl9zZWMgLSBsYXN0LnR2X3NlYyA+IFdBSVRfVElNRSkg ewo+Pj4+Pj4+PiAtCQkJRVJSTVNHKCJDYW4ndCBnZXQgZGF0YSBvZiBwZm4gJWxseC5cbiIsIGNv bnN1bWluZ19wZm4pOwo+Pj4+Pj4+PiAtCQkJZ290byBvdXQ7Cj4+Pj4+Pj4+IC0JCX0KPj4+Pj4+ Pj4gKwkJCQkvKgo+Pj4+Pj4+PiArCQkJCSAqIGNvdW50IGhvdyBtYW55IHRocmVhZHMgaGF2ZSBy ZWFjaGVkIHRoZSBlbmQuCj4+Pj4+Pj4+ICsJCQkJICovCj4+Pj4+Pj4+ICsJCQkJaWYgKHRlbXBf cGZuID49IGVuZF9wZm4pIHsKPj4+Pj4+Pj4gKwkJCQkJaW5mby0+cGFnZV9mbGFnX2J1ZltpXS0+ cmVhZHkgPSBGTEFHX1VOVVNFRDsKPj4+Pj4+Pj4gKwkJCQkJZW5kX2NvdW50Kys7Cj4+Pj4+Pj4+ ICsJCQkJCWNvbnRpbnVlOwo+Pj4+Pj4+PiArCQkJCX0KPj4+Pj4+Pj4KPj4+Pj4+Pj4gLQkJLyoK Pj4+Pj4+Pj4gLQkJICogY2hlY2sgcGZuIGZpcnN0IHdpdGhvdXQgbXV0ZXggbG9ja2VkIHRvIHJl ZHVjZSB0aGUgdGltZQo+Pj4+Pj4+PiAtCQkgKiB0cnlpbmcgdG8gbG9jayB0aGUgbXV0ZXgKPj4+ Pj4+Pj4gLQkJICovCj4+Pj4+Pj4+IC0JCWlmIChwYWdlX2RhdGFfYnVmW2luZGV4XS5wZm4gIT0g Y29uc3VtaW5nX3BmbikKPj4+Pj4+Pj4gLQkJCWNvbnRpbnVlOwo+Pj4+Pj4+PiArCQkJCWlmIChj dXJyZW50X3BmbiA8IHRlbXBfcGZuKQo+Pj4+Pj4+PiArCQkJCQljb250aW51ZTsKPj4+Pj4+Pj4K Pj4+Pj4+Pj4gLQkJaWYgKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmcGFnZV9kYXRhX2J1ZltpbmRl eF0ubXV0ZXgpICE9IDApCj4+Pj4+Pj4+IC0JCQljb250aW51ZTsKPj4+Pj4+Pj4gKwkJCQljaGVj a19jb3VudCsrOwo+Pj4+Pj4+PiArCQkJCWNvbnN1bWluZyA9IGk7Cj4+Pj4+Pj4+ICsJCQkJY3Vy cmVudF9wZm4gPSB0ZW1wX3BmbjsKPj4+Pj4+Pj4gKwkJCX0KPj4+Pj4+Pj4KPj4+Pj4+Pj4gLQkJ LyogY2hlY2sgd2hldGhlciB0aGUgZm91bmQgb25lIGlzIHJlYWR5IHRvIGJlIGNvbnN1bWVkICov Cj4+Pj4+Pj4+IC0JCWlmIChwYWdlX2RhdGFfYnVmW2luZGV4XS5wZm4gIT0gY29uc3VtaW5nX3Bm biB8fAo+Pj4+Pj4+PiAtCQkgICAgcGFnZV9kYXRhX2J1ZltpbmRleF0ucmVhZHkgIT0gMSkgewo+ Pj4+Pj4+PiAtCQkJZ290byB1bmxvY2s7Cj4+Pj4+Pj4+ICsJCQkvKgo+Pj4+Pj4+PiArCQkJICog SWYgYWxsIHRoZSB0aHJlYWRzIGhhdmUgcmVhY2hlZCB0aGUgZW5kLCB3ZSB3aWxsIGZpbmlzaCB3 cml0aW5nLgo+Pj4+Pj4+PiArCQkJICovCj4+Pj4+Pj4+ICsJCQlpZiAoZW5kX2NvdW50ID49IGlu Zm8tPm51bV90aHJlYWRzKQo+Pj4+Pj4+PiArCQkJCWdvdG8gZmluaXNoOwo+Pj4+Pj4+PiArCj4+ Pj4+Pj4+ICsJCQkvKgo+Pj4+Pj4+PiArCQkJICogSWYgdGhlIHBhZ2VfZmxhZ19idWYgaXMgbm90 IHJlYWR5LCB0aGUgcGZuIHJlY29yZGVkIG1heSBiZSBjaGFuZ2VkLgo+Pj4+Pj4+PiArCQkJICog U28gd2Ugc2hvdWxkIHJlY2hlY2suCj4+Pj4+Pj4+ICsJCQkgKi8KPj4+Pj4+Pj4gKwkJCWlmIChp bmZvLT5wYWdlX2ZsYWdfYnVmW2NvbnN1bWluZ10tPnJlYWR5ICE9IEZMQUdfUkVBRFkpIHsKPj4+ Pj4+Pj4gKwkJCQlnZXR0aW1lb2ZkYXkoJm5ldywgTlVMTCk7Cj4+Pj4+Pj4+ICsJCQkJaWYgKG5l dy50dl9zZWMgLSBsYXN0LnR2X3NlYyA+IFdBSVRfVElNRSkgewo+Pj4+Pj4+PiArCQkJCQlFUlJN U0coIkNhbid0IGdldCBkYXRhIG9mIHBmbi5cbiIpOwo+Pj4+Pj4+PiArCQkJCQlnb3RvIG91dDsK Pj4+Pj4+Pj4gKwkJCQl9Cj4+Pj4+Pj4+ICsJCQkJY29udGludWU7Cj4+Pj4+Pj4+ICsJCQl9Cj4+ Pj4+Pj4+ICsKPj4+Pj4+Pj4gKwkJCWlmIChjdXJyZW50X3BmbiA9PSBpbmZvLT5wYWdlX2ZsYWdf YnVmW2NvbnN1bWluZ10tPnBmbikKPj4+Pj4+Pj4gKwkJCQlicmVhazsKPj4+Pj4+Pj4gICAJCX0K Pj4+Pj4+Pj4KPj4+Pj4+Pj4gICAJCWlmICgobnVtX2R1bXBlZCAlIHBlcikgPT0gMCkKPj4+Pj4+ Pj4gICAJCQlwcmludF9wcm9ncmVzcyhQUk9HUkVTU19DT1BZLCBudW1fZHVtcGVkLCBpbmZvLT5u dW1fZHVtcGFibGUpOwo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAtCQkvKiBuZXh0IHBmbiBpcyBmb3VuZCwg cmVmcmVzaCBsYXN0IGhlcmUgKi8KPj4+Pj4+Pj4gLQkJbGFzdCA9IG5ldzsKPj4+Pj4+Pj4gLQkJ Y29uc3VtaW5nX3BmbisrOwo+Pj4+Pj4+PiAtCQlpbmZvLT5jb25zdW1lZF9wZm4rKzsKPj4+Pj4+ Pj4gLQkJcGFnZV9kYXRhX2J1ZltpbmRleF0ucmVhZHkgPSAwOwo+Pj4+Pj4+PiAtCj4+Pj4+Pj4+ IC0JCWlmIChwYWdlX2RhdGFfYnVmW2luZGV4XS5kdW1wYWJsZSA9PSBGQUxTRSkKPj4+Pj4+Pj4g LQkJCWdvdG8gdW5sb2NrOwo+Pj4+Pj4+PiAtCj4+Pj4+Pj4+ICAgCQludW1fZHVtcGVkKys7Cj4+ Pj4+Pj4+Cj4+Pj4+Pj4+IC0JCWlmIChwYWdlX2RhdGFfYnVmW2luZGV4XS56ZXJvID09IFRSVUUp IHsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArCQlpZiAoaW5mby0+cGFnZV9mbGFnX2J1Zltjb25zdW1p bmddLT56ZXJvID09IFRSVUUpIHsKPj4+Pj4+Pj4gICAJCQlpZiAoIXdyaXRlX2NhY2hlKGNkX2hl YWRlciwgcGRfemVybywgc2l6ZW9mKHBhZ2VfZGVzY190KSkpCj4+Pj4+Pj4+ICAgCQkJCWdvdG8g b3V0Owo+Pj4+Pj4+PiAgIAkJCXBmbl96ZXJvKys7Cj4+Pj4+Pj4+ICAgCQl9IGVsc2Ugewo+Pj4+ Pj4+PiArCQkJaW5kZXggPSBpbmZvLT5wYWdlX2ZsYWdfYnVmW2NvbnN1bWluZ10tPmluZGV4Owo+ Pj4+Pj4+PiAgIAkJCXBkLmZsYWdzICAgICAgPSBwYWdlX2RhdGFfYnVmW2luZGV4XS5mbGFnczsK Pj4+Pj4+Pj4gICAJCQlwZC5zaXplICAgICAgID0gcGFnZV9kYXRhX2J1ZltpbmRleF0uc2l6ZTsK Pj4+Pj4+Pj4gICAJCQlwZC5wYWdlX2ZsYWdzID0gMDsKPj4+Pj4+Pj4gQEAgLTc0MjAsMTIgKzc0 ODksMTIgQEAgd3JpdGVfa2R1bXBfcGFnZXNfcGFyYWxsZWxfY3ljbGljKHN0cnVjdCBjYWNoZV9k YXRhICpjZF9oZWFkZXIsCj4+Pj4+Pj4+ICAgCQkJICovCj4+Pj4+Pj4+ICAgCQkJaWYgKCF3cml0 ZV9jYWNoZShjZF9wYWdlLCBwYWdlX2RhdGFfYnVmW2luZGV4XS5idWYsIHBkLnNpemUpKQo+Pj4+ Pj4+PiAgIAkJCQlnb3RvIG91dDsKPj4+Pj4+Pj4gLQo+Pj4+Pj4+PiArCQkJcGFnZV9kYXRhX2J1 ZltpbmRleF0udXNlZCA9IEZBTFNFOwo+Pj4+Pj4+PiAgIAkJfQo+Pj4+Pj4+PiAtdW5sb2NrOgo+ Pj4+Pj4+PiAtCQlwdGhyZWFkX211dGV4X3VubG9jaygmcGFnZV9kYXRhX2J1ZltpbmRleF0ubXV0 ZXgpOwo+Pj4+Pj4+PiArCQlpbmZvLT5wYWdlX2ZsYWdfYnVmW2NvbnN1bWluZ10tPnJlYWR5ID0g RkxBR19VTlVTRUQ7Cj4+Pj4+Pj4+ICsJCWluZm8tPnBhZ2VfZmxhZ19idWZbY29uc3VtaW5nXSA9 IGluZm8tPnBhZ2VfZmxhZ19idWZbY29uc3VtaW5nXS0+bmV4dDsKPj4+Pj4+Pj4gICAJfQo+Pj4+ Pj4+PiAtCj4+Pj4+Pj4+ICtmaW5pc2g6Cj4+Pj4+Pj4+ICAgCXJldCA9IFRSVUU7Cj4+Pj4+Pj4+ ICAgCS8qCj4+Pj4+Pj4+ICAgCSAqIHByaW50IFsxMDAgJV0KPj4+Pj4+Pj4gQEAgLTc0NjMsMTUg Kzc1MzIsOSBAQCBvdXQ6Cj4+Pj4+Pj4+ICAgCQl9Cj4+Pj4+Pj4+ICAgCX0KPj4+Pj4+Pj4KPj4+ Pj4+Pj4gLQlpZiAocGFnZV9kYXRhX2J1ZiAhPSBOVUxMKSB7Cj4+Pj4+Pj4+IC0JCWZvciAoaSA9 IDA7IGkgPCBwYWdlX2RhdGFfbnVtOyBpKyspIHsKPj4+Pj4+Pj4gLQkJCXB0aHJlYWRfbXV0ZXhf ZGVzdHJveSgmcGFnZV9kYXRhX2J1ZltpXS5tdXRleCk7Cj4+Pj4+Pj4+IC0JCX0KPj4+Pj4+Pj4g LQl9Cj4+Pj4+Pj4+IC0KPj4+Pj4+Pj4gKwlzZW1fZGVzdHJveSgmaW5mby0+cGFnZV9mbGFnX2J1 Zl9zZW0pOwo+Pj4+Pj4+PiAgIAlwdGhyZWFkX3J3bG9ja19kZXN0cm95KCZpbmZvLT51c2VtbWFw X3J3bG9jayk7Cj4+Pj4+Pj4+ICAgCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmaW5mby0+ZmlsdGVy X211dGV4KTsKPj4+Pj4+Pj4gLQlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmluZm8tPmNvbnN1bWVk X3Bmbl9tdXRleCk7Cj4+Pj4+Pj4+ICAgCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmaW5mby0+Y3Vy cmVudF9wZm5fbXV0ZXgpOwo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAgIAlyZXR1cm4gcmV0Owo+Pj4+Pj4+ PiBAQCAtNzU2NCw2ICs3NjI3LDcgQEAgd3JpdGVfa2R1bXBfcGFnZXNfY3ljbGljKHN0cnVjdCBj YWNoZV9kYXRhICpjZF9oZWFkZXIsIHN0cnVjdCBjYWNoZV9kYXRhICpjZF9wYWcKPj4+Pj4+Pj4g ICAJCW51bV9kdW1wZWQrKzsKPj4+Pj4+Pj4gICAJCWlmICghcmVhZF9wZm4ocGZuLCBidWYpKQo+ Pj4+Pj4+PiAgIAkJCWdvdG8gb3V0Owo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICAgCQlmaWx0ZXJfZGF0 YV9idWZmZXIoYnVmLCBwZm5fdG9fcGFkZHIocGZuKSwgaW5mby0+cGFnZV9zaXplKTsKPj4+Pj4+ Pj4KPj4+Pj4+Pj4gICAJCS8qCj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9tYWtlZHVtcGZpbGUuaCBi L21ha2VkdW1wZmlsZS5oCj4+Pj4+Pj4+IGluZGV4IGUwYjViYmYuLjRiMzE1YzAgMTAwNjQ0Cj4+ Pj4+Pj4+IC0tLSBhL21ha2VkdW1wZmlsZS5oCj4+Pj4+Pj4+ICsrKyBiL21ha2VkdW1wZmlsZS5o Cj4+Pj4+Pj4+IEBAIC00NCw2ICs0NCw3IEBACj4+Pj4+Pj4+ICAgI2luY2x1ZGUgInByaW50X2lu Zm8uaCIKPj4+Pj4+Pj4gICAjaW5jbHVkZSAic2FkdW1wX21vZC5oIgo+Pj4+Pj4+PiAgICNpbmNs dWRlIDxwdGhyZWFkLmg+Cj4+Pj4+Pj4+ICsjaW5jbHVkZSA8c2VtYXBob3JlLmg+Cj4+Pj4+Pj4+ Cj4+Pj4+Pj4+ICAgLyoKPj4+Pj4+Pj4gICAgKiBSZXN1bHQgb2YgY29tbWFuZAo+Pj4+Pj4+PiBA QCAtOTc3LDcgKzk3OCw3IEBAIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1bG9uZ2xv bmc7Cj4+Pj4+Pj4+ICAgI2RlZmluZSBQQUdFX0RBVEFfTlVNCSg1MCkKPj4+Pj4+Pj4gICAjZGVm aW5lIFdBSVRfVElNRQkoNjAgKiAxMCkKPj4+Pj4+Pj4gICAjZGVmaW5lIFBUSFJFQURfRkFJTAko KHZvaWQgKiktMikKPj4+Pj4+Pj4gLSNkZWZpbmUgTlVNX0JVRkZFUlMJKDUwKQo+Pj4+Pj4+PiAr I2RlZmluZSBOVU1fQlVGRkVSUwkoMjApCj4+Pj4+Pj4+Cj4+Pj4+Pj4+ICAgc3RydWN0IG1tYXBf Y2FjaGUgewo+Pj4+Pj4+PiAgIAljaGFyCSptbWFwX2J1ZjsKPj4+Pj4+Pj4gQEAgLTk4NSwyOCAr OTg2LDMzIEBAIHN0cnVjdCBtbWFwX2NhY2hlIHsKPj4+Pj4+Pj4gICAJb2ZmX3QgICBtbWFwX2Vu ZF9vZmZzZXQ7Cj4+Pj4+Pj4+ICAgfTsKPj4+Pj4+Pj4KPj4+Pj4+Pj4gK2VudW0gewo+Pj4+Pj4+ PiArCUZMQUdfVU5VU0VELAo+Pj4+Pj4+PiArCUZMQUdfUkVBRFksCj4+Pj4+Pj4+ICsJRkxBR19G SUxMSU5HCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4+PiArc3RydWN0IHBhZ2VfZmxhZyB7Cj4+Pj4+Pj4+ ICsJbWRmX3Bmbl90IHBmbjsKPj4+Pj4+Pj4gKwljaGFyIHplcm87Cj4+Pj4+Pj4+ICsJY2hhciBy ZWFkeTsKPj4+Pj4+Pj4gKwlzaG9ydCBpbmRleDsKPj4+Pj4+Pj4gKwlzdHJ1Y3QgcGFnZV9mbGFn ICpuZXh0Owo+Pj4+Pj4+PiArfTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiAgIHN0cnVjdCBwYWdlX2Rh dGEKPj4+Pj4+Pj4gICB7Cj4+Pj4+Pj4+IC0JbWRmX3Bmbl90IHBmbjsKPj4+Pj4+Pj4gLQlpbnQg ZHVtcGFibGU7Cj4+Pj4+Pj4+IC0JaW50IHplcm87Cj4+Pj4+Pj4+IC0JdW5zaWduZWQgaW50IGZs YWdzOwo+Pj4+Pj4+PiAgIAlsb25nIHNpemU7Cj4+Pj4+Pj4+ICAgCXVuc2lnbmVkIGNoYXIgKmJ1 ZjsKPj4+Pj4+Pj4gLQlwdGhyZWFkX211dGV4X3QgbXV0ZXg7Cj4+Pj4+Pj4+IC0JLyoKPj4+Pj4+ Pj4gLQkgKiB3aGV0aGVyIHRoZSBwYWdlX2RhdGEgaXMgcmVhZHkgdG8gYmUgY29uc3VtZWQKPj4+ Pj4+Pj4gLQkgKi8KPj4+Pj4+Pj4gLQlpbnQgcmVhZHk7Cj4+Pj4+Pj4+ICsJaW50IGZsYWdzOwo+ Pj4+Pj4+PiArCWludCB1c2VkOwo+Pj4+Pj4+PiAgIH07Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+ICAgc3Ry dWN0IHRocmVhZF9hcmdzIHsKPj4+Pj4+Pj4gICAJaW50IHRocmVhZF9udW07Cj4+Pj4+Pj4+ICAg CXVuc2lnbmVkIGxvbmcgbGVuX2J1Zl9vdXQ7Cj4+Pj4+Pj4+IC0JbWRmX3Bmbl90IHN0YXJ0X3Bm biwgZW5kX3BmbjsKPj4+Pj4+Pj4gLQlpbnQgcGFnZV9kYXRhX251bTsKPj4+Pj4+Pj4gICAJc3Ry dWN0IGN5Y2xlICpjeWNsZTsKPj4+Pj4+Pj4gICAJc3RydWN0IHBhZ2VfZGF0YSAqcGFnZV9kYXRh X2J1ZjsKPj4+Pj4+Pj4gKwlzdHJ1Y3QgcGFnZV9mbGFnICpwYWdlX2ZsYWdfYnVmOwo+Pj4+Pj4+ PiAgIH07Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+ICAgLyoKPj4+Pj4+Pj4gQEAgLTEyOTUsMTEgKzEzMDEs MTIgQEAgc3RydWN0IER1bXBJbmZvIHsKPj4+Pj4+Pj4gICAJcHRocmVhZF90ICoqdGhyZWFkczsK Pj4+Pj4+Pj4gICAJc3RydWN0IHRocmVhZF9hcmdzICprZHVtcF90aHJlYWRfYXJnczsKPj4+Pj4+ Pj4gICAJc3RydWN0IHBhZ2VfZGF0YSAqcGFnZV9kYXRhX2J1ZjsKPj4+Pj4+Pj4gKwlzdHJ1Y3Qg cGFnZV9mbGFnICoqcGFnZV9mbGFnX2J1ZjsKPj4+Pj4+Pj4gKwlzZW1fdCBwYWdlX2ZsYWdfYnVm X3NlbTsKPj4+Pj4+Pj4gICAJcHRocmVhZF9yd2xvY2tfdCB1c2VtbWFwX3J3bG9jazsKPj4+Pj4+ Pj4gICAJbWRmX3Bmbl90IGN1cnJlbnRfcGZuOwo+Pj4+Pj4+PiAgIAlwdGhyZWFkX211dGV4X3Qg Y3VycmVudF9wZm5fbXV0ZXg7Cj4+Pj4+Pj4+IC0JbWRmX3Bmbl90IGNvbnN1bWVkX3BmbjsKPj4+ Pj4+Pj4gLQlwdGhyZWFkX211dGV4X3QgY29uc3VtZWRfcGZuX211dGV4Owo+Pj4+Pj4+PiArCXB0 aHJlYWRfbXV0ZXhfdCBwYWdlX2RhdGFfbXV0ZXg7Cj4+Pj4+Pj4+ICAgCXB0aHJlYWRfbXV0ZXhf dCBmaWx0ZXJfbXV0ZXg7Cj4+Pj4+Pj4+ICAgfTsKPj4+Pj4+Pj4gICBleHRlcm4gc3RydWN0IER1 bXBJbmZvCQkqaW5mbzsKPj4+Pj4+Pj4gLS0KPj4+Pj4+Pj4gMS44LjMuMQo+Pj4+Pj4+Pgo+Pj4+ Pj4+Pgo+Pj4+Pj4+Pgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+Pj4+Pj4+PiBrZXhlYyBtYWlsaW5nIGxpc3QKPj4+Pj4+ Pj4ga2V4ZWNAbGlzdHMuaW5mcmFkZWFkLm9yZwo+Pj4+Pj4+PiBodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2tleGVjCj4+Pj4+Pj4KPj4+Pj4+Pgo+Pj4+Pj4KPj4+ Pj4+Cj4+Pj4+Pgo+Pj4+Pj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KPj4+Pj4+IGtleGVjIG1haWxpbmcgbGlzdAo+Pj4+Pj4ga2V4ZWNAbGlzdHMuaW5m cmFkZWFkLm9yZwo+Pj4+Pj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9rZXhlYwoKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18Ka2V4ZWMgbWFpbGluZyBsaXN0CmtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9rZXhlYwo=