3MtyqKjRwAjEgTuxxdGBA4Y1LX4g4ECMkSW · data · main.js_0
{
    "main.js_0": "base64:LyoNCiAgIENvcHlyaWdodCAyMDE0IE5lYmV6IEJyaWVma2FuaQ0KICAgZmxvcHB5YmlyZCAtIG1haW4uanMNCg0KICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCnZhciBkZWJ1Z21vZGUgPSBmYWxzZTsNCg0KdmFyIHN0YXRlcyA9IE9iamVjdC5mcmVlemUoew0KICAgU3BsYXNoU2NyZWVuOiAwLA0KICAgR2FtZVNjcmVlbjogMSwNCiAgIFNjb3JlU2NyZWVuOiAyDQp9KTsNCg0KdmFyIGN1cnJlbnRzdGF0ZTsNCg0KdmFyIGdyYXZpdHkgPSAwLjI1Ow0KdmFyIHZlbG9jaXR5ID0gMDsNCnZhciBwb3NpdGlvbiA9IDE4MDsNCnZhciByb3RhdGlvbiA9IDA7DQp2YXIganVtcCA9IC00LjY7DQp2YXIgZmx5QXJlYSA9ICQoIiNmbHlhcmVhIikuaGVpZ2h0KCk7DQoNCnZhciBzY29yZSA9IDA7DQp2YXIgaGlnaHNjb3JlID0gMDsNCg0KdmFyIHBpcGVoZWlnaHQgPSA5MDsNCnZhciBwaXBld2lkdGggPSA1MjsNCnZhciBwaXBlcyA9IG5ldyBBcnJheSgpOw0KDQp2YXIgcmVwbGF5Y2xpY2thYmxlID0gZmFsc2U7DQoNCi8vc291bmRzDQp2YXIgdm9sdW1lID0gMzA7DQp2YXIgc291bmRKdW1wID0gbmV3IGJ1enouc291bmQoImh0dHBzOi8vbm9kZXMtdGVzdG5ldC53YXZlc25vZGVzLmNvbS9hZGRyZXNzZXMvZGF0YS93ZWIlMkJkJTNBJTJGJTJGM01zUzNvRFh4cURKMnZtemN2QlFlUUxrVGhtTW11b2pONzQlMkZzZnhfd2luZy5vZ2dfY291bnQiKTsNCnZhciBzb3VuZFNjb3JlID0gbmV3IGJ1enouc291bmQoImh0dHBzOi8vbm9kZXMtdGVzdG5ldC53YXZlc25vZGVzLmNvbS9hZGRyZXNzZXMvZGF0YS93ZWIlMkJkJTNBJTJGJTJGM01zUzNvRFh4cURKMnZtemN2QlFlUUxrVGhtTW11b2pONzQlMkZzZnhfcG9pbnQub2dnX2NvdW50Iik7DQp2YXIgc291bmRIaXQgPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9oaXQub2dnX2NvdW50Iik7DQp2YXIgc291bmREaWUgPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9kaWUub2dnX2NvdW50Iik7DQp2YXIgc291bmRTd29vc2ggPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9zd29vc2hpbmcub2dnX2NvdW50Iik7DQpidXp6LmFsbCgpLnNldFZvbHVtZSh2b2x1bWUpOw0KDQovL2xvb3BzDQp2YXIgbG9vcEdhbWVsb29wOw0KdmFyIGxvb3BQaXBlbG9vcDsNCg0KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQogICBpZih3aW5kb3cubG9jYXRpb24uc2VhcmNoID09ICI/ZGVidWciKQ0KICAgICAgZGVidWdtb2RlID0gdHJ1ZTsNCiAgIGlmKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPT0gIj9lYXN5IikNCiAgICAgIHBpcGVoZWlnaHQgPSAyMDA7DQogICANCiAgIC8vZ2V0IHRoZSBoaWdoc2NvcmUNCiAgIHZhciBzYXZlZHNjb3JlID0gZ2V0Q29va2llKCJoaWdoc2NvcmUiKTsNCiAgIGlmKHNhdmVkc2NvcmUgIT0gIiIpDQogICAgICBoaWdoc2NvcmUgPSBwYXJzZUludChzYXZlZHNjb3JlKTsNCiAgIA0KICAgLy9zdGFydCB3aXRoIHRoZSBzcGxhc2ggc2NyZWVuDQogICBzaG93U3BsYXNoKCk7DQp9KTsNCg0KZnVuY3Rpb24gZ2V0Q29va2llKGNuYW1lKQ0Kew0KICAgdmFyIG5hbWUgPSBjbmFtZSArICI9IjsNCiAgIHZhciBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOw0KICAgZm9yKHZhciBpPTA7IGk8Y2EubGVuZ3RoOyBpKyspIA0KICAgew0KICAgICAgdmFyIGMgPSBjYVtpXS50cmltKCk7DQogICAgICBpZiAoYy5pbmRleE9mKG5hbWUpPT0wKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZS5sZW5ndGgsYy5sZW5ndGgpOw0KICAgfQ0KICAgcmV0dXJuICIiOw0KfQ0KDQpmdW5jdGlvbiBzZXRDb29raWUoY25hbWUsY3ZhbHVlLGV4ZGF5cykNCnsNCiAgIHZhciBkID0gbmV3IERhdGUoKTsNCiAgIGQuc2V0VGltZShkLmdldFRpbWUoKSsoZXhkYXlzKjI0KjYwKjYwKjEwMDApKTsNCiAgIHZhciBleHBpcmVzID0gImV4cGlyZXM9IitkLnRvR01UU3RyaW5nKCk7DQogICBkb2N1bWVudC5jb29raWUgPSBjbmFtZSArICI9IiArIGN2YWx1ZSArICI7ICIgKyBleHBpcmVzOw0KfQ0KDQpmdW5jdGlvbiBzaG93U3BsYXNoKCkNCnsNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5TcGxhc2hTY3JlZW47DQogICANCiAgIC8vc2V0IHRoZSBkZWZhdWx0cyAoYWdhaW4pDQogICB2ZWxvY2l0eSA9IDA7DQogICBwb3NpdGlvbiA9IDE4MDsNCiAgIHJvdGF0aW9uID0gMDsNCiAgIHNjb3JlID0gMDsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllciBpbiBwcmVwYXJhdGlvbiBmb3IgdGhlIG5leHQgZ2FtZQ0KICAgJCgiI3BsYXllciIpLmNzcyh7IHk6IDAsIHg6IDB9KTsNCiAgIHVwZGF0ZVBsYXllcigkKCIjcGxheWVyIikpOw0KICAgDQogICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICANCiAgIC8vY2xlYXIgb3V0IGFsbCB0aGUgcGlwZXMgaWYgdGhlcmUgYXJlIGFueQ0KICAgJCgiLnBpcGUiKS5yZW1vdmUoKTsNCiAgIHBpcGVzID0gbmV3IEFycmF5KCk7DQogICANCiAgIC8vbWFrZSBldmVyeXRoaW5nIGFuaW1hdGVkIGFnYWluDQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3J1bm5pbmcnKTsNCiAgICQoIi5hbmltYXRlZCIpLmNzcygnLXdlYmtpdC1hbmltYXRpb24tcGxheS1zdGF0ZScsICdydW5uaW5nJyk7DQogICANCiAgIC8vZmFkZSBpbiB0aGUgc3BsYXNoDQogICAkKCIjc3BsYXNoIikudHJhbnNpdGlvbih7IG9wYWNpdHk6IDEgfSwgMjAwMCwgJ2Vhc2UnKTsNCn0NCg0KZnVuY3Rpb24gc3RhcnRHYW1lKCkNCnsNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5HYW1lU2NyZWVuOw0KICAgDQogICAvL2ZhZGUgb3V0IHRoZSBzcGxhc2gNCiAgICQoIiNzcGxhc2giKS5zdG9wKCk7DQogICAkKCIjc3BsYXNoIikudHJhbnNpdGlvbih7IG9wYWNpdHk6IDAgfSwgNTAwLCAnZWFzZScpOw0KICAgDQogICAvL3VwZGF0ZSB0aGUgYmlnIHNjb3JlDQogICBzZXRCaWdTY29yZSgpOw0KICAgDQogICAvL2RlYnVnIG1vZGU/DQogICBpZihkZWJ1Z21vZGUpDQogICB7DQogICAgICAvL3Nob3cgdGhlIGJvdW5kaW5nIGJveGVzDQogICAgICAkKCIuYm91bmRpbmdib3giKS5zaG93KCk7DQogICB9DQoNCiAgIC8vc3RhcnQgdXAgb3VyIGxvb3BzDQogICB2YXIgdXBkYXRlcmF0ZSA9IDEwMDAuMCAvIDYwLjAgOyAvLzYwIHRpbWVzIGEgc2Vjb25kDQogICBsb29wR2FtZWxvb3AgPSBzZXRJbnRlcnZhbChnYW1lbG9vcCwgdXBkYXRlcmF0ZSk7DQogICBsb29wUGlwZWxvb3AgPSBzZXRJbnRlcnZhbCh1cGRhdGVQaXBlcywgMTQwMCk7DQogICANCiAgIC8vanVtcCBmcm9tIHRoZSBzdGFydCENCiAgIHBsYXllckp1bXAoKTsNCn0NCg0KZnVuY3Rpb24gdXBkYXRlUGxheWVyKHBsYXllcikNCnsNCiAgIC8vcm90YXRpb24NCiAgIHJvdGF0aW9uID0gTWF0aC5taW4oKHZlbG9jaXR5IC8gMTApICogOTAsIDkwKTsNCiAgIA0KICAgLy9hcHBseSByb3RhdGlvbiBhbmQgcG9zaXRpb24NCiAgICQocGxheWVyKS5jc3MoeyByb3RhdGU6IHJvdGF0aW9uLCB0b3A6IHBvc2l0aW9uIH0pOw0KfQ0KDQpmdW5jdGlvbiBnYW1lbG9vcCgpIHsNCiAgIHZhciBwbGF5ZXIgPSAkKCIjcGxheWVyIik7DQogICANCiAgIC8vdXBkYXRlIHRoZSBwbGF5ZXIgc3BlZWQvcG9zaXRpb24NCiAgIHZlbG9jaXR5ICs9IGdyYXZpdHk7DQogICBwb3NpdGlvbiArPSB2ZWxvY2l0eTsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllcg0KICAgdXBkYXRlUGxheWVyKHBsYXllcik7DQogICANCiAgIC8vY3JlYXRlIHRoZSBib3VuZGluZyBib3gNCiAgIHZhciBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVyJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7DQogICB2YXIgb3JpZ3dpZHRoID0gMzQuMDsNCiAgIHZhciBvcmlnaGVpZ2h0ID0gMjQuMDsNCiAgIA0KICAgdmFyIGJveHdpZHRoID0gb3JpZ3dpZHRoIC0gKE1hdGguc2luKE1hdGguYWJzKHJvdGF0aW9uKSAvIDkwKSAqIDgpOw0KICAgdmFyIGJveGhlaWdodCA9IChvcmlnaGVpZ2h0ICsgYm94LmhlaWdodCkgLyAyOw0KICAgdmFyIGJveGxlZnQgPSAoKGJveC53aWR0aCAtIGJveHdpZHRoKSAvIDIpICsgYm94LmxlZnQ7DQogICB2YXIgYm94dG9wID0gKChib3guaGVpZ2h0IC0gYm94aGVpZ2h0KSAvIDIpICsgYm94LnRvcDsNCiAgIHZhciBib3hyaWdodCA9IGJveGxlZnQgKyBib3h3aWR0aDsNCiAgIHZhciBib3hib3R0b20gPSBib3h0b3AgKyBib3hoZWlnaHQ7DQogICANCiAgIC8vaWYgd2UncmUgaW4gZGVidWcgbW9kZSwgZHJhdyB0aGUgYm91bmRpbmcgYm94DQogICBpZihkZWJ1Z21vZGUpDQogICB7DQogICAgICB2YXIgYm91bmRpbmdib3ggPSAkKCIjcGxheWVyYm94Iik7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2xlZnQnLCBib3hsZWZ0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygndG9wJywgYm94dG9wKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnaGVpZ2h0JywgYm94aGVpZ2h0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnd2lkdGgnLCBib3h3aWR0aCk7DQogICB9DQogICANCiAgIC8vZGlkIHdlIGhpdCB0aGUgZ3JvdW5kPw0KICAgaWYoYm94LmJvdHRvbSA+PSAkKCIjbGFuZCIpLm9mZnNldCgpLnRvcCkNCiAgIHsNCiAgICAgIHBsYXllckRlYWQoKTsNCiAgICAgIHJldHVybjsNCiAgIH0NCiAgIA0KICAgLy9oYXZlIHRoZXkgdHJpZWQgdG8gZXNjYXBlIHRocm91Z2ggdGhlIGNlaWxpbmc/IDpvDQogICB2YXIgY2VpbGluZyA9ICQoIiNjZWlsaW5nIik7DQogICBpZihib3h0b3AgPD0gKGNlaWxpbmcub2Zmc2V0KCkudG9wICsgY2VpbGluZy5oZWlnaHQoKSkpDQogICAgICBwb3NpdGlvbiA9IDA7DQogICANCiAgIC8vd2UgY2FuJ3QgZ28gYW55IGZ1cnRoZXIgd2l0aG91dCBhIHBpcGUNCiAgIGlmKHBpcGVzWzBdID09IG51bGwpDQogICAgICByZXR1cm47DQogICANCiAgIC8vZGV0ZXJtaW5lIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIG5leHQgcGlwZXMgaW5uZXIgYXJlYQ0KICAgdmFyIG5leHRwaXBlID0gcGlwZXNbMF07DQogICB2YXIgbmV4dHBpcGV1cHBlciA9IG5leHRwaXBlLmNoaWxkcmVuKCIucGlwZV91cHBlciIpOw0KICAgDQogICB2YXIgcGlwZXRvcCA9IG5leHRwaXBldXBwZXIub2Zmc2V0KCkudG9wICsgbmV4dHBpcGV1cHBlci5oZWlnaHQoKTsNCiAgIHZhciBwaXBlbGVmdCA9IG5leHRwaXBldXBwZXIub2Zmc2V0KCkubGVmdCAtIDI7IC8vIGZvciBzb21lIHJlYXNvbiBpdCBzdGFydHMgYXQgdGhlIGlubmVyIHBpcGVzIG9mZnNldCwgbm90IHRoZSBvdXRlciBwaXBlcy4NCiAgIHZhciBwaXBlcmlnaHQgPSBwaXBlbGVmdCArIHBpcGV3aWR0aDsNCiAgIHZhciBwaXBlYm90dG9tID0gcGlwZXRvcCArIHBpcGVoZWlnaHQ7DQogICANCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIHZhciBib3VuZGluZ2JveCA9ICQoIiNwaXBlYm94Iik7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2xlZnQnLCBwaXBlbGVmdCk7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ3RvcCcsIHBpcGV0b3ApOw0KICAgICAgYm91bmRpbmdib3guY3NzKCdoZWlnaHQnLCBwaXBlaGVpZ2h0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnd2lkdGgnLCBwaXBld2lkdGgpOw0KICAgfQ0KICAgDQogICAvL2hhdmUgd2UgZ290dGVuIGluc2lkZSB0aGUgcGlwZSB5ZXQ/DQogICBpZihib3hyaWdodCA+IHBpcGVsZWZ0KQ0KICAgew0KICAgICAgLy93ZSdyZSB3aXRoaW4gdGhlIHBpcGUsIGhhdmUgd2UgcGFzc2VkIGJldHdlZW4gdXBwZXIgYW5kIGxvd2VyIHBpcGVzPw0KICAgICAgaWYoYm94dG9wID4gcGlwZXRvcCAmJiBib3hib3R0b20gPCBwaXBlYm90dG9tKQ0KICAgICAgew0KICAgICAgICAgLy95ZWFoISB3ZSdyZSB3aXRoaW4gYm91bmRzDQogICAgICAgICANCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgIC8vbm8hIHdlIHRvdWNoZWQgdGhlIHBpcGUNCiAgICAgICAgIHBsYXllckRlYWQoKTsNCiAgICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgIH0NCiAgIA0KICAgDQogICAvL2hhdmUgd2UgcGFzc2VkIHRoZSBpbW1pbmVudCBkYW5nZXI/DQogICBpZihib3hsZWZ0ID4gcGlwZXJpZ2h0KQ0KICAgew0KICAgICAgLy95ZXMsIHJlbW92ZSBpdA0KICAgICAgcGlwZXMuc3BsaWNlKDAsIDEpOw0KICAgICAgDQogICAgICAvL2FuZCBzY29yZSBhIHBvaW50DQogICAgICBwbGF5ZXJTY29yZSgpOw0KICAgfQ0KfQ0KDQovL0hhbmRsZSBzcGFjZSBiYXINCiQoZG9jdW1lbnQpLmtleWRvd24oZnVuY3Rpb24oZSl7DQogICAvL3NwYWNlIGJhciENCiAgIGlmKGUua2V5Q29kZSA9PSAzMikNCiAgIHsNCiAgICAgIC8vaW4gU2NvcmVTY3JlZW4sIGhpdHRpbmcgc3BhY2Ugc2hvdWxkIGNsaWNrIHRoZSAicmVwbGF5IiBidXR0b24uIGVsc2UgaXQncyBqdXN0IGEgcmVndWxhciBzcGFjZWJhciBoaXQNCiAgICAgIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuU2NvcmVTY3JlZW4pDQogICAgICAgICAkKCIjcmVwbGF5IikuY2xpY2soKTsNCiAgICAgIGVsc2UNCiAgICAgICAgIHNjcmVlbkNsaWNrKCk7DQogICB9DQp9KTsNCg0KLy9IYW5kbGUgbW91c2UgZG93biBPUiB0b3VjaCBzdGFydA0KaWYoIm9udG91Y2hzdGFydCIgaW4gd2luZG93KQ0KICAgJChkb2N1bWVudCkub24oInRvdWNoc3RhcnQiLCBzY3JlZW5DbGljayk7DQplbHNlDQogICAkKGRvY3VtZW50KS5vbigibW91c2Vkb3duIiwgc2NyZWVuQ2xpY2spOw0KDQpmdW5jdGlvbiBzY3JlZW5DbGljaygpDQp7DQogICBpZihjdXJyZW50c3RhdGUgPT0gc3RhdGVzLkdhbWVTY3JlZW4pDQogICB7DQogICAgICBwbGF5ZXJKdW1wKCk7DQogICB9DQogICBlbHNlIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuU3BsYXNoU2NyZWVuKQ0KICAgew0KICAgICAgc3RhcnRHYW1lKCk7DQogICB9DQp9DQoNCmZ1bmN0aW9uIHBsYXllckp1bXAoKQ0Kew0KICAgdmVsb2NpdHkgPSBqdW1wOw0KICAgLy9wbGF5IGp1bXAgc291bmQNCiAgIHNvdW5kSnVtcC5zdG9wKCk7DQogICBzb3VuZEp1bXAucGxheSgpOw0KfQ0KDQpmdW5jdGlvbiBzZXRCaWdTY29yZShlcmFzZSkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjYmlnc2NvcmUiKTsNCiAgIGVsZW1zY29yZS5lbXB0eSgpOw0KICAgDQogICBpZihlcmFzZSkNCiAgICAgIHJldHVybjsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdodHRwczovL25vZGVzLXRlc3RuZXQud2F2ZXNub2Rlcy5jb20vYWRkcmVzc2VzL2RhdGEvd2ViJTJCZCUzQSUyRiUyRjNNc1Mzb0RYeHFESjJ2bXpjdkJRZVFMa1RobU1tdW9qTjc0JTJGZm9udF9iaWdfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0U21hbGxTY29yZSgpDQp7DQogICB2YXIgZWxlbXNjb3JlID0gJCgiI2N1cnJlbnRzY29yZSIpOw0KICAgZWxlbXNjb3JlLmVtcHR5KCk7DQogICANCiAgIHZhciBkaWdpdHMgPSBzY29yZS50b1N0cmluZygpLnNwbGl0KCcnKTsNCiAgIGZvcih2YXIgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyBpKyspDQogICAgICBlbGVtc2NvcmUuYXBwZW5kKCI8aW1nIHNyYz0naHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRmZvbnRfc21hbGxfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0SGlnaFNjb3JlKCkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjaGlnaHNjb3JlIik7DQogICBlbGVtc2NvcmUuZW1wdHkoKTsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IGhpZ2hzY29yZS50b1N0cmluZygpLnNwbGl0KCcnKTsNCiAgIGZvcih2YXIgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyBpKyspDQogICAgICBlbGVtc2NvcmUuYXBwZW5kKCI8aW1nIHNyYz0naHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRmZvbnRfc21hbGxfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0TWVkYWwoKQ0Kew0KICAgdmFyIGVsZW1tZWRhbCA9ICQoIiNtZWRhbCIpOw0KICAgZWxlbW1lZGFsLmVtcHR5KCk7DQogICANCiAgIGlmKHNjb3JlIDwgMTApDQogICAgICAvL3NpZ25hbCB0aGF0IG5vIG1lZGFsIGhhcyBiZWVuIHdvbg0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgDQogICBpZihzY29yZSA+PSAxMCkNCiAgICAgIG1lZGFsID0gImJyb256ZSI7DQogICBpZihzY29yZSA+PSAyMCkNCiAgICAgIG1lZGFsID0gInNpbHZlciI7DQogICBpZihzY29yZSA+PSAzMCkNCiAgICAgIG1lZGFsID0gImdvbGQiOw0KICAgaWYoc2NvcmUgPj0gNDApDQogICAgICBtZWRhbCA9ICJwbGF0aW51bSI7DQogICANCiAgIGVsZW1tZWRhbC5hcHBlbmQoJzxpbWcgc3JjPSJodHRwczovL25vZGVzLXRlc3RuZXQud2F2ZXNub2Rlcy5jb20vYWRkcmVzc2VzL2RhdGEvd2ViJTJCZCUzQSUyRiUyRjNNc1Mzb0RYeHFESjJ2bXpjdkJRZVFMa1RobU1tdW9qTjc0JTJGbWVkYWxfJyArIG1lZGFsICsnLnBuZ19jb3VudCIgYWx0PSInICsgbWVkYWwgKyciPicpOw0KICAgDQogICAvL3NpZ25hbCB0aGF0IGEgbWVkYWwgaGFzIGJlZW4gd29uDQogICByZXR1cm4gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gcGxheWVyRGVhZCgpDQp7DQogICAvL3N0b3AgYW5pbWF0aW5nIGV2ZXJ5dGhpbmchDQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3BhdXNlZCcpOw0KICAgJCgiLmFuaW1hdGVkIikuY3NzKCctd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3BhdXNlZCcpOw0KICAgDQogICAvL2Ryb3AgdGhlIGJpcmQgdG8gdGhlIGZsb29yDQogICB2YXIgcGxheWVyYm90dG9tID0gJCgiI3BsYXllciIpLnBvc2l0aW9uKCkudG9wICsgJCgiI3BsYXllciIpLndpZHRoKCk7IC8vd2UgdXNlIHdpZHRoIGJlY2F1c2UgaGUnbGwgYmUgcm90YXRlZCA5MCBkZWcNCiAgIHZhciBmbG9vciA9IGZseUFyZWE7DQogICB2YXIgbW92ZXkgPSBNYXRoLm1heCgwLCBmbG9vciAtIHBsYXllcmJvdHRvbSk7DQogICAkKCIjcGxheWVyIikudHJhbnNpdGlvbih7IHk6IG1vdmV5ICsgJ3B4Jywgcm90YXRlOiA5MH0sIDEwMDAsICdlYXNlSW5PdXRDdWJpYycpOw0KICAgDQogICAvL2l0J3MgdGltZSB0byBjaGFuZ2Ugc3RhdGVzLiBhcyBvZiBub3cgd2UncmUgY29uc2lkZXJlZCBTY29yZVNjcmVlbiB0byBkaXNhYmxlIGxlZnQgY2xpY2svZmx5aW5nDQogICBjdXJyZW50c3RhdGUgPSBzdGF0ZXMuU2NvcmVTY3JlZW47DQoNCiAgIC8vZGVzdHJveSBvdXIgZ2FtZWxvb3BzDQogICBjbGVhckludGVydmFsKGxvb3BHYW1lbG9vcCk7DQogICBjbGVhckludGVydmFsKGxvb3BQaXBlbG9vcCk7DQogICBsb29wR2FtZWxvb3AgPSBudWxsOw0KICAgbG9vcFBpcGVsb29wID0gbnVsbDsNCg0KICAgLy9tb2JpbGUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBidXp6IGJpbmRPbmNlIGV2ZW50DQogICBpZihpc0luY29tcGF0aWJsZS5hbnkoKSkNCiAgIHsNCiAgICAgIC8vc2tpcCByaWdodCB0byBzaG93aW5nIHNjb3JlDQogICAgICBzaG93U2NvcmUoKTsNCiAgIH0NCiAgIGVsc2UNCiAgIHsNCiAgICAgIC8vcGxheSB0aGUgaGl0IHNvdW5kICh0aGVuIHRoZSBkZWFkIHNvdW5kKSBhbmQgdGhlbiBzaG93IHNjb3JlDQogICAgICBzb3VuZEhpdC5wbGF5KCkuYmluZE9uY2UoImVuZGVkIiwgZnVuY3Rpb24oKSB7DQogICAgICAgICBzb3VuZERpZS5wbGF5KCkuYmluZE9uY2UoImVuZGVkIiwgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICBzaG93U2NvcmUoKTsNCiAgICAgICAgIH0pOw0KICAgICAgfSk7DQogICB9DQp9DQoNCmZ1bmN0aW9uIHNob3dTY29yZSgpDQp7DQogICAvL3VuaGlkZSB1cw0KICAgJCgiI3Njb3JlYm9hcmQiKS5jc3MoImRpc3BsYXkiLCAiYmxvY2siKTsNCiAgIA0KICAgLy9yZW1vdmUgdGhlIGJpZyBzY29yZQ0KICAgc2V0QmlnU2NvcmUodHJ1ZSk7DQogICANCiAgIC8vaGF2ZSB0aGV5IGJlYXRlbiB0aGVpciBoaWdoIHNjb3JlPw0KICAgaWYoc2NvcmUgPiBoaWdoc2NvcmUpDQogICB7DQogICAgICAvL3llYWghDQogICAgICBoaWdoc2NvcmUgPSBzY29yZTsNCiAgICAgIC8vc2F2ZSBpdCENCiAgICAgIHNldENvb2tpZSgiaGlnaHNjb3JlIiwgaGlnaHNjb3JlLCA5OTkpOw0KICAgfQ0KICAgDQogICAvL3VwZGF0ZSB0aGUgc2NvcmVib2FyZA0KICAgc2V0U21hbGxTY29yZSgpOw0KICAgc2V0SGlnaFNjb3JlKCk7DQogICB2YXIgd29ubWVkYWwgPSBzZXRNZWRhbCgpOw0KICAgDQogICAvL1NXT09TSCENCiAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgIA0KICAgLy9zaG93IHRoZSBzY29yZWJvYXJkDQogICAkKCIjc2NvcmVib2FyZCIpLmNzcyh7IHk6ICc0MHB4Jywgb3BhY2l0eTogMCB9KTsgLy9tb3ZlIGl0IGRvd24gc28gd2UgY2FuIHNsaWRlIGl0IHVwDQogICAkKCIjcmVwbGF5IikuY3NzKHsgeTogJzQwcHgnLCBvcGFjaXR5OiAwIH0pOw0KICAgJCgiI3Njb3JlYm9hcmQiKS50cmFuc2l0aW9uKHsgeTogJzBweCcsIG9wYWNpdHk6IDF9LCA2MDAsICdlYXNlJywgZnVuY3Rpb24oKSB7DQogICAgICAvL1doZW4gdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBhbmltYXRlIGluIHRoZSByZXBsYXkgYnV0dG9uIGFuZCBTV09PU0ghDQogICAgICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICAgICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICAgICAkKCIjcmVwbGF5IikudHJhbnNpdGlvbih7IHk6ICcwcHgnLCBvcGFjaXR5OiAxfSwgNjAwLCAnZWFzZScpOw0KICAgICAgDQogICAgICAvL2Fsc28gYW5pbWF0ZSBpbiB0aGUgTUVEQUwhIFdPTyENCiAgICAgIGlmKHdvbm1lZGFsKQ0KICAgICAgew0KICAgICAgICAgJCgiI21lZGFsIikuY3NzKHsgc2NhbGU6IDIsIG9wYWNpdHk6IDAgfSk7DQogICAgICAgICAkKCIjbWVkYWwiKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMSwgc2NhbGU6IDEgfSwgMTIwMCwgJ2Vhc2UnKTsNCiAgICAgIH0NCiAgIH0pOw0KICAgDQogICAvL21ha2UgdGhlIHJlcGxheSBidXR0b24gY2xpY2thYmxlDQogICByZXBsYXljbGlja2FibGUgPSB0cnVlOw0KDQogICAvLyBHcmFzc1IwMHQ6IGFkZGVkIGZvciBjb21tdW5pY2F0aW5nIHRoZSBzY29yZS4NCiAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdncmFzc1Jvb3QuZ2FtZUVuZGVkJywge2RldGFpbDogeyBzY29yZTogc2NvcmUgfSB9KSk7DQp9DQoNCiQoIiNyZXBsYXkiKS5jbGljayhmdW5jdGlvbigpIHsNCiAgIC8vbWFrZSBzdXJlIHdlIGNhbiBvbmx5IGNsaWNrIG9uY2UNCiAgIGlmKCFyZXBsYXljbGlja2FibGUpDQogICAgICByZXR1cm47DQogICBlbHNlDQogICAgICByZXBsYXljbGlja2FibGUgPSBmYWxzZTsNCiAgIC8vU1dPT1NIIQ0KICAgc291bmRTd29vc2guc3RvcCgpOw0KICAgc291bmRTd29vc2gucGxheSgpOw0KICAgDQogICAvL2ZhZGUgb3V0IHRoZSBzY29yZWJvYXJkDQogICAkKCIjc2NvcmVib2FyZCIpLnRyYW5zaXRpb24oeyB5OiAnLTQwcHgnLCBvcGFjaXR5OiAwfSwgMTAwMCwgJ2Vhc2UnLCBmdW5jdGlvbigpIHsNCiAgICAgIC8vd2hlbiB0aGF0J3MgZG9uZSwgZGlzcGxheSB1cyBiYWNrIHRvIG5vdGhpbmcNCiAgICAgICQoIiNzY29yZWJvYXJkIikuY3NzKCJkaXNwbGF5IiwgIm5vbmUiKTsNCiAgICAgIA0KICAgICAgLy9zdGFydCB0aGUgZ2FtZSBvdmVyIQ0KICAgICAgc2hvd1NwbGFzaCgpOw0KICAgfSk7DQp9KTsNCg0KZnVuY3Rpb24gcGxheWVyU2NvcmUoKQ0Kew0KICAgc2NvcmUgKz0gMTsNCiAgIC8vcGxheSBzY29yZSBzb3VuZA0KICAgc291bmRTY29yZS5zdG9wKCk7DQogICBzb3VuZFNjb3JlLnBsYXkoKTsNCiAgIHNldEJpZ1Njb3JlKCk7DQp9DQoNCmZ1bmN0aW9uIHVwZGF0ZVBpcGVzKCkNCnsNCiAgIC8vRG8gYW55IHBpcGVzIG5lZWQgcmVtb3ZhbD8NCiAgICQoIi5waXBlIikuZmlsdGVyKGZ1bmN0aW9uKCkgeyByZXR1cm4gJCh0aGlzKS5wb3NpdGlvbigpLmxlZnQgPD0gLTEwMDsgfSkucmVtb3ZlKCkNCiAgIA0KICAgLy9hZGQgYSBuZXcgcGlwZSAodG9wIGhlaWdodCArIGJvdHRvbSBoZWlnaHQgICsgcGlwZWhlaWdodCA9PSBmbHlBcmVhKSBhbmQgcHV0IGl0IGluIG91ciB0cmFja2VyDQogICB2YXIgcGFkZGluZyA9IDgwOw0KICAgdmFyIGNvbnN0cmFpbnQgPSBmbHlBcmVhIC0gcGlwZWhlaWdodCAtIChwYWRkaW5nICogMik7IC8vZG91YmxlIHBhZGRpbmcgKGZvciB0b3AgYW5kIGJvdHRvbSkNCiAgIHZhciB0b3BoZWlnaHQgPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpKmNvbnN0cmFpbnQpICsgcGFkZGluZyk7IC8vYWRkIGxvd2VyIHBhZGRpbmcNCiAgIHZhciBib3R0b21oZWlnaHQgPSAoZmx5QXJlYSAtIHBpcGVoZWlnaHQpIC0gdG9waGVpZ2h0Ow0KICAgdmFyIG5ld3BpcGUgPSAkKCc8ZGl2IGNsYXNzPSJwaXBlIGFuaW1hdGVkIj48ZGl2IGNsYXNzPSJwaXBlX3VwcGVyIiBzdHlsZT0iaGVpZ2h0OiAnICsgdG9waGVpZ2h0ICsgJ3B4OyI+PC9kaXY+PGRpdiBjbGFzcz0icGlwZV9sb3dlciIgc3R5bGU9ImhlaWdodDogJyArIGJvdHRvbWhlaWdodCArICdweDsiPjwvZGl2PjwvZGl2PicpOw0KICAgJCgiI2ZseWFyZWEiKS5hcHBlbmQobmV3cGlwZSk7DQogICBwaXBlcy5wdXNoKG5ld3BpcGUpOw0KfQ0KDQp2YXIgaXNJbmNvbXBhdGlibGUgPSB7DQogICBBbmRyb2lkOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpOw0KICAgfSwNCiAgIEJsYWNrQmVycnk6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0JsYWNrQmVycnkvaSk7DQogICB9LA0KICAgaU9TOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpOw0KICAgfSwNCiAgIE9wZXJhOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PcGVyYSBNaW5pL2kpOw0KICAgfSwNCiAgIFNhZmFyaTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL09TIFguKlNhZmFyaS8pICYmICEgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lLykpOw0KICAgfSwNCiAgIFdpbmRvd3M6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0lFTW9iaWxlL2kpOw0KICAgfSwNCiAgIGFueTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gKGlzSW5jb21wYXRpYmxlLkFuZHJvaWQoKSB8fCBpc0luY29tcGF0aWJsZS5CbGFja0JlcnJ5KCkgfHwgaXNJbmNvbXBhdGlibGUuaU9TKCkgfHwgaXNJbmNvbXBhdGlibGUuT3BlcmEoKSB8fCBpc0luY29tcGF0aWJsZS5TYWZhcmkoKSB8fCBpc0luY29tcGF0aWJsZS5XaW5kb3dzKCkpOw0KICAgfQ0KfTs="
}

