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 980F1CD1284 for ; Tue, 2 Apr 2024 10:18:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=fHsQHlHYERd6E6iADufORIUPlN/mBqQtdspvte2BJRM=; b=Lr0sAudsxXFMfV sXpOZYXbbXRye/0GF9F4dYvl6cIEKd11VPnCAKaZwpJsIsOVmNmfFjBi51ObEg54NvSB7k9VW+a9y IBaQTZwabQFozOjpdnqwbqXyTjdx0rYDPJyVjnEQbskC9dJZWp4y6i5mKO/NBSzau+MBX5i8cYIxw ghP4Lj+BTQh94cSpa0wtYmXSBw97DEoR3r096GSv8E2ms8OpzG/pJVDV+sQ1OFUGOCyuPuxCo8FoO kuM6lAmynjTs81Uzj23420SFTknMynaWJv6yeDG2CUFmpXdbqlhkIKXWyVu1diNK4HS+o2ySSb/NK 3mLfS8TipPn8z9hKzzQQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rrbDM-0000000AcSo-39wJ; Tue, 02 Apr 2024 10:18:00 +0000 Received: from perceval.ideasonboard.com ([213.167.242.64]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rrbD9-0000000AcKf-2LJN for linux-arm-kernel@lists.infradead.org; Tue, 02 Apr 2024 10:17:58 +0000 Received: from [192.168.1.118] (unknown [103.86.18.232]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id B465483F; Tue, 2 Apr 2024 12:07:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1712052457; bh=kq9AqMqf/3F2U4rbOpXABT1foZO+KLoJmjQZ/ubY4Fc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=N9GNcDVC+qWoK3pwRVaNT6R88Nj844y9HJl1ARz0IY2k0ch5O9AiWkYuAMXZbLVal 4p77uVd+VqtwAsoSJ30x07vALYf6nbcqwOagTLuw23z+PhquPFJOFcvot7WHV3Zo4u eMDUc5AzKDq/DMoDQpaQojduJmVOsTLNSimNQLac= From: Umang Jain Date: Tue, 02 Apr 2024 15:37:51 +0530 Subject: [PATCH v4 2/2] media: i2c: Add imx283 camera sensor driver MIME-Version: 1.0 Message-Id: <20240402-kernel-name-extraversion-v4-2-fb776893e4ec@ideasonboard.com> References: <20240402-kernel-name-extraversion-v4-0-fb776893e4ec@ideasonboard.com> In-Reply-To: <20240402-kernel-name-extraversion-v4-0-fb776893e4ec@ideasonboard.com> To: Mauro Carvalho Chehab , Conor Dooley , Shawn Guo , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Sakari Ailus Cc: Umang Jain , Kieran Bingham , Rob Herring , Krzysztof Kozlowski , Sascha Hauer , Andy Shevchenko , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1712052475; l=48817; i=umang.jain@ideasonboard.com; s=20240402; h=from:subject:message-id; bh=fSn/EEj2trCW+D3bohz+1giwKNWZyu/xMZCNMUaOi/A=; b=zAGgLn41CQGAItFlHNxHLZUFgRpt4xXKoWfvueG/yUuVUZmhZoYVKmSMUnxomUk127qsD7nA4 4GyXq8+3ZhJAQ1g+r9bShAns5uYT9764v8yhokeCjrQo8QAQhe29+5Y X-Developer-Key: i=umang.jain@ideasonboard.com; a=ed25519; pk=8K9qSAtc2dNF4Ax+jYC0w9dlfptU7wxPBQwOy0nxRoc= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240402_031748_153045_090C2A7A X-CRM114-Status: GOOD ( 19.86 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogS2llcmFuIEJpbmdoYW0gPGtpZXJhbi5iaW5naGFtQGlkZWFzb25ib2FyZC5jb20+CgpB ZGQgYSB2NGwyIHN1YmRldmljZSBkcml2ZXIgZm9yIHRoZSBTb255IElNWDI4MyBpbWFnZSBzZW5z b3IuCgpUaGUgSU1YMjgzIGlzIGEgMjBNUCBEaWFnb25hbCAxNS44NiBtbSAoVHlwZSAxKSBDTU9T IEltYWdlIFNlbnNvciB3aXRoClNxdWFyZSBQaXhlbCBmb3IgQ29sb3IgQ2FtZXJhcy4KClRoZSBm b2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSBNYW51YWwgZXhwb3N1cmUgYW4gZ2Fp biBjb250cm9sIHN1cHBvcnQKLSB2YmxhbmsvaGJsYW5rL2xpbmsgZnJlcSBjb250cm9sIHN1cHBv cnQKLSBUZXN0IHBhdHRlcm4gc3VwcG9ydCBjb250cm9sCi0gQXJiaXRyYXJ5IGhvcml6b250YWwg YW5kIHZlcnRpY2FsIGNyb3BwaW5nCi0gU3VwcG9ydGVkIHJlc29sdXRpb246CiAgLSA1NDcyeDM2 NDggQCAyMGZwcyAoU1JHR0IxMikKICAtIDU0NzJ4MzY0OCBAIDI1ZnBzIChTUkdHQjEwKQogIC0g MjczNngxODI0IEAgNTBmcHMgKFNSR0dCMTIpCgpTaWduZWQtb2ZmLWJ5OiBLaWVyYW4gQmluZ2hh bSA8a2llcmFuLmJpbmdoYW1AaWRlYXNvbmJvYXJkLmNvbT4KU2lnbmVkLW9mZi1ieTogVW1hbmcg SmFpbiA8dW1hbmcuamFpbkBpZGVhc29uYm9hcmQuY29tPgotLS0KIE1BSU5UQUlORVJTICAgICAg ICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnICB8ICAgMTAgKwog ZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUgfCAgICAxICsKIGRyaXZlcnMvbWVkaWEvaTJjL2lt eDI4My5jIHwgMTYwNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogNCBmaWxlcyBjaGFuZ2VkLCAxNjE3IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9NQUlO VEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGEyZTE2NDEzMTY1MC4uNjRkMzc4MGFmYjk5IDEw MDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMjAzNzQsNiArMjAz NzQsNyBAQCBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIFQ6 CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9tZWRpYV90cmVlLmdpdAogRjoJRG9jdW1lbnRhdGlvbi9k ZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlhL2kyYy9zb255LGlteDI4My55YW1sCitGOglkcml2ZXJz L21lZGlhL2kyYy9pbXgyODMuYwogCiBTT05ZIElNWDI5MCBTRU5TT1IgRFJJVkVSCiBNOglNYW5p dmFubmFuIFNhZGhhc2l2YW0gPG1hbml2YW5uYW4uc2FkaGFzaXZhbUBsaW5hcm8ub3JnPgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvaTJjL0tj b25maWcKaW5kZXggZTRkYTY4ODM1NjgzLi5iODRkNjRkMzdmMGUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvbWVkaWEvaTJjL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZwpAQCAt MTYzLDYgKzE2MywxNiBAQCBjb25maWcgVklERU9fSU1YMjc0CiAJICBUaGlzIGlzIGEgVjRMMiBz ZW5zb3IgZHJpdmVyIGZvciB0aGUgU29ueSBJTVgyNzQKIAkgIENNT1MgaW1hZ2Ugc2Vuc29yLgog Citjb25maWcgVklERU9fSU1YMjgzCisJdHJpc3RhdGUgIlNvbnkgSU1YMjgzIHNlbnNvciBzdXBw b3J0IgorCXNlbGVjdCBWNEwyX0NDSV9JMkMKKwloZWxwCisJICBUaGlzIGlzIGEgVjRMMiBzZW5z b3IgZHJpdmVyIGZvciB0aGUgU29ueSBJTVgyODMKKwkgIENNT1MgaW1hZ2Ugc2Vuc29yLgorCisJ ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUK KwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpbXgyODMuCisKIGNvbmZpZyBWSURFT19JTVgyOTAK IAl0cmlzdGF0ZSAiU29ueSBJTVgyOTAgc2Vuc29yIHN1cHBvcnQiCiAJc2VsZWN0IFJFR01BUF9J MkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlIGIvZHJpdmVycy9tZWRp YS9pMmMvTWFrZWZpbGUKaW5kZXggYjgyZTk5Y2E3NTc4Li5iYmU0MWU4MzFjNzYgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL01h a2VmaWxlCkBAIC00OSw2ICs0OSw3IEBAIG9iai0kKENPTkZJR19WSURFT19JTVgyMTQpICs9IGlt eDIxNC5vCiBvYmotJChDT05GSUdfVklERU9fSU1YMjE5KSArPSBpbXgyMTkubwogb2JqLSQoQ09O RklHX1ZJREVPX0lNWDI1OCkgKz0gaW14MjU4Lm8KIG9iai0kKENPTkZJR19WSURFT19JTVgyNzQp ICs9IGlteDI3NC5vCitvYmotJChDT05GSUdfVklERU9fSU1YMjgzKSArPSBpbXgyODMubwogb2Jq LSQoQ09ORklHX1ZJREVPX0lNWDI5MCkgKz0gaW14MjkwLm8KIG9iai0kKENPTkZJR19WSURFT19J TVgyOTYpICs9IGlteDI5Ni5vCiBvYmotJChDT05GSUdfVklERU9fSU1YMzE5KSArPSBpbXgzMTku bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvaW14MjgzLmMgYi9kcml2ZXJzL21lZGlh L2kyYy9pbXgyODMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmFj ZThmNjVhYTZiMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL2lteDI4My5j CkBAIC0wLDAgKzEsMTYwNSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK Ky8qCisgKiBWNEwyIFN1cHBvcnQgZm9yIHRoZSBJTVgyODMKKyAqCisgKiBEaWFnb25hbCAxNS44 NiBtbSAoVHlwZSAxKSBDTU9TIEltYWdlIFNlbnNvciB3aXRoIFNxdWFyZSBQaXhlbCBmb3IgQ29s b3IKKyAqIENhbWVyYXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDI0IElkZWFzIG9uIEJvYXJk IE95LgorICoKKyAqIEJhc2VkIG9uIFNvbnkgSU1YMjgzIGRyaXZlciBwcmVwYXJlZCBieSBXaWxs IFdoYW5nCisgKgorICogQmFzZWQgb24gU29ueSBpbXg0NzcgY2FtZXJhIGRyaXZlcgorICogQ29w eXJpZ2h0IChDKSAyMDE5LTIwMjAgUmFzcGJlcnJ5IFBpIChUcmFkaW5nKSBMdGQKKyAqLworCisj aW5jbHVkZSA8bGludXgvYXJyYXlfc2l6ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgor I2luY2x1ZGUgPGxpbnV4L2NvbnRhaW5lcl9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgor I2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVk ZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1 ZGUgPGxpbnV4L21pbm1heC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUg PGxpbnV4L3Byb3BlcnR5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+ CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91bml0cy5oPgorI2lu Y2x1ZGUgPG1lZGlhL3Y0bDItY2NpLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPgor I2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVu dC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZndub2RlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRs Mi1tZWRpYWJ1cy5oPgorCisvKiBDaGlwIElEICovCisjZGVmaW5lIElNWDI4M19SRUdfQ0hJUF9J RAkJQ0NJX1JFRzgoMHgzMDAwKQorI2RlZmluZSBJTVgyODNfQ0hJUF9JRAkJCTB4MGIJLy8gRGVm YXVsdCBwb3dlciBvbiBzdGF0ZQorCisjZGVmaW5lIElNWDI4M19SRUdfU1RBTkRCWQkJQ0NJX1JF RzgoMHgzMDAwKQorI2RlZmluZSAgIElNWDI4M19BQ1RJVkUJCQkwCisjZGVmaW5lICAgSU1YMjgz X1NUQU5EQlkJCUJJVCgwKQorI2RlZmluZSAgIElNWDI4M19TVEJMT0dJQwkJQklUKDEpCisjZGVm aW5lICAgSU1YMjgzX1NUQk1JUEkJCUJJVCgyKQorI2RlZmluZSAgIElNWDI4M19TVEJEVgkJCUJJ VCgzKQorI2RlZmluZSAgIElNWDI4M19TTEVFUAkJCUJJVCg0KQorCisjZGVmaW5lIElNWDI4M19S RUdfQ0xBTVAJCUNDSV9SRUc4KDB4MzAwMSkKKyNkZWZpbmUgICBJTVgyODNfQ0xQU1FSU1QJCUJJ VCg0KQorCisjZGVmaW5lIElNWDI4M19SRUdfUExTVE1HMDgJCUNDSV9SRUc4KDB4MzAwMykKKyNk ZWZpbmUgICBJTVgyODNfUExTVE1HMDhfVkFMCQkweDc3CisKKyNkZWZpbmUgSU1YMjgzX1JFR19N RFNFTDEJCUNDSV9SRUc4KDB4MzAwNCkKKyNkZWZpbmUgSU1YMjgzX1JFR19NRFNFTDIJCUNDSV9S RUc4KDB4MzAwNSkKKyNkZWZpbmUgSU1YMjgzX1JFR19NRFNFTDMJCUNDSV9SRUc4KDB4MzAwNikK KyNkZWZpbmUgICBJTVgyODNfTURTRUwzX1ZDUk9QX0VOCUJJVCg1KQorI2RlZmluZSBJTVgyODNf UkVHX01EU0VMNAkJQ0NJX1JFRzgoMHgzMDA3KQorI2RlZmluZSAgIElNWDI4M19NRFNFTDRfVkNS T1BfRU4JKEJJVCg0KSB8IEJJVCg2KSkKKworI2RlZmluZSBJTVgyODNfUkVHX1NWUgkJCUNDSV9S RUcxNl9MRSgweDMwMDkpCisKKyNkZWZpbmUgSU1YMjgzX1JFR19IVFJJTU1JTkcJCUNDSV9SRUc4 KDB4MzAwYikKKyNkZWZpbmUgICBJTVgyODNfTURWUkVWCQkJQklUKDApIC8qIFZGTElQICovCisj ZGVmaW5lICAgSU1YMjgzX0hUUklNTUlOR19FTgkJQklUKDQpCisKKyNkZWZpbmUgSU1YMjgzX1JF R19WV0lOUE9TCQlDQ0lfUkVHMTZfTEUoMHgzMDBmKQorI2RlZmluZSBJTVgyODNfUkVHX1ZXSURD VVQJCUNDSV9SRUcxNl9MRSgweDMwMTEpCisKKyNkZWZpbmUgSU1YMjgzX1JFR19NRFNFTDcJCUND SV9SRUcxNl9MRSgweDMwMTMpCisKKy8qIENTSSBDbG9jayBDb25maWd1cmF0aW9uICovCisjZGVm aW5lIElNWDI4M19SRUdfVENMS1BPU1QJCUNDSV9SRUc4KDB4MzAxOCkKKyNkZWZpbmUgSU1YMjgz X1JFR19USFNQUkVQQVJFCQlDQ0lfUkVHOCgweDMwMWEpCisjZGVmaW5lIElNWDI4M19SRUdfVEhT WkVSTwkJQ0NJX1JFRzgoMHgzMDFjKQorI2RlZmluZSBJTVgyODNfUkVHX1RIU1RSQUlMCQlDQ0lf UkVHOCgweDMwMWUpCisjZGVmaW5lIElNWDI4M19SRUdfVENMS1RSQUlMCQlDQ0lfUkVHOCgweDMw MjApCisjZGVmaW5lIElNWDI4M19SRUdfVENMS1BSRVBBUkUJCUNDSV9SRUc4KDB4MzAyMikKKyNk ZWZpbmUgSU1YMjgzX1JFR19UQ0xLWkVSTwkJQ0NJX1JFRzE2X0xFKDB4MzAyNCkKKyNkZWZpbmUg SU1YMjgzX1JFR19UTFBYCQkJQ0NJX1JFRzgoMHgzMDI2KQorI2RlZmluZSBJTVgyODNfUkVHX1RI U0VYSVQJCUNDSV9SRUc4KDB4MzAyOCkKKyNkZWZpbmUgSU1YMjgzX1JFR19UQ0xLUFJFCQlDQ0lf UkVHOCgweDMwMmEpCisjZGVmaW5lIElNWDI4M19SRUdfU1lTTU9ERQkJQ0NJX1JFRzgoMHgzMTA0 KQorCisjZGVmaW5lIElNWDI4M19SRUdfWV9PVVRfU0laRQkJQ0NJX1JFRzE2X0xFKDB4MzAyZikK KyNkZWZpbmUgSU1YMjgzX1JFR19XUklURV9WU0laRQkJQ0NJX1JFRzE2X0xFKDB4MzAzMSkKKyNk ZWZpbmUgSU1YMjgzX1JFR19PQl9TSVpFX1YJCUNDSV9SRUc4KDB4MzAzMykKKworLyogSE1BWCBp bnRlcm5hbCBIQkxBTksgKi8KKyNkZWZpbmUgSU1YMjgzX1JFR19ITUFYCQkJQ0NJX1JFRzE2X0xF KDB4MzAzNikKKyNkZWZpbmUgSU1YMjgzX0hNQVhfTUFYCQkJKEJJVCgxNikgLSAxKQorCisvKiBW TUFYIGludGVybmFsIFZCTEFOSyAqLworI2RlZmluZSBJTVgyODNfUkVHX1ZNQVgJCQlDQ0lfUkVH MjRfTEUoMHgzMDM4KQorI2RlZmluZSAgIElNWDI4M19WTUFYX01BWAkJKEJJVCgxNikgLSAxKQor CisvKiBTSFIgaW50ZXJuYWwgKi8KKyNkZWZpbmUgSU1YMjgzX1JFR19TSFIJCQlDQ0lfUkVHMTZf TEUoMHgzMDNiKQorI2RlZmluZSAgIElNWDI4M19TSFJfTUlOCQkxMQorCisvKgorICogQW5hbG9n IGdhaW4gY29udHJvbAorICogIEdhaW4gW2RCXSA9IC0yMGxvZ3soMjA0OCAtIHZhbHVlIFsxMDow XSkgLzIwNDh9CisgKiAgUmFuZ2U6IDBkQiB0byBhcHByb3hpbWF0ZWx5ICsyN2RCCisgKi8KKyNk ZWZpbmUgSU1YMjgzX1JFR19BTkFMT0dfR0FJTgkJQ0NJX1JFRzE2X0xFKDB4MzA0MikKKyNkZWZp bmUgICBJTVgyODNfQU5BX0dBSU5fTUlOCQkwCisjZGVmaW5lICAgSU1YMjgzX0FOQV9HQUlOX01B WAkJMTk1NworI2RlZmluZSAgIElNWDI4M19BTkFfR0FJTl9TVEVQCQkxCisjZGVmaW5lICAgSU1Y MjgzX0FOQV9HQUlOX0RFRkFVTFQJMHgwCisKKy8qCisgKiBEaWdpdGFsIGdhaW4gY29udHJvbAor ICogIEdhaW4gW2RCXSA9IHZhbHVlICogNgorICogIFJhbmdlOiAwZEIgdG8gKzE4ZGIKKyAqLwor I2RlZmluZSBJTVgyODNfUkVHX0RJR0lUQUxfR0FJTgkJQ0NJX1JFRzgoMHgzMDQ0KQorI2RlZmlu ZSBJTVgyODNfREdUTF9HQUlOX01JTgkJMAorI2RlZmluZSBJTVgyODNfREdUTF9HQUlOX01BWAkJ MworI2RlZmluZSBJTVgyODNfREdUTF9HQUlOX0RFRkFVTFQJMAorI2RlZmluZSBJTVgyODNfREdU TF9HQUlOX1NURVAJCTEKKworI2RlZmluZSBJTVgyODNfUkVHX0hUUklNTUlOR19TVEFSVAlDQ0lf UkVHMTZfTEUoMHgzMDU4KQorI2RlZmluZSBJTVgyODNfUkVHX0hUUklNTUlOR19FTkQJQ0NJX1JF RzE2X0xFKDB4MzA1YSkKKworI2RlZmluZSBJTVgyODNfUkVHX01EU0VMMTgJCUNDSV9SRUcxNl9M RSgweDMwZjYpCisKKy8qIE1hc3RlciBNb2RlIE9wZXJhdGlvbiBDb250cm9sICovCisjZGVmaW5l IElNWDI4M19SRUdfWE1TVEEJCUNDSV9SRUc4KDB4MzEwNSkKKyNkZWZpbmUgICBJTVgyODNfWE1T VEEJCQlCSVQoMCkKKworI2RlZmluZSBJTVgyODNfUkVHX1NZTkNEUlYJCUNDSV9SRUc4KDB4MzEw NykKKyNkZWZpbmUgICBJTVgyODNfU1lOQ0RSVl9YSFNfWFZTCSgweGEwIHwgMHgwMikKKyNkZWZp bmUgICBJTVgyODNfU1lOQ0RSVl9ISVoJCSgweGEwIHwgMHgwMykKKworLyogUExMIFN0YW5kYnkg Ki8KKyNkZWZpbmUgSU1YMjgzX1JFR19TVEJQTAkJQ0NJX1JFRzgoMHgzMjBiKQorI2RlZmluZSAg SU1YMjgzX1NUQlBMX05PUk1BTAkJMHgwMAorI2RlZmluZSAgSU1YMjgzX1NUQlBMX1NUQU5EQlkJ CTB4MDMKKworLyogSW5wdXQgRnJlcXVlbmN5IFNldHRpbmcgKi8KKyNkZWZpbmUgSU1YMjgzX1JF R19QTFJEMQkJQ0NJX1JFRzgoMHgzNmMxKQorI2RlZmluZSBJTVgyODNfUkVHX1BMUkQyCQlDQ0lf UkVHMTZfTEUoMHgzNmMyKQorI2RlZmluZSBJTVgyODNfUkVHX1BMUkQzCQlDQ0lfUkVHOCgweDM2 ZjcpCisjZGVmaW5lIElNWDI4M19SRUdfUExSRDQJCUNDSV9SRUc4KDB4MzZmOCkKKworI2RlZmlu ZSBJTVgyODNfUkVHX1BMU1RNRzAyCQlDQ0lfUkVHOCgweDM2YWEpCisjZGVmaW5lICAgSU1YMjgz X1BMU1RNRzAyX1ZBTAkJMHgwMAorCisjZGVmaW5lIElNWDI4M19SRUdfRUJEX1hfT1VUX1NJWkUJ Q0NJX1JFRzE2X0xFKDB4M2E1NCkKKworLyogVGVzdCBwYXR0ZXJuIGdlbmVyYXRvciAqLworI2Rl ZmluZSBJTVgyODNfUkVHX1RQR19DVFJMCQlDQ0lfUkVHOCgweDMxNTYpCisjZGVmaW5lICAgSU1Y MjgzX1RQR19DVFJMX0NMS0VOCQlCSVQoMCkKKyNkZWZpbmUgICBJTVgyODNfVFBHX0NUUkxfUEFU RU4JCUJJVCg0KQorCisjZGVmaW5lIElNWDI4M19SRUdfVFBHX1BBVAkJQ0NJX1JFRzgoMHgzMTU3 KQorI2RlZmluZSAgIElNWDI4M19UUEdfUEFUX0FMTF8wMDAJMHgwMAorI2RlZmluZSAgIElNWDI4 M19UUEdfUEFUX0FMTF9GRkYJMHgwMQorI2RlZmluZSAgIElNWDI4M19UUEdfUEFUX0FMTF81NTUJ MHgwMgorI2RlZmluZSAgIElNWDI4M19UUEdfUEFUX0FMTF9BQUEJMHgwMworI2RlZmluZSAgIElN WDI4M19UUEdfUEFUX0hfQ09MT1JfQkFSUwkweDBhCisjZGVmaW5lICAgSU1YMjgzX1RQR19QQVRf Vl9DT0xPUl9CQVJTCTB4MGIKKworLyogRXhwb3N1cmUgY29udHJvbCAqLworI2RlZmluZSBJTVgy ODNfRVhQT1NVUkVfTUlOCQk1MgorI2RlZmluZSBJTVgyODNfRVhQT1NVUkVfU1RFUAkJMQorI2Rl ZmluZSBJTVgyODNfRVhQT1NVUkVfREVGQVVMVAkJMTAwMAorI2RlZmluZSBJTVgyODNfRVhQT1NV UkVfTUFYCQk0OTg2NQorCisjZGVmaW5lIElNQUdFX1BBRAkJCTAKKworI2RlZmluZSBJTVgyODNf WENMUl9NSU5fREVMQVlfVVMJKDEgKiBVU0VDX1BFUl9NU0VDKQorI2RlZmluZSBJTVgyODNfWENM Ul9ERUxBWV9SQU5HRV9VUwkoMSAqIFVTRUNfUEVSX01TRUMpCisKKy8qIElNWDI4MyBuYXRpdmUg YW5kIGFjdGl2ZSBwaXhlbCBhcnJheSBzaXplLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwy X3JlY3QgaW14MjgzX25hdGl2ZV9hcmVhID0geworCS50b3AgPSAwLAorCS5sZWZ0ID0gMCwKKwku d2lkdGggPSA1NTkyLAorCS5oZWlnaHQgPSAzNzEwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCB2NGwyX3JlY3QgaW14MjgzX2FjdGl2ZV9hcmVhID0geworCS50b3AgPSA0MCwKKwkubGVmdCA9 IDEwOCwKKwkud2lkdGggPSA1NDcyLAorCS5oZWlnaHQgPSAzNjQ4LAorfTsKKworc3RydWN0IGlt eDI4M19yZWdfbGlzdCB7CisJdW5zaWduZWQgaW50IG51bV9vZl9yZWdzOworCWNvbnN0IHN0cnVj dCBjY2lfcmVnX3NlcXVlbmNlICpyZWdzOworfTsKKworLyogTW9kZSA6IHJlc29sdXRpb24gYW5k IHJlbGF0ZWQgY29uZmlnIHZhbHVlcyAqLworc3RydWN0IGlteDI4M19tb2RlIHsKKwl1bnNpZ25l ZCBpbnQgbW9kZTsKKworCS8qIEJpdHMgcGVyIHBpeGVsICovCisJdW5zaWduZWQgaW50IGJwcDsK KworCS8qIEZyYW1lIHdpZHRoICovCisJdW5zaWduZWQgaW50IHdpZHRoOworCisJLyogRnJhbWUg aGVpZ2h0ICovCisJdW5zaWduZWQgaW50IGhlaWdodDsKKworCS8qCisJICogTWluaW11bSBob3Jp em9udGFsIHRpbWluZyBpbiBwaXhlbC11bml0cworCSAqCisJICogTm90ZSB0aGF0IEhNQVggaXMg d3JpdHRlbiBpbiA3Mk1IeiB1bml0cywgYW5kIHRoZSBkYXRhc2hlZXQgYXNzdW1lcyBhCisJICog NzIwTUh6IGxpbmsgZnJlcXVlbmN5LiBDb252ZXJ0IGRhdGFzaGVldCB2YWx1ZXMgd2l0aCB0aGUg Zm9sbG93aW5nOgorCSAqCisJICogRm9yIDEyIGJwcCBtb2RlcyAoNDgwTWJwcykgY29udmVydCB3 aXRoOgorCSAqICAgaG1heCA9IFtobWF4IGluIDcyTUh6IHVuaXRzXSAqIDQ4MCAvIDcyCisJICoK KwkgKiBGb3IgMTAgYnBwIG1vZGVzICg1NzZNYnBzKSBjb252ZXJ0IHdpdGg6CisJICogICBobWF4 ID0gW2htYXggaW4gNzJNSHogdW5pdHNdICogNTc2IC8gNzIKKwkgKi8KKwl1MzIgbWluX2htYXg7 CisKKwkvKiBtaW5pbXVtIFYtdGltaW5nIGluIGxpbmVzICovCisJdTMyIG1pbl92bWF4OworCisJ LyogZGVmYXVsdCBILXRpbWluZyAqLworCXUzMiBkZWZhdWx0X2htYXg7CisKKwkvKiBkZWZhdWx0 IFYtdGltaW5nICovCisJdTMyIGRlZmF1bHRfdm1heDsKKworCS8qIG1pbmltdW0gU0hSICovCisJ dTMyIG1pbl9zaHI7CisKKwkvKgorCSAqIFBlci1tb2RlIHZlcnRpY2FsIGNyb3AgY29uc3RhbnRz IHVzZWQgdG8gY2FsY3VsYXRlIHZhbHVlcworCSAqIG9mIElNWDI4M1JFR19XSURDVVQgYW5kIElN WDI4M19SRUdfVldJTlBPUy4KKwkgKi8KKwl1MzIgdmVmZjsKKwl1MzIgdnN0OworCXUzMiB2Y3Q7 CisKKwkvKiBIb3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBiaW5uaW5nIHJhdGlvICovCisJdTggaGJp bl9yYXRpbzsKKwl1OCB2YmluX3JhdGlvOworCisJLyogT3B0aWNhbCBCbGFua2luZyAqLworCXUz MiBob3Jpem9udGFsX29iOworCXUzMiB2ZXJ0aWNhbF9vYjsKKworCS8qIEFuYWxvZyBjcm9wIHJl Y3RhbmdsZS4gKi8KKwlzdHJ1Y3QgdjRsMl9yZWN0IGNyb3A7Cit9OworCitzdHJ1Y3QgaW14Mjgz X2lucHV0X2ZyZXF1ZW5jeSB7CisJdW5zaWduZWQgaW50IG1oejsKKwl1bnNpZ25lZCBpbnQgcmVn X2NvdW50OworCXN0cnVjdCBjY2lfcmVnX3NlcXVlbmNlIHJlZ3NbNF07Cit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IGlteDI4M19pbnB1dF9mcmVxdWVuY3kgaW14MjgzX2ZyZXF1ZW5jaWVzW10g PSB7CisJeworCQkubWh6ID0gNiAqIEhaX1BFUl9NSFosCisJCS5yZWdfY291bnQgPSA0LAorCQku cmVncyA9IHsKKwkJCXsgSU1YMjgzX1JFR19QTFJEMSwgMHgwMCB9LAorCQkJeyBJTVgyODNfUkVH X1BMUkQyLCAweDAwZjAgfSwKKwkJCXsgSU1YMjgzX1JFR19QTFJEMywgMHgwMCB9LAorCQkJeyBJ TVgyODNfUkVHX1BMUkQ0LCAweGMwIH0sCisJCX0sCisJfSwKKwl7CisJCS5taHogPSAxMiAqIEha X1BFUl9NSFosCisJCS5yZWdfY291bnQgPSA0LAorCQkucmVncyA9IHsKKwkJCXsgSU1YMjgzX1JF R19QTFJEMSwgMHgwMSB9LAorCQkJeyBJTVgyODNfUkVHX1BMUkQyLCAweDAwZjAgfSwKKwkJCXsg SU1YMjgzX1JFR19QTFJEMywgMHgwMSB9LAorCQkJeyBJTVgyODNfUkVHX1BMUkQ0LCAweGMwIH0s CisJCX0sCisJfSwKKwl7CisJCS5taHogPSAxOCAqIEhaX1BFUl9NSFosCisJCS5yZWdfY291bnQg PSA0LAorCQkucmVncyA9IHsKKwkJCXsgSU1YMjgzX1JFR19QTFJEMSwgMHgwMSB9LAorCQkJeyBJ TVgyODNfUkVHX1BMUkQyLCAweDAwYTAgfSwKKwkJCXsgSU1YMjgzX1JFR19QTFJEMywgMHgwMSB9 LAorCQkJeyBJTVgyODNfUkVHX1BMUkQ0LCAweDgwIH0sCisJCX0sCisJfSwKKwl7CisJCS5taHog PSAyNCAqIEhaX1BFUl9NSFosCisJCS5yZWdfY291bnQgPSA0LAorCQkucmVncyA9IHsKKwkJCXsg SU1YMjgzX1JFR19QTFJEMSwgMHgwMiB9LAorCQkJeyBJTVgyODNfUkVHX1BMUkQyLCAweDAwZjAg fSwKKwkJCXsgSU1YMjgzX1JFR19QTFJEMywgMHgwMiB9LAorCQkJeyBJTVgyODNfUkVHX1BMUkQ0 LCAweGMwIH0sCisJCX0sCisJfSwKK307CisKK2VudW0gaW14MjgzX21vZGVzIHsKKwlJTVgyODNf TU9ERV8wLAorCUlNWDI4M19NT0RFXzEsCisJSU1YMjgzX01PREVfMUEsCisJSU1YMjgzX01PREVf MVMsCisJSU1YMjgzX01PREVfMiwKKwlJTVgyODNfTU9ERV8yQSwKKwlJTVgyODNfTU9ERV8zLAor CUlNWDI4M19NT0RFXzQsCisJSU1YMjgzX01PREVfNSwKKwlJTVgyODNfTU9ERV82LAorfTsKKwor c3RydWN0IGlteDI4M19yZWFkb3V0X21vZGUgeworCXU4IG1kc2VsMTsKKwl1OCBtZHNlbDI7CisJ dTggbWRzZWwzOworCXU4IG1kc2VsNDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14Mjgz X3JlYWRvdXRfbW9kZSBpbXgyODNfcmVhZG91dF9tb2Rlc1tdID0geworCS8qIEFsbCBwaXhlbCBz Y2FuIG1vZGVzICovCisJW0lNWDI4M19NT0RFXzBdID0geyAweDA0LCAweDAzLCAweDEwLCAweDAw IH0sIC8qIDEyIGJpdCAqLworCVtJTVgyODNfTU9ERV8xXSA9IHsgMHgwNCwgMHgwMSwgMHgwMCwg MHgwMCB9LCAvKiAxMCBiaXQgKi8KKwlbSU1YMjgzX01PREVfMUFdID0geyAweDA0LCAweDAxLCAw eDIwLCAweDUwIH0sIC8qIDEwIGJpdCAqLworCVtJTVgyODNfTU9ERV8xU10gPSB7IDB4MDQsIDB4 NDEsIDB4MjAsIDB4NTAgfSwgLyogMTAgYml0ICovCisKKwkvKiBIb3Jpem9udGFsIC8gVmVydGlj YWwgMi8yLWxpbmUgYmlubmluZyAqLworCVtJTVgyODNfTU9ERV8yXSA9IHsgMHgwZCwgMHgxMSwg MHg1MCwgMHgwMCB9LCAvKiAxMiBiaXQgKi8KKwlbSU1YMjgzX01PREVfMkFdID0geyAweDBkLCAw eDExLCAweDcwLCAweDUwIH0sIC8qIDEyIGJpdCAqLworCisJLyogSG9yaXpvbnRhbCAvIFZlcnRp Y2FsIDMvMy1saW5lIGJpbm5pbmcgKi8KKwlbSU1YMjgzX01PREVfM10gPSB7IDB4MWUsIDB4MTgs IDB4MTAsIDB4MDAgfSwgLyogMTIgYml0ICovCisKKwkvKiBWZXJ0aWNhbCAyLzkgc3Vic2FtcGxp bmcsIGhvcml6b250YWwgMyBiaW5uaW5nIGNyb3BwaW5nICovCisJW0lNWDI4M19NT0RFXzRdID0g eyAweDI5LCAweDE4LCAweDMwLCAweDUwIH0sIC8qIDEyIGJpdCAqLworCisJLyogVmVydGljYWwg Mi8xOSBzdWJzYW1wbGluZyBiaW5uaW5nLCBob3Jpem9udGFsIDMgYmlubmluZyAqLworCVtJTVgy ODNfTU9ERV81XSA9IHsgMHgyZCwgMHgxOCwgMHgxMCwgMHgwMCB9LCAvKiAxMiBiaXQgKi8KKwor CS8qIFZlcnRpY2FsIDIgYmlubmluZyBob3Jpem9udGFsIDIvNCwgc3Vic2FtcGxpbmcgMTY6OSBj cm9wcGluZyAqLworCVtJTVgyODNfTU9ERV82XSA9IHsgMHgxOCwgMHgyMSwgMHgwMCwgMHgwOSB9 LCAvKiAxMCBiaXQgKi8KKworCS8qCisJICogTmV3IG1vZGVzIHNob3VsZCBtYWtlIHN1cmUgdGhl IG9mZnNldCBwZXJpb2QgaXMgY29tcGxpZWQuCisJICogU2VlIGlteDI4M19leHBvc3VyZSgpIGZv ciByZWZlcmVuY2UuCisJICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNjaV9yZWdfc2Vx dWVuY2UgbWlwaV9kYXRhX3JhdGVfMTQ0ME1icHNbXSA9IHsKKwkvKiBUaGUgZGVmYXVsdCByZWdp c3RlciBzZXR0aW5ncyBwcm92aWRlIHRoZSAxNDQwTWJwcyByYXRlICovCisJeyBDQ0lfUkVHOCgw eDM2YzUpLCAweDAwIH0sIC8qIFVuZG9jdW1lbnRlZCAqLworCXsgQ0NJX1JFRzgoMHgzYWM0KSwg MHgwMCB9LCAvKiBVbmRvY3VtZW50ZWQgKi8KKworCXsgSU1YMjgzX1JFR19TVEJQTCwgMHgwMCB9 LAorCXsgSU1YMjgzX1JFR19UQ0xLUE9TVCwgMHhhNyB9LAorCXsgSU1YMjgzX1JFR19USFNQUkVQ QVJFLCAweDZmIH0sCisJeyBJTVgyODNfUkVHX1RIU1pFUk8sIDB4OWYgfSwKKwl7IElNWDI4M19S RUdfVEhTVFJBSUwsIDB4NWYgfSwKKwl7IElNWDI4M19SRUdfVENMS1RSQUlMLCAweDVmIH0sCisJ eyBJTVgyODNfUkVHX1RDTEtQUkVQQVJFLCAweDZmIH0sCisJeyBJTVgyODNfUkVHX1RDTEtaRVJP LCAweDAxN2YgfSwKKwl7IElNWDI4M19SRUdfVExQWCwgMHg0ZiB9LAorCXsgSU1YMjgzX1JFR19U SFNFWElULCAweDQ3IH0sCisJeyBJTVgyODNfUkVHX1RDTEtQUkUsIDB4MDcgfSwKKwl7IElNWDI4 M19SRUdfU1lTTU9ERSwgMHgwMiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjY2lfcmVn X3NlcXVlbmNlIG1pcGlfZGF0YV9yYXRlXzcyME1icHNbXSA9IHsKKwkvKiBVbmRvY3VtZW50ZWQg QWRkaXRpb25zICJGb3IgNzIwTUJwcyIgU2V0dGluZyAqLworCXsgQ0NJX1JFRzgoMHgzNmM1KSwg MHgwMSB9LCAvKiBVbmRvY3VtZW50ZWQgKi8KKwl7IENDSV9SRUc4KDB4M2FjNCksIDB4MDEgfSwg LyogVW5kb2N1bWVudGVkICovCisKKwl7IElNWDI4M19SRUdfU1RCUEwsIDB4MDAgfSwKKwl7IElN WDI4M19SRUdfVENMS1BPU1QsIDB4NzcgfSwKKwl7IElNWDI4M19SRUdfVEhTUFJFUEFSRSwgMHgz NyB9LAorCXsgSU1YMjgzX1JFR19USFNaRVJPLCAweDY3IH0sCisJeyBJTVgyODNfUkVHX1RIU1RS QUlMLCAweDM3IH0sCisJeyBJTVgyODNfUkVHX1RDTEtUUkFJTCwgMHgzNyB9LAorCXsgSU1YMjgz X1JFR19UQ0xLUFJFUEFSRSwgMHgzNyB9LAorCXsgSU1YMjgzX1JFR19UQ0xLWkVSTywgMHhkZiB9 LAorCXsgSU1YMjgzX1JFR19UTFBYLCAweDJmIH0sCisJeyBJTVgyODNfUkVHX1RIU0VYSVQsIDB4 NDcgfSwKKwl7IElNWDI4M19SRUdfVENMS1BSRSwgMHgwZiB9LAorCXsgSU1YMjgzX1JFR19TWVNN T0RFLCAweDAyIH0sCit9OworCitzdGF0aWMgY29uc3QgczY0IGxpbmtfZnJlcXVlbmNpZXNbXSA9 IHsKKwk3MjAgKiBIWl9QRVJfTUhaLCAvKiAxNDQwIE1icHMgbGFuZSBkYXRhIHJhdGUgKi8KKwkz NjAgKiBIWl9QRVJfTUhaLCAvKiA3MjAgTWJwcyBkYXRhIGxhbmUgcmF0ZSAqLworfTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBpbXgyODNfcmVnX2xpc3QgbGlua19mcmVxX3JlZ2xpc3RbXSA9IHsK Kwl7IC8qIDcyMCBNSHogKi8KKwkJLm51bV9vZl9yZWdzID0gQVJSQVlfU0laRShtaXBpX2RhdGFf cmF0ZV8xNDQwTWJwcyksCisJCS5yZWdzID0gbWlwaV9kYXRhX3JhdGVfMTQ0ME1icHMsCisJfSwK Kwl7IC8qIDM2MCBNSHogKi8KKwkJLm51bV9vZl9yZWdzID0gQVJSQVlfU0laRShtaXBpX2RhdGFf cmF0ZV83MjBNYnBzKSwKKwkJLnJlZ3MgPSBtaXBpX2RhdGFfcmF0ZV83MjBNYnBzLAorCX0sCit9 OworCisjZGVmaW5lIENFTlRFUkVEX1JFQ1RBTkdMRShyZWN0LCBfd2lkdGgsIF9oZWlnaHQpCQkJ XAorCXsJCQkJCQkJCVwKKwkJLmxlZnQgPSByZWN0LmxlZnQgKyAoKHJlY3Qud2lkdGggLSAoX3dp ZHRoKSkgLyAyKSwJXAorCQkudG9wID0gcmVjdC50b3AgKyAoKHJlY3QuaGVpZ2h0IC0gKF9oZWln aHQpKSAvIDIpLAlcCisJCS53aWR0aCA9IChfd2lkdGgpLAkJCQkJXAorCQkuaGVpZ2h0ID0gKF9o ZWlnaHQpLAkJCQkJXAorCX0KKworLyogTW9kZSBjb25maWdzICovCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGlteDI4M19tb2RlIHN1cHBvcnRlZF9tb2Rlc18xMmJpdFtdID0geworCXsKKwkJLyogMjBN UGl4IDIxLjQwIGZwcyByZWFkb3V0IG1vZGUgMCAqLworCQkubW9kZSA9IElNWDI4M19NT0RFXzAs CisJCS5icHAgPSAxMiwKKwkJLndpZHRoID0gNTQ3MiwKKwkJLmhlaWdodCA9IDM2NDgsCisJCS5t aW5faG1heCA9IDU5MTQsIC8qIDg4NyBAIDQ4ME1Iei83Mk1IeiAqLworCQkubWluX3ZtYXggPSAz NzkzLCAvKiBMaW5lcyAqLworCisJCS52ZWZmID0gMzY5NCwKKwkJLnZzdCA9IDAsCisJCS52Y3Qg PSAwLAorCisJCS5oYmluX3JhdGlvID0gMSwKKwkJLnZiaW5fcmF0aW8gPSAxLAorCisJCS8qIDIw LjAwIEZQUyAqLworCQkuZGVmYXVsdF9obWF4ID0gNjAwMCwgLyogOTAwIEAgNDgwTUh6LzcyTUh6 ICovCisJCS5kZWZhdWx0X3ZtYXggPSA0MDAwLAorCisJCS5taW5fc2hyID0gMTEsCisJCS5ob3Jp em9udGFsX29iID0gOTYsCisJCS52ZXJ0aWNhbF9vYiA9IDE2LAorCQkuY3JvcCA9IENFTlRFUkVE X1JFQ1RBTkdMRShpbXgyODNfYWN0aXZlX2FyZWEsIDU0NzIsIDM2NDgpLAorCX0sCisJeworCQkv KgorCQkgKiBSZWFkb3V0IG1vZGUgMiA6IDIvMiBiaW5uZWQgbW9kZSAoMjczNngxODI0KQorCQkg Ki8KKwkJLm1vZGUgPSBJTVgyODNfTU9ERV8yLAorCQkuYnBwID0gMTIsCisJCS53aWR0aCA9IDI3 MzYsCisJCS5oZWlnaHQgPSAxODI0LAorCQkubWluX2htYXggPSAyNDE0LCAvKiBQaXhlbHMgKDM2 MiAqIDQ4ME1Iei83Mk1IeiArIHBhZGRpbmcpICovCisJCS5taW5fdm1heCA9IDM4NDAsIC8qIExp bmVzICovCisKKwkJLyogNTAuMDAgRlBTICovCisJCS5kZWZhdWx0X2htYXggPSAyNTAwLCAvKiAz NzUgQCA0ODBNSHovNzJNaHogKi8KKwkJLmRlZmF1bHRfdm1heCA9IDM4NDAsCisKKwkJLnZlZmYg PSAxODI0LAorCQkudnN0ID0gMCwKKwkJLnZjdCA9IDAsCisKKwkJLmhiaW5fcmF0aW8gPSAyLAor CQkudmJpbl9yYXRpbyA9IDIsCisKKwkJLm1pbl9zaHIgPSAxMiwKKwkJLmhvcml6b250YWxfb2Ig PSA0OCwKKwkJLnZlcnRpY2FsX29iID0gNCwKKworCQkuY3JvcCA9IENFTlRFUkVEX1JFQ1RBTkdM RShpbXgyODNfYWN0aXZlX2FyZWEsIDU0NzIsIDM2NDgpLAorCX0sCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGlteDI4M19tb2RlIHN1cHBvcnRlZF9tb2Rlc18xMGJpdFtdID0geworCXsKKwkJ LyogMjBNUGl4IDI1LjQ4IGZwcyByZWFkb3V0IG1vZGUgMSAqLworCQkubW9kZSA9IElNWDI4M19N T0RFXzEsCisJCS5icHAgPSAxMCwKKwkJLndpZHRoID0gNTQ3MiwKKwkJLmhlaWdodCA9IDM2NDgs CisJCS5taW5faG1heCA9IDU5NjAsIC8qIDc0NSBAIDU3Nk1IeiAvIDcyTUh6ICovCisJCS5taW5f dm1heCA9IDM3OTMsCisKKwkJLyogMjUuMDAgRlBTICovCisJCS5kZWZhdWx0X2htYXggPSA2MDAw LCAvKiA3NTAgQCA1NzZNSHogLyA3Mk1IeiAqLworCQkuZGVmYXVsdF92bWF4ID0gMzg0MCwKKwor CQkubWluX3NociA9IDEwLAorCQkuaG9yaXpvbnRhbF9vYiA9IDk2LAorCQkudmVydGljYWxfb2Ig PSAxNiwKKwkJLmNyb3AgPSBDRU5URVJFRF9SRUNUQU5HTEUoaW14MjgzX2FjdGl2ZV9hcmVhLCA1 NDcyLCAzNjQ4KSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBpbXgyODNfbWJ1c19jb2Rl c1tdID0geworCU1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEyLAorCU1FRElBX0JVU19GTVRfU1JH R0IxMF8xWDEwLAorfTsKKworLyogcmVndWxhdG9yIHN1cHBsaWVzICovCitzdGF0aWMgY29uc3Qg Y2hhciAqY29uc3QgaW14MjgzX3N1cHBseV9uYW1lW10gPSB7CisJInZhZGQiLCAvKiBBbmFsb2cg KDIuOVYpIHN1cHBseSAqLworCSJ2ZGQxIiwgLyogU3VwcGx5IFZvbHRhZ2UgMiAoMS44Vikgc3Vw cGx5ICovCisJInZkZDIiLCAvKiBTdXBwbHkgVm9sdGFnZSAzICgxLjJWKSBzdXBwbHkgKi8KK307 CisKK3N0cnVjdCBpbXgyODMgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcmVnbWFw ICpjY2k7CisKKwljb25zdCBzdHJ1Y3QgaW14MjgzX2lucHV0X2ZyZXF1ZW5jeSAqZnJlcTsKKwor CXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwlzdHJ1Y3QgbWVkaWFfcGFkIHBhZDsKKworCXN0cnVj dCBjbGsgKnhjbGs7CisKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvOworCXN0cnVjdCBy ZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW0FSUkFZX1NJWkUoaW14MjgzX3N1cHBseV9uYW1l KV07CisKKwkvKiBWNEwyIENvbnRyb2xzICovCisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGN0 cmxfaGFuZGxlcjsKKwlzdHJ1Y3QgdjRsMl9jdHJsICpleHBvc3VyZTsKKwlzdHJ1Y3QgdjRsMl9j dHJsICp2Ymxhbms7CisJc3RydWN0IHY0bDJfY3RybCAqaGJsYW5rOworCXN0cnVjdCB2NGwyX2N0 cmwgKnZmbGlwOworCisJdW5zaWduZWQgbG9uZyBsaW5rX2ZyZXFfYml0bWFwOworCisJdTE2IGht YXg7CisJdTMyIHZtYXg7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbXgyODMgKnRvX2lt eDI4MyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2ZfY29u c3Qoc2QsIHN0cnVjdCBpbXgyODMsIHNkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdldF9t b2RlX3RhYmxlKHVuc2lnbmVkIGludCBjb2RlLAorCQkJCSAgY29uc3Qgc3RydWN0IGlteDI4M19t b2RlICoqbW9kZV9saXN0LAorCQkJCSAgdW5zaWduZWQgaW50ICpudW1fbW9kZXMpCit7CisJc3dp dGNoIChjb2RlKSB7CisJY2FzZSBNRURJQV9CVVNfRk1UX1NSR0dCMTJfMVgxMjoKKwljYXNlIE1F RElBX0JVU19GTVRfU0dSQkcxMl8xWDEyOgorCWNhc2UgTUVESUFfQlVTX0ZNVF9TR0JSRzEyXzFY MTI6CisJY2FzZSBNRURJQV9CVVNfRk1UX1NCR0dSMTJfMVgxMjoKKwkJKm1vZGVfbGlzdCA9IHN1 cHBvcnRlZF9tb2Rlc18xMmJpdDsKKwkJKm51bV9tb2RlcyA9IEFSUkFZX1NJWkUoc3VwcG9ydGVk X21vZGVzXzEyYml0KTsKKwkJYnJlYWs7CisKKwljYXNlIE1FRElBX0JVU19GTVRfU1JHR0IxMF8x WDEwOgorCWNhc2UgTUVESUFfQlVTX0ZNVF9TR1JCRzEwXzFYMTA6CisJY2FzZSBNRURJQV9CVVNf Rk1UX1NHQlJHMTBfMVgxMDoKKwljYXNlIE1FRElBX0JVU19GTVRfU0JHR1IxMF8xWDEwOgorCQkq bW9kZV9saXN0ID0gc3VwcG9ydGVkX21vZGVzXzEwYml0OworCQkqbnVtX21vZGVzID0gQVJSQVlf U0laRShzdXBwb3J0ZWRfbW9kZXNfMTBiaXQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqbW9k ZV9saXN0ID0gTlVMTDsKKwkJKm51bV9tb2RlcyA9IDA7CisJCWJyZWFrOworCX0KK30KKworLyog Q2FsY3VsYXRlIHRoZSBQaXhlbCBSYXRlIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1vZGUgKi8KK3N0 YXRpYyB1NjQgaW14MjgzX3BpeGVsX3JhdGUoc3RydWN0IGlteDI4MyAqaW14MjgzLAorCQkJICAg ICBjb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGUpCit7CisJdTY0IGxpbmtfZnJlcXVlbmN5 ID0gbGlua19mcmVxdWVuY2llc1tfX2ZmcyhpbXgyODMtPmxpbmtfZnJlcV9iaXRtYXApXTsKKwl1 bnNpZ25lZCBpbnQgYnBwID0gbW9kZS0+YnBwOworCWNvbnN0IHVuc2lnbmVkIGludCBkZHIgPSAy OyAvKiBEb3VibGUgRGF0YSBSYXRlICovCisJY29uc3QgdW5zaWduZWQgaW50IGxhbmVzID0gNDsg LyogT25seSA0IGxhbmUgc3VwcG9ydCAqLworCXU2NCBudW1lcmF0b3IgPSBsaW5rX2ZyZXF1ZW5j eSAqIGRkciAqIGxhbmVzOworCisJZG9fZGl2KG51bWVyYXRvciwgYnBwKTsKKworCXJldHVybiBu dW1lcmF0b3I7Cit9CisKKy8qIENvbnZlcnQgZnJvbSBhIHZhcmlhYmxlIHBpeGVsX3JhdGUgdG8g NzIgTUh6IGNsb2NrIGN5Y2xlcyAqLworc3RhdGljIHU2NCBpbXgyODNfaW50ZXJuYWxfY2xvY2so dW5zaWduZWQgaW50IHBpeGVsX3JhdGUsIHVuc2lnbmVkIGludCBwaXhlbHMpCit7CisJLyoKKwkg KiBEZXRlcm1pbmUgdGhlIGZvbGxvd2luZyBvcGVyYXRpb24gd2l0aG91dCBvdmVyZmxvdzoKKwkg KiAgICBwaXhlbHMgPSA3MiBNaHogLyBwaXhlbF9yYXRlCisJICoKKwkgKiBUaGUgaW50ZXJuYWwg Y2xvY2sgYXQgNzJNSHogYW5kIFBpeGVsIFJhdGUgKGJldHdlZW4gMjQwIGFuZCA1NzZNSHopCisJ ICogY2FuIGVhc2lseSBvdmVyZmxvdyB0aGlzIGNhbGN1bGF0aW9uLCBzbyBwcmUtZGl2aWRlIHRv IHNpbXBsaWZ5LgorCSAqLworCWNvbnN0IHUzMiBpY2xrX3ByZSA9IDcyOworCWNvbnN0IHUzMiBw Y2xrX3ByZSA9IHBpeGVsX3JhdGUgLyBIWl9QRVJfTUhaOworCXU2NCBudW1lcmF0b3IgPSBwaXhl bHMgKiBpY2xrX3ByZTsKKworCWRvX2RpdihudW1lcmF0b3IsIHBjbGtfcHJlKTsKKworCXJldHVy biBudW1lcmF0b3I7Cit9CisKKy8qIEludGVybmFsIGNsb2NrICg3Mk1IeikgdG8gUGl4ZWwgUmF0 ZSBjbG9jayAoVmFyaWFibGUpICovCitzdGF0aWMgdTY0IGlteDI4M19pY2xrX3RvX3BpeCh1bnNp Z25lZCBpbnQgcGl4ZWxfcmF0ZSwgdW5zaWduZWQgaW50IGN5Y2xlcykKK3sKKwkvKgorCSAqIERl dGVybWluZSB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbiB3aXRob3V0IG92ZXJmbG93OgorCSAqICAg IGN5Y2xlcyAqIHBpeGVsX3JhdGUgLyA3MiBNSHoKKwkgKgorCSAqIFRoZSBpbnRlcm5hbCBjbG9j ayBhdCA3Mk1IeiBhbmQgUGl4ZWwgUmF0ZSAoYmV0d2VlbiAyNDAgYW5kIDU3Nk1IeikKKwkgKiBj YW4gZWFzaWx5IG92ZXJmbG93IHRoaXMgY2FsY3VsYXRpb24sIHNvIHByZS1kaXZpZGUgdG8gc2lt cGxpZnkuCisJICovCisJY29uc3QgdTMyIGljbGtfcHJlID0gNzI7CisJY29uc3QgdTMyIHBjbGtf cHJlID0gcGl4ZWxfcmF0ZSAvIEhaX1BFUl9NSFo7CisJdTY0IG51bWVyYXRvciA9IGN5Y2xlcyAq IHBjbGtfcHJlOworCisJZG9fZGl2KG51bWVyYXRvciwgaWNsa19wcmUpOworCisJcmV0dXJuIG51 bWVyYXRvcjsKK30KKworLyogRGV0ZXJtaW5lIHRoZSBleHBvc3VyZSBiYXNlZCBvbiBjdXJyZW50 IGhtYXgsIHZtYXggYW5kIGEgZ2l2ZW4gU0hSICovCitzdGF0aWMgdTMyIGlteDI4M19leHBvc3Vy ZShzdHJ1Y3QgaW14MjgzICppbXgyODMsCisJCQkgICBjb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUg Km1vZGUsIHU2NCBzaHIpCit7CisJdTMyIHN2ciA9IDA7IC8qIFNWUiBmZWF0dXJlIGlzIG5vdCBj dXJyZW50bHkgc3VwcG9ydGVkICovCisJdTMyIG9mZnNldDsKKwl1NjQgbnVtZXJhdG9yOworCisJ LyogTnVtYmVyIG9mIGNsb2NrcyBwZXIgaW50ZXJuYWwgb2Zmc2V0IHBlcmlvZCAqLworCW9mZnNl dCA9IG1vZGUtPm1vZGUgPT0gSU1YMjgzX01PREVfMCA/IDIwOSA6IDE1NzsKKwludW1lcmF0b3Ig PSAoaW14MjgzLT52bWF4ICogKHN2ciArIDEpIC0gc2hyKSAqIGlteDI4My0+aG1heCArIG9mZnNl dDsKKworCWRvX2RpdihudW1lcmF0b3IsIGlteDI4My0+aG1heCk7CisKKwlyZXR1cm4gY2xhbXAo bnVtZXJhdG9yLCAwLCBVMzJfTUFYKTsKK30KKworc3RhdGljIHZvaWQgaW14MjgzX2V4cG9zdXJl X2xpbWl0cyhzdHJ1Y3QgaW14MjgzICppbXgyODMsCisJCQkJICAgY29uc3Qgc3RydWN0IGlteDI4 M19tb2RlICptb2RlLAorCQkJCSAgIHM2NCAqbWluX2V4cG9zdXJlLCBzNjQgKm1heF9leHBvc3Vy ZSkKK3sKKwl1MzIgc3ZyID0gMDsgLyogU1ZSIGZlYXR1cmUgaXMgbm90IGN1cnJlbnRseSBzdXBw b3J0ZWQgKi8KKwl1NjQgbWluX3NociA9IG1vZGUtPm1pbl9zaHI7CisJLyogR2xvYmFsIFNodXR0 ZXIgaXMgbm90IHN1cHBvcnRlZCAqLworCXU2NCBtYXhfc2hyID0gKHN2ciArIDEpICogaW14Mjgz LT52bWF4IC0gNDsKKworCW1heF9zaHIgPSBtaW4obWF4X3NociwgQklUKDE2KSAtIDEpOworCisJ Km1pbl9leHBvc3VyZSA9IGlteDI4M19leHBvc3VyZShpbXgyODMsIG1vZGUsIG1heF9zaHIpOwor CSptYXhfZXhwb3N1cmUgPSBpbXgyODNfZXhwb3N1cmUoaW14MjgzLCBtb2RlLCBtaW5fc2hyKTsK K30KKworLyoKKyAqIEludGVncmF0aW9uIFRpbWUgW3NdID0gWyB7Vk1BWCB4IChTVlIgKyAxKSDi gJMgKFNIUil9IHggSE1BWCArIG9mZnNldCBdCisgKiAgICAgICAgICAgICAgICAgICAgICAvIFsg NzIgeCAxMF42IF0KKyAqLworc3RhdGljIHUzMiBpbXgyODNfc2hyKHN0cnVjdCBpbXgyODMgKmlt eDI4MywgY29uc3Qgc3RydWN0IGlteDI4M19tb2RlICptb2RlLAorCQkgICAgICB1MzIgZXhwb3N1 cmUpCit7CisJdTMyIHN2ciA9IDA7IC8qIFNWUiBmZWF0dXJlIGlzIG5vdCBjdXJyZW50bHkgc3Vw cG9ydGVkICovCisJdTMyIG9mZnNldDsKKwl1NjQgdGVtcDsKKworCS8qIE51bWJlciBvZiBjbG9j a3MgcGVyIGludGVybmFsIG9mZnNldCBwZXJpb2QgKi8KKwlvZmZzZXQgPSBtb2RlLT5tb2RlID09 IElNWDI4M19NT0RFXzAgPyAyMDkgOiAxNTc7CisJdGVtcCA9ICgodTY0KWV4cG9zdXJlICogaW14 MjgzLT5obWF4IC0gb2Zmc2V0KTsKKwlkb19kaXYodGVtcCwgaW14MjgzLT5obWF4KTsKKworCXJl dHVybiAoaW14MjgzLT52bWF4ICogKHN2ciArIDEpIC0gdGVtcCk7Cit9CisKK3N0YXRpYyBjb25z dCBjaGFyICogY29uc3QgaW14MjgzX3RwZ19tZW51W10gPSB7CisJIkRpc2FibGVkIiwKKwkiQWxs IDAwMGgiLAorCSJBbGwgRkZGaCIsCisJIkFsbCA1NTVoIiwKKwkiQWxsIEFBQWgiLAorCSJIb3Jp em9udGFsIGNvbG9yIGJhcnMiLAorCSJWZXJ0aWNhbCBjb2xvciBiYXJzIiwKK307CisKK3N0YXRp YyBjb25zdCBpbnQgaW14MjgzX3RwZ192YWxbXSA9IHsKKwlJTVgyODNfVFBHX1BBVF9BTExfMDAw LAorCUlNWDI4M19UUEdfUEFUX0FMTF8wMDAsCisJSU1YMjgzX1RQR19QQVRfQUxMX0ZGRiwKKwlJ TVgyODNfVFBHX1BBVF9BTExfNTU1LAorCUlNWDI4M19UUEdfUEFUX0FMTF9BQUEsCisJSU1YMjgz X1RQR19QQVRfSF9DT0xPUl9CQVJTLAorCUlNWDI4M19UUEdfUEFUX1ZfQ09MT1JfQkFSUywKK307 CisKK3N0YXRpYyBpbnQgaW14MjgzX3VwZGF0ZV90ZXN0X3BhdHRlcm4oc3RydWN0IGlteDI4MyAq aW14MjgzLCB1MzIgcGF0dGVybl9pbmRleCkKK3sKKwlpbnQgcmV0OworCisJaWYgKHBhdHRlcm5f aW5kZXggPj0gQVJSQVlfU0laRShpbXgyODNfdHBnX3ZhbCkpCisJCXJldHVybiAtRUlOVkFMOwor CisJaWYgKCFwYXR0ZXJuX2luZGV4KQorCQlyZXR1cm4gY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJ TVgyODNfUkVHX1RQR19DVFJMLCAweDAwLCBOVUxMKTsKKworCXJldCA9IGNjaV93cml0ZShpbXgy ODMtPmNjaSwgSU1YMjgzX1JFR19UUEdfUEFULAorCQkJaW14MjgzX3RwZ192YWxbcGF0dGVybl9p bmRleF0sIE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY2NpX3dy aXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1RQR19DVFJMLAorCQkJIElNWDI4M19UUEdfQ1RS TF9DTEtFTiB8IElNWDI4M19UUEdfQ1RSTF9QQVRFTiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQg aW14MjgzX3NldF9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJc3RydWN0IGlteDI4 MyAqaW14MjgzID0gY29udGFpbmVyX29mKGN0cmwtPmhhbmRsZXIsIHN0cnVjdCBpbXgyODMsCisJ CQkJCSAgICAgY3RybF9oYW5kbGVyKTsKKwljb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGU7 CisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm10OworCWNvbnN0IHN0cnVjdCBpbXgyODNf bW9kZSAqbW9kZV9saXN0OworCXN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZSAqc3RhdGU7CisJdW5z aWduZWQgaW50IG51bV9tb2RlczsKKwl1NjQgc2hyLCBwaXhlbF9yYXRlOworCWludCByZXQgPSAw OworCisJc3RhdGUgPSB2NGwyX3N1YmRldl9nZXRfbG9ja2VkX2FjdGl2ZV9zdGF0ZSgmaW14Mjgz LT5zZCk7CisJZm10ID0gdjRsMl9zdWJkZXZfc3RhdGVfZ2V0X2Zvcm1hdChzdGF0ZSwgMCk7CisK KwlnZXRfbW9kZV90YWJsZShmbXQtPmNvZGUsICZtb2RlX2xpc3QsICZudW1fbW9kZXMpOworCW1v ZGUgPSB2NGwyX2ZpbmRfbmVhcmVzdF9zaXplKG1vZGVfbGlzdCwgbnVtX21vZGVzLCB3aWR0aCwg aGVpZ2h0LAorCQkJCSAgICAgIGZtdC0+d2lkdGgsIGZtdC0+aGVpZ2h0KTsKKworCS8qCisJICog VGhlIFZCTEFOSyBjb250cm9sIG1heSBjaGFuZ2UgdGhlIGxpbWl0cyBvZiB1c2FibGUgZXhwb3N1 cmUsIHNvIGNoZWNrCisJICogYW5kIGFkanVzdCBpZiBuZWNlc3NhcnkuCisJICovCisJaWYgKGN0 cmwtPmlkID09IFY0TDJfQ0lEX1ZCTEFOSykgeworCQkvKiBIb25vdXIgdGhlIFZCTEFOSyBsaW1p dHMgd2hlbiBzZXR0aW5nIGV4cG9zdXJlLiAqLworCQlzNjQgY3VycmVudF9leHBvc3VyZSwgbWF4 X2V4cG9zdXJlLCBtaW5fZXhwb3N1cmU7CisKKwkJaW14MjgzLT52bWF4ID0gbW9kZS0+aGVpZ2h0 ICsgY3RybC0+dmFsOworCisJCWlteDI4M19leHBvc3VyZV9saW1pdHMoaW14MjgzLCBtb2RlLAor CQkJCSAgICAgICAmbWluX2V4cG9zdXJlLCAmbWF4X2V4cG9zdXJlKTsKKworCQljdXJyZW50X2V4 cG9zdXJlID0gaW14MjgzLT5leHBvc3VyZS0+dmFsOworCQljdXJyZW50X2V4cG9zdXJlID0gY2xh bXAoY3VycmVudF9leHBvc3VyZSwgbWluX2V4cG9zdXJlLAorCQkJCQkgbWF4X2V4cG9zdXJlKTsK KworCQlfX3Y0bDJfY3RybF9tb2RpZnlfcmFuZ2UoaW14MjgzLT5leHBvc3VyZSwgbWluX2V4cG9z dXJlLAorCQkJCQkgbWF4X2V4cG9zdXJlLCAxLCBjdXJyZW50X2V4cG9zdXJlKTsKKwl9CisKKwkv KgorCSAqIEFwcGx5aW5nIFY0TDIgY29udHJvbCB2YWx1ZSBvbmx5IGhhcHBlbnMKKwkgKiB3aGVu IHBvd2VyIGlzIHVwIGZvciBzdHJlYW1pbmcKKwkgKi8KKwlpZiAoIXBtX3J1bnRpbWVfZ2V0X2lm X2FjdGl2ZShpbXgyODMtPmRldiwgdHJ1ZSkpCisJCXJldHVybiAwOworCisJc3dpdGNoIChjdHJs LT5pZCkgeworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCXNociA9IGlteDI4M19zaHIoaW14 MjgzLCBtb2RlLCBjdHJsLT52YWwpOworCQlkZXZfZGJnKGlteDI4My0+ZGV2LCAiVjRMMl9DSURf RVhQT1NVUkUgOiAlZCAtIFNIUjogJWxsZFxuIiwKKwkJCWN0cmwtPnZhbCwgc2hyKTsKKwkJcmV0 ID0gY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1NIUiwgc2hyLCBOVUxMKTsKKwkJ YnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0hCTEFOSzoKKwkJcGl4ZWxfcmF0ZSA9IGlteDI4M19w aXhlbF9yYXRlKGlteDI4MywgbW9kZSk7CisJCWlteDI4My0+aG1heCA9IGlteDI4M19pbnRlcm5h bF9jbG9jayhwaXhlbF9yYXRlLCBtb2RlLT53aWR0aCArIGN0cmwtPnZhbCk7CisJCWRldl9kYmco aW14MjgzLT5kZXYsICJWNEwyX0NJRF9IQkxBTksgOiAlZCAgSE1BWCA6ICV1XG4iLAorCQkJY3Ry bC0+dmFsLCBpbXgyODMtPmhtYXgpOworCQlyZXQgPSBjY2lfd3JpdGUoaW14MjgzLT5jY2ksIElN WDI4M19SRUdfSE1BWCwgaW14MjgzLT5obWF4LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0 TDJfQ0lEX1ZCTEFOSzoKKwkJaW14MjgzLT52bWF4ID0gbW9kZS0+aGVpZ2h0ICsgY3RybC0+dmFs OworCQlkZXZfZGJnKGlteDI4My0+ZGV2LCAiVjRMMl9DSURfVkJMQU5LIDogJWQgIFZNQVggOiAl dVxuIiwKKwkJCWN0cmwtPnZhbCwgaW14MjgzLT52bWF4KTsKKwkJcmV0ID0gY2NpX3dyaXRlKGlt eDI4My0+Y2NpLCBJTVgyODNfUkVHX1ZNQVgsIGlteDI4My0+dm1heCwgTlVMTCk7CisJCWJyZWFr OworCisJY2FzZSBWNEwyX0NJRF9BTkFMT0dVRV9HQUlOOgorCQlyZXQgPSBjY2lfd3JpdGUoaW14 MjgzLT5jY2ksIElNWDI4M19SRUdfQU5BTE9HX0dBSU4sIGN0cmwtPnZhbCwgTlVMTCk7CisJCWJy ZWFrOworCisJY2FzZSBWNEwyX0NJRF9ESUdJVEFMX0dBSU46CisJCXJldCA9IGNjaV93cml0ZShp bXgyODMtPmNjaSwgSU1YMjgzX1JFR19ESUdJVEFMX0dBSU4sIGN0cmwtPnZhbCwgTlVMTCk7CisJ CWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJLyoKKwkJICogVkZMSVAgaXMgbWFu YWdlZCBieSBCSVQoMCkgb2YgSU1YMjgzX1JFR19IVFJJTU1JTkcgYWRkcmVzcywgaGVuY2UKKwkJ ICogYm90aCBuZWVkIHRvIGJlIHNldCBzaW11bHRhbmVvdXNseS4KKwkJICovCisJCWlmIChjdHJs LT52YWwpIHsKKwkJCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19IVFJJTU1JTkcs CisJCQkJICBJTVgyODNfSFRSSU1NSU5HX0VOIHwgSU1YMjgzX01EVlJFViwgJnJldCk7CisJCX0g ZWxzZSB7CisJCQljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfSFRSSU1NSU5HLAor CQkJCSAgSU1YMjgzX0hUUklNTUlOR19FTiwgJnJldCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNl IFY0TDJfQ0lEX1RFU1RfUEFUVEVSTjoKKwkJcmV0ID0gaW14MjgzX3VwZGF0ZV90ZXN0X3BhdHRl cm4oaW14MjgzLCBjdHJsLT52YWwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIo aW14MjgzLT5kZXYsICJjdHJsKGlkOjB4JXgsIHZhbDoweCV4KSBpcyBub3QgaGFuZGxlZFxuIiwK KwkJCWN0cmwtPmlkLCBjdHJsLT52YWwpOworCQlicmVhazsKKwl9CisKKwlwbV9ydW50aW1lX3B1 dChpbXgyODMtPmRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IHY0bDJfY3RybF9vcHMgaW14MjgzX2N0cmxfb3BzID0geworCS5zX2N0cmwgPSBpbXgyODNfc2V0 X2N0cmwsCit9OworCitzdGF0aWMgaW50IGlteDI4M19lbnVtX21idXNfY29kZShzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnNkLAorCQkJCSBzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnNkX3N0YXRlLAor CQkJCSBzdHJ1Y3QgdjRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW0gKmNvZGUpCit7CisJaWYgKGNv ZGUtPmluZGV4ID49IEFSUkFZX1NJWkUoaW14MjgzX21idXNfY29kZXMpKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCWNvZGUtPmNvZGUgPSBpbXgyODNfbWJ1c19jb2Rlc1tjb2RlLT5pbmRleF07CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbXgyODNfZW51bV9mcmFtZV9zaXplKHN0cnVj dCB2NGwyX3N1YmRldiAqc2QsCisJCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnNkX3N0 YXRlLAorCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX3NpemVfZW51bSAqZnNlKQorewor CWNvbnN0IHN0cnVjdCBpbXgyODNfbW9kZSAqbW9kZV9saXN0OworCXVuc2lnbmVkIGludCBudW1f bW9kZXM7CisKKwlnZXRfbW9kZV90YWJsZShmc2UtPmNvZGUsICZtb2RlX2xpc3QsICZudW1fbW9k ZXMpOworCisJaWYgKGZzZS0+aW5kZXggPj0gbnVtX21vZGVzKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCWZzZS0+bWluX3dpZHRoID0gbW9kZV9saXN0W2ZzZS0+aW5kZXhdLndpZHRoOworCWZzZS0+ bWF4X3dpZHRoID0gZnNlLT5taW5fd2lkdGg7CisJZnNlLT5taW5faGVpZ2h0ID0gbW9kZV9saXN0 W2ZzZS0+aW5kZXhdLmhlaWdodDsKKwlmc2UtPm1heF9oZWlnaHQgPSBmc2UtPm1pbl9oZWlnaHQ7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW14MjgzX3VwZGF0ZV9pbWFnZV9wYWRf Zm9ybWF0KHN0cnVjdCBpbXgyODMgKmlteDI4MywKKwkJCQkJICAgY29uc3Qgc3RydWN0IGlteDI4 M19tb2RlICptb2RlLAorCQkJCQkgICBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmb3JtYXQp Cit7CisJZm9ybWF0LT53aWR0aCA9IG1vZGUtPndpZHRoOworCWZvcm1hdC0+aGVpZ2h0ID0gbW9k ZS0+aGVpZ2h0OworCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJZm9ybWF0LT5j b2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1JBVzsKKwlmb3JtYXQtPnljYmNyX2VuYyA9IFY0 TDJfWUNCQ1JfRU5DXzYwMTsKKwlmb3JtYXQtPnF1YW50aXphdGlvbiA9IFY0TDJfUVVBTlRJWkFU SU9OX0ZVTExfUkFOR0U7CisJZm9ybWF0LT54ZmVyX2Z1bmMgPSBWNEwyX1hGRVJfRlVOQ19OT05F OworfQorCitzdGF0aWMgaW50IGlteDI4M19pbml0X3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAq c2QsCisJCQkgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0 IGlteDI4MyAqaW14MjgzID0gdG9faW14MjgzKHNkKTsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1l Zm10ICpmb3JtYXQ7CisJY29uc3Qgc3RydWN0IGlteDI4M19tb2RlICptb2RlOworCXN0cnVjdCB2 NGwyX3JlY3QgKmNyb3A7CisKKwkvKiBJbml0aWFsaXplIHRyeV9mbXQgKi8KKwlmb3JtYXQgPSB2 NGwyX3N1YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHN0YXRlLCBJTUFHRV9QQUQpOworCisJbW9kZSA9 ICZzdXBwb3J0ZWRfbW9kZXNfMTJiaXRbMF07CisJZm9ybWF0LT5jb2RlID0gTUVESUFfQlVTX0ZN VF9TUkdHQjEyXzFYMTI7CisJaW14MjgzX3VwZGF0ZV9pbWFnZV9wYWRfZm9ybWF0KGlteDI4Mywg bW9kZSwgZm9ybWF0KTsKKworCS8qIEluaXRpYWxpemUgY3JvcCByZWN0YW5nbGUgdG8gbW9kZSBk ZWZhdWx0ICovCisJY3JvcCA9IHY0bDJfc3ViZGV2X3N0YXRlX2dldF9jcm9wKHN0YXRlLCBJTUFH RV9QQUQpOworCSpjcm9wID0gbW9kZS0+Y3JvcDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCBpbXgyODNfc2V0X2ZyYW1pbmdfbGltaXRzKHN0cnVjdCBpbXgyODMgKmlteDI4MywKKwkJ CQkgICAgICBjb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGUpCit7CisJdTY0IHBpeGVsX3Jh dGUgPSBpbXgyODNfcGl4ZWxfcmF0ZShpbXgyODMsIG1vZGUpOworCXU2NCBtaW5faGJsYW5rLCBt YXhfaGJsYW5rLCBkZWZfaGJsYW5rOworCisJLyogSW5pdGlhbGlzZSBobWF4IGFuZCB2bWF4IGZv ciBleHBvc3VyZSBjYWxjdWxhdGlvbnMgKi8KKwlpbXgyODMtPmhtYXggPSBpbXgyODNfaW50ZXJu YWxfY2xvY2socGl4ZWxfcmF0ZSwgbW9kZS0+ZGVmYXVsdF9obWF4KTsKKwlpbXgyODMtPnZtYXgg PSBtb2RlLT5kZWZhdWx0X3ZtYXg7CisKKwkvKgorCSAqIEhvcml6b250YWwgQmxhbmtpbmcKKwkg KiBDb252ZXJ0IHRoZSBITUFYX01BWCAoNzJNSHopIHRvIFBpeGVsIHJhdGUgdmFsdWVzIGZvciBI QkxBTktfTUFYCisJICovCisJbWluX2hibGFuayA9IG1vZGUtPm1pbl9obWF4IC0gbW9kZS0+d2lk dGg7CisJbWF4X2hibGFuayA9IGlteDI4M19pY2xrX3RvX3BpeChwaXhlbF9yYXRlLCBJTVgyODNf SE1BWF9NQVgpIC0gbW9kZS0+d2lkdGg7CisJZGVmX2hibGFuayA9IG1vZGUtPmRlZmF1bHRfaG1h eCAtIG1vZGUtPndpZHRoOworCV9fdjRsMl9jdHJsX21vZGlmeV9yYW5nZShpbXgyODMtPmhibGFu aywgbWluX2hibGFuaywgbWF4X2hibGFuaywgMSwKKwkJCQkgZGVmX2hibGFuayk7CisJX192NGwy X2N0cmxfc19jdHJsKGlteDI4My0+aGJsYW5rLCBkZWZfaGJsYW5rKTsKKworCS8qIFZlcnRpY2Fs IEJsYW5raW5nICovCisJX192NGwyX2N0cmxfbW9kaWZ5X3JhbmdlKGlteDI4My0+dmJsYW5rLCBt b2RlLT5taW5fdm1heCAtIG1vZGUtPmhlaWdodCwKKwkJCQkgSU1YMjgzX1ZNQVhfTUFYIC0gbW9k ZS0+aGVpZ2h0LCAxLAorCQkJCSBtb2RlLT5kZWZhdWx0X3ZtYXggLSBtb2RlLT5oZWlnaHQpOwor CV9fdjRsMl9jdHJsX3NfY3RybChpbXgyODMtPnZibGFuaywgbW9kZS0+ZGVmYXVsdF92bWF4IC0g bW9kZS0+aGVpZ2h0KTsKK30KKworc3RhdGljIGludCBpbXgyODNfc2V0X3BhZF9mb3JtYXQoc3Ry dWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlICpzZF9z dGF0ZSwKKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB2 NGwyX21idXNfZnJhbWVmbXQgKmZvcm1hdDsKKwljb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1v ZGU7CisJc3RydWN0IGlteDI4MyAqaW14MjgzID0gdG9faW14MjgzKHNkKTsKKwljb25zdCBzdHJ1 Y3QgaW14MjgzX21vZGUgKm1vZGVfbGlzdDsKKwl1bnNpZ25lZCBpbnQgbnVtX21vZGVzOworCisJ Z2V0X21vZGVfdGFibGUoZm10LT5mb3JtYXQuY29kZSwgJm1vZGVfbGlzdCwgJm51bV9tb2Rlcyk7 CisKKwltb2RlID0gdjRsMl9maW5kX25lYXJlc3Rfc2l6ZShtb2RlX2xpc3QsIG51bV9tb2Rlcywg d2lkdGgsIGhlaWdodCwKKwkJCQkgICAgICBmbXQtPmZvcm1hdC53aWR0aCwgZm10LT5mb3JtYXQu aGVpZ2h0KTsKKworCWZtdC0+Zm9ybWF0LndpZHRoID0gbW9kZS0+d2lkdGg7CisJZm10LT5mb3Jt YXQuaGVpZ2h0ID0gbW9kZS0+aGVpZ2h0OworCWZtdC0+Zm9ybWF0LmZpZWxkID0gVjRMMl9GSUVM RF9OT05FOworCWZtdC0+Zm9ybWF0LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfUkFXOwor CWZtdC0+Zm9ybWF0LnljYmNyX2VuYyA9IFY0TDJfWUNCQ1JfRU5DXzYwMTsKKwlmbXQtPmZvcm1h dC5xdWFudGl6YXRpb24gPSBWNEwyX1FVQU5USVpBVElPTl9GVUxMX1JBTkdFOworCWZtdC0+Zm9y bWF0LnhmZXJfZnVuYyA9IFY0TDJfWEZFUl9GVU5DX05PTkU7CisKKwlmb3JtYXQgPSB2NGwyX3N1 YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHNkX3N0YXRlLCAwKTsKKworCWlmIChmbXQtPndoaWNoID09 IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUpCisJCWlteDI4M19zZXRfZnJhbWluZ19saW1pdHMo aW14MjgzLCBtb2RlKTsKKworCSpmb3JtYXQgPSBmbXQtPmZvcm1hdDsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGlteDI4M19zdGFuZGJ5X2NhbmNlbChzdHJ1Y3QgaW14MjgzICppbXgy ODMpCit7CisJdW5zaWduZWQgaW50IGxpbmtfZnJlcV9pZHg7CisJaW50IHJldCA9IDA7CisKKwlj Y2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfU1RBTkRCWSwKKwkJICBJTVgyODNfU1RC TE9HSUMgfCBJTVgyODNfU1RCRFYsICZyZXQpOworCisJLyogQ29uZmlndXJlIFBMTCBjbG9ja3Mg YmFzZWQgb24gdGhlIHhjbGsgKi8KKwljY2lfbXVsdGlfcmVnX3dyaXRlKGlteDI4My0+Y2NpLCBp bXgyODMtPmZyZXEtPnJlZ3MsCisJCQkgICAgaW14MjgzLT5mcmVxLT5yZWdfY291bnQsICZyZXQp OworCisJZGV2X2RiZyhpbXgyODMtPmRldiwgIlVzaW5nIGNsayBmcmVxICVsZCBNSHoiLAorCQlp bXgyODMtPmZyZXEtPm1oeiAvIEhaX1BFUl9NSFopOworCisJLyogSW5pdGlhbGlzZSBjb21tdW5p Y2F0aW9uICovCisJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1BMU1RNRzA4LCBJ TVgyODNfUExTVE1HMDhfVkFMLCAmcmV0KTsKKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4 M19SRUdfUExTVE1HMDIsIElNWDI4M19QTFNUTUcwMl9WQUwsICZyZXQpOworCisJLyogRW5hYmxl IFBMTCAqLworCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19TVEJQTCwgSU1YMjgz X1NUQlBMX05PUk1BTCwgJnJldCk7CisKKwkvKiBDb25maWd1cmUgdGhlIE1JUEkgbGluayBzcGVl ZCAqLworCWxpbmtfZnJlcV9pZHggPSBfX2ZmcyhpbXgyODMtPmxpbmtfZnJlcV9iaXRtYXApOwor CWNjaV9tdWx0aV9yZWdfd3JpdGUoaW14MjgzLT5jY2ksIGxpbmtfZnJlcV9yZWdsaXN0W2xpbmtf ZnJlcV9pZHhdLnJlZ3MsCisJCQkgICAgbGlua19mcmVxX3JlZ2xpc3RbbGlua19mcmVxX2lkeF0u bnVtX29mX3JlZ3MsCisJCQkgICAgJnJldCk7CisKKwkvKiAxc3QgU3RhYmlsaXNhdGlvbiBwZXJp b2Qgb2YgMSBtcyBvciBtb3JlICovCisJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOworCisJLyog QWN0aXZhdGUgKi8KKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfU1RBTkRCWSwg SU1YMjgzX0FDVElWRSwgJnJldCk7CisKKwkvKiAybmQgU3RhYmlsaXNhdGlvbiBwZXJpb2Qgb2Yg MTltcyBvciBtb3JlICovCisJdXNsZWVwX3JhbmdlKDE5MDAwLCAyMDAwMCk7CisKKwljY2lfd3Jp dGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfQ0xBTVAsIElNWDI4M19DTFBTUVJTVCwgJnJldCk7 CisJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1hNU1RBLCAwLCAmcmV0KTsKKwlj Y2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfU1lOQ0RSViwgSU1YMjgzX1NZTkNEUlZf WEhTX1hWUywgJnJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBTdGFydCBzdHJlYW1pbmcg Ki8KK3N0YXRpYyBpbnQgaW14MjgzX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgaW14MjgzICppbXgy ODMsCisJCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnN0YXRlKQoreworCWNvbnN0IHN0 cnVjdCBpbXgyODNfcmVhZG91dF9tb2RlICpyZWFkb3V0OworCWNvbnN0IHN0cnVjdCBpbXgyODNf bW9kZSAqbW9kZTsKKwljb25zdCBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmbXQ7CisJY29u c3Qgc3RydWN0IGlteDI4M19tb2RlICptb2RlX2xpc3Q7CisJdW5zaWduZWQgaW50IG51bV9tb2Rl czsKKwl1MzIgdl93aWRjdXQ7CisJczMyIHZfcG9zOworCXUzMiB3cml0ZV92X3NpemU7CisJdTMy IHlfb3V0X3NpemU7CisJaW50IHJldCA9IDA7CisKKwlmbXQgPSB2NGwyX3N1YmRldl9zdGF0ZV9n ZXRfZm9ybWF0KHN0YXRlLCAwKTsKKwlnZXRfbW9kZV90YWJsZShmbXQtPmNvZGUsICZtb2RlX2xp c3QsICZudW1fbW9kZXMpOworCW1vZGUgPSB2NGwyX2ZpbmRfbmVhcmVzdF9zaXplKG1vZGVfbGlz dCwgbnVtX21vZGVzLCB3aWR0aCwgaGVpZ2h0LAorCQkJCSAgICAgIGZtdC0+d2lkdGgsIGZtdC0+ aGVpZ2h0KTsKKworCXJldCA9IGlteDI4M19zdGFuZGJ5X2NhbmNlbChpbXgyODMpOworCWlmIChy ZXQpIHsKKwkJZGV2X2VycihpbXgyODMtPmRldiwgImZhaWxlZCB0byBjYW5jZWwgc3RhbmRieVxu Iik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBTZXQgdGhlIHJlYWRvdXQgbW9kZSBy ZWdpc3RlcnMuCisJICogTURTRUwzIGFuZCBNRFNFTDQgYXJlIHVwZGF0ZWQgdG8gZW5hYmxlIEFy Yml0cmFyeSBWZXJ0aWNhbCBDcm9wcGluZy4KKwkgKi8KKwlyZWFkb3V0ID0gJmlteDI4M19yZWFk b3V0X21vZGVzW21vZGUtPm1vZGVdOworCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JF R19NRFNFTDEsIHJlYWRvdXQtPm1kc2VsMSwgJnJldCk7CisJY2NpX3dyaXRlKGlteDI4My0+Y2Np LCBJTVgyODNfUkVHX01EU0VMMiwgcmVhZG91dC0+bWRzZWwyLCAmcmV0KTsKKwljY2lfd3JpdGUo aW14MjgzLT5jY2ksIElNWDI4M19SRUdfTURTRUwzLAorCQkgIHJlYWRvdXQtPm1kc2VsMyB8IElN WDI4M19NRFNFTDNfVkNST1BfRU4sICZyZXQpOworCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1Y MjgzX1JFR19NRFNFTDQsCisJCSAgcmVhZG91dC0+bWRzZWw0IHwgSU1YMjgzX01EU0VMNF9WQ1JP UF9FTiwgJnJldCk7CisKKwkvKiBNb2RlIDFTIHNwZWNpZmljIGVudHJpZXMgZnJvbSB0aGUgUmVh ZG91dCBEcml2ZSBNb2RlIFRhYmxlcyAqLworCWlmIChtb2RlLT5tb2RlID09IElNWDI4M19NT0RF XzFTKSB7CisJCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19NRFNFTDcsIDB4MDEs ICZyZXQpOworCQljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfTURTRUwxOCwgMHgx MDk4LCAmcmV0KTsKKwl9CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaW14MjgzLT5kZXYsICJm YWlsZWQgdG8gc2V0IHJlYWRvdXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEluaXRp YWxpc2UgU1ZSLiBVbnN1cHBvcnRlZCBmb3Igbm93IC0gQWx3YXlzIDAgKi8KKwljY2lfd3JpdGUo aW14MjgzLT5jY2ksIElNWDI4M19SRUdfU1ZSLCAweDAwLCAmcmV0KTsKKworCWRldl9kYmcoaW14 MjgzLT5kZXYsICJNb2RlOiBTaXplICVkIHggJWRcbiIsIG1vZGUtPndpZHRoLCBtb2RlLT5oZWln aHQpOworCWRldl9kYmcoaW14MjgzLT5kZXYsICJBbmFsb2d1ZSBDcm9wIChpbiB0aGUgbW9kZSkg JWQsJWQgJWR4JWRcbiIsCisJCW1vZGUtPmNyb3AubGVmdCwKKwkJbW9kZS0+Y3JvcC50b3AsCisJ CW1vZGUtPmNyb3Aud2lkdGgsCisJCW1vZGUtPmNyb3AuaGVpZ2h0KTsKKworCXlfb3V0X3NpemUg PSBtb2RlLT5jcm9wLmhlaWdodCAvIG1vZGUtPnZiaW5fcmF0aW87CisJd3JpdGVfdl9zaXplID0g eV9vdXRfc2l6ZSArIG1vZGUtPnZlcnRpY2FsX29iOworCS8qCisJICogY3JvcHBpbmcgc3RhcnQg cG9zaXRpb24gPSAoVldJTlBPUyDigJMgVnN0KSDDlyAyCisJICogY3JvcHBpbmcgd2lkdGggPSBW ZWZmIOKAkyAoVldJRENVVCDigJMgVmN0KSDDlyAyCisJICovCisJdl9wb3MgPSBpbXgyODMtPnZm bGlwLT52YWwgPworCQkoKC1tb2RlLT5jcm9wLnRvcCAvIG1vZGUtPnZiaW5fcmF0aW8pIC8gMikg KyBtb2RlLT52c3QgOgorCQkoKG1vZGUtPmNyb3AudG9wIC8gbW9kZS0+dmJpbl9yYXRpbykgLyAy KSAgKyBtb2RlLT52c3Q7CisJdl93aWRjdXQgPSAoKG1vZGUtPnZlZmYgLSB5X291dF9zaXplKSAv IDIpICsgbW9kZS0+dmN0OworCisJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1lf T1VUX1NJWkUsIHlfb3V0X3NpemUsICZyZXQpOworCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1Y MjgzX1JFR19XUklURV9WU0laRSwgd3JpdGVfdl9zaXplLCAmcmV0KTsKKwljY2lfd3JpdGUoaW14 MjgzLT5jY2ksIElNWDI4M19SRUdfVldJRENVVCwgdl93aWRjdXQsICZyZXQpOworCWNjaV93cml0 ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19WV0lOUE9TLCB2X3BvcywgJnJldCk7CisKKwljY2lf d3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfT0JfU0laRV9WLCBtb2RlLT52ZXJ0aWNhbF9v YiwgJnJldCk7CisKKwkvKiBUT0RPOiBWYWxpZGF0ZSBtb2RlLT5jcm9wIGlzIGZ1bGx5IGNvbnRh aW5lZCB3aXRoaW4gaW14MjgzX25hdGl2ZV9hcmVhICovCisJY2NpX3dyaXRlKGlteDI4My0+Y2Np LCBJTVgyODNfUkVHX0hUUklNTUlOR19TVEFSVCwgbW9kZS0+Y3JvcC5sZWZ0LCAmcmV0KTsKKwlj Y2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfSFRSSU1NSU5HX0VORCwKKwkJICBtb2Rl LT5jcm9wLmxlZnQgKyBtb2RlLT5jcm9wLndpZHRoLCAmcmV0KTsKKworCS8qIERpc2FibGUgZW1i ZWRkZWQgZGF0YSAqLworCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19FQkRfWF9P VVRfU0laRSwgMCwgJnJldCk7CisKKwkvKiBBcHBseSBjdXN0b21pemVkIHZhbHVlcyBmcm9tIGNv bnRyb2xzIChITUFYL1ZNQVgvU0hSKSAqLworCXJldCA9ICBfX3Y0bDJfY3RybF9oYW5kbGVyX3Nl dHVwKGlteDI4My0+c2QuY3RybF9oYW5kbGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQgaW14MjgzX2VuYWJsZV9zdHJlYW1zKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJ IHN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZSAqc3RhdGUsIHUzMiBwYWQsCisJCQkJIHU2NCBzdHJl YW1zX21hc2spCit7CisJc3RydWN0IGlteDI4MyAqaW14MjgzID0gdG9faW14MjgzKHNkKTsKKwlp bnQgcmV0OworCisJaWYgKHBhZCAhPSBJTUFHRV9QQUQpCisJCXJldHVybiAtRUlOVkFMOworCisJ cmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhpbXgyODMtPmRldik7CisJaWYgKHJldCA8IDApIHsK KwkJcG1fcnVudGltZV9wdXRfbm9pZGxlKGlteDI4My0+ZGV2KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlyZXQgPSBpbXgyODNfc3RhcnRfc3RyZWFtaW5nKGlteDI4Mywgc3RhdGUpOworCWlmIChy ZXQpCisJCWdvdG8gZXJyX3JwbV9wdXQ7CisKKwlyZXR1cm4gMDsKKworZXJyX3JwbV9wdXQ6CisJ cG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShpbXgyODMtPmRldik7CisJcG1fcnVudGltZV9wdXRf YXV0b3N1c3BlbmQoaW14MjgzLT5kZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBpbXgyODNfZGlzYWJsZV9zdHJlYW1zKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJICBz dHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnN0YXRlLCB1MzIgcGFkLAorCQkJCSAgdTY0IHN0cmVh bXNfbWFzaykKK3sKKwlzdHJ1Y3QgaW14MjgzICppbXgyODMgPSB0b19pbXgyODMoc2QpOworCWlu dCByZXQ7CisKKwlpZiAocGFkICE9IElNQUdFX1BBRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwly ZXQgPSBjY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfU1RBTkRCWSwgSU1YMjgzX1NU QkxPR0lDLCBOVUxMKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAiRmFpbGVk IHRvIHN0b3Agc3RyZWFtXG4iKTsKKworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koaW14Mjgz LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKGlteDI4My0+ZGV2KTsKKworCXJl dHVybiByZXQ7Cit9CisKKy8qIFBvd2VyL2Nsb2NrIG1hbmFnZW1lbnQgZnVuY3Rpb25zICovCitz dGF0aWMgaW50IGlteDI4M19wb3dlcl9vbihzdHJ1Y3QgaW14MjgzICppbXgyODMpCit7CisJaW50 IHJldDsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGlteDI4M19z dXBwbHlfbmFtZSksCisJCQkJICAgIGlteDI4My0+c3VwcGxpZXMpOworCWlmIChyZXQpIHsKKwkJ ZGV2X2VycihpbXgyODMtPmRldiwgImZhaWxlZCB0byBlbmFibGUgcmVndWxhdG9yc1xuIik7CisJ CXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGlteDI4My0+eGNs ayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJs ZSBjbG9ja1xuIik7CisJCWdvdG8gcmVnX29mZjsKKwl9CisKKwlncGlvZF9zZXRfdmFsdWVfY2Fu c2xlZXAoaW14MjgzLT5yZXNldF9ncGlvLCAwKTsKKworCXVzbGVlcF9yYW5nZShJTVgyODNfWENM Ul9NSU5fREVMQVlfVVMsCisJCSAgICAgSU1YMjgzX1hDTFJfTUlOX0RFTEFZX1VTICsgSU1YMjgz X1hDTFJfREVMQVlfUkFOR0VfVVMpOworCisJcmV0dXJuIDA7CisKK3JlZ19vZmY6CisJcmVndWxh dG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGlteDI4M19zdXBwbHlfbmFtZSksIGlteDI4My0+ c3VwcGxpZXMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW14MjgzX3Bvd2VyX29m ZihzdHJ1Y3QgaW14MjgzICppbXgyODMpCit7CisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGlt eDI4My0+cmVzZXRfZ3BpbywgMSk7CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpF KGlteDI4M19zdXBwbHlfbmFtZSksIGlteDI4My0+c3VwcGxpZXMpOworCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShpbXgyODMtPnhjbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW14 MjgzX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdjRsMl9z dWJkZXYgKnNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGlteDI4MyAqaW14Mjgz ID0gdG9faW14MjgzKHNkKTsKKworCXJldHVybiBpbXgyODNfcG93ZXJfb24oaW14MjgzKTsKK30K Kworc3RhdGljIGludCBpbXgyODNfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikK K3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3Ry dWN0IGlteDI4MyAqaW14MjgzID0gdG9faW14MjgzKHNkKTsKKworCWlteDI4M19wb3dlcl9vZmYo aW14MjgzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlteDI4M19nZXRfcmVndWxh dG9ycyhzdHJ1Y3QgaW14MjgzICppbXgyODMpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbXgyODNfc3VwcGx5X25hbWUpOyBpKyspCisJCWlteDI4 My0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gaW14MjgzX3N1cHBseV9uYW1lW2ldOworCisJcmV0dXJu IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KGlteDI4My0+ZGV2LAorCQkJCSAgICAgICBBUlJBWV9T SVpFKGlteDI4M19zdXBwbHlfbmFtZSksCisJCQkJICAgICAgIGlteDI4My0+c3VwcGxpZXMpOwor fQorCisvKiBWZXJpZnkgY2hpcCBJRCAqLworc3RhdGljIGludCBpbXgyODNfaWRlbnRpZnlfbW9k dWxlKHN0cnVjdCBpbXgyODMgKmlteDI4MykKK3sKKwlpbnQgcmV0OworCXU2NCB2YWw7CisKKwly ZXQgPSBjY2lfcmVhZChpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19DSElQX0lELCAmdmFsLCBOVUxM KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaW14MjgzLT5kZXYsICJmYWlsZWQgdG8gcmVhZCBj aGlwIGlkICV4LCB3aXRoIGVycm9yICVkXG4iLAorCQkJSU1YMjgzX0NISVBfSUQsIHJldCk7CisJ CXJldHVybiByZXQ7CisJfQorCisJaWYgKHZhbCAhPSBJTVgyODNfQ0hJUF9JRCkgeworCQlkZXZf ZXJyKGlteDI4My0+ZGV2LCAiY2hpcCBpZCBtaXNtYXRjaDogJXghPSVsbHhcbiIsCisJCQlJTVgy ODNfQ0hJUF9JRCwgdmFsKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgaW14MjgzX2dldF9zZWxlY3Rpb24oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwK KwkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnNkX3N0YXRlLAorCQkJCXN0cnVjdCB2NGwy X3N1YmRldl9zZWxlY3Rpb24gKnNlbCkKK3sKKwlzd2l0Y2ggKHNlbC0+dGFyZ2V0KSB7CisJY2Fz ZSBWNEwyX1NFTF9UR1RfQ1JPUDogeworCQlzZWwtPnIgPSAqdjRsMl9zdWJkZXZfc3RhdGVfZ2V0 X2Nyb3Aoc2Rfc3RhdGUsIDApOworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFY0TDJfU0VMX1RH VF9OQVRJVkVfU0laRToKKwkJc2VsLT5yID0gaW14MjgzX25hdGl2ZV9hcmVhOworCQlyZXR1cm4g MDsKKworCWNhc2UgVjRMMl9TRUxfVEdUX0NST1BfREVGQVVMVDoKKwljYXNlIFY0TDJfU0VMX1RH VF9DUk9QX0JPVU5EUzoKKwkJc2VsLT5yID0gaW14MjgzX2FjdGl2ZV9hcmVhOworCQlyZXR1cm4g MDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgaW14MjgzX2NvcmVfb3BzID0geworCS5zdWJzY3Jp YmVfZXZlbnQgPSB2NGwyX2N0cmxfc3ViZGV2X3N1YnNjcmliZV9ldmVudCwKKwkudW5zdWJzY3Jp YmVfZXZlbnQgPSB2NGwyX2V2ZW50X3N1YmRldl91bnN1YnNjcmliZSwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGlteDI4M192aWRlb19vcHMgPSB7CisJ LnNfc3RyZWFtID0gdjRsMl9zdWJkZXZfc19zdHJlYW1faGVscGVyLAorfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfb3BzIGlteDI4M19wYWRfb3BzID0geworCS5lbnVt X21idXNfY29kZSA9IGlteDI4M19lbnVtX21idXNfY29kZSwKKwkuZ2V0X2ZtdCA9IHY0bDJfc3Vi ZGV2X2dldF9mbXQsCisJLnNldF9mbXQgPSBpbXgyODNfc2V0X3BhZF9mb3JtYXQsCisJLmdldF9z ZWxlY3Rpb24gPSBpbXgyODNfZ2V0X3NlbGVjdGlvbiwKKwkuZW51bV9mcmFtZV9zaXplID0gaW14 MjgzX2VudW1fZnJhbWVfc2l6ZSwKKwkuZW5hYmxlX3N0cmVhbXMgPSBpbXgyODNfZW5hYmxlX3N0 cmVhbXMsCisJLmRpc2FibGVfc3RyZWFtcyA9IGlteDI4M19kaXNhYmxlX3N0cmVhbXMsCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2ludGVybmFsX29wcyBpbXgyODNfaW50 ZXJuYWxfb3BzID0geworCS5pbml0X3N0YXRlID0gaW14MjgzX2luaXRfc3RhdGUsCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBpbXgyODNfc3ViZGV2X29wcyA9IHsK KwkuY29yZSA9ICZpbXgyODNfY29yZV9vcHMsCisJLnZpZGVvID0gJmlteDI4M192aWRlb19vcHMs CisJLnBhZCA9ICZpbXgyODNfcGFkX29wcywKK307CisKKy8qIEluaXRpYWxpemUgY29udHJvbCBo YW5kbGVycyAqLworc3RhdGljIGludCBpbXgyODNfaW5pdF9jb250cm9scyhzdHJ1Y3QgaW14Mjgz ICppbXgyODMpCit7CisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpjdHJsX2hkbHI7CisJc3Ry dWN0IHY0bDJfZndub2RlX2RldmljZV9wcm9wZXJ0aWVzIHByb3BzOworCXN0cnVjdCB2NGwyX2N0 cmwgKmxpbmtfZnJlcTsKKwljb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGUgPSAmc3VwcG9y dGVkX21vZGVzXzEyYml0WzBdOworCXU2NCBtaW5faGJsYW5rLCBtYXhfaGJsYW5rLCBkZWZfaGJs YW5rOworCXU2NCBwaXhlbF9yYXRlOworCWludCByZXQ7CisKKwljdHJsX2hkbHIgPSAmaW14Mjgz LT5jdHJsX2hhbmRsZXI7CisJcmV0ID0gdjRsMl9jdHJsX2hhbmRsZXJfaW5pdChjdHJsX2hkbHIs IDE2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBDcmVhdGUgdGhlIGNv bnRyb2xzIGhlcmUsIGJ1dCBtb2RlIHNwZWNpZmljIGxpbWl0cyBhcmUgc2V0dXAKKwkgKiBpbiB0 aGUgaW14MjgzX3NldF9mcmFtaW5nX2xpbWl0cygpIGNhbGwgYmVsb3cuCisJICovCisKKwkvKiBC eSBkZWZhdWx0LCBQSVhFTF9SQVRFIGlzIHJlYWQgb25seSAqLworCXBpeGVsX3JhdGUgPSBpbXgy ODNfcGl4ZWxfcmF0ZShpbXgyODMsIG1vZGUpOworCXY0bDJfY3RybF9uZXdfc3RkKGN0cmxfaGRs ciwgJmlteDI4M19jdHJsX29wcywKKwkJCSAgVjRMMl9DSURfUElYRUxfUkFURSwgcGl4ZWxfcmF0 ZSwKKwkJCSAgcGl4ZWxfcmF0ZSwgMSwgcGl4ZWxfcmF0ZSk7CisKKwlsaW5rX2ZyZXEgPSB2NGwy X2N0cmxfbmV3X2ludF9tZW51KGN0cmxfaGRsciwgJmlteDI4M19jdHJsX29wcywKKwkJCQkJICAg VjRMMl9DSURfTElOS19GUkVRLAorCQkJCQkgICBfX2ZscyhpbXgyODMtPmxpbmtfZnJlcV9iaXRt YXApLAorCQkJCQkgICBfX2ZmcyhpbXgyODMtPmxpbmtfZnJlcV9iaXRtYXApLAorCQkJCQkgICBs aW5rX2ZyZXF1ZW5jaWVzKTsKKwlpZiAobGlua19mcmVxKQorCQlsaW5rX2ZyZXEtPmZsYWdzIHw9 IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTsKKworCS8qIEluaXRpYWxpc2UgdmJsYW5rL2hibGFu ay9leHBvc3VyZSBiYXNlZCBvbiB0aGUgY3VycmVudCBtb2RlLiAqLworCWlteDI4My0+dmJsYW5r ID0gdjRsMl9jdHJsX25ld19zdGQoY3RybF9oZGxyLCAmaW14MjgzX2N0cmxfb3BzLAorCQkJCQkg ICBWNEwyX0NJRF9WQkxBTkssCisJCQkJCSAgIG1vZGUtPm1pbl92bWF4IC0gbW9kZS0+aGVpZ2h0 LAorCQkJCQkgICBJTVgyODNfVk1BWF9NQVgsIDEsCisJCQkJCSAgIG1vZGUtPmRlZmF1bHRfdm1h eCAtIG1vZGUtPmhlaWdodCk7CisKKwltaW5faGJsYW5rID0gbW9kZS0+bWluX2htYXggLSBtb2Rl LT53aWR0aDsKKwltYXhfaGJsYW5rID0gaW14MjgzX2ljbGtfdG9fcGl4KHBpeGVsX3JhdGUsIElN WDI4M19ITUFYX01BWCkgLSBtb2RlLT53aWR0aDsKKwlkZWZfaGJsYW5rID0gbW9kZS0+ZGVmYXVs dF9obWF4IC0gbW9kZS0+d2lkdGg7CisJaW14MjgzLT5oYmxhbmsgPSB2NGwyX2N0cmxfbmV3X3N0 ZChjdHJsX2hkbHIsICZpbXgyODNfY3RybF9vcHMsCisJCQkJCSAgIFY0TDJfQ0lEX0hCTEFOSywg bWluX2hibGFuaywgbWF4X2hibGFuaywKKwkJCQkJICAgMSwgZGVmX2hibGFuayk7CisKKwlpbXgy ODMtPmV4cG9zdXJlID0gdjRsMl9jdHJsX25ld19zdGQoY3RybF9oZGxyLCAmaW14MjgzX2N0cmxf b3BzLAorCQkJCQkgICAgIFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJCQkgICAgIElNWDI4M19FWFBP U1VSRV9NSU4sCisJCQkJCSAgICAgSU1YMjgzX0VYUE9TVVJFX01BWCwKKwkJCQkJICAgICBJTVgy ODNfRVhQT1NVUkVfU1RFUCwKKwkJCQkJICAgICBJTVgyODNfRVhQT1NVUkVfREVGQVVMVCk7CisK Kwl2NGwyX2N0cmxfbmV3X3N0ZChjdHJsX2hkbHIsICZpbXgyODNfY3RybF9vcHMsIFY0TDJfQ0lE X0FOQUxPR1VFX0dBSU4sCisJCQkgIElNWDI4M19BTkFfR0FJTl9NSU4sIElNWDI4M19BTkFfR0FJ Tl9NQVgsCisJCQkgIElNWDI4M19BTkFfR0FJTl9TVEVQLCBJTVgyODNfQU5BX0dBSU5fREVGQVVM VCk7CisKKwl2NGwyX2N0cmxfbmV3X3N0ZChjdHJsX2hkbHIsICZpbXgyODNfY3RybF9vcHMsIFY0 TDJfQ0lEX0RJR0lUQUxfR0FJTiwKKwkJCSAgSU1YMjgzX0RHVExfR0FJTl9NSU4sIElNWDI4M19E R1RMX0dBSU5fTUFYLAorCQkJICBJTVgyODNfREdUTF9HQUlOX1NURVAsIElNWDI4M19ER1RMX0dB SU5fREVGQVVMVCk7CisKKwlpbXgyODMtPnZmbGlwID0gdjRsMl9jdHJsX25ld19zdGQoY3RybF9o ZGxyLCAmaW14MjgzX2N0cmxfb3BzLCBWNEwyX0NJRF9WRkxJUCwKKwkJCQkJICAwLCAxLCAxLCAw KTsKKwlpZiAoaW14MjgzLT52ZmxpcCkKKwkJaW14MjgzLT52ZmxpcC0+ZmxhZ3MgfD0gVjRMMl9D VFJMX0ZMQUdfTU9ESUZZX0xBWU9VVDsKKworCXY0bDJfY3RybF9uZXdfc3RkX21lbnVfaXRlbXMo Y3RybF9oZGxyLCAmaW14MjgzX2N0cmxfb3BzLAorCQkJCSAgICAgVjRMMl9DSURfVEVTVF9QQVRU RVJOLAorCQkJCSAgICAgQVJSQVlfU0laRShpbXgyODNfdHBnX21lbnUpIC0gMSwKKwkJCQkgICAg IDAsIDAsIGlteDI4M190cGdfbWVudSk7CisKKwlpZiAoY3RybF9oZGxyLT5lcnJvcikgeworCQly ZXQgPSBjdHJsX2hkbHItPmVycm9yOworCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAiY29udHJvbCBp bml0IGZhaWxlZCAoJWQpXG4iLCByZXQpOworCQlnb3RvIGVycm9yOworCX0KKworCXJldCA9IHY0 bDJfZndub2RlX2RldmljZV9wYXJzZShpbXgyODMtPmRldiwgJnByb3BzKTsKKwlpZiAocmV0KQor CQlnb3RvIGVycm9yOworCisJcmV0ID0gdjRsMl9jdHJsX25ld19md25vZGVfcHJvcGVydGllcyhj dHJsX2hkbHIsICZpbXgyODNfY3RybF9vcHMsCisJCQkJCSAgICAgICZwcm9wcyk7CisJaWYgKHJl dCkKKwkJZ290byBlcnJvcjsKKworCWlteDI4My0+c2QuY3RybF9oYW5kbGVyID0gY3RybF9oZGxy OworCisJbXV0ZXhfbG9jayhpbXgyODMtPmN0cmxfaGFuZGxlci5sb2NrKTsKKworCS8qIFNldHVw IGV4cG9zdXJlIGFuZCBmcmFtZS9saW5lIGxlbmd0aCBsaW1pdHMuICovCisJaW14MjgzX3NldF9m cmFtaW5nX2xpbWl0cyhpbXgyODMsIG1vZGUpOworCisJbXV0ZXhfdW5sb2NrKGlteDI4My0+Y3Ry bF9oYW5kbGVyLmxvY2spOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXY0bDJfY3RybF9oYW5k bGVyX2ZyZWUoY3RybF9oZGxyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW14 MjgzX3BhcnNlX2VuZHBvaW50KHN0cnVjdCBpbXgyODMgKmlteDI4MykKK3sKKwlzdHJ1Y3QgZndu b2RlX2hhbmRsZSAqZndub2RlOworCXN0cnVjdCB2NGwyX2Z3bm9kZV9lbmRwb2ludCBidXNfY2Zn ID0geworCQkuYnVzX3R5cGUgPSBWNEwyX01CVVNfQ1NJMl9EUEhZCisJfTsKKwlzdHJ1Y3QgZndu b2RlX2hhbmRsZSAqZXA7CisJaW50IHJldDsKKworCWZ3bm9kZSA9IGRldl9md25vZGUoaW14Mjgz LT5kZXYpOworCWVwID0gZndub2RlX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGZ3bm9kZSwgTlVM TCk7CisJaWYgKCFlcCkgeworCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAiRmFpbGVkIHRvIGdldCBu ZXh0IGVuZHBvaW50XG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlyZXQgPSB2NGwyX2Z3 bm9kZV9lbmRwb2ludF9hbGxvY19wYXJzZShlcCwgJmJ1c19jZmcpOworCWZ3bm9kZV9oYW5kbGVf cHV0KGVwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGJ1c19jZmcuYnVzLm1p cGlfY3NpMi5udW1fZGF0YV9sYW5lcyAhPSA0KSB7CisJCWRldl9lcnIoaW14MjgzLT5kZXYsCisJ CQkibnVtYmVyIG9mIENTSTIgZGF0YSBsYW5lcyAlZCBpcyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJ YnVzX2NmZy5idXMubWlwaV9jc2kyLm51bV9kYXRhX2xhbmVzKTsKKwkJcmV0ID0gLUVJTlZBTDsK KwkJZ290byBkb25lX2VuZHBvaW50X2ZyZWU7CisJfQorCisJcmV0ID0gdjRsMl9saW5rX2ZyZXFf dG9fYml0bWFwKGlteDI4My0+ZGV2LCBidXNfY2ZnLmxpbmtfZnJlcXVlbmNpZXMsCisJCQkJICAg ICAgIGJ1c19jZmcubnJfb2ZfbGlua19mcmVxdWVuY2llcywKKwkJCQkgICAgICAgbGlua19mcmVx dWVuY2llcywgQVJSQVlfU0laRShsaW5rX2ZyZXF1ZW5jaWVzKSwKKwkJCQkgICAgICAgJmlteDI4 My0+bGlua19mcmVxX2JpdG1hcCk7CisKK2RvbmVfZW5kcG9pbnRfZnJlZToKKwl2NGwyX2Z3bm9k ZV9lbmRwb2ludF9mcmVlKCZidXNfY2ZnKTsKKworCXJldHVybiByZXQ7Cit9OworCitzdGF0aWMg aW50IGlteDI4M19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBp bXgyODMgKmlteDI4MzsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgeGNsa19mcmVx OworCWludCByZXQ7CisKKwlpbXgyODMgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXpl b2YoKmlteDI4MyksIEdGUF9LRVJORUwpOworCWlmICghaW14MjgzKQorCQlyZXR1cm4gLUVOT01F TTsKKworCWlteDI4My0+ZGV2ID0gJmNsaWVudC0+ZGV2OworCisJdjRsMl9pMmNfc3ViZGV2X2lu aXQoJmlteDI4My0+c2QsIGNsaWVudCwgJmlteDI4M19zdWJkZXZfb3BzKTsKKworCWlteDI4My0+ Y2NpID0gZGV2bV9jY2lfcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgMTYpOworCWlmIChJU19FUlIo aW14MjgzLT5jY2kpKSB7CisJCXJldCA9IFBUUl9FUlIoaW14MjgzLT5jY2kpOworCQlkZXZfZXJy KGlteDI4My0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgQ0NJOiAlZFxuIiwgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwkvKiBHZXQgc3lzdGVtIGNsb2NrICh4Y2xrKSAqLworCWlteDI4 My0+eGNsayA9IGRldm1fY2xrX2dldChpbXgyODMtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihp bXgyODMtPnhjbGspKSB7CisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGlteDI4My0+ZGV2LCBQVFJf RVJSKGlteDI4My0+eGNsayksCisJCQkJICAgICAiZmFpbGVkIHRvIGdldCB4Y2xrXG4iKTsKKwl9 CisKKwl4Y2xrX2ZyZXEgPSBjbGtfZ2V0X3JhdGUoaW14MjgzLT54Y2xrKTsKKwlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShpbXgyODNfZnJlcXVlbmNpZXMpOyBpKyspIHsKKwkJaWYgKHhjbGtf ZnJlcSA9PSBpbXgyODNfZnJlcXVlbmNpZXNbaV0ubWh6KSB7CisJCQlpbXgyODMtPmZyZXEgPSAm aW14MjgzX2ZyZXF1ZW5jaWVzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCFpbXgyODMt PmZyZXEpIHsKKwkJZGV2X2VycihpbXgyODMtPmRldiwgInhjbGsgZnJlcXVlbmN5IHVuc3VwcG9y dGVkOiAlZCBIelxuIiwgeGNsa19mcmVxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0 ID0gaW14MjgzX2dldF9yZWd1bGF0b3JzKGlteDI4Myk7CisJaWYgKHJldCkgeworCQlyZXR1cm4g ZGV2X2Vycl9wcm9iZShpbXgyODMtPmRldiwgcmV0LAorCQkJCSJmYWlsZWQgdG8gZ2V0IHJlZ3Vs YXRvcnNcbiIpOworCX0KKworCXJldCA9IGlteDI4M19wYXJzZV9lbmRwb2ludChpbXgyODMpOwor CWlmIChyZXQpIHsKKwkJZGV2X2VycihpbXgyODMtPmRldiwgImZhaWxlZCB0byBwYXJzZSBlbmRw b2ludCBjb25maWd1cmF0aW9uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBSZXF1ZXN0 IG9wdGlvbmFsIGVuYWJsZSBwaW4gKi8KKwlpbXgyODMtPnJlc2V0X2dwaW8gPSBkZXZtX2dwaW9k X2dldF9vcHRpb25hbChpbXgyODMtPmRldiwgInJlc2V0IiwKKwkJCQkJCSAgICAgR1BJT0RfT1VU X0xPVyk7CisJaWYgKElTX0VSUihpbXgyODMtPnJlc2V0X2dwaW8pKQorCQlyZXR1cm4gZGV2X2Vy cl9wcm9iZShpbXgyODMtPmRldiwgUFRSX0VSUihpbXgyODMtPnJlc2V0X2dwaW8pLAorCQkJCSAg ICAgImZhaWxlZCB0byBnZXQgcmVzZXQgR1BJT1xuIik7CisKKwkvKgorCSAqIFRoZSBzZW5zb3Ig bXVzdCBiZSBwb3dlcmVkIGZvciBpbXgyODNfaWRlbnRpZnlfbW9kdWxlKCkKKwkgKiB0byBiZSBh YmxlIHRvIHJlYWQgdGhlIENISVBfSUQgcmVnaXN0ZXIKKwkgKi8KKwlyZXQgPSBpbXgyODNfcG93 ZXJfb24oaW14MjgzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaW14Mjgz X2lkZW50aWZ5X21vZHVsZShpbXgyODMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfcG93ZXJf b2ZmOworCisJLyoKKwkgKiBFbmFibGUgcnVudGltZSBQTSB3aXRoIGF1dG9zdXNwZW5kLiBBcyB0 aGUgZGV2aWNlIGhhcyBiZWVuIHBvd2VyZWQKKwkgKiBtYW51YWxseSwgbWFyayBpdCBhcyBhY3Rp dmUsIGFuZCBpbmNyZWFzZSB0aGUgdXNhZ2UgY291bnQgd2l0aG91dAorCSAqIHJlc3VtaW5nIHRo ZSBkZXZpY2UuCisJICovCisJcG1fcnVudGltZV9zZXRfYWN0aXZlKGlteDI4My0+ZGV2KTsKKwlw bV9ydW50aW1lX2dldF9ub3Jlc3VtZShpbXgyODMtPmRldik7CisJcG1fcnVudGltZV9lbmFibGUo aW14MjgzLT5kZXYpOworCXBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2RlbGF5KGlteDI4My0+ ZGV2LCAxMDAwKTsKKwlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZChpbXgyODMtPmRldik7CisK KwkvKiBUaGlzIG5lZWRzIHRoZSBwbSBydW50aW1lIHRvIGJlIHJlZ2lzdGVyZWQuICovCisJcmV0 ID0gaW14MjgzX2luaXRfY29udHJvbHMoaW14MjgzKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9y X3BtOworCisJLyogSW5pdGlhbGl6ZSBzdWJkZXYgKi8KKwlpbXgyODMtPnNkLmZsYWdzIHw9IFY0 TDJfU1VCREVWX0ZMX0hBU19ERVZOT0RFIHwKKwkJCSAgICBWNEwyX1NVQkRFVl9GTF9IQVNfRVZF TlRTOworCWlteDI4My0+c2QuZW50aXR5LmZ1bmN0aW9uID0gTUVESUFfRU5UX0ZfQ0FNX1NFTlNP UjsKKwlpbXgyODMtPnNkLmludGVybmFsX29wcyA9ICZpbXgyODNfaW50ZXJuYWxfb3BzOworCisJ LyogSW5pdGlhbGl6ZSBzb3VyY2UgcGFkcyAqLworCWlteDI4My0+cGFkLmZsYWdzID0gTUVESUFf UEFEX0ZMX1NPVVJDRTsKKworCXJldCA9IG1lZGlhX2VudGl0eV9wYWRzX2luaXQoJmlteDI4My0+ c2QuZW50aXR5LCAxLCAmaW14MjgzLT5wYWQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihpbXgy ODMtPmRldiwgImZhaWxlZCB0byBpbml0IGVudGl0eSBwYWRzOiAlZFxuIiwgcmV0KTsKKwkJZ290 byBlcnJvcl9oYW5kbGVyX2ZyZWU7CisJfQorCisJaW14MjgzLT5zZC5zdGF0ZV9sb2NrID0gaW14 MjgzLT5jdHJsX2hhbmRsZXIubG9jazsKKwlyZXQgPSB2NGwyX3N1YmRldl9pbml0X2ZpbmFsaXpl KCZpbXgyODMtPnNkKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAi c3ViZGV2IGluaXQgZXJyb3I6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycm9yX21lZGlhX2VudGl0 eTsKKwl9CisKKwlyZXQgPSB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRldl9zZW5zb3IoJmlteDI4 My0+c2QpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoaW14MjgzLT5kZXYsICJmYWlsZWQg dG8gcmVnaXN0ZXIgc2Vuc29yIHN1Yi1kZXZpY2U6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycm9y X3N1YmRldl9jbGVhbnVwOworCX0KKworCS8qCisJICogRGVjcmVhc2UgdGhlIFBNIHVzYWdlIGNv dW50LiBUaGUgZGV2aWNlIHdpbGwgZ2V0IHN1c3BlbmRlZCBhZnRlciB0aGUKKwkgKiBhdXRvc3Vz cGVuZCBkZWxheSwgdHVybmluZyB0aGUgcG93ZXIgb2ZmLgorCSAqLworCXBtX3J1bnRpbWVfbWFy a19sYXN0X2J1c3koaW14MjgzLT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKGlt eDI4My0+ZGV2KTsKKworCXJldHVybiAwOworCitlcnJvcl9zdWJkZXZfY2xlYW51cDoKKwl2NGwy X3N1YmRldl9jbGVhbnVwKCZpbXgyODMtPnNkKTsKKworZXJyb3JfbWVkaWFfZW50aXR5OgorCW1l ZGlhX2VudGl0eV9jbGVhbnVwKCZpbXgyODMtPnNkLmVudGl0eSk7CisKK2Vycm9yX2hhbmRsZXJf ZnJlZToKKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKGlteDI4My0+c2QuY3RybF9oYW5kbGVyKTsK KworZXJyb3JfcG06CisJcG1fcnVudGltZV9kaXNhYmxlKGlteDI4My0+ZGV2KTsKKwlwbV9ydW50 aW1lX3NldF9zdXNwZW5kZWQoaW14MjgzLT5kZXYpOworZXJyb3JfcG93ZXJfb2ZmOgorCWlteDI4 M19wb3dlcl9vZmYoaW14MjgzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGlt eDI4M19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9z dWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGlteDI4MyAq aW14MjgzID0gdG9faW14MjgzKHNkKTsKKworCXY0bDJfYXN5bmNfdW5yZWdpc3Rlcl9zdWJkZXYo c2QpOworCXY0bDJfc3ViZGV2X2NsZWFudXAoJmlteDI4My0+c2QpOworCW1lZGlhX2VudGl0eV9j bGVhbnVwKCZzZC0+ZW50aXR5KTsKKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKGlteDI4My0+c2Qu Y3RybF9oYW5kbGVyKTsKKworCXBtX3J1bnRpbWVfZGlzYWJsZShpbXgyODMtPmRldik7CisJaWYg KCFwbV9ydW50aW1lX3N0YXR1c19zdXNwZW5kZWQoaW14MjgzLT5kZXYpKQorCQlpbXgyODNfcG93 ZXJfb2ZmKGlteDI4Myk7CisJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGlteDI4My0+ZGV2KTsK K30KKworc3RhdGljIERFRklORV9SVU5USU1FX0RFVl9QTV9PUFMoaW14MjgzX3BtX29wcywgaW14 MjgzX3J1bnRpbWVfc3VzcGVuZCwKKwkJCQkgaW14MjgzX3J1bnRpbWVfcmVzdW1lLCBOVUxMKTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW14MjgzX2R0X2lkc1tdID0gewor CXsgLmNvbXBhdGlibGUgPSAic29ueSxpbXgyODMiIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9Cit9 OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaW14MjgzX2R0X2lkcyk7CisKK3N0YXRpYyBzdHJ1 Y3QgaTJjX2RyaXZlciBpbXgyODNfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFt ZSA9ICJpbXgyODMiLAorCQkucG0gPSBwbV9wdHIoJmlteDI4M19wbV9vcHMpLAorCQkub2ZfbWF0 Y2hfdGFibGUJPSBpbXgyODNfZHRfaWRzLAorCX0sCisJLnByb2JlID0gaW14MjgzX3Byb2JlLAor CS5yZW1vdmUgPSBpbXgyODNfcmVtb3ZlLAorfTsKK21vZHVsZV9pMmNfZHJpdmVyKGlteDI4M19p MmNfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiV2lsbCBXaGFuZyA8d2lsbEB3aWxsd2hhbmcu Y29tPiIpOworTU9EVUxFX0FVVEhPUigiS2llcmFuIEJpbmdoYW0gPGtpZXJhbi5iaW5naGFtQGlk ZWFzb25ib2FyZC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJVbWFuZyBKYWluIDx1bWFuZy5qYWlu QGlkZWFzb25ib2FyZC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNvbnkgSU1YMjgzIFNl bnNvciBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKCi0tIAoyLjQzLjAKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg==