From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S261779AbTKYBQO (ORCPT ); Mon, 24 Nov 2003 20:16:14 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S261799AbTKYBQO (ORCPT ); Mon, 24 Nov 2003 20:16:14 -0500 Received: from petasus.ch.intel.com ([143.182.124.5]:5501 "EHLO petasus.ch.intel.com") by vger.kernel.org with ESMTP id S261779AbTKYBPf (ORCPT ); Mon, 24 Nov 2003 20:15:35 -0500 content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C3B2F1.9FA8A7FE" X-MimeOLE: Produced By Microsoft Exchange V6.0.6487.1 Subject: Announce: "iswraid" (ICH5R) ataraid sub-driver for 2.4.22 Date: Mon, 24 Nov 2003 18:15:33 -0700 Message-ID: <933D2981B35C9B4B8793B56C4AE9E16B593859@azsmsx405.ch.intel.com> X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: Announce: "iswraid" (ICH5R) ataraid sub-driver for 2.4.22 Thread-Index: AcOy8Z/G/a09eRZMQ5itgCC9B//bgA== From: "Kannanthanam, Boji T" To: , Cc: "Pallipadi, Venkatesh" , "Nakajima, Jun" , "Kannanthanam, Boji T" X-OriginalArrivalTime: 25 Nov 2003 01:15:33.0671 (UTC) FILETIME=[9FF08B70:01C3B2F1] Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C3B2F1.9FA8A7FE Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable All: Attached to this email is a patch for a new ataraid sub-driver "iswraid" (Intel Software RAID) for Kernel 2.4 series. The patch is taken against Kernel 2.4.22.=20 The driver (along with the ata_piix driver) can be used with Intel's ICH5R chipset. You will need the Option ROM to do RAID configuration. This driver differs slightly from the other ataraid sub-drivers in that it operates on SCSI block devices rather than the ATA/IDE ones. "iswraid" depends on "ata_piix" driver to detect and load the SATA disks connected to ICH5R. Note that the driver is still considered experimental, use at your own risk. Thanks to Arjan van de Ven (ataraid), Jeff Garzik (ata_piix) and James Bottomley (scsi) for patiently answering my questions. FYI: ata_piix patch for 2.4.22: ftp://ftp.kernel.org/pub/linux/kernel/people/jgarzik/libata/ Feel free to email me your feedback/comments on the driver or if you need more info.=20 Thanks, -Boji ---------------------------------- Boji Tony Kannanthanam Storage Components Division (SCD) Intel Corporation ---------------------------------- ------_=_NextPart_001_01C3B2F1.9FA8A7FE Content-Type: application/octet-stream; name="iswraid-2.4.22.patch" Content-Transfer-Encoding: base64 Content-Description: iswraid-2.4.22.patch Content-Disposition: attachment; filename="iswraid-2.4.22.patch" LS0tIGxpbnV4LTIuNC4yMi9Eb2N1bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxwCTIwMDMtMDgtMjUg MDQ6NDQ6MzkuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjQuMjItaXN3L0RvY3VtZW50YXRp b24vQ29uZmlndXJlLmhlbHAJMjAwMy0wOS0yNCAxMjoyMjozNC4wMDAwMDAwMDAgLTA3MDAKQEAg LTIwMTgsNiArMjAxOCwxOSBAQAogICBJZiB5b3UgY2hvb3NlIHRvIGNvbXBpbGUgdGhpcyBhcyBh IG1vZHVsZSwgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZAogICBocHRyYWlkLm8uCiAKK0ludGVs IFNvZnR3YXJlIFJBSUQKK0NPTkZJR19CTEtfREVWX0FUQVJBSURfSVNXCisgICoqKioqKiogRXhw ZXJpbWVudGFsIERyaXZlciAqKioqKioqKioKKyAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0 IGZvciB0aGUgSW50ZWwgU29mdHdhcmUgUkFJRCBmb3JtYXQuCisgIFNheSBZIG9yIE0gaWYgeW91 IGhhdmUgaGFyZHdhcmUgd2hpY2ggc3VwcG9ydHMgdGhpcyBmb3JtYXQuIAorICBDdXJyZW50bHkg SW50ZWwncyBJQ0g1UiBjaGlwc2V0IHVzZXMgdGhpcyBmb3JtYXQuCisgIFRoaXMgZHJpdmVyIHVz ZXMgL2Rldi9hdGFyYWlkL2RYcFkgKFggYW5kIFkgbnVtYmVycykgYXMgZGV2aWNlCisgIG5hbWVz LgorCisgIElmIHlvdSBjaG9vc2UgdG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCB0aGUgbW9k dWxlIHdpbGwgYmUgY2FsbGVkCisgIGlzd3JhaWQuby4KKworCiBTdXBwb3J0IGZvciBBY2VyIFBJ Q0EgMSBjaGlwc2V0CiBDT05GSUdfQUNFUl9QSUNBXzYxCiAgIFRoaXMgaXMgYSBtYWNoaW5lIHdp dGggYSBSNDQwMCAxMzMvMTUwIE1IeiBDUFUuIFRvIGNvbXBpbGUgYSBMaW51eAotLS0gbGludXgt Mi40LjIyL2RyaXZlcnMvaWRlL0NvbmZpZy5pbgkyMDAzLTA4LTI1IDA0OjQ0OjQxLjAwMDAwMDAw MCAtMDcwMAorKysgbGludXgtMi40LjIyLWlzdy9kcml2ZXJzL2lkZS9Db25maWcuaW4JMjAwMy0w OS0yNCAxMjoyMjozNS4wMDAwMDAwMDAgLTA3MDAKQEAgLTIyMCw1ICsyMjAsNiBAQAogZGVwX3Ry aXN0YXRlICcgICBTdXBwb3J0IFByb21pc2Ugc29mdHdhcmUgUkFJRCAoRmFzdHRyYWsodG0pKSAo RVhQRVJJTUVOVEFMKScgQ09ORklHX0JMS19ERVZfQVRBUkFJRF9QREMgJENPTkZJR19CTEtfREVW X0lERSAkQ09ORklHX0VYUEVSSU1FTlRBTCAkQ09ORklHX0JMS19ERVZfQVRBUkFJRAogZGVwX3Ry aXN0YXRlICcgICBIaWdocG9pbnQgMzcwIHNvZnR3YXJlIFJBSUQgKEVYUEVSSU1FTlRBTCknIENP TkZJR19CTEtfREVWX0FUQVJBSURfSFBUICRDT05GSUdfQkxLX0RFVl9JREUgJENPTkZJR19FWFBF UklNRU5UQUwgJENPTkZJR19CTEtfREVWX0FUQVJBSUQKIGRlcF90cmlzdGF0ZSAnICAgU2lsaWNv biBJbWFnZSBNZWRsZXkgc29mdHdhcmUgUkFJRCAoRVhQRVJJTUVOVEFMKScgQ09ORklHX0JMS19E RVZfQVRBUkFJRF9TSUkgJENPTkZJR19CTEtfREVWX0lERSAkQ09ORklHX0VYUEVSSU1FTlRBTCAk Q09ORklHX0JMS19ERVZfQVRBUkFJRAorZGVwX3RyaXN0YXRlICcgICBTdXBwb3J0IGZvciBJbnRl bCBzb2Z0d2FyZSBSQUlEIChFWFBFUklNRU5UQUwpJyBDT05GSUdfQkxLX0RFVl9BVEFSQUlEX0lT VyAkQ09ORklHX0JMS19ERVZfSURFICRDT05GSUdfRVhQRVJJTUVOVEFMICRDT05GSUdfQkxLX0RF Vl9TRCAkQ09ORklHX0JMS19ERVZfQVRBUkFJRAogCiBlbmRtZW51CmRpZmYgLXVOciBsaW51eC0y LjQuMjIvZHJpdmVycy9pZGUvcmFpZC9pc3dyYWlkLmMgbGludXgtMi40LjIyLWlzdy9kcml2ZXJz L2lkZS9yYWlkL2lzd3JhaWQuYwotLS0gbGludXgtMi40LjIyL2RyaXZlcnMvaWRlL3JhaWQvaXN3 cmFpZC5jCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjQu MjItaXN3L2RyaXZlcnMvaWRlL3JhaWQvaXN3cmFpZC5jCTIwMDMtMDktMjQgMTY6MTI6MDMuMDAw MDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMTA3MCBAQAorLyoKKyAqICAgaXN3cmFpZC5jIENvcHly aWdodCAoQykgMjAwMywyMDA0IEludGVsIENvcnBvcmF0aW9uLiAKKyAqICAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3Vy IG9wdGlvbikKKyAqICAgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog ICAoZm9yIGV4YW1wbGUgL3Vzci9zcmMvbGludXgvQ09QWUlORyk7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUKKyAqICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBD YW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogICAKKyAqICAgQXV0aG9yczogQm9qaSBU b255IEthbm5hbnRoYW5hbSAKKyAqICAgICAgICAgICAgPCBib2ppIGRvdCB0IGRvdCBrYW5uYW50 aGFuYW0gYXQgaW50ZWwgZG90IGNvbT4KKyAqICAgQmFzZWQgb24gYXRhcmFpZCBjb2RlYmFzZSBi eSBBcmphbiB2YW4gZGUgVmVuCisgKiAgIAorICogICAKKyAqLworCisvKgorICogImlzd3JhaWQi IGlzIGFuIGF0YXJhaWQgc3ViZHJpdmVyIGZvciBJbnRlbCdzIElDSDVSIGNoaXBzZXQuCisgKiBU aGUgImF0YXJhaWQiIG1vZHVsZSBuZWVkcyB0byBiZSBsb2FkZWQgYmVmb3JlIHRoaXMgZHJpdmVy CisgKiBjYW4gbG9hZC4gCisgKiBUaGlzIHN1YmRyaXZlciBkaWZmZXJzIGZyb20gdGhlIG90aGVy IGF0YXJhaWQgc3ViZHJpdmVyIGluIHRoYXQgCisgKiBpdCBkZXBlbmRzIG9uIGEgU0NTSSBsb3cg bGV2ZWwgZHJpdmVyIHRvIGFjY2VzcyBSQUlEIG1lbWJlcgorICogZGlza3MgaW5zdGVhZCBvZiB0 aGUgQVRBL0lERSBzdWJzeXN0ZW0uCisgKiBIZW5jZSwgeW91IHdpbGwgYWxzbyBuZWVkIHRoZSAi YXRhX3BpaXgiIGRyaXZlciB3aGljaCBkZXRlY3RzIAorICogdGhlIFNBVEEgZHJpdmVzIGNvbm5l Y3RlZCB0byBJQ0g1UiBhcyBTQ1NJIGRldmljZXMgKHNkYSwgc2RiLi4uKQorICovCisjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgv c21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9i bGtwZy5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwu aD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2lu Y2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICIuLi8uLi9zY3NpL3Njc2kuaCIKKyNp bmNsdWRlIDxzY3NpL3Njc2lfaW9jdGwuaD4KKyNpbmNsdWRlICJhdGFyYWlkLmgiCisjaW5jbHVk ZSAiaXN3cmFpZC5oIgorCisvLyNkZWZpbmUgRFJJVkVSREVCVUcgPSAxCisKKyNpZmRlZiBEUklW RVJERUJVRworI2RlZmluZSBERUJVRyhzLCBhcmdzLi4uKSBwcmludGsocywgIyMgYXJncykKKyNl bHNlCisjZGVmaW5lIERFQlVHKHMsIGFyZ3MuLi4pCisjZW5kaWYKKworI2RlZmluZSBJQ0hfVkVS U0lPTl9TVFJJTkcgICAgICAgICJWZXJzaW9uIDAuMC42IgorCitzdGF0aWMgaW50IGlzd3JhaWRf b3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50 IGlzd3JhaWRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7 CitzdGF0aWMgaW50IGlzd3JhaWRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZp bGUgKmZpbGUsCisJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3Rh dGljIGludCBpc3dyYWlkMF9tYWtlX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICogcSwgaW50IHJ3 LAorCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKK3N0YXRpYyBpbnQgaXN3cmFpZDFfbWFr ZV9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqIHEsIGludCBydywKKwkJCQkgc3RydWN0IGJ1ZmZl cl9oZWFkICpiaCk7CisKK3N0cnVjdCBkaXNrX2RldiB7CisJaW50IG1ham9yOworCWludCBtaW5v cjsKKwlpbnQgZGV2aWNlOworCXN0cnVjdCBkaXNrX2RldiAqbmV4dDsKK307CisKK3N0cnVjdCBk aXNrX2RldiAqZGV2bGlzdCA9IE5VTEw7CisKK3N0cnVjdCBpY2hkaXNrIHsKKwlrZGV2X3QgZGV2 aWNlOworCXVuc2lnbmVkIGxvbmcgc2VjdG9yczsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2 OworCXVuc2lnbmVkIGxvbmcgbGFzdF9wb3M7Cit9OworCisjZGVmaW5lIE1BWF9SQUlEX01FTUJF Ul9ESVNLUyA4CisjZGVmaW5lIE1BWF9SQUlEX1ZPTFVNRVMgMTYKKworc3RydWN0IGlzd3JhaWQg eworCXVuc2lnbmVkIGludCBzdHJpZGU7CisJdW5zaWduZWQgaW50IGRpc2tzOworCXVuc2lnbmVk IGxvbmcgc2VjdG9yczsKKwlzdHJ1Y3QgZ2VvbSBnZW9tOworCisJc3RydWN0IGljaGRpc2sgZGlz a1tNQVhfUkFJRF9NRU1CRVJfRElTS1NdOworCisJdW5zaWduZWQgbG9uZyBjdXRvZmZbTUFYX1JB SURfTUVNQkVSX0RJU0tTXTsKKwl1bnNpZ25lZCBpbnQgY3V0b2ZmX2Rpc2tzW01BWF9SQUlEX01F TUJFUl9ESVNLU107CisJaW50IHJlZmNudDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmFpZF9kZXZp Y2Vfb3BlcmF0aW9ucyBpc3dyYWlkMF9vcHMgPSB7CisgICAgICBvcGVuOmlzd3JhaWRfb3BlbiwK KyAgICAgIHJlbGVhc2U6aXN3cmFpZF9yZWxlYXNlLAorICAgICAgaW9jdGw6aXN3cmFpZF9pb2N0 bCwKKyAgICAgIG1ha2VfcmVxdWVzdDppc3dyYWlkMF9tYWtlX3JlcXVlc3QKK307CisKK3N0YXRp YyBzdHJ1Y3QgcmFpZF9kZXZpY2Vfb3BlcmF0aW9ucyBpc3dyYWlkMV9vcHMgPSB7CisgICAgICBv cGVuOmlzd3JhaWRfb3BlbiwKKyAgICAgIHJlbGVhc2U6aXN3cmFpZF9yZWxlYXNlLAorICAgICAg aW9jdGw6aXN3cmFpZF9pb2N0bCwKKyAgICAgIG1ha2VfcmVxdWVzdDppc3dyYWlkMV9tYWtlX3Jl cXVlc3QKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXN3cmFpZCByYWlkW01BWF9SQUlEX1ZPTFVNRVNd OworCitzdGF0aWMgREVDTEFSRV9NVVRFWChpc3dyYWlkX3NlbSk7CisKK3N0YXRpYyBpbnQKK2lz d3JhaWRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2ln bmVkIGludCBjbWQsCisJICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5zaWduZWQgaW50 IG1pbm9yOworCXVuc2lnbmVkIGxvbmcgc2VjdG9yczsKKworCWlmICghaW5vZGUgfHwgIWlub2Rl LT5pX3JkZXYpCisJCXJldHVybiAtRUlOVkFMOworCisJbWlub3IgPSBNSU5PUihpbm9kZS0+aV9y ZGV2KSA+PiBTSElGVDsKKworCXN3aXRjaCAoY21kKSB7CisKKwljYXNlIEJMS0dFVFNJWkU6CS8q IFJldHVybiBkZXZpY2Ugc2l6ZSAqLworCQl7CisJCQlpZiAoIWFyZykKKwkJCQlyZXR1cm4gLUVJ TlZBTDsKKwkJCXNlY3RvcnMgPQorCQkJICAgIGF0YXJhaWRfZ2VuZGlzay5wYXJ0W01JTk9SKGlu b2RlLT5pX3JkZXYpXS5ucl9zZWN0czsKKwkJCWlmIChNSU5PUihpbm9kZS0+aV9yZGV2KSAmIDE1 KQorCQkJCXJldHVybiBwdXRfdXNlcihzZWN0b3JzLCAodW5zaWduZWQgbG9uZyAqKSBhcmcpOwor CQkJcmV0dXJuIHB1dF91c2VyKHJhaWRbbWlub3JdLnNlY3RvcnMsCisJCQkJCSh1bnNpZ25lZCBs b25nICopIGFyZyk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBIRElPX0dFVEdFTzoKKwkJewor CQkJc3RydWN0IGhkX2dlb21ldHJ5ICpsb2MgPSAoc3RydWN0IGhkX2dlb21ldHJ5ICopIGFyZzsK KwkJCXVuc2lnbmVkIHNob3J0IGJpb3NfY3lsID0gcmFpZFttaW5vcl0uZ2VvbS5jeWxpbmRlcnM7 CS8qIHRydW5jYXRlICovCisKKwkJCWlmICghbG9jKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJ aWYgKHB1dF91c2VyCisJCQkgICAgKHJhaWRbbWlub3JdLmdlb20uaGVhZHMsIChieXRlICopICYg bG9jLT5oZWFkcykpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlpZiAocHV0X3VzZXIKKwkJCSAg ICAocmFpZFttaW5vcl0uZ2VvbS5zZWN0b3JzLCAoYnl0ZSAqKSAmIGxvYy0+c2VjdG9ycykpCisJ CQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlpZiAocHV0X3VzZXIKKwkJCSAgICAoYmlvc19jeWwsICh1 bnNpZ25lZCBzaG9ydCAqKSAmbG9jLT5jeWxpbmRlcnMpKQorCQkJCXJldHVybiAtRUZBVUxUOwor CQkJaWYgKHB1dF91c2VyCisJCQkgICAgKCh1bnNpZ25lZCkgYXRhcmFpZF9nZW5kaXNrLgorCQkJ ICAgICBwYXJ0W01JTk9SKGlub2RlLT5pX3JkZXYpXS5zdGFydF9zZWN0LAorCQkJICAgICAodW5z aWduZWQgbG9uZyAqKSAmbG9jLT5zdGFydCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1 cm4gMDsKKwkJfQorCisJY2FzZSBIRElPX0dFVEdFT19CSUc6CisJCXsKKwkJCXN0cnVjdCBoZF9i aWdfZ2VvbWV0cnkgKmxvYyA9CisJCQkgICAgKHN0cnVjdCBoZF9iaWdfZ2VvbWV0cnkgKikgYXJn OworCQkJaWYgKCFsb2MpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAocHV0X3VzZXIKKwkJ CSAgICAocmFpZFttaW5vcl0uZ2VvbS5oZWFkcywgKGJ5dGUgKikgJiBsb2MtPmhlYWRzKSkKKwkJ CQlyZXR1cm4gLUVGQVVMVDsKKwkJCWlmIChwdXRfdXNlcgorCQkJICAgIChyYWlkW21pbm9yXS5n ZW9tLnNlY3RvcnMsIChieXRlICopICYgbG9jLT5zZWN0b3JzKSkKKwkJCQlyZXR1cm4gLUVGQVVM VDsKKwkJCWlmIChwdXRfdXNlcgorCQkJICAgIChyYWlkW21pbm9yXS5nZW9tLmN5bGluZGVycywK KwkJCSAgICAgKHVuc2lnbmVkIGludCAqKSAmbG9jLT5jeWxpbmRlcnMpKQorCQkJCXJldHVybiAt RUZBVUxUOworCQkJaWYgKHB1dF91c2VyCisJCQkgICAgKCh1bnNpZ25lZCkgYXRhcmFpZF9nZW5k aXNrLgorCQkJICAgICBwYXJ0W01JTk9SKGlub2RlLT5pX3JkZXYpXS5zdGFydF9zZWN0LAorCQkJ ICAgICAodW5zaWduZWQgbG9uZyAqKSAmbG9jLT5zdGFydCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7 CisJCQlyZXR1cm4gMDsKKwkJfQorCisJY2FzZSBCTEtSUlBBUlQ6CisJCXsKKwkJCS8qIFJlLVJl YWQgUGFydGl0aW9uIFRhYmxlLiAqLworCQkJREVCVUcoImlzd3JhaWQ6IEJMS1JSUEFSVC4gXG4i KTsKKwkJCWludCBpOworCQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJCXJldHVy biAtRUFDQ0VTOworCisJCQlkb3duKCZpc3dyYWlkX3NlbSk7CisJCQlpZiAocmFpZFttaW5vcl0u cmVmY250ID4gMSkgeworCQkJCXVwKCZpc3dyYWlkX3NlbSk7CisJCQkJcmV0dXJuIC1FQlVTWTsK KwkJCX0KKworCQkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJCQlpbnQgbSA9IG1pbm9y ICsgaTsKKwkJCQlpZiAoYXRhcmFpZF9nZW5kaXNrLnBhcnRbbV0ubnJfc2VjdHMgPiAwKSB7CisJ CQkJCWludmFsaWRhdGVfZGV2aWNlKE1LREVWCisJCQkJCQkJICAoYXRhcmFpZF9nZW5kaXNrLgor CQkJCQkJCSAgIG1ham9yLCBtKSwgMSk7CisJCQkJfQorCQkJCS8qIENsZWFyIGV4aXN0aW5nIHBh cnRpdGlvbiBzaXplcy4gICovCisJCQkJYXRhcmFpZF9nZW5kaXNrLnBhcnRbbV0uc3RhcnRfc2Vj dCA9IDA7CisJCQkJYXRhcmFpZF9nZW5kaXNrLnBhcnRbbV0ubnJfc2VjdHMgPSAwOworCQkJCS8q IFJlc2V0IHRoZSBCbG9jayBTaXplIHNvIHRoYXQgdGhlIHBhcnRpdGlvbiB0YWJsZSBjYW4gYmUg cmVhZC4gICovCisJCQkJc2V0X2Jsb2Nrc2l6ZShNS0RFVihhdGFyYWlkX2dlbmRpc2subWFqb3Is IG0pLAorCQkJCQkgICAgICBJQ0hfRElTS19CTE9DS19TSVpFKTsKKwkJCX0KKwkJCWF0YXJhaWRf cmVnaXN0ZXJfZGlzayhtaW5vciwgcmFpZFttaW5vcl0uc2VjdG9ycyk7CisJCQl1cCgmaXN3cmFp ZF9zZW0pOworCQkJcmV0dXJuIDA7CisJCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gYmxrX2lvY3Rs KGlub2RlLT5pX3JkZXYsIGNtZCwgYXJnKTsKKwl9OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB1bnNpZ25lZCBsb25nCitwYXJ0aXRpb25fbWFwX25vcm1hbCh1bnNpZ25lZCBsb25nIGJsb2Nr LCB1bnNpZ25lZCBsb25nIHBhcnRpdGlvbl9vZmYsCisJCSAgICAgdW5zaWduZWQgbG9uZyBwYXJ0 aXRpb25fc2l6ZSwgaW50IHN0cmlkZSkKK3sKKwlyZXR1cm4gYmxvY2sgKyBwYXJ0aXRpb25fb2Zm OworfQorCitzdGF0aWMgaW50Citpc3dyYWlkMF9tYWtlX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90 ICogcSwgaW50IHJ3LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCisJdW5zaWduZWQgbG9u ZyByc2VjdDsKKwl1bnNpZ25lZCBsb25nIHJzZWN0X2xlZnQsIHJzZWN0X2FjY3VtID0gMDsKKwl1 bnNpZ25lZCBsb25nIGJsb2NrOworCXVuc2lnbmVkIGludCBkaXNrID0gMCwgcmVhbF9kaXNrID0g MDsKKwlpbnQgaTsKKwlpbnQgZGV2aWNlOworCXN0cnVjdCBpc3dyYWlkICp0aGlzcmFpZDsKKwor CURFQlVHKCJpc3dyYWlkOiBpc3dyYWlkMF9tYWtlX3JlcXVlc3RcbiIpOworCXJzZWN0ID0gYmgt PmJfcnNlY3RvcjsKKworCS8qIE9rLiBXZSBuZWVkIHRvIG1vZGlmeSB0aGlzIHNlY3RvciBudW1i ZXIgdG8gYSBuZXcgZGlzayArIG5ldyBzZWN0b3IgbnVtYmVyLgorCSAqIElmIHRoZXJlIGFyZSBk aXNrcyBvZiBkaWZmZXJlbnQgc2l6ZXMsIHRoaXMgZ2V0cyB0cmlja3kuCisJICogRXhhbXBsZSB3 aXRoIDMgZGlza3MgKDFHYiwgNEdiIGFuZCA1IEdCKToKKwkgKiBUaGUgZmlyc3QgMyBHYiBvZiB0 aGUgIlJBSUQiIGFyZSBldmVubHkgc3ByZWFkIG92ZXIgdGhlIDMgZGlza3MuCisJICogVGhlbiB0 aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgbmV4dCAyR2IgKFJBSUQgdmlldykgYXJlIHNwcmVh ZCBhY3Jvc3MgZGlzayAyIGFuZCAzCisJICogYW5kIHRoZSBsYXN0IDFHYiBpcyBkaXNrIDMgb25s eS4KKwkgKgorCSAqIHRoZSB3YXkgdGhpcyBpcyBzb2x2ZWQgaXMgbGlrZSB0aGlzOiBXZSBoYXZl IGEgbGlzdCBvZiAiY3V0b2ZmIiBwb2ludHMgd2hlcmUgZXZlcnl0aW1lCisJICogYSBkaXNrIGZh bGxzIG91dCBvZiB0aGUgImhpZ2hlciIgY291bnQsIHdlIG1hcmsgdGhlIG1heCBzZWN0b3IuIFNv IG9uY2Ugd2UgcGFzcyBhIGN1dG9mZgorCSAqIHBvaW50LCB3ZSBoYXZlIHRvIGRpdmlkZSBieSBv bmUgbGVzcy4KKwkgKi8KKworCWRldmljZSA9IChiaC0+Yl9yZGV2ID4+IFNISUZUKSAmIE1BSk9S X01BU0s7CisJdGhpc3JhaWQgPSAmcmFpZFtkZXZpY2VdOworCWlmICh0aGlzcmFpZC0+c3RyaWRl ID09IDApCisJCXRoaXNyYWlkLT5zdHJpZGUgPSAxOworCisJLyogUGFydGl0aW9ucyBuZWVkIGFk ZGluZyBvZiB0aGUgc3RhcnQgc2VjdG9yIG9mIHRoZSBwYXJ0aXRpb24gdG8gdGhlIHJlcXVlc3Rl ZCBzZWN0b3IgKi8KKworCXJzZWN0ID0KKwkgICAgcGFydGl0aW9uX21hcF9ub3JtYWwocnNlY3Qs CisJCQkJIGF0YXJhaWRfZ2VuZGlzay5wYXJ0W01JTk9SKGJoLT5iX3JkZXYpXS4KKwkJCQkgc3Rh cnRfc2VjdCwKKwkJCQkgYXRhcmFpZF9nZW5kaXNrLnBhcnRbTUlOT1IoYmgtPmJfcmRldildLgor CQkJCSBucl9zZWN0cywgdGhpc3JhaWQtPnN0cmlkZSk7CisKKwkvKiBXb29wcyB3ZSBuZWVkIHRv IHNwbGl0IHRoZSByZXF1ZXN0IHRvIGF2b2lkIGNyb3NzaW5nIGEgc3RyaWRlIGJhcnJpZXIgKi8K KwlpZiAoKHJzZWN0IC8gdGhpc3JhaWQtPnN0cmlkZSkgIT0KKwkgICAgKChyc2VjdCArIChiaC0+ Yl9zaXplIC8gNTEyKSAtIDEpIC8gdGhpc3JhaWQtPnN0cmlkZSkpIHsKKwkJcmV0dXJuIC0xOwor CX0KKworCXJzZWN0X2xlZnQgPSByc2VjdDsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfUkFJRF9N RU1CRVJfRElTS1M7IGkrKykgeworCQlpZiAodGhpc3JhaWQtPmN1dG9mZl9kaXNrc1tpXSA9PSAw KQorCQkJYnJlYWs7CisJCWlmIChyc2VjdCA+IHRoaXNyYWlkLT5jdXRvZmZbaV0pIHsKKwkJCS8q IHdlJ3JlIGluIHRoZSB3cm9uZyBhcmVhIHNvIGZhciAqLworCQkJcnNlY3RfbGVmdCAtPSB0aGlz cmFpZC0+Y3V0b2ZmW2ldOworCQkJcnNlY3RfYWNjdW0gKz0KKwkJCSAgICB0aGlzcmFpZC0+Y3V0 b2ZmW2ldIC8gdGhpc3JhaWQtPmN1dG9mZl9kaXNrc1tpXTsKKwkJfSBlbHNlIHsKKwkJCWJsb2Nr ID0gcnNlY3RfbGVmdCAvIHRoaXNyYWlkLT5zdHJpZGU7CisJCQlkaXNrID0gYmxvY2sgJSB0aGlz cmFpZC0+Y3V0b2ZmX2Rpc2tzW2ldOworCQkJYmxvY2sgPQorCQkJICAgIChibG9jayAvIHRoaXNy YWlkLT5jdXRvZmZfZGlza3NbaV0pICoKKwkJCSAgICB0aGlzcmFpZC0+c3RyaWRlOworCQkJcnNl Y3QgPQorCQkJICAgIHJzZWN0X2FjY3VtICsgKHJzZWN0X2xlZnQgJSB0aGlzcmFpZC0+c3RyaWRl KSArCisJCQkgICAgYmxvY2s7CisJCQlicmVhazsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkg PCBNQVhfUkFJRF9NRU1CRVJfRElTS1M7IGkrKykgeworCQlpZiAoKGRpc2sgPT0gMCkgJiYgKHRo aXNyYWlkLT5kaXNrW2ldLnNlY3RvcnMgPiByc2VjdF9hY2N1bSkpIHsKKwkJCXJlYWxfZGlzayA9 IGk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKGRpc2sgPiAwKSAmJiAodGhpc3JhaWQtPmRpc2tb aV0uc2VjdG9ycyA+PSByc2VjdF9hY2N1bSkpIHsKKwkJCWRpc2stLTsKKwkJfQorCX0KKwlkaXNr ID0gcmVhbF9kaXNrOworCS8qCisJICogVGhlIG5ldyBCSF9Mb2NrIHNlbWFudGljcyBpbiBsbF9y d19ibGsuYyBndWFyYW50ZWUgdGhhdCB0aGlzCisJICogaXMgdGhlIG9ubHkgSU8gb3BlcmF0aW9u IGhhcHBlbmluZyBvbiB0aGlzIGJoLgorCSAqLworCWJoLT5iX3JkZXYgPSB0aGlzcmFpZC0+ZGlz a1tkaXNrXS5kZXZpY2U7CisJYmgtPmJfcnNlY3RvciA9IHJzZWN0OworCisJLyoKKwkgKiBMZXQg dGhlIG1haW4gYmxvY2sgbGF5ZXIgc3VibWl0IHRoZSBJTyBhbmQgcmVzb2x2ZSByZWN1cnNpb246 CisJICovCisJcmV0dXJuIDE7CisKK30KKworc3RhdGljIGludAoraXN3cmFpZDFfd3JpdGVfcmVx dWVzdChyZXF1ZXN0X3F1ZXVlX3QgKiBxLCBpbnQgcncsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgp Cit7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDE7CisJc3RydWN0IGF0YXJhaWRfYmhfcHJpdmF0 ZSAqcHJpdmF0ZTsKKwlpbnQgZGV2aWNlOworCWludCBpOworCisJREVCVUcoImlzd3JhaWQ6IGlz d3JhaWQxX3dyaXRlX3JlcXVlc3RcbiIpOworCisJZGV2aWNlID0gKGJoLT5iX3JkZXYgPj4gU0hJ RlQpICYgTUFKT1JfTUFTSzsKKwlwcml2YXRlID0gYXRhcmFpZF9nZXRfcHJpdmF0ZSgpOworCWlm IChwcml2YXRlID09IE5VTEwpCisJCUJVRygpOworCisJcHJpdmF0ZS0+cGFyZW50ID0gYmg7CisK KwlhdG9taWNfc2V0KCZwcml2YXRlLT5jb3VudCwgcmFpZFtkZXZpY2VdLmRpc2tzKTsKKworCWZv ciAoaSA9IDA7IGkgPCByYWlkW2RldmljZV0uZGlza3M7IGkrKykgeworCQliaDEgPSBhdGFyYWlk X2dldF9iaGVhZCgpOworCQkvKiBJZiB0aGlzIGV2ZXIgZmFpbHMgd2UncmUgZG9vbWVkICovCisJ CWlmICghYmgxKQorCQkJQlVHKCk7CisKKwkJLyogZHVwZSB0aGUgYnVmZmVyaGVhZCBhbmQgdXBk YXRlIHRoZSBwYXJ0cyB0aGF0IG5lZWQgdG8gYmUgZGlmZmVyZW50ICovCisJCW1lbWNweShiaDEs IGJoLCBzaXplb2YgKCpiaCkpOworCisJCWJoMS0+Yl9lbmRfaW8gPSBhdGFyYWlkX2VuZF9yZXF1 ZXN0OworCQliaDEtPmJfcHJpdmF0ZSA9IHByaXZhdGU7CisJCWJoMS0+Yl9yc2VjdG9yICs9IGF0 YXJhaWRfZ2VuZGlzay5wYXJ0W01JTk9SKGJoLT5iX3JkZXYpXS5zdGFydF9zZWN0OwkvKiBwYXJ0 aXRpb24gb2Zmc2V0ICovCisJCWJoMS0+Yl9yZGV2ID0gcmFpZFtkZXZpY2VdLmRpc2tbaV0uZGV2 aWNlOworCisJCS8qIHVwZGF0ZSB0aGUgbGFzdCBrbm93biBoZWFkIHBvc2l0aW9uIGZvciB0aGUg ZHJpdmUgKi8KKwkJcmFpZFtkZXZpY2VdLmRpc2tbaV0ubGFzdF9wb3MgPQorCQkgICAgYmgxLT5i X3JzZWN0b3IgKyAoYmgxLT5iX3NpemUgPj4gOSk7CisKKwkJZ2VuZXJpY19tYWtlX3JlcXVlc3Qo cncsIGJoMSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citpc3dyYWlkMV9yZWFk X3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICogcSwgaW50IHJ3LCBzdHJ1Y3QgYnVmZmVyX2hlYWQg KmJoKQoreworCWludCBkZXZpY2U7CisJaW50IGRpc3Q7CisJaW50IGJlc3Rzb2ZhciwgYmVzdGRp c3QsIGk7CisJc3RhdGljIGludCBwcmV2aW91czsKKworCURFQlVHKCJpc3dyYWlkOiBpc3dyYWlk MV9yZWFkX3JlcXVlc3RcbiIpOworCisJLyogUmVhZHMgYXJlIHNpbXBsZSBpbiBwcmluY2lwbGUu IFBpY2sgYSBkaXNrIGFuZCBnby4KKwkgKiBJbml0aWFsbHkgSSBjaGVhdCBieSBqdXN0IHBpY2tp bmcgdGhlIG9uZSB3aGljaCB0aGUgbGFzdCBrbm93bgorCSAqIGhlYWQgcG9zaXRpb24gaXMgY2xv c2VzdCBieS4KKwkgKiBMYXRlciBvbiwgb25saW5lL29mZmxpbmUgY2hlY2tpbmcgYW5kIHBlcmZv cm1hbmNlIG5lZWRzIGFkZGluZyAKKwkgKi8KKworCWRldmljZSA9IChiaC0+Yl9yZGV2ID4+IFNI SUZUKSAmIE1BSk9SX01BU0s7CisJYmgtPmJfcnNlY3RvciArPSBhdGFyYWlkX2dlbmRpc2sucGFy dFtNSU5PUihiaC0+Yl9yZGV2KV0uc3RhcnRfc2VjdDsKKworCWJlc3Rzb2ZhciA9IDA7CisJYmVz dGRpc3QgPSByYWlkW2RldmljZV0uZGlza1swXS5sYXN0X3BvcyAtIGJoLT5iX3JzZWN0b3I7CisJ aWYgKGJlc3RkaXN0IDwgMCkKKwkJYmVzdGRpc3QgPSAtYmVzdGRpc3Q7CisJaWYgKGJlc3RkaXN0 ID4gNDA5NSkKKwkJYmVzdGRpc3QgPSA0MDk1OworCisJZm9yIChpID0gMTsgaSA8IHJhaWRbZGV2 aWNlXS5kaXNrczsgaSsrKSB7CisJCWRpc3QgPSByYWlkW2RldmljZV0uZGlza1tpXS5sYXN0X3Bv cyAtIGJoLT5iX3JzZWN0b3I7CisJCWlmIChkaXN0IDwgMCkKKwkJCWRpc3QgPSAtZGlzdDsKKwkJ aWYgKGRpc3QgPiA0MDk1KQorCQkJZGlzdCA9IDQwOTU7CisKKwkJaWYgKGJlc3RkaXN0ID09IGRp c3QpIHsJLyogaXQncyBhIHRpZTsgdHJ5IHRvIGRvIHNvbWUgcmVhZCBiYWxhbmNpbmcgKi8KKwkJ CWlmICgocHJldmlvdXMgPiBiZXN0c29mYXIpICYmIChwcmV2aW91cyA8PSBpKSkKKwkJCQliZXN0 c29mYXIgPSBpOworCQkJcHJldmlvdXMgPSAocHJldmlvdXMgKyAxKSAlIHJhaWRbZGV2aWNlXS5k aXNrczsKKwkJfSBlbHNlIGlmIChiZXN0ZGlzdCA+IGRpc3QpIHsKKwkJCWJlc3RkaXN0ID0gZGlz dDsKKwkJCWJlc3Rzb2ZhciA9IGk7CisJCX0KKworCX0KKworCWJoLT5iX3JkZXYgPSByYWlkW2Rl dmljZV0uZGlza1tiZXN0c29mYXJdLmRldmljZTsKKwlyYWlkW2RldmljZV0uZGlza1tiZXN0c29m YXJdLmxhc3RfcG9zID0KKwkgICAgYmgtPmJfcnNlY3RvciArIChiaC0+Yl9zaXplID4+IDkpOwor CisJLyoKKwkgKiBMZXQgdGhlIG1haW4gYmxvY2sgbGF5ZXIgc3VibWl0IHRoZSBJTyBhbmQgcmVz b2x2ZSByZWN1cnNpb246CisJICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2lzd3Jh aWQxX21ha2VfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKiBxLCBpbnQgcncsIHN0cnVjdCBidWZm ZXJfaGVhZCAqYmgpCit7CisJREVCVUcoImlzd3JhaWQ6IGlzd3JhaWQxX21ha2VfcmVxdWVzdFxu Iik7CisKKwkvKiBSZWFkIGFuZCBXcml0ZSBhcmUgdG90YWxseSBkaWZmZXJlbnQgY2FzZXM7IHNw bGl0IHRoZW0gdG90YWxseSBoZXJlICovCisJaWYgKHJ3ID09IFJFQURBKQorCQlydyA9IFJFQUQ7 CisKKwlpZiAocncgPT0gUkVBRCkKKwkJcmV0dXJuIGlzd3JhaWQxX3JlYWRfcmVxdWVzdChxLCBy dywgYmgpOworCWVsc2UKKwkJcmV0dXJuIGlzd3JhaWQxX3dyaXRlX3JlcXVlc3QocSwgcncsIGJo KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQKK2NhbGNf aWNoYmxvY2tfb2Zmc2V0KGludCBtYWpvciwgaW50IG1pbm9yKQoreworCXVuc2lnbmVkIGxvbmcg bGJhID0gMDsKKwlrZGV2X3QgZGV2OworCXN0cnVjdCBnZW5kaXNrICpnZGlzazsKKworCURFQlVH KCJpc3dyYWlkOiBjYWxjX2ljaGJsb2NrX29mZnNldFxuIik7CisKKwlkZXYgPSBNS0RFVihtYWpv ciwgbWlub3IpOworCWdkaXNrID0gZ2V0X2dlbmRpc2soZGV2KTsKKworCWlmIChnZGlzayA9PSBO VUxMKQorCQlyZXR1cm4gMDsKKworCS8qIGdlbmRpc2stPnNpemVzIGFyZSBpbiAxMDI0IHNpemVk IGJsb2Nrcy4gVGhlcmVmb3JlIAorCSAqIG11bHRpcGx5aW5nIGJ5IDIgdG8gZ2V0IDUxMiBzaXpl ZCBibG9ja3MuCisJICovCisJbGJhID0gKGdkaXNrLT5zaXplc1ttaW5vcl0gKiAyKSAtIDI7CisJ cmV0dXJuIGxiYTsKK30KKworc3RhdGljIGludCBfX2luaXQKK3JlYWRfZGlza19zYihpbnQgbWFq b3IsIGludCBtaW5vciwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgYnVmc2l6ZSwKKwkgICAg IHVuc2lnbmVkIGxvbmcgbXBiX3BvcywgaW50IG1wYl9ibG9ja3MpCit7CisJaW50IHJldCA9IC1F SU5WQUw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CisJa2Rldl90IGRldiA9IE1L REVWKG1ham9yLCBtaW5vcik7CisKKwlERUJVRygiaXN3cmFpZDogcmVhZF9kaXNrX3NiXG4iKTsK KworCWlmIChibGtzaXplX3NpemVbbWFqb3JdID09IE5VTEwpCS8qIGRldmljZSBkb2Vzbid0IGV4 aXN0ICovCisJCXJldHVybiAtRUlOVkFMOworCisJc2V0X2Jsb2Nrc2l6ZShkZXYsIElDSF9ESVNL X0JMT0NLX1NJWkUpOworCisJYmggPSBicmVhZChkZXYsIG1wYl9wb3MsIG1wYl9ibG9ja3MgKiBJ Q0hfRElTS19CTE9DS19TSVpFKTsKKworCWlmIChiaCkgeworCQltZW1jcHkoYnVmZmVyLCBiaC0+ Yl9kYXRhLCBidWZzaXplKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImlzd3JhaWQ6 IEVycm9yIHJlYWRpbmcgc3VwZXJibG9jay5cbiIpOworCQlnb3RvIGFib3J0OworCX0KKwlyZXQg PSAwOworICAgICAgYWJvcnQ6CisJaWYgKGJoKQorCQlicmVsc2UoYmgpOworCXJldHVybiByZXQ7 Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBjaGVja3N1bSBvZiBjb250ZW50cyBvZiBSYWlkIG1ldGFk YXRhCisgKiBmb3IgbXBiU2l6ZS9zaXplb2YoVTMyKSB3b3JkcworICovCitzdGF0aWMgdTMyIF9f aW5pdAorY29tcHV0ZV9jaGVja3N1bSh1MzIgKiBidWZmZXIsIHUzMiBtcGJTaXplKQoreworCXUz MiBpOworCXUzMiBzdW0gPSAwOworCURFQlVHKCJpc3dyYWlkOiBjb21wdXRlX2NoZWNrc3VtXG4i KTsKKwlmb3IgKGkgPSAwOyBpIDwgKG1wYlNpemUgLyBzaXplb2YgKHUzMikpOyBpKyspCisJCXN1 bSArPSAqYnVmZmVyKys7CisJREVCVUcoImlzd3JhaWQ6IGNoZWNrc3VtIGNhbGN1bGF0ZWQgZnJv bSBtZXRhZGF0YSBpcyVsdSBcbiIsIHN1bSk7CisJcmV0dXJuIHN1bTsKK30KKworLyoKKyAqIFRo ZSByYWlkIG1lbWJlciBkaXNrcyBhcmUgc2NzaSBkZXZpY2VzLiBXZSBkbyBhbiBpbnF1aXJ5IHRv CisgKiB0byBkZXRlcm1pbmUgdGhlIGRpc2sgc2VyaWFsIG51bWJlci4gVGhpcyBpbmZvcm1hdGlv biBpcyB1c2VkCisgKiB0byBvcmRlciB0aGUgbWVtYmVyIGRpc2tzIGNvcnJlY3RseSBpbiB0aGUg cmFpZCBhcnJheS4KKyAqLworc3RhdGljIGludCBfX2luaXQKK2lzd3JhaWRfZG9faW5xdWlyeShp bnQgbWFqb3IsIGludCBtaW5vciwgdW5zaWduZWQgY2hhciAqaWNoX3NlcmlhbF9ubykKK3sKKwlr ZGV2X3QgZGV2OworCWludCBpLCByZXR2YWw7CisJdW5zaWduZWQgY2hhciAqY21kOworCXVuc2ln bmVkIGNoYXIgKnJlc3BwYWdlOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzEwMjRdOworCVNjc2lf RGV2aWNlICpTRHBudDsKKworCURFQlVHKCJpc3dyYWlkOiBpc3dyYWlkX2RvX2lucXVpcnlcbiIp OworCisJaWYgKGJsa3NpemVfc2l6ZVttYWpvcl0gPT0gTlVMTCkJLyogZGV2aWNlIGRvZXNuJ3Qg ZXhpc3QgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXYgPSBNS0RFVihtYWpvciwgbWlub3Ip OworCisJU0RwbnQgPSBibGtfZGV2W01BSk9SKGRldildLnF1ZXVlKGRldiktPnF1ZXVlZGF0YTsK KworCWlmIChTRHBudCA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwg MTAyNDsgaSsrKQorCQlidWZmZXJbaV0gPSAwOworCisJLyogaW5wdXQgZGF0YSBzaXplLiBObyBp bnB1dC4gKi8KKwkqKChpbnQgKikgYnVmZmVyKSA9IDA7CisJLyogb3V0cHV0IGJ1ZmZlciBzaXpl Li4gKi8KKwkqKCgoaW50ICopIGJ1ZmZlcikgKyAxKSA9IDEwMjQ7CisJLyogY21kIGlzIHRoZSBT Q1NJIGNvbW1hbmQgdG8gc2VuZCAqLworCWNtZCA9IChjaGFyICopICgoKGludCAqKSBidWZmZXIp ICsgMik7CisKKwljbWRbMF0gPSAweDEyOwkJLyogT3Bjb2RlIElOUVVJUlk9MTJoICovCisJY21k WzFdID0gMHgwMTsJCS8qIEVWUEQ9MS4gUmV0dXJuIHRoZSB2aXRhbCBwcm9kdWN0IGRhdGEgc3Bl Y2lmaWVkIGluIHBhZ2UgY29kZSAqLworCWNtZFsyXSA9IDB4ODA7CQkvKiBQYWdlIENvZGUgVW5p dCBzZXJpYWwgbnVtYmVyIHBhZ2U9ODBoICovCisJY21kWzNdID0gMHgwMDsJCS8qIFJlc2VydmVk IGJ5dGUgKi8KKwljbWRbNF0gPSAweGZmOwkJLyogYWxsb2NhdGlvbiBsZW5ndGggKi8KKwljbWRb NV0gPSAweDAwOwkJLyogQ29udHJvbCAgYnl0ZSAqLworCXJldHZhbCA9IGtlcm5lbF9zY3NpX2lv Y3RsKFNEcG50LCBTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORCwgYnVmZmVyKTsKKwlpZiAocmV0dmFs KSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJpc3dyYWlkOiBFUlJPUiBrZXJuZWxf c2NzaV9pb2N0bChTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORCkgZmFpbGVkLiBjb2RlPSAlZFxuIiwK KwkJICAgICAgIHJldHZhbCk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBWUEQgcGFnZSBpcyBh dCBsb2NhdGlvbiByZXNwcGFnZSAqLworCXJlc3BwYWdlID0gYnVmZmVyICsgODsKKwkvKiBUaGly ZCBieXRlIGlzIFBhZ2UgTGVuZ3RoICovCisJZm9yIChpID0gMDsgaSA8IHJlc3BwYWdlWzNdOyBp KyspIHsKKwkJaWYgKHJlc3BwYWdlWzQgKyBpXSAhPSAnICcpCisJCQlpY2hfc2VyaWFsX25vW2ld ID0gcmVzcHBhZ2VbNCArIGldOworCQllbHNlIHsKKwkJCWljaF9zZXJpYWxfbm9baV0gPSAnXDAn OworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFVzZWQgdG8gaG9sZCB0 aGUgUkFJRCB2b2x1bWUgaWRlbnRpZmllciBhbmQgdG8gZGlzdGluZ3Vpc2gKKyAqIGJldHdlZW4g UkFJRCBhcnJheXMgb2Ygc2FtZSB0eXBlLgorICovCitzdGF0aWMgdTMyIFJhaWRJRCA9IDA7CisK K3N0YXRpYyB2b2lkIF9faW5pdAorcHJvYmVkaXNrKHN0cnVjdCBkaXNrX2RldiAqcmRpc2ssIGlu dCBkZXZpY2UsIGludCByYWlkbGV2ZWwpCit7CisJaW50IGkgPSAwOworCXN0cnVjdCBfUmFpZE1w YiAqbXBiOworCXVuc2lnbmVkIGxvbmcgc2Jfb2Zmc2V0OworCWludCBzaWdMZW4gPSAwOworCXN0 YXRpYyB1bnNpZ25lZCBjaGFyIGJsb2NrWzQwOTZdOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJs b2NrMlsyMDQ4XTsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OworCWludCBtYWpvciwgbWlu b3I7CisKKwlERUJVRygiaXN3cmFpZDogcHJvYmVkaXNrIGZvciBSQUlEIGxldmVsICVkIFxuIiwg cmFpZGxldmVsKTsKKworCS8qIGFscmVhZHkgYXNzaWduZWQgdG8gYW5vdGhlciBhcnJheSAqLwor CWlmIChyZGlzay0+ZGV2aWNlICE9IC0xKQorCQlyZXR1cm47CisKKwltYWpvciA9IHJkaXNrLT5t YWpvcjsKKwltaW5vciA9IHJkaXNrLT5taW5vcjsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBw b3NpdGlvbiBvZiB0aGUgYmxvY2sgY29udGFpbmluZworCSAqIHRoZSBmaXJzdCBibG9jayBvZiBy YWlkIG1ldGFkYXRhLgorCSAqLworCXNiX29mZnNldCA9IGNhbGNfaWNoYmxvY2tfb2Zmc2V0KG1h am9yLCBtaW5vcik7CisKKwlpZiAoc2Jfb2Zmc2V0ID09IDApCisJCXJldHVybjsKKworCS8qIFJl YWQgdGhlIFJBSUQgbWV0YWRhdGEgaGVhZGVyICovCisJaWYgKHJlYWRfZGlza19zYgorCSAgICAo bWFqb3IsIG1pbm9yLCAodW5zaWduZWQgY2hhciAqKSAmYmxvY2ssIHNpemVvZiAoYmxvY2spLCBz Yl9vZmZzZXQsCisJICAgICAxKSkKKwkJcmV0dXJuOworCisJbXBiID0gKHN0cnVjdCBfUmFpZE1w YiAqKSAmYmxvY2s7CisKKwkvKiBDaGVjayBTaWduYXR1cmUgYW5kIHZlcnNpb24gaW5mbyAqLwor CXVuc2lnbmVkIGNoYXIgaWNoX3JhaWRfc2lnbmF0dXJlW01BWF9TSUdOQVRVUkVfTEVOR1RIXTsK KwlzdHJuY3B5KGljaF9yYWlkX3NpZ25hdHVyZSwgTVBCX1NJR05BVFVSRSwgc3RybGVuKE1QQl9T SUdOQVRVUkUpICsgMSk7CisJc3RybmNhdChpY2hfcmFpZF9zaWduYXR1cmUsIE1QQl9WRVJTSU9O X1JBSUQxLAorCQlzdHJsZW4oTVBCX1ZFUlNJT05fUkFJRDEpICsgMSk7CisJc2lnTGVuID0gc3Ry bGVuKGljaF9yYWlkX3NpZ25hdHVyZSk7CisJaWYgKHN0cm5jbXAobXBiLT5zaWcudGV4dCwgaWNo X3JhaWRfc2lnbmF0dXJlLCBzaWdMZW4pID4gMCkKKwkJcmV0dXJuOworCisJREVCVUcoImlzd3Jh aWQ6IEludGVsIFJBSUQgTWVtYmVyIGRpc2sgZm91bmQuXG4iKTsKKwlERUJVRygiaXN3cmFpZDog TWFqb3I6JWQgTWlub3I6JWQgU2lnbmF0dXJlOiAlcyBcbiIsIG1ham9yLCBtaW5vciwKKwkgICAg ICBtcGItPnNpZy50ZXh0KTsKKworCS8vRklYTUU6IFRoZSBzZWN0aW9uIGJlbG93IHNob3VsZCBy ZWFkIGluIGFsbCBvZiBNUEIgaWYgPiA1MTIuIAorCS8vQ2Fubm90IHRlc3QgY3VycmVudGx5IHdp dGggSUNINVIuIAorCWlmIChtcGItPm1wYlNpemUgPiA1MTIpIHsKKwkJLyogT0sgbm93IHRvIHJl YWQgaW4gdGhlIHJlc3Qgb2YgdGhlIE1QQi4gRmlyc3QgZnJvbSB0aGUgCisJCSAqIHNpemUgbGV0 cyBmaWd1cmUgb3V0IGhvdyBtYW55IG1vcmUgc2VjdG9ycy4KKwkJICovCisJCURFQlVHKCJpc3dy YWlkOiBTaXplIG9mIFJBSUQgbWV0YWRhdGEgaXMgJWxpIFxuIiwgbXBiLT5tcGJTaXplKTsKKwkJ aW50IFRvdGFsQmxvY2tzID0gKG1wYi0+bXBiU2l6ZSkgLyBJQ0hfRElTS19CTE9DS19TSVpFOwor CQlpZiAoVG90YWxCbG9ja3MgPiAxKSB7CisJCQkvL0ZvciBJQ0g1UiB3ZSB3aWxsIG1vc3QgcHJv YmFibHkgd29uJ3QgZ28gaGVyZS4KKwkJCURFQlVHCisJCQkgICAgKCJpc3dyYWlkOiBUb3RhbCBi bG9ja3M6ICVkLCByZWFkICVkIGJsb2NrcyBzdGFydGluZyBmcm9tICVsaSBcbiIsCisJCQkgICAg IFRvdGFsQmxvY2tzLCBUb3RhbEJsb2NrcyAtIDEsCisJCQkgICAgIHNiX29mZnNldCAtIChUb3Rh bEJsb2NrcyAtIDEpKTsKKwkJCWlmIChyZWFkX2Rpc2tfc2IKKwkJCSAgICAobWFqb3IsIG1pbm9y LCAodW5zaWduZWQgY2hhciAqKSAmYmxvY2syLAorCQkJICAgICBzaXplb2YgKGJsb2NrMiksIHNi X29mZnNldCAtIChUb3RhbEJsb2NrcyAtIDEpLAorCQkJICAgICAoVG90YWxCbG9ja3MgLSAxKSkp IHsKKwkJCQlERUJVRworCQkJCSAgICAoImlzd3JhaWQ6IGZhaWxlZCB0byByZWFkIHJlc3Qgb2Yg UkFJRCBtZXRhZGF0YVxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQkJbWVtY3B5KCZibG9ja1tJ Q0hfRElTS19CTE9DS19TSVpFXSwgYmxvY2syLAorCQkJICAgICAgIHNpemVvZiAoYmxvY2syKSAt IElDSF9ESVNLX0JMT0NLX1NJWkUpOworCQl9CisJfQorCisJLyogQ29tcGFyZSBjaGVja3N1bSBy ZWFkIGZyb20gTVBCIHdpdGggbmV3bHkgY2FsY3VsYXRlZCB2YWx1ZSAqLworCisJdTMyIGNoZWNr c3VtID0gbXBiLT5jaGVja1N1bTsKKwltcGItPmNoZWNrU3VtID0gMDsKKwlpZiAoY2hlY2tzdW0g IT0gY29tcHV0ZV9jaGVja3N1bSgodTMyICopIG1wYiwgbXBiLT5tcGJTaXplKSkgeworCQlwcmlu dGsoImlzd3JhaWQ6IEVSUk9SOiBjaGVja3N1bSBkaWQgbm90IG1hdGNoXG4iKTsKKwkJcmV0dXJu OworCX0KKworCURFQlVHKCJpc3dyYWlkOiBGb3VuZCBhbiBJbnRlbCBSYWlkIHZvbHVtZTogXG4i KTsKKwlERUJVRygiaXN3cmFpZDogICAgQ29udGFpbnMgJWQgbWVtYmVyIGRpc2tzXG4iLCBtcGIt Pm51bURpc2tzKTsKKworCS8qIFJhaWRJRCBpcyB1c2VkIHRvIHRyYWNrIHdoZXRoZXIgdGhlIGRp c2sgYmVsb25ncyB0byB0aGUgUkFJRCBhcnJheQorCSAqIHdlIGFyZSBjdXJyZW50bHkgZGV0ZWN0 aW5nLiBVc2luZyBGYW1pbHlOdW0uCisJICogRklYTUU6IFJvYnVzdCBjaGVja2luZywgdXNpbmcg Z2VuZXJhdGlvbk51bSBpbiBjb21iaW5hdGlvbiB3aXRoCisJICogZmFtaWx5TnVtCisJICovCisJ aWYgKFJhaWRJRCA9PSAwKQorCQlSYWlkSUQgPSBtcGItPmZhbWlseU51bTsKKwllbHNlIHsKKwkJ aWYgKFJhaWRJRCAhPSBtcGItPmZhbWlseU51bSkKKwkJCXJldHVybjsKKwl9CisKKyNpZmRlZiBE UklWRVJERUJVRworCXN0cnVjdCBfTXBiRGlzayAqZGlzazsKKwkvKiBHbyB0aHJ1IHRoZSBSQUlE IG1lbWJlciBkaXNrcyBpbmZvcm1hdGlvbiAqLworCWRpc2sgPSAoc3RydWN0IF9NcGJEaXNrICop IChtcGItPmRpc2tUYmwpOworCisJZm9yIChpID0gMDsgaSA8IG1wYi0+bnVtRGlza3M7IGkrKykg eworCQlERUJVRygiaXN3cmFpZDogRGlzayAlZCwgU2VyaWFsICVzXG4iLCBpLAorCQkgICAgICBt cGItPmRpc2tUYmxbaV0uc2VyaWFsLnNlcmlhbCk7CisJCURFQlVHKCJpc3dyYWlkOiBEaXNrICVk OiB0b3RhbCBibG9ja3MgJWx1IFNDU0kgSUQgJWQgXG4iLCBpLAorCQkgICAgICBkaXNrLT50b3Rh bEJsb2NrcywgZGlzay0+c2NzaUlkKTsKKwkJREVCVUcoImlzd3JhaWQ6ICAgICAgICAgIFNlcmlh bCAlcyBcbiIsIGRpc2stPnNlcmlhbC5zZXJpYWwpOworCQlkaXNrID0KKwkJICAgIChzdHJ1Y3Qg X01wYkRpc2sgKikgKCh1bnNpZ25lZCBsb25nKSBkaXNrICsKKwkJCQkJICh1bnNpZ25lZCBsb25n KSBzaXplb2YgKHN0cnVjdAorCQkJCQkJCQkgX01wYkRpc2spKTsKKwl9CisjZW5kaWYKKworCS8q IEdvIHRocnUgdGhlIFJBSUQgREVWIHN0cnVjdHVyZSAqLworCXN0cnVjdCBfTXBiUmFpZERldiAq cmFpZGRldjsKKwlpID0gbXBiLT5udW1EaXNrczsKKwlyYWlkZGV2ID0gKHN0cnVjdCBfTXBiUmFp ZERldiAqKSAoJm1wYi0+ZGlza1RibFtpXSk7CisKKwlERUJVRygiaXN3cmFpZDogTmFtZSBvZiB0 aGUgUkFJRCB2b2x1bWUgJXMgXG4iLCByYWlkZGV2LT5zZXJpYWwuc2VyaWFsKTsKKwlERUJVRygi aXN3cmFpZDogIFJBSUQgdm9sdW1lIFN0YXRlICVsdSBcbiIsIHJhaWRkZXYtPnN0YXR1cyk7CisK KwkvKiBQYXJzZSBSQUlEIG1ldGFkYXRhIGZvciByZWxldmFudCBpbmZvcm1hdGlvbiAqLworCXN0 cnVjdCBfTXBiUmFpZFZvbCAqdm9sOworCXZvbCA9ICZyYWlkZGV2LT5yYWlkVm9sOworCisjaWZk ZWYgRFJJVkVSREVCVUcKKwlpZiAodm9sLT5taWdyU3RhdGUgIT0gMCkgeworCQlERUJVRygiaXN3 cmFpZDogUkFJRCBWb2x1bWUgJXMgaXMgaW4gbWlncmF0aW5nIHN0YXRlXG4iLAorCQkgICAgICBy YWlkZGV2LT5zZXJpYWwuc2VyaWFsKTsKKwl9CisjZW5kaWYKKworCXN0cnVjdCBfTXBiUmFpZE1h cCAqbWFwOworCW1hcCA9ICZ2b2wtPmxvTWFwOworCisJLyogZGlmZmVyZW50IHJhaWRsZXZlbC4g Tm90IG5vdy4uLiBsYXRlciAqLworCWlmIChtYXAtPnJhaWRMZXZlbCAhPSByYWlkbGV2ZWwpCisJ CXJldHVybjsKKworCS8qIFdlIGRvIG5vdCBhdHRlbXB0IHRvIGRvIGFueSBraW5kIG9mIGVycm9y IHJlY292ZXJ5IG9uCisJICogUkFJRCBhcnJheSBlcnJvcnMuIEp1c3QgZG8gbm90IGNsYWltIGFy cmF5cyB3aGljaCBhcmUKKwkgKiBpbiBhYm5vcm1hbCBzdGF0ZS4gVXNlIE9wdGlvbiBST00gb3Ig Y29uZmlnIHV0aWxpdHkgdG8KKwkgKiBmaXggZm9yIG5vdy4KKwkgKi8KKwlpZiAobWFwLT5tYXBT dGF0ZSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gImlzd3JhaWQ6IFJBSUQgdm9sdW1lIG5v dCBpbiBub3JtYWwgc3RhdGUuXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaXN3cmFpZDogSWdu b3JpbmcgdGhpcyBSQUlEIHZvbHVtZS5cbiIpOworCQlyZXR1cm47CisJfQorCisJLyogT0ssIG5v dyB3ZSBuZWVkIHRvIHVuaXF1ZWx5IG1hdGNoIHRoaXMgZGlzayB0byBvbmUgb2YgdGhlIAorCSAq IFJBSUQgbWVtYmVyIGRpc2sgKHNpbmNlIG9yZGVyIG9mIHRoZSBkaXNrcyBpbiB0aGUgYXJyYXkg aXMKKwkgKiBpbXBvcnRhbnQuIFVzZSBEaXNrIHNlcmlhbCBudW1iZXIgZm9yIHRoaXMgcHVycG9z ZS4KKwkgKi8KKwlzdGF0aWMgdW5zaWduZWQgY2hhciBpY2hfZGlza19zZXJpYWxbMzJdOworCWlm IChpc3dyYWlkX2RvX2lucXVpcnkobWFqb3IsIG1pbm9yLCAodW5zaWduZWQgY2hhciAqKSAmaWNo X2Rpc2tfc2VyaWFsKQorCSAgICAhPSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gImlzd3JhaWQ6 IGlucXVpcnkgcmV0dXJuZWQgZXJyb3JcbiIpOworCQlyZXR1cm47CisJfQorCisJREVCVUcKKwkg ICAgKCJpc3dyYWlkOiBGb3IgZGlzayB3aXRoIG1ham9yOiVkIGFuZCBtaW5vciAlZCwgU2VyaWFs IG51bWJlciBpcyAlc1xuIiwKKwkgICAgIG1ham9yLCBtaW5vciwgaWNoX2Rpc2tfc2VyaWFsKTsK KworCWZvciAoaSA9IDA7IGkgPCBtcGItPm51bURpc2tzOyBpKyspIHsKKwkJaWYgKHN0cmNtcAor CQkgICAgKGljaF9kaXNrX3NlcmlhbCwKKwkJICAgICBtcGItPmRpc2tUYmxbbWFwLT5kaXNrT3Jk VGJsW2ldXS5zZXJpYWwuc2VyaWFsKSA9PSAwKSB7CisJCQlERUJVRworCQkJICAgICgiaXN3cmFp ZDogVGhpcyBkaXNrICVzIGlzIHRoZSAlZCB0aCBkaXNrIGluIGFycmF5XG4iLAorCQkJICAgICBp Y2hfZGlza19zZXJpYWwsIGkpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA9PSBtcGIt Pm51bURpc2tzKQorCQlyZXR1cm47CisKKwkvKiBXZSBoYXZlIGFsbCB0aGUgaW5mby4gTGV0cyBm aWxsIGluIHRoZSBhdGFyYWlkIHN0cnVjdHVyZSAqLworCWJkZXYgPSBiZGdldChNS0RFVihtYWpv ciwgbWlub3IpKTsKKwlpZiAoYmRldgorCSAgICAmJiBibGtkZXZfZ2V0KGJkZXYsIEZNT0RFX1JF QUQgfCBGTU9ERV9XUklURSwgMCwgQkRFVl9SQVcpID09IDApCisJCXJhaWRbZGV2aWNlXS5kaXNr W2ldLmJkZXYgPSBiZGV2OworCisJLy9GSVhNRTogY2xhaW0gdGhpcyBkZXZpY2Ugc28gdGhhdCB1 c2UgY2Fubm90IGFjY2VzcyBSQUlEIG1lbWJlciBkaXNrLgorCURFQlVHCisJICAgICgiaXN3cmFp ZDogYmxvY2tzUGVyTWVtYmVyPSAlbHUgYmxvY2tzUGVyU3RyaXA9JWx1IG51bURhdGFTdHJpcGVz PSVsdVxuIiwKKwkgICAgIG1hcC0+YmxvY2tzUGVyTWVtYmVyLCBtYXAtPmJsb2Nrc1BlclN0cmlw LCBtYXAtPm51bURhdGFTdHJpcGVzKTsKKwlyYWlkW2RldmljZV0uZGlza1tpXS5kZXZpY2UgPSBN S0RFVihtYWpvciwgbWlub3IpOworCXJhaWRbZGV2aWNlXS5kaXNrW2ldLnNlY3RvcnMgPSBtYXAt PmJsb2Nrc1Blck1lbWJlcjsKKwlyYWlkW2RldmljZV0uc3RyaWRlID0gbWFwLT5ibG9ja3NQZXJT dHJpcDsKKwlyYWlkW2RldmljZV0uZGlza3MgPSBtYXAtPm51bU1lbWJlcnM7CisJcmFpZFtkZXZp Y2VdLnNlY3RvcnMgPSByYWlkZGV2LT5udW1EYXRhQmxvY2tzTG87CisJcmFpZFtkZXZpY2VdLmdl b20uaGVhZHMgPSAyNTU7CisJcmFpZFtkZXZpY2VdLmdlb20uc2VjdG9ycyA9IDYzOworCXJhaWRb ZGV2aWNlXS5nZW9tLmN5bGluZGVycyA9CisJICAgIHJhaWRbZGV2aWNlXS5zZWN0b3JzIC8gcmFp ZFtkZXZpY2VdLmdlb20uaGVhZHMgLworCSAgICByYWlkW2RldmljZV0uZ2VvbS5zZWN0b3JzOwor CURFQlVHKCJpc3dyYWlkOiByYWlkWyVkXS5nZW9tLmN5bGluZGVycyAlbHUgXG4iLCBkZXZpY2Us CisJICAgICAgcmFpZFtkZXZpY2VdLmdlb20uY3lsaW5kZXJzKTsKKworCXJkaXNrLT5kZXZpY2Ug PSBkZXZpY2U7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdAorZmlsbF9jdXRvZmYoaW50IGRldmlj ZSkKK3sKKwlpbnQgaSwgajsKKwl1bnNpZ25lZCBsb25nIHNtYWxsZXN0OworCXVuc2lnbmVkIGxv bmcgYmFyOworCWludCBjb3VudDsKKworCWJhciA9IDA7CisJZm9yIChpID0gMDsgaSA8IE1BWF9S QUlEX01FTUJFUl9ESVNLUzsgaSsrKSB7CisJCXNtYWxsZXN0ID0gfjA7CisJCWZvciAoaiA9IDA7 IGogPCBNQVhfUkFJRF9NRU1CRVJfRElTS1M7IGorKykKKwkJCWlmICgocmFpZFtkZXZpY2VdLmRp c2tbal0uc2VjdG9ycyA8IHNtYWxsZXN0KQorCQkJICAgICYmIChyYWlkW2RldmljZV0uZGlza1tq XS5zZWN0b3JzID4gYmFyKSkKKwkJCQlzbWFsbGVzdCA9IHJhaWRbZGV2aWNlXS5kaXNrW2pdLnNl Y3RvcnM7CisJCWNvdW50ID0gMDsKKwkJZm9yIChqID0gMDsgaiA8IE1BWF9SQUlEX01FTUJFUl9E SVNLUzsgaisrKQorCQkJaWYgKHJhaWRbZGV2aWNlXS5kaXNrW2pdLnNlY3RvcnMgPj0gc21hbGxl c3QpCisJCQkJY291bnQrKzsKKworCQlzbWFsbGVzdCA9IHNtYWxsZXN0ICogY291bnQ7CisJCWJh ciA9IHNtYWxsZXN0OworCQlyYWlkW2RldmljZV0uY3V0b2ZmW2ldID0gc21hbGxlc3Q7CisJCXJh aWRbZGV2aWNlXS5jdXRvZmZfZGlza3NbaV0gPSBjb3VudDsKKwl9Cit9CisKK3N0YXRpYyBfX2lu aXQgaW50Citpc3dyYWlkX2luaXRfb25lKGludCBkZXZpY2UsIGludCByYWlkbGV2ZWwpCit7CisJ aW50IGksIGNvdW50OworCisJc3RydWN0IGRpc2tfZGV2ICpyZGlza19wOworCXJkaXNrX3AgPSBk ZXZsaXN0OworCXdoaWxlIChyZGlza19wICE9IE5VTEwpIHsKKwkJREVCVUcoImlzd3JhaWQ6IGdv aW5nIHRvIHByb2JlIGRpc2s6IG1ham9yICVkIGFuZCAlZCBcbiIsCisJCSAgICAgIHJkaXNrX3At Pm1ham9yLCByZGlza19wLT5taW5vcik7CisJCXByb2JlZGlzayhyZGlza19wLCBkZXZpY2UsIHJh aWRsZXZlbCk7CisJCXJkaXNrX3AgPSByZGlza19wLT5uZXh0OworCX0KKworCS8qIENoZWNrIHRo YXQgYWxsIHRoZSBSQUlEIG1lbWJlcnMgd2VyZSBwcm9wZXJseSBkZXRlY3RlZCAKKwkgKiBUaGVy ZSBzaG91bGQgYmUgcmFpZFtkZXZpY2VdLmRpc2tzIGRldGVjdGVkIGFuZCBpbmZvCisJICogZmls bGVkIGluIHRoZSBhcnJheS4gVGhpcyB3YXkgd2UgY2FuIGRldGVjdCBhbiBhcnJheQorCSAqIHdp dGggbWlzc2luZyBkaXNrLiBPdmVya2lsbCA/CisJICovCisJZm9yIChpID0gMDsgaSA8IHJhaWRb ZGV2aWNlXS5kaXNrczsgaSsrKSB7CisJCWlmIChyYWlkW2RldmljZV0uZGlza1tpXS5iZGV2ID09 IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAiaXN3cmFpZDogRVJST1I6 IFJBSUQgYXJyYXkgbWlzc2luZyBkaXNrKHMpLlxuIik7CisJCQlwcmludGsoS0VSTl9JTkZPCisJ CQkgICAgICAgImlzd3JhaWQ6IEVSUk9SOiBOb3QgcmVnaXN0ZXJpbmcgdGhpcyBSQUlEIGFycmF5 LlxuIik7CisJCQkvKiBDbGVhbiB1cCAqLworCQkJaW50IGo7CisJCQlmb3IgKGogPSAwOyBqIDwg TUFYX1JBSURfTUVNQkVSX0RJU0tTOyBqKyspIHsKKwkJCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpi ZGV2ID0KKwkJCQkgICAgcmFpZFtkZXZpY2VdLmRpc2tbal0uYmRldjsKKwkJCQlyYWlkW2Rldmlj ZV0uZGlza1tqXS5iZGV2ID0gTlVMTDsKKwkJCQlpZiAoYmRldikKKwkJCQkJYmxrZGV2X3B1dChi ZGV2LCBCREVWX1JBVyk7CisJCQl9CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKworCWlm IChyYWlkbGV2ZWwgPT0gMCkKKwkJZmlsbF9jdXRvZmYoZGV2aWNlKTsKKworCS8qIEluaXRpYWxp emUgdGhlIGdlbmRpc2sgc3RydWN0dXJlICovCisKKwlhdGFyYWlkX3JlZ2lzdGVyX2Rpc2soZGV2 aWNlLCByYWlkW2RldmljZV0uc2VjdG9ycyk7CisKKwljb3VudCA9IDA7CisKKwlmb3IgKGkgPSAw OyBpIDwgTUFYX1JBSURfTUVNQkVSX0RJU0tTOyBpKyspIHsKKwkJaWYgKHJhaWRbZGV2aWNlXS5k aXNrW2ldLmRldmljZSAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgImlz d3JhaWQ6IFJBSUQgbWVtYmVyIGRyaXZlICVpIGlzICVsaSBNYiAoJWkgLyAlaSkgXG4iLAorCQkJ ICAgICAgIGksIHJhaWRbZGV2aWNlXS5kaXNrW2ldLnNlY3RvcnMgLyAyMDQ4LAorCQkJICAgICAg IE1BSk9SKHJhaWRbZGV2aWNlXS5kaXNrW2ldLmRldmljZSksCisJCQkgICAgICAgTUlOT1IocmFp ZFtkZXZpY2VdLmRpc2tbaV0uZGV2aWNlKSk7CisJCQljb3VudCsrOworCQl9CisJfQorCisJaWYg KGNvdW50KSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJpc3dyYWlkOiBSYWlkJWkg YXJyYXkgY29uc2lzdHMgb2YgJWkgZHJpdmVzLiBcbiIsCisJCSAgICAgICByYWlkbGV2ZWwsIGNv dW50KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorfQor CitzdGF0aWMgaW50IF9faW5pdAorZGV0ZWN0X2Rldmxpc3Qodm9pZCkKK3sKKworCXN0cnVjdCBk aXNrX2RldiAqZGV2bGlzdF90bXAgPSBOVUxMOworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7 CisJaW50IG1ham9yLCBtaW5vcjsKKwlpbnQgZGV2X2NvdW50ID0gMDsKKworCURFQlVHKCJpc3dy YWlkOiBkZXRlY3RfZGV2bGlzdDogbG9va2luZyBmb3IgU0NTSSBkaXNrc1xuIik7CisKKwltYWpv ciA9IFNDU0lfRElTSzBfTUFKT1I7CisKKwltaW5vciA9IDA7CisJZG8geworCQkvKiBUaGlzIGlz IHJlYWxseSBhIGNvcm5lciBjYXNlOiBjaGVja2luZyBmb3IgYWxsIHBvc3NpYmxlCisJCSAqIFND U0kgZGlza3MuIFdoYXQgYXJlIHRoZSBvZGRzID8KKwkJICovCisJCWlmIChtaW5vciA+IDI0MCkg eworCQkJbWlub3IgPSAwOworCQkJaWYgKG1ham9yID09IFNDU0lfRElTSzdfTUFKT1IpCisJCQkJ YnJlYWs7CisJCQlpZiAobWFqb3IgPT0gU0NTSV9ESVNLMF9NQUpPUikKKwkJCQltYWpvciA9IFND U0lfRElTSzFfTUFKT1I7CisJCQllbHNlCisJCQkJbWFqb3IrKzsKKwkJfQorCisJCWJkZXYgPSBi ZGdldChNS0RFVihtYWpvciwgbWlub3IpKTsKKwkJLyogQ2hlY2sgaWYgaXQgaXMgYSB2YWxpZCBk ZXZpY2UgKi8KKwkJaWYgKGJkZXYKKwkJICAgICYmIGJsa2Rldl9nZXQoYmRldiwgRk1PREVfUkVB RCB8IEZNT0RFX1dSSVRFLCAwLAorCQkJCSAgQkRFVl9SQVcpID09IDApIHsKKwkJCS8qIGEgcmVh bCBwaHlzaWNhbCBkZXZpY2UgZm91bmQsIGFkZCB0byBkZXZsaXN0ICovCisKKwkJCWRldmxpc3Rf dG1wID0KKwkJCSAgICBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGRpc2tfZGV2KSwgR0ZQX0tFUk5F TCk7CisJCQlkZXZsaXN0X3RtcC0+bWFqb3IgPSBtYWpvcjsKKwkJCWRldmxpc3RfdG1wLT5taW5v ciA9IG1pbm9yOworCQkJREVCVUcKKwkJCSAgICAoImlzd3JhaWQ6IGRldGVjdF9kZXZsaXN0OiBG b3VuZCBwb3NzaWJsZSBkZXZpY2U6IG1ham9yICVkIGFuZCBtaW5vciAlZCBcbiIsCisJCQkgICAg IG1ham9yLCBtaW5vcik7CisJCQlkZXZsaXN0X3RtcC0+ZGV2aWNlID0gLTE7CisJCQlkZXZsaXN0 X3RtcC0+bmV4dCA9IGRldmxpc3Q7CisJCQlkZXZsaXN0ID0gZGV2bGlzdF90bXA7CisJCQlkZXZf Y291bnQrKzsKKwkJfSBlbHNlIHsKKwkJCURFQlVHKCJpc3dyYWlkOiBmb3VuZCAlZCBTQ1NJIERl dmljZXMgdG8gcHJvYmUgXG4iLAorCQkJICAgICAgZGV2X2NvdW50KTsKKwkJCS8qIFNDU0kgZGlz a3MgYXJlIGNsYWltZWQgc2VxdWVudGlhbGx5LiBTbyB3ZSBjYW4gc3RvcCBzZWFyY2hpbmcgd2hl bgorCQkJICogd2UgZW5jb3VudGVyIHRoZSBmaXJzdCBpbnZhbGlkIGRldmljZS4KKwkJCSAqLwor CQkJYnJlYWs7CisJCX0KKwkJbWlub3IgPSBtaW5vciArIDE2OworCisJfSB3aGlsZSAoMSk7CisK KwlyZXR1cm4gZGV2X2NvdW50OworfQorCitzdGF0aWMgX19pbml0IGludAoraXN3cmFpZF9pbml0 KHZvaWQpCit7CisJaW50IHJldHZhbCwgZGV2aWNlLCBjb3VudCA9IDA7CisJaW50IGRldmxpc3Rf Y291bnQgPSAwOworCWludCBpLCBqOworCisJcHJpbnRrKEtFUk5fSU5GTyAiaXN3cmFpZDogSW50 ZWwodG0pIFNvZnR3YXJlIFJBSUQgZHJpdmVyICVzIFxuIiwKKwkgICAgICAgSUNIX1ZFUlNJT05f U1RSSU5HKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHJhaWQgc3RydWN0dXJlIHRvIGluaXQgdmFs dWVzICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9SQUlEX1ZPTFVNRVM7IGkrKykgeworCQlyYWlk W2ldLmRpc2tzID0gMDsKKwkJcmFpZFtpXS5yZWZjbnQgPSAwOworCQlmb3IgKGogPSAwOyBqIDwg TUFYX1JBSURfTUVNQkVSX0RJU0tTOyBqKyspIHsKKwkJCXJhaWRbaV0uZGlza1tqXS5iZGV2ID0g TlVMTDsKKwkJfQorCX0KKworCWRldmxpc3RfY291bnQgPSBkZXRlY3RfZGV2bGlzdCgpOworCisJ aWYgKGRldmxpc3RfY291bnQgPT0gMCkgeworCQlERUJVRygiaXN3cmFpZDogTm8gU0NTSSBkaXNr cyBmb3VuZCBcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiaXN3cmFpZDogTm8gcmFpZCBhcnJh eSBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCURFQlVHKCJpc3dyYWlkOiBk ZXRlY3RpbmcgUkFJRCAwIHZvbHVtZXNcbiIpOworCWRvIHsKKwkJUmFpZElEID0gMDsKKwkJZGV2 aWNlID0gYXRhcmFpZF9nZXRfZGV2aWNlKCZpc3dyYWlkMF9vcHMpOworCQlpZiAoZGV2aWNlIDwg MCkKKwkJCWJyZWFrOworCQlyZXR2YWwgPSBpc3dyYWlkX2luaXRfb25lKGRldmljZSwgMCk7CisJ CWlmIChyZXR2YWwpIHsKKwkJCWF0YXJhaWRfcmVsZWFzZV9kZXZpY2UoZGV2aWNlKTsKKwkJCWJy ZWFrOworCQl9IGVsc2UgeworCQkJY291bnQrKzsKKwkJfQorCX0gd2hpbGUgKDEpOworCisJREVC VUcoImlzd3JhaWQ6IGRldGVjdGluZyBSQUlEIDEgdm9sdW1lc1xuIik7CisJZG8geworCQlSYWlk SUQgPSAwOworCQlkZXZpY2UgPSBhdGFyYWlkX2dldF9kZXZpY2UoJmlzd3JhaWQxX29wcyk7CisJ CWlmIChkZXZpY2UgPCAwKQorCQkJYnJlYWs7CisJCXJldHZhbCA9IGlzd3JhaWRfaW5pdF9vbmUo ZGV2aWNlLCAxKTsKKwkJaWYgKHJldHZhbCkgeworCQkJYXRhcmFpZF9yZWxlYXNlX2RldmljZShk ZXZpY2UpOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQljb3VudCsrOworCQl9CisJfSB3aGls ZSAoMSk7CisKKwlpZiAoY291bnQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaXN3cmFpZDogRm91 bmQgJWQgUkFJRCBhcnJheShzKSBcbiIsIGNvdW50KTsKKwkJcmV0dXJuIDA7CisJfQorCXByaW50 ayhLRVJOX0RFQlVHICJpc3dyYWlkOiBObyByYWlkIGFycmF5IGZvdW5kXG4iKTsKKwlyZXR1cm4g LUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgX19leGl0Citpc3dyYWlkX2V4aXQodm9pZCkKK3sK KwlpbnQgaSwgZGV2aWNlOworCWZvciAoZGV2aWNlID0gMDsgZGV2aWNlIDwgTUFYX1JBSURfVk9M VU1FUzsgZGV2aWNlKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9SQUlEX01FTUJFUl9ESVNL UzsgaSsrKSB7CisJCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gcmFpZFtkZXZpY2VdLmRp c2tbaV0uYmRldjsKKwkJCXJhaWRbZGV2aWNlXS5kaXNrW2ldLmJkZXYgPSBOVUxMOworCQkJaWYg KGJkZXYpCisJCQkJYmxrZGV2X3B1dChiZGV2LCBCREVWX1JBVyk7CisJCX0KKwkJcmFpZFtkZXZp Y2VdLnJlZmNudCA9IDA7CisJCWlmIChyYWlkW2RldmljZV0uc2VjdG9ycykKKwkJCWF0YXJhaWRf cmVsZWFzZV9kZXZpY2UoZGV2aWNlKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2lzd3JhaWRfb3Bl bihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlNT0RfSU5DX1VT RV9DT1VOVDsKKwl1bnNpZ25lZCBpbnQgbWlub3I7CisKKwlpZiAoIWlub2RlIHx8ICFpbm9kZS0+ aV9yZGV2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRl dikgPj4gU0hJRlQ7CisJZG93bigmaXN3cmFpZF9zZW0pOworCXJhaWRbbWlub3JdLnJlZmNudCsr OworCXVwKCZpc3dyYWlkX3NlbSk7CisKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQKK2lzd3Jh aWRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlN T0RfREVDX1VTRV9DT1VOVDsKKwl1bnNpZ25lZCBpbnQgbWlub3I7CisJaWYgKCFpbm9kZSB8fCAh aW5vZGUtPmlfcmRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltaW5vciA9IE1JTk9SKGlub2Rl LT5pX3JkZXYpID4+IFNISUZUOworCWRvd24oJmlzd3JhaWRfc2VtKTsKKwlyYWlkW21pbm9yXS5y ZWZjbnQtLTsKKwl1cCgmaXN3cmFpZF9zZW0pOworCisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9p bml0KGlzd3JhaWRfaW5pdCk7Cittb2R1bGVfZXhpdChpc3dyYWlkX2V4aXQpOworTU9EVUxFX0xJ Q0VOU0UoIkdQTCIpOwpkaWZmIC11TnIgbGludXgtMi40LjIyL2RyaXZlcnMvaWRlL3JhaWQvaXN3 cmFpZC5oIGxpbnV4LTIuNC4yMi1pc3cvZHJpdmVycy9pZGUvcmFpZC9pc3dyYWlkLmgKLS0tIGxp bnV4LTIuNC4yMi9kcml2ZXJzL2lkZS9yYWlkL2lzd3JhaWQuaAkxOTY5LTEyLTMxIDE3OjAwOjAw LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi40LjIyLWlzdy9kcml2ZXJzL2lkZS9yYWlkL2lz d3JhaWQuaAkyMDAzLTA5LTI0IDEyOjIyOjUxLjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDk4 IEBACisvKgorICogaXN3cmFpZC5oIENvcHlyaWdodCAoYykgMjAwMywyMDA0IEludGVsICBDb3Jw b3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqICAgYW55IGxhdGVyIHZlcnNpb24u CisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAoZm9yIGV4YW1wbGUgL3Vzci9zcmMvbGludXgvQ09Q WUlORyk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICog QXV0aG9yKHMpOiBCb2ppIFRvbnkgS2FubmFudGhhbmFtIAorICogICAgICAgICAgPCBib2ppIGRv dCB0IGRvdCBrYW5uYW50aGFuYW0gYXQgaW50ZWwgZG90IGNvbT4KKyAqCisgKi8KKworLy8gICAg ICAgICAgICAgICAgICAgICAgICAgICAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIi CisjZGVmaW5lIE1QQl9TSUdOQVRVUkUJICAgICAiSW50ZWwgUmFpZCBJU00gQ2ZnIFNpZy4gIgor I2RlZmluZSBNUEJfVkVSU0lPTl9SQUlEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEu MC4wMCIKKyNkZWZpbmUgTVBCX1ZFUlNJT05fUkFJRDEgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIxLjEuMDAiCisjZGVmaW5lIE1BWF9TSUdOQVRVUkVfTEVOR1RIIDMyCisjZGVmaW5lIE1B WF9SQUlEX1NFUklBTF9MRU4gIDE2CisjZGVmaW5lIElDSF9ESVNLX0JMT0NLX1NJWkUJNTEyCisK K3N0cnVjdCBNcGJTZXJpYWwgeworCWNoYXIgc2VyaWFsW01BWF9SQUlEX1NFUklBTF9MRU5dOwor fTsKKworLyogRElTSyBDT05GSUdVUkFUSU9OIElORk8gKi8KK3N0cnVjdCBfTXBiRGlzayB7CisJ c3RydWN0IE1wYlNlcmlhbCBzZXJpYWw7CS8vIGFzY2lpIHNlcmlhbCBudW1iZXIKKwl1MzIgdG90 YWxCbG9ja3M7CS8vIHRvdGFsIGJsb2NrcworCXUzMiBzY3NpSWQ7CQkvLyBzY3NpIElECisJdTMy IHN0YXR1czsJCS8vIFNhbWUgYXMgRGlzay5zdGF0dXMKKyNkZWZpbmUJTVBCX0RJU0tfRklMTEVS UwkoNSkJLy8gZmlsbGVyIHNwYWNlIHJlc2VydmVkIGZvcgorCXUzMiBmaWxsZXJbTVBCX0RJU0tf RklMTEVSU107CS8vICAgZnV0dXJlIGV4cGFuc2lvbgorfTsKKworLyoJUkFJRCBNQVAgQ09ORklH VVJBVElPTiBJTkZPICovCitzdHJ1Y3QgX01wYlJhaWRNYXAgeworCisJdTMyIHBiYU9mTGJhMDsJ CS8vIHN0YXJ0IGFkZHJlc3Mgb2YgcGFydGl0aW9uCisJdTMyIGJsb2Nrc1Blck1lbWJlcjsJLy8g YmxvY2tzIHBlciBtZW1iZXIKKwl1MzIgbnVtRGF0YVN0cmlwZXM7CS8vIG51bWJlciBvZiBkYXRh IHN0cmlwZXMKKwl1MTYgYmxvY2tzUGVyU3RyaXA7CisJdTggbWFwU3RhdGU7CQkvLyBOb3JtYWws IFVuaW5pdGlhbGl6ZWQsIERlZ3JhZGVkLCBGYWlsZWQKKwl1OCByYWlkTGV2ZWw7CQkvLyAwLCAx CisJdTggbnVtTWVtYmVyczsJCS8vIG51bWJlciBvZiBtZW1iZXIgZGlza3MKKwl1OCByZXNlcnZl ZFszXTsKKyNkZWZpbmUgTVBCX1JBSURfTUFQX0ZJTExFUlMJKDcpCS8vIGV4cGFuc2lvbiBhcmVh CisJdTMyIGZpbGxlcltNUEJfUkFJRF9NQVBfRklMTEVSU107CS8vIGV4cGFuc2lvbiBhcmVhCisJ dTMyIGRpc2tPcmRUYmxbMV07Cit9OworCisvKiBSQUlEIFZPTFVNRSBJTkZPICovCisKK3N0cnVj dCBfTXBiUmFpZFZvbCB7CisJdTMyIHJlc2VydmVkWzJdOworCXU4IG1pZ3JTdGF0ZTsJCS8vIE5v cm1hbCBvciBNaWdyYXRpbmcKKwl1OCBtaWdyVHlwZTsJCS8vIEluaXRpYWxpemluZywgUmVidWls ZGluZywgLi4uCisJdTggZGlydHk7CisJdTggZmlsbFsxXTsKKyNkZWZpbmUJTVBCX1JBSURfVk9M X0ZJTExFUlMJKDUpCS8vIGV4cGFuc2lvbiBhcmVhIGtlZXBzIHRoZSBsb01hcAorCXUzMiBmaWxs ZXJbTVBCX1JBSURfVk9MX0ZJTExFUlNdOworCXN0cnVjdCBfTXBiUmFpZE1hcCBsb01hcDsKK307 CisKKy8qIFJBSUQgREVWSUNFIENPTkZJR1VSQVRJT04gSU5GTyAqLworc3RydWN0IF9NcGJSYWlk RGV2IHsKKwlzdHJ1Y3QgTXBiU2VyaWFsIHNlcmlhbDsJLy8gc2VyaWFsIG51bWJlcgorCXUzMiBu dW1EYXRhQmxvY2tzTG87CS8vIERhdGEgYmxvY2tzIG9uIGRldmljZSAobG93IDMyIGJpdHMpCisJ dTMyIG51bURhdGFCbG9ja3NIaTsJLy8gRGF0YSBibG9ja3Mgb24gZGV2aWNlIChoaWdoIDMyIGJp dHMpCisJdTMyIHN0YXR1czsJCS8vIFBlcnNpc3RlbnQgUmFpZERldiBzdGF0dXMKKwl1MzIgcmVz ZXJ2ZWRCbG9ja3M7CS8vIFJlc2VydmVkIGJsb2NrcyBhdCBiZWdpbm5pbmcgb2Ygdm9sdW1lCisj ZGVmaW5lCU1QQl9SQUlEX0RFVl9GSUxMRVJTCSgxMikKKwl1MzIgZmlsbGVyW01QQl9SQUlEX0RF Vl9GSUxMRVJTXTsKKwlzdHJ1Y3QgX01wYlJhaWRWb2wgcmFpZFZvbDsKK307CisKK3N0cnVjdCBS YWlkQ2ZnU2lnIHsKKwljaGFyIHRleHRbTUFYX1NJR05BVFVSRV9MRU5HVEhdOworfTsKKworc3Ry dWN0IF9SYWlkTXBiIHsKKwlzdHJ1Y3QgUmFpZENmZ1NpZyBzaWc7CisJdTMyIGNoZWNrU3VtOwkJ Ly8gTVBCIENoZWNrc3VtCisJdTMyIG1wYlNpemU7CQkvLyBTaXplIG9mIE1QQgorCXUzMiBmYW1p bHlOdW07CQkvLyBDaGVja3N1bSBmcm9tIGZpcnN0IHRpbWUgdGhpcyBjb25maWcgd2FzIHdyaXR0 ZW4KKwl1MzIgZ2VuZXJhdGlvbk51bTsKKwl1MzIgcmVzZXJ2ZWRbMl07CisJdTggbnVtRGlza3M7 CQkvLyBOdW1iZXIgb2YgY29uZmlndXJlZCBkaXNrcworCXU4IGZpbGxbM107CisjZGVmaW5lIFJB SURfTVBCX0ZJTExFUlMJKDM5KQorCXUzMiBmaWxsZXJbUkFJRF9NUEJfRklMTEVSU107CisJc3Ry dWN0IF9NcGJEaXNrIGRpc2tUYmxbMV07Cit9OwpkaWZmIC11TnIgbGludXgtMi40LjIyL2RyaXZl cnMvaWRlL3JhaWQvTWFrZWZpbGUgbGludXgtMi40LjIyLWlzdy9kcml2ZXJzL2lkZS9yYWlkL01h a2VmaWxlCi0tLSBsaW51eC0yLjQuMjIvZHJpdmVycy9pZGUvcmFpZC9NYWtlZmlsZQkyMDAzLTA2 LTEzIDA3OjUxOjM0LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi40LjIyLWlzdy9kcml2ZXJz L2lkZS9yYWlkL01ha2VmaWxlCTIwMDMtMDktMjQgMTI6MjI6MzUuMDAwMDAwMDAwIC0wNzAwCkBA IC0xMyw2ICsxMyw3IEBACiBvYmotJChDT05GSUdfQkxLX0RFVl9BVEFSQUlEX1BEQykJKz0gcGRj cmFpZC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9BVEFSQUlEX0hQVCkJKz0gaHB0cmFpZC5vCiBv YmotJChDT05GSUdfQkxLX0RFVl9BVEFSQUlEX1NJSSkJKz0gc2lscmFpZC5vCitvYmotJChDT05G SUdfQkxLX0RFVl9BVEFSQUlEX0lTVykJKz0gaXN3cmFpZC5vCiAKIEVYVFJBX0NGTEFHUwk6PSAt SS4uLwogCg== ------_=_NextPart_001_01C3B2F1.9FA8A7FE--