Transaction executed successfully
Transaction Details
Inspect execution, participants, message data, gas usage, events and raw transaction data.
Transaction hash
E65F8FCB0529AA3A2CFF4DBB971C79B5E2AC84699EE9205E5B28C318C53E7331
Transaction overview
Execution summary
TX INDEX
0
Position in block
GAS WANTED
80,000,000
Requested gas limit
GAS USED
27,249,686
Gas consumed
FEE
80000ugnot
Transaction fee
Participants
Message
Message #1
m_addpkg
Arguments
g136j0m08pkm2lwwde9dmlx8uee26llent9s5cpf7000000ugnot
Execution log
msg:0,success:true,log:,events:[]
Events
No events emitted by this transaction.
Raw encoded transaction
CueDAQoML3ZtLm1fYWRkcGtnEtWDAQooZzEzNmowbTA4cGttMmx3d2RlOWRtbHg4dWVlMjZsbGVudDlzNWNwZhKZgwEKEHZhbGlkYXRvcl9zY29yZXMSI2duby5sYW5kL3Ivc2FtY3Jldy92YWxpZGF0b3Jfc2NvcmVzGqAKCglhZG1pbi5nbm8SkgpwYWNrYWdlIHZhbGlkYXRvcl9zY29yZXMKCmltcG9ydCAic3RyaW5ncyIKCi8vIGFkbWluIGlzIHRoZSBzYW1jcmV3IDItb2YtMyBtdWx0aXNpZy4gSXRzIG9ubHkgcG93ZXIgaXMgU2V0UHVibGlzaGVyLgpjb25zdCBhZG1pbiBhZGRyZXNzID0gImcxMzZqMG0wOHBrbTJsd3dkZTlkbWx4OHVlZTI2bGxlbnQ5czVjcGYiCgp2YXIgcHVibGlzaGVyIGFkZHJlc3MgPSBpbml0aWFsUHVibGlzaGVyCgovLyBjYWxsZXIgcmV0dXJucyB0aGUgZnJhbWUtdmVyaWZpZWQgY2FsbGVyIG9mIGEgY3Jvc3NpbmcgZnVuY3Rpb24uCmZ1bmMgY2FsbGVyKGN1ciByZWFsbSkgYWRkcmVzcyB7CglpZiAhY3VyLklzQ3VycmVudCgpIHsKCQlwYW5pYygidmFsaWRhdG9yX3Njb3Jlczogc3RhbGUgcmVhbG0iKQoJfQoJcmV0dXJuIGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKQp9CgpmdW5jIHJlcXVpcmVQdWJsaXNoZXIoY3VyIHJlYWxtKSB7CglpZiBjYWxsZXIoY3VyKSAhPSBwdWJsaXNoZXIgewoJCXBhbmljKCJ2YWxpZGF0b3Jfc2NvcmVzOiBwdWJsaXNoZXIgb25seSIpCgl9Cn0KCi8vIGlzQ2Fub25pY2FsQWRkcmVzcyBhY2NlcHRzIG9ubHkgYSBsb3dlcmNhc2UsIGNoZWNrc3VtbWVkIGcxIGFkZHJlc3MuCmZ1bmMgaXNDYW5vbmljYWxBZGRyZXNzKHMgc3RyaW5nKSBib29sIHsKCWlmIGxlbihzKSAhPSA0MCB8fCAhc3RyaW5ncy5IYXNQcmVmaXgocywgImcxIikgfHwgc3RyaW5ncy5Ub0xvd2VyKHMpICE9IHMgewoJCXJldHVybiBmYWxzZQoJfQoJcmV0dXJuIGFkZHJlc3MocykuSXNWYWxpZCgpCn0KCi8vIFNldFB1Ymxpc2hlciByZXBsYWNlcyB0aGUgcHVibGlzaGVyLiBBZG1pbiBvbmx5LgpmdW5jIFNldFB1Ymxpc2hlcihjdXIgcmVhbG0sIGFkZHIgYWRkcmVzcykgewoJaWYgY2FsbGVyKGN1cikgIT0gYWRtaW4gewoJCXBhbmljKCJ2YWxpZGF0b3Jfc2NvcmVzOiBhZG1pbiBvbmx5IikKCX0KCWlmICFpc0Nhbm9uaWNhbEFkZHJlc3Moc3RyaW5nKGFkZHIpKSB7CgkJcGFuaWMoInZhbGlkYXRvcl9zY29yZXM6IGludmFsaWQgcHVibGlzaGVyIGFkZHJlc3MiKQoJfQoJcHVibGlzaGVyID0gYWRkcgp9CgovLyBHZXRBZG1pbiByZXR1cm5zIHRoZSBhZG1pbiBhZGRyZXNzLCBmb3IgcG9zdC1kZXBsb3ltZW50IGNoZWNrcy4KZnVuYyBHZXRBZG1pbigpIHN0cmluZyB7IHJldHVybiBzdHJpbmcoYWRtaW4pIH0KCi8vIEdldFB1Ymxpc2hlciByZXR1cm5zIHRoZSBjdXJyZW50IHB1Ymxpc2hlciBhZGRyZXNzLgpmdW5jIEdldFB1Ymxpc2hlcigpIHN0cmluZyB7IHJldHVybiBzdHJpbmcocHVibGlzaGVyKSB9Chr9HAoMZWRpdGlvbnMuZ25vEuwccGFja2FnZSB2YWxpZGF0b3Jfc2NvcmVzCgppbXBvcnQgKAoJInN0cmNvbnYiCgkic3RyaW5ncyIKKQoKLy8gQW4gZWRpdGlvbiBrZWVwcyBlYWNoIGNhbmRpZGF0ZSBhcyBpdHMgdmFsaWRhdGVkIHBheWxvYWQgbGluZSwgaW4gdGhlCi8vIG9yZGVyIGFkZGVkLiBPbmUgc3RyaW5nIHBlciBjYW5kaWRhdGUgY29zdHMgYWJvdXQgMTYwIGJ5dGVzIG9mIHN0b3JhZ2UKLy8gZGVwb3NpdDsgYSBzdHJ1Y3QgaW4gYW4gQVZMIHRyZWUgY29zdCBhYm91dCAzLDcwMCBieXRlcyAobWVhc3VyZWQgb24KLy8gZ25vZGV2IGF0IHRoZSBnbm9sYW5kLTEgcnVudGltZSkuCnR5cGUgZWRpdGlvbiBzdHJ1Y3QgewoJbnVtYmVyICAgICAgICAgIGludAoJY29tcHV0ZWRBdCAgICAgIHN0cmluZwoJc2NvcmVjYXJkU0hBMjU2IHN0cmluZwoJYXJlbmFzICAgICAgICAgIFtdc3RyaW5nCglzZWFsZWQgICAgICAgICAgYm9vbAoJbGluZXMgICAgICAgICAgIFtdc3RyaW5nIC8vICJvcGVyYXRvcnxtb25pa2VyfHRvdGFsfHJhbmt8Z2l0aHVifHMxLC4uLixzTiIKfQoKLy8gZWRpdGlvbnMgaG9sZHMgdGhlIHNlYWxlZCBlZGl0aW9ucyBpbiBvcmRlciwgdGhlbiBhdCBtb3N0IG9uZSBvcGVuCi8vIGVkaXRpb24sIGFsd2F5cyBsYXN0Lgp2YXIgZWRpdGlvbnMgW10qZWRpdGlvbgoKLy8gb3BlcmF0b3JMZW4gaXMgdGhlIGxlbmd0aCBvZiBhIGNhbm9uaWNhbCBnMSBhZGRyZXNzLCB0aGUgcHJlZml4IG9mIGEgbGluZS4KY29uc3Qgb3BlcmF0b3JMZW4gPSA0MAoKLy8gZmluZCByZXR1cm5zIHRoZSBsaW5lIHN0b3JlZCBmb3Igb3BlcmF0b3IsIGlmIGFueS4KZnVuYyAoZSAqZWRpdGlvbikgZmluZChvcGVyYXRvciBzdHJpbmcpIChzdHJpbmcsIGJvb2wpIHsKCWlmIGxlbihvcGVyYXRvcikgIT0gb3BlcmF0b3JMZW4gewoJCXJldHVybiAiIiwgZmFsc2UKCX0KCWZvciBfLCBsaW5lIDo9IHJhbmdlIGUubGluZXMgewoJCWlmIGxpbmVbOm9wZXJhdG9yTGVuXSA9PSBvcGVyYXRvciB7CgkJCXJldHVybiBsaW5lLCB0cnVlCgkJfQoJfQoJcmV0dXJuICIiLCBmYWxzZQp9CgpmdW5jIG9wZW5FZGl0aW9uKCkgKmVkaXRpb24gewoJaWYgbGVuKGVkaXRpb25zKSA9PSAwIHx8IGVkaXRpb25zW2xlbihlZGl0aW9ucyktMV0uc2VhbGVkIHsKCQlyZXR1cm4gbmlsCgl9CglyZXR1cm4gZWRpdGlvbnNbbGVuKGVkaXRpb25zKS0xXQp9CgpmdW5jIHJlcXVpcmVPcGVuKG51bWJlciBpbnQpICplZGl0aW9uIHsKCWUgOj0gb3BlbkVkaXRpb24oKQoJaWYgZSA9PSBuaWwgfHwgZS5udW1iZXIgIT0gbnVtYmVyIHsKCQlwYW5pYygidmFsaWRhdG9yX3Njb3JlczogZWRpdGlvbiAiICsgc3RyY29udi5JdG9hKG51bWJlcikgKyAiIGlzIG5vdCBvcGVuIikKCX0KCXJldHVybiBlCn0KCi8vIE9wZW5FZGl0aW9uIHN0YXJ0cyBhIG5ldyBlZGl0aW9uIGFuZCByZXR1cm5zIGl0cyBudW1iZXIuIFB1Ymxpc2hlciBvbmx5LgovLyBhcmVuYXMgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgZm9yIGV4YW1wbGUgImNoYWxsZW5nZSx0ZXN0MTMsZmlyZWRyaWxsIi4KZnVuYyBPcGVuRWRpdGlvbihjdXIgcmVhbG0sIGNvbXB1dGVkQXQsIHNjb3JlY2FyZFNIQTI1NiwgYXJlbmFzIHN0cmluZykgaW50IHsKCXJlcXVpcmVQdWJsaXNoZXIoY3VyKQoJaWYgb3BlbkVkaXRpb24oKSAhPSBuaWwgewoJCXBhbmljKCJ2YWxpZGF0b3Jfc2NvcmVzOiBhbiBlZGl0aW9uIGlzIGFscmVhZHkgb3BlbiIpCgl9CglpZiAhaXNDb21wdXRlZEF0KGNvbXB1dGVkQXQpIHsKCQlwYW5pYygidmFsaWRhdG9yX3Njb3JlczogaW52YWxpZCBjb21wdXRlZEF0IikKCX0KCWlmICFpc1NIQTI1NkhleChzY29yZWNhcmRTSEEyNTYpIHsKCQlwYW5pYygidmFsaWRhdG9yX3Njb3JlczogaW52YWxpZCBzY29yZWNhcmQgU0hBLTI1NiIpCgl9CgllIDo9ICZlZGl0aW9uewoJCW51bWJlcjogICAgICAgICAgbGVuKGVkaXRpb25zKSArIDEsCgkJY29tcHV0ZWRBdDogICAgICBjb21wdXRlZEF0LAoJCXNjb3JlY2FyZFNIQTI1Njogc2NvcmVjYXJkU0hBMjU2LAoJCWFyZW5hczogICAgICAgICAgcGFyc2VBcmVuYXMoYXJlbmFzKSwKCX0KCWVkaXRpb25zID0gYXBwZW5kKGVkaXRpb25zLCBlKQoJcmV0dXJuIGUubnVtYmVyCn0KCi8vIEFkZENhbmRpZGF0ZXMgYWRkcyBvbmUgY2FuZGlkYXRlIHBlciBwYXlsb2FkIGxpbmUgdG8gdGhlIG9wZW4gZWRpdGlvbi4KLy8gUHVibGlzaGVyIG9ubHkuIFRoZSB3aG9sZSBwYXlsb2FkIGlzIHZhbGlkYXRlZCBiZWZvcmUgYW55dGhpbmcgaXMgc3RvcmVkLgpmdW5jIEFkZENhbmRpZGF0ZXMoY3VyIHJlYWxtLCBudW1iZXIgaW50LCBwYXlsb2FkIHN0cmluZykgewoJcmVxdWlyZVB1Ymxpc2hlcihjdXIpCgllIDo9IHJlcXVpcmVPcGVuKG51bWJlcikKCWlmIHBheWxvYWQgPT0gIiIgewoJCXBhbmljKCJ2YWxpZGF0b3Jfc2NvcmVzOiBlbXB0eSBwYXlsb2FkIikKCX0KCWxpbmVzIDo9IHN0cmluZ3MuU3BsaXQocGF5bG9hZCwgIlxuIikKCXNlZW4gOj0gbWFwW3N0cmluZ11ib29se30KCWZvciBpLCBsaW5lIDo9IHJhbmdlIGxpbmVzIHsKCQlvcGVyYXRvciA6PSBjaGVja0xpbmUobGluZSwgbGVuKGUuYXJlbmFzKSwgaSsxKQoJCWlmIF8sIGZvdW5kIDo9IGUuZmluZChvcGVyYXRvcik7IGZvdW5kIHx8IHNlZW5bb3BlcmF0b3JdIHsKCQkJcGFuaWMobGluZUVycm9yKGkrMSwgImR1cGxpY2F0ZSBvcGVyYXRvciIpKQoJCX0KCQlzZWVuW29wZXJhdG9yXSA9IHRydWUKCX0KCWUubGluZXMgPSBhcHBlbmQoZS5saW5lcywgbGluZXMuLi4pCn0KCi8vIFNlYWwgY2xvc2VzIHRoZSBvcGVuIGVkaXRpb24gZm9yIGdvb2QuIFB1Ymxpc2hlciBvbmx5LiBJdCBmYWlscyB1bmxlc3MgdGhlCi8vIGVkaXRpb24gaG9sZHMgZXhhY3RseSBleHBlY3RlZENvdW50IGNhbmRpZGF0ZXMgKGF0IGxlYXN0IG9uZSkuCmZ1bmMgU2VhbChjdXIgcmVhbG0sIG51bWJlciBpbnQsIGV4cGVjdGVkQ291bnQgaW50KSB7CglyZXF1aXJlUHVibGlzaGVyKGN1cikKCWUgOj0gcmVxdWlyZU9wZW4obnVtYmVyKQoJaWYgZXhwZWN0ZWRDb3VudCA8IDEgewoJCXBhbmljKCJ2YWxpZGF0b3Jfc2NvcmVzOiBleHBlY3RlZENvdW50IG11c3QgYmUgYXQgbGVhc3QgMSIpCgl9CglpZiBnb3QgOj0gbGVuKGUubGluZXMpOyBnb3QgIT0gZXhwZWN0ZWRDb3VudCB7CgkJcGFuaWMoInZhbGlkYXRvcl9zY29yZXM6IGVkaXRpb24gaG9sZHMgIiArIHN0cmNvbnYuSXRvYShnb3QpICsgIiBjYW5kaWRhdGVzLCBleHBlY3RlZCAiICsgc3RyY29udi5JdG9hKGV4cGVjdGVkQ291bnQpKQoJfQoJZS5zZWFsZWQgPSB0cnVlCn0KCi8vIERpc2NhcmRPcGVuIGRyb3BzIHRoZSBvcGVuIGVkaXRpb24uIFB1Ymxpc2hlciBvbmx5LiBJdHMgbnVtYmVyIGlzIHJldXNlZAovLyBieSB0aGUgbmV4dCBPcGVuRWRpdGlvbi4gVGhlIHNsb3QgaXMgY2xlYXJlZCBmaXJzdCBzbyB0aGUgYmFja2luZyBhcnJheQovLyBkb2VzIG5vdCBrZWVwIHRoZSBkaXNjYXJkZWQgZWRpdGlvbiBzdG9yZWQuCmZ1bmMgRGlzY2FyZE9wZW4oY3VyIHJlYWxtKSB7CglyZXF1aXJlUHVibGlzaGVyKGN1cikKCWlmIG9wZW5FZGl0aW9uKCkgPT0gbmlsIHsKCQlwYW5pYygidmFsaWRhdG9yX3Njb3Jlczogbm8gb3BlbiBlZGl0aW9uIikKCX0KCWVkaXRpb25zW2xlbihlZGl0aW9ucyktMV0gPSBuaWwKCWVkaXRpb25zID0gZWRpdGlvbnNbOmxlbihlZGl0aW9ucyktMV0KfQoaSgoLZ25vbW9kLnRvbWwSO21vZHVsZSA9ICJnbm8ubGFuZC9yL3NhbWNyZXcvdmFsaWRhdG9yX3Njb3JlcyIKZ25vID0gIjAuOSIKGqwpCghqc29uLmdubxKfKXBhY2thZ2UgdmFsaWRhdG9yX3Njb3JlcwoKaW1wb3J0ICgKCSJzb3J0IgoJInN0cmNvbnYiCgkic3RyaW5ncyIKCSJ1bmljb2RlL3V0ZjgiCikKCmNvbnN0IGhleERpZ2l0cyA9ICIwMTIzNDU2Nzg5YWJjZGVmIgoKLy8gcXVvdGVTYWZlIHF1b3RlcyBhIHN0cmluZyB0aGUgcmVhbG0gdmFsaWRhdGVkIHRvIG5lZWQgbm8gSlNPTiBlc2NhcGluZwovLyAoYWRkcmVzc2VzLCBkYXRlcywgaGFzaGVzLCBhcmVuYSBuYW1lcykuIENvbmNhdGVuYXRpb24gaXMgY2hlYXAgaW4gZ2FzOwovLyBwZXItYnl0ZSBsb29wcyBhcmUgbm90LgpmdW5jIHF1b3RlU2FmZShzIHN0cmluZykgc3RyaW5nIHsgcmV0dXJuIGAiYCArIHMgKyBgImAgfQoKLy8gcXVvdGVNb25pa2VyIHF1b3RlcyBhIHZhbGlkYXRlZCBtb25pa2VyICh2YWxpZCBVVEYtOCwgbm8gY29udHJvbAovLyBjaGFyYWN0ZXJzKTogb25seSAnIicgYW5kICdcJyBuZWVkIGVzY2FwaW5nLgpmdW5jIHF1b3RlTW9uaWtlcihzIHN0cmluZykgc3RyaW5nIHsKCWlmICFzdHJpbmdzLkNvbnRhaW5zQW55KHMsIGAiXGApIHsKCQlyZXR1cm4gYCJgICsgcyArIGAiYAoJfQoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCgl3cml0ZUpTT05TdHJpbmcoJmIsIHMpCglyZXR1cm4gYi5TdHJpbmcoKQp9CgovLyB3cml0ZUpTT05TdHJpbmcgd3JpdGVzIGFueSBzdHJpbmcgYXMgYSBKU09OIHN0cmluZy4gSW52YWxpZCBVVEYtOCBieXRlcwovLyBiZWNvbWUgVStGRkZELiBJdCBjb3N0cyBnYXMgcGVyIHJ1bmU6IHVzZSBpdCBvbmx5IGZvciBzaG9ydCBvciB1bnZhbGlkYXRlZAovLyBpbnB1dC4KZnVuYyB3cml0ZUpTT05TdHJpbmcoYiAqc3RyaW5ncy5CdWlsZGVyLCBzIHN0cmluZykgewoJYi5Xcml0ZUJ5dGUoJyInKQoJZm9yIGkgOj0gMDsgaSA8IGxlbihzKTsgewoJCXIsIHNpemUgOj0gdXRmOC5EZWNvZGVSdW5lSW5TdHJpbmcoc1tpOl0pCgkJc3dpdGNoIHsKCQljYXNlIHIgPT0gdXRmOC5SdW5lRXJyb3IgJiYgc2l6ZSA9PSAxOgoJCQliLldyaXRlU3RyaW5nKGBcdWZmZmRgKQoJCWNhc2UgciA9PSAnIic6CgkJCWIuV3JpdGVTdHJpbmcoYFwiYCkKCQljYXNlIHIgPT0gJ1xcJzoKCQkJYi5Xcml0ZVN0cmluZyhgXFxgKQoJCWNhc2UgciA8IDB4MjA6CgkJCWIuV3JpdGVTdHJpbmcoYFx1MDBgKQoJCQliLldyaXRlQnl0ZShoZXhEaWdpdHNbcj4+NF0pCgkJCWIuV3JpdGVCeXRlKGhleERpZ2l0c1tyJjB4Zl0pCgkJZGVmYXVsdDoKCQkJYi5Xcml0ZVN0cmluZyhzW2kgOiBpK3NpemVdKQoJCX0KCQlpICs9IHNpemUKCX0KCWIuV3JpdGVCeXRlKCciJykKfQoKZnVuYyB3cml0ZVN0cmluZ3MoYiAqc3RyaW5ncy5CdWlsZGVyLCBsaXN0IFtdc3RyaW5nKSB7CgliLldyaXRlQnl0ZSgnWycpCglmb3IgaSwgcyA6PSByYW5nZSBsaXN0IHsKCQlpZiBpID4gMCB7CgkJCWIuV3JpdGVCeXRlKCcsJykKCQl9CgkJYi5Xcml0ZVN0cmluZyhxdW90ZVNhZmUocykpCgl9CgliLldyaXRlQnl0ZSgnXScpCn0KCi8vIGNhbmRpZGF0ZSBpcyBhIHN0b3JlZCBsaW5lIHNwbGl0IGludG8gaXRzIGZpZWxkcy4gTnVtYmVycyBzdGF5IGluIHRoZWlyCi8vIGNhbm9uaWNhbCBkZWNpbWFsIHRleHQsIHdoaWNoIGlzIHZhbGlkIEpTT04uCnR5cGUgY2FuZGlkYXRlIHN0cnVjdCB7CglvcGVyYXRvciAgICBzdHJpbmcKCW1vbmlrZXIgICAgIHN0cmluZwoJdG90YWwgICAgICAgc3RyaW5nCglyYW5rICAgICAgICBpbnQKCXJhbmtUZXh0ICAgIHN0cmluZwoJZ2l0aHViICAgICAgc3RyaW5nCglhcmVuYVNjb3JlcyBzdHJpbmcgLy8gInMxLC4uLixzTiIKfQoKZnVuYyBkZWNvZGUobGluZSBzdHJpbmcpIGNhbmRpZGF0ZSB7CglmIDo9IHN0cmluZ3MuU3BsaXQobGluZSwgInwiKQoJcmFuaywgXyA6PSBzdHJjb252LkF0b2koZlszXSkKCXJldHVybiBjYW5kaWRhdGV7b3BlcmF0b3I6IGZbMF0sIG1vbmlrZXI6IGZbMV0sIHRvdGFsOiBmWzJdLCByYW5rOiByYW5rLCByYW5rVGV4dDogZlszXSwgZ2l0aHViOiBmWzRdLCBhcmVuYVNjb3JlczogZls1XX0KfQoKdHlwZSBieVJhbmsgW11jYW5kaWRhdGUKCmZ1bmMgKHMgYnlSYW5rKSBMZW4oKSBpbnQgICAgICB7IHJldHVybiBsZW4ocykgfQpmdW5jIChzIGJ5UmFuaykgU3dhcChpLCBqIGludCkgeyBzW2ldLCBzW2pdID0gc1tqXSwgc1tpXSB9CmZ1bmMgKHMgYnlSYW5rKSBMZXNzKGksIGogaW50KSBib29sIHsKCWlmIHNbaV0ucmFuayAhPSBzW2pdLnJhbmsgewoJCXJldHVybiBzW2ldLnJhbmsgPCBzW2pdLnJhbmsKCX0KCWlmIHNbaV0ubW9uaWtlciAhPSBzW2pdLm1vbmlrZXIgewoJCXJldHVybiBzW2ldLm1vbmlrZXIgPCBzW2pdLm1vbmlrZXIKCX0KCXJldHVybiBzW2ldLm9wZXJhdG9yIDwgc1tqXS5vcGVyYXRvcgp9CgovLyBzb3J0ZWRDYW5kaWRhdGVzIGxpc3RzIGFuIGVkaXRpb24ncyBjYW5kaWRhdGVzIGJ5IHJhbmssIHRoZW4gbW9uaWtlcgovLyAoYnl0ZSBvcmRlciksIHRoZW4gb3BlcmF0b3IuCmZ1bmMgc29ydGVkQ2FuZGlkYXRlcyhlICplZGl0aW9uKSBbXWNhbmRpZGF0ZSB7CglsaXN0IDo9IG1ha2UoW11jYW5kaWRhdGUsIGxlbihlLmxpbmVzKSkKCWZvciBpLCBsaW5lIDo9IHJhbmdlIGUubGluZXMgewoJCWxpc3RbaV0gPSBkZWNvZGUobGluZSkKCX0KCXNvcnQuU29ydChieVJhbmsobGlzdCkpCglyZXR1cm4gbGlzdAp9CgpmdW5jIGxhdGVzdFNlYWxlZCgpICplZGl0aW9uIHsKCWZvciBpIDo9IGxlbihlZGl0aW9ucykgLSAxOyBpID49IDA7IGktLSB7CgkJaWYgZWRpdGlvbnNbaV0uc2VhbGVkIHsKCQkJcmV0dXJuIGVkaXRpb25zW2ldCgkJfQoJfQoJcmV0dXJuIG5pbAp9CgovLyBzY29yZUZpZWxkcyBpcyBgIm1vbmlrZXIiOk0sInRvdGFsIjpULCJyYW5rIjpSLCJnaXRodWIiOkdgLCBzaGFyZWQgYnkKLy8gYm90aCBKU09OIHNoYXBlcy4KZnVuYyBzY29yZUZpZWxkcyhjIGNhbmRpZGF0ZSkgc3RyaW5nIHsKCXJldHVybiBgIm1vbmlrZXIiOmAgKyBxdW90ZU1vbmlrZXIoYy5tb25pa2VyKSArIGAsInRvdGFsIjpgICsgYy50b3RhbCArIGAsInJhbmsiOmAgKyBjLnJhbmtUZXh0ICsgYCwiZ2l0aHViIjpgICsgYy5naXRodWIKfQoKZnVuYyBlZGl0aW9uSlNPTihlICplZGl0aW9uKSBzdHJpbmcgewoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCgliLldyaXRlU3RyaW5nKGB7Im51bWJlciI6YCArIHN0cmNvbnYuSXRvYShlLm51bWJlcikgKyBgLCJjb21wdXRlZEF0IjpgICsgcXVvdGVTYWZlKGUuY29tcHV0ZWRBdCkgKwoJCWAsInNjb3JlY2FyZFNIQTI1NiI6YCArIHF1b3RlU2FmZShlLnNjb3JlY2FyZFNIQTI1NikgKyBgLCJhcmVuYXMiOmApCgl3cml0ZVN0cmluZ3MoJmIsIGUuYXJlbmFzKQoJYi5Xcml0ZVN0cmluZyhgLCJjYW5kaWRhdGVzIjpbYCkKCWZvciBpLCBjIDo9IHJhbmdlIHNvcnRlZENhbmRpZGF0ZXMoZSkgewoJCWlmIGkgPiAwIHsKCQkJYi5Xcml0ZUJ5dGUoJywnKQoJCX0KCQliLldyaXRlU3RyaW5nKGB7Im9wZXJhdG9yIjpgICsgcXVvdGVTYWZlKGMub3BlcmF0b3IpICsgYCxgICsgc2NvcmVGaWVsZHMoYykgKyBgLCJhcmVuYVNjb3JlcyI6W2AgKyBjLmFyZW5hU2NvcmVzICsgYF19YCkKCX0KCWIuV3JpdGVTdHJpbmcoYF19YCkKCXJldHVybiBiLlN0cmluZygpCn0KCi8vIExhdGVzdEpTT04gcmV0dXJucyB0aGUgbGF0ZXN0IHNlYWxlZCBlZGl0aW9uLCBvciAibnVsbCIuCmZ1bmMgTGF0ZXN0SlNPTigpIHN0cmluZyB7CgllIDo9IGxhdGVzdFNlYWxlZCgpCglpZiBlID09IG5pbCB7CgkJcmV0dXJuICJudWxsIgoJfQoJcmV0dXJuIGVkaXRpb25KU09OKGUpCn0KCi8vIEVkaXRpb25KU09OIHJldHVybnMgc2VhbGVkIGVkaXRpb24gbiwgb3IgIm51bGwiLgpmdW5jIEVkaXRpb25KU09OKG4gaW50KSBzdHJpbmcgewoJaWYgbiA8IDEgfHwgbiA+IGxlbihlZGl0aW9ucykgfHwgIWVkaXRpb25zW24tMV0uc2VhbGVkIHsKCQlyZXR1cm4gIm51bGwiCgl9CglyZXR1cm4gZWRpdGlvbkpTT04oZWRpdGlvbnNbbi0xXSkKfQoKLy8gQ2FuZGlkYXRlSlNPTiByZXR1cm5zIHRoZSBvcGVyYXRvcidzIGVudHJpZXMgYWNyb3NzIHNlYWxlZCBlZGl0aW9ucywgaW4KLy8gZWRpdGlvbiBvcmRlcjsgImVudHJpZXMiIGlzIFtdIGZvciBhbiB1bmtub3duIGFkZHJlc3MuCmZ1bmMgQ2FuZGlkYXRlSlNPTihvcGVyYXRvciBzdHJpbmcpIHN0cmluZyB7Cgl2YXIgYiBzdHJpbmdzLkJ1aWxkZXIKCWIuV3JpdGVTdHJpbmcoYHsib3BlcmF0b3IiOmApCgl3cml0ZUpTT05TdHJpbmcoJmIsIG9wZXJhdG9yKQoJYi5Xcml0ZVN0cmluZyhgLCJlbnRyaWVzIjpbYCkKCWZpcnN0IDo9IHRydWUKCWZvciBfLCBlIDo9IHJhbmdlIGVkaXRpb25zIHsKCQlpZiAhZS5zZWFsZWQgewoJCQljb250aW51ZQoJCX0KCQlsaW5lLCBvayA6PSBlLmZpbmQob3BlcmF0b3IpCgkJaWYgIW9rIHsKCQkJY29udGludWUKCQl9CgkJaWYgIWZpcnN0IHsKCQkJYi5Xcml0ZUJ5dGUoJywnKQoJCX0KCQlmaXJzdCA9IGZhbHNlCgkJYyA6PSBkZWNvZGUobGluZSkKCQliLldyaXRlU3RyaW5nKGB7ImVkaXRpb24iOmAgKyBzdHJjb252Lkl0b2EoZS5udW1iZXIpICsgYCwiY29tcHV0ZWRBdCI6YCArIHF1b3RlU2FmZShlLmNvbXB1dGVkQXQpICsgYCxgICsgc2NvcmVGaWVsZHMoYykgKyBgLCJhcmVuYXMiOmApCgkJd3JpdGVTdHJpbmdzKCZiLCBlLmFyZW5hcykKCQliLldyaXRlU3RyaW5nKGAsImFyZW5hU2NvcmVzIjpbYCArIGMuYXJlbmFTY29yZXMgKyBgXX1gKQoJfQoJYi5Xcml0ZVN0cmluZyhgXX1gKQoJcmV0dXJuIGIuU3RyaW5nKCkKfQoKLy8gT3BlbkVkaXRpb25KU09OIHJldHVybnMgdGhlIG9wZW4gZWRpdGlvbiAobnVtYmVyLCBzY29yZWNhcmQgaGFzaCBhbmQgdGhlCi8vIG9wZXJhdG9ycyBhbHJlYWR5IGFkZGVkLCBpbiB0aGUgb3JkZXIgYWRkZWQpLCBvciAibnVsbCIuCmZ1bmMgT3BlbkVkaXRpb25KU09OKCkgc3RyaW5nIHsKCWUgOj0gb3BlbkVkaXRpb24oKQoJaWYgZSA9PSBuaWwgewoJCXJldHVybiAibnVsbCIKCX0KCXZhciBiIHN0cmluZ3MuQnVpbGRlcgoJYi5Xcml0ZVN0cmluZyhgeyJudW1iZXIiOmAgKyBzdHJjb252Lkl0b2EoZS5udW1iZXIpICsgYCwic2NvcmVjYXJkU0hBMjU2IjpgICsgcXVvdGVTYWZlKGUuc2NvcmVjYXJkU0hBMjU2KSArIGAsIm9wZXJhdG9ycyI6W2ApCglmb3IgaSwgbGluZSA6PSByYW5nZSBlLmxpbmVzIHsKCQlpZiBpID4gMCB7CgkJCWIuV3JpdGVCeXRlKCcsJykKCQl9CgkJYi5Xcml0ZVN0cmluZyhxdW90ZVNhZmUobGluZVs6b3BlcmF0b3JMZW5dKSkKCX0KCWIuV3JpdGVTdHJpbmcoYF19YCkKCXJldHVybiBiLlN0cmluZygpCn0KGsACCg1wdWJsaXNoZXIuZ25vEq4CcGFja2FnZSB2YWxpZGF0b3Jfc2NvcmVzCgovLyBpbml0aWFsUHVibGlzaGVyIGlzIHRoZSBvbmx5IHdyaXRlciBvZiBlZGl0aW9ucyB1bnRpbCB0aGUgYWRtaW4gcmVwbGFjZXMgaXQKLy8gd2l0aCBTZXRQdWJsaXNoZXIuIExvY2FsIGdub2RldiBydW5zIHN0YWdlIGEgY29weSBvZiB0aGUgcmVhbG0gaW4gd2hpY2ggdGhpcwovLyBmaWxlIG5hbWVzIGEgZ25vZGV2IHRlc3Qga2V5IGluc3RlYWQuCmNvbnN0IGluaXRpYWxQdWJsaXNoZXIgYWRkcmVzcyA9ICJnMTM2ajBtMDhwa20ybHd3ZGU5ZG1seDh1ZWUyNmxsZW50OXM1Y3BmIgoajRAKCnJlbmRlci5nbm8S/g9wYWNrYWdlIHZhbGlkYXRvcl9zY29yZXMKCmltcG9ydCAoCgkic3RyY29udiIKCSJzdHJpbmdzIgopCgovLyBmb3JtYXRIdW5kcmVkdGhzIHJlbmRlcnMgdGhlIGNhbm9uaWNhbCBkZWNpbWFsICI4NzQzIiBhcyAiODcuNDMiLgpmdW5jIGZvcm1hdEh1bmRyZWR0aHMocyBzdHJpbmcpIHN0cmluZyB7Cglmb3IgbGVuKHMpIDwgMyB7CgkJcyA9ICIwIiArIHMKCX0KCXJldHVybiBzWzpsZW4ocyktMl0gKyAiLiIgKyBzW2xlbihzKS0yOl0KfQoKLy8gbWRFc2NhcGUgYmFja3NsYXNoLWVzY2FwZXMgZXZlcnkgQVNDSUkgcHVuY3R1YXRpb24gY2hhcmFjdGVyLCBzbyBhCi8vIG1vbmlrZXIgcmVuZGVycyBhcyBwbGFpbiB0ZXh0IGFuZCBuZXZlciBhcyBhbiBhdXRob3ItY2hvc2VuIGxpbmssIGltYWdlCi8vIG9yIEhUTUwuIGdub3dlYiBzdGlsbCB0dXJucyBhIGcxIGFkZHJlc3MgdGhhdCBmb2xsb3dzIGEgc3BhY2UgaW50byBhIGxpbmsKLy8gdG8gaXRzIC91LyBwYWdlLCB3aXRoIHRoZSBhZGRyZXNzIGl0c2VsZiBhcyB0aGUgbGluayB0ZXh0LgpmdW5jIG1kRXNjYXBlKHMgc3RyaW5nKSBzdHJpbmcgewoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCglmb3IgaSA6PSAwOyBpIDwgbGVuKHMpOyBpKysgewoJCWMgOj0gc1tpXQoJCWlmIGMgPj0gJyEnICYmIGMgPD0gJy8nIHx8IGMgPj0gJzonICYmIGMgPD0gJ0AnIHx8IGMgPj0gJ1snICYmIGMgPD0gJ2AnIHx8IGMgPj0gJ3snICYmIGMgPD0gJ34nIHsKCQkJYi5Xcml0ZUJ5dGUoJ1xcJykKCQl9CgkJYi5Xcml0ZUJ5dGUoYykKCX0KCXJldHVybiBiLlN0cmluZygpCn0KCi8vIFJlbmRlciBzaG93cyB0aGUgbGF0ZXN0IHNlYWxlZCBlZGl0aW9uIGFzIGEgTWFya2Rvd24gdGFibGUuIFRoZSBwYXRoIGlzCi8vIGlnbm9yZWQuCmZ1bmMgUmVuZGVyKF8gc3RyaW5nKSBzdHJpbmcgewoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCgliLldyaXRlU3RyaW5nKCIjIFZhbGlkYXRvciBzZWxlY3Rpb24gc2NvcmVzXG5cbiIpCgllIDo9IGxhdGVzdFNlYWxlZCgpCglpZiBlID09IG5pbCB7CgkJYi5Xcml0ZVN0cmluZygiTm8gZWRpdGlvbiBoYXMgYmVlbiBwdWJsaXNoZWQgeWV0LlxuIikKCQlyZXR1cm4gYi5TdHJpbmcoKQoJfQoJYi5Xcml0ZVN0cmluZygiRWRpdGlvbiAiICsgc3RyY29udi5JdG9hKGUubnVtYmVyKSArICIsIGNvbXB1dGVkIGF0ICIgKyBlLmNvbXB1dGVkQXQgKwoJCSIsIHNjb3JlY2FyZCBTSEEtMjU2IGAiICsgZS5zY29yZWNhcmRTSEEyNTYgKyAiYC4gU2NvcmVzIGhhdmUgdHdvIGRlY2ltYWxzOyBhIHNlYWxlZCBlZGl0aW9uIG5ldmVyIGNoYW5nZXMuXG5cbiIpCgliLldyaXRlU3RyaW5nKCJ8IFJhbmsgfCBNb25pa2VyIHwgT3BlcmF0b3IgfCBUb3RhbCB8IikKCWZvciBfLCBhIDo9IHJhbmdlIGUuYXJlbmFzIHsKCQliLldyaXRlU3RyaW5nKCIgIiArIG1kRXNjYXBlKGEpICsgIiB8IikKCX0KCWIuV3JpdGVTdHJpbmcoIiBHaXRIdWIgfFxufCAtLS06IHwgLS0tIHwgLS0tIHwgLS0tOiB8IikKCWZvciByYW5nZSBlLmFyZW5hcyB7CgkJYi5Xcml0ZVN0cmluZygiIC0tLTogfCIpCgl9CgliLldyaXRlU3RyaW5nKCIgLS0tOiB8XG4iKQoJZm9yIF8sIGMgOj0gcmFuZ2Ugc29ydGVkQ2FuZGlkYXRlcyhlKSB7CgkJYi5Xcml0ZVN0cmluZygifCAiICsgYy5yYW5rVGV4dCArICIgfCAiICsgbWRFc2NhcGUoYy5tb25pa2VyKSArICIgfCAiICsgYy5vcGVyYXRvciArCgkJCSIgfCAiICsgZm9ybWF0SHVuZHJlZHRocyhjLnRvdGFsKSArICIgfCIpCgkJZm9yIF8sIHMgOj0gcmFuZ2Ugc3RyaW5ncy5TcGxpdChjLmFyZW5hU2NvcmVzLCAiLCIpIHsKCQkJYi5Xcml0ZVN0cmluZygiICIgKyBmb3JtYXRIdW5kcmVkdGhzKHMpICsgIiB8IikKCQl9CgkJYi5Xcml0ZVN0cmluZygiICIgKyBmb3JtYXRIdW5kcmVkdGhzKGMuZ2l0aHViKSArICIgfFxuIikKCX0KCWIuV3JpdGVTdHJpbmcoIlxuTWFjaGluZS1yZWFkYWJsZTogYExhdGVzdEpTT04oKWAsIGBFZGl0aW9uSlNPTihuKWAsIGBDYW5kaWRhdGVKU09OKG9wZXJhdG9yKWAuXG4iKQoJcmV0dXJuIGIuU3RyaW5nKCkKfQoayh4KDHZhbGlkYXRlLmdubxK5HnBhY2thZ2UgdmFsaWRhdG9yX3Njb3JlcwoKaW1wb3J0ICgKCSJzdHJjb252IgoJInN0cmluZ3MiCgkidGltZSIKCSJ1bmljb2RlL3V0ZjgiCikKCmNvbnN0ICgKCW1heE1vbmlrZXJCeXRlcyA9IDY0CgltYXhBcmVuYXMgICAgICAgPSAxNgoJbWF4QXJlbmFOYW1lICAgID0gMzIKCW1heFNjb3JlICAgICAgICA9IDEwMDAwIC8vIDEwMC4wMCBpbiBodW5kcmVkdGhzOiB0b3RhbCBhbmQgZWFjaCBhcmVuYSBzY29yZQoJbWF4R2l0aHViICAgICAgID0gMTAwMCAgLy8gMTAuMDAgaW4gaHVuZHJlZHRoczogdGhlIEdpdEh1YiBib251cwoJbWF4UmFuayAgICAgICAgID0gMTAwMDAwCikKCi8vIGlzQ29tcHV0ZWRBdCBhY2NlcHRzIGEgVVRDIGRhdGUgKCIyMDI2LTEwLTEzIikgb3IgYSBVVEMgUkZDIDMzMzkgdGltZQovLyB3aXRob3V0IGZyYWN0aW9uICgiMjAyNi0xMC0xM1QwOTowMDowMFoiKS4KZnVuYyBpc0NvbXB1dGVkQXQocyBzdHJpbmcpIGJvb2wgewoJZm9yIF8sIGxheW91dCA6PSByYW5nZSBbXXN0cmluZ3siMjAwNi0wMS0wMiIsICIyMDA2LTAxLTAyVDE1OjA0OjA1WiJ9IHsKCQlpZiBsZW4ocykgIT0gbGVuKGxheW91dCkgewoJCQljb250aW51ZQoJCX0KCQl0LCBlcnIgOj0gdGltZS5QYXJzZShsYXlvdXQsIHMpCgkJaWYgZXJyID09IG5pbCAmJiB0LkZvcm1hdChsYXlvdXQpID09IHMgewoJCQlyZXR1cm4gdHJ1ZQoJCX0KCX0KCXJldHVybiBmYWxzZQp9CgpmdW5jIGlzU0hBMjU2SGV4KHMgc3RyaW5nKSBib29sIHsKCWlmIGxlbihzKSAhPSA2NCB7CgkJcmV0dXJuIGZhbHNlCgl9Cglmb3IgaSA6PSAwOyBpIDwgbGVuKHMpOyBpKysgewoJCWMgOj0gc1tpXQoJCWlmICEoYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgYyA+PSAnYScgJiYgYyA8PSAnZicpIHsKCQkJcmV0dXJuIGZhbHNlCgkJfQoJfQoJcmV0dXJuIHRydWUKfQoKLy8gcGFyc2VBcmVuYXMgc3BsaXRzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgMSB0byAxNiBkaXN0aW5jdCBuYW1lcyBtYWRlCi8vIG9mIFthLXowLTlfLV0sIGVhY2ggMSB0byAzMiBieXRlcy4KZnVuYyBwYXJzZUFyZW5hcyhzIHN0cmluZykgW11zdHJpbmcgewoJbmFtZXMgOj0gc3RyaW5ncy5TcGxpdChzLCAiLCIpCglpZiBsZW4obmFtZXMpID4gbWF4QXJlbmFzIHsKCQlwYW5pYygidmFsaWRhdG9yX3Njb3JlczogdG9vIG1hbnkgYXJlbmFzIikKCX0KCXNlZW4gOj0gbWFwW3N0cmluZ11ib29se30KCWZvciBfLCBuYW1lIDo9IHJhbmdlIG5hbWVzIHsKCQlpZiBuYW1lID09ICIiIHx8IGxlbihuYW1lKSA+IG1heEFyZW5hTmFtZSB7CgkJCXBhbmljKCJ2YWxpZGF0b3Jfc2NvcmVzOiBpbnZhbGlkIGFyZW5hIG5hbWUiKQoJCX0KCQlmb3IgaSA6PSAwOyBpIDwgbGVuKG5hbWUpOyBpKysgewoJCQljIDo9IG5hbWVbaV0KCQkJaWYgIShjID49ICdhJyAmJiBjIDw9ICd6JyB8fCBjID49ICcwJyAmJiBjIDw9ICc5JyB8fCBjID09ICdfJyB8fCBjID09ICctJykgewoJCQkJcGFuaWMoInZhbGlkYXRvcl9zY29yZXM6IGludmFsaWQgYXJlbmEgbmFtZSIpCgkJCX0KCQl9CgkJaWYgc2VlbltuYW1lXSB7CgkJCXBhbmljKCJ2YWxpZGF0b3Jfc2NvcmVzOiBkdXBsaWNhdGUgYXJlbmEgIiArIG5hbWUpCgkJfQoJCXNlZW5bbmFtZV0gPSB0cnVlCgl9CglyZXR1cm4gbmFtZXMKfQoKLy8gaXNNb25pa2VyIHJlamVjdHMgZW1wdHkgb3Igb3ZlcnNpemVkIG1vbmlrZXJzLCBpbnZhbGlkIFVURi04LCBBU0NJSSBhbmQgQzEKLy8gY29udHJvbCBjaGFyYWN0ZXJzIChVKzAwMDAtVSswMDFGLCBVKzAwN0YsIFUrMDA4MC1VKzAwOUYpLCBiaWRpcmVjdGlvbmFsCi8vIGNvbnRyb2wgY2hhcmFjdGVycyAoVSsyMDJBLVUrMjAyRSwgVSsyMDY2LVUrMjA2OSksIHN1cnJvdW5kaW5nIHNwYWNlcywgYW5kCi8vIHRoZSBzZXBhcmF0b3IgYW5kIGNvbnRhY3QgY2hhcmFjdGVycyAnfCcgYW5kICdAJy4gWmVyby13aWR0aCBhbmQKLy8gZGlyZWN0aW9uYWwgbWFya3MgKFUrMjAwQi1VKzIwMEYpIHN0YXkgYWxsb3dlZDogZW1vamkgbW9uaWtlcnMgdXNlIFUrMjAwRC4KZnVuYyBpc01vbmlrZXIocyBzdHJpbmcpIGJvb2wgewoJaWYgcyA9PSAiIiB8fCBsZW4ocykgPiBtYXhNb25pa2VyQnl0ZXMgfHwgIXV0ZjguVmFsaWRTdHJpbmcocykgfHwgc3RyaW5ncy5UcmltU3BhY2UocykgIT0gcyB7CgkJcmV0dXJuIGZhbHNlCgl9Cglmb3IgXywgciA6PSByYW5nZSBzIHsKCQlpZiByIDwgMHgyMCB8fCAociA+PSAweDdmICYmIHIgPD0gMHg5ZikgfHwgciA9PSAnfCcgfHwgciA9PSAnQCcgfHwKCQkJKHIgPj0gMHgyMDJhICYmIHIgPD0gMHgyMDJlKSB8fCAociA+PSAweDIwNjYgJiYgciA8PSAweDIwNjkpIHsKCQkJcmV0dXJuIGZhbHNlCgkJfQoJfQoJcmV0dXJuIHRydWUKfQoKLy8gcGFyc2VOYXQgcGFyc2VzIGEgY2Fub25pY2FsIG5vbi1uZWdhdGl2ZSBkZWNpbWFsIChubyBzaWduLCBubyBsZWFkaW5nCi8vIHplcm8pIG5vdCBhYm92ZSBtYXguCmZ1bmMgcGFyc2VOYXQocyBzdHJpbmcsIG1heCBpbnQpIChpbnQsIGJvb2wpIHsKCWlmIHMgPT0gIiIgfHwgbGVuKHMpID4gNyB8fCAobGVuKHMpID4gMSAmJiBzWzBdID09ICcwJykgewoJCXJldHVybiAwLCBmYWxzZQoJfQoJZm9yIGkgOj0gMDsgaSA8IGxlbihzKTsgaSsrIHsKCQlpZiBzW2ldIDwgJzAnIHx8IHNbaV0gPiAnOScgewoJCQlyZXR1cm4gMCwgZmFsc2UKCQl9Cgl9CgluLCBlcnIgOj0gc3RyY29udi5BdG9pKHMpCglpZiBlcnIgIT0gbmlsIHx8IG4gPiBtYXggewoJCXJldHVybiAwLCBmYWxzZQoJfQoJcmV0dXJuIG4sIHRydWUKfQoKZnVuYyBsaW5lRXJyb3IobiBpbnQsIG1zZyBzdHJpbmcpIHN0cmluZyB7CglyZXR1cm4gInZhbGlkYXRvcl9zY29yZXM6IGxpbmUgIiArIHN0cmNvbnYuSXRvYShuKSArICI6ICIgKyBtc2cKfQoKLy8gY2hlY2tMaW5lIHZhbGlkYXRlcyAib3BlcmF0b3J8bW9uaWtlcnx0b3RhbHxyYW5rfGdpdGh1YnxzMSwuLi4sc04iIGFuZAovLyByZXR1cm5zIHRoZSBvcGVyYXRvci4gRXZlcnkgbnVtYmVyIG11c3QgYmUgY2Fub25pY2FsLCBzbyBhIHN0b3JlZCBsaW5lCi8vIGNhbiBiZSBjb3BpZWQgaW50byBKU09OIGFzIGlzLgpmdW5jIGNoZWNrTGluZShsaW5lIHN0cmluZywgYXJlbmFDb3VudCwgbiBpbnQpIHN0cmluZyB7CglmIDo9IHN0cmluZ3MuU3BsaXQobGluZSwgInwiKQoJaWYgbGVuKGYpICE9IDYgewoJCXBhbmljKGxpbmVFcnJvcihuLCAiZXhwZWN0ZWQgNiBmaWVsZHMiKSkKCX0KCWlmICFpc0Nhbm9uaWNhbEFkZHJlc3MoZlswXSkgewoJCXBhbmljKGxpbmVFcnJvcihuLCAiaW52YWxpZCBvcGVyYXRvciIpKQoJfQoJaWYgIWlzTW9uaWtlcihmWzFdKSB7CgkJcGFuaWMobGluZUVycm9yKG4sICJpbnZhbGlkIG1vbmlrZXIiKSkKCX0KCWlmIF8sIG9rIDo9IHBhcnNlTmF0KGZbMl0sIG1heFNjb3JlKTsgIW9rIHsKCQlwYW5pYyhsaW5lRXJyb3IobiwgImludmFsaWQgdG90YWwiKSkKCX0KCWlmIHJhbmssIG9rIDo9IHBhcnNlTmF0KGZbM10sIG1heFJhbmspOyAhb2sgfHwgcmFuayA8IDEgewoJCXBhbmljKGxpbmVFcnJvcihuLCAiaW52YWxpZCByYW5rIikpCgl9CglpZiBfLCBvayA6PSBwYXJzZU5hdChmWzRdLCBtYXhHaXRodWIpOyAhb2sgewoJCXBhbmljKGxpbmVFcnJvcihuLCAiaW52YWxpZCBnaXRodWIiKSkKCX0KCXNjb3JlcyA6PSBzdHJpbmdzLlNwbGl0KGZbNV0sICIsIikKCWlmIGxlbihzY29yZXMpICE9IGFyZW5hQ291bnQgewoJCXBhbmljKGxpbmVFcnJvcihuLCAiYXJlbmEgY291bnQgbWlzbWF0Y2giKSkKCX0KCWZvciBfLCB2IDo9IHJhbmdlIHNjb3JlcyB7CgkJaWYgXywgb2sgOj0gcGFyc2VOYXQodiwgbWF4U2NvcmUpOyAhb2sgewoJCQlwYW5pYyhsaW5lRXJyb3IobiwgImludmFsaWQgYXJlbmEgc2NvcmUiKSkKCQl9Cgl9CglyZXR1cm4gZlswXQp9CiIiChMvZ25vLk1lbVBhY2thZ2VUeXBlEgsKCU1QVXNlckFsbCIMNzAwMDAwMHVnbm90EhEIgNClTBIKODAwMDB1Z25vdBqIAwrNAQoSL3RtLlB1YktleU11bHRpc2lnErYBCAISOgoTL3RtLlB1YktleVNlY3AyNTZrMRIjCiEDXU7K848tqANWyscQogEgTFVEXmW3vBUKP59RlEEvX+0SOgoTL3RtLlB1YktleVNlY3AyNTZrMRIjCiEDKOOJ3rhkJhDgSaVn8LeWBXf9fD3IHUtT4nWr6t2RpngSOgoTL3RtLlB1YktleVNlY3AyNTZrMRIjCiEDIOV/XirsLZoGpqv9CvKHp1VH1UALFVlXp85ozdflgQASiwEKBQgDEgGgEkBOLCh2ZuWbfIWFm40gMpsgVQ8r3COZAH0j+Yfop3B43xKPBk72C04Su2MLNy7i4cxmWlpmaIEEhKl/NZWRmaxqEkDjcwRy+qVDDEDphYYR6l3y5dKizELBMjGZ1cxEtqFACWwWUCMzJ9tBw79CNXyap8/YOcO56xUfoEaV1bG2N4yGGihnMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWx1dXhl