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 9B83EC3ABD8 for ; Wed, 14 May 2025 13:28:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Message-ID:MIME-Version: Content-Type:Content-Transfer-Encoding:References:In-Reply-To:Subject:Cc:To: From:Date:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=+chIj91K1lIbR7NFPEECmAyNP3cTC8QbipZdGzx2IxU=; b=oRgZcINYvvKSELljvrwucMQBtG AhoHUCfe98FR5G1K69JAgiCbzEAeLKXK144h6Fs9ibAreHej1RFnQMprgkjtxsS5rBVc3tMQP/O2/ d3dNBUMGldiDHXMauqHxHCYfwTFgQMshw7hJLAgE30WBbHDRc43W2mnTDj4mMn2UaQ9VtDYF6OWA9 BrKiPlmdx9KZ24A9DX0YH6rpnefRXOfLXF5++MXPNols7W7BKBznKPtTJsvRuMsSPUiOKQ6OKljMy NbrDBqyhexUuOMHK0QbnKhXJudGjh3/Oji4EvfXpb9B89dHTwKqt6cDwQ6MiVhmMNkixKX8cvh9zi 0i6N85HA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uFC9c-0000000FCIP-2fAd; Wed, 14 May 2025 13:28:12 +0000 Received: from m16.mail.163.com ([117.135.210.3]) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uFB2J-0000000Ezps-0VJ9; Wed, 14 May 2025 12:16:37 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Date:From:To:Subject:Content-Type:MIME-Version: Message-ID; bh=9L+6RHt8bWKFLzWlav158ioBivIqcT8fsDs3evD9MDs=; b=Y XIorDFabU1WhEL4qBm08OWl3wQeKjPq/s/vd74PQn+yvfzyFIzgTCDuGmc7uSSd3 nwjt4w/vIjhoOot2PhwjTT5wtUYOpPIL1G6i9/XWNX3RQeRNVlX4U8mjl1E+N5/4 yZyJs26ZR4poh/wF4+/KVQtTISn+NaCWtNbDyjr3bY= Received: from andyshrk$163.com ( [58.22.7.114] ) by ajax-webmail-wmsvr-40-145 (Coremail) ; Wed, 14 May 2025 20:15:55 +0800 (CST) X-Originating-IP: [58.22.7.114] Date: Wed, 14 May 2025 20:15:55 +0800 (CST) From: "Andy Yan" To: dmitry.baryshkov@oss.qualcomm.com, heiko@sntech.de Cc: neil.armstrong@linaro.org, sebastian.reichel@collabora.com, stephen@radxa.com, dri-devel@lists.freedesktop.org, hjc@rock-chips.com, mripard@kernel.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, yubing.zhang@rock-chips.com, naoki@radxa.com, Laurent.pinchart@ideasonboard.com, "Andy Yan" , krzk+dt@kernel.org, robh@kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re:[PATCH v3 2/9] drm/bridge: synopsys: Add DW DPTX Controller support library X-Priority: 3 X-Mailer: Coremail Webmail Server Version XT5.0.14 build 20240801(9da12a7b) Copyright (c) 2002-2025 www.mailtech.cn 163com In-Reply-To: <20250403033748.245007-3-andyshrk@163.com> References: <20250403033748.245007-1-andyshrk@163.com> <20250403033748.245007-3-andyshrk@163.com> X-NTES-SC: AL_Qu2fBf6Zu0Eu4yCdZukfmkcVgOw9UcO5v/Qk3oZXOJF8jCvr1DkbVFpmP1TK/8atMym1oj2yfgJu++llRaZTRIk5xauB7jcL641cbgumDf190w== Content-Transfer-Encoding: base64 Content-Type: text/plain; charset=UTF-8 MIME-Version: 1.0 Message-ID: <2f4796ad.a2e0.196ceb908b0.Coremail.andyshrk@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID: kSgvCgD3f5N7iSRo6BYEAA--.37114W X-CM-SenderInfo: 5dqg52xkunqiywtou0bp/1tbiqAxNXmgkgw5FaAAFse X-Coremail-Antispam: 1U5529EdanIXcx71UUUUU7vcSsGvfC2KfnxnUU== X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250514_051635_861723_126010A5 X-CRM114-Status: GOOD ( 12.85 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGVsbG8gRG1pdHJ577yMCgogICAgV291bGQgaXQgYmUgY29udmVuaWVudCBmb3IgeW91IHRvIGNv bnRpbnVlIHJldmlld2luZyB0aGlzIHBhdGNoIGF0IHlvdXIgY29udmVuaWVuY2U/Ck9yIGxldCBt ZSBrbm93IHlvdXIgb3BpbmlvbiBvbiB0aGlzIHBhdGNoLgogCiAgIFRoZXJlIGlzIHN0aWxsIG9u ZSB1bnJlc29sdmVkIGlzc3VlIGhpZ2hsaWdodGVkIGJ5IHlvdSBpbiB0aGUgZmlyc3QgdmVyc2lv bjogdHJ5IHRvIHVzZSBkcm1fZHBfcmVhZF9zaW5rX2NvdW50X2NhcAppbnN0ZWFkIG9mIGR3X2Rw X2hhc19zaW5rX2NvdW50LiBCdXQgdGhlcmUgaXMgbm8gcmVzcG9uc2Ugb24gbXkgcGF0Y2ggdHJ5 IHRvIFBhc3MgZG93biBjb25uZWN0b3IgdG8gZHJtIGJyaWRnZSBkZXRlY3QgaG9va1swXS4KICAg SSBkb24ndCBrbm93IGhvdyB0byBwcm9jZWVkIHdpdGggdGhpcyBwYXRjaCBhdCB0aGUgbW9tZW50 LgoKClswXWh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2RyaS1kZXZlbC8yMDI1MDMyMTA4NTM0NS4x MzYzODAtMS1hbmR5c2hya0AxNjMuY29tLwoKVGhhbmsgeW91LgogIApBdCAyMDI1LTA0LTAzIDEx OjM3OjMwLCAiQW5keSBZYW4iIDxhbmR5c2hya0AxNjMuY29tPiB3cm90ZToKPkZyb206IEFuZHkg WWFuIDxhbmR5LnlhbkByb2NrLWNoaXBzLmNvbT4KPgo+VGhlIERXIERQIFRYIENvbnRyb2xsZXIg aXMgY29tcGxpYW50IHdpdGggdGhlIERpc3BsYXlQb3J0IFNwZWNpZmljYXRpb24KPlZlcnNpb24g MS40IHdpdGggdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKPgo+KiBEaXNwbGF5UG9ydCAxLjRhCj4q IE1haW4gTGluazogMS8yLzQgbGFuZXMKPiogTWFpbiBMaW5rIFN1cHBvcnQgMS42MkdicHMsIDIu N0dicHMsIDUuNEdicHMgYW5kIDguMUdicHMKPiogQVVYIGNoYW5uZWwgMU1icHMKPiogU2luZ2xl IFN0cmVhbSBUcmFuc3BvcnQoU1NUKQo+KiBNdWx0aXN0cmVhbSBUcmFuc3BvcnQgKE1TVCkKPiog VHlwZS1DIHN1cHBvcnQgKGFsdGVybmF0ZSBtb2RlKQo+KiBIRENQIDIuMiwgSERDUCAxLjMKPiog U3VwcG9ydHMgdXAgdG8gOC8xMCBiaXRzIHBlciBjb2xvciBjb21wb25lbnQKPiogU3VwcG9ydHMg UkJHLCBZQ2JDcjQ6NDo0LCBZQ2JDcjQ6MjoyLCBZQ2JDcjQ6MjowCj4qIFBpeGVsIGNsb2NrIHVw IHRvIDU5NE1Iego+KiBJMlMsIFNQRElGIGF1ZGlvIGludGVyZmFjZQo+Cj5BZGQgbGlicmFyeSB3 aXRoIGNvbW1vbiBoZWxwZXJzIHRvIG1ha2UgaXQgY2FuIGJlIHNoYXJlZCB3aXRoCj5vdGhlciBT b0MuCj4KPlNpZ25lZC1vZmYtYnk6IEFuZHkgWWFuIDxhbmR5LnlhbkByb2NrLWNoaXBzLmNvbT4K Pgo+LS0tCj4KPkNoYW5nZXMgaW4gdjM6Cj4tIFJlYmFzZSBvbiBkcm0tbWlzYy1uZXh0Cj4tIFN3 aXRjaCB0byBjb21tb24gaGVscGVycyB0byBwb3dlciB1cC9kb3duIGRwIGxpbmsKPi0gT25seSBw YXNzIHBhcmFtZXRlcnMgdG8gcGh5IHRoYXQgc2hvdWxkIGJlIHNldAo+Cj5DaGFuZ2VzIGluIHYy Ogo+LSBGaXggY29tcGlsZSBlcnJvciB3aGVuIGJ1aWxkIGFzIG1vZHVsZQo+LSBBZGQgcGh5IGlu aXQKPi0gT25seSB1c2Ugb25lIGR3X2RwX2xpbmtfdHJhaW5fc2V0Cj4tIGlubGluZSBkd19kcF9w aHlfdXBkYXRlX3ZzX2VtcGgKPi0gVXNlIGRwX3NkcAo+LSBDaGVjayByZXR1cm4gdmFsdWUgb2Yg ZHJtX21vZGVzZXRfbG9jawo+LSBNZXJnZSBjb2RlIGluIGF0b21pY19wcmVfZW5hYmxlL21vZGVf Zml4dXAgdG8gYXRvbWljX2NoZWNrCj4tIFJldHVybiBOVUxMIGlmIGNhbid0IGZpbmQgYSBzdXBw b3J0ZWQgb3V0cHV0IGZvcm1hdAo+LSBGaXggbWF4X2xpbmtfcmF0ZSBmcm9tIHBsYXRfZGF0YQo+ Cj4gZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9LY29uZmlnICB8ICAgIDcgKwo+IGRy aXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvTWFrZWZpbGUgfCAgICAxICsKPiBkcml2ZXJz L2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LWRwLmMgIHwgMjA1MyArKysrKysrKysrKysrKysr KysrKysrCj4gaW5jbHVkZS9kcm0vYnJpZGdlL2R3X2RwLmggICAgICAgICAgICAgICB8ICAgMjAg Kwo+IDQgZmlsZXMgY2hhbmdlZCwgMjA4MSBpbnNlcnRpb25zKCspCj4gY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctZHAuYwo+IGNyZWF0ZSBtb2Rl IDEwMDY0NCBpbmNsdWRlL2RybS9icmlkZ2UvZHdfZHAuaAo+Cj5kaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9zeW5vcHN5cy9LY29uZmlnCj5pbmRleCBmM2FiMmY5ODVmOGNhLi4yYzVlNTMyNDEwZGU5IDEw MDY0NAo+LS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9LY29uZmlnCj4rKysg Yi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL0tjb25maWcKPkBAIC0xLDQgKzEsMTEg QEAKPiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPitjb25maWcgRFJN X0RXX0RQCj4rCXRyaXN0YXRlCj4rCXNlbGVjdCBEUk1fRElTUExBWV9IRUxQRVIKPisJc2VsZWN0 IERSTV9ESVNQTEFZX0RQX0hFTFBFUgo+KwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKPisJc2VsZWN0 IFJFR01BUF9NTUlPCj4rCj4gY29uZmlnIERSTV9EV19IRE1JCj4gCXRyaXN0YXRlCj4gCXNlbGVj dCBEUk1fRElTUExBWV9IRE1JX0hFTFBFUgo+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2Uvc3lub3BzeXMvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lz L01ha2VmaWxlCj5pbmRleCA5ZGMzNzZkMjIwYWQ3Li40ZGFkYTQ0MDI5YWNmIDEwMDY0NAo+LS0t IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9NYWtlZmlsZQo+KysrIGIvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9NYWtlZmlsZQo+QEAgLTEsNCArMSw1IEBACj4gIyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4rb2JqLSQoQ09ORklHX0RSTV9E V19EUCkgKz0gZHctZHAubwo+IG9iai0kKENPTkZJR19EUk1fRFdfSERNSSkgKz0gZHctaGRtaS5v Cj4gb2JqLSQoQ09ORklHX0RSTV9EV19IRE1JX0FIQl9BVURJTykgKz0gZHctaGRtaS1haGItYXVk aW8ubwo+IG9iai0kKENPTkZJR19EUk1fRFdfSERNSV9HUF9BVURJTykgKz0gZHctaGRtaS1ncC1h dWRpby5vCj5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9kdy1k cC5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9kdy1kcC5jCj5uZXcgZmlsZSBt b2RlIDEwMDY0NAo+aW5kZXggMDAwMDAwMDAwMDAwMC4uODI4YjM0ZDY3NmExOQo+LS0tIC9kZXYv bnVsbAo+KysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9kdy1kcC5jCj5AQCAt MCwwICsxLDIwNTMgQEAKPisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+Ky8q Cj4rICogU3lub3BzeXMgRGVzaWduV2FyZSBDb3JlcyBEaXNwbGF5UG9ydCBUcmFuc21pdHRlciBD b250cm9sbGVyCj4rICoKPisgKiBDb3B5cmlnaHQgKGMpIDIwMjUgUm9ja2NoaXAgRWxlY3Ryb25p Y3MgQ28uLCBMdGQuCj4rICoKPisgKiBBdXRob3I6IEFuZHkgWWFuIDxhbmR5LnlhbkByb2NrLWNo aXBzLmNvbT4KPisgKi8KPisjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KPisjaW5jbHVkZSA8 bGludXgvY2xrLmg+Cj4rI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgo+KyNpbmNsdWRlIDxs aW51eC9pb3BvbGwuaD4KPisjaW5jbHVkZSA8bGludXgvaXJxLmg+Cj4rI2luY2x1ZGUgPGxpbnV4 L21lZGlhLWJ1cy1mb3JtYXQuaD4KPisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4rI2lu Y2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+Cj4rI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rldmlj ZS5oPgo+KyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPisjaW5jbHVkZSA8bGludXgvcmVzZXQu aD4KPisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgo+KyNpbmNsdWRlIDxsaW51eC91bmFsaWdu ZWQuaD4KPisKPisjaW5jbHVkZSA8ZHJtL2JyaWRnZS9kd19kcC5oPgo+KyNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pY19oZWxwZXIuaD4KPisjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2UuaD4KPisjaW5j bHVkZSA8ZHJtL2RybV9icmlkZ2VfY29ubmVjdG9yLmg+Cj4rI2luY2x1ZGUgPGRybS9kaXNwbGF5 L2RybV9kcF9oZWxwZXIuaD4KPisjaW5jbHVkZSA8ZHJtL2Rpc3BsYXkvZHJtX2hkbWlfaGVscGVy Lmg+Cj4rI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgo+KyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+ Cj4rI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KPisjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9o ZWxwZXIuaD4KPisjaW5jbHVkZSA8ZHJtL2RybV9zaW1wbGVfa21zX2hlbHBlci5oPgo+Kwo+KyNk ZWZpbmUgRFdfRFBfVkVSU0lPTl9OVU1CRVIJCQkweDAwMDAKPisjZGVmaW5lIERXX0RQX1ZFUlNJ T05fVFlQRQkJCTB4MDAwNAo+KyNkZWZpbmUgRFdfRFBfSUQJCQkJCTB4MDAwOAo+Kwo+KyNkZWZp bmUgRFdfRFBfQ09ORklHX1JFRzEJCQkweDAxMDAKPisjZGVmaW5lIERXX0RQX0NPTkZJR19SRUcy CQkJMHgwMTA0Cj4rI2RlZmluZSBEV19EUF9DT05GSUdfUkVHMwkJCTB4MDEwOAo+Kwo+KyNkZWZp bmUgRFdfRFBfQ0NUTAkJCQkweDAyMDAKPisjZGVmaW5lIEZPUkNFX0hQRAkJCQlCSVQoNCkKPisj ZGVmaW5lIERFRkFVTFRfRkFTVF9MSU5LX1RSQUlOX0VOCQlCSVQoMikKPisjZGVmaW5lIEVOSEFO Q0VfRlJBTUlOR19FTgkJCUJJVCgxKQo+KyNkZWZpbmUgU0NSQU1CTEVfRElTCQkJCUJJVCgwKQo+ KyNkZWZpbmUgRFdfRFBfU09GVF9SRVNFVF9DVFJMCQkJMHgwMjA0Cj4rI2RlZmluZSBWSURFT19S RVNFVAkJCQlCSVQoNSkKPisjZGVmaW5lIEFVWF9SRVNFVAkJCQlCSVQoNCkKPisjZGVmaW5lIEFV RElPX1NBTVBMRVJfUkVTRVQJCQlCSVQoMykKPisjZGVmaW5lIEhEQ1BfTU9EVUxFX1JFU0VUCQkJ QklUKDIpCj4rI2RlZmluZSBQSFlfU09GVF9SRVNFVAkJCQlCSVQoMSkKPisjZGVmaW5lIENPTlRS T0xMRVJfUkVTRVQJCQlCSVQoMCkKPisKPisjZGVmaW5lIERXX0RQX1ZTQU1QTEVfQ1RSTAkJCTB4 MDMwMAo+KyNkZWZpbmUgUElYRUxfTU9ERV9TRUxFQ1QJCQlHRU5NQVNLKDIyLCAyMSkKPisjZGVm aW5lIFZJREVPX01BUFBJTkcJCQkJR0VOTUFTSygyMCwgMTYpCj4rI2RlZmluZSBWSURFT19TVFJF QU1fRU5BQkxFCQkJQklUKDUpCj4rCj4rI2RlZmluZSBEV19EUF9WU0FNUExFX1NUVUZGX0NUUkwx CQkweDAzMDQKPisKPisjZGVmaW5lIERXX0RQX1ZTQU1QTEVfU1RVRkZfQ1RSTDIJCTB4MDMwOAo+ Kwo+KyNkZWZpbmUgRFdfRFBfVklOUFVUX1BPTEFSSVRZX0NUUkwJCTB4MDMwYwo+KyNkZWZpbmUg REVfSU5fUE9MQVJJVFkJCQkJQklUKDIpCj4rI2RlZmluZSBIU1lOQ19JTl9QT0xBUklUWQkJCUJJ VCgxKQo+KyNkZWZpbmUgVlNZTkNfSU5fUE9MQVJJVFkJCQlCSVQoMCkKPisKPisjZGVmaW5lIERX X0RQX1ZJREVPX0NPTkZJRzEJCQkweDAzMTAKPisjZGVmaW5lIEhBQ1RJVkUJCQkJCUdFTk1BU0so MzEsIDE2KQo+KyNkZWZpbmUgSEJMQU5LCQkJCQlHRU5NQVNLKDE1LCAyKQo+KyNkZWZpbmUgSV9Q CQkJCQlCSVQoMSkKPisjZGVmaW5lIFJfVl9CTEFOS19JTl9PU0MJCQlCSVQoMCkKPisKPisjZGVm aW5lIERXX0RQX1ZJREVPX0NPTkZJRzIJCQkweDAzMTQKPisjZGVmaW5lIFZCTEFOSwkJCQkJR0VO TUFTSygzMSwgMTYpCj4rI2RlZmluZSBWQUNUSVZFCQkJCQlHRU5NQVNLKDE1LCAwKQo+Kwo+KyNk ZWZpbmUgRFdfRFBfVklERU9fQ09ORklHMwkJCTB4MDMxOAo+KyNkZWZpbmUgSF9TWU5DX1dJRFRI CQkJCUdFTk1BU0soMzEsIDE2KQo+KyNkZWZpbmUgSF9GUk9OVF9QT1JDSAkJCQlHRU5NQVNLKDE1 LCAwKQo+Kwo+KyNkZWZpbmUgRFdfRFBfVklERU9fQ09ORklHNAkJCTB4MDMxYwo+KyNkZWZpbmUg Vl9TWU5DX1dJRFRICQkJCUdFTk1BU0soMzEsIDE2KQo+KyNkZWZpbmUgVl9GUk9OVF9QT1JDSAkJ CQlHRU5NQVNLKDE1LCAwKQo+Kwo+KyNkZWZpbmUgRFdfRFBfVklERU9fQ09ORklHNQkJCTB4MDMy MAo+KyNkZWZpbmUgSU5JVF9USFJFU0hPTERfSEkJCQlHRU5NQVNLKDIyLCAyMSkKPisjZGVmaW5l IEFWRVJBR0VfQllURVNfUEVSX1RVX0ZSQUMJCUdFTk1BU0soMTksIDE2KQo+KyNkZWZpbmUgSU5J VF9USFJFU0hPTEQJCQkJR0VOTUFTSygxMywgNykKPisjZGVmaW5lIEFWRVJBR0VfQllURVNfUEVS X1RVCQkJR0VOTUFTSyg2LCAwKQo+Kwo+KyNkZWZpbmUgRFdfRFBfVklERU9fTVNBMQkJCQkweDAz MjQKPisjZGVmaW5lIFZTVEFSVAkJCQkJR0VOTUFTSygzMSwgMTYpCj4rI2RlZmluZSBIU1RBUlQJ CQkJCUdFTk1BU0soMTUsIDApCj4rCj4rI2RlZmluZSBEV19EUF9WSURFT19NU0EyCQkJMHgwMzI4 Cj4rI2RlZmluZSBNSVNDMAkJCQkJR0VOTUFTSygzMSwgMjQpCj4rCj4rI2RlZmluZSBEV19EUF9W SURFT19NU0EzCQkJMHgwMzJjCj4rI2RlZmluZSBNSVNDMQkJCQkJR0VOTUFTSygzMSwgMjQpCj4r Cj4rI2RlZmluZSBEV19EUF9WSURFT19IQkxBTktfSU5URVJWQUwJCTB4MDMzMAo+KyNkZWZpbmUg SEJMQU5LX0lOVEVSVkFMX0VOCQkJQklUKDE2KQo+KyNkZWZpbmUgSEJMQU5LX0lOVEVSVkFMCQkJ CUdFTk1BU0soMTUsIDApCj4rCj4rI2RlZmluZSBEV19EUF9BVURfQ09ORklHMQkJCTB4MDQwMAo+ KyNkZWZpbmUgQVVESU9fVElNRVNUQU1QX1ZFUlNJT05fTlVNCQlHRU5NQVNLKDI5LCAyNCkKPisj ZGVmaW5lIEFVRElPX1BBQ0tFVF9JRAkJCQlHRU5NQVNLKDIzLCAxNikKPisjZGVmaW5lIEFVRElP X01VVEUJCQkJQklUKDE1KQo+KyNkZWZpbmUgTlVNX0NIQU5ORUxTCQkJCUdFTk1BU0soMTQsIDEy KQo+KyNkZWZpbmUgSEJSX01PREVfRU5BQkxFCQkJCUJJVCgxMCkKPisjZGVmaW5lIEFVRElPX0RB VEFfV0lEVEgJCQlHRU5NQVNLKDksIDUpCj4rI2RlZmluZSBBVURJT19EQVRBX0lOX0VOCQkJR0VO TUFTSyg0LCAxKQo+KyNkZWZpbmUgQVVESU9fSU5GX1NFTEVDVAkJCUJJVCgwKQo+Kwo+KyNkZWZp bmUgRFdfRFBfU0RQX1ZFUlRJQ0FMX0NUUkwJCQkweDA1MDAKPisjZGVmaW5lIEVOX1ZFUlRJQ0FM X1NEUAkJCQlCSVQoMikKPisjZGVmaW5lIEVOX0FVRElPX1NUUkVBTV9TRFAJCQlCSVQoMSkKPisj ZGVmaW5lIEVOX0FVRElPX1RJTUVTVEFNUF9TRFAJCQlCSVQoMCkKPisjZGVmaW5lIERXX0RQX1NE UF9IT1JJWk9OVEFMX0NUUkwJCTB4MDUwNAo+KyNkZWZpbmUgRU5fSE9SSVpPTlRBTF9TRFAJCQlC SVQoMikKPisjZGVmaW5lIERXX0RQX1NEUF9TVEFUVVNfUkVHSVNURVIJCTB4MDUwOAo+KyNkZWZp bmUgRFdfRFBfU0RQX01BTlVBTF9DVFJMCQkJMHgwNTBjCj4rI2RlZmluZSBEV19EUF9TRFBfU1RB VFVTX0VOCQkJMHgwNTEwCj4rCj4rI2RlZmluZSBEV19EUF9TRFBfUkVHSVNURVJfQkFOSwkJCTB4 MDYwMAo+KyNkZWZpbmUgU0RQX1JFR1MJCQkJR0VOTUFTSygzMSwgMCkKPisKPisjZGVmaW5lIERX X0RQX1BIWUlGX0NUUkwJCQkweDBhMDAKPisjZGVmaW5lIFBIWV9XSURUSAkJCQlCSVQoMjUpCj4r I2RlZmluZSBQSFlfUE9XRVJET1dOCQkJCUdFTk1BU0soMjAsIDE3KQo+KyNkZWZpbmUgUEhZX0JV U1kJCQkJR0VOTUFTSygxNSwgMTIpCj4rI2RlZmluZSBTU0NfRElTCQkJCQlCSVQoMTYpCj4rI2Rl ZmluZSBYTUlUX0VOQUJMRQkJCQlHRU5NQVNLKDExLCA4KQo+KyNkZWZpbmUgUEhZX0xBTkVTCQkJ CUdFTk1BU0soNywgNikKPisjZGVmaW5lIFBIWV9SQVRFCQkJCUdFTk1BU0soNSwgNCkKPisjZGVm aW5lIFRQU19TRUwJCQkJCUdFTk1BU0soMywgMCkKPisKPisjZGVmaW5lIERXX0RQX1BIWV9UWF9F UQkJCQkweDBhMDQKPisjZGVmaW5lIERXX0RQX0NVU1RPTVBBVDAJCQkweDBhMDgKPisjZGVmaW5l IERXX0RQX0NVU1RPTVBBVDEJCQkweDBhMGMKPisjZGVmaW5lIERXX0RQX0NVU1RPTVBBVDIJCQkw eDBhMTAKPisjZGVmaW5lIERXX0RQX0hCUjJfQ09NUExJQU5DRV9TQ1JBTUJMRVJfUkVTRVQJMHgw YTE0Cj4rI2RlZmluZSBEV19EUF9QSFlJRl9QV1JET1dOX0NUUkwJCTB4MGExOAo+Kwo+KyNkZWZp bmUgRFdfRFBfQVVYX0NNRAkJCQkweDBiMDAKPisjZGVmaW5lIEFVWF9DTURfVFlQRQkJCQlHRU5N QVNLKDMxLCAyOCkKPisjZGVmaW5lIEFVWF9BRERSCQkJCUdFTk1BU0soMjcsIDgpCj4rI2RlZmlu ZSBJMkNfQUREUl9PTkxZCQkJCUJJVCg0KQo+KyNkZWZpbmUgQVVYX0xFTl9SRVEJCQkJR0VOTUFT SygzLCAwKQo+Kwo+KyNkZWZpbmUgRFdfRFBfQVVYX1NUQVRVUwkJCTB4MGIwNAo+KyNkZWZpbmUg QVVYX1RJTUVPVVQJCQkJQklUKDE3KQo+KyNkZWZpbmUgQVVYX0JZVEVTX1JFQUQJCQkJR0VOTUFT SygyMywgMTkpCj4rI2RlZmluZSBBVVhfU1RBVFVTCQkJCUdFTk1BU0soNywgNCkKPisKPisjZGVm aW5lIERXX0RQX0FVWF9EQVRBMAkJCQkweDBiMDgKPisjZGVmaW5lIERXX0RQX0FVWF9EQVRBMQkJ CQkweDBiMGMKPisjZGVmaW5lIERXX0RQX0FVWF9EQVRBMgkJCQkweDBiMTAKPisjZGVmaW5lIERX X0RQX0FVWF9EQVRBMwkJCQkweDBiMTQKPisKPisjZGVmaW5lIERXX0RQX0dFTkVSQUxfSU5URVJS VVBUCQkJMHgwZDAwCj4rI2RlZmluZSBWSURFT19GSUZPX09WRVJGTE9XX1NUUkVBTTAJCUJJVCg2 KQo+KyNkZWZpbmUgQVVESU9fRklGT19PVkVSRkxPV19TVFJFQU0wCQlCSVQoNSkKPisjZGVmaW5l IFNEUF9FVkVOVF9TVFJFQU0wCQkJQklUKDQpCj4rI2RlZmluZSBBVVhfQ01EX0lOVkFMSUQJCQkJ QklUKDMpCj4rI2RlZmluZSBIRENQX0VWRU5UCQkJCUJJVCgyKQo+KyNkZWZpbmUgQVVYX1JFUExZ X0VWRU5UCQkJCUJJVCgxKQo+KyNkZWZpbmUgSFBEX0VWRU5UCQkJCUJJVCgwKQo+Kwo+KyNkZWZp bmUgRFdfRFBfR0VORVJBTF9JTlRFUlJVUFRfRU5BQkxFCQkweDBkMDQKPisjZGVmaW5lIEhEQ1Bf RVZFTlRfRU4JCQkJQklUKDIpCj4rI2RlZmluZSBBVVhfUkVQTFlfRVZFTlRfRU4JCQlCSVQoMSkK PisjZGVmaW5lIEhQRF9FVkVOVF9FTgkJCQlCSVQoMCkKPisKPisjZGVmaW5lIERXX0RQX0hQRF9T VEFUVVMJCQkweDBkMDgKPisjZGVmaW5lIEhQRF9TVEFURQkJCQlHRU5NQVNLKDExLCA5KQo+KyNk ZWZpbmUgSFBEX1NUQVRVUwkJCQlCSVQoOCkKPisjZGVmaW5lIEhQRF9IT1RfVU5QTFVHCQkJCUJJ VCgyKQo+KyNkZWZpbmUgSFBEX0hPVF9QTFVHCQkJCUJJVCgxKQo+KyNkZWZpbmUgSFBEX0lSUQkJ CQkJQklUKDApCj4rCj4rI2RlZmluZSBEV19EUF9IUERfSU5URVJSVVBUX0VOQUJMRQkJMHgwZDBj Cj4rI2RlZmluZSBIUERfVU5QTFVHX0VSUl9FTgkJCUJJVCgzKQo+KyNkZWZpbmUgSFBEX1VOUExV R19FTgkJCQlCSVQoMikKPisjZGVmaW5lIEhQRF9QTFVHX0VOCQkJCUJJVCgxKQo+KyNkZWZpbmUg SFBEX0lSUV9FTgkJCQlCSVQoMCkKPisKPisjZGVmaW5lIERXX0RQX0hEQ1BfQ0ZHCQkJCTB4MGUw MAo+KyNkZWZpbmUgRFBDRDEyUExVUwkJCQlCSVQoNykKPisjZGVmaW5lIENQX0lSUQkJCQkJQklU KDYpCj4rI2RlZmluZSBCWVBFTkNSWVBUSU9OCQkJCUJJVCg1KQo+KyNkZWZpbmUgSERDUF9MT0NL CQkJCUJJVCg0KQo+KyNkZWZpbmUgRU5DUllQVElPTkRJU0FCTEUJCQlCSVQoMykKPisjZGVmaW5l IEVOQUJMRV9IRENQXzEzCQkJCUJJVCgyKQo+KyNkZWZpbmUgRU5BQkxFX0hEQ1AJCQkJQklUKDEp Cj4rCj4rI2RlZmluZSBEV19EUF9IRENQX09CUwkJCQkweDBlMDQKPisjZGVmaW5lIEhEQ1AyMl9S RV9BVVRIRU5USUNBVElPTl9SRVEJCUJJVCgzMSkKPisjZGVmaW5lIEhEQ1AyMl9BVVRIRU5USUNB VElPTl9GQUlMRUQJCUJJVCgzMCkKPisjZGVmaW5lIEhEQ1AyMl9BVVRIRU5USUNBVElPTl9TVUND RVNTCQlCSVQoMjkpCj4rI2RlZmluZSBIRENQMjJfQ0FQQUJMRV9TSU5LCQkJQklUKDI4KQo+KyNk ZWZpbmUgSERDUDIyX1NJTktfQ0FQX0NIRUNLX0NPTVBMRVRFCQlCSVQoMjcpCj4rI2RlZmluZSBI RENQMjJfU1RBVEUJCQkJR0VOTUFTSygyNiwgMjQpCj4rI2RlZmluZSBIRENQMjJfQk9PVEVECQkJ CUJJVCgyMykKPisjZGVmaW5lIEhEQ1AxM19CU1RBVFVTCQkJCUdFTk1BU0soMjIsIDE5KQo+KyNk ZWZpbmUgUkVQRUFURVIJCQkJQklUKDE4KQo+KyNkZWZpbmUgSERDUF9DQVBBQkxFCQkJCUJJVCgx NykKPisjZGVmaW5lIFNUQVRFRQkJCQkJR0VOTUFTSygxNiwgMTQpCj4rI2RlZmluZSBTVEFURU9F RwkJCQlHRU5NQVNLKDEzLCAxMSkKPisjZGVmaW5lIFNUQVRFUgkJCQkJR0VOTUFTSygxMCwgOCkK PisjZGVmaW5lIFNUQVRFQQkJCQkJR0VOTUFTSyg3LCA0KQo+KyNkZWZpbmUgU1VCU1RBVEVBCQkJ CUdFTk1BU0soMywgMSkKPisjZGVmaW5lIEhEQ1BFTkdBR0VECQkJCUJJVCgwKQo+Kwo+KyNkZWZp bmUgRFdfRFBfSERDUF9BUElJTlRDTFIJCQkweDBlMDgKPisjZGVmaW5lIERXX0RQX0hEQ1BfQVBJ SU5UU1RBVAkJCTB4MGUwYwo+KyNkZWZpbmUgRFdfRFBfSERDUF9BUElJTlRNU0sJCQkweDBlMTAK PisjZGVmaW5lIEhEQ1AyMl9HUElPSU5UCQkJCUJJVCg4KQo+KyNkZWZpbmUgSERDUF9FTkdBR0VE CQkJCUJJVCg3KQo+KyNkZWZpbmUgSERDUF9GQUlMRUQJCQkJQklUKDYpCj4rI2RlZmluZSBLU1ZT SEExQ0FMQ0RPTkVJTlQJCQlCSVQoNSkKPisjZGVmaW5lIEFVWFJFU1BOQUNLN1RJTUVTCQkJQklU KDQpCj4rI2RlZmluZSBBVVhSRVNQVElNRU9VVAkJCQlCSVQoMykKPisjZGVmaW5lIEFVWFJFU1BE RUZFUjdUSU1FUwkJCUJJVCgyKQo+KyNkZWZpbmUgS1NWQUNDRVNTSU5UCQkJCUJJVCgwKQo+Kwo+ KyNkZWZpbmUgRFdfRFBfSERDUF9LU1ZNRU1DVFJMCQkJMHgwZTE4Cj4rI2RlZmluZSBLU1ZTSEEx U1RBVFVTCQkJCUJJVCg0KQo+KyNkZWZpbmUgS1NWTUVNQUNDRVNTCQkJCUJJVCgxKQo+KyNkZWZp bmUgS1NWTUVNUkVRVUVTVAkJCQlCSVQoMCkKPisKPisjZGVmaW5lIERXX0RQX0hEQ1BfUkVHX0JL U1YwCQkJMHgzNjAwCj4rI2RlZmluZSBEV19EUF9IRENQX1JFR19CS1NWMQkJCTB4MzYwNAo+KyNk ZWZpbmUgRFdfRFBfSERDUF9SRUdfQU5DT05GCQkJMHgzNjA4Cj4rI2RlZmluZSBBTl9CWVBBU1MJ CQkJQklUKDApCj4rCj4rI2RlZmluZSBEV19EUF9IRENQX1JFR19BTjAJCQkweDM2MGMKPisjZGVm aW5lIERXX0RQX0hEQ1BfUkVHX0FOMQkJCTB4MzYxMAo+KyNkZWZpbmUgRFdfRFBfSERDUF9SRUdf Uk1MQ1RMCQkJMHgzNjE0Cj4rI2RlZmluZSBPRFBLX0RFQ1JZUFRfRU5BQkxFCQkJQklUKDApCj4r Cj4rI2RlZmluZSBEV19EUF9IRENQX1JFR19STUxTVFMJCQkweDM2MTgKPisjZGVmaW5lIElEUEtf V1JfT0tfU1RTCQkJCUJJVCg2KQo+KyNkZWZpbmUJSURQS19EQVRBX0lOREVYCQkJCUdFTk1BU0so NSwgMCkKPisjZGVmaW5lIERXX0RQX0hEQ1BfUkVHX1NFRUQJCQkweDM2MWMKPisjZGVmaW5lIERX X0RQX0hEQ1BfUkVHX0RQSzAJCQkweDM2MjAKPisjZGVmaW5lIERXX0RQX0hEQ1BfUkVHX0RQSzEJ CQkweDM2MjQKPisjZGVmaW5lIERXX0RQX0hEQ1AyMl9HUElPU1RTCQkJMHgzNjI4Cj4rI2RlZmlu ZSBEV19EUF9IRENQMjJfR1BJT0NITkdTVFMJCTB4MzYyYwo+KyNkZWZpbmUgRFdfRFBfSERDUF9S RUdfRFBLX0NSQwkJCTB4MzYzMAo+Kwo+KyNkZWZpbmUgRFdfRFBfTUFYX1JFR0lTVEVSCQkJRFdf RFBfSERDUF9SRUdfRFBLX0NSQwo+Kwo+KyNkZWZpbmUgU0RQX1JFR19CQU5LX1NJWkUJCQkxNgo+ Kwo+K3N0cnVjdCBkd19kcF9saW5rX2NhcHMgewo+Kwlib29sIGVuaGFuY2VkX2ZyYW1pbmc7Cj4r CWJvb2wgdHBzM19zdXBwb3J0ZWQ7Cj4rCWJvb2wgdHBzNF9zdXBwb3J0ZWQ7Cj4rCWJvb2wgZmFz dF90cmFpbmluZzsKPisJYm9vbCBjaGFubmVsX2NvZGluZzsKPisJYm9vbCBzc2M7Cj4rfTsKPisK PitzdHJ1Y3QgZHdfZHBfbGlua190cmFpbl9zZXQgewo+Kwl1bnNpZ25lZCBpbnQgdm9sdGFnZV9z d2luZ1s0XTsKPisJdW5zaWduZWQgaW50IHByZV9lbXBoYXNpc1s0XTsKPisJYm9vbCB2b2x0YWdl X21heF9yZWFjaGVkWzRdOwo+Kwlib29sIHByZV9tYXhfcmVhY2hlZFs0XTsKPit9Owo+Kwo+K3N0 cnVjdCBkd19kcF9saW5rX3RyYWluIHsKPisJc3RydWN0IGR3X2RwX2xpbmtfdHJhaW5fc2V0IGFk anVzdDsKPisJYm9vbCBjbG9ja19yZWNvdmVyZWQ7Cj4rCWJvb2wgY2hhbm5lbF9lcXVhbGl6ZWQ7 Cj4rfTsKPisKPitzdHJ1Y3QgZHdfZHBfbGluayB7Cj4rCXU4IGRwY2RbRFBfUkVDRUlWRVJfQ0FQ X1NJWkVdOwo+Kwl1bnNpZ25lZCBjaGFyIHJldmlzaW9uOwo+Kwl1bnNpZ25lZCBpbnQgcmF0ZTsK PisJdW5zaWduZWQgaW50IGxhbmVzOwo+Kwl1OCBzaW5rX2NvdW50Owo+Kwl1OCB2c2Nfc2RwX3N1 cHBvcnRlZDsKPisJc3RydWN0IGR3X2RwX2xpbmtfY2FwcyBjYXBzOwo+KwlzdHJ1Y3QgZHdfZHBf bGlua190cmFpbiB0cmFpbjsKPisJc3RydWN0IGRybV9kcF9kZXNjIGRlc2M7Cj4rfTsKPisKPitz dHJ1Y3QgZHdfZHBfdmlkZW8gewo+KwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOwo+Kwl1 OCB2aWRlb19tYXBwaW5nOwo+Kwl1OCBwaXhlbF9tb2RlOwo+Kwl1OCBjb2xvcl9mb3JtYXQ7Cj4r CXU4IGJwYzsKPisJdTggYnBwOwo+K307Cj4rCj4rc3RydWN0IGR3X2RwX3NkcCB7Cj4rCXN0cnVj dCBkcF9zZHAgYmFzZTsKPisJdW5zaWduZWQgbG9uZyBmbGFnczsKPit9Owo+Kwo+K3N0cnVjdCBk d19kcF9ob3RwbHVnIHsKPisJYm9vbCBsb25nX2hwZDsKPit9Owo+Kwo+K3N0cnVjdCBkd19kcCB7 Cj4rCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKPisJc3RydWN0IGRldmljZSAqZGV2Owo+Kwlz dHJ1Y3QgcmVnbWFwICpyZWdtYXA7Cj4rCXN0cnVjdCBwaHkgKnBoeTsKPisJc3RydWN0IGNsayAq YXBiX2NsazsKPisJc3RydWN0IGNsayAqYXV4X2NsazsKPisJc3RydWN0IGNsayAqaTJzX2NsazsK PisJc3RydWN0IGNsayAqc3BkaWZfY2xrOwo+KwlzdHJ1Y3QgY2xrICpoZGNwX2NsazsKPisJc3Ry dWN0IHJlc2V0X2NvbnRyb2wgKnJzdGM7Cj4rCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRlOwo+ KwlpbnQgaXJxOwo+KwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaHBkX3dvcms7Cj4rCXN0cnVjdCBkd19k cF9ob3RwbHVnIGhvdHBsdWc7Cj4rCXN0cnVjdCBtdXRleCBpcnFfbG9jazsKPisKPisJc3RydWN0 IGRybV9kcF9hdXggYXV4Owo+Kwo+KwlzdHJ1Y3QgZHdfZHBfbGluayBsaW5rOwo+KwlzdHJ1Y3Qg ZHdfZHBfdmlkZW8gdmlkZW87Cj4rCXN0cnVjdCBkd19kcF9wbGF0X2RhdGEgcGxhdF9kYXRhOwo+ Kwo+KwlERUNMQVJFX0JJVE1BUChzZHBfcmVnX2JhbmssIFNEUF9SRUdfQkFOS19TSVpFKTsKPit9 Owo+Kwo+K2VudW0gewo+KwlEV19EUF9SR0JfNkJJVCwKPisJRFdfRFBfUkdCXzhCSVQsCj4rCURX X0RQX1JHQl8xMEJJVCwKPisJRFdfRFBfUkdCXzEyQklULAo+KwlEV19EUF9SR0JfMTZCSVQsCj4r CURXX0RQX1lDQkNSNDQ0XzhCSVQsCj4rCURXX0RQX1lDQkNSNDQ0XzEwQklULAo+KwlEV19EUF9Z Q0JDUjQ0NF8xMkJJVCwKPisJRFdfRFBfWUNCQ1I0NDRfMTZCSVQsCj4rCURXX0RQX1lDQkNSNDIy XzhCSVQsCj4rCURXX0RQX1lDQkNSNDIyXzEwQklULAo+KwlEV19EUF9ZQ0JDUjQyMl8xMkJJVCwK PisJRFdfRFBfWUNCQ1I0MjJfMTZCSVQsCj4rCURXX0RQX1lDQkNSNDIwXzhCSVQsCj4rCURXX0RQ X1lDQkNSNDIwXzEwQklULAo+KwlEV19EUF9ZQ0JDUjQyMF8xMkJJVCwKPisJRFdfRFBfWUNCQ1I0 MjBfMTZCSVQsCj4rfTsKPisKPitlbnVtIHsKPisJRFdfRFBfTVBfU0lOR0xFX1BJWEVMLAo+KwlE V19EUF9NUF9EVUFMX1BJWEVMLAo+KwlEV19EUF9NUF9RVUFEX1BJWEVMLAo+K307Cj4rCj4rZW51 bSB7Cj4rCURXX0RQX1NEUF9WRVJUSUNBTF9JTlRFUlZBTCA9IEJJVCgwKSwKPisJRFdfRFBfU0RQ X0hPUklaT05UQUxfSU5URVJWQUwgPSBCSVQoMSksCj4rfTsKPisKPitlbnVtIHsKPisJRFdfRFBf SFBEX1NUQVRFX0lETEUsCj4rCURXX0RQX0hQRF9TVEFURV9VTlBMVUcsCj4rCURQX0RQX0hQRF9T VEFURV9USU1FT1VUID0gNCwKPisJRFdfRFBfSFBEX1NUQVRFX1BMVUcgPSA3Cj4rfTsKPisKPitl bnVtIHsKPisJRFdfRFBfUEhZX1BBVFRFUk5fTk9ORSwKPisJRFdfRFBfUEhZX1BBVFRFUk5fVFBT XzEsCj4rCURXX0RQX1BIWV9QQVRURVJOX1RQU18yLAo+KwlEV19EUF9QSFlfUEFUVEVSTl9UUFNf MywKPisJRFdfRFBfUEhZX1BBVFRFUk5fVFBTXzQsCj4rCURXX0RQX1BIWV9QQVRURVJOX1NFUk0s Cj4rCURXX0RQX1BIWV9QQVRURVJOX1BCUlM3LAo+KwlEV19EUF9QSFlfUEFUVEVSTl9DVVNUT01f ODBCSVQsCj4rCURXX0RQX1BIWV9QQVRURVJOX0NQMjUyMF8xLAo+KwlEV19EUF9QSFlfUEFUVEVS Tl9DUDI1MjBfMiwKPit9Owo+Kwo+K3N0cnVjdCBkd19kcF9vdXRwdXRfZm9ybWF0IHsKPisJdTMy IGJ1c19mb3JtYXQ7Cj4rCXUzMiBjb2xvcl9mb3JtYXQ7Cj4rCXU4IHZpZGVvX21hcHBpbmc7Cj4r CXU4IGJwYzsKPisJdTggYnBwOwo+K307Cj4rCj4rc3RhdGljIGNvbnN0IHN0cnVjdCBkd19kcF9v dXRwdXRfZm9ybWF0IGR3X2RwX291dHB1dF9mb3JtYXRzW10gPSB7Cj4rCXsgTUVESUFfQlVTX0ZN VF9SR0IxMDEwMTBfMVgzMCwgRFJNX0NPTE9SX0ZPUk1BVF9SR0I0NDQsIERXX0RQX1JHQl8xMEJJ VCwgMTAsIDMwIH0sCj4rCXsgTUVESUFfQlVTX0ZNVF9SR0I4ODhfMVgyNCwgRFJNX0NPTE9SX0ZP Uk1BVF9SR0I0NDQsIERXX0RQX1JHQl84QklULCA4LCAyNCB9LAo+Kwl7IE1FRElBX0JVU19GTVRf WVVWMTBfMVgzMCwgRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JDUjQ0NCwgRFdfRFBfWUNCQ1I0NDRfMTBC SVQsIDEwLCAzMCB9LAo+Kwl7IE1FRElBX0JVU19GTVRfWVVWOF8xWDI0LCBEUk1fQ09MT1JfRk9S TUFUX1lDQkNSNDQ0LCBEV19EUF9ZQ0JDUjQ0NF84QklULCA4LCAyNH0sCj4rCXsgTUVESUFfQlVT X0ZNVF9ZVVlWMTBfMVgyMCwgRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JDUjQyMiwgRFdfRFBfWUNCQ1I0 MjJfMTBCSVQsIDEwLCAyMCB9LAo+Kwl7IE1FRElBX0JVU19GTVRfWVVZVjhfMVgxNiwgRFJNX0NP TE9SX0ZPUk1BVF9ZQ0JDUjQyMiwgRFdfRFBfWUNCQ1I0MjJfOEJJVCwgOCwgMTYgfSwKPisJeyBN RURJQV9CVVNfRk1UX1VZWVZZWTEwXzBfNVgzMCwgRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JDUjQyMCwg RFdfRFBfWUNCQ1I0MjBfMTBCSVQsIDEwLCAxNSB9LAo+Kwl7IE1FRElBX0JVU19GTVRfVVlZVllZ OF8wXzVYMjQsIERSTV9DT0xPUl9GT1JNQVRfWUNCQ1I0MjAsIERXX0RQX1lDQkNSNDIwXzhCSVQs IDgsIDEyIH0sCj4rCXsgTUVESUFfQlVTX0ZNVF9SR0I2NjZfMVgyNF9DUEFESEksIERSTV9DT0xP Ul9GT1JNQVRfUkdCNDQ0LCBEV19EUF9SR0JfNkJJVCwgNiwgMTggfSwKPit9Owo+Kwo+K3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHdfZHBfb3V0cHV0X2Zvcm1hdCAqZHdfZHBfZ2V0X291dHB1dF9mb3Jt YXQodTMyIGJ1c19mb3JtYXQpCj4rewo+Kwl1bnNpZ25lZCBpbnQgaTsKPisKPisJZm9yIChpID0g MDsgaSA8IEFSUkFZX1NJWkUoZHdfZHBfb3V0cHV0X2Zvcm1hdHMpOyBpKyspCj4rCQlpZiAoZHdf ZHBfb3V0cHV0X2Zvcm1hdHNbaV0uYnVzX2Zvcm1hdCA9PSBidXNfZm9ybWF0KQo+KwkJCXJldHVy biAmZHdfZHBfb3V0cHV0X2Zvcm1hdHNbaV07Cj4rCj4rCXJldHVybiBOVUxMOwo+K30KPisKPitz dGF0aWMgaW5saW5lIHN0cnVjdCBkd19kcCAqYnJpZGdlX3RvX2RwKHN0cnVjdCBkcm1fYnJpZGdl ICpiKQo+K3sKPisJcmV0dXJuIGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgZHdfZHAsIGJyaWRnZSk7 Cj4rfQo+Kwo+K3N0YXRpYyBpbmxpbmUgdm9pZCBkd19kcF9waHlfc2V0X3BhdHRlcm4oc3RydWN0 IGR3X2RwICpkcCwgdTMyIHBhdHRlcm4pCj4rewo+KwlyZWdtYXBfdXBkYXRlX2JpdHMoZHAtPnJl Z21hcCwgRFdfRFBfUEhZSUZfQ1RSTCwgVFBTX1NFTCwKPisJCQkgICBGSUVMRF9QUkVQKFRQU19T RUwsIHBhdHRlcm4pKTsKPit9Cj4rCj4rc3RhdGljIHZvaWQgZHdfZHBfcGh5X3htaXRfZW5hYmxl KHN0cnVjdCBkd19kcCAqZHAsIHUzMiBsYW5lcykKPit7Cj4rCXUzMiB4bWl0X2VuYWJsZTsKPisK PisJc3dpdGNoIChsYW5lcykgewo+KwljYXNlIDQ6Cj4rCWNhc2UgMjoKPisJY2FzZSAxOgo+KwkJ eG1pdF9lbmFibGUgPSBHRU5NQVNLKGxhbmVzIC0gMSwgMCk7Cj4rCQlicmVhazsKPisJY2FzZSAw Ogo+KwlkZWZhdWx0Ogo+KwkJeG1pdF9lbmFibGUgPSAwOwo+KwkJYnJlYWs7Cj4rCX0KPisKPisJ cmVnbWFwX3VwZGF0ZV9iaXRzKGRwLT5yZWdtYXAsIERXX0RQX1BIWUlGX0NUUkwsIFhNSVRfRU5B QkxFLAo+KwkJCSAgIEZJRUxEX1BSRVAoWE1JVF9FTkFCTEUsIHhtaXRfZW5hYmxlKSk7Cj4rfQo+ Kwo+K3N0YXRpYyBib29sIGR3X2RwX2JhbmR3aWR0aF9vayhzdHJ1Y3QgZHdfZHAgKmRwLAo+KwkJ CSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwgdTMyIGJwcCwKPisJ CQkgICAgICAgdW5zaWduZWQgaW50IGxhbmVzLCB1bnNpZ25lZCBpbnQgcmF0ZSkKPit7Cj4rCXUz MiBtYXhfYncsIHJlcV9idzsKPisKPisJcmVxX2J3ID0gbW9kZS0+Y2xvY2sgKiBicHAgLyA4Owo+ KwltYXhfYncgPSBsYW5lcyAqIHJhdGU7Cj4rCWlmIChyZXFfYncgPiBtYXhfYncpCj4rCQlyZXR1 cm4gZmFsc2U7Cj4rCj4rCXJldHVybiB0cnVlOwo+K30KPisKPitzdGF0aWMgYm9vbCBkd19kcF9o cGRfZGV0ZWN0KHN0cnVjdCBkd19kcCAqZHApCj4rewo+Kwl1MzIgdmFsdWU7Cj4rCj4rCXJlZ21h cF9yZWFkKGRwLT5yZWdtYXAsIERXX0RQX0hQRF9TVEFUVVMsICZ2YWx1ZSk7Cj4rCj4rCXJldHVy biBGSUVMRF9HRVQoSFBEX1NUQVRFLCB2YWx1ZSkgPT0gRFdfRFBfSFBEX1NUQVRFX1BMVUc7Cj4r fQo+Kwo+K3N0YXRpYyB2b2lkIGR3X2RwX2xpbmtfY2Fwc19yZXNldChzdHJ1Y3QgZHdfZHBfbGlu a19jYXBzICpjYXBzKQo+K3sKPisJY2Fwcy0+ZW5oYW5jZWRfZnJhbWluZyA9IGZhbHNlOwo+Kwlj YXBzLT50cHMzX3N1cHBvcnRlZCA9IGZhbHNlOwo+KwljYXBzLT50cHM0X3N1cHBvcnRlZCA9IGZh bHNlOwo+KwljYXBzLT5mYXN0X3RyYWluaW5nID0gZmFsc2U7Cj4rCWNhcHMtPmNoYW5uZWxfY29k aW5nID0gZmFsc2U7Cj4rfQo+Kwo+Ky8qIFRPRE86IHB1bGwgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0 byBEUk0gRFAgaGVscGVycyAqLwo+K3N0YXRpYyB2b2lkIGR3X2RwX2xpbmtfcmVzZXQoc3RydWN0 IGR3X2RwX2xpbmsgKmxpbmspCj4rewo+KwlsaW5rLT52c2Nfc2RwX3N1cHBvcnRlZCA9IDA7Cj4r CWxpbmstPnNpbmtfY291bnQgPSAwOwo+KwlsaW5rLT5yZXZpc2lvbiA9IDA7Cj4rCWxpbmstPnJh dGUgPSAwOwo+KwlsaW5rLT5sYW5lcyA9IDA7Cj4rCj4rCWR3X2RwX2xpbmtfY2Fwc19yZXNldCgm bGluay0+Y2Fwcyk7Cj4rCW1lbXNldChsaW5rLT5kcGNkLCAwLCBzaXplb2YobGluay0+ZHBjZCkp Owo+K30KPisKPisvKiBUT0RPOiBzd2l0Y2ggdG8gZHJtX2RwX3JlYWRfc2lua19jb3VudF9jYXAg b25jZSB3ZSBjYW4gZ2V0IGNvbm5lY3RvciovCj4rc3RhdGljIGJvb2wgZHdfZHBfaGFzX3Npbmtf Y291bnQoY29uc3QgdTggZHBjZFtEUF9SRUNFSVZFUl9DQVBfU0laRV0sCj4rCQkJCSBjb25zdCBz dHJ1Y3QgZHJtX2RwX2Rlc2MgKmRlc2MpCj4rewo+KwlyZXR1cm4gZHBjZFtEUF9EUENEX1JFVl0g Pj0gRFBfRFBDRF9SRVZfMTEgJiYKPisJICAgICAgIGRwY2RbRFBfRE9XTlNUUkVBTVBPUlRfUFJF U0VOVF0gJiBEUF9EV05fU1RSTV9QT1JUX1BSRVNFTlQgJiYKPisJICAgICAgICFkcm1fZHBfaGFz X3F1aXJrKGRlc2MsIERQX0RQQ0RfUVVJUktfTk9fU0lOS19DT1VOVCk7Cj4rfQo+Kwo+K3N0YXRp YyBpbnQgZHdfZHBfbGlua19wYXJzZShzdHJ1Y3QgZHdfZHAgKmRwKQo+K3sKPisJc3RydWN0IGR3 X2RwX2xpbmsgKmxpbmsgPSAmZHAtPmxpbms7Cj4rCXU4IGRwY2Q7Cj4rCWludCByZXQ7Cj4rCj4r CWR3X2RwX2xpbmtfcmVzZXQobGluayk7Cj4rCj4rCXJldCA9IGRybV9kcF9yZWFkX2RwY2RfY2Fw cygmZHAtPmF1eCwgbGluay0+ZHBjZCk7Cj4rCWlmIChyZXQgPCAwKQo+KwkJcmV0dXJuIHJldDsK PisKPisJZHJtX2RwX3JlYWRfZGVzYygmZHAtPmF1eCwgJmxpbmstPmRlc2MsIGRybV9kcF9pc19i cmFuY2gobGluay0+ZHBjZCkpOwo+Kwo+KwlpZiAoZHdfZHBfaGFzX3NpbmtfY291bnQobGluay0+ ZHBjZCwgJmxpbmstPmRlc2MpKSB7Cj4rCQlyZXQgPSBkcm1fZHBfcmVhZF9zaW5rX2NvdW50KCZk cC0+YXV4KTsKPisJCWlmIChyZXQgPCAwKQo+KwkJCXJldHVybiByZXQ7Cj4rCj4rCQlsaW5rLT5z aW5rX2NvdW50ID0gcmV0Owo+Kwo+KwkJLyogRG9uZ2xlIGNvbm5lY3RlZCwgYnV0IG5vIGRpc3Bs YXkgKi8KPisJCWlmICghbGluay0+c2lua19jb3VudCkKPisJCQlyZXR1cm4gLUVOT0RFVjsKPisJ fQo+Kwo+KwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkYigmZHAtPmF1eCwgRFBfRFBSWF9GRUFUVVJF X0VOVU1FUkFUSU9OX0xJU1QsICZkcGNkKTsKPisJaWYgKHJldCA8IDApCj4rCQlyZXR1cm4gcmV0 Owo+Kwo+KwlsaW5rLT52c2Nfc2RwX3N1cHBvcnRlZCA9ICEhKGRwY2QgJiBEUF9WU0NfU0RQX0VY VF9GT1JfQ09MT1JJTUVUUllfU1VQUE9SVEVEKTsKPisKPisJbGluay0+cmV2aXNpb24gPSBsaW5r LT5kcGNkW0RQX0RQQ0RfUkVWXTsKPisJbGluay0+cmF0ZSA9IG1pbl90KHUzMiwgbWluKGRwLT5w bGF0X2RhdGEubWF4X2xpbmtfcmF0ZSwKPisJCQkJICAgIGRwLT5waHktPmF0dHJzLm1heF9saW5r X3JhdGUgKiAxMDApLAo+KwkJCSAgIGRybV9kcF9tYXhfbGlua19yYXRlKGxpbmstPmRwY2QpKTsK PisJbGluay0+bGFuZXMgPSBtaW5fdCh1OCwgcGh5X2dldF9idXNfd2lkdGgoZHAtPnBoeSksCj4r CQkJICAgIGRybV9kcF9tYXhfbGFuZV9jb3VudChsaW5rLT5kcGNkKSk7Cj4rCj4rCWxpbmstPmNh cHMuZW5oYW5jZWRfZnJhbWluZyA9IGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAobGluay0+ZHBj ZCk7Cj4rCWxpbmstPmNhcHMudHBzM19zdXBwb3J0ZWQgPSBkcm1fZHBfdHBzM19zdXBwb3J0ZWQo bGluay0+ZHBjZCk7Cj4rCWxpbmstPmNhcHMudHBzNF9zdXBwb3J0ZWQgPSBkcm1fZHBfdHBzNF9z dXBwb3J0ZWQobGluay0+ZHBjZCk7Cj4rCWxpbmstPmNhcHMuZmFzdF90cmFpbmluZyA9IGRybV9k cF9mYXN0X3RyYWluaW5nX2NhcChsaW5rLT5kcGNkKTsKPisJbGluay0+Y2Fwcy5jaGFubmVsX2Nv ZGluZyA9IGRybV9kcF9jaGFubmVsX2NvZGluZ19zdXBwb3J0ZWQobGluay0+ZHBjZCk7Cj4rCWxp bmstPmNhcHMuc3NjID0gISEobGluay0+ZHBjZFtEUF9NQVhfRE9XTlNQUkVBRF0gJiBEUF9NQVhf RE9XTlNQUkVBRF8wXzUpOwo+Kwo+KwlyZXR1cm4gMDsKPit9Cj4rCj4rc3RhdGljIGludCBkd19k cF9saW5rX3RyYWluX3VwZGF0ZV92c19lbXBoKHN0cnVjdCBkd19kcCAqZHApCj4rewo+KwlzdHJ1 Y3QgZHdfZHBfbGluayAqbGluayA9ICZkcC0+bGluazsKPisJc3RydWN0IGR3X2RwX2xpbmtfdHJh aW5fc2V0ICp0cmFpbl9zZXQgPSAmbGluay0+dHJhaW4uYWRqdXN0Owo+Kwl1bnNpZ25lZCBpbnQg bGFuZXMgPSBkcC0+bGluay5sYW5lczsKPisJdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzIHBoeV9j Zmc7Cj4rCXVuc2lnbmVkIGludCAqdnMsICpwZTsKPisJaW50IGksIHJldDsKPisJdTggYnVmWzRd Owo+Kwo+Kwl2cyA9IHRyYWluX3NldC0+dm9sdGFnZV9zd2luZzsKPisJcGUgPSB0cmFpbl9zZXQt PnByZV9lbXBoYXNpczsKPisKPisJZm9yIChpID0gMDsgaSA8IGxhbmVzOyBpKyspIHsKPisJCXBo eV9jZmcuZHAudm9sdGFnZVtpXSA9IHZzW2ldOwo+KwkJcGh5X2NmZy5kcC5wcmVbaV0gPSBwZVtp XTsKPisJfQo+Kwo+KwlwaHlfY2ZnLmRwLnNldF9sYW5lcyA9IGZhbHNlOwo+KwlwaHlfY2ZnLmRw LnNldF9yYXRlID0gZmFsc2U7Cj4rCXBoeV9jZmcuZHAuc2V0X3ZvbHRhZ2VzID0gdHJ1ZTsKPisK PisJcmV0ID0gcGh5X2NvbmZpZ3VyZShkcC0+cGh5LCAmcGh5X2NmZyk7Cj4rCWlmIChyZXQpCj4r CQlyZXR1cm4gcmV0Owo+Kwo+Kwlmb3IgKGkgPSAwOyBpIDwgbGFuZXM7IGkrKykgewo+KwkJYnVm W2ldID0gKHZzW2ldIDw8IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfU0hJRlQpIHwKPisJCQkgKHBl W2ldIDw8IERQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVCk7Cj4rCQlpZiAodHJhaW5fc2V0LT52 b2x0YWdlX21heF9yZWFjaGVkW2ldKQo+KwkJCWJ1ZltpXSB8PSBEUF9UUkFJTl9NQVhfU1dJTkdf UkVBQ0hFRDsKPisJCWlmICh0cmFpbl9zZXQtPnByZV9tYXhfcmVhY2hlZFtpXSkKPisJCQlidWZb aV0gfD0gRFBfVFJBSU5fTUFYX1BSRV9FTVBIQVNJU19SRUFDSEVEOwo+Kwl9Cj4rCj4rCXJldCA9 IGRybV9kcF9kcGNkX3dyaXRlKCZkcC0+YXV4LCBEUF9UUkFJTklOR19MQU5FMF9TRVQsIGJ1Ziwg bGFuZXMpOwo+KwlpZiAocmV0IDwgMCkKPisJCXJldHVybiByZXQ7Cj4rCj4rCXJldHVybiAwOwo+ K30KPisKPitzdGF0aWMgaW50IGR3X2RwX3BoeV9jb25maWd1cmUoc3RydWN0IGR3X2RwICpkcCwg dW5zaWduZWQgaW50IHJhdGUsCj4rCQkJICAgICAgIHVuc2lnbmVkIGludCBsYW5lcywgYm9vbCBz c2MpCj4rewo+Kwl1bmlvbiBwaHlfY29uZmlndXJlX29wdHMgcGh5X2NmZzsKPisJaW50IHJldDsK PisKPisJLyogTW92ZSBQSFkgdG8gUDMgKi8KPisJcmVnbWFwX3VwZGF0ZV9iaXRzKGRwLT5yZWdt YXAsIERXX0RQX1BIWUlGX0NUUkwsIFBIWV9QT1dFUkRPV04sCj4rCQkJICAgRklFTERfUFJFUChQ SFlfUE9XRVJET1dOLCAweDMpKTsKPisKPisJcGh5X2NmZy5kcC5sYW5lcyA9IGxhbmVzOwo+Kwlw aHlfY2ZnLmRwLmxpbmtfcmF0ZSA9IHJhdGUgLyAxMDA7Cj4rCXBoeV9jZmcuZHAuc3NjID0gc3Nj Owo+KwlwaHlfY2ZnLmRwLnNldF9sYW5lcyA9IHRydWU7Cj4rCXBoeV9jZmcuZHAuc2V0X3JhdGUg PSB0cnVlOwo+KwlwaHlfY2ZnLmRwLnNldF92b2x0YWdlcyA9IGZhbHNlOwo+KwlyZXQgPSBwaHlf Y29uZmlndXJlKGRwLT5waHksICZwaHlfY2ZnKTsKPisJaWYgKHJldCkKPisJCXJldHVybiByZXQ7 Cj4rCj4rCXJlZ21hcF91cGRhdGVfYml0cyhkcC0+cmVnbWFwLCBEV19EUF9QSFlJRl9DVFJMLCBQ SFlfTEFORVMsCj4rCQkJICAgRklFTERfUFJFUChQSFlfTEFORVMsIGxhbmVzIC8gMikpOwo+Kwo+ KwkvKiBNb3ZlIFBIWSB0byBQMCAqLwo+KwlyZWdtYXBfdXBkYXRlX2JpdHMoZHAtPnJlZ21hcCwg RFdfRFBfUEhZSUZfQ1RSTCwgUEhZX1BPV0VSRE9XTiwKPisJCQkgICBGSUVMRF9QUkVQKFBIWV9Q T1dFUkRPV04sIDB4MCkpOwo+Kwo+Kwlkd19kcF9waHlfeG1pdF9lbmFibGUoZHAsIGxhbmVzKTsK PisKPisJcmV0dXJuIDA7Cj4rfQo+Kwo+K3N0YXRpYyBpbnQgZHdfZHBfbGlua19jb25maWd1cmUo c3RydWN0IGR3X2RwICpkcCkKPit7Cj4rCXN0cnVjdCBkd19kcF9saW5rICpsaW5rID0gJmRwLT5s aW5rOwo+Kwl1OCBidWZbMl07Cj4rCWludCByZXQ7Cj4rCj4rCXJldCA9IGR3X2RwX3BoeV9jb25m aWd1cmUoZHAsIGxpbmstPnJhdGUsIGxpbmstPmxhbmVzLCBsaW5rLT5jYXBzLnNzYyk7Cj4rCWlm IChyZXQpCj4rCQlyZXR1cm4gcmV0Owo+Kwo+KwlidWZbMF0gPSBkcm1fZHBfbGlua19yYXRlX3Rv X2J3X2NvZGUobGluay0+cmF0ZSk7Cj4rCWJ1ZlsxXSA9IGxpbmstPmxhbmVzOwo+Kwo+KwlpZiAo bGluay0+Y2Fwcy5lbmhhbmNlZF9mcmFtaW5nKSB7Cj4rCQlidWZbMV0gfD0gRFBfTEFORV9DT1VO VF9FTkhBTkNFRF9GUkFNRV9FTjsKPisJCXJlZ21hcF91cGRhdGVfYml0cyhkcC0+cmVnbWFwLCBE V19EUF9DQ1RMLCBFTkhBTkNFX0ZSQU1JTkdfRU4sCj4rCQkJCSAgIEZJRUxEX1BSRVAoRU5IQU5D RV9GUkFNSU5HX0VOLCAxKSk7Cj4rCX0gZWxzZSB7Cj4rCQlyZWdtYXBfdXBkYXRlX2JpdHMoZHAt PnJlZ21hcCwgRFdfRFBfQ0NUTCwgRU5IQU5DRV9GUkFNSU5HX0VOLAo+KwkJCQkgICBGSUVMRF9Q UkVQKEVOSEFOQ0VfRlJBTUlOR19FTiwgMCkpOwo+Kwl9Cj4rCj4rCXJldCA9IGRybV9kcF9kcGNk X3dyaXRlKCZkcC0+YXV4LCBEUF9MSU5LX0JXX1NFVCwgYnVmLCBzaXplb2YoYnVmKSk7Cj4rCWlm IChyZXQgPCAwKQo+KwkJcmV0dXJuIHJldDsKPisKPisJYnVmWzBdID0gbGluay0+Y2Fwcy5zc2Mg PyBEUF9TUFJFQURfQU1QXzBfNSA6IDA7Cj4rCWJ1ZlsxXSA9IGxpbmstPmNhcHMuY2hhbm5lbF9j b2RpbmcgPyBEUF9TRVRfQU5TSV84QjEwQiA6IDA7Cj4rCj4rCXJldCA9IGRybV9kcF9kcGNkX3dy aXRlKCZkcC0+YXV4LCBEUF9ET1dOU1BSRUFEX0NUUkwsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwo+Kwlp ZiAocmV0IDwgMCkKPisJCXJldHVybiByZXQ7Cj4rCj4rCXJldHVybiAwOwo+K30KPisKPitzdGF0 aWMgdm9pZCBkd19kcF9saW5rX3RyYWluX2luaXQoc3RydWN0IGR3X2RwX2xpbmtfdHJhaW4gKnRy YWluKQo+K3sKPisJc3RydWN0IGR3X2RwX2xpbmtfdHJhaW5fc2V0ICphZGogPSAmdHJhaW4tPmFk anVzdDsKPisJdW5zaWduZWQgaW50IGk7Cj4rCj4rCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsK PisJCWFkai0+dm9sdGFnZV9zd2luZ1tpXSA9IDA7Cj4rCQlhZGotPnByZV9lbXBoYXNpc1tpXSA9 IDA7Cj4rCQlhZGotPnZvbHRhZ2VfbWF4X3JlYWNoZWRbaV0gPSBmYWxzZTsKPisJCWFkai0+cHJl X21heF9yZWFjaGVkW2ldID0gZmFsc2U7Cj4rCX0KPisKPisJdHJhaW4tPmNsb2NrX3JlY292ZXJl ZCA9IGZhbHNlOwo+Kwl0cmFpbi0+Y2hhbm5lbF9lcXVhbGl6ZWQgPSBmYWxzZTsKPit9Cj4rCj4r c3RhdGljIGJvb2wgZHdfZHBfbGlua190cmFpbl92YWxpZChjb25zdCBzdHJ1Y3QgZHdfZHBfbGlu a190cmFpbiAqdHJhaW4pCj4rewo+KwlyZXR1cm4gdHJhaW4tPmNsb2NrX3JlY292ZXJlZCAmJiB0 cmFpbi0+Y2hhbm5lbF9lcXVhbGl6ZWQ7Cj4rfQo+Kwo+K3N0YXRpYyBpbnQgZHdfZHBfbGlua190 cmFpbl9zZXRfcGF0dGVybihzdHJ1Y3QgZHdfZHAgKmRwLCB1MzIgcGF0dGVybikKPit7Cj4rCXU4 IGJ1ZiA9IDA7Cj4rCWludCByZXQ7Cj4rCj4rCWlmIChwYXR0ZXJuICYmIHBhdHRlcm4gIT0gRFBf VFJBSU5JTkdfUEFUVEVSTl80KSB7Cj4rCQlidWYgfD0gRFBfTElOS19TQ1JBTUJMSU5HX0RJU0FC TEU7Cj4rCj4rCQlyZWdtYXBfdXBkYXRlX2JpdHMoZHAtPnJlZ21hcCwgRFdfRFBfQ0NUTCwgU0NS QU1CTEVfRElTLAo+KwkJCQkgICBGSUVMRF9QUkVQKFNDUkFNQkxFX0RJUywgMSkpOwo+Kwl9IGVs c2Ugewo+KwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGRwLT5yZWdtYXAsIERXX0RQX0NDVEwsIFNDUkFN QkxFX0RJUywKPisJCQkJICAgRklFTERfUFJFUChTQ1JBTUJMRV9ESVMsIDApKTsKPisJfQo+Kwo+ Kwlzd2l0Y2ggKHBhdHRlcm4pIHsKPisJY2FzZSBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEU6 Cj4rCQlkd19kcF9waHlfc2V0X3BhdHRlcm4oZHAsIERXX0RQX1BIWV9QQVRURVJOX05PTkUpOwo+ KwkJYnJlYWs7Cj4rCWNhc2UgRFBfVFJBSU5JTkdfUEFUVEVSTl8xOgo+KwkJZHdfZHBfcGh5X3Nl dF9wYXR0ZXJuKGRwLCBEV19EUF9QSFlfUEFUVEVSTl9UUFNfMSk7Cj4rCQlicmVhazsKPisJY2Fz ZSBEUF9UUkFJTklOR19QQVRURVJOXzI6Cj4rCQlkd19kcF9waHlfc2V0X3BhdHRlcm4oZHAsIERX X0RQX1BIWV9QQVRURVJOX1RQU18yKTsKPisJCWJyZWFrOwo+KwljYXNlIERQX1RSQUlOSU5HX1BB VFRFUk5fMzoKPisJCWR3X2RwX3BoeV9zZXRfcGF0dGVybihkcCwgRFdfRFBfUEhZX1BBVFRFUk5f VFBTXzMpOwo+KwkJYnJlYWs7Cj4rCWNhc2UgRFBfVFJBSU5JTkdfUEFUVEVSTl80Ogo+KwkJZHdf ZHBfcGh5X3NldF9wYXR0ZXJuKGRwLCBEV19EUF9QSFlfUEFUVEVSTl9UUFNfNCk7Cj4rCQlicmVh azsKPisJZGVmYXVsdDoKPisJCXJldHVybiAtRUlOVkFMOwo+Kwl9Cj4rCj4rCXJldCA9IGRybV9k cF9kcGNkX3dyaXRlYigmZHAtPmF1eCwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsCj4rCQkJCSBi dWYgfCBwYXR0ZXJuKTsKPisJaWYgKHJldCA8IDApCj4rCQlyZXR1cm4gcmV0Owo+Kwo+KwlyZXR1 cm4gMDsKPit9Cj4rCj4rc3RhdGljIHU4IGR3X2RwX3ZvbHRhZ2VfbWF4KHU4IHByZWVtcGgpCj4r ewo+Kwlzd2l0Y2ggKHByZWVtcGggJiBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFTSykgewo+Kwlj YXNlIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA6Cj4rCQlyZXR1cm4gRFBfVFJBSU5fVk9MVEFH RV9TV0lOR19MRVZFTF8zOwo+KwljYXNlIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzE6Cj4rCQly ZXR1cm4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yOwo+KwljYXNlIERQX1RSQUlOX1BS RV9FTVBIX0xFVkVMXzI6Cj4rCQlyZXR1cm4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8x Owo+KwljYXNlIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzM6Cj4rCWRlZmF1bHQ6Cj4rCQlyZXR1 cm4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wOwo+Kwl9Cj4rfQo+Kwo+K3N0YXRpYyBi b29sIGR3X2RwX2xpbmtfZ2V0X2FkanVzdG1lbnRzKHN0cnVjdCBkd19kcF9saW5rICpsaW5rLAo+ KwkJCQkgICAgICAgdTggc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdKQo+K3sKPisJc3RydWN0 IGR3X2RwX2xpbmtfdHJhaW5fc2V0ICphZGogPSAmbGluay0+dHJhaW4uYWRqdXN0Owo+Kwl1bnNp Z25lZCBpbnQgaTsKPisJYm9vbCBjaGFuZ2VkID0gZmFsc2U7Cj4rCXU4IHYgPSAwOwo+Kwl1OCBw ID0gMDsKPisKPisJZm9yIChpID0gMDsgaSA8IGxpbmstPmxhbmVzOyBpKyspIHsKPisJCXYgPSBk cm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ZvbHRhZ2Uoc3RhdHVzLCBpKTsKPisJCXYgPj49IERQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfU0hJRlQ7Cj4rCQlwID0gZHJtX2RwX2dldF9hZGp1c3RfcmVx dWVzdF9wcmVfZW1waGFzaXMoc3RhdHVzLCBpKTsKPisJCXAgPj49IERQX1RSQUlOX1BSRV9FTVBI QVNJU19TSElGVDsKPisKPisJCWlmICgodiAhPSBhZGotPnZvbHRhZ2Vfc3dpbmdbaV0pIHx8IChw ICE9IGFkai0+cHJlX2VtcGhhc2lzW2ldKSkKPisJCQljaGFuZ2VkID0gdHJ1ZTsKPisKPisJCWlm IChwID49ICAoRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMyA+PiBEUF9UUkFJTl9QUkVfRU1QSEFT SVNfU0hJRlQpKSB7Cj4rCQkJYWRqLT5wcmVfZW1waGFzaXNbaV0gPSBEUF9UUkFJTl9QUkVfRU1Q SF9MRVZFTF8zID4+Cj4rCQkJCQkgICAgICAgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX1NISUZUOwo+ KwkJCWFkai0+cHJlX21heF9yZWFjaGVkW2ldID0gdHJ1ZTsKPisJCX0gZWxzZSB7Cj4rCQkJYWRq LT5wcmVfZW1waGFzaXNbaV0gPSBwOwo+KwkJCWFkai0+cHJlX21heF9yZWFjaGVkW2ldID0gZmFs c2U7Cj4rCQl9Cj4rCj4rCQl2ID0gbWluKHYsIGR3X2RwX3ZvbHRhZ2VfbWF4KHApKTsKPisJCWlm ICh2ID49IChEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzMgPj4gRFBfVFJBSU5fVk9MVEFH RV9TV0lOR19TSElGVCkpIHsKPisJCQlhZGotPnZvbHRhZ2Vfc3dpbmdbaV0gPSBEUF9UUkFJTl9W T0xUQUdFX1NXSU5HX0xFVkVMXzMgPj4KPisJCQkJCQlEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX1NI SUZUOwo+KwkJCWFkai0+dm9sdGFnZV9tYXhfcmVhY2hlZFtpXSA9IHRydWU7Cj4rCQl9IGVsc2Ug ewo+KwkJCWFkai0+dm9sdGFnZV9zd2luZ1tpXSA9IHY7Cj4rCQkJYWRqLT52b2x0YWdlX21heF9y ZWFjaGVkW2ldID0gZmFsc2U7Cj4rCQl9Cj4rCX0KPisKPisJcmV0dXJuIGNoYW5nZWQ7Cj4rfQo+ Kwo+K3N0YXRpYyBpbnQgZHdfZHBfbGlua19jbG9ja19yZWNvdmVyeShzdHJ1Y3QgZHdfZHAgKmRw KQo+K3sKPisJc3RydWN0IGR3X2RwX2xpbmsgKmxpbmsgPSAmZHAtPmxpbms7Cj4rCXU4IHN0YXR1 c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsKPisJdW5zaWduZWQgaW50IHRyaWVzID0gMDsKPisJaW50 IHJldDsKPisJYm9vbCBhZGpfY2hhbmdlZDsKPisKPisJcmV0ID0gZHdfZHBfbGlua190cmFpbl9z ZXRfcGF0dGVybihkcCwgRFBfVFJBSU5JTkdfUEFUVEVSTl8xKTsKPisJaWYgKHJldCkKPisJCXJl dHVybiByZXQ7Cj4rCj4rCWZvciAoOzspIHsKPisJCXJldCA9IGR3X2RwX2xpbmtfdHJhaW5fdXBk YXRlX3ZzX2VtcGgoZHApOwo+KwkJaWYgKHJldCkKPisJCQlyZXR1cm4gcmV0Owo+Kwo+KwkJZHJt X2RwX2xpbmtfdHJhaW5fY2xvY2tfcmVjb3ZlcnlfZGVsYXkoJmRwLT5hdXgsIGxpbmstPmRwY2Qp Owo+Kwo+KwkJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZF9saW5rX3N0YXR1cygmZHAtPmF1eCwgc3Rh dHVzKTsKPisJCWlmIChyZXQgPCAwKSB7Cj4rCQkJZGV2X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRv IHJlYWQgbGluayBzdGF0dXM6ICVkXG4iLCByZXQpOwo+KwkJCXJldHVybiByZXQ7Cj4rCQl9Cj4r Cj4rCQlpZiAoZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKHN0YXR1cywgbGluay0+bGFuZXMpKSB7 Cj4rCQkJbGluay0+dHJhaW4uY2xvY2tfcmVjb3ZlcmVkID0gdHJ1ZTsKPisJCQlicmVhazsKPisJ CX0KPisKPisJCS8qCj4rCQkgKiBBY2NvcmRpbmcgdG8gRFAgc3BlYyAxLjQsIGlmIGN1cnJlbnQg QURKIGlzIHRoZSBzYW1lCj4rCQkgKiB3aXRoIHByZXZpb3VzIFJFUSwgd2UgbmVlZCB0byByZXRy eSA1IHRpbWVzLgo+KwkJICovCj4rCQlhZGpfY2hhbmdlZCA9IGR3X2RwX2xpbmtfZ2V0X2FkanVz dG1lbnRzKGxpbmssIHN0YXR1cyk7Cj4rCQlpZiAoIWFkal9jaGFuZ2VkKQo+KwkJCXRyaWVzKys7 Cj4rCQllbHNlCj4rCQkJdHJpZXMgPSAwOwo+Kwo+KwkJaWYgKHRyaWVzID09IDUpCj4rCQkJYnJl YWs7Cj4rCX0KPisKPisJcmV0dXJuIDA7Cj4rfQo+Kwo+K3N0YXRpYyBpbnQgZHdfZHBfbGlua19j aGFubmVsX2VxdWFsaXphdGlvbihzdHJ1Y3QgZHdfZHAgKmRwKQo+K3sKPisJc3RydWN0IGR3X2Rw X2xpbmsgKmxpbmsgPSAmZHAtPmxpbms7Cj4rCXU4IHN0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpF XSwgcGF0dGVybjsKPisJdW5zaWduZWQgaW50IHRyaWVzOwo+KwlpbnQgcmV0Owo+Kwo+KwlpZiAo bGluay0+Y2Fwcy50cHM0X3N1cHBvcnRlZCkKPisJCXBhdHRlcm4gPSBEUF9UUkFJTklOR19QQVRU RVJOXzQ7Cj4rCWVsc2UgaWYgKGxpbmstPmNhcHMudHBzM19zdXBwb3J0ZWQpCj4rCQlwYXR0ZXJu ID0gRFBfVFJBSU5JTkdfUEFUVEVSTl8zOwo+KwllbHNlCj4rCQlwYXR0ZXJuID0gRFBfVFJBSU5J TkdfUEFUVEVSTl8yOwo+KwlyZXQgPSBkd19kcF9saW5rX3RyYWluX3NldF9wYXR0ZXJuKGRwLCBw YXR0ZXJuKTsKPisJaWYgKHJldCkKPisJCXJldHVybiByZXQ7Cj4rCj4rCWZvciAodHJpZXMgPSAx OyB0cmllcyA8IDU7IHRyaWVzKyspIHsKPisJCXJldCA9IGR3X2RwX2xpbmtfdHJhaW5fdXBkYXRl X3ZzX2VtcGgoZHApOwo+KwkJaWYgKHJldCkKPisJCQlyZXR1cm4gcmV0Owo+Kwo+KwkJZHJtX2Rw X2xpbmtfdHJhaW5fY2hhbm5lbF9lcV9kZWxheSgmZHAtPmF1eCwgbGluay0+ZHBjZCk7Cj4rCj4r CQlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZkcC0+YXV4LCBzdGF0dXMpOwo+ KwkJaWYgKHJldCA8IDApCj4rCQkJcmV0dXJuIHJldDsKPisKPisJCWlmICghZHJtX2RwX2Nsb2Nr X3JlY292ZXJ5X29rKHN0YXR1cywgbGluay0+bGFuZXMpKSB7Cj4rCQkJZGV2X2VycihkcC0+ZGV2 LCAiY2xvY2sgcmVjb3ZlcnkgbG9zdCB3aGlsZSBlcXVhbGl6aW5nIGNoYW5uZWxcbiIpOwo+KwkJ CWxpbmstPnRyYWluLmNsb2NrX3JlY292ZXJlZCA9IGZhbHNlOwo+KwkJCWJyZWFrOwo+KwkJfQo+ Kwo+KwkJaWYgKGRybV9kcF9jaGFubmVsX2VxX29rKHN0YXR1cywgbGluay0+bGFuZXMpKSB7Cj4r CQkJbGluay0+dHJhaW4uY2hhbm5lbF9lcXVhbGl6ZWQgPSB0cnVlOwo+KwkJCWJyZWFrOwo+KwkJ fQo+Kwo+KwkJZHdfZHBfbGlua19nZXRfYWRqdXN0bWVudHMobGluaywgc3RhdHVzKTsKPisJfQo+ Kwo+KwlyZXR1cm4gMDsKPit9Cj4rCj4rc3RhdGljIGludCBkd19kcF9saW5rX2Rvd25ncmFkZShz dHJ1Y3QgZHdfZHAgKmRwKQo+K3sKPisJc3RydWN0IGR3X2RwX2xpbmsgKmxpbmsgPSAmZHAtPmxp bms7Cj4rCXN0cnVjdCBkd19kcF92aWRlbyAqdmlkZW8gPSAmZHAtPnZpZGVvOwo+Kwo+Kwlzd2l0 Y2ggKGxpbmstPnJhdGUpIHsKPisJY2FzZSAxNjIwMDA6Cj4rCQlyZXR1cm4gLUVJTlZBTDsKPisJ Y2FzZSAyNzAwMDA6Cj4rCQlsaW5rLT5yYXRlID0gMTYyMDAwOwo+KwkJYnJlYWs7Cj4rCWNhc2Ug NTQwMDAwOgo+KwkJbGluay0+cmF0ZSA9IDI3MDAwMDsKPisJCWJyZWFrOwo+KwljYXNlIDgxMDAw MDoKPisJCWxpbmstPnJhdGUgPSA1NDAwMDA7Cj4rCQlicmVhazsKPisJfQo+Kwo+KwlpZiAoIWR3 X2RwX2JhbmR3aWR0aF9vayhkcCwgJnZpZGVvLT5tb2RlLCB2aWRlby0+YnBwLCBsaW5rLT5sYW5l cywKPisJCQkJbGluay0+cmF0ZSkpCj4rCQlyZXR1cm4gLUUyQklHOwo+Kwo+KwlyZXR1cm4gMDsK Pit9Cj4rCj4rc3RhdGljIGludCBkd19kcF9saW5rX3RyYWluX2Z1bGwoc3RydWN0IGR3X2RwICpk cCkKPit7Cj4rCXN0cnVjdCBkd19kcF9saW5rICpsaW5rID0gJmRwLT5saW5rOwo+KwlpbnQgcmV0 Owo+Kwo+K3JldHJ5Ogo+Kwlkd19kcF9saW5rX3RyYWluX2luaXQoJmxpbmstPnRyYWluKTsKPisK PisJZGV2X2RiZyhkcC0+ZGV2LCAiZnVsbC10cmFpbmluZyBsaW5rOiAldSBsYW5lJXMgYXQgJXUg TUh6XG4iLAo+KwkJbGluay0+bGFuZXMsIChsaW5rLT5sYW5lcyA+IDEpID8gInMiIDogIiIsIGxp bmstPnJhdGUgLyAxMDApOwo+Kwo+KwlyZXQgPSBkd19kcF9saW5rX2NvbmZpZ3VyZShkcCk7Cj4r CWlmIChyZXQgPCAwKSB7Cj4rCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gY29uZmlndXJl IERQIGxpbms6ICVkXG4iLCByZXQpOwo+KwkJcmV0dXJuIHJldDsKPisJfQo+Kwo+KwlyZXQgPSBk d19kcF9saW5rX2Nsb2NrX3JlY292ZXJ5KGRwKTsKPisJaWYgKHJldCA8IDApIHsKPisJCWRldl9l cnIoZHAtPmRldiwgImNsb2NrIHJlY292ZXJ5IGZhaWxlZDogJWRcbiIsIHJldCk7Cj4rCQlnb3Rv IG91dDsKPisJfQo+Kwo+KwlpZiAoIWxpbmstPnRyYWluLmNsb2NrX3JlY292ZXJlZCkgewo+KwkJ ZGV2X2VycihkcC0+ZGV2LCAiY2xvY2sgcmVjb3ZlcnkgZmFpbGVkLCBkb3duZ3JhZGluZyBsaW5r XG4iKTsKPisKPisJCXJldCA9IGR3X2RwX2xpbmtfZG93bmdyYWRlKGRwKTsKPisJCWlmIChyZXQg PCAwKQo+KwkJCWdvdG8gb3V0Owo+KwkJZWxzZQo+KwkJCWdvdG8gcmV0cnk7Cj4rCX0KPisKPisJ ZGV2X2RiZyhkcC0+ZGV2LCAiY2xvY2sgcmVjb3Zlcnkgc3VjY2VlZGVkXG4iKTsKPisKPisJcmV0 ID0gZHdfZHBfbGlua19jaGFubmVsX2VxdWFsaXphdGlvbihkcCk7Cj4rCWlmIChyZXQgPCAwKSB7 Cj4rCQlkZXZfZXJyKGRwLT5kZXYsICJjaGFubmVsIGVxdWFsaXphdGlvbiBmYWlsZWQ6ICVkXG4i LCByZXQpOwo+KwkJZ290byBvdXQ7Cj4rCX0KPisKPisJaWYgKCFsaW5rLT50cmFpbi5jaGFubmVs X2VxdWFsaXplZCkgewo+KwkJZGV2X2VycihkcC0+ZGV2LCAiY2hhbm5lbCBlcXVhbGl6YXRpb24g ZmFpbGVkLCBkb3duZ3JhZGluZyBsaW5rXG4iKTsKPisKPisJCXJldCA9IGR3X2RwX2xpbmtfZG93 bmdyYWRlKGRwKTsKPisJCWlmIChyZXQgPCAwKQo+KwkJCWdvdG8gb3V0Owo+KwkJZWxzZQo+KwkJ CWdvdG8gcmV0cnk7Cj4rCX0KPisKPisJZGV2X2RiZyhkcC0+ZGV2LCAiY2hhbm5lbCBlcXVhbGl6 YXRpb24gc3VjY2VlZGVkXG4iKTsKPisKPitvdXQ6Cj4rCWR3X2RwX2xpbmtfdHJhaW5fc2V0X3Bh dHRlcm4oZHAsIERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7Cj4rCXJldHVybiByZXQ7Cj4r fQo+Kwo+K3N0YXRpYyBpbnQgZHdfZHBfbGlua190cmFpbl9mYXN0KHN0cnVjdCBkd19kcCAqZHAp Cj4rewo+KwlzdHJ1Y3QgZHdfZHBfbGluayAqbGluayA9ICZkcC0+bGluazsKPisJaW50IHJldDsK PisJdTggc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdOwo+Kwl1OCBwYXR0ZXJuOwo+Kwo+Kwlk d19kcF9saW5rX3RyYWluX2luaXQoJmxpbmstPnRyYWluKTsKPisKPisJZGV2X2RiZyhkcC0+ZGV2 LCAiZmFzdC10cmFpbmluZyBsaW5rOiAldSBsYW5lJXMgYXQgJXUgTUh6XG4iLAo+KwkJbGluay0+ bGFuZXMsIChsaW5rLT5sYW5lcyA+IDEpID8gInMiIDogIiIsIGxpbmstPnJhdGUgLyAxMDApOwo+ Kwo+KwlyZXQgPSBkd19kcF9saW5rX2NvbmZpZ3VyZShkcCk7Cj4rCWlmIChyZXQgPCAwKSB7Cj4r CQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gY29uZmlndXJlIERQIGxpbms6ICVkXG4iLCBy ZXQpOwo+KwkJcmV0dXJuIHJldDsKPisJfQo+Kwo+KwlyZXQgPSBkd19kcF9saW5rX3RyYWluX3Nl dF9wYXR0ZXJuKGRwLCBEUF9UUkFJTklOR19QQVRURVJOXzEpOwo+KwlpZiAocmV0KQo+KwkJZ290 byBvdXQ7Cj4rCj4rCXVzbGVlcF9yYW5nZSg1MDAsIDEwMDApOwo+Kwo+KwlpZiAobGluay0+Y2Fw cy50cHM0X3N1cHBvcnRlZCkKPisJCXBhdHRlcm4gPSBEUF9UUkFJTklOR19QQVRURVJOXzQ7Cj4r CWVsc2UgaWYgKGxpbmstPmNhcHMudHBzM19zdXBwb3J0ZWQpCj4rCQlwYXR0ZXJuID0gRFBfVFJB SU5JTkdfUEFUVEVSTl8zOwo+KwllbHNlCj4rCQlwYXR0ZXJuID0gRFBfVFJBSU5JTkdfUEFUVEVS Tl8yOwo+KwlyZXQgPSBkd19kcF9saW5rX3RyYWluX3NldF9wYXR0ZXJuKGRwLCBwYXR0ZXJuKTsK PisJaWYgKHJldCkKPisJCWdvdG8gb3V0Owo+Kwo+Kwl1c2xlZXBfcmFuZ2UoNTAwLCAxMDAwKTsK PisKPisJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZF9saW5rX3N0YXR1cygmZHAtPmF1eCwgc3RhdHVz KTsKPisJaWYgKHJldCA8IDApIHsKPisJCWRldl9lcnIoZHAtPmRldiwgImZhaWxlZCB0byByZWFk IGxpbmsgc3RhdHVzOiAlZFxuIiwgcmV0KTsKPisJCWdvdG8gb3V0Owo+Kwl9Cj4rCj4rCWlmICgh ZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKHN0YXR1cywgbGluay0+bGFuZXMpKSB7Cj4rCQlkZXZf ZXJyKGRwLT5kZXYsICJjbG9jayByZWNvdmVyeSBmYWlsZWRcbiIpOwo+KwkJcmV0ID0gLUVJTzsK PisJCWdvdG8gb3V0Owo+Kwl9Cj4rCj4rCWlmICghZHJtX2RwX2NoYW5uZWxfZXFfb2soc3RhdHVz LCBsaW5rLT5sYW5lcykpIHsKPisJCWRldl9lcnIoZHAtPmRldiwgImNoYW5uZWwgZXF1YWxpemF0 aW9uIGZhaWxlZFxuIik7Cj4rCQlyZXQgPSAtRUlPOwo+KwkJZ290byBvdXQ7Cj4rCX0KPisKPitv dXQ6Cj4rCWR3X2RwX2xpbmtfdHJhaW5fc2V0X3BhdHRlcm4oZHAsIERQX1RSQUlOSU5HX1BBVFRF Uk5fRElTQUJMRSk7Cj4rCXJldHVybiByZXQ7Cj4rfQo+Kwo+K3N0YXRpYyBpbnQgZHdfZHBfbGlu a190cmFpbihzdHJ1Y3QgZHdfZHAgKmRwKQo+K3sKPisJc3RydWN0IGR3X2RwX2xpbmsgKmxpbmsg PSAmZHAtPmxpbms7Cj4rCWludCByZXQ7Cj4rCj4rCWlmIChsaW5rLT5jYXBzLmZhc3RfdHJhaW5p bmcpIHsKPisJCWlmIChkd19kcF9saW5rX3RyYWluX3ZhbGlkKCZsaW5rLT50cmFpbikpIHsKPisJ CQlyZXQgPSBkd19kcF9saW5rX3RyYWluX2Zhc3QoZHApOwo+KwkJCWlmIChyZXQgPCAwKQo+KwkJ CQlkZXZfZXJyKGRwLT5kZXYsICJmYXN0IGxpbmsgdHJhaW5pbmcgZmFpbGVkOiAlZFxuIiwgcmV0 KTsKPisJCQllbHNlCj4rCQkJCXJldHVybiAwOwo+KwkJfQo+Kwl9Cj4rCj4rCXJldCA9IGR3X2Rw X2xpbmtfdHJhaW5fZnVsbChkcCk7Cj4rCWlmIChyZXQgPCAwKSB7Cj4rCQlkZXZfZXJyKGRwLT5k ZXYsICJmdWxsIGxpbmsgdHJhaW5pbmcgZmFpbGVkOiAlZFxuIiwgcmV0KTsKPisJCXJldHVybiBy ZXQ7Cj4rCX0KPisKPisJcmV0dXJuIDA7Cj4rfQo+Kwo+K3N0YXRpYyBpbnQgZHdfZHBfc2VuZF9z ZHAoc3RydWN0IGR3X2RwICpkcCwgc3RydWN0IGR3X2RwX3NkcCAqc2RwKQo+K3sKPisJY29uc3Qg dTggKnBheWxvYWQgPSBzZHAtPmJhc2UuZGI7Cj4rCXUzMiByZWc7Cj4rCWludCBpLCBucjsKPisK PisJbnIgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGRwLT5zZHBfcmVnX2JhbmssIFNEUF9SRUdfQkFO S19TSVpFKTsKPisJaWYgKG5yIDwgU0RQX1JFR19CQU5LX1NJWkUpCj4rCQlzZXRfYml0KG5yLCBk cC0+c2RwX3JlZ19iYW5rKTsKPisJZWxzZQo+KwkJcmV0dXJuIC1FQlVTWTsKPisKPisJcmVnID0g RFdfRFBfU0RQX1JFR0lTVEVSX0JBTksgKyBuciAqIDkgKiA0Owo+Kwo+KwkvKiBTRFAgaGVhZGVy ICovCj4rCXJlZ21hcF93cml0ZShkcC0+cmVnbWFwLCByZWcsIGdldF91bmFsaWduZWRfbGUzMigm c2RwLT5iYXNlLnNkcF9oZWFkZXIpKTsKPisKPisJLyogU0RQIGRhdGEgcGF5bG9hZCAqLwo+Kwlm b3IgKGkgPSAxOyBpIDwgOTsgaSsrLCBwYXlsb2FkICs9IDQpCj4rCQlyZWdtYXBfd3JpdGUoZHAt PnJlZ21hcCwgcmVnICsgaSAqIDQsCj4rCQkJICAgICBGSUVMRF9QUkVQKFNEUF9SRUdTLCBnZXRf dW5hbGlnbmVkX2xlMzIocGF5bG9hZCkpKTsKPisKPisJaWYgKHNkcC0+ZmxhZ3MgJiBEV19EUF9T RFBfVkVSVElDQUxfSU5URVJWQUwpCj4rCQlyZWdtYXBfdXBkYXRlX2JpdHMoZHAtPnJlZ21hcCwg RFdfRFBfU0RQX1ZFUlRJQ0FMX0NUUkwsCj4rCQkJCSAgIEVOX1ZFUlRJQ0FMX1NEUCA8PCBuciwK PisJCQkJICAgRU5fVkVSVElDQUxfU0RQIDw8IG5yKTsKPisKPisJaWYgKHNkcC0+ZmxhZ3MgJiBE V19EUF9TRFBfSE9SSVpPTlRBTF9JTlRFUlZBTCkKPisJCXJlZ21hcF91cGRhdGVfYml0cyhkcC0+ cmVnbWFwLCBEV19EUF9TRFBfSE9SSVpPTlRBTF9DVFJMLAo+KwkJCQkgICBFTl9IT1JJWk9OVEFM X1NEUCA8PCBuciwKPisJCQkJICAgRU5fSE9SSVpPTlRBTF9TRFAgPDwgbnIpOwo+Kwo+KwlyZXR1 cm4gMDsKPit9Cj4rCj4rc3RhdGljIGludCBkd19kcF9zZW5kX3ZzY19zZHAoc3RydWN0IGR3X2Rw ICpkcCkKPit7Cj4rCXN0cnVjdCBkd19kcF92aWRlbyAqdmlkZW8gPSAmZHAtPnZpZGVvOwo+Kwlz dHJ1Y3QgZHdfZHBfc2RwIHNkcCA9IHt9Owo+KwlzdHJ1Y3QgZHJtX2RwX3ZzY19zZHAgdnNjID0g e307Cj4rCj4rCXNkcC5mbGFncyA9IERXX0RQX1NEUF9WRVJUSUNBTF9JTlRFUlZBTDsKPisKPisJ dnNjLnNkcF90eXBlID0gRFBfU0RQX1ZTQzsKPisJdnNjLnJldmlzaW9uID0gMHg1Owo+Kwl2c2Mu bGVuZ3RoID0gMHgxMzsKPisJdnNjLmJwYyA9IHZpZGVvLT5icGM7Cj4rCXZzYy5jb250ZW50X3R5 cGUgPSBEUF9DT05URU5UX1RZUEVfTk9UX0RFRklORUQ7Cj4rCj4rCXN3aXRjaCAodmlkZW8tPmNv bG9yX2Zvcm1hdCkgewo+KwljYXNlIERSTV9DT0xPUl9GT1JNQVRfWUNCQ1I0NDQ6Cj4rCQl2c2Mu cGl4ZWxmb3JtYXQgPSBEUF9QSVhFTEZPUk1BVF9ZVVY0NDQ7Cj4rCQlicmVhazsKPisJY2FzZSBE Uk1fQ09MT1JfRk9STUFUX1lDQkNSNDIwOgo+KwkJdnNjLnBpeGVsZm9ybWF0ID0gRFBfUElYRUxG T1JNQVRfWVVWNDIwOwo+KwkJYnJlYWs7Cj4rCWNhc2UgRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JDUjQy MjoKPisJCXZzYy5waXhlbGZvcm1hdCA9IERQX1BJWEVMRk9STUFUX1lVVjQyMjsKPisJCWJyZWFr Owo+KwljYXNlIERSTV9DT0xPUl9GT1JNQVRfUkdCNDQ0Ogo+KwlkZWZhdWx0Ogo+KwkJdnNjLnBp eGVsZm9ybWF0ID0gRFBfUElYRUxGT1JNQVRfUkdCOwo+KwkJYnJlYWs7Cj4rCX0KPisKPisJaWYg KHZpZGVvLT5jb2xvcl9mb3JtYXQgPT0gRFJNX0NPTE9SX0ZPUk1BVF9SR0I0NDQpIHsKPisJCXZz Yy5jb2xvcmltZXRyeSA9IERQX0NPTE9SSU1FVFJZX0RFRkFVTFQ7Cj4rCQl2c2MuZHluYW1pY19y YW5nZSA9IERQX0RZTkFNSUNfUkFOR0VfVkVTQTsKPisJfSBlbHNlIHsKPisJCXZzYy5jb2xvcmlt ZXRyeSA9IERQX0NPTE9SSU1FVFJZX0JUNzA5X1lDQzsKPisJCXZzYy5keW5hbWljX3JhbmdlID0g RFBfRFlOQU1JQ19SQU5HRV9DVEE7Cj4rCX0KPisKPisJZHJtX2RwX3ZzY19zZHBfcGFjaygmdnNj LCAmc2RwLmJhc2UpOwo+Kwo+KwlyZXR1cm4gZHdfZHBfc2VuZF9zZHAoZHAsICZzZHApOwo+K30K PisKPitzdGF0aWMgaW50IGR3X2RwX3ZpZGVvX3NldF9waXhlbF9tb2RlKHN0cnVjdCBkd19kcCAq ZHAsIHU4IHBpeGVsX21vZGUpCj4rewo+Kwlzd2l0Y2ggKHBpeGVsX21vZGUpIHsKPisJY2FzZSBE V19EUF9NUF9TSU5HTEVfUElYRUw6Cj4rCWNhc2UgRFdfRFBfTVBfRFVBTF9QSVhFTDoKPisJY2Fz ZSBEV19EUF9NUF9RVUFEX1BJWEVMOgo+KwkJYnJlYWs7Cj4rCWRlZmF1bHQ6Cj4rCQlyZXR1cm4g LUVJTlZBTDsKPisJfQo+Kwo+KwlyZWdtYXBfdXBkYXRlX2JpdHMoZHAtPnJlZ21hcCwgRFdfRFBf VlNBTVBMRV9DVFJMLCBQSVhFTF9NT0RFX1NFTEVDVCwKPisJCQkgICBGSUVMRF9QUkVQKFBJWEVM X01PREVfU0VMRUNULCBwaXhlbF9tb2RlKSk7Cj4rCj4rCXJldHVybiAwOwo+K30KPisKPitzdGF0 aWMgYm9vbCBkd19kcF92aWRlb19uZWVkX3ZzY19zZHAoc3RydWN0IGR3X2RwICpkcCkKPit7Cj4r CXN0cnVjdCBkd19kcF9saW5rICpsaW5rID0gJmRwLT5saW5rOwo+KwlzdHJ1Y3QgZHdfZHBfdmlk ZW8gKnZpZGVvID0gJmRwLT52aWRlbzsKPisKPisJaWYgKCFsaW5rLT52c2Nfc2RwX3N1cHBvcnRl ZCkKPisJCXJldHVybiBmYWxzZTsKPisKPisJaWYgKHZpZGVvLT5jb2xvcl9mb3JtYXQgPT0gRFJN X0NPTE9SX0ZPUk1BVF9ZQ0JDUjQyMCkKPisJCXJldHVybiB0cnVlOwo+Kwo+KwlyZXR1cm4gZmFs c2U7Cj4rfQo+Kwo+K3N0YXRpYyBpbnQgZHdfZHBfdmlkZW9fc2V0X21zYShzdHJ1Y3QgZHdfZHAg KmRwLCB1OCBjb2xvcl9mb3JtYXQsIHU4IGJwYywKPisJCQkgICAgICAgdTE2IHZzdGFydCwgdTE2 IGhzdGFydCkKPit7Cj4rCXUxNiBtaXNjID0gMDsKPisKPisJaWYgKGR3X2RwX3ZpZGVvX25lZWRf dnNjX3NkcChkcCkpCj4rCQltaXNjIHw9IERQX01TQV9NSVNDX0NPTE9SX1ZTQ19TRFA7Cj4rCj4r CXN3aXRjaCAoY29sb3JfZm9ybWF0KSB7Cj4rCWNhc2UgRFJNX0NPTE9SX0ZPUk1BVF9SR0I0NDQ6 Cj4rCQltaXNjIHw9IERQX01TQV9NSVNDX0NPTE9SX1JHQjsKPisJCWJyZWFrOwo+KwljYXNlIERS TV9DT0xPUl9GT1JNQVRfWUNCQ1I0NDQ6Cj4rCQltaXNjIHw9IERQX01TQV9NSVNDX0NPTE9SX1lD QkNSXzQ0NF9CVDcwOTsKPisJCWJyZWFrOwo+KwljYXNlIERSTV9DT0xPUl9GT1JNQVRfWUNCQ1I0 MjI6Cj4rCQltaXNjIHw9IERQX01TQV9NSVNDX0NPTE9SX1lDQkNSXzQyMl9CVDcwOTsKPisJCWJy ZWFrOwo+KwljYXNlIERSTV9DT0xPUl9GT1JNQVRfWUNCQ1I0MjA6Cj4rCQlicmVhazsKPisJZGVm YXVsdDoKPisJCXJldHVybiAtRUlOVkFMOwo+Kwl9Cj4rCj4rCXN3aXRjaCAoYnBjKSB7Cj4rCWNh c2UgNjoKPisJCW1pc2MgfD0gRFBfTVNBX01JU0NfNl9CUEM7Cj4rCQlicmVhazsKPisJY2FzZSA4 Ogo+KwkJbWlzYyB8PSBEUF9NU0FfTUlTQ184X0JQQzsKPisJCWJyZWFrOwo+KwljYXNlIDEwOgo+ KwkJbWlzYyB8PSBEUF9NU0FfTUlTQ18xMF9CUEM7Cj4rCQlicmVhazsKPisJY2FzZSAxMjoKPisJ CW1pc2MgfD0gRFBfTVNBX01JU0NfMTJfQlBDOwo+KwkJYnJlYWs7Cj4rCWNhc2UgMTY6Cj4rCQlt aXNjIHw9IERQX01TQV9NSVNDXzE2X0JQQzsKPisJCWJyZWFrOwo+KwlkZWZhdWx0Ogo+KwkJcmV0 dXJuIC1FSU5WQUw7Cj4rCX0KPisKPisJcmVnbWFwX3dyaXRlKGRwLT5yZWdtYXAsIERXX0RQX1ZJ REVPX01TQTEsCj4rCQkgICAgIEZJRUxEX1BSRVAoVlNUQVJULCB2c3RhcnQpIHwgRklFTERfUFJF UChIU1RBUlQsIGhzdGFydCkpOwo+KwlyZWdtYXBfd3JpdGUoZHAtPnJlZ21hcCwgRFdfRFBfVklE RU9fTVNBMiwgRklFTERfUFJFUChNSVNDMCwgbWlzYykpOwo+KwlyZWdtYXBfd3JpdGUoZHAtPnJl Z21hcCwgRFdfRFBfVklERU9fTVNBMywgRklFTERfUFJFUChNSVNDMSwgbWlzYyA+PiA4KSk7Cj4r Cj4rCXJldHVybiAwOwo+K30KPisKPitzdGF0aWMgdm9pZCBkd19kcF92aWRlb19kaXNhYmxlKHN0 cnVjdCBkd19kcCAqZHApCj4rewo+KwlyZWdtYXBfdXBkYXRlX2JpdHMoZHAtPnJlZ21hcCwgRFdf RFBfVlNBTVBMRV9DVFJMLCBWSURFT19TVFJFQU1fRU5BQkxFLAo+KwkJCSAgIEZJRUxEX1BSRVAo VklERU9fU1RSRUFNX0VOQUJMRSwgMCkpOwo+K30KPisKPitzdGF0aWMgaW50IGR3X2RwX3ZpZGVv X2VuYWJsZShzdHJ1Y3QgZHdfZHAgKmRwKQo+K3sKPisJc3RydWN0IGR3X2RwX3ZpZGVvICp2aWRl byA9ICZkcC0+dmlkZW87Cj4rCXN0cnVjdCBkd19kcF9saW5rICpsaW5rID0gJmRwLT5saW5rOwo+ KwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZ2aWRlby0+bW9kZTsKPisJdTggY29s b3JfZm9ybWF0ID0gdmlkZW8tPmNvbG9yX2Zvcm1hdDsKPisJdTggYnBjID0gdmlkZW8tPmJwYzsK PisJdTggcGl4ZWxfbW9kZSA9IHZpZGVvLT5waXhlbF9tb2RlOwo+Kwl1OCBicHAgPSB2aWRlby0+ YnBwLCBpbml0X3RocmVzaG9sZCwgdmljOwo+Kwl1MzIgaGFjdGl2ZSwgaGJsYW5rLCBoX3N5bmNf d2lkdGgsIGhfZnJvbnRfcG9yY2g7Cj4rCXUzMiB2YWN0aXZlLCB2YmxhbmssIHZfc3luY193aWR0 aCwgdl9mcm9udF9wb3JjaDsKPisJdTMyIHZzdGFydCA9IG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZz eW5jX3N0YXJ0Owo+Kwl1MzIgaHN0YXJ0ID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfc3Rh cnQ7Cj4rCXUzMiBwZWFrX3N0cmVhbV9iYW5kd2lkdGgsIGxpbmtfYmFuZHdpZHRoOwo+Kwl1MzIg YXZlcmFnZV9ieXRlc19wZXJfdHUsIGF2ZXJhZ2VfYnl0ZXNfcGVyX3R1X2ZyYWM7Cj4rCXUzMiB0 cywgaGJsYW5rX2ludGVydmFsOwo+Kwl1MzIgdmFsdWU7Cj4rCWludCByZXQ7Cj4rCj4rCXJldCA9 IGR3X2RwX3ZpZGVvX3NldF9waXhlbF9tb2RlKGRwLCBwaXhlbF9tb2RlKTsKPisJaWYgKHJldCkK PisJCXJldHVybiByZXQ7Cj4rCj4rCXJldCA9IGR3X2RwX3ZpZGVvX3NldF9tc2EoZHAsIGNvbG9y X2Zvcm1hdCwgYnBjLCB2c3RhcnQsIGhzdGFydCk7Cj4rCWlmIChyZXQpCj4rCQlyZXR1cm4gcmV0 Owo+Kwo+KwlyZWdtYXBfdXBkYXRlX2JpdHMoZHAtPnJlZ21hcCwgRFdfRFBfVlNBTVBMRV9DVFJM LCBWSURFT19NQVBQSU5HLAo+KwkJCSAgIEZJRUxEX1BSRVAoVklERU9fTUFQUElORywgdmlkZW8t PnZpZGVvX21hcHBpbmcpKTsKPisKPisJLyogQ29uZmlndXJlIERXX0RQX1ZJTlBVVF9QT0xBUklU WV9DVFJMIHJlZ2lzdGVyICovCj4rCXZhbHVlID0gMDsKPisJaWYgKG1vZGUtPmZsYWdzICYgRFJN X01PREVfRkxBR19QSFNZTkMpCj4rCQl2YWx1ZSB8PSBGSUVMRF9QUkVQKEhTWU5DX0lOX1BPTEFS SVRZLCAxKTsKPisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMpCj4rCQl2 YWx1ZSB8PSBGSUVMRF9QUkVQKFZTWU5DX0lOX1BPTEFSSVRZLCAxKTsKPisJcmVnbWFwX3dyaXRl KGRwLT5yZWdtYXAsIERXX0RQX1ZJTlBVVF9QT0xBUklUWV9DVFJMLCB2YWx1ZSk7Cj4rCj4rCS8q IENvbmZpZ3VyZSBEV19EUF9WSURFT19DT05GSUcxIHJlZ2lzdGVyICovCj4rCWhhY3RpdmUgPSBt b2RlLT5oZGlzcGxheTsKPisJaGJsYW5rID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aGRpc3BsYXk7 Cj4rCXZhbHVlID0gRklFTERfUFJFUChIQUNUSVZFLCBoYWN0aXZlKSB8IEZJRUxEX1BSRVAoSEJM QU5LLCBoYmxhbmspOwo+KwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFD RSkKPisJCXZhbHVlIHw9IEZJRUxEX1BSRVAoSV9QLCAxKTsKPisJdmljID0gZHJtX21hdGNoX2Nl YV9tb2RlKG1vZGUpOwo+KwlpZiAodmljID09IDUgfHwgdmljID09IDYgfHwgdmljID09IDcgfHwK PisJICAgIHZpYyA9PSAxMCB8fCB2aWMgPT0gMTEgfHwgdmljID09IDIwIHx8Cj4rCSAgICB2aWMg PT0gMjEgfHwgdmljID09IDIyIHx8IHZpYyA9PSAzOSB8fAo+KwkgICAgdmljID09IDI1IHx8IHZp YyA9PSAyNiB8fCB2aWMgPT0gNDAgfHwKPisJICAgIHZpYyA9PSA0NCB8fCB2aWMgPT0gNDUgfHwg dmljID09IDQ2IHx8Cj4rCSAgICB2aWMgPT0gNTAgfHwgdmljID09IDUxIHx8IHZpYyA9PSA1NCB8 fAo+KwkgICAgdmljID09IDU1IHx8IHZpYyA9PSA1OCB8fCB2aWMgID09IDU5KQo+KwkJdmFsdWUg fD0gUl9WX0JMQU5LX0lOX09TQzsKPisJcmVnbWFwX3dyaXRlKGRwLT5yZWdtYXAsIERXX0RQX1ZJ REVPX0NPTkZJRzEsIHZhbHVlKTsKPisKPisJLyogQ29uZmlndXJlIERXX0RQX1ZJREVPX0NPTkZJ RzIgcmVnaXN0ZXIgKi8KPisJdmJsYW5rID0gbW9kZS0+dnRvdGFsIC0gbW9kZS0+dmRpc3BsYXk7 Cj4rCXZhY3RpdmUgPSBtb2RlLT52ZGlzcGxheTsKPisJcmVnbWFwX3dyaXRlKGRwLT5yZWdtYXAs IERXX0RQX1ZJREVPX0NPTkZJRzIsCj4rCQkgICAgIEZJRUxEX1BSRVAoVkJMQU5LLCB2Ymxhbmsp IHwgRklFTERfUFJFUChWQUNUSVZFLCB2YWN0aXZlKSk7Cj4rCj4rCS8qIENvbmZpZ3VyZSBEV19E UF9WSURFT19DT05GSUczIHJlZ2lzdGVyICovCj4rCWhfc3luY193aWR0aCA9IG1vZGUtPmhzeW5j X2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0Owo+KwloX2Zyb250X3BvcmNoID0gbW9kZS0+aHN5bmNf c3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKPisJcmVnbWFwX3dyaXRlKGRwLT5yZWdtYXAsIERXX0RQ X1ZJREVPX0NPTkZJRzMsCj4rCQkgICAgIEZJRUxEX1BSRVAoSF9TWU5DX1dJRFRILCBoX3N5bmNf d2lkdGgpIHwKPisJCSAgICAgRklFTERfUFJFUChIX0ZST05UX1BPUkNILCBoX2Zyb250X3BvcmNo KSk7Cj4rCj4rCS8qIENvbmZpZ3VyZSBEV19EUF9WSURFT19DT05GSUc0IHJlZ2lzdGVyICovCj4r CXZfc3luY193aWR0aCA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0Owo+Kwl2 X2Zyb250X3BvcmNoID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKPisJcmVn bWFwX3dyaXRlKGRwLT5yZWdtYXAsIERXX0RQX1ZJREVPX0NPTkZJRzQsCj4rCQkgICAgIEZJRUxE X1BSRVAoVl9TWU5DX1dJRFRILCB2X3N5bmNfd2lkdGgpIHwKPisJCSAgICAgRklFTERfUFJFUChW X0ZST05UX1BPUkNILCB2X2Zyb250X3BvcmNoKSk7Cj4rCj4rCS8qIENvbmZpZ3VyZSBEV19EUF9W SURFT19DT05GSUc1IHJlZ2lzdGVyICovCj4rCXBlYWtfc3RyZWFtX2JhbmR3aWR0aCA9IG1vZGUt PmNsb2NrICogYnBwIC8gODsKPisJbGlua19iYW5kd2lkdGggPSAobGluay0+cmF0ZSAvIDEwMDAp ICogbGluay0+bGFuZXM7Cj4rCXRzID0gcGVha19zdHJlYW1fYmFuZHdpZHRoICogNjQgLyBsaW5r X2JhbmR3aWR0aDsKPisJYXZlcmFnZV9ieXRlc19wZXJfdHUgPSB0cyAvIDEwMDA7Cj4rCWF2ZXJh Z2VfYnl0ZXNfcGVyX3R1X2ZyYWMgPSB0cyAvIDEwMCAtIGF2ZXJhZ2VfYnl0ZXNfcGVyX3R1ICog MTA7Cj4rCWlmIChwaXhlbF9tb2RlID09IERXX0RQX01QX1NJTkdMRV9QSVhFTCkgewo+KwkJaWYg KGF2ZXJhZ2VfYnl0ZXNfcGVyX3R1IDwgNikKPisJCQlpbml0X3RocmVzaG9sZCA9IDMyOwo+KwkJ ZWxzZSBpZiAoaGJsYW5rIDw9IDgwICYmIGNvbG9yX2Zvcm1hdCAhPSBEUk1fQ09MT1JfRk9STUFU X1lDQkNSNDIwKQo+KwkJCWluaXRfdGhyZXNob2xkID0gMTI7Cj4rCQllbHNlIGlmIChoYmxhbmsg PD0gNDAgJiYgY29sb3JfZm9ybWF0ID09IERSTV9DT0xPUl9GT1JNQVRfWUNCQ1I0MjApCj4rCQkJ aW5pdF90aHJlc2hvbGQgPSAzOwo+KwkJZWxzZQo+KwkJCWluaXRfdGhyZXNob2xkID0gMTY7Cj4r CX0gZWxzZSB7Cj4rCQl1MzIgdDEgPSAwLCB0MiA9IDAsIHQzID0gMDsKPisKPisJCXN3aXRjaCAo YnBjKSB7Cj4rCQljYXNlIDY6Cj4rCQkJdDEgPSAoNCAqIDEwMDAgLyA5KSAqIGxpbmstPmxhbmVz Owo+KwkJCWJyZWFrOwo+KwkJY2FzZSA4Ogo+KwkJCWlmIChjb2xvcl9mb3JtYXQgPT0gRFJNX0NP TE9SX0ZPUk1BVF9ZQ0JDUjQyMikgewo+KwkJCQl0MSA9ICgxMDAwIC8gMikgKiBsaW5rLT5sYW5l czsKPisJCQl9IGVsc2Ugewo+KwkJCQlpZiAocGl4ZWxfbW9kZSA9PSBEV19EUF9NUF9EVUFMX1BJ WEVMKQo+KwkJCQkJdDEgPSAoMTAwMCAvIDMpICogbGluay0+bGFuZXM7Cj4rCQkJCWVsc2UKPisJ CQkJCXQxID0gKDMwMDAgLyAxNikgKiBsaW5rLT5sYW5lczsKPisJCQl9Cj4rCQkJYnJlYWs7Cj4r CQljYXNlIDEwOgo+KwkJCWlmIChjb2xvcl9mb3JtYXQgPT0gRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JD UjQyMikKPisJCQkJdDEgPSAoMjAwMCAvIDUpICogbGluay0+bGFuZXM7Cj4rCQkJZWxzZQo+KwkJ CQl0MSA9ICg0MDAwIC8gMTUpICogbGluay0+bGFuZXM7Cj4rCQkJYnJlYWs7Cj4rCQljYXNlIDEy Ogo+KwkJCWlmIChjb2xvcl9mb3JtYXQgPT0gRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JDUjQyMikgewo+ KwkJCQlpZiAocGl4ZWxfbW9kZSA9PSBEV19EUF9NUF9EVUFMX1BJWEVMKQo+KwkJCQkJdDEgPSAo MTAwMCAvIDYpICogbGluay0+bGFuZXM7Cj4rCQkJCWVsc2UKPisJCQkJCXQxID0gKDEwMDAgLyAz KSAqIGxpbmstPmxhbmVzOwo+KwkJCX0gZWxzZSB7Cj4rCQkJCXQxID0gKDIwMDAgLyA5KSAqIGxp bmstPmxhbmVzOwo+KwkJCX0KPisJCQlicmVhazsKPisJCWNhc2UgMTY6Cj4rCQkJaWYgKGNvbG9y X2Zvcm1hdCAhPSBEUk1fQ09MT1JfRk9STUFUX1lDQkNSNDIyICYmCj4rCQkJICAgIHBpeGVsX21v ZGUgPT0gRFdfRFBfTVBfRFVBTF9QSVhFTCkKPisJCQkJdDEgPSAoMTAwMCAvIDYpICogbGluay0+ bGFuZXM7Cj4rCQkJZWxzZQo+KwkJCQl0MSA9ICgxMDAwIC8gNCkgKiBsaW5rLT5sYW5lczsKPisJ CQlicmVhazsKPisJCWRlZmF1bHQ6Cj4rCQkJcmV0dXJuIC1FSU5WQUw7Cj4rCQl9Cj4rCj4rCQlp ZiAoY29sb3JfZm9ybWF0ID09IERSTV9DT0xPUl9GT1JNQVRfWUNCQ1I0MjApCj4rCQkJdDIgPSAo bGluay0+cmF0ZSAvIDQpICogMTAwMCAvIChtb2RlLT5jbG9jayAvIDIpOwo+KwkJZWxzZQo+KwkJ CXQyID0gKGxpbmstPnJhdGUgLyA0KSAqIDEwMDAgLyBtb2RlLT5jbG9jazsKPisKPisJCWlmIChh dmVyYWdlX2J5dGVzX3Blcl90dV9mcmFjKQo+KwkJCXQzID0gYXZlcmFnZV9ieXRlc19wZXJfdHUg KyAxOwo+KwkJZWxzZQo+KwkJCXQzID0gYXZlcmFnZV9ieXRlc19wZXJfdHU7Cj4rCQlpbml0X3Ro cmVzaG9sZCA9IHQxICogdDIgKiB0MyAvICgxMDAwICogMTAwMCk7Cj4rCQlpZiAoaW5pdF90aHJl c2hvbGQgPD0gMTYgfHwgYXZlcmFnZV9ieXRlc19wZXJfdHUgPCAxMCkKPisJCQlpbml0X3RocmVz aG9sZCA9IDQwOwo+Kwl9Cj4rCj4rCXJlZ21hcF93cml0ZShkcC0+cmVnbWFwLCBEV19EUF9WSURF T19DT05GSUc1LAo+KwkJICAgICBGSUVMRF9QUkVQKElOSVRfVEhSRVNIT0xEX0hJLCBpbml0X3Ro cmVzaG9sZCA+PiA2KSB8Cj4rCQkgICAgIEZJRUxEX1BSRVAoQVZFUkFHRV9CWVRFU19QRVJfVFVf RlJBQywgYXZlcmFnZV9ieXRlc19wZXJfdHVfZnJhYykgfAo+KwkJICAgICBGSUVMRF9QUkVQKElO SVRfVEhSRVNIT0xELCBpbml0X3RocmVzaG9sZCkgfAo+KwkJICAgICBGSUVMRF9QUkVQKEFWRVJB R0VfQllURVNfUEVSX1RVLCBhdmVyYWdlX2J5dGVzX3Blcl90dSkpOwo+Kwo+KwkvKiBDb25maWd1 cmUgRFdfRFBfVklERU9fSEJMQU5LX0lOVEVSVkFMIHJlZ2lzdGVyICovCj4rCWhibGFua19pbnRl cnZhbCA9IGhibGFuayAqIChsaW5rLT5yYXRlIC8gNCkgLyBtb2RlLT5jbG9jazsKPisJcmVnbWFw X3dyaXRlKGRwLT5yZWdtYXAsIERXX0RQX1ZJREVPX0hCTEFOS19JTlRFUlZBTCwKPisJCSAgICAg RklFTERfUFJFUChIQkxBTktfSU5URVJWQUxfRU4sIDEpIHwKPisJCSAgICAgRklFTERfUFJFUChI QkxBTktfSU5URVJWQUwsIGhibGFua19pbnRlcnZhbCkpOwo+Kwo+KwkvKiBWaWRlbyBzdHJlYW0g ZW5hYmxlICovCj4rCXJlZ21hcF91cGRhdGVfYml0cyhkcC0+cmVnbWFwLCBEV19EUF9WU0FNUExF X0NUUkwsIFZJREVPX1NUUkVBTV9FTkFCTEUsCj4rCQkJICAgRklFTERfUFJFUChWSURFT19TVFJF QU1fRU5BQkxFLCAxKSk7Cj4rCj4rCWlmIChkd19kcF92aWRlb19uZWVkX3ZzY19zZHAoZHApKQo+ KwkJZHdfZHBfc2VuZF92c2Nfc2RwKGRwKTsKPisKPisJcmV0dXJuIDA7Cj4rfQo+Kwo+K3N0YXRp YyB2b2lkIGR3X2RwX2hwZF9pbml0KHN0cnVjdCBkd19kcCAqZHApCj4rewo+KwkvKiBFbmFibGUg YWxsIEhQRCBpbnRlcnJ1cHRzICovCj4rCXJlZ21hcF91cGRhdGVfYml0cyhkcC0+cmVnbWFwLCBE V19EUF9IUERfSU5URVJSVVBUX0VOQUJMRSwKPisJCQkgICBIUERfVU5QTFVHX0VOIHwgSFBEX1BM VUdfRU4gfCBIUERfSVJRX0VOLAo+KwkJCSAgIEZJRUxEX1BSRVAoSFBEX1VOUExVR19FTiwgMSkg fAo+KwkJCSAgIEZJRUxEX1BSRVAoSFBEX1BMVUdfRU4sIDEpIHwKPisJCQkgICBGSUVMRF9QUkVQ KEhQRF9JUlFfRU4sIDEpKTsKPisKPisJLyogRW5hYmxlIGFsbCB0b3AtbGV2ZWwgaW50ZXJydXB0 cyAqLwo+KwlyZWdtYXBfdXBkYXRlX2JpdHMoZHAtPnJlZ21hcCwgRFdfRFBfR0VORVJBTF9JTlRF UlJVUFRfRU5BQkxFLAo+KwkJCSAgIEhQRF9FVkVOVF9FTiwgRklFTERfUFJFUChIUERfRVZFTlRf RU4sIDEpKTsKPit9Cj4rCj4rc3RhdGljIHZvaWQgZHdfZHBfYXV4X2luaXQoc3RydWN0IGR3X2Rw ICpkcCkKPit7Cj4rCXJlZ21hcF91cGRhdGVfYml0cyhkcC0+cmVnbWFwLCBEV19EUF9HRU5FUkFM X0lOVEVSUlVQVF9FTkFCTEUsCj4rCQkJICAgQVVYX1JFUExZX0VWRU5UX0VOLCBGSUVMRF9QUkVQ KEFVWF9SRVBMWV9FVkVOVF9FTiwgMSkpOwo+K30KPisKPitzdGF0aWMgdm9pZCBkd19kcF9pbml0 X2h3KHN0cnVjdCBkd19kcCAqZHApCj4rewo+KwlyZWdtYXBfdXBkYXRlX2JpdHMoZHAtPnJlZ21h cCwgRFdfRFBfQ0NUTCwgREVGQVVMVF9GQVNUX0xJTktfVFJBSU5fRU4sCj4rCQkJICAgRklFTERf UFJFUChERUZBVUxUX0ZBU1RfTElOS19UUkFJTl9FTiwgMCkpOwo+Kwo+Kwlkd19kcF9ocGRfaW5p dChkcCk7Cj4rCWR3X2RwX2F1eF9pbml0KGRwKTsKPit9Cj4rCj4rc3RhdGljIGludCBkd19kcF9h dXhfd3JpdGVfZGF0YShzdHJ1Y3QgZHdfZHAgKmRwLCBjb25zdCB1OCAqYnVmZmVyLCBzaXplX3Qg c2l6ZSkKPit7Cj4rCXNpemVfdCBpLCBqOwo+Kwo+Kwlmb3IgKGkgPSAwOyBpIDwgRElWX1JPVU5E X1VQKHNpemUsIDQpOyBpKyspIHsKPisJCXNpemVfdCBudW0gPSBtaW5fdChzaXplX3QsIHNpemUg LSBpICogNCwgNCk7Cj4rCQl1MzIgdmFsdWUgPSAwOwo+Kwo+KwkJZm9yIChqID0gMDsgaiA8IG51 bTsgaisrKQo+KwkJCXZhbHVlIHw9IGJ1ZmZlcltpICogNCArIGpdIDw8IChqICogOCk7Cj4rCj4r CQlyZWdtYXBfd3JpdGUoZHAtPnJlZ21hcCwgRFdfRFBfQVVYX0RBVEEwICsgaSAqIDQsIHZhbHVl KTsKPisJfQo+Kwo+KwlyZXR1cm4gc2l6ZTsKPit9Cj4rCj4rc3RhdGljIGludCBkd19kcF9hdXhf cmVhZF9kYXRhKHN0cnVjdCBkd19kcCAqZHAsIHU4ICpidWZmZXIsIHNpemVfdCBzaXplKQo+K3sK PisJc2l6ZV90IGksIGo7Cj4rCj4rCWZvciAoaSA9IDA7IGkgPCBESVZfUk9VTkRfVVAoc2l6ZSwg NCk7IGkrKykgewo+KwkJc2l6ZV90IG51bSA9IG1pbl90KHNpemVfdCwgc2l6ZSAtIGkgKiA0LCA0 KTsKPisJCXUzMiB2YWx1ZTsKPisKPisJCXJlZ21hcF9yZWFkKGRwLT5yZWdtYXAsIERXX0RQX0FV WF9EQVRBMCArIGkgKiA0LCAmdmFsdWUpOwo+Kwo+KwkJZm9yIChqID0gMDsgaiA8IG51bTsgaisr KQo+KwkJCWJ1ZmZlcltpICogNCArIGpdID0gdmFsdWUgPj4gKGogKiA4KTsKPisJfQo+Kwo+Kwly ZXR1cm4gc2l6ZTsKPit9Cj4rCj4rc3RhdGljIHNzaXplX3QgZHdfZHBfYXV4X3RyYW5zZmVyKHN0 cnVjdCBkcm1fZHBfYXV4ICphdXgsCj4rCQkJCSAgc3RydWN0IGRybV9kcF9hdXhfbXNnICptc2cp Cj4rewo+KwlzdHJ1Y3QgZHdfZHAgKmRwID0gY29udGFpbmVyX29mKGF1eCwgc3RydWN0IGR3X2Rw LCBhdXgpOwo+Kwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDEwKTsK PisJdTMyIHN0YXR1cywgdmFsdWU7Cj4rCXNzaXplX3QgcmV0ID0gMDsKPisKPisJaWYgKFdBUk5f T04obXNnLT5zaXplID4gMTYpKQo+KwkJcmV0dXJuIC1FMkJJRzsKPisKPisJc3dpdGNoIChtc2ct PnJlcXVlc3QgJiB+RFBfQVVYX0kyQ19NT1QpIHsKPisJY2FzZSBEUF9BVVhfTkFUSVZFX1dSSVRF Ogo+KwljYXNlIERQX0FVWF9JMkNfV1JJVEU6Cj4rCWNhc2UgRFBfQVVYX0kyQ19XUklURV9TVEFU VVNfVVBEQVRFOgo+KwkJcmV0ID0gZHdfZHBfYXV4X3dyaXRlX2RhdGEoZHAsIG1zZy0+YnVmZmVy LCBtc2ctPnNpemUpOwo+KwkJaWYgKHJldCA8IDApCj4rCQkJcmV0dXJuIHJldDsKPisJCWJyZWFr Owo+KwljYXNlIERQX0FVWF9OQVRJVkVfUkVBRDoKPisJY2FzZSBEUF9BVVhfSTJDX1JFQUQ6Cj4r CQlicmVhazsKPisJZGVmYXVsdDoKPisJCXJldHVybiAtRUlOVkFMOwo+Kwl9Cj4rCj4rCWlmICht c2ctPnNpemUgPiAwKQo+KwkJdmFsdWUgPSBGSUVMRF9QUkVQKEFVWF9MRU5fUkVRLCBtc2ctPnNp emUgLSAxKTsKPisJZWxzZQo+KwkJdmFsdWUgPSBGSUVMRF9QUkVQKEkyQ19BRERSX09OTFksIDEp Owo+Kwl2YWx1ZSB8PSBGSUVMRF9QUkVQKEFVWF9DTURfVFlQRSwgbXNnLT5yZXF1ZXN0KTsKPisJ dmFsdWUgfD0gRklFTERfUFJFUChBVVhfQUREUiwgbXNnLT5hZGRyZXNzKTsKPisJcmVnbWFwX3dy aXRlKGRwLT5yZWdtYXAsIERXX0RQX0FVWF9DTUQsIHZhbHVlKTsKPisKPisJc3RhdHVzID0gd2Fp dF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkcC0+Y29tcGxldGUsIHRpbWVvdXQpOwo+KwlpZiAo IXN0YXR1cykgewo+KwkJZGV2X2VycihkcC0+ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBBVVgg cmVwbHlcbiIpOwo+KwkJcmV0dXJuIC1FVElNRURPVVQ7Cj4rCX0KPisKPisJcmVnbWFwX3JlYWQo ZHAtPnJlZ21hcCwgRFdfRFBfQVVYX1NUQVRVUywgJnZhbHVlKTsKPisJaWYgKHZhbHVlICYgQVVY X1RJTUVPVVQpCj4rCQlyZXR1cm4gLUVUSU1FRE9VVDsKPisKPisJbXNnLT5yZXBseSA9IEZJRUxE X0dFVChBVVhfU1RBVFVTLCB2YWx1ZSk7Cj4rCj4rCWlmIChtc2ctPnNpemUgPiAwICYmIG1zZy0+ cmVwbHkgPT0gRFBfQVVYX05BVElWRV9SRVBMWV9BQ0spIHsKPisJCWlmIChtc2ctPnJlcXVlc3Qg JiBEUF9BVVhfSTJDX1JFQUQpIHsKPisJCQlzaXplX3QgY291bnQgPSBGSUVMRF9HRVQoQVVYX0JZ VEVTX1JFQUQsIHZhbHVlKSAtIDE7Cj4rCj4rCQkJaWYgKGNvdW50ICE9IG1zZy0+c2l6ZSkKPisJ CQkJcmV0dXJuIC1FQlVTWTsKPisKPisJCQlyZXQgPSBkd19kcF9hdXhfcmVhZF9kYXRhKGRwLCBt c2ctPmJ1ZmZlciwgY291bnQpOwo+KwkJCWlmIChyZXQgPCAwKQo+KwkJCQlyZXR1cm4gcmV0Owo+ KwkJfQo+Kwl9Cj4rCj4rCXJldHVybiByZXQ7Cj4rfQo+Kwo+Ky8qCj4rICogTGltaXRzIGZvciB0 aGUgdmlkZW8gdGltaW5nIGZvciBEUDoKPisgKiAxLiB0aGUgaGZwIHNob3VsZCBiZSAyIHBpeGVs cyBhbGlnbmVkOwo+KyAqIDIuIHRoZSBtaW5pbXVtIGhzeW5jIHNob3VsZCBiZSA5IHBpeGVsOwo+ KyAqIDMuIHRoZSBtaW5pbXVtIGhicCBzaG91bGQgYmUgMTYgcGl4ZWw7Cj4rICovCj4rc3RhdGlj IGludCBkd19kcF9icmlkZ2VfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Us Cj4rCQkJCSAgICAgc3RydWN0IGRybV9icmlkZ2Vfc3RhdGUgKmJyaWRnZV9zdGF0ZSwKPisJCQkJ ICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4rCQkJCSAgICAgc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCj4rewo+KwlzdHJ1Y3QgZHdfZHAgKmRw ID0gYnJpZGdlX3RvX2RwKGJyaWRnZSk7Cj4rCXN0cnVjdCBkd19kcF92aWRlbyAqdmlkZW8gPSAm ZHAtPnZpZGVvOwo+KwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbSA9ICZ2aWRlby0+bW9kZTsK PisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPSAmY3J0Y19zdGF0ZS0+ YWRqdXN0ZWRfbW9kZTsKPisJY29uc3Qgc3RydWN0IGR3X2RwX291dHB1dF9mb3JtYXQgKmZtdDsK PisJaW50IG1pbl9oYnAgPSAxNjsKPisJaW50IG1pbl9oc3luYyA9IDk7Cj4rCj4rCWZtdCA9IGR3 X2RwX2dldF9vdXRwdXRfZm9ybWF0KGJyaWRnZV9zdGF0ZS0+b3V0cHV0X2J1c19jZmcuZm9ybWF0 KTsKPisJaWYgKCFmbXQpCj4rCQlyZXR1cm4gLUVJTlZBTDsKPisKPisJdmlkZW8tPnZpZGVvX21h cHBpbmcgPSBmbXQtPnZpZGVvX21hcHBpbmc7Cj4rCXZpZGVvLT5jb2xvcl9mb3JtYXQgPSBmbXQt PmNvbG9yX2Zvcm1hdDsKPisJdmlkZW8tPmJwYyA9IGZtdC0+YnBjOwo+Kwl2aWRlby0+YnBwID0g Zm10LT5icHA7Cj4rCj4rCWlmICgoYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQgLSBhZGp1c3Rl ZF9tb2RlLT5oZGlzcGxheSkgJiAweDEpIHsKPisJCWFkanVzdGVkX21vZGUtPmhzeW5jX3N0YXJ0 ICs9IDE7Cj4rCQlkZXZfd2FybihkcC0+ZGV2LCAiaGZwIGlzIG5vdCAyIHBpeGVlbCBhbGlnbmVk LCBmaXh1cCB0byBhbGlnbmVkIGhmcFxuIik7Cj4rCX0KPisJaWYgKGFkanVzdGVkX21vZGUtPmhz eW5jX2VuZCAtIGFkanVzdGVkX21vZGUtPmhzeW5jX3N0YXJ0IDwgbWluX2hzeW5jKSB7Cj4rCQlh ZGp1c3RlZF9tb2RlLT5oc3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCArIG1p bl9oc3luYzsKPisJCWRldl93YXJuKGRwLT5kZXYsICJoc3luYyBpcyB0b28gbmFycm93LCBmaXh1 cCB0byBtaW4gaHN5bmM6JWRcbiIsIG1pbl9oc3luYyk7Cj4rCX0KPisJaWYgKGFkanVzdGVkX21v ZGUtPmh0b3RhbCAtIGFkanVzdGVkX21vZGUtPmhzeW5jX2VuZCA8IG1pbl9oYnApIHsKPisJCWFk anVzdGVkX21vZGUtPmh0b3RhbCA9IGFkanVzdGVkX21vZGUtPmhzeW5jX2VuZCArIG1pbl9oYnA7 Cj4rCQlkZXZfd2FybihkcC0+ZGV2LCAiaGJwIGlzIHRvbyBuYXJyb3csIGZpeHVwIHRvIG1pbiBo YnA6JWRcbiIsIG1pbl9oYnApOwo+Kwl9Cj4rCj4rCWRybV9tb2RlX2NvcHkobSwgYWRqdXN0ZWRf bW9kZSk7Cj4rCj4rCXJldHVybiAwOwo+K30KPisKPitzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0 dXMgZHdfZHBfYnJpZGdlX21vZGVfdmFsaWQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPisJ CQkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmluZm8sCj4rCQkJCQkJICAg IGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+K3sKPisJc3RydWN0IGR3X2Rw ICpkcCA9IGJyaWRnZV90b19kcChicmlkZ2UpOwo+KwlzdHJ1Y3QgZHdfZHBfbGluayAqbGluayA9 ICZkcC0+bGluazsKPisJdTMyIG1pbl9icHA7Cj4rCj4rCWlmIChpbmZvLT5jb2xvcl9mb3JtYXRz ICYgRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JDUjQyMCAmJgo+KwkgICAgbGluay0+dnNjX3NkcF9zdXBw b3J0ZWQgJiYKPisJICAgIChkcm1fbW9kZV9pc180MjBfb25seShpbmZvLCBtb2RlKSB8fCBkcm1f bW9kZV9pc180MjBfYWxzbyhpbmZvLCBtb2RlKSkpCj4rCQltaW5fYnBwID0gMTI7Cj4rCWVsc2Ug aWYgKGluZm8tPmNvbG9yX2Zvcm1hdHMgJiBEUk1fQ09MT1JfRk9STUFUX1lDQkNSNDIyKQo+KwkJ bWluX2JwcCA9IDE2Owo+KwllbHNlIGlmIChpbmZvLT5jb2xvcl9mb3JtYXRzICYgRFJNX0NPTE9S X0ZPUk1BVF9SR0I0NDQpCj4rCQltaW5fYnBwID0gMTg7Cj4rCWVsc2UKPisJCW1pbl9icHAgPSAy NDsKPisKPisJaWYgKCFsaW5rLT52c2Nfc2RwX3N1cHBvcnRlZCAmJgo+KwkgICAgZHJtX21vZGVf aXNfNDIwX29ubHkoaW5mbywgbW9kZSkpCj4rCQlyZXR1cm4gTU9ERV9OT180MjA7Cj4rCj4rCWlm ICghZHdfZHBfYmFuZHdpZHRoX29rKGRwLCBtb2RlLCBtaW5fYnBwLCBsaW5rLT5sYW5lcywgbGlu ay0+cmF0ZSkpCj4rCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOwo+Kwo+KwlyZXR1cm4gTU9ERV9P SzsKPit9Cj4rCj4rc3RhdGljIGJvb2wgZHdfZHBfbmVlZHNfbGlua19yZXRyYWluKHN0cnVjdCBk d19kcCAqZHApCj4rewo+KwlzdHJ1Y3QgZHdfZHBfbGluayAqbGluayA9ICZkcC0+bGluazsKPisJ dTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07Cj4rCj4rCWlmICghZHdfZHBfbGlu a190cmFpbl92YWxpZCgmbGluay0+dHJhaW4pKQo+KwkJcmV0dXJuIGZhbHNlOwo+Kwo+KwlpZiAo ZHJtX2RwX2RwY2RfcmVhZF9saW5rX3N0YXR1cygmZHAtPmF1eCwgbGlua19zdGF0dXMpIDwgMCkK PisJCXJldHVybiBmYWxzZTsKPisKPisJLyogUmV0cmFpbiBpZiBDaGFubmVsIEVRIG9yIENSIG5v dCBvayAqLwo+KwlyZXR1cm4gIWRybV9kcF9jaGFubmVsX2VxX29rKGxpbmtfc3RhdHVzLCBkcC0+ bGluay5sYW5lcyk7Cj4rfQo+Kwo+K3N0YXRpYyB2b2lkIGR3X2RwX2xpbmtfZGlzYWJsZShzdHJ1 Y3QgZHdfZHAgKmRwKQo+K3sKPisJc3RydWN0IGR3X2RwX2xpbmsgKmxpbmsgPSAmZHAtPmxpbms7 Cj4rCj4rCWlmIChkd19kcF9ocGRfZGV0ZWN0KGRwKSkKPisJCWRybV9kcF9saW5rX3Bvd2VyX2Rv d24oJmRwLT5hdXgsIGRwLT5saW5rLnJldmlzaW9uKTsKPisKPisJZHdfZHBfcGh5X3htaXRfZW5h YmxlKGRwLCAwKTsKPisKPisJcGh5X3Bvd2VyX29mZihkcC0+cGh5KTsKPisKPisJbGluay0+dHJh aW4uY2xvY2tfcmVjb3ZlcmVkID0gZmFsc2U7Cj4rCWxpbmstPnRyYWluLmNoYW5uZWxfZXF1YWxp emVkID0gZmFsc2U7Cj4rfQo+Kwo+K3N0YXRpYyBpbnQgZHdfZHBfbGlua19lbmFibGUoc3RydWN0 IGR3X2RwICpkcCkKPit7Cj4rCWludCByZXQ7Cj4rCj4rCXJldCA9IHBoeV9wb3dlcl9vbihkcC0+ cGh5KTsKPisJaWYgKHJldCkKPisJCXJldHVybiByZXQ7Cj4rCj4rCXJldCA9IGRybV9kcF9saW5r X3Bvd2VyX3VwKCZkcC0+YXV4LCBkcC0+bGluay5yZXZpc2lvbik7Cj4rCWlmIChyZXQgPCAwKQo+ KwkJcmV0dXJuIHJldDsKPisKPisJcmV0ID0gZHdfZHBfbGlua190cmFpbihkcCk7Cj4rCj4rCXJl dHVybiByZXQ7Cj4rfQo+Kwo+K3N0YXRpYyB2b2lkIGR3X2RwX2JyaWRnZV9hdG9taWNfZW5hYmxl KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4rCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUpCj4rewo+KwlzdHJ1Y3QgZHdfZHAgKmRwID0gYnJpZGdlX3RvX2RwKGJy aWRnZSk7Cj4rCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4rCXN0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlOwo+KwlpbnQgcmV0Owo+Kwo+Kwljb25uZWN0b3Ig PSBkcm1fYXRvbWljX2dldF9uZXdfY29ubmVjdG9yX2Zvcl9lbmNvZGVyKHN0YXRlLCBicmlkZ2Ut PmVuY29kZXIpOwo+KwlpZiAoIWNvbm5lY3Rvcikgewo+KwkJZGV2X2VycihkcC0+ZGV2LCAiZmFp bGVkIHRvIGdldCBjb25uZWN0b3JcbiIpOwo+KwkJcmV0dXJuOwo+Kwl9Cj4rCj4rCWNvbm5fc3Rh dGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25uZWN0b3Ip Owo+KwlpZiAoIWNvbm5fc3RhdGUpIHsKPisJCWRldl9lcnIoZHAtPmRldiwgImZhaWxlZCB0byBn ZXQgY29ubmVjdG9yIHN0YXRlXG4iKTsKPisJCXJldHVybjsKPisJfQo+Kwo+KwlzZXRfYml0KDAs IGRwLT5zZHBfcmVnX2JhbmspOwo+Kwo+KwlyZXQgPSBkd19kcF9saW5rX2VuYWJsZShkcCk7Cj4r CWlmIChyZXQgPCAwKSB7Cj4rCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIGxp bms6ICVkXG4iLCByZXQpOwo+KwkJcmV0dXJuOwo+Kwl9Cj4rCj4rCXJldCA9IGR3X2RwX3ZpZGVv X2VuYWJsZShkcCk7Cj4rCWlmIChyZXQgPCAwKSB7Cj4rCQlkZXZfZXJyKGRwLT5kZXYsICJmYWls ZWQgdG8gZW5hYmxlIHZpZGVvOiAlZFxuIiwgcmV0KTsKPisJCXJldHVybjsKPisJfQo+K30KPisK PitzdGF0aWMgdm9pZCBkd19kcF9yZXNldChzdHJ1Y3QgZHdfZHAgKmRwKQo+K3sKPisJaW50IHZh bDsKPisKPisJZGlzYWJsZV9pcnEoZHAtPmlycSk7Cj4rCXJlZ21hcF91cGRhdGVfYml0cyhkcC0+ cmVnbWFwLCBEV19EUF9TT0ZUX1JFU0VUX0NUUkwsIENPTlRST0xMRVJfUkVTRVQsCj4rCQkJICAg RklFTERfUFJFUChDT05UUk9MTEVSX1JFU0VULCAxKSk7Cj4rCXVkZWxheSgxMCk7Cj4rCXJlZ21h cF91cGRhdGVfYml0cyhkcC0+cmVnbWFwLCBEV19EUF9TT0ZUX1JFU0VUX0NUUkwsIENPTlRST0xM RVJfUkVTRVQsCj4rCQkJICAgRklFTERfUFJFUChDT05UUk9MTEVSX1JFU0VULCAwKSk7Cj4rCj4r CWR3X2RwX2luaXRfaHcoZHApOwo+KwlyZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQoZHAtPnJlZ21h cCwgRFdfRFBfSFBEX1NUQVRVUywgdmFsLAo+KwkJCQkgRklFTERfR0VUKEhQRF9IT1RfUExVRywg dmFsKSwgMjAwLCAyMDAwMDApOwo+KwlyZWdtYXBfd3JpdGUoZHAtPnJlZ21hcCwgRFdfRFBfSFBE X1NUQVRVUywgSFBEX0hPVF9QTFVHKTsKPisJZW5hYmxlX2lycShkcC0+aXJxKTsKPit9Cj4rCj4r c3RhdGljIHZvaWQgZHdfZHBfYnJpZGdlX2F0b21pY19kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdl ICpicmlkZ2UsCj4rCQkJCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4rewo+Kwlz dHJ1Y3QgZHdfZHAgKmRwID0gYnJpZGdlX3RvX2RwKGJyaWRnZSk7Cj4rCj4rCWR3X2RwX3ZpZGVv X2Rpc2FibGUoZHApOwo+Kwlkd19kcF9saW5rX2Rpc2FibGUoZHApOwo+KwliaXRtYXBfemVybyhk cC0+c2RwX3JlZ19iYW5rLCBTRFBfUkVHX0JBTktfU0laRSk7Cj4rCWR3X2RwX3Jlc2V0KGRwKTsK Pit9Cj4rCj4rc3RhdGljIGJvb2wgZHdfZHBfaHBkX2RldGVjdF9saW5rKHN0cnVjdCBkd19kcCAq ZHApCj4rewo+KwlpbnQgcmV0Owo+Kwo+KwlyZXQgPSBwaHlfcG93ZXJfb24oZHAtPnBoeSk7Cj4r CWlmIChyZXQgPCAwKQo+KwkJcmV0dXJuIGZhbHNlOwo+KwlyZXQgPSBkd19kcF9saW5rX3BhcnNl KGRwKTsKPisJcGh5X3Bvd2VyX29mZihkcC0+cGh5KTsKPisKPisJcmV0dXJuICFyZXQ7Cj4rfQo+ Kwo+K3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIGR3X2RwX2JyaWRnZV9kZXRlY3Qo c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPit7Cj4rCXN0cnVjdCBkd19kcCAqZHAgPSBicmlk Z2VfdG9fZHAoYnJpZGdlKTsKPisKPisJaWYgKCFkd19kcF9ocGRfZGV0ZWN0KGRwKSkKPisJCXJl dHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKPisKPisJaWYgKCFkd19kcF9ocGRf ZGV0ZWN0X2xpbmsoZHApKQo+KwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVk Owo+Kwo+KwlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cj4rfQo+Kwo+K3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX2VkaWQgKmR3X2RwX2JyaWRnZV9lZGlkX3JlYWQoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSwKPisJCQkJCQkgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCj4rewo+KwlzdHJ1Y3QgZHdfZHAgKmRwID0gYnJpZGdlX3RvX2RwKGJyaWRnZSk7Cj4r CWNvbnN0IHN0cnVjdCBkcm1fZWRpZCAqZWRpZDsKPisJaW50IHJldDsKPisKPisJcmV0ID0gcGh5 X3Bvd2VyX29uKGRwLT5waHkpOwo+KwlpZiAocmV0KQo+KwkJcmV0dXJuIE5VTEw7Cj4rCj4rCWVk aWQgPSBkcm1fZWRpZF9yZWFkX2RkYyhjb25uZWN0b3IsICZkcC0+YXV4LmRkYyk7Cj4rCj4rCXBo eV9wb3dlcl9vZmYoZHAtPnBoeSk7Cj4rCj4rCXJldHVybiBlZGlkOwo+K30KPisKPitzdGF0aWMg dTMyICpkd19kcF9icmlkZ2VfYXRvbWljX2dldF9vdXRwdXRfYnVzX2ZtdHMoc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSwKPisJCQkJCQkgICAgc3RydWN0IGRybV9icmlkZ2Vfc3RhdGUgKmJyaWRn ZV9zdGF0ZSwKPisJCQkJCQkgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ KwkJCQkJCSAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwKPisJCQkJ CQkgICAgdW5zaWduZWQgaW50ICpudW1fb3V0cHV0X2ZtdHMpCj4rewo+KwlzdHJ1Y3QgZHdfZHAg KmRwID0gYnJpZGdlX3RvX2RwKGJyaWRnZSk7Cj4rCXN0cnVjdCBkd19kcF9saW5rICpsaW5rID0g JmRwLT5saW5rOwo+KwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqZGkgPSAmY29ubl9zdGF0ZS0+ Y29ubmVjdG9yLT5kaXNwbGF5X2luZm87Cj4rCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG1vZGUg PSBjcnRjX3N0YXRlLT5tb2RlOwo+Kwljb25zdCBzdHJ1Y3QgZHdfZHBfb3V0cHV0X2Zvcm1hdCAq Zm10Owo+Kwl1MzIgaSwgaiA9IDA7Cj4rCXUzMiAqb3V0cHV0X2ZtdHM7Cj4rCj4rCSpudW1fb3V0 cHV0X2ZtdHMgPSAwOwo+Kwo+KwlvdXRwdXRfZm10cyA9IGtjYWxsb2MoQVJSQVlfU0laRShkd19k cF9vdXRwdXRfZm9ybWF0cyksIHNpemVvZigqb3V0cHV0X2ZtdHMpLCBHRlBfS0VSTkVMKTsKPisJ aWYgKCFvdXRwdXRfZm10cykKPisJCXJldHVybiBOVUxMOwo+Kwo+Kwlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShkd19kcF9vdXRwdXRfZm9ybWF0cyk7IGkrKykgewo+KwkJZm10ID0gJmR3X2Rw X291dHB1dF9mb3JtYXRzW2ldOwo+Kwo+KwkJaWYgKGZtdC0+YnBjID4gY29ubl9zdGF0ZS0+bWF4 X2JwYykKPisJCQljb250aW51ZTsKPisKPisJCWlmICghKGZtdC0+Y29sb3JfZm9ybWF0ICYgZGkt PmNvbG9yX2Zvcm1hdHMpKQo+KwkJCWNvbnRpbnVlOwo+Kwo+KwkJaWYgKGZtdC0+Y29sb3JfZm9y bWF0ID09IERSTV9DT0xPUl9GT1JNQVRfWUNCQ1I0MjAgJiYKPisJCSAgICAhbGluay0+dnNjX3Nk cF9zdXBwb3J0ZWQpCj4rCQkJY29udGludWU7Cj4rCj4rCQlpZiAoZm10LT5jb2xvcl9mb3JtYXQg IT0gRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JDUjQyMCAmJgo+KwkJICAgIGRybV9tb2RlX2lzXzQyMF9v bmx5KGRpLCAmbW9kZSkpCj4rCQkJY29udGludWU7Cj4rCj4rCQlpZiAoIWR3X2RwX2JhbmR3aWR0 aF9vayhkcCwgJm1vZGUsIGZtdC0+YnBwLCBsaW5rLT5sYW5lcywgbGluay0+cmF0ZSkpCj4rCQkJ Y29udGludWU7Cj4rCj4rCQlvdXRwdXRfZm10c1tqKytdID0gZm10LT5idXNfZm9ybWF0Owo+Kwl9 Cj4rCj4rCSpudW1fb3V0cHV0X2ZtdHMgPSBqOwo+Kwo+KwlyZXR1cm4gb3V0cHV0X2ZtdHM7Cj4r fQo+Kwo+K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBkd19kcF9icmlkZ2Vf ZnVuY3MgPSB7Cj4rCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJf YnJpZGdlX2R1cGxpY2F0ZV9zdGF0ZSwKPisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0 b21pY19oZWxwZXJfYnJpZGdlX2Rlc3Ryb3lfc3RhdGUsCj4rCS5hdG9taWNfcmVzZXQgPSBkcm1f YXRvbWljX2hlbHBlcl9icmlkZ2VfcmVzZXQsCj4rCS5hdG9taWNfZ2V0X2lucHV0X2J1c19mbXRz ID0gZHJtX2F0b21pY19oZWxwZXJfYnJpZGdlX3Byb3BhZ2F0ZV9idXNfZm10LAo+KwkuYXRvbWlj X2dldF9vdXRwdXRfYnVzX2ZtdHMgPSBkd19kcF9icmlkZ2VfYXRvbWljX2dldF9vdXRwdXRfYnVz X2ZtdHMsCj4rCS5hdG9taWNfY2hlY2sgPSBkd19kcF9icmlkZ2VfYXRvbWljX2NoZWNrLAo+Kwku bW9kZV92YWxpZCA9IGR3X2RwX2JyaWRnZV9tb2RlX3ZhbGlkLAo+KwkuYXRvbWljX2VuYWJsZSA9 IGR3X2RwX2JyaWRnZV9hdG9taWNfZW5hYmxlLAo+KwkuYXRvbWljX2Rpc2FibGUgPSBkd19kcF9i cmlkZ2VfYXRvbWljX2Rpc2FibGUsCj4rCS5kZXRlY3QgPSBkd19kcF9icmlkZ2VfZGV0ZWN0LAo+ KwkuZWRpZF9yZWFkID0gZHdfZHBfYnJpZGdlX2VkaWRfcmVhZCwKPit9Owo+Kwo+K3N0YXRpYyBp bnQgZHdfZHBfbGlua19yZXRyYWluKHN0cnVjdCBkd19kcCAqZHApCj4rewo+KwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gZHAtPmJyaWRnZS5kZXY7Cj4rCXN0cnVjdCBkcm1fbW9kZXNldF9hY3F1 aXJlX2N0eCBjdHg7Cj4rCWludCByZXQ7Cj4rCj4rCWlmICghZHdfZHBfbmVlZHNfbGlua19yZXRy YWluKGRwKSkKPisJCXJldHVybiAwOwo+Kwo+KwlkZXZfZGJnKGRwLT5kZXYsICJSZXRyYWluaW5n IGxpbmtcbiIpOwo+Kwo+Kwlkcm1fbW9kZXNldF9hY3F1aXJlX2luaXQoJmN0eCwgMCk7Cj4rCWZv ciAoOzspIHsKPisJCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmRldi0+bW9kZV9jb25maWcuY29u bmVjdGlvbl9tdXRleCwgJmN0eCk7Cj4rCQlpZiAocmV0ICE9IC1FREVBRExLKQo+KwkJCWJyZWFr Owo+Kwo+KwkJZHJtX21vZGVzZXRfYmFja29mZigmY3R4KTsKPisJfQo+Kwo+KwlpZiAoIXJldCkK PisJCXJldCA9IGR3X2RwX2xpbmtfdHJhaW4oZHApOwo+Kwo+Kwlkcm1fbW9kZXNldF9kcm9wX2xv Y2tzKCZjdHgpOwo+Kwlkcm1fbW9kZXNldF9hY3F1aXJlX2ZpbmkoJmN0eCk7Cj4rCj4rCXJldHVy biByZXQ7Cj4rfQo+Kwo+K3N0YXRpYyB2b2lkIGR3X2RwX2hwZF93b3JrKHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yaykKPit7Cj4rCXN0cnVjdCBkd19kcCAqZHAgPSBjb250YWluZXJfb2Yod29yaywg c3RydWN0IGR3X2RwLCBocGRfd29yayk7Cj4rCWJvb2wgbG9uZ19ocGQ7Cj4rCWludCByZXQ7Cj4r Cj4rCW11dGV4X2xvY2soJmRwLT5pcnFfbG9jayk7Cj4rCWxvbmdfaHBkID0gZHAtPmhvdHBsdWcu bG9uZ19ocGQ7Cj4rCW11dGV4X3VubG9jaygmZHAtPmlycV9sb2NrKTsKPisKPisJZGV2X2RiZyhk cC0+ZGV2LCAiW2RybV0gR2V0IGhwZCBpcnEgLSAlc1xuIiwgbG9uZ19ocGQgPyAibG9uZyIgOiAi c2hvcnQiKTsKPisKPisJaWYgKCFsb25nX2hwZCkgewo+KwkJaWYgKGR3X2RwX25lZWRzX2xpbmtf cmV0cmFpbihkcCkpIHsKPisJCQlyZXQgPSBkd19kcF9saW5rX3JldHJhaW4oZHApOwo+KwkJCWlm IChyZXQpCj4rCQkJCWRldl93YXJuKGRwLT5kZXYsICJSZXRyYWluIGxpbmsgZmFpbGVkXG4iKTsK PisJCX0KPisJfSBlbHNlIHsKPisJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChkcC0+YnJpZGdl LmRldik7Cj4rCX0KPit9Cj4rCj4rc3RhdGljIHZvaWQgZHdfZHBfaGFuZGxlX2hwZF9ldmVudChz dHJ1Y3QgZHdfZHAgKmRwKQo+K3sKPisJdTMyIHZhbHVlOwo+Kwo+KwltdXRleF9sb2NrKCZkcC0+ aXJxX2xvY2spOwo+KwlyZWdtYXBfcmVhZChkcC0+cmVnbWFwLCBEV19EUF9IUERfU1RBVFVTLCAm dmFsdWUpOwo+Kwo+KwlpZiAodmFsdWUgJiBIUERfSVJRKSB7Cj4rCQlkZXZfZGJnKGRwLT5kZXYs ICJJUlEgZnJvbSB0aGUgSFBEXG4iKTsKPisJCWRwLT5ob3RwbHVnLmxvbmdfaHBkID0gZmFsc2U7 Cj4rCQlyZWdtYXBfd3JpdGUoZHAtPnJlZ21hcCwgRFdfRFBfSFBEX1NUQVRVUywgSFBEX0lSUSk7 Cj4rCX0KPisKPisJaWYgKHZhbHVlICYgSFBEX0hPVF9QTFVHKSB7Cj4rCQlkZXZfZGJnKGRwLT5k ZXYsICJIb3QgcGx1ZyBkZXRlY3RlZFxuIik7Cj4rCQlkcC0+aG90cGx1Zy5sb25nX2hwZCA9IHRy dWU7Cj4rCQlyZWdtYXBfd3JpdGUoZHAtPnJlZ21hcCwgRFdfRFBfSFBEX1NUQVRVUywgSFBEX0hP VF9QTFVHKTsKPisJfQo+Kwo+KwlpZiAodmFsdWUgJiBIUERfSE9UX1VOUExVRykgewo+KwkJZGV2 X2RiZyhkcC0+ZGV2LCAiVW5wbHVnIGRldGVjdGVkXG4iKTsKPisJCWRwLT5ob3RwbHVnLmxvbmdf aHBkID0gdHJ1ZTsKPisJCXJlZ21hcF93cml0ZShkcC0+cmVnbWFwLCBEV19EUF9IUERfU1RBVFVT LCBIUERfSE9UX1VOUExVRyk7Cj4rCX0KPisJbXV0ZXhfdW5sb2NrKCZkcC0+aXJxX2xvY2spOwo+ Kwo+KwlzY2hlZHVsZV93b3JrKCZkcC0+aHBkX3dvcmspOwo+K30KPisKPitzdGF0aWMgaXJxcmV0 dXJuX3QgZHdfZHBfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCj4rewo+KwlzdHJ1Y3QgZHdfZHAg KmRwID0gZGF0YTsKPisJdTMyIHZhbHVlOwo+Kwo+KwlyZWdtYXBfcmVhZChkcC0+cmVnbWFwLCBE V19EUF9HRU5FUkFMX0lOVEVSUlVQVCwgJnZhbHVlKTsKPisJaWYgKCF2YWx1ZSkKPisJCXJldHVy biBJUlFfTk9ORTsKPisKPisJaWYgKHZhbHVlICYgSFBEX0VWRU5UKQo+KwkJZHdfZHBfaGFuZGxl X2hwZF9ldmVudChkcCk7Cj4rCj4rCWlmICh2YWx1ZSAmIEFVWF9SRVBMWV9FVkVOVCkgewo+KwkJ cmVnbWFwX3dyaXRlKGRwLT5yZWdtYXAsIERXX0RQX0dFTkVSQUxfSU5URVJSVVBULCBBVVhfUkVQ TFlfRVZFTlQpOwo+KwkJY29tcGxldGUoJmRwLT5jb21wbGV0ZSk7Cj4rCX0KPisKPisJcmV0dXJu IElSUV9IQU5ETEVEOwo+K30KPisKPitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSBk d19kcF9yZWFkYWJsZV9yYW5nZXNbXSA9IHsKPisJcmVnbWFwX3JlZ19yYW5nZShEV19EUF9WRVJT SU9OX05VTUJFUiwgRFdfRFBfSUQpLAo+KwlyZWdtYXBfcmVnX3JhbmdlKERXX0RQX0NPTkZJR19S RUcxLCBEV19EUF9DT05GSUdfUkVHMyksCj4rCXJlZ21hcF9yZWdfcmFuZ2UoRFdfRFBfQ0NUTCwg RFdfRFBfU09GVF9SRVNFVF9DVFJMKSwKPisJcmVnbWFwX3JlZ19yYW5nZShEV19EUF9WU0FNUExF X0NUUkwsIERXX0RQX1ZJREVPX0hCTEFOS19JTlRFUlZBTCksCj4rCXJlZ21hcF9yZWdfcmFuZ2Uo RFdfRFBfQVVEX0NPTkZJRzEsIERXX0RQX0FVRF9DT05GSUcxKSwKPisJcmVnbWFwX3JlZ19yYW5n ZShEV19EUF9TRFBfVkVSVElDQUxfQ1RSTCwgRFdfRFBfU0RQX1NUQVRVU19FTiksCj4rCXJlZ21h cF9yZWdfcmFuZ2UoRFdfRFBfUEhZSUZfQ1RSTCwgRFdfRFBfUEhZSUZfUFdSRE9XTl9DVFJMKSwK PisJcmVnbWFwX3JlZ19yYW5nZShEV19EUF9BVVhfQ01ELCBEV19EUF9BVVhfREFUQTMpLAo+Kwly ZWdtYXBfcmVnX3JhbmdlKERXX0RQX0dFTkVSQUxfSU5URVJSVVBULCBEV19EUF9IUERfSU5URVJS VVBUX0VOQUJMRSksCj4rfTsKPisKPitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3Nf dGFibGUgZHdfZHBfcmVhZGFibGVfdGFibGUgPSB7Cj4rCS55ZXNfcmFuZ2VzICAgICA9IGR3X2Rw X3JlYWRhYmxlX3JhbmdlcywKPisJLm5feWVzX3JhbmdlcyAgID0gQVJSQVlfU0laRShkd19kcF9y ZWFkYWJsZV9yYW5nZXMpLAo+K307Cj4rCj4rc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29u ZmlnIGR3X2RwX3JlZ21hcF9jb25maWcgPSB7Cj4rCS5yZWdfYml0cyA9IDMyLAo+KwkucmVnX3N0 cmlkZSA9IDQsCj4rCS52YWxfYml0cyA9IDMyLAo+KwkuZmFzdF9pbyA9IHRydWUsCj4rCS5tYXhf cmVnaXN0ZXIgPSBEV19EUF9NQVhfUkVHSVNURVIsCj4rCS5yZF90YWJsZSA9ICZkd19kcF9yZWFk YWJsZV90YWJsZSwKPit9Owo+Kwo+K3N0YXRpYyB2b2lkIGR3X2RwX3BoeV9leGl0KHZvaWQgKmRh dGEpCj4rewo+KwlzdHJ1Y3QgZHdfZHAgKmRwID0gZGF0YTsKPisKPisJcGh5X2V4aXQoZHAtPnBo eSk7Cj4rfQo+Kwo+K3N0cnVjdCBkd19kcCAqZHdfZHBfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYs IHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKPisJCQkgY29uc3Qgc3RydWN0IGR3X2RwX3Bs YXRfZGF0YSAqcGxhdF9kYXRhKQo+K3sKPisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9 IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwo+KwlzdHJ1Y3QgZHdfZHAgKmRwOwo+KwlzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlOwo+Kwl2b2lkIF9faW9tZW0gKnJlczsKPisJaW50IHJldDsKPisK PisJZHAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRwKSwgR0ZQX0tFUk5FTCk7Cj4rCWlm ICghZHApCj4rCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPisKPisJZHAtPmRldiA9IGRldjsK PisJZHAtPnZpZGVvLnBpeGVsX21vZGUgPSBEV19EUF9NUF9RVUFEX1BJWEVMOwo+Kwo+KwlkcC0+ cGxhdF9kYXRhLm1heF9saW5rX3JhdGUgPSBwbGF0X2RhdGEtPm1heF9saW5rX3JhdGU7Cj4rCWJy aWRnZSA9ICZkcC0+YnJpZGdlOwo+KwltdXRleF9pbml0KCZkcC0+aXJxX2xvY2spOwo+KwlJTklU X1dPUksoJmRwLT5ocGRfd29yaywgZHdfZHBfaHBkX3dvcmspOwo+Kwlpbml0X2NvbXBsZXRpb24o JmRwLT5jb21wbGV0ZSk7Cj4rCj4rCXJlcyA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJj ZShwZGV2LCAwKTsKPisJaWYgKElTX0VSUihyZXMpKQo+KwkJcmV0dXJuIEVSUl9DQVNUKHJlcyk7 Cj4rCj4rCWRwLT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oZGV2LCByZXMsICZkd19k cF9yZWdtYXBfY29uZmlnKTsKPisJaWYgKElTX0VSUihkcC0+cmVnbWFwKSkgewo+KwkJZGV2X2Vy cl9wcm9iZShkZXYsIFBUUl9FUlIoZHAtPnJlZ21hcCksICJmYWlsZWQgdG8gY3JlYXRlIHJlZ21h cFxuIik7Cj4rCQlyZXR1cm4gRVJSX0NBU1QoZHAtPnJlZ21hcCk7Cj4rCX0KPisKPisJZHAtPnBo eSA9IGRldm1fb2ZfcGh5X2dldChkZXYsIGRldi0+b2Zfbm9kZSwgTlVMTCk7Cj4rCWlmIChJU19F UlIoZHAtPnBoeSkpIHsKPisJCWRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGRwLT5waHkpLCAi ZmFpbGVkIHRvIGdldCBwaHlcbiIpOwo+KwkJcmV0dXJuIEVSUl9DQVNUKGRwLT5waHkpOwo+Kwl9 Cj4rCj4rCWRwLT5hcGJfY2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoZGV2LCAiYXBiIik7Cj4r CWlmIChJU19FUlIoZHAtPmFwYl9jbGspKSB7Cj4rCQlkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VS UihkcC0+YXBiX2NsayksICJmYWlsZWQgdG8gZ2V0IGFwYiBjbG9ja1xuIik7Cj4rCQlyZXR1cm4g RVJSX0NBU1QoZHAtPmFwYl9jbGspOwo+Kwl9Cj4rCj4rCWRwLT5hdXhfY2xrID0gZGV2bV9jbGtf Z2V0X2VuYWJsZWQoZGV2LCAiYXV4Iik7Cj4rCWlmIChJU19FUlIoZHAtPmF1eF9jbGspKSB7Cj4r CQlkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkcC0+YXV4X2NsayksICJmYWlsZWQgdG8gZ2V0 IGF1eCBjbG9ja1xuIik7Cj4rCQlyZXR1cm4gRVJSX0NBU1QoZHAtPmF1eF9jbGspOwo+Kwl9Cj4r Cj4rCWRwLT5pMnNfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImkycyIpOwo+KwlpZiAoSVNfRVJS KGRwLT5pMnNfY2xrKSkgewo+KwkJZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZHAtPmkyc19j bGspLCAiZmFpbGVkIHRvIGdldCBpMnMgY2xvY2tcbiIpOwo+KwkJcmV0dXJuIEVSUl9DQVNUKGRw LT5pMnNfY2xrKTsKPisJfQo+Kwo+KwlkcC0+c3BkaWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwg InNwZGlmIik7Cj4rCWlmIChJU19FUlIoZHAtPnNwZGlmX2NsaykpIHsKPisJCWRldl9lcnJfcHJv YmUoZGV2LCBQVFJfRVJSKGRwLT5zcGRpZl9jbGspLCAiZmFpbGVkIHRvIGdldCBzcGRpZiBjbG9j a1xuIik7Cj4rCQlyZXR1cm4gRVJSX0NBU1QoZHAtPnNwZGlmX2Nsayk7Cj4rCX0KPisKPisJZHAt PmhkY3BfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImhkY3AiKTsKPisJaWYgKElTX0VSUihkcC0+ aGRjcF9jbGspKSB7Cj4rCQlkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkcC0+aGRjcF9jbGsp LCAiZmFpbGVkIHRvIGdldCBoZGNwIGNsb2NrXG4iKTsKPisJCXJldHVybiBFUlJfQ0FTVChkcC0+ aGRjcF9jbGspOwo+Kwl9Cj4rCj4rCWRwLT5yc3RjID0gZGV2bV9yZXNldF9jb250cm9sX2dldChk ZXYsIE5VTEwpOwo+KwlpZiAoSVNfRVJSKGRwLT5yc3RjKSkgewo+KwkJZGV2X2Vycl9wcm9iZShk ZXYsIFBUUl9FUlIoZHAtPnJzdGMpLCAiZmFpbGVkIHRvIGdldCByZXNldCBjb250cm9sXG4iKTsK PisJCXJldHVybiBFUlJfQ0FTVChkcC0+cnN0Yyk7Cj4rCX0KPisKPisJYnJpZGdlLT5vZl9ub2Rl ID0gZGV2LT5vZl9ub2RlOwo+KwlicmlkZ2UtPmZ1bmNzID0gJmR3X2RwX2JyaWRnZV9mdW5jczsK PisJYnJpZGdlLT5vcHMgPSBEUk1fQlJJREdFX09QX0RFVEVDVCB8IERSTV9CUklER0VfT1BfRURJ RCB8IERSTV9CUklER0VfT1BfSFBEOwo+KwlicmlkZ2UtPnR5cGUgPSBEUk1fTU9ERV9DT05ORUNU T1JfRGlzcGxheVBvcnQ7Cj4rCWJyaWRnZS0+eWNiY3JfNDIwX2FsbG93ZWQgPSB0cnVlOwo+Kwo+ KwlkcC0+YXV4LmRldiA9IGRldjsKPisJZHAtPmF1eC5kcm1fZGV2ID0gZW5jb2Rlci0+ZGV2Owo+ KwlkcC0+YXV4Lm5hbWUgPSBkZXZfbmFtZShkZXYpOwo+KwlkcC0+YXV4LnRyYW5zZmVyID0gZHdf ZHBfYXV4X3RyYW5zZmVyOwo+KwlyZXQgPSBkcm1fZHBfYXV4X3JlZ2lzdGVyKCZkcC0+YXV4KTsK PisJaWYgKHJldCkgewo+KwkJZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgIkF1eCByZWdpc3RlciBm YWlsZWRcbiIpOwo+KwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPisJfQo+Kwo+KwlyZXQgPSBkcm1f YnJpZGdlX2F0dGFjaChlbmNvZGVyLCBicmlkZ2UsIE5VTEwsIERSTV9CUklER0VfQVRUQUNIX05P X0NPTk5FQ1RPUik7Cj4rCWlmIChyZXQpCj4rCQlkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiRmFp bGVkIHRvIGF0dGFjaCBicmlkZ2VcbiIpOwo+Kwo+Kwlkd19kcF9pbml0X2h3KGRwKTsKPisKPisJ cmV0ID0gcGh5X2luaXQoZHAtPnBoeSk7Cj4rCWlmIChyZXQpIHsKPisJCWRldl9lcnJfcHJvYmUo ZGV2LCByZXQsICJwaHkgaW5pdCBmYWlsZWRcbiIpOwo+KwkJcmV0dXJuIEVSUl9QVFIocmV0KTsK PisJfQo+Kwo+KwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBkd19kcF9waHlf ZXhpdCwgZHApOwo+KwlpZiAocmV0KQo+KwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPisKPisJZHAt PmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4rCWlmIChkcC0+aXJxIDwgMCkKPisJ CXJldHVybiBFUlJfUFRSKHJldCk7Cj4rCj4rCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9p cnEoZGV2LCBkcC0+aXJxLCBOVUxMLCBkd19kcF9pcnEsCj4rCQkJCQlJUlFGX09ORVNIT1QsIGRl dl9uYW1lKGRldiksIGRwKTsKPisJaWYgKHJldCkgewo+KwkJZGV2X2Vycl9wcm9iZShkZXYsIHJl dCwgImZhaWxlZCB0byByZXF1ZXN0IGlycVxuIik7Cj4rCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ Kwl9Cj4rCj4rCXJldHVybiBkcDsKPit9Cj4rRVhQT1JUX1NZTUJPTF9HUEwoZHdfZHBfYmluZCk7 Cj4rCj4rTU9EVUxFX0FVVEhPUigiQW5keSBZYW4gPGFuZHlzaHJrQDE2My5jb20+Iik7Cj4rTU9E VUxFX0RFU0NSSVBUSU9OKCJEVyBEUCBDb3JlIExpYnJhcnkiKTsKPitNT0RVTEVfTElDRU5TRSgi R1BMIik7Cj5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vYnJpZGdlL2R3X2RwLmggYi9pbmNsdWRl L2RybS9icmlkZ2UvZHdfZHAuaAo+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPmluZGV4IDAwMDAwMDAw MDAwMDAuLmQwNWRmNDlmZDg4NDYKPi0tLSAvZGV2L251bGwKPisrKyBiL2luY2x1ZGUvZHJtL2Jy aWRnZS9kd19kcC5oCj5AQCAtMCwwICsxLDIwIEBACj4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KPisvKgo+KyAqIENvcHlyaWdodCAoYykgMjAyNSBSb2Nr Y2hpcCBFbGVjdHJvbmljcyBDby4sIEx0ZC4KPisgKi8KPisKPisjaWZuZGVmIF9fRFdfRFBfXwo+ KyNkZWZpbmUgX19EV19EUF9fCj4rCj4rI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+Kwo+K3N0 cnVjdCBkcm1fZW5jb2RlcjsKPitzdHJ1Y3QgZHdfZHA7Cj4rCj4rc3RydWN0IGR3X2RwX3BsYXRf ZGF0YSB7Cj4rCXUzMiBtYXhfbGlua19yYXRlOwo+K307Cj4rCj4rc3RydWN0IGR3X2RwICpkd19k cF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+ KwkJCSBjb25zdCBzdHJ1Y3QgZHdfZHBfcGxhdF9kYXRhICpwbGF0X2RhdGEpOwo+KyNlbmRpZiAv KiBfX0RXX0RQX18gKi8KPi0tIAo+Mi40My4wCj4KPgo+X19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPkxpbnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdAo+TGlu dXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFkZWFkLm9yZwo+aHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yb2NrY2hpcAo=