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 9B32BEE57DF for ; Mon, 11 Sep 2023 11:15:25 +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=pvBiBSbAozSQTG43YZd+w9vT7HlVxOW3cTYAs6a5gFg=; b=ASLtlPtDB34zOb I5oKut9ugF54BMrvcF+yxKabKXdMwwXL0CqQswrzOJcHQ0kYVlNrUwx3tevwT9hKsPwqAOXQvidI/ QaukizBtH2dhUKQYC/k/b56ue66I1vxsMeKFtOLZ0uv+7ToOCTL2B8ROTKSCpTxLj2SDP/pzbZoMK vusvmHjtacSvD7vttDOmRNkDmLlyOTCOt61EzYsDqwyuAHif75gLjSbfqeoT2QUO68c9n7jKAK71D qI225wVKcCybv1jyTjaKyu98l77WRF3OSeZFORhBO6Isqc9oAsGT7hzMCZoauy9vZgN8hBTW5dsBO H7eRMeecFCW5qCISN5Sg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qfet3-000MoK-0C; Mon, 11 Sep 2023 11:15:25 +0000 Received: from fd01.gateway.ufhost.com ([61.152.239.71]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qfesv-000Mlx-0k for linux-i3c@lists.infradead.org; Mon, 11 Sep 2023 11:15:23 +0000 Received: from EXMBX165.cuchost.com (unknown [175.102.18.54]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "EXMBX165", Issuer "EXMBX165" (not verified)) by fd01.gateway.ufhost.com (Postfix) with ESMTP id 849FE8284; Mon, 11 Sep 2023 19:14:48 +0800 (CST) Received: from EXMBX066.cuchost.com (172.16.7.66) by EXMBX165.cuchost.com (172.16.6.75) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Mon, 11 Sep 2023 19:14:48 +0800 Received: from [192.168.151.232] (172.16.6.8) by EXMBX066.cuchost.com (172.16.6.66) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Mon, 11 Sep 2023 19:14:46 +0800 Message-ID: <2e42bee0-937e-1dcf-2d18-91b362d35be4@starfivetech.com> Date: Mon, 11 Sep 2023 19:14:45 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.14.0 Subject: Re: [RFC PATCH 5/9] i3c: add slave mode support Content-Language: en-US To: Frank Li , CC: , , , , References: <20230905213842.3035779-1-Frank.Li@nxp.com> <20230905213842.3035779-6-Frank.Li@nxp.com> From: Joshua Yeong In-Reply-To: <20230905213842.3035779-6-Frank.Li@nxp.com> X-Originating-IP: [172.16.6.8] X-ClientProxiedBy: EXCAS081.cuchost.com (172.16.6.41) To EXMBX066.cuchost.com (172.16.6.66) X-YovoleRuleAgent: yovoleflag X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230911_041517_900341_38F569AB X-CRM114-Status: GOOD ( 28.89 ) X-BeenThere: linux-i3c@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-i3c" Errors-To: linux-i3c-bounces+linux-i3c=archiver.kernel.org@lists.infradead.org CiA+LS0tIGEvZHJpdmVycy9pM2MvTWFrZWZpbGUKID4rKysgYi9kcml2ZXJzL2kzYy9NYWtlZmls ZQogPkBAIC0yLDMgKzIsNSBAQAogwqA+aTNjLXnCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAg Oj0gZGV2aWNlLm8gbWFzdGVyLm8KID4gb2JqLSQoQ09ORklHX0kzQynCoMKgwqAgwqDCoMKgICs9 IGkzYy5vCiA+IG9iai0kKENPTkZJR19JM0MpwqDCoMKgIMKgwqDCoCArPSBtYXN0ZXIvCiA+K29i ai0kKENPTkZJR19JM0NfU0xBVkUpwqDCoMKgIMKgwqDCoCArPSBzbGF2ZS5vCiA+K29iai0kKENP TkZJR19JM0NfU0xBVkVfQ09ORklHRlMpwqDCoMKgICs9IGkzYy1jZnMubwoKU2hhbGwgd2UgY29u c2lkZXIgdG8gaW5jbHVkZSB0aGUgY29udGVudCBvZiBpM2MtY2ZzLmMgcGFydCBvZiBzbGF2ZS5j ID8KCgpPbiAwNi1TZXAtMjMgNTozOCBBTSwgRnJhbmsgTGkgd3JvdGU6Cj4gSW50cm9kdWNlIGEg bmV3IHNsYXZlIGNvcmUgbGF5ZXIgaW4gb3JkZXIgdG8gc3VwcG9ydCBzbGF2ZSBmdW5jdGlvbnMg aW4KPiBsaW51eCBrZXJuZWwuIFRoaXMgY29tcHJpc2VzIHRoZSBjb250cm9sbGVyIGxpYnJhcnkg YW5kIGZ1bmN0aW9uIGxpYnJhcnkuCj4gQ29udHJvbGxlciBsaWJyYXJ5IGltcGxlbWVudHMgZnVu Y3Rpb25zIHNwZWNpZmljIHRvIGFuIHNsYXZlIGNvbnRyb2xsZXIKPiBhbmQgZnVuY3Rpb24gbGli cmFyeSBpbXBsZW1lbnRzIGZ1bmN0aW9ucyBzcGVjaWZpYyB0byBhbiBzbGF2ZSBmdW5jdGlvbi4K Pgo+IEludHJvZHVjZSBhIG5ldyBjb25maWdmcyBlbnRyeSB0byBjb25maWd1cmUgdGhlIHNsYXZl IGZ1bmN0aW9uIGNvbmZpZ3VyaW5nCj4gYW5kIGJpbmQgdGhlIHNsYXZlIGZ1bmN0aW9uIHdpdGgg c2xhdmUgY29udHJvbGxlci4KPgo+IFNpZ25lZC1vZmYtYnk6IEZyYW5rIExpIDxGcmFuay5MaUBu eHAuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9pM2MvS2NvbmZpZyAgICAgICB8ICAyOSArKysKPiAg IGRyaXZlcnMvaTNjL01ha2VmaWxlICAgICAgfCAgIDIgKwo+ICAgZHJpdmVycy9pM2MvaTNjLWNm cy5jICAgICB8IDM2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIGRyaXZlcnMv aTNjL3NsYXZlLmMgICAgICAgfCA0NDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gICBpbmNsdWRlL2xpbnV4L2kzYy9zbGF2ZS5oIHwgNDU4ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCj4gICA1IGZpbGVzIGNoYW5nZWQsIDEyOTEgaW5zZXJ0aW9u cygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaTNjL2kzYy1jZnMuYwo+ICAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaTNjL3NsYXZlLmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBpbmNsdWRlL2xpbnV4L2kzYy9zbGF2ZS5oCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2Mv S2NvbmZpZyBiL2RyaXZlcnMvaTNjL0tjb25maWcKPiBpbmRleCAzMGE0NDE1MDZmNjFjLi5iZGMx NzNiYzBkYTEyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaTNjL0tjb25maWcKPiArKysgYi9kcml2 ZXJzL2kzYy9LY29uZmlnCj4gQEAgLTIyLDMgKzIyLDMyIEBAIG1lbnVjb25maWcgSTNDCj4gICBp ZiBJM0MKPiAgIHNvdXJjZSAiZHJpdmVycy9pM2MvbWFzdGVyL0tjb25maWciCj4gICBlbmRpZiAj IEkzQwo+ICsKPiArY29uZmlnIEkzQ19TTEFWRQo+ICsJYm9vbCAiSTNDIFNsYXZlIFN1cHBvcnQi Cj4gKwloZWxwCj4gKwkgIFN1cHBvcnQgSTNDIFNsYXZlIE1vZGUuCj4gKwo+ICsJICBFbmFibGUg dGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBzdXBwb3J0IGNvbmZpZ3VyYWJsZSBJM0Mgc2xh dmUuCj4gKwkgIFRoaXMgc2hvdWxkIGJlIGVuYWJsZWQgaWYgdGhlIHBsYXRmb3JtIGhhcyBhIEkz QyBjb250cm9sbGVyIHRoYXQgY2FuCj4gKwkgIG9wZXJhdGUgaW4gc2xhdmUgbW9kZS4KPiArCj4g KwkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgYnVpbGQgdGhlIEkzQyBzbGF2ZSBsaWJyYXJ5 LCB3aGljaCBpbmNsdWRlcwo+ICsJICBzbGF2ZSBjb250cm9sbGVyIGxpYnJhcnkgYW5kIHNsYXZl IGZ1bmN0aW9uIGxpYnJhcnkuCj4gKwo+ICsJICBJZiBpbiBkb3VidCwgc2F5ICJOIiB0byBkaXNh YmxlIHNsYXZlIHN1cHBvcnQuCj4gKwo+ICtjb25maWcgSTNDX1NMQVZFX0NPTkZJR0ZTCj4gKwli b29sICJJM0MgU2xhdmUgQ29uZmlnZnMgU3VwcG9ydCIKPiArCWRlcGVuZHMgb24gSTNDX1NMQVZF Cj4gKwlzZWxlY3QgQ09ORklHRlNfRlMKPiArCWhlbHAKPiArCSAgQ29uZmlnZnMgZW50cnkgZm9y IHNsYXZlIGZ1bmN0aW9uIGFuZCBjb250cm9sbGVyLgo+ICsKPiArCSAgVGhpcyB3aWxsIGVuYWJs ZSB0aGUgY29uZmlnZnMgZW50cnkgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUKPiArCSAg dGhlIHNsYXZlIGZ1bmN0aW9uIGFuZCB1c2VkIHRvIGJpbmQgdGhlIGZ1bmN0aW9uIHdpdGggYSBz bGF2ZQo+ICsJICBjb250cm9sbGVyLgo+ICsKPiAraWYgSTNDX1NMQVZFCj4gK3NvdXJjZSAiZHJp dmVycy9pM2Mvc2xhdmUvS2NvbmZpZyIKPiArZW5kaWYgI0kjQ19TTEFWRQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2kzYy9NYWtlZmlsZSBiL2RyaXZlcnMvaTNjL01ha2VmaWxlCj4gaW5kZXggMTE5 ODJlZmJjNmQ5MS4uNjQwN2RkZWMzYTRhOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2kzYy9NYWtl ZmlsZQo+ICsrKyBiL2RyaXZlcnMvaTNjL01ha2VmaWxlCj4gQEAgLTIsMyArMiw1IEBACj4gICBp M2MteQkJCQk6PSBkZXZpY2UubyBtYXN0ZXIubwo+ICAgb2JqLSQoQ09ORklHX0kzQykJCSs9IGkz Yy5vCj4gICBvYmotJChDT05GSUdfSTNDKQkJKz0gbWFzdGVyLwo+ICtvYmotJChDT05GSUdfSTND X1NMQVZFKQkJKz0gc2xhdmUubwo+ICtvYmotJChDT05GSUdfSTNDX1NMQVZFX0NPTkZJR0ZTKQkr PSBpM2MtY2ZzLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2MvaTNjLWNmcy5jIGIvZHJpdmVy cy9pM2MvaTNjLWNmcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAw MDAwLi4xZjUzZmFkYTQzNjQ1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvaTNjL2kz Yy1jZnMuYwo+IEBAIC0wLDAgKzEsMzYxIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCj4gKy8qCj4gKyAqIENvbmZpZ2ZzIHRvIGNvbmZpZ3VyZSB0aGUgSTNDIFNsYXZl Cj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAyMyBOWFAKPiArICogQXV0aG9yOiBGcmFuayBM aSA8RnJhbmsuTGlAbnhwLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvY29uZmln ZnMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvaTNj L3NsYXZlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4KPiArCj4gK3N0YXRpYyBERUZJTkVfTVVURVgoZnVuY3Rpb25zX211dGV4KTsKPiArc3Rh dGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKmZ1bmN0aW9uc19ncm91cDsKPiArc3RhdGljIHN0cnVj dCBjb25maWdfZ3JvdXAgKmNvbnRyb2xsZXJzX2dyb3VwOwo+ICsKPiArc3RydWN0IGkzY19zbGF2 ZV9mdW5jX2dyb3VwIHsKPiArCXN0cnVjdCBjb25maWdfZ3JvdXAgZ3JvdXA7Cj4gKwlzdHJ1Y3Qg aTNjX3NsYXZlX2Z1bmMgKmZ1bmM7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgaTNjX3NsYXZlX2N0cmxf Z3JvdXAgewo+ICsJc3RydWN0IGNvbmZpZ19ncm91cCBncm91cDsKPiArCXN0cnVjdCBpM2Nfc2xh dmVfY3RybCAqY3RybDsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGkzY19zbGF2 ZV9mdW5jX2dyb3VwICp0b19pM2Nfc2xhdmVfZnVuY19ncm91cChzdHJ1Y3QgY29uZmlnX2l0ZW0g Kml0ZW0pCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0p LCBzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmNfZ3JvdXAsIGdyb3VwKTsKPiArfQo+ICsKPiArc3RhdGlj IGlubGluZSBzdHJ1Y3QgaTNjX3NsYXZlX2N0cmxfZ3JvdXAgKnRvX2kzY19zbGF2ZV9jdHJsX2dy b3VwKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9v Zih0b19jb25maWdfZ3JvdXAoaXRlbSksIHN0cnVjdCBpM2Nfc2xhdmVfY3RybF9ncm91cCwgZ3Jv dXApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGkzY19zbGF2ZV9jdHJsX2Z1bmNfbGluayhzdHJ1 Y3QgY29uZmlnX2l0ZW0gKmN0cmxfY2ZnLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmZ1bmNfY2ZnKQo+ ICt7Cj4gKwlzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmNfZ3JvdXAgKmZ1bmNfZ3JvdXAgPSB0b19pM2Nf c2xhdmVfZnVuY19ncm91cChmdW5jX2NmZyk7Cj4gKwlzdHJ1Y3QgaTNjX3NsYXZlX2N0cmxfZ3Jv dXAgKmN0cmxfZ3JvdXAgPSB0b19pM2Nfc2xhdmVfY3RybF9ncm91cChjdHJsX2NmZyk7Cj4gKwlz dHJ1Y3QgaTNjX3NsYXZlX2N0cmwgKmN0cmwgPSBjdHJsX2dyb3VwLT5jdHJsOwo+ICsJc3RydWN0 IGkzY19zbGF2ZV9mdW5jICpmdW5jID0gZnVuY19ncm91cC0+ZnVuYzsKPiArCWludCByZXQ7Cj4g Kwo+ICsJcmV0ID0gaTNjX3NsYXZlX2N0cmxfYWRkX2Z1bmMoY3RybCwgZnVuYyk7Cj4gKwlpZiAo cmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gaTNjX3NsYXZlX2Z1bmNfYmluZChm dW5jKTsKPiArCWlmIChyZXQpIHsKPiArCQlpM2Nfc2xhdmVfY3RybF9yZW1vdmVfZnVuYyhjdHJs LCBmdW5jKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBpM2Nfc2xhdmVfY3RybF9mdW5jX3VubGluayhzdHJ1Y3QgY29uZmln X2l0ZW0gKmN0cmxfY2ZnLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmZ1bmNfY2ZnKQo+ICt7Cj4gKwlz dHJ1Y3QgaTNjX3NsYXZlX2Z1bmNfZ3JvdXAgKmZ1bmNfZ3JvdXAgPSB0b19pM2Nfc2xhdmVfZnVu Y19ncm91cChmdW5jX2NmZy0+Y2lfcGFyZW50KTsKPiArCXN0cnVjdCBpM2Nfc2xhdmVfY3RybF9n cm91cCAqY3RybF9ncm91cCA9IHRvX2kzY19zbGF2ZV9jdHJsX2dyb3VwKGN0cmxfY2ZnKTsKPiAr CXN0cnVjdCBpM2Nfc2xhdmVfY3RybCAqY3RybCA9IGN0cmxfZ3JvdXAtPmN0cmw7Cj4gKwlzdHJ1 Y3QgaTNjX3NsYXZlX2Z1bmMgKmZ1bmMgPSBmdW5jX2dyb3VwLT5mdW5jOwo+ICsKPiArCWkzY19z bGF2ZV9mdW5jX3VuYmluZChmdW5jKTsKPiArCWkzY19zbGF2ZV9jdHJsX3JlbW92ZV9mdW5jKGN0 cmwsIGZ1bmMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0 aW9ucyBpM2Nfc2xhdmVfY3RybF9pdGVtX29wcyA9IHsKPiArCS5hbGxvd19saW5rICAgICA9IGkz Y19zbGF2ZV9jdHJsX2Z1bmNfbGluaywKPiArCS5kcm9wX2xpbmsgICAgICA9IGkzY19zbGF2ZV9j dHJsX2Z1bmNfdW5saW5rLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdf aXRlbV90eXBlIGkzY19zbGF2ZV9jdHJsX3R5cGUgPSB7Cj4gKwkuY3RfaXRlbV9vcHMgICAgPSAm aTNjX3NsYXZlX2N0cmxfaXRlbV9vcHMsCj4gKwkuY3Rfb3duZXIgICAgICAgPSBUSElTX01PRFVM RSwKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBpM2Nfc2xhdmVfY2ZzX2FkZF9jdHJsX2dyb3VwKCkg LSBhZGQgSTNDIHNsYXZlIGNvbnRyb2xsZXIgZ3JvdXAKPiArICogQGN0cmw6IEkzQyBzbGF2ZSBj b250cm9sbGVyIGRldmljZQo+ICsgKgo+ICsgKiBSZXR1cm46IFBvaW50ZXIgdG8gc3RydWN0IGNv bmZpZ19ncm91cAo+ICsgKi8KPiArc3RydWN0IGNvbmZpZ19ncm91cCAqaTNjX3NsYXZlX2Nmc19h ZGRfY3RybF9ncm91cChzdHJ1Y3QgaTNjX3NsYXZlX2N0cmwgKmN0cmwpCj4gK3sKPiArCXN0cnVj dCBpM2Nfc2xhdmVfY3RybF9ncm91cCAqY3RybF9ncm91cDsKPiArCXN0cnVjdCBjb25maWdfZ3Jv dXAgKmdyb3VwOwo+ICsJaW50IHJldDsKPiArCj4gKwljdHJsX2dyb3VwID0ga3phbGxvYyhzaXpl b2YoKmN0cmxfZ3JvdXApLCBHRlBfS0VSTkVMKTsKPiArCWlmICghY3RybF9ncm91cCkgewo+ICsJ CXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJZ3JvdXAgPSAmY3Ry bF9ncm91cC0+Z3JvdXA7Cj4gKwo+ICsJY29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKGdyb3Vw LCBkZXZfbmFtZSgmY3RybC0+ZGV2KSwgJmkzY19zbGF2ZV9jdHJsX3R5cGUpOwo+ICsJcmV0ID0g Y29uZmlnZnNfcmVnaXN0ZXJfZ3JvdXAoY29udHJvbGxlcnNfZ3JvdXAsIGdyb3VwKTsKPiArCWlm IChyZXQpIHsKPiArCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBjb25maWdmcyBncm91cCBm b3IgJXNcbiIsIGRldl9uYW1lKCZjdHJsLT5kZXYpKTsKPiArCQlnb3RvIGVycl9yZWdpc3Rlcl9n cm91cDsKPiArCX0KPiArCj4gKwljdHJsX2dyb3VwLT5jdHJsID0gY3RybDsKPiArCj4gKwlyZXR1 cm4gZ3JvdXA7Cj4gKwo+ICtlcnJfcmVnaXN0ZXJfZ3JvdXA6Cj4gKwlrZnJlZShjdHJsX2dyb3Vw KTsKPiArCj4gK2VycjoKPiArCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gK30KPiArRVhQT1JUX1NZ TUJPTChpM2Nfc2xhdmVfY2ZzX2FkZF9jdHJsX2dyb3VwKTsKPiArCj4gKy8qKgo+ICsgKiBpM2Nf c2xhdmVfY2ZzX3JlbW92ZV9jdHJsX2dyb3VwKCkgLSByZW1vdmUgSTNDIHNsYXZlIGNvbnRyb2xs ZXIgZ3JvdXAKPiArICogQGdyb3VwOiB0aGUgZ3JvdXAgdG8gYmUgcmVtb3ZlZAo+ICsgKi8KPiAr dm9pZCBpM2Nfc2xhdmVfY2ZzX3JlbW92ZV9jdHJsX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAg Kmdyb3VwKQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX3NsYXZlX2N0cmxfZ3JvdXAgKmN0cmxfZ3JvdXA7 Cj4gKwo+ICsJaWYgKCFncm91cCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJY3RybF9ncm91cCA9IGNv bnRhaW5lcl9vZihncm91cCwgc3RydWN0IGkzY19zbGF2ZV9jdHJsX2dyb3VwLCBncm91cCk7Cj4g KwlpM2Nfc2xhdmVfY3RybF9wdXQoY3RybF9ncm91cC0+Y3RybCk7Cj4gKwljb25maWdmc191bnJl Z2lzdGVyX2dyb3VwKCZjdHJsX2dyb3VwLT5ncm91cCk7Cj4gKwlrZnJlZShjdHJsX2dyb3VwKTsK PiArfQo+ICtFWFBPUlRfU1lNQk9MKGkzY19zbGF2ZV9jZnNfcmVtb3ZlX2N0cmxfZ3JvdXApOwo+ ICsKPiArI2RlZmluZSBJM0NfU0xBVkVfQVRUUl9SKF9uYW1lKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArc3RhdGljIHNzaXplX3QgaTNjX3NsYXZl X2Z1bmNfIyNfbmFtZSMjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdl KSAgICBcCj4gK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKwlzdHJ1Y3QgaTNjX3NsYXZlX2Z1 bmMgKmZ1bmMgPSB0b19pM2Nfc2xhdmVfZnVuY19ncm91cChpdGVtKS0+ZnVuYzsgICAgICAgICAg ICAgICAgICAgICBcCj4gKwlyZXR1cm4gc3lzZnNfZW1pdChwYWdlLCAiMHglMDR4XG4iLCBmdW5j LT5fbmFtZSk7ICAgICAgICAgICAgICAgXAo+ICt9Cj4gKwo+ICsjZGVmaW5lIEkzQ19TTEFWRV9B VFRSX1coX25hbWUsIF91KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ICtzdGF0aWMgc3NpemVfdCBpM2Nfc2xhdmVfZnVuY18jI19uYW1lIyNfc3RvcmUoc3Ry dWN0IGNvbmZpZ19pdGVtICppdGVtLCAgICAgICAgICAgICAgIFwKPiArCQkJCSAgICAgICBjb25z dCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKSAgICAgICAgICAgXAo+ICt7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAo+ICsJX3UgdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArCXN0cnVjdCBpM2Nfc2xhdmVfZnVuYyAqZnVu YyA9IHRvX2kzY19zbGF2ZV9mdW5jX2dyb3VwKGl0ZW0pLT5mdW5jOyAgICAgICAgICAgICAgICAg ICAgIFwKPiArCWlmIChrc3RydG8jI191KHBhZ2UsIDAsICZ2YWwpIDwgMCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArCQlyZXR1cm4gLUVJTlZBTDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKwlmdW5jLT5fbmFtZSA9 IHZhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsJ cmV0dXJuIGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4gK30KPiArCj4gK0kzQ19TTEFWRV9BVFRSX1IodmVuZG9yX2lkKTsK PiArSTNDX1NMQVZFX0FUVFJfVyh2ZW5kb3JfaWQsIHUxNik7Cj4gK0NPTkZJR0ZTX0FUVFIoaTNj X3NsYXZlX2Z1bmNfLCB2ZW5kb3JfaWQpOwo+ICsKPiArSTNDX1NMQVZFX0FUVFJfUih2ZW5kb3Jf aW5mbyk7Cj4gK0kzQ19TTEFWRV9BVFRSX1codmVuZG9yX2luZm8sIHUxNik7Cj4gK0NPTkZJR0ZT X0FUVFIoaTNjX3NsYXZlX2Z1bmNfLCB2ZW5kb3JfaW5mbyk7Cj4gKwo+ICtJM0NfU0xBVkVfQVRU Ul9SKHBhcnRfaWQpOwo+ICtJM0NfU0xBVkVfQVRUUl9XKHBhcnRfaWQsIHUxNik7Cj4gK0NPTkZJ R0ZTX0FUVFIoaTNjX3NsYXZlX2Z1bmNfLCBwYXJ0X2lkKTsKPiArCj4gK0kzQ19TTEFWRV9BVFRS X1IoaW5zdGFuY2VfaWQpOwo+ICtJM0NfU0xBVkVfQVRUUl9XKGluc3RhbmNlX2lkLCB1OCk7Cj4g K0NPTkZJR0ZTX0FUVFIoaTNjX3NsYXZlX2Z1bmNfLCBpbnN0YW5jZV9pZCk7Cj4gKwo+ICtJM0Nf U0xBVkVfQVRUUl9SKGV4dF9pZCk7Cj4gK0kzQ19TTEFWRV9BVFRSX1coZXh0X2lkLCB1MTYpOwo+ ICtDT05GSUdGU19BVFRSKGkzY19zbGF2ZV9mdW5jXywgZXh0X2lkKTsKPiArCj4gK0kzQ19TTEFW RV9BVFRSX1IobWF4X3dyaXRlX2xlbik7Cj4gK0kzQ19TTEFWRV9BVFRSX1cobWF4X3dyaXRlX2xl biwgdTE2KTsKPiArQ09ORklHRlNfQVRUUihpM2Nfc2xhdmVfZnVuY18sIG1heF93cml0ZV9sZW4p Owo+ICsKPiArSTNDX1NMQVZFX0FUVFJfUihtYXhfcmVhZF9sZW4pOwo+ICtJM0NfU0xBVkVfQVRU Ul9XKG1heF9yZWFkX2xlbiwgdTE2KTsKPiArQ09ORklHRlNfQVRUUihpM2Nfc2xhdmVfZnVuY18s IG1heF9yZWFkX2xlbik7Cj4gKwo+ICtJM0NfU0xBVkVfQVRUUl9SKGJjcik7Cj4gK0kzQ19TTEFW RV9BVFRSX1coYmNyLCB1OCk7Cj4gK0NPTkZJR0ZTX0FUVFIoaTNjX3NsYXZlX2Z1bmNfLCBiY3Ip Owo+ICsKPiArSTNDX1NMQVZFX0FUVFJfUihkY3IpOwo+ICtJM0NfU0xBVkVfQVRUUl9XKGRjciwg dTgpOwo+ICtDT05GSUdGU19BVFRSKGkzY19zbGF2ZV9mdW5jXywgZGNyKTsKPiArCj4gK3N0YXRp YyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICppM2Nfc2xhdmVfZnVuY19hdHRyc1tdID0gewo+ ICsJJmkzY19zbGF2ZV9mdW5jX2F0dHJfdmVuZG9yX2lkLAo+ICsJJmkzY19zbGF2ZV9mdW5jX2F0 dHJfdmVuZG9yX2luZm8sCj4gKwkmaTNjX3NsYXZlX2Z1bmNfYXR0cl9wYXJ0X2lkLAo+ICsJJmkz Y19zbGF2ZV9mdW5jX2F0dHJfaW5zdGFuY2VfaWQsCj4gKwkmaTNjX3NsYXZlX2Z1bmNfYXR0cl9l eHRfaWQsCj4gKwkmaTNjX3NsYXZlX2Z1bmNfYXR0cl9tYXhfd3JpdGVfbGVuLAo+ICsJJmkzY19z bGF2ZV9mdW5jX2F0dHJfbWF4X3JlYWRfbGVuLAo+ICsJJmkzY19zbGF2ZV9mdW5jX2F0dHJfYmNy LAo+ICsJJmkzY19zbGF2ZV9mdW5jX2F0dHJfZGNyLAo+ICsJTlVMTCwKPiArfTsKPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBpM2Nfc2xhdmVfZnVuY190eXBlID0g ewo+ICsJLmN0X2F0dHJzICAgICAgID0gaTNjX3NsYXZlX2Z1bmNfYXR0cnMsCj4gKwkuY3Rfb3du ZXIgICAgICAgPSBUSElTX01PRFVMRSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgY29uZmln X2dyb3VwICppM2Nfc2xhdmVfZnVuY19tYWtlKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBj b25zdCBjaGFyICpuYW1lKQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmNfZ3JvdXAgKmZ1 bmNfZ3JvdXA7Cj4gKwlzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmMgKmZ1bmM7Cj4gKwlpbnQgZXJyOwo+ ICsKPiArCWZ1bmNfZ3JvdXAgPSBremFsbG9jKHNpemVvZigqZnVuY19ncm91cCksIEdGUF9LRVJO RUwpOwo+ICsJaWYgKCFmdW5jX2dyb3VwKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ ICsKPiArCWNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZSgmZnVuY19ncm91cC0+Z3JvdXAsIG5h bWUsICZpM2Nfc2xhdmVfZnVuY190eXBlKTsKPiArCj4gKwlmdW5jID0gaTNjX3NsYXZlX2Z1bmNf Y3JlYXRlKGdyb3VwLT5jZ19pdGVtLmNpX25hbWUsIG5hbWUpOwo+ICsJaWYgKElTX0VSUihmdW5j KSkgewo+ICsJCXByX2VycigiZmFpbGVkIHRvIGNyZWF0ZSBpM2Mgc2xhdmUgZnVuY3Rpb24gZGV2 aWNlXG4iKTsKPiArCQllcnIgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZnJlZV9ncm91cDsKPiArCX0K PiArCj4gKwlmdW5jLT5ncm91cCA9ICZmdW5jX2dyb3VwLT5ncm91cDsKPiArCj4gKwlmdW5jX2dy b3VwLT5mdW5jID0gZnVuYzsKPiArCj4gKwlyZXR1cm4gJmZ1bmNfZ3JvdXAtPmdyb3VwOwo+ICsK PiArZnJlZV9ncm91cDoKPiArCWtmcmVlKGZ1bmNfZ3JvdXApOwo+ICsKPiArCXJldHVybiBFUlJf UFRSKGVycik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGkzY19zbGF2ZV9mdW5jX2Ryb3Aoc3Ry dWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKPiArewo+ ICsJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGNvbmZp Z2ZzX2dyb3VwX29wZXJhdGlvbnMgaTNjX3NsYXZlX2Z1bmNfZ3JvdXBfb3BzID0gewo+ICsJLm1h a2VfZ3JvdXAgICAgID0gJmkzY19zbGF2ZV9mdW5jX21ha2UsCj4gKwkuZHJvcF9pdGVtICAgICAg PSAmaTNjX3NsYXZlX2Z1bmNfZHJvcCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg Y29uZmlnX2l0ZW1fdHlwZSBpM2Nfc2xhdmVfZnVuY19ncm91cF90eXBlID0gewo+ICsJLmN0X2dy b3VwX29wcyAgID0gJmkzY19zbGF2ZV9mdW5jX2dyb3VwX29wcywKPiArCS5jdF9vd25lciAgICAg ICA9IFRISVNfTU9EVUxFLAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIGkzY19zbGF2ZV9jZnNfYWRk X2Z1bmNfZ3JvdXAoKSAtIGFkZCBJM0Mgc2xhdmUgZnVuY3Rpb24gZ3JvdXAKPiArICogQG5hbWU6 IGdyb3VwIG5hbWUKPiArICoKPiArICogUmV0dXJuOiBQb2ludGVyIHRvIHN0cnVjdCBjb25maWdf Z3JvdXAKPiArICovCj4gK3N0cnVjdCBjb25maWdfZ3JvdXAgKmkzY19zbGF2ZV9jZnNfYWRkX2Z1 bmNfZ3JvdXAoY29uc3QgY2hhciAqbmFtZSkKPiArewo+ICsJc3RydWN0IGNvbmZpZ19ncm91cCAq Z3JvdXA7Cj4gKwo+ICsJZ3JvdXAgPSBjb25maWdmc19yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKGZ1 bmN0aW9uc19ncm91cCwgbmFtZSwKPiArCQkJCQkJJmkzY19zbGF2ZV9mdW5jX2dyb3VwX3R5cGUp Owo+ICsJaWYgKElTX0VSUihncm91cCkpCj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIg Y29uZmlnZnMgZ3JvdXAgZm9yICVzIGZ1bmN0aW9uXG4iLAo+ICsJCSAgICAgICBuYW1lKTsKPiAr Cj4gKwlyZXR1cm4gZ3JvdXA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChpM2Nfc2xhdmVfY2ZzX2Fk ZF9mdW5jX2dyb3VwKTsKPiArCj4gKy8qKgo+ICsgKiBpM2Nfc2xhdmVfY2ZzX3JlbW92ZV9mdW5j X2dyb3VwKCkgLSBhZGQgSTNDIHNsYXZlIGZ1bmN0aW9uIGdyb3VwCj4gKyAqIEBncm91cDogZ3Jv dXAgdG8gYmUgcmVtb3ZlZAo+ICsgKi8KPiArdm9pZCBpM2Nfc2xhdmVfY2ZzX3JlbW92ZV9mdW5j X2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKQo+ICt7Cj4gKwlpZiAoSVNfRVJSX09S X05VTEwoZ3JvdXApKQo+ICsJCXJldHVybjsKPiArCj4gKwljb25maWdmc191bnJlZ2lzdGVyX2Rl ZmF1bHRfZ3JvdXAoZ3JvdXApOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woaTNjX3NsYXZlX2Nmc19y ZW1vdmVfZnVuY19ncm91cCk7Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVt X3R5cGUgaTNjX3NsYXZlX2NvbnRyb2xsZXJzX3R5cGUgPSB7Cj4gKwkuY3Rfb3duZXIgICAgICAg PSBUSElTX01PRFVMRSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0 ZW1fdHlwZSBpM2Nfc2xhdmVfZnVuY3Rpb25zX3R5cGUgPSB7Cj4gKwkuY3Rfb3duZXIgICAgICAg PSBUSElTX01PRFVMRSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0 ZW1fdHlwZSBpM2Nfc2xhdmVfdHlwZSA9IHsKPiArCS5jdF9vd25lciAgICAgICA9IFRISVNfTU9E VUxFLAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gaTNjX3Ns YXZlX2Nmc19zdWJzeXMgPSB7Cj4gKwkuc3VfZ3JvdXAgPSB7Cj4gKwkJLmNnX2l0ZW0gPSB7Cj4g KwkJCS5jaV9uYW1lYnVmID0gImkzY19zbGF2ZSIsCj4gKwkJCS5jaV90eXBlID0gJmkzY19zbGF2 ZV90eXBlLAo+ICsJCX0sCj4gKwl9LAo+ICsJLnN1X211dGV4ID0gX19NVVRFWF9JTklUSUFMSVpF UihpM2Nfc2xhdmVfY2ZzX3N1YnN5cy5zdV9tdXRleCksCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50 IF9faW5pdCBpM2Nfc2xhdmVfY2ZzX2luaXQodm9pZCkKPiArewo+ICsJaW50IHJldDsKPiArCXN0 cnVjdCBjb25maWdfZ3JvdXAgKnJvb3QgPSAmaTNjX3NsYXZlX2Nmc19zdWJzeXMuc3VfZ3JvdXA7 Cj4gKwo+ICsJY29uZmlnX2dyb3VwX2luaXQocm9vdCk7Cj4gKwo+ICsJcmV0ID0gY29uZmlnZnNf cmVnaXN0ZXJfc3Vic3lzdGVtKCZpM2Nfc2xhdmVfY2ZzX3N1YnN5cyk7Cj4gKwlpZiAocmV0KSB7 Cj4gKwkJcHJfZXJyKCJFcnJvciAlZCB3aGlsZSByZWdpc3RlcmluZyBzdWJzeXN0ZW0gJXNcbiIs Cj4gKwkJICAgICAgIHJldCwgcm9vdC0+Y2dfaXRlbS5jaV9uYW1lYnVmKTsKPiArCQlnb3RvIGVy cjsKPiArCX0KPiArCj4gKwlmdW5jdGlvbnNfZ3JvdXAgPSBjb25maWdmc19yZWdpc3Rlcl9kZWZh dWx0X2dyb3VwKHJvb3QsICJmdW5jdGlvbnMiLAo+ICsJCQkJCQkJICAmaTNjX3NsYXZlX2Z1bmN0 aW9uc190eXBlKTsKPiArCWlmIChJU19FUlIoZnVuY3Rpb25zX2dyb3VwKSkgewo+ICsJCXJldCA9 IFBUUl9FUlIoZnVuY3Rpb25zX2dyb3VwKTsKPiArCQlwcl9lcnIoIkVycm9yICVkIHdoaWxlIHJl Z2lzdGVyaW5nIGZ1bmN0aW9ucyBncm91cFxuIiwKPiArCQkgICAgICAgcmV0KTsKPiArCQlnb3Rv IGVycl9mdW5jdGlvbnNfZ3JvdXA7Cj4gKwl9Cj4gKwo+ICsJY29udHJvbGxlcnNfZ3JvdXAgPQo+ ICsJCWNvbmZpZ2ZzX3JlZ2lzdGVyX2RlZmF1bHRfZ3JvdXAocm9vdCwgImNvbnRyb2xsZXJzIiwK PiArCQkJCQkJJmkzY19zbGF2ZV9jb250cm9sbGVyc190eXBlKTsKPiArCWlmIChJU19FUlIoY29u dHJvbGxlcnNfZ3JvdXApKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihjb250cm9sbGVyc19ncm91cCk7 Cj4gKwkJcHJfZXJyKCJFcnJvciAlZCB3aGlsZSByZWdpc3RlcmluZyBjb250cm9sbGVycyBncm91 cFxuIiwKPiArCQkgICAgICAgcmV0KTsKPiArCQlnb3RvIGVycl9jb250cm9sbGVyc19ncm91cDsK PiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9jb250cm9sbGVyc19ncm91cDoKPiAr CWNvbmZpZ2ZzX3VucmVnaXN0ZXJfZGVmYXVsdF9ncm91cChmdW5jdGlvbnNfZ3JvdXApOwo+ICsK PiArZXJyX2Z1bmN0aW9uc19ncm91cDoKPiArCWNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVt KCZpM2Nfc2xhdmVfY2ZzX3N1YnN5cyk7Cj4gKwo+ICtlcnI6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9 Cj4gK21vZHVsZV9pbml0KGkzY19zbGF2ZV9jZnNfaW5pdCk7Cj4gKwo+ICtNT0RVTEVfREVTQ1JJ UFRJT04oIkkzQyBGVU5DIENPTkZJR0ZTIik7Cj4gK01PRFVMRV9BVVRIT1IoIkZyYW5rIExpIDxG cmFuay5MaUBueHAuY29tPiIpOwo+ICsKPiArCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTNjL3Ns YXZlLmMgYi9kcml2ZXJzL2kzYy9zbGF2ZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAwLi5lZGQ3YTI4ODgyNzFiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvaTNjL3NsYXZlLmMKPiBAQCAtMCwwICsxLDQ0MSBAQAo+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBjb25maWdmcyB0byBjb25maWd1cmUgdGhl IEkzQyBTbGF2ZQo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjMgTlhQCj4gKyAqIEF1dGhv cjogRnJhbmsgTGkgPEZyYW5rLkxpQG54cC5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxp bnV4L2NvbmZpZ2ZzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2kzYy9zbGF2ZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvaWRyLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9zbGFiLmg+Cj4gKwo+ICtzdGF0aWMgREVGSU5FX01VVEVYKGZ1bmNfbG9jayk7Cj4g K3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKmkzY19zbGF2ZV9jdHJsX2NsYXNzOwo+ICsKPiArc3RhdGlj IHZvaWQgaTNjX3NsYXZlX2Z1bmNfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7 Cj4gKwlzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmMgKmZ1bmMgPSB0b19pM2Nfc2xhdmVfZnVuYyhkZXYp Owo+ICsKPiArCWtmcmVlKGZ1bmMtPm5hbWUpOwo+ICsJa2ZyZWUoZnVuYyk7Cj4gK30KPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgaTNjX3NsYXZlX2Z1bmNfdHlwZSA9IHsK PiArCS5yZWxlYXNlICAgICAgICA9IGkzY19zbGF2ZV9mdW5jX2Rldl9yZWxlYXNlLAo+ICt9Owo+ ICsKPiArc3RhdGljIGludCBpM2Nfc2xhdmVfZnVuY19tYXRjaF9kcml2ZXIoc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQo+ICt7Cj4gKwlyZXR1cm4gIXN0cm5j bXAoZGV2X25hbWUoZGV2KSwgZHJ2LT5uYW1lLCBzdHJsZW4oZHJ2LT5uYW1lKSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgaTNjX3NsYXZlX2Z1bmNfZGV2aWNlX3Byb2JlKHN0cnVjdCBkZXZpY2Ug KmRldikKPiArewo+ICsJc3RydWN0IGkzY19zbGF2ZV9mdW5jICpmdW5jID0gdG9faTNjX3NsYXZl X2Z1bmMoZGV2KTsKPiArCXN0cnVjdCBpM2Nfc2xhdmVfZnVuY19kcml2ZXIgKmRyaXZlciA9IHRv X2kzY19zbGF2ZV9mdW5jX2RyaXZlcihkZXYtPmRyaXZlcik7Cj4gKwo+ICsJaWYgKCFkcml2ZXIt PnByb2JlKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCWZ1bmMtPmRyaXZlciA9IGRyaXZl cjsKPiArCj4gKwlyZXR1cm4gZHJpdmVyLT5wcm9iZShmdW5jKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgaTNjX3NsYXZlX2Z1bmNfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4g K3sKPiArCXN0cnVjdCBpM2Nfc2xhdmVfZnVuYyAqZnVuYyA9IHRvX2kzY19zbGF2ZV9mdW5jKGRl dik7Cj4gKwlzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmNfZHJpdmVyICpkcml2ZXIgPSB0b19pM2Nfc2xh dmVfZnVuY19kcml2ZXIoZGV2LT5kcml2ZXIpOwo+ICsKPiArCWlmIChkcml2ZXItPnJlbW92ZSkK PiArCQlkcml2ZXItPnJlbW92ZShmdW5jKTsKPiArCWZ1bmMtPmRyaXZlciA9IE5VTEw7Cj4gK30K PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgaTNjX3NsYXZlX2Z1bmNfYnVzX3R5 cGUgPSB7Cj4gKwkubmFtZSA9ICJpM2Nfc2xhdmVfZnVuYyIsCj4gKwkucHJvYmUgPSBpM2Nfc2xh dmVfZnVuY19kZXZpY2VfcHJvYmUsCj4gKwkucmVtb3ZlID0gaTNjX3NsYXZlX2Z1bmNfZGV2aWNl X3JlbW92ZSwKPiArCS5tYXRjaCA9IGkzY19zbGF2ZV9mdW5jX21hdGNoX2RyaXZlciwKPiArfTsK PiArCj4gK3N0YXRpYyB2b2lkIGkzY19zbGF2ZV9jdHJsX3JlbGVhc2Uoc3RydWN0IGRldmljZSAq ZGV2KQo+ICt7Cj4gKwlrZnJlZSh0b19pM2Nfc2xhdmVfY3RybChkZXYpKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgZGV2bV9pM2Nfc2xhdmVfY3RybF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRl diwgdm9pZCAqcmVzKQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX3NsYXZlX2N0cmwgKmN0cmwgPSAqKHN0 cnVjdCBpM2Nfc2xhdmVfY3RybCAqKilyZXM7Cj4gKwo+ICsJaTNjX3NsYXZlX2N0cmxfZGVzdHJv eShjdHJsKTsKPiArfQo+ICsKPiArc3RydWN0IGkzY19zbGF2ZV9jdHJsICoKPiArX19kZXZtX2kz Y19zbGF2ZV9jdHJsX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpM2Nf c2xhdmVfY3RybF9vcHMgKm9wcywKPiArCQkgICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lcikKPiAr ewo+ICsJc3RydWN0IGkzY19zbGF2ZV9jdHJsICoqcHRyLCAqY3RybDsKPiArCj4gKwlwdHIgPSBk ZXZyZXNfYWxsb2MoZGV2bV9pM2Nfc2xhdmVfY3RybF9yZWxlYXNlLCBzaXplb2YoKnB0ciksIEdG UF9LRVJORUwpOwo+ICsJaWYgKCFwdHIpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4g Kwo+ICsJY3RybCA9IF9faTNjX3NsYXZlX2N0cmxfY3JlYXRlKGRldiwgb3BzLCBvd25lcik7Cj4g KwlpZiAoIUlTX0VSUihjdHJsKSkgewo+ICsJCSpwdHIgPSBjdHJsOwo+ICsJCWRldnJlc19hZGQo ZGV2LCBwdHIpOwo+ICsJfSBlbHNlIHsKPiArCQlkZXZyZXNfZnJlZShwdHIpOwo+ICsJfQo+ICsK PiArCXJldHVybiBjdHJsOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRldm1faTNjX3NsYXZlX2N0 cmxfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMsIHZvaWQgKm1hdGNoX2RhdGEp Cj4gK3sKPiArCXN0cnVjdCBpM2Nfc2xhdmVfY3RybCAqKnB0ciA9IHJlczsKPiArCj4gKwlyZXR1 cm4gKnB0ciA9PSBtYXRjaF9kYXRhOwo+ICt9Cj4gKwo+ICsvKioKPiArICogX19pM2Nfc2xhdmVf Y3RybF9jcmVhdGUoKSAtIGNyZWF0ZSBhIG5ldyBzbGF2ZSBjb250cm9sbGVyIGRldmljZQo+ICsg KiBAZGV2OiBkZXZpY2UgdGhhdCBpcyBjcmVhdGluZyB0aGUgbmV3IHNsYXZlIGNvbnRyb2xsZXIK PiArICogQG9wczogZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHBlcmZvcm1pbmcgc2xhdmUgY29udHJv bGxlciAgb3BlcmF0aW9ucwo+ICsgKiBAb3duZXI6IHRoZSBvd25lciBvZiB0aGUgbW9kdWxlIHRo YXQgY3JlYXRlcyB0aGUgc2xhdmUgY29udHJvbGxlciBkZXZpY2UKPiArICoKPiArICogUmV0dXJu OiBQb2ludGVyIHRvIHN0cnVjdCBpM2Nfc2xhdmVfY3RybAo+ICsgKi8KPiArc3RydWN0IGkzY19z bGF2ZV9jdHJsICoKPiArX19pM2Nfc2xhdmVfY3RybF9jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2 LCBjb25zdCBzdHJ1Y3QgaTNjX3NsYXZlX2N0cmxfb3BzICpvcHMsCj4gKwkJCXN0cnVjdCBtb2R1 bGUgKm93bmVyKQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX3NsYXZlX2N0cmwgKmN0cmw7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCWlmIChXQVJOX09OKCFkZXYpKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5W QUwpOwo+ICsKPiArCWN0cmwgPSBremFsbG9jKHNpemVvZigqY3RybCksIEdGUF9LRVJORUwpOwo+ ICsJaWYgKCFjdHJsKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCWRldmlj ZV9pbml0aWFsaXplKCZjdHJsLT5kZXYpOwo+ICsJY3RybC0+ZGV2LmNsYXNzID0gaTNjX3NsYXZl X2N0cmxfY2xhc3M7Cj4gKwljdHJsLT5kZXYucGFyZW50ID0gZGV2Owo+ICsJY3RybC0+ZGV2LnJl bGVhc2UgPSBpM2Nfc2xhdmVfY3RybF9yZWxlYXNlOwo+ICsJY3RybC0+b3BzID0gb3BzOwo+ICsK PiArCXJldCA9IGRldl9zZXRfbmFtZSgmY3RybC0+ZGV2LCAiJXMiLCBkZXZfbmFtZShkZXYpKTsK PiArCWlmIChyZXQpCj4gKwkJZ290byBwdXRfZGV2Owo+ICsKPiArCXJldCA9IGRldmljZV9hZGQo JmN0cmwtPmRldik7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gcHV0X2RldjsKPiArCj4gKwljdHJs LT5ncm91cCA9IGkzY19zbGF2ZV9jZnNfYWRkX2N0cmxfZ3JvdXAoY3RybCk7Cj4gKwlpZiAoIWN0 cmwtPmdyb3VwKQo+ICsJCWdvdG8gcHV0X2RldjsKPiArCj4gKwlyZXR1cm4gY3RybDsKPiArCj4g K3B1dF9kZXY6Cj4gKwlwdXRfZGV2aWNlKCZjdHJsLT5kZXYpOwo+ICsJa2ZyZWUoY3RybCk7Cj4g Kwo+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChfX2kz Y19zbGF2ZV9jdHJsX2NyZWF0ZSk7Cj4gKwo+ICsvKioKPiArICogZGV2bV9pM2Nfc2xhdmVfY3Ry bF9kZXN0cm95KCkgLSBkZXN0cm95IHRoZSBzbGF2ZSBjb250cm9sbGVyIGRldmljZQo+ICsgKiBA ZGV2OiBkZXZpY2UgdGhhdCBpcyBjcmVhdGluZyB0aGUgbmV3IHNsYXZlIGNvbnRyb2xsZXIgZGV2 aWNlCj4gKyAqIEBvcHM6IGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBwZXJmb3JtaW5nIHNsYXZlIGNv bnRyb2xsZXIgb3BlcmF0aW9ucwo+ICsgKiBAb3duZXI6IHRoZSBvd25lciBvZiB0aGUgbW9kdWxl IHRoYXQgY3JlYXRlcyB0aGUgc2xhdmUgY29udHJvbGxlciBkZXZpY2UKPiArICoKPiArICogSW52 b2tlIHRvIGNyZWF0ZSBhIG5ldyBzbGF2ZSBjb250cm9sbGVyIGRldmljZSBhbmQgYWRkIGl0IHRv IGkzY19zbGF2ZSBjbGFzcy4gV2hpbGUgYXQgdGhhdCwgaXQKPiArICogYWxzbyBhc3NvY2lhdGVz IHRoZSBkZXZpY2Ugd2l0aCB0aGUgaTNjX3NsYXZlIHVzaW5nIGRldnJlcy4gT24gZHJpdmVyIGRl dGFjaCwgcmVsZWFzZSBmdW5jdGlvbiBpcwo+ICsgKiBpbnZva2VkIG9uIHRoZSBkZXZyZXMgZGF0 YSwgdGhlbiBkZXZyZXMgZGF0YSBpcyBmcmVlZC4KPiArICovCj4gK3ZvaWQgZGV2bV9pM2Nfc2xh dmVfY3RybF9kZXN0cm95KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGkzY19zbGF2ZV9jdHJs ICpjdHJsKQo+ICt7Cj4gKwlpbnQgcjsKPiArCj4gKwlyID0gZGV2cmVzX2Rlc3Ryb3koZGV2LCBk ZXZtX2kzY19zbGF2ZV9jdHJsX3JlbGVhc2UsIGRldm1faTNjX3NsYXZlX2N0cmxfbWF0Y2gsCj4g KwkJCSAgIGN0cmwpOwo+ICsJZGV2X1dBUk5fT05DRShkZXYsIHIsICJjb3VsZG4ndCBmaW5kIEkz QyBjb250cm9sbGVyIHJlc291cmNlXG4iKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkZXZt X2kzY19zbGF2ZV9jdHJsX2Rlc3Ryb3kpOwo+ICsKPiArCj4gKwo+ICsvKioKPiArICogaTNjX3Ns YXZlX2N0cmxfZGVzdHJveSgpIC0gZGVzdHJveSB0aGUgc2xhdmUgY29udHJvbGxlciBkZXZpY2UK PiArICogQGN0cmw6IHRoZSBzbGF2ZSBjb250cm9sbGVyIGRldmljZSB0aGF0IGhhcyB0byBiZSBk ZXN0cm95ZWQKPiArICoKPiArICogSW52b2tlIHRvIGRlc3Ryb3kgdGhlIEkzQyBzbGF2ZSBkZXZp Y2UKPiArICovCj4gK3ZvaWQgaTNjX3NsYXZlX2N0cmxfZGVzdHJveShzdHJ1Y3QgaTNjX3NsYXZl X2N0cmwgKmN0cmwpCj4gK3sKPiArCWkzY19zbGF2ZV9jZnNfcmVtb3ZlX2N0cmxfZ3JvdXAoY3Ry bC0+Z3JvdXApOwo+ICsJZGV2aWNlX3VucmVnaXN0ZXIoJmN0cmwtPmRldik7Cj4gK30KPiArRVhQ T1JUX1NZTUJPTF9HUEwoaTNjX3NsYXZlX2N0cmxfZGVzdHJveSk7Cj4gKwo+ICsvKioKPiArICog aTNjX3NsYXZlX2N0cmxfYWRkX2Z1bmMoKSAtIGJpbmQgSTNDIHNsYXZlIGZ1bmN0aW9uIHRvIGFu IHNsYXZlIGNvbnRyb2xsZXIKPiArICogQGN0cmw6IHRoZSBjb250cm9sbGVyIGRldmljZSB0byB3 aGljaCB0aGUgc2xhdmUgZnVuY3Rpb24gc2hvdWxkIGJlIGFkZGVkCj4gKyAqIEBmdW5jOiB0aGUg c2xhdmUgZnVuY3Rpb24gdG8gYmUgYWRkZWQKPiArICoKPiArICogQW4gSTNDIHNsYXZlIGRldmlj ZSBjYW4gaGF2ZSBvbmx5IG9uZSBmdW5jdGlvbnMuCj4gKyAqLwo+ICtpbnQgaTNjX3NsYXZlX2N0 cmxfYWRkX2Z1bmMoc3RydWN0IGkzY19zbGF2ZV9jdHJsICpjdHJsLCBzdHJ1Y3QgaTNjX3NsYXZl X2Z1bmMgKmZ1bmMpCj4gK3sKPiArCWlmIChjdHJsLT5mdW5jKQo+ICsJCXJldHVybiAtRUJVU1k7 Cj4gKwo+ICsJY3RybC0+ZnVuYyA9IGZ1bmM7Cj4gKwlmdW5jLT5jdHJsID0gY3RybDsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChpM2Nfc2xhdmVfY3RybF9hZGRf ZnVuYyk7Cj4gKwo+ICsvKioKPiArICogaTNjX3NsYXZlX2N0cmxfcmVtb3ZlX2Z1bmMoKSAtIHVu YmluZCBJM0Mgc2xhdmUgZnVuY3Rpb24gdG8gYW4gc2xhdmUgY29udHJvbGxlcgo+ICsgKiBAY3Ry bDogdGhlIGNvbnRyb2xsZXIgZGV2aWNlIHRvIHdoaWNoIHRoZSBzbGF2ZSBmdW5jdGlvbiBzaG91 bGQgYmUgcmVtb3ZlZAo+ICsgKiBAZnVuYzogdGhlIHNsYXZlIGZ1bmN0aW9uIHRvIGJlIHJlbW92 ZWQKPiArICoKPiArICogQW4gSTNDIHNsYXZlIGRldmljZSBjYW4gaGF2ZSBvbmx5IG9uZSBmdW5j dGlvbnMuCj4gKyAqLwo+ICt2b2lkIGkzY19zbGF2ZV9jdHJsX3JlbW92ZV9mdW5jKHN0cnVjdCBp M2Nfc2xhdmVfY3RybCAqY3RybCwgc3RydWN0IGkzY19zbGF2ZV9mdW5jICpmdW5jKQo+ICt7Cj4g KwljdHJsLT5mdW5jID0gTlVMTDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChpM2Nfc2xhdmVf Y3RybF9yZW1vdmVfZnVuYyk7Cj4gKwo+ICsKPiArLyoqCj4gKyAqIGkzY19zbGF2ZV9jdHJsKCkg LSBnZXQgdGhlIEkzQyBzbGF2ZSBjb250cm9sbGVyCj4gKyAqIEBuYW1lOiBkZXZpY2UgbmFtZSBv ZiB0aGUgc2xhdmUgY29udHJvbGxlcgo+ICsgKgo+ICsgKiBJbnZva2UgdG8gZ2V0IHN0cnVjdCBp M2Nfc2xhdmVfY3RybCAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRldmljZSBuYW1lIG9mIHRoZQo+ ICsgKiBzbGF2ZSBjb250cm9sbGVyCj4gKyAqLwo+ICtzdHJ1Y3QgaTNjX3NsYXZlX2N0cmwgKmkz Y19zbGF2ZV9jdHJsX2dldChjb25zdCBjaGFyICpuYW1lKQo+ICt7Cj4gKwlpbnQgcmV0ID0gLUVJ TlZBTDsKPiArCXN0cnVjdCBpM2Nfc2xhdmVfY3RybCAqY3RybDsKPiArCXN0cnVjdCBkZXZpY2Ug KmRldjsKPiArCXN0cnVjdCBjbGFzc19kZXZfaXRlciBpdGVyOwo+ICsKPiArCWNsYXNzX2Rldl9p dGVyX2luaXQoJml0ZXIsIGkzY19zbGF2ZV9jdHJsX2NsYXNzLCBOVUxMLCBOVUxMKTsKPiArCXdo aWxlICgoZGV2ID0gY2xhc3NfZGV2X2l0ZXJfbmV4dCgmaXRlcikpKSB7Cj4gKwkJaWYgKHN0cmNt cChuYW1lLCBkZXZfbmFtZShkZXYpKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWN0cmwgPSB0 b19pM2Nfc2xhdmVfY3RybChkZXYpOwo+ICsJCWlmICghdHJ5X21vZHVsZV9nZXQoY3RybC0+b3Bz LT5vd25lcikpIHsKPiArCQkJcmV0ID0gLUVJTlZBTDsKPiArCQkJZ290byBlcnI7Cj4gKwkJfQo+ ICsKPiArCQljbGFzc19kZXZfaXRlcl9leGl0KCZpdGVyKTsKPiArCQlnZXRfZGV2aWNlKCZjdHJs LT5kZXYpOwo+ICsJCXJldHVybiBjdHJsOwo+ICsJfQo+ICsKPiArZXJyOgo+ICsJY2xhc3NfZGV2 X2l0ZXJfZXhpdCgmaXRlcik7Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsKPiArfQo+ICtF WFBPUlRfU1lNQk9MX0dQTChpM2Nfc2xhdmVfY3RybF9nZXQpOwo+ICsKPiArLyoqCj4gKyAqIGkz Y19zbGF2ZV9jdHJsX3B1dCgpIC0gcmVsZWFzZSB0aGUgSTNDIGVuZHBvaW50IGNvbnRyb2xsZXIK PiArICogQHNsYXZlOiBzbGF2ZSByZXR1cm5lZCBieSBwY2lfc2xhdmVfZ2V0KCkKPiArICoKPiAr ICogcmVsZWFzZSB0aGUgcmVmY291bnQgdGhlIGNhbGxlciBvYnRhaW5lZCBieSBpbnZva2luZyBp M2Nfc2xhdmVfY3RybF9nZXQoKQo+ICsgKi8KPiArdm9pZCBpM2Nfc2xhdmVfY3RybF9wdXQoc3Ry dWN0IGkzY19zbGF2ZV9jdHJsICpjdHJsKQo+ICt7Cj4gKwlpZiAoIWN0cmwgfHwgSVNfRVJSKGN0 cmwpKQo+ICsJCXJldHVybjsKPiArCj4gKwltb2R1bGVfcHV0KGN0cmwtPm9wcy0+b3duZXIpOwo+ ICsJcHV0X2RldmljZSgmY3RybC0+ZGV2KTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChpM2Nf c2xhdmVfY3RybF9wdXQpOwo+ICsKPiArLyoqCj4gKyAqIGkzY19zbGF2ZV9mdW5jX2JpbmQoKSAt IE5vdGlmeSB0aGUgZnVuY3Rpb24gZHJpdmVyIHRoYXQgdGhlIGZ1bmN0aW9uIGRldmljZSBoYXMg YmVlbiBib3VuZCB0byBhCj4gKyAqCQkJICAgY29udHJvbGxlciBkZXZpY2UKPiArICogQGZ1bmM6 IHRoZSBmdW5jdGlvbiBkZXZpY2Ugd2hpY2ggaGFzIGJlZW4gYm91bmQgdG8gdGhlIGNvbnRyb2xs ZXIgZGV2aWNlCj4gKyAqCj4gKyAqIEludm9rZSB0byBub3RpZnkgdGhlIGZ1bmN0aW9uIGRyaXZl ciB0aGF0IGl0IGhhcyBiZWVuIGJvdW5kIHRvIGEgY29udHJvbGxlciBkZXZpY2UKPiArICovCj4g K2ludCBpM2Nfc2xhdmVfZnVuY19iaW5kKHN0cnVjdCBpM2Nfc2xhdmVfZnVuYyAqZnVuYykKPiAr ewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmZ1bmMtPmRldjsKPiArCWludCByZXQ7Cj4gKwo+ ICsJaWYgKCFmdW5jLT5kcml2ZXIpIHsKPiArCQlkZXZfV0FSTihkZXYsICJmdW5jIGRldmljZSBu b3QgYm91bmQgdG8gZHJpdmVyXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4g KwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGZ1bmMtPmRyaXZlci0+b3duZXIpKQo+ICsJCXJldHVybiAt RUFHQUlOOwo+ICsKPiArCW11dGV4X2xvY2soJmZ1bmMtPmxvY2spOwo+ICsJcmV0ID0gZnVuYy0+ ZHJpdmVyLT5vcHMtPmJpbmQoZnVuYyk7Cj4gKwlpZiAoIXJldCkKPiArCQlmdW5jLT5pc19ib3Vu ZCA9IHRydWU7Cj4gKwltdXRleF91bmxvY2soJmZ1bmMtPmxvY2spOwo+ICsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoaTNjX3NsYXZlX2Z1bmNfYmluZCk7Cj4gKwo+ ICsvKioKPiArICogaTNjX3NsYXZlX2Z1bmNfdW5iaW5kKCkgLSBOb3RpZnkgdGhlIGZ1bmN0aW9u IGRyaXZlciB0aGF0IHRoZSBiaW5kaW5nIGJldHdlZW4gdGhlIGZ1bmN0aW9uIGRldmljZQo+ICsg KgkJCSAgICAgYW5kIGNvbnRyb2xsZXIgZGV2aWNlIGhhcyBiZWVuIGxvc3QKPiArICogQGZ1bmM6 IHRoZSBmdW5jdGlvbiBkZXZpY2Ugd2hpY2ggaGFzIGxvc3QgdGhlIGJpbmRpbmcgd2l0aCB0aGUg Y29udHJvbGxlciBkZXZpY2UKPiArICoKPiArICogSW52b2tlIHRvIG5vdGlmeSB0aGUgZnVuY3Rp b24gZHJpdmVyIHRoYXQgdGhlIGJpbmRpbmcgYmV0d2VlbiB0aGUgZnVuY3Rpb24gZGV2aWNlIGFu ZCBjb250cm9sbGVyCj4gKyAqIGRldmljZSBoYXMgYmVlbiBsb3N0Lgo+ICsgKi8KPiArdm9pZCBp M2Nfc2xhdmVfZnVuY191bmJpbmQoc3RydWN0IGkzY19zbGF2ZV9mdW5jICpmdW5jKQo+ICt7Cj4g KwlpZiAoIWZ1bmMtPmRyaXZlcikgewo+ICsJCWRldl9XQVJOKCZmdW5jLT5kZXYsICJmdW5jIGRl dmljZSBub3QgYm91bmQgdG8gZHJpdmVyXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJ bXV0ZXhfbG9jaygmZnVuYy0+bG9jayk7Cj4gKwlpZiAoZnVuYy0+aXNfYm91bmQpCj4gKwkJZnVu Yy0+ZHJpdmVyLT5vcHMtPnVuYmluZChmdW5jKTsKPiArCW11dGV4X3VubG9jaygmZnVuYy0+bG9j ayk7Cj4gKwo+ICsJbW9kdWxlX3B1dChmdW5jLT5kcml2ZXItPm93bmVyKTsKPiArfQo+ICtFWFBP UlRfU1lNQk9MX0dQTChpM2Nfc2xhdmVfZnVuY191bmJpbmQpOwo+ICsKPiArLyoqCj4gKyAqIGkz Y19zbGF2ZV9mdW5jX2NyZWF0ZSgpIC0gY3JlYXRlIGEgbmV3IEkzQyBmdW5jdGlvbiBkZXZpY2UK PiArICogQGRydl9uYW1lOiB0aGUgZHJpdmVyIG5hbWUgb2YgdGhlIEkzQyBmdW5jdGlvbiBkZXZp Y2UuCj4gKyAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gZGV2aWNlLgo+ICsgKgo+ ICsgKiBJbnZva2UgdG8gY3JlYXRlIGEgbmV3IEkzQyBmdW5jdGlvbiBkZXZpY2UgYnkgcHJvdmlk aW5nIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBkZXZpY2UuCj4gKyAqLwo+ICtzdHJ1Y3QgaTNj X3NsYXZlX2Z1bmMgKmkzY19zbGF2ZV9mdW5jX2NyZWF0ZShjb25zdCBjaGFyICpkcnZfbmFtZSwg Y29uc3QgY2hhciAqbmFtZSkKPiArewo+ICsJc3RydWN0IGkzY19zbGF2ZV9mdW5jICpmdW5jOwo+ ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJaW50IHJldDsKPiArCj4gKwlmdW5jID0ga3phbGxv YyhzaXplb2YoKmZ1bmMpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZnVuYykKPiArCQlyZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKwlkZXYgPSAmZnVuYy0+ZGV2Owo+ICsJZGV2aWNlX2lu aXRpYWxpemUoZGV2KTsKPiArCWRldi0+YnVzID0gJmkzY19zbGF2ZV9mdW5jX2J1c190eXBlOwo+ ICsJZGV2LT50eXBlID0gJmkzY19zbGF2ZV9mdW5jX3R5cGU7Cj4gKwltdXRleF9pbml0KCZmdW5j LT5sb2NrKTsKPiArCj4gKwlyZXQgPSBkZXZfc2V0X25hbWUoZGV2LCAiJXMuJXMiLCBkcnZfbmFt ZSwgbmFtZSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHV0X2RldmljZShkZXYpOwo+ICsJCXJldHVy biBFUlJfUFRSKHJldCk7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZGV2aWNlX2FkZChkZXYpOwo+ICsJ aWYgKHJldCkgewo+ICsJCXB1dF9kZXZpY2UoZGV2KTsKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQp Owo+ICsJfQo+ICsKPiArCXJldHVybiBmdW5jOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGkz Y19zbGF2ZV9mdW5jX2NyZWF0ZSk7Cj4gKwo+ICsvKioKPiArICogX19pM2Nfc2xhdmVfZnVuY19y ZWdpc3Rlcl9kcml2ZXIoKSAtIHJlZ2lzdGVyIGEgbmV3IEkzQyBmdW5jdGlvbiBkcml2ZXIKPiAr ICogQGRyaXZlcjogc3RydWN0dXJlIHJlcHJlc2VudGluZyBJM0MgZnVuY3Rpb24gZHJpdmVyCj4g KyAqIEBvd25lcjogdGhlIG93bmVyIG9mIHRoZSBtb2R1bGUgdGhhdCByZWdpc3RlcnMgdGhlIEkz QyBmdW5jdGlvbiBkcml2ZXIKPiArICoKPiArICogSW52b2tlIHRvIHJlZ2lzdGVyIGEgbmV3IEkz QyBmdW5jdGlvbiBkcml2ZXIuCj4gKyAqLwo+ICtpbnQgX19pM2Nfc2xhdmVfZnVuY19yZWdpc3Rl cl9kcml2ZXIoc3RydWN0IGkzY19zbGF2ZV9mdW5jX2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgbW9k dWxlICpvd25lcikKPiArewo+ICsJaW50IHJldCA9IC1FRVhJU1Q7Cj4gKwo+ICsJaWYgKCFkcml2 ZXItPm9wcykKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpZiAoIWRyaXZlci0+b3BzLT5i aW5kIHx8ICFkcml2ZXItPm9wcy0+dW5iaW5kKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiAr CWRyaXZlci0+ZHJpdmVyLmJ1cyA9ICZpM2Nfc2xhdmVfZnVuY19idXNfdHlwZTsKPiArCWRyaXZl ci0+ZHJpdmVyLm93bmVyID0gb3duZXI7Cj4gKwo+ICsJcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZk cml2ZXItPmRyaXZlcik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaTNj X3NsYXZlX2Nmc19hZGRfZnVuY19ncm91cChkcml2ZXItPmRyaXZlci5uYW1lKTsKPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChfX2kzY19zbGF2ZV9mdW5jX3JlZ2lz dGVyX2RyaXZlcik7Cj4gKwo+ICsvKioKPiArICogaTNjX3NsYXZlX2Z1bmNfdW5yZWdpc3Rlcl9k cml2ZXIoKSAtIHVucmVnaXN0ZXIgdGhlIEkzQyBmdW5jdGlvbiBkcml2ZXIKPiArICogQGRyaXZl cjogdGhlIEkzQyBmdW5jdGlvbiBkcml2ZXIgdGhhdCBoYXMgdG8gYmUgdW5yZWdpc3RlcmVkCj4g KyAqCj4gKyAqIEludm9rZSB0byB1bnJlZ2lzdGVyIHRoZSBJM0MgZnVuY3Rpb24gZHJpdmVyLgo+ ICsgKi8KPiArdm9pZCBpM2Nfc2xhdmVfZnVuY191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgaTNj X3NsYXZlX2Z1bmNfZHJpdmVyICpmZCkKPiArewo+ICsJbXV0ZXhfbG9jaygmZnVuY19sb2NrKTsK PiArCW11dGV4X3VubG9jaygmZnVuY19sb2NrKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChp M2Nfc2xhdmVfZnVuY191bnJlZ2lzdGVyX2RyaXZlcik7Cj4gKwo+ICtzdGF0aWMgaW50IF9faW5p dCBpM2Nfc2xhdmVfaW5pdCh2b2lkKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWkzY19zbGF2 ZV9jdHJsX2NsYXNzID0gY2xhc3NfY3JlYXRlKCJpM2Nfc2xhdmUiKTsKPiArCWlmIChJU19FUlIo aTNjX3NsYXZlX2N0cmxfY2xhc3MpKSB7Cj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gY3JlYXRlIGkz YyBzbGF2ZSBjbGFzcyAtLT4gJWxkXG4iLAo+ICsJCQlQVFJfRVJSKGkzY19zbGF2ZV9jdHJsX2Ns YXNzKSk7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoaTNjX3NsYXZlX2N0cmxfY2xhc3MpOwo+ICsJfQo+ ICsKPiArCXJldCA9IGJ1c19yZWdpc3RlcigmaTNjX3NsYXZlX2Z1bmNfYnVzX3R5cGUpOwo+ICsJ aWYgKHJldCkgewo+ICsJCWNsYXNzX2Rlc3Ryb3koaTNjX3NsYXZlX2N0cmxfY2xhc3MpOwo+ICsJ CXByX2VycigiZmFpbGVkIHRvIHJlZ2lzdGVyIGkzYyBzbGF2ZSBmdW5jIGJ1cyAtLT4gJWRcbiIs IHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICtt b2R1bGVfaW5pdChpM2Nfc2xhdmVfaW5pdCk7Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2V4aXQgaTNj X3NsYXZlX2V4aXQodm9pZCkKPiArewo+ICsJY2xhc3NfZGVzdHJveShpM2Nfc2xhdmVfY3RybF9j bGFzcyk7Cj4gKwlidXNfdW5yZWdpc3RlcigmaTNjX3NsYXZlX2Z1bmNfYnVzX3R5cGUpOwo+ICsK PiArfQo+ICttb2R1bGVfZXhpdChpM2Nfc2xhdmVfZXhpdCk7Cj4gKwo+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2xpbnV4L2kzYy9zbGF2ZS5oIGIvaW5jbHVkZS9saW51eC9pM2Mvc2xhdmUuaAo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uYTRjYmJmYzZkNmVhOQo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRlL2xpbnV4L2kzYy9zbGF2ZS5oCj4gQEAgLTAs MCArMSw0NTggQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiAr LyoKPiArICogQ29weXJpZ2h0IDIwMjMgTlhQLgo+ICsgKgo+ICsgKiBBdXRob3I6IEZyYW5rIExp IDxGcmFuay5MaUBueHAuY29tPgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgSTNDX1NMQVZFX0gKPiAr I2RlZmluZSBJM0NfU0xBVkVfSAo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICsK PiArc3RydWN0IGkzY19zbGF2ZV9mdW5jOwo+ICtzdHJ1Y3QgaTNjX3NsYXZlX2N0cmw7Cj4gKwo+ ICsvKioKPiArICogc3RydWN0IGkzY19zbGF2ZV9mdW5jX29wcyAtIHNldCBvZiBmdW5jdGlvbiBw b2ludGVycyBmb3IgcGVyZm9ybWluZyBpM2Mgc2xhdmUgZnVuY3Rpb24gb3BlcmF0aW9ucwo+ICsg KiBAYmluZDogb3BzIHRvIHBlcmZvcm0gd2hlbiBhIGNvbnRyb2xsZXIgZGV2aWNlIGhhcyBiZWVu IGJvdW5kIHRvIGZ1bmN0aW9uIGRldmljZQo+ICsgKiBAdW5iaW5kOiBvcHMgdG8gcGVyZm9ybSB3 aGVuIGEgYmluZGluZyBoYXMgYmVlbiBsb3N0IGJldHdlZW4gYSBjb250cm9sbGVyIGRldmljZSBh bmQgZnVuY3Rpb24KPiArICoJICAgIGRldmljZQo+ICsgKi8KPiArc3RydWN0IGkzY19zbGF2ZV9m dW5jX29wcyB7Cj4gKwlpbnQgKCpiaW5kKShzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmMgKmZ1bmMpOwo+ ICsJdm9pZCAoKnVuYmluZCkoc3RydWN0IGkzY19zbGF2ZV9mdW5jICpmdW5jKTsKPiArfTsKPiAr Cj4gKy8qKgo+ICsgKiBzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmNfZHJpdmVyIC0gcmVwcmVzZW50cyB0 aGUgSTNDIGZ1bmN0aW9uIGRyaXZlcgo+ICsgKiBAcHJvYmU6IG9wcyB0byBwZXJmb3JtIHdoZW4g YSBuZXcgZnVuY3Rpb24gZGV2aWNlIGhhcyBiZWVuIGJvdW5kIHRvIHRoZSBmdW5jdGlvbiBkcml2 ZXIKPiArICogQHJlbW92ZTogb3BzIHRvIHBlcmZvcm0gd2hlbiB0aGUgYmluZGluZyBiZXR3ZWVu IHRoZSBmdW5jdGlvbiBkZXZpY2UgYW5kIGZ1bmN0aW9uIGRyaXZlciBpcwo+ICsgKgkgICAgYnJv a2VuCj4gKyAqIEBkcml2ZXI6IEkzQyBGdW5jdGlvbiBkcml2ZXIKPiArICogQG9wczogc2V0IG9m IGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBwZXJmb3JtaW5nIGZ1bmN0aW9uIG9wZXJhdGlvbnMKPiAr ICogQG93bmVyOiB0aGUgb3duZXIgb2YgdGhlIG1vZHVsZSB0aGF0IHJlZ2lzdGVycyB0aGUgSTND IGZ1bmN0aW9uIGRyaXZlcgo+ICsgKiBAZXBmX2dyb3VwOiBsaXN0IG9mIGNvbmZpZ2ZzIGdyb3Vw IGNvcnJlc3BvbmRpbmcgdG8gdGhlIEkzQyBmdW5jdGlvbiBkcml2ZXIKPiArICovCj4gK3N0cnVj dCBpM2Nfc2xhdmVfZnVuY19kcml2ZXIgewo+ICsJaW50ICgqcHJvYmUpKHN0cnVjdCBpM2Nfc2xh dmVfZnVuYyAqZnVuYyk7Cj4gKwl2b2lkICgqcmVtb3ZlKShzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmMg KmZ1bmMpOwo+ICsKPiArCWNoYXIgKm5hbWU7Cj4gKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2 ZXI7Cj4gKwlzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmNfb3BzICpvcHM7Cj4gKwlzdHJ1Y3QgbW9kdWxl ICpvd25lcjsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmMgLSBy ZXByZXNlbnRzIHRoZSBJM0MgZnVuY3Rpb24gZGV2aWNlCj4gKyAqIEBkZXY6IHRoZSBJM0MgZnVu Y3Rpb24gZGV2aWNlCj4gKyAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgSTNDIGZ1bmN0aW9uIGRl dmljZQo+ICsgKiBAZHJpdmVyOiB0aGUgZnVuY3Rpb24gZHJpdmVyIHRvIHdoaWNoIHRoaXMgZnVu Y3Rpb24gZGV2aWNlIGlzIGJvdW5kCj4gKyAqIEBncm91cDogY29uZmlnZnMgZ3JvdXAgYXNzb2Np YXRlZCB3aXRoIHRoZSBFUEYgZGV2aWNlCj4gKyAqIEBsb2NrOiBtdXRleCB0byBwcm90ZWN0IGkz Y19zbGF2ZV9mdW5jX29wcwo+ICsgKiBAY3RybDogYmluZGVkIEkzQyBjb250cm9sbGVyIGRldmlj ZQo+ICsgKiBAaXNfYm91bmQ6IGluZGljYXRlcyBpZiBiaW5kIG5vdGlmaWNhdGlvbiB0byBmdW5j dGlvbiBkcml2ZXIgaGFzIGJlZW4gaW52b2tlZAo+ICsgKiBAdmVkbm9yX2lkOiB2ZW5kb3IgaWQK PiArICogQHBhcnRfaWQ6IHBhcnQgaWQKPiArICogQGluc3RhbmNlX2lkOiBpbnN0YW5jZSBpZAo+ ICsgKiBAZXh0X2lkOiBleHQgaWQKPiArICogQHZlbmRvcl9pbmZvOiB2ZW5kb3IgaW5mbwo+ICsg KiBAc3RhdGljX2FkZHI6IHN0YXRpYyBhZGRyZXNzIGZvciBJMkMuIEl0IGlzIDAgZm9yIEkzQy4K PiArICogQG1heF93cml0ZV9sZW46IG1heGl1bSB3cml0ZSBsZW5ndGgKPiArICogQG1heF9yZWFk X2xlbjogbWF4aXVtIHJlYWQgbGVuZ3RoCj4gKyAqIEBiY3I6IGJ1cyBjaGFyYWN0ZXJpc3RpY3Mg cmVnaXN0ZXIgKEJDUikKPiArICogQGRjcjogZGV2aWNlIGNoYXJhY3RlcmlzdGljcyByZWdpc3Rl ciAoRENSKQo+ICsgKi8KPiArc3RydWN0IGkzY19zbGF2ZV9mdW5jIHsKPiArCXN0cnVjdCBkZXZp Y2UgZGV2Owo+ICsJY2hhciAqbmFtZTsKPiArCXN0cnVjdCBpM2Nfc2xhdmVfZnVuY19kcml2ZXIg KmRyaXZlcjsKPiArCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwOwo+ICsJLyogbXV0ZXggdG8g cHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIG9mIGkzY19zbGF2ZV9mdW5jX29wcyAq Lwo+ICsJc3RydWN0IG11dGV4IGxvY2s7Cj4gKwlzdHJ1Y3QgaTNjX3NsYXZlX2N0cmwgKmN0cmw7 Cj4gKwlib29sIGlzX2JvdW5kOwo+ICsKPiArCXUxNiB2ZW5kb3JfaWQ7Cj4gKwl1MTYgcGFydF9p ZDsKPiArCXU4IGluc3RhbmNlX2lkOwo+ICsJdTE2IGV4dF9pZDsKPiArCXU4IHZlbmRvcl9pbmZv Owo+ICsJdTE2IHN0YXRpY19hZGRyOwo+ICsJdTE2IG1heF93cml0ZV9sZW47CS8vMCBpcyBoYXJk d2FyZSBkZWZhdWx0IG1heCB2YWx1ZQo+ICsJdTE2IG1heF9yZWFkX2xlbjsJLy8wIGlzIGhhcmR3 YXJlIGRlZmF1bHQgbWF4IHZhbHVlCj4gKwl1OCBiY3I7Cj4gKwl1OCBkY3I7Cj4gK307Cj4gKwo+ ICtlbnVtIGkzY19yZXF1ZXN0X3N0YXQgewo+ICsJSTNDX1JFUVVFU1RfT0tBWSwKPiArCUkzQ19S RVFVRVNUX1BBUlRJQUwsCj4gKwlJM0NfUkVRVUVTVF9FUlIsCj4gKwlJM0NfUkVRVUVTVF9DQU5D RUwsCj4gK307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IGkzY19yZXF1ZXN0IC0gcmVwcmVzZW50 cyB0aGUgYW4gSTNDIHRyYW5zZmVyIHJlcXVlc3QKPiArICogQGJ1ZjogZGF0YSBidWZmZXIKPiAr ICogQGxlbmd0aDogZGF0YSBsZW5ndGgKPiArICogQGNvbXBsZXRlOiBjYWxsIGJhY2sgZnVuY3Rp b24gd2hlbiByZXF1ZXN0IGZpbmlzaGVkIG9yIGNhbmNlbGxlZAo+ICsgKiBAY29udGV4dDogZ2Vu ZXJhbCBkYXRhIGZvciBjb21wbGV0ZSBjYWxsYmFjayBmdW5jdGlvbgo+ICsgKiBAc3RhdHVzOiB0 cmFuc2ZlciBzdGF0dXMKPiArICogQGFjdHVhbDogaG93IG11Y2ggYWN0dWFsbHkgdHJhbnNmZXJy ZWQKPiArICogQGN0cmw6IEkzQyBzbGF2ZSBjb250cm9sbGVyIGFzc29jaWF0ZSB3aXRoIHRoaXMg cmVxdWVzdAo+ICsgKiBAdHg6IHRyYW5zZmVyIGRpcmVjdGlvbiwgMTogc2xhdmUgdG8gbWFzdGVy LCAwOiBtYXN0ZXIgdG8gc2xhdmUKPiArICovCj4gK3N0cnVjdCBpM2NfcmVxdWVzdCB7Cj4gKwl2 b2lkICpidWY7Cj4gKwl1bnNpZ25lZCBpbnQgbGVuZ3RoOwo+ICsKPiArCXZvaWQgKCpjb21wbGV0 ZSkoc3RydWN0IGkzY19yZXF1ZXN0ICpyZXEpOwo+ICsJdm9pZCAqY29udGV4dDsKPiArCXN0cnVj dCBsaXN0X2hlYWQgbGlzdDsKPiArCj4gKwllbnVtIGkzY19yZXF1ZXN0X3N0YXQgc3RhdHVzOwo+ ICsJdW5zaWduZWQgaW50IGFjdHVhbDsKPiArCXN0cnVjdCBpM2Nfc2xhdmVfY3RybCAqY3RybDsK PiArCWJvb2wgdHg7Cj4gK307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IGkzY19zbGF2ZV9jdHJs X2ZlYXR1cmVzIC0gcmVwcmVzZW50cyBJM0Mgc2xhdmUgY29udHJvbGxlciBmZWF0dXJlcy4KPiAr ICogQHR4X2ZpZm9fc3o6IHR4IGhhcmR3YXJlIGZpZm8gc2l6ZQo+ICsgKiBAcnhfZmlmb19zejog cnggaGFyZHdhcmUgZmlmbyBzaXplCj4gKyAqLwo+ICtzdHJ1Y3QgaTNjX3NsYXZlX2N0cmxfZmVh dHVyZXMgewo+ICsJdTMyIHR4X2ZpZm9fc3o7Cj4gKwl1MzIgcnhfZmlmb19zejsKPiArfTsKPiAr Cj4gKy8qKgo+ICsgKiBzdHJ1Y3QgaTNjX3NsYXZlX2N0cmxfb3BzIC0gc2V0IG9mIGZ1bmN0aW9u IHBvaW50ZXJzIGZvciBwZXJmb3JtaW5nIGNvbnRyb2xsZXIgb3BlcmF0aW9ucwo+ICsgKiBAc2V0 X2NvbmZpZzogc2V0IEkzQyBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24KPiArICogQGVuYWJsZTog ZW5hYmxlIEkzQyBjb250cm9sbGVyCj4gKyAqIEBkaXNhYmxlOiBkaXNhYmxlIEkzQyBjb250cm9s bGVyCj4gKyAqIEByYWlzZV9pYmk6IHJhc2llIElCSSBpbnRlcnJ1cHQgdG8gbWFzdGVyCj4gKyAq IEBxdWV1ZTogcXVldWUgYW4gSTNDIHRyYW5zZmVyCj4gKyAqIEBkZXF1ZXVlOiBkZXF1ZXVlIGFu IEkzQyB0cmFuc2Zlcgo+ICsgKiBAY2FuY2VsX2FsbF9yZXFzOiBjYWxsIGFsbCBwZW5kaW5nIHJl cXVlc3RzCj4gKyAqIEBmaWZvX3N0YXR1czogY3VycmVudCBGSUZPIHN0YXR1cwo+ICsgKiBAZmlm b19mbHVzaDogZmx1c2ggaGFyZHdhcmUgRklGTwo+ICsgKiBAZ2V0X2ZlYXR1cmVzOiBvcHMgdG8g Z2V0IHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIEkzQyBzbGF2ZSBjb250cm9sbGVyCj4g KyAqIEBvd25lcjogdGhlIG1vZHVsZSBvd25lciBjb250YWluaW5nIHRoZSBvcHMKPiArICovCj4g K3N0cnVjdCBpM2Nfc2xhdmVfY3RybF9vcHMgewo+ICsJaW50ICgqc2V0X2NvbmZpZykoc3RydWN0 IGkzY19zbGF2ZV9jdHJsICpjdHJsLCBzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmMgKmZ1bmMpOwo+ICsJ aW50ICgqZW5hYmxlKShzdHJ1Y3QgaTNjX3NsYXZlX2N0cmwgKmN0cmwpOwo+ICsJaW50ICgqZGlz YWJsZSkoc3RydWN0IGkzY19zbGF2ZV9jdHJsICpjdHJsKTsKPiArCWludCAoKnJhaXNlX2liaSko c3RydWN0IGkzY19zbGF2ZV9jdHJsICpjdHJsLCB2b2lkICpwLCB1OCBzaXplKTsKPiArCj4gKwlz dHJ1Y3QgaTNjX3JlcXVlc3QgKigqYWxsb2NfcmVxdWVzdCkoc3RydWN0IGkzY19zbGF2ZV9jdHJs ICpjdHJsLCBnZnBfdCBnZnBfZmxhZ3MpOwo+ICsJdm9pZCAoKmZyZWVfcmVxdWVzdCkoc3RydWN0 IGkzY19yZXF1ZXN0ICpyZXEpOwo+ICsKPiArCWludCAoKnF1ZXVlKShzdHJ1Y3QgaTNjX3JlcXVl c3QgKnJlcSwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKPiArCWludCAoKmRlcXVldWUpKHN0cnVjdCBpM2Nf cmVxdWVzdCAqcmVxKTsKPiArCj4gKwl2b2lkICgqY2FuY2VsX2FsbF9yZXFzKShzdHJ1Y3QgaTNj X3NsYXZlX2N0cmwgKmN0cmwsIGJvb2wgdHgpOwo+ICsKPiArCWludCAoKmZpZm9fc3RhdHVzKShz dHJ1Y3QgaTNjX3NsYXZlX2N0cmwgKmN0cmwsIGJvb2wgdHgpOwo+ICsJdm9pZCAoKmZpZm9fZmx1 c2gpKHN0cnVjdCBpM2Nfc2xhdmVfY3RybCAqY3RybCwgYm9vbCB0eCk7Cj4gKwo+ICsJY29uc3Qg c3RydWN0IGkzY19zbGF2ZV9jdHJsX2ZlYXR1cmVzICooKmdldF9mZWF0dXJlcykoc3RydWN0IGkz Y19zbGF2ZV9jdHJsICpjdHJsKTsKPiArCXN0cnVjdCBtb2R1bGUgKm93bmVyOwo+ICt9Owo+ICsK PiArLyoqCj4gKyAqIHN0cnVjdCBpM2Nfc2xhdmVfY3RybCAtIHJlcHJlc2VudHMgdGhlIEkzQyBz bGF2ZSBkZXZpY2UKPiArICogQGRldjogSTNDIHNsYXZlIGRldmljZQo+ICsgKiBAb3BzOiBmdW5j dGlvbiBwb2ludGVycyBmb3IgcGVyZm9ybWluZyBlbmRwb2ludCBvcGVyYXRpb25zCj4gKyAqIEBm dW5jOiBzbGF2ZSBmdW5jdGlvbnMgcHJlc2VudCBpbiB0aGlzIGNvbnRyb2xsZXIgZGV2aWNlCj4g KyAqIEBncm91cDogY29uZmlnZnMgZ3JvdXAgcmVwcmVzZW50aW5nIHRoZSBJM0MgY29udHJvbGxl ciBkZXZpY2UKPiArICovCj4gK3N0cnVjdCBpM2Nfc2xhdmVfY3RybCB7Cj4gKwlzdHJ1Y3QgZGV2 aWNlIGRldjsKPiArCWNvbnN0IHN0cnVjdCBpM2Nfc2xhdmVfY3RybF9vcHMgKm9wczsKPiArCXN0 cnVjdCBpM2Nfc2xhdmVfZnVuYyAqZnVuYzsKPiArCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3Vw Owo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIGkzY19zbGF2ZV9jdHJsX3JhaXNlX2liaSgpIC0gUmFp c2UgSUJJIHRvIG1hc3Rlcgo+ICsgKiBAY3RybDogSTNDIHNsYXZlIGNvbnRyb2xsZXIKPiArICog QHA6IG9wdGlvbmFsIGRhdGEgZm9yIElCSQo+ICsgKiBAc2l6ZTogc2l6ZSBvZiBvcHRpb25hbCBk YXRhCj4gKyAqCj4gKyAqIFJldHVybnM6IFplcm8gZm9yIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIGNv ZGUgaW4gY2FzZSBvZiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGludCBpM2Nfc2xh dmVfY3RybF9yYWlzZV9pYmkoc3RydWN0IGkzY19zbGF2ZV9jdHJsICpjdHJsLCB2b2lkICpwLCB1 OCBzaXplKQo+ICt7Cj4gKwlpZiAoY3RybCAmJiBjdHJsLT5vcHMgJiYgY3RybC0+b3BzLT5yYWlz ZV9pYmkpCj4gKwkJcmV0dXJuIGN0cmwtPm9wcy0+cmFpc2VfaWJpKGN0cmwsIHAsIHNpemUpOwo+ ICsKPiArCXJldHVybiAtRUlOVkFMOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaTNjX3NsYXZlX2N0 cmxfY2FuY2VsX2FsbF9yZXFzKCkgLSBDYW5jZWwgYWxsIHBlbmRpbmcgcmVxdWVzdAo+ICsgKiBA Y3RybDogSTNDIHNsYXZlIGNvbnRyb2xsZXIKPiArICogQHR4OiBUcmFuc2ZlciBkaXJldGlvbiBx dWV1ZQo+ICsgKiBAc2l6ZTogc2l6ZSBvZiBvcHRpb25hbCBkYXRhCj4gKyAqLwo+ICtzdGF0aWMg aW5saW5lIHZvaWQgaTNjX3NsYXZlX2N0cmxfY2FuY2VsX2FsbF9yZXFzKHN0cnVjdCBpM2Nfc2xh dmVfY3RybCAqY3RybCwgYm9vbCB0eCkKPiArewo+ICsJaWYgKGN0cmwgJiYgY3RybC0+b3BzICYm IGN0cmwtPm9wcy0+Y2FuY2VsX2FsbF9yZXFzKQo+ICsJCWN0cmwtPm9wcy0+Y2FuY2VsX2FsbF9y ZXFzKGN0cmwsIHR4KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGkzY19zbGF2ZV9jdHJsX3NldF9j b25maWcoKSAtIFNldCBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24KPiArICogQGN0cmw6IEkzQyBz bGF2ZSBjb250cm9sbGVyIGRldmljZQo+ICsgKiBAZnVuYzogRnVuY3Rpb24gZGV2aWNlCj4gKyAq Cj4gKyAqIFJldHVybnM6IFplcm8gZm9yIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIGNvZGUgaW4gY2Fz ZSBvZiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGludAo+ICtpM2Nfc2xhdmVfY3Ry bF9zZXRfY29uZmlnKHN0cnVjdCBpM2Nfc2xhdmVfY3RybCAqY3RybCwgc3RydWN0IGkzY19zbGF2 ZV9mdW5jICpmdW5jKQo+ICt7Cj4gKwlpZiAoY3RybCAmJiBjdHJsLT5vcHMgJiYgY3RybC0+b3Bz LT5zZXRfY29uZmlnKQo+ICsJCXJldHVybiBjdHJsLT5vcHMtPnNldF9jb25maWcoY3RybCwgZnVu Yyk7Cj4gKwo+ICsJcmV0dXJuIC1FSU5WQUw7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpM2Nfc2xh dmVfY3RybF9lbmFibGUoKSAtIEVuYWJsZSBJM0MgY29udHJvbGxlcgo+ICsgKiBAY3RybDogSTND IHNsYXZlIGNvbnRyb2xsZXIgZGV2aWNlCj4gKyAqCj4gKyAqIFJldHVybnM6IFplcm8gZm9yIHN1 Y2Nlc3MsIG9yIGFuIGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0 aWMgaW5saW5lIGludAo+ICtpM2Nfc2xhdmVfY3RybF9lbmFibGUoc3RydWN0IGkzY19zbGF2ZV9j dHJsICpjdHJsKQo+ICt7Cj4gKwlpZiAoY3RybCAmJiBjdHJsLT5vcHMgJiYgY3RybC0+b3BzLT5l bmFibGUpCj4gKwkJcmV0dXJuIGN0cmwtPm9wcy0+ZW5hYmxlKGN0cmwpOwo+ICsKPiArCXJldHVy biAtRUlOVkFMOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaTNjX3NsYXZlX2N0cmxfZGlzYWJsZSgp IC0gRGlzYWJsZSBJM0MgY29udHJvbGxlcgo+ICsgKiBAY3RybDogSTNDIHNsYXZlIGNvbnRyb2xs ZXIgZGV2aWNlCj4gKyAqCj4gKyAqIFJldHVybnM6IFplcm8gZm9yIHN1Y2Nlc3MsIG9yIGFuIGVy cm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGludAo+ ICtpM2Nfc2xhdmVfY3RybF9kaXNhYmxlKHN0cnVjdCBpM2Nfc2xhdmVfY3RybCAqY3RybCkKPiAr ewo+ICsJaWYgKGN0cmwgJiYgY3RybC0+b3BzICYmIGN0cmwtPm9wcy0+ZGlzYWJsZSkKPiArCQly ZXR1cm4gY3RybC0+b3BzLT5kaXNhYmxlKGN0cmwpOwo+ICsKPiArCXJldHVybiAtRUlOVkFMOwo+ ICt9Cj4gKwo+ICsvKioKPiArICogaTNjX3NsYXZlX2N0cmxfYWxsb2NfcmVxdWVzdCgpIC0gQWxs b2MgYW4gSTNDIHRyYW5zZmVyCj4gKyAqIEBjdHJsOiBJM0Mgc2xhdmUgY29udHJvbGxlciBkZXZp Y2UKPiArICogZ2ZwX2ZsYWdzOiBhZGRpdGlvbmFsIGdmcCBmbGFncyB1c2VkIHdoZW4gYWxsb2Nh dGluZyB0aGUgYnVmZmVycwo+ICsgKgo+ICsgKiBSZXR1cm5zOiBaZXJvIGZvciBzdWNjZXNzLCBv ciBhbiBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZQo+ICsgKi8KPiArc3RhdGljIGlubGlu ZSBzdHJ1Y3QgaTNjX3JlcXVlc3QgKgo+ICtpM2Nfc2xhdmVfY3RybF9hbGxvY19yZXF1ZXN0KHN0 cnVjdCBpM2Nfc2xhdmVfY3RybCAqY3RybCwgZ2ZwX3QgZ2ZwX2ZsYWdzKQo+ICt7Cj4gKwlzdHJ1 Y3QgaTNjX3JlcXVlc3QgKnJlcSA9IE5VTEw7Cj4gKwo+ICsJaWYgKGN0cmwgJiYgY3RybC0+b3Bz ICYmIGN0cmwtPm9wcy0+YWxsb2NfcmVxdWVzdCkKPiArCQlyZXEgPSBjdHJsLT5vcHMtPmFsbG9j X3JlcXVlc3QoY3RybCwgZ2ZwX2ZsYWdzKTsKPiArCWVsc2UKPiArCQlyZXEgPSBremFsbG9jKHNp emVvZigqcmVxKSwgZ2ZwX2ZsYWdzKTsKPiArCj4gKwlpZiAocmVxKQo+ICsJCXJlcS0+Y3RybCA9 IGN0cmw7Cj4gKwo+ICsJcmV0dXJuIHJlcTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGkzY19zbGF2 ZV9jdHJsX2ZyZWVfcmVxdWVzdCgpIC0gRnJlZSBhbiBJM0MgdHJhbnNmZXIKPiArICogQGN0cmw6 IEkzQyBzbGF2ZSBjb250cm9sbGVyIGRldmljZQo+ICsgKgo+ICsgKiBSZXR1cm5zOiBaZXJvIGZv ciBzdWNjZXNzLCBvciBhbiBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZQo+ICsgKi8KPiAr c3RhdGljIGlubGluZSB2b2lkCj4gK2kzY19zbGF2ZV9jdHJsX2ZyZWVfcmVxdWVzdChzdHJ1Y3Qg aTNjX3JlcXVlc3QgKnJlcSkKPiArewo+ICsJc3RydWN0IGkzY19zbGF2ZV9jdHJsICpjdHJsOwo+ ICsKPiArCWlmICghcmVxKQo+ICsJCXJldHVybjsKPiArCj4gKwljdHJsID0gcmVxLT5jdHJsOwo+ ICsJaWYgKGN0cmwgJiYgY3RybC0+b3BzICYmIGN0cmwtPm9wcy0+ZnJlZV9yZXF1ZXN0KQo+ICsJ CWN0cmwtPm9wcy0+ZnJlZV9yZXF1ZXN0KHJlcSk7Cj4gKwllbHNlCj4gKwkJa2ZyZWUocmVxKTsK PiArfQo+ICsKPiArLyoqCj4gKyAqIGkzY19zbGF2ZV9jdHJsX3F1ZXVlKCkgLSBRdWV1ZSBhbiBJ M0MgdHJhbnNmZXIKPiArICogQGN0cmw6IEkzQyBzbGF2ZSBjb250cm9sbGVyIGRldmljZQo+ICsg KiBnZnBfZmxhZ3M6IGFkZGl0aW9uYWwgZ2ZwIGZsYWdzIHVzZWQgd2hlbiBhbGxvY2F0aW5nIHRo ZSBidWZmZXJzCj4gKyAqCj4gKyAqIFJldHVybnM6IFplcm8gZm9yIHN1Y2Nlc3MsIG9yIGFuIGVy cm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGludAo+ ICtpM2Nfc2xhdmVfY3RybF9xdWV1ZShzdHJ1Y3QgaTNjX3JlcXVlc3QgKnJlcSwgZ2ZwX3QgZ2Zw X2ZsYWdzKQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX3NsYXZlX2N0cmwgKmN0cmw7Cj4gKwlpbnQgcmV0 ID0gLUVJTlZBTDsKPiArCj4gKwlpZiAoIXJlcSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4g KwljdHJsID0gcmVxLT5jdHJsOwo+ICsKPiArCXJlcS0+YWN0dWFsID0gMDsKPiArCXJlcS0+c3Rh dHVzID0gMDsKPiArCWlmIChjdHJsICYmIGN0cmwtPm9wcyAmJiBjdHJsLT5vcHMtPnF1ZXVlKQo+ ICsJCXJldCA9IGN0cmwtPm9wcy0+cXVldWUocmVxLCBnZnBfZmxhZ3MpOwo+ICsKPiArCXJldHVy biByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpM2Nfc2xhdmVfY3RybF9kZXF1ZXVlKCkgLSBE ZXF1ZXVlIGFuIEkzQyB0cmFuc2Zlcgo+ICsgKiBAY3RybDogSTNDIHNsYXZlIGNvbnRyb2xsZXIg ZGV2aWNlCj4gKyAqCj4gKyAqIFJldHVybnM6IFplcm8gZm9yIHN1Y2Nlc3MsIG9yIGFuIGVycm9y IGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGludAo+ICtp M2Nfc2xhdmVfY3RybF9kZXF1ZXVlKHN0cnVjdCBpM2NfcmVxdWVzdCAqcmVxKQo+ICt7Cj4gKwlz dHJ1Y3QgaTNjX3NsYXZlX2N0cmwgKmN0cmw7Cj4gKwlpbnQgcmV0ID0gLUVJTlZBTDsKPiArCj4g KwlpZiAoIXJlcSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwljdHJsID0gcmVxLT5jdHJs Owo+ICsJaWYgKGN0cmwgJiYgY3RybC0+b3BzICYmIGN0cmwtPm9wcy0+ZGVxdWV1ZSkKPiArCQly ZXQgPSBjdHJsLT5vcHMtPmRlcXVldWUocmVxKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICsvKioKPiArICogaTNjX3NsYXZlX2N0cmxfZmlmb19zdGF0dXMoKSAtIEdldCBjb250cm9s bGVyIEZJRk8gc3RhdHVzCj4gKyAqIEBjdHJsOiBJM0Mgc2xhdmUgY29udHJvbGxlciBkZXZpY2UK PiArICogQHR4OiAxOiBTbGF2ZSB0byBtYXN0ZXIsIDA6IG1hc3RlciB0byBzbGF2ZQo+ICsgKgo+ ICsgKiBSZXR1cm5zOiBIb3cgbXVjaCBkYXRhIGluIEZJRk8KPiArICovCj4gK3N0YXRpYyBpbmxp bmUgaW50Cj4gK2kzY19zbGF2ZV9jdHJsX2ZpZm9fc3RhdHVzKHN0cnVjdCBpM2Nfc2xhdmVfY3Ry bCAqY3RybCwgYm9vbCB0eCkKPiArewo+ICsJaWYgKGN0cmwgJiYgY3RybC0+b3BzICYmIGN0cmwt Pm9wcy0+Zmlmb19zdGF0dXMpCj4gKwkJcmV0dXJuIGN0cmwtPm9wcy0+Zmlmb19zdGF0dXMoY3Ry bCwgdHgpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaTNjX3NsYXZl X2N0cmxfZmlmb19mbHVzaCgpIC0gRmx1c2ggY29udHJvbGxlciBGSUZPCj4gKyAqIEBjdHJsOiBJ M0Mgc2xhdmUgY29udHJvbGxlciBkZXZpY2UKPiArICogQHR4OiAxOiBTbGF2ZSB0byBtYXN0ZXIs IDA6IG1hc3RlciB0byBzbGF2ZQo+ICsgKgo+ICsgKi8KPiArc3RhdGljIGlubGluZSB2b2lkCj4g K2kzY19zbGF2ZV9jdHJsX2ZpZm9fZmx1c2goc3RydWN0IGkzY19zbGF2ZV9jdHJsICpjdHJsLCBi b29sIHR4KQo+ICt7Cj4gKwlpZiAoY3RybCAmJiBjdHJsLT5vcHMgJiYgY3RybC0+b3BzLT5maWZv X2ZsdXNoKQo+ICsJCXJldHVybiBjdHJsLT5vcHMtPmZpZm9fZmx1c2goY3RybCwgdHgpOwo+ICt9 Cj4gKwo+ICsvKioKPiArICogaTNjX3NsYXZlX2N0cmxfZ2V0X2ZlYXR1cmVzKCkgLSBHZXQgY29u dHJvbGxlciBzdXBwb3J0ZWQgZmVhdHVyZXMKPiArICogQGN0cmw6IEkzQyBzbGF2ZSBjb250cm9s bGVyIGRldmljZQo+ICsgKgo+ICsgKiBSZXR1cm5zOiBUaGUgcG9pbnRlciB0byBzdHJ1Y3QgaTNj X3NsYXZlX2N0cmxfZmVhdHVyZXMKPiArICovCj4gK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0 IGkzY19zbGF2ZV9jdHJsX2ZlYXR1cmVzKgo+ICtpM2Nfc2xhdmVfY3RybF9nZXRfZmVhdHVyZXMo c3RydWN0IGkzY19zbGF2ZV9jdHJsICpjdHJsKQo+ICt7Cj4gKwlpZiAoY3RybCAmJiBjdHJsLT5v cHMgJiYgY3RybC0+b3BzLT5nZXRfZmVhdHVyZXMpCj4gKwkJcmV0dXJuIGN0cmwtPm9wcy0+Z2V0 X2ZlYXR1cmVzKGN0cmwpOwo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICsjZGVmaW5l IHRvX2kzY19zbGF2ZV9jdHJsKGRldmljZSkgY29udGFpbmVyX29mKChkZXZpY2UpLCBzdHJ1Y3Qg aTNjX3NsYXZlX2N0cmwsIGRldikKPiArCj4gKyNkZWZpbmUgdG9faTNjX3NsYXZlX2Z1bmMoZnVu Y19kZXYpIGNvbnRhaW5lcl9vZigoZnVuY19kZXYpLCBzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmMsIGRl dikKPiArI2RlZmluZSB0b19pM2Nfc2xhdmVfZnVuY19kcml2ZXIoZHJ2KSAoY29udGFpbmVyX29m KChkcnYpLCBzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmNfZHJpdmVyLCBkcml2ZXIpKQo+ICsKPiArI2Rl ZmluZSBpM2Nfc2xhdmVfY3RybF9jcmVhdGUoZGV2LCBvcHMpIFwKPiArCQlfX2kzY19zbGF2ZV9j dHJsX2NyZWF0ZSgoZGV2KSwgKG9wcyksIFRISVNfTU9EVUxFKQo+ICsjZGVmaW5lIGRldm1faTNj X3NsYXZlX2N0cmxfY3JlYXRlKGRldiwgb3BzKSBcCj4gKwkJX19kZXZtX2kzY19zbGF2ZV9jdHJs X2NyZWF0ZSgoZGV2KSwgKG9wcyksIFRISVNfTU9EVUxFKQo+ICsKPiArc3RydWN0IGkzY19zbGF2 ZV9jdHJsICoKPiArX19kZXZtX2kzY19zbGF2ZV9jdHJsX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpk ZXYsIGNvbnN0IHN0cnVjdCBpM2Nfc2xhdmVfY3RybF9vcHMgKm9wcywKPiArCQkgICAgICBzdHJ1 Y3QgbW9kdWxlICpvd25lcik7Cj4gK3N0cnVjdCBpM2Nfc2xhdmVfY3RybCAqCj4gK19faTNjX3Ns YXZlX2N0cmxfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGkzY19zbGF2 ZV9jdHJsX29wcyAqb3BzLAo+ICsJCSBzdHJ1Y3QgbW9kdWxlICpvd25lcik7Cj4gKwo+ICt2b2lk IGRldm1faTNjX3NsYXZlX2N0cmxfZGVzdHJveShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBp M2Nfc2xhdmVfY3RybCAqZXBjKTsKPiArdm9pZCBpM2Nfc2xhdmVfY3RybF9kZXN0cm95KHN0cnVj dCBpM2Nfc2xhdmVfY3RybCAqZXBjKTsKPiArCj4gKwo+ICtpbnQgaTNjX3NsYXZlX2N0cmxfYWRk X2Z1bmMoc3RydWN0IGkzY19zbGF2ZV9jdHJsICpjdHJsLCBzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmMg KmZ1bmMpOwo+ICt2b2lkIGkzY19zbGF2ZV9jdHJsX3JlbW92ZV9mdW5jKHN0cnVjdCBpM2Nfc2xh dmVfY3RybCAqY3RybCwgc3RydWN0IGkzY19zbGF2ZV9mdW5jICpmdW5jKTsKPiArCj4gK3N0cnVj dCBjb25maWdfZ3JvdXAgKmkzY19zbGF2ZV9jZnNfYWRkX2N0cmxfZ3JvdXAoc3RydWN0IGkzY19z bGF2ZV9jdHJsICpjdHJsKTsKPiArCj4gKwo+ICt2b2lkIGkzY19zbGF2ZV9jZnNfcmVtb3ZlX2N0 cmxfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApOwo+ICtzdHJ1Y3QgY29uZmlnX2dy b3VwICppM2Nfc2xhdmVfY2ZzX2FkZF9mdW5jX2dyb3VwKGNvbnN0IGNoYXIgKm5hbWUpOwo+ICt2 b2lkIGkzY19zbGF2ZV9jZnNfcmVtb3ZlX2Z1bmNfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAq Z3JvdXApOwo+ICtzdHJ1Y3QgaTNjX3NsYXZlX2N0cmwgKmkzY19zbGF2ZV9jdHJsX2dldChjb25z dCBjaGFyICpuYW1lKTsKPiArdm9pZCBpM2Nfc2xhdmVfY3RybF9wdXQoc3RydWN0IGkzY19zbGF2 ZV9jdHJsICpjdHJsKTsKPiArCj4gK2ludCBpM2Nfc2xhdmVfZnVuY19iaW5kKHN0cnVjdCBpM2Nf c2xhdmVfZnVuYyAqZnVuYyk7Cj4gK3ZvaWQgaTNjX3NsYXZlX2Z1bmNfdW5iaW5kKHN0cnVjdCBp M2Nfc2xhdmVfZnVuYyAqZnVuYyk7Cj4gK3N0cnVjdCBpM2Nfc2xhdmVfZnVuYyAqaTNjX3NsYXZl X2Z1bmNfY3JlYXRlKGNvbnN0IGNoYXIgKmRydl9uYW1lLCBjb25zdCBjaGFyICpuYW1lKTsKPiAr Cj4gKyNkZWZpbmUgaTNjX3NsYXZlX2Z1bmNfcmVnaXN0ZXJfZHJpdmVyKGRydikgXAo+ICsJX19p M2Nfc2xhdmVfZnVuY19yZWdpc3Rlcl9kcml2ZXIoZHJ2LCBUSElTX01PRFVMRSkKPiArCj4gK2lu dCBfX2kzY19zbGF2ZV9mdW5jX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmNf ZHJpdmVyICpkcnYsIHN0cnVjdCBtb2R1bGUgKm93bmVyKTsKPiArdm9pZCBpM2Nfc2xhdmVfZnVu Y191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgaTNjX3NsYXZlX2Z1bmNfZHJpdmVyICpkcnYpOwo+ ICsKPiArI2RlZmluZSBERUNMQVJFX0kzQ19TTEFWRV9GVU5DKF9uYW1lLCBfcHJvYmUsIF9yZW1v dmUsIF9vcHMpCQkJXAo+ICsJc3RhdGljIHN0cnVjdCBpM2Nfc2xhdmVfZnVuY19kcml2ZXIgX25h bWUgIyMgaTNjX2Z1bmMgPSB7CQlcCj4gKwkJLmRyaXZlci5uYW1lID0gX19zdHJpbmdpZnkoX25h bWUpLAkJCQlcCj4gKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAkJCQkJCVwKPiArCQkucHJvYmUg PSBfcHJvYmUsCQkJCQkJXAo+ICsJCS5yZW1vdmUgPSBfcmVtb3ZlLAkJCQkJCVwKPiArCQkub3Bz ID0gX29wcwkJCQkJCQlcCj4gKwl9OwkJCQkJCQkJCVwKPiArCU1PRFVMRV9BTElBUygiaTNjZnVu YzoiX19zdHJpbmdpZnkoX25hbWUpKQo+ICsKPiArI2RlZmluZSBERUNMQVJFX0kzQ19TTEFWRV9J TklUKF9uYW1lLCBfcHJvYmUsIF9yZW1vdmUsIF9vcHMpCQkJXAo+ICsJREVDTEFSRV9JM0NfU0xB VkVfRlVOQyhfbmFtZSwgX3Byb2JlLCBfcmVtb3ZlLCBfb3BzKTsJCQlcCj4gKwlzdGF0aWMgaW50 IF9faW5pdCBfbmFtZSAjIyBtb2RfaW5pdCh2b2lkKQkJCQlcCj4gKwl7CQkJCQkJCQkJXAo+ICsJ CXJldHVybiBpM2Nfc2xhdmVfZnVuY19yZWdpc3Rlcl9kcml2ZXIoJl9uYW1lICMjIGkzY19mdW5j KTsJXAo+ICsJfQkJCQkJCQkJCVwKPiArCXN0YXRpYyB2b2lkIF9fZXhpdCBfbmFtZSAjIyBtb2Rf ZXhpdCh2b2lkKQkJCQlcCj4gKwl7CQkJCQkJCQkJXAo+ICsJCWkzY19zbGF2ZV9mdW5jX3VucmVn aXN0ZXJfZHJpdmVyKCZfbmFtZSAjIyBpM2NfZnVuYyk7CQlcCj4gKwl9CQkJCQkJCQkJXAo+ICsJ bW9kdWxlX2luaXQoX25hbWUgIyMgbW9kX2luaXQpOwkJCQkJCVwKPiArCW1vZHVsZV9leGl0KF9u YW1lICMjIG1vZF9leGl0KQo+ICsKPiArI2VuZGlmCj4gKwo+ICsKCi0tIApsaW51eC1pM2MgbWFp bGluZyBsaXN0CmxpbnV4LWkzY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtaTNjCg==