Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:64031 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 97689 invoked from network); 21 Nov 2012 22:18:46 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 21 Nov 2012 22:18:46 -0000 Authentication-Results: pb1.pair.com smtp.mail=dmitry@zend.com; spf=unknown; sender-id=unknown Authentication-Results: pb1.pair.com header.from=dmitry@zend.com; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain zend.com does not designate 209.85.219.42 as permitted sender) X-PHP-List-Original-Sender: dmitry@zend.com X-Host-Fingerprint: 209.85.219.42 mail-oa0-f42.google.com Received: from [209.85.219.42] ([209.85.219.42:42547] helo=mail-oa0-f42.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 12/00-20662-4435DA05 for ; Wed, 21 Nov 2012 17:18:46 -0500 Received: by mail-oa0-f42.google.com with SMTP id j1so8059408oag.29 for ; Wed, 21 Nov 2012 14:18:42 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :x-gm-message-state; bh=0hZn3W3Hr+pl5cV8e/Nmd7gKQXjyLp0/HgkyHLHhj3I=; b=b/RLACfqb76DQ0Z+f0SYc7nKnlEhCLiKimi0XOWo4CxnFjOEzAklxRq5aKjHPL06yU 6FdqlvZzeqLRvn6jtN11hmxMemShIwbgAMts8BmReK8GQr76mg66PdH3/ujiQ5NWQvaH 9ImEpDSgFT7lV3+4n1AScB26E/i21oDv5riKOAgG7IbfrwYCNTkc29zNczbTRyVWY/Un GstCMvtNtQz95eQ+NlNVxsSPHY0uoTR/LGPfRgSoABmIpmypjKpmfeQ4OOCnH1ZGi0pz Yx0gayNg2ig9kRYPUqk2TcgsfH2Kt/RS9ZP9AEGabJC7kqdwlMaVIezuAbq87EutHmbf J2TA== MIME-Version: 1.0 Received: by 10.182.43.104 with SMTP id v8mr14699714obl.98.1353536321982; Wed, 21 Nov 2012 14:18:41 -0800 (PST) Received: by 10.182.214.106 with HTTP; Wed, 21 Nov 2012 14:18:41 -0800 (PST) Date: Thu, 22 Nov 2012 01:18:41 +0300 Message-ID: To: Xinchen Hui , Xinchen Hui , PHP Internals Content-Type: multipart/mixed; boundary=f46d04479633a991ea04cf08bb60 X-Gm-Message-State: ALoCoQkdTGvrwBinKy0imBxOOtOtpU2DXFG3qCXdmsmtSiGYtIf8bYuA9qKZsV7jdrAYQtJD7ifC+PHrh2aVGHk9y9pRul3atrIKVb85UXxYs4amoIMvVzHjjtMX7u3PxRpUzU8AmajB Subject: "finally" implementation improvement (behaviour must be the same) From: dmitry@zend.com (Dmitry Stogov) --f46d04479633a991ea04cf08bb60 Content-Type: multipart/alternative; boundary=f46d04479633a991e604cf08bb5e --f46d04479633a991e604cf08bb5e Content-Type: text/plain; charset=UTF-8 Hi Laruence, Please take a look into the "finally" improvement patch. It resolves most the jump addresses at compile time and makes executor cleaner and faster. Attached the patch for PHP 5.5 (it requires zend_vm_execute.h regeneration). Thanks. Dmitry. --f46d04479633a991e604cf08bb5e Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Laruence,

Please take a look into the "finally" improve= ment patch.
It resolves most the jump addresses at compile time and make= s executor cleaner and faster.

Attached the patch for PHP 5.5 (it re= quires zend_vm_execute.h regeneration).

Thanks. Dmitry.
--f46d04479633a991e604cf08bb5e-- --f46d04479633a991ea04cf08bb60 Content-Type: text/plain; charset=US-ASCII; name="finally.diff.txt" Content-Disposition: attachment; filename="finally.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h9t0ie4m0 ZGlmZiAtLWdpdCBhL1plbmQvemVuZF9jb21waWxlLmMgYi9aZW5kL3plbmRfY29tcGlsZS5jCmlu ZGV4IGM5NzE0ZTUuLmZjNmI2MjMgMTAwNjQ0Ci0tLSBhL1plbmQvemVuZF9jb21waWxlLmMKKysr IGIvWmVuZC96ZW5kX2NvbXBpbGUuYwpAQCAtMjcwOSw2ICsyNzA5LDcgQEAgc3RhdGljIGludCB6 ZW5kX2FkZF90cnlfZWxlbWVudCh6ZW5kX3VpbnQgdHJ5X29wIFRTUk1MU19EQykgLyoge3t7ICov CiAKIAlDRyhhY3RpdmVfb3BfYXJyYXkpLT50cnlfY2F0Y2hfYXJyYXkgPSBlcmVhbGxvYyhDRyhh Y3RpdmVfb3BfYXJyYXkpLT50cnlfY2F0Y2hfYXJyYXksIHNpemVvZih6ZW5kX3RyeV9jYXRjaF9l bGVtZW50KSpDRyhhY3RpdmVfb3BfYXJyYXkpLT5sYXN0X3RyeV9jYXRjaCk7CiAJQ0coYWN0aXZl X29wX2FycmF5KS0+dHJ5X2NhdGNoX2FycmF5W3RyeV9jYXRjaF9vZmZzZXRdLnRyeV9vcCA9IHRy eV9vcDsKKwlDRyhhY3RpdmVfb3BfYXJyYXkpLT50cnlfY2F0Y2hfYXJyYXlbdHJ5X2NhdGNoX29m ZnNldF0uY2F0Y2hfb3AgPSAwOwogCUNHKGFjdGl2ZV9vcF9hcnJheSktPnRyeV9jYXRjaF9hcnJh eVt0cnlfY2F0Y2hfb2Zmc2V0XS5maW5hbGx5X29wID0gMDsKIAlDRyhhY3RpdmVfb3BfYXJyYXkp LT50cnlfY2F0Y2hfYXJyYXlbdHJ5X2NhdGNoX29mZnNldF0uZmluYWxseV9lbmQgPSAwOwogCXJl dHVybiB0cnlfY2F0Y2hfb2Zmc2V0OwpAQCAtMjc3MCw5ICsyNzcxLDI1IEBAIHZvaWQgemVuZF9k b190cnkoem5vZGUgKnRyeV90b2tlbiBUU1JNTFNfREMpIC8qIHt7eyAqLwogfQogLyogfX19ICov CiAKLXZvaWQgemVuZF9kb19maW5hbGx5KHpub2RlICpmaW5hbGx5X3Rva2VuIFRTUk1MU19EQykg Lyoge3t7ICovIHsKK3ZvaWQgemVuZF9kb19maW5hbGx5KHpub2RlICpmaW5hbGx5X3Rva2VuIFRT Uk1MU19EQykgLyoge3t7ICovCit7CisJemVuZF9vcCAqb3BsaW5lID0gZ2V0X25leHRfb3AoQ0co YWN0aXZlX29wX2FycmF5KSk7CisKIAlmaW5hbGx5X3Rva2VuLT51Lm9wLm9wbGluZV9udW0gPSBn ZXRfbmV4dF9vcF9udW1iZXIoQ0coYWN0aXZlX29wX2FycmF5KSk7Ci19IC8qIH19fSAqLworCS8q IGNhbGwgdGhlIHRoZSAiZmluYWxseSIgYmxvY2sgKi8KKwlvcGxpbmUtPm9wY29kZSA9IFpFTkRf RkFTVF9DQUxMOworCVNFVF9VTlVTRUQob3BsaW5lLT5vcDEpOworCW9wbGluZS0+b3AxLm9wbGlu ZV9udW0gPSBmaW5hbGx5X3Rva2VuLT51Lm9wLm9wbGluZV9udW0gKyAxOworCVNFVF9VTlVTRUQo b3BsaW5lLT5vcDIpOworCS8qIGp1bXAgdG8gY29kZSBhZnRlciB0aGUgImZpbmFsbHkiIGJsb2Nr LAorCSAqIHRoZSBhY3R1YWwganVtcCBhZGRyZXNzIGlzIGdvaW5nIHRvIGJlIHNldCBpbiB6ZW5k X2RvX2VuZF9maW5hbGx5KCkKKwkgKi8KKwlvcGxpbmUgPSBnZXRfbmV4dF9vcChDRyhhY3RpdmVf b3BfYXJyYXkpKTsKKwlvcGxpbmUtPm9wY29kZSA9IFpFTkRfSk1QOworCVNFVF9VTlVTRUQob3Bs aW5lLT5vcDEpOworCVNFVF9VTlVTRUQob3BsaW5lLT5vcDIpOworfQorLyogfX19ICovCiAKIHZv aWQgemVuZF9kb19iZWdpbl9jYXRjaCh6bm9kZSAqY2F0Y2hfdG9rZW4sIHpub2RlICpjbGFzc19u YW1lLCB6bm9kZSAqY2F0Y2hfdmFyLCB6bm9kZSAqZmlyc3RfY2F0Y2ggVFNSTUxTX0RDKSAvKiB7 e3sgKi8KIHsKQEAgLTI4MzcsMTggKzI4NTQsMTkgQEAgdm9pZCB6ZW5kX2RvX2VuZF9maW5hbGx5 KHpub2RlICp0cnlfdG9rZW4sIHpub2RlKiBjYXRjaF90b2tlbiwgem5vZGUgKmZpbmFsbHlfdG8K IAkJemVuZF9lcnJvcihFX0NPTVBJTEVfRVJST1IsICJDYW5ub3QgdXNlIHRyeSB3aXRob3V0IGNh dGNoIG9yIGZpbmFsbHkiKTsKIAl9IAogCWlmIChmaW5hbGx5X3Rva2VuLT5vcF90eXBlICE9IElT X1VOVVNFRCkgewotCQl6ZW5kX29wICpvcGxpbmUgPSBnZXRfbmV4dF9vcChDRyhhY3RpdmVfb3Bf YXJyYXkpIFRTUk1MU19DQyk7Ci0JCUNHKGFjdGl2ZV9vcF9hcnJheSktPnRyeV9jYXRjaF9hcnJh eVt0cnlfdG9rZW4tPnUub3Aub3BsaW5lX251bV0uZmluYWxseV9vcCA9IGZpbmFsbHlfdG9rZW4t PnUub3Aub3BsaW5lX251bTsKKwkJemVuZF9vcCAqb3BsaW5lOworCQkKKwkJQ0coYWN0aXZlX29w X2FycmF5KS0+dHJ5X2NhdGNoX2FycmF5W3RyeV90b2tlbi0+dS5vcC5vcGxpbmVfbnVtXS5maW5h bGx5X29wID0gZmluYWxseV90b2tlbi0+dS5vcC5vcGxpbmVfbnVtICsgMTsKIAkJQ0coYWN0aXZl X29wX2FycmF5KS0+dHJ5X2NhdGNoX2FycmF5W3RyeV90b2tlbi0+dS5vcC5vcGxpbmVfbnVtXS5m aW5hbGx5X2VuZCA9IGdldF9uZXh0X29wX251bWJlcihDRyhhY3RpdmVfb3BfYXJyYXkpKTsKIAkJ Q0coYWN0aXZlX29wX2FycmF5KS0+aGFzX2ZpbmFsbHlfYmxvY2sgPSAxOwogCi0JCW9wbGluZS0+ b3Bjb2RlID0gWkVORF9MRUFWRTsKKwkJb3BsaW5lID0gZ2V0X25leHRfb3AoQ0coYWN0aXZlX29w X2FycmF5KSBUU1JNTFNfQ0MpOworCQlvcGxpbmUtPm9wY29kZSA9IFpFTkRfRkFTVF9SRVQ7CiAJ CVNFVF9VTlVTRUQob3BsaW5lLT5vcDEpOwogCQlTRVRfVU5VU0VEKG9wbGluZS0+b3AyKTsKKwkJ CisJCUNHKGFjdGl2ZV9vcF9hcnJheSktPm9wY29kZXNbZmluYWxseV90b2tlbi0+dS5vcC5vcGxp bmVfbnVtXS5vcDEub3BsaW5lX251bSA9IGdldF9uZXh0X29wX251bWJlcihDRyhhY3RpdmVfb3Bf YXJyYXkpIFRTUk1MU19DQyk7CiAJfSAKLQlpZiAoY2F0Y2hfdG9rZW4tPm9wX3R5cGUgPT0gSVNf VU5VU0VEKSB7Ci0JCUNHKGFjdGl2ZV9vcF9hcnJheSktPnRyeV9jYXRjaF9hcnJheVt0cnlfdG9r ZW4tPnUub3Aub3BsaW5lX251bV0uY2F0Y2hfb3AgPSAwOwotCX0KIH0KIC8qIH19fSAqLwogCmRp ZmYgLS1naXQgYS9aZW5kL3plbmRfY29tcGlsZS5oIGIvWmVuZC96ZW5kX2NvbXBpbGUuaAppbmRl eCA3NzgwOWRhLi5lNDZjMWEzIDEwMDY0NAotLS0gYS9aZW5kL3plbmRfY29tcGlsZS5oCisrKyBi L1plbmQvemVuZF9jb21waWxlLmgKQEAgLTM4Nyw4ICszODcsNyBAQCBzdHJ1Y3QgX3plbmRfZXhl Y3V0ZV9kYXRhIHsKIAl6ZW5kX2NsYXNzX2VudHJ5ICpjdXJyZW50X2NhbGxlZF9zY29wZTsKIAl6 dmFsICpjdXJyZW50X3RoaXM7CiAJenZhbCAqY3VycmVudF9vYmplY3Q7Ci0JemVuZF91aW50IGxl YXZpbmc7Ci0JemVuZF91aW50IGxlYXZpbmdfZGVzdDsKKwlzdHJ1Y3QgX3plbmRfb3AgKmZhc3Rf cmV0OyAvKiB1c2VkIGJ5IEZBU1RfQ0FMTC9GQVNUX1JFVCAoZmluYWxseSBrZXl3b3JkKSAqLwog fTsKIAogI2RlZmluZSBFWChlbGVtZW50KSBleGVjdXRlX2RhdGEuZWxlbWVudApAQCAtODI2LDYg KzgyNSw5IEBAIGludCB6ZW5kX2FkZF9saXRlcmFsKHplbmRfb3BfYXJyYXkgKm9wX2FycmF5LCBj b25zdCB6dmFsICp6diBUU1JNTFNfREMpOwogI2RlZmluZSBaRU5EX1JFVFVSTlNfRlVOQ1RJT04g MTw8MAogI2RlZmluZSBaRU5EX1JFVFVSTlNfTkVXICAgICAgMTw8MQogCisjZGVmaW5lIFpFTkRf RkFTVF9SRVRfVE9fQ0FUQ0gJCTEKKyNkZWZpbmUgWkVORF9GQVNUX1JFVF9UT19GSU5BTExZCTIK KwogRU5EX0VYVEVSTl9DKCkKIAogI2RlZmluZSBaRU5EX0NMT05FX0ZVTkNfTkFNRQkJIl9fY2xv bmUiCmRpZmYgLS1naXQgYS9aZW5kL3plbmRfZ2VuZXJhdG9ycy5jIGIvWmVuZC96ZW5kX2dlbmVy YXRvcnMuYwppbmRleCA4N2YwNjQ0Li41MTZmZjBiIDEwMDY0NAotLS0gYS9aZW5kL3plbmRfZ2Vu ZXJhdG9ycy5jCisrKyBiL1plbmQvemVuZF9nZW5lcmF0b3JzLmMKQEAgLTYwLDcgKzYwLDYgQEAg dm9pZCB6ZW5kX2dlbmVyYXRvcl9jbG9zZSh6ZW5kX2dlbmVyYXRvciAqZ2VuZXJhdG9yLCB6ZW5k X2Jvb2wgZmluaXNoZWRfZXhlY3V0aW8KIAkJCQkgKiB0aGUgcmVzdW1lLiAqLwogCQkJCWlmIChm aW5hbGx5X29wX251bSkgewogCQkJCQlleGVjdXRlX2RhdGEtPm9wbGluZSA9ICZvcF9hcnJheS0+ b3Bjb2Rlc1tmaW5hbGx5X29wX251bV07Ci0JCQkJCWV4ZWN1dGVfZGF0YS0+bGVhdmluZyA9IFpF TkRfUkVUVVJOOwogCQkJCQlnZW5lcmF0b3ItPmZsYWdzIHw9IFpFTkRfR0VORVJBVE9SX0ZPUkNF RF9DTE9TRTsKIAkJCQkJemVuZF9nZW5lcmF0b3JfcmVzdW1lKGdlbmVyYXRvciBUU1JNTFNfQ0Mp OwogCQkJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9aZW5kL3plbmRfb3Bjb2RlLmMgYi9aZW5kL3pl bmRfb3Bjb2RlLmMKaW5kZXggMjI0YzdhMi4uNGU1NTg1OSAxMDA2NDQKLS0tIGEvWmVuZC96ZW5k X29wY29kZS5jCisrKyBiL1plbmQvemVuZF9vcGNvZGUuYwpAQCAtNDk5LDI0ICs0OTksMTYxIEBA IHN0YXRpYyB2b2lkIHplbmRfZXh0ZW5zaW9uX29wX2FycmF5X2hhbmRsZXIoemVuZF9leHRlbnNp b24gKmV4dGVuc2lvbiwgemVuZF9vcF9hCiAJfQogfQogCi1zdGF0aWMgdm9pZCB6ZW5kX2NoZWNr X2ZpbmFsbHlfYnJlYWtvdXQoemVuZF9vcF9hcnJheSAqb3BfYXJyYXksIHplbmRfb3AgKm9wbGlu ZSwgemVuZF91aW50IGRzdF9udW0gVFNSTUxTX0RDKSB7Ci0JemVuZF91aW50IGksIG9wX251bSA9 IG9wbGluZSAtIG9wX2FycmF5LT5vcGNvZGVzOwotCWZvciAoaT0wOyBpIDwgb3BfYXJyYXktPmxh c3RfdHJ5X2NhdGNoOyBpKyspIHsKK3N0YXRpYyB2b2lkIHplbmRfY2hlY2tfZmluYWxseV9icmVh a291dCh6ZW5kX29wX2FycmF5ICpvcF9hcnJheSwgemVuZF91aW50IG9wX251bSwgemVuZF91aW50 IGRzdF9udW0gVFNSTUxTX0RDKQoreworCXplbmRfdWludCBpOworCisJZm9yIChpID0gMDsgaSA8 IG9wX2FycmF5LT5sYXN0X3RyeV9jYXRjaDsgaSsrKSB7CiAJCWlmIChvcF9hcnJheS0+dHJ5X2Nh dGNoX2FycmF5W2ldLnRyeV9vcCA+IG9wX251bSkgewogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKChv cF9udW0gPj0gb3BfYXJyYXktPnRyeV9jYXRjaF9hcnJheVtpXS5maW5hbGx5X29wIAotCQkJCQkm JiBvcF9udW0gPCBvcF9hcnJheS0+dHJ5X2NhdGNoX2FycmF5W2ldLmZpbmFsbHlfZW5kKQotCQkJ CSYmIChkc3RfbnVtID49IG9wX2FycmF5LT50cnlfY2F0Y2hfYXJyYXlbaV0uZmluYWxseV9lbmQg CisJCQkJCSYmIG9wX251bSA8PSBvcF9hcnJheS0+dHJ5X2NhdGNoX2FycmF5W2ldLmZpbmFsbHlf ZW5kKQorCQkJCSYmIChkc3RfbnVtID4gb3BfYXJyYXktPnRyeV9jYXRjaF9hcnJheVtpXS5maW5h bGx5X2VuZCAKIAkJCQkJfHwgZHN0X251bSA8IG9wX2FycmF5LT50cnlfY2F0Y2hfYXJyYXlbaV0u ZmluYWxseV9vcCkpIHsKIAkJCUNHKGluX2NvbXBpbGF0aW9uKSA9IDE7CiAJCQlDRyhhY3RpdmVf b3BfYXJyYXkpID0gb3BfYXJyYXk7Ci0JCQlDRyh6ZW5kX2xpbmVubykgPSBvcGxpbmUtPmxpbmVu bzsKKwkJCUNHKHplbmRfbGluZW5vKSA9IG9wX2FycmF5LT5vcGNvZGVzW29wX251bV0ubGluZW5v OwogCQkJemVuZF9lcnJvcihFX0NPTVBJTEVfRVJST1IsICJqdW1wIG91dCBvZiBhIGZpbmFsbHkg YmxvY2sgaXMgZGlzYWxsb3dlZCIpOwogCQl9CiAJfSAKIH0KIAorc3RhdGljIHZvaWQgemVuZF9y ZXNvbHZlX2ZpbmFsbHlfY2FsbCh6ZW5kX29wX2FycmF5ICpvcF9hcnJheSwgemVuZF91aW50IG9w X251bSwgemVuZF91aW50IGRzdF9udW0gVFNSTUxTX0RDKQoreworCXplbmRfdWludCBzdGFydF9v cDsKKwl6ZW5kX29wICpvcGxpbmU7CisJemVuZF91aW50IGkgPSBvcF9hcnJheS0+bGFzdF90cnlf Y2F0Y2g7CisKKwlpZiAoZHN0X251bSAhPSAoemVuZF91aW50KS0xKSB7CisJCXplbmRfY2hlY2tf ZmluYWxseV9icmVha291dChvcF9hcnJheSwgb3BfbnVtLCBkc3RfbnVtIFRTUk1MU19DQyk7CisJ fQorCXdoaWxlIChpID4gMCkgeworCQlpLS07CisJCWlmIChvcF9hcnJheS0+dHJ5X2NhdGNoX2Fy cmF5W2ldLmZpbmFsbHlfb3AgJiYKKwkJICAgIG9wX251bSA+PSBvcF9hcnJheS0+dHJ5X2NhdGNo X2FycmF5W2ldLnRyeV9vcCAmJgorCQkgICAgb3BfbnVtIDwgb3BfYXJyYXktPnRyeV9jYXRjaF9h cnJheVtpXS5maW5hbGx5X29wIC0gMSAmJgorCQkgICAgKGRzdF9udW0gPCBvcF9hcnJheS0+dHJ5 X2NhdGNoX2FycmF5W2ldLnRyeV9vcCB8fAorCQkgICAgIGRzdF9udW0gPiBvcF9hcnJheS0+dHJ5 X2NhdGNoX2FycmF5W2ldLmZpbmFsbHlfZW5kKSkgeworCisJCSAgICBzdGFydF9vcCA9IGdldF9u ZXh0X29wX251bWJlcihvcF9hcnJheSBUU1JNTFNfQ0MpOworCQkJb3BsaW5lID0gZ2V0X25leHRf b3Aob3BfYXJyYXkgVFNSTUxTX0NDKTsKKwkJCW9wbGluZS0+b3Bjb2RlID0gWkVORF9GQVNUX0NB TEw7CisJCQlTRVRfVU5VU0VEKG9wbGluZS0+b3AxKTsKKwkJCVNFVF9VTlVTRUQob3BsaW5lLT5v cDIpOworCQkJb3BsaW5lLT5vcDEub3BsaW5lX251bSA9IG9wX2FycmF5LT50cnlfY2F0Y2hfYXJy YXlbaV0uZmluYWxseV9vcDsKKwkJCWlmIChvcF9hcnJheS0+dHJ5X2NhdGNoX2FycmF5W2ldLmNh dGNoX29wKSB7CisJCQkJb3BsaW5lLT5leHRlbmRlZF92YWx1ZSA9IDE7CisJCQkJb3BsaW5lLT5v cDIub3BsaW5lX251bSA9IG9wX2FycmF5LT50cnlfY2F0Y2hfYXJyYXlbaV0uY2F0Y2hfb3A7CisJ CQl9CisKKwkJCXdoaWxlIChpID4gMCkgeworCQkJCWktLTsKKwkJCQlpZiAob3BfYXJyYXktPnRy eV9jYXRjaF9hcnJheVtpXS5maW5hbGx5X29wICYmCisJCQkJICAgIG9wX251bSA+PSBvcF9hcnJh eS0+dHJ5X2NhdGNoX2FycmF5W2ldLnRyeV9vcCAmJgorCQkJCSAgICBvcF9udW0gPCBvcF9hcnJh eS0+dHJ5X2NhdGNoX2FycmF5W2ldLmZpbmFsbHlfb3AgLSAxICYmCisJCQkJICAgIChkc3RfbnVt IDwgb3BfYXJyYXktPnRyeV9jYXRjaF9hcnJheVtpXS50cnlfb3AgfHwKKwkJCQkgICAgIGRzdF9u dW0gPiBvcF9hcnJheS0+dHJ5X2NhdGNoX2FycmF5W2ldLmZpbmFsbHlfZW5kKSkgeworCQkJCQkK KwkJCQkJb3BsaW5lID0gZ2V0X25leHRfb3Aob3BfYXJyYXkgVFNSTUxTX0NDKTsKKwkJCQkJb3Bs aW5lLT5vcGNvZGUgPSBaRU5EX0ZBU1RfQ0FMTDsKKwkJCQkJU0VUX1VOVVNFRChvcGxpbmUtPm9w MSk7CisJCQkJCVNFVF9VTlVTRUQob3BsaW5lLT5vcDIpOworCQkJCQlvcGxpbmUtPm9wMS5vcGxp bmVfbnVtID0gb3BfYXJyYXktPnRyeV9jYXRjaF9hcnJheVtpXS5maW5hbGx5X29wOworCQkJCX0K KwkJCX0KKworCQkJb3BsaW5lID0gZ2V0X25leHRfb3Aob3BfYXJyYXkgVFNSTUxTX0NDKTsKKwkJ CSpvcGxpbmUgPSBvcF9hcnJheS0+b3Bjb2Rlc1tvcF9udW1dOworCisJCQlvcGxpbmUgPSBvcF9h cnJheS0+b3Bjb2RlcyArIG9wX251bTsKKwkJCW9wbGluZS0+b3Bjb2RlID0gWkVORF9KTVA7CisJ CQlTRVRfVU5VU0VEKG9wbGluZS0+b3AxKTsKKwkJCVNFVF9VTlVTRUQob3BsaW5lLT5vcDIpOwor CQkJb3BsaW5lLT5vcDEub3BsaW5lX251bSA9IHN0YXJ0X29wOworCisJCSAgICBicmVhazsKKwkJ fQorCX0JCit9CisKK3N0YXRpYyB2b2lkIHplbmRfcmVzb2x2ZV9maW5hbGx5X3JldCh6ZW5kX29w X2FycmF5ICpvcF9hcnJheSwgemVuZF91aW50IG9wX251bSBUU1JNTFNfREMpCit7CisJaW50IGk7 CisJemVuZF91aW50IGNhdGNoX29wX251bSA9IDAsIGZpbmFsbHlfb3BfbnVtID0gMDsKKworCWZv ciAoaSA9IDA7IGkgPCBvcF9hcnJheS0+bGFzdF90cnlfY2F0Y2g7IGkrKykgeworCQlpZiAob3Bf YXJyYXktPnRyeV9jYXRjaF9hcnJheVtpXS50cnlfb3AgPiBvcF9udW0pIHsKKwkJCWJyZWFrOwor CQl9CisJCWlmIChvcF9udW0gPCBvcF9hcnJheS0+dHJ5X2NhdGNoX2FycmF5W2ldLmZpbmFsbHlf b3ApIHsKKwkJCWZpbmFsbHlfb3BfbnVtID0gb3BfYXJyYXktPnRyeV9jYXRjaF9hcnJheVtpXS5m aW5hbGx5X29wOworCQl9CisJCWlmIChvcF9udW0gPCBvcF9hcnJheS0+dHJ5X2NhdGNoX2FycmF5 W2ldLmNhdGNoX29wKSB7CisJCQljYXRjaF9vcF9udW0gPSBvcF9hcnJheS0+dHJ5X2NhdGNoX2Fy cmF5W2ldLmNhdGNoX29wOworCQl9CisJfQorCisJaWYgKGZpbmFsbHlfb3BfbnVtICYmICghY2F0 Y2hfb3BfbnVtIHx8IGNhdGNoX29wX251bSA+PSBmaW5hbGx5X29wX251bSkpIHsKKwkJLyogaW4g Y2FzZSBvZiB1bmhhbmRsZWQgZXhjZXB0aW9uIHJldHVybiB0byB1cHdhcmQgZmluYWxseSBibG9j ayAqLworCQlvcF9hcnJheS0+b3Bjb2Rlc1tvcF9udW1dLmV4dGVuZGVkX3ZhbHVlID0gWkVORF9G QVNUX1JFVF9UT19GSU5BTExZOworCQlvcF9hcnJheS0+b3Bjb2Rlc1tvcF9udW1dLm9wMi5vcGxp bmVfbnVtID0gZmluYWxseV9vcF9udW07CisJfSBlbHNlIGlmIChjYXRjaF9vcF9udW0pIHsKKwkJ LyogaW4gY2FzZSBvZiB1bmhhbmRsZWQgZXhjZXB0aW9uIHJldHVybiB0byB1cHdhcmQgY2F0Y2gg YmxvY2sgKi8KKwkJb3BfYXJyYXktPm9wY29kZXNbb3BfbnVtXS5leHRlbmRlZF92YWx1ZSA9IFpF TkRfRkFTVF9SRVRfVE9fQ0FUQ0g7CisJCW9wX2FycmF5LT5vcGNvZGVzW29wX251bV0ub3AyLm9w bGluZV9udW0gPSBjYXRjaF9vcF9udW07CisJfQorfQorCitzdGF0aWMgdm9pZCB6ZW5kX3Jlc29s dmVfZmluYWxseV9jYWxscyh6ZW5kX29wX2FycmF5ICpvcF9hcnJheSBUU1JNTFNfREMpCit7CisJ emVuZF91aW50IGk7CisJemVuZF9vcCAqb3BsaW5lOworCisJZm9yIChpID0gMDsgaSA8IG9wX2Fy cmF5LT5sYXN0OyBpKyspIHsKKwkJb3BsaW5lID0gb3BfYXJyYXktPm9wY29kZXMgKyBpOworCQlz d2l0Y2ggKG9wbGluZS0+b3Bjb2RlKSB7CisJCQljYXNlIFpFTkRfUkVUVVJOOgorCQkJY2FzZSBa RU5EX1JFVFVSTl9CWV9SRUY6CisJCQkJemVuZF9yZXNvbHZlX2ZpbmFsbHlfY2FsbChvcF9hcnJh eSwgaSwgKHplbmRfdWludCktMSBUU1JNTFNfQ0MpOworCQkJCWJyZWFrOworCQkJY2FzZSBaRU5E X0JSSzoKKwkJCWNhc2UgWkVORF9DT05UOgorCQkJeworCQkJCWludCBuZXN0X2xldmVscywgYXJy YXlfb2Zmc2V0OworCQkJCXplbmRfYnJrX2NvbnRfZWxlbWVudCAqam1wX3RvOworCisJCQkJbmVz dF9sZXZlbHMgPSBaX0xWQUwob3BfYXJyYXktPmxpdGVyYWxzW29wbGluZS0+b3AyLmNvbnN0YW50 XS5jb25zdGFudCk7CisJCQkJYXJyYXlfb2Zmc2V0ID0gb3BsaW5lLT5vcDEub3BsaW5lX251bTsK KwkJCQlkbyB7CisJCQkJCWptcF90byA9ICZvcF9hcnJheS0+YnJrX2NvbnRfYXJyYXlbYXJyYXlf b2Zmc2V0XTsKKwkJCQkJaWYgKG5lc3RfbGV2ZWxzID4gMSkgeworCQkJCQkJYXJyYXlfb2Zmc2V0 ID0gam1wX3RvLT5wYXJlbnQ7CisJCQkJCX0KKwkJCQl9IHdoaWxlICgtLW5lc3RfbGV2ZWxzID4g MCk7CisJCQkJemVuZF9yZXNvbHZlX2ZpbmFsbHlfY2FsbChvcF9hcnJheSwgaSwgb3BsaW5lLT5v cGNvZGUgPT0gWkVORF9CUksgPyBqbXBfdG8tPmJyayA6IGptcF90by0+Y29udCBUU1JNTFNfQ0Mp OworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBaRU5EX0dPVE86CisJCQkJaWYgKFpfVFlQRShv cF9hcnJheS0+bGl0ZXJhbHNbb3BsaW5lLT5vcDIuY29uc3RhbnRdLmNvbnN0YW50KSAhPSBJU19M T05HKSB7CisJCQkJCXplbmRfdWludCBudW0gPSBvcGxpbmUtPm9wMi5jb25zdGFudDsKKwkJCQkJ b3BsaW5lLT5vcDIuenYgPSAmb3BfYXJyYXktPmxpdGVyYWxzW29wbGluZS0+b3AyLmNvbnN0YW50 XS5jb25zdGFudDsKKwkJCQkJemVuZF9yZXNvbHZlX2dvdG9fbGFiZWwob3BfYXJyYXksIG9wbGlu ZSwgMSBUU1JNTFNfQ0MpOworCQkJCQlvcGxpbmUtPm9wMi5jb25zdGFudCA9IG51bTsJCQkJCQor CQkJCX0KKwkJCQkvKiBicmVhayBvbWl0dGVkIGludGVudGlvbmFsbHkgKi8KKwkJCWNhc2UgWkVO RF9KTVA6CisJCQkJemVuZF9yZXNvbHZlX2ZpbmFsbHlfY2FsbChvcF9hcnJheSwgaSwgb3BsaW5l LT5vcDEub3BsaW5lX251bSBUU1JNTFNfQ0MpOworCQkJCWJyZWFrOworCQkJY2FzZSBaRU5EX0ZB U1RfUkVUOgorCQkJCXplbmRfcmVzb2x2ZV9maW5hbGx5X3JldChvcF9hcnJheSwgaSBUU1JNTFNf Q0MpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorCX0KK30KKwog WkVORF9BUEkgaW50IHBhc3NfdHdvKHplbmRfb3BfYXJyYXkgKm9wX2FycmF5IFRTUk1MU19EQykK IHsKIAl6ZW5kX29wICpvcGxpbmUsICplbmQ7CkBAIC01MjQsNiArNjYxLDkgQEAgWkVORF9BUEkg aW50IHBhc3NfdHdvKHplbmRfb3BfYXJyYXkgKm9wX2FycmF5IFRTUk1MU19EQykKIAlpZiAob3Bf YXJyYXktPnR5cGUhPVpFTkRfVVNFUl9GVU5DVElPTiAmJiBvcF9hcnJheS0+dHlwZSE9WkVORF9F VkFMX0NPREUpIHsKIAkJcmV0dXJuIDA7CiAJfQorCWlmIChvcF9hcnJheS0+aGFzX2ZpbmFsbHlf YmxvY2spIHsKKwkJemVuZF9yZXNvbHZlX2ZpbmFsbHlfY2FsbHMob3BfYXJyYXkgVFNSTUxTX0ND KTsKKwl9CiAJaWYgKENHKGNvbXBpbGVyX29wdGlvbnMpICYgWkVORF9DT01QSUxFX0VYVEVOREVE X0lORk8pIHsKIAkJemVuZF91cGRhdGVfZXh0ZW5kZWRfaW5mbyhvcF9hcnJheSBUU1JNTFNfQ0Mp OwogCX0KQEAgLTU2MCwzMCArNzAwLDkgQEAgWkVORF9BUEkgaW50IHBhc3NfdHdvKHplbmRfb3Bf YXJyYXkgKm9wX2FycmF5IFRTUk1MU19EQykKIAkJCQl9CiAJCQkJLyogYnJlYWsgb21pdHRlZCBp bnRlbnRpb25hbGx5ICovCiAJCQljYXNlIFpFTkRfSk1QOgotCQkJCWlmIChvcF9hcnJheS0+bGFz dF90cnlfY2F0Y2gpIHsKLQkJCQkJemVuZF9jaGVja19maW5hbGx5X2JyZWFrb3V0KG9wX2FycmF5 LCBvcGxpbmUsIG9wbGluZS0+b3AxLm9wbGluZV9udW0gVFNSTUxTX0NDKTsKLQkJCQl9CisJCQlj YXNlIFpFTkRfRkFTVF9DQUxMOgogCQkJCW9wbGluZS0+b3AxLmptcF9hZGRyID0gJm9wX2FycmF5 LT5vcGNvZGVzW29wbGluZS0+b3AxLm9wbGluZV9udW1dOwogCQkJCWJyZWFrOwotCQkJY2FzZSBa RU5EX0JSSzoKLQkJCWNhc2UgWkVORF9DT05UOgotCQkJCWlmIChvcF9hcnJheS0+bGFzdF90cnlf Y2F0Y2gpIHsKLQkJCQkJaW50IG5lc3RfbGV2ZWxzLCBhcnJheV9vZmZzZXQ7Ci0JCQkJCXplbmRf YnJrX2NvbnRfZWxlbWVudCAqam1wX3RvOwotCi0JCQkJCW5lc3RfbGV2ZWxzID0gWl9MVkFMX1Ao b3BsaW5lLT5vcDIuenYpOwotCQkJCQlhcnJheV9vZmZzZXQgPSBvcGxpbmUtPm9wMS5vcGxpbmVf bnVtOwotCQkJCQlkbyB7Ci0JCQkJCQlqbXBfdG8gPSAmb3BfYXJyYXktPmJya19jb250X2FycmF5 W2FycmF5X29mZnNldF07Ci0JCQkJCQlpZiAobmVzdF9sZXZlbHMgPiAxKSB7Ci0JCQkJCQkJYXJy YXlfb2Zmc2V0ID0gam1wX3RvLT5wYXJlbnQ7Ci0JCQkJCQl9Ci0JCQkJCX0gd2hpbGUgKC0tbmVz dF9sZXZlbHMgPiAwKTsKLQkJCQkJaWYgKG9wX2FycmF5LT5sYXN0X3RyeV9jYXRjaCkgewotCQkJ CQkJemVuZF9jaGVja19maW5hbGx5X2JyZWFrb3V0KG9wX2FycmF5LCBvcGxpbmUsIGptcF90by0+ YnJrIFRTUk1MU19DQyk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYnJlYWs7CiAJCQljYXNlIFpFTkRf Sk1QWjoKIAkJCWNhc2UgWkVORF9KTVBOWjoKIAkJCWNhc2UgWkVORF9KTVBaX0VYOgpkaWZmIC0t Z2l0IGEvWmVuZC96ZW5kX3ZtX2RlZi5oIGIvWmVuZC96ZW5kX3ZtX2RlZi5oCmluZGV4IGIwNmMw OWYuLmUzNDY5NjUgMTAwNjQ0Ci0tLSBhL1plbmQvemVuZF92bV9kZWYuaAorKysgYi9aZW5kL3pl bmRfdm1fZGVmLmgKQEAgLTE4NDUsNiArMTg0NSwxMiBAQCBaRU5EX1ZNX0hFTFBFUih6ZW5kX2xl YXZlX2hlbHBlciwgQU5ZLCBBTlkpCiAJemVuZF9ib29sIG5lc3RlZDsKIAl6ZW5kX29wX2FycmF5 ICpvcF9hcnJheSA9IEVYKG9wX2FycmF5KTsKIAorCWlmIChFWFBFQ1RFRChFRyhleGNlcHRpb24p ID09IE5VTEwpICYmCisJICAgIFVORVhQRUNURUQoRUcocHJldl9leGNlcHRpb24pICE9IE5VTEwp KSB7CisJCS8qIHJldHVybiBmcm9tIGZpbmFsbHkgYmxvY2sgY2FsbGVkIGJlY2F1c2Ugb2YgdW5o YW5kbGVkIGV4Y2VwdGlvbiAqLworCQl6ZW5kX2V4Y2VwdGlvbl9yZXN0b3JlKFRTUk1MU19DKTsJ CQorCX0KKwkKIAkvKiBHZW5lcmF0b3JzIGdvIHRocm93IGEgZGlmZmVyZW50IGNsZWFudXAgcHJv Y2VzcyAqLwogCWlmIChFWChvcF9hcnJheSktPmZuX2ZsYWdzICYgWkVORF9BQ0NfR0VORVJBVE9S KSB7CiAJCS8qIFRoZSBnZW5lcmF0b3Igb2JqZWN0IGlzIHN0b3JlZCBpbiByZXR1cm5fdmFsdWVf cHRyX3B0ciAqLwpAQCAtMjEyNSwxMDEgKzIxMzEsNiBAQCBaRU5EX1ZNX0hFTFBFUih6ZW5kX2Rv X2ZjYWxsX2NvbW1vbl9oZWxwZXIsIEFOWSwgQU5ZKQogCVpFTkRfVk1fTkVYVF9PUENPREUoKTsK IH0KIAotWkVORF9WTV9IRUxQRVJfRVgoemVuZF9maW5hbGx5X2hhbmRsZXJfbGVhdmluZywgQU5Z LCBBTlksIGludCB0eXBlKQotewotCVVTRV9PUExJTkUKLQl6ZW5kX3VpbnQgaSwgb3BfbnVtID0g b3BsaW5lIC0gRVgob3BfYXJyYXkpLT5vcGNvZGVzOwotCXplbmRfdWludCBjYXRjaF9vcF9udW0g PSAwLCBmaW5hbGx5X29wX251bSA9IDA7Ci0KLQlTQVZFX09QTElORSgpOwotCi0Jc3dpdGNoICh0 eXBlKSB7Ci0JCWNhc2UgWkVORF9USFJPVzoKLQkJY2FzZSBaRU5EX1JFVFVSTjoKLQkJY2FzZSBa RU5EX1JFVFVSTl9CWV9SRUY6Ci0JCWNhc2UgWkVORF9MRUFWRToKLQkJCXsKLQkJCQlpZiAoRUco cHJldl9leGNlcHRpb24pIHx8ICh0eXBlID09IFpFTkRfTEVBVkUgJiYgRUcoZXhjZXB0aW9uKSkp IHsKLQkJCQkJZm9yIChpPTA7IGk8RVgob3BfYXJyYXkpLT5sYXN0X3RyeV9jYXRjaDsgaSsrKSB7 Ci0JCQkJCQlpZiAoRVgob3BfYXJyYXkpLT50cnlfY2F0Y2hfYXJyYXlbaV0udHJ5X29wID4gb3Bf bnVtKSB7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAob3BfbnVtIDwgRVgob3Bf YXJyYXkpLT50cnlfY2F0Y2hfYXJyYXlbaV0uZmluYWxseV9vcCkgewotCQkJCQkJCWZpbmFsbHlf b3BfbnVtID0gRVgob3BfYXJyYXkpLT50cnlfY2F0Y2hfYXJyYXlbaV0uZmluYWxseV9vcDsKLQkJ CQkJCX0KLQkJCQkJCWlmIChvcF9udW0gPCBFWChvcF9hcnJheSktPnRyeV9jYXRjaF9hcnJheVtp XS5jYXRjaF9vcCkgewotCQkJCQkJCWNhdGNoX29wX251bSA9IEVYKG9wX2FycmF5KS0+dHJ5X2Nh dGNoX2FycmF5W2ldLmNhdGNoX29wOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJ CQkJZm9yIChpPTA7IGk8RVgob3BfYXJyYXkpLT5sYXN0X3RyeV9jYXRjaDsgaSsrKSB7Ci0JCQkJ CQlpZiAoRVgob3BfYXJyYXkpLT50cnlfY2F0Y2hfYXJyYXlbaV0udHJ5X29wID4gb3BfbnVtKSB7 Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAob3BfbnVtIDwgRVgob3BfYXJyYXkp LT50cnlfY2F0Y2hfYXJyYXlbaV0uZmluYWxseV9vcCkgewotCQkJCQkJCWZpbmFsbHlfb3BfbnVt ID0gRVgob3BfYXJyYXkpLT50cnlfY2F0Y2hfYXJyYXlbaV0uZmluYWxseV9vcDsKLQkJCQkJCX0K LQkJCQkJfQotCQkJCX0KLQotCQkJCWlmIChjYXRjaF9vcF9udW0gJiYgZmluYWxseV9vcF9udW0p IHsKLQkJCQkJLyogRUcoZXhjZXB0aW9uKSB8fCBFRyhwcmV2X2V4Y2VwdGlvbikgKi8KLQkJCQkJ aWYgKGNhdGNoX29wX251bSA+IGZpbmFsbHlfb3BfbnVtKSB7Ci0JCQkJCQl6ZW5kX2V4Y2VwdGlv bl9zYXZlKFRTUk1MU19DKTsKLQkJCQkJCUVYKGxlYXZpbmcpID0gWkVORF9USFJPVzsKLQkJCQkJ CVpFTkRfVk1fU0VUX09QQ09ERSgmRVgob3BfYXJyYXkpLT5vcGNvZGVzW2ZpbmFsbHlfb3BfbnVt XSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlFWChsZWF2aW5nKSA9IDA7Ci0JCQkJCQlaRU5EX1ZN X1NFVF9PUENPREUoJkVYKG9wX2FycmF5KS0+b3Bjb2Rlc1tjYXRjaF9vcF9udW1dKTsKLQkJCQkJ fQotCQkJCX0gZWxzZSBpZiAoY2F0Y2hfb3BfbnVtKSB7Ci0JCQkJCUVYKGxlYXZpbmcpID0gMDsK LQkJCQkJWkVORF9WTV9TRVRfT1BDT0RFKCZFWChvcF9hcnJheSktPm9wY29kZXNbY2F0Y2hfb3Bf bnVtXSk7Ci0JCQkJfSBlbHNlIGlmIChmaW5hbGx5X29wX251bSkgewotCQkJCQl6ZW5kX2V4Y2Vw dGlvbl9zYXZlKFRTUk1MU19DKTsKLQkJCQkJaWYgKHR5cGUgIT0gWkVORF9MRUFWRSkgewotCQkJ CQkJRVgobGVhdmluZykgPSB0eXBlOwotCQkJCQl9Ci0JCQkJCVpFTkRfVk1fU0VUX09QQ09ERSgm RVgob3BfYXJyYXkpLT5vcGNvZGVzW2ZpbmFsbHlfb3BfbnVtXSk7Ci0JCQkJfSBlbHNlIGlmIChF WChsZWF2aW5nKSAmJiB0eXBlICE9IFpFTkRfTEVBVkUpIHsKLQkJCQkJLyogbGVhdmUgaXQgdG8g WkVORF9MRUFWRSAqLwotCQkJCQlFWChsZWF2aW5nKSA9IHR5cGU7Ci0JCQkJCVpFTkRfVk1fTkVY VF9PUENPREUoKTsKLQkJCQl9IGVsc2UgewotCQkJCQlaRU5EX1ZNX0RJU1BBVENIX1RPX0hFTFBF Uih6ZW5kX2xlYXZlX2hlbHBlcik7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgWkVO RF9KTVA6Ci0JCWNhc2UgWkVORF9CUks6Ci0JCWNhc2UgWkVORF9DT05UOgotCQljYXNlIFpFTkRf R09UTzoKLQkJCXsKLQkJICAvKiB0aGVzZSBjYW4gbm90IG9jY3VycmVkIGluIGV4Y2VwdGlvbiBj b250ZXh0ICovCi0JCSAgZm9yIChpPTA7IGk8RUcoYWN0aXZlX29wX2FycmF5KS0+bGFzdF90cnlf Y2F0Y2g7IGkrKykgewotCQkJICBpZiAoRUcoYWN0aXZlX29wX2FycmF5KS0+dHJ5X2NhdGNoX2Fy cmF5W2ldLnRyeV9vcCA+IG9wX251bSkgewotCQkJCSAgYnJlYWs7Ci0JCQkgIH0KLQkJCSAgaWYg KG9wX251bSA8IEVHKGFjdGl2ZV9vcF9hcnJheSktPnRyeV9jYXRjaF9hcnJheVtpXS5maW5hbGx5 X29wCi0JCQkJCSAgJiYgKEVYKGxlYXZpbmdfZGVzdCkgPCBFRyhhY3RpdmVfb3BfYXJyYXkpLT50 cnlfY2F0Y2hfYXJyYXlbaV0udHJ5X29wCi0JCQkJCQkgIHx8IEVYKGxlYXZpbmdfZGVzdCkgPj0g RUcoYWN0aXZlX29wX2FycmF5KS0+dHJ5X2NhdGNoX2FycmF5W2ldLmZpbmFsbHlfZW5kKSkgewot CQkJCSAgZmluYWxseV9vcF9udW0gPSBFRyhhY3RpdmVfb3BfYXJyYXkpLT50cnlfY2F0Y2hfYXJy YXlbaV0uZmluYWxseV9vcDsKLQkJCSAgfQotCQkgIH0KLQotCQkgIGlmIChmaW5hbGx5X29wX251 bSkgewotCQkJICBFWChsZWF2aW5nKSA9IHR5cGU7Ci0JCQkgIFpFTkRfVk1fU0VUX09QQ09ERSgm RVgob3BfYXJyYXkpLT5vcGNvZGVzW2ZpbmFsbHlfb3BfbnVtXSk7Ci0JCSAgfSBlbHNlIHsKLQkJ CSAgRVgobGVhdmluZykgPSAwOwotCQkJICBaRU5EX1ZNX1NFVF9PUENPREUoJkVYKG9wX2FycmF5 KS0+b3Bjb2Rlc1tFWChsZWF2aW5nX2Rlc3QpXSk7Ci0JCSAgfQotCSAgfQotCQkJYnJlYWs7Ci0J fQotCVpFTkRfVk1fQ09OVElOVUUoKTsKLX0KLQogWkVORF9WTV9IQU5ETEVSKDQyLCBaRU5EX0pN UCwgQU5ZLCBBTlkpCiB7CiAJVVNFX09QTElORQpAQCAtMjIyNywxMiArMjEzOCw4IEBAIFpFTkRf Vk1fSEFORExFUig0MiwgWkVORF9KTVAsIEFOWSwgQU5ZKQogI2lmIERFQlVHX1pFTkQ+PTIKIAlw cmludGYoIkp1bXBpbmcgdG8gJWRcbiIsIG9wbGluZS0+b3AxLm9wbGluZV9udW0pOwogI2VuZGlm Ci0JaWYgKEVYUEVDVEVEKCFFWChvcF9hcnJheSktPmhhc19maW5hbGx5X2Jsb2NrKSkgewotCQla RU5EX1ZNX1NFVF9PUENPREUob3BsaW5lLT5vcDEuam1wX2FkZHIpOwotCQlaRU5EX1ZNX0NPTlRJ TlVFKCk7IC8qIENIRUNLX01FICovCi0JfQotCUVYKGxlYXZpbmdfZGVzdCkgPSBvcGxpbmUtPm9w MS5qbXBfYWRkciAtIEVYKG9wX2FycmF5KS0+b3Bjb2RlczsKLQlaRU5EX1ZNX0RJU1BBVENIX1RP X0hFTFBFUl9FWCh6ZW5kX2ZpbmFsbHlfaGFuZGxlcl9sZWF2aW5nLCB0eXBlLCBaRU5EX0pNUCk7 CisJWkVORF9WTV9TRVRfT1BDT0RFKG9wbGluZS0+b3AxLmptcF9hZGRyKTsKKwlaRU5EX1ZNX0NP TlRJTlVFKCk7CiB9CiAKIFpFTkRfVk1fSEFORExFUig0MywgWkVORF9KTVBaLCBDT05TVHxUTVB8 VkFSfENWLCBBTlkpCkBAIC0yOTcyLDExICsyODc5LDcgQEAgWkVORF9WTV9IQU5ETEVSKDYyLCBa RU5EX1JFVFVSTiwgQ09OU1R8VE1QfFZBUnxDViwgQU5ZKQogCQkqRUcocmV0dXJuX3ZhbHVlX3B0 cl9wdHIpID0gcmV0OwogCX0KIAlGUkVFX09QMV9JRl9WQVIoKTsKLQotCWlmIChFWFBFQ1RFRCgh RVgob3BfYXJyYXkpLT5oYXNfZmluYWxseV9ibG9jaykpIHsKLQkJWkVORF9WTV9ESVNQQVRDSF9U T19IRUxQRVIoemVuZF9sZWF2ZV9oZWxwZXIpOwotCX0KLQlaRU5EX1ZNX0RJU1BBVENIX1RPX0hF TFBFUl9FWCh6ZW5kX2ZpbmFsbHlfaGFuZGxlcl9sZWF2aW5nLCB0eXBlLCBaRU5EX1JFVFVSTik7 CisJWkVORF9WTV9ESVNQQVRDSF9UT19IRUxQRVIoemVuZF9sZWF2ZV9oZWxwZXIpOwogfQogCiBa RU5EX1ZNX0hBTkRMRVIoMTExLCBaRU5EX1JFVFVSTl9CWV9SRUYsIENPTlNUfFRNUHxWQVJ8Q1Ys IEFOWSkKQEAgLTMwNDgsMTggKzI5NTEsMTEgQEAgWkVORF9WTV9IQU5ETEVSKDExMSwgWkVORF9S RVRVUk5fQllfUkVGLCBDT05TVHxUTVB8VkFSfENWLCBBTlkpCiAJfSB3aGlsZSAoMCk7CiAKIAlG UkVFX09QMV9JRl9WQVIoKTsKLQotCWlmIChFWFBFQ1RFRCghRVgob3BfYXJyYXkpLT5oYXNfZmlu YWxseV9ibG9jaykpIHsKLQkJWkVORF9WTV9ESVNQQVRDSF9UT19IRUxQRVIoemVuZF9sZWF2ZV9o ZWxwZXIpOwotCX0KLQlaRU5EX1ZNX0RJU1BBVENIX1RPX0hFTFBFUl9FWCh6ZW5kX2ZpbmFsbHlf aGFuZGxlcl9sZWF2aW5nLCB0eXBlLCBaRU5EX1JFVFVSTl9CWV9SRUYpOworCVpFTkRfVk1fRElT UEFUQ0hfVE9fSEVMUEVSKHplbmRfbGVhdmVfaGVscGVyKTsKIH0KIAogWkVORF9WTV9IQU5ETEVS KDE2MSwgWkVORF9HRU5FUkFUT1JfUkVUVVJOLCBBTlksIEFOWSkKIHsKLQlpZiAoRVgob3BfYXJy YXkpLT5oYXNfZmluYWxseV9ibG9jaykgewotCQlaRU5EX1ZNX0RJU1BBVENIX1RPX0hFTFBFUl9F WCh6ZW5kX2ZpbmFsbHlfaGFuZGxlcl9sZWF2aW5nLCB0eXBlLCBaRU5EX1JFVFVSTik7Ci0JfQog CVpFTkRfVk1fRElTUEFUQ0hfVE9fSEVMUEVSKHplbmRfbGVhdmVfaGVscGVyKTsKIH0KIApAQCAt MzQwNCwxMSArMzMwMCw3IEBAIFpFTkRfVk1fSEFORExFUig1MCwgWkVORF9CUkssIEFOWSwgQ09O U1QpCiAJZWwgPSB6ZW5kX2Jya19jb250KFpfTFZBTF9QKG9wbGluZS0+b3AyLnp2KSwgb3BsaW5l LT5vcDEub3BsaW5lX251bSwKIAkgICAgICAgICAgICAgICAgICAgRVgob3BfYXJyYXkpLCBFWF9U cygpIFRTUk1MU19DQyk7CiAJRlJFRV9PUDIoKTsKLQlpZiAoRVhQRUNURUQoIUVYKG9wX2FycmF5 KS0+aGFzX2ZpbmFsbHlfYmxvY2spKSB7Ci0JCVpFTkRfVk1fSk1QKEVYKG9wX2FycmF5KS0+b3Bj b2RlcyArIGVsLT5icmspOwotCX0KLQlFWChsZWF2aW5nX2Rlc3QpID0gZWwtPmJyazsKLQlaRU5E X1ZNX0RJU1BBVENIX1RPX0hFTFBFUl9FWCh6ZW5kX2ZpbmFsbHlfaGFuZGxlcl9sZWF2aW5nLCB0 eXBlLCBaRU5EX0JSSyk7CisJWkVORF9WTV9KTVAoRVgob3BfYXJyYXkpLT5vcGNvZGVzICsgZWwt PmJyayk7CiB9CiAKIFpFTkRfVk1fSEFORExFUig1MSwgWkVORF9DT05ULCBBTlksIENPTlNUKQpA QCAtMzQyMCwxMSArMzMxMiw3IEBAIFpFTkRfVk1fSEFORExFUig1MSwgWkVORF9DT05ULCBBTlks IENPTlNUKQogCWVsID0gemVuZF9icmtfY29udChaX0xWQUxfUChvcGxpbmUtPm9wMi56diksIG9w bGluZS0+b3AxLm9wbGluZV9udW0sCiAJICAgICAgICAgICAgICAgICAgIEVYKG9wX2FycmF5KSwg RVhfVHMoKSBUU1JNTFNfQ0MpOwogCUZSRUVfT1AyKCk7Ci0JaWYgKEVYUEVDVEVEKCFFWChvcF9h cnJheSktPmhhc19maW5hbGx5X2Jsb2NrKSkgewotCQlaRU5EX1ZNX0pNUChFWChvcF9hcnJheSkt Pm9wY29kZXMgKyBlbC0+Y29udCk7Ci0JfQotCUVYKGxlYXZpbmdfZGVzdCkgPSBlbC0+Y29udDsK LQlaRU5EX1ZNX0RJU1BBVENIX1RPX0hFTFBFUl9FWCh6ZW5kX2ZpbmFsbHlfaGFuZGxlcl9sZWF2 aW5nLCB0eXBlLCBaRU5EX0NPTlQpOworCVpFTkRfVk1fSk1QKEVYKG9wX2FycmF5KS0+b3Bjb2Rl cyArIGVsLT5jb250KTsKIH0KIAogWkVORF9WTV9IQU5ETEVSKDEwMCwgWkVORF9HT1RPLCBBTlks IENPTlNUKQpAQCAtMzQ1MSwxMSArMzMzOSw3IEBAIFpFTkRfVk1fSEFORExFUigxMDAsIFpFTkRf R09UTywgQU5ZLCBDT05TVCkKIAkJCX0KIAkJCWJyZWFrOwogCX0KLQlpZiAoRVhQRUNURUQoIUVY KG9wX2FycmF5KS0+aGFzX2ZpbmFsbHlfYmxvY2spKSB7Ci0JCVpFTkRfVk1fSk1QKG9wbGluZS0+ b3AxLmptcF9hZGRyKTsKLQl9Ci0JRVgobGVhdmluZ19kZXN0KSA9IG9wbGluZS0+b3AxLmptcF9h ZGRyIC0gRVgob3BfYXJyYXkpLT5vcGNvZGVzOwotCVpFTkRfVk1fRElTUEFUQ0hfVE9fSEVMUEVS X0VYKHplbmRfZmluYWxseV9oYW5kbGVyX2xlYXZpbmcsIHR5cGUsIFpFTkRfR09UTyk7CisJWkVO RF9WTV9KTVAob3BsaW5lLT5vcDEuam1wX2FkZHIpOwogfQogCiBaRU5EX1ZNX0hBTkRMRVIoNDgs IFpFTkRfQ0FTRSwgQ09OU1R8VE1QfFZBUnxDViwgQ09OU1R8VE1QfFZBUnxDVikKQEAgLTUyMzEs MjYgKzUxMTUsMTQgQEAgWkVORF9WTV9IQU5ETEVSKDE0OSwgWkVORF9IQU5ETEVfRVhDRVBUSU9O LCBBTlksIEFOWSkKIAl9CiAJRVgob2xkX2Vycm9yX3JlcG9ydGluZykgPSBOVUxMOwogCi0JaWYg KGNhdGNoZWQgJiYgZmluYWxseSkgewotCQlpZiAoZmluYWxseV9vcF9udW0gPiBjYXRjaF9vcF9u dW0pIHsKLQkJCUVYKGxlYXZpbmcpID0gMDsKLQkJCVpFTkRfVk1fU0VUX09QQ09ERSgmRVgob3Bf YXJyYXkpLT5vcGNvZGVzW2NhdGNoX29wX251bV0pOwotCQkJWkVORF9WTV9DT05USU5VRSgpOwot CQl9IGVsc2UgewotCQkJemVuZF9leGNlcHRpb25fc2F2ZShUU1JNTFNfQyk7Ci0JCQlFWChsZWF2 aW5nKSA9IFpFTkRfVEhST1c7Ci0JCQlaRU5EX1ZNX1NFVF9PUENPREUoJkVYKG9wX2FycmF5KS0+ b3Bjb2Rlc1tmaW5hbGx5X29wX251bV0pOwotCQkJWkVORF9WTV9DT05USU5VRSgpOwotCQl9Ci0J fSBlbHNlIGlmIChjYXRjaGVkKSB7Ci0JCUVYKGxlYXZpbmcpID0gMDsKLQkJWkVORF9WTV9TRVRf T1BDT0RFKCZFWChvcF9hcnJheSktPm9wY29kZXNbY2F0Y2hfb3BfbnVtXSk7Ci0JCVpFTkRfVk1f Q09OVElOVUUoKTsKLQl9IGVsc2UgaWYgKGZpbmFsbHkpIHsKKwlpZiAoZmluYWxseSAmJiAoIWNh dGNoZWQgfHwgY2F0Y2hfb3BfbnVtID49IGZpbmFsbHlfb3BfbnVtKSkgewogCQl6ZW5kX2V4Y2Vw dGlvbl9zYXZlKFRTUk1MU19DKTsKLQkJRVgobGVhdmluZykgPSBaRU5EX1RIUk9XOworCQlFWChm YXN0X3JldCkgPSBOVUxMOwogCQlaRU5EX1ZNX1NFVF9PUENPREUoJkVYKG9wX2FycmF5KS0+b3Bj b2Rlc1tmaW5hbGx5X29wX251bV0pOwogCQlaRU5EX1ZNX0NPTlRJTlVFKCk7CisJfSBlbHNlIGlm IChjYXRjaGVkKSB7CisJCVpFTkRfVk1fU0VUX09QQ09ERSgmRVgob3BfYXJyYXkpLT5vcGNvZGVz W2NhdGNoX29wX251bV0pOworCQlaRU5EX1ZNX0NPTlRJTlVFKCk7CiAJfSBlbHNlIHsKIAkJWkVO RF9WTV9ESVNQQVRDSF9UT19IRUxQRVIoemVuZF9sZWF2ZV9oZWxwZXIpOwogCX0KQEAgLTUzNzEs MzAgKzUyNDMsNiBAQCBaRU5EX1ZNX0hBTkRMRVIoMTU2LCBaRU5EX1NFUEFSQVRFLCBWQVIsIFVO VVNFRCkKIAlaRU5EX1ZNX05FWFRfT1BDT0RFKCk7CiB9CiAKLVpFTkRfVk1fSEFORExFUigxNTks IFpFTkRfTEVBVkUsIEFOWSwgQU5ZKQotewotCXplbmRfZXhjZXB0aW9uX3Jlc3RvcmUoVFNSTUxT X0MpOwotCWlmICghRVgobGVhdmluZykpIHsKLQkJWkVORF9WTV9ORVhUX09QQ09ERSgpOwotCX0g ZWxzZSB7Ci0JCXplbmRfdWludCBsZWF2aW5nID0gRVgobGVhdmluZyk7Ci0JCXN3aXRjaCAobGVh dmluZykgewotCQkJY2FzZSBaRU5EX1JFVFVSTjoKLQkJCWNhc2UgWkVORF9SRVRVUk5fQllfUkVG OgotCQkJY2FzZSBaRU5EX1RIUk9XOgotCQkJCWxlYXZpbmcgPSBaRU5EX0xFQVZFOwotCQkJY2Fz ZSBaRU5EX0pNUDoKLQkJCWNhc2UgWkVORF9CUks6Ci0JCQljYXNlIFpFTkRfQ09OVDoKLQkJCWNh c2UgWkVORF9HT1RPOgotCQkJCSBaRU5EX1ZNX0RJU1BBVENIX1RPX0hFTFBFUl9FWCh6ZW5kX2Zp bmFsbHlfaGFuZGxlcl9sZWF2aW5nLCB0eXBlLCBsZWF2aW5nKTsKLQkJCWJyZWFrOwotCQl9Ci0J fQotCi0JWkVORF9WTV9DT05USU5VRSgpOwotfQotCiBaRU5EX1ZNX0hBTkRMRVIoMTYwLCBaRU5E X1lJRUxELCBDT05TVHxUTVB8VkFSfENWfFVOVVNFRCwgQ09OU1R8VE1QfFZBUnxDVnxVTlVTRUQp CiB7CiAJVVNFX09QTElORQpAQCAtNTU1Miw0ICs1NDAwLDQyIEBAIFpFTkRfVk1fSEFORExFUigx NjAsIFpFTkRfWUlFTEQsIENPTlNUfFRNUHxWQVJ8Q1Z8VU5VU0VELCBDT05TVHxUTVB8VkFSfENW fFVOVVNFCiAJWkVORF9WTV9SRVRVUk4oKTsKIH0KIAorWkVORF9WTV9IQU5ETEVSKDE2MiwgWkVO RF9GQVNUX0NBTEwsIEFOWSwgQU5ZKQoreworCVVTRV9PUExJTkUKKworCWlmIChvcGxpbmUtPmV4 dGVuZGVkX3ZhbHVlICYmCisJICAgIFVORVhQRUNURUQoRUcocHJldl9leGNlcHRpb24pICE9IE5V TEwpKSB7IAorCSAgICAvKiBvaW4gY2FzZSBvZiB1bmhhbmRsZWQgZXhjZXB0aW9uIGp1bXAgdG8g Y2F0Y2ggYmxvY2sgaW5zdGVhZCBvZiBmaW5hbGx5ICovCisJCVpFTkRfVk1fU0VUX09QQ09ERSgm RVgob3BfYXJyYXkpLT5vcGNvZGVzW29wbGluZS0+b3AyLm9wbGluZV9udW1dKTsKKwkJWkVORF9W TV9DT05USU5VRSgpOworCX0KKwlFWChmYXN0X3JldCkgPSBvcGxpbmUgKyAxOworCVpFTkRfVk1f U0VUX09QQ09ERShvcGxpbmUtPm9wMS5qbXBfYWRkcik7CisJWkVORF9WTV9DT05USU5VRSgpOwor fQorCitaRU5EX1ZNX0hBTkRMRVIoMTYzLCBaRU5EX0ZBU1RfUkVULCBBTlksIEFOWSkKK3sKKwlp ZiAoRVgoZmFzdF9yZXQpKSB7CisJCVpFTkRfVk1fU0VUX09QQ09ERShFWChmYXN0X3JldCkpOwor CQlaRU5EX1ZNX0NPTlRJTlVFKCk7CisJfSBlbHNlIHsKKwkJLyogc3BlY2lhbCBjYXNlIGZvciB1 bmhhbmRsZWQgZXhjZXB0aW9ucyAqLworCQlVU0VfT1BMSU5FCisKKwkJaWYgKG9wbGluZS0+ZXh0 ZW5kZWRfdmFsdWUgPT0gWkVORF9GQVNUX1JFVF9UT19GSU5BTExZKSB7CisJCQlaRU5EX1ZNX1NF VF9PUENPREUoJkVYKG9wX2FycmF5KS0+b3Bjb2Rlc1tvcGxpbmUtPm9wMi5vcGxpbmVfbnVtXSk7 CisJCQlaRU5EX1ZNX0NPTlRJTlVFKCk7CisJCX0gZWxzZSBpZiAob3BsaW5lLT5leHRlbmRlZF92 YWx1ZSA9PSBaRU5EX0ZBU1RfUkVUX1RPX0NBVENIKSB7CisJCQl6ZW5kX2V4Y2VwdGlvbl9yZXN0 b3JlKFRTUk1MU19DKTsKKwkJCVpFTkRfVk1fU0VUX09QQ09ERSgmRVgob3BfYXJyYXkpLT5vcGNv ZGVzW29wbGluZS0+b3AyLm9wbGluZV9udW1dKTsKKwkJCVpFTkRfVk1fQ09OVElOVUUoKTsKKwkJ fSBlbHNlIHsKKwkJCXplbmRfZXhjZXB0aW9uX3Jlc3RvcmUoVFNSTUxTX0MpOworCQkJWkVORF9W TV9ESVNQQVRDSF9UT19IRUxQRVIoemVuZF9sZWF2ZV9oZWxwZXIpOworCQl9CisJfQorfQorCiBa RU5EX1ZNX0VYUE9SVF9IRUxQRVIoemVuZF9kb19mY2FsbCwgemVuZF9kb19mY2FsbF9jb21tb25f aGVscGVyKQpkaWZmIC0tZ2l0IGEvWmVuZC96ZW5kX3ZtX2V4ZWN1dGUuc2tsIGIvWmVuZC96ZW5k X3ZtX2V4ZWN1dGUuc2tsCmluZGV4IDJhNmZkNzEuLmUyZDVkZDEgMTAwNjQ0Ci0tLSBhL1plbmQv emVuZF92bV9leGVjdXRlLnNrbAorKysgYi9aZW5kL3plbmRfdm1fZXhlY3V0ZS5za2wKQEAgLTQ2 LDcgKzQ2LDYgQEAgemVuZF9leGVjdXRlX2RhdGEgKnplbmRfY3JlYXRlX2V4ZWN1dGVfZGF0YV9m cm9tX29wX2FycmF5KHplbmRfb3BfYXJyYXkgKm9wX2FycmEKIAlFWChwcmV2X2V4ZWN1dGVfZGF0 YSkgPSBFRyhjdXJyZW50X2V4ZWN1dGVfZGF0YSk7CiAJRUcoY3VycmVudF9leGVjdXRlX2RhdGEp ID0gZXhlY3V0ZV9kYXRhOwogCUVYKG5lc3RlZCkgPSBuZXN0ZWQ7Ci0gICAgRVgobGVhdmluZykg PSAwOwogCiAJaWYgKCFvcF9hcnJheS0+cnVuX3RpbWVfY2FjaGUgJiYgb3BfYXJyYXktPmxhc3Rf Y2FjaGVfc2xvdCkgewogCQlvcF9hcnJheS0+cnVuX3RpbWVfY2FjaGUgPSBlY2FsbG9jKG9wX2Fy cmF5LT5sYXN0X2NhY2hlX3Nsb3QsIHNpemVvZih2b2lkKikpOwo= --f46d04479633a991ea04cf08bb60--