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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9AE5BC433F5 for ; Thu, 14 Apr 2022 11:00:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242516AbiDNLCe (ORCPT ); Thu, 14 Apr 2022 07:02:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34714 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242508AbiDNLCd (ORCPT ); Thu, 14 Apr 2022 07:02:33 -0400 Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 91C0F21E11 for ; Thu, 14 Apr 2022 04:00:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1649934003; bh=edo4rfp75pAxfe/UZGwkmM1i6y/9HKXMIURSs4ZnWcw=; h=X-UI-Sender-Class:Date:To:References:From:Subject:In-Reply-To; b=P6+OwQwnu1EEb4lX9GAOPRRyRID3tsLMpru1BcN3AOlDdXZdc6wYmsmNlTxenjPKo stmYhoxjzHEltKJUXzG/ZonHPeSoY04+ZY9vURnSZBfDIpMu9Qzbqz+CTxlmkE0Dm1 UTybhGtqcDCgQfhn1K/O0ZpDywj54dDeXDstLjVo= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [0.0.0.0] ([149.28.201.231]) by mail.gmx.net (mrgmx104 [212.227.17.174]) with ESMTPSA (Nemesis) id 1MBDj4-1noFnY0klK-00CeX9; Thu, 14 Apr 2022 13:00:03 +0200 Message-ID: Date: Thu, 14 Apr 2022 18:59:58 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.0 Content-Language: en-US To: dsterba@suse.cz, Qu Wenruo , linux-btrfs@vger.kernel.org References: <20220413191456.GN15609@twin.jikos.cz> <5b296828-65fb-b684-dedc-6f018e5ece4e@gmx.com> <5b190bf5-892c-0856-e623-f6f716985b28@gmx.com> From: Qu Wenruo Subject: Re: [PATCH v2 07/17] btrfs: make rbio_add_io_page() subpage compatible In-Reply-To: <5b190bf5-892c-0856-e623-f6f716985b28@gmx.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 X-Provags-ID: V03:K1:yEC5eR8CrKxNLJQgf3W6GwfLhSBOvhy4GmBcjBX8XkyTzGW+xbF rZe2iE0QuXhJcNo5F1XFGQx8OCSKhXXXXgRHzIJ2o4uF4gtoYFV8RxR2XofJuEZj8iE00Fg GICevC65T6auUhwqYls08c3oB1+qx0D5AEWvE3iu/zhnQednzFCBZQUBSRAbw8jT+QsTPsq Qb5CWiwvttnyJaGUpuvmQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:ZtRNJyn/Jj4=:O1TJtQVEBdJ3e2IWf6NieF uW/44r7ippGfe3yTxr4ZIzJ5tHcwo5TSqGFzA9dqq6JNo40iImyJAMGhdENH2v74LX4iA50v9 qqltLQt5SwNmDhcNFnyJO59LcsaE8hjBtkgwK3wSIluNM+yl+W/INyVm0k9Dp6h26RwX9ojY0 ipbpW/sc1hPhyeTGB+RETSmc1F6eRRqVGH3IEM/zv//Cx0NbrRlOcihWeZVN80zmJwZNbmAus CQ13Ltq3NgMvfuvFnwh0ttzZV70pd4+qH4YqOZWsW94ZksTE+ofhiD2FrIdKyeKphnYAZqu37 TjlA7bLKPH0xP/gp07dEWVwdCi6HtfBtl2H53lZvZHTHtWVdj1XebkWm+90X70ZXy9jxwbqoh Gu3ZH+gE3Iv0wkQe2q/GVKH0GzMY62KSEDRl4tX6Q8aNu2cmrpQ6OdQERUvTQVRjjuguq0M2W BuIbNsI/zIUkPKuM9MwWO/abH8faeWpFWk4fR9opVPiSPOsUJoFT0cqNkk2RnlPHCrxg3HD/i TThBicYKj2N6ZV8/THa8rUOpuOoPULlK3nQ2NVuq+rm+55j01AkWFa3G3iVpNMq4tGii9iWeU muiW5lA1F1uK1+LG215bLp8YYw1zlviWGpwSHcyLb+03na87kxEl8RJahRO7/SNacu1kt6mFg fesnAmX7m3LE7b+jvgohTxzK1A8nTrdvogI77q+rcSTxsFBA76zqjZ+aKKYzIi2T7XHR4nCU0 UzkqAzyjeIoFUBlH7/WETOyqyHb8GS1sctKr2o40NooEGqSlygOJJuU8m52yZ5mbdr5PDAot9 00zaTJlLGY/a4QdLEZu2uGETbRK867f2DUYR4Pv3Oa916ByGH/qvF0oDQQWe92EjbHQtirqQh zd/7bitEjhXwOm9oSPoaY3gJsr1pIXGbHmmlaKsLpTc/Pz8f+t8zoVBGERpF3XOA2yn7nQAzc GK3nrHflDTxAxoSXmKlFaZIQ0oqmM6N+mjkHsEqJfPPLqH7mQav419ac5dg2CJbpIdZS9EqdI hV53s0iXckbMGOypCNIhGaTkQurxJbGQtgClugfMCOBc4wOrTCn3WuqgR+GynSvVrR0zYT/rf qSYXIR3pKu5jsg= Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org DQoNCk9uIDIwMjIvNC8xNCAwODo0MywgUXUgV2VucnVvIHdyb3RlOg0KPiANCj4gDQo+IE9uIDIw MjIvNC8xNCAwNzoyOCwgUXUgV2VucnVvIHdyb3RlOg0KPj4NCj4+DQo+PiBPbiAyMDIyLzQvMTQg MDM6MTQsIERhdmlkIFN0ZXJiYSB3cm90ZToNCj4+PiBUaGVyZSdzIGFuIGFzc2VydGlvbiBmYWls dXJlIHJlcG9ydGVkIGJ5IGJ0cmZzLzAyMw0KPj4+DQo+Pj4gT24gVHVlLCBBcHIgMTIsIDIwMjIg YXQgMDU6MzI6NTdQTSArMDgwMCwgUXUgV2VucnVvIHdyb3RlOg0KPj4+PiArc3RhdGljIGludCBy YmlvX2FkZF9pb19zZWN0b3Ioc3RydWN0IGJ0cmZzX3JhaWRfYmlvICpyYmlvLA0KPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYmlvX2xpc3QgKmJpb19saXN0 LA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgc2VjdG9y X3B0ciAqc2VjdG9yLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 bnNpZ25lZCBpbnQgc3RyaXBlX25yLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB1bnNpZ25lZCBpbnQgc2VjdG9yX25yLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGJpb19tYXhfbGVuLCB1bnNpZ25lZCBpbnQg b3BmKQ0KPj4+PiDCoCB7DQo+Pj4+ICvCoMKgwqAgY29uc3QgdTMyIHNlY3RvcnNpemUgPSByYmlv LT5iaW9jLT5mc19pbmZvLT5zZWN0b3JzaXplOw0KPj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBiaW8g Kmxhc3QgPSBiaW9fbGlzdC0+dGFpbDsNCj4+Pj4gwqDCoMKgwqDCoCBpbnQgcmV0Ow0KPj4+PiDC oMKgwqDCoMKgIHN0cnVjdCBiaW8gKmJpbzsNCj4+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYnRyZnNf aW9fc3RyaXBlICpzdHJpcGU7DQo+Pj4+IMKgwqDCoMKgwqAgdTY0IGRpc2tfc3RhcnQ7DQo+Pj4+ DQo+Pj4+ICvCoMKgwqAgLyoNCj4+Pj4gK8KgwqDCoMKgICogTk9URTogaGVyZSBzdHJpcGVfbnIg aGFzIHRha2VuIGRldmljZSByZXBsYWNlIGludG8gDQo+Pj4+IGNvbnNpZGVyYXRpb24sDQo+Pj4+ ICvCoMKgwqDCoCAqIHRodXMgaXQgY2FuIGJlIGxhcmdlciB0aGFuIHJiaW8tPnJlYWxfc3RyaXBl Lg0KPj4+PiArwqDCoMKgwqAgKiBTbyBoZXJlIHdlIGNoZWNrIGFnYWluc3QgYmlvYy0+bnVtX3N0 cmlwZXMsIG5vdCANCj4+Pj4gcmJpby0+cmVhbF9zdHJpcGVzLg0KPj4+PiArwqDCoMKgwqAgKi8N Cj4+Pj4gK8KgwqDCoCBBU1NFUlQoc3RyaXBlX25yID49IDAgJiYgc3RyaXBlX25yIDwgcmJpby0+ YmlvYy0+bnVtX3N0cmlwZXMpOw0KPj4+PiArwqDCoMKgIEFTU0VSVChzZWN0b3JfbnIgPj0gMCAm JiBzZWN0b3JfbnIgPCByYmlvLT5zdHJpcGVfbnNlY3RvcnMpOw0KPj4+PiArwqDCoMKgIEFTU0VS VChzZWN0b3ItPnBhZ2UpOw0KPj4+DQo+Pj4gVGhpcyBvbmUgXl5eDQo+Pg0KPj4gRmFpbGVkIHRv IHJlcHJvZHVjZSBoZXJlLCBib3RoIHg4Nl82NCBhbmQgYWFyY2g2NCBzdXJ2aXZlZCBvdmVyIDY0 IGxvb3BzDQo+PiBvZiBidHJmcy8wMjMuDQo+Pg0KPj4gQWx0aG91Z2ggdGhhdCdzIHdpdGh5IG15 IGdpdGh1YiBicmFuY2guIExldCBtZSBjaGVjayB0aGUgY3VycmVudCBicmFuY2gNCj4+IHRvIHNl ZSB3aGF0J3Mgd3JvbmcuDQo+IA0KPiBJdCdzIGEgcmViYXNlIGVycm9yLg0KPiANCj4gQXQgbGVh c3Qgb25lIHBhdGNoIGhhcyBpbmNvcnJlY3QgZGlmZiBzbmlwcGV0Lg0KPiANCj4gRm9yIHRoZSBw YXRjaCAiYnRyZnM6IHJhaWQ1NjogaW50cm9kdWNlIGJ0cmZzX3JhaWRfYmlvOjpzdHJpcGVfc2Vj dG9ycyI6DQo+IA0KPiBGb3IgYWxsb2NfcmJpbygpLCBpbiBteSBicmFuY2ggYW5kIHBhdGNoICh2 Mikgc3VibWl0dGVkIHRvIHRoZSBtYWlsaW5nIA0KPiBsaXN0Og0KPiANCj4gQEAgLTk3OCw2ICsx MDE0LDcgQEAgc3RhdGljIHN0cnVjdCBidHJmc19yYWlkX2JpbyAqYWxsb2NfcmJpbyhzdHJ1Y3Qg DQo+IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sDQo+ICDCoMKgwqDCoMKgwqDCoCByYmlvID0ga3ph bGxvYyhzaXplb2YoKnJiaW8pICsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHNpemVvZigqcmJpby0+c3RyaXBlX3BhZ2VzKSAqIG51bV9wYWdlcyArDQo+ ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2YoKnJi aW8tPmJpb19wYWdlcykgKiBudW1fcGFnZXMgKw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZigqcmJpby0+c3RyaXBlX3NlY3RvcnMpICogbnVtX3Nl Y3RvcnMgKw0KDQpUaGUgbW9yZSBJIGNoZWNrIHRoaXMgcGFydCBvZiB0aGUgZXhpc3RpbmcgY29k ZSwgdGhlIHdvcnNlIGl0IGxvb2tzIHRvIG1lLg0KDQpXZSdyZSByZWFsbHkgZGFuY2luZyBvbiB0 aGUgZWRnZSwgaXQncyBqdXN0IGEgcHJvYmxlbSBvZiB0aW1lIGZvciB1cyB0byANCmdldCBhIGN1 dC4NCg0KU2hvdWxkbid0IHdlIGdvIHRoZSByZWd1bGFyIHdheSwga3phbGxvYyB0aGUgc3RydWN0 dXJlIG9ubHksIHRoZW4gYWxsb2MgDQpuZWVkZWQgcGFnZXMvYml0bWFwcz8NCg0KVGhhbmtzLA0K UXUNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVv ZigqcmJpby0+ZmluaXNoX3BvaW50ZXJzKSAqIHJlYWxfc3RyaXBlcyArDQo+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2YoKnJiaW8tPmRiaXRtYXAp ICogDQo+IEJJVFNfVE9fTE9OR1Moc3RyaXBlX25zZWN0b3JzKSArDQo+ICDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2YoKnJiaW8tPmZpbmlzaF9wYml0 bWFwKSAqDQo+IEBAIC0xMDE1LDYgKzEwNTIsNyBAQCBzdGF0aWMgc3RydWN0IGJ0cmZzX3JhaWRf YmlvICphbGxvY19yYmlvKHN0cnVjdCANCj4gYnRyZnNfZnNfaW5mbyAqZnNfaW5mbywNCj4gIMKg wqDCoMKgwqDCoMKgIH0gd2hpbGUgKDApDQo+ICDCoMKgwqDCoMKgwqDCoCBDT05TVU1FX0FMTE9D KHJiaW8tPnN0cmlwZV9wYWdlcywgbnVtX3BhZ2VzKTsNCj4gIMKgwqDCoMKgwqDCoMKgIENPTlNV TUVfQUxMT0MocmJpby0+YmlvX3BhZ2VzLCBudW1fcGFnZXMpOw0KPiArwqDCoMKgwqDCoMKgIENP TlNVTUVfQUxMT0MocmJpby0+c3RyaXBlX3NlY3RvcnMsIG51bV9zZWN0b3JzKTsNCj4gIMKgwqDC oMKgwqDCoMKgIENPTlNVTUVfQUxMT0MocmJpby0+ZmluaXNoX3BvaW50ZXJzLCByZWFsX3N0cmlw ZXMpOw0KPiAgwqDCoMKgwqDCoMKgwqAgQ09OU1VNRV9BTExPQyhyYmlvLT5kYml0bWFwLCBCSVRT X1RPX0xPTkdTKHN0cmlwZV9uc2VjdG9ycykpOw0KPiAgwqDCoMKgwqDCoMKgwqAgQ09OU1VNRV9B TExPQyhyYmlvLT5maW5pc2hfcGJpdG1hcCwgDQo+IEJJVFNfVE9fTE9OR1Moc3RyaXBlX25zZWN0 b3JzKSk7DQo+IA0KPiBJdCBoYXMgdGhlIGNvcnJlY3QgZXh0cmEgc3BhY2UgZm9yIHN0cmlwZV9z ZWN0b3JzLg0KPiANCj4gQnV0IGluIHRoZSBmb3ItbmV4dCBicmFuY2gsIGl0IGxvb2tzIGxpa2Ug dGhpczoNCj4gQEAgLTEwMTQsNiArMTA1MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnRyZnNfcmFpZF9i aW8gKmFsbG9jX3JiaW8oc3RydWN0IA0KPiBidHJmc19mc19pbmZvICpmc19pbmZvLA0KPiAgwqDC oMKgwqDCoMKgwqAgfSB3aGlsZSAoMCkNCj4gIMKgwqDCoMKgwqDCoMKgIENPTlNVTUVfQUxMT0Mo cmJpby0+c3RyaXBlX3BhZ2VzLCBudW1fcGFnZXMpOw0KPiAgwqDCoMKgwqDCoMKgwqAgQ09OU1VN RV9BTExPQyhyYmlvLT5iaW9fcGFnZXMsIG51bV9wYWdlcyk7DQo+ICvCoMKgwqDCoMKgwqAgQ09O U1VNRV9BTExPQyhyYmlvLT5zdHJpcGVfc2VjdG9ycywgbnVtX3NlY3RvcnMpOw0KPiAgwqDCoMKg wqDCoMKgwqAgQ09OU1VNRV9BTExPQyhyYmlvLT5maW5pc2hfcG9pbnRlcnMsIHJlYWxfc3RyaXBl cyk7DQo+ICDCoMKgwqDCoMKgwqDCoCBDT05TVU1FX0FMTE9DKHJiaW8tPmRiaXRtYXAsIEJJVFNf VE9fTE9OR1Moc3RyaXBlX25zZWN0b3JzKSk7DQo+ICDCoMKgwqDCoMKgwqDCoCBDT05TVU1FX0FM TE9DKHJiaW8tPmZpbmlzaF9wYml0bWFwLCANCj4gQklUU19UT19MT05HUyhzdHJpcGVfbnNlY3Rv cnMpKTsNCj4gDQo+IFdpdGhvdXQgdGhlIGV4dHJhIHNwYWNlIGFsbG9jYXRlZCBmb3Igc3RyaXBl X3NlY3RvcnMsIG5vIHdvbmRlciBpdCBjcmFzaGVzLg0KPiANCj4gTWluZCB0byBwcm92aWRlIGEg YnJhbmNoIGZvciBtZSB0byByZWJhc2UgbXkgcGF0Y2hzZSB1cG9uPw0KPiANCj4gVGhhbmtzLA0K PiBRdQ0KPiANCj4+DQo+PiBUaGFua3MsDQo+PiBRdQ0KPj4NCj4+Pg0KPj4+IFsgMjI4MC43MDU3 NjVdIGFzc2VydGlvbiBmYWlsZWQ6IHNlY3Rvci0+cGFnZSwgaW4gZnMvYnRyZnMvcmFpZDU2LmM6 MTE0NQ0KPj4+IFsgMjI4MC43MDc4NDRdIC0tLS0tLS0tLS0tLVsgY3V0IGhlcmUgXS0tLS0tLS0t LS0tLQ0KPj4+IFsgMjI4MC43MDk0MDFdIGtlcm5lbCBCVUcgYXQgZnMvYnRyZnMvY3RyZWUuaDoz NjE0IQ0KPj4+IFsgMjI4MC43MTEwODRdIGludmFsaWQgb3Bjb2RlOiAwMDAwIFsjMV0gUFJFRU1Q VCBTTVANCj4+PiBbIDIyODAuNzEyODIyXSBDUFU6IDMgUElEOiA0MDg0IENvbW06IGt3b3JrZXIv dTg6MiBOb3QgdGFpbnRlZCANCj4+PiA1LjE4LjAtcmMyLWRlZmF1bHQrICMxNjk3DQo+Pj4gWyAy MjgwLjcxNTY0OF0gSGFyZHdhcmUgbmFtZTogUUVNVSBTdGFuZGFyZCBQQyAoaTQ0MEZYICsgUElJ WCwgMTk5NiksIA0KPj4+IEJJT1MgcmVsLTEuMTQuMC0wLWcxNTU4MjFhLXJlYnVpbHQub3BlbnN1 c2Uub3JnIDA0LzAxLzIwMTQNCj4+PiBbIDIyODAuNzE5NjU2XSBXb3JrcXVldWU6IGJ0cmZzLXJt dyBidHJmc193b3JrX2hlbHBlciBbYnRyZnNdDQo+Pj4gWyAyMjgwLjcyMTc3NV0gUklQOiAwMDEw OmFzc2VydGZhaWwuY29uc3Rwcm9wLjArMHgxOC8weDFhIFtidHJmc10NCj4+PiBbIDIyODAuNzI5 NTc1XSBSU1A6IDAwMTg6ZmZmZmFkNmQwNzFhZmRhMCBFRkxBR1M6IDAwMDEwMjQ2DQo+Pj4gWyAy MjgwLjczMDg0NF0gUkFYOiAwMDAwMDAwMDAwMDAwMDM5IFJCWDogMDAwMDAwMDAwMDAwMDAwMCBS Q1g6IA0KPj4+IDAwMDAwMDAwMDAwMDAwMDANCj4+PiBbIDIyODAuNzMyNDQ5XSBSRFg6IDAwMDAw MDAwMDAwMDAwMDAgUlNJOiAwMDAwMDAwMDAwMDAwMDAzIFJESTogDQo+Pj4gMDAwMDAwMDBmZmZm ZmZmZg0KPj4+IFsgMjI4MC43MzM5OTJdIFJCUDogZmZmZjhlNTFkNTQ2NTAwMCBSMDg6IDAwMDAw MDAwMDAwMDAwMDMgUjA5OiANCj4+PiAwMDAwMDAwMDAwMDAwMDAyDQo+Pj4gWyAyMjgwLjczNTUz NV0gUjEwOiAwMDAwMDAwMDAwMDAwMDAwIFIxMTogMDAwMDAwMDAwMDAwMDAwMSBSMTI6IA0KPj4+ IDAwMDAwMDAwMDAwMDAwMDMNCj4+PiBbIDIyODAuNzM3MDkzXSBSMTM6IGZmZmY4ZTUxZDU0NjUw MDAgUjE0OiBmZmZmOGU1MWQ1NDY1ZDc4IFIxNTogDQo+Pj4gMDAwMDAwMDAwMDAwMTAwMA0KPj4+ IFsgMjI4MC43Mzg2MTNdIEZTOsKgIDAwMDAwMDAwMDAwMDAwMDAoMDAwMCkgR1M6ZmZmZjhlNTIz ZGMwMDAwMCgwMDAwKSANCj4+PiBrbmxHUzowMDAwMDAwMDAwMDAwMDAwDQo+Pj4gWyAyMjgwLjc0 MDM5Ml0gQ1M6wqAgMDAxMCBEUzogMDAwMCBFUzogMDAwMCBDUjA6IDAwMDAwMDAwODAwNTAwMzMN Cj4+PiBbIDIyODAuNzQxNzk0XSBDUjI6IDAwMDA1NWY0OGZlNTFhYjAgQ1IzOiAwMDAwMDAwMDFm ODA1MDAxIENSNDogDQo+Pj4gMDAwMDAwMDAwMDE3MGVhMA0KPj4+IFsgMjI4MC43NDM1MzJdIENh bGwgVHJhY2U6DQo+Pj4gWyAyMjgwLjc0NDEzNl3CoCA8VEFTSz4NCj4+PiBbIDIyODAuNzQ0NzAx XcKgIHJiaW9fYWRkX2lvX3NlY3Rvci5jb2xkKzB4MTEvMHgzMyBbYnRyZnNdDQo+Pj4gWyAyMjgw Ljc0NTg0Nl3CoCA/IF9yYXdfc3Bpbl91bmxvY2tfaXJxKzB4MmYvMHg1MA0KPj4+IFsgMjI4MC43 NDY3ODJdwqAgcmFpZDU2X3Jtd19zdHJpcGUuaXNyYS4wKzB4MTUzLzB4MzIwIFtidHJmc10NCj4+ PiBbIDIyODAuNzQ3OTY1XcKgIGJ0cmZzX3dvcmtfaGVscGVyKzB4ZDYvMHgxZDAgW2J0cmZzXQ0K Pj4+IFsgMjI4MC43NDkwMThdwqAgcHJvY2Vzc19vbmVfd29yaysweDI2NC8weDVmMA0KPj4+IFsg MjI4MC43NDk4MDZdwqAgd29ya2VyX3RocmVhZCsweDUyLzB4M2IwDQo+Pj4gWyAyMjgwLjc1MDUy M13CoCA/IHByb2Nlc3Nfb25lX3dvcmsrMHg1ZjAvMHg1ZjANCj4+PiBbIDIyODAuNzUxMzk1XcKg IGt0aHJlYWQrMHhlYS8weDExMA0KPj4+IFsgMjI4MC43NTIwOTddwqAgPyBrdGhyZWFkX2NvbXBs ZXRlX2FuZF9leGl0KzB4MjAvMHgyMA0KPj4+IFsgMjI4MC43NTMxMTJdwqAgcmV0X2Zyb21fZm9y aysweDFmLzB4MzANCj4+Pg0KPj4+DQo+Pj4+ICsNCj4+Pj4gK8KgwqDCoCAvKiBXZSBkb24ndCB5 ZXQgc3VwcG9ydCBzdWJwYWdlLCB0aHVzIHBnb2ZmIHNob3VsZCBhbHdheXMgYmUgMCAqLw0KPj4+ PiArwqDCoMKgIEFTU0VSVChzZWN0b3ItPnBnb2ZmID09IDApOw0KPj4+PiArDQo+Pj4+IMKgwqDC oMKgwqAgc3RyaXBlID0gJnJiaW8tPmJpb2MtPnN0cmlwZXNbc3RyaXBlX25yXTsNCj4+Pj4gLcKg wqDCoCBkaXNrX3N0YXJ0ID0gc3RyaXBlLT5waHlzaWNhbCArIChwYWdlX2luZGV4IDw8IFBBR0Vf U0hJRlQpOw0KPj4+PiArwqDCoMKgIGRpc2tfc3RhcnQgPSBzdHJpcGUtPnBoeXNpY2FsICsgc2Vj dG9yX25yICogc2VjdG9yc2l6ZTsNCj4+Pj4NCj4+Pj4gwqDCoMKgwqDCoCAvKiBpZiB0aGUgZGV2 aWNlIGlzIG1pc3NpbmcsIGp1c3QgZmFpbCB0aGlzIHN0cmlwZSAqLw0KPj4+PiDCoMKgwqDCoMKg IGlmICghc3RyaXBlLT5kZXYtPmJkZXYpDQo+Pj4+IEBAIC0xMTU2LDggKzEyMjYsOSBAQCBzdGF0 aWMgaW50IHJiaW9fYWRkX2lvX3BhZ2Uoc3RydWN0IA0KPj4+PiBidHJmc19yYWlkX2JpbyAqcmJp bywNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8NCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChsYXN0X2VuZCA9PSBkaXNrX3N0YXJ0ICYmICFsYXN0LT5iaV9zdGF0dXMgJiYNCj4+Pj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGFzdC0+YmlfYmRldiA9PSBzdHJpcGUtPmRldi0+ YmRldikgew0KPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBiaW9fYWRkX3BhZ2Uo bGFzdCwgcGFnZSwgUEFHRV9TSVpFLCAwKTsNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKHJldCA9PSBQQUdFX1NJWkUpDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9 IGJpb19hZGRfcGFnZShsYXN0LCBzZWN0b3ItPnBhZ2UsIHNlY3RvcnNpemUsDQo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWN0b3ItPnBnb2ZmKTsN Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA9PSBzZWN0b3JzaXplKQ0KPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAwOw0KPj4+PiDCoMKg wqDCoMKgwqDCoMKgwqAgfQ0KPj4+PiDCoMKgwqDCoMKgIH0NCj4+Pj4gQEAgLTExNjgsNyArMTIz OSw3IEBAIHN0YXRpYyBpbnQgcmJpb19hZGRfaW9fcGFnZShzdHJ1Y3QgDQo+Pj4+IGJ0cmZzX3Jh aWRfYmlvICpyYmlvLA0KPj4+PiDCoMKgwqDCoMKgIGJpby0+YmlfaXRlci5iaV9zZWN0b3IgPSBk aXNrX3N0YXJ0ID4+IDk7DQo+Pj4+IMKgwqDCoMKgwqAgYmlvLT5iaV9wcml2YXRlID0gcmJpbzsN Cj4+Pj4NCj4+Pj4gLcKgwqDCoCBiaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBQQUdFX1NJWkUsIDAp Ow0KPj4+PiArwqDCoMKgIGJpb19hZGRfcGFnZShiaW8sIHNlY3Rvci0+cGFnZSwgc2VjdG9yc2l6 ZSwgc2VjdG9yLT5wZ29mZik7DQo+Pj4+IMKgwqDCoMKgwqAgYmlvX2xpc3RfYWRkKGJpb19saXN0 LCBiaW8pOw0KPj4+PiDCoMKgwqDCoMKgIHJldHVybiAwOw0KPj4+PiDCoCB9DQo+Pj4+IEBAIC0x MjY1LDcgKzEzMzYsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBmaW5pc2hfcm13KHN0cnVjdCAN Cj4+Pj4gYnRyZnNfcmFpZF9iaW8gKnJiaW8pDQo+Pj4+IMKgwqDCoMKgwqAgdm9pZCAqKnBvaW50 ZXJzID0gcmJpby0+ZmluaXNoX3BvaW50ZXJzOw0KPj4+PiDCoMKgwqDCoMKgIGludCBucl9kYXRh ID0gcmJpby0+bnJfZGF0YTsNCj4+Pj4gwqDCoMKgwqDCoCBpbnQgc3RyaXBlOw0KPj4+PiAtwqDC oMKgIGludCBwYWdlbnI7DQo+Pj4+ICvCoMKgwqAgaW50IHNlY3Rvcm5yOw0KPj4+PiDCoMKgwqDC oMKgIGJvb2wgaGFzX3FzdHJpcGU7DQo+Pj4+IMKgwqDCoMKgwqAgc3RydWN0IGJpb19saXN0IGJp b19saXN0Ow0KPj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBiaW8gKmJpbzsNCj4+Pj4gQEAgLTEzMDks MTYgKzEzODAsMTYgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgZmluaXNoX3JtdyhzdHJ1Y3QgDQo+ Pj4+IGJ0cmZzX3JhaWRfYmlvICpyYmlvKQ0KPj4+PiDCoMKgwqDCoMKgIGVsc2UNCj4+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIGNsZWFyX2JpdChSQklPX0NBQ0hFX1JFQURZX0JJVCwgJnJiaW8tPmZs YWdzKTsNCj4+Pj4NCj4+Pj4gLcKgwqDCoCBmb3IgKHBhZ2VuciA9IDA7IHBhZ2VuciA8IHJiaW8t PnN0cmlwZV9ucGFnZXM7IHBhZ2VucisrKSB7DQo+Pj4+ICvCoMKgwqAgZm9yIChzZWN0b3JuciA9 IDA7IHNlY3Rvcm5yIDwgcmJpby0+c3RyaXBlX25zZWN0b3JzOyBzZWN0b3JucisrKSB7DQo+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGFnZSAqcDsNCj4+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIC8qIGZpcnN0IGNvbGxlY3Qgb25lIHBhZ2UgZnJvbSBlYWNoIGRhdGEgc3RyaXBlICovDQo+ Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKHN0cmlwZSA9IDA7IHN0cmlwZSA8IG5yX2RhdGE7 IHN0cmlwZSsrKSB7DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBwYWdlX2luX3Ji aW8ocmJpbywgc3RyaXBlLCBwYWdlbnIsIDApOw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBwID0gcGFnZV9pbl9yYmlvKHJiaW8sIHN0cmlwZSwgc2VjdG9ybnIsIDApOw0KPj4+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwb2ludGVyc1tzdHJpcGVdID0ga21hcF9sb2NhbF9wYWdl KHApOw0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPj4+Pg0KPj4+PiDCoMKgwqDCoMKgwqDC oMKgwqAgLyogdGhlbiBhZGQgdGhlIHBhcml0eSBzdHJpcGUgKi8NCj4+Pj4gLcKgwqDCoMKgwqDC oMKgIHAgPSByYmlvX3BzdHJpcGVfcGFnZShyYmlvLCBwYWdlbnIpOw0KPj4+PiArwqDCoMKgwqDC oMKgwqAgcCA9IHJiaW9fcHN0cmlwZV9wYWdlKHJiaW8sIHNlY3Rvcm5yKTsNCj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgIFNldFBhZ2VVcHRvZGF0ZShwKTsNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IHBvaW50ZXJzW3N0cmlwZSsrXSA9IGttYXBfbG9jYWxfcGFnZShwKTsNCj4+Pj4NCj4+Pj4gQEAg LTEzMjgsNyArMTM5OSw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGZpbmlzaF9ybXcoc3RydWN0 IA0KPj4+PiBidHJmc19yYWlkX2JpbyAqcmJpbykNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAqIHJhaWQ2LCBhZGQgdGhlIHFzdHJpcGUgYW5kIGNhbGwgdGhlDQo+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBsaWJyYXJ5IGZ1bmN0aW9uIHRvIGZpbGwgaW4gb3Vy IHAvcQ0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovDQo+Pj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHAgPSByYmlvX3FzdHJpcGVfcGFnZShyYmlvLCBwYWdlbnIpOw0KPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwID0gcmJpb19xc3RyaXBlX3BhZ2UocmJpbywgc2Vj dG9ybnIpOw0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTZXRQYWdlVXB0b2RhdGUo cCk7DQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBvaW50ZXJzW3N0cmlwZSsrXSA9 IGttYXBfbG9jYWxfcGFnZShwKTsNCj4+Pj4NCj4+Pj4gQEAgLTEzNDksMTkgKzE0MjAsMTkgQEAg c3RhdGljIG5vaW5saW5lIHZvaWQgZmluaXNoX3JtdyhzdHJ1Y3QgDQo+Pj4+IGJ0cmZzX3JhaWRf YmlvICpyYmlvKQ0KPj4+PiDCoMKgwqDCoMKgwqAgKiBldmVyeXRoaW5nIGVsc2UuDQo+Pj4+IMKg wqDCoMKgwqDCoCAqLw0KPj4+PiDCoMKgwqDCoMKgIGZvciAoc3RyaXBlID0gMDsgc3RyaXBlIDwg cmJpby0+cmVhbF9zdHJpcGVzOyBzdHJpcGUrKykgew0KPj4+PiAtwqDCoMKgwqDCoMKgwqAgZm9y IChwYWdlbnIgPSAwOyBwYWdlbnIgPCByYmlvLT5zdHJpcGVfbnBhZ2VzOyBwYWdlbnIrKykgew0K Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGFnZSAqcGFnZTsNCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIGZvciAoc2VjdG9ybnIgPSAwOyBzZWN0b3JuciA8IHJiaW8tPnN0cmlwZV9u c2VjdG9yczsgDQo+Pj4+IHNlY3Rvcm5yKyspIHsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IHNlY3Rvcl9wdHIgKnNlY3RvcjsNCj4+Pj4gKw0KPj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpZiAoc3RyaXBlIDwgcmJpby0+bnJfZGF0YSkgew0KPj4+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhZ2UgPSBwYWdlX2luX3JiaW8ocmJpbywgc3RyaXBl LCBwYWdlbnIsIDEpOw0KPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgh cGFnZSkNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWN0b3IgPSBzZWN0 b3JfaW5fcmJpbyhyYmlvLCBzdHJpcGUsIHNlY3Rvcm5yLCAxKTsNCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIXNlY3RvcikNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOw0KPj4+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB9IGVsc2Ugew0KPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHBhZ2UgPSByYmlvX3N0cmlwZV9wYWdlKHJiaW8sIHN0cmlwZSwgcGFnZW5yKTsNCj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWN0b3IgPSByYmlvX3N0cmlwZV9z ZWN0b3IocmJpbywgc3RyaXBlLCBzZWN0b3Jucik7DQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIH0NCj4+Pj4NCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gcmJpb19h ZGRfaW9fcGFnZShyYmlvLCAmYmlvX2xpc3QsDQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYWdlLCBzdHJpcGUsIHBhZ2VuciwgcmJpby0+c3RyaXBl X2xlbiwNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFJFUV9PUF9XUklURSk7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IHJiaW9f YWRkX2lvX3NlY3RvcihyYmlvLCAmYmlvX2xpc3QsIHNlY3Rvciwgc3RyaXBlLA0KPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlY3Rvcm5yLCBy YmlvLT5zdHJpcGVfbGVuLCBSRVFfT1BfV1JJVEUpOw0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAocmV0KQ0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGdvdG8gY2xlYW51cDsNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+Pj4gQEAgLTEzNzQs MjAgKzE0NDUsMjEgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgZmluaXNoX3JtdyhzdHJ1Y3QgDQo+ Pj4+IGJ0cmZzX3JhaWRfYmlvICpyYmlvKQ0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFi aW9jLT50Z3RkZXZfbWFwW3N0cmlwZV0pDQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNvbnRpbnVlOw0KPj4+Pg0KPj4+PiAtwqDCoMKgwqDCoMKgwqAgZm9yIChwYWdlbnIgPSAwOyBw YWdlbnIgPCByYmlvLT5zdHJpcGVfbnBhZ2VzOyBwYWdlbnIrKykgew0KPj4+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGFnZSAqcGFnZTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGZv ciAoc2VjdG9ybnIgPSAwOyBzZWN0b3JuciA8IHJiaW8tPnN0cmlwZV9uc2VjdG9yczsgDQo+Pj4+ IHNlY3Rvcm5yKyspIHsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHNlY3Rv cl9wdHIgKnNlY3RvcjsNCj4+Pj4gKw0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAoc3RyaXBlIDwgcmJpby0+bnJfZGF0YSkgew0KPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHBhZ2UgPSBwYWdlX2luX3JiaW8ocmJpbywgc3RyaXBlLCBwYWdlbnIsIDEpOw0K Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghcGFnZSkNCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWN0b3IgPSBzZWN0b3JfaW5fcmJpbyhyYmlv LCBzdHJpcGUsIHNlY3Rvcm5yLCAxKTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAoIXNlY3RvcikNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNvbnRpbnVlOw0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVs c2Ugew0KPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhZ2UgPSBy YmlvX3N0cmlwZV9wYWdlKHJiaW8sIHN0cmlwZSwgcGFnZW5yKTsNCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzZWN0b3IgPSByYmlvX3N0cmlwZV9zZWN0b3IocmJpbywgc3Ry aXBlLCBzZWN0b3Jucik7DQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+Pj4N Cj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gcmJpb19hZGRfaW9fcGFnZShyYmlv LCAmYmlvX2xpc3QsIHBhZ2UsDQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJiaW8tPmJpb2MtPnRndGRldl9tYXBbc3RyaXBlXSwNCj4+ Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cGFnZW5yLCByYmlvLT5zdHJpcGVfbGVuLA0KPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSRVFfT1BfV1JJVEUpOw0KPj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXQgPSByYmlvX2FkZF9pb19zZWN0b3IocmJpbywgJmJpb19saXN0 LCBzZWN0b3IsDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmJpby0+YmlvYy0+dGd0ZGV2X21hcFtzdHJpcGVdLA0KPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlY3Rvcm5yLCByYmlvLT5z dHJpcGVfbGVuLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIFJFUV9PUF9XUklURSk7DQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChyZXQpDQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBj bGVhbnVwOw0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPj4+PiBAQCAtMTU2Myw3ICsxNjM1 LDcgQEAgc3RhdGljIGludCByYWlkNTZfcm13X3N0cmlwZShzdHJ1Y3QgDQo+Pj4+IGJ0cmZzX3Jh aWRfYmlvICpyYmlvKQ0KPj4+PiDCoMKgwqDCoMKgIGludCBiaW9zX3RvX3JlYWQgPSAwOw0KPj4+ PiDCoMKgwqDCoMKgIHN0cnVjdCBiaW9fbGlzdCBiaW9fbGlzdDsNCj4+Pj4gwqDCoMKgwqDCoCBp bnQgcmV0Ow0KPj4+PiAtwqDCoMKgIGludCBwYWdlbnI7DQo+Pj4+ICvCoMKgwqAgaW50IHNlY3Rv cm5yOw0KPj4+PiDCoMKgwqDCoMKgIGludCBzdHJpcGU7DQo+Pj4+IMKgwqDCoMKgwqAgc3RydWN0 IGJpbyAqYmlvOw0KPj4+Pg0KPj4+PiBAQCAtMTU4MSwyOCArMTY1MywyOSBAQCBzdGF0aWMgaW50 IHJhaWQ1Nl9ybXdfc3RyaXBlKHN0cnVjdCANCj4+Pj4gYnRyZnNfcmFpZF9iaW8gKnJiaW8pDQo+ Pj4+IMKgwqDCoMKgwqDCoCAqIHN0cmlwZQ0KPj4+PiDCoMKgwqDCoMKgwqAgKi8NCj4+Pj4gwqDC oMKgwqDCoCBmb3IgKHN0cmlwZSA9IDA7IHN0cmlwZSA8IHJiaW8tPm5yX2RhdGE7IHN0cmlwZSsr KSB7DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoCBmb3IgKHBhZ2VuciA9IDA7IHBhZ2VuciA8IHJiaW8t PnN0cmlwZV9ucGFnZXM7IHBhZ2VucisrKSB7DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBwYWdlICpwYWdlOw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgZm9yIChzZWN0b3JuciA9 IDA7IHNlY3Rvcm5yIDwgcmJpby0+c3RyaXBlX25zZWN0b3JzOyANCj4+Pj4gc2VjdG9ybnIrKykg ew0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgc2VjdG9yX3B0ciAqc2VjdG9y Ow0KPj4+PiArDQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qDQo+Pj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKiB3ZSB3YW50IHRvIGZpbmQgYWxsIHRoZSBwYWdlcyBtaXNz aW5nIGZyb20NCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIFdlIHdhbnQgdG8gZmlu ZCBhbGwgdGhlIHNlY3RvcnMgbWlzc2luZyBmcm9tDQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKiB0aGUgcmJpbyBhbmQgcmVhZCB0aGVtIGZyb20gdGhlIGRpc2suwqAgSWYNCj4+ Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHBhZ2VfaW5fcmJpbyBmaW5kcyBhIHBhZ2Ug aW4gdGhlIGJpbyBsaXN0DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBzZWN0b3Jf aW5fcmJpbygpIGZpbmRzIGEgcGFnZSBpbiB0aGUgYmlvIGxpc3QNCj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqIHdlIGRvbid0IG5lZWQgdG8gcmVhZCBpdCBvZmYgdGhlIHN0cmlw ZS4NCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLw0KPj4+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBwYWdlID0gcGFnZV9pbl9yYmlvKHJiaW8sIHN0cmlwZSwgcGFnZW5yLCAx KTsNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHBhZ2UpDQo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNlY3RvciA9IHNlY3Rvcl9pbl9yYmlvKHJiaW8sIHN0cmlwZSwgc2Vj dG9ybnIsIDEpOw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoc2VjdG9yKQ0KPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOw0KPj4+Pg0KPj4+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYWdlID0gcmJpb19zdHJpcGVfcGFnZShyYmlvLCBz dHJpcGUsIHBhZ2Vucik7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlY3RvciA9IHJi aW9fc3RyaXBlX3NlY3RvcihyYmlvLCBzdHJpcGUsIHNlY3Rvcm5yKTsNCj4+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgLyoNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHRo ZSBiaW8gY2FjaGUgbWF5IGhhdmUgaGFuZGVkIHVzIGFuIHVwdG9kYXRlDQo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKiBUaGUgYmlvIGNhY2hlIG1heSBoYXZlIGhhbmRlZCB1cyBhbiB1 cHRvZGF0ZQ0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogcGFnZS7CoCBJZiBz bywgYmUgaGFwcHkgYW5kIHVzZSBpdA0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICovDQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChQYWdlVXB0b2RhdGUocGFnZSkp DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChzZWN0b3ItPnVwdG9kYXRlKQ0KPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOw0KPj4+Pg0KPj4+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSByYmlvX2FkZF9pb19wYWdlKHJiaW8sICZi aW9fbGlzdCwgcGFnZSwNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cmlwZSwgcGFnZW5yLCByYmlvLT5zdHJpcGVfbGVuLA0KPj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXQgPSByYmlvX2FkZF9pb19zZWN0b3IocmJpbywgJmJpb19saXN0 LCBzZWN0b3IsDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJpcGUsIHNlY3Rvcm5yLCByYmlvLT5zdHJpcGVfbGVuLA0KPj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUkVRX09QX1JFQUQpOw0KPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQ0KPj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gY2xlYW51cDsNCj4+Pj4gQEAgLTIxMDcsNyArMjE4 MCw3IEBAIHN0YXRpYyBpbnQgX19yYWlkNTZfcGFyaXR5X3JlY292ZXIoc3RydWN0IA0KPj4+PiBi dHJmc19yYWlkX2JpbyAqcmJpbykNCj4+Pj4gwqDCoMKgwqDCoCBpbnQgYmlvc190b19yZWFkID0g MDsNCj4+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYmlvX2xpc3QgYmlvX2xpc3Q7DQo+Pj4+IMKgwqDC oMKgwqAgaW50IHJldDsNCj4+Pj4gLcKgwqDCoCBpbnQgcGFnZW5yOw0KPj4+PiArwqDCoMKgIGlu dCBzZWN0b3JucjsNCj4+Pj4gwqDCoMKgwqDCoCBpbnQgc3RyaXBlOw0KPj4+PiDCoMKgwqDCoMKg IHN0cnVjdCBiaW8gKmJpbzsNCj4+Pj4NCj4+Pj4gQEAgLTIxMzAsMjEgKzIyMDMsMjAgQEAgc3Rh dGljIGludCBfX3JhaWQ1Nl9wYXJpdHlfcmVjb3ZlcihzdHJ1Y3QgDQo+Pj4+IGJ0cmZzX3JhaWRf YmlvICpyYmlvKQ0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsNCj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+Pj4NCj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGZvciAo cGFnZW5yID0gMDsgcGFnZW5yIDwgcmJpby0+c3RyaXBlX25wYWdlczsgcGFnZW5yKyspIHsNCj4+ Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHBhZ2UgKnA7DQo+Pj4+ICvCoMKgwqDC oMKgwqDCoCBmb3IgKHNlY3Rvcm5yID0gMDsgc2VjdG9ybnIgPCByYmlvLT5zdHJpcGVfbnNlY3Rv cnM7IA0KPj4+PiBzZWN0b3JucisrKSB7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cnVjdCBzZWN0b3JfcHRyICpzZWN0b3I7DQo+Pj4+DQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC8qDQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiB0aGUgcm13IGNv ZGUgbWF5IGhhdmUgYWxyZWFkeSByZWFkIHRoaXMNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAqIHBhZ2UgaW4NCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLw0K Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwID0gcmJpb19zdHJpcGVfcGFnZShyYmlvLCBz dHJpcGUsIHBhZ2Vucik7DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChQYWdlVXB0 b2RhdGUocCkpDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlY3RvciA9IHJiaW9fc3Ry aXBlX3NlY3RvcihyYmlvLCBzdHJpcGUsIHNlY3Rvcm5yKTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKHNlY3Rvci0+dXB0b2RhdGUpDQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgY29udGludWU7DQo+Pj4+DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldCA9IHJiaW9fYWRkX2lvX3BhZ2UocmJpbywgJmJpb19saXN0LA0KPj4+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmJpb19zdHJpcGVfcGFnZShy YmlvLCBzdHJpcGUsIHBhZ2VuciksDQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJpcGUsIHBhZ2VuciwgcmJpby0+c3RyaXBlX2xlbiwNCj4+Pj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJFUV9PUF9SRUFE KTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gcmJpb19hZGRfaW9fc2VjdG9y KHJiaW8sICZiaW9fbGlzdCwgc2VjdG9yLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cmlwZSwgc2VjdG9ybnIsDQo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmJpby0+c3RyaXBlX2xl biwgUkVRX09QX1JFQUQpOw0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocmV0 IDwgMCkNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGNsZWFu dXA7DQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9DQo+Pj4+IEBAIC0yMzk5LDcgKzI0NzEsNyBA QCBzdGF0aWMgbm9pbmxpbmUgdm9pZCANCj4+Pj4gZmluaXNoX3Bhcml0eV9zY3J1YihzdHJ1Y3Qg YnRyZnNfcmFpZF9iaW8gKnJiaW8sDQo+Pj4+IMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyAqcGJp dG1hcCA9IHJiaW8tPmZpbmlzaF9wYml0bWFwOw0KPj4+PiDCoMKgwqDCoMKgIGludCBucl9kYXRh ID0gcmJpby0+bnJfZGF0YTsNCj4+Pj4gwqDCoMKgwqDCoCBpbnQgc3RyaXBlOw0KPj4+PiAtwqDC oMKgIGludCBwYWdlbnI7DQo+Pj4+ICvCoMKgwqAgaW50IHNlY3Rvcm5yOw0KPj4+PiDCoMKgwqDC oMKgIGJvb2wgaGFzX3FzdHJpcGU7DQo+Pj4+IMKgwqDCoMKgwqAgc3RydWN0IHBhZ2UgKnBfcGFn ZSA9IE5VTEw7DQo+Pj4+IMKgwqDCoMKgwqAgc3RydWN0IHBhZ2UgKnFfcGFnZSA9IE5VTEw7DQo+ Pj4+IEBAIC0yNDE5LDcgKzI0OTEsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCANCj4+Pj4gZmlu aXNoX3Bhcml0eV9zY3J1YihzdHJ1Y3QgYnRyZnNfcmFpZF9iaW8gKnJiaW8sDQo+Pj4+DQo+Pj4+ IMKgwqDCoMKgwqAgaWYgKGJpb2MtPm51bV90Z3RkZXZzICYmIGJpb2MtPnRndGRldl9tYXBbcmJp by0+c2NydWJwXSkgew0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaXNfcmVwbGFjZSA9IDE7DQo+ Pj4+IC3CoMKgwqDCoMKgwqDCoCBiaXRtYXBfY29weShwYml0bWFwLCByYmlvLT5kYml0bWFwLCBy YmlvLT5zdHJpcGVfbnBhZ2VzKTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGJpdG1hcF9jb3B5KHBi aXRtYXAsIHJiaW8tPmRiaXRtYXAsIHJiaW8tPnN0cmlwZV9uc2VjdG9ycyk7DQo+Pj4+IMKgwqDC oMKgwqAgfQ0KPj4+Pg0KPj4+PiDCoMKgwqDCoMKgIC8qDQo+Pj4+IEBAIC0yNDUzLDEyICsyNTI1 LDEyIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIA0KPj4+PiBmaW5pc2hfcGFyaXR5X3NjcnViKHN0 cnVjdCBidHJmc19yYWlkX2JpbyAqcmJpbywNCj4+Pj4gwqDCoMKgwqDCoCAvKiBNYXAgdGhlIHBh cml0eSBzdHJpcGUganVzdCBvbmNlICovDQo+Pj4+IMKgwqDCoMKgwqAgcG9pbnRlcnNbbnJfZGF0 YV0gPSBrbWFwX2xvY2FsX3BhZ2UocF9wYWdlKTsNCj4+Pj4NCj4+Pj4gLcKgwqDCoCBmb3JfZWFj aF9zZXRfYml0KHBhZ2VuciwgcmJpby0+ZGJpdG1hcCwgcmJpby0+c3RyaXBlX25wYWdlcykgew0K Pj4+PiArwqDCoMKgIGZvcl9lYWNoX3NldF9iaXQoc2VjdG9ybnIsIHJiaW8tPmRiaXRtYXAsIHJi aW8tPnN0cmlwZV9uc2VjdG9ycykgew0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHBh Z2UgKnA7DQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB2b2lkICpwYXJpdHk7DQo+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoCAvKiBmaXJzdCBjb2xsZWN0IG9uZSBwYWdlIGZyb20gZWFjaCBkYXRhIHN0 cmlwZSAqLw0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChzdHJpcGUgPSAwOyBzdHJpcGUg PCBucl9kYXRhOyBzdHJpcGUrKykgew0KPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwID0g cGFnZV9pbl9yYmlvKHJiaW8sIHN0cmlwZSwgcGFnZW5yLCAwKTsNCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcCA9IHBhZ2VfaW5fcmJpbyhyYmlvLCBzdHJpcGUsIHNlY3Rvcm5yLCAwKTsN Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcG9pbnRlcnNbc3RyaXBlXSA9IGttYXBf bG9jYWxfcGFnZShwKTsNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+Pj4NCj4+Pj4gQEAg LTI0NzMsMTMgKzI1NDUsMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgDQo+Pj4+IGZpbmlzaF9w YXJpdHlfc2NydWIoc3RydWN0IGJ0cmZzX3JhaWRfYmlvICpyYmlvLA0KPj4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgfQ0KPj4+Pg0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgLyogQ2hlY2sgc2NydWJi aW5nIHBhcml0eSBhbmQgcmVwYWlyIGl0ICovDQo+Pj4+IC3CoMKgwqDCoMKgwqDCoCBwID0gcmJp b19zdHJpcGVfcGFnZShyYmlvLCByYmlvLT5zY3J1YnAsIHBhZ2Vucik7DQo+Pj4+ICvCoMKgwqDC oMKgwqDCoCBwID0gcmJpb19zdHJpcGVfcGFnZShyYmlvLCByYmlvLT5zY3J1YnAsIHNlY3Rvcm5y KTsNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHBhcml0eSA9IGttYXBfbG9jYWxfcGFnZShwKTsN Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChtZW1jbXAocGFyaXR5LCBwb2ludGVyc1tyYmlv LT5zY3J1YnBdLCBQQUdFX1NJWkUpKQ0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj b3B5X3BhZ2UocGFyaXR5LCBwb2ludGVyc1tyYmlvLT5zY3J1YnBdKTsNCj4+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgIGVsc2UNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogUGFyaXR5 IGlzIHJpZ2h0LCBuZWVkbid0IHdyaXRlYmFjayAqLw0KPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBiaXRtYXBfY2xlYXIocmJpby0+ZGJpdG1hcCwgcGFnZW5yLCAxKTsNCj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYml0bWFwX2NsZWFyKHJiaW8tPmRiaXRtYXAsIHNlY3Rvcm5yLCAx KTsNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGt1bm1hcF9sb2NhbChwYXJpdHkpOw0KPj4+Pg0K Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChzdHJpcGUgPSBucl9kYXRhIC0gMTsgc3RyaXBl ID49IDA7IHN0cmlwZS0tKQ0KPj4+PiBAQCAtMjQ5OSwxMiArMjU3MSwxMyBAQCBzdGF0aWMgbm9p bmxpbmUgdm9pZCANCj4+Pj4gZmluaXNoX3Bhcml0eV9zY3J1YihzdHJ1Y3QgYnRyZnNfcmFpZF9i aW8gKnJiaW8sDQo+Pj4+IMKgwqDCoMKgwqDCoCAqIGhpZ2hlciBsYXllcnMgKHRoZSBiaW9fbGlz dCBpbiBvdXIgcmJpbykgYW5kIG91ciBwL3EuwqAgSWdub3JlDQo+Pj4+IMKgwqDCoMKgwqDCoCAq IGV2ZXJ5dGhpbmcgZWxzZS4NCj4+Pj4gwqDCoMKgwqDCoMKgICovDQo+Pj4+IC3CoMKgwqAgZm9y X2VhY2hfc2V0X2JpdChwYWdlbnIsIHJiaW8tPmRiaXRtYXAsIHJiaW8tPnN0cmlwZV9ucGFnZXMp IHsNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHN0cnVjdCBwYWdlICpwYWdlOw0KPj4+PiArwqDCoMKg IGZvcl9lYWNoX3NldF9iaXQoc2VjdG9ybnIsIHJiaW8tPmRiaXRtYXAsIHJiaW8tPnN0cmlwZV9u c2VjdG9ycykgew0KPj4+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IHNlY3Rvcl9wdHIgKnNlY3Rv cjsNCj4+Pj4NCj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHBhZ2UgPSByYmlvX3N0cmlwZV9wYWdlKHJi aW8sIHJiaW8tPnNjcnVicCwgcGFnZW5yKTsNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldCA9IHJi aW9fYWRkX2lvX3BhZ2UocmJpbywgJmJpb19saXN0LCBwYWdlLCByYmlvLT5zY3J1YnAsDQo+Pj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYWdlbnIsIHJi aW8tPnN0cmlwZV9sZW4sIFJFUV9PUF9XUklURSk7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBzZWN0 b3IgPSByYmlvX3N0cmlwZV9zZWN0b3IocmJpbywgcmJpby0+c2NydWJwLCBzZWN0b3Jucik7DQo+ Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSByYmlvX2FkZF9pb19zZWN0b3IocmJpbywgJmJpb19s aXN0LCBzZWN0b3IsIA0KPj4+PiByYmlvLT5zY3J1YnAsDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlY3Rvcm5yLCByYmlvLT5zdHJpcGVfbGVuLA0KPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSRVFfT1BfV1JJVEUp Ow0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkNCj4+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZ290byBjbGVhbnVwOw0KPj4+PiDCoMKgwqDCoMKgIH0NCj4+Pj4gQEAgLTI1 MTIsMTMgKzI1ODUsMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgDQo+Pj4+IGZpbmlzaF9wYXJp dHlfc2NydWIoc3RydWN0IGJ0cmZzX3JhaWRfYmlvICpyYmlvLA0KPj4+PiDCoMKgwqDCoMKgIGlm ICghaXNfcmVwbGFjZSkNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gc3VibWl0X3dyaXRl Ow0KPj4+Pg0KPj4+PiAtwqDCoMKgIGZvcl9lYWNoX3NldF9iaXQocGFnZW5yLCBwYml0bWFwLCBy YmlvLT5zdHJpcGVfbnBhZ2VzKSB7DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGFnZSAq cGFnZTsNCj4+Pj4gK8KgwqDCoCBmb3JfZWFjaF9zZXRfYml0KHNlY3Rvcm5yLCBwYml0bWFwLCBy YmlvLT5zdHJpcGVfbnNlY3RvcnMpIHsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBzZWN0 b3JfcHRyICpzZWN0b3I7DQo+Pj4+DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoCBwYWdlID0gcmJpb19z dHJpcGVfcGFnZShyYmlvLCByYmlvLT5zY3J1YnAsIHBhZ2Vucik7DQo+Pj4+IC3CoMKgwqDCoMKg wqDCoCByZXQgPSByYmlvX2FkZF9pb19wYWdlKHJiaW8sICZiaW9fbGlzdCwgcGFnZSwNCj4+Pj4g K8KgwqDCoMKgwqDCoMKgIHNlY3RvciA9IHJiaW9fc3RyaXBlX3NlY3RvcihyYmlvLCByYmlvLT5z Y3J1YnAsIHNlY3Rvcm5yKTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IHJiaW9fYWRkX2lv X3NlY3RvcihyYmlvLCAmYmlvX2xpc3QsIHNlY3RvciwNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJpb2MtPnRndGRldl9tYXBbcmJpby0+c2Ny dWJwXSwNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHBhZ2VuciwgcmJpby0+c3RyaXBlX2xlbiwgUkVRX09QX1dSSVRFKTsNCj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlY3Rvcm5yLCByYmlvLT5zdHJp cGVfbGVuLCBSRVFfT1BfV1JJVEUpOw0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkN Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBjbGVhbnVwOw0KPj4+PiDCoMKg wqDCoMKgIH0NCj4+Pj4gQEAgLTI2NTAsNyArMjcyMyw3IEBAIHN0YXRpYyB2b2lkIHJhaWQ1Nl9w YXJpdHlfc2NydWJfc3RyaXBlKHN0cnVjdCANCj4+Pj4gYnRyZnNfcmFpZF9iaW8gKnJiaW8pDQo+ Pj4+IMKgwqDCoMKgwqAgaW50IGJpb3NfdG9fcmVhZCA9IDA7DQo+Pj4+IMKgwqDCoMKgwqAgc3Ry dWN0IGJpb19saXN0IGJpb19saXN0Ow0KPj4+PiDCoMKgwqDCoMKgIGludCByZXQ7DQo+Pj4+IC3C oMKgwqAgaW50IHBhZ2VucjsNCj4+Pj4gK8KgwqDCoCBpbnQgc2VjdG9ybnI7DQo+Pj4+IMKgwqDC oMKgwqAgaW50IHN0cmlwZTsNCj4+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYmlvICpiaW87DQo+Pj4+ DQo+Pj4+IEBAIC0yNjY2LDI4ICsyNzM5LDMwIEBAIHN0YXRpYyB2b2lkIA0KPj4+PiByYWlkNTZf cGFyaXR5X3NjcnViX3N0cmlwZShzdHJ1Y3QgYnRyZnNfcmFpZF9iaW8gKnJiaW8pDQo+Pj4+IMKg wqDCoMKgwqDCoCAqIHN0cmlwZQ0KPj4+PiDCoMKgwqDCoMKgwqAgKi8NCj4+Pj4gwqDCoMKgwqDC oCBmb3IgKHN0cmlwZSA9IDA7IHN0cmlwZSA8IHJiaW8tPnJlYWxfc3RyaXBlczsgc3RyaXBlKysp IHsNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGZvcl9lYWNoX3NldF9iaXQocGFnZW5yLCByYmlvLT5k Yml0bWFwLCByYmlvLT5zdHJpcGVfbnBhZ2VzKSB7DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBwYWdlICpwYWdlOw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgZm9yX2VhY2hfc2V0 X2JpdChzZWN0b3JuciwgcmJpby0+ZGJpdG1hcCwNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJiaW8tPnN0cmlwZV9uc2VjdG9ycykgew0KPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3Qgc2VjdG9yX3B0ciAqc2VjdG9yOw0KPj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAvKg0KPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogd2Ugd2Fu dCB0byBmaW5kIGFsbCB0aGUgcGFnZXMgbWlzc2luZyBmcm9tDQo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKiBXZSB3YW50IHRvIGZpbmQgYWxsIHRoZSBzZWN0b3JzIG1pc3NpbmcgZnJv bQ0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogdGhlIHJiaW8gYW5kIHJlYWQg dGhlbSBmcm9tIHRoZSBkaXNrLsKgIElmDQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KiBwYWdlX2luX3JiaW8gZmluZHMgYSBwYWdlIGluIHRoZSBiaW8gbGlzdA0KPj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICogc2VjdG9yX2luX3JiaW8oKSBmaW5kcyBhIHNlY3RvciBpbiB0 aGUgYmlvIGxpc3QNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHdlIGRvbid0 IG5lZWQgdG8gcmVhZCBpdCBvZmYgdGhlIHN0cmlwZS4NCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAqLw0KPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYWdlID0gcGFnZV9p bl9yYmlvKHJiaW8sIHN0cmlwZSwgcGFnZW5yLCAxKTsNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKHBhZ2UpDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlY3RvciA9IHNl Y3Rvcl9pbl9yYmlvKHJiaW8sIHN0cmlwZSwgc2VjdG9ybnIsIDEpOw0KPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpZiAoc2VjdG9yKQ0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNvbnRpbnVlOw0KPj4+Pg0KPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBw YWdlID0gcmJpb19zdHJpcGVfcGFnZShyYmlvLCBzdHJpcGUsIHBhZ2Vucik7DQo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHNlY3RvciA9IHJiaW9fc3RyaXBlX3NlY3RvcihyYmlvLCBzdHJp cGUsIHNlY3Rvcm5yKTsNCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoNCj4+Pj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHRoZSBiaW8gY2FjaGUgbWF5IGhhdmUgaGFuZGVk IHVzIGFuIHVwdG9kYXRlDQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBwYWdlLsKg IElmIHNvLCBiZSBoYXBweSBhbmQgdXNlIGl0DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKiBUaGUgYmlvIGNhY2hlIG1heSBoYXZlIGhhbmRlZCB1cyBhbiB1cHRvZGF0ZQ0KPj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogc2VjdG9yLsKgIElmIHNvLCBiZSBoYXBweSBhbmQg dXNlIGl0DQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8NCj4+Pj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkNCj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaWYgKHNlY3Rvci0+dXB0b2RhdGUpDQo+Pj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7DQo+Pj4+DQo+Pj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHJldCA9IHJiaW9fYWRkX2lvX3BhZ2UocmJpbywgJmJpb19saXN0LCBwYWdlLCBz dHJpcGUsDQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHBhZ2VuciwgcmJpby0+c3RyaXBlX2xlbiwgUkVRX09QX1JFQUQpOw0KPj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSByYmlvX2FkZF9pb19zZWN0b3IocmJpbywgJmJp b19saXN0LCBzZWN0b3IsDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RyaXBlLCBzZWN0b3JuciwNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYmlvLT5zdHJpcGVfbGVuLCBSRVFfT1Bf UkVBRCk7DQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpDQo+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBjbGVhbnVwOw0KPj4+PiDCoMKg wqDCoMKgwqDCoMKgwqAgfQ0KPj4+PiAtLSANCj4+Pj4gMi4zNS4xDQo=