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 CD1FAC433F5 for ; Thu, 7 Apr 2022 16:31:15 +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-Type: Content-Transfer-Encoding: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=6TAjzTwGixUSnmNbvKyPNvYFEELgvtNBdlGwxvMuiuE=; b=RdkcIRYqVxd1hk AvoDO9ibtG+Tch+ObyKy2h96+MeZz+4WYTWdjFeqsyWslbX1JKJ/uSmjn94XEGT9Ec2ulkWcSgiaL RFuKkhb+XaEC5Z+hzCf34iSgek3pxebfJ3QeeZqk/rQcpkih/KHZx+Mm+q6KkYIUiHjjS7S1YFzkD /CJa/8TGEkYGXOk4zyA/jw1vdfNB218jBxj84CyyGQMoUUV7LXoUfh14o2qcu6zk3JpeZ7QMHcWDT lgQhjHET8xWL+y+FLn3imPNK5vWeM4F83L1b0cXl3gFFJcsLqtAE1vJUWfKvfBVQly8F/FJgX+KPG /4nDpXKbnFCw74xkrRag==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ncV13-00D4Nb-VW; Thu, 07 Apr 2022 16:29:50 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ncUSI-00CqRK-UV for linux-arm-kernel@lists.infradead.org; Thu, 07 Apr 2022 15:53:57 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A8809139F; Thu, 7 Apr 2022 08:53:49 -0700 (PDT) Received: from [10.57.41.19] (unknown [10.57.41.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 5A67A3F73B; Thu, 7 Apr 2022 08:53:47 -0700 (PDT) Message-ID: Date: Thu, 7 Apr 2022 16:53:41 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Subject: Re: [RFC PATCH -next V2 7/7] arm64: add pagecache reading to machine check safe Content-Language: en-GB To: Tong Tiangen , Mark Rutland Cc: Andrew Morton , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , Catalin Marinas , Will Deacon , Alexander Viro , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org References: <20220406091311.3354723-1-tongtiangen@huawei.com> <20220406091311.3354723-8-tongtiangen@huawei.com> From: Robin Murphy In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220407_085355_123259_A4316DAB X-CRM114-Status: GOOD ( 34.72 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMjAyMi0wNC0wNyAxNTo1NiwgVG9uZyBUaWFuZ2VuIHdyb3RlOgo+IAo+IAo+IOWcqCAyMDIy LzQvNiAxOToyNywgTWFyayBSdXRsYW5kIOWGmemBkzoKPj4gT24gV2VkLCBBcHIgMDYsIDIwMjIg YXQgMDk6MTM6MTFBTSArMDAwMCwgVG9uZyBUaWFuZ2VuIHdyb3RlOgo+Pj4gV2hlbiB1c2VyIHBy b2Nlc3MgcmVhZGluZyBmaWxlLCB0aGUgZGF0YSBpcyBjYWNoZWQgaW4gcGFnZWNhY2hlIGFuZAo+ Pj4gdGhlIGRhdGEgYmVsb25ncyB0byB0aGUgdXNlciBwcm9jZXNzLCBXaGVuIG1hY2hpbmUgY2hl Y2sgZXJyb3IgaXMKPj4+IGVuY291bnRlcmVkIGR1cmluZyBwYWdlY2FjaGUgcmVhZGluZywga2ls bGluZyB0aGUgdXNlciBwcm9jZXNzIGFuZAo+Pj4gaXNvbGF0ZSB0aGUgdXNlciBwYWdlIHdpdGgg aGFyZHdhcmUgbWVtb3J5IGVycm9ycyBpcyBhIG1vcmUgcmVhc29uYWJsZQo+Pj4gY2hvaWNlIHRo YW4ga2VybmVsIHBhbmljLgo+Pj4KPj4+IFRoZSBfX2FyY2hfY29weV9tY190b191c2VyKCkgaW4g Y29weV90b191c2VyX21jLlMgaXMgbGFyZ2VseSBib3Jyb3dzCj4+PiBmcm9tIF9fYXJjaF9jb3B5 X3RvX3VzZXIoKSBpbiBjb3B5X3RvX3VzZXIuUyBhbmQgdGhlIG1haW4gZGlmZmVyZW5jZQo+Pj4g aXMgX19hcmNoX2NvcHlfbWNfdG9fdXNlcigpIGFkZCB0aGUgZXh0YWJsZSBlbnRyeSB0byBzdXBw b3J0IG1hY2hpbmUKPj4+IGNoZWNrIHNhZmUuCj4+Cj4+IEFzIHdpdGggcHJpb3IgcGF0Y2hlcywg KndoeSogaXMgdGhlIGRpc3RpbmN0aW9uIG5lY2Vzc2FyeT8KPj4KPj4gVGhpcyBwYXRjaCBhZGRz IGEgYnVuY2ggb2YgY29uZGl0aW9uYWwgbG9naWMsIGJ1dCAqc3RydWN0dXJhbGx5KiBpdCAKPj4g ZG9lc24ndAo+PiBhbHRlciB0aGUgaGFuZGxpbmcgdG8gYmUgc3Vic3RhbnRpYWxseSBkaWZmZXJl bnQgZm9yIHRoZSBNQyBhbmQgbm9uLU1DIAo+PiBjYXNlcy4KPj4KPj4gVGhpcyBzZWVtcyBsaWtl IHBvaW50bGVzcyBkdXBsaWNhdGlvbiB0aGF0IGp1c3QgbWFrZXMgaXQgaGFyZGVyIHRvIAo+PiBt YWludGFpbgo+PiB0aGlzIGNvZGUuCj4+Cj4+IFRoYW5rcywKPj4gTWFyay4KPiAKPiBBZ3JlZWQs IFRoZSBpbXBsZW1lbnRhdGlvbiBoZXJlIGxvb2tzIGEgbGl0dGxlIHVnbHkgYW5kIGhhcmRlciB0 byBtYWludGFpbi4KPiAKPiBUaGUgcHVycG9zZSBvZiBteSBkb2luZyB0aGlzIGlzIG5vdCBhbGwg Y29weV90b191c2VyIGNhbiBiZSByZWNvdmVyZWQuCj4gCj4gQSBtZW1vcnkgZXJyb3IgaXMgY29u c3VtZWQgd2hlbiByZWFkaW5nIHBhZ2VjYWNoZSB1c2luZyBjb3B5X3RvX3VzZXIuCj4gSSB0aGlu ayBpbiB0aGlzIHNjZW5hcmlvLCBvbmx5IHRoZSBwcm9jZXNzIGlzIGFmZmVjdGVkIGJlY2F1c2Ug aXQgY2FuJ3QgCj4gcmVhZAo+IHBhZ2VjYWNoZSBkYXRhIGNvcnJlY3RseS4gSnVzdCBraWxsIHRo ZSBwcm9jZXNzIGFuZCBkb24ndCBuZWVkIHRoZSB3aG9sZQo+IGtlcm5lbCBwYW5pYy4KPiAKPiBT byBJIG5lZWQgdHdvIGRpZmZlcmVudCBjb3B5X3RvX3VzZXIgaW1wbGVtZW50YXRpb24sIG9uZSBp cyBleGlzdGluZyAKPiBfX2FyY2hfY29weV90b191c2VyLAo+IHRoaXMgZnVuY3Rpb24gd2lsbCBw YW5pYyB3aGVuIGNvbnN1bWluZyBtZW1vcnkgZXJyb3JzLiBUaGUgb3RoZXIgb25lIGlzIAo+IHRo aXMgbmV3IGhlbHBlcgo+IF9fYXJjaF9jb3B5X21jX3RvX3VzZXIsIHRoaXMgaW50ZXJmYWNlIGlz IHVzZWQgd2hlbiByZWFkaW5nIHBhZ2VjYWNoZS4gCj4gSXQgY2FuIHJlY292ZXIgZnJvbQo+IGNv bnN1bWUgbWVtb3J5IGVycm9yLgoKT0ssIGJ1dCBkbyB3ZSByZWFsbHkgbmVlZCB0d28gYWxtb3N0 LWlkZW50aWNhbCBpbXBsZW1lbnRhdGlvbnMgb2YgZXZlcnkgCmZ1bmN0aW9uIHdoZXJlIHRoZSBv bmx5IGRpZmZlcmVuY2UgaXMgaG93IHRoZSBleGNlcHRpb24gdGFibGUgZW50cmllcyAKYXJlIGFu bm90YXRlZD8gQ291bGQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGl0c2VsZiBqdXN0IGZpZ3VyZSBv dXQgd2hvIApvd25zIHRoZSBwYWdlIHdoZXJlIHRoZSBmYXVsdCBvY2N1cnJlZCBhbmQgZGVjaWRl IHdoYXQgYWN0aW9uIHRvIHRha2UgYXMgCmFwcHJvcHJpYXRlPwoKUm9iaW4uCgo+IAo+IEluIGZ1 dHVyZSwgaWYgZmluZCBhIHNjZW5hcmlvIHVzZSBjb3B5X3RvX3VzZXIgY2FuIGFsc28gYmUgcmVj b3ZlcmVkLCB3ZSAKPiBjYW4gYWxzbyB1c2UgdGhpcyBtYwo+IHNhZmUgaGVscGVyIGluc3RlYWQg aXQuCj4gCj4gVGhhbmtzLAo+IFRvbmcuCj4gCj4+Cj4+PiBJbiBfY29weV9wYWdlX3RvX2l0ZXIo KSwgbWFjaGluZSBjaGVjayBzYWZlIG9ubHkgY29uc2lkZXJlZCBJVEVSX0lPVkVDCj4+PiB3aGlj aCBpcyB1c2VkIGJ5IHBhZ2VjYWNoZSByZWFkaW5nLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IFRv bmcgVGlhbmdlbiA8dG9uZ3RpYW5nZW5AaHVhd2VpLmNvbT4KPj4+IC0tLQo+Pj4gwqAgYXJjaC9h cm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmggfCAxNSArKysrKysKPj4+IMKgIGFyY2gvYXJtNjQv bGliL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAyICstCj4+PiDCoCBhcmNoL2FybTY0 L2xpYi9jb3B5X3RvX3VzZXJfbWMuUyB8IDc4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4+PiDCoCBpbmNsdWRlL2xpbnV4L3Vpby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKg IDkgKysrLQo+Pj4gwqAgbGliL2lvdl9pdGVyLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfCA4NSArKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQo+Pj4gwqAgNSBm aWxlcyBjaGFuZ2VkLCAxNzAgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCj4+PiDCoCBj cmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9hcm02NC9saWIvY29weV90b191c2VyX21jLlMKPj4+Cj4+ PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmggCj4+PiBiL2Fy Y2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCj4+PiBpbmRleCAyNGI2NjI0MDdmYmQuLmYw ZDVlODExMTY1YSAxMDA2NDQKPj4+IC0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vz cy5oCj4+PiArKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAo+Pj4gQEAgLTQ0 OCw2ICs0NDgsMjEgQEAgZXh0ZXJuIGxvbmcgc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZGVzdCwg Y29uc3QgCj4+PiBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KTsKPj4+IMKgIGV4dGVybiBf X211c3RfY2hlY2sgbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0ciwgbG9u ZyBuKTsKPj4+ICsjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NPUFlfTUMKPj4+ICtleHRlcm4gdW5z aWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19hcmNoX2NvcHlfbWNfdG9fdXNlcih2b2lkIF9fdXNl ciAKPj4+ICp0bywKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOwo+Pj4g K3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKPj4+ICtjb3B5X21jX3Rv X3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4p Cj4+PiArewo+Pj4gK8KgwqDCoCB1YWNjZXNzX3R0YnIwX2VuYWJsZSgpOwo+Pj4gK8KgwqDCoCBu ID0gX19hcmNoX2NvcHlfbWNfdG9fdXNlcihfX3VhY2Nlc3NfbWFza19wdHIodG8pLCBmcm9tLCBu KTsKPj4+ICvCoMKgwqAgdWFjY2Vzc190dGJyMF9kaXNhYmxlKCk7Cj4+PiArCj4+PiArwqDCoMKg IHJldHVybiBuOwo+Pj4gK30KPj4+ICsjZGVmaW5lIGNvcHlfbWNfdG9fdXNlciBjb3B5X21jX3Rv X3VzZXIKPj4+ICsjZW5kaWYKPj4+ICsKPj4+IMKgICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFD Q0VTU19GTFVTSENBQ0hFCj4+PiDCoCBzdHJ1Y3QgcGFnZTsKPj4+IMKgIHZvaWQgbWVtY3B5X3Bh Z2VfZmx1c2hjYWNoZShjaGFyICp0bywgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCAKPj4+IG9m ZnNldCwgc2l6ZV90IGxlbik7Cj4+PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9saWIvTWFrZWZp bGUgYi9hcmNoL2FybTY0L2xpYi9NYWtlZmlsZQo+Pj4gaW5kZXggMjljNTc4NDE0YjEyLi45YjM1 NzEyMjdmYjQgMTAwNjQ0Cj4+PiAtLS0gYS9hcmNoL2FybTY0L2xpYi9NYWtlZmlsZQo+Pj4gKysr IGIvYXJjaC9hcm02NC9saWIvTWFrZWZpbGUKPj4+IEBAIC0yMyw0ICsyMyw0IEBAIG9iai0kKENP TkZJR19BUk02NF9NVEUpICs9IG10ZS5vCj4+PiDCoCBvYmotJChDT05GSUdfS0FTQU5fU1dfVEFH UykgKz0ga2FzYW5fc3dfdGFncy5vCj4+PiAtb2JqLSQoQ09ORklHX0FSQ0hfSEFTX0NQWV9NQykg Kz0gY29weV9wYWdlX21jLm8KPj4+ICtvYmotJChDT05GSUdfQVJDSF9IQVNfQ09QWV9NQykgKz0g Y29weV9wYWdlX21jLm8gY29weV90b191c2VyX21jLm8KPj4+IGRpZmYgLS1naXQgYS9hcmNoL2Fy bTY0L2xpYi9jb3B5X3RvX3VzZXJfbWMuUyAKPj4+IGIvYXJjaC9hcm02NC9saWIvY29weV90b191 c2VyX21jLlMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwMDAwMDAu LjlkMjI4ZmYxNTQ0Ngo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvYXJjaC9hcm02NC9saWIv Y29weV90b191c2VyX21jLlMKPj4+IEBAIC0wLDAgKzEsNzggQEAKPj4+ICsvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4+PiArLyoKPj4+ICsgKiBDb3B5cmlnaHQg KEMpIDIwMTIgQVJNIEx0ZC4KPj4+ICsgKi8KPj4+ICsKPj4+ICsjaW5jbHVkZSA8bGludXgvbGlu a2FnZS5oPgo+Pj4gKwo+Pj4gKyNpbmNsdWRlIDxhc20vYXNtLXVhY2Nlc3MuaD4KPj4+ICsjaW5j bHVkZSA8YXNtL2Fzc2VtYmxlci5oPgo+Pj4gKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KPj4+ICsK Pj4+ICsvKgo+Pj4gKyAqIENvcHkgdG8gdXNlciBzcGFjZSBmcm9tIGEga2VybmVsIGJ1ZmZlciAo YWxpZ25tZW50IGhhbmRsZWQgYnkgdGhlIAo+Pj4gaGFyZHdhcmUpCj4+PiArICoKPj4+ICsgKiBQ YXJhbWV0ZXJzOgo+Pj4gKyAqwqDCoMKgIHgwIC0gdG8KPj4+ICsgKsKgwqDCoCB4MSAtIGZyb20K Pj4+ICsgKsKgwqDCoCB4MiAtIG4KPj4+ICsgKiBSZXR1cm5zOgo+Pj4gKyAqwqDCoMKgIHgwIC0g Ynl0ZXMgbm90IGNvcGllZAo+Pj4gKyAqLwo+Pj4gK8KgwqDCoCAubWFjcm8gbGRyYjEgcmVnLCBw dHIsIHZhbAo+Pj4gK8KgwqDCoCAxMDAwOiBsZHJiwqAgXHJlZywgW1xwdHJdLCBcdmFsOwo+Pj4g K8KgwqDCoCBfYXNtX2V4dGFibGVfbWMgMTAwMGIsIDk5OThmOwo+Pj4gK8KgwqDCoCAuZW5kbQo+ Pj4gKwo+Pj4gK8KgwqDCoCAubWFjcm8gc3RyYjEgcmVnLCBwdHIsIHZhbAo+Pj4gK8KgwqDCoCB1 c2VyX2xkc3RfbWMgOTk5OGYsIHN0dHJiLCBccmVnLCBccHRyLCBcdmFsCj4+PiArwqDCoMKgIC5l bmRtCj4+PiArCj4+PiArwqDCoMKgIC5tYWNybyBsZHJoMSByZWcsIHB0ciwgdmFsCj4+PiArwqDC oMKgIDEwMDE6IGxkcmjCoCBccmVnLCBbXHB0cl0sIFx2YWw7Cj4+PiArwqDCoMKgIF9hc21fZXh0 YWJsZV9tYyAxMDAxYiwgOTk5OGY7Cj4+PiArwqDCoMKgIC5lbmRtCj4+PiArCj4+PiArwqDCoMKg IC5tYWNybyBzdHJoMSByZWcsIHB0ciwgdmFsCj4+PiArwqDCoMKgIHVzZXJfbGRzdF9tYyA5OTk3 Ziwgc3R0cmgsIFxyZWcsIFxwdHIsIFx2YWwKPj4+ICvCoMKgwqAgLmVuZG0KPj4+ICsKPj4+ICvC oMKgwqAgLm1hY3JvIGxkcjEgcmVnLCBwdHIsIHZhbAo+Pj4gK8KgwqDCoCAxMDAyOiBsZHIgXHJl ZywgW1xwdHJdLCBcdmFsOwo+Pj4gK8KgwqDCoCBfYXNtX2V4dGFibGVfbWMgMTAwMmIsIDk5OThm Owo+Pj4gK8KgwqDCoCAuZW5kbQo+Pj4gKwo+Pj4gK8KgwqDCoCAubWFjcm8gc3RyMSByZWcsIHB0 ciwgdmFsCj4+PiArwqDCoMKgIHVzZXJfbGRzdF9tYyA5OTk3Ziwgc3R0ciwgXHJlZywgXHB0ciwg XHZhbAo+Pj4gK8KgwqDCoCAuZW5kbQo+Pj4gKwo+Pj4gK8KgwqDCoCAubWFjcm8gbGRwMSByZWcx LCByZWcyLCBwdHIsIHZhbAo+Pj4gK8KgwqDCoCAxMDAzOiBsZHAgXHJlZzEsIFxyZWcyLCBbXHB0 cl0sIFx2YWw7Cj4+PiArwqDCoMKgIF9hc21fZXh0YWJsZV9tYyAxMDAzYiwgOTk5OGY7Cj4+PiAr wqDCoMKgIC5lbmRtCj4+PiArCj4+PiArwqDCoMKgIC5tYWNybyBzdHAxIHJlZzEsIHJlZzIsIHB0 ciwgdmFsCj4+PiArwqDCoMKgIHVzZXJfc3RwIDk5OTdmLCBccmVnMSwgXHJlZzIsIFxwdHIsIFx2 YWwKPj4+ICvCoMKgwqAgLmVuZG0KPj4+ICsKPj4+ICtlbmTCoMKgwqAgLnJlccKgwqDCoCB4NQo+ Pj4gK3NyY2luwqDCoMKgIC5yZXHCoMKgwqAgeDE1Cj4+PiArU1lNX0ZVTkNfU1RBUlQoX19hcmNo X2NvcHlfbWNfdG9fdXNlcikKPj4+ICvCoMKgwqAgYWRkwqDCoMKgIGVuZCwgeDAsIHgyCj4+PiAr wqDCoMKgIG1vdsKgwqDCoCBzcmNpbiwgeDEKPj4+ICsjaW5jbHVkZSAiY29weV90ZW1wbGF0ZS5T Igo+Pj4gK8KgwqDCoCBtb3bCoMKgwqAgeDAsICMwCj4+PiArwqDCoMKgIHJldAo+Pj4gKwo+Pj4g K8KgwqDCoCAvLyBFeGNlcHRpb24gZml4dXBzCj4+PiArOTk5NzrCoMKgwqAgY2J6wqDCoMKgIHgw LCA5OTk4ZsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gQ2hlY2sgbWFjaGluZSBjaGVjayBleGNl cHRpb24KPj4+ICvCoMKgwqAgY21wwqDCoMKgIGRzdCwgZHN0aW4KPj4+ICvCoMKgwqAgYi5uZcKg wqDCoCA5OTk4Zgo+Pj4gK8KgwqDCoCAvLyBCZWZvcmUgYmVpbmcgYWJzb2x1dGVseSBzdXJlIHdl IGNvdWxkbid0IGNvcHkgYW55dGhpbmcsIHRyeSAKPj4+IGhhcmRlcgo+Pj4gK8KgwqDCoCBsZHJi wqDCoMKgIHRtcDF3LCBbc3JjaW5dCj4+PiArVVNFUig5OTk4Ziwgc3R0cmIgdG1wMXcsIFtkc3Rd KQo+Pj4gK8KgwqDCoCBhZGTCoMKgwqAgZHN0LCBkc3QsICMxCj4+PiArOTk5ODrCoMKgwqAgc3Vi wqDCoMKgIHgwLCBlbmQsIGRzdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gYnl0ZXMgbm90IGNv cGllZAo+Pj4gK8KgwqDCoCByZXQKPj4+ICtTWU1fRlVOQ19FTkQoX19hcmNoX2NvcHlfbWNfdG9f dXNlcikKPj4+ICtFWFBPUlRfU1lNQk9MKF9fYXJjaF9jb3B5X21jX3RvX3VzZXIpCj4+PiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9saW51eC91aW8uaCBiL2luY2x1ZGUvbGludXgvdWlvLmgKPj4+IGlu ZGV4IDczOTI4NWZlNWEyZi4uNTM5ZDllZTliMDMyIDEwMDY0NAo+Pj4gLS0tIGEvaW5jbHVkZS9s aW51eC91aW8uaAo+Pj4gKysrIGIvaW5jbHVkZS9saW51eC91aW8uaAo+Pj4gQEAgLTE0NywxMCAr MTQ3LDE3IEBAIHNpemVfdCBfY29weV90b19pdGVyKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCAK Pj4+IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpOwo+Pj4gwqAgc2l6ZV90IF9jb3B5X2Zyb21f aXRlcih2b2lkICphZGRyLCBzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSk7Cj4+PiDC oCBzaXplX3QgX2NvcHlfZnJvbV9pdGVyX25vY2FjaGUodm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVz LCBzdHJ1Y3QgCj4+PiBpb3ZfaXRlciAqaSk7Cj4+PiArI2lmZGVmIENPTkZJR19BUkNIX0hBU19D T1BZX01DCj4+PiArc2l6ZV90IGNvcHlfbWNfcGFnZV90b19pdGVyKHN0cnVjdCBwYWdlICpwYWdl LCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgCj4+PiBieXRlcywKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IGlvdl9pdGVyICppKTsKPj4+ICsjZWxzZQo+Pj4gKyNkZWZp bmUgY29weV9tY19wYWdlX3RvX2l0ZXIgY29weV9wYWdlX3RvX2l0ZXIKPj4+ICsjZW5kaWYKPj4+ ICsKPj4+IMKgIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGNvcHlfZm9saW9fdG9faXRlcihzdHJ1Y3Qg Zm9saW8gKmZvbGlvLCBzaXplX3QgCj4+PiBvZmZzZXQsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg c2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpCj4+PiDCoCB7Cj4+PiAtwqDCoMKgIHJl dHVybiBjb3B5X3BhZ2VfdG9faXRlcigmZm9saW8tPnBhZ2UsIG9mZnNldCwgYnl0ZXMsIGkpOwo+ Pj4gK8KgwqDCoCByZXR1cm4gY29weV9tY19wYWdlX3RvX2l0ZXIoJmZvbGlvLT5wYWdlLCBvZmZz ZXQsIGJ5dGVzLCBpKTsKPj4+IMKgIH0KPj4+IMKgIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19t dXN0X2NoZWNrCj4+PiBkaWZmIC0tZ2l0IGEvbGliL2lvdl9pdGVyLmMgYi9saWIvaW92X2l0ZXIu Ywo+Pj4gaW5kZXggNmRkNTMzMGY3YTk5Li4yYzVmM2JiNjM5MWQgMTAwNjQ0Cj4+PiAtLS0gYS9s aWIvaW92X2l0ZXIuYwo+Pj4gKysrIGIvbGliL2lvdl9pdGVyLmMKPj4+IEBAIC0xNTcsNiArMTU3 LDE5IEBAIHN0YXRpYyBpbnQgY29weW91dCh2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgCj4+ PiAqZnJvbSwgc2l6ZV90IG4pCj4+PiDCoMKgwqDCoMKgIHJldHVybiBuOwo+Pj4gwqAgfQo+Pj4g KyNpZmRlZiBDT05GSUdfQVJDSF9IQVNfQ09QWV9NQwo+Pj4gK3N0YXRpYyBpbnQgY29weW91dF9t Yyh2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBuKQo+Pj4gK3sKPj4+ ICvCoMKgwqAgaWYgKGFjY2Vzc19vayh0bywgbikpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpbnN0 cnVtZW50X2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbik7Cj4+PiArwqDCoMKgwqDCoMKgwqAgbiA9 IGNvcHlfbWNfdG9fdXNlcigoX19mb3JjZSB2b2lkICopIHRvLCBmcm9tLCBuKTsKPj4+ICvCoMKg wqAgfQo+Pj4gK8KgwqDCoCByZXR1cm4gbjsKPj4+ICt9Cj4+PiArI2Vsc2UKPj4+ICsjZGVmaW5l IGNvcHlvdXRfbWMgY29weW91dAo+Pj4gKyNlbmRpZgo+Pj4gKwo+Pj4gwqAgc3RhdGljIGludCBj b3B5aW4odm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCBzaXplX3QgbikKPj4+IMKg IHsKPj4+IMKgwqDCoMKgwqAgaWYgKHNob3VsZF9mYWlsX3VzZXJjb3B5KCkpCj4+PiBAQCAtMTY5 LDcgKzE4Miw3IEBAIHN0YXRpYyBpbnQgY29weWluKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNl ciAKPj4+ICpmcm9tLCBzaXplX3QgbikKPj4+IMKgIH0KPj4+IMKgIHN0YXRpYyBzaXplX3QgY29w eV9wYWdlX3RvX2l0ZXJfaW92ZWMoc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCAKPj4+IG9mZnNl dCwgc2l6ZV90IGJ5dGVzLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW92 X2l0ZXIgKmkpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpb3ZfaXRlciAq aSwgYm9vbCBtY19zYWZlKQo+Pj4gwqAgewo+Pj4gwqDCoMKgwqDCoCBzaXplX3Qgc2tpcCwgY29w eSwgbGVmdCwgd2FudGVkOwo+Pj4gwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdjsK Pj4+IEBAIC0xOTQsNyArMjA3LDEwIEBAIHN0YXRpYyBzaXplX3QgY29weV9wYWdlX3RvX2l0ZXJf aW92ZWMoc3RydWN0IAo+Pj4gcGFnZSAqcGFnZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGIKPj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBmcm9tID0ga2FkZHIgKyBvZmZzZXQ7Cj4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgLyogZmlyc3QgY2h1bmssIHVzdWFsbHkgdGhlIG9ubHkgb25lICovCj4+PiAtwqDC oMKgwqDCoMKgwqAgbGVmdCA9IGNvcHlvdXQoYnVmLCBmcm9tLCBjb3B5KTsKPj4+ICvCoMKgwqDC oMKgwqDCoCBpZiAobWNfc2FmZSkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxlZnQgPSBj b3B5b3V0X21jKGJ1ZiwgZnJvbSwgY29weSk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZWxzZQo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGVmdCA9IGNvcHlvdXQoYnVmLCBmcm9tLCBjb3B5KTsK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBjb3B5IC09IGxlZnQ7Cj4+PiDCoMKgwqDCoMKgwqDCoMKg wqAgc2tpcCArPSBjb3B5Owo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGZyb20gKz0gY29weTsKPj4+ IEBAIC0yMDQsNyArMjIwLDEwIEBAIHN0YXRpYyBzaXplX3QgY29weV9wYWdlX3RvX2l0ZXJfaW92 ZWMoc3RydWN0IAo+Pj4gcGFnZSAqcGFnZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGIKPj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlvdisrOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYnVmID0gaW92LT5pb3ZfYmFzZTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNvcHkgPSBtaW4oYnl0ZXMsIGlvdi0+aW92X2xlbik7Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBsZWZ0ID0gY29weW91dChidWYsIGZyb20sIGNvcHkpOwo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKG1jX3NhZmUpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGxlZnQgPSBjb3B5b3V0X21jKGJ1ZiwgZnJvbSwgY29weSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBlbHNlCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxlZnQgPSBj b3B5b3V0KGJ1ZiwgZnJvbSwgY29weSk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj b3B5IC09IGxlZnQ7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBza2lwID0gY29weTsK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZyb20gKz0gY29weTsKPj4+IEBAIC0yMjMs NyArMjQyLDEwIEBAIHN0YXRpYyBzaXplX3QgY29weV9wYWdlX3RvX2l0ZXJfaW92ZWMoc3RydWN0 IAo+Pj4gcGFnZSAqcGFnZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGIKPj4+IMKgwqDCoMKgwqAg a2FkZHIgPSBrbWFwKHBhZ2UpOwo+Pj4gwqDCoMKgwqDCoCBmcm9tID0ga2FkZHIgKyBvZmZzZXQ7 Cj4+PiAtwqDCoMKgIGxlZnQgPSBjb3B5b3V0KGJ1ZiwgZnJvbSwgY29weSk7Cj4+PiArwqDCoMKg IGlmIChtY19zYWZlKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIGxlZnQgPSBjb3B5b3V0X21jKGJ1Ziwg ZnJvbSwgY29weSk7Cj4+PiArwqDCoMKgIGVsc2UKPj4+ICvCoMKgwqDCoMKgwqDCoCBsZWZ0ID0g Y29weW91dChidWYsIGZyb20sIGNvcHkpOwo+Pj4gwqDCoMKgwqDCoCBjb3B5IC09IGxlZnQ7Cj4+ PiDCoMKgwqDCoMKgIHNraXAgKz0gY29weTsKPj4+IMKgwqDCoMKgwqAgZnJvbSArPSBjb3B5Owo+ Pj4gQEAgLTIzMiw3ICsyNTQsMTAgQEAgc3RhdGljIHNpemVfdCBjb3B5X3BhZ2VfdG9faXRlcl9p b3ZlYyhzdHJ1Y3QgCj4+PiBwYWdlICpwYWdlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgYgo+Pj4g wqDCoMKgwqDCoMKgwqDCoMKgIGlvdisrOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJ1ZiA9IGlv di0+aW92X2Jhc2U7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgY29weSA9IG1pbihieXRlcywgaW92 LT5pb3ZfbGVuKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBsZWZ0ID0gY29weW91dChidWYsIGZyb20s IGNvcHkpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChtY19zYWZlKQo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgbGVmdCA9IGNvcHlvdXRfbWMoYnVmLCBmcm9tLCBjb3B5KTsKPj4+ICvCoMKg wqDCoMKgwqDCoCBlbHNlCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZWZ0ID0gY29weW91 dChidWYsIGZyb20sIGNvcHkpOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGNvcHkgLT0gbGVmdDsK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBza2lwID0gY29weTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBmcm9tICs9IGNvcHk7Cj4+PiBAQCAtNjc0LDE1ICs2OTksNiBAQCBzaXplX3QgX2NvcHlfdG9f aXRlcihjb25zdCB2b2lkICphZGRyLCBzaXplX3QgCj4+PiBieXRlcywgc3RydWN0IGlvdl9pdGVy ICppKQo+Pj4gwqAgRVhQT1JUX1NZTUJPTChfY29weV90b19pdGVyKTsKPj4+IMKgICNpZmRlZiBD T05GSUdfQVJDSF9IQVNfQ09QWV9NQwo+Pj4gLXN0YXRpYyBpbnQgY29weW91dF9tYyh2b2lkIF9f dXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBuKQo+Pj4gLXsKPj4+IC3CoMKgwqAg aWYgKGFjY2Vzc19vayh0bywgbikpIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCBpbnN0cnVtZW50X2Nv cHlfdG9fdXNlcih0bywgZnJvbSwgbik7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgbiA9IGNvcHlfbWNf dG9fdXNlcigoX19mb3JjZSB2b2lkICopIHRvLCBmcm9tLCBuKTsKPj4+IC3CoMKgwqAgfQo+Pj4g LcKgwqDCoCByZXR1cm4gbjsKPj4+IC19Cj4+PiAtCj4+PiDCoCBzdGF0aWMgc2l6ZV90IGNvcHlf bWNfcGlwZV90b19pdGVyKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywKPj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGlvdl9pdGVyICppKQo+Pj4gwqAg ewo+Pj4gQEAgLTg0NiwxMCArODYyLDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwYWdlX2NvcHlf c2FuZShzdHJ1Y3QgcGFnZSAKPj4+ICpwYWdlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbikKPj4+ IMKgIH0KPj4+IMKgIHN0YXRpYyBzaXplX3QgX19jb3B5X3BhZ2VfdG9faXRlcihzdHJ1Y3QgcGFn ZSAqcGFnZSwgc2l6ZV90IG9mZnNldCwgCj4+PiBzaXplX3QgYnl0ZXMsCj4+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpb3ZfaXRlciAqaSkKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3RydWN0IGlvdl9pdGVyICppLCBib29sIG1jX3NhZmUpCj4+PiDCoCB7Cj4+PiDC oMKgwqDCoMKgIGlmIChsaWtlbHkoaXRlcl9pc19pb3ZlYyhpKSkpCj4+PiAtwqDCoMKgwqDCoMKg wqAgcmV0dXJuIGNvcHlfcGFnZV90b19pdGVyX2lvdmVjKHBhZ2UsIG9mZnNldCwgYnl0ZXMsIGkp Owo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBjb3B5X3BhZ2VfdG9faXRlcl9pb3ZlYyhwYWdl LCBvZmZzZXQsIGJ5dGVzLCBpLCAKPj4+IG1jX3NhZmUpOwo+Pj4gwqDCoMKgwqDCoCBpZiAoaW92 X2l0ZXJfaXNfYnZlYyhpKSB8fCBpb3ZfaXRlcl9pc19rdmVjKGkpIHx8IAo+Pj4gaW92X2l0ZXJf aXNfeGFycmF5KGkpKSB7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdm9pZCAqa2FkZHIgPSBrbWFw X2xvY2FsX3BhZ2UocGFnZSk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IHdhbnRlZCA9 IF9jb3B5X3RvX2l0ZXIoa2FkZHIgKyBvZmZzZXQsIGJ5dGVzLCBpKTsKPj4+IEBAIC04NzgsNyAr ODk0LDcgQEAgc2l6ZV90IGNvcHlfcGFnZV90b19pdGVyKHN0cnVjdCBwYWdlICpwYWdlLCAKPj4+ IHNpemVfdCBvZmZzZXQsIHNpemVfdCBieXRlcywKPj4+IMKgwqDCoMKgwqAgb2Zmc2V0ICU9IFBB R0VfU0laRTsKPj4+IMKgwqDCoMKgwqAgd2hpbGUgKDEpIHsKPj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBzaXplX3QgbiA9IF9fY29weV9wYWdlX3RvX2l0ZXIocGFnZSwgb2Zmc2V0LAo+Pj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtaW4oYnl0ZXMsIChzaXplX3QpUEFHRV9TSVpFIC0g b2Zmc2V0KSwgaSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1pbihieXRl cywgKHNpemVfdClQQUdFX1NJWkUgLSBvZmZzZXQpLCBpLCBmYWxzZSk7Cj4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgcmVzICs9IG47Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnl0ZXMgLT0gbjsKPj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWJ5dGVzIHx8ICFuKQo+Pj4gQEAgLTg5Myw2ICs5MDks NDEgQEAgc2l6ZV90IGNvcHlfcGFnZV90b19pdGVyKHN0cnVjdCBwYWdlICpwYWdlLCAKPj4+IHNp emVfdCBvZmZzZXQsIHNpemVfdCBieXRlcywKPj4+IMKgIH0KPj4+IMKgIEVYUE9SVF9TWU1CT0wo Y29weV9wYWdlX3RvX2l0ZXIpOwo+Pj4gKyNpZmRlZiBDT05GSUdfQVJDSF9IQVNfQ09QWV9NQwo+ Pj4gKy8qKgo+Pj4gKyAqIGNvcHlfbWNfcGFnZV90b19pdGVyIC0gY29weSBwYWdlIHRvIGl0ZXIg d2l0aCBzb3VyY2UgbWVtb3J5IGVycm9yIAo+Pj4gZXhjZXB0aW9uIGhhbmRsaW5nLgo+Pj4gKyAq Cj4+PiArICogVGhlIGZpbGVtYXBfcmVhZCBkZXBsb3lzIHRoaXMgZm9yIHBhZ2VjYWNoZSByZWFk aW5nIGFuZCB0aGUgbWFpbiAKPj4+IGRpZmZlcmVuY2VzIGJldHdlZW4KPj4+ICsgKiB0aGlzIGFu ZCB0eXBpY2FsIGNvcHlfcGFnZV90b19pdGVyKCkgaXMgY2FsbCBfX2NvcHlfcGFnZV90b19pdGVy IAo+Pj4gd2l0aCBtY19zYWZlIHRydWUuCj4+PiArICoKPj4+ICsgKiBSZXR1cm46IG51bWJlciBv ZiBieXRlcyBjb3BpZWQgKG1heSBiZSAlMCkKPj4+ICsgKi8KPj4+ICtzaXplX3QgY29weV9tY19w YWdlX3RvX2l0ZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBvZmZzZXQsIHNpemVfdCAKPj4+ IGJ5dGVzLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW92X2l0ZXIgKmkp Cj4+PiArewo+Pj4gK8KgwqDCoCBzaXplX3QgcmVzID0gMDsKPj4+ICsKPj4+ICvCoMKgwqAgaWYg KHVubGlrZWx5KCFwYWdlX2NvcHlfc2FuZShwYWdlLCBvZmZzZXQsIGJ5dGVzKSkpCj4+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+PiArwqDCoMKgIHBhZ2UgKz0gb2Zmc2V0IC8gUEFHRV9T SVpFOyAvLyBmaXJzdCBzdWJwYWdlCj4+PiArwqDCoMKgIG9mZnNldCAlPSBQQUdFX1NJWkU7Cj4+ PiArwqDCoMKgIHdoaWxlICgxKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgc2l6ZV90IG4gPSBfX2Nv cHlfcGFnZV90b19pdGVyKHBhZ2UsIG9mZnNldCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgbWluKGJ5dGVzLCAoc2l6ZV90KVBBR0VfU0laRSAtIG9mZnNldCksIGksIHRydWUp Owo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJlcyArPSBuOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGJ5dGVz IC09IG47Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFieXRlcyB8fCAhbikKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIG9mZnNldCArPSBuOwo+ Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChvZmZzZXQgPT0gUEFHRV9TSVpFKSB7Cj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwYWdlKys7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvZmZz ZXQgPSAwOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+ICvCoMKgwqAgfQo+Pj4gK8KgwqDCoCBy ZXR1cm4gcmVzOwo+Pj4gK30KPj4+ICsjZW5kaWYKPj4+ICsKPj4+IMKgIHNpemVfdCBjb3B5X3Bh Z2VfZnJvbV9pdGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgCj4+ PiBieXRlcywKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGlvdl9pdGVy ICppKQo+Pj4gwqAgewo+Pj4gLS0gCj4+PiAyLjE4LjAuaHVhd2VpLjI1Cj4+Pgo+Pj4KPj4+IF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+PiBsaW51eC1h cm0ta2VybmVsIG1haWxpbmcgbGlzdAo+Pj4gbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl YWQub3JnCj4+PiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwKPj4gLgo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4gbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKPiBsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKPiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0 CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK