{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "hash": "u7X8UEZHQaQOHXG/RJxnzNAAxBkjuJbXyb23SLglr1Y=",
    "height": "609644",
    "index": 0,
    "tx_result": {
      "ResponseBase": {
        "Error": null,
        "Data": null,
        "Events": [
          {
            "@type": "/tm.StorageDepositEvent",
            "bytes_delta": "26462",
            "fee_delta": "2646200ugnot",
            "pkg_path": "gno.land/r/g1ut6uspuh73e02yauxpmyt8g3wwddaq8utagvm3/duebook_demo"
          }
        ],
        "Log": "msg:0,success:true,log:,events:[]",
        "Info": ""
      },
      "GasWanted": "49646830",
      "GasUsed": "33097877"
    },
    "tx": "CoiKAQoML3ZtLm1fYWRkcGtnEvaJAQooZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMxK5iQEKDGR1ZWJvb2tfZGVtbxJAZ25vLmxhbmQvci9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL2R1ZWJvb2tfZGVtbxr8hwEKEGR1ZWJvb2tfZGVtby5nbm8S5ocBLy8gUGFja2FnZSBkdWVib29rX2RlbW8gaXMgdGhlIHJlZmVyZW5jZSBjb25zdW1lciBmb3IgdGhlIGR1ZWJvb2sKLy8gc2NoZWR1bGluZyBwcmltaXRpdmUuIEl0IGV4aXN0cyB0byBtYWtlIGR1ZWJvb2sncyBjZW50cmFsIGNsYWltCi8vIGZhbHNpZmlhYmxlIG9uIGEgbGl2ZSBjaGFpbi4KLy8KLy8gVGhhdCBjbGFpbSBpczogYSBkZWZlcnJhbCBjbGFpbWVkIGluIHRyYW5zYWN0aW9uIE4gaXMgcmVmdXNlZCBpbgovLyB0cmFuc2FjdGlvbiBOKzEsIGZvcmV2ZXIuIEEgcHVyZSBwYWNrYWdlIGNhbm5vdCBkZW1vbnN0cmF0ZSB0aGlzIOKAlCBhCi8vIHZtL3FldmFsIGlzIGEgc2luZ2xlIGVwaGVtZXJhbCBldmFsdWF0aW9uIHdpdGggbm8gc3RhdGUgdGhhdCBzdXJ2aXZlcwovLyBpdC4gT25seSBhIHJlYWxtLCBjYWxsZWQgdHdpY2UsIGNhbiBzaG93IGl0LiBTbyB0aGlzIHJlYWxtIGlzIG5vdCBhCi8vIGRlY29yYXRpb24gb24gdGhlIHByaW1pdGl2ZTsgaXQgaXMgdGhlIGV4cGVyaW1lbnQuCi8vCi8vICMgV2hhdCBpdCBkb2VzCi8vCi8vIEFueW9uZSBzY2hlZHVsZXMgYW4gYW5ub3VuY2VtZW50IHRvIGJlIHB1Ymxpc2hlZCBubyBlYXJsaWVyIHRoYW4KLy8gZGVsYXlCbG9ja3MgZnJvbSBub3cuIE9uY2UgZHVlLCBBTllPTkUgbWF5IHB1Ymxpc2ggaXQg4oCUIHB1YmxpY2F0aW9uIGlzCi8vIGRlbGliZXJhdGVseSBwZXJtaXNzaW9ubGVzcywgc28gdGhhdCB3aGF0IHByb3RlY3RzIHRoZSBhbm5vdW5jZW1lbnQgZnJvbQovLyBiZWluZyBwdWJsaXNoZWQgdHdpY2UgaXMgZHVlYm9vaydzIGV4YWN0bHktb25jZSBDbGFpbSBhbmQgbm90aGluZyBlbHNlLgovLyBJZiBhbiBhY2Nlc3MtY29udHJvbCBsaXN0IHdlcmUgZ3VhcmRpbmcgUHVibGlzaCwgdGhlIGV4cGVyaW1lbnQgd291bGQKLy8gcHJvdmUgbm90aGluZyBhYm91dCBkdWVib29rLgovLwovLyBUaGUgc2NoZWR1bGVyIG1heSBjYW5jZWwgYXQgYW55IHRpbWUgYmVmb3JlIHB1YmxpY2F0aW9uLiBPbmNlIHRoZQovLyBvcHRpb25hbCB0aW1lLXRvLWxpdmUgZWxhcHNlcywgdGhlIGFubm91bmNlbWVudCBjYW4gbmV2ZXIgYmUgcHVibGlzaGVkCi8vIGFuZCBhbnlvbmUgbWF5IGNsZWFyIGl0IHRvIGZyZWUgYSBzbG90LgovLwovLyAjIEhvdyBpdCB3aXJlcyBkdWVib29rIGNvcnJlY3RseQovLwovLyBUaGlzIHJlYWxtIGlzIGFsc28gdGhlIHdvcmtlZCBleGFtcGxlIG9mIGR1ZWJvb2sncyBjb25zdW1lciBjb250cmFjdDoKLy8KLy8gICAtIHRoZSBjbG9jayBpcyBydW50aW1lLkNoYWluSGVpZ2h0KCksIG5ldmVyIGEgY2FsbCBhcmd1bWVudCAoY29udHJhY3QgMSk7Ci8vICAgLSBoZWlnaHRzIGFyZSB0aGUgb25seSB1bml0IHVzZWQgKGNvbnRyYWN0IDIpOwovLyAgIC0gdGhlICpCb29rIGlzIGFuIHVuZXhwb3J0ZWQgcGFja2FnZS1sZXZlbCB2YXIgYW5kIGlzIG5ldmVyIHJldHVybmVkCi8vICAgICBhY3Jvc3MgYSByZWFsbSBib3VuZGFyeSAoY29udHJhY3QgMyk7Ci8vICAgLSB0aGUgb3duZXIgaXMgY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpLCBuZXZlciBhIHBhcmFtZXRlciAoY29udHJhY3QgNCk7Ci8vICAgLSBQdWJsaXNoIHBlcmZvcm1zIGl0cyBlZmZlY3QgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBzdWNjZXNzZnVsIENsYWltLCBpbgovLyAgICAgdGhlIHNhbWUgdHJhbnNhY3Rpb24gKGNvbnRyYWN0IDUpLgovLwovLyBUaGlzIHJlYWxtIGhvbGRzIG5vIGNvaW5zIGFuZCBoYXMgbm8gYWRtaW4uIEV2ZXJ5IGVudHJ5cG9pbnQgcmVqZWN0cwovLyBhdHRhY2hlZCBjb2lucy4KcGFja2FnZSBkdWVib29rX2RlbW8KCmltcG9ydCAoCgkiY2hhaW4iCgkiY2hhaW4vcnVudGltZSIKCSJjaGFpbi9ydW50aW1lL3Vuc2FmZSIKCSJzdHJjb252IgoKCSJnbm8ubGFuZC9wL2cxdXQ2dXNwdWg3M2UwMnlhdXhwbXl0OGczd3dkZGFxOHV0YWd2bTMvZHVlYm9vayIKCSJnbm8ubGFuZC9wL250L2F2bC92MCIKCSJnbm8ubGFuZC9wL250L21hcmtkb3duL3Nhbml0aXplL3YwIgopCgpjb25zdCAoCgkvLyBNaW5EZWxheUJsb2NrcyBpcyB0aGUgZmxvb3Igb24gaG93IGZhciBhaGVhZCBhbiBhbm5vdW5jZW1lbnQgbWF5IGJlCgkvLyBzY2hlZHVsZWQuIE9uZSBibG9jayBpcyBlbm91Z2ggdG8gcHJvdmUgdGhlIGRlbGF5IGlzIGVuZm9yY2VkIHdoaWxlCgkvLyBrZWVwaW5nIHRoZSByZWFsbSBleGVyY2lzYWJsZSBvbiBhIGxpdmUgY2hhaW4uCglNaW5EZWxheUJsb2NrcyA9IGludDY0KDEpCgoJLy8gTWF4RGVsYXlCbG9ja3MgY2FwcyBzY2hlZHVsaW5nIHJvdWdobHkgMTAwIGRheXMgb3V0IGF0IHBlYXJsLTEncwoJLy8gfjMuNDJzIGJsb2Nrcy4gSXQgYWxzbyBib3VuZHMgbm93K2RlbGF5IHdlbGwgaW5zaWRlIGludDY0LgoJTWF4RGVsYXlCbG9ja3MgPSBpbnQ2NCgyXzUwMF8wMDApCgoJLy8gTWF4VFRMQmxvY2tzIGNhcHMgaG93IGxvbmcgYSBkdWUgYW5ub3VuY2VtZW50IHN0YXlzIHB1Ymxpc2hhYmxlLgoJTWF4VFRMQmxvY2tzID0gaW50NjQoMl81MDBfMDAwKQoKCS8vIE1heE9wZW4gY2FwcyBzaW11bHRhbmVvdXNseSBzY2hlZHVsZWQgYW5ub3VuY2VtZW50cywgYm91bmRpbmcgYm90aAoJLy8gc3RvcmFnZSBhbmQgdGhlIGNvc3Qgb2YgdGhlIER1ZS9FeHBpcmFibGUgc2NhbnMuCglNYXhPcGVuID0gMjAwCgoJLy8gTWF4VGV4dExlbiBib3VuZHMgb25lIGFubm91bmNlbWVudC4gSXQgaXMgYSBCWVRFIGxlbmd0aCwgbm90IGEgcnVuZQoJLy8gY291bnQsIGJlY2F1c2UgaXRzIGpvYiBpcyB0byBib3VuZCBzdG9yYWdlOyBhIG11bHRpLWJ5dGUgc2NyaXB0CgkvLyB0aGVyZWZvcmUgZ2V0cyBmZXdlciB0aGFuIDI4MCB2aXNpYmxlIGNoYXJhY3RlcnMuCglNYXhUZXh0TGVuID0gMjgwCgoJLy8gTWF4UHVibGlzaGVkS2VwdCBpcyBob3cgbWFueSByZWNlbnQgcHVibGljYXRpb25zIFJlbmRlciBzaG93cy4gVGhlCgkvLyBwZXJtYW5lbnQgcmVjb3JkIGlzIHRoZSBlbWl0dGVkIGV2ZW50OyB0aGlzIGlzIGEgYm91bmRlZCB3aW5kb3cgc28KCS8vIHJlYWxtIHN0b3JhZ2UgY2Fubm90IGdyb3cgd2l0aG91dCBsaW1pdC4KCU1heFB1Ymxpc2hlZEtlcHQgPSA1MAoKCS8vIE1heExpc3RlZCBjYXBzIGhvdyBtYW55IGVudHJpZXMgYSBzaW5nbGUgcXVlcnkgcmV0dXJucy4KCU1heExpc3RlZCA9IDUwCikKCi8vIGJvb2sgaG9sZHMgdGhlIHNjaGVkdWxlZCBhbm5vdW5jZW1lbnRzLiBJdCBpcyB1bmV4cG9ydGVkIGFuZCBuZXZlcgovLyByZXR1cm5lZDogaGFuZGluZyBhICpCb29rIGFjcm9zcyBhIHJlYWxtIGJvdW5kYXJ5IHdvdWxkIGhhbmQgb3V0IHRoZQovLyByaWdodCB0byBzY2hlZHVsZSwgY2FuY2VsIGFuZCBjbGFpbSAoZHVlYm9vayBjb25zdW1lciBjb250cmFjdCAzKS4KdmFyIGJvb2sgPSBkdWVib29rLk11c3ROZXcoTWluRGVsYXlCbG9ja3MsIE1heERlbGF5QmxvY2tzLCBNYXhPcGVuKQoKLy8gcHVibGljYXRpb24gaXMgb25lIHB1Ymxpc2hlZCBhbm5vdW5jZW1lbnQsIGtlcHQgZm9yIHJlbmRlcmluZy4KdHlwZSBwdWJsaWNhdGlvbiBzdHJ1Y3QgewoJc2VxICAgICAgICAgaW50NjQKCWRlZmVycmFsSUQgIGludDY0CglzY2hlZHVsZXIgICBhZGRyZXNzCglwdWJsaXNoZXIgICBhZGRyZXNzCgl0ZXh0ICAgICAgICBzdHJpbmcKCXNjaGVkdWxlZEF0IGludDY0CglkdWVBdCAgICAgICBpbnQ2NAoJcHVibGlzaGVkQXQgaW50NjQKfQoKdmFyICgKCXB1Ymxpc2hlZCAgICAgID0gYXZsLk5ld1RyZWUoKSAvLyBwYWRkZWQgc2VxIC0+ICpwdWJsaWNhdGlvbgoJcHVibGlzaGVkVG90YWwgaW50NjQgICAgICAgICAgIC8vIGV2ZXJ5IHB1YmxpY2F0aW9uIGV2ZXIsIGluY2x1ZGluZyBldmljdGVkCgluZXh0U2VxICAgICAgICBpbnQ2NCA9IDEKKQoKLy8gcmVqZWN0U3RyYXlTZW5kIGFib3J0cyBpZiBhbiBFT0EgYXR0YWNoZWQgY29pbnMgdG8gYW4gZW50cnlwb2ludCB0aGF0Ci8vIGhhcyBubyB1c2UgZm9yIHRoZW0uIFRoaXMgcmVhbG0gbmV2ZXIgaG9sZHMgdmFsdWU7IHdpdGhvdXQgdGhpcyBndWFyZCBhCi8vIG1pc3R5cGVkIHNlbmQgd291bGQgYmUgc2lsZW50bHkgYWJzb3JiZWQgYnkgdGhlIHJlYWxtIGJhbmsuCmZ1bmMgcmVqZWN0U3RyYXlTZW5kKGN1ciByZWFsbSkgewoJaWYgY3VyLlByZXZpb3VzKCkuSXNVc2VyQ2FsbCgpICYmIGxlbih1bnNhZmUuT3JpZ2luU2VuZCgpKSA+IDAgewoJCXBhbmljKCJ0aGlzIGVudHJ5cG9pbnQgZG9lcyBub3QgYWNjZXB0IGNvaW5zIikKCX0KfQoKLy8gU2NoZWR1bGUgcmVnaXN0ZXJzIGFuIGFubm91bmNlbWVudCB0byBiZSBwdWJsaXNoZWQgbm8gZWFybGllciB0aGFuCi8vIGRlbGF5QmxvY2tzIGZyb20gdGhlIGN1cnJlbnQgaGVpZ2h0LCBhbmQgcmV0dXJucyBpdHMgZGVmZXJyYWwgSUQuCi8vCi8vIHR0bEJsb2NrcyBpcyBob3cgbG9uZyBhZnRlciB0aGUgZHVlIGhlaWdodCB0aGUgYW5ub3VuY2VtZW50IHN0YXlzCi8vIHB1Ymxpc2hhYmxlOyAwIG1lYW5zIGl0IG5ldmVyIGV4cGlyZXMuIFRoZSBjYWxsZXIgYmVjb21lcyB0aGUgb3duZXIgYW5kCi8vIGlzIHRoZSBvbmx5IGFjY291bnQgdGhhdCBtYXkgQ2FuY2VsIGl0LgpmdW5jIFNjaGVkdWxlKGN1ciByZWFsbSwgdGV4dCBzdHJpbmcsIGRlbGF5QmxvY2tzLCB0dGxCbG9ja3MgaW50NjQpIHN0cmluZyB7CglyZWplY3RTdHJheVNlbmQoY3VyKQoKCWlmIHRleHQgPT0gIiIgewoJCXBhbmljKCJhbm5vdW5jZW1lbnQgdGV4dCBtdXN0IG5vdCBiZSBlbXB0eSIpCgl9CglpZiBsZW4odGV4dCkgPiBNYXhUZXh0TGVuIHsKCQlwYW5pYygiYW5ub3VuY2VtZW50IHRleHQgZXhjZWVkcyAiICsgaXRvYShNYXhUZXh0TGVuKSArICIgYnl0ZXMiKQoJfQoJaWYgdHRsQmxvY2tzIDwgMCB8fCB0dGxCbG9ja3MgPiBNYXhUVExCbG9ja3MgewoJCXBhbmljKCJ0dGxCbG9ja3Mgb3V0IG9mIHJhbmdlIFswLCAiICsgaXRvYShNYXhUVExCbG9ja3MpICsgIl0iKQoJfQoKCW93bmVyIDo9IGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKQoJLy8gVGhlIGNsb2NrIGlzIHRoZSBjaGFpbidzLCBuZXZlciBhbiBhcmd1bWVudCAoY29uc3VtZXIgY29udHJhY3QgMSkuCglub3cgOj0gcnVudGltZS5DaGFpbkhlaWdodCgpCgoJLy8gZHVlYm9vayB2YWxpZGF0ZXMgZGVsYXlCbG9ja3MgYWdhaW5zdCB0aGUgYm9vaydzIG93biBib3VuZHMgYW5kCgkvLyByZXR1cm5zIGFuIGVycm9yIHJhdGhlciB0aGFuIHBhbmlja2luZzsgYSByZWFsbSB0dXJucyB0aGF0IGludG8gYW4KCS8vIGFib3J0ZWQgdHJhbnNhY3Rpb24gc28gbm90aGluZyBpcyBoYWxmLWFwcGxpZWQuCglpZCwgZXJyIDo9IGJvb2suU2NoZWR1bGUob3duZXIuU3RyaW5nKCksIHRleHQsIG5vdywgZGVsYXlCbG9ja3MsIHR0bEJsb2NrcykKCWlmIGVyciAhPSBuaWwgewoJCXBhbmljKGVycikKCX0KCglkLCBfIDo9IGJvb2suR2V0KGlkKQoJY2hhaW4uRW1pdCgiU2NoZWR1bGVkIiwKCQkiaWQiLCB1dG9hKGlkKSwKCQkic2NoZWR1bGVyIiwgb3duZXIuU3RyaW5nKCksCgkJImR1ZUF0IiwgaXRvYShkLkR1ZUF0KSwKCQkiZXhwaXJlc0F0IiwgaXRvYShkLkV4cGlyZXNBdCksCgkpCglyZXR1cm4gdXRvYShpZCkKfQoKLy8gUHVibGlzaCBwdWJsaXNoZXMgYSBzY2hlZHVsZWQgYW5ub3VuY2VtZW50IG9uY2UgaXQgaXMgZHVlLiBJdCBpcwovLyBkZWxpYmVyYXRlbHkgcGVybWlzc2lvbmxlc3M6IGR1ZWJvb2sncyBleGFjdGx5LW9uY2UgQ2xhaW0gaXMgdGhlIG9ubHkKLy8gdGhpbmcgcHJldmVudGluZyBhIHNlY29uZCBwdWJsaWNhdGlvbiwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgdGhpcwovLyByZWFsbSBleGlzdHMgdG8gZGVtb25zdHJhdGUuCi8vCi8vIEFib3J0cyBpZiB0aGUgYW5ub3VuY2VtZW50IGRvZXMgbm90IGV4aXN0LCBpcyBub3QgZHVlIHlldCwgaGFzIGV4cGlyZWQsCi8vIG9yIGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQgYnkgYSBwdWJsaWNhdGlvbiBvciBhIGNhbmNlbGxhdGlvbi4KZnVuYyBQdWJsaXNoKGN1ciByZWFsbSwgaWQgaW50NjQpIHN0cmluZyB7CglyZWplY3RTdHJheVNlbmQoY3VyKQoKCWRpZCA6PSBtdXN0SUQoaWQpCglub3cgOj0gcnVudGltZS5DaGFpbkhlaWdodCgpCgoJLy8gQ09OU1VNRSBGSVJTVC4gQ2xhaW0gcmVtb3ZlcyB0aGUgZGVmZXJyYWwgYmVmb3JlIHJldHVybmluZywgc28gYnkKCS8vIHRoZSB0aW1lIHRoZSBlZmZlY3QgYmVsb3cgcnVucywgbm8gc2Vjb25kIENsYWltIG9mIHRoaXMgSUQgY2FuIGV2ZXIKCS8vIHN1Y2NlZWQg4oCUIGluIHRoaXMgdHJhbnNhY3Rpb24gb3IgYW55IGZ1dHVyZSBvbmUuCglkLCBlcnIgOj0gYm9vay5DbGFpbShkaWQsIG5vdykKCWlmIGVyciAhPSBuaWwgewoJCXBhbmljKGVycikKCX0KCgkvLyBFRkZFQ1QgU0VDT05ELCBzYW1lIHRyYW5zYWN0aW9uIChjb25zdW1lciBjb250cmFjdCA1KS4KCXB1Ymxpc2hlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkKCXNlcSA6PSBuZXh0U2VxCgluZXh0U2VxKysKCXB1Ymxpc2hlZFRvdGFsKysKCglwdWJsaXNoZWQuU2V0KHNlcUtleShzZXEpLCAmcHVibGljYXRpb257CgkJc2VxOiAgICAgICAgIHNlcSwKCQlkZWZlcnJhbElEOiAgaW50NjQoZC5JRCksCgkJc2NoZWR1bGVyOiAgIGFkZHJlc3MoZC5Pd25lciksCgkJcHVibGlzaGVyOiAgIHB1Ymxpc2hlciwKCQl0ZXh0OiAgICAgICAgZC5QYXlsb2FkLAoJCXNjaGVkdWxlZEF0OiBkLkNyZWF0ZWRBdCwKCQlkdWVBdDogICAgICAgZC5EdWVBdCwKCQlwdWJsaXNoZWRBdDogbm93LAoJfSkKCWV2aWN0T2xkZXN0KCkKCgljaGFpbi5FbWl0KCJQdWJsaXNoZWQiLAoJCSJpZCIsIHV0b2EoZC5JRCksCgkJInNlcSIsIGl0b2Eoc2VxKSwKCQkic2NoZWR1bGVyIiwgZC5Pd25lciwKCQkicHVibGlzaGVyIiwgcHVibGlzaGVyLlN0cmluZygpLAoJCSJoZWlnaHQiLCBpdG9hKG5vdyksCgkpCglyZXR1cm4gInB1Ymxpc2hlZCAiICsgdXRvYShkLklEKSArICIgYXQgaGVpZ2h0ICIgKyBpdG9hKG5vdykKfQoKLy8gQ2FuY2VsIHdpdGhkcmF3cyBhIHNjaGVkdWxlZCBhbm5vdW5jZW1lbnQgYmVmb3JlIGl0IGlzIHB1Ymxpc2hlZC4gT25seQovLyB0aGUgYWNjb3VudCB0aGF0IHNjaGVkdWxlZCBpdCBtYXkgY2FuY2VsLCBhbmQgb25seSB3aGlsZSBpdCBpcyBzdGlsbAovLyBvcGVuIOKAlCBhIGNhbmNlbGxhdGlvbiB0aGF0IGFycml2ZXMgYWZ0ZXIgcHVibGljYXRpb24gYWJvcnRzLgpmdW5jIENhbmNlbChjdXIgcmVhbG0sIGlkIGludDY0KSBzdHJpbmcgewoJcmVqZWN0U3RyYXlTZW5kKGN1cikKCglkaWQgOj0gbXVzdElEKGlkKQoJY2FsbGVyIDo9IGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKQoKCS8vIE93bmVyc2hpcCBpcyBjaGVja2VkIGJ5IGR1ZWJvb2sgYWdhaW5zdCB0aGUgYWRkcmVzcyB0aGlzIHJlYWxtCgkvLyByZWNvcmRlZCBhdCBTY2hlZHVsZSwgbmV2ZXIgYWdhaW5zdCBhIGNhbGxlci1zdXBwbGllZCBhcmd1bWVudC4KCWQsIGVyciA6PSBib29rLkNhbmNlbChkaWQsIGNhbGxlci5TdHJpbmcoKSkKCWlmIGVyciAhPSBuaWwgewoJCXBhbmljKGVycikKCX0KCgljaGFpbi5FbWl0KCJDYW5jZWxsZWQiLCAiaWQiLCB1dG9hKGQuSUQpLCAic2NoZWR1bGVyIiwgZC5Pd25lcikKCXJldHVybiAiY2FuY2VsbGVkICIgKyB1dG9hKGQuSUQpCn0KCi8vIEV4cGlyZSBjbGVhcnMgYW4gYW5ub3VuY2VtZW50IHdob3NlIHRpbWUtdG8tbGl2ZSBoYXMgZWxhcHNlZCwgZnJlZWluZwovLyBpdHMgc2xvdCBhZ2FpbnN0IE1heE9wZW4uIEl0IGlzIHBlcm1pc3Npb25sZXNzIGJlY2F1c2UgYW4gZXhwaXJlZAovLyBhbm5vdW5jZW1lbnQgY2FuIG5ldmVyIGJlIHB1Ymxpc2hlZCwgc28gdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvCi8vIHByb3RlY3QgYW5kIGV2ZXJ5dGhpbmcgdG8gZ2FpbiBmcm9tIGxldHRpbmcgYW55b25lIHRpZHkgdXAuCmZ1bmMgRXhwaXJlKGN1ciByZWFsbSwgaWQgaW50NjQpIHN0cmluZyB7CglyZWplY3RTdHJheVNlbmQoY3VyKQoKCWRpZCA6PSBtdXN0SUQoaWQpCglub3cgOj0gcnVudGltZS5DaGFpbkhlaWdodCgpCgoJZCwgZXJyIDo9IGJvb2suRXhwaXJlKGRpZCwgbm93KQoJaWYgZXJyICE9IG5pbCB7CgkJcGFuaWMoZXJyKQoJfQoKCWNoYWluLkVtaXQoIkV4cGlyZWQiLCAiaWQiLCB1dG9hKGQuSUQpLCAic2NoZWR1bGVyIiwgZC5Pd25lciwgImhlaWdodCIsIGl0b2Eobm93KSkKCXJldHVybiAiZXhwaXJlZCAiICsgdXRvYShkLklEKQp9CgovLyAtLS0gcmVhZC1vbmx5IHZpZXdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gTm9uZSBvZiB0aGVzZSBhdXRob3JpemUgYW55dGhpbmc6IG9ubHkgUHVibGlzaCdzIHN1Y2Nlc3NmdWwgQ2xhaW0gZG9lcy4KCi8vIEhlaWdodCByZXR1cm5zIHRoZSBjaGFpbiBoZWlnaHQgdGhpcyByZWFsbSBpcyByZWFkaW5nIGFzICJub3ciLgpmdW5jIEhlaWdodCgpIGludDY0IHsgcmV0dXJuIHJ1bnRpbWUuQ2hhaW5IZWlnaHQoKSB9CgovLyBPcGVuQ291bnQgcmV0dXJucyBob3cgbWFueSBhbm5vdW5jZW1lbnRzIGFyZSBjdXJyZW50bHkgc2NoZWR1bGVkLgpmdW5jIE9wZW5Db3VudCgpIGludCB7IHJldHVybiBib29rLk9wZW5Db3VudCgpIH0KCi8vIFB1Ymxpc2hlZFRvdGFsIHJldHVybnMgaG93IG1hbnkgYW5ub3VuY2VtZW50cyBoYXZlIGV2ZXIgYmVlbiBwdWJsaXNoZWQsCi8vIGluY2x1ZGluZyBvbmVzIHNpbmNlIGV2aWN0ZWQgZnJvbSB0aGUgcmVuZGVyZWQgd2luZG93LgpmdW5jIFB1Ymxpc2hlZFRvdGFsKCkgaW50NjQgeyByZXR1cm4gcHVibGlzaGVkVG90YWwgfQoKLy8gTmV4dElEIHJldHVybnMgdGhlIGRlZmVycmFsIElEIHRoZSBuZXh0IFNjaGVkdWxlIHdpbGwgYWxsb2NhdGUuIEl0IG9ubHkKLy8gZXZlciBpbmNyZWFzZXM7IHRoYXQgaXMgd2hhdCBtYWtlcyBhIGNvbnN1bWVkIElEIHBlcm1hbmVudGx5IHVudXNhYmxlLgpmdW5jIE5leHRJRCgpIHN0cmluZyB7IHJldHVybiB1dG9hKGJvb2suTmV4dElEKCkpIH0KCi8vIFN0YXR1cyBkZXNjcmliZXMgYSBzY2hlZHVsZWQgYW5ub3VuY2VtZW50OiBpdHMgd2luZG93LCBhbmQgd2hldGhlciBpdCBpcwovLyBwdWJsaXNoYWJsZSByaWdodCBub3cuIFJldHVybnMgInVua25vd24iIHdoZW4gdGhlIElEIHdhcyBuZXZlciBpc3N1ZWQgb3IKLy8gaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZCDigJQgZHVlYm9vayBrZWVwcyBubyB0b21ic3RvbmUsIHNvIHRob3NlIHR3bwovLyBjYXNlcyBhcmUgaW5kaXN0aW5ndWlzaGFibGUgYnkgZGVzaWduLgpmdW5jIFN0YXR1cyhpZCBpbnQ2NCkgc3RyaW5nIHsKCWlmIGlkIDwgMSB7CgkJcmV0dXJuICJ1bmtub3duIgoJfQoJZCwgb2sgOj0gYm9vay5HZXQodWludDY0KGlkKSkKCWlmICFvayB7CgkJcmV0dXJuICJ1bmtub3duIgoJfQoJbm93IDo9IHJ1bnRpbWUuQ2hhaW5IZWlnaHQoKQoJc3RhdGUgOj0gInBlbmRpbmciCglzd2l0Y2ggewoJY2FzZSBkLklzRXhwaXJlZChub3cpOgoJCXN0YXRlID0gImV4cGlyZWQiCgljYXNlIGQuSXNEdWUobm93KToKCQlzdGF0ZSA9ICJwdWJsaXNoYWJsZSIKCX0KCW91dCA6PSBzdGF0ZSArCgkJIiBzY2hlZHVsZXI9IiArIGQuT3duZXIgKwoJCSIgZHVlQXQ9IiArIGl0b2EoZC5EdWVBdCkgKwoJCSIgbm93PSIgKyBpdG9hKG5vdykKCWlmIGQuRXhwaXJlc0F0ID09IDAgewoJCXJldHVybiBvdXQgKyAiIGV4cGlyZXNBdD1uZXZlciIKCX0KCXJldHVybiBvdXQgKyAiIGV4cGlyZXNBdD0iICsgaXRvYShkLkV4cGlyZXNBdCkKfQoKLy8gRHVlTm93IHJldHVybnMgdGhlIElEcyBvZiBhbm5vdW5jZW1lbnRzIHB1Ymxpc2hhYmxlIGF0IHRoZSBjdXJyZW50Ci8vIGhlaWdodCwgb2xkZXN0IGZpcnN0LCBjYXBwZWQgYXQgTWF4TGlzdGVkLgpmdW5jIER1ZU5vdygpIHN0cmluZyB7CglkcyA6PSBib29rLkR1ZShydW50aW1lLkNoYWluSGVpZ2h0KCksIE1heExpc3RlZCkKCWlmIGxlbihkcykgPT0gMCB7CgkJcmV0dXJuICIiCgl9CglvdXQgOj0gIiIKCWZvciBpLCBkIDo9IHJhbmdlIGRzIHsKCQlpZiBpID4gMCB7CgkJCW91dCArPSAiLCIKCQl9CgkJb3V0ICs9IHV0b2EoZC5JRCkKCX0KCXJldHVybiBvdXQKfQoKLy8gRXhwaXJhYmxlTm93IHJldHVybnMgdGhlIElEcyB0aGF0IEV4cGlyZSB3b3VsZCBhY2NlcHQgYXQgdGhlIGN1cnJlbnQKLy8gaGVpZ2h0LCBvbGRlc3QgZmlyc3QsIGNhcHBlZCBhdCBNYXhMaXN0ZWQuCmZ1bmMgRXhwaXJhYmxlTm93KCkgc3RyaW5nIHsKCWRzIDo9IGJvb2suRXhwaXJhYmxlKHJ1bnRpbWUuQ2hhaW5IZWlnaHQoKSwgTWF4TGlzdGVkKQoJaWYgbGVuKGRzKSA9PSAwIHsKCQlyZXR1cm4gIiIKCX0KCW91dCA6PSAiIgoJZm9yIGksIGQgOj0gcmFuZ2UgZHMgewoJCWlmIGkgPiAwIHsKCQkJb3V0ICs9ICIsIgoJCX0KCQlvdXQgKz0gdXRvYShkLklEKQoJfQoJcmV0dXJuIG91dAp9CgovLyAtLS0gcmVuZGVyaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIHJlYWxtUGF0aCBpcyB0aGlzIHJlYWxtJ3MgZ25vd2ViIHByZWZpeCwgdXNlZCB0byBidWlsZCB2aWV3IGxpbmtzLgpjb25zdCByZWFsbVBhdGggPSAiL3IvZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMy9kdWVib29rX2RlbW8iCgovLyBSZW5kZXIgc2VydmVzIHRocmVlIHZpZXdzLCBzZWxlY3RlZCBieSBwYXRoLiBBbnlvbmUgbWF5IFNjaGVkdWxlLCBzbwovLyB0aGUgZGVmYXVsdCB2aWV3IG11c3Qgbm90IGJlIHNvbWV0aGluZyBhIHN0cmFuZ2VyIGNhbiBpbmZsYXRlOiBpdAovLyBzaG93cyBvbmx5IHdoYXQgaXMgcHVibGlzaGFibGUgcmlnaHQgbm93LCBjYXBwZWQgYXQgTWF4TGlzdGVkLiBUaGUKLy8gZnVsbCBzY2hlZHVsZWQgdGFibGUgbGl2ZXMgYmVoaW5kIDpvcGVuIGFuZCBpcyBjYXBwZWQgdG9vLCBzbyBubyB2aWV3Ci8vIGlzIHVuYm91bmRlZCBhbmQgbm9uZSBvZiB0aGVtIGlzIHRoZSBsYW5kaW5nIHBhZ2UgYnkgZGVmYXVsdC4KLy8KLy8JKGVtcHR5KSAgc3VtbWFyeSArIHB1Ymxpc2hhYmxlIG5vdyArIHJlY2VudCBwdWJsaWNhdGlvbnMKLy8Jb3BlbiAgICAgZXZlcnkgc2NoZWR1bGVkIGFubm91bmNlbWVudCwgdXAgdG8gTWF4TGlzdGVkIHJvd3MKLy8JYWJvdXQgICAgd2hhdCB0aGlzIHJlYWxtIGlzIGFuZCB3aHkgaXQgZXhpc3RzCmZ1bmMgUmVuZGVyKHBhdGggc3RyaW5nKSBzdHJpbmcgewoJc3dpdGNoIG5vcm1hbGl6ZVBhdGgocGF0aCkgewoJY2FzZSAib3BlbiI6CgkJcmV0dXJuIHJlbmRlckhlYWRlcigpICsgcmVuZGVyT3BlbigpCgljYXNlICJhYm91dCI6CgkJcmV0dXJuIHJlbmRlckhlYWRlcigpICsgcmVuZGVyQWJvdXQoKQoJZGVmYXVsdDoKCQlyZXR1cm4gcmVuZGVySGVhZGVyKCkgKyByZW5kZXJEdWUoKSArIHJlbmRlclB1Ymxpc2hlZCgpCgl9Cn0KCmZ1bmMgcmVuZGVySGVhZGVyKCkgc3RyaW5nIHsKCW5vdyA6PSBydW50aW1lLkNoYWluSGVpZ2h0KCkKCXMgOj0gIiMgU2NoZWR1bGVkIGFubm91bmNlbWVudHNcblxuIgoJcyArPSAiUmVmZXJlbmNlIGNvbnN1bWVyIGZvciBbZHVlYm9va10oL3AvZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMy9kdWVib29rKS5cblxuIgoJcyArPSAiLSBoZWlnaHQ6ICIgKyBpdG9hKG5vdykgKyAiXG4iCglzICs9ICItIHNjaGVkdWxlZDogIiArIGl0b2EoaW50NjQoYm9vay5PcGVuQ291bnQoKSkpICsgIiAvICIgKyBpdG9hKGludDY0KE1heE9wZW4pKSArICJcbiIKCXMgKz0gIi0gcHVibGlzaGVkICh0b3RhbCk6ICIgKyBpdG9hKHB1Ymxpc2hlZFRvdGFsKSArICJcbiIKCXMgKz0gIi0gbmV4dCBpZDogIiArIHV0b2EoYm9vay5OZXh0SUQoKSkgKyAiXG5cbiIKCXMgKz0gIltzdW1tYXJ5XSgiICsgcmVhbG1QYXRoICsgIikgwrcgIgoJcyArPSAiW2FsbCBzY2hlZHVsZWRdKCIgKyByZWFsbVBhdGggKyAiOm9wZW4pIMK3ICIKCXMgKz0gIlthYm91dF0oIiArIHJlYWxtUGF0aCArICI6YWJvdXQpXG5cbiIKCXJldHVybiBzCn0KCi8vIHJlbmRlckR1ZSBsaXN0cyBvbmx5IHdoYXQgY2FuIGJlIHB1Ymxpc2hlZCBhdCB0aGlzIGhlaWdodC4gYm9vay5EdWUKLy8gYXBwbGllcyB0aGUgY2FwIGl0c2VsZiwgc28gdGhlIHNsaWNlIGlzIGF0IG1vc3QgTWF4TGlzdGVkIGxvbmcuCmZ1bmMgcmVuZGVyRHVlKCkgc3RyaW5nIHsKCW5vdyA6PSBydW50aW1lLkNoYWluSGVpZ2h0KCkKCWRzIDo9IGJvb2suRHVlKG5vdywgTWF4TGlzdGVkKQoKCXMgOj0gIiMjIFB1Ymxpc2hhYmxlIG5vd1xuXG4iCglpZiBsZW4oZHMpID09IDAgewoJCXMgKz0gIl9ub3RoaW5nIGlzIGR1ZSBhdCBoZWlnaHQgIiArIGl0b2Eobm93KSArICIuX1xuXG4iCgkJcmV0dXJuIHMKCX0KCXMgKz0gcmVuZGVyUm93cyhkcywgbm93KQoJaWYgYm9vay5PcGVuQ291bnQoKSA+IGxlbihkcykgewoJCXMgKz0gIlxuIiArIGl0b2EoaW50NjQoYm9vay5PcGVuQ291bnQoKS1sZW4oZHMpKSkgKwoJCQkiIG1vcmUgc2NoZWR1bGVkIOKAlCBzZWUgW2FsbCBzY2hlZHVsZWRdKCIgKyByZWFsbVBhdGggKyAiOm9wZW4pLlxuIgoJfQoJcmV0dXJuIHMgKyAiXG4iCn0KCi8vIHJlbmRlck9wZW4gbGlzdHMgdGhlIHdob2xlIGJvb2ssIHN0b3BwaW5nIGF0IE1heExpc3RlZCByb3dzIHNvIHRoaXMKLy8gdmlldyBoYXMgYSBmaXhlZCBjZWlsaW5nIGluZGVwZW5kZW50IG9mIE1heE9wZW4uCmZ1bmMgcmVuZGVyT3BlbigpIHN0cmluZyB7Cglub3cgOj0gcnVudGltZS5DaGFpbkhlaWdodCgpCgoJcyA6PSAiIyMgU2NoZWR1bGVkXG5cbiIKCWlmIGJvb2suT3BlbkNvdW50KCkgPT0gMCB7CgkJcmV0dXJuIHMgKyAiX25vbmVfXG5cbiIKCX0KCWRzIDo9IFtdZHVlYm9vay5EZWZlcnJhbHt9Cglib29rLkl0ZXJhdGVPcGVuKGZ1bmMoZCBkdWVib29rLkRlZmVycmFsKSBib29sIHsKCQlkcyA9IGFwcGVuZChkcywgZCkKCQlyZXR1cm4gbGVuKGRzKSA+PSBNYXhMaXN0ZWQKCX0pCglzICs9IHJlbmRlclJvd3MoZHMsIG5vdykKCWlmIGJvb2suT3BlbkNvdW50KCkgPiBsZW4oZHMpIHsKCQlzICs9ICJcblNob3dpbmcgdGhlIGZpcnN0ICIgKyBpdG9hKGludDY0KGxlbihkcykpKSArICIgb2YgIiArCgkJCWl0b2EoaW50NjQoYm9vay5PcGVuQ291bnQoKSkpICsgIi5cbiIKCX0KCXJldHVybiBzICsgIlxuIgp9CgpmdW5jIHJlbmRlclJvd3MoZHMgW11kdWVib29rLkRlZmVycmFsLCBub3cgaW50NjQpIHN0cmluZyB7CglzIDo9ICJ8IGlkIHwgc2NoZWR1bGVyIHwgZHVlIGF0IHwgZXhwaXJlcyB8IHN0YXRlIHxcbiIKCXMgKz0gInwtLS18LS0tfC0tLXwtLS18LS0tfFxuIgoJZm9yIF8sIGQgOj0gcmFuZ2UgZHMgewoJCXN0YXRlIDo9ICJwZW5kaW5nIgoJCXN3aXRjaCB7CgkJY2FzZSBkLklzRXhwaXJlZChub3cpOgoJCQlzdGF0ZSA9ICJleHBpcmVkIgoJCWNhc2UgZC5Jc0R1ZShub3cpOgoJCQlzdGF0ZSA9ICIqKnB1Ymxpc2hhYmxlKioiCgkJfQoJCWV4cCA6PSAibmV2ZXIiCgkJaWYgZC5FeHBpcmVzQXQgIT0gMCB7CgkJCWV4cCA9IGl0b2EoZC5FeHBpcmVzQXQpCgkJfQoJCXMgKz0gInwgIiArIHV0b2EoZC5JRCkgKwoJCQkiIHwgIiArIHNhbml0aXplLklubGluZVRleHQoZC5Pd25lcikgKwoJCQkiIHwgIiArIGl0b2EoZC5EdWVBdCkgKwoJCQkiIHwgIiArIGV4cCArCgkJCSIgfCAiICsgc3RhdGUgKyAiIHxcbiIKCX0KCXJldHVybiBzCn0KCi8vIHJlbmRlclB1Ymxpc2hlZCBzaG93cyB0aGUgcmV0YWluZWQgd2luZG93LCB3aGljaCBldmljdE9sZGVzdCBhbHJlYWR5Ci8vIGhvbGRzIGF0IE1heFB1Ymxpc2hlZEtlcHQgZW50cmllcy4KZnVuYyByZW5kZXJQdWJsaXNoZWQoKSBzdHJpbmcgewoJcyA6PSAiIyMgUHVibGlzaGVkXG5cbiIKCWlmIHB1Ymxpc2hlZC5TaXplKCkgPT0gMCB7CgkJcmV0dXJuIHMgKyAiX25vbmVfXG5cbiIKCX0KCXMgKz0gIk1vc3QgcmVjZW50ICIgKyBpdG9hKGludDY0KE1heFB1Ymxpc2hlZEtlcHQpKSArICIgc2hvd247IHRoZSBmdWxsIHJlY29yZCBpcyBpbiB0aGUgZW1pdHRlZCBldmVudHMuXG5cbiIKCXB1Ymxpc2hlZC5JdGVyYXRlKCIiLCAiIiwgZnVuYyhfIHN0cmluZywgdiBhbnkpIGJvb2wgewoJCXAgOj0gdi4oKnB1YmxpY2F0aW9uKQoJCXMgKz0gIioqIyIgKyBpdG9hKHAuc2VxKSArICIqKiAoZGVmZXJyYWwgIiArIGl0b2EocC5kZWZlcnJhbElEKSArICIpIgoJCXMgKz0gIiBzY2hlZHVsZWQgYXQgIiArIGl0b2EocC5zY2hlZHVsZWRBdCkKCQlzICs9ICIsIGR1ZSAiICsgaXRvYShwLmR1ZUF0KQoJCXMgKz0gIiwgcHVibGlzaGVkICIgKyBpdG9hKHAucHVibGlzaGVkQXQpICsgIlxuXG4iCgkJLy8gQmxvY2txdW90ZSwgbm90IElubGluZVRleHQ6IHRoZSBzbG90IElTIGEgYmxvY2txdW90ZSwgYW5kCgkJLy8gdGhlIGhlbHBlciBtdXN0IGJlIHRoZSBvbmUgd2hvc2UgY29udHJhY3QgY292ZXJzIHRoZSBzbG90LgoJCS8vIElubGluZVRleHQgaGFwcGVucyB0byBmb2xkIG5ld2xpbmVzIHRvZGF5LCB3aGljaCB3b3VsZAoJCS8vIGNvbnRhaW4gdGhlIHBheWxvYWQgYnkgc2lkZSBlZmZlY3Qg4oCUIHJlbHlpbmcgb24gdGhhdCBtYWtlcwoJCS8vIHNhZmV0eSB2ZXJzaW9uLWJvdW5kIHRvIGEgaGVscGVyIHRoYXQgbmV2ZXIgcHJvbWlzZWQgaXQuCgkJLy8gQmxvY2txdW90ZSBlbWl0cyBpdHMgb3duICJcbiIgLi4uICJcblxuIiBlbnZlbG9wZSwgc28gbm8KCQkvLyBtYW51YWwgIj4gIiBwcmVmaXggaGVyZSAodGhlIGhlbHBlcnMgYXJlIG5vdCBpZGVtcG90ZW50KS4KCQlzICs9IHNhbml0aXplLkJsb2NrcXVvdGUocC50ZXh0KQoJCXMgKz0gImJ5ICIgKyBzYW5pdGl6ZS5JbmxpbmVUZXh0KHAuc2NoZWR1bGVyLlN0cmluZygpKQoJCXMgKz0gIiDCtyBwdWJsaXNoZWQgYnkgIiArIHNhbml0aXplLklubGluZVRleHQocC5wdWJsaXNoZXIuU3RyaW5nKCkpICsgIlxuXG4iCgkJcmV0dXJuIGZhbHNlCgl9KQoJcmV0dXJuIHMKfQoKZnVuYyByZW5kZXJBYm91dCgpIHN0cmluZyB7CglyZXR1cm4gIiMjIEFib3V0XG5cbiIgKwoJCSJBbnlvbmUgbWF5IHNjaGVkdWxlIGFuIGFubm91bmNlbWVudCB0byBiZSBwdWJsaXNoZWQgbm8gZWFybGllciB0aGFuICIgKwoJCSJgZGVsYXlCbG9ja3NgIGZyb20gbm93LiBPbmNlIGR1ZSwgKiphbnlvbmUqKiBtYXkgcHVibGlzaCBpdCDigJQgIiArCgkJInB1YmxpY2F0aW9uIGlzIGRlbGliZXJhdGVseSBwZXJtaXNzaW9ubGVzcywgc28gdGhlIG9ubHkgdGhpbmcgIiArCgkJInByZXZlbnRpbmcgYSBzZWNvbmQgcHVibGljYXRpb24gaXMgZHVlYm9vaydzIGV4YWN0bHktb25jZSBgQ2xhaW1gLiAiICsKCQkiVGhhdCBpcyB0aGUgZXhwZXJpbWVudCB0aGlzIHJlYWxtIGV4aXN0cyB0byBydW4uXG5cbiIgKwoJCSJUaGUgc2NoZWR1bGVyIG1heSBjYW5jZWwgYW55IHRpbWUgYmVmb3JlIHB1YmxpY2F0aW9uLiBPbmNlIHRoZSAiICsKCQkib3B0aW9uYWwgdGltZS10by1saXZlIGVsYXBzZXMgdGhlIGFubm91bmNlbWVudCBjYW4gbmV2ZXIgYmUgIiArCgkJInB1Ymxpc2hlZCwgYW5kIGFueW9uZSBtYXkgY2xlYXIgaXQgdG8gZnJlZSBhIHNsb3QuXG5cbiIgKwoJCSJUaGlzIHJlYWxtIGhvbGRzIG5vIGNvaW5zIGFuZCBoYXMgbm8gYWRtaW4uIEV2ZXJ5IGVudHJ5cG9pbnQgIiArCgkJInJlamVjdHMgYXR0YWNoZWQgY29pbnMuXG5cbiIgKwoJCSItIG1pbiAvIG1heCBkZWxheTogIiArIGl0b2EoTWluRGVsYXlCbG9ja3MpICsgIiAvICIgKyBpdG9hKE1heERlbGF5QmxvY2tzKSArICIgYmxvY2tzXG4iICsKCQkiLSBtYXggdGltZS10by1saXZlOiAiICsgaXRvYShNYXhUVExCbG9ja3MpICsgIiBibG9ja3NcbiIgKwoJCSItIG1heCBvcGVuIGF0IG9uY2U6ICIgKyBpdG9hKGludDY0KE1heE9wZW4pKSArICJcbiIgKwoJCSItIG1heCBhbm5vdW5jZW1lbnQgbGVuZ3RoOiAiICsgaXRvYShpbnQ2NChNYXhUZXh0TGVuKSkgKyAiIGJ5dGVzXG4iCn0KCi8vIG5vcm1hbGl6ZVBhdGggcmVkdWNlcyBhIGdub3dlYiByZW5kZXIgcGF0aCB0byBhIGJhcmUgdmlldyBuYW1lLCBzbwovLyAiIiwgIi8iLCAib3BlbiIgYW5kICIvb3Blbi8iIGFsbCBzZWxlY3QgdGhlIHNhbWUgdmlldy4KZnVuYyBub3JtYWxpemVQYXRoKHBhdGggc3RyaW5nKSBzdHJpbmcgewoJZm9yIGxlbihwYXRoKSA+IDAgJiYgcGF0aFswXSA9PSAnLycgewoJCXBhdGggPSBwYXRoWzE6XQoJfQoJZm9yIGxlbihwYXRoKSA+IDAgJiYgcGF0aFtsZW4ocGF0aCktMV0gPT0gJy8nIHsKCQlwYXRoID0gcGF0aFs6bGVuKHBhdGgpLTFdCgl9CglyZXR1cm4gcGF0aAp9CgovLyAtLS0gaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIG11c3RJRCBjb252ZXJ0cyBhbiBleHBvcnRlZCBpbnQ2NCBJRCB0byBkdWVib29rJ3MgdWludDY0IGZvcm0uIElEcyBzdGFydAovLyBhdCAxLCBzbyBhbnl0aGluZyBiZWxvdyB0aGF0IHdhcyBuZXZlciBpc3N1ZWQuCmZ1bmMgbXVzdElEKGlkIGludDY0KSB1aW50NjQgewoJaWYgaWQgPCAxIHsKCQlwYW5pYygiaWQgbXVzdCBiZSBwb3NpdGl2ZSIpCgl9CglyZXR1cm4gdWludDY0KGlkKQp9CgovLyBldmljdE9sZGVzdCB0cmltcyB0aGUgcmVuZGVyZWQgd2luZG93IHRvIE1heFB1Ymxpc2hlZEtlcHQsIGRyb3BwaW5nIHRoZQovLyBsb3dlc3Qgc2VxdWVuY2UgbnVtYmVycyBmaXJzdC4gRXZpY3RlZCBwdWJsaWNhdGlvbnMgcmVtYWluIGluIHRoZQovLyBlbWl0dGVkIGV2ZW50cy4KZnVuYyBldmljdE9sZGVzdCgpIHsKCWZvciBwdWJsaXNoZWQuU2l6ZSgpID4gTWF4UHVibGlzaGVkS2VwdCB7CgkJb2xkZXN0IDo9ICIiCgkJcHVibGlzaGVkLkl0ZXJhdGUoIiIsICIiLCBmdW5jKGtleSBzdHJpbmcsIF8gYW55KSBib29sIHsKCQkJb2xkZXN0ID0ga2V5CgkJCXJldHVybiB0cnVlIC8vIGZpcnN0IGtleSBpbiBhc2NlbmRpbmcgb3JkZXIKCQl9KQoJCWlmIG9sZGVzdCA9PSAiIiB7CgkJCXJldHVybgoJCX0KCQlwdWJsaXNoZWQuUmVtb3ZlKG9sZGVzdCkKCX0KfQoKLy8gc2VxS2V5IGVuY29kZXMgYSBzZXF1ZW5jZSBudW1iZXIgc28gYXZsJ3MgbGV4aWNhbCBvcmRlciBtYXRjaGVzIG51bWVyaWMKLy8gb3JkZXIuIFNlcXVlbmNlcyBhcmUgcG9zaXRpdmUgaW50NjQsIGF0IG1vc3QgMTkgZGlnaXRzLgpmdW5jIHNlcUtleShzZXEgaW50NjQpIHN0cmluZyB7CglzIDo9IHN0cmNvbnYuRm9ybWF0SW50KHNlcSwgMTApCgljb25zdCB3aWR0aCA9IDE5CglpZiBsZW4ocykgPj0gd2lkdGggewoJCXJldHVybiBzCgl9CglyZXR1cm4gIjAwMDAwMDAwMDAwMDAwMDAwMDAiWzp3aWR0aC1sZW4ocyldICsgcwp9CgpmdW5jIGl0b2EobiBpbnQ2NCkgc3RyaW5nICB7IHJldHVybiBzdHJjb252LkZvcm1hdEludChuLCAxMCkgfQpmdW5jIHV0b2EobiB1aW50NjQpIHN0cmluZyB7IHJldHVybiBzdHJjb252LkZvcm1hdFVpbnQobiwgMTApIH0KGmcKC2dub21vZC50b21sElhtb2R1bGUgPSAiZ25vLmxhbmQvci9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL2R1ZWJvb2tfZGVtbyIKZ25vID0gIjAuOSIKIg0xMDAwMDAwMHVnbm90EhEI3LOsLxIKOTkyOTR1Z25vdBqoAQo6ChMvdG0uUHViS2V5U2VjcDI1NmsxEiMKIQIW9DF2ySV4zjQumeJvrSn3/nxG7XBDVv+rkxV/YrsOmBJA0xkHFc2Ch/7OPIZw22LubFZ7dbvBbPu49R0LxclNgJN+NQOxx5D4WD6WuZKzJKTqyPEbtAZKa8HffI9SKFGZJxooZzFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFsdXV4ZQ=="
  }
}