Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:42015 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 26918 invoked from network); 21 Nov 2008 20:15:36 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 21 Nov 2008 20:15:36 -0000 Authentication-Results: pb1.pair.com header.from=stas@zend.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=stas@zend.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain zend.com designates 63.205.162.116 as permitted sender) X-PHP-List-Original-Sender: stas@zend.com X-Host-Fingerprint: 63.205.162.116 us-gw1.zend.com Windows 2000 SP4, XP SP1 Received: from [63.205.162.116] ([63.205.162.116:30869] helo=us-gw1.zend.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 64/31-18766-6E617294 for ; Fri, 21 Nov 2008 15:15:35 -0500 Received: from [192.168.16.110] ([192.168.16.110]) by us-gw1.zend.com with Microsoft SMTPSVC(6.0.3790.3959); Fri, 21 Nov 2008 12:15:46 -0800 Message-ID: <492716F2.7040502@zend.com> Date: Fri, 21 Nov 2008 12:15:46 -0800 Organization: Zend Technologies User-Agent: Thunderbird 2.0.0.18 (Windows/20081105) MIME-Version: 1.0 To: Felipe Pena CC: Lukas Kahwe Smith , PHP Internals References: <4900DB81.4000805@zend.com> <4900E150.1010607@dynom.nl> <49018FC3.90302@gmail.com> <1224854888.19390.89.camel@goldfinger.johannes.nop> <490609A1.7090400@gravitonic.com> <1225199800.878.0.camel@localhost> <3F3445975B55414BB4A214B32E178657@pc> <4A4FE9BC-F000-4AEE-A68C-8EFEA9DCD154@pooteeweet.org> <4910D3E5.4020406@zend.com> <237D5067-10C6-4D25-8CCF-FEF9FE44F6F6@googlemail.com> <1225973406.5465.18.camel@felipe> In-Reply-To: <1225973406.5465.18.camel@felipe> Content-Type: multipart/mixed; boundary="------------000400040300060002070108" X-OriginalArrivalTime: 21 Nov 2008 20:15:46.0490 (UTC) FILETIME=[F03689A0:01C94C15] Subject: Re: [PHP-DEV] array_key_exists BC break From: stas@zend.com (Stanislav Malyshev) --------------000400040300060002070108 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi! > . end > . prev > . next > . reset > . current > . key > . array_key_exists > . array_unique > . array_flip > . array_walk_recursive > . array_walk > . uksort > . uasort > . usort > . natcasesort > . natsort Attached is the patch that should restore BC for all those functions except sorts and array_unique/array_flip (these should be trivial too but I still thing their support for objects is just a bug). Please tell if you are using those (ones not BCed) in any meaningful scenario on objects. This is done by having 'a' and 'h' specifiers have sister ones 'A' and 'H' that would accept objects if those have working HASH_OF. I have opted out for new letters and not sign since signs currently used for generic modifiers (like "separate it") and object-array relation is not generic. Any comments? And last but not least - anybody cares to write tests for those object/array cases? -- Stanislav Malyshev, Zend Software Architect stas@zend.com http://www.zend.com/ (408)253-8829 MSN: stas@zend.com --------------000400040300060002070108 Content-Type: text/plain; name="array.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="array.diff" SW5kZXg6IGV4dC9zdGFuZGFyZC9hcnJheS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog L3JlcG9zaXRvcnkvcGhwLXNyYy9leHQvc3RhbmRhcmQvYXJyYXkuYyx2DQpyZXRyaWV2aW5n IHJldmlzaW9uIDEuMzA4LjIuMjEuMi4zNy4yLjQ1DQpkaWZmIC11IC1yMS4zMDguMi4yMS4y LjM3LjIuNDUgYXJyYXkuYw0KLS0tIGV4dC9zdGFuZGFyZC9hcnJheS5jCTIxIE9jdCAyMDA4 IDIyOjA4OjM2IC0wMDAwCTEuMzA4LjIuMjEuMi4zNy4yLjQ1DQorKysgZXh0L3N0YW5kYXJk L2FycmF5LmMJMjEgTm92IDIwMDggMTk6NDk6NTMgLTAwMDANCkBAIC03NTEsMTYgKzc1MSwx NyBAQA0KICAgIEFkdmFuY2VzIGFycmF5IGFyZ3VtZW50J3MgaW50ZXJuYWwgcG9pbnRlciB0 byB0aGUgbGFzdCBlbGVtZW50IGFuZCByZXR1cm4gaXQgKi8NCiBQSFBfRlVOQ1RJT04oZW5k KQ0KIHsNCi0JenZhbCAqYXJyYXksICoqZW50cnk7DQorCUhhc2hUYWJsZSAqYXJyYXk7DQor CXp2YWwgKiplbnRyeTsNCiANCi0JaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVycyhaRU5EX05V TV9BUkdTKCkgVFNSTUxTX0NDLCAiYSIsICZhcnJheSkgPT0gRkFJTFVSRSkgew0KKwlpZiAo emVuZF9wYXJzZV9wYXJhbWV0ZXJzKFpFTkRfTlVNX0FSR1MoKSBUU1JNTFNfQ0MsICJIIiwg JmFycmF5KSA9PSBGQUlMVVJFKSB7DQogCQlyZXR1cm47DQogCX0NCiANCi0JemVuZF9oYXNo X2ludGVybmFsX3BvaW50ZXJfZW5kKFpfQVJSVkFMX1AoYXJyYXkpKTsNCisJemVuZF9oYXNo X2ludGVybmFsX3BvaW50ZXJfZW5kKGFycmF5KTsNCiANCiAJaWYgKHJldHVybl92YWx1ZV91 c2VkKSB7DQotCQlpZiAoemVuZF9oYXNoX2dldF9jdXJyZW50X2RhdGEoWl9BUlJWQUxfUChh cnJheSksICh2b2lkICoqKSAmZW50cnkpID09IEZBSUxVUkUpIHsNCisJCWlmICh6ZW5kX2hh c2hfZ2V0X2N1cnJlbnRfZGF0YShhcnJheSwgKHZvaWQgKiopICZlbnRyeSkgPT0gRkFJTFVS RSkgew0KIAkJCVJFVFVSTl9GQUxTRTsNCiAJCX0NCiANCkBAIC03NzMsMTYgKzc3NCwxNyBA QA0KICAgIE1vdmUgYXJyYXkgYXJndW1lbnQncyBpbnRlcm5hbCBwb2ludGVyIHRvIHRoZSBw cmV2aW91cyBlbGVtZW50IGFuZCByZXR1cm4gaXQgKi8NCiBQSFBfRlVOQ1RJT04ocHJldikN CiB7DQotCXp2YWwgKmFycmF5LCAqKmVudHJ5Ow0KKwlIYXNoVGFibGUgKmFycmF5Ow0KKwl6 dmFsICoqZW50cnk7DQogDQotCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMoWkVORF9OVU1f QVJHUygpIFRTUk1MU19DQywgImEiLCAmYXJyYXkpID09IEZBSUxVUkUpIHsNCisJaWYgKHpl bmRfcGFyc2VfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCAiSCIsICZh cnJheSkgPT0gRkFJTFVSRSkgew0KIAkJcmV0dXJuOw0KIAl9DQogDQotCXplbmRfaGFzaF9t b3ZlX2JhY2t3YXJkcyhaX0FSUlZBTF9QKGFycmF5KSk7DQorCXplbmRfaGFzaF9tb3ZlX2Jh Y2t3YXJkcyhhcnJheSk7DQogDQogCWlmIChyZXR1cm5fdmFsdWVfdXNlZCkgew0KLQkJaWYg KHplbmRfaGFzaF9nZXRfY3VycmVudF9kYXRhKFpfQVJSVkFMX1AoYXJyYXkpLCAodm9pZCAq KikgJmVudHJ5KSA9PSBGQUlMVVJFKSB7DQorCQlpZiAoemVuZF9oYXNoX2dldF9jdXJyZW50 X2RhdGEoYXJyYXksICh2b2lkICoqKSAmZW50cnkpID09IEZBSUxVUkUpIHsNCiAJCQlSRVRV Uk5fRkFMU0U7DQogCQl9DQogDQpAQCAtNzk1LDE2ICs3OTcsMTcgQEANCiAgICBNb3ZlIGFy cmF5IGFyZ3VtZW50J3MgaW50ZXJuYWwgcG9pbnRlciB0byB0aGUgbmV4dCBlbGVtZW50IGFu ZCByZXR1cm4gaXQgKi8NCiBQSFBfRlVOQ1RJT04obmV4dCkNCiB7DQotCXp2YWwgKmFycmF5 LCAqKmVudHJ5Ow0KKwlIYXNoVGFibGUgKmFycmF5Ow0KKwl6dmFsICoqZW50cnk7DQogDQot CWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywg ImEiLCAmYXJyYXkpID09IEZBSUxVUkUpIHsNCisJaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVy cyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCAiSCIsICZhcnJheSkgPT0gRkFJTFVSRSkg ew0KIAkJcmV0dXJuOw0KIAl9DQogDQotCXplbmRfaGFzaF9tb3ZlX2ZvcndhcmQoWl9BUlJW QUxfUChhcnJheSkpOw0KKwl6ZW5kX2hhc2hfbW92ZV9mb3J3YXJkKGFycmF5KTsNCiANCiAJ aWYgKHJldHVybl92YWx1ZV91c2VkKSB7DQotCQlpZiAoemVuZF9oYXNoX2dldF9jdXJyZW50 X2RhdGEoWl9BUlJWQUxfUChhcnJheSksICh2b2lkICoqKSAmZW50cnkpID09IEZBSUxVUkUp IHsNCisJCWlmICh6ZW5kX2hhc2hfZ2V0X2N1cnJlbnRfZGF0YShhcnJheSwgKHZvaWQgKiop ICZlbnRyeSkgPT0gRkFJTFVSRSkgew0KIAkJCVJFVFVSTl9GQUxTRTsNCiAJCX0NCiANCkBA IC04MTcsMTYgKzgyMCwxNyBAQA0KICAgIFNldCBhcnJheSBhcmd1bWVudCdzIGludGVybmFs IHBvaW50ZXIgdG8gdGhlIGZpcnN0IGVsZW1lbnQgYW5kIHJldHVybiBpdCAqLw0KIFBIUF9G VU5DVElPTihyZXNldCkNCiB7DQotCXp2YWwgKmFycmF5LCAqKmVudHJ5Ow0KKwlIYXNoVGFi bGUgKmFycmF5Ow0KKwl6dmFsICoqZW50cnk7DQogDQotCWlmICh6ZW5kX3BhcnNlX3BhcmFt ZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgImEiLCAmYXJyYXkpID09IEZBSUxV UkUpIHsNCisJaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNS TUxTX0NDLCAiSCIsICZhcnJheSkgPT0gRkFJTFVSRSkgew0KIAkJcmV0dXJuOw0KIAl9DQog DQotCXplbmRfaGFzaF9pbnRlcm5hbF9wb2ludGVyX3Jlc2V0KFpfQVJSVkFMX1AoYXJyYXkp KTsNCisJemVuZF9oYXNoX2ludGVybmFsX3BvaW50ZXJfcmVzZXQoYXJyYXkpOw0KIA0KIAlp ZiAocmV0dXJuX3ZhbHVlX3VzZWQpIHsNCi0JCWlmICh6ZW5kX2hhc2hfZ2V0X2N1cnJlbnRf ZGF0YShaX0FSUlZBTF9QKGFycmF5KSwgKHZvaWQgKiopICZlbnRyeSkgPT0gRkFJTFVSRSkg ew0KKwkJaWYgKHplbmRfaGFzaF9nZXRfY3VycmVudF9kYXRhKGFycmF5LCAodm9pZCAqKikg JmVudHJ5KSA9PSBGQUlMVVJFKSB7DQogCQkJUkVUVVJOX0ZBTFNFOw0KIAkJfQ0KIA0KQEAg LTgzOSwxMyArODQzLDE0IEBADQogICAgUmV0dXJuIHRoZSBlbGVtZW50IGN1cnJlbnRseSBw b2ludGVkIHRvIGJ5IHRoZSBpbnRlcm5hbCBhcnJheSBwb2ludGVyICovDQogUEhQX0ZVTkNU SU9OKGN1cnJlbnQpDQogew0KLQl6dmFsICphcnJheSwgKiplbnRyeTsNCisJSGFzaFRhYmxl ICphcnJheTsNCisJenZhbCAqKmVudHJ5Ow0KIA0KLQlpZiAoemVuZF9wYXJzZV9wYXJhbWV0 ZXJzKFpFTkRfTlVNX0FSR1MoKSBUU1JNTFNfQ0MsICJhIiwgJmFycmF5KSA9PSBGQUlMVVJF KSB7DQorCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1M U19DQywgIkgiLCAmYXJyYXkpID09IEZBSUxVUkUpIHsNCiAJCXJldHVybjsNCiAJfQ0KIA0K LQlpZiAoemVuZF9oYXNoX2dldF9jdXJyZW50X2RhdGEoWl9BUlJWQUxfUChhcnJheSksICh2 b2lkICoqKSAmZW50cnkpID09IEZBSUxVUkUpIHsNCisJaWYgKHplbmRfaGFzaF9nZXRfY3Vy cmVudF9kYXRhKGFycmF5LCAodm9pZCAqKikgJmVudHJ5KSA9PSBGQUlMVVJFKSB7DQogCQlS RVRVUk5fRkFMU0U7DQogCX0NCiAJUkVUVVJOX1pWQUwoKmVudHJ5LCAxLCAwKTsNCkBAIC04 NTYsMTYgKzg2MSwxNiBAQA0KICAgIFJldHVybiB0aGUga2V5IG9mIHRoZSBlbGVtZW50IGN1 cnJlbnRseSBwb2ludGVkIHRvIGJ5IHRoZSBpbnRlcm5hbCBhcnJheSBwb2ludGVyICovDQog UEhQX0ZVTkNUSU9OKGtleSkNCiB7DQotCXp2YWwgKmFycmF5Ow0KKwlIYXNoVGFibGUgKmFy cmF5Ow0KIAljaGFyICpzdHJpbmdfa2V5Ow0KIAl1aW50IHN0cmluZ19sZW5ndGg7DQogCXVs b25nIG51bV9rZXk7DQogDQotCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMoWkVORF9OVU1f QVJHUygpIFRTUk1MU19DQywgImEiLCAmYXJyYXkpID09IEZBSUxVUkUpIHsNCisJaWYgKHpl bmRfcGFyc2VfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCAiSCIsICZh cnJheSkgPT0gRkFJTFVSRSkgew0KIAkJcmV0dXJuOw0KIAl9DQogDQotCXN3aXRjaCAoemVu ZF9oYXNoX2dldF9jdXJyZW50X2tleV9leChaX0FSUlZBTF9QKGFycmF5KSwgJnN0cmluZ19r ZXksICZzdHJpbmdfbGVuZ3RoLCAmbnVtX2tleSwgMCwgTlVMTCkpIHsNCisJc3dpdGNoICh6 ZW5kX2hhc2hfZ2V0X2N1cnJlbnRfa2V5X2V4KGFycmF5LCAmc3RyaW5nX2tleSwgJnN0cmlu Z19sZW5ndGgsICZudW1fa2V5LCAwLCBOVUxMKSkgew0KIAkJY2FzZSBIQVNIX0tFWV9JU19T VFJJTkc6DQogCQkJUkVUVkFMX1NUUklOR0woc3RyaW5nX2tleSwgc3RyaW5nX2xlbmd0aCAt IDEsIDEpOw0KIAkJCWJyZWFrOw0KQEAgLTEwNzAsMjEgKzEwNzUsMjEgQEANCiAgICBBcHBs eSBhIHVzZXIgZnVuY3Rpb24gdG8gZXZlcnkgbWVtYmVyIG9mIGFuIGFycmF5ICovDQogUEhQ X0ZVTkNUSU9OKGFycmF5X3dhbGspDQogew0KLQl6dmFsICphcnJheSwNCi0JCSAqdXNlcmRh dGEgPSBOVUxMOw0KKwlIYXNoVGFibGUgKmFycmF5Ow0KKwl6dmFsICp1c2VyZGF0YSA9IE5V TEw7DQogCXplbmRfZmNhbGxfaW5mbyBvcmlnX2FycmF5X3dhbGtfZmNpOw0KIAl6ZW5kX2Zj YWxsX2luZm9fY2FjaGUgb3JpZ19hcnJheV93YWxrX2ZjaV9jYWNoZTsNCiANCiAJb3JpZ19h cnJheV93YWxrX2ZjaSA9IEJHKGFycmF5X3dhbGtfZmNpKTsNCiAJb3JpZ19hcnJheV93YWxr X2ZjaV9jYWNoZSA9IEJHKGFycmF5X3dhbGtfZmNpX2NhY2hlKTsNCiANCi0JaWYgKHplbmRf cGFyc2VfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCAiYWZ8ei8iLCAm YXJyYXksICZCRyhhcnJheV93YWxrX2ZjaSksICZCRyhhcnJheV93YWxrX2ZjaV9jYWNoZSks ICZ1c2VyZGF0YSkgPT0gRkFJTFVSRSkgew0KKwlpZiAoemVuZF9wYXJzZV9wYXJhbWV0ZXJz KFpFTkRfTlVNX0FSR1MoKSBUU1JNTFNfQ0MsICJIZnx6LyIsICZhcnJheSwgJkJHKGFycmF5 X3dhbGtfZmNpKSwgJkJHKGFycmF5X3dhbGtfZmNpX2NhY2hlKSwgJnVzZXJkYXRhKSA9PSBG QUlMVVJFKSB7DQogCQlCRyhhcnJheV93YWxrX2ZjaSkgPSBvcmlnX2FycmF5X3dhbGtfZmNp Ow0KIAkJQkcoYXJyYXlfd2Fsa19mY2lfY2FjaGUpID0gb3JpZ19hcnJheV93YWxrX2ZjaV9j YWNoZTsNCiAJCXJldHVybjsNCiAJfQ0KIA0KLQlwaHBfYXJyYXlfd2FsayhaX0FSUlZBTF9Q KGFycmF5KSwgdXNlcmRhdGEgPyAmdXNlcmRhdGEgOiBOVUxMLCAwIFRTUk1MU19DQyk7DQor CXBocF9hcnJheV93YWxrKGFycmF5LCB1c2VyZGF0YSA/ICZ1c2VyZGF0YSA6IE5VTEwsIDAg VFNSTUxTX0NDKTsNCiAJQkcoYXJyYXlfd2Fsa19mY2kpID0gb3JpZ19hcnJheV93YWxrX2Zj aTsNCiAJQkcoYXJyYXlfd2Fsa19mY2lfY2FjaGUpID0gb3JpZ19hcnJheV93YWxrX2ZjaV9j YWNoZTsNCiAJUkVUVVJOX1RSVUU7DQpAQCAtMTA5NSwyMSArMTEwMCwyMSBAQA0KICAgIEFw cGx5IGEgdXNlciBmdW5jdGlvbiByZWN1cnNpdmVseSB0byBldmVyeSBtZW1iZXIgb2YgYW4g YXJyYXkgKi8NCiBQSFBfRlVOQ1RJT04oYXJyYXlfd2Fsa19yZWN1cnNpdmUpDQogew0KLQl6 dmFsICphcnJheSwNCi0JCSAqdXNlcmRhdGEgPSBOVUxMOw0KKwlIYXNoVGFibGUgKmFycmF5 Ow0KKwl6dmFsICp1c2VyZGF0YSA9IE5VTEw7DQogCXplbmRfZmNhbGxfaW5mbyBvcmlnX2Fy cmF5X3dhbGtfZmNpOw0KIAl6ZW5kX2ZjYWxsX2luZm9fY2FjaGUgb3JpZ19hcnJheV93YWxr X2ZjaV9jYWNoZTsNCiANCiAJb3JpZ19hcnJheV93YWxrX2ZjaSA9IEJHKGFycmF5X3dhbGtf ZmNpKTsNCiAJb3JpZ19hcnJheV93YWxrX2ZjaV9jYWNoZSA9IEJHKGFycmF5X3dhbGtfZmNp X2NhY2hlKTsNCiANCi0JaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdT KCkgVFNSTUxTX0NDLCAiYWZ8ei8iLCAmYXJyYXksICZCRyhhcnJheV93YWxrX2ZjaSksICZC RyhhcnJheV93YWxrX2ZjaV9jYWNoZSksICZ1c2VyZGF0YSkgPT0gRkFJTFVSRSkgew0KKwlp ZiAoemVuZF9wYXJzZV9wYXJhbWV0ZXJzKFpFTkRfTlVNX0FSR1MoKSBUU1JNTFNfQ0MsICJI Znx6LyIsICZhcnJheSwgJkJHKGFycmF5X3dhbGtfZmNpKSwgJkJHKGFycmF5X3dhbGtfZmNp X2NhY2hlKSwgJnVzZXJkYXRhKSA9PSBGQUlMVVJFKSB7DQogCQlCRyhhcnJheV93YWxrX2Zj aSkgPSBvcmlnX2FycmF5X3dhbGtfZmNpOw0KIAkJQkcoYXJyYXlfd2Fsa19mY2lfY2FjaGUp ID0gb3JpZ19hcnJheV93YWxrX2ZjaV9jYWNoZTsNCiAJCXJldHVybjsNCiAJfQ0KIA0KLQlw aHBfYXJyYXlfd2FsayhaX0FSUlZBTF9QKGFycmF5KSwgdXNlcmRhdGEgPyAmdXNlcmRhdGEg OiBOVUxMLCAxIFRTUk1MU19DQyk7DQorCXBocF9hcnJheV93YWxrKGFycmF5LCB1c2VyZGF0 YSA/ICZ1c2VyZGF0YSA6IE5VTEwsIDEgVFNSTUxTX0NDKTsNCiAJQkcoYXJyYXlfd2Fsa19m Y2kpID0gb3JpZ19hcnJheV93YWxrX2ZjaTsNCiAJQkcoYXJyYXlfd2Fsa19mY2lfY2FjaGUp ID0gb3JpZ19hcnJheV93YWxrX2ZjaV9jYWNoZTsNCiAJUkVUVVJOX1RSVUU7DQpAQCAtNDI2 OCwyNiArNDI3MywyNiBAQA0KICAgIENoZWNrcyBpZiB0aGUgZ2l2ZW4ga2V5IG9yIGluZGV4 IGV4aXN0cyBpbiB0aGUgYXJyYXkgKi8NCiBQSFBfRlVOQ1RJT04oYXJyYXlfa2V5X2V4aXN0 cykNCiB7DQotCXp2YWwgKmtleSwJCQkJCS8qIGtleSB0byBjaGVjayBmb3IgKi8NCi0JCSAq YXJyYXk7CQkJCS8qIGFycmF5IHRvIGNoZWNrIGluICovDQorCXp2YWwgKmtleTsJCQkJCS8q IGtleSB0byBjaGVjayBmb3IgKi8NCisJSGFzaFRhYmxlICphcnJheTsJCQkvKiBhcnJheSB0 byBjaGVjayBpbiAqLw0KIA0KLQlpZiAoemVuZF9wYXJzZV9wYXJhbWV0ZXJzKFpFTkRfTlVN X0FSR1MoKSBUU1JNTFNfQ0MsICJ6YSIsICZrZXksICZhcnJheSkgPT0gRkFJTFVSRSkgew0K KwlpZiAoemVuZF9wYXJzZV9wYXJhbWV0ZXJzKFpFTkRfTlVNX0FSR1MoKSBUU1JNTFNfQ0Ms ICJ6SCIsICZrZXksICZhcnJheSkgPT0gRkFJTFVSRSkgew0KIAkJcmV0dXJuOw0KIAl9DQog DQogCXN3aXRjaCAoWl9UWVBFX1Aoa2V5KSkgew0KIAkJY2FzZSBJU19TVFJJTkc6DQotCQkJ aWYgKHplbmRfc3ltdGFibGVfZXhpc3RzKFpfQVJSVkFMX1AoYXJyYXkpLCBaX1NUUlZBTF9Q KGtleSksIFpfU1RSTEVOX1Aoa2V5KSArIDEpKSB7DQorCQkJaWYgKHplbmRfc3ltdGFibGVf ZXhpc3RzKGFycmF5LCBaX1NUUlZBTF9QKGtleSksIFpfU1RSTEVOX1Aoa2V5KSArIDEpKSB7 DQogCQkJCVJFVFVSTl9UUlVFOw0KIAkJCX0NCiAJCQlSRVRVUk5fRkFMU0U7DQogCQljYXNl IElTX0xPTkc6DQotCQkJaWYgKHplbmRfaGFzaF9pbmRleF9leGlzdHMoWl9BUlJWQUxfUChh cnJheSksIFpfTFZBTF9QKGtleSkpKSB7DQorCQkJaWYgKHplbmRfaGFzaF9pbmRleF9leGlz dHMoYXJyYXksIFpfTFZBTF9QKGtleSkpKSB7DQogCQkJCVJFVFVSTl9UUlVFOw0KIAkJCX0N CiAJCQlSRVRVUk5fRkFMU0U7DQogCQljYXNlIElTX05VTEw6DQotCQkJaWYgKHplbmRfaGFz aF9leGlzdHMoWl9BUlJWQUxfUChhcnJheSksICIiLCAxKSkgew0KKwkJCWlmICh6ZW5kX2hh c2hfZXhpc3RzKGFycmF5LCAiIiwgMSkpIHsNCiAJCQkJUkVUVVJOX1RSVUU7DQogCQkJfQ0K IAkJCVJFVFVSTl9GQUxTRTsNCkluZGV4OiBleHQvc3RhbmRhcmQvYmFzaWNfZnVuY3Rpb25z LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvcmVwb3NpdG9yeS9waHAtc3JjL2V4dC9z dGFuZGFyZC9iYXNpY19mdW5jdGlvbnMuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzI1 LjIuMzEuMi42NC4yLjczDQpkaWZmIC11IC1yMS43MjUuMi4zMS4yLjY0LjIuNzMgYmFzaWNf ZnVuY3Rpb25zLmMNCi0tLSBleHQvc3RhbmRhcmQvYmFzaWNfZnVuY3Rpb25zLmMJMTcgTm92 IDIwMDggMTE6Mjc6NTkgLTAwMDAJMS43MjUuMi4zMS4yLjY0LjIuNzMNCisrKyBleHQvc3Rh bmRhcmQvYmFzaWNfZnVuY3Rpb25zLmMJMjEgTm92IDIwMDggMTk6NDk6NTMgLTAwMDANCkBA IC00NzcwLDcgKzQ3NzAsNyBAQA0KIAlIYXNoVGFibGUgKnBhcmFtc19hcjsNCiAJaW50IG51 bV9lbGVtcywgZWxlbWVudCA9IDA7DQogDQotCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMo WkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgInovemEvIiwgJmNhbGxiYWNrLCAmb2JqZWN0 LCAmcGFyYW1zKSA9PSBGQUlMVVJFKSB7DQorCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMo WkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgInovekEvIiwgJmNhbGxiYWNrLCAmb2JqZWN0 LCAmcGFyYW1zKSA9PSBGQUlMVVJFKSB7DQogCQlyZXR1cm47DQogCX0NCiANCkluZGV4OiBa ZW5kL3plbmRfQVBJLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvcmVwb3NpdG9yeS9a ZW5kRW5naW5lMi96ZW5kX0FQSS5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOTYuMi4y Ny4yLjM0LjIuNTUNCmRpZmYgLXUgLXIxLjI5Ni4yLjI3LjIuMzQuMi41NSB6ZW5kX0FQSS5j DQotLS0gWmVuZC96ZW5kX0FQSS5jCTQgTm92IDIwMDggMTU6NTg6NDkgLTAwMDAJMS4yOTYu Mi4yNy4yLjM0LjIuNTUNCisrKyBaZW5kL3plbmRfQVBJLmMJMjEgTm92IDIwMDggMTk6NDk6 NTMgLTAwMDANCkBAIC0yOTUsNyArMjk1LDcgQEANCiB7DQogCWNoYXIgKnNwZWNfd2FsayA9 ICpzcGVjOw0KIAljaGFyIGMgPSAqc3BlY193YWxrKys7DQotCWludCByZXR1cm5fbnVsbCA9 IDA7DQorCWludCByZXR1cm5fbnVsbCA9IDAsIG9ial9hcnJheSA9IDA7DQogDQogCS8qIHNj YW4gdGhyb3VnaCBtb2RpZmllcnMgKi8NCiAJd2hpbGUgKDEpIHsNCkBAIC00NTEsNyArNDUx LDggQEANCiAJCQkJfQ0KIAkJCX0NCiAJCQlicmVhazsNCi0NCisJCWNhc2UgJ0EnOg0KKwkJ CQlvYmpfYXJyYXkgPSAxOw0KIAkJY2FzZSAnYSc6DQogCQkJew0KIAkJCQl6dmFsICoqcCA9 IHZhX2FyZygqdmEsIHp2YWwgKiopOw0KQEAgLTQ1OSwxNCArNDYwLDE1IEBADQogCQkJCQkq cCA9IE5VTEw7DQogCQkJCQlicmVhazsNCiAJCQkJfQ0KLQkJCQlpZiAoWl9UWVBFX1BQKGFy ZykgPT0gSVNfQVJSQVkpIHsNCisJCQkJaWYgKFpfVFlQRV9QUChhcmcpID09IElTX0FSUkFZ IHx8IChaX1RZUEVfUFAoYXJnKSA9PSBJU19PQkpFQ1QgJiYgb2JqX2FycmF5ICE9IDApKSB7 DQogCQkJCQkqcCA9ICphcmc7DQogCQkJCX0gZWxzZSB7DQogCQkJCQlyZXR1cm4gImFycmF5 IjsNCiAJCQkJfQ0KIAkJCX0NCiAJCQlicmVhazsNCi0NCisJCWNhc2UgJ0gnOg0KKwkJCQlv YmpfYXJyYXkgPSAxOw0KIAkJY2FzZSAnaCc6DQogCQkJew0KIAkJCQlIYXNoVGFibGUgKipw ID0gdmFfYXJnKCp2YSwgSGFzaFRhYmxlICoqKTsNCkBAIC00NzYsNiArNDc4LDExIEBADQog CQkJCX0NCiAJCQkJaWYgKFpfVFlQRV9QUChhcmcpID09IElTX0FSUkFZKSB7DQogCQkJCQkq cCA9IFpfQVJSVkFMX1BQKGFyZyk7DQorCQkJCX0gZWxzZSBpZihvYmpfYXJyYXkgJiYgWl9U WVBFX1BQKGFyZykgPT0gSVNfT0JKRUNUKSB7DQorCQkJCQkqcCA9IEhBU0hfT0YoKmFyZyk7 DQorCQkJCQlpZigqcCA9PSBOVUxMKSB7DQorCQkJCQkJcmV0dXJuICJhcnJheSI7DQorCQkJ CQl9DQogCQkJCX0gZWxzZSB7DQogCQkJCQlyZXR1cm4gImFycmF5IjsNCiAJCQkJfQ0KQEAg LTY3MCw3ICs2NzcsOCBAQA0KIAkJCWNhc2UgJ28nOiBjYXNlICdPJzoNCiAJCQljYXNlICd6 JzogY2FzZSAnWic6DQogCQkJY2FzZSAnQyc6IGNhc2UgJ2gnOg0KLQkJCWNhc2UgJ2YnOg0K KwkJCWNhc2UgJ2YnOiBjYXNlICdBJzoNCisJCQljYXNlICdIJzoNCiAJCQkJbWF4X251bV9h cmdzKys7DQogCQkJCWJyZWFrOw0KIA0K --------------000400040300060002070108--