memoscan
← all memos

Memo 0xd7b4d4dd…d3323e on Ethereum

0xa88e4a19…250c·#23,879,748·view on Etherscan
{"name": "Token 1", "description_": "Public ledgers are also inti` mate systems...", "attributes": `@[], "tags": [], "image": "", "media": {"uri":"","size":"15465","mimeType":"tex_data:text/html;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgICA8dGl0bGU+PC90aXRsZT4KICAgIDxzdHlsZT4KICAgICAgICBib2R5IHsKICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgI2dsc2xGbGFtZSB7CiAgICAgICAgICAgIHdpZHRoOiAxMDB2dzsKICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgfQogICAgPC9zdHlsZT4KPC9oZWFkPgoKPGJvZHk+CiAgICA8Y2FudmFzIGlkPSJnbHNsRmxhbWUiPjwvY2FudmFzPgoKICAgIDxzY3JpcHQ+CiAgICAgICAgY29uc3QgbGFyZ2VSYW5kb21ZID0gNTE1NDA4MTM5ODAxNTcyODcwMDQxNTU3MDM2OTIxMjQwNjI2MDUxODkzMTIxMzYyNzY0ODE5NzY3NzU4MDM3NDE3MjE5ODAyNTIyNDcybjsKCiAgICAgICAgZnVuY3Rpb24gZXh0cmFjdFlQYXJhbXMoeVZhbHVlKSB7CiAgICAgICAgICAgIGNvbnN0IHlTdHIgPSB5VmFsdWUudG9TdHJpbmcoKTsKICAgICAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBbXTsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5U3RyLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoaSArIDIgPD0geVN0ci5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKHBhcnNlSW50KHlTdHIuc2xpY2UoaSwgaSArIDIpKSAvIDEwMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHdoaWxlIChmZWF0dXJlcy5sZW5ndGggPCAxMikgewogICAgICAgICAgICAgICAgZmVhdHVyZXMucHVzaCgwLjUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gZmVhdHVyZXMuc2xpY2UoMCwgMTIpOwogICAgICAgIH0KCiAgICAgICAgbGV0IGN1cnJlbnRZUGFyYW1zID0gZXh0cmFjdFlQYXJhbXMobGFyZ2VSYW5kb21ZKTsKICAgICAgICBjdXJyZW50WVBhcmFtcyA9IFswLjUsIDAuNSwgMC41LCAwLjUsIDAuNSwgMC41LCAwLjUsIDAuNSwgMC41LCAwLjUsIDAuNSwgMC41XTsKCiAgICAgICAgZnVuY3Rpb24gaW5pdEZsYW1lKCkgewogICAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2xzbEZsYW1lJyk7CiAgICAgICAgICAgIGNvbnN0IGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcpOwoKICAgICAgICAgICAgaWYgKCFnbCkgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignV2ViR0wgbm90IHN1cHBvcnRlZCcpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsKICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsKICAgICAgICAgICAgZ2wudmlld3BvcnQoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKCiAgICAgICAgICAgIGNvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWMyIGFfcG9zaXRpb247CiAgICAgICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl91djsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdm9pZCBtYWluKCkgewogICAgICAgICAgICAgICAgICAgIHZfdXYgPSAoYV9wb3NpdGlvbiArIDEuMCkgKiAwLjU7CiAgICAgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGFfcG9zaXRpb24sIDAuMCwgMS4wKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgYDsKCiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAogICAgICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl91djsKICAgICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV90aW1lOwogICAgICAgICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfcmVzb2x1dGlvbjsKICAgICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV95UGFyYW1zWzEyXTsgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZvaWQgbWFpbigpIHsKICAgICAgICAgICAgICAgICAgICB2ZWMyIGNlbnRlciA9IHZlYzIoMC41LCAwLjUpOwogICAgICAgICAgICAgICAgICAgIHZlYzIgcG9zID0gKHZfdXYgLSBjZW50ZXIpICogdmVjMigxLjAsIHVfcmVzb2x1dGlvbi55IC8gdV9yZXNvbHV0aW9uLngpOwogICAgICAgICAgICAgICAgICAgIHBvcyAqPSAyLjU7IGZsb2F0IGRpc3QgPSBsZW5ndGgocG9zKTsgZmxvYXQgYW5nbGUgPSBhdGFuKHBvcy55LCBwb3MueCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBmbG9hdCB3YXZlMSA9IHNpbihhbmdsZSAqIDMuMCArIHVfdGltZSAqIDIuMCkgKiAoMC4yICsgdV95UGFyYW1zWzBdICogMC40KTsKICAgICAgICAgICAgICAgICAgICBmbG9hdCB3YXZlMiA9IGNvcyhhbmdsZSAqIDUuMCAtIHVfdGltZSAqIDEuNSkgKiAoMC4zICsgdV95UGFyYW1zWzFdICogMC4zKTsKICAgICAgICAgICAgICAgICAgICBmbG9hdCB3YXZlMyA9IHNpbihhbmdsZSAqIDcuMCArIHVfdGltZSAqIDMuMCkgKiAoMC40ICsgdV95UGFyYW1zWzJdICogMC4yKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBmbG9hdCBwdWxzZSA9IHNpbih1X3RpbWUgKiAwLjUpICogKDAuMDIgKyB1X3lQYXJhbXNbM10gKiAxLjApICsgKDAuNSArIHVfeVBhcmFtc1s0XSAqIDAuMyk7IGZsb2F0IGZsYW1lUmFkaXVzID0gcHVsc2UgKyB3YXZlMSAqIDAuMSArIHdhdmUyICogMC4xICsgd2F2ZTMgKiAwLjE7IGZsb2F0IHNkZiA9IChkaXN0IC0gZmxhbWVSYWRpdXMpIC8gMC41OwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGZsb2F0IHZlcnRpY2FsRGlzdG9ydGlvbiA9IHNpbihkaXN0ICogKDUuMCArIHVfeVBhcmFtc1s1XSAqIDE1LjApIC0gdV90aW1lICogKDIuMCArIHVfeVBhcmFtc1s2XSAqIDMuMCkpICogKDAuMjUgKyB1X3lQYXJhbXNbNl0gKiAyLjApOyBzZGYgKz0gdmVydGljYWxEaXN0b3J0aW9uICogKDAuNSArIHVfeVBhcmFtc1s2XSAqIDAuNSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgdmVjMyBjb2xvciA9IHZlYzMoMC4wKTsgZmxvYXQgYWxwaGEgPSAwLjA7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWYgKHNkZiA8IDAuMCkgewogICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBpbnRlbnNpdHkgPSAxLjAgLSBhYnMoc2RmKTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHIgPSB1X3lQYXJhbXNbN10gKiAwLjUgKyBzaW4odV90aW1lICogMC41KSAqIDAuMSArIHVfeVBhcmFtc1sxMF0gKiAwLjA1OwogICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBnID0gdV95UGFyYW1zWzhdICogMC41ICsgY29zKHVfdGltZSAqIDAuNykgKiAwLjEgKyB1X3lQYXJhbXNbMTFdICogMC4wMzsgIAogICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBiID0gdV95UGFyYW1zWzldICogMC41ICsgc2luKHVfdGltZSAqIDEuMykgKiAwLjEgKyB1X3lQYXJhbXNbOV0gKiAwLjAyOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYXZnUGFyYW1zID0gKHVfeVBhcmFtc1swXSArIHVfeVBhcmFtc1sxXSArIHVfeVBhcmFtc1syXSkgLyAzLjA7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHBhbGV0dGVJbmRleCA9IGZsb29yKGF2Z1BhcmFtcyAqIDEwLjApOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMyBwYWxldHRlQ29sb3I7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWxldHRlSW5kZXggPT0gMC4wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRlQ29sb3IgPSB2ZWMzKDEuMCwgMC4yLCAwLjEpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhbGV0dGVJbmRleCA9PSAxLjApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbGV0dGVDb2xvciA9IHZlYzMoMC4xLCAwLjgsIDEuMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFsZXR0ZUluZGV4ID09IDIuMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZUNvbG9yID0gdmVjMygwLjIsIDEuMCwgMC4zKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYWxldHRlSW5kZXggPT0gMy4wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRlQ29sb3IgPSB2ZWMzKDAuOCwgMC4xLCAxLjApOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhbGV0dGVJbmRleCA9PSA0LjApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbGV0dGVDb2xvciA9IHZlYzMoMS4wLCAwLjgsIDAuMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFsZXR0ZUluZGV4ID09IDUuMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZUNvbG9yID0gdmVjMygxLjAsIDEuMCwgMS4wKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYWxldHRlSW5kZXggPT0gNi4wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRlQ29sb3IgPSB2ZWMzKDAuMywgMC45LCAwLjkpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhbGV0dGVJbmRleCA9PSA3LjApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbGV0dGVDb2xvciA9IHZlYzMoMC45LCAwLjYsIDAuMik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFsZXR0ZUluZGV4ID09IDguMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZUNvbG9yID0gdmVjMygwLjUsIDAuMiwgMC44KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYWxldHRlSW5kZXggPT0gOS4wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRlQ29sb3IgPSB2ZWMzKDAuOSwgMC45LCAwLjIpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZUNvbG9yID0gdmVjMygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAociArIGcgKyBiKSAqIDAuMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAociArIGcgKiAwLjUgKyBiICogMC44KSAqIDAuMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAociAqIDAuOCArIGcgKyBiKSAqIDAuMwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdmFyaWF0aW9uID0gc2luKHVfdGltZSAqIDIuMCArIGRpc3QgKiAzLjApICogMC4xICsgMC45OwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeFBvcyA9ICh2X3V2LnggLSAwLjUpICogMi4wOwogICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB5UG9zID0gKHZfdXYueSAtIDAuNSkgKiAyLjA7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB2ZWMzIHBvc2l0aW9uU2hpZnQgPSB2ZWMzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luKHhQb3MgKiAzLjE0MTU5ICsgdV90aW1lKSAqIDAuMjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3MoeVBvcyAqIDMuMTQxNTkgKyB1X3RpbWUgKiAxLjUpICogMC4yNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbigoeFBvcyArIHlQb3MpICogMi4wICsgdV90aW1lICogMi4wKSAqIDAuMjUKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGNocm9tYXRpY01peDEgPSBzaW4odV90aW1lICogMS41ICsgZGlzdCAqIDIuMCkgKiAwLjIgKyAwLjI7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGNocm9tYXRpY01peDIgPSBjb3ModV90aW1lICogMi41IC0gYW5nbGUgKiAzLjApICogMC4xNSArIDAuMTU7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGNocm9tYXRpY01peDMgPSBzaW4odV90aW1lICogMy41ICsgeFBvcyAqIHlQb3MgKiA1LjApICogMC4xICsgMC4xOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMyBjaHJvbWF0aWNCbGVuZDEgPSB2ZWMzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25TaGlmdC5nICogY2hyb21hdGljTWl4MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uU2hpZnQuYiAqIGNocm9tYXRpY01peDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblNoaWZ0LnIgKiBjaHJvbWF0aWNNaXgxCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB2ZWMzIGNocm9tYXRpY0JsZW5kMiA9IHZlYzMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblNoaWZ0LmIgKiBjaHJvbWF0aWNNaXgyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25TaGlmdC5yICogY2hyb21hdGljTWl4MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uU2hpZnQuZyAqIGNocm9tYXRpY01peDIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMgY2hyb21hdGljQmxlbmQzID0gdmVjMygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb3NpdGlvblNoaWZ0LnIgKyBwb3NpdGlvblNoaWZ0LmcpICogMC41ICogY2hyb21hdGljTWl4MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb3NpdGlvblNoaWZ0LmcgKyBwb3NpdGlvblNoaWZ0LmIpICogMC41ICogY2hyb21hdGljTWl4MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb3NpdGlvblNoaWZ0LmIgKyBwb3NpdGlvblNoaWZ0LnIpICogMC41ICogY2hyb21hdGljTWl4MyAKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMgaW50ZXJmZXJlbmNlID0gdmVjMygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbihkaXN0ICogMTUuMCAtIHVfdGltZSAqIDQuMCkgKiAwLjA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29zKGFuZ2xlICogOC4wICsgdV90aW1lICogMy4wKSAqIDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW4oKGRpc3QgKyBhbmdsZSkgKiAxMC4wIC0gdV90aW1lICogMi4wKSAqIDAuMDUKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gcGFsZXR0ZUNvbG9yICogdmFyaWF0aW9uICsgcG9zaXRpb25TaGlmdCArIGNocm9tYXRpY0JsZW5kMSArIGNocm9tYXRpY0JsZW5kMiArIGNocm9tYXRpY0JsZW5kMyArIGludGVyZmVyZW5jZTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlbnNpdHkgPiAwLjcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gbWl4KGNvbG9yLCBwYWxldHRlQ29sb3IgKyB2ZWMzKDAuMywgMC4zLCAwLjMpLCAoaW50ZW5zaXR5IC0gMC43KSAqIDMuMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW50ZW5zaXR5IDwgMC4zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IHBhbGV0dGVDb2xvciAqIGludGVuc2l0eSAqIDIuMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEgPSBpbnRlbnNpdHk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIGFscGhhKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgYDsKCiAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVNoYWRlcihnbCwgdHlwZSwgc291cmNlKSB7CiAgICAgICAgICAgICAgICBjb25zdCBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7CiAgICAgICAgICAgICAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzb3VyY2UpOwogICAgICAgICAgICAgICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpOwoKICAgICAgICAgICAgICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIGNvbXBpbGF0aW9uIGVycm9yOicsIGdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7CiAgICAgICAgICAgICAgICAgICAgZ2wuZGVsZXRlU2hhZGVyKHNoYWRlcik7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRlcjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29uc3QgdmVydGV4U2hhZGVyID0gY3JlYXRlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOwogICAgICAgICAgICBjb25zdCBmcmFnbWVudFNoYWRlciA9IGNyZWF0ZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7CgogICAgICAgICAgICBjb25zdCBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOwogICAgICAgICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKICAgICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKICAgICAgICAgICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7CgogICAgICAgICAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdQcm9ncmFtIGxpbmtpbmcgZXJyb3I6JywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KFsKICAgICAgICAgICAgICAgIC0xLjAsIC0xLjAsCiAgICAgICAgICAgICAgICAxLjAsIC0xLjAsCiAgICAgICAgICAgICAgICAtMS4wLCAxLjAsCiAgICAgICAgICAgICAgICAxLjAsIDEuMCwKICAgICAgICAgICAgXSk7CgogICAgICAgICAgICBjb25zdCBwb3NpdGlvbkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpOwogICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgcG9zaXRpb25CdWZmZXIpOwogICAgICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgcG9zaXRpb25zLCBnbC5TVEFUSUNfRFJBVyk7CgogICAgICAgICAgICBjb25zdCBwb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgJ2FfcG9zaXRpb24nKTsKICAgICAgICAgICAgY29uc3QgdGltZVVuaWZvcm1Mb2NhdGlvbiA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAndV90aW1lJyk7CiAgICAgICAgICAgIGNvbnN0IHJlc29sdXRpb25Vbmlmb3JtTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgJ3VfcmVzb2x1dGlvbicpOwogICAgICAgICAgICBjb25zdCB5UGFyYW1zVW5pZm9ybUxvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICd1X3lQYXJhbXMnKTsKCiAgICAgICAgICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpOwoKICAgICAgICAgICAgZnVuY3Rpb24gYW5pbWF0ZSgpIHsKICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSBzdGFydFRpbWUpIC8gMTAwMC4wOwogICAgICAgICAgICAgICAgZ2wuY2xlYXJDb2xvcigwLjAsIDAuMCwgMC4wLCAxLjApOwogICAgICAgICAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7CgogICAgICAgICAgICAgICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKCiAgICAgICAgICAgICAgICBnbC51bmlmb3JtMWYodGltZVVuaWZvcm1Mb2NhdGlvbiwgY3VycmVudFRpbWUpOwogICAgICAgICAgICAgICAgZ2wudW5pZm9ybTJmKHJlc29sdXRpb25Vbmlmb3JtTG9jYXRpb24sIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0xZihnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgYHVfeVBhcmFtc1ske2l9XWApLCBjdXJyZW50WVBhcmFtc1tpXSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbik7CiAgICAgICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgcG9zaXRpb25CdWZmZXIpOwogICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOwoKICAgICAgICAgICAgICAgIGdsLmVuYWJsZShnbC5CTEVORCk7CiAgICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmMoZ2wuU1JDX0FMUEhBLCBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBKTsKCiAgICAgICAgICAgICAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFX1NUUklQLCAwLCA0KTsKCiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7CiAgICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsKICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7CiAgICAgICAgICAgICAgICBnbC52aWV3cG9ydCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGFuaW1hdGUoKTsKICAgICAgICB9CgogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgaW5pdEZsYW1lKTsKICAgIDwvc2NyaXB0Pgo8L2JvZHk+Cgo8L2h0bWw+