Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:91745 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 16646 invoked from network); 18 Mar 2016 09:58:15 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 18 Mar 2016 09:58:15 -0000 Authentication-Results: pb1.pair.com smtp.mail=bogdan.andone@intel.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=bogdan.andone@intel.com; 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:12656] helo=mga01.intel.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 60/80-13075-531DBE65 for ; Fri, 18 Mar 2016 04:58:14 -0500 Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga101.fm.intel.com with ESMTP; 18 Mar 2016 02:58:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,354,1455004800"; d="scan'208";a="68888793" Received: from irsmsx102.ger.corp.intel.com ([163.33.3.155]) by fmsmga004.fm.intel.com with ESMTP; 18 Mar 2016 02:58:11 -0700 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.35]) by IRSMSX102.ger.corp.intel.com ([169.254.2.19]) with mapi id 14.03.0248.002; Fri, 18 Mar 2016 09:58:09 +0000 To: 'Nikita Popov' CC: "internals@lists.php.net" Thread-Topic: [PHP-DEV] Lazy keys comparison during hash lookups Thread-Index: AdF5OqqPklKUV25aRaSccqn8QkELAwAAlHWAAAC45pAAAHfB8AAkJkCQAcnWDRA= Date: Fri, 18 Mar 2016 09:58:08 +0000 Message-ID: <0ABC26E371A76440A370CFC5EB1056CC40F13B94@irsmsx105.ger.corp.intel.com> References: <0ABC26E371A76440A370CFC5EB1056CC40F0BA1F@irsmsx105.ger.corp.intel.com> <0ABC26E371A76440A370CFC5EB1056CC40F0BB53@irsmsx105.ger.corp.intel.com> <0ABC26E371A76440A370CFC5EB1056CC40F0BB89@irsmsx105.ger.corp.intel.com> <0ABC26E371A76440A370CFC5EB1056CC40F0BE4F@irsmsx105.ger.corp.intel.com> In-Reply-To: <0ABC26E371A76440A370CFC5EB1056CC40F0BE4F@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") PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBBbmRvbmUsIEJvZ2RhbiBbbWFp bHRvOmJvZ2Rhbi5hbmRvbmVAaW50ZWwuY29tXQ0KPiBTZW50OiBXZWRuZXNkYXksIE1hcmNoIDA5 LCAyMDE2IDk6MzMgQU0NCj4gVG86ICdOaWtpdGEgUG9wb3YnDQo+IENjOiBpbnRlcm5hbHNAbGlz dHMucGhwLm5ldA0KPiBTdWJqZWN0OiBSRTogW1BIUC1ERVZdIExhenkga2V5cyBjb21wYXJpc29u IGR1cmluZyBoYXNoIGxvb2t1cHMNCj4gDQo+IA0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3Nh Z2UtLS0tLQ0KPiA+IEZyb206IEFuZG9uZSwgQm9nZGFuIFttYWlsdG86Ym9nZGFuLmFuZG9uZUBp bnRlbC5jb21dDQo+ID4gU2VudDogVHVlc2RheSwgTWFyY2ggMDgsIDIwMTYgNDoxOSBQTQ0KPiA+ IFRvOiAnTmlraXRhIFBvcG92Jw0KPiA+IENjOiBpbnRlcm5hbHNAbGlzdHMucGhwLm5ldA0KPiA+ IFN1YmplY3Q6IFJFOiBbUEhQLURFVl0gTGF6eSBrZXlzIGNvbXBhcmlzb24gZHVyaW5nIGhhc2gg bG9va3Vwcw0KPiA+DQo+ID4gPiBGcm9tOiBOaWtpdGEgUG9wb3YgW21haWx0bzpuaWtpdGEucHB2 QGdtYWlsLmNvbV0NCj4gPiA+IFNlbnQ6IFR1ZXNkYXksIE1hcmNoIDA4LCAyMDE2IDM6NDMgUE0N Cj4gPiA+IFRvOiBBbmRvbmUsIEJvZ2Rhbg0KPiA+ID4gQ2M6IGludGVybmFsc0BsaXN0cy5waHAu bmV0DQo+ID4gPiBTdWJqZWN0OiBSZTogW1BIUC1ERVZdIExhenkga2V5cyBjb21wYXJpc29uIGR1 cmluZyBoYXNoIGxvb2t1cHMNCj4gPiA+ID5PbiBUdWUsIE1hciA4LCAyMDE2IGF0IDI6MTggUE0s IE5pa2l0YSBQb3BvdiA8bmlraXRhLnBwdkBnbWFpbC5jb20+DQo+ID4gd3JvdGU6DQo+ID4gPiA+ PiBPbiBUdWUsIE1hciA4LCAyMDE2IGF0IDI6MDEgUE0sIEFuZG9uZSwgQm9nZGFuDQo+ID4gPiA8 Ym9nZGFuLmFuZG9uZUBpbnRlbC5jb20+IHdyb3RlOg0KPiA+ID4gPj4gSGkgR3V5cywNCj4gPiA+ ID4+DQo+ID4gPiA+PiBJIHdvdWxkIGxpa2UgdG8gcHJvcG9zZSBhIHNtYWxsIGNoYW5nZSBpbnRv IHRoZSBESkJYMzNBIGhhc2gNCj4gPiBmdW5jdGlvbg0KPiA+ID4gYWxnb3JpdGhtIHdoaWNoIHdp bGwgbWFrZSBlYXNpZXIgdGhlIGtleSBtYXRjaGluZyB2YWxpZGF0aW9ucyBpbg0KPiBoYXNoDQo+ ID4gPiBsb29rdXAgZnVuY3Rpb25zLg0KPiA+ID4gPj4NCj4gPiA+ID4+IFRoZSBjaGFuZ2UgYWRk cmVzc2VzIHRoZSBtb2R1bG8gOCB0YWlsaW5nIGJ5dGVzIG9mIHRoZSBrZXkuIEZvcg0KPiA+IHRo ZXNlDQo+ID4gPiBieXRlcyB3ZSBjYW4gdXNlIGFuIDggYml0IHNoaWZ0IGluc3RlYWQgb2YgYSA1 IGJpdCBzaGlmdDsgd2UgYWxzbw0KPiBuZWVkDQo+ID4gPiB0byByZXBsYWNlIHRoZSBBREQgYnkg WE9SLCBpbiBvcmRlciB0byBhdm9pZCBieXRlIGxldmVsIG92ZXJmbG93cy4NCj4gPiBUaGlzDQo+ ID4gPiBjaGFuZ2UgZW5zdXJlcyB0aGUgdW5pcXVlbmVzcyBvZiB0aGUgaGFzaCBmdW5jdGlvbiB0 cmFuc2Zvcm1hdGlvbg0KPiBmb3INCj4gPiA+IHRoZSB0YWlsaW5nIGJ5dGVzOiBzdXBwb3Npbmcg dHdvIHN0cmluZ3MgaGF2ZSBzYW1lIHBhcnRpYWwgaGFzaA0KPiB2YWx1ZQ0KPiA+ID4gZm9yIHRo ZSBmaXJzdCBOeDggYnl0ZXMsIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgdGFpbGluZw0KPiBj aGFyYWN0ZXJzDQo+ID4gPiAod2l0aCB0aGUgc2FtZSB0YWlsIHNpemUpIHdpbGwgYWx3YXlzIGdl bmVyYXRlIGRpZmZlcmVudCBrZXlzLg0KPiA+ID4gPj4gV2UgaGF2ZSB0aGUgZm9sbG93aW5nIGNv bnNlcXVlbmNlczoNCj4gPiA+ID4+IElmIHR3byBzdHJpbmdzIGhhdmU6DQo+ID4gPiA+PiAtIHNh bWUgaGFzaCB2YWx1ZSwNCj4gPiA+ID4+IC0gc2FtZSBsZW5ndGgsDQo+ID4gPiA+PiAtIHNhbWUg Ynl0ZXMgZm9yIHRoZSBmaXJzdCBOeDggcG9zaXRpb25zLA0KPiA+ID4gPj4gdGhlbiB0aGV5IGFy ZSBlcXVhbCwgYW5kIHRoZSB0YWlsaW5nIGJ5dGVzIGNhbiBiZSBza2lwcGVkIGR1cmluZw0KPiA+ ID4gY29tcGFyaXNvbi4NCj4gPiA+ID4+DQo+ID4gPiA+PiBUaGVyZSBpcyBhIHZpc2libGUgcGVy Zm9ybWFuY2UgZ2FpbiBpZiB3ZSBhcHBseSB0aGlzIGFwcHJvYWNoIGFzDQo+IHdlDQo+ID4gPiBj YW4gdXNlIGEgbGlnaHR3ZWlnaHQgbWVtY21wKCkgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gbG9u Z3MNCj4gPiBjb21wYXJpc29uDQo+ID4gPiBhbmQgY29tcGxldGVseSBmcmVlIG9mIHRoZSBjb21w bGV4aXR5IGluY3VycmVkIGJ5IHRhaWxpbmcgYnl0ZXMuIEZvcg0KPiA+ID4gTWVkaWF3aWtpIEkg aGF2ZSBhIDEuNyXCoCBwZXJmb3JtYW5jZSBnYWluIHdoaWxlIFdvcmRwcmVzcyByZXBvcnRzDQo+ IDEuMiUNCj4gPiA+IHNwZWVkdXAgb24gSGFzd2VsbC1FUC4NCj4gPiA+ID4+DQo+ID4gPiA+PiBM ZXTigJlzIHRha2UgYSBzbWFsbCBleGFtcGxlOg0KPiA+ID4gPj4gU3VwcG9zZSB3ZSBoYXZlIGEg a2V5PeKAnXRoaXNfaXNfYV9rZXlfdmFsdWXigJ0uDQo+ID4gPiA+PiBUaGUgaGFzaCBmdW5jdGlv biBmb3IgdGhlwqAgZmlyc3QgTiB4IDggYnllcyBhcmUgY29tcHV0ZWQgaW4gdGhlDQo+ID4gPiBv cmlnaW5hbCB3YXk7IHN1cHBvc2Ug4oCcdGhpc19pc19hX2tleV92YeKAnSAoMTZieXRlcykgd2ls bCByZXR1cm4gYQ0KPiA+IHBhcnRpYWwNCj4gPiA+IGhhc2ggdmFsdWUgaDE7IHRoZSBmaW5hbCBo YXNoIHZhbHVlIHdpbGwgYmUgY29tcHV0ZWQgYnkgdGhlDQo+IGZvbGxvd2luZw0KPiA+ID4gc2Vx dWVuY2U6DQo+ID4gPiA+PiBoID0gKChoMTw8OCkgXiBoMSkgXiDigJhs4oCZOw0KPiA+ID4gPj4g aCA9ICgoaDw8OCkgXiBoKSBeIOKAmHXigJk7DQo+ID4gPiA+PiBoID0gKChoPDw4KSBeIGgpIF4g 4oCYZeKAmTsNCj4gPiA+ID4+IG9yLCBpbiBvbmx5IG9uZSBvcGVyYXRpb246DQo+ID4gPiA+PiBo ID0gKGgxPDwyNCkgXiAoaDE8PDE2KSBeIChoMTw8OCkgXiBoMSBeICjigJhs4oCZPDwxNikgXg0K PiAoKOKAmGzigJle4oCYdeKAmSk8PDgpDQo+ID4gXg0KPiA+ID4gKOKAmGzigJle4oCZdeKAmV7i gJhl4oCZKQ0KPiA+ID4gPj4gV2UgY2FuIHNlZSB0aGF0IGh0PSjigJhs4oCZPDwxNikgXiAoKOKA mGzigJle4oCYdeKAmSk8PDgpIF4NCj4gPiAo4oCYbOKAmV7igJl14oCZXuKAmGXigJkpwqAgY2Fu bm90DQo+ID4gPiBiZSBvYnRhaW5lZCBieSBhbnkgb3RoZXIgMyBjaGFyYWN0ZXJzIGxvbmcgdGFp bC4gVGhlIHN0YXRlbWVudCBpcw0KPiBub3QNCj4gPiA+IHRydWUgaWYgd2UgdXNlIEFERCBpbnN0 ZWFkIG9mIFhPUiwgYXMgZXh0ZW5kZWQgQVNDSUkgY2hhcmFjdGVycw0KPiBtaWdodA0KPiA+ID4g Z2VuZXJhdGUgb3ZlcmZsb3dzIGFmZmVjdGluZyB0aGUgTFNCIG9mIHRoZSBoaWdoZXIgYnl0ZSBp biB0aGUgaGFzaA0KPiA+ID4gdmFsdWUuDQo+ID4gPiA+Pg0KPiA+ID4gPj4gSSBwdXNoZWQgYSBw dWxsIHJlcXVlc3QgaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3BocC9waHAtDQo+ID4gPiBzcmMv cHVsbC8xNzkzLiBVbmZvcnR1bmF0ZWx5IGl0IGRvZXMgbm90IHBhc3MgdGhlIHRyYXZpcyB0ZXN0 cw0KPiBiZWNhdXNlDQo+ID4gPiDigJxodG1sc3BlY2lhbGNoYXJzIGV0YyB1c2UgYSBnZW5lcmF0 ZWQgdGFibGUgdGhhdCBhc3N1bWVzIHRoZSBjdXJyZW50DQo+ID4gPiBoYXNoIGZ1bmN0aW9u4oCd IGFzIG5vdGljZWQgYnkgTmlraXRhLg0KPiA+ID4gPj4NCj4gPiA+ID4+IExldCBtZSBrbm93IHlv dXIgdGhvdWdodHMgb24gdGhpcyBpZGVhLg0KPiA+ID4gPg0KPiA+ID4gPiBIZXkgQm9nZGFuLA0K PiA+ID4gPiBUaGlzIGxvb2tzIGxpa2UgYW4gaW50ZXJlc3RpbmcgaWRlYSEgSSdtIHNvbWV3aGF0 IGFwcHJlaGVuc2l2ZQ0KPiBhYm91dA0KPiA+ID4gY291cGxpbmcgdGhpcyB0byBhIGNoYW5nZSBv ZiB0aGUgaGFzaCBmdW5jdGlvbiwgZm9yIHR3byByZWFzb25zOg0KPiA+ID4gPiBhKSBUaGlzIHdp bGwgbWFrZSBpdCBtb3JlIHByb2JsZW1hdGljIGlmIHdlIHdhbnQgdG8gY2hhbmdlIHRoZQ0KPiBo YXNoDQo+ID4gPiBmdW5jdGlvbiBpbiB0aGUgZnV0dXJlLCBlLmcuIGlmIHdlIHdhbnQgdG8gc3dp dGNoIHRvIFNpcEhhc2guDQo+ID4gPiA+IGIpIFRoZSBxdWFsaXR5IG9mIHRoZSBuZXcgaGFzaCBk aXN0cmlidXRpb24gaXMgbm90IGltbWVkaWF0ZWx5DQo+ID4gY2xlYXIsDQo+ID4gPiBidXQgbGlr ZWx5IG5vbi10cml2aWFsbHkgd2Vha2VyLg0KPiA+ID4gPiBTbyBJJ20gd29uZGVyaW5nIGlmIHdl IGNhbiBrZWVwIHRoZSBjb25jZXB0IG9mIHVzaW5nIGEgemVuZF91bG9uZw0KPiA+ID4gYWxpZ25l ZCBtZW1jbXAgd2hpbGUgbGVhdmluZyB0aGUgaGFzaCBmdW5jdGlvbiBhbG9uZTogVGhlDQo+IHpl bmRfc3RyaW5nDQo+ID4gPiBhbGxvY2F0aW9uIHBvbGljeSBhbHJlYWR5IGFsbG9jYXRlcyB0aGUg c3RyaW5nIGRhdGEgYWxpZ25lZCBhbmQNCj4gcGFkZGVkDQo+ID4gPiB0byB6ZW5kX3Vsb25nIGJv dW5kYXJpZXMuIElmIHdlIHdlcmUgdG8gYWRkaXRpb25hbGx5IGV4cGxpY2l0bHkgemVybw0KPiA+ IG91dA0KPiA+ID4gdGhlIGxhc3QgYnl0ZSAodG8gYXZvaWQgdmFsZ3JpbmQgd2FybmluZ3MpIHdl IHNob3VsZCBiZSBhYmxlIHRvDQo+ID4gY29tcGFyZQ0KPiA+ID4gdGhlIGNoYXJhY3RlciBkYXRh IG9mIHR3byB6ZW5kX3N0cmluZ3MgdXNpbmcgYSB6ZW5kX3Vsb25nIG1lbWNtcC4NCj4gVGhpcw0K PiA+ID4gd291bGQgaGF2ZSB0aGUgYWRkaXRpb25hbCBiZW5lZml0IHRoYXQgaXQgd29ya3MgZm9y IG5vcm1hbCBzdHJpbmcNCj4gPiA+IGNvbXBhcmlzb25zICh1bnJlbGF0ZWQgdG8gaGFzaHRhYmxl cykgYXMgd2VsbC4gT24gdGhlIG90aGVyIGhhbmQsDQo+IHRoaXMNCj4gPiA+IGlzIG9ubHkgcG9z c2libGUgZm9yIHplbmRfc3RyaW5nIHRvIHplbmRfc3RyaW5nIGNvbXBhcmlzb25zLCBub3QgZm9y DQo+ID4gPiBjb21wYXJpc29ucyB3aXRoIHN0YXRpYyBzdHJpbmdzLg0KPiA+ID4gPiBSZWdhcmRz LA0KPiA+ID4gcy96ZXJvIG91dCB0aGUgbGFzdCBieXRlL3plcm8gb3V0IHRoZSBsYXN0IHplbmRf dWxvbmcNCj4gPiA+IEknZCBsaWtlIHRvIGFkZCBhbm90aGVyIGlzc3VlIHdpdGggcmVseWluZyBv biB0aGUgaGFzaCBmb3IgdGhpcw0KPiB3aGljaA0KPiA+IEkNCj4gPiA+IGp1c3QgcmVtZW1iZXJl ZDogV2UgY3VycmVudGx5IGFsd2F5cyBzZXQgdGhlIHRvcCBiaXQgb2YgdGhlIGhhc2ggZm9yDQo+ ID4gPiBzdHJpbmdzIChzZWUNCj4gPiBodHRwOi8vbHhyLnBocC5uZXQveHJlZi9QSFBfVFJVTksv WmVuZC96ZW5kX3N0cmluZy5oIzM1MSksDQo+ID4gPiBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBo YXNoZXMgYXJlIG5ldmVyIHplcm8uIFRoaXMgbWFrZXMgdGhlIGhhc2gNCj4gPiBub24tDQo+ID4g PiB1bmlxdWUuDQo+ID4gPiBOaWtpdGENCj4gPiBZZWFoLi4uIEkgbWlzc2VkIHRoZSB0b3AgYml0 IHNldCwgYnV0IEkgdGhpbmsgaXQgY291bGQgYmUgc29sdmVkDQo+ID4gc29tZWhvdy4NCj4gQWN0 dWFsbHkgc2V0dGluZyB0aGUgdG9wIGJpdCBpcyBub3QgYW4gaXNzdWUuIFRoZSB0cmFuc2Zvcm1h dGlvbiB1bmljaXR5DQo+IHNoYWxsIGJlIGVuc3VyZWQgZm9yIHRoZSB0YWlsaW5nIGJ5dGVzIG9u bHkgd2hpY2ggYXJlIHNoaWZ0ZWQgdG8gdGhlDQo+IGxlZnQgbWF4aW11bSA3KG9uIDY0Yml0cykv MyhvbiAzMmJpdHMpIHBvc2l0aW9uczsgc28gdGhleSB3aWxsIG5ldmVyDQo+IHJlYWNoIHRoZSB0 b3AgYnl0ZSBhbmQgc2V0dGluZyB0aGUgdG9wIGJpdCB3aWxsIG5vdCBoYXJtIGluIHRlcm1zIG9m DQo+IHRhaWxpbmcgYnl0ZXMuDQo+IA0KPiA+IEltaG8gdGhlIHN0cm9uZ2VzdCByZWFzb24gYWdh aW5zdCB0aGUgcGF0Y2ggaXMgdGhlIGRlcGVuZGVuY3kNCj4gPiBiZXR3ZWVuIHRoZSBoYXNoIGZ1 bmN0aW9uIGFuZCB0aGUga2V5IHZhbGlkYXRpb24gbWV0aG9kIGJ1dCBJIGhhdmUgdGhlDQo+ID4g aW1wcmVzc2lvbiB0aGF0IHRoaXMgaXMgbm90IGJlIHRoZSBtb3N0IGRpcnR5IGhhY2sgZGVwbG95 ZWQgZXZlciBpbg0KPiBQSFA7DQo+ID4gYW5kIEkgZG9uJ3Qga25vdyB2ZXJ5IHdlbGwgd2hhdCBp cyB0aGUgZGVncmVlIG9mIGNvbXByb21pc2UgYWNjZXB0YWJsZQ0KPiA+IGZvciAxJSBzcGVlZHVw IDotKQ0KPiBPdGhlcndpc2UgdGhlIGNvbmNlcm5zIGFib3V0IHRoZSBxdWFsaXR5IG9mIHRoZSBo YXNoIGZ1bmN0aW9uIGFuZCB0aGUNCj4gaW50ZW50aW9uIHRvIGNoYW5nZSBpdCB3aXRoIFNpcEhh c2ggb3Igc29tZXRoaW5nIGVsc2UsIEkgYW0gYWZyYWlkIGl0DQo+IHdpbGwgbm90IGJyaW5nIG11 Y2ggaW4gdGVybXMgb2YgY29sbGlzaW9ucyByZWR1Y3Rpb25zOyB0aGUgaXNzdWUgaGVyZSBpcw0K PiB0aGUgZmFjdCB0aGF0IGhhc2ggYnVja2V0IHNlbGVjdGlvbiB1c2VzIG9ubHkgdGhlIGxhc3Qg ZmV3IGJpdHMgb2YgdGhlDQo+IGhhc2ggdmFsdWUuIE5vdCBzdXJlIGhvdyBtdWNoIGNvdWxkIGhl bHAgaGVyZSBTaXBIYXNoLi4uDQo+IEp1c3QgZm9yIGRlZmVuZGluZyB0aGUgdGVjaG5pY2FsIGZl YXNpYmlsaXR5IG9mIHRoaXMgUE9DIEkgdGhpbmsgdGhhdA0KPiBpbmplY3RpdmUgdHJhbnNmb3Jt YXRpb24gZm9yIGxhc3QgdGFpbGluZyBieXRlcyBjb3VsZCBiZSBkZXBsb3llZCBvdmVyDQo+IHRo ZW9yZXRpY2FsbHkgYW55IGhhc2ggZnVuY3Rpb24uDQo+IA0KPiBUaGFua3MsDQo+IEJvZ2Rhbg0K PiANCj4gPiBPbiB0aGUgb3RoZXIgaGFuZCwgeW91ciBpZGVhIHRvIHplcm8gdGhlIGxhc3QgemVu ZF91bG9uZyBpbiB0aGUNCj4gPiB6ZW5kX3N0cmluZyBsb29rcyBuaWNlLiBUaGVyZSBjb3VsZCBi ZSBhbiBhZGRpdGlvbmFsIHBvdGVudGlhbCBnYWluDQo+IGFsc28NCj4gPiBmcm9tIGxpZ2h0d2Vp Z2h0IGltcGxlbWVudGF0aW9uIG9mIG1lbWNtcCgpLiBJIHdpbGwgZ2l2ZSBpdCBhIHRyeSB0bw0K PiBzZWUNCj4gPiBpZiBpdCBnZXRzIGJldHRlciByZXN1bHRzIHRoYW4gdGhlIGN1cnJlbnQgcHJv cG9zYWwuDQo+ID4gSSBhc3N1bWUgYWxsIHplbmRfc3RyaW5nIGFsbG9jYXRpb24gZnVuY3Rpb25z IGFyZSBsb2NhdGVkIGluDQo+ID4gemVuZF9zdHJpbmcuaCwgY29ycmVjdD8NCj4gPg0KPiA+IFRo YW5rcywNCj4gPiBCb2dkYW4NCkkgd29ya2VkIGEgbGl0dGxlIGJpdCBvZiBhZGFwdGluZyB0aGUg emVuZCBzdHJpbmcgYWxsb2NhdGlvbiBmdW5jdGlvbnMgZm9yIGVuc3VyaW5nIGxvbmcgc2l6ZSBh bGlnbm1lbnQgZm9yIGJvdGggWmVuZCBhbmQgc3RhbmRhcmQgYWxsb2NhdGlvbiwgYW5kIGZvciB6 ZXJvaW5nIG91dCB0aGUgZW5kIG9mIHRoZSBzdHJpbmdzLg0KVGhlIHNhZCBzdXJwcmlzZSB3YXMg dG8gZGlzY292ZXIgdGhhdCB0aGVyZSBhcmUgb3RoZXIgPjEwMCBzaXR1YXRpb25zLCBpbiBleHRl bnNpb25zIG1haW5seSwgd2hlcmUgdGhlIHplbmQgc3RyaW5ncyBhcmUgdHJ1bmNhdGVkIGJ5IGRp cmVjdGx5IGluc2VydGluZyAnMCcgdGVybWluYXRvcnMgaW4gdGhlIG1pZGRsZSBvZiBzdHJpbmdz OyBhbGwgdGhlc2Ugc2l0dWF0aW9ucyBuZWVkcyB0byBiZSByZXZpc2VkIGZvciB6ZXJvaW5nIG91 dCB0aGUgZW50aXJlIG1lbW9yeSB3b3JkIGVuY2xvc2luZyB0aGUgZW5kIG9mIHRoZSBzdHJpbmcu DQpJdCB3aWxsIHByb2JhYmx5IHRha2UgYSB3aGlsZSBmb3IgcmV2aXNpbmcgbW9zdCBvZiB0aGVz ZSBwbGFjZXMgYmVmb3JlIGhhdmluZyBhIGNvcnJlY3QgcmVhbCBsaWZlIHJ1biBmb3IgYmVpbmcg YWJsZSB0byB2YWxpZGF0ZSB0aGUgUE9DLg0KT3B0aW1pc3RpY2FsbHkgc3BlYWtpbmcsIHN1cHBv c2luZyBQT0Mgd2lsbCBzaG93IG1vdGl2YXRpbmcgcmVzdWx0cywgd2Ugd2lsbCBwcm9iYWJseSBu ZWVkIHRvIGVuZm9yY2UgdGhlIFplbmQgaW50ZXJmYWNlIHdpdGggcmVzcGVjdCB0byBzdHJpbmcg dHJ1bmNhdGlvbiAtIGF0IGxlYXN0IGEgZ2V0dGVyL3NldHRlciBwYWlyIGZvciBaU1RSX0xFTiB3 aGVyZSB0aGUgc2V0dGVyIHNob3VsZCBlbnN1cmUgYWxzbyBzeW5jaHJvbml6aW5nIHRoZSBzdHJp bmcgdGVybWluYXRpb24uDQpJIHN1cHBvc2UgaXQgd2lsbCBiZSBhbiBpbXBvcnRhbnQgZWZmb3J0 IGZvciB0aGUgY29tbXVuaXR5IGFuZCBJIGFtIG5vdCBzdXJlIGhvdyBtdWNoIHdpbGxpbmduZXNz IHdpbGwgYmUgaW4gaXQuIE9uIHRoZSBvdGhlciBzaWRlLCB0aGUgb3JpZ2luYWxseSBwcm9wb3Nl ZCBzb2x1dGlvbiBkb2VzIG5vdCBoYXZlIGFsbCB0aGlzIGRyYXdiYWNrcyBhbmQgaXQgb2ZmZXJz IDElIHNwZWVkdXAgYnkgYSBsb2NhbGl6ZWQgY2hhbmdlIHdoaWNoIGNvdWxkIGJlIGVhc2lseSBy ZXZlcnRlZCBpbiB0aGUgY2FzZSB3ZSB3aWxsIGdldCBiZXR0ZXIgcmVzdWx0cyBieSBhIGJldHRl ciBzdHJpbmcgYWxpZ25tZW50IGluIGZ1dHVyZS4NCg0KVGhhbmtzLA0KQm9nZGFuDQoNCg==