{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "hash": "XNbenoahnL9WM3Y9vyU2IjpVkhK99RI5MEMm5x8bULs=",
    "height": "609571",
    "index": 0,
    "tx_result": {
      "ResponseBase": {
        "Error": null,
        "Data": null,
        "Events": [
          {
            "@type": "/tm.StorageDepositEvent",
            "bytes_delta": "21842",
            "fee_delta": "2184200ugnot",
            "pkg_path": "gno.land/p/g1ut6uspuh73e02yauxpmyt8g3wwddaq8utagvm3/duebook"
          }
        ],
        "Log": "msg:0,success:true,log:,events:[]",
        "Info": ""
      },
      "GasWanted": "43019119",
      "GasUsed": "28679403"
    },
    "tx": "CsiDAQoML3ZtLm1fYWRkcGtnEraDAQooZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMxL5ggEKB2R1ZWJvb2sSO2duby5sYW5kL3AvZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMy9kdWVib29rGsuBAQoLZHVlYm9vay5nbm8SuoEBLy8gUGFja2FnZSBkdWVib29rIGlzIGEgcHVyZSBzY2hlZHVsaW5nIHByaW1pdGl2ZSBmb3IgcmVhbG1zIHRoYXQgbmVlZCB0bwovLyBhdXRob3JpemUgYW4gYWN0aW9uIG5vdyBhbmQgcGVyZm9ybSBpdCBsYXRlci4gSXQgaXMgdG8gKnRpbWUqIHdoYXQKLy8gZmVlbGVkZ2VyIGlzIHRvICptb25leSo6IGl0IGhvbGRzIG5vIGNvaW5zLCBwZXJmb3JtcyBubyBlZmZlY3RzLCBpbXBvcnRzCi8vIG5vIGNoYWluIEFQSXMsIGFuZCBvd25zIG5vIHBhY2thZ2UtbGV2ZWwgc3RhdGUuIFRoZSBpbXBvcnRpbmcgcmVhbG0gb3ducwovLyBhICpCb29rLCBzdXBwbGllcyB0aGUgY2xvY2ssIGFuZCBwZXJmb3JtcyBpdHMgb3duIGVmZmVjdHMuCi8vCi8vICMgVGhlIG9uZSBpZGVhCi8vCi8vIEEgcmVhbG0gZG9lcyBub3QgYXNrIGR1ZWJvb2sgdG8gZXhlY3V0ZSBhbnl0aGluZyDigJQgR25vIGhhcyBubyBhdXRvbm9tb3VzCi8vIGV4ZWN1dGlvbiwgc28gInNjaGVkdWxlZCIgYWx3YXlzIG1lYW5zICJzb21lb25lIHNlbmRzIGEgdHJhbnNhY3Rpb24KLy8gbGF0ZXIiLiBXaGF0IGEgcmVhbG0gYWN0dWFsbHkgbmVlZHMgaXMgZm9yIHRoYXQgbGF0ZXIgdHJhbnNhY3Rpb24gdG8gYmUKLy8gYXV0aG9yaXplZCBleGFjdGx5IG9uY2UuIENsYWltIGlzIHRoYXQgc3RlcDoKLy8KLy8JZCwgZXJyIDo9IGJvb2suQ2xhaW0oaWQsIG5vdykKLy8JaWYgZXJyICE9IG5pbCB7Ci8vCQlwYW5pYyhlcnIpIC8vIG5vdCBkdWUsIGV4cGlyZWQsIGNhbmNlbGxlZCwgb3IgYWxyZWFkeSBjbGFpbWVkCi8vCX0KLy8JLy8gLi4uIHRoZSByZWFsbSBwZXJmb3JtcyBpdHMgb3duIGVmZmVjdCBoZXJlLCB1bmRlciBpdHMgb3duIGF1dGhvcml0eQovLwovLyBDbGFpbSBjaGVja3MgZHVlIC8gbm90LWV4cGlyZWQgLyBzdGlsbC1vcGVuIGFuZCBDT05TVU1FUyB0aGUgZGVmZXJyYWwgaW4KLy8gdGhlIHNhbWUgY2FsbCwgYmVmb3JlIHJldHVybmluZy4gVGhlIHJlYWxtIHRoZW4gYWN0cy4gUmVwbGF5IGlzIG5vdAovLyBndWFyZGVkIGFnYWluc3QsIGl0IGlzIHN0cnVjdHVyYWxseSBpbXBvc3NpYmxlOgovLwovLyAgIC0gSURzIGFyZSBhbGxvY2F0ZWQgbW9ub3RvbmljYWxseSBmcm9tIGFuIGludGVybmFsIGNvdW50ZXIgYW5kIGFyZQovLyAgICAgTkVWRVIgcmV1c2VkLCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBCb29rOwovLyAgIC0gYSBzdWNjZXNzZnVsIENsYWltIHJlbW92ZXMgdGhlIGRlZmVycmFsIGJlZm9yZSByZXR1cm5pbmc7Ci8vCi8vIHNvIGF0IG1vc3Qgb25lIENsYWltIHBlciBJRCBjYW4gZXZlciBzdWNjZWVkLCBhY3Jvc3MgYWxsIHRyYW5zYWN0aW9ucywKLy8gZm9yZXZlci4gQSBzZWNvbmQgQ2xhaW0gb2YgdGhlIHNhbWUgSUQgcmV0dXJucyBFcnJOb3RGb3VuZCB3aGV0aGVyIHRoZQovLyBmaXJzdCBvbmUgaGFwcGVuZWQgaW4gdGhpcyB0cmFuc2FjdGlvbiBvciBhIHllYXIgYWdvLgovLwovLyBCZWNhdXNlIHRoZSByZWFsbSBwZXJmb3JtcyB0aGUgZWZmZWN0IGl0c2VsZiwgbm8gY2xvc3VyZSwgY2FsbGJhY2ssIG9yCi8vIGNhcGFiaWxpdHkgZXZlciBjcm9zc2VzIGEgcmVhbG0gYm91bmRhcnkuIGR1ZWJvb2sgY2Fubm90IGJlIGhhbmRlZCBjb2RlCi8vIHRvIHJ1biwgc28gaXQgY2Fubm90IGJlIHRyaWNrZWQgaW50byBydW5uaW5nIHRoZSB3cm9uZyBjb2RlLgovLwovLyAjIExpZmVjeWNsZQovLwovLyBBIGRlZmVycmFsIGlzIG9wZW4gZnJvbSBTY2hlZHVsZSB1bnRpbCBleGFjdGx5IG9uZSBvZiBDbGFpbSwgQ2FuY2VsLCBvcgovLyBFeHBpcmUgY29uc3VtZXMgaXQuIFRoZXJlIGlzIG5vIG90aGVyIHRyYW5zaXRpb24gYW5kIG5vIHdheSBiYWNrLgovLwovLwlTY2hlZHVsZSDilIDilIA+IG9wZW4g4pSA4pSA4pSs4pSA4pSAIENsYWltICAgKG5vdyA+PSBEdWVBdCwgYmVmb3JlIEV4cGlyZXNBdCkKLy8JICAgICAgICAgICAgICAgICAgICDilJzilIDilIAgQ2FuY2VsICAob3duZXIgb25seSwgYW55IHRpbWUgd2hpbGUgb3BlbikKLy8JICAgICAgICAgICAgICAgICAgICDilJTilIDilIAgRXhwaXJlICAoYW55b25lLCBvbmNlIG5vdyA+PSBFeHBpcmVzQXQpCi8vCi8vIENsYWltYWJpbGl0eSBpcyB0aGUgaGFsZi1vcGVuIGludGVydmFsIFtEdWVBdCwgRXhwaXJlc0F0KTogZHVlIGF0IER1ZUF0LAovLyBubyBsb25nZXIgY2xhaW1hYmxlIGF0IEV4cGlyZXNBdC4gQSBkZWZlcnJhbCBzY2hlZHVsZWQgd2l0aCB0dGwgPT0gMAovLyBuZXZlciBleHBpcmVzIGFuZCBoYXMgRXhwaXJlc0F0ID09IDAuCi8vCi8vICMgU3RhdGUgZ3Jvd3RoCi8vCi8vIENvbnN1bWVkIGRlZmVycmFscyBhcmUgcmVtb3ZlZCwgbm90IGFyY2hpdmVkIOKAlCB0aGUgSUQgY291bnRlciwgbm90IGEKLy8gdG9tYnN0b25lLCBpcyB3aGF0IHByZXZlbnRzIHJlcGxheSwgc28gdGhlcmUgaXMgbm90aGluZyB0byBrZWVwLiBPcGVuCi8vIGRlZmVycmFscyBhcmUgY2FwcGVkIHBlciBCb29rIGF0IGNvbnN0cnVjdGlvbi4gU3RvcmFnZSBpcyB0aGVyZWZvcmUKLy8gYm91bmRlZCBieSBtYXhPcGVuIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgZGVmZXJyYWxzIGhhdmUgZXZlciBleGlzdGVkLgovLyBBdWRpdCBoaXN0b3J5IGJlbG9uZ3MgaW4gdGhlIGNvbnN1bWluZyByZWFsbSdzIGV2ZW50cy4KLy8KLy8gIyBDb25zdW1lciBjb250cmFjdCAodGhlIHBhcnRzIHRoZSBwYWNrYWdlIGNhbm5vdCBlbmZvcmNlKQovLwovLyAgMS4gU1VQUExZIEEgUkVBTCBDTE9DSy4gZHVlYm9vayBjYW5ub3QgdmVyaWZ5IHRoYXQgYG5vd2AgY2FtZSBmcm9tCi8vICAgICBydW50aW1lLkNoYWluSGVpZ2h0KCkgb3IgdGltZS5Ob3coKS5Vbml4KCkuIEEgcmVhbG0gdGhhdCBsZXRzIGEgY2FsbGVyCi8vICAgICBjaG9vc2UgYG5vd2AgaGFzIG5vIGRlbGF5IGF0IGFsbC4gUGFzcyB0aGUgY2hhaW4ncyBjbG9jaywgbmV2ZXIgYQovLyAgICAgdHJhbnNhY3Rpb24gcGFyYW1ldGVyLiBUaGlzIGlzIHRoZSBzaW5nbGUgbW9zdCBpbXBvcnRhbnQgb2JsaWdhdGlvbgovLyAgICAgYW5kIHRoZSBvbmUgbW9zdCBjb21tb25seSBnb3Qgd3JvbmcuCi8vICAyLiBVU0UgT05FIENMT0NLIENPTlNJU1RFTlRMWS4gSGVpZ2h0cyBhbmQgc2Vjb25kcyBtdXN0IG5vdCBiZSBtaXhlZAovLyAgICAgd2l0aGluIGEgQm9vazsgZGVsYXksIHR0bCBhbmQgbm93IGFyZSBhbGwgaW4gdGhlIGNhbGxlcidzIGNob3NlbgovLyAgICAgdW5pdC4KLy8gIDMuIERPIE5PVCBFWFBPUlQgVEhFIEJPT0suIEEgKkJvb2sgaXMgYSBtdXRhYmxlIGhhbmRsZS4gUmV0dXJuaW5nIG9uZQovLyAgICAgYWNyb3NzIGEgcmVhbG0gYm91bmRhcnkgaGFuZHMgb3V0IHRoZSByaWdodCB0byBzY2hlZHVsZSwgY2FuY2VsIGFuZAovLyAgICAgY2xhaW0uIEV4cG9zZSB5b3VyIG93biBjcm9zc2luZyBmdW5jdGlvbnMgaW5zdGVhZDsgdGhpcyBwYWNrYWdlCi8vICAgICByZXR1cm5zIERlZmVycmFsIHZhbHVlcywgbmV2ZXIgcG9pbnRlcnMgaW50byBpdHMgc3RhdGUuCi8vICA0LiBBVVRIT1JJWkUgVEhFIEFDVE9SLiBkdWVib29rIGF1dGhlbnRpY2F0ZXMgbm90aGluZyBidXQgb3duZXJzaGlwIG9uCi8vICAgICBDYW5jZWwuIFdobyBtYXkgU2NoZWR1bGUsIGFuZCB3aG8gbWF5IENsYWltLCBhcmUgdGhlIHJlYWxtJ3MgcG9saWN5IOKAlAovLyAgICAgZGVyaXZlIHRoZSBjYWxsZXIgZnJvbSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCksIG5vdCBmcm9tIGFuIGFyZ3VtZW50LgovLyAgNS4gQUNUIEFGVEVSIEEgU1VDQ0VTU0ZVTCBDTEFJTSwgSU4gVEhFIFNBTUUgVFJBTlNBQ1RJT04uIENsYWltJ3MKLy8gICAgIHJldHVybiB2YWx1ZSBpcyB0aGUgYXV0aG9yaXphdGlvbi4gU3RvcmluZyBpdCB0byBhY3Qgb24gbGF0ZXIKLy8gICAgIHJlaW50cm9kdWNlcyB0aGUgcmVwbGF5IHdpbmRvdyB0aGlzIHBhY2thZ2UgZXhpc3RzIHRvIGNsb3NlLgovLwovLyBBbGwgZmFpbHVyZXMgYXJlIHJldHVybmVkIGFzIGVycm9ycyBhbmQgbGVhdmUgdGhlIEJvb2sgQ09NUExFVEVMWQovLyBVTkNIQU5HRUQuIE11c3QqIHdyYXBwZXJzIGFyZSB0aGUgb25seSBmdW5jdGlvbnMgaGVyZSB0aGF0IHBhbmljLgovLwovLyBUaGUgQm9vayBpcyBhZGRyZXNzLWFnbm9zdGljOiBvd25lcnMgYXJlIG5vbi1lbXB0eSBzdHJpbmdzLiBSZWFsbXMKLy8gbm9ybWFsbHkgdXNlIGFkZHJlc3MuU3RyaW5nKCkuCnBhY2thZ2UgZHVlYm9vawoKaW1wb3J0ICgKCSJlcnJvcnMiCgkic3RyY29udiIKCgkiZ25vLmxhbmQvcC9udC9hdmwvdjAiCikKCi8vIE1heFBheWxvYWRMZW4gYm91bmRzIGEgc2luZ2xlIGRlZmVycmFsJ3MgcGF5bG9hZC4gVGhlIHBheWxvYWQgaXMgb3BhcXVlCi8vIHRvIGR1ZWJvb2sg4oCUIGl0IGV4aXN0cyBzbyBhIHJlYWxtIGNhbiByZWNvdmVyIHdoYXQgaXQgc2NoZWR1bGVkIHdpdGhvdXQKLy8ga2VlcGluZyBhIHBhcmFsbGVsIHRhYmxlLgpjb25zdCBNYXhQYXlsb2FkTGVuID0gNDA5NgoKLy8gTWF4T3BlbkxpbWl0IGlzIHRoZSBsYXJnZXN0IG1heE9wZW4gYSBCb29rIG1heSBiZSBjb25zdHJ1Y3RlZCB3aXRoLiBJdAovLyBib3VuZHMgdGhlIHdvcnN0LWNhc2UgY29zdCBvZiBEdWUgYW5kIEl0ZXJhdGVPcGVuLCB3aGljaCBzY2FuIHRoZSBvcGVuCi8vIHNldC4KY29uc3QgTWF4T3BlbkxpbWl0ID0gMTAwMDAKCi8vIEVycm9ycyByZXR1cm5lZCBieSBCb29rIG9wZXJhdGlvbnMuCnZhciAoCglFcnJFbXB0eU93bmVyICAgID0gZXJyb3JzLk5ldygiZHVlYm9vazogZW1wdHkgb3duZXIga2V5IikKCUVyclBheWxvYWRUb29CaWcgPSBlcnJvcnMuTmV3KCJkdWVib29rOiBwYXlsb2FkIGV4Y2VlZHMgTWF4UGF5bG9hZExlbiIpCglFcnJJbnZhbGlkTm93ICAgID0gZXJyb3JzLk5ldygiZHVlYm9vazogbm93IG11c3QgYmUgbm9uLW5lZ2F0aXZlIikKCUVyckludmFsaWREZWxheSAgPSBlcnJvcnMuTmV3KCJkdWVib29rOiBkZWxheSBvdXRzaWRlIFttaW5EZWxheSwgbWF4RGVsYXldIikKCUVyckludmFsaWRUVEwgICAgPSBlcnJvcnMuTmV3KCJkdWVib29rOiB0dGwgbXVzdCBiZSBub24tbmVnYXRpdmUiKQoJRXJySW52YWxpZENvbmZpZyA9IGVycm9ycy5OZXcoImR1ZWJvb2s6IGludmFsaWQgYm9vayBjb25maWd1cmF0aW9uIikKCUVyckJvb2tGdWxsICAgICAgPSBlcnJvcnMuTmV3KCJkdWVib29rOiBvcGVuIGRlZmVycmFsIGNhcCByZWFjaGVkIikKCUVyck5vdEZvdW5kICAgICAgPSBlcnJvcnMuTmV3KCJkdWVib29rOiBubyBzdWNoIG9wZW4gZGVmZXJyYWwiKQoJRXJyTm90RHVlICAgICAgICA9IGVycm9ycy5OZXcoImR1ZWJvb2s6IG5vdCBkdWUgeWV0IikKCUVyckV4cGlyZWQgICAgICAgPSBlcnJvcnMuTmV3KCJkdWVib29rOiBkZWZlcnJhbCBoYXMgZXhwaXJlZCIpCglFcnJOb3RFeHBpcmVkICAgID0gZXJyb3JzLk5ldygiZHVlYm9vazogZGVmZXJyYWwgaGFzIG5vdCBleHBpcmVkIikKCUVyck5vdE93bmVyICAgICAgPSBlcnJvcnMuTmV3KCJkdWVib29rOiBjYWxsZXIgZG9lcyBub3Qgb3duIHRoaXMgZGVmZXJyYWwiKQoJRXJyT3ZlcmZsb3cgICAgICA9IGVycm9ycy5OZXcoImR1ZWJvb2s6IGludDY0IG92ZXJmbG93IikKCUVycklERXhoYXVzdGVkICAgPSBlcnJvcnMuTmV3KCJkdWVib29rOiBpZGVudGlmaWVyIHNwYWNlIGV4aGF1c3RlZCIpCikKCi8vIERlZmVycmFsIGlzIGEgc2NoZWR1bGVkIGFjdGlvbi4gSXQgaXMgcmV0dXJuZWQgQlkgVkFMVUU6IGhvbGRlcnMgY2Fubm90Ci8vIHJlYWNoIGludG8gYSBCb29rIHRocm91Z2ggaXQuIFBheWxvYWQgaXMgb3BhcXVlIHRvIHRoaXMgcGFja2FnZS4KLy8KLy8gRXhwaXJlc0F0ID09IDAgbWVhbnMgdGhlIGRlZmVycmFsIG5ldmVyIGV4cGlyZXMuIE90aGVyd2lzZSB0aGUgZGVmZXJyYWwKLy8gaXMgY2xhaW1hYmxlIGV4YWN0bHkgb24gW0R1ZUF0LCBFeHBpcmVzQXQpLgp0eXBlIERlZmVycmFsIHN0cnVjdCB7CglJRCAgICAgICAgdWludDY0CglPd25lciAgICAgc3RyaW5nCglQYXlsb2FkICAgc3RyaW5nCglDcmVhdGVkQXQgaW50NjQKCUR1ZUF0ICAgICBpbnQ2NAoJRXhwaXJlc0F0IGludDY0Cn0KCi8vIElzRHVlIHJlcG9ydHMgd2hldGhlciB0aGUgZGVmZXJyYWwgaGFzIHJlYWNoZWQgaXRzIGR1ZSB0aW1lIGF0IG5vdy4KZnVuYyAoZCBEZWZlcnJhbCkgSXNEdWUobm93IGludDY0KSBib29sIHsgcmV0dXJuIG5vdyA+PSBkLkR1ZUF0IH0KCi8vIElzRXhwaXJlZCByZXBvcnRzIHdoZXRoZXIgdGhlIGRlZmVycmFsIGlzIHBhc3QgaXRzIGV4cGlyeSBhdCBub3cuCi8vIEEgZGVmZXJyYWwgd2l0aCBubyBleHBpcnkgaXMgbmV2ZXIgZXhwaXJlZC4KZnVuYyAoZCBEZWZlcnJhbCkgSXNFeHBpcmVkKG5vdyBpbnQ2NCkgYm9vbCB7CglyZXR1cm4gZC5FeHBpcmVzQXQgIT0gMCAmJiBub3cgPj0gZC5FeHBpcmVzQXQKfQoKLy8gSXNDbGFpbWFibGUgcmVwb3J0cyB3aGV0aGVyIENsYWltIHdvdWxkIHN1Y2NlZWQgYXQgbm93LCBhc3N1bWluZyB0aGUKLy8gZGVmZXJyYWwgaXMgc3RpbGwgb3Blbi4KZnVuYyAoZCBEZWZlcnJhbCkgSXNDbGFpbWFibGUobm93IGludDY0KSBib29sIHsKCXJldHVybiBkLklzRHVlKG5vdykgJiYgIWQuSXNFeHBpcmVkKG5vdykKfQoKLy8gQm9vayBob2xkcyB0aGUgb3BlbiBkZWZlcnJhbHMgb2Ygb25lIGNvbnN1bWluZyByZWFsbS4gVGhlIHplcm8gdmFsdWUgaXMKLy8gbm90IHVzYWJsZTsgY29uc3RydWN0IHdpdGggTmV3Lgp0eXBlIEJvb2sgc3RydWN0IHsKCW1pbkRlbGF5IGludDY0CgltYXhEZWxheSBpbnQ2NAoJbWF4T3BlbiAgaW50CgluZXh0SUQgICB1aW50NjQgICAgLy8gbmV2ZXIgZGVjcmVhc2VzOyBJRHMgYXJlIG5ldmVyIHJldXNlZAoJb3BlbiAgICAgKmF2bC5UcmVlIC8vIHBhZGRlZCBpZCAtPiBEZWZlcnJhbAp9CgovLyBOZXcgcmV0dXJucyBhbiBlbXB0eSBCb29rLgovLwovLyBtaW5EZWxheSBpcyB0aGUgZmxvb3Igb24gaG93IGZhciBhaGVhZCBhIGRlZmVycmFsIG1heSBiZSBzY2hlZHVsZWQ7IDAKLy8gcGVybWl0cyBzYW1lLWluc3RhbnQgc2NoZWR1bGluZy4gbWF4RGVsYXkgaXMgdGhlIGNlaWxpbmcsIGFuZCBkb3VibGVzIGFzCi8vIHRoZSBvdmVyZmxvdyBndWFyZCBvbiBub3crZGVsYXkuIG1heE9wZW4gY2FwcyBzaW11bHRhbmVvdXNseSBvcGVuCi8vIGRlZmVycmFscyBhbmQgbXVzdCBiZSBpbiBbMSwgTWF4T3BlbkxpbWl0XS4KLy8KLy8gVW5pdHMgYXJlIHRoZSBjYWxsZXIncyBjaG9pY2Ug4oCUIGJsb2NrIGhlaWdodHMgb3Igc2Vjb25kcyDigJQgYnV0IG11c3QgYmUKLy8gdXNlZCBjb25zaXN0ZW50bHkgZm9yIHRoZSBsaWZlIG9mIHRoZSBCb29rLgpmdW5jIE5ldyhtaW5EZWxheSwgbWF4RGVsYXkgaW50NjQsIG1heE9wZW4gaW50KSAoKkJvb2ssIGVycm9yKSB7CglpZiBtaW5EZWxheSA8IDAgfHwgbWF4RGVsYXkgPCBtaW5EZWxheSB7CgkJcmV0dXJuIG5pbCwgRXJySW52YWxpZENvbmZpZwoJfQoJaWYgbWF4T3BlbiA8IDEgfHwgbWF4T3BlbiA+IE1heE9wZW5MaW1pdCB7CgkJcmV0dXJuIG5pbCwgRXJySW52YWxpZENvbmZpZwoJfQoJcmV0dXJuICZCb29rewoJCW1pbkRlbGF5OiBtaW5EZWxheSwKCQltYXhEZWxheTogbWF4RGVsYXksCgkJbWF4T3BlbjogIG1heE9wZW4sCgkJbmV4dElEOiAgIDEsCgkJb3BlbjogICAgIGF2bC5OZXdUcmVlKCksCgl9LCBuaWwKfQoKLy8gTXVzdE5ldyBpcyBOZXcgYnV0IHBhbmljcyBvbiBlcnJvci4KZnVuYyBNdXN0TmV3KG1pbkRlbGF5LCBtYXhEZWxheSBpbnQ2NCwgbWF4T3BlbiBpbnQpICpCb29rIHsKCWIsIGVyciA6PSBOZXcobWluRGVsYXksIG1heERlbGF5LCBtYXhPcGVuKQoJaWYgZXJyICE9IG5pbCB7CgkJcGFuaWMoZXJyKQoJfQoJcmV0dXJuIGIKfQoKLy8gTWluRGVsYXkgcmV0dXJucyB0aGUgQm9vaydzIHNjaGVkdWxpbmcgZmxvb3IuCmZ1bmMgKGIgKkJvb2spIE1pbkRlbGF5KCkgaW50NjQgeyByZXR1cm4gYi5taW5EZWxheSB9CgovLyBNYXhEZWxheSByZXR1cm5zIHRoZSBCb29rJ3Mgc2NoZWR1bGluZyBjZWlsaW5nLgpmdW5jIChiICpCb29rKSBNYXhEZWxheSgpIGludDY0IHsgcmV0dXJuIGIubWF4RGVsYXkgfQoKLy8gTWF4T3BlbiByZXR1cm5zIHRoZSBCb29rJ3MgY2FwIG9uIHNpbXVsdGFuZW91c2x5IG9wZW4gZGVmZXJyYWxzLgpmdW5jIChiICpCb29rKSBNYXhPcGVuKCkgaW50IHsgcmV0dXJuIGIubWF4T3BlbiB9CgovLyBPcGVuQ291bnQgcmV0dXJucyBob3cgbWFueSBkZWZlcnJhbHMgYXJlIGN1cnJlbnRseSBvcGVuLgpmdW5jIChiICpCb29rKSBPcGVuQ291bnQoKSBpbnQgeyByZXR1cm4gYi5vcGVuLlNpemUoKSB9CgovLyBOZXh0SUQgcmV0dXJucyB0aGUgaWRlbnRpZmllciB0aGUgbmV4dCBTY2hlZHVsZSB3aWxsIGFsbG9jYXRlLiBJdCBvbmx5Ci8vIGV2ZXIgaW5jcmVhc2VzLCB3aGljaCBpcyB3aGF0IG1ha2VzIGEgY29uc3VtZWQgSUQgdW5yZXVzYWJsZS4KZnVuYyAoYiAqQm9vaykgTmV4dElEKCkgdWludDY0IHsgcmV0dXJuIGIubmV4dElEIH0KCi8vIFNjaGVkdWxlIG9wZW5zIGEgZGVmZXJyYWwgb3duZWQgYnkgb3duZXIsIGR1ZSBhdCBub3crZGVsYXksIGV4cGlyaW5nCi8vIHR0bCBhZnRlciB0aGF0ICh0dGwgPT0gMCBtZWFucyBpdCBuZXZlciBleHBpcmVzKS4gSXQgcmV0dXJucyB0aGUgbmV3Ci8vIGRlZmVycmFsJ3MgSUQuCi8vCi8vIEZhaWxzIHdpdGggRXJyRW1wdHlPd25lciwgRXJyUGF5bG9hZFRvb0JpZywgRXJySW52YWxpZE5vdyAobm93IDwgMCksCi8vIEVyckludmFsaWREZWxheSAoZGVsYXkgb3V0c2lkZSBbTWluRGVsYXksIE1heERlbGF5XSksIEVyckludmFsaWRUVEwKLy8gKHR0bCA8IDApLCBFcnJCb29rRnVsbCwgRXJyT3ZlcmZsb3csIG9yIEVycklERXhoYXVzdGVkLiBPbiBlcnJvcgovLyBub3RoaW5nIGlzIG1vZGlmaWVkLgpmdW5jIChiICpCb29rKSBTY2hlZHVsZShvd25lciwgcGF5bG9hZCBzdHJpbmcsIG5vdywgZGVsYXksIHR0bCBpbnQ2NCkgKHVpbnQ2NCwgZXJyb3IpIHsKCWlmIG93bmVyID09ICIiIHsKCQlyZXR1cm4gMCwgRXJyRW1wdHlPd25lcgoJfQoJaWYgbGVuKHBheWxvYWQpID4gTWF4UGF5bG9hZExlbiB7CgkJcmV0dXJuIDAsIEVyclBheWxvYWRUb29CaWcKCX0KCWlmIG5vdyA8IDAgewoJCXJldHVybiAwLCBFcnJJbnZhbGlkTm93Cgl9CglpZiBkZWxheSA8IGIubWluRGVsYXkgfHwgZGVsYXkgPiBiLm1heERlbGF5IHsKCQlyZXR1cm4gMCwgRXJySW52YWxpZERlbGF5Cgl9CglpZiB0dGwgPCAwIHsKCQlyZXR1cm4gMCwgRXJySW52YWxpZFRUTAoJfQoJaWYgYi5vcGVuLlNpemUoKSA+PSBiLm1heE9wZW4gewoJCXJldHVybiAwLCBFcnJCb29rRnVsbAoJfQoJaWYgYi5uZXh0SUQgPT0gMCB7CgkJcmV0dXJuIDAsIEVycklERXhoYXVzdGVkCgl9CgoJZHVlQXQsIG9rIDo9IGNoZWNrZWRBZGQobm93LCBkZWxheSkKCWlmICFvayB7CgkJcmV0dXJuIDAsIEVyck92ZXJmbG93Cgl9CglleHBpcmVzQXQgOj0gaW50NjQoMCkKCWlmIHR0bCA+IDAgewoJCWV4cGlyZXNBdCwgb2sgPSBjaGVja2VkQWRkKGR1ZUF0LCB0dGwpCgkJaWYgIW9rIHsKCQkJcmV0dXJuIDAsIEVyck92ZXJmbG93CgkJfQoJfQoKCWlkIDo9IGIubmV4dElECgliLm5leHRJRCsrCgliLm9wZW4uU2V0KGlkS2V5KGlkKSwgRGVmZXJyYWx7CgkJSUQ6ICAgICAgICBpZCwKCQlPd25lcjogICAgIG93bmVyLAoJCVBheWxvYWQ6ICAgcGF5bG9hZCwKCQlDcmVhdGVkQXQ6IG5vdywKCQlEdWVBdDogICAgIGR1ZUF0LAoJCUV4cGlyZXNBdDogZXhwaXJlc0F0LAoJfSkKCXJldHVybiBpZCwgbmlsCn0KCi8vIE11c3RTY2hlZHVsZSBpcyBTY2hlZHVsZSBidXQgcGFuaWNzIG9uIGVycm9yLgpmdW5jIChiICpCb29rKSBNdXN0U2NoZWR1bGUob3duZXIsIHBheWxvYWQgc3RyaW5nLCBub3csIGRlbGF5LCB0dGwgaW50NjQpIHVpbnQ2NCB7CglpZCwgZXJyIDo9IGIuU2NoZWR1bGUob3duZXIsIHBheWxvYWQsIG5vdywgZGVsYXksIHR0bCkKCWlmIGVyciAhPSBuaWwgewoJCXBhbmljKGVycikKCX0KCXJldHVybiBpZAp9CgovLyBDbGFpbSBjb25zdW1lcyB0aGUgZGVmZXJyYWwgYW5kIHJldHVybnMgaXQsIGF1dGhvcml6aW5nIHRoZSBjYWxsZXIgdG8KLy8gcGVyZm9ybSB0aGUgZGVmZXJyZWQgYWN0aW9uIE5PVywgaW4gdGhpcyB0cmFuc2FjdGlvbi4KLy8KLy8gSXQgc3VjY2VlZHMgb25seSB3aGlsZSB0aGUgZGVmZXJyYWwgaXMgb3BlbiBhbmQgbm93IGlzIGluCi8vIFtEdWVBdCwgRXhwaXJlc0F0KS4gVGhlIGRlZmVycmFsIGlzIHJlbW92ZWQgQkVGT1JFIENsYWltIHJldHVybnMsIHNvIGEKLy8gcmUtZW50cmFudCBvciBsYXRlciBDbGFpbSBvZiB0aGUgc2FtZSBJRCBmaW5kcyBub3RoaW5nOyBjb21iaW5lZCB3aXRoCi8vIG5vbi1yZXVzZWQgSURzLCBhdCBtb3N0IG9uZSBDbGFpbSBwZXIgSUQgZXZlciBzdWNjZWVkcy4KLy8KLy8gRmFpbHMgd2l0aCBFcnJJbnZhbGlkTm93LCBFcnJOb3RGb3VuZCAobmV2ZXIgZXhpc3RlZCwgb3IgYWxyZWFkeQovLyBjb25zdW1lZCBieSBDbGFpbS9DYW5jZWwvRXhwaXJlKSwgRXJyTm90RHVlLCBvciBFcnJFeHBpcmVkLiBPbiBlcnJvcgovLyBub3RoaW5nIGlzIG1vZGlmaWVkLgovLwovLyBkdWVib29rIGRvZXMgTk9UIGNoZWNrIHdobyBpcyBjbGFpbWluZzogd2hldGhlciBhIGRlZmVycmFsIGlzCi8vIHBlcm1pc3Npb25sZXNzbHkgY2xhaW1hYmxlIG9yIHJlc3RyaWN0ZWQgdG8gaXRzIG93bmVyIGlzIHRoZSBjb25zdW1pbmcKLy8gcmVhbG0ncyBwb2xpY3ksIGFwcGxpZWQgYmVmb3JlIGNhbGxpbmcgQ2xhaW0uCmZ1bmMgKGIgKkJvb2spIENsYWltKGlkIHVpbnQ2NCwgbm93IGludDY0KSAoRGVmZXJyYWwsIGVycm9yKSB7CglpZiBub3cgPCAwIHsKCQlyZXR1cm4gRGVmZXJyYWx7fSwgRXJySW52YWxpZE5vdwoJfQoJZCwgb2sgOj0gYi5nZXQoaWQpCglpZiAhb2sgewoJCXJldHVybiBEZWZlcnJhbHt9LCBFcnJOb3RGb3VuZAoJfQoJaWYgIWQuSXNEdWUobm93KSB7CgkJcmV0dXJuIERlZmVycmFse30sIEVyck5vdER1ZQoJfQoJaWYgZC5Jc0V4cGlyZWQobm93KSB7CgkJcmV0dXJuIERlZmVycmFse30sIEVyckV4cGlyZWQKCX0KCS8vIENvbnN1bWUgYmVmb3JlIHJldHVybmluZzogdGhlIGNhbGxlciBhY3RzIG9ubHkgYWZ0ZXIgdGhpcyBwb2ludCwgc28KCS8vIHRoZSBkZWZlcnJhbCBpcyBhbHJlYWR5IGdvbmUgd2hlbiB0aGUgZWZmZWN0IHJ1bnMuCgliLm9wZW4uUmVtb3ZlKGlkS2V5KGlkKSkKCXJldHVybiBkLCBuaWwKfQoKLy8gTXVzdENsYWltIGlzIENsYWltIGJ1dCBwYW5pY3Mgb24gZXJyb3IuCmZ1bmMgKGIgKkJvb2spIE11c3RDbGFpbShpZCB1aW50NjQsIG5vdyBpbnQ2NCkgRGVmZXJyYWwgewoJZCwgZXJyIDo9IGIuQ2xhaW0oaWQsIG5vdykKCWlmIGVyciAhPSBuaWwgewoJCXBhbmljKGVycikKCX0KCXJldHVybiBkCn0KCi8vIENhbmNlbCBjb25zdW1lcyBhbiBvcGVuIGRlZmVycmFsIHdpdGhvdXQgcGVyZm9ybWluZyBpdC4gT25seSBpdHMgb3duZXIKLy8gbWF5IGNhbmNlbCwgYW5kIGNhbmNlbGxhdGlvbiBpcyBwZXJtaXR0ZWQgYXQgYW55IHRpbWUgd2hpbGUgdGhlIGRlZmVycmFsCi8vIGlzIG9wZW4g4oCUIGluY2x1ZGluZyBhZnRlciBpdCBiZWNhbWUgZHVlIGJ1dCBiZWZvcmUgYW55b25lIGNsYWltZWQgaXQuCi8vCi8vIEZhaWxzIHdpdGggRXJyRW1wdHlPd25lciwgRXJyTm90Rm91bmQsIG9yIEVyck5vdE93bmVyLiBPbiBlcnJvciBub3RoaW5nCi8vIGlzIG1vZGlmaWVkLgpmdW5jIChiICpCb29rKSBDYW5jZWwoaWQgdWludDY0LCBvd25lciBzdHJpbmcpIChEZWZlcnJhbCwgZXJyb3IpIHsKCWlmIG93bmVyID09ICIiIHsKCQlyZXR1cm4gRGVmZXJyYWx7fSwgRXJyRW1wdHlPd25lcgoJfQoJZCwgb2sgOj0gYi5nZXQoaWQpCglpZiAhb2sgewoJCXJldHVybiBEZWZlcnJhbHt9LCBFcnJOb3RGb3VuZAoJfQoJaWYgZC5Pd25lciAhPSBvd25lciB7CgkJcmV0dXJuIERlZmVycmFse30sIEVyck5vdE93bmVyCgl9CgliLm9wZW4uUmVtb3ZlKGlkS2V5KGlkKSkKCXJldHVybiBkLCBuaWwKfQoKLy8gTXVzdENhbmNlbCBpcyBDYW5jZWwgYnV0IHBhbmljcyBvbiBlcnJvci4KZnVuYyAoYiAqQm9vaykgTXVzdENhbmNlbChpZCB1aW50NjQsIG93bmVyIHN0cmluZykgRGVmZXJyYWwgewoJZCwgZXJyIDo9IGIuQ2FuY2VsKGlkLCBvd25lcikKCWlmIGVyciAhPSBuaWwgewoJCXBhbmljKGVycikKCX0KCXJldHVybiBkCn0KCi8vIEV4cGlyZSBjb25zdW1lcyBhIGRlZmVycmFsIHRoYXQgaXMgcGFzdCBpdHMgZXhwaXJ5LCByZWNsYWltaW5nIGl0cwovLyBzdG9yYWdlLiBJdCBpcyBkZWxpYmVyYXRlbHkgcGVybWlzc2lvbmxlc3M6IGFuIGV4cGlyZWQgZGVmZXJyYWwgY2FuCi8vIG5ldmVyIGJlIGNsYWltZWQgYWdhaW4sIHNvIGxldHRpbmcgYW55b25lIGNsZWFyIGl0IGtlZXBzIGEgQm9vayBmcm9tCi8vIHNpbHRpbmcgdXAgd2l0aCBkZWFkIGVudHJpZXMgdGhhdCBibG9jayBTY2hlZHVsZSBhZ2FpbnN0IG1heE9wZW4uCi8vCi8vIEZhaWxzIHdpdGggRXJySW52YWxpZE5vdywgRXJyTm90Rm91bmQsIG9yIEVyck5vdEV4cGlyZWQgKGluY2x1ZGluZyBmb3IKLy8gZGVmZXJyYWxzIHdpdGggbm8gZXhwaXJ5LCB3aGljaCBuZXZlciBleHBpcmUpLiBPbiBlcnJvciBub3RoaW5nIGlzCi8vIG1vZGlmaWVkLgpmdW5jIChiICpCb29rKSBFeHBpcmUoaWQgdWludDY0LCBub3cgaW50NjQpIChEZWZlcnJhbCwgZXJyb3IpIHsKCWlmIG5vdyA8IDAgewoJCXJldHVybiBEZWZlcnJhbHt9LCBFcnJJbnZhbGlkTm93Cgl9CglkLCBvayA6PSBiLmdldChpZCkKCWlmICFvayB7CgkJcmV0dXJuIERlZmVycmFse30sIEVyck5vdEZvdW5kCgl9CglpZiAhZC5Jc0V4cGlyZWQobm93KSB7CgkJcmV0dXJuIERlZmVycmFse30sIEVyck5vdEV4cGlyZWQKCX0KCWIub3Blbi5SZW1vdmUoaWRLZXkoaWQpKQoJcmV0dXJuIGQsIG5pbAp9CgovLyBNdXN0RXhwaXJlIGlzIEV4cGlyZSBidXQgcGFuaWNzIG9uIGVycm9yLgpmdW5jIChiICpCb29rKSBNdXN0RXhwaXJlKGlkIHVpbnQ2NCwgbm93IGludDY0KSBEZWZlcnJhbCB7CglkLCBlcnIgOj0gYi5FeHBpcmUoaWQsIG5vdykKCWlmIGVyciAhPSBuaWwgewoJCXBhbmljKGVycikKCX0KCXJldHVybiBkCn0KCi8vIEdldCByZXR1cm5zIGFuIG9wZW4gZGVmZXJyYWwgYnkgSUQuIFRoZSBzZWNvbmQgcmVzdWx0IGlzIGZhbHNlIGlmIHRoZQovLyBkZWZlcnJhbCBuZXZlciBleGlzdGVkIG9yIGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQg4oCUIEdldCBjYW5ub3QgdGVsbAovLyB0aG9zZSBhcGFydCwgYnkgZGVzaWduOiBjb25zdW1lZCBkZWZlcnJhbHMgbGVhdmUgbm8gdG9tYnN0b25lLgovLwovLyBHZXQgaXMgYSByZWFkLW9ubHkgcHJldmlldyBhbmQgbmV2ZXIgYXV0aG9yaXplcyBhbnl0aGluZy4gT25seSBDbGFpbSdzCi8vIHJldHVybiB2YWx1ZSBhdXRob3JpemVzIGFuIGFjdGlvbi4KZnVuYyAoYiAqQm9vaykgR2V0KGlkIHVpbnQ2NCkgKERlZmVycmFsLCBib29sKSB7IHJldHVybiBiLmdldChpZCkgfQoKLy8gRHVlIHJldHVybnMgdXAgdG8gbGltaXQgb3BlbiBkZWZlcnJhbHMgdGhhdCBhcmUgY2xhaW1hYmxlIGF0IG5vdywgaW4KLy8gYXNjZW5kaW5nIElEIG9yZGVyIChvbGRlc3QgZmlyc3QpLiBBIGxpbWl0IDw9IDAgcmV0dXJucyBub3RoaW5nLgovLwovLyBJdCBzY2FucyB0aGUgb3BlbiBzZXQsIHNvIGl0cyBjb3N0IGlzIGJvdW5kZWQgYnkgTWF4T3Blbi4KZnVuYyAoYiAqQm9vaykgRHVlKG5vdyBpbnQ2NCwgbGltaXQgaW50KSBbXURlZmVycmFsIHsKCW91dCA6PSBbXURlZmVycmFse30KCWlmIGxpbWl0IDw9IDAgfHwgbm93IDwgMCB7CgkJcmV0dXJuIG91dAoJfQoJYi5vcGVuLkl0ZXJhdGUoIiIsICIiLCBmdW5jKF8gc3RyaW5nLCB2YWx1ZSBhbnkpIGJvb2wgewoJCWQgOj0gdmFsdWUuKERlZmVycmFsKQoJCWlmIGQuSXNDbGFpbWFibGUobm93KSB7CgkJCW91dCA9IGFwcGVuZChvdXQsIGQpCgkJfQoJCXJldHVybiBsZW4ob3V0KSA+PSBsaW1pdAoJfSkKCXJldHVybiBvdXQKfQoKLy8gRXhwaXJhYmxlIHJldHVybnMgdXAgdG8gbGltaXQgb3BlbiBkZWZlcnJhbHMgdGhhdCBFeHBpcmUgd291bGQgYWNjZXB0IGF0Ci8vIG5vdywgaW4gYXNjZW5kaW5nIElEIG9yZGVyLiBBIGxpbWl0IDw9IDAgcmV0dXJucyBub3RoaW5nLgpmdW5jIChiICpCb29rKSBFeHBpcmFibGUobm93IGludDY0LCBsaW1pdCBpbnQpIFtdRGVmZXJyYWwgewoJb3V0IDo9IFtdRGVmZXJyYWx7fQoJaWYgbGltaXQgPD0gMCB8fCBub3cgPCAwIHsKCQlyZXR1cm4gb3V0Cgl9CgliLm9wZW4uSXRlcmF0ZSgiIiwgIiIsIGZ1bmMoXyBzdHJpbmcsIHZhbHVlIGFueSkgYm9vbCB7CgkJZCA6PSB2YWx1ZS4oRGVmZXJyYWwpCgkJaWYgZC5Jc0V4cGlyZWQobm93KSB7CgkJCW91dCA9IGFwcGVuZChvdXQsIGQpCgkJfQoJCXJldHVybiBsZW4ob3V0KSA+PSBsaW1pdAoJfSkKCXJldHVybiBvdXQKfQoKLy8gSXRlcmF0ZU9wZW4gY2FsbHMgZm4gZm9yIGV2ZXJ5IG9wZW4gZGVmZXJyYWwgaW4gYXNjZW5kaW5nIElEIG9yZGVyLgovLyBJdGVyYXRpb24gc3RvcHMgZWFybHkgd2hlbiBmbiByZXR1cm5zIHRydWUuCi8vCi8vIGZuIHJlY2VpdmVzIGEgQ09QWTogRGVmZXJyYWwgaXMgcGFzc2VkIGJ5IHZhbHVlIGFuZCBob2xkcyBvbmx5IHNjYWxhcnMKLy8gYW5kIHN0cmluZ3MsIHNvIGZuIGdldHMgbm8gcG9pbnRlciBpbnRvIHRoZSBCb29rIGFuZCBjYW5ub3QgcmVhY2ggcGFzdAovLyBpdCDigJQgQm9vaydzIGZpZWxkcyBhcmUgYWxsIHVuZXhwb3J0ZWQuCi8vCi8vIFR3byBydWxlcyBmb3IgZm4sIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBvbmUgdGhhdCBpcyBlYXN5IHRvIG1pc3MuCi8vCi8vICAgLSBEbyBub3QgU2NoZWR1bGUsIENsYWltLCBDYW5jZWwgb3IgRXhwaXJlIGZyb20gaW5zaWRlIGZuOiBtdXRhdGluZwovLyAgICAgdGhlIHRyZWUgd2hpbGUgaXRlcmF0aW5nIGl0IGlzIHVuZGVmaW5lZC4gQ29sbGVjdCBJRHMgZmlyc3QsIHRoZW4KLy8gICAgIGFjdCBhZnRlciBJdGVyYXRlT3BlbiByZXR1cm5zLgovLwovLyAgIC0gZm4gcnVucyB1bmRlciB0aGUgQ0FMTElORyBSRUFMTSdTIFNUT1JBR0UgQVVUSE9SSVRZLiBUaGlzIG1ldGhvZCdzCi8vICAgICByZWNlaXZlciBpcyBzdGFtcGVkIHdpdGggdGhlIGltcG9ydGluZyByZWFsbSdzIFBrZ0lELCBzbyB0aGUgYm9ycm93Ci8vICAgICBydWxlcyBsZWF2ZSB0aGUgcmVhbG0gY29udGV4dCBzZXQgdG8gdGhhdCByZWFsbSBmb3IgdGhlIHdob2xlCi8vICAgICBjYWxsYmFjaywgYW5kIGEgdG9wLWxldmVsIGZuIGhhcyBubyByZWNlaXZlciBhbmQgbm8gZGVjbGFyaW5nIHJlYWxtCi8vICAgICB0byBhbmNob3IgaXQgZWxzZXdoZXJlLiBBIGNhbGxiYWNrIHRoYXQgcmUtZW50ZXJzIHRoZSBjYWxsaW5nCi8vICAgICByZWFsbSdzIG93biBtdXRhdG9ycyB0aGVyZWZvcmUgZG9lcyBzbyB3aXRoIHRoYXQgcmVhbG0ncyBhdXRob3JpdHkuCi8vICAgICBOZXZlciBwYXNzIGEgY2FsbGVyLXN1cHBsaWVkIGZ1bmN0aW9uIGhlcmUgZnJvbSBpbnNpZGUgYQovLyAgICAgcGVybWlzc2lvbi1nYXRlZCBwYXRoOyBwYXNzIG9ubHkgYSBjbG9zdXJlIHRoaXMgcGFja2FnZSdzIGNvbnN1bWVyCi8vICAgICB3cm90ZSBpdHNlbGYuCmZ1bmMgKGIgKkJvb2spIEl0ZXJhdGVPcGVuKGZuIGZ1bmMoRGVmZXJyYWwpIGJvb2wpIHsKCWIub3Blbi5JdGVyYXRlKCIiLCAiIiwgZnVuYyhfIHN0cmluZywgdmFsdWUgYW55KSBib29sIHsKCQlyZXR1cm4gZm4odmFsdWUuKERlZmVycmFsKSkKCX0pCn0KCi8vIGdldCBsb29rcyB1cCBhbiBvcGVuIGRlZmVycmFsIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHRyZWUgb3RoZXJ3aXNlLgpmdW5jIChiICpCb29rKSBnZXQoaWQgdWludDY0KSAoRGVmZXJyYWwsIGJvb2wpIHsKCXYgOj0gYi5vcGVuLkdldChpZEtleShpZCkpCglpZiB2ID09IG5pbCB7CgkJcmV0dXJuIERlZmVycmFse30sIGZhbHNlCgl9CglyZXR1cm4gdi4oRGVmZXJyYWwpLCB0cnVlCn0KCi8vIGlkS2V5IGVuY29kZXMgYW4gSUQgc28gdGhhdCBhdmwncyBsZXhpY2FsIGtleSBvcmRlciBtYXRjaGVzIG51bWVyaWMgSUQKLy8gb3JkZXIuIG1hdGguTWF4VWludDY0IGlzIDIwIGRpZ2l0cywgc28gYSBmaXhlZCAyMC13aWRlIHplcm8tcGFkZGVkCi8vIGRlY2ltYWwgaXMgYm90aCBzdWZmaWNpZW50IGFuZCB1bmFtYmlndW91cy4KZnVuYyBpZEtleShpZCB1aW50NjQpIHN0cmluZyB7CglzIDo9IHN0cmNvbnYuRm9ybWF0VWludChpZCwgMTApCgljb25zdCB3aWR0aCA9IDIwCglpZiBsZW4ocykgPj0gd2lkdGggewoJCXJldHVybiBzCgl9CglyZXR1cm4gemVyb3NbOndpZHRoLWxlbihzKV0gKyBzCn0KCmNvbnN0IHplcm9zID0gIjAwMDAwMDAwMDAwMDAwMDAwMDAwIgoKLy8gY2hlY2tlZEFkZCByZXR1cm5zIGErYiBhbmQgcmVwb3J0cyB3aGV0aGVyIHRoZSBhZGRpdGlvbiBkaWQgbm90Ci8vIG92ZXJmbG93IGludDY0LgpmdW5jIGNoZWNrZWRBZGQoYSwgYiBpbnQ2NCkgKGludDY0LCBib29sKSB7CglzdW0gOj0gYSArIGIKCWlmIChiID4gMCAmJiBzdW0gPCBhKSB8fCAoYiA8IDAgJiYgc3VtID4gYSkgewoJCXJldHVybiAwLCBmYWxzZQoJfQoJcmV0dXJuIHN1bSwgdHJ1ZQp9ChpiCgtnbm9tb2QudG9tbBJTbW9kdWxlID0gImduby5sYW5kL3AvZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMy9kdWVib29rIgpnbm8gPSAiMC45IgoiDTEwMDAwMDAwdWdub3QSEQjerYMpEgo4NjA0MHVnbm90GqgBCjoKEy90bS5QdWJLZXlTZWNwMjU2azESIwohAhb0MXbJJXjONC6Z4m+tKff+fEbtcENW/6uTFX9iuw6YEkBLgsauZUGf2jKe/0/WLPJYhpYL/4/3NQk7rAoDIOXDrzgqKqJYK3sqXx5EW8grcun6tXg/2o8wkg/lsilOJnVWGihnMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWx1dXhl"
  }
}