From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on archive.lwn.net X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, MIME_BASE64_TEXT,SPF_HELO_PASS,SPF_PASS,UNPARSEABLE_RELAY autolearn=unavailable autolearn_force=no version=3.4.2 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by archive.lwn.net (Postfix) with ESMTP id 2FA107D161 for ; Mon, 15 Jun 2020 12:32:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729904AbgFOMc0 (ORCPT ); Mon, 15 Jun 2020 08:32:26 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:57361 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1729866AbgFOMcZ (ORCPT ); Mon, 15 Jun 2020 08:32:25 -0400 X-UUID: a8bb6e46e2ab41fab09a2762462c2836-20200615 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=VaaC5P1jId/9QuUk8y5aACiW+uPda5ip/kPIH/2/SSA=; b=MeKGzYCtq2KJBuwRihiETQTE3oiogPOCzUamfHxszW21abVOuLew+JC3zmmqXXJj8NvosnlQ3/W3UePUBNfqQyjRPnL6xt84BGRurlqgOZHut2vS7UOfWtXacxsZ/5zt6bZQtDBtLohuanEOsxIArynUR6SQk75yttiat/gyeAo=; X-UUID: a8bb6e46e2ab41fab09a2762462c2836-20200615 Received: from mtkexhb01.mediatek.inc [(172.21.101.102)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 107733677; Mon, 15 Jun 2020 20:32:12 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 15 Jun 2020 20:32:08 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 15 Jun 2020 20:32:08 +0800 From: Dongchun Zhu To: , , , , , , , , , , CC: , , , , , , , , Subject: [PATCH V10 2/2] media: i2c: ov02a10: Add OV02A10 image sensor driver Date: Mon, 15 Jun 2020 20:29:37 +0800 Message-ID: <20200615122937.18965-3-dongchun.zhu@mediatek.com> X-Mailer: git-send-email 2.9.2 In-Reply-To: <20200615122937.18965-1-dongchun.zhu@mediatek.com> References: <20200615122937.18965-1-dongchun.zhu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Archived-At: List-Archive: List-Post: QWRkIGEgVjRMMiBzdWItZGV2aWNlIGRyaXZlciBmb3IgT1YwMkExMCBpbWFnZSBzZW5zb3IuDQoN ClNpZ25lZC1vZmYtYnk6IERvbmdjaHVuIFpodSA8ZG9uZ2NodW4uemh1QG1lZGlhdGVrLmNvbT4N Ci0tLQ0KIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICB8ICAgIDEgKw0KIGRyaXZlcnMvbWVk aWEvaTJjL0tjb25maWcgICB8ICAgMTMgKw0KIGRyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlICB8 ICAgIDEgKw0KIGRyaXZlcnMvbWVkaWEvaTJjL292MDJhMTAuYyB8IDEwNDIgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIDQgZmlsZXMgY2hhbmdlZCwgMTA1NyBp bnNlcnRpb25zKCspDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvaTJjL292MDJh MTAuYw0KDQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUw0KaW5kZXggNjNh MjMzNS4uZTc2NzdjNSAxMDA2NDQNCi0tLSBhL01BSU5UQUlORVJTDQorKysgYi9NQUlOVEFJTkVS Uw0KQEAgLTEyMzk1LDYgKzEyMzk1LDcgQEAgTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3Jn DQogUzoJTWFpbnRhaW5lZA0KIFQ6CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9tZWRpYV90cmVlLmdp dA0KIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS9pMmMvb3Z0aSxv djAyYTEwLnlhbWwNCitGOglkcml2ZXJzL21lZGlhL2kyYy9vdjAyYTEwLmMNCiANCiBPTU5JVklT SU9OIE9WMTM4NTggU0VOU09SIERSSVZFUg0KIE06CVNha2FyaSBBaWx1cyA8c2FrYXJpLmFpbHVz QGxpbnV4LmludGVsLmNvbT4NCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmln IGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZw0KaW5kZXggMTI1ZDU5Ni4uZDg1NzJjZCAxMDA2 NDQNCi0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcNCisrKyBiL2RyaXZlcnMvbWVkaWEv aTJjL0tjb25maWcNCkBAIC02NTUsNiArNjU1LDE5IEBAIGNvbmZpZyBWSURFT19JTVgzNTUNCiAJ ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUN CiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaW14MzU1Lg0KIA0KK2NvbmZpZyBWSURFT19PVjAy QTEwDQorCXRyaXN0YXRlICJPbW5pVmlzaW9uIE9WMDJBMTAgc2Vuc29yIHN1cHBvcnQiDQorCWRl cGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDINCisJc2VsZWN0IE1FRElBX0NPTlRST0xMRVINCisJ c2VsZWN0IFZJREVPX1Y0TDJfU1VCREVWX0FQSQ0KKwlzZWxlY3QgVjRMMl9GV05PREUNCisJaGVs cA0KKwkgIFRoaXMgaXMgYSBWaWRlbzRMaW51eDIgc2Vuc29yIGRyaXZlciBmb3IgdGhlIE9tbmlW aXNpb24NCisJICBPVjAyQTEwIGNhbWVyYS4NCisNCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVy IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUNCisJICBtb2R1bGUgd2lsbCBiZSBjYWxs ZWQgb3YwMmExMC4NCisNCiBjb25maWcgVklERU9fT1YyNjQwDQogCXRyaXN0YXRlICJPbW5pVmlz aW9uIE9WMjY0MCBzZW5zb3Igc3VwcG9ydCINCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEky Qw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlIGIvZHJpdmVycy9tZWRp YS9pMmMvTWFrZWZpbGUNCmluZGV4IDc3YmY3ZDAuLjY1NjZkZDkgMTAwNjQ0DQotLS0gYS9kcml2 ZXJzL21lZGlhL2kyYy9NYWtlZmlsZQ0KKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUN CkBAIC02Myw2ICs2Myw3IEBAIG9iai0kKENPTkZJR19WSURFT19WUDI3U01QWCkgKz0gdnAyN3Nt cHgubw0KIG9iai0kKENPTkZJR19WSURFT19TT05ZX0JURl9NUFgpICs9IHNvbnktYnRmLW1weC5v DQogb2JqLSQoQ09ORklHX1ZJREVPX1VQRDY0MDMxQSkgKz0gdXBkNjQwMzFhLm8NCiBvYmotJChD T05GSUdfVklERU9fVVBENjQwODMpICs9IHVwZDY0MDgzLm8NCitvYmotJChDT05GSUdfVklERU9f T1YwMkExMCkgKz0gb3YwMmExMC5vDQogb2JqLSQoQ09ORklHX1ZJREVPX09WMjY0MCkgKz0gb3Yy NjQwLm8NCiBvYmotJChDT05GSUdfVklERU9fT1YyNjgwKSArPSBvdjI2ODAubw0KIG9iai0kKENP TkZJR19WSURFT19PVjI2ODUpICs9IG92MjY4NS5vDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRp YS9pMmMvb3YwMmExMC5jIGIvZHJpdmVycy9tZWRpYS9pMmMvb3YwMmExMC5jDQpuZXcgZmlsZSBt b2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMzE2MGM5Mg0KLS0tIC9kZXYvbnVsbA0KKysrIGIv ZHJpdmVycy9tZWRpYS9pMmMvb3YwMmExMC5jDQpAQCAtMCwwICsxLDEwNDIgQEANCisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKy8vIENvcHlyaWdodCAoYykgMjAyMCBNZWRp YVRlayBJbmMuDQorDQorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KKyNpbmNsdWRlIDxsaW51eC9k ZWxheS5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgvZ3Bp by9jb25zdW1lci5oPg0KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCisjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCisjaW5jbHVkZSA8bGlu dXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+DQorI2luY2x1ZGUgPG1lZGlhL21lZGlhLWVudGl0eS5o Pg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWFzeW5jLmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDIt Y3RybHMuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4NCisjaW5jbHVkZSA8bWVk aWEvdjRsMi1md25vZGUuaD4NCisNCisjZGVmaW5lIENISVBfSUQJCQkJCQkweDI1MDkNCisjZGVm aW5lIE9WMDJBMTBfUkVHX0NISVBfSURfSAkJCQkweDAyDQorI2RlZmluZSBPVjAyQTEwX1JFR19D SElQX0lEX0wJCQkJMHgwMw0KKw0KKy8qIEJpdFsxXSB2ZXJ0aWNhbCB1cHNpZGUgZG93biAqLw0K Ky8qIEJpdFswXSBob3Jpem9udGFsIG1pcnJvciAqLw0KKyNkZWZpbmUgUkVHX01JUlJPUl9GTElQ X0NPTlRST0wJCQkJMHgzZg0KKw0KKy8qIE9yaWVudGF0aW9uICovDQorI2RlZmluZSBSRUdfTUlS Uk9SX0ZMSVBfRU5BQkxFCQkJCTB4MDMNCisNCisvKiBCaXRbMjowXSBNSVBJIHRyYW5zbWlzc2lv biBzcGVlZCBzZWxlY3QgKi8NCisjZGVmaW5lIFRYX1NQRUVEX0FSRUFfU0VMCQkJCTB4YTENCisj ZGVmaW5lIE9WMDJBMTBfTUlQSV9UWF9TUEVFRF9ERUZBVUxUCQkJMHgwMw0KKw0KKyNkZWZpbmUg UkVHX1BBR0VfU1dJVENICQkJCQkweGZkDQorI2RlZmluZSBSRUdfR0xPQkFMX0VGRkVDVElWRQkJ CQkweDAxDQorI2RlZmluZSBSRUdfRU5BQkxFCQkJCQlCSVQoMCkNCisNCisjZGVmaW5lIFJFR19T Q19DVFJMX01PREUJCQkJMHhhYw0KKyNkZWZpbmUgU0NfQ1RSTF9NT0RFX1NUQU5EQlkJCQkJMHgw MA0KKyNkZWZpbmUgU0NfQ1RSTF9NT0RFX1NUUkVBTUlORwkJCQkweDAxDQorDQorI2RlZmluZSBP VjAyQTEwX0VYUF9TSElGVAkJCQk4DQorI2RlZmluZSBPVjAyQTEwX1JFR19FWFBPU1VSRV9ICQkJ CTB4MDMNCisjZGVmaW5lIE9WMDJBMTBfUkVHX0VYUE9TVVJFX0wJCQkJMHgwNA0KKyNkZWZpbmUJ T1YwMkExMF9FWFBPU1VSRV9NSU4JCQkJNA0KKyNkZWZpbmUgT1YwMkExMF9FWFBPU1VSRV9NQVhf TUFSR0lOCQkJNA0KKyNkZWZpbmUJT1YwMkExMF9FWFBPU1VSRV9TVEVQCQkJCTENCisNCisjZGVm aW5lIE9WMDJBMTBfVlRTX1NISUZUCQkJCTgNCisjZGVmaW5lIE9WMDJBMTBfUkVHX1ZUU19ICQkJ CTB4MDUNCisjZGVmaW5lIE9WMDJBMTBfUkVHX1ZUU19MCQkJCTB4MDYNCisjZGVmaW5lIE9WMDJB MTBfVlRTX01BWAkJCQkJMHgyMDlmDQorI2RlZmluZSBPVjAyQTEwX0JBU0lDX0xJTkUJCQkJMTIy NA0KKw0KKyNkZWZpbmUgT1YwMkExMF9SRUdfR0FJTgkJCQkweDI0DQorI2RlZmluZSBPVjAyQTEw X0dBSU5fTUlOCQkJCTB4MTANCisjZGVmaW5lIE9WMDJBMTBfR0FJTl9NQVgJCQkJMHhmOA0KKyNk ZWZpbmUgT1YwMkExMF9HQUlOX1NURVAJCQkJMHgwMQ0KKyNkZWZpbmUgT1YwMkExMF9HQUlOX0RF RkFVTFQJCQkJMHg0MA0KKw0KKy8qIFRlc3QgcGF0dGVybiBjb250cm9sICovDQorI2RlZmluZSBP VjAyQTEwX1JFR19URVNUX1BBVFRFUk4JCQkweGI2DQorDQorI2RlZmluZSBIWl9QRVJfTUhaCQkJ CQkxMDAwMDAwTA0KKyNkZWZpbmUgT1YwMkExMF9MSU5LX0ZSRVFfMzkwTUhaCQkJKDM5MCAqIEha X1BFUl9NSFopDQorI2RlZmluZSBPVjAyQTEwX0VDTEtfRlJFUQkJCQkoMjQgKiBIWl9QRVJfTUha KQ0KKyNkZWZpbmUgT1YwMkExMF9EQVRBX0xBTkVTCQkJCTENCisjZGVmaW5lIE9WMDJBMTBfQklU U19QRVJfU0FNUExFCQkJCTEwDQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBvdjAyYTEw X3N1cHBseV9uYW1lc1tdID0gew0KKwkiZG92ZGQiLAkvKiBEaWdpdGFsIEkvTyBwb3dlciAqLw0K KwkiYXZkZCIsCQkvKiBBbmFsb2cgcG93ZXIgKi8NCisJImR2ZGQiLAkJLyogRGlnaXRhbCBjb3Jl IHBvd2VyICovDQorfTsNCisNCitzdHJ1Y3Qgb3YwMmExMF9yZWcgew0KKwl1OCBhZGRyOw0KKwl1 OCB2YWw7DQorfTsNCisNCitzdHJ1Y3Qgb3YwMmExMF9yZWdfbGlzdCB7DQorCXUzMiBudW1fb2Zf cmVnczsNCisJY29uc3Qgc3RydWN0IG92MDJhMTBfcmVnICpyZWdzOw0KK307DQorDQorc3RydWN0 IG92MDJhMTBfbW9kZSB7DQorCXUzMiB3aWR0aDsNCisJdTMyIGhlaWdodDsNCisJdTMyIGV4cF9k ZWY7DQorCXUzMiBodHNfZGVmOw0KKwl1MzIgdnRzX2RlZjsNCisJY29uc3Qgc3RydWN0IG92MDJh MTBfcmVnX2xpc3QgcmVnX2xpc3Q7DQorfTsNCisNCitzdHJ1Y3Qgb3YwMmExMCB7DQorCXUzMiBl Y2xrX2ZyZXE7DQorCXUzMiBtaXBpX2Nsb2NrX3R4X3NwZWVkOw0KKw0KKwlzdHJ1Y3QgY2xrICpl Y2xrOw0KKwlzdHJ1Y3QgZ3Bpb19kZXNjICpwZF9ncGlvOw0KKwlzdHJ1Y3QgZ3Bpb19kZXNjICpy c3RfZ3BpbzsNCisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbQVJSQVlfU0la RShvdjAyYTEwX3N1cHBseV9uYW1lcyldOw0KKw0KKwlib29sIHN0cmVhbWluZzsNCisJYm9vbCB1 cHNpZGVfZG93bjsNCisNCisJLyoNCisJICogU2VyaWFsaXplIGNvbnRyb2wgYWNjZXNzLCBnZXQv c2V0IGZvcm1hdCwgZ2V0IHNlbGVjdGlvbg0KKwkgKiBhbmQgc3RhcnQgc3RyZWFtaW5nLg0KKwkg Ki8NCisJc3RydWN0IG11dGV4IG11dGV4Ow0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc3ViZGV2Ow0K KwlzdHJ1Y3QgbWVkaWFfcGFkIHBhZDsNCisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBmbXQ7 DQorCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBjdHJsX2hhbmRsZXI7DQorCXN0cnVjdCB2NGwy X2N0cmwgKmV4cG9zdXJlOw0KKw0KKwljb25zdCBzdHJ1Y3Qgb3YwMmExMF9tb2RlICpjdXJfbW9k ZTsNCit9Ow0KKw0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG92MDJhMTAgKnRvX292MDJhMTAoc3Ry dWN0IHY0bDJfc3ViZGV2ICpzZCkNCit7DQorCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVj dCBvdjAyYTEwLCBzdWJkZXYpOw0KK30NCisNCisvKg0KKyAqIGVjbGsgMjRNaHoNCisgKiBwY2xr IDM5TWh6DQorICogbGluZWxlbmd0aCA5MzQoMHgzYTYpDQorICogZnJhbWVsZW5ndGggMTM5MCgw eDU2RSkNCisgKiBncmFid2luZG93X3dpZHRoIDE2MDANCisgKiBncmFid2luZG93X2hlaWdodCAx MjAwDQorICogbWF4X2ZyYW1lcmF0ZSAzMGZwcw0KKyAqIG1pcGlfZGF0YXJhdGUgcGVyIGxhbmUg NzgwTWJwcw0KKyAqLw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3YwMmExMF9yZWcgb3YwMmExMF8x NjAweDEyMDBfcmVnc1tdID0gew0KKwl7MHhmZCwgMHgwMX0sDQorCXsweGFjLCAweDAwfSwNCisJ ezB4ZmQsIDB4MDB9LA0KKwl7MHgyZiwgMHgyOX0sDQorCXsweDM0LCAweDAwfSwNCisJezB4MzUs IDB4MjF9LA0KKwl7MHgzMCwgMHgxNX0sDQorCXsweDMzLCAweDAxfSwNCisJezB4ZmQsIDB4MDF9 LA0KKwl7MHg0NCwgMHgwMH0sDQorCXsweDJhLCAweDRjfSwNCisJezB4MmIsIDB4MWV9LA0KKwl7 MHgyYywgMHg2MH0sDQorCXsweDI1LCAweDExfSwNCisJezB4MDMsIDB4MDF9LA0KKwl7MHgwNCwg MHhhZX0sDQorCXsweDA5LCAweDAwfSwNCisJezB4MGEsIDB4MDJ9LA0KKwl7MHgwNiwgMHhhNn0s DQorCXsweDMxLCAweDAwfSwNCisJezB4MjQsIDB4NDB9LA0KKwl7MHgwMSwgMHgwMX0sDQorCXsw eGZiLCAweDczfSwNCisJezB4ZmQsIDB4MDF9LA0KKwl7MHgxNiwgMHgwNH0sDQorCXsweDFjLCAw eDA5fSwNCisJezB4MjEsIDB4NDJ9LA0KKwl7MHgxMiwgMHgwNH0sDQorCXsweDEzLCAweDEwfSwN CisJezB4MTEsIDB4NDB9LA0KKwl7MHgzMywgMHg4MX0sDQorCXsweGQwLCAweDAwfSwNCisJezB4 ZDEsIDB4MDF9LA0KKwl7MHhkMiwgMHgwMH0sDQorCXsweDUwLCAweDEwfSwNCisJezB4NTEsIDB4 MjN9LA0KKwl7MHg1MiwgMHgyMH0sDQorCXsweDUzLCAweDEwfSwNCisJezB4NTQsIDB4MDJ9LA0K Kwl7MHg1NSwgMHgyMH0sDQorCXsweDU2LCAweDAyfSwNCisJezB4NTgsIDB4NDh9LA0KKwl7MHg1 ZCwgMHgxNX0sDQorCXsweDVlLCAweDA1fSwNCisJezB4NjYsIDB4NjZ9LA0KKwl7MHg2OCwgMHg2 OH0sDQorCXsweDZiLCAweDAwfSwNCisJezB4NmMsIDB4MDB9LA0KKwl7MHg2ZiwgMHg0MH0sDQor CXsweDcwLCAweDQwfSwNCisJezB4NzEsIDB4MGF9LA0KKwl7MHg3MiwgMHhmMH0sDQorCXsweDcz LCAweDEwfSwNCisJezB4NzUsIDB4ODB9LA0KKwl7MHg3NiwgMHgxMH0sDQorCXsweDg0LCAweDAw fSwNCisJezB4ODUsIDB4MTB9LA0KKwl7MHg4NiwgMHgxMH0sDQorCXsweDg3LCAweDAwfSwNCisJ ezB4OGEsIDB4MjJ9LA0KKwl7MHg4YiwgMHgyMn0sDQorCXsweDE5LCAweGYxfSwNCisJezB4Mjks IDB4MDF9LA0KKwl7MHhmZCwgMHgwMX0sDQorCXsweDlkLCAweDE2fSwNCisJezB4YTAsIDB4Mjl9 LA0KKwl7MHhhMSwgMHgwM30sDQorCXsweGFkLCAweDYyfSwNCisJezB4YWUsIDB4MDB9LA0KKwl7 MHhhZiwgMHg4NX0sDQorCXsweGIxLCAweDAxfSwNCisJezB4OGUsIDB4MDZ9LA0KKwl7MHg4Ziwg MHg0MH0sDQorCXsweDkwLCAweDA0fSwNCisJezB4OTEsIDB4YjB9LA0KKwl7MHg0NSwgMHgwMX0s DQorCXsweDQ2LCAweDAwfSwNCisJezB4NDcsIDB4NmN9LA0KKwl7MHg0OCwgMHgwM30sDQorCXsw eDQ5LCAweDhifSwNCisJezB4NGEsIDB4MDB9LA0KKwl7MHg0YiwgMHgwN30sDQorCXsweDRjLCAw eDA0fSwNCisJezB4NGQsIDB4Yjd9LA0KKwl7MHhmMCwgMHg0MH0sDQorCXsweGYxLCAweDQwfSwN CisJezB4ZjIsIDB4NDB9LA0KKwl7MHhmMywgMHg0MH0sDQorCXsweDNmLCAweDAwfSwNCisJezB4 ZmQsIDB4MDF9LA0KKwl7MHgwNSwgMHgwMH0sDQorCXsweDA2LCAweGE2fSwNCisJezB4ZmQsIDB4 MDF9LA0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBvdjAyYTEwX3Rlc3RfcGF0 dGVybl9tZW51W10gPSB7DQorCSJEaXNhYmxlZCIsDQorCSJFaWdodCBWZXJ0aWNhbCBDb2xvdXIg QmFycyIsDQorfTsNCisNCitzdGF0aWMgY29uc3QgczY0IGxpbmtfZnJlcV9tZW51X2l0ZW1zW10g PSB7DQorCU9WMDJBMTBfTElOS19GUkVRXzM5ME1IWiwNCit9Ow0KKw0KK3N0YXRpYyB1NjQgdG9f cGl4ZWxfcmF0ZSh1MzIgZl9pbmRleCkNCit7DQorCXU2NCBwaXhlbF9yYXRlID0gbGlua19mcmVx X21lbnVfaXRlbXNbZl9pbmRleF0gKiAyICogT1YwMkExMF9EQVRBX0xBTkVTOw0KKw0KKwlkb19k aXYocGl4ZWxfcmF0ZSwgT1YwMkExMF9CSVRTX1BFUl9TQU1QTEUpOw0KKw0KKwlyZXR1cm4gcGl4 ZWxfcmF0ZTsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBvdjAyYTEwX21vZGUgc3VwcG9y dGVkX21vZGVzW10gPSB7DQorCXsNCisJCS53aWR0aCA9IDE2MDAsDQorCQkuaGVpZ2h0ID0gMTIw MCwNCisJCS5leHBfZGVmID0gMHgwMWFlLA0KKwkJLmh0c19kZWYgPSAweDAzYTYsDQorCQkudnRz X2RlZiA9IDB4MDU2ZSwNCisJCS5yZWdfbGlzdCA9IHsNCisJCQkubnVtX29mX3JlZ3MgPSBBUlJB WV9TSVpFKG92MDJhMTBfMTYwMHgxMjAwX3JlZ3MpLA0KKwkJCS5yZWdzID0gb3YwMmExMF8xNjAw eDEyMDBfcmVncywNCisJCX0sDQorCX0sDQorfTsNCisNCitzdGF0aWMgaW50IG92MDJhMTBfd3Jp dGVfYXJyYXkoc3RydWN0IG92MDJhMTAgKm92MDJhMTAsDQorCQkJICAgICAgIGNvbnN0IHN0cnVj dCBvdjAyYTEwX3JlZ19saXN0ICpyX2xpc3QpDQorew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xp ZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCisJdW5zaWduZWQg aW50IGk7DQorCWludCByZXQ7DQorDQorCWZvciAoaSA9IDA7IGkgPCByX2xpc3QtPm51bV9vZl9y ZWdzOyBpKyspIHsNCisJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBy X2xpc3QtPnJlZ3NbaV0uYWRkciwNCisJCQkJCQlyX2xpc3QtPnJlZ3NbaV0udmFsKTsNCisJCWlm IChyZXQgPCAwKQ0KKwkJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0K K3N0YXRpYyBpbnQgb3YwMmExMF9yZWFkX3NtYnVzKHN0cnVjdCBvdjAyYTEwICpvdjAyYTEwLCB1 bnNpZ25lZCBjaGFyIHJlZywNCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICp2YWwpDQorew0KKwlz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+ c3ViZGV2KTsNCisJaW50IHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRh KGNsaWVudCwgcmVnKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwkqdmFs ID0gKHVuc2lnbmVkIGNoYXIpcmV0Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZv aWQgb3YwMmExMF9maWxsX2ZtdChjb25zdCBzdHJ1Y3Qgb3YwMmExMF9tb2RlICptb2RlLA0KKwkJ CSAgICAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm10KQ0KK3sNCisJZm10LT53aWR0aCA9 IG1vZGUtPndpZHRoOw0KKwlmbXQtPmhlaWdodCA9IG1vZGUtPmhlaWdodDsNCisJZm10LT5maWVs ZCA9IFY0TDJfRklFTERfTk9ORTsNCit9DQorDQorc3RhdGljIGludCBvdjAyYTEwX3NldF9mbXQo c3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCisJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2Nv bmZpZyAqY2ZnLA0KKwkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkNCit7DQor CXN0cnVjdCBvdjAyYTEwICpvdjAyYTEwID0gdG9fb3YwMmExMChzZCk7DQorCXN0cnVjdCB2NGwy X21idXNfZnJhbWVmbXQgKm1idXNfZm10ID0gJmZtdC0+Zm9ybWF0Ow0KKw0KKwltdXRleF9sb2Nr KCZvdjAyYTEwLT5tdXRleCk7DQorDQorCWlmIChvdjAyYTEwLT5zdHJlYW1pbmcpIHsNCisJCW11 dGV4X3VubG9jaygmb3YwMmExMC0+bXV0ZXgpOw0KKwkJcmV0dXJuIC1FQlVTWTsNCisJfQ0KKw0K KwkvKiBPbmx5IG9uZSBzZW5zb3IgbW9kZSBzdXBwb3J0ZWQgKi8NCisJbWJ1c19mbXQtPmNvZGUg PSBvdjAyYTEwLT5mbXQuY29kZTsNCisJb3YwMmExMF9maWxsX2ZtdChvdjAyYTEwLT5jdXJfbW9k ZSwgbWJ1c19mbXQpOw0KKwlvdjAyYTEwLT5mbXQgPSBmbXQtPmZvcm1hdDsNCisNCisJaWYgKGZt dC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9STUFUX1RSWSkNCisJCSp2NGwyX3N1YmRldl9nZXRf dHJ5X2Zvcm1hdChzZCwgY2ZnLCBmbXQtPnBhZCkgPSBmbXQtPmZvcm1hdDsNCisNCisJbXV0ZXhf dW5sb2NrKCZvdjAyYTEwLT5tdXRleCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMg aW50IG92MDJhMTBfZ2V0X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KKwkJCSAgIHN0cnVj dCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsDQorCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2 X2Zvcm1hdCAqZm10KQ0KK3sNCisJc3RydWN0IG92MDJhMTAgKm92MDJhMTAgPSB0b19vdjAyYTEw KHNkKTsNCisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWJ1c19mbXQgPSAmZm10LT5mb3Jt YXQ7DQorDQorCW11dGV4X2xvY2soJm92MDJhMTAtPm11dGV4KTsNCisJaWYgKGZtdC0+d2hpY2gg PT0gVjRMMl9TVUJERVZfRk9STUFUX1RSWSkgew0KKwkJZm10LT5mb3JtYXQgPSAqdjRsMl9zdWJk ZXZfZ2V0X3RyeV9mb3JtYXQoc2QsIGNmZywgZm10LT5wYWQpOw0KKwl9IGVsc2Ugew0KKwkJZm10 LT5mb3JtYXQgPSBvdjAyYTEwLT5mbXQ7DQorCQltYnVzX2ZtdC0+Y29kZSA9IG92MDJhMTAtPmZt dC5jb2RlOw0KKwkJb3YwMmExMF9maWxsX2ZtdChvdjAyYTEwLT5jdXJfbW9kZSwgbWJ1c19mbXQp Ow0KKwl9DQorCW11dGV4X3VubG9jaygmb3YwMmExMC0+bXV0ZXgpOw0KKw0KKwlyZXR1cm4gMDsN Cit9DQorDQorc3RhdGljIGludCBvdjAyYTEwX2VudW1fbWJ1c19jb2RlKHN0cnVjdCB2NGwyX3N1 YmRldiAqc2QsDQorCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywNCisJ CQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW0gKmNvZGUpDQorew0KKwlzdHJ1 Y3Qgb3YwMmExMCAqb3YwMmExMCA9IHRvX292MDJhMTAoc2QpOw0KKw0KKwlpZiAoY29kZS0+aW5k ZXggIT0gMCkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwljb2RlLT5jb2RlID0gb3YwMmExMC0+ Zm10LmNvZGU7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG92MDJhMTBfZW51 bV9mcmFtZV9zaXplcyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KKwkJCQkgICAgc3RydWN0IHY0 bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywNCisJCQkJICAgIHN0cnVjdCB2NGwyX3N1YmRldl9m cmFtZV9zaXplX2VudW0gKmZzZSkNCit7DQorCWlmIChmc2UtPmluZGV4ID49IEFSUkFZX1NJWkUo c3VwcG9ydGVkX21vZGVzKSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlmc2UtPm1pbl93aWR0 aCAgPSBzdXBwb3J0ZWRfbW9kZXNbZnNlLT5pbmRleF0ud2lkdGg7DQorCWZzZS0+bWF4X3dpZHRo ICA9IHN1cHBvcnRlZF9tb2Rlc1tmc2UtPmluZGV4XS53aWR0aDsNCisJZnNlLT5tYXhfaGVpZ2h0 ID0gc3VwcG9ydGVkX21vZGVzW2ZzZS0+aW5kZXhdLmhlaWdodDsNCisJZnNlLT5taW5faGVpZ2h0 ID0gc3VwcG9ydGVkX21vZGVzW2ZzZS0+aW5kZXhdLmhlaWdodDsNCisNCisJcmV0dXJuIDA7DQor fQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9jaGVja19zZW5zb3JfaWQoc3RydWN0IG92MDJhMTAg Km92MDJhMTApDQorew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3Vi ZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCisJdTE2IGlkOw0KKwl1OCBjaGlwX2lkX2g7DQor CXU4IGNoaXBfaWRfbDsNCisJaW50IHJldDsNCisNCisJLyogQ2hlY2sgc2Vuc29yIHJldmlzaW9u ICovDQorCXJldCA9IG92MDJhMTBfcmVhZF9zbWJ1cyhvdjAyYTEwLCBPVjAyQTEwX1JFR19DSElQ X0lEX0gsICZjaGlwX2lkX2gpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0 ID0gb3YwMmExMF9yZWFkX3NtYnVzKG92MDJhMTAsIE9WMDJBMTBfUkVHX0NISVBfSURfTCwgJmNo aXBfaWRfbCk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlpZCA9IChjaGlwX2lk X2ggPDwgOCkgfCBjaGlwX2lkX2w7DQorCWlmIChpZCAhPSBDSElQX0lEKSB7DQorCQlkZXZfZXJy KCZjbGllbnQtPmRldiwgIlVuZXhwZWN0ZWQgc2Vuc29yIGlkKCUwNHgpXG4iLCBpZCk7DQorCQly ZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBv djAyYTEwX3Bvd2VyX29uKHN0cnVjdCBkZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBpMmNfY2xp ZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7DQorCXN0cnVjdCB2NGwyX3N1YmRldiAq c2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsNCisJc3RydWN0IG92MDJhMTAgKm92MDJh MTAgPSB0b19vdjAyYTEwKHNkKTsNCisJaW50IHJldDsNCisNCisJZ3Bpb2Rfc2V0X3ZhbHVlX2Nh bnNsZWVwKG92MDJhMTAtPnJzdF9ncGlvLCAwKTsNCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVw KG92MDJhMTAtPnBkX2dwaW8sIDApOw0KKw0KKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUob3Yw MmExMC0+ZWNsayk7DQorCWlmIChyZXQgPCAwKSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byBlbmFibGUgZWNsa1xuIik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldCA9IHJlZ3Vs YXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKG92MDJhMTBfc3VwcGx5X25hbWVzKSwNCisJCQkJ ICAgIG92MDJhMTAtPnN1cHBsaWVzKTsNCisJaWYgKHJldCA8IDApIHsNCisJCWRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIGVuYWJsZSByZWd1bGF0b3JzXG4iKTsNCisJCWdvdG8gZGlzYWJsZV9jbGs7 DQorCX0NCisJdXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApOw0KKw0KKwlncGlvZF9zZXRfdmFsdWVf Y2Fuc2xlZXAob3YwMmExMC0+cGRfZ3BpbywgMSk7DQorCXVzbGVlcF9yYW5nZSg1MDAwLCA2MDAw KTsNCisNCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG92MDJhMTAtPnJzdF9ncGlvLCAxKTsN CisJdXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApOw0KKw0KKwlyZXQgPSBvdjAyYTEwX2NoZWNrX3Nl bnNvcl9pZChvdjAyYTEwKTsNCisJaWYgKHJldCkNCisJCWdvdG8gZGlzYWJsZV9yZWd1bGF0b3I7 DQorDQorCXJldHVybiAwOw0KKw0KK2Rpc2FibGVfcmVndWxhdG9yOg0KKwlyZWd1bGF0b3JfYnVs a19kaXNhYmxlKEFSUkFZX1NJWkUob3YwMmExMF9zdXBwbHlfbmFtZXMpLA0KKwkJCSAgICAgICBv djAyYTEwLT5zdXBwbGllcyk7DQorZGlzYWJsZV9jbGs6DQorCWNsa19kaXNhYmxlX3VucHJlcGFy ZShvdjAyYTEwLT5lY2xrKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCBv djAyYTEwX3Bvd2VyX29mZihzdHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgaTJjX2Ns aWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYg KnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7DQorCXN0cnVjdCBvdjAyYTEwICpvdjAy YTEwID0gdG9fb3YwMmExMChzZCk7DQorDQorCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChvdjAy YTEwLT5yc3RfZ3BpbywgMCk7DQorCWNsa19kaXNhYmxlX3VucHJlcGFyZShvdjAyYTEwLT5lY2xr KTsNCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG92MDJhMTAtPnBkX2dwaW8sIDApOw0KKwly ZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUob3YwMmExMF9zdXBwbHlfbmFtZXMpLA0K KwkJCSAgICAgICBvdjAyYTEwLT5zdXBwbGllcyk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitz dGF0aWMgaW50IF9fb3YwMmExMF9zdGFydF9zdHJlYW0oc3RydWN0IG92MDJhMTAgKm92MDJhMTAp DQorew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgm b3YwMmExMC0+c3ViZGV2KTsNCisJY29uc3Qgc3RydWN0IG92MDJhMTBfcmVnX2xpc3QgKnJlZ19s aXN0Ow0KKwlpbnQgcmV0Ow0KKw0KKwkvKiBBcHBseSBkZWZhdWx0IHZhbHVlcyBvZiBjdXJyZW50 IG1vZGUgKi8NCisJcmVnX2xpc3QgPSAmb3YwMmExMC0+Y3VyX21vZGUtPnJlZ19saXN0Ow0KKwly ZXQgPSBvdjAyYTEwX3dyaXRlX2FycmF5KG92MDJhMTAsIHJlZ19saXN0KTsNCisJaWYgKHJldCkN CisJCXJldHVybiByZXQ7DQorDQorCS8qIEFwcGx5IGN1c3RvbWl6ZWQgdmFsdWVzIGZyb20gdXNl ciAqLw0KKwlyZXQgPSBfX3Y0bDJfY3RybF9oYW5kbGVyX3NldHVwKG92MDJhMTAtPnN1YmRldi5j dHJsX2hhbmRsZXIpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJLyogU2V0IG9y aWVudGF0aW9uIHRvIDE4MCBkZWdyZWUgKi8NCisJaWYgKG92MDJhMTAtPnVwc2lkZV9kb3duKSB7 DQorCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX01JUlJPUl9G TElQX0NPTlRST0wsDQorCQkJCQkJUkVHX01JUlJPUl9GTElQX0VOQUJMRSk7DQorCQlpZiAocmV0 KSB7DQorCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gc2V0IG9yaWVudGF0aW9u XG4iKTsNCisJCQlyZXR1cm4gcmV0Ow0KKwkJfQ0KKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5 dGVfZGF0YShjbGllbnQsIFJFR19HTE9CQUxfRUZGRUNUSVZFLA0KKwkJCQkJCVJFR19FTkFCTEUp Ow0KKwkJaWYgKHJldCA8IDApDQorCQkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwkvKiBTZXQgbWlw aSBUWCBzcGVlZCBhY2NvcmRpbmcgdG8gRFQgcHJvcGVydHkgKi8NCisJaWYgKG92MDJhMTAtPm1p cGlfY2xvY2tfdHhfc3BlZWQgIT0gT1YwMkExMF9NSVBJX1RYX1NQRUVEX0RFRkFVTFQpIHsNCisJ CXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBUWF9TUEVFRF9BUkVBX1NF TCwNCisJCQkJCQlvdjAyYTEwLT5taXBpX2Nsb2NrX3R4X3NwZWVkKTsNCisJCWlmIChyZXQgPCAw KQ0KKwkJCXJldHVybiByZXQ7DQorCX0NCisNCisJLyogU2V0IHN0cmVhbSBvbiByZWdpc3RlciAq Lw0KKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19TQ19DVFJM X01PREUsDQorCQkJCQkgU0NfQ1RSTF9NT0RFX1NUUkVBTUlORyk7DQorfQ0KKw0KK3N0YXRpYyBp bnQgX19vdjAyYTEwX3N0b3Bfc3RyZWFtKHN0cnVjdCBvdjAyYTEwICpvdjAyYTEwKQ0KK3sNCisJ c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAt PnN1YmRldik7DQorDQorCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwg UkVHX1NDX0NUUkxfTU9ERSwNCisJCQkJCSBTQ19DVFJMX01PREVfU1RBTkRCWSk7DQorfQ0KKw0K K3N0YXRpYyBpbnQgb3YwMmExMF9lbnRpdHlfaW5pdF9jZmcoc3RydWN0IHY0bDJfc3ViZGV2ICpz ZCwNCisJCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZykNCit7DQorCXN0 cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm10ID0gew0KKwkJLndoaWNoID0gY2ZnID8gVjRMMl9T VUJERVZfRk9STUFUX1RSWSA6IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQorCQkuZm9ybWF0 ID0gew0KKwkJCS53aWR0aCA9IDE2MDAsDQorCQkJLmhlaWdodCA9IDEyMDAsDQorCQl9DQorCX07 DQorDQorCW92MDJhMTBfc2V0X2ZtdChzZCwgY2ZnLCAmZm10KTsNCisNCisJcmV0dXJuIDA7DQor fQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNk LCBpbnQgb24pDQorew0KKwlzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCA9IHRvX292MDJhMTAoc2Qp Ow0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3Yw MmExMC0+c3ViZGV2KTsNCisJaW50IHJldDsNCisNCisJbXV0ZXhfbG9jaygmb3YwMmExMC0+bXV0 ZXgpOw0KKw0KKwlpZiAob3YwMmExMC0+c3RyZWFtaW5nID09IG9uKQ0KKwkJZ290byB1bmxvY2tf YW5kX3JldHVybjsNCisNCisJaWYgKG9uKSB7DQorCQlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5j KCZjbGllbnQtPmRldik7DQorCQlpZiAocmV0IDwgMCkgew0KKwkJCXBtX3J1bnRpbWVfcHV0X25v aWRsZSgmY2xpZW50LT5kZXYpOw0KKwkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47DQorCQl9DQor DQorCQlyZXQgPSBfX292MDJhMTBfc3RhcnRfc3RyZWFtKG92MDJhMTApOw0KKwkJaWYgKHJldCkg ew0KKwkJCV9fb3YwMmExMF9zdG9wX3N0cmVhbShvdjAyYTEwKTsNCisJCQlvdjAyYTEwLT5zdHJl YW1pbmcgPSAhb247DQorCQkJZ290byBlcnJfcnBtX3B1dDsNCisJCX0NCisJfSBlbHNlIHsNCisJ CV9fb3YwMmExMF9zdG9wX3N0cmVhbShvdjAyYTEwKTsNCisJCXBtX3J1bnRpbWVfcHV0KCZjbGll bnQtPmRldik7DQorCX0NCisNCisJb3YwMmExMC0+c3RyZWFtaW5nID0gb247DQorCW11dGV4X3Vu bG9jaygmb3YwMmExMC0+bXV0ZXgpOw0KKw0KKwlyZXR1cm4gMDsNCisNCitlcnJfcnBtX3B1dDoN CisJcG1fcnVudGltZV9wdXQoJmNsaWVudC0+ZGV2KTsNCit1bmxvY2tfYW5kX3JldHVybjoNCisJ bXV0ZXhfdW5sb2NrKCZvdjAyYTEwLT5tdXRleCk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0K K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBvdjAyYTEwX3BtX29wcyA9IHsNCisJU0VU X1NZU1RFTV9TTEVFUF9QTV9PUFMocG1fcnVudGltZV9mb3JjZV9zdXNwZW5kLA0KKwkJCQlwbV9y dW50aW1lX2ZvcmNlX3Jlc3VtZSkNCisJU0VUX1JVTlRJTUVfUE1fT1BTKG92MDJhMTBfcG93ZXJf b2ZmLCBvdjAyYTEwX3Bvd2VyX29uLCBOVUxMKQ0KK307DQorDQorLyoNCisgKiBvdjAyYTEwX3Nl dF9leHBvc3VyZSAtIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHNldHRpbmcgZXhwb3N1cmUgdGltZQ0K KyAqIEBwcml2OiBQb2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUNCisgKiBAdmFsOiBWYXJpYWJs ZSBmb3IgZXhwb3N1cmUgdGltZSwgaW4gdGhlIHVuaXQgb2YgbWljcm8tc2Vjb25kDQorICoNCisg KiBTZXQgZXhwb3N1cmUgdGltZSBiYXNlZCBvbiBpbnB1dCB2YWx1ZS4NCisgKg0KKyAqIFJldHVy bjogMCBvbiBzdWNjZXNzDQorICovDQorc3RhdGljIGludCBvdjAyYTEwX3NldF9leHBvc3VyZShz dHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCwgaW50IHZhbCkNCit7DQorCXN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYpOw0KKwlpbnQg cmV0Ow0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1BB R0VfU1dJVENILCBSRUdfRU5BQkxFKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0K Kw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgT1YwMkExMF9SRUdf RVhQT1NVUkVfSCwNCisJCQkJCXZhbCA+PiBPVjAyQTEwX0VYUF9TSElGVCk7DQorCWlmIChyZXQg PCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0 YShjbGllbnQsIE9WMDJBMTBfUkVHX0VYUE9TVVJFX0wsIHZhbCk7DQorCWlmIChyZXQgPCAwKQ0K KwkJcmV0dXJuIHJldDsNCisNCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xp ZW50LCBSRUdfR0xPQkFMX0VGRkVDVElWRSwNCisJCQkJCSBSRUdfRU5BQkxFKTsNCit9DQorDQor c3RhdGljIGludCBvdjAyYTEwX3NldF9nYWluKHN0cnVjdCBvdjAyYTEwICpvdjAyYTEwLCBpbnQg dmFsKQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRh dGEoJm92MDJhMTAtPnN1YmRldik7DQorCWludCByZXQ7DQorDQorCXJldCA9IGkyY19zbWJ1c193 cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdfUEFHRV9TV0lUQ0gsIFJFR19FTkFCTEUpOw0KKwlp ZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldCA9IGkyY19zbWJ1c193cml0ZV9i eXRlX2RhdGEoY2xpZW50LCBPVjAyQTEwX1JFR19HQUlOLCB2YWwpOw0KKwlpZiAocmV0IDwgMCkN CisJCXJldHVybiByZXQ7DQorDQorCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNs aWVudCwgUkVHX0dMT0JBTF9FRkZFQ1RJVkUsDQorCQkJCQkgUkVHX0VOQUJMRSk7DQorfQ0KKw0K K3N0YXRpYyBpbnQgb3YwMmExMF9zZXRfdmJsYW5rKHN0cnVjdCBvdjAyYTEwICpvdjAyYTEwLCBp bnQgdmFsKQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRl dmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorCXUzMiB2dHMgPSB2YWwgKyBvdjAyYTEwLT5jdXJf bW9kZS0+aGVpZ2h0IC0gT1YwMkExMF9CQVNJQ19MSU5FOw0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQg PSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1BBR0VfU1dJVENILCBSRUdf RU5BQkxFKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSBpMmNf c21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgT1YwMkExMF9SRUdfVlRTX0gsDQorCQkJCQl2 dHMgPj4gT1YwMkExMF9WVFNfU0hJRlQpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7 DQorDQorCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBPVjAyQTEwX1JF R19WVFNfTCwgdnRzKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXR1 cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19HTE9CQUxfRUZGRUNUSVZF LA0KKwkJCQkJIFJFR19FTkFCTEUpOw0KK30NCisNCitzdGF0aWMgaW50IG92MDJhMTBfc2V0X3Rl c3RfcGF0dGVybihzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCwgaW50IHBhdHRlcm4pDQorew0KKwlz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+ c3ViZGV2KTsNCisJaW50IHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0 YShjbGllbnQsIFJFR19QQUdFX1NXSVRDSCwgUkVHX0VOQUJMRSk7DQorCWlmIChyZXQgPCAwKQ0K KwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGll bnQsIE9WMDJBMTBfUkVHX1RFU1RfUEFUVEVSTiwNCisJCQkJCXBhdHRlcm4pOw0KKwlpZiAocmV0 IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2Rh dGEoY2xpZW50LCBSRUdfR0xPQkFMX0VGRkVDVElWRSwNCisJCQkJCVJFR19FTkFCTEUpOw0KKwlp ZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldHVybiBpMmNfc21idXNfd3JpdGVf Ynl0ZV9kYXRhKGNsaWVudCwgUkVHX1NDX0NUUkxfTU9ERSwNCisJCQkJCSBTQ19DVFJMX01PREVf U1RSRUFNSU5HKTsNCit9DQorDQorc3RhdGljIGludCBvdjAyYTEwX3NldF9jdHJsKHN0cnVjdCB2 NGwyX2N0cmwgKmN0cmwpDQorew0KKwlzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCA9IGNvbnRhaW5l cl9vZihjdHJsLT5oYW5kbGVyLA0KKwkJCQkJICAgICAgIHN0cnVjdCBvdjAyYTEwLCBjdHJsX2hh bmRsZXIpOw0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0 YSgmb3YwMmExMC0+c3ViZGV2KTsNCisJczY0IG1heF9leHBvOw0KKwlpbnQgcmV0Ow0KKw0KKwkv KiBQcm9wYWdhdGUgY2hhbmdlIG9mIGN1cnJlbnQgY29udHJvbCB0byBhbGwgcmVsYXRlZCBjb250 cm9scyAqLw0KKwlpZiAoY3RybC0+aWQgPT0gVjRMMl9DSURfVkJMQU5LKSB7DQorCQkvKiBVcGRh dGUgbWF4IGV4cG9zdXJlIHdoaWxlIG1lZXRpbmcgZXhwZWN0ZWQgdmJsYW5raW5nICovDQorCQlt YXhfZXhwbyA9IG92MDJhMTAtPmN1cl9tb2RlLT5oZWlnaHQgKyBjdHJsLT52YWwgLQ0KKwkJCSAg IE9WMDJBMTBfRVhQT1NVUkVfTUFYX01BUkdJTjsNCisJCV9fdjRsMl9jdHJsX21vZGlmeV9yYW5n ZShvdjAyYTEwLT5leHBvc3VyZSwNCisJCQkJCSBvdjAyYTEwLT5leHBvc3VyZS0+bWluaW11bSwg bWF4X2V4cG8sDQorCQkJCQkgb3YwMmExMC0+ZXhwb3N1cmUtPnN0ZXAsDQorCQkJCQkgb3YwMmEx MC0+ZXhwb3N1cmUtPmRlZmF1bHRfdmFsdWUpOw0KKwl9DQorDQorCS8qIFY0TDIgY29udHJvbHMg dmFsdWVzIHdpbGwgYmUgYXBwbGllZCBvbmx5IHdoZW4gcG93ZXIgaXMgYWxyZWFkeSB1cCAqLw0K KwlpZiAoIXBtX3J1bnRpbWVfZ2V0X2lmX2luX3VzZSgmY2xpZW50LT5kZXYpKQ0KKwkJcmV0dXJu IDA7DQorDQorCXN3aXRjaCAoY3RybC0+aWQpIHsNCisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToN CisJCXJldCA9IG92MDJhMTBfc2V0X2V4cG9zdXJlKG92MDJhMTAsIGN0cmwtPnZhbCk7DQorCQli cmVhazsNCisJY2FzZSBWNEwyX0NJRF9BTkFMT0dVRV9HQUlOOg0KKwkJcmV0ID0gb3YwMmExMF9z ZXRfZ2FpbihvdjAyYTEwLCBjdHJsLT52YWwpOw0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9DSURf VkJMQU5LOg0KKwkJcmV0ID0gb3YwMmExMF9zZXRfdmJsYW5rKG92MDJhMTAsIGN0cmwtPnZhbCk7 DQorCQlicmVhazsNCisJY2FzZSBWNEwyX0NJRF9URVNUX1BBVFRFUk46DQorCQlyZXQgPSBvdjAy YTEwX3NldF90ZXN0X3BhdHRlcm4ob3YwMmExMCwgY3RybC0+dmFsKTsNCisJCWJyZWFrOw0KKwlk ZWZhdWx0Og0KKwkJcmV0ID0gLUVJTlZBTDsNCisJCWJyZWFrOw0KKwl9Ow0KKw0KKwlwbV9ydW50 aW1lX3B1dCgmY2xpZW50LT5kZXYpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMg Y29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBvdjAyYTEwX3ZpZGVvX29wcyA9IHsN CisJLnNfc3RyZWFtID0gb3YwMmExMF9zX3N0cmVhbSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBz dHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX29wcyBvdjAyYTEwX3BhZF9vcHMgPSB7DQorCS5pbml0X2Nm ZyA9IG92MDJhMTBfZW50aXR5X2luaXRfY2ZnLA0KKwkuZW51bV9tYnVzX2NvZGUgPSBvdjAyYTEw X2VudW1fbWJ1c19jb2RlLA0KKwkuZW51bV9mcmFtZV9zaXplID0gb3YwMmExMF9lbnVtX2ZyYW1l X3NpemVzLA0KKwkuZ2V0X2ZtdCA9IG92MDJhMTBfZ2V0X2ZtdCwNCisJLnNldF9mbXQgPSBvdjAy YTEwX3NldF9mbXQsDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29w cyBvdjAyYTEwX3N1YmRldl9vcHMgPSB7DQorCS52aWRlbwk9ICZvdjAyYTEwX3ZpZGVvX29wcywN CisJLnBhZAk9ICZvdjAyYTEwX3BhZF9vcHMsDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0 IG1lZGlhX2VudGl0eV9vcGVyYXRpb25zIG92MDJhMTBfc3ViZGV2X2VudGl0eV9vcHMgPSB7DQor CS5saW5rX3ZhbGlkYXRlID0gdjRsMl9zdWJkZXZfbGlua192YWxpZGF0ZSwNCit9Ow0KKw0KK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBvdjAyYTEwX2N0cmxfb3BzID0gew0KKwku c19jdHJsID0gb3YwMmExMF9zZXRfY3RybCwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9p bml0aWFsaXplX2NvbnRyb2xzKHN0cnVjdCBvdjAyYTEwICpvdjAyYTEwKQ0KK3sNCisJc3RydWN0 IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRl dik7DQorCWNvbnN0IHN0cnVjdCBvdjAyYTEwX21vZGUgKm1vZGU7DQorCXN0cnVjdCB2NGwyX2N0 cmxfaGFuZGxlciAqaGFuZGxlcjsNCisJc3RydWN0IHY0bDJfY3RybCAqY3RybDsNCisJczY0IGV4 cG9zdXJlX21heDsNCisJczY0IHZibGFua19kZWY7DQorCXM2NCBwaXhlbF9yYXRlOw0KKwlzNjQg aF9ibGFuazsNCisJaW50IHJldDsNCisNCisJaGFuZGxlciA9ICZvdjAyYTEwLT5jdHJsX2hhbmRs ZXI7DQorCW1vZGUgPSBvdjAyYTEwLT5jdXJfbW9kZTsNCisJcmV0ID0gdjRsMl9jdHJsX2hhbmRs ZXJfaW5pdChoYW5kbGVyLCA3KTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCWhh bmRsZXItPmxvY2sgPSAmb3YwMmExMC0+bXV0ZXg7DQorDQorCWN0cmwgPSB2NGwyX2N0cmxfbmV3 X2ludF9tZW51KGhhbmRsZXIsIE5VTEwsIFY0TDJfQ0lEX0xJTktfRlJFUSwgMCwgMCwNCisJCQkJ ICAgICAgbGlua19mcmVxX21lbnVfaXRlbXMpOw0KKwlpZiAoY3RybCkNCisJCWN0cmwtPmZsYWdz IHw9IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTsNCisNCisJcGl4ZWxfcmF0ZSA9IHRvX3BpeGVs X3JhdGUoMCk7DQorCXY0bDJfY3RybF9uZXdfc3RkKGhhbmRsZXIsIE5VTEwsIFY0TDJfQ0lEX1BJ WEVMX1JBVEUsIDAsIHBpeGVsX3JhdGUsIDEsDQorCQkJICBwaXhlbF9yYXRlKTsNCisNCisJaF9i bGFuayA9IG1vZGUtPmh0c19kZWYgLSBtb2RlLT53aWR0aDsNCisJdjRsMl9jdHJsX25ld19zdGQo aGFuZGxlciwgTlVMTCwgVjRMMl9DSURfSEJMQU5LLCBoX2JsYW5rLCBoX2JsYW5rLCAxLA0KKwkJ CSAgaF9ibGFuayk7DQorDQorCXZibGFua19kZWYgPSBtb2RlLT52dHNfZGVmIC0gbW9kZS0+aGVp Z2h0Ow0KKwl2NGwyX2N0cmxfbmV3X3N0ZChoYW5kbGVyLCAmb3YwMmExMF9jdHJsX29wcywgVjRM Ml9DSURfVkJMQU5LLA0KKwkJCSAgdmJsYW5rX2RlZiwgT1YwMkExMF9WVFNfTUFYIC0gbW9kZS0+ aGVpZ2h0LCAxLA0KKwkJCSAgdmJsYW5rX2RlZik7DQorDQorCWV4cG9zdXJlX21heCA9IG1vZGUt PnZ0c19kZWYgLSA0Ow0KKwlvdjAyYTEwLT5leHBvc3VyZSA9IHY0bDJfY3RybF9uZXdfc3RkKGhh bmRsZXIsICZvdjAyYTEwX2N0cmxfb3BzLA0KKwkJCQkJICAgICAgVjRMMl9DSURfRVhQT1NVUkUs DQorCQkJCQkgICAgICBPVjAyQTEwX0VYUE9TVVJFX01JTiwNCisJCQkJCSAgICAgIGV4cG9zdXJl X21heCwNCisJCQkJCSAgICAgIE9WMDJBMTBfRVhQT1NVUkVfU1RFUCwNCisJCQkJCSAgICAgIG1v ZGUtPmV4cF9kZWYpOw0KKw0KKwl2NGwyX2N0cmxfbmV3X3N0ZChoYW5kbGVyLCAmb3YwMmExMF9j dHJsX29wcywNCisJCQkgIFY0TDJfQ0lEX0FOQUxPR1VFX0dBSU4sIE9WMDJBMTBfR0FJTl9NSU4s DQorCQkJICBPVjAyQTEwX0dBSU5fTUFYLCBPVjAyQTEwX0dBSU5fU1RFUCwNCisJCQkgIE9WMDJB MTBfR0FJTl9ERUZBVUxUKTsNCisNCisJdjRsMl9jdHJsX25ld19zdGRfbWVudV9pdGVtcyhoYW5k bGVyLCAmb3YwMmExMF9jdHJsX29wcywNCisJCQkJICAgICBWNEwyX0NJRF9URVNUX1BBVFRFUk4s DQorCQkJCSAgICAgQVJSQVlfU0laRShvdjAyYTEwX3Rlc3RfcGF0dGVybl9tZW51KSAtIDEsDQor CQkJCSAgICAgMCwgMCwgb3YwMmExMF90ZXN0X3BhdHRlcm5fbWVudSk7DQorDQorCWlmIChoYW5k bGVyLT5lcnJvcikgew0KKwkJcmV0ID0gaGFuZGxlci0+ZXJyb3I7DQorCQlkZXZfZXJyKCZjbGll bnQtPmRldiwgImZhaWxlZCB0byBpbml0IGNvbnRyb2xzKCVkKVxuIiwgcmV0KTsNCisJCWdvdG8g ZXJyX2ZyZWVfaGFuZGxlcjsNCisJfQ0KKw0KKwlvdjAyYTEwLT5zdWJkZXYuY3RybF9oYW5kbGVy ID0gaGFuZGxlcjsNCisNCisJcmV0dXJuIDA7DQorDQorZXJyX2ZyZWVfaGFuZGxlcjoNCisJdjRs Ml9jdHJsX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQor c3RhdGljIGludCBvdjAyYTEwX2NoZWNrX2h3Y2ZnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IG92MDJhMTAgKm92MDJhMTApDQorew0KKwlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZXA7DQorCXN0 cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUgPSBkZXZfZndub2RlKGRldik7DQorCXN0cnVjdCB2 NGwyX2Z3bm9kZV9lbmRwb2ludCBidXNfY2ZnID0gew0KKwkJLmJ1c190eXBlID0gVjRMMl9NQlVT X0NTSTJfRFBIWSwNCisJfTsNCisJdW5zaWduZWQgaW50IGksIGo7DQorCWludCByZXQ7DQorDQor CWlmICghZndub2RlKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWVwID0gZndub2RlX2dyYXBo X2dldF9uZXh0X2VuZHBvaW50KGZ3bm9kZSwgTlVMTCk7DQorCWlmICghZXApDQorCQlyZXR1cm4g LUVOWElPOw0KKw0KKwlyZXQgPSB2NGwyX2Z3bm9kZV9lbmRwb2ludF9hbGxvY19wYXJzZShlcCwg JmJ1c19jZmcpOw0KKwlmd25vZGVfaGFuZGxlX3B1dChlcCk7DQorCWlmIChyZXQpDQorCQlyZXR1 cm4gcmV0Ow0KKw0KKwlpZiAoIWJ1c19jZmcubnJfb2ZfbGlua19mcmVxdWVuY2llcykgew0KKwkJ ZGV2X2VycihkZXYsICJubyBsaW5rIGZyZXF1ZW5jaWVzIGRlZmluZWQiKTsNCisJCXJldCA9IC1F SU5WQUw7DQorCQlnb3RvIGNoZWNrX2h3Y2ZnX2Vycm9yOw0KKwl9DQorDQorCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGxpbmtfZnJlcV9tZW51X2l0ZW1zKTsgaSsrKSB7DQorCQlmb3IgKGog PSAwOyBqIDwgYnVzX2NmZy5ucl9vZl9saW5rX2ZyZXF1ZW5jaWVzOyBqKyspIHsNCisJCQlpZiAo bGlua19mcmVxX21lbnVfaXRlbXNbaV0gPT0NCisJCQkJYnVzX2NmZy5saW5rX2ZyZXF1ZW5jaWVz W2pdKQ0KKwkJCQlicmVhazsNCisJCX0NCisNCisJCWlmIChqID09IGJ1c19jZmcubnJfb2ZfbGlu a19mcmVxdWVuY2llcykgew0KKwkJCWRldl9lcnIoZGV2LCAibm8gbGluayBmcmVxdWVuY3kgJWxs ZCBzdXBwb3J0ZWQiLA0KKwkJCQlsaW5rX2ZyZXFfbWVudV9pdGVtc1tpXSk7DQorCQkJcmV0ID0g LUVJTlZBTDsNCisJCQlnb3RvIGNoZWNrX2h3Y2ZnX2Vycm9yOw0KKwkJfQ0KKwl9DQorDQorY2hl Y2tfaHdjZmdfZXJyb3I6DQorCXY0bDJfZndub2RlX2VuZHBvaW50X2ZyZWUoJmJ1c19jZmcpOw0K Kw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IG92MDJhMTBfcHJvYmUoc3RydWN0 IGkyY19jbGllbnQgKmNsaWVudCkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQt PmRldjsNCisJc3RydWN0IG92MDJhMTAgKm92MDJhMTA7DQorCXVuc2lnbmVkIGludCByb3RhdGlv bjsNCisJdW5zaWduZWQgaW50IGNsb2NrX2xhbmVfdHhfc3BlZWQ7DQorCXVuc2lnbmVkIGludCBp Ow0KKwlpbnQgcmV0Ow0KKw0KKwlvdjAyYTEwID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpv djAyYTEwKSwgR0ZQX0tFUk5FTCk7DQorCWlmICghb3YwMmExMCkNCisJCXJldHVybiAtRU5PTUVN Ow0KKw0KKwlyZXQgPSBvdjAyYTEwX2NoZWNrX2h3Y2ZnKGRldiwgb3YwMmExMCk7DQorCWlmIChy ZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNoZWNrIEhXIGNvbmZpZ3VyYXRpb246 ICVkIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJdjRsMl9pMmNfc3ViZGV2X2lu aXQoJm92MDJhMTAtPnN1YmRldiwgY2xpZW50LCAmb3YwMmExMF9zdWJkZXZfb3BzKTsNCisJb3Yw MmExMC0+bWlwaV9jbG9ja190eF9zcGVlZCA9IE9WMDJBMTBfTUlQSV9UWF9TUEVFRF9ERUZBVUxU Ow0KKwlvdjAyYTEwLT5mbXQuY29kZSA9IE1FRElBX0JVU19GTVRfU0JHR1IxMF8xWDEwOw0KKw0K KwkvKiBPcHRpb25hbCBpbmRpY2F0aW9uIG9mIHBoeXNpY2FsIHJvdGF0aW9uIG9mIHNlbnNvciAq Lw0KKwlyZXQgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3bm9kZShkZXYpLCAicm90 YXRpb24iLCAmcm90YXRpb24pOw0KKwlpZiAoIXJldCAmJiByb3RhdGlvbiA9PSAxODApIHsNCisJ CW92MDJhMTAtPnVwc2lkZV9kb3duID0gdHJ1ZTsNCisJCW92MDJhMTAtPmZtdC5jb2RlID0gTUVE SUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTA7DQorCX0NCisNCisJLyogT3B0aW9uYWwgaW5kaWNhdGlv biBvZiBtaXBpIFRYIHNwZWVkICovDQorCXJldCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihk ZXZfZndub2RlKGRldiksICJvdnRpLG1pcGktdHgtc3BlZWQiLA0KKwkJCQkgICAgICAgJmNsb2Nr X2xhbmVfdHhfc3BlZWQpOw0KKw0KKwlpZiAoIXJldCkNCisJCW92MDJhMTAtPm1pcGlfY2xvY2tf dHhfc3BlZWQgPSBjbG9ja19sYW5lX3R4X3NwZWVkOw0KKw0KKwkvKiBHZXQgc3lzdGVtIGNsb2Nr IChlY2xrKSAqLw0KKwlvdjAyYTEwLT5lY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImVjbGsiKTsN CisJaWYgKElTX0VSUihvdjAyYTEwLT5lY2xrKSkgew0KKwkJcmV0ID0gUFRSX0VSUihvdjAyYTEw LT5lY2xrKTsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBlY2xrICVkXG4iLCByZXQp Ow0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXQgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91 MzIoZGV2X2Z3bm9kZShkZXYpLCAiY2xvY2stZnJlcXVlbmN5IiwNCisJCQkJICAgICAgICZvdjAy YTEwLT5lY2xrX2ZyZXEpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byBnZXQgZWNsayBmcmVxdWVuY3lcbiIpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXQg PSBjbGtfc2V0X3JhdGUob3YwMmExMC0+ZWNsaywgb3YwMmExMC0+ZWNsa19mcmVxKTsNCisJaWYg KHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc2V0IGVjbGsgZnJlcXVlbmN5ICgy NE1IeilcbiIpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlpZiAoY2xrX2dldF9yYXRlKG92 MDJhMTAtPmVjbGspICE9IE9WMDJBMTBfRUNMS19GUkVRKSB7DQorCQlkZXZfd2FybihkZXYsICJ3 cm9uZyBlY2xrIGZyZXF1ZW5jeSAlZCBIeiwgZXhwZWN0ZWQ6ICVkIEh6XG4iLA0KKwkJCSBvdjAy YTEwLT5lY2xrX2ZyZXEsIE9WMDJBMTBfRUNMS19GUkVRKTsNCisJCXJldHVybiAtRUlOVkFMOw0K Kwl9DQorDQorCW92MDJhMTAtPnBkX2dwaW8gPSBkZXZtX2dwaW9kX2dldChkZXYsICJwb3dlcmRv d24iLCBHUElPRF9PVVRfSElHSCk7DQorCWlmIChJU19FUlIob3YwMmExMC0+cGRfZ3BpbykpIHsN CisJCXJldCA9IFBUUl9FUlIob3YwMmExMC0+cGRfZ3Bpbyk7DQorCQlkZXZfZXJyKGRldiwgImZh aWxlZCB0byBnZXQgcG93ZXJkb3duLWdwaW9zICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsN CisJfQ0KKw0KKwlvdjAyYTEwLT5yc3RfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJlc2V0 IiwgR1BJT0RfT1VUX0xPVyk7DQorCWlmIChJU19FUlIob3YwMmExMC0+cnN0X2dwaW8pKSB7DQor CQlyZXQgPSBQVFJfRVJSKG92MDJhMTAtPnJzdF9ncGlvKTsNCisJCWRldl9lcnIoZGV2LCAiZmFp bGVkIHRvIGdldCByZXNldC1ncGlvcyAlZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0N CisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3YwMmExMF9zdXBwbHlfbmFtZXMpOyBp KyspDQorCQlvdjAyYTEwLT5zdXBwbGllc1tpXS5zdXBwbHkgPSBvdjAyYTEwX3N1cHBseV9uYW1l c1tpXTsNCisNCisJcmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQoZGV2LCBBUlJBWV9TSVpF KG92MDJhMTBfc3VwcGx5X25hbWVzKSwNCisJCQkJICAgICAgb3YwMmExMC0+c3VwcGxpZXMpOw0K KwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgcmVndWxhdG9yc1xu Iik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCW11dGV4X2luaXQoJm92MDJhMTAtPm11dGV4 KTsNCisJb3YwMmExMC0+Y3VyX21vZGUgPSAmc3VwcG9ydGVkX21vZGVzWzBdOw0KKwlyZXQgPSBv djAyYTEwX2luaXRpYWxpemVfY29udHJvbHMob3YwMmExMCk7DQorCWlmIChyZXQpIHsNCisJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgY29udHJvbHNcbiIpOw0KKwkJZ290byBl cnJfZGVzdHJveV9tdXRleDsNCisJfQ0KKw0KKwlvdjAyYTEwLT5zdWJkZXYuZmxhZ3MgfD0gVjRM Ml9TVUJERVZfRkxfSEFTX0RFVk5PREU7DQorCW92MDJhMTAtPnN1YmRldi5lbnRpdHkub3BzID0g Jm92MDJhMTBfc3ViZGV2X2VudGl0eV9vcHM7DQorCW92MDJhMTAtPnN1YmRldi5lbnRpdHkuZnVu Y3Rpb24gPSBNRURJQV9FTlRfRl9DQU1fU0VOU09SOw0KKwlvdjAyYTEwLT5wYWQuZmxhZ3MgPSBN RURJQV9QQURfRkxfU09VUkNFOw0KKwlyZXQgPSBtZWRpYV9lbnRpdHlfcGFkc19pbml0KCZvdjAy YTEwLT5zdWJkZXYuZW50aXR5LCAxLCAmb3YwMmExMC0+cGFkKTsNCisJaWYgKHJldCA8IDApIHsN CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgZW50aXR5IHBhZHM6ICVkIiwgcmV0KTsN CisJCWdvdG8gZXJyX2ZyZWVfaGFuZGxlcjsNCisJfQ0KKw0KKwlwbV9ydW50aW1lX2VuYWJsZShk ZXYpOw0KKwlpZiAoIXBtX3J1bnRpbWVfZW5hYmxlZChkZXYpKSB7DQorCQlyZXQgPSBvdjAyYTEw X3Bvd2VyX29uKGRldik7DQorCQlpZiAocmV0IDwgMCkgew0KKwkJCWRldl9lcnIoZGV2LCAiZmFp bGVkIHRvIHBvd2VyIG9uOiAlZFxuIiwgcmV0KTsNCisJCQlnb3RvIGVycl9jbGVhbl9lbnRpdHk7 DQorCQl9DQorCX0NCisNCisJcmV0ID0gdjRsMl9hc3luY19yZWdpc3Rlcl9zdWJkZXYoJm92MDJh MTAtPnN1YmRldik7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJl Z2lzdGVyIFY0TDIgc3ViZGV2OiAlZCIsIHJldCk7DQorCQlnb3RvIGVycl9wb3dlcl9vZmY7DQor CX0NCisNCisJcmV0dXJuIDA7DQorDQorZXJyX3Bvd2VyX29mZjoNCisJcG1fcnVudGltZV9kaXNh YmxlKGRldik7DQorCWlmICghcG1fcnVudGltZV9lbmFibGVkKGRldikpDQorCQlvdjAyYTEwX3Bv d2VyX29mZihkZXYpOw0KK2Vycl9jbGVhbl9lbnRpdHk6DQorCW1lZGlhX2VudGl0eV9jbGVhbnVw KCZvdjAyYTEwLT5zdWJkZXYuZW50aXR5KTsNCitlcnJfZnJlZV9oYW5kbGVyOg0KKwl2NGwyX2N0 cmxfaGFuZGxlcl9mcmVlKG92MDJhMTAtPnN1YmRldi5jdHJsX2hhbmRsZXIpOw0KK2Vycl9kZXN0 cm95X211dGV4Og0KKwltdXRleF9kZXN0cm95KCZvdjAyYTEwLT5tdXRleCk7DQorDQorCXJldHVy biByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9yZW1vdmUoc3RydWN0IGkyY19jbGll bnQgKmNsaWVudCkNCit7DQorCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVu dGRhdGEoY2xpZW50KTsNCisJc3RydWN0IG92MDJhMTAgKm92MDJhMTAgPSB0b19vdjAyYTEwKHNk KTsNCisNCisJdjRsMl9hc3luY191bnJlZ2lzdGVyX3N1YmRldihzZCk7DQorCW1lZGlhX2VudGl0 eV9jbGVhbnVwKCZzZC0+ZW50aXR5KTsNCisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZShzZC0+Y3Ry bF9oYW5kbGVyKTsNCisJcG1fcnVudGltZV9kaXNhYmxlKCZjbGllbnQtPmRldik7DQorCWlmICgh cG1fcnVudGltZV9zdXNwZW5kZWQoJmNsaWVudC0+ZGV2KSkNCisJCW92MDJhMTBfcG93ZXJfb2Zm KCZjbGllbnQtPmRldik7DQorCXBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZCgmY2xpZW50LT5kZXYp Ow0KKwltdXRleF9kZXN0cm95KCZvdjAyYTEwLT5tdXRleCk7DQorDQorCXJldHVybiAwOw0KK30N CisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvdjAyYTEwX29mX21hdGNoW10g PSB7DQorCXsgLmNvbXBhdGlibGUgPSAib3Z0aSxvdjAyYTEwIiB9LA0KKwl7fQ0KK307DQorTU9E VUxFX0RFVklDRV9UQUJMRShvZiwgb3YwMmExMF9vZl9tYXRjaCk7DQorDQorc3RhdGljIHN0cnVj dCBpMmNfZHJpdmVyIG92MDJhMTBfaTJjX2RyaXZlciA9IHsNCisJLmRyaXZlciA9IHsNCisJCS5u YW1lID0gIm92MDJhMTAiLA0KKwkJLnBtID0gJm92MDJhMTBfcG1fb3BzLA0KKwkJLm9mX21hdGNo X3RhYmxlID0gb3YwMmExMF9vZl9tYXRjaCwNCisJfSwNCisJLnByb2JlX25ldwk9ICZvdjAyYTEw X3Byb2JlLA0KKwkucmVtb3ZlCQk9ICZvdjAyYTEwX3JlbW92ZSwNCit9Ow0KKw0KK21vZHVsZV9p MmNfZHJpdmVyKG92MDJhMTBfaTJjX2RyaXZlcik7DQorDQorTU9EVUxFX0FVVEhPUigiRG9uZ2No dW4gWmh1IDxkb25nY2h1bi56aHVAbWVkaWF0ZWsuY29tPiIpOw0KK01PRFVMRV9ERVNDUklQVElP TigiT21uaVZpc2lvbiBPVjAyQTEwIHNlbnNvciBkcml2ZXIiKTsNCitNT0RVTEVfTElDRU5TRSgi R1BMIHYyIik7DQorDQotLSANCjIuOS4yDQo=