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 3E65AA04C9; Mon, 14 Sep 2020 11:15:04 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D4C8B1C0C6; Mon, 14 Sep 2020 11:15:03 +0200 (CEST) Received: from m1362.mail.163.com (m1362.mail.163.com [220.181.13.62]) by dpdk.org (Postfix) with ESMTP id 6F5BA1C0C6 for ; Mon, 14 Sep 2020 11:15:01 +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=9m2HT o2u/sMZ8f61UEWMZbY0j1l9ZM3JLV4JJyXYNFw=; b=oictNHMe1HujLienLqclj ITZTF+3hyGokpVnP9352nwUuAJXv9OwxMJF1+CsjscPdE0KGQVxIOcRmgBqRD3sQ cD6xUPZnqzNfivMI36l8BL2EQqBotlh8dgaTxprskME7m75ssNCAlSDTY4318dd/ Zh9+0EPx7nxTF5KQTB0Fbk= Received: from yang_y_yi$163.com ( [111.207.123.58] ) by ajax-webmail-wmsvr62 (Coremail) ; Mon, 14 Sep 2020 17:14:59 +0800 (CST) X-Originating-IP: [111.207.123.58] Date: Mon, 14 Sep 2020 17:14:59 +0800 (CST) From: yang_y_yi To: "Hu, Jiayu" 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: <662209b31e344cfb8994a5b5cdcb0375@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> <20ddfcd3.5b19.1748bb90144.Coremail.yang_y_yi@163.com> <662209b31e344cfb8994a5b5cdcb0375@intel.com> X-CM-CTRLDATA: zspbNmZvb3Rlcl9odG09OTI2OTI6NTY= MIME-Version: 1.0 Message-ID: <778c4739.666a.1748be56189.Coremail.yang_y_yi@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID: PsGowABHTXWTNF9f86F4AA--.32983W X-CM-SenderInfo: 51dqwsp1b1xqqrwthudrp/1tbiOwefi1XlpTGnYAACsJ 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" CgoKSmlheXUsIFZNIHRvIFZNIGNhc2UgZm9yIGJpZyBVRFAgcGFja2V0IChzYXkgdWRwIHBhcmxv YWQgc2l6ZSBpcyA4MTkySywgYnV0IG10dSAxNTAwKS4gVk0gd2lsbCBzZWdtZW50IGl0IGFzIFVE UCBmcmFtZ21lbnRzLCBidXQgd2hlbiBvdnMgZHBkayB1c2VzIFZ4TGFuIHRvIGVuY2Fwc3VsYXRl IHRoZW0sIGl0IGRvZXNuJ3Qga25vdyB0aGV5IGFyZSBzYW1lIGZsb3csIE9WUyBEUERLIGhhcyBu byBrbm93bGRnZSBhYm91dCB0aGVtLCBqdXN0IGVuY2Fwc3VsYXRlIHRoZW0gYXMgaWYgdGhleSBh cmUgbm90IHJlbGF0ZWQuIEJ1dCBvbiByZWNlaXZlIHNpZGUgb24gYW5vdGhlciBtYWNoaW5lLCBP VlMgRFBESyB3aWxsIEdSTyB0aGVtLCBhdCB0aGlzIHBvaW50LCBvdXRlciBJUCBJRCBpcyBldmVu IHJhbmRvbSBmb3IgZXZlcnkgcGFja2V0LiBGb3IgVENQLCBJIHRoaW5rIHNhbWUgaXNzdWUgaXMg dGhlcmUsIEdSTyBqdXN0IGNvbnNpZGVyZWQgdGhlbSBhcyBkaWZmZXJlbnQgZmxvdyBhbmQgZG9l c24ndCBkbyBHUk8sIGluIG15IG9waW5pb24sIHdlIGFsc28gc2hvdWxkIGRvIEdSTyBmb3Igc3Vj aCBjYXNlLgoKCgoKCtTaIDIwMjAtMDktMTQgMTY6NTA6MDijrCJIdSwgSmlheXUiIDxqaWF5dS5o dUBpbnRlbC5jb20+INC0tcCjugoKT3V0IElQIElEIGlzIG5vdCB1c2VkIHRvIGNoZWNrIGlmIHRo ZXkgYmVsb25nIHRvIHRoZSBzYW1lIGZsb3csCgpidXQgY2hlY2sgaWYgdGhleSBhcmUgbmVpZ2hi b3JzLiBJZiB0d28gdnhsYW4vdWRwIGZyYWdtZW50cyBhcmUKCm5laWdoYm9ycywgdGhlaXIgb3V0 ZXIgSVAgSUQgYW5kIG91dGVyIGZyYWdfb2Z0IHNob3VsZCBiZSBpbmNyZW1lbnRhbC4KCkkgc3Rp bGwgY2Fubm90IHVuZGVyc3RhbmQgd2h5IGlnbm9yZSBvdXRlciBJUCBJRCB3aGVuIERGIGlzIDAu CgpDYW4geW91IGdpdmUgbW9yZSBleHBsYW5hdGlvbj8KCiAKCkZyb206IHlhbmdfeV95aSA8eWFu Z195X3lpQDE2My5jb20+ClNlbnQ6IE1vbmRheSwgU2VwdGVtYmVyIDE0LCAyMDIwIDQ6MjcgUE0K VG86IEh1LCBKaWF5dSA8amlheXUuaHVAaW50ZWwuY29tPgpDYzogdGhvbWFzQG1vbmphbG9uLm5l dDsgeWFuZ3lpMDFAaW5zcHVyLmNvbTsgZGV2QGRwZGsub3JnClN1YmplY3Q6IFJlOlJlOiBSZTog W1BBVENIIHY1IDIvMl0gZ3JvOiBhZGQgVlhMQU4gVURQIEdSTyBzdXBwb3J0CkltcG9ydGFuY2U6 IEhpZ2gKCiAKCkZvciBvdXRlcl9pcF9pZCwgdGhlcmUgaXMgc2FtZSBpcF9pZCBkaXNvcmRlciBp c3N1ZSBleGlzdGluZyBhcyBVRFAgR1JPLCBzbyB3ZSBjYW4ndCB1c2UgaXBfaWQgKy8tMSB0byBj aGVjayBpZiB0aGV5IGFyZSBzYW1lIGZsb3csIGhlcmUgaXMgbXkgaW5jcm1lbnRhbCBjaGFuZ2Ug Zm9yIGl0IHdpdGggbW9yZSBjb21tZW50cy4KCiAKCkBAIC0xODksNyArMTg4LDEyIEBACiBpc19z YW1lX3Z4bGFuX3VkcDRfZmxvdyhzdHJ1Y3QgdnhsYW5fdWRwNF9mbG93X2tleSBrMSwKICAgICAg ICAgICAgICAgIHN0cnVjdCB2eGxhbl91ZHA0X2Zsb3dfa2V5IGsyKQogewotICAgICAgIC8qIHNy YyBwb3J0IGlzIGNoYW5naW5nLCBzbyBzaG91bGRuJ3QgdXNlIGl0IGZvciBmbG93IGNoZWNrICov CisgICAgICAgLyogRm9yIFZ4TEFOIHBhY2tldCwgb3V0ZXIgdWRwIHNyYyBwb3J0IGlzIGNhbGN1 bGF0ZWQgZnJvbQorICAgICAgICAqIGlubmVyIHBhY2tldCBSU1MgaGFzaCwgdWRwIHNyYyBwb3J0 IG9mIHRoZSBmaXJzdCBVRFAKKyAgICAgICAgKiBmcmFnbWVudCBpcyBkaWZmZXJlbnQgZnJvbSBv bmUgb2Ygb3RoZXIgVURQIGZyYWdtZW50cworICAgICAgICAqIGV2ZW4gaWYgdGhleSBhcmUgc2Ft ZSBmbG93LCBzbyB3ZSBoYXZlIHRvIHNraXAgb3V0ZXIgdWRwCisgICAgICAgICogc3JjIHBvcnQg Y29tcGFyaXNvbiBoZXJlLgorICAgICAgICAqLwogICAgICAgIHJldHVybiAocnRlX2lzX3NhbWVf ZXRoZXJfYWRkcigmazEub3V0ZXJfZXRoX3NhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmsyLm91dGVyX2V0aF9zYWRkcikgJiYKICAgICAgICAgICAgICAgICAg ICAgICAgcnRlX2lzX3NhbWVfZXRoZXJfYWRkcigmazEub3V0ZXJfZXRoX2RhZGRyLApAQCAtMjEy LDEyICsyMTYsMTYgQEAKICAgICAgICB1aW50MTZfdCBsMl9vZmZzZXQ7CiAgICAgICAgaW50IHJl dCA9IDA7CgorICAgICAgIC8qIE5vdGU6IGlmIG91dGVyIERGIGJpdCBpcyBzZXQsIGkuZSBvdXRl cl9pc19hdG9taWMgaXMgMCwKKyAgICAgICAgKiB3ZSBuZWVkbid0IGNvbXBhcmUgb3V0ZXJfaXBf aWQgYmVjYXVzZSB0aGV5IGFyZSBzYW1lLAorICAgICAgICAqIGZvciB0aGUgY2FzZSBvdXRlcl9p c19hdG9taWMgaXMgMSwgd2UgYWxzbyBoYXZlIG5vIHdheQorICAgICAgICAqIHRvIGNvbWFwcmUg b3V0ZXJfaXBfaWQgYmVjYXVzZSB0aGUgcmVjZWl2ZWQgcGFja2V0cyBjYW4KKyAgICAgICAgKiBi ZSBvdXQgb2Ygb3JkZXIuIFNvIGlnbm9yZSBvdXRlcl9pcF9pZCBjb21wYXJpc29uIGhlcmUuCisg ICAgICAgICovCisKICAgICAgICBsMl9vZmZzZXQgPSBwa3QtPm91dGVyX2wyX2xlbiArIHBrdC0+ b3V0ZXJfbDNfbGVuOwogICAgICAgIGNtcCA9IHVkcDRfY2hlY2tfbmVpZ2hib3IoJml0ZW0tPmlu bmVyX2l0ZW0sIGZyYWdfb2Zmc2V0LCBpcF9kbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGwyX29mZnNldCk7Ci0gICAgICAgLyogVlhMQU4gb3V0ZXIgSVAgSUQgaXMg b3V0IG9mIG9yZGVyLCBzbyBkb24ndCB0b3VjaCBpdCBhbmQKLSAgICAgICAgKiBkb24ndCBjb21w YXJlIGl0LgotICAgICAgICAqLwogICAgICAgIGlmIChjbXAgPiAwKQogICAgICAgICAgICAgICAg LyogQXBwZW5kIHRoZSBuZXcgcGFja2V0LiAqLwogICAgICAgICAgICAgICAgcmV0ID0gMTsKQEAg LTM1NCw3ICszNjIsOSBAQAogICAgICAgIHJ0ZV9ldGhlcl9hZGRyX2NvcHkoJihvdXRlcl9ldGhf aGRyLT5kX2FkZHIpLCAmKGtleS5vdXRlcl9ldGhfZGFkZHIpKTsKICAgICAgICBrZXkub3V0ZXJf aXBfc3JjX2FkZHIgPSBvdXRlcl9pcHY0X2hkci0+c3JjX2FkZHI7CiAgICAgICAga2V5Lm91dGVy X2lwX2RzdF9hZGRyID0gb3V0ZXJfaXB2NF9oZHItPmRzdF9hZGRyOwotICAgICAgIGtleS5vdXRl cl9zcmNfcG9ydCA9IHVkcF9oZHItPnNyY19wb3J0OworICAgICAgIC8qIE5vdGU6IEl0IGlzIHVu bmVjZXNzYXJ5IHRvIHNhdmUgb3V0ZXJfc3JjX3BvcnQgaGVyZSBiZWNhdXNlIGl0IGNhbgorICAg ICAgICAqIGJlIGRpZmZlcmVudCBmb3IgVnhMQU4gVURQIGZyYWdtZW50cyBmcm9tIHRoZSBzYW1l IGZsb3cuCisgICAgICAgICovCiAgICAgICAga2V5Lm91dGVyX2RzdF9wb3J0ID0gdWRwX2hkci0+ ZHN0X3BvcnQ7CgogICAgICAgIC8qIFNlYXJjaCBmb3IgYSBtYXRjaGVkIGZsb3cuICovCgogCgog CgogCgoKQXQgMjAyMC0wOS0xNCAxMjoyMToyNiwgIkppYXl1IEh1IiA8amlheXUuaHVAaW50ZWwu Y29tPiB3cm90ZToKPlJlcGxpZXMgYXJlIGlubGluZS4KPiAKPkJUVywgeW91IG5lZWQgdG8gdXBk YXRlIHRoZSBwcm9ncmFtbWVyIGd1aWRlCj5kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvZ2VuZXJpY19y ZWNlaXZlX29mZmxvYWRfbGliLnJzdCBhbmQKPnJlbGVhc2Ugbm90ZSBkb2MvZ3VpZGVzL3JlbF9u b3Rlcy9yZWxlYXNlXzIwXzExLnJzdC4KPiAKPlRoYW5rcywKPkppYXl1Cj4gCj5PbiBNb24sIFNl cCAxNCwgMjAyMCBhdCAxMDoxMzo0NEFNICswODAwLCB5YW5nX3lfeWkgd3JvdGU6Cj4+IEppYXl1 LCB0aGFuayB5b3Ugc28gbXVjaCwgcGxlYXNlIGNoZWNrIG15IHJlcGxpZXMgZm9yIHNvbWUgb2Yg eW91ciBjb21tZW50cywKPj4gaGVyZSBpcyBpbmNyZW1lbnRhbCBwYXRjaC4gSSBidWlsdCBpdCBi eSBtZXNvbiB0aGlzIHRpbWUgOi0pCj4+IAo+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ncm8v Z3JvX3Z4bGFuX3VkcDQuYyBiL2xpYi9saWJydGVfZ3JvL2dyb192eGxhbl91ZHA0LmMKPj4gaW5k ZXggOWU5ZGY3Mi4uMWZjZmFmMSAxMDA2NDQKPj4gLS0tIGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3Z4 bGFuX3VkcDQuYwo+PiArKysgYi9saWIvbGlicnRlX2dyby9ncm9fdnhsYW5fdWRwNC5jCj4+IEBA IC0yMDMsNyArMjAzLDcgQEAKPj4gIH0KPj4gCj4+ICBzdGF0aWMgaW5saW5lIGludAo+PiAtdWRw X2NoZWNrX3Z4bGFuX25laWdoYm9yKHN0cnVjdCBncm9fdnhsYW5fdWRwNF9pdGVtICppdGVtLAo+ PiArdWRwNF9jaGVja192eGxhbl9uZWlnaGJvcihzdHJ1Y3QgZ3JvX3Z4bGFuX3VkcDRfaXRlbSAq aXRlbSwKPj4gICAgICAgICAgICAgICAgIHVpbnQxNl90IGZyYWdfb2Zmc2V0LAo+PiAgICAgICAg ICAgICAgICAgdWludDE2X3QgaXBfZGwpCj4+ICB7Cj4+IEBAIC0yMTMsNyArMjEzLDcgQEAKPj4g ICAgICAgICBpbnQgcmV0ID0gMDsKPj4gCj4+ICAgICAgICAgbDJfb2Zmc2V0ID0gcGt0LT5vdXRl cl9sMl9sZW4gKyBwa3QtPm91dGVyX2wzX2xlbjsKPj4gLSAgICAgICBjbXAgPSB1ZHBfY2hlY2tf bmVpZ2hib3IoJml0ZW0tPmlubmVyX2l0ZW0sIGZyYWdfb2Zmc2V0LCBpcF9kbCwKPj4gKyAgICAg ICBjbXAgPSB1ZHA0X2NoZWNrX25laWdoYm9yKCZpdGVtLT5pbm5lcl9pdGVtLCBmcmFnX29mZnNl dCwgaXBfZGwsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsMl9v ZmZzZXQpOwo+PiAgICAgICAgIC8qIFZYTEFOIG91dGVyIElQIElEIGlzIG91dCBvZiBvcmRlciwg c28gZG9uJ3QgdG91Y2ggaXQgYW5kCj4+ICAgICAgICAgICogZG9uJ3QgY29tcGFyZSBpdC4KPj4g QEAgLTM3OSw3ICszNzksNyBAQAo+PiAgICAgICAgICAgICAgICAgaXRlbV9pZHggPSBpbnNlcnRf bmV3X2l0ZW0odGJsLCBwa3QsIHN0YXJ0X3RpbWUsCj4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSU5WQUxJRF9BUlJBWV9JTkRFWCwgZnJhZ19vZmZzZXQsCj4+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaXNfbGFzdF9mcmFnLCBvdXRlcl9pcF9pZCwgb3V0ZXJfaXNf YXRvbWljKTsKPj4gLSAgICAgICAgICAgICAgIGlmIChpdGVtX2lkeCA9PSBJTlZBTElEX0FSUkFZ X0lOREVYKQo+PiArICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KGl0ZW1faWR4ID09IElOVkFM SURfQVJSQVlfSU5ERVgpKQo+PiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cj4+ ICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0X25ld19mbG93KHRibCwgJmtleSwgaXRlbV9pZHgp ID09Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9BUlJBWV9JTkRF WCkgewo+PiBAQCAtMzk3LDcgKzM5Nyw3IEBACj4+ICAgICAgICAgY3VyX2lkeCA9IHRibC0+Zmxv d3NbaV0uc3RhcnRfaW5kZXg7Cj4+ICAgICAgICAgcHJldl9pZHggPSBjdXJfaWR4Owo+PiAgICAg ICAgIGRvIHsKPj4gLSAgICAgICAgICAgICAgIGNtcCA9IHVkcF9jaGVja192eGxhbl9uZWlnaGJv cigmKHRibC0+aXRlbXNbY3VyX2lkeF0pLAo+PiArICAgICAgICAgICAgICAgY21wID0gdWRwNF9j aGVja192eGxhbl9uZWlnaGJvcigmKHRibC0+aXRlbXNbY3VyX2lkeF0pLAo+PiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZyYWdfb2Zmc2V0LCBpcF9kbCk7Cj4+ICAgICAgICAgICAg ICAgICBpZiAoY21wKSB7Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXJnZV90d29f dnhsYW5fdWRwNF9wYWNrZXRzKAo+PiBAQCAtNDM2LDcgKzQzNiw3IEBACj4+ICAgICAgICAgICAg ICAgICBpdGVtX2lkeCA9IGluc2VydF9uZXdfaXRlbSh0YmwsIHBrdCwgc3RhcnRfdGltZSwKPj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlZBTElEX0FSUkFZX0lOREVYLCBmcmFn X29mZnNldCwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19sYXN0X2ZyYWcs IG91dGVyX2lwX2lkLCBvdXRlcl9pc19hdG9taWMpOwo+PiAtICAgICAgICAgICAgICAgaWYgKGl0 ZW1faWR4ID09IElOVkFMSURfQVJSQVlfSU5ERVgpCj4+ICsgICAgICAgICAgICAgICBpZiAodW5s aWtlbHkoaXRlbV9pZHggPT0gSU5WQUxJRF9BUlJBWV9JTkRFWCkpCj4+ICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiAtMTsKPj4gICAgICAgICAgICAgICAgIHRibC0+aXRlbXNbaXRlbV9p ZHhdLmlubmVyX2l0ZW0ubmV4dF9wa3RfaWR4ID0gY3VyX2lkeDsKPj4gICAgICAgICAgICAgICAg IHRibC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXggPSBpdGVtX2lkeDsKPj4gQEAgLTQ3MCw3ICs0NzAs NyBAQAo+PiAgICAgICAgICAgICAgICAgaXBfZGwgPSBwa3QtPnBrdF9sZW4gLSBoZHJfbGVuOwo+ PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3Z4bGFuX3VkcDQuYyBiL2xpYi9saWJy dGVfZ3JvL2dyb192eGxhbl91ZHA0LmMKPj4gaW5kZXggOWU5ZGY3Mi4uMWZjZmFmMSAxMDA2NDQK Pj4gLS0tIGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3Z4bGFuX3VkcDQuYwo+PiArKysgYi9saWIvbGli cnRlX2dyby9ncm9fdnhsYW5fdWRwNC5jCj4+IEBAIC0yMDMsNyArMjAzLDcgQEAKPj4gIH0KPj4g Cj4+ICBzdGF0aWMgaW5saW5lIGludAo+PiAtdWRwX2NoZWNrX3Z4bGFuX25laWdoYm9yKHN0cnVj dCBncm9fdnhsYW5fdWRwNF9pdGVtICppdGVtLAo+PiArdWRwNF9jaGVja192eGxhbl9uZWlnaGJv cihzdHJ1Y3QgZ3JvX3Z4bGFuX3VkcDRfaXRlbSAqaXRlbSwKPj4gICAgICAgICAgICAgICAgIHVp bnQxNl90IGZyYWdfb2Zmc2V0LAo+PiAgICAgICAgICAgICAgICAgdWludDE2X3QgaXBfZGwpCj4+ ICB7Cj4+IEBAIC0yMTMsNyArMjEzLDcgQEAKPj4gICAgICAgICBpbnQgcmV0ID0gMDsKPj4gCj4+ ICAgICAgICAgbDJfb2Zmc2V0ID0gcGt0LT5vdXRlcl9sMl9sZW4gKyBwa3QtPm91dGVyX2wzX2xl bjsKPj4gLSAgICAgICBjbXAgPSB1ZHBfY2hlY2tfbmVpZ2hib3IoJml0ZW0tPmlubmVyX2l0ZW0s IGZyYWdfb2Zmc2V0LCBpcF9kbCwKPj4gKyAgICAgICBjbXAgPSB1ZHA0X2NoZWNrX25laWdoYm9y KCZpdGVtLT5pbm5lcl9pdGVtLCBmcmFnX29mZnNldCwgaXBfZGwsCj4+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsMl9vZmZzZXQpOwo+PiAgICAgICAgIC8qIFZYTEFO IG91dGVyIElQIElEIGlzIG91dCBvZiBvcmRlciwgc28gZG9uJ3QgdG91Y2ggaXQgYW5kCj4+ICAg ICAgICAgICogZG9uJ3QgY29tcGFyZSBpdC4KPj4gQEAgLTM3OSw3ICszNzksNyBAQAo+PiAgICAg ICAgICAgICAgICAgaXRlbV9pZHggPSBpbnNlcnRfbmV3X2l0ZW0odGJsLCBwa3QsIHN0YXJ0X3Rp bWUsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9BUlJBWV9JTkRF WCwgZnJhZ19vZmZzZXQsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbGFz dF9mcmFnLCBvdXRlcl9pcF9pZCwgb3V0ZXJfaXNfYXRvbWljKTsKPj4gLSAgICAgICAgICAgICAg IGlmIChpdGVtX2lkeCA9PSBJTlZBTElEX0FSUkFZX0lOREVYKQo+PiArICAgICAgICAgICAgICAg aWYgKHVubGlrZWx5KGl0ZW1faWR4ID09IElOVkFMSURfQVJSQVlfSU5ERVgpKQo+PiAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cj4+ICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0 X25ld19mbG93KHRibCwgJmtleSwgaXRlbV9pZHgpID09Cj4+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSU5WQUxJRF9BUlJBWV9JTkRFWCkgewo+PiBAQCAtMzk3LDcgKzM5Nyw3IEBA Cj4+ICAgICAgICAgY3VyX2lkeCA9IHRibC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXg7Cj4+ICAgICAg ICAgcHJldl9pZHggPSBjdXJfaWR4Owo+PiAgICAgICAgIGRvIHsKPj4gLSAgICAgICAgICAgICAg IGNtcCA9IHVkcF9jaGVja192eGxhbl9uZWlnaGJvcigmKHRibC0+aXRlbXNbY3VyX2lkeF0pLAo+ PiArICAgICAgICAgICAgICAgY21wID0gdWRwNF9jaGVja192eGxhbl9uZWlnaGJvcigmKHRibC0+ aXRlbXNbY3VyX2lkeF0pLAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdf b2Zmc2V0LCBpcF9kbCk7Cj4+ICAgICAgICAgICAgICAgICBpZiAoY21wKSB7Cj4+ICAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChtZXJnZV90d29fdnhsYW5fdWRwNF9wYWNrZXRzKAo+PiBAQCAt NDM2LDcgKzQzNiw3IEBACj4+ICAgICAgICAgICAgICAgICBpdGVtX2lkeCA9IGluc2VydF9uZXdf aXRlbSh0YmwsIHBrdCwgc3RhcnRfdGltZSwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJTlZBTElEX0FSUkFZX0lOREVYLCBmcmFnX29mZnNldCwKPj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpc19sYXN0X2ZyYWcsIG91dGVyX2lwX2lkLCBvdXRlcl9pc19hdG9t aWMpOwo+PiAtICAgICAgICAgICAgICAgaWYgKGl0ZW1faWR4ID09IElOVkFMSURfQVJSQVlfSU5E RVgpCj4+ICsgICAgICAgICAgICAgICBpZiAodW5saWtlbHkoaXRlbV9pZHggPT0gSU5WQUxJRF9B UlJBWV9JTkRFWCkpCj4+ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKPj4gICAg ICAgICAgICAgICAgIHRibC0+aXRlbXNbaXRlbV9pZHhdLmlubmVyX2l0ZW0ubmV4dF9wa3RfaWR4 ID0gY3VyX2lkeDsKPj4gICAgICAgICAgICAgICAgIHRibC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXgg PSBpdGVtX2lkeDsKPj4gQEAgLTQ3MCw3ICs0NzAsNyBAQAo+PiAgICAgICAgICAgICAgICAgaXBf ZGwgPSBwa3QtPnBrdF9sZW4gLSBoZHJfbGVuOwo+PiAgICAgICAgICAgICAgICAgZnJhZ19vZmZz ZXQgPSB0YmwtPml0ZW1zW2l0ZW1faWR4XS5pbm5lcl9pdGVtLmZyYWdfb2Zmc2V0Owo+PiAgICAg ICAgICAgICAgICAgaXNfbGFzdF9mcmFnID0gdGJsLT5pdGVtc1tpdGVtX2lkeF0uaW5uZXJfaXRl bS5pc19sYXN0X2ZyYWc7Cj4+IC0gICAgICAgICAgICAgICBjbXAgPSB1ZHBfY2hlY2tfdnhsYW5f bmVpZ2hib3IoJih0YmwtPml0ZW1zW3N0YXJ0X2lkeF0pLAo+PiArICAgICAgICAgICAgICAgY21w ID0gdWRwNF9jaGVja192eGxhbl9uZWlnaGJvcigmKHRibC0+aXRlbXNbc3RhcnRfaWR4XSksCj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnX29mZnNldCwgaXBf ZGwpOwo+PiAgICAgICAgICAgICAgICAgaWYgKGNtcCkgewo+PiAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAobWVyZ2VfdHdvX3Z4bGFuX3VkcDRfcGFja2V0cygKPj4gQEAgLTQ4MSwxMiArNDgx LDEwIEBACj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSU5WQUxJRF9BUlJBWV9JTkRFWCk7Cj4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGJsLT5pdGVtc1tzdGFydF9pZHhdLmlubmVyX2l0ZW0ubmV4dF9wa3RfaWR4Cj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGl0ZW1faWR4Owo+PiAt ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewo+PiArICAgICAgICAgICAgICAgICAgICAg ICB9IGVsc2UKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKPj4g LSAgICAgICAgICAgICAgICAgICAgICAgfQo+PiAtICAgICAgICAgICAgICAgfSBlbHNlIHsKPj4g KyAgICAgICAgICAgICAgIH0gZWxzZQo+PiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g MDsKPj4gLSAgICAgICAgICAgICAgIH0KPj4gICAgICAgICB9Cj4+IAo+PiAgICAgICAgIHJldHVy biAwOwo+PiAKPj4gCj4+IEF0IDIwMjAtMDktMTEgMTI6MjQ6MTYsICJKaWF5dSBIdSIgPGppYXl1 Lmh1QGludGVsLmNvbT4gd3JvdGU6Cj4+ID5Tb21lIGNvbW1lbnRzIGFyZSBpbmxpbmUuCj4+ID4K Pj4gPlRoYW5rcywKPj4gPkppYXl1Cj4+ID4KPj4gPk9uIFRodSwgU2VwIDEwLCAyMDIwIGF0IDA1 OjI5OjE0UE0gKzA4MDAsIHlhbmdfeV95aUAxNjMuY29tIHdyb3RlOgo+PiA+PiBGcm9tOiBZaSBZ YW5nIDx5YW5neWkwMUBpbnNwdXIuY29tPgo+PiA+Pgo+PiA+PiBWWExBTiBVRFAgR1JPIGNhbiBo ZWxwIGltcHJvdmUgVk0tdG8tVk0gVURQIHBlcmZvcm1hbmNlCj4+ID4+IHdoZW4gVk0gaXMgZW5h YmxlZCBVRk8gb3IgR1NPLCBHUk8gbXVzdCBiZSBzdXBwb3J0ZWQgaWYKPj4gPj4gR1NPIG9yIFVG TyBpcyBlbmFibGVkLCBvdGhlcndpc2UsIHBlcmZvcm1hbmNlIGdhaW4gd2lsbAo+PiA+PiBiZSBo dXJ0Lgo+PiA+Pgo+PiA+PiBXaXRoIHRoaXMgZW5hYmxlZCBpbiBEUERLLCBPVlMgRFBESyBjYW4g bGV2ZXJhZ2UgaXQgdG8KPj4gPj4gaW1wcm92ZSBWTS10by1WTSBVRFAgcGVyZm9ybWFuY2UsIHRo aXMgd2lsbCBtYWtlIHN1cmUKPj4gPj4gSVAgZnJhZ21lbnRzIHdpbGwgYmUgcmVhc3NlbWJsZWQg b25jZSBpdCBpcyByZWNlaXZlZAo+PiA+PiBmcm9tIHBoeXNpY2FsIE5JQy4gSXQgaXMgdmVyeSBo ZWxwZnVsIGluIE9WUyBEUERLIFZYTEFOCj4+ID4+IFRTTyBjYXNlLgo+PiA+Pgo+PiA+PiBTaWdu ZWQtb2ZmLWJ5OiBZaSBZYW5nIDx5YW5neWkwMUBpbnNwdXIuY29tPgo+PiA+PiAtLS0KPj4gPj4g IGxpYi9saWJydGVfZ3JvL2dyb191ZHA0LmggICAgICAgfCAgIDEgKwo+PiA+PiAgbGliL2xpYnJ0 ZV9ncm8vZ3JvX3Z4bGFuX3VkcDQuYyB8IDU0OCArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCj4+ID4+ICBsaWIvbGlicnRlX2dyby9ncm9fdnhsYW5fdWRwNC5oIHwgMTUy ICsrKysrKysrKysrCj4+ID4+ICBsaWIvbGlicnRlX2dyby9tZXNvbi5idWlsZCAgICAgIHwgICAy ICstCj4+ID4+ICBsaWIvbGlicnRlX2dyby9ydGVfZ3JvLmMgICAgICAgIHwgMTE1ICsrKysrKyst LQo+PiA+PiAgbGliL2xpYnJ0ZV9ncm8vcnRlX2dyby5oICAgICAgICB8ICAgMyArCj4+ID4+ICA2 IGZpbGVzIGNoYW5nZWQsIDc5NCBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKPj4gPj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGlicnRlX2dyby9ncm9fdnhsYW5fdWRwNC5jCj4+ID4+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2xpYnJ0ZV9ncm8vZ3JvX3Z4bGFuX3VkcDQuaAo+PiA+ Pgo+PiA+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuaCBiL2xpYi9saWJy dGVfZ3JvL2dyb191ZHA0LmgKPj4gPj4gaW5kZXggMGEwNzhlNC4uZDM4YjM5MyAxMDA2NDQKPj4g Pj4gLS0tIGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuaAo+PiA+PiArKysgYi9saWIvbGlicnRl X2dyby9ncm9fdWRwNC5oCj4+ID4+IEBAIC03LDYgKzcsNyBAQAo+PiA+Pgo+PiA+PiAgI2luY2x1 ZGUgPHJ0ZV9pcC5oPgo+PiA+PiAgI2luY2x1ZGUgPHJ0ZV91ZHAuaD4KPj4gPj4gKyNpbmNsdWRl IDxydGVfdnhsYW4uaD4KPj4gPj4KPj4gPj4gICNkZWZpbmUgSU5WQUxJRF9BUlJBWV9JTkRFWCAw eGZmZmZmZmZmVUwKPj4gPj4gICNkZWZpbmUgR1JPX1VEUDRfVEJMX01BWF9JVEVNX05VTSAoMTAy NFVMICogMTAyNFVMKQo+PiA+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3Z4bGFu X3VkcDQuYyBiL2xpYi9saWJydGVfZ3JvL2dyb192eGxhbl91ZHA0LmMKPj4gPj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPj4gPj4gaW5kZXggMDAwMDAwMC4uOWU5ZGY3Mgo+PiA+PiAtLS0gL2Rldi9u dWxsCj4+ID4+ICsrKyBiL2xpYi9saWJydGVfZ3JvL2dyb192eGxhbl91ZHA0LmMKPj4gPj4gQEAg LTAsMCArMSw1NDggQEAKPj4gPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1D bGF1c2UKPj4gPj4gKyAqIENvcHlyaWdodChjKSAyMDIwIEluc3B1ciBDb3Jwb3JhdGlvbgo+PiA+ PiArICovCj4+ID4+ICsKPj4gPj4gKwo+PiA+PiArCj4+ID4+ICtzdGF0aWMgaW5saW5lIHVpbnQz Ml90Cj4+ID4+ICtkZWxldGVfaXRlbShzdHJ1Y3QgZ3JvX3Z4bGFuX3VkcDRfdGJsICp0YmwsCj4+ ID4+ICsgICAgICAgICAgICB1aW50MzJfdCBpdGVtX2lkeCwKPj4gPj4gKyAgICAgICAgICAgIHVp bnQzMl90IHByZXZfaXRlbV9pZHgpCj4+ID4+ICt7Cj4+ID4+ICsgICAgdWludDMyX3QgbmV4dF9p ZHggPSB0YmwtPml0ZW1zW2l0ZW1faWR4XS5pbm5lcl9pdGVtLm5leHRfcGt0X2lkeDsKPj4gPj4g Kwo+PiA+PiArICAgIC8qIE5VTEwgaW5kaWNhdGVzIGFuIGVtcHR5IGl0ZW0uICovCj4+ID4+ICsg ICAgdGJsLT5pdGVtc1tpdGVtX2lkeF0uaW5uZXJfaXRlbS5maXJzdHNlZyA9IE5VTEw7Cj4+ID4+ ICsgICAgdGJsLT5pdGVtX251bS0tOwo+PiA+PiArICAgIGlmIChwcmV2X2l0ZW1faWR4ICE9IElO VkFMSURfQVJSQVlfSU5ERVgpCj4+ID4+ICsgICAgICAgICAgICB0YmwtPml0ZW1zW3ByZXZfaXRl bV9pZHhdLmlubmVyX2l0ZW0ubmV4dF9wa3RfaWR4ID0gbmV4dF9pZHg7Cj4+ID4+ICsKPj4gPj4g KyAgICByZXR1cm4gbmV4dF9pZHg7Cj4+ID4+ICt9Cj4+ID4+ICsKPj4gPj4gK3N0YXRpYyBpbmxp bmUgdWludDMyX3QKPj4gPj4gK2luc2VydF9uZXdfZmxvdyhzdHJ1Y3QgZ3JvX3Z4bGFuX3VkcDRf dGJsICp0YmwsCj4+ID4+ICsgICAgICAgICAgICBzdHJ1Y3QgdnhsYW5fdWRwNF9mbG93X2tleSAq c3JjLAo+PiA+PiArICAgICAgICAgICAgdWludDMyX3QgaXRlbV9pZHgpCj4+ID4+ICt7Cj4+ID4+ ICsgICAgc3RydWN0IHZ4bGFuX3VkcDRfZmxvd19rZXkgKmRzdDsKPj4gPj4gKyAgICB1aW50MzJf dCBmbG93X2lkeDsKPj4gPj4gKwo+PiA+PiArICAgIGZsb3dfaWR4ID0gZmluZF9hbl9lbXB0eV9m bG93KHRibCk7Cj4+ID4+ICsgICAgaWYgKHVubGlrZWx5KGZsb3dfaWR4ID09IElOVkFMSURfQVJS QVlfSU5ERVgpKQo+PiA+PiArICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfQVJSQVlfSU5ERVg7 Cj4+ID4+ICsKPj4gPj4gKyAgICBkc3QgPSAmKHRibC0+Zmxvd3NbZmxvd19pZHhdLmtleSk7Cj4+ ID4+ICsKPj4gPj4gKyAgICBydGVfZXRoZXJfYWRkcl9jb3B5KCYoc3JjLT5pbm5lcl9rZXkuZXRo X3NhZGRyKSwKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgJihkc3QtPmlubmVyX2tleS5ldGhf c2FkZHIpKTsKPj4gPj4gKyAgICBydGVfZXRoZXJfYWRkcl9jb3B5KCYoc3JjLT5pbm5lcl9rZXku ZXRoX2RhZGRyKSwKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgJihkc3QtPmlubmVyX2tleS5l dGhfZGFkZHIpKTsKPj4gPj4gKyAgICBkc3QtPmlubmVyX2tleS5pcF9zcmNfYWRkciA9IHNyYy0+ aW5uZXJfa2V5LmlwX3NyY19hZGRyOwo+PiA+PiArICAgIGRzdC0+aW5uZXJfa2V5LmlwX2RzdF9h ZGRyID0gc3JjLT5pbm5lcl9rZXkuaXBfZHN0X2FkZHI7Cj4+ID4+ICsgICAgZHN0LT5pbm5lcl9r ZXkuaXBfaWQgPSBzcmMtPmlubmVyX2tleS5pcF9pZDsKPj4gPj4gKwo+PiA+PiArICAgIGRzdC0+ dnhsYW5faGRyLnZ4X2ZsYWdzID0gc3JjLT52eGxhbl9oZHIudnhfZmxhZ3M7Cj4+ID4+ICsgICAg ZHN0LT52eGxhbl9oZHIudnhfdm5pID0gc3JjLT52eGxhbl9oZHIudnhfdm5pOwo+PiA+PiArICAg IHJ0ZV9ldGhlcl9hZGRyX2NvcHkoJihzcmMtPm91dGVyX2V0aF9zYWRkciksICYoZHN0LT5vdXRl cl9ldGhfc2FkZHIpKTsKPj4gPj4gKyAgICBydGVfZXRoZXJfYWRkcl9jb3B5KCYoc3JjLT5vdXRl cl9ldGhfZGFkZHIpLCAmKGRzdC0+b3V0ZXJfZXRoX2RhZGRyKSk7Cj4+ID4+ICsgICAgZHN0LT5v dXRlcl9pcF9zcmNfYWRkciA9IHNyYy0+b3V0ZXJfaXBfc3JjX2FkZHI7Cj4+ID4+ICsgICAgZHN0 LT5vdXRlcl9pcF9kc3RfYWRkciA9IHNyYy0+b3V0ZXJfaXBfZHN0X2FkZHI7Cj4+ID4+ICsgICAg ZHN0LT5vdXRlcl9zcmNfcG9ydCA9IHNyYy0+b3V0ZXJfc3JjX3BvcnQ7Cj4+ID4+ICsgICAgZHN0 LT5vdXRlcl9kc3RfcG9ydCA9IHNyYy0+b3V0ZXJfZHN0X3BvcnQ7Cj4+ID4+ICsKPj4gPj4gKyAg ICB0YmwtPmZsb3dzW2Zsb3dfaWR4XS5zdGFydF9pbmRleCA9IGl0ZW1faWR4Owo+PiA+PiArICAg IHRibC0+Zmxvd19udW0rKzsKPj4gPj4gKwo+PiA+PiArICAgIHJldHVybiBmbG93X2lkeDsKPj4g Pj4gK30KPj4gPj4gKwo+PiA+PiArc3RhdGljIGlubGluZSBpbnQKPj4gPj4gK2lzX3NhbWVfdnhs YW5fdWRwNF9mbG93KHN0cnVjdCB2eGxhbl91ZHA0X2Zsb3dfa2V5IGsxLAo+PiA+PiArICAgICAg ICAgICAgc3RydWN0IHZ4bGFuX3VkcDRfZmxvd19rZXkgazIpCj4+ID4+ICt7Cj4+ID4+ICsgICAg Lyogc3JjIHBvcnQgaXMgY2hhbmdpbmcsIHNvIHNob3VsZG4ndCB1c2UgaXQgZm9yIGZsb3cgY2hl Y2sgKi8KPj4gPgo+PiA+QXMgSSBrbm93LCBmcmFnbWVudHMgb2YgYSB2eGxhbi91ZHAvaXB2NCBw YWNrZXQgaGF2ZSBzYW1lIG91dGVyIHNvdXJjZQo+PiA+cG9ydC4gSW4gd2hhdCBjYXNlcyBvdXRl ciBzb3VyY2UgcG9ydCB3aWxsIGNoYW5nZT8KPj4gCj4+IEluIE9WUywgdnhsYW4gdWRwIHNvdXJl IHBvcnQgaXMgY2FsY3VsYXRlZCBmcm9tIGlubmVyIHBhY2tldCBSU1MsIHNvIGZvciBVRFAgZnJh Z21lbnQsIFJTUyBvZiBmaXJzdCBwYWNrZXQgaXMKPj4gZGlmZmVyZW50IGZyb20gb3RoZXIgZnJh Z21lbnRzIGJlY2F1c2UgUlNTIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gNSB0dXBsZXMgKHNyYyBp cCwgc3JjIHBvcnQsIGRzdCBpcCwgZHN0IHBvcnQsCj4+IHByb3RvY29sIHR5cGUpLgo+PiAKPj4g b3ZzL2xpYi9uZXRkZXYtbmF0aXZlLXRubC5oOgo+PiAKPj4gc3RhdGljIGlubGluZSB1aW50MzJf dCAqCj4+IGRwX3BhY2tldF9yc3NfcHRyKGNvbnN0IHN0cnVjdCBkcF9wYWNrZXQgKmIpCj4+IHsK Pj4gICAgIHJldHVybiBDT05TVF9DQVNUKHVpbnQzMl90ICosICZiLT5tYnVmLmhhc2gucnNzKTsK Pj4gfQo+PiAKPj4gc3RhdGljIGlubGluZSB1aW50MzJfdAo+PiBkcF9wYWNrZXRfZ2V0X3Jzc19o YXNoKGNvbnN0IHN0cnVjdCBkcF9wYWNrZXQgKnApCj4+IHsKPj4gICAgIHJldHVybiAqZHBfcGFj a2V0X3Jzc19wdHIocCk7Cj4+IH0KPj4gCj4+IHN0YXRpYyBpbmxpbmUgb3ZzX2JlMTYKPj4gbmV0 ZGV2X3RubF9nZXRfc3JjX3BvcnQoc3RydWN0IGRwX3BhY2tldCAqcGFja2V0KQo+PiB7Cj4+ICAg ICB1aW50MzJfdCBoYXNoOwo+PiAKPj4gICAgIGhhc2ggPSBkcF9wYWNrZXRfZ2V0X3Jzc19oYXNo KHBhY2tldCk7Cj4+IAo+PiAgICAgcmV0dXJuIGh0b25zKCgoKHVpbnQ2NF90KSBoYXNoICogKHRu bF91ZHBfcG9ydF9tYXggLSB0bmxfdWRwX3BvcnRfbWluKSkgPj4gMzIpICsKPj4gICAgICAgICAg ICAgICAgICB0bmxfdWRwX3BvcnRfbWluKTsKPj4gfQo+PiAKPj4gdm9pZAo+PiBuZXRkZXZfdG5s X3B1c2hfdWRwX2hlYWRlcihjb25zdCBzdHJ1Y3QgbmV0ZGV2ICpuZXRkZXYgT1ZTX1VOVVNFRCwK Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRwX3BhY2tldCAqcGFja2V0LAo+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2FjdGlvbl9wdXNo X3RubCAqZGF0YSkKPj4gewo+PiAgICAgc3RydWN0IHVkcF9oZWFkZXIgKnVkcDsKPj4gICAgIGlu dCBpcF90b3Rfc2l6ZTsKPj4gCj4+ICAgICB1ZHAgPSBuZXRkZXZfdG5sX3B1c2hfaXBfaGVhZGVy KHBhY2tldCwgZGF0YS0+aGVhZGVyLCBkYXRhLT5oZWFkZXJfbGVuLCAmaXBfdG90X3NpemUpOwo+ PiAKPj4gICAgIC8qIHNldCB1ZHAgc3JjIHBvcnQgKi8KPj4gICAgIHVkcC0+dWRwX3NyYyA9IG5l dGRldl90bmxfZ2V0X3NyY19wb3J0KHBhY2tldCk7Cj4+ICAgICB1ZHAtPnVkcF9sZW4gPSBodG9u cyhpcF90b3Rfc2l6ZSk7Cj4+IAo+PiAgICAgaWYgKHVkcC0+dWRwX2NzdW0pIHsKPj4gICAgICAg ICBuZXRkZXZfdG5sX2NhbGNfdWRwX2NzdW0odWRwLCBwYWNrZXQsIGlwX3RvdF9zaXplKTsKPj4g ICAgIH0KPj4gfQo+PiAKPj4gVGhpcyBpcyBzcGVjaWFsIGZvciBFQ01QIHdoaWNoIG9ubHkgY2hl Y2tzIG91dGVyIGhlYWRlciB0byBkaWZmZXJlbnRpYXRlIGRpZmZlcmVudCBmbG93cyAoaW5ubmVy IHBhY2tldCkuIFRoZQo+PiBmaXJzdCBmcmFnbWVudCBvZiBvcmlnaW5hbCBpbm5lciBVRFAgaXMg Y29uc2lkZXJlZCBhcyBkaWZmZXJlbnQgZmxvdyBmcm9tIG90aGVyIGZyYWdtZW50cy4KPj4gCj4+ IEkgZm91bmQgdGhpcyBieSBkZWJ1Z2dpbmcgYmVjdWFzZSB0aGUgc2FtZSBVRFAgdHJhZmZpYyBk aWQgZ2VuZXJhdGUgZGlmZmVyZW50IHZ4bGFuIFVEUCBzb3VyY2UgcG9ydC4KPj4gCj4gCj5Zb3Ug YXJlIHJpZ2h0LiBJIGNoZWNrZWQgVnhMQU4gUkZDIDczNDgsIGFuZCBvdXRlciBzb3VyY2UgcG9y dCBpcwo+Y2FsY3VsYXRlZCBmcm9tIGlubmVyIHBhY2tldC4gSW4gT1ZTIGNhc2UsIHRoZSBmaXJz dCBmcmFnbWVudAo+d2lsbCBoYXZlIGRpZmZlcmVudCBvdXRlciBzb3VyY2UgcG9ydCBjb21wYXJl ZCB3aXRoIG90aGVyIGZyYWdtZW50cy4KPlBsZWFzZSBhZGQgc29tZSBjb21tZW50cyBpbiB0aGUg Y29kZSBmb3IgcGVvcGxlIHRvIGJldHRlciB1bmRlcnN0YW5kCj50aGUgY29kZS4gSW4gYWRkaXRp b24sIG5lZWQgdG8gcmVtb3ZlIG91dGVyX3NyY19wb3J0IGZyb20gdGhlIHN0cnVjdHVyZQo+dnhs YW5fdWRwNF9mbG93X2tleS4KPiAKPj4gPgo+PiA+PiArICAgIHJldHVybiAocnRlX2lzX3NhbWVf ZXRoZXJfYWRkcigmazEub3V0ZXJfZXRoX3NhZGRyLAo+PiA+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmsyLm91dGVyX2V0aF9zYWRkcikgJiYKPj4gPj4gKyAgICAgICAg ICAgICAgICAgICAgcnRlX2lzX3NhbWVfZXRoZXJfYWRkcigmazEub3V0ZXJfZXRoX2RhZGRyLAo+ PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrMi5vdXRlcl9ldGhfZGFkZHIpICYm Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAgIChrMS5vdXRlcl9pcF9zcmNfYWRkciA9PSBrMi5v dXRlcl9pcF9zcmNfYWRkcikgJiYKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgKGsxLm91dGVy X2lwX2RzdF9hZGRyID09IGsyLm91dGVyX2lwX2RzdF9hZGRyKSAmJgo+PiA+PiArICAgICAgICAg ICAgICAgICAgICAoazEub3V0ZXJfZHN0X3BvcnQgPT0gazIub3V0ZXJfZHN0X3BvcnQpICYmCj4+ ID4+ICsgICAgICAgICAgICAgICAgICAgIChrMS52eGxhbl9oZHIudnhfZmxhZ3MgPT0gazIudnhs YW5faGRyLnZ4X2ZsYWdzKSAmJgo+PiA+PiArICAgICAgICAgICAgICAgICAgICAoazEudnhsYW5f aGRyLnZ4X3ZuaSA9PSBrMi52eGxhbl9oZHIudnhfdm5pKSAmJgo+PiA+PiArICAgICAgICAgICAg ICAgICAgICBpc19zYW1lX3VkcDRfZmxvdyhrMS5pbm5lcl9rZXksIGsyLmlubmVyX2tleSkpOwo+ PiA+PiArfQo+PiA+PiArCj4+ID4+ICtzdGF0aWMgaW5saW5lIGludAo+PiA+PiArdWRwX2NoZWNr X3Z4bGFuX25laWdoYm9yKHN0cnVjdCBncm9fdnhsYW5fdWRwNF9pdGVtICppdGVtLAo+PiA+PiAr ICAgICAgICAgICAgdWludDE2X3QgZnJhZ19vZmZzZXQsCj4+ID4+ICsgICAgICAgICAgICB1aW50 MTZfdCBpcF9kbCkKPj4gPgo+PiA+QmV0dGVyIHJlbmFtZSBpdCBhcyB1ZHA0X2NoZWNrX3Z4bGFu X25laWdoYm9yLgo+PiAKPj4gT2sKPj4gCj4+ID4KPj4gPj4gK3sKPj4gPj4gKyAgICBzdHJ1Y3Qg cnRlX21idWYgKnBrdCA9IGl0ZW0tPmlubmVyX2l0ZW0uZmlyc3RzZWc7Cj4+ID4+ICsgICAgaW50 IGNtcDsKPj4gPj4gKyAgICB1aW50MTZfdCBsMl9vZmZzZXQ7Cj4+ID4+ICsgICAgaW50IHJldCA9 IDA7Cj4+ID4+ICsKPj4gPj4gKyAgICBsMl9vZmZzZXQgPSBwa3QtPm91dGVyX2wyX2xlbiArIHBr dC0+b3V0ZXJfbDNfbGVuOwo+PiA+PiArICAgIGNtcCA9IHVkcF9jaGVja19uZWlnaGJvcigmaXRl bS0+aW5uZXJfaXRlbSwgZnJhZ19vZmZzZXQsIGlwX2RsLAo+PiA+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbDJfb2Zmc2V0KTsKPj4gPgo+PiA+V2h5IGRvbid0IGNoZWNr IG91dGVyIElQIElEPyBJZiBvdXRlciBERiBiaXQgaXMgbm90IHNldCwgYWxsIGZyYWdtZW50cwo+ PiA+c2hvdWxkIGhhdmUgaW5jcmVtZW50YWwgb3V0ZXIgSVAgSUQ7IGlmIERGIGJpdCBpcyBzZXQs IHdlIGRvbid0IG5lZWQKPj4gPnRvIGNoZWNrIG91dGVyIElQIElELgo+PiAKPj4gQnkgZGVmYXVs dCwgT1ZTIHNldCBERiBmbGFnLiBJIGRvbid0IHRoaW5rIHdlIG5lZWQgdG8gY29tcGFyZSBvdXRl ciBJUCBpZCBiZWNhdXNlIGlubmVyIGNoZWNrCj4+IGlzIGVub3VnaCB0byBkaWZmZXJlbnRpYXRl IGlmIHRoZXkgYXJlIHNhbWUgZmxvdywgaXNuJ3QgaXQ/Cj4gCj5PVlMgaXMgb25lIG9mIHdvcmts b2FkcyB1c2luZyBEUERLLCBhbmQgd2UgY2FuIGFzc3VtZQo+b3RoZXIgY2FzZXMgaGF2ZSB0aGUg c2FtZSBkZXNpZ24gYXMgT1ZTLiBJIHRoaW5rIElQIElECj5jaGVjayBpcyBuZWNlc3NhcnkuCj4g Cj4+IAo+PiA+Cj4+ID5JbiBhZGRpdGlvbiwgdWRwX2NoZWNrX25laWdoYm9yIGlzIHJlbmFtZWQs IGJ1dCB5b3UgZGlkbid0IGNoYW5nZSBoZXJlLgo+PiAKPj4gRm9yZ290IHRvIGJ1aWxkIGl0LCBN YWtlZmlsZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gZHBkayBtYWluIGJyYW5jaCwgYnVpbGQgaXNu J3Qgc28gY29udmluaWVudCwgd2lsbAo+PiB1c2UgbWVzb24gYnVpbGQgdG8gY2hlY2sgaXQgZm9y IG5leHQgdmVyc2lvbi4KPj4gCj4+ID4KPj4gPj4gKyAgICAvKiBWWExBTiBvdXRlciBJUCBJRCBp cyBvdXQgb2Ygb3JkZXIsIHNvIGRvbid0IHRvdWNoIGl0IGFuZAo+PiA+PiArICAgICAqIGRvbid0 IGNvbXBhcmUgaXQuCj4+ID4+ICsgICAgICovCj4+ID4+ICsgICAgaWYgKGNtcCA+IDApCj4+ID4+ ICsgICAgICAgICAgICAvKiBBcHBlbmQgdGhlIG5ldyBwYWNrZXQuICovCj4+ID4+ICsgICAgICAg ICAgICByZXQgPSAxOwo+PiA+PiArICAgIGVsc2UgaWYgKGNtcCA8IDApCj4+ID4+ICsgICAgICAg ICAgICAvKiBQcmVwZW5kIHRoZSBuZXcgcGFja2V0LiAqLwo+PiA+PiArICAgICAgICAgICAgcmV0 ID0gLTE7Cj4+ID4+ICsKPj4gPj4gKyAgICByZXR1cm4gcmV0Owo+PiA+PiArfQo+PiA+PiArCj4+ ID4+Cj4+ID4+ICAvKgo+PiA+PiAgICogR1JPIGNvbnRleHQgc3RydWN0dXJlLiBJdCBrZWVwcyB0 aGUgdGFibGUgc3RydWN0dXJlcywgd2hpY2ggYXJlCj4+ID4+IEBAIC0xMzcsMTkgKzE0OCwyNyBA QCBzdHJ1Y3QgZ3JvX2N0eCB7Cj4+ID4+ICAgICAgc3RydWN0IGdyb191ZHA0X2l0ZW0gdWRwX2l0 ZW1zW1JURV9HUk9fTUFYX0JVUlNUX0lURU1fTlVNXSA9IHt7MH0gfTsKPj4gPj4KPj4gPj4gICAg ICAvKiBBbGxvY2F0ZSBhIHJlYXNzZW1ibHkgdGFibGUgZm9yIFZYTEFOIFRDUCBHUk8gKi8KPj4g Pj4gLSAgICBzdHJ1Y3QgZ3JvX3Z4bGFuX3RjcDRfdGJsIHZ4bGFuX3RibDsKPj4gPj4gLSAgICBz dHJ1Y3QgZ3JvX3Z4bGFuX3RjcDRfZmxvdyB2eGxhbl9mbG93c1tSVEVfR1JPX01BWF9CVVJTVF9J VEVNX05VTV07Cj4+ID4+IC0gICAgc3RydWN0IGdyb192eGxhbl90Y3A0X2l0ZW0gdnhsYW5faXRl bXNbUlRFX0dST19NQVhfQlVSU1RfSVRFTV9OVU1dCj4+ID4+ICsgICAgc3RydWN0IGdyb192eGxh bl90Y3A0X3RibCB2eGxhbl90Y3BfdGJsOwo+PiA+PiArICAgIHN0cnVjdCBncm9fdnhsYW5fdGNw NF9mbG93IHZ4bGFuX3RjcF9mbG93c1tSVEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTV07Cj4+ID4+ ICsgICAgc3RydWN0IGdyb192eGxhbl90Y3A0X2l0ZW0gdnhsYW5fdGNwX2l0ZW1zW1JURV9HUk9f TUFYX0JVUlNUX0lURU1fTlVNXQo+PiA+PiArICAgICAgICAgICAgICAgICAgICA9IHt7ezB9LCAw LCAwfSB9Owo+PiA+PiArCj4+ID4+ICsgICAgLyogQWxsb2NhdGUgYSByZWFzc2VtYmx5IHRhYmxl IGZvciBWWExBTiBVRFAgR1JPICovCj4+ID4+ICsgICAgc3RydWN0IGdyb192eGxhbl91ZHA0X3Ri bCB2eGxhbl91ZHBfdGJsOwo+PiA+PiArICAgIHN0cnVjdCBncm9fdnhsYW5fdWRwNF9mbG93IHZ4 bGFuX3VkcF9mbG93c1tSVEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTV07Cj4+ID4+ICsgICAgc3Ry dWN0IGdyb192eGxhbl91ZHA0X2l0ZW0gdnhsYW5fdWRwX2l0ZW1zW1JURV9HUk9fTUFYX0JVUlNU X0lURU1fTlVNXQo+PiA+PiAgICAgICAgICAgICAgICAgICAgICA9IHt7ezB9LCAwLCAwfSB9Owo+ PiA+Pgo+PiA+PiAgICAgIHN0cnVjdCBydGVfbWJ1ZiAqdW5wcm9jZXNzX3BrdHNbbmJfcGt0c107 Cj4+ID4+ICAgICAgdWludDMyX3QgaXRlbV9udW07Cj4+ID4+ICAgICAgaW50MzJfdCByZXQ7Cj4+ ID4+ICAgICAgdWludDE2X3QgaSwgdW5wcm9jZXNzX251bSA9IDAsIG5iX2FmdGVyX2dybyA9IG5i X3BrdHM7Cj4+ID4+IC0gICAgdWludDhfdCBkb190Y3A0X2dybyA9IDAsIGRvX3Z4bGFuX2dybyA9 IDAsIGRvX3VkcDRfZ3JvID0gMDsKPj4gPj4gKyAgICB1aW50OF90IGRvX3RjcDRfZ3JvID0gMCwg ZG9fdnhsYW5fdGNwX2dybyA9IDAsIGRvX3VkcDRfZ3JvID0gMCwKPj4gPj4gKyAgICAgICAgICAg IGRvX3Z4bGFuX3VkcF9ncm8gPSAwOwo+PiA+Pgo+PiA+PiAgICAgIGlmICh1bmxpa2VseSgocGFy YW0tPmdyb190eXBlcyAmIChSVEVfR1JPX0lQVjRfVlhMQU5fVENQX0lQVjQgfAo+PiA+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRFX0dST19UQ1BfSVBWNCB8Cj4+ID4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEVfR1JPX0lQVjRfVlhMQU5f VURQX0lQVjQgfAo+PiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRF X0dST19VRFBfSVBWNCkpID09IDApKQo+PiA+PiAgICAgICAgICAgICAgcmV0dXJuIG5iX3BrdHM7 Cj4+ID4+Cj4+ID4+IEBAIC0xNjAsMTUgKzE3OSwyOCBAQCBzdHJ1Y3QgZ3JvX2N0eCB7Cj4+ID4+ Cj4+ID4+ICAgICAgaWYgKHBhcmFtLT5ncm9fdHlwZXMgJiBSVEVfR1JPX0lQVjRfVlhMQU5fVENQ X0lQVjQpIHsKPj4gPj4gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtX251bTsgaSsr KQo+PiA+PiAtICAgICAgICAgICAgICAgICAgICB2eGxhbl9mbG93c1tpXS5zdGFydF9pbmRleCA9 IElOVkFMSURfQVJSQVlfSU5ERVg7Cj4+ID4+IC0KPj4gPj4gLSAgICAgICAgICAgIHZ4bGFuX3Ri bC5mbG93cyA9IHZ4bGFuX2Zsb3dzOwo+PiA+PiAtICAgICAgICAgICAgdnhsYW5fdGJsLml0ZW1z ID0gdnhsYW5faXRlbXM7Cj4+ID4+IC0gICAgICAgICAgICB2eGxhbl90YmwuZmxvd19udW0gPSAw Owo+PiA+PiAtICAgICAgICAgICAgdnhsYW5fdGJsLml0ZW1fbnVtID0gMDsKPj4gPj4gLSAgICAg ICAgICAgIHZ4bGFuX3RibC5tYXhfZmxvd19udW0gPSBpdGVtX251bTsKPj4gPj4gLSAgICAgICAg ICAgIHZ4bGFuX3RibC5tYXhfaXRlbV9udW0gPSBpdGVtX251bTsKPj4gPj4gLSAgICAgICAgICAg IGRvX3Z4bGFuX2dybyA9IDE7Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAgIHZ4bGFuX3RjcF9m bG93c1tpXS5zdGFydF9pbmRleCA9IElOVkFMSURfQVJSQVlfSU5ERVg7Cj4+ID4+ICsKPj4gPj4g KyAgICAgICAgICAgIHZ4bGFuX3RjcF90YmwuZmxvd3MgPSB2eGxhbl90Y3BfZmxvd3M7Cj4+ID4+ ICsgICAgICAgICAgICB2eGxhbl90Y3BfdGJsLml0ZW1zID0gdnhsYW5fdGNwX2l0ZW1zOwo+PiA+ PiArICAgICAgICAgICAgdnhsYW5fdGNwX3RibC5mbG93X251bSA9IDA7Cj4+ID4+ICsgICAgICAg ICAgICB2eGxhbl90Y3BfdGJsLml0ZW1fbnVtID0gMDsKPj4gPj4gKyAgICAgICAgICAgIHZ4bGFu X3RjcF90YmwubWF4X2Zsb3dfbnVtID0gaXRlbV9udW07Cj4+ID4+ICsgICAgICAgICAgICB2eGxh bl90Y3BfdGJsLm1heF9pdGVtX251bSA9IGl0ZW1fbnVtOwo+PiA+PiArICAgICAgICAgICAgZG9f dnhsYW5fdGNwX2dybyA9IDE7Cj4+ID4+ICsgICAgfQo+PiA+PiArCj4+ID4+ICsgICAgaWYgKHBh cmFtLT5ncm9fdHlwZXMgJiBSVEVfR1JPX0lQVjRfVlhMQU5fVURQX0lQVjQpIHsKPj4gPj4gKyAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtX251bTsgaSsrKQo+PiA+PiArICAgICAgICAg ICAgICAgICAgICB2eGxhbl91ZHBfZmxvd3NbaV0uc3RhcnRfaW5kZXggPSBJTlZBTElEX0FSUkFZ X0lOREVYOwo+PiA+PiArCj4+ID4+ICsgICAgICAgICAgICB2eGxhbl91ZHBfdGJsLmZsb3dzID0g dnhsYW5fdWRwX2Zsb3dzOwo+PiA+PiArICAgICAgICAgICAgdnhsYW5fdWRwX3RibC5pdGVtcyA9 IHZ4bGFuX3VkcF9pdGVtczsKPj4gPj4gKyAgICAgICAgICAgIHZ4bGFuX3VkcF90YmwuZmxvd19u dW0gPSAwOwo+PiA+PiArICAgICAgICAgICAgdnhsYW5fdWRwX3RibC5pdGVtX251bSA9IDA7Cj4+ ID4+ICsgICAgICAgICAgICB2eGxhbl91ZHBfdGJsLm1heF9mbG93X251bSA9IGl0ZW1fbnVtOwo+ PiA+PiArICAgICAgICAgICAgdnhsYW5fdWRwX3RibC5tYXhfaXRlbV9udW0gPSBpdGVtX251bTsK Pj4gPj4gKyAgICAgICAgICAgIGRvX3Z4bGFuX3VkcF9ncm8gPSAxOwo+PiA+PiAgICAgIH0KPj4g Pj4KPj4gPj4gICAgICBpZiAocGFyYW0tPmdyb190eXBlcyAmIFJURV9HUk9fVENQX0lQVjQpIHsK Pj4gPj4gQEAgLTIwNCw5ICsyMzYsMTggQEAgc3RydWN0IGdyb19jdHggewo+PiA+PiAgICAgICAg ICAgICAgICogd2lsbCBiZSBmbHVzaGVkIGZyb20gdGhlIHRhYmxlcy4KPj4gPj4gICAgICAgICAg ICAgICAqLwo+PiA+PiAgICAgICAgICAgICAgaWYgKElTX0lQVjRfVlhMQU5fVENQNF9QS1QocGt0 c1tpXS0+cGFja2V0X3R5cGUpICYmCj4+ID4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ZG9fdnhsYW5fZ3JvKSB7Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fdnhs YW5fdGNwX2dybykgewo+PiA+PiAgICAgICAgICAgICAgICAgICAgICByZXQgPSBncm9fdnhsYW5f dGNwNF9yZWFzc2VtYmxlKHBrdHNbaV0sCj4+ID4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZ4bGFuX3RibCwgMCk7Cj4+ID4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZ4bGFuX3RjcF90 YmwsIDApOwo+PiA+PiArICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID4gMCkKPj4gPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNZXJnZSBzdWNjZXNzZnVsbHkgKi8KPj4gPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYl9hZnRlcl9ncm8tLTsKPj4gPj4gKyAgICAg ICAgICAgICAgICAgICAgZWxzZSBpZiAocmV0IDwgMCkKPj4gPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnByb2Nlc3NfcGt0c1t1bnByb2Nlc3NfbnVtKytdID0gcGt0c1tpXTsKPj4g Pj4gKyAgICAgICAgICAgIH0gZWxzZSBpZiAoSVNfSVBWNF9WWExBTl9VRFA0X1BLVChwa3RzW2ld LT5wYWNrZXRfdHlwZSkgJiYKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb192 eGxhbl91ZHBfZ3JvKSB7Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAgIHJldCA9IGdyb192eGxh bl91ZHA0X3JlYXNzZW1ibGUocGt0c1tpXSwKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdnhsYW5fdWRwX3RibCwgMCk7Cj4+ID4+ICAg ICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPiAwKQo+PiA+PiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE1lcmdlIHN1Y2Nlc3NmdWxseSAqLwo+PiA+PiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5iX2FmdGVyX2dyby0tOwo+PiA+PiBAQCAtMjM2LDExICsyNzcsMTcgQEAg c3RydWN0IGdyb19jdHggewo+PiA+PiAgICAgICAgICAgICAgIHx8ICh1bnByb2Nlc3NfbnVtIDwg bmJfcGt0cykpIHsKPj4gPj4gICAgICAgICAgICAgIGkgPSAwOwo+PiA+PiAgICAgICAgICAgICAg LyogRmx1c2ggYWxsIHBhY2tldHMgZnJvbSB0aGUgdGFibGVzICovCj4+ID4+IC0gICAgICAgICAg ICBpZiAoZG9fdnhsYW5fZ3JvKSB7Cj4+ID4+IC0gICAgICAgICAgICAgICAgICAgIGkgPSBncm9f dnhsYW5fdGNwNF90YmxfdGltZW91dF9mbHVzaCgmdnhsYW5fdGJsLAo+PiA+PiArICAgICAgICAg ICAgaWYgKGRvX3Z4bGFuX3RjcF9ncm8pIHsKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgaSA9 IGdyb192eGxhbl90Y3A0X3RibF90aW1lb3V0X2ZsdXNoKCZ2eGxhbl90Y3BfdGJsLAo+PiA+PiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcGt0cywgbmJfcGt0cyk7Cj4+ ID4+ICAgICAgICAgICAgICB9Cj4+ID4+Cj4+ID4+ICsgICAgICAgICAgICBpZiAoZG9fdnhsYW5f dWRwX2dybykgewo+PiA+PiArICAgICAgICAgICAgICAgICAgICBpICs9IGdyb192eGxhbl91ZHA0 X3RibF90aW1lb3V0X2ZsdXNoKCZ2eGxhbl91ZHBfdGJsLAo+PiA+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCwgJnBrdHNbaV0sIG5iX3BrdHMgLSBpKTsKPj4gPj4gKwo+ PiA+PiArICAgICAgICAgICAgfQo+PiA+PiArCj4+ID4+ICAgICAgICAgICAgICBpZiAoZG9fdGNw NF9ncm8pIHsKPj4gPj4gICAgICAgICAgICAgICAgICAgICAgaSArPSBncm9fdGNwNF90YmxfdGlt ZW91dF9mbHVzaCgmdGNwX3RibCwgMCwKPj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZwa3RzW2ldLCBuYl9wa3RzIC0gaSk7Cj4+ID4+IEBAIC0yNjksMzMgKzMxNiw0 MiBAQCBzdHJ1Y3QgZ3JvX2N0eCB7Cj4+ID4+ICB7Cj4+ID4+ICAgICAgc3RydWN0IHJ0ZV9tYnVm ICp1bnByb2Nlc3NfcGt0c1tuYl9wa3RzXTsKPj4gPj4gICAgICBzdHJ1Y3QgZ3JvX2N0eCAqZ3Jv X2N0eCA9IGN0eDsKPj4gPj4gLSAgICB2b2lkICp0Y3BfdGJsLCAqdWRwX3RibCwgKnZ4bGFuX3Ri bDsKPj4gPj4gKyAgICB2b2lkICp0Y3BfdGJsLCAqdWRwX3RibCwgKnZ4bGFuX3RjcF90YmwsICp2 eGxhbl91ZHBfdGJsOwo+PiA+PiAgICAgIHVpbnQ2NF90IGN1cnJlbnRfdGltZTsKPj4gPj4gICAg ICB1aW50MTZfdCBpLCB1bnByb2Nlc3NfbnVtID0gMDsKPj4gPj4gLSAgICB1aW50OF90IGRvX3Rj cDRfZ3JvLCBkb192eGxhbl9ncm8sIGRvX3VkcDRfZ3JvOwo+PiA+PiArICAgIHVpbnQ4X3QgZG9f dGNwNF9ncm8sIGRvX3Z4bGFuX3RjcF9ncm8sIGRvX3VkcDRfZ3JvLCBkb192eGxhbl91ZHBfZ3Jv Owo+PiA+Pgo+PiA+PiAgICAgIGlmICh1bmxpa2VseSgoZ3JvX2N0eC0+Z3JvX3R5cGVzICYgKFJU RV9HUk9fSVBWNF9WWExBTl9UQ1BfSVBWNCB8Cj4+ID4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSVEVfR1JPX1RDUF9JUFY0IHwKPj4gPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJURV9HUk9fSVBWNF9WWExBTl9VRFBfSVBWNCB8Cj4+ID4+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEVfR1JPX1VEUF9JUFY0KSkgPT0g MCkpCj4+ID4+ICAgICAgICAgICAgICByZXR1cm4gbmJfcGt0czsKPj4gPj4KPj4gPj4gICAgICB0 Y3BfdGJsID0gZ3JvX2N0eC0+dGJsc1tSVEVfR1JPX1RDUF9JUFY0X0lOREVYXTsKPj4gPj4gLSAg ICB2eGxhbl90YmwgPSBncm9fY3R4LT50YmxzW1JURV9HUk9fSVBWNF9WWExBTl9UQ1BfSVBWNF9J TkRFWF07Cj4+ID4+ICsgICAgdnhsYW5fdGNwX3RibCA9IGdyb19jdHgtPnRibHNbUlRFX0dST19J UFY0X1ZYTEFOX1RDUF9JUFY0X0lOREVYXTsKPj4gPj4gICAgICB1ZHBfdGJsID0gZ3JvX2N0eC0+ dGJsc1tSVEVfR1JPX1VEUF9JUFY0X0lOREVYXTsKPj4gPj4gKyAgICB2eGxhbl91ZHBfdGJsID0g Z3JvX2N0eC0+dGJsc1tSVEVfR1JPX0lQVjRfVlhMQU5fVURQX0lQVjRfSU5ERVhdOwo+PiA+Pgo+ PiA+PiAgICAgIGRvX3RjcDRfZ3JvID0gKGdyb19jdHgtPmdyb190eXBlcyAmIFJURV9HUk9fVENQ X0lQVjQpID09Cj4+ID4+ICAgICAgICAgICAgICBSVEVfR1JPX1RDUF9JUFY0Owo+PiA+PiAtICAg IGRvX3Z4bGFuX2dybyA9IChncm9fY3R4LT5ncm9fdHlwZXMgJiBSVEVfR1JPX0lQVjRfVlhMQU5f VENQX0lQVjQpID09Cj4+ID4+ICsgICAgZG9fdnhsYW5fdGNwX2dybyA9IChncm9fY3R4LT5ncm9f dHlwZXMgJiBSVEVfR1JPX0lQVjRfVlhMQU5fVENQX0lQVjQpID09Cj4+ID4+ICAgICAgICAgICAg ICBSVEVfR1JPX0lQVjRfVlhMQU5fVENQX0lQVjQ7Cj4+ID4+ICAgICAgZG9fdWRwNF9ncm8gPSAo Z3JvX2N0eC0+Z3JvX3R5cGVzICYgUlRFX0dST19VRFBfSVBWNCkgPT0KPj4gPj4gICAgICAgICAg ICAgIFJURV9HUk9fVURQX0lQVjQ7Cj4+ID4+ICsgICAgZG9fdnhsYW5fdWRwX2dybyA9IChncm9f Y3R4LT5ncm9fdHlwZXMgJiBSVEVfR1JPX0lQVjRfVlhMQU5fVURQX0lQVjQpID09Cj4+ID4+ICsg ICAgICAgICAgICBSVEVfR1JPX0lQVjRfVlhMQU5fVURQX0lQVjQ7Cj4+ID4+Cj4+ID4+ICAgICAg Y3VycmVudF90aW1lID0gcnRlX3JkdHNjKCk7Cj4+ID4+Cj4+ID4+ICAgICAgZm9yIChpID0gMDsg aSA8IG5iX3BrdHM7IGkrKykgewo+PiA+PiAgICAgICAgICAgICAgaWYgKElTX0lQVjRfVlhMQU5f VENQNF9QS1QocGt0c1tpXS0+cGFja2V0X3R5cGUpICYmCj4+ID4+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgZG9fdnhsYW5fZ3JvKSB7Cj4+ID4+IC0gICAgICAgICAgICAgICAgICAgIGlm IChncm9fdnhsYW5fdGNwNF9yZWFzc2VtYmxlKHBrdHNbaV0sIHZ4bGFuX3RibCwKPj4gPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkb192eGxhbl90Y3BfZ3JvKSB7Cj4+ID4+ICsgICAg ICAgICAgICAgICAgICAgIGlmIChncm9fdnhsYW5fdGNwNF9yZWFzc2VtYmxlKHBrdHNbaV0sIHZ4 bGFuX3RjcF90YmwsCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGN1cnJlbnRfdGltZSkgPCAwKQo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVucHJvY2Vzc19wa3RzW3VucHJvY2Vzc19udW0rK10gPSBwa3RzW2ldOwo+PiA+PiArICAg ICAgICAgICAgfSBlbHNlIGlmIChJU19JUFY0X1ZYTEFOX1VEUDRfUEtUKHBrdHNbaV0tPnBhY2tl dF90eXBlKSAmJgo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX3Z4bGFuX3Vk cF9ncm8pIHsKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgaWYgKGdyb192eGxhbl91ZHA0X3Jl YXNzZW1ibGUocGt0c1tpXSwgdnhsYW5fdWRwX3RibCwKPj4gPj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF90aW1lKSA8IDApCj4+ID4+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5wcm9jZXNzX3BrdHNbdW5wcm9jZXNzX251bSsrXSA9 IHBrdHNbaV07Cj4+ID4+ICAgICAgICAgICAgICB9IGVsc2UgaWYgKElTX0lQVjRfVENQX1BLVChw a3RzW2ldLT5wYWNrZXRfdHlwZSkgJiYKPj4gPj4gQEAgLTM0MSw2ICszOTcsMTMgQEAgc3RydWN0 IGdyb19jdHggewo+PiA+PiAgICAgICAgICAgICAgbGVmdF9uYl9vdXQgPSBtYXhfbmJfb3V0IC0g bnVtOwo+PiA+PiAgICAgIH0KPj4gPj4KPj4gPj4gKyAgICBpZiAoKGdyb190eXBlcyAmIFJURV9H Uk9fSVBWNF9WWExBTl9VRFBfSVBWNCkgJiYgbWF4X25iX291dCA+IDApIHsKPj4gPj4gKyAgICAg ICAgICAgIG51bSArPSBncm9fdnhsYW5fdWRwNF90YmxfdGltZW91dF9mbHVzaChncm9fY3R4LT50 YmxzWwo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJURV9HUk9fSVBWNF9WWExB Tl9VRFBfSVBWNF9JTkRFWF0sCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1 c2hfdGltZXN0YW1wLCAmb3V0W251bV0sIGxlZnRfbmJfb3V0KTsKPj4gPj4gKyAgICAgICAgICAg IGxlZnRfbmJfb3V0ID0gbWF4X25iX291dCAtIG51bTsKPj4gPgo+PiA+RG9uJ3QgbmVlZCB0byBj YWxjdWxhdGUgbGVmdF9uYl9vdXQgaGVyZS4gSW4gdGhlIHByZXZpb3VzIHBhdGNoLCB5b3UKPj4g PmFsc28gY2FsY3VsYXRlIGl0IGZvciBVRFAgR1JPLiBQbGVhc2UgcmVtb3ZlIGl0IGJvdGguCj4+ IAo+PiBJIHRoaW5rIGtlZXBpbmcgaXQgaGVyZSBpc24ndCBiYWQgdGhpbmcsIGlmIHNvbWVvbmUg d2lsbCBhZGQgYSBuZXcgR1JPIHR5cGUgaGVyZSwgaGUvc2hlIHdvbid0IG1ha2UgYSBtaXN0YWtl Lgo+IAo+SSBkb24ndCB0aGluayBzby4gSXQncyB1bm5lY2Vzc2FyeSBmb3IgY3VycmVudCBkZXNp Z24uCj5JZiBvdGhlcnMgd2FudCB0byBhZGQgbmV3IEdSTyB0eXBlcywgdGhleSB3aWxsIHdyaXRl Cj5jb3JyZWN0IGNvZGUuCj4gCj4+IAo+PiA+Cj4+IAo+PiAKPj4gCj4+ICAKPj4gCgogCgog