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 95B16C433EF for ; Fri, 22 Jul 2022 08:09:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=9a6QDj6TDsPEYB7xMLLx9tvejJDBNrQqzK6S0J++aPE=; b=APaG6JqSdl7kN+ 5w7UxNSZ8f3JzzYtDwNwmuUb+6BzR97nK56Mig6XpliueKB2YuDVayWQ0rcAtNNiyUYUPbNK1AMWm Bvg9s6hZf1zrcmnIJfB7A4tqdmieKPUnoq3KViDQ+kGfSB1zo41fzRT/v8GsR5vtYjVNo+1qXzS26 RMzkng9FmVWF1JzOtYbVlYD5ZYWNlUq/5nMO3LPjDElIHGRZlNVmExjYJbq9mQ7oC+xicGfk1qLJt qoWct4bCe+jZZJalksbp1ib9Rsh75BXGgQFH9McIu0Y2gEWyRr5XSaFrmCLAQrP3MN4TSUrLU1aTK NEWTiQOOVYjH8f2kz+Jw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oEniI-000t7l-Py; Fri, 22 Jul 2022 08:08:46 +0000 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oEniE-000t4l-62 for linux-arm-kernel@lists.infradead.org; Fri, 22 Jul 2022 08:08:44 +0000 Received: from pps.filterd (m0098417.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26M7VKt4015731; Fri, 22 Jul 2022 08:08:13 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=pp1; bh=moe7py1YR/3sbMyhERKkLOYJQa6RY11Gn+EhzLrSnAU=; b=QF2VrZvw053k3Wngs5Q71LdWAc3sYhCCJW9ZaalGHbGSgxczdeaQDVLv3Pl3lXtqBbTH iL8/o4kPV49U50l3nHIqQU3XHWm4YBYEAR7tXyej+b2S5HAhaSptbeyQJjxqnWMSuwOq cK9aT5OmfjQjkmm8FArzgHh8VCgbUoGNQdnTVkbb2djLOcBP2+Bxm4AeHf+3mO3pZcks j5j+/s1RApU7vpGz9mThi+clhYpMI8o0mUB96AKIZoh78LP6lOojWZNLYmUGHYSzyTHR Q8XxPE60IBlSVP7LJx6VS2sqYJbv8DZIWYTRCy/OJkkVW0+7/HHuziEtb6CjYlSmYdo1 rg== Received: from ppma04ams.nl.ibm.com (63.31.33a9.ip4.static.sl-reverse.com [169.51.49.99]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3hfqk1gw0f-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 22 Jul 2022 08:08:12 +0000 Received: from pps.filterd (ppma04ams.nl.ibm.com [127.0.0.1]) by ppma04ams.nl.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 26M84wko032412; Fri, 22 Jul 2022 08:08:10 GMT Received: from b06cxnps4074.portsmouth.uk.ibm.com (d06relay11.portsmouth.uk.ibm.com [9.149.109.196]) by ppma04ams.nl.ibm.com with ESMTP id 3hbmy8yyd4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 22 Jul 2022 08:08:10 +0000 Received: from d06av26.portsmouth.uk.ibm.com (d06av26.portsmouth.uk.ibm.com [9.149.105.62]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 26M8871n12190038 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 22 Jul 2022 08:08:07 GMT Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 34E38AE04D; Fri, 22 Jul 2022 08:08:07 +0000 (GMT) Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5B5A1AE045; Fri, 22 Jul 2022 08:08:06 +0000 (GMT) Received: from [9.171.55.21] (unknown [9.171.55.21]) by d06av26.portsmouth.uk.ibm.com (Postfix) with ESMTP; Fri, 22 Jul 2022 08:08:06 +0000 (GMT) Message-ID: <46c1a7be-080b-3315-50cc-d3c848fd99e3@linux.ibm.com> Date: Fri, 22 Jul 2022 10:08:05 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH v2] random: handle archrandom in plural words Content-Language: en-US To: "Jason A. Donenfeld" , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, x86@kernel.org Cc: Will Deacon , Michael Ellerman , Alexander Gordeev , Thomas Gleixner , "H . Peter Anvin" , Catalin Marinas , Borislav Petkov , Heiko Carstens , Johannes Berg , Harald Freudenberger References: <20220717200356.75060-1-Jason@zx2c4.com> From: Holger Dengler In-Reply-To: <20220717200356.75060-1-Jason@zx2c4.com> X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: lvpUn2H9Z4VH3Q4iv7w5qBHHrwpuW8BU X-Proofpoint-GUID: lvpUn2H9Z4VH3Q4iv7w5qBHHrwpuW8BU X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-21_28,2022-07-21_02,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 mlxlogscore=999 clxscore=1011 bulkscore=0 priorityscore=1501 impostorscore=0 mlxscore=0 adultscore=0 malwarescore=0 spamscore=0 lowpriorityscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207220033 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220722_010842_375665_00392866 X-CRM114-Status: GOOD ( 41.03 ) 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 SGkgSmFzb24sCgpPbiAxNy8wNy8yMDIyIDIyOjAzLCBKYXNvbiBBLiBEb25lbmZlbGQgd3JvdGU6 Cj4gVGhlIGFyY2hyYW5kb20gaW50ZXJmYWNlIHdhcyBvcmlnaW5hbGx5IGRlc2lnbmVkIGZvciB4 ODYsIHdoaWNoIHN1cHBsaWVzCj4gUkRSQU5EL1JEU0VFRCBmb3IgcmVjZWl2aW5nIHJhbmRvbSB3 b3JkcyBpbnRvIHJlZ2lzdGVycywgcmVzdWx0aW5nIGluCj4gb25lIGZ1bmN0aW9uIHRvIGdlbmVy YXRlIGFuIGludCBhbmQgYW5vdGhlciB0byBnZW5lcmF0ZSBhIGxvbmcuIEhvd2V2ZXIsCj4gb3Ro ZXIgYXJjaGl0ZWN0dXJlcyBkb24ndCBmb2xsb3cgdGhpcy4KPiAKPiBPbiBhcm02NCwgdGhlIFNN Q0NDIFRSTkcgaW50ZXJmYWNlIGNhbiByZXR1cm4gYmV0d2VlbiAxIGFuZCAzIHdvcmRzLiBPbgo+ IHMzOTAsIHRoZSBDUEFDRiBUUk5HIGludGVyZmFjZSBjYW4gcmV0dXJuIGJldHdlZW4gMSBhbmQg MzIgd29yZHMgZm9yIHRoZQo+IHNhbWUgY29zdCBhcyBmb3Igb25lIHdvcmQuIE9uIFVNTCwgdGhl IG9zX2dldHJhbmRvbSgpIGludGVyZmFjZSBjYW4gcmV0dXJuCj4gYXJiaXRyYXJ5IGFtb3VudHMu Cj4gCj4gU28gY2hhbmdlIHRoZSBhcGkgc2lnbmF0dXJlIHRvIHRha2UgYSAid29yZHMiIHBhcmFt ZXRlciBkZXNpZ25hdGluZyB0aGUKPiBtYXhpbXVtIG51bWJlciBvZiB3b3JkcyByZXF1ZXN0ZWQs IGFuZCB0aGVuIHJldHVybiB0aGUgbnVtYmVyIG9mIHdvcmRzCj4gZ2VuZXJhdGVkLgoKV2h5IG5v dCBjaGFuZ2luZyB0aGUgQVBJIHRvIHRha2UgYnl0ZXMgaW5zdGVhZCBvZiB3b3Jkcz8gU3VyZSwg YXQgdGhlIG1vbWVudCBpdCBsb29rcyBsaWtlIGFsbCBwbGF0Zm9ybXMgd2l0aCBUUk5HIHN1cHBv cnQgYXJlIGFibGUgdG8gZGVsaXZlciBhdCBsZWFzdCBvbmUgd29yZCwgYnV0IGJ5dGVzIHdvdWxk IGJlIG1vcmUgZmxleGlibGUuIAoKPiBTaW5jZSBjYWxsZXJzIG5lZWQgdG8gY2hlY2sgdGhpcyBy ZXR1cm4gdmFsdWUgYW5kIGxvb3AgYW55d2F5LCBlYWNoIGFyY2gKPiBpbXBsZW1lbnRhdGlvbiBk b2VzIG5vdCBib3RoZXIgaW1wbGVtZW50aW5nIGl0cyBvd24gbG9vcCB0byB0cnkgYWdhaW4gdG8K PiBmaWxsIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHdvcmRzLiBBZGRpdGlvbmFsbHksIGFsbCBl eGlzdGluZyBjYWxsZXJzCj4gcGFzcyBpbiBhIGNvbnN0YW50IHdvcmRzIHBhcmFtZXRlci4gVGFr ZW4gdG9nZXRoZXIsIHRoZXNlIHR3byB0aGluZ3MKPiBtZWFuIHRoYXQgdGhlIGNvZGVnZW4gZG9l c24ndCByZWFsbHkgY2hhbmdlIG11Y2ggZm9yIG9uZS13b3JkLWF0LWEtdGltZQo+IHBsYXRmb3Jt cywgd2hpbGUgcGVyZm9ybWFuY2UgaXMgZ3JlYXRseSBpbXByb3ZlZCBvbiBwbGF0Zm9ybXMgc3Vj aCBhcwo+IHMzOTAuCj4gCj4gQ2M6IFdpbGwgRGVhY29uIDx3aWxsQGtlcm5lbC5vcmc+Cj4gQ2M6 IE1pY2hhZWwgRWxsZXJtYW4gPG1wZUBlbGxlcm1hbi5pZC5hdT4KPiBDYzogQWxleGFuZGVyIEdv cmRlZXYgPGFnb3JkZWV2QGxpbnV4LmlibS5jb20+Cj4gQ2M6IFRob21hcyBHbGVpeG5lciA8dGds eEBsaW51dHJvbml4LmRlPgo+IENjOiBILiBQZXRlciBBbnZpbiA8aHBhQHp5dG9yLmNvbT4KPiBD YzogQ2F0YWxpbiBNYXJpbmFzIDxjYXRhbGluLm1hcmluYXNAYXJtLmNvbT4KPiBDYzogQm9yaXNs YXYgUGV0a292IDxicEBzdXNlLmRlPgo+IENjOiBIZWlrbyBDYXJzdGVucyA8aGNhQGxpbnV4Lmli bS5jb20+Cj4gQ2M6IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+Cj4g Q2M6IEhhcmFsZCBGcmV1ZGVuYmVyZ2VyIDxmcmV1ZGVAbGludXguaWJtLmNvbT4KPiBTaWduZWQt b2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KPiAtLS0KPiAgYXJj aC9hcm02NC9pbmNsdWRlL2FzbS9hcmNocmFuZG9tLmggICB8IDEwMiArKysrKysrKysrKystLS0t LS0tLS0tLS0tLQo+ICBhcmNoL2FybTY0L2tlcm5lbC9rYXNsci5jICAgICAgICAgICAgIHwgICAy ICstCj4gIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hcmNocmFuZG9tLmggfCAgMzAgKystLS0t LS0KPiAgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyAgICAgICAgICB8ICAgMiArLQo+ICBh cmNoL3MzOTAvaW5jbHVkZS9hc20vYXJjaHJhbmRvbS5oICAgIHwgIDI5ICsrLS0tLS0tCj4gIGFy Y2gvdW0vaW5jbHVkZS9hc20vYXJjaHJhbmRvbS5oICAgICAgfCAgMjEgKystLS0tCj4gIGFyY2gv eDg2L2luY2x1ZGUvYXNtL2FyY2hyYW5kb20uaCAgICAgfCAgNDEgKy0tLS0tLS0tLS0KPiAgYXJj aC94ODYva2VybmVsL2VzcGZpeF82NC5jICAgICAgICAgICB8ICAgMiArLQo+ICBkcml2ZXJzL2No YXIvcmFuZG9tLmMgICAgICAgICAgICAgICAgIHwgIDQ1ICsrKysrKysrLS0tLQo+ICBpbmNsdWRl L2FzbS1nZW5lcmljL2FyY2hyYW5kb20uaCAgICAgIHwgIDE4ICstLS0tCj4gIGluY2x1ZGUvbGlu dXgvcmFuZG9tLmggICAgICAgICAgICAgICAgfCAgMTIgKy0tCj4gIDExIGZpbGVzIGNoYW5nZWQs IDExNiBpbnNlcnRpb25zKCspLCAxODggZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2Fy Y2gvYXJtNjQvaW5jbHVkZS9hc20vYXJjaHJhbmRvbS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2Fz bS9hcmNocmFuZG9tLmgKPiBpbmRleCBjM2I5ZmE1NmFmNjcuLjdhMjRmZGVlM2UyZiAxMDA2NDQK PiAtLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FyY2hyYW5kb20uaAo+ICsrKyBiL2FyY2gv YXJtNjQvaW5jbHVkZS9hc20vYXJjaHJhbmRvbS5oCj4gQEAgLTU4LDcgKzU4LDcgQEAgc3RhdGlj IGlubGluZSBib29sIF9fYXJtNjRfcm5kcnJzKHVuc2lnbmVkIGxvbmcgKnYpCj4gIAlyZXR1cm4g b2s7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgYXJjaF9nZXRf cmFuZG9tX2xvbmcodW5zaWduZWQgbG9uZyAqdikKPiArc3RhdGljIGlubGluZSBzaXplX3QgX19t dXN0X2NoZWNrIGFyY2hfZ2V0X3JhbmRvbV93b3Jkcyh1bnNpZ25lZCBsb25nICp2LCBzaXplX3Qg d29yZHMpCj4gIHsKPiAgCS8qCj4gIAkgKiBPbmx5IHN1cHBvcnQgdGhlIGdlbmVyaWMgaW50ZXJm YWNlIGFmdGVyIHdlIGhhdmUgZGV0ZWN0ZWQKPiBAQCAtNjYsMjcgKzY2LDE1IEBAIHN0YXRpYyBp bmxpbmUgYm9vbCBfX211c3RfY2hlY2sgYXJjaF9nZXRfcmFuZG9tX2xvbmcodW5zaWduZWQgbG9u ZyAqdikKPiAgCSAqIGNwdWZlYXR1cmUgY29kZSBhbmQgd2l0aCBwb3RlbnRpYWwgc2NoZWR1bGlu ZyBiZXR3ZWVuIENQVXMKPiAgCSAqIHdpdGggYW5kIHdpdGhvdXQgdGhlIGZlYXR1cmUuCj4gIAkg Ki8KPiAtCWlmIChjcHVzX2hhdmVfY29uc3RfY2FwKEFSTTY0X0hBU19STkcpICYmIF9fYXJtNjRf cm5kcih2KSkKPiAtCQlyZXR1cm4gdHJ1ZTsKPiAtCXJldHVybiBmYWxzZTsKPiArCWlmICh3b3Jk cyAmJiBjcHVzX2hhdmVfY29uc3RfY2FwKEFSTTY0X0hBU19STkcpICYmIF9fYXJtNjRfcm5kcih2 KSkKPiArCQlyZXR1cm4gMTsKPiArCXJldHVybiAwOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW5saW5l IGJvb2wgX19tdXN0X2NoZWNrIGFyY2hfZ2V0X3JhbmRvbV9pbnQodW5zaWduZWQgaW50ICp2KQo+ ICtzdGF0aWMgaW5saW5lIHNpemVfdCBfX211c3RfY2hlY2sgYXJjaF9nZXRfcmFuZG9tX3NlZWRf d29yZHModW5zaWduZWQgbG9uZyAqdiwgc2l6ZV90IHdvcmRzKQo+ICB7Cj4gLQlpZiAoY3B1c19o YXZlX2NvbnN0X2NhcChBUk02NF9IQVNfUk5HKSkgewo+IC0JCXVuc2lnbmVkIGxvbmcgdmFsOwo+ IC0KPiAtCQlpZiAoX19hcm02NF9ybmRyKCZ2YWwpKSB7Cj4gLQkJCSp2ID0gdmFsOwo+IC0JCQly ZXR1cm4gdHJ1ZTsKPiAtCQl9Cj4gLQl9Cj4gLQlyZXR1cm4gZmFsc2U7Cj4gLX0KPiAtCj4gLXN0 YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgYXJjaF9nZXRfcmFuZG9tX3NlZWRfbG9uZyh1 bnNpZ25lZCBsb25nICp2KQo+IC17Cj4gLQlzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXM7Cj4gKwlp ZiAoIXdvcmRzKQo+ICsJCXJldHVybiAwOwo+ICAKPiAgCS8qCj4gIAkgKiBXZSBwcmVmZXIgdGhl IFNNQ0NDIGNhbGwsIHNpbmNlIGl0cyBzZW1hbnRpY3MgKHJldHVybiBhY3R1YWwKPiBAQCAtOTUs MTAgKzgzLDIzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgYXJjaF9nZXRfcmFu ZG9tX3NlZWRfbG9uZyh1bnNpZ25lZCBsb25nICp2KQo+ICAJICogKHRoZSBvdXRwdXQgb2YgYSBw c2V1ZG8gUk5HIGZyZXNobHkgc2VlZGVkIGJ5IGEgVFJORykuCj4gIAkgKi8KPiAgCWlmIChzbWNj Y190cm5nX2F2YWlsYWJsZSkgewo+IC0JCWFybV9zbWNjY18xXzFfaW52b2tlKEFSTV9TTUNDQ19U Uk5HX1JORDY0LCA2NCwgJnJlcyk7Cj4gKwkJc3RydWN0IGFybV9zbWNjY19yZXMgcmVzOwo+ICsK PiArCQl3b3JkcyA9IG1pbl90KHNpemVfdCwgMywgd29yZHMpOwo+ICsJCWFybV9zbWNjY18xXzFf aW52b2tlKEFSTV9TTUNDQ19UUk5HX1JORDY0LCB3b3JkcyAqIDY0LCAmcmVzKTsKPiAgCQlpZiAo KGludClyZXMuYTAgPj0gMCkgewo+IC0JCQkqdiA9IHJlcy5hMzsKPiAtCQkJcmV0dXJuIHRydWU7 Cj4gKwkJCXN3aXRjaCAod29yZHMpIHsKPiArCQkJY2FzZSAzOgo+ICsJCQkJKnYrKyA9IHJlcy5h MTsKPiArCQkJCWZhbGx0aHJvdWdoOwo+ICsJCQljYXNlIDI6Cj4gKwkJCQkqdisrID0gcmVzLmEy Owo+ICsJCQkJZmFsbHRocm91Z2g7Cj4gKwkJCWNhc2UgMToKPiArCQkJCSp2KysgPSByZXMuYTM7 Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCQlyZXR1cm4gd29yZHM7Cj4gIAkJfQo+ICAJfQo+ ICAKPiBAQCAtMTA4LDMyICsxMDksOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNr IGFyY2hfZ2V0X3JhbmRvbV9zZWVkX2xvbmcodW5zaWduZWQgbG9uZyAqdikKPiAgCSAqIGVub3Vn aCB0byBpbXBsZW1lbnQgdGhpcyBBUEkgaWYgbm8gb3RoZXIgZW50cm9weSBzb3VyY2UgZXhpc3Rz Lgo+ICAJICovCj4gIAlpZiAoY3B1c19oYXZlX2NvbnN0X2NhcChBUk02NF9IQVNfUk5HKSAmJiBf X2FybTY0X3JuZHJycyh2KSkKPiAtCQlyZXR1cm4gdHJ1ZTsKPiArCQlyZXR1cm4gMTsKPiAgCj4g LQlyZXR1cm4gZmFsc2U7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hl Y2sgYXJjaF9nZXRfcmFuZG9tX3NlZWRfaW50KHVuc2lnbmVkIGludCAqdikKPiAtewo+IC0Jc3Ry dWN0IGFybV9zbWNjY19yZXMgcmVzOwo+IC0JdW5zaWduZWQgbG9uZyB2YWw7Cj4gLQo+IC0JaWYg KHNtY2NjX3RybmdfYXZhaWxhYmxlKSB7Cj4gLQkJYXJtX3NtY2NjXzFfMV9pbnZva2UoQVJNX1NN Q0NDX1RSTkdfUk5ENjQsIDMyLCAmcmVzKTsKPiAtCQlpZiAoKGludClyZXMuYTAgPj0gMCkgewo+ IC0JCQkqdiA9IHJlcy5hMyAmIEdFTk1BU0soMzEsIDApOwo+IC0JCQlyZXR1cm4gdHJ1ZTsKPiAt CQl9Cj4gLQl9Cj4gLQo+IC0JaWYgKGNwdXNfaGF2ZV9jb25zdF9jYXAoQVJNNjRfSEFTX1JORykp IHsKPiAtCQlpZiAoX19hcm02NF9ybmRycnMoJnZhbCkpIHsKPiAtCQkJKnYgPSB2YWw7Cj4gLQkJ CXJldHVybiB0cnVlOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlyZXR1cm4gZmFsc2U7Cj4gKwlyZXR1 cm4gMDsKPiAgfQo+ICAKPiAgc3RhdGljIGlubGluZSBib29sIF9faW5pdCBfX2Vhcmx5X2NwdV9o YXNfcm5kcih2b2lkKQo+IEBAIC0xNDMsMjYgKzEyMSw0MCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg X19pbml0IF9fZWFybHlfY3B1X2hhc19ybmRyKHZvaWQpCj4gIAlyZXR1cm4gKGZ0ciA+PiBJRF9B QTY0SVNBUjBfRUwxX1JORFJfU0hJRlQpICYgMHhmOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW5saW5l IGJvb2wgX19pbml0IF9fbXVzdF9jaGVjawo+IC1hcmNoX2dldF9yYW5kb21fc2VlZF9sb25nX2Vh cmx5KHVuc2lnbmVkIGxvbmcgKnYpCj4gK3N0YXRpYyBpbmxpbmUgc2l6ZV90IF9faW5pdCBfX211 c3RfY2hlY2sKPiArYXJjaF9nZXRfcmFuZG9tX3NlZWRfd29yZHNfZWFybHkodW5zaWduZWQgbG9u ZyAqdiwgc2l6ZV90IHdvcmRzKQo+ICB7Cj4gIAlXQVJOX09OKHN5c3RlbV9zdGF0ZSAhPSBTWVNU RU1fQk9PVElORyk7Cj4gIAo+ICsJaWYgKCF3b3JkcykKPiArCQlyZXR1cm4gMDsKPiArCj4gIAlp ZiAoc21jY2NfdHJuZ19hdmFpbGFibGUpIHsKPiAgCQlzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXM7 Cj4gIAo+IC0JCWFybV9zbWNjY18xXzFfaW52b2tlKEFSTV9TTUNDQ19UUk5HX1JORDY0LCA2NCwg JnJlcyk7Cj4gKwkJd29yZHMgPSBtaW5fdChzaXplX3QsIDMsIHdvcmRzKTsKPiArCQlhcm1fc21j Y2NfMV8xX2ludm9rZShBUk1fU01DQ0NfVFJOR19STkQ2NCwgd29yZHMgKiA2NCwgJnJlcyk7Cj4g IAkJaWYgKChpbnQpcmVzLmEwID49IDApIHsKPiAtCQkJKnYgPSByZXMuYTM7Cj4gLQkJCXJldHVy biB0cnVlOwo+ICsJCQlzd2l0Y2ggKHdvcmRzKSB7Cj4gKwkJCWNhc2UgMzoKPiArCQkJCSp2Kysg PSByZXMuYTE7Cj4gKwkJCQlmYWxsdGhyb3VnaDsKPiArCQkJY2FzZSAyOgo+ICsJCQkJKnYrKyA9 IHJlcy5hMjsKPiArCQkJCWZhbGx0aHJvdWdoOwo+ICsJCQljYXNlIDE6Cj4gKwkJCQkqdisrID0g cmVzLmEzOwo+ICsJCQkJYnJlYWs7Cj4gKwkJCX0KPiArCQkJcmV0dXJuIHdvcmRzOwo+ICAJCX0K PiAgCX0KPiAgCj4gIAlpZiAoX19lYXJseV9jcHVfaGFzX3JuZHIoKSAmJiBfX2FybTY0X3JuZHIo dikpCj4gLQkJcmV0dXJuIHRydWU7Cj4gKwkJcmV0dXJuIDE7Cj4gIAo+IC0JcmV0dXJuIGZhbHNl Owo+ICsJcmV0dXJuIDA7Cj4gIH0KPiAtI2RlZmluZSBhcmNoX2dldF9yYW5kb21fc2VlZF9sb25n X2Vhcmx5IGFyY2hfZ2V0X3JhbmRvbV9zZWVkX2xvbmdfZWFybHkKPiArI2RlZmluZSBhcmNoX2dl dF9yYW5kb21fc2VlZF93b3Jkc19lYXJseSBhcmNoX2dldF9yYW5kb21fc2VlZF93b3Jkc19lYXJs eQo+ICAKPiAgI2VuZGlmIC8qIF9BU01fQVJDSFJBTkRPTV9IICovCj4gZGlmZiAtLWdpdCBhL2Fy Y2gvYXJtNjQva2VybmVsL2thc2xyLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9rYXNsci5jCj4gaW5k ZXggNDE4YjJiYmExNTIxLi5lZDc3YWZlMTYxMjEgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9hcm02NC9r ZXJuZWwva2FzbHIuYwo+ICsrKyBiL2FyY2gvYXJtNjQva2VybmVsL2thc2xyLmMKPiBAQCAtMTA2 LDcgKzEwNiw3IEBAIHU2NCBfX2luaXQga2FzbHJfZWFybHlfaW5pdCh2b2lkKQo+ICAJICogYW5k IHN1cHBvcnRlZC4KPiAgCSAqLwo+ICAKPiAtCWlmIChhcmNoX2dldF9yYW5kb21fc2VlZF9sb25n X2Vhcmx5KCZyYXcpKQo+ICsJaWYgKGFyY2hfZ2V0X3JhbmRvbV9zZWVkX3dvcmRzX2Vhcmx5KCZy YXcsIDEpKQo+ICAJCXNlZWQgXj0gcmF3Owo+ICAKPiAgCWlmICghc2VlZCkgewo+IGRpZmYgLS1n aXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXJjaHJhbmRvbS5oIGIvYXJjaC9wb3dlcnBj L2luY2x1ZGUvYXNtL2FyY2hyYW5kb20uaAo+IGluZGV4IDI1YmE2NWRmNmIxYS4uYmYyMTgyZjgw NDgwIDEwMDY0NAo+IC0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hcmNocmFuZG9tLmgK PiArKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXJjaHJhbmRvbS5oCj4gQEAgLTQsMzQg KzQsMTYgQEAKPiAgCj4gICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgo+ICAKPiAtc3RhdGljIGlu bGluZSBib29sIF9fbXVzdF9jaGVjayBhcmNoX2dldF9yYW5kb21fbG9uZyh1bnNpZ25lZCBsb25n ICp2KQo+ICtzdGF0aWMgaW5saW5lIHNpemVfdCBfX211c3RfY2hlY2sgYXJjaF9nZXRfcmFuZG9t X3dvcmRzKHVuc2lnbmVkIGxvbmcgKnYsIHNpemVfdCB3b3JkcykKPiAgewo+IC0JcmV0dXJuIGZh bHNlOwo+ICsJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3Rf Y2hlY2sgYXJjaF9nZXRfcmFuZG9tX2ludCh1bnNpZ25lZCBpbnQgKnYpCj4gK3N0YXRpYyBpbmxp bmUgc2l6ZV90IF9fbXVzdF9jaGVjayBhcmNoX2dldF9yYW5kb21fc2VlZF93b3Jkcyh1bnNpZ25l ZCBsb25nICp2LCBzaXplX3Qgd29yZHMpCj4gIHsKPiAtCXJldHVybiBmYWxzZTsKPiAtfQo+IC0K PiAtc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBhcmNoX2dldF9yYW5kb21fc2VlZF9s b25nKHVuc2lnbmVkIGxvbmcgKnYpCj4gLXsKPiAtCWlmIChwcGNfbWQuZ2V0X3JhbmRvbV9zZWVk KQo+IC0JCXJldHVybiBwcGNfbWQuZ2V0X3JhbmRvbV9zZWVkKHYpOwo+IC0KPiAtCXJldHVybiBm YWxzZTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBhcmNoX2dl dF9yYW5kb21fc2VlZF9pbnQodW5zaWduZWQgaW50ICp2KQo+IC17Cj4gLQl1bnNpZ25lZCBsb25n IHZhbDsKPiAtCWJvb2wgcmM7Cj4gLQo+IC0JcmMgPSBhcmNoX2dldF9yYW5kb21fc2VlZF9sb25n KCZ2YWwpOwo+IC0JaWYgKHJjKQo+IC0JCSp2ID0gdmFsOwo+IC0KPiAtCXJldHVybiByYzsKPiAr CWlmICh3b3JkcyAmJiBwcGNfbWQuZ2V0X3JhbmRvbV9zZWVkICYmIHBwY19tZC5nZXRfcmFuZG9t X3NlZWQodikpCj4gKwkJcmV0dXJuIDE7Cj4gKwlyZXR1cm4gMDsKPiAgfQo+ICAKPiAgI2lmZGVm IENPTkZJR19QUENfUE9XRVJOVgo+IGRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2sz c19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYwo+IGluZGV4IGUwOGZiMzEyNGRj YS4uMThiMmQ4MDk5NmI2IDEwMDY0NAo+IC0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2 LmMKPiArKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCj4gQEAgLTEyMDcsNyArMTIw Nyw3IEBAIGludCBrdm1wcGNfcHNlcmllc19kb19oY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUp Cj4gIAkJYnJlYWs7Cj4gICNlbmRpZgo+ICAJY2FzZSBIX1JBTkRPTToKPiAtCQlpZiAoIWFyY2hf Z2V0X3JhbmRvbV9zZWVkX2xvbmcoJnZjcHUtPmFyY2gucmVncy5ncHJbNF0pKQo+ICsJCWlmICgh YXJjaF9nZXRfcmFuZG9tX3NlZWRfd29yZHMoJnZjcHUtPmFyY2gucmVncy5ncHJbNF0sIDEpKQo+ ICAJCQlyZXQgPSBIX0hBUkRXQVJFOwo+ICAJCWJyZWFrOwo+ICAJY2FzZSBIX1JQVF9JTlZBTElE QVRFOgo+IGRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXJjaHJhbmRvbS5oIGIv YXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FyY2hyYW5kb20uaAo+IGluZGV4IDBhMWMyZTY2YzcwOS4u MjlmMWE5YmMzODY3IDEwMDY0NAo+IC0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hcmNocmFu ZG9tLmgKPiArKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXJjaHJhbmRvbS5oCj4gQEAgLTE4 LDM0ICsxOCwxOSBAQAo+ICBERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoczM5MF9hcmNoX3JhbmRv bV9hdmFpbGFibGUpOwo+ICBleHRlcm4gYXRvbWljNjRfdCBzMzkwX2FyY2hfcmFuZG9tX2NvdW50 ZXI7Cj4gIAo+IC1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGFyY2hfZ2V0X3JhbmRv bV9sb25nKHVuc2lnbmVkIGxvbmcgKnYpCj4gK3N0YXRpYyBpbmxpbmUgc2l6ZV90IF9fbXVzdF9j aGVjayBhcmNoX2dldF9yYW5kb21fd29yZHModW5zaWduZWQgbG9uZyAqdiwgc2l6ZV90IHdvcmRz KQo+ICB7Cj4gLQlyZXR1cm4gZmFsc2U7Cj4gKwlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGlj IGlubGluZSBib29sIF9fbXVzdF9jaGVjayBhcmNoX2dldF9yYW5kb21faW50KHVuc2lnbmVkIGlu dCAqdikKPiAtewo+IC0JcmV0dXJuIGZhbHNlOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIGJv b2wgX19tdXN0X2NoZWNrIGFyY2hfZ2V0X3JhbmRvbV9zZWVkX2xvbmcodW5zaWduZWQgbG9uZyAq dikKPiAtewo+IC0JaWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KCZzMzkwX2FyY2hfcmFuZG9tX2F2 YWlsYWJsZSkpIHsKPiAtCQljcGFjZl90cm5nKE5VTEwsIDAsICh1OCAqKXYsIHNpemVvZigqdikp Owo+IC0JCWF0b21pYzY0X2FkZChzaXplb2YoKnYpLCAmczM5MF9hcmNoX3JhbmRvbV9jb3VudGVy KTsKPiAtCQlyZXR1cm4gdHJ1ZTsKPiAtCX0KPiAtCXJldHVybiBmYWxzZTsKPiAtfQo+IC0KPiAt c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBhcmNoX2dldF9yYW5kb21fc2VlZF9pbnQo dW5zaWduZWQgaW50ICp2KQo+ICtzdGF0aWMgaW5saW5lIHNpemVfdCBfX211c3RfY2hlY2sgYXJj aF9nZXRfcmFuZG9tX3NlZWRfd29yZHModW5zaWduZWQgbG9uZyAqdiwgc2l6ZV90IHdvcmRzKQo+ ICB7Cj4gIAlpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJnMzOTBfYXJjaF9yYW5kb21fYXZhaWxh YmxlKSkgewo+IC0JCWNwYWNmX3RybmcoTlVMTCwgMCwgKHU4ICopdiwgc2l6ZW9mKCp2KSk7Cj4g LQkJYXRvbWljNjRfYWRkKHNpemVvZigqdiksICZzMzkwX2FyY2hfcmFuZG9tX2NvdW50ZXIpOwo+ IC0JCXJldHVybiB0cnVlOwo+ICsJCWNwYWNmX3RybmcoTlVMTCwgMCwgKHU4ICopdiwgd29yZHMg KiBzaXplb2YoKnYpKTsKPiArCQlhdG9taWM2NF9hZGQod29yZHMgKiBzaXplb2YoKnYpLCAmczM5 MF9hcmNoX3JhbmRvbV9jb3VudGVyKTsKPiArCQlyZXR1cm4gd29yZHM7Cj4gIAl9Cj4gLQlyZXR1 cm4gZmFsc2U7Cj4gKwlyZXR1cm4gMDsKPiAgfQo+ICAKPiAgI2VuZGlmIC8qIF9BU01fUzM5MF9B UkNIUkFORE9NX0ggKi8KPiBkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9hcmNocmFu ZG9tLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2FyY2hyYW5kb20uaAo+IGluZGV4IDJmMjRjYjk2 MzkxZC4uNmJjYmQ0N2ZjYjYyIDEwMDY0NAo+IC0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vYXJj aHJhbmRvbS5oCj4gKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9hcmNocmFuZG9tLmgKPiBAQCAt NywyNCArNywxOSBAQAo+ICAvKiBUaGlzIGlzIGZyb20gPG9zLmg+LCBidXQgYmV0dGVyIG5vdCB0 byAjaW5jbHVkZSB0aGF0IGluIGEgZ2xvYmFsIGhlYWRlciBoZXJlLiAqLwo+ICBzc2l6ZV90IG9z X2dldHJhbmRvbSh2b2lkICpidWYsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7Cj4g IAo+IC1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGFyY2hfZ2V0X3JhbmRvbV9sb25n KHVuc2lnbmVkIGxvbmcgKnYpCj4gK3N0YXRpYyBpbmxpbmUgc2l6ZV90IF9fbXVzdF9jaGVjayBh cmNoX2dldF9yYW5kb21fd29yZHModW5zaWduZWQgbG9uZyAqdiwgc2l6ZV90IHdvcmRzKQo+ICB7 Cj4gLQlyZXR1cm4gb3NfZ2V0cmFuZG9tKHYsIHNpemVvZigqdiksIDApID09IHNpemVvZigqdik7 Cj4gLX0KPiArCXNzaXplX3QgcmV0Owo+ICAKPiAtc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9j aGVjayBhcmNoX2dldF9yYW5kb21faW50KHVuc2lnbmVkIGludCAqdikKPiAtewo+IC0JcmV0dXJu IG9zX2dldHJhbmRvbSh2LCBzaXplb2YoKnYpLCAwKSA9PSBzaXplb2YoKnYpOwo+IC19Cj4gLQo+ IC1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGFyY2hfZ2V0X3JhbmRvbV9zZWVkX2xv bmcodW5zaWduZWQgbG9uZyAqdikKPiAtewo+IC0JcmV0dXJuIGZhbHNlOwo+ICsJcmV0ID0gb3Nf Z2V0cmFuZG9tKHYsIHdvcmRzICogc2l6ZW9mKCp2KSwgMCk7Cj4gKwlpZiAocmV0IDwgMCkKPiAr CQlyZXR1cm4gMDsKPiArCXJldHVybiByZXQgLyBzaXplb2YoKnYpOwo+ICB9Cj4gIAo+IC1zdGF0 aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGFyY2hfZ2V0X3JhbmRvbV9zZWVkX2ludCh1bnNp Z25lZCBpbnQgKnYpCj4gK3N0YXRpYyBpbmxpbmUgc2l6ZV90IF9fbXVzdF9jaGVjayBhcmNoX2dl dF9yYW5kb21fc2VlZF93b3Jkcyh1bnNpZ25lZCBsb25nICp2LCBzaXplX3Qgd29yZHMpCj4gIHsK PiAtCXJldHVybiBmYWxzZTsKPiArCXJldHVybiAwOwo+ICB9Cj4gIAo+ICAjZW5kaWYKPiBkaWZm IC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXJjaHJhbmRvbS5oIGIvYXJjaC94ODYvaW5j bHVkZS9hc20vYXJjaHJhbmRvbS5oCj4gaW5kZXggZmIyMzViNjk2MTc1Li5hMTcxN2I4MWQ4NzYg MTAwNjQ0Cj4gLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXJjaHJhbmRvbS5oCj4gKysrIGIv YXJjaC94ODYvaW5jbHVkZS9hc20vYXJjaHJhbmRvbS5oCj4gQEAgLTMxLDIwICszMSw2IEBAIHN0 YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgcmRyYW5kX2xvbmcodW5zaWduZWQgbG9uZyAq dikKPiAgCXJldHVybiBmYWxzZTsKPiAgfQo+ICAKPiAtc3RhdGljIGlubGluZSBib29sIF9fbXVz dF9jaGVjayByZHJhbmRfaW50KHVuc2lnbmVkIGludCAqdikKPiAtewo+IC0JYm9vbCBvazsKPiAt CXVuc2lnbmVkIGludCByZXRyeSA9IFJEUkFORF9SRVRSWV9MT09QUzsKPiAtCWRvIHsKPiAtCQlh c20gdm9sYXRpbGUoInJkcmFuZCAlW291dF0iCj4gLQkJCSAgICAgQ0NfU0VUKGMpCj4gLQkJCSAg ICAgOiBDQ19PVVQoYykgKG9rKSwgW291dF0gIj1yIiAoKnYpKTsKPiAtCQlpZiAob2spCj4gLQkJ CXJldHVybiB0cnVlOwo+IC0JfSB3aGlsZSAoLS1yZXRyeSk7Cj4gLQlyZXR1cm4gZmFsc2U7Cj4g LX0KPiAtCj4gIHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgcmRzZWVkX2xvbmcodW5z aWduZWQgbG9uZyAqdikKPiAgewo+ICAJYm9vbCBvazsKPiBAQCAtNTQsMzggKzQwLDE5IEBAIHN0 YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgcmRzZWVkX2xvbmcodW5zaWduZWQgbG9uZyAq dikKPiAgCXJldHVybiBvazsKPiAgfQo+ICAKPiAtc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9j aGVjayByZHNlZWRfaW50KHVuc2lnbmVkIGludCAqdikKPiAtewo+IC0JYm9vbCBvazsKPiAtCWFz bSB2b2xhdGlsZSgicmRzZWVkICVbb3V0XSIKPiAtCQkgICAgIENDX1NFVChjKQo+IC0JCSAgICAg OiBDQ19PVVQoYykgKG9rKSwgW291dF0gIj1yIiAoKnYpKTsKPiAtCXJldHVybiBvazsKPiAtfQo+ IC0KPiAgLyoKPiAgICogVGhlc2UgYXJlIHRoZSBnZW5lcmljIGludGVyZmFjZXM7IHRoZXkgbXVz dCBub3QgYmUgZGVjbGFyZWQgaWYgdGhlCj4gICAqIHN0dWJzIGluIDxsaW51eC9yYW5kb20uaD4g YXJlIHRvIGJlIGludm9rZWQuCj4gICAqLwo+ICAKPiAtc3RhdGljIGlubGluZSBib29sIF9fbXVz dF9jaGVjayBhcmNoX2dldF9yYW5kb21fbG9uZyh1bnNpZ25lZCBsb25nICp2KQo+IC17Cj4gLQly ZXR1cm4gc3RhdGljX2NwdV9oYXMoWDg2X0ZFQVRVUkVfUkRSQU5EKSA/IHJkcmFuZF9sb25nKHYp IDogZmFsc2U7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgYXJj aF9nZXRfcmFuZG9tX2ludCh1bnNpZ25lZCBpbnQgKnYpCj4gLXsKPiAtCXJldHVybiBzdGF0aWNf Y3B1X2hhcyhYODZfRkVBVFVSRV9SRFJBTkQpID8gcmRyYW5kX2ludCh2KSA6IGZhbHNlOwo+IC19 Cj4gLQo+IC1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGFyY2hfZ2V0X3JhbmRvbV9z ZWVkX2xvbmcodW5zaWduZWQgbG9uZyAqdikKPiArc3RhdGljIGlubGluZSBzaXplX3QgX19tdXN0 X2NoZWNrIGFyY2hfZ2V0X3JhbmRvbV93b3Jkcyh1bnNpZ25lZCBsb25nICp2LCBzaXplX3Qgd29y ZHMpCj4gIHsKPiAtCXJldHVybiBzdGF0aWNfY3B1X2hhcyhYODZfRkVBVFVSRV9SRFNFRUQpID8g cmRzZWVkX2xvbmcodikgOiBmYWxzZTsKPiArCXJldHVybiB3b3JkcyAmJiBzdGF0aWNfY3B1X2hh cyhYODZfRkVBVFVSRV9SRFJBTkQpICYmIHJkcmFuZF9sb25nKHYpID8gMSA6IDA7Cj4gIH0KPiAg Cj4gLXN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgYXJjaF9nZXRfcmFuZG9tX3NlZWRf aW50KHVuc2lnbmVkIGludCAqdikKPiArc3RhdGljIGlubGluZSBzaXplX3QgX19tdXN0X2NoZWNr IGFyY2hfZ2V0X3JhbmRvbV9zZWVkX3dvcmRzKHVuc2lnbmVkIGxvbmcgKnYsIHNpemVfdCB3b3Jk cykKPiAgewo+IC0JcmV0dXJuIHN0YXRpY19jcHVfaGFzKFg4Nl9GRUFUVVJFX1JEU0VFRCkgPyBy ZHNlZWRfaW50KHYpIDogZmFsc2U7Cj4gKwlyZXR1cm4gd29yZHMgJiYgc3RhdGljX2NwdV9oYXMo WDg2X0ZFQVRVUkVfUkRTRUVEKSAmJiByZHNlZWRfbG9uZyh2KSA/IDEgOiAwOwo+ICB9Cj4gIAo+ ICAjaWZuZGVmIENPTkZJR19VTUwKPiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VzcGZp eF82NC5jIGIvYXJjaC94ODYva2VybmVsL2VzcGZpeF82NC5jCj4gaW5kZXggNGZlN2FmNThjZmUx Li5mNDZjOWZmM2MwZDQgMTAwNjQ0Cj4gLS0tIGEvYXJjaC94ODYva2VybmVsL2VzcGZpeF82NC5j Cj4gKysrIGIvYXJjaC94ODYva2VybmVsL2VzcGZpeF82NC5jCj4gQEAgLTEwMCw3ICsxMDAsNyBA QCBzdGF0aWMgdm9pZCBpbml0X2VzcGZpeF9yYW5kb20odm9pZCkKPiAgCSAqIFRoaXMgaXMgcnVu IGJlZm9yZSB0aGUgZW50cm9weSBwb29scyBhcmUgaW5pdGlhbGl6ZWQsCj4gIAkgKiBidXQgdGhp cyBpcyBob3BlZnVsbHkgYmV0dGVyIHRoYW4gbm90aGluZy4KPiAgCSAqLwo+IC0JaWYgKCFhcmNo X2dldF9yYW5kb21fbG9uZygmcmFuZCkpIHsKPiArCWlmICghYXJjaF9nZXRfcmFuZG9tX3dvcmRz KCZyYW5kLCAxKSkgewo+ICAJCS8qIFRoZSBjb25zdGFudCBpcyBhbiBhcmJpdHJhcnkgbGFyZ2Ug cHJpbWUgKi8KPiAgCQlyYW5kID0gcmR0c2MoKTsKPiAgCQlyYW5kICo9IDB4YzM0NWM2YjcyZmQx NjEyM1VMOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2No YXIvcmFuZG9tLmMKPiBpbmRleCAwYzY1NjhhZTVmNjguLjcwZDhkMWQ3ZTJkNyAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKPiArKysgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMK PiBAQCAtNTk2LDEyICs1OTYsMjAgQEAgc3RhdGljIHZvaWQgZXh0cmFjdF9lbnRyb3B5KHZvaWQg KmJ1Ziwgc2l6ZV90IGxlbikKPiAgCQl1bnNpZ25lZCBsb25nIHJkc2VlZFszMiAvIHNpemVvZihs b25nKV07Cj4gIAkJc2l6ZV90IGNvdW50ZXI7Cj4gIAl9IGJsb2NrOwo+IC0Jc2l6ZV90IGk7Cj4g KwlzaXplX3QgaSwgd29yZHM7Cj4gIAo+IC0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYmxv Y2sucmRzZWVkKTsgKytpKSB7Cj4gLQkJaWYgKCFhcmNoX2dldF9yYW5kb21fc2VlZF9sb25nKCZi bG9jay5yZHNlZWRbaV0pICYmCj4gLQkJICAgICFhcmNoX2dldF9yYW5kb21fbG9uZygmYmxvY2su cmRzZWVkW2ldKSkKPiAtCQkJYmxvY2sucmRzZWVkW2ldID0gcmFuZG9tX2dldF9lbnRyb3B5KCk7 Cj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShibG9jay5yZHNlZWQpOykgewo+ICsJCXdv cmRzID0gYXJjaF9nZXRfcmFuZG9tX3NlZWRfd29yZHMoJmJsb2NrLnJkc2VlZFtpXSwgQVJSQVlf U0laRShibG9jay5yZHNlZWQpIC0gaSk7Cj4gKwkJaWYgKHdvcmRzKSB7Cj4gKwkJCWkgKz0gd29y ZHM7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCQl3b3JkcyA9IGFyY2hfZ2V0X3JhbmRvbV93 b3JkcygmYmxvY2sucmRzZWVkW2ldLCBBUlJBWV9TSVpFKGJsb2NrLnJkc2VlZCkgLSBpKTsKPiAr CQlpZiAod29yZHMpIHsKPiArCQkJaSArPSB3b3JkczsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ ICsJCWJsb2NrLnJkc2VlZFtpKytdID0gcmFuZG9tX2dldF9lbnRyb3B5KCk7Cj4gIAl9Cj4gIAo+ ICAJc3Bpbl9sb2NrX2lycXNhdmUoJmlucHV0X3Bvb2wubG9jaywgZmxhZ3MpOwo+IEBAIC03NzYs MjIgKzc4NCwzMSBAQCBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBtX25vdGlmaWVyID0g eyAubm90aWZpZXJfY2FsbCA9IHJhbmRvbV9wbV9ub3RpZmljYQo+ICBpbnQgX19pbml0IHJhbmRv bV9pbml0KGNvbnN0IGNoYXIgKmNvbW1hbmRfbGluZSkKPiAgewo+ICAJa3RpbWVfdCBub3cgPSBr dGltZV9nZXRfcmVhbCgpOwo+IC0JdW5zaWduZWQgaW50IGksIGFyY2hfYml0czsKPiAtCXVuc2ln bmVkIGxvbmcgZW50cm9weTsKPiArCXNpemVfdCBpLCB3b3JkcywgYXJjaF9iaXRzOwo+ICsJdW5z aWduZWQgbG9uZyBlbnRyb3B5W0JMQUtFMlNfQkxPQ0tfU0laRSAvIHNpemVvZihsb25nKV07Cj4g IAo+ICAjaWYgZGVmaW5lZChMQVRFTlRfRU5UUk9QWV9QTFVHSU4pCj4gIAlzdGF0aWMgY29uc3Qg dTggY29tcGlsZXRpbWVfc2VlZFtCTEFLRTJTX0JMT0NLX1NJWkVdIF9faW5pdGNvbnN0IF9fbGF0 ZW50X2VudHJvcHk7Cj4gIAlfbWl4X3Bvb2xfYnl0ZXMoY29tcGlsZXRpbWVfc2VlZCwgc2l6ZW9m KGNvbXBpbGV0aW1lX3NlZWQpKTsKPiAgI2VuZGlmCj4gIAo+IC0JZm9yIChpID0gMCwgYXJjaF9i aXRzID0gQkxBS0UyU19CTE9DS19TSVpFICogODsKPiAtCSAgICAgaSA8IEJMQUtFMlNfQkxPQ0tf U0laRTsgaSArPSBzaXplb2YoZW50cm9weSkpIHsKPiAtCQlpZiAoIWFyY2hfZ2V0X3JhbmRvbV9z ZWVkX2xvbmdfZWFybHkoJmVudHJvcHkpICYmCj4gLQkJICAgICFhcmNoX2dldF9yYW5kb21fbG9u Z19lYXJseSgmZW50cm9weSkpIHsKPiAtCQkJZW50cm9weSA9IHJhbmRvbV9nZXRfZW50cm9weSgp Owo+IC0JCQlhcmNoX2JpdHMgLT0gc2l6ZW9mKGVudHJvcHkpICogODsKPiArCWZvciAoaSA9IDAs IGFyY2hfYml0cyA9IHNpemVvZihlbnRyb3B5KSAqIDg7IGkgPCBBUlJBWV9TSVpFKGVudHJvcHkp Oykgewo+ICsJCXdvcmRzID0gYXJjaF9nZXRfcmFuZG9tX3NlZWRfd29yZHMoZW50cm9weSwgQVJS QVlfU0laRShlbnRyb3B5KSAtIGkpOwo+ICsJCWlmICh3b3Jkcykgewo+ICsJCQlfbWl4X3Bvb2xf Ynl0ZXMoZW50cm9weSwgc2l6ZW9mKCplbnRyb3B5KSAqIHdvcmRzKTsKPiArCQkJaSArPSB3b3Jk czsKPiArCQkJY29udGludWU7Cj4gIAkJfQo+IC0JCV9taXhfcG9vbF9ieXRlcygmZW50cm9weSwg c2l6ZW9mKGVudHJvcHkpKTsKPiArCQl3b3JkcyA9IGFyY2hfZ2V0X3JhbmRvbV93b3JkcyhlbnRy b3B5LCBBUlJBWV9TSVpFKGVudHJvcHkpIC0gaSk7Cj4gKwkJaWYgKHdvcmRzKSB7Cj4gKwkJCV9t aXhfcG9vbF9ieXRlcyhlbnRyb3B5LCBzaXplb2YoKmVudHJvcHkpICogd29yZHMpOwo+ICsJCQlp ICs9IHdvcmRzOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwkJZW50cm9weVswXSA9IHJhbmRv bV9nZXRfZW50cm9weSgpOwo+ICsJCV9taXhfcG9vbF9ieXRlcyhlbnRyb3B5LCBzaXplb2YoKmVu dHJvcHkpKTsKPiArCQlhcmNoX2JpdHMgLT0gc2l6ZW9mKCplbnRyb3B5KSAqIDg7Cj4gKwkJKytp Owo+ICAJfQo+ICAJX21peF9wb29sX2J5dGVzKCZub3csIHNpemVvZihub3cpKTsKPiAgCV9taXhf cG9vbF9ieXRlcyh1dHNuYW1lKCksIHNpemVvZigqKHV0c25hbWUoKSkpKTsKPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9hcmNocmFuZG9tLmggYi9pbmNsdWRlL2FzbS1nZW5lcmlj L2FyY2hyYW5kb20uaAo+IGluZGV4IDNhNWVlMjAyZGQ4Ni4uYWU2MTg5MTZjNzRjIDEwMDY0NAo+ IC0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYXJjaHJhbmRvbS5oCj4gKysrIGIvaW5jbHVkZS9h c20tZ2VuZXJpYy9hcmNocmFuZG9tLmgKPiBAQCAtMiwyNCArMiwxNCBAQAo+ICAjaWZuZGVmIF9f QVNNX0dFTkVSSUNfQVJDSFJBTkRPTV9IX18KPiAgI2RlZmluZSBfX0FTTV9HRU5FUklDX0FSQ0hS QU5ET01fSF9fCj4gIAo+IC1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGFyY2hfZ2V0 X3JhbmRvbV9sb25nKHVuc2lnbmVkIGxvbmcgKnYpCj4gK3N0YXRpYyBpbmxpbmUgc2l6ZV90IF9f bXVzdF9jaGVjayBhcmNoX2dldF9yYW5kb21fd29yZHModW5zaWduZWQgbG9uZyAqdiwgc2l6ZV90 IHdvcmRzKQo+ICB7Cj4gLQlyZXR1cm4gZmFsc2U7Cj4gKwlyZXR1cm4gMDsKPiAgfQo+ICAKPiAt c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBhcmNoX2dldF9yYW5kb21faW50KHVuc2ln bmVkIGludCAqdikKPiArc3RhdGljIGlubGluZSBzaXplX3QgX19tdXN0X2NoZWNrIGFyY2hfZ2V0 X3JhbmRvbV9zZWVkX3dvcmRzKHVuc2lnbmVkIGxvbmcgKnYsIHNpemVfdCB3b3JkcykKPiAgewo+ IC0JcmV0dXJuIGZhbHNlOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2No ZWNrIGFyY2hfZ2V0X3JhbmRvbV9zZWVkX2xvbmcodW5zaWduZWQgbG9uZyAqdikKPiAtewo+IC0J cmV0dXJuIGZhbHNlOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNr IGFyY2hfZ2V0X3JhbmRvbV9zZWVkX2ludCh1bnNpZ25lZCBpbnQgKnYpCj4gLXsKPiAtCXJldHVy biBmYWxzZTsKPiArCXJldHVybiAwOwo+ICB9Cj4gIAo+ICAjZW5kaWYKPiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS9saW51eC9yYW5kb20uaCBiL2luY2x1ZGUvbGludXgvcmFuZG9tLmgKPiBpbmRleCA4 NjU3NzBlMjlmM2UuLjBhMzI3YTI4OWYwOSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L3Jh bmRvbS5oCj4gKysrIGIvaW5jbHVkZS9saW51eC9yYW5kb20uaAo+IEBAIC0xMTIsMTkgKzExMiwx OSBAQCBkZWNsYXJlX2dldF9yYW5kb21fdmFyX3dhaXQobG9uZywgdW5zaWduZWQgbG9uZykKPiAg ICogQ2FsbGVkIGZyb20gdGhlIGJvb3QgQ1BVIGR1cmluZyBzdGFydHVwOyBub3QgdmFsaWQgdG8g Y2FsbCBvbmNlCj4gICAqIHNlY29uZGFyeSBDUFVzIGFyZSB1cCBhbmQgcHJlZW1wdGlvbiBpcyBw b3NzaWJsZS4KPiAgICovCj4gLSNpZm5kZWYgYXJjaF9nZXRfcmFuZG9tX3NlZWRfbG9uZ19lYXJs eQo+IC1zdGF0aWMgaW5saW5lIGJvb2wgX19pbml0IGFyY2hfZ2V0X3JhbmRvbV9zZWVkX2xvbmdf ZWFybHkodW5zaWduZWQgbG9uZyAqdikKPiArI2lmbmRlZiBhcmNoX2dldF9yYW5kb21fc2VlZF93 b3Jkc19lYXJseQo+ICtzdGF0aWMgaW5saW5lIHNpemVfdCBfX2luaXQgYXJjaF9nZXRfcmFuZG9t X3NlZWRfd29yZHNfZWFybHkodW5zaWduZWQgbG9uZyAqdiwgc2l6ZV90IHdvcmRzKQo+ICB7Cj4g IAlXQVJOX09OKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fQk9PVElORyk7Cj4gLQlyZXR1cm4gYXJj aF9nZXRfcmFuZG9tX3NlZWRfbG9uZyh2KTsKPiArCXJldHVybiBhcmNoX2dldF9yYW5kb21fc2Vl ZF93b3Jkcyh2LCB3b3Jkcyk7Cj4gIH0KPiAgI2VuZGlmCj4gIAo+IC0jaWZuZGVmIGFyY2hfZ2V0 X3JhbmRvbV9sb25nX2Vhcmx5Cj4gLXN0YXRpYyBpbmxpbmUgYm9vbCBfX2luaXQgYXJjaF9nZXRf cmFuZG9tX2xvbmdfZWFybHkodW5zaWduZWQgbG9uZyAqdikKPiArI2lmbmRlZiBhcmNoX2dldF9y YW5kb21fd29yZHNfZWFybHkKPiArc3RhdGljIGlubGluZSBib29sIF9faW5pdCBhcmNoX2dldF9y YW5kb21fd29yZHNfZWFybHkodW5zaWduZWQgbG9uZyAqdiwgc2l6ZV90IHdvcmRzKQo+ICB7Cj4g IAlXQVJOX09OKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fQk9PVElORyk7Cj4gLQlyZXR1cm4gYXJj aF9nZXRfcmFuZG9tX2xvbmcodik7Cj4gKwlyZXR1cm4gYXJjaF9nZXRfcmFuZG9tX3dvcmRzKHYs IHdvcmRzKTsKPiAgfQo+ICAjZW5kaWYKPiAgCgotLSAKTWl0IGZyZXVuZGxpY2hlbiBHcsO8w59l biAvIEtpbmQgcmVnYXJkcwpIb2xnZXIgRGVuZ2xlcgotLQpJQk0gU3lzdGVtcywgTGludXggb24g SUJNIFogRGV2ZWxvcG1lbnQKZGVuZ2xlckBsaW51eC5pYm0uY29tCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==