From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by sourceware.org (Postfix) with ESMTPS id CE17838485BC for ; Mon, 9 May 2022 11:23:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org CE17838485BC Received: by mail-wm1-x329.google.com with SMTP id a14-20020a7bc1ce000000b00393fb52a386so10590158wmj.1 for ; Mon, 09 May 2022 04:23:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=O/ygGnVAH9TDgzvzecrOE6/WnyQnEgdCngOkdsHwn48=; b=hSFVhy6UyTdED4A8znrpljaYHmAE58A32m9Qb5zsKhfM4AGW/fX/8Un/Hos3KNMfAy KYQnvH2l0HhYGObZSqeWwxX0Lou5GoNCEfTg80+o3Rw2F16L8Orbk6fMxSCFQVf6TdDr 2cxCr/xUdSxLCVYd0BaJCu5RRD8jQiM7iYRqWDL1HiiIQZHnm564ZRVvhdZrIfBw9kE0 OWNgGlHP4+Fb9w4yVrwE4GhnVEYquiIEbVvf8e6gKpyKgdKpOXyPhjEthm5oGtzERucY hQtG5Qk4h5jOI6s7Xm9UcYfHChB7ImBIWulMHmdUWOSwO1skzbFhJoDNUVhZpdLEOCCj ztlg== X-Gm-Message-State: AOAM5326b56rxrYj4bGN038dDBhNdAiz7YKouBkzru5rGSf0KZGLd9H0 m1Ap/1FjCtIJk5z7CKv8N19i+IRSgq7iTSMA1Fc= X-Google-Smtp-Source: ABdhPJzX5rqlBU0nYeiSpKyvFcSeXThsmJRjAlox9KkhSLZVQ3uLbu6t31Dz8ABhTgtkwDdgXQ28uM02Sol3oRlHiLI= X-Received: by 2002:a05:600c:4f52:b0:394:63eb:ad27 with SMTP id m18-20020a05600c4f5200b0039463ebad27mr15899608wmq.35.1652095438532; Mon, 09 May 2022 04:23:58 -0700 (PDT) MIME-Version: 1.0 References: <5568db74d0acb198a3e8121ee75e3cfa02ea0c6f.camel@mad-scientist.net> <453082091.802975.1651922375216@mail.yahoo.com> <222e7c9b9ac74aa886c1501792e677a0dfa1f268.camel@mad-scientist.net> <27202f68e59e9a17aaa96d39659ce73005325cd7.camel@mad-scientist.net> <7c6d308fdbbcabf83dd5423c33ca851666beaae7.camel@mad-scientist.net> In-Reply-To: From: Jonathan Wakely Date: Mon, 9 May 2022 12:23:47 +0100 Message-ID: Subject: Re: Help using the GDB C++ STL pretty-printers / xmethods To: Paul Smith Cc: gcc-help Content-Type: multipart/mixed; boundary="000000000000bfe16105de92710e" X-Spam-Status: No, score=-7.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-help@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-help mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 May 2022 11:24:03 -0000 --000000000000bfe16105de92710e Content-Type: text/plain; charset="UTF-8" On Mon, 9 May 2022 at 10:32, Jonathan Wakely wrote: > > On Sun, 8 May 2022 at 20:44, Paul Smith wrote: > > > > On Sun, 2022-05-08 at 09:16 +0100, Jonathan Wakely wrote: > > > > gdb.set_convenience_variable('mgr', val['mgr']) This doesn't do what I thought it does, meaning that $mgr ends up defined to void. I think you can't set a gdb.Value as the value of a convenience variable. > > > > init = gdb.parse_and_eval('$mgr->initialized') > > > > > > > > This will use the xmethod to evaluate the expression. > > > > > > And then: > > > > > > if init: > > > return gdb.parse_and_eval('*$mgr') > > > > Unfortunately, this doesn't work :(. I can't do it from the GDB > > command line or python (I have tried both with the same results). > > Something about convenience variables doesn't play well with xmethods > > (or maybe this xmethod implementation specifically?) > > You're right, sorry. It doesn't work for me with a convenience variable. And even if I don't set the convenience variable to a gdb.Value, it still doesn't work with the xmethod: (gdb) set $mgr = x.mgr (gdb) whatis $mgr type = std::unique_ptr (gdb) p $mgr $2 = std::unique_ptr = {get() = 0x416eb0} (gdb) p $mgr->initialized Attempt to take address of value not located in memory. > > But since what you want is something that works in arbitrary Python > code, not just within GDB, doesn't pybind11 already do everything you > want? > https://github.com/pybind/pybind11 If you don't want to (or can't) use pybind11 to create Python bindings, and you don't want to use the GDB Python API, then you will have a ton of work to do. The GDB Python API is what provides all the tools for traversing C++ class hierarchies, examining template arguments, casting values to related types etc. The attached diff refactors the std::unique_ptr pretty printer to be defined in terms of a new types.UniquePtr class that exposes the std::unique_ptr API to the printer (and the start of a types.Tuple class for std::tuple, but I didn't make the TuplePrinter use that yet, and didn't change the xmethods yet). This was mostly just a bit of copy & paste, and renaming some functions. The hardest part for me was figuring out how Python module imports work, not refactoring the actual code. But it all still relies on the GDB API. Doing it in pure Python would be much more work. This patch can't be committed though, because it breaks the libstdc++ testsuite. The gdb-test.exp procs expect to be able to source a single Python script, which breaks if that script tries to import modules in the same package (because there's no package when GDB loads the Python file directly via "source blah/blah/printers.py"). That would need to be fixed to go ahead with changes like this. --000000000000bfe16105de92710e Content-Type: text/plain; charset="US-ASCII"; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l2ymvn0a0 Y29tbWl0IGFlZGQxNTkxY2Q4YmU2ZWMyYmNmMWQyM2Q2NDk1ZmJiN2JiYjJmOWEKQXV0aG9yOiBK b25hdGhhbiBXYWtlbHkgPGp3YWtlbHlAcmVkaGF0LmNvbT4KRGF0ZTogICBNb24gTWF5IDkgMTI6 MDc6MjYgMjAyMgoKICAgIGxpYnN0ZGMrKzogQ3JlYXRlIFB5dGhvbiB3cmFwcGVycyBmb3Igc3Rk Ojp0dXBsZSBhbmQgc3RkOjp1bmlxdWVfcHRyCiAgICAKICAgIGxpYnN0ZGMrKy12My9DaGFuZ2VM b2c6CiAgICAKICAgICAgICAgICAgKiBweXRob24vTWFrZWZpbGUuYW06IEluc3RhbGwgbmV3IHNj cmlwdHMuCiAgICAgICAgICAgICogcHl0aG9uL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgogICAg ICAgICAgICAqIHB5dGhvbi9saWJzdGRjeHgvdjYvcHJpbnRlcnMucHk6CiAgICAgICAgICAgICog cHl0aG9uL2xpYnN0ZGN4eC92Ni90eXBlcy5weTogTmV3IGZpbGUuCiAgICAgICAgICAgICogcHl0 aG9uL2xpYnN0ZGN4eC92Ni91dGlsLnB5OiBOZXcgZmlsZS4KCmRpZmYgLS1naXQgYS9saWJzdGRj KystdjMvcHl0aG9uL01ha2VmaWxlLmFtIGIvbGlic3RkYysrLXYzL3B5dGhvbi9NYWtlZmlsZS5h bQppbmRleCBmNTIzZDNhNDRkYy4uNzBiMzRmNzRiNDkgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12 My9weXRob24vTWFrZWZpbGUuYW0KKysrIGIvbGlic3RkYysrLXYzL3B5dGhvbi9NYWtlZmlsZS5h bQpAQCAtMzksNiArMzksOCBAQCBhbGwtbG9jYWw6IGdkYi5weQogCiBub2Jhc2VfcHl0aG9uX0RB VEEgPSBcCiAgICAgbGlic3RkY3h4L3Y2L3ByaW50ZXJzLnB5IFwKKyAgICBsaWJzdGRjeHgvdjYv dHlwZXMucHkgXAorICAgIGxpYnN0ZGN4eC92Ni91dGlsLnB5IFwKICAgICBsaWJzdGRjeHgvdjYv eG1ldGhvZHMucHkgXAogICAgIGxpYnN0ZGN4eC92Ni9fX2luaXRfXy5weSBcCiAgICAgbGlic3Rk Y3h4L19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvcHl0aG9uL2xpYnN0ZGN4 eC92Ni9wcmludGVycy5weSBiL2xpYnN0ZGMrKy12My9weXRob24vbGlic3RkY3h4L3Y2L3ByaW50 ZXJzLnB5CmluZGV4IDBiZDc5M2MwODk3Li5mNzFmMTIyNDViZSAxMDA2NDQKLS0tIGEvbGlic3Rk YysrLXYzL3B5dGhvbi9saWJzdGRjeHgvdjYvcHJpbnRlcnMucHkKKysrIGIvbGlic3RkYysrLXYz L3B5dGhvbi9saWJzdGRjeHgvdjYvcHJpbnRlcnMucHkKQEAgLTE5LDYgKzE5LDEwIEBAIGltcG9y dCBnZGIKIGltcG9ydCBpdGVydG9vbHMKIGltcG9ydCByZQogaW1wb3J0IHN5cywgb3MsIGVycm5v Citmcm9tIGxpYnN0ZGN4eC52NiBpbXBvcnQgdHlwZXMKK2Zyb20gbGlic3RkY3h4LnY2LnV0aWwg aW1wb3J0IF92ZXJzaW9uZWRfbmFtZXNwYWNlCitmcm9tIGxpYnN0ZGN4eC52Ni51dGlsIGltcG9y dCBpc19zcGVjaWFsaXphdGlvbl9vZgorZnJvbSBsaWJzdGRjeHgudjYudXRpbCBpbXBvcnQgZ2V0 X3RlbXBsYXRlX2FyZ19saXN0CiAKICMjIyBQeXRob24gMiArIFB5dGhvbiAzIGNvbXBhdGliaWxp dHkgY29kZQogCkBAIC0xMDAsOCArMTA0LDYgQEAgZGVmIGZpbmRfdHlwZShvcmlnLCBuYW1lKToK ICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBmaW5k IHR5cGUgJXM6OiVzIiAlIChzdHIob3JpZyksIG5hbWUpKQogCi1fdmVyc2lvbmVkX25hbWVzcGFj ZSA9ICdfXzg6OicKLQogZGVmIGxvb2t1cF90ZW1wbF9zcGVjKHRlbXBsLCAqYXJncyk6CiAgICAg IiIiCiAgICAgTG9va3VwIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIHRlbXBsPGFyZ3MuLi4+CkBA IC0xNjUsMTUgKzE2Nyw2IEBAIGRlZiBpc19tZW1iZXJfb2ZfbmFtZXNwYWNlKHR5cCwgKm5hbWVz cGFjZXMpOgogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICByZXR1cm4gRmFsc2UKIAotZGVm IGlzX3NwZWNpYWxpemF0aW9uX29mKHgsIHRlbXBsYXRlX25hbWUpOgotICAgICJUZXN0IGlmIGEg dHlwZSBpcyBhIGdpdmVuIHRlbXBsYXRlIGluc3RhbnRpYXRpb24uIgotICAgIGdsb2JhbCBfdmVy c2lvbmVkX25hbWVzcGFjZQotICAgIGlmIHR5cGUoeCkgaXMgZ2RiLlR5cGU6Ci0gICAgICAgIHgg PSB4LnRhZwotICAgIGlmIF92ZXJzaW9uZWRfbmFtZXNwYWNlOgotICAgICAgICByZXR1cm4gcmUu bWF0Y2goJ15zdGQ6Oiglcyk/JXM8Lio+JCcgJSAoX3ZlcnNpb25lZF9uYW1lc3BhY2UsIHRlbXBs YXRlX25hbWUpLCB4KSBpcyBub3QgTm9uZQotICAgIHJldHVybiByZS5tYXRjaCgnXnN0ZDo6JXM8 Lio+JCcgJSB0ZW1wbGF0ZV9uYW1lLCB4KSBpcyBub3QgTm9uZQotCiBkZWYgc3RyaXBfdmVyc2lv bmVkX25hbWVzcGFjZSh0eXBlbmFtZSk6CiAgICAgZ2xvYmFsIF92ZXJzaW9uZWRfbmFtZXNwYWNl CiAgICAgaWYgX3ZlcnNpb25lZF9uYW1lc3BhY2U6CkBAIC0xOTEsMTcgKzE4NCw2IEBAIGRlZiBz dHJpcF9pbmxpbmVfbmFtZXNwYWNlcyh0eXBlX3N0cik6CiAgICAgdHlwZV9zdHIgPSB0eXBlX3N0 ci5yZXBsYWNlKGZzX25zKyd2MTo6JywgZnNfbnMpCiAgICAgcmV0dXJuIHR5cGVfc3RyCiAKLWRl ZiBnZXRfdGVtcGxhdGVfYXJnX2xpc3QodHlwZV9vYmopOgotICAgICJSZXR1cm4gYSB0eXBlJ3Mg dGVtcGxhdGUgYXJndW1lbnRzIGFzIGEgbGlzdCIKLSAgICBuID0gMAotICAgIHRlbXBsYXRlX2Fy Z3MgPSBbXQotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRlbXBs YXRlX2FyZ3MuYXBwZW5kKHR5cGVfb2JqLnRlbXBsYXRlX2FyZ3VtZW50KG4pKQotICAgICAgICBl eGNlcHQ6Ci0gICAgICAgICAgICByZXR1cm4gdGVtcGxhdGVfYXJncwotICAgICAgICBuICs9IDEK LQogY2xhc3MgU21hcnRQdHJJdGVyYXRvcihJdGVyYXRvcik6CiAgICAgIkFuIGl0ZXJhdG9yIGZv ciBzbWFydCBwb2ludGVyIHR5cGVzIHdpdGggYSBzaW5nbGUgJ2NoaWxkJyB2YWx1ZSIKIApAQCAt MjUyLDU1ICsyMzQsNiBAQCBjbGFzcyBTaGFyZWRQb2ludGVyUHJpbnRlcjoKICAgICAgICAgICAg ICAgICBzdGF0ZSA9ICd1c2UgY291bnQgJWQsIHdlYWsgY291bnQgJWQnICUgKHVzZWNvdW50LCB3 ZWFrY291bnQgLSAxKQogICAgICAgICByZXR1cm4gJyVzPCVzPiAoJXMpJyAlIChzZWxmLnR5cGVu YW1lLCBzdHIodGFyZyksIHN0YXRlKQogCi1kZWYgX3R1cGxlX2ltcGxfZ2V0KHZhbCk6Ci0gICAg IlJldHVybiB0aGUgdHVwbGUgZWxlbWVudCBzdG9yZWQgaW4gYSBfVHVwbGVfaW1wbDxOLCBUPiBi YXNlIGNsYXNzLiIKLSAgICBiYXNlcyA9IHZhbC50eXBlLmZpZWxkcygpCi0gICAgaWYgbm90IGJh c2VzWy0xXS5pc19iYXNlX2NsYXNzOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbnN1cHBv cnRlZCBpbXBsZW1lbnRhdGlvbiBmb3Igc3RkOjp0dXBsZTogJXMiICUgc3RyKHZhbC50eXBlKSkK LSAgICAjIEdldCB0aGUgX0hlYWRfYmFzZTxOLCBUPiBiYXNlIGNsYXNzOgotICAgIGhlYWRfYmFz ZSA9IHZhbC5jYXN0KGJhc2VzWy0xXS50eXBlKQotICAgIGZpZWxkcyA9IGhlYWRfYmFzZS50eXBl LmZpZWxkcygpCi0gICAgaWYgbGVuKGZpZWxkcykgPT0gMDoKLSAgICAgICAgcmFpc2UgVmFsdWVF cnJvcigiVW5zdXBwb3J0ZWQgaW1wbGVtZW50YXRpb24gZm9yIHN0ZDo6dHVwbGU6ICVzIiAlIHN0 cih2YWwudHlwZSkpCi0gICAgaWYgZmllbGRzWzBdLm5hbWUgPT0gJ19NX2hlYWRfaW1wbCc6Ci0g ICAgICAgICMgVGhlIHR1cGxlIGVsZW1lbnQgaXMgdGhlIF9IZWFkX2Jhc2U6Ol9NX2hlYWRfaW1w bCBkYXRhIG1lbWJlci4KLSAgICAgICAgcmV0dXJuIGhlYWRfYmFzZVsnX01faGVhZF9pbXBsJ10K LSAgICBlbGlmIGZpZWxkc1swXS5pc19iYXNlX2NsYXNzOgotICAgICAgICAjIFRoZSB0dXBsZSBl bGVtZW50IGlzIGFuIGVtcHR5IGJhc2UgY2xhc3Mgb2YgX0hlYWRfYmFzZS4KLSAgICAgICAgIyBD YXN0IHRvIHRoYXQgZW1wdHkgYmFzZSBjbGFzcy4KLSAgICAgICAgcmV0dXJuIGhlYWRfYmFzZS5j YXN0KGZpZWxkc1swXS50eXBlKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io IlVuc3VwcG9ydGVkIGltcGxlbWVudGF0aW9uIGZvciBzdGQ6OnR1cGxlOiAlcyIgJSBzdHIodmFs LnR5cGUpKQotCi1kZWYgdHVwbGVfZ2V0KG4sIHZhbCk6Ci0gICAgIlJldHVybiB0aGUgcmVzdWx0 IG9mIHN0ZDo6Z2V0PG4+KHZhbCkgb24gYSBzdGQ6OnR1cGxlIgotICAgIHR1cGxlX3NpemUgPSBs ZW4oZ2V0X3RlbXBsYXRlX2FyZ19saXN0KHZhbC50eXBlKSkKLSAgICBpZiBuID4gdHVwbGVfc2l6 ZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4IGZvciBzdGQ6 OmdldDxOPiBvbiBzdGQ6OnR1cGxlIikKLSAgICAjIEdldCB0aGUgZmlyc3QgX1R1cGxlX2ltcGw8 MCwgVC4uLj4gYmFzZSBjbGFzczoKLSAgICBub2RlID0gdmFsLmNhc3QodmFsLnR5cGUuZmllbGRz KClbMF0udHlwZSkKLSAgICB3aGlsZSBuID4gMDoKLSAgICAgICAgIyBEZXNjZW5kIHRocm91Z2gg dGhlIGJhc2UgY2xhc3NlcyB1bnRpbCB0aGUgTnRoIG9uZS4KLSAgICAgICAgbm9kZSA9IG5vZGUu Y2FzdChub2RlLnR5cGUuZmllbGRzKClbMF0udHlwZSkKLSAgICAgICAgbiAtPSAxCi0gICAgcmV0 dXJuIF90dXBsZV9pbXBsX2dldChub2RlKQotCi1kZWYgdW5pcXVlX3B0cl9nZXQodmFsKToKLSAg ICAiUmV0dXJuIHRoZSByZXN1bHQgb2YgdmFsLmdldCgpIG9uIGEgc3RkOjp1bmlxdWVfcHRyIgot ICAgICMgc3RkOjp1bmlxdWVfcHRyPFQsIEQ+IGNvbnRhaW5zIGEgc3RkOjp0dXBsZTxEOjpwb2lu dGVyLCBEPiwKLSAgICAjIGVpdGhlciBhcyBhIGRpcmVjdCBkYXRhIG1lbWJlciBfTV90ICh0aGUg b2xkIGltcGxlbWVudGF0aW9uKQotICAgICMgb3Igd2l0aGluIGEgZGF0YSBtZW1iZXIgb2YgdHlw ZSBfX3VuaXFfcHRyX2RhdGEuCi0gICAgaW1wbF90eXBlID0gdmFsLnR5cGUuZmllbGRzKClbMF0u dHlwZS5zdHJpcF90eXBlZGVmcygpCi0gICAgIyBDaGVjayBmb3IgbmV3IGltcGxlbWVudGF0aW9u cyBmaXJzdDoKLSAgICBpZiBpc19zcGVjaWFsaXphdGlvbl9vZihpbXBsX3R5cGUsICdfX3VuaXFf cHRyX2RhdGEnKSBcCi0gICAgICAgIG9yIGlzX3NwZWNpYWxpemF0aW9uX29mKGltcGxfdHlwZSwg J19fdW5pcV9wdHJfaW1wbCcpOgotICAgICAgICB0dXBsZV9tZW1iZXIgPSB2YWxbJ19NX3QnXVsn X01fdCddCi0gICAgZWxpZiBpc19zcGVjaWFsaXphdGlvbl9vZihpbXBsX3R5cGUsICd0dXBsZScp OgotICAgICAgICB0dXBsZV9tZW1iZXIgPSB2YWxbJ19NX3QnXQotICAgIGVsc2U6Ci0gICAgICAg IHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIGltcGxlbWVudGF0aW9uIGZvciB1bmlxdWVf cHRyOiAlcyIgJSBzdHIoaW1wbF90eXBlKSkKLSAgICByZXR1cm4gdHVwbGVfZ2V0KDAsIHR1cGxl X21lbWJlcikKLQogY2xhc3MgVW5pcXVlUG9pbnRlclByaW50ZXI6CiAgICAgIlByaW50IGEgdW5p cXVlX3B0ciIKIApAQCAtMzA4LDcgKzI0MSw3IEBAIGNsYXNzIFVuaXF1ZVBvaW50ZXJQcmludGVy OgogICAgICAgICBzZWxmLnZhbCA9IHZhbAogCiAgICAgZGVmIGNoaWxkcmVuIChzZWxmKToKLSAg ICAgICAgcmV0dXJuIFNtYXJ0UHRySXRlcmF0b3IodW5pcXVlX3B0cl9nZXQoc2VsZi52YWwpKQor ICAgICAgICByZXR1cm4gU21hcnRQdHJJdGVyYXRvcih0eXBlcy5VbmlxdWVQdHIoc2VsZi52YWwp LmdldCgpKQogCiAgICAgZGVmIHRvX3N0cmluZyAoc2VsZik6CiAgICAgICAgIHJldHVybiAoJ3N0 ZDo6dW5pcXVlX3B0cjwlcz4nICUgKHN0cihzZWxmLnZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50 KDApKSkpCkBAIC0xNDEzLDcgKzEzNDYsNyBAQCBjbGFzcyBTdGRQYXRoUHJpbnRlcjoKICAgICBk ZWYgX19pbml0X18gKHNlbGYsIHR5cGVuYW1lLCB2YWwpOgogICAgICAgICBzZWxmLnZhbCA9IHZh bAogICAgICAgICBzZWxmLnR5cGVuYW1lID0gdHlwZW5hbWUKLSAgICAgICAgaW1wbCA9IHVuaXF1 ZV9wdHJfZ2V0KHNlbGYudmFsWydfTV9jbXB0cyddWydfTV9pbXBsJ10pCisgICAgICAgIGltcGwg PSB0eXBlcy5VbmlxdWVQdHIoc2VsZi52YWxbJ19NX2NtcHRzJ11bJ19NX2ltcGwnXSkuZ2V0KCkK ICAgICAgICAgc2VsZi50eXBlID0gaW1wbC5jYXN0KGdkYi5sb29rdXBfdHlwZSgndWludHB0cl90 JykpICYgMwogICAgICAgICBpZiBzZWxmLnR5cGUgPT0gMDoKICAgICAgICAgICAgIHNlbGYuaW1w bCA9IGltcGwKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9weXRob24vbGlic3RkY3h4L3Y2L3R5 cGVzLnB5IGIvbGlic3RkYysrLXYzL3B5dGhvbi9saWJzdGRjeHgvdjYvdHlwZXMucHkKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY1ZmVhYzBkNjAwCi0tLSAvZGV2L251 bGwKKysrIGIvbGlic3RkYysrLXYzL3B5dGhvbi9saWJzdGRjeHgvdjYvdHlwZXMucHkKQEAgLTAs MCArMSw4NyBAQAoraW1wb3J0IGdkYgorZnJvbSBsaWJzdGRjeHgudjYudXRpbCBpbXBvcnQgaXNf c3BlY2lhbGl6YXRpb25fb2YKK2Zyb20gbGlic3RkY3h4LnY2LnV0aWwgaW1wb3J0IGdldF90ZW1w bGF0ZV9hcmdfbGlzdAorCitjbGFzcyBUdXBsZToKKyAgICAiUHl0aG9uIHdyYXBwZXIgZm9yIHN0 ZDo6dHVwbGU8VC4uLj4iCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsKToKKyAgICAgICAg c2VsZi52YWwgPSB2YWwKKworICAgIGRlZiB0dXBsZV9zaXplKHNlbGYpOgorICAgICAgICAiUmV0 dXJuIHR1cGxlX3NpemVfdjx0dXBsZTxULi4uPj4iCisgICAgICAgIHJldHVybiBsZW4oZ2V0X3Rl bXBsYXRlX2FyZ19saXN0KHNlbGYudmFsLnR5cGUpKQorCisgICAgZGVmIGVsZW1lbnRfdHlwZShz ZWxmLCBuKToKKyAgICAgICAgIlJldHVybiBhIGdkYi5UeXBlIGZvciB0aGUgdHVwbGVfZWxlbWVu dF90PG4sIHR1cGxlPFQuLi4+PiB0eXBlIgorICAgICAgICByZXR1cm4gc2VsZi5fbnRoX2VsZW1l bnQobikudGVtcGxhdGVfYXJndW1lbnQoMSkKKworICAgIGRlZiBnZXQoc2VsZiwgbik6CisgICAg ICAgICJSZXR1cm4gdGhlIHJlc3VsdCBvZiBzdGQ6OmdldDxuPiBvbiBhIHN0ZDo6dHVwbGUiCisg ICAgICAgIHJldHVybiBzZWxmLl9pbXBsX2dldChzZWxmLl9udGhfZWxlbWVudChuKSkKKworICAg IGRlZiBfbnRoX2VsZW1lbnQoc2VsZiwgbik6CisgICAgICAgICJSZXR1cm4gYSBnZGIuVmFsdWUg Zm9yIHRoZSBfVHVwbGVfaW1wbDxuLCBUPiBiYXNlIGNsYXNzIgorICAgICAgICBpZiBuID49IHNl bGYudHVwbGVfc2l6ZSgpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiT3V0IG9mIHJh bmdlIGluZGV4IGZvciBzdGQ6OmdldDx7fT4gb24gc3RkOjp0dXBsZSIuZm9ybWF0KG4pKQorICAg ICAgICAjIEdldCB0aGUgZmlyc3QgX1R1cGxlX2ltcGw8MCwgVC4uLj4gYmFzZSBjbGFzczoKKyAg ICAgICAgbm9kZSA9IHNlbGYudmFsLmNhc3Qoc2VsZi52YWwudHlwZS5maWVsZHMoKVswXS50eXBl KQorICAgICAgICB3aGlsZSBuID4gMDoKKyAgICAgICAgICAgICMgRGVzY2VuZCB0aHJvdWdoIHRo ZSBiYXNlIGNsYXNzZXMgdW50aWwgdGhlIE50aCBvbmUuCisgICAgICAgICAgICBub2RlID0gbm9k ZS5jYXN0KG5vZGUudHlwZS5maWVsZHMoKVswXS50eXBlKQorICAgICAgICAgICAgbiAtPSAxCisg ICAgICAgIHJldHVybiBub2RlCisKKyAgICBkZWYgX2ltcGxfZ2V0KHNlbGYsIG5vZGUpOgorICAg ICAgICAiUmV0dXJuIHRoZSB0dXBsZSBlbGVtZW50IHN0b3JlZCBpbiBhIF9UdXBsZV9pbXBsPE4s IFQ+IGJhc2UgY2xhc3MuIgorICAgICAgICBiYXNlcyA9IG5vZGUudHlwZS5maWVsZHMoKQorICAg ICAgICBpZiBub3QgYmFzZXNbLTFdLmlzX2Jhc2VfY2xhc3M6CisgICAgICAgICAgICByYWlzZSBW YWx1ZUVycm9yKCJVbnN1cHBvcnRlZCBpbXBsZW1lbnRhdGlvbiBmb3Igc3RkOjp0dXBsZTogJXMi ICUgc3RyKG5vZGUudHlwZSkpCisgICAgICAgICMgR2V0IHRoZSBfSGVhZF9iYXNlPE4sIFQ+IGJh c2UgY2xhc3M6CisgICAgICAgIGhlYWRfYmFzZSA9IG5vZGUuY2FzdChiYXNlc1stMV0udHlwZSkK KyAgICAgICAgZmllbGRzID0gaGVhZF9iYXNlLnR5cGUuZmllbGRzKCkKKyAgICAgICAgaWYgbGVu KGZpZWxkcykgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVk IGltcGxlbWVudGF0aW9uIGZvciBzdGQ6OnR1cGxlOiAlcyIgJSBzdHIobm9kZS50eXBlKSkKKyAg ICAgICAgaWYgZmllbGRzWzBdLm5hbWUgPT0gJ19NX2hlYWRfaW1wbCc6CisgICAgICAgICAgICAj IFRoZSB0dXBsZSBlbGVtZW50IGlzIHRoZSBfSGVhZF9iYXNlOjpfTV9oZWFkX2ltcGwgZGF0YSBt ZW1iZXIuCisgICAgICAgICAgICByZXR1cm4gaGVhZF9iYXNlWydfTV9oZWFkX2ltcGwnXQorICAg ICAgICBlbGlmIGZpZWxkc1swXS5pc19iYXNlX2NsYXNzOgorICAgICAgICAgICAgIyBUaGUgdHVw bGUgZWxlbWVudCBpcyBhbiBlbXB0eSBiYXNlIGNsYXNzIG9mIF9IZWFkX2Jhc2UuCisgICAgICAg ICAgICAjIENhc3QgdG8gdGhhdCBlbXB0eSBiYXNlIGNsYXNzLgorICAgICAgICAgICAgcmV0dXJu IGhlYWRfYmFzZS5jYXN0KGZpZWxkc1swXS50eXBlKQorICAgICAgICBlbHNlOgorICAgICAgICAg ICAgcmFpc2UgVmFsdWVFcnJvcigiVW5zdXBwb3J0ZWQgaW1wbGVtZW50YXRpb24gZm9yIHN0ZDo6 dHVwbGU6ICVzIiAlIHN0cihub2RlLnR5cGUpKQorCitjbGFzcyBVbmlxdWVQdHI6CisgICAgIlB5 dGhvbiB3cmFwcGVyIGZvciBzdGQ6OnVuaXF1ZV9wdHI8VCwgRD4iCisKKyAgICBkZWYgX19pbml0 X18gKHNlbGYsIHZhbCk6CisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICAjZGVmIHBvaW50 ZXJfdHlwZShzZWxmKToKKyAgICAjICAgICJSZXR1cm4gYSBnZGIuVHlwZSBmb3IgcG9pbnRlciB0 eXBlZGVmIgorICAgICMgICAgcmV0dXJuIFRPRE8KKworICAgIGRlZiBlbGVtZW50X3R5cGUoc2Vs Zik6CisgICAgICAgICJSZXR1cm4gYSBnZGIuVHlwZSBmb3IgdGhlIGVsZW1lbnRfdHlwZSB0eXBl ZGVmIgorICAgICAgICByZXR1cm4gc2VsZi52YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCgwKQor CisgICAgZGVmIGRlbGV0ZXJfdHlwZShzZWxmKToKKyAgICAgICAgIlJldHVybiBhIGdkYi5UeXBl IGZvciB0aGUgZGVsZXRlcl90eXBlIHR5cGVkZWYiCisgICAgICAgIHJldHVybiBzZWxmLnZhbC50 eXBlLnRlbXBsYXRlX2FyZ3VtZW50KDEpCisKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICAi UmV0dXJuIGEgZ2RiLlZhbHVlIGZvciB0aGUgZ2V0KCkgbWVtYmVyIGZ1bmN0aW9uIgorICAgICAg ICAjIHN0ZDo6dW5pcXVlX3B0cjxULCBEPiBjb250YWlucyBhIHN0ZDo6dHVwbGU8RDo6cG9pbnRl ciwgRD4sCisgICAgICAgICMgZWl0aGVyIGFzIGEgZGlyZWN0IGRhdGEgbWVtYmVyIF9NX3QgKHRo ZSBvbGQgaW1wbGVtZW50YXRpb24pCisgICAgICAgICMgb3Igd2l0aGluIGEgZGF0YSBtZW1iZXIg b2YgdHlwZSBfX3VuaXFfcHRyX2RhdGEuCisgICAgICAgIGltcGxfdHlwZSA9IHNlbGYudmFsLnR5 cGUuZmllbGRzKClbMF0udHlwZS5zdHJpcF90eXBlZGVmcygpCisgICAgICAgICMgQ2hlY2sgZm9y IG5ldyBpbXBsZW1lbnRhdGlvbnMgZmlyc3Q6CisgICAgICAgIGlmIGlzX3NwZWNpYWxpemF0aW9u X29mKGltcGxfdHlwZSwgJ19fdW5pcV9wdHJfZGF0YScpIFwKKyAgICAgICAgICAgIG9yIGlzX3Nw ZWNpYWxpemF0aW9uX29mKGltcGxfdHlwZSwgJ19fdW5pcV9wdHJfaW1wbCcpOgorICAgICAgICAg ICAgdHVwbGVfbWVtYmVyID0gc2VsZi52YWxbJ19NX3QnXVsnX01fdCddCisgICAgICAgIGVsaWYg aXNfc3BlY2lhbGl6YXRpb25fb2YoaW1wbF90eXBlLCAndHVwbGUnKToKKyAgICAgICAgICAgIHR1 cGxlX21lbWJlciA9IHNlbGYudmFsWydfTV90J10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg IHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIGltcGxlbWVudGF0aW9uIGZvciB1bmlxdWVf cHRyOiAlcyIgJSBzdHIoaW1wbF90eXBlKSkKKyAgICAgICAgcmV0dXJuIFR1cGxlKHR1cGxlX21l bWJlcikuZ2V0KDApCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvcHl0aG9uL2xpYnN0ZGN4eC92 Ni91dGlsLnB5IGIvbGlic3RkYysrLXYzL3B5dGhvbi9saWJzdGRjeHgvdjYvdXRpbC5weQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODJlOWNlNjY1ZTAKLS0tIC9kZXYv bnVsbAorKysgYi9saWJzdGRjKystdjMvcHl0aG9uL2xpYnN0ZGN4eC92Ni91dGlsLnB5CkBAIC0w LDAgKzEsMjQgQEAKK2ltcG9ydCByZQoraW1wb3J0IGdkYgorCitfdmVyc2lvbmVkX25hbWVzcGFj ZSA9ICdfXzg6OicKKworZGVmIGlzX3NwZWNpYWxpemF0aW9uX29mKHgsIHRlbXBsYXRlX25hbWUp OgorICAgICJUZXN0IGlmIGEgdHlwZSBpcyBhIGdpdmVuIHRlbXBsYXRlIGluc3RhbnRpYXRpb24u IgorICAgIGdsb2JhbCBfdmVyc2lvbmVkX25hbWVzcGFjZQorICAgIGlmIHR5cGUoeCkgaXMgZ2Ri LlR5cGU6CisgICAgICAgIHggPSB4LnRhZworICAgIGlmIF92ZXJzaW9uZWRfbmFtZXNwYWNlOgor ICAgICAgICByZXR1cm4gcmUubWF0Y2goJ15zdGQ6Oiglcyk/JXM8Lio+JCcgJSAoX3ZlcnNpb25l ZF9uYW1lc3BhY2UsIHRlbXBsYXRlX25hbWUpLCB4KSBpcyBub3QgTm9uZQorICAgIHJldHVybiBy ZS5tYXRjaCgnXnN0ZDo6JXM8Lio+JCcgJSB0ZW1wbGF0ZV9uYW1lLCB4KSBpcyBub3QgTm9uZQor CitkZWYgZ2V0X3RlbXBsYXRlX2FyZ19saXN0KHR5cGVfb2JqKToKKyAgICAiUmV0dXJuIGEgdHlw ZSdzIHRlbXBsYXRlIGFyZ3VtZW50cyBhcyBhIGxpc3QiCisgICAgbiA9IDAKKyAgICB0ZW1wbGF0 ZV9hcmdzID0gW10KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0 ZW1wbGF0ZV9hcmdzLmFwcGVuZCh0eXBlX29iai50ZW1wbGF0ZV9hcmd1bWVudChuKSkKKyAgICAg ICAgZXhjZXB0OgorICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlX2FyZ3MKKyAgICAgICAgbiAr PSAxCg== --000000000000bfe16105de92710e--