From mboxrd@z Thu Jan 1 00:00:00 1970 From: cameron@lexisnexis.com To: gcc-gnats@gcc.gnu.org Cc: umarnmj@lexisnexis.com, usainhk@lexisnexis.com, ueidatx@lexisnexis.com, uhammec@lexisnexis.com Subject: c++/4597: Overload resolution involving using declarations is broken in g++ version 3.01. Date: Wed, 17 Oct 2001 13:56:00 -0000 Message-id: <20011017205137.32016.qmail@sourceware.cygnus.com> X-SW-Source: 2001-10/msg00357.html List-Id: >Number: 4597 >Category: c++ >Synopsis: Overload resolution involving using declarations is broken in g++ version 3.01. >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Wed Oct 17 13:56:00 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Cameron Smith >Release: gcc version 3.0.1 >Organization: >Environment: SunOS dvc712 5.8 Generic_108528-10 sun4u sparc SUNW,Ultra-Enterprise >Description: When a derived class inherits from a base class two member functions of the same name whose argument signatures differ only in the const-ness of their implicit object argument, g++ seems to be unable to distinguish between those member functions. It appears to assume that all references to the name refer to the member declared last. This applies to member functions inherited from a private base class and made public with a "using declaration". It does not apply to methods inherited from a public base class without a "using declaration". >How-To-Repeat: See description in attached file. There is a brief, self-contained program that elicits the error, and an analysis of the resulting behavior. >Fix: Coding inline methods in the derived class that each explicitly forward to the appropriate base class method works around this bug, because overload resolution on names declared in the invoking class's scope is not broken. This is not an acceptable fix for a large existing code base, since it requires knowing where all potential occurrences are, and touching code for each of them. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="writeup" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="writeup" CldlIGhhdmUgZGlzY292ZXJlZCB3aGF0IHdlIGJlbGlldmUgdG8gYmUgYSBzZXJpb3VzIGJ1ZyBp biBnKysgZnJvbSBnY2MtMy4wMS4KQW55IHN1Z2dlc3Rpb25zIG9yIGJ1ZyBmaXhlcyB3b3VsZCBi ZSBtb3N0IHdlbGNvbWUuClRoYW5rIHlvdS4KCi0tIENhbWVyb24gU21pdGgKICAgU3IuIFNvZnR3 YXJlIEVuZ2luZWVyCiAgIExleGlzTmV4aXMsIGEgZGl2aXNpb24gb2YgUmVlZC1FbHNldmllciBw bGMKICAgY2FtZXJvbkBsZXhpc25leGlzLmNvbQoKCj09PT0gU1VNTUFSWQoKT3ZlcmxvYWQgcmVz b2x1dGlvbiBpbnZvbHZpbmcgdXNpbmcgZGVjbGFyYXRpb25zIGlzIGJyb2tlbiBpbiBnKysgdmVy c2lvbiAzLjAxLgoKCj09PT0gQlJJRUYgREVTQ1JJUFRJT04KClNwZWNpZmljYWxseSwgd2hlbiBh IGRlcml2ZWQgY2xhc3MgaW5oZXJpdHMgZnJvbSBpdHMgYmFzZSBjbGFzcwp0d28gbWVtYmVyIGZ1 bmN0aW9ucyBvZiB0aGUgc2FtZSBuYW1lIHdob3NlIGFyZ3VtZW50IHNpZ25hdHVyZXMgZGlmZmVy Cm9ubHkgaW4gdGhlIGNvbnN0LW5lc3Mgb2YgdGhlaXIgaW1wbGljaXQgb2JqZWN0IGFyZ3VtZW50 LCAKZysrIHNlZW1zIHRvIGJlIHVuYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRob3NlIG1l bWJlciBmdW5jdGlvbnMuCkl0IGFwcGVhcnMgdG8gYXNzdW1lIHRoYXQgYWxsIHJlZmVyZW5jZXMg dG8gdGhlIG5hbWUgcmVmZXIKdG8gdGhlIG1lbWJlciBkZWNsYXJlZCBsYXN0LgoKVGhpcyBhcHBs aWVzIHRvIGluaGVyaXRlZCBtZW1iZXIgZnVuY3Rpb25zLCBub3QgbWVtYmVyIGZ1bmN0aW9ucyBk ZWNsYXJlZAppbiB0aGUgY2xhc3MgdGhyb3VnaCB3aGljaCB0aGV5IGFyZSBpbnZva2VkLiAgTW9y ZSBzcGVjaWZpY2FsbHksIGl0IGFwcGxpZXMKb25seSB0byBtZW1iZXIgZnVuY3Rpb25zIGluaGVy aXRlZCBmcm9tIGEgcHJpdmF0ZSBiYXNlIGNsYXNzIGFuZCBtYWRlIHB1YmxpYwp3aXRoIGEgInVz aW5nIGRlY2xhcmF0aW9uIiwgbm90IHRvIG1lbWJlcnMgaW5oZXJpdGVkIGZyb20gYSBwdWJsaWMg YmFzZSBjbGFzcy4KCmcrKyAyLjk1LjIgZG9lcyBub3QgZXhoaWJpdCB0aGlzIHByb2JsZW0uCgoK PT09PSBTVVBQT1JUSU5HIERPQ1VNRU5UQVRJT04KCkRvY3VtZW50YXRpb24gZm9yIHRoaXMgYnVn LCBpbmNsdWRpbmcgYSBzbWFsbCB0ZXN0IGNhc2UgdGhhdCBlbGljaXRzIGl0CmFuZCBhIGRldGFp bGVkIGFuYWx5c2lzLCBmb2xsb3dzIGJlbG93LiAgU2lnbmlmaWNhbnQgZWZmb3J0IHdhcwppbnZl c3RlZCBpbiBlbGltaW5hdGluZyBpcnJlbGV2YW50IGZhY3RvcnMgZnJvbSB0aGUgKGV4dHJlbWVs eSBsYXJnZSkKY29kZSBiYXNlIGluIHdoaWNoIHdlIG9yaWdpbmFsbHkgZGlzY292ZXJlZCB0aGUg YnVnLiAgT3VyIGV4YW1wbGUgaXMKNjggbGluZXMgbG9uZyBhbmQgZG9lcyBub3QgI2luY2x1ZGUg YW55IGhlYWRlciBvdGhlciB0aGFuIDxpb3N0cmVhbXMuaD4uCgoKPT09PSBDT05GT1JNQU5DRSBU TyBTVEFOREFSRAoKVGhpcyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgQU5TSS9J U08gc3RhbmRhcmQuICBTcGVjaWZpY2FsbHksCnNlY3Rpb24gNy4zLjMgc3BlY2lmaWVzIHRoZSBt ZWFuaW5nIG9mIGEgInVzaW5nIGRlY2xhcmF0aW9uIiwgYW5kCnNlY3Rpb24gMTMgZGVzY3JpYmVz IG92ZXJsb2FkIHJlc29sdXRpb24uICBBIGNsYXNzLXNjb3BlIHVzaW5nIGRlY2xhcmF0aW9uCnRo YXQgaW1wb3J0cyBhIG5hbWUgZnJvbSBhIGJhc2UgY2xhc3MgaW50byBhIGRlcml2ZWQgY2xhc3Mg bWFrZXMgYWxsIHJlZmVyZW50cwpvZiB0aGF0IG5hbWUgY2FuZGlkYXRlcyBmb3Igb3ZlcmxvYWQg cmVzb2x1dGlvbiwgYW5kIG92ZXJsb2FkIHJlc29sdXRpb24gaXMKcmVxdWlyZWQgdG8gc2VsZWN0 IGFwcHJvcHJpYXRlbHkgYmV0d2VlbiBhIGNvbnN0IGFuZCBub24tY29uc3QgY2FuZGlkYXRlLgoK SSBjYW4gY2l0ZSBjaGFwdGVyIGFuZCB2ZXJzZSBpZiB0aGF0IGlzIGhlbHBmdWwgYnV0IEkgdGhp bmsgaXQgaXMgY2xlYXIKdGhhdCB0aGUgZ2NjLTMuMDEgYmVoYXZpb3IgKHdoaWNoIGdjYy0yLjk1 LjIgZG9lcyBub3Qgc2hhcmUpIGlzIHdyb25nLgoKCj09PT0gSU1QQUNUCgpXZSBiZWxpZXZlIHRo ZSBpbXBhY3Qgb2YgdGhpcyBidWcgaXMgc2V2ZXJlLiAgSXQgaXMgY2VydGFpbmx5IHNvIGZvciB1 cy4KV2UgaGF2ZSBhIGNvZGUgYmFzZSBvZiBvdmVyIDMsNTAwLDAwMCBsaW5lcyBvZiBDKysgY29k ZSBpbiBzZXZlcmFsIHRob3VzYW5kCnNvdXJjZSBmaWxlcyBvcmdhbml6ZWQgaW50byBhIHNldmVy YWwgZG96ZW4gY29uZmlndXJhdGlvbiBjb21wb25lbnRzLgpXZSBhcmUgYXR0ZW1wdGluZyB0byBw b3J0IHRoaXMgY29kZSBiYXNlIHRvIGcrKyB1c2luZyBnY2MtMy4wMS4KVGhpcyBidWcgaXMgYWZm ZWN0aW5nIGEgdmVyeSBsYXJnZSwgaGVhdmlseSB1c2VkIGxpYnJhcnkgdGhhdCBzaXRzIG5lYXIK dGhlIGJvdHRvbSBvZiB0aGUgZGVwZW5kZW5jeSB0cmVlLiAgQXMgYSByZXN1bHQsIHdlIGFyZSBz ZWVpbmcKc3B1cmlvdXMgY29tcGlsZSBmYWlsdXJlcyB0aHJvdWdob3V0IHRoZSBzeXN0ZW0gYmVj YXVzZSBvZgpvdmVybG9hZCByZXNvbHV0aW9uIGVycm9ycyB0aGF0IGJpbmQgbmFtZXMgdG8gaW5j b3JyZWN0IG1ldGhvZHMuCgpFdmVuIHdvcnNlLCB3ZSBiZWxpZXZlIHRoYXQgdGhlIHBvdGVudGlh bCBleGlzdHMgZm9yIGluY29ycmVjdCBiaW5kaW5ncwp0aGF0IGFyZSBub3QgZGV0ZWN0YWJsZSBh dCBjb21waWxlIHRpbWUsIHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzCnN1YnRsZSBydW4tdGltZSBl cnJvcnMgd2hlbiBhIG5hbWUgYmluZGluZyBlcnJvciBjYXVzZXMgYW4gaW5jb3JyZWN0CnZlcnNp b24gb2YgYSBtZW1iZXIgZnVuY3Rpb24gdG8gYmUgaW52b2tlZC4KCkJlY2F1c2UgdGhlIGJlaGF2 aW9yIGFmZmVjdGVkIGJ5IHRoaXMgYnVnIChvdmVybG9hZCByZXNvbHV0aW9uIG9mIGEgbWVtYmVy CmZ1bmN0aW9uIG5hbWUgYmFzZWQgc29sZWx5IG9uIHRoZSBjb25zdC1uZXNzIG9mIHRoZSBvYmpl Y3Qgb24gd2hpY2ggdGhlIG1ldGhvZAppcyBpbnZva2VkKSBpcyBhIHZlcnkgY29tbW9uIG9uZSAo Im9wZXJhdG9yW10iIG9uIHN0cmluZ3MgYW5kIGNvbGxlY3Rpb24KY2xhc3NlcyB0eXBpY2FsbHkg ZGVwZW5kcyBvbiB0aGlzIGJlaGF2aW9yKSB3ZSBiZWxpZXZlIHRoZSBwb3RlbnRpYWwKZm9yIGlt cGFjdCB0byBvdGhlciB1c2VycyBpcyBhcyBncmVhdCBhcyBmb3IgdXMuCgoKPT09PSBQUkVWSU9V UyBSRVBPUlRTCgpUaGlzIGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBwcm9ibGVtIHJlcG9ydHMg MTc3MSwgMzI0MiwgYW5kIDQ0NTksCmJ1dCBJIGJlbGlldmUgdGhlIGFuYWx5c2lzIGluIHRoaXMg cmVwb3J0IGlzIG1vcmUgY29tcGxldGUgYW5kIGNvcnJlY3QKdGhhbiB0aGUgYW5hbHlzaXMgaW4g dGhlIHByZXZpb3VzIHJlcG9ydHMuICBJbiBwYXJ0aWN1bGFyLCAzMjQyIGFuZCA0NDU5CmFzc2Vy dCB0aGF0IHJlc29sdXRpb24gaXMgYWx3YXlzIGluIGZhdm9yIG9mIHRoZSBjb25zdCBtZXRob2Q7 IG91ciB0ZXN0cwppbmRpY2F0ZSByYXRoZXIgdGhhdCByZXNvbHV0aW9uIGlzIGFsd2F5cyBpbiBm YXZvciBvZiB0aGUgbGFzdC1kZWNsYXJlZCBtZXRob2QuCgoKPT09PSBFTlZJUk9OTUVOVAoKRm9y IHJlZmVyZW5jZSwgaGVyZSBpcyB0aGUgIi12IiBpbmZvcm1hdGlvbiBmcm9tIG91ciBnY2MtMi45 NS4yIHZlcnNpb24gb2YgZysrOgorIGcrKyAtdiAKZ2NjIHZlcnNpb24gMi45NS4yIDE5OTkxMDI0 IChyZWxlYXNlKQoKSGVyZSBpcyB0aGUgIi12IiBpbmZvcm1hdGlvbiBmcm9tIG91ciBnY2MtMy4w MSB2ZXJzaW9uIG9mIGcrKzoKKyBnKysgLXYgCkNvbmZpZ3VyZWQgd2l0aDogLi4vZ2NjLTMuMC4x L2NvbmZpZ3VyZSAtLXByZWZpeD0vcHJvamVjdC9hbnNpL2Rldi9vcHQvZ2NjLTMuMC4xLVN1bk9T NS44IC0td2l0aC1nbnUtYXMgLS13aXRoLWFzPS9wcm9qZWN0L2Fuc2kvZGV2L29wdC9iaW51dGls cy0yLjExLjItU3VuT1M1LjgvYmluL2FzIC0td2l0aC1nbnUtbGQgLS13aXRoLWxkPS9wcm9qZWN0 L2Fuc2kvZGV2L29wdC9iaW51dGlscy0yLjExLjItU3VuT1M1LjgvYmluL2xkIC0tZW5hYmxlLXRo cmVhZHMKVGhyZWFkIG1vZGVsOiBwb3NpeApnY2MgdmVyc2lvbiAzLjAuMQoKSGVyZSBpcyBpbmZv cm1hdGlvbiBhYm91dCB0aGUgYm94IG9uIHdoaWNoIHdlIGJ1aWx0IGFuZCB0ZXN0ZWQgZ2NjLTMu MDE6CisgdW5hbWUgLWEKU3VuT1MgZHZjNzEyIDUuOCBHZW5lcmljXzEwODUyOC0xMCBzdW40dSBz cGFyYyBTVU5XLFVsdHJhLUVudGVycHJpc2UKCgo9PT09IFNVUFBPUlRJTkcgRE9DVU1FTlRBVElP TiAoY29udGludWVkKQoKQ29uc2lkZXIgdGhlIGZpbGUgYWEuY2M6Cj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CiNpbmNsdWRlIDxpb3N0cmVhbS5oPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vIGxpbmUgIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gbGluZSAgMgpjbGFzcyBCYXNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLyBsaW5lICAzCiAgICBwdWJsaWM6ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgIDQKICAgICAgICBCYXNlKHZvaWQpIDog X3goMCkgeyB9ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGluZSAgNQogICAgICAgIGNvbnN0 IGludCYgc3Vic2NyaXB0KHVuc2lnbmVkIGludCkgY29uc3Q7ICAgICAvLyBsaW5lICA2CiAgICAg ICAgaW50JiBzdWJzY3JpcHQodW5zaWduZWQgaW50KTsgICAgICAgICAgICAgICAgIC8vIGxpbmUg IDcKICAgIHByaXZhdGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8gbGluZSAgOAogICAgICAgIGludCBfeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBsaW5lICA5Cn07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIGxpbmUgMTAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGluZSAxMQppbnQmIEJhc2U6OnN1YnNjcmlwdCh1 bnNpZ25lZCBpbnQgbikgICAgICAgICAgICAgICAgICAvLyBsaW5lIDEyCnsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgMTMKICAgIGNv dXQgPDwgIk5PTi1DT05TVFsiIDw8IG4gPDwgIl0iOyAgICAgICAgICAgICAgICAgLy8gbGluZSAx NAogICAgcmV0dXJuIF94OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv LyBsaW5lIDE1Cn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vIGxpbmUgMTYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8gbGluZSAxNwpjb25zdCBpbnQmIEJhc2U6OnN1YnNjcmlwdCh1bnNp Z25lZCBpbnQgbikgY29uc3QgICAgICAvLyBsaW5lIDE4CnsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgMTkKICAgIGNvdXQgPDwgIkNP TlNUWyIgPDwgbiA8PCAiXSI7ICAgICAgICAgICAgICAgICAgICAgLy8gbGluZSAyMAogICAgcmV0 dXJuIF94OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5lIDIx Cn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v IGxpbmUgMjIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gbGluZSAyMwpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBC YXNlJiBmKSAgICAgICAvLyBsaW5lIDI0CnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgMjUKICAgIG9zIDw8ICI8QmFzZTogIiA8PCBm LnN1YnNjcmlwdCgwKSA8PCAiIDo+IjsgICAgICAgLy8gbGluZSAyNgogICAgcmV0dXJuIG9zOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5lIDI3Cn0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgMjgK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g bGluZSAyOQpjbGFzcyBEZXJpdmVkXzE6IHB1YmxpYyBCYXNlIHsgICAgICAgICAgICAgICAgICAg ICAgICAvLyBsaW5lIDMwCiAgICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIGxpbmUgMzEKICAgICAgICBEZXJpdmVkXzEodm9pZCkgOiBCYXNlKCkg eyB9ICAgICAgICAgICAgICAgICAgLy8gbGluZSAzMgp9OyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5lIDMzCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgMzQKb3N0cmVhbSYg b3BlcmF0b3I8PChvc3RyZWFtJiBvcywgY29uc3QgRGVyaXZlZF8xJiBmKSAgLy8gbGluZSAzNQp7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBs aW5lIDM2CiAgICBvcyA8PCAiPERlcml2ZWRfMTogIiA8PCBmLnN1YnNjcmlwdCgwKSA8PCAiIDo+ IjsgIC8vIGxpbmUgMzcKICAgIHJldHVybiBvczsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gbGluZSAzOAp9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvLyBsaW5lIDM5CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgNDAKY2xhc3MgRGVyaXZlZF8yOiBw cml2YXRlIEJhc2UgeyAgICAgICAgICAgICAgICAgICAgICAgLy8gbGluZSA0MQogICAgcHVibGlj OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5lIDQyCiAg ICAgICAgRGVyaXZlZF8yKHZvaWQpIDogQmFzZSgpIHsgfSAgICAgICAgICAgICAgICAgIC8vIGxp bmUgNDMKICAgICAgICBCYXNlOjpzdWJzY3JpcHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gbGluZSA0NAp9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLyBsaW5lIDQ1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgNDYKb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFt JiBvcywgY29uc3QgRGVyaXZlZF8yJiBmKSAgLy8gbGluZSA0Nwp7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5lIDQ4CiAgICBvcyA8PCAi PERlcml2ZWRfMjogIiA8PCBmLnN1YnNjcmlwdCgwKSA8PCAiIDo+IjsgIC8vIGxpbmUgNDkKICAg IHJldHVybiBvczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGlu ZSA1MAp9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBsaW5lIDUxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIGxpbmUgNTIKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSAgICAg ICAgICAgICAgICAgICAgICAgLy8gbGluZSA1Mwp7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5lIDU0CiAgICBCYXNlIGI7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgNTUKICAgIGIuc3Vic2Ny aXB0KDIpID0gMzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGluZSA1NgogICAg Y291dCA8PCAiYiA9ICIgPDwgYiA8PCBlbmRsOyAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5l IDU3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vIGxpbmUgNTgKICAgIERlcml2ZWRfMSBkMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gbGluZSA1OQogICAgZDEuc3Vic2NyaXB0KDMpID0gNTY7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLyBsaW5lIDYwCiAgICBjb3V0IDw8ICJkMSA9ICIgPDwgZDEgPDwg ZW5kbDsgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgNjEKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGluZSA2MgogICAgRGVyaXZlZF8y IGQyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5lIDYzCiAgICBk Mi5zdWJzY3JpcHQoNCkgPSA3ODsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUg NjQKICAgIGNvdXQgPDwgImQyID0gIiA8PCBkMiA8PCBlbmRsOyAgICAgICAgICAgICAgICAgICAg Ly8gbGluZSA2NQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBsaW5lIDY2CiAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIGxpbmUgNjcKfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGluZSA2OAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoK QSBtZXRob2QgInN1YnNjcmlwdCIgaXMgZGVmaW5lZCBpbiBjbGFzcyBCYXNlLCBpbiB0d28gZm9y bXM6IG9uZSB0aGF0CmlzICJjb25zdCIgYW5kIGhlbmNlIGlzIHBlcm1pdHRlZCB0byBiZSBpbnZv a2VkIG9uIGNvbnN0IG9iamVjdHMsIGFuZApvbmUgdGhhdCBpcyBub3QgImNvbnN0IiBhbmQgaGVu Y2UgbWF5IGJlIGludm9rZWQgb25seSBvbiBub24tY29uc3Qgb2JqZWN0cy4KVGhlIGNvbnN0IGZv cm0gb2YgInN1YnNjcmlwdCIgcmV0dXJucyBhIGNvbnN0IHJlZmVyZW5jZSwgd2hpbGUgdGhlIG5v bi1jb25zdApmb3JtIHJldHVybnMgYSBub24tY29uc3QgcmVmZXJlbmNlLgoKICAgQXMgdGhlIG5h bWUgc3VnZ2VzdHMsIHRoZSAic3Vic2NyaXB0IiBtZXRob2QgY291bGQgd2VsbCBoYXZlIGJlZW4g bmFtZWQKICAgIm9wZXJhdG9yW10iIGluc3RlYWQsIGJlY2F1c2UgaXRzIGJlaGF2aW9yIGlzIGFw cHJvcHJpYXRlIGZvciBhIHN1YnNjcmlwdAogICBvcGVyYXRvciB0aGF0IHByb3ZpZGVzIHJlYWQt b25seSBhY2Nlc3MgdG8gZWxlbWVudHMgb2YgYSBjb25zdCBjb2xsZWN0aW9uCiAgIG9iamVjdCwg YW5kIHJlYWQtd3JpdGUgYWNjZXNzIHRvIGVsZW1lbnRzIG9mIGEgbm9uLWNvbnN0IGNvbGxlY3Rp b24gb2JqZWN0LgogICBJbiBmYWN0LCB0aGUgYnVnIGJlaW5nIHJlcG9ydGVkIGhlcmUgd2FzIG9y aWdpbmFsbHkgZGV0ZWN0ZWQgaW4gZXhhY3RseQogICB0aGF0IGNvbnRleHQsIGJ1dCBJIHRob3Vn aHQgdGhhdCB0aGUgdXNlIG9mICJvcGVyYXRvcltdIiB3b3VsZCBvbmx5IG11ZGR5CiAgIHRoZSB3 YXRlcnMgaW4gdGhpcyBwcmVzZW50YXRpb24uCgpDbGFzcyBEZXJpdmVkXzEgaW5oZXJpdHMgcHVi bGljbHkgZnJvbSBCYXNlLCBhbmQgc28gaW5oZXJpdHMgYm90aCBmb3JtcwpvZiAic3Vic2NyaXB0 Ii4gIENsYXNzIERlcml2ZWRfMiBpbmhlcml0cyBwcml2YXRlbHkgZnJvbSBCYXNlLCBidXQKdXNl cyBhIHNvLWNhbGxlZCAiYWNjZXNzIGRlY2xhcmF0aW9uIiAoZXF1aXZhbGVudCB0byBhICJ1c2lu ZyBkZWNsYXJhdGlvbiIpCnRvIG1ha2UgdGhlIG5hbWUgInN1YnNjcmlwdCIgaW5oZXJpdGVkIGZy b20gQmFzZSBwdWJsaWNseSBhY2Nlc3NpYmxlCmluIERlcml2ZWRfMi4KCmZpbGUgYmIuY2MgaXMg anVzdCBsaWtlIGFhLmNjLCBidXQgd2l0aCBsaW5lcyA2ICYgNyByZXZlcnNlZDoKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKyBkaWZmIGFhLmNjIGJiLmNjCjYsN2M2LDcKPCAgICAgICAgIGNvbnN0IGlu dCYgc3Vic2NyaXB0KHVuc2lnbmVkIGludCkgY29uc3Q7ICAgICAvLyBsaW5lICA2CjwgICAgICAg ICBpbnQmIHN1YnNjcmlwdCh1bnNpZ25lZCBpbnQpOyAgICAgICAgICAgICAgICAgLy8gbGluZSAg NwotLS0KPiAgICAgICAgIGludCYgc3Vic2NyaXB0KHVuc2lnbmVkIGludCk7ICAgICAgICAgICAg ICAgICAvLyBsaW5lICA2Cj4gICAgICAgICBjb25zdCBpbnQmIHN1YnNjcmlwdCh1bnNpZ25lZCBp bnQpIGNvbnN0OyAgICAgLy8gbGluZSAgNwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKSWYgd2UgdXNl IGdjYy0yLjk1LjIgdG8gYnVpbGQgYWEgZnJvbSBhYS5jYywgYW5kIHJ1biB0aGUgcmVzdWx0aW5n IHByb2dyYW0sCndlIGdldCB0aGUgZXhwZWN0ZWQgb3V0cHV0OgorIGcrKyAtYyBhYS5jYyAKKyBn KysgLW8gYWEgYWEubyAKKyBhYSAKTk9OLUNPTlNUWzJdYiA9IDxCYXNlOiBDT05TVFswXTM0IDo+ Ck5PTi1DT05TVFszXWQxID0gPERlcml2ZWRfMTogQ09OU1RbMF01NiA6PgpOT04tQ09OU1RbNF1k MiA9IDxEZXJpdmVkXzI6IENPTlNUWzBdNzggOj4KCk5vdGUgdGhhdCB0aGUgTk9OLUNPTlNUICJz dWJzY3JpcHQiIG1ldGhvZCBpcyBpbnZva2VkIG9uIG9iamVjdHMgdGhhdAphcmUgbm90IGNvbnN0 LCBidXQgd2hlbiB0aGUgc2FtZSBvYmplY3RzIGFyZSBwYXNzZWQgYnkgY29uc3QgcmVmZXJlbmNl CnRvIG9wZXJhdG9yPDwsIHRoZSBDT05TVCAic3Vic2NyaXB0IiBtZXRob2QgaXMgaW52b2tlZCBp bnN0ZWFkLgpUaGlzIGlzIGNvcnJlY3QuCgpCdXQgaWYgd2UgdHJ5IHRvIGNvbXBpbGUgYWEuY2Mg d2l0aCBnY2MtMy4wLjEsIHdlIGdldCBhIGZhdGFsIGVycm9yOgorIGcrKyAtYyBhYS5jYyAKYWEu Y2M6IEluIGZ1bmN0aW9uIGBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiwg Y29uc3QgRGVyaXZlZF8yJiknOgphYS5jYzo0OTogcGFzc2luZyBgY29uc3QgRGVyaXZlZF8yJyBh cyBgdGhpcycgYXJndW1lbnQgb2YgYGludCYgCiAgIEJhc2U6OnN1YnNjcmlwdCh1bnNpZ25lZCBp bnQpJyBkaXNjYXJkcyBxdWFsaWZpZXJzCgpnKysgaXMgY29tcGxhaW5pbmcgYmVjYXVzZSBpdCBo YXMgKGVycm9uZW91c2x5KSBzZWxlY3RlZCB0aGUgbm9uLWNvbnN0CiJzdWJzY3JpcHQiIG1ldGhv ZCB0byBiZSBhcHBsaWVkIHRvIGEgY29uc3QgcmVmZXJlbmNlLiAgVGhlIG9iamVjdGlvbiBpdApt YWtlcyBpcyB0cnVlIGJ1dCBpcnJlbGV2YW50LCBiZWNhdXNlIHRoZSByZWZlcmVuY2UgdG8gInN1 YnNjcmlwdCIKaW4gbGluZSA0OSBzaG91bGQgaGF2ZSBiZWVuIHJlc29sdmVkIGFzIHJlZmVycmlu ZyB0byB0aGUgY29uc3QgdmVyc2lvbiBvZgp0aGUgInN1YnNjcmlwdCIgbWV0aG9kLCBhbmQgcGFz c2luZyAnY29uc3QgRGVyaXZlZF8yJyBhcyB0aGUgJ3RoaXMnIGFyZ3VtZW50Cm9mICdpbnQmIEJh c2U6OnN1YnNjcmlwdCh1bnNpZ25lZCBpbnQpIGNvbnN0JyBkb2VzIE5PVCBkaXNjYXJkIGFueSBx dWFsaWZpZXJzLgoKVGhlIGZhY3QgdGhhdCBEZXJpdmVkXzIgZWxpY2l0cyB0aGUgZXJyb3IgYnV0 IERlcml2ZWRfMSBkb2VzIG5vdCBzaG93cyB0aGF0Cm5hbWVzIGZyb20gYSBwcml2YXRlbHkgaW5o ZXJpdGVkIGNsYXNzIG1hZGUgcHVibGljIGluIGEgZGVyaXZlZCBjbGFzcyB2aWEgYW4KYWNjZXNz IGRlY2xhcmF0aW9uIGFyZSBhZmZlY3RlZCwgd2hpbGUgbmFtZXMgaW5oZXJpdGVkIHB1YmxpY2x5 IGFyZSBub3QuCihJZiB0aGV5IHdlcmUsIHRoZSBzYW1lIGVycm9yIHdvdWxkIGhhdmUgYXBwZWFy ZWQgYXQgbGluZSAzNy4pClRoZSBmYWN0IHRoYXQgQmFzZSBkb2VzIG5vdCBlbGljaXQgdGhlIGVy cm9yIHNob3dzIHRoYXQgbWV0aG9kcyBkZWNsYXJlZAppbiB0aGUgY2xhc3MgYXJlIG5vdCBhZmZl Y3RlZC4gIChJZiB0aGV5IHdlcmUsIHRoZSBzYW1lIGVycm9yIHdvdWxkIGhhdmUKYXBwZWFyZWQg YXQgbGluZSAyNi4pCgpBdHRlbXB0aW5nIHRvIGNvbXBpbGUgYmIuY2Mgd2l0aCBnY2MtMy4wLjEg ZWxpY2l0cyBhIGRpZmZlcmVudCBmYXRhbCBlcnJvcjoKKyAvcHJvamVjdC9hbnNpL2Rldi9vcHQv Z2NjLTMuMC4xLVN1bk9TNS44L2Jpbi9nKysgLWMgYmIuY2MgCmJiLmNjOiBJbiBmdW5jdGlvbiBg aW50IG1haW4oaW50LCBjaGFyKiopJzoKYmIuY2M6NjQ6IGFzc2lnbm1lbnQgb2YgcmVhZC1vbmx5 IGxvY2F0aW9uCgpJbiB0aGlzIGNhc2UsIGcrKyBkb2VzIG5vdCBjb21wbGFpbiBhdCBsaW5lIDQ5 LCBiZWNhdXNlIGF0IGxpbmUgNDkgaXQgaGFzCm5vdyByZXNvbHZlZCB0aGUgbmFtZSAic3Vic2Ny aXB0IiBhcyByZWZlcnJpbmcgdG8gdGhlIGNvbnN0ICJzdWJzY3JpcHQiIG1ldGhvZC4KVGhpcyBp cyBjb3JyZWN0LiAgQnV0IGl0IGlzIG5vdyBhbHNvIHJlc29sdmluZyB0aGUgcmVmZXJlbmNlIHRv ICJzdWJzY3JpcHQiCmF0IGxpbmUgNjQgYXMgcmVmZXJyaW5nIHRvIHRoZSBjb25zdCB2ZXJzaW9u IG9mIHRoZSBtZXRob2QsIHdoaWNoIGlzIGluY29ycmVjdC4KVGhlIGNvbXBpbGVyIHRoZW4gY29t cGxhaW5zIG9mIGFuIGF0dGVtcHQgdG8gYXNzaWduIHRvIGEgY29uc3QgcmVmZXJlbmNlLgoKUmVj YWxsIHRoYXQgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIGFhLmNjIGFuZCBiYi5jYyBpcyB0 aGF0IHRoZQpkZWZpbml0aW9ucyBvZiAic3Vic2NyaXB0IiB3ZXJlIHJlLW9yZGVyZWQgc28gdGhh dCB0aGUgY29uc3QgdmVyc2lvbgphcHBlYXJlZCBsYXN0IGluc3RlYWQgb2YgZmlyc3QuCgpBZ2Fp biwgY2xhc3MgRGVyaXZlZF8yIGVsaWNpdHMgdGhlIHByb2JsZW0gYnV0IGNsYXNzIERlcml2ZWRf MSBkb2VzIG5vdCwKbm9yIGRvZXMgY2xhc3MgQmFzZS4KClRoZSBnY2MtMi45NS4yIHZlcnNpb24g b2YgZysrIGNvbXBpbGVzIGJiLmNjIHdpdGhvdXQgZXJyb3IsIGFuZCB0aGUgcmVzdWx0aW5nCnBy b2R1Y2VzIHRoZSBzYW1lIG91dHB1dCBhcyB0aGF0IG9mIGFhLmNjIChhcyBpdCBzaG91bGQpLgoK Q2hhbmdpbmcgbGluZSA0NCBvZiBib3RoIGFhLmNjIGFuZCBiYi5jYyB0byByZWFkCgogICAgICAg IHVzaW5nIEJhc2U6OnN1YnNjcmlwdDsgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5lIDQ0 CgpkaWQgbm90IGNoYW5nZSBhbnkgb2YgdGhlIG91dGNvbWVzIGRlc2NyaWJlZCBhYm92ZS4KCk91 ciBjb25jbHVzaW9uIGZyb20gYWxsIHRoaXMgaXMgdGhhdCBpbiBnY2MtMy4wMSwgb3ZlcmxvYWQg cmVzb2x1dGlvbgppcyBicm9rZW4gYXQgbGVhc3Qgd2l0aCByZXNwZWN0IHRvIG5hbWVzIGFmZmVj dGVkIGJ5IGNsYXNzLXNjb3BlCnVzaW5nIGRlY2xhcmF0aW9ucyB0aGF0IHdpZGVuIGFjY2VzcyB0 byBuYW1lcyBpbmhlcml0ZWQgcHJpdmF0ZWx5LgpJbnN0ZWFkIG9mIHJlbWVtYmVyaW5nIGJvdGgg dmVyc2lvbnMgb2YgdHdvIGNvbXBldGluZyBtZXRob2RzLApnKysgcmVzb2x2ZXMgYWxsIHJlZmVy ZW5jZXMgdG8gdGhlIGlkZW50aWZpZXIgYXMgcmVmZXJyaW5nIHRvCndoaWNoZXZlciBtZXRob2Qg d2FzIGRlY2xhcmVkIGxhc3QuCgo=