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 9C25DE6FE57 for ; Fri, 22 Sep 2023 15:31:42 +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:MIME-Version:References:In-Reply-To: Date:Cc:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=1kOseZGhOOFo0dy/DMNm0NjdOjAv6cfMZN3Emy0ZFaE=; b=b0MRGvPLjywzMf 6Gn89YpLylMZVNiLRoi+xu7ty9G1gWkjCUdbqczeijajiJZ4uFvreukswoxVZg0kV3ORoN24ktYd2 7NXXEJ3moEbIpZUEaRmitCPA3rE6n4bWdTf34Eb0KhsGWgu4dizijw3nuhfIPJ0ij3ZogK9p9+qbf trpl1d01k1e2lAEPzpa/jZwhvLdEqBwAKW9uLBMf24VHUwXJknZ0fCi1r9/DL5bnYyjI0BR0tWL3s Q/hJ7jYa9nRtYlMr04AyCzpmKxFMZYPyE+GB+INAdhej+Ug2o6PO2UtvLnLx70TBjIqNZ113BkL44 SpVpMM42gW8d1ZU9JqGQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qji85-009Jnv-22; Fri, 22 Sep 2023 15:31:41 +0000 Received: from s3.sipsolutions.net ([2a01:4f8:242:246e::2] helo=sipsolutions.net) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qji80-009JnM-1H for linux-um@lists.infradead.org; Fri, 22 Sep 2023 15:31:40 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sipsolutions.net; s=mail; h=MIME-Version:Content-Transfer-Encoding: Content-Type:References:In-Reply-To:Date:Cc:To:From:Subject:Message-ID:Sender :Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-To: Resent-Cc:Resent-Message-ID; bh=ek+BauJhB7yMGxkM4EagUpYTGxUs48EV5tt8GjVHLQI=; t=1695396693; x=1696606293; b=M50suVgKyA7CLGJaCClRaURHo+VpNFdBQI2J4EiCgiVA0eY FimuH3eBSWku9w3mBGWEK7sKhTmAgXZ7NtKWM1QtDYJMAIFMSXaUSH8pR1CSr1hInVsPiQVhefxuw s5Zx1k7gR1GaoZK6FeaU68BJTI9ZptuRwBETyG/9HDjWlZ9441eSeNd4mihJO4BjwdYAbsQfFxOtd Ry/d6mHnQ2ZGd1hcNbl4WHnf4l0iEfLXDlgzeoFyRUtubOrvK7fujadXId/u0E3x/c6gMKGHSSqiQ yLHMCVQNpTp41xnziggnkHa9GKN8O6ZFVvi7YTbao7ZAlZ/SVdUBtrIVu8IdlNGQ==; Received: by sipsolutions.net with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.96) (envelope-from ) id 1qji7r-00FT3R-3D; Fri, 22 Sep 2023 17:31:28 +0200 Message-ID: <20180327cdcdb91b37f4e1e83e30a6e8062415b1.camel@sipsolutions.net> Subject: Re: [PATCH] um: clean up mm creation From: Benjamin Berg To: Anton Ivanov , Johannes Berg , linux-um@lists.infradead.org Cc: Johannes Berg Date: Fri, 22 Sep 2023 17:31:25 +0200 In-Reply-To: <88e0568b-6860-9042-7f8b-ab53edb4242e@cambridgegreys.com> References: <20230922131638.2c57ec713d1c.Id11dff4b349e6a8f0136bb6bb09f6e01a80befbb@changeid> <88e0568b-6860-9042-7f8b-ab53edb4242e@cambridgegreys.com> User-Agent: Evolution 3.46.4 (3.46.4-1.fc37) MIME-Version: 1.0 X-malware-bazaar: not-scanned X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230922_083137_416637_3BCB6803 X-CRM114-Status: GOOD ( 45.05 ) X-BeenThere: linux-um@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-um" Errors-To: linux-um-bounces+linux-um=archiver.kernel.org@lists.infradead.org SGksCgpPbiBGcmksIDIwMjMtMDktMjIgYXQgMTQ6NDEgKzAxMDAsIEFudG9uIEl2YW5vdiB3cm90 ZToKPiAKPiBPbiAyMi8wOS8yMDIzIDEyOjE2LCBKb2hhbm5lcyBCZXJnIHdyb3RlOgo+ID4gRnJv bTogSm9oYW5uZXMgQmVyZyA8am9oYW5uZXMuYmVyZ0BpbnRlbC5jb20+Cj4gPiAKPiA+IFdoaWxl IGVuYWJsaW5nIFBSRUVNUFQgb24gVU1MLCB3ZSBmb3VuZCB0aGF0IHRoZSBjYWxsIHRvCj4gPiBm b3JjZV9mbHVzaF9hbGwoKSBjYW5ub3QgYmUgZG9uZSB3aGVyZSBpdCBpcywgaXQgc2xlZXBzCj4g PiB3aGlsZSBhdG9taWMuCj4gPiAKPiA+IEZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBzaG93cyB0aGF0 IGFsbCB0aGlzIHNlZW1zIGF0IGxlYXN0Cj4gPiBhIGJpdCByb3VuZGFib3V0IGFuZCBwb3NzaWJs eSB3cm9uZyB3cm9uZyBpbiB0aGUgZmlyc3QKPiA+IHBsYWNlIC0gd2UgY29weSBmcm9tIHRoZSAn Y3VycmVudCcgcHJvY2VzcyBhbmQgdGhlbiBmbHVzaAo+ID4gd2hlbiBpdCBzdGFydHMgcnVubmlu Zy4KPiA+IAo+ID4gV2hhdCB3ZSByZWFsbHkgd2FudCBpcyB0byBzdGFydCBmcmVzaCB3aXRoIGFu IGVtcHR5IG1tCj4gPiBwcm9jZXNzLCB0aGVuIGhhdmUgaXQgYWxsIHNldCB1cCBieSB0aGUga2Vy bmVsIChjb3B5aW5nCj4gPiB0aGUgb3JpZ2luYWwgbW0gY29udGVudHMgYXMgbmVlZGVkKSwgYW5k IHRoZW4gc3luYyBpdAo+ID4gaW4gYXJjaF9kdXBfbW1hcCgpLgo+IAo+IElzIHRoZXJlIGEgd2F5 IHdlIGNhbiBjb21lIHVwIHdpdGggQ09XIGhlcmU/CgpDT1cgZm9yIHdoYXQ/IEZsdXNoaW5nIHRo ZSBwYWdlIHRhYmxlcyBvbmNlIHNob3VsZG4ndCBiZSB0aGF0IGV4cGVuc2l2ZQooYW5kIHdlIGRv IGl0IGFscmVhZHkpLgoKPiA+IFdlIHNob3VsZCBkbyB0aGUgc2FtZSBmb3IgdGhlIExEVCwgc28g bmVlZCB0byBzcGxpdCB0aGF0Cj4gPiB0byBiZSBhYmxlIHRvIGRvIHRoaXMuCj4gPiAKPiA+IE5v dGUgdGhhdCB0aGlzIGZpeGVzIHdoYXQgc2VlbXMgbGlrZSBhbiBpc3N1ZSAtIHdlIGxvb2sKPiA+ IGF0IGN1cnJlbnQtPm1tIHdoZW4gd2UgY29weSwgYnV0IHRoYXQgZG9lc24ndCBzZWVtIHJpZ2h0 Cj4gPiBpbiB0aGUgY2FzZSBvZiBjbG9uZSgpIHdpdGhvdXQgY29weWluZyB0aGUgTU0uIFRoaXMg aXMKPiA+IHByb2JhYmx5IHNhdmVkIGJ5IHRoZSBmb3JjZWQgZmx1c2ggbGF0ZXIgcmlnaHQgbm93 Lgo+IAo+IFdlIHdpbGwgbmVlZCB0byB3b3JrIG9uIHRoaXMuCj4gCj4gSXQgaXMgbmVhcmx5IHR3 aWNlIHNsb3dlciB0aGFuIHRoZSBjdXJyZW50IGFwcHJvYWNoIG9uIGEgZmluZCAvdXNyIC0KPiB0 eXBlIGYgLWV4ZWMgY2F0IHt9ID4gL2Rldi9udWxsIFw7CgpIbW0sIG5vdyB0aGF0IGlzIGludGVy ZXN0aW5nLiBDb3VsZCBpdCBiZSB0aGF0IHdlIGluY29ycmVjdGx5IGF2b2lkCm1pbm9yIGZhdWx0 cyBpbiB0aGUgb2xkIGNvZGU/CgppLmUuIHNvbWV0aGluZyBsaWtlOgogKiBmb3JrKCkKICogbmV3 IE1NIGlzIGNyZWF0ZWQgKGNvcHlfY29udGV4dF9za2FzMCkKICogbmV3IHByb2Nlc3MgcnVuczoK ICAgLSBNTSBpcyBmbHVzaGVkIG91dAogICAtIGV4ZWN2ZSgpIGhhcHBlbnMgaW4gdXNlcnNwYWNl CiAqIG5ldyBNTSBmb3IgdGFzayBpcyBjcmVhdGVkIChjb3B5X2NvbnRleHRfc2thczApCiAqIFZN QXMgZm9yIGxpYnJhcmllcyBhcmUgY3JlYXRlZCwgYnV0IG5vdCBtYXliZSBub3QgdGhlIFRMQiBl bnRyaWVzCiAgIChpLmUuIGtlcm5lbCByZWxpZXMgb24gbWlub3IgZmF1bHRzIHRvIGRvIHRoYXQg bGF0ZXIpCiAqIHNvbWUgb2xkIChtb3N0bHkgcmVhZC1vbmx5KSBtYXBwaW5ncyByZW1haW4gdmlz aWJsZQogKiBuZXcgZXhlY3V0YWJsZSBydW5zOgogICAtIE1NIGlzIE5PVCBmbHVzaGVkCiAgIC0g Y29kZSBydW5zCgpJZiB0aGlzIGhhcHBlbnMsIHRoZW4gd2hhdCB5b3UgbWlnaHQgYmUgc2VlaW5n IGlzIHRoZSBtZW1vcnkgbGF5b3V0IG9mCnRoZSBuZXcgcHJvY2VzcyBiZWluZyB2ZXJ5IHNpbWls YXIgYW5kIHRoZSBwcm9jZXNzIG5vdCBoaXR0aW5nIG1pbm9yCmZhdWx0cyBiZWNhdXNlIGl0IG1h bmFnZXMgdG8gcmVhZCB0aGUgcGFyZW50cyBtZW1vcnkuCgpCZW5qYW1pbgoKCj4gPiAKPiA+IFNp Z25lZC1vZmYtYnk6IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzLmJlcmdAaW50ZWwuY29tPgo+ID4g LS0tCj4gPiDCoCBhcmNoL3VtL2luY2x1ZGUvYXNtL0tidWlsZMKgwqDCoMKgwqDCoMKgIHzCoMKg IDEgLQo+ID4gwqAgYXJjaC91bS9pbmNsdWRlL2FzbS9tbV9ob29rcy5owqDCoMKgIHzCoCAyMiAr KysrKysKPiA+IMKgIGFyY2gvdW0vaW5jbHVkZS9hc20vbW11LmjCoMKgwqDCoMKgwqDCoMKgIHzC oMKgIDMgKy0KPiA+IMKgIGFyY2gvdW0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCB8wqDCoCAy ICstCj4gPiDCoCBhcmNoL3VtL2luY2x1ZGUvc2hhcmVkL29zLmjCoMKgwqDCoMKgwqAgfMKgwqAg MSAtCj4gPiDCoCBhcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmPCoMKgwqDCoMKgwqDCoMKgwqAgfMKg wqAgMyAtCj4gPiDCoCBhcmNoL3VtL2tlcm5lbC9za2FzL21tdS5jwqDCoMKgwqDCoMKgwqDCoCB8 wqAgMzUgKysrKysrLS0tLQo+ID4gwqAgYXJjaC91bS9rZXJuZWwvdGxiLmPCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8wqDCoCA1ICstCj4gPiDCoCBhcmNoL3VtL29zLUxpbnV4L3NrYXMvcHJv Y2Vzcy5jwqDCoCB8IDEwNyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiAtLS0tLQo+ID4g wqAgYXJjaC94ODYvdW0vbGR0LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAg NTMgKysrKysrKy0tLS0tLS0tCj4gPiDCoCAxMCBmaWxlcyBjaGFuZ2VkLCA3NiBpbnNlcnRpb25z KCspLCAxNTYgZGVsZXRpb25zKC0pCj4gPiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC91bS9p bmNsdWRlL2FzbS9tbV9ob29rcy5oCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1 ZGUvYXNtL0tidWlsZAo+ID4gYi9hcmNoL3VtL2luY2x1ZGUvYXNtL0tidWlsZAo+ID4gaW5kZXgg YjJkODM0YTI5ZjNhLi5kZThkODJhNmZkN2IgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3VtL2luY2x1 ZGUvYXNtL0tidWlsZAo+ID4gKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9LYnVpbGQKPiA+IEBA IC0yNiw1ICsyNiw0IEBAIGdlbmVyaWMteSArPSBzd2l0Y2hfdG8uaAo+ID4gwqAgZ2VuZXJpYy15 ICs9IHRvcG9sb2d5LmgKPiA+IMKgIGdlbmVyaWMteSArPSB0cmFjZV9jbG9jay5oCj4gPiDCoCBn ZW5lcmljLXkgKz0ga3Byb2Jlcy5oCj4gPiAtZ2VuZXJpYy15ICs9IG1tX2hvb2tzLmgKPiA+IMKg IGdlbmVyaWMteSArPSB2Z2EuaAo+ID4gZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20v bW1faG9va3MuaAo+ID4gYi9hcmNoL3VtL2luY2x1ZGUvYXNtL21tX2hvb2tzLmgKPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmIxMDE2NTIwYzViOAo+ID4g LS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9tbV9ob29rcy5oCj4g PiBAQCAtMCwwICsxLDIyIEBACj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAgKi8KPiA+ICsjaWZuZGVmIF9BU01fVU1fTU1fSE9PS1NfSAo+ID4gKyNkZWZpbmUgX0FTTV9V TV9NTV9IT09LU19ICj4gPiArCj4gPiAraW50IGFyY2hfZHVwX21tYXAoc3RydWN0IG1tX3N0cnVj dCAqb2xkbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5l IHZvaWQgYXJjaF9leGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCj4gPiArewo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF91bm1hcChzdHJ1Y3QgbW1fc3RydWN0 ICptbSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCj4gPiArewo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF92bWFfYWNjZXNzX3Blcm1pdHRlZChzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QKPiA+ICp2bWEsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgYm9vbCB3cml0ZSwgYm9vbCBleGVjdXRlLCBib29sIGZvcmVpZ24pCj4gPiArewo+ID4g K8KgwqDCoMKgwqDCoMKgLyogYnkgZGVmYXVsdCwgYWxsb3cgZXZlcnl0aGluZyAqLwo+ID4gK8Kg wqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gPiArfQo+ID4gKyNlbmRpZsKgLyogX0FTTV9VTV9N TV9IT09LU19IICovCj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9tbXUuaCBi L2FyY2gvdW0vaW5jbHVkZS9hc20vbW11LmgKPiA+IGluZGV4IDViMDcyYWJhNWI2NS4uNjhhNzEw ZDIzYjVkIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9tbXUuaAo+ID4gKysr IGIvYXJjaC91bS9pbmNsdWRlL2FzbS9tbXUuaAo+ID4gQEAgLTE4LDcgKzE4LDggQEAgdHlwZWRl ZiBzdHJ1Y3QgbW1fY29udGV4dCB7Cj4gPiDCoCBleHRlcm4gdm9pZCBfX3N3aXRjaF9tbShzdHJ1 Y3QgbW1faWQgKiBtbV9pZHApOwo+ID4gwqAgCj4gPiDCoCAvKiBBdm9pZCB0YW5nbGVkIGluY2x1 c2lvbiB3aXRoIGFzbS9sZHQuaCAqLwo+ID4gLWV4dGVybiBsb25nIGluaXRfbmV3X2xkdChzdHJ1 Y3QgbW1fY29udGV4dCAqdG9fbW0sIHN0cnVjdAo+ID4gbW1fY29udGV4dCAqZnJvbV9tbSk7Cj4g PiArZXh0ZXJuIGludCBpbml0X25ld19sZHQoc3RydWN0IG1tX2NvbnRleHQgKnRvX21tKTsKPiA+ ICtleHRlcm4gaW50IGNvcHlfbGR0KHN0cnVjdCBtbV9jb250ZXh0ICp0b19tbSwgc3RydWN0IG1t X2NvbnRleHQKPiA+ICpmcm9tX21tKTsKPiA+IMKgIGV4dGVybiB2b2lkIGZyZWVfbGR0KHN0cnVj dCBtbV9jb250ZXh0ICptbSk7Cj4gPiDCoCAKPiA+IMKgICNlbmRpZgo+ID4gZGlmZiAtLWdpdCBh L2FyY2gvdW0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAo+ID4gYi9hcmNoL3VtL2luY2x1ZGUv YXNtL21tdV9jb250ZXh0LmgKPiA+IGluZGV4IDY4ZTJlYjljZmI0Ny4uODY2ODg2MWQ0YTg1IDEw MDY0NAo+ID4gLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCj4gPiArKysg Yi9hcmNoL3VtL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKPiA+IEBAIC0xMyw3ICsxMyw3IEBA Cj4gPiDCoCAjaW5jbHVkZSA8YXNtL21tX2hvb2tzLmg+Cj4gPiDCoCAjaW5jbHVkZSA8YXNtL21t dS5oPgo+ID4gwqAgCj4gPiAtZXh0ZXJuIHZvaWQgZm9yY2VfZmx1c2hfYWxsKHZvaWQpOwo+ID4g K3ZvaWQgZm9yY2VfZmx1c2hfYWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKPiA+IMKgIAo+ID4g wqAgI2RlZmluZSBhY3RpdmF0ZV9tbSBhY3RpdmF0ZV9tbQo+ID4gwqAgc3RhdGljIGlubGluZSB2 b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZCwgc3RydWN0Cj4gPiBtbV9zdHJ1 Y3QgKm5ldykKPiA+IGRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL29zLmgKPiA+ IGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9vcy5oCj4gPiBpbmRleCAxYTgyYzY1NDhkZDUuLmM5 YWNjMjhmZTQ3YyAxMDA2NDQKPiA+IC0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvb3MuaAo+ ID4gKysrIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9vcy5oCj4gPiBAQCAtMjg5LDcgKzI4OSw2 IEBAIGV4dGVybiBpbnQgcHJvdGVjdChzdHJ1Y3QgbW1faWQgKiBtbV9pZHAsCj4gPiB1bnNpZ25l ZCBsb25nIGFkZHIsCj4gPiDCoCAvKiBza2FzL3Byb2Nlc3MuYyAqLwo+ID4gwqAgZXh0ZXJuIGlu dCBpc19za2FzX3dpbmNoKGludCBwaWQsIGludCBmZCwgdm9pZCAqZGF0YSk7Cj4gPiDCoCBleHRl cm4gaW50IHN0YXJ0X3VzZXJzcGFjZSh1bnNpZ25lZCBsb25nIHN0dWJfc3RhY2spOwo+ID4gLWV4 dGVybiBpbnQgY29weV9jb250ZXh0X3NrYXMwKHVuc2lnbmVkIGxvbmcgc3RhY2ssIGludCBwaWQp Owo+ID4gwqAgZXh0ZXJuIHZvaWQgdXNlcnNwYWNlKHN0cnVjdCB1bWxfcHRfcmVncyAqcmVncywg dW5zaWduZWQgbG9uZwo+ID4gKmF1eF9mcF9yZWdzKTsKPiA+IMKgIGV4dGVybiB2b2lkIG5ld190 aHJlYWQodm9pZCAqc3RhY2ssIGptcF9idWYgKmJ1Ziwgdm9pZAo+ID4gKCpoYW5kbGVyKSh2b2lk KSk7Cj4gPiDCoCBleHRlcm4gdm9pZCBzd2l0Y2hfdGhyZWFkcyhqbXBfYnVmICptZSwgam1wX2J1 ZiAqeW91KTsKPiA+IGRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNo L3VtL2tlcm5lbC9wcm9jZXNzLmMKPiA+IGluZGV4IDZkYWZmYjlkOGE4ZC4uYTAyNGFjZDZkODVj IDEwMDY0NAo+ID4gLS0tIGEvYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jCj4gPiArKysgYi9hcmNo L3VtL2tlcm5lbC9wcm9jZXNzLmMKPiA+IEBAIC0yNSw3ICsyNSw2IEBACj4gPiDCoCAjaW5jbHVk ZSA8bGludXgvdGhyZWFkcy5oPgo+ID4gwqAgI2luY2x1ZGUgPGxpbnV4L3Jlc3VtZV91c2VyX21v ZGUuaD4KPiA+IMKgICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgo+ID4gLSNpbmNsdWRlIDxhc20v bW11X2NvbnRleHQuaD4KPiA+IMKgICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Cj4gPiDCoCAj aW5jbHVkZSA8YXMtbGF5b3V0Lmg+Cj4gPiDCoCAjaW5jbHVkZSA8a2Vybl91dGlsLmg+Cj4gPiBA QCAtMTM5LDggKzEzOCw2IEBAIHZvaWQgbmV3X3RocmVhZF9oYW5kbGVyKHZvaWQpCj4gPiDCoCAv KiBDYWxsZWQgbWFnaWNhbGx5LCBzZWUgbmV3X3RocmVhZF9oYW5kbGVyIGFib3ZlICovCj4gPiDC oCB2b2lkIGZvcmtfaGFuZGxlcih2b2lkKQo+ID4gwqAgewo+ID4gLcKgwqDCoMKgwqDCoMKgZm9y Y2VfZmx1c2hfYWxsKCk7Cj4gPiAtCj4gPiDCoMKgwqDCoMKgwqDCoMKgc2NoZWR1bGVfdGFpbChj dXJyZW50LT50aHJlYWQucHJldl9zY2hlZCk7Cj4gPiDCoCAKPiA+IMKgwqDCoMKgwqDCoMKgwqAv Kgo+ID4gZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvbW11LmMgYi9hcmNoL3VtL2tl cm5lbC9za2FzL21tdS5jCj4gPiBpbmRleCA2NTZmZTE2YzliNjMuLmFjNGNhMjAzYWMyNCAxMDA2 NDQKPiA+IC0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvbW11LmMKPiA+ICsrKyBiL2FyY2gvdW0v a2VybmVsL3NrYXMvbW11LmMKPiA+IEBAIC0xMCwxMyArMTAsMTMgQEAKPiA+IMKgIAo+ID4gwqAg I2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Cj4gPiDCoCAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+ Cj4gPiArI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgo+ID4gwqAgI2luY2x1ZGUgPGFzLWxh eW91dC5oPgo+ID4gwqAgI2luY2x1ZGUgPG9zLmg+Cj4gPiDCoCAjaW5jbHVkZSA8c2thcy5oPgo+ ID4gwqAgCj4gPiDCoCBpbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRh c2ssIHN0cnVjdCBtbV9zdHJ1Y3QKPiA+ICptbSkKPiA+IMKgIHsKPiA+IC3CoMKgwqDCoMKgwqDC oHN0cnVjdCBtbV9jb250ZXh0ICpmcm9tX21tID0gTlVMTDsKPiA+IMKgwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgbW1fY29udGV4dCAqdG9fbW0gPSAmbW0tPmNvbnRleHQ7Cj4gPiDCoMKgwqDCoMKgwqDC oMKgdW5zaWduZWQgbG9uZyBzdGFjayA9IDA7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgaW50IHJldCA9 IC1FTk9NRU07Cj4gPiBAQCAtMjYsMTQgKzI2LDEzIEBAIGludCBpbml0X25ld19jb250ZXh0KHN0 cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKPiA+IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ID4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiA+IMKgIAo+ID4gwqDCoMKg wqDCoMKgwqDCoHRvX21tLT5pZC5zdGFjayA9IHN0YWNrOwo+ID4gLcKgwqDCoMKgwqDCoMKgaWYg KGN1cnJlbnQtPm1tICE9IE5VTEwgJiYgY3VycmVudC0+bW0gIT0gJmluaXRfbW0pCj4gPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZnJvbV9tbSA9ICZjdXJyZW50LT5tbS0+Y29udGV4 dDsKPiA+IMKgIAo+ID4gK8KgwqDCoMKgwqDCoMKgLyoKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIEFs bG9jYXRlIGEgY29tcGxldGVseSBmcmVzaCBtbS4gV2UnbGwgc3luYyB0aGUgbWFwcGluZ3MKPiA+ IG9uY2UKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgaXMgZG9u ZSwgaW4gYXJjaF9jb3B5X21tKCkuCj4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+IMKgwqDCoMKg wqDCoMKgwqBibG9ja19zaWduYWxzX3RyYWNlKCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoZnJv bV9tbSkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0b19tbS0+aWQudS5waWQg PSBjb3B5X2NvbnRleHRfc2thczAoc3RhY2ssCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZyb21fbW0tCj4gPiA+aWQudS5waWQpOwo+ID4gLcKgwqDC oMKgwqDCoMKgZWxzZSB0b19tbS0+aWQudS5waWQgPSBzdGFydF91c2Vyc3BhY2Uoc3RhY2spOwo+ ID4gK8KgwqDCoMKgwqDCoMKgdG9fbW0tPmlkLnUucGlkID0gc3RhcnRfdXNlcnNwYWNlKHN0YWNr KTsKPiA+IMKgwqDCoMKgwqDCoMKgwqB1bmJsb2NrX3NpZ25hbHNfdHJhY2UoKTsKPiA+IMKgIAo+ ID4gwqDCoMKgwqDCoMKgwqDCoGlmICh0b19tbS0+aWQudS5waWQgPCAwKSB7Cj4gPiBAQCAtNDEs MTIgKzQwLDkgQEAgaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNr LAo+ID4gc3RydWN0IG1tX3N0cnVjdCAqbW0pCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGdvdG8gb3V0X2ZyZWU7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gwqAgCj4gPiAt wqDCoMKgwqDCoMKgwqByZXQgPSBpbml0X25ld19sZHQodG9fbW0sIGZyb21fbW0pOwo+ID4gLcKg wqDCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBwcmludGsoS0VSTl9FUlIgImluaXRfbmV3X2NvbnRleHRfc2thcyAtIGluaXRfbGR0Igo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiIGZhaWxlZCwg ZXJybm8gPSAlZFxuIiwgcmV0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGluaXRfbmV3X2xk dCh0b19tbSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dF9mcmVlOwo+ID4gLcKgwqDCoMKgwqDCoMKgfQo+ID4g wqAgCj4gPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiDCoCAKPiA+IEBAIC01Nyw2ICs1 MywyMSBAQCBpbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCj4g PiBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKPiA+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ ID4gwqAgfQo+ID4gwqAgCj4gPiAraW50IGFyY2hfZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAq b2xkbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoGlu dCByZXQgPSBjb3B5X2xkdCgmbW0tPmNvbnRleHQsICZvbGRtbS0+Y29udGV4dCk7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHByaW50ayhLRVJOX0VSUiAiJXMgLSBjb3B5X2xkdCBmYWlsZWQsIGVycm5vID0K PiA+ICVkXG4iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBfX2Z1bmNfXywgcmV0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gcmV0Owo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgZm9y Y2VfZmx1c2hfYWxsKG1tKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gK30KPiA+ ICsKPiA+ICsKPiA+IMKgIHZvaWQgZGVzdHJveV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1t KQo+ID4gwqAgewo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBtbV9jb250ZXh0ICptbXUgPSAm bW0tPmNvbnRleHQ7Cj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvdGxiLmMgYi9hcmNo L3VtL2tlcm5lbC90bGIuYwo+ID4gaW5kZXggMzRlYzhlNjc3ZmI5Li43YzAxNjEzMjFmZDkgMTAw NjQ0Cj4gPiAtLS0gYS9hcmNoL3VtL2tlcm5lbC90bGIuYwo+ID4gKysrIGIvYXJjaC91bS9rZXJu ZWwvdGxiLmMKPiA+IEBAIC02MDAsMTQgKzYwMCwxMSBAQCB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1 Y3QgbW1fc3RydWN0ICptbSkKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZml4 X3JhbmdlKG1tLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgMCk7Cj4gPiDCoCB9Cj4gPiDC oCAKPiA+IC12b2lkIGZvcmNlX2ZsdXNoX2FsbCh2b2lkKQo+ID4gK3ZvaWQgZm9yY2VfZmx1c2hf YWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ID4gwqAgewo+ID4gLcKgwqDCoMKgwqDCoMKgc3Ry dWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKPiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKPiA+IMKgwqDCoMKgwqDCoMKgwqBWTUFfSVRFUkFUT1Io dm1pLCBtbSwgMCk7Cj4gPiDCoCAKPiA+IC3CoMKgwqDCoMKgwqDCoG1tYXBfcmVhZF9sb2NrKG1t KTsKPiA+IMKgwqDCoMKgwqDCoMKgwqBmb3JfZWFjaF92bWEodm1pLCB2bWEpCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZpeF9yYW5nZShtbSwgdm1hLT52bV9zdGFydCwgdm1h LT52bV9lbmQsIDEpOwo+ID4gLcKgwqDCoMKgwqDCoMKgbW1hcF9yZWFkX3VubG9jayhtbSk7Cj4g PiDCoCB9Cj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9za2FzL3Byb2Nlc3MuYyBi L2FyY2gvdW0vb3MtCj4gPiBMaW51eC9za2FzL3Byb2Nlc3MuYwo+ID4gaW5kZXggZjkyMTI5YmJm OTgxLi40MDNmNGM2MDgyYjYgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3VtL29zLUxpbnV4L3NrYXMv cHJvY2Vzcy5jCj4gPiArKysgYi9hcmNoL3VtL29zLUxpbnV4L3NrYXMvcHJvY2Vzcy5jCj4gPiBA QCAtNTA4LDExMyArNTA4LDYgQEAgdm9pZCB1c2Vyc3BhY2Uoc3RydWN0IHVtbF9wdF9yZWdzICpy ZWdzLAo+ID4gdW5zaWduZWQgbG9uZyAqYXV4X2ZwX3JlZ3MpCj4gPiDCoMKgwqDCoMKgwqDCoMKg fQo+ID4gwqAgfQo+ID4gwqAgCj4gPiAtc3RhdGljIHVuc2lnbmVkIGxvbmcgdGhyZWFkX3JlZ3Nb TUFYX1JFR19OUl07Cj4gPiAtc3RhdGljIHVuc2lnbmVkIGxvbmcgdGhyZWFkX2ZwX3JlZ3NbRlBf U0laRV07Cj4gPiAtCj4gPiAtc3RhdGljIGludCBfX2luaXQgaW5pdF90aHJlYWRfcmVncyh2b2lk KQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoGdldF9zYWZlX3JlZ2lzdGVycyh0aHJlYWRfcmVn cywgdGhyZWFkX2ZwX3JlZ3MpOwo+ID4gLcKgwqDCoMKgwqDCoMKgLyogU2V0IHBhcmVudCdzIGlu c3RydWN0aW9uIHBvaW50ZXIgdG8gc3RhcnQgb2YgY2xvbmUtc3R1Ygo+ID4gKi8KPiA+IC3CoMKg wqDCoMKgwqDCoHRocmVhZF9yZWdzW1JFR1NfSVBfSU5ERVhdID0gU1RVQl9DT0RFICsKPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCh1bnNpZ25lZCBsb25nKSBzdHViX2Nsb25lX2hhbmRsZXIKPiA+IC0KPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCh1 bnNpZ25lZCBsb25nKQo+ID4gX19zeXNjYWxsX3N0dWJfc3RhcnQ7Cj4gPiAtwqDCoMKgwqDCoMKg wqB0aHJlYWRfcmVnc1tSRUdTX1NQX0lOREVYXSA9IFNUVUJfREFUQSArIFNUVUJfREFUQV9QQUdF UyAqCj4gPiBVTV9LRVJOX1BBR0VfU0laRSAtCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgc2l6ZW9mKHZvaWQgKik7Cj4gPiAtI2lmZGVmIF9fU0lHTkFMX0ZSQU1FU0laRQo+ID4g LcKgwqDCoMKgwqDCoMKgdGhyZWFkX3JlZ3NbUkVHU19TUF9JTkRFWF0gLT0gX19TSUdOQUxfRlJB TUVTSVpFOwo+ID4gLSNlbmRpZgo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiAtfQo+ ID4gLQo+ID4gLV9faW5pdGNhbGwoaW5pdF90aHJlYWRfcmVncyk7Cj4gPiAtCj4gPiAtaW50IGNv cHlfY29udGV4dF9za2FzMCh1bnNpZ25lZCBsb25nIG5ld19zdGFjaywgaW50IHBpZCkKPiA+IC17 Cj4gPiAtwqDCoMKgwqDCoMKgwqBpbnQgZXJyOwo+ID4gLcKgwqDCoMKgwqDCoMKgdW5zaWduZWQg bG9uZyBjdXJyZW50X3N0YWNrID0gY3VycmVudF9zdHViX3N0YWNrKCk7Cj4gPiAtwqDCoMKgwqDC oMKgwqBzdHJ1Y3Qgc3R1Yl9kYXRhICpkYXRhID0gKHN0cnVjdCBzdHViX2RhdGEgKikKPiA+IGN1 cnJlbnRfc3RhY2s7Cj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc3R1Yl9kYXRhICpjaGlsZF9k YXRhID0gKHN0cnVjdCBzdHViX2RhdGEgKikKPiA+IG5ld19zdGFjazsKPiA+IC3CoMKgwqDCoMKg wqDCoHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfb2Zmc2V0Owo+ID4gLcKgwqDCoMKgwqDCoMKgaW50 IG5ld19mZCA9IHBoeXNfbWFwcGluZyh1bWxfdG9fcGh5cygodm9pZCAqKW5ld19zdGFjayksCj4g PiAmbmV3X29mZnNldCk7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqAvKgo+ID4gLcKgwqDCoMKg wqDCoMKgICogcHJlcGFyZSBvZmZzZXQgYW5kIGZkIG9mIGNoaWxkJ3Mgc3RhY2sgYXMgYXJndW1l bnQgZm9yCj4gPiBwYXJlbnQncwo+ID4gLcKgwqDCoMKgwqDCoMKgICogYW5kIGNoaWxkJ3MgbW1h cDIgY2FsbHMKPiA+IC3CoMKgwqDCoMKgwqDCoCAqLwo+ID4gLcKgwqDCoMKgwqDCoMKgKmRhdGEg PSAoKHN0cnVjdCBzdHViX2RhdGEpIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAub2Zmc2V0wqA9IE1NQVBfT0ZGU0VUKG5ld19vZmZzZXQpLAo+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoC5mZMKgwqDCoMKgID0gbmV3X2ZkLAo+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoC5wYXJlbnRfZXJyID0gLUVTUkNILAo+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoC5jaGlsZF9lcnIgPSAwLAo+ID4gLcKgwqDCoMKgwqDCoMKgfSk7Cj4g PiAtCj4gPiAtwqDCoMKgwqDCoMKgwqAqY2hpbGRfZGF0YSA9ICgoc3RydWN0IHN0dWJfZGF0YSkg ewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5jaGlsZF9lcnIgPSAtRVNSQ0gs Cj4gPiAtwqDCoMKgwqDCoMKgwqB9KTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGVyciA9IHB0 cmFjZV9zZXRyZWdzKHBpZCwgdGhyZWFkX3JlZ3MpOwo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKGVy ciA8IDApIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSAtZXJybm87 Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJpbnRrKFVNX0tFUk5fRVJSICIl cyA6IFBUUkFDRV9TRVRSRUdTIGZhaWxlZCwgcGlkCj4gPiA9ICVkLCBlcnJubyA9ICVkXG4iLAo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIHBp ZCwgLWVycik7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGVycjsK PiA+IC3CoMKgwqDCoMKgwqDCoH0KPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGVyciA9IHB1dF9m cF9yZWdpc3RlcnMocGlkLCB0aHJlYWRfZnBfcmVncyk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAo ZXJyIDwgMCkgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByaW50ayhVTV9L RVJOX0VSUiAiJXMgOiBwdXRfZnBfcmVnaXN0ZXJzIGZhaWxlZCwKPiA+IHBpZCA9ICVkLCBlcnIg PSAlZFxuIiwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg X19mdW5jX18sIHBpZCwgZXJyKTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gZXJyOwo+ID4gLcKgwqDCoMKgwqDCoMKgfQo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKg LyoKPiA+IC3CoMKgwqDCoMKgwqDCoCAqIFdhaXQsIHVudGlsIHBhcmVudCBoYXMgZmluaXNoZWQg aXRzIHdvcms6IHJlYWQgY2hpbGQncwo+ID4gcGlkIGZyb20KPiA+IC3CoMKgwqDCoMKgwqDCoCAq IHBhcmVudCdzIHN0YWNrLCBhbmQgY2hlY2ssIGlmIGJhZCByZXN1bHQuCj4gPiAtwqDCoMKgwqDC oMKgwqAgKi8KPiA+IC3CoMKgwqDCoMKgwqDCoGVyciA9IHB0cmFjZShQVFJBQ0VfQ09OVCwgcGlk LCAwLCAwKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChlcnIpIHsKPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBlcnIgPSAtZXJybm87Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcHJpbnRrKFVNX0tFUk5fRVJSICJGYWlsZWQgdG8gY29udGludWUgbmV3IHByb2Nl c3MsCj4gPiBwaWQgPSAlZCwgZXJybm8gPSAlZFxuIiwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGlkLCBlcnJubyk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIGVycjsKPiA+IC3CoMKgwqDCoMKgwqDCoH0KPiA+IC0KPiA+ IC3CoMKgwqDCoMKgwqDCoHdhaXRfc3R1Yl9kb25lKHBpZCk7Cj4gPiAtCj4gPiAtwqDCoMKgwqDC oMKgwqBwaWQgPSBkYXRhLT5wYXJlbnRfZXJyOwo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKHBpZCA8 IDApIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcmludGsoVU1fS0VSTl9F UlIgIiVzIC0gc3R1Yi1wYXJlbnQgcmVwb3J0cyBlcnJvcgo+ID4gJWRcbiIsCj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgLXBpZCk7Cj4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHBpZDsKPiA+IC3CoMKgwqDCoMKg wqDCoH0KPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoC8qCj4gPiAtwqDCoMKgwqDCoMKgwqAgKiBX YWl0LCB1bnRpbCBjaGlsZCBoYXMgZmluaXNoZWQgdG9vOiByZWFkIGNoaWxkJ3MgcmVzdWx0Cj4g PiBmcm9tCj4gPiAtwqDCoMKgwqDCoMKgwqAgKiBjaGlsZCdzIHN0YWNrIGFuZCBjaGVjayBpdC4K PiA+IC3CoMKgwqDCoMKgwqDCoCAqLwo+ID4gLcKgwqDCoMKgwqDCoMKgd2FpdF9zdHViX2RvbmUo cGlkKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChjaGlsZF9kYXRhLT5jaGlsZF9lcnIgIT0gU1RV Ql9EQVRBKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJpbnRrKFVNX0tF Uk5fRVJSICIlcyAtIHN0dWItY2hpbGQgJWQgcmVwb3J0cwo+ID4gZXJyb3IgJWxkXG4iLAo+ID4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgcGlk LCBkYXRhLT5jaGlsZF9lcnIpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVy ciA9IGRhdGEtPmNoaWxkX2VycjsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBn b3RvIG91dF9raWxsOwo+ID4gLcKgwqDCoMKgwqDCoMKgfQo+ID4gLQo+ID4gLcKgwqDCoMKgwqDC oMKgaWYgKHB0cmFjZShQVFJBQ0VfT0xEU0VUT1BUSU9OUywgcGlkLCBOVUxMLAo+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHZvaWQgKilQVFJBQ0VfT19UUkFDRVNZU0dP T0QpIDwgMCkgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IC1lcnJu bzsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcmludGsoVU1fS0VSTl9FUlIg IiVzIDogUFRSQUNFX09MRFNFVE9QVElPTlMKPiA+IGZhaWxlZCwgZXJybm8gPSAlZFxuIiwKPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIGVy cm5vKTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dF9raWxsOwo+ ID4gLcKgwqDCoMKgwqDCoMKgfQo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIHBpZDsK PiA+IC0KPiA+IC0gb3V0X2tpbGw6Cj4gPiAtwqDCoMKgwqDCoMKgwqBvc19raWxsX3B0cmFjZWRf cHJvY2VzcyhwaWQsIDEpOwo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIGVycjsKPiA+IC19Cj4g PiAtCj4gPiDCoCB2b2lkIG5ld190aHJlYWQodm9pZCAqc3RhY2ssIGptcF9idWYgKmJ1Ziwgdm9p ZCAoKmhhbmRsZXIpKHZvaWQpKQo+ID4gwqAgewo+ID4gwqDCoMKgwqDCoMKgwqDCoCgqYnVmKVsw XS5KQl9JUCA9ICh1bnNpZ25lZCBsb25nKSBoYW5kbGVyOwo+ID4gZGlmZiAtLWdpdCBhL2FyY2gv eDg2L3VtL2xkdC5jIGIvYXJjaC94ODYvdW0vbGR0LmMKPiA+IGluZGV4IDI1NWE0NGRkNDE1YS4u NjA5ZmVhZWZmMjNiIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC94ODYvdW0vbGR0LmMKPiA+ICsrKyBi L2FyY2gveDg2L3VtL2xkdC5jCj4gPiBAQCAtMjk3LDM2ICsyOTcsMzcgQEAgc3RhdGljIHZvaWQg bGR0X2dldF9ob3N0X2luZm8odm9pZCkKPiA+IMKgwqDCoMKgwqDCoMKgwqBmcmVlX3BhZ2VzKCh1 bnNpZ25lZCBsb25nKWxkdCwgb3JkZXIpOwo+ID4gwqAgfQo+ID4gwqAgCj4gPiAtbG9uZyBpbml0 X25ld19sZHQoc3RydWN0IG1tX2NvbnRleHQgKm5ld19tbSwgc3RydWN0IG1tX2NvbnRleHQKPiA+ ICpmcm9tX21tKQo+ID4gK2ludCBpbml0X25ld19sZHQoc3RydWN0IG1tX2NvbnRleHQgKm5ld19t bSkKPiA+IMKgIHsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB1c2VyX2Rlc2MgZGVzYzsKPiA+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB1c2VyX2Rlc2MgZGVzYyA9IHt9Owo+ID4gwqDCoMKgwqDC oMKgwqDCoHNob3J0ICogbnVtX3A7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpbnQgaTsKPiA+IC3CoMKg wqDCoMKgwqDCoGxvbmcgcGFnZSwgZXJyPTA7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgZXJyID0g MDsKPiA+IMKgwqDCoMKgwqDCoMKgwqB2b2lkICphZGRyID0gTlVMTDsKPiA+IMKgIAo+ID4gLQo+ ID4gwqDCoMKgwqDCoMKgwqDCoG11dGV4X2luaXQoJm5ld19tbS0+YXJjaC5sZHQubG9jayk7Cj4g PiDCoCAKPiA+IC3CoMKgwqDCoMKgwqDCoGlmICghZnJvbV9tbSkgewo+ID4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoG1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAqIE5vdyB3ZSB0cnkgdG8gcmV0cmlldmUgaW5mbyBhYm91dCB0aGUgbGR0LCB3 ZQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGluaGVyaXRlZCBmcm9tIHRo ZSBob3N0LiBBbGwgbGR0LWVudHJpZXMgZm91bmQKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKiB3aWxsIGJlIHJlc2V0IGluIHRoZSBmb2xsb3dpbmcgbG9vcAo+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGxkdF9nZXRfaG9zdF9pbmZvKCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZm9yIChudW1fcD1ob3N0X2xkdF9lbnRyaWVzOyAqbnVtX3AgIT0gLTE7IG51bV9wKysp Cj4gPiB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGRlc2MuZW50cnlfbnVtYmVyID0gKm51bV9wOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSB3cml0ZV9sZHRfZW50cnkoJm5ld19tbS0+aWQs IDEsCj4gPiAmZGVzYywKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZhZGRy LCAqKG51bV9wICsgMSkKPiA+ID09IC0xKTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGVycikKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBuZXdfbW0tPmFyY2gubGR0LmVudHJ5X2NvdW50ID0gMDsKPiA+IC0KPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiA+ICvCoMKgwqDCoMKgwqDCoG1lbXNl dCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qCj4gPiArwqDC oMKgwqDCoMKgwqAgKiBOb3cgd2UgdHJ5IHRvIHJldHJpZXZlIGluZm8gYWJvdXQgdGhlIGxkdCwg d2UKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIGluaGVyaXRlZCBmcm9tIHRoZSBob3N0LiBBbGwgbGR0 LWVudHJpZXMgZm91bmQKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIHdpbGwgYmUgcmVzZXQgaW4gdGhl IGZvbGxvd2luZyBsb29wCj4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ICvCoMKgwqDCoMKgwqDC oGxkdF9nZXRfaG9zdF9pbmZvKCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBmb3IgKG51bV9wPWhvc3Rf bGR0X2VudHJpZXM7ICpudW1fcCAhPSAtMTsgbnVtX3ArKykgewo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRlc2MuZW50cnlfbnVtYmVyID0gKm51bV9wOwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IHdyaXRlX2xkdF9lbnRyeSgmbmV3X21tLT5pZCwg MSwgJmRlc2MsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZhZGRyLCAqKG51bV9wICsgMSkgPT0gLTEp Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChlcnIpCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4gwqDCoMKg wqDCoMKgwqDCoH0KPiA+ICvCoMKgwqDCoMKgwqDCoG5ld19tbS0+YXJjaC5sZHQuZW50cnlfY291 bnQgPSAwOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGVycjsKPiA+ICt9Cj4gPiAr Cj4gPiAraW50IGNvcHlfbGR0KHN0cnVjdCBtbV9jb250ZXh0ICpuZXdfbW0sIHN0cnVjdCBtbV9j b250ZXh0Cj4gPiAqZnJvbV9tbSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgZXJyID0g MDsKPiA+IMKgIAo+ID4gwqDCoMKgwqDCoMKgwqDCoC8qCj4gPiDCoMKgwqDCoMKgwqDCoMKgICog T3VyIGxvY2FsIExEVCBpcyB1c2VkIHRvIHN1cHBseSB0aGUgZGF0YSBmb3IKPiA+IEBAIC0zMzks NyArMzQwLDkgQEAgbG9uZyBpbml0X25ld19sZHQoc3RydWN0IG1tX2NvbnRleHQgKm5ld19tbSwK PiA+IHN0cnVjdCBtbV9jb250ZXh0ICpmcm9tX21tKQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBtZW1jcHkobmV3X21tLT5hcmNoLmxkdC51LmVudHJpZXMsIGZyb21fbW0tCj4g PiA+YXJjaC5sZHQudS5lbnRyaWVzLAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc2l6ZW9mKG5ld19tbS0+YXJjaC5sZHQudS5lbnRyaWVzKSk7Cj4gPiDC oMKgwqDCoMKgwqDCoMKgZWxzZSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aSA9IGZyb21fbW0tPmFyY2gubGR0LmVudHJ5X2NvdW50IC8KPiA+IExEVF9FTlRSSUVTX1BFUl9Q QUdFOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBpID0gZnJvbV9tbS0+ YXJjaC5sZHQuZW50cnlfY291bnQgLwo+ID4gTERUX0VOVFJJRVNfUEVSX1BBR0U7Cj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyBwYWdlOwo+ID4gKwo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3aGlsZSAoaS0tPjApIHsKPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhZ2UgPQo+ID4gX19n ZXRfZnJlZV9wYWdlKEdGUF9LRVJORUx8X19HRlBfWkVSTyk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXBhZ2UpIHsKPiA+IEBAIC0zNTUs MTEgKzM1OCw5IEBAIGxvbmcgaW5pdF9uZXdfbGR0KHN0cnVjdCBtbV9jb250ZXh0ICpuZXdfbW0s Cj4gPiBzdHJ1Y3QgbW1fY29udGV4dCAqZnJvbV9tbSkKPiA+IMKgwqDCoMKgwqDCoMKgwqBuZXdf bW0tPmFyY2gubGR0LmVudHJ5X2NvdW50ID0gZnJvbV9tbS0KPiA+ID5hcmNoLmxkdC5lbnRyeV9j b3VudDsKPiA+IMKgwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmZyb21fbW0tPmFyY2gubGR0 LmxvY2spOwo+ID4gwqAgCj4gPiAtwqDCoMKgIG91dDoKPiA+IMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gZXJyOwo+ID4gwqAgfQo+ID4gwqAgCj4gPiAtCj4gPiDCoCB2b2lkIGZyZWVfbGR0KHN0cnVj dCBtbV9jb250ZXh0ICptbSkKPiA+IMKgIHsKPiA+IMKgwqDCoMKgwqDCoMKgwqBpbnQgaTsKPiAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXVt IG1haWxpbmcgbGlzdApsaW51eC11bUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtdW0K