Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:42435 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 4157 invoked from network); 1 Jan 2009 15:12:36 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 1 Jan 2009 15:12:36 -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:49692] helo=h1149922.serverkompetenz.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id AF/87-62500-16DDC594 for ; Thu, 01 Jan 2009 10:12:36 -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 78E0411F537; Thu, 1 Jan 2009 16:12:29 +0100 (CET) Date: Thu, 1 Jan 2009 16:09:39 +0100 Reply-To: Marcus Boerger X-Priority: 3 (Normal) Message-ID: <18322421.20090101160939@marcus-boerger.de> To: "Hannes Magnusson" CC: "Marcus Boerger" , "Lars Strojny" , =?iso-8859-1?Q?David_Z=FClke?= , "PHP Internals" In-Reply-To: <7f3ed2c30812311133m708bcab1s746f9ca7c3129542@mail.gmail.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> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------AD01AF21053D1" Subject: Re: [PHP-DEV] [RFC] Re: [PHP-DEV] __invoke() weirdness From: helly@php.net (Marcus Boerger) ------------AD01AF21053D1 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit 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 ------------AD01AF21053D1 Content-Type: text/plain; name="ze2-callable-properties-5.3-20090101.diff.txt" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="ze2-callable-properties-5.3-20090101.diff.txt" SW5kZXg6IFplbmQvemVuZF9jbG9zdXJlcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9y ZXBvc2l0b3J5L1plbmRFbmdpbmUyL3plbmRfY2xvc3VyZXMuYyx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS4zLjIuMTcKZGlmZiAtdSAtcCAtZCAtcjEuMy4yLjE3IHplbmRfY2xvc3VyZXMu YwotLS0gWmVuZC96ZW5kX2Nsb3N1cmVzLmMJMzEgRGVjIDIwMDggMTE6MTU6MzEgLTAwMDAJ MS4zLjIuMTcKKysrIFplbmQvemVuZF9jbG9zdXJlcy5jCTEgSmFuIDIwMDkgMTU6MDU6NTkg LTAwMDAKQEAgLTE0LDYgKzE0LDcgQEAKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBB dXRob3JzOiBDaHJpc3RpYW4gU2VpbGVyIDxjaHJpc19zZUBnbXgubmV0PiAgICAgICAgICAg ICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgIERtaXRyeSBTdG9nb3YgPGRtaXRyeUB6 ZW5kLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAg TWFyY3VzIEJvZXJnZXIgPGhlbGx5QHBocC5uZXQ+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAqLwogCkBAIC0yMiw2ICsyMyw3IEBA CiAjaW5jbHVkZSAiemVuZC5oIgogI2luY2x1ZGUgInplbmRfQVBJLmgiCiAjaW5jbHVkZSAi emVuZF9jbG9zdXJlcy5oIgorI2luY2x1ZGUgInplbmRfZXhjZXB0aW9ucy5oIgogI2luY2x1 ZGUgInplbmRfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInplbmRfb2JqZWN0cy5oIgogI2lu Y2x1ZGUgInplbmRfb2JqZWN0c19BUEkuaCIKQEAgLTIyMiw2ICsyMjQsNTkgQEAgaW50IHpl bmRfY2xvc3VyZV9nZXRfY2xvc3VyZSh6dmFsICpvYmosIAogfQogLyogfX19ICovCiAKK1pF TkRfQVBJIEhhc2hUYWJsZSAqemVuZF9jbG9zdXJlX2dldF9kZWJ1Z19pbmZvKHp2YWwgKm9i amVjdCwgaW50ICppc190ZW1wIFRTUk1MU19EQykgLyoge3t7ICovCit7CisJemVuZF9jbG9z dXJlICpjbG9zdXJlID0gKHplbmRfY2xvc3VyZSAqKXplbmRfb2JqZWN0X3N0b3JlX2dldF9v YmplY3Qob2JqZWN0IFRTUk1MU19DQyk7CisJSGFzaFRhYmxlICpydjsKKwl6dmFsICp2YWw7 CisJc3RydWN0IF96ZW5kX2FyZ19pbmZvICphcmdfaW5mbyA9IGNsb3N1cmUtPmZ1bmMuY29t bW9uLmFyZ19pbmZvOworCisJKmlzX3RlbXAgPSAxOworCUFMTE9DX0hBU0hUQUJMRShydik7 CisJemVuZF9oYXNoX2luaXQocnYsIDEsIE5VTEwsIFpWQUxfUFRSX0RUT1IsIDApOworCXZh bCA9IGNsb3N1cmUtPnRoaXNfcHRyOworCWlmICghdmFsKSB7CisJCUFMTE9DX0lOSVRfWlZB TCh2YWwpOworCX0gZWxzZSB7CisJCVpfQUREUkVGX1AodmFsKTsKKwl9CisJemVuZF9zeW10 YWJsZV91cGRhdGUocnYsICJ0aGlzIiwgc2l6ZW9mKCJ0aGlzIiksICh2b2lkICopICZ2YWws IHNpemVvZih6dmFsICopLCBOVUxMKTsKKwlpZiAoY2xvc3VyZS0+ZnVuYy50eXBlID09IFpF TkRfVVNFUl9GVU5DVElPTiAmJiBjbG9zdXJlLT5mdW5jLm9wX2FycmF5LnN0YXRpY192YXJp YWJsZXMpIHsKKwkJSGFzaFRhYmxlICpzdGF0aWNfdmFyaWFibGVzID0gY2xvc3VyZS0+ZnVu Yy5vcF9hcnJheS5zdGF0aWNfdmFyaWFibGVzOworCQlNQUtFX1NURF9aVkFMKHZhbCk7CisJ CWFycmF5X2luaXQodmFsKTsKKwkJemVuZF9oYXNoX2NvcHkoWl9BUlJWQUxfUCh2YWwpLCBz dGF0aWNfdmFyaWFibGVzLCAoY29weV9jdG9yX2Z1bmNfdCl6dmFsX2FkZF9yZWYsIE5VTEws IHNpemVvZih6dmFsKikpOworCQl6ZW5kX3N5bXRhYmxlX3VwZGF0ZShydiwgInN0YXRpYyIs IHNpemVvZigic3RhdGljIiksICh2b2lkICopICZ2YWwsIHNpemVvZih6dmFsICopLCBOVUxM KTsKKwl9CisKKwlpZiAoYXJnX2luZm8pIHsKKwkJTUFLRV9TVERfWlZBTCh2YWwpOworCQlh cnJheV9pbml0KHZhbCk7CisJCXplbmRfdWludCBpLCByZXF1aXJlZCA9IGNsb3N1cmUtPmZ1 bmMuY29tbW9uLnJlcXVpcmVkX251bV9hcmdzOworCQlmb3IgKGkgPSAwOyBpIDwgY2xvc3Vy ZS0+ZnVuYy5jb21tb24ubnVtX2FyZ3M7IGkrKykgeworCQkJY2hhciAqbmFtZSwgKmluZm87 CisJCQlpbnQgbmFtZV9sZW4sIGluZm9fbGVuOworCQkJaWYgKGFyZ19pbmZvLT5uYW1lKSB7 CisJCQkJbmFtZV9sZW4gPSB6ZW5kX3NwcHJpbnRmKCZuYW1lLCAwLCAiJXMkJXMiLAorCQkJ CQkJCQlhcmdfaW5mby0+cGFzc19ieV9yZWZlcmVuY2UgPyAiJiIgOiAiIiwKKwkJCQkJCQkJ YXJnX2luZm8tPm5hbWUpOworCQkJfSBlbHNlIHsKKwkJCQluYW1lX2xlbiA9IHplbmRfc3Bw cmludGYoJm5hbWUsIDAsICIlcyRwYXJhbSVkIiwKKwkJCQkJCQkJYXJnX2luZm8tPnBhc3Nf YnlfcmVmZXJlbmNlID8gIiYiIDogIiIsCisJCQkJCQkJCWkgKyAxKTsKKwkJCX0KKwkJCWlu Zm9fbGVuID0gemVuZF9zcHByaW50ZigmaW5mbywgMCwgIiVzIiwKKwkJCQkJCQlpID49IHJl cXVpcmVkID8gIjxvcHRpb25hbD4iIDogIjxyZXF1aXJlZD4iKTsKKwkJCWFkZF9hc3NvY19z dHJpbmdsX2V4KHZhbCwgbmFtZSwgbmFtZV9sZW4gKyAxLCBpbmZvLCBpbmZvX2xlbiwgMCk7 CisJCQllZnJlZShuYW1lKTsKKwkJCWFyZ19pbmZvKys7CisJCX0KKwkJemVuZF9zeW10YWJs ZV91cGRhdGUocnYsICJwYXJhbWV0ZXIiLCBzaXplb2YoInBhcmFtZXRlciIpLCAodm9pZCAq KSAmdmFsLCBzaXplb2YoenZhbCAqKSwgTlVMTCk7CisJfQorCXJldHVybiBydjsKK30KKy8q IH19fSAqLworCiB2b2lkIHplbmRfcmVnaXN0ZXJfY2xvc3VyZV9jZShUU1JNTFNfRCkgLyog e3t7ICovCiB7CiAJemVuZF9jbGFzc19lbnRyeSBjZTsKQEAgLTI0Myw2ICsyOTgsNyBAQCB2 b2lkIHplbmRfcmVnaXN0ZXJfY2xvc3VyZV9jZShUU1JNTFNfRCkgCiAJY2xvc3VyZV9oYW5k bGVycy51bnNldF9wcm9wZXJ0eSA9IHplbmRfY2xvc3VyZV91bnNldF9wcm9wZXJ0eTsKIAlj bG9zdXJlX2hhbmRsZXJzLmNvbXBhcmVfb2JqZWN0cyA9IHplbmRfY2xvc3VyZV9jb21wYXJl X29iamVjdHM7CiAJY2xvc3VyZV9oYW5kbGVycy5jbG9uZV9vYmogPSBOVUxMOworCWNsb3N1 cmVfaGFuZGxlcnMuZ2V0X2RlYnVnX2luZm8gPSB6ZW5kX2Nsb3N1cmVfZ2V0X2RlYnVnX2lu Zm87CiAJY2xvc3VyZV9oYW5kbGVycy5nZXRfY2xvc3VyZSA9IHplbmRfY2xvc3VyZV9nZXRf Y2xvc3VyZTsKIH0KIC8qIH19fSAqLwpJbmRleDogWmVuZC96ZW5kX29iamVjdF9oYW5kbGVy cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L1plbmRFbmdpbmUyL3pl bmRfb2JqZWN0X2hhbmRsZXJzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTM1LjIuNi4y LjIyLjIuMjMKZGlmZiAtdSAtcCAtZCAtcjEuMTM1LjIuNi4yLjIyLjIuMjMgemVuZF9vYmpl Y3RfaGFuZGxlcnMuYwotLS0gWmVuZC96ZW5kX29iamVjdF9oYW5kbGVycy5jCTMxIERlYyAy MDA4IDExOjE1OjMyIC0wMDAwCTEuMTM1LjIuNi4yLjIyLjIuMjMKKysrIFplbmQvemVuZF9v YmplY3RfaGFuZGxlcnMuYwkxIEphbiAyMDA5IDE1OjA1OjU5IC0wMDAwCkBAIC03OTEsNiAr NzkxLDI0IEBAIHN0YXRpYyB1bmlvbiBfemVuZF9mdW5jdGlvbiAqemVuZF9zdGRfZ2UKIAog CXpvYmogPSBaX09CSl9QKG9iamVjdCk7CiAJaWYgKHplbmRfaGFzaF9maW5kKCZ6b2JqLT5j ZS0+ZnVuY3Rpb25fdGFibGUsIGxjX21ldGhvZF9uYW1lLCBtZXRob2RfbGVuKzEsICh2b2lk ICoqKSZmYmMpID09IEZBSUxVUkUpIHsKKwkJaWYgKFpfT0JKX0hUX1BQKG9iamVjdF9wdHIp LT5yZWFkX3Byb3BlcnR5KSB7CisJCQl6dmFsICpjYWxsYWJsZSwgcHJvcGVydHksICpjYWxs YWJsZV9vYmo7CisJCQl6ZW5kX2NsYXNzX2VudHJ5ICpjZV9wdHI7CisJCQkKKwkJCUlOSVRf UFpWQUwoJnByb3BlcnR5KTsKKwkJCVpWQUxfU1RSSU5HTCgmcHJvcGVydHksIG1ldGhvZF9u YW1lLCBtZXRob2RfbGVuLCAwKTsKKwkJCWNhbGxhYmxlID0gWl9PQkpfSEFORExFUl9QUChv YmplY3RfcHRyLHJlYWRfcHJvcGVydHkpKCpvYmplY3RfcHRyLCAmcHJvcGVydHksIEJQX1ZB Ul9JUyBUU1JNTFNfQ0MpOworCisJCQlpZiAoWl9UWVBFX1AoY2FsbGFibGUpID09IElTX09C SkVDVAorCQkJJiYgWl9PQkpfSEFORExFUl9QKGNhbGxhYmxlLCBnZXRfY2xvc3VyZSkKKwkJ CSYmIFpfT0JKX0hBTkRMRVJfUChjYWxsYWJsZSwgZ2V0X2Nsb3N1cmUpKGNhbGxhYmxlLCAm Y2VfcHRyLCAmZmJjLCAmY2FsbGFibGVfb2JqIFRTUk1MU19DQykgPT0gU1VDQ0VTUykgewor CQkJCWlmIChjYWxsYWJsZV9vYmopIHsKKwkJCQkJKm9iamVjdF9wdHIgPSBjYWxsYWJsZV9v Ymo7CisJCQkJfQorCQkJCWZyZWVfYWxsb2NhKGxjX21ldGhvZF9uYW1lLCB1c2VfaGVhcCk7 CisJCQkJcmV0dXJuIGZiYzsKKwkJCX0KKwkJfSAKIAkJZnJlZV9hbGxvY2EobGNfbWV0aG9k X25hbWUsIHVzZV9oZWFwKTsKIAkJaWYgKHpvYmotPmNlLT5fX2NhbGwpIHsKIAkJCXplbmRf aW50ZXJuYWxfZnVuY3Rpb24gKmNhbGxfdXNlcl9jYWxsID0gZW1hbGxvYyhzaXplb2YoemVu ZF9pbnRlcm5hbF9mdW5jdGlvbikpOwpJbmRleDogWmVuZC90ZXN0cy9jbG9zdXJlXzAyMC5w aHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L1plbmRFbmdpbmUyL3Rl c3RzL2Nsb3N1cmVfMDIwLnBocHQsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4yLjEKZGlm ZiAtdSAtcCAtZCAtcjEuMS4yLjEgY2xvc3VyZV8wMjAucGhwdAotLS0gWmVuZC90ZXN0cy9j bG9zdXJlXzAyMC5waHB0CTE0IEp1bCAyMDA4IDEzOjM2OjQwIC0wMDAwCTEuMS4yLjEKKysr IFplbmQvdGVzdHMvY2xvc3VyZV8wMjAucGhwdAkxIEphbiAyMDA5IDE1OjA1OjU5IC0wMDAw CkBAIC0yNyw3ICsyNyw0MCBAQCBvYmplY3QoZm9vKSMlZCAoJWQpIHsKICAgWyJ0ZXN0Ijoi Zm9vIjpwcml2YXRlXT0+CiAgIGludCgzKQogICBbImEiXT0+Ci0gIG9iamVjdChDbG9zdXJl KSMlZCAoMCkgeworICBvYmplY3QoQ2xvc3VyZSkjJWQgKDIpIHsKKyAgICBbInRoaXMiXT0+ CisgICAgb2JqZWN0KGZvbykjJWQgKDIpIHsKKyAgICAgIFsidGVzdCI6ImZvbyI6cHJpdmF0 ZV09PgorICAgICAgaW50KDMpCisgICAgICBbImEiXT0+CisgICAgICBvYmplY3QoQ2xvc3Vy ZSkjJWQgKDIpIHsKKyAgICAgICAgWyJ0aGlzIl09PgorICAgICAgICAqUkVDVVJTSU9OKgor ICAgICAgICBbInN0YXRpYyJdPT4KKyAgICAgICAgYXJyYXkoMSkgeworICAgICAgICAgIFsi YSJdPT4KKyAgICAgICAgICAqUkVDVVJTSU9OKgorICAgICAgICB9CisgICAgICB9CisgICAg fQorICAgIFsic3RhdGljIl09PgorICAgIGFycmF5KDEpIHsKKyAgICAgIFsiYSJdPT4KKyAg ICAgICZvYmplY3QoZm9vKSMlZCAoMikgeworICAgICAgICBbInRlc3QiOiJmb28iOnByaXZh dGVdPT4KKyAgICAgICAgaW50KDMpCisgICAgICAgIFsiYSJdPT4KKyAgICAgICAgb2JqZWN0 KENsb3N1cmUpIyVkICgyKSB7CisgICAgICAgICAgWyJ0aGlzIl09PgorICAgICAgICAgICpS RUNVUlNJT04qCisgICAgICAgICAgWyJzdGF0aWMiXT0+CisgICAgICAgICAgYXJyYXkoMSkg eworICAgICAgICAgICAgWyJhIl09PgorICAgICAgICAgICAgKlJFQ1VSU0lPTioKKyAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CiAgIH0KIH0KIGJvb2wodHJ1ZSkK SW5kZXg6IFplbmQvdGVzdHMvY2xvc3VyZV8wMjYucGhwdAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvcmVwb3NpdG9yeS9aZW5kRW5naW5lMi90ZXN0cy9jbG9zdXJlXzAyNi5waHB0LHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjEuMi4yCmRpZmYgLXUgLXAgLWQgLXIxLjEuMi4yIGNs b3N1cmVfMDI2LnBocHQKLS0tIFplbmQvdGVzdHMvY2xvc3VyZV8wMjYucGhwdAkyOCBKdWwg MjAwOCAxNDoxMDowMCAtMDAwMAkxLjEuMi4yCisrKyBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDI2 LnBocHQJMSBKYW4gMjAwOSAxNTowNTo1OSAtMDAwMApAQCAtMzIsNyArMzIsMTggQEAgb2Jq ZWN0KGZvbykjJWQgKDEpIHsKICAgWyJhIl09PgogICBhcnJheSgxKSB7CiAgICAgWzBdPT4K LSAgICBvYmplY3QoQ2xvc3VyZSkjJWQgKDApIHsKKyAgICBvYmplY3QoQ2xvc3VyZSkjJWQg KDEpIHsKKyAgICAgIFsidGhpcyJdPT4KKyAgICAgIG9iamVjdChmb28pIyVkICgxKSB7Cisg ICAgICAgIFsiYSJdPT4KKyAgICAgICAgYXJyYXkoMSkgeworICAgICAgICAgIFswXT0+Cisg ICAgICAgICAgb2JqZWN0KENsb3N1cmUpIyVkICgxKSB7CisgICAgICAgICAgICBbInRoaXMi XT0+CisgICAgICAgICAgICAqUkVDVVJTSU9OKgorICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgfQogICAgIH0KICAgfQogfQpAQCAtNDEsNyArNTIsMjEgQEAgaW50KDEpCiBzdHJp bmcoMSkgImEiCiBhcnJheSgxKSB7CiAgIFswXT0+Ci0gIG9iamVjdChDbG9zdXJlKSMlZCAo MCkgeworICBvYmplY3QoQ2xvc3VyZSkjJWQgKDEpIHsKKyAgICBbInRoaXMiXT0+CisgICAg b2JqZWN0KGZvbykjJWQgKDEpIHsKKyAgICAgIFsiYSJdPT4KKyAgICAgIGFycmF5KDEpIHsK KyAgICAgICAgWzBdPT4KKyAgICAgICAgb2JqZWN0KENsb3N1cmUpIyVkICgxKSB7CisgICAg ICAgICAgWyJ0aGlzIl09PgorICAgICAgICAgIG9iamVjdChmb28pIyVkICgxKSB7CisgICAg ICAgICAgICBbImEiXT0+CisgICAgICAgICAgICAqUkVDVVJTSU9OKgorICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgfQorICAgIH0KICAgfQogfQogaW50KDEpCkluZGV4OiBaZW5k L3Rlc3RzL2Nsb3N1cmVfMDMyLnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9z aXRvcnkvWmVuZEVuZ2luZTIvdGVzdHMvY2xvc3VyZV8wMzIucGhwdCx2CnJldHJpZXZpbmcg cmV2aXNpb24gMS4xLjIuMgpkaWZmIC11IC1wIC1kIC1yMS4xLjIuMiBjbG9zdXJlXzAzMi5w aHB0Ci0tLSBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDMyLnBocHQJMyBOb3YgMjAwOCAxOToyODoz MiAtMDAwMAkxLjEuMi4yCisrKyBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDMyLnBocHQJMSBKYW4g MjAwOSAxNTowNTo1OSAtMDAwMApAQCAtNTMsNiArNTMsMTIgQEAgQXJyYXkKICAgICAgICAg ICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgIFswXSA9PiBDbG9zdXJlIE9iamVjdAog ICAgICAgICAgICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IFt0aGlzXSA9PiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyYW1ldGVyXSA9 PiBBcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBbJHBhcmFtXSA9PiA8cmVxdWlyZWQ+CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKwogICAgICAgICAgICAgICAgICAgICAg ICAgKQogCiAgICAgICAgICAgICAgICAgKQpJbmRleDogWmVuZC90ZXN0cy9jbG9zdXJlXzAz My5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IFplbmQvdGVzdHMvY2xvc3VyZV8wMzMu cGhwdApkaWZmIC1OIFplbmQvdGVzdHMvY2xvc3VyZV8wMzMucGhwdAotLS0gL2Rldi9udWxs CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvY2xvc3VyZV8wMzMu cGhwdAkxIEphbiAyMDA5IDE1OjA1OjU5IC0wMDAwCkBAIC0wLDAgKzEsMTIyIEBACistLVRF U1QtLQorQ2xvc3VyZSAwMzM6IHZhcl9kdW1wKCkgb2YgYSBDbG9zdXJlCistLUZJTEUtLQor PD9waHAKKworJG91dGVyID0gMjU7CisKK2NsYXNzIFRlc3QgeworCXB1YmxpYyAkZnVuYzE7 CisJcHVibGljICR2YXIgPSA0MjsKKwlmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsKKwkJZ2xv YmFsICRvdXRlcjsKKwkJJHRoaXMtPmZ1bmMxID0gZnVuY3Rpb24oJHBhcmFtLCAkb3RoZXIg PSAiZGVmYXVsdCIpIHVzZSAoJG91dGVyKSB7CisJCX07CisJfQorfQorCiskbyA9IG5ldyBU ZXN0OwordmFyX2R1bXAoJG8tPmZ1bmMxKTsKKworJG8tPmZ1bmMyID0gZnVuY3Rpb24oJHBh cmFtLCAkb3RoZXIgPSAiZGVmYXVsdCIpIHVzZSAoJG91dGVyKSB7Cit9OworCit2YXJfZHVt cCgkby0+ZnVuYzIpOworCiskZnVuYzMgPSBmdW5jdGlvbigkcGFyYW0sICRvdGhlciA9ICJk ZWZhdWx0IikgdXNlICgkb3V0ZXIpIHsKK307CisKK3Zhcl9kdW1wKCRmdW5jMyk7CisKKz8+ Cis9PT1ET05FPT09CistLUVYUEVDVEYtLQorb2JqZWN0KENsb3N1cmUpIyVkICgzKSB7Cisg IFsidGhpcyJdPT4KKyAgb2JqZWN0KFRlc3QpIyVkICgyKSB7CisgICAgWyJmdW5jMSJdPT4K KyAgICBvYmplY3QoQ2xvc3VyZSkjJWQgKDMpIHsKKyAgICAgIFsidGhpcyJdPT4KKyAgICAg IG9iamVjdChUZXN0KSMlZCAoMikgeworICAgICAgICBbImZ1bmMxIl09PgorICAgICAgICBv YmplY3QoQ2xvc3VyZSkjJWQgKDMpIHsKKyAgICAgICAgICBbInRoaXMiXT0+CisgICAgICAg ICAgKlJFQ1VSU0lPTioKKyAgICAgICAgICBbInN0YXRpYyJdPT4KKyAgICAgICAgICBhcnJh eSgxKSB7CisgICAgICAgICAgICBbIm91dGVyIl09PgorICAgICAgICAgICAgaW50KDI1KQor ICAgICAgICAgIH0KKyAgICAgICAgICBbInBhcmFtZXRlciJdPT4KKyAgICAgICAgICBhcnJh eSgyKSB7CisgICAgICAgICAgICBbIiRwYXJhbSJdPT4KKyAgICAgICAgICAgIHN0cmluZygx MCkgIjxyZXF1aXJlZD4iCisgICAgICAgICAgICBbIiRvdGhlciJdPT4KKyAgICAgICAgICAg IHN0cmluZygxMCkgIjxvcHRpb25hbD4iCisgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIFsidmFyIl09PgorICAgICAgICBpbnQoNDIpCisgICAgICB9CisgICAgICBbInN0YXRp YyJdPT4KKyAgICAgIGFycmF5KDEpIHsKKyAgICAgICAgWyJvdXRlciJdPT4KKyAgICAgICAg aW50KDI1KQorICAgICAgfQorICAgICAgWyJwYXJhbWV0ZXIiXT0+CisgICAgICBhcnJheSgy KSB7CisgICAgICAgIFsiJHBhcmFtIl09PgorICAgICAgICBzdHJpbmcoMTApICI8cmVxdWly ZWQ+IgorICAgICAgICBbIiRvdGhlciJdPT4KKyAgICAgICAgc3RyaW5nKDEwKSAiPG9wdGlv bmFsPiIKKyAgICAgIH0KKyAgICB9CisgICAgWyJ2YXIiXT0+CisgICAgaW50KDQyKQorICB9 CisgIFsic3RhdGljIl09PgorICBhcnJheSgxKSB7CisgICAgWyJvdXRlciJdPT4KKyAgICBp bnQoMjUpCisgIH0KKyAgWyJwYXJhbWV0ZXIiXT0+CisgIGFycmF5KDIpIHsKKyAgICBbIiRw YXJhbSJdPT4KKyAgICBzdHJpbmcoMTApICI8cmVxdWlyZWQ+IgorICAgIFsiJG90aGVyIl09 PgorICAgIHN0cmluZygxMCkgIjxvcHRpb25hbD4iCisgIH0KK30KK29iamVjdChDbG9zdXJl KSMlZCAoMykgeworICBbInRoaXMiXT0+CisgIE5VTEwKKyAgWyJzdGF0aWMiXT0+CisgIGFy cmF5KDEpIHsKKyAgICBbIm91dGVyIl09PgorICAgICZpbnQoMjUpCisgIH0KKyAgWyJwYXJh bWV0ZXIiXT0+CisgIGFycmF5KDIpIHsKKyAgICBbIiRwYXJhbSJdPT4KKyAgICBzdHJpbmco MTApICI8cmVxdWlyZWQ+IgorICAgIFsiJG90aGVyIl09PgorICAgIHN0cmluZygxMCkgIjxv cHRpb25hbD4iCisgIH0KK30KK29iamVjdChDbG9zdXJlKSMlZCAoMykgeworICBbInRoaXMi XT0+CisgIE5VTEwKKyAgWyJzdGF0aWMiXT0+CisgIGFycmF5KDEpIHsKKyAgICBbIm91dGVy Il09PgorICAgIGludCgyNSkKKyAgfQorICBbInBhcmFtZXRlciJdPT4KKyAgYXJyYXkoMikg eworICAgIFsiJHBhcmFtIl09PgorICAgIHN0cmluZygxMCkgIjxyZXF1aXJlZD4iCisgICAg WyIkb3RoZXIiXT0+CisgICAgc3RyaW5nKDEwKSAiPG9wdGlvbmFsPiIKKyAgfQorfQorPT09 RE9ORT09PQpJbmRleDogWmVuZC90ZXN0cy9jbG9zdXJlXzAzNC5waHB0Cj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IFplbmQvdGVzdHMvY2xvc3VyZV8wMzQucGhwdApkaWZmIC1OIFplbmQv dGVzdHMvY2xvc3VyZV8wMzQucGhwdAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6 MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvY2xvc3VyZV8wMzQucGhwdAkxIEphbiAyMDA5IDE1 OjA1OjU5IC0wMDAwCkBAIC0wLDAgKzEsNDUgQEAKKy0tVEVTVC0tCitDbG9zdXJlIDAzNDog Q2FsbGluZyBwcm9wZXJ0eSBDbG9zdXJlCistLUZJTEUtLQorPD9waHAKKworY2xhc3MgVGVz dCB7CisJcHVibGljICRmdW5jOworCWZ1bmN0aW9uIF9fY29uc3RydWN0KCkgeworCQkkdGhp cy0+ZnVuYyA9IGZ1bmN0aW9uKCkgeworCQkJZWNobyBfX01FVEhPRF9fIC4gIigpXG4iOwor CQl9OworCX0KK30KKworJG8gPSBuZXcgVGVzdDsKK1JlZmxlY3Rpb25Qcm9wZXJ0eTo6ZXhw b3J0KCRvLCAnZnVuYycpOwordmFyX2R1bXAoJG8tPmZ1bmMpOworJGYgPSAkby0+ZnVuYzsK KyRmKCk7Ciskby0+ZnVuYygpOworCis/PgorPT09RE9ORT09PQorLS1FWFBFQ1RGLS0KK1By b3BlcnR5IFsgPGRlZmF1bHQ+IHB1YmxpYyAkZnVuYyBdCisKK29iamVjdChDbG9zdXJlKSMl ZCAoMSkgeworICBbInRoaXMiXT0+CisgIG9iamVjdChUZXN0KSMlZCAoMSkgeworICAgIFsi ZnVuYyJdPT4KKyAgICBvYmplY3QoQ2xvc3VyZSkjJWQgKDEpIHsKKyAgICAgIFsidGhpcyJd PT4KKyAgICAgIG9iamVjdChUZXN0KSMlZCAoMSkgeworICAgICAgICBbImZ1bmMiXT0+Cisg ICAgICAgIG9iamVjdChDbG9zdXJlKSMlZCAoMSkgeworICAgICAgICAgIFsidGhpcyJdPT4K KyAgICAgICAgICAqUkVDVVJTSU9OKgorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9 Cit9CitUZXN0Ojp7Y2xvc3VyZX0oKQorVGVzdDo6e2Nsb3N1cmV9KCkKKz09PURPTkU9PT0K SW5kZXg6IFplbmQvdGVzdHMvY2xvc3VyZV8wMzUucGhwdAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDM1LnBocHQKZGlmZiAtTiBaZW5kL3Rlc3RzL2Ns b3N1cmVfMDM1LnBocHQKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAw CisrKyBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDM1LnBocHQJMSBKYW4gMjAwOSAxNTowNTo1OSAt MDAwMApAQCAtMCwwICsxLDQ2IEBACistLVRFU1QtLQorQ2xvc3VyZSAwMzU6IENhbGxpbmcg cHJvcGVydHkgc3VwcG9ydGluZyBfX2ludm9rZQorLS1GSUxFLS0KKzw/cGhwCisKK2NsYXNz IEN1cnJ5Cit7CisgIHByb3RlY3RlZCAkY2FsbGFibGU7CisgIHByb3RlY3RlZCAkYXJnczsK KworICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZSgkY2FsbGFibGUpCisgIHsKKyAg ICAkY3VycnkgPSBuZXcgc2VsZigkY2FsbGFibGUsIGFycmF5X3NsaWNlKGZ1bmNfZ2V0X2Fy Z3MoKSwgMSkpOworICAgIHJldHVybiAkY3Vycnk7CisgIH0KKworICBwcm90ZWN0ZWQgZnVu Y3Rpb24gX19jb25zdHJ1Y3QoJGNhbGxhYmxlLCAkYXJncykKKyAgeworICAgICR0aGlzLT5j YWxsYWJsZSA9ICRjYWxsYWJsZTsKKyAgICAkdGhpcy0+YXJncyA9ICRhcmdzOworICB9CisK KyAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKCkKKyAgeworICAgIHJldHVybiBjYWxsX3Vz ZXJfZnVuY19hcnJheSgkdGhpcy0+Y2FsbGFibGUsIGFycmF5X21lcmdlKCR0aGlzLT5hcmdz LCBmdW5jX2dldF9hcmdzKCkpKTsKKyAgfQorfQorCiskZCA9IG5ldyBEYXRlVGltZSgpOwor JGdldEF0b20gPSBDdXJyeTo6Y3JlYXRlKGFycmF5KCRkLCAnZm9ybWF0JyksIERBVEVfQVRP TSk7Cit2YXJfZHVtcChpc19DYWxsYWJsZSgkZ2V0QXRvbSkpOwordmFyX2R1bXAoJGdldEF0 b20oKSk7CisKKyRkID0gbmV3IERhdGVUaW1lKCk7CiskZC0+Z2V0QXRvbSA9IEN1cnJ5Ojpj cmVhdGUoYXJyYXkoJGQsICdmb3JtYXQnKSwgREFURV9BVE9NKTsKK3Zhcl9kdW1wKGlzX0Nh bGxhYmxlKCRkLT5nZXRBdG9tKSk7Cit2YXJfZHVtcCgkZC0+Z2V0QXRvbSgpKTsKKworPz4K Kz09PURPTkU9PT0KKy0tRVhQRUNURi0tCitib29sKHRydWUpCitzdHJpbmcoJWQpICIyJWQt JWQtJWRUJWQ6JWQ6JWQlcyIKK2Jvb2wodHJ1ZSkKK3N0cmluZyglZCkgIjIlZC0lZC0lZFQl ZDolZDolZCVzIgorPT09RE9ORT09PQpJbmRleDogWmVuZC90ZXN0cy9jbG9zdXJlXzAzNi5w aHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IFplbmQvdGVzdHMvY2xvc3VyZV8wMzYucGhw dApkaWZmIC1OIFplbmQvdGVzdHMvY2xvc3VyZV8wMzYucGhwdAotLS0gL2Rldi9udWxsCTEg SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvY2xvc3VyZV8wMzYucGhw dAkxIEphbiAyMDA5IDE1OjA1OjU5IC0wMDAwCkBAIC0wLDAgKzEsNDkgQEAKKy0tVEVTVC0t CitDbG9zdXJlIDAzNjogQ2FsbGluZyBkeW5hbWljIHByb3BlcnR5IENsb3N1cmUKKy0tRklM RS0tCis8P3BocAorCitjbGFzcyBUZXN0IHsKKwlwdWJsaWMgJG1ldGhvZHMgPSBhcnJheSgp OworCWZ1bmN0aW9uIF9faXNzZXQoJG5hbWUpIHsKKwkJZWNobyBfX01FVEhPRF9fIC4gIigk bmFtZSlcbiI7CisJCXJldHVybiBpc3NldCgkdGhpcy0+bWV0aG9kc1skbmFtZV0pOworCX0K KwlmdW5jdGlvbiBfX2dldCgkbmFtZSkgeworCQllY2hvIF9fTUVUSE9EX18gLiAiKCRuYW1l KVxuIjsKKwkJcmV0dXJuICR0aGlzLT5tZXRob2RzWyRuYW1lXTsKKwl9CisJZnVuY3Rpb24g X19zZXQoJG5hbWUsICRkYXRhKSB7CisJCWVjaG8gX19NRVRIT0RfXyAuICIoJG5hbWUpXG4i OworCQkkdGhpcy0+bWV0aG9kc1skbmFtZV0gPSAkZGF0YTsKKwl9CisJZnVuY3Rpb24gX190 b1N0cmluZygpIHsKKwkJcmV0dXJuIF9fQ0xBU1NfXzsKKwl9Cit9CisKKyRvID0gbmV3IFRl c3Q7Cit2YXJfZHVtcChpc3NldCgkby0+ZnVuYykpOworJG8tPmZ1bmMgPSBmdW5jdGlvbigp IHsKKwllY2hvIF9fTUVUSE9EX18gLiAiKCR0aGlzKVxuIjsKK307Cit2YXJfZHVtcChpc3Nl dCgkby0+ZnVuYykpOworJG8tPmZ1bmMoKTsKK3Zhcl9kdW1wKCRvLT5mdW5jKTsKKworPz4K Kz09PURPTkU9PT0KKy0tRVhQRUNURi0tCitUZXN0OjpfX2lzc2V0KGZ1bmMpCitib29sKGZh bHNlKQorVGVzdDo6X19zZXQoZnVuYykKK1Rlc3Q6Ol9faXNzZXQoZnVuYykKK2Jvb2wodHJ1 ZSkKK1Rlc3Q6Ol9fZ2V0KGZ1bmMpCit7Y2xvc3VyZX0oVGVzdCkKK1Rlc3Q6Ol9fZ2V0KGZ1 bmMpCitvYmplY3QoQ2xvc3VyZSkjJWQgKDEpIHsKKyAgWyJ0aGlzIl09PgorICBOVUxMCit9 Cis9PT1ET05FPT09Cg== ------------AD01AF21053D1--