Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:59197 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 43397 invoked from network); 29 Mar 2012 03:13:33 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 29 Mar 2012 03:13:33 -0000 Authentication-Results: pb1.pair.com smtp.mail=cpriest@zerocue.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=cpriest@zerocue.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain zerocue.com designates 74.115.204.40 as permitted sender) X-PHP-List-Original-Sender: cpriest@zerocue.com X-Host-Fingerprint: 74.115.204.40 relay-hub204.domainlocalhost.com Received: from [74.115.204.40] ([74.115.204.40:48382] helo=relay-hub204.domainlocalhost.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 57/60-40519-A53D37F4 for ; Wed, 28 Mar 2012 22:13:32 -0500 Received: from MBX201.domain.local ([169.254.1.167]) by HUB204.domain.local ([192.168.69.4]) with mapi id 14.01.0355.002; Wed, 28 Mar 2012 23:13:25 -0400 To: "internals@lists.php.net" Thread-Topic: (*PATCH*) getters/setters Implementation Thread-Index: Ac0NWORG1bLWHQK7SWW3B6CwIICvWA== Date: Thu, 29 Mar 2012 03:13:24 +0000 Message-ID: <9570D903A3BECE4092E924C2985CE485517221FD@MBX201.domain.local> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [192.168.64.23] Content-Type: multipart/mixed; boundary="_004_9570D903A3BECE4092E924C2985CE485517221FDMBX201domainloc_" MIME-Version: 1.0 Subject: (*PATCH*) getters/setters Implementation From: cpriest@zerocue.com (Clint M Priest) --_004_9570D903A3BECE4092E924C2985CE485517221FDMBX201domainloc_ Content-Type: multipart/alternative; boundary="_000_9570D903A3BECE4092E924C2985CE485517221FDMBX201domainloc_" --_000_9570D903A3BECE4092E924C2985CE485517221FDMBX201domainloc_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Per RFC: https://wiki.php.net/rfc/propertygetsetsyntax Detailed Implementation Notes Document: https://wiki.php.net/rfc/propertygetsetsyntax-as-implemented Getters/Setters has been built. This is my first patch to the php core. H= ere is what has been implemented: Static getters/setters syntax static public $Hours { get { return self::$_Hours; } set { self::$_Hours =3D $value; } } Asymmetrical getters/setters syntax public $Hours { get { return $this->_Hours; } protected set { $this->_Hours =3D $value; } } Default getter/setter implementations (auto-backing) public $Hours { /* Implements protected $__Hours; */ get; /* { return $this->__Hours; } set; /* { $this->__Hours =3D $value= ; } } Interfaces (Requires implementation by implementing classes) private $Hours { get; set; } Overloading Properties - Properties are inherited and can be over-ridden in= child classes provided the parent has not specified final on an accessor. Traits No changes necessary, implementation worked without further changes necessa= ry Errors Updated errors to refer to getter/setter implementation when related Note * This does not interfere with typical __get()/__set() functionalit= y which will take effect whenever there is not a specific accessor availabl= e. * There are also 25 unit tests, testing all of this functionality * There is also a patch to change the reflection extension to expos= e new functions for accessors. What are the next steps to get this added to some future release? Attache= d is a patch against ~/trunk --_000_9570D903A3BECE4092E924C2985CE485517221FDMBX201domainloc_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Per RFC:

https://wiki.php.net/rfc/propertygetsetsyntax

 

Detailed Implementation Notes Document: <= /p>

https://wiki.php.net/rfc/propertygetsetsyntax-as-imple= mented

 

Getters/Setters has been built.  This is my fir= st patch to the php core.  Here is what has been implemented:

 

Static getters/setters syntax

static public $Hours {

    &= nbsp;          get { retu= rn self::$_Hours; }

    &= nbsp;          set { self= ::$_Hours =3D $value; }

}

 

Asymmetrical getters/setters syntax

public $Hours {

    &= nbsp;          get { retu= rn $this->_Hours; }

    &= nbsp;           protected= set { $this->_Hours =3D $value; }

}

 

Default getter/setter implementations (auto-backi= ng)

        &= nbsp;       public $Hours {   /= * Implements protected $__Hours; */

        &nbs= p;            &= nbsp;         get;  =        /* { return $this->__Hours; }<= /o:p>

        &nbs= p;            &= nbsp;         set;  =         /* { $this->__Hours =3D $valu= e; }

        &nbs= p;       }

 

Interfaces (Requires implementation by implem= enting classes)

        &= nbsp;       private $Hours { <= /p>

        &nbs= p;            &= nbsp;          get;=

        &nbs= p;            &= nbsp;          set;=

        &nbs= p;       }

 

Overloading Properties – Properties are= inherited and can be over-ridden in child classes provided the parent has = not specified final on an accessor.

 

 

Traits

No changes necessary, implementation worked without = further changes necessary

 

Errors

Updated errors to refer to getter/setter implementat= ion when related

 

Note

·         This does not interfere with typical __get()= /__set() functionality which will take effect whenever there is not a speci= fic accessor available.

·         There are also 25 unit tests, testing all of= this functionality

·         There is also a patch to change the reflecti= on extension to expose new functions for accessors.

 

What are the next steps to get this added to some fu= ture release?   Attached is a patch against ~/trunk

 

 

 

--_000_9570D903A3BECE4092E924C2985CE485517221FDMBX201domainloc_-- --_004_9570D903A3BECE4092E924C2985CE485517221FDMBX201domainloc_ Content-Type: text/plain; name="v2.5.patch.txt" Content-Description: v2.5.patch.txt Content-Disposition: attachment; filename="v2.5.patch.txt"; size=45188; creation-date="Thu, 29 Mar 2012 03:01:43 GMT"; modification-date="Thu, 29 Mar 2012 03:01:43 GMT" Content-Transfer-Encoding: base64 SW5kZXg6IFplbmQvemVuZC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFplbmQvemVuZC5jCShyZXZpc2lvbiAz MjQ0MzkpCisrKyBaZW5kL3plbmQuYwkod29ya2luZyBjb3B5KQpAQCAtMTM0Myw2ICsxMzQzLDE2 IEBACiB9CiAvKiB9fX0gKi8KIAorLyogUmV0dXJucyBhIG5ldyBzdHJpbmcgb2YgY29tYmluZWQg c3RyaW5ncyAqLworY2hhciAqc3RyY2F0YWxsb2MoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAq YikgLyoge3t7ICovCit7CisJY2hhciAqb3V0ID0gZXN0cm5kdXAoYSwgc3RybGVuKGEpICsgc3Ry bGVuKGIpKzEpOworCW1lbWNweSgmb3V0W3N0cmxlbihhKV0sIGIsIHN0cmxlbihiKSsxKTsKKwly ZXR1cm4gb3V0OworfQorLyogfX19ICovCisKKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAq IHRhYi13aWR0aDogNApJbmRleDogWmVuZC96ZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gWmVuZC96ZW5k LmgJKHJldmlzaW9uIDMyNDQzOSkKKysrIFplbmQvemVuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00 NjksNiArNDY5LDggQEAKIAogCUhhc2hUYWJsZSBmdW5jdGlvbl90YWJsZTsKIAlIYXNoVGFibGUg cHJvcGVydGllc19pbmZvOworCUhhc2hUYWJsZSBhY2Nlc3NvcnM7CisKIAl6dmFsICoqZGVmYXVs dF9wcm9wZXJ0aWVzX3RhYmxlOwogCXp2YWwgKipkZWZhdWx0X3N0YXRpY19tZW1iZXJzX3RhYmxl OwogCXp2YWwgKipzdGF0aWNfbWVtYmVyc190YWJsZTsKQEAgLTY3MSw2ICs2NzMsOCBAQAogI2Rl ZmluZSBaRU5EX1BVVFNfRVgoc3RyKQkJCQl3cml0ZV9mdW5jKChzdHIpLCBzdHJsZW4oKHN0cikp KQogI2RlZmluZSBaRU5EX1BVVEMoYykJCQkJCXplbmRfd3JpdGUoJihjKSwgMSksIChjKQogCitl eHRlcm4gY2hhciAqc3RyY2F0YWxsb2MoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYik7CisK IEJFR0lOX0VYVEVSTl9DKCkKIGV4dGVybiBaRU5EX0FQSSBpbnQgKCp6ZW5kX3ByaW50ZikoY29u c3QgY2hhciAqZm9ybWF0LCAuLi4pIFpFTkRfQVRUUklCVVRFX1BUUl9GT1JNQVQocHJpbnRmLCAx LCAyKTsKIGV4dGVybiBaRU5EX0FQSSB6ZW5kX3dyaXRlX2Z1bmNfdCB6ZW5kX3dyaXRlOwpJbmRl eDogWmVuZC96ZW5kX2NvbXBpbGUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBaZW5kL3plbmRfY29tcGlsZS5j CShyZXZpc2lvbiAzMjQ0MzkpCisrKyBaZW5kL3plbmRfY29tcGlsZS5jCSh3b3JraW5nIGNvcHkp CkBAIC03MjQsNiArNzI0LDY5IEBACiAJfSBlbHNlIHsKIAkJemVuZF9kb19mZXRjaF9jbGFzcygm Y2xhc3Nfbm9kZSwgY2xhc3NfbmFtZSBUU1JNTFNfQ0MpOwogCX0KKworCS8qIEhhbmRsZSBwYXJl bnQ6OiRBcmVhIGFjY2Vzc29ycyAobm9ybWFsIGFuZCBzdGF0aWMpICovCisJaWYoY2xhc3Nfbm9k ZS5vcF90eXBlID09IElTX1ZBUiAmJiBjbGFzc19ub2RlLkVBID09IFpFTkRfRkVUQ0hfQ0xBU1Nf UEFSRU5UICYmIENHKGFjdGl2ZV9jbGFzc19lbnRyeSkgJiYgQ0coYWN0aXZlX2NsYXNzX2VudHJ5 KS0+cGFyZW50KSB7CisKKwkJY29uc3QgY2hhciAqbWVtYmVyX25hbWUgPSBDRyhhY3RpdmVfb3Bf YXJyYXkpLT52YXJzW3Jlc3VsdC0+dS5vcC52YXJdLm5hbWU7CisJCXplbmRfYWNjZXNzb3JfaW5m byAqKmFpcHA7CisKKwkJLyogSWYgdGhlIG1lbWJlcl9uYW1lIGlzIGFuIGFjY2Vzc29yICovCisJ CWlmKHplbmRfaGFzaF9maW5kKChjb25zdCBIYXNoVGFibGUgKikmQ0coYWN0aXZlX2NsYXNzX2Vu dHJ5KS0+cGFyZW50LT5hY2Nlc3NvcnMsIG1lbWJlcl9uYW1lLCBzdHJsZW4obWVtYmVyX25hbWUp KzEsICh2b2lkKiopJmFpcHApID09IFNVQ0NFU1MpIHsKKwkJCXpub2RlIHpuX3BhcmVudCwgem5f ZnVuYywgem5fYXJnX2xpc3Q7CisKKwkJCU1BS0VfWk5PREUoem5fcGFyZW50LCAicGFyZW50Iik7 CisJCQlaX0xWQUwoem5fYXJnX2xpc3QudS5jb25zdGFudCkgPSAwOworCisJCQljaGFyICpmbmFt ZSA9IHN0cmNhdGFsbG9jKCJfX2dldCIsIG1lbWJlcl9uYW1lKTsKKwkJCU1BS0VfWk5PREUoem5f ZnVuYywgZm5hbWUpOworCQkJZWZyZWUoZm5hbWUpOworCisJCQkvKiBXZSBhc3N1bWUgd2Ugd2ls bCBiZSB1c2VkIGFzIGEgZ2V0dGVyLCBpZiB6ZW5kX2RvX2Fzc2lnbigpIGlzIGNhbGxlZCwgaXQg d2lsbCBiYWNrcGF0Y2ggYXMgY2FsbGluZyBhIHNldHRlciAqLworCQkJemVuZF9kb19iZWdpbl9j bGFzc19tZW1iZXJfZnVuY3Rpb25fY2FsbCgmem5fcGFyZW50LCAmem5fZnVuYyBUU1JNTFNfQ0Mp OworCQkJemVuZF9kb19lbmRfZnVuY3Rpb25fY2FsbCgmem5fZnVuYywgcmVzdWx0LCAmem5fYXJn X2xpc3QsIDEsIDAgVFNSTUxTX0NDKTsKKwkJCXplbmRfZG9fZXh0ZW5kZWRfZmNhbGxfZW5kKFRT Uk1MU19DKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwkvKiBIYW5kbGUgU2hhcGU6OiRBcmVhIHN0 YXRpYyBhY2Nlc3NvciAqLworCWlmKGNsYXNzX25vZGUub3BfdHlwZSA9PSBJU19DT05TVCAmJiBy ZXN1bHQtPm9wX3R5cGUgPT0gSVNfQ1YpIHsKKwkJemVuZF9jbGFzc19lbnRyeQkqKmNsYXNzcHA7 CisJCWNoYXIgCQkJCSpsY25hbWUgPSB6ZW5kX3N0cl90b2xvd2VyX2R1cChaX1NUUlZBTChjbGFz c19ub2RlLnUuY29uc3RhbnQpLCBaX1NUUkxFTihjbGFzc19ub2RlLnUuY29uc3RhbnQpKTsKKwor CQlpZih6ZW5kX2hhc2hfZmluZChDRyhjbGFzc190YWJsZSksIGxjbmFtZSwgWl9TVFJMRU4oY2xh c3Nfbm9kZS51LmNvbnN0YW50KSsxLCAodm9pZCoqKSZjbGFzc3BwKSA9PSBTVUNDRVNTKSB7CisJ CQllZnJlZShsY25hbWUpOworCisJCQlsY25hbWUgPSBzdHJjYXRhbGxvYygiX19nZXQiLCBDRyhh Y3RpdmVfb3BfYXJyYXkpLT52YXJzW3Jlc3VsdC0+dS5vcC52YXJdLm5hbWUpOworCQkJdWludAls Y25hbWVfbGVuID0gc3RybGVuKGxjbmFtZSk7CisJCQl6ZW5kX3N0cl90b2xvd2VyKGxjbmFtZSwg bGNuYW1lX2xlbik7CisKKwkJCXVsb25nIAloYXNoX3ZhbHVlID0gemVuZF9oYXNoX2Z1bmMobGNu YW1lLCBsY25hbWVfbGVuKzEpOworCQkJemVuZF9mdW5jdGlvbgkqZmJjOworCisJCQlpZih6ZW5k X2hhc2hfcXVpY2tfZmluZCgmKCpjbGFzc3BwKS0+ZnVuY3Rpb25fdGFibGUsIGxjbmFtZSwgbGNu YW1lX2xlbisxLCBoYXNoX3ZhbHVlLCAodm9pZCoqKSZmYmMpID09IFNVQ0NFU1MpIHsKKwkJCQll ZnJlZShsY25hbWUpOworCisJCQkJaWYoIShmYmMtPmNvbW1vbi5mbl9mbGFncyAmIFpFTkRfQUND X1NUQVRJQykpCisJCQkJCXplbmRfZXJyb3IoRV9DT01QSUxFX0VSUk9SLCAiQ2Fubm90IGFjY2Vz cyBub24tc3RhdGljIGFjY2Vzc29yICVzOjokJXMgaW4gYSBzdGF0aWMgbWFubmVyLiIsICgqY2xh c3NwcCktPm5hbWUsIFpFTkRfQUNDX05BTUUoZmJjKSk7CisKKwkJCQl6bm9kZSB6bl9jbGFzcywg em5fZnVuYywgem5fYXJnX2xpc3Q7CisJCQkJTUFLRV9aTk9ERSh6bl9jbGFzcywgWl9TVFJWQUwo Y2xhc3Nfbm9kZS51LmNvbnN0YW50KSk7CisJCQkJTUFLRV9aTk9ERSh6bl9mdW5jLCBmYmMtPmNv bW1vbi5mdW5jdGlvbl9uYW1lKTsKKwkJCQlaX0xWQUwoem5fYXJnX2xpc3QudS5jb25zdGFudCkg PSAwOworCisJCQkJLyogV2UgYXNzdW1lIHdlIHdpbGwgYmUgdXNlZCBhcyBhIGdldHRlciwgaWYg emVuZF9kb19hc3NpZ24oKSBpcyBjYWxsZWQsIGl0IHdpbGwgYmFja3BhdGNoIGFzIGNhbGxpbmcg YSBzZXR0ZXIgKi8KKwkJCQl6ZW5kX2RvX2JlZ2luX2NsYXNzX21lbWJlcl9mdW5jdGlvbl9jYWxs KCZ6bl9jbGFzcywgJnpuX2Z1bmMgVFNSTUxTX0NDKTsKKwkJCQl6ZW5kX2RvX2VuZF9mdW5jdGlv bl9jYWxsKCZ6bl9mdW5jLCByZXN1bHQsICZ6bl9hcmdfbGlzdCwgMSwgMCBUU1JNTFNfQ0MpOwor CQkJCXplbmRfZG9fZXh0ZW5kZWRfZmNhbGxfZW5kKFRTUk1MU19DKTsKKwkJCQl6dmFsX2R0b3Io JmNsYXNzX25vZGUudS5jb25zdGFudCk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCWVmcmVl KGxjbmFtZSk7CisJfQorCisKIAl6ZW5kX3N0YWNrX3RvcCgmQ0coYnBfc3RhY2spLCAodm9pZCAq KikgJmZldGNoX2xpc3RfcHRyKTsKIAlpZiAocmVzdWx0LT5vcF90eXBlID09IElTX0NWKSB7CiAJ CWluaXRfb3AoJm9wbGluZSBUU1JNTFNfQ0MpOwpAQCAtOTYzLDYgKzEwMjYsMzcgQEAKIAogCQkJ bGFzdF9vcCA9ICZDRyhhY3RpdmVfb3BfYXJyYXkpLT5vcGNvZGVzW2xhc3Rfb3BfbnVtYmVyLW4t MV07CiAKKwkJCS8qIGFzc2lnbmluZyB0byBmdW5jdGlvbiBjYWxsLCByZS1uZWdvdGlhdGUgdGhl IG9wY29kZXMgdG8gY2FsbCBhIHNpbmdsZSBwYXJhbWV0ZXIgZnVuY3Rpb24gKi8KKwkJCWlmKGxh c3Rfb3AtPm9wY29kZSA9PSBaRU5EX0RPX0ZDQUxMX0JZX05BTUUgJiYgbGFzdF9vcF9udW1iZXIg Pj0gMSAmJiAobGFzdF9vcC0xKS0+b3Bjb2RlID09IFpFTkRfSU5JVF9TVEFUSUNfTUVUSE9EX0NB TEwpIHsKKwkJCQl6bm9kZQkJem5fY2xhc3MsIHpuX2Z1bmMsIHpuX2FyZ19saXN0OworCisJCQkJ c3dpdGNoKChsYXN0X29wLTEpLT5vcDFfdHlwZSkgeworCQkJCQljYXNlIElTX1ZBUjoKKwkJCQkJ CWlmKChsYXN0X29wLTEpLT5leHRlbmRlZF92YWx1ZSA9PSBaRU5EX0ZFVENIX0NMQVNTX1BBUkVO VCkgeworCQkJCQkJCU1BS0VfWk5PREUoem5fY2xhc3MsICJwYXJlbnQiKTsKKwkJCQkJCX0KKwkJ CQkJCWJyZWFrOworCQkJCQljYXNlIElTX0NPTlNUOgorCQkJCQkJTUFLRV9aTk9ERSh6bl9jbGFz cywgWl9TVFJWQUwoQ0coYWN0aXZlX29wX2FycmF5KS0+bGl0ZXJhbHNbKGxhc3Rfb3AtMSktPm9w MS5jb25zdGFudF0uY29uc3RhbnQpKTsJLyogQ2FwdHVyZSBjbGFzcyBuYW1lICovCisJCQkJCQli cmVhazsKKwkJCQl9CisKKwkJCQlNQUtFX1pOT0RFKHpuX2Z1bmMsIFpfU1RSVkFMKENHKGFjdGl2 ZV9vcF9hcnJheSktPmxpdGVyYWxzWyhsYXN0X29wLTEpLT5vcDIuY29uc3RhbnRdLmNvbnN0YW50 KSk7CS8qIENhcHR1cmUgZnVuY3Rpb24gbmFtZSAqLworCQkJCVpfU1RSVkFMKHpuX2Z1bmMudS5j b25zdGFudClbMl0gPSAncyc7CS8qIENoYW5nZSBmcm9tIF9fZ2V0WFhYKCkgdG8gX19zZXRYWFgo KSAqLworCQkJCVpfTFZBTCh6bl9hcmdfbGlzdC51LmNvbnN0YW50KSA9IDE7CisKKwkJCQkvKiBD bGVhciBaRU5EX0lOSVRfU1RBVElDX01FVEhPRF9DQUxMIGFuZCBaRU5EX0RPX0ZDQUxMX0JZX05B TUUgb3BsaW5lcyAqLworCQkJCU1BS0VfTk9QKGxhc3Rfb3ApOworCQkJCU1BS0VfTk9QKChsYXN0 X29wLTEpKTsKKworCQkJCS8qIFJlcGxhY2Ugd2l0aCBDbGFzczo6X19zZXRYWFgoKSBjYWxsICov CisJCQkJemVuZF9kb19iZWdpbl9jbGFzc19tZW1iZXJfZnVuY3Rpb25fY2FsbCgmem5fY2xhc3Ms ICZ6bl9mdW5jIFRTUk1MU19DQyk7CisJCQkJemVuZF9kb19wYXNzX3BhcmFtKHZhbHVlLCBaRU5E X1NFTkRfVkFMLCBaX0xWQUwocmVzdWx0LT51LmNvbnN0YW50KSBUU1JNTFNfQ0MpOworCQkJCXpl bmRfZG9fZW5kX2Z1bmN0aW9uX2NhbGwoJnpuX2Z1bmMsIHJlc3VsdCwgJnpuX2FyZ19saXN0LCAx LCAwIFRTUk1MU19DQyk7CisJCQkJemVuZF9kb19leHRlbmRlZF9mY2FsbF9lbmQoVFNSTUxTX0Mp OworCQkJCXJldHVybjsKKwkJCX0KKwogCQkJaWYgKGxhc3Rfb3AtPnJlc3VsdF90eXBlID09IElT X1ZBUiAmJgogCQkJICAgIGxhc3Rfb3AtPnJlc3VsdC52YXIgPT0gdmFyaWFibGUtPnUub3AudmFy KSB7CiAJCQkJaWYgKGxhc3Rfb3AtPm9wY29kZSA9PSBaRU5EX0ZFVENIX09CSl9XKSB7CkBAIC0x NTEyLDYgKzE2MDYsMTYgQEAKIAkJJiYgKFpfTFZBTChuZXdfbW9kaWZpZXItPnUuY29uc3RhbnQp ICYgWkVORF9BQ0NfRklOQUwpKSB7CiAJCXplbmRfZXJyb3IoRV9DT01QSUxFX0VSUk9SLCAiTXVs dGlwbGUgZmluYWwgbW9kaWZpZXJzIGFyZSBub3QgYWxsb3dlZCIpOwogCX0KKwlpZiAoKFpfTFZB TChjdXJyZW50X2FjY2Vzc190eXBlLT51LmNvbnN0YW50KSAmIFpFTkRfQUNDX1JFQURPTkxZKSAm JiAoWl9MVkFMKG5ld19tb2RpZmllci0+dS5jb25zdGFudCkgJiBaRU5EX0FDQ19SRUFET05MWSkp IHsKKwkJemVuZF9lcnJvcihFX0NPTVBJTEVfRVJST1IsICJNdWx0aXBsZSByZWFkLW9ubHkgbW9k aWZpZXJzIGFyZSBub3QgYWxsb3dlZCIpOworCX0KKwlpZiAoKFpfTFZBTChjdXJyZW50X2FjY2Vz c190eXBlLT51LmNvbnN0YW50KSAmIFpFTkRfQUNDX1dSSVRFT05MWSkgJiYgKFpfTFZBTChuZXdf bW9kaWZpZXItPnUuY29uc3RhbnQpICYgWkVORF9BQ0NfV1JJVEVPTkxZKSkgeworCQl6ZW5kX2Vy cm9yKEVfQ09NUElMRV9FUlJPUiwgIk11bHRpcGxlIHdyaXRlLW9ubHkgbW9kaWZpZXJzIGFyZSBu b3QgYWxsb3dlZCIpOworCX0KKwlpZiAoIAkJKChaX0xWQUwoY3VycmVudF9hY2Nlc3NfdHlwZS0+ dS5jb25zdGFudCkgJiBaRU5EX0FDQ19SRUFET05MWSkgCSYmIChaX0xWQUwobmV3X21vZGlmaWVy LT51LmNvbnN0YW50KSAmIFpFTkRfQUNDX1dSSVRFT05MWSkpCisJCQl8fCAJKChaX0xWQUwoY3Vy cmVudF9hY2Nlc3NfdHlwZS0+dS5jb25zdGFudCkgJiBaRU5EX0FDQ19XUklURU9OTFkpICYmICha X0xWQUwobmV3X21vZGlmaWVyLT51LmNvbnN0YW50KSAmIFpFTkRfQUNDX1JFQURPTkxZKSkJKSB7 CisJCXplbmRfZXJyb3IoRV9DT01QSUxFX0VSUk9SLCAicmVhZC1vbmx5IGFuZCB3cml0ZS1vbmx5 IG1vZGlmaWVycyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIik7CisJfQogCWlmICgoKFpfTFZBTChj dXJyZW50X2FjY2Vzc190eXBlLT51LmNvbnN0YW50KSB8IFpfTFZBTChuZXdfbW9kaWZpZXItPnUu Y29uc3RhbnQpKSAmIChaRU5EX0FDQ19BQlNUUkFDVCB8IFpFTkRfQUNDX0ZJTkFMKSkgPT0gKFpF TkRfQUNDX0FCU1RSQUNUIHwgWkVORF9BQ0NfRklOQUwpKSB7CiAJCXplbmRfZXJyb3IoRV9DT01Q SUxFX0VSUk9SLCAiQ2Fubm90IHVzZSB0aGUgZmluYWwgbW9kaWZpZXIgb24gYW4gYWJzdHJhY3Qg Y2xhc3MgbWVtYmVyIik7CiAJfQpAQCAtMTUxOSw2ICsxNjIzLDE2NSBAQAogfQogLyogfX19ICov CiAKK3ZvaWQgemVuZF9kZWNsYXJlX2FjY2Vzc29yKHpub2RlICp2YXJfbmFtZSBUU1JNTFNfREMp IHsgLyoge3t7ICovCisJLyogR2VuZXJhdGUgSGFzaCBWYWx1ZSBmb3IgVmFyaWFibGUgKi8KKwl1 bG9uZyBoYXNoX3ZhbHVlID0gemVuZF9oYXNoX2Z1bmMoWl9TVFJWQUwodmFyX25hbWUtPnUuY29u c3RhbnQpLCBaX1NUUkxFTih2YXJfbmFtZS0+dS5jb25zdGFudCkrMSk7CisJemVuZF9hY2Nlc3Nv cl9pbmZvICoqYWlwcCwgKmFpOworCisJLyogTG9jYXRlIG9yIGNyZWF0ZSBhY2Nlc3Nvcl9pbmZv IHN0cnVjdHVyZSAqLworCWlmKHplbmRfaGFzaF9xdWlja19maW5kKCZDRyhhY3RpdmVfY2xhc3Nf ZW50cnkpLT5hY2Nlc3NvcnMsIFpfU1RSVkFMKHZhcl9uYW1lLT51LmNvbnN0YW50KSwgWl9TVFJM RU4odmFyX25hbWUtPnUuY29uc3RhbnQpKzEsIGhhc2hfdmFsdWUsICh2b2lkKiopICZhaXBwKSAh PSBTVUNDRVNTKSB7CisJCWFpID0gZW1hbGxvYyhzaXplb2YoemVuZF9hY2Nlc3Nvcl9pbmZvKSk7 CisJCW1lbXNldChhaSwgMCwgc2l6ZW9mKHplbmRfYWNjZXNzb3JfaW5mbykpOworCQlhaS0+Zmxh Z3MgPSBDRyhhY2Nlc3NfdHlwZSk7CisJCWFpLT5kb2NfY29tbWVudCA9IENHKGRvY19jb21tZW50 KTsKKwkJYWktPmRvY19jb21tZW50X2xlbiA9IENHKGRvY19jb21tZW50X2xlbik7CisJCUNHKGRv Y19jb21tZW50KSA9IE5VTEw7CisJCUNHKGRvY19jb21tZW50X2xlbikgPSAwOworCQl6ZW5kX2hh c2hfcXVpY2tfdXBkYXRlKCZDRyhhY3RpdmVfY2xhc3NfZW50cnkpLT5hY2Nlc3NvcnMsIFpfU1RS VkFMKHZhcl9uYW1lLT51LmNvbnN0YW50KSwgWl9TVFJMRU4odmFyX25hbWUtPnUuY29uc3RhbnQp KzEsIGhhc2hfdmFsdWUsICh2b2lkKiopJmFpLCBzaXplb2YoemVuZF9hY2Nlc3Nvcl9pbmZvKiks IE5VTEwpOworCX0KK30KKy8qIH19fSAqLworCit2b2lkIHplbmRfZG9fYmVnaW5fYWNjZXNzb3Jf ZGVjbGFyYXRpb24oem5vZGUgKmZ1bmN0aW9uX3Rva2VuLCB6bm9kZSAqdmFyX25hbWUsIHpub2Rl ICptb2RpZmllcnMgVFNSTUxTX0RDKSAvKiB7e3sgKi8KK3sKKwkvKiBHZW5lcmF0ZSBIYXNoIFZh bHVlIGZvciBWYXJpYWJsZSAqLworCXVsb25nIGhhc2hfdmFsdWUgPSB6ZW5kX2hhc2hfZnVuYyha X1NUUlZBTCh2YXJfbmFtZS0+dS5jb25zdGFudCksIFpfU1RSTEVOKHZhcl9uYW1lLT51LmNvbnN0 YW50KSsxKTsKKwl6ZW5kX2FjY2Vzc29yX2luZm8gKiphaXBwLCAqYWk7CisKKwkvKiBMb2NhdGUg b3IgY3JlYXRlIGFjY2Vzc29yX2luZm8gc3RydWN0dXJlICovCisJaWYoemVuZF9oYXNoX3F1aWNr X2ZpbmQoJkNHKGFjdGl2ZV9jbGFzc19lbnRyeSktPmFjY2Vzc29ycywgWl9TVFJWQUwodmFyX25h bWUtPnUuY29uc3RhbnQpLCBaX1NUUkxFTih2YXJfbmFtZS0+dS5jb25zdGFudCkrMSwgaGFzaF92 YWx1ZSwgKHZvaWQqKikgJmFpcHApID09IFNVQ0NFU1MpIHsKKwkJYWkgPSAqYWlwcDsKKwl9IGVs c2UgeworCQl6ZW5kX2Vycm9yKEVfQ09NUElMRV9FUlJPUiwgIlVuYWJsZSB0byBsb2NhdGUgYWNj ZXNzb3Igc3RydWN0dXJlICclcycsIHBsZWFzZSByZXBvcnQgdGhpcyB0byBwaHAtaW50ZXJuYWxz LiIsIFpfU1RSVkFMKHZhcl9uYW1lLT51LmNvbnN0YW50KSk7CisJfQorCisJLyogSW5oZXJpdCBm bGFncyBmcm9tIG91dGVyIGFjY2Vzc29yIGRlZmluaXRpb24gKi8KKwlaX0xWQUwobW9kaWZpZXJz LT51LmNvbnN0YW50KSB8PSAoYWktPmZsYWdzICYgWkVORF9BQ0NfU1RBVElDKTsKKwlaX0xWQUwo bW9kaWZpZXJzLT51LmNvbnN0YW50KSAmPSB+WkVORF9BQ0NfSVNfQUNDRVNTT1I7CisKKwlpZihz dHJjYXNlY21wKCJnZXQiLCBmdW5jdGlvbl90b2tlbi0+dS5jb25zdGFudC52YWx1ZS5zdHIudmFs KSA9PSAwKSB7CisJCW1vZGlmaWVycy0+dS5jb25zdGFudC52YWx1ZS5sdmFsIHw9IFpFTkRfQUND X0lTX0dFVFRFUjsKKwkJLyogQ29udmVydCB0eXBlIGFuZCB2YXJpYWJsZSBuYW1lIHRvIF9fZ2V0 SG91cnMoKSAqLworCQljaGFyICp0bXAgPSBzdHJjYXRhbGxvYygiX19nZXQiLCBaX1NUUlZBTCh2 YXJfbmFtZS0+dS5jb25zdGFudCkpOworCQllZnJlZShaX1NUUlZBTChmdW5jdGlvbl90b2tlbi0+ dS5jb25zdGFudCkpOworCQlaX1NUUlZBTChmdW5jdGlvbl90b2tlbi0+dS5jb25zdGFudCkgPSB0 bXA7CisJCVpfU1RSTEVOKGZ1bmN0aW9uX3Rva2VuLT51LmNvbnN0YW50KSA9IHN0cmxlbih0bXAp OworCisJCS8qIERlY2xhcmUgRnVuY3Rpb24gKi8KKwkJemVuZF9kb19iZWdpbl9mdW5jdGlvbl9k ZWNsYXJhdGlvbihmdW5jdGlvbl90b2tlbiwgZnVuY3Rpb25fdG9rZW4sIDEsIFpFTkRfUkVUVVJO X1ZBTCwgbW9kaWZpZXJzIFRTUk1MU19DQyk7CisJfSBlbHNlIGlmKHN0cmNhc2VjbXAoInNldCIs IGZ1bmN0aW9uX3Rva2VuLT51LmNvbnN0YW50LnZhbHVlLnN0ci52YWwpID09IDApIHsKKwkJbW9k aWZpZXJzLT51LmNvbnN0YW50LnZhbHVlLmx2YWwgfD0gWkVORF9BQ0NfSVNfU0VUVEVSOworCisJ CS8qIENvbnZlcnQgdHlwZSBhbmQgdmFyaWFibGUgbmFtZSB0byBfX3NldEhvdXJzKCkgKi8KKwkJ Y2hhciAqdG1wID0gc3RyY2F0YWxsb2MoIl9fc2V0IiwgWl9TVFJWQUwodmFyX25hbWUtPnUuY29u c3RhbnQpKTsKKwkJZWZyZWUoWl9TVFJWQUwoZnVuY3Rpb25fdG9rZW4tPnUuY29uc3RhbnQpKTsK KwkJWl9TVFJWQUwoZnVuY3Rpb25fdG9rZW4tPnUuY29uc3RhbnQpID0gdG1wOworCQlaX1NUUkxF TihmdW5jdGlvbl90b2tlbi0+dS5jb25zdGFudCkgPSBzdHJsZW4odG1wKTsKKworCQkvKiBEZWNs YXJlIEZ1bmN0aW9uICovCisJCXplbmRfZG9fYmVnaW5fZnVuY3Rpb25fZGVjbGFyYXRpb24oZnVu Y3Rpb25fdG9rZW4sIGZ1bmN0aW9uX3Rva2VuLCAxLCBaRU5EX1JFVFVSTl9WQUwsIG1vZGlmaWVy cyBUU1JNTFNfQ0MpOworCisJCS8qIEFkZCAkdmFsdWUgcGFyYW1ldGVyIHRvIF9fc2V0SG91cnMo KSAqLworCQl6bm9kZSB1bnVzZWRfbm9kZSwgdW51c2VkX25vZGUyLCB2YWx1ZV9ub2RlOworCQl1 bnVzZWRfbm9kZS5vcF90eXBlID0gdW51c2VkX25vZGUyLm9wX3R5cGUgPSBJU19VTlVTRUQ7CisJ CXVudXNlZF9ub2RlLnUub3AubnVtID0gdW51c2VkX25vZGUyLnUub3AubnVtID0gMTsKKworCQla X1NUUlZBTCh2YWx1ZV9ub2RlLnUuY29uc3RhbnQpID0gZXN0cm5kdXAoInZhbHVlIiwgNSk7CisJ CVpfU1RSTEVOKHZhbHVlX25vZGUudS5jb25zdGFudCkgPSA1OworCisJCXplbmRfZG9fcmVjZWl2 ZV9hcmcoWkVORF9SRUNWLCAmdmFsdWVfbm9kZSwgJnVudXNlZF9ub2RlLCBOVUxMLCAmdW51c2Vk X25vZGUyLCAwIFRTUk1MU19DQyk7CisJfSBlbHNlIHsKKwkJemVuZF9lcnJvcihFX0NPTVBJTEVf RVJST1IsICJVbmtub3duIGFjY2Vzc29yICclcycsIGV4cGVjdGluZyBnZXQgb3Igc2V0IGZvciB2 YXJpYWJsZSAkJXMiLCBmdW5jdGlvbl90b2tlbi0+dS5jb25zdGFudC52YWx1ZS5zdHIudmFsLCB2 YXJfbmFtZS0+dS5jb25zdGFudC52YWx1ZS5zdHIudmFsKTsKKwl9CisKKwl6ZW5kX2Z1bmN0aW9u ICpmdW5jID0gKHplbmRfZnVuY3Rpb24qKUNHKGFjdGl2ZV9vcF9hcnJheSk7CisKKwkvKiBFbnN1 cmUgd2UgYXJlIG5vdCBkZWZpbmluZyBhbiBhY2Nlc3NvciBjb250cmFyeSB0byByZWFkLW9ubHkv d3JpdGUtb25seSAqLworCWlmKChmdW5jLT5jb21tb24uZm5fZmxhZ3MgJiBaRU5EX0FDQ19JU19H RVRURVIpICYmIChhaS0+ZmxhZ3MgJiBaRU5EX0FDQ19XUklURU9OTFkpKSB7CisJCXplbmRfZXJy b3IoRV9DT01QSUxFX0VSUk9SLCAiQ2Fubm90IGRlZmluZSBnZXR0ZXIgZm9yIHdyaXRlLW9ubHkg cHJvcGVydHkgJCVzIiwgdmFyX25hbWUtPnUuY29uc3RhbnQudmFsdWUuc3RyLnZhbCk7CisJfSBl bHNlIGlmKChmdW5jLT5jb21tb24uZm5fZmxhZ3MgJiBaRU5EX0FDQ19JU19TRVRURVIpICYmIChh aS0+ZmxhZ3MgJiBaRU5EX0FDQ19SRUFET05MWSkpIHsKKwkJemVuZF9lcnJvcihFX0NPTVBJTEVf RVJST1IsICJDYW5ub3QgZGVmaW5lIHNldHRlciBmb3IgcmVhZC1vbmx5IHByb3BlcnR5ICQlcyIs IHZhcl9uYW1lLT51LmNvbnN0YW50LnZhbHVlLnN0ci52YWwpOworCX0KKworCWlmKGZ1bmMtPmNv bW1vbi5mbl9mbGFncyAmIFpFTkRfQUNDX0lTX0dFVFRFUikgeworCQlhaS0+Z2V0dGVyID0gZnVu YzsKKwl9IGVsc2UgeworCQlhaS0+c2V0dGVyID0gZnVuYzsKKwl9Cit9CisvKiB9fX0gKi8KKwor dm9pZCB6ZW5kX2RvX2VuZF9hY2Nlc3Nvcl9kZWNsYXJhdGlvbih6bm9kZSAqZnVuY3Rpb25fdG9r ZW4sIHpub2RlICp2YXJfbmFtZSwgem5vZGUgKm1vZGlmaWVycywgY29uc3Qgem5vZGUgKmJvZHkg VFNSTUxTX0RDKSAvKiB7e3sgKi8KK3sKKwkvKiBJZiB3ZSBoYXZlIG5vIGZ1bmN0aW9uIGJvZHks IGNyZWF0ZSBhbiBhdXRvbWF0aWMgYm9keSAqLworCWlmKGJvZHkgPT0gTlVMTCAmJiAoQ0coYWN0 aXZlX2NsYXNzX2VudHJ5KS0+Y2VfZmxhZ3MgJiBaRU5EX0FDQ19JTlRFUkZBQ0UpID09IDApIHsK KwkJY2hhciAqaW50X3Zhcl9uYW1lID0gc3RyY2F0YWxsb2MoIl9fIiwgWl9TVFJWQUwodmFyX25h bWUtPnUuY29uc3RhbnQpKTsKKworCQl6ZW5kX3Byb3BlcnR5X2luZm8gKip6cGk7CisKKwkJem5v ZGUgem5fdGhpc19ydiwgem5fdGhpczsKKwkJTUFLRV9aTk9ERSh6bl90aGlzLCAidGhpcyIpOwor CisJCXpub2RlIHpuX3Byb3BfcnYsIHpuX3Byb3A7CisJCU1BS0VfWk5PREUoem5fcHJvcCwgaW50 X3Zhcl9uYW1lKTsKKworCQlpZihzdHJzdHIoQ0coYWN0aXZlX29wX2FycmF5KS0+ZnVuY3Rpb25f bmFtZSwgImdldCIpICE9IE5VTEwpIHsKKwkJCWlmKHplbmRfaGFzaF9maW5kKCZDRyhhY3RpdmVf Y2xhc3NfZW50cnkpLT5wcm9wZXJ0aWVzX2luZm8sIFpfU1RSVkFMKHpuX3Byb3AudS5jb25zdGFu dCksIFpfU1RSTEVOKHpuX3Byb3AudS5jb25zdGFudCkrMSwgKHZvaWQqKikgJnpwaSkgIT0gU1VD Q0VTUykgeworCQkJCXplbmRfZG9fZGVjbGFyZV9wcm9wZXJ0eSgmem5fcHJvcCwgTlVMTCwgWkVO RF9BQ0NfUFJPVEVDVEVEIFRTUk1MU19DQyk7CisJCQl9CisKKwkJCXplbmRfZG9fZXh0ZW5kZWRf aW5mbyhUU1JNTFNfQyk7CisKKwkJCS8qIEZldGNoICR0aGlzICovCisJCQl6ZW5kX2RvX2JlZ2lu X3ZhcmlhYmxlX3BhcnNlKFRTUk1MU19DKTsKKwkJCWZldGNoX3NpbXBsZV92YXJpYWJsZSgmem5f dGhpc19ydiwgJnpuX3RoaXMsIDEgVFNSTUxTX0NDKTsKKworCQkJLyogRmV0Y2ggSW50ZXJuYWwg VmFyaWFibGUgTmFtZSAqLworCQkJem5vZGUgem5fcHJvcF9ydjsKKwkJCU1BS0VfWk5PREUoem5f cHJvcCwgaW50X3Zhcl9uYW1lKTsKKwkJCXplbmRfZG9fZmV0Y2hfcHJvcGVydHkoJnpuX3Byb3Bf cnYsICZ6bl90aGlzX3J2LCAmem5fcHJvcCBUU1JNTFNfQ0MpOworCisJCQkvKiBSZXR1cm4gdmFs dWUgZmV0Y2hlZCAqLworCQkJemVuZF9kb19yZXR1cm4oJnpuX3Byb3BfcnYsIDEgVFNSTUxTX0ND KTsKKworCQl9IGVsc2UgaWYoc3Ryc3RyKENHKGFjdGl2ZV9vcF9hcnJheSktPmZ1bmN0aW9uX25h bWUsICJzZXQiKSAhPSBOVUxMKSB7CisJCQlpZih6ZW5kX2hhc2hfZmluZCgmQ0coYWN0aXZlX2Ns YXNzX2VudHJ5KS0+cHJvcGVydGllc19pbmZvLCBaX1NUUlZBTCh6bl9wcm9wLnUuY29uc3RhbnQp LCBaX1NUUkxFTih6bl9wcm9wLnUuY29uc3RhbnQpKzEsICh2b2lkKiopICZ6cGkpICE9IFNVQ0NF U1MpIHsKKwkJCQl6ZW5kX2RvX2RlY2xhcmVfcHJvcGVydHkoJnpuX3Byb3AsIE5VTEwsIFpFTkRf QUNDX1BST1RFQ1RFRCBUU1JNTFNfQ0MpOworCQkJfQorCisJCQl6ZW5kX2RvX2V4dGVuZGVkX2lu Zm8oVFNSTUxTX0MpOworCQkJemVuZF9kb19iZWdpbl92YXJpYWJsZV9wYXJzZShUU1JNTFNfQyk7 CisKKwkJCS8qIEZldGNoICR0aGlzICovCisJCQlmZXRjaF9zaW1wbGVfdmFyaWFibGUoJnpuX3Ro aXNfcnYsICZ6bl90aGlzLCAxIFRTUk1MU19DQyk7CisKKwkJCS8qIEZldGNoIEludGVybmFsIFZh cmlhYmxlIE5hbWUgKi8KKwkJCXplbmRfZG9fZmV0Y2hfcHJvcGVydHkoJnpuX3Byb3BfcnYsICZ6 bl90aGlzX3J2LCAmem5fcHJvcCBUU1JNTFNfQ0MpOworCisJCQl6bm9kZSB6bl92YWx1ZV9ydiwg em5fdmFsdWU7CisJCQlNQUtFX1pOT0RFKHpuX3ZhbHVlLCAidmFsdWUiKTsKKworCQkJLyogRmV0 Y2ggJHZhbHVlICovCisJCQl6ZW5kX2RvX2JlZ2luX3ZhcmlhYmxlX3BhcnNlKFRTUk1MU19DKTsK KwkJCWZldGNoX3NpbXBsZV92YXJpYWJsZSgmem5fdmFsdWVfcnYsICZ6bl92YWx1ZSwgMSBUU1JN TFNfQ0MpOworCQkJemVuZF9kb19lbmRfdmFyaWFibGVfcGFyc2UoJnpuX3ZhbHVlX3J2LCBCUF9W QVJfUiwgMCBUU1JNTFNfQ0MpOworCisJCQl6ZW5kX2NoZWNrX3dyaXRhYmxlX3ZhcmlhYmxlKCZ6 bl9wcm9wX3J2KTsKKworCQkJLyogQXNzaWduICR2YWx1ZSB0byAkdGhpcy0+W0ludGVybmFsIFZh bHVlXSAqLworCQkJem5vZGUgem5fYXNzaWduX3J2OworCQkJemVuZF9kb19hc3NpZ24oJnpuX2Fz c2lnbl9ydiwgJnpuX3Byb3BfcnYsICZ6bl92YWx1ZV9ydiBUU1JNTFNfQ0MpOworCisJCQl6ZW5k X2RvX2ZyZWUoJnpuX2Fzc2lnbl9ydiBUU1JNTFNfQ0MpOworCQl9CisJCWVmcmVlKGludF92YXJf bmFtZSk7CisJfQorCisJemVuZF9kb19lbmRfZnVuY3Rpb25fZGVjbGFyYXRpb24oZnVuY3Rpb25f dG9rZW4gVFNSTUxTX0NDKTsKK30KKy8qIH19fSAqLworCisKIHZvaWQgemVuZF9kb19iZWdpbl9m dW5jdGlvbl9kZWNsYXJhdGlvbih6bm9kZSAqZnVuY3Rpb25fdG9rZW4sIHpub2RlICpmdW5jdGlv bl9uYW1lLCBpbnQgaXNfbWV0aG9kLCBpbnQgcmV0dXJuX3JlZmVyZW5jZSwgem5vZGUgKmZuX2Zs YWdzX3pub2RlIFRTUk1MU19EQykgLyoge3t7ICovCiB7CiAJemVuZF9vcF9hcnJheSBvcF9hcnJh eTsKQEAgLTE1MzIsMTIgKzE3OTUsMTcgQEAKIAogCWlmIChpc19tZXRob2QpIHsKIAkJaWYgKENH KGFjdGl2ZV9jbGFzc19lbnRyeSktPmNlX2ZsYWdzICYgWkVORF9BQ0NfSU5URVJGQUNFKSB7Ci0J CQlpZiAoKFpfTFZBTChmbl9mbGFnc196bm9kZS0+dS5jb25zdGFudCkgJiB+KFpFTkRfQUNDX1NU QVRJQ3xaRU5EX0FDQ19QVUJMSUMpKSkgeworCQkJaWYgKChaX0xWQUwoZm5fZmxhZ3Nfem5vZGUt PnUuY29uc3RhbnQpICYgfihaRU5EX0FDQ19TVEFUSUN8WkVORF9BQ0NfUFVCTElDfFpFTkRfQUND X0lTX0FDQ0VTU09SKSkpIHsKIAkJCQl6ZW5kX2Vycm9yKEVfQ09NUElMRV9FUlJPUiwgIkFjY2Vz cyB0eXBlIGZvciBpbnRlcmZhY2UgbWV0aG9kICVzOjolcygpIG11c3QgYmUgb21pdHRlZCIsIENH KGFjdGl2ZV9jbGFzc19lbnRyeSktPm5hbWUsIGZ1bmN0aW9uX25hbWUtPnUuY29uc3RhbnQudmFs dWUuc3RyLnZhbCk7CiAJCQl9CiAJCQlaX0xWQUwoZm5fZmxhZ3Nfem5vZGUtPnUuY29uc3RhbnQp IHw9IFpFTkRfQUNDX0FCU1RSQUNUOyAvKiBwcm9wYWdhdGVzIHRvIHRoZSByZXN0IG9mIHRoZSBw YXJzZXIgKi8KIAkJfQogCQlmbl9mbGFncyA9IFpfTFZBTChmbl9mbGFnc196bm9kZS0+dS5jb25z dGFudCk7IC8qIG11c3QgYmUgZG9uZSAqYWZ0ZXIqIHRoZSBhYm92ZSBjaGVjayAqLworCisJCWlm KGZuX2ZsYWdzICYgWkVORF9BQ0NfUkVBRE9OTFkgJiYgIShmbl9mbGFncyAmIFpFTkRfQUNDX0lT X0FDQ0VTU09SKSkKKwkJCXplbmRfZXJyb3IoRV9DT01QSUxFX0VSUk9SLCAiTWV0aG9kICVzOjol cygpIGNhbm5vdCBiZSBkZWZpbmVkIHJlYWQtb25seSwgbm90IHBlcm1pdHRlZCBmb3IgbWV0aG9k cy4iLCBDRyhhY3RpdmVfY2xhc3NfZW50cnkpLT5uYW1lLCBmdW5jdGlvbl9uYW1lLT51LmNvbnN0 YW50LnZhbHVlLnN0ci52YWwpOworCQlpZihmbl9mbGFncyAmIFpFTkRfQUNDX1dSSVRFT05MWSAm JiAhKGZuX2ZsYWdzICYgWkVORF9BQ0NfSVNfQUNDRVNTT1IpKQorCQkJemVuZF9lcnJvcihFX0NP TVBJTEVfRVJST1IsICJNZXRob2QgJXM6OiVzKCkgY2Fubm90IGJlIGRlZmluZWQgd3JpdGUtb25s eSwgbm90IHBlcm1pdHRlZCBmb3IgbWV0aG9kcy4iLCBDRyhhY3RpdmVfY2xhc3NfZW50cnkpLT5u YW1lLCBmdW5jdGlvbl9uYW1lLT51LmNvbnN0YW50LnZhbHVlLnN0ci52YWwpOwogCX0gZWxzZSB7 CiAJCWZuX2ZsYWdzID0gMDsKIAl9CkBAIC0yOTA0LDYgKzMxNzIsMTcgQEAKIH0KIC8qIH19fSAq LwogCitjaGFyICp6ZW5kX2FjY2Vzc29yX3R5cGVfc3RyaW5nKHplbmRfdWludCBmbl9mbGFncykg Lyoge3t7ICovCit7CisJaWYgKGZuX2ZsYWdzICYgWkVORF9BQ0NfSVNfR0VUVEVSKSB7CisJCXJl dHVybiAiZ2V0IjsKKwl9IGVsc2UgaWYgKGZuX2ZsYWdzICYgWkVORF9BQ0NfSVNfU0VUVEVSKSB7 CisJCXJldHVybiAic2V0IjsKKwl9CisJcmV0dXJuICJhY2Nlc3MiOworfQorLyogfX19ICovCisK IHN0YXRpYyB2b2lkIGRvX2luaGVyaXRfbWV0aG9kKHplbmRfZnVuY3Rpb24gKmZ1bmN0aW9uKSAv KiB7e3sgKi8KIHsKIAkvKiBUaGUgY2xhc3MgZW50cnkgb2YgdGhlIGRlcml2ZWQgZnVuY3Rpb24g aW50ZW50aW9uYWxseSByZW1haW5zIHRoZSBzYW1lCkBAIC0zMjE2LDE5ICszNDk1LDMxIEBACiAJ fQogCiAJaWYgKHBhcmVudF9mbGFncyAmIFpFTkRfQUNDX0ZJTkFMKSB7CisJCWlmIChwYXJlbnRf ZmxhZ3MgJiBaRU5EX0FDQ19JU19BQ0NFU1NPUikgeworCQkJemVuZF9lcnJvcihFX0NPTVBJTEVf RVJST1IsICJDYW5ub3Qgb3ZlcnJpZGUgZmluYWwgcHJvcGVydHkgJXN0ZXIgJXM6OiQlcyIsIHpl bmRfYWNjZXNzb3JfdHlwZV9zdHJpbmcoY2hpbGQtPmNvbW1vbi5mbl9mbGFncyksIFpFTkRfRk5f U0NPUEVfTkFNRShwYXJlbnQpLCBaRU5EX0FDQ19OQU1FKGNoaWxkKSk7CisJCX0gZWxzZSB7CiAJ CXplbmRfZXJyb3IoRV9DT01QSUxFX0VSUk9SLCAiQ2Fubm90IG92ZXJyaWRlIGZpbmFsIG1ldGhv ZCAlczo6JXMoKSIsIFpFTkRfRk5fU0NPUEVfTkFNRShwYXJlbnQpLCBjaGlsZC0+Y29tbW9uLmZ1 bmN0aW9uX25hbWUpOwogCX0KKwl9CiAKIAljaGlsZF9mbGFncwk9IGNoaWxkLT5jb21tb24uZm5f ZmxhZ3M7CiAJLyogWW91IGNhbm5vdCBjaGFuZ2UgZnJvbSBzdGF0aWMgdG8gbm9uIHN0YXRpYyBh bmQgdmljZSB2ZXJzYS4KIAkgKi8KIAlpZiAoKGNoaWxkX2ZsYWdzICYgWkVORF9BQ0NfU1RBVElD KSAhPSAocGFyZW50X2ZsYWdzICYgWkVORF9BQ0NfU1RBVElDKSkgewogCQlpZiAoY2hpbGQtPmNv bW1vbi5mbl9mbGFncyAmIFpFTkRfQUNDX1NUQVRJQykgeworCQkJaWYoY2hpbGQtPmNvbW1vbi5m bl9mbGFncyAmIFpFTkRfQUNDX0lTX0FDQ0VTU09SKSB7CisJCQkJemVuZF9lcnJvcihFX0NPTVBJ TEVfRVJST1IsICJDYW5ub3QgbWFrZSBub24gc3RhdGljIGFjY2Vzc29yICVzOjokJXMgc3RhdGlj IGluIGNsYXNzICVzIiwgWkVORF9GTl9TQ09QRV9OQU1FKHBhcmVudCksIFpFTkRfQUNDX05BTUUo Y2hpbGQpLCBaRU5EX0ZOX1NDT1BFX05BTUUoY2hpbGQpKTsKKwkJCX0gZWxzZSB7CiAJCQl6ZW5k X2Vycm9yKEVfQ09NUElMRV9FUlJPUiwgIkNhbm5vdCBtYWtlIG5vbiBzdGF0aWMgbWV0aG9kICVz OjolcygpIHN0YXRpYyBpbiBjbGFzcyAlcyIsIFpFTkRfRk5fU0NPUEVfTkFNRShwYXJlbnQpLCBj aGlsZC0+Y29tbW9uLmZ1bmN0aW9uX25hbWUsIFpFTkRfRk5fU0NPUEVfTkFNRShjaGlsZCkpOwor CQkJfQorCQl9IGVsc2UgeworCQkJaWYoY2hpbGQtPmNvbW1vbi5mbl9mbGFncyAmIFpFTkRfQUND X0lTX0FDQ0VTU09SKSB7CisJCQkJemVuZF9lcnJvcihFX0NPTVBJTEVfRVJST1IsICJDYW5ub3Qg bWFrZSBzdGF0aWMgYWNjZXNzb3IgJXM6OiQlcyBub24gc3RhdGljIGluIGNsYXNzICVzIiwgWkVO RF9GTl9TQ09QRV9OQU1FKHBhcmVudCksIFpFTkRfQUNDX05BTUUoY2hpbGQpLCBaRU5EX0ZOX1ND T1BFX05BTUUoY2hpbGQpKTsKIAkJfSBlbHNlIHsKIAkJCXplbmRfZXJyb3IoRV9DT01QSUxFX0VS Uk9SLCAiQ2Fubm90IG1ha2Ugc3RhdGljIG1ldGhvZCAlczo6JXMoKSBub24gc3RhdGljIGluIGNs YXNzICVzIiwgWkVORF9GTl9TQ09QRV9OQU1FKHBhcmVudCksIGNoaWxkLT5jb21tb24uZnVuY3Rp b25fbmFtZSwgWkVORF9GTl9TQ09QRV9OQU1FKGNoaWxkKSk7CiAJCX0KIAl9CisJfQogCiAJLyog RGlzYWxsb3cgbWFraW5nIGFuIGluaGVyaXRlZCBtZXRob2QgYWJzdHJhY3QuICovCiAJaWYgKChj aGlsZF9mbGFncyAmIFpFTkRfQUNDX0FCU1RSQUNUKSAmJiAhKHBhcmVudF9mbGFncyAmIFpFTkRf QUNDX0FCU1RSQUNUKSkgewpAQCAtMzI0MSw3ICszNTMyLDExIEBACiAJCS8qIFByZXZlbnQgZGVy aXZlZCBjbGFzc2VzIGZyb20gcmVzdHJpY3RpbmcgYWNjZXNzIHRoYXQgd2FzIGF2YWlsYWJsZSBp biBwYXJlbnQgY2xhc3NlcwogCQkgKi8KIAkJaWYgKChjaGlsZF9mbGFncyAmIFpFTkRfQUNDX1BQ UF9NQVNLKSA+IChwYXJlbnRfZmxhZ3MgJiBaRU5EX0FDQ19QUFBfTUFTSykpIHsKKwkJCWlmIChj aGlsZF9mbGFncyAmIFpFTkRfQUNDX0lTX0FDQ0VTU09SKSB7CisJCQkJemVuZF9lcnJvcihFX0NP TVBJTEVfRVJST1IsICJBY2Nlc3MgbGV2ZWwgdG8gJXN0ZXIgJXM6OiQlcyBtdXN0IGJlICVzIChh cyBpbiBjbGFzcyAlcyklcyIsIHplbmRfYWNjZXNzb3JfdHlwZV9zdHJpbmcoY2hpbGQtPmNvbW1v bi5mbl9mbGFncyksIFpFTkRfRk5fU0NPUEVfTkFNRShjaGlsZCksIFpFTkRfQUNDX05BTUUoY2hp bGQpLCB6ZW5kX3Zpc2liaWxpdHlfc3RyaW5nKHBhcmVudF9mbGFncyksIFpFTkRfRk5fU0NPUEVf TkFNRShwYXJlbnQpLCAocGFyZW50X2ZsYWdzJlpFTkRfQUNDX1BVQkxJQykgPyAiIiA6ICIgb3Ig d2Vha2VyIik7CisJCQl9IGVsc2UgewogCQkJemVuZF9lcnJvcihFX0NPTVBJTEVfRVJST1IsICJB Y2Nlc3MgbGV2ZWwgdG8gJXM6OiVzKCkgbXVzdCBiZSAlcyAoYXMgaW4gY2xhc3MgJXMpJXMiLCBa RU5EX0ZOX1NDT1BFX05BTUUoY2hpbGQpLCBjaGlsZC0+Y29tbW9uLmZ1bmN0aW9uX25hbWUsIHpl bmRfdmlzaWJpbGl0eV9zdHJpbmcocGFyZW50X2ZsYWdzKSwgWkVORF9GTl9TQ09QRV9OQU1FKHBh cmVudCksIChwYXJlbnRfZmxhZ3MmWkVORF9BQ0NfUFVCTElDKSA/ICIiIDogIiBvciB3ZWFrZXIi KTsKKwkJCX0KIAkJfSBlbHNlIGlmICgoKGNoaWxkX2ZsYWdzICYgWkVORF9BQ0NfUFBQX01BU0sp IDwgKHBhcmVudF9mbGFncyAmIFpFTkRfQUNDX1BQUF9NQVNLKSkKIAkJCSYmICgocGFyZW50X2Zs YWdzICYgWkVORF9BQ0NfUFBQX01BU0spICYgWkVORF9BQ0NfUFJJVkFURSkpIHsKIAkJCWNoaWxk LT5jb21tb24uZm5fZmxhZ3MgfD0gWkVORF9BQ0NfQ0hBTkdFRDsKQEAgLTM0MDQsNiArMzY5OSwz OCBAQAogCSgodm9pZCAoKikodm9pZCAqKSkgenZhbF9hZGRfcmVmKQogI2VuZGlmCiAKKy8qIFVw ZGF0ZXMgdGhlIGluZGV4IG9mIGFjY2Vzc29ycywgY2FsbGVkIGFmdGVyIHRoZSBmdW5jdGlvbl90 YWJsZSBoYXMgYmVlbiBtb2RpZmllZCBlbiBtYXNzICovCitzdGF0aWMgaW5saW5lIHZvaWQgemVu ZF9kb191cGRhdGVfYWNjZXNzb3JzKHplbmRfY2xhc3NfZW50cnkgKmNlIFRTUk1MU19EQykgLyog e3t7ICovCit7CisJemVuZF9mdW5jdGlvbgkqZnVuYzsKKworCWZvciAoemVuZF9oYXNoX2ludGVy bmFsX3BvaW50ZXJfcmVzZXQoJmNlLT5mdW5jdGlvbl90YWJsZSk7CisJemVuZF9oYXNoX2dldF9j dXJyZW50X2RhdGEoJmNlLT5mdW5jdGlvbl90YWJsZSwgKHZvaWQgKikgJmZ1bmMpID09IFNVQ0NF U1M7CisJemVuZF9oYXNoX21vdmVfZm9yd2FyZCgmY2UtPmZ1bmN0aW9uX3RhYmxlKSkgeworCQlp ZiAoZnVuYy0+Y29tbW9uLmZuX2ZsYWdzICYgWkVORF9BQ0NfSVNfQUNDRVNTT1IpIHsKKwkJCWNv bnN0IGNoYXIgKnZhcm5hbWUgPSBaRU5EX0FDQ19OQU1FKGZ1bmMpOworCQkJdWxvbmcgaGFzaF92 YWx1ZSA9IHplbmRfaGFzaF9mdW5jKHZhcm5hbWUsIHN0cmxlbih2YXJuYW1lKSsxKTsKKworCQkJ emVuZF9hY2Nlc3Nvcl9pbmZvICoqYWlwcCwgKmFpOworCisJCQlpZih6ZW5kX2hhc2hfcXVpY2tf ZmluZCgmY2UtPmFjY2Vzc29ycywgdmFybmFtZSwgc3RybGVuKHZhcm5hbWUpKzEsIGhhc2hfdmFs dWUsICh2b2lkKiopICZhaXBwKSAhPSBTVUNDRVNTKSB7CisJCQkJYWkgPSBlbWFsbG9jKHNpemVv Zih6ZW5kX2FjY2Vzc29yX2luZm8pKTsKKwkJCQltZW1zZXQoYWksIDAsIHNpemVvZih6ZW5kX2Fj Y2Vzc29yX2luZm8pKTsKKwkJCQl6ZW5kX2hhc2hfcXVpY2tfdXBkYXRlKCZjZS0+YWNjZXNzb3Jz LCB2YXJuYW1lLCBzdHJsZW4odmFybmFtZSkrMSwgaGFzaF92YWx1ZSwgKHZvaWQqKikmYWksIHNp emVvZih6ZW5kX2FjY2Vzc29yX2luZm8qKSwgTlVMTCk7CisJCQl9IGVsc2UgeworCQkJCWFpID0g KmFpcHA7CisJCQl9CisKKwkJCWlmKGZ1bmMtPmNvbW1vbi5mbl9mbGFncyAmIFpFTkRfQUNDX0lT X0dFVFRFUikgeworCQkJCWFpLT5nZXR0ZXIgPSBmdW5jOworCQkJfSBlbHNlIHsKKwkJCQlhaS0+ c2V0dGVyID0gZnVuYzsKKwkJCX0KKwkJfQorCX0KK30KKy8qIH19fSAqLworCiBaRU5EX0FQSSB2 b2lkIHplbmRfZG9faW5oZXJpdGFuY2UoemVuZF9jbGFzc19lbnRyeSAqY2UsIHplbmRfY2xhc3Nf ZW50cnkgKnBhcmVudF9jZSBUU1JNTFNfREMpIC8qIHt7eyAqLwogewogCXplbmRfcHJvcGVydHlf aW5mbyAqcHJvcGVydHlfaW5mbzsKQEAgLTM1MjcsNiArMzg1NCw4IEBACiAJCXplbmRfdmVyaWZ5 X2Fic3RyYWN0X2NsYXNzKGNlIFRTUk1MU19DQyk7CiAJfQogCWNlLT5jZV9mbGFncyB8PSBwYXJl bnRfY2UtPmNlX2ZsYWdzICYgWkVORF9IQVNfU1RBVElDX0lOX01FVEhPRFM7CisKKwl6ZW5kX2Rv X3VwZGF0ZV9hY2Nlc3NvcnMoY2UgIFRTUk1MU19DQyk7CiB9CiAvKiB9fX0gKi8KIApAQCAtNDE0 MSw2ICs0NDcwLDIyIEBACiB9CiAvKiB9fX0gKi8KIAorc3RhdGljIGlubGluZSB6ZW5kX29wICpm aW5kX3ByZXZpb3VzX29wKHplbmRfdWNoYXIgb3Bjb2RlIFRTUk1MU19EQykgLyoge3t7ICovCit7 CisJaW50IGxhc3Rfb3BfbnVtYmVyID0gZ2V0X25leHRfb3BfbnVtYmVyKENHKGFjdGl2ZV9vcF9h cnJheSkpOworCXplbmRfb3AgKmxhc3Rfb3A7CisJaW50IG4gPSAwOworCisJd2hpbGUgKGxhc3Rf b3BfbnVtYmVyIC0gbiA+IDApIHsKKwkJbGFzdF9vcCA9ICZDRyhhY3RpdmVfb3BfYXJyYXkpLT5v cGNvZGVzW2xhc3Rfb3BfbnVtYmVyLW4tMV07CisJCWlmKGxhc3Rfb3AtPm9wY29kZSA9PSBvcGNv ZGUpCisJCQlyZXR1cm4gbGFzdF9vcDsKKwkJbisrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKy8q IH19fSAqLworCiBzdGF0aWMgdm9pZCB6ZW5kX3RyYWl0c19yZWdpc3Rlcl9wcml2YXRlX3Byb3Bl cnR5KHplbmRfY2xhc3NfZW50cnkgKmNlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZV9sZW4s IHplbmRfcHJvcGVydHlfaW5mbyAqb2xkX2luZm8sIHp2YWwgKnByb3BlcnR5IFRTUk1MU19EQykg Lyoge3t7ICovCiB7CiAJY2hhciAqcHJpdl9uYW1lOwpAQCAtNDM3Niw2ICs0NzIxLDcgQEAKIAlp ZiAoY2UtPmNlX2ZsYWdzICYgWkVORF9BQ0NfSU1QTElDSVRfQUJTVFJBQ1RfQ0xBU1MpIHsKIAkJ Y2UtPmNlX2ZsYWdzIC09IFpFTkRfQUNDX0lNUExJQ0lUX0FCU1RSQUNUX0NMQVNTOwogCX0KKwl6 ZW5kX2RvX3VwZGF0ZV9hY2Nlc3NvcnMoY2UgVFNSTUxTX0NDKTsKIH0KIC8qIH19fSAqLwogCkBA IC01MDE1LDYgKzUzNjEsMTkgQEAKICAgICAKIAkJb3BsaW5lLT5leHRlbmRlZF92YWx1ZSA9IHBh cmVudF9jbGFzc19uYW1lLT51Lm9wLnZhcjsKIAkJb3BsaW5lLT5vcGNvZGUgPSBaRU5EX0RFQ0xB UkVfSU5IRVJJVEVEX0NMQVNTOworCisJCS8qIExvY2F0ZSBwYXJlbnRfY2xhc3NfbmFtZSBhbmQg cGFyZW50X2NsYXNzX2VudHJ5IHRvIGFzc2lnbiAqLworCQl6ZW5kX29wICpmZXRjaF9jbGFzcyA9 IGZpbmRfcHJldmlvdXNfb3AoWkVORF9GRVRDSF9DTEFTUyk7CisJCWlmKGZldGNoX2NsYXNzICE9 IE5VTEwgJiYgZmV0Y2hfY2xhc3MtPm9wMl90eXBlID09IElTX0NPTlNUKSB7CisJCQl6ZW5kX2Ns YXNzX2VudHJ5ICoqcGFyZW50X2NlcHAgPSBOVUxMOworCQkJenZhbCAqcGFyZW50X2NsYXNzX3p2 ID0gJkNHKGFjdGl2ZV9vcF9hcnJheSktPmxpdGVyYWxzW2ZldGNoX2NsYXNzLT5vcDIuY29uc3Rh bnRdLmNvbnN0YW50OworCQkJY2hhciAqbGNfcGFyZW50X2NsYXNzID0gemVuZF9zdHJfdG9sb3dl cl9kdXAoWl9TVFJWQUxfUChwYXJlbnRfY2xhc3NfenYpLCBaX1NUUkxFTl9QKHBhcmVudF9jbGFz c196dikpOworCisJCQlpZiAoemVuZF9oYXNoX2ZpbmQoQ0coY2xhc3NfdGFibGUpLCBsY19wYXJl bnRfY2xhc3MsIHN0cmxlbihsY19wYXJlbnRfY2xhc3MpKzEsICh2b2lkICoqKSAmcGFyZW50X2Nl cHApPT1TVUNDRVNTKSB7CisJCQkJbmV3X2NsYXNzX2VudHJ5LT5wYXJlbnQgPSAqcGFyZW50X2Nl cHA7CisJCQl9CisJCQllZnJlZShsY19wYXJlbnRfY2xhc3MpOworCQl9CiAJfSBlbHNlIHsKIAkJ b3BsaW5lLT5vcGNvZGUgPSBaRU5EX0RFQ0xBUkVfQ0xBU1M7CiAJfQpAQCAtNTI0MCw2ICs1NTk5 LDE0IEBACiAJCXplbmRfZXJyb3IoRV9DT01QSUxFX0VSUk9SLCAiUHJvcGVydGllcyBjYW5ub3Qg YmUgZGVjbGFyZWQgYWJzdHJhY3QiKTsKIAl9CiAKKwlpZiAoYWNjZXNzX3R5cGUgJiBaRU5EX0FD Q19SRUFET05MWSkgeworCQl6ZW5kX2Vycm9yKEVfQ09NUElMRV9FUlJPUiwgIlByb3BlcnRpZXMg Y2Fubm90IGJlIGRlY2xhcmVkIHJlYWQtb25seSIpOworCX0KKworCWlmIChhY2Nlc3NfdHlwZSAm IFpFTkRfQUNDX1dSSVRFT05MWSkgeworCQl6ZW5kX2Vycm9yKEVfQ09NUElMRV9FUlJPUiwgIlBy b3BlcnRpZXMgY2Fubm90IGJlIGRlY2xhcmVkIHdyaXRlLW9ubHkiKTsKKwl9CisKIAlpZiAoYWNj ZXNzX3R5cGUgJiBaRU5EX0FDQ19GSU5BTCkgewogCQl6ZW5kX2Vycm9yKEVfQ09NUElMRV9FUlJP UiwgIkNhbm5vdCBkZWNsYXJlIHByb3BlcnR5ICVzOjokJXMgZmluYWwsIHRoZSBmaW5hbCBtb2Rp ZmllciBpcyBhbGxvd2VkIG9ubHkgZm9yIG1ldGhvZHMgYW5kIGNsYXNzZXMiLAogCQkJCSAgIENH KGFjdGl2ZV9jbGFzc19lbnRyeSktPm5hbWUsIHZhcl9uYW1lLT51LmNvbnN0YW50LnZhbHVlLnN0 ci52YWwpOwpAQCAtNjczMiw2ICs3MDk5LDcgQEAKIAl6ZW5kX2hhc2hfaW5pdF9leCgmY2UtPnBy b3BlcnRpZXNfaW5mbywgMCwgTlVMTCwgKGR0b3JfZnVuY190KSAocGVyc2lzdGVudF9oYXNoZXMg PyB6ZW5kX2Rlc3Ryb3lfcHJvcGVydHlfaW5mb19pbnRlcm5hbCA6IHplbmRfZGVzdHJveV9wcm9w ZXJ0eV9pbmZvKSwgcGVyc2lzdGVudF9oYXNoZXMsIDApOwogCXplbmRfaGFzaF9pbml0X2V4KCZj ZS0+Y29uc3RhbnRzX3RhYmxlLCAwLCBOVUxMLCB6dmFsX3B0cl9kdG9yX2Z1bmMsIHBlcnNpc3Rl bnRfaGFzaGVzLCAwKTsKIAl6ZW5kX2hhc2hfaW5pdF9leCgmY2UtPmZ1bmN0aW9uX3RhYmxlLCAw LCBOVUxMLCBaRU5EX0ZVTkNUSU9OX0RUT1IsIHBlcnNpc3RlbnRfaGFzaGVzLCAwKTsKKwl6ZW5k X2hhc2hfaW5pdF9leCgmY2UtPmFjY2Vzc29ycywgMCwgTlVMTCwgWkVORF9BQ0NFU1NPUl9EVE9S LCBwZXJzaXN0ZW50X2hhc2hlcywgMCk7CiAKIAlpZiAoY2UtPnR5cGUgPT0gWkVORF9JTlRFUk5B TF9DTEFTUykgewogI2lmZGVmIFpUUwpJbmRleDogWmVuZC96ZW5kX2NvbXBpbGUuaAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBaZW5kL3plbmRfY29tcGlsZS5oCShyZXZpc2lvbiAzMjQ0MzkpCisrKyBaZW5kL3pl bmRfY29tcGlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxNCBAQAogCiAjZGVmaW5l IEZSRUVfUE5PREUoem5vZGUpCXp2YWxfZHRvcigmem5vZGUtPnUuY29uc3RhbnQpOwogCisjZGVm aW5lIE1BS0VfWk5PREUoem4sIHN0cikJIFwKKwl7CQkJCQkJCQkJCQkJCQkJXAorCQl6bi5vcF90 eXBlID0gSVNfQ09OU1Q7CQkJCQkJCQkJXAorCQlJTklUX1BaVkFMKCZ6bi51LmNvbnN0YW50KTsJ CQkJCQkJCVwKKwkJWlZBTF9TVFJJTkdMKCZ6bi51LmNvbnN0YW50LCBzdHIsIHN0cmxlbihzdHIp LCAxKTsJCVwKKwkJem4uRUEgPSAwOwkJCQkJCQkJCQkJCVwKKwl9CisKICNkZWZpbmUgU0VUX1VO VVNFRChvcCkgIG9wICMjIF90eXBlID0gSVNfVU5VU0VECiAKICNkZWZpbmUgSU5DX0JQQyhvcF9h cnJheSkJaWYgKG9wX2FycmF5LT5mbl9mbGFncyAmIFpFTkRfQUNDX0lOVEVSQUNUSVZFKSB7IChD Ryhjb250ZXh0KS5iYWNrcGF0Y2hfY291bnQrKyk7IH0KQEAgLTIwNyw3ICsyMTUsMTYgQEAKICNk ZWZpbmUgWkVORF9BQ0NfUkVUVVJOX1JFRkVSRU5DRQkJMHg0MDAwMDAwCiAjZGVmaW5lIFpFTkRf QUNDX0RPTkVfUEFTU19UV08JCQkweDgwMDAwMDAKIAorI2RlZmluZSBaRU5EX0FDQ19JU19HRVRU RVIJCQkJMHgxMDAwMDAwMAorI2RlZmluZSBaRU5EX0FDQ19JU19TRVRURVIJCQkJMHgyMDAwMDAw MAorI2RlZmluZSBaRU5EX0FDQ19JU19BQ0NFU1NPUgkJCTB4MzAwMDAwMDAJLyogTWFzayAqLwor CisjZGVmaW5lIFpFTkRfQUNDX1JFQURPTkxZCQkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgWkVORF9B Q0NfV1JJVEVPTkxZCQkJCTB4ODAwMDAwMDAKKworCiBjaGFyICp6ZW5kX3Zpc2liaWxpdHlfc3Ry aW5nKHplbmRfdWludCBmbl9mbGFncyk7CitjaGFyICp6ZW5kX2FjY2Vzc29yX3R5cGVfc3RyaW5n KHplbmRfdWludCBmbl9mbGFncyk7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgX3plbmRfcHJvcGVydHlf aW5mbyB7CkBAIC0zNDEsNiArMzU4LDE1IEBACiAJemVuZF9pbnRlcm5hbF9mdW5jdGlvbiBpbnRl cm5hbF9mdW5jdGlvbjsKIH0gemVuZF9mdW5jdGlvbjsKIAorI2RlZmluZSBaRU5EX0FDQ19OQU1F KGZ1bmMpICZmdW5jLT5jb21tb24uZnVuY3Rpb25fbmFtZVs1XQorCit0eXBlZGVmIHN0cnVjdCBf emVuZF9hY2Nlc3Nvcl9pbmZvIHsKKwl6ZW5kX3VpbnQJCWZsYWdzOworCWNvbnN0IGNoYXIgCQkq ZG9jX2NvbW1lbnQ7CisJaW50IAkJCWRvY19jb21tZW50X2xlbjsKKwl6ZW5kX2Z1bmN0aW9uIAkq Z2V0dGVyOworCXplbmRfZnVuY3Rpb24gCSpzZXR0ZXI7Cit9IHplbmRfYWNjZXNzb3JfaW5mbzsK IAogdHlwZWRlZiBzdHJ1Y3QgX3plbmRfZnVuY3Rpb25fc3RhdGUgewogCXplbmRfZnVuY3Rpb24g KmZ1bmN0aW9uOwpAQCAtNDkxLDYgKzUxNywxMCBAQAogdm9pZCB6ZW5kX2RvX3JldHVybih6bm9k ZSAqZXhwciwgaW50IGRvX2VuZF92cGFyc2UgVFNSTUxTX0RDKTsKIHZvaWQgemVuZF9kb19oYW5k bGVfZXhjZXB0aW9uKFRTUk1MU19EKTsKIAorCit2b2lkIHplbmRfZG9fYmVnaW5fYWNjZXNzb3Jf ZGVjbGFyYXRpb24oem5vZGUgKmZ1bmN0aW9uX3Rva2VuLCB6bm9kZSAqdmFyX25hbWUsIHpub2Rl ICptb2RpZmllcnMgVFNSTUxTX0RDKTsKK3ZvaWQgemVuZF9kb19lbmRfYWNjZXNzb3JfZGVjbGFy YXRpb24oem5vZGUgKmZ1bmN0aW9uX3Rva2VuLCB6bm9kZSAqdmFyX25hbWUsIHpub2RlICptb2Rp ZmllcnMsIGNvbnN0IHpub2RlICpib2R5IFRTUk1MU19EQyk7CisKIHZvaWQgemVuZF9kb19iZWdp bl9sYW1iZGFfZnVuY3Rpb25fZGVjbGFyYXRpb24oem5vZGUgKnJlc3VsdCwgem5vZGUgKmZ1bmN0 aW9uX3Rva2VuLCBpbnQgcmV0dXJuX3JlZmVyZW5jZSwgaW50IGlzX3N0YXRpYyBUU1JNTFNfREMp Owogdm9pZCB6ZW5kX2RvX2ZldGNoX2xleGljYWxfdmFyaWFibGUoem5vZGUgKnZhcm5hbWUsIHpl bmRfYm9vbCBpc19yZWYgVFNSTUxTX0RDKTsKIApAQCAtNjI1LDYgKzY1NSw4IEBACiB2b2lkIHpl bmRfcmVzb2x2ZV9nb3RvX2xhYmVsKHplbmRfb3BfYXJyYXkgKm9wX2FycmF5LCB6ZW5kX29wICpv cGxpbmUsIGludCBwYXNzMiBUU1JNTFNfREMpOwogdm9pZCB6ZW5kX3JlbGVhc2VfbGFiZWxzKFRT Uk1MU19EKTsKIAorc3RhdGljIGlubGluZSB6ZW5kX29wICpmaW5kX3ByZXZpb3VzX29wKHplbmRf dWNoYXIgb3Bjb2RlIFRTUk1MU19EQyk7CisKIFpFTkRfQVBJIHZvaWQgZnVuY3Rpb25fYWRkX3Jl Zih6ZW5kX2Z1bmN0aW9uICpmdW5jdGlvbik7CiAKICNkZWZpbmUgSU5JVElBTF9PUF9BUlJBWV9T SVpFIDY0CkBAIC02NDgsNiArNjgwLDcgQEAKIFpFTkRfQVBJIGludCB6ZW5kX2NsZWFudXBfZnVu Y3Rpb25fZGF0YV9mdWxsKHplbmRfZnVuY3Rpb24gKmZ1bmN0aW9uIFRTUk1MU19EQyk7CiAKIFpF TkRfQVBJIHZvaWQgZGVzdHJveV96ZW5kX2Z1bmN0aW9uKHplbmRfZnVuY3Rpb24gKmZ1bmN0aW9u IFRTUk1MU19EQyk7CitaRU5EX0FQSSB2b2lkIHplbmRfYWNjZXNzb3JfZHRvcih6ZW5kX2FjY2Vz c29yX2luZm8gKiphaSk7CiBaRU5EX0FQSSB2b2lkIHplbmRfZnVuY3Rpb25fZHRvcih6ZW5kX2Z1 bmN0aW9uICpmdW5jdGlvbik7CiBaRU5EX0FQSSB2b2lkIGRlc3Ryb3lfemVuZF9jbGFzcyh6ZW5k X2NsYXNzX2VudHJ5ICoqcGNlKTsKIHZvaWQgemVuZF9jbGFzc19hZGRfcmVmKHplbmRfY2xhc3Nf ZW50cnkgKipjZSk7CkBAIC02NTUsNiArNjg4LDcgQEAKIFpFTkRfQVBJIHZvaWQgemVuZF9tYW5n bGVfcHJvcGVydHlfbmFtZShjaGFyICoqZGVzdCwgaW50ICpkZXN0X2xlbmd0aCwgY29uc3QgY2hh ciAqc3JjMSwgaW50IHNyYzFfbGVuZ3RoLCBjb25zdCBjaGFyICpzcmMyLCBpbnQgc3JjMl9sZW5n dGgsIGludCBpbnRlcm5hbCk7CiBaRU5EX0FQSSBpbnQgemVuZF91bm1hbmdsZV9wcm9wZXJ0eV9u YW1lKGNvbnN0IGNoYXIgKm1hbmdsZWRfcHJvcGVydHksIGludCBtYW5nbGVkX3Byb3BlcnR5X2xl biwgY29uc3QgY2hhciAqKmNsYXNzX25hbWUsIGNvbnN0IGNoYXIgKipwcm9wX25hbWUpOwogCisj ZGVmaW5lIFpFTkRfQUNDRVNTT1JfRFRPUiAodm9pZCAoKikodm9pZCAqKSkgemVuZF9hY2Nlc3Nv cl9kdG9yCiAjZGVmaW5lIFpFTkRfRlVOQ1RJT05fRFRPUiAodm9pZCAoKikodm9pZCAqKSkgemVu ZF9mdW5jdGlvbl9kdG9yCiAjZGVmaW5lIFpFTkRfQ0xBU1NfRFRPUiAodm9pZCAoKikodm9pZCAq KSkgZGVzdHJveV96ZW5kX2NsYXNzCiAKSW5kZXg6IFplbmQvemVuZF9leGVjdXRlX0FQSS5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIFplbmQvemVuZF9leGVjdXRlX0FQSS5jCShyZXZpc2lvbiAzMjQ0MzkpCisr KyBaZW5kL3plbmRfZXhlY3V0ZV9BUEkuYwkod29ya2luZyBjb3B5KQpAQCAtMTYyNCwzMyArMTYy NCw1MyBAQAogCiAjZGVmaW5lIE1BWF9BQlNUUkFDVF9JTkZPX0NOVCAzCiAjZGVmaW5lIE1BWF9B QlNUUkFDVF9JTkZPX0ZNVCAiJXMlcyVzJXMiCisjZGVmaW5lIE1BWF9BQlNfQUNDRVNTT1JfSU5G T19GTVQgIiVzJXMlcyVzJXMlcyIKKwogI2RlZmluZSBESVNQTEFZX0FCU1RSQUNUX0ZOKGlkeCkg XAogCWFpLmFmbltpZHhdID8gWkVORF9GTl9TQ09QRV9OQU1FKGFpLmFmbltpZHhdKSA6ICIiLCBc CiAJYWkuYWZuW2lkeF0gPyAiOjoiIDogIiIsIFwKIAlhaS5hZm5baWR4XSA/IGFpLmFmbltpZHhd LT5jb21tb24uZnVuY3Rpb25fbmFtZSA6ICIiLCBcCi0JYWkuYWZuW2lkeF0gJiYgYWkuYWZuW2lk eCArIDFdID8gIiwgIiA6IChhaS5hZm5baWR4XSAmJiBhaS5jbnQgPiBNQVhfQUJTVFJBQ1RfSU5G T19DTlQgPyAiLCAuLi4iIDogIiIpCisJYWkuYWZuW2lkeF0gJiYgYWkuYWZuW2lkeCArIDFdID8g IiwgIiA6IChhaS5hZm5baWR4XSAmJiBhaS5hZm5fY250ID4gTUFYX0FCU1RSQUNUX0lORk9fQ05U ID8gIiwgLi4uIiA6ICIiKQorCisjZGVmaW5lIERJU1BMQVlfQUJTX0FDQ0VTU09SX0ZOKGlkeCkg XAorCWFpLmFic19hY2NbaWR4XSA/IHplbmRfYWNjZXNzb3JfdHlwZV9zdHJpbmcoYWkuYWJzX2Fj Y1tpZHhdLT5jb21tb24uZm5fZmxhZ3MpIDogIiIsIFwKKwlhaS5hYnNfYWNjW2lkeF0gPyAiICIg OiAiIiwgXAorCWFpLmFic19hY2NbaWR4XSA/IFpFTkRfRk5fU0NPUEVfTkFNRShhaS5hYnNfYWNj W2lkeF0pIDogIiIsIFwKKwlhaS5hYnNfYWNjW2lkeF0gPyAiOjokIiA6ICIiLCBcCisJYWkuYWJz X2FjY1tpZHhdID8gWkVORF9BQ0NfTkFNRShhaS5hYnNfYWNjW2lkeF0pIDogIiIsIFwKKwlhaS5h YnNfYWNjW2lkeF0gJiYgYWkuYWJzX2FjY1tpZHggKyAxXSA/ICIsICIgOiAoYWkuYWJzX2FjY1tp ZHhdICYmIGFpLmFic19hY2NfY291bnQgPiBNQVhfQUJTVFJBQ1RfSU5GT19DTlQgPyAiLCAuLi4i IDogIiIpCiAKIHR5cGVkZWYgc3RydWN0IF96ZW5kX2Fic3RyYWN0X2luZm8gewogCXplbmRfZnVu Y3Rpb24gKmFmbltNQVhfQUJTVFJBQ1RfSU5GT19DTlQgKyAxXTsKLQlpbnQgY250OworCWludCBh Zm5fY250OworCisJemVuZF9mdW5jdGlvbiAqYWJzX2FjY1tNQVhfQUJTVFJBQ1RfSU5GT19DTlQg KyAxXTsKKwlpbnQgYWJzX2FjY19jb3VudDsKKwogCWludCBjdG9yOwogfSB6ZW5kX2Fic3RyYWN0 X2luZm87CiAKIHN0YXRpYyBpbnQgemVuZF92ZXJpZnlfYWJzdHJhY3RfY2xhc3NfZnVuY3Rpb24o emVuZF9mdW5jdGlvbiAqZm4sIHplbmRfYWJzdHJhY3RfaW5mbyAqYWkgVFNSTUxTX0RDKSAvKiB7 e3sgKi8KIHsKIAlpZiAoZm4tPmNvbW1vbi5mbl9mbGFncyAmIFpFTkRfQUNDX0FCU1RSQUNUKSB7 Ci0JCWlmIChhaS0+Y250IDwgTUFYX0FCU1RSQUNUX0lORk9fQ05UKSB7Ci0JCQlhaS0+YWZuW2Fp LT5jbnRdID0gZm47CisJCWlmKGZuLT5jb21tb24uZm5fZmxhZ3MgJiBaRU5EX0FDQ19JU19BQ0NF U1NPUikgeworCQkJaWYgKGFpLT5hYnNfYWNjX2NvdW50IDwgTUFYX0FCU1RSQUNUX0lORk9fQ05U KQorCQkJCWFpLT5hYnNfYWNjW2FpLT5hYnNfYWNjX2NvdW50XSA9IGZuOworCQkJYWktPmFic19h Y2NfY291bnQrKzsKKwkJfSBlbHNlIHsKKwkJCWlmIChhaS0+YWZuX2NudCA8IE1BWF9BQlNUUkFD VF9JTkZPX0NOVCkgeworCQkJCWFpLT5hZm5bYWktPmFmbl9jbnRdID0gZm47CiAJCX0KIAkJaWYg KGZuLT5jb21tb24uZm5fZmxhZ3MgJiBaRU5EX0FDQ19DVE9SKSB7CiAJCQlpZiAoIWFpLT5jdG9y KSB7Ci0JCQkJYWktPmNudCsrOworCQkJCQlhaS0+YWZuX2NudCsrOwogCQkJCWFpLT5jdG9yID0g MTsKIAkJCX0gZWxzZSB7Ci0JCQkJYWktPmFmblthaS0+Y250XSA9IE5VTEw7CisJCQkJCWFpLT5h Zm5bYWktPmFmbl9jbnRdID0gTlVMTDsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWFpLT5jbnQrKzsK KwkJCQlhaS0+YWZuX2NudCsrOworCQkJfQogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtMTY2Niwx NSArMTY4NiwyNCBAQAogCiAJCXplbmRfaGFzaF9hcHBseV93aXRoX2FyZ3VtZW50KCZjZS0+ZnVu Y3Rpb25fdGFibGUsIChhcHBseV9mdW5jX2FyZ190KSB6ZW5kX3ZlcmlmeV9hYnN0cmFjdF9jbGFz c19mdW5jdGlvbiwgJmFpIFRTUk1MU19DQyk7CiAKLQkJaWYgKGFpLmNudCkgeworCQlpZiAoYWku YWZuX2NudCkgewogCQkJemVuZF9lcnJvcihFX0VSUk9SLCAiQ2xhc3MgJXMgY29udGFpbnMgJWQg YWJzdHJhY3QgbWV0aG9kJXMgYW5kIG11c3QgdGhlcmVmb3JlIGJlIGRlY2xhcmVkIGFic3RyYWN0 IG9yIGltcGxlbWVudCB0aGUgcmVtYWluaW5nIG1ldGhvZHMgKCIgTUFYX0FCU1RSQUNUX0lORk9f Rk1UIE1BWF9BQlNUUkFDVF9JTkZPX0ZNVCBNQVhfQUJTVFJBQ1RfSU5GT19GTVQgIikiLAotCQkJ CWNlLT5uYW1lLCBhaS5jbnQsCi0JCQkJYWkuY250ID4gMSA/ICJzIiA6ICIiLAorCQkJCWNlLT5u YW1lLCBhaS5hZm5fY250LAorCQkJCWFpLmFmbl9jbnQgPiAxID8gInMiIDogIiIsCiAJCQkJRElT UExBWV9BQlNUUkFDVF9GTigwKSwKIAkJCQlESVNQTEFZX0FCU1RSQUNUX0ZOKDEpLAogCQkJCURJ U1BMQVlfQUJTVFJBQ1RfRk4oMikKIAkJCQkpOwogCQl9CisJCWlmIChhaS5hYnNfYWNjX2NvdW50 KSB7CisJCQl6ZW5kX2Vycm9yKEVfRVJST1IsICJDbGFzcyAlcyBjb250YWlucyAlZCBhYnN0cmFj dCBhY2Nlc3NvciVzIGFuZCBtdXN0IGJlIGRlY2xhcmVkIGFic3RyYWN0IG9yIGltcGxlbWVudCB0 aGUgcmVtYWluaW5nIGFjY2Vzc29ycyAoIiBNQVhfQUJTX0FDQ0VTU09SX0lORk9fRk1UIE1BWF9B QlNfQUNDRVNTT1JfSU5GT19GTVQgTUFYX0FCU19BQ0NFU1NPUl9JTkZPX0ZNVCAiKSIsCisJCQkJ Y2UtPm5hbWUsIGFpLmFic19hY2NfY291bnQsCisJCQkJYWkuYWJzX2FjY19jb3VudCA+IDEgPyAi cyIgOiAiIiwKKwkJCQlESVNQTEFZX0FCU19BQ0NFU1NPUl9GTigwKSwKKwkJCQlESVNQTEFZX0FC U19BQ0NFU1NPUl9GTigxKSwKKwkJCQlESVNQTEFZX0FCU19BQ0NFU1NPUl9GTigyKQorCQkJKTsK KwkJfQogCX0KIH0KIC8qIH19fSAqLwpJbmRleDogWmVuZC96ZW5kX2dsb2JhbHMuaAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBaZW5kL3plbmRfZ2xvYmFscy5oCShyZXZpc2lvbiAzMjQ0MzkpCisrKyBaZW5kL3pl bmRfZ2xvYmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDcgQEAKIAl6ZW5kX2Jv b2wgaW5jcmVtZW50X2xpbmVubzsKIAogCXpub2RlIGltcGxlbWVudGluZ19jbGFzczsKKwl6bm9k ZSAqYWNjZXNzb3Jfbm9kZTsKIAogCXplbmRfdWludCBhY2Nlc3NfdHlwZTsKIApJbmRleDogWmVu ZC96ZW5kX2xhbmd1YWdlX3BhcnNlci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFplbmQvemVuZF9sYW5ndWFn ZV9wYXJzZXIueQkocmV2aXNpb24gMzI0NDM5KQorKysgWmVuZC96ZW5kX2xhbmd1YWdlX3BhcnNl ci55CSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNiArMTc4LDggQEAKICV0b2tlbiBUX0hBTFRfQ09N UElMRVIgIl9faGFsdF9jb21waWxlciAoVF9IQUxUX0NPTVBJTEVSKSIKICV0b2tlbiBUX0NMQVNT ICAgICAgImNsYXNzIChUX0NMQVNTKSIKICV0b2tlbiBUX1RSQUlUICAgICAgInRyYWl0IChUX1RS QUlUKSIKKyV0b2tlbiBUX1JFQURPTkxZICAgICAgInJlYWQtb25seSAoVF9SRUFET05MWSkiCisl dG9rZW4gVF9XUklURU9OTFkgICAgICAid3JpdGUtb25seSAoVF9XUklURU9OTFkpIgogJXRva2Vu IFRfSU5URVJGQUNFICAiaW50ZXJmYWNlIChUX0lOVEVSRkFDRSkiCiAldG9rZW4gVF9FWFRFTkRT ICAgICJleHRlbmRzIChUX0VYVEVORFMpIgogJXRva2VuIFRfSU1QTEVNRU5UUyAiaW1wbGVtZW50 cyAoVF9JTVBMRU1FTlRTKSIKQEAgLTU3Myw3ICs1NzUsNyBAQAogCiAKIGNsYXNzX3N0YXRlbWVu dDoKLQkJdmFyaWFibGVfbW9kaWZpZXJzIHsgQ0coYWNjZXNzX3R5cGUpID0gWl9MVkFMKCQxLnUu Y29uc3RhbnQpOyB9IGNsYXNzX3ZhcmlhYmxlX2RlY2xhcmF0aW9uICc7JworCQl2YXJpYWJsZV9t b2RpZmllcnMgeyBDRyhhY2Nlc3NfdHlwZSkgPSBaX0xWQUwoJDEudS5jb25zdGFudCk7IH0gY2xh c3NfdmFyaWFibGVfYWNjZXNzb3JfZGVjbGFyYXRpb25zCiAJfAljbGFzc19jb25zdGFudF9kZWNs YXJhdGlvbiAnOycKIAl8CXRyYWl0X3VzZV9zdGF0ZW1lbnQKIAl8CW1ldGhvZF9tb2RpZmllcnMg ZnVuY3Rpb24gaXNfcmVmZXJlbmNlIFRfU1RSSU5HIHsgemVuZF9kb19iZWdpbl9mdW5jdGlvbl9k ZWNsYXJhdGlvbigmJDIsICYkNCwgMSwgJDMub3BfdHlwZSwgJiQxIFRTUk1MU19DQyk7IH0gJygn CkBAIC02NjQsNiArNjY2LDU2IEBACiAJfAlUX1NUQVRJQwkJCQl7IFpfTFZBTCgkJC51LmNvbnN0 YW50KSA9IFpFTkRfQUNDX1NUQVRJQzsgfQogCXwJVF9BQlNUUkFDVAkJCQl7IFpfTFZBTCgkJC51 LmNvbnN0YW50KSA9IFpFTkRfQUNDX0FCU1RSQUNUOyB9CiAJfAlUX0ZJTkFMCQkJCQl7IFpfTFZB TCgkJC51LmNvbnN0YW50KSA9IFpFTkRfQUNDX0ZJTkFMOyB9CisJfAlUX1JFQURPTkxZCQkJCXsg Wl9MVkFMKCQkLnUuY29uc3RhbnQpID0gWkVORF9BQ0NfUkVBRE9OTFk7IH0KKwl8CVRfV1JJVEVP TkxZCQkJCXsgWl9MVkFMKCQkLnUuY29uc3RhbnQpID0gWkVORF9BQ0NfV1JJVEVPTkxZOyB9Cis7 CisKK2FjY2Vzc29yczoKKwkJYWNjZXNzb3JfZnVuY3Rpb24KKwl8CWFjY2Vzc29yX2Z1bmN0aW9u CisJCWFjY2Vzc29yX2Z1bmN0aW9uCisJfCAvKiBFbXB0eSAqLworOworCithY2Nlc3Nvcl9tb2Rp ZmllcnM6CisJCS8qIGVtcHR5ICovCQkJCQkJeyBaX0xWQUwoJCQudS5jb25zdGFudCkgPSBDRyhh Y2Nlc3NfdHlwZSk7IH0KKwl8CW5vbl9lbXB0eV9hY2Nlc3Nvcl9tb2RpZmllcnMJeyAkJCA9ICQx OyB9Cis7CisKK25vbl9lbXB0eV9hY2Nlc3Nvcl9tb2RpZmllcnM6CisJCWFjY2Vzc29yX21vZGlm aWVyCQkJCQkJCQl7ICQkID0gJDE7IH0KKwl8CW5vbl9lbXB0eV9hY2Nlc3Nvcl9tb2RpZmllcnMg YWNjZXNzb3JfbW9kaWZpZXIJeyBaX0xWQUwoJCQudS5jb25zdGFudCkgPSB6ZW5kX2RvX3Zlcmlm eV9hY2Nlc3NfdHlwZXMoJiQxLCAmJDIpOyB9CisKKworYWNjZXNzb3JfbW9kaWZpZXI6CisJCVRf UFVCTElDCQkJCXsgWl9MVkFMKCQkLnUuY29uc3RhbnQpID0gWkVORF9BQ0NfUFVCTElDOyB9CisJ fAlUX1BST1RFQ1RFRAkJCQl7IFpfTFZBTCgkJC51LmNvbnN0YW50KSA9IFpFTkRfQUNDX1BST1RF Q1RFRDsgfQorCXwJVF9QUklWQVRFCQkJCXsgWl9MVkFMKCQkLnUuY29uc3RhbnQpID0gWkVORF9B Q0NfUFJJVkFURTsgfQorCXwJVF9TVEFUSUMJCQkJeyBaX0xWQUwoJCQudS5jb25zdGFudCkgPSBa RU5EX0FDQ19TVEFUSUM7IH0KKwl8CVRfRklOQUwJCQkJCXsgWl9MVkFMKCQkLnUuY29uc3RhbnQp ID0gWkVORF9BQ0NfRklOQUw7IH0KKzsKKworYWNjZXNzb3JfZnVuY3Rpb246CisJCWFjY2Vzc29y X21vZGlmaWVycyBUX1NUUklORworCQkJeyB6ZW5kX2RvX2JlZ2luX2FjY2Vzc29yX2RlY2xhcmF0 aW9uKCYkMiwgQ0coYWNjZXNzb3Jfbm9kZSksICYkMSBUU1JNTFNfQ0MpOyB9CisJCQkJJ3snIGlu bmVyX3N0YXRlbWVudF9saXN0ICd9JworCQkJeyB6ZW5kX2RvX2VuZF9hY2Nlc3Nvcl9kZWNsYXJh dGlvbigmJDIsIENHKGFjY2Vzc29yX25vZGUpLCAmJDEsICYkNCBUU1JNTFNfQ0MpOyB9CisJfAlh Y2Nlc3Nvcl9tb2RpZmllcnMgVF9TVFJJTkcgCisJCXsKKwkJCXplbmRfZG9fYmVnaW5fYWNjZXNz b3JfZGVjbGFyYXRpb24oJiQyLCBDRyhhY2Nlc3Nvcl9ub2RlKSwgJiQxIFRTUk1MU19DQyk7CisJ CQl6ZW5kX2RvX2VuZF9hY2Nlc3Nvcl9kZWNsYXJhdGlvbigmJDIsIENHKGFjY2Vzc29yX25vZGUp LCAmJDEsIE5VTEwgVFNSTUxTX0NDKTsKKwkJCS8qIGVmcmVlKFpfU1RSVkFMKCQyLnUuY29uc3Rh bnQpKTsgKi8KKwkJfQorCQknOycKKzsKKworY2xhc3NfdmFyaWFibGVfYWNjZXNzb3JfZGVjbGFy YXRpb25zOgorCQlUX1ZBUklBQkxFICd7JworCQkJeyB6ZW5kX2RlY2xhcmVfYWNjZXNzb3IoJiQx IFRTUk1MU19DQyk7IENHKGFjY2Vzc29yX25vZGUpID0gJiQxOyB9CisJCQlhY2Nlc3NvcnMKKwkJ CXsgZWZyZWUoJDEudS5jb25zdGFudC52YWx1ZS5zdHIudmFsKTsgfQorCQknfScKKwl8CWNsYXNz X3ZhcmlhYmxlX2RlY2xhcmF0aW9uICc7JwogOwogCiBjbGFzc192YXJpYWJsZV9kZWNsYXJhdGlv bjoKSW5kZXg6IFplbmQvemVuZF9sYW5ndWFnZV9zY2FubmVyLmwKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gWmVu ZC96ZW5kX2xhbmd1YWdlX3NjYW5uZXIubAkocmV2aXNpb24gMzI0NDM5KQorKysgWmVuZC96ZW5k X2xhbmd1YWdlX3NjYW5uZXIubAkod29ya2luZyBjb3B5KQpAQCAtMTE0Niw2ICsxMTQ2LDE0IEBA CiAJcmV0dXJuIFRfVFJBSVQ7CiB9CiAKKzxTVF9JTl9TQ1JJUFRJTkc+InJlYWQtb25seSIgewor CXJldHVybiBUX1JFQURPTkxZOworfQorCis8U1RfSU5fU0NSSVBUSU5HPiJ3cml0ZS1vbmx5IiB7 CisJcmV0dXJuIFRfV1JJVEVPTkxZOworfQorCiA8U1RfSU5fU0NSSVBUSU5HPiJleHRlbmRzIiB7 CiAJcmV0dXJuIFRfRVhURU5EUzsKIH0KSW5kZXg6IFplbmQvemVuZF9vYmplY3RfaGFuZGxlcnMu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBaZW5kL3plbmRfb2JqZWN0X2hhbmRsZXJzLmMJKHJldmlzaW9uIDMy NDQzOSkKKysrIFplbmQvemVuZF9vYmplY3RfaGFuZGxlcnMuYwkod29ya2luZyBjb3B5KQpAQCAt NTEsNiArNTEsNyBAQAogICBpZiB3ZSBoYXZlIF9fY2FsbCBhbmQgbWV0aG9kIHdoaWNoIGlzIG5v dCBwYXJ0IG9mIHRoZSBjbGFzcyBmdW5jdGlvbiB0YWJsZSBpcwogICBjYWxsZWQsIHdlIGNhbCBf X2NhbGwgaGFuZGxlci4KICovCitzdGF0aWMgdW5pb24gX3plbmRfZnVuY3Rpb24gKnplbmRfc3Rk X2dldF9tZXRob2QoenZhbCAqKm9iamVjdF9wdHIsIGNoYXIgKm1ldGhvZF9uYW1lLCBpbnQgbWV0 aG9kX2xlbiwgY29uc3Qgc3RydWN0IF96ZW5kX2xpdGVyYWwgKmtleSBUU1JNTFNfREMpOwogCiBa RU5EX0FQSSB2b2lkIHJlYnVpbGRfb2JqZWN0X3Byb3BlcnRpZXMoemVuZF9vYmplY3QgKnpvYmop IC8qIHt7eyAqLwogewpAQCAtMTMxLDcgKzEzMiw3IEBACiB9CiAvKiB9fX0gKi8KIAotc3RhdGlj IHp2YWwgKnplbmRfc3RkX2NhbGxfZ2V0dGVyKHp2YWwgKm9iamVjdCwgenZhbCAqbWVtYmVyIFRT Uk1MU19EQykgLyoge3t7ICovCitzdGF0aWMgenZhbCAqemVuZF9zdGRfY2FsbF9nZXR0ZXIoenZh bCAqb2JqZWN0LCB6dmFsICptZW1iZXIsIHplbmRfZnVuY3Rpb24gKmZ1bmMgVFNSTUxTX0RDKSAv KiB7e3sgKi8KIHsKIAl6dmFsICpyZXR2YWwgPSBOVUxMOwogCXplbmRfY2xhc3NfZW50cnkgKmNl ID0gWl9PQkpDRV9QKG9iamVjdCk7CkBAIC0xNDQsNyArMTQ1LDExIEBACiAKIAlTRVBBUkFURV9B UkdfSUZfUkVGKG1lbWJlcik7CiAKLQl6ZW5kX2NhbGxfbWV0aG9kX3dpdGhfMV9wYXJhbXMoJm9i amVjdCwgY2UsICZjZS0+X19nZXQsIFpFTkRfR0VUX0ZVTkNfTkFNRSwgJnJldHZhbCwgbWVtYmVy KTsKKwlpZiAoZnVuYy0+Y29tbW9uLm51bV9hcmdzID09IDEpIHsKKwkJemVuZF9jYWxsX21ldGhv ZF93aXRoXzFfcGFyYW1zKCZvYmplY3QsIGNlLCAmZnVuYywgZnVuYy0+Y29tbW9uLmZ1bmN0aW9u X25hbWUsICZyZXR2YWwsIG1lbWJlcik7CisJfSBlbHNlIHsKKwkJemVuZF9jYWxsX21ldGhvZF93 aXRoXzBfcGFyYW1zKCZvYmplY3QsIGNlLCAmZnVuYywgZnVuYy0+Y29tbW9uLmZ1bmN0aW9uX25h bWUsICZyZXR2YWwpOworCX0KIAogCXp2YWxfcHRyX2R0b3IoJm1lbWJlcik7CiAKQEAgLTE1Niw3 ICsxNjEsNyBAQAogfQogLyogfX19ICovCiAKLXN0YXRpYyBpbnQgemVuZF9zdGRfY2FsbF9zZXR0 ZXIoenZhbCAqb2JqZWN0LCB6dmFsICptZW1iZXIsIHp2YWwgKnZhbHVlIFRTUk1MU19EQykgLyog e3t7ICovCitzdGF0aWMgaW50IHplbmRfc3RkX2NhbGxfc2V0dGVyKHp2YWwgKm9iamVjdCwgenZh bCAqbWVtYmVyLCB6dmFsICp2YWx1ZSwgemVuZF9mdW5jdGlvbiAqZnVuYyBUU1JNTFNfREMpIC8q IHt7eyAqLwogewogCXp2YWwgKnJldHZhbCA9IE5VTEw7CiAJaW50IHJlc3VsdDsKQEAgLTE3MSw3 ICsxNzYsMTEgQEAKIAogCSAgIGl0IHNob3VsZCByZXR1cm4gd2hldGhlciB0aGUgY2FsbCB3YXMg c3VjY2Vzc2Z1bGwgb3Igbm90CiAJKi8KLQl6ZW5kX2NhbGxfbWV0aG9kX3dpdGhfMl9wYXJhbXMo Jm9iamVjdCwgY2UsICZjZS0+X19zZXQsIFpFTkRfU0VUX0ZVTkNfTkFNRSwgJnJldHZhbCwgbWVt YmVyLCB2YWx1ZSk7CisJaWYgKGZ1bmMtPmNvbW1vbi5udW1fYXJncyA9PSAyKSB7CisJCXplbmRf Y2FsbF9tZXRob2Rfd2l0aF8yX3BhcmFtcygmb2JqZWN0LCBjZSwgJmZ1bmMsIGZ1bmMtPmNvbW1v bi5mdW5jdGlvbl9uYW1lLCAmcmV0dmFsLCBtZW1iZXIsIHZhbHVlKTsKKwl9IGVsc2UgeworCQl6 ZW5kX2NhbGxfbWV0aG9kX3dpdGhfMV9wYXJhbXMoJm9iamVjdCwgY2UsICZmdW5jLCBmdW5jLT5j b21tb24uZnVuY3Rpb25fbmFtZSwgJnJldHZhbCwgdmFsdWUpOworCX0KIAogCXp2YWxfcHRyX2R0 b3IoJm1lbWJlcik7CiAJenZhbF9wdHJfZHRvcigmdmFsdWUpOwpAQCAtMzk3LDYgKzQwNiw2MiBA QAogfQogLyogfX19ICovCiAKK3plbmRfZnVuY3Rpb24gaW5saW5lICp6ZW5kX2xvY2F0ZV9nZXR0 ZXIoenZhbCAqb2JqZWN0LCB6dmFsICptZW1iZXIsIGNvbnN0IHplbmRfbGl0ZXJhbCAqa2V5IFRT Uk1MU19EQykgLyoge3t7ICovCit7CisJemVuZF9vYmplY3QgKnpvYmogPSBaX09CSl9QKG9iamVj dCk7CisJemVuZF9hY2Nlc3Nvcl9pbmZvICoqYWk7CisJdWxvbmcgaGFzaF92YWx1ZSA9IGtleSA/ IGtleS0+aGFzaF92YWx1ZSA6IHplbmRfZ2V0X2hhc2hfdmFsdWUoWl9TVFJWQUxfUChtZW1iZXIp LCBaX1NUUkxFTl9QKG1lbWJlcikgKyAxKTsKKworCWlmKHplbmRfaGFzaF9xdWlja19maW5kKCZ6 b2JqLT5jZS0+YWNjZXNzb3JzLCBaX1NUUlZBTF9QKG1lbWJlciksIFpfU1RSTEVOX1AobWVtYmVy KSArIDEsIGhhc2hfdmFsdWUsICh2b2lkKiopICZhaSkgPT0gU1VDQ0VTUykgeworCQlpZigoKmFp KS0+ZmxhZ3MgJiBaRU5EX0FDQ19XUklURU9OTFkpIHsKKwkJCWlmKCgqYWkpLT5zZXR0ZXIpIHsK KwkJCQl6ZW5kX2Vycm9yX25vcmV0dXJuKEVfRVJST1IsICJDYW5ub3QgZ2V0IHdyaXRlLW9ubHkg cHJvcGVydHkgJXM6OiQlcy4iLCBaRU5EX0ZOX1NDT1BFX05BTUUoKCphaSktPnNldHRlciksIFpf U1RSVkFMX1AobWVtYmVyKSk7CisJCQl9CisJCX0gZWxzZSBpZigoKmFpKS0+Z2V0dGVyKSB7CisJ CQkvKiBJZiBwdWJsaWMgZ2V0dGVyLCBubyBhY2Nlc3MgY2hlY2sgcmVxdWlyZWQgKi8KKwkJCWlm KCgqYWkpLT5nZXR0ZXItPmNvbW1vbi5mbl9mbGFncyAmIFpFTkRfQUNDX1BVQkxJQykgeworCQkJ CXJldHVybiAoKmFpKS0+Z2V0dGVyOworCQkJfQorCQkJcmV0dXJuIHplbmRfc3RkX2dldF9tZXRo b2QoJm9iamVjdCwgKGNoYXIgKikoKmFpKS0+Z2V0dGVyLT5jb21tb24uZnVuY3Rpb25fbmFtZSwg c3RybGVuKCgqYWkpLT5nZXR0ZXItPmNvbW1vbi5mdW5jdGlvbl9uYW1lKSwgTlVMTCBUU1JNTFNf Q0MpOworCQl9CisJCWlmKCgqYWkpLT5zZXR0ZXIpIHsKKwkJCXplbmRfZXJyb3Jfbm9yZXR1cm4o RV9FUlJPUiwgIkNhbm5vdCBnZXQgcHJvcGVydHkgJXM6OiQlcywgbm8gZ2V0dGVyIGRlZmluZWQu IiwgWkVORF9GTl9TQ09QRV9OQU1FKCgqYWkpLT5zZXR0ZXIpLCBaX1NUUlZBTF9QKG1lbWJlcikp OworCQl9CisJCS8qIFRoaXMgdGVjaG5pY2FsbHkgc2hvdWxkbid0IGV2ZXIgaGFwcGVuLCB0aGlz IHdvdWxkIG1lYW4gdGhhdCBhbiBhY2Nlc3NvciBpcyBkZWZpbmVkIGJ1dCB0aGVyZSBpcyBubyBn ZXR0ZXIgb3Igc2V0dGVyICovCisJCXplbmRfZXJyb3Jfbm9yZXR1cm4oRV9FUlJPUiwgIkNhbm5v dCBnZXQgcHJvcGVydHkgJCVzLCBubyBnZXR0ZXIgb3Igc2V0dGVyIGRlZmluZWQuIiwgWl9TVFJW QUxfUChtZW1iZXIpKTsKKwl9CisJcmV0dXJuIHpvYmotPmNlLT5fX2dldDsKK30KKy8qIH19fSAq LworCit6ZW5kX2Z1bmN0aW9uIGlubGluZSAqemVuZF9sb2NhdGVfc2V0dGVyKHp2YWwgKm9iamVj dCwgenZhbCAqbWVtYmVyLCB6ZW5kX2d1YXJkICpndWFyZCwgY29uc3QgemVuZF9saXRlcmFsICpr ZXkgVFNSTUxTX0RDKSAvKiB7e3sgKi8KK3sKKwl6ZW5kX29iamVjdCAqem9iaiA9IFpfT0JKX1Ao b2JqZWN0KTsKKwl6ZW5kX2FjY2Vzc29yX2luZm8gKiphaTsKKwl1bG9uZyBoYXNoX3ZhbHVlID0g a2V5ID8ga2V5LT5oYXNoX3ZhbHVlIDogemVuZF9nZXRfaGFzaF92YWx1ZShaX1NUUlZBTF9QKG1l bWJlciksIFpfU1RSTEVOX1AobWVtYmVyKSArIDEpOworCisJaWYoemVuZF9oYXNoX3F1aWNrX2Zp bmQoJnpvYmotPmNlLT5hY2Nlc3NvcnMsIFpfU1RSVkFMX1AobWVtYmVyKSwgWl9TVFJMRU5fUCht ZW1iZXIpICsgMSwgaGFzaF92YWx1ZSwgKHZvaWQqKikgJmFpKSA9PSBTVUNDRVNTKSB7CisJCWlm KCgqYWkpLT5mbGFncyAmIFpFTkRfQUNDX1JFQURPTkxZKSB7CisJCQlpZigoKmFpKS0+Z2V0dGVy KSB7CisJCQkJemVuZF9lcnJvcl9ub3JldHVybihFX0VSUk9SLCAiQ2Fubm90IHNldCByZWFkLW9u bHkgcHJvcGVydHkgJXM6OiQlcy4iLCBaRU5EX0ZOX1NDT1BFX05BTUUoKCphaSktPmdldHRlciks IFpfU1RSVkFMX1AobWVtYmVyKSk7CisJCQl9CisJCX0gZWxzZSBpZigoKmFpKS0+c2V0dGVyKSB7 CisJCQkvKiBJZiBwdWJsaWMgc2V0dGVyLCBubyBhY2Nlc3MgY2hlY2sgcmVxdWlyZWQgKi8KKwkJ CWlmKCgqYWkpLT5zZXR0ZXItPmNvbW1vbi5mbl9mbGFncyAmIFpFTkRfQUNDX1BVQkxJQykgewor CQkJCXJldHVybiAoKmFpKS0+c2V0dGVyOworCQkJfQorCQkJcmV0dXJuIHplbmRfc3RkX2dldF9t ZXRob2QoJm9iamVjdCwgKGNoYXIgKikoKmFpKS0+c2V0dGVyLT5jb21tb24uZnVuY3Rpb25fbmFt ZSwgc3RybGVuKCgqYWkpLT5zZXR0ZXItPmNvbW1vbi5mdW5jdGlvbl9uYW1lKSwgTlVMTCBUU1JN TFNfQ0MpOworCQl9CisJCWlmKCgqYWkpLT5nZXR0ZXIpIHsKKwkJCXplbmRfZXJyb3Jfbm9yZXR1 cm4oRV9FUlJPUiwgIkNhbm5vdCBzZXQgcHJvcGVydHkgJXM6OiQlcywgbm8gc2V0dGVyIGRlZmlu ZWQuIiwgWkVORF9GTl9TQ09QRV9OQU1FKCgqYWkpLT5nZXR0ZXIpLCBaX1NUUlZBTF9QKG1lbWJl cikpOworCQl9CisJCS8qIFRoaXMgdGVjaG5pY2FsbHkgc2hvdWxkbid0IGV2ZXIgaGFwcGVuLCB0 aGlzIHdvdWxkIG1lYW4gdGhhdCBhbiBhY2Nlc3NvciBpcyBkZWZpbmVkIGJ1dCB0aGVyZSBpcyBu byBnZXR0ZXIgb3Igc2V0dGVyICovCisJCXplbmRfZXJyb3Jfbm9yZXR1cm4oRV9FUlJPUiwgIkNh bm5vdCBzZXQgcHJvcGVydHkgJCVzLCBubyBnZXR0ZXIgb3Igc2V0dGVyIGRlZmluZWQuIiwgWl9T VFJWQUxfUChtZW1iZXIpKTsKKwl9CisJcmV0dXJuIHpvYmotPmNlLT5fX3NldDsKK30KKy8qIH19 fSAqLworCiB6dmFsICp6ZW5kX3N0ZF9yZWFkX3Byb3BlcnR5KHp2YWwgKm9iamVjdCwgenZhbCAq bWVtYmVyLCBpbnQgdHlwZSwgY29uc3QgemVuZF9saXRlcmFsICprZXkgVFNSTUxTX0RDKSAvKiB7 e3sgKi8KIHsKIAl6ZW5kX29iamVjdCAqem9iajsKQEAgLTQzNCwxOCArNDk5LDE5IEBACiAJICAg ICAgICAgICAgKCoocmV0dmFsID0gJnpvYmotPnByb3BlcnRpZXNfdGFibGVbcHJvcGVydHlfaW5m by0+b2Zmc2V0XSkgPT0gTlVMTCkpIDoKIAkgICAgICAgIChVTkVYUEVDVEVEKCF6b2JqLT5wcm9w ZXJ0aWVzKSB8fAogCSAgICAgICAgICBVTkVYUEVDVEVEKHplbmRfaGFzaF9xdWlja19maW5kKHpv YmotPnByb3BlcnRpZXMsIHByb3BlcnR5X2luZm8tPm5hbWUsIHByb3BlcnR5X2luZm8tPm5hbWVf bGVuZ3RoKzEsIHByb3BlcnR5X2luZm8tPmgsICh2b2lkICoqKSAmcmV0dmFsKSA9PSBGQUlMVVJF KSkpKSB7CisKIAkJemVuZF9ndWFyZCAqZ3VhcmQgPSBOVUxMOworCQl6ZW5kX2Z1bmN0aW9uIAkJ KmdldHRlciA9IHplbmRfbG9jYXRlX2dldHRlcihvYmplY3QsIG1lbWJlciwga2V5IFRTUk1MU19D Qyk7CiAKLQkJaWYgKHpvYmotPmNlLT5fX2dldCAmJgotCQkgICAgemVuZF9nZXRfcHJvcGVydHlf Z3VhcmQoem9iaiwgcHJvcGVydHlfaW5mbywgbWVtYmVyLCAmZ3VhcmQpID09IFNVQ0NFU1MgJiYK LQkJICAgICFndWFyZC0+aW5fZ2V0KSB7CisJCWlmICggZ2V0dGVyICE9IE5VTEwgJiYgemVuZF9n ZXRfcHJvcGVydHlfZ3VhcmQoem9iaiwgcHJvcGVydHlfaW5mbywgbWVtYmVyLCAmZ3VhcmQpID09 IFNVQ0NFU1MgJiYgIWd1YXJkLT5pbl9nZXQpIHsKIAkJCS8qIGhhdmUgZ2V0dGVyIC0gdHJ5IHdp dGggaXQhICovCisJCQkKIAkJCVpfQUREUkVGX1Aob2JqZWN0KTsKIAkJCWlmIChQWlZBTF9JU19S RUYob2JqZWN0KSkgewogCQkJCVNFUEFSQVRFX1pWQUwoJm9iamVjdCk7CiAJCQl9CiAJCQlndWFy ZC0+aW5fZ2V0ID0gMTsgLyogcHJldmVudCBjaXJjdWxhciBnZXR0aW5nICovCi0JCQlydiA9IHpl bmRfc3RkX2NhbGxfZ2V0dGVyKG9iamVjdCwgbWVtYmVyIFRTUk1MU19DQyk7CisJCQlydiA9IHpl bmRfc3RkX2NhbGxfZ2V0dGVyKG9iamVjdCwgbWVtYmVyLCBnZXR0ZXIgVFNSTUxTX0NDKTsKIAkJ CWd1YXJkLT5pbl9nZXQgPSAwOwogCiAJCQlpZiAocnYpIHsKQEAgLTU1NiwxNSArNjIyLDE3IEBA CiAJfSBlbHNlIHsKIAkJemVuZF9ndWFyZCAqZ3VhcmQgPSBOVUxMOwogCi0JCWlmICh6b2JqLT5j ZS0+X19zZXQgJiYKLQkJICAgIHplbmRfZ2V0X3Byb3BlcnR5X2d1YXJkKHpvYmosIHByb3BlcnR5 X2luZm8sIG1lbWJlciwgJmd1YXJkKSA9PSBTVUNDRVNTICYmCi0JCSAgICAhZ3VhcmQtPmluX3Nl dCkgeworCQl6ZW5kX2dldF9wcm9wZXJ0eV9ndWFyZCh6b2JqLCBwcm9wZXJ0eV9pbmZvLCBtZW1i ZXIsICZndWFyZCk7CisKKwkJemVuZF9mdW5jdGlvbiAJCSpzZXR0ZXIgPSB6ZW5kX2xvY2F0ZV9z ZXR0ZXIob2JqZWN0LCBtZW1iZXIsIGd1YXJkLCBrZXkgVFNSTUxTX0NDKTsKKworCQlpZiAoc2V0 dGVyICYmIGd1YXJkICYmICFndWFyZC0+aW5fc2V0KSB7CiAJCQlaX0FERFJFRl9QKG9iamVjdCk7 CiAJCQlpZiAoUFpWQUxfSVNfUkVGKG9iamVjdCkpIHsKIAkJCQlTRVBBUkFURV9aVkFMKCZvYmpl Y3QpOwogCQkJfQogCQkJZ3VhcmQtPmluX3NldCA9IDE7IC8qIHByZXZlbnQgY2lyY3VsYXIgc2V0 dGluZyAqLwotCQkJaWYgKHplbmRfc3RkX2NhbGxfc2V0dGVyKG9iamVjdCwgbWVtYmVyLCB2YWx1 ZSBUU1JNTFNfQ0MpICE9IFNVQ0NFU1MpIHsKKwkJCWlmICh6ZW5kX3N0ZF9jYWxsX3NldHRlcihv YmplY3QsIG1lbWJlciwgdmFsdWUsIHNldHRlciBUU1JNTFNfQ0MpICE9IFNVQ0NFU1MpIHsKIAkJ CQkvKiBmb3Igbm93LCBqdXN0IGlnbm9yZSBpdCAtIF9fc2V0IHNob3VsZCB0YWtlIGNhcmUgb2Yg d2FybmluZ3MsIGV0Yy4gKi8KIAkJCX0KIAkJCWd1YXJkLT5pbl9zZXQgPSAwOwpAQCAtMTAyNiw5 ICsxMDk0LDEzIEBACiAJCQlpZiAoem9iai0+Y2UtPl9fY2FsbCkgewogCQkJCWZiYyA9IHplbmRf Z2V0X3VzZXJfY2FsbF9mdW5jdGlvbih6b2JqLT5jZSwgbWV0aG9kX25hbWUsIG1ldGhvZF9sZW4p OwogCQkJfSBlbHNlIHsKKwkJCQlpZihmYmMtPm9wX2FycmF5LmZuX2ZsYWdzICYgWkVORF9BQ0Nf SVNfQUNDRVNTT1IpIHsKKwkJCQkJemVuZF9lcnJvcl9ub3JldHVybihFX0VSUk9SLCAiQ2Fubm90 ICVzICVzIHByb3BlcnR5ICVzOjokJXMgZnJvbSBjb250ZXh0ICclcyciLCB6ZW5kX2FjY2Vzc29y X3R5cGVfc3RyaW5nKGZiYy0+b3BfYXJyYXkuZm5fZmxhZ3MpLCB6ZW5kX3Zpc2liaWxpdHlfc3Ry aW5nKGZiYy0+Y29tbW9uLmZuX2ZsYWdzKSwgWkVORF9GTl9TQ09QRV9OQU1FKGZiYyksIFpFTkRf QUNDX05BTUUoZmJjKSwgRUcoc2NvcGUpID8gRUcoc2NvcGUpLT5uYW1lIDogIiIpOworCQkJCX0g ZWxzZSB7CiAJCQkJemVuZF9lcnJvcl9ub3JldHVybihFX0VSUk9SLCAiQ2FsbCB0byAlcyBtZXRo b2QgJXM6OiVzKCkgZnJvbSBjb250ZXh0ICclcyciLCB6ZW5kX3Zpc2liaWxpdHlfc3RyaW5nKGZi Yy0+Y29tbW9uLmZuX2ZsYWdzKSwgWkVORF9GTl9TQ09QRV9OQU1FKGZiYyksIG1ldGhvZF9uYW1l LCBFRyhzY29wZSkgPyBFRyhzY29wZSktPm5hbWUgOiAiIik7CiAJCQl9CiAJCX0KKwkJfQogCX0g ZWxzZSB7CiAJCS8qIEVuc3VyZSB0aGF0IHdlIGhhdmVuJ3Qgb3ZlcnJpZGRlbiBhIHByaXZhdGUg ZnVuY3Rpb24gYW5kIGVuZCB1cCBjYWxsaW5nCiAJCSAqIHRoZSBvdmVycmlkaW5nIHB1YmxpYyBm dW5jdGlvbi4uLgpAQCAtMTA1MiwxMSArMTEyNCwxNSBAQAogCQkJCWlmICh6b2JqLT5jZS0+X19j YWxsKSB7CiAJCQkJCWZiYyA9IHplbmRfZ2V0X3VzZXJfY2FsbF9mdW5jdGlvbih6b2JqLT5jZSwg bWV0aG9kX25hbWUsIG1ldGhvZF9sZW4pOwogCQkJCX0gZWxzZSB7CisJCQkJCWlmKGZiYy0+b3Bf YXJyYXkuZm5fZmxhZ3MgJiBaRU5EX0FDQ19JU19BQ0NFU1NPUikgeworCQkJCQkJemVuZF9lcnJv cl9ub3JldHVybihFX0VSUk9SLCAiQ2Fubm90ICVzICVzIHByb3BlcnR5ICVzOjokJXMgZnJvbSBj b250ZXh0ICclcyciLCB6ZW5kX2FjY2Vzc29yX3R5cGVfc3RyaW5nKGZiYy0+Y29tbW9uLmZuX2Zs YWdzKSwgemVuZF92aXNpYmlsaXR5X3N0cmluZyhmYmMtPmNvbW1vbi5mbl9mbGFncyksIFpFTkRf Rk5fU0NPUEVfTkFNRShmYmMpLCBaRU5EX0FDQ19OQU1FKGZiYyksIEVHKHNjb3BlKSA/IEVHKHNj b3BlKS0+bmFtZSA6ICIiKTsKKwkJCQkJfSBlbHNlIHsKIAkJCQkJemVuZF9lcnJvcl9ub3JldHVy bihFX0VSUk9SLCAiQ2FsbCB0byAlcyBtZXRob2QgJXM6OiVzKCkgZnJvbSBjb250ZXh0ICclcyci LCB6ZW5kX3Zpc2liaWxpdHlfc3RyaW5nKGZiYy0+Y29tbW9uLmZuX2ZsYWdzKSwgWkVORF9GTl9T Q09QRV9OQU1FKGZiYyksIG1ldGhvZF9uYW1lLCBFRyhzY29wZSkgPyBFRyhzY29wZSktPm5hbWUg OiAiIik7CiAJCQkJfQogCQkJfQogCQl9CiAJfQorCX0KIAogCWlmIChVTkVYUEVDVEVEKCFrZXkp KSB7CiAJCWZyZWVfYWxsb2NhKGxjX21ldGhvZF9uYW1lLCB1c2VfaGVhcCk7CkBAIC0xMTkzLDkg KzEyNjksMTMgQEAKIAkJCWlmIChjZS0+X19jYWxsc3RhdGljKSB7CiAJCQkJZmJjID0gemVuZF9n ZXRfdXNlcl9jYWxsc3RhdGljX2Z1bmN0aW9uKGNlLCBmdW5jdGlvbl9uYW1lX3N0cnZhbCwgZnVu Y3Rpb25fbmFtZV9zdHJsZW4pOwogCQkJfSBlbHNlIHsKKwkJCQlpZihmYmMtPm9wX2FycmF5LmZu X2ZsYWdzICYgWkVORF9BQ0NfSVNfQUNDRVNTT1IpIHsKKwkJCQkJemVuZF9lcnJvcl9ub3JldHVy bihFX0VSUk9SLCAiQ2Fubm90ICVzICVzIHByb3BlcnR5ICVzOjokJXMgZnJvbSBjb250ZXh0ICcl cyciLCB6ZW5kX2FjY2Vzc29yX3R5cGVfc3RyaW5nKGZiYy0+Y29tbW9uLmZuX2ZsYWdzKSwgemVu ZF92aXNpYmlsaXR5X3N0cmluZyhmYmMtPmNvbW1vbi5mbl9mbGFncyksIFpFTkRfRk5fU0NPUEVf TkFNRShmYmMpLCBaRU5EX0FDQ19OQU1FKGZiYyksIEVHKHNjb3BlKSA/IEVHKHNjb3BlKS0+bmFt ZSA6ICIiKTsKKwkJCQl9IGVsc2UgewogCQkJCXplbmRfZXJyb3Jfbm9yZXR1cm4oRV9FUlJPUiwg IkNhbGwgdG8gJXMgbWV0aG9kICVzOjolcygpIGZyb20gY29udGV4dCAnJXMnIiwgemVuZF92aXNp YmlsaXR5X3N0cmluZyhmYmMtPmNvbW1vbi5mbl9mbGFncyksIFpFTkRfRk5fU0NPUEVfTkFNRShm YmMpLCBmdW5jdGlvbl9uYW1lX3N0cnZhbCwgRUcoc2NvcGUpID8gRUcoc2NvcGUpLT5uYW1lIDog IiIpOwogCQkJfQogCQl9CisJCX0KIAl9IGVsc2UgaWYgKChmYmMtPmNvbW1vbi5mbl9mbGFncyAm IFpFTkRfQUNDX1BST1RFQ1RFRCkpIHsKIAkJLyogRW5zdXJlIHRoYXQgaWYgd2UncmUgY2FsbGlu ZyBhIHByb3RlY3RlZCBmdW5jdGlvbiwgd2UncmUgYWxsb3dlZCB0byBkbyBzby4KIAkJICovCkBA IC0xMjAzLDEwICsxMjgzLDE0IEBACiAJCQlpZiAoY2UtPl9fY2FsbHN0YXRpYykgewogCQkJCWZi YyA9IHplbmRfZ2V0X3VzZXJfY2FsbHN0YXRpY19mdW5jdGlvbihjZSwgZnVuY3Rpb25fbmFtZV9z dHJ2YWwsIGZ1bmN0aW9uX25hbWVfc3RybGVuKTsKIAkJCX0gZWxzZSB7CisJCQkJaWYoZmJjLT5v cF9hcnJheS5mbl9mbGFncyAmIFpFTkRfQUNDX0lTX0FDQ0VTU09SKSB7CisJCQkJCXplbmRfZXJy b3Jfbm9yZXR1cm4oRV9FUlJPUiwgIkNhbm5vdCAlcyAlcyBwcm9wZXJ0eSAlczo6JCVzIGZyb20g Y29udGV4dCAnJXMnIiwgemVuZF9hY2Nlc3Nvcl90eXBlX3N0cmluZyhmYmMtPmNvbW1vbi5mbl9m bGFncyksIHplbmRfdmlzaWJpbGl0eV9zdHJpbmcoZmJjLT5jb21tb24uZm5fZmxhZ3MpLCBaRU5E X0ZOX1NDT1BFX05BTUUoZmJjKSwgWkVORF9BQ0NfTkFNRShmYmMpLCBFRyhzY29wZSkgPyBFRyhz Y29wZSktPm5hbWUgOiAiIik7CisJCQkJfSBlbHNlIHsKIAkJCQl6ZW5kX2Vycm9yX25vcmV0dXJu KEVfRVJST1IsICJDYWxsIHRvICVzIG1ldGhvZCAlczo6JXMoKSBmcm9tIGNvbnRleHQgJyVzJyIs IHplbmRfdmlzaWJpbGl0eV9zdHJpbmcoZmJjLT5jb21tb24uZm5fZmxhZ3MpLCBaRU5EX0ZOX1ND T1BFX05BTUUoZmJjKSwgZnVuY3Rpb25fbmFtZV9zdHJ2YWwsIEVHKHNjb3BlKSA/IEVHKHNjb3Bl KS0+bmFtZSA6ICIiKTsKIAkJCX0KIAkJfQogCX0KKwl9CiAKIAlpZiAoVU5FWFBFQ1RFRCgha2V5 KSkgewogCQlmcmVlX2FsbG9jYShsY19mdW5jdGlvbl9uYW1lLCB1c2VfaGVhcCk7CkBAIC0xNDEy LDkgKzE0OTYsMTIgQEAKIAkJCQlyZXN1bHQgPSB6ZW5kX2lzX3RydWUocnYpOwogCQkJCXp2YWxf cHRyX2R0b3IoJnJ2KTsKIAkJCQlpZiAoaGFzX3NldF9leGlzdHMgJiYgcmVzdWx0KSB7Ci0JCQkJ CWlmIChFWFBFQ1RFRCghRUcoZXhjZXB0aW9uKSkgJiYgem9iai0+Y2UtPl9fZ2V0ICYmICFndWFy ZC0+aW5fZ2V0KSB7CisJCQkJCisJCQkJCXplbmRfZnVuY3Rpb24gCQkqZ2V0dGVyID0gemVuZF9s b2NhdGVfZ2V0dGVyKG9iamVjdCwgbWVtYmVyLCBrZXkgVFNSTUxTX0NDKTsKKworCQkJCQlpZiAo RVhQRUNURUQoIUVHKGV4Y2VwdGlvbikpICYmIGdldHRlciAmJiAhZ3VhcmQtPmluX2dldCkgewog CQkJCQkJZ3VhcmQtPmluX2dldCA9IDE7Ci0JCQkJCQlydiA9IHplbmRfc3RkX2NhbGxfZ2V0dGVy KG9iamVjdCwgbWVtYmVyIFRTUk1MU19DQyk7CisJCQkJCQlydiA9IHplbmRfc3RkX2NhbGxfZ2V0 dGVyKG9iamVjdCwgbWVtYmVyLCBnZXR0ZXIgVFNSTUxTX0NDKTsKIAkJCQkJCWd1YXJkLT5pbl9n ZXQgPSAwOwogCQkJCQkJaWYgKHJ2KSB7CiAJCQkJCQkJWl9BRERSRUZfUChydik7CkluZGV4OiBa ZW5kL3plbmRfb2JqZWN0X2hhbmRsZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gWmVuZC96ZW5kX29iamVj dF9oYW5kbGVycy5oCShyZXZpc2lvbiAzMjQ0MzkpCisrKyBaZW5kL3plbmRfb2JqZWN0X2hhbmRs ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsNyBAQAogWkVORF9BUEkgSGFzaFRh YmxlICp6ZW5kX3N0ZF9nZXRfZGVidWdfaW5mbyh6dmFsICpvYmplY3QsIGludCAqaXNfdGVtcCBU U1JNTFNfREMpOwogWkVORF9BUEkgaW50IHplbmRfc3RkX2Nhc3Rfb2JqZWN0X3Rvc3RyaW5nKHp2 YWwgKnJlYWRvYmosIHp2YWwgKndyaXRlb2JqLCBpbnQgdHlwZSBUU1JNTFNfREMpOwogWkVORF9B UEkgdm9pZCB6ZW5kX3N0ZF93cml0ZV9wcm9wZXJ0eSh6dmFsICpvYmplY3QsIHp2YWwgKm1lbWJl ciwgenZhbCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBfemVuZF9saXRlcmFsICprZXkgVFNSTUxTX0RD KTsKK1pFTkRfQVBJIHp2YWwgKnplbmRfc3RkX3JlYWRfcHJvcGVydHkoenZhbCAqb2JqZWN0LCB6 dmFsICptZW1iZXIsIGludCB0eXBlLCBjb25zdCBzdHJ1Y3QgX3plbmRfbGl0ZXJhbCAqa2V5IFRT Uk1MU19EQyk7CiBaRU5EX0FQSSB2b2lkIHJlYnVpbGRfb2JqZWN0X3Byb3BlcnRpZXMoemVuZF9v YmplY3QgKnpvYmopOwogCiAKSW5kZXg6IFplbmQvemVuZF9vcGNvZGUuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBaZW5kL3plbmRfb3Bjb2RlLmMJKHJldmlzaW9uIDMyNDQzOSkKKysrIFplbmQvemVuZF9vcGNv ZGUuYwkod29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCwxNCBAQAogCWRlc3Ryb3lfemVuZF9m dW5jdGlvbihmdW5jdGlvbiBUU1JNTFNfQ0MpOwogfQogCitaRU5EX0FQSSB2b2lkIHplbmRfYWNj ZXNzb3JfZHRvcih6ZW5kX2FjY2Vzc29yX2luZm8gKiphaSkKK3sKKwlpZigoKmFpKS0+ZG9jX2Nv bW1lbnQpIHsKKwkJZWZyZWUoKHZvaWQqKSgqYWkpLT5kb2NfY29tbWVudCk7CisJfQorCWVmcmVl KCphaSk7Cit9CisKIHN0YXRpYyB2b2lkIHplbmRfY2xlYW51cF9vcF9hcnJheV9kYXRhKHplbmRf b3BfYXJyYXkgKm9wX2FycmF5KQogewogCWlmIChvcF9hcnJheS0+c3RhdGljX3ZhcmlhYmxlcykg ewpAQCAtMjkxLDYgKzI5OSw3IEBACiAJCQkJZWZyZWUoY2UtPmRlZmF1bHRfc3RhdGljX21lbWJl cnNfdGFibGUpOwogCQkJfQogCQkJemVuZF9oYXNoX2Rlc3Ryb3koJmNlLT5wcm9wZXJ0aWVzX2lu Zm8pOworCQkJemVuZF9oYXNoX2Rlc3Ryb3koJmNlLT5hY2Nlc3NvcnMpOwogCQkJc3RyX2VmcmVl KGNlLT5uYW1lKTsKIAkJCXplbmRfaGFzaF9kZXN0cm95KCZjZS0+ZnVuY3Rpb25fdGFibGUpOwog CQkJemVuZF9oYXNoX2Rlc3Ryb3koJmNlLT5jb25zdGFudHNfdGFibGUpOwo= --_004_9570D903A3BECE4092E924C2985CE485517221FDMBX201domainloc_--