Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:91565 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 21401 invoked from network); 9 Mar 2016 07:32:50 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 9 Mar 2016 07:32:50 -0000 Authentication-Results: pb1.pair.com header.from=bogdan.andone@intel.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=bogdan.andone@intel.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain intel.com designates 192.55.52.88 as permitted sender) X-PHP-List-Original-Sender: bogdan.andone@intel.com X-Host-Fingerprint: 192.55.52.88 mga01.intel.com Received: from [192.55.52.88] ([192.55.52.88:32501] helo=mga01.intel.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id FD/75-15119-F91DFD65 for ; Wed, 09 Mar 2016 02:32:49 -0500 Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga101.fm.intel.com with ESMTP; 08 Mar 2016 23:32:46 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,310,1455004800"; d="scan'208";a="919974642" Received: from irsmsx109.ger.corp.intel.com ([163.33.3.23]) by fmsmga001.fm.intel.com with ESMTP; 08 Mar 2016 23:32:44 -0800 Received: from irsmsx155.ger.corp.intel.com (163.33.192.3) by IRSMSX109.ger.corp.intel.com (163.33.3.23) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 9 Mar 2016 07:32:42 +0000 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.35]) by irsmsx155.ger.corp.intel.com ([169.254.14.201]) with mapi id 14.03.0248.002; Wed, 9 Mar 2016 07:32:42 +0000 To: 'Nikita Popov' CC: "internals@lists.php.net" Thread-Topic: [PHP-DEV] Lazy keys comparison during hash lookups Thread-Index: AdF5OqqPklKUV25aRaSccqn8QkELAwAAlHWAAAC45pAAAHfB8AAkJkCQ Date: Wed, 9 Mar 2016 07:32:41 +0000 Message-ID: <0ABC26E371A76440A370CFC5EB1056CC40F0BE4F@irsmsx105.ger.corp.intel.com> References: <0ABC26E371A76440A370CFC5EB1056CC40F0BA1F@irsmsx105.ger.corp.intel.com> <0ABC26E371A76440A370CFC5EB1056CC40F0BB53@irsmsx105.ger.corp.intel.com> <0ABC26E371A76440A370CFC5EB1056CC40F0BB89@irsmsx105.ger.corp.intel.com> In-Reply-To: <0ABC26E371A76440A370CFC5EB1056CC40F0BB89@irsmsx105.ger.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMzY4MmYwZTQtY2VlYi00ODg2LWEwY2ItYzJjYzRlMDM5MjJhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjQuMTAuMTkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiemVZQlJPaDdSdFRoNGt1SlVYUWswdTFwZlFxSkJQeHZ2akVvRHlWVVBiST0ifQ== x-ctpclassification: CTP_IC x-originating-ip: [163.33.239.181] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: RE: [PHP-DEV] Lazy keys comparison during hash lookups From: bogdan.andone@intel.com ("Andone, Bogdan") DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQW5kb25lLCBCb2dkYW4g W21haWx0bzpib2dkYW4uYW5kb25lQGludGVsLmNvbV0NCj4gU2VudDogVHVlc2RheSwgTWFyY2gg MDgsIDIwMTYgNDoxOSBQTQ0KPiBUbzogJ05pa2l0YSBQb3BvdicNCj4gQ2M6IGludGVybmFsc0Bs aXN0cy5waHAubmV0DQo+IFN1YmplY3Q6IFJFOiBbUEhQLURFVl0gTGF6eSBrZXlzIGNvbXBhcmlz b24gZHVyaW5nIGhhc2ggbG9va3Vwcw0KPiANCj4gPiBGcm9tOiBOaWtpdGEgUG9wb3YgW21haWx0 bzpuaWtpdGEucHB2QGdtYWlsLmNvbV0NCj4gPiBTZW50OiBUdWVzZGF5LCBNYXJjaCAwOCwgMjAx NiAzOjQzIFBNDQo+ID4gVG86IEFuZG9uZSwgQm9nZGFuDQo+ID4gQ2M6IGludGVybmFsc0BsaXN0 cy5waHAubmV0DQo+ID4gU3ViamVjdDogUmU6IFtQSFAtREVWXSBMYXp5IGtleXMgY29tcGFyaXNv biBkdXJpbmcgaGFzaCBsb29rdXBzDQo+ID4gPk9uIFR1ZSwgTWFyIDgsIDIwMTYgYXQgMjoxOCBQ TSwgTmlraXRhIFBvcG92IDxuaWtpdGEucHB2QGdtYWlsLmNvbT4NCj4gd3JvdGU6DQo+ID4gPj4g T24gVHVlLCBNYXIgOCwgMjAxNiBhdCAyOjAxIFBNLCBBbmRvbmUsIEJvZ2Rhbg0KPiA+IDxib2dk YW4uYW5kb25lQGludGVsLmNvbT4gd3JvdGU6DQo+ID4gPj4gSGkgR3V5cywNCj4gPiA+Pg0KPiA+ ID4+IEkgd291bGQgbGlrZSB0byBwcm9wb3NlIGEgc21hbGwgY2hhbmdlIGludG8gdGhlIERKQlgz M0EgaGFzaA0KPiBmdW5jdGlvbg0KPiA+IGFsZ29yaXRobSB3aGljaCB3aWxsIG1ha2UgZWFzaWVy IHRoZSBrZXkgbWF0Y2hpbmcgdmFsaWRhdGlvbnMgaW4gaGFzaA0KPiA+IGxvb2t1cCBmdW5jdGlv bnMuDQo+ID4gPj4NCj4gPiA+PiBUaGUgY2hhbmdlIGFkZHJlc3NlcyB0aGUgbW9kdWxvIDggdGFp bGluZyBieXRlcyBvZiB0aGUga2V5LiBGb3INCj4gdGhlc2UNCj4gPiBieXRlcyB3ZSBjYW4gdXNl IGFuIDggYml0IHNoaWZ0IGluc3RlYWQgb2YgYSA1IGJpdCBzaGlmdDsgd2UgYWxzbyBuZWVkDQo+ ID4gdG8gcmVwbGFjZSB0aGUgQUREIGJ5IFhPUiwgaW4gb3JkZXIgdG8gYXZvaWQgYnl0ZSBsZXZl bCBvdmVyZmxvd3MuDQo+IFRoaXMNCj4gPiBjaGFuZ2UgZW5zdXJlcyB0aGUgdW5pcXVlbmVzcyBv ZiB0aGUgaGFzaCBmdW5jdGlvbiB0cmFuc2Zvcm1hdGlvbiBmb3INCj4gPiB0aGUgdGFpbGluZyBi eXRlczogc3VwcG9zaW5nIHR3byBzdHJpbmdzIGhhdmUgc2FtZSBwYXJ0aWFsIGhhc2ggdmFsdWUN Cj4gPiBmb3IgdGhlIGZpcnN0IE54OCBieXRlcywgZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBvZiB0 YWlsaW5nIGNoYXJhY3RlcnMNCj4gPiAod2l0aCB0aGUgc2FtZSB0YWlsIHNpemUpIHdpbGwgYWx3 YXlzIGdlbmVyYXRlIGRpZmZlcmVudCBrZXlzLg0KPiA+ID4+IFdlIGhhdmUgdGhlIGZvbGxvd2lu ZyBjb25zZXF1ZW5jZXM6DQo+ID4gPj4gSWYgdHdvIHN0cmluZ3MgaGF2ZToNCj4gPiA+PiAtIHNh bWUgaGFzaCB2YWx1ZSwNCj4gPiA+PiAtIHNhbWUgbGVuZ3RoLA0KPiA+ID4+IC0gc2FtZSBieXRl cyBmb3IgdGhlIGZpcnN0IE54OCBwb3NpdGlvbnMsDQo+ID4gPj4gdGhlbiB0aGV5IGFyZSBlcXVh bCwgYW5kIHRoZSB0YWlsaW5nIGJ5dGVzIGNhbiBiZSBza2lwcGVkIGR1cmluZw0KPiA+IGNvbXBh cmlzb24uDQo+ID4gPj4NCj4gPiA+PiBUaGVyZSBpcyBhIHZpc2libGUgcGVyZm9ybWFuY2UgZ2Fp biBpZiB3ZSBhcHBseSB0aGlzIGFwcHJvYWNoIGFzIHdlDQo+ID4gY2FuIHVzZSBhIGxpZ2h0d2Vp Z2h0IG1lbWNtcCgpIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIGxvbmdzDQo+IGNvbXBhcmlzb24N Cj4gPiBhbmQgY29tcGxldGVseSBmcmVlIG9mIHRoZSBjb21wbGV4aXR5IGluY3VycmVkIGJ5IHRh aWxpbmcgYnl0ZXMuIEZvcg0KPiA+IE1lZGlhd2lraSBJIGhhdmUgYSAxLjclwqAgcGVyZm9ybWFu Y2UgZ2FpbiB3aGlsZSBXb3JkcHJlc3MgcmVwb3J0cyAxLjIlDQo+ID4gc3BlZWR1cCBvbiBIYXN3 ZWxsLUVQLg0KPiA+ID4+DQo+ID4gPj4gTGV04oCZcyB0YWtlIGEgc21hbGwgZXhhbXBsZToNCj4g PiA+PiBTdXBwb3NlIHdlIGhhdmUgYSBrZXk94oCddGhpc19pc19hX2tleV92YWx1ZeKAnS4NCj4g PiA+PiBUaGUgaGFzaCBmdW5jdGlvbiBmb3IgdGhlwqAgZmlyc3QgTiB4IDggYnllcyBhcmUgY29t cHV0ZWQgaW4gdGhlDQo+ID4gb3JpZ2luYWwgd2F5OyBzdXBwb3NlIOKAnHRoaXNfaXNfYV9rZXlf dmHigJ0gKDE2Ynl0ZXMpIHdpbGwgcmV0dXJuIGENCj4gcGFydGlhbA0KPiA+IGhhc2ggdmFsdWUg aDE7IHRoZSBmaW5hbCBoYXNoIHZhbHVlIHdpbGwgYmUgY29tcHV0ZWQgYnkgdGhlIGZvbGxvd2lu Zw0KPiA+IHNlcXVlbmNlOg0KPiA+ID4+IGggPSAoKGgxPDw4KSBeIGgxKSBeIOKAmGzigJk7DQo+ ID4gPj4gaCA9ICgoaDw8OCkgXiBoKSBeIOKAmHXigJk7DQo+ID4gPj4gaCA9ICgoaDw8OCkgXiBo KSBeIOKAmGXigJk7DQo+ID4gPj4gb3IsIGluIG9ubHkgb25lIG9wZXJhdGlvbjoNCj4gPiA+PiBo ID0gKGgxPDwyNCkgXiAoaDE8PDE2KSBeIChoMTw8OCkgXiBoMSBeICjigJhs4oCZPDwxNikgXiAo KOKAmGzigJle4oCYdeKAmSk8PDgpDQo+IF4NCj4gPiAo4oCYbOKAmV7igJl14oCZXuKAmGXigJkp DQo+ID4gPj4gV2UgY2FuIHNlZSB0aGF0IGh0PSjigJhs4oCZPDwxNikgXiAoKOKAmGzigJle4oCY deKAmSk8PDgpIF4NCj4gKOKAmGzigJle4oCZdeKAmV7igJhl4oCZKcKgIGNhbm5vdA0KPiA+IGJl IG9idGFpbmVkIGJ5IGFueSBvdGhlciAzIGNoYXJhY3RlcnMgbG9uZyB0YWlsLiBUaGUgc3RhdGVt ZW50IGlzIG5vdA0KPiA+IHRydWUgaWYgd2UgdXNlIEFERCBpbnN0ZWFkIG9mIFhPUiwgYXMgZXh0 ZW5kZWQgQVNDSUkgY2hhcmFjdGVycyBtaWdodA0KPiA+IGdlbmVyYXRlIG92ZXJmbG93cyBhZmZl Y3RpbmcgdGhlIExTQiBvZiB0aGUgaGlnaGVyIGJ5dGUgaW4gdGhlIGhhc2gNCj4gPiB2YWx1ZS4N Cj4gPiA+Pg0KPiA+ID4+IEkgcHVzaGVkIGEgcHVsbCByZXF1ZXN0IGhlcmU6IGh0dHBzOi8vZ2l0 aHViLmNvbS9waHAvcGhwLQ0KPiA+IHNyYy9wdWxsLzE3OTMuIFVuZm9ydHVuYXRlbHkgaXQgZG9l cyBub3QgcGFzcyB0aGUgdHJhdmlzIHRlc3RzIGJlY2F1c2UNCj4gPiDigJxodG1sc3BlY2lhbGNo YXJzIGV0YyB1c2UgYSBnZW5lcmF0ZWQgdGFibGUgdGhhdCBhc3N1bWVzIHRoZSBjdXJyZW50DQo+ ID4gaGFzaCBmdW5jdGlvbuKAnSBhcyBub3RpY2VkIGJ5IE5pa2l0YS4NCj4gPiA+Pg0KPiA+ID4+ IExldCBtZSBrbm93IHlvdXIgdGhvdWdodHMgb24gdGhpcyBpZGVhLg0KPiA+ID4NCj4gPiA+IEhl eSBCb2dkYW4sDQo+ID4gPiBUaGlzIGxvb2tzIGxpa2UgYW4gaW50ZXJlc3RpbmcgaWRlYSEgSSdt IHNvbWV3aGF0IGFwcHJlaGVuc2l2ZSBhYm91dA0KPiA+IGNvdXBsaW5nIHRoaXMgdG8gYSBjaGFu Z2Ugb2YgdGhlIGhhc2ggZnVuY3Rpb24sIGZvciB0d28gcmVhc29uczoNCj4gPiA+IGEpIFRoaXMg d2lsbCBtYWtlIGl0IG1vcmUgcHJvYmxlbWF0aWMgaWYgd2Ugd2FudCB0byBjaGFuZ2UgdGhlIGhh c2gNCj4gPiBmdW5jdGlvbiBpbiB0aGUgZnV0dXJlLCBlLmcuIGlmIHdlIHdhbnQgdG8gc3dpdGNo IHRvIFNpcEhhc2guDQo+ID4gPiBiKSBUaGUgcXVhbGl0eSBvZiB0aGUgbmV3IGhhc2ggZGlzdHJp YnV0aW9uIGlzIG5vdCBpbW1lZGlhdGVseQ0KPiBjbGVhciwNCj4gPiBidXQgbGlrZWx5IG5vbi10 cml2aWFsbHkgd2Vha2VyLg0KPiA+ID4gU28gSSdtIHdvbmRlcmluZyBpZiB3ZSBjYW4ga2VlcCB0 aGUgY29uY2VwdCBvZiB1c2luZyBhIHplbmRfdWxvbmcNCj4gPiBhbGlnbmVkIG1lbWNtcCB3aGls ZSBsZWF2aW5nIHRoZSBoYXNoIGZ1bmN0aW9uIGFsb25lOiBUaGUgemVuZF9zdHJpbmcNCj4gPiBh bGxvY2F0aW9uIHBvbGljeSBhbHJlYWR5IGFsbG9jYXRlcyB0aGUgc3RyaW5nIGRhdGEgYWxpZ25l ZCBhbmQgcGFkZGVkDQo+ID4gdG8gemVuZF91bG9uZyBib3VuZGFyaWVzLiBJZiB3ZSB3ZXJlIHRv IGFkZGl0aW9uYWxseSBleHBsaWNpdGx5IHplcm8NCj4gb3V0DQo+ID4gdGhlIGxhc3QgYnl0ZSAo dG8gYXZvaWQgdmFsZ3JpbmQgd2FybmluZ3MpIHdlIHNob3VsZCBiZSBhYmxlIHRvDQo+IGNvbXBh cmUNCj4gPiB0aGUgY2hhcmFjdGVyIGRhdGEgb2YgdHdvIHplbmRfc3RyaW5ncyB1c2luZyBhIHpl bmRfdWxvbmcgbWVtY21wLiBUaGlzDQo+ID4gd291bGQgaGF2ZSB0aGUgYWRkaXRpb25hbCBiZW5l Zml0IHRoYXQgaXQgd29ya3MgZm9yIG5vcm1hbCBzdHJpbmcNCj4gPiBjb21wYXJpc29ucyAodW5y ZWxhdGVkIHRvIGhhc2h0YWJsZXMpIGFzIHdlbGwuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGlzDQo+ ID4gaXMgb25seSBwb3NzaWJsZSBmb3IgemVuZF9zdHJpbmcgdG8gemVuZF9zdHJpbmcgY29tcGFy aXNvbnMsIG5vdCBmb3INCj4gPiBjb21wYXJpc29ucyB3aXRoIHN0YXRpYyBzdHJpbmdzLg0KPiA+ ID4gUmVnYXJkcywNCj4gPiBzL3plcm8gb3V0IHRoZSBsYXN0IGJ5dGUvemVybyBvdXQgdGhlIGxh c3QgemVuZF91bG9uZw0KPiA+IEknZCBsaWtlIHRvIGFkZCBhbm90aGVyIGlzc3VlIHdpdGggcmVs eWluZyBvbiB0aGUgaGFzaCBmb3IgdGhpcyB3aGljaA0KPiBJDQo+ID4ganVzdCByZW1lbWJlcmVk OiBXZSBjdXJyZW50bHkgYWx3YXlzIHNldCB0aGUgdG9wIGJpdCBvZiB0aGUgaGFzaCBmb3INCj4g PiBzdHJpbmdzIChzZWUNCj4gaHR0cDovL2x4ci5waHAubmV0L3hyZWYvUEhQX1RSVU5LL1plbmQv emVuZF9zdHJpbmcuaCMzNTEpLA0KPiA+IGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGhhc2hlcyBh cmUgbmV2ZXIgemVyby4gVGhpcyBtYWtlcyB0aGUgaGFzaA0KPiBub24tDQo+ID4gdW5pcXVlLg0K PiA+IE5pa2l0YQ0KPiBZZWFoLi4uIEkgbWlzc2VkIHRoZSB0b3AgYml0IHNldCwgYnV0IEkgdGhp bmsgaXQgY291bGQgYmUgc29sdmVkDQo+IHNvbWVob3cuIA0KQWN0dWFsbHkgc2V0dGluZyB0aGUg dG9wIGJpdCBpcyBub3QgYW4gaXNzdWUuIFRoZSB0cmFuc2Zvcm1hdGlvbiB1bmljaXR5IHNoYWxs IGJlIGVuc3VyZWQgZm9yIHRoZSB0YWlsaW5nIGJ5dGVzIG9ubHkgd2hpY2ggYXJlIHNoaWZ0ZWQg dG8gdGhlIGxlZnQgbWF4aW11bSA3KG9uIDY0Yml0cykvMyhvbiAzMmJpdHMpIHBvc2l0aW9uczsg c28gdGhleSB3aWxsIG5ldmVyIHJlYWNoIHRoZSB0b3AgYnl0ZSBhbmQgc2V0dGluZyB0aGUgdG9w IGJpdCB3aWxsIG5vdCBoYXJtIGluIHRlcm1zIG9mIHRhaWxpbmcgYnl0ZXMuDQoNCj4gSW1obyB0 aGUgc3Ryb25nZXN0IHJlYXNvbiBhZ2FpbnN0IHRoZSBwYXRjaCBpcyB0aGUgZGVwZW5kZW5jeQ0K PiBiZXR3ZWVuIHRoZSBoYXNoIGZ1bmN0aW9uIGFuZCB0aGUga2V5IHZhbGlkYXRpb24gbWV0aG9k IGJ1dCBJIGhhdmUgdGhlDQo+IGltcHJlc3Npb24gdGhhdCB0aGlzIGlzIG5vdCBiZSB0aGUgbW9z dCBkaXJ0eSBoYWNrIGRlcGxveWVkIGV2ZXIgaW4gUEhQOw0KPiBhbmQgSSBkb24ndCBrbm93IHZl cnkgd2VsbCB3aGF0IGlzIHRoZSBkZWdyZWUgb2YgY29tcHJvbWlzZSBhY2NlcHRhYmxlDQo+IGZv ciAxJSBzcGVlZHVwIDotKQ0KT3RoZXJ3aXNlIHRoZSBjb25jZXJucyBhYm91dCB0aGUgcXVhbGl0 eSBvZiB0aGUgaGFzaCBmdW5jdGlvbiBhbmQgdGhlIGludGVudGlvbiB0byBjaGFuZ2UgaXQgd2l0 aCBTaXBIYXNoIG9yIHNvbWV0aGluZyBlbHNlLCBJIGFtIGFmcmFpZCBpdCB3aWxsIG5vdCBicmlu ZyBtdWNoIGluIHRlcm1zIG9mIGNvbGxpc2lvbnMgcmVkdWN0aW9uczsgdGhlIGlzc3VlIGhlcmUg aXMgdGhlIGZhY3QgdGhhdCBoYXNoIGJ1Y2tldCBzZWxlY3Rpb24gdXNlcyBvbmx5IHRoZSBsYXN0 IGZldyBiaXRzIG9mIHRoZSBoYXNoIHZhbHVlLiBOb3Qgc3VyZSBob3cgbXVjaCBjb3VsZCBoZWxw IGhlcmUgU2lwSGFzaC4uLg0KSnVzdCBmb3IgZGVmZW5kaW5nIHRoZSB0ZWNobmljYWwgZmVhc2li aWxpdHkgb2YgdGhpcyBQT0MgSSB0aGluayB0aGF0IGluamVjdGl2ZSB0cmFuc2Zvcm1hdGlvbiBm b3IgbGFzdCB0YWlsaW5nIGJ5dGVzIGNvdWxkIGJlIGRlcGxveWVkIG92ZXIgdGhlb3JldGljYWxs eSBhbnkgaGFzaCBmdW5jdGlvbi4NCg0KVGhhbmtzLA0KQm9nZGFuDQoNCj4gT24gdGhlIG90aGVy IGhhbmQsIHlvdXIgaWRlYSB0byB6ZXJvIHRoZSBsYXN0IHplbmRfdWxvbmcgaW4gdGhlDQo+IHpl bmRfc3RyaW5nIGxvb2tzIG5pY2UuIFRoZXJlIGNvdWxkIGJlIGFuIGFkZGl0aW9uYWwgcG90ZW50 aWFsIGdhaW4gYWxzbw0KPiBmcm9tIGxpZ2h0d2VpZ2h0IGltcGxlbWVudGF0aW9uIG9mIG1lbWNt cCgpLiBJIHdpbGwgZ2l2ZSBpdCBhIHRyeSB0byBzZWUNCj4gaWYgaXQgZ2V0cyBiZXR0ZXIgcmVz dWx0cyB0aGFuIHRoZSBjdXJyZW50IHByb3Bvc2FsLg0KPiBJIGFzc3VtZSBhbGwgemVuZF9zdHJp bmcgYWxsb2NhdGlvbiBmdW5jdGlvbnMgYXJlIGxvY2F0ZWQgaW4NCj4gemVuZF9zdHJpbmcuaCwg Y29ycmVjdD8NCj4gDQo+IFRoYW5rcywNCj4gQm9nZGFuDQo=