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 X-Spam-Level: X-Spam-Status: No, score=-14.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6573CC83009 for ; Thu, 30 Apr 2020 08:10:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 464012186A for ; Thu, 30 Apr 2020 08:10:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="p4r1vK6Q" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726554AbgD3IKg (ORCPT ); Thu, 30 Apr 2020 04:10:36 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:17824 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726420AbgD3IKg (ORCPT ); Thu, 30 Apr 2020 04:10:36 -0400 X-UUID: 5c1c1a8ee0b343d8ad42022f5149ae09-20200430 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=wSmL9rJIeLXqd7O5wY8p1SgXTOzzag3bw2LzKNsSfvU=; b=p4r1vK6QxpsceaGeUJ6sTcpuUhqBUNgSm7wDZA62jlh+SRQoS19pz4RYpdqsXaJcUsNLQgU6dOdBG5WaBVvNgoKCCJt/Ow2L0AQfWwy3diY55A5gyX6M1bWAwzYRsVURQ9lefe81B+euKcceAlj7s2Fs/bkebdido4sfgDwQOCc=; X-UUID: 5c1c1a8ee0b343d8ad42022f5149ae09-20200430 Received: from mtkcas10.mediatek.inc [(172.21.101.39)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 419055646; Thu, 30 Apr 2020 16:10:23 +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; Thu, 30 Apr 2020 16:10:21 +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; Thu, 30 Apr 2020 16:10:21 +0800 From: Dongchun Zhu To: , , , , , , , , , , CC: , , , , , , , , Subject: [V7, 2/2] media: i2c: ov02a10: Add OV02A10 image sensor driver Date: Thu, 30 Apr 2020 16:09:24 +0800 Message-ID: <20200430080924.1140-3-dongchun.zhu@mediatek.com> X-Mailer: git-send-email 2.9.2 In-Reply-To: <20200430080924.1140-1-dongchun.zhu@mediatek.com> References: <20200430080924.1140-1-dongchun.zhu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org QWRkIGEgVjRMMiBzdWItZGV2aWNlIGRyaXZlciBmb3IgT1YwMkExMCBpbWFnZSBzZW5zb3IuDQoN ClNpZ25lZC1vZmYtYnk6IERvbmdjaHVuIFpodSA8ZG9uZ2NodW4uemh1QG1lZGlhdGVrLmNvbT4N Ci0tLQ0KIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICB8ICAgIDEgKw0KIGRyaXZlcnMvbWVk aWEvaTJjL0tjb25maWcgICB8ICAgMTEgKw0KIGRyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlICB8 ICAgIDEgKw0KIGRyaXZlcnMvbWVkaWEvaTJjL292MDJhMTAuYyB8IDEwOTAgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIDQgZmlsZXMgY2hhbmdlZCwgMTEwMyBp bnNlcnRpb25zKCspDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvaTJjL292MDJh MTAuYw0KDQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUw0KaW5kZXggNjNh MjMzNS4uZTc2NzdjNSAxMDA2NDQNCi0tLSBhL01BSU5UQUlORVJTDQorKysgYi9NQUlOVEFJTkVS Uw0KQEAgLTEyMzk1LDYgKzEyMzk1LDcgQEAgTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3Jn DQogUzoJTWFpbnRhaW5lZA0KIFQ6CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9tZWRpYV90cmVlLmdp dA0KIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS9pMmMvb3Z0aSxv djAyYTEwLnlhbWwNCitGOglkcml2ZXJzL21lZGlhL2kyYy9vdjAyYTEwLmMNCiANCiBPTU5JVklT SU9OIE9WMTM4NTggU0VOU09SIERSSVZFUg0KIE06CVNha2FyaSBBaWx1cyA8c2FrYXJpLmFpbHVz QGxpbnV4LmludGVsLmNvbT4NCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmln IGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZw0KaW5kZXggMTI1ZDU5Ni4uZmZmOTJjMyAxMDA2 NDQNCi0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcNCisrKyBiL2RyaXZlcnMvbWVkaWEv aTJjL0tjb25maWcNCkBAIC02NTUsNiArNjU1LDE3IEBAIGNvbmZpZyBWSURFT19JTVgzNTUNCiAJ ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUN CiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaW14MzU1Lg0KIA0KK2NvbmZpZyBWSURFT19PVjAy QTEwDQorCXRyaXN0YXRlICJPbW5pVmlzaW9uIE9WMDJBMTAgc2Vuc29yIHN1cHBvcnQiDQorCWRl cGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDIgJiYgVklERU9fVjRMMl9TVUJERVZfQVBJDQorCXNl bGVjdCBWNEwyX0ZXTk9ERQ0KKwloZWxwDQorCSAgVGhpcyBpcyBhIFZpZGVvNExpbnV4MiBzZW5z b3IgZHJpdmVyIGZvciB0aGUgT21uaVZpc2lvbg0KKwkgIE9WMDJBMTAgY2FtZXJhLg0KKw0KKwkg IFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQ0K KwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvdjAyYTEwLg0KKw0KIGNvbmZpZyBWSURFT19PVjI2 NDANCiAJdHJpc3RhdGUgIk9tbmlWaXNpb24gT1YyNjQwIHNlbnNvciBzdXBwb3J0Ig0KIAlkZXBl bmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMv TWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2kyYy9NYWtlZmlsZQ0KaW5kZXggNzdiZjdkMC4uNjU2 NmRkOSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlDQorKysgYi9kcml2 ZXJzL21lZGlhL2kyYy9NYWtlZmlsZQ0KQEAgLTYzLDYgKzYzLDcgQEAgb2JqLSQoQ09ORklHX1ZJ REVPX1ZQMjdTTVBYKSArPSB2cDI3c21weC5vDQogb2JqLSQoQ09ORklHX1ZJREVPX1NPTllfQlRG X01QWCkgKz0gc29ueS1idGYtbXB4Lm8NCiBvYmotJChDT05GSUdfVklERU9fVVBENjQwMzFBKSAr PSB1cGQ2NDAzMWEubw0KIG9iai0kKENPTkZJR19WSURFT19VUEQ2NDA4MykgKz0gdXBkNjQwODMu bw0KK29iai0kKENPTkZJR19WSURFT19PVjAyQTEwKSArPSBvdjAyYTEwLm8NCiBvYmotJChDT05G SUdfVklERU9fT1YyNjQwKSArPSBvdjI2NDAubw0KIG9iai0kKENPTkZJR19WSURFT19PVjI2ODAp ICs9IG92MjY4MC5vDQogb2JqLSQoQ09ORklHX1ZJREVPX09WMjY4NSkgKz0gb3YyNjg1Lm8NCmRp ZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9vdjAyYTEwLmMgYi9kcml2ZXJzL21lZGlhL2ky Yy9vdjAyYTEwLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi42YTMwY2Yz DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL21lZGlhL2kyYy9vdjAyYTEwLmMNCkBAIC0w LDAgKzEsMTA5MCBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQorLy8g Q29weXJpZ2h0IChjKSAyMDIwIE1lZGlhVGVrIEluYy4NCisNCisjaW5jbHVkZSA8bGludXgvY2xr Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5o Pg0KKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+DQorI2luY2x1ZGUgPGxpbnV4L2ky Yy5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgvcG1fcnVu dGltZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4NCisjaW5jbHVk ZSA8bWVkaWEvbWVkaWEtZW50aXR5Lmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItYXN5bmMuaD4N CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1 YmRldi5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWZ3bm9kZS5oPg0KKw0KKyNkZWZpbmUgQ0hJ UF9JRAkJCQkJCTB4MjUwOQ0KKyNkZWZpbmUgT1YwMkExMF9SRUdfQ0hJUF9JRF9ICQkJCTB4MDIN CisjZGVmaW5lIE9WMDJBMTBfUkVHX0NISVBfSURfTAkJCQkweDAzDQorI2RlZmluZSBPVjAyQTEw X0lEKF9tc2IsIF9sc2IpCQkJCSgoX21zYikgPDwgOCB8IChfbHNiKSkNCisNCisvKiBCaXRbMV0g dmVydGljYWwgdXBzaWRlIGRvd24gKi8NCisvKiBCaXRbMF0gaG9yaXpvbnRhbCBtaXJyb3IgKi8N CisjZGVmaW5lIFJFR19NSVJST1JfRkxJUF9DT05UUk9MCQkJCTB4M2YNCisNCisvKiBPcmllbnRh dGlvbiAqLw0KKyNkZWZpbmUgUkVHX01JUlJPUl9GTElQX0VOQUJMRQkJCQkweDAzDQorDQorLyog Qml0WzddIGNsb2NrIEhTIG1vZGUgZW5hYmxlDQorICogMDogQ2xvY2sgY29udGludWUNCisgKiAx OiBDbG9jayBIUw0KKyAqIEJpdFs2OjJdIEhTIFZPRCBhZGp1c3QNCisgKiBCaXRbMTowXSBQIFZI SSBhZGp1c3QNCisgKi8NCisjZGVmaW5lIFJFR19IU19NT0RFX0JMQwkJCQkJMHg5ZA0KKw0KKyNk ZWZpbmUgQ0xPQ0tfSFNfTU9ERV9FTkFCTEUJCQkJQklUKDcpDQorDQorLyogQml0WzI6MF0gTUlQ SSB0cmFuc21pc3Npb24gc3BlZWQgc2VsZWN0ICovDQorI2RlZmluZSBUWF9TUEVFRF9BUkVBX1NF TAkJCQkweGExDQorDQorI2RlZmluZSBSRUdfUEFHRV9TV0lUQ0gJCQkJCTB4ZmQNCisjZGVmaW5l IFJFR19HTE9CQUxfRUZGRUNUSVZFCQkJCTB4MDENCisjZGVmaW5lIFJFR19FTkFCTEUJCQkJCUJJ VCgwKQ0KKw0KKyNkZWZpbmUgUkVHX1NDX0NUUkxfTU9ERQkJCQkweGFjDQorI2RlZmluZSBTQ19D VFJMX01PREVfU1RBTkRCWQkJCQkweDAwDQorI2RlZmluZSBTQ19DVFJMX01PREVfU1RSRUFNSU5H CQkJCTB4MDENCisNCisjZGVmaW5lIE9WMDJBMTBfRVhQX1NISUZUCQkJCTgNCisjZGVmaW5lIE9W MDJBMTBfUkVHX0VYUE9TVVJFX0gJCQkJMHgwMw0KKyNkZWZpbmUgT1YwMkExMF9SRUdfRVhQT1NV UkVfTAkJCQkweDA0DQorI2RlZmluZQlPVjAyQTEwX0VYUE9TVVJFX01JTgkJCQk0DQorI2RlZmlu ZSBPVjAyQTEwX0VYUE9TVVJFX01BWF9NQVJHSU4JCQk0DQorI2RlZmluZQlPVjAyQTEwX0VYUE9T VVJFX1NURVAJCQkJMQ0KKw0KKyNkZWZpbmUgT1YwMkExMF9WVFNfU0hJRlQJCQkJOA0KKyNkZWZp bmUgT1YwMkExMF9SRUdfVlRTX0gJCQkJMHgwNQ0KKyNkZWZpbmUgT1YwMkExMF9SRUdfVlRTX0wJ CQkJMHgwNg0KKyNkZWZpbmUgT1YwMkExMF9WVFNfTUFYCQkJCQkweDIwOWYNCisjZGVmaW5lIE9W MDJBMTBfVlRTX01JTgkJCQkJMHgwNGNmDQorI2RlZmluZSBPVjAyQTEwX0JBU0lDX0xJTkUJCQkJ MTIyNA0KKw0KKyNkZWZpbmUgT1YwMkExMF9SRUdfR0FJTgkJCQkweDI0DQorI2RlZmluZSBPVjAy QTEwX0dBSU5fTUlOCQkJCTB4MTANCisjZGVmaW5lIE9WMDJBMTBfR0FJTl9NQVgJCQkJMHhmOA0K KyNkZWZpbmUgT1YwMkExMF9HQUlOX1NURVAJCQkJMHgwMQ0KKyNkZWZpbmUgT1YwMkExMF9HQUlO X0RFRkFVTFQJCQkJMHg0MA0KKw0KKy8qIFRlc3QgcGF0dGVybiBjb250cm9sICovDQorI2RlZmlu ZSBPVjAyQTEwX1JFR19URVNUX1BBVFRFUk4JCQkweGI2DQorI2RlZmluZSBPVjAyQTEwX1RFU1Rf UEFUVEVSTl9FTkFCTEUJCQlCSVQoMCkNCisNCisjZGVmaW5lIEhaX1BFUl9NSFoJCQkJCTEwMDAw MDBMDQorI2RlZmluZSBPVjAyQTEwX0xJTktfRlJFUV8zOTBNSFoJCQkoMzkwICogSFpfUEVSX01I WikNCisjZGVmaW5lIE9WMDJBMTBfRUNMS19GUkVRCQkJCSgyNCAqIEhaX1BFUl9NSFopDQorI2Rl ZmluZSBPVjAyQTEwX0RBVEFfTEFORVMJCQkJMQ0KKyNkZWZpbmUgT1YwMkExMF9CSVRTX1BFUl9T QU1QTEUJCQkJMTANCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG92MDJhMTBfc3VwcGx5 X25hbWVzW10gPSB7DQorCSJkb3ZkZCIsCS8qIERpZ2l0YWwgSS9PIHBvd2VyICovDQorCSJhdmRk IiwJCS8qIEFuYWxvZyBwb3dlciAqLw0KKwkiZHZkZCIsCQkvKiBEaWdpdGFsIGNvcmUgcG93ZXIg Ki8NCit9Ow0KKw0KKyNkZWZpbmUgT1YwMkExMF9OVU1fU1VQUExJRVMgQVJSQVlfU0laRShvdjAy YTEwX3N1cHBseV9uYW1lcykNCisNCitzdHJ1Y3Qgb3YwMmExMF9yZWcgew0KKwl1OCBhZGRyOw0K Kwl1OCB2YWw7DQorfTsNCisNCitzdHJ1Y3Qgb3YwMmExMF9yZWdfbGlzdCB7DQorCXUzMiBudW1f b2ZfcmVnczsNCisJY29uc3Qgc3RydWN0IG92MDJhMTBfcmVnICpyZWdzOw0KK307DQorDQorc3Ry dWN0IG92MDJhMTBfbW9kZSB7DQorCXUzMiB3aWR0aDsNCisJdTMyIGhlaWdodDsNCisJdTMyIGV4 cF9kZWY7DQorCXUzMiBodHNfZGVmOw0KKwl1MzIgdnRzX2RlZjsNCisJY29uc3Qgc3RydWN0IG92 MDJhMTBfcmVnX2xpc3QgcmVnX2xpc3Q7DQorfTsNCisNCitzdHJ1Y3Qgb3YwMmExMCB7DQorCXUz MgkJCWVjbGtfZnJlcTsNCisJdTMyICAgICAgICAgICAgICAgICAgICAgbWlwaV9jbG9ja190eF9z cGVlZDsNCisNCisJc3RydWN0IGNsawkJKmVjbGs7DQorCXN0cnVjdCBncGlvX2Rlc2MJKnBkX2dw aW87DQorCXN0cnVjdCBncGlvX2Rlc2MJKm5fcnN0X2dwaW87DQorCXN0cnVjdCByZWd1bGF0b3Jf YnVsa19kYXRhIHN1cHBsaWVzW09WMDJBMTBfTlVNX1NVUFBMSUVTXTsNCisNCisJYm9vbAkJCXN0 cmVhbWluZzsNCisJYm9vbAkJCXVwc2lkZV9kb3duOw0KKwlib29sCQkJbWlwaV9jbG9ja19oc19t b2RlX2VuYWJsZTsNCisNCisJLyoNCisJICogU2VyaWFsaXplIGNvbnRyb2wgYWNjZXNzLCBnZXQv c2V0IGZvcm1hdCwgZ2V0IHNlbGVjdGlvbg0KKwkgKiBhbmQgc3RhcnQgc3RyZWFtaW5nLg0KKwkg Ki8NCisJc3RydWN0IG11dGV4CQltdXRleDsNCisJc3RydWN0IHY0bDJfc3ViZGV2CXN1YmRldjsN CisJc3RydWN0IG1lZGlhX3BhZAlwYWQ7DQorCXN0cnVjdCB2NGwyX2N0cmwJKmFuYWxfZ2FpbjsN CisJc3RydWN0IHY0bDJfY3RybAkqZXhwb3N1cmU7DQorCXN0cnVjdCB2NGwyX2N0cmwJKmhibGFu azsNCisJc3RydWN0IHY0bDJfY3RybAkqdmJsYW5rOw0KKwlzdHJ1Y3QgdjRsMl9jdHJsCSp0ZXN0 X3BhdHRlcm47DQorCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQJZm10Ow0KKwlzdHJ1Y3QgdjRs Ml9jdHJsX2hhbmRsZXIgY3RybF9oYW5kbGVyOw0KKw0KKwljb25zdCBzdHJ1Y3Qgb3YwMmExMF9t b2RlICpjdXJfbW9kZTsNCit9Ow0KKw0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG92MDJhMTAgKnRv X292MDJhMTAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkNCit7DQorCXJldHVybiBjb250YWluZXJf b2Yoc2QsIHN0cnVjdCBvdjAyYTEwLCBzdWJkZXYpOw0KK30NCisNCisvKg0KKyAqIGVjbGsgMjRN aHoNCisgKiBwY2xrIDM5TWh6DQorICogbGluZWxlbmd0aCA5MzQoMHgzYTYpDQorICogZnJhbWVs ZW5ndGggMTM5MCgweDU2RSkNCisgKiBncmFid2luZG93X3dpZHRoIDE2MDANCisgKiBncmFid2lu ZG93X2hlaWdodCAxMjAwDQorICogbWF4X2ZyYW1lcmF0ZSAzMGZwcw0KKyAqIG1pcGlfZGF0YXJh dGUgcGVyIGxhbmUgNzgwTWJwcw0KKyAqLw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3YwMmExMF9y ZWcgb3YwMmExMF8xNjAweDEyMDBfcmVnc1tdID0gew0KKwl7MHhmZCwgMHgwMX0sDQorCXsweGFj LCAweDAwfSwNCisJezB4ZmQsIDB4MDB9LA0KKwl7MHgyZiwgMHgyOX0sDQorCXsweDM0LCAweDAw fSwNCisJezB4MzUsIDB4MjF9LA0KKwl7MHgzMCwgMHgxNX0sDQorCXsweDMzLCAweDAxfSwNCisJ ezB4ZmQsIDB4MDF9LA0KKwl7MHg0NCwgMHgwMH0sDQorCXsweDJhLCAweDRjfSwNCisJezB4MmIs IDB4MWV9LA0KKwl7MHgyYywgMHg2MH0sDQorCXsweDI1LCAweDExfSwNCisJezB4MDMsIDB4MDF9 LA0KKwl7MHgwNCwgMHhhZX0sDQorCXsweDA5LCAweDAwfSwNCisJezB4MGEsIDB4MDJ9LA0KKwl7 MHgwNiwgMHhhNn0sDQorCXsweDMxLCAweDAwfSwNCisJezB4MjQsIDB4NDB9LA0KKwl7MHgwMSwg MHgwMX0sDQorCXsweGZiLCAweDczfSwNCisJezB4ZmQsIDB4MDF9LA0KKwl7MHgxNiwgMHgwNH0s DQorCXsweDFjLCAweDA5fSwNCisJezB4MjEsIDB4NDJ9LA0KKwl7MHgxMiwgMHgwNH0sDQorCXsw eDEzLCAweDEwfSwNCisJezB4MTEsIDB4NDB9LA0KKwl7MHgzMywgMHg4MX0sDQorCXsweGQwLCAw eDAwfSwNCisJezB4ZDEsIDB4MDF9LA0KKwl7MHhkMiwgMHgwMH0sDQorCXsweDUwLCAweDEwfSwN CisJezB4NTEsIDB4MjN9LA0KKwl7MHg1MiwgMHgyMH0sDQorCXsweDUzLCAweDEwfSwNCisJezB4 NTQsIDB4MDJ9LA0KKwl7MHg1NSwgMHgyMH0sDQorCXsweDU2LCAweDAyfSwNCisJezB4NTgsIDB4 NDh9LA0KKwl7MHg1ZCwgMHgxNX0sDQorCXsweDVlLCAweDA1fSwNCisJezB4NjYsIDB4NjZ9LA0K Kwl7MHg2OCwgMHg2OH0sDQorCXsweDZiLCAweDAwfSwNCisJezB4NmMsIDB4MDB9LA0KKwl7MHg2 ZiwgMHg0MH0sDQorCXsweDcwLCAweDQwfSwNCisJezB4NzEsIDB4MGF9LA0KKwl7MHg3MiwgMHhm MH0sDQorCXsweDczLCAweDEwfSwNCisJezB4NzUsIDB4ODB9LA0KKwl7MHg3NiwgMHgxMH0sDQor CXsweDg0LCAweDAwfSwNCisJezB4ODUsIDB4MTB9LA0KKwl7MHg4NiwgMHgxMH0sDQorCXsweDg3 LCAweDAwfSwNCisJezB4OGEsIDB4MjJ9LA0KKwl7MHg4YiwgMHgyMn0sDQorCXsweDE5LCAweGYx fSwNCisJezB4MjksIDB4MDF9LA0KKwl7MHhmZCwgMHgwMX0sDQorCXsweDlkLCAweDE2fSwNCisJ ezB4YTAsIDB4Mjl9LA0KKwl7MHhhMSwgMHgwM30sDQorCXsweGFkLCAweDYyfSwNCisJezB4YWUs IDB4MDB9LA0KKwl7MHhhZiwgMHg4NX0sDQorCXsweGIxLCAweDAxfSwNCisJezB4OGUsIDB4MDZ9 LA0KKwl7MHg4ZiwgMHg0MH0sDQorCXsweDkwLCAweDA0fSwNCisJezB4OTEsIDB4YjB9LA0KKwl7 MHg0NSwgMHgwMX0sDQorCXsweDQ2LCAweDAwfSwNCisJezB4NDcsIDB4NmN9LA0KKwl7MHg0OCwg MHgwM30sDQorCXsweDQ5LCAweDhifSwNCisJezB4NGEsIDB4MDB9LA0KKwl7MHg0YiwgMHgwN30s DQorCXsweDRjLCAweDA0fSwNCisJezB4NGQsIDB4Yjd9LA0KKwl7MHhmMCwgMHg0MH0sDQorCXsw eGYxLCAweDQwfSwNCisJezB4ZjIsIDB4NDB9LA0KKwl7MHhmMywgMHg0MH0sDQorCXsweDNmLCAw eDAwfSwNCisJezB4ZmQsIDB4MDF9LA0KKwl7MHgwNSwgMHgwMH0sDQorCXsweDA2LCAweGE2fSwN CisJezB4ZmQsIDB4MDF9LA0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBvdjAy YTEwX3Rlc3RfcGF0dGVybl9tZW51W10gPSB7DQorCSJEaXNhYmxlZCIsDQorCSJDb2xvciBCYXIi LA0KK307DQorDQorc3RhdGljIGNvbnN0IHM2NCBsaW5rX2ZyZXFfbWVudV9pdGVtc1tdID0gew0K KwlPVjAyQTEwX0xJTktfRlJFUV8zOTBNSFosDQorfTsNCisNCitzdGF0aWMgdTY0IHRvX3BpeGVs X3JhdGUodTMyIGZfaW5kZXgpDQorew0KKwl1NjQgcGl4ZWxfcmF0ZSA9IGxpbmtfZnJlcV9tZW51 X2l0ZW1zW2ZfaW5kZXhdICogMiAqIE9WMDJBMTBfREFUQV9MQU5FUzsNCisNCisJZG9fZGl2KHBp eGVsX3JhdGUsIE9WMDJBMTBfQklUU19QRVJfU0FNUExFKTsNCisNCisJcmV0dXJuIHBpeGVsX3Jh dGU7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3YwMmExMF9tb2RlIHN1cHBvcnRlZF9t b2Rlc1tdID0gew0KKwl7DQorCQkud2lkdGggPSAxNjAwLA0KKwkJLmhlaWdodCA9IDEyMDAsDQor CQkuZXhwX2RlZiA9IDB4MDFhZSwNCisJCS5odHNfZGVmID0gMHgwM2E2LA0KKwkJLnZ0c19kZWYg PSAweDA1NmUsDQorCQkucmVnX2xpc3QgPSB7DQorCQkJLm51bV9vZl9yZWdzID0gQVJSQVlfU0la RShvdjAyYTEwXzE2MDB4MTIwMF9yZWdzKSwNCisJCQkucmVncyA9IG92MDJhMTBfMTYwMHgxMjAw X3JlZ3MsDQorCQl9LA0KKwl9LA0KK307DQorDQorc3RhdGljIGludCBvdjAyYTEwX3dyaXRlX2Fy cmF5KHN0cnVjdCBvdjAyYTEwICpvdjAyYTEwLA0KKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb3Yw MmExMF9yZWdfbGlzdCAqcl9saXN0KQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9 IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorCXVuc2lnbmVkIGludCBp Ow0KKwlpbnQgcmV0Ow0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgcl9saXN0LT5udW1fb2ZfcmVnczsg aSsrKSB7DQorCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcl9saXN0 LT5yZWdzW2ldLmFkZHIsDQorCQkJCQkJcl9saXN0LT5yZWdzW2ldLnZhbCk7DQorCQlpZiAocmV0 IDwgMCkNCisJCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgaW50IG92MDJhMTBfcmVhZF9zbWJ1cyhzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCwgdW5zaWdu ZWQgY2hhciByZWcsDQorCQkJICAgICAgdW5zaWduZWQgY2hhciAqdmFsKQ0KK3sNCisJc3RydWN0 IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRl dik7DQorCWludCByZXQ7DQorDQorCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGll bnQsIHJlZyk7DQorDQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJKnZhbCA9 ICh1bnNpZ25lZCBjaGFyKXJldDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQg b3YwMmExMF9tb2RfcmVnKHN0cnVjdCBvdjAyYTEwICpvdjAyYTEwLCB1OCByZWcsIHU4IG1hc2ss IHU4IHZhbCkNCit7DQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJk ZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYpOw0KKwl1OCByZWFkdmFsOw0KKwlpbnQgcmV0Ow0KKw0K KwlyZXQgPSBvdjAyYTEwX3JlYWRfc21idXMob3YwMmExMCwgcmVnLCAmcmVhZHZhbCk7DQorCWlm IChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwl2YWwgPSAocmVhZHZhbCAmIH5tYXNrKSB8ICh2 YWwgJiBtYXNrKTsNCisNCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50 LCByZWcsIHZhbCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG92MDJhMTBfZmlsbF9mbXQoY29uc3Qg c3RydWN0IG92MDJhMTBfbW9kZSAqbW9kZSwNCisJCQkgICAgIHN0cnVjdCB2NGwyX21idXNfZnJh bWVmbXQgKmZtdCkNCit7DQorCWZtdC0+d2lkdGggPSBtb2RlLT53aWR0aDsNCisJZm10LT5oZWln aHQgPSBtb2RlLT5oZWlnaHQ7DQorCWZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgb3YwMmExMF9zZXRfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQor CQkJICAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywNCisJCQkgICBzdHJ1Y3Qg djRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpDQorew0KKwlzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCA9 IHRvX292MDJhMTAoc2QpOw0KKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptYnVzX2ZtdCA9 ICZmbXQtPmZvcm1hdDsNCisNCisJbXV0ZXhfbG9jaygmb3YwMmExMC0+bXV0ZXgpOw0KKw0KKwlp ZiAob3YwMmExMC0+c3RyZWFtaW5nKSB7DQorCQltdXRleF91bmxvY2soJm92MDJhMTAtPm11dGV4 KTsNCisJCXJldHVybiAtRUJVU1k7DQorCX0NCisNCisJLyogT25seSBvbmUgc2Vuc29yIG1vZGUg c3VwcG9ydGVkICovDQorCW1idXNfZm10LT5jb2RlID0gb3YwMmExMC0+Zm10LmNvZGU7DQorCW92 MDJhMTBfZmlsbF9mbXQob3YwMmExMC0+Y3VyX21vZGUsIG1idXNfZm10KTsNCisJb3YwMmExMC0+ Zm10ID0gZm10LT5mb3JtYXQ7DQorDQorCW11dGV4X3VubG9jaygmb3YwMmExMC0+bXV0ZXgpOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBvdjAyYTEwX2dldF9mbXQoc3RydWN0 IHY0bDJfc3ViZGV2ICpzZCwNCisJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAq Y2ZnLA0KKwkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkNCit7DQorCXN0cnVj dCBvdjAyYTEwICpvdjAyYTEwID0gdG9fb3YwMmExMChzZCk7DQorCXN0cnVjdCB2NGwyX21idXNf ZnJhbWVmbXQgKm1idXNfZm10ID0gJmZtdC0+Zm9ybWF0Ow0KKw0KKwltdXRleF9sb2NrKCZvdjAy YTEwLT5tdXRleCk7DQorDQorCWZtdC0+Zm9ybWF0ID0gb3YwMmExMC0+Zm10Ow0KKwltYnVzX2Zt dC0+Y29kZSA9IG92MDJhMTAtPmZtdC5jb2RlOw0KKwlvdjAyYTEwX2ZpbGxfZm10KG92MDJhMTAt PmN1cl9tb2RlLCBtYnVzX2ZtdCk7DQorDQorCW11dGV4X3VubG9jaygmb3YwMmExMC0+bXV0ZXgp Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBvdjAyYTEwX2VudW1fbWJ1c19j b2RlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQorCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3Bh ZF9jb25maWcgKmNmZywNCisJCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW0g KmNvZGUpDQorew0KKwlzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCA9IHRvX292MDJhMTAoc2QpOw0K Kw0KKwlpZiAoY29kZS0+aW5kZXggPj0gQVJSQVlfU0laRShzdXBwb3J0ZWRfbW9kZXMpKQ0KKwkJ cmV0dXJuIC1FSU5WQUw7DQorDQorCWNvZGUtPmNvZGUgPSBvdjAyYTEwLT5mbXQuY29kZTsNCisN CisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9lbnVtX2ZyYW1lX3NpemVz KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQorCQkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFk X2NvbmZpZyAqY2ZnLA0KKwkJCQkgICAgc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX3NpemVfZW51 bSAqZnNlKQ0KK3sNCisJaWYgKGZzZS0+aW5kZXggPj0gQVJSQVlfU0laRShzdXBwb3J0ZWRfbW9k ZXMpKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWZzZS0+bWluX3dpZHRoICA9IHN1cHBvcnRl ZF9tb2Rlc1tmc2UtPmluZGV4XS53aWR0aDsNCisJZnNlLT5tYXhfd2lkdGggID0gc3VwcG9ydGVk X21vZGVzW2ZzZS0+aW5kZXhdLndpZHRoOw0KKwlmc2UtPm1heF9oZWlnaHQgPSBzdXBwb3J0ZWRf bW9kZXNbZnNlLT5pbmRleF0uaGVpZ2h0Ow0KKwlmc2UtPm1pbl9oZWlnaHQgPSBzdXBwb3J0ZWRf bW9kZXNbZnNlLT5pbmRleF0uaGVpZ2h0Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGlj IGludCBvdjAyYTEwX2NoZWNrX3NlbnNvcl9pZChzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCkNCit7 DQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAy YTEwLT5zdWJkZXYpOw0KKwl1MTYgaWQ7DQorCXU4IGNoaXBfaWRfaDsNCisJdTggY2hpcF9pZF9s Ow0KKwlpbnQgcmV0Ow0KKw0KKwkvKiBDaGVjayBzZW5zb3IgcmV2aXNpb24gKi8NCisJcmV0ID0g b3YwMmExMF9yZWFkX3NtYnVzKG92MDJhMTAsIE9WMDJBMTBfUkVHX0NISVBfSURfSCwgJmNoaXBf aWRfaCk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSBvdjAyYTEwX3Jl YWRfc21idXMob3YwMmExMCwgT1YwMkExMF9SRUdfQ0hJUF9JRF9MLCAmY2hpcF9pZF9sKTsNCisJ aWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCWlkID0gT1YwMkExMF9JRChjaGlwX2lkX2gs IGNoaXBfaWRfbCk7DQorCWlmIChpZCAhPSBDSElQX0lEKSB7DQorCQlkZXZfZXJyKCZjbGllbnQt PmRldiwgIlVuZXhwZWN0ZWQgc2Vuc29yIGlkKCUwNHgpXG4iLCBpZCk7DQorCQlyZXR1cm4gLUVJ TlZBTDsNCisJfQ0KKw0KKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkRldGVjdGVkIE9WJTA0WCBz ZW5zb3JcbiIsIGlkKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX19tYXli ZV91bnVzZWQgb3YwMmExMF9wb3dlcl9vbihzdHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1 Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOw0KKwlzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7DQorCXN0cnVjdCBvdjAy YTEwICpvdjAyYTEwID0gdG9fb3YwMmExMChzZCk7DQorCWludCByZXQ7DQorDQorCWdwaW9kX3Nl dF92YWx1ZV9jYW5zbGVlcChvdjAyYTEwLT5uX3JzdF9ncGlvLCAwKTsNCisJZ3Bpb2Rfc2V0X3Zh bHVlX2NhbnNsZWVwKG92MDJhMTAtPnBkX2dwaW8sIDApOw0KKw0KKwlyZXQgPSBjbGtfcHJlcGFy ZV9lbmFibGUob3YwMmExMC0+ZWNsayk7DQorCWlmIChyZXQgPCAwKSB7DQorCQlkZXZfZXJyKGRl diwgImZhaWxlZCB0byBlbmFibGUgZWNsa1xuIik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQor CXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShPVjAyQTEwX05VTV9TVVBQTElFUywgb3YwMmEx MC0+c3VwcGxpZXMpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gZW5hYmxlIHJlZ3VsYXRvcnNcbiIpOw0KKwkJZ290byBkaXNhYmxlX2NsazsNCisJfQ0KKwl1 c2xlZXBfcmFuZ2UoNTAwMCwgNjAwMCk7DQorDQorCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChv djAyYTEwLT5wZF9ncGlvLCAxKTsNCisJdXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApOw0KKw0KKwln cGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAob3YwMmExMC0+bl9yc3RfZ3BpbywgMSk7DQorCXVzbGVl cF9yYW5nZSg1MDAwLCA2MDAwKTsNCisNCisJcmV0ID0gb3YwMmExMF9jaGVja19zZW5zb3JfaWQo b3YwMmExMCk7DQorCWlmIChyZXQpDQorCQlnb3RvIGRpc2FibGVfcmVndWxhdG9yOw0KKw0KKwly ZXR1cm4gMDsNCisNCitkaXNhYmxlX3JlZ3VsYXRvcjoNCisJcmVndWxhdG9yX2J1bGtfZGlzYWJs ZShPVjAyQTEwX05VTV9TVVBQTElFUywgb3YwMmExMC0+c3VwcGxpZXMpOw0KK2Rpc2FibGVfY2xr Og0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUob3YwMmExMC0+ZWNsayk7DQorDQorCXJldHVybiBy ZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgb3YwMmExMF9wb3dlcl9vZmYo c3RydWN0IGRldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRv X2kyY19jbGllbnQoZGV2KTsNCisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xp ZW50ZGF0YShjbGllbnQpOw0KKwlzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCA9IHRvX292MDJhMTAo c2QpOw0KKw0KKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAob3YwMmExMC0+bl9yc3RfZ3Bpbywg MCk7DQorCWNsa19kaXNhYmxlX3VucHJlcGFyZShvdjAyYTEwLT5lY2xrKTsNCisJZ3Bpb2Rfc2V0 X3ZhbHVlX2NhbnNsZWVwKG92MDJhMTAtPnBkX2dwaW8sIDApOw0KKwlyZWd1bGF0b3JfYnVsa19k aXNhYmxlKE9WMDJBMTBfTlVNX1NVUFBMSUVTLCBvdjAyYTEwLT5zdXBwbGllcyk7DQorDQorCXJl dHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IF9fb3YwMmExMF9zdGFydF9zdHJlYW0oc3RydWN0 IG92MDJhMTAgKm92MDJhMTApDQorew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRs Ml9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCisJY29uc3Qgc3RydWN0IG92MDJh MTBfcmVnX2xpc3QgKnJlZ19saXN0Ow0KKwlpbnQgcmV0Ow0KKw0KKwkvKiBBcHBseSBkZWZhdWx0 IHZhbHVlcyBvZiBjdXJyZW50IG1vZGUgKi8NCisJcmVnX2xpc3QgPSAmb3YwMmExMC0+Y3VyX21v ZGUtPnJlZ19saXN0Ow0KKwlyZXQgPSBvdjAyYTEwX3dyaXRlX2FycmF5KG92MDJhMTAsIHJlZ19s aXN0KTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCS8qIEFwcGx5IGN1c3RvbWl6 ZWQgdmFsdWVzIGZyb20gdXNlciAqLw0KKwlyZXQgPSBfX3Y0bDJfY3RybF9oYW5kbGVyX3NldHVw KG92MDJhMTAtPnN1YmRldi5jdHJsX2hhbmRsZXIpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJl dDsNCisNCisJLyogU2V0IG9yaWVudGF0aW9uIHRvIDE4MCBkZWdyZWUgKi8NCisJaWYgKG92MDJh MTAtPnVwc2lkZV9kb3duKSB7DQorCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNs aWVudCwgUkVHX01JUlJPUl9GTElQX0NPTlRST0wsDQorCQkJCQkJUkVHX01JUlJPUl9GTElQX0VO QUJMRSk7DQorCQlpZiAocmV0KSB7DQorCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQg dG8gc2V0IG9yaWVudGF0aW9uXG4iKTsNCisJCQlyZXR1cm4gcmV0Ow0KKwkJfQ0KKwkJcmV0ID0g aTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19HTE9CQUxfRUZGRUNUSVZFLA0K KwkJCQkJCVJFR19FTkFCTEUpOw0KKwkJaWYgKHJldCA8IDApDQorCQkJcmV0dXJuIHJldDsNCisJ fQ0KKw0KKwkvKiBTZXQgY2xvY2sgbGFuZSB0cmFuc21pc3Npb24gbW9kZSBhY2NvcmRpbmcgdG8g RFQgcHJvcGVydHkgKi8NCisJcmV0ID0gb3YwMmExMF9tb2RfcmVnKG92MDJhMTAsIFJFR19IU19N T0RFX0JMQywgQ0xPQ0tfSFNfTU9ERV9FTkFCTEUsDQorCQkJICAgICAgb3YwMmExMC0+bWlwaV9j bG9ja19oc19tb2RlX2VuYWJsZSA/DQorCQkJICAgICAgQ0xPQ0tfSFNfTU9ERV9FTkFCTEUgOiAw KTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwkvKiBTZXQgbWlwaSBUWCBz cGVlZCBhY2NvcmRpbmcgdG8gRFQgcHJvcGVydHkgKi8NCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRl X2J5dGVfZGF0YShjbGllbnQsIFRYX1NQRUVEX0FSRUFfU0VMLA0KKwkJCQkJb3YwMmExMC0+bWlw aV9jbG9ja190eF9zcGVlZCk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJ LyogU2V0IHN0cmVhbSBvbiByZWdpc3RlciAqLw0KKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5 dGVfZGF0YShjbGllbnQsIFJFR19TQ19DVFJMX01PREUsDQorCQkJCQkgU0NfQ1RSTF9NT0RFX1NU UkVBTUlORyk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX19vdjAyYTEwX3N0b3Bfc3RyZWFtKHN0cnVj dCBvdjAyYTEwICpvdjAyYTEwKQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0 bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorDQorCXJldHVybiBpMmNfc21i dXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1NDX0NUUkxfTU9ERSwNCisJCQkJCSBTQ19D VFJMX01PREVfU1RBTkRCWSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9lbnRpdHlfaW5p dF9jZmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCisJCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2 X3BhZF9jb25maWcgKmNmZykNCit7DQorCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm10ID0g ew0KKwkJLndoaWNoID0gY2ZnID8gVjRMMl9TVUJERVZfRk9STUFUX1RSWQ0KKwkJCSAgICAgOiBW NEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0KKwkJLmZvcm1hdCA9IHsNCisJCQkud2lkdGggPSAx NjAwLA0KKwkJCS5oZWlnaHQgPSAxMjAwLA0KKwkJfQ0KKwl9Ow0KKw0KKwlvdjAyYTEwX3NldF9m bXQoc2QsIGNmZywgJmZtdCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG92 MDJhMTBfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IG9uKQ0KK3sNCisJc3Ry dWN0IG92MDJhMTAgKm92MDJhMTAgPSB0b19vdjAyYTEwKHNkKTsNCisJc3RydWN0IGkyY19jbGll bnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorCWlu dCByZXQ7DQorDQorCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAib3YwMmExMCBzX3N0cmVhbSAoJWQp XG4iLCBvbik7DQorCW11dGV4X2xvY2soJm92MDJhMTAtPm11dGV4KTsNCisNCisJaWYgKG92MDJh MTAtPnN0cmVhbWluZyA9PSBvbikNCisJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47DQorDQorCWlm IChvbikgew0KKwkJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYygmY2xpZW50LT5kZXYpOw0KKwkJ aWYgKHJldCA8IDApIHsNCisJCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmNsaWVudC0+ZGV2KTsN CisJCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOw0KKwkJfQ0KKw0KKwkJcmV0ID0gX19vdjAyYTEw X3N0YXJ0X3N0cmVhbShvdjAyYTEwKTsNCisJCWlmIChyZXQpIHsNCisJCQlfX292MDJhMTBfc3Rv cF9zdHJlYW0ob3YwMmExMCk7DQorCQkJb3YwMmExMC0+c3RyZWFtaW5nID0gIW9uOw0KKwkJCWdv dG8gZXJyX3JwbV9wdXQ7DQorCQl9DQorCX0gZWxzZSB7DQorCQlfX292MDJhMTBfc3RvcF9zdHJl YW0ob3YwMmExMCk7DQorCQlwbV9ydW50aW1lX3B1dCgmY2xpZW50LT5kZXYpOw0KKwl9DQorDQor CW92MDJhMTAtPnN0cmVhbWluZyA9IG9uOw0KKwltdXRleF91bmxvY2soJm92MDJhMTAtPm11dGV4 KTsNCisNCisJcmV0dXJuIDA7DQorDQorZXJyX3JwbV9wdXQ6DQorCXBtX3J1bnRpbWVfcHV0KCZj bGllbnQtPmRldik7DQordW5sb2NrX2FuZF9yZXR1cm46DQorCW11dGV4X3VubG9jaygmb3YwMmEx MC0+bXV0ZXgpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRldl9wbV9vcHMgb3YwMmExMF9wbV9vcHMgPSB7DQorCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BT KHBtX3J1bnRpbWVfZm9yY2Vfc3VzcGVuZCwNCisJCQkJcG1fcnVudGltZV9mb3JjZV9yZXN1bWUp DQorCVNFVF9SVU5USU1FX1BNX09QUyhvdjAyYTEwX3Bvd2VyX29mZiwgb3YwMmExMF9wb3dlcl9v biwgTlVMTCkNCit9Ow0KKw0KKy8qDQorICogb3YwMmExMF9zZXRfZXhwb3N1cmUgLSBGdW5jdGlv biBjYWxsZWQgd2hlbiBzZXR0aW5nIGV4cG9zdXJlIHRpbWUNCisgKiBAcHJpdjogUG9pbnRlciB0 byBkZXZpY2Ugc3RydWN0dXJlDQorICogQHZhbDogVmFyaWFibGUgZm9yIGV4cG9zdXJlIHRpbWUs IGluIHRoZSB1bml0IG9mIG1pY3JvLXNlY29uZA0KKyAqDQorICogU2V0IGV4cG9zdXJlIHRpbWUg YmFzZWQgb24gaW5wdXQgdmFsdWUuDQorICoNCisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KKyAq Lw0KK3N0YXRpYyBpbnQgb3YwMmExMF9zZXRfZXhwb3N1cmUoc3RydWN0IG92MDJhMTAgKm92MDJh MTAsIGludCB2YWwpDQorew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRf c3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCisJaW50IHJldDsNCisNCisJcmV0ID0gaTJj X3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19QQUdFX1NXSVRDSCwgUkVHX0VOQUJM RSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVz X3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE9WMDJBMTBfUkVHX0VYUE9TVVJFX0gsDQorCQkJCQl2 YWwgPj4gT1YwMkExMF9FWFBfU0hJRlQpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7 DQorDQorCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBPVjAyQTEwX1JF R19FWFBPU1VSRV9MLCB2YWwpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQor CXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX0dMT0JBTF9FRkZF Q1RJVkUsDQorCQkJCQkgUkVHX0VOQUJMRSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9z ZXRfZ2FpbihzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCwgaW50IHZhbCkNCit7DQorCXN0cnVjdCBp MmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYp Ow0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVu dCwgUkVHX1BBR0VfU1dJVENILCBSRUdfRU5BQkxFKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1 cm4gcmV0Ow0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgT1Yw MkExMF9SRUdfR0FJTiwgdmFsKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0K KwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19HTE9CQUxfRUZG RUNUSVZFLA0KKwkJCQkJIFJFR19FTkFCTEUpOw0KK30NCisNCitzdGF0aWMgaW50IG92MDJhMTBf c2V0X3ZibGFuayhzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCwgaW50IHZhbCkNCit7DQorCXN0cnVj dCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEwLT5zdWJk ZXYpOw0KKwl1MzIgdnRzID0gdmFsICsgb3YwMmExMC0+Y3VyX21vZGUtPmhlaWdodCAtIE9WMDJB MTBfQkFTSUNfTElORTsNCisJaW50IHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5 dGVfZGF0YShjbGllbnQsIFJFR19QQUdFX1NXSVRDSCwgUkVHX0VOQUJMRSk7DQorCWlmIChyZXQg PCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0 YShjbGllbnQsIE9WMDJBMTBfUkVHX1ZUU19ILA0KKwkJCQkJdnRzID4+IE9WMDJBMTBfVlRTX1NI SUZUKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSBpMmNfc21i dXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgT1YwMkExMF9SRUdfVlRTX0wsIHZ0cyk7DQorCWlm IChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9i eXRlX2RhdGEoY2xpZW50LCBSRUdfR0xPQkFMX0VGRkVDVElWRSwNCisJCQkJCSBSRUdfRU5BQkxF KTsNCit9DQorDQorc3RhdGljIGludCBvdjAyYTEwX3NldF90ZXN0X3BhdHRlcm4oc3RydWN0IG92 MDJhMTAgKm92MDJhMTAsIGludCBwYXR0ZXJuKQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNs aWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorCWludCByZXQ7 DQorDQorCWlmIChwYXR0ZXJuKQ0KKwkJcGF0dGVybiA9IE9WMDJBMTBfVEVTVF9QQVRURVJOX0VO QUJMRTsNCisNCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19Q QUdFX1NXSVRDSCwgUkVHX0VOQUJMRSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsN CisNCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE9WMDJBMTBfUkVH X1RFU1RfUEFUVEVSTiwNCisJCQkJCXBhdHRlcm4pOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVy biByZXQ7DQorDQorCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdf R0xPQkFMX0VGRkVDVElWRSwNCisJCQkJCVJFR19FTkFCTEUpOw0KKwlpZiAocmV0IDwgMCkNCisJ CXJldHVybiByZXQ7DQorDQorCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVu dCwgUkVHX1NDX0NUUkxfTU9ERSwNCisJCQkJCSBTQ19DVFJMX01PREVfU1RSRUFNSU5HKTsNCit9 DQorDQorc3RhdGljIGludCBvdjAyYTEwX3NldF9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwp DQorew0KKwlzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCA9IGNvbnRhaW5lcl9vZihjdHJsLT5oYW5k bGVyLA0KKwkJCQkJICAgICAgIHN0cnVjdCBvdjAyYTEwLCBjdHJsX2hhbmRsZXIpOw0KKwlzdHJ1 Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3Vi ZGV2KTsNCisJczY0IG1heF9leHBvOw0KKwlpbnQgcmV0Ow0KKw0KKwkvKiBQcm9wYWdhdGUgY2hh bmdlIG9mIGN1cnJlbnQgY29udHJvbCB0byBhbGwgcmVsYXRlZCBjb250cm9scyAqLw0KKwlpZiAo Y3RybC0+aWQgPT0gVjRMMl9DSURfVkJMQU5LKSB7DQorCQkvKiBVcGRhdGUgbWF4IGV4cG9zdXJl IHdoaWxlIG1lZXRpbmcgZXhwZWN0ZWQgdmJsYW5raW5nICovDQorCQltYXhfZXhwbyA9IG92MDJh MTAtPmN1cl9tb2RlLT5oZWlnaHQgKyBjdHJsLT52YWwgLQ0KKwkJCSAgIE9WMDJBMTBfRVhQT1NV UkVfTUFYX01BUkdJTjsNCisJCV9fdjRsMl9jdHJsX21vZGlmeV9yYW5nZShvdjAyYTEwLT5leHBv c3VyZSwNCisJCQkJCSBvdjAyYTEwLT5leHBvc3VyZS0+bWluaW11bSwgbWF4X2V4cG8sDQorCQkJ CQkgb3YwMmExMC0+ZXhwb3N1cmUtPnN0ZXAsDQorCQkJCQkgb3YwMmExMC0+ZXhwb3N1cmUtPmRl ZmF1bHRfdmFsdWUpOw0KKwl9DQorDQorCS8qIFY0TDIgY29udHJvbHMgdmFsdWVzIHdpbGwgYmUg YXBwbGllZCBvbmx5IHdoZW4gcG93ZXIgaXMgYWxyZWFkeSB1cCAqLw0KKwlpZiAoIXBtX3J1bnRp bWVfZ2V0X2lmX2luX3VzZSgmY2xpZW50LT5kZXYpKQ0KKwkJcmV0dXJuIDA7DQorDQorCXN3aXRj aCAoY3RybC0+aWQpIHsNCisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToNCisJCXJldCA9IG92MDJh MTBfc2V0X2V4cG9zdXJlKG92MDJhMTAsIGN0cmwtPnZhbCk7DQorCQlicmVhazsNCisJY2FzZSBW NEwyX0NJRF9BTkFMT0dVRV9HQUlOOg0KKwkJcmV0ID0gb3YwMmExMF9zZXRfZ2FpbihvdjAyYTEw LCBjdHJsLT52YWwpOw0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9DSURfVkJMQU5LOg0KKwkJcmV0 ID0gb3YwMmExMF9zZXRfdmJsYW5rKG92MDJhMTAsIGN0cmwtPnZhbCk7DQorCQlicmVhazsNCisJ Y2FzZSBWNEwyX0NJRF9URVNUX1BBVFRFUk46DQorCQlyZXQgPSBvdjAyYTEwX3NldF90ZXN0X3Bh dHRlcm4ob3YwMmExMCwgY3RybC0+dmFsKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJcmV0 ID0gLUVJTlZBTDsNCisJCWJyZWFrOw0KKwl9Ow0KKw0KKwlwbV9ydW50aW1lX3B1dCgmY2xpZW50 LT5kZXYpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0 bDJfc3ViZGV2X3ZpZGVvX29wcyBvdjAyYTEwX3ZpZGVvX29wcyA9IHsNCisJLnNfc3RyZWFtID0g b3YwMmExMF9zX3N0cmVhbSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJk ZXZfcGFkX29wcyBvdjAyYTEwX3BhZF9vcHMgPSB7DQorCS5pbml0X2NmZyA9IG92MDJhMTBfZW50 aXR5X2luaXRfY2ZnLA0KKwkuZW51bV9tYnVzX2NvZGUgPSBvdjAyYTEwX2VudW1fbWJ1c19jb2Rl LA0KKwkuZW51bV9mcmFtZV9zaXplID0gb3YwMmExMF9lbnVtX2ZyYW1lX3NpemVzLA0KKwkuZ2V0 X2ZtdCA9IG92MDJhMTBfZ2V0X2ZtdCwNCisJLnNldF9mbXQgPSBvdjAyYTEwX3NldF9mbXQsDQor fTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBvdjAyYTEwX3N1YmRl dl9vcHMgPSB7DQorCS52aWRlbwk9ICZvdjAyYTEwX3ZpZGVvX29wcywNCisJLnBhZAk9ICZvdjAy YTEwX3BhZF9vcHMsDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG1lZGlhX2VudGl0eV9v cGVyYXRpb25zIG92MDJhMTBfc3ViZGV2X2VudGl0eV9vcHMgPSB7DQorCS5saW5rX3ZhbGlkYXRl ID0gdjRsMl9zdWJkZXZfbGlua192YWxpZGF0ZSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgdjRsMl9jdHJsX29wcyBvdjAyYTEwX2N0cmxfb3BzID0gew0KKwkuc19jdHJsID0gb3YwMmEx MF9zZXRfY3RybCwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9pbml0aWFsaXplX2NvbnRy b2xzKHN0cnVjdCBvdjAyYTEwICpvdjAyYTEwKQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNs aWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorCWNvbnN0IHN0 cnVjdCBvdjAyYTEwX21vZGUgKm1vZGU7DQorCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGFu ZGxlcjsNCisJc3RydWN0IHY0bDJfY3RybCAqY3RybDsNCisJdTY0IGV4cG9zdXJlX21heDsNCisJ dTMyIHBpeGVsX3JhdGUsIGhfYmxhbms7DQorCWludCByZXQ7DQorDQorCWhhbmRsZXIgPSAmb3Yw MmExMC0+Y3RybF9oYW5kbGVyOw0KKwltb2RlID0gb3YwMmExMC0+Y3VyX21vZGU7DQorCXJldCA9 IHY0bDJfY3RybF9oYW5kbGVyX2luaXQoaGFuZGxlciwgNyk7DQorCWlmIChyZXQpDQorCQlyZXR1 cm4gcmV0Ow0KKw0KKwloYW5kbGVyLT5sb2NrID0gJm92MDJhMTAtPm11dGV4Ow0KKw0KKwljdHJs ID0gdjRsMl9jdHJsX25ld19pbnRfbWVudShoYW5kbGVyLCBOVUxMLCBWNEwyX0NJRF9MSU5LX0ZS RVEsIDAsIDAsDQorCQkJCSAgICAgIGxpbmtfZnJlcV9tZW51X2l0ZW1zKTsNCisJaWYgKGN0cmwp DQorCQljdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFk7DQorDQorCXBpeGVs X3JhdGUgPSB0b19waXhlbF9yYXRlKDApOw0KKwl2NGwyX2N0cmxfbmV3X3N0ZChoYW5kbGVyLCBO VUxMLCBWNEwyX0NJRF9QSVhFTF9SQVRFLCAwLCBwaXhlbF9yYXRlLCAxLA0KKwkJCSAgcGl4ZWxf cmF0ZSk7DQorDQorCWhfYmxhbmsgPSBtb2RlLT5odHNfZGVmIC0gbW9kZS0+d2lkdGg7DQorCW92 MDJhMTAtPmhibGFuayA9IHY0bDJfY3RybF9uZXdfc3RkKGhhbmRsZXIsIE5VTEwsIFY0TDJfQ0lE X0hCTEFOSywNCisJCQkJCSAgICBoX2JsYW5rLCBoX2JsYW5rLCAxLCBoX2JsYW5rKTsNCisJaWYg KG92MDJhMTAtPmhibGFuaykNCisJCW92MDJhMTAtPmhibGFuay0+ZmxhZ3MgfD0gVjRMMl9DVFJM X0ZMQUdfUkVBRF9PTkxZOw0KKw0KKwlvdjAyYTEwLT52YmxhbmsgPSB2NGwyX2N0cmxfbmV3X3N0 ZChoYW5kbGVyLCAmb3YwMmExMF9jdHJsX29wcywNCisJCQkJCSAgICBWNEwyX0NJRF9WQkxBTkss IG1vZGUtPnZ0c19kZWYgLQ0KKwkJCQkJICAgIG1vZGUtPmhlaWdodCwNCisJCQkJCSAgICBPVjAy QTEwX1ZUU19NQVggLSBtb2RlLT5oZWlnaHQsIDEsDQorCQkJCQkgICAgbW9kZS0+dnRzX2RlZiAt IG1vZGUtPmhlaWdodCk7DQorDQorCWV4cG9zdXJlX21heCA9IG1vZGUtPnZ0c19kZWYgLSA0Ow0K KwlvdjAyYTEwLT5leHBvc3VyZSA9IHY0bDJfY3RybF9uZXdfc3RkKGhhbmRsZXIsICZvdjAyYTEw X2N0cmxfb3BzLA0KKwkJCQkJICAgICAgVjRMMl9DSURfRVhQT1NVUkUsDQorCQkJCQkgICAgICBP VjAyQTEwX0VYUE9TVVJFX01JTiwNCisJCQkJCSAgICAgIGV4cG9zdXJlX21heCwNCisJCQkJCSAg ICAgIE9WMDJBMTBfRVhQT1NVUkVfU1RFUCwNCisJCQkJCSAgICAgIG1vZGUtPmV4cF9kZWYpOw0K Kw0KKwlvdjAyYTEwLT5hbmFsX2dhaW4gPSB2NGwyX2N0cmxfbmV3X3N0ZChoYW5kbGVyLCAmb3Yw MmExMF9jdHJsX29wcywNCisJCQkJCSAgICAgICBWNEwyX0NJRF9BTkFMT0dVRV9HQUlOLA0KKwkJ CQkJICAgICAgIE9WMDJBMTBfR0FJTl9NSU4sDQorCQkJCQkgICAgICAgT1YwMkExMF9HQUlOX01B WCwNCisJCQkJCSAgICAgICBPVjAyQTEwX0dBSU5fU1RFUCwNCisJCQkJCSAgICAgICBPVjAyQTEw X0dBSU5fREVGQVVMVCk7DQorDQorCW92MDJhMTAtPnRlc3RfcGF0dGVybiA9DQorCQl2NGwyX2N0 cmxfbmV3X3N0ZF9tZW51X2l0ZW1zKGhhbmRsZXIsICZvdjAyYTEwX2N0cmxfb3BzLA0KKwkJCQkJ ICAgICBWNEwyX0NJRF9URVNUX1BBVFRFUk4sDQorCQkJCQkgICAgIEFSUkFZX1NJWkUob3YwMmEx MF90ZXN0X3BhdHRlcm5fbWVudSkgLQ0KKwkJCQkJICAgICAxLCAwLCAwLA0KKwkJCQkJICAgICBv djAyYTEwX3Rlc3RfcGF0dGVybl9tZW51KTsNCisNCisJaWYgKGhhbmRsZXItPmVycm9yKSB7DQor CQlyZXQgPSBoYW5kbGVyLT5lcnJvcjsNCisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVk IHRvIGluaXQgY29udHJvbHMoJWQpXG4iLCByZXQpOw0KKwkJZ290byBlcnJfZnJlZV9oYW5kbGVy Ow0KKwl9DQorDQorCW92MDJhMTAtPnN1YmRldi5jdHJsX2hhbmRsZXIgPSBoYW5kbGVyOw0KKw0K KwlyZXR1cm4gMDsNCisNCitlcnJfZnJlZV9oYW5kbGVyOg0KKwl2NGwyX2N0cmxfaGFuZGxlcl9m cmVlKGhhbmRsZXIpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IG92MDJh MTBfY2hlY2tfaHdjZmcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3YwMmExMCAqb3YwMmEx MCkNCit7DQorCXN0cnVjdCBmd25vZGVfaGFuZGxlICplcDsNCisJc3RydWN0IGZ3bm9kZV9oYW5k bGUgKmZ3bm9kZSA9IGRldl9md25vZGUoZGV2KTsNCisJc3RydWN0IHY0bDJfZndub2RlX2VuZHBv aW50IGJ1c19jZmcgPSB7DQorCQkuYnVzX3R5cGUgPSBWNEwyX01CVVNfQ1NJMl9EUEhZLA0KKwl9 Ow0KKwl1bnNpZ25lZCBpbnQgaSwgajsNCisJaW50IHJldDsNCisNCisJaWYgKCFmd25vZGUpDQor CQlyZXR1cm4gLUVJTlZBTDsNCisNCisJZXAgPSBmd25vZGVfZ3JhcGhfZ2V0X25leHRfZW5kcG9p bnQoZndub2RlLCBOVUxMKTsNCisJaWYgKCFlcCkNCisJCXJldHVybiAtRU5YSU87DQorDQorCXJl dCA9IHY0bDJfZndub2RlX2VuZHBvaW50X2FsbG9jX3BhcnNlKGVwLCAmYnVzX2NmZyk7DQorCWZ3 bm9kZV9oYW5kbGVfcHV0KGVwKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCS8q IE9wdGlvbmFsIGluZGljYXRpb24gb2YgbWlwaSBjbG9jayBsYW5lIG1vZGUgKi8NCisJaWYgKGJ1 c19jZmcuYnVzLm1pcGlfY3NpMi5mbGFncyAmIFY0TDJfTUJVU19DU0kyX05PTkNPTlRJTlVPVVNf Q0xPQ0spDQorCQlvdjAyYTEwLT5taXBpX2Nsb2NrX2hzX21vZGVfZW5hYmxlID0gdHJ1ZTsNCisN CisJaWYgKCFidXNfY2ZnLm5yX29mX2xpbmtfZnJlcXVlbmNpZXMpIHsNCisJCWRldl9lcnIoZGV2 LCAibm8gbGluayBmcmVxdWVuY2llcyBkZWZpbmVkIik7DQorCQlyZXQgPSAtRUlOVkFMOw0KKwkJ Z290byBjaGVja19od2NmZ19lcnJvcjsNCisJfQ0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShsaW5rX2ZyZXFfbWVudV9pdGVtcyk7IGkrKykgew0KKwkJZm9yIChqID0gMDsgaiA8IGJ1 c19jZmcubnJfb2ZfbGlua19mcmVxdWVuY2llczsgaisrKSB7DQorCQkJaWYgKGxpbmtfZnJlcV9t ZW51X2l0ZW1zW2ldID09DQorCQkJCWJ1c19jZmcubGlua19mcmVxdWVuY2llc1tqXSkNCisJCQkJ YnJlYWs7DQorCQl9DQorDQorCQlpZiAoaiA9PSBidXNfY2ZnLm5yX29mX2xpbmtfZnJlcXVlbmNp ZXMpIHsNCisJCQlkZXZfZXJyKGRldiwgIm5vIGxpbmsgZnJlcXVlbmN5ICVsbGQgc3VwcG9ydGVk IiwNCisJCQkJbGlua19mcmVxX21lbnVfaXRlbXNbaV0pOw0KKwkJCXJldCA9IC1FSU5WQUw7DQor CQkJZ290byBjaGVja19od2NmZ19lcnJvcjsNCisJCX0NCisJfQ0KKw0KK2NoZWNrX2h3Y2ZnX2Vy cm9yOg0KKwl2NGwyX2Z3bm9kZV9lbmRwb2ludF9mcmVlKCZidXNfY2ZnKTsNCisNCisJcmV0dXJu IHJldDsNCit9DQorDQorc3RhdGljIGludCBvdjAyYTEwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7DQorCXN0 cnVjdCBvdjAyYTEwICpvdjAyYTEwOw0KKwl1bnNpZ25lZCBpbnQgcm90YXRpb247DQorCXVuc2ln bmVkIGludCBjbG9ja19sYW5lX3R4X3NwZWVkOw0KKwl1bnNpZ25lZCBpbnQgaTsNCisJaW50IHJl dDsNCisNCisJb3YwMmExMCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqb3YwMmExMCksIEdG UF9LRVJORUwpOw0KKwlpZiAoIW92MDJhMTApDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJcmV0 ID0gb3YwMmExMF9jaGVja19od2NmZyhkZXYsIG92MDJhMTApOw0KKwlpZiAocmV0KSB7DQorCQlk ZXZfZXJyKGRldiwgImZhaWxlZCB0byBjaGVjayBIVyBjb25maWd1cmF0aW9uOiAlZCIsIHJldCk7 DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXY0bDJfaTJjX3N1YmRldl9pbml0KCZvdjAyYTEw LT5zdWJkZXYsIGNsaWVudCwgJm92MDJhMTBfc3ViZGV2X29wcyk7DQorCW92MDJhMTAtPnVwc2lk ZV9kb3duID0gZmFsc2U7DQorCW92MDJhMTAtPmZtdC5jb2RlID0gTUVESUFfQlVTX0ZNVF9TQkdH UjEwXzFYMTA7DQorDQorCS8qIE9wdGlvbmFsIGluZGljYXRpb24gb2YgcGh5c2ljYWwgcm90YXRp b24gb2Ygc2Vuc29yICovDQorCXJldCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXZfZndu b2RlKGRldiksICJyb3RhdGlvbiIsICZyb3RhdGlvbik7DQorCWlmICghcmV0KSB7DQorCQlvdjAy YTEwLT51cHNpZGVfZG93biA9IHJvdGF0aW9uID09IDE4MDsNCisNCisJCWlmIChyb3RhdGlvbiA9 PSAxODApIHsNCisJCQlvdjAyYTEwLT51cHNpZGVfZG93biA9IHRydWU7DQorCQkJb3YwMmExMC0+ Zm10LmNvZGUgPSBNRURJQV9CVVNfRk1UX1NSR0dCMTBfMVgxMDsNCisJCX0NCisJfQ0KKw0KKwkv KiBPcHRpb25hbCBpbmRpY2F0aW9uIG9mIG1pcGkgVFggc3BlZWQgKi8NCisJcmV0ID0gZndub2Rl X3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwgIm92dGksbWlwaS10eC1zcGVlZCIs DQorCQkJCSAgICAgICAmY2xvY2tfbGFuZV90eF9zcGVlZCk7DQorDQorCWlmICghcmV0KQ0KKwkJ b3YwMmExMC0+bWlwaV9jbG9ja190eF9zcGVlZCA9IGNsb2NrX2xhbmVfdHhfc3BlZWQ7DQorDQor CS8qIEdldCBzeXN0ZW0gY2xvY2sgKGVjbGspICovDQorCW92MDJhMTAtPmVjbGsgPSBkZXZtX2Ns a19nZXQoZGV2LCAiZWNsayIpOw0KKwlpZiAoSVNfRVJSKG92MDJhMTAtPmVjbGspKSB7DQorCQly ZXQgPSBQVFJfRVJSKG92MDJhMTAtPmVjbGspOw0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8g Z2V0IGVjbGsgJWRcbiIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldCA9IGZ3 bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXZfZndub2RlKGRldiksICJjbG9jay1mcmVxdWVuY3ki LA0KKwkJCQkgICAgICAgJm92MDJhMTAtPmVjbGtfZnJlcSk7DQorCWlmIChyZXQpIHsNCisJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBlY2xrIGZyZXF1ZW5jeVxuIik7DQorCQlyZXR1cm4g cmV0Ow0KKwl9DQorDQorCXJldCA9IGNsa19zZXRfcmF0ZShvdjAyYTEwLT5lY2xrLCBvdjAyYTEw LT5lY2xrX2ZyZXEpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBz ZXQgZWNsayBmcmVxdWVuY3kgKDI0TUh6KVxuIik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQor CWlmIChjbGtfZ2V0X3JhdGUob3YwMmExMC0+ZWNsaykgIT0gT1YwMkExMF9FQ0xLX0ZSRVEpIHsN CisJCWRldl93YXJuKGRldiwgIndyb25nIGVjbGsgZnJlcXVlbmN5ICVkIEh6LCBleHBlY3RlZDog JWQgSHpcbiIsDQorCQkJIG92MDJhMTAtPmVjbGtfZnJlcSwgT1YwMkExMF9FQ0xLX0ZSRVEpOw0K KwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJb3YwMmExMC0+cGRfZ3BpbyA9IGRldm1fZ3Bp b2RfZ2V0KGRldiwgInBvd2VyZG93biIsIEdQSU9EX09VVF9ISUdIKTsNCisJaWYgKElTX0VSUihv djAyYTEwLT5wZF9ncGlvKSkgew0KKwkJcmV0ID0gUFRSX0VSUihvdjAyYTEwLT5wZF9ncGlvKTsN CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBwb3dlcmRvd24tZ3Bpb3MgJWRcbiIsIHJl dCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCW92MDJhMTAtPm5fcnN0X2dwaW8gPSBkZXZt X2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9EX09VVF9MT1cpOw0KKwlpZiAoSVNfRVJSKG92 MDJhMTAtPm5fcnN0X2dwaW8pKSB7DQorCQlyZXQgPSBQVFJfRVJSKG92MDJhMTAtPm5fcnN0X2dw aW8pOw0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHJlc2V0LWdwaW9zICVkXG4iLCBy ZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgT1YwMkExMF9O VU1fU1VQUExJRVM7IGkrKykNCisJCW92MDJhMTAtPnN1cHBsaWVzW2ldLnN1cHBseSA9IG92MDJh MTBfc3VwcGx5X25hbWVzW2ldOw0KKw0KKwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldChk ZXYsIE9WMDJBMTBfTlVNX1NVUFBMSUVTLA0KKwkJCQkgICAgICBvdjAyYTEwLT5zdXBwbGllcyk7 DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCByZWd1bGF0b3Jz XG4iKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJbXV0ZXhfaW5pdCgmb3YwMmExMC0+bXV0 ZXgpOw0KKwlvdjAyYTEwLT5jdXJfbW9kZSA9ICZzdXBwb3J0ZWRfbW9kZXNbMF07DQorCXJldCA9 IG92MDJhMTBfaW5pdGlhbGl6ZV9jb250cm9scyhvdjAyYTEwKTsNCisJaWYgKHJldCkgew0KKwkJ ZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb250cm9sc1xuIik7DQorCQlnb3Rv IGVycl9kZXN0cm95X211dGV4Ow0KKwl9DQorDQorCW92MDJhMTAtPnN1YmRldi5mbGFncyB8PSBW NEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERTsNCisJb3YwMmExMC0+c3ViZGV2LmVudGl0eS5vcHMg PSAmb3YwMmExMF9zdWJkZXZfZW50aXR5X29wczsNCisJb3YwMmExMC0+c3ViZGV2LmVudGl0eS5m dW5jdGlvbiA9IE1FRElBX0VOVF9GX0NBTV9TRU5TT1I7DQorCW92MDJhMTAtPnBhZC5mbGFncyA9 IE1FRElBX1BBRF9GTF9TT1VSQ0U7DQorCXJldCA9IG1lZGlhX2VudGl0eV9wYWRzX2luaXQoJm92 MDJhMTAtPnN1YmRldi5lbnRpdHksIDEsICZvdjAyYTEwLT5wYWQpOw0KKwlpZiAocmV0IDwgMCkg ew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdCBlbnRpdHkgcGFkczogJWQiLCByZXQp Ow0KKwkJZ290byBlcnJfZnJlZV9oYW5kbGVyOw0KKwl9DQorDQorCXJldCA9IHY0bDJfYXN5bmNf cmVnaXN0ZXJfc3ViZGV2KCZvdjAyYTEwLT5zdWJkZXYpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZf ZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBWNEwyIHN1YmRldjogJWQiLCByZXQpOw0KKwkJ Z290byBlcnJfY2xlYW5fZW50aXR5Ow0KKwl9DQorDQorCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7 DQorCWlmICghcG1fcnVudGltZV9lbmFibGVkKGRldikpIHsNCisJCXJldCA9IG92MDJhMTBfcG93 ZXJfb24oZGV2KTsNCisJCWlmIChyZXQgPCAwKSB7DQorCQkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gcG93ZXIgb246ICVkXG4iLCByZXQpOw0KKwkJCWdvdG8gZXJyX2NsZWFuX2VudGl0eTsNCisJ CX0NCisJfQ0KKw0KKwlyZXR1cm4gMDsNCisNCitlcnJfY2xlYW5fZW50aXR5Og0KKwltZWRpYV9l bnRpdHlfY2xlYW51cCgmb3YwMmExMC0+c3ViZGV2LmVudGl0eSk7DQorZXJyX2ZyZWVfaGFuZGxl cjoNCisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZShvdjAyYTEwLT5zdWJkZXYuY3RybF9oYW5kbGVy KTsNCitlcnJfZGVzdHJveV9tdXRleDoNCisJbXV0ZXhfZGVzdHJveSgmb3YwMmExMC0+bXV0ZXgp Ow0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IG92MDJhMTBfcmVtb3ZlKHN0 cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQorew0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0g aTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7DQorCXN0cnVjdCBvdjAyYTEwICpvdjAyYTEwID0g dG9fb3YwMmExMChzZCk7DQorDQorCXY0bDJfYXN5bmNfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOw0K KwltZWRpYV9lbnRpdHlfY2xlYW51cCgmc2QtPmVudGl0eSk7DQorCXY0bDJfY3RybF9oYW5kbGVy X2ZyZWUoc2QtPmN0cmxfaGFuZGxlcik7DQorCXBtX3J1bnRpbWVfZGlzYWJsZSgmY2xpZW50LT5k ZXYpOw0KKwlpZiAoIXBtX3J1bnRpbWVfc3RhdHVzX3N1c3BlbmRlZCgmY2xpZW50LT5kZXYpKQ0K KwkJb3YwMmExMF9wb3dlcl9vZmYoJmNsaWVudC0+ZGV2KTsNCisJcG1fcnVudGltZV9zZXRfc3Vz cGVuZGVkKCZjbGllbnQtPmRldik7DQorCW11dGV4X2Rlc3Ryb3koJm92MDJhMTAtPm11dGV4KTsN CisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IG92MDJhMTBfb2ZfbWF0Y2hbXSA9IHsNCisJeyAuY29tcGF0aWJsZSA9ICJvdnRpLG92MDJhMTAi IH0sDQorCXt9DQorfTsNCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvdjAyYTEwX29mX21hdGNo KTsNCisNCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgb3YwMmExMF9pMmNfZHJpdmVyID0gew0K KwkuZHJpdmVyID0gew0KKwkJLm5hbWUgPSAib3YwMmExMCIsDQorCQkucG0gPSAmb3YwMmExMF9w bV9vcHMsDQorCQkub2ZfbWF0Y2hfdGFibGUgPSBvdjAyYTEwX29mX21hdGNoLA0KKwl9LA0KKwku cHJvYmVfbmV3CT0gJm92MDJhMTBfcHJvYmUsDQorCS5yZW1vdmUJCT0gJm92MDJhMTBfcmVtb3Zl LA0KK307DQorDQorbW9kdWxlX2kyY19kcml2ZXIob3YwMmExMF9pMmNfZHJpdmVyKTsNCisNCitN T0RVTEVfQVVUSE9SKCJEb25nY2h1biBaaHUgPGRvbmdjaHVuLnpodUBtZWRpYXRlay5jb20+Iik7 DQorTU9EVUxFX0RFU0NSSVBUSU9OKCJPbW5pVmlzaW9uIE9WMDJBMTAgc2Vuc29yIGRyaXZlciIp Ow0KK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCisNCi0tIA0KMi45LjINCg==