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 2DD73C4167B for ; Thu, 7 Dec 2023 10:38:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:References:Cc:To:From: 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=4bCNqOzeyhs7Aey8kr6il8IoOP9XmYfU/1jZgb3S1ps=; b=Bpck4eWDTL6+Xh ooYARLTWay1162HstxDl/6E7/OZdK5Mro/eBhZIGa5UX7jEtCDwST07TYpIEEiMNncozdO9zijJx/ d8hUh8/CFGw+xkKLZZsfBjKuEQBsUmjdTfamJvtAW1UM63Q38jh8399ZI6WeSWIDQdCktPVMSvURP 6C5EjP/FMA/5e0Lbnk/gUKDg6ZW1kRaodYF779mOghwnCojZEDYUDwoI0sABfH4rhN5btdnddMnba q31IMFEQp7knww2eQckVQECW4hT3Ogd/QU/Mk6l9pryvAkHCt4tC8xK+04Ywlil+z71PO6gvyWPsN p+vwoJ7d9TFVsOuw4KTw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rBBlM-00CUpc-1C; Thu, 07 Dec 2023 10:37:48 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rBBlG-00CUnN-2k for linux-arm-kernel@lists.infradead.org; Thu, 07 Dec 2023 10:37:45 +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 6214812FC; Thu, 7 Dec 2023 02:38:21 -0800 (PST) Received: from [10.1.32.134] (XHFQ2J9959.cambridge.arm.com [10.1.32.134]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8C1253F762; Thu, 7 Dec 2023 02:37:32 -0800 (PST) Message-ID: Date: Thu, 7 Dec 2023 10:37:31 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v8 04/10] mm: thp: Support allocation of anonymous multi-size THP Content-Language: en-GB From: Ryan Roberts To: David Hildenbrand , Andrew Morton , Matthew Wilcox , Yin Fengwei , Yu Zhao , Catalin Marinas , Anshuman Khandual , Yang Shi , "Huang, Ying" , Zi Yan , Luis Chamberlain , Itaru Kitayama , "Kirill A. Shutemov" , John Hubbard , David Rientjes , Vlastimil Babka , Hugh Dickins , Kefeng Wang , Barry Song <21cnbao@gmail.com>, Alistair Popple Cc: linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org References: <20231204102027.57185-1-ryan.roberts@arm.com> <20231204102027.57185-5-ryan.roberts@arm.com> <71040a8c-4ea1-4f21-8ac8-65f7c25c217e@redhat.com> <5c06e3fc-e8f0-4896-ab71-2317a71e812a@arm.com> In-Reply-To: <5c06e3fc-e8f0-4896-ab71-2317a71e812a@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231207_023743_002613_884D7620 X-CRM114-Status: GOOD ( 43.80 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMDYvMTIvMjAyMyAxNTo0NCwgUnlhbiBSb2JlcnRzIHdyb3RlOgo+IE9uIDA2LzEyLzIwMjMg MTQ6MTksIFJ5YW4gUm9iZXJ0cyB3cm90ZToKPj4gT24gMDUvMTIvMjAyMyAxNjozMiwgRGF2aWQg SGlsZGVuYnJhbmQgd3JvdGU6Cj4+PiBPbiAwNC4xMi4yMyAxMToyMCwgUnlhbiBSb2JlcnRzIHdy b3RlOgo+Pj4+IEludHJvZHVjZSB0aGUgbG9naWMgdG8gYWxsb3cgVEhQIHRvIGJlIGNvbmZpZ3Vy ZWQgKHRocm91Z2ggdGhlIG5ldyBzeXNmcwo+Pj4+IGludGVyZmFjZSB3ZSBqdXN0IGFkZGVkKSB0 byBhbGxvY2F0ZSBsYXJnZSBmb2xpb3MgdG8gYmFjayBhbm9ueW1vdXMKPj4+PiBtZW1vcnksIHdo aWNoIGFyZSBsYXJnZXIgdGhhbiB0aGUgYmFzZSBwYWdlIHNpemUgYnV0IHNtYWxsZXIgdGhhbgo+ Pj4+IFBNRC1zaXplLiBXZSBjYWxsIHRoaXMgbmV3IFRIUCBleHRlbnNpb24gIm11bHRpLXNpemUg VEhQIiAobVRIUCkuCj4+Pj4KPj4+PiBtVEhQIGNvbnRpbnVlcyB0byBiZSBQVEUtbWFwcGVkLCBi dXQgaW4gbWFueSBjYXNlcyBjYW4gc3RpbGwgcHJvdmlkZQo+Pj4+IHNpbWlsYXIgYmVuZWZpdHMg dG8gdHJhZGl0aW9uYWwgUE1ELXNpemVkIFRIUDogUGFnZSBmYXVsdHMgYXJlCj4+Pj4gc2lnbmlm aWNhbnRseSByZWR1Y2VkIChieSBhIGZhY3RvciBvZiBlLmcuIDQsIDgsIDE2LCBldGMuIGRlcGVu ZGluZyBvbgo+Pj4+IHRoZSBjb25maWd1cmVkIG9yZGVyKSwgYnV0IGxhdGVuY3kgc3Bpa2VzIGFy ZSBtdWNoIGxlc3MgcHJvbWluZW50Cj4+Pj4gYmVjYXVzZSB0aGUgc2l6ZSBvZiBlYWNoIHBhZ2Ug aXNuJ3QgYXMgaHVnZSBhcyB0aGUgUE1ELXNpemVkIHZhcmlhbnQgYW5kCj4+Pj4gdGhlcmUgaXMg bGVzcyBtZW1vcnkgdG8gY2xlYXIgaW4gZWFjaCBwYWdlIGZhdWx0LiBUaGUgbnVtYmVyIG9mIHBl ci1wYWdlCj4+Pj4gb3BlcmF0aW9ucyAoZS5nLiByZWYgY291bnRpbmcsIHJtYXAgbWFuYWdlbWVu dCwgbHJ1IGxpc3QgbWFuYWdlbWVudCkgYXJlCj4+Pj4gYWxzbyBzaWduaWZpY2FudGx5IHJlZHVj ZWQgc2luY2UgdGhvc2Ugb3BzIG5vdyBiZWNvbWUgcGVyLWZvbGlvLgo+Pj4+Cj4+Pj4gU29tZSBh cmNoaXRlY3R1cmVzIGFsc28gZW1wbG95IFRMQiBjb21wcmVzc2lvbiBtZWNoYW5pc21zIHRvIHNx dWVlemUKPj4+PiBtb3JlIGVudHJpZXMgaW4gd2hlbiBhIHNldCBvZiBQVEVzIGFyZSB2aXJ0dWFs bHkgYW5kIHBoeXNpY2FsbHkKPj4+PiBjb250aWd1b3VzIGFuZCBhcHByb3BvcmlhdGVseSBhbGln bmVkLiBJbiB0aGlzIGNhc2UsIFRMQiBtaXNzZXMgd2lsbAo+Pj4+IG9jY3VyIGxlc3Mgb2Z0ZW4u Cj4+Pj4KPj4+PiBUaGUgbmV3IGJlaGF2aW91ciBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBidXQg Y2FuIGJlIGVuYWJsZWQgYXQgcnVudGltZQo+Pj4+IGJ5IHdyaXRpbmcgdG8gL3N5cy9rZXJuZWwv bW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvaHVnZXBhZ2UtWFhrYi9lbmFibGVkCj4+Pj4gKHNlZSBk b2N1bWVudGF0aW9uIGluIHByZXZpb3VzIGNvbW1pdCkuIFRoZSBsb25nIHRlcm0gYWltIGlzIHRv IGNoYW5nZQo+Pj4+IHRoZSBkZWZhdWx0IHRvIGluY2x1ZGUgc3VpdGFibGUgbG93ZXIgb3JkZXJz LCBidXQgdGhlcmUgYXJlIHNvbWUgcmlza3MKPj4+PiBhcm91bmQgaW50ZXJuYWwgZnJhZ21lbnRh dGlvbiB0aGF0IG5lZWQgdG8gYmUgYmV0dGVyIHVuZGVyc3Rvb2QgZmlyc3QuCj4+Pj4KPj4+PiBT aWduZWQtb2ZmLWJ5OiBSeWFuIFJvYmVydHMgPHJ5YW4ucm9iZXJ0c0Bhcm0uY29tPgo+Pj4KPj4+ IEluIGdlbmVyYWwsIGxvb2tzIGdvb2QgdG8gbWUsIHNvbWUgY29tbWVudHMvbml0cy4gQW5kIHRo ZSB1c3VhbCAibGV0J3MgbWFrZSBzdXJlCj4+PiB3ZSBkb24ndCBkZWdyYWRlIG9yZGVyLTAgYW5k IGtlZXAgdGhhdCBhcyBmYXN0IGFzIHBvc3NpYmxlIiBjb21tZW50Lgo+Pj4KPj4+PiAtLS0KPj4+ PiDCoCBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCB8wqDCoCA2ICsrLQo+Pj4+IMKgIG1tL21lbW9y eS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMTA2ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0KPj4+PiDCoCAyIGZpbGVzIGNoYW5nZWQsIDEwMSBpbnNlcnRpb25z KCspLCAxMSBkZWxldGlvbnMoLSkKPj4+Pgo+Pj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4 L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCj4+Pj4gaW5kZXggYmQwZWFkZDNi ZWZiLi45MWE1M2I5ODM1YTQgMTAwNjQ0Cj4+Pj4gLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21t LmgKPj4+PiArKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaAo+Pj4+IEBAIC02OCw5ICs2OCwx MSBAQCBleHRlcm4gc3RydWN0IGtvYmpfYXR0cmlidXRlIHNobWVtX2VuYWJsZWRfYXR0cjsKPj4+ PiDCoCAjZGVmaW5lIEhQQUdFX1BNRF9OUiAoMTw8SFBBR0VfUE1EX09SREVSKQo+Pj4+IMKgIMKg IC8qCj4+Pj4gLSAqIE1hc2sgb2YgYWxsIGxhcmdlIGZvbGlvIG9yZGVycyBzdXBwb3J0ZWQgZm9y IGFub255bW91cyBUSFAuCj4+Pj4gKyAqIE1hc2sgb2YgYWxsIGxhcmdlIGZvbGlvIG9yZGVycyBz dXBwb3J0ZWQgZm9yIGFub255bW91cyBUSFA7IGFsbCBvcmRlcnMgdXAgdG8KPj4+PiArICogYW5k IGluY2x1ZGluZyBQTURfT1JERVIsIGV4Y2VwdCBvcmRlci0wICh3aGljaCBpcyBub3QgImh1Z2Ui KSBhbmQgb3JkZXItMQo+Pj4+ICsgKiAod2hpY2ggaXMgYSBsaW1pdGF0aW9uIG9mIHRoZSBUSFAg aW1wbGVtZW50YXRpb24pLgo+Pj4+IMKgwqAgKi8KPj4+PiAtI2RlZmluZSBUSFBfT1JERVJTX0FM TF9BTk9OwqDCoMKgIEJJVChQTURfT1JERVIpCj4+Pj4gKyNkZWZpbmUgVEhQX09SREVSU19BTExf QU5PTsKgwqDCoCAoKEJJVChQTURfT1JERVIgKyAxKSAtIDEpICYgfihCSVQoMCkgfCBCSVQoMSkp KQo+Pj4+IMKgIMKgIC8qCj4+Pj4gwqDCoCAqIE1hc2sgb2YgYWxsIGxhcmdlIGZvbGlvIG9yZGVy cyBzdXBwb3J0ZWQgZm9yIGZpbGUgVEhQLgo+Pj4+IGRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBi L21tL21lbW9yeS5jCj4+Pj4gaW5kZXggM2NlZWIwZjQ1YmY1Li5iZjdlOTM4MTMwMTggMTAwNjQ0 Cj4+Pj4gLS0tIGEvbW0vbWVtb3J5LmMKPj4+PiArKysgYi9tbS9tZW1vcnkuYwo+Pj4+IEBAIC00 MTI1LDYgKzQxMjUsODQgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0 ICp2bWYpCj4+Pj4gwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+IMKgIH0KPj4+PiDCoCArc3Rh dGljIGJvb2wgcHRlX3JhbmdlX25vbmUocHRlX3QgKnB0ZSwgaW50IG5yX3BhZ2VzKQo+Pj4+ICt7 Cj4+Pj4gK8KgwqDCoCBpbnQgaTsKPj4+PiArCj4+Pj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwg bnJfcGFnZXM7IGkrKykgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIXB0ZV9ub25lKHB0ZXBf Z2V0X2xvY2tsZXNzKHB0ZSArIGkpKSkKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gZmFsc2U7Cj4+Pj4gK8KgwqDCoCB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgcmV0dXJuIHRydWU7 Cj4+Pj4gK30KPj4+PiArCj4+Pj4gKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UK Pj4+PiArc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1 bHQgKnZtZikKPj4+PiArewo+Pj4+ICvCoMKgwqAgZ2ZwX3QgZ2ZwOwo+Pj4+ICvCoMKgwqAgcHRl X3QgKnB0ZTsKPj4+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcgYWRkcjsKPj4+PiArwqDCoMKgIHN0 cnVjdCBmb2xpbyAqZm9saW87Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZt YSA9IHZtZi0+dm1hOwo+Pj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyBvcmRlcnM7Cj4+Pj4gK8Kg wqDCoCBpbnQgb3JkZXI7Cj4+Pgo+Pj4gTml0OiByZXZlcnNlIGNocmlzdG1hcyB0cmVlIGVuY291 cmFnZWQgOykKPj4KPj4gQUNLIHdpbGwgZml4Lgo+Pgo+Pj4KPj4+PiArCj4+Pj4gK8KgwqDCoCAv Kgo+Pj4+ICvCoMKgwqDCoCAqIElmIHVmZmQgaXMgYWN0aXZlIGZvciB0aGUgdm1hIHdlIG5lZWQg cGVyLXBhZ2UgZmF1bHQgZmlkZWxpdHkgdG8KPj4+PiArwqDCoMKgwqAgKiBtYWludGFpbiB0aGUg dWZmZCBzZW1hbnRpY3MuCj4+Pj4gK8KgwqDCoMKgICovCj4+Pj4gK8KgwqDCoCBpZiAodXNlcmZh dWx0ZmRfYXJtZWQodm1hKSkKPj4+Cj4+PiBOaXQ6IHVubGlrZWx5KCkKPj4KPj4gQUNLIHdpbGwg Zml4Lgo+Pgo+Pj4KPj4+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWxsYmFjazsKPj4+PiArCj4+ Pj4gK8KgwqDCoCAvKgo+Pj4+ICvCoMKgwqDCoCAqIEdldCBhIGxpc3Qgb2YgYWxsIHRoZSAobGFy Z2UpIG9yZGVycyBiZWxvdyBQTURfT1JERVIgdGhhdCBhcmUgZW5hYmxlZAo+Pj4+ICvCoMKgwqDC oCAqIGZvciB0aGlzIHZtYS4gVGhlbiBmaWx0ZXIgb3V0IHRoZSBvcmRlcnMgdGhhdCBjYW4ndCBi ZSBhbGxvY2F0ZWQgb3Zlcgo+Pj4+ICvCoMKgwqDCoCAqIHRoZSBmYXVsdGluZyBhZGRyZXNzIGFu ZCBzdGlsbCBiZSBmdWxseSBjb250YWluZWQgaW4gdGhlIHZtYS4KPj4+PiArwqDCoMKgwqAgKi8K Pj4+PiArwqDCoMKgIG9yZGVycyA9IHRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtYS0+ dm1fZmxhZ3MsIGZhbHNlLCB0cnVlLCB0cnVlLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKFBNRF9PUkRFUikgLSAxKTsKPj4+PiArwqDCoMKgIG9y ZGVycyA9IHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHZtYSwgdm1mLT5hZGRyZXNzLCBvcmRlcnMp Owo+Pj4KPj4+IENvbW1lbnQ6IEJvdGggd2lsbCBldmVudHVhbGx5IGxvb3Agb3ZlciBhbGwgb3Jk ZXJzLCBjb3JyZWN0PyBDb3VsZCBldmVudHVhbGx5IGJlCj4+PiBzcGVkIHVwIGluIHRoZSBmdXR1 cmUuCj4+Cj4+IE5vIG9ubHkgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcnMoKSB3aWxsIGxvb3AuIHRo cF92bWFfYWxsb3dhYmxlX29yZGVycygpIG9ubHkKPj4gbG9vcHMgaWYgaW5fcGY9ZmFsc2UgKGl0 J3MgdHJ1ZSBoZXJlKS4KPj4KPj4+Cj4+PiBOaXQ6IHRoZSBvcmRlcnMgPSAuLi4gb3JkZXIgPSAu Li4gbG9va3MgbGlrZSB0aGlzIG1pZ2h0IGRlc2VydmUgYSBoZWxwZXIKPj4+IGZ1bmN0aW9uIHRo YXQgbWFrZXMgdGhpcyBlYXNpZXIgdG8gcmVhZC4KPj4KPj4gVG8gYmUgaG9uZXN0LCB0aGUgZXhp c3RpbmcgZnVuY3Rpb24gdGhhdCBJJ3ZlIG1vZGlmaWVkIGlzIGEgYml0IG9mIGEgbWVzcy4KPj4g dGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkgY2FsbHMgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcnMo KSBpZiB3ZSBhcmUgbm90IGluIGEKPj4gcGFnZSBmYXVsdCwgYmVjYXVzZSB0aGUgcGFnZSBmYXVs dCBoYW5kbGVycyBhbHJlYWR5IGRvIHRoYXQgY2hlY2sgdGhlbXNlbHZlcy4gSXQKPj4gd291bGQg YmUgbmljZSB0byByZWZhY3RvciB0aGUgd2hvbGUgdGhpbmcgc28gdGhhdCB0aHBfdm1hX2FsbG93 YWJsZV9vcmRlcnMoKSBpcwo+PiBhIHN0cmljdCBzdXBlcnNldCBvZiB0aHBfdm1hX3N1aXRhYmxl X29yZGVycygpLiBUaGVuIHRoaXMgY2FuIGp1c3QgY2FsbAo+PiB0aHBfdm1hX2FsbG93YWJsZV9v cmRlcnMoKS4gQnV0IHRoYXQncyBnb2luZyB0byBzdGFydCB0b3VjaGluZyB0aGUgUE1EIGFuZCBQ VUQKPj4gaGFuZGxlcnMsIHNvIHByZWZlciBpZiB3ZSBsZWF2ZSB0aGF0IGZvciBhIHNlcGFyYXRl IHBhdGNoIHNldC4KPj4KPj4+Cj4+PiBOaXQ6IFdoeSBjYWxsIHRocF92bWFfc3VpdGFibGVfb3Jk ZXJzIGlmIHRoZSBvcmRlcnMgYXJlIGFscmVhZHkgMD8gQWdhaW4sIHNvbWUKPj4+IGhlbHBlciBt aWdodCBiZSByZWFzb25hYmxlIHdoZXJlIHRoYXQgaXMgaGFuZGxlZCBpbnRlcm5hbGx5Lgo+Pgo+ PiBCZWNhdXNlIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKCkgd2lsbCBoYW5kbGUgaXQgc2FmZWx5 IGFuZCBpcyBpbmxpbmUsIHNvIGl0Cj4+IHNob3VsZCBqdXN0IGFzIGVmZmljaWVudD8gVGhpcyB3 b3VsZCBnbyBhd2F5IHdpdGggdGhlIHJlZmFjdG9yaW5nIGRlc2NyaWJlZCBhYm92ZS4KPj4KPj4+ Cj4+PiBDb21tZW50OiBGb3Igb3JkZXItMCB3ZSdsbCBhbHdheXMgcGVyZm9ybSBhIGZ1bmN0aW9u IGNhbGwgdG8gYm90aAo+Pj4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkgLyB0aHBfdm1hX3N1 aXRhYmxlX29yZGVycygpLiBXZSBzaG91bGQgcGVyZm9ybSBzb21lCj4+PiBmYXN0IGFuZCBlZmZp Y2llbnQgY2hlY2sgaWYgYW55IDxQTUQgVEhQIGFyZSBldmVuIGVuYWJsZWQgaW4gdGhlIHN5c3Rl bSAvIGZvcgo+Pj4gdGhpcyBWTUEsIGFuZCBpbiB0aGF0IGNhc2UganVzdCBmYWxsYmFjayBiZWZv cmUgZG9pbmcgbW9yZSBleHBlbnNpdmUgY2hlY2tzLgo+Pgo+IAo+IEkganVzdCBub3RpY2VkIEkg Z290IHRoZXNlIGZ1bmN0aW9ucyByb3VuZCB0aGUgd3Jvbmcgd2F5IGluIG15IHByZXZpb3VzIHJl c3BvbnNlOgo+IAo+PiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoKSBpcyBpbmxpbmUgYXMgeW91 IG1lbnRpb25lZC4KPiAKPiBeIE1lYW50IHRocF92bWFfc3VpdGFibGVfb3JkZXJzKCkgaGVyZS4K PiAKPj4KPj4gSSB3YXMgZGVsaWJlcmF0ZWx5IHRyeWluZyB0byBrZWVwIGFsbCB0aGUgZGVjaXNp b24gbG9naWMgaW4gb25lIHBsYWNlCj4+ICh0aHBfdm1hX3N1aXRhYmxlX29yZGVycykgYmVjYXVz ZSBpdCdzIGFscmVhZHkgcHJldHR5IGNvbXBsaWNhdGVkLiBCdXQgaWYgeW91Cj4gCj4gXiBNZWFu dCB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoKSBoZXJlLgo+IAo+IFNvcnJ5IGZvciB0aGUgY29u ZnVzaW9uLgo+IAo+PiBpbnNpc3QsIGhvdyBhYm91dCB0aGlzIGluIHRoZSBoZWFkZXI6Cj4+Cj4+ IHN0YXRpYyBpbmxpbmUKPj4gdW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMo c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCj4+IAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyB2 bV9mbGFncywgYm9vbCBzbWFwcywKPj4gCQkJCSAgICAgICBib29sIGluX3BmLCBib29sIGVuZm9y Y2Vfc3lzZnMsCj4+IAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMpCj4+IHsKPj4gCS8q IE9wdGltaXphdGlvbiB0byBjaGVjayBpZiByZXF1aXJlZCBvcmRlcnMgYXJlIGVuYWJsZWQgZWFy bHkuICovCj4+IAlpZiAoZW5mb3JjZV9zeXNmcyAmJiB2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHsK Pj4gCQl1bnNpZ25lZCBsb25nIG1hc2sgPSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdh eXMpOwo+Pgo+PiAJCWlmICh2bV9mbGFncyAmIFZNX0hVR0VQQUdFKQo+PiAJCQltYXNrIHw9IFJF QURfT05DRShodWdlX2Fub25fb3JkZXJzX21hZHZpc2UpOwo+PiAJCWlmIChodWdlcGFnZV9nbG9i YWxfYWx3YXlzKCkgfHwKPj4gCQkJKCh2bV9mbGFncyAmIFZNX0hVR0VQQUdFKSAmJiBodWdlcGFn ZV9nbG9iYWxfZW5hYmxlZCgpKSkKPj4gCQkJbWFzayB8PSBSRUFEX09OQ0UoaHVnZV9hbm9uX29y ZGVyc19pbmhlcml0KTsKPj4KPj4gCQlvcmRlcnMgJj0gbWFzazsKPj4gCQlpZiAoIW9yZGVycykK Pj4gCQkJcmV0dXJuIDA7Cj4+IAkJCj4+IAkJZW5mb3JjZV9zeXNmcyA9IGZhbHNlOwo+PiAJfQo+ Pgo+PiAJcmV0dXJuIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHNt YXBzLCBpbl9wZiwKPj4gCQkJCQkgIGVuZm9yY2Vfc3lzZnMsIG9yZGVycyk7Cj4+IH0KPj4KPj4g VGhlbiB0aGUgYWJvdmUgY2hlY2sgY2FuIGJlIHJlbW92ZWQgZnJvbSBfX3RocF92bWFfYWxsb3dh YmxlX29yZGVycygpIC0gaXQgd2lsbAo+PiBzdGlsbCByZXRhaW4gdGhlIGBpZiAoZW5mb3JjZV9z eXNmcyAmJiAhdm1hX2lzX2Fub255bW91cyh2bWEpKWAgcGFydC4KPj4KPj4KPj4+Cj4+Pj4gKwo+ Pj4+ICvCoMKgwqAgaWYgKCFvcmRlcnMpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZmFsbGJh Y2s7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgcHRlID0gcHRlX29mZnNldF9tYXAodm1mLT5wbWQsIHZt Zi0+YWRkcmVzcyAmIFBNRF9NQVNLKTsKPj4+PiArwqDCoMKgIGlmICghcHRlKQo+Pj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKPj4+PiArCj4+Pj4gK8KgwqDCoCBv cmRlciA9IGZpcnN0X29yZGVyKG9yZGVycyk7Cj4+Pj4gK8KgwqDCoCB3aGlsZSAob3JkZXJzKSB7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGFkZHIgPSBBTElHTl9ET1dOKHZtZi0+YWRkcmVzcywgUEFH RV9TSVpFIDw8IG9yZGVyKTsKPj4+PiArwqDCoMKgwqDCoMKgwqAgdm1mLT5wdGUgPSBwdGUgKyBw dGVfaW5kZXgoYWRkcik7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChwdGVfcmFuZ2Vfbm9uZSh2 bWYtPnB0ZSwgMSA8PCBvcmRlcikpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7 Cj4+Pgo+Pj4gQ29tbWVudDogTGlrZWx5IGl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gc2NhbiBvbmx5 IG9uY2UgYW5kIGRldGVybWluZSB0aGUgImxhcmdlc3QKPj4+IG5vbmUgcmFuZ2UiIGFyb3VuZCB0 aGF0IGFkZHJlc3MsIGhhdmluZyB0aGUgbGFyZ2VzdCBzdWl0YWJsZSBvcmRlciBpbiBtaW5kLgo+ Pgo+PiBZZXMsIHRoYXQncyBob3cgSSB1c2VkIHRvIGRvIGl0LCBidXQgWXUgWmhvdSByZXF1ZXN0 ZWQgc2ltcGxpZnlpbmcgdG8gdGhpcywKPj4gSUlSQy4gUGVyaGFwcyB0aGlzIGFuIG9wdGltaXph dGlvbiBvcHBvcnR1bml0eSBmb3IgbGF0ZXI/Cj4+Cj4+Pgo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBv cmRlciA9IG5leHRfb3JkZXIoJm9yZGVycywgb3JkZXIpOwo+Pj4+ICvCoMKgwqAgfQo+Pj4+ICsK Pj4+PiArwqDCoMKgIHZtZi0+cHRlID0gTlVMTDsKPj4+Cj4+PiBOaXQ6IENhbiB5b3UgZWxhYm9y YXRlIHdoeSB5b3UgYXJlIG1lc3Npbmcgd2l0aCB2bWYtPnB0ZSBoZXJlPyBBIHNpbXBsZSBoZWxw ZXIKPj4+IHZhcmlhYmxlIHdpbGwgbWFrZSB0aGlzIGNvZGUgbG9vayBsZXNzIG1hZ2ljYWwuIFVu bGVzcyBJIGFtIG1pc3Npbmcgc29tZXRoaW5nCj4+PiBpbXBvcnRhbnQgOikKPj4KPj4gR2FoaCwg SSB1c2VkIHRvIHBhc3MgdGhlIHZtZiB0byB3aGF0IHB0ZV9yYW5nZV9ub25lKCkgd2FzIHJlZmFj dG9yZWQgaW50byAoYW4KPj4gYXBwcm9hY2ggdGhhdCB3YXMgc3VnZ2VzdGVkIGJ5IFl1IFpob3Ug SUlSQykuIEJ1dCBzaW5jZSBJIGRpZCBzb21lIHJlZmFjdG9yaW5nCj4+IGJhc2VkIG9uIHNvbWUg Y29tbWVudHMgZnJvbSBKb2huSCwgSSBzZWUgSSBkb24ndCBuZWVkIHRoYXQgYW55bW9yZS4gQWdy ZWVkOyBpdAo+PiB3aWxsIGJlIG11Y2ggY2xlYXJlciBqdXN0IHRvIHVzZSBhIGxvY2FsIHZhcmlh YmxlLiBXaWxsIGZpeC4KPj4KPj4+Cj4+Pj4gK8KgwqDCoCBwdGVfdW5tYXAocHRlKTsKPj4+PiAr Cj4+Pj4gK8KgwqDCoCBnZnAgPSB2bWFfdGhwX2dmcF9tYXNrKHZtYSk7Cj4+Pj4gKwo+Pj4+ICvC oMKgwqAgd2hpbGUgKG9yZGVycykgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBhZGRyID0gQUxJR05f RE9XTih2bWYtPmFkZHJlc3MsIFBBR0VfU0laRSA8PCBvcmRlcik7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgIGZvbGlvID0gdm1hX2FsbG9jX2ZvbGlvKGdmcCwgb3JkZXIsIHZtYSwgYWRkciwgdHJ1ZSk7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChmb2xpbykgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNsZWFyX2h1Z2VfcGFnZSgmZm9saW8tPnBhZ2UsIGFkZHIsIDEgPDwgb3JkZXIpOwo+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBmb2xpbzsKPj4+PiArwqDCoMKgwqDC oMKgwqAgfQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBvcmRlciA9IG5leHRfb3JkZXIoJm9yZGVycywg b3JkZXIpOwo+Pj4+ICvCoMKgwqAgfQo+Pj4+ICsKPj4+Cj4+PiBRdWVlc3Rpb246IHdvdWxkIGl0 IG1ha2Ugc2Vuc2UgdG8gY29tYmluZSBib3RoIGxvb3BzPyBJIHN1c3BlY3QgbWVtb3J5Cj4+PiBh bGxvY2F0aW9ucyB3aXRoIHB0ZV9vZmZzZXRfbWFwKCkva21hbyBhcmUgcHJvYmxlbWF0aWMuCj4+ Cj4+IFRoZXkgYXJlIGJvdGggb3BlcmF0aW5nIG9uIHNlcGFyYXRlIG9yZGVyczsgbmV4dF9vcmRl cigpIGlzICJjb25zdW1pbmciIGFuIG9yZGVyCj4+IGJ5IHJlbW92aW5nIHRoZSBjdXJyZW50IG9u ZSBmcm9tIHRoZSBvcmRlcnMgYml0ZmllbGQgYW5kIHJldHVybmluZyB0aGUgbmV4dCBvbmUuCj4+ Cj4+IFNvIHRoZSBmaXJzdCBsb29wIHN0YXJ0cyBhdCB0aGUgaGlnaGVzdCBvcmRlciBhbmQga2Vl cHMgY2hlY2tpbmcgbG93ZXIgb3JkZXJzCj4+IHVudGlsIG9uZSBmdWxseSBmaXRzIGluIHRoZSBW TUEuIEFuZCB0aGUgc2Vjb25kIGxvb3Agc3RhcnRzIGF0IHRoZSBmaXJzdCBvcmRlcgo+PiB0aGF0 IHdhcyBmb3VuZCB0byBmdWxseSBmaXRzIGFuZCBsb29wcyB0byBsb3dlciBvcmRlcnMgdW50aWwg YW4gYWxsb2NhdGlvbiBpcwo+PiBzdWNjZXNzZnVsLgo+Pgo+PiBTbyBJIGRvbid0IHNlZSBhIG5l ZWQgdG8gY29tYmluZSB0aGUgbG9vcHMuCj4+Cj4+Pgo+Pj4+ICtmYWxsYmFjazoKPj4+PiArwqDC oMKgIHJldHVybiB2bWFfYWxsb2NfemVyb2VkX21vdmFibGVfZm9saW8odm1hLCB2bWYtPmFkZHJl c3MpOwo+Pj4+ICt9Cj4+Pj4gKyNlbHNlCj4+Pj4gKyNkZWZpbmUgYWxsb2NfYW5vbl9mb2xpbyh2 bWYpIFwKPj4+PiArwqDCoMKgwqDCoMKgwqAgdm1hX2FsbG9jX3plcm9lZF9tb3ZhYmxlX2ZvbGlv KCh2bWYpLT52bWEsICh2bWYpLT5hZGRyZXNzKQo+Pj4+ICsjZW5kaWYKPj4+PiArCj4+Pj4gwqAg LyoKPj4+PiDCoMKgICogV2UgZW50ZXIgd2l0aCBub24tZXhjbHVzaXZlIG1tYXBfbG9jayAodG8g ZXhjbHVkZSB2bWEgY2hhbmdlcywKPj4+PiDCoMKgICogYnV0IGFsbG93IGNvbmN1cnJlbnQgZmF1 bHRzKSwgYW5kIHB0ZSBtYXBwZWQgYnV0IG5vdCB5ZXQgbG9ja2VkLgo+Pj4+IEBAIC00MTMyLDYg KzQyMTAsOSBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikK Pj4+PiDCoMKgICovCj4+Pj4gwqAgc3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uo c3RydWN0IHZtX2ZhdWx0ICp2bWYpCj4+Pj4gwqAgewo+Pj4+ICvCoMKgwqAgaW50IGk7Cj4+Pj4g K8KgwqDCoCBpbnQgbnJfcGFnZXMgPSAxOwo+Pj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyBhZGRy ID0gdm1mLT5hZGRyZXNzOwo+Pj4+IMKgwqDCoMKgwqAgYm9vbCB1ZmZkX3dwID0gdm1mX29yaWdf cHRlX3VmZmRfd3Aodm1mKTsKPj4+PiDCoMKgwqDCoMKgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hID0gdm1mLT52bWE7Cj4+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZm9saW8gKmZvbGlvOwo+Pj4K Pj4+IE5pdDogcmV2ZXJzZSBjaHJpc3RtYXMgdHJlZSA6KQo+Pgo+PiBBQ0sKPj4KPj4+Cj4+Pj4g QEAgLTQxNzYsMTAgKzQyNTcsMTUgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3Bh Z2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCj4+Pj4gwqDCoMKgwqDCoCAvKiBBbGxvY2F0ZSBvdXIg b3duIHByaXZhdGUgcGFnZS4gKi8KPj4+PiDCoMKgwqDCoMKgIGlmICh1bmxpa2VseShhbm9uX3Zt YV9wcmVwYXJlKHZtYSkpKQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG9vbTsKPj4+PiAt wqDCoMKgIGZvbGlvID0gdm1hX2FsbG9jX3plcm9lZF9tb3ZhYmxlX2ZvbGlvKHZtYSwgdm1mLT5h ZGRyZXNzKTsKPj4+PiArwqDCoMKgIGZvbGlvID0gYWxsb2NfYW5vbl9mb2xpbyh2bWYpOwo+Pj4+ ICvCoMKgwqAgaWYgKElTX0VSUihmb2xpbykpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAw Owo+Pj4+IMKgwqDCoMKgwqAgaWYgKCFmb2xpbykKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290 byBvb207Cj4+Pj4gwqAgK8KgwqDCoCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsK Pj4+PiArwqDCoMKgIGFkZHIgPSBBTElHTl9ET1dOKHZtZi0+YWRkcmVzcywgbnJfcGFnZXMgKiBQ QUdFX1NJWkUpOwo+Pj4+ICsKPj4+PiDCoMKgwqDCoMKgIGlmIChtZW1fY2dyb3VwX2NoYXJnZShm b2xpbywgdm1hLT52bV9tbSwgR0ZQX0tFUk5FTCkpCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdv dG8gb29tX2ZyZWVfcGFnZTsKPj4+PiDCoMKgwqDCoMKgIGZvbGlvX3Rocm90dGxlX3N3YXByYXRl KGZvbGlvLCBHRlBfS0VSTkVMKTsKPj4+PiBAQCAtNDE5NiwxMiArNDI4MiwxMyBAQCBzdGF0aWMg dm1fZmF1bHRfdCBkb19hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKPj4+PiDC oMKgwqDCoMKgIGlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpCj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIGVudHJ5ID0gcHRlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpOwo+Pj4+ IMKgIC3CoMKgwqAgdm1mLT5wdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS0+dm1fbW0sIHZt Zi0+cG1kLCB2bWYtPmFkZHJlc3MsCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnZtZi0+ cHRsKTsKPj4+PiArwqDCoMKgIHZtZi0+cHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtPnZt X21tLCB2bWYtPnBtZCwgYWRkciwgJnZtZi0+cHRsKTsKPj4+PiDCoMKgwqDCoMKgIGlmICghdm1m LT5wdGUpCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gcmVsZWFzZTsKPj4+PiAtwqDCoMKg IGlmICh2bWZfcHRlX2NoYW5nZWQodm1mKSkgewo+Pj4+IC3CoMKgwqDCoMKgwqDCoCB1cGRhdGVf bW11X3RsYih2bWEsIHZtZi0+YWRkcmVzcywgdm1mLT5wdGUpOwo+Pj4+ICvCoMKgwqAgaWYgKChu cl9wYWdlcyA9PSAxICYmIHZtZl9wdGVfY2hhbmdlZCh2bWYpKSB8fAo+Pj4+ICvCoMKgwqDCoMKg wqDCoCAobnJfcGFnZXPCoCA+IDEgJiYgIXB0ZV9yYW5nZV9ub25lKHZtZi0+cHRlLCBucl9wYWdl cykpKSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsr KQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVwZGF0ZV9tbXVfdGxiKHZtYSwgYWRkciAr IFBBR0VfU0laRSAqIGksIHZtZi0+cHRlICsgaSk7Cj4+Pgo+Pj4gQ29tbWVudDogc2VwYXJhdGlu ZyB0aGUgb3JkZXItMCBjYXNlIGZyb20gdGhlIG90aGVyIGNhc2UgbWlnaHQgbWFrZSB0aGlzIGVh c2llcgo+Pj4gdG8gcmVhZC4KPj4KPj4gWWVhaCBmYWlyIGVub3VnaC4gV2lsbCBmaXguCj4+Cj4+ Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIHJlbGVhc2U7Cj4+Pj4gwqDCoMKgwqDCoCB9 Cj4+Pj4gwqAgQEAgLTQyMTYsMTYgKzQzMDMsMTcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5v bnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0Cj4+Pj4gKnZtZikKPj4+PiDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuIGhhbmRsZV91c2VyZmF1bHQodm1mLCBWTV9VRkZEX01JU1NJTkcpOwo+Pj4+ IMKgwqDCoMKgwqAgfQo+Pj4+IMKgIC3CoMKgwqAgaW5jX21tX2NvdW50ZXIodm1hLT52bV9tbSwg TU1fQU5PTlBBR0VTKTsKPj4+PiAtwqDCoMKgIGZvbGlvX2FkZF9uZXdfYW5vbl9ybWFwKGZvbGlv LCB2bWEsIHZtZi0+YWRkcmVzcyk7Cj4+Pj4gK8KgwqDCoCBmb2xpb19yZWZfYWRkKGZvbGlvLCBu cl9wYWdlcyAtIDEpOwo+Pj4+ICvCoMKgwqAgYWRkX21tX2NvdW50ZXIodm1hLT52bV9tbSwgTU1f QU5PTlBBR0VTLCBucl9wYWdlcyk7Cj4+Pj4gK8KgwqDCoCBmb2xpb19hZGRfbmV3X2Fub25fcm1h cChmb2xpbywgdm1hLCBhZGRyKTsKPj4+PiDCoMKgwqDCoMKgIGZvbGlvX2FkZF9scnVfdm1hKGZv bGlvLCB2bWEpOwo+Pj4+IMKgIHNldHB0ZToKPj4+PiDCoMKgwqDCoMKgIGlmICh1ZmZkX3dwKQo+ Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBlbnRyeSA9IHB0ZV9ta3VmZmRfd3AoZW50cnkpOwo+Pj4+ IC3CoMKgwqAgc2V0X3B0ZV9hdCh2bWEtPnZtX21tLCB2bWYtPmFkZHJlc3MsIHZtZi0+cHRlLCBl bnRyeSk7Cj4+Pj4gK8KgwqDCoCBzZXRfcHRlcyh2bWEtPnZtX21tLCBhZGRyLCB2bWYtPnB0ZSwg ZW50cnksIG5yX3BhZ2VzKTsKPj4+PiDCoCDCoMKgwqDCoMKgIC8qIE5vIG5lZWQgdG8gaW52YWxp ZGF0ZSAtIGl0IHdhcyBub24tcHJlc2VudCBiZWZvcmUgKi8KPj4+PiAtwqDCoMKgIHVwZGF0ZV9t bXVfY2FjaGVfcmFuZ2Uodm1mLCB2bWEsIHZtZi0+YWRkcmVzcywgdm1mLT5wdGUsIDEpOwo+Pj4+ ICvCoMKgwqAgdXBkYXRlX21tdV9jYWNoZV9yYW5nZSh2bWYsIHZtYSwgYWRkciwgdm1mLT5wdGUs IG5yX3BhZ2VzKTsKPj4+PiDCoCB1bmxvY2s6Cj4+Pj4gwqDCoMKgwqDCoCBpZiAodm1mLT5wdGUp Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHB0ZV91bm1hcF91bmxvY2sodm1mLT5wdGUsIHZtZi0+ cHRsKTsKPj4+Cj4+PiBCZW5jaG1hcmtpbmcgb3JkZXItMCBhbGxvY2F0aW9ucyBtaWdodCBiZSBp bnRlcmVzdGluZy4gVGhlcmUgd2lsbCBiZSBzb21lIGFkZGVkCj4+PiBjaGVja3MgKyBtdWx0aXBs ZSBsb29wcy9jb25kaXRpb25hbHMgZm9yIG9yZGVyLTAgdGhhdCBjb3VsZCBiZSBhdm9pZGVkIGJ5 IGhhdmluZwo+Pj4gdHdvIHNlcGFyYXRlIGNvZGUgcGF0aHMuIElmIHdlIGNhbid0IG1lYXN1cmUg YSBkaWZmZXJlbmNlLCBhbGwgZ29vZC4KPj4KPj4gWWVwIHdpbGwgZG8gLSB3aWxsIHBvc3QgbnVt YmVycyBvbmNlIEkgaGF2ZSB0aGVtLiBJJ3ZlIGJlZW4gYXNzdW1pbmcgdGhhdCB0aGUKPj4gbWFq b3IgY29zdCBpcyBjbGVhcmluZyB0aGUgcGFnZSwgYnV0IHBlcmhhcHMgSSdtIHdyb25nLgo+PgoK SSBhZGRlZCBhICJ3cml0ZS1mYXVsdC1ieXRlIiBiZW5jaG1hcmsgdG8gdGhlIG1pY3JvYmVuY2ht YXJrIHRvb2wgeW91IGdhdmUgbWUuClRoaXMgZWxpZGVzIHRoZSBub3JtYWwgbWVtc2V0IHBhZ2Ug cG9wdWxhdGlvbiByb3V0aW5lLCBhbmQgaW5zdGVhZCB3cml0ZXMgdGhlCmZpcnN0IGJ5dGUgb2Yg ZXZlcnkgcGFnZSB3aGlsZSB0aGUgdGltZXIgaXMgcnVubmluZy4KCkkgcmFuIHdpdGggMTAwIGl0 ZXJhdGlvbnMgcGVyIHJ1biwgdGhlbiByYW4gdGhlIHdob2xlIHRoaW5nIDE2IHRpbWVzLiBJIHJh biBpdApmb3IgYSBiYXNlbGluZSBrZXJuZWwsIGFzIHdlbGwgYXMgdjggKHRoaXMgc2VyaWVzKSBh bmQgdjkgKHdpdGggY2hhbmdlcyBmcm9tCnlvdXIgcmV2aWV3KS4gSSByZXBlYXRlZCBvbiBBbXBl cmUgQWx0cmEgKGJhcmUgbWV0YWwpIGFuZCBBcHBsZSBNMiAoVk0pOgoKfCAgICAgICAgICAgICAg fCAgICAgICAgbTIgdm0gICAgICAgIHwgICAgICAgIGFsdHJhICAgICAgICB8CnwtLS0tLS0tLS0t LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS06fAp8IGtlcm5l bCAgICAgICB8ICAgICBtZWFuIHwgIHN0ZF9yZWwgfCAgICAgbWVhbiB8ICBzdGRfcmVsIHwKfC0t LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLTp8 CnwgYmFzZWxpbmUgICAgIHwgICAwLjAwMCUgfCAgIDAuMzQxJSB8ICAgMC4wMDAlIHwgICAzLjU4 MSUgfAp8IGFub25mb2xpby12OCB8ICAgMC4wMDUlIHwgICAwLjI3MiUgfCAgIDUuMDY4JSB8ICAg MS4xMjglIHwKfCBhbm9uZm9saW8tdjkgfCAgLTAuMDEzJSB8ICAgMC40NDIlIHwgICAwLjEwNyUg fCAgIDEuNzg4JSB8CgpObyBtZWFzdXJhYmxlIGRpZmZlcmVuY2Ugb24gTTIsIGJ1dCBhbHRyYSBo YXMgYSBzbG93IGRvd24gaW4gdjggd2hpY2ggaXMgZml4ZWQKaW4gdjk7IExvb2tpbmcgYXQgdGhl IGNoYW5nZXMsIHRoaXMgaXMgZWl0aGVyIGRvd24gdG8gdGhlIG5ldyB1bmxpa2VseSgpIGZvciB0 aGUKdWZmZCBvciBkdWUgdG8gbW92aW5nIHRoZSBUSFAgb3JkZXIgY2hlY2sgdG8gYmUgaW5saW5l IHdpdGhpbgp0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoKS4KClNvIEkgaGF2ZSBhbGwgdGhlIGNo YW5nZXMgZG9uZSBhbmQgcGVyZiBudW1iZXJzIHRvIHNob3cgbm8gcmVncmVzc2lvbiBmb3IKb3Jk ZXItMC4gSSdtIGdvbm5hIGRvIGEgZmluYWwgY2hlY2sgYW5kIHBvc3QgdjkgbGF0ZXIgdG9kYXku CgpUaGFua3MsClJ5YW4KCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg==