Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:42439 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 28235 invoked from network); 1 Jan 2009 16:53:37 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 1 Jan 2009 16:53:37 -0000 Authentication-Results: pb1.pair.com smtp.mail=helly@php.net; spf=unknown; sender-id=unknown Authentication-Results: pb1.pair.com header.from=helly@php.net; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain php.net does not designate 85.214.94.56 as permitted sender) X-PHP-List-Original-Sender: helly@php.net X-Host-Fingerprint: 85.214.94.56 aixcept.net Linux 2.6 Received: from [85.214.94.56] ([85.214.94.56:58813] helo=h1149922.serverkompetenz.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 29/1C-62500-E05FC594 for ; Thu, 01 Jan 2009 11:53:37 -0500 Received: from MBOERGER-ZRH.corp.google.com (229-122.107-92.cust.bluewin.ch [92.107.122.229]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by h1149922.serverkompetenz.net (Postfix) with ESMTP id C267911F5EF; Thu, 1 Jan 2009 17:53:29 +0100 (CET) Date: Thu, 1 Jan 2009 17:50:39 +0100 Reply-To: Marcus Boerger X-Priority: 3 (Normal) Message-ID: <886533446.20090101175039@marcus-boerger.de> To: =?iso-8859-15?Q?David_Z=FClke?= CC: Marcus Boerger , "Hannes Magnusson" , "Lars Strojny" , "PHP Internals" In-Reply-To: <150CBF28-ADB6-4ED3-9201-4483518D6129@bitextender.com> References: <08AA10DA-2704-415C-8A8C-893C89990DC1@bitextender.com> <868073456.20081231173818@marcus-boerger.de> <1230746348.25966.3.camel@localhost> <8710064882.20081231201259@marcus-boerger.de> <7f3ed2c30812311133m708bcab1s746f9ca7c3129542@mail.gmail.com> <18322421.20090101160939@marcus-boerger.de> <533383914.20090101170623@marcus-boerger.de> <150CBF28-ADB6-4ED3-9201-4483518D6129@bitextender.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------1A1C4BB2CB0504B" Subject: Re: [PHP-DEV] [RFC] Re: [PHP-DEV] __invoke() weirdness From: helly@php.net (Marcus Boerger) ------------1A1C4BB2CB0504B Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit Hello David, I added test closure_037.phpt to demonstrate this. marcus Thursday, January 1, 2009, 5:23:08 PM, you wrote: > Hi folks, > first of all, thank you Marcus for implementing this. Very cool. > As for the __get()/__getClosure() stuff, I don't think it's necessary > or even an issue. One can never simply do $this- >>getOverloadPropertyWithInvoke() anyway, because if the prop is not > there, a fatal error would be the result. An __isset() call has to be > made first along with an (instanceof Closure || > method_exists('__invoke')) check in userspace code. > Which brings me to the next question - will > $method = 'something'; > $bar->$method(); > work? Not sure if it's necessary; just curious for the most part. > - David > On 01.01.2009, at 17:06, Marcus Boerger wrote: >> Hello Hannes, >> >> as discussed online. At the moment we should not have any __get() >> calls during method resolution. The newly updated patch does that >> now. And I think we are now safe to submit. >> >> In the future we could think of adding __getClosure() which would be >> called to resolve a dynamic closure. But for the moment we do not need >> it badly and the patch with the increased consistency is good enough. >> >> marcus >> >> Thursday, January 1, 2009, 4:09:39 PM, you wrote: >> >>> Hello Hannes, >> >>> Wednesday, December 31, 2008, 8:33:43 PM, you wrote: >> >>>> On Wed, Dec 31, 2008 at 20:12, Marcus Boerger wrote: >>>>> Hello Lars, >>>>> >>>>> Wednesday, December 31, 2008, 6:59:08 PM, you wrote: >>>>> >>>>>> Hi Markus, >>>>> >>>>>> have you measured the performance impact in a class with - say - >>>>>> ten >>>>>> methods? And what to do with __get() and __call()? How are the >>>>>> prioritized in the method resolve order? >>>>> >>>>> Translated into user code we now have: >>>>> >>>>> public function __zend_call($name, $args) { >>>>> // Added property lookup >>>>> if (isset($this->$name)) { // may call __isset >>>>> $callable = $this->$name; // may call __get >> >>>> Uhmm. I hope I got this wrong as: >> >>> Well yes, there are no __isset() calls unless you call isset() of >>> course. >> >>> I have updated the patch and added a test to demonstrate it better >>> (closure_036.phpt). I also added debug information to closures >>> which makes >>> development much easier. The next step is to fix an issue in the >>> engine and >>> then submit unless there is a bigger issue with this. >> >>>> class foo { >>>> function __isset() { >>>> return true; >>>> } >>>> function __get() { >>>> return "hello world"; >>>> } >>>> function __call() { >>>> } >>>> } >> >>>> $foo = new foo; >>>> $foo->foobar(); >> >>>> will first execute __isset(), then __get() and then __call()? That >>>> is >>>> a major backwards compatibility break, and increases the >>>> inconsistency >>>> and decreases readability 10times >> >>>> -Hannes >> >> >> >> >>> Best regards, >>> Marcus >> >> >> >> Best regards, >> Marcus-- >> PHP Internals - PHP Runtime Development Mailing List >> To unsubscribe, visit: http://www.php.net/unsub.php Best regards, Marcus ------------1A1C4BB2CB0504B Content-Type: text/plain; name="ze2-callable-properties-5.3-20090101-d.diff.txt" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="ze2-callable-properties-5.3-20090101-d.diff.txt" SW5kZXg6IFplbmQvemVuZF9vYmplY3RfaGFuZGxlcnMuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvcmVwb3NpdG9yeS9aZW5kRW5naW5lMi96ZW5kX29iamVjdF9oYW5kbGVycy5jLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjEzNS4yLjYuMi4yMi4yLjIzCmRpZmYgLXUgLXAgLWQg LXIxLjEzNS4yLjYuMi4yMi4yLjIzIHplbmRfb2JqZWN0X2hhbmRsZXJzLmMKLS0tIFplbmQv emVuZF9vYmplY3RfaGFuZGxlcnMuYwkzMSBEZWMgMjAwOCAxMToxNTozMiAtMDAwMAkxLjEz NS4yLjYuMi4yMi4yLjIzCisrKyBaZW5kL3plbmRfb2JqZWN0X2hhbmRsZXJzLmMJMSBKYW4g MjAwOSAxNjo0ODoyMiAtMDAwMApAQCAtNzkxLDYgKzc5MSwyNCBAQCBzdGF0aWMgdW5pb24g X3plbmRfZnVuY3Rpb24gKnplbmRfc3RkX2dlCiAKIAl6b2JqID0gWl9PQkpfUChvYmplY3Qp OwogCWlmICh6ZW5kX2hhc2hfZmluZCgmem9iai0+Y2UtPmZ1bmN0aW9uX3RhYmxlLCBsY19t ZXRob2RfbmFtZSwgbWV0aG9kX2xlbisxLCAodm9pZCAqKikmZmJjKSA9PSBGQUlMVVJFKSB7 CisJCXp2YWwgKipjYWxsYWJsZSwgbWVtYmVyOworCQl6ZW5kX3Byb3BlcnR5X2luZm8gKnBy b3BlcnR5X2luZm87CisKKwkJWlZBTF9TVFJJTkdMKCZtZW1iZXIsIG1ldGhvZF9uYW1lLCBt ZXRob2RfbGVuLCAwKTsKKwkJcHJvcGVydHlfaW5mbyA9IHplbmRfZ2V0X3Byb3BlcnR5X2lu Zm8oem9iai0+Y2UsICZtZW1iZXIsIDEgVFNSTUxTX0NDKTsKKworCQlpZiAocHJvcGVydHlf aW5mbyAmJiB6ZW5kX2hhc2hfcXVpY2tfZmluZCh6b2JqLT5wcm9wZXJ0aWVzLCBwcm9wZXJ0 eV9pbmZvLT5uYW1lLCBwcm9wZXJ0eV9pbmZvLT5uYW1lX2xlbmd0aCsxLCBwcm9wZXJ0eV9p bmZvLT5oLCAodm9pZCAqKikgJmNhbGxhYmxlKSA9PSBTVUNDRVNTKSB7CisJCQl6dmFsICpj YWxsYWJsZV9vYmo7CisJCQl6ZW5kX2NsYXNzX2VudHJ5ICpjZV9wdHI7CisKKwkJCWlmICha X1RZUEVfUFAoY2FsbGFibGUpID09IElTX09CSkVDVAorCQkJJiYgWl9PQkpfSEFORExFUl9Q UChjYWxsYWJsZSwgZ2V0X2Nsb3N1cmUpCisJCQkmJiBaX09CSl9IQU5ETEVSX1BQKGNhbGxh YmxlLCBnZXRfY2xvc3VyZSkoKmNhbGxhYmxlLCAmY2VfcHRyLCAmZmJjLCAmY2FsbGFibGVf b2JqIFRTUk1MU19DQykgPT0gU1VDQ0VTUykgeworCQkJCSpvYmplY3RfcHRyID0gY2FsbGFi bGVfb2JqOworCQkJCWZyZWVfYWxsb2NhKGxjX21ldGhvZF9uYW1lLCB1c2VfaGVhcCk7CisJ CQkJcmV0dXJuIGZiYzsKKwkJCX0KKwkJfSAKIAkJZnJlZV9hbGxvY2EobGNfbWV0aG9kX25h bWUsIHVzZV9oZWFwKTsKIAkJaWYgKHpvYmotPmNlLT5fX2NhbGwpIHsKIAkJCXplbmRfaW50 ZXJuYWxfZnVuY3Rpb24gKmNhbGxfdXNlcl9jYWxsID0gZW1hbGxvYyhzaXplb2YoemVuZF9p bnRlcm5hbF9mdW5jdGlvbikpOwpJbmRleDogWmVuZC90ZXN0cy9jbG9zdXJlXzAzMy5waHB0 Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IFplbmQvdGVzdHMvY2xvc3VyZV8wMzMucGhwdApk aWZmIC1OIFplbmQvdGVzdHMvY2xvc3VyZV8wMzMucGhwdAotLS0gL2Rldi9udWxsCTEgSmFu IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvY2xvc3VyZV8wMzMucGhwdAkx IEphbiAyMDA5IDE2OjQ4OjIzIC0wMDAwCkBAIC0wLDAgKzEsMTIyIEBACistLVRFU1QtLQor Q2xvc3VyZSAwMzM6IHZhcl9kdW1wKCkgb2YgYSBDbG9zdXJlCistLUZJTEUtLQorPD9waHAK KworJG91dGVyID0gMjU7CisKK2NsYXNzIFRlc3QgeworCXB1YmxpYyAkZnVuYzE7CisJcHVi bGljICR2YXIgPSA0MjsKKwlmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsKKwkJZ2xvYmFsICRv dXRlcjsKKwkJJHRoaXMtPmZ1bmMxID0gZnVuY3Rpb24oJHBhcmFtLCAkb3RoZXIgPSAiZGVm YXVsdCIpIHVzZSAoJG91dGVyKSB7CisJCX07CisJfQorfQorCiskbyA9IG5ldyBUZXN0Owor dmFyX2R1bXAoJG8tPmZ1bmMxKTsKKworJG8tPmZ1bmMyID0gZnVuY3Rpb24oJHBhcmFtLCAk b3RoZXIgPSAiZGVmYXVsdCIpIHVzZSAoJG91dGVyKSB7Cit9OworCit2YXJfZHVtcCgkby0+ ZnVuYzIpOworCiskZnVuYzMgPSBmdW5jdGlvbigkcGFyYW0sICRvdGhlciA9ICJkZWZhdWx0 IikgdXNlICgkb3V0ZXIpIHsKK307CisKK3Zhcl9kdW1wKCRmdW5jMyk7CisKKz8+Cis9PT1E T05FPT09CistLUVYUEVDVEYtLQorb2JqZWN0KENsb3N1cmUpIyVkICgzKSB7CisgIFsidGhp cyJdPT4KKyAgb2JqZWN0KFRlc3QpIyVkICgyKSB7CisgICAgWyJmdW5jMSJdPT4KKyAgICBv YmplY3QoQ2xvc3VyZSkjJWQgKDMpIHsKKyAgICAgIFsidGhpcyJdPT4KKyAgICAgIG9iamVj dChUZXN0KSMlZCAoMikgeworICAgICAgICBbImZ1bmMxIl09PgorICAgICAgICBvYmplY3Qo Q2xvc3VyZSkjJWQgKDMpIHsKKyAgICAgICAgICBbInRoaXMiXT0+CisgICAgICAgICAgKlJF Q1VSU0lPTioKKyAgICAgICAgICBbInN0YXRpYyJdPT4KKyAgICAgICAgICBhcnJheSgxKSB7 CisgICAgICAgICAgICBbIm91dGVyIl09PgorICAgICAgICAgICAgaW50KDI1KQorICAgICAg ICAgIH0KKyAgICAgICAgICBbInBhcmFtZXRlciJdPT4KKyAgICAgICAgICBhcnJheSgyKSB7 CisgICAgICAgICAgICBbIiRwYXJhbSJdPT4KKyAgICAgICAgICAgIHN0cmluZygxMCkgIjxy ZXF1aXJlZD4iCisgICAgICAgICAgICBbIiRvdGhlciJdPT4KKyAgICAgICAgICAgIHN0cmlu ZygxMCkgIjxvcHRpb25hbD4iCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFsi dmFyIl09PgorICAgICAgICBpbnQoNDIpCisgICAgICB9CisgICAgICBbInN0YXRpYyJdPT4K KyAgICAgIGFycmF5KDEpIHsKKyAgICAgICAgWyJvdXRlciJdPT4KKyAgICAgICAgaW50KDI1 KQorICAgICAgfQorICAgICAgWyJwYXJhbWV0ZXIiXT0+CisgICAgICBhcnJheSgyKSB7Cisg ICAgICAgIFsiJHBhcmFtIl09PgorICAgICAgICBzdHJpbmcoMTApICI8cmVxdWlyZWQ+Igor ICAgICAgICBbIiRvdGhlciJdPT4KKyAgICAgICAgc3RyaW5nKDEwKSAiPG9wdGlvbmFsPiIK KyAgICAgIH0KKyAgICB9CisgICAgWyJ2YXIiXT0+CisgICAgaW50KDQyKQorICB9CisgIFsi c3RhdGljIl09PgorICBhcnJheSgxKSB7CisgICAgWyJvdXRlciJdPT4KKyAgICBpbnQoMjUp CisgIH0KKyAgWyJwYXJhbWV0ZXIiXT0+CisgIGFycmF5KDIpIHsKKyAgICBbIiRwYXJhbSJd PT4KKyAgICBzdHJpbmcoMTApICI8cmVxdWlyZWQ+IgorICAgIFsiJG90aGVyIl09PgorICAg IHN0cmluZygxMCkgIjxvcHRpb25hbD4iCisgIH0KK30KK29iamVjdChDbG9zdXJlKSMlZCAo MykgeworICBbInRoaXMiXT0+CisgIE5VTEwKKyAgWyJzdGF0aWMiXT0+CisgIGFycmF5KDEp IHsKKyAgICBbIm91dGVyIl09PgorICAgICZpbnQoMjUpCisgIH0KKyAgWyJwYXJhbWV0ZXIi XT0+CisgIGFycmF5KDIpIHsKKyAgICBbIiRwYXJhbSJdPT4KKyAgICBzdHJpbmcoMTApICI8 cmVxdWlyZWQ+IgorICAgIFsiJG90aGVyIl09PgorICAgIHN0cmluZygxMCkgIjxvcHRpb25h bD4iCisgIH0KK30KK29iamVjdChDbG9zdXJlKSMlZCAoMykgeworICBbInRoaXMiXT0+Cisg IE5VTEwKKyAgWyJzdGF0aWMiXT0+CisgIGFycmF5KDEpIHsKKyAgICBbIm91dGVyIl09Pgor ICAgIGludCgyNSkKKyAgfQorICBbInBhcmFtZXRlciJdPT4KKyAgYXJyYXkoMikgeworICAg IFsiJHBhcmFtIl09PgorICAgIHN0cmluZygxMCkgIjxyZXF1aXJlZD4iCisgICAgWyIkb3Ro ZXIiXT0+CisgICAgc3RyaW5nKDEwKSAiPG9wdGlvbmFsPiIKKyAgfQorfQorPT09RE9ORT09 PQpJbmRleDogWmVuZC90ZXN0cy9jbG9zdXJlXzAzNC5waHB0Cj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IFplbmQvdGVzdHMvY2xvc3VyZV8wMzQucGhwdApkaWZmIC1OIFplbmQvdGVzdHMv Y2xvc3VyZV8wMzQucGhwdAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAw MDAKKysrIFplbmQvdGVzdHMvY2xvc3VyZV8wMzQucGhwdAkxIEphbiAyMDA5IDE2OjQ4OjIz IC0wMDAwCkBAIC0wLDAgKzEsNDUgQEAKKy0tVEVTVC0tCitDbG9zdXJlIDAzNDogQ2FsbGlu ZyBwcm9wZXJ0eSBDbG9zdXJlCistLUZJTEUtLQorPD9waHAKKworY2xhc3MgVGVzdCB7CisJ cHVibGljICRmdW5jOworCWZ1bmN0aW9uIF9fY29uc3RydWN0KCkgeworCQkkdGhpcy0+ZnVu YyA9IGZ1bmN0aW9uKCkgeworCQkJZWNobyBfX01FVEhPRF9fIC4gIigpXG4iOworCQl9Owor CX0KK30KKworJG8gPSBuZXcgVGVzdDsKK1JlZmxlY3Rpb25Qcm9wZXJ0eTo6ZXhwb3J0KCRv LCAnZnVuYycpOwordmFyX2R1bXAoJG8tPmZ1bmMpOworJGYgPSAkby0+ZnVuYzsKKyRmKCk7 Ciskby0+ZnVuYygpOworCis/PgorPT09RE9ORT09PQorLS1FWFBFQ1RGLS0KK1Byb3BlcnR5 IFsgPGRlZmF1bHQ+IHB1YmxpYyAkZnVuYyBdCisKK29iamVjdChDbG9zdXJlKSMlZCAoMSkg eworICBbInRoaXMiXT0+CisgIG9iamVjdChUZXN0KSMlZCAoMSkgeworICAgIFsiZnVuYyJd PT4KKyAgICBvYmplY3QoQ2xvc3VyZSkjJWQgKDEpIHsKKyAgICAgIFsidGhpcyJdPT4KKyAg ICAgIG9iamVjdChUZXN0KSMlZCAoMSkgeworICAgICAgICBbImZ1bmMiXT0+CisgICAgICAg IG9iamVjdChDbG9zdXJlKSMlZCAoMSkgeworICAgICAgICAgIFsidGhpcyJdPT4KKyAgICAg ICAgICAqUkVDVVJTSU9OKgorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CitU ZXN0Ojp7Y2xvc3VyZX0oKQorVGVzdDo6e2Nsb3N1cmV9KCkKKz09PURPTkU9PT0KSW5kZXg6 IFplbmQvdGVzdHMvY2xvc3VyZV8wMzUucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBa ZW5kL3Rlc3RzL2Nsb3N1cmVfMDM1LnBocHQKZGlmZiAtTiBaZW5kL3Rlc3RzL2Nsb3N1cmVf MDM1LnBocHQKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBa ZW5kL3Rlc3RzL2Nsb3N1cmVfMDM1LnBocHQJMSBKYW4gMjAwOSAxNjo0ODoyMyAtMDAwMApA QCAtMCwwICsxLDQ2IEBACistLVRFU1QtLQorQ2xvc3VyZSAwMzU6IENhbGxpbmcgcHJvcGVy dHkgc3VwcG9ydGluZyBfX2ludm9rZQorLS1GSUxFLS0KKzw/cGhwCisKK2NsYXNzIEN1cnJ5 Cit7CisgIHByb3RlY3RlZCAkY2FsbGFibGU7CisgIHByb3RlY3RlZCAkYXJnczsKKworICBw dWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZSgkY2FsbGFibGUpCisgIHsKKyAgICAkY3Vy cnkgPSBuZXcgc2VsZigkY2FsbGFibGUsIGFycmF5X3NsaWNlKGZ1bmNfZ2V0X2FyZ3MoKSwg MSkpOworICAgIHJldHVybiAkY3Vycnk7CisgIH0KKworICBwcm90ZWN0ZWQgZnVuY3Rpb24g X19jb25zdHJ1Y3QoJGNhbGxhYmxlLCAkYXJncykKKyAgeworICAgICR0aGlzLT5jYWxsYWJs ZSA9ICRjYWxsYWJsZTsKKyAgICAkdGhpcy0+YXJncyA9ICRhcmdzOworICB9CisKKyAgcHVi bGljIGZ1bmN0aW9uIF9faW52b2tlKCkKKyAgeworICAgIHJldHVybiBjYWxsX3VzZXJfZnVu Y19hcnJheSgkdGhpcy0+Y2FsbGFibGUsIGFycmF5X21lcmdlKCR0aGlzLT5hcmdzLCBmdW5j X2dldF9hcmdzKCkpKTsKKyAgfQorfQorCiskZCA9IG5ldyBEYXRlVGltZSgpOworJGdldEF0 b20gPSBDdXJyeTo6Y3JlYXRlKGFycmF5KCRkLCAnZm9ybWF0JyksIERBVEVfQVRPTSk7Cit2 YXJfZHVtcChpc19DYWxsYWJsZSgkZ2V0QXRvbSkpOwordmFyX2R1bXAoJGdldEF0b20oKSk7 CisKKyRkID0gbmV3IERhdGVUaW1lKCk7CiskZC0+Z2V0QXRvbSA9IEN1cnJ5OjpjcmVhdGUo YXJyYXkoJGQsICdmb3JtYXQnKSwgREFURV9BVE9NKTsKK3Zhcl9kdW1wKGlzX0NhbGxhYmxl KCRkLT5nZXRBdG9tKSk7Cit2YXJfZHVtcCgkZC0+Z2V0QXRvbSgpKTsKKworPz4KKz09PURP TkU9PT0KKy0tRVhQRUNURi0tCitib29sKHRydWUpCitzdHJpbmcoJWQpICIyJWQtJWQtJWRU JWQ6JWQ6JWQlcyIKK2Jvb2wodHJ1ZSkKK3N0cmluZyglZCkgIjIlZC0lZC0lZFQlZDolZDol ZCVzIgorPT09RE9ORT09PQpJbmRleDogWmVuZC90ZXN0cy9jbG9zdXJlXzAzNi5waHB0Cj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IFplbmQvdGVzdHMvY2xvc3VyZV8wMzYucGhwdApkaWZm IC1OIFplbmQvdGVzdHMvY2xvc3VyZV8wMzYucGhwdAotLS0gL2Rldi9udWxsCTEgSmFuIDE5 NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvY2xvc3VyZV8wMzYucGhwdAkxIEph biAyMDA5IDE2OjQ4OjIzIC0wMDAwCkBAIC0wLDAgKzEsNDMgQEAKKy0tVEVTVC0tCitDbG9z dXJlIDAzNjogQ2FsbGluZyBkeW5hbWljIHByb3BlcnR5IENsb3N1cmUgKG5vdCBzdXBwb3J0 ZWQpCistLUZJTEUtLQorPD9waHAKKworY2xhc3MgVGVzdCB7CisJcHVibGljICRtZXRob2Rz ID0gYXJyYXkoKTsKKwlmdW5jdGlvbiBfX2lzc2V0KCRuYW1lKSB7CisJCWVjaG8gX19NRVRI T0RfXyAuICIoJG5hbWUpXG4iOworCQlyZXR1cm4gaXNzZXQoJHRoaXMtPm1ldGhvZHNbJG5h bWVdKTsKKwl9CisJZnVuY3Rpb24gX19nZXQoJG5hbWUpIHsKKwkJZWNobyBfX01FVEhPRF9f IC4gIigkbmFtZSlcbiI7CisJCXJldHVybiAkdGhpcy0+bWV0aG9kc1skbmFtZV07CisJfQor CWZ1bmN0aW9uIF9fc2V0KCRuYW1lLCAkZGF0YSkgeworCQllY2hvIF9fTUVUSE9EX18gLiAi KCRuYW1lKVxuIjsKKwkJJHRoaXMtPm1ldGhvZHNbJG5hbWVdID0gJGRhdGE7CisJfQorCWZ1 bmN0aW9uIF9fdG9TdHJpbmcoKSB7CisJCXJldHVybiBfX0NMQVNTX187CisJfQorfQorCisk byA9IG5ldyBUZXN0OwordmFyX2R1bXAoaXNzZXQoJG8tPmZ1bmMpKTsKKyRvLT5mdW5jID0g ZnVuY3Rpb24oKSB7CisJZWNobyBfX01FVEhPRF9fIC4gIigiIC4gdmFyX2V4cG9ydCgkdGhp cywgdHJ1ZSkgLiAiKVxuIjsKK307Cit2YXJfZHVtcChpc3NldCgkby0+ZnVuYykpOworJG8t PmZ1bmMoKTsKK3Zhcl9kdW1wKCRvLT5mdW5jKTsKKworPz4KKz09PURPTkU9PT0KKy0tRVhQ RUNURi0tCitUZXN0OjpfX2lzc2V0KGZ1bmMpCitib29sKGZhbHNlKQorVGVzdDo6X19zZXQo ZnVuYykKK1Rlc3Q6Ol9faXNzZXQoZnVuYykKK2Jvb2wodHJ1ZSkKKworRmF0YWwgZXJyb3I6 IENhbGwgdG8gdW5kZWZpbmVkIG1ldGhvZCBUZXN0OjpmdW5jKCkgaW4gJXNjbG9zdXJlXzAz Ni5waHAgb24gbGluZSAlZApJbmRleDogWmVuZC90ZXN0cy9jbG9zdXJlXzAzNy5waHB0Cj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IFplbmQvdGVzdHMvY2xvc3VyZV8wMzcucGhwdApkaWZm IC1OIFplbmQvdGVzdHMvY2xvc3VyZV8wMzcucGhwdAotLS0gL2Rldi9udWxsCTEgSmFuIDE5 NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvY2xvc3VyZV8wMzcucGhwdAkxIEph biAyMDA5IDE2OjQ4OjIzIC0wMDAwCkBAIC0wLDAgKzEsMzEgQEAKKy0tVEVTVC0tCitDbG9z dXJlIDAzNzogQ2FsbGluZyBjbG9zdXJlIHByb3BlcnR5IHZpYSB2YXJpYWJsZQorLS1GSUxF LS0KKzw/cGhwCisKK2NsYXNzIFRlc3QgeworCXB1YmxpYyAkZnVuYzE7CisJZnVuY3Rpb24g X19jb25zdHJ1Y3QoKSB7CisJCSR0aGlzLT5mdW5jMSA9IGZ1bmN0aW9uKCkgeworCQkJZWNo byBfX01FVEhPRF9fIC4gIigpXG4iOworCQl9OworCX0KK30KKworJG8gPSBuZXcgVGVzdDsK KyRuID0gJ2Z1bmMxJzsKKyRvLT4kbigpOworCiskby0+ZnVuYzIgPSBmdW5jdGlvbigpIHsK KwllY2hvIF9fTUVUSE9EX18gLiAiKClcbiI7Cit9OworCiskbiA9ICdmdW5jMic7Ciskby0+ JG4oKTsKKworPz4KKz09PURPTkU9PT0KKy0tRVhQRUNURi0tCitUZXN0Ojp7Y2xvc3VyZX0o KQore2Nsb3N1cmV9KCkKKz09PURPTkU9PT0K ------------1A1C4BB2CB0504B Content-Type: text/plain; name="ze2-callable-properties-6.0-20090101-d.diff.txt" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="ze2-callable-properties-6.0-20090101-d.diff.txt" SW5kZXg6IFplbmQvemVuZF9vYmplY3RfaGFuZGxlcnMuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvcmVwb3NpdG9yeS9aZW5kRW5naW5lMi96ZW5kX29iamVjdF9oYW5kbGVycy5jLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjIwOApkaWZmIC11IC1wIC1kIC1yMS4yMDggemVuZF9v YmplY3RfaGFuZGxlcnMuYwotLS0gWmVuZC96ZW5kX29iamVjdF9oYW5kbGVycy5jCTMxIERl YyAyMDA4IDExOjEyOjI5IC0wMDAwCTEuMjA4CisrKyBaZW5kL3plbmRfb2JqZWN0X2hhbmRs ZXJzLmMJMSBKYW4gMjAwOSAxNjo0ODo1NiAtMDAwMApAQCAtODAxLDYgKzgwMSwyNCBAQCBz dGF0aWMgdW5pb24gX3plbmRfZnVuY3Rpb24gKnplbmRfc3RkX2dlCiAKIAl6b2JqID0gWl9P QkpfUChvYmplY3QpOwogCWlmICh6ZW5kX3VfaGFzaF9maW5kKCZ6b2JqLT5jZS0+ZnVuY3Rp b25fdGFibGUsIHR5cGUsIGxjX21ldGhvZF9uYW1lLCBsY19tZXRob2RfbmFtZV9sZW4rMSwg KHZvaWQgKiopJmZiYykgPT0gRkFJTFVSRSkgeworCQl6dmFsICoqY2FsbGFibGUsIG1lbWJl cjsKKwkJemVuZF9wcm9wZXJ0eV9pbmZvICpwcm9wZXJ0eV9pbmZvOworCisJCVpWQUxfVEVY VEwoJm1lbWJlciwgbWV0aG9kX25hbWUsIG1ldGhvZF9sZW4sIDApOworCQlwcm9wZXJ0eV9p bmZvID0gemVuZF9nZXRfcHJvcGVydHlfaW5mbyh6b2JqLT5jZSwgJm1lbWJlciwgMSBUU1JN TFNfQ0MpOworCisJCWlmIChwcm9wZXJ0eV9pbmZvICYmIHplbmRfdV9oYXNoX3F1aWNrX2Zp bmQoem9iai0+cHJvcGVydGllcywgWl9UWVBFKG1lbWJlciksIHByb3BlcnR5X2luZm8tPm5h bWUsIHByb3BlcnR5X2luZm8tPm5hbWVfbGVuZ3RoKzEsIHByb3BlcnR5X2luZm8tPmgsICh2 b2lkICoqKSAmY2FsbGFibGUpID09IFNVQ0NFU1MpIHsKKwkJCXp2YWwgKmNhbGxhYmxlX29i ajsKKwkJCXplbmRfY2xhc3NfZW50cnkgKmNlX3B0cjsKKworCQkJaWYgKFpfVFlQRV9QUChj YWxsYWJsZSkgPT0gSVNfT0JKRUNUCisJCQkmJiBaX09CSl9IQU5ETEVSX1BQKGNhbGxhYmxl LCBnZXRfY2xvc3VyZSkKKwkJCSYmIFpfT0JKX0hBTkRMRVJfUFAoY2FsbGFibGUsIGdldF9j bG9zdXJlKSgqY2FsbGFibGUsICZjZV9wdHIsICZmYmMsICZjYWxsYWJsZV9vYmogVFNSTUxT X0NDKSA9PSBTVUNDRVNTKSB7CisJCQkJKm9iamVjdF9wdHIgPSBjYWxsYWJsZV9vYmo7CisJ CQkJZWZyZWUobGNfbWV0aG9kX25hbWUudik7CisJCQkJcmV0dXJuIGZiYzsKKwkJCX0KKwkJ fSAKIAkJZWZyZWUobGNfbWV0aG9kX25hbWUudik7CiAJCWlmICh6b2JqLT5jZS0+X19jYWxs KSB7CiAJCQl6ZW5kX2ludGVybmFsX2Z1bmN0aW9uICpjYWxsX3VzZXJfY2FsbCA9IGVtYWxs b2Moc2l6ZW9mKHplbmRfaW50ZXJuYWxfZnVuY3Rpb24pKTsKSW5kZXg6IFplbmQvdGVzdHMv Y2xvc3VyZV8wMzMucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2Ns b3N1cmVfMDMzLnBocHQKZGlmZiAtTiBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDMzLnBocHQKLS0t IC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBaZW5kL3Rlc3RzL2Ns b3N1cmVfMDMzLnBocHQJMSBKYW4gMjAwOSAxNjo0ODo1NiAtMDAwMApAQCAtMCwwICsxLDEy MiBAQAorLS1URVNULS0KK0Nsb3N1cmUgMDMzOiB2YXJfZHVtcCgpIG9mIGEgQ2xvc3VyZQor LS1GSUxFLS0KKzw/cGhwCisKKyRvdXRlciA9IDI1OworCitjbGFzcyBUZXN0IHsKKwlwdWJs aWMgJGZ1bmMxOworCXB1YmxpYyAkdmFyID0gNDI7CisJZnVuY3Rpb24gX19jb25zdHJ1Y3Qo KSB7CisJCWdsb2JhbCAkb3V0ZXI7CisJCSR0aGlzLT5mdW5jMSA9IGZ1bmN0aW9uKCRwYXJh bSwgJG90aGVyID0gImRlZmF1bHQiKSB1c2UgKCRvdXRlcikgeworCQl9OworCX0KK30KKwor JG8gPSBuZXcgVGVzdDsKK3Zhcl9kdW1wKCRvLT5mdW5jMSk7CisKKyRvLT5mdW5jMiA9IGZ1 bmN0aW9uKCRwYXJhbSwgJG90aGVyID0gImRlZmF1bHQiKSB1c2UgKCRvdXRlcikgeworfTsK KwordmFyX2R1bXAoJG8tPmZ1bmMyKTsKKworJGZ1bmMzID0gZnVuY3Rpb24oJHBhcmFtLCAk b3RoZXIgPSAiZGVmYXVsdCIpIHVzZSAoJG91dGVyKSB7Cit9OworCit2YXJfZHVtcCgkZnVu YzMpOworCis/PgorPT09RE9ORT09PQorLS1FWFBFQ1RGLS0KK29iamVjdChDbG9zdXJlKSMl ZCAoMykgeworICBbInRoaXMiXT0+CisgIG9iamVjdChUZXN0KSMlZCAoMikgeworICAgIFt1 ImZ1bmMxIl09PgorICAgIG9iamVjdChDbG9zdXJlKSMlZCAoMykgeworICAgICAgWyJ0aGlz Il09PgorICAgICAgb2JqZWN0KFRlc3QpIyVkICgyKSB7CisgICAgICAgIFt1ImZ1bmMxIl09 PgorICAgICAgICBvYmplY3QoQ2xvc3VyZSkjJWQgKDMpIHsKKyAgICAgICAgICBbInRoaXMi XT0+CisgICAgICAgICAgKlJFQ1VSU0lPTioKKyAgICAgICAgICBbInN0YXRpYyJdPT4KKyAg ICAgICAgICBhcnJheSgxKSB7CisgICAgICAgICAgICBbdSJvdXRlciJdPT4KKyAgICAgICAg ICAgIGludCgyNSkKKyAgICAgICAgICB9CisgICAgICAgICAgWyJwYXJhbWV0ZXIiXT0+Cisg ICAgICAgICAgYXJyYXkoMikgeworICAgICAgICAgICAgWyIkcGFyYW0iXT0+CisgICAgICAg ICAgICBzdHJpbmcoMTApICI8cmVxdWlyZWQ+IgorICAgICAgICAgICAgWyIkb3RoZXIiXT0+ CisgICAgICAgICAgICBzdHJpbmcoMTApICI8b3B0aW9uYWw+IgorICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgICBbdSJ2YXIiXT0+CisgICAgICAgIGludCg0MikKKyAgICAgIH0K KyAgICAgIFsic3RhdGljIl09PgorICAgICAgYXJyYXkoMSkgeworICAgICAgICBbdSJvdXRl ciJdPT4KKyAgICAgICAgaW50KDI1KQorICAgICAgfQorICAgICAgWyJwYXJhbWV0ZXIiXT0+ CisgICAgICBhcnJheSgyKSB7CisgICAgICAgIFsiJHBhcmFtIl09PgorICAgICAgICBzdHJp bmcoMTApICI8cmVxdWlyZWQ+IgorICAgICAgICBbIiRvdGhlciJdPT4KKyAgICAgICAgc3Ry aW5nKDEwKSAiPG9wdGlvbmFsPiIKKyAgICAgIH0KKyAgICB9CisgICAgW3UidmFyIl09Pgor ICAgIGludCg0MikKKyAgfQorICBbInN0YXRpYyJdPT4KKyAgYXJyYXkoMSkgeworICAgIFt1 Im91dGVyIl09PgorICAgIGludCgyNSkKKyAgfQorICBbInBhcmFtZXRlciJdPT4KKyAgYXJy YXkoMikgeworICAgIFsiJHBhcmFtIl09PgorICAgIHN0cmluZygxMCkgIjxyZXF1aXJlZD4i CisgICAgWyIkb3RoZXIiXT0+CisgICAgc3RyaW5nKDEwKSAiPG9wdGlvbmFsPiIKKyAgfQor fQorb2JqZWN0KENsb3N1cmUpIyVkICgzKSB7CisgIFsidGhpcyJdPT4KKyAgTlVMTAorICBb InN0YXRpYyJdPT4KKyAgYXJyYXkoMSkgeworICAgIFt1Im91dGVyIl09PgorICAgICZpbnQo MjUpCisgIH0KKyAgWyJwYXJhbWV0ZXIiXT0+CisgIGFycmF5KDIpIHsKKyAgICBbIiRwYXJh bSJdPT4KKyAgICBzdHJpbmcoMTApICI8cmVxdWlyZWQ+IgorICAgIFsiJG90aGVyIl09Pgor ICAgIHN0cmluZygxMCkgIjxvcHRpb25hbD4iCisgIH0KK30KK29iamVjdChDbG9zdXJlKSMl ZCAoMykgeworICBbInRoaXMiXT0+CisgIE5VTEwKKyAgWyJzdGF0aWMiXT0+CisgIGFycmF5 KDEpIHsKKyAgICBbdSJvdXRlciJdPT4KKyAgICBpbnQoMjUpCisgIH0KKyAgWyJwYXJhbWV0 ZXIiXT0+CisgIGFycmF5KDIpIHsKKyAgICBbIiRwYXJhbSJdPT4KKyAgICBzdHJpbmcoMTAp ICI8cmVxdWlyZWQ+IgorICAgIFsiJG90aGVyIl09PgorICAgIHN0cmluZygxMCkgIjxvcHRp b25hbD4iCisgIH0KK30KKz09PURPTkU9PT0KSW5kZXg6IFplbmQvdGVzdHMvY2xvc3VyZV8w MzQucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDM0 LnBocHQKZGlmZiAtTiBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDM0LnBocHQKLS0tIC9kZXYvbnVs bAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDM0 LnBocHQJMSBKYW4gMjAwOSAxNjo0ODo1NiAtMDAwMApAQCAtMCwwICsxLDQ1IEBACistLVRF U1QtLQorQ2xvc3VyZSAwMzQ6IENhbGxpbmcgcHJvcGVydHkgQ2xvc3VyZQorLS1GSUxFLS0K Kzw/cGhwCisKK2NsYXNzIFRlc3QgeworCXB1YmxpYyAkZnVuYzsKKwlmdW5jdGlvbiBfX2Nv bnN0cnVjdCgpIHsKKwkJJHRoaXMtPmZ1bmMgPSBmdW5jdGlvbigpIHsKKwkJCWVjaG8gX19N RVRIT0RfXyAuICIoKVxuIjsKKwkJfTsKKwl9Cit9CisKKyRvID0gbmV3IFRlc3Q7CitSZWZs ZWN0aW9uUHJvcGVydHk6OmV4cG9ydCgkbywgJ2Z1bmMnKTsKK3Zhcl9kdW1wKCRvLT5mdW5j KTsKKyRmID0gJG8tPmZ1bmM7CiskZigpOworJG8tPmZ1bmMoKTsKKworPz4KKz09PURPTkU9 PT0KKy0tRVhQRUNURi0tCitQcm9wZXJ0eSBbIDxkZWZhdWx0PiBwdWJsaWMgJGZ1bmMgXQor CitvYmplY3QoQ2xvc3VyZSkjJWQgKDEpIHsKKyAgWyJ0aGlzIl09PgorICBvYmplY3QoVGVz dCkjJWQgKDEpIHsKKyAgICBbdSJmdW5jIl09PgorICAgIG9iamVjdChDbG9zdXJlKSMlZCAo MSkgeworICAgICAgWyJ0aGlzIl09PgorICAgICAgb2JqZWN0KFRlc3QpIyVkICgxKSB7Cisg ICAgICAgIFt1ImZ1bmMiXT0+CisgICAgICAgIG9iamVjdChDbG9zdXJlKSMlZCAoMSkgewor ICAgICAgICAgIFsidGhpcyJdPT4KKyAgICAgICAgICAqUkVDVVJTSU9OKgorICAgICAgICB9 CisgICAgICB9CisgICAgfQorICB9Cit9CitUZXN0Ojp7Y2xvc3VyZX0oKQorVGVzdDo6e2Ns b3N1cmV9KCkKKz09PURPTkU9PT0KSW5kZXg6IFplbmQvdGVzdHMvY2xvc3VyZV8wMzUucGhw dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDM1LnBocHQK ZGlmZiAtTiBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDM1LnBocHQKLS0tIC9kZXYvbnVsbAkxIEph biAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDM1LnBocHQJ MSBKYW4gMjAwOSAxNjo0ODo1NiAtMDAwMApAQCAtMCwwICsxLDQ2IEBACistLVRFU1QtLQor Q2xvc3VyZSAwMzU6IENhbGxpbmcgcHJvcGVydHkgc3VwcG9ydGluZyBfX2ludm9rZQorLS1G SUxFLS0KKzw/cGhwCisKK2NsYXNzIEN1cnJ5Cit7CisgIHByb3RlY3RlZCAkY2FsbGFibGU7 CisgIHByb3RlY3RlZCAkYXJnczsKKworICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0 ZSgkY2FsbGFibGUpCisgIHsKKyAgICAkY3VycnkgPSBuZXcgc2VsZigkY2FsbGFibGUsIGFy cmF5X3NsaWNlKGZ1bmNfZ2V0X2FyZ3MoKSwgMSkpOworICAgIHJldHVybiAkY3Vycnk7Cisg IH0KKworICBwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGNhbGxhYmxlLCAkYXJn cykKKyAgeworICAgICR0aGlzLT5jYWxsYWJsZSA9ICRjYWxsYWJsZTsKKyAgICAkdGhpcy0+ YXJncyA9ICRhcmdzOworICB9CisKKyAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKCkKKyAg eworICAgIHJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheSgkdGhpcy0+Y2FsbGFibGUsIGFy cmF5X21lcmdlKCR0aGlzLT5hcmdzLCBmdW5jX2dldF9hcmdzKCkpKTsKKyAgfQorfQorCisk ZCA9IG5ldyBEYXRlVGltZSgpOworJGdldEF0b20gPSBDdXJyeTo6Y3JlYXRlKGFycmF5KCRk LCAnZm9ybWF0JyksIERBVEVfQVRPTSk7Cit2YXJfZHVtcChpc19DYWxsYWJsZSgkZ2V0QXRv bSkpOwordmFyX2R1bXAoJGdldEF0b20oKSk7CisKKyRkID0gbmV3IERhdGVUaW1lKCk7Cisk ZC0+Z2V0QXRvbSA9IEN1cnJ5OjpjcmVhdGUoYXJyYXkoJGQsICdmb3JtYXQnKSwgREFURV9B VE9NKTsKK3Zhcl9kdW1wKGlzX0NhbGxhYmxlKCRkLT5nZXRBdG9tKSk7Cit2YXJfZHVtcCgk ZC0+Z2V0QXRvbSgpKTsKKworPz4KKz09PURPTkU9PT0KKy0tRVhQRUNURi0tCitib29sKHRy dWUpCit1bmljb2RlKCVkKSAiMiVkLSVkLSVkVCVkOiVkOiVkJXMiCitib29sKHRydWUpCit1 bmljb2RlKCVkKSAiMiVkLSVkLSVkVCVkOiVkOiVkJXMiCis9PT1ET05FPT09CkluZGV4OiBa ZW5kL3Rlc3RzL2Nsb3N1cmVfMDM2LnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogWmVu ZC90ZXN0cy9jbG9zdXJlXzAzNi5waHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9jbG9zdXJlXzAz Ni5waHB0Ci0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgWmVu ZC90ZXN0cy9jbG9zdXJlXzAzNi5waHB0CTEgSmFuIDIwMDkgMTY6NDg6NTYgLTAwMDAKQEAg LTAsMCArMSw0MyBAQAorLS1URVNULS0KK0Nsb3N1cmUgMDM2OiBDYWxsaW5nIGR5bmFtaWMg cHJvcGVydHkgQ2xvc3VyZSAobm90IHN1cHBvcnRlZCkKKy0tRklMRS0tCis8P3BocAorCitj bGFzcyBUZXN0IHsKKwlwdWJsaWMgJG1ldGhvZHMgPSBhcnJheSgpOworCWZ1bmN0aW9uIF9f aXNzZXQoJG5hbWUpIHsKKwkJZWNobyBfX01FVEhPRF9fIC4gIigkbmFtZSlcbiI7CisJCXJl dHVybiBpc3NldCgkdGhpcy0+bWV0aG9kc1skbmFtZV0pOworCX0KKwlmdW5jdGlvbiBfX2dl dCgkbmFtZSkgeworCQllY2hvIF9fTUVUSE9EX18gLiAiKCRuYW1lKVxuIjsKKwkJcmV0dXJu ICR0aGlzLT5tZXRob2RzWyRuYW1lXTsKKwl9CisJZnVuY3Rpb24gX19zZXQoJG5hbWUsICRk YXRhKSB7CisJCWVjaG8gX19NRVRIT0RfXyAuICIoJG5hbWUpXG4iOworCQkkdGhpcy0+bWV0 aG9kc1skbmFtZV0gPSAkZGF0YTsKKwl9CisJZnVuY3Rpb24gX190b1N0cmluZygpIHsKKwkJ cmV0dXJuIF9fQ0xBU1NfXzsKKwl9Cit9CisKKyRvID0gbmV3IFRlc3Q7Cit2YXJfZHVtcChp c3NldCgkby0+ZnVuYykpOworJG8tPmZ1bmMgPSBmdW5jdGlvbigpIHsKKwllY2hvIF9fTUVU SE9EX18gLiAiKCIgLiB2YXJfZXhwb3J0KCR0aGlzLCB0cnVlKSAuICIpXG4iOworfTsKK3Zh cl9kdW1wKGlzc2V0KCRvLT5mdW5jKSk7Ciskby0+ZnVuYygpOwordmFyX2R1bXAoJG8tPmZ1 bmMpOworCis/PgorPT09RE9ORT09PQorLS1FWFBFQ1RGLS0KK1Rlc3Q6Ol9faXNzZXQoZnVu YykKK2Jvb2woZmFsc2UpCitUZXN0OjpfX3NldChmdW5jKQorVGVzdDo6X19pc3NldChmdW5j KQorYm9vbCh0cnVlKQorCitGYXRhbCBlcnJvcjogQ2FsbCB0byB1bmRlZmluZWQgbWV0aG9k IFRlc3Q6OmZ1bmMoKSBpbiAlc2Nsb3N1cmVfMDM2LnBocCBvbiBsaW5lICVkCkluZGV4OiBa ZW5kL3Rlc3RzL2Nsb3N1cmVfMDM3LnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogWmVu ZC90ZXN0cy9jbG9zdXJlXzAzNy5waHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9jbG9zdXJlXzAz Ny5waHB0Ci0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgWmVu ZC90ZXN0cy9jbG9zdXJlXzAzNy5waHB0CTEgSmFuIDIwMDkgMTY6NDg6NTYgLTAwMDAKQEAg LTAsMCArMSwzMSBAQAorLS1URVNULS0KK0Nsb3N1cmUgMDM3OiBDYWxsaW5nIGNsb3N1cmUg cHJvcGVydHkgdmlhIHZhcmlhYmxlCistLUZJTEUtLQorPD9waHAKKworY2xhc3MgVGVzdCB7 CisJcHVibGljICRmdW5jMTsKKwlmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsKKwkJJHRoaXMt PmZ1bmMxID0gZnVuY3Rpb24oKSB7CisJCQllY2hvIF9fTUVUSE9EX18gLiAiKClcbiI7CisJ CX07CisJfQorfQorCiskbyA9IG5ldyBUZXN0OworJG4gPSAnZnVuYzEnOworJG8tPiRuKCk7 CisKKyRvLT5mdW5jMiA9IGZ1bmN0aW9uKCkgeworCWVjaG8gX19NRVRIT0RfXyAuICIoKVxu IjsKK307CisKKyRuID0gJ2Z1bmMyJzsKKyRvLT4kbigpOworCis/PgorPT09RE9ORT09PQor LS1FWFBFQ1RGLS0KK1Rlc3Q6OntjbG9zdXJlfSgpCit7Y2xvc3VyZX0oKQorPT09RE9ORT09 PQo= ------------1A1C4BB2CB0504B--