Changelog:

{
    "2020.06.16 13:09": "base64:LyoNCiAgIENvcHlyaWdodCAyMDE0IE5lYmV6IEJyaWVma2FuaQ0KICAgZmxvcHB5YmlyZCAtIG1haW4uanMNCg0KICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCnZhciBkZWJ1Z21vZGUgPSBmYWxzZTsNCg0KdmFyIHN0YXRlcyA9IE9iamVjdC5mcmVlemUoew0KICAgU3BsYXNoU2NyZWVuOiAwLA0KICAgR2FtZVNjcmVlbjogMSwNCiAgIFNjb3JlU2NyZWVuOiAyDQp9KTsNCg0KdmFyIGN1cnJlbnRzdGF0ZTsNCg0KdmFyIGdyYXZpdHkgPSAwLjI1Ow0KdmFyIHZlbG9jaXR5ID0gMDsNCnZhciBwb3NpdGlvbiA9IDE4MDsNCnZhciByb3RhdGlvbiA9IDA7DQp2YXIganVtcCA9IC00LjY7DQp2YXIgZmx5QXJlYSA9ICQoIiNmbHlhcmVhIikuaGVpZ2h0KCk7DQoNCnZhciBzY29yZSA9IDA7DQp2YXIgaGlnaHNjb3JlID0gMDsNCg0KdmFyIHBpcGVoZWlnaHQgPSA5MDsNCnZhciBwaXBld2lkdGggPSA1MjsNCnZhciBwaXBlcyA9IG5ldyBBcnJheSgpOw0KDQp2YXIgcmVwbGF5Y2xpY2thYmxlID0gZmFsc2U7DQoNCi8vc291bmRzDQp2YXIgdm9sdW1lID0gMzA7DQp2YXIgc291bmRKdW1wID0gbmV3IGJ1enouc291bmQoImh0dHBzOi8vbm9kZXMtdGVzdG5ldC53YXZlc25vZGVzLmNvbS9hZGRyZXNzZXMvZGF0YS93ZWIlMkJkJTNBJTJGJTJGM01zUzNvRFh4cURKMnZtemN2QlFlUUxrVGhtTW11b2pONzQlMkZzZnhfd2luZy5vZ2dfY291bnQiKTsNCnZhciBzb3VuZFNjb3JlID0gbmV3IGJ1enouc291bmQoImh0dHBzOi8vbm9kZXMtdGVzdG5ldC53YXZlc25vZGVzLmNvbS9hZGRyZXNzZXMvZGF0YS93ZWIlMkJkJTNBJTJGJTJGM01zUzNvRFh4cURKMnZtemN2QlFlUUxrVGhtTW11b2pONzQlMkZzZnhfcG9pbnQub2dnX2NvdW50Iik7DQp2YXIgc291bmRIaXQgPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9oaXQub2dnX2NvdW50Iik7DQp2YXIgc291bmREaWUgPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9kaWUub2dnX2NvdW50Iik7DQp2YXIgc291bmRTd29vc2ggPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9zd29vc2hpbmcub2dnX2NvdW50Iik7DQpidXp6LmFsbCgpLnNldFZvbHVtZSh2b2x1bWUpOw0KDQovL2xvb3BzDQp2YXIgbG9vcEdhbWVsb29wOw0KdmFyIGxvb3BQaXBlbG9vcDsNCg0KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQogICBpZih3aW5kb3cubG9jYXRpb24uc2VhcmNoID09ICI/ZGVidWciKQ0KICAgICAgZGVidWdtb2RlID0gdHJ1ZTsNCiAgIGlmKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPT0gIj9lYXN5IikNCiAgICAgIHBpcGVoZWlnaHQgPSAyMDA7DQogICANCiAgIC8vZ2V0IHRoZSBoaWdoc2NvcmUNCiAgIHZhciBzYXZlZHNjb3JlID0gZ2V0Q29va2llKCJoaWdoc2NvcmUiKTsNCiAgIGlmKHNhdmVkc2NvcmUgIT0gIiIpDQogICAgICBoaWdoc2NvcmUgPSBwYXJzZUludChzYXZlZHNjb3JlKTsNCiAgIA0KICAgLy9zdGFydCB3aXRoIHRoZSBzcGxhc2ggc2NyZWVuDQogICBzaG93U3BsYXNoKCk7DQp9KTsNCg0KZnVuY3Rpb24gZ2V0Q29va2llKGNuYW1lKQ0Kew0KICAgdmFyIG5hbWUgPSBjbmFtZSArICI9IjsNCiAgIHZhciBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOw0KICAgZm9yKHZhciBpPTA7IGk8Y2EubGVuZ3RoOyBpKyspIA0KICAgew0KICAgICAgdmFyIGMgPSBjYVtpXS50cmltKCk7DQogICAgICBpZiAoYy5pbmRleE9mKG5hbWUpPT0wKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZS5sZW5ndGgsYy5sZW5ndGgpOw0KICAgfQ0KICAgcmV0dXJuICIiOw0KfQ0KDQpmdW5jdGlvbiBzZXRDb29raWUoY25hbWUsY3ZhbHVlLGV4ZGF5cykNCnsNCiAgIHZhciBkID0gbmV3IERhdGUoKTsNCiAgIGQuc2V0VGltZShkLmdldFRpbWUoKSsoZXhkYXlzKjI0KjYwKjYwKjEwMDApKTsNCiAgIHZhciBleHBpcmVzID0gImV4cGlyZXM9IitkLnRvR01UU3RyaW5nKCk7DQogICBkb2N1bWVudC5jb29raWUgPSBjbmFtZSArICI9IiArIGN2YWx1ZSArICI7ICIgKyBleHBpcmVzOw0KfQ0KDQpmdW5jdGlvbiBzaG93U3BsYXNoKCkNCnsNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5TcGxhc2hTY3JlZW47DQogICANCiAgIC8vc2V0IHRoZSBkZWZhdWx0cyAoYWdhaW4pDQogICB2ZWxvY2l0eSA9IDA7DQogICBwb3NpdGlvbiA9IDE4MDsNCiAgIHJvdGF0aW9uID0gMDsNCiAgIHNjb3JlID0gMDsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllciBpbiBwcmVwYXJhdGlvbiBmb3IgdGhlIG5leHQgZ2FtZQ0KICAgJCgiI3BsYXllciIpLmNzcyh7IHk6IDAsIHg6IDB9KTsNCiAgIHVwZGF0ZVBsYXllcigkKCIjcGxheWVyIikpOw0KICAgDQogICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICANCiAgIC8vY2xlYXIgb3V0IGFsbCB0aGUgcGlwZXMgaWYgdGhlcmUgYXJlIGFueQ0KICAgJCgiLnBpcGUiKS5yZW1vdmUoKTsNCiAgIHBpcGVzID0gbmV3IEFycmF5KCk7DQogICANCiAgIC8vbWFrZSBldmVyeXRoaW5nIGFuaW1hdGVkIGFnYWluDQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3J1bm5pbmcnKTsNCiAgICQoIi5hbmltYXRlZCIpLmNzcygnLXdlYmtpdC1hbmltYXRpb24tcGxheS1zdGF0ZScsICdydW5uaW5nJyk7DQogICANCiAgIC8vZmFkZSBpbiB0aGUgc3BsYXNoDQogICAkKCIjc3BsYXNoIikudHJhbnNpdGlvbih7IG9wYWNpdHk6IDEgfSwgMjAwMCwgJ2Vhc2UnKTsNCn0NCg0KZnVuY3Rpb24gc3RhcnRHYW1lKCkNCnsNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5HYW1lU2NyZWVuOw0KICAgDQogICAvL2ZhZGUgb3V0IHRoZSBzcGxhc2gNCiAgICQoIiNzcGxhc2giKS5zdG9wKCk7DQogICAkKCIjc3BsYXNoIikudHJhbnNpdGlvbih7IG9wYWNpdHk6IDAgfSwgNTAwLCAnZWFzZScpOw0KICAgDQogICAvL3VwZGF0ZSB0aGUgYmlnIHNjb3JlDQogICBzZXRCaWdTY29yZSgpOw0KICAgDQogICAvL2RlYnVnIG1vZGU/DQogICBpZihkZWJ1Z21vZGUpDQogICB7DQogICAgICAvL3Nob3cgdGhlIGJvdW5kaW5nIGJveGVzDQogICAgICAkKCIuYm91bmRpbmdib3giKS5zaG93KCk7DQogICB9DQoNCiAgIC8vc3RhcnQgdXAgb3VyIGxvb3BzDQogICB2YXIgdXBkYXRlcmF0ZSA9IDEwMDAuMCAvIDYwLjAgOyAvLzYwIHRpbWVzIGEgc2Vjb25kDQogICBsb29wR2FtZWxvb3AgPSBzZXRJbnRlcnZhbChnYW1lbG9vcCwgdXBkYXRlcmF0ZSk7DQogICBsb29wUGlwZWxvb3AgPSBzZXRJbnRlcnZhbCh1cGRhdGVQaXBlcywgMTQwMCk7DQogICANCiAgIC8vanVtcCBmcm9tIHRoZSBzdGFydCENCiAgIHBsYXllckp1bXAoKTsNCn0NCg0KZnVuY3Rpb24gdXBkYXRlUGxheWVyKHBsYXllcikNCnsNCiAgIC8vcm90YXRpb24NCiAgIHJvdGF0aW9uID0gTWF0aC5taW4oKHZlbG9jaXR5IC8gMTApICogOTAsIDkwKTsNCiAgIA0KICAgLy9hcHBseSByb3RhdGlvbiBhbmQgcG9zaXRpb24NCiAgICQocGxheWVyKS5jc3MoeyByb3RhdGU6IHJvdGF0aW9uLCB0b3A6IHBvc2l0aW9uIH0pOw0KfQ0KDQpmdW5jdGlvbiBnYW1lbG9vcCgpIHsNCiAgIHZhciBwbGF5ZXIgPSAkKCIjcGxheWVyIik7DQogICANCiAgIC8vdXBkYXRlIHRoZSBwbGF5ZXIgc3BlZWQvcG9zaXRpb24NCiAgIHZlbG9jaXR5ICs9IGdyYXZpdHk7DQogICBwb3NpdGlvbiArPSB2ZWxvY2l0eTsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllcg0KICAgdXBkYXRlUGxheWVyKHBsYXllcik7DQogICANCiAgIC8vY3JlYXRlIHRoZSBib3VuZGluZyBib3gNCiAgIHZhciBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVyJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7DQogICB2YXIgb3JpZ3dpZHRoID0gMzQuMDsNCiAgIHZhciBvcmlnaGVpZ2h0ID0gMjQuMDsNCiAgIA0KICAgdmFyIGJveHdpZHRoID0gb3JpZ3dpZHRoIC0gKE1hdGguc2luKE1hdGguYWJzKHJvdGF0aW9uKSAvIDkwKSAqIDgpOw0KICAgdmFyIGJveGhlaWdodCA9IChvcmlnaGVpZ2h0ICsgYm94LmhlaWdodCkgLyAyOw0KICAgdmFyIGJveGxlZnQgPSAoKGJveC53aWR0aCAtIGJveHdpZHRoKSAvIDIpICsgYm94LmxlZnQ7DQogICB2YXIgYm94dG9wID0gKChib3guaGVpZ2h0IC0gYm94aGVpZ2h0KSAvIDIpICsgYm94LnRvcDsNCiAgIHZhciBib3hyaWdodCA9IGJveGxlZnQgKyBib3h3aWR0aDsNCiAgIHZhciBib3hib3R0b20gPSBib3h0b3AgKyBib3hoZWlnaHQ7DQogICANCiAgIC8vaWYgd2UncmUgaW4gZGVidWcgbW9kZSwgZHJhdyB0aGUgYm91bmRpbmcgYm94DQogICBpZihkZWJ1Z21vZGUpDQogICB7DQogICAgICB2YXIgYm91bmRpbmdib3ggPSAkKCIjcGxheWVyYm94Iik7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2xlZnQnLCBib3hsZWZ0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygndG9wJywgYm94dG9wKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnaGVpZ2h0JywgYm94aGVpZ2h0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnd2lkdGgnLCBib3h3aWR0aCk7DQogICB9DQogICANCiAgIC8vZGlkIHdlIGhpdCB0aGUgZ3JvdW5kPw0KICAgaWYoYm94LmJvdHRvbSA+PSAkKCIjbGFuZCIpLm9mZnNldCgpLnRvcCkNCiAgIHsNCiAgICAgIHBsYXllckRlYWQoKTsNCiAgICAgIHJldHVybjsNCiAgIH0NCiAgIA0KICAgLy9oYXZlIHRoZXkgdHJpZWQgdG8gZXNjYXBlIHRocm91Z2ggdGhlIGNlaWxpbmc/IDpvDQogICB2YXIgY2VpbGluZyA9ICQoIiNjZWlsaW5nIik7DQogICBpZihib3h0b3AgPD0gKGNlaWxpbmcub2Zmc2V0KCkudG9wICsgY2VpbGluZy5oZWlnaHQoKSkpDQogICAgICBwb3NpdGlvbiA9IDA7DQogICANCiAgIC8vd2UgY2FuJ3QgZ28gYW55IGZ1cnRoZXIgd2l0aG91dCBhIHBpcGUNCiAgIGlmKHBpcGVzWzBdID09IG51bGwpDQogICAgICByZXR1cm47DQogICANCiAgIC8vZGV0ZXJtaW5lIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIG5leHQgcGlwZXMgaW5uZXIgYXJlYQ0KICAgdmFyIG5leHRwaXBlID0gcGlwZXNbMF07DQogICB2YXIgbmV4dHBpcGV1cHBlciA9IG5leHRwaXBlLmNoaWxkcmVuKCIucGlwZV91cHBlciIpOw0KICAgDQogICB2YXIgcGlwZXRvcCA9IG5leHRwaXBldXBwZXIub2Zmc2V0KCkudG9wICsgbmV4dHBpcGV1cHBlci5oZWlnaHQoKTsNCiAgIHZhciBwaXBlbGVmdCA9IG5leHRwaXBldXBwZXIub2Zmc2V0KCkubGVmdCAtIDI7IC8vIGZvciBzb21lIHJlYXNvbiBpdCBzdGFydHMgYXQgdGhlIGlubmVyIHBpcGVzIG9mZnNldCwgbm90IHRoZSBvdXRlciBwaXBlcy4NCiAgIHZhciBwaXBlcmlnaHQgPSBwaXBlbGVmdCArIHBpcGV3aWR0aDsNCiAgIHZhciBwaXBlYm90dG9tID0gcGlwZXRvcCArIHBpcGVoZWlnaHQ7DQogICANCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIHZhciBib3VuZGluZ2JveCA9ICQoIiNwaXBlYm94Iik7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2xlZnQnLCBwaXBlbGVmdCk7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ3RvcCcsIHBpcGV0b3ApOw0KICAgICAgYm91bmRpbmdib3guY3NzKCdoZWlnaHQnLCBwaXBlaGVpZ2h0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnd2lkdGgnLCBwaXBld2lkdGgpOw0KICAgfQ0KICAgDQogICAvL2hhdmUgd2UgZ290dGVuIGluc2lkZSB0aGUgcGlwZSB5ZXQ/DQogICBpZihib3hyaWdodCA+IHBpcGVsZWZ0KQ0KICAgew0KICAgICAgLy93ZSdyZSB3aXRoaW4gdGhlIHBpcGUsIGhhdmUgd2UgcGFzc2VkIGJldHdlZW4gdXBwZXIgYW5kIGxvd2VyIHBpcGVzPw0KICAgICAgaWYoYm94dG9wID4gcGlwZXRvcCAmJiBib3hib3R0b20gPCBwaXBlYm90dG9tKQ0KICAgICAgew0KICAgICAgICAgLy95ZWFoISB3ZSdyZSB3aXRoaW4gYm91bmRzDQogICAgICAgICANCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgIC8vbm8hIHdlIHRvdWNoZWQgdGhlIHBpcGUNCiAgICAgICAgIHBsYXllckRlYWQoKTsNCiAgICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgIH0NCiAgIA0KICAgDQogICAvL2hhdmUgd2UgcGFzc2VkIHRoZSBpbW1pbmVudCBkYW5nZXI/DQogICBpZihib3hsZWZ0ID4gcGlwZXJpZ2h0KQ0KICAgew0KICAgICAgLy95ZXMsIHJlbW92ZSBpdA0KICAgICAgcGlwZXMuc3BsaWNlKDAsIDEpOw0KICAgICAgDQogICAgICAvL2FuZCBzY29yZSBhIHBvaW50DQogICAgICBwbGF5ZXJTY29yZSgpOw0KICAgfQ0KfQ0KDQovL0hhbmRsZSBzcGFjZSBiYXINCiQoZG9jdW1lbnQpLmtleWRvd24oZnVuY3Rpb24oZSl7DQogICAvL3NwYWNlIGJhciENCiAgIGlmKGUua2V5Q29kZSA9PSAzMikNCiAgIHsNCiAgICAgIC8vaW4gU2NvcmVTY3JlZW4sIGhpdHRpbmcgc3BhY2Ugc2hvdWxkIGNsaWNrIHRoZSAicmVwbGF5IiBidXR0b24uIGVsc2UgaXQncyBqdXN0IGEgcmVndWxhciBzcGFjZWJhciBoaXQNCiAgICAgIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuU2NvcmVTY3JlZW4pDQogICAgICAgICAkKCIjcmVwbGF5IikuY2xpY2soKTsNCiAgICAgIGVsc2UNCiAgICAgICAgIHNjcmVlbkNsaWNrKCk7DQogICB9DQp9KTsNCg0KLy9IYW5kbGUgbW91c2UgZG93biBPUiB0b3VjaCBzdGFydA0KaWYoIm9udG91Y2hzdGFydCIgaW4gd2luZG93KQ0KICAgJChkb2N1bWVudCkub24oInRvdWNoc3RhcnQiLCBzY3JlZW5DbGljayk7DQplbHNlDQogICAkKGRvY3VtZW50KS5vbigibW91c2Vkb3duIiwgc2NyZWVuQ2xpY2spOw0KDQpmdW5jdGlvbiBzY3JlZW5DbGljaygpDQp7DQogICBpZihjdXJyZW50c3RhdGUgPT0gc3RhdGVzLkdhbWVTY3JlZW4pDQogICB7DQogICAgICBwbGF5ZXJKdW1wKCk7DQogICB9DQogICBlbHNlIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuU3BsYXNoU2NyZWVuKQ0KICAgew0KICAgICAgc3RhcnRHYW1lKCk7DQogICB9DQp9DQoNCmZ1bmN0aW9uIHBsYXllckp1bXAoKQ0Kew0KICAgdmVsb2NpdHkgPSBqdW1wOw0KICAgLy9wbGF5IGp1bXAgc291bmQNCiAgIHNvdW5kSnVtcC5zdG9wKCk7DQogICBzb3VuZEp1bXAucGxheSgpOw0KfQ0KDQpmdW5jdGlvbiBzZXRCaWdTY29yZShlcmFzZSkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjYmlnc2NvcmUiKTsNCiAgIGVsZW1zY29yZS5lbXB0eSgpOw0KICAgDQogICBpZihlcmFzZSkNCiAgICAgIHJldHVybjsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdodHRwczovL25vZGVzLXRlc3RuZXQud2F2ZXNub2Rlcy5jb20vYWRkcmVzc2VzL2RhdGEvd2ViJTJCZCUzQSUyRiUyRjNNc1Mzb0RYeHFESjJ2bXpjdkJRZVFMa1RobU1tdW9qTjc0JTJGZm9udF9iaWdfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0U21hbGxTY29yZSgpDQp7DQogICB2YXIgZWxlbXNjb3JlID0gJCgiI2N1cnJlbnRzY29yZSIpOw0KICAgZWxlbXNjb3JlLmVtcHR5KCk7DQogICANCiAgIHZhciBkaWdpdHMgPSBzY29yZS50b1N0cmluZygpLnNwbGl0KCcnKTsNCiAgIGZvcih2YXIgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyBpKyspDQogICAgICBlbGVtc2NvcmUuYXBwZW5kKCI8aW1nIHNyYz0naHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRmZvbnRfc21hbGxfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0SGlnaFNjb3JlKCkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjaGlnaHNjb3JlIik7DQogICBlbGVtc2NvcmUuZW1wdHkoKTsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IGhpZ2hzY29yZS50b1N0cmluZygpLnNwbGl0KCcnKTsNCiAgIGZvcih2YXIgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyBpKyspDQogICAgICBlbGVtc2NvcmUuYXBwZW5kKCI8aW1nIHNyYz0naHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRmZvbnRfc21hbGxfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0TWVkYWwoKQ0Kew0KICAgdmFyIGVsZW1tZWRhbCA9ICQoIiNtZWRhbCIpOw0KICAgZWxlbW1lZGFsLmVtcHR5KCk7DQogICANCiAgIGlmKHNjb3JlIDwgMTApDQogICAgICAvL3NpZ25hbCB0aGF0IG5vIG1lZGFsIGhhcyBiZWVuIHdvbg0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgDQogICBpZihzY29yZSA+PSAxMCkNCiAgICAgIG1lZGFsID0gImJyb256ZSI7DQogICBpZihzY29yZSA+PSAyMCkNCiAgICAgIG1lZGFsID0gInNpbHZlciI7DQogICBpZihzY29yZSA+PSAzMCkNCiAgICAgIG1lZGFsID0gImdvbGQiOw0KICAgaWYoc2NvcmUgPj0gNDApDQogICAgICBtZWRhbCA9ICJwbGF0aW51bSI7DQogICANCiAgIGVsZW1tZWRhbC5hcHBlbmQoJzxpbWcgc3JjPSJodHRwczovL25vZGVzLXRlc3RuZXQud2F2ZXNub2Rlcy5jb20vYWRkcmVzc2VzL2RhdGEvd2ViJTJCZCUzQSUyRiUyRjNNc1Mzb0RYeHFESjJ2bXpjdkJRZVFMa1RobU1tdW9qTjc0JTJGbWVkYWxfJyArIG1lZGFsICsnLnBuZ19jb3VudCIgYWx0PSInICsgbWVkYWwgKyciPicpOw0KICAgDQogICAvL3NpZ25hbCB0aGF0IGEgbWVkYWwgaGFzIGJlZW4gd29uDQogICByZXR1cm4gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gcGxheWVyRGVhZCgpDQp7DQogICAvL3N0b3AgYW5pbWF0aW5nIGV2ZXJ5dGhpbmchDQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3BhdXNlZCcpOw0KICAgJCgiLmFuaW1hdGVkIikuY3NzKCctd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3BhdXNlZCcpOw0KICAgDQogICAvL2Ryb3AgdGhlIGJpcmQgdG8gdGhlIGZsb29yDQogICB2YXIgcGxheWVyYm90dG9tID0gJCgiI3BsYXllciIpLnBvc2l0aW9uKCkudG9wICsgJCgiI3BsYXllciIpLndpZHRoKCk7IC8vd2UgdXNlIHdpZHRoIGJlY2F1c2UgaGUnbGwgYmUgcm90YXRlZCA5MCBkZWcNCiAgIHZhciBmbG9vciA9IGZseUFyZWE7DQogICB2YXIgbW92ZXkgPSBNYXRoLm1heCgwLCBmbG9vciAtIHBsYXllcmJvdHRvbSk7DQogICAkKCIjcGxheWVyIikudHJhbnNpdGlvbih7IHk6IG1vdmV5ICsgJ3B4Jywgcm90YXRlOiA5MH0sIDEwMDAsICdlYXNlSW5PdXRDdWJpYycpOw0KICAgDQogICAvL2l0J3MgdGltZSB0byBjaGFuZ2Ugc3RhdGVzLiBhcyBvZiBub3cgd2UncmUgY29uc2lkZXJlZCBTY29yZVNjcmVlbiB0byBkaXNhYmxlIGxlZnQgY2xpY2svZmx5aW5nDQogICBjdXJyZW50c3RhdGUgPSBzdGF0ZXMuU2NvcmVTY3JlZW47DQoNCiAgIC8vZGVzdHJveSBvdXIgZ2FtZWxvb3BzDQogICBjbGVhckludGVydmFsKGxvb3BHYW1lbG9vcCk7DQogICBjbGVhckludGVydmFsKGxvb3BQaXBlbG9vcCk7DQogICBsb29wR2FtZWxvb3AgPSBudWxsOw0KICAgbG9vcFBpcGVsb29wID0gbnVsbDsNCg0KICAgLy9tb2JpbGUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBidXp6IGJpbmRPbmNlIGV2ZW50DQogICBpZihpc0luY29tcGF0aWJsZS5hbnkoKSkNCiAgIHsNCiAgICAgIC8vc2tpcCByaWdodCB0byBzaG93aW5nIHNjb3JlDQogICAgICBzaG93U2NvcmUoKTsNCiAgIH0NCiAgIGVsc2UNCiAgIHsNCiAgICAgIC8vcGxheSB0aGUgaGl0IHNvdW5kICh0aGVuIHRoZSBkZWFkIHNvdW5kKSBhbmQgdGhlbiBzaG93IHNjb3JlDQogICAgICBzb3VuZEhpdC5wbGF5KCkuYmluZE9uY2UoImVuZGVkIiwgZnVuY3Rpb24oKSB7DQogICAgICAgICBzb3VuZERpZS5wbGF5KCkuYmluZE9uY2UoImVuZGVkIiwgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICBzaG93U2NvcmUoKTsNCiAgICAgICAgIH0pOw0KICAgICAgfSk7DQogICB9DQp9DQoNCmZ1bmN0aW9uIHNob3dTY29yZSgpDQp7DQogICAvL3VuaGlkZSB1cw0KICAgJCgiI3Njb3JlYm9hcmQiKS5jc3MoImRpc3BsYXkiLCAiYmxvY2siKTsNCiAgIA0KICAgLy9yZW1vdmUgdGhlIGJpZyBzY29yZQ0KICAgc2V0QmlnU2NvcmUodHJ1ZSk7DQogICANCiAgIC8vaGF2ZSB0aGV5IGJlYXRlbiB0aGVpciBoaWdoIHNjb3JlPw0KICAgaWYoc2NvcmUgPiBoaWdoc2NvcmUpDQogICB7DQogICAgICAvL3llYWghDQogICAgICBoaWdoc2NvcmUgPSBzY29yZTsNCiAgICAgIC8vc2F2ZSBpdCENCiAgICAgIHNldENvb2tpZSgiaGlnaHNjb3JlIiwgaGlnaHNjb3JlLCA5OTkpOw0KICAgfQ0KICAgDQogICAvL3VwZGF0ZSB0aGUgc2NvcmVib2FyZA0KICAgc2V0U21hbGxTY29yZSgpOw0KICAgc2V0SGlnaFNjb3JlKCk7DQogICB2YXIgd29ubWVkYWwgPSBzZXRNZWRhbCgpOw0KICAgDQogICAvL1NXT09TSCENCiAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgIA0KICAgLy9zaG93IHRoZSBzY29yZWJvYXJkDQogICAkKCIjc2NvcmVib2FyZCIpLmNzcyh7IHk6ICc0MHB4Jywgb3BhY2l0eTogMCB9KTsgLy9tb3ZlIGl0IGRvd24gc28gd2UgY2FuIHNsaWRlIGl0IHVwDQogICAkKCIjcmVwbGF5IikuY3NzKHsgeTogJzQwcHgnLCBvcGFjaXR5OiAwIH0pOw0KICAgJCgiI3Njb3JlYm9hcmQiKS50cmFuc2l0aW9uKHsgeTogJzBweCcsIG9wYWNpdHk6IDF9LCA2MDAsICdlYXNlJywgZnVuY3Rpb24oKSB7DQogICAgICAvL1doZW4gdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBhbmltYXRlIGluIHRoZSByZXBsYXkgYnV0dG9uIGFuZCBTV09PU0ghDQogICAgICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICAgICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICAgICAkKCIjcmVwbGF5IikudHJhbnNpdGlvbih7IHk6ICcwcHgnLCBvcGFjaXR5OiAxfSwgNjAwLCAnZWFzZScpOw0KICAgICAgDQogICAgICAvL2Fsc28gYW5pbWF0ZSBpbiB0aGUgTUVEQUwhIFdPTyENCiAgICAgIGlmKHdvbm1lZGFsKQ0KICAgICAgew0KICAgICAgICAgJCgiI21lZGFsIikuY3NzKHsgc2NhbGU6IDIsIG9wYWNpdHk6IDAgfSk7DQogICAgICAgICAkKCIjbWVkYWwiKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMSwgc2NhbGU6IDEgfSwgMTIwMCwgJ2Vhc2UnKTsNCiAgICAgIH0NCiAgIH0pOw0KICAgDQogICAvL21ha2UgdGhlIHJlcGxheSBidXR0b24gY2xpY2thYmxlDQogICByZXBsYXljbGlja2FibGUgPSB0cnVlOw0KDQogICAvLyBHcmFzc1IwMHQ6IGFkZGVkIGZvciBjb21tdW5pY2F0aW5nIHRoZSBzY29yZS4NCiAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdncmFzc1Jvb3QuZ2FtZUVuZGVkJywge2RldGFpbDogeyBzY29yZTogc2NvcmUgfSB9KSk7DQp9DQoNCiQoIiNyZXBsYXkiKS5jbGljayhmdW5jdGlvbigpIHsNCiAgIC8vbWFrZSBzdXJlIHdlIGNhbiBvbmx5IGNsaWNrIG9uY2UNCiAgIGlmKCFyZXBsYXljbGlja2FibGUpDQogICAgICByZXR1cm47DQogICBlbHNlDQogICAgICByZXBsYXljbGlja2FibGUgPSBmYWxzZTsNCiAgIC8vU1dPT1NIIQ0KICAgc291bmRTd29vc2guc3RvcCgpOw0KICAgc291bmRTd29vc2gucGxheSgpOw0KICAgDQogICAvL2ZhZGUgb3V0IHRoZSBzY29yZWJvYXJkDQogICAkKCIjc2NvcmVib2FyZCIpLnRyYW5zaXRpb24oeyB5OiAnLTQwcHgnLCBvcGFjaXR5OiAwfSwgMTAwMCwgJ2Vhc2UnLCBmdW5jdGlvbigpIHsNCiAgICAgIC8vd2hlbiB0aGF0J3MgZG9uZSwgZGlzcGxheSB1cyBiYWNrIHRvIG5vdGhpbmcNCiAgICAgICQoIiNzY29yZWJvYXJkIikuY3NzKCJkaXNwbGF5IiwgIm5vbmUiKTsNCiAgICAgIA0KICAgICAgLy9zdGFydCB0aGUgZ2FtZSBvdmVyIQ0KICAgICAgc2hvd1NwbGFzaCgpOw0KICAgfSk7DQp9KTsNCg0KZnVuY3Rpb24gcGxheWVyU2NvcmUoKQ0Kew0KICAgc2NvcmUgKz0gMTsNCiAgIC8vcGxheSBzY29yZSBzb3VuZA0KICAgc291bmRTY29yZS5zdG9wKCk7DQogICBzb3VuZFNjb3JlLnBsYXkoKTsNCiAgIHNldEJpZ1Njb3JlKCk7DQp9DQoNCmZ1bmN0aW9uIHVwZGF0ZVBpcGVzKCkNCnsNCiAgIC8vRG8gYW55IHBpcGVzIG5lZWQgcmVtb3ZhbD8NCiAgICQoIi5waXBlIikuZmlsdGVyKGZ1bmN0aW9uKCkgeyByZXR1cm4gJCh0aGlzKS5wb3NpdGlvbigpLmxlZnQgPD0gLTEwMDsgfSkucmVtb3ZlKCkNCiAgIA0KICAgLy9hZGQgYSBuZXcgcGlwZSAodG9wIGhlaWdodCArIGJvdHRvbSBoZWlnaHQgICsgcGlwZWhlaWdodCA9PSBmbHlBcmVhKSBhbmQgcHV0IGl0IGluIG91ciB0cmFja2VyDQogICB2YXIgcGFkZGluZyA9IDgwOw0KICAgdmFyIGNvbnN0cmFpbnQgPSBmbHlBcmVhIC0gcGlwZWhlaWdodCAtIChwYWRkaW5nICogMik7IC8vZG91YmxlIHBhZGRpbmcgKGZvciB0b3AgYW5kIGJvdHRvbSkNCiAgIHZhciB0b3BoZWlnaHQgPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpKmNvbnN0cmFpbnQpICsgcGFkZGluZyk7IC8vYWRkIGxvd2VyIHBhZGRpbmcNCiAgIHZhciBib3R0b21oZWlnaHQgPSAoZmx5QXJlYSAtIHBpcGVoZWlnaHQpIC0gdG9waGVpZ2h0Ow0KICAgdmFyIG5ld3BpcGUgPSAkKCc8ZGl2IGNsYXNzPSJwaXBlIGFuaW1hdGVkIj48ZGl2IGNsYXNzPSJwaXBlX3VwcGVyIiBzdHlsZT0iaGVpZ2h0OiAnICsgdG9waGVpZ2h0ICsgJ3B4OyI+PC9kaXY+PGRpdiBjbGFzcz0icGlwZV9sb3dlciIgc3R5bGU9ImhlaWdodDogJyArIGJvdHRvbWhlaWdodCArICdweDsiPjwvZGl2PjwvZGl2PicpOw0KICAgJCgiI2ZseWFyZWEiKS5hcHBlbmQobmV3cGlwZSk7DQogICBwaXBlcy5wdXNoKG5ld3BpcGUpOw0KfQ0KDQp2YXIgaXNJbmNvbXBhdGlibGUgPSB7DQogICBBbmRyb2lkOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpOw0KICAgfSwNCiAgIEJsYWNrQmVycnk6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0JsYWNrQmVycnkvaSk7DQogICB9LA0KICAgaU9TOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpOw0KICAgfSwNCiAgIE9wZXJhOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PcGVyYSBNaW5pL2kpOw0KICAgfSwNCiAgIFNhZmFyaTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL09TIFguKlNhZmFyaS8pICYmICEgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lLykpOw0KICAgfSwNCiAgIFdpbmRvd3M6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0lFTW9iaWxlL2kpOw0KICAgfSwNCiAgIGFueTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gKGlzSW5jb21wYXRpYmxlLkFuZHJvaWQoKSB8fCBpc0luY29tcGF0aWJsZS5CbGFja0JlcnJ5KCkgfHwgaXNJbmNvbXBhdGlibGUuaU9TKCkgfHwgaXNJbmNvbXBhdGlibGUuT3BlcmEoKSB8fCBpc0luY29tcGF0aWJsZS5TYWZhcmkoKSB8fCBpc0luY29tcGF0aWJsZS5XaW5kb3dzKCkpOw0KICAgfQ0KfTs="
}

github/deemru/w8io/873ac7e 
2.26 ms