var ele = document.getElementById('aditAppWebForm_bc83c4f1-ef7c-4111-bf01-c896f04524e1');  
   ele.innerHTML =  window.atob('PHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgIC8qIFN0YXJ0IEFkaXQgV2ViIERhdGEgRm9ybSAqLwogICAgLmFhd2Zvcm1ibG9jayAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQoKICAgIC5hYXdmb3JtYmxvY2sgewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgfQoKICAgIC5hYXdmaWVsZGdyb3VwIHsKICAgICAgICBtYXJnaW46IDAgLTVweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgIH0KCiAgICAuYWF3ZmllbGRjb2wgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5hYXdmaWVsZGNvbDEwIHsKICAgICAgICB3aWR0aDogMTAlOwogICAgfQoKICAgIC5hYXdmaWVsZGNvbDI1IHsKICAgICAgICB3aWR0aDogMjUlOwogICAgfQoKICAgIC5hYXdmaWVsZGNvbDMzIHsKICAgICAgICB3aWR0aDogMzMuMzMzJTsKICAgIH0KCiAgICAuYWF3ZmllbGRjb2w1MCB7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgIH0KCiAgICAuYWF3ZmllbGRjb2w2NiB7CiAgICAgICAgd2lkdGg6IDY2LjY2NiU7CiAgICB9CgogICAgLmFhd2ZpZWxkY29sNzUgewogICAgICAgIHdpZHRoOiA3NSU7CiAgICB9CgogICAgLmFhd2ZpZWxkY29sIGxhYmVsIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4OwogICAgfQoKICAgIC5iaXJ0aF9kYXRlaW5wdXQsCiAgICAucGRhdGVpbnB1dCwKICAgIC5hYXdmbGRzZWxlY3Rib3ggewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAuYWF3ZmllbGRjb2wgaW5wdXRbdHlwZT0idGV4dCJdLAogICAgLmFhd2ZpZWxkY29sIGlucHV0W3R5cGU9ImVtYWlsIl0sCiAgICAuYWF3ZmllbGRjb2wgaW5wdXRbdHlwZT0iZGF0ZSJdLAogICAgLmFhd2ZpZWxkY29sIGlucHV0W3R5cGU9InRlbCJdLAogICAgLmFhd2ZpZWxkY29sIGlucHV0W3R5cGU9Im51bWJlciJdLAogICAgLmFhd2ZpZWxkY29sIGlucHV0W3R5cGU9InVybCJdLAogICAgLmFhd2ZpZWxkY29sIGlucHV0W3R5cGU9InBhc3N3b3JkIl0sCiAgICAuYWF3ZmllbGRjb2wgaW5wdXRbdHlwZT0ic2VhcmNoIl0sCiAgICAuYWF3ZmllbGRjb2wgaW5wdXRbdHlwZT0idGltZSJdLAogICAgLmFhd2ZpZWxkY29sIHRleHRhcmVhIHsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICB9CgogICAgLmFhd2ZpZWxkY29sIGlucHV0LAogICAgLmFhd2ZpZWxkY29sIGlucHV0OmZvY3VzLAogICAgLmFhd2ZpZWxkY29sIHRleHRhcmVhLAogICAgLmFhd2ZpZWxkY29sIHRleHRhcmVhOmZvY3VzLAogICAgLmFhd2ZpZWxkY29sIHNlbGVjdCB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzBmOTU5NTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMHB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICAgICAgICBjb2xvcjogIzU4NTk1YjsKICAgICAgICBvdXRsaW5lOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICB9CgogICAgLmFhd2ZpZWxkY29sIHRleHRhcmVhLAogICAgLmFhd2ZpZWxkY29sIHRleHRhcmVhOmZvY3VzIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgIH0KCiAgICAuYWF3ZmllbGRjb2wgc2VsZWN0IHsKICAgICAgICBjb2xvcjogIzkzOTU5ODsKICAgIH0KCiAgICAuYWF3Zm9ybXJhZGlvYm94IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMGY5NTk1OwogICAgfQoKICAgIC5hYXdmb3JtcmFkaW9jb2wgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIHdpZHRoOiA1MCU7CiAgICAgICAgZGlzcGxheTogdGFibGU7CiAgICB9CgogICAgLmFhd2Zvcm1yYWRpb2NvbCBpbnB1dFt0eXBlPSJyYWRpbyJdIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuYWF3Zm9ybXJhZGlvY29sIGxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICM1ODU5NWI7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAwIDVweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIGhlaWdodDogMzhweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLmFhd2Zvcm1yYWRpb2NvbCBpbnB1dFt0eXBlPSJyYWRpbyJdOmNoZWNrZWQrbGFiZWwgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwZjk1OTU7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICB9CgogICAgLmFhd2Zvcm0tZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIG1hcmdpbjogMCAxM3B4IDE1cHg7CiAgICB9CiAgICAuYWF3Zm9ybWJsb2NrLmNob29zZS1sb2NhdGlvbiAuaGVhcEJveCAuaGFuZGxlcjpiZWZvcmV7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKiBFbmQgQWRpdCBXZWIgRGF0YSBGb3JtICovCjwvc3R5bGU+CjxzY3JpcHQ+CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgaURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGlEaXYuaWQgPSAiYWRpdEFwcEZvcm1Qb3B1cF8xNzYzMzU2MDY0OTkwIjsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLmFwcGVuZENoaWxkKGlEaXYpOwogICAgfSk7IAo8L3NjcmlwdD4KPGZvcm0gbWV0aG9kPSJwb3N0IiBpZD0iYWRpdEFwcFdlYkZvcm1JZF8xNzYzMzU2MDY0OTkwIj4KICAgIDxkaXYgY2xhc3M9ImFhd2Zvcm1ibG9jayBjaG9vc2UtbG9jYXRpb24iPgogICAgICAgIDxkaXYgY2xhc3M9ImFhd2ZpZWxkZ3JvdXAiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYXdmaWVsZGNvbCBhYXdmaWVsZGNvbDMzIGZpcnN0X25hbWVmaWVsZGNvbCI+IDxsYWJlbCBjbGFzcz0id29yZC1icmVhayIgZm9yPSJmaXJzdF9uYW1lXzE3NjMzNTYwNjQ5OTAiPkZpcnN0IE5hbWUqPC9sYWJlbD4gPGRpdiBjbGFzcz0iYWF3ZmllbGRpbnB1dCBmaXJzdF9uYW1laW5wdXQiPiA8aW5wdXQgYXJpYS1sYWJlbGxlZGJ5PSJmaXJzdF9uYW1lXzE3NjMzNTYwNjQ5OTAiIGlkPSJmaXJzdF9uYW1lXzE3NjMzNTYwNjQ5OTAiICBuYW1lPSJmaXJzdF9uYW1lO0ZpcnN0IE5hbWUiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJGaXJzdCBOYW1lIiAgIHJlcXVpcmVkPiA8L2Rpdj4gPC9kaXY+PGRpdiBjbGFzcz0iYWF3ZmllbGRjb2wgYWF3ZmllbGRjb2wzMyBlbWFpbGZpZWxkY29sIj4gPGxhYmVsIGNsYXNzPSJ3b3JkLWJyZWFrIiBmb3I9ImVtYWlsXzE3NjMzNTYwNjQ5OTAiPkVtYWlsKjwvbGFiZWw+IDxkaXYgY2xhc3M9ImFhd2ZpZWxkaW5wdXQgZW1haWxpbnB1dCI+IDxpbnB1dCBhcmlhLWxhYmVsbGVkYnk9ImVtYWlsXzE3NjMzNTYwNjQ5OTAiIGlkPSJlbWFpbF8xNzYzMzU2MDY0OTkwIiAgbmFtZT0iZW1haWw7RW1haWwiIHR5cGU9ImVtYWlsIiBwbGFjZWhvbGRlcj0iRW1haWwiICAgcmVxdWlyZWQ+IDwvZGl2PiA8L2Rpdj48ZGl2IGNsYXNzPSJhYXdmaWVsZGNvbCBhYXdmaWVsZGNvbDMzIG1vYmlsZWZpZWxkY29sIj4gPGxhYmVsIGNsYXNzPSJ3b3JkLWJyZWFrIiBmb3I9Im1vYmlsZV8xNzYzMzU2MDY0OTkwIj5QaG9uZSo8L2xhYmVsPiA8ZGl2IGNsYXNzPSJhYXdmaWVsZGlucHV0IG1vYmlsZWlucHV0Ij4gPGlucHV0IGFyaWEtbGFiZWxsZWRieT0ibW9iaWxlXzE3NjMzNTYwNjQ5OTAiIGlkPSJtb2JpbGVfMTc2MzM1NjA2NDk5MCIgIG5hbWU9Im1vYmlsZTtQaG9uZSIgdHlwZT0idGVsIiBwbGFjZWhvbGRlcj0iUGhvbmUiICAgbWF4bGVuZ3RoPTEwIG1pbmxlbmd0aD0xMCBwYXR0ZXJuPVswLTldezEwfSByZXF1aXJlZD4gPC9kaXY+IDwvZGl2PjxkaXYgY2xhc3M9ImFhd2ZpZWxkY29sIGFhd2ZpZWxkY29sMzMgYWF3ZmllbGRzZWxlY3QiPiA8bGFiZWwgY2xhc3M9IndvcmQtYnJlYWsiIGZvcj0iY3VzdG9tX2ZpZWxkX2Ryb3Bkb3duXzE3NjMzNTYwNjQ5OTBfTUdKV1NRS1JOOVdIUCI+UGF0aWVudCBUeXBlPC9sYWJlbD4gPGRpdiBjbGFzcz0iYWF3ZmllbGRpbnB1dCBhYXdmbGRzZWxlY3Rib3giPiA8c2VsZWN0IGlkPSJjdXN0b21fZmllbGRfZHJvcGRvd25fMTc2MzM1NjA2NDk5MF9NR0pXU1FLUk45V0hQIiBuYW1lPSJjdXN0b21fZmllbGRfZHJvcGRvd25fTUdKV1NRS1JOOVdIUDtQYXRpZW50IFR5cGUiICA+PG9wdGlvbiB2YWx1ZT0iIj5QYXRpZW50IFR5cGU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIwTmV3UGF0aWVudCI+TmV3IFBhdGllbnQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxUmV0dXJuaW5nUGF0aWVudCI+UmV0dXJuaW5nIFBhdGllbnQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIyRW1lcmdlbmN5U2VydmljZXMiPkVtZXJnZW5jeSBTZXJ2aWNlczwvb3B0aW9uPjwvc2VsZWN0PiA8L2Rpdj4gPC9kaXY+PGRpdiBjbGFzcz0iYWF3ZmllbGRjb2wgYWF3ZmllbGRjb2wzMyBhYXdmaWVsZHNlbGVjdCI+IDxsYWJlbCBjbGFzcz0id29yZC1icmVhayIgZm9yPSJjdXN0b21fZmllbGRfZHJvcGRvd25fMTc2MzM1NjA2NDk5MF9NR0pXU1FLUkFPVjNYIj5JbnN1cmFuY2U8L2xhYmVsPiA8ZGl2IGNsYXNzPSJhYXdmaWVsZGlucHV0IGFhd2ZsZHNlbGVjdGJveCI+IDxzZWxlY3QgaWQ9ImN1c3RvbV9maWVsZF9kcm9wZG93bl8xNzYzMzU2MDY0OTkwX01HSldTUUtSQU9WM1giIG5hbWU9ImN1c3RvbV9maWVsZF9kcm9wZG93bl9NR0pXU1FLUkFPVjNYO0luc3VyYW5jZSIgID48b3B0aW9uIHZhbHVlPSIiPkluc3VyYW5jZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjBBc3N1cmFudCI+QXNzdXJhbnQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxUHJpbmNpcGFsQ29ubmVjdGlvbkRlbnRhbCI+UHJpbmNpcGFsIENvbm5lY3Rpb24gRGVudGFsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMlVuaXRlZENvbmNvcmRpYSI+VW5pdGVkIENvbmNvcmRpYTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjNVbml0ZWRIZWFsdGhjYXJlIj5Vbml0ZWQgSGVhbHRoY2FyZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjRSZWdlbmNlIj5SZWdlbmNlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iNVByZW1lcmEiPlByZW1lcmE8L29wdGlvbj48b3B0aW9uIHZhbHVlPSI2TWV0TGlmZSI+TWV0TGlmZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjdMJkkiPkwmSTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjhMaWZld2lzZSI+TGlmZXdpc2U8L29wdGlvbj48b3B0aW9uIHZhbHVlPSI5SHVtYW5hSE1BIj5IdW1hbmEgSE1BPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMTBHdWFyZGlhbiI+R3VhcmRpYW48L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxMUdFSEEiPkdFSEE8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxMkRlbHRhRGVudGFsKEFsbFN0YXRlcykiPkRlbHRhIERlbnRhbCAoQWxsIFN0YXRlcyk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxM0RlbnRlbWF4Ij5EZW50ZW1heDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjE0Q2lnbmEiPkNpZ25hPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMTVBbnRoZW1CbHVlQ3Jvc3MiPkFudGhlbSBCbHVlIENyb3NzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iMTZBZXRuYSI+QWV0bmE8L29wdGlvbj48b3B0aW9uIHZhbHVlPSIxN0FtZXJpdGFzIj5BbWVyaXRhczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IjE4T3RoZXJzIj5PdGhlcnM8L29wdGlvbj48L3NlbGVjdD4gPC9kaXY+IDwvZGl2PjxkaXYgY2xhc3M9ImFhd2ZpZWxkY29sIGFhd2ZpZWxkdGV4dGFyZWEiPiA8bGFiZWwgY2xhc3M9IndvcmQtYnJlYWsiIGZvcj0iY29tbWVudF8xNzYzMzU2MDY0OTkwIj5Db21tZW50czwvbGFiZWw+IDxkaXYgY2xhc3M9ImFhd2ZpZWxkaW5wdXQgYWF3ZmxkdGV4dGFyZWJveCI+IDx0ZXh0YXJlYSBhcmlhLWxhYmVsbGVkYnk9ImNvbW1lbnRfMTc2MzM1NjA2NDk5MCIgaWQ9ImNvbW1lbnRfMTc2MzM1NjA2NDk5MCIgbmFtZT0iY29tbWVudCIgcGxhY2Vob2xkZXI9IlR5cGUgaGVyZSIgbWF4bGVuZ3RoPSI1MDAiICByb3dzPSIyIiBjb2xzPSI1MCIgc3R5bGU9ImhlaWdodDphdXRvIj48L3RleHRhcmVhPjwvZGl2PiA8L2Rpdj48ZGl2IGNsYXNzPSJhYXdmb3JtLWdyb3VwIGFhd2Zvcm0tYnRuIj4gPGJ1dHRvbiBhcmlhLWxhYmVsPSJzdWJtaXQgZm9ybSIgaWQ9ImFkaXRBcHBXZWJGb3JtX2JjODNjNGYxLWVmN2MtNDExMS1iZjAxLWM4OTZmMDQ1MjRlMS1idG4iIGNsYXNzPSJjdXN0b21idG5zYXZlIGJ1dHRvbiBidXR0b25idG4iIHR5cGU9ImJ1dHRvbiIgb25DbGljaz0iY2xpY2tfMTc2MzM1NjA2NDk5MCh0aGlzKSI+U3VibWl0PC9idXR0b24+PC9kaXY+PGRpdiBjbGFzcz0iYWF3Zm9ybS1ncm91cCBhYXdmb3JtLWNhcHRjaGEiPjxkaXYgaWQ9IndlYmNhcHRjaGFfMTc2MzM1NjA2NDk5MCIgY2xhc3M9ImctcmVjYXB0Y2hhIj4mbmJzcDs8L2Rpdj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAgICAgICAgIC5ob3N0bm90Zm91bmRib3ggeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxMDAlOyBiYWNrZ3JvdW5kOiAjZmZmZmZmOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDQwcHggMDsgfQogICAgICAgICAgICAgICAgICAgIC5ob3N0bm90Zm91bmRib3ggaDEgeyBmb250LXNpemU6IDUwcHg7IGNvbG9yOiAjMDAwMDAwOyBmb250LXdlaWdodDogYm9sZDsgbGluZS1oZWlnaHQ6IDEuMzsgbWFyZ2luOiAwIDAgMjBweCAwOyB9CiAgICAgICAgICAgICAgICAgICAgLmFhd2Zvcm0tZ3JvdXAuYWF3Zm9ybS1jYXB0Y2hhIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9IAogICAgICAgICAgICAgICAgICAgIC5ncmVjYXB0Y2hhLWJhZGdlIHsgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7IHotaW5kZXg6IC0xICFpbXBvcnRhbnQ7IG9wYWNpdHk6MDsgfSAKICAgICAgICAgICAgICAgICAgICAuZXJyb3JDbGFzcyB7IGJvcmRlcjogMnB4IHNvbGlkIHJlZCAhaW1wb3J0YW50OyB9IAogICAgICAgICAgICAgICAgICAgIC5ob3N0bm90Zm91bmRib3ggcCB7IGZvbnQtc2l6ZTogMThweDsgbWFyZ2luOiAwOyBjb2xvcjogIzAwMDAwMDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfQogICAgICAgICAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1jb250YWluZXIiIGlkPSJhcHBfbG9hZGVyXzE3NjMzNTYwNjQ5OTAiIHN0eWxlPSJkaXNwbGF5Om5vbmU7YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O3Bvc2l0aW9uOiBmaXhlZDtsZWZ0OiAwO3RvcDowO3JpZ2h0OiAwO2xlZnQ6IDA7d2lkdGg6IGF1dG87aGVpZ2h0OiBhdXRvO2JvdHRvbTogMDt6LWluZGV4OiAxMDAwMDAwMDAwO2JhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC45KTsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdodHRwczovL3N0YXRpYy5hZGl0LmNvbS9pbWFnZXMvZnVsbC1wYWdlLWxvZGVyLmdpZicpOyI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwaW5uZXItY29udGFpbmVyIiBpZD0iYXBwX2xvYWRlcl9zaGVkdWxlXzE3NjMzNTYwNjQ5OTAiIHN0eWxlPSJkaXNwbGF5Om5vbmU7YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O3Bvc2l0aW9uOiBmaXhlZDtsZWZ0OiAwO3RvcDowO3JpZ2h0OiAwO2xlZnQ6IDA7d2lkdGg6IGF1dG87aGVpZ2h0OiBhdXRvO2JvdHRvbTogMDt6LWluZGV4OiAxMDAwMDAwMDAwO2JhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC45KTsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdodHRwczovL3N0YXRpYy5hZGl0LmNvbS9pbWFnZXMvT25saW5lLVNjaGVkdWxpbmctV2FpdGluZy1TY3JlZW4uZ2lmJyk7Ij48L2Rpdj4=') + window.atob('PHNjcmlwdD4KdmFyIG1Gb3JtXzE3NjMzNTYwNjQ5OTAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWRpdEFwcFdlYkZvcm1JZF8xNzYzMzU2MDY0OTkwIik7CnZhciBhcHBvaW50bWVudElkID0gIiI7CnZhciBjdXJyZW50TG9jYXRpb25JZCA9ICIiOwp2YXIgY3VycmVudFNlcnZpY2VJZCA9ICIiOwp2YXIgY3VycmVudFByb3ZpZGVyID0gIiI7CnZhciBzZWxlY3RlZFRpbWUgPSAiIjsKdmFyIGN1cnJlbnRmaXJzdGRheSA9ICIiOwp2YXIgc291cmNlID0gImRpcmVjdCI7CnZhciBPcmdhbml6YXRpb24gPSAiIjsKdmFyIGNoZWNrZWRWYWwgPSAiTmV3IjsKdmFyIFRpbWluaWdPYmplY3RzXzE3NjMzNTYwNjQ5OTAgPXVuZGVmaW5lZDsKdmFyIGlzX2NhcHRjaGFfc2VsZWN0ZWRfMTc2MzM1NjA2NDk5MD10cnVlOwp2YXIgYXBwdENvbmZpcm1PYmogPSB7fTsKdmFyIHNldFRpbWVfMTc2MzM1NjA2NDk5MDsKdmFyIHJlZ0VtYWlsID0KICAvXigoW148PigpW1xdXFwuLDs6XHNAXCJdKyhcLltePD4oKVtcXVxcLiw7OlxzQFwiXSspKil8KFwiLitcIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XF0pfCgoW2EtekEtWlwtMC05XStcLikrW2EtekEtWl17Mix9KSkkLzsKdmFyIGxvY2F0aW9uc0RldGFpbHNfMTc2MzM1NjA2NDk5MCA9IHsiNWNjNmQ0NWUtZDkxYS00ZjExLTgzYzctOWVlMjZmYWY1ZmVjIjp7ImlzUmV2IjpmYWxzZX19Owp2YXIgaXNSZXZfMTc2MzM1NjA2NDk5MCA9IGZhbHNlOwoKaWYgKHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9ICJ1bmRlZmluZWQiKSB7CiAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9uKSB7CiAgICBjbGVhclRpbWVvdXQoc2V0VGltZV8xNzYzMzU2MDY0OTkwKTsKICAgIHNldFRpbWVfMTc2MzM1NjA2NDk5MCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKHRoYW5rX3lvdV91cmwpIHsKICAgICAgdmFyIHRoYW5rcGFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0aGFua3lvdV9wYWdlIik7CiAgICAgIGlmICh0aGFua3BhZ2UgJiYgdGhhbmtwYWdlLnZhbHVlKSB7CiAgICAgICAgY2xvc2VQb3B1cF9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEodGhhbmtwYWdlLnZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjbG9zZVBvcHVwX2JjODNjNGYxX2VmN2NfNDExMV9iZjAxX2M4OTZmMDQ1MjRlMSgiIik7CiAgICAgIH0KICAgIH0sIDMwMDAwMCk7CiAgfSk7CgogIG9ic2VydmVyLm9ic2VydmUoYXBwX2xvYWRlcl8xNzYzMzU2MDY0OTkwLCB7CiAgICBjaGlsZExpc3Q6IGZhbHNlLAogICAgYXR0cmlidXRlczogdHJ1ZSwKICAgIHN1YnRyZWU6IGZhbHNlLAogICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSwKICB9KTsKfQpmdW5jdGlvbiByZW1vdmVPcHRpb25zKHNlbGVjdEVsZW1lbnQpIHsKICB2YXIgaSwKICAgIEwgPSBzZWxlY3RFbGVtZW50Lm9wdGlvbnMubGVuZ3RoIC0gMTsKICBmb3IgKGkgPSBMOyBpID49IDA7IGktLSkgewogICAgc2VsZWN0RWxlbWVudC5yZW1vdmUoaSk7CiAgfQp9Cgp2YXIgZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uIChkYXRlKSB7CiAgdmFyIGQgPSBkYXRlLAogICAgbW9udGggPSAiIiArIChkLmdldE1vbnRoKCkgKyAxKSwKICAgIGRheSA9ICIiICsgZC5nZXREYXRlKCksCiAgICB5ZWFyID0gZC5nZXRGdWxsWWVhcigpOwoKICBpZiAobW9udGgubGVuZ3RoIDwgMikgbW9udGggPSAiMCIgKyBtb250aDsKICBpZiAoZGF5Lmxlbmd0aCA8IDIpIGRheSA9ICIwIiArIGRheTsKICByZXR1cm4gW3llYXIsIG1vbnRoLCBkYXldLmpvaW4oIi0iKTsKfTsKCnZhciByZW1vdmVPcHRpb25zXzE3NjMzNTYwNjQ5OTAgPSBmdW5jdGlvbiAoZWxlbWVudCwgZGVmYXVsdFRleHQpIHsKICB2YXIgaSwKICAgIEwgPSBlbGVtZW50Lm9wdGlvbnMubGVuZ3RoIC0gMTsKICBmb3IgKGkgPSBMOyBpID49IDA7IGktLSkgewogICAgZWxlbWVudC5yZW1vdmUoaSk7CiAgfQogIHZhciBvcHQxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CiAgb3B0MS52YWx1ZSA9ICIiOwogIG9wdDEudGV4dCA9IGRlZmF1bHRUZXh0OwogIGVsZW1lbnQuYWRkKG9wdDEpOwp9OwoKdmFyIGxvY2F0aW9uQ2hhbmdlT25TZWxlY3RfMTc2MzM1NjA2NDk5MCA9IGZ1bmN0aW9uICh2YWx1ZSkgewogIGpRdWVyeSgiI2hlYXBib3hfbG9jYXRpb25fMTc2MzM1NjA2NDk5MCAuaG9sZGVyIikucmVtb3ZlQ2xhc3MoImVycm9yQ2xhc3MiKTsKICBpZiAoVGltaW5pZ09iamVjdHNfMTc2MzM1NjA2NDk5MCkgewogICAgaWYgKHZhbHVlKSB7CiAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGRhdGVfMTc2MzM1NjA2NDk5MCIpKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBkYXRlXzE3NjMzNTYwNjQ5OTAiKS52YWx1ZSA9ICIiOwogICAgICAgIHZhciBwdGltZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHRpbWVfMTc2MzM1NjA2NDk5MCIpOwogICAgICAgIGlmICgKICAgICAgICAgIHB0aW1lRWxlbWVudCAmJgogICAgICAgICAgcHRpbWVFbGVtZW50Lm9wdGlvbnMgJiYKICAgICAgICAgIHB0aW1lRWxlbWVudC5vcHRpb25zLmxlbmd0aCA+IDAKICAgICAgICApIHsKICAgICAgICAgIHJlbW92ZU9wdGlvbnNfMTc2MzM1NjA2NDk5MChwdGltZUVsZW1lbnQsIHB0aW1lRWxlbWVudC5vcHRpb25zWzBdLnRleHQpOwogICAgICAgICAgalF1ZXJ5KCIjcHRpbWVfMTc2MzM1NjA2NDk5MCIpLmhlYXBib3goeyBoZWFwc2l6ZTogIjIwMHB4IiB9KTsKICAgICAgICAgIGpRdWVyeSgiI3B0aW1lXzE3NjMzNTYwNjQ5OTAiKS5oZWFwYm94KCJ1cGRhdGUiKTsKICAgICAgICB9IGVsc2UgaWYgKHB0aW1lRWxlbWVudCkgewogICAgICAgICAgcmVtb3ZlT3B0aW9uc18xNzYzMzU2MDY0OTkwKHB0aW1lRWxlbWVudCwgIlBsZWFzZSBTZWxlY3QgUHJlZmVycmVkIFRpbWUiKTsKICAgICAgICAgIGpRdWVyeSgiI3B0aW1lXzE3NjMzNTYwNjQ5OTAiKS5oZWFwYm94KHsgaGVhcHNpemU6ICIyMDBweCIgfSk7CiAgICAgICAgICBqUXVlcnkoIiNwdGltZV8xNzYzMzU2MDY0OTkwIikuaGVhcGJveCgidXBkYXRlIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHByZXBhcmVUaW1pbmdMaXN0XzE3NjMzNTYwNjQ5OTAobmV3IERhdGUoKS5nZXREYXkoKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZhciBwdGltZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHRpbWVfMTc2MzM1NjA2NDk5MCIpOwogICAgICBpZiAoCiAgICAgICAgcHRpbWVFbGVtZW50ICYmCiAgICAgICAgcHRpbWVFbGVtZW50Lm9wdGlvbnMgJiYKICAgICAgICBwdGltZUVsZW1lbnQub3B0aW9ucy5sZW5ndGggPiAwCiAgICAgICkgewogICAgICAgIHJlbW92ZU9wdGlvbnNfMTc2MzM1NjA2NDk5MChwdGltZUVsZW1lbnQsIHB0aW1lRWxlbWVudC5vcHRpb25zWzBdLnRleHQpOwogICAgICAgIGpRdWVyeSgiI3B0aW1lXzE3NjMzNTYwNjQ5OTAiKS5oZWFwYm94KHsgaGVhcHNpemU6ICIyMDBweCIgfSk7CiAgICAgICAgalF1ZXJ5KCIjcHRpbWVfMTc2MzM1NjA2NDk5MCIpLmhlYXBib3goInVwZGF0ZSIpOwogICAgICB9IGVsc2UgaWYgKHB0aW1lRWxlbWVudCkgewogICAgICAgIHJlbW92ZU9wdGlvbnNfMTc2MzM1NjA2NDk5MChwdGltZUVsZW1lbnQsICJQbGVhc2UgU2VsZWN0IFByZWZlcnJlZCBUaW1lIik7CiAgICAgICAgalF1ZXJ5KCIjcHRpbWVfMTc2MzM1NjA2NDk5MCIpLmhlYXBib3goeyBoZWFwc2l6ZTogIjIwMHB4IiB9KTsKICAgICAgICBqUXVlcnkoIiNwdGltZV8xNzYzMzU2MDY0OTkwIikuaGVhcGJveCgidXBkYXRlIik7CiAgICAgIH0KICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwZGF0ZV8xNzYzMzU2MDY0OTkwIikpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGRhdGVfMTc2MzM1NjA2NDk5MCIpLnZhbHVlID0gIiI7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9OwpmdW5jdGlvbiBpc1ZhbGlkRGF0ZShkKSB7CiAgcmV0dXJuIGQgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkKTsKfQoKdmFyIGRvVGhpc09uQmx1cl8xNzYzMzU2MDY0OTkwID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKICBmb3IgKHZhciBpID0gMDsgaSA8IG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKICAgIGlmIChtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkICE9ICIiKSB7CiAgICAgIHZhciB2aWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkKS52YWx1ZTsKICAgICAgaWYgKG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0ucmVxdWlyZWQgJiYgIXZpZCkgewogICAgICB9IGVsc2UgewogICAgICAgIGlmIChtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkID09PSAiZW1haWxfMTc2MzM1NjA2NDk5MCIpIHsKICAgICAgICAgIGlmIChyZWdFbWFpbC50ZXN0KHZpZCkgPT0gZmFsc2UpIHsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRvY3VtZW50CiAgICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQpCiAgICAgICAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoImVycm9yQ2xhc3MiKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZG9jdW1lbnQKICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQpCiAgICAgICAgICAgIC5jbGFzc0xpc3QucmVtb3ZlKCJlcnJvckNsYXNzIik7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNSZXZfMTc2MzM1NjA2NDk5MCAmJiBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkID09ICJ6aXBjb2RlXzE3NjMzNTYwNjQ5OTAiKSB7CiAgICAgICAgICB2YXIgdmFsdWUgPSBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLnZhbHVlOwogICAgICAgICAgaWYoaXNWYWxpZFBvc3RhbENvZGUodmFsdWUpKXsKICAgICAgICAgICAgJCgiI3ppcGNvZGVfMTc2MzM1NjA2NDk5MCIpLnJlbW92ZUNsYXNzKCJlcnJvckNsYXNzIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKCIjemlwY29kZV8xNzYzMzU2MDY0OTkwIikuYWRkQ2xhc3MoImVycm9yQ2xhc3MiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn07Cgp2YXIgYmluZEJsdXJFdmVudF8xNzYzMzU2MDY0OTkwID0gZnVuY3Rpb24gKCkgewogIGZvciAodmFyIGkgPSAwOyBpIDwgbUZvcm1fMTc2MzM1NjA2NDk5MC5lbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgbUZvcm1fMTc2MzM1NjA2NDk5MFtpXS5vbmJsdXIgPSBkb1RoaXNPbkJsdXJfMTc2MzM1NjA2NDk5MDsKICB9Cn07CgpiaW5kQmx1ckV2ZW50XzE3NjMzNTYwNjQ5OTAoKTsKZnVuY3Rpb24gdHlwZUNoZWNrZWRSYWRpb18xNzYzMzU2MDY0OTkwKGl0bWUpIHsKICBjaGVja2VkVmFsID0gaXRtZTsKfQoKZnVuY3Rpb24gZ2V0RG9tYWluKHVybCkgewogIGlmICghdXJsKSB7CiAgICB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsKICB9CiAgdmFyIHJlZ3ggPSBuZXcgUmVnRXhwKCI6Ly8od3d3WzAtOV0/Lik/KC5bXi86XSspIiwgImkiKTsKICB2YXIgbWF0Y2ggPSB1cmwubWF0Y2gocmVneCk7CiAgaWYgKAogICAgbWF0Y2ggIT0gbnVsbCAmJgogICAgbWF0Y2gubGVuZ3RoID4gMiAmJgogICAgdHlwZW9mIG1hdGNoWzJdID09PSAic3RyaW5nIiAmJgogICAgbWF0Y2hbMl0ubGVuZ3RoID4gMAogICkgewogICAgaG9zdE5hbWUgPSBtYXRjaFsyXTsKICB9IGVsc2UgewogICAgaG9zdE5hbWUgPSBudWxsOwogIH0KICB2YXIgZG9tYWluID0gaG9zdE5hbWU7CiAgaWYgKGhvc3ROYW1lICE9IG51bGwpIHsKICAgIHZhciBwYXJ0cyA9IGhvc3ROYW1lLnNwbGl0KCIuIikucmV2ZXJzZSgpOwogICAgaWYgKHBhcnRzICE9IG51bGwgJiYgcGFydHMubGVuZ3RoID4gMSkgewogICAgICBkb21haW4gPSBwYXJ0c1sxXSArICIuIiArIHBhcnRzWzBdOwogICAgICBpZiAoaG9zdE5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCIuY28uIikgIT0gLTEgJiYgcGFydHMubGVuZ3RoID4gMikgewogICAgICAgIGRvbWFpbiA9IHBhcnRzWzJdICsgIi4iICsgZG9tYWluOwogICAgICB9CiAgICAgIGlmIChob3N0TmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIi5pbi4iKSAhPSAtMSAmJiBwYXJ0cy5sZW5ndGggPiAyKSB7CiAgICAgICAgZG9tYWluID0gcGFydHNbMl0gKyAiLiIgKyBkb21haW47CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIGRvbWFpbjsKfQoKaWYgKGdldERvbWFpbigpICE9PSBnZXREb21haW4oImh0dHBzOi8vc2VhdHRsZXNvdW5kZGVudGFsLmNvbS8iKSkgewogIGlmIChnZXREb21haW4oKSAhPT0gZ2V0RG9tYWluKCJodHRwczovL3dlYmNhY2hlLmdvb2dsZXVzZXJjb250ZW50LmNvbSIpKSB7CiAgICB2YXIgcGFyZW50ID0gbUZvcm1fMTc2MzM1NjA2NDk5MC5wYXJlbnROb2RlOwogICAgcGFyZW50LnJlbW92ZUNoaWxkKG1Gb3JtXzE3NjMzNTYwNjQ5OTApOwogICAgdmFyIGlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGlEaXYuaWQgPSAiYWRpdEFwcFdlYkZvcm1JZF8xNzYzMzU2MDY0OTkwIjsKICAgIGlEaXYuY2xhc3NOYW1lID0gImhvc3Rub3Rmb3VuZGJveCI7CiAgICBpRGl2LmlubmVySFRNTCA9ICI8cD48c3Ryb25nPk9vcHMhPC9zdHJvbmc+IEludmFsaWQgSG9zdCBVUkw8L3A+IjsKICAgIHBhcmVudC5hcHBlbmRDaGlsZChpRGl2KTsKICB9Cn0KCmZ1bmN0aW9uIGNyZWF0ZUNvb2tpZShuYW1lLCB2YWx1ZSwgZGF5cykgewogIGRheXMgPSBjb29raWVEdXJhdGlvbigpOwogIGlmIChkYXlzKSB7CiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CiAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyBkYXlzICogMjQgKiA2MCAqIDYwICogMTAwMCk7CiAgICB2YXIgZXhwaXJlcyA9ICI7IGV4cGlyZXM9IiArIGRhdGUudG9HTVRTdHJpbmcoKTsKICB9IGVsc2UgdmFyIGV4cGlyZXMgPSAiIjsKICBkb2N1bWVudC5jb29raWUgPSBuYW1lICsgIj0iICsgdmFsdWUgKyBleHBpcmVzICsgIjsgcGF0aD0vIjsKfQpmdW5jdGlvbiByZWFkQ29va2llKG5hbWUpIHsKICB2YXIgbmFtZUVRID0gbmFtZSArICI9IjsKICB2YXIgY2EgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoIjsiKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNhLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgYyA9IGNhW2ldOwogICAgd2hpbGUgKGMuY2hhckF0KDApID09ICIgIikgYyA9IGMuc3Vic3RyaW5nKDEsIGMubGVuZ3RoKTsKICAgIGlmIChjLmluZGV4T2YobmFtZUVRKSA9PSAwKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCwgYy5sZW5ndGgpOwogIH0KICByZXR1cm4gbnVsbDsKfQpmdW5jdGlvbiBkb2N1bWVudFVSTCgpIHsKICByZXR1cm4gZG9jdW1lbnQuVVJMLnRvTG93ZXJDYXNlKCk7Cn0KZnVuY3Rpb24gY29va2llRHVyYXRpb24oKSB7CiAgcmV0dXJuIDMwOwp9CmZ1bmN0aW9uIGdldExhbmRpbmcoKSB7CiAgdmFyIGUgPSByZWFkQ29va2llKCJBZGl0V0VCRk9STV9sYW5kaW5nIik7CiAgcmV0dXJuICgKICAgIGUgfHwgKGUgPSBkb2N1bWVudFVSTCgpKSwKICAgIGNyZWF0ZUNvb2tpZSgiQWRpdFdFQkZPUk1fbGFuZGluZyIsIGRlY29kZVVSSUNvbXBvbmVudChlKSksCiAgICBlCiAgKTsKfQpmdW5jdGlvbiBkb2N1bWVudFJlZmVycmVyKCkgewogIHJldHVybiBkb2N1bWVudC5yZWZlcnJlciAKICAgID8gZG9jdW1lbnQucmVmZXJyZXIKICAgIDogZG9jdW1lbnRVUkwoKS5pbmNsdWRlcygndXRtX3NvdXJjZScpID8gZG9jdW1lbnRVUkwoKSA6ICcnOwp9CmZ1bmN0aW9uIGdldFVSTFBhcmFtZXRlcihlKSB7CiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKSB8fCBudWxsOwp9CmZ1bmN0aW9uIGdldEN1cnJlbnRSZWZlcnJlcigpIHsKICByZXR1cm4gKGUgPSBkb2N1bWVudFJlZmVycmVyKCkpLCBlIHx8IChlID0gImRpcmVjdCIpLCBlOwp9CmZ1bmN0aW9uIGdldFJlZmVycmVyS2V5KGUsIGEpIHsKICAoYSA9IGRlY29kZVVSSUNvbXBvbmVudChhKSksIChlID0gZGVjb2RlVVJJQ29tcG9uZW50KGUpKTsKICByZXR1cm4gKGUgPSBlIHx8ICJkaXJlY3QiKSwgZ2V0R29vZ2xlU291cmNlKGUsIGEpOwp9CmZ1bmN0aW9uIGdldFJlZmVycmVyKCkgewogIC8vdmFyIGUgPSByZWFkQ29va2llKCJBZGl0V0VCX3JlZmVycmVyIik7CiAgdmFyIGU7CiAgcmV0dXJuICgKICAgIGUgfHwgKGUgPSBnZXRDdXJyZW50UmVmZXJyZXIoKSksCiAgICBjcmVhdGVDb29raWUoIkFkaXRXRUJfcmVmZXJyZXIiLCBkZWNvZGVVUklDb21wb25lbnQoZSkpLAogICAgZQogICk7Cn0KZnVuY3Rpb24gZ2V0R29vZ2xlU291cmNlKGUsIGEpIHsKICByZXR1cm4gZS5tYXRjaCgvZG91YmxlY2xpY2svKSB8fCBhLm1hdGNoKC9nY2xpZD0vKQogICAgPyAiZ29vZ2xlX3BhaWQiCiAgICA6IGUubWF0Y2goL2dvb2dsZS8pICYmICFlLm1hdGNoKC9tYWlsXC5nb29nbGVcLmNvbS8pCiAgICA/IGUubWF0Y2goL21hcHNcLmdvb2dsZVwuW2EtelwuXXsyLDV9LykKICAgICAgPyAiZ29vZ2xlX2xvY2FsIgogICAgICA6IGUubWF0Y2goL2dvb2dsZWFkc2VydmljZXMvKSB8fAogICAgICAgIGEubWF0Y2goL3V0bV8obWVkaXVtfHNvdXJjZSk9W2NwXXBjL2kpIHx8CiAgICAgICAgYS5tYXRjaCgvKG1hdGNodHlwZXxhZHBvc2l0aW9uKT0vaSkKICAgICAgPyAiZ29vZ2xlX3BhaWQiCiAgICAgIDogImdvb2dsZV9vcmdhbmljIgogICAgOiBnZXRZYWhvb1NvdXJjZShlLCBhKTsKfQpmdW5jdGlvbiBnZXRZYWhvb1NvdXJjZShlLCBhKSB7CiAgcmV0dXJuIGUubWF0Y2goL3lhaG9vLykgJiYgIWUubWF0Y2goL21haWxcLnlhaG9vXC5jb20vKQogICAgPyBlLm1hdGNoKC9sb2NhbFwuKHNlYXJjaFwuKT95YWhvb1wuY29tLykKICAgICAgPyAieWFob29fbG9jYWwiCiAgICAgIDogYS5tYXRjaCgvdXRtX21lZGl1bT1bY3BdcGMvaSkgfHwKICAgICAgICBhLm1hdGNoKC91dG1fc291cmNlPVlhaG9vL2kpIHx8CiAgICAgICAgYS5tYXRjaCgvdXRtX3NvdXJjZT15YWhvby9pKQogICAgICA/ICJ5YWhvb19wYWlkIgogICAgICA6ICJ5YWhvb19vcmdhbmljIgogICAgOiBnZXRCaW5nU291cmNlKGUsIGEpOwp9CmZ1bmN0aW9uIGdldEJpbmdTb3VyY2UoZSwgYSkgewogIHJldHVybiBlLm1hdGNoKC9iaW5nLykgfHwgYS5tYXRjaCgvdXRtX3NvdXJjZT1iaW5nL2kpCiAgICA/IGUubWF0Y2goL2JpbmcuY29tL2kpCiAgICAgID8gImJpbmdfbG9jYWwiCiAgICAgIDogYS5tYXRjaCgvdXRtX21lZGl1bT1bcGNdcGMvaSkKICAgICAgPyAiYmluZ19wYWlkIgogICAgICA6ICJiaW5nX29yZ2FuaWMiCiAgICA6IGUubWF0Y2goL21zblwuY29tLykKICAgID8gImJpbmdfcGFpZCIKICAgIDogZ2V0RmFjZWJvb2tTb3VyY2UoZSwgYSk7Cn0KZnVuY3Rpb24gZ2V0RmFjZWJvb2tTb3VyY2UoZSwgYSkgewogIGlmIChlLm1hdGNoKC9mYWNlYm9vay8pKSB7CiAgICBpZiAoYS5tYXRjaCgvdXRtX21lZGl1bT1bY3BdcGMvaSkpIHsKICAgICAgcmV0dXJuICJmYWNlYm9va19wYWlkIjsKICAgIH0gZWxzZSBpZiAoZS5tYXRjaCgvZmFjZWJvb2tcLmNvbS9pKSkgewogICAgICByZXR1cm4gImZhY2Vib29rX29yZ2FuaWMiOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGRpcmVjdFNvdXJjZShlLCBhKTsKICAgIH0KICB9IGVsc2UgewogICAgcmV0dXJuIGRpcmVjdFNvdXJjZShlLCBhKTsKICB9Cn0KZnVuY3Rpb24gZ2V0UmVmZXJyZXJEb21haW4oZSkgewogIHZhciBhID0gZS5zcGxpdCgiLyIpWzJdOwogIGlmICh0eXBlb2YgYSAhPSAidW5kZWZpbmVkIikgewogICAgdmFyIHIgPSBhLnNwbGl0KCIuIik7CiAgICByZXR1cm4gci5sZW5ndGggPiAyID8gcltyLmxlbmd0aCAtIDJdICsgIi4iICsgcltyLmxlbmd0aCAtIDFdIDogYTsKICB9IGVsc2UgewogICAgcmV0dXJuIGU7CiAgfQp9CmZ1bmN0aW9uIGRpcmVjdFNvdXJjZShlLCBhKSB7CiAgcmV0dXJuICJkaXJlY3QiID09PSBlCiAgICA/IGEubWF0Y2goL3V0bV9tZWRpdW09W2NwXXBjL2kpICYmIGEubWF0Y2goL3V0bV9zb3VyY2U9Z29vZ2xlL2kpCiAgICAgID8gImdvb2dsZV9wYWlkIgogICAgICA6ICJkaXJlY3QiCiAgICA6IGdldFJlZmVycmVyRG9tYWluKGUpOwp9CmZ1bmN0aW9uIGdldFNvdXJjZVByaW9yaXR5KHNvdXJjZSkgewogIHZhciBvYmogPSB7CiAgICBmYWNlYm9va19wYWlkOiA5LAogICAgZ29vZ2xlX3BhaWQ6IDgsCiAgICBiaW5nX3BhaWQ6IDcsCiAgICB5YWhvb19wYWlkOiA2LAogICAgZmFjZWJvb2tfb3JnYW5pYzogNSwKICAgIGdvb2dsZV9vcmdhbmljOiA0LAogICAgYmluZ19vcmdhbmljOiAzLAogICAgeWFob29fb3JnYW5pYzogMiwKICAgIGRpcmVjdDogMSwKICB9OwogIHZhciByZXN1bHQgPSBvYmpbc291cmNlXTsKICBpZiAoaXNOYU4ocmVzdWx0KSkgewogICAgcmVzdWx0ID0gMDsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBnZXRzb3VyY2VuYW1lKCkgewogIChyZWZlcnJlciA9IGdldFJlZmVycmVyKCkpLAogICAgKGxhbmRpbmcgPSBnZXRMYW5kaW5nKCkpLAogICAgKHJlZmVycmVyX2tleSA9IGdldFJlZmVycmVyS2V5KHJlZmVycmVyLCBsYW5kaW5nKSk7CiAgaWYgKHJlZmVycmVyX2tleS5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5ob3N0KSA+PSAwKSB7CiAgICByZWZlcnJlcl9rZXkgPSAiZGlyZWN0IjsKICB9CiAgcmV0dXJuIHJlZmVycmVyX2tleTsKfQoKc291cmNlID0gZ2V0c291cmNlbmFtZSgpOwp2YXIgY3VycmVudFNvdXJjZSA9IGdldFJlZmVycmVyS2V5KGdldEN1cnJlbnRSZWZlcnJlcigpLCBkb2N1bWVudFVSTCgpKTsKaWYgKAogIGN1cnJlbnRTb3VyY2UgIT0gImdvb2dsZV9vcmdhbmljIiAmJgogIChnZXRDdXJyZW50UmVmZXJyZXIoKS5pbmRleE9mKCJ1dG1fc291cmNlPUdNQkxpc3RpbmciKSA+PSAwIHx8CiAgICBkb2N1bWVudFVSTCgpLmluZGV4T2YoImJ1c2luZXNzLnNpdGUiKSA+PSAwKQopIHsKICBjdXJyZW50U291cmNlID0gImdvb2dsZV9vcmdhbmljIjsKfQppZiAoZ2V0U291cmNlUHJpb3JpdHkoc291cmNlKSA8IGdldFNvdXJjZVByaW9yaXR5KGN1cnJlbnRTb3VyY2UpKSB7CiAgY3JlYXRlQ29va2llKCJBZGl0V0VCX3JlZmVycmVyIiwgZGVjb2RlVVJJQ29tcG9uZW50KGN1cnJlbnRTb3VyY2UpKSwKICAgIChzb3VyY2UgPSBjdXJyZW50U291cmNlKTsKfQpnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKZy5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAic291cmNlIik7Cmcuc2V0QXR0cmlidXRlKCJ0eXBlIiwgImhpZGRlbiIpOwpnLnNldEF0dHJpYnV0ZSgiaWQiLCAic291cmNlXzE3NjMzNTYwNjQ5OTAiKTsKZy5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgc291cmNlKTsKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkaXRBcHBXZWJGb3JtSWRfMTc2MzM1NjA2NDk5MCIpLmFwcGVuZENoaWxkKGcpOwoKdmFyIGRlc2lyZWRTb3VyY2UgPSAiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvYXBpLmpzIjsKdmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7CnZhciBhbHJlYWR5TG9hZGVkID0gZmFsc2U7CnZhciByZUNBUFRDSEFTaXRlS2V5ID0gIjZMZnV4NGNVQUFBQUFJUFBSbmdJcWtzQ3VQZ0RWZEpNeUdyZlVBOXAiOwp2YXIgYWxyZWFkeUxvYWRlZE1hcCA9IGZhbHNlOwp2YXIgbWFwc291cmNlID0gImh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9qcyI7CnZhciBtYXB2ZXJzaW9uID0gIjMuMC4wIjsKdmFyIG1hcHNlbnNvciA9IGZhbHNlOwppZiAoc2NyaXB0cy5sZW5ndGggJiYgaXNfY2FwdGNoYV9zZWxlY3RlZF8xNzYzMzU2MDY0OTkwKSB7CiAgZm9yICh2YXIgc2NyaXB0SW5kZXggaW4gc2NyaXB0cykgewogICAgaWYgKAogICAgICAhYWxyZWFkeUxvYWRlZCAmJgogICAgICBzY3JpcHRzW3NjcmlwdEluZGV4XS5zcmMgJiYKICAgICAgc2NyaXB0c1tzY3JpcHRJbmRleF0uc3JjLmluY2x1ZGVzKAogICAgICAgIGRlc2lyZWRTb3VyY2UgKyAiP3JlbmRlcj0iICsgcmVDQVBUQ0hBU2l0ZUtleQogICAgICApCiAgICApIHsKICAgICAgYWxyZWFkeUxvYWRlZCA9IHRydWU7CiAgICB9CiAgfQp9CmlmICghYWxyZWFkeUxvYWRlZCAmJiBpc19jYXB0Y2hhX3NlbGVjdGVkXzE3NjMzNTYwNjQ5OTApIHsKICB2YXIgc2NyaXB0c3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICBzY3JpcHRzcy50eXBlID0gInRleHQvamF2YXNjcmlwdCI7CiAgc2NyaXB0c3Muc3JjID0KICAgICJodHRwczovL3d3dy5nb29nbGUuY29tL3JlY2FwdGNoYS9hcGkuanM/cmVuZGVyPSIgKyByZUNBUFRDSEFTaXRlS2V5OwogIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0c3MpOwogIGFscmVhZHlMb2FkZWQgPSB0cnVlOwp9CmZ1bmN0aW9uIGNoZWNrSW5Ib2xpZGF5c0xpc3RfMTc2MzM1NjA2NDk5MChzZWxlY3RlZExvY2F0aW9uLCBkYXkpIHsKICB2YXIgaG9saWRheURheXMgPSBbXTsKICBpZiAoVGltaW5pZ09iamVjdHNfMTc2MzM1NjA2NDk5MCAmJiBUaW1pbmlnT2JqZWN0c18xNzYzMzU2MDY0OTkwW3NlbGVjdGVkTG9jYXRpb25dKSB7CiAgICBPYmplY3Qua2V5cyhUaW1pbmlnT2JqZWN0c18xNzYzMzU2MDY0OTkwW3NlbGVjdGVkTG9jYXRpb25dKS5mb3JFYWNoKGZ1bmN0aW9uICgKICAgICAgZWxlbWVudAogICAgKSB7CiAgICAgIHN3aXRjaCAoZWxlbWVudCkgewogICAgICAgIGNhc2UgInN1biI6CiAgICAgICAgICBob2xpZGF5RGF5cy5wdXNoKDApOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibW9uIjoKICAgICAgICAgIGhvbGlkYXlEYXlzLnB1c2goMSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJ0dWUiOgogICAgICAgICAgaG9saWRheURheXMucHVzaCgyKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIndlZCI6CiAgICAgICAgICBob2xpZGF5RGF5cy5wdXNoKDMpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAidGh1IjoKICAgICAgICAgIGhvbGlkYXlEYXlzLnB1c2goNCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJmcmkiOgogICAgICAgICAgaG9saWRheURheXMucHVzaCg1KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInNhdCI6CiAgICAgICAgICBob2xpZGF5RGF5cy5wdXNoKDYpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBbaG9saWRheURheXMuaW5kZXhPZihkYXkpICE9PSAtMSwgIiJdOwogIH0gZWxzZSB7CiAgICByZXR1cm4gW3RydWUsICIiXTsKICB9Cn0KZnVuY3Rpb24gY2hlY2tEYXkoZSkgewogIGlmICh0aGlzICYmIHRoaXMuaWQgJiYgdGhpcy5pZC5zcGxpdCgiXyIpLmxlbmd0aCA9PSAyKSB7CiAgICB2YXIgZnVuY3Rpb25OYW1lID0gImNoZWNrRGF5XyIgKyB0aGlzLmlkLnNwbGl0KCJfIilbMV07CiAgICB2YXIgcmVzID0gd2luZG93W2Z1bmN0aW9uTmFtZV0oZSk7CiAgICByZXR1cm4gcmVzOwogIH0gZWxzZSB7CiAgICByZXR1cm4gW2ZhbHNlLCAiIl07CiAgfQp9CmZ1bmN0aW9uIGNoZWNrRGF5XzE3NjMzNTYwNjQ5OTAoZSkgewogIGlmIChUaW1pbmlnT2JqZWN0c18xNzYzMzU2MDY0OTkwKSB7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvY2F0aW9uXzE3NjMzNTYwNjQ5OTAiKSkgewogICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvY2F0aW9uXzE3NjMzNTYwNjQ5OTAiKS52YWx1ZSkgewogICAgICAgIHZhciByZXN1bHQgPSBjaGVja0luSG9saWRheXNMaXN0XzE3NjMzNTYwNjQ5OTAoCiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9jYXRpb25fMTc2MzM1NjA2NDk5MCIpLm9wdGlvbnNbCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2NhdGlvbl8xNzYzMzU2MDY0OTkwIikuc2VsZWN0ZWRJbmRleAogICAgICAgICAgXS50ZXh0LAogICAgICAgICAgZS5nZXREYXkoKQogICAgICAgICk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gW2ZhbHNlLCAiIl07CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZhciByZXN1bHQgPSBjaGVja0luSG9saWRheXNMaXN0XzE3NjMzNTYwNjQ5OTAoCiAgICAgICAgT2JqZWN0LmtleXMoVGltaW5pZ09iamVjdHNfMTc2MzM1NjA2NDk5MClbMF0sCiAgICAgICAgZS5nZXREYXkoKQogICAgICApOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogIH0gZWxzZSB7CiAgICByZXR1cm4gW3RydWUsICIiXTsKICB9Cn0Kc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgaWYgKFRpbWluaWdPYmplY3RzXzE3NjMzNTYwNjQ5OTApIHsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGVhcGJveF9wdGltZV8xNzYzMzU2MDY0OTkwIikpIHsKICAgICAgdmFyIHByZWZlclRpbWVFbGVtZW50ID0gZG9jdW1lbnQKICAgICAgICAuZ2V0RWxlbWVudEJ5SWQoImhlYXBib3hfcHRpbWVfMTc2MzM1NjA2NDk5MCIpCiAgICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoIi5ob2xkZXIiKTsKICAgICAgaWYgKHByZWZlclRpbWVFbGVtZW50ICYmIHByZWZlclRpbWVFbGVtZW50Lmxlbmd0aCA+IDApIHsKICAgICAgICBwcmVmZXJUaW1lRWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGRhdGVfMTc2MzM1NjA2NDk5MCIpKSB7CiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGRhdGVfMTc2MzM1NjA2NDk5MCIpLnZhbHVlKSB7CiAgICAgICAgICAgICAgZG9jdW1lbnQKICAgICAgICAgICAgICAgIC5nZXRFbGVtZW50QnlJZCgicGRhdGVfMTc2MzM1NjA2NDk5MCIpCiAgICAgICAgICAgICAgICAuY2xhc3NMaXN0LnJlbW92ZSgiZXJyb3JDbGFzcyIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGRvY3VtZW50CiAgICAgICAgICAgICAgICAuZ2V0RWxlbWVudEJ5SWQoInBkYXRlXzE3NjMzNTYwNjQ5OTAiKQogICAgICAgICAgICAgICAgLmNsYXNzTGlzdC5hZGQoImVycm9yQ2xhc3MiKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2NhdGlvbl8xNzYzMzU2MDY0OTkwIikpIHsKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2NhdGlvbl8xNzYzMzU2MDY0OTkwIikudmFsdWUpIHsKICAgICAgICAgICAgICBqUXVlcnkoIiNoZWFwYm94X2xvY2F0aW9uXzE3NjMzNTYwNjQ5OTAgLmhvbGRlciIpLnJlbW92ZUNsYXNzKAogICAgICAgICAgICAgICAgImVycm9yQ2xhc3MiCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBqUXVlcnkoIiNoZWFwYm94X2xvY2F0aW9uXzE3NjMzNTYwNjQ5OTAgLmhvbGRlciIpLmFkZENsYXNzKAogICAgICAgICAgICAgICAgImVycm9yQ2xhc3MiCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvY2F0aW9uXzE3NjMzNTYwNjQ5OTAiKSkgewogICAgICBkb2N1bWVudAogICAgICAgIC5nZXRFbGVtZW50QnlJZCgibG9jYXRpb25fMTc2MzM1NjA2NDk5MCIpCiAgICAgICAgLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS50ZXh0KSB7CiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGRhdGVfMTc2MzM1NjA2NDk5MCIpKSB7CiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBkYXRlXzE3NjMzNTYwNjQ5OTAiKS52YWx1ZSA9ICIiOwogICAgICAgICAgICAgIGRvY3VtZW50CiAgICAgICAgICAgICAgICAuZ2V0RWxlbWVudEJ5SWQoInBkYXRlXzE3NjMzNTYwNjQ5OTAiKQogICAgICAgICAgICAgICAgLmNsYXNzTGlzdC5hZGQoImVycm9yQ2xhc3MiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBwcmVwYXJlVGltaW5nTGlzdF8xNzYzMzU2MDY0OTkwKG5ldyBEYXRlKCkuZ2V0RGF5KCkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CiAgfQp9LCAzMDAwKTsKZnVuY3Rpb24gRChKKSB7CiAgcmV0dXJuIChKIDwgMTAgPyAiMCIgOiAiIikgKyBKOwp9CmZ1bmN0aW9uIEFkZFRvVGltaW5nTGlzdF8xNzYzMzU2MDY0OTkwKGRheSwgbG9jYXRpb25PbmVOYW1lKSB7CiAgdmFyIHNlbGVjdGVkTGlzdCA9IFtdOwogIGlmIChUaW1pbmlnT2JqZWN0c18xNzYzMzU2MDY0OTkwW2xvY2F0aW9uT25lTmFtZV0pIHsKICAgIHN3aXRjaCAoZGF5KSB7CiAgICAgIGNhc2UgMDoKICAgICAgICBzZWxlY3RlZExpc3QgPSBUaW1pbmlnT2JqZWN0c18xNzYzMzU2MDY0OTkwW2xvY2F0aW9uT25lTmFtZV1bInN1biJdOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDE6CiAgICAgICAgc2VsZWN0ZWRMaXN0ID0gVGltaW5pZ09iamVjdHNfMTc2MzM1NjA2NDk5MFtsb2NhdGlvbk9uZU5hbWVdWyJtb24iXTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAyOgogICAgICAgIHNlbGVjdGVkTGlzdCA9IFRpbWluaWdPYmplY3RzXzE3NjMzNTYwNjQ5OTBbbG9jYXRpb25PbmVOYW1lXVsidHVlIl07CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMzoKICAgICAgICBzZWxlY3RlZExpc3QgPSBUaW1pbmlnT2JqZWN0c18xNzYzMzU2MDY0OTkwW2xvY2F0aW9uT25lTmFtZV1bIndlZCJdOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDQ6CiAgICAgICAgc2VsZWN0ZWRMaXN0ID0gVGltaW5pZ09iamVjdHNfMTc2MzM1NjA2NDk5MFtsb2NhdGlvbk9uZU5hbWVdWyJ0aHUiXTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSA1OgogICAgICAgIHNlbGVjdGVkTGlzdCA9IFRpbWluaWdPYmplY3RzXzE3NjMzNTYwNjQ5OTBbbG9jYXRpb25PbmVOYW1lXVsiZnJpIl07CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNjoKICAgICAgICBzZWxlY3RlZExpc3QgPSBUaW1pbmlnT2JqZWN0c18xNzYzMzU2MDY0OTkwW2xvY2F0aW9uT25lTmFtZV1bInNhdCJdOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNlbGVjdGVkTGlzdCA9IFtdOwogICAgICAgIGJyZWFrOwogICAgfQogIH0KICBpZiAoIXNlbGVjdGVkTGlzdCkgewogICAgc2VsZWN0ZWRMaXN0ID0KICAgICAgVGltaW5pZ09iamVjdHNfMTc2MzM1NjA2NDk5MFtsb2NhdGlvbk9uZU5hbWVdWwogICAgICAgIE9iamVjdC5rZXlzKFRpbWluaWdPYmplY3RzXzE3NjMzNTYwNjQ5OTBbbG9jYXRpb25PbmVOYW1lXSlbMF0KICAgICAgXTsKICB9CgogIHZhciBwdGltZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHRpbWVfMTc2MzM1NjA2NDk5MCIpOwoKICBpZiAocHRpbWVFbGVtZW50ICYmIHB0aW1lRWxlbWVudC5vcHRpb25zICYmIHB0aW1lRWxlbWVudC5vcHRpb25zLmxlbmd0aCA+IDApIHsKICAgIHJlbW92ZU9wdGlvbnNfMTc2MzM1NjA2NDk5MChwdGltZUVsZW1lbnQsIHB0aW1lRWxlbWVudC5vcHRpb25zWzBdLnRleHQpOwogIH0gZWxzZSBpZiAocHRpbWVFbGVtZW50KSB7CiAgICByZW1vdmVPcHRpb25zXzE3NjMzNTYwNjQ5OTAocHRpbWVFbGVtZW50LCAiUGxlYXNlIFNlbGVjdCBQcmVmZXJyZWQgVGltZSIpOwogIH0KICB2YXIgaXNDdXJyZW50RGF5ID0gZmFsc2U7CgogIHZhciBjdXJyZW50VGltZSA9IEQobmV3IERhdGUoKS5nZXRIb3VycygpKSArICI6IiArIEQobmV3IERhdGUoKS5nZXRNaW51dGVzKCkpOwogIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGRhdGVfMTc2MzM1NjA2NDk5MCIpKSB7CiAgICB2YXIgaW5wdXREYXRlID0gbmV3IERhdGUoalF1ZXJ5KCIjcGRhdGVfMTc2MzM1NjA2NDk5MCIpLnZhbCgpKTsKCiAgICB2YXIgdG9kYXlzRGF0ZSA9IG5ldyBEYXRlKCk7CiAgICBpZiAoaW5wdXREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApID09IHRvZGF5c0RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCkpIHsKICAgICAgaXNDdXJyZW50RGF5ID0gdHJ1ZTsKICAgIH0KICB9IGVsc2UgewogICAgaXNDdXJyZW50RGF5ID0gdHJ1ZTsKICB9CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZExpc3QubGVuZ3RoOyBpKyspIHsKICAgIGlmICghaXNDdXJyZW50RGF5IHx8IHNlbGVjdGVkTGlzdFtpXS5rZXkgPiBjdXJyZW50VGltZSkgewogICAgICB2YXIgb3B0MSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOwogICAgICBvcHQxLnZhbHVlID0gc2VsZWN0ZWRMaXN0W2ldLmtleTsKICAgICAgb3B0MS50ZXh0ID0gc2VsZWN0ZWRMaXN0W2ldLnZhbHVlOwogICAgICBwdGltZUVsZW1lbnQuYWRkKG9wdDEpOwogICAgfQogIH0KICBqUXVlcnkoIiNwdGltZV8xNzYzMzU2MDY0OTkwIikuaGVhcGJveCh7IGhlYXBzaXplOiAiMjAwcHgiIH0pOwogIGpRdWVyeSgiI3B0aW1lXzE3NjMzNTYwNjQ5OTAiKS5oZWFwYm94KCJ1cGRhdGUiKTsKfQpmdW5jdGlvbiBwcmVwYXJlVGltaW5nTGlzdF8xNzYzMzU2MDY0OTkwKGRheSkgewogIGlmIChUaW1pbmlnT2JqZWN0c18xNzYzMzU2MDY0OTkwKSB7CiAgICB2YXIgbG9jYXRpb25PbmVOYW1lOwogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2NhdGlvbl8xNzYzMzU2MDY0OTkwIikpIHsKICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2NhdGlvbl8xNzYzMzU2MDY0OTkwIikudmFsdWUpIHsKICAgICAgICBsb2NhdGlvbk9uZU5hbWUgPQogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvY2F0aW9uXzE3NjMzNTYwNjQ5OTAiKS5vcHRpb25zWwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9jYXRpb25fMTc2MzM1NjA2NDk5MCIpLnNlbGVjdGVkSW5kZXgKICAgICAgICAgIF0udGV4dDsKICAgICAgICBkb2N1bWVudAogICAgICAgICAgLmdldEVsZW1lbnRCeUlkKCJsb2NhdGlvbl8xNzYzMzU2MDY0OTkwIikKICAgICAgICAgIC5jbGFzc0xpc3QucmVtb3ZlKCJlcnJvckNsYXNzIik7CiAgICAgICAgQWRkVG9UaW1pbmdMaXN0XzE3NjMzNTYwNjQ5OTAoZGF5LCBsb2NhdGlvbk9uZU5hbWUpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBsb2NhdGlvbk9uZU5hbWUgPSBPYmplY3Qua2V5cyhUaW1pbmlnT2JqZWN0c18xNzYzMzU2MDY0OTkwKVswXTsKICAgICAgQWRkVG9UaW1pbmdMaXN0XzE3NjMzNTYwNjQ5OTAoZGF5LCBsb2NhdGlvbk9uZU5hbWUpOwogICAgfQogIH0KfQoKZnVuY3Rpb24gb25EYXRlU2VsZWN0XzE3NjMzNTYwNjQ5OTAoc2VsZWN0ZWREYXRlKSB7CiAgaWYgKFRpbWluaWdPYmplY3RzXzE3NjMzNTYwNjQ5OTApIHsKICAgIGlmIChzZWxlY3RlZERhdGUgJiYgaXNWYWxpZERhdGUobmV3IERhdGUoc2VsZWN0ZWREYXRlKSkpIHsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBkYXRlXzE3NjMzNTYwNjQ5OTAiKS5jbGFzc0xpc3QucmVtb3ZlKCJlcnJvckNsYXNzIik7CiAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9jYXRpb25fMTc2MzM1NjA2NDk5MCIpKSB7CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2NhdGlvbl8xNzYzMzU2MDY0OTkwIikudmFsdWUpIHsKICAgICAgICAgIHByZXBhcmVUaW1pbmdMaXN0XzE3NjMzNTYwNjQ5OTAobmV3IERhdGUoc2VsZWN0ZWREYXRlKS5nZXREYXkoKSk7CiAgICAgICAgICBqUXVlcnkoIiNoZWFwYm94X2xvY2F0aW9uXzE3NjMzNTYwNjQ5OTAgLmhvbGRlciIpLnJlbW92ZUNsYXNzKAogICAgICAgICAgICAiZXJyb3JDbGFzcyIKICAgICAgICAgICk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGpRdWVyeSgiI2hlYXBib3hfbG9jYXRpb25fMTc2MzM1NjA2NDk5MCAuaG9sZGVyIikuYWRkQ2xhc3MoImVycm9yQ2xhc3MiKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHJlcGFyZVRpbWluZ0xpc3RfMTc2MzM1NjA2NDk5MChuZXcgRGF0ZShzZWxlY3RlZERhdGUpLmdldERheSgpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBkYXRlXzE3NjMzNTYwNjQ5OTAiKS5jbGFzc0xpc3QuYWRkKCJlcnJvckNsYXNzIik7CiAgICB9CiAgfQp9CmlmIChUaW1pbmlnT2JqZWN0c18xNzYzMzU2MDY0OTkwKSB7CiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwZGF0ZV8xNzYzMzU2MDY0OTkwIikpIHsKICAgIGRvY3VtZW50CiAgICAgIC5nZXRFbGVtZW50QnlJZCgicGRhdGVfMTc2MzM1NjA2NDk5MCIpCiAgICAgIC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvY2F0aW9uXzE3NjMzNTYwNjQ5OTAiKSkgewogICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2NhdGlvbl8xNzYzMzU2MDY0OTkwIikudmFsdWUpIHsKICAgICAgICAgICAgalF1ZXJ5KCIjaGVhcGJveF9sb2NhdGlvbl8xNzYzMzU2MDY0OTkwIC5ob2xkZXIiKS5yZW1vdmVDbGFzcygKICAgICAgICAgICAgICAiZXJyb3JDbGFzcyIKICAgICAgICAgICAgKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGpRdWVyeSgiI2hlYXBib3hfbG9jYXRpb25fMTc2MzM1NjA2NDk5MCAuaG9sZGVyIikuYWRkQ2xhc3MoCiAgICAgICAgICAgICAgImVycm9yQ2xhc3MiCiAgICAgICAgICAgICk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICB9IGVsc2UgewogICAgcHJlcGFyZVRpbWluZ0xpc3RfMTc2MzM1NjA2NDk5MChuZXcgRGF0ZSgpLmdldERheSgpKTsKICB9Cn0KCmFzeW5jIGZ1bmN0aW9uIGN1c3RvbV9yZXNldF8xNzYzMzU2MDY0OTkwKCkgewogIGlmIChtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzICYmIG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHMubGVuZ3RoKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQgIT0gIiIpIHsKICAgICAgICB2YXIgbmFtZSA9IG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0ubmFtZS5zcGxpdCgiOyIpWzBdOwogICAgICAgIGlmICgKICAgICAgICAgIG5hbWUuc3RhcnRzV2l0aCgiY3VzdG9tX2ZpZWxkX2Ryb3Bkb3duIikgfHwKICAgICAgICAgIG5hbWUuc3RhcnRzV2l0aCgibG9jYXRpb24iKSB8fAogICAgICAgICAgbmFtZS5zdGFydHNXaXRoKCJwdGltZSIpCiAgICAgICAgKSB7CiAgICAgICAgICBkb2N1bWVudAogICAgICAgICAgICAuZ2V0RWxlbWVudEJ5SWQoImhlYXBib3hfIiArIG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQpCiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdLmlubmVyVGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKAogICAgICAgICAgICBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkCiAgICAgICAgICApLm9wdGlvbnNbMF0udGV4dDsKICAgICAgICAgIGF3YWl0IGRlbGF5KDApOwogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobUZvcm1fMTc2MzM1NjA2NDk5MC5lbGVtZW50c1tpXS5pZCkudmFsdWUgPSAiIjsKICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKAogICAgICAgICAgICBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkCiAgICAgICAgICApLnNlbGVjdGVkSW5kZXggPSAwOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQoKY29uc3QgZGVsYXkgPSAobXMpID0+IHsKICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgIHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZSgpLCBtcyk7CiAgfSwgbXMpOwp9OwoKZnVuY3Rpb24gY2xpY2tfMTc2MzM1NjA2NDk5MChkYXRhcykgewogIHZhciBkYXRhID0ge307CiAgdmFyIGN1c3RvbV9kYXRhID0ge307CiAgdmFyIGluZGV4Y291bnQgPSAwOwogIHZhciB2YWxpZGF0aW9uQXJyYXkgPSBbdHJ1ZV07CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICBpZiAobUZvcm1fMTc2MzM1NjA2NDk5MC5lbGVtZW50c1tpXS5pZCAhPSAiIikgewogICAgICB2YXIgdmlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobUZvcm1fMTc2MzM1NjA2NDk5MC5lbGVtZW50c1tpXS5pZCkudmFsdWU7CiAgICAgIGlmIChtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLnJlcXVpcmVkICYmICF2aWQpIHsKICAgICAgICBpZiAoaW5kZXhjb3VudCA9PSAwKSB7CiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkKS5mb2N1cygpOwogICAgICAgIH0KICAgICAgICBkb2N1bWVudAogICAgICAgICAgLmdldEVsZW1lbnRCeUlkKG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQpCiAgICAgICAgICAuY2xhc3NMaXN0LmFkZCgiZXJyb3JDbGFzcyIpOwoKICAgICAgICBpZiAoCiAgICAgICAgICBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkID09PSAibG9jYXRpb25fMTc2MzM1NjA2NDk5MCIgfHwKICAgICAgICAgIG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQgPT09ICJwdGltZV8xNzYzMzU2MDY0OTkwIiB8fAogICAgICAgICAgbUZvcm1fMTc2MzM1NjA2NDk5MC5lbGVtZW50c1tpXS5pZC5zdGFydHNXaXRoKCJjdXN0b21fZmllbGRfZHJvcGRvd24iKQogICAgICAgICkgewogICAgICAgICAgalF1ZXJ5KAogICAgICAgICAgICAiI2hlYXBib3hfIiArIG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQgKyAiIC5ob2xkZXIiCiAgICAgICAgICApLmFkZENsYXNzKCJlcnJvckNsYXNzIik7CiAgICAgICAgfQogICAgICAgIGlmICgKICAgICAgICAgIGlzUmV2XzE3NjMzNTYwNjQ5OTAgJiYgCiAgICAgICAgICBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkID09ICJzdGF0ZV8xNzYzMzU2MDY0OTkwIgogICAgICAgICkgewogICAgICAgICAgalF1ZXJ5KAogICAgICAgICAgICAiI2hlYXBib3hfIiArIG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQgKyAiIC5ob2xkZXIiCiAgICAgICAgICApLmFkZENsYXNzKCJlcnJvckNsYXNzIik7CiAgICAgICAgfQogICAgICAgIGluZGV4Y291bnQrKzsKICAgICAgICB2YWxpZGF0aW9uQXJyYXkucHVzaChmYWxzZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKAogICAgICAgICAgbUZvcm1fMTc2MzM1NjA2NDk5MC5lbGVtZW50c1tpXS5pZCA9PT0gImxvY2F0aW9uXzE3NjMzNTYwNjQ5OTAiIHx8CiAgICAgICAgICBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkID09PSAicHRpbWVfMTc2MzM1NjA2NDk5MCIKICAgICAgICApIHsKICAgICAgICAgIGpRdWVyeSgKICAgICAgICAgICAgIiNoZWFwYm94XyIgKyBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkICsgIiAuaG9sZGVyIgogICAgICAgICAgKS5yZW1vdmVDbGFzcygiZXJyb3JDbGFzcyIpOwogICAgICAgIH0KICAgICAgICBpZiAoCiAgICAgICAgICBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkLnN0YXJ0c1dpdGgoImN1c3RvbV9maWVsZF9kcm9wZG93biIpCiAgICAgICAgKSB7CiAgICAgICAgICBkb2N1bWVudAogICAgICAgICAgICAuZ2V0RWxlbWVudEJ5SWQoImhlYXBib3hfIiArIG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQpCiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdCiAgICAgICAgICAgIC5jbGFzc0xpc3QucmVtb3ZlKCJlcnJvckNsYXNzIik7CiAgICAgICAgICBkb2N1bWVudAogICAgICAgICAgICAuZ2V0RWxlbWVudEJ5SWQobUZvcm1fMTc2MzM1NjA2NDk5MC5lbGVtZW50c1tpXS5pZCkKICAgICAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoImVycm9yQ2xhc3MiKTsKICAgICAgICB9CiAgICAgICAgaWYgKG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQgPT09ICJlbWFpbF8xNzYzMzU2MDY0OTkwIikgewogICAgICAgICAgaWYgKHJlZ0VtYWlsLnRlc3QodmlkKSA9PSBmYWxzZSkgewogICAgICAgICAgICB2YWxpZGF0aW9uQXJyYXkucHVzaChmYWxzZSk7CiAgICAgICAgICAgIGRvY3VtZW50CiAgICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQpCiAgICAgICAgICAgICAgLmNsYXNzTGlzdC5hZGQoImVycm9yQ2xhc3MiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhbGlkYXRpb25BcnJheS5wdXNoKHRydWUpOwogICAgICAgICAgICBkb2N1bWVudAogICAgICAgICAgICAgIC5nZXRFbGVtZW50QnlJZChtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkKQogICAgICAgICAgICAgIC5jbGFzc0xpc3QucmVtb3ZlKCJlcnJvckNsYXNzIik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRvY3VtZW50CiAgICAgICAgICAgIC5nZXRFbGVtZW50QnlJZChtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkKQogICAgICAgICAgICAuY2xhc3NMaXN0LnJlbW92ZSgiZXJyb3JDbGFzcyIpOwogICAgICAgIH0KICAgICAgICBpZiAoCiAgICAgICAgICBpc1Jldl8xNzYzMzU2MDY0OTkwICYmIAogICAgICAgICAgbUZvcm1fMTc2MzM1NjA2NDk5MC5lbGVtZW50c1tpXS5pZCA9PSAic3RhdGVfMTc2MzM1NjA2NDk5MCIKICAgICAgICApIHsKICAgICAgICAgIGpRdWVyeSgKICAgICAgICAgICAgIiNoZWFwYm94XyIgKyBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkICsgIiAuaG9sZGVyIgogICAgICAgICAgKS5yZW1vdmVDbGFzcygiZXJyb3JDbGFzcyIpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgbmFtZSA9IG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0ubmFtZS5zcGxpdCgiOyIpWzBdOwogICAgICB2YXIgbmFtZUFycmF5ID0gbUZvcm1fMTc2MzM1NjA2NDk5MC5lbGVtZW50c1tpXS5uYW1lLnNwbGl0KCI7Iik7CiAgICAgIHZhciBkaXNwbGF5VGV4dCA9IG5hbWVBcnJheS5sZW5ndGggPiAxID8gbmFtZUFycmF5WzFdIDogIiI7CiAgICAgIGlmIChuYW1lID09ICJwYXRpZW50X3R5cGUiKSB7CiAgICAgICAgZGF0YVtuYW1lXSA9IGNoZWNrZWRWYWw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgiY3VzdG9tX2ZpZWxkX3RleHQiKSkgewogICAgICAgICAgY3VzdG9tX2RhdGFbbmFtZV0gPSB7CiAgICAgICAgICAgIGRpc3BsYXlUZXh0OiBkaXNwbGF5VGV4dCwKICAgICAgICAgICAgdmFsdWU6IHZpZCwKICAgICAgICAgICAga2V5OiBuYW1lLAogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgiY3VzdG9tX2ZpZWxkX2ludGVnZXIiKSkgewogICAgICAgICAgY3VzdG9tX2RhdGFbbmFtZV0gPSB7CiAgICAgICAgICAgIGRpc3BsYXlUZXh0OiBkaXNwbGF5VGV4dCwKICAgICAgICAgICAgdmFsdWU6IHZpZCwKICAgICAgICAgICAga2V5OiBuYW1lLAogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgiY3VzdG9tX2ZpZWxkX2Ryb3Bkb3duIikpIHsKICAgICAgICAgIHZpZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQpLm9wdGlvbnNbCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQpCiAgICAgICAgICAgICAgLnNlbGVjdGVkSW5kZXgKICAgICAgICAgIF0udGV4dDsKICAgICAgICAgIGlmIChkaXNwbGF5VGV4dC50cmltKCkgIT0gdmlkLnRyaW0oKSkgewogICAgICAgICAgICBjdXN0b21fZGF0YVtuYW1lXSA9IHsKICAgICAgICAgICAgICBkaXNwbGF5VGV4dDogZGlzcGxheVRleHQsCiAgICAgICAgICAgICAgdmFsdWU6IHZpZCwKICAgICAgICAgICAgICBrZXk6IG5hbWUsCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICgKICAgICAgICAgIG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQgPT09ICJwdGltZV8xNzYzMzU2MDY0OTkwIiAmJgogICAgICAgICAgVGltaW5pZ09iamVjdHNfMTc2MzM1NjA2NDk5MAogICAgICAgICkgewogICAgICAgICAgZGF0YVtuYW1lXSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKAogICAgICAgICAgICBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkCiAgICAgICAgICApLm9wdGlvbnNbCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKAogICAgICAgICAgICAgIG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQKICAgICAgICAgICAgKS5zZWxlY3RlZEluZGV4CiAgICAgICAgICBdLnRleHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRhdGFbbmFtZV0gPSB2aWQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGlmICghdmFsaWRhdGlvbkFycmF5LmluY2x1ZGVzKGZhbHNlKSkgewogICAgaWYgKAogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9iaWxlXzE3NjMzNTYwNjQ5OTAiKSAmJgogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9iaWxlXzE3NjMzNTYwNjQ5OTAiKS52YWx1ZSAmJgogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9iaWxlXzE3NjMzNTYwNjQ5OTAiKS52YWx1ZS5sZW5ndGggPj0gMQogICAgKSB7CiAgICAgIHZhciBtYnZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1vYmlsZV8xNzYzMzU2MDY0OTkwIikudmFsdWU7CiAgICAgIG1idmFsdWUgPSBtYnZhbHVlLnRyaW0oKTsKICAgICAgaWYgKCFtYnZhbHVlLm1hdGNoKC9bMC05XXsxMH0vKSkgewogICAgICAgIGFsZXJ0KCJNb2JpbGUgTnVtYmVyIG11c3QgYmUgMTAgRGlnaXQhIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CgogICAgaWYgKAogICAgICBpc1Jldl8xNzYzMzU2MDY0OTkwICYmCiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ6aXBjb2RlXzE3NjMzNTYwNjQ5OTAiKSAmJgogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiemlwY29kZV8xNzYzMzU2MDY0OTkwIikudmFsdWUgJiYKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInppcGNvZGVfMTc2MzM1NjA2NDk5MCIpLnZhbHVlLmxlbmd0aCA+PSAxCiAgICApIHsKICAgICAgdmFyIHppcGNvZGV2YWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ6aXBjb2RlXzE3NjMzNTYwNjQ5OTAiKS52YWx1ZTsKICAgICAgaWYoIWlzVmFsaWRQb3N0YWxDb2RlKHppcGNvZGV2YWx1ZSkpewogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInppcGNvZGVfMTc2MzM1NjA2NDk5MCIpLmNsYXNzTGlzdC5hZGQoJ2Vycm9yQ2xhc3MnKSwgMCk7CiAgICAgICAgYWxlcnQoJ0ludmFsaWQgWmlwQ29kZSEnKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7CiAgICBjb25zdCBvcGVucmVxdWVzdElkID0gdXJsUGFyYW1zLmdldCgib3BydCIpOwogICAgaWYgKG9wZW5yZXF1ZXN0SWQpIHsKICAgICAgZGF0YVsib3BlbnJlcXVlc3RJZCJdID0gb3BlbnJlcXVlc3RJZDsKICAgIH0KICAgIG1Gb3JtXzE3NjMzNTYwNjQ5OTAucmVzZXQoKTsKICAgIGlmIChpc19jYXB0Y2hhX3NlbGVjdGVkXzE3NjMzNTYwNjQ5OTApIHsKICAgICAgZ3JlY2FwdGNoYQogICAgICAgIC5leGVjdXRlKHJlQ0FQVENIQVNpdGVLZXksIHsgYWN0aW9uOiAiZm9ybVN1Ym1pdCIgfSkKICAgICAgICAudGhlbihmdW5jdGlvbiAodG9rZW4pIHsKICAgICAgICAgIHZhciB4aFJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgICAgZGF0YVsidGltZXpvbmUiXSA9IG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgICAgIGRhdGFbImNhcHRjaGEiXSA9IHRva2VuOwogICAgICAgICAgZGF0YVsiY3VzdG9tX2RhdGEiXSA9IGN1c3RvbV9kYXRhOwogICAgICAgICAgeGhSZXEud2l0aENyZWRlbnRpYWxzID0gZmFsc2U7CiAgICAgICAgICB4aFJlcS5vcGVuKCJQT1NUIiwgIi8vd2ViZm9ybS5hZGl0LmNvbS9lbWJlZC9zdGVwb25lL2JjODNjNGYxLWVmN2MtNDExMS1iZjAxLWM4OTZmMDQ1MjRlMSIsIHRydWUpOwogICAgICAgICAgeGhSZXEuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwX2xvYWRlcl8xNzYzMzU2MDY0OTkwIikuc3R5bGUuZGlzcGxheSA9CiAgICAgICAgICAgICJibG9jayI7CiAgICAgICAgICB4aFJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gNCAmJiB0aGlzLnN0YXR1cyA9PSAyMDApIHsKICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwX2xvYWRlcl8xNzYzMzU2MDY0OTkwIikuc3R5bGUuZGlzcGxheSA9CiAgICAgICAgICAgICAgICAibm9uZSI7CiAgICAgICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkaXRBcHBGb3JtUG9wdXBfMTc2MzM1NjA2NDk5MCIpOwogICAgICAgICAgICAgIGVsLmlubmVySFRNTCA9IHRoaXMucmVzcG9uc2VUZXh0OwogICAgICAgICAgICAgIGxvYWRTY3JpcHRfYmM4M2M0ZjFfZWY3Y180MTExX2JmMDFfYzg5NmYwNDUyNGUxKGVsKTsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgYXBwb2ludG1lbnRJZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcHBvaW50bWVudF9pZCIpLnZhbHVlOwogICAgICAgICAgICAgICAgT3JnYW5pemF0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk9yZ2FuaXphdGlvbiIpLnZhbHVlOwogICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0dXMgPT0gNDAwKSB7CiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcF9sb2FkZXJfMTc2MzM1NjA2NDk5MCIpLnN0eWxlLmRpc3BsYXkgPQogICAgICAgICAgICAgICAgIm5vbmUiOwogICAgICAgICAgICAgIGlmICh0aGlzLnJlc3BvbnNlVGV4dCAhPSAiIikgewogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gdGhpcy5yZXNwb25zZVRleHQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgdmFyIHhoUmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgIGRhdGFbInRpbWV6b25lIl0gPSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk7CiAgICAgIGRhdGFbImN1c3RvbV9kYXRhIl0gPSBjdXN0b21fZGF0YTsKICAgICAgeGhSZXEud2l0aENyZWRlbnRpYWxzID0gZmFsc2U7CiAgICAgIHhoUmVxLm9wZW4oIlBPU1QiLCAiLy93ZWJmb3JtLmFkaXQuY29tL2VtYmVkL3N0ZXBvbmUvYmM4M2M0ZjEtZWY3Yy00MTExLWJmMDEtYzg5NmYwNDUyNGUxIiwgdHJ1ZSk7CiAgICAgIHhoUmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwX2xvYWRlcl8xNzYzMzU2MDY0OTkwIikuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgIHhoUmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7CiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwX2xvYWRlcl8xNzYzMzU2MDY0OTkwIikuc3R5bGUuZGlzcGxheSA9CiAgICAgICAgICAgICJub25lIjsKICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhZGl0QXBwRm9ybVBvcHVwXzE3NjMzNTYwNjQ5OTAiKTsKICAgICAgICAgIGVsLmlubmVySFRNTCA9IHRoaXMucmVzcG9uc2VUZXh0OwogICAgICAgICAgbG9hZFNjcmlwdF9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEoZWwpOwogICAgICAgICAgY3VzdG9tX3Jlc2V0XzE3NjMzNTYwNjQ5OTAoKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGFwcG9pbnRtZW50SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwb2ludG1lbnRfaWQiKS52YWx1ZTsKICAgICAgICAgICAgT3JnYW5pemF0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk9yZ2FuaXphdGlvbiIpLnZhbHVlOwogICAgICAgICAgfSBjYXRjaCAoZSkge30KICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdHVzID09IDQwMCkgewogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcF9sb2FkZXJfMTc2MzM1NjA2NDk5MCIpLnN0eWxlLmRpc3BsYXkgPQogICAgICAgICAgICAibm9uZSI7CiAgICAgICAgICBpZiAodGhpcy5yZXNwb25zZVRleHQgIT0gIiIpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gdGhpcy5yZXNwb25zZVRleHQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0KfQoKdmFyIGxvYWRTY3JpcHRfYmM4M2M0ZjFfZWY3Y180MTExX2JmMDFfYzg5NmYwNDUyNGUxID0gZnVuY3Rpb24gKGVsZSkgewogIHZhciBjb2RlcyA9IGVsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2Rlcy5sZW5ndGg7IGkrKykgewogICAgZXZhbChjb2Rlc1tpXS50ZXh0KTsKICB9Cn07CnZhciBnb1RvU3RlcE9uZV9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEgPSBmdW5jdGlvbiAoYXBwb2ludG1lbnRfaWQpIHsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwX2xvYWRlcl8xNzYzMzU2MDY0OTkwIikuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgdmFyIHhoUmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgeGhSZXEud2l0aENyZWRlbnRpYWxzID0gZmFsc2U7CiAgeGhSZXEub3BlbigiUFVUIiwgIi8vd2ViZm9ybS5hZGl0LmNvbS9lbWJlZC9iYWNrL3N0ZXBvbmUvIiArIGFwcG9pbnRtZW50SWQsIHRydWUpOwogIHhoUmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkoeyBPcmdhbml6YXRpb246IE9yZ2FuaXphdGlvbiB9KSk7CiAgeGhSZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgewogICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0ICYmIHRoaXMuc3RhdHVzID09IDIwMCkgewogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwX2xvYWRlcl8xNzYzMzU2MDY0OTkwIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkaXRBcHBGb3JtUG9wdXBfMTc2MzM1NjA2NDk5MCIpOwogICAgICBlbC5pbm5lckhUTUwgPSB0aGlzLnJlc3BvbnNlVGV4dDsKICAgICAgbG9hZFNjcmlwdF9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEoZWwpOwogICAgICB0cnkgewogICAgICAgIGFwcG9pbnRtZW50SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwb2ludG1lbnRfaWQiKS52YWx1ZTsKICAgICAgICBPcmdhbml6YXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiT3JnYW5pemF0aW9uIikudmFsdWU7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdHVzID09IDQwMCkgewogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwX2xvYWRlcl8xNzYzMzU2MDY0OTkwIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgaWYgKHRoaXMucmVzcG9uc2VUZXh0ICE9ICIiKSB7CiAgICAgICAgaWYgKCF0aGlzLnJlc3BvbnNlVGV4dC5tYXRjaCgvXlthLXpBLVpdKzpcL1wvLykpIHsKICAgICAgICAgIHRoaXMucmVzcG9uc2VUZXh0ID0gImh0dHA6Ly8iICsgdGhpcy5yZXNwb25zZVRleHQ7CiAgICAgICAgfQogICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRoaXMucmVzcG9uc2VUZXh0OwogICAgICB9CiAgICB9CiAgfTsKICByZXR1cm4gZmFsc2U7Cn07CnZhciBnb1RvU3RlcFR3b19iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEgPSBmdW5jdGlvbiAoaWQpIHsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwX2xvYWRlcl8xNzYzMzU2MDY0OTkwIikuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgY3VycmVudExvY2F0aW9uSWQgPSBpZDsKICB2YXIgeGhSZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICB4aFJlcS53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTsKICB4aFJlcS5vcGVuKCJQVVQiLCAiLy93ZWJmb3JtLmFkaXQuY29tL2VtYmVkL3N0ZXB0d28vIiArIGFwcG9pbnRtZW50SWQsIHRydWUpOwogIHhoUmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkoeyBsb2NhdGlvbjogaWQsIE9yZ2FuaXphdGlvbjogT3JnYW5pemF0aW9uIH0pKTsKICB4aFJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcHBfbG9hZGVyXzE3NjMzNTYwNjQ5OTAiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWRpdEFwcEZvcm1Qb3B1cF8xNzYzMzU2MDY0OTkwIik7CiAgICAgIGVsLmlubmVySFRNTCA9IHRoaXMucmVzcG9uc2VUZXh0OwogICAgICBsb2FkU2NyaXB0X2JjODNjNGYxX2VmN2NfNDExMV9iZjAxX2M4OTZmMDQ1MjRlMShlbCk7CiAgICAgIHRyeSB7CiAgICAgICAgYXBwb2ludG1lbnRJZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcHBvaW50bWVudF9pZCIpLnZhbHVlOwogICAgICAgIE9yZ2FuaXphdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJPcmdhbml6YXRpb24iKS52YWx1ZTsKICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0KICB9OwogIGNoZWNrSXNSZXZvbHV0aW9uRWhyXzE3NjMzNTYwNjQ5OTAoKTsKICBwcm9jZXNzQ2xpZW50U3BlY2lmaWNMb2dpY18xNzYzMzU2MDY0OTkwKCk7CiAgcmV0dXJuIGZhbHNlOwp9Owp2YXIgZ29CYWNrVG9TdGVwVHdvX2JjODNjNGYxX2VmN2NfNDExMV9iZjAxX2M4OTZmMDQ1MjRlMSA9IGZ1bmN0aW9uICgpIHsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwX2xvYWRlcl8xNzYzMzU2MDY0OTkwIikuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgdmFyIHhoUmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgeGhSZXEud2l0aENyZWRlbnRpYWxzID0gZmFsc2U7CiAgeGhSZXEub3BlbigiUFVUIiwgIi8vd2ViZm9ybS5hZGl0LmNvbS9lbWJlZC9iYWNrL3N0ZXB0d28vIiArIGFwcG9pbnRtZW50SWQsIHRydWUpOwogIHhoUmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkoeyBPcmdhbml6YXRpb246IE9yZ2FuaXphdGlvbiB9KSk7CiAgeGhSZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgewogICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0ICYmIHRoaXMuc3RhdHVzID09IDIwMCkgewogICAgICBhcHB0Q29uZmlybU9iaiA9IHt9OwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwX2xvYWRlcl8xNzYzMzU2MDY0OTkwIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkaXRBcHBGb3JtUG9wdXBfMTc2MzM1NjA2NDk5MCIpOwogICAgICBlbC5pbm5lckhUTUwgPSB0aGlzLnJlc3BvbnNlVGV4dDsKICAgICAgbG9hZFNjcmlwdF9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEoZWwpOwogICAgICB0cnkgewogICAgICAgIGFwcG9pbnRtZW50SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwb2ludG1lbnRfaWQiKS52YWx1ZTsKICAgICAgICBPcmdhbml6YXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiT3JnYW5pemF0aW9uIikudmFsdWU7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICB9CiAgfTsKICByZXR1cm4gZmFsc2U7Cn07CnZhciBsb2NhdGlvbkNoYW5nZV9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEgPSBmdW5jdGlvbiAoZWxlbWVudCkgewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKAogICAgInNlcnZpY2VMaXN0T2ZTZWxlY3RlZExvY2F0aW9uXyIgKyBhcHBvaW50bWVudElkCiAgKS5pbm5lckhUTUwgPSAiPG9wdGlvbiB2YWx1ZT0nJz5TZWxlY3QgU2VydmljZTwvb3B0aW9uPiI7CiAgc2VydmljZUNoYW5nZV9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEoIiIpOwogIGlmIChlbGVtZW50LnZhbHVlKSB7CiAgICB2YXIgeGhSZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgIHhoUmVxLndpdGhDcmVkZW50aWFscyA9IGZhbHNlOwogICAgeGhSZXEub3BlbigiUFVUIiwgIi8vd2ViZm9ybS5hZGl0LmNvbS9hcHBvaW50bWVudC9sb2NhdGlvbi9zZXJ2aWNlcy8iICsgZWxlbWVudC52YWx1ZSwgdHJ1ZSk7CiAgICBwYXRpZW50X3N0YXR1cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoCiAgICAgICdpbnB1dFtuYW1lPSJwYXRpZW50X3N0YXR1cyJdOmNoZWNrZWQnCiAgICApLnZhbHVlOwogICAgeGhSZXEuc2VuZCgKICAgICAgSlNPTi5zdHJpbmdpZnkoeyBwYXRpZW50X3N0YXR1czogIm5ldyIsIGFwcHRJZDogYXBwb2ludG1lbnRJZCB9KQogICAgKTsKCiAgICB4aFJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gNCAmJiB0aGlzLnN0YXR1cyA9PSAyMDApIHsKICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgKICAgICAgICAgICJzZXJ2aWNlTGlzdE9mU2VsZWN0ZWRMb2NhdGlvbl8iICsgYXBwb2ludG1lbnRJZAogICAgICAgICk7CiAgICAgICAgZWwuaW5uZXJIVE1MID0gdGhpcy5yZXNwb25zZVRleHQ7CiAgICAgICAgY3VycmVudExvY2F0aW9uSWQgPSBlbGVtZW50LnZhbHVlOwoKICAgICAgICB4aFJlcS5vcGVuKCJQVVQiLCAiLy93ZWJmb3JtLmFkaXQuY29tL2FwcG9pbnRtZW50L2xvY2F0aW9uL3BhdGllbnR0eXBlLyIgKyBlbGVtZW50LnZhbHVlLCB0cnVlKTsKICAgICAgICB4aFJlcS5zZW5kKEpTT04uc3RyaW5naWZ5KHsgYXBwdElkOiBhcHBvaW50bWVudElkIH0pKTsKICAgICAgICB4aFJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7CiAgICAgICAgICAgIHZhciBlbFBhdGllbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgKICAgICAgICAgICAgICAibG9jYXRpb25fcGF0aWVudF90eXBlXyIgKyBhcHBvaW50bWVudElkCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGVsUGF0aWVudC5pbm5lckhUTUwgPSB0aGlzLnJlc3BvbnNlVGV4dDsKICAgICAgICAgIH0KICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcHBfbG9hZGVyXzE3NjMzNTYwNjQ5OTAiKS5zdHlsZS5kaXNwbGF5ID0KICAgICAgICAgICAgIm5vbmUiOwogICAgICAgIH07CiAgICAgICAgY2hlY2tJc1Jldm9sdXRpb25FaHJfMTc2MzM1NjA2NDk5MCgpOwogICAgICAgIHByb2Nlc3NDbGllbnRTcGVjaWZpY0xvZ2ljXzE3NjMzNTYwNjQ5OTAoKTsKICAgICAgfQogICAgfTsKICB9CiAgcmV0dXJuIGZhbHNlOwp9OwoKdmFyIGNoYW5nZVBhdGllbnRfYmM4M2M0ZjFfZWY3Y180MTExX2JmMDFfYzg5NmYwNDUyNGUxID0gZnVuY3Rpb24gKGxvY2F0aW9uLCBwYXRpZW50X3N0YXR1cykgewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKAogICAgInNlcnZpY2VMaXN0T2ZTZWxlY3RlZExvY2F0aW9uXyIgKyBhcHBvaW50bWVudElkCiAgKS5pbm5lckhUTUwgPSAiPG9wdGlvbiB2YWx1ZT0nJz5TZWxlY3QgU2VydmljZTwvb3B0aW9uPiI7CiAgc2VydmljZUNoYW5nZV9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEoIiIpOwogIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VsZWN0ZWRsb2NhdGlvbmlkXyIgKyBhcHBvaW50bWVudElkKS52YWx1ZSkgewogICAgdmFyIHhoUmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICB4aFJlcS53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTsKICAgIHhoUmVxLm9wZW4oIlBPU1QiLCAiLy93ZWJmb3JtLmFkaXQuY29tL2FwcG9pbnRtZW50L3BhdGllbnQvc2VydmljZXMvIiArIGFwcG9pbnRtZW50SWQsIHRydWUpOwogICAgeGhSZXEuc2VuZCgKICAgICAgSlNPTi5zdHJpbmdpZnkoewogICAgICAgIGxvY2F0aW9uOiBjdXJyZW50TG9jYXRpb25JZCwKICAgICAgICBwYXRpZW50X3N0YXR1czogcGF0aWVudF9zdGF0dXMsCiAgICAgIH0pCiAgICApOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlcnZpY2VfbG9hZGVyX2JjODNjNGYxX2VmN2NfNDExMV9iZjAxX2M4OTZmMDQ1MjRlMSIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgeGhSZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgewogICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlcnZpY2VfbG9hZGVyX2JjODNjNGYxX2VmN2NfNDExMV9iZjAxX2M4OTZmMDQ1MjRlMSIpLnN0eWxlLmRpc3BsYXkgPQogICAgICAgICAgIm5vbmUiOwogICAgICAgIHZhciByZXMgPSBKU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTsKICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgKICAgICAgICAgICJzZXJ2aWNlTGlzdE9mU2VsZWN0ZWRMb2NhdGlvbl8iICsgYXBwb2ludG1lbnRJZAogICAgICAgICk7CiAgICAgICAgaWYgKHJlcyAmJiByZXMgaW5zdGFuY2VvZiBPYmplY3QgJiYgcmVzLmRhdGEpIHsKICAgICAgICAgIGVsLmlubmVySFRNTCA9IHJlcy5kYXRhLnNlcnZpY2U7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KICByZXR1cm4gZmFsc2U7Cn07CnZhciBzZXJ2aWNlQ2hhbmdlX2JjODNjNGYxX2VmN2NfNDExMV9iZjAxX2M4OTZmMDQ1MjRlMSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7CiAgY3VycmVudFNlcnZpY2VJZCA9IGVsZW1lbnQudmFsdWU7CiAgdmFyIHhoUmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlcnZpY2VfbG9hZGVyX2JjODNjNGYxX2VmN2NfNDExMV9iZjAxX2M4OTZmMDQ1MjRlMSIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKAogICAgImF2YWlsYWJsZVByb3ZpZGVyc0xpc3RBcmVhXyIgKyBhcHBvaW50bWVudElkCiAgKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIGpRdWVyeSgiI3NlcnZpY2VMaXN0T2ZTZWxlY3RlZExvY2F0aW9uXyIgKyBhcHBvaW50bWVudElkKS5wcm9wKAogICAgImRpc2FibGVkIiwKICAgIHRydWUKICApOwogIHhoUmVxLndpdGhDcmVkZW50aWFscyA9IGZhbHNlOwogIHhoUmVxLm9wZW4oIlBPU1QiLCAiLy93ZWJmb3JtLmFkaXQuY29tL2FwcG9pbnRtZW50L3NlcnZpY2UvcHJvdmlkZXIvIiArIGFwcG9pbnRtZW50SWQsIHRydWUpOwogIHRpbWV6b25lID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwogIHhoUmVxLnNlbmQoCiAgICBKU09OLnN0cmluZ2lmeSh7CiAgICAgIHNlcnZpY2U6IGN1cnJlbnRTZXJ2aWNlSWQsCiAgICAgIGxvY2F0aW9uOiBjdXJyZW50TG9jYXRpb25JZCwKICAgICAgdGltZXpvbmU6IHRpbWV6b25lLAogICAgfSkKICApOwoKICB4aFJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZXJ2aWNlX2xvYWRlcl9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgKICAgICAgICAiYXZhaWxhYmxlUHJvdmlkZXJzTGlzdEFyZWFfIiArIGFwcG9pbnRtZW50SWQKICAgICAgKS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgalF1ZXJ5KCIjc2VydmljZUxpc3RPZlNlbGVjdGVkTG9jYXRpb25fIiArIGFwcG9pbnRtZW50SWQpLnByb3AoCiAgICAgICAgImRpc2FibGVkIiwKICAgICAgICBmYWxzZQogICAgICApOwogICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgKICAgICAgICAiYXZhaWxhYmxlUHJvdmlkZXJzTGlzdEFyZWFfIiArIGFwcG9pbnRtZW50SWQKICAgICAgKTsKICAgICAgdmFyIHJlcyA9IEpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpOwogICAgICBpZiAoCiAgICAgICAgcmVzICYmCiAgICAgICAgcmVzIGluc3RhbmNlb2YgT2JqZWN0ICYmCiAgICAgICAgcmVzLmRhdGEgJiYKICAgICAgICByZXMuZGF0YS5wcm92aWRlcmRpc3BsYXkgJiYKICAgICAgICByZXMuZGF0YS5wcm92aWRlcgogICAgICApIHsKICAgICAgICBlbC5pbm5lckhUTUwgPSByZXMuZGF0YS5wcm92aWRlcjsKICAgICAgfSBlbHNlIGlmICgKICAgICAgICByZXMgJiYKICAgICAgICByZXMgaW5zdGFuY2VvZiBPYmplY3QgJiYKICAgICAgICByZXMuZGF0YSAmJgogICAgICAgIHJlcy5kYXRhLnByb3ZpZGVyZGlzcGxheSA9PSBmYWxzZQogICAgICApIHsKICAgICAgICBpZiAoY3VycmVudFNlcnZpY2VJZC5sZW5ndGggPj0gMSkgewogICAgICAgICAgZ29Ub1N0ZXBUaHJlZV9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEoIiIsIGN1cnJlbnRMb2NhdGlvbklkLCBjdXJyZW50U2VydmljZUlkKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoCiAgICAgICAgcmVzICYmCiAgICAgICAgcmVzIGluc3RhbmNlb2YgT2JqZWN0ICYmCiAgICAgICAgcmVzLmRhdGEgJiYKICAgICAgICByZXMuZGF0YS5kZWZhdWx0dGV4dAogICAgICApIHsKICAgICAgICBlbC5pbm5lckhUTUwgPSByZXMuZGF0YS5kZWZhdWx0dGV4dDsKICAgICAgfQogICAgfQogIH07CiAgcmV0dXJuIGZhbHNlOwp9Owp2YXIgZ29Ub1N0ZXBUaHJlZV9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEgPSBmdW5jdGlvbiAocHJvdmlkZXJJZCwgbG9jYXRpb24sIHNlcnZpY2UpIHsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VydmljZV9sb2FkZXJfYmM4M2M0ZjFfZWY3Y180MTExX2JmMDFfYzg5NmYwNDUyNGUxIikuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoCiAgICAiYXZhaWxhYmxlUHJvdmlkZXJzTGlzdEFyZWFfIiArIGFwcG9pbnRtZW50SWQKICApLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgalF1ZXJ5KCIjc2VydmljZUxpc3RPZlNlbGVjdGVkTG9jYXRpb25fIiArIGFwcG9pbnRtZW50SWQpLnByb3AoCiAgICAiZGlzYWJsZWQiLAogICAgdHJ1ZQogICk7CiAgaWYgKHByb3ZpZGVySWQgIT0gIiIpIHsKICAgIGN1cnJlbnRQcm92aWRlciA9IHByb3ZpZGVySWQ7CiAgfQogIHZhciB4aFJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogIHhoUmVxLndpdGhDcmVkZW50aWFscyA9IGZhbHNlOwogIHhoUmVxLm9wZW4oIlBVVCIsICIvL3dlYmZvcm0uYWRpdC5jb20vZW1iZWQvc3RlcGZvdXIvIiArIGFwcG9pbnRtZW50SWQsIHRydWUpOwogIHRpbWV6b25lID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwogIHBhdGllbnRfc3RhdHVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigKICAgICdpbnB1dFtuYW1lPSJwYXRpZW50X3N0YXR1cyJdOmNoZWNrZWQnCiAgKS52YWx1ZTsKICB4aFJlcS5zZW5kKAogICAgSlNPTi5zdHJpbmdpZnkoewogICAgICBwcm92aWRlcjogcHJvdmlkZXJJZCwKICAgICAgbG9jYXRpb246IGxvY2F0aW9uLAogICAgICBzZXJ2aWNlOiBzZXJ2aWNlLAogICAgICB0aW1lem9uZTogdGltZXpvbmUsCiAgICAgIHBhdGllbnRfc3RhdHVzOiBwYXRpZW50X3N0YXR1cywKICAgICAgT3JnYW5pemF0aW9uOiBPcmdhbml6YXRpb24sCiAgICB9KQogICk7CiAgeGhSZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgewogICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0ICYmIHRoaXMuc3RhdHVzID09IDIwMCkgewogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VydmljZV9sb2FkZXJfYmM4M2M0ZjFfZWY3Y180MTExX2JmMDFfYzg5NmYwNDUyNGUxIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoCiAgICAgICAgImF2YWlsYWJsZVByb3ZpZGVyc0xpc3RBcmVhXyIgKyBhcHBvaW50bWVudElkCiAgICAgICkuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgIGpRdWVyeSgiI3NlcnZpY2VMaXN0T2ZTZWxlY3RlZExvY2F0aW9uXyIgKyBhcHBvaW50bWVudElkKS5wcm9wKAogICAgICAgICJkaXNhYmxlZCIsCiAgICAgICAgZmFsc2UKICAgICAgKTsKICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkaXRBcHBGb3JtUG9wdXBfMTc2MzM1NjA2NDk5MCIpOwogICAgICBlbC5pbm5lckhUTUwgPSB0aGlzLnJlc3BvbnNlVGV4dDsKICAgICAgbG9hZFNjcmlwdF9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEoZWwpOwogICAgICB0cnkgewogICAgICAgIGFwcG9pbnRtZW50SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwb2ludG1lbnRfaWQiKS52YWx1ZTsKICAgICAgICBPcmdhbml6YXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiT3JnYW5pemF0aW9uIikudmFsdWU7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICAgIGdldE5leHRBdmFpbGFibGVCdXR0b25fYmM4M2M0ZjFfZWY3Y180MTExX2JmMDFfYzg5NmYwNDUyNGUxKAogICAgICAgIHByb3ZpZGVySWQsCiAgICAgICAgbG9jYXRpb24sCiAgICAgICAgc2VydmljZSwKICAgICAgICBwYXRpZW50X3N0YXR1cwogICAgICApOwogICAgICBpZiAoalF1ZXJ5KCIuZG9icGlja2VyIikubGVuZ3RoID4gMCkgewogICAgICAgIGpRdWVyeSgiLmRvYnBpY2tlciIpLmRhdGVwaWNrZXIoKTsKICAgICAgfQogICAgfQogIH07CiAgcmV0dXJuIGZhbHNlOwp9Owp2YXIgZ2V0TmV4dEF2YWlsYWJsZUJ1dHRvbl9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEgPSBmdW5jdGlvbiAoCiAgcHJvdmlkZXJJZCwKICBsb2NhdGlvbiwKICBzZXJ2aWNlLAogIHBhdGllbnRfc3RhdHVzCikgewogIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbGVuZGVyYnRuXyIgKyBhcHBvaW50bWVudElkKTsKICBlbC5pbm5lckhUTUwgPSAnPGJ1dHRvbiBjbGFzcz0iaXRlbSBjbGVuZGVyLWJ0biI+PGI+TG9hZGluZy4uLjwvYj48L2J1dHRvbj4nOwogIGlmIChwcm92aWRlcklkICE9ICIiKSB7CiAgICBjdXJyZW50UHJvdmlkZXIgPSBwcm92aWRlcklkOwogIH0KICB2YXIgeGhSZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICB4aFJlcS53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTsKICB4aFJlcS5vcGVuKCJQVVQiLCAiLy93ZWJmb3JtLmFkaXQuY29tL2VtYmVkL25leHRhdmFpbGFibGUvIiArIGFwcG9pbnRtZW50SWQsIHRydWUpOwogIHRpbWV6b25lID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwogIHhoUmVxLnNlbmQoCiAgICBKU09OLnN0cmluZ2lmeSh7CiAgICAgIHByb3ZpZGVyOiBwcm92aWRlcklkLAogICAgICBsb2NhdGlvbjogbG9jYXRpb24sCiAgICAgIHNlcnZpY2U6IHNlcnZpY2UsCiAgICAgIHRpbWV6b25lOiB0aW1lem9uZSwKICAgICAgcGF0aWVudF9zdGF0dXM6IHBhdGllbnRfc3RhdHVzLAogICAgICBPcmdhbml6YXRpb246IE9yZ2FuaXphdGlvbiwKICAgIH0pCiAgKTsKICB4aFJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcHBfbG9hZGVyXzE3NjMzNTYwNjQ5OTAiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xlbmRlcmJ0bl8iICsgYXBwb2ludG1lbnRJZCk7CiAgICAgIGVsLmlubmVySFRNTCA9IHRoaXMucmVzcG9uc2VUZXh0OwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xlbmRlcmJ0bl8iICsgYXBwb2ludG1lbnRJZCkuc3R5bGUuZGlzcGxheSA9CiAgICAgICAgImJsb2NrIjsKICAgIH0KICB9OwogIHJldHVybiBmYWxzZTsKfTsKCnZhciBjaGFuZ2VQcm92aWRlcl9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEgPSBmdW5jdGlvbiAoZWxlbWVudCkgewogIGlmIChlbGVtZW50LnZhbHVlICE9ICIiKSB7CiAgICBjdXJyZW50UHJvdmlkZXIgPSBlbGVtZW50LnZhbHVlOwogICAgZ2V0Q2FsZW5kZXJfYmM4M2M0ZjFfZWY3Y180MTExX2JmMDFfYzg5NmYwNDUyNGUxKGN1cnJlbnRmaXJzdGRheSk7CiAgfQp9OwoKdmFyIGdldENhbGVuZGVyX2JjODNjNGYxX2VmN2NfNDExMV9iZjAxX2M4OTZmMDQ1MjRlMSA9IGZ1bmN0aW9uICh0aW1lKSB7CiAgdmFyIGRhdGEgPSB7fTsKICBkYXRhLnByb3ZpZGVyID0gY3VycmVudFByb3ZpZGVyOwogIGRhdGEudGltZXN0YXJ0ID0gdGltZTsKICBkYXRhLnRpbWV6b25lID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwogIHZhciB4aFJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogIHhoUmVxLndpdGhDcmVkZW50aWFscyA9IGZhbHNlOwogIHhoUmVxLm9wZW4oIlBPU1QiLCAiLy93ZWJmb3JtLmFkaXQuY29tL2FwcG9pbnRtZW50L3Byb3ZpZGVyL2NhbGVuZGVyLyIgKyBhcHBvaW50bWVudElkLCB0cnVlKTsKCiAgeGhSZXEuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgeGhSZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgewogICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0ICYmIHRoaXMuc3RhdHVzID09IDIwMCkgewogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwX2xvYWRlcl8xNzYzMzU2MDY0OTkwIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbGVuZGVyc2NyaXB0XyIgKyBhcHBvaW50bWVudElkKTsKICAgICAgZWwuaW5uZXJIVE1MID0gdGhpcy5yZXNwb25zZVRleHQ7CiAgICAgIGxvYWRTY3JpcHRfYmM4M2M0ZjFfZWY3Y180MTExX2JmMDFfYzg5NmYwNDUyNGUxKGVsKTsKICAgICAgdHJ5IHsKICAgICAgICBhcHBvaW50bWVudElkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcG9pbnRtZW50X2lkIikudmFsdWU7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICB9CiAgfTsKICByZXR1cm4gZmFsc2U7Cn07Cgp2YXIgc2hlZHVsZUFwcHRUaW1lX2JjODNjNGYxX2VmN2NfNDExMV9iZjAxX2M4OTZmMDQ1MjRlMSA9IGZ1bmN0aW9uICggc2VsZWN0ZWRUaW1lLCBlbmRfdGltZSwgdXNlcnRpbWUsIGFtcG0sIGUsIG9wZXJhdG9yeSwgbmV4dGF2YWlsYWJsZWRhdGUsIG5leHRhdmFpbGFibGV0aW1lLCBkYXRlZm9ybmV4dCApIHsKICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGl2LmF3ZnBvcHVwY2FsZW5kYXJ0aW1lbGlzdCIpOwogIGlmIChjb250YWluZXIpIHsKICAgIHZhciBtYXRjaGVzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoImRpdiIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIG1hdGNoZXNbaV0uY2xhc3NMaXN0LnJlbW92ZSgiYWN0aXZlIik7CiAgICB9CiAgICBlLmNsYXNzTGlzdC5hZGQoIml0ZW0iLCAiYWN0aXZlIik7CiAgICBhcHB0Q29uZmlybU9iai5zaGVkdWxlX3RpbWUgPSBzZWxlY3RlZFRpbWU7CiAgICBhcHB0Q29uZmlybU9iai51c2VyX2Rpc3BsYXlfdGltZSA9IHVzZXJ0aW1lICsgIiAiICsgYW1wbTsKICAgIGFwcHRDb25maXJtT2JqLmVuZF90aW1lID0gZW5kX3RpbWU7CiAgICBhcHB0Q29uZmlybU9iai50aW1lem9uZSA9IG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgIGFwcHRDb25maXJtT2JqLk9yZ2FuaXphdGlvbiA9IE9yZ2FuaXphdGlvbjsKICAgIGlmKG9wZXJhdG9yeSl7CiAgICAgIGFwcHRDb25maXJtT2JqLm9wZXJhdG9yeSA9IG9wZXJhdG9yeTsKICAgIH0KICB9CgogIGlmIChuZXh0YXZhaWxhYmxlZGF0ZSAmJiBuZXh0YXZhaWxhYmxldGltZSkgewogICAgZGF0ZV9uZXh0X2JjODNjNGYxX2VmN2NfNDExMV9iZjAxX2M4OTZmMDQ1MjRlMShkYXRlZm9ybmV4dCwgdHJ1ZSk7CiAgICBkYXRlX2hvdXJzX2JjODNjNGYxX2VmN2NfNDExMV9iZjAxX2M4OTZmMDQ1MjRlMShuZXh0YXZhaWxhYmxldGltZSwgbmV4dGF2YWlsYWJsZWRhdGUsIGUpOwogIH0KfTsKCnZhciBib29rQXBwb2ludG1lbnRfYmM4M2M0ZjFfZWY3Y180MTExX2JmMDFfYzg5NmYwNDUyNGUxID0gZnVuY3Rpb24gKHRoYW5rX3lvdV91cmwpIHsKICB2YXIgZGF0YSA9IHt9OwogIGRhdGEuc2hlZHVsZV90aW1lID0gYXBwdENvbmZpcm1PYmouc2hlZHVsZV90aW1lOwogIGRhdGEudXNlcl9kaXNwbGF5X3RpbWUgPSBhcHB0Q29uZmlybU9iai51c2VyX2Rpc3BsYXlfdGltZTsKICBkYXRhLmVuZF90aW1lID0gYXBwdENvbmZpcm1PYmouZW5kX3RpbWU7CiAgZGF0YS50aW1lem9uZSA9IGFwcHRDb25maXJtT2JqLnRpbWV6b25lOwogIGRhdGEuT3JnYW5pemF0aW9uID0gYXBwdENvbmZpcm1PYmouT3JnYW5pemF0aW9uOwogIGRhdGEub3BlcmF0b3J5ID0gIGFwcHRDb25maXJtT2JqLm9wZXJhdG9yeSA/IGFwcHRDb25maXJtT2JqLm9wZXJhdG9yeSA6ICIiOwogIGRhdGEuaW5zdXJhbmNlID0gIiI7CiAgaWYgKHR5cGVvZiBkYXRhLnNoZWR1bGVfdGltZSA9PSAidW5kZWZpbmVkIikgewogICAgYWxlcnQoIlBsZWFzZSBTZWxlY3QgUHJlZmVycmVkIFNjaGVkdWxlIFRpbWUiKTsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnN1cmFuY2VfYmM4M2M0ZjFfZWY3Y180MTExX2JmMDFfYzg5NmYwNDUyNGUxIikpIHsKICAgIHZhciBlbGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImluc3VyYW5jZV9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEiKTsKICAgIHZhciByZXFpbnN1cmFuY2UgPSBlbGVzLmdldEF0dHJpYnV0ZSgicmVxdWlyZWQiKTsKICAgIGlmIChyZXFpbnN1cmFuY2UgIT0gbnVsbCkgewogICAgICBpZiAoZWxlcy52YWx1ZSA9PSAiIiB8fCBlbGVzLnZhbHVlID09ICI5OTkiKSB7CiAgICAgICAgYWxlcnQoIlBsZWFzZSBTZWxlY3QgUGF5bWVudCBNZXRob2QiKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGRhdGEuaW5zdXJhbmNlID0gZWxlcy52YWx1ZTsKICB9CiAgdmFyIGJpcnRoRGF0ZVZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJpcnRoX2RhdGVfYmM4M2M0ZjFfZWY3Y180MTExX2JmMDFfYzg5NmYwNDUyNGUxIikudmFsdWU7CiAgaWYgKGJpcnRoRGF0ZVZhbHVlKSB7CiAgICBkYXRhLmJpcnRoX2RhdGUgPSBmb3JtYXREYXRlKG5ldyBEYXRlKGJpcnRoRGF0ZVZhbHVlKSk7CiAgfSBlbHNlIHsKICAgIGFsZXJ0KCJQbGVhc2UgU2VsZWN0IEJpcnRoZGF0ZSIpOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcF9sb2FkZXJfMTc2MzM1NjA2NDk5MCIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwoKICB2YXIgeGhSZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICB4aFJlcS53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTsKICB4aFJlcS5vcGVuKCJQVVQiLCAiLy93ZWJmb3JtLmFkaXQuY29tL2VtYmVkL2NvbmZpcm1hcHBvaW50bWVudC8iICsgYXBwb2ludG1lbnRJZCwgdHJ1ZSk7CiAgeGhSZXEuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgeGhSZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgewogICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0ICYmIHRoaXMuc3RhdHVzID09IDIwMCkgewogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwX2xvYWRlcl8xNzYzMzU2MDY0OTkwIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgaWYgKHRoYW5rX3lvdV91cmwgIT0gIiIpIHsKICAgICAgICBpZiAoIXRoYW5rX3lvdV91cmwubWF0Y2goL15bYS16QS1aXSs6XC9cLy8pKSB7CiAgICAgICAgICB0aGFua195b3VfdXJsID0gImh0dHA6Ly8iICsgdGhhbmtfeW91X3VybDsKICAgICAgICB9CiAgICAgICAgdmFyIHJlcyA9IEpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpOwogICAgICAgIGlmICgKICAgICAgICAgIHJlcyAmJgogICAgICAgICAgcmVzIGluc3RhbmNlb2YgT2JqZWN0ICYmCiAgICAgICAgICB0aGFua195b3VfdXJsLmluY2x1ZGVzKCJ0aGFuay15b3Uvc2NoZWR1bGVkLmh0bWwiKQogICAgICAgICkgewogICAgICAgICAgdGhhbmtfeW91X3VybCA9CiAgICAgICAgICAgIHRoYW5rX3lvdV91cmwgKyAiP3NjaGVkdWxldGltZT0iICsgcmVzLmxvY19zaGVkdWxlX3RpbWU7CiAgICAgICAgfQogICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRoYW5rX3lvdV91cmw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkaXRBcHBGb3JtUG9wdXBfMTc2MzM1NjA2NDk5MCIpOwogICAgICAgIGVsLmlubmVySFRNTCA9ICIiOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH07CiAgcmV0dXJuIGZhbHNlOwp9OwppZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1vYmlsZV8xNzYzMzU2MDY0OTkwIikpIHsKICBkb2N1bWVudAogICAgLmdldEVsZW1lbnRCeUlkKCJtb2JpbGVfMTc2MzM1NjA2NDk5MCIpCiAgICAuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLCBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgIGlmIChldnQud2hpY2ggPCA0OCB8fCBldnQud2hpY2ggPiA1NykgewogICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB9CiAgICB9KTsKfQp2YXIgY2xvc2VQb3B1cF9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEgPSBmdW5jdGlvbiAodGhhbmtfeW91X3VybCkgewogIGlmIChhcHBvaW50bWVudElkKSB7CiAgICB2YXIgeGhSZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgIHhoUmVxLndpdGhDcmVkZW50aWFscyA9IGZhbHNlOwogICAgeGhSZXEub3BlbigiR0VUIiwgIi8vd2ViZm9ybS5hZGl0LmNvbS9lbWJlZC9zdGVwc2l4L3NlbmRtYWlsLyIgKyBhcHBvaW50bWVudElkLCB0cnVlKTsKICAgIHhoUmVxLnNlbmQoKTsKICAgIHhoUmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0ICYmIHRoaXMuc3RhdHVzID09IDIwMCkgewogICAgICAgIHZhciByZXMgPSBKU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTsKICAgICAgICBpZiAocmVzICYmIHJlcyBpbnN0YW5jZW9mIE9iamVjdCAmJiByZXMuc3RhdHVzID09IHRydWUpIHsKICAgICAgICAgIGlmICghcmVzLmRhdGEuaXNfYXBwb2ludG1lbnRfc2NoZWR1bGVkKSB7CiAgICAgICAgICAgIHRoYW5rX3lvdV91cmwgPSByZXMuZGF0YS51bnNjaGVkdWxlX3RoYW5rc19wYWdlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoYW5rX3lvdV91cmwpIHsKICAgICAgICAgICAgaWYgKCF0aGFua195b3VfdXJsLm1hdGNoKC9eW2EtekEtWl0rOlwvXC8vKSkgewogICAgICAgICAgICAgIHRoYW5rX3lvdV91cmwgPSAiaHR0cDovLyIgKyB0aGFua195b3VfdXJsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRoYW5rX3lvdV91cmw7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWRpdEFwcEZvcm1Qb3B1cF8xNzYzMzU2MDY0OTkwIik7CiAgICAgICAgICAgIGVsLmlubmVySFRNTCA9ICIiOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgfSBlbHNlIHsKICAgIGlmICh0aGFua195b3VfdXJsKSB7CiAgICAgIGlmICghdGhhbmtfeW91X3VybC5tYXRjaCgvXlthLXpBLVpdKzpcL1wvLykpIHsKICAgICAgICB0aGFua195b3VfdXJsID0gImh0dHA6Ly8iICsgdGhhbmtfeW91X3VybDsKICAgICAgfQogICAgICB3aW5kb3cubG9jYXRpb24gPSB0aGFua195b3VfdXJsOwogICAgfSBlbHNlIHsKICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkaXRBcHBGb3JtUG9wdXBfMTc2MzM1NjA2NDk5MCIpOwogICAgICBlbC5pbm5lckhUTUwgPSAiIjsKICAgICAgY29uc29sZS5sb2coIlNldCBJbm5lciBIVE1MPiIpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Owp2YXIgZGF0ZV9wcmV2aW91c19iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEgPSBmdW5jdGlvbiAodGltZSkgewogIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYWxlbmRlcmhvdXJfIiArIGFwcG9pbnRtZW50SWQpOwogIGVsLmlubmVySFRNTCA9ICIiOwoKICB2YXIgZGF0YSA9IHt9OwogIGRhdGEucHJvdmlkZXIgPSBjdXJyZW50UHJvdmlkZXI7CiAgZGF0YS50aW1lc3RhcnQgPSB0aW1lOwogIGRhdGEudGltZXpvbmUgPSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk7CiAgZGF0YS5pc21vdmUgPSAicHJldiI7CiAgdmFyIHhoUmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgeGhSZXEud2l0aENyZWRlbnRpYWxzID0gZmFsc2U7CiAgeGhSZXEub3BlbigiUE9TVCIsICIvL3dlYmZvcm0uYWRpdC5jb20vYXBwb2ludG1lbnQvcHJvdmlkZXIvY2FsZW5kZXJkYXRlcy8iICsgYXBwb2ludG1lbnRJZCwgdHJ1ZSk7CgogIHhoUmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogIHhoUmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gNCAmJiB0aGlzLnN0YXR1cyA9PSAyMDApIHsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcF9sb2FkZXJfMTc2MzM1NjA2NDk5MCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYWxlbmRlcmRheXNfIiArIGFwcG9pbnRtZW50SWQpOwogICAgICBlbC5pbm5lckhUTUwgPSB0aGlzLnJlc3BvbnNlVGV4dDsKICAgICAgbG9hZFNjcmlwdF9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEoZWwpOwogICAgICB0cnkgewogICAgICAgIGFwcG9pbnRtZW50SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwb2ludG1lbnRfaWQiKS52YWx1ZTsKICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0KICB9OwogIHJldHVybiBmYWxzZTsKfTsKCnZhciBkYXRlX25leHRfYmM4M2M0ZjFfZWY3Y180MTExX2JmMDFfYzg5NmYwNDUyNGUxID0gZnVuY3Rpb24gKHRpbWUsIG5leHRBdmFpbGFibGUpIHsKICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FsZW5kZXJob3VyXyIgKyBhcHBvaW50bWVudElkKTsKICBlbC5pbm5lckhUTUwgPSAiIjsKCiAgdmFyIGRhdGEgPSB7fTsKICBkYXRhLnByb3ZpZGVyID0gY3VycmVudFByb3ZpZGVyOwogIGRhdGEudGltZXN0YXJ0ID0gdGltZTsKICBkYXRhLnRpbWV6b25lID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwogIGRhdGEuaXNtb3ZlID0gIm5leHQiOwogIHZhciB4aFJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogIHhoUmVxLndpdGhDcmVkZW50aWFscyA9IGZhbHNlOwogIHhoUmVxLm9wZW4oIlBPU1QiLCAiLy93ZWJmb3JtLmFkaXQuY29tL2FwcG9pbnRtZW50L3Byb3ZpZGVyL2NhbGVuZGVyZGF0ZXMvIiArIGFwcG9pbnRtZW50SWQsIHRydWUpOwogIHhoUmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogIHhoUmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gNCAmJiB0aGlzLnN0YXR1cyA9PSAyMDApIHsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcF9sb2FkZXJfMTc2MzM1NjA2NDk5MCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYWxlbmRlcmRheXNfIiArIGFwcG9pbnRtZW50SWQpOwogICAgICBlbC5pbm5lckhUTUwgPSB0aGlzLnJlc3BvbnNlVGV4dDsKICAgICAgbG9hZFNjcmlwdF9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEoZWwpOwogICAgICB0cnkgewogICAgICAgIGFwcG9pbnRtZW50SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwb2ludG1lbnRfaWQiKS52YWx1ZTsKICAgICAgfSBjYXRjaCAoZSkge30KICAgICAgaWYgKG5leHRBdmFpbGFibGUpIHsKICAgICAgICBsZXQgZmluZFNlbGVjdGVkRGF0ZURpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoCiAgICAgICAgICAiLmF3ZnBvcHVwZGF0ZWxpc3QgbGkgYSIKICAgICAgICApOwogICAgICAgIGZpbmRTZWxlY3RlZERhdGVEaXYuY2xhc3NMaXN0LmFkZCgid2ViZm9ybWFjdGl2ZSIpOwogICAgICB9CiAgICB9CiAgfTsKICByZXR1cm4gZmFsc2U7Cn07CnZhciBkYXRlX2hvdXJzX2JjODNjNGYxX2VmN2NfNDExMV9iZjAxX2M4OTZmMDQ1MjRlMSA9IGZ1bmN0aW9uICh0aW1lLCBkYXRlLCBlKSB7CiAgYXBwdENvbmZpcm1PYmogPSB7fTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwX2xvYWRlcl9zaGVkdWxlXzE3NjMzNTYwNjQ5OTAiKS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKCiAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbGVuZGVyaG91cl8iICsgYXBwb2ludG1lbnRJZCk7CiAgZWwuaW5uZXJIVE1MID0gIiI7CgogIHZhciBlbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIud2ViZm9ybWFjdGl2ZSIpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSB7CiAgICBlbHNbaV0uY2xhc3NMaXN0LnJlbW92ZSgid2ViZm9ybWFjdGl2ZSIpOwogIH0KICBlLmNsYXNzTGlzdC5hZGQoIndlYmZvcm1hY3RpdmUiKTsKCiAgdmFyIGRhdGEgPSB7fTsKICBkYXRhLnByb3ZpZGVyID0gY3VycmVudFByb3ZpZGVyOwogIGRhdGEudGltZXN0YXJ0ID0gdGltZTsKICBkYXRhLmRhdGVzdGFydCA9IGRhdGU7CiAgZGF0YS50aW1lem9uZSA9IG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICB2YXIgeGhSZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICB4aFJlcS53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTsKICB4aFJlcS5vcGVuKCJQT1NUIiwgIi8vd2ViZm9ybS5hZGl0LmNvbS9hcHBvaW50bWVudC9wcm92aWRlci9jYWxlbmRlcmhvdXJzLyIgKyBhcHBvaW50bWVudElkLCB0cnVlKTsKICB4aFJlcS5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTsKICB4aFJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcHBfbG9hZGVyX3NoZWR1bGVfMTc2MzM1NjA2NDk5MCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYWxlbmRlcmhvdXJfIiArIGFwcG9pbnRtZW50SWQpOwogICAgICBlbC5pbm5lckhUTUwgPSB0aGlzLnJlc3BvbnNlVGV4dDsKICAgICAgbG9hZFNjcmlwdF9iYzgzYzRmMV9lZjdjXzQxMTFfYmYwMV9jODk2ZjA0NTI0ZTEoZWwpOwogICAgICB0cnkgewogICAgICAgIGFwcG9pbnRtZW50SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwb2ludG1lbnRfaWQiKS52YWx1ZTsKICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0KICB9OwogIHJldHVybiBmYWxzZTsKfTsKCihmdW5jdGlvbiAoKSB7CiAgaWYgKAogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvY2F0aW9uXzE3NjMzNTYwNjQ5OTAiKSAmJgogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvY2F0aW9uXzE3NjMzNTYwNjQ5OTAiKS5vcHRpb25zICYmCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9jYXRpb25fMTc2MzM1NjA2NDk5MCIpLm9wdGlvbnMubGVuZ3RoCiAgKSB7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvY2F0aW9uXzE3NjMzNTYwNjQ5OTAiKS5vcHRpb25zLmxlbmd0aCA9PSAyKSB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2NhdGlvbl8xNzYzMzU2MDY0OTkwIikudmFsdWUgPQogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvY2F0aW9uXzE3NjMzNTYwNjQ5OTAiKS5vcHRpb25zWzFdLnZhbHVlOwogICAgICAgIGpRdWVyeSgiI2hlYXBib3hfbG9jYXRpb25fMTc2MzM1NjA2NDk5MCAuaG9sZGVyIikudGV4dCgKICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2NhdGlvbl8xNzYzMzU2MDY0OTkwIikub3B0aW9uc1sxXS50ZXh0CiAgICAgICAgKTsKICAgICAgfSwgMCk7CiAgICB9CiAgfQogIGpRdWVyeSgiI2xvY2F0aW9uXzE3NjMzNTYwNjQ5OTAiKS5oZWFwYm94KHsKICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgbG9jYXRpb25DaGFuZ2VPblNlbGVjdF8xNzYzMzU2MDY0OTkwKHZhbHVlKTsKICAgIH0sCiAgfSk7CiAgalF1ZXJ5KCIjcGRhdGVfMTc2MzM1NjA2NDk5MCIpLmRhdGVwaWNrZXIoImRlc3Ryb3kiKTsKICBqUXVlcnkoIiNwZGF0ZV8xNzYzMzU2MDY0OTkwIikKICAgIC5kYXRlcGlja2VyKHsKICAgICAgZGF0ZUZvcm1hdDogIm1tL2RkL3l5IiwKICAgICAgY2hhbmdlTW9udGg6IGZhbHNlLAogICAgICBjaGFuZ2VZZWFyOiBmYWxzZSwKICAgICAgc2hvd09uOiAiYm90aCIsCiAgICAgIGJ1dHRvblRleHQ6ICI8c3BhbiBjbGFzcz0nc3ByaXRlIGNhbEljb24nPjwvc3Bhbj4iLAogICAgICBzaG9ydFllYXJDdXRvZmY6IDUwLAogICAgICBtaW5EYXRlOiBuZXcgRGF0ZSgpLAogICAgICBvblNlbGVjdDogZnVuY3Rpb24gKHNlbGVjdGVkRGF0ZSkgewogICAgICAgIG9uRGF0ZVNlbGVjdF8xNzYzMzU2MDY0OTkwKHNlbGVjdGVkRGF0ZSk7CiAgICAgIH0sCiAgICAgIGJlZm9yZVNob3dEYXk6IGNoZWNrRGF5LAogICAgICBiZWZvcmVTaG93OiBmdW5jdGlvbiAodGV4dGJveCwgaW5zdGFuY2UpIHsKICAgICAgICBpbnN0YW5jZS5kcERpdi5jc3MoewogICAgICAgICAgbWFyZ2luVG9wOiAwICsgInB4IiwKICAgICAgICAgIG1hcmdpbkxlZnQ6IDAgKyAicHgiLAogICAgICAgIH0pOwogICAgICB9LAogICAgfSkKICAgIC5hdHRyKCJyZWFkb25seSIsICJyZWFkb25seSIpOwogIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmlydGhfZGF0ZV8xNzYzMzU2MDY0OTkwIikpIHsKICAgIGpRdWVyeSgiI2JpcnRoX2RhdGVfMTc2MzM1NjA2NDk5MCIpLmRhdGVwaWNrZXIoImRlc3Ryb3kiKTsKICAgIGpRdWVyeSgiI2JpcnRoX2RhdGVfMTc2MzM1NjA2NDk5MCIpCiAgICAgIC5kYXRlcGlja2VyKHsKICAgICAgICBkYXRlRm9ybWF0OiAibW0tZGQteXkiLAogICAgICAgIGNoYW5nZU1vbnRoOiB0cnVlLAogICAgICAgIGNoYW5nZVllYXI6IHRydWUsCiAgICAgICAgc2hvd09uOiAiYm90aCIsCiAgICAgICAgYnV0dG9uVGV4dDogIjxzcGFuIGNsYXNzPSdzcHJpdGUgY2FsSWNvbic+PC9pPjwvc3Bhbj4iLAogICAgICAgIHNob3J0WWVhckN1dG9mZjogNTAsCiAgICAgICAgbWF4RGF0ZTogbmV3IERhdGUoKSwKICAgICAgICBtaW5EYXRlOiBudWxsLAogICAgICAgIHllYXJSYW5nZTogIjE5MjE6KzAiLAogICAgICAgIGJlZm9yZVNob3c6IGZ1bmN0aW9uICh0ZXh0Ym94LCBpbnN0YW5jZSkgewogICAgICAgICAgaW5zdGFuY2UuZHBEaXYuY3NzKHsKICAgICAgICAgICAgbWFyZ2luVG9wOiAwICsgInB4IiwKICAgICAgICAgICAgbWFyZ2luTGVmdDogMCArICJweCIsCiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICB9KQogICAgICAuYXR0cigicmVhZG9ubHkiLCAicmVhZG9ubHkiKTsKICB9CgogIGZvciAodmFyIGkgPSAwOyBpIDwgbUZvcm1fMTc2MzM1NjA2NDk5MC5lbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgaWYgKG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQgIT0gIiIpIHsKICAgICAgdmFyIG5hbWUgPSBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLm5hbWUuc3BsaXQoIjsiKVswXTsKICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgiY3VzdG9tX2ZpZWxkX2ludGVnZXIiKSkgewogICAgICAgIGxldCBpZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1Gb3JtXzE3NjMzNTYwNjQ5OTAuZWxlbWVudHNbaV0uaWQpOwogICAgICAgICQoIiMiICsgbUZvcm1fMTc2MzM1NjA2NDk5MC5lbGVtZW50c1tpXS5pZCkua2V5ZG93bihmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSA9PSB0cnVlKSB7CiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoCiAgICAgICAgICAgIChldmVudC5rZXlDb2RlID49IDQ4ICYmIGV2ZW50LmtleUNvZGUgPD0gNTcpIHx8CiAgICAgICAgICAgIChldmVudC5rZXlDb2RlID49IDk2ICYmIGV2ZW50LmtleUNvZGUgPD0gMTA1KSB8fAogICAgICAgICAgICBldmVudC5rZXlDb2RlID09IDggfHwKICAgICAgICAgICAgZXZlbnQua2V5Q29kZSA9PSA5IHx8CiAgICAgICAgICAgIGV2ZW50LmtleUNvZGUgPT0gMzcgfHwKICAgICAgICAgICAgZXZlbnQua2V5Q29kZSA9PSAzOSB8fAogICAgICAgICAgICBldmVudC5rZXlDb2RlID09IDQ2IHx8CiAgICAgICAgICAgIGV2ZW50LmtleUNvZGUgPT0gMTkwCiAgICAgICAgICApIHsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKS5pbmRleE9mKCIuIikgIT09IC0xICYmIGV2ZW50LmtleUNvZGUgPT0gMTkwKQogICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImZpcnN0X25hbWUiKSB8fCBuYW1lLnN0YXJ0c1dpdGgoImxhc3RfbmFtZSIpKSB7CiAgICAgICAgbGV0IGlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobUZvcm1fMTc2MzM1NjA2NDk5MC5lbGVtZW50c1tpXS5pZCk7CiAgICAgICAgJCgiIyIgKyBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkKS5rZXlwcmVzcyhmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgIHZhciBpbnB1dFZhbHVlID0gZXZlbnQud2hpY2g7CiAgICAgICAgICBpZiAoCiAgICAgICAgICAgICEoaW5wdXRWYWx1ZSA+PSA2NSAmJiBpbnB1dFZhbHVlIDw9IDEyMikgJiYKICAgICAgICAgICAgaW5wdXRWYWx1ZSAhPSAzMiAmJgogICAgICAgICAgICBpbnB1dFZhbHVlICE9IDAKICAgICAgICAgICkgewogICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKAogICAgICAgICAgICBpbnB1dFZhbHVlID09IDQyIHx8CiAgICAgICAgICAgIGlucHV0VmFsdWUgPT0gOTQgfHwKICAgICAgICAgICAgaW5wdXRWYWx1ZSA9PSA5NSB8fAogICAgICAgICAgICBpbnB1dFZhbHVlID09IDkxIHx8CiAgICAgICAgICAgIGlucHV0VmFsdWUgPT0gOTIgfHwKICAgICAgICAgICAgaW5wdXRWYWx1ZSA9PSA5MwogICAgICAgICAgKSB7CiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgJCgiIyIgKyBtRm9ybV8xNzYzMzU2MDY0OTkwLmVsZW1lbnRzW2ldLmlkKQogICAgICAgICAgLnVuYmluZCgia2V5dXAgY2hhbmdlIGlucHV0IHBhc3RlIikKICAgICAgICAgIC5iaW5kKCJrZXl1cCBjaGFuZ2UgaW5wdXQgcGFzdGUiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOwogICAgICAgICAgICB2YXIgdmFsID0gJHRoaXMudmFsKCk7CiAgICAgICAgICAgIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoOwogICAgICAgICAgICB2YXIgbWF4Q291bnQgPSAzMDsKICAgICAgICAgICAgaWYgKHZhbExlbmd0aCA+IG1heENvdW50KSB7CiAgICAgICAgICAgICAgJHRoaXMudmFsKCR0aGlzLnZhbCgpLnN1YnN0cmluZygwLCBtYXhDb3VudCkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgfQogICAgfQogIH0KICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiW3R5cGU9cmVzZXRdIikpIHsKICAgIGRvY3VtZW50CiAgICAgIC5xdWVyeVNlbGVjdG9yKCJbdHlwZT1yZXNldF0iKQogICAgICAuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgY3VzdG9tX3Jlc2V0XzE3NjMzNTYwNjQ5OTAoKTsKICAgICAgfSk7CiAgfQogIGNoZWNrSXNSZXZvbHV0aW9uRWhyXzE3NjMzNTYwNjQ5OTAoKTsKICBwcm9jZXNzQ2xpZW50U3BlY2lmaWNMb2dpY18xNzYzMzU2MDY0OTkwKCk7Cn0pKCk7CgpmdW5jdGlvbiBjaGVja0lzUmV2b2x1dGlvbkVocl8xNzYzMzU2MDY0OTkwKCkgewogICAgaXNSZXZfMTc2MzM1NjA2NDk5MCA9ICEhT2JqZWN0LnZhbHVlcyhsb2NhdGlvbnNEZXRhaWxzXzE3NjMzNTYwNjQ5OTApLmZpbmQob2JqID0+IG9iai5pc1Jldik7CiAgICBpZihpc1Jldl8xNzYzMzU2MDY0OTkwKXsKICAgICAgJCgnI3N0YXRlXzE3NjMzNTYwNjQ5OTAnKS5oZWFwYm94KHsKICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgIGlmKHZhbHVlKXsKICAgICAgICAgICAgJCgiI2hlYXBib3hfc3RhdGVfMTc2MzM1NjA2NDk5MCIgKyAiIC5ob2xkZXIiKS5yZW1vdmVDbGFzcygiZXJyb3JDbGFzcyIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJCgiI2hlYXBib3hfc3RhdGVfMTc2MzM1NjA2NDk5MCIgKyAiIC5ob2xkZXIiKS5hZGRDbGFzcygiZXJyb3JDbGFzcyIpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgIH0pOwogICAgfQp9CgpmdW5jdGlvbiBpc1ZhbGlkUG9zdGFsQ29kZSh6aXBjb2RlID0gJycpIHsKICAgIGNvbnN0IHBhdHRlcm5zID0gWwogICAgICAgIC9eKD86XGR7NX18XGR7NX0tXGR7NH0pJC8sICAgICAgLy8gVVMgWklQIENvZGU6IDUgZGlnaXRzIG9yIDUrNCBmb3JtYXQKICAgICAgICAvXltBLVphLXpdXGRbQS1aYS16XSA/XGRbQS1aYS16XVxkJC8gLy8gQ2FuYWRpYW4gUG9zdGFsIENvZGU6IEExQSAxQTEgb3IgQTFBMUExCiAgICBdOwogICAgcmV0dXJuIHBhdHRlcm5zLnNvbWUocGF0dGVybiA9PiBwYXR0ZXJuLnRlc3QoemlwY29kZS50cmltKCkpKTsKfQoKZnVuY3Rpb24gcHJvY2Vzc0NsaWVudFNwZWNpZmljTG9naWNfMTc2MzM1NjA2NDk5MCgpIHsKICBpZiAoY3VycmVudExvY2F0aW9uSWQgPT0gJzYzODFmNmUxLTk0NmItNDNlYy1hNDg5LTg1NDMwMGNmYTE3ZCcgfHwgY3VycmVudExvY2F0aW9uSWQgPT0gJzhhNzIzMjcwLTI1NWYtNDRiZS1iMGQzLWYxNzRlOTczMzAyNCcpIHsKICAgIGxldCBtZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hd2Z0aW1lbm90YXZpYWxhYmxlYm94IHN0cm9uZycpOwogICAgaWYgKG1lc3NhZ2VFbGVtZW50KSB7CiAgICAgIG1lc3NhZ2VFbGVtZW50LnRleHRDb250ZW50ID0gIlBsZWFzZSBjYWxsIHRoZSBvZmZpY2UgZm9yIG1vcmUgZGV0YWlscyAtIDgxNS00MzktMjQwMC4iOwogICAgfQogIH0KfQ==')+"<\/script>";

    
    
    var codes = ele.getElementsByTagName("script");   
    for(var i=0;i<codes.length;i++)  
    {  
        eval(codes[i].text);  
    } 

   