From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9B901A04C9; Mon, 14 Sep 2020 10:26:36 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 842F71C0CF; Mon, 14 Sep 2020 10:26:36 +0200 (CEST) Received: from m1362.mail.163.com (m1362.mail.163.com [220.181.13.62]) by dpdk.org (Postfix) with ESMTP id 6E86B1C0CA for ; Mon, 14 Sep 2020 10:26:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Date:From:Subject:MIME-Version:Message-ID; bh=ZXEjg tzhkQqoRAxYVS9GkBf2gmHK0yHKDKcD/THqTG8=; b=EMpa2KA1G3Ar0fBWcyyNa KpRH/QlY4rb/+IutpQuneCSU7B6gyXLQvOqmYqS9pQglu4ynbekKua7zlMmO02PJ Gg1elIeLBJ/COZkXMXOCkjpkM/xGYBL2Kmz/38v/SILQAEh6lDDM1Q0J7WlkLtgL UT38LT5jr6c2fgZDk5964s= Received: from yang_y_yi$163.com ( [111.207.123.58] ) by ajax-webmail-wmsvr62 (Coremail) ; Mon, 14 Sep 2020 16:26:31 +0800 (CST) X-Originating-IP: [111.207.123.58] Date: Mon, 14 Sep 2020 16:26:31 +0800 (CST) From: yang_y_yi To: "Jiayu Hu" Cc: thomas@monjalon.net, yangyi01@inspur.com, dev@dpdk.org X-Priority: 1 X-Mailer: Coremail Webmail Server Version XT5.0.10 build 20190724(ac680a23) Copyright (c) 2002-2020 www.mailtech.cn 163com In-Reply-To: <20200914042126.GA15258@NPG_DPDK_VIRTIO_jiayuhu_15.sh.intel.com> References: <20200910092914.120452-1-yang_y_yi@163.com> <20200910092914.120452-3-yang_y_yi@163.com> <20200911042416.GA46174@NPG_DPDK_VIRTIO_jiayuhu_15.sh.intel.com> <1623572b.1b82.1748a63b63f.Coremail.yang_y_yi@163.com> <20200914042126.GA15258@NPG_DPDK_VIRTIO_jiayuhu_15.sh.intel.com> X-CM-CTRLDATA: br5qAGZvb3Rlcl9odG09MzUyMDY6NTY= MIME-Version: 1.0 Message-ID: <20ddfcd3.5b19.1748bb90144.Coremail.yang_y_yi@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID: PsGowABXXHQ3KV9fepJ4AA--.32329W X-CM-SenderInfo: 51dqwsp1b1xqqrwthudrp/1tbiMwKfi1Xl6OzDGQABsK X-Coremail-Antispam: 1U5529EdanIXcx71UUUUU7vcSsGvfC2KfnxnUU== Content-Type: text/plain; charset=GBK Content-Transfer-Encoding: base64 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH v5 2/2] gro: add VXLAN UDP GRO support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Rm9yIG91dGVyX2lwX2lkLCB0aGVyZSBpcyBzYW1lIGlwX2lkIGRpc29yZGVyIGlzc3VlIGV4aXN0 aW5nIGFzIFVEUCBHUk8sIHNvIHdlIGNhbid0IHVzZSBpcF9pZCArLy0xIHRvIGNoZWNrIGlmIHRo ZXkgYXJlIHNhbWUgZmxvdywgaGVyZSBpcyBteSBpbmNybWVudGFsIGNoYW5nZSBmb3IgaXQgd2l0 aCBtb3JlIGNvbW1lbnRzLgoKCgoKCkBAIC0xODksNyArMTg4LDEyIEBACiBpc19zYW1lX3Z4bGFu X3VkcDRfZmxvdyhzdHJ1Y3QgdnhsYW5fdWRwNF9mbG93X2tleSBrMSwKICAgICAgICAgICAgICAg IHN0cnVjdCB2eGxhbl91ZHA0X2Zsb3dfa2V5IGsyKQogewotICAgICAgIC8qIHNyYyBwb3J0IGlz IGNoYW5naW5nLCBzbyBzaG91bGRuJ3QgdXNlIGl0IGZvciBmbG93IGNoZWNrICovCisgICAgICAg LyogRm9yIFZ4TEFOIHBhY2tldCwgb3V0ZXIgdWRwIHNyYyBwb3J0IGlzIGNhbGN1bGF0ZWQgZnJv bQorICAgICAgICAqIGlubmVyIHBhY2tldCBSU1MgaGFzaCwgdWRwIHNyYyBwb3J0IG9mIHRoZSBm aXJzdCBVRFAKKyAgICAgICAgKiBmcmFnbWVudCBpcyBkaWZmZXJlbnQgZnJvbSBvbmUgb2Ygb3Ro ZXIgVURQIGZyYWdtZW50cworICAgICAgICAqIGV2ZW4gaWYgdGhleSBhcmUgc2FtZSBmbG93LCBz byB3ZSBoYXZlIHRvIHNraXAgb3V0ZXIgdWRwCisgICAgICAgICogc3JjIHBvcnQgY29tcGFyaXNv biBoZXJlLgorICAgICAgICAqLwogICAgICAgIHJldHVybiAocnRlX2lzX3NhbWVfZXRoZXJfYWRk cigmazEub3V0ZXJfZXRoX3NhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmsyLm91dGVyX2V0aF9zYWRkcikgJiYKICAgICAgICAgICAgICAgICAgICAgICAgcnRl X2lzX3NhbWVfZXRoZXJfYWRkcigmazEub3V0ZXJfZXRoX2RhZGRyLApAQCAtMjEyLDEyICsyMTYs MTYgQEAKICAgICAgICB1aW50MTZfdCBsMl9vZmZzZXQ7CiAgICAgICAgaW50IHJldCA9IDA7Cgor ICAgICAgIC8qIE5vdGU6IGlmIG91dGVyIERGIGJpdCBpcyBzZXQsIGkuZSBvdXRlcl9pc19hdG9t aWMgaXMgMCwKKyAgICAgICAgKiB3ZSBuZWVkbid0IGNvbXBhcmUgb3V0ZXJfaXBfaWQgYmVjYXVz ZSB0aGV5IGFyZSBzYW1lLAorICAgICAgICAqIGZvciB0aGUgY2FzZSBvdXRlcl9pc19hdG9taWMg aXMgMSwgd2UgYWxzbyBoYXZlIG5vIHdheQorICAgICAgICAqIHRvIGNvbWFwcmUgb3V0ZXJfaXBf aWQgYmVjYXVzZSB0aGUgcmVjZWl2ZWQgcGFja2V0cyBjYW4KKyAgICAgICAgKiBiZSBvdXQgb2Yg b3JkZXIuIFNvIGlnbm9yZSBvdXRlcl9pcF9pZCBjb21wYXJpc29uIGhlcmUuCisgICAgICAgICov CisKICAgICAgICBsMl9vZmZzZXQgPSBwa3QtPm91dGVyX2wyX2xlbiArIHBrdC0+b3V0ZXJfbDNf bGVuOwogICAgICAgIGNtcCA9IHVkcDRfY2hlY2tfbmVpZ2hib3IoJml0ZW0tPmlubmVyX2l0ZW0s IGZyYWdfb2Zmc2V0LCBpcF9kbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGwyX29mZnNldCk7Ci0gICAgICAgLyogVlhMQU4gb3V0ZXIgSVAgSUQgaXMgb3V0IG9mIG9y ZGVyLCBzbyBkb24ndCB0b3VjaCBpdCBhbmQKLSAgICAgICAgKiBkb24ndCBjb21wYXJlIGl0Lgot ICAgICAgICAqLwogICAgICAgIGlmIChjbXAgPiAwKQogICAgICAgICAgICAgICAgLyogQXBwZW5k IHRoZSBuZXcgcGFja2V0LiAqLwogICAgICAgICAgICAgICAgcmV0ID0gMTsKQEAgLTM1NCw3ICsz NjIsOSBAQAogICAgICAgIHJ0ZV9ldGhlcl9hZGRyX2NvcHkoJihvdXRlcl9ldGhfaGRyLT5kX2Fk ZHIpLCAmKGtleS5vdXRlcl9ldGhfZGFkZHIpKTsKICAgICAgICBrZXkub3V0ZXJfaXBfc3JjX2Fk ZHIgPSBvdXRlcl9pcHY0X2hkci0+c3JjX2FkZHI7CiAgICAgICAga2V5Lm91dGVyX2lwX2RzdF9h ZGRyID0gb3V0ZXJfaXB2NF9oZHItPmRzdF9hZGRyOwotICAgICAgIGtleS5vdXRlcl9zcmNfcG9y dCA9IHVkcF9oZHItPnNyY19wb3J0OworICAgICAgIC8qIE5vdGU6IEl0IGlzIHVubmVjZXNzYXJ5 IHRvIHNhdmUgb3V0ZXJfc3JjX3BvcnQgaGVyZSBiZWNhdXNlIGl0IGNhbgorICAgICAgICAqIGJl IGRpZmZlcmVudCBmb3IgVnhMQU4gVURQIGZyYWdtZW50cyBmcm9tIHRoZSBzYW1lIGZsb3cuCisg ICAgICAgICovCiAgICAgICAga2V5Lm91dGVyX2RzdF9wb3J0ID0gdWRwX2hkci0+ZHN0X3BvcnQ7 CgogICAgICAgIC8qIFNlYXJjaCBmb3IgYSBtYXRjaGVkIGZsb3cuICovCgoKCgoKCgoKCgoKCkF0 IDIwMjAtMDktMTQgMTI6MjE6MjYsICJKaWF5dSBIdSIgPGppYXl1Lmh1QGludGVsLmNvbT4gd3Jv dGU6Cj5SZXBsaWVzIGFyZSBpbmxpbmUuCj4KPkJUVywgeW91IG5lZWQgdG8gdXBkYXRlIHRoZSBw cm9ncmFtbWVyIGd1aWRlCj5kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvZ2VuZXJpY19yZWNlaXZlX29m ZmxvYWRfbGliLnJzdCBhbmQKPnJlbGVhc2Ugbm90ZSBkb2MvZ3VpZGVzL3JlbF9ub3Rlcy9yZWxl YXNlXzIwXzExLnJzdC4KPgo+VGhhbmtzLAo+SmlheXUKPgo+T24gTW9uLCBTZXAgMTQsIDIwMjAg YXQgMTA6MTM6NDRBTSArMDgwMCwgeWFuZ195X3lpIHdyb3RlOgo+PiBKaWF5dSwgdGhhbmsgeW91 IHNvIG11Y2gsIHBsZWFzZSBjaGVjayBteSByZXBsaWVzIGZvciBzb21lIG9mIHlvdXIgY29tbWVu dHMsCj4+IGhlcmUgaXMgaW5jcmVtZW50YWwgcGF0Y2guIEkgYnVpbHQgaXQgYnkgbWVzb24gdGhp cyB0aW1lIDotKQo+PiAKPj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfZ3JvL2dyb192eGxhbl91 ZHA0LmMgYi9saWIvbGlicnRlX2dyby9ncm9fdnhsYW5fdWRwNC5jCj4+IGluZGV4IDllOWRmNzIu LjFmY2ZhZjEgMTAwNjQ0Cj4+IC0tLSBhL2xpYi9saWJydGVfZ3JvL2dyb192eGxhbl91ZHA0LmMK Pj4gKysrIGIvbGliL2xpYnJ0ZV9ncm8vZ3JvX3Z4bGFuX3VkcDQuYwo+PiBAQCAtMjAzLDcgKzIw Myw3IEBACj4+ICB9Cj4+IAo+PiAgc3RhdGljIGlubGluZSBpbnQKPj4gLXVkcF9jaGVja192eGxh bl9uZWlnaGJvcihzdHJ1Y3QgZ3JvX3Z4bGFuX3VkcDRfaXRlbSAqaXRlbSwKPj4gK3VkcDRfY2hl Y2tfdnhsYW5fbmVpZ2hib3Ioc3RydWN0IGdyb192eGxhbl91ZHA0X2l0ZW0gKml0ZW0sCj4+ICAg ICAgICAgICAgICAgICB1aW50MTZfdCBmcmFnX29mZnNldCwKPj4gICAgICAgICAgICAgICAgIHVp bnQxNl90IGlwX2RsKQo+PiAgewo+PiBAQCAtMjEzLDcgKzIxMyw3IEBACj4+ICAgICAgICAgaW50 IHJldCA9IDA7Cj4+IAo+PiAgICAgICAgIGwyX29mZnNldCA9IHBrdC0+b3V0ZXJfbDJfbGVuICsg cGt0LT5vdXRlcl9sM19sZW47Cj4+IC0gICAgICAgY21wID0gdWRwX2NoZWNrX25laWdoYm9yKCZp dGVtLT5pbm5lcl9pdGVtLCBmcmFnX29mZnNldCwgaXBfZGwsCj4+ICsgICAgICAgY21wID0gdWRw NF9jaGVja19uZWlnaGJvcigmaXRlbS0+aW5uZXJfaXRlbSwgZnJhZ19vZmZzZXQsIGlwX2RsLAo+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDJfb2Zmc2V0KTsKPj4g ICAgICAgICAvKiBWWExBTiBvdXRlciBJUCBJRCBpcyBvdXQgb2Ygb3JkZXIsIHNvIGRvbid0IHRv dWNoIGl0IGFuZAo+PiAgICAgICAgICAqIGRvbid0IGNvbXBhcmUgaXQuCj4+IEBAIC0zNzksNyAr Mzc5LDcgQEAKPj4gICAgICAgICAgICAgICAgIGl0ZW1faWR4ID0gaW5zZXJ0X25ld19pdGVtKHRi bCwgcGt0LCBzdGFydF90aW1lLAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElO VkFMSURfQVJSQVlfSU5ERVgsIGZyYWdfb2Zmc2V0LAo+PiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlzX2xhc3RfZnJhZywgb3V0ZXJfaXBfaWQsIG91dGVyX2lzX2F0b21pYyk7Cj4+ IC0gICAgICAgICAgICAgICBpZiAoaXRlbV9pZHggPT0gSU5WQUxJRF9BUlJBWV9JTkRFWCkKPj4g KyAgICAgICAgICAgICAgIGlmICh1bmxpa2VseShpdGVtX2lkeCA9PSBJTlZBTElEX0FSUkFZX0lO REVYKSkKPj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwo+PiAgICAgICAgICAg ICAgICAgaWYgKGluc2VydF9uZXdfZmxvdyh0YmwsICZrZXksIGl0ZW1faWR4KSA9PQo+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVkFMSURfQVJSQVlfSU5ERVgpIHsKPj4gQEAg LTM5Nyw3ICszOTcsNyBAQAo+PiAgICAgICAgIGN1cl9pZHggPSB0YmwtPmZsb3dzW2ldLnN0YXJ0 X2luZGV4Owo+PiAgICAgICAgIHByZXZfaWR4ID0gY3VyX2lkeDsKPj4gICAgICAgICBkbyB7Cj4+ IC0gICAgICAgICAgICAgICBjbXAgPSB1ZHBfY2hlY2tfdnhsYW5fbmVpZ2hib3IoJih0YmwtPml0 ZW1zW2N1cl9pZHhdKSwKPj4gKyAgICAgICAgICAgICAgIGNtcCA9IHVkcDRfY2hlY2tfdnhsYW5f bmVpZ2hib3IoJih0YmwtPml0ZW1zW2N1cl9pZHhdKSwKPj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmcmFnX29mZnNldCwgaXBfZGwpOwo+PiAgICAgICAgICAgICAgICAgaWYgKGNt cCkgewo+PiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVyZ2VfdHdvX3Z4bGFuX3VkcDRf cGFja2V0cygKPj4gQEAgLTQzNiw3ICs0MzYsNyBAQAo+PiAgICAgICAgICAgICAgICAgaXRlbV9p ZHggPSBpbnNlcnRfbmV3X2l0ZW0odGJsLCBwa3QsIHN0YXJ0X3RpbWUsCj4+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9BUlJBWV9JTkRFWCwgZnJhZ19vZmZzZXQsCj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbGFzdF9mcmFnLCBvdXRlcl9pcF9p ZCwgb3V0ZXJfaXNfYXRvbWljKTsKPj4gLSAgICAgICAgICAgICAgIGlmIChpdGVtX2lkeCA9PSBJ TlZBTElEX0FSUkFZX0lOREVYKQo+PiArICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KGl0ZW1f aWR4ID09IElOVkFMSURfQVJSQVlfSU5ERVgpKQo+PiAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gLTE7Cj4+ICAgICAgICAgICAgICAgICB0YmwtPml0ZW1zW2l0ZW1faWR4XS5pbm5lcl9p dGVtLm5leHRfcGt0X2lkeCA9IGN1cl9pZHg7Cj4+ICAgICAgICAgICAgICAgICB0YmwtPmZsb3dz W2ldLnN0YXJ0X2luZGV4ID0gaXRlbV9pZHg7Cj4+IEBAIC00NzAsNyArNDcwLDcgQEAKPj4gICAg ICAgICAgICAgICAgIGlwX2RsID0gcGt0LT5wa3RfbGVuIC0gaGRyX2xlbjsKPj4gZGlmZiAtLWdp dCBhL2xpYi9saWJydGVfZ3JvL2dyb192eGxhbl91ZHA0LmMgYi9saWIvbGlicnRlX2dyby9ncm9f dnhsYW5fdWRwNC5jCj4+IGluZGV4IDllOWRmNzIuLjFmY2ZhZjEgMTAwNjQ0Cj4+IC0tLSBhL2xp Yi9saWJydGVfZ3JvL2dyb192eGxhbl91ZHA0LmMKPj4gKysrIGIvbGliL2xpYnJ0ZV9ncm8vZ3Jv X3Z4bGFuX3VkcDQuYwo+PiBAQCAtMjAzLDcgKzIwMyw3IEBACj4+ICB9Cj4+IAo+PiAgc3RhdGlj IGlubGluZSBpbnQKPj4gLXVkcF9jaGVja192eGxhbl9uZWlnaGJvcihzdHJ1Y3QgZ3JvX3Z4bGFu X3VkcDRfaXRlbSAqaXRlbSwKPj4gK3VkcDRfY2hlY2tfdnhsYW5fbmVpZ2hib3Ioc3RydWN0IGdy b192eGxhbl91ZHA0X2l0ZW0gKml0ZW0sCj4+ICAgICAgICAgICAgICAgICB1aW50MTZfdCBmcmFn X29mZnNldCwKPj4gICAgICAgICAgICAgICAgIHVpbnQxNl90IGlwX2RsKQo+PiAgewo+PiBAQCAt MjEzLDcgKzIxMyw3IEBACj4+ICAgICAgICAgaW50IHJldCA9IDA7Cj4+IAo+PiAgICAgICAgIGwy X29mZnNldCA9IHBrdC0+b3V0ZXJfbDJfbGVuICsgcGt0LT5vdXRlcl9sM19sZW47Cj4+IC0gICAg ICAgY21wID0gdWRwX2NoZWNrX25laWdoYm9yKCZpdGVtLT5pbm5lcl9pdGVtLCBmcmFnX29mZnNl dCwgaXBfZGwsCj4+ICsgICAgICAgY21wID0gdWRwNF9jaGVja19uZWlnaGJvcigmaXRlbS0+aW5u ZXJfaXRlbSwgZnJhZ19vZmZzZXQsIGlwX2RsLAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbDJfb2Zmc2V0KTsKPj4gICAgICAgICAvKiBWWExBTiBvdXRlciBJUCBJ RCBpcyBvdXQgb2Ygb3JkZXIsIHNvIGRvbid0IHRvdWNoIGl0IGFuZAo+PiAgICAgICAgICAqIGRv bid0IGNvbXBhcmUgaXQuCj4+IEBAIC0zNzksNyArMzc5LDcgQEAKPj4gICAgICAgICAgICAgICAg IGl0ZW1faWR4ID0gaW5zZXJ0X25ld19pdGVtKHRibCwgcGt0LCBzdGFydF90aW1lLAo+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVkFMSURfQVJSQVlfSU5ERVgsIGZyYWdfb2Zm c2V0LAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2xhc3RfZnJhZywgb3V0 ZXJfaXBfaWQsIG91dGVyX2lzX2F0b21pYyk7Cj4+IC0gICAgICAgICAgICAgICBpZiAoaXRlbV9p ZHggPT0gSU5WQUxJRF9BUlJBWV9JTkRFWCkKPj4gKyAgICAgICAgICAgICAgIGlmICh1bmxpa2Vs eShpdGVtX2lkeCA9PSBJTlZBTElEX0FSUkFZX0lOREVYKSkKPj4gICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIC0xOwo+PiAgICAgICAgICAgICAgICAgaWYgKGluc2VydF9uZXdfZmxvdyh0 YmwsICZrZXksIGl0ZW1faWR4KSA9PQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElOVkFMSURfQVJSQVlfSU5ERVgpIHsKPj4gQEAgLTM5Nyw3ICszOTcsNyBAQAo+PiAgICAgICAg IGN1cl9pZHggPSB0YmwtPmZsb3dzW2ldLnN0YXJ0X2luZGV4Owo+PiAgICAgICAgIHByZXZfaWR4 ID0gY3VyX2lkeDsKPj4gICAgICAgICBkbyB7Cj4+IC0gICAgICAgICAgICAgICBjbXAgPSB1ZHBf Y2hlY2tfdnhsYW5fbmVpZ2hib3IoJih0YmwtPml0ZW1zW2N1cl9pZHhdKSwKPj4gKyAgICAgICAg ICAgICAgIGNtcCA9IHVkcDRfY2hlY2tfdnhsYW5fbmVpZ2hib3IoJih0YmwtPml0ZW1zW2N1cl9p ZHhdKSwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnX29mZnNldCwgaXBf ZGwpOwo+PiAgICAgICAgICAgICAgICAgaWYgKGNtcCkgewo+PiAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAobWVyZ2VfdHdvX3Z4bGFuX3VkcDRfcGFja2V0cygKPj4gQEAgLTQzNiw3ICs0MzYs NyBAQAo+PiAgICAgICAgICAgICAgICAgaXRlbV9pZHggPSBpbnNlcnRfbmV3X2l0ZW0odGJsLCBw a3QsIHN0YXJ0X3RpbWUsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJ RF9BUlJBWV9JTkRFWCwgZnJhZ19vZmZzZXQsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaXNfbGFzdF9mcmFnLCBvdXRlcl9pcF9pZCwgb3V0ZXJfaXNfYXRvbWljKTsKPj4gLSAg ICAgICAgICAgICAgIGlmIChpdGVtX2lkeCA9PSBJTlZBTElEX0FSUkFZX0lOREVYKQo+PiArICAg ICAgICAgICAgICAgaWYgKHVubGlrZWx5KGl0ZW1faWR4ID09IElOVkFMSURfQVJSQVlfSU5ERVgp KQo+PiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cj4+ICAgICAgICAgICAgICAg ICB0YmwtPml0ZW1zW2l0ZW1faWR4XS5pbm5lcl9pdGVtLm5leHRfcGt0X2lkeCA9IGN1cl9pZHg7 Cj4+ICAgICAgICAgICAgICAgICB0YmwtPmZsb3dzW2ldLnN0YXJ0X2luZGV4ID0gaXRlbV9pZHg7 Cj4+IEBAIC00NzAsNyArNDcwLDcgQEAKPj4gICAgICAgICAgICAgICAgIGlwX2RsID0gcGt0LT5w a3RfbGVuIC0gaGRyX2xlbjsKPj4gICAgICAgICAgICAgICAgIGZyYWdfb2Zmc2V0ID0gdGJsLT5p dGVtc1tpdGVtX2lkeF0uaW5uZXJfaXRlbS5mcmFnX29mZnNldDsKPj4gICAgICAgICAgICAgICAg IGlzX2xhc3RfZnJhZyA9IHRibC0+aXRlbXNbaXRlbV9pZHhdLmlubmVyX2l0ZW0uaXNfbGFzdF9m cmFnOwo+PiAtICAgICAgICAgICAgICAgY21wID0gdWRwX2NoZWNrX3Z4bGFuX25laWdoYm9yKCYo dGJsLT5pdGVtc1tzdGFydF9pZHhdKSwKPj4gKyAgICAgICAgICAgICAgIGNtcCA9IHVkcDRfY2hl Y2tfdnhsYW5fbmVpZ2hib3IoJih0YmwtPml0ZW1zW3N0YXJ0X2lkeF0pLAo+PiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ19vZmZzZXQsIGlwX2RsKTsKPj4gICAg ICAgICAgICAgICAgIGlmIChjbXApIHsKPj4gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1l cmdlX3R3b192eGxhbl91ZHA0X3BhY2tldHMoCj4+IEBAIC00ODEsMTIgKzQ4MSwxMCBAQAo+PiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElO VkFMSURfQVJSQVlfSU5ERVgpOwo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRi bC0+aXRlbXNbc3RhcnRfaWR4XS5pbm5lcl9pdGVtLm5leHRfcGt0X2lkeAo+PiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpdGVtX2lkeDsKPj4gLSAgICAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4+IC0gICAgICAgICAg ICAgICAgICAgICAgIH0KPj4gLSAgICAgICAgICAgICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgICAg ICAgICB9IGVsc2UKPj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4+IC0gICAg ICAgICAgICAgICB9Cj4+ICAgICAgICAgfQo+PiAKPj4gICAgICAgICByZXR1cm4gMDsKPj4gCj4+ IAo+PiBBdCAyMDIwLTA5LTExIDEyOjI0OjE2LCAiSmlheXUgSHUiIDxqaWF5dS5odUBpbnRlbC5j b20+IHdyb3RlOgo+PiA+U29tZSBjb21tZW50cyBhcmUgaW5saW5lLgo+PiA+Cj4+ID5UaGFua3Ms Cj4+ID5KaWF5dQo+PiA+Cj4+ID5PbiBUaHUsIFNlcCAxMCwgMjAyMCBhdCAwNToyOToxNFBNICsw ODAwLCB5YW5nX3lfeWlAMTYzLmNvbSB3cm90ZToKPj4gPj4gRnJvbTogWWkgWWFuZyA8eWFuZ3lp MDFAaW5zcHVyLmNvbT4KPj4gPj4KPj4gPj4gVlhMQU4gVURQIEdSTyBjYW4gaGVscCBpbXByb3Zl IFZNLXRvLVZNIFVEUCBwZXJmb3JtYW5jZQo+PiA+PiB3aGVuIFZNIGlzIGVuYWJsZWQgVUZPIG9y IEdTTywgR1JPIG11c3QgYmUgc3VwcG9ydGVkIGlmCj4+ID4+IEdTTyBvciBVRk8gaXMgZW5hYmxl ZCwgb3RoZXJ3aXNlLCBwZXJmb3JtYW5jZSBnYWluIHdpbGwKPj4gPj4gYmUgaHVydC4KPj4gPj4K Pj4gPj4gV2l0aCB0aGlzIGVuYWJsZWQgaW4gRFBESywgT1ZTIERQREsgY2FuIGxldmVyYWdlIGl0 IHRvCj4+ID4+IGltcHJvdmUgVk0tdG8tVk0gVURQIHBlcmZvcm1hbmNlLCB0aGlzIHdpbGwgbWFr ZSBzdXJlCj4+ID4+IElQIGZyYWdtZW50cyB3aWxsIGJlIHJlYXNzZW1ibGVkIG9uY2UgaXQgaXMg cmVjZWl2ZWQKPj4gPj4gZnJvbSBwaHlzaWNhbCBOSUMuIEl0IGlzIHZlcnkgaGVscGZ1bCBpbiBP VlMgRFBESyBWWExBTgo+PiA+PiBUU08gY2FzZS4KPj4gPj4KPj4gPj4gU2lnbmVkLW9mZi1ieTog WWkgWWFuZyA8eWFuZ3lpMDFAaW5zcHVyLmNvbT4KPj4gPj4gLS0tCj4+ID4+ICBsaWIvbGlicnRl X2dyby9ncm9fdWRwNC5oICAgICAgIHwgICAxICsKPj4gPj4gIGxpYi9saWJydGVfZ3JvL2dyb192 eGxhbl91ZHA0LmMgfCA1NDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+PiA+PiAgbGliL2xpYnJ0ZV9ncm8vZ3JvX3Z4bGFuX3VkcDQuaCB8IDE1MiArKysrKysrKysr Kwo+PiA+PiAgbGliL2xpYnJ0ZV9ncm8vbWVzb24uYnVpbGQgICAgICB8ICAgMiArLQo+PiA+PiAg bGliL2xpYnJ0ZV9ncm8vcnRlX2dyby5jICAgICAgICB8IDExNSArKysrKysrLS0KPj4gPj4gIGxp Yi9saWJydGVfZ3JvL3J0ZV9ncm8uaCAgICAgICAgfCAgIDMgKwo+PiA+PiAgNiBmaWxlcyBjaGFu Z2VkLCA3OTQgaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25zKC0pCj4+ID4+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgbGliL2xpYnJ0ZV9ncm8vZ3JvX3Z4bGFuX3VkcDQuYwo+PiA+PiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYi9saWJydGVfZ3JvL2dyb192eGxhbl91ZHA0LmgKPj4gPj4KPj4gPj4gZGlm ZiAtLWdpdCBhL2xpYi9saWJydGVfZ3JvL2dyb191ZHA0LmggYi9saWIvbGlicnRlX2dyby9ncm9f dWRwNC5oCj4+ID4+IGluZGV4IDBhMDc4ZTQuLmQzOGIzOTMgMTAwNjQ0Cj4+ID4+IC0tLSBhL2xp Yi9saWJydGVfZ3JvL2dyb191ZHA0LmgKPj4gPj4gKysrIGIvbGliL2xpYnJ0ZV9ncm8vZ3JvX3Vk cDQuaAo+PiA+PiBAQCAtNyw2ICs3LDcgQEAKPj4gPj4KPj4gPj4gICNpbmNsdWRlIDxydGVfaXAu aD4KPj4gPj4gICNpbmNsdWRlIDxydGVfdWRwLmg+Cj4+ID4+ICsjaW5jbHVkZSA8cnRlX3Z4bGFu Lmg+Cj4+ID4+Cj4+ID4+ICAjZGVmaW5lIElOVkFMSURfQVJSQVlfSU5ERVggMHhmZmZmZmZmZlVM Cj4+ID4+ICAjZGVmaW5lIEdST19VRFA0X1RCTF9NQVhfSVRFTV9OVU0gKDEwMjRVTCAqIDEwMjRV TCkKPj4gPj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfZ3JvL2dyb192eGxhbl91ZHA0LmMgYi9s aWIvbGlicnRlX2dyby9ncm9fdnhsYW5fdWRwNC5jCj4+ID4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4+ID4+IGluZGV4IDAwMDAwMDAuLjllOWRmNzIKPj4gPj4gLS0tIC9kZXYvbnVsbAo+PiA+PiAr KysgYi9saWIvbGlicnRlX2dyby9ncm9fdnhsYW5fdWRwNC5jCj4+ID4+IEBAIC0wLDAgKzEsNTQ4 IEBACj4+ID4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCj4+ID4+ ICsgKiBDb3B5cmlnaHQoYykgMjAyMCBJbnNwdXIgQ29ycG9yYXRpb24KPj4gPj4gKyAqLwo+PiA+ PiArCj4+ID4+ICsKPj4gPj4gKwo+PiA+PiArc3RhdGljIGlubGluZSB1aW50MzJfdAo+PiA+PiAr ZGVsZXRlX2l0ZW0oc3RydWN0IGdyb192eGxhbl91ZHA0X3RibCAqdGJsLAo+PiA+PiArICAgICAg ICAgICAgdWludDMyX3QgaXRlbV9pZHgsCj4+ID4+ICsgICAgICAgICAgICB1aW50MzJfdCBwcmV2 X2l0ZW1faWR4KQo+PiA+PiArewo+PiA+PiArICAgIHVpbnQzMl90IG5leHRfaWR4ID0gdGJsLT5p dGVtc1tpdGVtX2lkeF0uaW5uZXJfaXRlbS5uZXh0X3BrdF9pZHg7Cj4+ID4+ICsKPj4gPj4gKyAg ICAvKiBOVUxMIGluZGljYXRlcyBhbiBlbXB0eSBpdGVtLiAqLwo+PiA+PiArICAgIHRibC0+aXRl bXNbaXRlbV9pZHhdLmlubmVyX2l0ZW0uZmlyc3RzZWcgPSBOVUxMOwo+PiA+PiArICAgIHRibC0+ aXRlbV9udW0tLTsKPj4gPj4gKyAgICBpZiAocHJldl9pdGVtX2lkeCAhPSBJTlZBTElEX0FSUkFZ X0lOREVYKQo+PiA+PiArICAgICAgICAgICAgdGJsLT5pdGVtc1twcmV2X2l0ZW1faWR4XS5pbm5l cl9pdGVtLm5leHRfcGt0X2lkeCA9IG5leHRfaWR4Owo+PiA+PiArCj4+ID4+ICsgICAgcmV0dXJu IG5leHRfaWR4Owo+PiA+PiArfQo+PiA+PiArCj4+ID4+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90 Cj4+ID4+ICtpbnNlcnRfbmV3X2Zsb3coc3RydWN0IGdyb192eGxhbl91ZHA0X3RibCAqdGJsLAo+ PiA+PiArICAgICAgICAgICAgc3RydWN0IHZ4bGFuX3VkcDRfZmxvd19rZXkgKnNyYywKPj4gPj4g KyAgICAgICAgICAgIHVpbnQzMl90IGl0ZW1faWR4KQo+PiA+PiArewo+PiA+PiArICAgIHN0cnVj dCB2eGxhbl91ZHA0X2Zsb3dfa2V5ICpkc3Q7Cj4+ID4+ICsgICAgdWludDMyX3QgZmxvd19pZHg7 Cj4+ID4+ICsKPj4gPj4gKyAgICBmbG93X2lkeCA9IGZpbmRfYW5fZW1wdHlfZmxvdyh0YmwpOwo+ PiA+PiArICAgIGlmICh1bmxpa2VseShmbG93X2lkeCA9PSBJTlZBTElEX0FSUkFZX0lOREVYKSkK Pj4gPj4gKyAgICAgICAgICAgIHJldHVybiBJTlZBTElEX0FSUkFZX0lOREVYOwo+PiA+PiArCj4+ ID4+ICsgICAgZHN0ID0gJih0YmwtPmZsb3dzW2Zsb3dfaWR4XS5rZXkpOwo+PiA+PiArCj4+ID4+ ICsgICAgcnRlX2V0aGVyX2FkZHJfY29weSgmKHNyYy0+aW5uZXJfa2V5LmV0aF9zYWRkciksCj4+ ID4+ICsgICAgICAgICAgICAgICAgICAgICYoZHN0LT5pbm5lcl9rZXkuZXRoX3NhZGRyKSk7Cj4+ ID4+ICsgICAgcnRlX2V0aGVyX2FkZHJfY29weSgmKHNyYy0+aW5uZXJfa2V5LmV0aF9kYWRkciks Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICYoZHN0LT5pbm5lcl9rZXkuZXRoX2RhZGRyKSk7 Cj4+ID4+ICsgICAgZHN0LT5pbm5lcl9rZXkuaXBfc3JjX2FkZHIgPSBzcmMtPmlubmVyX2tleS5p cF9zcmNfYWRkcjsKPj4gPj4gKyAgICBkc3QtPmlubmVyX2tleS5pcF9kc3RfYWRkciA9IHNyYy0+ aW5uZXJfa2V5LmlwX2RzdF9hZGRyOwo+PiA+PiArICAgIGRzdC0+aW5uZXJfa2V5LmlwX2lkID0g c3JjLT5pbm5lcl9rZXkuaXBfaWQ7Cj4+ID4+ICsKPj4gPj4gKyAgICBkc3QtPnZ4bGFuX2hkci52 eF9mbGFncyA9IHNyYy0+dnhsYW5faGRyLnZ4X2ZsYWdzOwo+PiA+PiArICAgIGRzdC0+dnhsYW5f aGRyLnZ4X3ZuaSA9IHNyYy0+dnhsYW5faGRyLnZ4X3ZuaTsKPj4gPj4gKyAgICBydGVfZXRoZXJf YWRkcl9jb3B5KCYoc3JjLT5vdXRlcl9ldGhfc2FkZHIpLCAmKGRzdC0+b3V0ZXJfZXRoX3NhZGRy KSk7Cj4+ID4+ICsgICAgcnRlX2V0aGVyX2FkZHJfY29weSgmKHNyYy0+b3V0ZXJfZXRoX2RhZGRy KSwgJihkc3QtPm91dGVyX2V0aF9kYWRkcikpOwo+PiA+PiArICAgIGRzdC0+b3V0ZXJfaXBfc3Jj X2FkZHIgPSBzcmMtPm91dGVyX2lwX3NyY19hZGRyOwo+PiA+PiArICAgIGRzdC0+b3V0ZXJfaXBf ZHN0X2FkZHIgPSBzcmMtPm91dGVyX2lwX2RzdF9hZGRyOwo+PiA+PiArICAgIGRzdC0+b3V0ZXJf c3JjX3BvcnQgPSBzcmMtPm91dGVyX3NyY19wb3J0Owo+PiA+PiArICAgIGRzdC0+b3V0ZXJfZHN0 X3BvcnQgPSBzcmMtPm91dGVyX2RzdF9wb3J0Owo+PiA+PiArCj4+ID4+ICsgICAgdGJsLT5mbG93 c1tmbG93X2lkeF0uc3RhcnRfaW5kZXggPSBpdGVtX2lkeDsKPj4gPj4gKyAgICB0YmwtPmZsb3df bnVtKys7Cj4+ID4+ICsKPj4gPj4gKyAgICByZXR1cm4gZmxvd19pZHg7Cj4+ID4+ICt9Cj4+ID4+ ICsKPj4gPj4gK3N0YXRpYyBpbmxpbmUgaW50Cj4+ID4+ICtpc19zYW1lX3Z4bGFuX3VkcDRfZmxv dyhzdHJ1Y3QgdnhsYW5fdWRwNF9mbG93X2tleSBrMSwKPj4gPj4gKyAgICAgICAgICAgIHN0cnVj dCB2eGxhbl91ZHA0X2Zsb3dfa2V5IGsyKQo+PiA+PiArewo+PiA+PiArICAgIC8qIHNyYyBwb3J0 IGlzIGNoYW5naW5nLCBzbyBzaG91bGRuJ3QgdXNlIGl0IGZvciBmbG93IGNoZWNrICovCj4+ID4K Pj4gPkFzIEkga25vdywgZnJhZ21lbnRzIG9mIGEgdnhsYW4vdWRwL2lwdjQgcGFja2V0IGhhdmUg c2FtZSBvdXRlciBzb3VyY2UKPj4gPnBvcnQuIEluIHdoYXQgY2FzZXMgb3V0ZXIgc291cmNlIHBv cnQgd2lsbCBjaGFuZ2U/Cj4+IAo+PiBJbiBPVlMsIHZ4bGFuIHVkcCBzb3VyZSBwb3J0IGlzIGNh bGN1bGF0ZWQgZnJvbSBpbm5lciBwYWNrZXQgUlNTLCBzbyBmb3IgVURQIGZyYWdtZW50LCBSU1Mg b2YgZmlyc3QgcGFja2V0IGlzCj4+IGRpZmZlcmVudCBmcm9tIG90aGVyIGZyYWdtZW50cyBiZWNh dXNlIFJTUyBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIDUgdHVwbGVzIChzcmMgaXAsIHNyYyBwb3J0 LCBkc3QgaXAsIGRzdCBwb3J0LAo+PiBwcm90b2NvbCB0eXBlKS4KPj4gCj4+IG92cy9saWIvbmV0 ZGV2LW5hdGl2ZS10bmwuaDoKPj4gCj4+IHN0YXRpYyBpbmxpbmUgdWludDMyX3QgKgo+PiBkcF9w YWNrZXRfcnNzX3B0cihjb25zdCBzdHJ1Y3QgZHBfcGFja2V0ICpiKQo+PiB7Cj4+ICAgICByZXR1 cm4gQ09OU1RfQ0FTVCh1aW50MzJfdCAqLCAmYi0+bWJ1Zi5oYXNoLnJzcyk7Cj4+IH0KPj4gCj4+ IHN0YXRpYyBpbmxpbmUgdWludDMyX3QKPj4gZHBfcGFja2V0X2dldF9yc3NfaGFzaChjb25zdCBz dHJ1Y3QgZHBfcGFja2V0ICpwKQo+PiB7Cj4+ICAgICByZXR1cm4gKmRwX3BhY2tldF9yc3NfcHRy KHApOwo+PiB9Cj4+IAo+PiBzdGF0aWMgaW5saW5lIG92c19iZTE2Cj4+IG5ldGRldl90bmxfZ2V0 X3NyY19wb3J0KHN0cnVjdCBkcF9wYWNrZXQgKnBhY2tldCkKPj4gewo+PiAgICAgdWludDMyX3Qg aGFzaDsKPj4gCj4+ICAgICBoYXNoID0gZHBfcGFja2V0X2dldF9yc3NfaGFzaChwYWNrZXQpOwo+ PiAKPj4gICAgIHJldHVybiBodG9ucygoKCh1aW50NjRfdCkgaGFzaCAqICh0bmxfdWRwX3BvcnRf bWF4IC0gdG5sX3VkcF9wb3J0X21pbikpID4+IDMyKSArCj4+ICAgICAgICAgICAgICAgICAgdG5s X3VkcF9wb3J0X21pbik7Cj4+IH0KPj4gCj4+IHZvaWQKPj4gbmV0ZGV2X3RubF9wdXNoX3VkcF9o ZWFkZXIoY29uc3Qgc3RydWN0IG5ldGRldiAqbmV0ZGV2IE9WU19VTlVTRUQsCj4+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcF9wYWNrZXQgKnBhY2tldCwKPj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG92c19hY3Rpb25fcHVzaF90bmwgKmRhdGEp Cj4+IHsKPj4gICAgIHN0cnVjdCB1ZHBfaGVhZGVyICp1ZHA7Cj4+ICAgICBpbnQgaXBfdG90X3Np emU7Cj4+IAo+PiAgICAgdWRwID0gbmV0ZGV2X3RubF9wdXNoX2lwX2hlYWRlcihwYWNrZXQsIGRh dGEtPmhlYWRlciwgZGF0YS0+aGVhZGVyX2xlbiwgJmlwX3RvdF9zaXplKTsKPj4gCj4+ICAgICAv KiBzZXQgdWRwIHNyYyBwb3J0ICovCj4+ICAgICB1ZHAtPnVkcF9zcmMgPSBuZXRkZXZfdG5sX2dl dF9zcmNfcG9ydChwYWNrZXQpOwo+PiAgICAgdWRwLT51ZHBfbGVuID0gaHRvbnMoaXBfdG90X3Np emUpOwo+PiAKPj4gICAgIGlmICh1ZHAtPnVkcF9jc3VtKSB7Cj4+ICAgICAgICAgbmV0ZGV2X3Ru bF9jYWxjX3VkcF9jc3VtKHVkcCwgcGFja2V0LCBpcF90b3Rfc2l6ZSk7Cj4+ICAgICB9Cj4+IH0K Pj4gCj4+IFRoaXMgaXMgc3BlY2lhbCBmb3IgRUNNUCB3aGljaCBvbmx5IGNoZWNrcyBvdXRlciBo ZWFkZXIgdG8gZGlmZmVyZW50aWF0ZSBkaWZmZXJlbnQgZmxvd3MgKGlubm5lciBwYWNrZXQpLiBU aGUKPj4gZmlyc3QgZnJhZ21lbnQgb2Ygb3JpZ2luYWwgaW5uZXIgVURQIGlzIGNvbnNpZGVyZWQg YXMgZGlmZmVyZW50IGZsb3cgZnJvbSBvdGhlciBmcmFnbWVudHMuCj4+IAo+PiBJIGZvdW5kIHRo aXMgYnkgZGVidWdnaW5nIGJlY3Vhc2UgdGhlIHNhbWUgVURQIHRyYWZmaWMgZGlkIGdlbmVyYXRl IGRpZmZlcmVudCB2eGxhbiBVRFAgc291cmNlIHBvcnQuCj4+IAo+Cj5Zb3UgYXJlIHJpZ2h0LiBJ IGNoZWNrZWQgVnhMQU4gUkZDIDczNDgsIGFuZCBvdXRlciBzb3VyY2UgcG9ydCBpcwo+Y2FsY3Vs YXRlZCBmcm9tIGlubmVyIHBhY2tldC4gSW4gT1ZTIGNhc2UsIHRoZSBmaXJzdCBmcmFnbWVudAo+ d2lsbCBoYXZlIGRpZmZlcmVudCBvdXRlciBzb3VyY2UgcG9ydCBjb21wYXJlZCB3aXRoIG90aGVy IGZyYWdtZW50cy4KPlBsZWFzZSBhZGQgc29tZSBjb21tZW50cyBpbiB0aGUgY29kZSBmb3IgcGVv cGxlIHRvIGJldHRlciB1bmRlcnN0YW5kCj50aGUgY29kZS4gSW4gYWRkaXRpb24sIG5lZWQgdG8g cmVtb3ZlIG91dGVyX3NyY19wb3J0IGZyb20gdGhlIHN0cnVjdHVyZQo+dnhsYW5fdWRwNF9mbG93 X2tleS4KPgo+PiA+Cj4+ID4+ICsgICAgcmV0dXJuIChydGVfaXNfc2FtZV9ldGhlcl9hZGRyKCZr MS5vdXRlcl9ldGhfc2FkZHIsCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmazIub3V0ZXJfZXRoX3NhZGRyKSAmJgo+PiA+PiArICAgICAgICAgICAgICAgICAgICBy dGVfaXNfc2FtZV9ldGhlcl9hZGRyKCZrMS5vdXRlcl9ldGhfZGFkZHIsCj4+ID4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmsyLm91dGVyX2V0aF9kYWRkcikgJiYKPj4gPj4gKyAgICAg ICAgICAgICAgICAgICAgKGsxLm91dGVyX2lwX3NyY19hZGRyID09IGsyLm91dGVyX2lwX3NyY19h ZGRyKSAmJgo+PiA+PiArICAgICAgICAgICAgICAgICAgICAoazEub3V0ZXJfaXBfZHN0X2FkZHIg PT0gazIub3V0ZXJfaXBfZHN0X2FkZHIpICYmCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgIChr MS5vdXRlcl9kc3RfcG9ydCA9PSBrMi5vdXRlcl9kc3RfcG9ydCkgJiYKPj4gPj4gKyAgICAgICAg ICAgICAgICAgICAgKGsxLnZ4bGFuX2hkci52eF9mbGFncyA9PSBrMi52eGxhbl9oZHIudnhfZmxh Z3MpICYmCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgIChrMS52eGxhbl9oZHIudnhfdm5pID09 IGsyLnZ4bGFuX2hkci52eF92bmkpICYmCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgIGlzX3Nh bWVfdWRwNF9mbG93KGsxLmlubmVyX2tleSwgazIuaW5uZXJfa2V5KSk7Cj4+ID4+ICt9Cj4+ID4+ ICsKPj4gPj4gK3N0YXRpYyBpbmxpbmUgaW50Cj4+ID4+ICt1ZHBfY2hlY2tfdnhsYW5fbmVpZ2hi b3Ioc3RydWN0IGdyb192eGxhbl91ZHA0X2l0ZW0gKml0ZW0sCj4+ID4+ICsgICAgICAgICAgICB1 aW50MTZfdCBmcmFnX29mZnNldCwKPj4gPj4gKyAgICAgICAgICAgIHVpbnQxNl90IGlwX2RsKQo+ PiA+Cj4+ID5CZXR0ZXIgcmVuYW1lIGl0IGFzIHVkcDRfY2hlY2tfdnhsYW5fbmVpZ2hib3IuCj4+ IAo+PiBPawo+PiAKPj4gPgo+PiA+PiArewo+PiA+PiArICAgIHN0cnVjdCBydGVfbWJ1ZiAqcGt0 ID0gaXRlbS0+aW5uZXJfaXRlbS5maXJzdHNlZzsKPj4gPj4gKyAgICBpbnQgY21wOwo+PiA+PiAr ICAgIHVpbnQxNl90IGwyX29mZnNldDsKPj4gPj4gKyAgICBpbnQgcmV0ID0gMDsKPj4gPj4gKwo+ PiA+PiArICAgIGwyX29mZnNldCA9IHBrdC0+b3V0ZXJfbDJfbGVuICsgcGt0LT5vdXRlcl9sM19s ZW47Cj4+ID4+ICsgICAgY21wID0gdWRwX2NoZWNrX25laWdoYm9yKCZpdGVtLT5pbm5lcl9pdGVt LCBmcmFnX29mZnNldCwgaXBfZGwsCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsMl9vZmZzZXQpOwo+PiA+Cj4+ID5XaHkgZG9uJ3QgY2hlY2sgb3V0ZXIgSVAgSUQ/ IElmIG91dGVyIERGIGJpdCBpcyBub3Qgc2V0LCBhbGwgZnJhZ21lbnRzCj4+ID5zaG91bGQgaGF2 ZSBpbmNyZW1lbnRhbCBvdXRlciBJUCBJRDsgaWYgREYgYml0IGlzIHNldCwgd2UgZG9uJ3QgbmVl ZAo+PiA+dG8gY2hlY2sgb3V0ZXIgSVAgSUQuCj4+IAo+PiBCeSBkZWZhdWx0LCBPVlMgc2V0IERG IGZsYWcuIEkgZG9uJ3QgdGhpbmsgd2UgbmVlZCB0byBjb21wYXJlIG91dGVyIElQIGlkIGJlY2F1 c2UgaW5uZXIgY2hlY2sKPj4gaXMgZW5vdWdoIHRvIGRpZmZlcmVudGlhdGUgaWYgdGhleSBhcmUg c2FtZSBmbG93LCBpc24ndCBpdD8KPgo+T1ZTIGlzIG9uZSBvZiB3b3JrbG9hZHMgdXNpbmcgRFBE SywgYW5kIHdlIGNhbiBhc3N1bWUKPm90aGVyIGNhc2VzIGhhdmUgdGhlIHNhbWUgZGVzaWduIGFz IE9WUy4gSSB0aGluayBJUCBJRAo+Y2hlY2sgaXMgbmVjZXNzYXJ5Lgo+Cj4+IAo+PiA+Cj4+ID5J biBhZGRpdGlvbiwgdWRwX2NoZWNrX25laWdoYm9yIGlzIHJlbmFtZWQsIGJ1dCB5b3UgZGlkbid0 IGNoYW5nZSBoZXJlLgo+PiAKPj4gRm9yZ290IHRvIGJ1aWxkIGl0LCBNYWtlZmlsZSBoYXMgYmVl biByZW1vdmVkIGZyb20gZHBkayBtYWluIGJyYW5jaCwgYnVpbGQgaXNuJ3Qgc28gY29udmluaWVu dCwgd2lsbAo+PiB1c2UgbWVzb24gYnVpbGQgdG8gY2hlY2sgaXQgZm9yIG5leHQgdmVyc2lvbi4K Pj4gCj4+ID4KPj4gPj4gKyAgICAvKiBWWExBTiBvdXRlciBJUCBJRCBpcyBvdXQgb2Ygb3JkZXIs IHNvIGRvbid0IHRvdWNoIGl0IGFuZAo+PiA+PiArICAgICAqIGRvbid0IGNvbXBhcmUgaXQuCj4+ ID4+ICsgICAgICovCj4+ID4+ICsgICAgaWYgKGNtcCA+IDApCj4+ID4+ICsgICAgICAgICAgICAv KiBBcHBlbmQgdGhlIG5ldyBwYWNrZXQuICovCj4+ID4+ICsgICAgICAgICAgICByZXQgPSAxOwo+ PiA+PiArICAgIGVsc2UgaWYgKGNtcCA8IDApCj4+ID4+ICsgICAgICAgICAgICAvKiBQcmVwZW5k IHRoZSBuZXcgcGFja2V0LiAqLwo+PiA+PiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4+ID4+ICsK Pj4gPj4gKyAgICByZXR1cm4gcmV0Owo+PiA+PiArfQo+PiA+PiArCj4+ID4+Cj4+ID4+ICAvKgo+ PiA+PiAgICogR1JPIGNvbnRleHQgc3RydWN0dXJlLiBJdCBrZWVwcyB0aGUgdGFibGUgc3RydWN0 dXJlcywgd2hpY2ggYXJlCj4+ID4+IEBAIC0xMzcsMTkgKzE0OCwyNyBAQCBzdHJ1Y3QgZ3JvX2N0 eCB7Cj4+ID4+ICAgICAgc3RydWN0IGdyb191ZHA0X2l0ZW0gdWRwX2l0ZW1zW1JURV9HUk9fTUFY X0JVUlNUX0lURU1fTlVNXSA9IHt7MH0gfTsKPj4gPj4KPj4gPj4gICAgICAvKiBBbGxvY2F0ZSBh IHJlYXNzZW1ibHkgdGFibGUgZm9yIFZYTEFOIFRDUCBHUk8gKi8KPj4gPj4gLSAgICBzdHJ1Y3Qg Z3JvX3Z4bGFuX3RjcDRfdGJsIHZ4bGFuX3RibDsKPj4gPj4gLSAgICBzdHJ1Y3QgZ3JvX3Z4bGFu X3RjcDRfZmxvdyB2eGxhbl9mbG93c1tSVEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTV07Cj4+ID4+ IC0gICAgc3RydWN0IGdyb192eGxhbl90Y3A0X2l0ZW0gdnhsYW5faXRlbXNbUlRFX0dST19NQVhf QlVSU1RfSVRFTV9OVU1dCj4+ID4+ICsgICAgc3RydWN0IGdyb192eGxhbl90Y3A0X3RibCB2eGxh bl90Y3BfdGJsOwo+PiA+PiArICAgIHN0cnVjdCBncm9fdnhsYW5fdGNwNF9mbG93IHZ4bGFuX3Rj cF9mbG93c1tSVEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTV07Cj4+ID4+ICsgICAgc3RydWN0IGdy b192eGxhbl90Y3A0X2l0ZW0gdnhsYW5fdGNwX2l0ZW1zW1JURV9HUk9fTUFYX0JVUlNUX0lURU1f TlVNXQo+PiA+PiArICAgICAgICAgICAgICAgICAgICA9IHt7ezB9LCAwLCAwfSB9Owo+PiA+PiAr Cj4+ID4+ICsgICAgLyogQWxsb2NhdGUgYSByZWFzc2VtYmx5IHRhYmxlIGZvciBWWExBTiBVRFAg R1JPICovCj4+ID4+ICsgICAgc3RydWN0IGdyb192eGxhbl91ZHA0X3RibCB2eGxhbl91ZHBfdGJs Owo+PiA+PiArICAgIHN0cnVjdCBncm9fdnhsYW5fdWRwNF9mbG93IHZ4bGFuX3VkcF9mbG93c1tS VEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTV07Cj4+ID4+ICsgICAgc3RydWN0IGdyb192eGxhbl91 ZHA0X2l0ZW0gdnhsYW5fdWRwX2l0ZW1zW1JURV9HUk9fTUFYX0JVUlNUX0lURU1fTlVNXQo+PiA+ PiAgICAgICAgICAgICAgICAgICAgICA9IHt7ezB9LCAwLCAwfSB9Owo+PiA+Pgo+PiA+PiAgICAg IHN0cnVjdCBydGVfbWJ1ZiAqdW5wcm9jZXNzX3BrdHNbbmJfcGt0c107Cj4+ID4+ICAgICAgdWlu dDMyX3QgaXRlbV9udW07Cj4+ID4+ICAgICAgaW50MzJfdCByZXQ7Cj4+ID4+ICAgICAgdWludDE2 X3QgaSwgdW5wcm9jZXNzX251bSA9IDAsIG5iX2FmdGVyX2dybyA9IG5iX3BrdHM7Cj4+ID4+IC0g ICAgdWludDhfdCBkb190Y3A0X2dybyA9IDAsIGRvX3Z4bGFuX2dybyA9IDAsIGRvX3VkcDRfZ3Jv ID0gMDsKPj4gPj4gKyAgICB1aW50OF90IGRvX3RjcDRfZ3JvID0gMCwgZG9fdnhsYW5fdGNwX2dy byA9IDAsIGRvX3VkcDRfZ3JvID0gMCwKPj4gPj4gKyAgICAgICAgICAgIGRvX3Z4bGFuX3VkcF9n cm8gPSAwOwo+PiA+Pgo+PiA+PiAgICAgIGlmICh1bmxpa2VseSgocGFyYW0tPmdyb190eXBlcyAm IChSVEVfR1JPX0lQVjRfVlhMQU5fVENQX0lQVjQgfAo+PiA+PiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUlRFX0dST19UQ1BfSVBWNCB8Cj4+ID4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSVEVfR1JPX0lQVjRfVlhMQU5fVURQX0lQVjQgfAo+PiA+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRFX0dST19VRFBfSVBWNCkp ID09IDApKQo+PiA+PiAgICAgICAgICAgICAgcmV0dXJuIG5iX3BrdHM7Cj4+ID4+Cj4+ID4+IEBA IC0xNjAsMTUgKzE3OSwyOCBAQCBzdHJ1Y3QgZ3JvX2N0eCB7Cj4+ID4+Cj4+ID4+ICAgICAgaWYg KHBhcmFtLT5ncm9fdHlwZXMgJiBSVEVfR1JPX0lQVjRfVlhMQU5fVENQX0lQVjQpIHsKPj4gPj4g ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtX251bTsgaSsrKQo+PiA+PiAtICAgICAg ICAgICAgICAgICAgICB2eGxhbl9mbG93c1tpXS5zdGFydF9pbmRleCA9IElOVkFMSURfQVJSQVlf SU5ERVg7Cj4+ID4+IC0KPj4gPj4gLSAgICAgICAgICAgIHZ4bGFuX3RibC5mbG93cyA9IHZ4bGFu X2Zsb3dzOwo+PiA+PiAtICAgICAgICAgICAgdnhsYW5fdGJsLml0ZW1zID0gdnhsYW5faXRlbXM7 Cj4+ID4+IC0gICAgICAgICAgICB2eGxhbl90YmwuZmxvd19udW0gPSAwOwo+PiA+PiAtICAgICAg ICAgICAgdnhsYW5fdGJsLml0ZW1fbnVtID0gMDsKPj4gPj4gLSAgICAgICAgICAgIHZ4bGFuX3Ri bC5tYXhfZmxvd19udW0gPSBpdGVtX251bTsKPj4gPj4gLSAgICAgICAgICAgIHZ4bGFuX3RibC5t YXhfaXRlbV9udW0gPSBpdGVtX251bTsKPj4gPj4gLSAgICAgICAgICAgIGRvX3Z4bGFuX2dybyA9 IDE7Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAgIHZ4bGFuX3RjcF9mbG93c1tpXS5zdGFydF9p bmRleCA9IElOVkFMSURfQVJSQVlfSU5ERVg7Cj4+ID4+ICsKPj4gPj4gKyAgICAgICAgICAgIHZ4 bGFuX3RjcF90YmwuZmxvd3MgPSB2eGxhbl90Y3BfZmxvd3M7Cj4+ID4+ICsgICAgICAgICAgICB2 eGxhbl90Y3BfdGJsLml0ZW1zID0gdnhsYW5fdGNwX2l0ZW1zOwo+PiA+PiArICAgICAgICAgICAg dnhsYW5fdGNwX3RibC5mbG93X251bSA9IDA7Cj4+ID4+ICsgICAgICAgICAgICB2eGxhbl90Y3Bf dGJsLml0ZW1fbnVtID0gMDsKPj4gPj4gKyAgICAgICAgICAgIHZ4bGFuX3RjcF90YmwubWF4X2Zs b3dfbnVtID0gaXRlbV9udW07Cj4+ID4+ICsgICAgICAgICAgICB2eGxhbl90Y3BfdGJsLm1heF9p dGVtX251bSA9IGl0ZW1fbnVtOwo+PiA+PiArICAgICAgICAgICAgZG9fdnhsYW5fdGNwX2dybyA9 IDE7Cj4+ID4+ICsgICAgfQo+PiA+PiArCj4+ID4+ICsgICAgaWYgKHBhcmFtLT5ncm9fdHlwZXMg JiBSVEVfR1JPX0lQVjRfVlhMQU5fVURQX0lQVjQpIHsKPj4gPj4gKyAgICAgICAgICAgIGZvciAo aSA9IDA7IGkgPCBpdGVtX251bTsgaSsrKQo+PiA+PiArICAgICAgICAgICAgICAgICAgICB2eGxh bl91ZHBfZmxvd3NbaV0uc3RhcnRfaW5kZXggPSBJTlZBTElEX0FSUkFZX0lOREVYOwo+PiA+PiAr Cj4+ID4+ICsgICAgICAgICAgICB2eGxhbl91ZHBfdGJsLmZsb3dzID0gdnhsYW5fdWRwX2Zsb3dz Owo+PiA+PiArICAgICAgICAgICAgdnhsYW5fdWRwX3RibC5pdGVtcyA9IHZ4bGFuX3VkcF9pdGVt czsKPj4gPj4gKyAgICAgICAgICAgIHZ4bGFuX3VkcF90YmwuZmxvd19udW0gPSAwOwo+PiA+PiAr ICAgICAgICAgICAgdnhsYW5fdWRwX3RibC5pdGVtX251bSA9IDA7Cj4+ID4+ICsgICAgICAgICAg ICB2eGxhbl91ZHBfdGJsLm1heF9mbG93X251bSA9IGl0ZW1fbnVtOwo+PiA+PiArICAgICAgICAg ICAgdnhsYW5fdWRwX3RibC5tYXhfaXRlbV9udW0gPSBpdGVtX251bTsKPj4gPj4gKyAgICAgICAg ICAgIGRvX3Z4bGFuX3VkcF9ncm8gPSAxOwo+PiA+PiAgICAgIH0KPj4gPj4KPj4gPj4gICAgICBp ZiAocGFyYW0tPmdyb190eXBlcyAmIFJURV9HUk9fVENQX0lQVjQpIHsKPj4gPj4gQEAgLTIwNCw5 ICsyMzYsMTggQEAgc3RydWN0IGdyb19jdHggewo+PiA+PiAgICAgICAgICAgICAgICogd2lsbCBi ZSBmbHVzaGVkIGZyb20gdGhlIHRhYmxlcy4KPj4gPj4gICAgICAgICAgICAgICAqLwo+PiA+PiAg ICAgICAgICAgICAgaWYgKElTX0lQVjRfVlhMQU5fVENQNF9QS1QocGt0c1tpXS0+cGFja2V0X3R5 cGUpICYmCj4+ID4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fdnhsYW5fZ3JvKSB7 Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fdnhsYW5fdGNwX2dybykgewo+ PiA+PiAgICAgICAgICAgICAgICAgICAgICByZXQgPSBncm9fdnhsYW5fdGNwNF9yZWFzc2VtYmxl KHBrdHNbaV0sCj4+ID4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnZ4bGFuX3RibCwgMCk7Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZ4bGFuX3RjcF90YmwsIDApOwo+PiA+PiAr ICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID4gMCkKPj4gPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBNZXJnZSBzdWNjZXNzZnVsbHkgKi8KPj4gPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuYl9hZnRlcl9ncm8tLTsKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAocmV0IDwgMCkKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnBy b2Nlc3NfcGt0c1t1bnByb2Nlc3NfbnVtKytdID0gcGt0c1tpXTsKPj4gPj4gKyAgICAgICAgICAg IH0gZWxzZSBpZiAoSVNfSVBWNF9WWExBTl9VRFA0X1BLVChwa3RzW2ldLT5wYWNrZXRfdHlwZSkg JiYKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb192eGxhbl91ZHBfZ3JvKSB7 Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAgIHJldCA9IGdyb192eGxhbl91ZHA0X3JlYXNzZW1i bGUocGt0c1tpXSwKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmdnhsYW5fdWRwX3RibCwgMCk7Cj4+ID4+ICAgICAgICAgICAgICAgICAg ICAgIGlmIChyZXQgPiAwKQo+PiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1l cmdlIHN1Y2Nlc3NmdWxseSAqLwo+PiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5i X2FmdGVyX2dyby0tOwo+PiA+PiBAQCAtMjM2LDExICsyNzcsMTcgQEAgc3RydWN0IGdyb19jdHgg ewo+PiA+PiAgICAgICAgICAgICAgIHx8ICh1bnByb2Nlc3NfbnVtIDwgbmJfcGt0cykpIHsKPj4g Pj4gICAgICAgICAgICAgIGkgPSAwOwo+PiA+PiAgICAgICAgICAgICAgLyogRmx1c2ggYWxsIHBh Y2tldHMgZnJvbSB0aGUgdGFibGVzICovCj4+ID4+IC0gICAgICAgICAgICBpZiAoZG9fdnhsYW5f Z3JvKSB7Cj4+ID4+IC0gICAgICAgICAgICAgICAgICAgIGkgPSBncm9fdnhsYW5fdGNwNF90Ymxf dGltZW91dF9mbHVzaCgmdnhsYW5fdGJsLAo+PiA+PiArICAgICAgICAgICAgaWYgKGRvX3Z4bGFu X3RjcF9ncm8pIHsKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgaSA9IGdyb192eGxhbl90Y3A0 X3RibF90aW1lb3V0X2ZsdXNoKCZ2eGxhbl90Y3BfdGJsLAo+PiA+PiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCwgcGt0cywgbmJfcGt0cyk7Cj4+ID4+ICAgICAgICAgICAg ICB9Cj4+ID4+Cj4+ID4+ICsgICAgICAgICAgICBpZiAoZG9fdnhsYW5fdWRwX2dybykgewo+PiA+ PiArICAgICAgICAgICAgICAgICAgICBpICs9IGdyb192eGxhbl91ZHA0X3RibF90aW1lb3V0X2Zs dXNoKCZ2eGxhbl91ZHBfdGJsLAo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwgJnBrdHNbaV0sIG5iX3BrdHMgLSBpKTsKPj4gPj4gKwo+PiA+PiArICAgICAgICAg ICAgfQo+PiA+PiArCj4+ID4+ICAgICAgICAgICAgICBpZiAoZG9fdGNwNF9ncm8pIHsKPj4gPj4g ICAgICAgICAgICAgICAgICAgICAgaSArPSBncm9fdGNwNF90YmxfdGltZW91dF9mbHVzaCgmdGNw X3RibCwgMCwKPj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwa3Rz W2ldLCBuYl9wa3RzIC0gaSk7Cj4+ID4+IEBAIC0yNjksMzMgKzMxNiw0MiBAQCBzdHJ1Y3QgZ3Jv X2N0eCB7Cj4+ID4+ICB7Cj4+ID4+ICAgICAgc3RydWN0IHJ0ZV9tYnVmICp1bnByb2Nlc3NfcGt0 c1tuYl9wa3RzXTsKPj4gPj4gICAgICBzdHJ1Y3QgZ3JvX2N0eCAqZ3JvX2N0eCA9IGN0eDsKPj4g Pj4gLSAgICB2b2lkICp0Y3BfdGJsLCAqdWRwX3RibCwgKnZ4bGFuX3RibDsKPj4gPj4gKyAgICB2 b2lkICp0Y3BfdGJsLCAqdWRwX3RibCwgKnZ4bGFuX3RjcF90YmwsICp2eGxhbl91ZHBfdGJsOwo+ PiA+PiAgICAgIHVpbnQ2NF90IGN1cnJlbnRfdGltZTsKPj4gPj4gICAgICB1aW50MTZfdCBpLCB1 bnByb2Nlc3NfbnVtID0gMDsKPj4gPj4gLSAgICB1aW50OF90IGRvX3RjcDRfZ3JvLCBkb192eGxh bl9ncm8sIGRvX3VkcDRfZ3JvOwo+PiA+PiArICAgIHVpbnQ4X3QgZG9fdGNwNF9ncm8sIGRvX3Z4 bGFuX3RjcF9ncm8sIGRvX3VkcDRfZ3JvLCBkb192eGxhbl91ZHBfZ3JvOwo+PiA+Pgo+PiA+PiAg ICAgIGlmICh1bmxpa2VseSgoZ3JvX2N0eC0+Z3JvX3R5cGVzICYgKFJURV9HUk9fSVBWNF9WWExB Tl9UQ1BfSVBWNCB8Cj4+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS VEVfR1JPX1RDUF9JUFY0IHwKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJURV9HUk9fSVBWNF9WWExBTl9VRFBfSVBWNCB8Cj4+ID4+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSVEVfR1JPX1VEUF9JUFY0KSkgPT0gMCkpCj4+ID4+ICAgICAg ICAgICAgICByZXR1cm4gbmJfcGt0czsKPj4gPj4KPj4gPj4gICAgICB0Y3BfdGJsID0gZ3JvX2N0 eC0+dGJsc1tSVEVfR1JPX1RDUF9JUFY0X0lOREVYXTsKPj4gPj4gLSAgICB2eGxhbl90YmwgPSBn cm9fY3R4LT50YmxzW1JURV9HUk9fSVBWNF9WWExBTl9UQ1BfSVBWNF9JTkRFWF07Cj4+ID4+ICsg ICAgdnhsYW5fdGNwX3RibCA9IGdyb19jdHgtPnRibHNbUlRFX0dST19JUFY0X1ZYTEFOX1RDUF9J UFY0X0lOREVYXTsKPj4gPj4gICAgICB1ZHBfdGJsID0gZ3JvX2N0eC0+dGJsc1tSVEVfR1JPX1VE UF9JUFY0X0lOREVYXTsKPj4gPj4gKyAgICB2eGxhbl91ZHBfdGJsID0gZ3JvX2N0eC0+dGJsc1tS VEVfR1JPX0lQVjRfVlhMQU5fVURQX0lQVjRfSU5ERVhdOwo+PiA+Pgo+PiA+PiAgICAgIGRvX3Rj cDRfZ3JvID0gKGdyb19jdHgtPmdyb190eXBlcyAmIFJURV9HUk9fVENQX0lQVjQpID09Cj4+ID4+ ICAgICAgICAgICAgICBSVEVfR1JPX1RDUF9JUFY0Owo+PiA+PiAtICAgIGRvX3Z4bGFuX2dybyA9 IChncm9fY3R4LT5ncm9fdHlwZXMgJiBSVEVfR1JPX0lQVjRfVlhMQU5fVENQX0lQVjQpID09Cj4+ ID4+ICsgICAgZG9fdnhsYW5fdGNwX2dybyA9IChncm9fY3R4LT5ncm9fdHlwZXMgJiBSVEVfR1JP X0lQVjRfVlhMQU5fVENQX0lQVjQpID09Cj4+ID4+ICAgICAgICAgICAgICBSVEVfR1JPX0lQVjRf VlhMQU5fVENQX0lQVjQ7Cj4+ID4+ICAgICAgZG9fdWRwNF9ncm8gPSAoZ3JvX2N0eC0+Z3JvX3R5 cGVzICYgUlRFX0dST19VRFBfSVBWNCkgPT0KPj4gPj4gICAgICAgICAgICAgIFJURV9HUk9fVURQ X0lQVjQ7Cj4+ID4+ICsgICAgZG9fdnhsYW5fdWRwX2dybyA9IChncm9fY3R4LT5ncm9fdHlwZXMg JiBSVEVfR1JPX0lQVjRfVlhMQU5fVURQX0lQVjQpID09Cj4+ID4+ICsgICAgICAgICAgICBSVEVf R1JPX0lQVjRfVlhMQU5fVURQX0lQVjQ7Cj4+ID4+Cj4+ID4+ICAgICAgY3VycmVudF90aW1lID0g cnRlX3JkdHNjKCk7Cj4+ID4+Cj4+ID4+ICAgICAgZm9yIChpID0gMDsgaSA8IG5iX3BrdHM7IGkr Kykgewo+PiA+PiAgICAgICAgICAgICAgaWYgKElTX0lQVjRfVlhMQU5fVENQNF9QS1QocGt0c1tp XS0+cGFja2V0X3R5cGUpICYmCj4+ID4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9f dnhsYW5fZ3JvKSB7Cj4+ID4+IC0gICAgICAgICAgICAgICAgICAgIGlmIChncm9fdnhsYW5fdGNw NF9yZWFzc2VtYmxlKHBrdHNbaV0sIHZ4bGFuX3RibCwKPj4gPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkb192eGxhbl90Y3BfZ3JvKSB7Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAg IGlmIChncm9fdnhsYW5fdGNwNF9yZWFzc2VtYmxlKHBrdHNbaV0sIHZ4bGFuX3RjcF90YmwsCj4+ ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRf dGltZSkgPCAwKQo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVucHJvY2Vzc19w a3RzW3VucHJvY2Vzc19udW0rK10gPSBwa3RzW2ldOwo+PiA+PiArICAgICAgICAgICAgfSBlbHNl IGlmIChJU19JUFY0X1ZYTEFOX1VEUDRfUEtUKHBrdHNbaV0tPnBhY2tldF90eXBlKSAmJgo+PiA+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX3Z4bGFuX3VkcF9ncm8pIHsKPj4gPj4g KyAgICAgICAgICAgICAgICAgICAgaWYgKGdyb192eGxhbl91ZHA0X3JlYXNzZW1ibGUocGt0c1tp XSwgdnhsYW5fdWRwX3RibCwKPj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY3VycmVudF90aW1lKSA8IDApCj4+ID4+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5wcm9jZXNzX3BrdHNbdW5wcm9jZXNzX251bSsrXSA9IHBrdHNbaV07Cj4+ID4+ ICAgICAgICAgICAgICB9IGVsc2UgaWYgKElTX0lQVjRfVENQX1BLVChwa3RzW2ldLT5wYWNrZXRf dHlwZSkgJiYKPj4gPj4gQEAgLTM0MSw2ICszOTcsMTMgQEAgc3RydWN0IGdyb19jdHggewo+PiA+ PiAgICAgICAgICAgICAgbGVmdF9uYl9vdXQgPSBtYXhfbmJfb3V0IC0gbnVtOwo+PiA+PiAgICAg IH0KPj4gPj4KPj4gPj4gKyAgICBpZiAoKGdyb190eXBlcyAmIFJURV9HUk9fSVBWNF9WWExBTl9V RFBfSVBWNCkgJiYgbWF4X25iX291dCA+IDApIHsKPj4gPj4gKyAgICAgICAgICAgIG51bSArPSBn cm9fdnhsYW5fdWRwNF90YmxfdGltZW91dF9mbHVzaChncm9fY3R4LT50YmxzWwo+PiA+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJURV9HUk9fSVBWNF9WWExBTl9VRFBfSVBWNF9JTkRF WF0sCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hfdGltZXN0YW1wLCAm b3V0W251bV0sIGxlZnRfbmJfb3V0KTsKPj4gPj4gKyAgICAgICAgICAgIGxlZnRfbmJfb3V0ID0g bWF4X25iX291dCAtIG51bTsKPj4gPgo+PiA+RG9uJ3QgbmVlZCB0byBjYWxjdWxhdGUgbGVmdF9u Yl9vdXQgaGVyZS4gSW4gdGhlIHByZXZpb3VzIHBhdGNoLCB5b3UKPj4gPmFsc28gY2FsY3VsYXRl IGl0IGZvciBVRFAgR1JPLiBQbGVhc2UgcmVtb3ZlIGl0IGJvdGguCj4+IAo+PiBJIHRoaW5rIGtl ZXBpbmcgaXQgaGVyZSBpc24ndCBiYWQgdGhpbmcsIGlmIHNvbWVvbmUgd2lsbCBhZGQgYSBuZXcg R1JPIHR5cGUgaGVyZSwgaGUvc2hlIHdvbid0IG1ha2UgYSBtaXN0YWtlLgo+Cj5JIGRvbid0IHRo aW5rIHNvLiBJdCdzIHVubmVjZXNzYXJ5IGZvciBjdXJyZW50IGRlc2lnbi4KPklmIG90aGVycyB3 YW50IHRvIGFkZCBuZXcgR1JPIHR5cGVzLCB0aGV5IHdpbGwgd3JpdGUKPmNvcnJlY3QgY29kZS4K Pgo+PiAKPj4gPgo+PiAKPj4gCj4+IAo+PiAgCj4+IAo=