SHARE
TWEET

Untitled

a guest Mar 20th, 2019 67 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. PCFET0NUWVBFIGh0bWw+CjxodG1sPgoJPGhlYWQ+CgkJPG1ldGEgY2hhcnNldD0idXRmLTgiPgoJCTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSwgbWludW11bS1zY2FsZT0xLCBtYXhpbXVtLXNjYWxlPTEsIHVzZXItc2NhbGFibGU9bm8iPgoJCTx0aXRsZT5QV048L3RpdGxlPgoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InN0eWxlLmNzcyIvPgoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Im9mZnNldHMuanMiPjwvc2NyaXB0PgoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InV0aWxzLmpzIj48L3NjcmlwdD4KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJpbnQ2NC5qcyI+PC9zY3JpcHQ+CgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKCQkJdHJ5IHsKCQkJCS8vIFdlIHdhbnQgYSBidWZmZXIgdG8gd3JpdGUgb3VyIHNoZWxsY29kZSArIHJvcGNoYWluIGluCgkJCQl2YXIgQkFTRTMyID0gMHgxMDAwMDAwMDA7CgkJCQl2YXIgY29udmVyc2lvbl9idWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7CgkJCQl2YXIgZjY0ID0gbmV3IEZsb2F0NjRBcnJheShjb252ZXJzaW9uX2J1ZmZlcik7CgkJCQl2YXIgZjMyID0gbmV3IEZsb2F0MzJBcnJheShjb252ZXJzaW9uX2J1ZmZlcik7CgkJCQl2YXIgaTMyID0gbmV3IFVpbnQzMkFycmF5KGNvbnZlcnNpb25fYnVmZmVyKTsKCQkJCXZhciBpMTYgPSBuZXcgVWludDE2QXJyYXkoY29udmVyc2lvbl9idWZmZXIpOwoJCQkJdmFyIGk4ID0gbmV3IFVpbnQ4QXJyYXkoY29udmVyc2lvbl9idWZmZXIpOwoKCQkJCXZhciB3b3JrYnVmID0gbmV3IEFycmF5QnVmZmVyKDB4MTAwMDAwMCk7CgkJCQl2YXIgZjMyX2J1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkod29ya2J1Zik7CgkJCQl2YXIgZjY0X2J1ZmZlciA9IG5ldyBGbG9hdDY0QXJyYXkod29ya2J1Zik7CgkJCQl2YXIgdTMyX2J1ZmZlciA9IG5ldyBVaW50MzJBcnJheSh3b3JrYnVmKTsKCQkJCXZhciB1MTZfYnVmZmVyID0gbmV3IFVpbnQxNkFycmF5KHdvcmtidWYpOwoJCQkJdmFyIHU4X2J1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdvcmtidWYpOwoJCQkJdmFyIGkzMl9idWZmZXIgPSBuZXcgSW50MzJBcnJheSh3b3JrYnVmKTsKCQkJCXZhciBpMTZfYnVmZmVyID0gbmV3IEludDE2QXJyYXkod29ya2J1Zik7CgkJCQl2YXIgaThfYnVmZmVyID0gbmV3IEludDhBcnJheSh3b3JrYnVmKTsKCgkJCQl2YXIgcGFnZXMgPSBbXTsKCQkJCWZvcihpID0gMDsgaSA8IDI1MDsgaSsrKQoJCQkJewoJCQkJCXBhZ2VzLnB1c2gobmV3IEFycmF5QnVmZmVyKDB4NDAwMCkpOwoJCQkJfQoKCQkJCWZvcihpID0gMjUwOyBpID4gMDsgaS0tKQoJCQkJewoJCQkJCXBhZ2VzW2ldID0gdW5kZWZpbmVkOwoJCQkJfQoKCQkJCXBhZ2VzID0gdW5kZWZpbmVkOwoKCQkJCXdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpCgkJCQl7CgoJCQkJCXdpbmRvdy5kaXNhYmxlQnRuID0gZnVuY3Rpb24oaWQgPSAiI2J0biIpCgkJCQkJewoJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CgkJCQkJCQl2YXIgYnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpZCk7CgkJCQkJCQlidG4uc2V0QXR0cmlidXRlKCdjbGFzcycsJ2Rpc2FibGVkJyk7CgkJCQkJCQlidG4uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsJ3RydWUnKTsKCQkJCQkJCWJ0bi5iYWNrdXAgPSBidG4ub25jbGljazsKCQkJCQkJCWJ0bi5vbmNsaWNrID0gZnVuY3Rpb24oKXt9OwoJCQkJCQl9LCAwLjAxKTsKCQkJCQl9OwoKCQkJCQl3aW5kb3cuZW5hYmxlQnRuID0gZnVuY3Rpb24oaWQgPSAiI2J0biIpCgkJCQkJewoJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CgkJCQkJCQl2YXIgYnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpZCk7CgkJCQkJCQlidG4uc2V0QXR0cmlidXRlKCdjbGFzcycsJ2Rpc2FibGVkJyk7CgkJCQkJCQlidG4ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpOwoJCQkJCQkJYnRuLm9uY2xpY2sgPSBidG4uYmFja3VwOwoJCQkJCQkJYnRuLmJhY2t1cCA9IHVuZGVmaW5lZDsKCQkJCQkJfSwgMC4wMSk7CgkJCQkJfTsKCgkJCQkJd2luZG93LnVwZGF0ZVN0YXR1cyA9IGZ1bmN0aW9uKG1zZyA9ICcnLCBpZCA9ICIjYnRuIikKCQkJCQl7CgkJCQkJCWlmKCFtc2cgJiYgIXdpbmRvdy5zdGF0dXMpCgkJCQkJCXsKCQkJCQkJCXdpbmRvdy5zdGF0dXMgPSAicnVuIGV4cGxvaXQiOwoJCQkJCQl9CgoJCQkJCQlpZihtc2cpCgkJCQkJCXsKCQkJCQkJCXdpbmRvdy5zdGF0dXMgPSBtc2c7CgkJCQkJCX0KCQkJCQkJdmFyIGJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaWQpOwoJCQkJCQlidG4uaW5uZXJUZXh0ID0gd2luZG93LnN0YXR1czsKCQkJCQkJbWlsbGlzKDIpOwoJCQkJCX07CgoKCQkJCQl3aW5kb3cucmVib290ID0gZnVuY3Rpb24oKQoJCQkJCXsKCQkJCQkJZGlzYWJsZUJ0bigiI3JlYm9vdCIpOwoJCQkJCQl1cGRhdGVTdGF0dXMoIlJlYm9vdGluZywgcGxlYXNlIHdhaXQuLi4iKTsKCQkJCQkJbWlsbGlzKDEwMCk7CgkJCQkJCXZhciByZWJvb3RfcGF5bG9hZCA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShsb2FkX3NoZWxsY29kZSgncmVib290LmJpbicpLnU4KTsKCQkJCQkJd2luZG93LnJlYm9vdF9ub3R0aHJlYWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpewoJCQkJCQkJZG9jdW1lbnQud3JpdGUocmVib290X3BheWxvYWQpOwoJCQkJCQl9LCAxMCk7CgkJCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHdpbmRvdy5yZWJvb3Rfbm90dGhyZWFkKTt9LCAxMDAwMCk7CgkJCQkJCQoJCQkJCX0KCgkJCQkJd2luZG93LnJlc3ByaW5nID0gZnVuY3Rpb24oKQoJCQkJCXsKCQkJCQkJZGlzYWJsZUJ0bigiI3Jlc3ByaW5nIik7CgkJCQkJCXVwZGF0ZVN0YXR1cygiUmVzcHJpbmdpbmcsIHBsZWFzZSB3YWl0Li4uIik7CgkJCQkJCW1pbGxpcygxMCk7CgkJCQkJCWV2YWwoYXRvYigiZDJsdVpHOTNMbXh2WTJGMGFXOXVMbWh5WldZOUoyRndjR3hsY0hKcGJuUmpaVzUwWlhJNkx5OG5Pdz09IikpOwoJCQkJCX0KCgkJCQkJU3VwcG9ydFRhcmdldCgiaVBob25lIDZTIiwgMTIuMDEsICJhbnkiKTsgLy8gV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCB0aGUgaVBob25lIDZTIG9uIDEyLjAuMQoKCQkJCQlpZighaXNzdXBwb3J0ZWQoKSkgLy8gTWltaWMgT2JqLUMgYnV0dG9uIGlzIGRpc2FibGVkIGJlaGF2aW91ciBmb3IgdW5zdXBwb3J0ZWQgZGV2aWNlcwoJCQkJCXsKCQkJCQkJdmFyIGJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNidG4iKTsKCQkJCQkJYnRuLmlubmVyVGV4dCA9ICJ1bnN1cHBvcnRlZCI7CgkJCQkJCWJ0bi5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywndW5zdXBwb3J0ZWQnKTsKCQkJCQkJYnRuLm9uY2xpY2sgPSBmdW5jdGlvbigpe2FsZXJ0KCdZb3VyIGRldmljZSBpcyBub3Qgc3VwcG9ydGVkJyk7fTsKCQkJCQkJZGlzYWJsZUJ0bigiI3Jlc3ByaW5nIik7CgkJCQkJCWRpc2FibGVCdG4oIiNyZWJvb3QiKTsKCQkJCQl9CgoJCQkJCWFzc2VydF9vZmZzZXRzKCk7CgoJCQkJfTsKCQkJCQoKCQkJCS8vIFByZXBhcmUgb3VyIGV4cGxvaXQKCQkJCWZ1bmN0aW9uIGluaXQoKQoJCQkJewoKCQkJCQlsb2cuZGVidWcoIlByZXBhcmluZyBleHBsb2l0Li4uXG4iKTsKCQkJCQl1MzJfYnVmZmVyLnNldChsb2FkX3NoZWxsY29kZSgnc2hlbGxjb2RlLmJpbicpLnUzMiwgMHg0MDAwKTsKCQkJCQlhbGVydCgiRmlyc3QgMzItYml0IHZhbHVlIG9mIHNoZWxsY29kZTogIitoZXhpZnkodTMyX2J1ZmZlclsweDQwMDBdKSk7CgkJCQkJdmFyIHByZXN0YWdlID0gewoJCQkJCQlvZmZzZXRzOiBmdW5jdGlvbigpCgkJCQkJCXsKCQkJCQkJCXJldHVybiBvZmZzZXRzW2N1cnJlbnRkZXZpY2Uub3MudmVyc2lvbl1bY3VycmVudGRldmljZS5kZXZpY2VbMF1dOwoJCQkJCQl9KCkgLy8gQmVoYXZlIGxpa2UgQU5TSSBDJ3MgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKQoJCQkJCX0KCQkJCXJldHVybiBwcmVzdGFnZTsKCQkJfTsKCgoJCQkvLyBPdXIgZXhwbG9pdCBtZW1vcnkgcHJpbWl0aXZlcwoJCQl2YXIgcHJpbWl0aXZlcyA9IHsKCgkJCQkvLyBMZWFrcyB0aGUgYWRkcmVzcyBvZiBhbiBvYmplY3QKCQkJCWFkZHJvZjogZnVuY3Rpb24ob2JqKQoJCQkJewoJCQkJCXZhciBfYWRkcm9mID0gZnVuY3Rpb24odmFsKQoJCQkJCXsKCQkJCQkJdmFyIGFycmF5ID0gWzEzLjM3XTsKCQkJCSAgICAJdmFyIHJlZyA9IC9hYmMveTsKCQkJCSAgICAKCQkJCQkgICAgZnVuY3Rpb24gZ2V0YXJyYXkoKSB7CgkJCQkJICAgICAgICByZXR1cm4gYXJyYXk7CgkJCQkJICAgIH0KCQkJCSAgICAKCQkJCQkgICAgLy8gVGFyZ2V0IGZ1bmN0aW9uCgkJCQkJICAgIHZhciBBZGRyR2V0dGVyID0gZnVuY3Rpb24oYXJyYXkpIHsKCQkJCQkgICAgICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKCQkJCQkgICAgICAgICAgICBpZiAobnVtICUgaSA9PT0gMCkgewoJCQkJCSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CgkJCQkJICAgICAgICAgICAgfQoJCQkJCSAgICAgICAgfQoJCQkJCSAgICAgICAgCgkJCQkJICAgICAgICBhcnJheSA9IGdldGFycmF5KCk7CgkJCQkJICAgICAgICByZWdbU3ltYm9sLm1hdGNoXSh2YWwgPT09IG51bGwpOwoJCQkJCSAgICAgICAgcmV0dXJuIGFycmF5WzBdOwoJCQkJCSAgICB9CgkJCQkgICAgCgkJCQkJICAgIC8vIEZvcmNlIG9wdGltaXphdGlvbgoJCQkJCSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQoJCQkJCSAgICAgICAgQWRkckdldHRlcihhcnJheSk7CgkJCQkgICAgCgkJCQkJICAgIC8vIFNldHVwIGhheHgKCQkJCQkgICAgcmVnZXhMYXN0SW5kZXggPSB7fTsKCQkJCQkgICAgcmVnZXhMYXN0SW5kZXgudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKCQkJCQkgICAgICAgIGFycmF5WzBdID0gdmFsOwoJCQkJCSAgICAgICAgcmV0dXJuICIwIjsKCQkJCQkgICAgfTsKCQkJCSAgICAJcmVnLmxhc3RJbmRleCA9IHJlZ2V4TGFzdEluZGV4OwoJCQkJICAgIAoJCQkJCSAgICAvLyBEbyBpdCEKCQkJCQkgICAgcmV0dXJuIEFkZHJHZXR0ZXIoYXJyYXkpOwoJCQkJCX07CgoJCQkJCWZvcihpID0gMDsgaSA8IDEwMDsgaSsrKQoJCQkJCXsKCQkJCQkJdmFyIHIgPSBfYWRkcm9mKG9iaik7CgkJCQkJCWlmKHR5cGVvZiByICE9ICJvYmplY3QiICYmIHIgIT09IDEzLjM3KQoJCQkJCQl7CgkJCQkJCQlyZXR1cm4gcjsKCQkJCQkJfQoJCQkJCX0KCQkJCQlsb2cud2FybigiRmFpbGVkIHRvIGxlYWsgYWRkcmVzcywgd2UgbWF5IGNyYXNoLi4uIik7CgkJCQkJZGlzYWJsZUJ0bigpOwoJCQkJCQoJCQkJfSwKCgkJCQkvLyBGYWtlcyBhbnl0aGluZyB0byBiZSBhbiBvYmplY3Qgd2UgY2FuIG9wZXJhdGUgb24KCQkJCWZha2VvYmo6IGZ1bmN0aW9uKHZhbCkKCQkJCXsKCQkJCQlmdW5jdGlvbiBfZmFrZW9iaih2YWwpIHsKCQkJCQkgICAgdmFyIGFycmF5ID0gWzEzLjM3XTsKCQkJCQkgICAgdmFyIHJlZyA9IC9hYmMveTsKCQkJCQkgICAgCgkJCQkJICAgIGZ1bmN0aW9uIGdldGFycmF5KCkgewoJCQkJCSAgICAgICAgcmV0dXJuIGFycmF5OwoJCQkJCSAgICB9CgkJCQkJICAgIAoJCQkJCSAgICAvLyBUYXJnZXQgZnVuY3Rpb24KCQkJCQkgICAgdmFyIE9iakZha2VyID0gZnVuY3Rpb24oYXJyYXkpIHsKCQkJCQkgICAgICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKCQkJCQkgICAgICAgICAgICBpZiAobnVtICUgaSA9PT0gMCkgewoJCQkJCSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CgkJCQkJICAgICAgICAgICAgfQoJCQkJCSAgICAgICAgfQoJCQkJCSAgICAgICAgCgkJCQkJICAgICAgICBhcnJheSA9IGdldGFycmF5KCk7CgkJCQkJICAgICAgICByZWdbU3ltYm9sLm1hdGNoXSh2YWwgPT09IG51bGwpOwoJCQkJCSAgICAgICAgYXJyYXlbMF0gPSB2YWw7CgkJCQkJICAgIH0KCQkJCQkgICAgCgkJCQkJICAgIC8vIEZvcmNlIG9wdGltaXphdGlvbgoJCQkJCSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQoJCQkJCSAgICAgICAgT2JqRmFrZXIoYXJyYXkpOwoJCQkJCSAgICAKCQkJCQkgICAgLy8gU2V0dXAgaGF4eAoJCQkJCSAgICByZWdleExhc3RJbmRleCA9IHt9OwoJCQkJCSAgICByZWdleExhc3RJbmRleC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewoJCQkJCSAgICAgICAgYXJyYXlbMF0gPSB7fTsKCQkJCQkgICAgICAgIHJldHVybiAiMCI7CgkJCQkJICAgIH07CgkJCQkJICAgIHJlZy5sYXN0SW5kZXggPSByZWdleExhc3RJbmRleDsKCQkJCQkgICAgCgkJCQkJICAgIC8vIERvIGl0IQoJCQkJCSAgICB2YXIgdW51c2VkID0gT2JqRmFrZXIoYXJyYXkpOwoJCQkJCSAgICAKCQkJCQkgICAgcmV0dXJuIGFycmF5WzBdOwoJCQkJCX0KCQkJCQlmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKykgewoJCQkJICAgIAl2YXIgcmVzdWx0ID0gX2Zha2VvYmoodmFsKTsKCQkJCSAgIAkJaWYgKHR5cGVvZiByZXN1bHQgPT0gIm9iamVjdCIpewoJCQkJICAgICAgICAJcmV0dXJuIHJlc3VsdDsKCQkJCSAgICAJfQoJCQkJCX0KCQkJCX0KCQkJfTsKCgkJCXZhcglzdGFnZTEgPSBmdW5jdGlvbigpIHsKCQkJCS8vIFNwcmF5IEZsb2F0NjRBcnJheSBzdHJ1Y3R1cmVzIHNvIHRoYXQgc3RydWN0dXJlIElEIDB4NTAwMCB3aWxsCgkJCSAgICAvLyBiZSBhIEZsb2F0NjRBcnJheSB3aXRoIHZlcnkgaGlnaCBwcm9iYWJpbGl0eQoJCQkgICAgLy8gV2Ugc3ByYXkgRmxvYXQ2NEFycmF5IGZpcnN0IGJlY2F1c2UgaXQncyBmYXN0ZXIKCQkJICAgIHZhciBzdHJ1Y3RzID0gW107CgkJCSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDB4NTAwMDsgaSsrKSB7CgkJCSAgICAgICAgdmFyIGEgPSBuZXcgRmxvYXQ2NEFycmF5KDEpOwoJCQkgICAgICAgIGFbJ3Byb3AnICsgaV0gPSAxMzM3OwoJCQkgICAgICAgIHN0cnVjdHMucHVzaChhKTsKCQkJICAgIH0KCgkJCSAgICAvLyBOb3cgc3ByYXkgV2ViQXNzZW1ibHkuTWVtb3J5CgkJCSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUwOyBpKyspIHsKCQkJICAgICAgICB2YXIgYSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRhbDogMH0pOwoJCQkgICAgICAgIGFbJ3Byb3AnICsgaV0gPSAxMzM3OwoJCQkgICAgICAgIHN0cnVjdHMucHVzaChhKTsKCQkJICAgIH0KCQkJICAgIAoJCQkgICAJLy8gT3VyIFdBU00gbW9kdWxlIGNvZGUKCQkgICAgCXZhciB3ZWJBc3NlbWJseUNvZGUgPSAnXHgwMGFzbVx4MDFceDAwXHgwMFx4MDBceDAxXHgwYlx4MDJgXHgwMVx4N2ZceDAxXHg3ZmBceDAyXHg3Zlx4N2ZceDAwXHgwMlx4MTBceDAxXHgwN2ltcG9ydHNceDAzbWVtXHgwMlx4MDBceDAyXHgwM1x4MDdceDA2XHgwMFx4MDFceDAwXHgwMVx4MDBceDAxXHgwN0RceDA2XHgwOHJlYWRfaTMyXHgwMFx4MDBcdHdyaXRlX2kzMlx4MDBceDAxXHgwOHJlYWRfaTE2XHgwMFx4MDJcdHdyaXRlX2kxNlx4MDBceDAzXHgwN3JlYWRfaThceDAwXHgwNFx4MDh3cml0ZV9pOFx4MDBceDA1XG5GXHgwNlx4MGJceDAwIFx4MDBBXHgwNGwoXHgwMlx4MDBceDBmXHgwYlx4MGNceDAwIFx4MDBBXHgwNGwgXHgwMTZceDAyXHgwMFx4MGJceDBiXHgwMCBceDAwQVx4MDJsL1x4MDFceDAwXHgwZlx4MGJceDBjXHgwMCBceDAwQVx4MDJsIFx4MDE7XHgwMVx4MDBceDBiXHgwOFx4MDAgXHgwMC1ceDAwXHgwMFx4MGZceDBiXHRceDAwIFx4MDAgXHgwMTpceDAwXHgwMFx4MGInOwoJCSAgIAoJCQkgICAJLy8gQ29udmVydCB0aGUgbW9kdWxlIHRvIGFuIGFycmF5YnVmZmVyCgkJCSAgICB2YXIgd2ViQXNzZW1ibHlCdWZmZXIgPSBzdHIyYWIod2ViQXNzZW1ibHlDb2RlKTsKCgkJCSAgICAvL0Fzc2VtYmxlIHRoZSBXYXNtIG1vZHVsZQoJCQkgICAgdmFyIHdlYkFzc2VtYmx5TW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSh3ZWJBc3NlbWJseUJ1ZmZlcik7CgoJCQkgICAgdmFyIGpzQ2VsbEhlYWRlciA9IG5ldyBJbnQ2NChbCgkJCSAgICAgICAgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgLy8gbV9zdHJ1Y3R1cmVJRAoJCQkgICAgICAgIDB4MCwgICAgICAgICAgICAgICAgICAgIC8vIG1faW5kZXhpbmdUeXBlCgkJCSAgICAgICAgMHgyYywgICAgICAgICAgICAgICAgICAgLy8gbV90eXBlCgkJCSAgICAgICAgMHgwOCwgICAgICAgICAgICAgICAgICAgLy8gbV9mbGFncwoJCQkgICAgICAgIDB4MSAgICAgICAgICAgICAgICAgICAgIC8vIG1fY2VsbFN0YXRlCgkJCSAgICBdKTsKCQkJICAgIAoJCQkgICAgdmFyIHdhc21CdWZmZXIgPSB7CgkJCSAgICAgICAganNDZWxsSGVhZGVyOiBqc0NlbGxIZWFkZXIuYXNKU1ZhbHVlKCksCgkJCSAgICAgICAgYnV0dGVyZmx5OiBudWxsLAoJCQkgICAgICAgIHZlY3RvcjogbnVsbCwKCQkJICAgICAgICBtZW1vcnk6IG51bGwsCgkJCSAgICAgICAgZGVsZXRlTWU6IG51bGwKCQkJICAgIH07CgkJCSAgICAKCQkJICAgIHZhciB3YXNtSW50ZXJuYWxNZW1vcnkgPSB7CgkJCSAgICAgICAganNDZWxsSGVhZGVyOiBudWxsLAoJCQkgICAgICAgIG1lbW9yeVRvUmVhZDoge30sIAoJCQkgICAgICAgIHNpemVUb1JlYWQ6IChuZXcgSW50NjQoJzB4MEZGRkZGRkZGRkZGRkZGRicpKS5hc0pTVmFsdWUoKSwgLy8gU29tZXRoaW5nIGxhcmdlIGVub3VnaAoJCQkgICAgICAgIHNpemU6IChuZXcgSW50NjQoJzB4MEZGRkZGRkZGRkZGRkZGRicpKS5hc0pTVmFsdWUoKSwgLy8gU29tZXRoaW5nIGxhcmdlIGVub3VnaAoJCQkgICAgICAgIGluaXRpYWxTaXplOiAobmV3IEludDY0KCcweDBGRkZGRkZGRkZGRkZGRkYnKSkuYXNKU1ZhbHVlKCksIC8vIFNvbWV0aGluZyBsYXJnZSBlbm91Z2gKCQkJICAgICAgICBqdW5rMTogbnVsbCwKCQkJICAgICAgICBqdW5rMjogbnVsbCwKCQkJICAgICAgICBqdW5rMzogbnVsbCwKCQkJICAgICAgICBqdW5rNDogbnVsbCwKCQkJICAgICAgICBqdW5rNTogbnVsbCwKCQkJICAgIH07CgkJCSAgICAKCQkJICAgIHZhciBsZWFrZXIgPSB7CgkJCSAgICAgICAgb2JqZWN0VG9MZWFrOiBudWxsCgkJCSAgICB9OwoJCQkgICAgCgkJCSAgICBkZWxldGUgd2FzbUJ1ZmZlci5idXR0ZXJmbHk7CgkJCSAgICBkZWxldGUgd2FzbUJ1ZmZlci52ZWN0b3I7CgkJCSAgICBkZWxldGUgd2FzbUJ1ZmZlci5kZWxldGVNZTsKCQkJICAgIGRlbGV0ZSB3YXNtSW50ZXJuYWxNZW1vcnkuanVuazE7CgkJCSAgICBkZWxldGUgd2FzbUludGVybmFsTWVtb3J5Lmp1bmsyOwoJCQkgICAgZGVsZXRlIHdhc21JbnRlcm5hbE1lbW9yeS5qdW5rMzsKCQkJICAgIGRlbGV0ZSB3YXNtSW50ZXJuYWxNZW1vcnkuanVuazQ7CgkJCSAgICBkZWxldGUgd2FzbUludGVybmFsTWVtb3J5Lmp1bms1OwoKCQkJICAgIHZhciByZWFsV2FzbU1lbSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRhbDogMHgxfSk7CgoJCQkgICAgdmFyIHdhc21CdWZmZXJSYXdBZGRyID0gcHJpbWl0aXZlcy5hZGRyb2Yod2FzbUJ1ZmZlcik7CgkJCSAgICB2YXIgd2FzbUJ1ZmZlckFkZHIgPSBBZGQoSW50NjQuZnJvbURvdWJsZSh3YXNtQnVmZmVyUmF3QWRkciksIDE2KTsKCQkJICAgIAoKCQkJICAgIGxvZy5pbmZvKCJGYWtlIFdhc20gTWVtb3J5IEAgIiArIHdhc21CdWZmZXJBZGRyKTsKCQkJICAgIAoJCQkgICAgdmFyIGZha2VXYXNtQnVmZmVyID0gcHJpbWl0aXZlcy5mYWtlb2JqKHdhc21CdWZmZXJBZGRyLmFzRG91YmxlKCkpOwoJCQkgICAgd2hpbGUgKCEoZmFrZVdhc21CdWZmZXIgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5NZW1vcnkpKSB7CgkJCSAgICAgICAganNDZWxsSGVhZGVyLmFzc2lnbkFkZChqc0NlbGxIZWFkZXIsIEludDY0Lk9uZSk7CgkJCSAgICAgICAgd2FzbUJ1ZmZlci5qc0NlbGxIZWFkZXIgPSBqc0NlbGxIZWFkZXIuYXNKU1ZhbHVlKCk7CgkJCSAgICB9CgkJCSAgICAKCQkJICAgIHZhciB3YXNtTWVtUmF3QWRkciA9IHByaW1pdGl2ZXMuYWRkcm9mKHdhc21JbnRlcm5hbE1lbW9yeSk7CgkJCSAgICB2YXIgd2FzbU1lbUFkZHIgPSBBZGQoSW50NjQuZnJvbURvdWJsZSh3YXNtTWVtUmF3QWRkciksIDE2KTsKCQkJICAgIGxvZy5pbmZvKCJGYWtlIFdhc20gSW50ZXJuYWwgTWVtb3J5IEAgIiArIHdhc21NZW1BZGRyKTsKCQkJICAgIHZhciB3YXNtTWVtID0gcHJpbWl0aXZlcy5mYWtlb2JqKHdhc21NZW1BZGRyLmFzRG91YmxlKCkpOwoJCQkgICAgCgkJCSAgICB3YXNtQnVmZmVyLm1lbW9yeSA9IHdhc21NZW07CgkJCSAgICAKCQkJICAgIHZhciBpbXBvcnRPYmplY3QgPSB7CgkJCSAgICAgICAgaW1wb3J0czogewoJCQkgICAgICAgICAgICBtZW06IGZha2VXYXNtQnVmZmVyCgkJCSAgICAgICAgfQoJCQkgICAgfTsKCgkJCSAgICBmdW5jdGlvbiByZWFkX2k2NChyZWFkaW5nRnVuYywgb2Zmc2V0KSB7CgkJCSAgICAgICAgdmFyIGxvdyA9IHJlYWRpbmdGdW5jKG9mZnNldCAqIDQpOwoJCQkgICAgICAgIHZhciBtaWRMb3cgPSByZWFkaW5nRnVuYygob2Zmc2V0ICogNCkgKyAxKTsKCQkJICAgICAgICB2YXIgbWlkSGlnaCA9IHJlYWRpbmdGdW5jKChvZmZzZXQgKiA0KSArIDIpOwoJCQkgICAgICAgIHZhciBoaWdoID0gcmVhZGluZ0Z1bmMoKG9mZnNldCAqIDQpICsgMyk7CgkJCSAgICAgICAgcmV0dXJuIEFkZChTaGlmdExlZnQoQWRkKFNoaWZ0TGVmdChBZGQoU2hpZnRMZWZ0KGhpZ2gsIDIpLCBtaWRIaWdoKSwgMiksIG1pZExvdyksIDIpLCBsb3cpOwoJCQkgICAgfQoJCQkgICAgCgkJCSAgICBmdW5jdGlvbiB3cml0ZV9pNjQod3JpdGluZ0Z1bmMsIG9mZnNldCwgdmFsdWUpIHsKCQkJICAgICAgICB3cml0aW5nRnVuYyhvZmZzZXQgKiA0LCBTaGlmdFJpZ2h0KHZhbHVlLCAwKS5hc0ludDE2KCkpOwoJCQkgICAgICAgIHdyaXRpbmdGdW5jKChvZmZzZXQgKiA0KSArIDEsIFNoaWZ0UmlnaHQodmFsdWUsIDIpLmFzSW50MTYoKSk7CgkJCSAgICAgICAgd3JpdGluZ0Z1bmMoKG9mZnNldCAqIDQpICsgMiwgU2hpZnRSaWdodCh2YWx1ZSwgNCkuYXNJbnQxNigpKTsKCQkJICAgICAgICB3cml0aW5nRnVuYygob2Zmc2V0ICogNCkgKyAzLCBTaGlmdFJpZ2h0KHZhbHVlLCA2KS5hc0ludDE2KCkpOwoJCQkgICAgfQoJCQkgICAgCgkJCSAgICAvLyBDcmVhdGUgd3JpdGVyIGZyb20gT2JqZWN0CgkJCSAgICBmdW5jdGlvbiBjcmVhdGVPYmpXcml0ZXIob2JqKSB7CgkJCSAgICAgICAgd2FzbUludGVybmFsTWVtb3J5Lm1lbW9yeVRvUmVhZCA9IG9iajsKCQkJICAgICAgICB2YXIgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKHdlYkFzc2VtYmx5TW9kdWxlLCBpbXBvcnRPYmplY3QpOwoJCQkgICAgICAgIHJldHVybiB7cmVhZF9pODogbW9kdWxlLmV4cG9ydHMucmVhZF9pOCwgd3JpdGVfaTg6IG1vZHVsZS5leHBvcnRzLndyaXRlX2k4LCByZWFkX2kxNjogbW9kdWxlLmV4cG9ydHMucmVhZF9pMTYsIHdyaXRlX2kxNjogbW9kdWxlLmV4cG9ydHMud3JpdGVfaTE2LCByZWFkX2kzMjogbW9kdWxlLmV4cG9ydHMucmVhZF9pMzIsIHdyaXRlX2kzMjogbW9kdWxlLmV4cG9ydHMud3JpdGVfaTMyLCByZWFkX2k2NDogcmVhZF9pNjQuYmluZChudWxsLCBtb2R1bGUuZXhwb3J0cy5yZWFkX2kxNiksIHdyaXRlX2k2NDogd3JpdGVfaTY0LmJpbmQobnVsbCwgbW9kdWxlLmV4cG9ydHMud3JpdGVfaTE2KSwgbW9kdWxlOiBtb2R1bGV9CgkJCSAgICB9CgkJCSAgICAKCQkJICAgIHZhciBmYWtlV2FzbUludGVybmFsQnVmZmVyV3JpdGVyID0gY3JlYXRlT2JqV3JpdGVyKHdhc21NZW0pOwoJCQkgICAgdmFyIHdhc21JbnRlcm5hbEJ1ZmZlcldyaXRlciA9IGZha2VXYXNtSW50ZXJuYWxCdWZmZXJXcml0ZXI7CgkJCSAgICAKCQkJICAgIC8vIENyZWF0ZSB3cml0ZXIgZnJvbSBhZGRyZXNzCgkJCSAgICBmdW5jdGlvbiBjcmVhdGVEaXJlY3RXcml0ZXIoYWRkcmVzcykgewoJCQkgICAgICAgIHdhc21JbnRlcm5hbEJ1ZmZlcldyaXRlci53cml0ZV9pNjQoMSwgYWRkcmVzcyk7CgkJCSAgICAgICAgdmFyIG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZSh3ZWJBc3NlbWJseU1vZHVsZSwgaW1wb3J0T2JqZWN0KTsKCQkJICAgICAgICByZXR1cm4ge3JlYWRfaTg6IG1vZHVsZS5leHBvcnRzLnJlYWRfaTgsIHdyaXRlX2k4OiBtb2R1bGUuZXhwb3J0cy53cml0ZV9pOCwgcmVhZF9pMTY6IG1vZHVsZS5leHBvcnRzLnJlYWRfaTE2LCB3cml0ZV9pMTY6IG1vZHVsZS5leHBvcnRzLndyaXRlX2kxNiwgcmVhZF9pMzI6IG1vZHVsZS5leHBvcnRzLnJlYWRfaTMyLCB3cml0ZV9pMzI6IG1vZHVsZS5leHBvcnRzLndyaXRlX2kzMiwgcmVhZF9pNjQ6IHJlYWRfaTY0LmJpbmQobnVsbCwgbW9kdWxlLmV4cG9ydHMucmVhZF9pMTYpLCB3cml0ZV9pNjQ6IHdyaXRlX2k2NC5iaW5kKG51bGwsIG1vZHVsZS5leHBvcnRzLndyaXRlX2kxNiksIG1vZHVsZTogbW9kdWxlfQoJCQkgICAgfQoJCQkgICAvLyBOb3cgZWRpdCBvdXIgcmVhbCBXYXNtIG1lbW9yeQoJCQkgICAgdmFyIHJlYWxXYXNtV3JpdGVyID0gY3JlYXRlT2JqV3JpdGVyKHJlYWxXYXNtTWVtKTsKCQkJICAgIHZhciByZWFsV2FzbUludGVybmFsTWVtQWRkciA9IHJlYWxXYXNtV3JpdGVyLnJlYWRfaTY0KDMpOwoKCQkJICAgIGxvZy5pbmZvKCJSZWFsIFdhc20gSW50ZXJuYWwgTWVtb3J5IEAgIiArIHJlYWxXYXNtSW50ZXJuYWxNZW1BZGRyKTsKCQkJICAgIHdhc21JbnRlcm5hbEJ1ZmZlcldyaXRlciA9IGNyZWF0ZURpcmVjdFdyaXRlcihyZWFsV2FzbUludGVybmFsTWVtQWRkcik7CgoJCQkgICAgLy8gQ3JlYXRlIGFuIG9iamVjdCBsZWFrZXIKCQkJICAgIHZhciBsZWFrZXJXcml0ZXIgPSBjcmVhdGVPYmpXcml0ZXIobGVha2VyKTsKCQkJICAgIAoJCQkgICAgLy8gU2V0IHNpemVzIHRvIGxhcmdlIHZhbHVlcwoJCQkgICAgd2FzbUludGVybmFsQnVmZmVyV3JpdGVyLndyaXRlX2k2NCgyLCBuZXcgSW50NjQoJzB4MEZGRkZGRkZGRkZGRkZGRicpKTsKCQkJICAgIHdhc21JbnRlcm5hbEJ1ZmZlcldyaXRlci53cml0ZV9pNjQoMywgbmV3IEludDY0KCcweDBGRkZGRkZGRkZGRkZGRkYnKSk7CgkJCSAgICB3YXNtSW50ZXJuYWxCdWZmZXJXcml0ZXIud3JpdGVfaTY0KDQsIG5ldyBJbnQ2NCgnMHgwRkZGRkZGRkZGRkZGRkZGJykpOwoJCQkgICAgdmFyIHJlYWxJbnRlcm5hbEJ1ZmZlckFkZHIgPSB3YXNtSW50ZXJuYWxCdWZmZXJXcml0ZXIucmVhZF9pNjQoMSk7CgkJCSAgICBpbXBvcnRPYmplY3QuaW1wb3J0cy5tZW0gPSByZWFsV2FzbU1lbTsKCgkJCQlwcmltaXRpdmVzLmFkZHJvZiA9IGZ1bmN0aW9uKG9iaikgewoJCQkgICAgICAgIGxlYWtlci5vYmplY3RUb0xlYWsgPSBvYmo7CgkJCSAgICAgICAgcmV0dXJuIGxlYWtlcldyaXRlci5yZWFkX2k2NCgyKTsKCQkJICAgIH07CgoJCQkgICAgcHJpbWl0aXZlcy5mYWtlb2JqID0gZnVuY3Rpb24oYWRkcikgewoJCQkgICAgICAgIGxlYWtlcldyaXRlci53cml0ZV9pNjQoMiwgYWRkcik7CgkJCSAgICAgICAgcmV0dXJuIGxlYWtlci5vYmplY3RUb0xlYWs7CgkJCSAgICB9OwoKCQkJICAgICAvLyBBbmQgY3JlYXRlT2JqV3JpdGVyCgkJCSAgICBwcmltaXRpdmVzLmNyZWF0ZU9ialdyaXRlciA9IGZ1bmN0aW9uKG9iaikgCgkJCSAgICB7CgoJCQkgICAgICAgCXJldHVybiBjcmVhdGVEaXJlY3RXcml0ZXIocHJpbWl0aXZlcy5hZGRyb2Yob2JqKSk7CgkJCSAgICB9OwoKCQkJICAgIGxvZy5pbmZvKCJDbGVhbmluZyB1cCBzdGFnZSAxLCB0aGlzIG1heSB0YWtlIGEgd2hpbGUuIik7CgkJCSAgICAKCQkJICAgIG1pbGxpcygxMDApOyAvLyBTbGVlcCAxMDBtcwoJCQkgICAgCgkJCSAgICB2YXIgd3JpdGVyID0gcHJpbWl0aXZlcy5jcmVhdGVPYmpXcml0ZXIod2FzbU1lbSk7CgkJCSAgICB3cml0ZXIud3JpdGVfaTY0KDAsIEludDY0Lk9uZSk7CgoJCQkgICAgdmFyIHdhc21CdWZmZXJXcml0ZXIgPSBwcmltaXRpdmVzLmNyZWF0ZU9ialdyaXRlcih3YXNtQnVmZmVyKTsKCQkJICAgIHZhciB3cml0ZXIgPSBwcmltaXRpdmVzLmNyZWF0ZU9ialdyaXRlcih3YXNtSW50ZXJuYWxNZW1vcnkpOwoKCQkJICAgIHdhc21CdWZmZXJXcml0ZXIud3JpdGVfaTY0KDAsIG5ldyBJbnQ2NCgnMHgwMDAwMDAwMDAwMDAwMDA3JykpOyAvLyBEb24ndCBrbm93IHdoeSB0aGlzIHdvcmtzLCBsb2wKCQkJICAgIHdhc21CdWZmZXJXcml0ZXIud3JpdGVfaTY0KDIsIG5ldyBJbnQ2NCgnMHgwMDAwMDAwMDAwMDAwMDA3JykpOwoJCQkgICAgCgkJCSAgICB3cml0ZXIud3JpdGVfaTY0KDQsIEludDY0Llplcm8pOwoJCQkgICAgd3JpdGVyLndyaXRlX2k2NCg1LCBJbnQ2NC5aZXJvKTsKCQkJICAgIHdyaXRlci53cml0ZV9pNjQoNiwgSW50NjQuWmVybyk7CgkJCSAgICB3cml0ZXIud3JpdGVfaTY0KDcsIEludDY0Llplcm8pOwoKCQkJICAgIHdyaXRlci53cml0ZV9pNjQoMCwgbmV3IEludDY0KCcweDAwMDAwMDAwMDAwMDAwMDcnKSk7CgkJCSAgICB3cml0ZXIud3JpdGVfaTY0KDIsIG5ldyBJbnQ2NCgnMHgwMDAwMDAwMDAwMDAwMDA3JykpOwoKCQkJCW1pbGxpcygxMDAwKTsgLy8gU2VlbXMgbW9yZSBzdGFibGUgd2l0aCAxIHNlY29uZCBzbGVlcAoJCQkJCSAgICAKCQkJCWxvZy5pbmZvKCJDbGVhbnVwIGNvbXBsZXRlLiBDcmFmdGluZyBwcmltaXRpdmVzLiIpOwoJCQkJCSAgCQoJCQkJdmFyIG5ld3ByaW1pdGl2ZXMgPSB7fTsKCQkJICAgIG5ld3ByaW1pdGl2ZXMuY3JlYXRlX3dyaXRlciA9IGZ1bmN0aW9uKGFkZHJPYmopIHsKCQkJICAgICAgICBpZiAoYWRkck9iaiBpbnN0YW5jZW9mIEludDY0KSB7CgkJCSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBjcmVhdGVEaXJlY3RXcml0ZXIoYWRkck9iaik7CgkJCSAgICAgICAgICAgIHJldHVybiB3cml0ZXI7CgkJCSAgICAgICAgfSBlbHNlIHsKCQkJICAgICAgICAgICAgdmFyIHdyaXRlciA9IGNyZWF0ZU9ialdyaXRlcihhZGRyT2JqKTsKCQkJICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjsKCQkJICAgICAgICB9CgkJCSAgICB9OwoJCQkgICAgbmV3cHJpbWl0aXZlcy5yZWFkX2k2NCA9IGZ1bmN0aW9uKGFkZHJPYmosIG9mZnNldCkgewoJCQkgICAgICAgICAgICB2YXIgd3JpdGVyID0gbmV3cHJpbWl0aXZlcy5jcmVhdGVfd3JpdGVyKGFkZHJPYmopOwoJCQkgICAgICAgICAgICByZXR1cm4gd3JpdGVyLnJlYWRfaTY0KG9mZnNldCk7CgkJCSAgICB9OwoJCQkgICAgbmV3cHJpbWl0aXZlcy53cml0ZV9pNjQgPSBmdW5jdGlvbihhZGRyT2JqLCBvZmZzZXQsIHZhbHVlKSB7CgkJCSAgICAgICAgdmFyIHdyaXRlciA9IG5ld3ByaW1pdGl2ZXMuY3JlYXRlX3dyaXRlcihhZGRyT2JqKTsKCQkJICAgICAgICB3cml0ZXIud3JpdGVfaTY0KG9mZnNldCwgdmFsdWUpOwoJCQkgICAgfTsKCgkJCSAgICBuZXdwcmltaXRpdmVzLndyaXRlX25vbl96ZXJvID0gZnVuY3Rpb24od2hlcmUsIHZhbHVlcykKCQkJICAgIHsKCQkJICAgIAlmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgKytpKQoJCQkgICAgCXsKCQkJICAgIAkJaWYodmFsdWVzW2ldICE9IDApCgkJCSAgICAJCXsKCQkJICAgIAkJCW5ld3ByaW1pdGl2ZXMud3JpdGVfaTY0KEFkZCh3aGVyZSxpKjgpLDAsIHZhbHVlc1tpXSk7CgkJCSAgICAJCX0KCQkJICAgIAl9CgkJCSAgICB9OwoKCQkJICAgIG5ld3ByaW1pdGl2ZXMucmVhZF9pMzIgPSBmdW5jdGlvbihhZGRyT2JqLCBvZmZzZXQpIHsKCQkJICAgICAgICB2YXIgd3JpdGVyID0gbmV3cHJpbWl0aXZlcy5jcmVhdGVfd3JpdGVyKGFkZHJPYmopOwoJCQkgICAgICAgIHJldHVybiBuZXcgSW50NjQod3JpdGVyLnJlYWRfaTMyKG9mZnNldCkpOwoJCQkgICAgfTsKCQkJICAgIG5ld3ByaW1pdGl2ZXMud3JpdGVfaTMyID0gZnVuY3Rpb24oYWRkck9iaiwgb2Zmc2V0LCB2YWx1ZSkgewoJCQkgICAgICAgIHZhciB3cml0ZXIgPSBuZXdwcmltaXRpdmVzLmNyZWF0ZV93cml0ZXIoYWRkck9iaik7CgkJCSAgICAgICAgd3JpdGVyLndyaXRlX2kzMihvZmZzZXQsIHZhbHVlKTsKCQkJICAgIH07CgkJCSAgICBuZXdwcmltaXRpdmVzLnJlYWRfaTggPSBmdW5jdGlvbihhZGRyT2JqLCBvZmZzZXQpIHsKCQkJICAgICAgICB2YXIgd3JpdGVyID0gbmV3cHJpbWl0aXZlcy5jcmVhdGVfd3JpdGVyKGFkZHJPYmopOwoJCQkgICAgICAgIHJldHVybiB3cml0ZXIucmVhZF9pOChvZmZzZXQpOwoJCQkgICAgfTsKCQkJICAgIG5ld3ByaW1pdGl2ZXMud3JpdGVfaTggPSBmdW5jdGlvbihhZGRyT2JqLCBvZmZzZXQsIHZhbHVlKSB7CgkJCSAgICAgICAgdmFyIHdyaXRlciA9IG5ld3ByaW1pdGl2ZXMuY3JlYXRlX3dyaXRlcihhZGRyT2JqKTsKCQkJICAgICAgICB3cml0ZXIud3JpdGVfaTgob2Zmc2V0LCB2YWx1ZSk7CgkJCSAgICB9OwoJCQkgICAgbmV3cHJpbWl0aXZlcy5jb3B5dG8gPSBmdW5jdGlvbihhZGRyT2JqLCBvZmZzZXQsIGRhdGEsIGxlbmd0aCkgewoJCQkgICAgICAgIHZhciB3cml0ZXIgPSBuZXdwcmltaXRpdmVzLmNyZWF0ZV93cml0ZXIoYWRkck9iaik7CgkJCSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewoJCQkgICAgICAgICAgICB3cml0ZXIud3JpdGVfaTgob2Zmc2V0ICsgaSwgZGF0YVtpXSk7CgkJCSAgICAgICAgfQoJCQkgICAgfTsKCQkJICAgIG5ld3ByaW1pdGl2ZXMuY29weWZyb20gPSBmdW5jdGlvbihhZGRyT2JqLCBvZmZzZXQsIGxlbmd0aCkgewoJCQkgICAgICAgIHZhciB3cml0ZXIgPSBuZXdwcmltaXRpdmVzLmNyZWF0ZV93cml0ZXIoYWRkck9iaik7CgkJCSAgICAgICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7CgkJCSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewoJCQkgICAgICAgICAgICBhcnJbaV0gPSB3cml0ZXIucmVhZF9pOChvZmZzZXQgKyBpKTsKCQkJICAgICAgICB9CgkJCSAgICAgICAgcmV0dXJuIGFycjsKCQkJICAgIH07CgkJCSAgICBuZXdwcmltaXRpdmVzLmFkZHJvZiA9IHdpbmRvdy5wcmltaXRpdmVzLmFkZHJvZjsKCQkJICAgIG5ld3ByaW1pdGl2ZXMuZmFrZW9iaiA9IHdpbmRvdy5wcmltaXRpdmVzLmZha2VvYmo7CgkJCSAgICBsb2cuaW5mbygiR290IHN0YWJsZSBNZW1vcnkgUi9XIik7CgkJCSAgICB3aW5kb3cucHJpbWl0aXZlcyA9IG5ld3ByaW1pdGl2ZXM7CgkJCSAgICByZXR1cm4gdHJ1ZTsKCQkJfTsKCgoJCQl2YXIgc3RhZ2UyID0gZnVuY3Rpb24oX29mZikgCgkJCXsKCQkJCXZhciBwcmltaXRpdmVzID0gd2luZG93LnByaW1pdGl2ZXM7CgoJCQkJLyoKCQkJCSAqIEZ1bmN0aW9uIHRvIHNlZSBpZiB0aGUgZGV2aWNlIGhhcyBDb250cm9sIEZsb3cgSW50ZWdyaXR5IChBMTIrKQoJCQkJKi8KCQkgICAgCXZhciBoYXNQQUMgPSBmdW5jdGlvbigpIHsKCQkJICAgICAgICB2YXIgc2luRnVuY0FkZHIgPSBwcmltaXRpdmVzLmFkZHJvZihNYXRoLnNpbik7CgkJCSAgICAgICAgdmFyIGV4ZWN1dGFibGVBZGRyID0gcHJpbWl0aXZlcy5yZWFkX2k2NChzaW5GdW5jQWRkciwgMyk7CgkJCSAgICAgICAgdmFyIGppdENvZGVBZGRyID0gcHJpbWl0aXZlcy5yZWFkX2k2NChleGVjdXRhYmxlQWRkciwgMyk7CgkJCSAgICAgICAgdmFyIHJ4TWVtQWRkciA9IHByaW1pdGl2ZXMucmVhZF9pNjQoaml0Q29kZUFkZHIsIDQpOwoJCQkgICAgICAgIGlmIChTaGlmdFJpZ2h0KHJ4TWVtQWRkciwgNSkgPT0gMCkgewoJCQkgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vaU9TIFBvaW50ZXIgZnJvbSBTaGFyZWQgTGlicmFyeSBjYWNoZSB3aXRob3V0IFBBQwoJCQkgICAgICAgIH0KCQkJICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTXVzdCBoYXZlIFBBQyB0aGVuLCByaWdodD8KCQkJICAgIH07CgoJCQkgICAgaWYoaGFzUEFDKCkpewoJCQkJCWxvZy5pbmZvKCJEZXRlY3RlZCBkZXZpY2Ugd2l0aCBDRkkuIik7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJbG9nLmRlYnVnKCJEZXRlY3RlZCBkZXZpY2Ugd2l0aG91dCBDRkkuIik7CgkJCQl9CgoJCQkJLyoKCQkJCSAqIFN0cmlwIHRoZSBQb2ludGVyIEF1dGhlbnRpY2F0aW9uIENvZGUgZnJvbSBhbiBhZGRyZXNzLgoJCQkJKi8KCQkJICAgIHByaW1pdGl2ZXMuc3RyaXBwYWMgPSBmdW5jdGlvbihhZGRyKQoJCQkgICAgewoJCQkJICAgIHZhciBfcGFjID0gaGFzUEFDKCk7CgkJCSAgICAJcmV0dXJuIF9wYWMgPyBBbmQoYWRkciwgbmV3IEludDY0KCcweEZGRkZGRkZGOCcpKSA6IGFkZHI7CgkJCSAgICB9OwoJCQkKCQkJCWZ1bmN0aW9uIGdldGppdGZ1bmMoKQoJCQkgICAgewoJCQkJICAgIHZhciBzaGYgPSBtYWtlaml0ZnVuYygpOwoJCQkJICAgIHZhciBzaGZfYWRkciA9IHByaW1pdGl2ZXMuYWRkcm9mKHNoZik7CgkJCQkgICAgbG9nLmluZm8oIlNoZWxsY29kZSBmdW5jdGlvbiBAICIgKyBzaGZfYWRkcik7CgkJCQkgICAgdmFyIHNoZnhfYWRkciA9IHByaW1pdGl2ZXMucmVhZF9pNjQoc2hmX2FkZHIsIDMpOwoJCQkJICAgIGxvZy5pbmZvKCJFeGVjdXRhYmxlIGluc3RhbmNlIEAgIisgc2hmeF9hZGRyKTsKCQkJCSAgICB2YXIgc2hmY19hZGRyID0gcHJpbWl0aXZlcy5yZWFkX2k2NChzaGZ4X2FkZHIsIDMpOwoJCQkJICAgIGxvZy5pbmZvKCJKSVRDb2RlIGluc3RhbmNlIEAgIiArIHNoZmNfYWRkcik7CgkJCQkgICAgdmFyIHNoZl94cmVnaW9uID0gcHJpbWl0aXZlcy5yZWFkX2k2NChzaGZjX2FkZHIsIDQpOwoJCQkJICAgIHNoZl94cmVnaW9uID0gcHJpbWl0aXZlcy5zdHJpcHBhYyhzaGZfeHJlZ2lvbik7CgkJCQkgICAgbG9nLmluZm8oIkV4ZWN1dGFibGUgcmVnaW9uIEAgIiArIHNoZl94cmVnaW9uKTsgCgkJCQkgICAgcmV0dXJuIFtzaGYsIHNoZmNfYWRkciwgc2hmX3hyZWdpb25dOwoJCQkJfTsKCQkJCQoJCQkJLy8gVGhpcyBlbGVtZW50IGlzIHRoZSBlbGVtZW50IHdlIHRhcmdldCBmb3IgbGVha2luZyByYW5kb21pemF0aW9uIGFuZCBleGVjdXRpb24KCQkJCXZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCQl2YXIgZWwgPSBwcmltaXRpdmVzLnJlYWRfaTY0KHdyYXBwZXIsIEZQTyk7CgkJCSAgIAlsb2cuaW5mbygiRWxlbWVudCBAIDB4IitlbCk7CgoJCQkJdmFyIG5hdGl2ZWppdGNvZGUgPSBwcmltaXRpdmVzLnJlYWRfaTY0KGVsLCAwKTsKCQkJCWxvZy5pbmZvKCJHb3QgbmF0aXZlaml0Y29kZSBAICIrbmF0aXZlaml0Y29kZSk7CgkJCQlkeWxkX2NhY2hlX3NsaWRlKF9vZmYubmF0aXZlaml0Y29kZSwgbmF0aXZlaml0Y29kZSk7CgkJCQlzbGlkZSA9IGR5bGRfY2FjaGVfc2xpZGUoKTsKCQkJCQoJCQkJbG9nLmluZm8oIlNsaWRlOiAiKyBoZXhpZnkoc2xpZGUpKTsKCQkJCQoJCQkJdmFyIGppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uQWRkciA9IHNsaWRlYWRkcihfb2ZmLmppdF93cml0ZXNlcGVyYXRlaGVhcHNfZnVuYyk7CgkJCQl2YXIgaml0V3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24gPSBwcmltaXRpdmVzLnJlYWRfaTY0KGppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uQWRkciwgMCk7CgkJCQl2YXIgdXNlRmFzdFBlcm1pc2lvbnNKSVRDb3B5QWRkciA9IHNsaWRlYWRkcihfb2ZmLnVzZWZhc3RwZXJtaXNzaW9uc19qaXRjb3B5KTsKCQkJCXZhciB1c2VGYXN0UGVybWlzaW9uc0pJVENvcHkgPSBwcmltaXRpdmVzLnJlYWRfaTY0KHVzZUZhc3RQZXJtaXNpb25zSklUQ29weUFkZHIsIDApOwoJCQkJCgkJCQlpZiAoIXVzZUZhc3RQZXJtaXNpb25zSklUQ29weSB8fCBqaXRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbikgCgkJCSAgICB7CgkJCSAgICAJbG9nLmluZm8oIkdvdCBhbiBvbGRlciBkZXZpY2UuIFdlIGNhbiB1c2UgdGhlIGxlZ2FjeSBleGVjdXRpb24gZmxvdy4iKTsKCQkJICAgIH0KCQkJICAgIGVsc2UKCQkJICAgIHsKCQkJICAgIAlsb2cuaW5mbygiR290IGFuIGlQaG9uZSA4IG9yIHVwLiBXZSBtdXN0IHVzZSB0aGUgbW9kZXJuIGV4ZWN1dGlvbiBmbG93LiIpOwoJCQkgICAgCXZhciBzaGYgPSBnZXRqaXRmdW5jKCk7CgkJCSAgICAJbG9nLmluZm8oIlRoZSBmbG93IGZvciBpUGhvbmUgOCBhbmQgdXAgbmVlZHMgdG8gYmUgZmluaXNoZWQgZHVlIHRvIGNoYW5nZXMgaW4gbG9uZ2ptcC4gV2Ugd2lsbCBqdW1wIHRvIDB4NDE0MTQxNDEgYXMgYSBkZW1vLiIpOwoJCQkJCXByaW1pdGl2ZXMud3JpdGVfaTY0KHNoZlsxXSwgMCwgMHg0MTQxNDE0MTQxNDE0MTQxKTsKCQkJCQlzaGYoKTsgLy9hc206IGIgMHg0MTQxNDE0MQoJCQkgICAgfQoKCQkJCWxvZy5kZWJ1ZygiRmluZGluZyB0aGUgZXhlY3V0YWJsZSBtZW1vcnlwb29sLiIpOwoJCQkJdmFyIHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sQWRkciA9IHNsaWRlYWRkcihfb2ZmLnN0YXJ0Zml4ZWRtZW1wb29sKTsKCQkJICAgCXZhciBlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xBZGRyID0gc2xpZGVhZGRyKF9vZmYuZW5kZml4ZWRtZW1wb29sKTsKCgkJCSAgIAl2YXIgc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wgPSBwcmltaXRpdmVzLnJlYWRfaTY0KHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sQWRkciwgMCk7CgkJCQl2YXIgZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sID0gQWRkKHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sLCAoMHgyMDAwMC8yKSk7CgoJCQkJdmFyIGpzY2Jhc2UgPSBzbGlkZWFkZHIoX29mZi5qc2NiYXNlKTsKCQkJCXZhciBkaXNhYmxlUHJpbWl0aXZlR2lnYWNhZ2UgPSBzbGlkZWFkZHIoX29mZi5kaXNhYmxlcHJpbWl0aXZlZ2lnYWNhZ2UpOwoKCQkJCXZhciBjYWxsYmFja3MgPSBwcmltaXRpdmVzLnJlYWRfaTY0KHNsaWRlYWRkcihfb2ZmLmNhbGxiYWNrcyksIDApOwoJCQkJdmFyIGdfZ2lnYWNhZ2VCYXNlUHRycyA9IHNsaWRlYWRkcihfb2ZmLmdfZ2lnYWNhZ2ViYXNlcHRycyk7CgoJCSAgICAJdmFyIGdfdHlwZWRBcnJheVBvaXNvbnMgPSBzbGlkZWFkZHIoX29mZi5nX2pzYXJyYXlidWZmZXJwb2lzb24pOwoKCQkgICAgCWxvZy5pbmZvKCdnX3R5cGVkQXJyYXlQb2lzb25zOiAnK2hleGlmeShwcmltaXRpdmVzLnJlYWRfaTY0KGdfdHlwZWRBcnJheVBvaXNvbnMsIDYqOCkpKTsKCgkJCSAgIAl2YXIgbG9uZ2ptcCA9IHNsaWRlYWRkcihfb2ZmLmxvbmdqbXApOwoJCQkgICAgdmFyIGRsc3ltID0gc2xpZGVhZGRyKF9vZmYuZGxzeW0pOwoJCQkgICAgdmFyIHB0cl9zdGFja19jaGtfZ3VhcmQgPSBzbGlkZWFkZHIoX29mZi5wdHJfc3RhY2tfY2hlY2tfZ3VhcmQpOwoJCQkJdmFyIGxpbmtjb2RlX2dhZGdldCA9IHNsaWRlYWRkcihfb2ZmLmxpbmtjb2RlX2dhZGdldCk7CgoJCQkJbG9nLmluZm8oJycKCQkJICAgICAgICArICdcbkFTTFIgU2xpZGUgJyArIGhleGlmeShzbGlkZSkgLy9keWxkIHNoYXJlZCBjYWNoZSBzbGlkZSBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIHZ0YWJsZSBpbmZvbGVhayBtaW51cyB0aGUgdnRhYmxlIG9mZnNldAoJCQkgICAgICAgICsgJ1xuSmF2YVNjcmlwdENvcmUgYmFzZSBAICcgKyAoanNjYmFzZSA9PSBzbGlkZSA/ICJPZmZzZXQgbWlzc2luZyIgOiBoZXhpZnkoanNjYmFzZSkpCgkJCSAgICAgICAgKyAnXG5jYWxsYmFja3MgQCAnICsgKGNhbGxiYWNrcyA9PSBzbGlkZSA/ICJPZmZzZXQgbWlzc2luZyIgOiBoZXhpZnkoY2FsbGJhY2tzKSkgLy9jYWxsYmFjayB2ZWN0b3IKCQkJICAgICAgICArICdcbmxvbmdqbXAgQCAnICsgKGxvbmdqbXAgPT0gc2xpZGUgPyAiT2Zmc2V0IG1pc3NpbmciIDogaGV4aWZ5KGxvbmdqbXApKSAvL3N5bWJvbAoJCQkgICAgICAgICsgJ1xuZGxzeW0gQCAnICsgKGRsc3ltID09IHNsaWRlID8gIk9mZnNldCBtaXNzaW5nIiA6IGhleGlmeShkbHN5bSkpIC8vZGxzeW0gc3ltYm9sLCB1c2VkIGZvciByZWZlcmluY2luZyBhIHN5bWJvbCBieSBzdHJpbmcKCQkJICAgICAgICArICdcbmRpc2FibGVQcmltaXRpdmVHaWdhY2FnZSBAICcgKyAoZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdlID09IHNsaWRlID8gIk9mZnNldCBtaXNzaW5nIiA6IGhleGlmeShkaXNhYmxlUHJpbWl0aXZlR2lnYWNhZ2UpKSAvL3N5bWJvbAoJCQkgICAgICAgICsgJ1xuZ19naWdhY2FnZUJhc2VQdHJzIEAgJyArIChnX2dpZ2FjYWdlQmFzZVB0cnMgPT0gc2xpZGUgPyAiT2Zmc2V0IG1pc3NpbmciIDogaGV4aWZ5KGdfZ2lnYWNhZ2VCYXNlUHRycykpIC8vc3ltYm9sCgkJCSAgICAgICAgKyAnXG5saW5rQ29kZSBnYWRnZXQgQCAnICsgKGxpbmtjb2RlX2dhZGdldCA9PSBzbGlkZSA/ICJPZmZzZXQgbWlzc2luZyIgOiBoZXhpZnkobGlua2NvZGVfZ2FkZ2V0KSkgLy9zeW1ib2wsIHVzZWQgaW4gc3RhZ2UyCgkJCSAgICAgICAgKyAnXG5qaXRfd3JpdGVzZXBlcmF0ZWhlYXBzX2Z1bmMgQCAnICsgKGppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uQWRkciA9PSBzbGlkZSA/ICJPZmZzZXQgbWlzc2luZyIgOiBoZXhpZnkoaml0V3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb25BZGRyKSkKCQkJICAgICAgICArICdcbnVzZUZhc3RQZXJtaXNpb25zSklUQ29weSBAICcgKyAgKHVzZUZhc3RQZXJtaXNpb25zSklUQ29weUFkZHIgPT0gc2xpZGUgPyAiT2Zmc2V0IG1pc3NpbmciIDogaGV4aWZ5KHVzZUZhc3RQZXJtaXNpb25zSklUQ29weUFkZHIpKQoJCQkgICAgICAgICsgJ1xuc3RhcnRmaXhlZG1lbXBvb2wgQCAnICsgKHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sID09IHNsaWRlID8gIk9mZnNldCBtaXNzaW5nIiA6IHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKQoJCQkgICAgICAgICsgJ1xuZW5kZml4ZWRtZW1wb29sIEAgJyArIChlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wgPT0gc2xpZGUgPyAiT2Zmc2V0IG1pc3NpbmciIDogaGV4aWZ5KGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkpCgkJCSAgICAgICAgKyAnXG5wdHJfc3RhY2tfY2hlY2tfZ3VhcmQgQCAnICsgKHB0cl9zdGFja19jaGtfZ3VhcmQgPT0gc2xpZGUgPyAiT2Zmc2V0IG1pc3NpbmciIDogaGV4aWZ5KHB0cl9zdGFja19jaGtfZ3VhcmQpKQoJCQkgICAgKTsKCgkJCQl2YXIgcG9wX3g4ID0gc2xpZGVhZGRyKF9vZmYubW9kZWxpb19wb3B4OCk7CgkJCQlsb2cuaW5mbygicG9wX3g4IGdhZGdldDogIitoZXhpZnkocG9wX3g4KSk7CgoJCQkJdmFyIHBvcF94MiA9IHNsaWRlYWRkcihfb2ZmLmNvcmVhdWRpb19wb3B4Mik7CgkJCQlsb2cuaW5mbygicG9wX3gyIGdhZGdldDogIitoZXhpZnkocG9wX3gyKSk7CgoJCQkJdmFyIGJ1ZmZlcl9hZGRyID0gcHJpbWl0aXZlcy5hZGRyb2Yod29ya2J1Zik7CgkJCQlsb2cuaW5mbygiU2hlbGxjb2RlIGJ1ZmZlciBAICIgK2J1ZmZlcl9hZGRyKTsKCgkJCQl2YXIgc2hlbGxjb2RlX3NyYyA9IEFkZChidWZmZXJfYWRkciwgMHg0MDAwKTsKCQkJCWxvZy5pbmZvKCJTaGVsbGNvZGUgQCAiICsgc2hlbGxjb2RlX3NyYyk7CgoJCQkJdmFyIHNoZWxsY29kZV9kc3QgPSBlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2w7CgkJCQlsb2cuaW5mbygiU2hlbGxjb2RlIHRhcmdldCBAICIgKyBoZXhpZnkoc2hlbGxjb2RlX2RzdCkpOwoKCQkJCWxvZy5kZWJ1ZygiUHJlcGFyaW5nIHNoZWxsY29kZSB3aXRoIGRsc3ltIG9mZnNldC4iKTsKCQkJCXByaW1pdGl2ZXMud3JpdGVfaTY0KHNoZWxsY29kZV9zcmMsIDQsIGRsc3ltKTsKCQkJCXZhciBmYWtlX3N0YWNrID0gWwoJCQkgICAgCQkwLAoJCQkgICAgCQl1MzJfYnVmZmVyLmJ5dGVMZW5ndGgsIC8vIHgyCgkJCSAgICAJCTAsCgoJCQkJICAgIAlwb3BfeDgsCgoJCQkJICAgIAkwLCAwLCAwLCAwLCAwLAoJCQkJICAgIAlzaGVsbGNvZGVfZHN0LCAvLyB4OAoJCQkJICAgIAkwLCAwLCAwLCAwLAoJCQkJICAgIAlwcmltaXRpdmVzLnJlYWRfaTY0KHB0cl9zdGFja19jaGtfZ3VhcmQpICsgMHg1OCwKCgkJCQkgICAgCWxpbmtjb2RlX2dhZGdldCwKCQkJCSAgICAJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKCQkJCSAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKCgkJCQkgICAgICAgIHNoZWxsY29kZV9kc3QsCgkJCQldOwoKCQkJCXUzMl9idWZmZXJbMF0gPSBsb25nam1wICUgQkFTRTMyOwoJCQkJdTMyX2J1ZmZlclsxXSA9IGxvbmdqbXAgLyBCQVNFMzI7CgoJCQkJZm9yKHZhciBpID0gMDsgaSA8IGZha2Vfc3RhY2subGVuZ3RoOyArK2kpCgkJCQl7CgkJCSAgICAJCXUzMl9idWZmZXJbMHgyMDAwLzQgKyAyKmldID0gZmFrZV9zdGFja1tpXSAlIEJBU0UzMgoJCQkJICAgICAgICB1MzJfYnVmZmVyWzB4MjAwMC80ICsgMippKzFdID0gZmFrZV9zdGFja1tpXSAvIEJBU0UzMgoJCQkJfQoKCQkJCXByaW1pdGl2ZXMud3JpdGVfaTMyKGVsLCAwLCBidWZmZXJfYWRkcik7CgkJCQlwcmltaXRpdmVzLndyaXRlX2kzMihlbCwgMTYsIHNoZWxsY29kZV9zcmMpOwoJCQkJcHJpbWl0aXZlcy53cml0ZV9pMzIoZWwsIDY0LCBwb3BfeDIpOwoJCQkJcHJpbWl0aXZlcy53cml0ZV9pMzIoZWwsIDgwLCBBZGQoYnVmZmVyX2FkZHIsIDB4MjAwMCkpOwoKCS8vCQkgICAJcHJpbWl0aXZlcy5jb3B5dG8oZWwsIDAsIHJvcGNoYWluLmJ1ZmZlciwgcm9wY2hhaW4uYnVmZmVyLmJ5dGVMZW5ndGgpOwoKCQkJCXJldHVybiB3cmFwcGVyOwoJCQl9CgoJCQlmdW5jdGlvbiBnbygpCgkJCXsKCQkJCXRyeQoJCQkJewoJCQkJCWRpc2FibGVCdG4oKTsKCgkJCQkJdXBkYXRlU3RhdHVzKCdJbml0aWFsaXppbmcgZXhwbG9pdC4uLicpOwoJCQkJCXZhciBub3RocmVhZF8xID0gc2V0VGltZW91dChmdW5jdGlvbigpewoJCQkJCQl3aW5kb3cucHJlc3RhZ2UgPSBpbml0KCk7CgkJCQkJCW1pbGxpcygxMDApOwoJCQkJCQl1cGRhdGVTdGF0dXMoJ1N0YWdlMS4uLicpOwoJCQkJCQl2YXIgbm90aHJlYWRfMiA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKCQkJCQkJCQlpZighc3RhZ2UxKCkpCgkJCQkJCQkJewoJCQkJCQkJCQl0aHJvdyAiU3RhZ2UgMSBoYXMgZmFpbGVkLiI7CgkJCQkJCQkJfQoJCQkJCQkJCW1pbGxpcygxMDApOwoJCQkJCQkJCXVwZGF0ZVN0YXR1cygnU3RhZ2UyLi4uJyk7CgkJCQkJCQkJdmFyIG5vdGhyZWFkXzMgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CgkJCQkJCQkJCXZhciBtYWNoX3N3YXAgPSBzdGFnZTIocHJlc3RhZ2Uub2Zmc2V0cyk7CgkJCQkJCQkJCXVwZGF0ZVN0YXR1cygnRXhlY3V0aW5nIHBheWxvYWQuLi4nKTsKCQkJCQkJCQkJbWlsbGlzKDEwMCk7CgkJCQkJCQkJCXZhciBub3RocmVhZF80ID0gc2V0VGltZW91dChmdW5jdGlvbigpewoJCQkJCQkJCQkJbWFjaF9zd2FwLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXt9KTsKCQkJCQkJCQkJCW1pbGxpcygzMjAwMCk7CgkJCQkJCQkJCQl1cGRhdGVTdGF0dXMoJ0RvbmUuJyk7CgkJCQkJCQkJCQltaWxsaXMoNCk7CgkJCQkJCQkJCQlyZXNwcmluZygpOwoJCQkJCQkJCQl9LCAxMDApOwoJCQkJCQkJfSwgMTAwKTsKCQkJCQkJfSwgMTAwKTsKCQkJCQl9LCAxMDApOwoJCQkKCQkJCQkvL2VuYWJsZUJ0bigpOwoJCQkJfQoJCQkJY2F0Y2goZXgpCgkJCQl7CgkJCQkJYWxlcnQoKGV4Lm1lc3NhZ2UgfHwgIk5vIG1lc3NhZ2UiKSArICJcbiIgKyAoZXguc3RhY2sgfHwgIk5vIGNhbGxzdGFjayIpKTsKCQkJCQl0aHJvdyBleDsKCQkJCX0KCQkJfTsKCQl9IAoJCWNhdGNoKGV4KQoJCXsKCQkJYWxlcnQoIlRoZSBwcm9nYW0gbG9hZCBjb250YWlucyBhIGJ1ZywgaGVyZSBpcyB0aGUgdHJhY2U6ICIrZXgubWVzc2FnZSsnXG4nK2V4LnN0YWNrKTsKCQl9CgkJPC9zY3JpcHQ+Cgk8L2hlYWQ+Cgk8Ym9keT4KCQk8aGVhZGVyPgoJCQk8aDE+V2Via2l0IGlPUyA8PSAxMi4xLjEgUkNFPC9oMT4KCQkJPHA+VGhhbmtzIHRvIExpbnVzIEhlbnplLCBOaWtsYXMgQmF1bXN0YXJrLCBMdWNhIFRvZGVzY28gYW5kIEJlbiBTcGFya2VzPC9wPgoJCTwvaGVhZGVyPgoJCTxtYWluPgoJCQk8YnV0dG9uIGlkPSJidG4iIG9uY2xpY2s9ImdvKCkiPnJ1biBleHBsb2l0PC9idXR0b24+CgkJCTxici8+CgkJCTxidXR0b24gaWQ9InJlc3ByaW5nIiBvbmNsaWNrPSJyZXNwcmluZygpIj5yZXNwcmluZzwvYnV0dG9uPgoJCQk8YnIvPgoJCQk8YnV0dG9uIGlkPSJyZWJvb3QiIG9uY2xpY2s9InJlYm9vdCgpIj5yZWJvb3Q8L2J1dHRvbj4KCQk8L21haW4+CgkJPGZvb3Rlcj4KCQkJPHA+CgkJCQlOTyBSRVNQT05TSUJJTElUWSBJUyBIRUxEIEZPUiBBTlkgREFNQUdFIENBVVNFRCBCWSBUSElTIFNDUklQVC4gVEhJUyBTQ1JJUFQgR0FJTlMgS0VSTkVMIENPREUgRVhFQ1VUSU9OIElOIFlPVVIgQlJPV1NFUi4gTk8gR1VBUkFOVEVFUyBFSVRIRVIuIEJZIFBSRVNTSU5HIEdPIFlPVSBBR1JFRSBUTyBUSEVTRSBURVJNUy4KCQkJPC9wPgoJCTwvZm9vdGVyPgoJPC9ib2R5Pgo8L2h0bWw+Cg==
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top