From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 16/17] drm/amdgpu: add SI DPM support (v3) Date: Sat, 14 May 2016 15:26:28 -0400 Message-ID: <1463253989-28924-17-git-send-email-alexander.deucher@amd.com> References: <1463253989-28924-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qk0-x244.google.com (mail-qk0-x244.google.com [IPv6:2607:f8b0:400d:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1B1426E2EC for ; Sat, 14 May 2016 19:26:52 +0000 (UTC) Received: by mail-qk0-x244.google.com with SMTP id i7so10943312qkd.1 for ; Sat, 14 May 2016 12:26:52 -0700 (PDT) In-Reply-To: <1463253989-28924-1-git-send-email-alexander.deucher@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Alex Deucher , Maruthi Bayyavarapu List-Id: dri-devel@lists.freedesktop.org RnJvbTogTWFydXRoaSBTcmluaXZhcyBCYXl5YXZhcmFwdSA8TWFydXRoaS5CYXl5YXZhcmFwdUBh bWQuY29tPgoKdjI6IGNvcnJlY3RlZCByZWdpc3RlciBvZmZzZXQgc2hpZnQKdjM6IHJlYmFzZSBm aXhlcwoKU2lnbmVkLW9mZi1ieTogTWFydXRoaSBCYXl5YXZhcmFwdSA8bWFydXRoaS5iYXl5YXZh cmFwdUBhbWQuY29tPgpSZXZpZXdlZC1ieTogQWxleCBEZXVjaGVyIDxhbGV4YW5kZXIuZGV1Y2hl ckBhbWQuY29tPgpTaWduZWQtb2ZmLWJ5OiBBbGV4IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVy QGFtZC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmggICB8ICAg IDUgKwogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvcjYwMF9kcG0uaCB8ICAxMjcgKwogZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvc2lfZHBtLmMgICB8IDc5ODIgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zaV9kcG0uaCAg IHwgMTAxNSArKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA5MTI5IGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9yNjAwX2RwbS5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvc2lfZHBtLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zaV9kcG0uaAoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKaW5kZXggZTdiMjhkNy4uZjU5OTM4ZiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKQEAgLTE4MjQsNiArMTgyNCw5IEBAIHN0cnVjdCBhbWRn cHVfYXNpY19mdW5jcyB7CiAJLyogTU0gYmxvY2sgY2xvY2tzICovCiAJaW50ICgqc2V0X3V2ZF9j bG9ja3MpKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1MzIgdmNsaywgdTMyIGRjbGspOwog CWludCAoKnNldF92Y2VfY2xvY2tzKShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdTMyIGV2 Y2xrLCB1MzIgZWNjbGspOworCS8qIHN0YXRpYyBwb3dlciBtYW5hZ2VtZW50ICovCisJaW50ICgq Z2V0X3BjaWVfbGFuZXMpKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKKwl2b2lkICgqc2V0 X3BjaWVfbGFuZXMpKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBpbnQgbGFuZXMpOwogfTsK IAogLyoKQEAgLTIyMDgsNiArMjIxMSw4IEBAIGFtZGdwdV9nZXRfc2RtYV9pbnN0YW5jZShzdHJ1 Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCiAjZGVmaW5lIGFtZGdwdV9hc2ljX2dldF94Y2xrKGFkZXYp IChhZGV2KS0+YXNpY19mdW5jcy0+Z2V0X3hjbGsoKGFkZXYpKQogI2RlZmluZSBhbWRncHVfYXNp Y19zZXRfdXZkX2Nsb2NrcyhhZGV2LCB2LCBkKSAoYWRldiktPmFzaWNfZnVuY3MtPnNldF91dmRf Y2xvY2tzKChhZGV2KSwgKHYpLCAoZCkpCiAjZGVmaW5lIGFtZGdwdV9hc2ljX3NldF92Y2VfY2xv Y2tzKGFkZXYsIGV2LCBlYykgKGFkZXYpLT5hc2ljX2Z1bmNzLT5zZXRfdmNlX2Nsb2NrcygoYWRl diksIChldiksIChlYykpCisjZGVmaW5lIGFtZGdwdV9nZXRfcGNpZV9sYW5lcyhhZGV2KSAoYWRl diktPmFzaWNfZnVuY3MtPmdldF9wY2llX2xhbmVzKChhZGV2KSkKKyNkZWZpbmUgYW1kZ3B1X3Nl dF9wY2llX2xhbmVzKGFkZXYsIGwpIChhZGV2KS0+YXNpY19mdW5jcy0+c2V0X3BjaWVfbGFuZXMo KGFkZXYpLCAobCkpCiAjZGVmaW5lIGFtZGdwdV9hc2ljX2dldF9ncHVfY2xvY2tfY291bnRlcihh ZGV2KSAoYWRldiktPmFzaWNfZnVuY3MtPmdldF9ncHVfY2xvY2tfY291bnRlcigoYWRldikpCiAj ZGVmaW5lIGFtZGdwdV9hc2ljX3JlYWRfZGlzYWJsZWRfYmlvcyhhZGV2KSAoYWRldiktPmFzaWNf ZnVuY3MtPnJlYWRfZGlzYWJsZWRfYmlvcygoYWRldikpCiAjZGVmaW5lIGFtZGdwdV9hc2ljX3Jl YWRfYmlvc19mcm9tX3JvbShhZGV2LCBiLCBsKSAoYWRldiktPmFzaWNfZnVuY3MtPnJlYWRfYmlv c19mcm9tX3JvbSgoYWRldiksIChiKSwgKGwpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvcjYwMF9kcG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3I2MDBf ZHBtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1MzIxZgotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3I2MDBfZHBtLmgKQEAgLTAs MCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBBZHZhbmNlZCBNaWNybyBEZXZpY2Vz LCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09Q WVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisjaWZuZGVmIF9fUjYwMF9EUE1fSF9fCisj ZGVmaW5lIF9fUjYwMF9EUE1fSF9fCisKKyNkZWZpbmUgUjYwMF9BU0lfREZMVCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTAwMDAKKyNkZWZpbmUgUjYwMF9CU1BfREZMVCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHg0MUVCCisjZGVmaW5lIFI2MDBfQlNVX0RGTFQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MgorI2RlZmluZSBSNjAwX0FIX0RGTFQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFI2MDBfUkxQX0RGTFQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIFI2MDBfUk1QX0RGTFQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1CisjZGVmaW5lIFI2MDBfTEhQX0RGTFQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwCisjZGVmaW5lIFI2MDBfTE1QX0RGTFQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIFI2MDBfVERfREZMVCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUjYwMF9VVENfREZMVF8wMCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNAorI2RlZmluZSBSNjAwX1VUQ19ERkxUXzAx ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyCisjZGVmaW5lIFI2MDBfVVRDX0RGTFRf MDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgUjYwMF9VVENfREZM VF8wMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMgorI2RlZmluZSBSNjAwX1VUQ19E RkxUXzA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyCisjZGVmaW5lIFI2MDBfVVRD X0RGTFRfMDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgUjYwMF9V VENfREZMVF8wNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMgorI2RlZmluZSBSNjAw X1VUQ19ERkxUXzA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyCisjZGVmaW5lIFI2 MDBfVVRDX0RGTFRfMDggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUg UjYwMF9VVENfREZMVF8wOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMgorI2RlZmlu ZSBSNjAwX1VUQ19ERkxUXzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyCisjZGVm aW5lIFI2MDBfVVRDX0RGTFRfMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIKKyNk ZWZpbmUgUjYwMF9VVENfREZMVF8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMgor I2RlZmluZSBSNjAwX1VUQ19ERkxUXzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIy CisjZGVmaW5lIFI2MDBfVVRDX0RGTFRfMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 MjIKKyNkZWZpbmUgUjYwMF9EVENfREZMVF8wMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHgyNAorI2RlZmluZSBSNjAwX0RUQ19ERkxUXzAxICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAweDIyCisjZGVmaW5lIFI2MDBfRFRDX0RGTFRfMDIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MjIKKyNkZWZpbmUgUjYwMF9EVENfREZMVF8wMyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMHgyMgorI2RlZmluZSBSNjAwX0RUQ19ERkxUXzA0ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAweDIyCisjZGVmaW5lIFI2MDBfRFRDX0RGTFRfMDUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MjIKKyNkZWZpbmUgUjYwMF9EVENfREZMVF8wNiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgyMgorI2RlZmluZSBSNjAwX0RUQ19ERkxUXzA3ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAweDIyCisjZGVmaW5lIFI2MDBfRFRDX0RGTFRfMDggICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgUjYwMF9EVENfREZMVF8wOSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgyMgorI2RlZmluZSBSNjAwX0RUQ19ERkxUXzEwICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDIyCisjZGVmaW5lIFI2MDBfRFRDX0RGTFRfMTEgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgUjYwMF9EVENfREZMVF8xMiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHgyMgorI2RlZmluZSBSNjAwX0RUQ19ERkxUXzEzICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyCisjZGVmaW5lIFI2MDBfRFRDX0RGTFRfMTQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgUjYwMF9WUkNfREZMVCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwQzAwMworI2RlZmluZSBSNjAwX1ZP TFRBR0VSRVNQT05TRVRJTUVfREZMVCAgICAgICAgICAgICAgICAxMDAwCisjZGVmaW5lIFI2MDBf QkFDS0JJQVNSRVNQT05TRVRJTUVfREZMVCAgICAgICAgICAgICAgIDEwMDAKKyNkZWZpbmUgUjYw MF9WUlVfREZMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzCisjZGVmaW5lIFI2 MDBfU1BMTFNURVBUSU1FX0RGTFQgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmlu ZSBSNjAwX1NQTExTVEVQVU5JVF9ERkxUICAgICAgICAgICAgICAgICAgICAgICAweDMKKyNkZWZp bmUgUjYwMF9UUFVfREZMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmlu ZSBSNjAwX1RQQ19ERkxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMAorI2Rl ZmluZSBSNjAwX1NTVFVfREZMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVm aW5lIFI2MDBfU1NUX0RGTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBDOAor I2RlZmluZSBSNjAwX0dJQ1NUX0RGTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIw MAorI2RlZmluZSBSNjAwX0ZDVF9ERkxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw eDA0MDAKKyNkZWZpbmUgUjYwMF9GQ1RVX0RGTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMAorI2RlZmluZSBSNjAwX0NUWENHVFQzRFJQSENfREZMVCAgICAgICAgICAgICAgICAgICAg ICAweDIwCisjZGVmaW5lIFI2MDBfQ1RYQ0dUVDNEUlNEQ19ERkxUICAgICAgICAgICAgICAgICAg ICAgIDB4NDAKKyNkZWZpbmUgUjYwMF9WRERDM0RPT1JQSENfREZMVCAgICAgICAgICAgICAgICAg ICAgICAgMHgxMDAKKyNkZWZpbmUgUjYwMF9WRERDM0RPT1JTRENfREZMVCAgICAgICAgICAgICAg ICAgICAgICAgMHg3CisjZGVmaW5lIFI2MDBfVkREQzNET09SU1VfREZMVCAgICAgICAgICAgICAg ICAgICAgICAgIDAKKyNkZWZpbmUgUjYwMF9NUExMTE9DS1RJTUVfREZMVCAgICAgICAgICAgICAg ICAgICAgICAgMTAwCisjZGVmaW5lIFI2MDBfTVBMTFJFU0VUVElNRV9ERkxUICAgICAgICAgICAg ICAgICAgICAgIDE1MAorI2RlZmluZSBSNjAwX1ZDT1NURVBQQ1RfREZMVCAgICAgICAgICAgICAg ICAgICAgICAgICAgMjAKKyNkZWZpbmUgUjYwMF9FTkRJTkdWQ09TVEVQUENUX0RGTFQgICAgICAg ICAgICAgICAgICAgIDUKKyNkZWZpbmUgUjYwMF9SRUZFUkVOQ0VESVZJREVSX0RGTFQgICAgICAg ICAgICAgICAgICAgIDQKKworI2RlZmluZSBSNjAwX1BNX05VTUJFUl9PRl9UQyAxNQorI2RlZmlu ZSBSNjAwX1BNX05VTUJFUl9PRl9TQ0xLUyAyMAorI2RlZmluZSBSNjAwX1BNX05VTUJFUl9PRl9N Q0xLUyA0CisjZGVmaW5lIFI2MDBfUE1fTlVNQkVSX09GX1ZPTFRBR0VfTEVWRUxTIDQKKyNkZWZp bmUgUjYwMF9QTV9OVU1CRVJfT0ZfQUNUSVZJVFlfTEVWRUxTIDMKKworLyogWFhYIGFyZSB0aGVz ZSBvaz8gKi8KKyNkZWZpbmUgUjYwMF9URU1QX1JBTkdFX01JTiAoOTAgKiAxMDAwKQorI2RlZmlu ZSBSNjAwX1RFTVBfUkFOR0VfTUFYICgxMjAgKiAxMDAwKQorCisjZGVmaW5lIEZET19QV01fTU9E RV9TVEFUSUMgIDEKKyNkZWZpbmUgRkRPX1BXTV9NT0RFX1NUQVRJQ19SUE0gNQorCitlbnVtIHI2 MDBfcG93ZXJfbGV2ZWwgeworCVI2MDBfUE9XRVJfTEVWRUxfTE9XID0gMCwKKwlSNjAwX1BPV0VS X0xFVkVMX01FRElVTSA9IDEsCisJUjYwMF9QT1dFUl9MRVZFTF9ISUdIID0gMiwKKwlSNjAwX1BP V0VSX0xFVkVMX0NUWFNXID0gMywKK307CisKK2VudW0gcjYwMF90ZCB7CisJUjYwMF9URF9BVVRP LAorCVI2MDBfVERfVVAsCisJUjYwMF9URF9ET1dOLAorfTsKKworZW51bSByNjAwX2Rpc3BsYXlf d2F0ZXJtYXJrIHsKKwlSNjAwX0RJU1BMQVlfV0FURVJNQVJLX0xPVyA9IDAsCisJUjYwMF9ESVNQ TEFZX1dBVEVSTUFSS19ISUdIID0gMSwKK307CisKK2VudW0gcjYwMF9kaXNwbGF5X2dhcAorewor ICAgIFI2MDBfUE1fRElTUExBWV9HQVBfVkJMQU5LX09SX1dNID0gMCwKKyAgICBSNjAwX1BNX0RJ U1BMQVlfR0FQX1ZCTEFOSyAgICAgICA9IDEsCisgICAgUjYwMF9QTV9ESVNQTEFZX0dBUF9XQVRF Uk1BUksgICAgPSAyLAorICAgIFI2MDBfUE1fRElTUExBWV9HQVBfSUdOT1JFICAgICAgID0gMywK K307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NpX2Rw bS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvc2lfZHBtLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uY2VhNGJkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L3NpX2RwbS5jCkBAIC0wLDAgKzEsNzk4MiBAQAorLyoKKyAqIENv cHlyaWdodCAyMDEzIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxs IGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFV VEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K KyAqCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJhbWRncHUuaCIKKyNpbmNs dWRlICJhbWRncHVfcG0uaCIKKyNpbmNsdWRlICJhbWRncHVfZHBtLmgiCisjaW5jbHVkZSAiYW1k Z3B1X2F0b21iaW9zLmgiCisjaW5jbHVkZSAic2kvc2lkLmgiCisjaW5jbHVkZSAicjYwMF9kcG0u aCIKKyNpbmNsdWRlICJzaV9kcG0uaCIKKyNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAiLi4v aW5jbHVkZS9wcHRhYmxlLmgiCisjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CisjaW5jbHVkZSA8 bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisjZGVmaW5l IE1DX0NHX0FSQl9GUkVRX0YwICAgICAgICAgICAweDBhCisjZGVmaW5lIE1DX0NHX0FSQl9GUkVR X0YxICAgICAgICAgICAweDBiCisjZGVmaW5lIE1DX0NHX0FSQl9GUkVRX0YyICAgICAgICAgICAw eDBjCisjZGVmaW5lIE1DX0NHX0FSQl9GUkVRX0YzICAgICAgICAgICAweDBkCisKKyNkZWZpbmUg U01DX1JBTV9FTkQgICAgICAgICAgICAgICAgIDB4MjAwMDAKKworI2RlZmluZSBTQ0xLX01JTl9E RUVQU0xFRVBfRlJFUSAgICAgMTM1MAorCisKKy8qIHNpemVvZihBVE9NX1BQTElCX0VYVEVOREVE SEVBREVSKSAqLworI2RlZmluZSBTSVpFX09GX0FUT01fUFBMSUJfRVhURU5ERURIRUFERVJfVjIg MTIKKyNkZWZpbmUgU0laRV9PRl9BVE9NX1BQTElCX0VYVEVOREVESEVBREVSX1YzIDE0CisjZGVm aW5lIFNJWkVfT0ZfQVRPTV9QUExJQl9FWFRFTkRFREhFQURFUl9WNCAxNgorI2RlZmluZSBTSVpF X09GX0FUT01fUFBMSUJfRVhURU5ERURIRUFERVJfVjUgMTgKKyNkZWZpbmUgU0laRV9PRl9BVE9N X1BQTElCX0VYVEVOREVESEVBREVSX1Y2IDIwCisjZGVmaW5lIFNJWkVfT0ZfQVRPTV9QUExJQl9F WFRFTkRFREhFQURFUl9WNyAyMgorCisjZGVmaW5lIEJJT1NfU0NSQVRDSF80ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHg1Y2QKKworTU9EVUxFX0ZJUk1XQVJFKCJhbWRncHUv dGFoaXRpX3NtYy5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgiYW1kZ3B1L3BpdGNhaXJuX3NtYy5i aW4iKTsKK01PRFVMRV9GSVJNV0FSRSgiYW1kZ3B1L3ZlcmRlX3NtYy5iaW4iKTsKK01PRFVMRV9G SVJNV0FSRSgiYW1kZ3B1L29sYW5kX3NtYy5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgiYW1kZ3B1 L2hhaW5hbl9zbWMuYmluIik7CisKK3VuaW9uIHBvd2VyX2luZm8geworCXN0cnVjdCBfQVRPTV9Q T1dFUlBMQVlfSU5GTyBpbmZvOworCXN0cnVjdCBfQVRPTV9QT1dFUlBMQVlfSU5GT19WMiBpbmZv XzI7CisJc3RydWN0IF9BVE9NX1BPV0VSUExBWV9JTkZPX1YzIGluZm9fMzsKKwlzdHJ1Y3QgX0FU T01fUFBMSUJfUE9XRVJQTEFZVEFCTEUgcHBsaWI7CisJc3RydWN0IF9BVE9NX1BQTElCX1BPV0VS UExBWVRBQkxFMiBwcGxpYjI7CisJc3RydWN0IF9BVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFMyBw cGxpYjM7CisJc3RydWN0IF9BVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFNCBwcGxpYjQ7CisJc3Ry dWN0IF9BVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFNSBwcGxpYjU7Cit9OworCit1bmlvbiBmYW5f aW5mbyB7CisJc3RydWN0IF9BVE9NX1BQTElCX0ZBTlRBQkxFIGZhbjsKKwlzdHJ1Y3QgX0FUT01f UFBMSUJfRkFOVEFCTEUyIGZhbjI7CisJc3RydWN0IF9BVE9NX1BQTElCX0ZBTlRBQkxFMyBmYW4z OworfTsKKwordW5pb24gcHBsaWJfY2xvY2tfaW5mbyB7CisgICAgICAgIHN0cnVjdCBfQVRPTV9Q UExJQl9SNjAwX0NMT0NLX0lORk8gcjYwMDsKKyAgICAgICAgc3RydWN0IF9BVE9NX1BQTElCX1JT NzgwX0NMT0NLX0lORk8gcnM3ODA7CisgICAgICAgIHN0cnVjdCBfQVRPTV9QUExJQl9FVkVSR1JF RU5fQ0xPQ0tfSU5GTyBldmVyZ3JlZW47CisgICAgICAgIHN0cnVjdCBfQVRPTV9QUExJQl9TVU1P X0NMT0NLX0lORk8gc3VtbzsKKyAgICAgICAgc3RydWN0IF9BVE9NX1BQTElCX1NJX0NMT0NLX0lO Rk8gc2k7Cit9OworCitjb25zdCB1MzIgcjYwMF91dGNbUjYwMF9QTV9OVU1CRVJfT0ZfVENdID0K K3sKKwlSNjAwX1VUQ19ERkxUXzAwLAorCVI2MDBfVVRDX0RGTFRfMDEsCisJUjYwMF9VVENfREZM VF8wMiwKKwlSNjAwX1VUQ19ERkxUXzAzLAorCVI2MDBfVVRDX0RGTFRfMDQsCisJUjYwMF9VVENf REZMVF8wNSwKKwlSNjAwX1VUQ19ERkxUXzA2LAorCVI2MDBfVVRDX0RGTFRfMDcsCisJUjYwMF9V VENfREZMVF8wOCwKKwlSNjAwX1VUQ19ERkxUXzA5LAorCVI2MDBfVVRDX0RGTFRfMTAsCisJUjYw MF9VVENfREZMVF8xMSwKKwlSNjAwX1VUQ19ERkxUXzEyLAorCVI2MDBfVVRDX0RGTFRfMTMsCisJ UjYwMF9VVENfREZMVF8xNCwKK307CisKK2NvbnN0IHUzMiByNjAwX2R0Y1tSNjAwX1BNX05VTUJF Ul9PRl9UQ10gPQoreworCVI2MDBfRFRDX0RGTFRfMDAsCisJUjYwMF9EVENfREZMVF8wMSwKKwlS NjAwX0RUQ19ERkxUXzAyLAorCVI2MDBfRFRDX0RGTFRfMDMsCisJUjYwMF9EVENfREZMVF8wNCwK KwlSNjAwX0RUQ19ERkxUXzA1LAorCVI2MDBfRFRDX0RGTFRfMDYsCisJUjYwMF9EVENfREZMVF8w NywKKwlSNjAwX0RUQ19ERkxUXzA4LAorCVI2MDBfRFRDX0RGTFRfMDksCisJUjYwMF9EVENfREZM VF8xMCwKKwlSNjAwX0RUQ19ERkxUXzExLAorCVI2MDBfRFRDX0RGTFRfMTIsCisJUjYwMF9EVENf REZMVF8xMywKKwlSNjAwX0RUQ19ERkxUXzE0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBz aV9jYWNfY29uZmlnX3JlZyBjYWNfd2VpZ2h0c190YWhpdGlbXSA9Cit7CisJeyAweDAsIDB4MDAw MGZmZmYsIDAsIDB4YywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDAsIDB4ZmZm ZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxLCAweDAw MDBmZmZmLCAwLCAweDEwMSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEsIDB4 ZmZmZjAwMDAsIDE2LCAweGMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgyLCAw eDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgzLCAw eDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgzLCAw eGZmZmYwMDAwLCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NCwg MHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NCwg MHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDUs IDB4MDAwMGZmZmYsIDAsIDB4OGZjLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 NSwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDYsIDB4MDAwMGZmZmYsIDAsIDB4OTUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHg2LCAweGZmZmYwMDAwLCAxNiwgMHgzNGUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgxOGYsIDB4MDAwMGZmZmYsIDAsIDB4MWExLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4NywgMHgwMDAwZmZmZiwgMCwgMHhkYSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweDcsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHg4LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHg4LCAweGZmZmYwMDAwLCAxNiwgMHg0NiwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweDksIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweGEsIDB4MDAwMGZmZmYsIDAsIDB4MjA4LCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4YiwgMHgwMDAwZmZmZiwgMCwgMHhlNywgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweGIsIDB4ZmZmZjAwMDAsIDE2LCAweDk0OCwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweGMsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweGQsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweGQsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHhlLCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHhmLCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHhmLCAweGZmZmYwMDAwLCAxNiwgMHgwLCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4MTAsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDEwLCAweGZmZmYwMDAwLCAxNiwgMHgwLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEsIDB4MDAwMGZmZmYsIDAsIDB4MTY3LCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMiwgMHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTMsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEzLCAweGZmZmYwMDAwLCAxNiwgMHgzNSwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE0LCAweDAwMDBmZmZmLCAwLCAweDAs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNSwgMHgwMDAwZmZmZiwgMCwgMHgw LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTUsIDB4ZmZmZjAwMDAsIDE2LCAw eDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg0ZSwgMHgwMDAwZmZmZiwgMCwg MHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTYsIDB4MDAwMGZmZmYsIDAs IDB4MzEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNiwgMHhmZmZmMDAwMCwg MTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE3LCAweDAwMDBmZmZm LCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxOCwgMHgwMDAwZmZm ZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTgsIDB4ZmZmZjAw MDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxOSwgMHgwMDAw ZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTksIDB4ZmZm ZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxYSwgMHgw MDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWEsIDB4 ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxYiwg MHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWIs IDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgx YywgMHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 MWMsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHgxZCwgMHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4MWQsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgxZSwgMHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MWUsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgxZiwgMHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4MWYsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHgyMCwgMHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4NmQsIDB4MDAwMGZmZmYsIDAsIDB4MThlLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4RkZGRkZGRkYgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaV9j YWNfY29uZmlnX3JlZyBsY2FjX3RhaGl0aVtdID0KK3sKKwl7IDB4MTQzLCAweDAwMDFmZmZlLCAx LCAweDMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNDMsIDB4MDAwMDAwMDEs IDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE0NiwgMHgwMDAxZmZm ZSwgMSwgMHgzLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTQ2LCAweDAwMDAw MDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNDksIDB4MDAw MWZmZmUsIDEsIDB4MywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE0OSwgMHgw MDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTRjLCAw eDAwMDFmZmZlLCAxLCAweDMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNGMs IDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDk4 LCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg5 OCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 OWIsIDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDliLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHg5ZSwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4OWUsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDEwMSwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MTAxLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgxMDQsIDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweDEwNCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4MTA3LCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHgxMDcsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDEwYSwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4MTBhLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHgxMGQsIDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDEwZCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OGMsIDB4MDAwMWZmZmUsIDEsIDB4OCwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDhjLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg4ZiwgMHgwMDAxZmZmZSwgMSwgMHg4LCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OGYsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDkyLCAweDAwMDFmZmZlLCAxLCAweDgsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg5MiwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OTUsIDB4MDAwMWZmZmUsIDEsIDB4OCwgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDk1LCAweDAwMDAwMDAxLCAwLCAweDEsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNGYsIDB4MDAwMWZmZmUsIDEsIDB4OCwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE0ZiwgMHgwMDAwMDAwMSwgMCwgMHgx LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTUyLCAweDAwMDFmZmZlLCAxLCAw eDgsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNTIsIDB4MDAwMDAwMDEsIDAs IDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE1NSwgMHgwMDAxZmZmZSwg MSwgMHg4LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTU1LCAweDAwMDAwMDAx LCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNTgsIDB4MDAwMWZm ZmUsIDEsIDB4OCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE1OCwgMHgwMDAw MDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEwLCAweDAw MDFmZmZlLCAxLCAweDgsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMTAsIDB4 MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDExMywg MHgwMDAxZmZmZSwgMSwgMHg4LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEz LCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgx MTYsIDB4MDAwMWZmZmUsIDEsIDB4OCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDExNiwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4MTE5LCAweDAwMDFmZmZlLCAxLCAweDgsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgxMTksIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDExYywgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4MTFjLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHgxMWYsIDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweDExZiwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4MTIyLCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxMjIsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDEyNSwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4MTI1LCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHgxMjgsIDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEyOCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTJiLCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMmIsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE1YiwgMHgwMDAxZmZmZSwgMSwgMHg0LCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTViLCAweDAwMDAwMDAxLCAwLCAweDEs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNWUsIDB4MDAwMWZmZmUsIDEsIDB4 NCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE1ZSwgMHgwMDAwMDAwMSwgMCwg MHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTYxLCAweDAwMDFmZmZlLCAx LCAweDQsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNjEsIDB4MDAwMDAwMDEs IDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2NCwgMHgwMDAxZmZm ZSwgMSwgMHg0LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTY0LCAweDAwMDAw MDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNjcsIDB4MDAw MWZmZmUsIDEsIDB4NCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2NywgMHgw MDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTZhLCAw eDAwMDFmZmZlLCAxLCAweDQsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNmEs IDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2 ZCwgMHgwMDAxZmZmZSwgMSwgMHg2LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 MTZkLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHgxNzAsIDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDE3MCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MTczLCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgxNzMsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweDE3NiwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4MTc2LCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHgxNzksIDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDE3OSwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4MTdjLCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHgxN2MsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDE3ZiwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTdmLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhGRkZGRkZGRiB9CisKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3Qgc2lfY2FjX2NvbmZpZ19yZWcgY2FjX292ZXJyaWRlX3RhaGl0aVtdID0KK3sKKwl7 IDB4RkZGRkZGRkYgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaV9wb3dlcnR1bmVfZGF0 YSBwb3dlcnR1bmVfZGF0YV90YWhpdGkgPQoreworCSgoMSA8PCAxNikgfCAyNzAyNyksCisJNiwK KwkwLAorCTQsCisJOTUsCisJeworCQkwVUwsCisJCTBVTCwKKwkJNDUyMTU1MFVMLAorCQkzMDk2 MzE1MjlVTCwKKwkJLTEyNzA4NTBMLAorCQk0NTEzNzEwTCwKKwkJNDAKKwl9LAorCTU5NTAwMDAw MFVMLAorCTEyLAorCXsKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwK KwkJMAorCX0sCisJdHJ1ZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaV9kdGVfZGF0YSBk dGVfZGF0YV90YWhpdGkgPQoreworCXsgMTE1OTQwOSwgMCwgMCwgMCwgMCB9LAorCXsgNzc3LCAw LCAwLCAwLCAwIH0sCisJMiwKKwk1NDAwMCwKKwkxMjcwMDAsCisJMjUsCisJMiwKKwkxMCwKKwkx MywKKwl7IDI3LCAzMSwgMzUsIDM5LCA0MywgNDcsIDU0LCA2MSwgNjcsIDc0LCA4MSwgODgsIDk1 LCAwLCAwLCAwIH0sCisJeyAyNDA4ODg3NTksIDIyMTA1Nzg2MCwgMjM1MzcwNTk3LCAxNjIyODc1 MzEsIDE1ODUxMDI5OSwgMTMxNDIzMDI3LCAxMTY2NzMxODAsIDEwMzA2NzUxNSwgODc5NDE5Mzcs IDc2MjA5MDQ4LCA2ODIwOTE3NSwgNjQwOTAwNDgsIDU4MzAxODkwLCAwLCAwLCAwIH0sCisJeyAx MjAyNCwgMTExODksIDExNDUxLCA4NDExLCA3OTM5LCA2NjY2LCA1NjgxLCA0OTA1LCA0MjQxLCAz NzIwLCAzMzU0LCAzMTIyLCAyODkwLCAwLCAwLCAwIH0sCisJODUsCisJZmFsc2UKK307CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgc2lfZHRlX2RhdGEgZHRlX2RhdGFfdGFoaXRpX2xlID0KK3sKKwl7 IDB4MUU4NDgwLCAweDdBMTIwMCwgMHgyMTYwRUMwLCAweDM5Mzg3MDAsIDAgfSwKKwl7IDB4N0Qs IDB4N0QsIDB4NEU0LCAweEIwMCwgMCB9LAorCTB4NSwKKwkweEFGQzgsCisJMHg2NCwKKwkweDMy LAorCTEsCisJMCwKKwkweDEwLAorCXsgMHg3OCwgMHg3QywgMHg4MiwgMHg4OCwgMHg4RSwgMHg5 NCwgMHg5QSwgMHhBMCwgMHhBNiwgMHhBQywgMHhCMCwgMHhCNCwgMHhCOCwgMHhCQywgMHhDMCwg MHhDNCB9LAorCXsgMHgzOTM4NzAwLCAweDM5Mzg3MDAsIDB4MzkzODcwMCwgMHgzOTM4NzAwLCAw eDM5Mzg3MDAsIDB4MzkzODcwMCwgMHgzOTM4NzAwLCAweDM5Mzg3MDAsIDB4MzkzODcwMCwgMHgz OTM4NzAwLCAweDM5Mzg3MDAsIDB4MzkzODcwMCwgMHgzOTM4NzAwLCAweDM5Mzg3MDAsIDB4Mzkz ODcwMCwgMHgzOTM4NzAwIH0sCisJeyAweDJBRjgsIDB4MkFGOCwgMHgyOUJCLCAweDI3RjksIDB4 MjYzNywgMHgyNDc1LCAweDIyQjMsIDB4MjBGMSwgMHgxRjJGLCAweDFENkQsIDB4MTczNCwgMHgx NDE0LCAweDEwRjQsIDB4REQ0LCAweEFCNCwgMHg3OTQgfSwKKwk4NSwKKwl0cnVlCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IHNpX2R0ZV9kYXRhIGR0ZV9kYXRhX3RhaGl0aV9wcm8gPQorewor CXsgMHgxRTg0ODAsIDB4M0QwOTAwLCAweDk4OTY4MCwgMHgyNjI1QTAwLCAweDAgfSwKKwl7IDB4 MCwgMHgwLCAweDAsIDB4MCwgMHgwIH0sCisJNSwKKwk0NTAwMCwKKwkxMDAsCisJMHhBLAorCTEs CisJMCwKKwkweDEwLAorCXsgMHg5NiwgMHhCNCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhG RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9 LAorCXsgMHg4OTU0NDAsIDB4M0QwOTAwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAw eDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5Njgw LCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAgfSwKKwl7 IDB4N0QwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAs IDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwIH0sCisJOTAsCisJdHJ1ZQorfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCBzaV9kdGVfZGF0YSBkdGVfZGF0YV9uZXdfemVhbGFuZCA9Cit7CisJeyAweDFF ODQ4MCwgMHgzRDA5MDAsIDB4OTg5NjgwLCAweDI2MjVBMDAsIDAgfSwKKwl7IDB4MjlCLCAweDNF OSwgMHg1MzcsIDB4N0QyLCAwIH0sCisJMHg1LAorCTB4QUZDOCwKKwkweDY5LAorCTB4MzIsCisJ MSwKKwkwLAorCTB4MTAsCisJeyAweDgyLCAweEEwLCAweEI0LCAweEZFLCAweEZFLCAweEZFLCAw eEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZF IH0sCisJeyAweDg5NTQ0MCwgMHgzRDA5MDAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAs IDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2 ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCB9LAor CXsgMHhEQUMsIDB4MTM4OCwgMHg2ODUsIDB4Njg1LCAweDY4NSwgMHg2ODUsIDB4Njg1LCAweDY4 NSwgMHg2ODUsIDB4Njg1LCAweDY4NSwgMHg2ODUsIDB4Njg1LCAweDY4NSwgMHg2ODUsIDB4Njg1 IH0sCisJODUsCisJdHJ1ZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaV9kdGVfZGF0YSBk dGVfZGF0YV9hcnViYV9wcm8gPQoreworCXsgMHgxRTg0ODAsIDB4M0QwOTAwLCAweDk4OTY4MCwg MHgyNjI1QTAwLCAweDAgfSwKKwl7IDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwIH0sCisJNSwKKwk0 NTAwMCwKKwkxMDAsCisJMHhBLAorCTEsCisJMCwKKwkweDEwLAorCXsgMHg5NiwgMHhCNCwgMHhG RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwg MHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9LAorCXsgMHg4OTU0NDAsIDB4M0QwOTAwLCAweDk4OTY4 MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4 OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAw eDk4OTY4MCwgMHg5ODk2ODAgfSwKKwl7IDB4MTAwMCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAs IDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCB9LAorCTkw LAorCXRydWUKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2lfZHRlX2RhdGEgZHRlX2RhdGFf bWFsdGEgPQoreworCXsgMHgxRTg0ODAsIDB4M0QwOTAwLCAweDk4OTY4MCwgMHgyNjI1QTAwLCAw eDAgfSwKKwl7IDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwIH0sCisJNSwKKwk0NTAwMCwKKwkxMDAs CisJMHhBLAorCTEsCisJMCwKKwkweDEwLAorCXsgMHg5NiwgMHhCNCwgMHhGRiwgMHhGRiwgMHhG RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwg MHhGRiwgMHhGRiB9LAorCXsgMHg4OTU0NDAsIDB4M0QwOTAwLCAweDk4OTY4MCwgMHg5ODk2ODAs IDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2 ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5 ODk2ODAgfSwKKwl7IDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAs IDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCB9LAorCTkwLAorCXRydWUKK307CisK K3N0cnVjdCBzaV9jYWNfY29uZmlnX3JlZyBjYWNfd2VpZ2h0c19waXRjYWlybltdID0KK3sKKwl7 IDB4MCwgMHgwMDAwZmZmZiwgMCwgMHg4YSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDAsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgxLCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgxLCAweGZmZmYwMDAwLCAxNiwgMHgyNGQsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgyLCAweDAwMDBmZmZmLCAwLCAweDE5LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4MywgMHgwMDAwZmZmZiwgMCwgMHgxMTgsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHgzLCAweGZmZmYwMDAwLCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4NCwgMHgwMDAwZmZmZiwgMCwgMHg3NiwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweDQsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHg1LCAweDAwMDBmZmZmLCAwLCAweGMxMSwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDUsIDB4ZmZmZjAwMDAsIDE2LCAweDdmMywgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDYsIDB4MDAwMGZmZmYsIDAsIDB4NDAzLCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4NiwgMHhmZmZmMDAwMCwgMTYsIDB4MzY3LCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MThmLCAweDAwMDBmZmZmLCAwLCAweDRjOSwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDcsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDcsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg4LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg4LCAweGZmZmYwMDAwLCAxNiwgMHg0NWQsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg5LCAweDAwMDBmZmZmLCAwLCAweDM2ZCwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGEsIDB4MDAwMGZmZmYsIDAsIDB4NTM0 LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4YiwgMHgwMDAwZmZmZiwgMCwgMHg1 ZGEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhiLCAweGZmZmYwMDAwLCAxNiwg MHg4ODAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhjLCAweDAwMDBmZmZmLCAw LCAweDIwMSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGQsIDB4MDAwMGZmZmYs IDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGQsIDB4ZmZmZjAwMDAs IDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhlLCAweDAwMDBmZmZm LCAwLCAweDlmLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4ZiwgMHgwMDAwZmZm ZiwgMCwgMHgxZiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGYsIDB4ZmZmZjAw MDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMCwgMHgwMDAw ZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTAsIDB4ZmZm ZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMSwgMHgw MDAwZmZmZiwgMCwgMHg1ZGUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMSwg MHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEy LCAweDAwMDBmZmZmLCAwLCAweDdiLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 MTMsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDEzLCAweGZmZmYwMDAwLCAxNiwgMHgxMywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDE0LCAweDAwMDBmZmZmLCAwLCAweGY5LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MTUsIDB4MDAwMGZmZmYsIDAsIDB4NjYsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgxNSwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweDRlLCAweDAwMDBmZmZmLCAwLCAweDEzLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4MTYsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweDE2LCAweGZmZmYwMDAwLCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4MTcsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDE4LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxOCwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDE5LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHgxOSwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDFhLCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHgxYSwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFiLCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxYiwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFjLCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxYywgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFkLCAweDAwMDBmZmZmLCAwLCAweDAsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZCwgMHhmZmZmMDAwMCwgMTYsIDB4MCwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFlLCAweDAwMDBmZmZmLCAwLCAweDAs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZSwgMHhmZmZmMDAwMCwgMTYsIDB4 MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFmLCAweDAwMDBmZmZmLCAwLCAw eDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZiwgMHhmZmZmMDAwMCwgMTYs IDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDIwLCAweDAwMDBmZmZmLCAw LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg2ZCwgMHgwMDAwZmZmZiwg MCwgMHgxODYsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhGRkZGRkZGRiB9Cit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNpX2NhY19jb25maWdfcmVnIGxjYWNfcGl0Y2Fpcm5b XSA9Cit7CisJeyAweDk4LCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHg5OCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4MTA0LCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxMDQsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDExMCwgMHgwMDAxZmZmZSwgMSwgMHg1LCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEwLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHgxNGYsIDB4MDAwMWZmZmUsIDEsIDB4NSwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE0ZiwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OGMsIDB4MDAwMWZmZmUsIDEsIDB4NSwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDhjLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNDMsIDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE0MywgMHgwMDAwMDAwMSwgMCwgMHgxLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OWIsIDB4MDAwMWZmZmUsIDEsIDB4Miwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDliLCAweDAwMDAwMDAxLCAwLCAweDEs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMDcsIDB4MDAwMWZmZmUsIDEsIDB4 MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEwNywgMHgwMDAwMDAwMSwgMCwg MHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEzLCAweDAwMDFmZmZlLCAx LCAweDUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMTMsIDB4MDAwMDAwMDEs IDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE1MiwgMHgwMDAxZmZm ZSwgMSwgMHg1LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTUyLCAweDAwMDAw MDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg4ZiwgMHgwMDAx ZmZmZSwgMSwgMHg1LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OGYsIDB4MDAw MDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE0NiwgMHgw MDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTQ2LCAw eDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg5ZSwg MHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OWUs IDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEw YSwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 MTBhLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHgxMTYsIDB4MDAwMWZmZmUsIDEsIDB4NSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDExNiwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MTU1LCAweDAwMDFmZmZlLCAxLCAweDUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgxNTUsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweDkyLCAweDAwMDFmZmZlLCAxLCAweDUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHg5MiwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4MTQ5LCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHgxNDksIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDEwMSwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4MTAxLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHgxMGQsIDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDEwZCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTE5LCAweDAwMDFmZmZlLCAxLCAweDUsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMTksIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE1OCwgMHgwMDAxZmZmZSwgMSwgMHg1LCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTU4LCAweDAwMDAwMDAxLCAwLCAweDEsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg5NSwgMHgwMDAxZmZmZSwgMSwgMHg1LCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OTUsIDB4MDAwMDAwMDEsIDAsIDB4MSwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE0YywgMHgwMDAxZmZmZSwgMSwgMHgy LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTRjLCAweDAwMDAwMDAxLCAwLCAw eDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMWMsIDB4MDAwMWZmZmUsIDEs IDB4MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDExYywgMHgwMDAwMDAwMSwg MCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTFmLCAweDAwMDFmZmZl LCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMWYsIDB4MDAwMDAw MDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEyMiwgMHgwMDAx ZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTIyLCAweDAw MDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMjUsIDB4 MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEyNSwg MHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTI4 LCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgx MjgsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDEyYiwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4MTJiLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgxNjQsIDB4MDAwMWZmZmUsIDEsIDB4NCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDE2NCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4MTY3LCAweDAwMDFmZmZlLCAxLCAweDQsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHgxNjcsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweDE2YSwgMHgwMDAxZmZmZSwgMSwgMHg0LCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4MTZhLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxNWUsIDB4MDAwMWZmZmUsIDEsIDB4NCwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDE1ZSwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4MTYxLCAweDAwMDFmZmZlLCAxLCAweDQsIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHgxNjEsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE1YiwgMHgwMDAxZmZmZSwgMSwgMHg0LCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTViLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNmQsIDB4MDAwMWZmZmUsIDEsIDB4NCwgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2ZCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTcwLCAweDAwMDFmZmZlLCAxLCAweDIs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNzAsIDB4MDAwMDAwMDEsIDAsIDB4 MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE3MywgMHgwMDAxZmZmZSwgMSwg MHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTczLCAweDAwMDAwMDAxLCAw LCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNzYsIDB4MDAwMWZmZmUs IDEsIDB4MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE3NiwgMHgwMDAwMDAw MSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTc5LCAweDAwMDFm ZmZlLCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNzksIDB4MDAw MDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE3YywgMHgw MDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTdjLCAw eDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxN2Ys IDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE3 ZiwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 RkZGRkZGRkYgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaV9jYWNfY29uZmlnX3JlZyBj YWNfb3ZlcnJpZGVfcGl0Y2Fpcm5bXSA9Cit7CisgICAgeyAweEZGRkZGRkZGIH0KK307CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgc2lfcG93ZXJ0dW5lX2RhdGEgcG93ZXJ0dW5lX2RhdGFfcGl0Y2Fp cm4gPQoreworCSgoMSA8PCAxNikgfCAyNzAyNyksCisJNSwKKwkwLAorCTYsCisJMTAwLAorCXsK KwkJNTE2MDAwMDBVTCwKKwkJMTgwMDAwMFVMLAorCQk3MTk0Mzk1VUwsCisJCTMwOTYzMTUyOVVM LAorCQktMTI3MDg1MEwsCisJCTQ1MTM3MTBMLAorCQkxMDAKKwl9LAorCTExNzgzMDQ5OFVMLAor CTEyLAorCXsKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMAor CX0sCisJdHJ1ZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaV9kdGVfZGF0YSBkdGVfZGF0 YV9waXRjYWlybiA9Cit7CisJeyAwLCAwLCAwLCAwLCAwIH0sCisJeyAwLCAwLCAwLCAwLCAwIH0s CisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwl7IDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKKwl7IDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKKwl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKKwkwLAorCWZhbHNlCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IHNpX2R0ZV9kYXRhIGR0ZV9kYXRhX2N1cmFjYW9feHQgPQoreworCXsgMHgxRTg0 ODAsIDB4M0QwOTAwLCAweDk4OTY4MCwgMHgyNjI1QTAwLCAweDAgfSwKKwl7IDB4MCwgMHgwLCAw eDAsIDB4MCwgMHgwIH0sCisJNSwKKwk0NTAwMCwKKwkxMDAsCisJMHhBLAorCTEsCisJMCwKKwkw eDEwLAorCXsgMHg5NiwgMHhCNCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwg MHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9LAorCXsgMHg4 OTU0NDAsIDB4M0QwOTAwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwg MHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4 MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAgfSwKKwl7IDB4MUQxNywg MHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4 MCwgMHgwLCAweDAsIDB4MCB9LAorCTkwLAorCXRydWUKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgc2lfZHRlX2RhdGEgZHRlX2RhdGFfY3VyYWNhb19wcm8gPQoreworCXsgMHgxRTg0ODAsIDB4 M0QwOTAwLCAweDk4OTY4MCwgMHgyNjI1QTAwLCAweDAgfSwKKwl7IDB4MCwgMHgwLCAweDAsIDB4 MCwgMHgwIH0sCisJNSwKKwk0NTAwMCwKKwkxMDAsCisJMHhBLAorCTEsCisJMCwKKwkweDEwLAor CXsgMHg5NiwgMHhCNCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwg MHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9LAorCXsgMHg4OTU0NDAs IDB4M0QwOTAwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2 ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5 ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAgfSwKKwl7IDB4MUQxNywgMHgwLCAw eDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgw LCAweDAsIDB4MCB9LAorCTkwLAorCXRydWUKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2lf ZHRlX2RhdGEgZHRlX2RhdGFfbmVwdHVuZV94dCA9Cit7CisJeyAweDFFODQ4MCwgMHgzRDA5MDAs IDB4OTg5NjgwLCAweDI2MjVBMDAsIDB4MCB9LAorCXsgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAg fSwKKwk1LAorCTQ1MDAwLAorCTEwMCwKKwkweEEsCisJMSwKKwkwLAorCTB4MTAsCisJeyAweDk2 LCAweEI0LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAw eEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH0sCisJeyAweDg5NTQ0MCwgMHgzRDA5 MDAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5 ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwg MHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCB9LAorCXsgMHgzQTJGLCAweDAsIDB4MCwgMHgw LCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwg MHgwIH0sCisJOTAsCisJdHJ1ZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaV9jYWNfY29u ZmlnX3JlZyBjYWNfd2VpZ2h0c19jaGVsc2VhX3Byb1tdID0KK3sKKwl7IDB4MCwgMHgwMDAwZmZm ZiwgMCwgMHg4MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDAsIDB4ZmZmZjAw MDAsIDE2LCAweDRGLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MSwgMHgwMDAw ZmZmZiwgMCwgMHgxNTMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxLCAweGZm ZmYwMDAwLCAxNiwgMHg1MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDIsIDB4 MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDMsIDB4 MDAwMGZmZmYsIDAsIDB4MTM1LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4Mywg MHhmZmZmMDAwMCwgMTYsIDB4NEYsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg0 LCAweDAwMDBmZmZmLCAwLCAweDEzNSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDQsIDB4ZmZmZjAwMDAsIDE2LCAweEFDLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4NSwgMHgwMDAwZmZmZiwgMCwgMHgxMTgsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHg1LCAweGZmZmYwMDAwLCAxNiwgMHhCRSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDYsIDB4MDAwMGZmZmYsIDAsIDB4MTEwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4NiwgMHhmZmZmMDAwMCwgMTYsIDB4NENELCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4MThmLCAweDAwMDBmZmZmLCAwLCAweDMwLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4NywgMHgwMDAwZmZmZiwgMCwgMHgzNywgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDcsIDB4ZmZmZjAwMDAsIDE2LCAweDI3LCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4OCwgMHgwMDAwZmZmZiwgMCwgMHhDMywgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDgsIDB4ZmZmZjAwMDAsIDE2LCAweDM1LCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4OSwgMHgwMDAwZmZmZiwgMCwgMHgyOCwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweGEsIDB4MDAwMGZmZmYsIDAsIDB4MjZDLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4YiwgMHgwMDAwZmZmZiwgMCwgMHgzQjIsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhiLCAweGZmZmYwMDAwLCAxNiwgMHg5OUQsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhjLCAweDAwMDBmZmZmLCAwLCAweEEzRiwgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGQsIDB4MDAwMGZmZmYsIDAsIDB4QSwgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGQsIDB4ZmZmZjAwMDAsIDE2LCAweEEsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhlLCAweDAwMDBmZmZmLCAwLCAweDUsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhmLCAweDAwMDBmZmZmLCAwLCAweDMsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhmLCAweGZmZmYwMDAwLCAxNiwgMHgwLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTAsIDB4MDAwMGZmZmYsIDAsIDB4MSwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEwLCAweGZmZmYwMDAwLCAxNiwgMHgx LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEsIDB4MDAwMGZmZmYsIDAsIDB4 NSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDExLCAweGZmZmYwMDAwLCAxNiwg MHgxNSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEyLCAweDAwMDBmZmZmLCAw LCAweDM0LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTMsIDB4MDAwMGZmZmYs IDAsIDB4NCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEzLCAweGZmZmYwMDAw LCAxNiwgMHg0LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTQsIDB4MDAwMGZm ZmYsIDAsIDB4MkJELCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTUsIDB4MDAw MGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE1LCAweGZm ZmYwMDAwLCAxNiwgMHg2LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NGUsIDB4 MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2LCAw eDAwMDBmZmZmLCAwLCAweDMwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTYs IDB4ZmZmZjAwMDAsIDE2LCAweDdBLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 MTcsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDE4LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHgxOCwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDE5LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgxOSwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDFhLCAweDAwMDBmZmZmLCAwLCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MWEsIDB4ZmZmZjAwMDAsIDE2LCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MWIsIDB4MDAwMGZmZmYsIDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgxYiwgMHhmZmZmMDAwMCwgMTYsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgxYywgMHgwMDAwZmZmZiwgMCwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDFjLCAweGZmZmYwMDAwLCAxNiwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDFkLCAweDAwMDBmZmZmLCAwLCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4MWQsIDB4ZmZmZjAwMDAsIDE2LCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4MWUsIDB4MDAwMGZmZmYsIDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHgxZSwgMHhmZmZmMDAwMCwgMTYsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHgxZiwgMHgwMDAwZmZmZiwgMCwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDFmLCAweGZmZmYwMDAwLCAxNiwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDIwLCAweDAwMDBmZmZmLCAwLCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 NmQsIDB4MDAwMGZmZmYsIDAsIDB4MTAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4RkZGRkZGRkYgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaV9jYWNfY29uZmlnX3Jl ZyBjYWNfd2VpZ2h0c19jaGVsc2VhX3h0W10gPQoreworCXsgMHgwLCAweDAwMDBmZmZmLCAwLCAw eDgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MCwgMHhmZmZmMDAwMCwgMTYs IDB4NEYsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxLCAweDAwMDBmZmZmLCAw LCAweDE1MywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEsIDB4ZmZmZjAwMDAs IDE2LCAweDUyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MiwgMHgwMDAwZmZm ZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MywgMHgwMDAwZmZm ZiwgMCwgMHgxMzUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgzLCAweGZmZmYw MDAwLCAxNiwgMHg0RiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDQsIDB4MDAw MGZmZmYsIDAsIDB4MTM1LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NCwgMHhm ZmZmMDAwMCwgMTYsIDB4QUMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg1LCAw eDAwMDBmZmZmLCAwLCAweDExOCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDUs IDB4ZmZmZjAwMDAsIDE2LCAweEJFLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 NiwgMHgwMDAwZmZmZiwgMCwgMHgxMTAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHg2LCAweGZmZmYwMDAwLCAxNiwgMHg0Q0QsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgxOGYsIDB4MDAwMGZmZmYsIDAsIDB4MzAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHg3LCAweDAwMDBmZmZmLCAwLCAweDM3LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4NywgMHhmZmZmMDAwMCwgMTYsIDB4MjcsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHg4LCAweDAwMDBmZmZmLCAwLCAweEMzLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4OCwgMHhmZmZmMDAwMCwgMTYsIDB4MzUsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHg5LCAweDAwMDBmZmZmLCAwLCAweDI4LCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4YSwgMHgwMDAwZmZmZiwgMCwgMHgyNkMsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHhiLCAweDAwMDBmZmZmLCAwLCAweDNCMiwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweGIsIDB4ZmZmZjAwMDAsIDE2LCAweDk5RCwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweGMsIDB4MDAwMGZmZmYsIDAsIDB4QTNGLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4ZCwgMHgwMDAwZmZmZiwgMCwgMHhBLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4ZCwgMHhmZmZmMDAwMCwgMTYsIDB4QSwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGUsIDB4MDAwMGZmZmYsIDAsIDB4NSwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGYsIDB4MDAwMGZmZmYsIDAsIDB4MywgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGYsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMCwgMHgwMDAwZmZmZiwgMCwgMHgxLCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTAsIDB4ZmZmZjAwMDAsIDE2LCAweDEsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMSwgMHgwMDAwZmZmZiwgMCwgMHg1LCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEsIDB4ZmZmZjAwMDAsIDE2LCAweDE1LCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTIsIDB4MDAwMGZmZmYsIDAsIDB4MzQs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMywgMHgwMDAwZmZmZiwgMCwgMHg0 LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTMsIDB4ZmZmZjAwMDAsIDE2LCAw eDQsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNCwgMHgwMDAwZmZmZiwgMCwg MHgzMEEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNSwgMHgwMDAwZmZmZiwg MCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTUsIDB4ZmZmZjAwMDAs IDE2LCAweDYsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg0ZSwgMHgwMDAwZmZm ZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTYsIDB4MDAwMGZm ZmYsIDAsIDB4MzAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNiwgMHhmZmZm MDAwMCwgMTYsIDB4N0EsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNywgMHgw MDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTgsIDB4 MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE4LCAw eGZmZmYwMDAwLCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTks IDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE5 LCAweGZmZmYwMDAwLCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 MWEsIDB4MDAwMGZmZmYsIDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgx YSwgMHhmZmZmMDAwMCwgMTYsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgx YiwgMHgwMDAwZmZmZiwgMCwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFi LCAweGZmZmYwMDAwLCAxNiwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFj LCAweDAwMDBmZmZmLCAwLCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWMs IDB4ZmZmZjAwMDAsIDE2LCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWQs IDB4MDAwMGZmZmYsIDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZCwg MHhmZmZmMDAwMCwgMTYsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZSwg MHgwMDAwZmZmZiwgMCwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFlLCAw eGZmZmYwMDAwLCAxNiwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFmLCAw eDAwMDBmZmZmLCAwLCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWYsIDB4 ZmZmZjAwMDAsIDE2LCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MjAsIDB4 MDAwMGZmZmYsIDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg2ZCwgMHgw MDAwZmZmZiwgMCwgMHgxMDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhGRkZG RkZGRiB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNpX2NhY19jb25maWdfcmVnIGNhY193 ZWlnaHRzX2hlYXRocm93W10gPQoreworCXsgMHgwLCAweDAwMDBmZmZmLCAwLCAweDgyLCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MCwgMHhmZmZmMDAwMCwgMTYsIDB4NEYsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxLCAweDAwMDBmZmZmLCAwLCAweDE1Mywg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEsIDB4ZmZmZjAwMDAsIDE2LCAweDUy LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MiwgMHgwMDAwZmZmZiwgMCwgMHgw LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MywgMHgwMDAwZmZmZiwgMCwgMHgx MzUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgzLCAweGZmZmYwMDAwLCAxNiwg MHg0RiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDQsIDB4MDAwMGZmZmYsIDAs IDB4MTM1LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NCwgMHhmZmZmMDAwMCwg MTYsIDB4QUMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg1LCAweDAwMDBmZmZm LCAwLCAweDExOCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDUsIDB4ZmZmZjAw MDAsIDE2LCAweEJFLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NiwgMHgwMDAw ZmZmZiwgMCwgMHgxMTAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg2LCAweGZm ZmYwMDAwLCAxNiwgMHg0Q0QsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxOGYs IDB4MDAwMGZmZmYsIDAsIDB4MzAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg3 LCAweDAwMDBmZmZmLCAwLCAweDM3LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 NywgMHhmZmZmMDAwMCwgMTYsIDB4MjcsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHg4LCAweDAwMDBmZmZmLCAwLCAweEMzLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4OCwgMHhmZmZmMDAwMCwgMTYsIDB4MzUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHg5LCAweDAwMDBmZmZmLCAwLCAweDI4LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4YSwgMHgwMDAwZmZmZiwgMCwgMHgyNkMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHhiLCAweDAwMDBmZmZmLCAwLCAweDNCMiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweGIsIDB4ZmZmZjAwMDAsIDE2LCAweDk5RCwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweGMsIDB4MDAwMGZmZmYsIDAsIDB4QTNGLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4ZCwgMHgwMDAwZmZmZiwgMCwgMHhBLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4ZCwgMHhmZmZmMDAwMCwgMTYsIDB4QSwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweGUsIDB4MDAwMGZmZmYsIDAsIDB4NSwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweGYsIDB4MDAwMGZmZmYsIDAsIDB4MywgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweGYsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxMCwgMHgwMDAwZmZmZiwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4MTAsIDB4ZmZmZjAwMDAsIDE2LCAweDEsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHgxMSwgMHgwMDAwZmZmZiwgMCwgMHg1LCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEsIDB4ZmZmZjAwMDAsIDE2LCAweDE1LCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTIsIDB4MDAwMGZmZmYsIDAsIDB4MzQsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMywgMHgwMDAwZmZmZiwgMCwgMHg0LCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTMsIDB4ZmZmZjAwMDAsIDE2LCAweDQsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNCwgMHgwMDAwZmZmZiwgMCwgMHgzNjIsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNSwgMHgwMDAwZmZmZiwgMCwgMHgwLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTUsIDB4ZmZmZjAwMDAsIDE2LCAweDYs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg0ZSwgMHgwMDAwZmZmZiwgMCwgMHgw LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTYsIDB4MDAwMGZmZmYsIDAsIDB4 MzAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNiwgMHhmZmZmMDAwMCwgMTYs IDB4N0EsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNywgMHgwMDAwZmZmZiwg MCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTgsIDB4MDAwMGZmZmYs IDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE4LCAweGZmZmYwMDAw LCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTksIDB4MDAwMGZm ZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE5LCAweGZmZmYw MDAwLCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWEsIDB4MDAw MGZmZmYsIDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxYSwgMHhmZmZm MDAwMCwgMTYsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxYiwgMHgwMDAw ZmZmZiwgMCwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFiLCAweGZmZmYw MDAwLCAxNiwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFjLCAweDAwMDBm ZmZmLCAwLCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWMsIDB4ZmZmZjAw MDAsIDE2LCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWQsIDB4MDAwMGZm ZmYsIDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZCwgMHhmZmZmMDAw MCwgMTYsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZSwgMHgwMDAwZmZm ZiwgMCwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFlLCAweGZmZmYwMDAw LCAxNiwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFmLCAweDAwMDBmZmZm LCAwLCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWYsIDB4ZmZmZjAwMDAs IDE2LCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MjAsIDB4MDAwMGZmZmYs IDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg2ZCwgMHgwMDAwZmZmZiwg MCwgMHgxMDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhGRkZGRkZGRiB9Cit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNpX2NhY19jb25maWdfcmVnIGNhY193ZWlnaHRzX2Nh cGVfdmVyZGVfcHJvW10gPQoreworCXsgMHgwLCAweDAwMDBmZmZmLCAwLCAweDgyLCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MCwgMHhmZmZmMDAwMCwgMTYsIDB4NEYsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxLCAweDAwMDBmZmZmLCAwLCAweDE1MywgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEsIDB4ZmZmZjAwMDAsIDE2LCAweDUyLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MiwgMHgwMDAwZmZmZiwgMCwgMHgwLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MywgMHgwMDAwZmZmZiwgMCwgMHgxMzUs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgzLCAweGZmZmYwMDAwLCAxNiwgMHg0 RiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDQsIDB4MDAwMGZmZmYsIDAsIDB4 MTM1LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NCwgMHhmZmZmMDAwMCwgMTYs IDB4QUMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg1LCAweDAwMDBmZmZmLCAw LCAweDExOCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDUsIDB4ZmZmZjAwMDAs IDE2LCAweEJFLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NiwgMHgwMDAwZmZm ZiwgMCwgMHgxMTAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg2LCAweGZmZmYw MDAwLCAxNiwgMHg0Q0QsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxOGYsIDB4 MDAwMGZmZmYsIDAsIDB4MzAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg3LCAw eDAwMDBmZmZmLCAwLCAweDM3LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4Nywg MHhmZmZmMDAwMCwgMTYsIDB4MjcsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg4 LCAweDAwMDBmZmZmLCAwLCAweEMzLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 OCwgMHhmZmZmMDAwMCwgMTYsIDB4MzUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHg5LCAweDAwMDBmZmZmLCAwLCAweDI4LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4YSwgMHgwMDAwZmZmZiwgMCwgMHgyNkMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHhiLCAweDAwMDBmZmZmLCAwLCAweDNCMiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweGIsIDB4ZmZmZjAwMDAsIDE2LCAweDk5RCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweGMsIDB4MDAwMGZmZmYsIDAsIDB4QTNGLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4ZCwgMHgwMDAwZmZmZiwgMCwgMHhBLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4ZCwgMHhmZmZmMDAwMCwgMTYsIDB4QSwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweGUsIDB4MDAwMGZmZmYsIDAsIDB4NSwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweGYsIDB4MDAwMGZmZmYsIDAsIDB4MywgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweGYsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHgxMCwgMHgwMDAwZmZmZiwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4MTAsIDB4ZmZmZjAwMDAsIDE2LCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxMSwgMHgwMDAwZmZmZiwgMCwgMHg1LCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4MTEsIDB4ZmZmZjAwMDAsIDE2LCAweDE1LCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4MTIsIDB4MDAwMGZmZmYsIDAsIDB4MzQsIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHgxMywgMHgwMDAwZmZmZiwgMCwgMHg0LCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTMsIDB4ZmZmZjAwMDAsIDE2LCAweDQsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNCwgMHgwMDAwZmZmZiwgMCwgMHgzMTUsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNSwgMHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTUsIDB4ZmZmZjAwMDAsIDE2LCAweDYsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg0ZSwgMHgwMDAwZmZmZiwgMCwgMHgwLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTYsIDB4MDAwMGZmZmYsIDAsIDB4MzAs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNiwgMHhmZmZmMDAwMCwgMTYsIDB4 N0EsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNywgMHgwMDAwZmZmZiwgMCwg MHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTgsIDB4MDAwMGZmZmYsIDAs IDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE4LCAweGZmZmYwMDAwLCAx NiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTksIDB4MDAwMGZmZmYs IDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE5LCAweGZmZmYwMDAw LCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWEsIDB4MDAwMGZm ZmYsIDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxYSwgMHhmZmZmMDAw MCwgMTYsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxYiwgMHgwMDAwZmZm ZiwgMCwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFiLCAweGZmZmYwMDAw LCAxNiwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFjLCAweDAwMDBmZmZm LCAwLCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWMsIDB4ZmZmZjAwMDAs IDE2LCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWQsIDB4MDAwMGZmZmYs IDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZCwgMHhmZmZmMDAwMCwg MTYsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZSwgMHgwMDAwZmZmZiwg MCwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFlLCAweGZmZmYwMDAwLCAx NiwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFmLCAweDAwMDBmZmZmLCAw LCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWYsIDB4ZmZmZjAwMDAsIDE2 LCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MjAsIDB4MDAwMGZmZmYsIDAs IDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg2ZCwgMHgwMDAwZmZmZiwgMCwg MHgxMDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhGRkZGRkZGRiB9Cit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IHNpX2NhY19jb25maWdfcmVnIGNhY193ZWlnaHRzX2NhcGVf dmVyZGVbXSA9Cit7CisJeyAweDAsIDB4MDAwMGZmZmYsIDAsIDB4ODIsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHgwLCAweGZmZmYwMDAwLCAxNiwgMHg0RiwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDEsIDB4MDAwMGZmZmYsIDAsIDB4MTUzLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MSwgMHhmZmZmMDAwMCwgMTYsIDB4NTIsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgyLCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgzLCAweDAwMDBmZmZmLCAwLCAweDEzNSwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDMsIDB4ZmZmZjAwMDAsIDE2LCAweDRGLCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NCwgMHgwMDAwZmZmZiwgMCwgMHgxMzUsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg0LCAweGZmZmYwMDAwLCAxNiwgMHhBQywg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDUsIDB4MDAwMGZmZmYsIDAsIDB4MTE4 LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NSwgMHhmZmZmMDAwMCwgMTYsIDB4 QkUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg2LCAweDAwMDBmZmZmLCAwLCAw eDExMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDYsIDB4ZmZmZjAwMDAsIDE2 LCAweDRDRCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE4ZiwgMHgwMDAwZmZm ZiwgMCwgMHgzMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDcsIDB4MDAwMGZm ZmYsIDAsIDB4MzcsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg3LCAweGZmZmYw MDAwLCAxNiwgMHgyNywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDgsIDB4MDAw MGZmZmYsIDAsIDB4QzMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg4LCAweGZm ZmYwMDAwLCAxNiwgMHgzNSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDksIDB4 MDAwMGZmZmYsIDAsIDB4MjgsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhhLCAw eDAwMDBmZmZmLCAwLCAweDI2QywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGIs IDB4MDAwMGZmZmYsIDAsIDB4M0IyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 YiwgMHhmZmZmMDAwMCwgMTYsIDB4OTlELCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4YywgMHgwMDAwZmZmZiwgMCwgMHhBM0YsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHhkLCAweDAwMDBmZmZmLCAwLCAweEEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHhkLCAweGZmZmYwMDAwLCAxNiwgMHhBLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4ZSwgMHgwMDAwZmZmZiwgMCwgMHg1LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4ZiwgMHgwMDAwZmZmZiwgMCwgMHgzLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4ZiwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDEwLCAweDAwMDBmZmZmLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgxMCwgMHhmZmZmMDAwMCwgMTYsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweDExLCAweDAwMDBmZmZmLCAwLCAweDUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHgxMSwgMHhmZmZmMDAwMCwgMTYsIDB4MTUsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHgxMiwgMHgwMDAwZmZmZiwgMCwgMHgzNCwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDEzLCAweDAwMDBmZmZmLCAwLCAweDQsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxMywgMHhmZmZmMDAwMCwgMTYsIDB4NCwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDE0LCAweDAwMDBmZmZmLCAwLCAweDNCQSwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDE1LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHgxNSwgMHhmZmZmMDAwMCwgMTYsIDB4NiwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDRlLCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNiwgMHgwMDAwZmZmZiwgMCwgMHgzMCwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2LCAweGZmZmYwMDAwLCAxNiwgMHg3QSwgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE3LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxOCwgMHgwMDAwZmZmZiwgMCwgMHgwLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTgsIDB4ZmZmZjAwMDAsIDE2LCAweDAs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxOSwgMHgwMDAwZmZmZiwgMCwgMHgw LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTksIDB4ZmZmZjAwMDAsIDE2LCAw eDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxYSwgMHgwMDAwZmZmZiwgMCwg MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFhLCAweGZmZmYwMDAwLCAxNiwg MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFiLCAweDAwMDBmZmZmLCAwLCAw LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWIsIDB4ZmZmZjAwMDAsIDE2LCAw LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWMsIDB4MDAwMGZmZmYsIDAsIDAs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxYywgMHhmZmZmMDAwMCwgMTYsIDAs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZCwgMHgwMDAwZmZmZiwgMCwgMCwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFkLCAweGZmZmYwMDAwLCAxNiwgMCwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFlLCAweDAwMDBmZmZmLCAwLCAwLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWUsIDB4ZmZmZjAwMDAsIDE2LCAwLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWYsIDB4MDAwMGZmZmYsIDAsIDAsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZiwgMHhmZmZmMDAwMCwgMTYsIDAsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgyMCwgMHgwMDAwZmZmZiwgMCwgMCwgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDZkLCAweDAwMDBmZmZmLCAwLCAweDEwMCwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweEZGRkZGRkZGIH0KK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgc2lfY2FjX2NvbmZpZ19yZWcgbGNhY19jYXBlX3ZlcmRlW10gPQorewor CXsgMHg5OCwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4OTgsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDEwNCwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4MTA0LCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHgxMTAsIDB4MDAwMWZmZmUsIDEsIDB4NSwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweDExMCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4MTRmLCAweDAwMDFmZmZlLCAxLCAweDUsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxNGYsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDhjLCAweDAwMDFmZmZlLCAxLCAweDUsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHg4YywgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4MTQzLCAweDAwMDFmZmZlLCAxLCAweDEsIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHgxNDMsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDliLCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg5YiwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTA3LCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMDcsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDExMywgMHgwMDAxZmZmZSwgMSwgMHg1LCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEzLCAweDAwMDAwMDAxLCAwLCAweDEs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNTIsIDB4MDAwMWZmZmUsIDEsIDB4 NSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE1MiwgMHgwMDAwMDAwMSwgMCwg MHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OGYsIDB4MDAwMWZmZmUsIDEs IDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDhmLCAweDAwMDAwMDAxLCAw LCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNDYsIDB4MDAwMWZmZmUs IDEsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE0NiwgMHgwMDAwMDAw MSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTFjLCAweDAwMDFm ZmZlLCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMWMsIDB4MDAw MDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDExZiwgMHgw MDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTFmLCAw eDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNjQs IDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2 NCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 MTY3LCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHgxNjcsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDE2YSwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MTZhLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgxNWUsIDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweDE1ZSwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4MTYxLCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHgxNjEsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDE1YiwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4MTViLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHgxNmQsIDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDE2ZCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTcwLCAweDAwMDFmZmZlLCAxLCAweDEsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNzAsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE3MywgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTczLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNzYsIDB4MDAwMWZmZmUsIDEsIDB4MSwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE3NiwgMHgwMDAwMDAwMSwgMCwgMHgx LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTc5LCAweDAwMDFmZmZlLCAxLCAw eDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNzksIDB4MDAwMDAwMDEsIDAs IDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE3YywgMHgwMDAxZmZmZSwg MSwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTdjLCAweDAwMDAwMDAx LCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxN2YsIDB4MDAwMWZm ZmUsIDEsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE3ZiwgMHgwMDAw MDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4RkZGRkZGRkYg fQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaV9jYWNfY29uZmlnX3JlZyBjYWNfb3ZlcnJp ZGVfY2FwZV92ZXJkZVtdID0KK3sKKyAgICB7IDB4RkZGRkZGRkYgfQorfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCBzaV9wb3dlcnR1bmVfZGF0YSBwb3dlcnR1bmVfZGF0YV9jYXBlX3ZlcmRlID0K K3sKKwkoKDEgPDwgMTYpIHwgMHg2OTkzKSwKKwk1LAorCTAsCisJNywKKwkxMDUsCisJeworCQkw VUwsCisJCTBVTCwKKwkJNzE5NDM5NVVMLAorCQkzMDk2MzE1MjlVTCwKKwkJLTEyNzA4NTBMLAor CQk0NTEzNzEwTCwKKwkJMTAwCisJfSwKKwkxMTc4MzA0OThVTCwKKwkxMiwKKwl7CisJCTAsCisJ CTAsCisJCTAsCisJCTAsCisJCTAsCisJCTAsCisJCTAsCisJCTAKKwl9LAorCXRydWUKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2lfZHRlX2RhdGEgZHRlX2RhdGFfY2FwZV92ZXJkZSA9Cit7 CisJeyAwLCAwLCAwLCAwLCAwIH0sCisJeyAwLCAwLCAwLCAwLCAwIH0sCisJMCwKKwkwLAorCTAs CisJMCwKKwkwLAorCTAsCisJMCwKKwl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAgfSwKKwl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAgfSwKKwl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAgfSwKKwkwLAorCWZhbHNlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNpX2R0 ZV9kYXRhIGR0ZV9kYXRhX3ZlbnVzX3h0eCA9Cit7CisJeyAweDFFODQ4MCwgMHgzRDA5MDAsIDB4 OTg5NjgwLCAweDI2MjVBMDAsIDB4MCB9LAorCXsgMHg3MUMsIDB4QUFCLCAweEUzOSwgMHgxMUM3 LCAweDAgfSwKKwk1LAorCTU1MDAwLAorCTB4NjksCisJMHhBLAorCTEsCisJMCwKKwkweDMsCisJ eyAweDk2LCAweEI0LCAweEZGLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4 MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAgfSwKKwl7IDB4ODk1NDQwLCAweDNEMDkwMCwgMHg5 ODk2ODAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwg MHgwLCAweDAsIDB4MCB9LAorCXsgMHhENkQ4LCAweDg4QjgsIDB4MTU1NSwgMHgwLCAweDAsIDB4 MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwIH0sCisJ OTAsCisJdHJ1ZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaV9kdGVfZGF0YSBkdGVfZGF0 YV92ZW51c194dCA9Cit7CisJeyAweDFFODQ4MCwgMHgzRDA5MDAsIDB4OTg5NjgwLCAweDI2MjVB MDAsIDB4MCB9LAorCXsgMHhCREEsIDB4MTFDNywgMHgxN0I0LCAweDFEQTEsIDB4MCB9LAorCTUs CisJNTUwMDAsCisJMHg2OSwKKwkweEEsCisJMSwKKwkwLAorCTB4MywKKwl7IDB4OTYsIDB4QjQs IDB4RkYsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwg MHgwLCAweDAsIDB4MCB9LAorCXsgMHg4OTU0NDAsIDB4M0QwOTAwLCAweDk4OTY4MCwgMHgwLCAw eDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgw IH0sCisJeyAweEFGQzgsIDB4ODhCOCwgMHgyMzhFLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwg MHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAgfSwKKwk5MCwKKwl0cnVlCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNpX2R0ZV9kYXRhIGR0ZV9kYXRhX3ZlbnVzX3BybyA9 Cit7CisJeyAgMHgxRTg0ODAsIDB4M0QwOTAwLCAweDk4OTY4MCwgMHgyNjI1QTAwLCAweDAgfSwK Kwl7IDB4MTFDNywgMHgxQUFCLCAweDIzOEUsIDB4MkM3MiwgMHgwIH0sCisJNSwKKwk1NTAwMCwK KwkweDY5LAorCTB4QSwKKwkxLAorCTAsCisJMHgzLAorCXsgMHg5NiwgMHhCNCwgMHhGRiwgMHgw LCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwg MHgwIH0sCisJeyAweDg5NTQ0MCwgMHgzRDA5MDAsIDB4OTg5NjgwLCAweDAsIDB4MCwgMHgwLCAw eDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAgfSwKKwl7IDB4 ODhCOCwgMHg4OEI4LCAweDM1NTUsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwg MHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCB9LAorCTkwLAorCXRydWUKK307CisKK3N0cnVj dCBzaV9jYWNfY29uZmlnX3JlZyBjYWNfd2VpZ2h0c19vbGFuZFtdID0KK3sKKwl7IDB4MCwgMHgw MDAwZmZmZiwgMCwgMHg4MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDAsIDB4 ZmZmZjAwMDAsIDE2LCAweDRGLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MSwg MHgwMDAwZmZmZiwgMCwgMHgxNTMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgx LCAweGZmZmYwMDAwLCAxNiwgMHg1MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDIsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDMsIDB4MDAwMGZmZmYsIDAsIDB4MTM1LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4MywgMHhmZmZmMDAwMCwgMTYsIDB4NEYsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHg0LCAweDAwMDBmZmZmLCAwLCAweDEzNSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDQsIDB4ZmZmZjAwMDAsIDE2LCAweEFDLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4NSwgMHgwMDAwZmZmZiwgMCwgMHgxMTgsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHg1LCAweGZmZmYwMDAwLCAxNiwgMHhCRSwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweDYsIDB4MDAwMGZmZmYsIDAsIDB4MTEwLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4NiwgMHhmZmZmMDAwMCwgMTYsIDB4NENELCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4MThmLCAweDAwMDBmZmZmLCAwLCAweDMwLCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4NywgMHgwMDAwZmZmZiwgMCwgMHgzNywgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDcsIDB4ZmZmZjAwMDAsIDE2LCAweDI3LCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OCwgMHgwMDAwZmZmZiwgMCwgMHhDMywgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDgsIDB4ZmZmZjAwMDAsIDE2LCAweDM1LCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OSwgMHgwMDAwZmZmZiwgMCwgMHgyOCwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGEsIDB4MDAwMGZmZmYsIDAsIDB4MjZDLCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4YiwgMHgwMDAwZmZmZiwgMCwgMHgzQjIsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhiLCAweGZmZmYwMDAwLCAxNiwgMHg5OUQs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhjLCAweDAwMDBmZmZmLCAwLCAweEEz RiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGQsIDB4MDAwMGZmZmYsIDAsIDB4 QSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGQsIDB4ZmZmZjAwMDAsIDE2LCAw eEEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhlLCAweDAwMDBmZmZmLCAwLCAw eDUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhmLCAweDAwMDBmZmZmLCAwLCAw eDMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhmLCAweGZmZmYwMDAwLCAxNiwg MHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTAsIDB4MDAwMGZmZmYsIDAs IDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEwLCAweGZmZmYwMDAwLCAx NiwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEsIDB4MDAwMGZmZmYs IDAsIDB4NSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDExLCAweGZmZmYwMDAw LCAxNiwgMHgxNSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEyLCAweDAwMDBm ZmZmLCAwLCAweDM0LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTMsIDB4MDAw MGZmZmYsIDAsIDB4NCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEzLCAweGZm ZmYwMDAwLCAxNiwgMHg0LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTQsIDB4 MDAwMGZmZmYsIDAsIDB4M0JBLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTUs IDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE1 LCAweGZmZmYwMDAwLCAxNiwgMHg2LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 NGUsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDE2LCAweDAwMDBmZmZmLCAwLCAweDMwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4MTYsIDB4ZmZmZjAwMDAsIDE2LCAweDdBLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MTcsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDE4LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgxOCwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweDE5LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHgxOSwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweDFhLCAweDAwMDBmZmZmLCAwLCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4MWEsIDB4ZmZmZjAwMDAsIDE2LCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4MWIsIDB4MDAwMGZmZmYsIDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHgxYiwgMHhmZmZmMDAwMCwgMTYsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHgxYywgMHgwMDAwZmZmZiwgMCwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweDFjLCAweGZmZmYwMDAwLCAxNiwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweDFkLCAweDAwMDBmZmZmLCAwLCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4MWQsIDB4ZmZmZjAwMDAsIDE2LCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4MWUsIDB4MDAwMGZmZmYsIDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgxZSwgMHhmZmZmMDAwMCwgMTYsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgxZiwgMHgwMDAwZmZmZiwgMCwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDFmLCAweGZmZmYwMDAwLCAxNiwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDIwLCAweDAwMDBmZmZmLCAwLCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4NmQsIDB4MDAwMGZmZmYsIDAsIDB4MTAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4RkZGRkZGRkYgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaV9jYWNfY29u ZmlnX3JlZyBjYWNfd2VpZ2h0c19tYXJzX3Byb1tdID0KK3sKKwl7IDB4MCwgMHgwMDAwZmZmZiwg MCwgMHg0MywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDAsIDB4ZmZmZjAwMDAs IDE2LCAweDI5LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MSwgMHgwMDAwZmZm ZiwgMCwgMHhBRiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEsIDB4ZmZmZjAw MDAsIDE2LCAweDJBLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MiwgMHgwMDAw ZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MywgMHgwMDAw ZmZmZiwgMCwgMHhBMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDMsIDB4ZmZm ZjAwMDAsIDE2LCAweDI5LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NCwgMHgw MDAwZmZmZiwgMCwgMHhBMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDQsIDB4 ZmZmZjAwMDAsIDE2LCAweDU5LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NSwg MHgwMDAwZmZmZiwgMCwgMHgxQTUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg1 LCAweGZmZmYwMDAwLCAxNiwgMHgxRDYsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHg2LCAweDAwMDBmZmZmLCAwLCAweDJBMywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDYsIDB4ZmZmZjAwMDAsIDE2LCAweDhGRCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDE4ZiwgMHgwMDAwZmZmZiwgMCwgMHg3NiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweDcsIDB4MDAwMGZmZmYsIDAsIDB4OEEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHg3LCAweGZmZmYwMDAwLCAxNiwgMHhBMywgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweDgsIDB4MDAwMGZmZmYsIDAsIDB4NzEsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHg4LCAweGZmZmYwMDAwLCAxNiwgMHgzNiwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDksIDB4MDAwMGZmZmYsIDAsIDB4QTYsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHhhLCAweDAwMDBmZmZmLCAwLCAweDgxLCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4YiwgMHgwMDAwZmZmZiwgMCwgMHgzRDIsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHhiLCAweGZmZmYwMDAwLCAxNiwgMHgyN0MsIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHhjLCAweDAwMDBmZmZmLCAwLCAweEE5NiwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGQsIDB4MDAwMGZmZmYsIDAsIDB4NSwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGQsIDB4ZmZmZjAwMDAsIDE2LCAweDUsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhlLCAweDAwMDBmZmZmLCAwLCAweEIsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhmLCAweDAwMDBmZmZmLCAwLCAweDMsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhmLCAweGZmZmYwMDAwLCAxNiwgMHgyLCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTAsIDB4MDAwMGZmZmYsIDAsIDB4MSwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEwLCAweGZmZmYwMDAwLCAxNiwgMHg0LCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEsIDB4MDAwMGZmZmYsIDAsIDB4MTUsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMSwgMHhmZmZmMDAwMCwgMTYsIDB4Nywg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEyLCAweDAwMDBmZmZmLCAwLCAweDM2 LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTMsIDB4MDAwMGZmZmYsIDAsIDB4 MTAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMywgMHhmZmZmMDAwMCwgMTYs IDB4MTAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNCwgMHgwMDAwZmZmZiwg MCwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTUsIDB4MDAwMGZmZmYs IDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE1LCAweGZmZmYwMDAw LCAxNiwgMHg2LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NGUsIDB4MDAwMGZm ZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2LCAweDAwMDBm ZmZmLCAwLCAweDMyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTYsIDB4ZmZm ZjAwMDAsIDE2LCAweDdFLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTcsIDB4 MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE4LCAw eDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxOCwg MHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE5 LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgx OSwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDFhLCAweDAwMDBmZmZmLCAwLCAweDI4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDFhLCAweGZmZmYwMDAwLCAxNiwgMHg3LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MWIsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDFiLCAweGZmZmYwMDAwLCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4MWMsIDB4MDAwMGZmZmYsIDAsIDB4M0MsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHgxYywgMHhmZmZmMDAwMCwgMTYsIDB4MjAzLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4MWQsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDFkLCAweGZmZmYwMDAwLCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4MWUsIDB4MDAwMGZmZmYsIDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxZSwgMHhmZmZmMDAwMCwgMTYsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxZiwgMHgwMDAwZmZmZiwgMCwgMCwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDFmLCAweGZmZmYwMDAwLCAxNiwgMCwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDIwLCAweDAwMDBmZmZmLCAwLCAwLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4NmQsIDB4MDAwMGZmZmYsIDAsIDB4QjQsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHhGRkZGRkZGRiB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNp X2NhY19jb25maWdfcmVnIGNhY193ZWlnaHRzX21hcnNfeHRbXSA9Cit7CisJeyAweDAsIDB4MDAw MGZmZmYsIDAsIDB4NDMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgwLCAweGZm ZmYwMDAwLCAxNiwgMHgyOSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEsIDB4 MDAwMGZmZmYsIDAsIDB4QUYsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxLCAw eGZmZmYwMDAwLCAxNiwgMHgyQSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDIs IDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDMs IDB4MDAwMGZmZmYsIDAsIDB4QTAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgz LCAweGZmZmYwMDAwLCAxNiwgMHgyOSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDQsIDB4MDAwMGZmZmYsIDAsIDB4QTAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHg0LCAweGZmZmYwMDAwLCAxNiwgMHg1OSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDUsIDB4MDAwMGZmZmYsIDAsIDB4MUE1LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4NSwgMHhmZmZmMDAwMCwgMTYsIDB4MUQ2LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4NiwgMHgwMDAwZmZmZiwgMCwgMHgyQTMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHg2LCAweGZmZmYwMDAwLCAxNiwgMHg4RkQsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHgxOGYsIDB4MDAwMGZmZmYsIDAsIDB4NzYsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHg3LCAweDAwMDBmZmZmLCAwLCAweDhBLCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4NywgMHhmZmZmMDAwMCwgMTYsIDB4QTMsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHg4LCAweDAwMDBmZmZmLCAwLCAweDcxLCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4OCwgMHhmZmZmMDAwMCwgMTYsIDB4MzYsIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHg5LCAweDAwMDBmZmZmLCAwLCAweEE2LCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4YSwgMHgwMDAwZmZmZiwgMCwgMHg4MSwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGIsIDB4MDAwMGZmZmYsIDAsIDB4M0QyLCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4YiwgMHhmZmZmMDAwMCwgMTYsIDB4MjdDLCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4YywgMHgwMDAwZmZmZiwgMCwgMHhBOTYsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhkLCAweDAwMDBmZmZmLCAwLCAweDUsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhkLCAweGZmZmYwMDAwLCAxNiwgMHg1LCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4ZSwgMHgwMDAwZmZmZiwgMCwgMHhCLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4ZiwgMHgwMDAwZmZmZiwgMCwgMHgzLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4ZiwgMHhmZmZmMDAwMCwgMTYsIDB4Miwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEwLCAweDAwMDBmZmZmLCAwLCAweDEs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMCwgMHhmZmZmMDAwMCwgMTYsIDB4 NCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDExLCAweDAwMDBmZmZmLCAwLCAw eDE1LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEsIDB4ZmZmZjAwMDAsIDE2 LCAweDcsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMiwgMHgwMDAwZmZmZiwg MCwgMHgzNiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEzLCAweDAwMDBmZmZm LCAwLCAweDEwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTMsIDB4ZmZmZjAw MDAsIDE2LCAweDEwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTQsIDB4MDAw MGZmZmYsIDAsIDB4NjAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNSwgMHgw MDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTUsIDB4 ZmZmZjAwMDAsIDE2LCAweDYsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg0ZSwg MHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTYs IDB4MDAwMGZmZmYsIDAsIDB4MzIsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgx NiwgMHhmZmZmMDAwMCwgMTYsIDB4N0UsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHgxNywgMHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4MTgsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDE4LCAweGZmZmYwMDAwLCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MTksIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDE5LCAweGZmZmYwMDAwLCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4MWEsIDB4MDAwMGZmZmYsIDAsIDB4MjgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4MWEsIDB4ZmZmZjAwMDAsIDE2LCAweDcsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHgxYiwgMHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4MWIsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxYywgMHgwMDAwZmZmZiwgMCwgMHgzQywgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDFjLCAweGZmZmYwMDAwLCAxNiwgMHgyMDMsIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHgxZCwgMHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWQsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZSwgMHgwMDAwZmZmZiwgMCwgMCwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFlLCAweGZmZmYwMDAwLCAxNiwgMCwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFmLCAweDAwMDBmZmZmLCAwLCAwLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWYsIDB4ZmZmZjAwMDAsIDE2LCAwLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MjAsIDB4MDAwMGZmZmYsIDAsIDAsIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHg2ZCwgMHgwMDAwZmZmZiwgMCwgMHhCNCwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweEZGRkZGRkZGIH0KK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgc2lfY2FjX2NvbmZpZ19yZWcgY2FjX3dlaWdodHNfb2xhbmRfcHJvW10gPQoreworCXsg MHgwLCAweDAwMDBmZmZmLCAwLCAweDQzLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4MCwgMHhmZmZmMDAwMCwgMTYsIDB4MjksIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgxLCAweDAwMDBmZmZmLCAwLCAweEFGLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MSwgMHhmZmZmMDAwMCwgMTYsIDB4MkEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgyLCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgzLCAweDAwMDBmZmZmLCAwLCAweEEwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4MywgMHhmZmZmMDAwMCwgMTYsIDB4MjksIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHg0LCAweDAwMDBmZmZmLCAwLCAweEEwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4NCwgMHhmZmZmMDAwMCwgMTYsIDB4NTksIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHg1LCAweDAwMDBmZmZmLCAwLCAweDFBNSwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDUsIDB4ZmZmZjAwMDAsIDE2LCAweDFENiwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDYsIDB4MDAwMGZmZmYsIDAsIDB4MkEzLCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4NiwgMHhmZmZmMDAwMCwgMTYsIDB4OEZELCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MThmLCAweDAwMDBmZmZmLCAwLCAweDc2LCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NywgMHgwMDAwZmZmZiwgMCwgMHg4QSwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDcsIDB4ZmZmZjAwMDAsIDE2LCAweEEzLCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OCwgMHgwMDAwZmZmZiwgMCwgMHg3MSwgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDgsIDB4ZmZmZjAwMDAsIDE2LCAweDM2LCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OSwgMHgwMDAwZmZmZiwgMCwgMHhBNiwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGEsIDB4MDAwMGZmZmYsIDAsIDB4ODEs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhiLCAweDAwMDBmZmZmLCAwLCAweDNE MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGIsIDB4ZmZmZjAwMDAsIDE2LCAw eDI3QywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGMsIDB4MDAwMGZmZmYsIDAs IDB4QTk2LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4ZCwgMHgwMDAwZmZmZiwg MCwgMHg1LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4ZCwgMHhmZmZmMDAwMCwg MTYsIDB4NSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGUsIDB4MDAwMGZmZmYs IDAsIDB4QiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGYsIDB4MDAwMGZmZmYs IDAsIDB4MywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGYsIDB4ZmZmZjAwMDAs IDE2LCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMCwgMHgwMDAwZmZm ZiwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTAsIDB4ZmZmZjAw MDAsIDE2LCAweDQsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMSwgMHgwMDAw ZmZmZiwgMCwgMHgxNSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDExLCAweGZm ZmYwMDAwLCAxNiwgMHg3LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTIsIDB4 MDAwMGZmZmYsIDAsIDB4MzYsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMywg MHgwMDAwZmZmZiwgMCwgMHgxMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEz LCAweGZmZmYwMDAwLCAxNiwgMHgxMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDE0LCAweDAwMDBmZmZmLCAwLCAweDkwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4MTUsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDE1LCAweGZmZmYwMDAwLCAxNiwgMHg2LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4NGUsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDE2LCAweDAwMDBmZmZmLCAwLCAweDMyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4MTYsIDB4ZmZmZjAwMDAsIDE2LCAweDdFLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4MTcsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweDE4LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHgxOCwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDE5LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxOSwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDFhLCAweDAwMDBmZmZmLCAwLCAweDI4MCwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDFhLCAweGZmZmYwMDAwLCAxNiwgMHg3LCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWIsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFiLCAweGZmZmYwMDAwLCAxNiwgMHgwLCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWMsIDB4MDAwMGZmZmYsIDAsIDB4M0MsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxYywgMHhmZmZmMDAwMCwgMTYsIDB4MjAzLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWQsIDB4MDAwMGZmZmYsIDAsIDB4MCwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFkLCAweGZmZmYwMDAwLCAxNiwgMHgw LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWUsIDB4MDAwMGZmZmYsIDAsIDAs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZSwgMHhmZmZmMDAwMCwgMTYsIDAs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZiwgMHgwMDAwZmZmZiwgMCwgMCwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFmLCAweGZmZmYwMDAwLCAxNiwgMCwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDIwLCAweDAwMDBmZmZmLCAwLCAwLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NmQsIDB4MDAwMGZmZmYsIDAsIDB4QjQs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhGRkZGRkZGRiB9Cit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IHNpX2NhY19jb25maWdfcmVnIGNhY193ZWlnaHRzX29sYW5kX3h0W10g PQoreworCXsgMHgwLCAweDAwMDBmZmZmLCAwLCAweDQzLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4MCwgMHhmZmZmMDAwMCwgMTYsIDB4MjksIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHgxLCAweDAwMDBmZmZmLCAwLCAweEFGLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4MSwgMHhmZmZmMDAwMCwgMTYsIDB4MkEsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgyLCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgzLCAweDAwMDBmZmZmLCAwLCAweEEwLCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4MywgMHhmZmZmMDAwMCwgMTYsIDB4MjksIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHg0LCAweDAwMDBmZmZmLCAwLCAweEEwLCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4NCwgMHhmZmZmMDAwMCwgMTYsIDB4NTksIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHg1LCAweDAwMDBmZmZmLCAwLCAweDFBNSwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDUsIDB4ZmZmZjAwMDAsIDE2LCAweDFENiwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDYsIDB4MDAwMGZmZmYsIDAsIDB4MkEzLCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NiwgMHhmZmZmMDAwMCwgMTYsIDB4OEZELCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MThmLCAweDAwMDBmZmZmLCAwLCAweDc2 LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NywgMHgwMDAwZmZmZiwgMCwgMHg4 QSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDcsIDB4ZmZmZjAwMDAsIDE2LCAw eEEzLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OCwgMHgwMDAwZmZmZiwgMCwg MHg3MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDgsIDB4ZmZmZjAwMDAsIDE2 LCAweDM2LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4OSwgMHgwMDAwZmZmZiwg MCwgMHhBNiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGEsIDB4MDAwMGZmZmYs IDAsIDB4ODEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhiLCAweDAwMDBmZmZm LCAwLCAweDNEMiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGIsIDB4ZmZmZjAw MDAsIDE2LCAweDI3QywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGMsIDB4MDAw MGZmZmYsIDAsIDB4QTk2LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4ZCwgMHgw MDAwZmZmZiwgMCwgMHg1LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4ZCwgMHhm ZmZmMDAwMCwgMTYsIDB4NSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGUsIDB4 MDAwMGZmZmYsIDAsIDB4QiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGYsIDB4 MDAwMGZmZmYsIDAsIDB4MywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGYsIDB4 ZmZmZjAwMDAsIDE2LCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMCwg MHgwMDAwZmZmZiwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTAs IDB4ZmZmZjAwMDAsIDE2LCAweDQsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgx MSwgMHgwMDAwZmZmZiwgMCwgMHgxNSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDExLCAweGZmZmYwMDAwLCAxNiwgMHg3LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7 IDB4MTIsIDB4MDAwMGZmZmYsIDAsIDB4MzYsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgxMywgMHgwMDAwZmZmZiwgMCwgMHgxMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDEzLCAweGZmZmYwMDAwLCAxNiwgMHgxMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweDE0LCAweDAwMDBmZmZmLCAwLCAweDEyMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweDE1LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHgxNSwgMHhmZmZmMDAwMCwgMTYsIDB4NiwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDRlLCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxNiwgMHgwMDAwZmZmZiwgMCwgMHgzMiwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDE2LCAweGZmZmYwMDAwLCAxNiwgMHg3RSwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDE3LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHgxOCwgMHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTgsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxOSwgMHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTksIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxYSwgMHgwMDAwZmZmZiwgMCwgMHgyODAsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxYSwgMHhmZmZmMDAwMCwgMTYsIDB4Nywg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFiLCAweDAwMDBmZmZmLCAwLCAweDAs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxYiwgMHhmZmZmMDAwMCwgMTYsIDB4 MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFjLCAweDAwMDBmZmZmLCAwLCAw eDNDLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWMsIDB4ZmZmZjAwMDAsIDE2 LCAweDIwMywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFkLCAweDAwMDBmZmZm LCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZCwgMHhmZmZmMDAw MCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDFlLCAweDAwMDBm ZmZmLCAwLCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWUsIDB4ZmZmZjAw MDAsIDE2LCAwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MWYsIDB4MDAwMGZm ZmYsIDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxZiwgMHhmZmZmMDAw MCwgMTYsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgyMCwgMHgwMDAwZmZm ZiwgMCwgMCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDZkLCAweDAwMDBmZmZm LCAwLCAweEI0LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4RkZGRkZGRkYgfQor fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaV9jYWNfY29uZmlnX3JlZyBsY2FjX29sYW5kW10g PQoreworCXsgMHg5OCwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4OTgsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweDEwNCwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4MTA0LCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxMTAsIDB4MDAwMWZmZmUsIDEsIDB4NiwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDExMCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4MTRmLCAweDAwMDFmZmZlLCAxLCAweDYsIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHgxNGYsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDhjLCAweDAwMDFmZmZlLCAxLCAweDYsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHg4YywgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTQzLCAweDAwMDFmZmZlLCAxLCAweDQsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNDMsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDExYywgMHgwMDAxZmZmZSwgMSwgMHgyLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTFjLCAweDAwMDAwMDAxLCAwLCAweDEs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMWYsIDB4MDAwMWZmZmUsIDEsIDB4 MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDExZiwgMHgwMDAwMDAwMSwgMCwg MHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTY0LCAweDAwMDFmZmZlLCAx LCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNjQsIDB4MDAwMDAwMDEs IDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2NywgMHgwMDAxZmZm ZSwgMSwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTY3LCAweDAwMDAw MDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNmEsIDB4MDAw MWZmZmUsIDEsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2YSwgMHgw MDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTVlLCAw eDAwMDFmZmZlLCAxLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNWUs IDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2 MSwgMHgwMDAxZmZmZSwgMSwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 MTYxLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHgxNWIsIDB4MDAwMWZmZmUsIDEsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDE1YiwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MTZkLCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgxNmQsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweDE3MCwgMHgwMDAxZmZmZSwgMSwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4MTcwLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHgxNzMsIDB4MDAwMWZmZmUsIDEsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDE3MywgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4MTc2LCAweDAwMDFmZmZlLCAxLCAweDEsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHgxNzYsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDE3OSwgMHgwMDAxZmZmZSwgMSwgMHgxLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTc5LCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxN2MsIDB4MDAwMWZmZmUsIDEsIDB4MSwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE3YywgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTdmLCAweDAwMDFmZmZlLCAxLCAweDEsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxN2YsIDB4MDAwMDAwMDEsIDAsIDB4MSwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweEZGRkZGRkZGIH0KK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgc2lfY2FjX2NvbmZpZ19yZWcgbGNhY19tYXJzX3Byb1tdID0KK3sKKwl7 IDB4OTgsIDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDk4LCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgxMDQsIDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDEwNCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4MTEwLCAweDAwMDFmZmZlLCAxLCAweDYsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHgxMTAsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NH SU5EIH0sCisJeyAweDE0ZiwgMHgwMDAxZmZmZSwgMSwgMHg2LCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4MTRmLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHg4YywgMHgwMDAxZmZmZSwgMSwgMHg2LCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4OGMsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDE0MywgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4MTQzLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NB Q0NPTkZJR19DR0lORCB9LAorCXsgMHgxMWMsIDB4MDAwMWZmZmUsIDEsIDB4MiwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDExYywgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5E U19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTFmLCAweDAwMDFmZmZlLCAxLCAweDIsIFNJU0xB TkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMWYsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lT TEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2NCwgMHgwMDAxZmZmZSwgMSwgMHgxLCBT SVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTY0LCAweDAwMDAwMDAxLCAwLCAweDEs IFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNjcsIDB4MDAwMWZmZmUsIDEsIDB4 MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2NywgMHgwMDAwMDAwMSwgMCwg MHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTZhLCAweDAwMDFmZmZlLCAx LCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNmEsIDB4MDAwMDAwMDEs IDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE1ZSwgMHgwMDAxZmZm ZSwgMSwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTVlLCAweDAwMDAw MDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNjEsIDB4MDAw MWZmZmUsIDEsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2MSwgMHgw MDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTViLCAw eDAwMDFmZmZlLCAxLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxNWIs IDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDE2 ZCwgMHgwMDAxZmZmZSwgMSwgMHgyLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 MTZkLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHgxNzAsIDB4MDAwMWZmZmUsIDEsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDE3MCwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MTczLCAweDAwMDFmZmZlLCAxLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHgxNzMsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5E IH0sCisJeyAweDE3NiwgMHgwMDAxZmZmZSwgMSwgMHgxLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4MTc2LCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHgxNzksIDB4MDAwMWZmZmUsIDEsIDB4MSwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDE3OSwgMHgwMDAwMDAwMSwgMCwgMHgxLCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4MTdjLCAweDAwMDFmZmZlLCAxLCAweDEsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHgxN2MsIDB4MDAwMDAwMDEsIDAsIDB4MSwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDE3ZiwgMHgwMDAxZmZmZSwgMSwgMHgxLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTdmLCAweDAwMDAwMDAxLCAwLCAweDEsIFNJU0xBTkRT X0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhGRkZGRkZGRiB9Cit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IHNpX2NhY19jb25maWdfcmVnIGNhY19vdmVycmlkZV9vbGFuZFtdID0KK3sKKwl7IDB4 RkZGRkZGRkYgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaV9wb3dlcnR1bmVfZGF0YSBw b3dlcnR1bmVfZGF0YV9vbGFuZCA9Cit7CisJKCgxIDw8IDE2KSB8IDB4Njk5MyksCisJNSwKKwkw LAorCTcsCisJMTA1LAorCXsKKwkJMFVMLAorCQkwVUwsCisJCTcxOTQzOTVVTCwKKwkJMzA5NjMx NTI5VUwsCisJCS0xMjcwODUwTCwKKwkJNDUxMzcxMEwsCisJCTEwMAorCX0sCisJMTE3ODMwNDk4 VUwsCisJMTIsCisJeworCQkwLAorCQkwLAorCQkwLAorCQkwLAorCQkwLAorCQkwLAorCQkwLAor CQkwCisJfSwKKwl0cnVlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNpX3Bvd2VydHVuZV9k YXRhIHBvd2VydHVuZV9kYXRhX21hcnNfcHJvID0KK3sKKwkoKDEgPDwgMTYpIHwgMHg2OTkzKSwK Kwk1LAorCTAsCisJNywKKwkxMDUsCisJeworCQkwVUwsCisJCTBVTCwKKwkJNzE5NDM5NVVMLAor CQkzMDk2MzE1MjlVTCwKKwkJLTEyNzA4NTBMLAorCQk0NTEzNzEwTCwKKwkJMTAwCisJfSwKKwkx MTc4MzA0OThVTCwKKwkxMiwKKwl7CisJCTAsCisJCTAsCisJCTAsCisJCTAsCisJCTAsCisJCTAs CisJCTAsCisJCTAKKwl9LAorCXRydWUKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2lfZHRl X2RhdGEgZHRlX2RhdGFfb2xhbmQgPQoreworCXsgMCwgMCwgMCwgMCwgMCB9LAorCXsgMCwgMCwg MCwgMCwgMCB9LAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJeyAwLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJeyAwLCAwLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJeyAwLCAwLCAwLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJMCwKKwlmYWxzZQorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBzaV9kdGVfZGF0YSBkdGVfZGF0YV9tYXJzX3BybyA9Cit7CisJ eyAweDFFODQ4MCwgMHgzRDA5MDAsIDB4OTg5NjgwLCAweDI2MjVBMDAsIDB4MCB9LAorCXsgMHgw LCAweDAsIDB4MCwgMHgwLCAweDAgfSwKKwk1LAorCTU1MDAwLAorCTEwNSwKKwkweEEsCisJMSwK KwkwLAorCTB4MTAsCisJeyAweDk2LCAweEI0LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZG LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH0s CisJeyAweDg5NTQ0MCwgMHgzRDA5MDAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4 OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAs IDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCB9LAorCXsg MHhGNjI3LCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAs IDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwIH0sCisJOTAsCisJdHJ1ZQorfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCBzaV9kdGVfZGF0YSBkdGVfZGF0YV9zdW5feHQgPQoreworCXsgMHgxRTg0ODAs IDB4M0QwOTAwLCAweDk4OTY4MCwgMHgyNjI1QTAwLCAweDAgfSwKKwl7IDB4MCwgMHgwLCAweDAs IDB4MCwgMHgwIH0sCisJNSwKKwk1NTAwMCwKKwkxMDUsCisJMHhBLAorCTEsCisJMCwKKwkweDEw LAorCXsgMHg5NiwgMHhCNCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhG RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9LAorCXsgMHg4OTU0 NDAsIDB4M0QwOTAwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5 ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwg MHg5ODk2ODAsIDB4OTg5NjgwLCAweDk4OTY4MCwgMHg5ODk2ODAgfSwKKwl7IDB4RDU1NSwgMHgw LCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwg MHgwLCAweDAsIDB4MCB9LAorCTkwLAorCXRydWUKK307CisKKworc3RhdGljIGNvbnN0IHN0cnVj dCBzaV9jYWNfY29uZmlnX3JlZyBjYWNfd2VpZ2h0c19oYWluYW5bXSA9Cit7CisJeyAweDAsIDB4 MDAwMGZmZmYsIDAsIDB4MmQ5LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MCwg MHhmZmZmMDAwMCwgMTYsIDB4MjJiLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4 MSwgMHgwMDAwZmZmZiwgMCwgMHgyMWMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsg MHgxLCAweGZmZmYwMDAwLCAxNiwgMHgxZGMsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgyLCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAor CXsgMHgzLCAweDAwMDBmZmZmLCAwLCAweDI0ZSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0s CisJeyAweDMsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHg0LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHg0LCAweGZmZmYwMDAwLCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4NSwgMHgwMDAwZmZmZiwgMCwgMHgzNWUsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lO RCB9LAorCXsgMHg1LCAweGZmZmYwMDAwLCAxNiwgMHgxMTQzLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4NiwgMHgwMDAwZmZmZiwgMCwgMHhlMTcsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHg2LCAweGZmZmYwMDAwLCAxNiwgMHg0NDEsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHgxOGYsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDcsIDB4MDAwMGZmZmYsIDAsIDB4MjhiLCBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4NywgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDgsIDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNf Q0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDgsIDB4ZmZmZjAwMDAsIDE2LCAweGFiZSwgU0lTTEFO RFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDksIDB4MDAwMGZmZmYsIDAsIDB4ZjExLCBTSVNM QU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4YSwgMHgwMDAwZmZmZiwgMCwgMHg5MDcsIFNJ U0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhiLCAweDAwMDBmZmZmLCAwLCAweGI0NSwg U0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGIsIDB4ZmZmZjAwMDAsIDE2LCAweGQx ZSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGMsIDB4MDAwMGZmZmYsIDAsIDB4 YTJjLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4ZCwgMHgwMDAwZmZmZiwgMCwg MHg2MiwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGQsIDB4ZmZmZjAwMDAsIDE2 LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhlLCAweDAwMDBmZmZmLCAw LCAweDFmMywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweGYsIDB4MDAwMGZmZmYs IDAsIDB4NDIsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHhmLCAweGZmZmYwMDAw LCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTAsIDB4MDAwMGZm ZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEwLCAweGZmZmYw MDAwLCAxNiwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEsIDB4MDAw MGZmZmYsIDAsIDB4NzA5LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTEsIDB4 ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9LAorCXsgMHgxMiwg MHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwKKwl7IDB4MTMs IDB4MDAwMGZmZmYsIDAsIDB4MCwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAweDEz LCAweGZmZmYwMDAwLCAxNiwgMHgzYSwgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJeyAw eDE0LCAweDAwMDBmZmZmLCAwLCAweDM1NywgU0lTTEFORFNfQ0FDQ09ORklHX0NHSU5EIH0sCisJ eyAweDE1LCAweDAwMDBmZmZmLCAwLCAweDlmLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQgfSwK Kwl7IDB4MTUsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19DR0lORCB9 LAorCXsgMHg0ZSwgMHgwMDAwZmZmZiwgMCwgMHgwLCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQg fSwKKwl7IDB4MTYsIDB4MDAwMGZmZmYsIDAsIDB4MzE0LCBTSVNMQU5EU19DQUNDT05GSUdfQ0dJ TkQgfSwKKwl7IDB4MTYsIDB4ZmZmZjAwMDAsIDE2LCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJR19D R0lORCB9LAorCXsgMHgxNywgMHgwMDAwZmZmZiwgMCwgMHg2ZCwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDE4LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxOCwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDE5LCAweDAwMDBmZmZmLCAwLCAweDAsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHgxOSwgMHhmZmZmMDAwMCwgMTYsIDB4MCwgU0lTTEFORFNfQ0FD Q09ORklHX0NHSU5EIH0sCisJeyAweDFhLCAweDAwMDBmZmZmLCAwLCAwLCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4MWEsIDB4ZmZmZjAwMDAsIDE2LCAwLCBTSVNMQU5EU19DQUND T05GSUdfQ0dJTkQgfSwKKwl7IDB4MWIsIDB4MDAwMGZmZmYsIDAsIDAsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHgxYiwgMHhmZmZmMDAwMCwgMTYsIDAsIFNJU0xBTkRTX0NBQ0NP TkZJR19DR0lORCB9LAorCXsgMHgxYywgMHgwMDAwZmZmZiwgMCwgMCwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDFjLCAweGZmZmYwMDAwLCAxNiwgMCwgU0lTTEFORFNfQ0FDQ09O RklHX0NHSU5EIH0sCisJeyAweDFkLCAweDAwMDBmZmZmLCAwLCAwLCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4MWQsIDB4ZmZmZjAwMDAsIDE2LCAwLCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4MWUsIDB4MDAwMGZmZmYsIDAsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxZSwgMHhmZmZmMDAwMCwgMTYsIDAsIFNJU0xBTkRTX0NBQ0NPTkZJ R19DR0lORCB9LAorCXsgMHgxZiwgMHgwMDAwZmZmZiwgMCwgMCwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDFmLCAweGZmZmYwMDAwLCAxNiwgMCwgU0lTTEFORFNfQ0FDQ09ORklH X0NHSU5EIH0sCisJeyAweDIwLCAweDAwMDBmZmZmLCAwLCAwLCBTSVNMQU5EU19DQUNDT05GSUdf Q0dJTkQgfSwKKwl7IDB4NmQsIDB4MDAwMGZmZmYsIDAsIDB4MWI5LCBTSVNMQU5EU19DQUNDT05G SUdfQ0dJTkQgfSwKKwl7IDB4RkZGRkZGRkYgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBz aV9wb3dlcnR1bmVfZGF0YSBwb3dlcnR1bmVfZGF0YV9oYWluYW4gPQoreworCSgoMSA8PCAxNikg fCAweDY5OTMpLAorCTUsCisJMCwKKwk5LAorCTEwNSwKKwl7CisJCTBVTCwKKwkJMFVMLAorCQk3 MTk0Mzk1VUwsCisJCTMwOTYzMTUyOVVMLAorCQktMTI3MDg1MEwsCisJCTQ1MTM3MTBMLAorCQkx MDAKKwl9LAorCTExNzgzMDQ5OFVMLAorCTEyLAorCXsKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwK KwkJMCwKKwkJMCwKKwkJMCwKKwkJMAorCX0sCisJdHJ1ZQorfTsKKworc3RydWN0IHJ2N3h4X3Bv d2VyX2luZm8gKnJ2NzcwX2dldF9waShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CitzdHJ1 Y3QgZXZlcmdyZWVuX3Bvd2VyX2luZm8gKmV2ZXJncmVlbl9nZXRfcGkoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpOworc3RydWN0IG5pX3Bvd2VyX2luZm8gKm5pX2dldF9waShzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldik7CitzdHJ1Y3QgIHNpX3BzICpzaV9nZXRfcHMoc3RydWN0IGFtZGdw dV9wcyAqcnBzKTsKKworZXh0ZXJuIGludCBzaV9tY19sb2FkX21pY3JvY29kZShzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldik7CitleHRlcm4gdm9pZCB2Y2VfdjFfMF9lbmFibGVfbWdjZyhzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgYm9vbCBlbmFibGUpOworCitzdGF0aWMgaW50IHNpX3Bv cHVsYXRlX3ZvbHRhZ2VfdmFsdWUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJICAg ICBjb25zdCBzdHJ1Y3QgYXRvbV92b2x0YWdlX3RhYmxlICp0YWJsZSwKKwkJCQkgICAgIHUxNiB2 YWx1ZSwgU0lTTEFORFNfU01DX1ZPTFRBR0VfVkFMVUUgKnZvbHRhZ2UpOworc3RhdGljIGludCBz aV9nZXRfc3RkX3ZvbHRhZ2VfdmFsdWUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJ ICAgIFNJU0xBTkRTX1NNQ19WT0xUQUdFX1ZBTFVFICp2b2x0YWdlLAorCQkJCSAgICB1MTYgKnN0 ZF92b2x0YWdlKTsKK3N0YXRpYyBpbnQgc2lfd3JpdGVfc21jX3NvZnRfcmVnaXN0ZXIoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJICAgICAgdTE2IHJlZ19vZmZzZXQsIHUzMiB2YWx1 ZSk7CitzdGF0aWMgaW50IHNpX2NvbnZlcnRfcG93ZXJfbGV2ZWxfdG9fc21jKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LAorCQkJCQkgc3RydWN0IHJ2N3h4X3BsICpwbCwKKwkJCQkJIFNJU0xB TkRTX1NNQ19IV19QRVJGT1JNQU5DRV9MRVZFTCAqbGV2ZWwpOworc3RhdGljIGludCBzaV9jYWxj dWxhdGVfc2Nsa19wYXJhbXMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJICAgIHUz MiBlbmdpbmVfY2xvY2ssCisJCQkJICAgIFNJU0xBTkRTX1NNQ19TQ0xLX1ZBTFVFICpzY2xrKTsK Kworc3RhdGljIHZvaWQgc2lfdGhlcm1hbF9zdGFydF9zbWNfZmFuX2NvbnRyb2woc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYpOworc3RhdGljIHZvaWQgc2lfZmFuX2N0cmxfc2V0X2RlZmF1bHRf bW9kZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CitzdGF0aWMgdm9pZCBzaV9kcG1fc2V0 X2RwbV9mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CitzdGF0aWMgdm9pZCBzaV9k cG1fc2V0X2lycV9mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CisKK2V4dGVybiB1 MzIgc2lfcGNpZXBfcnJlZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdTMyIHJlZyk7CisK K3N0YXRpYyBzdHJ1Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfZ2V0X3BpKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2KQoreworICAgICAgICBzdHJ1Y3Qgc2lfcG93ZXJfaW5mbyAqcGkgPSBhZGV2LT5w bS5kcG0ucHJpdjsKKyAgICAgICAgcmV0dXJuIHBpOworfQorCitzdGF0aWMgdm9pZCBzaV9jYWxj dWxhdGVfbGVha2FnZV9mb3Jfdl9hbmRfdF9mb3JtdWxhKGNvbnN0IHN0cnVjdCBuaV9sZWFrYWdl X2NvZWZmaWVudHMgKmNvZWZmLAorCQkJCQkJICAgICB1MTYgdiwgczMyIHQsIHUzMiBpbGVha2Fn ZSwgdTMyICpsZWFrYWdlKQoreworCXM2NCBrdCwga3YsIGxlYWthZ2VfdywgaV9sZWFrYWdlLCB2 ZGRjOworCXM2NCB0ZW1wZXJhdHVyZSwgdF9zbG9wZSwgdF9pbnRlcmNlcHQsIGF2LCBidiwgdF9y ZWY7CisJczY0IHRtcDsKKworCWlfbGVha2FnZSA9IGRpdjY0X3M2NChkcm1faW50MmZpeHAoaWxl YWthZ2UpLCAxMDApOworCXZkZGMgPSBkaXY2NF9zNjQoZHJtX2ludDJmaXhwKHYpLCAxMDAwKTsK Kwl0ZW1wZXJhdHVyZSA9IGRpdjY0X3M2NChkcm1faW50MmZpeHAodCksIDEwMDApOworCisJdF9z bG9wZSA9IGRpdjY0X3M2NChkcm1faW50MmZpeHAoY29lZmYtPnRfc2xvcGUpLCAxMDAwMDAwMDAp OworCXRfaW50ZXJjZXB0ID0gZGl2NjRfczY0KGRybV9pbnQyZml4cChjb2VmZi0+dF9pbnRlcmNl cHQpLCAxMDAwMDAwMDApOworCWF2ID0gZGl2NjRfczY0KGRybV9pbnQyZml4cChjb2VmZi0+YXYp LCAxMDAwMDAwMDApOworCWJ2ID0gZGl2NjRfczY0KGRybV9pbnQyZml4cChjb2VmZi0+YnYpLCAx MDAwMDAwMDApOworCXRfcmVmID0gZHJtX2ludDJmaXhwKGNvZWZmLT50X3JlZik7CisKKwl0bXAg PSBkcm1fZml4cF9tdWwodF9zbG9wZSwgdmRkYykgKyB0X2ludGVyY2VwdDsKKwlrdCA9IGRybV9m aXhwX2V4cChkcm1fZml4cF9tdWwodG1wLCB0ZW1wZXJhdHVyZSkpOworCWt0ID0gZHJtX2ZpeHBf ZGl2KGt0LCBkcm1fZml4cF9leHAoZHJtX2ZpeHBfbXVsKHRtcCwgdF9yZWYpKSk7CisJa3YgPSBk cm1fZml4cF9tdWwoYXYsIGRybV9maXhwX2V4cChkcm1fZml4cF9tdWwoYnYsIHZkZGMpKSk7CisK KwlsZWFrYWdlX3cgPSBkcm1fZml4cF9tdWwoZHJtX2ZpeHBfbXVsKGRybV9maXhwX211bChpX2xl YWthZ2UsIGt0KSwga3YpLCB2ZGRjKTsKKworCSpsZWFrYWdlID0gZHJtX2ZpeHAyaW50KGxlYWth Z2VfdyAqIDEwMDApOworfQorCitzdGF0aWMgdm9pZCBzaV9jYWxjdWxhdGVfbGVha2FnZV9mb3Jf dl9hbmRfdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJICAgICBjb25zdCBzdHJ1 Y3QgbmlfbGVha2FnZV9jb2VmZmllbnRzICpjb2VmZiwKKwkJCQkJICAgICB1MTYgdiwKKwkJCQkJ ICAgICBzMzIgdCwKKwkJCQkJICAgICB1MzIgaV9sZWFrYWdlLAorCQkJCQkgICAgIHUzMiAqbGVh a2FnZSkKK3sKKwlzaV9jYWxjdWxhdGVfbGVha2FnZV9mb3Jfdl9hbmRfdF9mb3JtdWxhKGNvZWZm LCB2LCB0LCBpX2xlYWthZ2UsIGxlYWthZ2UpOworfQorCitzdGF0aWMgdm9pZCBzaV9jYWxjdWxh dGVfbGVha2FnZV9mb3Jfdl9mb3JtdWxhKGNvbnN0IHN0cnVjdCBuaV9sZWFrYWdlX2NvZWZmaWVu dHMgKmNvZWZmLAorCQkJCQkgICAgICAgY29uc3QgdTMyIGZpeGVkX2t0LCB1MTYgdiwKKwkJCQkJ ICAgICAgIHUzMiBpbGVha2FnZSwgdTMyICpsZWFrYWdlKQoreworCXM2NCBrdCwga3YsIGxlYWth Z2VfdywgaV9sZWFrYWdlLCB2ZGRjOworCisJaV9sZWFrYWdlID0gZGl2NjRfczY0KGRybV9pbnQy Zml4cChpbGVha2FnZSksIDEwMCk7CisJdmRkYyA9IGRpdjY0X3M2NChkcm1faW50MmZpeHAodiks IDEwMDApOworCisJa3QgPSBkaXY2NF9zNjQoZHJtX2ludDJmaXhwKGZpeGVkX2t0KSwgMTAwMDAw MDAwKTsKKwlrdiA9IGRybV9maXhwX211bChkaXY2NF9zNjQoZHJtX2ludDJmaXhwKGNvZWZmLT5h diksIDEwMDAwMDAwMCksCisJCQkgIGRybV9maXhwX2V4cChkcm1fZml4cF9tdWwoZGl2NjRfczY0 KGRybV9pbnQyZml4cChjb2VmZi0+YnYpLCAxMDAwMDAwMDApLCB2ZGRjKSkpOworCisJbGVha2Fn ZV93ID0gZHJtX2ZpeHBfbXVsKGRybV9maXhwX211bChkcm1fZml4cF9tdWwoaV9sZWFrYWdlLCBr dCksIGt2KSwgdmRkYyk7CisKKwkqbGVha2FnZSA9IGRybV9maXhwMmludChsZWFrYWdlX3cgKiAx MDAwKTsKK30KKworc3RhdGljIHZvaWQgc2lfY2FsY3VsYXRlX2xlYWthZ2VfZm9yX3Yoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuaV9sZWFrYWdl X2NvZWZmaWVudHMgKmNvZWZmLAorCQkJCSAgICAgICBjb25zdCB1MzIgZml4ZWRfa3QsCisJCQkJ ICAgICAgIHUxNiB2LAorCQkJCSAgICAgICB1MzIgaV9sZWFrYWdlLAorCQkJCSAgICAgICB1MzIg KmxlYWthZ2UpCit7CisJc2lfY2FsY3VsYXRlX2xlYWthZ2VfZm9yX3ZfZm9ybXVsYShjb2VmZiwg Zml4ZWRfa3QsIHYsIGlfbGVha2FnZSwgbGVha2FnZSk7Cit9CisKKworc3RhdGljIHZvaWQgc2lf dXBkYXRlX2R0ZV9mcm9tX3BsMihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkgICBz dHJ1Y3Qgc2lfZHRlX2RhdGEgKmR0ZV9kYXRhKQoreworCXUzMiBwX2xpbWl0MSA9IGFkZXYtPnBt LmRwbS50ZHBfbGltaXQ7CisJdTMyIHBfbGltaXQyID0gYWRldi0+cG0uZHBtLm5lYXJfdGRwX2xp bWl0OworCXUzMiBrID0gZHRlX2RhdGEtPms7CisJdTMyIHRfbWF4ID0gZHRlX2RhdGEtPm1heF90 OworCXUzMiB0X3NwbGl0WzVdID0geyAxMCwgMTUsIDIwLCAyNSwgMzAgfTsKKwl1MzIgdF8wID0g ZHRlX2RhdGEtPnQwOworCXUzMiBpOworCisJaWYgKHBfbGltaXQyICE9IDAgJiYgcF9saW1pdDIg PD0gcF9saW1pdDEpIHsKKwkJZHRlX2RhdGEtPnRkZXBfY291bnQgPSAzOworCisJCWZvciAoaSA9 IDA7IGkgPCBrOyBpKyspIHsKKwkJCWR0ZV9kYXRhLT5yW2ldID0KKwkJCQkodF9zcGxpdFtpXSAq ICh0X21heCAtIHRfMC8odTMyKTEwMDApICogKDEgPDwgMTQpKSAvCisJCQkJKHBfbGltaXQyICAq ICh1MzIpMTAwKTsKKwkJfQorCisJCWR0ZV9kYXRhLT50ZGVwX3JbMV0gPSBkdGVfZGF0YS0+cls0 XSAqIDI7CisKKwkJZm9yIChpID0gMjsgaSA8IFNNQ19TSVNMQU5EU19EVEVfTUFYX1RFTVBFUkFU VVJFX0RFUEVOREVOVF9BUlJBWV9TSVpFOyBpKyspIHsKKwkJCWR0ZV9kYXRhLT50ZGVwX3JbaV0g PSBkdGVfZGF0YS0+cls0XTsKKwkJfQorCX0gZWxzZSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBQ TDIhIERURSB3aWxsIG5vdCBiZSB1cGRhdGVkLlxuIik7CisJfQorfQorCitzdHJ1Y3QgcnY3eHhf cG93ZXJfaW5mbyAqcnY3NzBfZ2V0X3BpKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQorewor ICAgICAgICBzdHJ1Y3QgcnY3eHhfcG93ZXJfaW5mbyAqcGkgPSBhZGV2LT5wbS5kcG0ucHJpdjsK KworICAgICAgICByZXR1cm4gcGk7Cit9CisKK3N0cnVjdCBuaV9wb3dlcl9pbmZvICpuaV9nZXRf cGkoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisgICAgICAgIHN0cnVjdCBuaV9wb3dl cl9pbmZvICpwaSA9IGFkZXYtPnBtLmRwbS5wcml2OworCisgICAgICAgIHJldHVybiBwaTsKK30K Kworc3RydWN0ICBzaV9wcyAqc2lfZ2V0X3BzKHN0cnVjdCBhbWRncHVfcHMgKmFwcykKK3sKKyAg ICAgICAgc3RydWN0ICBzaV9wcyAqcHMgPSBhcHMtPnBzX3ByaXY7CisKKyAgICAgICAgcmV0dXJu IHBzOworfQorCitzdGF0aWMgdm9pZCBzaV9pbml0aWFsaXplX3Bvd2VydHVuZV9kZWZhdWx0cyhz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlzdHJ1Y3QgbmlfcG93ZXJfaW5mbyAqbmlf cGkgPSBuaV9nZXRfcGkoYWRldik7CisJc3RydWN0IHNpX3Bvd2VyX2luZm8gKnNpX3BpID0gc2lf Z2V0X3BpKGFkZXYpOworCWJvb2wgdXBkYXRlX2R0ZV9mcm9tX3BsMiA9IGZhbHNlOworCisJaWYg KGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1RBSElUSSkgeworCQlzaV9waS0+Y2FjX3dlaWdodHMg PSBjYWNfd2VpZ2h0c190YWhpdGk7CisJCXNpX3BpLT5sY2FjX2NvbmZpZyA9IGxjYWNfdGFoaXRp OworCQlzaV9waS0+Y2FjX292ZXJyaWRlID0gY2FjX292ZXJyaWRlX3RhaGl0aTsKKwkJc2lfcGkt PnBvd2VydHVuZV9kYXRhID0gJnBvd2VydHVuZV9kYXRhX3RhaGl0aTsKKwkJc2lfcGktPmR0ZV9k YXRhID0gZHRlX2RhdGFfdGFoaXRpOworCisJCXN3aXRjaCAoYWRldi0+cGRldi0+ZGV2aWNlKSB7 CisJCWNhc2UgMHg2Nzk4OgorCQkJc2lfcGktPmR0ZV9kYXRhLmVuYWJsZV9kdGVfYnlfZGVmYXVs dCA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSAweDY3OTk6CisJCQlzaV9waS0+ZHRlX2RhdGEg PSBkdGVfZGF0YV9uZXdfemVhbGFuZDsKKwkJCWJyZWFrOworCQljYXNlIDB4Njc5MDoKKwkJY2Fz ZSAweDY3OTE6CisJCWNhc2UgMHg2NzkyOgorCQljYXNlIDB4Njc5RToKKwkJCXNpX3BpLT5kdGVf ZGF0YSA9IGR0ZV9kYXRhX2FydWJhX3BybzsKKwkJCXVwZGF0ZV9kdGVfZnJvbV9wbDIgPSB0cnVl OworCQkJYnJlYWs7CisJCWNhc2UgMHg2NzlCOgorCQkJc2lfcGktPmR0ZV9kYXRhID0gZHRlX2Rh dGFfbWFsdGE7CisJCQl1cGRhdGVfZHRlX2Zyb21fcGwyID0gdHJ1ZTsKKwkJCWJyZWFrOworCQlj YXNlIDB4Njc5QToKKwkJCXNpX3BpLT5kdGVfZGF0YSA9IGR0ZV9kYXRhX3RhaGl0aV9wcm87CisJ CQl1cGRhdGVfZHRlX2Zyb21fcGwyID0gdHJ1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ aWYgKHNpX3BpLT5kdGVfZGF0YS5lbmFibGVfZHRlX2J5X2RlZmF1bHQgPT0gdHJ1ZSkKKwkJCQlE Uk1fRVJST1IoIkRURSBpcyBub3QgZW5hYmxlZCFcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9IGVs c2UgaWYgKGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1BJVENBSVJOKSB7CisJCXN3aXRjaCAoYWRl di0+cGRldi0+ZGV2aWNlKSB7CisJCWNhc2UgMHg2ODEwOgorCQljYXNlIDB4NjgxODoKKwkJCXNp X3BpLT5jYWNfd2VpZ2h0cyA9IGNhY193ZWlnaHRzX3BpdGNhaXJuOworCQkJc2lfcGktPmxjYWNf Y29uZmlnID0gbGNhY19waXRjYWlybjsKKwkJCXNpX3BpLT5jYWNfb3ZlcnJpZGUgPSBjYWNfb3Zl cnJpZGVfcGl0Y2Fpcm47CisJCQlzaV9waS0+cG93ZXJ0dW5lX2RhdGEgPSAmcG93ZXJ0dW5lX2Rh dGFfcGl0Y2Fpcm47CisJCQlzaV9waS0+ZHRlX2RhdGEgPSBkdGVfZGF0YV9jdXJhY2FvX3h0Owor CQkJdXBkYXRlX2R0ZV9mcm9tX3BsMiA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSAweDY4MTk6 CisJCWNhc2UgMHg2ODExOgorCQkJc2lfcGktPmNhY193ZWlnaHRzID0gY2FjX3dlaWdodHNfcGl0 Y2Fpcm47CisJCQlzaV9waS0+bGNhY19jb25maWcgPSBsY2FjX3BpdGNhaXJuOworCQkJc2lfcGkt PmNhY19vdmVycmlkZSA9IGNhY19vdmVycmlkZV9waXRjYWlybjsKKwkJCXNpX3BpLT5wb3dlcnR1 bmVfZGF0YSA9ICZwb3dlcnR1bmVfZGF0YV9waXRjYWlybjsKKwkJCXNpX3BpLT5kdGVfZGF0YSA9 IGR0ZV9kYXRhX2N1cmFjYW9fcHJvOworCQkJdXBkYXRlX2R0ZV9mcm9tX3BsMiA9IHRydWU7CisJ CQlicmVhazsKKwkJY2FzZSAweDY4MDA6CisJCWNhc2UgMHg2ODA2OgorCQkJc2lfcGktPmNhY193 ZWlnaHRzID0gY2FjX3dlaWdodHNfcGl0Y2Fpcm47CisJCQlzaV9waS0+bGNhY19jb25maWcgPSBs Y2FjX3BpdGNhaXJuOworCQkJc2lfcGktPmNhY19vdmVycmlkZSA9IGNhY19vdmVycmlkZV9waXRj YWlybjsKKwkJCXNpX3BpLT5wb3dlcnR1bmVfZGF0YSA9ICZwb3dlcnR1bmVfZGF0YV9waXRjYWly bjsKKwkJCXNpX3BpLT5kdGVfZGF0YSA9IGR0ZV9kYXRhX25lcHR1bmVfeHQ7CisJCQl1cGRhdGVf ZHRlX2Zyb21fcGwyID0gdHJ1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc2lfcGktPmNh Y193ZWlnaHRzID0gY2FjX3dlaWdodHNfcGl0Y2Fpcm47CisJCQlzaV9waS0+bGNhY19jb25maWcg PSBsY2FjX3BpdGNhaXJuOworCQkJc2lfcGktPmNhY19vdmVycmlkZSA9IGNhY19vdmVycmlkZV9w aXRjYWlybjsKKwkJCXNpX3BpLT5wb3dlcnR1bmVfZGF0YSA9ICZwb3dlcnR1bmVfZGF0YV9waXRj YWlybjsKKwkJCXNpX3BpLT5kdGVfZGF0YSA9IGR0ZV9kYXRhX3BpdGNhaXJuOworCQkJYnJlYWs7 CisJCX0KKwl9IGVsc2UgaWYgKGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1ZFUkRFKSB7CisJCXNp X3BpLT5sY2FjX2NvbmZpZyA9IGxjYWNfY2FwZV92ZXJkZTsKKwkJc2lfcGktPmNhY19vdmVycmlk ZSA9IGNhY19vdmVycmlkZV9jYXBlX3ZlcmRlOworCQlzaV9waS0+cG93ZXJ0dW5lX2RhdGEgPSAm cG93ZXJ0dW5lX2RhdGFfY2FwZV92ZXJkZTsKKworCQlzd2l0Y2ggKGFkZXYtPnBkZXYtPmRldmlj ZSkgeworCQljYXNlIDB4NjgzQjoKKwkJY2FzZSAweDY4M0Y6CisJCWNhc2UgMHg2ODI5OgorCQlj YXNlIDB4NjgzNToKKwkJCXNpX3BpLT5jYWNfd2VpZ2h0cyA9IGNhY193ZWlnaHRzX2NhcGVfdmVy ZGVfcHJvOworCQkJc2lfcGktPmR0ZV9kYXRhID0gZHRlX2RhdGFfY2FwZV92ZXJkZTsKKwkJCWJy ZWFrOworCQljYXNlIDB4NjgyQzoKKwkJCXNpX3BpLT5jYWNfd2VpZ2h0cyA9IGNhY193ZWlnaHRz X2NhcGVfdmVyZGVfcHJvOworCQkJc2lfcGktPmR0ZV9kYXRhID0gZHRlX2RhdGFfc3VuX3h0Owor CQkJYnJlYWs7CisJCWNhc2UgMHg2ODI1OgorCQljYXNlIDB4NjgyNzoKKwkJCXNpX3BpLT5jYWNf d2VpZ2h0cyA9IGNhY193ZWlnaHRzX2hlYXRocm93OworCQkJc2lfcGktPmR0ZV9kYXRhID0gZHRl X2RhdGFfY2FwZV92ZXJkZTsKKwkJCWJyZWFrOworCQljYXNlIDB4NjgyNDoKKwkJY2FzZSAweDY4 MkQ6CisJCQlzaV9waS0+Y2FjX3dlaWdodHMgPSBjYWNfd2VpZ2h0c19jaGVsc2VhX3h0OworCQkJ c2lfcGktPmR0ZV9kYXRhID0gZHRlX2RhdGFfY2FwZV92ZXJkZTsKKwkJCWJyZWFrOworCQljYXNl IDB4NjgyRjoKKwkJCXNpX3BpLT5jYWNfd2VpZ2h0cyA9IGNhY193ZWlnaHRzX2NoZWxzZWFfcHJv OworCQkJc2lfcGktPmR0ZV9kYXRhID0gZHRlX2RhdGFfY2FwZV92ZXJkZTsKKwkJCWJyZWFrOwor CQljYXNlIDB4NjgyMDoKKwkJCXNpX3BpLT5jYWNfd2VpZ2h0cyA9IGNhY193ZWlnaHRzX2hlYXRo cm93OworCQkJc2lfcGktPmR0ZV9kYXRhID0gZHRlX2RhdGFfdmVudXNfeHR4OworCQkJYnJlYWs7 CisJCWNhc2UgMHg2ODIxOgorCQkJc2lfcGktPmNhY193ZWlnaHRzID0gY2FjX3dlaWdodHNfaGVh dGhyb3c7CisJCQlzaV9waS0+ZHRlX2RhdGEgPSBkdGVfZGF0YV92ZW51c194dDsKKwkJCWJyZWFr OworCQljYXNlIDB4NjgyMzoKKwkJY2FzZSAweDY4MkI6CisJCWNhc2UgMHg2ODIyOgorCQljYXNl IDB4NjgyQToKKwkJCXNpX3BpLT5jYWNfd2VpZ2h0cyA9IGNhY193ZWlnaHRzX2NoZWxzZWFfcHJv OworCQkJc2lfcGktPmR0ZV9kYXRhID0gZHRlX2RhdGFfdmVudXNfcHJvOworCQkJYnJlYWs7CisJ CWRlZmF1bHQ6CisJCQlzaV9waS0+Y2FjX3dlaWdodHMgPSBjYWNfd2VpZ2h0c19jYXBlX3ZlcmRl OworCQkJc2lfcGktPmR0ZV9kYXRhID0gZHRlX2RhdGFfY2FwZV92ZXJkZTsKKwkJCWJyZWFrOwor CQl9CisJfSBlbHNlIGlmIChhZGV2LT5hc2ljX3R5cGUgPT0gQ0hJUF9PTEFORCkgeworCQlzd2l0 Y2ggKGFkZXYtPnBkZXYtPmRldmljZSkgeworCQljYXNlIDB4NjYwMToKKwkJY2FzZSAweDY2MjE6 CisJCWNhc2UgMHg2NjAzOgorCQljYXNlIDB4NjYwNToKKwkJCXNpX3BpLT5jYWNfd2VpZ2h0cyA9 IGNhY193ZWlnaHRzX21hcnNfcHJvOworCQkJc2lfcGktPmxjYWNfY29uZmlnID0gbGNhY19tYXJz X3BybzsKKwkJCXNpX3BpLT5jYWNfb3ZlcnJpZGUgPSBjYWNfb3ZlcnJpZGVfb2xhbmQ7CisJCQlz aV9waS0+cG93ZXJ0dW5lX2RhdGEgPSAmcG93ZXJ0dW5lX2RhdGFfbWFyc19wcm87CisJCQlzaV9w aS0+ZHRlX2RhdGEgPSBkdGVfZGF0YV9tYXJzX3BybzsKKwkJCXVwZGF0ZV9kdGVfZnJvbV9wbDIg PSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgMHg2NjAwOgorCQljYXNlIDB4NjYwNjoKKwkJY2Fz ZSAweDY2MjA6CisJCWNhc2UgMHg2NjA0OgorCQkJc2lfcGktPmNhY193ZWlnaHRzID0gY2FjX3dl aWdodHNfbWFyc194dDsKKwkJCXNpX3BpLT5sY2FjX2NvbmZpZyA9IGxjYWNfbWFyc19wcm87CisJ CQlzaV9waS0+Y2FjX292ZXJyaWRlID0gY2FjX292ZXJyaWRlX29sYW5kOworCQkJc2lfcGktPnBv d2VydHVuZV9kYXRhID0gJnBvd2VydHVuZV9kYXRhX21hcnNfcHJvOworCQkJc2lfcGktPmR0ZV9k YXRhID0gZHRlX2RhdGFfbWFyc19wcm87CisJCQl1cGRhdGVfZHRlX2Zyb21fcGwyID0gdHJ1ZTsK KwkJCWJyZWFrOworCQljYXNlIDB4NjYxMToKKwkJY2FzZSAweDY2MTM6CisJCWNhc2UgMHg2NjA4 OgorCQkJc2lfcGktPmNhY193ZWlnaHRzID0gY2FjX3dlaWdodHNfb2xhbmRfcHJvOworCQkJc2lf cGktPmxjYWNfY29uZmlnID0gbGNhY19tYXJzX3BybzsKKwkJCXNpX3BpLT5jYWNfb3ZlcnJpZGUg PSBjYWNfb3ZlcnJpZGVfb2xhbmQ7CisJCQlzaV9waS0+cG93ZXJ0dW5lX2RhdGEgPSAmcG93ZXJ0 dW5lX2RhdGFfbWFyc19wcm87CisJCQlzaV9waS0+ZHRlX2RhdGEgPSBkdGVfZGF0YV9tYXJzX3By bzsKKwkJCXVwZGF0ZV9kdGVfZnJvbV9wbDIgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgMHg2 NjEwOgorCQkJc2lfcGktPmNhY193ZWlnaHRzID0gY2FjX3dlaWdodHNfb2xhbmRfeHQ7CisJCQlz aV9waS0+bGNhY19jb25maWcgPSBsY2FjX21hcnNfcHJvOworCQkJc2lfcGktPmNhY19vdmVycmlk ZSA9IGNhY19vdmVycmlkZV9vbGFuZDsKKwkJCXNpX3BpLT5wb3dlcnR1bmVfZGF0YSA9ICZwb3dl cnR1bmVfZGF0YV9tYXJzX3BybzsKKwkJCXNpX3BpLT5kdGVfZGF0YSA9IGR0ZV9kYXRhX21hcnNf cHJvOworCQkJdXBkYXRlX2R0ZV9mcm9tX3BsMiA9IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVs dDoKKwkJCXNpX3BpLT5jYWNfd2VpZ2h0cyA9IGNhY193ZWlnaHRzX29sYW5kOworCQkJc2lfcGkt PmxjYWNfY29uZmlnID0gbGNhY19vbGFuZDsKKwkJCXNpX3BpLT5jYWNfb3ZlcnJpZGUgPSBjYWNf b3ZlcnJpZGVfb2xhbmQ7CisJCQlzaV9waS0+cG93ZXJ0dW5lX2RhdGEgPSAmcG93ZXJ0dW5lX2Rh dGFfb2xhbmQ7CisJCQlzaV9waS0+ZHRlX2RhdGEgPSBkdGVfZGF0YV9vbGFuZDsKKwkJCWJyZWFr OworCQl9CisJfSBlbHNlIGlmIChhZGV2LT5hc2ljX3R5cGUgPT0gQ0hJUF9IQUlOQU4pIHsKKwkJ c2lfcGktPmNhY193ZWlnaHRzID0gY2FjX3dlaWdodHNfaGFpbmFuOworCQlzaV9waS0+bGNhY19j b25maWcgPSBsY2FjX29sYW5kOworCQlzaV9waS0+Y2FjX292ZXJyaWRlID0gY2FjX292ZXJyaWRl X29sYW5kOworCQlzaV9waS0+cG93ZXJ0dW5lX2RhdGEgPSAmcG93ZXJ0dW5lX2RhdGFfaGFpbmFu OworCQlzaV9waS0+ZHRlX2RhdGEgPSBkdGVfZGF0YV9zdW5feHQ7CisJCXVwZGF0ZV9kdGVfZnJv bV9wbDIgPSB0cnVlOworCX0gZWxzZSB7CisJCURSTV9FUlJPUigiVW5rbm93biBTSSBhc2ljIHJl dmlzaW9uLCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBQb3dlclR1bmUhXG4iKTsKKwkJcmV0dXJuOwor CX0KKworCW5pX3BpLT5lbmFibGVfcG93ZXJfY29udGFpbm1lbnQgPSBmYWxzZTsKKwluaV9waS0+ ZW5hYmxlX2NhYyA9IGZhbHNlOworCW5pX3BpLT5lbmFibGVfc3FfcmFtcGluZyA9IGZhbHNlOwor CXNpX3BpLT5lbmFibGVfZHRlID0gZmFsc2U7CisKKwlpZiAoc2lfcGktPnBvd2VydHVuZV9kYXRh LT5lbmFibGVfcG93ZXJ0dW5lX2J5X2RlZmF1bHQpIHsKKwkJbmlfcGktPmVuYWJsZV9wb3dlcl9j b250YWlubWVudD0gdHJ1ZTsKKwkJbmlfcGktPmVuYWJsZV9jYWMgPSB0cnVlOworCQlpZiAoc2lf cGktPmR0ZV9kYXRhLmVuYWJsZV9kdGVfYnlfZGVmYXVsdCkgeworCQkJc2lfcGktPmVuYWJsZV9k dGUgPSB0cnVlOworCQkJaWYgKHVwZGF0ZV9kdGVfZnJvbV9wbDIpCisJCQkJc2lfdXBkYXRlX2R0 ZV9mcm9tX3BsMihhZGV2LCAmc2lfcGktPmR0ZV9kYXRhKTsKKworCQl9CisJCW5pX3BpLT5lbmFi bGVfc3FfcmFtcGluZyA9IHRydWU7CisJfQorCisJbmlfcGktPmRyaXZlcl9jYWxjdWxhdGVfY2Fj X2xlYWthZ2UgPSB0cnVlOworCW5pX3BpLT5jYWNfY29uZmlndXJhdGlvbl9yZXF1aXJlZCA9IHRy dWU7CisKKwlpZiAobmlfcGktPmNhY19jb25maWd1cmF0aW9uX3JlcXVpcmVkKSB7CisJCW5pX3Bp LT5zdXBwb3J0X2NhY19sb25nX3Rlcm1fYXZlcmFnZSA9IHRydWU7CisJCXNpX3BpLT5keW5fcG93 ZXJ0dW5lX2RhdGEubDJfbHRhX3dpbmRvd19zaXplID0KKwkJCXNpX3BpLT5wb3dlcnR1bmVfZGF0 YS0+bDJfbHRhX3dpbmRvd19zaXplX2RlZmF1bHQ7CisJCXNpX3BpLT5keW5fcG93ZXJ0dW5lX2Rh dGEubHRzX3RydW5jYXRlID0KKwkJCXNpX3BpLT5wb3dlcnR1bmVfZGF0YS0+bHRzX3RydW5jYXRl X2RlZmF1bHQ7CisJfSBlbHNlIHsKKwkJbmlfcGktPnN1cHBvcnRfY2FjX2xvbmdfdGVybV9hdmVy YWdlID0gZmFsc2U7CisJCXNpX3BpLT5keW5fcG93ZXJ0dW5lX2RhdGEubDJfbHRhX3dpbmRvd19z aXplID0gMDsKKwkJc2lfcGktPmR5bl9wb3dlcnR1bmVfZGF0YS5sdHNfdHJ1bmNhdGUgPSAwOwor CX0KKworCXNpX3BpLT5keW5fcG93ZXJ0dW5lX2RhdGEuZGlzYWJsZV91dmRfcG93ZXJ0dW5lID0g ZmFsc2U7Cit9CisKK3N0YXRpYyB1MzIgc2lfZ2V0X3NtY19wb3dlcl9zY2FsaW5nX2ZhY3Rvcihz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHUz MiBzaV9jYWxjdWxhdGVfY2FjX3dpbnRpbWUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7 CisJdTMyIHhjbGs7CisJdTMyIHdpbnRpbWU7CisJdTMyIGNhY193aW5kb3c7CisJdTMyIGNhY193 aW5kb3dfc2l6ZTsKKworCXhjbGsgPSBhbWRncHVfYXNpY19nZXRfeGNsayhhZGV2KTsKKworCWlm ICh4Y2xrID09IDApCisJCXJldHVybiAwOworCisJY2FjX3dpbmRvdyA9IFJSRUczMihDR19DQUNf Q1RSTCkgJiBDQUNfV0lORE9XX01BU0s7CisJY2FjX3dpbmRvd19zaXplID0gKChjYWNfd2luZG93 ICYgMHhGRkZGMDAwMCkgPj4gMTYpICogKGNhY193aW5kb3cgJiAweDAwMDBGRkZGKTsKKworCXdp bnRpbWUgPSAoY2FjX3dpbmRvd19zaXplICogMTAwKSAvIHhjbGs7CisKKwlyZXR1cm4gd2ludGlt ZTsKK30KKworc3RhdGljIHUzMiBzaV9zY2FsZV9wb3dlcl9mb3Jfc21jKHUzMiBwb3dlcl9pbl93 YXR0cywgdTMyIHNjYWxpbmdfZmFjdG9yKQoreworCXJldHVybiBwb3dlcl9pbl93YXR0czsKK30K Kworc3RhdGljIGludCBzaV9jYWxjdWxhdGVfYWRqdXN0ZWRfdGRwX2xpbWl0cyhzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiwKKwkJCQkJICAgIGJvb2wgYWRqdXN0X3BvbGFyaXR5LAorCQkJCQkg ICAgdTMyIHRkcF9hZGp1c3RtZW50LAorCQkJCQkgICAgdTMyICp0ZHBfbGltaXQsCisJCQkJCSAg ICB1MzIgKm5lYXJfdGRwX2xpbWl0KQoreworCXUzMiBhZGp1c3RtZW50X2RlbHRhLCBtYXhfdGRw X2xpbWl0OworCisJaWYgKHRkcF9hZGp1c3RtZW50ID4gKHUzMilhZGV2LT5wbS5kcG0udGRwX29k X2xpbWl0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1heF90ZHBfbGltaXQgPSAoKDEwMCArIDEw MCkgKiBhZGV2LT5wbS5kcG0udGRwX2xpbWl0KSAvIDEwMDsKKworCWlmIChhZGp1c3RfcG9sYXJp dHkpIHsKKwkJKnRkcF9saW1pdCA9ICgoMTAwICsgdGRwX2FkanVzdG1lbnQpICogYWRldi0+cG0u ZHBtLnRkcF9saW1pdCkgLyAxMDA7CisJCSpuZWFyX3RkcF9saW1pdCA9IGFkZXYtPnBtLmRwbS5u ZWFyX3RkcF9saW1pdF9hZGp1c3RlZCArICgqdGRwX2xpbWl0IC0gYWRldi0+cG0uZHBtLnRkcF9s aW1pdCk7CisJfSBlbHNlIHsKKwkJKnRkcF9saW1pdCA9ICgoMTAwIC0gdGRwX2FkanVzdG1lbnQp ICogYWRldi0+cG0uZHBtLnRkcF9saW1pdCkgLyAxMDA7CisJCWFkanVzdG1lbnRfZGVsdGEgID0g YWRldi0+cG0uZHBtLnRkcF9saW1pdCAtICp0ZHBfbGltaXQ7CisJCWlmIChhZGp1c3RtZW50X2Rl bHRhIDwgYWRldi0+cG0uZHBtLm5lYXJfdGRwX2xpbWl0X2FkanVzdGVkKQorCQkJKm5lYXJfdGRw X2xpbWl0ID0gYWRldi0+cG0uZHBtLm5lYXJfdGRwX2xpbWl0X2FkanVzdGVkIC0gYWRqdXN0bWVu dF9kZWx0YTsKKwkJZWxzZQorCQkJKm5lYXJfdGRwX2xpbWl0ID0gMDsKKwl9CisKKwlpZiAoKCp0 ZHBfbGltaXQgPD0gMCkgfHwgKCp0ZHBfbGltaXQgPiBtYXhfdGRwX2xpbWl0KSkKKwkJcmV0dXJu IC1FSU5WQUw7CisJaWYgKCgqbmVhcl90ZHBfbGltaXQgPD0gMCkgfHwgKCpuZWFyX3RkcF9saW1p dCA+ICp0ZHBfbGltaXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IHNpX3BvcHVsYXRlX3NtY190ZHBfbGltaXRzKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LAorCQkJCSAgICAgIHN0cnVjdCBhbWRncHVfcHMgKmFtZGdwdV9zdGF0ZSkKK3sKKwlz dHJ1Y3QgbmlfcG93ZXJfaW5mbyAqbmlfcGkgPSBuaV9nZXRfcGkoYWRldik7CisJc3RydWN0IHNp X3Bvd2VyX2luZm8gKnNpX3BpID0gc2lfZ2V0X3BpKGFkZXYpOworCisJaWYgKG5pX3BpLT5lbmFi bGVfcG93ZXJfY29udGFpbm1lbnQpIHsKKwkJU0lTTEFORFNfU01DX1NUQVRFVEFCTEUgKnNtY190 YWJsZSA9ICZzaV9waS0+c21jX3N0YXRldGFibGU7CisJCVBQX1NJc2xhbmRzX1BBUE1QYXJhbWV0 ZXJzICpwYXBtX3Bhcm07CisJCXN0cnVjdCBhbWRncHVfcHBtX3RhYmxlICpwcG0gPSBhZGV2LT5w bS5kcG0uZHluX3N0YXRlLnBwbV90YWJsZTsKKwkJdTMyIHNjYWxpbmdfZmFjdG9yID0gc2lfZ2V0 X3NtY19wb3dlcl9zY2FsaW5nX2ZhY3RvcihhZGV2KTsKKwkJdTMyIHRkcF9saW1pdDsKKwkJdTMy IG5lYXJfdGRwX2xpbWl0OworCQlpbnQgcmV0OworCisJCWlmIChzY2FsaW5nX2ZhY3RvciA9PSAw KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWVtc2V0KHNtY190YWJsZSwgMCwgc2l6ZW9mKFNJ U0xBTkRTX1NNQ19TVEFURVRBQkxFKSk7CisKKwkJcmV0ID0gc2lfY2FsY3VsYXRlX2FkanVzdGVk X3RkcF9saW1pdHMoYWRldiwKKwkJCQkJCSAgICAgICBmYWxzZSwgLyogPz8/ICovCisJCQkJCQkg ICAgICAgYWRldi0+cG0uZHBtLnRkcF9hZGp1c3RtZW50LAorCQkJCQkJICAgICAgICZ0ZHBfbGlt aXQsCisJCQkJCQkgICAgICAgJm5lYXJfdGRwX2xpbWl0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVy biByZXQ7CisKKwkJc21jX3RhYmxlLT5kcG0yUGFyYW1zLlREUExpbWl0ID0KKwkJCWNwdV90b19i ZTMyKHNpX3NjYWxlX3Bvd2VyX2Zvcl9zbWModGRwX2xpbWl0LCBzY2FsaW5nX2ZhY3RvcikgKiAx MDAwKTsKKwkJc21jX3RhYmxlLT5kcG0yUGFyYW1zLk5lYXJURFBMaW1pdCA9CisJCQljcHVfdG9f YmUzMihzaV9zY2FsZV9wb3dlcl9mb3Jfc21jKG5lYXJfdGRwX2xpbWl0LCBzY2FsaW5nX2ZhY3Rv cikgKiAxMDAwKTsKKwkJc21jX3RhYmxlLT5kcG0yUGFyYW1zLlNhZmVQb3dlckxpbWl0ID0KKwkJ CWNwdV90b19iZTMyKHNpX3NjYWxlX3Bvd2VyX2Zvcl9zbWMoKG5lYXJfdGRwX2xpbWl0ICogU0lT TEFORFNfRFBNMl9URFBfU0FGRV9MSU1JVF9QRVJDRU5UKSAvIDEwMCwgc2NhbGluZ19mYWN0b3Ip ICogMTAwMCk7CisKKwkJcmV0ID0gc2lfY29weV9ieXRlc190b19zbWMoYWRldiwKKwkJCQkJICAg KHNpX3BpLT5zdGF0ZV90YWJsZV9zdGFydCArIG9mZnNldG9mKFNJU0xBTkRTX1NNQ19TVEFURVRB QkxFLCBkcG0yUGFyYW1zKSArCisJCQkJCQkgb2Zmc2V0b2YoUFBfU0lzbGFuZHNfRFBNMlBhcmFt ZXRlcnMsIFREUExpbWl0KSksCisJCQkJCSAgICh1OCAqKSgmKHNtY190YWJsZS0+ZHBtMlBhcmFt cy5URFBMaW1pdCkpLAorCQkJCQkgICBzaXplb2YodTMyKSAqIDMsCisJCQkJCSAgIHNpX3BpLT5z cmFtX2VuZCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWlmIChzaV9waS0+ZW5h YmxlX3BwbSkgeworCQkJcGFwbV9wYXJtID0gJnNpX3BpLT5wYXBtX3Bhcm07CisJCQltZW1zZXQo cGFwbV9wYXJtLCAwLCBzaXplb2YoUFBfU0lzbGFuZHNfUEFQTVBhcmFtZXRlcnMpKTsKKwkJCXBh cG1fcGFybS0+TmVhclREUExpbWl0VGhlcm0gPSBjcHVfdG9fYmUzMihwcG0tPmRncHVfdGRwKTsK KwkJCXBhcG1fcGFybS0+ZEdQVV9UX0xpbWl0ID0gY3B1X3RvX2JlMzIocHBtLT50al9tYXgpOwor CQkJcGFwbV9wYXJtLT5kR1BVX1RfV2FybmluZyA9IGNwdV90b19iZTMyKDk1KTsKKwkJCXBhcG1f cGFybS0+ZEdQVV9UX0h5c3RlcmVzaXMgPSBjcHVfdG9fYmUzMig1KTsKKwkJCXBhcG1fcGFybS0+ UGxhdGZvcm1Qb3dlckxpbWl0ID0gMHhmZmZmZmZmZjsKKwkJCXBhcG1fcGFybS0+TmVhclREUExp bWl0UEFQTSA9IDB4ZmZmZmZmZmY7CisKKwkJCXJldCA9IHNpX2NvcHlfYnl0ZXNfdG9fc21jKGFk ZXYsIHNpX3BpLT5wYXBtX2NmZ190YWJsZV9zdGFydCwKKwkJCQkJCSAgICh1OCAqKXBhcG1fcGFy bSwKKwkJCQkJCSAgIHNpemVvZihQUF9TSXNsYW5kc19QQVBNUGFyYW1ldGVycyksCisJCQkJCQkg ICBzaV9waS0+c3JhbV9lbmQpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJ fQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpX3BvcHVsYXRlX3NtY190ZHBfbGltaXRz XzIoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJCXN0cnVjdCBhbWRncHVfcHMgKmFt ZGdwdV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgbmlfcG93ZXJfaW5mbyAqbmlfcGkgPSBuaV9nZXRfcGko YWRldik7CisJc3RydWN0IHNpX3Bvd2VyX2luZm8gKnNpX3BpID0gc2lfZ2V0X3BpKGFkZXYpOwor CisJaWYgKG5pX3BpLT5lbmFibGVfcG93ZXJfY29udGFpbm1lbnQpIHsKKwkJU0lTTEFORFNfU01D X1NUQVRFVEFCTEUgKnNtY190YWJsZSA9ICZzaV9waS0+c21jX3N0YXRldGFibGU7CisJCXUzMiBz Y2FsaW5nX2ZhY3RvciA9IHNpX2dldF9zbWNfcG93ZXJfc2NhbGluZ19mYWN0b3IoYWRldik7CisJ CWludCByZXQ7CisKKwkJbWVtc2V0KHNtY190YWJsZSwgMCwgc2l6ZW9mKFNJU0xBTkRTX1NNQ19T VEFURVRBQkxFKSk7CisKKwkJc21jX3RhYmxlLT5kcG0yUGFyYW1zLk5lYXJURFBMaW1pdCA9CisJ CQljcHVfdG9fYmUzMihzaV9zY2FsZV9wb3dlcl9mb3Jfc21jKGFkZXYtPnBtLmRwbS5uZWFyX3Rk cF9saW1pdF9hZGp1c3RlZCwgc2NhbGluZ19mYWN0b3IpICogMTAwMCk7CisJCXNtY190YWJsZS0+ ZHBtMlBhcmFtcy5TYWZlUG93ZXJMaW1pdCA9CisJCQljcHVfdG9fYmUzMihzaV9zY2FsZV9wb3dl cl9mb3Jfc21jKChhZGV2LT5wbS5kcG0ubmVhcl90ZHBfbGltaXRfYWRqdXN0ZWQgKiBTSVNMQU5E U19EUE0yX1REUF9TQUZFX0xJTUlUX1BFUkNFTlQpIC8gMTAwLCBzY2FsaW5nX2ZhY3RvcikgKiAx MDAwKTsKKworCQlyZXQgPSBzaV9jb3B5X2J5dGVzX3RvX3NtYyhhZGV2LAorCQkJCQkgICAoc2lf cGktPnN0YXRlX3RhYmxlX3N0YXJ0ICsKKwkJCQkJICAgIG9mZnNldG9mKFNJU0xBTkRTX1NNQ19T VEFURVRBQkxFLCBkcG0yUGFyYW1zKSArCisJCQkJCSAgICBvZmZzZXRvZihQUF9TSXNsYW5kc19E UE0yUGFyYW1ldGVycywgTmVhclREUExpbWl0KSksCisJCQkJCSAgICh1OCAqKSgmKHNtY190YWJs ZS0+ZHBtMlBhcmFtcy5OZWFyVERQTGltaXQpKSwKKwkJCQkJICAgc2l6ZW9mKHUzMikgKiAyLAor CQkJCQkgICBzaV9waS0+c3JhbV9lbmQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUxNiBzaV9jYWxjdWxhdGVfcG93ZXJfZWZmaWNp ZW5jeV9yYXRpbyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJICAgICAgIGNvbnN0 IHUxNiBwcmV2X3N0ZF92ZGRjLAorCQkJCQkgICAgICAgY29uc3QgdTE2IGN1cnJfc3RkX3ZkZGMp Cit7CisJdTY0IG1hcmdpbiA9ICh1NjQpU0lTTEFORFNfRFBNMl9QV1JFRkZJQ0lFTkNZUkFUSU9f TUFSR0lOOworCXU2NCBwcmV2X3ZkZGMgPSAodTY0KXByZXZfc3RkX3ZkZGM7CisJdTY0IGN1cnJf dmRkYyA9ICh1NjQpY3Vycl9zdGRfdmRkYzsKKwl1NjQgcHdyX2VmZmljaWVuY3lfcmF0aW8sIG4s IGQ7CisKKwlpZiAoKHByZXZfdmRkYyA9PSAwKSB8fCAoY3Vycl92ZGRjID09IDApKQorCQlyZXR1 cm4gMDsKKworCW4gPSBkaXY2NF91NjQoKHU2NCkxMDI0ICogY3Vycl92ZGRjICogY3Vycl92ZGRj ICogKCh1NjQpMTAwMCArIG1hcmdpbiksICh1NjQpMTAwMCk7CisJZCA9IHByZXZfdmRkYyAqIHBy ZXZfdmRkYzsKKwlwd3JfZWZmaWNpZW5jeV9yYXRpbyA9IGRpdjY0X3U2NChuLCBkKTsKKworCWlm IChwd3JfZWZmaWNpZW5jeV9yYXRpbyA+ICh1NjQpMHhGRkZGKQorCQlyZXR1cm4gMDsKKworCXJl dHVybiAodTE2KXB3cl9lZmZpY2llbmN5X3JhdGlvOworfQorCitzdGF0aWMgYm9vbCBzaV9zaG91 bGRfZGlzYWJsZV91dmRfcG93ZXJ0dW5lKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJ CQkgICAgc3RydWN0IGFtZGdwdV9wcyAqYW1kZ3B1X3N0YXRlKQoreworCXN0cnVjdCBzaV9wb3dl cl9pbmZvICpzaV9waSA9IHNpX2dldF9waShhZGV2KTsKKworCWlmIChzaV9waS0+ZHluX3Bvd2Vy dHVuZV9kYXRhLmRpc2FibGVfdXZkX3Bvd2VydHVuZSAmJgorCSAgICBhbWRncHVfc3RhdGUtPnZj bGsgJiYgYW1kZ3B1X3N0YXRlLT5kY2xrKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxz ZTsKK30KKworc3RydWN0IGV2ZXJncmVlbl9wb3dlcl9pbmZvICpldmVyZ3JlZW5fZ2V0X3BpKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBldmVyZ3JlZW5fcG93ZXJfaW5m byAqcGkgPSBhZGV2LT5wbS5kcG0ucHJpdjsKKworCXJldHVybiBwaTsKK30KKworc3RhdGljIGlu dCBzaV9wb3B1bGF0ZV9wb3dlcl9jb250YWlubWVudF92YWx1ZXMoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsCisJCQkJCQlzdHJ1Y3QgYW1kZ3B1X3BzICphbWRncHVfc3RhdGUsCisJCQkJCQlT SVNMQU5EU19TTUNfU1dTVEFURSAqc21jX3N0YXRlKQoreworCXN0cnVjdCBldmVyZ3JlZW5fcG93 ZXJfaW5mbyAqZWdfcGkgPSBldmVyZ3JlZW5fZ2V0X3BpKGFkZXYpOworCXN0cnVjdCBuaV9wb3dl cl9pbmZvICpuaV9waSA9IG5pX2dldF9waShhZGV2KTsKKwlzdHJ1Y3QgIHNpX3BzICpzdGF0ZSA9 IHNpX2dldF9wcyhhbWRncHVfc3RhdGUpOworCVNJU0xBTkRTX1NNQ19WT0xUQUdFX1ZBTFVFIHZk ZGM7CisJdTMyIHByZXZfc2NsazsKKwl1MzIgbWF4X3NjbGs7CisJdTMyIG1pbl9zY2xrOworCXUx NiBwcmV2X3N0ZF92ZGRjOworCXUxNiBjdXJyX3N0ZF92ZGRjOworCWludCBpOworCXUxNiBwd3Jf ZWZmaWNpZW5jeV9yYXRpbzsKKwl1OCBtYXhfcHNfcGVyY2VudDsKKwlib29sIGRpc2FibGVfdXZk X3Bvd2VyX3R1bmU7CisJaW50IHJldDsKKworCWlmIChuaV9waS0+ZW5hYmxlX3Bvd2VyX2NvbnRh aW5tZW50ID09IGZhbHNlKQorCQlyZXR1cm4gMDsKKworCWlmIChzdGF0ZS0+cGVyZm9ybWFuY2Vf bGV2ZWxfY291bnQgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc21jX3N0YXRlLT5s ZXZlbENvdW50ICE9IHN0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbF9jb3VudCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlkaXNhYmxlX3V2ZF9wb3dlcl90dW5lID0gc2lfc2hvdWxkX2Rpc2FibGVfdXZk X3Bvd2VydHVuZShhZGV2LCBhbWRncHVfc3RhdGUpOworCisJc21jX3N0YXRlLT5sZXZlbHNbMF0u ZHBtMi5NYXhQUyA9IDA7CisJc21jX3N0YXRlLT5sZXZlbHNbMF0uZHBtMi5OZWFyVERQRGVjID0g MDsKKwlzbWNfc3RhdGUtPmxldmVsc1swXS5kcG0yLkFib3ZlU2FmZUluYyA9IDA7CisJc21jX3N0 YXRlLT5sZXZlbHNbMF0uZHBtMi5CZWxvd1NhZmVJbmMgPSAwOworCXNtY19zdGF0ZS0+bGV2ZWxz WzBdLmRwbTIuUHdyRWZmaWNpZW5jeVJhdGlvID0gMDsKKworCWZvciAoaSA9IDE7IGkgPCBzdGF0 ZS0+cGVyZm9ybWFuY2VfbGV2ZWxfY291bnQ7IGkrKykgeworCQlwcmV2X3NjbGsgPSBzdGF0ZS0+ cGVyZm9ybWFuY2VfbGV2ZWxzW2ktMV0uc2NsazsKKwkJbWF4X3NjbGsgID0gc3RhdGUtPnBlcmZv cm1hbmNlX2xldmVsc1tpXS5zY2xrOworCQlpZiAoaSA9PSAxKQorCQkJbWF4X3BzX3BlcmNlbnQg PSBTSVNMQU5EU19EUE0yX01BWFBTX1BFUkNFTlRfTTsKKwkJZWxzZQorCQkJbWF4X3BzX3BlcmNl bnQgPSBTSVNMQU5EU19EUE0yX01BWFBTX1BFUkNFTlRfSDsKKworCQlpZiAocHJldl9zY2xrID4g bWF4X3NjbGspCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoKG1heF9wc19wZXJjZW50ID09 IDApIHx8CisJCSAgICAocHJldl9zY2xrID09IG1heF9zY2xrKSB8fAorCQkgICAgZGlzYWJsZV91 dmRfcG93ZXJfdHVuZSkgeworCQkJbWluX3NjbGsgPSBtYXhfc2NsazsKKwkJfSBlbHNlIGlmIChp ID09IDEpIHsKKwkJCW1pbl9zY2xrID0gcHJldl9zY2xrOworCQl9IGVsc2UgeworCQkJbWluX3Nj bGsgPSAocHJldl9zY2xrICogKHUzMiltYXhfcHNfcGVyY2VudCkgLyAxMDA7CisJCX0KKworCQlp ZiAobWluX3NjbGsgPCBzdGF0ZS0+cGVyZm9ybWFuY2VfbGV2ZWxzWzBdLnNjbGspCisJCQltaW5f c2NsayA9IHN0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbHNbMF0uc2NsazsKKworCQlpZiAobWluX3Nj bGsgPT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXJldCA9IHNpX3BvcHVsYXRlX3ZvbHRh Z2VfdmFsdWUoYWRldiwgJmVnX3BpLT52ZGRjX3ZvbHRhZ2VfdGFibGUsCisJCQkJCQlzdGF0ZS0+ cGVyZm9ybWFuY2VfbGV2ZWxzW2ktMV0udmRkYywgJnZkZGMpOworCQlpZiAocmV0KQorCQkJcmV0 dXJuIHJldDsKKworCQlyZXQgPSBzaV9nZXRfc3RkX3ZvbHRhZ2VfdmFsdWUoYWRldiwgJnZkZGMs ICZwcmV2X3N0ZF92ZGRjKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0g c2lfcG9wdWxhdGVfdm9sdGFnZV92YWx1ZShhZGV2LCAmZWdfcGktPnZkZGNfdm9sdGFnZV90YWJs ZSwKKwkJCQkJCXN0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0udmRkYywgJnZkZGMpOworCQlp ZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBzaV9nZXRfc3RkX3ZvbHRhZ2VfdmFs dWUoYWRldiwgJnZkZGMsICZjdXJyX3N0ZF92ZGRjKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiBy ZXQ7CisKKwkJcHdyX2VmZmljaWVuY3lfcmF0aW8gPSBzaV9jYWxjdWxhdGVfcG93ZXJfZWZmaWNp ZW5jeV9yYXRpbyhhZGV2LAorCQkJCQkJCQkJICAgcHJldl9zdGRfdmRkYywgY3Vycl9zdGRfdmRk Yyk7CisKKwkJc21jX3N0YXRlLT5sZXZlbHNbaV0uZHBtMi5NYXhQUyA9ICh1OCkoKFNJU0xBTkRT X0RQTTJfTUFYX1BVTFNFX1NLSVAgKiAobWF4X3NjbGsgLSBtaW5fc2NsaykpIC8gbWF4X3NjbGsp OworCQlzbWNfc3RhdGUtPmxldmVsc1tpXS5kcG0yLk5lYXJURFBEZWMgPSBTSVNMQU5EU19EUE0y X05FQVJfVERQX0RFQzsKKwkJc21jX3N0YXRlLT5sZXZlbHNbaV0uZHBtMi5BYm92ZVNhZmVJbmMg PSBTSVNMQU5EU19EUE0yX0FCT1ZFX1NBRkVfSU5DOworCQlzbWNfc3RhdGUtPmxldmVsc1tpXS5k cG0yLkJlbG93U2FmZUluYyA9IFNJU0xBTkRTX0RQTTJfQkVMT1dfU0FGRV9JTkM7CisJCXNtY19z dGF0ZS0+bGV2ZWxzW2ldLmRwbTIuUHdyRWZmaWNpZW5jeVJhdGlvID0gY3B1X3RvX2JlMTYocHdy X2VmZmljaWVuY3lfcmF0aW8pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNp X3BvcHVsYXRlX3NxX3JhbXBpbmdfdmFsdWVzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAor CQkJCQkgc3RydWN0IGFtZGdwdV9wcyAqYW1kZ3B1X3N0YXRlLAorCQkJCQkgU0lTTEFORFNfU01D X1NXU1RBVEUgKnNtY19zdGF0ZSkKK3sKKwlzdHJ1Y3QgbmlfcG93ZXJfaW5mbyAqbmlfcGkgPSBu aV9nZXRfcGkoYWRldik7CisJc3RydWN0ICBzaV9wcyAqc3RhdGUgPSBzaV9nZXRfcHMoYW1kZ3B1 X3N0YXRlKTsKKwl1MzIgc3FfcG93ZXJfdGhyb3R0bGUsIHNxX3Bvd2VyX3Rocm90dGxlMjsKKwli b29sIGVuYWJsZV9zcV9yYW1waW5nID0gbmlfcGktPmVuYWJsZV9zcV9yYW1waW5nOworCWludCBp OworCisJaWYgKHN0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbF9jb3VudCA9PSAwKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCWlmIChzbWNfc3RhdGUtPmxldmVsQ291bnQgIT0gc3RhdGUtPnBlcmZvcm1h bmNlX2xldmVsX2NvdW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhZGV2LT5wbS5kcG0u c3FfcmFtcGluZ190aHJlc2hvbGQgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoU0lT TEFORFNfRFBNMl9TUV9SQU1QX01BWF9QT1dFUiA+IChNQVhfUE9XRVJfTUFTSyA+PiBNQVhfUE9X RVJfU0hJRlQpKQorCQllbmFibGVfc3FfcmFtcGluZyA9IGZhbHNlOworCisJaWYgKFNJU0xBTkRT X0RQTTJfU1FfUkFNUF9NSU5fUE9XRVIgPiAoTUlOX1BPV0VSX01BU0sgPj4gTUlOX1BPV0VSX1NI SUZUKSkKKwkJZW5hYmxlX3NxX3JhbXBpbmcgPSBmYWxzZTsKKworCWlmIChTSVNMQU5EU19EUE0y X1NRX1JBTVBfTUFYX1BPV0VSX0RFTFRBID4gKE1BWF9QT1dFUl9ERUxUQV9NQVNLID4+IE1BWF9Q T1dFUl9ERUxUQV9TSElGVCkpCisJCWVuYWJsZV9zcV9yYW1waW5nID0gZmFsc2U7CisKKwlpZiAo U0lTTEFORFNfRFBNMl9TUV9SQU1QX1NUSV9TSVpFID4gKFNUSV9TSVpFX01BU0sgPj4gU1RJX1NJ WkVfU0hJRlQpKQorCQllbmFibGVfc3FfcmFtcGluZyA9IGZhbHNlOworCisJaWYgKFNJU0xBTkRT X0RQTTJfU1FfUkFNUF9MVElfUkFUSU8gPiAoTFRJX1JBVElPX01BU0sgPj4gTFRJX1JBVElPX1NI SUZUKSkKKwkJZW5hYmxlX3NxX3JhbXBpbmcgPSBmYWxzZTsKKworCWZvciAoaSA9IDA7IGkgPCBz dGF0ZS0+cGVyZm9ybWFuY2VfbGV2ZWxfY291bnQ7IGkrKykgeworCQlzcV9wb3dlcl90aHJvdHRs ZSA9IDA7CisJCXNxX3Bvd2VyX3Rocm90dGxlMiA9IDA7CisKKwkJaWYgKChzdGF0ZS0+cGVyZm9y bWFuY2VfbGV2ZWxzW2ldLnNjbGsgPj0gYWRldi0+cG0uZHBtLnNxX3JhbXBpbmdfdGhyZXNob2xk KSAmJgorCQkgICAgZW5hYmxlX3NxX3JhbXBpbmcpIHsKKwkJCXNxX3Bvd2VyX3Rocm90dGxlIHw9 IE1BWF9QT1dFUihTSVNMQU5EU19EUE0yX1NRX1JBTVBfTUFYX1BPV0VSKTsKKwkJCXNxX3Bvd2Vy X3Rocm90dGxlIHw9IE1JTl9QT1dFUihTSVNMQU5EU19EUE0yX1NRX1JBTVBfTUlOX1BPV0VSKTsK KwkJCXNxX3Bvd2VyX3Rocm90dGxlMiB8PSBNQVhfUE9XRVJfREVMVEEoU0lTTEFORFNfRFBNMl9T UV9SQU1QX01BWF9QT1dFUl9ERUxUQSk7CisJCQlzcV9wb3dlcl90aHJvdHRsZTIgfD0gU1RJX1NJ WkUoU0lTTEFORFNfRFBNMl9TUV9SQU1QX1NUSV9TSVpFKTsKKwkJCXNxX3Bvd2VyX3Rocm90dGxl MiB8PSBMVElfUkFUSU8oU0lTTEFORFNfRFBNMl9TUV9SQU1QX0xUSV9SQVRJTyk7CisJCX0gZWxz ZSB7CisJCQlzcV9wb3dlcl90aHJvdHRsZSB8PSBNQVhfUE9XRVJfTUFTSyB8IE1JTl9QT1dFUl9N QVNLOworCQkJc3FfcG93ZXJfdGhyb3R0bGUyIHw9IE1BWF9QT1dFUl9ERUxUQV9NQVNLIHwgU1RJ X1NJWkVfTUFTSyB8IExUSV9SQVRJT19NQVNLOworCQl9CisKKwkJc21jX3N0YXRlLT5sZXZlbHNb aV0uU1FQb3dlclRocm90dGxlID0gY3B1X3RvX2JlMzIoc3FfcG93ZXJfdGhyb3R0bGUpOworCQlz bWNfc3RhdGUtPmxldmVsc1tpXS5TUVBvd2VyVGhyb3R0bGVfMiA9IGNwdV90b19iZTMyKHNxX3Bv d2VyX3Rocm90dGxlMik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2lfZW5h YmxlX3Bvd2VyX2NvbnRhaW5tZW50KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCSAg ICAgICBzdHJ1Y3QgYW1kZ3B1X3BzICphbWRncHVfbmV3X3N0YXRlLAorCQkJCSAgICAgICBib29s IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbmlfcG93ZXJfaW5mbyAqbmlfcGkgPSBuaV9nZXRfcGkoYWRl dik7CisJUFBTTUNfUmVzdWx0IHNtY19yZXN1bHQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAobmlf cGktPmVuYWJsZV9wb3dlcl9jb250YWlubWVudCkgeworCQlpZiAoZW5hYmxlKSB7CisJCQlpZiAo IXNpX3Nob3VsZF9kaXNhYmxlX3V2ZF9wb3dlcnR1bmUoYWRldiwgYW1kZ3B1X25ld19zdGF0ZSkp IHsKKwkJCQlzbWNfcmVzdWx0ID0gc2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsIFBQU01DX1REUENs YW1waW5nQWN0aXZlKTsKKwkJCQlpZiAoc21jX3Jlc3VsdCAhPSBQUFNNQ19SZXN1bHRfT0spIHsK KwkJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQkJbmlfcGktPnBjX2VuYWJsZWQgPSBmYWxzZTsKKwkJ CQl9IGVsc2UgeworCQkJCQluaV9waS0+cGNfZW5hYmxlZCA9IHRydWU7CisJCQkJfQorCQkJfQor CQl9IGVsc2UgeworCQkJc21jX3Jlc3VsdCA9IHNpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LCBQUFNN Q19URFBDbGFtcGluZ0luYWN0aXZlKTsKKwkJCWlmIChzbWNfcmVzdWx0ICE9IFBQU01DX1Jlc3Vs dF9PSykKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJbmlfcGktPnBjX2VuYWJsZWQgPSBmYWxzZTsK KwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2lfaW5pdGlhbGl6ZV9z bWNfZHRlX3RhYmxlcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlzdHJ1Y3Qgc2lf cG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRfcGkoYWRldik7CisJaW50IHJldCA9IDA7CisJc3Ry dWN0IHNpX2R0ZV9kYXRhICpkdGVfZGF0YSA9ICZzaV9waS0+ZHRlX2RhdGE7CisJU21jX1NJc2xh bmRzX0RURV9Db25maWd1cmF0aW9uICpkdGVfdGFibGVzID0gTlVMTDsKKwl1MzIgdGFibGVfc2l6 ZTsKKwl1OCB0ZGVwX2NvdW50OworCXUzMiBpOworCisJaWYgKGR0ZV9kYXRhID09IE5VTEwpCisJ CXNpX3BpLT5lbmFibGVfZHRlID0gZmFsc2U7CisKKwlpZiAoc2lfcGktPmVuYWJsZV9kdGUgPT0g ZmFsc2UpCisJCXJldHVybiAwOworCisJaWYgKGR0ZV9kYXRhLT5rIDw9IDApCisJCXJldHVybiAt RUlOVkFMOworCisJZHRlX3RhYmxlcyA9IGt6YWxsb2Moc2l6ZW9mKFNtY19TSXNsYW5kc19EVEVf Q29uZmlndXJhdGlvbiksIEdGUF9LRVJORUwpOworCWlmIChkdGVfdGFibGVzID09IE5VTEwpIHsK KwkJc2lfcGktPmVuYWJsZV9kdGUgPSBmYWxzZTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJ dGFibGVfc2l6ZSA9IGR0ZV9kYXRhLT5rOworCisJaWYgKHRhYmxlX3NpemUgPiBTTUNfU0lTTEFO RFNfRFRFX01BWF9GSUxURVJfU1RBR0VTKQorCQl0YWJsZV9zaXplID0gU01DX1NJU0xBTkRTX0RU RV9NQVhfRklMVEVSX1NUQUdFUzsKKworCXRkZXBfY291bnQgPSBkdGVfZGF0YS0+dGRlcF9jb3Vu dDsKKwlpZiAodGRlcF9jb3VudCA+IFNNQ19TSVNMQU5EU19EVEVfTUFYX1RFTVBFUkFUVVJFX0RF UEVOREVOVF9BUlJBWV9TSVpFKQorCQl0ZGVwX2NvdW50ID0gU01DX1NJU0xBTkRTX0RURV9NQVhf VEVNUEVSQVRVUkVfREVQRU5ERU5UX0FSUkFZX1NJWkU7CisKKwlkdGVfdGFibGVzLT5LID0gY3B1 X3RvX2JlMzIodGFibGVfc2l6ZSk7CisJZHRlX3RhYmxlcy0+VDAgPSBjcHVfdG9fYmUzMihkdGVf ZGF0YS0+dDApOworCWR0ZV90YWJsZXMtPk1heFQgPSBjcHVfdG9fYmUzMihkdGVfZGF0YS0+bWF4 X3QpOworCWR0ZV90YWJsZXMtPldpbmRvd1NpemUgPSBkdGVfZGF0YS0+d2luZG93X3NpemU7CisJ ZHRlX3RhYmxlcy0+dGVtcF9zZWxlY3QgPSBkdGVfZGF0YS0+dGVtcF9zZWxlY3Q7CisJZHRlX3Rh Ymxlcy0+RFRFX21vZGUgPSBkdGVfZGF0YS0+ZHRlX21vZGU7CisJZHRlX3RhYmxlcy0+VHRocmVz aG9sZCA9IGNwdV90b19iZTMyKGR0ZV9kYXRhLT50X3RocmVzaG9sZCk7CisKKwlpZiAodGRlcF9j b3VudCA+IDApCisJCXRhYmxlX3NpemUtLTsKKworCWZvciAoaSA9IDA7IGkgPCB0YWJsZV9zaXpl OyBpKyspIHsKKwkJZHRlX3RhYmxlcy0+dGF1W2ldID0gY3B1X3RvX2JlMzIoZHRlX2RhdGEtPnRh dVtpXSk7CisJCWR0ZV90YWJsZXMtPlJbaV0gICA9IGNwdV90b19iZTMyKGR0ZV9kYXRhLT5yW2ld KTsKKwl9CisKKwlkdGVfdGFibGVzLT5UZGVwX2NvdW50ID0gdGRlcF9jb3VudDsKKworCWZvciAo aSA9IDA7IGkgPCAodTMyKXRkZXBfY291bnQ7IGkrKykgeworCQlkdGVfdGFibGVzLT5UX2xpbWl0 c1tpXSA9IGR0ZV9kYXRhLT50X2xpbWl0c1tpXTsKKwkJZHRlX3RhYmxlcy0+VGRlcF90YXVbaV0g PSBjcHVfdG9fYmUzMihkdGVfZGF0YS0+dGRlcF90YXVbaV0pOworCQlkdGVfdGFibGVzLT5UZGVw X1JbaV0gPSBjcHVfdG9fYmUzMihkdGVfZGF0YS0+dGRlcF9yW2ldKTsKKwl9CisKKwlyZXQgPSBz aV9jb3B5X2J5dGVzX3RvX3NtYyhhZGV2LCBzaV9waS0+ZHRlX3RhYmxlX3N0YXJ0LCAodTggKilk dGVfdGFibGVzLAorCQkJCSAgIHNpemVvZihTbWNfU0lzbGFuZHNfRFRFX0NvbmZpZ3VyYXRpb24p LCBzaV9waS0+c3JhbV9lbmQpOworCWtmcmVlKGR0ZV90YWJsZXMpOworCisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIGludCBzaV9nZXRfY2FjX3N0ZF92b2x0YWdlX21heF9taW4oc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJCSAgdTE2ICptYXgsIHUxNiAqbWluKQoreworCXN0cnVj dCBzaV9wb3dlcl9pbmZvICpzaV9waSA9IHNpX2dldF9waShhZGV2KTsKKwlzdHJ1Y3QgYW1kZ3B1 X2NhY19sZWFrYWdlX3RhYmxlICp0YWJsZSA9CisJCSZhZGV2LT5wbS5kcG0uZHluX3N0YXRlLmNh Y19sZWFrYWdlX3RhYmxlOworCXUzMiBpOworCXUzMiB2MF9sb2FkbGluZTsKKworCisJaWYgKHRh YmxlID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJKm1heCA9IDA7CisJKm1pbiA9IDB4 RkZGRjsKKworCWZvciAoaSA9IDA7IGkgPCB0YWJsZS0+Y291bnQ7IGkrKykgeworCQlpZiAodGFi bGUtPmVudHJpZXNbaV0udmRkYyA+ICptYXgpCisJCQkqbWF4ID0gdGFibGUtPmVudHJpZXNbaV0u dmRkYzsKKwkJaWYgKHRhYmxlLT5lbnRyaWVzW2ldLnZkZGMgPCAqbWluKQorCQkJKm1pbiA9IHRh YmxlLT5lbnRyaWVzW2ldLnZkZGM7CisJfQorCisJaWYgKHNpX3BpLT5wb3dlcnR1bmVfZGF0YS0+ bGtnZV9sdXRfdjBfcGVyY2VudCA+IDEwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2MF9sb2Fk bGluZSA9ICgqbWluKSAqICgxMDAgLSBzaV9waS0+cG93ZXJ0dW5lX2RhdGEtPmxrZ2VfbHV0X3Yw X3BlcmNlbnQpIC8gMTAwOworCisJaWYgKHYwX2xvYWRsaW5lID4gMHhGRkZGVUwpCisJCXJldHVy biAtRUlOVkFMOworCisJKm1pbiA9ICh1MTYpdjBfbG9hZGxpbmU7CisKKwlpZiAoKCptaW4gPiAq bWF4KSB8fCAoKm1heCA9PSAwKSB8fCAoKm1pbiA9PSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUxNiBzaV9nZXRfY2FjX3N0ZF92b2x0YWdlX3N0ZXAo dTE2IG1heCwgdTE2IG1pbikKK3sKKwlyZXR1cm4gKChtYXggLSBtaW4pICsgKFNNQ19TSVNMQU5E U19MS0dFX0xVVF9OVU1fT0ZfVk9MVF9FTlRSSUVTIC0gMSkpIC8KKwkJU01DX1NJU0xBTkRTX0xL R0VfTFVUX05VTV9PRl9WT0xUX0VOVFJJRVM7Cit9CisKK3N0YXRpYyBpbnQgc2lfaW5pdF9kdGVf bGVha2FnZV90YWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkgICAgIFBQX1NJ c2xhbmRzX0NhY0NvbmZpZyAqY2FjX3RhYmxlcywKKwkJCQkgICAgIHUxNiB2ZGRjX21heCwgdTE2 IHZkZGNfbWluLCB1MTYgdmRkY19zdGVwLAorCQkJCSAgICAgdTE2IHQwLCB1MTYgdF9zdGVwKQor eworCXN0cnVjdCBzaV9wb3dlcl9pbmZvICpzaV9waSA9IHNpX2dldF9waShhZGV2KTsKKwl1MzIg bGVha2FnZTsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwlzMzIgdDsKKwl1MzIgc21jX2xlYWthZ2U7 CisJdTMyIHNjYWxpbmdfZmFjdG9yOworCXUxNiB2b2x0YWdlOworCisJc2NhbGluZ19mYWN0b3Ig PSBzaV9nZXRfc21jX3Bvd2VyX3NjYWxpbmdfZmFjdG9yKGFkZXYpOworCisJZm9yIChpID0gMDsg aSA8IFNNQ19TSVNMQU5EU19MS0dFX0xVVF9OVU1fT0ZfVEVNUF9FTlRSSUVTIDsgaSsrKSB7CisJ CXQgPSAoMTAwMCAqIChpICogdF9zdGVwICsgdDApKTsKKworCQlmb3IgKGogPSAwOyBqIDwgU01D X1NJU0xBTkRTX0xLR0VfTFVUX05VTV9PRl9WT0xUX0VOVFJJRVM7IGorKykgeworCQkJdm9sdGFn ZSA9IHZkZGNfbWF4IC0gKHZkZGNfc3RlcCAqIGopOworCisJCQlzaV9jYWxjdWxhdGVfbGVha2Fn ZV9mb3Jfdl9hbmRfdChhZGV2LAorCQkJCQkJCSAmc2lfcGktPnBvd2VydHVuZV9kYXRhLT5sZWFr YWdlX2NvZWZmaWNpZW50cywKKwkJCQkJCQkgdm9sdGFnZSwKKwkJCQkJCQkgdCwKKwkJCQkJCQkg c2lfcGktPmR5bl9wb3dlcnR1bmVfZGF0YS5jYWNfbGVha2FnZSwKKwkJCQkJCQkgJmxlYWthZ2Up OworCisJCQlzbWNfbGVha2FnZSA9IHNpX3NjYWxlX3Bvd2VyX2Zvcl9zbWMobGVha2FnZSwgc2Nh bGluZ19mYWN0b3IpIC8gNDsKKworCQkJaWYgKHNtY19sZWFrYWdlID4gMHhGRkZGKQorCQkJCXNt Y19sZWFrYWdlID0gMHhGRkZGOworCisJCQljYWNfdGFibGVzLT5jYWNfbGtnZV9sdXRbaV1bU01D X1NJU0xBTkRTX0xLR0VfTFVUX05VTV9PRl9WT0xUX0VOVFJJRVMtMS1qXSA9CisJCQkJY3B1X3Rv X2JlMTYoKHUxNilzbWNfbGVha2FnZSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgc2lfaW5pdF9zaW1wbGlmaWVkX2xlYWthZ2VfdGFibGUoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsCisJCQkJCSAgICBQUF9TSXNsYW5kc19DYWNDb25maWcgKmNhY190YWJsZXMsCisJ CQkJCSAgICB1MTYgdmRkY19tYXgsIHUxNiB2ZGRjX21pbiwgdTE2IHZkZGNfc3RlcCkKK3sKKwlz dHJ1Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRfcGkoYWRldik7CisJdTMyIGxlYWth Z2U7CisJdW5zaWduZWQgaW50IGksIGo7CisJdTMyIHNtY19sZWFrYWdlOworCXUzMiBzY2FsaW5n X2ZhY3RvcjsKKwl1MTYgdm9sdGFnZTsKKworCXNjYWxpbmdfZmFjdG9yID0gc2lfZ2V0X3NtY19w b3dlcl9zY2FsaW5nX2ZhY3RvcihhZGV2KTsKKworCWZvciAoaiA9IDA7IGogPCBTTUNfU0lTTEFO RFNfTEtHRV9MVVRfTlVNX09GX1ZPTFRfRU5UUklFUzsgaisrKSB7CisJCXZvbHRhZ2UgPSB2ZGRj X21heCAtICh2ZGRjX3N0ZXAgKiBqKTsKKworCQlzaV9jYWxjdWxhdGVfbGVha2FnZV9mb3Jfdihh ZGV2LAorCQkJCQkgICAmc2lfcGktPnBvd2VydHVuZV9kYXRhLT5sZWFrYWdlX2NvZWZmaWNpZW50 cywKKwkJCQkJICAgc2lfcGktPnBvd2VydHVuZV9kYXRhLT5maXhlZF9rdCwKKwkJCQkJICAgdm9s dGFnZSwKKwkJCQkJICAgc2lfcGktPmR5bl9wb3dlcnR1bmVfZGF0YS5jYWNfbGVha2FnZSwKKwkJ CQkJICAgJmxlYWthZ2UpOworCisJCXNtY19sZWFrYWdlID0gc2lfc2NhbGVfcG93ZXJfZm9yX3Nt YyhsZWFrYWdlLCBzY2FsaW5nX2ZhY3RvcikgLyA0OworCisJCWlmIChzbWNfbGVha2FnZSA+IDB4 RkZGRikKKwkJCXNtY19sZWFrYWdlID0gMHhGRkZGOworCisJCWZvciAoaSA9IDA7IGkgPCBTTUNf U0lTTEFORFNfTEtHRV9MVVRfTlVNX09GX1RFTVBfRU5UUklFUyA7IGkrKykKKwkJCWNhY190YWJs ZXMtPmNhY19sa2dlX2x1dFtpXVtTTUNfU0lTTEFORFNfTEtHRV9MVVRfTlVNX09GX1ZPTFRfRU5U UklFUy0xLWpdID0KKwkJCQljcHVfdG9fYmUxNigodTE2KXNtY19sZWFrYWdlKTsKKwl9CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2lfaW5pdGlhbGl6ZV9zbWNfY2FjX3RhYmxlcyhzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlzdHJ1Y3QgbmlfcG93ZXJfaW5mbyAqbmlfcGkg PSBuaV9nZXRfcGkoYWRldik7CisJc3RydWN0IHNpX3Bvd2VyX2luZm8gKnNpX3BpID0gc2lfZ2V0 X3BpKGFkZXYpOworCVBQX1NJc2xhbmRzX0NhY0NvbmZpZyAqY2FjX3RhYmxlcyA9IE5VTEw7CisJ dTE2IHZkZGNfbWF4LCB2ZGRjX21pbiwgdmRkY19zdGVwOworCXUxNiB0MCwgdF9zdGVwOworCXUz MiBsb2FkX2xpbmVfc2xvcGUsIHJlZzsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgdGlja3NfcGVyX3Vz ID0gYW1kZ3B1X2FzaWNfZ2V0X3hjbGsoYWRldikgLyAxMDA7CisKKwlpZiAobmlfcGktPmVuYWJs ZV9jYWMgPT0gZmFsc2UpCisJCXJldHVybiAwOworCisJY2FjX3RhYmxlcyA9IGt6YWxsb2Moc2l6 ZW9mKFBQX1NJc2xhbmRzX0NhY0NvbmZpZyksIEdGUF9LRVJORUwpOworCWlmICghY2FjX3RhYmxl cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZWcgPSBSUkVHMzIoQ0dfQ0FDX0NUUkwpICYgfkNB Q19XSU5ET1dfTUFTSzsKKwlyZWcgfD0gQ0FDX1dJTkRPVyhzaV9waS0+cG93ZXJ0dW5lX2RhdGEt PmNhY193aW5kb3cpOworCVdSRUczMihDR19DQUNfQ1RSTCwgcmVnKTsKKworCXNpX3BpLT5keW5f cG93ZXJ0dW5lX2RhdGEuY2FjX2xlYWthZ2UgPSBhZGV2LT5wbS5kcG0uY2FjX2xlYWthZ2U7CisJ c2lfcGktPmR5bl9wb3dlcnR1bmVfZGF0YS5kY19wd3JfdmFsdWUgPQorCQlzaV9waS0+cG93ZXJ0 dW5lX2RhdGEtPmRjX2NhY1tOSVNMQU5EU19EQ0NBQ19MRVZFTF8wXTsKKwlzaV9waS0+ZHluX3Bv d2VydHVuZV9kYXRhLndpbnRpbWUgPSBzaV9jYWxjdWxhdGVfY2FjX3dpbnRpbWUoYWRldik7CisJ c2lfcGktPmR5bl9wb3dlcnR1bmVfZGF0YS5zaGlmdF9uID0gc2lfcGktPnBvd2VydHVuZV9kYXRh LT5zaGlmdF9uX2RlZmF1bHQ7CisKKwlzaV9waS0+ZHluX3Bvd2VydHVuZV9kYXRhLmxlYWthZ2Vf bWluaW11bV90ZW1wZXJhdHVyZSA9IDgwICogMTAwMDsKKworCXJldCA9IHNpX2dldF9jYWNfc3Rk X3ZvbHRhZ2VfbWF4X21pbihhZGV2LCAmdmRkY19tYXgsICZ2ZGRjX21pbik7CisJaWYgKHJldCkK KwkJZ290byBkb25lX2ZyZWU7CisKKwl2ZGRjX3N0ZXAgPSBzaV9nZXRfY2FjX3N0ZF92b2x0YWdl X3N0ZXAodmRkY19tYXgsIHZkZGNfbWluKTsKKwl2ZGRjX21pbiA9IHZkZGNfbWF4IC0gKHZkZGNf c3RlcCAqIChTTUNfU0lTTEFORFNfTEtHRV9MVVRfTlVNX09GX1ZPTFRfRU5UUklFUyAtIDEpKTsK Kwl0X3N0ZXAgPSA0OworCXQwID0gNjA7CisKKwlpZiAoc2lfcGktPmVuYWJsZV9kdGUgfHwgbmlf cGktPmRyaXZlcl9jYWxjdWxhdGVfY2FjX2xlYWthZ2UpCisJCXJldCA9IHNpX2luaXRfZHRlX2xl YWthZ2VfdGFibGUoYWRldiwgY2FjX3RhYmxlcywKKwkJCQkJCXZkZGNfbWF4LCB2ZGRjX21pbiwg dmRkY19zdGVwLAorCQkJCQkJdDAsIHRfc3RlcCk7CisJZWxzZQorCQlyZXQgPSBzaV9pbml0X3Np bXBsaWZpZWRfbGVha2FnZV90YWJsZShhZGV2LCBjYWNfdGFibGVzLAorCQkJCQkJICAgICAgIHZk ZGNfbWF4LCB2ZGRjX21pbiwgdmRkY19zdGVwKTsKKwlpZiAocmV0KQorCQlnb3RvIGRvbmVfZnJl ZTsKKworCWxvYWRfbGluZV9zbG9wZSA9ICgodTMyKWFkZXYtPnBtLmRwbS5sb2FkX2xpbmVfc2xv cGUgPDwgU01DX1NJU0xBTkRTX1NDQUxFX1IpIC8gMTAwOworCisJY2FjX3RhYmxlcy0+bDJudW1X aW5fVERQID0gY3B1X3RvX2JlMzIoc2lfcGktPmR5bl9wb3dlcnR1bmVfZGF0YS5sMl9sdGFfd2lu ZG93X3NpemUpOworCWNhY190YWJsZXMtPmx0c190cnVuY2F0ZV9uID0gc2lfcGktPmR5bl9wb3dl cnR1bmVfZGF0YS5sdHNfdHJ1bmNhdGU7CisJY2FjX3RhYmxlcy0+U0hJRlRfTiA9IHNpX3BpLT5k eW5fcG93ZXJ0dW5lX2RhdGEuc2hpZnRfbjsKKwljYWNfdGFibGVzLT5sa2dlX2x1dF9WMCA9IGNw dV90b19iZTMyKCh1MzIpdmRkY19taW4pOworCWNhY190YWJsZXMtPmxrZ2VfbHV0X1ZzdGVwID0g Y3B1X3RvX2JlMzIoKHUzMil2ZGRjX3N0ZXApOworCWNhY190YWJsZXMtPlJfTEwgPSBjcHVfdG9f YmUzMihsb2FkX2xpbmVfc2xvcGUpOworCWNhY190YWJsZXMtPldpblRpbWUgPSBjcHVfdG9fYmUz MihzaV9waS0+ZHluX3Bvd2VydHVuZV9kYXRhLndpbnRpbWUpOworCWNhY190YWJsZXMtPmNhbGN1 bGF0aW9uX3JlcGVhdHMgPSBjcHVfdG9fYmUzMigyKTsKKwljYWNfdGFibGVzLT5kY19jYWMgPSBj cHVfdG9fYmUzMigwKTsKKwljYWNfdGFibGVzLT5sb2cyX1BHX0xLR19TQ0FMRSA9IDEyOworCWNh Y190YWJsZXMtPmNhY190ZW1wID0gc2lfcGktPnBvd2VydHVuZV9kYXRhLT5vcGVyYXRpbmdfdGVt cDsKKwljYWNfdGFibGVzLT5sa2dlX2x1dF9UMCA9IGNwdV90b19iZTMyKCh1MzIpdDApOworCWNh Y190YWJsZXMtPmxrZ2VfbHV0X1RzdGVwID0gY3B1X3RvX2JlMzIoKHUzMil0X3N0ZXApOworCisJ cmV0ID0gc2lfY29weV9ieXRlc190b19zbWMoYWRldiwgc2lfcGktPmNhY190YWJsZV9zdGFydCwg KHU4ICopY2FjX3RhYmxlcywKKwkJCQkgICBzaXplb2YoUFBfU0lzbGFuZHNfQ2FjQ29uZmlnKSwg c2lfcGktPnNyYW1fZW5kKTsKKworCWlmIChyZXQpCisJCWdvdG8gZG9uZV9mcmVlOworCisJcmV0 ID0gc2lfd3JpdGVfc21jX3NvZnRfcmVnaXN0ZXIoYWRldiwgU0lfU01DX1NPRlRfUkVHSVNURVJf dGlja3NfcGVyX3VzLCB0aWNrc19wZXJfdXMpOworCitkb25lX2ZyZWU6CisJaWYgKHJldCkgewor CQluaV9waS0+ZW5hYmxlX2NhYyA9IGZhbHNlOworCQluaV9waS0+ZW5hYmxlX3Bvd2VyX2NvbnRh aW5tZW50ID0gZmFsc2U7CisJfQorCisJa2ZyZWUoY2FjX3RhYmxlcyk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBzaV9wcm9ncmFtX2NhY19jb25maWdfcmVnaXN0ZXJzKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2LAorCQkJCQkgICBjb25zdCBzdHJ1Y3Qgc2lfY2FjX2NvbmZpZ19y ZWcgKmNhY19jb25maWdfcmVncykKK3sKKwljb25zdCBzdHJ1Y3Qgc2lfY2FjX2NvbmZpZ19yZWcg KmNvbmZpZ19yZWdzID0gY2FjX2NvbmZpZ19yZWdzOworCXUzMiBkYXRhID0gMCwgb2Zmc2V0Owor CisJaWYgKCFjb25maWdfcmVncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoY29uZmln X3JlZ3MtPm9mZnNldCAhPSAweEZGRkZGRkZGKSB7CisJCXN3aXRjaCAoY29uZmlnX3JlZ3MtPnR5 cGUpIHsKKwkJY2FzZSBTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQ6CisJCQlvZmZzZXQgPSBTTUNf Q0dfSU5EX1NUQVJUICsgY29uZmlnX3JlZ3MtPm9mZnNldDsKKwkJCWlmIChvZmZzZXQgPCBTTUNf Q0dfSU5EX0VORCkKKwkJCQlkYXRhID0gUlJFRzMyX1NNQyhvZmZzZXQpOworCQkJYnJlYWs7CisJ CWRlZmF1bHQ6CisJCQlkYXRhID0gUlJFRzMyKGNvbmZpZ19yZWdzLT5vZmZzZXQpOworCQkJYnJl YWs7CisJCX0KKworCQlkYXRhICY9IH5jb25maWdfcmVncy0+bWFzazsKKwkJZGF0YSB8PSAoKGNv bmZpZ19yZWdzLT52YWx1ZSA8PCBjb25maWdfcmVncy0+c2hpZnQpICYgY29uZmlnX3JlZ3MtPm1h c2spOworCisJCXN3aXRjaCAoY29uZmlnX3JlZ3MtPnR5cGUpIHsKKwkJY2FzZSBTSVNMQU5EU19D QUNDT05GSUdfQ0dJTkQ6CisJCQlvZmZzZXQgPSBTTUNfQ0dfSU5EX1NUQVJUICsgY29uZmlnX3Jl Z3MtPm9mZnNldDsKKwkJCWlmIChvZmZzZXQgPCBTTUNfQ0dfSU5EX0VORCkKKwkJCQlXUkVHMzJf U01DKG9mZnNldCwgZGF0YSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVdSRUczMihjb25m aWdfcmVncy0+b2Zmc2V0LCBkYXRhKTsKKwkJCWJyZWFrOworCQl9CisJCWNvbmZpZ19yZWdzKys7 CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpX2luaXRpYWxpemVfaGFyZHdhcmVf Y2FjX21hbmFnZXIoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IG5pX3Bv d2VyX2luZm8gKm5pX3BpID0gbmlfZ2V0X3BpKGFkZXYpOworCXN0cnVjdCBzaV9wb3dlcl9pbmZv ICpzaV9waSA9IHNpX2dldF9waShhZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKChuaV9waS0+ZW5h YmxlX2NhYyA9PSBmYWxzZSkgfHwKKwkgICAgKG5pX3BpLT5jYWNfY29uZmlndXJhdGlvbl9yZXF1 aXJlZCA9PSBmYWxzZSkpCisJCXJldHVybiAwOworCisJcmV0ID0gc2lfcHJvZ3JhbV9jYWNfY29u ZmlnX3JlZ2lzdGVycyhhZGV2LCBzaV9waS0+bGNhY19jb25maWcpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisJcmV0ID0gc2lfcHJvZ3JhbV9jYWNfY29uZmlnX3JlZ2lzdGVycyhhZGV2LCBz aV9waS0+Y2FjX292ZXJyaWRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IHNp X3Byb2dyYW1fY2FjX2NvbmZpZ19yZWdpc3RlcnMoYWRldiwgc2lfcGktPmNhY193ZWlnaHRzKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg c2lfZW5hYmxlX3NtY19jYWMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkgICAgIHN0 cnVjdCBhbWRncHVfcHMgKmFtZGdwdV9uZXdfc3RhdGUsCisJCQkgICAgIGJvb2wgZW5hYmxlKQor eworCXN0cnVjdCBuaV9wb3dlcl9pbmZvICpuaV9waSA9IG5pX2dldF9waShhZGV2KTsKKwlzdHJ1 Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRfcGkoYWRldik7CisJUFBTTUNfUmVzdWx0 IHNtY19yZXN1bHQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAobmlfcGktPmVuYWJsZV9jYWMpIHsK KwkJaWYgKGVuYWJsZSkgeworCQkJaWYgKCFzaV9zaG91bGRfZGlzYWJsZV91dmRfcG93ZXJ0dW5l KGFkZXYsIGFtZGdwdV9uZXdfc3RhdGUpKSB7CisJCQkJaWYgKG5pX3BpLT5zdXBwb3J0X2NhY19s b25nX3Rlcm1fYXZlcmFnZSkgeworCQkJCQlzbWNfcmVzdWx0ID0gc2lfc2VuZF9tc2dfdG9fc21j KGFkZXYsIFBQU01DX0NBQ0xvbmdUZXJtQXZnRW5hYmxlKTsKKwkJCQkJaWYgKHNtY19yZXN1bHQg IT0gUFBTTUNfUmVzdWx0X09LKQorCQkJCQkJbmlfcGktPnN1cHBvcnRfY2FjX2xvbmdfdGVybV9h dmVyYWdlID0gZmFsc2U7CisJCQkJfQorCisJCQkJc21jX3Jlc3VsdCA9IHNpX3NlbmRfbXNnX3Rv X3NtYyhhZGV2LCBQUFNNQ19NU0dfRW5hYmxlQ2FjKTsKKwkJCQlpZiAoc21jX3Jlc3VsdCAhPSBQ UFNNQ19SZXN1bHRfT0spIHsKKwkJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQkJbmlfcGktPmNhY19l bmFibGVkID0gZmFsc2U7CisJCQkJfSBlbHNlIHsKKwkJCQkJbmlfcGktPmNhY19lbmFibGVkID0g dHJ1ZTsKKwkJCQl9CisKKwkJCQlpZiAoc2lfcGktPmVuYWJsZV9kdGUpIHsKKwkJCQkJc21jX3Jl c3VsdCA9IHNpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LCBQUFNNQ19NU0dfRW5hYmxlRFRFKTsKKwkJ CQkJaWYgKHNtY19yZXN1bHQgIT0gUFBTTUNfUmVzdWx0X09LKQorCQkJCQkJcmV0ID0gLUVJTlZB TDsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAobmlfcGktPmNhY19lbmFibGVkKSB7CisJCQlp ZiAoc2lfcGktPmVuYWJsZV9kdGUpCisJCQkJc21jX3Jlc3VsdCA9IHNpX3NlbmRfbXNnX3RvX3Nt YyhhZGV2LCBQUFNNQ19NU0dfRGlzYWJsZURURSk7CisKKwkJCXNtY19yZXN1bHQgPSBzaV9zZW5k X21zZ190b19zbWMoYWRldiwgUFBTTUNfTVNHX0Rpc2FibGVDYWMpOworCisJCQluaV9waS0+Y2Fj X2VuYWJsZWQgPSBmYWxzZTsKKworCQkJaWYgKG5pX3BpLT5zdXBwb3J0X2NhY19sb25nX3Rlcm1f YXZlcmFnZSkKKwkJCQlzbWNfcmVzdWx0ID0gc2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsIFBQU01D X0NBQ0xvbmdUZXJtQXZnRGlzYWJsZSk7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBzaV9pbml0X3NtY19zcGxsX3RhYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQoreworCXN0cnVjdCBuaV9wb3dlcl9pbmZvICpuaV9waSA9IG5pX2dldF9waShhZGV2KTsKKwlz dHJ1Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRfcGkoYWRldik7CisJU01DX1NJU0xB TkRTX1NQTExfRElWX1RBQkxFICpzcGxsX3RhYmxlOworCVNJU0xBTkRTX1NNQ19TQ0xLX1ZBTFVF IHNjbGtfcGFyYW1zOworCXUzMiBmYl9kaXYsIHBfZGl2OworCXUzMiBjbGtfcywgY2xrX3Y7CisJ dTMyIHNjbGsgPSAwOworCWludCByZXQgPSAwOworCXUzMiB0bXA7CisJaW50IGk7CisKKwlpZiAo c2lfcGktPnNwbGxfdGFibGVfc3RhcnQgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGxs X3RhYmxlID0ga3phbGxvYyhzaXplb2YoU01DX1NJU0xBTkRTX1NQTExfRElWX1RBQkxFKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKHNwbGxfdGFibGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisK Kwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJcmV0ID0gc2lfY2FsY3VsYXRlX3NjbGtf cGFyYW1zKGFkZXYsIHNjbGssICZzY2xrX3BhcmFtcyk7CisJCWlmIChyZXQpCisJCQlicmVhazsK KwkJcF9kaXYgPSAoc2Nsa19wYXJhbXMudkNHX1NQTExfRlVOQ19DTlRMICYgU1BMTF9QRElWX0Ff TUFTSykgPj4gU1BMTF9QRElWX0FfU0hJRlQ7CisJCWZiX2RpdiA9IChzY2xrX3BhcmFtcy52Q0df U1BMTF9GVU5DX0NOVExfMyAmIFNQTExfRkJfRElWX01BU0spID4+IFNQTExfRkJfRElWX1NISUZU OworCQljbGtfcyA9IChzY2xrX3BhcmFtcy52Q0dfU1BMTF9TUFJFQURfU1BFQ1RSVU0gJiBDTEtf U19NQVNLKSA+PiBDTEtfU19TSElGVDsKKwkJY2xrX3YgPSAoc2Nsa19wYXJhbXMudkNHX1NQTExf U1BSRUFEX1NQRUNUUlVNXzIgJiBDTEtfVl9NQVNLKSA+PiBDTEtfVl9TSElGVDsKKworCQlmYl9k aXYgJj0gfjB4MDAwMDFGRkY7CisJCWZiX2RpdiA+Pj0gMTsKKwkJY2xrX3YgPj49IDY7CisKKwkJ aWYgKHBfZGl2ICYgfihTTUNfU0lTTEFORFNfU1BMTF9ESVZfVEFCTEVfUERJVl9NQVNLID4+IFNN Q19TSVNMQU5EU19TUExMX0RJVl9UQUJMRV9QRElWX1NISUZUKSkKKwkJCXJldCA9IC1FSU5WQUw7 CisJCWlmIChmYl9kaXYgJiB+KFNNQ19TSVNMQU5EU19TUExMX0RJVl9UQUJMRV9GQkRJVl9NQVNL ID4+IFNNQ19TSVNMQU5EU19TUExMX0RJVl9UQUJMRV9GQkRJVl9TSElGVCkpCisJCQlyZXQgPSAt RUlOVkFMOworCQlpZiAoY2xrX3MgJiB+KFNNQ19TSVNMQU5EU19TUExMX0RJVl9UQUJMRV9DTEtT X01BU0sgPj4gU01DX1NJU0xBTkRTX1NQTExfRElWX1RBQkxFX0NMS1NfU0hJRlQpKQorCQkJcmV0 ID0gLUVJTlZBTDsKKwkJaWYgKGNsa192ICYgfihTTUNfU0lTTEFORFNfU1BMTF9ESVZfVEFCTEVf Q0xLVl9NQVNLID4+IFNNQ19TSVNMQU5EU19TUExMX0RJVl9UQUJMRV9DTEtWX1NISUZUKSkKKwkJ CXJldCA9IC1FSU5WQUw7CisKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCisJCXRtcCA9ICgoZmJf ZGl2IDw8IFNNQ19TSVNMQU5EU19TUExMX0RJVl9UQUJMRV9GQkRJVl9TSElGVCkgJiBTTUNfU0lT TEFORFNfU1BMTF9ESVZfVEFCTEVfRkJESVZfTUFTSykgfAorCQkJKChwX2RpdiA8PCBTTUNfU0lT TEFORFNfU1BMTF9ESVZfVEFCTEVfUERJVl9TSElGVCkgJiBTTUNfU0lTTEFORFNfU1BMTF9ESVZf VEFCTEVfUERJVl9NQVNLKTsKKwkJc3BsbF90YWJsZS0+ZnJlcVtpXSA9IGNwdV90b19iZTMyKHRt cCk7CisKKwkJdG1wID0gKChjbGtfdiA8PCBTTUNfU0lTTEFORFNfU1BMTF9ESVZfVEFCTEVfQ0xL Vl9TSElGVCkgJiBTTUNfU0lTTEFORFNfU1BMTF9ESVZfVEFCTEVfQ0xLVl9NQVNLKSB8CisJCQko KGNsa19zIDw8IFNNQ19TSVNMQU5EU19TUExMX0RJVl9UQUJMRV9DTEtTX1NISUZUKSAmIFNNQ19T SVNMQU5EU19TUExMX0RJVl9UQUJMRV9DTEtTX01BU0spOworCQlzcGxsX3RhYmxlLT5zc1tpXSA9 IGNwdV90b19iZTMyKHRtcCk7CisKKwkJc2NsayArPSA1MTI7CisJfQorCisKKwlpZiAoIXJldCkK KwkJcmV0ID0gc2lfY29weV9ieXRlc190b19zbWMoYWRldiwgc2lfcGktPnNwbGxfdGFibGVfc3Rh cnQsCisJCQkJCSAgICh1OCAqKXNwbGxfdGFibGUsIHNpemVvZihTTUNfU0lTTEFORFNfU1BMTF9E SVZfVEFCTEUpLAorCQkJCQkgICBzaV9waS0+c3JhbV9lbmQpOworCisJaWYgKHJldCkKKwkJbmlf cGktPmVuYWJsZV9wb3dlcl9jb250YWlubWVudCA9IGZhbHNlOworCisJa2ZyZWUoc3BsbF90YWJs ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3Qgc2lfZHBtX3F1aXJrIHsKKwl1MzIgY2hp cF92ZW5kb3I7CisJdTMyIGNoaXBfZGV2aWNlOworCXUzMiBzdWJzeXNfdmVuZG9yOworCXUzMiBz dWJzeXNfZGV2aWNlOworCXUzMiBtYXhfc2NsazsKKwl1MzIgbWF4X21jbGs7Cit9OworCisvKiBj YXJkcyB3aXRoIGRwbSBzdGFiaWxpdHkgcHJvYmxlbXMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2lfZHBt X3F1aXJrIHNpX2RwbV9xdWlya19saXN0W10gPSB7CisJLyogUElUQ0FJUk4gLSBodHRwczovL2J1 Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQ5MCAqLworCXsgUENJX1ZFTkRP Ul9JRF9BVEksIDB4NjgxMCwgMHgxNDYyLCAweDMwMzYsIDAsIDEyMDAwMCB9LAorCXsgUENJX1ZF TkRPUl9JRF9BVEksIDB4NjgxMSwgMHgxNzRiLCAweGUyNzEsIDAsIDEyMDAwMCB9LAorCXsgUENJ X1ZFTkRPUl9JRF9BVEksIDB4NjgxMCwgMHgxNzRiLCAweGUyNzEsIDg1MDAwLCA5MDAwMCB9LAor CXsgUENJX1ZFTkRPUl9JRF9BVEksIDB4NjgxMSwgMHgxNDYyLCAweDIwMTUsIDAsIDEyMDAwMCB9 LAorCXsgUENJX1ZFTkRPUl9JRF9BVEksIDB4NjgxMSwgMHgxMDQzLCAweDIwMTUsIDAsIDEyMDAw MCB9LAorCXsgMCwgMCwgMCwgMCB9LAorfTsKKworc3RhdGljIHUxNiBzaV9nZXRfbG93ZXJfb2Zf bGVha2FnZV9hbmRfdmNlX3ZvbHRhZ2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJ CQkgICB1MTYgdmNlX3ZvbHRhZ2UpCit7CisJdTE2IGhpZ2hlc3RfbGVha2FnZSA9IDA7CisJc3Ry dWN0IHNpX3Bvd2VyX2luZm8gKnNpX3BpID0gc2lfZ2V0X3BpKGFkZXYpOworCWludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IHNpX3BpLT5sZWFrYWdlX3ZvbHRhZ2UuY291bnQ7IGkrKyl7CisJCWlm IChoaWdoZXN0X2xlYWthZ2UgPCBzaV9waS0+bGVha2FnZV92b2x0YWdlLmVudHJpZXNbaV0udm9s dGFnZSkKKwkJCWhpZ2hlc3RfbGVha2FnZSA9IHNpX3BpLT5sZWFrYWdlX3ZvbHRhZ2UuZW50cmll c1tpXS52b2x0YWdlOworCX0KKworCWlmIChzaV9waS0+bGVha2FnZV92b2x0YWdlLmNvdW50ICYm IChoaWdoZXN0X2xlYWthZ2UgPCB2Y2Vfdm9sdGFnZSkpCisJCXJldHVybiBoaWdoZXN0X2xlYWth Z2U7CisKKwlyZXR1cm4gdmNlX3ZvbHRhZ2U7Cit9CisKK3N0YXRpYyBpbnQgc2lfZ2V0X3ZjZV9j bG9ja192b2x0YWdlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCSAgICB1MzIgZXZj bGssIHUzMiBlY2NsaywgdTE2ICp2b2x0YWdlKQoreworCXUzMiBpOworCWludCByZXQgPSAtRUlO VkFMOworCXN0cnVjdCBhbWRncHVfdmNlX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSAq dGFibGUgPQorCQkmYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS52Y2VfY2xvY2tfdm9sdGFnZV9kZXBl bmRlbmN5X3RhYmxlOworCisJaWYgKCgoZXZjbGsgPT0gMCkgJiYgKGVjY2xrID09IDApKSB8fAor CSAgICAodGFibGUgJiYgKHRhYmxlLT5jb3VudCA9PSAwKSkpIHsKKwkJKnZvbHRhZ2UgPSAwOwor CQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdGFibGUtPmNvdW50OyBpKyspIHsK KwkJaWYgKChldmNsayA8PSB0YWJsZS0+ZW50cmllc1tpXS5ldmNsaykgJiYKKwkJICAgIChlY2Ns ayA8PSB0YWJsZS0+ZW50cmllc1tpXS5lY2NsaykpIHsKKwkJCSp2b2x0YWdlID0gdGFibGUtPmVu dHJpZXNbaV0udjsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIGlmIG5v IG1hdGNoIHJldHVybiB0aGUgaGlnaGVzdCB2b2x0YWdlICovCisJaWYgKHJldCkKKwkJKnZvbHRh Z2UgPSB0YWJsZS0+ZW50cmllc1t0YWJsZS0+Y291bnQgLSAxXS52OworCisJKnZvbHRhZ2UgPSBz aV9nZXRfbG93ZXJfb2ZfbGVha2FnZV9hbmRfdmNlX3ZvbHRhZ2UoYWRldiwgKnZvbHRhZ2UpOwor CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGJvb2wgc2lfZHBtX3ZibGFua190b29fc2hvcnQo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisKKyAgICAgICAgdTMyIHZibGFua190aW1l ID0gYW1kZ3B1X2RwbV9nZXRfdmJsYW5rX3RpbWUoYWRldik7CisgICAgICAgIC8qIHdlIG5ldmVy IGhpdCB0aGUgbm9uLWdkZHI1IGxpbWl0IHNvIGRpc2FibGUgaXQgKi8KKyAgICAgICAgdTMyIHN3 aXRjaF9saW1pdCA9IGFkZXYtPm1jLnZyYW1fdHlwZSA9PSBBTURHUFVfVlJBTV9UWVBFX0dERFI1 ID8gNDUwIDogMDsKKworICAgICAgICBpZiAodmJsYW5rX3RpbWUgPCBzd2l0Y2hfbGltaXQpCisg ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg ICByZXR1cm4gZmFsc2U7CisKK30KKworc3RhdGljIGludCBuaV9jb3B5X2FuZF9zd2l0Y2hfYXJi X3NldHMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJdTMyIGFyYl9mcmVxX3NyYywg dTMyIGFyYl9mcmVxX2Rlc3QpCit7CisJdTMyIG1jX2FyYl9kcmFtX3RpbWluZzsKKwl1MzIgbWNf YXJiX2RyYW1fdGltaW5nMjsKKwl1MzIgYnVyc3RfdGltZTsKKwl1MzIgbWNfY2dfY29uZmlnOwor CisJc3dpdGNoIChhcmJfZnJlcV9zcmMpIHsKKyAgICAgICAgY2FzZSBNQ19DR19BUkJfRlJFUV9G MDoKKwkJbWNfYXJiX2RyYW1fdGltaW5nICA9IFJSRUczMihNQ19BUkJfRFJBTV9USU1JTkcpOwor CQltY19hcmJfZHJhbV90aW1pbmcyID0gUlJFRzMyKE1DX0FSQl9EUkFNX1RJTUlORzIpOworCQli dXJzdF90aW1lID0gKFJSRUczMihNQ19BUkJfQlVSU1RfVElNRSkgJiBTVEFURTBfTUFTSykgPj4g U1RBVEUwX1NISUZUOworCQlicmVhazsKKyAgICAgICAgY2FzZSBNQ19DR19BUkJfRlJFUV9GMToK KwkJbWNfYXJiX2RyYW1fdGltaW5nICA9IFJSRUczMihNQ19BUkJfRFJBTV9USU1JTkdfMSk7CisJ CW1jX2FyYl9kcmFtX3RpbWluZzIgPSBSUkVHMzIoTUNfQVJCX0RSQU1fVElNSU5HMl8xKTsKKwkJ YnVyc3RfdGltZSA9IChSUkVHMzIoTUNfQVJCX0JVUlNUX1RJTUUpICYgU1RBVEUxX01BU0spID4+ IFNUQVRFMV9TSElGVDsKKwkJYnJlYWs7CisgICAgICAgIGNhc2UgTUNfQ0dfQVJCX0ZSRVFfRjI6 CisJCW1jX2FyYl9kcmFtX3RpbWluZyAgPSBSUkVHMzIoTUNfQVJCX0RSQU1fVElNSU5HXzIpOwor CQltY19hcmJfZHJhbV90aW1pbmcyID0gUlJFRzMyKE1DX0FSQl9EUkFNX1RJTUlORzJfMik7CisJ CWJ1cnN0X3RpbWUgPSAoUlJFRzMyKE1DX0FSQl9CVVJTVF9USU1FKSAmIFNUQVRFMl9NQVNLKSA+ PiBTVEFURTJfU0hJRlQ7CisJCWJyZWFrOworICAgICAgICBjYXNlIE1DX0NHX0FSQl9GUkVRX0Yz OgorCQltY19hcmJfZHJhbV90aW1pbmcgID0gUlJFRzMyKE1DX0FSQl9EUkFNX1RJTUlOR18zKTsK KwkJbWNfYXJiX2RyYW1fdGltaW5nMiA9IFJSRUczMihNQ19BUkJfRFJBTV9USU1JTkcyXzMpOwor CQlidXJzdF90aW1lID0gKFJSRUczMihNQ19BUkJfQlVSU1RfVElNRSkgJiBTVEFURTNfTUFTSykg Pj4gU1RBVEUzX1NISUZUOworCQlicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJc3dpdGNoIChhcmJfZnJlcV9kZXN0KSB7CisgICAgICAgIGNhc2UgTUNf Q0dfQVJCX0ZSRVFfRjA6CisJCVdSRUczMihNQ19BUkJfRFJBTV9USU1JTkcsIG1jX2FyYl9kcmFt X3RpbWluZyk7CisJCVdSRUczMihNQ19BUkJfRFJBTV9USU1JTkcyLCBtY19hcmJfZHJhbV90aW1p bmcyKTsKKwkJV1JFRzMyX1AoTUNfQVJCX0JVUlNUX1RJTUUsIFNUQVRFMChidXJzdF90aW1lKSwg flNUQVRFMF9NQVNLKTsKKwkJYnJlYWs7CisgICAgICAgIGNhc2UgTUNfQ0dfQVJCX0ZSRVFfRjE6 CisJCVdSRUczMihNQ19BUkJfRFJBTV9USU1JTkdfMSwgbWNfYXJiX2RyYW1fdGltaW5nKTsKKwkJ V1JFRzMyKE1DX0FSQl9EUkFNX1RJTUlORzJfMSwgbWNfYXJiX2RyYW1fdGltaW5nMik7CisJCVdS RUczMl9QKE1DX0FSQl9CVVJTVF9USU1FLCBTVEFURTEoYnVyc3RfdGltZSksIH5TVEFURTFfTUFT Syk7CisJCWJyZWFrOworICAgICAgICBjYXNlIE1DX0NHX0FSQl9GUkVRX0YyOgorCQlXUkVHMzIo TUNfQVJCX0RSQU1fVElNSU5HXzIsIG1jX2FyYl9kcmFtX3RpbWluZyk7CisJCVdSRUczMihNQ19B UkJfRFJBTV9USU1JTkcyXzIsIG1jX2FyYl9kcmFtX3RpbWluZzIpOworCQlXUkVHMzJfUChNQ19B UkJfQlVSU1RfVElNRSwgU1RBVEUyKGJ1cnN0X3RpbWUpLCB+U1RBVEUyX01BU0spOworCQlicmVh azsKKyAgICAgICAgY2FzZSBNQ19DR19BUkJfRlJFUV9GMzoKKwkJV1JFRzMyKE1DX0FSQl9EUkFN X1RJTUlOR18zLCBtY19hcmJfZHJhbV90aW1pbmcpOworCQlXUkVHMzIoTUNfQVJCX0RSQU1fVElN SU5HMl8zLCBtY19hcmJfZHJhbV90aW1pbmcyKTsKKwkJV1JFRzMyX1AoTUNfQVJCX0JVUlNUX1RJ TUUsIFNUQVRFMyhidXJzdF90aW1lKSwgflNUQVRFM19NQVNLKTsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWNfY2dfY29uZmlnID0gUlJFRzMyKE1DX0NH X0NPTkZJRykgfCAweDAwMDAwMDBGOworCVdSRUczMihNQ19DR19DT05GSUcsIG1jX2NnX2NvbmZp Zyk7CisJV1JFRzMyX1AoTUNfQVJCX0NHLCBDR19BUkJfUkVRKGFyYl9mcmVxX2Rlc3QpLCB+Q0df QVJCX1JFUV9NQVNLKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuaV91cGRhdGVf Y3VycmVudF9wcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCSAgc3RydWN0IGFtZGdw dV9wcyAqcnBzKQoreworCXN0cnVjdCAgc2lfcHMgKm5ld19wcyA9IHNpX2dldF9wcyhycHMpOwor CXN0cnVjdCBldmVyZ3JlZW5fcG93ZXJfaW5mbyAqZWdfcGkgPSBldmVyZ3JlZW5fZ2V0X3BpKGFk ZXYpOworICAgICAgICBzdHJ1Y3QgbmlfcG93ZXJfaW5mbyAqbmlfcGkgPSBuaV9nZXRfcGkoYWRl dik7CisKKwllZ19waS0+Y3VycmVudF9ycHMgPSAqcnBzOworCW5pX3BpLT5jdXJyZW50X3BzID0g Km5ld19wczsKKwllZ19waS0+Y3VycmVudF9ycHMucHNfcHJpdiA9ICZuaV9waS0+Y3VycmVudF9w czsKK30KKworc3RhdGljIHZvaWQgbmlfdXBkYXRlX3JlcXVlc3RlZF9wcyhzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwKKwkJCSAgICBzdHJ1Y3QgYW1kZ3B1X3BzICpycHMpCit7CisJc3RydWN0 ICBzaV9wcyAqbmV3X3BzID0gc2lfZ2V0X3BzKHJwcyk7CisJc3RydWN0IGV2ZXJncmVlbl9wb3dl cl9pbmZvICplZ19waSA9IGV2ZXJncmVlbl9nZXRfcGkoYWRldik7CisgICAgICAgIHN0cnVjdCBu aV9wb3dlcl9pbmZvICpuaV9waSA9IG5pX2dldF9waShhZGV2KTsKKworCWVnX3BpLT5yZXF1ZXN0 ZWRfcnBzID0gKnJwczsKKwluaV9waS0+cmVxdWVzdGVkX3BzID0gKm5ld19wczsKKwllZ19waS0+ cmVxdWVzdGVkX3Jwcy5wc19wcml2ID0gJm5pX3BpLT5yZXF1ZXN0ZWRfcHM7Cit9CisKK3N0YXRp YyB2b2lkIG5pX3NldF91dmRfY2xvY2tfYmVmb3JlX3NldF9lbmdfY2xvY2soc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsCisJCQkJCSAgIHN0cnVjdCBhbWRncHVfcHMgKm5ld19wcywKKwkJCQkJ ICAgc3RydWN0IGFtZGdwdV9wcyAqb2xkX3BzKQoreworCXN0cnVjdCAgc2lfcHMgKm5ld19zdGF0 ZSA9IHNpX2dldF9wcyhuZXdfcHMpOworCXN0cnVjdCAgc2lfcHMgKmN1cnJlbnRfc3RhdGUgPSBz aV9nZXRfcHMob2xkX3BzKTsKKworCWlmICgobmV3X3BzLT52Y2xrID09IG9sZF9wcy0+dmNsaykg JiYKKwkgICAgKG5ld19wcy0+ZGNsayA9PSBvbGRfcHMtPmRjbGspKQorCQlyZXR1cm47CisKKwlp ZiAobmV3X3N0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbHNbbmV3X3N0YXRlLT5wZXJmb3JtYW5jZV9s ZXZlbF9jb3VudCAtIDFdLnNjbGsgPj0KKwkgICAgY3VycmVudF9zdGF0ZS0+cGVyZm9ybWFuY2Vf bGV2ZWxzW2N1cnJlbnRfc3RhdGUtPnBlcmZvcm1hbmNlX2xldmVsX2NvdW50IC0gMV0uc2NsaykK KwkJcmV0dXJuOworCisJYW1kZ3B1X2FzaWNfc2V0X3V2ZF9jbG9ja3MoYWRldiwgbmV3X3BzLT52 Y2xrLCBuZXdfcHMtPmRjbGspOworfQorCitzdGF0aWMgdm9pZCBuaV9zZXRfdXZkX2Nsb2NrX2Fm dGVyX3NldF9lbmdfY2xvY2soc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJCSAgc3Ry dWN0IGFtZGdwdV9wcyAqbmV3X3BzLAorCQkJCQkgIHN0cnVjdCBhbWRncHVfcHMgKm9sZF9wcykK K3sKKwlzdHJ1Y3QgIHNpX3BzICpuZXdfc3RhdGUgPSBzaV9nZXRfcHMobmV3X3BzKTsKKwlzdHJ1 Y3QgIHNpX3BzICpjdXJyZW50X3N0YXRlID0gc2lfZ2V0X3BzKG9sZF9wcyk7CisKKwlpZiAoKG5l d19wcy0+dmNsayA9PSBvbGRfcHMtPnZjbGspICYmCisJICAgIChuZXdfcHMtPmRjbGsgPT0gb2xk X3BzLT5kY2xrKSkKKwkJcmV0dXJuOworCisJaWYgKG5ld19zdGF0ZS0+cGVyZm9ybWFuY2VfbGV2 ZWxzW25ld19zdGF0ZS0+cGVyZm9ybWFuY2VfbGV2ZWxfY291bnQgLSAxXS5zY2xrIDwKKwkgICAg Y3VycmVudF9zdGF0ZS0+cGVyZm9ybWFuY2VfbGV2ZWxzW2N1cnJlbnRfc3RhdGUtPnBlcmZvcm1h bmNlX2xldmVsX2NvdW50IC0gMV0uc2NsaykKKwkJcmV0dXJuOworCisJYW1kZ3B1X2FzaWNfc2V0 X3V2ZF9jbG9ja3MoYWRldiwgbmV3X3BzLT52Y2xrLCBuZXdfcHMtPmRjbGspOworfQorCitzdGF0 aWMgdTE2IGJ0Y19maW5kX3ZvbHRhZ2Uoc3RydWN0IGF0b21fdm9sdGFnZV90YWJsZSAqdGFibGUs IHUxNiB2b2x0YWdlKQoreworICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgdGFibGUtPmNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAodm9s dGFnZSA8PSB0YWJsZS0+ZW50cmllc1tpXS52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiB0YWJsZS0+ZW50cmllc1tpXS52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJl dHVybiB0YWJsZS0+ZW50cmllc1t0YWJsZS0+Y291bnQgLSAxXS52YWx1ZTsKK30KKworc3RhdGlj IHUzMiBidGNfZmluZF92YWxpZF9jbG9jayhzdHJ1Y3QgYW1kZ3B1X2Nsb2NrX2FycmF5ICpjbG9j a3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBtYXhfY2xvY2ssIHUzMiBy ZXF1ZXN0ZWRfY2xvY2spCit7CisgICAgICAgIHVuc2lnbmVkIGludCBpOworCisgICAgICAgIGlm ICgoY2xvY2tzID09IE5VTEwpIHx8IChjbG9ja3MtPmNvdW50ID09IDApKQorICAgICAgICAgICAg ICAgIHJldHVybiAocmVxdWVzdGVkX2Nsb2NrIDwgbWF4X2Nsb2NrKSA/IHJlcXVlc3RlZF9jbG9j ayA6IG1heF9jbG9jazsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2xvY2tzLT5jb3VudDsg aSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGNsb2Nrcy0+dmFsdWVzW2ldID49IHJlcXVlc3Rl ZF9jbG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2xvY2tzLT52YWx1ZXNb aV0gPCBtYXhfY2xvY2spID8gY2xvY2tzLT52YWx1ZXNbaV0gOiBtYXhfY2xvY2s7CisgICAgICAg IH0KKworICAgICAgICByZXR1cm4gKGNsb2Nrcy0+dmFsdWVzW2Nsb2Nrcy0+Y291bnQgLSAxXSA8 IG1heF9jbG9jaykgPworICAgICAgICAgICAgICAgIGNsb2Nrcy0+dmFsdWVzW2Nsb2Nrcy0+Y291 bnQgLSAxXSA6IG1heF9jbG9jazsKK30KKworc3RhdGljIHUzMiBidGNfZ2V0X3ZhbGlkX21jbGso c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1MzIgbWF4X21jbGssIHUzMiByZXF1ZXN0ZWRfbWNsaykKK3sKKyAgICAgICAgcmV0dXJuIGJ0 Y19maW5kX3ZhbGlkX2Nsb2NrKCZhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZhbGlkX21jbGtfdmFs dWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X21jbGssIHJlcXVl c3RlZF9tY2xrKTsKK30KKworc3RhdGljIHUzMiBidGNfZ2V0X3ZhbGlkX3NjbGsoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgbWF4 X3NjbGssIHUzMiByZXF1ZXN0ZWRfc2NsaykKK3sKKyAgICAgICAgcmV0dXJuIGJ0Y19maW5kX3Zh bGlkX2Nsb2NrKCZhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZhbGlkX3NjbGtfdmFsdWVzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3NjbGssIHJlcXVlc3RlZF9zY2xr KTsKK30KKwordm9pZCBidGNfZ2V0X21heF9jbG9ja19mcm9tX3ZvbHRhZ2VfZGVwZW5kZW5jeV90 YWJsZShzdHJ1Y3QgYW1kZ3B1X2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSAqdGFibGUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUz MiAqbWF4X2Nsb2NrKQoreworICAgICAgICB1MzIgaSwgY2xvY2sgPSAwOworCisgICAgICAgIGlm ICgodGFibGUgPT0gTlVMTCkgfHwgKHRhYmxlLT5jb3VudCA9PSAwKSkgeworICAgICAgICAgICAg ICAgICptYXhfY2xvY2sgPSBjbG9jazsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg IH0KKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGFibGUtPmNvdW50OyBpKyspIHsKKyAgICAg ICAgICAgICAgICBpZiAoY2xvY2sgPCB0YWJsZS0+ZW50cmllc1tpXS5jbGspCisgICAgICAgICAg ICAgICAgICAgICAgICBjbG9jayA9IHRhYmxlLT5lbnRyaWVzW2ldLmNsazsKKyAgICAgICAgfQor ICAgICAgICAqbWF4X2Nsb2NrID0gY2xvY2s7Cit9CisKK3N0YXRpYyB2b2lkIGJ0Y19hcHBseV92 b2x0YWdlX2RlcGVuZGVuY3lfcnVsZXMoc3RydWN0IGFtZGdwdV9jbG9ja192b2x0YWdlX2RlcGVu ZGVuY3lfdGFibGUgKnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHUzMiBjbG9jaywgdTE2IG1heF92b2x0YWdlLCB1MTYgKnZvbHRhZ2UpCit7CisgICAgICAg IHUzMiBpOworCisgICAgICAgIGlmICgodGFibGUgPT0gTlVMTCkgfHwgKHRhYmxlLT5jb3VudCA9 PSAwKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZm9yIChpPSAwOyBpIDwg dGFibGUtPmNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoY2xvY2sgPD0gdGFibGUt PmVudHJpZXNbaV0uY2xrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnZvbHRhZ2Ug PCB0YWJsZS0+ZW50cmllc1tpXS52KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq dm9sdGFnZSA9ICh1MTYpKCh0YWJsZS0+ZW50cmllc1tpXS52IDwgbWF4X3ZvbHRhZ2UpID8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUtPmVu dHJpZXNbaV0udiA6IG1heF92b2x0YWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAqdm9sdGFnZSA9ICgq dm9sdGFnZSA+IG1heF92b2x0YWdlKSA/ICp2b2x0YWdlIDogbWF4X3ZvbHRhZ2U7Cit9CisKK3N0 YXRpYyB2b2lkIGJ0Y19hZGp1c3RfY2xvY2tfY29tYmluYXRpb25zKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3QgYW1kZ3B1X2Nsb2NrX2FuZF92b2x0YWdlX2xpbWl0cyAqbWF4X2xpbWl0cywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJ2N3h4X3BsICpwbCkKK3sKKworICAg ICAgICBpZiAoKHBsLT5tY2xrID09IDApIHx8IChwbC0+c2NsayA9PSAwKSkKKyAgICAgICAgICAg ICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHBsLT5tY2xrID09IHBsLT5zY2xrKQorICAgICAg ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocGwtPm1jbGsgPiBwbC0+c2Nsaykgewor ICAgICAgICAgICAgICAgIGlmICgoKHBsLT5tY2xrICsgKHBsLT5zY2xrIC0gMSkpIC8gcGwtPnNj bGspID4gYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS5tY2xrX3NjbGtfcmF0aW8pCisgICAgICAgICAg ICAgICAgICAgICAgICBwbC0+c2NsayA9IGJ0Y19nZXRfdmFsaWRfc2NsayhhZGV2LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbWl0 cy0+c2NsaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChwbC0+bWNsayArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGFkZXYtPnBtLmRwbS5keW5fc3RhdGUubWNsa19zY2xrX3JhdGlv IC0gMSkpIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFkZXYtPnBtLmRwbS5keW5fc3RhdGUubWNsa19zY2xrX3JhdGlvKTsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKHBsLT5zY2xrIC0gcGwtPm1jbGspID4gYWRl di0+cG0uZHBtLmR5bl9zdGF0ZS5zY2xrX21jbGtfZGVsdGEpCisgICAgICAgICAgICAgICAgICAg ICAgICBwbC0+bWNsayA9IGJ0Y19nZXRfdmFsaWRfbWNsayhhZGV2LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbWl0cy0+bWNsaywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBs LT5zY2xrIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFkZXYtPnBtLmRwbS5keW5fc3RhdGUuc2Nsa19tY2xrX2RlbHRhKTsKKyAgICAgICAg fQorfQorCitzdGF0aWMgdm9pZCBidGNfYXBwbHlfdm9sdGFnZV9kZWx0YV9ydWxlcyhzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dTE2IG1heF92ZGRjLCB1MTYgbWF4X3ZkZGNpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1MTYgKnZkZGMsIHUxNiAqdmRkY2kpCit7CisgICAgICAgIHN0cnVjdCBldmVyZ3Jl ZW5fcG93ZXJfaW5mbyAqZWdfcGkgPSBldmVyZ3JlZW5fZ2V0X3BpKGFkZXYpOworICAgICAgICB1 MTYgbmV3X3ZvbHRhZ2U7CisKKyAgICAgICAgaWYgKCgwID09ICp2ZGRjKSB8fCAoMCA9PSAqdmRk Y2kpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoKnZkZGMgPiAqdmRk Y2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoKCp2ZGRjIC0gKnZkZGNpKSA+IGFkZXYtPnBtLmRw bS5keW5fc3RhdGUudmRkY192ZGRjaV9kZWx0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAg bmV3X3ZvbHRhZ2UgPSBidGNfZmluZF92b2x0YWdlKCZlZ19waS0+dmRkY2lfdm9sdGFnZV90YWJs ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKnZkZGMgLSBhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfdmRkY2lfZGVsdGEpKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICp2ZGRjaSA9IChuZXdfdm9sdGFnZSA8IG1heF92ZGRjaSkg PyBuZXdfdm9sdGFnZSA6IG1heF92ZGRjaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCgqdmRkY2kgLSAqdmRkYykgPiBhZGV2LT5wbS5k cG0uZHluX3N0YXRlLnZkZGNfdmRkY2lfZGVsdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IG5ld192b2x0YWdlID0gYnRjX2ZpbmRfdm9sdGFnZSgmZWdfcGktPnZkZGNfdm9sdGFnZV90YWJs ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKnZkZGNpIC0gYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS52ZGRjX3ZkZGNpX2RlbHRhKSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAqdmRkYyA9IChuZXdfdm9sdGFnZSA8IG1heF92ZGRjKSA/ IG5ld192b2x0YWdlIDogbWF4X3ZkZGM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9 CisKK3N0YXRpYyBlbnVtIGFtZGdwdV9wY2llX2dlbiByNjAwX2dldF9wY2llX2dlbl9zdXBwb3J0 KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCQkgICAgICAgdTMyIHN5c19tYXNrLAor CQkJCQkgICAgICAgZW51bSBhbWRncHVfcGNpZV9nZW4gYXNpY19nZW4sCisJCQkJCSAgICAgICBl bnVtIGFtZGdwdV9wY2llX2dlbiBkZWZhdWx0X2dlbikKK3sKKwlzd2l0Y2ggKGFzaWNfZ2VuKSB7 CisJY2FzZSBBTURHUFVfUENJRV9HRU4xOgorCQlyZXR1cm4gQU1ER1BVX1BDSUVfR0VOMTsKKwlj YXNlIEFNREdQVV9QQ0lFX0dFTjI6CisJCXJldHVybiBBTURHUFVfUENJRV9HRU4yOworCWNhc2Ug QU1ER1BVX1BDSUVfR0VOMzoKKwkJcmV0dXJuIEFNREdQVV9QQ0lFX0dFTjM7CisJZGVmYXVsdDoK KwkJaWYgKChzeXNfbWFzayAmIERSTV9QQ0lFX1NQRUVEXzgwKSAmJiAoZGVmYXVsdF9nZW4gPT0g QU1ER1BVX1BDSUVfR0VOMykpCisJCQlyZXR1cm4gQU1ER1BVX1BDSUVfR0VOMzsKKwkJZWxzZSBp ZiAoKHN5c19tYXNrICYgRFJNX1BDSUVfU1BFRURfNTApICYmIChkZWZhdWx0X2dlbiA9PSBBTURH UFVfUENJRV9HRU4yKSkKKwkJCXJldHVybiBBTURHUFVfUENJRV9HRU4yOworCQllbHNlCisJCQly ZXR1cm4gQU1ER1BVX1BDSUVfR0VOMTsKKwl9CisJcmV0dXJuIEFNREdQVV9QQ0lFX0dFTjE7Cit9 CisKK3N0YXRpYyB2b2lkIHI2MDBfY2FsY3VsYXRlX3VfYW5kX3AodTMyIGksIHUzMiByX2MsIHUz MiBwX2IsCisJCQkgICAgdTMyICpwLCB1MzIgKnUpCit7CisJdTMyIGJfYyA9IDA7CisJdTMyIGlf YzsKKwl1MzIgdG1wOworCisJaV9jID0gKGkgKiByX2MpIC8gMTAwOworCXRtcCA9IGlfYyA+PiBw X2I7CisKKwl3aGlsZSAodG1wKSB7CisJCWJfYysrOworCQl0bXAgPj49IDE7CisJfQorCisJKnUg PSAoYl9jICsgMSkgLyAyOworCSpwID0gaV9jIC8gKDEgPDwgKDIgKiAoKnUpKSk7Cit9CisKK3N0 YXRpYyBpbnQgcjYwMF9jYWxjdWxhdGVfYXQodTMyIHQsIHUzMiBoLCB1MzIgZmgsIHUzMiBmbCwg dTMyICp0bCwgdTMyICp0aCkKK3sKKwl1MzIgaywgYSwgYWgsIGFsOworCXUzMiB0MTsKKworCWlm ICgoZmwgPT0gMCkgfHwgKGZoID09IDApIHx8IChmbCA+IGZoKSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlrID0gKDEwMCAqIGZoKSAvIGZsOworCXQxID0gKHQgKiAoayAtIDEwMCkpOworCWEgPSAo MTAwMCAqICgxMDAgKiBoICsgdDEpKSAvICgxMDAwMCArICh0MSAvIDEwMCkpOworCWEgPSAoYSAr IDUpIC8gMTA7CisJYWggPSAoKGEgKiB0KSArIDUwMDApIC8gMTAwMDA7CisJYWwgPSBhIC0gYWg7 CisKKwkqdGggPSB0IC0gYWg7CisJKnRsID0gdCArIGFsOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBib29sIHI2MDBfaXNfdXZkX3N0YXRlKHUzMiBjbGFzcywgdTMyIGNsYXNzMikKK3sKKwlp ZiAoY2xhc3MgJiBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VWRFNUQVRFKQorCQlyZXR1cm4g dHJ1ZTsKKwlpZiAoY2xhc3MgJiBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX0hEMlNUQVRFKQor CQlyZXR1cm4gdHJ1ZTsKKwlpZiAoY2xhc3MgJiBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX0hE U1RBVEUpCisJCXJldHVybiB0cnVlOworCWlmIChjbGFzcyAmIEFUT01fUFBMSUJfQ0xBU1NJRklD QVRJT05fU0RTVEFURSkKKwkJcmV0dXJuIHRydWU7CisJaWYgKGNsYXNzMiAmIEFUT01fUFBMSUJf Q0xBU1NJRklDQVRJT04yX01WQykKKwkJcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOworfQor CitzdGF0aWMgdTggcnY3NzBfZ2V0X21lbW9yeV9tb2R1bGVfaW5kZXgoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCit7CisJcmV0dXJuICh1OCkgKChSUkVHMzIoQklPU19TQ1JBVENIXzQpID4+ IDE2KSAmIDB4ZmYpOworfQorCitzdGF0aWMgdm9pZCBydjc3MF9nZXRfbWF4X3ZkZGMoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IHJ2N3h4X3Bvd2VyX2luZm8gKnBpID0g cnY3NzBfZ2V0X3BpKGFkZXYpOworCXUxNiB2ZGRjOworCisJaWYgKGFtZGdwdV9hdG9tYmlvc19n ZXRfbWF4X3ZkZGMoYWRldiwgMCwgMCwgJnZkZGMpKQorCQlwaS0+bWF4X3ZkZGMgPSAwOworCWVs c2UKKwkJcGktPm1heF92ZGRjID0gdmRkYzsKK30KKworc3RhdGljIHZvaWQgcnY3NzBfZ2V0X2Vu Z2luZV9tZW1vcnlfc3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IHJ2 N3h4X3Bvd2VyX2luZm8gKnBpID0gcnY3NzBfZ2V0X3BpKGFkZXYpOworCXN0cnVjdCBhbWRncHVf YXRvbV9zcyBzczsKKworCXBpLT5zY2xrX3NzID0gYW1kZ3B1X2F0b21iaW9zX2dldF9hc2ljX3Nz X2luZm8oYWRldiwgJnNzLAorCQkJCQkJICAgICAgIEFTSUNfSU5URVJOQUxfRU5HSU5FX1NTLCAw KTsKKwlwaS0+bWNsa19zcyA9IGFtZGdwdV9hdG9tYmlvc19nZXRfYXNpY19zc19pbmZvKGFkZXYs ICZzcywKKwkJCQkJCSAgICAgICBBU0lDX0lOVEVSTkFMX01FTU9SWV9TUywgMCk7CisKKwlpZiAo cGktPnNjbGtfc3MgfHwgcGktPm1jbGtfc3MpCisJCXBpLT5keW5hbWljX3NzID0gdHJ1ZTsKKwll bHNlCisJCXBpLT5keW5hbWljX3NzID0gZmFsc2U7Cit9CisKKworc3RhdGljIHZvaWQgc2lfYXBw bHlfc3RhdGVfYWRqdXN0X3J1bGVzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCQlz dHJ1Y3QgYW1kZ3B1X3BzICpycHMpCit7CisJc3RydWN0ICBzaV9wcyAqcHMgPSBzaV9nZXRfcHMo cnBzKTsKKwlzdHJ1Y3QgYW1kZ3B1X2Nsb2NrX2FuZF92b2x0YWdlX2xpbWl0cyAqbWF4X2xpbWl0 czsKKwlib29sIGRpc2FibGVfbWNsa19zd2l0Y2hpbmcgPSBmYWxzZTsKKwlib29sIGRpc2FibGVf c2Nsa19zd2l0Y2hpbmcgPSBmYWxzZTsKKwl1MzIgbWNsaywgc2NsazsKKwl1MTYgdmRkYywgdmRk Y2ksIG1pbl92Y2Vfdm9sdGFnZSA9IDA7CisJdTMyIG1heF9zY2xrX3ZkZGMsIG1heF9tY2xrX3Zk ZGNpLCBtYXhfbWNsa192ZGRjOworCXUzMiBtYXhfc2NsayA9IDAsIG1heF9tY2xrID0gMDsKKwlp bnQgaTsKKwlzdHJ1Y3Qgc2lfZHBtX3F1aXJrICpwID0gc2lfZHBtX3F1aXJrX2xpc3Q7CisKKwkv KiBBcHBseSBkcG0gcXVpcmtzICovCisJd2hpbGUgKHAgJiYgcC0+Y2hpcF9kZXZpY2UgIT0gMCkg eworCQlpZiAoYWRldi0+cGRldi0+dmVuZG9yID09IHAtPmNoaXBfdmVuZG9yICYmCisJCSAgICBh ZGV2LT5wZGV2LT5kZXZpY2UgPT0gcC0+Y2hpcF9kZXZpY2UgJiYKKwkJICAgIGFkZXYtPnBkZXYt PnN1YnN5c3RlbV92ZW5kb3IgPT0gcC0+c3Vic3lzX3ZlbmRvciAmJgorCQkgICAgYWRldi0+cGRl di0+c3Vic3lzdGVtX2RldmljZSA9PSBwLT5zdWJzeXNfZGV2aWNlKSB7CisJCQltYXhfc2NsayA9 IHAtPm1heF9zY2xrOworCQkJbWF4X21jbGsgPSBwLT5tYXhfbWNsazsKKwkJCWJyZWFrOworCQl9 CisJCSsrcDsKKwl9CisKKwlpZiAocnBzLT52Y2VfYWN0aXZlKSB7CisJCXJwcy0+ZXZjbGsgPSBh ZGV2LT5wbS5kcG0udmNlX3N0YXRlc1thZGV2LT5wbS5kcG0udmNlX2xldmVsXS5ldmNsazsKKwkJ cnBzLT5lY2NsayA9IGFkZXYtPnBtLmRwbS52Y2Vfc3RhdGVzW2FkZXYtPnBtLmRwbS52Y2VfbGV2 ZWxdLmVjY2xrOworCQlzaV9nZXRfdmNlX2Nsb2NrX3ZvbHRhZ2UoYWRldiwgcnBzLT5ldmNsaywg cnBzLT5lY2NsaywKKwkJCQkJICZtaW5fdmNlX3ZvbHRhZ2UpOworCX0gZWxzZSB7CisJCXJwcy0+ ZXZjbGsgPSAwOworCQlycHMtPmVjY2xrID0gMDsKKwl9CisKKwlpZiAoKGFkZXYtPnBtLmRwbS5u ZXdfYWN0aXZlX2NydGNfY291bnQgPiAxKSB8fAorCSAgICBzaV9kcG1fdmJsYW5rX3Rvb19zaG9y dChhZGV2KSkKKwkJZGlzYWJsZV9tY2xrX3N3aXRjaGluZyA9IHRydWU7CisKKwlpZiAocnBzLT52 Y2xrIHx8IHJwcy0+ZGNsaykgeworCQlkaXNhYmxlX21jbGtfc3dpdGNoaW5nID0gdHJ1ZTsKKwkJ ZGlzYWJsZV9zY2xrX3N3aXRjaGluZyA9IHRydWU7CisJfQorCisJaWYgKGFkZXYtPnBtLmRwbS5h Y19wb3dlcikKKwkJbWF4X2xpbWl0cyA9ICZhZGV2LT5wbS5kcG0uZHluX3N0YXRlLm1heF9jbG9j a192b2x0YWdlX29uX2FjOworCWVsc2UKKwkJbWF4X2xpbWl0cyA9ICZhZGV2LT5wbS5kcG0uZHlu X3N0YXRlLm1heF9jbG9ja192b2x0YWdlX29uX2RjOworCisJZm9yIChpID0gcHMtPnBlcmZvcm1h bmNlX2xldmVsX2NvdW50IC0gMjsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKHBzLT5wZXJmb3JtYW5j ZV9sZXZlbHNbaV0udmRkYyA+IHBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaSsxXS52ZGRjKQorCQkJ cHMtPnBlcmZvcm1hbmNlX2xldmVsc1tpXS52ZGRjID0gcHMtPnBlcmZvcm1hbmNlX2xldmVsc1tp KzFdLnZkZGM7CisJfQorCWlmIChhZGV2LT5wbS5kcG0uYWNfcG93ZXIgPT0gZmFsc2UpIHsKKwkJ Zm9yIChpID0gMDsgaSA8IHBzLT5wZXJmb3JtYW5jZV9sZXZlbF9jb3VudDsgaSsrKSB7CisJCQlp ZiAocHMtPnBlcmZvcm1hbmNlX2xldmVsc1tpXS5tY2xrID4gbWF4X2xpbWl0cy0+bWNsaykKKwkJ CQlwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLm1jbGsgPSBtYXhfbGltaXRzLT5tY2xrOworCQkJ aWYgKHBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0uc2NsayA+IG1heF9saW1pdHMtPnNjbGspCisJ CQkJcHMtPnBlcmZvcm1hbmNlX2xldmVsc1tpXS5zY2xrID0gbWF4X2xpbWl0cy0+c2NsazsKKwkJ CWlmIChwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLnZkZGMgPiBtYXhfbGltaXRzLT52ZGRjKQor CQkJCXBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0udmRkYyA9IG1heF9saW1pdHMtPnZkZGM7CisJ CQlpZiAocHMtPnBlcmZvcm1hbmNlX2xldmVsc1tpXS52ZGRjaSA+IG1heF9saW1pdHMtPnZkZGNp KQorCQkJCXBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0udmRkY2kgPSBtYXhfbGltaXRzLT52ZGRj aTsKKwkJfQorCX0KKworCS8qIGxpbWl0IGNsb2NrcyB0byBtYXggc3VwcG9ydGVkIGNsb2NrcyBi YXNlZCBvbiB2b2x0YWdlIGRlcGVuZGVuY3kgdGFibGVzICovCisJYnRjX2dldF9tYXhfY2xvY2tf ZnJvbV92b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUoJmFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmRk Y19kZXBlbmRlbmN5X29uX3NjbGssCisJCQkJCQkJJm1heF9zY2xrX3ZkZGMpOworCWJ0Y19nZXRf bWF4X2Nsb2NrX2Zyb21fdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlKCZhZGV2LT5wbS5kcG0uZHlu X3N0YXRlLnZkZGNpX2RlcGVuZGVuY3lfb25fbWNsaywKKwkJCQkJCQkmbWF4X21jbGtfdmRkY2kp OworCWJ0Y19nZXRfbWF4X2Nsb2NrX2Zyb21fdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlKCZhZGV2 LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9tY2xrLAorCQkJCQkJCSZtYXhf bWNsa192ZGRjKTsKKworCWZvciAoaSA9IDA7IGkgPCBwcy0+cGVyZm9ybWFuY2VfbGV2ZWxfY291 bnQ7IGkrKykgeworCQlpZiAobWF4X3NjbGtfdmRkYykgeworCQkJaWYgKHBzLT5wZXJmb3JtYW5j ZV9sZXZlbHNbaV0uc2NsayA+IG1heF9zY2xrX3ZkZGMpCisJCQkJcHMtPnBlcmZvcm1hbmNlX2xl dmVsc1tpXS5zY2xrID0gbWF4X3NjbGtfdmRkYzsKKwkJfQorCQlpZiAobWF4X21jbGtfdmRkY2kp IHsKKwkJCWlmIChwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLm1jbGsgPiBtYXhfbWNsa192ZGRj aSkKKwkJCQlwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLm1jbGsgPSBtYXhfbWNsa192ZGRjaTsK KwkJfQorCQlpZiAobWF4X21jbGtfdmRkYykgeworCQkJaWYgKHBzLT5wZXJmb3JtYW5jZV9sZXZl bHNbaV0ubWNsayA+IG1heF9tY2xrX3ZkZGMpCisJCQkJcHMtPnBlcmZvcm1hbmNlX2xldmVsc1tp XS5tY2xrID0gbWF4X21jbGtfdmRkYzsKKwkJfQorCQlpZiAobWF4X21jbGspIHsKKwkJCWlmIChw cy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLm1jbGsgPiBtYXhfbWNsaykKKwkJCQlwcy0+cGVyZm9y bWFuY2VfbGV2ZWxzW2ldLm1jbGsgPSBtYXhfbWNsazsKKwkJfQorCQlpZiAobWF4X3NjbGspIHsK KwkJCWlmIChwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLnNjbGsgPiBtYXhfc2NsaykKKwkJCQlw cy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLnNjbGsgPSBtYXhfc2NsazsKKwkJfQorCX0KKworCS8q IFhYWCB2YWxpZGF0ZSB0aGUgbWluIGNsb2NrcyByZXF1aXJlZCBmb3IgZGlzcGxheSAqLworCisJ aWYgKGRpc2FibGVfbWNsa19zd2l0Y2hpbmcpIHsKKwkJbWNsayAgPSBwcy0+cGVyZm9ybWFuY2Vf bGV2ZWxzW3BzLT5wZXJmb3JtYW5jZV9sZXZlbF9jb3VudCAtIDFdLm1jbGs7CisJCXZkZGNpID0g cHMtPnBlcmZvcm1hbmNlX2xldmVsc1twcy0+cGVyZm9ybWFuY2VfbGV2ZWxfY291bnQgLSAxXS52 ZGRjaTsKKwl9IGVsc2UgeworCQltY2xrID0gcHMtPnBlcmZvcm1hbmNlX2xldmVsc1swXS5tY2xr OworCQl2ZGRjaSA9IHBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbMF0udmRkY2k7CisJfQorCisJaWYg KGRpc2FibGVfc2Nsa19zd2l0Y2hpbmcpIHsKKwkJc2NsayA9IHBzLT5wZXJmb3JtYW5jZV9sZXZl bHNbcHMtPnBlcmZvcm1hbmNlX2xldmVsX2NvdW50IC0gMV0uc2NsazsKKwkJdmRkYyA9IHBzLT5w ZXJmb3JtYW5jZV9sZXZlbHNbcHMtPnBlcmZvcm1hbmNlX2xldmVsX2NvdW50IC0gMV0udmRkYzsK Kwl9IGVsc2UgeworCQlzY2xrID0gcHMtPnBlcmZvcm1hbmNlX2xldmVsc1swXS5zY2xrOworCQl2 ZGRjID0gcHMtPnBlcmZvcm1hbmNlX2xldmVsc1swXS52ZGRjOworCX0KKworCWlmIChycHMtPnZj ZV9hY3RpdmUpIHsKKwkJaWYgKHNjbGsgPCBhZGV2LT5wbS5kcG0udmNlX3N0YXRlc1thZGV2LT5w bS5kcG0udmNlX2xldmVsXS5zY2xrKQorCQkJc2NsayA9IGFkZXYtPnBtLmRwbS52Y2Vfc3RhdGVz W2FkZXYtPnBtLmRwbS52Y2VfbGV2ZWxdLnNjbGs7CisJCWlmIChtY2xrIDwgYWRldi0+cG0uZHBt LnZjZV9zdGF0ZXNbYWRldi0+cG0uZHBtLnZjZV9sZXZlbF0ubWNsaykKKwkJCW1jbGsgPSBhZGV2 LT5wbS5kcG0udmNlX3N0YXRlc1thZGV2LT5wbS5kcG0udmNlX2xldmVsXS5tY2xrOworCX0KKwor CS8qIGFkanVzdGVkIGxvdyBzdGF0ZSAqLworCXBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbMF0uc2Ns ayA9IHNjbGs7CisJcHMtPnBlcmZvcm1hbmNlX2xldmVsc1swXS5tY2xrID0gbWNsazsKKwlwcy0+ cGVyZm9ybWFuY2VfbGV2ZWxzWzBdLnZkZGMgPSB2ZGRjOworCXBzLT5wZXJmb3JtYW5jZV9sZXZl bHNbMF0udmRkY2kgPSB2ZGRjaTsKKworCWlmIChkaXNhYmxlX3NjbGtfc3dpdGNoaW5nKSB7CisJ CXNjbGsgPSBwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzWzBdLnNjbGs7CisJCWZvciAoaSA9IDE7IGkg PCBwcy0+cGVyZm9ybWFuY2VfbGV2ZWxfY291bnQ7IGkrKykgeworCQkJaWYgKHNjbGsgPCBwcy0+ cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLnNjbGspCisJCQkJc2NsayA9IHBzLT5wZXJmb3JtYW5jZV9s ZXZlbHNbaV0uc2NsazsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgcHMtPnBlcmZvcm1hbmNlX2xl dmVsX2NvdW50OyBpKyspIHsKKwkJCXBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0uc2NsayA9IHNj bGs7CisJCQlwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLnZkZGMgPSB2ZGRjOworCQl9CisJfSBl bHNlIHsKKwkJZm9yIChpID0gMTsgaSA8IHBzLT5wZXJmb3JtYW5jZV9sZXZlbF9jb3VudDsgaSsr KSB7CisJCQlpZiAocHMtPnBlcmZvcm1hbmNlX2xldmVsc1tpXS5zY2xrIDwgcHMtPnBlcmZvcm1h bmNlX2xldmVsc1tpIC0gMV0uc2NsaykKKwkJCQlwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLnNj bGsgPSBwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2kgLSAxXS5zY2xrOworCQkJaWYgKHBzLT5wZXJm b3JtYW5jZV9sZXZlbHNbaV0udmRkYyA8IHBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaSAtIDFdLnZk ZGMpCisJCQkJcHMtPnBlcmZvcm1hbmNlX2xldmVsc1tpXS52ZGRjID0gcHMtPnBlcmZvcm1hbmNl X2xldmVsc1tpIC0gMV0udmRkYzsKKwkJfQorCX0KKworCWlmIChkaXNhYmxlX21jbGtfc3dpdGNo aW5nKSB7CisJCW1jbGsgPSBwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzWzBdLm1jbGs7CisJCWZvciAo aSA9IDE7IGkgPCBwcy0+cGVyZm9ybWFuY2VfbGV2ZWxfY291bnQ7IGkrKykgeworCQkJaWYgKG1j bGsgPCBwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLm1jbGspCisJCQkJbWNsayA9IHBzLT5wZXJm b3JtYW5jZV9sZXZlbHNbaV0ubWNsazsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgcHMtPnBlcmZv cm1hbmNlX2xldmVsX2NvdW50OyBpKyspIHsKKwkJCXBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0u bWNsayA9IG1jbGs7CisJCQlwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLnZkZGNpID0gdmRkY2k7 CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAxOyBpIDwgcHMtPnBlcmZvcm1hbmNlX2xldmVs X2NvdW50OyBpKyspIHsKKwkJCWlmIChwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLm1jbGsgPCBw cy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2kgLSAxXS5tY2xrKQorCQkJCXBzLT5wZXJmb3JtYW5jZV9s ZXZlbHNbaV0ubWNsayA9IHBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaSAtIDFdLm1jbGs7CisJCQlp ZiAocHMtPnBlcmZvcm1hbmNlX2xldmVsc1tpXS52ZGRjaSA8IHBzLT5wZXJmb3JtYW5jZV9sZXZl bHNbaSAtIDFdLnZkZGNpKQorCQkJCXBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0udmRkY2kgPSBw cy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2kgLSAxXS52ZGRjaTsKKwkJfQorCX0KKworICAgICAgICBm b3IgKGkgPSAwOyBpIDwgcHMtPnBlcmZvcm1hbmNlX2xldmVsX2NvdW50OyBpKyspCisgICAgICAg ICAgICAgICAgYnRjX2FkanVzdF9jbG9ja19jb21iaW5hdGlvbnMoYWRldiwgbWF4X2xpbWl0cywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHMtPnBlcmZv cm1hbmNlX2xldmVsc1tpXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHMtPnBlcmZvcm1hbmNlX2xl dmVsX2NvdW50OyBpKyspIHsKKwkJaWYgKHBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0udmRkYyA8 IG1pbl92Y2Vfdm9sdGFnZSkKKwkJCXBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0udmRkYyA9IG1p bl92Y2Vfdm9sdGFnZTsKKwkJYnRjX2FwcGx5X3ZvbHRhZ2VfZGVwZW5kZW5jeV9ydWxlcygmYWRl di0+cG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fc2NsaywKKwkJCQkJCSAgIHBz LT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0uc2NsaywKKwkJCQkJCSAgIG1heF9saW1pdHMtPnZkZGMs ICAmcHMtPnBlcmZvcm1hbmNlX2xldmVsc1tpXS52ZGRjKTsKKwkJYnRjX2FwcGx5X3ZvbHRhZ2Vf ZGVwZW5kZW5jeV9ydWxlcygmYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS52ZGRjaV9kZXBlbmRlbmN5 X29uX21jbGssCisJCQkJCQkgICBwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLm1jbGssCisJCQkJ CQkgICBtYXhfbGltaXRzLT52ZGRjaSwgJnBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0udmRkY2kp OworCQlidGNfYXBwbHlfdm9sdGFnZV9kZXBlbmRlbmN5X3J1bGVzKCZhZGV2LT5wbS5kcG0uZHlu X3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9tY2xrLAorCQkJCQkJICAgcHMtPnBlcmZvcm1hbmNl X2xldmVsc1tpXS5tY2xrLAorCQkJCQkJICAgbWF4X2xpbWl0cy0+dmRkYywgICZwcy0+cGVyZm9y bWFuY2VfbGV2ZWxzW2ldLnZkZGMpOworCQlidGNfYXBwbHlfdm9sdGFnZV9kZXBlbmRlbmN5X3J1 bGVzKCZhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9kaXNwY2xrLAor CQkJCQkJICAgYWRldi0+Y2xvY2suY3VycmVudF9kaXNwY2xrLAorCQkJCQkJICAgbWF4X2xpbWl0 cy0+dmRkYywgICZwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLnZkZGMpOworCX0KKworCWZvciAo aSA9IDA7IGkgPCBwcy0+cGVyZm9ybWFuY2VfbGV2ZWxfY291bnQ7IGkrKykgeworCQlidGNfYXBw bHlfdm9sdGFnZV9kZWx0YV9ydWxlcyhhZGV2LAorCQkJCQkgICAgICBtYXhfbGltaXRzLT52ZGRj LCBtYXhfbGltaXRzLT52ZGRjaSwKKwkJCQkJICAgICAgJnBzLT5wZXJmb3JtYW5jZV9sZXZlbHNb aV0udmRkYywKKwkJCQkJICAgICAgJnBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0udmRkY2kpOwor CX0KKworCXBzLT5kY19jb21wYXRpYmxlID0gdHJ1ZTsKKwlmb3IgKGkgPSAwOyBpIDwgcHMtPnBl cmZvcm1hbmNlX2xldmVsX2NvdW50OyBpKyspIHsKKwkJaWYgKHBzLT5wZXJmb3JtYW5jZV9sZXZl bHNbaV0udmRkYyA+IGFkZXYtPnBtLmRwbS5keW5fc3RhdGUubWF4X2Nsb2NrX3ZvbHRhZ2Vfb25f ZGMudmRkYykKKwkJCXBzLT5kY19jb21wYXRpYmxlID0gZmFsc2U7CisJfQorfQorCisjaWYgMAor c3RhdGljIGludCBzaV9yZWFkX3NtY19zb2Z0X3JlZ2lzdGVyKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LAorCQkJCSAgICAgdTE2IHJlZ19vZmZzZXQsIHUzMiAqdmFsdWUpCit7CisJc3RydWN0 IHNpX3Bvd2VyX2luZm8gKnNpX3BpID0gc2lfZ2V0X3BpKGFkZXYpOworCisJcmV0dXJuIHNpX3Jl YWRfc21jX3NyYW1fZHdvcmQoYWRldiwKKwkJCQkgICAgICBzaV9waS0+c29mdF9yZWdzX3N0YXJ0 ICsgcmVnX29mZnNldCwgdmFsdWUsCisJCQkJICAgICAgc2lfcGktPnNyYW1fZW5kKTsKK30KKyNl bmRpZgorCitzdGF0aWMgaW50IHNpX3dyaXRlX3NtY19zb2Z0X3JlZ2lzdGVyKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LAorCQkJCSAgICAgIHUxNiByZWdfb2Zmc2V0LCB1MzIgdmFsdWUpCit7 CisJc3RydWN0IHNpX3Bvd2VyX2luZm8gKnNpX3BpID0gc2lfZ2V0X3BpKGFkZXYpOworCisJcmV0 dXJuIHNpX3dyaXRlX3NtY19zcmFtX2R3b3JkKGFkZXYsCisJCQkJICAgICAgIHNpX3BpLT5zb2Z0 X3JlZ3Nfc3RhcnQgKyByZWdfb2Zmc2V0LAorCQkJCSAgICAgICB2YWx1ZSwgc2lfcGktPnNyYW1f ZW5kKTsKK30KKworc3RhdGljIGJvb2wgc2lfaXNfc3BlY2lhbF8xZ2JfcGxhdGZvcm0oc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJYm9vbCByZXQgPSBmYWxzZTsKKwl1MzIgdG1wLCB3 aWR0aCwgcm93LCBjb2x1bW4sIGJhbmssIGRlbnNpdHk7CisJYm9vbCBpc19tZW1vcnlfZ2RkcjUs IGlzX3NwZWNpYWw7CisKKwl0bXAgPSBSUkVHMzIoTUNfU0VRX01JU0MwKTsKKwlpc19tZW1vcnlf Z2RkcjUgPSAoTUNfU0VRX01JU0MwX0dERFI1X1ZBTFVFID09ICgodG1wICYgTUNfU0VRX01JU0Mw X0dERFI1X01BU0spID4+IE1DX1NFUV9NSVNDMF9HRERSNV9TSElGVCkpOworCWlzX3NwZWNpYWwg PSAoTUNfU0VRX01JU0MwX1JFVl9JRF9WQUxVRSA9PSAoKHRtcCAmIE1DX1NFUV9NSVNDMF9SRVZf SURfTUFTSykgPj4gTUNfU0VRX01JU0MwX1JFVl9JRF9TSElGVCkpCisJCSYgKE1DX1NFUV9NSVND MF9WRU5fSURfVkFMVUUgPT0gKCh0bXAgJiBNQ19TRVFfTUlTQzBfVkVOX0lEX01BU0spID4+IE1D X1NFUV9NSVNDMF9WRU5fSURfU0hJRlQpKTsKKworCVdSRUczMihNQ19TRVFfSU9fREVCVUdfSU5E RVgsIDB4Yik7CisJd2lkdGggPSAoKFJSRUczMihNQ19TRVFfSU9fREVCVUdfREFUQSkgPj4gMSkg JiAxKSA/IDE2IDogMzI7CisKKwl0bXAgPSBSUkVHMzIoTUNfQVJCX1JBTUNGRyk7CisJcm93ID0g KCh0bXAgJiBOT09GUk9XU19NQVNLKSA+PiBOT09GUk9XU19TSElGVCkgKyAxMDsKKwljb2x1bW4g PSAoKHRtcCAmIE5PT0ZDT0xTX01BU0spID4+IE5PT0ZDT0xTX1NISUZUKSArIDg7CisJYmFuayA9 ICgodG1wICYgTk9PRkJBTktfTUFTSykgPj4gTk9PRkJBTktfU0hJRlQpICsgMjsKKworCWRlbnNp dHkgPSAoMSA8PCAocm93ICsgY29sdW1uIC0gMjAgKyBiYW5rKSkgKiB3aWR0aDsKKworCWlmICgo YWRldi0+cGRldi0+ZGV2aWNlID09IDB4NjgxOSkgJiYKKwkgICAgaXNfbWVtb3J5X2dkZHI1ICYm IGlzX3NwZWNpYWwgJiYgKGRlbnNpdHkgPT0gMHg0MDApKQorCQlyZXQgPSB0cnVlOworCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2lfZ2V0X2xlYWthZ2VfdmRkYyhzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldikKK3sKKwlzdHJ1Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9n ZXRfcGkoYWRldik7CisJdTE2IHZkZGMsIGNvdW50ID0gMDsKKwlpbnQgaSwgcmV0OworCisJZm9y IChpID0gMDsgaSA8IFNJU0xBTkRTX01BWF9MRUFLQUdFX0NPVU5UOyBpKyspIHsKKwkJcmV0ID0g YW1kZ3B1X2F0b21iaW9zX2dldF9sZWFrYWdlX3ZkZGNfYmFzZWRfb25fbGVha2FnZV9pZHgoYWRl diwgJnZkZGMsIFNJU0xBTkRTX0xFQUtBR0VfSU5ERVgwICsgaSk7CisKKwkJaWYgKCFyZXQgJiYg KHZkZGMgPiAwKSAmJiAodmRkYyAhPSAoU0lTTEFORFNfTEVBS0FHRV9JTkRFWDAgKyBpKSkpIHsK KwkJCXNpX3BpLT5sZWFrYWdlX3ZvbHRhZ2UuZW50cmllc1tjb3VudF0udm9sdGFnZSA9IHZkZGM7 CisJCQlzaV9waS0+bGVha2FnZV92b2x0YWdlLmVudHJpZXNbY291bnRdLmxlYWthZ2VfaW5kZXgg PQorCQkJCVNJU0xBTkRTX0xFQUtBR0VfSU5ERVgwICsgaTsKKwkJCWNvdW50Kys7CisJCX0KKwl9 CisJc2lfcGktPmxlYWthZ2Vfdm9sdGFnZS5jb3VudCA9IGNvdW50OworfQorCitzdGF0aWMgaW50 IHNpX2dldF9sZWFrYWdlX3ZvbHRhZ2VfZnJvbV9sZWFrYWdlX2luZGV4KHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2LAorCQkJCQkJICAgICB1MzIgaW5kZXgsIHUxNiAqbGVha2FnZV92b2x0YWdl KQoreworCXN0cnVjdCBzaV9wb3dlcl9pbmZvICpzaV9waSA9IHNpX2dldF9waShhZGV2KTsKKwlp bnQgaTsKKworCWlmIChsZWFrYWdlX3ZvbHRhZ2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlpZiAoKGluZGV4ICYgMHhmZjAwKSAhPSAweGZmMDApCisJCXJldHVybiAtRUlOVkFMOwor CisJaWYgKChpbmRleCAmIDB4ZmYpID4gU0lTTEFORFNfTUFYX0xFQUtBR0VfQ09VTlQgKyAxKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpbmRleCA8IFNJU0xBTkRTX0xFQUtBR0VfSU5ERVgw KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBzaV9waS0+bGVha2FnZV92 b2x0YWdlLmNvdW50OyBpKyspIHsKKwkJaWYgKHNpX3BpLT5sZWFrYWdlX3ZvbHRhZ2UuZW50cmll c1tpXS5sZWFrYWdlX2luZGV4ID09IGluZGV4KSB7CisJCQkqbGVha2FnZV92b2x0YWdlID0gc2lf cGktPmxlYWthZ2Vfdm9sdGFnZS5lbnRyaWVzW2ldLnZvbHRhZ2U7CisJCQlyZXR1cm4gMDsKKwkJ fQorCX0KKwlyZXR1cm4gLUVBR0FJTjsKK30KKworc3RhdGljIHZvaWQgc2lfc2V0X2RwbV9ldmVu dF9zb3VyY2VzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1MzIgc291cmNlcykKK3sKKwlz dHJ1Y3QgcnY3eHhfcG93ZXJfaW5mbyAqcGkgPSBydjc3MF9nZXRfcGkoYWRldik7CisJYm9vbCB3 YW50X3RoZXJtYWxfcHJvdGVjdGlvbjsKKwllbnVtIGFtZGdwdV9kcG1fZXZlbnRfc3JjIGRwbV9l dmVudF9zcmM7CisKKwlzd2l0Y2ggKHNvdXJjZXMpIHsKKwljYXNlIDA6CisJZGVmYXVsdDoKKwkJ d2FudF90aGVybWFsX3Byb3RlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsK KwljYXNlICgxIDw8IEFNREdQVV9EUE1fQVVUT19USFJPVFRMRV9TUkNfVEhFUk1BTCk6CisJCXdh bnRfdGhlcm1hbF9wcm90ZWN0aW9uID0gdHJ1ZTsKKwkJZHBtX2V2ZW50X3NyYyA9IEFNREdQVV9E UE1fRVZFTlRfU1JDX0RJR0lUQUw7CisJCWJyZWFrOworCWNhc2UgKDEgPDwgQU1ER1BVX0RQTV9B VVRPX1RIUk9UVExFX1NSQ19FWFRFUk5BTCk6CisJCXdhbnRfdGhlcm1hbF9wcm90ZWN0aW9uID0g dHJ1ZTsKKwkJZHBtX2V2ZW50X3NyYyA9IEFNREdQVV9EUE1fRVZFTlRfU1JDX0VYVEVSTkFMOwor CQlicmVhazsKKwljYXNlICgoMSA8PCBBTURHUFVfRFBNX0FVVE9fVEhST1RUTEVfU1JDX0VYVEVS TkFMKSB8CisJICAgICAgKDEgPDwgQU1ER1BVX0RQTV9BVVRPX1RIUk9UVExFX1NSQ19USEVSTUFM KSk6CisJCXdhbnRfdGhlcm1hbF9wcm90ZWN0aW9uID0gdHJ1ZTsKKwkJZHBtX2V2ZW50X3NyYyA9 IEFNREdQVV9EUE1fRVZFTlRfU1JDX0RJR0lBTF9PUl9FWFRFUk5BTDsKKwkJYnJlYWs7CisJfQor CisJaWYgKHdhbnRfdGhlcm1hbF9wcm90ZWN0aW9uKSB7CisJCVdSRUczMl9QKENHX1RIRVJNQUxf Q1RSTCwgRFBNX0VWRU5UX1NSQyhkcG1fZXZlbnRfc3JjKSwgfkRQTV9FVkVOVF9TUkNfTUFTSyk7 CisJCWlmIChwaS0+dGhlcm1hbF9wcm90ZWN0aW9uKQorCQkJV1JFRzMyX1AoR0VORVJBTF9QV1JN R1QsIDAsIH5USEVSTUFMX1BST1RFQ1RJT05fRElTKTsKKwl9IGVsc2UgeworCQlXUkVHMzJfUChH RU5FUkFMX1BXUk1HVCwgVEhFUk1BTF9QUk9URUNUSU9OX0RJUywgflRIRVJNQUxfUFJPVEVDVElP Tl9ESVMpOworCX0KK30KKworc3RhdGljIHZvaWQgc2lfZW5hYmxlX2F1dG9fdGhyb3R0bGVfc291 cmNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCQkgICBlbnVtIGFtZGdwdV9kcG1f YXV0b190aHJvdHRsZV9zcmMgc291cmNlLAorCQkJCQkgICBib29sIGVuYWJsZSkKK3sKKwlzdHJ1 Y3QgcnY3eHhfcG93ZXJfaW5mbyAqcGkgPSBydjc3MF9nZXRfcGkoYWRldik7CisKKwlpZiAoZW5h YmxlKSB7CisJCWlmICghKHBpLT5hY3RpdmVfYXV0b190aHJvdHRsZV9zb3VyY2VzICYgKDEgPDwg c291cmNlKSkpIHsKKwkJCXBpLT5hY3RpdmVfYXV0b190aHJvdHRsZV9zb3VyY2VzIHw9IDEgPDwg c291cmNlOworCQkJc2lfc2V0X2RwbV9ldmVudF9zb3VyY2VzKGFkZXYsIHBpLT5hY3RpdmVfYXV0 b190aHJvdHRsZV9zb3VyY2VzKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChwaS0+YWN0aXZlX2F1 dG9fdGhyb3R0bGVfc291cmNlcyAmICgxIDw8IHNvdXJjZSkpIHsKKwkJCXBpLT5hY3RpdmVfYXV0 b190aHJvdHRsZV9zb3VyY2VzICY9IH4oMSA8PCBzb3VyY2UpOworCQkJc2lfc2V0X2RwbV9ldmVu dF9zb3VyY2VzKGFkZXYsIHBpLT5hY3RpdmVfYXV0b190aHJvdHRsZV9zb3VyY2VzKTsKKwkJfQor CX0KK30KKworc3RhdGljIHZvaWQgc2lfc3RhcnRfZHBtKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQoreworCVdSRUczMl9QKEdFTkVSQUxfUFdSTUdULCBHTE9CQUxfUFdSTUdUX0VOLCB+R0xP QkFMX1BXUk1HVF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIHNpX3N0b3BfZHBtKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KQoreworCVdSRUczMl9QKEdFTkVSQUxfUFdSTUdULCAwLCB+R0xPQkFM X1BXUk1HVF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIHNpX2VuYWJsZV9zY2xrX2NvbnRyb2woc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wgZW5hYmxlKQoreworCWlmIChlbmFibGUpCisJ CVdSRUczMl9QKFNDTEtfUFdSTUdUX0NOVEwsIDAsIH5TQ0xLX1BXUk1HVF9PRkYpOworCWVsc2UK KwkJV1JFRzMyX1AoU0NMS19QV1JNR1RfQ05UTCwgU0NMS19QV1JNR1RfT0ZGLCB+U0NMS19QV1JN R1RfT0ZGKTsKKworfQorCisjaWYgMAorc3RhdGljIGludCBzaV9ub3RpZnlfaGFyZHdhcmVfb2Zf dGhlcm1hbF9zdGF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJICAgICAgIHUz MiB0aGVybWFsX2xldmVsKQoreworCVBQU01DX1Jlc3VsdCByZXQ7CisKKwlpZiAodGhlcm1hbF9s ZXZlbCA9PSAwKSB7CisJCXJldCA9IHNpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LCBQUFNNQ19NU0df RW5hYmxlVGhlcm1hbEludGVycnVwdCk7CisJCWlmIChyZXQgPT0gUFBTTUNfUmVzdWx0X09LKQor CQkJcmV0dXJuIDA7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgc2lfbm90aWZ5X2hhcmR3YXJlX3ZwdV9yZWNvdmVyeV9ldmVudChz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlzaV93cml0ZV9zbWNfc29mdF9yZWdpc3Rl cihhZGV2LCBTSV9TTUNfU09GVF9SRUdJU1RFUl90ZHJfaXNfYWJvdXRfdG9faGFwcGVuLCB0cnVl KTsKK30KKyNlbmRpZgorCisjaWYgMAorc3RhdGljIGludCBzaV9ub3RpZnlfaHdfb2ZfcG93ZXJz b3VyY2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wgYWNfcG93ZXIpCit7CisJaWYg KGFjX3Bvd2VyKQorCQlyZXR1cm4gKHNpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LCBQUFNNQ19NU0df UnVubmluZ09uQUMpID09IFBQU01DX1Jlc3VsdF9PSykgPworCQkJMCA6IC1FSU5WQUw7CisKKwly ZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgUFBTTUNfUmVzdWx0IHNpX3NlbmRfbXNnX3Rv X3NtY193aXRoX3BhcmFtZXRlcihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJCSAg ICAgIFBQU01DX01zZyBtc2csIHUzMiBwYXJhbWV0ZXIpCit7CisJV1JFRzMyKFNNQ19TQ1JBVENI MCwgcGFyYW1ldGVyKTsKKwlyZXR1cm4gc2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsIG1zZyk7Cit9 CisKK3N0YXRpYyBpbnQgc2lfcmVzdHJpY3RfcGVyZm9ybWFuY2VfbGV2ZWxzX2JlZm9yZV9zd2l0 Y2goc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJaWYgKHNpX3NlbmRfbXNnX3RvX3Nt YyhhZGV2LCBQUFNNQ19NU0dfTm9Gb3JjZWRMZXZlbCkgIT0gUFBTTUNfUmVzdWx0X09LKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAoc2lfc2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1l dGVyKGFkZXYsIFBQU01DX01TR19TZXRFbmFibGVkTGV2ZWxzLCAxKSA9PSBQUFNNQ19SZXN1bHRf T0spID8KKwkJMCA6IC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgc2lfZHBtX2ZvcmNlX3BlcmZv cm1hbmNlX2xldmVsKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCSAgIGVudW0gYW1k Z3B1X2RwbV9mb3JjZWRfbGV2ZWwgbGV2ZWwpCit7CisJc3RydWN0IGFtZGdwdV9wcyAqcnBzID0g YWRldi0+cG0uZHBtLmN1cnJlbnRfcHM7CisJc3RydWN0ICBzaV9wcyAqcHMgPSBzaV9nZXRfcHMo cnBzKTsKKwl1MzIgbGV2ZWxzID0gcHMtPnBlcmZvcm1hbmNlX2xldmVsX2NvdW50OworCisJaWYg KGxldmVsID09IEFNREdQVV9EUE1fRk9SQ0VEX0xFVkVMX0hJR0gpIHsKKwkJaWYgKHNpX3NlbmRf bXNnX3RvX3NtY193aXRoX3BhcmFtZXRlcihhZGV2LCBQUFNNQ19NU0dfU2V0RW5hYmxlZExldmVs cywgbGV2ZWxzKSAhPSBQUFNNQ19SZXN1bHRfT0spCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlp ZiAoc2lfc2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGFkZXYsIFBQU01DX01TR19TZXRG b3JjZWRMZXZlbHMsIDEpICE9IFBQU01DX1Jlc3VsdF9PSykKKwkJCXJldHVybiAtRUlOVkFMOwor CX0gZWxzZSBpZiAobGV2ZWwgPT0gQU1ER1BVX0RQTV9GT1JDRURfTEVWRUxfTE9XKSB7CisJCWlm IChzaV9zZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoYWRldiwgUFBTTUNfTVNHX1NldEZv cmNlZExldmVscywgMCkgIT0gUFBTTUNfUmVzdWx0X09LKQorCQkJcmV0dXJuIC1FSU5WQUw7CisK KwkJaWYgKHNpX3NlbmRfbXNnX3RvX3NtY193aXRoX3BhcmFtZXRlcihhZGV2LCBQUFNNQ19NU0df U2V0RW5hYmxlZExldmVscywgMSkgIT0gUFBTTUNfUmVzdWx0X09LKQorCQkJcmV0dXJuIC1FSU5W QUw7CisJfSBlbHNlIGlmIChsZXZlbCA9PSBBTURHUFVfRFBNX0ZPUkNFRF9MRVZFTF9BVVRPKSB7 CisJCWlmIChzaV9zZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoYWRldiwgUFBTTUNfTVNH X1NldEZvcmNlZExldmVscywgMCkgIT0gUFBTTUNfUmVzdWx0X09LKQorCQkJcmV0dXJuIC1FSU5W QUw7CisKKwkJaWYgKHNpX3NlbmRfbXNnX3RvX3NtY193aXRoX3BhcmFtZXRlcihhZGV2LCBQUFNN Q19NU0dfU2V0RW5hYmxlZExldmVscywgbGV2ZWxzKSAhPSBQUFNNQ19SZXN1bHRfT0spCisJCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhZGV2LT5wbS5kcG0uZm9yY2VkX2xldmVsID0gbGV2ZWw7 CisKKwlyZXR1cm4gMDsKK30KKworI2lmIDAKK3N0YXRpYyBpbnQgc2lfc2V0X2Jvb3Rfc3RhdGUo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJcmV0dXJuIChzaV9zZW5kX21zZ190b19z bWMoYWRldiwgUFBTTUNfTVNHX1N3aXRjaFRvSW5pdGlhbFN0YXRlKSA9PSBQUFNNQ19SZXN1bHRf T0spID8KKwkJMCA6IC1FSU5WQUw7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBzaV9zZXRfc3df c3RhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJcmV0dXJuIChzaV9zZW5kX21z Z190b19zbWMoYWRldiwgUFBTTUNfTVNHX1N3aXRjaFRvU3dTdGF0ZSkgPT0gUFBTTUNfUmVzdWx0 X09LKSA/CisJCTAgOiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHNpX2hhbHRfc21jKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCWlmIChzaV9zZW5kX21zZ190b19zbWMoYWRldiwg UFBTTUNfTVNHX0hhbHQpICE9IFBQU01DX1Jlc3VsdF9PSykKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlyZXR1cm4gKHNpX3dhaXRfZm9yX3NtY19pbmFjdGl2ZShhZGV2KSA9PSBQUFNNQ19SZXN1bHRf T0spID8KKwkJMCA6IC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgc2lfcmVzdW1lX3NtYyhzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlpZiAoc2lfc2VuZF9tc2dfdG9fc21jKGFkZXYs IFBQU01DX0ZsdXNoRGF0YUNhY2hlKSAhPSBQUFNNQ19SZXN1bHRfT0spCisJCXJldHVybiAtRUlO VkFMOworCisJcmV0dXJuIChzaV9zZW5kX21zZ190b19zbWMoYWRldiwgUFBTTUNfTVNHX1Jlc3Vt ZSkgPT0gUFBTTUNfUmVzdWx0X09LKSA/CisJCTAgOiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9p ZCBzaV9kcG1fc3RhcnRfc21jKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXNpX3By b2dyYW1fanVtcF9vbl9zdGFydChhZGV2KTsKKwlzaV9zdGFydF9zbWMoYWRldik7CisJc2lfc3Rh cnRfc21jX2Nsb2NrKGFkZXYpOworfQorCitzdGF0aWMgdm9pZCBzaV9kcG1fc3RvcF9zbWMoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJc2lfcmVzZXRfc21jKGFkZXYpOworCXNpX3N0 b3Bfc21jX2Nsb2NrKGFkZXYpOworfQorCitzdGF0aWMgaW50IHNpX3Byb2Nlc3NfZmlybXdhcmVf aGVhZGVyKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBzaV9wb3dlcl9p bmZvICpzaV9waSA9IHNpX2dldF9waShhZGV2KTsKKwl1MzIgdG1wOworCWludCByZXQ7CisKKwly ZXQgPSBzaV9yZWFkX3NtY19zcmFtX2R3b3JkKGFkZXYsCisJCQkJICAgICBTSVNMQU5EU19TTUNf RklSTVdBUkVfSEVBREVSX0xPQ0FUSU9OICsKKwkJCQkgICAgIFNJU0xBTkRTX1NNQ19GSVJNV0FS RV9IRUFERVJfc3RhdGVUYWJsZSwKKwkJCQkgICAgICZ0bXAsIHNpX3BpLT5zcmFtX2VuZCk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworICAgICAgICBzaV9waS0+c3RhdGVfdGFibGVfc3Rh cnQgPSB0bXA7CisKKwlyZXQgPSBzaV9yZWFkX3NtY19zcmFtX2R3b3JkKGFkZXYsCisJCQkJICAg ICBTSVNMQU5EU19TTUNfRklSTVdBUkVfSEVBREVSX0xPQ0FUSU9OICsKKwkJCQkgICAgIFNJU0xB TkRTX1NNQ19GSVJNV0FSRV9IRUFERVJfc29mdFJlZ2lzdGVycywKKwkJCQkgICAgICZ0bXAsIHNp X3BpLT5zcmFtX2VuZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNpX3BpLT5zb2Z0 X3JlZ3Nfc3RhcnQgPSB0bXA7CisKKwlyZXQgPSBzaV9yZWFkX3NtY19zcmFtX2R3b3JkKGFkZXYs CisJCQkJICAgICBTSVNMQU5EU19TTUNfRklSTVdBUkVfSEVBREVSX0xPQ0FUSU9OICsKKwkJCQkg ICAgIFNJU0xBTkRTX1NNQ19GSVJNV0FSRV9IRUFERVJfbWNSZWdpc3RlclRhYmxlLAorCQkJCSAg ICAgJnRtcCwgc2lfcGktPnNyYW1fZW5kKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ c2lfcGktPm1jX3JlZ190YWJsZV9zdGFydCA9IHRtcDsKKworCXJldCA9IHNpX3JlYWRfc21jX3Ny YW1fZHdvcmQoYWRldiwKKwkJCQkgICAgIFNJU0xBTkRTX1NNQ19GSVJNV0FSRV9IRUFERVJfTE9D QVRJT04gKworCQkJCSAgICAgU0lTTEFORFNfU01DX0ZJUk1XQVJFX0hFQURFUl9mYW5UYWJsZSwK KwkJCQkgICAgICZ0bXAsIHNpX3BpLT5zcmFtX2VuZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCXNpX3BpLT5mYW5fdGFibGVfc3RhcnQgPSB0bXA7CisKKwlyZXQgPSBzaV9yZWFkX3Nt Y19zcmFtX2R3b3JkKGFkZXYsCisJCQkJICAgICBTSVNMQU5EU19TTUNfRklSTVdBUkVfSEVBREVS X0xPQ0FUSU9OICsKKwkJCQkgICAgIFNJU0xBTkRTX1NNQ19GSVJNV0FSRV9IRUFERVJfbWNBcmJE cmFtQXV0b1JlZnJlc2hUYWJsZSwKKwkJCQkgICAgICZ0bXAsIHNpX3BpLT5zcmFtX2VuZCk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNpX3BpLT5hcmJfdGFibGVfc3RhcnQgPSB0bXA7 CisKKwlyZXQgPSBzaV9yZWFkX3NtY19zcmFtX2R3b3JkKGFkZXYsCisJCQkJICAgICBTSVNMQU5E U19TTUNfRklSTVdBUkVfSEVBREVSX0xPQ0FUSU9OICsKKwkJCQkgICAgIFNJU0xBTkRTX1NNQ19G SVJNV0FSRV9IRUFERVJfQ2FjQ29uZmlnVGFibGUsCisJCQkJICAgICAmdG1wLCBzaV9waS0+c3Jh bV9lbmQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzaV9waS0+Y2FjX3RhYmxlX3N0 YXJ0ID0gdG1wOworCisJcmV0ID0gc2lfcmVhZF9zbWNfc3JhbV9kd29yZChhZGV2LAorCQkJCSAg ICAgU0lTTEFORFNfU01DX0ZJUk1XQVJFX0hFQURFUl9MT0NBVElPTiArCisJCQkJICAgICBTSVNM QU5EU19TTUNfRklSTVdBUkVfSEVBREVSX0R0ZUNvbmZpZ3VyYXRpb24sCisJCQkJICAgICAmdG1w LCBzaV9waS0+c3JhbV9lbmQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzaV9waS0+ ZHRlX3RhYmxlX3N0YXJ0ID0gdG1wOworCisJcmV0ID0gc2lfcmVhZF9zbWNfc3JhbV9kd29yZChh ZGV2LAorCQkJCSAgICAgU0lTTEFORFNfU01DX0ZJUk1XQVJFX0hFQURFUl9MT0NBVElPTiArCisJ CQkJICAgICBTSVNMQU5EU19TTUNfRklSTVdBUkVfSEVBREVSX3NwbGxUYWJsZSwKKwkJCQkgICAg ICZ0bXAsIHNpX3BpLT5zcmFtX2VuZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNp X3BpLT5zcGxsX3RhYmxlX3N0YXJ0ID0gdG1wOworCisJcmV0ID0gc2lfcmVhZF9zbWNfc3JhbV9k d29yZChhZGV2LAorCQkJCSAgICAgU0lTTEFORFNfU01DX0ZJUk1XQVJFX0hFQURFUl9MT0NBVElP TiArCisJCQkJICAgICBTSVNMQU5EU19TTUNfRklSTVdBUkVfSEVBREVSX1BBUE1QYXJhbWV0ZXJz LAorCQkJCSAgICAgJnRtcCwgc2lfcGktPnNyYW1fZW5kKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJc2lfcGktPnBhcG1fY2ZnX3RhYmxlX3N0YXJ0ID0gdG1wOworCisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIHZvaWQgc2lfcmVhZF9jbG9ja19yZWdpc3RlcnMoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IHNpX3Bvd2VyX2luZm8gKnNpX3BpID0gc2lfZ2V0 X3BpKGFkZXYpOworCisJc2lfcGktPmNsb2NrX3JlZ2lzdGVycy5jZ19zcGxsX2Z1bmNfY250bCA9 IFJSRUczMihDR19TUExMX0ZVTkNfQ05UTCk7CisJc2lfcGktPmNsb2NrX3JlZ2lzdGVycy5jZ19z cGxsX2Z1bmNfY250bF8yID0gUlJFRzMyKENHX1NQTExfRlVOQ19DTlRMXzIpOworCXNpX3BpLT5j bG9ja19yZWdpc3RlcnMuY2dfc3BsbF9mdW5jX2NudGxfMyA9IFJSRUczMihDR19TUExMX0ZVTkNf Q05UTF8zKTsKKwlzaV9waS0+Y2xvY2tfcmVnaXN0ZXJzLmNnX3NwbGxfZnVuY19jbnRsXzQgPSBS UkVHMzIoQ0dfU1BMTF9GVU5DX0NOVExfNCk7CisJc2lfcGktPmNsb2NrX3JlZ2lzdGVycy5jZ19z cGxsX3NwcmVhZF9zcGVjdHJ1bSA9IFJSRUczMihDR19TUExMX1NQUkVBRF9TUEVDVFJVTSk7CisJ c2lfcGktPmNsb2NrX3JlZ2lzdGVycy5jZ19zcGxsX3NwcmVhZF9zcGVjdHJ1bV8yID0gUlJFRzMy KENHX1NQTExfU1BSRUFEX1NQRUNUUlVNXzIpOworCXNpX3BpLT5jbG9ja19yZWdpc3RlcnMuZGxs X2NudGwgPSBSUkVHMzIoRExMX0NOVEwpOworCXNpX3BpLT5jbG9ja19yZWdpc3RlcnMubWNsa19w d3JtZ3RfY250bCA9IFJSRUczMihNQ0xLX1BXUk1HVF9DTlRMKTsKKwlzaV9waS0+Y2xvY2tfcmVn aXN0ZXJzLm1wbGxfYWRfZnVuY19jbnRsID0gUlJFRzMyKE1QTExfQURfRlVOQ19DTlRMKTsKKwlz aV9waS0+Y2xvY2tfcmVnaXN0ZXJzLm1wbGxfZHFfZnVuY19jbnRsID0gUlJFRzMyKE1QTExfRFFf RlVOQ19DTlRMKTsKKwlzaV9waS0+Y2xvY2tfcmVnaXN0ZXJzLm1wbGxfZnVuY19jbnRsID0gUlJF RzMyKE1QTExfRlVOQ19DTlRMKTsKKwlzaV9waS0+Y2xvY2tfcmVnaXN0ZXJzLm1wbGxfZnVuY19j bnRsXzEgPSBSUkVHMzIoTVBMTF9GVU5DX0NOVExfMSk7CisJc2lfcGktPmNsb2NrX3JlZ2lzdGVy cy5tcGxsX2Z1bmNfY250bF8yID0gUlJFRzMyKE1QTExfRlVOQ19DTlRMXzIpOworCXNpX3BpLT5j bG9ja19yZWdpc3RlcnMubXBsbF9zczEgPSBSUkVHMzIoTVBMTF9TUzEpOworCXNpX3BpLT5jbG9j a19yZWdpc3RlcnMubXBsbF9zczIgPSBSUkVHMzIoTVBMTF9TUzIpOworfQorCitzdGF0aWMgdm9p ZCBzaV9lbmFibGVfdGhlcm1hbF9wcm90ZWN0aW9uKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LAorCQkJCQkgIGJvb2wgZW5hYmxlKQoreworCWlmIChlbmFibGUpCisJCVdSRUczMl9QKEdFTkVS QUxfUFdSTUdULCAwLCB+VEhFUk1BTF9QUk9URUNUSU9OX0RJUyk7CisJZWxzZQorCQlXUkVHMzJf UChHRU5FUkFMX1BXUk1HVCwgVEhFUk1BTF9QUk9URUNUSU9OX0RJUywgflRIRVJNQUxfUFJPVEVD VElPTl9ESVMpOworfQorCitzdGF0aWMgdm9pZCBzaV9lbmFibGVfYWNwaV9wb3dlcl9tYW5hZ2Vt ZW50KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCVdSRUczMl9QKEdFTkVSQUxfUFdS TUdULCBTVEFUSUNfUE1fRU4sIH5TVEFUSUNfUE1fRU4pOworfQorCisjaWYgMAorc3RhdGljIGlu dCBzaV9lbnRlcl91bHBfc3RhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJV1JF RzMyKFNNQ19NRVNTQUdFXzAsIFBQU01DX01TR19Td2l0Y2hUb01pbmltdW1Qb3dlcik7CisKKwl1 ZGVsYXkoMjUwMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2lfZXhpdF91bHBf c3RhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJaW50IGk7CisKKwlXUkVHMzIo U01DX01FU1NBR0VfMCwgUFBTTUNfTVNHX1Jlc3VtZUZyb21NaW5pbXVtUG93ZXIpOworCisJdWRl bGF5KDcwMDApOworCisJZm9yIChpID0gMDsgaSA8IGFkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7 CisJCWlmIChSUkVHMzIoU01DX1JFU1BfMCkgPT0gMSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTAw MCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBzaV9ub3RpZnlf c21jX2Rpc3BsYXlfY2hhbmdlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCSAgICAg Ym9vbCBoYXNfZGlzcGxheSkKK3sKKwlQUFNNQ19Nc2cgbXNnID0gaGFzX2Rpc3BsYXkgPworCQlQ UFNNQ19NU0dfSGFzRGlzcGxheSA6IFBQU01DX01TR19Ob0Rpc3BsYXk7CisKKwlyZXR1cm4gKHNp X3NlbmRfbXNnX3RvX3NtYyhhZGV2LCBtc2cpID09IFBQU01DX1Jlc3VsdF9PSykgPworCQkwIDog LUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgc2lfcHJvZ3JhbV9yZXNwb25zZV90aW1lcyhzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwl1MzIgdm9sdGFnZV9yZXNwb25zZV90aW1lLCBi YWNrYmlhc19yZXNwb25zZV90aW1lLCBhY3BpX2RlbGF5X3RpbWUsIHZiaV90aW1lX291dDsKKwl1 MzIgdmRkY19kbHksIGFjcGlfZGx5LCB2YmlfZGx5OworCXUzMiByZWZlcmVuY2VfY2xvY2s7CisK KwlzaV93cml0ZV9zbWNfc29mdF9yZWdpc3RlcihhZGV2LCBTSV9TTUNfU09GVF9SRUdJU1RFUl9t dmRkX2NoZ190aW1lLCAxKTsKKworCXZvbHRhZ2VfcmVzcG9uc2VfdGltZSA9ICh1MzIpYWRldi0+ cG0uZHBtLnZvbHRhZ2VfcmVzcG9uc2VfdGltZTsKKyAgICAgICAgYmFja2JpYXNfcmVzcG9uc2Vf dGltZSA9ICh1MzIpYWRldi0+cG0uZHBtLmJhY2tiaWFzX3Jlc3BvbnNlX3RpbWU7CisKKwlpZiAo dm9sdGFnZV9yZXNwb25zZV90aW1lID09IDApCisJCXZvbHRhZ2VfcmVzcG9uc2VfdGltZSA9IDEw MDA7CisKKwlhY3BpX2RlbGF5X3RpbWUgPSAxNTAwMDsKKwl2YmlfdGltZV9vdXQgPSAxMDAwMDA7 CisKKwlyZWZlcmVuY2VfY2xvY2sgPSBhbWRncHVfYXNpY19nZXRfeGNsayhhZGV2KTsKKworCXZk ZGNfZGx5ID0gKHZvbHRhZ2VfcmVzcG9uc2VfdGltZSAgKiByZWZlcmVuY2VfY2xvY2spIC8gMTAw OworCWFjcGlfZGx5ID0gKGFjcGlfZGVsYXlfdGltZSAqIHJlZmVyZW5jZV9jbG9jaykgLyAxMDA7 CisJdmJpX2RseSAgPSAodmJpX3RpbWVfb3V0ICogcmVmZXJlbmNlX2Nsb2NrKSAvIDEwMDsKKwor CXNpX3dyaXRlX3NtY19zb2Z0X3JlZ2lzdGVyKGFkZXYsIFNJX1NNQ19TT0ZUX1JFR0lTVEVSX2Rl bGF5X3ZyZWcsICB2ZGRjX2RseSk7CisJc2lfd3JpdGVfc21jX3NvZnRfcmVnaXN0ZXIoYWRldiwg U0lfU01DX1NPRlRfUkVHSVNURVJfZGVsYXlfYWNwaSwgIGFjcGlfZGx5KTsKKwlzaV93cml0ZV9z bWNfc29mdF9yZWdpc3RlcihhZGV2LCBTSV9TTUNfU09GVF9SRUdJU1RFUl9tY2xrX2NoZ190aW1l b3V0LCB2YmlfZGx5KTsKKwlzaV93cml0ZV9zbWNfc29mdF9yZWdpc3RlcihhZGV2LCBTSV9TTUNf U09GVF9SRUdJU1RFUl9tY19ibG9ja19kZWxheSwgMHhBQSk7Cit9CisKK3N0YXRpYyB2b2lkIHNp X3Byb2dyYW1fZHNfcmVnaXN0ZXJzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXN0 cnVjdCBldmVyZ3JlZW5fcG93ZXJfaW5mbyAqZWdfcGkgPSBldmVyZ3JlZW5fZ2V0X3BpKGFkZXYp OworCXUzMiB0bXAgPSAxOyAvKiBYWFg6IDB4MTAgb24gdGFoaXRpIEEwICovCisKKwlpZiAoZWdf cGktPnNjbGtfZGVlcF9zbGVlcCkgeworCQlXUkVHMzJfUChNSVNDX0NMS19DTlRMLCBERUVQX1NM RUVQX0NMS19TRUwodG1wKSwgfkRFRVBfU0xFRVBfQ0xLX1NFTF9NQVNLKTsKKwkJV1JFRzMyX1Ao Q0dfU1BMTF9BVVRPU0NBTEVfQ05UTCwgQVVUT1NDQUxFX09OX1NTX0NMRUFSLAorCQkJIH5BVVRP U0NBTEVfT05fU1NfQ0xFQVIpOworCX0KK30KKworc3RhdGljIHZvaWQgc2lfcHJvZ3JhbV9kaXNw bGF5X2dhcChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwl1MzIgdG1wLCBwaXBlOwor CWludCBpOworCisJdG1wID0gUlJFRzMyKENHX0RJU1BMQVlfR0FQX0NOVEwpICYgfihESVNQMV9H QVBfTUFTSyB8IERJU1AyX0dBUF9NQVNLKTsKKwlpZiAoYWRldi0+cG0uZHBtLm5ld19hY3RpdmVf Y3J0Y19jb3VudCA+IDApCisJCXRtcCB8PSBESVNQMV9HQVAoUjYwMF9QTV9ESVNQTEFZX0dBUF9W QkxBTktfT1JfV00pOworCWVsc2UKKwkJdG1wIHw9IERJU1AxX0dBUChSNjAwX1BNX0RJU1BMQVlf R0FQX0lHTk9SRSk7CisKKwlpZiAoYWRldi0+cG0uZHBtLm5ld19hY3RpdmVfY3J0Y19jb3VudCA+ IDEpCisJCXRtcCB8PSBESVNQMl9HQVAoUjYwMF9QTV9ESVNQTEFZX0dBUF9WQkxBTktfT1JfV00p OworCWVsc2UKKwkJdG1wIHw9IERJU1AyX0dBUChSNjAwX1BNX0RJU1BMQVlfR0FQX0lHTk9SRSk7 CisKKwlXUkVHMzIoQ0dfRElTUExBWV9HQVBfQ05UTCwgdG1wKTsKKworCXRtcCA9IFJSRUczMihE Q0NHX0RJU1BfU0xPV19TRUxFQ1RfUkVHKTsKKwlwaXBlID0gKHRtcCAmIERDQ0dfRElTUDFfU0xP V19TRUxFQ1RfTUFTSykgPj4gRENDR19ESVNQMV9TTE9XX1NFTEVDVF9TSElGVDsKKworCWlmICgo YWRldi0+cG0uZHBtLm5ld19hY3RpdmVfY3J0Y19jb3VudCA+IDApICYmCisJICAgICghKGFkZXYt PnBtLmRwbS5uZXdfYWN0aXZlX2NydGNzICYgKDEgPDwgcGlwZSkpKSkgeworCQkvKiBmaW5kIHRo ZSBmaXJzdCBhY3RpdmUgY3J0YyAqLworCQlmb3IgKGkgPSAwOyBpIDwgYWRldi0+bW9kZV9pbmZv Lm51bV9jcnRjOyBpKyspIHsKKwkJCWlmIChhZGV2LT5wbS5kcG0ubmV3X2FjdGl2ZV9jcnRjcyAm ICgxIDw8IGkpKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IGFkZXYtPm1vZGVfaW5mby5u dW1fY3J0YykKKwkJCXBpcGUgPSAwOworCQllbHNlCisJCQlwaXBlID0gaTsKKworCQl0bXAgJj0g fkRDQ0dfRElTUDFfU0xPV19TRUxFQ1RfTUFTSzsKKwkJdG1wIHw9IERDQ0dfRElTUDFfU0xPV19T RUxFQ1QocGlwZSk7CisJCVdSRUczMihEQ0NHX0RJU1BfU0xPV19TRUxFQ1RfUkVHLCB0bXApOwor CX0KKworCS8qIFNldHRpbmcgdGhpcyB0byBmYWxzZSBmb3JjZXMgdGhlIHBlcmZvcm1hbmNlIHN0 YXRlIHRvIGxvdyBpZiB0aGUgY3J0Y3MgYXJlIGRpc2FibGVkLgorCSAqIFRoaXMgY2FuIGJlIGEg cHJvYmxlbSBvbiBQb3dlclhwcmVzcyBzeXN0ZW1zIG9yIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUg Y2FyZAorCSAqIGZvciBvZmZzY3JlZW4gcmVuZGVyaW5nIG9yIGNvbXB1dGUgaWYgdGhlcmUgYXJl IG5vIGNydGNzIGVuYWJsZWQuCisJICovCisJc2lfbm90aWZ5X3NtY19kaXNwbGF5X2NoYW5nZShh ZGV2LCBhZGV2LT5wbS5kcG0ubmV3X2FjdGl2ZV9jcnRjX2NvdW50ID4gMCk7Cit9CisKK3N0YXRp YyB2b2lkIHNpX2VuYWJsZV9zcHJlYWRfc3BlY3RydW0oc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBydjd4eF9wb3dlcl9pbmZvICpwaSA9IHJ2Nzcw X2dldF9waShhZGV2KTsKKworCWlmIChlbmFibGUpIHsKKwkJaWYgKHBpLT5zY2xrX3NzKQorCQkJ V1JFRzMyX1AoR0VORVJBTF9QV1JNR1QsIERZTl9TUFJFQURfU1BFQ1RSVU1fRU4sIH5EWU5fU1BS RUFEX1NQRUNUUlVNX0VOKTsKKwl9IGVsc2UgeworCQlXUkVHMzJfUChDR19TUExMX1NQUkVBRF9T UEVDVFJVTSwgMCwgflNTRU4pOworCQlXUkVHMzJfUChHRU5FUkFMX1BXUk1HVCwgMCwgfkRZTl9T UFJFQURfU1BFQ1RSVU1fRU4pOworCX0KK30KKworc3RhdGljIHZvaWQgc2lfc2V0dXBfYnNwKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBydjd4eF9wb3dlcl9pbmZvICpw aSA9IHJ2NzcwX2dldF9waShhZGV2KTsKKwl1MzIgeGNsayA9IGFtZGdwdV9hc2ljX2dldF94Y2xr KGFkZXYpOworCisJcjYwMF9jYWxjdWxhdGVfdV9hbmRfcChwaS0+YXNpLAorCQkJICAgICAgIHhj bGssCisJCQkgICAgICAgMTYsCisJCQkgICAgICAgJnBpLT5ic3AsCisJCQkgICAgICAgJnBpLT5i c3UpOworCisJcjYwMF9jYWxjdWxhdGVfdV9hbmRfcChwaS0+cGFzaSwKKwkJCSAgICAgICB4Y2xr LAorCQkJICAgICAgIDE2LAorCQkJICAgICAgICZwaS0+cGJzcCwKKwkJCSAgICAgICAmcGktPnBi c3UpOworCisKKyAgICAgICAgcGktPmRzcCA9IEJTUChwaS0+YnNwKSB8IEJTVShwaS0+YnN1KTsK KwlwaS0+cHNwID0gQlNQKHBpLT5wYnNwKSB8IEJTVShwaS0+cGJzdSk7CisKKwlXUkVHMzIoQ0df QlNQLCBwaS0+ZHNwKTsKK30KKworc3RhdGljIHZvaWQgc2lfcHJvZ3JhbV9naXQoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJV1JFRzMyX1AoQ0dfR0lULCBDR19HSUNTVChSNjAwX0dJ Q1NUX0RGTFQpLCB+Q0dfR0lDU1RfTUFTSyk7Cit9CisKK3N0YXRpYyB2b2lkIHNpX3Byb2dyYW1f dHAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJaW50IGk7CisJZW51bSByNjAwX3Rk IHRkID0gUjYwMF9URF9ERkxUOworCisJZm9yIChpID0gMDsgaSA8IFI2MDBfUE1fTlVNQkVSX09G X1RDOyBpKyspCisJCVdSRUczMihDR19GRkNUXzAgKyAoaSAqIDEwKSwgKFVUQ18wKHI2MDBfdXRj W2ldKSB8IERUQ18wKHI2MDBfZHRjW2ldKSkpOworCisJaWYgKHRkID09IFI2MDBfVERfQVVUTykK KwkJV1JFRzMyX1AoU0NMS19QV1JNR1RfQ05UTCwgMCwgfkZJUl9GT1JDRV9UUkVORF9TRUwpOwor CWVsc2UKKwkJV1JFRzMyX1AoU0NMS19QV1JNR1RfQ05UTCwgRklSX0ZPUkNFX1RSRU5EX1NFTCwg fkZJUl9GT1JDRV9UUkVORF9TRUwpOworCisJaWYgKHRkID09IFI2MDBfVERfVVApCisJCVdSRUcz Ml9QKFNDTEtfUFdSTUdUX0NOVEwsIDAsIH5GSVJfVFJFTkRfTU9ERSk7CisKKwlpZiAodGQgPT0g UjYwMF9URF9ET1dOKQorCQlXUkVHMzJfUChTQ0xLX1BXUk1HVF9DTlRMLCBGSVJfVFJFTkRfTU9E RSwgfkZJUl9UUkVORF9NT0RFKTsKK30KKworc3RhdGljIHZvaWQgc2lfcHJvZ3JhbV90cHAoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJV1JFRzMyKENHX1RQQywgUjYwMF9UUENfREZM VCk7Cit9CisKK3N0YXRpYyB2b2lkIHNpX3Byb2dyYW1fc3N0cChzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldikKK3sKKwlXUkVHMzIoQ0dfU1NQLCAoU1NUVShSNjAwX1NTVFVfREZMVCkgfCBTU1Qo UjYwMF9TU1RfREZMVCkpKTsKK30KKworc3RhdGljIHZvaWQgc2lfZW5hYmxlX2Rpc3BsYXlfZ2Fw KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXUzMiB0bXAgPSBSUkVHMzIoQ0dfRElT UExBWV9HQVBfQ05UTCk7CisKKwl0bXAgJj0gfihESVNQMV9HQVBfTUFTSyB8IERJU1AyX0dBUF9N QVNLKTsKKwl0bXAgfD0gKERJU1AxX0dBUChSNjAwX1BNX0RJU1BMQVlfR0FQX0lHTk9SRSkgfAor CQlESVNQMl9HQVAoUjYwMF9QTV9ESVNQTEFZX0dBUF9JR05PUkUpKTsKKworCXRtcCAmPSB+KERJ U1AxX0dBUF9NQ0hHX01BU0sgfCBESVNQMl9HQVBfTUNIR19NQVNLKTsKKwl0bXAgfD0gKERJU1Ax X0dBUF9NQ0hHKFI2MDBfUE1fRElTUExBWV9HQVBfVkJMQU5LKSB8CisJCURJU1AyX0dBUF9NQ0hH KFI2MDBfUE1fRElTUExBWV9HQVBfSUdOT1JFKSk7CisJV1JFRzMyKENHX0RJU1BMQVlfR0FQX0NO VEwsIHRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIHNpX3Byb2dyYW1fdmMoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IHJ2N3h4X3Bvd2VyX2luZm8gKnBpID0gcnY3NzBfZ2V0 X3BpKGFkZXYpOworCisJV1JFRzMyKENHX0ZUViwgcGktPnZyYyk7Cit9CisKK3N0YXRpYyB2b2lk IHNpX2NsZWFyX3ZjKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCVdSRUczMihDR19G VFYsIDApOworfQorCit1OCBzaV9nZXRfZGRyM19tY2xrX2ZyZXF1ZW5jeV9yYXRpbyh1MzIgbWVt b3J5X2Nsb2NrKQoreworCXU4IG1jX3BhcmFfaW5kZXg7CisKKwlpZiAobWVtb3J5X2Nsb2NrIDwg MTAwMDApCisJCW1jX3BhcmFfaW5kZXggPSAwOworCWVsc2UgaWYgKG1lbW9yeV9jbG9jayA+PSA4 MDAwMCkKKwkJbWNfcGFyYV9pbmRleCA9IDB4MGY7CisJZWxzZQorCQltY19wYXJhX2luZGV4ID0g KHU4KSgobWVtb3J5X2Nsb2NrIC0gMTAwMDApIC8gNTAwMCArIDEpOworCXJldHVybiBtY19wYXJh X2luZGV4OworfQorCit1OCBzaV9nZXRfbWNsa19mcmVxdWVuY3lfcmF0aW8odTMyIG1lbW9yeV9j bG9jaywgYm9vbCBzdHJvYmVfbW9kZSkKK3sKKwl1OCBtY19wYXJhX2luZGV4OworCisJaWYgKHN0 cm9iZV9tb2RlKSB7CisJCWlmIChtZW1vcnlfY2xvY2sgPCAxMjUwMCkKKwkJCW1jX3BhcmFfaW5k ZXggPSAweDAwOworCQllbHNlIGlmIChtZW1vcnlfY2xvY2sgPiA0NzUwMCkKKwkJCW1jX3BhcmFf aW5kZXggPSAweDBmOworCQllbHNlCisJCQltY19wYXJhX2luZGV4ID0gKHU4KSgobWVtb3J5X2Ns b2NrIC0gMTAwMDApIC8gMjUwMCk7CisJfSBlbHNlIHsKKwkJaWYgKG1lbW9yeV9jbG9jayA8IDY1 MDAwKQorCQkJbWNfcGFyYV9pbmRleCA9IDB4MDA7CisJCWVsc2UgaWYgKG1lbW9yeV9jbG9jayA+ IDEzNTAwMCkKKwkJCW1jX3BhcmFfaW5kZXggPSAweDBmOworCQllbHNlCisJCQltY19wYXJhX2lu ZGV4ID0gKHU4KSgobWVtb3J5X2Nsb2NrIC0gNjAwMDApIC8gNTAwMCk7CisJfQorCXJldHVybiBt Y19wYXJhX2luZGV4OworfQorCitzdGF0aWMgdTggc2lfZ2V0X3N0cm9iZV9tb2RlX3NldHRpbmdz KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1MzIgbWNsaykKK3sKKwlzdHJ1Y3QgcnY3eHhf cG93ZXJfaW5mbyAqcGkgPSBydjc3MF9nZXRfcGkoYWRldik7CisJYm9vbCBzdHJvYmVfbW9kZSA9 IGZhbHNlOworCXU4IHJlc3VsdCA9IDA7CisKKwlpZiAobWNsayA8PSBwaS0+bWNsa19zdHJvYmVf bW9kZV90aHJlc2hvbGQpCisJCXN0cm9iZV9tb2RlID0gdHJ1ZTsKKworCWlmIChwaS0+bWVtX2dk ZHI1KQorCQlyZXN1bHQgPSBzaV9nZXRfbWNsa19mcmVxdWVuY3lfcmF0aW8obWNsaywgc3Ryb2Jl X21vZGUpOworCWVsc2UKKwkJcmVzdWx0ID0gc2lfZ2V0X2RkcjNfbWNsa19mcmVxdWVuY3lfcmF0 aW8obWNsayk7CisKKwlpZiAoc3Ryb2JlX21vZGUpCisJCXJlc3VsdCB8PSBTSVNMQU5EU19TTUNf U1RST0JFX0VOQUJMRTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc2lfdXBs b2FkX2Zpcm13YXJlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBzaV9w b3dlcl9pbmZvICpzaV9waSA9IHNpX2dldF9waShhZGV2KTsKKwlpbnQgcmV0OworCisJc2lfcmVz ZXRfc21jKGFkZXYpOworCXNpX3N0b3Bfc21jX2Nsb2NrKGFkZXYpOworCisJcmV0ID0gc2lfbG9h ZF9zbWNfdWNvZGUoYWRldiwgc2lfcGktPnNyYW1fZW5kKTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBib29sIHNpX3ZhbGlkYXRlX3BoYXNlX3NoZWRkaW5nX3RhYmxlcyhzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IGF0b21fdm9sdGFnZV90 YWJsZSAqdGFibGUsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBhbWRncHVfcGhhc2Vfc2hlZGRp bmdfbGltaXRzX3RhYmxlICpsaW1pdHMpCit7CisJdTMyIGRhdGEsIG51bV9iaXRzLCBudW1fbGV2 ZWxzOworCisJaWYgKCh0YWJsZSA9PSBOVUxMKSB8fCAobGltaXRzID09IE5VTEwpKQorCQlyZXR1 cm4gZmFsc2U7CisKKwlkYXRhID0gdGFibGUtPm1hc2tfbG93OworCisJbnVtX2JpdHMgPSBod2Vp Z2h0MzIoZGF0YSk7CisKKwlpZiAobnVtX2JpdHMgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJ bnVtX2xldmVscyA9ICgxIDw8IG51bV9iaXRzKTsKKworCWlmICh0YWJsZS0+Y291bnQgIT0gbnVt X2xldmVscykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGxpbWl0cy0+Y291bnQgIT0gKG51bV9s ZXZlbHMgLSAxKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp YyB2b2lkIHNpX3RyaW1fdm9sdGFnZV90YWJsZV90b19maXRfc3RhdGVfdGFibGUoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJCSAgICAgIHUzMiBtYXhfdm9sdGFnZV9zdGVwcywKKwkJ CQkJICAgICAgc3RydWN0IGF0b21fdm9sdGFnZV90YWJsZSAqdm9sdGFnZV90YWJsZSkKK3sKKwl1 bnNpZ25lZCBpbnQgaSwgZGlmZjsKKworCWlmICh2b2x0YWdlX3RhYmxlLT5jb3VudCA8PSBtYXhf dm9sdGFnZV9zdGVwcykKKwkJcmV0dXJuOworCisJZGlmZiA9IHZvbHRhZ2VfdGFibGUtPmNvdW50 IC0gbWF4X3ZvbHRhZ2Vfc3RlcHM7CisKKwlmb3IgKGk9IDA7IGkgPCBtYXhfdm9sdGFnZV9zdGVw czsgaSsrKQorCQl2b2x0YWdlX3RhYmxlLT5lbnRyaWVzW2ldID0gdm9sdGFnZV90YWJsZS0+ZW50 cmllc1tpICsgZGlmZl07CisKKwl2b2x0YWdlX3RhYmxlLT5jb3VudCA9IG1heF92b2x0YWdlX3N0 ZXBzOworfQorCitzdGF0aWMgaW50IHNpX2dldF9zdmkyX3ZvbHRhZ2VfdGFibGUoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJICAgICBzdHJ1Y3QgYW1kZ3B1X2Nsb2NrX3ZvbHRhZ2Vf ZGVwZW5kZW5jeV90YWJsZSAqdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlLAorCQkJCSAgICAgc3Ry dWN0IGF0b21fdm9sdGFnZV90YWJsZSAqdm9sdGFnZV90YWJsZSkKK3sKKwl1MzIgaTsKKworCWlm ICh2b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisK Kwl2b2x0YWdlX3RhYmxlLT5tYXNrX2xvdyA9IDA7CisJdm9sdGFnZV90YWJsZS0+cGhhc2VfZGVs YXkgPSAwOworCisJdm9sdGFnZV90YWJsZS0+Y291bnQgPSB2b2x0YWdlX2RlcGVuZGVuY3lfdGFi bGUtPmNvdW50OworCWZvciAoaSA9IDA7IGkgPCB2b2x0YWdlX3RhYmxlLT5jb3VudDsgaSsrKSB7 CisJCXZvbHRhZ2VfdGFibGUtPmVudHJpZXNbaV0udmFsdWUgPSB2b2x0YWdlX2RlcGVuZGVuY3lf dGFibGUtPmVudHJpZXNbaV0udjsKKwkJdm9sdGFnZV90YWJsZS0+ZW50cmllc1tpXS5zbWlvX2xv dyA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2lfY29uc3RydWN0X3Zv bHRhZ2VfdGFibGVzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBydjd4 eF9wb3dlcl9pbmZvICpwaSA9IHJ2NzcwX2dldF9waShhZGV2KTsKKwlzdHJ1Y3QgZXZlcmdyZWVu X3Bvd2VyX2luZm8gKmVnX3BpID0gZXZlcmdyZWVuX2dldF9waShhZGV2KTsKKwlzdHJ1Y3Qgc2lf cG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRfcGkoYWRldik7CisJaW50IHJldDsKKworCWlmIChw aS0+dm9sdGFnZV9jb250cm9sKSB7CisJCXJldCA9IGFtZGdwdV9hdG9tYmlvc19nZXRfdm9sdGFn ZV90YWJsZShhZGV2LCBWT0xUQUdFX1RZUEVfVkREQywKKwkJCQkJCSAgICBWT0xUQUdFX09CSl9H UElPX0xVVCwgJmVnX3BpLT52ZGRjX3ZvbHRhZ2VfdGFibGUpOworCQlpZiAocmV0KQorCQkJcmV0 dXJuIHJldDsKKworCQlpZiAoZWdfcGktPnZkZGNfdm9sdGFnZV90YWJsZS5jb3VudCA+IFNJU0xB TkRTX01BWF9OT19WUkVHX1NURVBTKQorCQkJc2lfdHJpbV92b2x0YWdlX3RhYmxlX3RvX2ZpdF9z dGF0ZV90YWJsZShhZGV2LAorCQkJCQkJCQkgU0lTTEFORFNfTUFYX05PX1ZSRUdfU1RFUFMsCisJ CQkJCQkJCSAmZWdfcGktPnZkZGNfdm9sdGFnZV90YWJsZSk7CisJfSBlbHNlIGlmIChzaV9waS0+ dm9sdGFnZV9jb250cm9sX3N2aTIpIHsKKwkJcmV0ID0gc2lfZ2V0X3N2aTJfdm9sdGFnZV90YWJs ZShhZGV2LAorCQkJCQkJJmFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29u X21jbGssCisJCQkJCQkmZWdfcGktPnZkZGNfdm9sdGFnZV90YWJsZSk7CisJCWlmIChyZXQpCisJ CQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChl Z19waS0+dmRkY2lfY29udHJvbCkgeworCQlyZXQgPSBhbWRncHVfYXRvbWJpb3NfZ2V0X3ZvbHRh Z2VfdGFibGUoYWRldiwgVk9MVEFHRV9UWVBFX1ZERENJLAorCQkJCQkJICAgIFZPTFRBR0VfT0JK X0dQSU9fTFVULCAmZWdfcGktPnZkZGNpX3ZvbHRhZ2VfdGFibGUpOworCQlpZiAocmV0KQorCQkJ cmV0dXJuIHJldDsKKworCQlpZiAoZWdfcGktPnZkZGNpX3ZvbHRhZ2VfdGFibGUuY291bnQgPiBT SVNMQU5EU19NQVhfTk9fVlJFR19TVEVQUykKKwkJCXNpX3RyaW1fdm9sdGFnZV90YWJsZV90b19m aXRfc3RhdGVfdGFibGUoYWRldiwKKwkJCQkJCQkJIFNJU0xBTkRTX01BWF9OT19WUkVHX1NURVBT LAorCQkJCQkJCQkgJmVnX3BpLT52ZGRjaV92b2x0YWdlX3RhYmxlKTsKKwl9CisJaWYgKHNpX3Bp LT52ZGRjaV9jb250cm9sX3N2aTIpIHsKKwkJcmV0ID0gc2lfZ2V0X3N2aTJfdm9sdGFnZV90YWJs ZShhZGV2LAorCQkJCQkJJmFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmRkY2lfZGVwZW5kZW5jeV9v bl9tY2xrLAorCQkJCQkJJmVnX3BpLT52ZGRjaV92b2x0YWdlX3RhYmxlKTsKKwkJaWYgKHJldCkK KwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHBpLT5tdmRkX2NvbnRyb2wpIHsKKwkJcmV0ID0g YW1kZ3B1X2F0b21iaW9zX2dldF92b2x0YWdlX3RhYmxlKGFkZXYsIFZPTFRBR0VfVFlQRV9NVkRE QywKKwkJCQkJCSAgICBWT0xUQUdFX09CSl9HUElPX0xVVCwgJnNpX3BpLT5tdmRkX3ZvbHRhZ2Vf dGFibGUpOworCisJCWlmIChyZXQpIHsKKwkJCXBpLT5tdmRkX2NvbnRyb2wgPSBmYWxzZTsKKwkJ CXJldHVybiByZXQ7CisJCX0KKworCQlpZiAoc2lfcGktPm12ZGRfdm9sdGFnZV90YWJsZS5jb3Vu dCA9PSAwKSB7CisJCQlwaS0+bXZkZF9jb250cm9sID0gZmFsc2U7CisJCQlyZXR1cm4gLUVJTlZB TDsKKwkJfQorCisJCWlmIChzaV9waS0+bXZkZF92b2x0YWdlX3RhYmxlLmNvdW50ID4gU0lTTEFO RFNfTUFYX05PX1ZSRUdfU1RFUFMpCisJCQlzaV90cmltX3ZvbHRhZ2VfdGFibGVfdG9fZml0X3N0 YXRlX3RhYmxlKGFkZXYsCisJCQkJCQkJCSBTSVNMQU5EU19NQVhfTk9fVlJFR19TVEVQUywKKwkJ CQkJCQkJICZzaV9waS0+bXZkZF92b2x0YWdlX3RhYmxlKTsKKwl9CisKKwlpZiAoc2lfcGktPnZk ZGNfcGhhc2Vfc2hlZF9jb250cm9sKSB7CisJCXJldCA9IGFtZGdwdV9hdG9tYmlvc19nZXRfdm9s dGFnZV90YWJsZShhZGV2LCBWT0xUQUdFX1RZUEVfVkREQywKKwkJCQkJCSAgICBWT0xUQUdFX09C Sl9QSEFTRV9MVVQsICZzaV9waS0+dmRkY19waGFzZV9zaGVkX3RhYmxlKTsKKwkJaWYgKHJldCkK KwkJCXNpX3BpLT52ZGRjX3BoYXNlX3NoZWRfY29udHJvbCA9IGZhbHNlOworCisJCWlmICgoc2lf cGktPnZkZGNfcGhhc2Vfc2hlZF90YWJsZS5jb3VudCA9PSAwKSB8fAorCQkgICAgKHNpX3BpLT52 ZGRjX3BoYXNlX3NoZWRfdGFibGUuY291bnQgPiBTSVNMQU5EU19NQVhfTk9fVlJFR19TVEVQUykp CisJCQlzaV9waS0+dmRkY19waGFzZV9zaGVkX2NvbnRyb2wgPSBmYWxzZTsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2lfcG9wdWxhdGVfc21jX3ZvbHRhZ2VfdGFibGUoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJCSAgY29uc3Qgc3RydWN0IGF0b21fdm9sdGFn ZV90YWJsZSAqdm9sdGFnZV90YWJsZSwKKwkJCQkJICBTSVNMQU5EU19TTUNfU1RBVEVUQUJMRSAq dGFibGUpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdm9sdGFnZV90 YWJsZS0+Y291bnQ7IGkrKykKKwkJdGFibGUtPmxvd1NNSU9baV0gfD0gY3B1X3RvX2JlMzIodm9s dGFnZV90YWJsZS0+ZW50cmllc1tpXS5zbWlvX2xvdyk7Cit9CisKK3N0YXRpYyBpbnQgc2lfcG9w dWxhdGVfc21jX3ZvbHRhZ2VfdGFibGVzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJ CQkgIFNJU0xBTkRTX1NNQ19TVEFURVRBQkxFICp0YWJsZSkKK3sKKwlzdHJ1Y3QgcnY3eHhfcG93 ZXJfaW5mbyAqcGkgPSBydjc3MF9nZXRfcGkoYWRldik7CisJc3RydWN0IGV2ZXJncmVlbl9wb3dl cl9pbmZvICplZ19waSA9IGV2ZXJncmVlbl9nZXRfcGkoYWRldik7CisJc3RydWN0IHNpX3Bvd2Vy X2luZm8gKnNpX3BpID0gc2lfZ2V0X3BpKGFkZXYpOworCXU4IGk7CisKKwlpZiAoc2lfcGktPnZv bHRhZ2VfY29udHJvbF9zdmkyKSB7CisJCXNpX3dyaXRlX3NtY19zb2Z0X3JlZ2lzdGVyKGFkZXYs IFNJX1NNQ19TT0ZUX1JFR0lTVEVSX3N2aV9yZXdvcmtfZ3Bpb19pZF9zdmMsCisJCQlzaV9waS0+ c3ZjX2dwaW9faWQpOworCQlzaV93cml0ZV9zbWNfc29mdF9yZWdpc3RlcihhZGV2LCBTSV9TTUNf U09GVF9SRUdJU1RFUl9zdmlfcmV3b3JrX2dwaW9faWRfc3ZkLAorCQkJc2lfcGktPnN2ZF9ncGlv X2lkKTsKKwkJc2lfd3JpdGVfc21jX3NvZnRfcmVnaXN0ZXIoYWRldiwgU0lfU01DX1NPRlRfUkVH SVNURVJfc3ZpX3Jld29ya19wbGF0X3R5cGUsCisJCQkJCSAgIDIpOworCX0gZWxzZSB7CisJCWlm IChlZ19waS0+dmRkY192b2x0YWdlX3RhYmxlLmNvdW50KSB7CisJCQlzaV9wb3B1bGF0ZV9zbWNf dm9sdGFnZV90YWJsZShhZGV2LCAmZWdfcGktPnZkZGNfdm9sdGFnZV90YWJsZSwgdGFibGUpOwor CQkJdGFibGUtPnZvbHRhZ2VNYXNrVGFibGUubG93TWFza1tTSVNMQU5EU19TTUNfVk9MVEFHRU1B U0tfVkREQ10gPQorCQkJCWNwdV90b19iZTMyKGVnX3BpLT52ZGRjX3ZvbHRhZ2VfdGFibGUubWFz a19sb3cpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgZWdfcGktPnZkZGNfdm9sdGFnZV90YWJsZS5j b3VudDsgaSsrKSB7CisJCQkJaWYgKHBpLT5tYXhfdmRkY19pbl90YWJsZSA8PSBlZ19waS0+dmRk Y192b2x0YWdlX3RhYmxlLmVudHJpZXNbaV0udmFsdWUpIHsKKwkJCQkJdGFibGUtPm1heFZERENJ bmRleEluUFBUYWJsZSA9IGk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlm IChlZ19waS0+dmRkY2lfdm9sdGFnZV90YWJsZS5jb3VudCkgeworCQkJc2lfcG9wdWxhdGVfc21j X3ZvbHRhZ2VfdGFibGUoYWRldiwgJmVnX3BpLT52ZGRjaV92b2x0YWdlX3RhYmxlLCB0YWJsZSk7 CisKKwkJCXRhYmxlLT52b2x0YWdlTWFza1RhYmxlLmxvd01hc2tbU0lTTEFORFNfU01DX1ZPTFRB R0VNQVNLX1ZERENJXSA9CisJCQkJY3B1X3RvX2JlMzIoZWdfcGktPnZkZGNpX3ZvbHRhZ2VfdGFi bGUubWFza19sb3cpOworCQl9CisKKworCQlpZiAoc2lfcGktPm12ZGRfdm9sdGFnZV90YWJsZS5j b3VudCkgeworCQkJc2lfcG9wdWxhdGVfc21jX3ZvbHRhZ2VfdGFibGUoYWRldiwgJnNpX3BpLT5t dmRkX3ZvbHRhZ2VfdGFibGUsIHRhYmxlKTsKKworCQkJdGFibGUtPnZvbHRhZ2VNYXNrVGFibGUu bG93TWFza1tTSVNMQU5EU19TTUNfVk9MVEFHRU1BU0tfTVZERF0gPQorCQkJCWNwdV90b19iZTMy KHNpX3BpLT5tdmRkX3ZvbHRhZ2VfdGFibGUubWFza19sb3cpOworCQl9CisKKwkJaWYgKHNpX3Bp LT52ZGRjX3BoYXNlX3NoZWRfY29udHJvbCkgeworCQkJaWYgKHNpX3ZhbGlkYXRlX3BoYXNlX3No ZWRkaW5nX3RhYmxlcyhhZGV2LCAmc2lfcGktPnZkZGNfcGhhc2Vfc2hlZF90YWJsZSwKKwkJCQkJ CQkgICAgICAmYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS5waGFzZV9zaGVkZGluZ19saW1pdHNfdGFi bGUpKSB7CisJCQkJc2lfcG9wdWxhdGVfc21jX3ZvbHRhZ2VfdGFibGUoYWRldiwgJnNpX3BpLT52 ZGRjX3BoYXNlX3NoZWRfdGFibGUsIHRhYmxlKTsKKworCQkJCXRhYmxlLT5waGFzZU1hc2tUYWJs ZS5sb3dNYXNrW1NJU0xBTkRTX1NNQ19WT0xUQUdFTUFTS19WRERDXSA9CisJCQkJCWNwdV90b19i ZTMyKHNpX3BpLT52ZGRjX3BoYXNlX3NoZWRfdGFibGUubWFza19sb3cpOworCisJCQkJc2lfd3Jp dGVfc21jX3NvZnRfcmVnaXN0ZXIoYWRldiwgU0lfU01DX1NPRlRfUkVHSVNURVJfcGhhc2Vfc2hl ZGRpbmdfZGVsYXksCisJCQkJCQkJICAgKHUzMilzaV9waS0+dmRkY19waGFzZV9zaGVkX3RhYmxl LnBoYXNlX2RlbGF5KTsKKwkJCX0gZWxzZSB7CisJCQkJc2lfcGktPnZkZGNfcGhhc2Vfc2hlZF9j b250cm9sID0gZmFsc2U7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBzaV9wb3B1bGF0ZV92b2x0YWdlX3ZhbHVlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGF0b21fdm9sdGFnZV90YWJsZSAqdGFibGUsCisJCQkJ ICAgICB1MTYgdmFsdWUsIFNJU0xBTkRTX1NNQ19WT0xUQUdFX1ZBTFVFICp2b2x0YWdlKQorewor CXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHRhYmxlLT5jb3VudDsgaSsrKSB7 CisJCWlmICh2YWx1ZSA8PSB0YWJsZS0+ZW50cmllc1tpXS52YWx1ZSkgeworCQkJdm9sdGFnZS0+ aW5kZXggPSAodTgpaTsKKwkJCXZvbHRhZ2UtPnZhbHVlID0gY3B1X3RvX2JlMTYodGFibGUtPmVu dHJpZXNbaV0udmFsdWUpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA+PSB0YWJsZS0+ Y291bnQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg c2lfcG9wdWxhdGVfbXZkZF92YWx1ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdTMyIG1j bGssCisJCQkJICBTSVNMQU5EU19TTUNfVk9MVEFHRV9WQUxVRSAqdm9sdGFnZSkKK3sKKwlzdHJ1 Y3QgcnY3eHhfcG93ZXJfaW5mbyAqcGkgPSBydjc3MF9nZXRfcGkoYWRldik7CisJc3RydWN0IHNp X3Bvd2VyX2luZm8gKnNpX3BpID0gc2lfZ2V0X3BpKGFkZXYpOworCisJaWYgKHBpLT5tdmRkX2Nv bnRyb2wpIHsKKwkJaWYgKG1jbGsgPD0gcGktPm12ZGRfc3BsaXRfZnJlcXVlbmN5KQorCQkJdm9s dGFnZS0+aW5kZXggPSAwOworCQllbHNlCisJCQl2b2x0YWdlLT5pbmRleCA9ICh1OCkoc2lfcGkt Pm12ZGRfdm9sdGFnZV90YWJsZS5jb3VudCkgLSAxOworCisJCXZvbHRhZ2UtPnZhbHVlID0gY3B1 X3RvX2JlMTYoc2lfcGktPm12ZGRfdm9sdGFnZV90YWJsZS5lbnRyaWVzW3ZvbHRhZ2UtPmluZGV4 XS52YWx1ZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpX2dldF9zdGRfdm9s dGFnZV92YWx1ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkgICAgU0lTTEFORFNf U01DX1ZPTFRBR0VfVkFMVUUgKnZvbHRhZ2UsCisJCQkJICAgIHUxNiAqc3RkX3ZvbHRhZ2UpCit7 CisJdTE2IHZfaW5kZXg7CisJYm9vbCB2b2x0YWdlX2ZvdW5kID0gZmFsc2U7CisJKnN0ZF92b2x0 YWdlID0gYmUxNl90b19jcHUodm9sdGFnZS0+dmFsdWUpOworCisJaWYgKGFkZXYtPnBtLmRwbS5k eW5fc3RhdGUuY2FjX2xlYWthZ2VfdGFibGUuZW50cmllcykgeworCQlpZiAoYWRldi0+cG0uZHBt LnBsYXRmb3JtX2NhcHMgJiBBVE9NX1BQX1BMQVRGT1JNX0NBUF9ORVdfQ0FDX1ZPTFRBR0UpIHsK KwkJCWlmIChhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9zY2xrLmVu dHJpZXMgPT0gTlVMTCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJZm9yICh2X2luZGV4ID0g MDsgKHUzMil2X2luZGV4IDwgYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lf b25fc2Nsay5jb3VudDsgdl9pbmRleCsrKSB7CisJCQkJaWYgKGJlMTZfdG9fY3B1KHZvbHRhZ2Ut PnZhbHVlKSA9PQorCQkJCSAgICAodTE2KWFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmRkY19kZXBl bmRlbmN5X29uX3NjbGsuZW50cmllc1t2X2luZGV4XS52KSB7CisJCQkJCXZvbHRhZ2VfZm91bmQg PSB0cnVlOworCQkJCQlpZiAoKHUzMil2X2luZGV4IDwgYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS5j YWNfbGVha2FnZV90YWJsZS5jb3VudCkKKwkJCQkJCSpzdGRfdm9sdGFnZSA9CisJCQkJCQkJYWRl di0+cG0uZHBtLmR5bl9zdGF0ZS5jYWNfbGVha2FnZV90YWJsZS5lbnRyaWVzW3ZfaW5kZXhdLnZk ZGM7CisJCQkJCWVsc2UKKwkJCQkJCSpzdGRfdm9sdGFnZSA9CisJCQkJCQkJYWRldi0+cG0uZHBt LmR5bl9zdGF0ZS5jYWNfbGVha2FnZV90YWJsZS5lbnRyaWVzW2FkZXYtPnBtLmRwbS5keW5fc3Rh dGUuY2FjX2xlYWthZ2VfdGFibGUuY291bnQtMV0udmRkYzsKKwkJCQkJYnJlYWs7CisJCQkJfQor CQkJfQorCisJCQlpZiAoIXZvbHRhZ2VfZm91bmQpIHsKKwkJCQlmb3IgKHZfaW5kZXggPSAwOyAo dTMyKXZfaW5kZXggPCBhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9z Y2xrLmNvdW50OyB2X2luZGV4KyspIHsKKwkJCQkJaWYgKGJlMTZfdG9fY3B1KHZvbHRhZ2UtPnZh bHVlKSA8PQorCQkJCQkgICAgKHUxNilhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5k ZW5jeV9vbl9zY2xrLmVudHJpZXNbdl9pbmRleF0udikgeworCQkJCQkJdm9sdGFnZV9mb3VuZCA9 IHRydWU7CisJCQkJCQlpZiAoKHUzMil2X2luZGV4IDwgYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS5j YWNfbGVha2FnZV90YWJsZS5jb3VudCkKKwkJCQkJCQkqc3RkX3ZvbHRhZ2UgPQorCQkJCQkJCQlh ZGV2LT5wbS5kcG0uZHluX3N0YXRlLmNhY19sZWFrYWdlX3RhYmxlLmVudHJpZXNbdl9pbmRleF0u dmRkYzsKKwkJCQkJCWVsc2UKKwkJCQkJCQkqc3RkX3ZvbHRhZ2UgPQorCQkJCQkJCQlhZGV2LT5w bS5kcG0uZHluX3N0YXRlLmNhY19sZWFrYWdlX3RhYmxlLmVudHJpZXNbYWRldi0+cG0uZHBtLmR5 bl9zdGF0ZS5jYWNfbGVha2FnZV90YWJsZS5jb3VudC0xXS52ZGRjOworCQkJCQkJYnJlYWs7CisJ CQkJCX0KKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoKHUzMil2b2x0YWdlLT5pbmRl eCA8IGFkZXYtPnBtLmRwbS5keW5fc3RhdGUuY2FjX2xlYWthZ2VfdGFibGUuY291bnQpCisJCQkJ KnN0ZF92b2x0YWdlID0gYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS5jYWNfbGVha2FnZV90YWJsZS5l bnRyaWVzW3ZvbHRhZ2UtPmluZGV4XS52ZGRjOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgc2lfcG9wdWxhdGVfc3RkX3ZvbHRhZ2VfdmFsdWUoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsCisJCQkJCSB1MTYgdmFsdWUsIHU4IGluZGV4LAorCQkJCQkgU0lTTEFORFNf U01DX1ZPTFRBR0VfVkFMVUUgKnZvbHRhZ2UpCit7CisJdm9sdGFnZS0+aW5kZXggPSBpbmRleDsK Kwl2b2x0YWdlLT52YWx1ZSA9IGNwdV90b19iZTE2KHZhbHVlKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IHNpX3BvcHVsYXRlX3BoYXNlX3NoZWRkaW5nX3ZhbHVlKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LAorCQkJCQkgICAgY29uc3Qgc3RydWN0IGFtZGdwdV9waGFzZV9zaGVk ZGluZ19saW1pdHNfdGFibGUgKmxpbWl0cywKKwkJCQkJICAgIHUxNiB2b2x0YWdlLCB1MzIgc2Ns aywgdTMyIG1jbGssCisJCQkJCSAgICBTSVNMQU5EU19TTUNfVk9MVEFHRV9WQUxVRSAqc21jX3Zv bHRhZ2UpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGltaXRzLT5j b3VudDsgaSsrKSB7CisJCWlmICgodm9sdGFnZSA8PSBsaW1pdHMtPmVudHJpZXNbaV0udm9sdGFn ZSkgJiYKKwkJICAgIChzY2xrIDw9IGxpbWl0cy0+ZW50cmllc1tpXS5zY2xrKSAmJgorCQkgICAg KG1jbGsgPD0gbGltaXRzLT5lbnRyaWVzW2ldLm1jbGspKQorCQkJYnJlYWs7CisJfQorCisJc21j X3ZvbHRhZ2UtPnBoYXNlX3NldHRpbmdzID0gKHU4KWk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBzaV9pbml0X2FyYl90YWJsZV9pbmRleChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl dikKK3sKKwlzdHJ1Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRfcGkoYWRldik7CisJ dTMyIHRtcDsKKwlpbnQgcmV0OworCisJcmV0ID0gc2lfcmVhZF9zbWNfc3JhbV9kd29yZChhZGV2 LCBzaV9waS0+YXJiX3RhYmxlX3N0YXJ0LCAmdG1wLCBzaV9waS0+c3JhbV9lbmQpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwl0bXAgJj0gMHgwMEZGRkZGRjsKKwl0bXAgfD0gTUNfQ0df QVJCX0ZSRVFfRjEgPDwgMjQ7CisKKwlyZXR1cm4gc2lfd3JpdGVfc21jX3NyYW1fZHdvcmQoYWRl diwgc2lfcGktPmFyYl90YWJsZV9zdGFydCwgIHRtcCwgc2lfcGktPnNyYW1fZW5kKTsKK30KKwor c3RhdGljIGludCBzaV9pbml0aWFsX3N3aXRjaF9mcm9tX2FyYl9mMF90b19mMShzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldikKK3sKKwlyZXR1cm4gbmlfY29weV9hbmRfc3dpdGNoX2FyYl9zZXRz KGFkZXYsIE1DX0NHX0FSQl9GUkVRX0YwLCBNQ19DR19BUkJfRlJFUV9GMSk7Cit9CisKK3N0YXRp YyBpbnQgc2lfcmVzZXRfdG9fZGVmYXVsdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sK KwlyZXR1cm4gKHNpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LCBQUFNNQ19NU0dfUmVzZXRUb0RlZmF1 bHRzKSA9PSBQUFNNQ19SZXN1bHRfT0spID8KKwkJMCA6IC1FSU5WQUw7Cit9CisKK3N0YXRpYyBp bnQgc2lfZm9yY2Vfc3dpdGNoX3RvX2FyYl9mMChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK K3sKKwlzdHJ1Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRfcGkoYWRldik7CisJdTMy IHRtcDsKKwlpbnQgcmV0OworCisJcmV0ID0gc2lfcmVhZF9zbWNfc3JhbV9kd29yZChhZGV2LCBz aV9waS0+YXJiX3RhYmxlX3N0YXJ0LAorCQkJCSAgICAgJnRtcCwgc2lfcGktPnNyYW1fZW5kKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdG1wID0gKHRtcCA+PiAyNCkgJiAweGZmOwor CisJaWYgKHRtcCA9PSBNQ19DR19BUkJfRlJFUV9GMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4g bmlfY29weV9hbmRfc3dpdGNoX2FyYl9zZXRzKGFkZXYsIHRtcCwgTUNfQ0dfQVJCX0ZSRVFfRjAp OworfQorCitzdGF0aWMgdTMyIHNpX2NhbGN1bGF0ZV9tZW1vcnlfcmVmcmVzaF9yYXRlKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCQkgICAgdTMyIGVuZ2luZV9jbG9jaykKK3sKKwl1 MzIgZHJhbV9yb3dzOworCXUzMiBkcmFtX3JlZnJlc2hfcmF0ZTsKKwl1MzIgbWNfYXJiX3Jmc2hf cmF0ZTsKKwl1MzIgdG1wID0gKFJSRUczMihNQ19BUkJfUkFNQ0ZHKSAmIE5PT0ZST1dTX01BU0sp ID4+IE5PT0ZST1dTX1NISUZUOworCisJaWYgKHRtcCA+PSA0KQorCQlkcmFtX3Jvd3MgPSAxNjM4 NDsKKwllbHNlCisJCWRyYW1fcm93cyA9IDEgPDwgKHRtcCArIDEwKTsKKworCWRyYW1fcmVmcmVz aF9yYXRlID0gMSA8PCAoKFJSRUczMihNQ19TRVFfTUlTQzApICYgMHgzKSArIDMpOworCW1jX2Fy Yl9yZnNoX3JhdGUgPSAoKGVuZ2luZV9jbG9jayAqIDEwKSAqIGRyYW1fcmVmcmVzaF9yYXRlIC8g ZHJhbV9yb3dzIC0gMzIpIC8gNjQ7CisKKwlyZXR1cm4gbWNfYXJiX3Jmc2hfcmF0ZTsKK30KKwor c3RhdGljIGludCBzaV9wb3B1bGF0ZV9tZW1vcnlfdGltaW5nX3BhcmFtZXRlcnMoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJCQlzdHJ1Y3QgcnY3eHhfcGwgKnBsLAorCQkJCQkJU01D X1NJc2xhbmRzX01DQXJiRHJhbVRpbWluZ1JlZ2lzdGVyU2V0ICphcmJfcmVncykKK3sKKwl1MzIg ZHJhbV90aW1pbmc7CisJdTMyIGRyYW1fdGltaW5nMjsKKwl1MzIgYnVyc3RfdGltZTsKKworCWFy Yl9yZWdzLT5tY19hcmJfcmZzaF9yYXRlID0KKwkJKHU4KXNpX2NhbGN1bGF0ZV9tZW1vcnlfcmVm cmVzaF9yYXRlKGFkZXYsIHBsLT5zY2xrKTsKKworCWFtZGdwdV9hdG9tYmlvc19zZXRfZW5naW5l X2RyYW1fdGltaW5ncyhhZGV2LAorCQkJCQkgICAgcGwtPnNjbGssCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsLT5tY2xrKTsKKworCWRyYW1fdGltaW5nICA9 IFJSRUczMihNQ19BUkJfRFJBTV9USU1JTkcpOworCWRyYW1fdGltaW5nMiA9IFJSRUczMihNQ19B UkJfRFJBTV9USU1JTkcyKTsKKwlidXJzdF90aW1lID0gUlJFRzMyKE1DX0FSQl9CVVJTVF9USU1F KSAmIFNUQVRFMF9NQVNLOworCisJYXJiX3JlZ3MtPm1jX2FyYl9kcmFtX3RpbWluZyAgPSBjcHVf dG9fYmUzMihkcmFtX3RpbWluZyk7CisJYXJiX3JlZ3MtPm1jX2FyYl9kcmFtX3RpbWluZzIgPSBj cHVfdG9fYmUzMihkcmFtX3RpbWluZzIpOworCWFyYl9yZWdzLT5tY19hcmJfYnVyc3RfdGltZSA9 ICh1OClidXJzdF90aW1lOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2lfZG9fcHJv Z3JhbV9tZW1vcnlfdGltaW5nX3BhcmFtZXRlcnMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs CisJCQkJCQkgIHN0cnVjdCBhbWRncHVfcHMgKmFtZGdwdV9zdGF0ZSwKKwkJCQkJCSAgdW5zaWdu ZWQgaW50IGZpcnN0X2FyYl9zZXQpCit7CisJc3RydWN0IHNpX3Bvd2VyX2luZm8gKnNpX3BpID0g c2lfZ2V0X3BpKGFkZXYpOworCXN0cnVjdCAgc2lfcHMgKnN0YXRlID0gc2lfZ2V0X3BzKGFtZGdw dV9zdGF0ZSk7CisJU01DX1NJc2xhbmRzX01DQXJiRHJhbVRpbWluZ1JlZ2lzdGVyU2V0IGFyYl9y ZWdzID0geyAwIH07CisJaW50IGksIHJldCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RhdGUt PnBlcmZvcm1hbmNlX2xldmVsX2NvdW50OyBpKyspIHsKKwkJcmV0ID0gc2lfcG9wdWxhdGVfbWVt b3J5X3RpbWluZ19wYXJhbWV0ZXJzKGFkZXYsICZzdGF0ZS0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ld LCAmYXJiX3JlZ3MpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCXJldCA9IHNpX2NvcHlfYnl0 ZXNfdG9fc21jKGFkZXYsCisJCQkJCSAgIHNpX3BpLT5hcmJfdGFibGVfc3RhcnQgKworCQkJCQkg ICBvZmZzZXRvZihTTUNfU0lzbGFuZHNfTUNBcmJEcmFtVGltaW5nUmVnaXN0ZXJzLCBkYXRhKSAr CisJCQkJCSAgIHNpemVvZihTTUNfU0lzbGFuZHNfTUNBcmJEcmFtVGltaW5nUmVnaXN0ZXJTZXQp ICogKGZpcnN0X2FyYl9zZXQgKyBpKSwKKwkJCQkJICAgKHU4ICopJmFyYl9yZWdzLAorCQkJCQkg ICBzaXplb2YoU01DX1NJc2xhbmRzX01DQXJiRHJhbVRpbWluZ1JlZ2lzdGVyU2V0KSwKKwkJCQkJ ICAgc2lfcGktPnNyYW1fZW5kKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworICAgICAgICB9CisK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNpX3Byb2dyYW1fbWVtb3J5X3RpbWluZ19w YXJhbWV0ZXJzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCQkgICAgICAgc3RydWN0 IGFtZGdwdV9wcyAqYW1kZ3B1X25ld19zdGF0ZSkKK3sKKwlyZXR1cm4gc2lfZG9fcHJvZ3JhbV9t ZW1vcnlfdGltaW5nX3BhcmFtZXRlcnMoYWRldiwgYW1kZ3B1X25ld19zdGF0ZSwKKwkJCQkJCSAg ICAgIFNJU0xBTkRTX0RSSVZFUl9TVEFURV9BUkJfSU5ERVgpOworfQorCitzdGF0aWMgaW50IHNp X3BvcHVsYXRlX2luaXRpYWxfbXZkZF92YWx1ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwK KwkJCQkJICBzdHJ1Y3QgU0lTTEFORFNfU01DX1ZPTFRBR0VfVkFMVUUgKnZvbHRhZ2UpCit7CisJ c3RydWN0IHJ2N3h4X3Bvd2VyX2luZm8gKnBpID0gcnY3NzBfZ2V0X3BpKGFkZXYpOworCXN0cnVj dCBzaV9wb3dlcl9pbmZvICpzaV9waSA9IHNpX2dldF9waShhZGV2KTsKKworCWlmIChwaS0+bXZk ZF9jb250cm9sKQorCQlyZXR1cm4gc2lfcG9wdWxhdGVfdm9sdGFnZV92YWx1ZShhZGV2LCAmc2lf cGktPm12ZGRfdm9sdGFnZV90YWJsZSwKKwkJCQkJCSBzaV9waS0+bXZkZF9ib290dXBfdmFsdWUs IHZvbHRhZ2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2lfcG9wdWxhdGVfc21j X2luaXRpYWxfc3RhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJCSBzdHJ1Y3Qg YW1kZ3B1X3BzICphbWRncHVfaW5pdGlhbF9zdGF0ZSwKKwkJCQkJIFNJU0xBTkRTX1NNQ19TVEFU RVRBQkxFICp0YWJsZSkKK3sKKwlzdHJ1Y3QgIHNpX3BzICppbml0aWFsX3N0YXRlID0gc2lfZ2V0 X3BzKGFtZGdwdV9pbml0aWFsX3N0YXRlKTsKKwlzdHJ1Y3QgcnY3eHhfcG93ZXJfaW5mbyAqcGkg PSBydjc3MF9nZXRfcGkoYWRldik7CisJc3RydWN0IGV2ZXJncmVlbl9wb3dlcl9pbmZvICplZ19w aSA9IGV2ZXJncmVlbl9nZXRfcGkoYWRldik7CisJc3RydWN0IHNpX3Bvd2VyX2luZm8gKnNpX3Bp ID0gc2lfZ2V0X3BpKGFkZXYpOworCXUzMiByZWc7CisJaW50IHJldDsKKworCXRhYmxlLT5pbml0 aWFsU3RhdGUubGV2ZWxzWzBdLm1jbGsudkRMTF9DTlRMID0KKwkJY3B1X3RvX2JlMzIoc2lfcGkt PmNsb2NrX3JlZ2lzdGVycy5kbGxfY250bCk7CisJdGFibGUtPmluaXRpYWxTdGF0ZS5sZXZlbHNb MF0ubWNsay52TUNMS19QV1JNR1RfQ05UTCA9CisJCWNwdV90b19iZTMyKHNpX3BpLT5jbG9ja19y ZWdpc3RlcnMubWNsa19wd3JtZ3RfY250bCk7CisJdGFibGUtPmluaXRpYWxTdGF0ZS5sZXZlbHNb MF0ubWNsay52TVBMTF9BRF9GVU5DX0NOVEwgPQorCQljcHVfdG9fYmUzMihzaV9waS0+Y2xvY2tf cmVnaXN0ZXJzLm1wbGxfYWRfZnVuY19jbnRsKTsKKwl0YWJsZS0+aW5pdGlhbFN0YXRlLmxldmVs c1swXS5tY2xrLnZNUExMX0RRX0ZVTkNfQ05UTCA9CisJCWNwdV90b19iZTMyKHNpX3BpLT5jbG9j a19yZWdpc3RlcnMubXBsbF9kcV9mdW5jX2NudGwpOworCXRhYmxlLT5pbml0aWFsU3RhdGUubGV2 ZWxzWzBdLm1jbGsudk1QTExfRlVOQ19DTlRMID0KKwkJY3B1X3RvX2JlMzIoc2lfcGktPmNsb2Nr X3JlZ2lzdGVycy5tcGxsX2Z1bmNfY250bCk7CisJdGFibGUtPmluaXRpYWxTdGF0ZS5sZXZlbHNb MF0ubWNsay52TVBMTF9GVU5DX0NOVExfMSA9CisJCWNwdV90b19iZTMyKHNpX3BpLT5jbG9ja19y ZWdpc3RlcnMubXBsbF9mdW5jX2NudGxfMSk7CisJdGFibGUtPmluaXRpYWxTdGF0ZS5sZXZlbHNb MF0ubWNsay52TVBMTF9GVU5DX0NOVExfMiA9CisJCWNwdV90b19iZTMyKHNpX3BpLT5jbG9ja19y ZWdpc3RlcnMubXBsbF9mdW5jX2NudGxfMik7CisJdGFibGUtPmluaXRpYWxTdGF0ZS5sZXZlbHNb MF0ubWNsay52TVBMTF9TUyA9CisJCWNwdV90b19iZTMyKHNpX3BpLT5jbG9ja19yZWdpc3RlcnMu bXBsbF9zczEpOworCXRhYmxlLT5pbml0aWFsU3RhdGUubGV2ZWxzWzBdLm1jbGsudk1QTExfU1My ID0KKwkJY3B1X3RvX2JlMzIoc2lfcGktPmNsb2NrX3JlZ2lzdGVycy5tcGxsX3NzMik7CisKKwl0 YWJsZS0+aW5pdGlhbFN0YXRlLmxldmVsc1swXS5tY2xrLm1jbGtfdmFsdWUgPQorCQljcHVfdG9f YmUzMihpbml0aWFsX3N0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbHNbMF0ubWNsayk7CisKKwl0YWJs ZS0+aW5pdGlhbFN0YXRlLmxldmVsc1swXS5zY2xrLnZDR19TUExMX0ZVTkNfQ05UTCA9CisJCWNw dV90b19iZTMyKHNpX3BpLT5jbG9ja19yZWdpc3RlcnMuY2dfc3BsbF9mdW5jX2NudGwpOworCXRh YmxlLT5pbml0aWFsU3RhdGUubGV2ZWxzWzBdLnNjbGsudkNHX1NQTExfRlVOQ19DTlRMXzIgPQor CQljcHVfdG9fYmUzMihzaV9waS0+Y2xvY2tfcmVnaXN0ZXJzLmNnX3NwbGxfZnVuY19jbnRsXzIp OworCXRhYmxlLT5pbml0aWFsU3RhdGUubGV2ZWxzWzBdLnNjbGsudkNHX1NQTExfRlVOQ19DTlRM XzMgPQorCQljcHVfdG9fYmUzMihzaV9waS0+Y2xvY2tfcmVnaXN0ZXJzLmNnX3NwbGxfZnVuY19j bnRsXzMpOworCXRhYmxlLT5pbml0aWFsU3RhdGUubGV2ZWxzWzBdLnNjbGsudkNHX1NQTExfRlVO Q19DTlRMXzQgPQorCQljcHVfdG9fYmUzMihzaV9waS0+Y2xvY2tfcmVnaXN0ZXJzLmNnX3NwbGxf ZnVuY19jbnRsXzQpOworCXRhYmxlLT5pbml0aWFsU3RhdGUubGV2ZWxzWzBdLnNjbGsudkNHX1NQ TExfU1BSRUFEX1NQRUNUUlVNID0KKwkJY3B1X3RvX2JlMzIoc2lfcGktPmNsb2NrX3JlZ2lzdGVy cy5jZ19zcGxsX3NwcmVhZF9zcGVjdHJ1bSk7CisJdGFibGUtPmluaXRpYWxTdGF0ZS5sZXZlbHNb MF0uc2Nsay52Q0dfU1BMTF9TUFJFQURfU1BFQ1RSVU1fMiAgPQorCQljcHVfdG9fYmUzMihzaV9w aS0+Y2xvY2tfcmVnaXN0ZXJzLmNnX3NwbGxfc3ByZWFkX3NwZWN0cnVtXzIpOworCisJdGFibGUt PmluaXRpYWxTdGF0ZS5sZXZlbHNbMF0uc2Nsay5zY2xrX3ZhbHVlID0KKwkJY3B1X3RvX2JlMzIo aW5pdGlhbF9zdGF0ZS0+cGVyZm9ybWFuY2VfbGV2ZWxzWzBdLnNjbGspOworCisJdGFibGUtPmlu aXRpYWxTdGF0ZS5sZXZlbHNbMF0uYXJiUmVmcmVzaFN0YXRlID0KKwkJU0lTTEFORFNfSU5JVElB TF9TVEFURV9BUkJfSU5ERVg7CisKKwl0YWJsZS0+aW5pdGlhbFN0YXRlLmxldmVsc1swXS5BQ0lu ZGV4ID0gMDsKKworCXJldCA9IHNpX3BvcHVsYXRlX3ZvbHRhZ2VfdmFsdWUoYWRldiwgJmVnX3Bp LT52ZGRjX3ZvbHRhZ2VfdGFibGUsCisJCQkJCWluaXRpYWxfc3RhdGUtPnBlcmZvcm1hbmNlX2xl dmVsc1swXS52ZGRjLAorCQkJCQkmdGFibGUtPmluaXRpYWxTdGF0ZS5sZXZlbHNbMF0udmRkYyk7 CisKKwlpZiAoIXJldCkgeworCQl1MTYgc3RkX3ZkZGM7CisKKwkJcmV0ID0gc2lfZ2V0X3N0ZF92 b2x0YWdlX3ZhbHVlKGFkZXYsCisJCQkJCSAgICAgICAmdGFibGUtPmluaXRpYWxTdGF0ZS5sZXZl bHNbMF0udmRkYywKKwkJCQkJICAgICAgICZzdGRfdmRkYyk7CisJCWlmICghcmV0KQorCQkJc2lf cG9wdWxhdGVfc3RkX3ZvbHRhZ2VfdmFsdWUoYWRldiwgc3RkX3ZkZGMsCisJCQkJCQkgICAgICB0 YWJsZS0+aW5pdGlhbFN0YXRlLmxldmVsc1swXS52ZGRjLmluZGV4LAorCQkJCQkJICAgICAgJnRh YmxlLT5pbml0aWFsU3RhdGUubGV2ZWxzWzBdLnN0ZF92ZGRjKTsKKwl9CisKKwlpZiAoZWdfcGkt PnZkZGNpX2NvbnRyb2wpCisJCXNpX3BvcHVsYXRlX3ZvbHRhZ2VfdmFsdWUoYWRldiwKKwkJCQkJ ICAmZWdfcGktPnZkZGNpX3ZvbHRhZ2VfdGFibGUsCisJCQkJCSAgaW5pdGlhbF9zdGF0ZS0+cGVy Zm9ybWFuY2VfbGV2ZWxzWzBdLnZkZGNpLAorCQkJCQkgICZ0YWJsZS0+aW5pdGlhbFN0YXRlLmxl dmVsc1swXS52ZGRjaSk7CisKKwlpZiAoc2lfcGktPnZkZGNfcGhhc2Vfc2hlZF9jb250cm9sKQor CQlzaV9wb3B1bGF0ZV9waGFzZV9zaGVkZGluZ192YWx1ZShhZGV2LAorCQkJCQkJICZhZGV2LT5w bS5kcG0uZHluX3N0YXRlLnBoYXNlX3NoZWRkaW5nX2xpbWl0c190YWJsZSwKKwkJCQkJCSBpbml0 aWFsX3N0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbHNbMF0udmRkYywKKwkJCQkJCSBpbml0aWFsX3N0 YXRlLT5wZXJmb3JtYW5jZV9sZXZlbHNbMF0uc2NsaywKKwkJCQkJCSBpbml0aWFsX3N0YXRlLT5w ZXJmb3JtYW5jZV9sZXZlbHNbMF0ubWNsaywKKwkJCQkJCSAmdGFibGUtPmluaXRpYWxTdGF0ZS5s ZXZlbHNbMF0udmRkYyk7CisKKwlzaV9wb3B1bGF0ZV9pbml0aWFsX212ZGRfdmFsdWUoYWRldiwg JnRhYmxlLT5pbml0aWFsU3RhdGUubGV2ZWxzWzBdLm12ZGQpOworCisJcmVnID0gQ0dfUigweGZm ZmYpIHwgQ0dfTCgwKTsKKwl0YWJsZS0+aW5pdGlhbFN0YXRlLmxldmVsc1swXS5hVCA9IGNwdV90 b19iZTMyKHJlZyk7CisKKwl0YWJsZS0+aW5pdGlhbFN0YXRlLmxldmVsc1swXS5iU1AgPSBjcHVf dG9fYmUzMihwaS0+ZHNwKTsKKworCXRhYmxlLT5pbml0aWFsU3RhdGUubGV2ZWxzWzBdLmdlbjJQ Q0lFID0gKHU4KXNpX3BpLT5ib290X3BjaWVfZ2VuOworCisJaWYgKHBpLT5tZW1fZ2RkcjUpIHsK KwkJdGFibGUtPmluaXRpYWxTdGF0ZS5sZXZlbHNbMF0uc3Ryb2JlTW9kZSA9CisJCQlzaV9nZXRf c3Ryb2JlX21vZGVfc2V0dGluZ3MoYWRldiwKKwkJCQkJCSAgICBpbml0aWFsX3N0YXRlLT5wZXJm b3JtYW5jZV9sZXZlbHNbMF0ubWNsayk7CisKKwkJaWYgKGluaXRpYWxfc3RhdGUtPnBlcmZvcm1h bmNlX2xldmVsc1swXS5tY2xrID4gcGktPm1jbGtfZWRjX2VuYWJsZV90aHJlc2hvbGQpCisJCQl0 YWJsZS0+aW5pdGlhbFN0YXRlLmxldmVsc1swXS5tY0ZsYWdzID0gU0lTTEFORFNfU01DX01DX0VE Q19SRF9GTEFHIHwgU0lTTEFORFNfU01DX01DX0VEQ19XUl9GTEFHOworCQllbHNlCisJCQl0YWJs ZS0+aW5pdGlhbFN0YXRlLmxldmVsc1swXS5tY0ZsYWdzID0gIDA7CisJfQorCisJdGFibGUtPmlu aXRpYWxTdGF0ZS5sZXZlbENvdW50ID0gMTsKKworCXRhYmxlLT5pbml0aWFsU3RhdGUuZmxhZ3Mg fD0gUFBTTUNfU1dTVEFURV9GTEFHX0RDOworCisJdGFibGUtPmluaXRpYWxTdGF0ZS5sZXZlbHNb MF0uZHBtMi5NYXhQUyA9IDA7CisJdGFibGUtPmluaXRpYWxTdGF0ZS5sZXZlbHNbMF0uZHBtMi5O ZWFyVERQRGVjID0gMDsKKwl0YWJsZS0+aW5pdGlhbFN0YXRlLmxldmVsc1swXS5kcG0yLkFib3Zl U2FmZUluYyA9IDA7CisJdGFibGUtPmluaXRpYWxTdGF0ZS5sZXZlbHNbMF0uZHBtMi5CZWxvd1Nh ZmVJbmMgPSAwOworCXRhYmxlLT5pbml0aWFsU3RhdGUubGV2ZWxzWzBdLmRwbTIuUHdyRWZmaWNp ZW5jeVJhdGlvID0gMDsKKworCXJlZyA9IE1JTl9QT1dFUl9NQVNLIHwgTUFYX1BPV0VSX01BU0s7 CisJdGFibGUtPmluaXRpYWxTdGF0ZS5sZXZlbHNbMF0uU1FQb3dlclRocm90dGxlID0gY3B1X3Rv X2JlMzIocmVnKTsKKworCXJlZyA9IE1BWF9QT1dFUl9ERUxUQV9NQVNLIHwgU1RJX1NJWkVfTUFT SyB8IExUSV9SQVRJT19NQVNLOworCXRhYmxlLT5pbml0aWFsU3RhdGUubGV2ZWxzWzBdLlNRUG93 ZXJUaHJvdHRsZV8yID0gY3B1X3RvX2JlMzIocmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHNpX3BvcHVsYXRlX3NtY19hY3BpX3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2LAorCQkJCSAgICAgIFNJU0xBTkRTX1NNQ19TVEFURVRBQkxFICp0YWJsZSkKK3sKKwlzdHJ1 Y3QgcnY3eHhfcG93ZXJfaW5mbyAqcGkgPSBydjc3MF9nZXRfcGkoYWRldik7CisJc3RydWN0IGV2 ZXJncmVlbl9wb3dlcl9pbmZvICplZ19waSA9IGV2ZXJncmVlbl9nZXRfcGkoYWRldik7CisJc3Ry dWN0IHNpX3Bvd2VyX2luZm8gKnNpX3BpID0gc2lfZ2V0X3BpKGFkZXYpOworCXUzMiBzcGxsX2Z1 bmNfY250bCA9IHNpX3BpLT5jbG9ja19yZWdpc3RlcnMuY2dfc3BsbF9mdW5jX2NudGw7CisJdTMy IHNwbGxfZnVuY19jbnRsXzIgPSBzaV9waS0+Y2xvY2tfcmVnaXN0ZXJzLmNnX3NwbGxfZnVuY19j bnRsXzI7CisJdTMyIHNwbGxfZnVuY19jbnRsXzMgPSBzaV9waS0+Y2xvY2tfcmVnaXN0ZXJzLmNn X3NwbGxfZnVuY19jbnRsXzM7CisJdTMyIHNwbGxfZnVuY19jbnRsXzQgPSBzaV9waS0+Y2xvY2tf cmVnaXN0ZXJzLmNnX3NwbGxfZnVuY19jbnRsXzQ7CisJdTMyIGRsbF9jbnRsID0gc2lfcGktPmNs b2NrX3JlZ2lzdGVycy5kbGxfY250bDsKKwl1MzIgbWNsa19wd3JtZ3RfY250bCA9IHNpX3BpLT5j bG9ja19yZWdpc3RlcnMubWNsa19wd3JtZ3RfY250bDsKKwl1MzIgbXBsbF9hZF9mdW5jX2NudGwg PSBzaV9waS0+Y2xvY2tfcmVnaXN0ZXJzLm1wbGxfYWRfZnVuY19jbnRsOworCXUzMiBtcGxsX2Rx X2Z1bmNfY250bCA9IHNpX3BpLT5jbG9ja19yZWdpc3RlcnMubXBsbF9kcV9mdW5jX2NudGw7CisJ dTMyIG1wbGxfZnVuY19jbnRsID0gc2lfcGktPmNsb2NrX3JlZ2lzdGVycy5tcGxsX2Z1bmNfY250 bDsKKwl1MzIgbXBsbF9mdW5jX2NudGxfMSA9IHNpX3BpLT5jbG9ja19yZWdpc3RlcnMubXBsbF9m dW5jX2NudGxfMTsKKwl1MzIgbXBsbF9mdW5jX2NudGxfMiA9IHNpX3BpLT5jbG9ja19yZWdpc3Rl cnMubXBsbF9mdW5jX2NudGxfMjsKKwl1MzIgcmVnOworCWludCByZXQ7CisKKwl0YWJsZS0+QUNQ SVN0YXRlID0gdGFibGUtPmluaXRpYWxTdGF0ZTsKKworCXRhYmxlLT5BQ1BJU3RhdGUuZmxhZ3Mg Jj0gflBQU01DX1NXU1RBVEVfRkxBR19EQzsKKworCWlmIChwaS0+YWNwaV92ZGRjKSB7CisJCXJl dCA9IHNpX3BvcHVsYXRlX3ZvbHRhZ2VfdmFsdWUoYWRldiwgJmVnX3BpLT52ZGRjX3ZvbHRhZ2Vf dGFibGUsCisJCQkJCQlwaS0+YWNwaV92ZGRjLCAmdGFibGUtPkFDUElTdGF0ZS5sZXZlbHNbMF0u dmRkYyk7CisJCWlmICghcmV0KSB7CisJCQl1MTYgc3RkX3ZkZGM7CisKKwkJCXJldCA9IHNpX2dl dF9zdGRfdm9sdGFnZV92YWx1ZShhZGV2LAorCQkJCQkJICAgICAgICZ0YWJsZS0+QUNQSVN0YXRl LmxldmVsc1swXS52ZGRjLCAmc3RkX3ZkZGMpOworCQkJaWYgKCFyZXQpCisJCQkJc2lfcG9wdWxh dGVfc3RkX3ZvbHRhZ2VfdmFsdWUoYWRldiwgc3RkX3ZkZGMsCisJCQkJCQkJICAgICAgdGFibGUt PkFDUElTdGF0ZS5sZXZlbHNbMF0udmRkYy5pbmRleCwKKwkJCQkJCQkgICAgICAmdGFibGUtPkFD UElTdGF0ZS5sZXZlbHNbMF0uc3RkX3ZkZGMpOworCQl9CisJCXRhYmxlLT5BQ1BJU3RhdGUubGV2 ZWxzWzBdLmdlbjJQQ0lFID0gc2lfcGktPmFjcGlfcGNpZV9nZW47CisKKwkJaWYgKHNpX3BpLT52 ZGRjX3BoYXNlX3NoZWRfY29udHJvbCkgeworCQkJc2lfcG9wdWxhdGVfcGhhc2Vfc2hlZGRpbmdf dmFsdWUoYWRldiwKKwkJCQkJCQkgJmFkZXYtPnBtLmRwbS5keW5fc3RhdGUucGhhc2Vfc2hlZGRp bmdfbGltaXRzX3RhYmxlLAorCQkJCQkJCSBwaS0+YWNwaV92ZGRjLAorCQkJCQkJCSAwLAorCQkJ CQkJCSAwLAorCQkJCQkJCSAmdGFibGUtPkFDUElTdGF0ZS5sZXZlbHNbMF0udmRkYyk7CisJCX0K Kwl9IGVsc2UgeworCQlyZXQgPSBzaV9wb3B1bGF0ZV92b2x0YWdlX3ZhbHVlKGFkZXYsICZlZ19w aS0+dmRkY192b2x0YWdlX3RhYmxlLAorCQkJCQkJcGktPm1pbl92ZGRjX2luX3RhYmxlLCAmdGFi bGUtPkFDUElTdGF0ZS5sZXZlbHNbMF0udmRkYyk7CisJCWlmICghcmV0KSB7CisJCQl1MTYgc3Rk X3ZkZGM7CisKKwkJCXJldCA9IHNpX2dldF9zdGRfdm9sdGFnZV92YWx1ZShhZGV2LAorCQkJCQkJ ICAgICAgICZ0YWJsZS0+QUNQSVN0YXRlLmxldmVsc1swXS52ZGRjLCAmc3RkX3ZkZGMpOworCisJ CQlpZiAoIXJldCkKKwkJCQlzaV9wb3B1bGF0ZV9zdGRfdm9sdGFnZV92YWx1ZShhZGV2LCBzdGRf dmRkYywKKwkJCQkJCQkgICAgICB0YWJsZS0+QUNQSVN0YXRlLmxldmVsc1swXS52ZGRjLmluZGV4 LAorCQkJCQkJCSAgICAgICZ0YWJsZS0+QUNQSVN0YXRlLmxldmVsc1swXS5zdGRfdmRkYyk7CisJ CX0KKwkJdGFibGUtPkFDUElTdGF0ZS5sZXZlbHNbMF0uZ2VuMlBDSUUgPSAodTgpcjYwMF9nZXRf cGNpZV9nZW5fc3VwcG9ydChhZGV2LAorCQkJCQkJCQkJCSAgICBzaV9waS0+c3lzX3BjaWVfbWFz aywKKwkJCQkJCQkJCQkgICAgc2lfcGktPmJvb3RfcGNpZV9nZW4sCisJCQkJCQkJCQkJICAgIEFN REdQVV9QQ0lFX0dFTjEpOworCisJCWlmIChzaV9waS0+dmRkY19waGFzZV9zaGVkX2NvbnRyb2wp CisJCQlzaV9wb3B1bGF0ZV9waGFzZV9zaGVkZGluZ192YWx1ZShhZGV2LAorCQkJCQkJCSAmYWRl di0+cG0uZHBtLmR5bl9zdGF0ZS5waGFzZV9zaGVkZGluZ19saW1pdHNfdGFibGUsCisJCQkJCQkJ IHBpLT5taW5fdmRkY19pbl90YWJsZSwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkg JnRhYmxlLT5BQ1BJU3RhdGUubGV2ZWxzWzBdLnZkZGMpOworCX0KKworCWlmIChwaS0+YWNwaV92 ZGRjKSB7CisJCWlmIChlZ19waS0+YWNwaV92ZGRjaSkKKwkJCXNpX3BvcHVsYXRlX3ZvbHRhZ2Vf dmFsdWUoYWRldiwgJmVnX3BpLT52ZGRjaV92b2x0YWdlX3RhYmxlLAorCQkJCQkJICBlZ19waS0+ YWNwaV92ZGRjaSwKKwkJCQkJCSAgJnRhYmxlLT5BQ1BJU3RhdGUubGV2ZWxzWzBdLnZkZGNpKTsK Kwl9CisKKwltY2xrX3B3cm1ndF9jbnRsIHw9IE1SRENLMF9SRVNFVCB8IE1SRENLMV9SRVNFVDsK KwltY2xrX3B3cm1ndF9jbnRsICY9IH4oTVJEQ0swX1BETkIgfCBNUkRDSzFfUEROQik7CisKKwlk bGxfY250bCAmPSB+KE1SRENLMF9CWVBBU1MgfCBNUkRDSzFfQllQQVNTKTsKKworCXNwbGxfZnVu Y19jbnRsXzIgJj0gflNDTEtfTVVYX1NFTF9NQVNLOworCXNwbGxfZnVuY19jbnRsXzIgfD0gU0NM S19NVVhfU0VMKDQpOworCisJdGFibGUtPkFDUElTdGF0ZS5sZXZlbHNbMF0ubWNsay52RExMX0NO VEwgPQorCQljcHVfdG9fYmUzMihkbGxfY250bCk7CisJdGFibGUtPkFDUElTdGF0ZS5sZXZlbHNb MF0ubWNsay52TUNMS19QV1JNR1RfQ05UTCA9CisJCWNwdV90b19iZTMyKG1jbGtfcHdybWd0X2Nu dGwpOworCXRhYmxlLT5BQ1BJU3RhdGUubGV2ZWxzWzBdLm1jbGsudk1QTExfQURfRlVOQ19DTlRM ID0KKwkJY3B1X3RvX2JlMzIobXBsbF9hZF9mdW5jX2NudGwpOworCXRhYmxlLT5BQ1BJU3RhdGUu bGV2ZWxzWzBdLm1jbGsudk1QTExfRFFfRlVOQ19DTlRMID0KKwkJY3B1X3RvX2JlMzIobXBsbF9k cV9mdW5jX2NudGwpOworCXRhYmxlLT5BQ1BJU3RhdGUubGV2ZWxzWzBdLm1jbGsudk1QTExfRlVO Q19DTlRMID0KKwkJY3B1X3RvX2JlMzIobXBsbF9mdW5jX2NudGwpOworCXRhYmxlLT5BQ1BJU3Rh dGUubGV2ZWxzWzBdLm1jbGsudk1QTExfRlVOQ19DTlRMXzEgPQorCQljcHVfdG9fYmUzMihtcGxs X2Z1bmNfY250bF8xKTsKKwl0YWJsZS0+QUNQSVN0YXRlLmxldmVsc1swXS5tY2xrLnZNUExMX0ZV TkNfQ05UTF8yID0KKwkJY3B1X3RvX2JlMzIobXBsbF9mdW5jX2NudGxfMik7CisJdGFibGUtPkFD UElTdGF0ZS5sZXZlbHNbMF0ubWNsay52TVBMTF9TUyA9CisJCWNwdV90b19iZTMyKHNpX3BpLT5j bG9ja19yZWdpc3RlcnMubXBsbF9zczEpOworCXRhYmxlLT5BQ1BJU3RhdGUubGV2ZWxzWzBdLm1j bGsudk1QTExfU1MyID0KKwkJY3B1X3RvX2JlMzIoc2lfcGktPmNsb2NrX3JlZ2lzdGVycy5tcGxs X3NzMik7CisKKwl0YWJsZS0+QUNQSVN0YXRlLmxldmVsc1swXS5zY2xrLnZDR19TUExMX0ZVTkNf Q05UTCA9CisJCWNwdV90b19iZTMyKHNwbGxfZnVuY19jbnRsKTsKKwl0YWJsZS0+QUNQSVN0YXRl LmxldmVsc1swXS5zY2xrLnZDR19TUExMX0ZVTkNfQ05UTF8yID0KKwkJY3B1X3RvX2JlMzIoc3Bs bF9mdW5jX2NudGxfMik7CisJdGFibGUtPkFDUElTdGF0ZS5sZXZlbHNbMF0uc2Nsay52Q0dfU1BM TF9GVU5DX0NOVExfMyA9CisJCWNwdV90b19iZTMyKHNwbGxfZnVuY19jbnRsXzMpOworCXRhYmxl LT5BQ1BJU3RhdGUubGV2ZWxzWzBdLnNjbGsudkNHX1NQTExfRlVOQ19DTlRMXzQgPQorCQljcHVf dG9fYmUzMihzcGxsX2Z1bmNfY250bF80KTsKKworCXRhYmxlLT5BQ1BJU3RhdGUubGV2ZWxzWzBd Lm1jbGsubWNsa192YWx1ZSA9IDA7CisJdGFibGUtPkFDUElTdGF0ZS5sZXZlbHNbMF0uc2Nsay5z Y2xrX3ZhbHVlID0gMDsKKworCXNpX3BvcHVsYXRlX212ZGRfdmFsdWUoYWRldiwgMCwgJnRhYmxl LT5BQ1BJU3RhdGUubGV2ZWxzWzBdLm12ZGQpOworCisJaWYgKGVnX3BpLT5keW5hbWljX2FjX3Rp bWluZykKKwkJdGFibGUtPkFDUElTdGF0ZS5sZXZlbHNbMF0uQUNJbmRleCA9IDA7CisKKwl0YWJs ZS0+QUNQSVN0YXRlLmxldmVsc1swXS5kcG0yLk1heFBTID0gMDsKKwl0YWJsZS0+QUNQSVN0YXRl LmxldmVsc1swXS5kcG0yLk5lYXJURFBEZWMgPSAwOworCXRhYmxlLT5BQ1BJU3RhdGUubGV2ZWxz WzBdLmRwbTIuQWJvdmVTYWZlSW5jID0gMDsKKwl0YWJsZS0+QUNQSVN0YXRlLmxldmVsc1swXS5k cG0yLkJlbG93U2FmZUluYyA9IDA7CisJdGFibGUtPkFDUElTdGF0ZS5sZXZlbHNbMF0uZHBtMi5Q d3JFZmZpY2llbmN5UmF0aW8gPSAwOworCisJcmVnID0gTUlOX1BPV0VSX01BU0sgfCBNQVhfUE9X RVJfTUFTSzsKKwl0YWJsZS0+QUNQSVN0YXRlLmxldmVsc1swXS5TUVBvd2VyVGhyb3R0bGUgPSBj cHVfdG9fYmUzMihyZWcpOworCisJcmVnID0gTUFYX1BPV0VSX0RFTFRBX01BU0sgfCBTVElfU0la RV9NQVNLIHwgTFRJX1JBVElPX01BU0s7CisJdGFibGUtPkFDUElTdGF0ZS5sZXZlbHNbMF0uU1FQ b3dlclRocm90dGxlXzIgPSBjcHVfdG9fYmUzMihyZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgc2lfcG9wdWxhdGVfdWx2X3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LAorCQkJCSBTSVNMQU5EU19TTUNfU1dTVEFURSAqc3RhdGUpCit7CisJc3RydWN0IGV2ZXJncmVl bl9wb3dlcl9pbmZvICplZ19waSA9IGV2ZXJncmVlbl9nZXRfcGkoYWRldik7CisJc3RydWN0IHNp X3Bvd2VyX2luZm8gKnNpX3BpID0gc2lfZ2V0X3BpKGFkZXYpOworCXN0cnVjdCBzaV91bHZfcGFy YW0gKnVsdiA9ICZzaV9waS0+dWx2OworCXUzMiBzY2xrX2luX3NyID0gMTM1MDsgLyogPz8/ICov CisJaW50IHJldDsKKworCXJldCA9IHNpX2NvbnZlcnRfcG93ZXJfbGV2ZWxfdG9fc21jKGFkZXYs ICZ1bHYtPnBsLAorCQkJCQkgICAgJnN0YXRlLT5sZXZlbHNbMF0pOworCWlmICghcmV0KSB7CisJ CWlmIChlZ19waS0+c2Nsa19kZWVwX3NsZWVwKSB7CisJCQlpZiAoc2Nsa19pbl9zciA8PSBTQ0xL X01JTl9ERUVQU0xFRVBfRlJFUSkKKwkJCQlzdGF0ZS0+bGV2ZWxzWzBdLnN0YXRlRmxhZ3MgfD0g UFBTTUNfU1RBVEVGTEFHX0RFRVBTTEVFUF9CWVBBU1M7CisJCQllbHNlCisJCQkJc3RhdGUtPmxl dmVsc1swXS5zdGF0ZUZsYWdzIHw9IFBQU01DX1NUQVRFRkxBR19ERUVQU0xFRVBfVEhST1RUTEU7 CisJCX0KKwkJaWYgKHVsdi0+b25lX3BjaWVfbGFuZV9pbl91bHYpCisJCQlzdGF0ZS0+ZmxhZ3Mg fD0gUFBTTUNfU1dTVEFURV9GTEFHX1BDSUVfWDE7CisJCXN0YXRlLT5sZXZlbHNbMF0uYXJiUmVm cmVzaFN0YXRlID0gKHU4KShTSVNMQU5EU19VTFZfU1RBVEVfQVJCX0lOREVYKTsKKwkJc3RhdGUt PmxldmVsc1swXS5BQ0luZGV4ID0gMTsKKwkJc3RhdGUtPmxldmVsc1swXS5zdGRfdmRkYyA9IHN0 YXRlLT5sZXZlbHNbMF0udmRkYzsKKwkJc3RhdGUtPmxldmVsQ291bnQgPSAxOworCisJCXN0YXRl LT5mbGFncyB8PSBQUFNNQ19TV1NUQVRFX0ZMQUdfREM7CisJfQorCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGludCBzaV9wcm9ncmFtX3Vsdl9tZW1vcnlfdGltaW5nX3BhcmFtZXRlcnMoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IHNpX3Bvd2VyX2luZm8gKnNpX3Bp ID0gc2lfZ2V0X3BpKGFkZXYpOworCXN0cnVjdCBzaV91bHZfcGFyYW0gKnVsdiA9ICZzaV9waS0+ dWx2OworCVNNQ19TSXNsYW5kc19NQ0FyYkRyYW1UaW1pbmdSZWdpc3RlclNldCBhcmJfcmVncyA9 IHsgMCB9OworCWludCByZXQ7CisKKwlyZXQgPSBzaV9wb3B1bGF0ZV9tZW1vcnlfdGltaW5nX3Bh cmFtZXRlcnMoYWRldiwgJnVsdi0+cGwsCisJCQkJCQkgICAmYXJiX3JlZ3MpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlzaV93cml0ZV9zbWNfc29mdF9yZWdpc3RlcihhZGV2LCBTSV9T TUNfU09GVF9SRUdJU1RFUl91bHZfdm9sdF9jaGFuZ2VfZGVsYXksCisJCQkJICAgdWx2LT52b2x0 X2NoYW5nZV9kZWxheSk7CisKKwlyZXQgPSBzaV9jb3B5X2J5dGVzX3RvX3NtYyhhZGV2LAorCQkJ CSAgIHNpX3BpLT5hcmJfdGFibGVfc3RhcnQgKworCQkJCSAgIG9mZnNldG9mKFNNQ19TSXNsYW5k c19NQ0FyYkRyYW1UaW1pbmdSZWdpc3RlcnMsIGRhdGEpICsKKwkJCQkgICBzaXplb2YoU01DX1NJ c2xhbmRzX01DQXJiRHJhbVRpbWluZ1JlZ2lzdGVyU2V0KSAqIFNJU0xBTkRTX1VMVl9TVEFURV9B UkJfSU5ERVgsCisJCQkJICAgKHU4ICopJmFyYl9yZWdzLAorCQkJCSAgIHNpemVvZihTTUNfU0lz bGFuZHNfTUNBcmJEcmFtVGltaW5nUmVnaXN0ZXJTZXQpLAorCQkJCSAgIHNpX3BpLT5zcmFtX2Vu ZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzaV9nZXRfbXZkZF9jb25maWd1 cmF0aW9uKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBydjd4eF9wb3dl cl9pbmZvICpwaSA9IHJ2NzcwX2dldF9waShhZGV2KTsKKworCXBpLT5tdmRkX3NwbGl0X2ZyZXF1 ZW5jeSA9IDMwMDAwOworfQorCitzdGF0aWMgaW50IHNpX2luaXRfc21jX3RhYmxlKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBydjd4eF9wb3dlcl9pbmZvICpwaSA9IHJ2 NzcwX2dldF9waShhZGV2KTsKKwlzdHJ1Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRf cGkoYWRldik7CisJc3RydWN0IGFtZGdwdV9wcyAqYW1kZ3B1X2Jvb3Rfc3RhdGUgPSBhZGV2LT5w bS5kcG0uYm9vdF9wczsKKwljb25zdCBzdHJ1Y3Qgc2lfdWx2X3BhcmFtICp1bHYgPSAmc2lfcGkt PnVsdjsKKwlTSVNMQU5EU19TTUNfU1RBVEVUQUJMRSAgKnRhYmxlID0gJnNpX3BpLT5zbWNfc3Rh dGV0YWJsZTsKKwlpbnQgcmV0OworCXUzMiBsYW5lX3dpZHRoOworCXUzMiB2cl9ob3RfZ3BpbzsK KworCXNpX3BvcHVsYXRlX3NtY192b2x0YWdlX3RhYmxlcyhhZGV2LCB0YWJsZSk7CisKKwlzd2l0 Y2ggKGFkZXYtPnBtLmludF90aGVybWFsX3R5cGUpIHsKKwljYXNlIFRIRVJNQUxfVFlQRV9TSToK KwljYXNlIFRIRVJNQUxfVFlQRV9FTUMyMTAzX1dJVEhfSU5URVJOQUw6CisJCXRhYmxlLT50aGVy bWFsUHJvdGVjdFR5cGUgPSBQUFNNQ19USEVSTUFMX1BST1RFQ1RfVFlQRV9JTlRFUk5BTDsKKwkJ YnJlYWs7CisJY2FzZSBUSEVSTUFMX1RZUEVfTk9ORToKKwkJdGFibGUtPnRoZXJtYWxQcm90ZWN0 VHlwZSA9IFBQU01DX1RIRVJNQUxfUFJPVEVDVF9UWVBFX05PTkU7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCXRhYmxlLT50aGVybWFsUHJvdGVjdFR5cGUgPSBQUFNNQ19USEVSTUFMX1BST1RFQ1Rf VFlQRV9FWFRFUk5BTDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGFkZXYtPnBtLmRwbS5wbGF0Zm9y bV9jYXBzICYgQVRPTV9QUF9QTEFURk9STV9DQVBfSEFSRFdBUkVEQykKKwkJdGFibGUtPnN5c3Rl bUZsYWdzIHw9IFBQU01DX1NZU1RFTUZMQUdfR1BJT19EQzsKKworCWlmIChhZGV2LT5wbS5kcG0u cGxhdGZvcm1fY2FwcyAmIEFUT01fUFBfUExBVEZPUk1fQ0FQX1JFR1VMQVRPUl9IT1QpIHsKKwkJ aWYgKChhZGV2LT5wZGV2LT5kZXZpY2UgIT0gMHg2ODE4KSAmJiAoYWRldi0+cGRldi0+ZGV2aWNl ICE9IDB4NjgxOSkpCisJCQl0YWJsZS0+c3lzdGVtRmxhZ3MgfD0gUFBTTUNfU1lTVEVNRkxBR19S RUdVTEFUT1JfSE9UOworCX0KKworCWlmIChhZGV2LT5wbS5kcG0ucGxhdGZvcm1fY2FwcyAmIEFU T01fUFBfUExBVEZPUk1fQ0FQX1NURVBWRERDKQorCQl0YWJsZS0+c3lzdGVtRmxhZ3MgfD0gUFBT TUNfU1lTVEVNRkxBR19TVEVQVkREQzsKKworCWlmIChwaS0+bWVtX2dkZHI1KQorCQl0YWJsZS0+ c3lzdGVtRmxhZ3MgfD0gUFBTTUNfU1lTVEVNRkxBR19HRERSNTsKKworCWlmIChhZGV2LT5wbS5k cG0ucGxhdGZvcm1fY2FwcyAmIEFUT01fUFBfUExBVEZPUk1fQ0FQX1JFVkVSVF9HUElPNV9QT0xB UklUWSkKKwkJdGFibGUtPmV4dHJhRmxhZ3MgfD0gUFBTTUNfRVhUUkFGTEFHU19BQzJEQ19HUElP NV9QT0xBUklUWV9ISUdIOworCisJaWYgKGFkZXYtPnBtLmRwbS5wbGF0Zm9ybV9jYXBzICYgQVRP TV9QUF9QTEFURk9STV9DQVBfVlJIT1RfR1BJT19DT05GSUdVUkFCTEUpIHsKKwkJdGFibGUtPnN5 c3RlbUZsYWdzIHw9IFBQU01DX1NZU1RFTUZMQUdfUkVHVUxBVE9SX0hPVF9QUk9HX0dQSU87CisJ CXZyX2hvdF9ncGlvID0gYWRldi0+cG0uZHBtLmJhY2tiaWFzX3Jlc3BvbnNlX3RpbWU7CisJCXNp X3dyaXRlX3NtY19zb2Z0X3JlZ2lzdGVyKGFkZXYsIFNJX1NNQ19TT0ZUX1JFR0lTVEVSX3ZyX2hv dF9ncGlvLAorCQkJCQkgICB2cl9ob3RfZ3Bpbyk7CisJfQorCisJcmV0ID0gc2lfcG9wdWxhdGVf c21jX2luaXRpYWxfc3RhdGUoYWRldiwgYW1kZ3B1X2Jvb3Rfc3RhdGUsIHRhYmxlKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc2lfcG9wdWxhdGVfc21jX2FjcGlfc3RhdGUo YWRldiwgdGFibGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl0YWJsZS0+ZHJpdmVy U3RhdGUgPSB0YWJsZS0+aW5pdGlhbFN0YXRlOworCisJcmV0ID0gc2lfZG9fcHJvZ3JhbV9tZW1v cnlfdGltaW5nX3BhcmFtZXRlcnMoYWRldiwgYW1kZ3B1X2Jvb3Rfc3RhdGUsCisJCQkJCQkgICAg IFNJU0xBTkRTX0lOSVRJQUxfU1RBVEVfQVJCX0lOREVYKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJaWYgKHVsdi0+c3VwcG9ydGVkICYmIHVsdi0+cGwudmRkYykgeworCQlyZXQgPSBz aV9wb3B1bGF0ZV91bHZfc3RhdGUoYWRldiwgJnRhYmxlLT5VTFZTdGF0ZSk7CisJCWlmIChyZXQp CisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHNpX3Byb2dyYW1fdWx2X21lbW9yeV90aW1pbmdf cGFyYW1ldGVycyhhZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJV1JFRzMy KENHX1VMVl9DT05UUk9MLCB1bHYtPmNnX3Vsdl9jb250cm9sKTsKKwkJV1JFRzMyKENHX1VMVl9Q QVJBTUVURVIsIHVsdi0+Y2dfdWx2X3BhcmFtZXRlcik7CisKKwkJbGFuZV93aWR0aCA9IGFtZGdw dV9nZXRfcGNpZV9sYW5lcyhhZGV2KTsKKwkJc2lfd3JpdGVfc21jX3NvZnRfcmVnaXN0ZXIoYWRl diwgU0lfU01DX1NPRlRfUkVHSVNURVJfbm9uX3Vsdl9wY2llX2xpbmtfd2lkdGgsIGxhbmVfd2lk dGgpOworCX0gZWxzZSB7CisJCXRhYmxlLT5VTFZTdGF0ZSA9IHRhYmxlLT5pbml0aWFsU3RhdGU7 CisJfQorCisJcmV0dXJuIHNpX2NvcHlfYnl0ZXNfdG9fc21jKGFkZXYsIHNpX3BpLT5zdGF0ZV90 YWJsZV9zdGFydCwKKwkJCQkgICAgKHU4ICopdGFibGUsIHNpemVvZihTSVNMQU5EU19TTUNfU1RB VEVUQUJMRSksCisJCQkJICAgIHNpX3BpLT5zcmFtX2VuZCk7Cit9CisKK3N0YXRpYyBpbnQgc2lf Y2FsY3VsYXRlX3NjbGtfcGFyYW1zKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCSAg ICB1MzIgZW5naW5lX2Nsb2NrLAorCQkJCSAgICBTSVNMQU5EU19TTUNfU0NMS19WQUxVRSAqc2Ns aykKK3sKKwlzdHJ1Y3QgcnY3eHhfcG93ZXJfaW5mbyAqcGkgPSBydjc3MF9nZXRfcGkoYWRldik7 CisJc3RydWN0IHNpX3Bvd2VyX2luZm8gKnNpX3BpID0gc2lfZ2V0X3BpKGFkZXYpOworCXN0cnVj dCBhdG9tX2Nsb2NrX2RpdmlkZXJzIGRpdmlkZXJzOworCXUzMiBzcGxsX2Z1bmNfY250bCA9IHNp X3BpLT5jbG9ja19yZWdpc3RlcnMuY2dfc3BsbF9mdW5jX2NudGw7CisJdTMyIHNwbGxfZnVuY19j bnRsXzIgPSBzaV9waS0+Y2xvY2tfcmVnaXN0ZXJzLmNnX3NwbGxfZnVuY19jbnRsXzI7CisJdTMy IHNwbGxfZnVuY19jbnRsXzMgPSBzaV9waS0+Y2xvY2tfcmVnaXN0ZXJzLmNnX3NwbGxfZnVuY19j bnRsXzM7CisJdTMyIHNwbGxfZnVuY19jbnRsXzQgPSBzaV9waS0+Y2xvY2tfcmVnaXN0ZXJzLmNn X3NwbGxfZnVuY19jbnRsXzQ7CisJdTMyIGNnX3NwbGxfc3ByZWFkX3NwZWN0cnVtID0gc2lfcGkt PmNsb2NrX3JlZ2lzdGVycy5jZ19zcGxsX3NwcmVhZF9zcGVjdHJ1bTsKKwl1MzIgY2dfc3BsbF9z cHJlYWRfc3BlY3RydW1fMiA9IHNpX3BpLT5jbG9ja19yZWdpc3RlcnMuY2dfc3BsbF9zcHJlYWRf c3BlY3RydW1fMjsKKwl1NjQgdG1wOworCXUzMiByZWZlcmVuY2VfY2xvY2sgPSBhZGV2LT5jbG9j ay5zcGxsLnJlZmVyZW5jZV9mcmVxOworCXUzMiByZWZlcmVuY2VfZGl2aWRlcjsKKwl1MzIgZmJk aXY7CisJaW50IHJldDsKKworCXJldCA9IGFtZGdwdV9hdG9tYmlvc19nZXRfY2xvY2tfZGl2aWRl cnMoYWRldiwgQ09NUFVURV9FTkdJTkVfUExMX1BBUkFNLAorCQkJCQkgICAgIGVuZ2luZV9jbG9j aywgZmFsc2UsICZkaXZpZGVycyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJlZmVy ZW5jZV9kaXZpZGVyID0gMSArIGRpdmlkZXJzLnJlZl9kaXY7CisKKwl0bXAgPSAodTY0KSBlbmdp bmVfY2xvY2sgKiByZWZlcmVuY2VfZGl2aWRlciAqIGRpdmlkZXJzLnBvc3RfZGl2ICogMTYzODQ7 CisJZG9fZGl2KHRtcCwgcmVmZXJlbmNlX2Nsb2NrKTsKKwlmYmRpdiA9ICh1MzIpIHRtcDsKKwor CXNwbGxfZnVuY19jbnRsICY9IH4oU1BMTF9QRElWX0FfTUFTSyB8IFNQTExfUkVGX0RJVl9NQVNL KTsKKwlzcGxsX2Z1bmNfY250bCB8PSBTUExMX1JFRl9ESVYoZGl2aWRlcnMucmVmX2Rpdik7CisJ c3BsbF9mdW5jX2NudGwgfD0gU1BMTF9QRElWX0EoZGl2aWRlcnMucG9zdF9kaXYpOworCisJc3Bs bF9mdW5jX2NudGxfMiAmPSB+U0NMS19NVVhfU0VMX01BU0s7CisJc3BsbF9mdW5jX2NudGxfMiB8 PSBTQ0xLX01VWF9TRUwoMik7CisKKyAgICAgICAgc3BsbF9mdW5jX2NudGxfMyAmPSB+U1BMTF9G Ql9ESVZfTUFTSzsKKyAgICAgICAgc3BsbF9mdW5jX2NudGxfMyB8PSBTUExMX0ZCX0RJVihmYmRp dik7CisgICAgICAgIHNwbGxfZnVuY19jbnRsXzMgfD0gU1BMTF9ESVRIRU47CisKKwlpZiAocGkt PnNjbGtfc3MpIHsKKwkJc3RydWN0IGFtZGdwdV9hdG9tX3NzIHNzOworCQl1MzIgdmNvX2ZyZXEg PSBlbmdpbmVfY2xvY2sgKiBkaXZpZGVycy5wb3N0X2RpdjsKKworCQlpZiAoYW1kZ3B1X2F0b21i aW9zX2dldF9hc2ljX3NzX2luZm8oYWRldiwgJnNzLAorCQkJCQkJICAgICBBU0lDX0lOVEVSTkFM X0VOR0lORV9TUywgdmNvX2ZyZXEpKSB7CisJCQl1MzIgY2xrX3MgPSByZWZlcmVuY2VfY2xvY2sg KiA1IC8gKHJlZmVyZW5jZV9kaXZpZGVyICogc3MucmF0ZSk7CisJCQl1MzIgY2xrX3YgPSA0ICog c3MucGVyY2VudGFnZSAqIGZiZGl2IC8gKGNsa19zICogMTAwMDApOworCisJCQljZ19zcGxsX3Nw cmVhZF9zcGVjdHJ1bSAmPSB+Q0xLX1NfTUFTSzsKKwkJCWNnX3NwbGxfc3ByZWFkX3NwZWN0cnVt IHw9IENMS19TKGNsa19zKTsKKwkJCWNnX3NwbGxfc3ByZWFkX3NwZWN0cnVtIHw9IFNTRU47CisK KwkJCWNnX3NwbGxfc3ByZWFkX3NwZWN0cnVtXzIgJj0gfkNMS19WX01BU0s7CisJCQljZ19zcGxs X3NwcmVhZF9zcGVjdHJ1bV8yIHw9IENMS19WKGNsa192KTsKKwkJfQorCX0KKworCXNjbGstPnNj bGtfdmFsdWUgPSBlbmdpbmVfY2xvY2s7CisJc2Nsay0+dkNHX1NQTExfRlVOQ19DTlRMID0gc3Bs bF9mdW5jX2NudGw7CisJc2Nsay0+dkNHX1NQTExfRlVOQ19DTlRMXzIgPSBzcGxsX2Z1bmNfY250 bF8yOworCXNjbGstPnZDR19TUExMX0ZVTkNfQ05UTF8zID0gc3BsbF9mdW5jX2NudGxfMzsKKwlz Y2xrLT52Q0dfU1BMTF9GVU5DX0NOVExfNCA9IHNwbGxfZnVuY19jbnRsXzQ7CisJc2Nsay0+dkNH X1NQTExfU1BSRUFEX1NQRUNUUlVNID0gY2dfc3BsbF9zcHJlYWRfc3BlY3RydW07CisJc2Nsay0+ dkNHX1NQTExfU1BSRUFEX1NQRUNUUlVNXzIgPSBjZ19zcGxsX3NwcmVhZF9zcGVjdHJ1bV8yOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2lfcG9wdWxhdGVfc2Nsa192YWx1ZShzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkgIHUzMiBlbmdpbmVfY2xvY2ssCisJCQkJICBT SVNMQU5EU19TTUNfU0NMS19WQUxVRSAqc2NsaykKK3sKKwlTSVNMQU5EU19TTUNfU0NMS19WQUxV RSBzY2xrX3RtcDsKKwlpbnQgcmV0OworCisJcmV0ID0gc2lfY2FsY3VsYXRlX3NjbGtfcGFyYW1z KGFkZXYsIGVuZ2luZV9jbG9jaywgJnNjbGtfdG1wKTsKKwlpZiAoIXJldCkgeworCQlzY2xrLT5z Y2xrX3ZhbHVlID0gY3B1X3RvX2JlMzIoc2Nsa190bXAuc2Nsa192YWx1ZSk7CisJCXNjbGstPnZD R19TUExMX0ZVTkNfQ05UTCA9IGNwdV90b19iZTMyKHNjbGtfdG1wLnZDR19TUExMX0ZVTkNfQ05U TCk7CisJCXNjbGstPnZDR19TUExMX0ZVTkNfQ05UTF8yID0gY3B1X3RvX2JlMzIoc2Nsa190bXAu dkNHX1NQTExfRlVOQ19DTlRMXzIpOworCQlzY2xrLT52Q0dfU1BMTF9GVU5DX0NOVExfMyA9IGNw dV90b19iZTMyKHNjbGtfdG1wLnZDR19TUExMX0ZVTkNfQ05UTF8zKTsKKwkJc2Nsay0+dkNHX1NQ TExfRlVOQ19DTlRMXzQgPSBjcHVfdG9fYmUzMihzY2xrX3RtcC52Q0dfU1BMTF9GVU5DX0NOVExf NCk7CisJCXNjbGstPnZDR19TUExMX1NQUkVBRF9TUEVDVFJVTSA9IGNwdV90b19iZTMyKHNjbGtf dG1wLnZDR19TUExMX1NQUkVBRF9TUEVDVFJVTSk7CisJCXNjbGstPnZDR19TUExMX1NQUkVBRF9T UEVDVFJVTV8yID0gY3B1X3RvX2JlMzIoc2Nsa190bXAudkNHX1NQTExfU1BSRUFEX1NQRUNUUlVN XzIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2lfcG9wdWxhdGVfbWNs a192YWx1ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkgIHUzMiBlbmdpbmVfY2xv Y2ssCisJCQkJICB1MzIgbWVtb3J5X2Nsb2NrLAorCQkJCSAgU0lTTEFORFNfU01DX01DTEtfVkFM VUUgKm1jbGssCisJCQkJICBib29sIHN0cm9iZV9tb2RlLAorCQkJCSAgYm9vbCBkbGxfc3RhdGVf b24pCit7CisJc3RydWN0IHJ2N3h4X3Bvd2VyX2luZm8gKnBpID0gcnY3NzBfZ2V0X3BpKGFkZXYp OworCXN0cnVjdCBzaV9wb3dlcl9pbmZvICpzaV9waSA9IHNpX2dldF9waShhZGV2KTsKKwl1MzIg IGRsbF9jbnRsID0gc2lfcGktPmNsb2NrX3JlZ2lzdGVycy5kbGxfY250bDsKKwl1MzIgIG1jbGtf cHdybWd0X2NudGwgPSBzaV9waS0+Y2xvY2tfcmVnaXN0ZXJzLm1jbGtfcHdybWd0X2NudGw7CisJ dTMyICBtcGxsX2FkX2Z1bmNfY250bCA9IHNpX3BpLT5jbG9ja19yZWdpc3RlcnMubXBsbF9hZF9m dW5jX2NudGw7CisJdTMyICBtcGxsX2RxX2Z1bmNfY250bCA9IHNpX3BpLT5jbG9ja19yZWdpc3Rl cnMubXBsbF9kcV9mdW5jX2NudGw7CisJdTMyICBtcGxsX2Z1bmNfY250bCA9IHNpX3BpLT5jbG9j a19yZWdpc3RlcnMubXBsbF9mdW5jX2NudGw7CisJdTMyICBtcGxsX2Z1bmNfY250bF8xID0gc2lf cGktPmNsb2NrX3JlZ2lzdGVycy5tcGxsX2Z1bmNfY250bF8xOworCXUzMiAgbXBsbF9mdW5jX2Nu dGxfMiA9IHNpX3BpLT5jbG9ja19yZWdpc3RlcnMubXBsbF9mdW5jX2NudGxfMjsKKwl1MzIgIG1w bGxfc3MxID0gc2lfcGktPmNsb2NrX3JlZ2lzdGVycy5tcGxsX3NzMTsKKwl1MzIgIG1wbGxfc3My ID0gc2lfcGktPmNsb2NrX3JlZ2lzdGVycy5tcGxsX3NzMjsKKwlzdHJ1Y3QgYXRvbV9tcGxsX3Bh cmFtIG1wbGxfcGFyYW07CisJaW50IHJldDsKKworCXJldCA9IGFtZGdwdV9hdG9tYmlvc19nZXRf bWVtb3J5X3BsbF9kaXZpZGVycyhhZGV2LCBtZW1vcnlfY2xvY2ssIHN0cm9iZV9tb2RlLCAmbXBs bF9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1wbGxfZnVuY19jbnRsICY9 IH5CV0NUUkxfTUFTSzsKKwltcGxsX2Z1bmNfY250bCB8PSBCV0NUUkwobXBsbF9wYXJhbS5id2Nu dGwpOworCisJbXBsbF9mdW5jX2NudGxfMSAmPSB+KENMS0ZfTUFTSyB8IENMS0ZSQUNfTUFTSyB8 IFZDT19NT0RFX01BU0spOworCW1wbGxfZnVuY19jbnRsXzEgfD0gQ0xLRihtcGxsX3BhcmFtLmNs a2YpIHwKKwkJQ0xLRlJBQyhtcGxsX3BhcmFtLmNsa2ZyYWMpIHwgVkNPX01PREUobXBsbF9wYXJh bS52Y29fbW9kZSk7CisKKwltcGxsX2FkX2Z1bmNfY250bCAmPSB+WUNMS19QT1NUX0RJVl9NQVNL OworCW1wbGxfYWRfZnVuY19jbnRsIHw9IFlDTEtfUE9TVF9ESVYobXBsbF9wYXJhbS5wb3N0X2Rp dik7CisKKwlpZiAocGktPm1lbV9nZGRyNSkgeworCQltcGxsX2RxX2Z1bmNfY250bCAmPSB+KFlD TEtfU0VMX01BU0sgfCBZQ0xLX1BPU1RfRElWX01BU0spOworCQltcGxsX2RxX2Z1bmNfY250bCB8 PSBZQ0xLX1NFTChtcGxsX3BhcmFtLnljbGtfc2VsKSB8CisJCQlZQ0xLX1BPU1RfRElWKG1wbGxf cGFyYW0ucG9zdF9kaXYpOworCX0KKworCWlmIChwaS0+bWNsa19zcykgeworCQlzdHJ1Y3QgYW1k Z3B1X2F0b21fc3Mgc3M7CisJCXUzMiBmcmVxX25vbTsKKwkJdTMyIHRtcDsKKwkJdTMyIHJlZmVy ZW5jZV9jbG9jayA9IGFkZXYtPmNsb2NrLm1wbGwucmVmZXJlbmNlX2ZyZXE7CisKKwkJaWYgKHBp LT5tZW1fZ2RkcjUpCisJCQlmcmVxX25vbSA9IG1lbW9yeV9jbG9jayAqIDQ7CisJCWVsc2UKKwkJ CWZyZXFfbm9tID0gbWVtb3J5X2Nsb2NrICogMjsKKworCQl0bXAgPSBmcmVxX25vbSAvIHJlZmVy ZW5jZV9jbG9jazsKKwkJdG1wID0gdG1wICogdG1wOworCQlpZiAoYW1kZ3B1X2F0b21iaW9zX2dl dF9hc2ljX3NzX2luZm8oYWRldiwgJnNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBU0lDX0lOVEVSTkFMX01FTU9SWV9TUywgZnJlcV9ub20p KSB7CisJCQl1MzIgY2xrcyA9IHJlZmVyZW5jZV9jbG9jayAqIDUgLyBzcy5yYXRlOworCQkJdTMy IGNsa3YgPSAodTMyKSgoKCgxMzEgKiBzcy5wZXJjZW50YWdlICogc3MucmF0ZSkgLyAxMDApICog dG1wKSAvIGZyZXFfbm9tKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbXBsbF9zczEgJj0g fkNMS1ZfTUFTSzsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1wbGxfc3MxIHw9IENMS1YoY2xr dik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1wbGxfc3MyICY9IH5DTEtTX01BU0s7Cisg ICAgICAgICAgICAgICAgICAgICAgICBtcGxsX3NzMiB8PSBDTEtTKGNsa3MpOworCQl9CisJfQor CisJbWNsa19wd3JtZ3RfY250bCAmPSB+RExMX1NQRUVEX01BU0s7CisJbWNsa19wd3JtZ3RfY250 bCB8PSBETExfU1BFRUQobXBsbF9wYXJhbS5kbGxfc3BlZWQpOworCisJaWYgKGRsbF9zdGF0ZV9v bikKKwkJbWNsa19wd3JtZ3RfY250bCB8PSBNUkRDSzBfUEROQiB8IE1SRENLMV9QRE5COworCWVs c2UKKwkJbWNsa19wd3JtZ3RfY250bCAmPSB+KE1SRENLMF9QRE5CIHwgTVJEQ0sxX1BETkIpOwor CisJbWNsay0+bWNsa192YWx1ZSA9IGNwdV90b19iZTMyKG1lbW9yeV9jbG9jayk7CisJbWNsay0+ dk1QTExfRlVOQ19DTlRMID0gY3B1X3RvX2JlMzIobXBsbF9mdW5jX2NudGwpOworCW1jbGstPnZN UExMX0ZVTkNfQ05UTF8xID0gY3B1X3RvX2JlMzIobXBsbF9mdW5jX2NudGxfMSk7CisJbWNsay0+ dk1QTExfRlVOQ19DTlRMXzIgPSBjcHVfdG9fYmUzMihtcGxsX2Z1bmNfY250bF8yKTsKKwltY2xr LT52TVBMTF9BRF9GVU5DX0NOVEwgPSBjcHVfdG9fYmUzMihtcGxsX2FkX2Z1bmNfY250bCk7CisJ bWNsay0+dk1QTExfRFFfRlVOQ19DTlRMID0gY3B1X3RvX2JlMzIobXBsbF9kcV9mdW5jX2NudGwp OworCW1jbGstPnZNQ0xLX1BXUk1HVF9DTlRMID0gY3B1X3RvX2JlMzIobWNsa19wd3JtZ3RfY250 bCk7CisJbWNsay0+dkRMTF9DTlRMID0gY3B1X3RvX2JlMzIoZGxsX2NudGwpOworCW1jbGstPnZN UExMX1NTID0gY3B1X3RvX2JlMzIobXBsbF9zczEpOworCW1jbGstPnZNUExMX1NTMiA9IGNwdV90 b19iZTMyKG1wbGxfc3MyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaV9wb3B1 bGF0ZV9zbWNfc3Aoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkgICAgICAgc3RydWN0 IGFtZGdwdV9wcyAqYW1kZ3B1X3N0YXRlLAorCQkJICAgICAgIFNJU0xBTkRTX1NNQ19TV1NUQVRF ICpzbWNfc3RhdGUpCit7CisJc3RydWN0ICBzaV9wcyAqcHMgPSBzaV9nZXRfcHMoYW1kZ3B1X3N0 YXRlKTsKKwlzdHJ1Y3QgcnY3eHhfcG93ZXJfaW5mbyAqcGkgPSBydjc3MF9nZXRfcGkoYWRldik7 CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHMtPnBlcmZvcm1hbmNlX2xldmVsX2NvdW50 IC0gMTsgaSsrKQorCQlzbWNfc3RhdGUtPmxldmVsc1tpXS5iU1AgPSBjcHVfdG9fYmUzMihwaS0+ ZHNwKTsKKworCXNtY19zdGF0ZS0+bGV2ZWxzW3BzLT5wZXJmb3JtYW5jZV9sZXZlbF9jb3VudCAt IDFdLmJTUCA9CisJCWNwdV90b19iZTMyKHBpLT5wc3ApOworfQorCitzdGF0aWMgaW50IHNpX2Nv bnZlcnRfcG93ZXJfbGV2ZWxfdG9fc21jKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJ CQkgc3RydWN0IHJ2N3h4X3BsICpwbCwKKwkJCQkJIFNJU0xBTkRTX1NNQ19IV19QRVJGT1JNQU5D RV9MRVZFTCAqbGV2ZWwpCit7CisJc3RydWN0IHJ2N3h4X3Bvd2VyX2luZm8gKnBpID0gcnY3NzBf Z2V0X3BpKGFkZXYpOworCXN0cnVjdCBldmVyZ3JlZW5fcG93ZXJfaW5mbyAqZWdfcGkgPSBldmVy Z3JlZW5fZ2V0X3BpKGFkZXYpOworCXN0cnVjdCBzaV9wb3dlcl9pbmZvICpzaV9waSA9IHNpX2dl dF9waShhZGV2KTsKKwlpbnQgcmV0OworCWJvb2wgZGxsX3N0YXRlX29uOworCXUxNiBzdGRfdmRk YzsKKwlib29sIGdtY19wZyA9IGZhbHNlOworCisJaWYgKGVnX3BpLT5wY2llX3BlcmZvcm1hbmNl X3JlcXVlc3QgJiYKKwkgICAgKHNpX3BpLT5mb3JjZV9wY2llX2dlbiAhPSBBTURHUFVfUENJRV9H RU5fSU5WQUxJRCkpCisJCWxldmVsLT5nZW4yUENJRSA9ICh1OClzaV9waS0+Zm9yY2VfcGNpZV9n ZW47CisJZWxzZQorCQlsZXZlbC0+Z2VuMlBDSUUgPSAodTgpcGwtPnBjaWVfZ2VuOworCisJcmV0 ID0gc2lfcG9wdWxhdGVfc2Nsa192YWx1ZShhZGV2LCBwbC0+c2NsaywgJmxldmVsLT5zY2xrKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbGV2ZWwtPm1jRmxhZ3MgPSAgMDsKKworCWlm IChwaS0+bWNsa19zdHV0dGVyX21vZGVfdGhyZXNob2xkICYmCisJICAgIChwbC0+bWNsayA8PSBw aS0+bWNsa19zdHV0dGVyX21vZGVfdGhyZXNob2xkKSAmJgorCSAgICAhZWdfcGktPnV2ZF9lbmFi bGVkICYmCisJICAgIChSUkVHMzIoRFBHX1BJUEVfU1RVVFRFUl9DT05UUk9MKSAmIFNUVVRURVJf RU5BQkxFKSAmJgorCSAgICAoYWRldi0+cG0uZHBtLm5ld19hY3RpdmVfY3J0Y19jb3VudCA8PSAy KSkgeworCQlsZXZlbC0+bWNGbGFncyB8PSBTSVNMQU5EU19TTUNfTUNfU1RVVFRFUl9FTjsKKwor CQlpZiAoZ21jX3BnKQorCQkJbGV2ZWwtPm1jRmxhZ3MgfD0gU0lTTEFORFNfU01DX01DX1BHX0VO OworCX0KKworCWlmIChwaS0+bWVtX2dkZHI1KSB7CisJCWlmIChwbC0+bWNsayA+IHBpLT5tY2xr X2VkY19lbmFibGVfdGhyZXNob2xkKQorCQkJbGV2ZWwtPm1jRmxhZ3MgfD0gU0lTTEFORFNfU01D X01DX0VEQ19SRF9GTEFHOworCisJCWlmIChwbC0+bWNsayA+IGVnX3BpLT5tY2xrX2VkY193cl9l bmFibGVfdGhyZXNob2xkKQorCQkJbGV2ZWwtPm1jRmxhZ3MgfD0gU0lTTEFORFNfU01DX01DX0VE Q19XUl9GTEFHOworCisJCWxldmVsLT5zdHJvYmVNb2RlID0gc2lfZ2V0X3N0cm9iZV9tb2RlX3Nl dHRpbmdzKGFkZXYsIHBsLT5tY2xrKTsKKworCQlpZiAobGV2ZWwtPnN0cm9iZU1vZGUgJiBTSVNM QU5EU19TTUNfU1RST0JFX0VOQUJMRSkgeworCQkJaWYgKHNpX2dldF9tY2xrX2ZyZXF1ZW5jeV9y YXRpbyhwbC0+bWNsaywgdHJ1ZSkgPj0KKwkJCSAgICAoKFJSRUczMihNQ19TRVFfTUlTQzcpID4+ IDE2KSAmIDB4ZikpCisJCQkJZGxsX3N0YXRlX29uID0gKChSUkVHMzIoTUNfU0VRX01JU0M1KSA+ PiAxKSAmIDB4MSkgPyB0cnVlIDogZmFsc2U7CisJCQllbHNlCisJCQkJZGxsX3N0YXRlX29uID0g KChSUkVHMzIoTUNfU0VRX01JU0M2KSA+PiAxKSAmIDB4MSkgPyB0cnVlIDogZmFsc2U7CisJCX0g ZWxzZSB7CisJCQlkbGxfc3RhdGVfb24gPSBmYWxzZTsKKwkJfQorCX0gZWxzZSB7CisJCWxldmVs LT5zdHJvYmVNb2RlID0gc2lfZ2V0X3N0cm9iZV9tb2RlX3NldHRpbmdzKGFkZXYsCisJCQkJCQkJ CXBsLT5tY2xrKTsKKworCQlkbGxfc3RhdGVfb24gPSAoKFJSRUczMihNQ19TRVFfTUlTQzUpID4+ IDEpICYgMHgxKSA/IHRydWUgOiBmYWxzZTsKKwl9CisKKwlyZXQgPSBzaV9wb3B1bGF0ZV9tY2xr X3ZhbHVlKGFkZXYsCisJCQkJICAgICBwbC0+c2NsaywKKwkJCQkgICAgIHBsLT5tY2xrLAorCQkJ CSAgICAgJmxldmVsLT5tY2xrLAorCQkJCSAgICAgKGxldmVsLT5zdHJvYmVNb2RlICYgU0lTTEFO RFNfU01DX1NUUk9CRV9FTkFCTEUpICE9IDAsIGRsbF9zdGF0ZV9vbik7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXJldCA9IHNpX3BvcHVsYXRlX3ZvbHRhZ2VfdmFsdWUoYWRldiwKKwkJ CQkJJmVnX3BpLT52ZGRjX3ZvbHRhZ2VfdGFibGUsCisJCQkJCXBsLT52ZGRjLCAmbGV2ZWwtPnZk ZGMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKworCXJldCA9IHNpX2dldF9zdGRfdm9s dGFnZV92YWx1ZShhZGV2LCAmbGV2ZWwtPnZkZGMsICZzdGRfdmRkYyk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXJldCA9IHNpX3BvcHVsYXRlX3N0ZF92b2x0YWdlX3ZhbHVlKGFkZXYs IHN0ZF92ZGRjLAorCQkJCQkgICAgbGV2ZWwtPnZkZGMuaW5kZXgsICZsZXZlbC0+c3RkX3ZkZGMp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoZWdfcGktPnZkZGNpX2NvbnRyb2wp IHsKKwkJcmV0ID0gc2lfcG9wdWxhdGVfdm9sdGFnZV92YWx1ZShhZGV2LCAmZWdfcGktPnZkZGNp X3ZvbHRhZ2VfdGFibGUsCisJCQkJCQlwbC0+dmRkY2ksICZsZXZlbC0+dmRkY2kpOworCQlpZiAo cmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoc2lfcGktPnZkZGNfcGhhc2Vfc2hlZF9j b250cm9sKSB7CisJCXJldCA9IHNpX3BvcHVsYXRlX3BoYXNlX3NoZWRkaW5nX3ZhbHVlKGFkZXYs CisJCQkJCQkgICAgICAgJmFkZXYtPnBtLmRwbS5keW5fc3RhdGUucGhhc2Vfc2hlZGRpbmdfbGlt aXRzX3RhYmxlLAorCQkJCQkJICAgICAgIHBsLT52ZGRjLAorCQkJCQkJICAgICAgIHBsLT5zY2xr LAorCQkJCQkJICAgICAgIHBsLT5tY2xrLAorCQkJCQkJICAgICAgICZsZXZlbC0+dmRkYyk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWxldmVsLT5NYXhQb3dlcmVkVXBDVSA9 IHNpX3BpLT5tYXhfY3U7CisKKwlyZXQgPSBzaV9wb3B1bGF0ZV9tdmRkX3ZhbHVlKGFkZXYsIHBs LT5tY2xrLCAmbGV2ZWwtPm12ZGQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBz aV9wb3B1bGF0ZV9zbWNfdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCSAgICAgc3Ry dWN0IGFtZGdwdV9wcyAqYW1kZ3B1X3N0YXRlLAorCQkJICAgICBTSVNMQU5EU19TTUNfU1dTVEFU RSAqc21jX3N0YXRlKQoreworCXN0cnVjdCBydjd4eF9wb3dlcl9pbmZvICpwaSA9IHJ2NzcwX2dl dF9waShhZGV2KTsKKwlzdHJ1Y3QgIHNpX3BzICpzdGF0ZSA9IHNpX2dldF9wcyhhbWRncHVfc3Rh dGUpOworCXUzMiBhX3Q7CisJdTMyIHRfbCwgdF9oOworCXUzMiBoaWdoX2JzcDsKKwlpbnQgaSwg cmV0OworCisJaWYgKHN0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbF9jb3VudCA+PSA5KQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCWlmIChzdGF0ZS0+cGVyZm9ybWFuY2VfbGV2ZWxfY291bnQgPCAyKSB7 CisJCWFfdCA9IENHX1IoMHhmZmZmKSB8IENHX0woMCk7CisJCXNtY19zdGF0ZS0+bGV2ZWxzWzBd LmFUID0gY3B1X3RvX2JlMzIoYV90KTsKKwkJcmV0dXJuIDA7CisJfQorCisJc21jX3N0YXRlLT5s ZXZlbHNbMF0uYVQgPSBjcHVfdG9fYmUzMigwKTsKKworCWZvciAoaSA9IDA7IGkgPD0gc3RhdGUt PnBlcmZvcm1hbmNlX2xldmVsX2NvdW50IC0gMjsgaSsrKSB7CisJCXJldCA9IHI2MDBfY2FsY3Vs YXRlX2F0KAorCQkJKDUwIC8gU0lTTEFORFNfTUFYX0hBUkRXQVJFX1BPV0VSTEVWRUxTKSAqIDEw MCAqIChpICsgMSksCisJCQkxMDAgKiBSNjAwX0FIX0RGTFQsCisJCQlzdGF0ZS0+cGVyZm9ybWFu Y2VfbGV2ZWxzW2kgKyAxXS5zY2xrLAorCQkJc3RhdGUtPnBlcmZvcm1hbmNlX2xldmVsc1tpXS5z Y2xrLAorCQkJJnRfbCwKKwkJCSZ0X2gpOworCisJCWlmIChyZXQpIHsKKwkJCXRfaCA9IChpICsg MSkgKiAxMDAwIC0gNTAgKiBSNjAwX0FIX0RGTFQ7CisJCQl0X2wgPSAoaSArIDEpICogMTAwMCAr IDUwICogUjYwMF9BSF9ERkxUOworCQl9CisKKwkJYV90ID0gYmUzMl90b19jcHUoc21jX3N0YXRl LT5sZXZlbHNbaV0uYVQpICYgfkNHX1JfTUFTSzsKKwkJYV90IHw9IENHX1IodF9sICogcGktPmJz cCAvIDIwMDAwKTsKKwkJc21jX3N0YXRlLT5sZXZlbHNbaV0uYVQgPSBjcHVfdG9fYmUzMihhX3Qp OworCisJCWhpZ2hfYnNwID0gKGkgPT0gc3RhdGUtPnBlcmZvcm1hbmNlX2xldmVsX2NvdW50IC0g MikgPworCQkJcGktPnBic3AgOiBwaS0+YnNwOworCQlhX3QgPSBDR19SKDB4ZmZmZikgfCBDR19M KHRfaCAqIGhpZ2hfYnNwIC8gMjAwMDApOworCQlzbWNfc3RhdGUtPmxldmVsc1tpICsgMV0uYVQg PSBjcHVfdG9fYmUzMihhX3QpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNp X2Rpc2FibGVfdWx2KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBzaV9w b3dlcl9pbmZvICpzaV9waSA9IHNpX2dldF9waShhZGV2KTsKKwlzdHJ1Y3Qgc2lfdWx2X3BhcmFt ICp1bHYgPSAmc2lfcGktPnVsdjsKKworCWlmICh1bHYtPnN1cHBvcnRlZCkKKwkJcmV0dXJuIChz aV9zZW5kX21zZ190b19zbWMoYWRldiwgUFBTTUNfTVNHX0Rpc2FibGVVTFYpID09IFBQU01DX1Jl c3VsdF9PSykgPworCQkJMCA6IC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJv b2wgc2lfaXNfc3RhdGVfdWx2X2NvbXBhdGlibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs CisJCQkJICAgICAgIHN0cnVjdCBhbWRncHVfcHMgKmFtZGdwdV9zdGF0ZSkKK3sKKwljb25zdCBz dHJ1Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRfcGkoYWRldik7CisJY29uc3Qgc3Ry dWN0IHNpX3Vsdl9wYXJhbSAqdWx2ID0gJnNpX3BpLT51bHY7CisJY29uc3Qgc3RydWN0ICBzaV9w cyAqc3RhdGUgPSBzaV9nZXRfcHMoYW1kZ3B1X3N0YXRlKTsKKwlpbnQgaTsKKworCWlmIChzdGF0 ZS0+cGVyZm9ybWFuY2VfbGV2ZWxzWzBdLm1jbGsgIT0gdWx2LT5wbC5tY2xrKQorCQlyZXR1cm4g ZmFsc2U7CisKKwkvKiBYWFggdmFsaWRhdGUgYWdhaW5zdCBkaXNwbGF5IHJlcXVpcmVtZW50cyEg Ki8KKworCWZvciAoaSA9IDA7IGkgPCBhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5k ZW5jeV9vbl9kaXNwY2xrLmNvdW50OyBpKyspIHsKKwkJaWYgKGFkZXYtPmNsb2NrLmN1cnJlbnRf ZGlzcGNsayA8PQorCQkgICAgYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lf b25fZGlzcGNsay5lbnRyaWVzW2ldLmNsaykgeworCQkJaWYgKHVsdi0+cGwudmRkYyA8CisJCQkg ICAgYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fZGlzcGNsay5lbnRy aWVzW2ldLnYpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJaWYgKChhbWRncHVfc3Rh dGUtPnZjbGsgIT0gMCkgfHwgKGFtZGdwdV9zdGF0ZS0+ZGNsayAhPSAwKSkKKwkJcmV0dXJuIGZh bHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgc2lfc2V0X3Bvd2VyX3N0YXRl X2NvbmRpdGlvbmFsbHlfZW5hYmxlX3VsdihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJ CQkJCSAgICAgICBzdHJ1Y3QgYW1kZ3B1X3BzICphbWRncHVfbmV3X3N0YXRlKQoreworCWNvbnN0 IHN0cnVjdCBzaV9wb3dlcl9pbmZvICpzaV9waSA9IHNpX2dldF9waShhZGV2KTsKKwljb25zdCBz dHJ1Y3Qgc2lfdWx2X3BhcmFtICp1bHYgPSAmc2lfcGktPnVsdjsKKworCWlmICh1bHYtPnN1cHBv cnRlZCkgeworCQlpZiAoc2lfaXNfc3RhdGVfdWx2X2NvbXBhdGlibGUoYWRldiwgYW1kZ3B1X25l d19zdGF0ZSkpCisJCQlyZXR1cm4gKHNpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LCBQUFNNQ19NU0df RW5hYmxlVUxWKSA9PSBQUFNNQ19SZXN1bHRfT0spID8KKwkJCQkwIDogLUVJTlZBTDsKKwl9CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2lfY29udmVydF9wb3dlcl9zdGF0ZV90b19zbWMo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJCSBzdHJ1Y3QgYW1kZ3B1X3BzICphbWRn cHVfc3RhdGUsCisJCQkJCSBTSVNMQU5EU19TTUNfU1dTVEFURSAqc21jX3N0YXRlKQoreworCXN0 cnVjdCBldmVyZ3JlZW5fcG93ZXJfaW5mbyAqZWdfcGkgPSBldmVyZ3JlZW5fZ2V0X3BpKGFkZXYp OworCXN0cnVjdCBuaV9wb3dlcl9pbmZvICpuaV9waSA9IG5pX2dldF9waShhZGV2KTsKKwlzdHJ1 Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRfcGkoYWRldik7CisJc3RydWN0ICBzaV9w cyAqc3RhdGUgPSBzaV9nZXRfcHMoYW1kZ3B1X3N0YXRlKTsKKwlpbnQgaSwgcmV0OworCXUzMiB0 aHJlc2hvbGQ7CisJdTMyIHNjbGtfaW5fc3IgPSAxMzUwOyAvKiA/Pz8gKi8KKworCWlmIChzdGF0 ZS0+cGVyZm9ybWFuY2VfbGV2ZWxfY291bnQgPiBTSVNMQU5EU19NQVhfSEFSRFdBUkVfUE9XRVJM RVZFTFMpCisJCXJldHVybiAtRUlOVkFMOworCisJdGhyZXNob2xkID0gc3RhdGUtPnBlcmZvcm1h bmNlX2xldmVsc1tzdGF0ZS0+cGVyZm9ybWFuY2VfbGV2ZWxfY291bnQtMV0uc2NsayAqIDEwMCAv IDEwMDsKKworCWlmIChhbWRncHVfc3RhdGUtPnZjbGsgJiYgYW1kZ3B1X3N0YXRlLT5kY2xrKSB7 CisJCWVnX3BpLT51dmRfZW5hYmxlZCA9IHRydWU7CisJCWlmIChlZ19waS0+c211X3V2ZF9ocykK KwkJCXNtY19zdGF0ZS0+ZmxhZ3MgfD0gUFBTTUNfU1dTVEFURV9GTEFHX1VWRDsKKwl9IGVsc2Ug eworCQllZ19waS0+dXZkX2VuYWJsZWQgPSBmYWxzZTsKKwl9CisKKwlpZiAoc3RhdGUtPmRjX2Nv bXBhdGlibGUpCisJCXNtY19zdGF0ZS0+ZmxhZ3MgfD0gUFBTTUNfU1dTVEFURV9GTEFHX0RDOwor CisJc21jX3N0YXRlLT5sZXZlbENvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPnBl cmZvcm1hbmNlX2xldmVsX2NvdW50OyBpKyspIHsKKwkJaWYgKGVnX3BpLT5zY2xrX2RlZXBfc2xl ZXApIHsKKwkJCWlmICgoaSA9PSAwKSB8fCBzaV9waS0+c2Nsa19kZWVwX3NsZWVwX2Fib3ZlX2xv dykgeworCQkJCWlmIChzY2xrX2luX3NyIDw9IFNDTEtfTUlOX0RFRVBTTEVFUF9GUkVRKQorCQkJ CQlzbWNfc3RhdGUtPmxldmVsc1tpXS5zdGF0ZUZsYWdzIHw9IFBQU01DX1NUQVRFRkxBR19ERUVQ U0xFRVBfQllQQVNTOworCQkJCWVsc2UKKwkJCQkJc21jX3N0YXRlLT5sZXZlbHNbaV0uc3RhdGVG bGFncyB8PSBQUFNNQ19TVEFURUZMQUdfREVFUFNMRUVQX1RIUk9UVExFOworCQkJfQorCQl9CisK KwkJcmV0ID0gc2lfY29udmVydF9wb3dlcl9sZXZlbF90b19zbWMoYWRldiwgJnN0YXRlLT5wZXJm b3JtYW5jZV9sZXZlbHNbaV0sCisJCQkJCQkgICAgJnNtY19zdGF0ZS0+bGV2ZWxzW2ldKTsKKwkJ c21jX3N0YXRlLT5sZXZlbHNbaV0uYXJiUmVmcmVzaFN0YXRlID0KKwkJCSh1OCkoU0lTTEFORFNf RFJJVkVSX1NUQVRFX0FSQl9JTkRFWCArIGkpOworCisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0 OworCisJCWlmIChuaV9waS0+ZW5hYmxlX3Bvd2VyX2NvbnRhaW5tZW50KQorCQkJc21jX3N0YXRl LT5sZXZlbHNbaV0uZGlzcGxheVdhdGVybWFyayA9CisJCQkJKHN0YXRlLT5wZXJmb3JtYW5jZV9s ZXZlbHNbaV0uc2NsayA8IHRocmVzaG9sZCkgPworCQkJCVBQU01DX0RJU1BMQVlfV0FURVJNQVJL X0xPVyA6IFBQU01DX0RJU1BMQVlfV0FURVJNQVJLX0hJR0g7CisJCWVsc2UKKwkJCXNtY19zdGF0 ZS0+bGV2ZWxzW2ldLmRpc3BsYXlXYXRlcm1hcmsgPSAoaSA8IDIpID8KKwkJCQlQUFNNQ19ESVNQ TEFZX1dBVEVSTUFSS19MT1cgOiBQUFNNQ19ESVNQTEFZX1dBVEVSTUFSS19ISUdIOworCisJCWlm IChlZ19waS0+ZHluYW1pY19hY190aW1pbmcpCisJCQlzbWNfc3RhdGUtPmxldmVsc1tpXS5BQ0lu ZGV4ID0gU0lTTEFORFNfTUNSRUdJU1RFUlRBQkxFX0ZJUlNUX0RSSVZFUlNUQVRFX1NMT1QgKyBp OworCQllbHNlCisJCQlzbWNfc3RhdGUtPmxldmVsc1tpXS5BQ0luZGV4ID0gMDsKKworCQlzbWNf c3RhdGUtPmxldmVsQ291bnQrKzsKKwl9CisKKwlzaV93cml0ZV9zbWNfc29mdF9yZWdpc3Rlcihh ZGV2LAorCQkJCSAgIFNJX1NNQ19TT0ZUX1JFR0lTVEVSX3dhdGVybWFya190aHJlc2hvbGQsCisJ CQkJICAgdGhyZXNob2xkIC8gNTEyKTsKKworCXNpX3BvcHVsYXRlX3NtY19zcChhZGV2LCBhbWRn cHVfc3RhdGUsIHNtY19zdGF0ZSk7CisKKwlyZXQgPSBzaV9wb3B1bGF0ZV9wb3dlcl9jb250YWlu bWVudF92YWx1ZXMoYWRldiwgYW1kZ3B1X3N0YXRlLCBzbWNfc3RhdGUpOworCWlmIChyZXQpCisJ CW5pX3BpLT5lbmFibGVfcG93ZXJfY29udGFpbm1lbnQgPSBmYWxzZTsKKworCXJldCA9IHNpX3Bv cHVsYXRlX3NxX3JhbXBpbmdfdmFsdWVzKGFkZXYsIGFtZGdwdV9zdGF0ZSwgc21jX3N0YXRlKTsK KyAgICAgICAgaWYgKHJldCkKKwkJbmlfcGktPmVuYWJsZV9zcV9yYW1waW5nID0gZmFsc2U7CisK KwlyZXR1cm4gc2lfcG9wdWxhdGVfc21jX3QoYWRldiwgYW1kZ3B1X3N0YXRlLCBzbWNfc3RhdGUp OworfQorCitzdGF0aWMgaW50IHNpX3VwbG9hZF9zd19zdGF0ZShzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwKKwkJCSAgICAgIHN0cnVjdCBhbWRncHVfcHMgKmFtZGdwdV9uZXdfc3RhdGUpCit7 CisJc3RydWN0IHNpX3Bvd2VyX2luZm8gKnNpX3BpID0gc2lfZ2V0X3BpKGFkZXYpOworCXN0cnVj dCAgc2lfcHMgKm5ld19zdGF0ZSA9IHNpX2dldF9wcyhhbWRncHVfbmV3X3N0YXRlKTsKKwlpbnQg cmV0OworCXUzMiBhZGRyZXNzID0gc2lfcGktPnN0YXRlX3RhYmxlX3N0YXJ0ICsKKwkJb2Zmc2V0 b2YoU0lTTEFORFNfU01DX1NUQVRFVEFCTEUsIGRyaXZlclN0YXRlKTsKKwl1MzIgc3RhdGVfc2l6 ZSA9IHNpemVvZihTSVNMQU5EU19TTUNfU1dTVEFURSkgKworCQkoKG5ld19zdGF0ZS0+cGVyZm9y bWFuY2VfbGV2ZWxfY291bnQgLSAxKSAqCisJCSBzaXplb2YoU0lTTEFORFNfU01DX0hXX1BFUkZP Uk1BTkNFX0xFVkVMKSk7CisJU0lTTEFORFNfU01DX1NXU1RBVEUgKnNtY19zdGF0ZSA9ICZzaV9w aS0+c21jX3N0YXRldGFibGUuZHJpdmVyU3RhdGU7CisKKwltZW1zZXQoc21jX3N0YXRlLCAwLCBz dGF0ZV9zaXplKTsKKworCXJldCA9IHNpX2NvbnZlcnRfcG93ZXJfc3RhdGVfdG9fc21jKGFkZXYs IGFtZGdwdV9uZXdfc3RhdGUsIHNtY19zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXJldCA9IHNpX2NvcHlfYnl0ZXNfdG9fc21jKGFkZXYsIGFkZHJlc3MsICh1OCAqKXNtY19z dGF0ZSwKKwkJCQkgICBzdGF0ZV9zaXplLCBzaV9waS0+c3JhbV9lbmQpOworCisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCBzaV91cGxvYWRfdWx2X3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2KQoreworCXN0cnVjdCBzaV9wb3dlcl9pbmZvICpzaV9waSA9IHNpX2dldF9waShh ZGV2KTsKKwlzdHJ1Y3Qgc2lfdWx2X3BhcmFtICp1bHYgPSAmc2lfcGktPnVsdjsKKwlpbnQgcmV0 ID0gMDsKKworCWlmICh1bHYtPnN1cHBvcnRlZCAmJiB1bHYtPnBsLnZkZGMpIHsKKwkJdTMyIGFk ZHJlc3MgPSBzaV9waS0+c3RhdGVfdGFibGVfc3RhcnQgKworCQkJb2Zmc2V0b2YoU0lTTEFORFNf U01DX1NUQVRFVEFCTEUsIFVMVlN0YXRlKTsKKwkJU0lTTEFORFNfU01DX1NXU1RBVEUgKnNtY19z dGF0ZSA9ICZzaV9waS0+c21jX3N0YXRldGFibGUuVUxWU3RhdGU7CisJCXUzMiBzdGF0ZV9zaXpl ID0gc2l6ZW9mKFNJU0xBTkRTX1NNQ19TV1NUQVRFKTsKKworCQltZW1zZXQoc21jX3N0YXRlLCAw LCBzdGF0ZV9zaXplKTsKKworCQlyZXQgPSBzaV9wb3B1bGF0ZV91bHZfc3RhdGUoYWRldiwgc21j X3N0YXRlKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBzaV9jb3B5X2J5dGVzX3RvX3NtYyhhZGV2 LCBhZGRyZXNzLCAodTggKilzbWNfc3RhdGUsCisJCQkJCQkgICBzdGF0ZV9zaXplLCBzaV9waS0+ c3JhbV9lbmQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2lfdXBsb2Fk X3NtY19kYXRhKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBhbWRncHVf Y3J0YyAqYW1kZ3B1X2NydGMgPSBOVUxMOworCWludCBpOworCisJaWYgKGFkZXYtPnBtLmRwbS5u ZXdfYWN0aXZlX2NydGNfY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBp IDwgYWRldi0+bW9kZV9pbmZvLm51bV9jcnRjOyBpKyspIHsKKwkJaWYgKGFkZXYtPnBtLmRwbS5u ZXdfYWN0aXZlX2NydGNzICYgKDEgPDwgaSkpIHsKKwkJCWFtZGdwdV9jcnRjID0gYWRldi0+bW9k ZV9pbmZvLmNydGNzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoYW1kZ3B1X2NydGMg PT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYW1kZ3B1X2NydGMtPmxpbmVfdGltZSA8PSAw KQorCQlyZXR1cm4gMDsKKworCWlmIChzaV93cml0ZV9zbWNfc29mdF9yZWdpc3RlcihhZGV2LAor CQkJCSAgICAgICBTSV9TTUNfU09GVF9SRUdJU1RFUl9jcnRjX2luZGV4LAorCQkJCSAgICAgICBh bWRncHVfY3J0Yy0+Y3J0Y19pZCkgIT0gUFBTTUNfUmVzdWx0X09LKQorCQlyZXR1cm4gMDsKKwor CWlmIChzaV93cml0ZV9zbWNfc29mdF9yZWdpc3RlcihhZGV2LAorCQkJCSAgICAgICBTSV9TTUNf U09GVF9SRUdJU1RFUl9tY2xrX2NoYW5nZV9ibG9ja19jcF9taW4sCisJCQkJICAgICAgIGFtZGdw dV9jcnRjLT53bV9oaWdoIC8gYW1kZ3B1X2NydGMtPmxpbmVfdGltZSkgIT0gUFBTTUNfUmVzdWx0 X09LKQorCQlyZXR1cm4gMDsKKworCWlmIChzaV93cml0ZV9zbWNfc29mdF9yZWdpc3RlcihhZGV2 LAorCQkJCSAgICAgICBTSV9TTUNfU09GVF9SRUdJU1RFUl9tY2xrX2NoYW5nZV9ibG9ja19jcF9t YXgsCisJCQkJICAgICAgIGFtZGdwdV9jcnRjLT53bV9sb3cgLyBhbWRncHVfY3J0Yy0+bGluZV90 aW1lKSAhPSBQUFNNQ19SZXN1bHRfT0spCisJCXJldHVybiAwOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgc2lfc2V0X21jX3NwZWNpYWxfcmVnaXN0ZXJzKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2lfbWNfcmVnX3RhYmxlICp0YWJsZSkKK3sK Kwl1OCBpLCBqLCBrOworCXUzMiB0ZW1wX3JlZzsKKworCWZvciAoaSA9IDAsIGogPSB0YWJsZS0+ bGFzdDsgaSA8IHRhYmxlLT5sYXN0OyBpKyspIHsKKwkJaWYgKGogPj0gU01DX1NJU0xBTkRTX01D X1JFR0lTVEVSX0FSUkFZX1NJWkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3dpdGNoICh0YWJs ZS0+bWNfcmVnX2FkZHJlc3NbaV0uczEpIHsKKwkJY2FzZSBNQ19TRVFfTUlTQzE6CisJCQl0ZW1w X3JlZyA9IFJSRUczMihNQ19QTUdfQ01EX0VNUlMpOworCQkJdGFibGUtPm1jX3JlZ19hZGRyZXNz W2pdLnMxID0gTUNfUE1HX0NNRF9FTVJTOworCQkJdGFibGUtPm1jX3JlZ19hZGRyZXNzW2pdLnMw ID0gTUNfU0VRX1BNR19DTURfRU1SU19MUDsKKwkJCWZvciAoayA9IDA7IGsgPCB0YWJsZS0+bnVt X2VudHJpZXM7IGsrKykKKwkJCQl0YWJsZS0+bWNfcmVnX3RhYmxlX2VudHJ5W2tdLm1jX2RhdGFb al0gPQorCQkJCQkoKHRlbXBfcmVnICYgMHhmZmZmMDAwMCkpIHwKKwkJCQkJKCh0YWJsZS0+bWNf cmVnX3RhYmxlX2VudHJ5W2tdLm1jX2RhdGFbaV0gJiAweGZmZmYwMDAwKSA+PiAxNik7CisJCQlq Kys7CisJCQlpZiAoaiA+PSBTTUNfU0lTTEFORFNfTUNfUkVHSVNURVJfQVJSQVlfU0laRSkKKwkJ CQlyZXR1cm4gLUVJTlZBTDsKKworCQkJdGVtcF9yZWcgPSBSUkVHMzIoTUNfUE1HX0NNRF9NUlMp OworCQkJdGFibGUtPm1jX3JlZ19hZGRyZXNzW2pdLnMxID0gTUNfUE1HX0NNRF9NUlM7CisJCQl0 YWJsZS0+bWNfcmVnX2FkZHJlc3Nbal0uczAgPSBNQ19TRVFfUE1HX0NNRF9NUlNfTFA7CisJCQlm b3IgKGsgPSAwOyBrIDwgdGFibGUtPm51bV9lbnRyaWVzOyBrKyspIHsKKwkJCQl0YWJsZS0+bWNf cmVnX3RhYmxlX2VudHJ5W2tdLm1jX2RhdGFbal0gPQorCQkJCQkodGVtcF9yZWcgJiAweGZmZmYw MDAwKSB8CisJCQkJCSh0YWJsZS0+bWNfcmVnX3RhYmxlX2VudHJ5W2tdLm1jX2RhdGFbaV0gJiAw eDAwMDBmZmZmKTsKKwkJCQlpZiAoYWRldi0+bWMudnJhbV90eXBlICE9IEFNREdQVV9WUkFNX1RZ UEVfR0REUjUpCisJCQkJCXRhYmxlLT5tY19yZWdfdGFibGVfZW50cnlba10ubWNfZGF0YVtqXSB8 PSAweDEwMDsKKwkJCX0KKwkJCWorKzsKKwkJCWlmIChqID49IFNNQ19TSVNMQU5EU19NQ19SRUdJ U1RFUl9BUlJBWV9TSVpFKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlpZiAoYWRldi0+bWMu dnJhbV90eXBlICE9IEFNREdQVV9WUkFNX1RZUEVfR0REUjUpIHsKKwkJCQl0YWJsZS0+bWNfcmVn X2FkZHJlc3Nbal0uczEgPSBNQ19QTUdfQVVUT19DTUQ7CisJCQkJdGFibGUtPm1jX3JlZ19hZGRy ZXNzW2pdLnMwID0gTUNfUE1HX0FVVE9fQ01EOworCQkJCWZvciAoayA9IDA7IGsgPCB0YWJsZS0+ bnVtX2VudHJpZXM7IGsrKykKKwkJCQkJdGFibGUtPm1jX3JlZ190YWJsZV9lbnRyeVtrXS5tY19k YXRhW2pdID0KKwkJCQkJCSh0YWJsZS0+bWNfcmVnX3RhYmxlX2VudHJ5W2tdLm1jX2RhdGFbaV0g JiAweGZmZmYwMDAwKSA+PiAxNjsKKwkJCQlqKys7CisJCQkJaWYgKGogPj0gU01DX1NJU0xBTkRT X01DX1JFR0lTVEVSX0FSUkFZX1NJWkUpCisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJ YnJlYWs7CisJCWNhc2UgTUNfU0VRX1JFU0VSVkVfTToKKwkJCXRlbXBfcmVnID0gUlJFRzMyKE1D X1BNR19DTURfTVJTMSk7CisJCQl0YWJsZS0+bWNfcmVnX2FkZHJlc3Nbal0uczEgPSBNQ19QTUdf Q01EX01SUzE7CisJCQl0YWJsZS0+bWNfcmVnX2FkZHJlc3Nbal0uczAgPSBNQ19TRVFfUE1HX0NN RF9NUlMxX0xQOworCQkJZm9yKGsgPSAwOyBrIDwgdGFibGUtPm51bV9lbnRyaWVzOyBrKyspCisJ CQkJdGFibGUtPm1jX3JlZ190YWJsZV9lbnRyeVtrXS5tY19kYXRhW2pdID0KKwkJCQkJKHRlbXBf cmVnICYgMHhmZmZmMDAwMCkgfAorCQkJCQkodGFibGUtPm1jX3JlZ190YWJsZV9lbnRyeVtrXS5t Y19kYXRhW2ldICYgMHgwMDAwZmZmZik7CisJCQlqKys7CisJCQlpZiAoaiA+PSBTTUNfU0lTTEFO RFNfTUNfUkVHSVNURVJfQVJSQVlfU0laRSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFr OworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwl0YWJsZS0+bGFzdCA9IGo7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgc2lfY2hlY2tfczBfbWNfcmVnX2luZGV4KHUx NiBpbl9yZWcsIHUxNiAqb3V0X3JlZykKK3sKKwlib29sIHJlc3VsdCA9IHRydWU7CisJc3dpdGNo IChpbl9yZWcpIHsKKwljYXNlICBNQ19TRVFfUkFTX1RJTUlORzoKKwkJKm91dF9yZWcgPSBNQ19T RVFfUkFTX1RJTUlOR19MUDsKKwkJYnJlYWs7CisgICAgICAgIGNhc2UgTUNfU0VRX0NBU19USU1J Tkc6CisJCSpvdXRfcmVnID0gTUNfU0VRX0NBU19USU1JTkdfTFA7CisJCWJyZWFrOworICAgICAg ICBjYXNlIE1DX1NFUV9NSVNDX1RJTUlORzoKKwkJKm91dF9yZWcgPSBNQ19TRVFfTUlTQ19USU1J TkdfTFA7CisJCWJyZWFrOworICAgICAgICBjYXNlIE1DX1NFUV9NSVNDX1RJTUlORzI6CisJCSpv dXRfcmVnID0gTUNfU0VRX01JU0NfVElNSU5HMl9MUDsKKwkJYnJlYWs7CisgICAgICAgIGNhc2Ug TUNfU0VRX1JEX0NUTF9EMDoKKwkJKm91dF9yZWcgPSBNQ19TRVFfUkRfQ1RMX0QwX0xQOworCQli cmVhazsKKyAgICAgICAgY2FzZSBNQ19TRVFfUkRfQ1RMX0QxOgorCQkqb3V0X3JlZyA9IE1DX1NF UV9SRF9DVExfRDFfTFA7CisJCWJyZWFrOworICAgICAgICBjYXNlIE1DX1NFUV9XUl9DVExfRDA6 CisJCSpvdXRfcmVnID0gTUNfU0VRX1dSX0NUTF9EMF9MUDsKKwkJYnJlYWs7CisgICAgICAgIGNh c2UgTUNfU0VRX1dSX0NUTF9EMToKKwkJKm91dF9yZWcgPSBNQ19TRVFfV1JfQ1RMX0QxX0xQOwor CQlicmVhazsKKyAgICAgICAgY2FzZSBNQ19QTUdfQ01EX0VNUlM6CisJCSpvdXRfcmVnID0gTUNf U0VRX1BNR19DTURfRU1SU19MUDsKKwkJYnJlYWs7CisgICAgICAgIGNhc2UgTUNfUE1HX0NNRF9N UlM6CisJCSpvdXRfcmVnID0gTUNfU0VRX1BNR19DTURfTVJTX0xQOworCQlicmVhazsKKyAgICAg ICAgY2FzZSBNQ19QTUdfQ01EX01SUzE6CisJCSpvdXRfcmVnID0gTUNfU0VRX1BNR19DTURfTVJT MV9MUDsKKwkJYnJlYWs7CisgICAgICAgIGNhc2UgTUNfU0VRX1BNR19USU1JTkc6CisJCSpvdXRf cmVnID0gTUNfU0VRX1BNR19USU1JTkdfTFA7CisJCWJyZWFrOworICAgICAgICBjYXNlIE1DX1BN R19DTURfTVJTMjoKKwkJKm91dF9yZWcgPSBNQ19TRVFfUE1HX0NNRF9NUlMyX0xQOworCQlicmVh azsKKyAgICAgICAgY2FzZSBNQ19TRVFfV1JfQ1RMXzI6CisJCSpvdXRfcmVnID0gTUNfU0VRX1dS X0NUTF8yX0xQOworCQlicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKwkJcmVzdWx0ID0gZmFsc2U7 CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHNpX3Nl dF92YWxpZF9mbGFnKHN0cnVjdCBzaV9tY19yZWdfdGFibGUgKnRhYmxlKQoreworCXU4IGksIGo7 CisKKwlmb3IgKGkgPSAwOyBpIDwgdGFibGUtPmxhc3Q7IGkrKykgeworCQlmb3IgKGogPSAxOyBq IDwgdGFibGUtPm51bV9lbnRyaWVzOyBqKyspIHsKKwkJCWlmICh0YWJsZS0+bWNfcmVnX3RhYmxl X2VudHJ5W2otMV0ubWNfZGF0YVtpXSAhPSB0YWJsZS0+bWNfcmVnX3RhYmxlX2VudHJ5W2pdLm1j X2RhdGFbaV0pIHsKKwkJCQl0YWJsZS0+dmFsaWRfZmxhZyB8PSAxIDw8IGk7CisJCQkJYnJlYWs7 CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNpX3NldF9zMF9tY19yZWdfaW5kZXgo c3RydWN0IHNpX21jX3JlZ190YWJsZSAqdGFibGUpCit7CisJdTMyIGk7CisJdTE2IGFkZHJlc3M7 CisKKwlmb3IgKGkgPSAwOyBpIDwgdGFibGUtPmxhc3Q7IGkrKykKKwkJdGFibGUtPm1jX3JlZ19h ZGRyZXNzW2ldLnMwID0gc2lfY2hlY2tfczBfbWNfcmVnX2luZGV4KHRhYmxlLT5tY19yZWdfYWRk cmVzc1tpXS5zMSwgJmFkZHJlc3MpID8KKwkJCWFkZHJlc3MgOiB0YWJsZS0+bWNfcmVnX2FkZHJl c3NbaV0uczE7CisKK30KKworc3RhdGljIGludCBzaV9jb3B5X3ZiaW9zX21jX3JlZ190YWJsZShz dHJ1Y3QgYXRvbV9tY19yZWdfdGFibGUgKnRhYmxlLAorCQkJCSAgICAgIHN0cnVjdCBzaV9tY19y ZWdfdGFibGUgKnNpX3RhYmxlKQoreworCXU4IGksIGo7CisKKwlpZiAodGFibGUtPmxhc3QgPiBT TUNfU0lTTEFORFNfTUNfUkVHSVNURVJfQVJSQVlfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJ aWYgKHRhYmxlLT5udW1fZW50cmllcyA+IE1BWF9BQ19USU1JTkdfRU5UUklFUykKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGFibGUtPmxhc3Q7IGkrKykKKwkJc2lfdGFi bGUtPm1jX3JlZ19hZGRyZXNzW2ldLnMxID0gdGFibGUtPm1jX3JlZ19hZGRyZXNzW2ldLnMxOwor CXNpX3RhYmxlLT5sYXN0ID0gdGFibGUtPmxhc3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGFibGUt Pm51bV9lbnRyaWVzOyBpKyspIHsKKwkJc2lfdGFibGUtPm1jX3JlZ190YWJsZV9lbnRyeVtpXS5t Y2xrX21heCA9CisJCQl0YWJsZS0+bWNfcmVnX3RhYmxlX2VudHJ5W2ldLm1jbGtfbWF4OworCQlm b3IgKGogPSAwOyBqIDwgdGFibGUtPmxhc3Q7IGorKykgeworCQkJc2lfdGFibGUtPm1jX3JlZ190 YWJsZV9lbnRyeVtpXS5tY19kYXRhW2pdID0KKwkJCQl0YWJsZS0+bWNfcmVnX3RhYmxlX2VudHJ5 W2ldLm1jX2RhdGFbal07CisJCX0KKwl9CisJc2lfdGFibGUtPm51bV9lbnRyaWVzID0gdGFibGUt Pm51bV9lbnRyaWVzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2lfaW5pdGlhbGl6 ZV9tY19yZWdfdGFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IHNp X3Bvd2VyX2luZm8gKnNpX3BpID0gc2lfZ2V0X3BpKGFkZXYpOworCXN0cnVjdCBhdG9tX21jX3Jl Z190YWJsZSAqdGFibGU7CisJc3RydWN0IHNpX21jX3JlZ190YWJsZSAqc2lfdGFibGUgPSAmc2lf cGktPm1jX3JlZ190YWJsZTsKKwl1OCBtb2R1bGVfaW5kZXggPSBydjc3MF9nZXRfbWVtb3J5X21v ZHVsZV9pbmRleChhZGV2KTsKKwlpbnQgcmV0OworCisJdGFibGUgPSBremFsbG9jKHNpemVvZihz dHJ1Y3QgYXRvbV9tY19yZWdfdGFibGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRhYmxlKQorCQly ZXR1cm4gLUVOT01FTTsKKworCVdSRUczMihNQ19TRVFfUkFTX1RJTUlOR19MUCwgUlJFRzMyKE1D X1NFUV9SQVNfVElNSU5HKSk7CisJV1JFRzMyKE1DX1NFUV9DQVNfVElNSU5HX0xQLCBSUkVHMzIo TUNfU0VRX0NBU19USU1JTkcpKTsKKwlXUkVHMzIoTUNfU0VRX01JU0NfVElNSU5HX0xQLCBSUkVH MzIoTUNfU0VRX01JU0NfVElNSU5HKSk7CisJV1JFRzMyKE1DX1NFUV9NSVNDX1RJTUlORzJfTFAs IFJSRUczMihNQ19TRVFfTUlTQ19USU1JTkcyKSk7CisJV1JFRzMyKE1DX1NFUV9QTUdfQ01EX0VN UlNfTFAsIFJSRUczMihNQ19QTUdfQ01EX0VNUlMpKTsKKwlXUkVHMzIoTUNfU0VRX1BNR19DTURf TVJTX0xQLCBSUkVHMzIoTUNfUE1HX0NNRF9NUlMpKTsKKwlXUkVHMzIoTUNfU0VRX1BNR19DTURf TVJTMV9MUCwgUlJFRzMyKE1DX1BNR19DTURfTVJTMSkpOworCVdSRUczMihNQ19TRVFfV1JfQ1RM X0QwX0xQLCBSUkVHMzIoTUNfU0VRX1dSX0NUTF9EMCkpOworCVdSRUczMihNQ19TRVFfV1JfQ1RM X0QxX0xQLCBSUkVHMzIoTUNfU0VRX1dSX0NUTF9EMSkpOworCVdSRUczMihNQ19TRVFfUkRfQ1RM X0QwX0xQLCBSUkVHMzIoTUNfU0VRX1JEX0NUTF9EMCkpOworCVdSRUczMihNQ19TRVFfUkRfQ1RM X0QxX0xQLCBSUkVHMzIoTUNfU0VRX1JEX0NUTF9EMSkpOworCVdSRUczMihNQ19TRVFfUE1HX1RJ TUlOR19MUCwgUlJFRzMyKE1DX1NFUV9QTUdfVElNSU5HKSk7CisJV1JFRzMyKE1DX1NFUV9QTUdf Q01EX01SUzJfTFAsIFJSRUczMihNQ19QTUdfQ01EX01SUzIpKTsKKwlXUkVHMzIoTUNfU0VRX1dS X0NUTF8yX0xQLCBSUkVHMzIoTUNfU0VRX1dSX0NUTF8yKSk7CisKKyAgICAgICAgcmV0ID0gYW1k Z3B1X2F0b21iaW9zX2luaXRfbWNfcmVnX3RhYmxlKGFkZXYsIG1vZHVsZV9pbmRleCwgdGFibGUp OworICAgICAgICBpZiAocmV0KQorICAgICAgICAgICAgICAgIGdvdG8gaW5pdF9tY19kb25lOwor CisgICAgICAgIHJldCA9IHNpX2NvcHlfdmJpb3NfbWNfcmVnX3RhYmxlKHRhYmxlLCBzaV90YWJs ZSk7CisgICAgICAgIGlmIChyZXQpCisgICAgICAgICAgICAgICAgZ290byBpbml0X21jX2RvbmU7 CisKKwlzaV9zZXRfczBfbWNfcmVnX2luZGV4KHNpX3RhYmxlKTsKKworCXJldCA9IHNpX3NldF9t Y19zcGVjaWFsX3JlZ2lzdGVycyhhZGV2LCBzaV90YWJsZSk7CisgICAgICAgIGlmIChyZXQpCisg ICAgICAgICAgICAgICAgZ290byBpbml0X21jX2RvbmU7CisKKwlzaV9zZXRfdmFsaWRfZmxhZyhz aV90YWJsZSk7CisKK2luaXRfbWNfZG9uZToKKwlrZnJlZSh0YWJsZSk7CisKKwlyZXR1cm4gcmV0 OworCit9CisKK3N0YXRpYyB2b2lkIHNpX3BvcHVsYXRlX21jX3JlZ19hZGRyZXNzZXMoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJCSBTTUNfU0lzbGFuZHNfTUNSZWdpc3RlcnMgKm1j X3JlZ190YWJsZSkKK3sKKwlzdHJ1Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRfcGko YWRldik7CisJdTMyIGksIGo7CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaiA8IHNpX3BpLT5tY19y ZWdfdGFibGUubGFzdDsgaisrKSB7CisJCWlmIChzaV9waS0+bWNfcmVnX3RhYmxlLnZhbGlkX2Zs YWcgJiAoMSA8PCBqKSkgeworCQkJaWYgKGkgPj0gU01DX1NJU0xBTkRTX01DX1JFR0lTVEVSX0FS UkFZX1NJWkUpCisJCQkJYnJlYWs7CisJCQltY19yZWdfdGFibGUtPmFkZHJlc3NbaV0uczAgPQor CQkJCWNwdV90b19iZTE2KHNpX3BpLT5tY19yZWdfdGFibGUubWNfcmVnX2FkZHJlc3Nbal0uczAp OworCQkJbWNfcmVnX3RhYmxlLT5hZGRyZXNzW2ldLnMxID0KKwkJCQljcHVfdG9fYmUxNihzaV9w aS0+bWNfcmVnX3RhYmxlLm1jX3JlZ19hZGRyZXNzW2pdLnMxKTsKKwkJCWkrKzsKKwkJfQorCX0K KwltY19yZWdfdGFibGUtPmxhc3QgPSAodTgpaTsKK30KKworc3RhdGljIHZvaWQgc2lfY29udmVy dF9tY19yZWdpc3RlcnMoY29uc3Qgc3RydWN0IHNpX21jX3JlZ19lbnRyeSAqZW50cnksCisJCQkJ ICAgIFNNQ19TSXNsYW5kc19NQ1JlZ2lzdGVyU2V0ICpkYXRhLAorCQkJCSAgICB1MzIgbnVtX2Vu dHJpZXMsIHUzMiB2YWxpZF9mbGFnKQoreworCXUzMiBpLCBqOworCisJZm9yKGkgPSAwLCBqID0g MDsgaiA8IG51bV9lbnRyaWVzOyBqKyspIHsKKwkJaWYgKHZhbGlkX2ZsYWcgJiAoMSA8PCBqKSkg eworCQkJZGF0YS0+dmFsdWVbaV0gPSBjcHVfdG9fYmUzMihlbnRyeS0+bWNfZGF0YVtqXSk7CisJ CQlpKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNpX2NvbnZlcnRfbWNfcmVnX3RhYmxl X2VudHJ5X3RvX3NtYyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJCSBzdHJ1Y3Qg cnY3eHhfcGwgKnBsLAorCQkJCQkJIFNNQ19TSXNsYW5kc19NQ1JlZ2lzdGVyU2V0ICptY19yZWdf dGFibGVfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRfcGko YWRldik7CisJdTMyIGkgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHNpX3BpLT5tY19yZWdfdGFi bGUubnVtX2VudHJpZXM7IGkrKykgeworCQlpZiAocGwtPm1jbGsgPD0gc2lfcGktPm1jX3JlZ190 YWJsZS5tY19yZWdfdGFibGVfZW50cnlbaV0ubWNsa19tYXgpCisJCQlicmVhazsKKwl9CisKKwlp ZiAoKGkgPT0gc2lfcGktPm1jX3JlZ190YWJsZS5udW1fZW50cmllcykgJiYgKGkgPiAwKSkKKwkJ LS1pOworCisJc2lfY29udmVydF9tY19yZWdpc3RlcnMoJnNpX3BpLT5tY19yZWdfdGFibGUubWNf cmVnX3RhYmxlX2VudHJ5W2ldLAorCQkJCW1jX3JlZ190YWJsZV9kYXRhLCBzaV9waS0+bWNfcmVn X3RhYmxlLmxhc3QsCisJCQkJc2lfcGktPm1jX3JlZ190YWJsZS52YWxpZF9mbGFnKTsKK30KKwor c3RhdGljIHZvaWQgc2lfY29udmVydF9tY19yZWdfdGFibGVfdG9fc21jKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2LAorCQkJCQkgICBzdHJ1Y3QgYW1kZ3B1X3BzICphbWRncHVfc3RhdGUsCisJ CQkJCSAgIFNNQ19TSXNsYW5kc19NQ1JlZ2lzdGVycyAqbWNfcmVnX3RhYmxlKQoreworCXN0cnVj dCAgc2lfcHMgKnN0YXRlID0gc2lfZ2V0X3BzKGFtZGdwdV9zdGF0ZSk7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgc3RhdGUtPnBlcmZvcm1hbmNlX2xldmVsX2NvdW50OyBpKyspIHsKKwkJ c2lfY29udmVydF9tY19yZWdfdGFibGVfZW50cnlfdG9fc21jKGFkZXYsCisJCQkJCQkgICAgICZz dGF0ZS0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLAorCQkJCQkJICAgICAmbWNfcmVnX3RhYmxlLT5k YXRhW1NJU0xBTkRTX01DUkVHSVNURVJUQUJMRV9GSVJTVF9EUklWRVJTVEFURV9TTE9UICsgaV0p OworCX0KK30KKworc3RhdGljIGludCBzaV9wb3B1bGF0ZV9tY19yZWdfdGFibGUoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJICAgIHN0cnVjdCBhbWRncHVfcHMgKmFtZGdwdV9ib290 X3N0YXRlKQoreworCXN0cnVjdCAgc2lfcHMgKmJvb3Rfc3RhdGUgPSBzaV9nZXRfcHMoYW1kZ3B1 X2Jvb3Rfc3RhdGUpOworCXN0cnVjdCBzaV9wb3dlcl9pbmZvICpzaV9waSA9IHNpX2dldF9waShh ZGV2KTsKKwlzdHJ1Y3Qgc2lfdWx2X3BhcmFtICp1bHYgPSAmc2lfcGktPnVsdjsKKwlTTUNfU0lz bGFuZHNfTUNSZWdpc3RlcnMgKnNtY19tY19yZWdfdGFibGUgPSAmc2lfcGktPnNtY19tY19yZWdf dGFibGU7CisKKwltZW1zZXQoc21jX21jX3JlZ190YWJsZSwgMCwgc2l6ZW9mKFNNQ19TSXNsYW5k c19NQ1JlZ2lzdGVycykpOworCisJc2lfd3JpdGVfc21jX3NvZnRfcmVnaXN0ZXIoYWRldiwgU0lf U01DX1NPRlRfUkVHSVNURVJfc2VxX2luZGV4LCAxKTsKKworCXNpX3BvcHVsYXRlX21jX3JlZ19h ZGRyZXNzZXMoYWRldiwgc21jX21jX3JlZ190YWJsZSk7CisKKwlzaV9jb252ZXJ0X21jX3JlZ190 YWJsZV9lbnRyeV90b19zbWMoYWRldiwgJmJvb3Rfc3RhdGUtPnBlcmZvcm1hbmNlX2xldmVsc1sw XSwKKwkJCQkJICAgICAmc21jX21jX3JlZ190YWJsZS0+ZGF0YVtTSVNMQU5EU19NQ1JFR0lTVEVS VEFCTEVfSU5JVElBTF9TTE9UXSk7CisKKwlzaV9jb252ZXJ0X21jX3JlZ2lzdGVycygmc2lfcGkt Pm1jX3JlZ190YWJsZS5tY19yZWdfdGFibGVfZW50cnlbMF0sCisJCQkJJnNtY19tY19yZWdfdGFi bGUtPmRhdGFbU0lTTEFORFNfTUNSRUdJU1RFUlRBQkxFX0FDUElfU0xPVF0sCisJCQkJc2lfcGkt Pm1jX3JlZ190YWJsZS5sYXN0LAorCQkJCXNpX3BpLT5tY19yZWdfdGFibGUudmFsaWRfZmxhZyk7 CisKKwlpZiAodWx2LT5zdXBwb3J0ZWQgJiYgdWx2LT5wbC52ZGRjICE9IDApCisJCXNpX2NvbnZl cnRfbWNfcmVnX3RhYmxlX2VudHJ5X3RvX3NtYyhhZGV2LCAmdWx2LT5wbCwKKwkJCQkJCSAgICAg JnNtY19tY19yZWdfdGFibGUtPmRhdGFbU0lTTEFORFNfTUNSRUdJU1RFUlRBQkxFX1VMVl9TTE9U XSk7CisJZWxzZQorCQlzaV9jb252ZXJ0X21jX3JlZ2lzdGVycygmc2lfcGktPm1jX3JlZ190YWJs ZS5tY19yZWdfdGFibGVfZW50cnlbMF0sCisJCQkJCSZzbWNfbWNfcmVnX3RhYmxlLT5kYXRhW1NJ U0xBTkRTX01DUkVHSVNURVJUQUJMRV9VTFZfU0xPVF0sCisJCQkJCXNpX3BpLT5tY19yZWdfdGFi bGUubGFzdCwKKwkJCQkJc2lfcGktPm1jX3JlZ190YWJsZS52YWxpZF9mbGFnKTsKKworCXNpX2Nv bnZlcnRfbWNfcmVnX3RhYmxlX3RvX3NtYyhhZGV2LCBhbWRncHVfYm9vdF9zdGF0ZSwgc21jX21j X3JlZ190YWJsZSk7CisKKwlyZXR1cm4gc2lfY29weV9ieXRlc190b19zbWMoYWRldiwgc2lfcGkt Pm1jX3JlZ190YWJsZV9zdGFydCwKKwkJCQkgICAgKHU4ICopc21jX21jX3JlZ190YWJsZSwKKwkJ CQkgICAgc2l6ZW9mKFNNQ19TSXNsYW5kc19NQ1JlZ2lzdGVycyksIHNpX3BpLT5zcmFtX2VuZCk7 Cit9CisKK3N0YXRpYyBpbnQgc2lfdXBsb2FkX21jX3JlZ190YWJsZShzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiwKKwkJCQkgIHN0cnVjdCBhbWRncHVfcHMgKmFtZGdwdV9uZXdfc3RhdGUpCit7 CisJc3RydWN0ICBzaV9wcyAqbmV3X3N0YXRlID0gc2lfZ2V0X3BzKGFtZGdwdV9uZXdfc3RhdGUp OworCXN0cnVjdCBzaV9wb3dlcl9pbmZvICpzaV9waSA9IHNpX2dldF9waShhZGV2KTsKKwl1MzIg YWRkcmVzcyA9IHNpX3BpLT5tY19yZWdfdGFibGVfc3RhcnQgKworCQlvZmZzZXRvZihTTUNfU0lz bGFuZHNfTUNSZWdpc3RlcnMsCisJCQkgZGF0YVtTSVNMQU5EU19NQ1JFR0lTVEVSVEFCTEVfRklS U1RfRFJJVkVSU1RBVEVfU0xPVF0pOworCVNNQ19TSXNsYW5kc19NQ1JlZ2lzdGVycyAqc21jX21j X3JlZ190YWJsZSA9ICZzaV9waS0+c21jX21jX3JlZ190YWJsZTsKKworCW1lbXNldChzbWNfbWNf cmVnX3RhYmxlLCAwLCBzaXplb2YoU01DX1NJc2xhbmRzX01DUmVnaXN0ZXJzKSk7CisKKwlzaV9j b252ZXJ0X21jX3JlZ190YWJsZV90b19zbWMoYWRldiwgYW1kZ3B1X25ld19zdGF0ZSwgc21jX21j X3JlZ190YWJsZSk7CisKKworCXJldHVybiBzaV9jb3B5X2J5dGVzX3RvX3NtYyhhZGV2LCBhZGRy ZXNzLAorCQkJCSAgICAodTggKikmc21jX21jX3JlZ190YWJsZS0+ZGF0YVtTSVNMQU5EU19NQ1JF R0lTVEVSVEFCTEVfRklSU1RfRFJJVkVSU1RBVEVfU0xPVF0sCisJCQkJICAgIHNpemVvZihTTUNf U0lzbGFuZHNfTUNSZWdpc3RlclNldCkgKiBuZXdfc3RhdGUtPnBlcmZvcm1hbmNlX2xldmVsX2Nv dW50LAorCQkJCSAgICBzaV9waS0+c3JhbV9lbmQpOworCit9CisKK3N0YXRpYyB2b2lkIHNpX2Vu YWJsZV92b2x0YWdlX2NvbnRyb2woc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wgZW5h YmxlKQoreworICAgICAgICBpZiAoZW5hYmxlKQorICAgICAgICAgICAgICAgIFdSRUczMl9QKEdF TkVSQUxfUFdSTUdULCBWT0xUX1BXUk1HVF9FTiwgflZPTFRfUFdSTUdUX0VOKTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgIFdSRUczMl9QKEdFTkVSQUxfUFdSTUdULCAwLCB+Vk9MVF9Q V1JNR1RfRU4pOworfQorCitzdGF0aWMgZW51bSBhbWRncHVfcGNpZV9nZW4gc2lfZ2V0X21heGlt dW1fbGlua19zcGVlZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJCSAgICAgIHN0 cnVjdCBhbWRncHVfcHMgKmFtZGdwdV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgIHNpX3BzICpzdGF0ZSA9 IHNpX2dldF9wcyhhbWRncHVfc3RhdGUpOworCWludCBpOworCXUxNiBwY2llX3NwZWVkLCBtYXhf c3BlZWQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbF9j b3VudDsgaSsrKSB7CisJCXBjaWVfc3BlZWQgPSBzdGF0ZS0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ld LnBjaWVfZ2VuOworCQlpZiAobWF4X3NwZWVkIDwgcGNpZV9zcGVlZCkKKwkJCW1heF9zcGVlZCA9 IHBjaWVfc3BlZWQ7CisJfQorCXJldHVybiBtYXhfc3BlZWQ7Cit9CisKK3N0YXRpYyB1MTYgc2lf Z2V0X2N1cnJlbnRfcGNpZV9zcGVlZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwl1 MzIgc3BlZWRfY250bDsKKworCXNwZWVkX2NudGwgPSBSUkVHMzJfUENJRShQQ0lFX0xDX1NQRUVE X0NOVEwpICYgTENfQ1VSUkVOVF9EQVRBX1JBVEVfTUFTSzsKKwlzcGVlZF9jbnRsID4+PSBMQ19D VVJSRU5UX0RBVEFfUkFURV9TSElGVDsKKworCXJldHVybiAodTE2KXNwZWVkX2NudGw7Cit9CisK K3N0YXRpYyB2b2lkIHNpX3JlcXVlc3RfbGlua19zcGVlZF9jaGFuZ2VfYmVmb3JlX3N0YXRlX2No YW5nZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJCQkgICAgIHN0cnVjdCBhbWRn cHVfcHMgKmFtZGdwdV9uZXdfc3RhdGUsCisJCQkJCQkJICAgICBzdHJ1Y3QgYW1kZ3B1X3BzICph bWRncHVfY3VycmVudF9zdGF0ZSkKK3sKKwlzdHJ1Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBz aV9nZXRfcGkoYWRldik7CisJZW51bSBhbWRncHVfcGNpZV9nZW4gdGFyZ2V0X2xpbmtfc3BlZWQg PSBzaV9nZXRfbWF4aW11bV9saW5rX3NwZWVkKGFkZXYsIGFtZGdwdV9uZXdfc3RhdGUpOworCWVu dW0gYW1kZ3B1X3BjaWVfZ2VuIGN1cnJlbnRfbGlua19zcGVlZDsKKworCWlmIChzaV9waS0+Zm9y Y2VfcGNpZV9nZW4gPT0gQU1ER1BVX1BDSUVfR0VOX0lOVkFMSUQpCisJCWN1cnJlbnRfbGlua19z cGVlZCA9IHNpX2dldF9tYXhpbXVtX2xpbmtfc3BlZWQoYWRldiwgYW1kZ3B1X2N1cnJlbnRfc3Rh dGUpOworCWVsc2UKKwkJY3VycmVudF9saW5rX3NwZWVkID0gc2lfcGktPmZvcmNlX3BjaWVfZ2Vu OworCisJc2lfcGktPmZvcmNlX3BjaWVfZ2VuID0gQU1ER1BVX1BDSUVfR0VOX0lOVkFMSUQ7CisJ c2lfcGktPnBzcHBfbm90aWZ5X3JlcXVpcmVkID0gZmFsc2U7CisJaWYgKHRhcmdldF9saW5rX3Nw ZWVkID4gY3VycmVudF9saW5rX3NwZWVkKSB7CisJCXN3aXRjaCAodGFyZ2V0X2xpbmtfc3BlZWQp IHsKKyNpZiBkZWZpbmVkKENPTkZJR19BQ1BJKQorCQljYXNlIEFNREdQVV9QQ0lFX0dFTjM6CisJ CQlpZiAoYW1kZ3B1X2FjcGlfcGNpZV9wZXJmb3JtYW5jZV9yZXF1ZXN0KGFkZXYsIFBDSUVfUEVS Rl9SRVFfUEVDSV9HRU4zLCBmYWxzZSkgPT0gMCkKKwkJCQlicmVhazsKKwkJCXNpX3BpLT5mb3Jj ZV9wY2llX2dlbiA9IEFNREdQVV9QQ0lFX0dFTjI7CisJCQlpZiAoY3VycmVudF9saW5rX3NwZWVk ID09IEFNREdQVV9QQ0lFX0dFTjIpCisJCQkJYnJlYWs7CisJCWNhc2UgQU1ER1BVX1BDSUVfR0VO MjoKKwkJCWlmIChhbWRncHVfYWNwaV9wY2llX3BlcmZvcm1hbmNlX3JlcXVlc3QoYWRldiwgUENJ RV9QRVJGX1JFUV9QRUNJX0dFTjIsIGZhbHNlKSA9PSAwKQorCQkJCWJyZWFrOworI2VuZGlmCisJ CWRlZmF1bHQ6CisJCQlzaV9waS0+Zm9yY2VfcGNpZV9nZW4gPSBzaV9nZXRfY3VycmVudF9wY2ll X3NwZWVkKGFkZXYpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlpZiAodGFyZ2V0X2xp bmtfc3BlZWQgPCBjdXJyZW50X2xpbmtfc3BlZWQpCisJCQlzaV9waS0+cHNwcF9ub3RpZnlfcmVx dWlyZWQgPSB0cnVlOworCX0KK30KKworc3RhdGljIHZvaWQgc2lfbm90aWZ5X2xpbmtfc3BlZWRf Y2hhbmdlX2FmdGVyX3N0YXRlX2NoYW5nZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJ CQkJCQkgICBzdHJ1Y3QgYW1kZ3B1X3BzICphbWRncHVfbmV3X3N0YXRlLAorCQkJCQkJCSAgIHN0 cnVjdCBhbWRncHVfcHMgKmFtZGdwdV9jdXJyZW50X3N0YXRlKQoreworCXN0cnVjdCBzaV9wb3dl cl9pbmZvICpzaV9waSA9IHNpX2dldF9waShhZGV2KTsKKwllbnVtIGFtZGdwdV9wY2llX2dlbiB0 YXJnZXRfbGlua19zcGVlZCA9IHNpX2dldF9tYXhpbXVtX2xpbmtfc3BlZWQoYWRldiwgYW1kZ3B1 X25ld19zdGF0ZSk7CisJdTggcmVxdWVzdDsKKworCWlmIChzaV9waS0+cHNwcF9ub3RpZnlfcmVx dWlyZWQpIHsKKwkJaWYgKHRhcmdldF9saW5rX3NwZWVkID09IEFNREdQVV9QQ0lFX0dFTjMpCisJ CQlyZXF1ZXN0ID0gUENJRV9QRVJGX1JFUV9QRUNJX0dFTjM7CisJCWVsc2UgaWYgKHRhcmdldF9s aW5rX3NwZWVkID09IEFNREdQVV9QQ0lFX0dFTjIpCisJCQlyZXF1ZXN0ID0gUENJRV9QRVJGX1JF UV9QRUNJX0dFTjI7CisJCWVsc2UKKwkJCXJlcXVlc3QgPSBQQ0lFX1BFUkZfUkVRX1BFQ0lfR0VO MTsKKworCQlpZiAoKHJlcXVlc3QgPT0gUENJRV9QRVJGX1JFUV9QRUNJX0dFTjEpICYmCisJCSAg ICAoc2lfZ2V0X2N1cnJlbnRfcGNpZV9zcGVlZChhZGV2KSA+IDApKQorCQkJcmV0dXJuOworCisj aWYgZGVmaW5lZChDT05GSUdfQUNQSSkKKwkJYW1kZ3B1X2FjcGlfcGNpZV9wZXJmb3JtYW5jZV9y ZXF1ZXN0KGFkZXYsIHJlcXVlc3QsIGZhbHNlKTsKKyNlbmRpZgorCX0KK30KKworI2lmIDAKK3N0 YXRpYyBpbnQgc2lfZHNfcmVxdWVzdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCSBi b29sIGRzX3N0YXR1c19vbiwgdTMyIGNvdW50X3dyaXRlKQoreworCXN0cnVjdCBldmVyZ3JlZW5f cG93ZXJfaW5mbyAqZWdfcGkgPSBldmVyZ3JlZW5fZ2V0X3BpKGFkZXYpOworCisJaWYgKGVnX3Bp LT5zY2xrX2RlZXBfc2xlZXApIHsKKwkJaWYgKGRzX3N0YXR1c19vbikKKwkJCXJldHVybiAoc2lf c2VuZF9tc2dfdG9fc21jKGFkZXYsIFBQU01DX01TR19DYW5jZWxUaHJvdHRsZU9WUkRTQ0xLRFMp ID09CisJCQkJUFBTTUNfUmVzdWx0X09LKSA/CisJCQkJMCA6IC1FSU5WQUw7CisJCWVsc2UKKwkJ CXJldHVybiAoc2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsIFBQU01DX01TR19UaHJvdHRsZU9WUkRT Q0xLRFMpID09CisJCQkJUFBTTUNfUmVzdWx0X09LKSA/IDAgOiAtRUlOVkFMOworCX0KKwlyZXR1 cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzaV9zZXRfbWF4X2N1X3ZhbHVlKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBzaV9wb3dlcl9pbmZvICpzaV9waSA9 IHNpX2dldF9waShhZGV2KTsKKworCWlmIChhZGV2LT5hc2ljX3R5cGUgPT0gQ0hJUF9WRVJERSkg eworCQlzd2l0Y2ggKGFkZXYtPnBkZXYtPmRldmljZSkgeworCQljYXNlIDB4NjgyMDoKKwkJY2Fz ZSAweDY4MjU6CisJCWNhc2UgMHg2ODIxOgorCQljYXNlIDB4NjgyMzoKKwkJY2FzZSAweDY4Mjc6 CisJCQlzaV9waS0+bWF4X2N1ID0gMTA7CisJCQlicmVhazsKKwkJY2FzZSAweDY4MkQ6CisJCWNh c2UgMHg2ODI0OgorCQljYXNlIDB4NjgyRjoKKwkJY2FzZSAweDY4MjY6CisJCQlzaV9waS0+bWF4 X2N1ID0gODsKKwkJCWJyZWFrOworCQljYXNlIDB4NjgyODoKKwkJY2FzZSAweDY4MzA6CisJCWNh c2UgMHg2ODMxOgorCQljYXNlIDB4NjgzODoKKwkJY2FzZSAweDY4Mzk6CisJCWNhc2UgMHg2ODNE OgorCQkJc2lfcGktPm1heF9jdSA9IDEwOworCQkJYnJlYWs7CisJCWNhc2UgMHg2ODNCOgorCQlj YXNlIDB4NjgzRjoKKwkJY2FzZSAweDY4Mjk6CisJCQlzaV9waS0+bWF4X2N1ID0gODsKKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJc2lfcGktPm1heF9jdSA9IDA7CisJCQlicmVhazsKKwkJfQor CX0gZWxzZSB7CisJCXNpX3BpLT5tYXhfY3UgPSAwOworCX0KK30KKworc3RhdGljIGludCBzaV9w YXRjaF9zaW5nbGVfZGVwZW5kZW5jeV90YWJsZV9iYXNlZF9vbl9sZWFrYWdlKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LAorCQkJCQkJCSAgICAgc3RydWN0IGFtZGdwdV9jbG9ja192b2x0YWdl X2RlcGVuZGVuY3lfdGFibGUgKnRhYmxlKQoreworCXUzMiBpOworCWludCBqOworCXUxNiBsZWFr YWdlX3ZvbHRhZ2U7CisKKwlpZiAodGFibGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRhYmxlLT5j b3VudDsgaSsrKSB7CisJCQlzd2l0Y2ggKHNpX2dldF9sZWFrYWdlX3ZvbHRhZ2VfZnJvbV9sZWFr YWdlX2luZGV4KGFkZXYsCisJCQkJCQkJCQkgIHRhYmxlLT5lbnRyaWVzW2ldLnYsCisJCQkJCQkJ CQkgICZsZWFrYWdlX3ZvbHRhZ2UpKSB7CisJCQljYXNlIDA6CisJCQkJdGFibGUtPmVudHJpZXNb aV0udiA9IGxlYWthZ2Vfdm9sdGFnZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgLUVBR0FJTjoKKwkJ CQlyZXR1cm4gLUVJTlZBTDsKKwkJCWNhc2UgLUVJTlZBTDoKKwkJCWRlZmF1bHQ6CisJCQkJYnJl YWs7CisJCQl9CisJCX0KKworCQlmb3IgKGogPSAodGFibGUtPmNvdW50IC0gMik7IGogPj0gMDsg ai0tKSB7CisJCQl0YWJsZS0+ZW50cmllc1tqXS52ID0gKHRhYmxlLT5lbnRyaWVzW2pdLnYgPD0g dGFibGUtPmVudHJpZXNbaiArIDFdLnYpID8KKwkJCQl0YWJsZS0+ZW50cmllc1tqXS52IDogdGFi bGUtPmVudHJpZXNbaiArIDFdLnY7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgc2lfcGF0Y2hfZGVwZW5kZW5jeV90YWJsZXNfYmFzZWRfb25fbGVha2FnZShzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IHNpX3BhdGNoX3Np bmdsZV9kZXBlbmRlbmN5X3RhYmxlX2Jhc2VkX29uX2xlYWthZ2UoYWRldiwKKwkJCQkJCQkJJmFk ZXYtPnBtLmRwbS5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX3NjbGspOworCXJldCA9IHNp X3BhdGNoX3NpbmdsZV9kZXBlbmRlbmN5X3RhYmxlX2Jhc2VkX29uX2xlYWthZ2UoYWRldiwKKwkJ CQkJCQkJJmFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX21jbGspOwor CXJldCA9IHNpX3BhdGNoX3NpbmdsZV9kZXBlbmRlbmN5X3RhYmxlX2Jhc2VkX29uX2xlYWthZ2Uo YWRldiwKKwkJCQkJCQkJJmFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmRkY2lfZGVwZW5kZW5jeV9v bl9tY2xrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzaV9zZXRfcGNpZV9sYW5l X3dpZHRoX2luX3NtYyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJICBzdHJ1Y3Qg YW1kZ3B1X3BzICphbWRncHVfbmV3X3N0YXRlLAorCQkJCQkgIHN0cnVjdCBhbWRncHVfcHMgKmFt ZGdwdV9jdXJyZW50X3N0YXRlKQoreworCXUzMiBsYW5lX3dpZHRoOworCXUzMiBuZXdfbGFuZV93 aWR0aCA9CisJCShhbWRncHVfbmV3X3N0YXRlLT5jYXBzICYgQVRPTV9QUExJQl9QQ0lFX0xJTktf V0lEVEhfTUFTSykgPj4gQVRPTV9QUExJQl9QQ0lFX0xJTktfV0lEVEhfU0hJRlQ7CisJdTMyIGN1 cnJlbnRfbGFuZV93aWR0aCA9CisJCShhbWRncHVfY3VycmVudF9zdGF0ZS0+Y2FwcyAmIEFUT01f UFBMSUJfUENJRV9MSU5LX1dJRFRIX01BU0spID4+IEFUT01fUFBMSUJfUENJRV9MSU5LX1dJRFRI X1NISUZUOworCisJaWYgKG5ld19sYW5lX3dpZHRoICE9IGN1cnJlbnRfbGFuZV93aWR0aCkgewor CQlhbWRncHVfc2V0X3BjaWVfbGFuZXMoYWRldiwgbmV3X2xhbmVfd2lkdGgpOworCQlsYW5lX3dp ZHRoID0gYW1kZ3B1X2dldF9wY2llX2xhbmVzKGFkZXYpOworCQlzaV93cml0ZV9zbWNfc29mdF9y ZWdpc3RlcihhZGV2LCBTSV9TTUNfU09GVF9SRUdJU1RFUl9ub25fdWx2X3BjaWVfbGlua193aWR0 aCwgbGFuZV93aWR0aCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzaV9kcG1fc2V0dXBfYXNpYyhz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlzaV9yZWFkX2Nsb2NrX3JlZ2lzdGVycyhh ZGV2KTsKKwlzaV9lbmFibGVfYWNwaV9wb3dlcl9tYW5hZ2VtZW50KGFkZXYpOworfQorCitzdGF0 aWMgaW50IHNpX3RoZXJtYWxfZW5hYmxlX2FsZXJ0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LAorCQkJCSAgIGJvb2wgZW5hYmxlKQoreworCXUzMiB0aGVybWFsX2ludCA9IFJSRUczMihDR19U SEVSTUFMX0lOVCk7CisKKwlpZiAoZW5hYmxlKSB7CisJCVBQU01DX1Jlc3VsdCByZXN1bHQ7CisK KwkJdGhlcm1hbF9pbnQgJj0gfihUSEVSTV9JTlRfTUFTS19ISUdIIHwgVEhFUk1fSU5UX01BU0tf TE9XKTsKKwkJV1JFRzMyKENHX1RIRVJNQUxfSU5ULCB0aGVybWFsX2ludCk7CisJCXJlc3VsdCA9 IHNpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LCBQUFNNQ19NU0dfRW5hYmxlVGhlcm1hbEludGVycnVw dCk7CisJCWlmIChyZXN1bHQgIT0gUFBTTUNfUmVzdWx0X09LKSB7CisJCQlEUk1fREVCVUdfS01T KCJDb3VsZCBub3QgZW5hYmxlIHRoZXJtYWwgaW50ZXJydXB0cy5cbiIpOworCQkJcmV0dXJuIC1F SU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQl0aGVybWFsX2ludCB8PSBUSEVSTV9JTlRfTUFTS19I SUdIIHwgVEhFUk1fSU5UX01BU0tfTE9XOworCQlXUkVHMzIoQ0dfVEhFUk1BTF9JTlQsIHRoZXJt YWxfaW50KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaV90aGVybWFsX3Nl dF90ZW1wZXJhdHVyZV9yYW5nZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJICAg IGludCBtaW5fdGVtcCwgaW50IG1heF90ZW1wKQoreworCWludCBsb3dfdGVtcCA9IDAgKiAxMDAw OworCWludCBoaWdoX3RlbXAgPSAyNTUgKiAxMDAwOworCisJaWYgKGxvd190ZW1wIDwgbWluX3Rl bXApCisJCWxvd190ZW1wID0gbWluX3RlbXA7CisJaWYgKGhpZ2hfdGVtcCA+IG1heF90ZW1wKQor CQloaWdoX3RlbXAgPSBtYXhfdGVtcDsKKwlpZiAoaGlnaF90ZW1wIDwgbG93X3RlbXApIHsKKwkJ RFJNX0VSUk9SKCJpbnZhbGlkIHRoZXJtYWwgcmFuZ2U6ICVkIC0gJWRcbiIsIGxvd190ZW1wLCBo aWdoX3RlbXApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlXUkVHMzJfUChDR19USEVSTUFM X0lOVCwgRElHX1RIRVJNX0lOVEgoaGlnaF90ZW1wIC8gMTAwMCksIH5ESUdfVEhFUk1fSU5USF9N QVNLKTsKKwlXUkVHMzJfUChDR19USEVSTUFMX0lOVCwgRElHX1RIRVJNX0lOVEwobG93X3RlbXAg LyAxMDAwKSwgfkRJR19USEVSTV9JTlRMX01BU0spOworCVdSRUczMl9QKENHX1RIRVJNQUxfQ1RS TCwgRElHX1RIRVJNX0RQTShoaWdoX3RlbXAgLyAxMDAwKSwgfkRJR19USEVSTV9EUE1fTUFTSyk7 CisKKwlhZGV2LT5wbS5kcG0udGhlcm1hbC5taW5fdGVtcCA9IGxvd190ZW1wOworCWFkZXYtPnBt LmRwbS50aGVybWFsLm1heF90ZW1wID0gaGlnaF90ZW1wOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB2b2lkIHNpX2Zhbl9jdHJsX3NldF9zdGF0aWNfbW9kZShzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwgdTMyIG1vZGUpCit7CisJc3RydWN0IHNpX3Bvd2VyX2luZm8gKnNpX3BpID0gc2lf Z2V0X3BpKGFkZXYpOworCXUzMiB0bXA7CisKKwlpZiAoc2lfcGktPmZhbl9jdHJsX2lzX2luX2Rl ZmF1bHRfbW9kZSkgeworCQl0bXAgPSAoUlJFRzMyKENHX0ZET19DVFJMMikgJiBGRE9fUFdNX01P REVfTUFTSykgPj4gRkRPX1BXTV9NT0RFX1NISUZUOworCQlzaV9waS0+ZmFuX2N0cmxfZGVmYXVs dF9tb2RlID0gdG1wOworCQl0bXAgPSAoUlJFRzMyKENHX0ZET19DVFJMMikgJiBUTUlOX01BU0sp ID4+IFRNSU5fU0hJRlQ7CisJCXNpX3BpLT50X21pbiA9IHRtcDsKKwkJc2lfcGktPmZhbl9jdHJs X2lzX2luX2RlZmF1bHRfbW9kZSA9IGZhbHNlOworCX0KKworCXRtcCA9IFJSRUczMihDR19GRE9f Q1RSTDIpICYgflRNSU5fTUFTSzsKKwl0bXAgfD0gVE1JTigwKTsKKwlXUkVHMzIoQ0dfRkRPX0NU UkwyLCB0bXApOworCisJdG1wID0gUlJFRzMyKENHX0ZET19DVFJMMikgJiB+RkRPX1BXTV9NT0RF X01BU0s7CisJdG1wIHw9IEZET19QV01fTU9ERShtb2RlKTsKKwlXUkVHMzIoQ0dfRkRPX0NUUkwy LCB0bXApOworfQorCitzdGF0aWMgaW50IHNpX3RoZXJtYWxfc2V0dXBfZmFuX3RhYmxlKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBzaV9wb3dlcl9pbmZvICpzaV9waSA9 IHNpX2dldF9waShhZGV2KTsKKwlQUF9TSXNsYW5kc19GYW5UYWJsZSBmYW5fdGFibGUgPSB7IEZE T19NT0RFX0hBUkRXQVJFIH07CisJdTMyIGR1dHkxMDA7CisJdTMyIHRfZGlmZjEsIHRfZGlmZjIs IHB3bV9kaWZmMSwgcHdtX2RpZmYyOworCXUxNiBmZG9fbWluLCBzbG9wZTEsIHNsb3BlMjsKKwl1 MzIgcmVmZXJlbmNlX2Nsb2NrLCB0bXA7CisJaW50IHJldDsKKwl1NjQgdG1wNjQ7CisKKwlpZiAo IXNpX3BpLT5mYW5fdGFibGVfc3RhcnQpIHsKKwkJYWRldi0+cG0uZHBtLmZhbi51Y29kZV9mYW5f Y29udHJvbCA9IGZhbHNlOworCQlyZXR1cm4gMDsKKwl9CisKKwlkdXR5MTAwID0gKFJSRUczMihD R19GRE9fQ1RSTDEpICYgRk1BWF9EVVRZMTAwX01BU0spID4+IEZNQVhfRFVUWTEwMF9TSElGVDsK KworCWlmIChkdXR5MTAwID09IDApIHsKKwkJYWRldi0+cG0uZHBtLmZhbi51Y29kZV9mYW5fY29u dHJvbCA9IGZhbHNlOworCQlyZXR1cm4gMDsKKwl9CisKKwl0bXA2NCA9ICh1NjQpYWRldi0+cG0u ZHBtLmZhbi5wd21fbWluICogZHV0eTEwMDsKKwlkb19kaXYodG1wNjQsIDEwMDAwKTsKKwlmZG9f bWluID0gKHUxNil0bXA2NDsKKworCXRfZGlmZjEgPSBhZGV2LT5wbS5kcG0uZmFuLnRfbWVkIC0g YWRldi0+cG0uZHBtLmZhbi50X21pbjsKKwl0X2RpZmYyID0gYWRldi0+cG0uZHBtLmZhbi50X2hp Z2ggLSBhZGV2LT5wbS5kcG0uZmFuLnRfbWVkOworCisJcHdtX2RpZmYxID0gYWRldi0+cG0uZHBt LmZhbi5wd21fbWVkIC0gYWRldi0+cG0uZHBtLmZhbi5wd21fbWluOworCXB3bV9kaWZmMiA9IGFk ZXYtPnBtLmRwbS5mYW4ucHdtX2hpZ2ggLSBhZGV2LT5wbS5kcG0uZmFuLnB3bV9tZWQ7CisKKwlz bG9wZTEgPSAodTE2KSgoNTAgKyAoKDE2ICogZHV0eTEwMCAqIHB3bV9kaWZmMSkgLyB0X2RpZmYx KSkgLyAxMDApOworCXNsb3BlMiA9ICh1MTYpKCg1MCArICgoMTYgKiBkdXR5MTAwICogcHdtX2Rp ZmYyKSAvIHRfZGlmZjIpKSAvIDEwMCk7CisKKwlmYW5fdGFibGUudGVtcF9taW4gPSBjcHVfdG9f YmUxNigoNTAgKyBhZGV2LT5wbS5kcG0uZmFuLnRfbWluKSAvIDEwMCk7CisJZmFuX3RhYmxlLnRl bXBfbWVkID0gY3B1X3RvX2JlMTYoKDUwICsgYWRldi0+cG0uZHBtLmZhbi50X21lZCkgLyAxMDAp OworCWZhbl90YWJsZS50ZW1wX21heCA9IGNwdV90b19iZTE2KCg1MCArIGFkZXYtPnBtLmRwbS5m YW4udF9tYXgpIC8gMTAwKTsKKworCWZhbl90YWJsZS5zbG9wZTEgPSBjcHVfdG9fYmUxNihzbG9w ZTEpOworCWZhbl90YWJsZS5zbG9wZTIgPSBjcHVfdG9fYmUxNihzbG9wZTIpOworCisJZmFuX3Rh YmxlLmZkb19taW4gPSBjcHVfdG9fYmUxNihmZG9fbWluKTsKKworCWZhbl90YWJsZS5oeXNfZG93 biA9IGNwdV90b19iZTE2KGFkZXYtPnBtLmRwbS5mYW4udF9oeXN0KTsKKworCWZhbl90YWJsZS5o eXNfdXAgPSBjcHVfdG9fYmUxNigxKTsKKworCWZhbl90YWJsZS5oeXNfc2xvcGUgPSBjcHVfdG9f YmUxNigxKTsKKworCWZhbl90YWJsZS50ZW1wX3Jlc3BfbGltID0gY3B1X3RvX2JlMTYoNSk7CisK KwlyZWZlcmVuY2VfY2xvY2sgPSBhbWRncHVfYXNpY19nZXRfeGNsayhhZGV2KTsKKworCWZhbl90 YWJsZS5yZWZyZXNoX3BlcmlvZCA9IGNwdV90b19iZTMyKChhZGV2LT5wbS5kcG0uZmFuLmN5Y2xl X2RlbGF5ICoKKwkJCQkJCXJlZmVyZW5jZV9jbG9jaykgLyAxNjAwKTsKKworCWZhbl90YWJsZS5m ZG9fbWF4ID0gY3B1X3RvX2JlMTYoKHUxNilkdXR5MTAwKTsKKworCXRtcCA9IChSUkVHMzIoQ0df TVVMVF9USEVSTUFMX0NUUkwpICYgVEVNUF9TRUxfTUFTSykgPj4gVEVNUF9TRUxfU0hJRlQ7CisJ ZmFuX3RhYmxlLnRlbXBfc3JjID0gKHVpbnQ4X3QpdG1wOworCisJcmV0ID0gc2lfY29weV9ieXRl c190b19zbWMoYWRldiwKKwkJCQkgICBzaV9waS0+ZmFuX3RhYmxlX3N0YXJ0LAorCQkJCSAgICh1 OCAqKSgmZmFuX3RhYmxlKSwKKwkJCQkgICBzaXplb2YoZmFuX3RhYmxlKSwKKwkJCQkgICBzaV9w aS0+c3JhbV9lbmQpOworCisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb2Fk IGZhbiB0YWJsZSB0byB0aGUgU01DLiIpOworCQlhZGV2LT5wbS5kcG0uZmFuLnVjb2RlX2Zhbl9j b250cm9sID0gZmFsc2U7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2lfZmFu X2N0cmxfc3RhcnRfc21jX2Zhbl9jb250cm9sKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQor eworCXN0cnVjdCBzaV9wb3dlcl9pbmZvICpzaV9waSA9IHNpX2dldF9waShhZGV2KTsKKwlQUFNN Q19SZXN1bHQgcmV0OworCisJcmV0ID0gc2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsIFBQU01DX1N0 YXJ0RmFuQ29udHJvbCk7CisJaWYgKHJldCA9PSBQUFNNQ19SZXN1bHRfT0spIHsKKwkJc2lfcGkt PmZhbl9pc19jb250cm9sbGVkX2J5X3NtYyA9IHRydWU7CisJCXJldHVybiAwOworCX0gZWxzZSB7 CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGludCBzaV9mYW5fY3RybF9zdG9w X3NtY19mYW5fY29udHJvbChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlzdHJ1Y3Qg c2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRfcGkoYWRldik7CisJUFBTTUNfUmVzdWx0IHJl dDsKKworCXJldCA9IHNpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LCBQUFNNQ19TdG9wRmFuQ29udHJv bCk7CisKKwlpZiAocmV0ID09IFBQU01DX1Jlc3VsdF9PSykgeworCQlzaV9waS0+ZmFuX2lzX2Nv bnRyb2xsZWRfYnlfc21jID0gZmFsc2U7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVy biAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGludCBzaV9kcG1fZ2V0X2Zhbl9zcGVlZF9wZXJj ZW50KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCSAgICAgIHUzMiAqc3BlZWQpCit7 CisJdTMyIGR1dHksIGR1dHkxMDA7CisJdTY0IHRtcDY0OworCisJaWYgKGFkZXYtPnBtLm5vX2Zh bikKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlkdXR5MTAwID0gKFJSRUczMihDR19GRE9fQ1RSTDEp ICYgRk1BWF9EVVRZMTAwX01BU0spID4+IEZNQVhfRFVUWTEwMF9TSElGVDsKKwlkdXR5ID0gKFJS RUczMihDR19USEVSTUFMX1NUQVRVUykgJiBGRE9fUFdNX0RVVFlfTUFTSykgPj4gRkRPX1BXTV9E VVRZX1NISUZUOworCisJaWYgKGR1dHkxMDAgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0 bXA2NCA9ICh1NjQpZHV0eSAqIDEwMDsKKwlkb19kaXYodG1wNjQsIGR1dHkxMDApOworCSpzcGVl ZCA9ICh1MzIpdG1wNjQ7CisKKwlpZiAoKnNwZWVkID4gMTAwKQorCQkqc3BlZWQgPSAxMDA7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaV9kcG1fc2V0X2Zhbl9zcGVlZF9wZXJjZW50 KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCSAgICAgIHUzMiBzcGVlZCkKK3sKKwlz dHJ1Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRfcGkoYWRldik7CisJdTMyIHRtcDsK Kwl1MzIgZHV0eSwgZHV0eTEwMDsKKwl1NjQgdG1wNjQ7CisKKwlpZiAoYWRldi0+cG0ubm9fZmFu KQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWlmIChzaV9waS0+ZmFuX2lzX2NvbnRyb2xsZWRfYnlf c21jKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzcGVlZCA+IDEwMCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlkdXR5MTAwID0gKFJSRUczMihDR19GRE9fQ1RSTDEpICYgRk1BWF9EVVRZMTAw X01BU0spID4+IEZNQVhfRFVUWTEwMF9TSElGVDsKKworCWlmIChkdXR5MTAwID09IDApCisJCXJl dHVybiAtRUlOVkFMOworCisJdG1wNjQgPSAodTY0KXNwZWVkICogZHV0eTEwMDsKKwlkb19kaXYo dG1wNjQsIDEwMCk7CisJZHV0eSA9ICh1MzIpdG1wNjQ7CisKKwl0bXAgPSBSUkVHMzIoQ0dfRkRP X0NUUkwwKSAmIH5GRE9fU1RBVElDX0RVVFlfTUFTSzsKKwl0bXAgfD0gRkRPX1NUQVRJQ19EVVRZ KGR1dHkpOworCVdSRUczMihDR19GRE9fQ1RSTDAsIHRtcCk7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgc2lfZHBtX3NldF9mYW5fY29udHJvbF9tb2RlKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LCB1MzIgbW9kZSkKK3sKKwlpZiAobW9kZSkgeworCQkvKiBzdG9wIGF1dG8tbWFu YWdlICovCisJCWlmIChhZGV2LT5wbS5kcG0uZmFuLnVjb2RlX2Zhbl9jb250cm9sKQorCQkJc2lf ZmFuX2N0cmxfc3RvcF9zbWNfZmFuX2NvbnRyb2woYWRldik7CisJCXNpX2Zhbl9jdHJsX3NldF9z dGF0aWNfbW9kZShhZGV2LCBtb2RlKTsKKwl9IGVsc2UgeworCQkvKiByZXN0YXJ0IGF1dG8tbWFu YWdlICovCisJCWlmIChhZGV2LT5wbS5kcG0uZmFuLnVjb2RlX2Zhbl9jb250cm9sKQorCQkJc2lf dGhlcm1hbF9zdGFydF9zbWNfZmFuX2NvbnRyb2woYWRldik7CisJCWVsc2UKKwkJCXNpX2Zhbl9j dHJsX3NldF9kZWZhdWx0X21vZGUoYWRldik7CisJfQorfQorCitzdGF0aWMgdTMyIHNpX2RwbV9n ZXRfZmFuX2NvbnRyb2xfbW9kZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlzdHJ1 Y3Qgc2lfcG93ZXJfaW5mbyAqc2lfcGkgPSBzaV9nZXRfcGkoYWRldik7CisJdTMyIHRtcDsKKwor CWlmIChzaV9waS0+ZmFuX2lzX2NvbnRyb2xsZWRfYnlfc21jKQorCQlyZXR1cm4gMDsKKworCXRt cCA9IFJSRUczMihDR19GRE9fQ1RSTDIpICYgRkRPX1BXTV9NT0RFX01BU0s7CisJcmV0dXJuICh0 bXAgPj4gRkRPX1BXTV9NT0RFX1NISUZUKTsKK30KKworI2lmIDAKK3N0YXRpYyBpbnQgc2lfZmFu X2N0cmxfZ2V0X2Zhbl9zcGVlZF9ycG0oc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJ CSB1MzIgKnNwZWVkKQoreworCXUzMiB0YWNoX3BlcmlvZDsKKwl1MzIgeGNsayA9IGFtZGdwdV9h c2ljX2dldF94Y2xrKGFkZXYpOworCisJaWYgKGFkZXYtPnBtLm5vX2ZhbikKKwkJcmV0dXJuIC1F Tk9FTlQ7CisKKwlpZiAoYWRldi0+cG0uZmFuX3B1bHNlc19wZXJfcmV2b2x1dGlvbiA9PSAwKQor CQlyZXR1cm4gLUVOT0VOVDsKKworCXRhY2hfcGVyaW9kID0gKFJSRUczMihDR19UQUNIX1NUQVRV UykgJiBUQUNIX1BFUklPRF9NQVNLKSA+PiBUQUNIX1BFUklPRF9TSElGVDsKKwlpZiAodGFjaF9w ZXJpb2QgPT0gMCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwkqc3BlZWQgPSA2MCAqIHhjbGsgKiAx MDAwMCAvIHRhY2hfcGVyaW9kOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2lfZmFu X2N0cmxfc2V0X2Zhbl9zcGVlZF9ycG0oc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJ CSB1MzIgc3BlZWQpCit7CisJdTMyIHRhY2hfcGVyaW9kLCB0bXA7CisJdTMyIHhjbGsgPSBhbWRn cHVfYXNpY19nZXRfeGNsayhhZGV2KTsKKworCWlmIChhZGV2LT5wbS5ub19mYW4pCisJCXJldHVy biAtRU5PRU5UOworCisJaWYgKGFkZXYtPnBtLmZhbl9wdWxzZXNfcGVyX3Jldm9sdXRpb24gPT0g MCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlpZiAoKHNwZWVkIDwgYWRldi0+cG0uZmFuX21pbl9y cG0pIHx8CisJICAgIChzcGVlZCA+IGFkZXYtPnBtLmZhbl9tYXhfcnBtKSkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlpZiAoYWRldi0+cG0uZHBtLmZhbi51Y29kZV9mYW5fY29udHJvbCkKKwkJc2lf ZmFuX2N0cmxfc3RvcF9zbWNfZmFuX2NvbnRyb2woYWRldik7CisKKwl0YWNoX3BlcmlvZCA9IDYw ICogeGNsayAqIDEwMDAwIC8gKDggKiBzcGVlZCk7CisJdG1wID0gUlJFRzMyKENHX1RBQ0hfQ1RS TCkgJiB+VEFSR0VUX1BFUklPRF9NQVNLOworCXRtcCB8PSBUQVJHRVRfUEVSSU9EKHRhY2hfcGVy aW9kKTsKKwlXUkVHMzIoQ0dfVEFDSF9DVFJMLCB0bXApOworCisJc2lfZmFuX2N0cmxfc2V0X3N0 YXRpY19tb2RlKGFkZXYsIEZET19QV01fTU9ERV9TVEFUSUNfUlBNKTsKKworCXJldHVybiAwOwor fQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHNpX2Zhbl9jdHJsX3NldF9kZWZhdWx0X21vZGUoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IHNpX3Bvd2VyX2luZm8gKnNpX3Bp ID0gc2lfZ2V0X3BpKGFkZXYpOworCXUzMiB0bXA7CisKKwlpZiAoIXNpX3BpLT5mYW5fY3RybF9p c19pbl9kZWZhdWx0X21vZGUpIHsKKwkJdG1wID0gUlJFRzMyKENHX0ZET19DVFJMMikgJiB+RkRP X1BXTV9NT0RFX01BU0s7CisJCXRtcCB8PSBGRE9fUFdNX01PREUoc2lfcGktPmZhbl9jdHJsX2Rl ZmF1bHRfbW9kZSk7CisJCVdSRUczMihDR19GRE9fQ1RSTDIsIHRtcCk7CisKKwkJdG1wID0gUlJF RzMyKENHX0ZET19DVFJMMikgJiB+VE1JTl9NQVNLOworCQl0bXAgfD0gVE1JTihzaV9waS0+dF9t aW4pOworCQlXUkVHMzIoQ0dfRkRPX0NUUkwyLCB0bXApOworCQlzaV9waS0+ZmFuX2N0cmxfaXNf aW5fZGVmYXVsdF9tb2RlID0gdHJ1ZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNpX3RoZXJtYWxf c3RhcnRfc21jX2Zhbl9jb250cm9sKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCWlm IChhZGV2LT5wbS5kcG0uZmFuLnVjb2RlX2Zhbl9jb250cm9sKSB7CisJCXNpX2Zhbl9jdHJsX3N0 YXJ0X3NtY19mYW5fY29udHJvbChhZGV2KTsKKwkJc2lfZmFuX2N0cmxfc2V0X3N0YXRpY19tb2Rl KGFkZXYsIEZET19QV01fTU9ERV9TVEFUSUMpOworCX0KK30KKworc3RhdGljIHZvaWQgc2lfdGhl cm1hbF9pbml0aWFsaXplKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXUzMiB0bXA7 CisKKwlpZiAoYWRldi0+cG0uZmFuX3B1bHNlc19wZXJfcmV2b2x1dGlvbikgeworCQl0bXAgPSBS UkVHMzIoQ0dfVEFDSF9DVFJMKSAmIH5FREdFX1BFUl9SRVZfTUFTSzsKKwkJdG1wIHw9IEVER0Vf UEVSX1JFVihhZGV2LT5wbS5mYW5fcHVsc2VzX3Blcl9yZXZvbHV0aW9uIC0xKTsKKwkJV1JFRzMy KENHX1RBQ0hfQ1RSTCwgdG1wKTsKKwl9CisKKwl0bXAgPSBSUkVHMzIoQ0dfRkRPX0NUUkwyKSAm IH5UQUNIX1BXTV9SRVNQX1JBVEVfTUFTSzsKKwl0bXAgfD0gVEFDSF9QV01fUkVTUF9SQVRFKDB4 MjgpOworCVdSRUczMihDR19GRE9fQ1RSTDIsIHRtcCk7Cit9CisKK3N0YXRpYyBpbnQgc2lfdGhl cm1hbF9zdGFydF90aGVybWFsX2NvbnRyb2xsZXIoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYp Cit7CisJaW50IHJldDsKKworCXNpX3RoZXJtYWxfaW5pdGlhbGl6ZShhZGV2KTsKKwlyZXQgPSBz aV90aGVybWFsX3NldF90ZW1wZXJhdHVyZV9yYW5nZShhZGV2LCBSNjAwX1RFTVBfUkFOR0VfTUlO LCBSNjAwX1RFTVBfUkFOR0VfTUFYKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9 IHNpX3RoZXJtYWxfZW5hYmxlX2FsZXJ0KGFkZXYsIHRydWUpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisJaWYgKGFkZXYtPnBtLmRwbS5mYW4udWNvZGVfZmFuX2NvbnRyb2wpIHsKKwkJcmV0 ID0gc2lfaGFsdF9zbWMoYWRldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlyZXQg PSBzaV90aGVybWFsX3NldHVwX2Zhbl90YWJsZShhZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVy biByZXQ7CisJCXJldCA9IHNpX3Jlc3VtZV9zbWMoYWRldik7CisJCWlmIChyZXQpCisJCQlyZXR1 cm4gcmV0OworCQlzaV90aGVybWFsX3N0YXJ0X3NtY19mYW5fY29udHJvbChhZGV2KTsKKwl9CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2lfdGhlcm1hbF9zdG9wX3RoZXJtYWxfY29u dHJvbGxlcihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlpZiAoIWFkZXYtPnBtLm5v X2ZhbikgeworCQlzaV9mYW5fY3RybF9zZXRfZGVmYXVsdF9tb2RlKGFkZXYpOworCQlzaV9mYW5f Y3RybF9zdG9wX3NtY19mYW5fY29udHJvbChhZGV2KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2lf ZHBtX2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlzdHJ1Y3QgcnY3eHhf cG93ZXJfaW5mbyAqcGkgPSBydjc3MF9nZXRfcGkoYWRldik7CisJc3RydWN0IGV2ZXJncmVlbl9w b3dlcl9pbmZvICplZ19waSA9IGV2ZXJncmVlbl9nZXRfcGkoYWRldik7CisJc3RydWN0IHNpX3Bv d2VyX2luZm8gKnNpX3BpID0gc2lfZ2V0X3BpKGFkZXYpOworCXN0cnVjdCBhbWRncHVfcHMgKmJv b3RfcHMgPSBhZGV2LT5wbS5kcG0uYm9vdF9wczsKKwlpbnQgcmV0OworCisJaWYgKHNpX2lzX3Nt Y19ydW5uaW5nKGFkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocGktPnZvbHRhZ2VfY29u dHJvbCB8fCBzaV9waS0+dm9sdGFnZV9jb250cm9sX3N2aTIpCisJCXNpX2VuYWJsZV92b2x0YWdl X2NvbnRyb2woYWRldiwgdHJ1ZSk7CisJaWYgKHBpLT5tdmRkX2NvbnRyb2wpCisJCXNpX2dldF9t dmRkX2NvbmZpZ3VyYXRpb24oYWRldik7CisJaWYgKHBpLT52b2x0YWdlX2NvbnRyb2wgfHwgc2lf cGktPnZvbHRhZ2VfY29udHJvbF9zdmkyKSB7CisJCXJldCA9IHNpX2NvbnN0cnVjdF92b2x0YWdl X3RhYmxlcyhhZGV2KTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJzaV9jb25zdHJ1Y3Rf dm9sdGFnZV90YWJsZXMgZmFpbGVkXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJaWYg KGVnX3BpLT5keW5hbWljX2FjX3RpbWluZykgeworCQlyZXQgPSBzaV9pbml0aWFsaXplX21jX3Jl Z190YWJsZShhZGV2KTsKKwkJaWYgKHJldCkKKwkJCWVnX3BpLT5keW5hbWljX2FjX3RpbWluZyA9 IGZhbHNlOworCX0KKwlpZiAocGktPmR5bmFtaWNfc3MpCisJCXNpX2VuYWJsZV9zcHJlYWRfc3Bl Y3RydW0oYWRldiwgdHJ1ZSk7CisJaWYgKHBpLT50aGVybWFsX3Byb3RlY3Rpb24pCisJCXNpX2Vu YWJsZV90aGVybWFsX3Byb3RlY3Rpb24oYWRldiwgdHJ1ZSk7CisJc2lfc2V0dXBfYnNwKGFkZXYp OworCXNpX3Byb2dyYW1fZ2l0KGFkZXYpOworCXNpX3Byb2dyYW1fdHAoYWRldik7CisJc2lfcHJv Z3JhbV90cHAoYWRldik7CisJc2lfcHJvZ3JhbV9zc3RwKGFkZXYpOworCXNpX2VuYWJsZV9kaXNw bGF5X2dhcChhZGV2KTsKKwlzaV9wcm9ncmFtX3ZjKGFkZXYpOworCXJldCA9IHNpX3VwbG9hZF9m aXJtd2FyZShhZGV2KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigic2lfdXBsb2FkX2Zpcm13 YXJlIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IHNpX3Byb2Nlc3NfZmly bXdhcmVfaGVhZGVyKGFkZXYpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJzaV9wcm9jZXNz X2Zpcm13YXJlX2hlYWRlciBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBz aV9pbml0aWFsX3N3aXRjaF9mcm9tX2FyYl9mMF90b19mMShhZGV2KTsKKwlpZiAocmV0KSB7CisJ CURSTV9FUlJPUigic2lfaW5pdGlhbF9zd2l0Y2hfZnJvbV9hcmJfZjBfdG9fZjEgZmFpbGVkXG4i KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gc2lfaW5pdF9zbWNfdGFibGUoYWRldik7CisJ aWYgKHJldCkgeworCQlEUk1fRVJST1IoInNpX2luaXRfc21jX3RhYmxlIGZhaWxlZFxuIik7CisJ CXJldHVybiByZXQ7CisJfQorCXJldCA9IHNpX2luaXRfc21jX3NwbGxfdGFibGUoYWRldik7CisJ aWYgKHJldCkgeworCQlEUk1fRVJST1IoInNpX2luaXRfc21jX3NwbGxfdGFibGUgZmFpbGVkXG4i KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gc2lfaW5pdF9hcmJfdGFibGVfaW5kZXgoYWRl dik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoInNpX2luaXRfYXJiX3RhYmxlX2luZGV4IGZh aWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCWlmIChlZ19waS0+ZHluYW1pY19hY190aW1p bmcpIHsKKwkJcmV0ID0gc2lfcG9wdWxhdGVfbWNfcmVnX3RhYmxlKGFkZXYsIGJvb3RfcHMpOwor CQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoInNpX3BvcHVsYXRlX21jX3JlZ190YWJsZSBmYWls ZWRcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXQgPSBzaV9pbml0aWFsaXplX3Nt Y19jYWNfdGFibGVzKGFkZXYpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJzaV9pbml0aWFs aXplX3NtY19jYWNfdGFibGVzIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9 IHNpX2luaXRpYWxpemVfaGFyZHdhcmVfY2FjX21hbmFnZXIoYWRldik7CisJaWYgKHJldCkgewor CQlEUk1fRVJST1IoInNpX2luaXRpYWxpemVfaGFyZHdhcmVfY2FjX21hbmFnZXIgZmFpbGVkXG4i KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gc2lfaW5pdGlhbGl6ZV9zbWNfZHRlX3RhYmxl cyhhZGV2KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigic2lfaW5pdGlhbGl6ZV9zbWNfZHRl X3RhYmxlcyBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBzaV9wb3B1bGF0 ZV9zbWNfdGRwX2xpbWl0cyhhZGV2LCBib290X3BzKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJP Uigic2lfcG9wdWxhdGVfc21jX3RkcF9saW1pdHMgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisJcmV0ID0gc2lfcG9wdWxhdGVfc21jX3RkcF9saW1pdHNfMihhZGV2LCBib290X3BzKTsK KwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigic2lfcG9wdWxhdGVfc21jX3RkcF9saW1pdHNfMiBm YWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlzaV9wcm9ncmFtX3Jlc3BvbnNlX3RpbWVz KGFkZXYpOworCXNpX3Byb2dyYW1fZHNfcmVnaXN0ZXJzKGFkZXYpOworCXNpX2RwbV9zdGFydF9z bWMoYWRldik7CisJcmV0ID0gc2lfbm90aWZ5X3NtY19kaXNwbGF5X2NoYW5nZShhZGV2LCBmYWxz ZSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoInNpX25vdGlmeV9zbWNfZGlzcGxheV9jaGFu Z2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJc2lfZW5hYmxlX3NjbGtfY29udHJv bChhZGV2LCB0cnVlKTsKKwlzaV9zdGFydF9kcG0oYWRldik7CisKKwlzaV9lbmFibGVfYXV0b190 aHJvdHRsZV9zb3VyY2UoYWRldiwgQU1ER1BVX0RQTV9BVVRPX1RIUk9UVExFX1NSQ19USEVSTUFM LCB0cnVlKTsKKworCXNpX3RoZXJtYWxfc3RhcnRfdGhlcm1hbF9jb250cm9sbGVyKGFkZXYpOwor CisJbmlfdXBkYXRlX2N1cnJlbnRfcHMoYWRldiwgYm9vdF9wcyk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBzaV9zZXRfdGVtcGVyYXR1cmVfcmFuZ2Uoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IHNpX3RoZXJtYWxfZW5hYmxlX2FsZXJ0 KGFkZXYsIGZhbHNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IHNpX3RoZXJt YWxfc2V0X3RlbXBlcmF0dXJlX3JhbmdlKGFkZXYsIFI2MDBfVEVNUF9SQU5HRV9NSU4sIFI2MDBf VEVNUF9SQU5HRV9NQVgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gc2lfdGhl cm1hbF9lbmFibGVfYWxlcnQoYWRldiwgdHJ1ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNpX2RwbV9kaXNhYmxlKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBydjd4eF9wb3dlcl9pbmZvICpwaSA9IHJ2 NzcwX2dldF9waShhZGV2KTsKKwlzdHJ1Y3QgYW1kZ3B1X3BzICpib290X3BzID0gYWRldi0+cG0u ZHBtLmJvb3RfcHM7CisKKwlpZiAoIXNpX2lzX3NtY19ydW5uaW5nKGFkZXYpKQorCQlyZXR1cm47 CisJc2lfdGhlcm1hbF9zdG9wX3RoZXJtYWxfY29udHJvbGxlcihhZGV2KTsKKwlzaV9kaXNhYmxl X3VsdihhZGV2KTsKKwlzaV9jbGVhcl92YyhhZGV2KTsKKwlpZiAocGktPnRoZXJtYWxfcHJvdGVj dGlvbikKKwkJc2lfZW5hYmxlX3RoZXJtYWxfcHJvdGVjdGlvbihhZGV2LCBmYWxzZSk7CisJc2lf ZW5hYmxlX3Bvd2VyX2NvbnRhaW5tZW50KGFkZXYsIGJvb3RfcHMsIGZhbHNlKTsKKwlzaV9lbmFi bGVfc21jX2NhYyhhZGV2LCBib290X3BzLCBmYWxzZSk7CisJc2lfZW5hYmxlX3NwcmVhZF9zcGVj dHJ1bShhZGV2LCBmYWxzZSk7CisJc2lfZW5hYmxlX2F1dG9fdGhyb3R0bGVfc291cmNlKGFkZXYs IEFNREdQVV9EUE1fQVVUT19USFJPVFRMRV9TUkNfVEhFUk1BTCwgZmFsc2UpOworCXNpX3N0b3Bf ZHBtKGFkZXYpOworCXNpX3Jlc2V0X3RvX2RlZmF1bHQoYWRldik7CisJc2lfZHBtX3N0b3Bfc21j KGFkZXYpOworCXNpX2ZvcmNlX3N3aXRjaF90b19hcmJfZjAoYWRldik7CisKKwluaV91cGRhdGVf Y3VycmVudF9wcyhhZGV2LCBib290X3BzKTsKK30KKworc3RhdGljIGludCBzaV9kcG1fcHJlX3Nl dF9wb3dlcl9zdGF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlzdHJ1Y3QgZXZl cmdyZWVuX3Bvd2VyX2luZm8gKmVnX3BpID0gZXZlcmdyZWVuX2dldF9waShhZGV2KTsKKwlzdHJ1 Y3QgYW1kZ3B1X3BzIHJlcXVlc3RlZF9wcyA9ICphZGV2LT5wbS5kcG0ucmVxdWVzdGVkX3BzOwor CXN0cnVjdCBhbWRncHVfcHMgKm5ld19wcyA9ICZyZXF1ZXN0ZWRfcHM7CisKKwluaV91cGRhdGVf cmVxdWVzdGVkX3BzKGFkZXYsIG5ld19wcyk7CisKKwlzaV9hcHBseV9zdGF0ZV9hZGp1c3RfcnVs ZXMoYWRldiwgJmVnX3BpLT5yZXF1ZXN0ZWRfcnBzKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHNpX3Bvd2VyX2NvbnRyb2xfc2V0X2xldmVsKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQoreworCXN0cnVjdCBhbWRncHVfcHMgKm5ld19wcyA9IGFkZXYtPnBtLmRwbS5yZXF1ZXN0 ZWRfcHM7CisJaW50IHJldDsKKworCXJldCA9IHNpX3Jlc3RyaWN0X3BlcmZvcm1hbmNlX2xldmVs c19iZWZvcmVfc3dpdGNoKGFkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0g c2lfaGFsdF9zbWMoYWRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBzaV9w b3B1bGF0ZV9zbWNfdGRwX2xpbWl0cyhhZGV2LCBuZXdfcHMpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisJcmV0ID0gc2lfcG9wdWxhdGVfc21jX3RkcF9saW1pdHNfMihhZGV2LCBuZXdfcHMp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gc2lfcmVzdW1lX3NtYyhhZGV2KTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IHNpX3NldF9zd19zdGF0ZShhZGV2KTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNp X2RwbV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJc3Ry dWN0IGV2ZXJncmVlbl9wb3dlcl9pbmZvICplZ19waSA9IGV2ZXJncmVlbl9nZXRfcGkoYWRldik7 CisJc3RydWN0IGFtZGdwdV9wcyAqbmV3X3BzID0gJmVnX3BpLT5yZXF1ZXN0ZWRfcnBzOworCXN0 cnVjdCBhbWRncHVfcHMgKm9sZF9wcyA9ICZlZ19waS0+Y3VycmVudF9ycHM7CisJaW50IHJldDsK KworCXJldCA9IHNpX2Rpc2FibGVfdWx2KGFkZXYpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9S KCJzaV9kaXNhYmxlX3VsdiBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBz aV9yZXN0cmljdF9wZXJmb3JtYW5jZV9sZXZlbHNfYmVmb3JlX3N3aXRjaChhZGV2KTsKKwlpZiAo cmV0KSB7CisJCURSTV9FUlJPUigic2lfcmVzdHJpY3RfcGVyZm9ybWFuY2VfbGV2ZWxzX2JlZm9y ZV9zd2l0Y2ggZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKGVnX3BpLT5wY2ll X3BlcmZvcm1hbmNlX3JlcXVlc3QpCisJCXNpX3JlcXVlc3RfbGlua19zcGVlZF9jaGFuZ2VfYmVm b3JlX3N0YXRlX2NoYW5nZShhZGV2LCBuZXdfcHMsIG9sZF9wcyk7CisJbmlfc2V0X3V2ZF9jbG9j a19iZWZvcmVfc2V0X2VuZ19jbG9jayhhZGV2LCBuZXdfcHMsIG9sZF9wcyk7CisJcmV0ID0gc2lf ZW5hYmxlX3Bvd2VyX2NvbnRhaW5tZW50KGFkZXYsIG5ld19wcywgZmFsc2UpOworCWlmIChyZXQp IHsKKwkJRFJNX0VSUk9SKCJzaV9lbmFibGVfcG93ZXJfY29udGFpbm1lbnQgZmFpbGVkXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gc2lfZW5hYmxlX3NtY19jYWMoYWRldiwgbmV3X3Bz LCBmYWxzZSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoInNpX2VuYWJsZV9zbWNfY2FjIGZh aWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IHNpX2hhbHRfc21jKGFkZXYpOwor CWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJzaV9oYWx0X3NtYyBmYWlsZWRcbiIpOworCQlyZXR1 cm4gcmV0OworCX0KKwlyZXQgPSBzaV91cGxvYWRfc3dfc3RhdGUoYWRldiwgbmV3X3BzKTsKKwlp ZiAocmV0KSB7CisJCURSTV9FUlJPUigic2lfdXBsb2FkX3N3X3N0YXRlIGZhaWxlZFxuIik7CisJ CXJldHVybiByZXQ7CisJfQorCXJldCA9IHNpX3VwbG9hZF9zbWNfZGF0YShhZGV2KTsKKwlpZiAo cmV0KSB7CisJCURSTV9FUlJPUigic2lfdXBsb2FkX3NtY19kYXRhIGZhaWxlZFxuIik7CisJCXJl dHVybiByZXQ7CisJfQorCXJldCA9IHNpX3VwbG9hZF91bHZfc3RhdGUoYWRldik7CisJaWYgKHJl dCkgeworCQlEUk1fRVJST1IoInNpX3VwbG9hZF91bHZfc3RhdGUgZmFpbGVkXG4iKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisJaWYgKGVnX3BpLT5keW5hbWljX2FjX3RpbWluZykgeworCQlyZXQgPSBz aV91cGxvYWRfbWNfcmVnX3RhYmxlKGFkZXYsIG5ld19wcyk7CisJCWlmIChyZXQpIHsKKwkJCURS TV9FUlJPUigic2lfdXBsb2FkX21jX3JlZ190YWJsZSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIHJl dDsKKwkJfQorCX0KKwlyZXQgPSBzaV9wcm9ncmFtX21lbW9yeV90aW1pbmdfcGFyYW1ldGVycyhh ZGV2LCBuZXdfcHMpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJzaV9wcm9ncmFtX21lbW9y eV90aW1pbmdfcGFyYW1ldGVycyBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlzaV9z ZXRfcGNpZV9sYW5lX3dpZHRoX2luX3NtYyhhZGV2LCBuZXdfcHMsIG9sZF9wcyk7CisKKwlyZXQg PSBzaV9yZXN1bWVfc21jKGFkZXYpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJzaV9yZXN1 bWVfc21jIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IHNpX3NldF9zd19z dGF0ZShhZGV2KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigic2lfc2V0X3N3X3N0YXRlIGZh aWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCW5pX3NldF91dmRfY2xvY2tfYWZ0ZXJfc2V0 X2VuZ19jbG9jayhhZGV2LCBuZXdfcHMsIG9sZF9wcyk7CisJaWYgKGVnX3BpLT5wY2llX3BlcmZv cm1hbmNlX3JlcXVlc3QpCisJCXNpX25vdGlmeV9saW5rX3NwZWVkX2NoYW5nZV9hZnRlcl9zdGF0 ZV9jaGFuZ2UoYWRldiwgbmV3X3BzLCBvbGRfcHMpOworCXJldCA9IHNpX3NldF9wb3dlcl9zdGF0 ZV9jb25kaXRpb25hbGx5X2VuYWJsZV91bHYoYWRldiwgbmV3X3BzKTsKKwlpZiAocmV0KSB7CisJ CURSTV9FUlJPUigic2lfc2V0X3Bvd2VyX3N0YXRlX2NvbmRpdGlvbmFsbHlfZW5hYmxlX3VsdiBm YWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBzaV9lbmFibGVfc21jX2NhYyhh ZGV2LCBuZXdfcHMsIHRydWUpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJzaV9lbmFibGVf c21jX2NhYyBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBzaV9lbmFibGVf cG93ZXJfY29udGFpbm1lbnQoYWRldiwgbmV3X3BzLCB0cnVlKTsKKwlpZiAocmV0KSB7CisJCURS TV9FUlJPUigic2lfZW5hYmxlX3Bvd2VyX2NvbnRhaW5tZW50IGZhaWxlZFxuIik7CisJCXJldHVy biByZXQ7CisJfQorCisJcmV0ID0gc2lfcG93ZXJfY29udHJvbF9zZXRfbGV2ZWwoYWRldik7CisJ aWYgKHJldCkgeworCQlEUk1fRVJST1IoInNpX3Bvd2VyX2NvbnRyb2xfc2V0X2xldmVsIGZhaWxl ZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IHNpX2RwbV9wb3N0X3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK K3sKKwlzdHJ1Y3QgZXZlcmdyZWVuX3Bvd2VyX2luZm8gKmVnX3BpID0gZXZlcmdyZWVuX2dldF9w aShhZGV2KTsKKwlzdHJ1Y3QgYW1kZ3B1X3BzICpuZXdfcHMgPSAmZWdfcGktPnJlcXVlc3RlZF9y cHM7CisKKwluaV91cGRhdGVfY3VycmVudF9wcyhhZGV2LCBuZXdfcHMpOworfQorCisjaWYgMAor dm9pZCBzaV9kcG1fcmVzZXRfYXNpYyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlz aV9yZXN0cmljdF9wZXJmb3JtYW5jZV9sZXZlbHNfYmVmb3JlX3N3aXRjaChhZGV2KTsKKwlzaV9k aXNhYmxlX3VsdihhZGV2KTsKKwlzaV9zZXRfYm9vdF9zdGF0ZShhZGV2KTsKK30KKyNlbmRpZgor CitzdGF0aWMgdm9pZCBzaV9kcG1fZGlzcGxheV9jb25maWd1cmF0aW9uX2NoYW5nZWQoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJc2lfcHJvZ3JhbV9kaXNwbGF5X2dhcChhZGV2KTsK K30KKworCitzdGF0aWMgdm9pZCBzaV9wYXJzZV9wcGxpYl9ub25fY2xvY2tfaW5mbyhzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJICBzdHJ1Y3QgYW1kZ3B1X3BzICpycHMsCisJCQkJ CSAgc3RydWN0IF9BVE9NX1BQTElCX05PTkNMT0NLX0lORk8gKm5vbl9jbG9ja19pbmZvLAorCQkJ CQkgIHU4IHRhYmxlX3JldikKK3sKKwlycHMtPmNhcHMgPSBsZTMyX3RvX2NwdShub25fY2xvY2tf aW5mby0+dWxDYXBzQW5kU2V0dGluZ3MpOworCXJwcy0+Y2xhc3MgPSBsZTE2X3RvX2NwdShub25f Y2xvY2tfaW5mby0+dXNDbGFzc2lmaWNhdGlvbik7CisJcnBzLT5jbGFzczIgPSBsZTE2X3RvX2Nw dShub25fY2xvY2tfaW5mby0+dXNDbGFzc2lmaWNhdGlvbjIpOworCisJaWYgKEFUT01fUFBMSUJf Tk9OQ0xPQ0tJTkZPX1ZFUjEgPCB0YWJsZV9yZXYpIHsKKwkJcnBzLT52Y2xrID0gbGUzMl90b19j cHUobm9uX2Nsb2NrX2luZm8tPnVsVkNMSyk7CisJCXJwcy0+ZGNsayA9IGxlMzJfdG9fY3B1KG5v bl9jbG9ja19pbmZvLT51bERDTEspOworCX0gZWxzZSBpZiAocjYwMF9pc191dmRfc3RhdGUocnBz LT5jbGFzcywgcnBzLT5jbGFzczIpKSB7CisJCXJwcy0+dmNsayA9IFJWNzcwX0RFRkFVTFRfVkNM S19GUkVROworCQlycHMtPmRjbGsgPSBSVjc3MF9ERUZBVUxUX0RDTEtfRlJFUTsKKwl9IGVsc2Ug eworCQlycHMtPnZjbGsgPSAwOworCQlycHMtPmRjbGsgPSAwOworCX0KKworCWlmIChycHMtPmNs YXNzICYgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9CT09UKQorCQlhZGV2LT5wbS5kcG0uYm9v dF9wcyA9IHJwczsKKwlpZiAocnBzLT5jbGFzcyAmIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05f VVZEU1RBVEUpCisJCWFkZXYtPnBtLmRwbS51dmRfcHMgPSBycHM7Cit9CisKK3N0YXRpYyB2b2lk IHNpX3BhcnNlX3BwbGliX2Nsb2NrX2luZm8oc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJ CQkJICAgICAgc3RydWN0IGFtZGdwdV9wcyAqcnBzLCBpbnQgaW5kZXgsCisJCQkJICAgICAgdW5p b24gcHBsaWJfY2xvY2tfaW5mbyAqY2xvY2tfaW5mbykKK3sKKwlzdHJ1Y3QgcnY3eHhfcG93ZXJf aW5mbyAqcGkgPSBydjc3MF9nZXRfcGkoYWRldik7CisJc3RydWN0IGV2ZXJncmVlbl9wb3dlcl9p bmZvICplZ19waSA9IGV2ZXJncmVlbl9nZXRfcGkoYWRldik7CisJc3RydWN0IHNpX3Bvd2VyX2lu Zm8gKnNpX3BpID0gc2lfZ2V0X3BpKGFkZXYpOworCXN0cnVjdCAgc2lfcHMgKnBzID0gc2lfZ2V0 X3BzKHJwcyk7CisJdTE2IGxlYWthZ2Vfdm9sdGFnZTsKKwlzdHJ1Y3QgcnY3eHhfcGwgKnBsID0g JnBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaW5kZXhdOworCWludCByZXQ7CisKKwlwcy0+cGVyZm9y bWFuY2VfbGV2ZWxfY291bnQgPSBpbmRleCArIDE7CisKKwlwbC0+c2NsayA9IGxlMTZfdG9fY3B1 KGNsb2NrX2luZm8tPnNpLnVzRW5naW5lQ2xvY2tMb3cpOworCXBsLT5zY2xrIHw9IGNsb2NrX2lu Zm8tPnNpLnVjRW5naW5lQ2xvY2tIaWdoIDw8IDE2OworCXBsLT5tY2xrID0gbGUxNl90b19jcHUo Y2xvY2tfaW5mby0+c2kudXNNZW1vcnlDbG9ja0xvdyk7CisJcGwtPm1jbGsgfD0gY2xvY2tfaW5m by0+c2kudWNNZW1vcnlDbG9ja0hpZ2ggPDwgMTY7CisKKwlwbC0+dmRkYyA9IGxlMTZfdG9fY3B1 KGNsb2NrX2luZm8tPnNpLnVzVkREQyk7CisJcGwtPnZkZGNpID0gbGUxNl90b19jcHUoY2xvY2tf aW5mby0+c2kudXNWRERDSSk7CisJcGwtPmZsYWdzID0gbGUzMl90b19jcHUoY2xvY2tfaW5mby0+ c2kudWxGbGFncyk7CisJcGwtPnBjaWVfZ2VuID0gcjYwMF9nZXRfcGNpZV9nZW5fc3VwcG9ydChh ZGV2LAorCQkJCQkJIHNpX3BpLT5zeXNfcGNpZV9tYXNrLAorCQkJCQkJIHNpX3BpLT5ib290X3Bj aWVfZ2VuLAorCQkJCQkJIGNsb2NrX2luZm8tPnNpLnVjUENJRUdlbik7CisKKwkvKiBwYXRjaCB1 cCB2ZGRjIGlmIG5lY2Vzc2FyeSAqLworCXJldCA9IHNpX2dldF9sZWFrYWdlX3ZvbHRhZ2VfZnJv bV9sZWFrYWdlX2luZGV4KGFkZXYsIHBsLT52ZGRjLAorCQkJCQkJCSZsZWFrYWdlX3ZvbHRhZ2Up OworCWlmIChyZXQgPT0gMCkKKwkJcGwtPnZkZGMgPSBsZWFrYWdlX3ZvbHRhZ2U7CisKKwlpZiAo cnBzLT5jbGFzcyAmIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fQUNQSSkgeworCQlwaS0+YWNw aV92ZGRjID0gcGwtPnZkZGM7CisJCWVnX3BpLT5hY3BpX3ZkZGNpID0gcGwtPnZkZGNpOworCQlz aV9waS0+YWNwaV9wY2llX2dlbiA9IHBsLT5wY2llX2dlbjsKKwl9CisKKwlpZiAoKHJwcy0+Y2xh c3MyICYgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTjJfVUxWKSAmJgorCSAgICBpbmRleCA9PSAw KSB7CisJCS8qIFhYWCBkaXNhYmxlIGZvciBBMCB0YWhpdGkgKi8KKwkJc2lfcGktPnVsdi5zdXBw b3J0ZWQgPSBmYWxzZTsKKwkJc2lfcGktPnVsdi5wbCA9ICpwbDsKKwkJc2lfcGktPnVsdi5vbmVf cGNpZV9sYW5lX2luX3VsdiA9IGZhbHNlOworCQlzaV9waS0+dWx2LnZvbHRfY2hhbmdlX2RlbGF5 ID0gU0lTTEFORFNfVUxWVk9MVEFHRUNIQU5HRURFTEFZX0RGTFQ7CisJCXNpX3BpLT51bHYuY2df dWx2X3BhcmFtZXRlciA9IFNJU0xBTkRTX0NHVUxWUEFSQU1FVEVSX0RGTFQ7CisJCXNpX3BpLT51 bHYuY2dfdWx2X2NvbnRyb2wgPSBTSVNMQU5EU19DR1VMVkNPTlRST0xfREZMVDsKKwl9CisKKwlp ZiAocGktPm1pbl92ZGRjX2luX3RhYmxlID4gcGwtPnZkZGMpCisJCXBpLT5taW5fdmRkY19pbl90 YWJsZSA9IHBsLT52ZGRjOworCisJaWYgKHBpLT5tYXhfdmRkY19pbl90YWJsZSA8IHBsLT52ZGRj KQorCQlwaS0+bWF4X3ZkZGNfaW5fdGFibGUgPSBwbC0+dmRkYzsKKworCS8qIHBhdGNoIHVwIGJv b3Qgc3RhdGUgKi8KKwlpZiAocnBzLT5jbGFzcyAmIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05f Qk9PVCkgeworCQl1MTYgdmRkYywgdmRkY2ksIG12ZGQ7CisJCWFtZGdwdV9hdG9tYmlvc19nZXRf ZGVmYXVsdF92b2x0YWdlcyhhZGV2LCAmdmRkYywgJnZkZGNpLCAmbXZkZCk7CisJCXBsLT5tY2xr ID0gYWRldi0+Y2xvY2suZGVmYXVsdF9tY2xrOworCQlwbC0+c2NsayA9IGFkZXYtPmNsb2NrLmRl ZmF1bHRfc2NsazsKKwkJcGwtPnZkZGMgPSB2ZGRjOworCQlwbC0+dmRkY2kgPSB2ZGRjaTsKKwkJ c2lfcGktPm12ZGRfYm9vdHVwX3ZhbHVlID0gbXZkZDsKKwl9CisKKwlpZiAoKHJwcy0+Y2xhc3Mg JiBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX01BU0spID09CisJICAgIEFUT01fUFBMSUJf Q0xBU1NJRklDQVRJT05fVUlfUEVSRk9STUFOQ0UpIHsKKwkJYWRldi0+cG0uZHBtLmR5bl9zdGF0 ZS5tYXhfY2xvY2tfdm9sdGFnZV9vbl9hYy5zY2xrID0gcGwtPnNjbGs7CisJCWFkZXYtPnBtLmRw bS5keW5fc3RhdGUubWF4X2Nsb2NrX3ZvbHRhZ2Vfb25fYWMubWNsayA9IHBsLT5tY2xrOworCQlh ZGV2LT5wbS5kcG0uZHluX3N0YXRlLm1heF9jbG9ja192b2x0YWdlX29uX2FjLnZkZGMgPSBwbC0+ dmRkYzsKKwkJYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS5tYXhfY2xvY2tfdm9sdGFnZV9vbl9hYy52 ZGRjaSA9IHBsLT52ZGRjaTsKKwl9Cit9CisKK3VuaW9uIHBwbGliX3Bvd2VyX3N0YXRlIHsKKyAg ICAgICAgc3RydWN0IF9BVE9NX1BQTElCX1NUQVRFIHYxOworICAgICAgICBzdHJ1Y3QgX0FUT01f UFBMSUJfU1RBVEVfVjIgdjI7Cit9OworCitzdGF0aWMgaW50IHNpX3BhcnNlX3Bvd2VyX3RhYmxl KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBhbWRncHVfbW9kZV9pbmZv ICptb2RlX2luZm8gPSAmYWRldi0+bW9kZV9pbmZvOworCXN0cnVjdCBfQVRPTV9QUExJQl9OT05D TE9DS19JTkZPICpub25fY2xvY2tfaW5mbzsKKwl1bmlvbiBwcGxpYl9wb3dlcl9zdGF0ZSAqcG93 ZXJfc3RhdGU7CisJaW50IGksIGosIGssIG5vbl9jbG9ja19hcnJheV9pbmRleCwgY2xvY2tfYXJy YXlfaW5kZXg7CisJdW5pb24gcHBsaWJfY2xvY2tfaW5mbyAqY2xvY2tfaW5mbzsKKwlzdHJ1Y3Qg X1N0YXRlQXJyYXkgKnN0YXRlX2FycmF5OworCXN0cnVjdCBfQ2xvY2tJbmZvQXJyYXkgKmNsb2Nr X2luZm9fYXJyYXk7CisJc3RydWN0IF9Ob25DbG9ja0luZm9BcnJheSAqbm9uX2Nsb2NrX2luZm9f YXJyYXk7CisJdW5pb24gcG93ZXJfaW5mbyAqcG93ZXJfaW5mbzsKKwlpbnQgaW5kZXggPSBHZXRJ bmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBQb3dlclBsYXlJbmZvKTsKKyAgICAgICAgdTE2IGRh dGFfb2Zmc2V0OworCXU4IGZyZXYsIGNyZXY7CisJdTggKnBvd2VyX3N0YXRlX29mZnNldDsKKwlz dHJ1Y3QgIHNpX3BzICpwczsKKworCWlmICghYW1kZ3B1X2F0b21fcGFyc2VfZGF0YV9oZWFkZXIo bW9kZV9pbmZvLT5hdG9tX2NvbnRleHQsIGluZGV4LCBOVUxMLAorCQkJCSAgICZmcmV2LCAmY3Jl diwgJmRhdGFfb2Zmc2V0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcG93ZXJfaW5mbyA9ICh1bmlv biBwb3dlcl9pbmZvICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZz ZXQpOworCisJc3RhdGVfYXJyYXkgPSAoc3RydWN0IF9TdGF0ZUFycmF5ICopCisJCShtb2RlX2lu Zm8tPmF0b21fY29udGV4dC0+YmlvcyArIGRhdGFfb2Zmc2V0ICsKKwkJIGxlMTZfdG9fY3B1KHBv d2VyX2luZm8tPnBwbGliLnVzU3RhdGVBcnJheU9mZnNldCkpOworCWNsb2NrX2luZm9fYXJyYXkg PSAoc3RydWN0IF9DbG9ja0luZm9BcnJheSAqKQorCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQt PmJpb3MgKyBkYXRhX29mZnNldCArCisJCSBsZTE2X3RvX2NwdShwb3dlcl9pbmZvLT5wcGxpYi51 c0Nsb2NrSW5mb0FycmF5T2Zmc2V0KSk7CisJbm9uX2Nsb2NrX2luZm9fYXJyYXkgPSAoc3RydWN0 IF9Ob25DbG9ja0luZm9BcnJheSAqKQorCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3Mg KyBkYXRhX29mZnNldCArCisJCSBsZTE2X3RvX2NwdShwb3dlcl9pbmZvLT5wcGxpYi51c05vbkNs b2NrSW5mb0FycmF5T2Zmc2V0KSk7CisKKwlhZGV2LT5wbS5kcG0ucHMgPSBremFsbG9jKHNpemVv ZihzdHJ1Y3QgYW1kZ3B1X3BzKSAqCisJCQkJICBzdGF0ZV9hcnJheS0+dWNOdW1FbnRyaWVzLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWFkZXYtPnBtLmRwbS5wcykKKwkJcmV0dXJuIC1FTk9NRU07CisJ cG93ZXJfc3RhdGVfb2Zmc2V0ID0gKHU4ICopc3RhdGVfYXJyYXktPnN0YXRlczsKKwlmb3IgKGkg PSAwOyBpIDwgc3RhdGVfYXJyYXktPnVjTnVtRW50cmllczsgaSsrKSB7CisJCXU4ICppZHg7CisJ CXBvd2VyX3N0YXRlID0gKHVuaW9uIHBwbGliX3Bvd2VyX3N0YXRlICopcG93ZXJfc3RhdGVfb2Zm c2V0OworCQlub25fY2xvY2tfYXJyYXlfaW5kZXggPSBwb3dlcl9zdGF0ZS0+djIubm9uQ2xvY2tJ bmZvSW5kZXg7CisJCW5vbl9jbG9ja19pbmZvID0gKHN0cnVjdCBfQVRPTV9QUExJQl9OT05DTE9D S19JTkZPICopCisJCQkmbm9uX2Nsb2NrX2luZm9fYXJyYXktPm5vbkNsb2NrSW5mb1tub25fY2xv Y2tfYXJyYXlfaW5kZXhdOworCQlwcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCAgc2lfcHMpLCBH RlBfS0VSTkVMKTsKKwkJaWYgKHBzID09IE5VTEwpIHsKKwkJCWtmcmVlKGFkZXYtPnBtLmRwbS5w cyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlhZGV2LT5wbS5kcG0ucHNbaV0ucHNfcHJp diA9IHBzOworCQlzaV9wYXJzZV9wcGxpYl9ub25fY2xvY2tfaW5mbyhhZGV2LCAmYWRldi0+cG0u ZHBtLnBzW2ldLAorCQkJCQkgICAgICBub25fY2xvY2tfaW5mbywKKwkJCQkJICAgICAgbm9uX2Ns b2NrX2luZm9fYXJyYXktPnVjRW50cnlTaXplKTsKKwkJayA9IDA7CisJCWlkeCA9ICh1OCAqKSZw b3dlcl9zdGF0ZS0+djIuY2xvY2tJbmZvSW5kZXhbMF07CisJCWZvciAoaiA9IDA7IGogPCBwb3dl cl9zdGF0ZS0+djIudWNOdW1EUE1MZXZlbHM7IGorKykgeworCQkJY2xvY2tfYXJyYXlfaW5kZXgg PSBpZHhbal07CisJCQlpZiAoY2xvY2tfYXJyYXlfaW5kZXggPj0gY2xvY2tfaW5mb19hcnJheS0+ dWNOdW1FbnRyaWVzKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGsgPj0gU0lTTEFORFNfTUFYX0hB UkRXQVJFX1BPV0VSTEVWRUxTKQorCQkJCWJyZWFrOworCQkJY2xvY2tfaW5mbyA9ICh1bmlvbiBw cGxpYl9jbG9ja19pbmZvICopCisJCQkJKCh1OCAqKSZjbG9ja19pbmZvX2FycmF5LT5jbG9ja0lu Zm9bMF0gKworCQkJCSAoY2xvY2tfYXJyYXlfaW5kZXggKiBjbG9ja19pbmZvX2FycmF5LT51Y0Vu dHJ5U2l6ZSkpOworCQkJc2lfcGFyc2VfcHBsaWJfY2xvY2tfaW5mbyhhZGV2LAorCQkJCQkJICAm YWRldi0+cG0uZHBtLnBzW2ldLCBrLAorCQkJCQkJICBjbG9ja19pbmZvKTsKKwkJCWsrKzsKKwkJ fQorCQlwb3dlcl9zdGF0ZV9vZmZzZXQgKz0gMiArIHBvd2VyX3N0YXRlLT52Mi51Y051bURQTUxl dmVsczsKKwl9CisJYWRldi0+cG0uZHBtLm51bV9wcyA9IHN0YXRlX2FycmF5LT51Y051bUVudHJp ZXM7CisKKwkvKiBmaWxsIGluIHRoZSB2Y2UgcG93ZXIgc3RhdGVzICovCisJZm9yIChpID0gMDsg aSA8IEFNREdQVV9NQVhfVkNFX0xFVkVMUzsgaSsrKSB7CisJCXUzMiBzY2xrLCBtY2xrOworCQlj bG9ja19hcnJheV9pbmRleCA9IGFkZXYtPnBtLmRwbS52Y2Vfc3RhdGVzW2ldLmNsa19pZHg7CisJ CWNsb2NrX2luZm8gPSAodW5pb24gcHBsaWJfY2xvY2tfaW5mbyAqKQorCQkJJmNsb2NrX2luZm9f YXJyYXktPmNsb2NrSW5mb1tjbG9ja19hcnJheV9pbmRleCAqIGNsb2NrX2luZm9fYXJyYXktPnVj RW50cnlTaXplXTsKKwkJc2NsayA9IGxlMTZfdG9fY3B1KGNsb2NrX2luZm8tPnNpLnVzRW5naW5l Q2xvY2tMb3cpOworCQlzY2xrIHw9IGNsb2NrX2luZm8tPnNpLnVjRW5naW5lQ2xvY2tIaWdoIDw8 IDE2OworCQltY2xrID0gbGUxNl90b19jcHUoY2xvY2tfaW5mby0+c2kudXNNZW1vcnlDbG9ja0xv dyk7CisJCW1jbGsgfD0gY2xvY2tfaW5mby0+c2kudWNNZW1vcnlDbG9ja0hpZ2ggPDwgMTY7CisJ CWFkZXYtPnBtLmRwbS52Y2Vfc3RhdGVzW2ldLnNjbGsgPSBzY2xrOworCQlhZGV2LT5wbS5kcG0u dmNlX3N0YXRlc1tpXS5tY2xrID0gbWNsazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBzaV9kcG1faW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlzdHJ1Y3Qg cnY3eHhfcG93ZXJfaW5mbyAqcGk7CisJc3RydWN0IGV2ZXJncmVlbl9wb3dlcl9pbmZvICplZ19w aTsKKwlzdHJ1Y3QgbmlfcG93ZXJfaW5mbyAqbmlfcGk7CisJc3RydWN0IHNpX3Bvd2VyX2luZm8g KnNpX3BpOworCXN0cnVjdCBhdG9tX2Nsb2NrX2RpdmlkZXJzIGRpdmlkZXJzOworCWludCByZXQ7 CisJdTMyIG1hc2s7CisKKwlzaV9waSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaV9wb3dlcl9p bmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNpX3BpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVN OworCWFkZXYtPnBtLmRwbS5wcml2ID0gc2lfcGk7CisJbmlfcGkgPSAmc2lfcGktPm5pOworCWVn X3BpID0gJm5pX3BpLT5lZzsKKwlwaSA9ICZlZ19waS0+cnY3eHg7CisKKwlyZXQgPSBkcm1fcGNp ZV9nZXRfc3BlZWRfY2FwX21hc2soYWRldi0+ZGRldiwgJm1hc2spOworCWlmIChyZXQpCisJCXNp X3BpLT5zeXNfcGNpZV9tYXNrID0gMDsKKwllbHNlCisJCXNpX3BpLT5zeXNfcGNpZV9tYXNrID0g bWFzazsKKwlzaV9waS0+Zm9yY2VfcGNpZV9nZW4gPSBBTURHUFVfUENJRV9HRU5fSU5WQUxJRDsK KwlzaV9waS0+Ym9vdF9wY2llX2dlbiA9IHNpX2dldF9jdXJyZW50X3BjaWVfc3BlZWQoYWRldik7 CisKKwlzaV9zZXRfbWF4X2N1X3ZhbHVlKGFkZXYpOworCisJcnY3NzBfZ2V0X21heF92ZGRjKGFk ZXYpOworCXNpX2dldF9sZWFrYWdlX3ZkZGMoYWRldik7CisJc2lfcGF0Y2hfZGVwZW5kZW5jeV90 YWJsZXNfYmFzZWRfb25fbGVha2FnZShhZGV2KTsKKworCXBpLT5hY3BpX3ZkZGMgPSAwOworCWVn X3BpLT5hY3BpX3ZkZGNpID0gMDsKKwlwaS0+bWluX3ZkZGNfaW5fdGFibGUgPSAwOworCXBpLT5t YXhfdmRkY19pbl90YWJsZSA9IDA7CisKKwlyZXQgPSBhbWRncHVfZ2V0X3BsYXRmb3JtX2NhcHMo YWRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGFtZGdwdV9wYXJzZV9l eHRlbmRlZF9wb3dlcl90YWJsZShhZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ cmV0ID0gc2lfcGFyc2VfcG93ZXJfdGFibGUoYWRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCWFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX2Rpc3BjbGsu ZW50cmllcyA9CisJCWt6YWxsb2MoNCAqIHNpemVvZihzdHJ1Y3QgYW1kZ3B1X2Nsb2NrX3ZvbHRh Z2VfZGVwZW5kZW5jeV9lbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghYWRldi0+cG0uZHBtLmR5 bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fZGlzcGNsay5lbnRyaWVzKSB7CisJCWFtZGdwdV9m cmVlX2V4dGVuZGVkX3Bvd2VyX3RhYmxlKGFkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJ YWRldi0+cG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fZGlzcGNsay5jb3VudCA9 IDQ7CisJYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fZGlzcGNsay5l bnRyaWVzWzBdLmNsayA9IDA7CisJYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVu Y3lfb25fZGlzcGNsay5lbnRyaWVzWzBdLnYgPSAwOworCWFkZXYtPnBtLmRwbS5keW5fc3RhdGUu dmRkY19kZXBlbmRlbmN5X29uX2Rpc3BjbGsuZW50cmllc1sxXS5jbGsgPSAzNjAwMDsKKwlhZGV2 LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9kaXNwY2xrLmVudHJpZXNbMV0u diA9IDcyMDsKKwlhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9kaXNw Y2xrLmVudHJpZXNbMl0uY2xrID0gNTQwMDA7CisJYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS52ZGRj X2RlcGVuZGVuY3lfb25fZGlzcGNsay5lbnRyaWVzWzJdLnYgPSA4MTA7CisJYWRldi0+cG0uZHBt LmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fZGlzcGNsay5lbnRyaWVzWzNdLmNsayA9IDcy MDAwOworCWFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX2Rpc3BjbGsu ZW50cmllc1szXS52ID0gOTAwOworCisJaWYgKGFkZXYtPnBtLmRwbS52b2x0YWdlX3Jlc3BvbnNl X3RpbWUgPT0gMCkKKwkJYWRldi0+cG0uZHBtLnZvbHRhZ2VfcmVzcG9uc2VfdGltZSA9IFI2MDBf Vk9MVEFHRVJFU1BPTlNFVElNRV9ERkxUOworCWlmIChhZGV2LT5wbS5kcG0uYmFja2JpYXNfcmVz cG9uc2VfdGltZSA9PSAwKQorCQlhZGV2LT5wbS5kcG0uYmFja2JpYXNfcmVzcG9uc2VfdGltZSA9 IFI2MDBfQkFDS0JJQVNSRVNQT05TRVRJTUVfREZMVDsKKworCXJldCA9IGFtZGdwdV9hdG9tYmlv c19nZXRfY2xvY2tfZGl2aWRlcnMoYWRldiwgQ09NUFVURV9FTkdJTkVfUExMX1BBUkFNLAorCQkJ CQkgICAgIDAsIGZhbHNlLCAmZGl2aWRlcnMpOworCWlmIChyZXQpCisJCXBpLT5yZWZfZGl2ID0g ZGl2aWRlcnMucmVmX2RpdiArIDE7CisJZWxzZQorCQlwaS0+cmVmX2RpdiA9IFI2MDBfUkVGRVJF TkNFRElWSURFUl9ERkxUOworCisJZWdfcGktPnNtdV91dmRfaHMgPSBmYWxzZTsKKworCXBpLT5t Y2xrX3N0cm9iZV9tb2RlX3RocmVzaG9sZCA9IDQwMDAwOworCWlmIChzaV9pc19zcGVjaWFsXzFn Yl9wbGF0Zm9ybShhZGV2KSkKKwkJcGktPm1jbGtfc3R1dHRlcl9tb2RlX3RocmVzaG9sZCA9IDA7 CisJZWxzZQorCQlwaS0+bWNsa19zdHV0dGVyX21vZGVfdGhyZXNob2xkID0gcGktPm1jbGtfc3Ry b2JlX21vZGVfdGhyZXNob2xkOworCXBpLT5tY2xrX2VkY19lbmFibGVfdGhyZXNob2xkID0gNDAw MDA7CisJZWdfcGktPm1jbGtfZWRjX3dyX2VuYWJsZV90aHJlc2hvbGQgPSA0MDAwMDsKKworCW5p X3BpLT5tY2xrX3J0dF9tb2RlX3RocmVzaG9sZCA9IGVnX3BpLT5tY2xrX2VkY193cl9lbmFibGVf dGhyZXNob2xkOworCisJcGktPnZvbHRhZ2VfY29udHJvbCA9CisJCWFtZGdwdV9hdG9tYmlvc19p c192b2x0YWdlX2dwaW8oYWRldiwgU0VUX1ZPTFRBR0VfVFlQRV9BU0lDX1ZEREMsCisJCQkJCSAg ICBWT0xUQUdFX09CSl9HUElPX0xVVCk7CisJaWYgKCFwaS0+dm9sdGFnZV9jb250cm9sKSB7CisJ CXNpX3BpLT52b2x0YWdlX2NvbnRyb2xfc3ZpMiA9CisJCQlhbWRncHVfYXRvbWJpb3NfaXNfdm9s dGFnZV9ncGlvKGFkZXYsIFNFVF9WT0xUQUdFX1RZUEVfQVNJQ19WRERDLAorCQkJCQkJICAgIFZP TFRBR0VfT0JKX1NWSUQyKTsKKwkJaWYgKHNpX3BpLT52b2x0YWdlX2NvbnRyb2xfc3ZpMikKKwkJ CWFtZGdwdV9hdG9tYmlvc19nZXRfc3ZpMl9pbmZvKGFkZXYsIFNFVF9WT0xUQUdFX1RZUEVfQVNJ Q19WRERDLAorCQkJCQkJICAmc2lfcGktPnN2ZF9ncGlvX2lkLCAmc2lfcGktPnN2Y19ncGlvX2lk KTsKKwl9CisKKwlwaS0+bXZkZF9jb250cm9sID0KKwkJYW1kZ3B1X2F0b21iaW9zX2lzX3ZvbHRh Z2VfZ3BpbyhhZGV2LCBTRVRfVk9MVEFHRV9UWVBFX0FTSUNfTVZEREMsCisJCQkJCSAgICBWT0xU QUdFX09CSl9HUElPX0xVVCk7CisKKwllZ19waS0+dmRkY2lfY29udHJvbCA9CisJCWFtZGdwdV9h dG9tYmlvc19pc192b2x0YWdlX2dwaW8oYWRldiwgU0VUX1ZPTFRBR0VfVFlQRV9BU0lDX1ZERENJ LAorCQkJCQkgICAgVk9MVEFHRV9PQkpfR1BJT19MVVQpOworCWlmICghZWdfcGktPnZkZGNpX2Nv bnRyb2wpCisJCXNpX3BpLT52ZGRjaV9jb250cm9sX3N2aTIgPQorCQkJYW1kZ3B1X2F0b21iaW9z X2lzX3ZvbHRhZ2VfZ3BpbyhhZGV2LCBTRVRfVk9MVEFHRV9UWVBFX0FTSUNfVkREQ0ksCisJCQkJ CQkgICAgVk9MVEFHRV9PQkpfU1ZJRDIpOworCisJc2lfcGktPnZkZGNfcGhhc2Vfc2hlZF9jb250 cm9sID0KKwkJYW1kZ3B1X2F0b21iaW9zX2lzX3ZvbHRhZ2VfZ3BpbyhhZGV2LCBTRVRfVk9MVEFH RV9UWVBFX0FTSUNfVkREQywKKwkJCQkJICAgIFZPTFRBR0VfT0JKX1BIQVNFX0xVVCk7CisKKwly djc3MF9nZXRfZW5naW5lX21lbW9yeV9zcyhhZGV2KTsKKworCXBpLT5hc2kgPSBSVjc3MF9BU0lf REZMVDsKKwlwaS0+cGFzaSA9IENZUFJFU1NfSEFTSV9ERkxUOworCXBpLT52cmMgPSBTSVNMQU5E U19WUkNfREZMVDsKKworCXBpLT5nZnhfY2xvY2tfZ2F0aW5nID0gdHJ1ZTsKKworCWVnX3BpLT5z Y2xrX2RlZXBfc2xlZXAgPSB0cnVlOworCXNpX3BpLT5zY2xrX2RlZXBfc2xlZXBfYWJvdmVfbG93 ID0gZmFsc2U7CisKKwlpZiAoYWRldi0+cG0uaW50X3RoZXJtYWxfdHlwZSAhPSBUSEVSTUFMX1RZ UEVfTk9ORSkKKwkJcGktPnRoZXJtYWxfcHJvdGVjdGlvbiA9IHRydWU7CisJZWxzZQorCQlwaS0+ dGhlcm1hbF9wcm90ZWN0aW9uID0gZmFsc2U7CisKKwllZ19waS0+ZHluYW1pY19hY190aW1pbmcg PSB0cnVlOworCisJZWdfcGktPmxpZ2h0X3NsZWVwID0gdHJ1ZTsKKyNpZiBkZWZpbmVkKENPTkZJ R19BQ1BJKQorCWVnX3BpLT5wY2llX3BlcmZvcm1hbmNlX3JlcXVlc3QgPQorCQlhbWRncHVfYWNw aV9pc19wY2llX3BlcmZvcm1hbmNlX3JlcXVlc3Rfc3VwcG9ydGVkKGFkZXYpOworI2Vsc2UKKwll Z19waS0+cGNpZV9wZXJmb3JtYW5jZV9yZXF1ZXN0ID0gZmFsc2U7CisjZW5kaWYKKworCXNpX3Bp LT5zcmFtX2VuZCA9IFNNQ19SQU1fRU5EOworCisJYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS5tY2xr X3NjbGtfcmF0aW8gPSA0OworCWFkZXYtPnBtLmRwbS5keW5fc3RhdGUuc2Nsa19tY2xrX2RlbHRh ID0gMTUwMDA7CisJYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS52ZGRjX3ZkZGNpX2RlbHRhID0gMjAw OworCWFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmFsaWRfc2Nsa192YWx1ZXMuY291bnQgPSAwOwor CWFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmFsaWRfc2Nsa192YWx1ZXMudmFsdWVzID0gTlVMTDsK KwlhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZhbGlkX21jbGtfdmFsdWVzLmNvdW50ID0gMDsKKwlh ZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZhbGlkX21jbGtfdmFsdWVzLnZhbHVlcyA9IE5VTEw7CisK KwlzaV9pbml0aWFsaXplX3Bvd2VydHVuZV9kZWZhdWx0cyhhZGV2KTsKKworCS8qIG1ha2Ugc3Vy ZSBkYyBsaW1pdHMgYXJlIHZhbGlkICovCisJaWYgKChhZGV2LT5wbS5kcG0uZHluX3N0YXRlLm1h eF9jbG9ja192b2x0YWdlX29uX2RjLnNjbGsgPT0gMCkgfHwKKwkgICAgKGFkZXYtPnBtLmRwbS5k eW5fc3RhdGUubWF4X2Nsb2NrX3ZvbHRhZ2Vfb25fZGMubWNsayA9PSAwKSkKKwkJYWRldi0+cG0u ZHBtLmR5bl9zdGF0ZS5tYXhfY2xvY2tfdm9sdGFnZV9vbl9kYyA9CisJCQlhZGV2LT5wbS5kcG0u ZHluX3N0YXRlLm1heF9jbG9ja192b2x0YWdlX29uX2FjOworCisJc2lfcGktPmZhbl9jdHJsX2lz X2luX2RlZmF1bHRfbW9kZSA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg c2lfZHBtX2Zpbmkoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgYWRldi0+cG0uZHBtLm51bV9wczsgaSsrKSB7CisJCWtmcmVlKGFkZXYt PnBtLmRwbS5wc1tpXS5wc19wcml2KTsKKwl9CisJa2ZyZWUoYWRldi0+cG0uZHBtLnBzKTsKKwlr ZnJlZShhZGV2LT5wbS5kcG0ucHJpdik7CisJa2ZyZWUoYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS52 ZGRjX2RlcGVuZGVuY3lfb25fZGlzcGNsay5lbnRyaWVzKTsKKwlhbWRncHVfZnJlZV9leHRlbmRl ZF9wb3dlcl90YWJsZShhZGV2KTsKK30KKworc3RhdGljIHZvaWQgc2lfZHBtX2RlYnVnZnNfcHJp bnRfY3VycmVudF9wZXJmb3JtYW5jZV9sZXZlbChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwK KwkJCQkJCSAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJc3RydWN0IGV2ZXJncmVlbl9wb3dl cl9pbmZvICplZ19waSA9IGV2ZXJncmVlbl9nZXRfcGkoYWRldik7CisJc3RydWN0IGFtZGdwdV9w cyAqcnBzID0gJmVnX3BpLT5jdXJyZW50X3JwczsKKwlzdHJ1Y3QgIHNpX3BzICpwcyA9IHNpX2dl dF9wcyhycHMpOworCXN0cnVjdCBydjd4eF9wbCAqcGw7CisJdTMyIGN1cnJlbnRfaW5kZXggPQor CQkoUlJFRzMyKFRBUkdFVF9BTkRfQ1VSUkVOVF9QUk9GSUxFX0lOREVYKSAmIENVUlJFTlRfU1RB VEVfSU5ERVhfTUFTSykgPj4KKwkJQ1VSUkVOVF9TVEFURV9JTkRFWF9TSElGVDsKKworCWlmIChj dXJyZW50X2luZGV4ID49IHBzLT5wZXJmb3JtYW5jZV9sZXZlbF9jb3VudCkgeworCQlzZXFfcHJp bnRmKG0sICJpbnZhbGlkIGRwbSBwcm9maWxlICVkXG4iLCBjdXJyZW50X2luZGV4KTsKKwl9IGVs c2UgeworCQlwbCA9ICZwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2N1cnJlbnRfaW5kZXhdOworCQlz ZXFfcHJpbnRmKG0sICJ1dmQgICAgdmNsazogJWQgZGNsazogJWRcbiIsIHJwcy0+dmNsaywgcnBz LT5kY2xrKTsKKwkJc2VxX3ByaW50ZihtLCAicG93ZXIgbGV2ZWwgJWQgICAgc2NsazogJXUgbWNs azogJXUgdmRkYzogJXUgdmRkY2k6ICV1IHBjaWUgZ2VuOiAldVxuIiwKKwkJCSAgIGN1cnJlbnRf aW5kZXgsIHBsLT5zY2xrLCBwbC0+bWNsaywgcGwtPnZkZGMsIHBsLT52ZGRjaSwgcGwtPnBjaWVf Z2VuICsgMSk7CisJfQorfQorCitzdGF0aWMgaW50IHNpX2RwbV9zZXRfaW50ZXJydXB0X3N0YXRl KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCSAgICAgIHN0cnVjdCBhbWRncHVfaXJx X3NyYyAqc291cmNlLAorCQkJCSAgICAgIHVuc2lnbmVkIHR5cGUsCisJCQkJICAgICAgZW51bSBh bWRncHVfaW50ZXJydXB0X3N0YXRlIHN0YXRlKQoreworCXUzMiBjZ190aGVybWFsX2ludDsKKwor CXN3aXRjaCAodHlwZSkgeworCWNhc2UgQU1ER1BVX1RIRVJNQUxfSVJRX0xPV19UT19ISUdIOgor CQlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgQU1ER1BVX0lSUV9TVEFURV9ESVNBQkxFOgorCQkJ Y2dfdGhlcm1hbF9pbnQgPSBSUkVHMzJfU01DKENHX1RIRVJNQUxfSU5UKTsKKwkJCWNnX3RoZXJt YWxfaW50IHw9IFRIRVJNX0lOVF9NQVNLX0hJR0g7CisJCQlXUkVHMzJfU01DKENHX1RIRVJNQUxf SU5ULCBjZ190aGVybWFsX2ludCk7CisJCQlicmVhazsKKwkJY2FzZSBBTURHUFVfSVJRX1NUQVRF X0VOQUJMRToKKwkJCWNnX3RoZXJtYWxfaW50ID0gUlJFRzMyX1NNQyhDR19USEVSTUFMX0lOVCk7 CisJCQljZ190aGVybWFsX2ludCAmPSB+VEhFUk1fSU5UX01BU0tfSElHSDsKKwkJCVdSRUczMl9T TUMoQ0dfVEhFUk1BTF9JTlQsIGNnX3RoZXJtYWxfaW50KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0 OgorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEFNREdQVV9USEVSTUFMX0lSUV9I SUdIX1RPX0xPVzoKKwkJc3dpdGNoIChzdGF0ZSkgeworCQljYXNlIEFNREdQVV9JUlFfU1RBVEVf RElTQUJMRToKKwkJCWNnX3RoZXJtYWxfaW50ID0gUlJFRzMyX1NNQyhDR19USEVSTUFMX0lOVCk7 CisJCQljZ190aGVybWFsX2ludCB8PSBUSEVSTV9JTlRfTUFTS19MT1c7CisJCQlXUkVHMzJfU01D KENHX1RIRVJNQUxfSU5ULCBjZ190aGVybWFsX2ludCk7CisJCQlicmVhazsKKwkJY2FzZSBBTURH UFVfSVJRX1NUQVRFX0VOQUJMRToKKwkJCWNnX3RoZXJtYWxfaW50ID0gUlJFRzMyX1NNQyhDR19U SEVSTUFMX0lOVCk7CisJCQljZ190aGVybWFsX2ludCAmPSB+VEhFUk1fSU5UX01BU0tfTE9XOwor CQkJV1JFRzMyX1NNQyhDR19USEVSTUFMX0lOVCwgY2dfdGhlcm1hbF9pbnQpOworCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJy ZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaV9kcG1fcHJvY2Vzc19pbnRl cnJ1cHQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJICAgIHN0cnVjdCBhbWRncHVf aXJxX3NyYyAqc291cmNlLCAKKwkJCQkgICAgc3RydWN0IGFtZGdwdV9pdl9lbnRyeSAqZW50cnkp Cit7CisJYm9vbCBxdWV1ZV90aGVybWFsID0gZmFsc2U7CisKKwlpZiAoZW50cnkgPT0gTlVMTCkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGVudHJ5LT5zcmNfaWQpIHsKKwljYXNlIDIz MDogLyogdGhlcm1hbCBsb3cgdG8gaGlnaCAqLworCQlEUk1fREVCVUcoIklIOiB0aGVybWFsIGxv dyB0byBoaWdoXG4iKTsKKwkJYWRldi0+cG0uZHBtLnRoZXJtYWwuaGlnaF90b19sb3cgPSBmYWxz ZTsKKwkJcXVldWVfdGhlcm1hbCA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgMjMxOiAvKiB0aGVy bWFsIGhpZ2ggdG8gbG93ICovCisJCURSTV9ERUJVRygiSUg6IHRoZXJtYWwgaGlnaCB0byBsb3dc biIpOworCQlhZGV2LT5wbS5kcG0udGhlcm1hbC5oaWdoX3RvX2xvdyA9IHRydWU7CisJCXF1ZXVl X3RoZXJtYWwgPSB0cnVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlp ZiAocXVldWVfdGhlcm1hbCkKKwkJc2NoZWR1bGVfd29yaygmYWRldi0+cG0uZHBtLnRoZXJtYWwu d29yayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaV9kcG1fbGF0ZV9pbml0KHZv aWQgKmhhbmRsZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0g KHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOworCisJaWYgKCFhbWRncHVfZHBtKQorCQly ZXR1cm4gMDsKKworCS8qIGluaXQgdGhlIHN5c2ZzIGFuZCBkZWJ1Z2ZzIGZpbGVzIGxhdGUgKi8K KwlyZXQgPSBhbWRncHVfcG1fc3lzZnNfaW5pdChhZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJcmV0ID0gc2lfc2V0X3RlbXBlcmF0dXJlX3JhbmdlKGFkZXYpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisjaWYgMCAvL1RPRE8gPworCXNpX2RwbV9wb3dlcmdhdGVfdXZkKGFk ZXYsIHRydWUpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc2lfZHBtX2luaXRf bWljcm9jb2RlIC0gbG9hZCB1Y29kZSBpbWFnZXMgZnJvbSBkaXNrCisgKgorICogQGFkZXY6IGFt ZGdwdV9kZXZpY2UgcG9pbnRlcgorICoKKyAqIFVzZSB0aGUgZmlybXdhcmUgaW50ZXJmYWNlIHRv IGxvYWQgdGhlIHVjb2RlIGltYWdlcyBpbnRvCisgKiB0aGUgZHJpdmVyIChub3QgbG9hZGVkIGlu dG8gaHcpLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUuCisgKi8K K3N0YXRpYyBpbnQgc2lfZHBtX2luaXRfbWljcm9jb2RlKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQoreworCWNvbnN0IGNoYXIgKmNoaXBfbmFtZTsKKwljaGFyIGZ3X25hbWVbMzBdOworCWlu dCBlcnI7CisKKwlEUk1fREVCVUcoIlxuIik7CisJc3dpdGNoIChhZGV2LT5hc2ljX3R5cGUpIHsK KwljYXNlIENISVBfVEFISVRJOgorCQljaGlwX25hbWUgPSAidGFoaXRpIjsKKwkJYnJlYWs7CisJ Y2FzZSBDSElQX1BJVENBSVJOOgorCQljaGlwX25hbWUgPSAicGl0Y2Fpcm4iOworCQlicmVhazsK KwljYXNlIENISVBfVkVSREU6CisJCWNoaXBfbmFtZSA9ICJ2ZXJkZSI7CisJCWJyZWFrOworCWNh c2UgQ0hJUF9PTEFORDoKKwkJY2hpcF9uYW1lID0gIm9sYW5kIjsKKwkJYnJlYWs7CisJY2FzZSBD SElQX0hBSU5BTjoKKwkJY2hpcF9uYW1lID0gImhhaW5hbiI7CisJCWJyZWFrOworCWRlZmF1bHQ6 IEJVRygpOworCX0KKworCXNucHJpbnRmKGZ3X25hbWUsIHNpemVvZihmd19uYW1lKSwgInJhZGVv bi8lc19zbWMuYmluIiwgY2hpcF9uYW1lKTsKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZhZGV2 LT5wbS5mdywgZndfbmFtZSwgYWRldi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwll cnIgPSBhbWRncHVfdWNvZGVfdmFsaWRhdGUoYWRldi0+cG0uZncpOworCitvdXQ6CisJaWYgKGVy cikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJzaV9zbWM6IEZhaWxlZCB0byBsb2Fk IGZpcm13YXJlLiBlcnIgPSAlZFwiJXNcIlxuIiwKKwkJICAgICAgIGVyciwgZndfbmFtZSk7CisJ CXJlbGVhc2VfZmlybXdhcmUoYWRldi0+cG0uZncpOworCQlhZGV2LT5wbS5mdyA9IE5VTEw7CisJ fQorCXJldHVybiBlcnI7CisKK30KKworc3RhdGljIGludCBzaV9kcG1fc3dfaW5pdCh2b2lkICpo YW5kbGUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKworCXJldCA9IGFtZGdwdV9pcnFfYWRkX2lkKGFk ZXYsIDIzMCwgJmFkZXYtPnBtLmRwbS50aGVybWFsLmlycSk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCXJldCA9IGFtZGdwdV9pcnFfYWRkX2lkKGFkZXYsIDIzMSwgJmFkZXYtPnBtLmRw bS50aGVybWFsLmlycSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGRlZmF1bHQg dG8gYmFsYW5jZWQgc3RhdGUgKi8KKwlhZGV2LT5wbS5kcG0uc3RhdGUgPSBQT1dFUl9TVEFURV9U WVBFX0JBTEFOQ0VEOworCWFkZXYtPnBtLmRwbS51c2VyX3N0YXRlID0gUE9XRVJfU1RBVEVfVFlQ RV9CQUxBTkNFRDsKKwlhZGV2LT5wbS5kcG0uZm9yY2VkX2xldmVsID0gQU1ER1BVX0RQTV9GT1JD RURfTEVWRUxfQVVUTzsKKwlhZGV2LT5wbS5kZWZhdWx0X3NjbGsgPSBhZGV2LT5jbG9jay5kZWZh dWx0X3NjbGs7CisJYWRldi0+cG0uZGVmYXVsdF9tY2xrID0gYWRldi0+Y2xvY2suZGVmYXVsdF9t Y2xrOworCWFkZXYtPnBtLmN1cnJlbnRfc2NsayA9IGFkZXYtPmNsb2NrLmRlZmF1bHRfc2NsazsK KwlhZGV2LT5wbS5jdXJyZW50X21jbGsgPSBhZGV2LT5jbG9jay5kZWZhdWx0X21jbGs7CisJYWRl di0+cG0uaW50X3RoZXJtYWxfdHlwZSA9IFRIRVJNQUxfVFlQRV9OT05FOworCisJaWYgKGFtZGdw dV9kcG0gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBzaV9kcG1faW5pdF9taWNyb2NvZGUo YWRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCUlOSVRfV09SSygmYWRldi0+cG0u ZHBtLnRoZXJtYWwud29yaywgYW1kZ3B1X2RwbV90aGVybWFsX3dvcmtfaGFuZGxlcik7CisJbXV0 ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOworCXJldCA9IHNpX2RwbV9pbml0KGFkZXYpOworCWlm IChyZXQpCisJCWdvdG8gZHBtX2ZhaWxlZDsKKwlhZGV2LT5wbS5kcG0uY3VycmVudF9wcyA9IGFk ZXYtPnBtLmRwbS5yZXF1ZXN0ZWRfcHMgPSBhZGV2LT5wbS5kcG0uYm9vdF9wczsKKwlpZiAoYW1k Z3B1X2RwbSA9PSAxKQorCQlhbWRncHVfcG1fcHJpbnRfcG93ZXJfc3RhdGVzKGFkZXYpOworCW11 dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOworCURSTV9JTkZPKCJhbWRncHU6IGRwbSBpbml0 aWFsaXplZFxuIik7CisKKwlyZXR1cm4gMDsKKworZHBtX2ZhaWxlZDoKKwlzaV9kcG1fZmluaShh ZGV2KTsKKwltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKKwlEUk1fRVJST1IoImFtZGdw dTogZHBtIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBzaV9kcG1fc3dfZmluaSh2b2lkICpoYW5kbGUpCit7CisJc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisKKwltdXRleF9s b2NrKCZhZGV2LT5wbS5tdXRleCk7CisJYW1kZ3B1X3BtX3N5c2ZzX2ZpbmkoYWRldik7CisJc2lf ZHBtX2ZpbmkoYWRldik7CisJbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBzaV9kcG1faHdfaW5pdCh2b2lkICpoYW5kbGUpCit7CisJ aW50IHJldDsKKworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVf ZGV2aWNlICopaGFuZGxlOworCisJaWYgKCFhbWRncHVfZHBtKQorCQlyZXR1cm4gMDsKKworCW11 dGV4X2xvY2soJmFkZXYtPnBtLm11dGV4KTsKKwlzaV9kcG1fc2V0dXBfYXNpYyhhZGV2KTsKKwly ZXQgPSBzaV9kcG1fZW5hYmxlKGFkZXYpOworCWlmIChyZXQpCisJCWFkZXYtPnBtLmRwbV9lbmFi bGVkID0gZmFsc2U7CisJZWxzZQorCQlhZGV2LT5wbS5kcG1fZW5hYmxlZCA9IHRydWU7CisJbXV0 ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IHNpX2RwbV9od19maW5pKHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKworCWlmIChhZGV2LT5w bS5kcG1fZW5hYmxlZCkgeworCQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7CisJCXNpX2Rw bV9kaXNhYmxlKGFkZXYpOworCQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKKwl9CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaV9kcG1fc3VzcGVuZCh2b2lkICpoYW5kbGUp Cit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KiloYW5kbGU7CisKKwlpZiAoYWRldi0+cG0uZHBtX2VuYWJsZWQpIHsKKwkJbXV0ZXhfbG9jaygm YWRldi0+cG0ubXV0ZXgpOworCQkvKiBkaXNhYmxlIGRwbSAqLworCQlzaV9kcG1fZGlzYWJsZShh ZGV2KTsKKwkJLyogcmVzZXQgdGhlIHBvd2VyIHN0YXRlICovCisJCWFkZXYtPnBtLmRwbS5jdXJy ZW50X3BzID0gYWRldi0+cG0uZHBtLnJlcXVlc3RlZF9wcyA9IGFkZXYtPnBtLmRwbS5ib290X3Bz OworCQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKKwl9CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgc2lfZHBtX3Jlc3VtZSh2b2lkICpoYW5kbGUpCit7CisJaW50IHJldDsKKwlz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRs ZTsKKworCWlmIChhZGV2LT5wbS5kcG1fZW5hYmxlZCkgeworCQkvKiBhc2ljIGluaXQgd2lsbCBy ZXNldCB0byB0aGUgYm9vdCBzdGF0ZSAqLworCQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7 CisJCXNpX2RwbV9zZXR1cF9hc2ljKGFkZXYpOworCQlyZXQgPSBzaV9kcG1fZW5hYmxlKGFkZXYp OworCQlpZiAocmV0KQorCQkJYWRldi0+cG0uZHBtX2VuYWJsZWQgPSBmYWxzZTsKKwkJZWxzZQor CQkJYWRldi0+cG0uZHBtX2VuYWJsZWQgPSB0cnVlOworCQltdXRleF91bmxvY2soJmFkZXYtPnBt Lm11dGV4KTsKKwkJaWYgKGFkZXYtPnBtLmRwbV9lbmFibGVkKQorCQkJYW1kZ3B1X3BtX2NvbXB1 dGVfY2xvY2tzKGFkZXYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgc2lfZHBt X2lzX2lkbGUodm9pZCAqaGFuZGxlKQoreworCS8qIFhYWCAqLworCXJldHVybiB0cnVlOworfQor CitzdGF0aWMgaW50IHNpX2RwbV93YWl0X2Zvcl9pZGxlKHZvaWQgKmhhbmRsZSkKK3sKKwkvKiBY WFggKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaV9kcG1fc29mdF9yZXNldCh2b2lk ICpoYW5kbGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2lfZHBtX3NldF9jbG9j a2dhdGluZ19zdGF0ZSh2b2lkICpoYW5kbGUsCisJCQkJCWVudW0gYW1kX2Nsb2NrZ2F0aW5nX3N0 YXRlIHN0YXRlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpX2RwbV9zZXRfcG93 ZXJnYXRpbmdfc3RhdGUodm9pZCAqaGFuZGxlLAorCQkJCQllbnVtIGFtZF9wb3dlcmdhdGluZ19z dGF0ZSBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1p bGxpZGVncmVlcyAqLworc3RhdGljIGludCBzaV9kcG1fZ2V0X3RlbXAoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCit7CisJdTMyIHRlbXA7CisJaW50IGFjdHVhbF90ZW1wID0gMDsKKworCXRl bXAgPSAoUlJFRzMyKENHX01VTFRfVEhFUk1BTF9TVEFUVVMpICYgQ1RGX1RFTVBfTUFTSykgPj4K KwkJQ1RGX1RFTVBfU0hJRlQ7CisKKwlpZiAodGVtcCAmIDB4MjAwKQorCQlhY3R1YWxfdGVtcCA9 IDI1NTsKKwllbHNlCisJCWFjdHVhbF90ZW1wID0gdGVtcCAmIDB4MWZmOworCisJYWN0dWFsX3Rl bXAgPSAoYWN0dWFsX3RlbXAgKiAxMDAwKTsKKworCXJldHVybiBhY3R1YWxfdGVtcDsKK30KKwor c3RhdGljIHUzMiBzaV9kcG1fZ2V0X3NjbGsoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJv b2wgbG93KQoreworICAgICAgICBzdHJ1Y3QgZXZlcmdyZWVuX3Bvd2VyX2luZm8gKmVnX3BpID0g ZXZlcmdyZWVuX2dldF9waShhZGV2KTsKKyAgICAgICAgc3RydWN0ICBzaV9wcyAqcmVxdWVzdGVk X3N0YXRlID0gc2lfZ2V0X3BzKCZlZ19waS0+cmVxdWVzdGVkX3Jwcyk7CisKKyAgICAgICAgaWYg KGxvdykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdGVkX3N0YXRlLT5wZXJmb3JtYW5j ZV9sZXZlbHNbMF0uc2NsazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBy ZXF1ZXN0ZWRfc3RhdGUtPnBlcmZvcm1hbmNlX2xldmVsc1tyZXF1ZXN0ZWRfc3RhdGUtPnBlcmZv cm1hbmNlX2xldmVsX2NvdW50IC0gMV0uc2NsazsKK30KKworc3RhdGljIHUzMiBzaV9kcG1fZ2V0 X21jbGsoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wgbG93KQoreworICAgICAgICBz dHJ1Y3QgZXZlcmdyZWVuX3Bvd2VyX2luZm8gKmVnX3BpID0gZXZlcmdyZWVuX2dldF9waShhZGV2 KTsKKyAgICAgICAgc3RydWN0ICBzaV9wcyAqcmVxdWVzdGVkX3N0YXRlID0gc2lfZ2V0X3BzKCZl Z19waS0+cmVxdWVzdGVkX3Jwcyk7CisKKyAgICAgICAgaWYgKGxvdykKKyAgICAgICAgICAgICAg ICByZXR1cm4gcmVxdWVzdGVkX3N0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbHNbMF0ubWNsazsKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0ZWRfc3RhdGUtPnBlcmZv cm1hbmNlX2xldmVsc1tyZXF1ZXN0ZWRfc3RhdGUtPnBlcmZvcm1hbmNlX2xldmVsX2NvdW50IC0g MV0ubWNsazsKK30KKworc3RhdGljIHZvaWQgc2lfZHBtX3ByaW50X3Bvd2VyX3N0YXRlKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGFtZGdwdV9wcyAqcnBzKQoreworICAgICAgICBzdHJ1Y3QgIHNpX3BzICpwcyA9IHNpX2dl dF9wcyhycHMpOworICAgICAgICBzdHJ1Y3QgcnY3eHhfcGwgKnBsOworICAgICAgICBpbnQgaTsg ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGFtZGdw dV9kcG1fcHJpbnRfY2xhc3NfaW5mbyhycHMtPmNsYXNzLCBycHMtPmNsYXNzMik7CisgICAgICAg IGFtZGdwdV9kcG1fcHJpbnRfY2FwX2luZm8ocnBzLT5jYXBzKTsKKyAgICAgICAgcHJpbnRrKCJc dHV2ZCAgICB2Y2xrOiAlZCBkY2xrOiAlZFxuIiwgcnBzLT52Y2xrLCBycHMtPmRjbGspOworICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgcHMtPnBlcmZvcm1hbmNlX2xldmVsX2NvdW50OyBpKyspIHsK KyAgICAgICAgICAgICAgICBwbCA9ICZwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldOworICAgICAg ICAgICAgICAgIGlmIChhZGV2LT5hc2ljX3R5cGUgPj0gQ0hJUF9UQUhJVEkpCisgICAgICAgICAg ICAgICAgICAgICAgICBwcmludGsoIlx0XHRwb3dlciBsZXZlbCAlZCAgICBzY2xrOiAldSBtY2xr OiAldSB2ZGRjOiAldSB2ZGRjaTogJXUgcGNpZSBnZW46ICV1XG4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGksIHBsLT5zY2xrLCBwbC0+bWNsaywgcGwtPnZkZGMsIHBsLT52ZGRj aSwgcGwtPnBjaWVfZ2VuICsgMSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRrKCJcdFx0cG93ZXIgbGV2ZWwgJWQgICAgc2NsazogJXUgbWNsazog JXUgdmRkYzogJXUgdmRkY2k6ICV1XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGksIHBsLT5zY2xrLCBwbC0+bWNsaywgcGwtPnZkZGMsIHBsLT52ZGRjaSk7CisgICAgICAgIH0K KyAgICAgICAgYW1kZ3B1X2RwbV9wcmludF9wc19zdGF0dXMoYWRldiwgcnBzKTsKK30KKworc3Rh dGljIGludCBzaV9kcG1fZWFybHlfaW5pdCh2b2lkICpoYW5kbGUpCit7CisKKwlzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKworCXNp X2RwbV9zZXRfZHBtX2Z1bmNzKGFkZXYpOworCXNpX2RwbV9zZXRfaXJxX2Z1bmNzKGFkZXYpOwor CXJldHVybiAwOworfQorCisKK2NvbnN0IHN0cnVjdCBhbWRfaXBfZnVuY3Mgc2lfZHBtX2lwX2Z1 bmNzID0geworCS5uYW1lID0gInNpX2RwbSIsCisJLmVhcmx5X2luaXQgPSBzaV9kcG1fZWFybHlf aW5pdCwKKwkubGF0ZV9pbml0ID0gc2lfZHBtX2xhdGVfaW5pdCwKKwkuc3dfaW5pdCA9IHNpX2Rw bV9zd19pbml0LAorCS5zd19maW5pID0gc2lfZHBtX3N3X2ZpbmksCisJLmh3X2luaXQgPSBzaV9k cG1faHdfaW5pdCwKKwkuaHdfZmluaSA9IHNpX2RwbV9od19maW5pLAorCS5zdXNwZW5kID0gc2lf ZHBtX3N1c3BlbmQsCisJLnJlc3VtZSA9IHNpX2RwbV9yZXN1bWUsCisJLmlzX2lkbGUgPSBzaV9k cG1faXNfaWRsZSwKKwkud2FpdF9mb3JfaWRsZSA9IHNpX2RwbV93YWl0X2Zvcl9pZGxlLAorCS5z b2Z0X3Jlc2V0ID0gc2lfZHBtX3NvZnRfcmVzZXQsCisJLnNldF9jbG9ja2dhdGluZ19zdGF0ZSA9 IHNpX2RwbV9zZXRfY2xvY2tnYXRpbmdfc3RhdGUsCisJLnNldF9wb3dlcmdhdGluZ19zdGF0ZSA9 IHNpX2RwbV9zZXRfcG93ZXJnYXRpbmdfc3RhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IGFtZGdwdV9kcG1fZnVuY3Mgc2lfZHBtX2Z1bmNzID0geworCS5nZXRfdGVtcGVyYXR1cmUgPSAm c2lfZHBtX2dldF90ZW1wLAorCS5wcmVfc2V0X3Bvd2VyX3N0YXRlID0gJnNpX2RwbV9wcmVfc2V0 X3Bvd2VyX3N0YXRlLAorCS5zZXRfcG93ZXJfc3RhdGUgPSAmc2lfZHBtX3NldF9wb3dlcl9zdGF0 ZSwKKwkucG9zdF9zZXRfcG93ZXJfc3RhdGUgPSAmc2lfZHBtX3Bvc3Rfc2V0X3Bvd2VyX3N0YXRl LAorCS5kaXNwbGF5X2NvbmZpZ3VyYXRpb25fY2hhbmdlZCA9ICZzaV9kcG1fZGlzcGxheV9jb25m aWd1cmF0aW9uX2NoYW5nZWQsCisJLmdldF9zY2xrID0gJnNpX2RwbV9nZXRfc2NsaywKKwkuZ2V0 X21jbGsgPSAmc2lfZHBtX2dldF9tY2xrLAorCS5wcmludF9wb3dlcl9zdGF0ZSA9ICZzaV9kcG1f cHJpbnRfcG93ZXJfc3RhdGUsCisJLmRlYnVnZnNfcHJpbnRfY3VycmVudF9wZXJmb3JtYW5jZV9s ZXZlbCA9ICZzaV9kcG1fZGVidWdmc19wcmludF9jdXJyZW50X3BlcmZvcm1hbmNlX2xldmVsLAor CS5mb3JjZV9wZXJmb3JtYW5jZV9sZXZlbCA9ICZzaV9kcG1fZm9yY2VfcGVyZm9ybWFuY2VfbGV2 ZWwsCisJLnZibGFua190b29fc2hvcnQgPSAmc2lfZHBtX3ZibGFua190b29fc2hvcnQsCisJLnNl dF9mYW5fY29udHJvbF9tb2RlID0gJnNpX2RwbV9zZXRfZmFuX2NvbnRyb2xfbW9kZSwKKwkuZ2V0 X2Zhbl9jb250cm9sX21vZGUgPSAmc2lfZHBtX2dldF9mYW5fY29udHJvbF9tb2RlLAorCS5zZXRf ZmFuX3NwZWVkX3BlcmNlbnQgPSAmc2lfZHBtX3NldF9mYW5fc3BlZWRfcGVyY2VudCwKKwkuZ2V0 X2Zhbl9zcGVlZF9wZXJjZW50ID0gJnNpX2RwbV9nZXRfZmFuX3NwZWVkX3BlcmNlbnQsCit9Owor CitzdGF0aWMgdm9pZCBzaV9kcG1fc2V0X2RwbV9mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKK3sKKwlpZiAoYWRldi0+cG0uZnVuY3MgPT0gTlVMTCkKKwkJYWRldi0+cG0uZnVuY3Mg PSAmc2lfZHBtX2Z1bmNzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9pcnFfc3Jj X2Z1bmNzIHNpX2RwbV9pcnFfZnVuY3MgPSB7CisJLnNldCA9IHNpX2RwbV9zZXRfaW50ZXJydXB0 X3N0YXRlLAorCS5wcm9jZXNzID0gc2lfZHBtX3Byb2Nlc3NfaW50ZXJydXB0LAorfTsKKworc3Rh dGljIHZvaWQgc2lfZHBtX3NldF9pcnFfZnVuY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYp Cit7CisJYWRldi0+cG0uZHBtLnRoZXJtYWwuaXJxLm51bV90eXBlcyA9IEFNREdQVV9USEVSTUFM X0lSUV9MQVNUOworCWFkZXYtPnBtLmRwbS50aGVybWFsLmlycS5mdW5jcyA9ICZzaV9kcG1faXJx X2Z1bmNzOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zaV9k cG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NpX2RwbS5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxY2UyMWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9zaV9kcG0uaApAQCAtMCwwICsxLDEwMTUgQEAKKy8qCisgKiBD b3B5cmlnaHQgMjAxMiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFs bCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBB VVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUu CisgKgorICovCisjaWZuZGVmIF9fU0lfRFBNX0hfXworI2RlZmluZSBfX1NJX0RQTV9IX18KKwor I2luY2x1ZGUgImFtZGdwdV9hdG9tYmlvcy5oIgorI2luY2x1ZGUgInNpc2xhbmRzX3NtYy5oIgor CisjZGVmaW5lIE1DX0NHX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4OTZmCisjZGVmaW5lIE1DX0FSQl9DRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4OWZhCisjZGVmaW5lCQlDR19BUkJfUkVRKHgpCQkJCSgoeCkgPDwgMCkKKyNkZWZp bmUJCUNHX0FSQl9SRVFfTUFTSwkJCQkoMHhmZiA8PCAwKQorCisjZGVmaW5lCU1DX0FSQl9EUkFN X1RJTUlOR18xCQkJCTB4OWZjCisjZGVmaW5lCU1DX0FSQl9EUkFNX1RJTUlOR18yCQkJCTB4OWZk CisjZGVmaW5lCU1DX0FSQl9EUkFNX1RJTUlOR18zCQkJCTB4OWZlCisjZGVmaW5lCU1DX0FSQl9E UkFNX1RJTUlORzJfMQkJCQkweDlmZgorI2RlZmluZQlNQ19BUkJfRFJBTV9USU1JTkcyXzIJCQkJ MHhhMDAKKyNkZWZpbmUJTUNfQVJCX0RSQU1fVElNSU5HMl8zCQkJCTB4YTAxCisKKyNkZWZpbmUg TUFYX05PX09GX01WRERfVkFMVUVTIDIKKyNkZWZpbmUgTUFYX05PX1ZSRUdfU1RFUFMgMzIKKyNk ZWZpbmUgTklTTEFORFNfTUFYX1NNQ19QRVJGT1JNQU5DRV9MRVZFTFNfUEVSX1NXU1RBVEUgMTYK KyNkZWZpbmUgU01DX05JU0xBTkRTX01DX1JFR0lTVEVSX0FSUkFZX1NJWkUgMzIKKyNkZWZpbmUg U01DX05JU0xBTkRTX01DX1JFR0lTVEVSX0FSUkFZX1NFVF9DT1VOVCAyMAorI2RlZmluZSBSVjc3 MF9BU0lfREZMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMAorI2RlZmluZSBD WVBSRVNTX0hBU0lfREZMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDAwMDAKKyNk ZWZpbmUgUENJRV9QRVJGX1JFUV9QRUNJX0dFTjEgICAgICAgICAyCisjZGVmaW5lIFBDSUVfUEVS Rl9SRVFfUEVDSV9HRU4yICAgICAgICAgMworI2RlZmluZSBQQ0lFX1BFUkZfUkVRX1BFQ0lfR0VO MyAgICAgICAgIDQKKyNkZWZpbmUgUlY3NzBfREVGQVVMVF9WQ0xLX0ZSRVEgIDUzMzAwIC8qIDEw IGtoeiAqLworI2RlZmluZSBSVjc3MF9ERUZBVUxUX0RDTEtfRlJFUSAgNDAwMDAgLyogMTAga2h6 ICovCisKKyNkZWZpbmUgU01DX0VWRVJHUkVFTl9NQ19SRUdJU1RFUl9BUlJBWV9TSVpFIDE2CisK KyNkZWZpbmUgUlY3NzBfU01DX1RBQkxFX0FERFJFU1MgMHhCMDAwCisjZGVmaW5lIFJWNzcwX1NN Q19QRVJGT1JNQU5DRV9MRVZFTFNfUEVSX1NXU1RBVEUgICAgMworCisjZGVmaW5lIFNNQ19TVFJP QkVfUkFUSU8gICAgMHgwRgorI2RlZmluZSBTTUNfU1RST0JFX0VOQUJMRSAgIDB4MTAKKworI2Rl ZmluZSBTTUNfTUNfRURDX1JEX0ZMQUcgIDB4MDEKKyNkZWZpbmUgU01DX01DX0VEQ19XUl9GTEFH ICAweDAyCisjZGVmaW5lIFNNQ19NQ19SVFRfRU5BQkxFICAgMHgwNAorI2RlZmluZSBTTUNfTUNf U1RVVFRFUl9FTiAgIDB4MDgKKworI2RlZmluZSBSVjc3MF9TTUNfVk9MVEFHRU1BU0tfVkREQyAw CisjZGVmaW5lIFJWNzcwX1NNQ19WT0xUQUdFTUFTS19NVkREIDEKKyNkZWZpbmUgUlY3NzBfU01D X1ZPTFRBR0VNQVNLX1ZERENJIDIKKyNkZWZpbmUgUlY3NzBfU01DX1ZPTFRBR0VNQVNLX01BWCAg NAorCisjZGVmaW5lIE5JU0xBTkRTX01BWF9TTUNfUEVSRk9STUFOQ0VfTEVWRUxTX1BFUl9TV1NU QVRFIDE2CisjZGVmaW5lIE5JU0xBTkRTX1NNQ19TVFJPQkVfUkFUSU8gICAgMHgwRgorI2RlZmlu ZSBOSVNMQU5EU19TTUNfU1RST0JFX0VOQUJMRSAgIDB4MTAKKworI2RlZmluZSBOSVNMQU5EU19T TUNfTUNfRURDX1JEX0ZMQUcgIDB4MDEKKyNkZWZpbmUgTklTTEFORFNfU01DX01DX0VEQ19XUl9G TEFHICAweDAyCisjZGVmaW5lIE5JU0xBTkRTX1NNQ19NQ19SVFRfRU5BQkxFICAgMHgwNAorI2Rl ZmluZSBOSVNMQU5EU19TTUNfTUNfU1RVVFRFUl9FTiAgIDB4MDgKKworI2RlZmluZSBNQVhfTk9f VlJFR19TVEVQUyAzMgorCisjZGVmaW5lIE5JU0xBTkRTX1NNQ19WT0xUQUdFTUFTS19WRERDICAw CisjZGVmaW5lIE5JU0xBTkRTX1NNQ19WT0xUQUdFTUFTS19NVkREICAxCisjZGVmaW5lIE5JU0xB TkRTX1NNQ19WT0xUQUdFTUFTS19WRERDSSAyCisjZGVmaW5lIE5JU0xBTkRTX1NNQ19WT0xUQUdF TUFTS19NQVggICA0CisKKyNkZWZpbmUgU0lTTEFORFNfTUNSRUdJU1RFUlRBQkxFX0lOSVRJQUxf U0xPVCAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU0lTTEFORFNfTUNSRUdJU1RFUlRBQkxFX0FD UElfU0xPVCAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU0lTTEFORFNfTUNSRUdJU1RFUlRB QkxFX1VMVl9TTE9UICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgU0lTTEFORFNfTUNSRUdJ U1RFUlRBQkxFX0ZJUlNUX0RSSVZFUlNUQVRFX1NMT1QgICAgIDMKKworI2RlZmluZSBTSVNMQU5E U19MRUFLQUdFX0lOREVYMCAgICAgMHhmZjAxCisjZGVmaW5lIFNJU0xBTkRTX01BWF9MRUFLQUdF X0NPVU5UICA0CisKKyNkZWZpbmUgU0lTTEFORFNfTUFYX0hBUkRXQVJFX1BPV0VSTEVWRUxTIDUK KyNkZWZpbmUgU0lTTEFORFNfSU5JVElBTF9TVEFURV9BUkJfSU5ERVggICAgMAorI2RlZmluZSBT SVNMQU5EU19BQ1BJX1NUQVRFX0FSQl9JTkRFWCAgICAgICAxCisjZGVmaW5lIFNJU0xBTkRTX1VM Vl9TVEFURV9BUkJfSU5ERVggICAgICAgIDIKKyNkZWZpbmUgU0lTTEFORFNfRFJJVkVSX1NUQVRF X0FSQl9JTkRFWCAgICAgMworCisjZGVmaW5lIFNJU0xBTkRTX0RQTTJfTUFYX1BVTFNFX1NLSVAg ICAgICAgIDI1NgorCisjZGVmaW5lIFNJU0xBTkRTX0RQTTJfTkVBUl9URFBfREVDICAgICAgICAg IDEwCisjZGVmaW5lIFNJU0xBTkRTX0RQTTJfQUJPVkVfU0FGRV9JTkMgICAgICAgIDUKKyNkZWZp bmUgU0lTTEFORFNfRFBNMl9CRUxPV19TQUZFX0lOQyAgICAgICAgMjAKKworI2RlZmluZSBTSVNM QU5EU19EUE0yX1REUF9TQUZFX0xJTUlUX1BFUkNFTlQgICAgICAgICAgICA4MAorCisjZGVmaW5l IFNJU0xBTkRTX0RQTTJfTUFYUFNfUEVSQ0VOVF9IICAgICAgICAgICAgICAgICAgIDk5CisjZGVm aW5lIFNJU0xBTkRTX0RQTTJfTUFYUFNfUEVSQ0VOVF9NICAgICAgICAgICAgICAgICAgIDk5CisK KyNkZWZpbmUgU0lTTEFORFNfRFBNMl9TUV9SQU1QX01BWF9QT1dFUiAgICAgICAgICAgICAgICAg MHgzRkZGCisjZGVmaW5lIFNJU0xBTkRTX0RQTTJfU1FfUkFNUF9NSU5fUE9XRVIgICAgICAgICAg ICAgICAgIDB4MTIKKyNkZWZpbmUgU0lTTEFORFNfRFBNMl9TUV9SQU1QX01BWF9QT1dFUl9ERUxU QSAgICAgICAgICAgMHgxNQorI2RlZmluZSBTSVNMQU5EU19EUE0yX1NRX1JBTVBfU1RJX1NJWkUg ICAgICAgICAgICAgICAgICAweDFFCisjZGVmaW5lIFNJU0xBTkRTX0RQTTJfU1FfUkFNUF9MVElf UkFUSU8gICAgICAgICAgICAgICAgIDB4RgorCisjZGVmaW5lIFNJU0xBTkRTX0RQTTJfUFdSRUZG SUNJRU5DWVJBVElPX01BUkdJTiAgICAgICAgIDEwCisKKyNkZWZpbmUgU0lTTEFORFNfVlJDX0RG TFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhDMDAwQjMKKyNkZWZpbmUgU0lTTEFO RFNfVUxWVk9MVEFHRUNIQU5HRURFTEFZX0RGTFQgICAgICAgICAgICAgMTY4NworI2RlZmluZSBT SVNMQU5EU19DR1VMVlBBUkFNRVRFUl9ERkxUICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDM1 CisjZGVmaW5lIFNJU0xBTkRTX0NHVUxWQ09OVFJPTF9ERkxUICAgICAgICAgICAgICAgICAgICAg IDB4MWYwMDc1NTAKKworI2RlZmluZSBTSV9BU0lfREZMVCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTAwMDAKKyNkZWZpbmUgU0lfQlNQX0RGTFQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4NDFFQgorI2RlZmluZSBTSV9CU1VfREZMVCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgyCisjZGVmaW5lIFNJX0FIX0RGTFQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA1CisjZGVmaW5lIFNJX1JMUF9ERkxUICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAyNQorI2RlZmluZSBTSV9STVBfREZMVCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgNjUKKyNkZWZpbmUgU0lfTEhQX0RGTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDQwCisjZGVmaW5lIFNJX0xNUF9ERkxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxNQorI2RlZmluZSBTSV9URF9ERkxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MAorI2RlZmluZSBTSV9VVENfREZMVF8wMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy NAorI2RlZmluZSBTSV9VVENfREZMVF8wMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9VVENfREZMVF8wMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9VVENfREZMVF8wMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9VVENfREZMVF8wNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9VVENfREZMVF8wNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9VVENfREZMVF8wNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9VVENfREZMVF8wNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9VVENfREZMVF8wOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9VVENfREZMVF8wOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9VVENfREZMVF8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9VVENfREZMVF8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9VVENfREZMVF8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9VVENfREZMVF8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9VVENfREZMVF8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9EVENfREZMVF8wMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy NAorI2RlZmluZSBTSV9EVENfREZMVF8wMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9EVENfREZMVF8wMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9EVENfREZMVF8wMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9EVENfREZMVF8wNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9EVENfREZMVF8wNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9EVENfREZMVF8wNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9EVENfREZMVF8wNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9EVENfREZMVF8wOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9EVENfREZMVF8wOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9EVENfREZMVF8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9EVENfREZMVF8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9EVENfREZMVF8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9EVENfREZMVF8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9EVENfREZMVF8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy MgorI2RlZmluZSBTSV9WUkNfREZMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MDAwQzAwMworI2RlZmluZSBTSV9WT0xUQUdFUkVTUE9OU0VUSU1FX0RGTFQgICAgICAgICAgICAg ICAgMTAwMAorI2RlZmluZSBTSV9CQUNLQklBU1JFU1BPTlNFVElNRV9ERkxUICAgICAgICAgICAg ICAgMTAwMAorI2RlZmluZSBTSV9WUlVfREZMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMHgzCisjZGVmaW5lIFNJX1NQTExTVEVQVElNRV9ERkxUICAgICAgICAgICAgICAgICAgICAg ICAweDEwMDAKKyNkZWZpbmUgU0lfU1BMTFNURVBVTklUX0RGTFQgICAgICAgICAgICAgICAgICAg ICAgIDB4MworI2RlZmluZSBTSV9UUFVfREZMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMAorI2RlZmluZSBTSV9UUENfREZMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHgyMDAKKyNkZWZpbmUgU0lfU1NUVV9ERkxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDAKKyNkZWZpbmUgU0lfU1NUX0RGTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDBDOAorI2RlZmluZSBTSV9HSUNTVF9ERkxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHgyMDAKKyNkZWZpbmUgU0lfRkNUX0RGTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4MDQwMAorI2RlZmluZSBTSV9GQ1RVX0RGTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMAorI2RlZmluZSBTSV9DVFhDR1RUM0RSUEhDX0RGTFQgICAgICAgICAgICAgICAgICAgICAg MHgyMAorI2RlZmluZSBTSV9DVFhDR1RUM0RSU0RDX0RGTFQgICAgICAgICAgICAgICAgICAgICAg MHg0MAorI2RlZmluZSBTSV9WRERDM0RPT1JQSENfREZMVCAgICAgICAgICAgICAgICAgICAgICAg MHgxMDAKKyNkZWZpbmUgU0lfVkREQzNET09SU0RDX0RGTFQgICAgICAgICAgICAgICAgICAgICAg IDB4NworI2RlZmluZSBTSV9WRERDM0RPT1JTVV9ERkxUICAgICAgICAgICAgICAgICAgICAgICAg MAorI2RlZmluZSBTSV9NUExMTE9DS1RJTUVfREZMVCAgICAgICAgICAgICAgICAgICAgICAgMTAw CisjZGVmaW5lIFNJX01QTExSRVNFVFRJTUVfREZMVCAgICAgICAgICAgICAgICAgICAgICAxNTAK KyNkZWZpbmUgU0lfVkNPU1RFUFBDVF9ERkxUICAgICAgICAgICAgICAgICAgICAgICAgICAyMAor I2RlZmluZSBTSV9FTkRJTkdWQ09TVEVQUENUX0RGTFQgICAgICAgICAgICAgICAgICAgIDUKKyNk ZWZpbmUgU0lfUkVGRVJFTkNFRElWSURFUl9ERkxUICAgICAgICAgICAgICAgICAgICA0CisKKyNk ZWZpbmUgU0lfUE1fTlVNQkVSX09GX1RDIDE1CisjZGVmaW5lIFNJX1BNX05VTUJFUl9PRl9TQ0xL UyAyMAorI2RlZmluZSBTSV9QTV9OVU1CRVJfT0ZfTUNMS1MgNAorI2RlZmluZSBTSV9QTV9OVU1C RVJfT0ZfVk9MVEFHRV9MRVZFTFMgNAorI2RlZmluZSBTSV9QTV9OVU1CRVJfT0ZfQUNUSVZJVFlf TEVWRUxTIDMKKworLyogWFhYIGFyZSB0aGVzZSBvaz8gKi8KKyNkZWZpbmUgU0lfVEVNUF9SQU5H RV9NSU4gKDkwICogMTAwMCkKKyNkZWZpbmUgU0lfVEVNUF9SQU5HRV9NQVggKDEyMCAqIDEwMDAp CisKKyNkZWZpbmUgRkRPX1BXTV9NT0RFX1NUQVRJQyAgMQorI2RlZmluZSBGRE9fUFdNX01PREVf U1RBVElDX1JQTSA1CisKK2VudW0gbmlfZGNfY2FjX2xldmVsCit7CisJTklTTEFORFNfRENDQUNf TEVWRUxfMCA9IDAsCisJTklTTEFORFNfRENDQUNfTEVWRUxfMSwKKwlOSVNMQU5EU19EQ0NBQ19M RVZFTF8yLAorCU5JU0xBTkRTX0RDQ0FDX0xFVkVMXzMsCisJTklTTEFORFNfRENDQUNfTEVWRUxf NCwKKwlOSVNMQU5EU19EQ0NBQ19MRVZFTF81LAorCU5JU0xBTkRTX0RDQ0FDX0xFVkVMXzYsCisJ TklTTEFORFNfRENDQUNfTEVWRUxfNywKKwlOSVNMQU5EU19EQ0NBQ19NQVhfTEVWRUxTCit9Owor CitlbnVtIHNpX2NhY19jb25maWdfcmVnX3R5cGUKK3sKKwlTSVNMQU5EU19DQUNDT05GSUdfTU1S ID0gMCwKKwlTSVNMQU5EU19DQUNDT05GSUdfQ0dJTkQsCisJU0lTTEFORFNfQ0FDQ09ORklHX01B WAorfTsKKworZW51bSBzaV9wb3dlcl9sZXZlbCB7CisJU0lfUE9XRVJfTEVWRUxfTE9XID0gMCwK KwlTSV9QT1dFUl9MRVZFTF9NRURJVU0gPSAxLAorCVNJX1BPV0VSX0xFVkVMX0hJR0ggPSAyLAor CVNJX1BPV0VSX0xFVkVMX0NUWFNXID0gMywKK307CisKK2VudW0gc2lfdGQgeworCVNJX1REX0FV VE8sCisJU0lfVERfVVAsCisJU0lfVERfRE9XTiwKK307CisKK2VudW0gc2lfZGlzcGxheV93YXRl cm1hcmsgeworCVNJX0RJU1BMQVlfV0FURVJNQVJLX0xPVyA9IDAsCisJU0lfRElTUExBWV9XQVRF Uk1BUktfSElHSCA9IDEsCit9OworCitlbnVtIHNpX2Rpc3BsYXlfZ2FwCit7CisgICAgU0lfUE1f RElTUExBWV9HQVBfVkJMQU5LX09SX1dNID0gMCwKKyAgICBTSV9QTV9ESVNQTEFZX0dBUF9WQkxB TksgICAgICAgPSAxLAorICAgIFNJX1BNX0RJU1BMQVlfR0FQX1dBVEVSTUFSSyAgICA9IDIsCisg ICAgU0lfUE1fRElTUExBWV9HQVBfSUdOT1JFICAgICAgID0gMywKK307CisKK2V4dGVybiBjb25z dCBzdHJ1Y3QgYW1kX2lwX2Z1bmNzIHNpX2RwbV9pcF9mdW5jczsKKworc3RydWN0IG5pX2xlYWth Z2VfY29lZmZpZW50cworeworCXUzMiBhdDsKKwl1MzIgYnQ7CisJdTMyIGF2OworCXUzMiBidjsK KwlzMzIgdF9zbG9wZTsKKwlzMzIgdF9pbnRlcmNlcHQ7CisJdTMyIHRfcmVmOworfTsKKworc3Ry dWN0IFNNQ19FdmVyZ3JlZW5fTUNSZWdpc3RlckFkZHJlc3MKK3sKKyAgICB1aW50MTZfdCBzMDsK KyAgICB1aW50MTZfdCBzMTsKK307CisKK3R5cGVkZWYgc3RydWN0IFNNQ19FdmVyZ3JlZW5fTUNS ZWdpc3RlckFkZHJlc3MgU01DX0V2ZXJncmVlbl9NQ1JlZ2lzdGVyQWRkcmVzczsKKworc3RydWN0 IGV2ZXJncmVlbl9tY19yZWdfZW50cnkgeworCXUzMiBtY2xrX21heDsKKwl1MzIgbWNfZGF0YVtT TUNfRVZFUkdSRUVOX01DX1JFR0lTVEVSX0FSUkFZX1NJWkVdOworfTsKKworc3RydWN0IGV2ZXJn cmVlbl9tY19yZWdfdGFibGUgeworCXU4IGxhc3Q7CisJdTggbnVtX2VudHJpZXM7CisJdTE2IHZh bGlkX2ZsYWc7CisJc3RydWN0IGV2ZXJncmVlbl9tY19yZWdfZW50cnkgbWNfcmVnX3RhYmxlX2Vu dHJ5W01BWF9BQ19USU1JTkdfRU5UUklFU107CisJU01DX0V2ZXJncmVlbl9NQ1JlZ2lzdGVyQWRk cmVzcyBtY19yZWdfYWRkcmVzc1tTTUNfRVZFUkdSRUVOX01DX1JFR0lTVEVSX0FSUkFZX1NJWkVd OworfTsKKworc3RydWN0IFNNQ19FdmVyZ3JlZW5fTUNSZWdpc3RlclNldAoreworICAgIHVpbnQz Ml90IHZhbHVlW1NNQ19FVkVSR1JFRU5fTUNfUkVHSVNURVJfQVJSQVlfU0laRV07Cit9OworCit0 eXBlZGVmIHN0cnVjdCBTTUNfRXZlcmdyZWVuX01DUmVnaXN0ZXJTZXQgU01DX0V2ZXJncmVlbl9N Q1JlZ2lzdGVyU2V0OworCitzdHJ1Y3QgU01DX0V2ZXJncmVlbl9NQ1JlZ2lzdGVycworeworICAg IHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q7CisgICAgdWludDhfdCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRbM107CisgICAgU01DX0V2ZXJncmVl bl9NQ1JlZ2lzdGVyQWRkcmVzcyAgICAgYWRkcmVzc1tTTUNfRVZFUkdSRUVOX01DX1JFR0lTVEVS X0FSUkFZX1NJWkVdOworICAgIFNNQ19FdmVyZ3JlZW5fTUNSZWdpc3RlclNldCAgICAgICAgIGRh dGFbNV07Cit9OworCit0eXBlZGVmIHN0cnVjdCBTTUNfRXZlcmdyZWVuX01DUmVnaXN0ZXJzIFNN Q19FdmVyZ3JlZW5fTUNSZWdpc3RlcnM7CisKK3N0cnVjdCBTTUNfTklzbGFuZHNfTUNSZWdpc3Rl clNldAoreworICAgIHVpbnQzMl90IHZhbHVlW1NNQ19OSVNMQU5EU19NQ19SRUdJU1RFUl9BUlJB WV9TSVpFXTsKK307CisKK3R5cGVkZWYgc3RydWN0IFNNQ19OSXNsYW5kc19NQ1JlZ2lzdGVyU2V0 IFNNQ19OSXNsYW5kc19NQ1JlZ2lzdGVyU2V0OworCitzdHJ1Y3QgbmlfbWNfcmVnX2VudHJ5IHsK Kwl1MzIgbWNsa19tYXg7CisJdTMyIG1jX2RhdGFbU01DX05JU0xBTkRTX01DX1JFR0lTVEVSX0FS UkFZX1NJWkVdOworfTsKKworc3RydWN0IFNNQ19OSXNsYW5kc19NQ1JlZ2lzdGVyQWRkcmVzcwor eworICAgIHVpbnQxNl90IHMwOworICAgIHVpbnQxNl90IHMxOworfTsKKwordHlwZWRlZiBzdHJ1 Y3QgU01DX05Jc2xhbmRzX01DUmVnaXN0ZXJBZGRyZXNzIFNNQ19OSXNsYW5kc19NQ1JlZ2lzdGVy QWRkcmVzczsKKworc3RydWN0IFNNQ19OSXNsYW5kc19NQ1JlZ2lzdGVycworeworICAgIHVpbnQ4 X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q7CisgICAgdWludDhfdCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRbM107CisgICAgU01DX05Jc2xhbmRzX01DUmVn aXN0ZXJBZGRyZXNzICAgICAgYWRkcmVzc1tTTUNfTklTTEFORFNfTUNfUkVHSVNURVJfQVJSQVlf U0laRV07CisgICAgU01DX05Jc2xhbmRzX01DUmVnaXN0ZXJTZXQgICAgICAgICAgZGF0YVtTTUNf TklTTEFORFNfTUNfUkVHSVNURVJfQVJSQVlfU0VUX0NPVU5UXTsKK307CisKK3R5cGVkZWYgc3Ry dWN0IFNNQ19OSXNsYW5kc19NQ1JlZ2lzdGVycyBTTUNfTklzbGFuZHNfTUNSZWdpc3RlcnM7CisK K3N0cnVjdCBldmVyZ3JlZW5fdWx2X3BhcmFtIHsKKwlib29sIHN1cHBvcnRlZDsKKwlzdHJ1Y3Qg cnY3eHhfcGwgKnBsOworfTsKKworc3RydWN0IGV2ZXJncmVlbl9hcmJfcmVnaXN0ZXJzIHsKKwl1 MzIgbWNfYXJiX2RyYW1fdGltaW5nOworCXUzMiBtY19hcmJfZHJhbV90aW1pbmcyOworCXUzMiBt Y19hcmJfcmZzaF9yYXRlOworCXUzMiBtY19hcmJfYnVyc3RfdGltZTsKK307CisKK3N0cnVjdCBh dCB7CisJdTMyIHJscDsKKwl1MzIgcm1wOworCXUzMiBsaHA7CisJdTMyIGxtcDsKK307CisKK3N0 cnVjdCBuaV9jbG9ja19yZWdpc3RlcnMgeworCXUzMiBjZ19zcGxsX2Z1bmNfY250bDsKKwl1MzIg Y2dfc3BsbF9mdW5jX2NudGxfMjsKKwl1MzIgY2dfc3BsbF9mdW5jX2NudGxfMzsKKwl1MzIgY2df c3BsbF9mdW5jX2NudGxfNDsKKwl1MzIgY2dfc3BsbF9zcHJlYWRfc3BlY3RydW07CisJdTMyIGNn X3NwbGxfc3ByZWFkX3NwZWN0cnVtXzI7CisJdTMyIG1jbGtfcHdybWd0X2NudGw7CisJdTMyIGRs bF9jbnRsOworCXUzMiBtcGxsX2FkX2Z1bmNfY250bDsKKwl1MzIgbXBsbF9hZF9mdW5jX2NudGxf MjsKKwl1MzIgbXBsbF9kcV9mdW5jX2NudGw7CisJdTMyIG1wbGxfZHFfZnVuY19jbnRsXzI7CisJ dTMyIG1wbGxfc3MxOworCXUzMiBtcGxsX3NzMjsKK307CisKK3N0cnVjdCBSVjc3MF9TTUNfU0NM S19WQUxVRQoreworICAgIHVpbnQzMl90ICAgICAgICB2Q0dfU1BMTF9GVU5DX0NOVEw7CisgICAg dWludDMyX3QgICAgICAgIHZDR19TUExMX0ZVTkNfQ05UTF8yOworICAgIHVpbnQzMl90ICAgICAg ICB2Q0dfU1BMTF9GVU5DX0NOVExfMzsKKyAgICB1aW50MzJfdCAgICAgICAgdkNHX1NQTExfU1BS RUFEX1NQRUNUUlVNOworICAgIHVpbnQzMl90ICAgICAgICB2Q0dfU1BMTF9TUFJFQURfU1BFQ1RS VU1fMjsKKyAgICB1aW50MzJfdCAgICAgICAgc2Nsa192YWx1ZTsKK307CisKK3R5cGVkZWYgc3Ry dWN0IFJWNzcwX1NNQ19TQ0xLX1ZBTFVFIFJWNzcwX1NNQ19TQ0xLX1ZBTFVFOworCitzdHJ1Y3Qg UlY3NzBfU01DX01DTEtfVkFMVUUKK3sKKyAgICB1aW50MzJfdCAgICAgICAgdk1QTExfQURfRlVO Q19DTlRMOworICAgIHVpbnQzMl90ICAgICAgICB2TVBMTF9BRF9GVU5DX0NOVExfMjsKKyAgICB1 aW50MzJfdCAgICAgICAgdk1QTExfRFFfRlVOQ19DTlRMOworICAgIHVpbnQzMl90ICAgICAgICB2 TVBMTF9EUV9GVU5DX0NOVExfMjsKKyAgICB1aW50MzJfdCAgICAgICAgdk1DTEtfUFdSTUdUX0NO VEw7CisgICAgdWludDMyX3QgICAgICAgIHZETExfQ05UTDsKKyAgICB1aW50MzJfdCAgICAgICAg dk1QTExfU1M7CisgICAgdWludDMyX3QgICAgICAgIHZNUExMX1NTMjsKKyAgICB1aW50MzJfdCAg ICAgICAgbWNsa192YWx1ZTsKK307CisKK3R5cGVkZWYgc3RydWN0IFJWNzcwX1NNQ19NQ0xLX1ZB TFVFIFJWNzcwX1NNQ19NQ0xLX1ZBTFVFOworCisKK3N0cnVjdCBSVjczMF9TTUNfTUNMS19WQUxV RQoreworICAgIHVpbnQzMl90ICAgICAgICB2TUNMS19QV1JNR1RfQ05UTDsKKyAgICB1aW50MzJf dCAgICAgICAgdkRMTF9DTlRMOworICAgIHVpbnQzMl90ICAgICAgICB2TVBMTF9GVU5DX0NOVEw7 CisgICAgdWludDMyX3QgICAgICAgIHZNUExMX0ZVTkNfQ05UTDI7CisgICAgdWludDMyX3QgICAg ICAgIHZNUExMX0ZVTkNfQ05UTDM7CisgICAgdWludDMyX3QgICAgICAgIHZNUExMX1NTOworICAg IHVpbnQzMl90ICAgICAgICB2TVBMTF9TUzI7CisgICAgdWludDMyX3QgICAgICAgIG1jbGtfdmFs dWU7Cit9OworCit0eXBlZGVmIHN0cnVjdCBSVjczMF9TTUNfTUNMS19WQUxVRSBSVjczMF9TTUNf TUNMS19WQUxVRTsKKworc3RydWN0IFJWNzcwX1NNQ19WT0xUQUdFX1ZBTFVFCit7CisgICAgdWlu dDE2X3QgICAgICAgICAgICAgdmFsdWU7CisgICAgdWludDhfdCAgICAgICAgICAgICAgaW5kZXg7 CisgICAgdWludDhfdCAgICAgICAgICAgICAgcGFkZGluZzsKK307CisKK3R5cGVkZWYgc3RydWN0 IFJWNzcwX1NNQ19WT0xUQUdFX1ZBTFVFIFJWNzcwX1NNQ19WT0xUQUdFX1ZBTFVFOworCit1bmlv biBSVjdYWF9TTUNfTUNMS19WQUxVRQoreworICAgIFJWNzcwX1NNQ19NQ0xLX1ZBTFVFICAgIG1j bGs3NzA7CisgICAgUlY3MzBfU01DX01DTEtfVkFMVUUgICAgbWNsazczMDsKK307CisKK3R5cGVk ZWYgdW5pb24gUlY3WFhfU01DX01DTEtfVkFMVUUgUlY3WFhfU01DX01DTEtfVkFMVUUsICpMUFJW N1hYX1NNQ19NQ0xLX1ZBTFVFOworCitzdHJ1Y3QgUlY3NzBfU01DX0hXX1BFUkZPUk1BTkNFX0xF VkVMCit7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgYXJiVmFsdWU7CisgICAgdW5pb257 CisgICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAgc2VxVmFsdWU7CisgICAgICAgIHVpbnQ4X3Qg ICAgICAgICAgICAgQUNJbmRleDsKKyAgICB9OworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAg IGRpc3BsYXlXYXRlcm1hcms7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgZ2VuMlBDSUU7 CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgZ2VuMlhTUDsKKyAgICB1aW50OF90ICAgICAg ICAgICAgICAgICBiYWNrYmlhczsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBzdHJvYmVN b2RlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIG1jRmxhZ3M7CisgICAgdWludDMyX3Qg ICAgICAgICAgICAgICAgYVQ7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgYlNQOworICAg IFJWNzcwX1NNQ19TQ0xLX1ZBTFVFICAgIHNjbGs7CisgICAgUlY3WFhfU01DX01DTEtfVkFMVUUg ICAgbWNsazsKKyAgICBSVjc3MF9TTUNfVk9MVEFHRV9WQUxVRSB2ZGRjOworICAgIFJWNzcwX1NN Q19WT0xUQUdFX1ZBTFVFIG12ZGQ7CisgICAgUlY3NzBfU01DX1ZPTFRBR0VfVkFMVUUgdmRkY2k7 CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQxOworICAgIHVpbnQ4X3QgICAg ICAgICAgICAgICAgIHJlc2VydmVkMjsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICBzdGF0 ZUZsYWdzOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIHBhZGRpbmc7Cit9OworCit0eXBl ZGVmIHN0cnVjdCBSVjc3MF9TTUNfSFdfUEVSRk9STUFOQ0VfTEVWRUwgUlY3NzBfU01DX0hXX1BF UkZPUk1BTkNFX0xFVkVMOworCitzdHJ1Y3QgUlY3NzBfU01DX1NXU1RBVEUKK3sKKyAgICB1aW50 OF90ICAgICAgICAgICBmbGFnczsKKyAgICB1aW50OF90ICAgICAgICAgICBwYWRkaW5nMTsKKyAg ICB1aW50OF90ICAgICAgICAgICBwYWRkaW5nMjsKKyAgICB1aW50OF90ICAgICAgICAgICBwYWRk aW5nMzsKKyAgICBSVjc3MF9TTUNfSFdfUEVSRk9STUFOQ0VfTEVWRUwgbGV2ZWxzW1JWNzcwX1NN Q19QRVJGT1JNQU5DRV9MRVZFTFNfUEVSX1NXU1RBVEVdOworfTsKKwordHlwZWRlZiBzdHJ1Y3Qg UlY3NzBfU01DX1NXU1RBVEUgUlY3NzBfU01DX1NXU1RBVEU7CisKK3N0cnVjdCBSVjc3MF9TTUNf Vk9MVEFHRU1BU0tUQUJMRQoreworICAgIHVpbnQ4X3QgIGhpZ2hNYXNrW1JWNzcwX1NNQ19WT0xU QUdFTUFTS19NQVhdOworICAgIHVpbnQzMl90IGxvd01hc2tbUlY3NzBfU01DX1ZPTFRBR0VNQVNL X01BWF07Cit9OworCit0eXBlZGVmIHN0cnVjdCBSVjc3MF9TTUNfVk9MVEFHRU1BU0tUQUJMRSBS Vjc3MF9TTUNfVk9MVEFHRU1BU0tUQUJMRTsKKworc3RydWN0IFJWNzcwX1NNQ19TVEFURVRBQkxF Cit7CisgICAgdWludDhfdCAgICAgICAgICAgICB0aGVybWFsUHJvdGVjdFR5cGU7CisgICAgdWlu dDhfdCAgICAgICAgICAgICBzeXN0ZW1GbGFnczsKKyAgICB1aW50OF90ICAgICAgICAgICAgIG1h eFZERENJbmRleEluUFBUYWJsZTsKKyAgICB1aW50OF90ICAgICAgICAgICAgIGV4dHJhRmxhZ3M7 CisgICAgdWludDhfdCAgICAgICAgICAgICBoaWdoU01JT1tNQVhfTk9fVlJFR19TVEVQU107Cisg ICAgdWludDMyX3QgICAgICAgICAgICBsb3dTTUlPW01BWF9OT19WUkVHX1NURVBTXTsKKyAgICBS Vjc3MF9TTUNfVk9MVEFHRU1BU0tUQUJMRSB2b2x0YWdlTWFza1RhYmxlOworICAgIFJWNzcwX1NN Q19TV1NUQVRFICAgaW5pdGlhbFN0YXRlOworICAgIFJWNzcwX1NNQ19TV1NUQVRFICAgQUNQSVN0 YXRlOworICAgIFJWNzcwX1NNQ19TV1NUQVRFICAgZHJpdmVyU3RhdGU7CisgICAgUlY3NzBfU01D X1NXU1RBVEUgICBVTFZTdGF0ZTsKK307CisKK3R5cGVkZWYgc3RydWN0IFJWNzcwX1NNQ19TVEFU RVRBQkxFIFJWNzcwX1NNQ19TVEFURVRBQkxFOworCitzdHJ1Y3QgdmRkY190YWJsZV9lbnRyeSB7 CisJdTE2IHZkZGM7CisJdTggdmRkY19pbmRleDsKKwl1OCBoaWdoX3NtaW87CisJdTMyIGxvd19z bWlvOworfTsKKworc3RydWN0IHJ2NzcwX2Nsb2NrX3JlZ2lzdGVycyB7CisJdTMyIGNnX3NwbGxf ZnVuY19jbnRsOworCXUzMiBjZ19zcGxsX2Z1bmNfY250bF8yOworCXUzMiBjZ19zcGxsX2Z1bmNf Y250bF8zOworCXUzMiBjZ19zcGxsX3NwcmVhZF9zcGVjdHJ1bTsKKwl1MzIgY2dfc3BsbF9zcHJl YWRfc3BlY3RydW1fMjsKKwl1MzIgbXBsbF9hZF9mdW5jX2NudGw7CisJdTMyIG1wbGxfYWRfZnVu Y19jbnRsXzI7CisJdTMyIG1wbGxfZHFfZnVuY19jbnRsOworCXUzMiBtcGxsX2RxX2Z1bmNfY250 bF8yOworCXUzMiBtY2xrX3B3cm1ndF9jbnRsOworCXUzMiBkbGxfY250bDsKKwl1MzIgbXBsbF9z czE7CisJdTMyIG1wbGxfc3MyOworfTsKKworc3RydWN0IHJ2NzMwX2Nsb2NrX3JlZ2lzdGVycyB7 CisJdTMyIGNnX3NwbGxfZnVuY19jbnRsOworCXUzMiBjZ19zcGxsX2Z1bmNfY250bF8yOworCXUz MiBjZ19zcGxsX2Z1bmNfY250bF8zOworCXUzMiBjZ19zcGxsX3NwcmVhZF9zcGVjdHJ1bTsKKwl1 MzIgY2dfc3BsbF9zcHJlYWRfc3BlY3RydW1fMjsKKwl1MzIgbWNsa19wd3JtZ3RfY250bDsKKwl1 MzIgZGxsX2NudGw7CisJdTMyIG1wbGxfZnVuY19jbnRsOworCXUzMiBtcGxsX2Z1bmNfY250bDI7 CisJdTMyIG1wbGxfZnVuY19jbnRsMzsKKwl1MzIgbXBsbF9zczsKKwl1MzIgbXBsbF9zczI7Cit9 OworCit1bmlvbiByN3h4X2Nsb2NrX3JlZ2lzdGVycyB7CisJc3RydWN0IHJ2NzcwX2Nsb2NrX3Jl Z2lzdGVycyBydjc3MDsKKwlzdHJ1Y3QgcnY3MzBfY2xvY2tfcmVnaXN0ZXJzIHJ2NzMwOworfTsK Kworc3RydWN0IHJ2N3h4X3Bvd2VyX2luZm8geworCS8qIGZsYWdzICovCisJYm9vbCBtZW1fZ2Rk cjU7CisJYm9vbCBwY2llX2dlbjI7CisJYm9vbCBkeW5hbWljX3BjaWVfZ2VuMjsKKwlib29sIGFj cGlfcGNpZV9nZW4yOworCWJvb2wgYm9vdF9pbl9nZW4yOworCWJvb2wgdm9sdGFnZV9jb250cm9s OyAvKiB2ZGRjICovCisJYm9vbCBtdmRkX2NvbnRyb2w7CisJYm9vbCBzY2xrX3NzOworCWJvb2wg bWNsa19zczsKKwlib29sIGR5bmFtaWNfc3M7CisJYm9vbCBnZnhfY2xvY2tfZ2F0aW5nOworCWJv b2wgbWdfY2xvY2tfZ2F0aW5nOworCWJvb2wgbWdjZ3Rzc207CisJYm9vbCBwb3dlcl9nYXRpbmc7 CisJYm9vbCB0aGVybWFsX3Byb3RlY3Rpb247CisJYm9vbCBkaXNwbGF5X2dhcDsKKwlib29sIGRj b2R0OworCWJvb2wgdWxwczsKKwkvKiByZWdpc3RlcnMgKi8KKwl1bmlvbiByN3h4X2Nsb2NrX3Jl Z2lzdGVycyBjbGtfcmVnczsKKwl1MzIgczBfdmlkX2xvd2VyX3NtaW9fY250bDsKKwkvKiB2b2x0 YWdlICovCisJdTMyIHZkZGNfbWFza19sb3c7CisJdTMyIG12ZGRfbWFza19sb3c7CisJdTMyIG12 ZGRfc3BsaXRfZnJlcXVlbmN5OworCXUzMiBtdmRkX2xvd19zbWlvW01BWF9OT19PRl9NVkREX1ZB TFVFU107CisJdTE2IG1heF92ZGRjOworCXUxNiBtYXhfdmRkY19pbl90YWJsZTsKKwl1MTYgbWlu X3ZkZGNfaW5fdGFibGU7CisJc3RydWN0IHZkZGNfdGFibGVfZW50cnkgdmRkY190YWJsZVtNQVhf Tk9fVlJFR19TVEVQU107CisJdTggdmFsaWRfdmRkY19lbnRyaWVzOworCS8qIGRjIG9kdCAqLwor CXUzMiBtY2xrX29kdF90aHJlc2hvbGQ7CisJdTggb2R0X3ZhbHVlXzBbMl07CisJdTggb2R0X3Zh bHVlXzFbMl07CisJLyogc3RvcmVkIHZhbHVlcyAqLworCXUzMiBib290X3NjbGs7CisJdTE2IGFj cGlfdmRkYzsKKwl1MzIgcmVmX2RpdjsKKwl1MzIgYWN0aXZlX2F1dG9fdGhyb3R0bGVfc291cmNl czsKKwl1MzIgbWNsa19zdHV0dGVyX21vZGVfdGhyZXNob2xkOworCXUzMiBtY2xrX3N0cm9iZV9t b2RlX3RocmVzaG9sZDsKKwl1MzIgbWNsa19lZGNfZW5hYmxlX3RocmVzaG9sZDsKKwl1MzIgYnNw OworCXUzMiBic3U7CisJdTMyIHBic3A7CisJdTMyIHBic3U7CisJdTMyIGRzcDsKKwl1MzIgcHNw OworCXUzMiBhc2k7CisJdTMyIHBhc2k7CisJdTMyIHZyYzsKKwl1MzIgcmVzdHJpY3RlZF9sZXZl bHM7CisJdTMyIHJscDsKKwl1MzIgcm1wOworCXUzMiBsaHA7CisJdTMyIGxtcDsKKwkvKiBzbWMg b2Zmc2V0cyAqLworCXUxNiBzdGF0ZV90YWJsZV9zdGFydDsKKwl1MTYgc29mdF9yZWdzX3N0YXJ0 OworCXUxNiBzcmFtX2VuZDsKKwkvKiBzY3JhdGNoIHN0cnVjdHMgKi8KKwlSVjc3MF9TTUNfU1RB VEVUQUJMRSBzbWNfc3RhdGV0YWJsZTsKK307CisKK3N0cnVjdCBydjd4eF9wbCB7CisJdTMyIHNj bGs7CisJdTMyIG1jbGs7CisJdTE2IHZkZGM7CisJdTE2IHZkZGNpOyAvKiBlZysgb25seSAqLwor CXUzMiBmbGFnczsKKwllbnVtIGFtZGdwdV9wY2llX2dlbiBwY2llX2dlbjsgLyogc2krIG9ubHkg Ki8KK307CisKK3N0cnVjdCBydjd4eF9wcyB7CisJc3RydWN0IHJ2N3h4X3BsIGhpZ2g7CisJc3Ry dWN0IHJ2N3h4X3BsIG1lZGl1bTsKKwlzdHJ1Y3QgcnY3eHhfcGwgbG93OworCWJvb2wgZGNfY29t cGF0aWJsZTsKK307CisKK3N0cnVjdCBzaV9wcyB7CisJdTE2IHBlcmZvcm1hbmNlX2xldmVsX2Nv dW50OworCWJvb2wgZGNfY29tcGF0aWJsZTsKKwlzdHJ1Y3QgcnY3eHhfcGwgcGVyZm9ybWFuY2Vf bGV2ZWxzW05JU0xBTkRTX01BWF9TTUNfUEVSRk9STUFOQ0VfTEVWRUxTX1BFUl9TV1NUQVRFXTsK K307CisKK3N0cnVjdCBuaV9tY19yZWdfdGFibGUgeworCXU4IGxhc3Q7CisJdTggbnVtX2VudHJp ZXM7CisJdTE2IHZhbGlkX2ZsYWc7CisJc3RydWN0IG5pX21jX3JlZ19lbnRyeSBtY19yZWdfdGFi bGVfZW50cnlbTUFYX0FDX1RJTUlOR19FTlRSSUVTXTsKKwlTTUNfTklzbGFuZHNfTUNSZWdpc3Rl ckFkZHJlc3MgbWNfcmVnX2FkZHJlc3NbU01DX05JU0xBTkRTX01DX1JFR0lTVEVSX0FSUkFZX1NJ WkVdOworfTsKKworc3RydWN0IG5pX2NhY19kYXRhCit7CisJc3RydWN0IG5pX2xlYWthZ2VfY29l ZmZpZW50cyBsZWFrYWdlX2NvZWZmaWNpZW50czsKKwl1MzIgaV9sZWFrYWdlOworCXMzMiBsZWFr YWdlX21pbmltdW1fdGVtcGVyYXR1cmU7CisJdTMyIHB3cl9jb25zdDsKKwl1MzIgZGNfY2FjX3Zh bHVlOworCXUzMiBiaWZfY2FjX3ZhbHVlOworCXUzMiBsa2dlX3B3cjsKKwl1OCBtY193cl93ZWln aHQ7CisJdTggbWNfcmRfd2VpZ2h0OworCXU4IGFsbG93X292cmZsdzsKKwl1OCBudW1fd2luX3Rk cDsKKwl1OCBsMm51bV93aW5fdGRwOworCXU4IGx0c190cnVuY2F0ZV9uOworfTsKKworc3RydWN0 IGV2ZXJncmVlbl9wb3dlcl9pbmZvIHsKKwkvKiBtdXN0IGJlIGZpcnN0ISAqLworCXN0cnVjdCBy djd4eF9wb3dlcl9pbmZvIHJ2N3h4OworCS8qIGZsYWdzICovCisJYm9vbCB2ZGRjaV9jb250cm9s OworCWJvb2wgZHluYW1pY19hY190aW1pbmc7CisJYm9vbCBhYm07CisJYm9vbCBtY2xzOworCWJv b2wgbGlnaHRfc2xlZXA7CisJYm9vbCBtZW1vcnlfdHJhbnNpdGlvbjsKKwlib29sIHBjaWVfcGVy Zm9ybWFuY2VfcmVxdWVzdDsKKwlib29sIHBjaWVfcGVyZm9ybWFuY2VfcmVxdWVzdF9yZWdpc3Rl cmVkOworCWJvb2wgc2Nsa19kZWVwX3NsZWVwOworCWJvb2wgZGxsX2RlZmF1bHRfb247CisJYm9v bCBsc19jbG9ja19nYXRpbmc7CisJYm9vbCBzbXVfdXZkX2hzOworCWJvb2wgdXZkX2VuYWJsZWQ7 CisJLyogc3RvcmVkIHZhbHVlcyAqLworCXUxNiBhY3BpX3ZkZGNpOworCXU4IG12ZGRfaGlnaF9p bmRleDsKKwl1OCBtdmRkX2xvd19pbmRleDsKKwl1MzIgbWNsa19lZGNfd3JfZW5hYmxlX3RocmVz aG9sZDsKKwlzdHJ1Y3QgZXZlcmdyZWVuX21jX3JlZ190YWJsZSBtY19yZWdfdGFibGU7CisJc3Ry dWN0IGF0b21fdm9sdGFnZV90YWJsZSB2ZGRjX3ZvbHRhZ2VfdGFibGU7CisJc3RydWN0IGF0b21f dm9sdGFnZV90YWJsZSB2ZGRjaV92b2x0YWdlX3RhYmxlOworCXN0cnVjdCBldmVyZ3JlZW5fYXJi X3JlZ2lzdGVycyBib290dXBfYXJiX3JlZ2lzdGVyczsKKwlzdHJ1Y3QgZXZlcmdyZWVuX3Vsdl9w YXJhbSB1bHY7CisJc3RydWN0IGF0IGF0c1syXTsKKwkvKiBzbWMgb2Zmc2V0cyAqLworCXUxNiBt Y19yZWdfdGFibGVfc3RhcnQ7CisJc3RydWN0IGFtZGdwdV9wcyBjdXJyZW50X3JwczsKKwlzdHJ1 Y3QgcnY3eHhfcHMgY3VycmVudF9wczsKKwlzdHJ1Y3QgYW1kZ3B1X3BzIHJlcXVlc3RlZF9ycHM7 CisJc3RydWN0IHJ2N3h4X3BzIHJlcXVlc3RlZF9wczsKK307CisKK3N0cnVjdCBQUF9OSXNsYW5k c19EcG0yUGVyZkxldmVsCit7CisgICAgdWludDhfdCAgICAgTWF4UFM7CisgICAgdWludDhfdCAg ICAgVGd0QWN0OworICAgIHVpbnQ4X3QgICAgIE1heFBTX1N0ZXBJbmM7CisgICAgdWludDhfdCAg ICAgTWF4UFNfU3RlcERlYzsKKyAgICB1aW50OF90ICAgICBQU1NUOworICAgIHVpbnQ4X3QgICAg IE5lYXJURFBEZWM7CisgICAgdWludDhfdCAgICAgQWJvdmVTYWZlSW5jOworICAgIHVpbnQ4X3Qg ICAgIEJlbG93U2FmZUluYzsKKyAgICB1aW50OF90ICAgICBQU0RlbHRhTGltaXQ7CisgICAgdWlu dDhfdCAgICAgUFNEZWx0YVdpbjsKKyAgICB1aW50OF90ICAgICBSZXNlcnZlZFs2XTsKK307CisK K3R5cGVkZWYgc3RydWN0IFBQX05Jc2xhbmRzX0RwbTJQZXJmTGV2ZWwgUFBfTklzbGFuZHNfRHBt MlBlcmZMZXZlbDsKKworc3RydWN0IFBQX05Jc2xhbmRzX0RQTTJQYXJhbWV0ZXJzCit7CisgICAg dWludDMyX3QgICAgVERQTGltaXQ7CisgICAgdWludDMyX3QgICAgTmVhclREUExpbWl0OworICAg IHVpbnQzMl90ICAgIFNhZmVQb3dlckxpbWl0OworICAgIHVpbnQzMl90ICAgIFBvd2VyQm9vc3RM aW1pdDsKK307Cit0eXBlZGVmIHN0cnVjdCBQUF9OSXNsYW5kc19EUE0yUGFyYW1ldGVycyBQUF9O SXNsYW5kc19EUE0yUGFyYW1ldGVyczsKKworc3RydWN0IE5JU0xBTkRTX1NNQ19TQ0xLX1ZBTFVF Cit7CisgICAgdWludDMyX3QgICAgICAgIHZDR19TUExMX0ZVTkNfQ05UTDsKKyAgICB1aW50MzJf dCAgICAgICAgdkNHX1NQTExfRlVOQ19DTlRMXzI7CisgICAgdWludDMyX3QgICAgICAgIHZDR19T UExMX0ZVTkNfQ05UTF8zOworICAgIHVpbnQzMl90ICAgICAgICB2Q0dfU1BMTF9GVU5DX0NOVExf NDsKKyAgICB1aW50MzJfdCAgICAgICAgdkNHX1NQTExfU1BSRUFEX1NQRUNUUlVNOworICAgIHVp bnQzMl90ICAgICAgICB2Q0dfU1BMTF9TUFJFQURfU1BFQ1RSVU1fMjsKKyAgICB1aW50MzJfdCAg ICAgICAgc2Nsa192YWx1ZTsKK307CisKK3R5cGVkZWYgc3RydWN0IE5JU0xBTkRTX1NNQ19TQ0xL X1ZBTFVFIE5JU0xBTkRTX1NNQ19TQ0xLX1ZBTFVFOworCitzdHJ1Y3QgTklTTEFORFNfU01DX01D TEtfVkFMVUUKK3sKKyAgICB1aW50MzJfdCAgICAgICAgdk1QTExfRlVOQ19DTlRMOworICAgIHVp bnQzMl90ICAgICAgICB2TVBMTF9GVU5DX0NOVExfMTsKKyAgICB1aW50MzJfdCAgICAgICAgdk1Q TExfRlVOQ19DTlRMXzI7CisgICAgdWludDMyX3QgICAgICAgIHZNUExMX0FEX0ZVTkNfQ05UTDsK KyAgICB1aW50MzJfdCAgICAgICAgdk1QTExfQURfRlVOQ19DTlRMXzI7CisgICAgdWludDMyX3Qg ICAgICAgIHZNUExMX0RRX0ZVTkNfQ05UTDsKKyAgICB1aW50MzJfdCAgICAgICAgdk1QTExfRFFf RlVOQ19DTlRMXzI7CisgICAgdWludDMyX3QgICAgICAgIHZNQ0xLX1BXUk1HVF9DTlRMOworICAg IHVpbnQzMl90ICAgICAgICB2RExMX0NOVEw7CisgICAgdWludDMyX3QgICAgICAgIHZNUExMX1NT OworICAgIHVpbnQzMl90ICAgICAgICB2TVBMTF9TUzI7CisgICAgdWludDMyX3QgICAgICAgIG1j bGtfdmFsdWU7Cit9OworCit0eXBlZGVmIHN0cnVjdCBOSVNMQU5EU19TTUNfTUNMS19WQUxVRSBO SVNMQU5EU19TTUNfTUNMS19WQUxVRTsKKworc3RydWN0IE5JU0xBTkRTX1NNQ19WT0xUQUdFX1ZB TFVFCit7CisgICAgdWludDE2X3QgICAgICAgICAgICAgdmFsdWU7CisgICAgdWludDhfdCAgICAg ICAgICAgICAgaW5kZXg7CisgICAgdWludDhfdCAgICAgICAgICAgICAgcGFkZGluZzsKK307CisK K3R5cGVkZWYgc3RydWN0IE5JU0xBTkRTX1NNQ19WT0xUQUdFX1ZBTFVFIE5JU0xBTkRTX1NNQ19W T0xUQUdFX1ZBTFVFOworCitzdHJ1Y3QgTklTTEFORFNfU01DX0hXX1BFUkZPUk1BTkNFX0xFVkVM Cit7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgIGFyYlZhbHVlOworICAgIHVpbnQ4 X3QgICAgICAgICAgICAgICAgICAgICBBQ0luZGV4OworICAgIHVpbnQ4X3QgICAgICAgICAgICAg ICAgICAgICBkaXNwbGF5V2F0ZXJtYXJrOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAg ICBnZW4yUENJRTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQxOwor ICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDI7CisgICAgdWludDhfdCAg ICAgICAgICAgICAgICAgICAgIHN0cm9iZU1vZGU7CisgICAgdWludDhfdCAgICAgICAgICAgICAg ICAgICAgIG1jRmxhZ3M7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIGFUOworICAg IHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBiU1A7CisgICAgTklTTEFORFNfU01DX1NDTEtf VkFMVUUgICAgIHNjbGs7CisgICAgTklTTEFORFNfU01DX01DTEtfVkFMVUUgICAgIG1jbGs7Cisg ICAgTklTTEFORFNfU01DX1ZPTFRBR0VfVkFMVUUgIHZkZGM7CisgICAgTklTTEFORFNfU01DX1ZP TFRBR0VfVkFMVUUgIG12ZGQ7CisgICAgTklTTEFORFNfU01DX1ZPTFRBR0VfVkFMVUUgIHZkZGNp OworICAgIE5JU0xBTkRTX1NNQ19WT0xUQUdFX1ZBTFVFICBzdGRfdmRkYzsKKyAgICB1aW50MzJf dCAgICAgICAgICAgICAgICAgICAgcG93ZXJnYXRlX2VuOworICAgIHVpbnQ4X3QgICAgICAgICAg ICAgICAgICAgICBoVXA7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgIGhEb3duOwor ICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICBzdGF0ZUZsYWdzOworICAgIHVpbnQ4X3Qg ICAgICAgICAgICAgICAgICAgICBhcmJSZWZyZXNoU3RhdGU7CisgICAgdWludDMyX3QgICAgICAg ICAgICAgICAgICAgIFNRUG93ZXJUaHJvdHRsZTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAg ICAgICAgU1FQb3dlclRocm90dGxlXzI7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAg IHJlc2VydmVkWzJdOworICAgIFBQX05Jc2xhbmRzX0RwbTJQZXJmTGV2ZWwgICBkcG0yOworfTsK KwordHlwZWRlZiBzdHJ1Y3QgTklTTEFORFNfU01DX0hXX1BFUkZPUk1BTkNFX0xFVkVMIE5JU0xB TkRTX1NNQ19IV19QRVJGT1JNQU5DRV9MRVZFTDsKKworc3RydWN0IE5JU0xBTkRTX1NNQ19TV1NU QVRFCit7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7Cisg ICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxDb3VudDsKKyAgICB1 aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nMjsKKyAgICB1aW50OF90 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nMzsKKyAgICBOSVNMQU5EU19TTUNf SFdfUEVSRk9STUFOQ0VfTEVWRUwgICBsZXZlbHNbMV07Cit9OworCit0eXBlZGVmIHN0cnVjdCBO SVNMQU5EU19TTUNfU1dTVEFURSBOSVNMQU5EU19TTUNfU1dTVEFURTsKKworc3RydWN0IE5JU0xB TkRTX1NNQ19WT0xUQUdFTUFTS1RBQkxFCit7CisgICAgdWludDhfdCAgaGlnaE1hc2tbTklTTEFO RFNfU01DX1ZPTFRBR0VNQVNLX01BWF07CisgICAgdWludDMyX3QgbG93TWFza1tOSVNMQU5EU19T TUNfVk9MVEFHRU1BU0tfTUFYXTsKK307CisKK3R5cGVkZWYgc3RydWN0IE5JU0xBTkRTX1NNQ19W T0xUQUdFTUFTS1RBQkxFIE5JU0xBTkRTX1NNQ19WT0xUQUdFTUFTS1RBQkxFOworCisjZGVmaW5l IE5JU0xBTkRTX01BWF9OT19WUkVHX1NURVBTIDMyCisKK3N0cnVjdCBOSVNMQU5EU19TTUNfU1RB VEVUQUJMRQoreworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXJt YWxQcm90ZWN0VHlwZTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz eXN0ZW1GbGFnczsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhW RERDSW5kZXhJblBQVGFibGU7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZXh0cmFGbGFnczsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo aWdoU01JT1tOSVNMQU5EU19NQVhfTk9fVlJFR19TVEVQU107CisgICAgdWludDMyX3QgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbG93U01JT1tOSVNMQU5EU19NQVhfTk9fVlJFR19TVEVQU107 CisgICAgTklTTEFORFNfU01DX1ZPTFRBR0VNQVNLVEFCTEUgICAgICAgdm9sdGFnZU1hc2tUYWJs ZTsKKyAgICBQUF9OSXNsYW5kc19EUE0yUGFyYW1ldGVycyAgICAgICAgICBkcG0yUGFyYW1zOwor ICAgIE5JU0xBTkRTX1NNQ19TV1NUQVRFICAgICAgICAgICAgICAgIGluaXRpYWxTdGF0ZTsKKyAg ICBOSVNMQU5EU19TTUNfU1dTVEFURSAgICAgICAgICAgICAgICBBQ1BJU3RhdGU7CisgICAgTklT TEFORFNfU01DX1NXU1RBVEUgICAgICAgICAgICAgICAgVUxWU3RhdGU7CisgICAgTklTTEFORFNf U01DX1NXU1RBVEUgICAgICAgICAgICAgICAgZHJpdmVyU3RhdGU7CisgICAgTklTTEFORFNfU01D X0hXX1BFUkZPUk1BTkNFX0xFVkVMICAgZHBtTGV2ZWxzW05JU0xBTkRTX01BWF9TTUNfUEVSRk9S TUFOQ0VfTEVWRUxTX1BFUl9TV1NUQVRFIC0gMV07Cit9OworCit0eXBlZGVmIHN0cnVjdCBOSVNM QU5EU19TTUNfU1RBVEVUQUJMRSBOSVNMQU5EU19TTUNfU1RBVEVUQUJMRTsKKworc3RydWN0IG5p X3Bvd2VyX2luZm8geworCS8qIG11c3QgYmUgZmlyc3QhICovCisJc3RydWN0IGV2ZXJncmVlbl9w b3dlcl9pbmZvIGVnOworCXN0cnVjdCBuaV9jbG9ja19yZWdpc3RlcnMgY2xvY2tfcmVnaXN0ZXJz OworCXN0cnVjdCBuaV9tY19yZWdfdGFibGUgbWNfcmVnX3RhYmxlOworCXUzMiBtY2xrX3J0dF9t b2RlX3RocmVzaG9sZDsKKwkvKiBmbGFncyAqLworCWJvb2wgdXNlX3Bvd2VyX2Jvb3N0X2xpbWl0 OworCWJvb2wgc3VwcG9ydF9jYWNfbG9uZ190ZXJtX2F2ZXJhZ2U7CisJYm9vbCBjYWNfZW5hYmxl ZDsKKwlib29sIGNhY19jb25maWd1cmF0aW9uX3JlcXVpcmVkOworCWJvb2wgZHJpdmVyX2NhbGN1 bGF0ZV9jYWNfbGVha2FnZTsKKwlib29sIHBjX2VuYWJsZWQ7CisJYm9vbCBlbmFibGVfcG93ZXJf Y29udGFpbm1lbnQ7CisJYm9vbCBlbmFibGVfY2FjOworCWJvb2wgZW5hYmxlX3NxX3JhbXBpbmc7 CisJLyogc21jIG9mZnNldHMgKi8KKwl1MTYgYXJiX3RhYmxlX3N0YXJ0OworCXUxNiBmYW5fdGFi bGVfc3RhcnQ7CisJdTE2IGNhY190YWJsZV9zdGFydDsKKwl1MTYgc3BsbF90YWJsZV9zdGFydDsK KwkvKiBDQUMgc3R1ZmYgKi8KKwlzdHJ1Y3QgbmlfY2FjX2RhdGEgY2FjX2RhdGE7CisJdTMyIGRj X2NhY190YWJsZVtOSVNMQU5EU19EQ0NBQ19NQVhfTEVWRUxTXTsKKwljb25zdCBzdHJ1Y3Qgbmlf Y2FjX3dlaWdodHMgKmNhY193ZWlnaHRzOworCXU4IGx0YV93aW5kb3dfc2l6ZTsKKwl1OCBsdHNf dHJ1bmNhdGU7CisJc3RydWN0IHNpX3BzIGN1cnJlbnRfcHM7CisJc3RydWN0IHNpX3BzIHJlcXVl c3RlZF9wczsKKwkvKiBzY3JhdGNoIHN0cnVjdHMgKi8KKwlTTUNfTklzbGFuZHNfTUNSZWdpc3Rl cnMgc21jX21jX3JlZ190YWJsZTsKKwlOSVNMQU5EU19TTUNfU1RBVEVUQUJMRSBzbWNfc3RhdGV0 YWJsZTsKK307CisKK3N0cnVjdCBzaV9jYWNfY29uZmlnX3JlZworeworCXUzMiBvZmZzZXQ7CisJ dTMyIG1hc2s7CisJdTMyIHNoaWZ0OworCXUzMiB2YWx1ZTsKKwllbnVtIHNpX2NhY19jb25maWdf cmVnX3R5cGUgdHlwZTsKK307CisKK3N0cnVjdCBzaV9wb3dlcnR1bmVfZGF0YQoreworCXUzMiBj YWNfd2luZG93OworCXUzMiBsMl9sdGFfd2luZG93X3NpemVfZGVmYXVsdDsKKwl1OCBsdHNfdHJ1 bmNhdGVfZGVmYXVsdDsKKwl1OCBzaGlmdF9uX2RlZmF1bHQ7CisJdTggb3BlcmF0aW5nX3RlbXA7 CisJc3RydWN0IG5pX2xlYWthZ2VfY29lZmZpZW50cyBsZWFrYWdlX2NvZWZmaWNpZW50czsKKwl1 MzIgZml4ZWRfa3Q7CisJdTMyIGxrZ2VfbHV0X3YwX3BlcmNlbnQ7CisJdTggZGNfY2FjW05JU0xB TkRTX0RDQ0FDX01BWF9MRVZFTFNdOworCWJvb2wgZW5hYmxlX3Bvd2VydHVuZV9ieV9kZWZhdWx0 OworfTsKKworc3RydWN0IHNpX2R5bl9wb3dlcnR1bmVfZGF0YQoreworCXUzMiBjYWNfbGVha2Fn ZTsKKwlzMzIgbGVha2FnZV9taW5pbXVtX3RlbXBlcmF0dXJlOworCXUzMiB3aW50aW1lOworCXUz MiBsMl9sdGFfd2luZG93X3NpemU7CisJdTggbHRzX3RydW5jYXRlOworCXU4IHNoaWZ0X247CisJ dTggZGNfcHdyX3ZhbHVlOworCWJvb2wgZGlzYWJsZV91dmRfcG93ZXJ0dW5lOworfTsKKworc3Ry dWN0IHNpX2R0ZV9kYXRhCit7CisJdTMyIHRhdVtTTUNfU0lTTEFORFNfRFRFX01BWF9GSUxURVJf U1RBR0VTXTsKKwl1MzIgcltTTUNfU0lTTEFORFNfRFRFX01BWF9GSUxURVJfU1RBR0VTXTsKKwl1 MzIgazsKKwl1MzIgdDA7CisJdTMyIG1heF90OworCXU4IHdpbmRvd19zaXplOworCXU4IHRlbXBf c2VsZWN0OworCXU4IGR0ZV9tb2RlOworCXU4IHRkZXBfY291bnQ7CisJdTggdF9saW1pdHNbU01D X1NJU0xBTkRTX0RURV9NQVhfVEVNUEVSQVRVUkVfREVQRU5ERU5UX0FSUkFZX1NJWkVdOworCXUz MiB0ZGVwX3RhdVtTTUNfU0lTTEFORFNfRFRFX01BWF9URU1QRVJBVFVSRV9ERVBFTkRFTlRfQVJS QVlfU0laRV07CisJdTMyIHRkZXBfcltTTUNfU0lTTEFORFNfRFRFX01BWF9URU1QRVJBVFVSRV9E RVBFTkRFTlRfQVJSQVlfU0laRV07CisJdTMyIHRfdGhyZXNob2xkOworCWJvb2wgZW5hYmxlX2R0 ZV9ieV9kZWZhdWx0OworfTsKKworc3RydWN0IHNpX2Nsb2NrX3JlZ2lzdGVycyB7CisJdTMyIGNn X3NwbGxfZnVuY19jbnRsOworCXUzMiBjZ19zcGxsX2Z1bmNfY250bF8yOworCXUzMiBjZ19zcGxs X2Z1bmNfY250bF8zOworCXUzMiBjZ19zcGxsX2Z1bmNfY250bF80OworCXUzMiBjZ19zcGxsX3Nw cmVhZF9zcGVjdHJ1bTsKKwl1MzIgY2dfc3BsbF9zcHJlYWRfc3BlY3RydW1fMjsKKwl1MzIgZGxs X2NudGw7CisJdTMyIG1jbGtfcHdybWd0X2NudGw7CisJdTMyIG1wbGxfYWRfZnVuY19jbnRsOwor CXUzMiBtcGxsX2RxX2Z1bmNfY250bDsKKwl1MzIgbXBsbF9mdW5jX2NudGw7CisJdTMyIG1wbGxf ZnVuY19jbnRsXzE7CisJdTMyIG1wbGxfZnVuY19jbnRsXzI7CisJdTMyIG1wbGxfc3MxOworCXUz MiBtcGxsX3NzMjsKK307CisKK3N0cnVjdCBzaV9tY19yZWdfZW50cnkgeworCXUzMiBtY2xrX21h eDsKKwl1MzIgbWNfZGF0YVtTTUNfU0lTTEFORFNfTUNfUkVHSVNURVJfQVJSQVlfU0laRV07Cit9 OworCitzdHJ1Y3Qgc2lfbWNfcmVnX3RhYmxlIHsKKwl1OCBsYXN0OworCXU4IG51bV9lbnRyaWVz OworCXUxNiB2YWxpZF9mbGFnOworCXN0cnVjdCBzaV9tY19yZWdfZW50cnkgbWNfcmVnX3RhYmxl X2VudHJ5W01BWF9BQ19USU1JTkdfRU5UUklFU107CisJU01DX05Jc2xhbmRzX01DUmVnaXN0ZXJB ZGRyZXNzIG1jX3JlZ19hZGRyZXNzW1NNQ19TSVNMQU5EU19NQ19SRUdJU1RFUl9BUlJBWV9TSVpF XTsKK307CisKK3N0cnVjdCBzaV9sZWFrYWdlX3ZvbHRhZ2VfZW50cnkKK3sKKwl1MTYgdm9sdGFn ZTsKKwl1MTYgbGVha2FnZV9pbmRleDsKK307CisKK3N0cnVjdCBzaV9sZWFrYWdlX3ZvbHRhZ2UK K3sKKwl1MTYgY291bnQ7CisJc3RydWN0IHNpX2xlYWthZ2Vfdm9sdGFnZV9lbnRyeSBlbnRyaWVz W1NJU0xBTkRTX01BWF9MRUFLQUdFX0NPVU5UXTsKK307CisKKworc3RydWN0IHNpX3Vsdl9wYXJh bSB7CisJYm9vbCBzdXBwb3J0ZWQ7CisJdTMyIGNnX3Vsdl9jb250cm9sOworCXUzMiBjZ191bHZf cGFyYW1ldGVyOworCXUzMiB2b2x0X2NoYW5nZV9kZWxheTsKKwlzdHJ1Y3QgcnY3eHhfcGwgcGw7 CisJYm9vbCBvbmVfcGNpZV9sYW5lX2luX3VsdjsKK307CisKK3N0cnVjdCBzaV9wb3dlcl9pbmZv IHsKKwkvKiBtdXN0IGJlIGZpcnN0ISAqLworCXN0cnVjdCBuaV9wb3dlcl9pbmZvIG5pOworCXN0 cnVjdCBzaV9jbG9ja19yZWdpc3RlcnMgY2xvY2tfcmVnaXN0ZXJzOworCXN0cnVjdCBzaV9tY19y ZWdfdGFibGUgbWNfcmVnX3RhYmxlOworCXN0cnVjdCBhdG9tX3ZvbHRhZ2VfdGFibGUgbXZkZF92 b2x0YWdlX3RhYmxlOworCXN0cnVjdCBhdG9tX3ZvbHRhZ2VfdGFibGUgdmRkY19waGFzZV9zaGVk X3RhYmxlOworCXN0cnVjdCBzaV9sZWFrYWdlX3ZvbHRhZ2UgbGVha2FnZV92b2x0YWdlOworCXUx NiBtdmRkX2Jvb3R1cF92YWx1ZTsKKwlzdHJ1Y3Qgc2lfdWx2X3BhcmFtIHVsdjsKKwl1MzIgbWF4 X2N1OworCS8qIHBjaWUgZ2VuICovCisJZW51bSBhbWRncHVfcGNpZV9nZW4gZm9yY2VfcGNpZV9n ZW47CisJZW51bSBhbWRncHVfcGNpZV9nZW4gYm9vdF9wY2llX2dlbjsKKwllbnVtIGFtZGdwdV9w Y2llX2dlbiBhY3BpX3BjaWVfZ2VuOworCXUzMiBzeXNfcGNpZV9tYXNrOworCS8qIGZsYWdzICov CisJYm9vbCBlbmFibGVfZHRlOworCWJvb2wgZW5hYmxlX3BwbTsKKwlib29sIHZkZGNfcGhhc2Vf c2hlZF9jb250cm9sOworCWJvb2wgcHNwcF9ub3RpZnlfcmVxdWlyZWQ7CisJYm9vbCBzY2xrX2Rl ZXBfc2xlZXBfYWJvdmVfbG93OworCWJvb2wgdm9sdGFnZV9jb250cm9sX3N2aTI7CisJYm9vbCB2 ZGRjaV9jb250cm9sX3N2aTI7CisJLyogc21jIG9mZnNldHMgKi8KKwl1MzIgc3JhbV9lbmQ7CisJ dTMyIHN0YXRlX3RhYmxlX3N0YXJ0OworCXUzMiBzb2Z0X3JlZ3Nfc3RhcnQ7CisJdTMyIG1jX3Jl Z190YWJsZV9zdGFydDsKKwl1MzIgYXJiX3RhYmxlX3N0YXJ0OworCXUzMiBjYWNfdGFibGVfc3Rh cnQ7CisJdTMyIGR0ZV90YWJsZV9zdGFydDsKKwl1MzIgc3BsbF90YWJsZV9zdGFydDsKKwl1MzIg cGFwbV9jZmdfdGFibGVfc3RhcnQ7CisJdTMyIGZhbl90YWJsZV9zdGFydDsKKwkvKiBDQUMgc3R1 ZmYgKi8KKwljb25zdCBzdHJ1Y3Qgc2lfY2FjX2NvbmZpZ19yZWcgKmNhY193ZWlnaHRzOworCWNv bnN0IHN0cnVjdCBzaV9jYWNfY29uZmlnX3JlZyAqbGNhY19jb25maWc7CisJY29uc3Qgc3RydWN0 IHNpX2NhY19jb25maWdfcmVnICpjYWNfb3ZlcnJpZGU7CisJY29uc3Qgc3RydWN0IHNpX3Bvd2Vy dHVuZV9kYXRhICpwb3dlcnR1bmVfZGF0YTsKKwlzdHJ1Y3Qgc2lfZHluX3Bvd2VydHVuZV9kYXRh IGR5bl9wb3dlcnR1bmVfZGF0YTsKKwkvKiBEVEUgc3R1ZmYgKi8KKwlzdHJ1Y3Qgc2lfZHRlX2Rh dGEgZHRlX2RhdGE7CisJLyogc2NyYXRjaCBzdHJ1Y3RzICovCisJU01DX1NJc2xhbmRzX01DUmVn aXN0ZXJzIHNtY19tY19yZWdfdGFibGU7CisJU0lTTEFORFNfU01DX1NUQVRFVEFCTEUgc21jX3N0 YXRldGFibGU7CisJUFBfU0lzbGFuZHNfUEFQTVBhcmFtZXRlcnMgcGFwbV9wYXJtOworCS8qIFNW STIgKi8KKwl1OCBzdmRfZ3Bpb19pZDsKKwl1OCBzdmNfZ3Bpb19pZDsKKwkvKiBmYW4gY29udHJv bCAqLworCWJvb2wgZmFuX2N0cmxfaXNfaW5fZGVmYXVsdF9tb2RlOworCXUzMiB0X21pbjsKKwl1 MzIgZmFuX2N0cmxfZGVmYXVsdF9tb2RlOworCWJvb2wgZmFuX2lzX2NvbnRyb2xsZWRfYnlfc21j OworfTsKKworI2VuZGlmCi0tIAoyLjUuNQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVsCg==