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 D7BAEC76188 for ; Mon, 3 Apr 2023 20:17:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=idXmJwBkDmqnuXLU1J3Gvz/hFzedLvOXpzvfqfq68K8=; b=s05uy//gcIfkHD HsBhHRu3QwnsJnCsFIPFhxgYvIR9QnQY6REbjOQr9cYIi9Q8Gi95VARFl/INzttJfo8vqWquhbkIh xzAf435ZoqK4bl7/VGjFkEGmfb9D94kEy5czdZ6uLix4sRlbZijM4pik+eVSPifHmklbvcajM06WE 4LWTtVorkTeuzaaW0TKTQXQZCz1lzKUs0qREBQgjQAPsQZ93m8eF5QoHG5AFmgROuwbsrJOj4psMJ AiYTBYzO5rkWf2y+zlAtkO034f0ME+FA0u3bT9faaQx9ePCYL5qX9BFggDI1WEgJVwyUj3rs9Ye0n 0Nl8JS+LT9tMisr53Y0A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pjQax-00GZFe-1t; Mon, 03 Apr 2023 20:16:03 +0000 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pjQat-00GZEr-15 for linux-arm-kernel@lists.infradead.org; Mon, 03 Apr 2023 20:16:01 +0000 Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 333Ju43I000927; Mon, 3 Apr 2023 20:15:47 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=qcppdkim1; bh=xe8Qdz0/ye8j2kRzlr57fCVQvK34/mM9zLANVX4x+fk=; b=O+hhI+XKsqh8UuGmvtXWMO+sSseAtMXZ9ehohfMk/TzPM2JOe3I3r3bu6GsmHpKyopT0 TfAiXNzQu4k/VK4hpQnxr5QKj0+nP3yIeyY4KhfHsAEuPdgadph6yM9LGLw3FyfQTA2U wu8zZ43gb7x1mCPSJj+Nysg9Wxd1kOJVTghBENyIIHamAGLcKesfrtwoSWXw8bmjauDR dqhrTKRZCidKKjrfg7501Y86ABoJ8tYfwfTacdME5urt2zH6dnpY4FN4eqbHrsdJwyhx R+G/XuqSIU3BKLpYoTpWFwc5JH/nD9KfEpWdTaw34N1Uog5i3X8HWkiJU2bFVC2bCzOu 8A== Received: from nasanppmta05.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3pqy6211tq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 03 Apr 2023 20:15:47 +0000 Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA05.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 333KFk79032508 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 3 Apr 2023 20:15:46 GMT Received: from [10.134.65.165] (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Mon, 3 Apr 2023 13:15:43 -0700 Message-ID: Date: Mon, 3 Apr 2023 13:15:42 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH v11 07/26] mailbox: Add Gunyah message queue mailbox Content-Language: en-US To: Alex Elder , Srinivas Kandagatla , Prakruthi Deepak Heragu , Jonathan Corbet , Jassi Brar CC: Murali Nalajala , Trilok Soni , Srivatsa Vaddagiri , Carl van Schaik , Dmitry Baryshkov , Bjorn Andersson , "Konrad Dybcio" , Arnd Bergmann , "Greg Kroah-Hartman" , Rob Herring , Krzysztof Kozlowski , Bagas Sanjaya , Will Deacon , Andy Gross , Catalin Marinas , , , , , References: <20230304010632.2127470-1-quic_eberman@quicinc.com> <20230304010632.2127470-8-quic_eberman@quicinc.com> <01f2f8a2-15e6-66e8-a5a0-eb9f511a1121@linaro.org> From: Elliot Berman In-Reply-To: <01f2f8a2-15e6-66e8-a5a0-eb9f511a1121@linaro.org> X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: AVte1V2yz1fQolIEmfHixMe1j3NHv3Hw X-Proofpoint-ORIG-GUID: AVte1V2yz1fQolIEmfHixMe1j3NHv3Hw X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-04-03_16,2023-04-03_03,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 bulkscore=0 mlxlogscore=826 phishscore=0 mlxscore=0 adultscore=0 impostorscore=0 clxscore=1015 malwarescore=0 lowpriorityscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2304030157 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230403_131559_381172_26830B8A X-CRM114-Status: GOOD ( 47.73 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAzLzMxLzIwMjMgNzoyNSBBTSwgQWxleCBFbGRlciB3cm90ZToKPiBPbiAzLzMvMjMgNzow NiBQTSwgRWxsaW90IEJlcm1hbiB3cm90ZToKPj4gR3VueWFoIG1lc3NhZ2UgcXVldWVzIGFyZSBh IHVuaWRpcmVjdGlvbmFsIGludGVyLVZNIHBpcGUgZm9yIG1lc3NhZ2VzIHVwCj4+IHRvIDEwMjQg Ynl0ZXMuIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHBhaXJpbmcgYSByZWNlaXZlciBtZXNzYWdlIHF1 ZXVlIGFuZAo+PiBhIHRyYW5zbWl0dGVyIG1lc3NhZ2UgcXVldWUgdG8gZXhwb3NlIGEgc2luZ2xl IG1haWxib3ggY2hhbm5lbC4KPiAKPiBJIHRoaW5rIGl0J3MgZ29vZCB0byByZXVzZSBleGlzdGlu ZyBmcmFtZXdvcmtzLCBmb3IgZXhhbXBsZSwgdXNpbmcKPiB0aGUgbWFpbGJveCBhYnN0cmFjdGlv biB0byBpbXBsZW1lbnQgeW91ciBtZXNzYWdpbmcgY29kZS7CoCBCdXQgSQo+IGZpbmQgdGhlcmUg YXJlIHNvbWUgbWlub3IgbWlzbWF0Y2hlcyBiZXR3ZWVuIHdoYXQgeW91IG5lZWQgYW5kCj4gdGhl IHdheSB0aGUgbWFpbGJveCBjb2RlIHdvcmtzLgo+IAo+IEknbSBub3QgcmVhbGx5IHN1Z2dlc3Rp bmcgeW91IGNoYW5nZSBhbnl0aGluZywgYnV0IEknbGwganVzdCBzYXkKPiBpdCBzZWVtZWQgbGlr ZSB0aGVyZSB3ZXJlIGEgZmV3IHNwb3RzIHlvdSBuZWVkZWQgdG8gZG8gdGhpbmdzCj4gdGhhdCB3 ZXJlIHNsaWdodGx5IGF3a3dhcmQgaW4gb3JkZXIgdG8gc2F0aXNmeSBtYWlsYm94IHJlcXVpcmVt ZW50cy4KPiAKPiBJJ2xsIHBvaW50IG91dCBpbiBhIGZldyBjb21tZW50cyB3aGF0IEkgbWVhbiBi ZWxvdy4KPiAKPiBJJ2xsIHRha2Ugb25lIG1vcmUgbG9vayBhdCBpdCBhZ2FpbiBuZXh0IHRpbWUs IGJ1dCBJIGFzc3VtZSB0aGlzCj4gd29ya3MgYW5kIEkgaGF2ZSBubyBvdGhlciBuZXcgY29tbWVu dHMgdG9kYXkuCj4gCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC1B bGV4Cj4gCj4+IFNpZ25lZC1vZmYtYnk6IEVsbGlvdCBCZXJtYW4gPHF1aWNfZWJlcm1hbkBxdWlj aW5jLmNvbT4KPj4gLS0tCj4+IMKgIERvY3VtZW50YXRpb24vdmlydC9ndW55YWgvbWVzc2FnZS1x dWV1ZS5yc3QgfMKgwqAgOCArCj4+IMKgIGRyaXZlcnMvbWFpbGJveC9NYWtlZmlsZcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDIgKwo+PiDCoCBkcml2ZXJzL21h aWxib3gvZ3VueWFoLW1zZ3EuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAyMDkgKysr KysrKysrKysrKysrKysrKysKPj4gwqAgaW5jbHVkZS9saW51eC9ndW55YWguaMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgNTcgKysrKysrCj4+IMKgIDQgZmls ZXMgY2hhbmdlZCwgMjc2IGluc2VydGlvbnMoKykKPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbWFpbGJveC9ndW55YWgtbXNncS5jCj4+Cj4+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0 aW9uL3ZpcnQvZ3VueWFoL21lc3NhZ2UtcXVldWUucnN0IAo+PiBiL0RvY3VtZW50YXRpb24vdmly dC9ndW55YWgvbWVzc2FnZS1xdWV1ZS5yc3QKPj4gaW5kZXggYjM1MjkxOGFlNTRiLi43MGQ4MmE0 ZWYzMmQgMTAwNjQ0Cj4+IC0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9ndW55YWgvbWVzc2FnZS1x dWV1ZS5yc3QKPj4gKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2d1bnlhaC9tZXNzYWdlLXF1ZXVl LnJzdAo+PiBAQCAtNjEsMyArNjEsMTEgQEAgdklSUTogdHdvIFRYIG1lc3NhZ2UgcXVldWVzIHdp bGwgaGF2ZSB0d28gdklSUXMgCj4+IChhbmQgdHdvIGNhcGFiaWxpdHkgSURzKS4KPj4gwqDCoMKg wqDCoMKgwqAgfMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoMKgwqDCoMKgwqAg fMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgICAgICAgICAKPj4gfMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfAo+PiDCoMKgwqDCoMKgwqDCoCB8wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8wqDCoMKgwqDCoMKgwqDCoCB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfCAgICAgICAgIAo+PiB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8Cj4+ IMKgwqDCoMKgwqDCoMKgICstLS0tLS0tLS0tLS0tLS0rwqDCoMKgwqDCoMKgwqDCoCArLS0tLS0t LS0tLS0tLS0tLS0rICAgICAgICAgCj4+ICstLS0tLS0tLS0tLS0tLS0rCj4+ICsKPj4gK0d1bnlh aCBtZXNzYWdlIHF1ZXVlcyBhcmUgZXhwb3NlZCBhcyBtYWlsYm94ZXMuIFRvIGNyZWF0ZSB0aGUg Cj4+IG1haWxib3gsIGNyZWF0ZQo+PiArYSBtYm94X2NsaWVudCBhbmQgY2FsbCBgZ2hfbXNncV9p bml0KClgLiBPbiByZWNlaXB0IG9mIHRoZSBSWF9SRUFEWSAKPj4gaW50ZXJydXB0LAo+PiArYWxs IG1lc3NhZ2VzIGluIHRoZSBSWCBtZXNzYWdlIHF1ZXVlIGFyZSByZWFkIGFuZCBwdXNoZWQgdmlh IHRoZSAKPj4gYHJ4X2NhbGxiYWNrYAo+PiArb2YgdGhlIHJlZ2lzdGVyZWQgbWJveF9jbGllbnQu Cj4+ICsKPj4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL21haWxib3gvZ3VueWFoLW1zZ3EuYwo+ PiArwqDCoCA6aWRlbnRpZmllcnM6IGdoX21zZ3FfaW5pdAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tYWlsYm94L01ha2VmaWxlIGIvZHJpdmVycy9tYWlsYm94L01ha2VmaWxlCj4+IGluZGV4IGZj OTM3NjExNzExMS4uNWY5MjliYjU1ZTlhIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL21haWxib3gv TWFrZWZpbGUKPj4gKysrIGIvZHJpdmVycy9tYWlsYm94L01ha2VmaWxlCj4+IEBAIC01NSw2ICs1 NSw4IEBAIG9iai0kKENPTkZJR19NVEtfQ01EUV9NQk9YKcKgwqDCoCArPSBtdGstY21kcS1tYWls Ym94Lm8KPj4gwqAgb2JqLSQoQ09ORklHX1pZTlFNUF9JUElfTUJPWCnCoMKgwqAgKz0genlucW1w LWlwaS1tYWlsYm94Lm8KPj4gK29iai0kKENPTkZJR19HVU5ZQUgpwqDCoMKgwqDCoMKgwqAgKz0g Z3VueWFoLW1zZ3Eubwo+PiArCj4+IMKgIG9iai0kKENPTkZJR19TVU42SV9NU0dCT1gpwqDCoMKg ICs9IHN1bjZpLW1zZ2JveC5vCj4+IMKgIG9iai0kKENPTkZJR19TUFJEX01CT1gpwqDCoMKgwqDC oMKgwqAgKz0gc3ByZC1tYWlsYm94Lm8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFpbGJveC9n dW55YWgtbXNncS5jIAo+PiBiL2RyaXZlcnMvbWFpbGJveC9ndW55YWgtbXNncS5jCj4+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uMTk4OTI5ODY1M2Y5Cj4+IC0t LSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9tYWlsYm94L2d1bnlhaC1tc2dxLmMKPj4gQEAg LTAsMCArMSwyMDkgQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9u bHkKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyMyBRdWFsY29tbSBJbm5vdmF0 aW9uIENlbnRlciwgSW5jLiBBbGwgCj4+IHJpZ2h0cyByZXNlcnZlZC4KPj4gKyAqLwo+PiArCj4+ ICsjaW5jbHVkZSA8bGludXgvbWFpbGJveF9jb250cm9sbGVyLmg+Cj4+ICsjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4+ICsjaW5jbHVk ZSA8bGludXgvZ3VueWFoLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+Cj4+ICsjaW5j bHVkZSA8bGludXgvaW5pdC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4gKyNpbmNs dWRlIDxsaW51eC93YWl0Lmg+Cj4+ICsKPj4gKyNkZWZpbmUgbWJveF9jaGFuX3RvX21zZ3EoY2hh bikgKGNvbnRhaW5lcl9vZihjaGFuLT5tYm94LCBzdHJ1Y3QgCj4+IGdoX21zZ3EsIG1ib3gpKQo+ PiArCj4+ICtzdGF0aWMgaXJxcmV0dXJuX3QgZ2hfbXNncV9yeF9pcnFfaGFuZGxlcihpbnQgaXJx LCB2b2lkICpkYXRhKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBnaF9tc2dxICptc2dxID0gZGF0 YTsKPj4gK8KgwqDCoCBzdHJ1Y3QgZ2hfbXNncV9yeF9kYXRhIHJ4X2RhdGE7Cj4+ICvCoMKgwqAg ZW51bSBnaF9lcnJvciBnaF9lcnJvcjsKPj4gK8KgwqDCoCBib29sIHJlYWR5ID0gdHJ1ZTsKPj4g Kwo+PiArwqDCoMKgIHdoaWxlIChyZWFkeSkgewo+PiArwqDCoMKgwqDCoMKgwqAgZ2hfZXJyb3Ig PSBnaF9oeXBlcmNhbGxfbXNncV9yZWN2KG1zZ3EtPnJ4X2docnNjLT5jYXBpZCwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcnhfZGF0YS5kYXRhLCBzaXplb2YocnhfZGF0YS5k YXRhKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcnhfZGF0YS5sZW5ndGgs ICZyZWFkeSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZ2hfZXJyb3IgIT0gR0hfRVJST1JfT0sp IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGdoX2Vycm9yICE9IEdIX0VSUk9SX01T R1FVRVVFX0VNUFRZKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl93YXJu KG1zZ3EtPm1ib3guZGV2LCAiRmFpbGVkIHRvIHJlY2VpdmUgZGF0YTogCj4+ICVkXG4iLCBnaF9l cnJvcik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgwqDCoMKg wqAgfQo+PiArwqDCoMKgwqDCoMKgwqAgbWJveF9jaGFuX3JlY2VpdmVkX2RhdGEoZ2hfbXNncV9j aGFuKG1zZ3EpLCAmcnhfZGF0YSk7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgcmV0dXJu IElSUV9IQU5ETEVEOwo+PiArfQo+PiArCj4+ICsvKiBGaXJlZCB3aGVuIG1lc3NhZ2UgcXVldWUg dHJhbnNpdGlvbnMgZnJvbSAiZnVsbCIgdG8gInNwYWNlIAo+PiBhdmFpbGFibGUiIHRvIHNlbmQg bWVzc2FnZXMgKi8KPj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBnaF9tc2dxX3R4X2lycV9oYW5kbGVy KGludCBpcnEsIHZvaWQgKmRhdGEpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGdoX21zZ3EgKm1z Z3EgPSBkYXRhOwo+PiArCj4+ICvCoMKgwqAgbWJveF9jaGFuX3R4ZG9uZShnaF9tc2dxX2NoYW4o bXNncSksIDApOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIElSUV9IQU5ETEVEOwo+PiArfQo+PiAr Cj4+ICsvKiBGaXJlZCBhZnRlciBzZW5kaW5nIG1lc3NhZ2UgYW5kIGh5cGVyY2FsbCB0b2xkIHVz IHRoZXJlIHdhcyBtb3JlIAo+PiBzcGFjZSBhdmFpbGFibGUuICovCj4+ICtzdGF0aWMgdm9pZCBn aF9tc2dxX3R4ZG9uZV90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdGFza2xldCkKPj4g K3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZ2hfbXNncSAqbXNncSA9IGNvbnRhaW5lcl9vZih0YXNrbGV0 LCBzdHJ1Y3QgZ2hfbXNncSwgCj4+IHR4ZG9uZV90YXNrbGV0KTsKPj4gKwo+PiArwqDCoMKgIG1i b3hfY2hhbl90eGRvbmUoZ2hfbXNncV9jaGFuKG1zZ3EpLCBtc2dxLT5sYXN0X3JldCk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZ2hfbXNncV9zZW5kX2RhdGEoc3RydWN0IG1ib3hfY2hhbiAq Y2hhbiwgdm9pZCAqZGF0YSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZ2hfbXNncSAqbXNncSA9 IG1ib3hfY2hhbl90b19tc2dxKGNoYW4pOwo+PiArwqDCoMKgIHN0cnVjdCBnaF9tc2dxX3R4X2Rh dGEgKm1zZ3FfZGF0YSA9IGRhdGE7Cj4+ICvCoMKgwqAgdTY0IHR4X2ZsYWdzID0gMDsKPj4gK8Kg wqDCoCBlbnVtIGdoX2Vycm9yIGdoX2Vycm9yOwo+PiArwqDCoMKgIGJvb2wgcmVhZHk7Cj4+ICsK Pj4gK8KgwqDCoCBpZiAobXNncV9kYXRhLT5wdXNoKQo+PiArwqDCoMKgwqDCoMKgwqAgdHhfZmxh Z3MgfD0gR0hfSFlQRVJDQUxMX01TR1FfVFhfRkxBR1NfUFVTSDsKPj4gKwo+PiArwqDCoMKgIGdo X2Vycm9yID0gZ2hfaHlwZXJjYWxsX21zZ3Ffc2VuZChtc2dxLT50eF9naHJzYy0+Y2FwaWQsIAo+ PiBtc2dxX2RhdGEtPmxlbmd0aCwgbXNncV9kYXRhLT5kYXRhLAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0eF9mbGFncywgJnJlYWR5KTsKPj4gKwo+ PiArwqDCoMKgIC8qKgo+PiArwqDCoMKgwqAgKiB1bmxpa2VseSBiZWNhdXNlIExpbnV4IHRyYWNr cyBzdGF0ZSBvZiBtc2dxIGFuZCBzaG91bGQgbm90IHRyeSB0bwo+PiArwqDCoMKgwqAgKiBzZW5k IG1lc3NhZ2Ugd2hlbiBtc2dxIGlzIGZ1bGwuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGlm ICh1bmxpa2VseShnaF9lcnJvciA9PSBHSF9FUlJPUl9NU0dRVUVVRV9GVUxMKSkKPj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiAtRUFHQUlOOwo+PiArCj4+ICvCoMKgwqAgLyoqCj4+ICvCoMKgwqDC oCAqIFByb3BhZ2F0ZSBhbGwgb3RoZXIgZXJyb3JzIHRvIGNsaWVudC4gSWYgd2UgcmV0dXJuIGVy cm9yIHRvIAo+PiBtYWlsYm94Cj4+ICvCoMKgwqDCoCAqIGZyYW1ld29yaywgdGhlbiBubyBvdGhl ciBtZXNzYWdlcyBjYW4gYmUgc2VudCBhbmQgbm9ib2R5IHdpbGwgCj4+IGtub3cKPj4gK8KgwqDC oMKgICogdG8gcmV0cnkgdGhpcyBtZXNzYWdlLgo+IAo+IElmIHlvdSB3ZXJlbid0IHVzaW5nIHRo ZSBtYWlsYm94IGZyYW1ld29yaywgd291bGQgeW91IGJlCj4gc2VuZGluZyB0aGUgZXJyb3IgdG8g dGhlIGNsaWVudCBpbiB0aGlzIGNhc2U/wqAgKEknbSBqdXN0Cj4gY3VyaW91czsgaXQncyBnb29k IHRvIGRvY3VtZW50IHRoZSBiZWhhdmlvciBpZiB5b3Ugd2VyZQo+IHRvIHJldHVybiBpdCB0byB0 aGUgbWFpbGJveCBmcmFtZXdvcmsuKQo+IAo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBtc2dx LT5sYXN0X3JldCA9IGdoX3JlbWFwX2Vycm9yKGdoX2Vycm9yKTsKPj4gKwo+PiArwqDCoMKgIC8q Kgo+PiArwqDCoMKgwqAgKiBUaGlzIG1lc3NhZ2Ugd2FzIHN1Y2Nlc3NmdWxseSBzZW50LCBidXQg bWVzc2FnZSBxdWV1ZSBpc24ndCAKPj4gcmVhZHkgdG8KPj4gK8KgwqDCoMKgICogYWNjZXB0IG1v cmUgbWVzc2FnZXMgYmVjYXVzZSBpdCdzIG5vdyBmdWxsLiBNYWlsYm94IGZyYW1ld29yawo+PiAr wqDCoMKgwqAgKiByZXF1aXJlcyB0aGF0IHdlIG9ubHkgcmVwb3J0IHRoYXQgbWVzc2FnZSB3YXMg dHJhbnNtaXR0ZWQgd2hlbgo+PiArwqDCoMKgwqAgKiB3ZSdyZSByZWFkeSB0byB0cmFuc21pdCBh bm90aGVyIG1lc3NhZ2UuIFdlJ2xsIGdldCB0aGF0IGluIHRoZSAKPj4gZm9ybQo+PiArwqDCoMKg wqAgKiBvZiB0eCBJUlEgb25jZSB0aGUgb3RoZXIgc2lkZSBzdGFydHMgdG8gZHJhaW4gdGhlIG1z Z3EuCj4gCj4gU28geW91IGFyZSBmb3JjZWQgdG8gZGVsYXkgcmVwb3J0aW5nIHRoZSBjb21wbGV0 aW9uCj4gaGVyZSBiZWNhdXNlIHlvdSdyZSB1c2luZyB0aGUgbWFpbGJveCBmcmFtZXdvcmsuCj4g Cj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGlmIChnaF9lcnJvciA9PSBHSF9FUlJPUl9PSykg ewo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFyZWFkeSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIDA7Cj4+ICvCoMKgwqAgfSBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJy KG1zZ3EtPm1ib3guZGV2LCAiRmFpbGVkIHRvIHNlbmQgZGF0YTogJWQgKCVkKVxuIiwgCj4+IGdo X2Vycm9yLCBtc2dxLT5sYXN0X3JldCk7Cj4+ICsKPj4gK8KgwqDCoCAvKioKPj4gK8KgwqDCoMKg ICogV2UgY2FuIHNlbmQgbW9yZSBtZXNzYWdlcy4gTWFpbGJveCBmcmFtZXdvcmsgcmVxdWlyZXMg dGhhdCB0eCAKPj4gZG9uZQo+PiArwqDCoMKgwqAgKiBoYXBwZW5zIGFzeW5jaHJvbm91c2x5IHRv IHNlbmRpbmcgdGhlIG1lc3NhZ2UuIEd1bnlhaCBtZXNzYWdlIAo+PiBxdWV1ZXMKPj4gK8KgwqDC oMKgICogdGVsbCB1cyByaWdodCBhd2F5IG9uIHRoZSBoeXBlcmNhbGwgcmV0dXJuIHdoZXRoZXIg d2UgY2FuIHNlbmQgCj4+IG1vcmUKPj4gK8KgwqDCoMKgICogbWVzc2FnZXMuIFRvIHdvcmsgYXJv dW5kIHRoaXMsIGRlZmVyIHRoZSB0eGRvbmUgdG8gYSB0YXNrbGV0Lgo+PiArwqDCoMKgwqAgKi8K PiAKPiBJZiB5b3Ugd2VyZW4ndCB1c2luZyB0aGUgbWFpbGJveCBmcmFtZXdvcmssIHlvdSdkIHNl bmQgdGhlIG5leHQKPiBtZXNzYWdlIGRpcmVjdGx5IHJhdGhlciB0aGFuIHNjaGVkdWxpbmcgdGhp cyB0YXNrbGV0IHRvIGRvIGl0Lgo+IAoKVGhhdCdzIGNvcnJlY3QgZm9yIHRoaXMgYW5kIHRoZSBv dGhlciAyIGNvbW1lbnRzIGFib3ZlLgoKPj4gK8KgwqDCoCB0YXNrbGV0X3NjaGVkdWxlKCZtc2dx LT50eGRvbmVfdGFza2xldCk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+ PiArc3RhdGljIHN0cnVjdCBtYm94X2NoYW5fb3BzIGdoX21zZ3Ffb3BzID0gewo+PiArwqDCoMKg IC5zZW5kX2RhdGEgPSBnaF9tc2dxX3NlbmRfZGF0YSwKPj4gK307Cj4+ICsKPj4gKy8qKgo+PiAr ICogZ2hfbXNncV9pbml0KCkgLSBJbml0aWFsaXplIGEgR3VueWFoIG1lc3NhZ2UgcXVldWUgd2l0 aCBhbiAKPj4gbWJveF9jbGllbnQKPj4gKyAqIEBwYXJlbnQ6IG9wdGlvbmFsLCBkZXZpY2UgcGFy ZW50IHVzZWQgZm9yIHRoZSBtYWlsYm94IGNvbnRyb2xsZXIKPj4gKyAqIEBtc2dxOiBQb2ludGVy IHRvIHRoZSBnaF9tc2dxIHRvIGluaXRpYWxpemUKPj4gKyAqIEBjbDogQSBtYWlsYm94IGNsaWVu dCB0byBiaW5kIHRvIHRoZSBtYWlsYm94IGNoYW5uZWwgdGhhdCB0aGUgCj4+IG1lc3NhZ2UgcXVl dWUgY3JlYXRlcwo+PiArICogQHR4X2docnNjOiBvcHRpb25hbCwgdGhlIHRyYW5zbWlzc2lvbiBz aWRlIG9mIHRoZSBtZXNzYWdlIHF1ZXVlCj4+ICsgKiBAcnhfZ2hyc2M6IG9wdGlvbmFsLCB0aGUg cmVjZWl2aW5nIHNpZGUgb2YgdGhlIG1lc3NhZ2UgcXVldWUKPj4gKyAqCj4+ICsgKiBBdCBsZWFz dCBvbmUgb2YgdHhfZ2hyc2MgYW5kIHJ4X2docnNjIG11c3QgYmUgbm90IE5VTEwuIE1vc3QgCj4+ IG1lc3NhZ2UgcXVldWUgdXNlIGNhc2VzIGNvbWUgd2l0aAo+PiArICogYSBwYWlyIG9mIG1lc3Nh Z2UgcXVldWVzIHRvIGZhY2lsaXRhdGUgYmlkaXJlY3Rpb25hbCAKPj4gY29tbXVuaWNhdGlvbi4g V2hlbiB0eF9naHJzYyBpcyBzZXQsCj4+ICsgKiB0aGUgY2xpZW50IGNhbiBzZW5kIG1lc3NhZ2Vz IHdpdGggCj4+IG1ib3hfc2VuZF9tZXNzYWdlKGdoX21zZ3FfY2hhbihtc2dxKSwgbXNnKS4gV2hl biByeF9naHJzYwo+PiArICogaXMgc2V0LCB0aGUgbWJveF9jbGllbnQgbXVzdCByZWdpc3RlciBh biAucnhfY2FsbGJhY2soKSBhbmQgdGhlIAo+PiBtZXNzYWdlIHF1ZXVlIGRyaXZlciB3aWxsCj4+ ICsgKiBkZWxpdmVyIGFsbCBhdmFpbGFibGUgbWVzc2FnZXMgdXBvbiByZWNlaXZpbmcgdGhlIFJY IHJlYWR5IAo+PiBpbnRlcnJ1cHQuIFRoZSBtZXNzYWdlcyBzaG91bGQgYmUKPj4gKyAqIGNvbnN1 bWVkIG9yIGNvcGllZCBieSB0aGUgY2xpZW50IHJpZ2h0IGF3YXkgYXMgdGhlIGdoX21zZ3Ffcnhf ZGF0YSAKPj4gd2lsbCBiZSByZXBsYWNlZC9kZXN0cm95ZWQKPj4gKyAqIGFmdGVyIHRoZSBjYWxs YmFjay4KPj4gKyAqCj4+ICsgKiBSZXR1cm5zIC0gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvdGhl cndpc2UKPj4gKyAqLwo+PiAraW50IGdoX21zZ3FfaW5pdChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQs IHN0cnVjdCBnaF9tc2dxICptc2dxLCBzdHJ1Y3QgCj4+IG1ib3hfY2xpZW50ICpjbCwKPj4gK8Kg wqDCoMKgwqDCoMKgwqAgc3RydWN0IGdoX3Jlc291cmNlICp0eF9naHJzYywgc3RydWN0IGdoX3Jl c291cmNlICpyeF9naHJzYykKPj4gK3sKPj4gK8KgwqDCoCBpbnQgcmV0Owo+PiArCj4+ICvCoMKg wqAgLyogTXVzdCBoYXZlIGF0IGxlYXN0IGEgdHhfZ2hyc2Mgb3IgcnhfZ2hyc2MgYW5kIHRoYXQg dGhleSBhcmUgCj4+IHRoZSByaWdodCBkZXZpY2UgdHlwZXMgKi8KPj4gK8KgwqDCoCBpZiAoKCF0 eF9naHJzYyAmJiAhcnhfZ2hyc2MpIHx8Cj4+ICvCoMKgwqDCoMKgwqDCoCAodHhfZ2hyc2MgJiYg dHhfZ2hyc2MtPnR5cGUgIT0gR0hfUkVTT1VSQ0VfVFlQRV9NU0dRX1RYKSB8fAo+PiArwqDCoMKg wqDCoMKgwqAgKHJ4X2docnNjICYmIHJ4X2docnNjLT50eXBlICE9IEdIX1JFU09VUkNFX1RZUEVf TVNHUV9SWCkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArwqDC oMKgIGlmICghZ2hfYXBpX2hhc19mZWF0dXJlKEdIX0ZFQVRVUkVfTVNHUVVFVUUpKQo+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FT1BOT1RTVVBQOwo+PiArCj4+ICvCoMKgwqAgbXNncS0+dHhf Z2hyc2MgPSB0eF9naHJzYzsKPj4gK8KgwqDCoCBtc2dxLT5yeF9naHJzYyA9IHJ4X2docnNjOwo+ PiArCj4+ICvCoMKgwqAgbXNncS0+bWJveC5kZXYgPSBwYXJlbnQ7Cj4+ICvCoMKgwqAgbXNncS0+ bWJveC5vcHMgPSAmZ2hfbXNncV9vcHM7Cj4+ICvCoMKgwqAgbXNncS0+bWJveC5udW1fY2hhbnMg PSAxOwo+PiArwqDCoMKgIG1zZ3EtPm1ib3gudHhkb25lX2lycSA9IHRydWU7Cj4+ICvCoMKgwqAg bXNncS0+bWJveC5jaGFucyA9ICZtc2dxLT5tYm94X2NoYW47Cj4+ICsKPj4gK8KgwqDCoCBpZiAo bXNncS0+dHhfZ2hyc2MpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IHJlcXVlc3RfaXJxKG1z Z3EtPnR4X2docnNjLT5pcnEsIAo+PiBnaF9tc2dxX3R4X2lycV9oYW5kbGVyLCAwLCAiZ2hfbXNn cV90eCIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbXNncSk7Cj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVycl9j aGFuczsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBpZiAobXNncS0+cnhfZ2hyc2MpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKG1zZ3EtPnJ4X2do cnNjLT5pcnEsIE5VTEwsIAo+PiBnaF9tc2dxX3J4X2lycV9oYW5kbGVyLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBJUlFGX09ORVNIT1QsICJnaF9t c2dxX3J4IiwgbXNncSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBnb3RvIGVycl90eF9pcnE7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKg wqAgdGFza2xldF9zZXR1cCgmbXNncS0+dHhkb25lX3Rhc2tsZXQsIGdoX21zZ3FfdHhkb25lX3Rh c2tsZXQpOwo+PiArCj4+ICvCoMKgwqAgcmV0ID0gbWJveF9jb250cm9sbGVyX3JlZ2lzdGVyKCZt c2dxLT5tYm94KTsKPj4gK8KgwqDCoCBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBl cnJfcnhfaXJxOwo+PiArCj4+ICvCoMKgwqAgcmV0ID0gbWJveF9iaW5kX2NsaWVudChnaF9tc2dx X2NoYW4obXNncSksIGNsKTsKPj4gK8KgwqDCoCBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqAg Z290byBlcnJfbWJveDsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArZXJyX21ib3g6Cj4+ ICvCoMKgwqAgbWJveF9jb250cm9sbGVyX3VucmVnaXN0ZXIoJm1zZ3EtPm1ib3gpOwo+PiArZXJy X3J4X2lycToKPj4gK8KgwqDCoCBpZiAobXNncS0+cnhfZ2hyc2MpCj4+ICvCoMKgwqDCoMKgwqDC oCBmcmVlX2lycShtc2dxLT5yeF9naHJzYy0+aXJxLCBtc2dxKTsKPj4gK2Vycl90eF9pcnE6Cj4+ ICvCoMKgwqAgaWYgKG1zZ3EtPnR4X2docnNjKQo+PiArwqDCoMKgwqDCoMKgwqAgZnJlZV9pcnEo bXNncS0+dHhfZ2hyc2MtPmlycSwgbXNncSk7Cj4+ICtlcnJfY2hhbnM6Cj4+ICvCoMKgwqAga2Zy ZWUobXNncS0+bWJveC5jaGFucyk7Cj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4gK30KPj4gK0VY UE9SVF9TWU1CT0xfR1BMKGdoX21zZ3FfaW5pdCk7Cj4+ICsKPj4gK3ZvaWQgZ2hfbXNncV9yZW1v dmUoc3RydWN0IGdoX21zZ3EgKm1zZ3EpCj4+ICt7Cj4+ICvCoMKgwqAgdGFza2xldF9raWxsKCZt c2dxLT50eGRvbmVfdGFza2xldCk7Cj4+ICvCoMKgwqAgbWJveF9jb250cm9sbGVyX3VucmVnaXN0 ZXIoJm1zZ3EtPm1ib3gpOwo+PiArCj4+ICvCoMKgwqAgaWYgKG1zZ3EtPnJ4X2docnNjKQo+PiAr wqDCoMKgwqDCoMKgwqAgZnJlZV9pcnEobXNncS0+cnhfZ2hyc2MtPmlycSwgbXNncSk7Cj4+ICsK Pj4gK8KgwqDCoCBpZiAobXNncS0+dHhfZ2hyc2MpCj4+ICvCoMKgwqDCoMKgwqDCoCBmcmVlX2ly cShtc2dxLT50eF9naHJzYy0+aXJxLCBtc2dxKTsKPj4gKwo+PiArwqDCoMKgIGtmcmVlKG1zZ3Et Pm1ib3guY2hhbnMpOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9HUEwoZ2hfbXNncV9yZW1vdmUp Owo+PiArCj4+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4+ICtNT0RVTEVfREVTQ1JJUFRJT04o Ikd1bnlhaCBNZXNzYWdlIFF1ZXVlIERyaXZlciIpOwo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9s aW51eC9ndW55YWguaCBiL2luY2x1ZGUvbGludXgvZ3VueWFoLmgKPj4gaW5kZXggMThjZmJmNWVl NDhiLi4zNzhiZWMwZjJjZTEgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUvbGludXgvZ3VueWFoLmgK Pj4gKysrIGIvaW5jbHVkZS9saW51eC9ndW55YWguaAo+PiBAQCAtOCwxMSArOCw2OCBAQAo+PiDC oCAjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KPj4gwqAgI2luY2x1ZGUgPGxpbnV4L2Vycm5v Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4+IMKgICNpbmNsdWRlIDxsaW51 eC9saW1pdHMuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tYWlsYm94X2NvbnRyb2xsZXIuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9tYWlsYm94X2NsaWVudC5oPgo+PiDCoCAjaW5jbHVkZSA8bGludXgv dHlwZXMuaD4KPj4gKy8qIEZvbGxvd3MgcmVzb3VyY2UgbWFuYWdlcidzIHJlc291cmNlIHR5cGVz IGZvciBWTV9HRVRfSFlQX1JFU09VUkNFUyAqLwo+IAo+IEknbSBub3Qgc3VyZSB3aGF0IHlvdSBt ZWFuIGJ5ICJGb2xsb3dzIiBoZXJlLsKgIFlvdSBtZWFuIHRoYXQgdGhlc2UgYXJlCj4gdGhlIGdo X3JtX2h5cF9yZXNvdXJjZSB0eXBlIHZhbHVlcyB0aGF0IEdFVF9IWVBfUkVTT1VSQ0VTIGNhbiBy ZXR1cm4/Cj4gCgpDb3JyZWN0LiBJIHdpbGwgc2F5ICJNYXRjaGVzIC4uLiBmb3IgVk1fR0VUX0hZ UF9SRVNPVVJDRVMgUlBDIiBpZiBpdCAKaGVscHMgbWFrZSBpdCBjbGVhcmVyLgoKPiBOb3RlIHRo YXQgZ2hfcmVzb3VyY2VfdHlwZSB2YWx1ZXMgbXVzdCBmaXQgaW4gYW4gOCBiaXQgZmllbGQuCj4g Cj4+ICtlbnVtIGdoX3Jlc291cmNlX3R5cGUgewo+PiArwqDCoMKgIEdIX1JFU09VUkNFX1RZUEVf QkVMTF9UWMKgwqDCoCA9IDAsCj4+ICvCoMKgwqAgR0hfUkVTT1VSQ0VfVFlQRV9CRUxMX1JYwqDC oMKgID0gMSwKPj4gK8KgwqDCoCBHSF9SRVNPVVJDRV9UWVBFX01TR1FfVFjCoMKgwqAgPSAyLAo+ PiArwqDCoMKgIEdIX1JFU09VUkNFX1RZUEVfTVNHUV9SWMKgwqDCoCA9IDMsCj4gCj4gRml4IGFs aWdubWVudCBiZWxvdy4KPiAKPj4gK8KgwqDCoCBHSF9SRVNPVVJDRV9UWVBFX1ZDUFXCoMKgwqAg PSA0LAo+PiArfTsKPj4gKwo+PiArc3RydWN0IGdoX3Jlc291cmNlIHsKPj4gK8KgwqDCoCBlbnVt IGdoX3Jlc291cmNlX3R5cGUgdHlwZTsKPj4gK8KgwqDCoCB1NjQgY2FwaWQ7Cj4+ICvCoMKgwqAg dW5zaWduZWQgaW50IGlycTsKPj4gK307Cj4+ICsKPj4gKy8qKgo+PiArICogR3VueWFoIE1lc3Nh Z2UgUXVldWVzCj4+ICsgKi8KPj4gKwo+PiArI2RlZmluZSBHSF9NU0dRX01BWF9NU0dfU0laRcKg wqDCoCAyNDAKPiAKPiBNYXliZSBpbnNlcnQgYW5vdGhlciB0YWIgdGhlIGJlZm9yZSAyNDAuwqAg WW91IGxhdGVyIGRlZmluZQo+IEdIX0JFTExfTk9OQkxPQ0sgdGhhdCBmYXIgb3V0LCBhbmQgYWxp Z25pbmcgdGhlbSB3aWxsIGxvb2sKPiBiZXR0ZXIuCj4gCj4+ICsKPj4gK3N0cnVjdCBnaF9tc2dx X3R4X2RhdGEgewo+PiArwqDCoMKgIHNpemVfdCBsZW5ndGg7Cj4+ICvCoMKgwqAgYm9vbCBwdXNo Owo+PiArwqDCoMKgIGNoYXIgZGF0YVtdOwo+PiArfTsKPj4gKwo+PiArc3RydWN0IGdoX21zZ3Ff cnhfZGF0YSB7Cj4+ICvCoMKgwqAgc2l6ZV90IGxlbmd0aDsKPj4gK8KgwqDCoCBjaGFyIGRhdGFb R0hfTVNHUV9NQVhfTVNHX1NJWkVdOwo+PiArfTsKPj4gKwo+PiArc3RydWN0IGdoX21zZ3Egewo+ PiArwqDCoMKgIHN0cnVjdCBnaF9yZXNvdXJjZSAqdHhfZ2hyc2M7Cj4+ICvCoMKgwqAgc3RydWN0 IGdoX3Jlc291cmNlICpyeF9naHJzYzsKPj4gKwo+PiArwqDCoMKgIC8qIG1zZ3EgcHJpdmF0ZSAq Lwo+PiArwqDCoMKgIGludCBsYXN0X3JldDsgLyogTGludXggZXJyb3IsIG5vdCBHSF9TVEFUVVNf KiAqLwo+PiArwqDCoMKgIHN0cnVjdCBtYm94X2NoYW4gbWJveF9jaGFuOwo+PiArwqDCoMKgIHN0 cnVjdCBtYm94X2NvbnRyb2xsZXIgbWJveDsKPj4gK8KgwqDCoCBzdHJ1Y3QgdGFza2xldF9zdHJ1 Y3QgdHhkb25lX3Rhc2tsZXQ7Cj4+ICt9Owo+PiArCj4+ICsKPj4gK2ludCBnaF9tc2dxX2luaXQo c3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2hfbXNncSAqbXNncSwgc3RydWN0IAo+PiBt Ym94X2NsaWVudCAqY2wsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGdoX3Jl c291cmNlICp0eF9naHJzYywgc3RydWN0IGdoX3Jlc291cmNlIAo+PiAqcnhfZ2hyc2MpOwo+PiAr dm9pZCBnaF9tc2dxX3JlbW92ZShzdHJ1Y3QgZ2hfbXNncSAqbXNncSk7Cj4+ICsKPj4gK3N0YXRp YyBpbmxpbmUgc3RydWN0IG1ib3hfY2hhbiAqZ2hfbXNncV9jaGFuKHN0cnVjdCBnaF9tc2dxICpt c2dxKQo+PiArewo+PiArwqDCoMKgIHJldHVybiAmbXNncS0+bWJveC5jaGFuc1swXTsKPj4gK30K Pj4gKwo+PiAgIAo+PiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo+PiDCoCAvKiBDb21tb24gYXJj aC1pbmRlcGVuZGVudCBkZWZpbml0aW9ucyBmb3IgR3VueWFoIAo+PiBoeXBlcmNhbGxzwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiArCj4+IMKgICNkZWZpbmUgR0hfQ0FQ SURfSU5WQUzCoMKgwqAgVTY0X01BWAo+PiDCoCAjZGVmaW5lIEdIX1ZNSURfUk9PVF9WTcKgwqDC oCAweGZmCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==