Transaction executed successfully
Transaction Details
Inspect execution, participants, message data, gas usage, events and raw transaction data.
Transaction hash
3F7EE8EF847DC8C33A3AF2FB07431642F04B2F00B2EB8A7E20F060E271063FED
Transaction overview
Execution summary
TX INDEX
0
Position in block
GAS WANTED
31,921,702
Requested gas limit
GAS USED
20,614,411
Gas consumed
FEE
31922ugnot
Transaction fee
Participants
Message
Message #1
m_addpkg
Arguments
g1zdaz6sypk5tdsjc2fzsqrrn4ttn8qzmnl4waqp100000000ugnot
Execution log
msg:0,success:true,log:,events:[]
Events
No events emitted by this transaction.
Raw encoded transaction
CrVvCgwvdm0ubV9hZGRwa2cSpG8KKGcxemRhejZzeXBrNXRkc2pjMmZ6c3Fycm40dHRuOHF6bW5sNHdhcXAS524KCWh5cGVybGFuZRJAZ25vLmxhbmQvcC9nMXpkYXo2c3lwazV0ZHNqYzJmenNxcnJuNHR0bjhxem1ubDR3YXFwL2h5cGVybGFuZS92MBpnCgtnbm9tb2QudG9tbBJYbW9kdWxlID0gImduby5sYW5kL3AvZzF6ZGF6NnN5cGs1dGRzamMyZnpzcXJybjR0dG44cXptbmw0d2FxcC9oeXBlcmxhbmUvdjAiCmdubyA9ICIwLjkiChrZXAoNaHlwZXJsYW5lLmdubxLHXC8vIFBhY2thZ2UgaHlwZXJsYW5lIGlzIEh5cGVybGFuZSdzIHdpcmUgZm9ybWF0LCBieXRlIGZvciBieXRlLCBmb3IgYSBtYWlsYm94IG9uIGduby5sYW5kOiB0aGUgbWVzc2FnZSBhbmQgaXRzIGlkLAovLyB0aGUgaW5jcmVtZW50YWwgbWVya2xlIHRyZWUgdGhlIHZhbGlkYXRvcnMgY2hlY2twb2ludCwgdGhlIGNoZWNrcG9pbnQgZGlnZXN0IHRoZXkgc2lnbiwgYSB3YXJwIHJvdXRlJ3MgdG9rZW4KLy8gbWVzc2FnZSwgYW5kIHRoZSBtdWx0aXNpZyBjaGVjayBhIGRlc3RpbmF0aW9uIHJ1bnMgb3ZlciB0aGUgc2lnbmF0dXJlcy4gSXQga2VlcHMgbm8gc3RhdGUgYW5kIHJlYWRzIG5vIGNoYWluLgovLwovLyBTb3VyY2VzIChoeXBlcmxhbmUtbW9ub3JlcG8gM2NkOTMwOCwgMjAyNi0xMC0xMCk6IHNvbGlkaXR5L2NvbnRyYWN0cy9saWJzL01lc3NhZ2Uuc29sLCBNZXJrbGUuc29sLAovLyBDaGVja3BvaW50TGliLnNvbCwgVHlwZUNhc3RzLnNvbCwgdG9rZW4vbGlicy9Ub2tlbk1lc3NhZ2Uuc29sLCBpc21zL2xpYnMvTWVzc2FnZUlkTXVsdGlzaWdJc21NZXRhZGF0YS5zb2w7IHRoZQovLyB2ZWN0b3JzIGluIHZlY3RvcnMvIGFyZSB0aGlzIHBhY2thZ2UncyB0ZXN0cy4KLy8KLy8gT25lIGRlcGFydHVyZSwgYW5kIG9ubHkgb24gdGhlIGdubyBzaWRlOiBnbm8ubGFuZCBoYXMgbm8gc2VjcDI1NmsxLCBzbyB0aGUgbXVsdGlzaWcgYSBnbm8gbWFpbGJveCBydW5zCi8vIChWZXJpZnlNdWx0aXNpZykgdGFrZXMgZWQyNTUxOSBzaWduYXR1cmVzIG92ZXIgdGhlIHNhbWUgY2hlY2twb2ludCBkaWdlc3QgSHlwZXJsYW5lJ3MgdmFsaWRhdG9ycyBzaWduIHdpdGgKLy8gc2VjcDI1NmsxLCBhbmQgZWFjaCBzaWduYXR1cmUgbmFtZXMgaXRzIHZhbGlkYXRvciBpbiBvbmUgbGVhZGluZyBieXRlICg2NSBieXRlcyBhIHNpZ25hdHVyZSwgYXMgaW4gSHlwZXJsYW5lJ3MKLy8gbWV0YWRhdGEpLiBNZXNzYWdlcywgaWRzLCB0aGUgdHJlZSBhbmQgdGhlIGRpZ2VzdCBhcmUgSHlwZXJsYW5lJ3MgZXhhY3RseSwgc28gdGhlIG90aGVyIGNoYWluJ3MgSVNNIGNoZWNrcyBhIGdubwovLyBjaGVja3BvaW50IHdpdGggaXRzIHN0b2NrIGNvZGUuCnBhY2thZ2UgaHlwZXJsYW5lCgppbXBvcnQgKAoJImNyeXB0by9iZWNoMzIiCgkiY3J5cHRvL2VkMjU1MTkiCgkiY3J5cHRvL2tlY2NhazI1NiIKCSJlbmNvZGluZy9iaW5hcnkiCgkiZXJyb3JzIgopCgpjb25zdCAoCgkvLyBWZXJzaW9uIGlzIHRoZSBtZXNzYWdlIHZlcnNpb24gZXZlcnkgSHlwZXJsYW5lIG1haWxib3ggc3BlYWtzIChWZXJzaW9uZWQuVkVSU0lPTikuCglWZXJzaW9uID0gMwoJLy8gSGVhZGVyTGVuIGlzIHRoZSBtZXNzYWdlIGhlYWRlcjogdmVyc2lvbiAxLCBub25jZSA0LCBvcmlnaW4gNCwgc2VuZGVyIDMyLCBkZXN0aW5hdGlvbiA0LCByZWNpcGllbnQgMzIuCglIZWFkZXJMZW4gPSA3NwoJLy8gVHJlZURlcHRoIGlzIHRoZSBtZXJrbGUgdHJlZSdzIGRlcHRoIChNZXJrbGUuc29sIFRSRUVfREVQVEgpLgoJVHJlZURlcHRoID0gMzIKCS8vIE1heExlYXZlcyBpcyBob3cgbWFueSBsZWF2ZXMgdGhlIHRyZWUgdGFrZXMgKE1lcmtsZS5zb2wgTUFYX0xFQVZFUywgMl4zMiAtIDEpLgoJTWF4TGVhdmVzID0gMTw8VHJlZURlcHRoIC0gMQoKCXNpZ0xlbiAgPSA2NSAvLyBhIHNpZ25hdHVyZSdzIHNsb3QgaW4gbXVsdGlzaWcgbWV0YWRhdGE6IEh5cGVybGFuZSdzIHLigJZz4oCWdiwgaGVyZSB2YWxpZGF0b3IgYnl0ZSDigJYgZWQyNTUxOQoJbWV0YUxlbiA9IDY4IC8vIHRoZSBtZXRhZGF0YSdzIGZpeGVkIGhlYWQ6IG1lcmtsZSB0cmVlIGhvb2sgMzIsIHJvb3QgMzIsIGluZGV4IDQKKQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtZXNzYWdlIC0tCgovLyBNZXNzYWdlIGlzIGEgSHlwZXJsYW5lIG1lc3NhZ2UgKE1lc3NhZ2Uuc29sKS4gU2VuZGVyIGFuZCByZWNpcGllbnQgYXJlIDMyIGJ5dGVzOiBhIDIwLWJ5dGUgYWRkcmVzcyBpcyBwYWRkZWQgb24KLy8gdGhlIGxlZnQgd2l0aCB0d2VsdmUgemVybyBieXRlcyAoQWRkcmVzc1RvQnl0ZXMzMik7IGEgU29sYW5hIHB1YmtleSBpcyBpdHMgMzIgYnl0ZXMgYXMgdGhleSBhcmUuCnR5cGUgTWVzc2FnZSBzdHJ1Y3QgewoJVmVyc2lvbiAgICAgdWludDgKCU5vbmNlICAgICAgIHVpbnQzMgoJT3JpZ2luICAgICAgdWludDMyCglTZW5kZXIgICAgICBbMzJdYnl0ZQoJRGVzdGluYXRpb24gdWludDMyCglSZWNpcGllbnQgICBbMzJdYnl0ZQoJQm9keSAgICAgICAgW11ieXRlCn0KCi8vIEJ5dGVzIGlzIHRoZSBtZXNzYWdlIG9uIHRoZSB3aXJlOiBhYmkuZW5jb2RlUGFja2VkIG9mIHRoZSBmaWVsZHMsIGJpZy1lbmRpYW4sIG5vIGxlbmd0aCBwcmVmaXhlcy4KZnVuYyAobSBNZXNzYWdlKSBCeXRlcygpIFtdYnl0ZSB7CgliIDo9IG1ha2UoW11ieXRlLCAwLCBIZWFkZXJMZW4rbGVuKG0uQm9keSkpCgliID0gYXBwZW5kKGIsIG0uVmVyc2lvbikKCWIgPSBiaW5hcnkuQmlnRW5kaWFuLkFwcGVuZFVpbnQzMihiLCBtLk5vbmNlKQoJYiA9IGJpbmFyeS5CaWdFbmRpYW4uQXBwZW5kVWludDMyKGIsIG0uT3JpZ2luKQoJYiA9IGFwcGVuZChiLCBtLlNlbmRlcls6XS4uLikKCWIgPSBiaW5hcnkuQmlnRW5kaWFuLkFwcGVuZFVpbnQzMihiLCBtLkRlc3RpbmF0aW9uKQoJYiA9IGFwcGVuZChiLCBtLlJlY2lwaWVudFs6XS4uLikKCXJldHVybiBhcHBlbmQoYiwgbS5Cb2R5Li4uKQp9CgovLyBJRCBpcyB0aGUgbWVzc2FnZSdzIGlkOiBrZWNjYWsyNTYgb2YgdGhlIHdob2xlIG1lc3NhZ2UsIGJvZHkgaW5jbHVkZWQuCmZ1bmMgKG0gTWVzc2FnZSkgSUQoKSBbMzJdYnl0ZSB7IHJldHVybiBJRChtLkJ5dGVzKCkpIH0KCi8vIElEIGlzIHRoZSBpZCBvZiBhIG1lc3NhZ2UgYXMgaXQgY2FtZSBvZmYgdGhlIHdpcmUuCmZ1bmMgSUQocmF3IFtdYnl0ZSkgWzMyXWJ5dGUgeyByZXR1cm4ga2VjY2FrMjU2LlN1bTI1NihyYXcpIH0KCi8vIFBhcnNlTWVzc2FnZSByZWFkcyBhIG1lc3NhZ2Ugb2ZmIHRoZSB3aXJlLiBUaGUgYm9keSBpcyBhIGNvcHkuCmZ1bmMgUGFyc2VNZXNzYWdlKGIgW11ieXRlKSAoTWVzc2FnZSwgZXJyb3IpIHsKCWlmIGxlbihiKSA8IEhlYWRlckxlbiB7CgkJcmV0dXJuIE1lc3NhZ2V7fSwgZXJyb3JzLk5ldygiaHlwZXJsYW5lOiBtZXNzYWdlIHNob3J0ZXIgdGhhbiBpdHMgaGVhZGVyIikKCX0KCXZhciBtIE1lc3NhZ2UKCW0uVmVyc2lvbiA9IGJbMF0KCW0uTm9uY2UgPSBiaW5hcnkuQmlnRW5kaWFuLlVpbnQzMihiWzE6NV0pCgltLk9yaWdpbiA9IGJpbmFyeS5CaWdFbmRpYW4uVWludDMyKGJbNTo5XSkKCWNvcHkobS5TZW5kZXJbOl0sIGJbOTo0MV0pCgltLkRlc3RpbmF0aW9uID0gYmluYXJ5LkJpZ0VuZGlhbi5VaW50MzIoYls0MTo0NV0pCgljb3B5KG0uUmVjaXBpZW50WzpdLCBiWzQ1Ojc3XSkKCW0uQm9keSA9IGFwcGVuZChbXWJ5dGUobmlsKSwgYltIZWFkZXJMZW46XS4uLikKCXJldHVybiBtLCBuaWwKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBhZGRyZXNzZXMgLS0KCi8vIEFkZHJlc3NUb0J5dGVzMzIgaXMgYSBnbm8gYWRkcmVzcyBhcyBIeXBlcmxhbmUgY2FycmllcyBvbmU6IHR3ZWx2ZSB6ZXJvIGJ5dGVzLCB0aGVuIHRoZSBhZGRyZXNzJ3MgdHdlbnR5Ci8vIChUeXBlQ2FzdHMuYWRkcmVzc1RvQnl0ZXMzMikuCmZ1bmMgQWRkcmVzc1RvQnl0ZXMzMihhIGFkZHJlc3MpIChbMzJdYnl0ZSwgZXJyb3IpIHsKCXZhciBvdXQgWzMyXWJ5dGUKCWhycCwgYnosIGVyciA6PSBiZWNoMzIuRGVjb2RlVG9CYXNlMjU2KHN0cmluZyhhKSkKCWlmIGVyciAhPSBuaWwgewoJCXJldHVybiBvdXQsIGVycgoJfQoJaWYgaHJwICE9ICJnIiB8fCBsZW4oYnopICE9IDIwIHsKCQlyZXR1cm4gb3V0LCBlcnJvcnMuTmV3KCJoeXBlcmxhbmU6IG5vdCBhIGdubyBhZGRyZXNzOiAiICsgc3RyaW5nKGEpKQoJfQoJY29weShvdXRbMTI6XSwgYnopCglyZXR1cm4gb3V0LCBuaWwKfQoKLy8gQnl0ZXMzMlRvQWRkcmVzcyBpcyB0aGUgZ25vIGFkZHJlc3MgYSBieXRlczMyIG5hbWVzOiB0d2VsdmUgemVybyBieXRlcywgdGhlbiB0aGUgYWRkcmVzcydzIHR3ZW50eSAowqcxMzogdGhlIHRvcAovLyAxMiBieXRlcyBtdXN0IGJlIHplcm8pLiBBIGJ5dGVzMzIgd2hvc2UgdG9wIHR3ZWx2ZSBieXRlcyBhcmUgbm90IHplcm8g4oCUIGEgcmF3IFNvbGFuYSBwdWJrZXksIHNheSDigJQgaXMgbm8gZ25vCi8vIGFkZHJlc3MgYW5kIGVycm9ycywgcmF0aGVyIHRoYW4gbGFuZGluZyBvbiB0aGUgYWRkcmVzcyBpdHMgbGFzdCB0d2VudHkgYnl0ZXMgaGFwcGVuIHRvIHNwZWxsLCB3aGljaCBub2JvZHkKLy8gaG9sZHMgKHRoZSBFVk0ncyBUeXBlQ2FzdHMuYnl0ZXMzMlRvQWRkcmVzcyB0cnVuY2F0ZXM7IGEgZ25vIHJvdXRlIHN3ZWVwcyBzdWNoIGEgcmVjaXBpZW50IGluc3RlYWQsIMKnNS40KS4KZnVuYyBCeXRlczMyVG9BZGRyZXNzKGIgWzMyXWJ5dGUpIChhZGRyZXNzLCBlcnJvcikgewoJZm9yIF8sIGMgOj0gcmFuZ2UgYls6MTJdIHsKCQlpZiBjICE9IDAgewoJCQlyZXR1cm4gIiIsIGVycm9ycy5OZXcoImh5cGVybGFuZTogbm90IGEgZ25vIGFkZHJlc3M6IHRoZSB0b3AgdHdlbHZlIGJ5dGVzIGFyZSBub3QgemVybyIpCgkJfQoJfQoJcywgZXJyIDo9IGJlY2gzMi5FbmNvZGVGcm9tQmFzZTI1NigiZyIsIGJbMTI6XSkKCWlmIGVyciAhPSBuaWwgewoJCXBhbmljKGVycikgLy8gdHdlbnR5IGJ5dGVzIGFsd2F5cyBlbmNvZGUKCX0KCXJldHVybiBhZGRyZXNzKHMpLCBuaWwKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWVya2xlIHRyZWUgLS0KCi8vIFRyZWUgaXMgSHlwZXJsYW5lJ3MgaW5jcmVtZW50YWwgbWVya2xlIHRyZWUgKE1lcmtsZS5zb2wsIHRoZSBldGgyIGRlcG9zaXQgY29udHJhY3Qncyk6IGRlcHRoIDMyLCBub2RlcwovLyBrZWNjYWsyNTYobGVmdCDigJYgcmlnaHQpLCBsZWF2ZXMgdGhlIG1lc3NhZ2UgaWRzIHRoZW1zZWx2ZXMuIFRoZSB6ZXJvIHZhbHVlIGlzIHRoZSBlbXB0eSB0cmVlLgp0eXBlIFRyZWUgc3RydWN0IHsKCUJyYW5jaCBbVHJlZURlcHRoXVszMl1ieXRlCglDb3VudCAgdWludDMyCn0KCi8vIHplcm9lc1tpXSBpcyB0aGUgcm9vdCBvZiBhbiBlbXB0eSBzdWJ0cmVlIG9mIGhlaWdodCBpOiBaMCA9IDAsIFppKzEgPSBrZWNjYWsyNTYoWmkg4oCWIFppKS4KdmFyIHplcm9lcyA9IGZ1bmMoKSBbVHJlZURlcHRoXVszMl1ieXRlIHsKCXZhciB6IFtUcmVlRGVwdGhdWzMyXWJ5dGUKCWZvciBpIDo9IDE7IGkgPCBUcmVlRGVwdGg7IGkrKyB7CgkJeltpXSA9IGhhc2gyKHpbaS0xXSwgeltpLTFdKQoJfQoJcmV0dXJuIHoKfSgpCgpmdW5jIGhhc2gyKGEsIGIgWzMyXWJ5dGUpIFszMl1ieXRlIHsKCWJ1ZiA6PSBtYWtlKFtdYnl0ZSwgNjQpCgljb3B5KGJ1ZiwgYVs6XSkKCWNvcHkoYnVmWzMyOl0sIGJbOl0pCglyZXR1cm4ga2VjY2FrMjU2LlN1bTI1NihidWYpCn0KCi8vIEluc2VydCBhZGRzIGEgbGVhZiBhdCBpbmRleCBDb3VudC4KZnVuYyAodCAqVHJlZSkgSW5zZXJ0KGxlYWYgWzMyXWJ5dGUpIHsKCWlmIHQuQ291bnQgPj0gTWF4TGVhdmVzIHsKCQlwYW5pYygiaHlwZXJsYW5lOiBtZXJrbGUgdHJlZSBmdWxsIikKCX0KCXQuQ291bnQrKwoJc2l6ZSA6PSB0LkNvdW50Cglub2RlIDo9IGxlYWYKCWZvciBpIDo9IDA7IGkgPCBUcmVlRGVwdGg7IGkrKyB7CgkJaWYgc2l6ZSYxID09IDEgewoJCQl0LkJyYW5jaFtpXSA9IG5vZGUKCQkJcmV0dXJuCgkJfQoJCW5vZGUgPSBoYXNoMih0LkJyYW5jaFtpXSwgbm9kZSkKCQlzaXplID4+PSAxCgl9CglwYW5pYygiaHlwZXJsYW5lOiBtZXJrbGUgaW5zZXJ0IGZlbGwgdGhyb3VnaCIpIC8vIHVucmVhY2hhYmxlOiBDb3VudCA8IDJeMzIgaGFzIGEgYml0IHNldCBiZWxvdyAzMgp9CgovLyBSb290IGlzIHRoZSB0cmVlJ3Mgcm9vdCBub3cgKE1lcmtsZS5zb2wgcm9vdCgpLCB3aXRoIHRoZSB6ZXJvIGhhc2hlcykuCmZ1bmMgKHQgKlRyZWUpIFJvb3QoKSBbMzJdYnl0ZSB7Cgl2YXIgY3VyIFszMl1ieXRlCglmb3IgaSA6PSAwOyBpIDwgVHJlZURlcHRoOyBpKysgewoJCWlmICh0LkNvdW50Pj51aW50KGkpKSYxID09IDEgewoJCQljdXIgPSBoYXNoMih0LkJyYW5jaFtpXSwgY3VyKQoJCX0gZWxzZSB7CgkJCWN1ciA9IGhhc2gyKGN1ciwgemVyb2VzW2ldKQoJCX0KCX0KCXJldHVybiBjdXIKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjaGVja3BvaW50IC0tCgovLyBEb21haW5IYXNoIGJpbmRzIGEgY2hlY2twb2ludCB0byBpdHMgb3JpZ2luIGNoYWluIGFuZCB0aGF0IGNoYWluJ3MgbWVya2xlIHRyZWUgaG9vazoga2VjY2FrMjU2KG9yaWdpbiDigJYgaG9vayDigJYKLy8gIkhZUEVSTEFORSIpLCA0NSBieXRlcyBoYXNoZWQgKENoZWNrcG9pbnRMaWIuZG9tYWluSGFzaCkuIE9uIFNvbGFuYSB0aGUgaG9vayBpcyB0aGUgbWFpbGJveCBwcm9ncmFtJ3MgaWQuCmZ1bmMgRG9tYWluSGFzaChvcmlnaW4gdWludDMyLCBob29rIFszMl1ieXRlKSBbMzJdYnl0ZSB7CgliIDo9IG1ha2UoW11ieXRlLCAwLCA0NSkKCWIgPSBiaW5hcnkuQmlnRW5kaWFuLkFwcGVuZFVpbnQzMihiLCBvcmlnaW4pCgliID0gYXBwZW5kKGIsIGhvb2tbOl0uLi4pCgliID0gYXBwZW5kKGIsICJIWVBFUkxBTkUiLi4uKQoJcmV0dXJuIGtlY2NhazI1Ni5TdW0yNTYoYikKfQoKLy8gQ2hlY2twb2ludERpZ2VzdCBpcyB3aGF0IGEgdmFsaWRhdG9yIHNpZ25zIGZvciBvbmUgbWVzc2FnZTogdGhlIEVJUC0xOTEgcGVyc29uYWwtbWVzc2FnZSBoYXNoIG9mCi8vIGtlY2NhazI1Nihkb21haW5IYXNoIOKAliByb290IOKAliBpbmRleCDigJYgbWVzc2FnZUlEKSAoQ2hlY2twb2ludExpYi5kaWdlc3QpLiByb290IGFuZCBpbmRleCBhcmUgdGhlIG9yaWdpbiB0cmVlJ3MKLy8gcmlnaHQgYWZ0ZXIgbWVzc2FnZUlEIHdlbnQgaW4gYXQgaW5kZXg7IGEgbWVzc2FnZS1pZCBJU00gZG9lcyBub3QgY2hlY2sgdGhlbSwgb25seSB0aGUgc2lnbmF0dXJlcyBvdmVyIHRoZW0uCmZ1bmMgQ2hlY2twb2ludERpZ2VzdChvcmlnaW4gdWludDMyLCBob29rLCByb290IFszMl1ieXRlLCBpbmRleCB1aW50MzIsIG1lc3NhZ2VJRCBbMzJdYnl0ZSkgWzMyXWJ5dGUgewoJZCA6PSBEb21haW5IYXNoKG9yaWdpbiwgaG9vaykKCWIgOj0gbWFrZShbXWJ5dGUsIDAsIDEwMCkKCWIgPSBhcHBlbmQoYiwgZFs6XS4uLikKCWIgPSBhcHBlbmQoYiwgcm9vdFs6XS4uLikKCWIgPSBiaW5hcnkuQmlnRW5kaWFuLkFwcGVuZFVpbnQzMihiLCBpbmRleCkKCWIgPSBhcHBlbmQoYiwgbWVzc2FnZUlEWzpdLi4uKQoJcmV0dXJuIEV0aFNpZ25lZE1lc3NhZ2VIYXNoKGtlY2NhazI1Ni5TdW0yNTYoYikpCn0KCi8vIEV0aFNpZ25lZE1lc3NhZ2VIYXNoIGlzIEVJUC0xOTEncyBoYXNoIG9mIGEgMzItYnl0ZSBtZXNzYWdlOiBrZWNjYWsyNTYoIlx4MTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcbjMyIiDigJYgaCkuCmZ1bmMgRXRoU2lnbmVkTWVzc2FnZUhhc2goaCBbMzJdYnl0ZSkgWzMyXWJ5dGUgewoJYiA6PSBhcHBlbmQoW11ieXRlKCJceDE5RXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6XG4zMiIpLCBoWzpdLi4uKQoJcmV0dXJuIGtlY2NhazI1Ni5TdW0yNTYoYikKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdG9rZW4gbWVzc2FnZSAtLQoKLy8gVG9rZW5NZXNzYWdlIGlzIGEgd2FycCByb3V0ZSdzIGJvZHkgKFRva2VuTWVzc2FnZS5zb2wpOiB0aGUgcmVjaXBpZW50IG9uIHRoZSBkZXN0aW5hdGlvbiwgdGhlIGFtb3VudCBhcyBhCi8vIGJpZy1lbmRpYW4gdWludDI1NiwgdGhlbiBtZXRhZGF0YSAodXN1YWxseSBub25lKS4KZnVuYyBUb2tlbk1lc3NhZ2UocmVjaXBpZW50IFszMl1ieXRlLCBhbW91bnQgdWludDY0LCBtZXRhZGF0YSBbXWJ5dGUpIFtdYnl0ZSB7CgliIDo9IG1ha2UoW11ieXRlLCAwLCA2NCtsZW4obWV0YWRhdGEpKQoJYiA9IGFwcGVuZChiLCByZWNpcGllbnRbOl0uLi4pCgliID0gYXBwZW5kKGIsIG1ha2UoW11ieXRlLCAyNCkuLi4pCgliID0gYmluYXJ5LkJpZ0VuZGlhbi5BcHBlbmRVaW50NjQoYiwgYW1vdW50KQoJcmV0dXJuIGFwcGVuZChiLCBtZXRhZGF0YS4uLikKfQoKLy8gUGFyc2VUb2tlbk1lc3NhZ2UgcmVhZHMgYSB3YXJwIHJvdXRlJ3MgYm9keS4gQW4gYW1vdW50IHBhc3QgMl42NCAtIDEgaXMgcmVmdXNlZDsgdHJhaWxpbmcgbWV0YWRhdGEgKFNvbGFuYSdzCi8vIFRyYW5zZmVyUmVtb3RlV2l0aE1lbW8gd3JpdGVzIGEgbWVtbyB0aGVyZSkgaXMgcmV0dXJuZWQsIG5vdCByZWZ1c2VkLgpmdW5jIFBhcnNlVG9rZW5NZXNzYWdlKGIgW11ieXRlKSAocmVjaXBpZW50IFszMl1ieXRlLCBhbW91bnQgdWludDY0LCBtZXRhZGF0YSBbXWJ5dGUsIGVyciBlcnJvcikgewoJaWYgbGVuKGIpIDwgNjQgewoJCXJldHVybiByZWNpcGllbnQsIDAsIG5pbCwgZXJyb3JzLk5ldygiaHlwZXJsYW5lOiB0b2tlbiBtZXNzYWdlIHNob3J0ZXIgdGhhbiA2NCBieXRlcyIpCgl9Cglmb3IgXywgYyA6PSByYW5nZSBiWzMyOjU2XSB7CgkJaWYgYyAhPSAwIHsKCQkJcmV0dXJuIHJlY2lwaWVudCwgMCwgbmlsLCBlcnJvcnMuTmV3KCJoeXBlcmxhbmU6IHRva2VuIGFtb3VudCBwYXN0IDY0IGJpdHMiKQoJCX0KCX0KCWNvcHkocmVjaXBpZW50WzpdLCBiWzozMl0pCglyZXR1cm4gcmVjaXBpZW50LCBiaW5hcnkuQmlnRW5kaWFuLlVpbnQ2NChiWzU2OjY0XSksIGFwcGVuZChbXWJ5dGUobmlsKSwgYls2NDpdLi4uKSwgbmlsCn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtdWx0aXNpZyAtLQoKLy8gQ2hlY2twb2ludCBpcyB0aGUgaGVhZCBvZiBtdWx0aXNpZyBtZXRhZGF0YTogdGhlIG9yaWdpbidzIG1lcmtsZSB0cmVlIGhvb2ssIGFuZCB0aGUgcm9vdCBhbmQgaW5kZXggdGhlCi8vIHZhbGlkYXRvcnMgc2lnbmVkIChNZXNzYWdlSWRNdWx0aXNpZ0lzbU1ldGFkYXRhKS4KdHlwZSBDaGVja3BvaW50IHN0cnVjdCB7CglIb29rICBbMzJdYnl0ZQoJUm9vdCAgWzMyXWJ5dGUKCUluZGV4IHVpbnQzMgp9CgovLyBTaWduYXR1cmUgaXMgb25lIHZhbGlkYXRvcidzIGVkMjU1MTkgc2lnbmF0dXJlIGFuZCBpdHMgcGxhY2UgaW4gdGhlIHZhbGlkYXRvciBzZXQuCnR5cGUgU2lnbmF0dXJlIHN0cnVjdCB7CglWYWxpZGF0b3IgdWludDgKCVNpZyAgICAgICBbNjRdYnl0ZQp9CgovLyBNdWx0aXNpZ01ldGFkYXRhIGxheXMgb3V0IHdoYXQgYSByZWxheWVyIGhhbmRzIGEgZ25vIG1haWxib3g6IGhvb2sgMzIg4oCWIHJvb3QgMzIg4oCWIGluZGV4IDQsIHRoZW4gNjUgYnl0ZXMgYQovLyBzaWduYXR1cmU6IHRoZSB2YWxpZGF0b3IncyBpbmRleCBpbiB0aGUgc2V0LCB0aGVuIGl0cyBlZDI1NTE5IHNpZ25hdHVyZSBvdmVyIENoZWNrcG9pbnREaWdlc3QuIFZhbGlkYXRvcgovLyBpbmRleGVzIHN0cmljdGx5IGluY3JlYXNlLCBzbyBubyB2YWxpZGF0b3IgY291bnRzIHR3aWNlLgpmdW5jIE11bHRpc2lnTWV0YWRhdGEoYyBDaGVja3BvaW50LCBzaWdzIFtdU2lnbmF0dXJlKSBbXWJ5dGUgewoJYiA6PSBtYWtlKFtdYnl0ZSwgMCwgbWV0YUxlbitzaWdMZW4qbGVuKHNpZ3MpKQoJYiA9IGFwcGVuZChiLCBjLkhvb2tbOl0uLi4pCgliID0gYXBwZW5kKGIsIGMuUm9vdFs6XS4uLikKCWIgPSBiaW5hcnkuQmlnRW5kaWFuLkFwcGVuZFVpbnQzMihiLCBjLkluZGV4KQoJZm9yIF8sIHMgOj0gcmFuZ2Ugc2lncyB7CgkJYiA9IGFwcGVuZChiLCBzLlZhbGlkYXRvcikKCQliID0gYXBwZW5kKGIsIHMuU2lnWzpdLi4uKQoJfQoJcmV0dXJuIGIKfQoKLy8gUGFyc2VNdWx0aXNpZ01ldGFkYXRhIHJlYWRzIG1ldGFkYXRhIGxhaWQgb3V0IGJ5IE11bHRpc2lnTWV0YWRhdGEuCmZ1bmMgUGFyc2VNdWx0aXNpZ01ldGFkYXRhKGIgW11ieXRlKSAoQ2hlY2twb2ludCwgW11TaWduYXR1cmUsIGVycm9yKSB7Cgl2YXIgYyBDaGVja3BvaW50CglpZiBsZW4oYikgPCBtZXRhTGVuIHx8IChsZW4oYiktbWV0YUxlbiklc2lnTGVuICE9IDAgewoJCXJldHVybiBjLCBuaWwsIGVycm9ycy5OZXcoImh5cGVybGFuZTogbWV0YWRhdGEgaXMgbm90IDY4IGJ5dGVzIGFuZCB3aG9sZSA2NS1ieXRlIHNpZ25hdHVyZXMiKQoJfQoJY29weShjLkhvb2tbOl0sIGJbMDozMl0pCgljb3B5KGMuUm9vdFs6XSwgYlszMjo2NF0pCgljLkluZGV4ID0gYmluYXJ5LkJpZ0VuZGlhbi5VaW50MzIoYls2NDo2OF0pCgluIDo9IChsZW4oYikgLSBtZXRhTGVuKSAvIHNpZ0xlbgoJc2lncyA6PSBtYWtlKFtdU2lnbmF0dXJlLCBuKQoJZm9yIGkgOj0gMDsgaSA8IG47IGkrKyB7CgkJbyA6PSBtZXRhTGVuICsgc2lnTGVuKmkKCQlzaWdzW2ldLlZhbGlkYXRvciA9IGJbb10KCQljb3B5KHNpZ3NbaV0uU2lnWzpdLCBiW28rMTpvK3NpZ0xlbl0pCgl9CglyZXR1cm4gYywgc2lncywgbmlsCn0KCi8vIFZlcmlmeU11bHRpc2lnIGlzIGEgbWVzc2FnZS1pZCBtdWx0aXNpZyBJU00gb3ZlciBlZDI1NTE5OiB0aGUgZmlyc3QgdGhyZXNob2xkIHNpZ25hdHVyZXMgaW4gbWV0YWRhdGEgbXVzdCBiZQovLyB2YWxpZCBzaWduYXR1cmVzLCBieSBkaXN0aW5jdCB2YWxpZGF0b3JzIGluIGluY3JlYXNpbmcgb3JkZXIsIG92ZXIgdGhlIGNoZWNrcG9pbnQgZGlnZXN0IG9mIHRoaXMgbWVzc2FnZSBmcm9tCi8vIGl0cyBvd24gb3JpZ2luLiB2YWxpZGF0b3JzIGFyZSBlZDI1NTE5IHB1YmxpYyBrZXlzIG9mIDMyIGJ5dGVzLiBTaWduYXR1cmVzIHBhc3QgdGhlIHRocmVzaG9sZCBhcmUgbm90IHJlYWQuCmZ1bmMgVmVyaWZ5TXVsdGlzaWcodmFsaWRhdG9ycyBbXVtdYnl0ZSwgdGhyZXNob2xkIGludCwgbWV0YWRhdGEsIG1lc3NhZ2UgW11ieXRlKSBlcnJvciB7CglpZiB0aHJlc2hvbGQgPCAxIHx8IHRocmVzaG9sZCA+IGxlbih2YWxpZGF0b3JzKSB7CgkJcmV0dXJuIGVycm9ycy5OZXcoImh5cGVybGFuZTogbm8gdXNhYmxlIHZhbGlkYXRvciBzZXQgZm9yIHRoaXMgb3JpZ2luIikKCX0KCW0sIGVyciA6PSBQYXJzZU1lc3NhZ2UobWVzc2FnZSkKCWlmIGVyciAhPSBuaWwgewoJCXJldHVybiBlcnIKCX0KCWMsIHNpZ3MsIGVyciA6PSBQYXJzZU11bHRpc2lnTWV0YWRhdGEobWV0YWRhdGEpCglpZiBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gZXJyCgl9CglpZiBsZW4oc2lncykgPCB0aHJlc2hvbGQgewoJCXJldHVybiBlcnJvcnMuTmV3KCJoeXBlcmxhbmU6IGZld2VyIHNpZ25hdHVyZXMgdGhhbiB0aGUgdGhyZXNob2xkIikKCX0KCWRpZ2VzdCA6PSBDaGVja3BvaW50RGlnZXN0KG0uT3JpZ2luLCBjLkhvb2ssIGMuUm9vdCwgYy5JbmRleCwgSUQobWVzc2FnZSkpCglsYXN0IDo9IC0xCglmb3IgXywgcyA6PSByYW5nZSBzaWdzWzp0aHJlc2hvbGRdIHsKCQl2IDo9IGludChzLlZhbGlkYXRvcikKCQlpZiB2IDw9IGxhc3QgewoJCQlyZXR1cm4gZXJyb3JzLk5ldygiaHlwZXJsYW5lOiBzaWduYXR1cmVzIG91dCBvZiB2YWxpZGF0b3Igb3JkZXIiKQoJCX0KCQlpZiB2ID49IGxlbih2YWxpZGF0b3JzKSB7CgkJCXJldHVybiBlcnJvcnMuTmV3KCJoeXBlcmxhbmU6IHNpZ25hdHVyZSBuYW1lcyBubyB2YWxpZGF0b3IiKQoJCX0KCQlpZiAhZWQyNTUxOS5WZXJpZnkodmFsaWRhdG9yc1t2XSwgZGlnZXN0WzpdLCBzLlNpZ1s6XSkgewoJCQlyZXR1cm4gZXJyb3JzLk5ldygiaHlwZXJsYW5lOiBhIHNpZ25hdHVyZSBkb2VzIG5vdCB2ZXJpZnkiKQoJCX0KCQlsYXN0ID0gdgoJfQoJcmV0dXJuIG5pbAp9ChquEAoIa2V5cy5nbm8SoRBwYWNrYWdlIGh5cGVybGFuZQoKaW1wb3J0ICgKCSJlbmNvZGluZy9oZXgiCgkiZXJyb3JzIgoJInN0cmluZ3MiCikKCi8vIFRoZSBCaXRjb2luIGJhc2U1OCBhbHBoYWJldCwgd2hpY2ggU29sYW5hIHdyaXRlcyBpdHMgMzItYnl0ZSBrZXlzIGluLgpjb25zdCBiNTggPSAiMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eiIKCi8vIFBhcnNlS2V5MzIgcmVhZHMgYSAzMi1ieXRlIGtleSB0aGUgd2F5IGEgcGVyc29uIHR5cGVzIG9uZTogNjQgaGV4IGRpZ2l0cyAod2l0aCBvciB3aXRob3V0IDB4KSwgb3IgYSBTb2xhbmEKLy8gYWRkcmVzcyBpbiBiYXNlNTguCmZ1bmMgUGFyc2VLZXkzMihzIHN0cmluZykgKFszMl1ieXRlLCBlcnJvcikgewoJdmFyIG91dCBbMzJdYnl0ZQoJcyA9IHN0cmluZ3MuVHJpbVNwYWNlKHMpCglpZiBoIDo9IHN0cmluZ3MuVHJpbVByZWZpeChzLCAiMHgiKTsgbGVuKGgpID09IDY0IHsKCQliLCBlcnIgOj0gaGV4LkRlY29kZVN0cmluZyhoKQoJCWlmIGVyciAhPSBuaWwgewoJCQlyZXR1cm4gb3V0LCBlcnJvcnMuTmV3KCJoeXBlcmxhbmU6IG5vdCBoZXg6ICIgKyBzKQoJCX0KCQljb3B5KG91dFs6XSwgYikKCQlyZXR1cm4gb3V0LCBuaWwKCX0KCWlmIGxlbihzKSA9PSAwIHx8IGxlbihzKSA+IDQ0IHsKCQlyZXR1cm4gb3V0LCBlcnJvcnMuTmV3KCJoeXBlcmxhbmU6IG5vdCBhIDMyLWJ5dGUga2V5IGluIGhleCBvciBiYXNlNTg6ICIgKyBzKQoJfQoJZGlnaXRzIDo9IG1ha2UoW11ieXRlLCAwLCAzMikgLy8gdGhlIG51bWJlciBzbyBmYXIsIGJhc2UgMjU2LCBsZWFzdCBzaWduaWZpY2FudCBmaXJzdAoJZm9yIGkgOj0gMDsgaSA8IGxlbihzKTsgaSsrIHsKCQljIDo9IHN0cmluZ3MuSW5kZXhCeXRlKGI1OCwgc1tpXSkKCQlpZiBjIDwgMCB7CgkJCXJldHVybiBvdXQsIGVycm9ycy5OZXcoImh5cGVybGFuZTogbm90IGJhc2U1ODogIiArIHMpCgkJfQoJCWNhcnJ5IDo9IGMKCQlmb3IgaiA6PSByYW5nZSBkaWdpdHMgewoJCQljYXJyeSArPSBpbnQoZGlnaXRzW2pdKSAqIDU4CgkJCWRpZ2l0c1tqXSA9IGJ5dGUoY2FycnkpCgkJCWNhcnJ5ID4+PSA4CgkJfQoJCWZvciBjYXJyeSA+IDAgewoJCQlkaWdpdHMgPSBhcHBlbmQoZGlnaXRzLCBieXRlKGNhcnJ5KSkKCQkJY2FycnkgPj49IDgKCQl9Cgl9Cgl6ZXJvcyA6PSBsZW4ocykgLSBsZW4oc3RyaW5ncy5UcmltTGVmdChzLCAiMSIpKSAvLyBlYWNoIGxlYWRpbmcgJzEnIGlzIGEgbGVhZGluZyB6ZXJvIGJ5dGUKCWlmIHplcm9zK2xlbihkaWdpdHMpICE9IDMyIHsKCQlyZXR1cm4gb3V0LCBlcnJvcnMuTmV3KCJoeXBlcmxhbmU6IGJhc2U1OCBrZXkgaXMgbm90IDMyIGJ5dGVzOiAiICsgcykKCX0KCWZvciBpLCBkIDo9IHJhbmdlIGRpZ2l0cyB7CgkJb3V0WzMxLWldID0gZAoJfQoJcmV0dXJuIG91dCwgbmlsCn0KCi8vIEJhc2U1OCB3cml0ZXMgYnl0ZXMgdGhlIHdheSBTb2xhbmEgd3JpdGVzIGEga2V5LgpmdW5jIEJhc2U1OChiIFtdYnl0ZSkgc3RyaW5nIHsKCXplcm9zIDo9IDAKCWZvciB6ZXJvcyA8IGxlbihiKSAmJiBiW3plcm9zXSA9PSAwIHsKCQl6ZXJvcysrCgl9CglkaWdpdHMgOj0gbWFrZShbXWJ5dGUsIDAsIGxlbihiKSoxMzgvMTAwKzEpIC8vIGJhc2UgNTgsIGxlYXN0IHNpZ25pZmljYW50IGZpcnN0Cglmb3IgXywgeCA6PSByYW5nZSBiW3plcm9zOl0gewoJCWNhcnJ5IDo9IGludCh4KQoJCWZvciBqIDo9IHJhbmdlIGRpZ2l0cyB7CgkJCWNhcnJ5ICs9IGludChkaWdpdHNbal0pIDw8IDgKCQkJZGlnaXRzW2pdID0gYnl0ZShjYXJyeSAlIDU4KQoJCQljYXJyeSAvPSA1OAoJCX0KCQlmb3IgY2FycnkgPiAwIHsKCQkJZGlnaXRzID0gYXBwZW5kKGRpZ2l0cywgYnl0ZShjYXJyeSU1OCkpCgkJCWNhcnJ5IC89IDU4CgkJfQoJfQoJb3V0IDo9IG1ha2UoW11ieXRlLCB6ZXJvcytsZW4oZGlnaXRzKSkKCWZvciBpIDo9IDA7IGkgPCB6ZXJvczsgaSsrIHsKCQlvdXRbaV0gPSAnMScKCX0KCWZvciBpLCBkIDo9IHJhbmdlIGRpZ2l0cyB7CgkJb3V0W2xlbihvdXQpLTEtaV0gPSBiNThbZF0KCX0KCXJldHVybiBzdHJpbmcob3V0KQp9CiIiChMvZ25vLk1lbVBhY2thZ2VUeXBlEgsKCU1QVXNlckFsbCIOMTAwMDAwMDAwdWdub3QSEQjM2LgeEgozMTkyMnVnbm90GqgBCjoKEy90bS5QdWJLZXlTZWNwMjU2azESIwohA3LmjE5osNUrThxsyk+O+pP9kkT5wKaebE3UAU4wyDRbEkDhW1kjtRa42hAr63OXeDc0BGC5Fuk+hO04Hf1u3XmB+UqiC52A912HL+z82cjUDan308sNKmoOBvYDKvRB9QTHGihnMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWx1dXhl