From: "Florian Groß" Date: 2005-09-10T01:13:18+09:00 Subject: Re: quick print type debugging --------------000609030404000207080208 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Eric Mahurin wrote: > What would be nice is if you could somehow convert the block > back to text (and put it in the debug message). Anybody know > how to do that? I know I could make the block be a string of > the code instead to solve the problem (d{"..."}), but that > would be uglier and less efficient when we have debugging off > (because we have to eval). See attachment. It's not very general, though. I think I'd go with the string solution, use Binding.of_caller to put it into the right context and alias it to a method that does nothing when $DEBUG isn't set. --------------000609030404000207080208 Content-Type: application/x-ruby; name="binding_of_caller.rb" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="binding_of_caller.rb" Y2xhc3MgQ29udGludWF0aW9uICMgOm5vZG9jOg0KICBkZWYgc2VsZi5jcmVhdGUoKmFyZ3Ms ICZibG9jaykgIyA6bm9kb2M6DQogICAgY2MgPSBuaWw7IHJlc3VsdCA9IGNhbGxjYyB7fGN8 IGNjID0gYzsgYmxvY2suY2FsbChjYykgaWYgYmxvY2sgYW5kIGFyZ3MuZW1wdHk/fQ0KICAg IHJlc3VsdCB8fD0gYXJncw0KICAgIHJldHVybiAqW2NjLCAqcmVzdWx0XQ0KICBlbmQNCmVu ZA0KDQpjbGFzcyBCaW5kaW5nOyBlbmQgIyBmb3IgUkRvYw0KIyBUaGlzIG1ldGhvZCByZXR1 cm5zIHRoZSBiaW5kaW5nIG9mIHRoZSBtZXRob2QgdGhhdCBjYWxsZWQgeW91cg0KIyBtZXRo b2QuIEl0IHdpbGwgcmFpc2UgYW4gRXhjZXB0aW9uIHdoZW4geW91J3JlIG5vdCBpbnNpZGUg YSBtZXRob2QuDQojDQojIEl0J3MgdXNlZCBsaWtlIHRoaXM6DQojICAgZGVmIGluY19jb3Vu dGVyKGFtb3VudCA9IDEpDQojICAgICBCaW5kaW5nLm9mX2NhbGxlciBkbyB8YmluZGluZ3wN CiMgICAgICAgIyBDcmVhdGUgYSBsYW1iZGEgdGhhdCB3aWxsIGluY3JlYXNlIHRoZSB2YXJp YWJsZSAnY291bnRlcicNCiMgICAgICAgIyBpbiB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9k IHdoZW4gY2FsbGVkLg0KIyAgICAgICBpbmMgPSBldmFsKCJsYW1iZGEgeyB8YXJnfCBjb3Vu dGVyICs9IGFyZyB9IiwgYmluZGluZykNCiMgICAgICAgIyBXZSBjYW4gcmVmZXIgdG8gYW1v dW50IGZyb20gaW5zaWRlIHRoaXMgYmxvY2sgc2FmZWx5Lg0KIyAgICAgICBpbmMuY2FsbChh bW91bnQpDQojICAgICBlbmQNCiMgICAgICMgTm8gb3RoZXIgc3RhdGVtZW50cyBjYW4gZ28g aGVyZS4gUHV0IHRoZW0gaW5zaWRlIHRoZSBibG9jay4NCiMgICBlbmQNCiMgICBjb3VudGVy ID0gMA0KIyAgIDIudGltZXMgeyBpbmNfY291bnRlciB9DQojICAgY291bnRlciAjID0+IDIN CiMNCiMgQmluZGluZy5vZl9jYWxsZXIgbXVzdCBiZSB0aGUgbGFzdCBzdGF0ZW1lbnQgaW4g dGhlIG1ldGhvZC4NCiMgVGhpcyBtZWFucyB0aGF0IHlvdSB3aWxsIGhhdmUgdG8gcHV0IGV2 ZXJ5dGhpbmcgeW91IHdhbnQgdG8NCiMgZG8gYWZ0ZXIgdGhlIGNhbGwgdG8gQmluZGluZy5v Zl9jYWxsZXIgaW50byB0aGUgYmxvY2sgb2YgaXQuDQojIFRoaXMgc2hvdWxkIGJlIG5vIHBy b2JsZW0gaG93ZXZlciwgYmVjYXVzZSBSdWJ5IGhhcyBjbG9zdXJlcy4NCiMgSWYgeW91IGRv bid0IGRvIHRoaXMgYW4gRXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLiBCZWNhdXNlIG9mDQoj IHRoZSB3YXkgdGhhdCBCaW5kaW5nLm9mX2NhbGxlciBpcyBpbXBsZW1lbnRlZCBpdCBoYXMg dG8gYmUNCiMgZG9uZSB0aGlzIHdheS4NCmRlZiBCaW5kaW5nLm9mX2NhbGxlcigmYmxvY2sp DQogIG9sZF9jcml0aWNhbCA9IFRocmVhZC5jcml0aWNhbA0KICBUaHJlYWQuY3JpdGljYWwg PSB0cnVlDQogIGNvdW50ID0gMA0KICBjYywgcmVzdWx0LCBlcnJvciwgZXh0cmFfZGF0YSA9 IENvbnRpbnVhdGlvbi5jcmVhdGUobmlsLCBuaWwpDQogIGVycm9yLmNhbGwgaWYgZXJyb3IN Cg0KICB0cmFjZXIgPSBsYW1iZGEgZG8gfCphcmdzfA0KICAgIHR5cGUsIGNvbnRleHQsIGV4 dHJhX2RhdGEgPSBhcmdzWzBdLCBhcmdzWzRdLCBhcmdzDQogICAgaWYgdHlwZSA9PSAicmV0 dXJuIg0KICAgICAgY291bnQgKz0gMQ0KICAgICAgIyBGaXJzdCB0aGlzIG1ldGhvZCBhbmQg dGhlbiBjYWxsaW5nIG9uZSB3aWxsIHJldHVybiAtLQ0KICAgICAgIyB0aGUgdHJhY2UgZXZl bnQgb2YgdGhlIHNlY29uZCBldmVudCBnZXRzIHRoZSBjb250ZXh0DQogICAgICAjIG9mIHRo ZSBtZXRob2Qgd2hpY2ggY2FsbGVkIHRoZSBtZXRob2QgdGhhdCBjYWxsZWQgdGhpcw0KICAg ICAgIyBtZXRob2QuDQogICAgICBpZiBjb3VudCA9PSAyDQogICAgICAgICMgSXQgd291bGQg YmUgbmljZSBpZiB3ZSBjb3VsZCByZXN0b3JlIHRoZSB0cmFjZV9mdW5jDQogICAgICAgICMg dGhhdCB3YXMgc2V0IGJlZm9yZSB3ZSBzd2FwcGVkIGluIG91ciBvd24gb25lLCBidXQNCiAg ICAgICAgIyB0aGlzIGlzIGltcG9zc2libGUgd2l0aG91dCBvdmVybG9hZGluZyBzZXRfdHJh Y2VfZnVuYw0KICAgICAgICAjIGluIGN1cnJlbnQgUnVieS4NCiAgICAgICAgc2V0X3RyYWNl X2Z1bmMobmlsKQ0KICAgICAgICBjYy5jYWxsKGV2YWwoImJpbmRpbmciLCBjb250ZXh0KSwg bmlsLCBleHRyYV9kYXRhKQ0KICAgICAgZW5kDQogICAgZWxzaWYgdHlwZSA9PSAibGluZSIg dGhlbg0KICAgICAgbmlsDQogICAgZWxzaWYgdHlwZSA9PSAiYy1yZXR1cm4iIGFuZCBleHRy YV9kYXRhWzNdID09IDpzZXRfdHJhY2VfZnVuYyB0aGVuDQogICAgICBuaWwNCiAgICBlbHNl DQogICAgICBzZXRfdHJhY2VfZnVuYyhuaWwpDQogICAgICBlcnJvcl9tc2cgPSAiQmluZGlu Zy5vZl9jYWxsZXIgdXNlZCBpbiBub24tbWV0aG9kIGNvbnRleHQgb3IgIiArDQogICAgICAg ICJ0cmFpbGluZyBzdGF0ZW1lbnRzIG9mIG1ldGhvZCB1c2luZyBpdCBhcmVuJ3QgaW4gdGhl IGJsb2NrLiINCiAgICAgIGNjLmNhbGwobmlsLCBsYW1iZGEgeyByYWlzZShBcmd1bWVudEVy cm9yLCBlcnJvcl9tc2cpIH0sIG5pbCkNCiAgICBlbmQNCiAgZW5kDQoNCiAgdW5sZXNzIHJl c3VsdA0KICAgIHNldF90cmFjZV9mdW5jKHRyYWNlcikNCiAgICByZXR1cm4gbmlsDQogIGVs c2UNCiAgICBUaHJlYWQuY3JpdGljYWwgPSBvbGRfY3JpdGljYWwNCiAgICBjYXNlIGJsb2Nr LmFyaXR5DQogICAgICB3aGVuIDEgdGhlbiB5aWVsZChyZXN1bHQpDQogICAgICBlbHNlIHlp ZWxkKHJlc3VsdCwgZXh0cmFfZGF0YSkgICAgICAgIA0KICAgIGVuZA0KICBlbmQNCmVuZA0K --------------000609030404000207080208 Content-Type: application/x-ruby; name="proc_source.rb" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="proc_source.rb" cmVxdWlyZSAnc3RyaW5naW8nDQpyZXF1aXJlICdpcmIvcnVieS1sZXgnDQoNCiMgVGVsbCB0 aGUgcnVieSBpbnRlcnByZXRlciB0byBsb2FkIGNvZGUgbGluZXMgb2YgcmVxdWlyZWQgZmls ZXMNCiMgaW50byB0aGlzIGZpbGVuYW1lIC0+IGxpbmVzIEhhc2guIFRoaXMgYmVoYXZpb3Vy IHNlZW1zIHRvIGJlDQojIHZlcnkgdW5kb2N1bWVudGVkIGFuZCB0aGVyZWZvcmUgc2hvdWxk bid0IHJlYWxseSBiZSByZWxpZWQgb24uDQpTQ1JJUFRfTElORVNfXyA9IHt9IHVubGVzcyBk ZWZpbmVkPyBTQ1JJUFRfTElORVNfXw0KDQptb2R1bGUgUHJvY1NvdXJjZQ0KICBkZWYgZ2V0 X2xpbmVzKGZpbGVuYW1lLCBzdGFydF9saW5lID0gMCkNCiAgICBjYXNlIGZpbGVuYW1lDQog ICAgICAjIHNwZWNpYWwgIihpcmIpIiBkZXNjcmlwdG9yPw0KICAgICAgd2hlbiAiKGlyYiki DQogICAgICAgIElSQi5jb25mWzpNQUlOX0NPTlRFWFRdLmlvLmxpbmUoc3RhcnRfbGluZSAu LiAtMSkNCiAgICAgICMgc3BlY2lhbCAiKGV2YWwuLi4pIiBkZXNjcmlwdG9yPw0KICAgICAg d2hlbiAvXlwoZXZhbC4rXCkkLw0KICAgICAgICBFVkFMX0xJTkVTX19bZmlsZW5hbWVdW3N0 YXJ0X2xpbmUgLi4gLTFdDQogICAgICAjIHJlZ3VsYXIgZmlsZQ0KICAgICAgZWxzZQ0KICAg ICAgICAjIFJ1YnkgYWxyZWFkeSBwYXJzZWQgdGhpcyBmaWxlPyAoc2VlIGRpc2NsYWltZXIg YWJvdmUpDQogICAgICAgIGlmIGxpbmVzID0gU0NSSVBUX0xJTkVTX19bZmlsZW5hbWVdDQog ICAgICAgICAgbGluZXNbKHN0YXJ0X2xpbmUgLSAxKSAuLiAtMV0NCiAgICAgICAgIyBJZiB0 aGUgZmlsZSBleGlzdHMgd2UncmUgZ29pbmcgdG8gdHJ5IHJlYWRpbmcgaXQgaW4NCiAgICAg ICAgZWxzaWYgRmlsZS5leGlzdD8oZmlsZW5hbWUpDQogICAgICAgICAgYmVnaW4NCiAgICAg ICAgICAgIEZpbGUucmVhZGxpbmVzKGZpbGVuYW1lKVsoc3RhcnRfbGluZSAtIDEpIC4uIC0x XQ0KICAgICAgICAgIHJlc2N1ZQ0KICAgICAgICAgICAgbmlsDQogICAgICAgICAgZW5kDQog ICAgICAgIGVuZA0KICAgIGVuZA0KICBlbmQNCg0KICBkZWYgaGFuZGxlKHByb2MpDQogICAg ZmlsZW5hbWUsIGxpbmUgPSBwcm9jLnNvdXJjZV9kZXNjcmlwdG9yDQogICAgbGluZXMgPSBn ZXRfbGluZXMoZmlsZW5hbWUsIGxpbmUpIHx8IFtdDQoNCiAgICBsZXhlciA9IFJ1YnlMZXgu bmV3DQogICAgbGV4ZXIuc2V0X2lucHV0KFN0cmluZ0lPLm5ldyhsaW5lcy5qb2luKSkNCg0K ICAgIHN0YXRlID0gOmJlZm9yZV9jb25zdHJ1Y3Rvcg0KICAgIG5lc3RpbmdfbGV2ZWwgPSAx DQogICAgc3RhcnRfdG9rZW4sIGVuZF90b2tlbiA9IG5pbCwgbmlsDQogICAgZm91bmQgPSBm YWxzZQ0KICAgIHdoaWxlIHRva2VuID0gbGV4ZXIudG9rZW4NCiAgICAgICMgd2UndmUgbm90 IHlldCBmb3VuZCBhbnkgcHJvYy1jb25zdHJ1Y3RvciAtLSB3ZSdsbCB0cnkgdG8gZmluZCBv bmUuDQogICAgICBpZiBbOmJlZm9yZV9jb25zdHJ1Y3RvciwgOmNoZWNrX21vcmVdLmluY2x1 ZGU/KHN0YXRlKQ0KICAgICAgICAjIGNoZWNraW5nIG1vcmUgYW5kIG5ld2xpbmU/IC0+IGRv bmUNCiAgICAgICAgaWYgdG9rZW4uaXNfYT8oUnVieVRva2VuOjpUa05MKSBhbmQgc3RhdGUg PT0gOmNoZWNrX21vcmUNCiAgICAgICAgICBzdGF0ZSA9IDpkb25lDQogICAgICAgICAgYnJl YWsNCiAgICAgICAgZW5kDQogICAgICAgICMgdG9rZW4gaXMgUHJvYz8NCiAgICAgICAgaWYg dG9rZW4uaXNfYT8oUnVieVRva2VuOjpUa0NPTlNUQU5UKSBhbmQNCiAgICAgICAgICAgdG9r ZW4uaW5zdGFuY2VfdmFyaWFibGVfZ2V0KDpAbmFtZSkgPT0gIlByb2MiDQogICAgICAgICAg IyBtZXRob2QgY2FsbD8NCiAgICAgICAgICBpZiBsZXhlci50b2tlbi5pc19hPyhSdWJ5VG9r ZW46OlRrRE9UKQ0KICAgICAgICAgICAgbWV0aG9kID0gbGV4ZXIudG9rZW4NCiAgICAgICAg ICAgICMgY29uc3RydWN0b3I/DQogICAgICAgICAgICBpZiBtZXRob2QuaXNfYT8oUnVieVRv a2VuOjpUa0lERU5USUZJRVIpIGFuZA0KICAgICAgICAgICAgICAgbWV0aG9kLmluc3RhbmNl X3ZhcmlhYmxlX2dldCg6QG5hbWUpID09ICJuZXciDQogICAgICAgICAgICAgIHVubGVzcyBz dGF0ZSA9PSA6Y2hlY2tfbW9yZQ0KICAgICAgICAgICAgICAgICMgb2theSwgY29kZSB3aWxs IGZvbGxvdyBzb29uLg0KICAgICAgICAgICAgICAgIHN0YXRlID0gOmJlZm9yZV9jb2RlDQog ICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAjIG11bHRpcGxlIHByb2NzIG9u IG9uZSBsaW5lDQogICAgICAgICAgICAgICAgcmV0dXJuDQogICAgICAgICAgICAgIGVuZA0K ICAgICAgICAgICAgZW5kDQogICAgICAgICAgZW5kDQogICAgICAgICMgdG9rZW4gaXMgbGFt YmRhIG9yIHByb2MgY2FsbD8NCiAgICAgICAgZWxzaWYgdG9rZW4uaXNfYT8oUnVieVRva2Vu OjpUa0lERU5USUZJRVIpIGFuZA0KICAgICAgICAgICAgICAld3twcm9jIGxhbWJkYX0uaW5j bHVkZT8odG9rZW4uaW5zdGFuY2VfdmFyaWFibGVfZ2V0KDpAbmFtZSkpDQogICAgICAgICAg dW5sZXNzIHN0YXRlID09IDpjaGVja19tb3JlDQogICAgICAgICAgICAjIG9rYXksIGNvZGUg d2lsbCBmb2xsb3cgc29vbi4NCiAgICAgICAgICAgIHN0YXRlID0gOmJlZm9yZV9jb2RlDQog ICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgIyBtdWx0aXBsZSBwcm9jcyBvbiBvbmUgbGlu ZQ0KICAgICAgICAgICAgcmV0dXJuDQogICAgICAgICAgZW5kDQogICAgICAgIGVuZA0KDQog ICAgICAjIHdlJ3JlIHdhaXRpbmcgZm9yIHRoZSBjb2RlIHN0YXJ0IHRvIGFwcGVhci4NCiAg ICAgIGVsc2lmIHN0YXRlID09IDpiZWZvcmVfY29kZQ0KICAgICAgICBpZiB0b2tlbi5pc19h PyhSdWJ5VG9rZW46OlRrZkxCUkFDRSkgb3IgdG9rZW4uaXNfYT8oUnVieVRva2VuOjpUa0RP KQ0KICAgICAgICAgICMgZm91bmQgdGhlIGNvZGUgc3RhcnQsIHVwZGF0ZSBzdGF0ZSBhbmQg cmVtZW1iZXIgY3VycmVudCB0b2tlbg0KICAgICAgICAgIHN0YXRlID0gOmluX2NvZGUNCiAg ICAgICAgICBzdGFydF90b2tlbiA9IHRva2VuDQogICAgICAgIGVuZA0KDQogICAgICAjIG9r YXksIHdlJ3JlIGluc2lkZSBjb2RlDQogICAgICBlbHNpZiBzdGF0ZSA9PSA6aW5fY29kZQ0K ICAgICAgICBpZiB0b2tlbi5pc19hPyhSdWJ5VG9rZW46OlRrUkJSQUNFKSBvciB0b2tlbi5p c19hPyhSdWJ5VG9rZW46OlRrRU5EKQ0KICAgICAgICAgIG5lc3RpbmdfbGV2ZWwgLT0gMQ0K ICAgICAgICAgIGlmIG5lc3RpbmdfbGV2ZWwgPT0gMA0KICAgICAgICAgICAgIyB3ZSdyZSBk b25lIQ0KICAgICAgICAgICAgZW5kX3Rva2VuID0gdG9rZW4NCiAgICAgICAgICAgICMgcGFy c2UgYW5vdGhlciB0aW1lIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBwcm9jcyBv biBvbmUgbGluZQ0KICAgICAgICAgICAgIyB3ZSBjYW4ndCBoYW5kbGUgdGhhdCBjYXNlIGNv cnJlY3RseSBzbyB3ZSByZXR1cm4gbm8gc291cmNlIGNvZGUgYXQgYWxsDQogICAgICAgICAg ICBzdGF0ZSA9IDpjaGVja19tb3JlDQogICAgICAgICAgZW5kDQogICAgICAgIGVsc2lmIHRv a2VuLmlzX2E/KFJ1YnlUb2tlbjo6VGtmTEJSQUNFKSBvciB0b2tlbi5pc19hPyhSdWJ5VG9r ZW46OlRrRE8pIG9yDQogICAgICAgICAgICAgIHRva2VuLmlzX2E/KFJ1YnlUb2tlbjo6VGtC RUdJTikgb3IgdG9rZW4uaXNfYT8oUnVieVRva2VuOjpUa0NBU0UpIG9yDQogICAgICAgICAg ICAgIHRva2VuLmlzX2E/KFJ1YnlUb2tlbjo6VGtDTEFTUykgb3IgdG9rZW4uaXNfYT8oUnVi eVRva2VuOjpUa0RFRikgb3INCiAgICAgICAgICAgICAgdG9rZW4uaXNfYT8oUnVieVRva2Vu OjpUa0ZPUikgb3IgdG9rZW4uaXNfYT8oUnVieVRva2VuOjpUa0lGKSBvcg0KICAgICAgICAg ICAgICB0b2tlbi5pc19hPyhSdWJ5VG9rZW46OlRrTU9EVUxFKSBvciB0b2tlbi5pc19hPyhS dWJ5VG9rZW46OlRrVU5MRVNTKSBvcg0KICAgICAgICAgICAgICB0b2tlbi5pc19hPyhSdWJ5 VG9rZW46OlRrVU5USUwpIG9yIHRva2VuLmlzX2E/KFJ1YnlUb2tlbjo6VGtXSElMRSkgb3IN CiAgICAgICAgICAgICAgdG9rZW4uaXNfYT8oUnVieVRva2VuOjpUa2xCRUdJTikNCiAgICAg ICAgICBuZXN0aW5nX2xldmVsICs9IDENCiAgICAgICAgZW5kDQogICAgICBlbmQNCiAgICBl bmQNCg0KICAgIGlmIHN0YXJ0X3Rva2VuIGFuZCBlbmRfdG9rZW4NCiAgICAgIHN0YXJ0X2xp bmUsIGVuZF9saW5lID0gc3RhcnRfdG9rZW4ubGluZV9ubyAtIDEsIGVuZF90b2tlbi5saW5l X25vIC0gMSANCiAgICAgIHNvdXJjZSA9IGxpbmVzW3N0YXJ0X2xpbmUgLi4gZW5kX2xpbmVd DQogICAgICBzdGFydF9vZmZzZXQgPSBzdGFydF90b2tlbi5jaGFyX25vDQogICAgICBzdGFy dF9vZmZzZXQgKz0gMSBpZiBzdGFydF90b2tlbi5pc19hPyhSdWJ5VG9rZW46OlRrRE8pDQog ICAgICBlbmRfb2Zmc2V0ID0gLShzb3VyY2UubGFzdC5sZW5ndGggLSBlbmRfdG9rZW4uY2hh cl9ubykNCiAgICAgIHNvdXJjZS5maXJzdC5zbGljZSEoMCAuLiBzdGFydF9vZmZzZXQpDQog ICAgICBzb3VyY2UubGFzdC5zbGljZSEoZW5kX29mZnNldCAuLiAtMSkNCg0KICAgICAgIyBD YW4ndCB1c2UgLnN0cmlwIGJlY2F1c2UgbmV3bGluZSBhdCBlbmQgb2YgY29kZSBtaWdodCBi ZSBpbXBvcnRhbnQNCiAgICAgICMgKFN0dWZmIHdvdWxkIGJyZWFrIHdoZW4gc29tZWJvZHkg ZG9lcyBwcm9jIHsgLi4uICNmb29cbn0pDQogICAgICBwcm9jLnNvdXJjZSA9IHNvdXJjZS5q b2luLmdzdWIoL14gfCAkLywgIiIpDQogICAgZW5kDQogIGVuZA0KDQogIG1vZHVsZV9mdW5j dGlvbiA6aGFuZGxlLCA6Z2V0X2xpbmVzDQplbmQNCg0KY2xhc3MgUHJvYw0KICBkZWYgc291 cmNlX2Rlc2NyaXB0b3INCiAgICBpZiBtZCA9IC9eIzxQcm9jOjB4WzAtOUEtRmEtZl0rQCgu Kyk6KFxkKyk+JC8ubWF0Y2gob2xkX2luc3BlY3QpDQogICAgICBmaWxlbmFtZSwgbGluZSA9 IG1kLmNhcHR1cmVzDQogICAgICByZXR1cm4gZmlsZW5hbWUsIGxpbmUudG9faQ0KICAgIGVu ZA0KICBlbmQNCg0KICBhdHRyX2FjY2Vzc29yIDpzb3VyY2UNCiAgZGVmIHNvdXJjZQ0KICAg IFByb2NTb3VyY2UuaGFuZGxlKHNlbGYpIHVubGVzcyBAc291cmNlDQogICAgQHNvdXJjZQ0K ICBlbmQNCg0KICBhbGlhcyA6b2xkX2luc3BlY3QgOmluc3BlY3QNCiAgZGVmIGluc3BlY3QN CiAgICBpZiBzb3VyY2UNCiAgICAgICJwcm9jIHsje3NvdXJjZX19Ig0KICAgIGVsc2UNCiAg ICAgIG9sZF9pbnNwZWN0DQogICAgZW5kDQogIGVuZA0KDQogIGRlZiA9PShvdGhlcikNCiAg ICBpZiBzZWxmLnNvdXJjZSBhbmQgb3RoZXIuc291cmNlDQogICAgICBzZWxmLnNvdXJjZSA9 PSBvdGhlci5zb3VyY2UNCiAgICBlbHNlDQogICAgICBzZWxmLmlkID09IG90aGVyLmlkDQog ICAgZW5kDQogIGVuZA0KDQogIGRlZiBfZHVtcChkZXB0aCA9IDApDQogICAgaWYgc291cmNl DQogICAgICBzb3VyY2UNCiAgICBlbHNlDQogICAgICByYWlzZShUeXBlRXJyb3IsICJDYW4n dCBzZXJpYWxpemUgUHJvYyB3aXRoIHVua25vd24gc291cmNlIGNvZGUuIikNCiAgICBlbmQN CiAgZW5kDQoNCiAgZGVmIHRvX3lhbWwoKmFyZ3MpDQogICAgc2VsZi5zb3VyY2UgIyBmb3Jj ZSBAc291cmNlIHRvIGJlIHNldA0KICAgIHN1cGVyLnN1Yigib2JqZWN0OlByb2MiLCAicHJv YyIpDQogIGVuZA0KDQogIGRlZiBzZWxmLmFsbG9jYXRlOyBmcm9tX3N0cmluZyAiIjsgZW5k DQoNCiAgZGVmIHNlbGYuZnJvbV9zdHJpbmcoc3RyaW5nKQ0KICAgIHJlc3VsdCA9IGV2YWwo InByb2MgeyN7c3RyaW5nfX0iKQ0KICAgIHJlc3VsdC5zb3VyY2UgPSBzdHJpbmcNCiAgICBy ZXR1cm4gcmVzdWx0DQogIGVuZA0KDQogIGRlZiBzZWxmLl9sb2FkKGNvZGUpDQogICAgc2Vs Zi5mcm9tX3N0cmluZyhjb2RlKQ0KICBlbmQNCg0KICBkZWYgc2VsZi5tYXJzaGFsX2xvYWQ7 IGVuZA0KICBkZWYgbWFyc2hhbF9sb2FkOyBlbmQNCmVuZA0KDQpyZXF1aXJlICd5YW1sJw0K WUFNTC5hZGRfcnVieV90eXBlKC9ecHJvYy8pIGRvIHx0eXBlLCB2YWx8DQogIFByb2MuZnJv bV9zdHJpbmcodmFsWyJzb3VyY2UiXSkNCmVuZA0KDQpFVkFMX0xJTkVTX18gPSBIYXNoLm5l dw0KDQphbGlhcyA6b2xkX2V2YWwgOmV2YWwNCmRlZiBldmFsKGNvZGUsICphcmdzKQ0KICBj b250ZXh0LCBkZXNjcmlwdG9yLCBzdGFydF9saW5lLCAqbW9yZSA9ICphcmdzDQogIGRlc2Ny aXB0b3IgfHw9ICIoZXZhbCN7Y29kZS5oYXNofSkiDQogIHN0YXJ0X2xpbmUgfHw9IDANCiAg bGluZXMgfHw9IGNvZGUuZ3JlcCgvLiovKQ0KICBFVkFMX0xJTkVTX19bZGVzY3JpcHRvcl0g fHw9IEFycmF5Lm5ldw0KICBFVkFMX0xJTkVTX19bZGVzY3JpcHRvcl1bc3RhcnRfbGluZSwg bGluZXMubGVuZ3RoXSA9IGxpbmVzDQogIG9sZF9ldmFsKGNvZGUsIGNvbnRleHQsIGRlc2Ny aXB0b3IsIHN0YXJ0X2xpbmUsICptb3JlKQ0KZW5kDQoNCg0KaWYgX19GSUxFX18gPT0gJDAg dGhlbg0KICByZXF1aXJlICJwc3RvcmUiDQoNCiAgY29kZSA9IGxhbWJkYSB7IHB1dHMgIkhl bGxvIFdvcmxkISIgfQ0KDQogIEZpbGUub3BlbigicHJvYy5tYXJzaGFsbGVkIiwgInciKSB7 IHxmaWxlfCBNYXJzaGFsLmR1bXAoY29kZSwgZmlsZSkgfQ0KICBjb2RlID0gRmlsZS5vcGVu KCJwcm9jLm1hcnNoYWxsZWQiKSB7IHxmaWxlfCBNYXJzaGFsLmxvYWQoZmlsZSkgfQ0KDQog IGNvZGUuY2FsbA0KDQogIHN0b3JlID0gUFN0b3JlLm5ldygicHJvYy5wc3RvcmUiKQ0KICBz dG9yZS50cmFuc2FjdGlvbiBkbw0KICAgIHN0b3JlWyJwcm9jIl0gPSBjb2RlDQogIGVuZA0K ICBzdG9yZS50cmFuc2FjdGlvbiBkbw0KICAgIGNvZGUgPSBzdG9yZVsicHJvYyJdDQogIGVu ZA0KDQogIGNvZGUuY2FsbA0KDQogIEZpbGUub3BlbigicHJvYy55YW1sIiwgInciKSB7IHxm aWxlfCBZQU1MLmR1bXAoY29kZSwgZmlsZSkgfQ0KICBjb2RlID0gRmlsZS5vcGVuKCJwcm9j LnlhbWwiKSB7IHxmaWxlfCBZQU1MLmxvYWQoZmlsZSkgfQ0KDQogIGNvZGUuY2FsbA0KZW5k DQo= --------------000609030404000207080208--