From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B7986C47DD9 for ; Wed, 27 Mar 2024 06:48:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=wVNLkRdnaw8tyr47/mM8M7XvIgaVMhZknylW3JXdQK8=; b=xUJmzpS3q7yEM7 MYHiDqMtmYhR9rnwPnCLyK8v+zxZmhPrAY60KwC7RvwyD6nCBvKolySr/lAc2VYfJIi4JmsFbLcuw j5t3c1NTLrK8kC3xnk13OjP2h2h5CVwnHYtDFdAgCl6ZeCXqR/cwyT5edJjNsLnYGk4OYutnnUkbs +7Rn2cfgDpi2H6fRGndr2sAIT2/ZFDWQw9zLUAITE93jmv+uqXQhYcmXBa8bgVFy9qQ9mqcj4kH0S 2yQbLTHsuYj1iA/ljHRWcwZLuZU6JDX+lwzg0YnrJiQOxuCgx3wyPGC+hdj+wDE6MjW5lYwx7bKG2 fmcM4TeTwR/kJeMlvl9Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rpN4y-00000007ii0-33pB; Wed, 27 Mar 2024 06:48:08 +0000 Received: from out30-124.freemail.mail.aliyun.com ([115.124.30.124]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rpM7C-00000007ZMQ-3jqs for linux-arm-kernel@lists.infradead.org; Wed, 27 Mar 2024 05:46:27 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1711518377; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; bh=OSHyGfVhKnUFgIS6w9GodS24K8CDECRgROMq90kNB2o=; b=jWtYxgZ/rwQB1+ScRvdhi3fM8xKb4EhApOe0PCLLH27Pt/U5l6JCXk4UUCxnDIIX/eQ0rEIM6YqmiTPVbl3TOXUJa7ZW2nSSBGWzr28iM2ZK9SACyRx4xhG49v89fhM5eEru2Scfwgb7HxKGZUd8/IcZvm6kfVtu9LU/c/YEfD4= X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R941e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046059;MF=xueshuai@linux.alibaba.com;NM=1;PH=DS;RN=18;SR=0;TI=SMTPD_---0W3NXxXZ_1711518373; Received: from 30.240.112.129(mailfrom:xueshuai@linux.alibaba.com fp:SMTPD_---0W3NXxXZ_1711518373) by smtp.aliyun-inc.com; Wed, 27 Mar 2024 13:46:15 +0800 Message-ID: <3dc79e45-2256-43af-9f4d-57948f687458@linux.alibaba.com> Date: Wed, 27 Mar 2024 13:46:11 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 1/2] ACPI/AEST: Initial AEST driver Content-Language: en-US To: Ruidong Tian , catalin.marinas@arm.com, will@kernel.org, lpieralisi@kernel.org, guohanjun@huawei.com, sudeep.holla@arm.com, baolin.wang@linux.alibaba.com, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, rafael@kernel.org, lenb@kernel.org, tony.luck@intel.com, bp@alien8.de, linux-edac@vger.kernel.org, "james.morse@arm.com" Cc: tianruidond@linux.alibaba.com, Tyler Baicar References: <20240321025317.114621-1-tianruidong@linux.alibaba.com> <20240321025317.114621-2-tianruidong@linux.alibaba.com> From: Shuai Xue In-Reply-To: <20240321025317.114621-2-tianruidong@linux.alibaba.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240326_224623_807807_495D2FFA X-CRM114-Status: GOOD ( 31.92 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAyMDI0LzMvMjEgMTA6NTMsIFJ1aWRvbmcgVGlhbiB3cm90ZToKPiBGcm9tOiBUeWxlciBC YWljYXIgPGJhaWNhckBvcy5hbXBlcmVjb21wdXRpbmcuY29tPgo+IAo+IEFkZCBzdXBwb3J0IGZv ciBwYXJzaW5nIHRoZSBBUk0gRXJyb3IgU291cmNlIFRhYmxlIGFuZCBiYXNpYyBoYW5kbGluZyBv Zgo+IGVycm9ycyByZXBvcnRlZCB0aHJvdWdoIGJvdGggbWVtb3J5IG1hcHBlZCBhbmQgc3lzdGVt IHJlZ2lzdGVyIGludGVyZmFjZXMuCj4gCj4gQXNzdW1lIHN5c3RlbSByZWdpc3RlciBpbnRlcmZh Y2VzIGFyZSBvbmx5IHJlZ2lzdGVyZWQgd2l0aCBwcml2YXRlCj4gcGVyaXBoZXJhbCBpbnRlcnJ1 cHRzIChQUElzKTsgb3RoZXJ3aXNlIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGUKPiBjb3JlIGhh bmRsaW5nIHRoZSBlcnJvciBpcyB0aGUgY29yZSB3aGljaCB0b29rIHRoZSBlcnJvciBhbmQgaGFz IHRoZQo+IHN5bmRyb21lIGluZm8gaW4gaXRzIHN5c3RlbSByZWdpc3RlcnMuCj4gCj4gSW4ga2Vy bmVsLWZpcnN0IG1vZGUsIGFsbCBjb25maWd1cmF0aW9uIGlzIGNvbnRyb2xsZWQgYnkga2VybmVs LCBpbmNsdWRlCj4gQ0UgY2VfdGhyZXNob2xkIGFuZCBpbnRlcnJ1cHQgZW5hYmxlL2Rpc2FibGUu Cj4gCj4gQWxsIGRldGVjdGVkIGVycm9ycyB3aWxsIGJlIHByb2Nlc3NlZCBhcyBmb2xsb3c6Cj4g ICAtIENFLCBERTogdXNlIGEgd29ya3F1ZXVlIHRvIGxvZyB0aGlzIGhhcmR3YXJlIGVycm9ycy4K PiAgIC0gVUVSLCBVRU86IGxvZyBpdCBhbmQgY2FsbCBtZW1vcnlfZmFpbHVyZSBpbiB3b3JrcXVl ZS4KPiAgIC0gVUMsIFVFVTogcGFuaWMgaW4gaXJxIGNvbnRleHQuCj4gCj4gU2lnbmVkLW9mZi1i eTogVHlsZXIgQmFpY2FyIDxiYWljYXJAb3MuYW1wZXJlY29tcHV0aW5nLmNvbT4KPiBTaWduZWQt b2ZmLWJ5OiBSdWlkb25nIFRpYW4gPHRpYW5ydWlkb25nQGxpbnV4LmFsaWJhYmEuY29tPgo+IC0t LQo+ICBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgIHwgIDExICsKPiAgYXJjaC9hcm02NC9p bmNsdWRlL2FzbS9yYXMuaCB8ICA3MSArKysKPiAgZHJpdmVycy9hY3BpL2FybTY0L0tjb25maWcg ICB8ICAxMCArCj4gIGRyaXZlcnMvYWNwaS9hcm02NC9NYWtlZmlsZSAgfCAgIDEgKwo+ICBkcml2 ZXJzL2FjcGkvYXJtNjQvYWVzdC5jICAgIHwgODM0ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gIGluY2x1ZGUvbGludXgvYWNwaV9hZXN0LmggICAgfCAgOTIgKysrKwo+ICBp bmNsdWRlL2xpbnV4L2NwdWhvdHBsdWcuaCAgIHwgICAxICsKPiAgNyBmaWxlcyBjaGFuZ2VkLCAx MDIwIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtNjQvaW5jbHVk ZS9hc20vcmFzLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvYWNwaS9hcm02NC9hZXN0 LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvYWNwaV9hZXN0LmgKPiAKPiBk aWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwo+IGluZGV4IGRkNWRlNTQwZWMw Yi4uMzQ5MDBkNGJiNjc3IDEwMDY0NAo+IC0tLSBhL01BSU5UQUlORVJTCj4gKysrIGIvTUFJTlRB SU5FUlMKPiBAQCAtMzMwLDYgKzMzMCwxNyBAQCBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQo+ICBTOglNYWludGFp bmVkCj4gIEY6CWRyaXZlcnMvYWNwaS9hcm02NAo+ICAKPiArQUNQSSBBRVNUCj4gK006CVR5bGVy IEJhaWNhciA8YmFpY2FyQG9zLmFtcGVyZWNvbXB1dGluZy5jb20+Cj4gK006CVJ1aWRvbmcgVGlh biA8dGlhbnJ1aWRvbmRAbGludXguYWxpYmFiYS5jb20+Cj4gK0w6CWxpbnV4LWFjcGlAdmdlci5r ZXJuZWwub3JnCj4gK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwo+ICtT OglTdXBwb3J0ZWQKPiArRjoJYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9yYXMuaAo+ICtGOglkcml2 ZXJzL2FjcGkvYXJtNjQvYWVzdC5jCj4gK0Y6CWluY2x1ZGUvbGludXgvYWNwaV9hZXN0LmgKPiAr Cj4gKwo+ICBBQ1BJIEZPUiBSSVNDLVYgKEFDUEkvcmlzY3YpCj4gIE06CVN1bmlsIFYgTCA8c3Vu aWx2bEB2ZW50YW5hbWljcm8uY29tPgo+ICBMOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZwo+ IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Jhcy5oIGIvYXJjaC9hcm02NC9p bmNsdWRlL2FzbS9yYXMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAw MDAwLi4wNDY2N2YwZGUzMGYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvYXJjaC9hcm02NC9pbmNs dWRlL2FzbS9yYXMuaAo+IEBAIC0wLDAgKzEsNzEgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAgKi8KPiArI2lmbmRlZiBfX0FTTV9SQVNfSAo+ICsjZGVmaW5lIF9fQVNN X1JBU19ICj4gKwo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L2JpdHMuaD4KPiArCj4gKy8qIEVSUjxuPkZSICovCj4gKyNkZWZpbmUgRVJSX0ZSX1JQICAgICAg ICAgICAgICAgICAgICAgIEJJVCgxNSkKPiArI2RlZmluZSBFUlJfRlJfQ0VDICAgICAgICAgICAg ICAgICAgICAgR0VOTUFTS19VTEwoMTQsIDEyKQo+ICsKPiArI2RlZmluZSBFUlJfRlJfUlBfU0lO R0xFX0NPVU5URVIgICAgICAgMAo+ICsjZGVmaW5lIEVSUl9GUl9SUF9ET1VCTEVfQ09VTlRFUiAg ICAgICAxCj4gKwo+ICsjZGVmaW5lIEVSUl9GUl9DRUNfMEJfQ09VTlRFUiAgICAgICAgICAwCj4g KyNkZWZpbmUgRVJSX0ZSX0NFQ184Ql9DT1VOVEVSICAgICAgICAgIEJJVCgxKQo+ICsjZGVmaW5l IEVSUl9GUl9DRUNfMTZCX0NPVU5URVIgICAgICAgICBCSVQoMikKPiArCj4gKy8qIEVSUjxuPlNU QVRVUyAqLwo+ICsjZGVmaW5lIEVSUl9TVEFUVVNfQVYJCUJJVCgzMSkKPiArI2RlZmluZSBFUlJf U1RBVFVTX1YJCUJJVCgzMCkKPiArI2RlZmluZSBFUlJfU1RBVFVTX1VFCQlCSVQoMjkpCj4gKyNk ZWZpbmUgRVJSX1NUQVRVU19FUgkJQklUKDI4KQo+ICsjZGVmaW5lIEVSUl9TVEFUVVNfT0YJCUJJ VCgyNykKPiArI2RlZmluZSBFUlJfU1RBVFVTX01WCQlCSVQoMjYpCj4gKyNkZWZpbmUgRVJSX1NU QVRVU19DRQkJKEJJVCgyNSkgfCBCSVQoMjQpKQo+ICsjZGVmaW5lIEVSUl9TVEFUVVNfREUJCUJJ VCgyMykKPiArI2RlZmluZSBFUlJfU1RBVFVTX1BOCQlCSVQoMjIpCj4gKyNkZWZpbmUgRVJSX1NU QVRVU19VRVQJCShCSVQoMjEpIHwgQklUKDIwKSkKPiArI2RlZmluZSBFUlJfU1RBVFVTX0NJCQlC SVQoMTkpCj4gKyNkZWZpbmUgRVJSX1NUQVRVU19JRVJSCQlHRU5NQVNLX1VMTCgxNSwgOCkKPiAr I2RlZmluZSBFUlJfU1RBVFVTX1NFUlIJCUdFTk1BU0tfVUxMKDcsIDApCj4gKwo+ICsvKiBUaGVz ZSBiaXQgaXMgd3JpdGUtb25lLXRvLWNsZWFyICovCgpUeXBvOiBzL1RoZXNlIGJpdCBpcy9UaGVz ZSBiaXRzIGFyZQoKPiArI2RlZmluZSBFUlJfU1RBVFVTX1cxVEMJCShFUlJfU1RBVFVTX0FWIHwg RVJSX1NUQVRVU19WIHwgRVJSX1NUQVRVU19VRSB8IFwKPiArCQkJCUVSUl9TVEFUVVNfRVIgfCBF UlJfU1RBVFVTX09GIHwgRVJSX1NUQVRVU19NViB8IFwKPiArCQkJCUVSUl9TVEFUVVNfQ0UgfCBF UlJfU1RBVFVTX0RFIHwgRVJSX1NUQVRVU19QTiB8IFwKPiArCQkJCUVSUl9TVEFUVVNfVUVUIHwg RVJSX1NUQVRVU19DSSkKPiArCj4gKyNkZWZpbmUgRVJSX1NUQVRVU19VRVRfVUMJMAo+ICsjZGVm aW5lIEVSUl9TVEFUVVNfVUVUX1VFVQkxCj4gKyNkZWZpbmUgRVJSX1NUQVRVU19VRVRfVUVSCTIK PiArI2RlZmluZSBFUlJfU1RBVFVTX1VFVF9VRU8JMwo+ICsKPiArLyogRVJSPG4+Q1RMUiAqLwo+ ICsjZGVmaW5lIEVSUl9DVExSX0ZJCQlCSVQoMykKPiArI2RlZmluZSBFUlJfQ1RMUl9VSQkJQklU KDIpCj4gKwo+ICsvKiBFUlI8bj5BRERSICovCj4gKyNkZWZpbmUgRVJSX0FERFJfQUkJCUJJVCg2 MSkKPiArI2RlZmluZSBFUlJfQUREUl9QQUREUgkJR0VOTUFTS19VTEwoNTUsIDApCj4gKwo+ICsv KiBFUlI8bj5NSVNDMCAqLwo+ICsKPiArLyogRVJSPG4+RlIuQ0VDID09IDBiMDEwLCBFUlI8bj5G Ui5SUCA9PSAwICAqLwo+ICsjZGVmaW5lIEVSUl9NSVNDMF84Ql9PRgkJQklUKDM5KQo+ICsjZGVm aW5lIEVSUl9NSVNDMF84Ql9DRUMJR0VOTUFTS19VTEwoMzgsIDMyKQo+ICsKPiArLyogRVJSPG4+ RlIuQ0VDID09IDBiMTAwLCBFUlI8bj5GUi5SUCA9PSAwICAqLwo+ICsjZGVmaW5lIEVSUl9NSVND MF8xNkJfT0YJQklUKDQ3KQo+ICsjZGVmaW5lIEVSUl9NSVNDMF8xNkJfQ0VDCUdFTk1BU0tfVUxM KDQ2LCAzMikKPiArCj4gK3N0cnVjdCByYXNfZXh0X3JlZ3Mgewo+ICsJdTY0IGVycl9mcjsKPiAr CXU2NCBlcnJfY3RscjsKPiArCXU2NCBlcnJfc3RhdHVzOwo+ICsJdTY0IGVycl9hZGRyOwo+ICsJ dTY0IGVycl9taXNjWzRdOwo+ICt9Owo+ICsKPiArI2VuZGlmCS8qIF9fQVNNX1JBU19IICovCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hcm02NC9LY29uZmlnIGIvZHJpdmVycy9hY3BpL2Fy bTY0L0tjb25maWcKPiBpbmRleCBiM2VkNjIxMjI0NGMuLjYzOWRiNjcxYzVjZiAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2FjcGkvYXJtNjQvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvYWNwaS9hcm02 NC9LY29uZmlnCj4gQEAgLTIxLDMgKzIxLDEzIEBAIGNvbmZpZyBBQ1BJX0FHREkKPiAgCj4gIGNv bmZpZyBBQ1BJX0FQTVQKPiAgCWJvb2wKPiArCj4gK2NvbmZpZyBBQ1BJX0FFU1QKPiArCWJvb2wg IkFSTSBFcnJvciBTb3VyY2UgVGFibGUgU3VwcG9ydCIKPiArCj4gKwloZWxwCj4gKwkgIFRoZSBB cm0gRXJyb3IgU291cmNlIFRhYmxlIChBRVNUKSBwcm92aWRlcyBkZXRhaWxzIG9uIEFDUEkKPiAr CSAgZXh0ZW5zaW9ucyB0aGF0IGVuYWJsZSBrZXJuZWwtZmlyc3QgaGFuZGxpbmcgb2YgZXJyb3Jz IGluIGEKPiArCSAgc3lzdGVtIHRoYXQgc3VwcG9ydHMgdGhlIEFybXY4IFJBUyBleHRlbnNpb25z Lgo+ICsKPiArCSAgSWYgc2V0LCB0aGUga2VybmVsIHdpbGwgcmVwb3J0IGFuZCBsb2cgaGFyZHdh cmUgZXJyb3JzLgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYXJtNjQvTWFrZWZpbGUgYi9k cml2ZXJzL2FjcGkvYXJtNjQvTWFrZWZpbGUKPiBpbmRleCAxNDNkZWJjMWJhNGEuLmI1Yjc0MDA1 OGM0NiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2FjcGkvYXJtNjQvTWFrZWZpbGUKPiArKysgYi9k cml2ZXJzL2FjcGkvYXJtNjQvTWFrZWZpbGUKPiBAQCAtNSwzICs1LDQgQEAgb2JqLSQoQ09ORklH X0FDUElfR1REVCkgCSs9IGd0ZHQubwo+ICBvYmotJChDT05GSUdfQUNQSV9BUE1UKSAJKz0gYXBt dC5vCj4gIG9iai0kKENPTkZJR19BUk1fQU1CQSkJCSs9IGFtYmEubwo+ICBvYmoteQkJCQkrPSBk bWEubyBpbml0Lm8KPiArb2JqLSQoQ09ORklHX0FDUElfQUVTVCkgCSs9IGFlc3Qubwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2FjcGkvYXJtNjQvYWVzdC5jIGIvZHJpdmVycy9hY3BpL2FybTY0L2Fl c3QuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5hYjE3YWE1 ZjU5OTcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9hY3BpL2FybTY0L2Flc3QuYwo+ IEBAIC0wLDAgKzEsODM0IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w Cj4gKy8qCj4gKyAqIEFSTSBFcnJvciBTb3VyY2UgVGFibGUgU3VwcG9ydAo+ICsgKgo+ICsgKiBD b3B5cmlnaHQgKGMpIDIwMjEsIEFtcGVyZSBDb21wdXRpbmcgTExDCj4gKyAqIENvcHlyaWdodCAo YykgMjAyMS0yMDI0LCBBbGliYWJhIEdyb3VwLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51 eC9hY3BpLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9hY3BpX2Flc3QuaD4KPiArI2luY2x1ZGUgPGxp bnV4L2NwdWhvdHBsdWcuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVk ZSA8bGludXgvZ2VuYWxsb2MuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2xsaXN0Lmg+Cj4gKyNpbmNs dWRlIDxhY3BpL2FjdGJsLmg+Cj4gKyNpbmNsdWRlIDxhc20vcmFzLmg+Cj4gKwo+ICsjdW5kZWYg cHJfZm10Cj4gKyNkZWZpbmUgcHJfZm10KGZtdCkgIkFDUEkgQUVTVDogIiBmbXQKPiArCj4gKyNk ZWZpbmUgQ0FTRV9SRUFEKHJlcywgeCkJCQkJCQlcCj4gKwljYXNlICh4KTogewkJCQkJCQlcCj4g KwkJcmVzID0gcmVhZF9zeXNyZWdfcyhTWVNfIyN4IyNfRUwxKTsJCQlcCj4gKwkJYnJlYWs7CQkJ CQkJCVwKPiArCX0KPiArCj4gKyNkZWZpbmUgQ0FTRV9XUklURSh2YWwsIHgpCQkJCQkJXAo+ICsJ Y2FzZSAoeCk6IHsJCQkJCQkJXAo+ICsJCXdyaXRlX3N5c3JlZ19zKCh2YWwpLCBTWVNfIyN4IyNf RUwxKTsJCQlcCj4gKwkJYnJlYWs7CQkJCQkJCVwKPiArCX0KPiArCj4gKyNkZWZpbmUgZm9yX2Vh Y2hfaW1wbGVtZW50ZWRfcmVjb3JkKGluZGV4LCBub2RlKQkJCVwKPiArCQlmb3IgKChpbmRleCkg PSBub2RlLT5pbnRlcmZhY2UucmVjb3JkX3N0YXJ0OwkJXAo+ICsJCQkoaW5kZXgpIDwgbm9kZS0+ aW50ZXJmYWNlLnJlY29yZF9lbmQ7CQlcCj4gKwkJCShpbmRleCkrKykKPiArCj4gKyNkZWZpbmUg QUVTVF9MT0dfUFJFRklYX0JVRkZFUgk2NAo+ICsKPiArLyoKPiArICogVGhpcyBtZW1vcnkgcG9v bCBpcyBvbmx5IHRvIGJlIHVzZWQgdG8gc2F2ZSBBRVNUIG5vZGUgaW4gQUVTVCBpcnEgY29udGV4 dC4KPiArICogVGhlcmUgY2FuIGJlIDUwMCBBRVNUIG5vZGUgYXQgbW9zdC4KPiArICovCj4gKyNk ZWZpbmUgQUVTVF9OT0RFX0FMTE9DRURfTUFYCTUwMAo+ICsKPiArc3RhdGljIHN0cnVjdCBhY3Bp X3RhYmxlX2hlYWRlciAqYWVzdF90YWJsZTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgYWVzdF9ub2Rl IF9fcGVyY3B1ICoqYWVzdF9wcGlfZGF0YTsKPiArCj4gK3N0YXRpYyBpbnQgKnBwaV9pcnFzOwo+ ICtzdGF0aWMgdTggbnVtX3BwaTsKPiArc3RhdGljIHU4IHBwaV9pZHg7Cj4gKwo+ICtzdGF0aWMg c3RydWN0IHdvcmtfc3RydWN0IGFlc3Rfd29yazsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZ2VuX3Bv b2wgKmFlc3Rfbm9kZV9wb29sOwo+ICtzdGF0aWMgc3RydWN0IGxsaXN0X2hlYWQgYWVzdF9ub2Rl X2xsaXN0Owo+ICsKPiArc3RhdGljIHU2NCBhZXN0X3N5c3JlZ19yZWFkKHU2NCBfX3VudXNlZCwg dTMyIG9mZnNldCkKPiArewo+ICsJdTY0IHJlczsKPiArCj4gKwlzd2l0Y2ggKG9mZnNldCkgewo+ ICsJQ0FTRV9SRUFEKHJlcywgRVJYRlIpCj4gKwlDQVNFX1JFQUQocmVzLCBFUlhDVExSKQo+ICsJ Q0FTRV9SRUFEKHJlcywgRVJYU1RBVFVTKQo+ICsJQ0FTRV9SRUFEKHJlcywgRVJYQUREUikKPiAr CUNBU0VfUkVBRChyZXMsIEVSWE1JU0MwKQo+ICsJQ0FTRV9SRUFEKHJlcywgRVJYTUlTQzEpCj4g KwlDQVNFX1JFQUQocmVzLCBFUlhNSVNDMikKPiArCUNBU0VfUkVBRChyZXMsIEVSWE1JU0MzKQo+ ICsJZGVmYXVsdCA6Cj4gKwkJcmVzID0gMDsKPiArCX0KPiArCXJldHVybiByZXM7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGFlc3Rfc3lzcmVnX3dyaXRlKHU2NCBiYXNlLCB1MzIgb2Zmc2V0LCB1 NjQgdmFsKQo+ICt7Cj4gKwlzd2l0Y2ggKG9mZnNldCkgewo+ICsJQ0FTRV9XUklURSh2YWwsIEVS WEZSKQo+ICsJQ0FTRV9XUklURSh2YWwsIEVSWENUTFIpCj4gKwlDQVNFX1dSSVRFKHZhbCwgRVJY U1RBVFVTKQo+ICsJQ0FTRV9XUklURSh2YWwsIEVSWEFERFIpCj4gKwlDQVNFX1dSSVRFKHZhbCwg RVJYTUlTQzApCj4gKwlDQVNFX1dSSVRFKHZhbCwgRVJYTUlTQzEpCj4gKwlDQVNFX1dSSVRFKHZh bCwgRVJYTUlTQzIpCj4gKwlDQVNFX1dSSVRFKHZhbCwgRVJYTUlTQzMpCj4gKwlkZWZhdWx0IDoK PiArCQlyZXR1cm47Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB1NjQgYWVzdF9pb21lbV9yZWFk KHU2NCBiYXNlLCB1MzIgb2Zmc2V0KQo+ICt7Cj4gKwlyZXR1cm4gcmVhZHFfcmVsYXhlZCgodm9p ZCAqKShiYXNlICsgb2Zmc2V0KSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFlc3RfaW9tZW1f d3JpdGUodTY0IGJhc2UsIHUzMiBvZmZzZXQsIHU2NCB2YWwpCj4gK3sKPiArCXdyaXRlcV9yZWxh eGVkKHZhbCwgKHZvaWQgKikoYmFzZSArIG9mZnNldCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBhZXN0X3ByaW50KHN0cnVjdCBhZXN0X25vZGVfbGxpc3QgKmxub2RlKQo+ICt7Cj4gKwlzdGF0 aWMgYXRvbWljX3Qgc2Vxbm8gPSB7IDAgfTsKPiArCXVuc2lnbmVkIGludCBjdXJyX3NlcW5vOwo+ ICsJY2hhciBwZnhfc2VxW0FFU1RfTE9HX1BSRUZJWF9CVUZGRVJdOwo+ICsJaW50IGluZGV4Owo+ ICsJc3RydWN0IHJhc19leHRfcmVncyAqcmVnczsKPiArCj4gKwljdXJyX3NlcW5vID0gYXRvbWlj X2luY19yZXR1cm4oJnNlcW5vKTsKPiArCXNucHJpbnRmKHBmeF9zZXEsIHNpemVvZihwZnhfc2Vx KSwgInsldX0iIEhXX0VSUiwgY3Vycl9zZXFubyk7Cj4gKwlwcl9pbmZvKCIlc0hhcmR3YXJlIGVy cm9yIGZyb20gJXNcbiIsIHBmeF9zZXEsIGxub2RlLT5ub2RlX25hbWUpOwo+ICsKPiArCXN3aXRj aCAobG5vZGUtPnR5cGUpIHsKPiArCWNhc2UgQUNQSV9BRVNUX1BST0NFU1NPUl9FUlJPUl9OT0RF Ogo+ICsJCXByX2VycigiJXMgRXJyb3IgZnJvbSBDUFUlZFxuIiwgcGZ4X3NlcSwgbG5vZGUtPmlk MCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEFDUElfQUVTVF9NRU1PUllfRVJST1JfTk9ERToKPiAr CQlwcl9lcnIoIiVzIEVycm9yIGZyb20gbWVtb3J5IGF0IFNSQVQgcHJveGltaXR5IGRvbWFpbiAw eCV4XG4iLAo+ICsJCQlwZnhfc2VxLCBsbm9kZS0+aWQwKTsKPiArCQlicmVhazsKPiArCWNhc2Ug QUNQSV9BRVNUX1NNTVVfRVJST1JfTk9ERToKPiArCQlwcl9lcnIoIiVzIEVycm9yIGZyb20gU01N VSBJT1JUIG5vZGUgMHgleCBzdWJjb21wb25lbnQgMHgleFxuIiwKPiArCQkJcGZ4X3NlcSwgbG5v ZGUtPmlkMCwgbG5vZGUtPmlkMSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEFDUElfQUVTVF9WRU5E T1JfRVJST1JfTk9ERToKPiArCQlwcl9lcnIoIiVzIEVycm9yIGZyb20gdmVuZG9yIGhpZCAweCV4 IHVpZCAweCV4XG4iLAo+ICsJCQlwZnhfc2VxLCBsbm9kZS0+aWQwLCBsbm9kZS0+aWQxKTsKPiAr CQlicmVhazsKPiArCWNhc2UgQUNQSV9BRVNUX0dJQ19FUlJPUl9OT0RFOgo+ICsJCXByX2Vycigi JXMgRXJyb3IgZnJvbSBHSUMgdHlwZSAweCV4IGluc3RhbmNlIDB4JXhcbiIsCj4gKwkJCXBmeF9z ZXEsIGxub2RlLT5pZDAsIGxub2RlLT5pZDEpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiAr CQlwcl9lcnIoIiVzIFVua25vd24gQUVTVCBub2RlIHR5cGVcbiIsIHBmeF9zZXEpOwo+ICsJCXJl dHVybjsKPiArCX0KPiArCj4gKwlpbmRleCA9IGxub2RlLT5pbmRleDsKPiArCXJlZ3MgPSBsbm9k ZS0+cmVnczsKPiArCj4gKwlwcl9lcnIoIiVzICBFUlIldUZSOiAweCVsbHhcbiIsIHBmeF9zZXEs IGluZGV4LCByZWdzLT5lcnJfZnIpOwo+ICsJcHJfZXJyKCIlcyAgRVJSJXVDVFJMOiAweCVsbHhc biIsIHBmeF9zZXEsIGluZGV4LCByZWdzLT5lcnJfY3Rscik7Cj4gKwlwcl9lcnIoIiVzICBFUlIl dVNUQVRVUzogMHglbGx4XG4iLCBwZnhfc2VxLCBpbmRleCwgcmVncy0+ZXJyX3N0YXR1cyk7Cj4g KwlpZiAocmVncy0+ZXJyX3N0YXR1cyAmIEVSUl9TVEFUVVNfQVYpCj4gKwkJcHJfZXJyKCIlcyAg RVJSJXVBRERSOiAweCVsbHhcbiIsIHBmeF9zZXEsIGluZGV4LCByZWdzLT5lcnJfYWRkcik7Cj4g Kwo+ICsJaWYgKHJlZ3MtPmVycl9zdGF0dXMgJiBFUlJfU1RBVFVTX01WKSB7Cj4gKwkJcHJfZXJy KCIlcyAgRVJSJXVNSVNDMDogMHglbGx4XG4iLCBwZnhfc2VxLCBpbmRleCwgcmVncy0+ZXJyX21p c2NbMF0pOwo+ICsJCXByX2VycigiJXMgIEVSUiV1TUlTQzE6IDB4JWxseFxuIiwgcGZ4X3NlcSwg aW5kZXgsIHJlZ3MtPmVycl9taXNjWzFdKTsKPiArCQlwcl9lcnIoIiVzICBFUlIldU1JU0MyOiAw eCVsbHhcbiIsIHBmeF9zZXEsIGluZGV4LCByZWdzLT5lcnJfbWlzY1syXSk7Cj4gKwkJcHJfZXJy KCIlcyAgRVJSJXVNSVNDMzogMHglbGx4XG4iLCBwZnhfc2VxLCBpbmRleCwgcmVncy0+ZXJyX21p c2NbM10pOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhZXN0X2hhbmRsZV9tZW1vcnlf ZmFpbHVyZShzdHJ1Y3QgYWVzdF9ub2RlX2xsaXN0ICpsbm9kZSkKPiArewo+ICsJdW5zaWduZWQg bG9uZyBwZm47Cj4gKwl1NjQgYWRkcjsKPiArCj4gKwlpZiAodGVzdF9iaXQobG5vZGUtPmluZGV4 LCAmbG5vZGUtPmFkZHJlc3NpbmdfbW9kZSkgfHwKPiArCQkobG5vZGUtPnJlZ3MtPmVycl9hZGRy ICYgRVJSX0FERFJfQUkpKQo+ICsJCXJldHVybjsKPiArCj4gKwlhZGRyID0gbG5vZGUtPnJlZ3Mt PmVycl9hZGRyICYgKDFVTCA8PCBDT05GSUdfQVJNNjRfUEFfQklUUyk7Cj4gKwlwZm4gPSBQSFlT X1BGTihhZGRyKTsKPiArCj4gKwlpZiAoIXBmbl92YWxpZChwZm4pKSB7Cj4gKwkJcHJfd2FybihI V19FUlIgIkludmFsaWQgcGh5c2ljYWwgYWRkcmVzczogJSNsbHhcbiIsIGFkZHIpOwo+ICsJCXJl dHVybjsKPiArCX0KPiArCj4gKwltZW1vcnlfZmFpbHVyZShwZm4sIDApOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBhZXN0X25vZGVfcG9vbF9wcm9jZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqX191 bnVzZWQpCj4gK3sKPiArCXN0cnVjdCBsbGlzdF9ub2RlICpoZWFkOwo+ICsJc3RydWN0IGFlc3Rf bm9kZV9sbGlzdCAqbG5vZGUsICp0bXA7Cj4gKwl1NjQgc3RhdHVzOwo+ICsKPiArCWhlYWQgPSBs bGlzdF9kZWxfYWxsKCZhZXN0X25vZGVfbGxpc3QpOwo+ICsJaWYgKCFoZWFkKQo+ICsJCXJldHVy bjsKPiArCj4gKwloZWFkID0gbGxpc3RfcmV2ZXJzZV9vcmRlcihoZWFkKTsKPiArCWxsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUobG5vZGUsIHRtcCwgaGVhZCwgbGxub2RlKSB7CgpEbyB3ZSByZWFs bHkgbmVlZCB0byBwcmV0ZWN0IHRoZSBsbG5vZGUgd2l0aCBfc2FmZSgpIGhlcmU/Cgo+ICsJCWFl c3RfcHJpbnQobG5vZGUpOwo+ICsKPiArCQlzdGF0dXMgPSBsbm9kZS0+cmVncy0+ZXJyX3N0YXR1 czsKPiArCQlpZiAoKHN0YXR1cyAmIEVSUl9TVEFUVVNfVUUpICYmCj4gKwkJCShzdGF0dXMgJiBF UlJfU1RBVFVTX1VFVCkgPiBFUlJfU1RBVFVTX1VFVF9VRVUpCj4gKwkJCWFlc3RfaGFuZGxlX21l bW9yeV9mYWlsdXJlKGxub2RlKTsKPiArCQlnZW5fcG9vbF9mcmVlKGFlc3Rfbm9kZV9wb29sLCAo dW5zaWduZWQgbG9uZylsbm9kZSwKPiArCQkJCXNpemVvZigqbG5vZGUpKTsKPiArCX0KPiArfQo+ ICsKPiArc3RhdGljIGludCBhZXN0X25vZGVfZ2VuX3Bvb2xfYWRkKHN0cnVjdCBhZXN0X25vZGUg Km5vZGUsIGludCBpbmRleCwKPiArCQkJCXN0cnVjdCByYXNfZXh0X3JlZ3MgKnJlZ3MpCj4gK3sK PiArCXN0cnVjdCBhZXN0X25vZGVfbGxpc3QgKmxpc3Q7CgpJIGtub3cgbmFtZSBpcyBhbHdheSBh IGhhcmQgd29yaywgYnV0IGxpc3QgaXMgbWVhbmxlc3MgdG8gYWVzdC4KCj4gKwo+ICsJaWYgKCFh ZXN0X25vZGVfcG9vbCkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlsaXN0ID0gKHZvaWQg KilnZW5fcG9vbF9hbGxvYyhhZXN0X25vZGVfcG9vbCwgc2l6ZW9mKCpsaXN0KSk7Cj4gKwlpZiAo IWxpc3QpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJbGlzdC0+dHlwZSA9IG5vZGUtPnR5 cGU7Cj4gKwlsaXN0LT5ub2RlX25hbWUgPSBub2RlLT5uYW1lOwo+ICsJc3dpdGNoIChub2RlLT50 eXBlKSB7Cj4gKwljYXNlIEFDUElfQUVTVF9QUk9DRVNTT1JfRVJST1JfTk9ERToKPiArCQlsaXN0 LT5pZDAgPSBub2RlLT5zcGVjLnByb2Nlc3Nvci5wcm9jZXNzb3JfaWQ7Cj4gKwkJaWYgKG5vZGUt PnNwZWMucHJvY2Vzc29yLmZsYWdzICYgKEFDUElfQUVTVF9QUk9DX0ZMQUdfU0hBUkVEIHwKPiAr CQkJCQkJQUNQSV9BRVNUX1BST0NfRkxBR19HTE9CQUwpKQo+ICsJCQlsaXN0LT5pZDAgPSBzbXBf cHJvY2Vzc29yX2lkKCk7Cj4gKwo+ICsJCWxpc3QtPmlkMSA9IG5vZGUtPnNwZWMucHJvY2Vzc29y LnJlc291cmNlX3R5cGU7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEFDUElfQUVTVF9NRU1PUllfRVJS T1JfTk9ERToKPiArCQlsaXN0LT5pZDAgPSBub2RlLT5zcGVjLm1lbW9yeS5zcmF0X3Byb3hpbWl0 eV9kb21haW47Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEFDUElfQUVTVF9TTU1VX0VSUk9SX05PREU6 Cj4gKwkJbGlzdC0+aWQwID0gbm9kZS0+c3BlYy5zbW11LmlvcnRfbm9kZV9yZWZlcmVuY2U7Cj4g KwkJbGlzdC0+aWQxID0gbm9kZS0+c3BlYy5zbW11LnN1YmNvbXBvbmVudF9yZWZlcmVuY2U7Cj4g KwkJYnJlYWs7Cj4gKwljYXNlIEFDUElfQUVTVF9WRU5ET1JfRVJST1JfTk9ERToKPiArCQlsaXN0 LT5pZDAgPSBub2RlLT5zcGVjLnZlbmRvci5hY3BpX2hpZDsKPiArCQlsaXN0LT5pZDEgPSBub2Rl LT5zcGVjLnZlbmRvci5hY3BpX3VpZDsKPiArCQlicmVhazsKPiArCWNhc2UgQUNQSV9BRVNUX0dJ Q19FUlJPUl9OT0RFOgo+ICsJCWxpc3QtPmlkMCA9IG5vZGUtPnNwZWMuZ2ljLmludGVyZmFjZV90 eXBlOwo+ICsJCWxpc3QtPmlkMSA9IG5vZGUtPnNwZWMuZ2ljLmluc3RhbmNlX2lkOwo+ICsJCWJy ZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlsaXN0LT5pZDAgPSAwOwo+ICsJCWxpc3QtPmlkMSA9IDA7 Cj4gKwl9Cj4gKwo+ICsJbGlzdC0+cmVncyA9ICByZWdzOwo+ICsJbGlzdC0+aW5kZXggPSBpbmRl eDsKPiArCWxpc3QtPmFkZHJlc3NpbmdfbW9kZSA9IG5vZGUtPmludGVyZmFjZS5hZGRyZXNzaW5n X21vZGU7Cj4gKwlsbGlzdF9hZGQoJmxpc3QtPmxsbm9kZSwgJmFlc3Rfbm9kZV9sbGlzdCk7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWVzdF9ub2RlX3Bvb2xfaW5p dCh2b2lkKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGFkZHIsIHNpemU7Cj4gKwlpbnQgcmM7Cj4g Kwo+ICsJaWYgKGFlc3Rfbm9kZV9wb29sKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXNpemUgPSBp bG9nMihzaXplb2Yoc3RydWN0IGFlc3Rfbm9kZV9sbGlzdCkpOwo+ICsJYWVzdF9ub2RlX3Bvb2wg PSBnZW5fcG9vbF9jcmVhdGUoc2l6ZSwgLTEpOwo+ICsJaWYgKCFhZXN0X25vZGVfcG9vbCkKPiAr CQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpdm1hbGxvYyhQ QUdFX0FMSUdOKHNpemUgKiBBRVNUX05PREVfQUxMT0NFRF9NQVgpKTsKPiArCWlmICghYWRkcikK PiArCQlnb3RvIGVycl9wb29sX2FsbG9jOwo+ICsKPiArCXJjID0gZ2VuX3Bvb2xfYWRkKGFlc3Rf bm9kZV9wb29sLCBhZGRyLCBzaXplLCAtMSk7CgpUaGUgc2l6ZSB5b3UgYWRkZWQgaGVyZSBpcyBu b3QgZXF1YWwgdG8gdGhlIHNpemUgb2YgYnVmZmVyIHlvdSBhbGxvY2VkIGZyb20gdm1hbGxvYygp LgoKPiArCWlmIChyYykKPiArCQlnb3RvIGVycl9wb29sX2FkZDsKPiArCj4gKwlyZXR1cm4gMDsK PiArCj4gK2Vycl9wb29sX2FkZDoKPiArCXZmcmVlKCh2b2lkICopYWRkcik7Cj4gKwo+ICtlcnJf cG9vbF9hbGxvYzoKPiArCWdlbl9wb29sX2Rlc3Ryb3koYWVzdF9ub2RlX3Bvb2wpOwo+ICsKPiAr CXJldHVybiAtRU5PTUVNOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhZXN0X2xvZyhzdHJ1Y3Qg YWVzdF9ub2RlICpub2RlLCBpbnQgaW5kZXgsIHN0cnVjdCByYXNfZXh0X3JlZ3MgKnJlZ3MpCj4g K3sKPiArCWlmICghYWVzdF9ub2RlX2dlbl9wb29sX2FkZChub2RlLCBpbmRleCwgcmVncykpCj4g KwkJc2NoZWR1bGVfd29yaygmYWVzdF93b3JrKTsKPiArfQo+ICsKPiArLyoKPiArICogRWFjaCBQ RSBtYXkgaGFzIG11bHRpIGVycm9yIHJlY29yZCwgeW91IG11c3Qgc2VsZWN0cyBhbiBlcnJvciBy ZWNvcmQgdG8KPiArICogYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgRXJyb3IgUmVjb3JkIFN5c3Rl bSByZWdpc3RlcnMuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgYWVzdF9zZWxlY3RfcmVj b3JkKHN0cnVjdCBhZXN0X25vZGUgKm5vZGUsIGludCBpKQo+ICt7Cj4gKwlpZiAobm9kZS0+aW50 ZXJmYWNlLnR5cGUgPT0gQUNQSV9BRVNUX05PREVfU1lTVEVNX1JFR0lTVEVSKSB7Cj4gKwkJd3Jp dGVfc3lzcmVnX3MoaSwgU1lTX0VSUlNFTFJfRUwxKTsKCnNob3VsZCBjaGVjayBpZiBFUlJTRUxS X0VMMS5TRUwgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEVSUklEUl9FTDEuTlVNLAoKPiAr CQlpc2IoKTsKPiArCX0KPiArfQo+ICsKPiArLyogRW5zdXJlIGFsbCB3cml0ZXMgaGFzIHRha2Vu IGVmZmVjdC4gKi8KPiArc3RhdGljIGlubGluZSB2b2lkIGFlc3Rfc3luYyhzdHJ1Y3QgYWVzdF9u b2RlICpub2RlKQo+ICt7Cj4gKwlpZiAobm9kZS0+aW50ZXJmYWNlLnR5cGUgPT0gQUNQSV9BRVNU X05PREVfU1lTVEVNX1JFR0lTVEVSKQo+ICsJCWlzYigpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGFlc3RfcHJvYyhzdHJ1Y3QgYWVzdF9ub2RlICpub2RlKQo+ICt7Cj4gKwlzdHJ1Y3QgcmFzX2V4 dF9yZWdzIHJlZ3MgPSB7MH07Cj4gKwlzdHJ1Y3QgYWVzdF9hY2Nlc3MgKmFjY2VzczsKPiArCWlu dCBpLCBjb3VudCA9IDA7Cj4gKwl1NjQgcmVnc19wOwo+ICsKPiArCWZvcl9lYWNoX2ltcGxlbWVu dGVkX3JlY29yZChpLCBub2RlKSB7Cj4gKwo+ICsJCS8qIDFiOiBFcnJvciByZWNvcmQgYXQgaSBp bmRleCBpcyBub3QgaW1wbGVtZW50ZWQgKi8KPiArCQlpZiAodGVzdF9iaXQoaSwgJm5vZGUtPmlu dGVyZmFjZS5yZWNvcmRfaW1wbGVtZW50ZWQpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJYWVz dF9zZWxlY3RfcmVjb3JkKG5vZGUsIGkpOwo+ICsKPiArCQlhY2Nlc3MgPSBub2RlLT5hY2Nlc3M7 Cj4gKwkJcmVnc19wID0gKHU2NCkmbm9kZS0+aW50ZXJmYWNlLnJlZ3NbaV07Cj4gKwo+ICsJCXJl Z3MuZXJyX3N0YXR1cyA9IGFjY2Vzcy0+cmVhZChyZWdzX3AsIEVSWFNUQVRVUyk7Cj4gKwkJaWYg KCEocmVncy5lcnJfc3RhdHVzICYgRVJSX1NUQVRVU19WKSkKPiArCQkJY29udGludWU7Cj4gKwo+ ICsJCWNvdW50Kys7Cj4gKwo+ICsJCWlmIChyZWdzLmVycl9zdGF0dXMgJiBFUlJfU1RBVFVTX0FW KQo+ICsJCQlyZWdzLmVycl9hZGRyID0gYWNjZXNzLT5yZWFkKHJlZ3NfcCwgRVJYQUREUik7Cj4g Kwo+ICsJCXJlZ3MuZXJyX2ZyID0gYWNjZXNzLT5yZWFkKHJlZ3NfcCwgRVJYRlIpOwo+ICsJCXJl Z3MuZXJyX2N0bHIgPSBhY2Nlc3MtPnJlYWQocmVnc19wLCBFUlhDVExSKTsKPiArCj4gKwkJaWYg KHJlZ3MuZXJyX3N0YXR1cyAmIEVSUl9TVEFUVVNfTVYpIHsKPiArCQkJcmVncy5lcnJfbWlzY1sw XSA9IGFjY2Vzcy0+cmVhZChyZWdzX3AsIEVSWE1JU0MwKTsKPiArCQkJcmVncy5lcnJfbWlzY1sx XSA9IGFjY2Vzcy0+cmVhZChyZWdzX3AsIEVSWE1JU0MxKTsKPiArCQkJcmVncy5lcnJfbWlzY1sy XSA9IGFjY2Vzcy0+cmVhZChyZWdzX3AsIEVSWE1JU0MyKTsKPiArCQkJcmVncy5lcnJfbWlzY1sz XSA9IGFjY2Vzcy0+cmVhZChyZWdzX3AsIEVSWE1JU0MzKTsKPiArCQl9Cj4gKwo+ICsJCWlmIChu b2RlLT5pbnRlcmZhY2UuZmxhZ3MgJiBBQ1BJX0FFU1RfSU5URVJGQUNFX0NMRUFSX01JU0MpIHsK PiArCQkJYWNjZXNzLT53cml0ZShyZWdzX3AsIEVSWE1JU0MwLCAwKTsKPiArCQkJYWNjZXNzLT53 cml0ZShyZWdzX3AsIEVSWE1JU0MxLCAwKTsKPiArCQkJYWNjZXNzLT53cml0ZShyZWdzX3AsIEVS WE1JU0MyLCAwKTsKPiArCQkJYWNjZXNzLT53cml0ZShyZWdzX3AsIEVSWE1JU0MzLCAwKTsKPiAr CQl9IGVsc2UKPiArCQkJYWNjZXNzLT53cml0ZShyZWdzX3AsIEVSWE1JU0MwLAo+ICsJCQkJCW5v ZGUtPmludGVyZmFjZS5jZV90aHJlc2hvbGRbaV0pOwo+ICsKPiArCQlhZXN0X2xvZyhub2RlLCBp LCAmcmVncyk7CgphZXN0X2xvZygpIHNob3VsZCBiZSBjYWxsZWRhZnRlciBwYW5pYyBjaGVjaz8K Cj4gKwo+ICsJCS8qIHBhbmljIGlmIHVucmVjb3ZlcmFibGUgYW5kIHVuY29udGFpbmFibGUgZXJy b3IgZW5jb3VudGVyZWQgKi8KPiArCQlpZiAoKHJlZ3MuZXJyX3N0YXR1cyAmIEVSUl9TVEFUVVNf VUUpICYmCj4gKwkJCShyZWdzLmVycl9zdGF0dXMgJiBFUlJfU1RBVFVTX1VFVCkgPCBFUlJfU1RB VFVTX1VFVF9VRVIpCj4gKwkJCXBhbmljKCJBRVNUOiB1bnJlY292ZXJhYmxlIGVycm9yIGVuY291 bnRlcmVkIik7CgpJcyBhcm02NF9pc19mYXRhbF9yYXNfc2Vycm9yKCkgYXBwbGljYWJsZSBoZXJl PyBASmFtZXMsIGNhbiB5b3UgaGVscCB0byBjb25maXJtPwoKPiArCj4gKwkJLyogV3JpdGUtb25l LXRvLWNsZWFyIHRoZSBiaXRzIHdlJ3ZlIHNlZW4gKi8KPiArCQlyZWdzLmVycl9zdGF0dXMgJj0g RVJSX1NUQVRVU19XMVRDOwo+ICsKPiArCQkvKiBNdWx0aSBiaXQgZmlsZWQgbmVlZCB0byB3cml0 ZSBhbGwtb25lcyB0byBjbGVhci4gKi8KPiArCQlpZiAocmVncy5lcnJfc3RhdHVzICYgRVJSX1NU QVRVU19DRSkKPiArCQkJcmVncy5lcnJfc3RhdHVzIHw9IEVSUl9TVEFUVVNfQ0U7Cj4gKwo+ICsJ CS8qIE11bHRpIGJpdCBmaWxlZCBuZWVkIHRvIHdyaXRlIGFsbC1vbmVzIHRvIGNsZWFyLiAqLwo+ ICsJCWlmIChyZWdzLmVycl9zdGF0dXMgJiBFUlJfU1RBVFVTX1VFVCkKPiArCQkJcmVncy5lcnJf c3RhdHVzIHw9IEVSUl9TVEFUVVNfVUVUOwo+ICsKPiArCQlhY2Nlc3MtPndyaXRlKHJlZ3NfcCwg RVJYU1RBVFVTLCByZWdzLmVycl9zdGF0dXMpOwo+ICsKPiArCQlhZXN0X3N5bmMobm9kZSk7Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIGNvdW50Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3Qg YWVzdF9pcnFfZnVuYyhpbnQgaXJxLCB2b2lkICppbnB1dCkKPiArewo+ICsJc3RydWN0IGFlc3Rf bm9kZSAqbm9kZSA9IGlucHV0Owo+ICsKPiArCWlmIChhZXN0X3Byb2Mobm9kZSkpCj4gKwkJcmV0 dXJuIElSUV9IQU5ETEVEOwo+ICsKPiArCXJldHVybiBJUlFfTk9ORTsKPiArfQo+ICsKPiArc3Rh dGljIGludCBfX2luaXQgYWVzdF9yZWdpc3Rlcl9nc2kodTMyIGdzaSwgaW50IHRyaWdnZXIsIHZv aWQgKmRhdGEsCj4gKwkJCQkJaXJxX2hhbmRsZXJfdCBhZXN0X2lycV9mdW5jKQo+ICt7Cj4gKwlp bnQgY3B1LCBpcnE7Cj4gKwo+ICsJaXJxID0gYWNwaV9yZWdpc3Rlcl9nc2koTlVMTCwgZ3NpLCB0 cmlnZ2VyLCBBQ1BJX0FDVElWRV9ISUdIKTsKPiArCj4gKwlpZiAoaXJxID09IC1FSU5WQUwpIHsK PiArCQlwcl9lcnIoImZhaWxlZCB0byBtYXAgQUVTVCBHU0kgJWRcbiIsIGdzaSk7Cj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKGlycV9pc19wZXJjcHVfZGV2aWQoaXJxKSkg ewo+ICsJCXBwaV9pcnFzW3BwaV9pZHhdID0gaXJxOwo+ICsJCWZvcl9lYWNoX3Bvc3NpYmxlX2Nw dShjcHUpIHsKPiArCQkJbWVtY3B5KHBlcl9jcHVfcHRyKGFlc3RfcHBpX2RhdGFbcHBpX2lkeF0s IGNwdSksIGRhdGEsCj4gKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGFlc3Rfbm9kZSkpOwo+ICsJ CX0KPiArCQlpZiAocmVxdWVzdF9wZXJjcHVfaXJxKGlycSwgYWVzdF9pcnFfZnVuYywgIkFFU1Qi LAo+ICsJCQkJICAgICAgIGFlc3RfcHBpX2RhdGFbcHBpX2lkeCsrXSkpIHsKPiArCQkJcHJfZXJy KCJmYWlsZWQgdG8gcmVnaXN0ZXIgQUVTVCBJUlEgJWRcbiIsIGlycSk7Cj4gKwkJCXJldHVybiAt RUlOVkFMOwo+ICsJCX0KPiArCX0gZWxzZSB7Cj4gKwkJaWYgKHJlcXVlc3RfaXJxKGlycSwgYWVz dF9pcnFfZnVuYywgSVJRRl9TSEFSRUQsICJBRVNUIiwKPiArCQkJCWRhdGEpKSB7Cj4gKwkJCXBy X2VycigiZmFpbGVkIHRvIHJlZ2lzdGVyIEFFU1QgSVJRICVkXG4iLCBpcnEpOwo+ICsJCQlyZXR1 cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgX19pbml0IGFlc3RfaW5pdF9pbnRlcnJ1cHRzKHN0cnVjdCBhY3BpX2Flc3RfaGRy ICpoZHIsCj4gKwkJCQkgICAgICAgc3RydWN0IGFlc3Rfbm9kZSAqbm9kZSkKPiArewo+ICsJc3Ry dWN0IGFjcGlfYWVzdF9ub2RlX2ludGVycnVwdCAqaW50ZXJydXB0Owo+ICsJaW50IGksIHRyaWdn ZXIsIHJldCA9IDAsIGVycl9jdGxyLCByZWdzX3A7Cj4gKwo+ICsJaW50ZXJydXB0ID0gQUNQSV9B RERfUFRSKHN0cnVjdCBhY3BpX2Flc3Rfbm9kZV9pbnRlcnJ1cHQsIGhkciwKPiArCQkJCSBoZHIt Pm5vZGVfaW50ZXJydXB0X29mZnNldCk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGhkci0+bm9k ZV9pbnRlcnJ1cHRfY291bnQ7IGkrKywgaW50ZXJydXB0KyspIHsKPiArCQl0cmlnZ2VyID0gKGlu dGVycnVwdC0+ZmxhZ3MgJiBBRVNUX0lOVEVSUlVQVF9NT0RFKSA/Cj4gKwkJCSAgQUNQSV9MRVZF TF9TRU5TSVRJVkUgOiBBQ1BJX0VER0VfU0VOU0lUSVZFOwo+ICsJCWlmIChhZXN0X3JlZ2lzdGVy X2dzaShpbnRlcnJ1cHQtPmdzaXYsIHRyaWdnZXIsIG5vZGUsCj4gKwkJCQkJYWVzdF9pcnFfZnVu YykpCj4gKwkJCXJldCA9IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJLyogRW5zdXJlIFJBUyBpbnRl cnJ1cHQgaXMgZW5hYmxlZCAqLwo+ICsJZm9yX2VhY2hfaW1wbGVtZW50ZWRfcmVjb3JkKGksIG5v ZGUpIHsKPiArCQkvKiAxYjogRXJyb3IgcmVjb3JkIGF0IGkgaW5kZXggaXMgbm90IGltcGxlbWVu dGVkICovCj4gKwkJaWYgKHRlc3RfYml0KGksICZub2RlLT5pbnRlcmZhY2UucmVjb3JkX2ltcGxl bWVudGVkKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWFlc3Rfc2VsZWN0X3JlY29yZChub2Rl LCBpKTsKPiArCj4gKwkJcmVnc19wID0gKHU2NCkmbm9kZS0+aW50ZXJmYWNlLnJlZ3NbaV07Cj4g Kwo+ICsJCWVycl9jdGxyID0gbm9kZS0+YWNjZXNzLT5yZWFkKHJlZ3NfcCwgRVJYQ1RMUik7Cj4g Kwo+ICsJCWlmIChpbnRlcnJ1cHQtPnR5cGUgPT0gQUNQSV9BRVNUX05PREVfRkFVTFRfSEFORExJ TkcpCj4gKwkJCWVycl9jdGxyIHw9IEVSUl9DVExSX0ZJOwo+ICsJCWlmIChpbnRlcnJ1cHQtPnR5 cGUgPT0gQUNQSV9BRVNUX05PREVfRVJST1JfUkVDT1ZFUlkpCj4gKwkJCWVycl9jdGxyIHw9IEVS Ul9DVExSX1VJOwoKRmF1bHQgaGFuZGxpbmcgaW50ZXJydXB0cyAoRVJSPG4+Q1RMUi5DRkkpIG9u IGNvcnJlY3RlZCBlcnJvcnMgc2hvdWxkIGFsc28gYmUgZW5hYmxlZC4KCj4gKwo+ICsJCW5vZGUt PmFjY2Vzcy0+d3JpdGUocmVnc19wLCBFUlhDVExSLCBlcnJfY3Rscik7Cj4gKwo+ICsJCWFlc3Rf c3luYyhub2RlKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBfX2luaXQgc2V0X2Flc3Rfbm9kZV9uYW1lKHN0cnVjdCBhZXN0X25vZGUgKm5vZGUpCj4g K3sKPiArCXN3aXRjaCAobm9kZS0+dHlwZSkgewo+ICsJY2FzZSBBQ1BJX0FFU1RfUFJPQ0VTU09S X0VSUk9SX05PREU6Cj4gKwkJbm9kZS0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiQUVT VC1DUFUlZCIsCj4gKwkJCW5vZGUtPnNwZWMucHJvY2Vzc29yLnByb2Nlc3Nvcl9pZCk7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIEFDUElfQUVTVF9NRU1PUllfRVJST1JfTk9ERToKPiArCWNhc2UgQUNQ SV9BRVNUX1NNTVVfRVJST1JfTk9ERToKPiArCWNhc2UgQUNQSV9BRVNUX1ZFTkRPUl9FUlJPUl9O T0RFOgo+ICsJY2FzZSBBQ1BJX0FFU1RfR0lDX0VSUk9SX05PREU6Cj4gKwkJbm9kZS0+bmFtZSA9 IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiQUVTVC0lbGx4IiwKPiArCQkJbm9kZS0+aW50ZXJmYWNl LnBoeV9hZGRyKTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJbm9kZS0+bmFtZSA9IGth c3ByaW50ZihHRlBfS0VSTkVMLCAiQUVTVC1Vbmtvd24tTm9kZSIpOwo+ICsJfQo+ICt9Cj4gKwo+ ICsvKiBhY2Nlc3MgdHlwZSBpcyBkZWNpZGVkIGJ5IEFFU1QgaW50ZXJmYWNlIHR5cGUuICovCj4g K3N0YXRpYyBzdHJ1Y3QgYWVzdF9hY2Nlc3MgYWVzdF9hY2Nlc3NbXSA9IHsKPiArCVtBQ1BJX0FF U1RfTk9ERV9TWVNURU1fUkVHSVNURVJdID0gewo+ICsJCS5yZWFkID0gYWVzdF9zeXNyZWdfcmVh ZCwKPiArCQkud3JpdGUgPSBhZXN0X3N5c3JlZ193cml0ZSwKPiArCX0sCj4gKwo+ICsJW0FDUElf QUVTVF9OT0RFX01FTU9SWV9NQVBQRURdID0gewo+ICsJCS5yZWFkID0gYWVzdF9pb21lbV9yZWFk LAo+ICsJCS53cml0ZSA9IGFlc3RfaW9tZW1fd3JpdGUsCj4gKwl9LAo+ICsJeyB9Cj4gK307Cj4g Kwo+ICsvKiBJbiBrZXJuZWwtZmlyc3QgbW9kZSwga2VybmVsIHdpbGwgcmVwb3J0IGV2ZXJ5IENF IGJ5IGRlZmF1bHQuICovCj4gK3N0YXRpYyB2b2lkIF9faW5pdCBhZXN0X3NldF9jZV90aHJlc2hv bGQoc3RydWN0IGFlc3Rfbm9kZSAqbm9kZSkKPiArewo+ICsJdTY0IHJlZ3NfcCwgZXJyX2ZyLCBl cnJfZnJfY2VjLCBlcnJfZnJfcnAsIGVycl9taXNjMCwgY2VfdGhyZXNob2xkOwo+ICsJaW50IGk7 Cj4gKwo+ICsJZm9yX2VhY2hfaW1wbGVtZW50ZWRfcmVjb3JkKGksIG5vZGUpIHsKPiArCQkvKiAx YjogRXJyb3IgcmVjb3JkIGF0IGkgaW5kZXggaXMgbm90IGltcGxlbWVudGVkICovCj4gKwkJaWYg KHRlc3RfYml0KGksICZub2RlLT5pbnRlcmZhY2UucmVjb3JkX2ltcGxlbWVudGVkKSkKPiArCQkJ Y29udGludWU7Cj4gKwo+ICsJCWFlc3Rfc2VsZWN0X3JlY29yZChub2RlLCBpKTsKPiArCQlyZWdz X3AgPSAodTY0KSZub2RlLT5pbnRlcmZhY2UucmVnc1tpXTsKPiArCj4gKwkJZXJyX2ZyID0gbm9k ZS0+YWNjZXNzLT5yZWFkKHJlZ3NfcCwgRVJYRlIpOwo+ICsJCWVycl9mcl9jZWMgPSBGSUVMRF9H RVQoRVJSX0ZSX0NFQywgZXJyX2ZyKTsKPiArCQllcnJfZnJfcnAgPSBGSUVMRF9HRVQoRVJSX0ZS X1JQLCBlcnJfZnIpOwo+ICsJCWVycl9taXNjMCA9IG5vZGUtPmFjY2Vzcy0+cmVhZChyZWdzX3As IEVSWE1JU0MwKTsKPiArCj4gKwkJaWYgKGVycl9mcl9jZWMgPT0gRVJSX0ZSX0NFQ18wQl9DT1VO VEVSKQo+ICsJCQlwcl9kZWJ1ZygiJXMtJWQgZG8gbm90IHN1cHBvcnQgQ0UgdGhyZXNob2xkIVxu IiwKPiArCQkJCQlub2RlLT5uYW1lLCBpKTsKClF1b3RlZCBmcm9tIEFSTSBSQVMgc3BlYzoKCklm IHRoZSBub2RlIGltcGxlbWVudHMgYSBjb3JyZWN0ZWQgZXJyb3IgY291bnRlciBvciBjb3VudGVy cywgdGhlbiBhIGNvcnJlY3RlZCBlcnJvciBldmVudCBpcyBkZWZpbmVkIGFzCmZvbGxvd3M6CuKA oiBBIGNvcnJlY3RlZCBlcnJvciBldmVudCBvY2N1cnMgd2hlbiBhIGNvdW50ZXIgb3ZlcmZsb3dz IGFuZCBzZXRzIGEgY291bnRlciBvdmVyZmxvdyBmbGFnIHRvIDBiMS4KCk90aGVyd2lzZSwgYSBj b3JyZWN0ZWQgZXJyb3IgZXZlbnQgb2NjdXJzIHdoZW4gdGhlIGVycm9yIHJlY29yZCByZWNvcmRz IGFuIGVycm9yIGFzIGEgQ29ycmVjdGVkIGVycm9yLgoKU28sIGlmIHRoZSBub2RlIGRvZXMgbm90 IHN1cHBvcnQgQ0UgdGhyZXNob2xkLCBpdCB3aWxsIHJlcG9ydCBldmVyeSBDRSBhbmQgbm8gY2Vf dGhyZXNob2xkIHNob3VsZCBiZSBzZXQuCgoKPiArCQllbHNlIGlmIChlcnJfZnJfY2VjID09IEVS Ul9GUl9DRUNfOEJfQ09VTlRFUiAmJgo+ICsJCQkJZXJyX2ZyX3JwID09IEVSUl9GUl9SUF9TSU5H TEVfQ09VTlRFUikgewo+ICsJCQlwcl9kZWJ1ZygiJXMtJWQgc3VwcG9ydCA4IGJpdCBDRSB0aHJl c2hvbGQhXG4iLAo+ICsJCQkJCW5vZGUtPm5hbWUsIGkpOwo+ICsJCQljZV90aHJlc2hvbGQgPSBl cnJfbWlzYzAgfCBFUlJfTUlTQzBfOEJfQ0VDOwo+ICsJCX0gZWxzZSBpZiAoZXJyX2ZyX2NlYyA9 PSBFUlJfRlJfQ0VDXzE2Ql9DT1VOVEVSICYmCj4gKwkJCQllcnJfZnJfcnAgPT0gRVJSX0ZSX1JQ X1NJTkdMRV9DT1VOVEVSKSB7Cj4gKwkJCXByX2RlYnVnKCIlcy0lZCBzdXBwb3J0IDE2IGJpdCBD RSB0aHJlc2hvbGQhXG4iLAo+ICsJCQkJCW5vZGUtPm5hbWUsIGkpOwo+ICsJCQljZV90aHJlc2hv bGQgPSBlcnJfbWlzYzAgfCBFUlJfTUlTQzBfMTZCX0NFQzsKPiArCQl9IGVsc2UKPiArCQkJcHJf ZGVidWcoIiVzLSVkIGRvIG5vdCBzdXBwb3J0IGRvdWJsZSBjb3VudGVyIHlldCFcbiIsCj4gKwkJ CQkJbm9kZS0+bmFtZSwgaSk7Cj4gKwo+ICsJCW5vZGUtPmFjY2Vzcy0+d3JpdGUocmVnc19wLCBF UlhNSVNDMCwgY2VfdGhyZXNob2xkKTsKCmNlX3RocmVzaG9sZCBtYXkgYmUgdW5pbml0ZWQgaW4g c29tZSBvZiBhYm92ZSBpZi1lbHNlIGJyYW5jaC4KCj4gKwkJbm9kZS0+aW50ZXJmYWNlLmNlX3Ro cmVzaG9sZFtpXSA9IGNlX3RocmVzaG9sZDsKPiArCj4gKwkJYWVzdF9zeW5jKG5vZGUpOwo+ICsJ fQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9faW5pdCBhZXN0X2luaXRfaW50ZXJmYWNlKHN0cnVj dCBhY3BpX2Flc3RfaGRyICpoZHIsCj4gKwkJCQkgICAgICAgc3RydWN0IGFlc3Rfbm9kZSAqbm9k ZSkKPiArewo+ICsJc3RydWN0IGFjcGlfYWVzdF9ub2RlX2ludGVyZmFjZSAqaW50ZXJmYWNlOwo+ ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4gKwlpbnQgc2l6ZTsKPiArCj4gKwlpbnRlcmZhY2Ug PSBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfYWVzdF9ub2RlX2ludGVyZmFjZSwgaGRyLAo+ICsJ CQkJIGhkci0+bm9kZV9pbnRlcmZhY2Vfb2Zmc2V0KTsKPiArCj4gKwlpZiAoaW50ZXJmYWNlLT50 eXBlID49IEFDUElfQUVTVF9YRkFDRV9SRVNFUlZFRCkgewo+ICsJCXByX2VycigiaW52YWxpZCBp bnRlcmZhY2UgdHlwZTogJWRcbiIsIGludGVyZmFjZS0+dHlwZSk7Cj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwl9Cj4gKwo+ICsJbm9kZS0+aW50ZXJmYWNlLnR5cGUgPSBpbnRlcmZhY2UtPnR5cGU7 Cj4gKwlub2RlLT5pbnRlcmZhY2UucGh5X2FkZHIgPSBpbnRlcmZhY2UtPmFkZHJlc3M7Cj4gKwlu b2RlLT5pbnRlcmZhY2UucmVjb3JkX3N0YXJ0ID0gaW50ZXJmYWNlLT5lcnJvcl9yZWNvcmRfaW5k ZXg7Cj4gKwlub2RlLT5pbnRlcmZhY2UucmVjb3JkX2VuZCA9IGludGVyZmFjZS0+ZXJyb3JfcmVj b3JkX2luZGV4ICsKPiArCQkJCQlpbnRlcmZhY2UtPmVycm9yX3JlY29yZF9jb3VudDsKV2h5IHJl bmFtZSB0aGUgZmllbGQgbmFtZSBoZXJlPwoKPiArCW5vZGUtPmludGVyZmFjZS5mbGFncyA9IGlu dGVyZmFjZS0+ZmxhZ3M7Cj4gKwlub2RlLT5pbnRlcmZhY2UucmVjb3JkX2ltcGxlbWVudGVkID0g aW50ZXJmYWNlLT5lcnJvcl9yZWNvcmRfaW1wbGVtZW50ZWQ7Cj4gKwlub2RlLT5pbnRlcmZhY2Uu c3RhdHVzX3JlcG9ydGluZyA9IGludGVyZmFjZS0+ZXJyb3Jfc3RhdHVzX3JlcG9ydGluZzsKPiAr CW5vZGUtPmludGVyZmFjZS5hZGRyZXNzaW5nX21vZGUgPSBpbnRlcmZhY2UtPmFkZHJlc3Npbmdf bW9kZTsKPiArCW5vZGUtPmFjY2VzcyA9ICZhZXN0X2FjY2Vzc1tpbnRlcmZhY2UtPnR5cGVdOwo+ ICs+ICsKPiArCj4gKwkvKgo+ICsJICogQ3VycmVudGx5IFNSIGJhc2VkIGhhbmRsaW5nIGlzIGRv bmUgdGhyb3VnaCB0aGUgYXJjaGl0ZWN0ZWQKPiArCSAqIGRpc2NvdmVyeSBleHBvc2VkIHRocm91 Z2ggU1JzLiBUaGF0IG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZQo+ICsJICogaWYgdGhlcmUgaXMg c3VwcGxlbWVudGFsIGluZm9ybWF0aW9uIGluIHRoZSBBRVNUIHRoYXQgaXMKPiArCSAqIG5lZWRl ZC4KPiArCSAqLwo+ICsJaWYgKGludGVyZmFjZS0+dHlwZSA9PSBBQ1BJX0FFU1RfTk9ERV9TWVNU RU1fUkVHSVNURVIpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmVzID0ga3phbGxvYyhzaXplb2Yo c3RydWN0IHJlc291cmNlKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXJlcykKPiArCQlyZXR1cm4g LUVOT01FTTsKPiArCj4gKwlzaXplID0gaW50ZXJmYWNlLT5lcnJvcl9yZWNvcmRfY291bnQgKiBz aXplb2Yoc3RydWN0IHJhc19leHRfcmVncyk7Cj4gKwlyZXMtPm5hbWUgPSAiQUVTVCI7Cj4gKwly ZXMtPnN0YXJ0ID0gaW50ZXJmYWNlLT5hZGRyZXNzOwo+ICsJcmVzLT5lbmQgPSByZXMtPnN0YXJ0 ICsgc2l6ZTsKPiArCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKPiArCj4gKwlpZiAoaW5z ZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKSkgewo+ICsJCXByX25vdGljZSgicmVx dWVzdCByZWdpb24gY29uZmxpY3Qgd2l0aCAlc1xuIiwKPiArCQkJcmVzLT5uYW1lKTsKPiArCX0K PiArCj4gKwlub2RlLT5pbnRlcmZhY2UucmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgc2l6ZSk7 Cj4gKwlpZiAoIW5vZGUtPmludGVyZmFjZS5yZWdzKSB7Cj4gKwkJcHJfZXJyKCJJb3JlbWFwIGZv ciAlcyBmYWlsZWQhXG4iLCBub2RlLT5uYW1lKTsKPiArCQlrZnJlZShyZXMpOwo+ICsJCXJldHVy biAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCW5vZGUtPmludGVyZmFjZS5jZV90aHJlc2hvbGQgPSBr emFsbG9jKHNpemVvZih1NjQpICoKPiArCQkJCWludGVyZmFjZS0+ZXJyb3JfcmVjb3JkX2NvdW50 LCBHRlBfS0VSTkVMKTsKPiArCWlmICghbm9kZS0+aW50ZXJmYWNlLmNlX3RocmVzaG9sZCkKPiAr CQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlhZXN0X3NldF9jZV90aHJlc2hvbGQobm9kZSk7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19pbml0IGFlc3RfaW5pdF9j b21tb24oc3RydWN0IGFjcGlfYWVzdF9oZHIgKmhkciwKPiArCQkJCQkJc3RydWN0IGFlc3Rfbm9k ZSAqbm9kZSkKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlzZXRfYWVzdF9ub2RlX25hbWUobm9k ZSk7Cj4gKwo+ICsJcmV0ID0gYWVzdF9pbml0X2ludGVyZmFjZShoZHIsIG5vZGUpOwo+ICsJaWYg KHJldCkgewo+ICsJCXByX2VycigiZmFpbGVkIHRvIGluaXQgaW50ZXJmYWNlXG4iKTsKPiArCQly ZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiBhZXN0X2luaXRfaW50ZXJydXB0cyhoZHIs IG5vZGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9faW5pdCBhZXN0X2luaXRfbm9kZV9kZWZh dWx0KHN0cnVjdCBhY3BpX2Flc3RfaGRyICpoZHIpCj4gK3sKPiArCXN0cnVjdCBhZXN0X25vZGUg Km5vZGU7Cj4gKwl1bmlvbiBhZXN0X25vZGVfc3BlYyAqbm9kZV9zcGVjOwo+ICsJaW50IHJldDsK PiArCj4gKwlub2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFlc3Rfbm9kZSksIEdGUF9LRVJO RUwpOwoKZS5nLiBJZiB0aGUgc2Vjb25kIG5vZGUgaXMgZmFpbGVkIHRvIGFsbG9jZWQsIHdoZXJl IHlvdSBmcmVlIHRoZSBmaXJzdCBub2RlPwoKPiArCWlmICghbm9kZSkKPiArCQlyZXR1cm4gLUVO T01FTTsKPiArCj4gKwlub2RlLT50eXBlID0gaGRyLT50eXBlOwo+ICsJbm9kZV9zcGVjID0gQUNQ SV9BRERfUFRSKHVuaW9uIGFlc3Rfbm9kZV9zcGVjLCBoZHIsCj4gKwkJCQkJaGRyLT5ub2RlX3Nw ZWNpZmljX29mZnNldCk7Cj4gKwo+ICsJbWVtY3B5KCZub2RlLT5zcGVjLCBub2RlX3NwZWMsCj4g KwkJCWhkci0+bm9kZV9pbnRlcmZhY2Vfb2Zmc2V0IC0gaGRyLT5ub2RlX3NwZWNpZmljX29mZnNl dCk7Cj4gKwo+ICsJcmV0ID0gYWVzdF9pbml0X2NvbW1vbihoZHIsIG5vZGUpOwo+ICsJaWYgKHJl dCkKPiArCQlrZnJlZShub2RlKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IF9faW5pdCBhZXN0X2luaXRfcHJvY2Vzc29yX25vZGUoc3RydWN0IGFjcGlfYWVzdF9o ZHIgKmhkcikKPiArewo+ICsJc3RydWN0IGFlc3Rfbm9kZSAqbm9kZTsKPiArCXVuaW9uIGFlc3Rf bm9kZV9zcGVjICpub2RlX3NwZWM7Cj4gKwl1bmlvbiBhZXN0X25vZGVfcHJvY2Vzc29yICpwcm9j Owo+ICsJaW50IHJldDsKPiArCj4gKwlub2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFlc3Rf bm9kZSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFub2RlKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ ICsKPiArCW5vZGUtPnR5cGUgPSBoZHItPnR5cGU7Cj4gKwlub2RlX3NwZWMgPSBBQ1BJX0FERF9Q VFIodW5pb24gYWVzdF9ub2RlX3NwZWMsIGhkciwKPiArCQkJCQloZHItPm5vZGVfc3BlY2lmaWNf b2Zmc2V0KTsKPiArCj4gKwltZW1jcHkoJm5vZGUtPnNwZWMsIG5vZGVfc3BlYywKPiArCQkJaGRy LT5ub2RlX2ludGVyZmFjZV9vZmZzZXQgLSBoZHItPm5vZGVfc3BlY2lmaWNfb2Zmc2V0KTsKPiAr Cj4gKwlwcm9jID0gQUNQSV9BRERfUFRSKHVuaW9uIGFlc3Rfbm9kZV9wcm9jZXNzb3IsIG5vZGVf c3BlYywKPiArCQkJCQlzaXplb2YoYWNwaV9hZXN0X3Byb2Nlc3NvcikpOwo+ICsKPiArCXN3aXRj aCAobm9kZS0+c3BlYy5wcm9jZXNzb3IucmVzb3VyY2VfdHlwZSkgewo+ICsJY2FzZSBBQ1BJX0FF U1RfQ0FDSEVfUkVTT1VSQ0U6Cj4gKwkJbWVtY3B5KCZub2RlLT5wcm9jLCBwcm9jLAo+ICsJCQkJ c2l6ZW9mKHN0cnVjdCBhY3BpX2Flc3RfcHJvY2Vzc29yX2NhY2hlKSk7Cj4gKwkJYnJlYWs7Cj4g KwljYXNlIEFDUElfQUVTVF9UTEJfUkVTT1VSQ0U6Cj4gKwkJbWVtY3B5KCZub2RlLT5wcm9jLCBw cm9jLAo+ICsJCQkJc2l6ZW9mKHN0cnVjdCBhY3BpX2Flc3RfcHJvY2Vzc29yX3RsYikpOwo+ICsJ CWJyZWFrOwo+ICsJY2FzZSBBQ1BJX0FFU1RfR0VORVJJQ19SRVNPVVJDRToKPiArCQltZW1jcHko Jm5vZGUtPnByb2MsIHByb2MsCj4gKwkJCQlzaXplb2Yoc3RydWN0IGFjcGlfYWVzdF9wcm9jZXNz b3JfZ2VuZXJpYykpOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCXJldCA9IGFlc3RfaW5pdF9j b21tb24oaGRyLCBub2RlKTsKPiArCWlmIChyZXQpCj4gKwkJa2ZyZWUobm9kZSk7Cj4gKwo+ICsJ cmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX2luaXQgYWVzdF9pbml0X25vZGUo c3RydWN0IGFjcGlfYWVzdF9oZHIgKm5vZGUpCj4gK3sKPiArCXN3aXRjaCAobm9kZS0+dHlwZSkg ewo+ICsJY2FzZSBBQ1BJX0FFU1RfUFJPQ0VTU09SX0VSUk9SX05PREU6Cj4gKwkJcmV0dXJuIGFl c3RfaW5pdF9wcm9jZXNzb3Jfbm9kZShub2RlKTsKPiArCWNhc2UgQUNQSV9BRVNUX01FTU9SWV9F UlJPUl9OT0RFOgo+ICsJY2FzZSBBQ1BJX0FFU1RfVkVORE9SX0VSUk9SX05PREU6Cj4gKwljYXNl IEFDUElfQUVTVF9TTU1VX0VSUk9SX05PREU6Cj4gKwljYXNlIEFDUElfQUVTVF9HSUNfRVJST1Jf Tk9ERToKPiArCQlyZXR1cm4gYWVzdF9pbml0X25vZGVfZGVmYXVsdChub2RlKTsKPiArCWRlZmF1 bHQ6Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9f aW5pdCBhZXN0X2NvdW50X3BwaShzdHJ1Y3QgYWNwaV9hZXN0X2hkciAqaGVhZGVyKQo+ICt7Cj4g KwlzdHJ1Y3QgYWNwaV9hZXN0X25vZGVfaW50ZXJydXB0ICppbnRlcnJ1cHQ7Cj4gKwlpbnQgaTsK PiArCj4gKwlpbnRlcnJ1cHQgPSBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfYWVzdF9ub2RlX2lu dGVycnVwdCwgaGVhZGVyLAo+ICsJCQkJIGhlYWRlci0+bm9kZV9pbnRlcnJ1cHRfb2Zmc2V0KTsK PiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgaGVhZGVyLT5ub2RlX2ludGVycnVwdF9jb3VudDsgaSsr LCBpbnRlcnJ1cHQrKykgewo+ICsJCWlmIChpbnRlcnJ1cHQtPmdzaXYgPj0gMTYgJiYgaW50ZXJy dXB0LT5nc2l2IDwgMzIpCj4gKwkJCW51bV9wcGkrKzsKPiArCX0KPiArfQo+ICsKPiArc3RhdGlj IGludCBhZXN0X3N0YXJ0aW5nX2NwdSh1bnNpZ25lZCBpbnQgY3B1KQo+ICt7Cj4gKwlpbnQgaTsK PiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BwaTsgaSsrKQo+ICsJCWVuYWJsZV9wZXJjcHVf aXJxKHBwaV9pcnFzW2ldLCBJUlFfVFlQRV9OT05FKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIGludCBhZXN0X2R5aW5nX2NwdSh1bnNpZ25lZCBpbnQgY3B1KQo+ICt7Cj4g KwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BwaTsgaSsrKQo+ICsJCWRpc2Fi bGVfcGVyY3B1X2lycShwcGlfaXJxc1tpXSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K2ludCBfX2luaXQgYWNwaV9hZXN0X2luaXQodm9pZCkKPiArewo+ICsJc3RydWN0IGFjcGlfYWVz dF9oZHIgKmFlc3Rfbm9kZSwgKmFlc3RfZW5kOwo+ICsJc3RydWN0IGFjcGlfdGFibGVfYWVzdCAq YWVzdDsKPiArCWludCBpLCByZXQgPSAwOwo+ICsKPiArCWlmIChhY3BpX2Rpc2FibGVkKQo+ICsJ CXJldHVybiAwOwo+ICsKPiArCWlmICghSVNfRU5BQkxFRChDT05GSUdfQVJNNjRfUkFTX0VYVE4p KQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9nZXRfdGFibGUo QUNQSV9TSUdfQUVTVCwgMCwgJmFlc3RfdGFibGUpKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAr Cj4gKwlyZXQgPSBhZXN0X25vZGVfcG9vbF9pbml0KCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHJf ZXJyKCJGYWlsZWQgaW5pdCBhZXN0IG5vZGUgcG9vbC5cbiIpOwo+ICsJCWdvdG8gZmFpbDsKPiAr CX0KPiArCj4gKwlJTklUX1dPUksoJmFlc3Rfd29yaywgYWVzdF9ub2RlX3Bvb2xfcHJvY2Vzcyk7 Cj4gKwo+ICsJYWVzdCA9IChzdHJ1Y3QgYWNwaV90YWJsZV9hZXN0ICopYWVzdF90YWJsZTsKPiAr Cj4gKwkvKiBHZXQgdGhlIGZpcnN0IEFFU1Qgbm9kZSAqLwo+ICsJYWVzdF9ub2RlID0gQUNQSV9B RERfUFRSKHN0cnVjdCBhY3BpX2Flc3RfaGRyLCBhZXN0LAo+ICsJCQkJIHNpemVvZihzdHJ1Y3Qg YWNwaV90YWJsZV9oZWFkZXIpKTsKPiArCS8qIFBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgQUVT VCB0YWJsZSAqLwo+ICsJYWVzdF9lbmQgPSBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfYWVzdF9o ZHIsIGFlc3QsCj4gKwkJCQlhZXN0X3RhYmxlLT5sZW5ndGgpOwo+ICsKPiArCXdoaWxlIChhZXN0 X25vZGUgPCBhZXN0X2VuZCkgewo+ICsJCWlmICgoKHU2NClhZXN0X25vZGUgKyBhZXN0X25vZGUt Pmxlbmd0aCkgPiAodTY0KWFlc3RfZW5kKSB7Cj4gKwkJCXByX2VycigiQUVTVCBub2RlIHBvaW50 ZXIgb3ZlcmZsb3csIGJhZCB0YWJsZS5cbiIpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9 Cj4gKwo+ICsJCWFlc3RfY291bnRfcHBpKGFlc3Rfbm9kZSk7Cj4gKwo+ICsJCWFlc3Rfbm9kZSA9 IEFDUElfQUREX1BUUihzdHJ1Y3QgYWNwaV9hZXN0X2hkciwgYWVzdF9ub2RlLAo+ICsJCQkJCSBh ZXN0X25vZGUtPmxlbmd0aCk7Cj4gKwl9Cj4gKwo+ICsJYWVzdF9wcGlfZGF0YSA9IGtjYWxsb2Mo bnVtX3BwaSwgc2l6ZW9mKHN0cnVjdCBhZXN0X25vZGVfZGF0YSAqKSwKPiArCQkJCUdGUF9LRVJO RUwpOwo+ICsJaWYgKCFhZXN0X3BwaV9kYXRhKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQln b3RvIGZhaWw7Cj4gKwl9Cj4gKwo+ICsJcHBpX2lycXMgPSBrY2FsbG9jKG51bV9wcGksIHNpemVv ZihpbnQpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghcHBpX2lycXMpIHsKPiArCQlyZXQgPSAtRU5P TUVNOwo+ICsJCWdvdG8gZmFpbDsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Bw aTsgaSsrKSB7Cj4gKwkJYWVzdF9wcGlfZGF0YVtpXSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgYWVz dF9ub2RlKTsKPiArCQlpZiAoIWFlc3RfcHBpX2RhdGFbaV0pIHsKPiArCQkJcHJfZXJyKCJGYWls ZWQgcGVyY3B1IGFsbG9jYXRpb24uXG4iKTsKPiArCQkJcmV0ID0gLUVOT01FTTsKPiArCQkJZ290 byBmYWlsOwo+ICsJCX0KPiArCX0KPiArCj4gKwlhZXN0X25vZGUgPSBBQ1BJX0FERF9QVFIoc3Ry dWN0IGFjcGlfYWVzdF9oZHIsIGFlc3QsCj4gKwkJCQkgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxl X2hlYWRlcikpOwo+ICsKPiArCXdoaWxlIChhZXN0X25vZGUgPCBhZXN0X2VuZCkgewoKQSBtYWNy byBmb3JfZWFjaF9hZXN0X25vZGUoKSB3aWxsIGJlIG1vcmUgcmVhZGFibGUuCgo+ICsJCXJldCA9 IGFlc3RfaW5pdF9ub2RlKGFlc3Rfbm9kZSk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlwcl9lcnIo ImZhaWxlZCB0byBpbml0IG5vZGU6ICVkIiwgcmV0KTsKPiArCQkJZ290byBmYWlsOwo+ICsJCX0K PiArCj4gKwkJYWVzdF9ub2RlID0gQUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX2Flc3RfaGRyLCBh ZXN0X25vZGUsCj4gKwkJCQkJIGFlc3Rfbm9kZS0+bGVuZ3RoKTsKPiArCX0KPiArCj4gKwo+ICsK PiArCXJldHVybiBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9BUF9BUk1fQUVTVF9TVEFSVElORywK PiArCQkJICAiZHJpdmVycy9hY3BpL2FybTY0L2Flc3Q6c3RhcnRpbmciLAo+ICsJCQkgIGFlc3Rf c3RhcnRpbmdfY3B1LCBhZXN0X2R5aW5nX2NwdSk7Cj4gKwo+ICtmYWlsOgo+ICsJZm9yIChpID0g MDsgaSA8IG51bV9wcGk7IGkrKykKPiArCQlmcmVlX3BlcmNwdShhZXN0X3BwaV9kYXRhW2ldKTsK CllvdSBzaG91bGQgZnJlZSB0aGUgYWVzdF9wcGlfZGF0YVswOmldLCBhZXN0X3BwaV9kYXRhW2k6 bnVtX3BwaV0gYXJlIG5vdCBhbGxvY19wZXJjcHUoKS4KCj4gKwlrZnJlZShhZXN0X3BwaV9kYXRh KTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArc3Vic3lzX2luaXRjYWxsKGFjcGlfYWVzdF9pbml0 KTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hY3BpX2Flc3QuaCBiL2luY2x1ZGUvbGlu dXgvYWNwaV9hZXN0LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAw MC4uNjc5MTg3NTA1ZGM2Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvbGludXgvYWNw aV9hZXN0LmgKPiBAQCAtMCwwICsxLDkyIEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wICovCj4gKyNpZm5kZWYgQUVTVF9ICj4gKyNkZWZpbmUgQUVTVF9ICj4gKwo+ICsj aW5jbHVkZSA8YWNwaS9hY3RibC5oPgo+ICsjaW5jbHVkZSA8YXNtL3Jhcy5oPgo+ICsKPiArI2Rl ZmluZSBBRVNUX0lOVEVSUlVQVF9NT0RFCQlCSVQoMCkKPiArCj4gKyNkZWZpbmUgQUNQSV9BRVNU X1BST0NfRkxBR19HTE9CQUwJKDE8PDApCj4gKyNkZWZpbmUgQUNQSV9BRVNUX1BST0NfRkxBR19T SEFSRUQJKDE8PDEpCj4gKwo+ICsjZGVmaW5lIEFDUElfQUVTVF9JTlRFUkZBQ0VfQ0xFQVJfTUlT QwkoMTw8MCkKPiArCj4gKyNkZWZpbmUgRVJYRlIJCQkweDAKPiArI2RlZmluZSBFUlhDVExSCQkJ MHg4Cj4gKyNkZWZpbmUgRVJYU1RBVFVTCQkweDEwCj4gKyNkZWZpbmUgRVJYQUREUgkJCTB4MTgK PiArI2RlZmluZSBFUlhNSVNDMAkJMHgyMAo+ICsjZGVmaW5lIEVSWE1JU0MxCQkweDI4Cj4gKyNk ZWZpbmUgRVJYTUlTQzIJCTB4MzAKPiArI2RlZmluZSBFUlhNSVNDMwkJMHgzOAo+ICsKPiArc3Ry dWN0IGFlc3Rfbm9kZV9pbnRlcmZhY2Ugewo+ICsJdTggdHlwZTsKPiArCXU2NCBwaHlfYWRkcjsK PiArCXUxNiByZWNvcmRfc3RhcnQ7Cj4gKwl1MTYgcmVjb3JkX2VuZDsKPiArCXUzMiBmbGFnczsK PiArCXVuc2lnbmVkIGxvbmcgcmVjb3JkX2ltcGxlbWVudGVkOwo+ICsJdW5zaWduZWQgbG9uZyBz dGF0dXNfcmVwb3J0aW5nOwo+ICsJdW5zaWduZWQgbG9uZyBhZGRyZXNzaW5nX21vZGU7Cj4gKwlz dHJ1Y3QgcmFzX2V4dF9yZWdzICpyZWdzOwo+ICsJdTY0ICpjZV90aHJlc2hvbGQ7Cj4gK307Cj4g Kwo+ICt1bmlvbiBhZXN0X25vZGVfcHJvY2Vzc29yIHsKPiArCXN0cnVjdCBhY3BpX2Flc3RfcHJv Y2Vzc29yX2NhY2hlIGNhY2hlX2RhdGE7Cj4gKwlzdHJ1Y3QgYWNwaV9hZXN0X3Byb2Nlc3Nvcl90 bGIgdGxiX2RhdGE7Cj4gKwlzdHJ1Y3QgYWNwaV9hZXN0X3Byb2Nlc3Nvcl9nZW5lcmljIGdlbmVy aWNfZGF0YTsKPiArfTsKPiArCj4gK3VuaW9uIGFlc3Rfbm9kZV9zcGVjIHsKPiArCXN0cnVjdCBh Y3BpX2Flc3RfcHJvY2Vzc29yIHByb2Nlc3NvcjsKPiArCXN0cnVjdCBhY3BpX2Flc3RfbWVtb3J5 IG1lbW9yeTsKPiArCXN0cnVjdCBhY3BpX2Flc3Rfc21tdSBzbW11Owo+ICsJc3RydWN0IGFjcGlf YWVzdF92ZW5kb3IgdmVuZG9yOwo+ICsJc3RydWN0IGFjcGlfYWVzdF9naWMgZ2ljOwo+ICt9Owo+ ICsKPiArc3RydWN0IGFlc3RfYWNjZXNzIHsKPiArCXU2NCAoKnJlYWQpKHU2NCBiYXNlLCB1MzIg b2Zmc2V0KTsKPiArCXZvaWQgKCp3cml0ZSkodTY0IGJhc2UsIHUzMiBvZmZzZXQsIHU2NCB2YWwp Owo+ICt9Owo+ICsKPiArc3RydWN0IGFlc3Rfbm9kZSB7Cj4gKwljaGFyICpuYW1lOwo+ICsJdTgg dHlwZTsKPiArCXN0cnVjdCBhZXN0X25vZGVfaW50ZXJmYWNlIGludGVyZmFjZTsKPiArCXVuaW9u IGFlc3Rfbm9kZV9zcGVjIHNwZWM7Cj4gKwl1bmlvbiBhZXN0X25vZGVfcHJvY2Vzc29yIHByb2M7 Cj4gKwlzdHJ1Y3QgYWVzdF9hY2Nlc3MgKmFjY2VzczsKPiArfTsKPiArCj4gK3N0cnVjdCBhZXN0 X25vZGVfbGxpc3Qgewo+ICsJc3RydWN0IGxsaXN0X25vZGUgbGxub2RlOwo+ICsJY2hhciAqbm9k ZV9uYW1lOwo+ICsJaW50IHR5cGU7Cj4gKwkvKgo+ICsJICogRGlmZmVyZW50IG5vZGVzIGhhdmUg ZGlmZmVyZW50IG1lYW5pbmdzOgo+ICsJICogICAtIFByb2Nlc3NvciBub2RlCTogcHJvY2Vzc29y IG51bWJlci4KPiArCSAqICAgLSBNZW1vcnkgbm9kZQk6IFNSQVQgcHJveGltaXR5IGRvbWFpbi4K PiArCSAqICAgLSBTTU1VIG5vZGUJOiBJT1JUIHByb3hpbWl0eSBkb21haW4uCj4gKwkgKiAgIC0g VmVuZG9yIG5vZGUJOiBoYXJkd2FyZSBJRC4KPiArCSAqICAgLSBHSUMgbm9kZQkJOiBpbnRlcmZh Y2UgdHlwZS4KPiArCSAqLwo+ICsJdTMyIGlkMDsKPiArCS8qCj4gKwkgKiBEaWZmZXJlbnQgbm9k ZXMgaGF2ZSBkaWZmZXJlbnQgbWVhbmluZ3M6Cj4gKwkgKiAgIC0gUHJvY2Vzc29yIG5vZGUJOiBw cm9jZXNzb3IgcmVzb3VyY2UgdHlwZS4KPiArCSAqICAgLSBNZW1vcnkgbm9kZQk6IE5vbi4KPiAr CSAqICAgLSBTTU1VIG5vZGUJOiBzdWJjb21wb25lbnQgcmVmZXJlbmNlLgo+ICsJICogICAtIFZl bmRvciBub2RlCTogVW5pcXVlIElELgo+ICsJICogICAtIEdJQyBub2RlCQk6IGluc3RhbmNlIGlk ZW50aWZpZXIuCj4gKwkgKi8KPiArCXUzMiBpZDE7Cj4gKwlpbnQgaW5kZXg7Cj4gKwl1bnNpZ25l ZCBsb25nIGFkZHJlc3NpbmdfbW9kZTsKPiArCXN0cnVjdCByYXNfZXh0X3JlZ3MgKnJlZ3M7Cj4g K307Cj4gKwo+ICsjZW5kaWYgLyogQUVTVF9IICovCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlu dXgvY3B1aG90cGx1Zy5oIGIvaW5jbHVkZS9saW51eC9jcHVob3RwbHVnLmgKPiBpbmRleCA2MjRk NGEzOGMzNTguLmYwZGRhMDhkYmFkMiAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2NwdWhv dHBsdWcuaAo+ICsrKyBiL2luY2x1ZGUvbGludXgvY3B1aG90cGx1Zy5oCj4gQEAgLTE4Niw2ICsx ODYsNyBAQCBlbnVtIGNwdWhwX3N0YXRlIHsKPiAgCUNQVUhQX0FQX0NTS1lfVElNRVJfU1RBUlRJ TkcsCj4gIAlDUFVIUF9BUF9USV9HUF9USU1FUl9TVEFSVElORywKPiAgCUNQVUhQX0FQX0hZUEVS Vl9USU1FUl9TVEFSVElORywKPiArCUNQVUhQX0FQX0FSTV9BRVNUX1NUQVJUSU5HLAo+ICAJLyog TXVzdCBiZSB0aGUgbGFzdCB0aW1lciBjYWxsYmFjayAqLwo+ICAJQ1BVSFBfQVBfRFVNTVlfVElN RVJfU1RBUlRJTkcsCj4gIAlDUFVIUF9BUF9BUk1fWEVOX1NUQVJUSU5HLAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWls aW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=