# Name: bot_write_tab_customize v0.7.5 # Rearrange and style items in the Textpattern v4.6 write tab # Author: redbot (additions by mrdale + jcr) # URL: http://www.redbot.it/txp/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the "Install plugin" box: # ..................................................................... YToxNDp7czo0OiJuYW1lIjtzOjIzOiJib3Rfd3JpdGVfdGFiX2N1c3RvbWl6ZSI7czo3OiJ2 ZXJzaW9uIjtzOjU6IjAuNy41IjtzOjY6ImF1dGhvciI7czozNDoicmVkYm90IChhZGRpdGlv bnMgYnkgbXJkYWxlICsgamNyKSI7czoxMDoiYXV0aG9yX3VyaSI7czoyNToiaHR0cDovL3d3 dy5yZWRib3QuaXQvdHhwLyI7czoxMToiZGVzY3JpcHRpb24iO3M6NTk6IlJlYXJyYW5nZSBh bmQgc3R5bGUgaXRlbXMgaW4gdGhlIFRleHRwYXR0ZXJuIHY0LjYgd3JpdGUgdGFiIjtzOjQ6 ImhlbHAiO3M6MDoiIjtzOjQ6ImNvZGUiO3M6MzM4NTk6IgoKaWYoQHR4cGludGVyZmFjZSA9 PSAnYWRtaW4nKSB7CglhZGRfcHJpdnMoJ2JvdF93dGNfdGFiJywgJzEsMicpOwoJcmVnaXN0 ZXJfdGFiKCdleHRlbnNpb25zJywgJ2JvdF93dGNfdGFiJywgJ1dyaXRlIHRhYiBjdXN0b21p emUnKTsKCXJlZ2lzdGVyX2NhbGxiYWNrKCdib3Rfd3RjX3RhYicsICdib3Rfd3RjX3RhYicp OwoKCWdsb2JhbCAkZXZlbnQ7CglpZigkZXZlbnQgPT0gJ2FydGljbGUnKSB7CgkgIHJlZ2lz dGVyX2NhbGxiYWNrKCdib3Rfd3RjJywgJ2FkbWluX3NpZGUnLCAnaGVhZF9lbmQnKTsKCSAg cmVnaXN0ZXJfY2FsbGJhY2soJ2JvdF9oaWRlX3Blcl9zZWN0aW9uJywgJ2FkbWluX3NpZGUn LCAnaGVhZF9lbmQnKTsKCSAgcmVnaXN0ZXJfY2FsbGJhY2soJ2JvdF9oaWRkZW5fc2VjdGlv bnMnLCAnYWRtaW5fc2lkZScsICdoZWFkX2VuZCcpOwoJfQoJaWYoJGV2ZW50ID09ICdib3Rf d3RjX3RhYicpIHsKCQlyZWdpc3Rlcl9jYWxsYmFjaygnYm90X3d0Y19jc3MnLCdhZG1pbl9z aWRlJywnaGVhZF9lbmQnKTsKCX0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdib3Rfd3RjX3dlbGNv bWUnLCdwbHVnaW5fbGlmZWN5Y2xlLmJvdF93cml0ZV90YWJfY3VzdG9taXplJyk7Cn0KCi8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCgoKCiRib3Rf YXJyX3NlbGVjdG9ycyA9IGFycmF5KAoKICAgICd3cml0ZXRhYl9tYWluX2NvbnRlbnQnID0+ ICckKCIjbWFpbl9jb250ZW50IiknLAoKICAgICAgJ3dyaXRldGFiX3ZpZXdfbW9kZXMnID0+ ICckKCIjdmlld19tb2RlcyIpJywKICAgICAgJ3RpdGxlJyA9PiAnJCgiLnRpdGxlIiknLAog ICAgICAnYm9keScgPT4gJyQoIi5ib2R5IiknLAogICAgICAnZXhjZXJwdCcgPT4gJyQoIi5l eGNlcnB0IiknLAoKICAgICd3cml0ZXRhYl9zaWRlYmFyJyA9PiAnJCgiI3N1cHBvcnRpbmdf Y29udGVudCIpJywKCiAgICAgICdzYXZlJyA9PiAnJCgiLnR4cC1zYXZlIiknLAoKICAgICAg J2FjdGlvbnMnID0+ICckKCIudHhwLWFjdGlvbnMiKScsCgogICAgICAgICdjcmVhdGVfbmV3 JyA9PiAnJCgiLnR4cC1uZXciKScsCiAgICAgICAgJ2R1cGxpY2F0ZScgPT4gJyQoIi50eHAt Y2xvbmUiKScsICAgICAgCiAgICAgICAgJ3ZpZXcnID0+ICckKCIudHhwLWFydGljbGUtdmll dyIpJywgCgogICAgICAncGFnZV9hcnRpY2xlX25hdl9oZWQnID0+ICckKCIubmF2LXRlcnRp YXJ5IiknLAoKICAgICAgJ3NvcnRfZGlzcGxheScgPT4gJyQoIiN0eHAtd3JpdGUtc29ydC1n cm91cCIpJywKCiAgICAgICAgJ3N0YXR1cycgPT4gJyQoIi5zdGF0dXMiKScsCiAgICAgICAg J3NlY3Rpb24nID0+ICckKCIuc2VjdGlvbiIpJywKICAgICAgICAnY2F0ZWdvcnkxJyA9PiAn JCgiLmNhdGVnb3J5LTEiKScsCiAgICAgICAgJ2NhdGVnb3J5MicgPT4gJyQoIi5jYXRlZ29y eS0yIiknLAoKICAgICAgJ2RhdGVfc2V0dGluZ3MnID0+ICckKCIjdHhwLWRhdGVzLWdyb3Vw IiknLAoKICAgICAgICAncHVibGlzaCcgPT4gJyQoIi5wb3N0ZWQiKScsCiAgICAgICAgJ3B1 Ymxpc2hfdGltZScgPT4gJyQoIi5wb3N0ZWQudGltZSIpJywKICAgICAgICAncmVzZXRfdGlt ZScgPT4gJyQoIi5wb3N0ZWQtbm93IiknLAogICAgICAgICdleHBpcmVkJyA9PiAnJCgiLmV4 cGlyZXMiKScsCiAgICAgICAgJ2V4cGlyZV90aW1lJyA9PiAnJCgiLmV4cGlyZXMudGltZSIp JywKCiAgICAgICdtZXRhJyA9PiAnJCgiI3R4cC1tZXRhLWdyb3VwIiknLAoKICAgICAgICAn dXJsX3RpdGxlJyA9PiAnJCgiLnVybC10aXRsZSIpJywKICAgICAgICAnZGVzY3JpcHRpb24n ID0+ICckKCIuZGVzY3JpcHRpb24iKScsCiAgICAgICAgJ2tleXdvcmRzJyA9PiAnJCgiLmtl eXdvcmRzIiknLAoKICAgICAgJ2NvbW1lbnRfc2V0dGluZ3MnID0+ICckKCIjdHhwLWNvbW1l bnRzLWdyb3VwIiknLAoKICAgICAgICAndXNlX2NvbW1lbnRzJyA9PiAnJCgiLmNvbW1lbnRz LWFubm90YXRlIiknLAogICAgICAgICdjb21tZW50X2ludml0YXRpb24nID0+ICckKCIuY29t bWVudC1pbnZpdGUiKScsCgogICAgICAnYXJ0aWNsZV9pbWFnZV9ncm91cCcgPT4gJyQoIiN0 eHAtaW1hZ2UtZ3JvdXAiKScsCgogICAgICAgICdhcnRpY2xlX2ltYWdlJyA9PiAnJCgiLmFy dGljbGUtaW1hZ2UiKScsCiAgICAgICAgCiAgICAgICdjdXN0b20nID0+ICckKCIjdHhwLWN1 c3RvbS1maWVsZC1ncm91cCIpJywKCiAgICAgICdhZHZhbmNlZF9vcHRpb25zJyA9PiAnJCgi I3R4cC1hZHZhbmNlZC1ncm91cCIpJywKCiAgICAgICAgJ2FydGljbGVfbWFya3VwJyA9PiAn JCgiLm1hcmt1cC1ib2R5IiknLAogICAgICAgICdleGNlcnB0X21hcmt1cCcgPT4gJyQoIi5t YXJrdXAtZXhjZXJwdCIpJywKICAgICAgICAnb3ZlcnJpZGVfZGVmYXVsdF9mb3JtJyA9PiAn JCgiLm92ZXJyaWRlLWZvcm0iKScsCgogICAgICAndGV4dGlsZV9oZWxwJyA9PiAnJCgiI3R4 cC10ZXh0ZmlsdGVyLWdyb3VwIiknLAoKICAgICAgJ3JlY2VudF9hcnRpY2xlcycgPT4gJyQo IiN0eHAtcmVjZW50LWdyb3VwIiknCgopOwoKLy8gY3JlYXRlcyB0aGUgdHJhbnNsYXRlZCBt YWluIHBsdWdpbnMgYXJyYXkgKCRib3RfaXRlbXMpCmdsb2JhbCAkYm90X2l0ZW1zOwpmb3Jl YWNoICggJGJvdF9hcnJfc2VsZWN0b3JzIGFzICR0aXRsZSA9PiAkc2VsZWN0b3IgKSB7CiAg ICBib3Rfd3RjX2luc2VydF9pbl9tYWluX2FycmF5KCR0aXRsZSwgJHNlbGVjdG9yKTsKfQpu YXRjYXNlc29ydCgkYm90X2l0ZW1zKTsKCgoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gSGVscGVyIGZ1bmN0aW9u cwovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQoKLy8gaGVscHMgYnVpbGQgdGhlIG1haW4gYXJyYXkKCmZ1bmN0aW9uIGJv dF93dGNfaW5zZXJ0X2luX21haW5fYXJyYXkgKCR0aXRsZSwgJHNlbGVjdG9yKQp7CglnbG9i YWwgJGJvdF9pdGVtczsKCWlmIChzdHJwb3MoJHRpdGxlLCAnIWJvdCEnKSkKCXsKCQkkc3Bs aXRfdGl0bGVzID0gZXhwbG9kZSgiIWJvdCEiLCAkdGl0bGUpOwoJCSR0aXRsZSA9ICcnOwoJ CWZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCRzcGxpdF90aXRsZXMpOyAkaSsrKQoJCXsKCQkJ JHRpdGxlIC49IGdUeHQoJHNwbGl0X3RpdGxlc1skaV0pOyAvLyBzcGxpdCBhbmQgYnVpbGQg dHJhbnNsYXRlZCB0aXRsZQoJCX0KCX0KCWVsc2UKCXsKCQkkdGl0bGUgPSBnVHh0KCR0aXRs ZSk7IC8vIGdldHMgdGhlIHRpdGxlIHRvIGFsbG93IHRyYW5zbGF0aW9uCgl9CgkkYm90X2l0 ZW1zIFskc2VsZWN0b3JdID0gZ1R4dCgkdGl0bGUpOwoJcmV0dXJuICRib3RfaXRlbXM7Cn0K CgoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLy8g Y3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgZXh0cmFjdGVkIGZyb20gdGhlIGRhdGFiYXNl CgpmdW5jdGlvbiBib3Rfd3RjX2ZldGNoX2RiKCkKewoJaWYoYm90X3d0Y19jaGVja19pbnN0 YWxsKCkpewoJCSRvdXQgPSBzYWZlX3Jvd3MoJ2lkLCBpdGVtLCBwb3NpdGlvbiwgZGVzdGlu YXRpb24sIHNlY3Rpb25zLCBjbGFzcycsICdib3Rfd3RjICcsJzE9MScpOwoJCXJldHVybiAk b3V0OwoJfQp9CgoKCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CgovLyBjcmVhdGVzIGFuIGFycmF5IG9mIGFsbCBjZnMg Zm9yIHNlbGVjdElucHV0CgpmdW5jdGlvbiBib3RfZ2V0X2NmcygpCnsKCSRyID0gc2FmZV9y b3dzX3N0YXJ0KCduYW1lLCB2YWwsIGh0bWwnLCAndHhwX3ByZWZzJywnZXZlbnQgPSAiY3Vz dG9tIiBBTkQgdmFsICE9ICIiJyk7CglpZiAoJHIpIHsKCQlnbG9iYWwgJGFycl9jdXN0b21f ZmllbGRzOwoJCXdoaWxlICgkYSA9IG5leHRSb3coJHIpKSB7CgkJCSRuYW1lID0gc3RyX3Jl cGxhY2UoJ19zZXQnLCAnJywgJGFbJ25hbWUnXSk7CgkJCSRodG1sID0gJGFbJ2h0bWwnXTsK CQkJaWYgKCRodG1sID09ICdjaGVja2JveCcgfHwgJGh0bWwgPT0gJ211bHRpLXNlbGVjdCcp IHsKCQkJCSRzZWxlY3RvciA9ICckKCJwOmhhcygqW25hbWU9XCcnLiRuYW1lLidbXVwnXSki KSc7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkc2VsZWN0b3IgPSAnJCgicDpoYXMoKltuYW1l PVwnJy4kbmFtZS4nXCddKSIpJzsKCQkJfQoJCQkkdmFsID0gJGFbJ3ZhbCddOwoJCQkkYXJy X2N1c3RvbV9maWVsZHNbJHNlbGVjdG9yXSA9ICR2YWw7CgkJfQoJfQoJaWYgKCRhcnJfY3Vz dG9tX2ZpZWxkcykgewogCW5hdGNhc2Vzb3J0KCRhcnJfY3VzdG9tX2ZpZWxkcyk7IC8vIHNv cnQgY2ZzIC0gdXNlZCBpbnN0ZWFkIG9mIGFzb3J0IGJlY2F1c2UgaXMgY2FzZS1pbnNlbnNp dGl2ZQoJcmV0dXJuICRhcnJfY3VzdG9tX2ZpZWxkczsKICAgIH0KfTsKCgoKLy8gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ci8vIGNyZWF0ZXMgYW4gYXJyYXkgb2YgYWxsIHNlY3Rpb25zIGZvciBzZWxlY3RJbnB1dAoK ZnVuY3Rpb24gYm90X2dldF9zZWN0aW9ucygpCnsKCSRyID0gc2FmZV9yb3dzX3N0YXJ0KCdu YW1lLCB0aXRsZScsICd0eHBfc2VjdGlvbicsJzE9MScpOwoJaWYgKCRyKSB7CgkJd2hpbGUg KCRhID0gbmV4dFJvdygkcikpIHsKCQkJJG5hbWUgPSAkYVsnbmFtZSddOwoJCQkkdGl0bGUg PSAkYVsndGl0bGUnXTsKCQkJJHNlY3Rpb25zWyRuYW1lXSA9ICR0aXRsZTsKCQl9Cgl9CiAg bmF0Y2FzZXNvcnQoJHNlY3Rpb25zKTsKICByZXR1cm4gJHNlY3Rpb25zOwp9CgoKCi8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CgovLyB1cGRhdGUgYnV0dG9uCgpmdW5jdGlvbiBib3RfdXBkYXRlX2J1dHRvbigpCnsK CXJldHVybiBuLic8ZGl2IGNsYXNzPSJib3RfdXBkYXRlX2J1dHRvbiI+JwoJCS5uLmVJbnB1 dCgnYm90X3d0Y190YWInKQoJCS5uLnNJbnB1dCgndXBkYXRlJykKCQkubi5mSW5wdXQoJ3N1 Ym1pdCcsICd1cGRhdGUnLCAnVXBkYXRlJywgJ3B1Ymxpc2gnKQoJCS4nPC9kaXY+JzsKfQoK CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQoKLy8gY2hlY2tzIGlmIGl0ZW0gaXMgYSBsYXlvdXQgcmVnaW9uCgpmdW5j dGlvbiBib3Rfd3RjX2lzX3JlZ2lvbigkaXRlbSkKewogICAgJGl0ZW0gPSBnZXRfbWFnaWNf cXVvdGVzX2dwYygpID8gJGl0ZW0gOiBkb1NsYXNoKCRpdGVtKSA7CgoJaWYoJGl0ZW0gPT0g JyQoXCIjbWFpbl9jb250ZW50XCIpJwoJfHwgJGl0ZW0gPT0gJyQoXCIjc3VwcG9ydGluZ19j b250ZW50XCIpJwoJfHwgJGl0ZW0gPT0gJyQoXCIjdmlld19tb2Rlc1wiKScKCSkKCXsKCQly ZXR1cm4gMTsKCX0KCXJldHVybiAwOwp9CgoKCi8vID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovLyBvdXRwdXRzIGh0bWwg Zm9yIHdhcm5pbmdzCgpmdW5jdGlvbiBib3Rfd2FybmluZygkd2FybmluZykKewoJcmV0dXJu IGdyYWYoaGVkKGdUeHQoJHdhcm5pbmcpLCczJywgJyBpZD0iYm90X3dhcm5pbmciJykpOwp9 OwoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovLyBL aWNrc3RhcnQgdGhlIHBsdWdpbiBhZnRlciBpbnN0YWxsYXRpb24gLyBhY3RpdmF0aW9uIC8g ZGVsZXRpb24KCmZ1bmN0aW9uIGJvdF93dGNfd2VsY29tZSgkZXZ0LCAkc3RwKQp7CiAgICBz d2l0Y2ggKCRzdHApIHsKICAgICAgICBjYXNlICdpbnN0YWxsZWQnOgogICAgICAgICAgICBi b3Rfd3RjX2luc3RhbGwoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZW5h YmxlZCc6CiAgICAgICAgICAgIGJvdF93dGNfdXBkYXRlKCk7CiAgICAgICAgICAgIGJyZWFr OwogICAgICAgIGNhc2UgJ2RlbGV0ZWQnOgogICAgICAgICAgICBib3Rfd3RjX2RlaW5zdGFs bCgpOwogICAgICAgICAgICBicmVhazsKICAgIH0KCiAgICByZXR1cm47Cn0KCgovLz09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi8vIHNldCB1cCBib3Rf d3RjIHRhYmxlcwoKZnVuY3Rpb24gYm90X3d0Y19pbnN0YWxsKCkKewoKCS8vIENyZWF0ZSB0 aGUgYm90X3d0YyB0YWJsZQoJc2FmZV9jcmVhdGUoJ2JvdF93dGMnLCcKCSAgICBpZCAgICAg ICAgICAgSU5UICAgICAgICAgIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAoJICAgIGl0ZW0J CSAgICAgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAoJICAgIHBvc2l0aW9uICAgICBWQVJDSEFS KDI1NSkgTk9UIE5VTEwsCgkgICAgZGVzdGluYXRpb24gIFZBUkNIQVIoMjU1KSBOT1QgTlVM TCwKCSAgICBzZWN0aW9ucyAgICAgVEVYVAkJICAgICAgTk9UIE5VTEwsCgkgICAgY2xhc3Mg ICAgCSAgIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKCSAgICBQUklNQVJZIEtFWSAoaWQpCgkn KTsKCgkvLyBzZXQgcHJlZiBlbnRyaWVzIGluIHR4cF9wcmVmcyB0YWJsZQoJc2V0X3ByZWYg KCdib3Rfd3RjX3NjcmlwdCcsJycsICdib3Rfd3RjXycsJzInKTsKCXNldF9wcmVmICgnYm90 X3d0Y19zdGF0aWNfc2VjdGlvbnMnLCcnLCAnYm90X3d0Y18nLCAnMicpOwoKfQoKCi8vPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLy8gcmVtb3ZlIGJv dF93dGMgdGFibGVzCgpmdW5jdGlvbiBib3Rfd3RjX2RlaW5zdGFsbCgpCnsKCgkvLyBEcm9w IHRoZSBib3Rfd3RjIHRhYmxlCglzYWZlX2Ryb3AoImJvdF93dGMiKTsKCS8vIFJlbW92ZSBi b3Rfd3RjIHByZWZzCglzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywgJ2V2ZW50ID0gImJvdF93 dGNfIicgKTsKCn0KCgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQoKLy8gdXBkYXRlcyBjZnMgc2VsZWN0b3JzIGluIGRi IHwgaW50cm9kdWNlZCBpbiBib3Rfd3RjIDAuNy4xCgpmdW5jdGlvbiBib3Rfd3RjX3VwZGF0 ZSgpCnsKCS8vIHByb2NlZWRzIG9ubHkgaWYgcGx1Z2luIGlzIGFscmVhZHkgaW5zdGFsbGVk CglpZiAoIWJvdF93dGNfY2hlY2tfaW5zdGFsbCgpKSB7CgkJcmV0dXJuOwoJfQoJc2FmZV9h bHRlcignYm90X3d0YycsICdDSEFOR0Ugc2VjdGlvbnMgc2VjdGlvbnMgVEVYVCcsMCk7Cgkk ZGJfdmFsdWVzID0gYm90X3d0Y19mZXRjaF9kYigpOyAvLyBhcnJheQoJZm9yICgkaSA9MDsg JGkgPCBjb3VudCgkZGJfdmFsdWVzKTsgJGkrKykgewoJCSRpZCA9ICRkYl92YWx1ZXNbJGld WydpZCddOwoJCSRpdGVtID0gJGRiX3ZhbHVlc1skaV1bJ2l0ZW0nXTsKCQkkZGVzdGluYXRp b24gPSAkZGJfdmFsdWVzWyRpXVsnZGVzdGluYXRpb24nXTsKCQkvLyB1cGRhdGVzIGNmcwog ICAgCWlmIChzdHJwb3MoJGl0ZW0sJ2N1c3RvbScpKSB7IC8vIGlmIGl0ZW0gY29udGFpbnMg dGhlIHN1YnN0cmluZyAnY3VzdG9tJwoJCQkkY2ZfbnVtYmVyID0gcHJlZ19yZXBsYWNlKCIv W14wLTldLyIsICcnLCAkaXRlbSk7IC8vIGRpdGNoIGFueXRoaW5nIHRoYXQgaXMgbm90IGEg bnVtYmVyCgkJCSR0eXBlID0gc2FmZV9maWVsZCgnaHRtbCcsICd0eHBfcHJlZnMnLCAnbmFt ZSA9ICJjdXN0b21fJy4kY2ZfbnVtYmVyLidfc2V0IicpOyAvLyByZXRyaWV2ZSBjZnMgdHlw ZQoJCQlpZiAoJHR5cGUgPT0gJ2NoZWNrYm94JyB8fCAkdHlwZSA9PSAnbXVsdGktc2VsZWN0 JykgewoJCQkJJHNlbGVjdG9yID0gJyQoInA6aGFzKCpbbmFtZT1cJ2N1c3RvbV8nLiRjZl9u dW1iZXIuJ1tdXCddKSIpJzsgLy8gYWRkcyB0aGUgJ1tdJyBwYXJ0CgkJCX0KCQkJZWxzZQoJ CQl7CgkJCQkkc2VsZWN0b3IgPSAnJCgicDpoYXMoKltuYW1lPVwnY3VzdG9tXycuJGNmX251 bWJlci4nXCddKSIpJzsKCQkJfQoJCQlzYWZlX3VwZGF0ZSgnYm90X3d0YycsICdpdGVtID0g IicuZG9zbGFzaCgkc2VsZWN0b3IpLiciJywgJ2lkID0gIicuJGlkLiciJyk7CiAgICAgCX0K ICAgIAlpZiAoc3RycG9zKCRkZXN0aW5hdGlvbiwnY3VzdG9tJykpIHsgLy8gaWYgZGVzdGlu YXRpb24gY29udGFpbnMgdGhlIHN1YnN0cmluZyAnY3VzdG9tJwoJCQkkY2ZfbnVtYmVyID0g cHJlZ19yZXBsYWNlKCIvW14wLTldLyIsICcnLCAkZGVzdGluYXRpb24pOyAvLyBkaXRjaCBh bnl0aGluZyB0aGF0IGlzIG5vdCBhIG51bWJlcgoJCQkkdHlwZSA9IHNhZmVfZmllbGQoJ2h0 bWwnLCAndHhwX3ByZWZzJywgJ25hbWUgPSAiY3VzdG9tXycuJGNmX251bWJlci4nX3NldCIn KTsgLy8gcmV0cmlldmUgY2ZzIHR5cGUKCQkJaWYgKCR0eXBlID09ICdjaGVja2JveCcgfHwg JHR5cGUgPT0gJ211bHRpLXNlbGVjdCcpIHsKCQkJCSRzZWxlY3RvciA9ICckKCJwOmhhcygq W25hbWU9XCdjdXN0b21fJy4kY2ZfbnVtYmVyLidbXVwnXSkiKSc7IC8vIGFkZHMgdGhlICdb XScgcGFydAoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHNlbGVjdG9yID0gJyQoInA6aGFzKCpb bmFtZT1cJ2N1c3RvbV8nLiRjZl9udW1iZXIuJ1wnXSkiKSc7CgkJCX0KCQkJc2FmZV91cGRh dGUoJ2JvdF93dGMnLCAnZGVzdGluYXRpb24gPSAiJy5kb3NsYXNoKCRzZWxlY3RvcikuJyIn LCAnaWQgPSAiJy4kaWQuJyInKTsKICAgICAJfQogICAgfQp9CgoKLy8gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCgkvLyBD aGVjayBpZiB0aGUgYm90X3d0YyB0YWJsZSBleGlzdHMKCmZ1bmN0aW9uIGJvdF93dGNfY2hl Y2tfaW5zdGFsbCgpCnsKCS8vIGlmIG51bWJlciBvZiByb3dzIGlzIGZhbHNlLCB0YWJsZSBk b2VzIG5vdCBleGlzdAoJaWYgKHNhZmVfY291bnQoImJvdF93dGMiLCAiMSA9IDEiKSAhPT0g ZmFsc2UpIHsKCQlyZXR1cm4gdHJ1ZTsKCX0KCXJldHVybiBmYWxzZTsKfQoKCgovLz09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi8vIG91dHB1dHMgYWxs IGl0ZW1zIGZvciBzZWxlY3RJbnB1dCgpICh1c2VkIGZvciBkZXN0aW5hdGlvbiBkcm9wZG93 bikKCmZ1bmN0aW9uIGJvdF9hbGxfaXRlbXNfc2VsZWN0aW5wdXQoKQp7CglnbG9iYWwgJGJv dF9pdGVtczsKCSRjZnMgPSBib3RfZ2V0X2NmcygpOyAvLyBnZXQgY2ZzIGFycmF5IGluIHRo ZSBmb3JtOiBjZl9zZWxlY3RvciA9PiBjZl9uYW1lCgkvLyBmaW5hbCB2YWx1ZXMgZm9yIHRo ZSB0eHAgZnVuY3Rpb24gc2VsZWN0SW5wdXQgKGluY2x1ZGluZyBjZnMgaWYgYW55KQoJaWYg KGlzX2FycmF5KCRjZnMpKSB7IC8vIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjdXN0b20g ZmllbGQgc2V0IGFkZHMgY2ZzIHRvICRib3RfaXRlbXMgYXJyYXkKCQkkYWxsX2l0ZW1zX3Nl bGVjdCA9IGFycmF5X21lcmdlKCRjZnMsICRib3RfaXRlbXMpOwoJfQoJZWxzZSB7CgkJJGFs bF9pdGVtc19zZWxlY3QgPSAkYm90X2l0ZW1zOwoJfQoJcmV0dXJuICRhbGxfaXRlbXNfc2Vs ZWN0OwoJbmF0Y2FzZXNvcnQoJGFsbF9pdGVtc19zZWxlY3QpOwp9CgoKLy89PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovLyBvdXRwdXRzIG9ubHkgJ25v dC15ZXQtdXNlZCcgaXRlbXMgZm9yIHNlbGVjdElucHV0KCkgKHVzZWQgZm9yIGl0ZW1zIGRy b3Bkb3duKQoKZnVuY3Rpb24gYm90X2NvbnRleHR1YWxfc2VsZWN0aW5wdXQoJGN1cnJlbnQg PSAiIikKewoJZ2xvYmFsICRib3RfaXRlbXM7CgkkZGJfdmFsdWVzID0gYm90X3d0Y19mZXRj aF9kYigpOyAvLyBhcnJheSBvZiB2YWx1ZXMgZnJvbSB0aGUgZGIKCSRhbGxfaXRlbXMgPSBi b3RfYWxsX2l0ZW1zX3NlbGVjdGlucHV0KCk7CglpZiAoYm90X3d0Y19jaGVja19pbnN0YWxs KCkpIHsKCQkkdXNlZF9pdGVtcyA9IHNhZmVfY29sdW1uKCdpdGVtJywgJ2JvdF93dGMnLCAn MT0xJyk7IC8vIG51bWVyaWMgYXJyYXkgb2YgaXRlbSB2YWx1ZXMgZnJvbSB0aGUgZGIKCQlm b3JlYWNoICgkYWxsX2l0ZW1zIGFzICRpdGVtID0+ICR0aXRsZSkgewoJICAgCQlpZiAoIWlu X2FycmF5KCRpdGVtLCAkdXNlZF9pdGVtcykpIHsKCSAJCQkkaXRlbXNfc2VsZWN0SW5wdXRb JGl0ZW1dID0gJHRpdGxlOwoJIAkJfQoJCX0KCX0KCWVsc2UgewoJCSRpdGVtc19zZWxlY3RJ bnB1dCA9ICRhbGxfaXRlbXM7Cgl9CiAgICBpZiAoJGN1cnJlbnQpIHsgLy8gaWYgdGhlIHBh cmFtZXRlciBpcyBnaXZlbiBhZGRzIGN1cnJlbnQgdmFsdWUgdG8gYXJyYXkKICAgIAkkaXRl bXNfc2VsZWN0SW5wdXRbJGN1cnJlbnRdID0gJGFsbF9pdGVtc1skY3VycmVudF07CiAgICB9 CglyZXR1cm4gICRpdGVtc19zZWxlY3RJbnB1dDsKfQoKCgovLyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBib3Rfd3Rj IHRhYgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQoKLy8gb3V0cHV0cyB0aGUgcm93cyBmb3IgdGhlIGh0bWwgdGFibGUg aW4gdGhlIGJvdF93dGNfdGFiCgpmdW5jdGlvbiBib3Rfd3RjX291dHB1dF9yb3dzKCkKewoJ Z2xvYmFsICRib3RfaXRlbXM7CgoJJHNlbGVjdElucHV0X2Zvcl9wb3NpdGlvbiA9IGFycmF5 KCdpbnNlcnRCZWZvcmUnPT4nYmVmb3JlJywnaW5zZXJ0QWZ0ZXInPT4nYWZ0ZXInKTsgLy8g cG9zaXRpb24gdmFsdWVzIGZvciB0aGUgdHhwIGZ1bmN0aW9uIHNlbGVjdElucHV0CgkkZGJf dmFsdWVzID0gYm90X3d0Y19mZXRjaF9kYigpOyAvLyBhcnJheSBvZiB2YWx1ZXMgZnJvbSB0 aGUgZGIKCiAgICAkZGVzdGluYXRpb25fc2VsZWN0SW5wdXQgPSBib3RfYWxsX2l0ZW1zX3Nl bGVjdGlucHV0KCk7CgkkaXRlbXNfc2VsZWN0SW5wdXQgPSBib3RfY29udGV4dHVhbF9zZWxl Y3RpbnB1dCgpOwoKCS8vIGJ1aWxkcyByb3dzIGZvciBuZXcgaXRlbSBzZWN0aW9ucyBsaXN0 Cgkkc2VjdGlvbnM9IGJvdF9nZXRfc2VjdGlvbnMoKTsgLy8gZ2V0IHNlY3Rpb25zIGFycmF5 CgkkbmV3X2l0ZW1fc2VjdGlvbnNfcm93cyA9ICcnOwoJZm9yZWFjaCAoJHNlY3Rpb25zIGFz ICRrZXkgPT4gJHZhbHVlKSB7CgkJJG5ld19pdGVtX3NlY3Rpb25zX3JvdyA9ICc8bGFiZWw+ Jy5jaGVja2JveCgnbmV3X2l0ZW1fc2VjdGlvbnNbXScsICRrZXksICcwJykuJHZhbHVlLic8 L2xhYmVsPjxiciAvPic7CgkJJG5ld19pdGVtX3NlY3Rpb25zX3Jvd3MgLj0gJG5ld19pdGVt X3NlY3Rpb25zX3JvdzsKICAgIH0KICAgICRuZXdfaXRlbV9zZWN0aW9uc19yb3dzIC49ICc8 cCA+PGEgaHJlZj0iIyIgY2xhc3M9ImJvdF9hbGwiPicuZ1R4dCgiYWxsIikuJzwvYT4gfCA8 YSBocmVmPSIjIiBjbGFzcz0iYm90X25vbmUiPicuZ1R4dCgibm9uZSIpLic8L2E+PC9wPic7 IC8vIGhpZGUgYWxsL25vbmUKCgkvLyBuZXcgaXRlbSBpbnNlcnRpb24KCSRyb3dzID0gIiI7 CgkkaW5wdXRfcm93ID0gdHIoCgkJdGQoc2VsZWN0SW5wdXQoJ25ld19pdGVtJyxib3RfY29u dGV4dHVhbF9zZWxlY3RpbnB1dCgpLCAnJywgJzEnKSwgJycsICdib3RfaGlsaWdodCcpCgkJ LnRkKHNlbGVjdElucHV0KCduZXdfaXRlbV9wb3NpdGlvbicsICRzZWxlY3RJbnB1dF9mb3Jf cG9zaXRpb24sICcnLCAnMScpKQoJCS50ZChzZWxlY3RJbnB1dCgnbmV3X2l0ZW1fZGVzdGlu YXRpb24nLGJvdF9hbGxfaXRlbXNfc2VsZWN0aW5wdXQoKSwgJycsICcxJykpCgkJLnRkKCc8 cD48YSBocmVmPSIjIiBjbGFzcz0iYm90X3B1c2giPicuZ1R4dCgidGFnX3NlY3Rpb25fbGlz dCIpLic8L2E+PC9wPjxkaXYgY2xhc3M9ImJvdF9jb2xsYXBzZSI+Jy4kbmV3X2l0ZW1fc2Vj dGlvbnNfcm93cy4nPC9kaXY+JykKCQkudGQoZmlucHV0KCd0ZXh0JywnbmV3X2l0ZW1fY2xh c3MnLCAnJykpCgkJLnRkKCkKCQkpOwoJCSRyb3dzIC49ICRpbnB1dF9yb3c7CgoJLy8gb3Ro ZXIgcm93cyAtIG91dHB1dCBpZiBhdCBsZWFzdCBvbmUgcmVjb3JkIHdhcyBhbHJlYWR5IHNl dAoJaWYgKCRkYl92YWx1ZXMpewoJCWZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCAkZGJfdmFs dWVzICk7ICRpKyspewoJCQkvLyBkYXRhIGZvciAic2VjdGlvbnMgdG8gc2hvdyIgc2VsZWN0 aW5wdXQgLSBkZWNpZGVzIHdldGhlciBhIHNlY3Rpb24gaXMgY2hlY2tlZCBvciBub3QKCQkJ JGJvdF9oaWRlX2luX3RoaXNfc2VjdGlvbnNfYXJyYXkgPSBleHBsb2RlKCd8JywgJGRiX3Zh bHVlc1skaV1bJ3NlY3Rpb25zJ10pOwoJCQkkaXRlbV9zZWN0aW9uc19yb3dzID0gJyc7CgkJ CWZvcmVhY2ggKCRzZWN0aW9ucyBhcyAka2V5ID0+ICR2YWx1ZSkgeyAvLyBpZiBzZWN0aW9u IGlzIGluIGRiIG1hcmsgYXMgY2hlY2tlZAoJCQkgICAgJGNoZWNrZWQgPSBpbl9hcnJheSgk a2V5LCAkYm90X2hpZGVfaW5fdGhpc19zZWN0aW9uc19hcnJheSkgPyAnMSc6ICcwJzsKCQkJ CSRpdGVtX3NlY3Rpb25zX3JvdyA9ICAnPGxhYmVsPicuY2hlY2tib3goJ2JvdF93dGNfc2Vj dGlvbnNfZm9yX2lkXycuJGRiX3ZhbHVlc1skaV1bJ2lkJ10uJ1tdJywgJGtleSwgJGNoZWNr ZWQpLiR2YWx1ZS4nPC9sYWJlbD48YnIgLz4nOwoJCQkJJGl0ZW1fc2VjdGlvbnNfcm93cyAu PSAkaXRlbV9zZWN0aW9uc19yb3c7CgkJICAgIH0KCQkgICAgJGl0ZW1fc2VjdGlvbnNfcm93 cyAuPSAnPHA+PGEgaHJlZj0iIyIgY2xhc3M9ImJvdF9hbGwiPicuZ1R4dCgiYWxsIikuJzwv YT4gfCA8YSBocmVmPSIjIiBjbGFzcz0iYm90X25vbmUiPicuZ1R4dCgibm9uZSIpLic8L2E+ PC9wPic7IC8vIGhpZGUgYWxsL25vbmUKCQkJJHNpbmdsZV9yb3cgPSB0cigKCQkJdGQoc2Vs ZWN0SW5wdXQoJ2l0ZW1bXScsYm90X2NvbnRleHR1YWxfc2VsZWN0aW5wdXQoJGRiX3ZhbHVl c1skaV1bJ2l0ZW0nXSksICRkYl92YWx1ZXNbJGldWydpdGVtJ10sJzAnKSwgJycsICdib3Rf aGlsaWdodCcpCgkJCS50ZChzZWxlY3RJbnB1dCgnaXRlbV9wb3NpdGlvbltdJywgJHNlbGVj dElucHV0X2Zvcl9wb3NpdGlvbiwgJGRiX3ZhbHVlc1skaV1bJ3Bvc2l0aW9uJ10sICcxJykp CgkJCS50ZChzZWxlY3RJbnB1dCgnaXRlbV9kZXN0aW5hdGlvbltdJyxib3RfYWxsX2l0ZW1z X3NlbGVjdGlucHV0KCksICRkYl92YWx1ZXNbJGldWydkZXN0aW5hdGlvbiddLCcxJykpCiAJ CQkudGQoJzxwPjxhIGhyZWY9IiMiIGNsYXNzPSJib3RfcHVzaCI+Jy5nVHh0KCJ0YWdfc2Vj dGlvbl9saXN0IikuJzwvYT48L3A+PGRpdiBjbGFzcz0iYm90X2NvbGxhcHNlIj4nLiRpdGVt X3NlY3Rpb25zX3Jvd3MuJzwvZGl2PicpCgkJCS50ZChmaW5wdXQoJ3RleHQnLCAnaXRlbV9j bGFzc1tdJywgJGRiX3ZhbHVlc1skaV1bJ2NsYXNzJ10pKQoJCQkudGQoY2hlY2tib3goJ2Jv dF9kZWxldGVfaWRbXScsICRkYl92YWx1ZXNbJGldWydpZCddLCAnMCcpLic8bGFiZWwgZm9y PSJib3RfZGVsZXRlX2lkIj4gJy5nVHh0KCdkZWxldGUnKS4nPC9sYWJlbD4nKSkKCQkJLmhJ bnB1dCgnYm90X3d0Y19pZFtdJywgJGRiX3ZhbHVlc1skaV1bJ2lkJ10pOwoKCQkJJHJvd3Mg Lj0gJHNpbmdsZV9yb3c7CgkJfQoJfTsKCXJldHVybiAkcm93czsKfQoKCgovLz09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi8vIGJ1aWxkcyByb3dzIGZv ciBzZWN0aW9ucyBsaXN0CgpmdW5jdGlvbiBib3Rfd3RjX3N0YXRpY19zZWN0aW9uc19zZWxl Y3QoKQp7CiAgLy8gZ2V0IHNlY3Rpb25zIGFycmF5Cgkkc2VjdGlvbnM9IGJvdF9nZXRfc2Vj dGlvbnMoKTsKCSRzdGF0aWNfc2VjdGlvbnMgPSBzYWZlX2ZpZWxkKCd2YWwnLCAndHhwX3By ZWZzJywgJ25hbWUgPSAiYm90X3d0Y19zdGF0aWNfc2VjdGlvbnMiJyk7IC8vICBmZXRjaCBw cmVmcyB2YWx1ZSBmb3IgYm90X3d0Y19zdGF0aWNfc2VjdGlvbnMKCSRzdGF0aWNfc2VjdGlv bnMgPSBleHBsb2RlKCd8JywgJHN0YXRpY19zZWN0aW9ucyk7IC8vIGNyZWF0ZXMgYW4gYXJy YXkgb2Ygc3RhdGljYSBzZWN0aW9ucyBmcm9tIHRoZSBzdHJpbmcgaW4gdHhwX3ByZWZzCiAg ICAkc3RhdGljX3NlY3Rpb25zX3Jvd3MgPSAnJzsKCWZvcmVhY2ggKCRzZWN0aW9ucyBhcyAk a2V5ID0+ICR2YWx1ZSkgewoJICAgIC8vIGlmIHNlY3Rpb24gaXMgaW4gZGIgbWFyayBhcyBj aGVja2VkCgkgICAgJGNoZWNrZWQgPSBpbl9hcnJheSgka2V5LCAkc3RhdGljX3NlY3Rpb25z KSA/ICcxJzogJzAnOwoJCSRzdGF0aWNfc2VjdGlvbnNfcm93ID0gJzxsYWJlbD4nLmNoZWNr Ym94KCdzdGF0aWNfc2VjdGlvbnNbXScsICRrZXksICRjaGVja2VkKS4kdmFsdWUuJzwvbGFi ZWw+PGJyIC8+JzsKCQkkc3RhdGljX3NlY3Rpb25zX3Jvd3MgLj0gJHN0YXRpY19zZWN0aW9u c19yb3c7CiAgICB9CiAgICByZXR1cm4gJHN0YXRpY19zZWN0aW9uc19yb3dzOwp9CgoKCi8v PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLy8gQWR2YW5j ZWQgbXVsdGlwbGUgc2VsZWN0aW9uIG9uIGJvdF93dGMgdGFiCgpmdW5jdGlvbiBib3RfYWR2 YW5jZWQoKQp7CiAgICBnbG9iYWwgJGJvdF9pdGVtczsKICAgICRpdGVtcyA9IGJvdF9hbGxf aXRlbXNfc2VsZWN0aW5wdXQoKTsgLy8gZ2V0IGl0ZW1zIGFycmF5CiAgICAkaXRlbV9yb3dz ID0gJyc7CiAgICBmb3JlYWNoICgkaXRlbXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkkaXRl bV9yb3cgPSAnPGxhYmVsPicuY2hlY2tib3goJ2JvdF9hZHZfaXRlbXNbXScsIGh0bWxzcGVj aWFsY2hhcnMoJGtleSksICcwJykuJHZhbHVlLic8L2xhYmVsPjxiciAvPic7CgkJJGl0ZW1f cm93cyAuPSAkaXRlbV9yb3c7CiAgICAkc2VjdGlvbnM9IGJvdF9nZXRfc2VjdGlvbnMoKTsg Ly8gZ2V0IHNlY3Rpb25zIGFycmF5CiAgICB9Cgkkc2VjdGlvbnNfcm93cyA9ICcnOwoJZm9y ZWFjaCAoJHNlY3Rpb25zIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJJHNlY3Rpb25zX3JvdyA9 ICc8bGFiZWw+Jy5jaGVja2JveCgnYm90X2Fkdl9zZWN0aW9uc1tdJywgJGtleSwgJzAnKS4k dmFsdWUuJzwvbGFiZWw+PGJyIC8+JzsKCQkkc2VjdGlvbnNfcm93cyAuPSAkc2VjdGlvbnNf cm93OwogICAgfQogICAgcmV0dXJuICc8c2VjdGlvbiByb2xlPSJyZWdpb24iIGNsYXNzPSJ0 eHAtZGV0YWlscyIgaWQ9ImJvdF9hZHZhbmNlZCIgYXJpYS1sYWJlbGxlZGJ5PSJib3RfYWR2 YW5jZWQtbGFiZWwiPicKICAgICAgICAubi4nPGgzIGlkPSJib3RfYWR2YW5jZWQtbGFiZWwi PkFkdmFuY2VkL011bHRpcGxlIHNlbGVjdGlvbjwvaDM+JwogICAgICAgIC5uLic8ZGl2IHJv bGU9Imdyb3VwIj4nCiAgICAgICAgLm4uZm9ybShuLmJvdF91cGRhdGVfYnV0dG9uKCkKICAg ICAgICAubi4nPGRpdiBpZD0iYm90X2Fkdl9pdGVtcyI+PGg0Pkl0ZW1zPC9oND4nLiRpdGVt X3Jvd3MuJzwvZGl2PicgLy8gaXRlbXMgbGlzdAogICAgICAgIC5uLic8ZGl2ICBpZD0iYm90 X2Fkdl9oaWRlIj48aDQ+SGlkZSBpbiBzZWN0aW9uczwvaDQ+Jy4kc2VjdGlvbnNfcm93cy4n PHA+PGEgaHJlZj0iIyIgY2xhc3M9ImJvdF9hbGwiPicuZ1R4dCgiYWxsIikuJzwvYT4gfCA8 YSBocmVmPSIjIiBjbGFzcz0iYm90X25vbmUiPicuZ1R4dCgibm9uZSIpLic8L2E+PC9wPjwv ZGl2PicgLy8gc2VjdGlvbnMgbGlzdAogICAgICAgIC5uLic8ZGl2ICBpZD0iYm90X2Fkdl9j bGFzcyI+PGg0PlNldCBjc3MgY2xhc3M8L2g0PicuZmlucHV0KCd0ZXh0JywnYm90X2Fkdl9j bGFzcycsICcnKS4nPC9kaXY+JyAvLyBjbGFzcwogICAgICAgIC5uLmJvdF91cGRhdGVfYnV0 dG9uKCkKICAgICAgICAubi4nPC9kaXY+JwogICAgICAgIC5uLic8L3NlY3Rpb24+JwogICAg KTsKfQoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoK CmZ1bmN0aW9uIGJvdF93dGNfdGFiKCRldmVudCwgJHN0ZXApCnsKCWdsb2JhbCAkYm90X2l0 ZW1zOwoJJGNmcyA9IGJvdF9nZXRfY2ZzKCk7CgoJcGFnZXRvcCgnV3JpdGUgdGFiIGN1c3Rv bWl6ZSAnLmdUeHQoJ3ByZWZlcmVuY2VzJyksICgkc3RlcCA9PSAndXBkYXRlJyA/IGdUeHQo J3ByZWZlcmVuY2VzX3NhdmVkJykgOiAnJykpOwoJZWNobyBoZWQoJ1dyaXRlIHRhYiBjdXN0 b21pemUnLCcyJyk7CgoJaWYgKCRzdGVwID09ICd1cGRhdGUnKXsKCSAgICAvLyBzZXQgZnVu Y3Rpb24gdmFyaWFibGVzCgkJJG5ld19pdGVtID0gcHMoJ25ld19pdGVtJyk7IC8vdmFyaWFi bGUKCQkkbmV3X2l0ZW1fcG9zaXRpb24gPSBwcygnbmV3X2l0ZW1fcG9zaXRpb24nKTsgLy92 YXJpYWJsZQoJCSRuZXdfaXRlbV9kZXN0aW5hdGlvbiA9IHBzKCduZXdfaXRlbV9kZXN0aW5h dGlvbicpOyAvL3ZhcmlhYmxlCgkJJG5ld19pdGVtX3NlY3Rpb25zID0gcHMoJ25ld19pdGVt X3NlY3Rpb25zJyk7IC8vYXJyYXkKCQkkbmV3X2l0ZW1fY2xhc3MgPSBwcygnbmV3X2l0ZW1f Y2xhc3MnKTsgLy92YXJpYWJsZQoJCSRib3Rfd3RjX3NjcmlwdCA9IHBzKCdib3Rfd3RjX3Nj cmlwdCcpOyAvL3ZhcmlhYmxlCgkJJHN0YXRpY19zZWN0aW9ucyA9IHBzKCdzdGF0aWNfc2Vj dGlvbnMnKTsgLy92YXJpYWJsZQoJCSRpdGVtID0gcHMoJ2l0ZW0nKTsgLy9hcnJheQoJCSRp dGVtX3Bvc2l0aW9uID0gcHMoJ2l0ZW1fcG9zaXRpb24nKTsgLy9hcnJheQoJCSRpdGVtX2Rl c3RpbmF0aW9uID0gcHMoJ2l0ZW1fZGVzdGluYXRpb24nKTsgLy9hcnJheQoJCSRpdGVtX2Ns YXNzID0gcHMoJ2l0ZW1fY2xhc3MnKTsgLy9hcnJheQoJCSRib3Rfd3RjX2lkID0gcHMoJ2Jv dF93dGNfaWQnKTsgLy9hcnJheQoJCSRkZWxldGVfaWQgPSBwcygnYm90X2RlbGV0ZV9pZCcp OyAvL2FycmF5CgkJJGJvdF9hZHZfaXRlbXMgPSBwcygnYm90X2Fkdl9pdGVtcycpOyAvL2Fy cmF5CgkJJGJvdF9hZHZfc2VjdGlvbnMgPSBwcygnYm90X2Fkdl9zZWN0aW9ucycpOyAvL2Fy cmF5CgkJJGJvdF9hZHZfY2xhc3MgPSBwcygnYm90X2Fkdl9jbGFzcycpOyAvL3ZhcmlhYmxl CgoJCS8vIGRiIHVwZGF0ZSBmb3IgZXhpc3RpbmcgaXRlbXMKCQlpZiAoJGl0ZW0peyAvLyBp ZiBhdCBsZWFzdCBhIHNhdmVkIGl0ZW0gZXhpc3RzCgogICAgICAgICAgIAkkZGJfdmFsdWVz ID0gYm90X3d0Y19mZXRjaF9kYigpOyAvLyBhcnJheSBvZiB2YWx1ZXMgZnJvbSB0aGUgZGIK CQkJZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJGl0ZW0pOyAkaSsrKXsKCQkJICAgIC8vIGJ1 aWxkcyB0aGUgcG9zdGVkIHZhcmlhYmxlIG5hbWUgZm9yIGN1cnJlbnQgaXRlbSBzZWN0aW9u cwoJCQkgICAgJGl0ZW1fcG9zdGVkX3NlY3Rpb25zX25hbWUgPSAnYm90X3d0Y19zZWN0aW9u c19mb3JfaWRfJy4kZGJfdmFsdWVzWyRpXVsnaWQnXTsKCQkJICAgICRpdGVtX3NlY3Rpb25z ID0gaXNzZXQoJF9QT1NUWyRpdGVtX3Bvc3RlZF9zZWN0aW9uc19uYW1lXSkgPyAkX1BPU1Rb JGl0ZW1fcG9zdGVkX3NlY3Rpb25zX25hbWVdIDogJyc7IC8vYXJyYXkKICAgICAgICAgICAg ICAgIC8vIGJ1aWxkcyBzZWN0aW9ucyBzdHJpbmcgZm9yIGN1cnJlbnQgaXRlbQoJCQkJJGl0 ZW1fc2VjdGlvbnNfc3RyaW5nID0gJGl0ZW1fc2VjdGlvbnMgPyBpbXBsb2RlKCd8JywgJGl0 ZW1fc2VjdGlvbnMpOiAnJzsKCQkJCS8vIGFsbG93ZWQgaW5wdXQgZGF0YSBjb21iaW5hdGlv bnMKCQkJCWlmICgoJGl0ZW1bJGldICYmICRpdGVtX2Rlc3RpbmF0aW9uWyRpXSAmJiAkaXRl bV9wb3NpdGlvblskaV0pCgkJCQl8fCAoJGl0ZW1bJGldICYmICRpdGVtX2NsYXNzWyRpXSAm JiAhJGl0ZW1fZGVzdGluYXRpb25bJGldICYmICEkaXRlbV9wb3NpdGlvblskaV0pCgkJCQl8 fCAoJGl0ZW1bJGldICYmICRpdGVtX3NlY3Rpb25zX3N0cmluZyAmJiAhJGl0ZW1fZGVzdGlu YXRpb25bJGldICYmICEkaXRlbV9wb3NpdGlvblskaV0pKSB7CgkJCQkJLy8gY2hlY2sgaWYg YSBjb2x1bW4vcmVnaW9uIGlzIGxpbmtlZCB3aXRoIGEgbm9uLWNvbHVtbiBpdGVtIEJVVCBP TkxZIElGIGJvdGggaXRlbXMgYXJlIHNldCAob3RoZXJ3aXNlIGNvdWxkbid0IGFwcGx5IGku ZS4gY2xhc3MgdG8gYSBzaW5nbGUgcmVnaW9uKQoJCQkJCWlmICghKChib3Rfd3RjX2lzX3Jl Z2lvbigkaXRlbVskaV0pIFhPUiBib3Rfd3RjX2lzX3JlZ2lvbigkaXRlbV9kZXN0aW5hdGlv blskaV0pKSAmJiAkaXRlbV9kZXN0aW5hdGlvblskaV0pKXsKICAJCQkJCSAgICAvLyBjaGVj ayBpZiBpdGVtIGlzIGRpZmZlcmVudCBmcm9tIGRlc3RpbmF0aW9uCgkJCQkJCWlmKCRpdGVt WyRpXSAhPSAkaXRlbV9kZXN0aW5hdGlvblskaV0pewogICAgICAgCQkJCQkJc2FmZV91cGRh dGUoImJvdF93dGMiLAoJCQkJCQkJInBvc2l0aW9uID0gJyIKCQkJCQkJCS5kb3NsYXNoKCRp dGVtX3Bvc2l0aW9uWyRpXSkKCQkJCQkJCS4iJywgZGVzdGluYXRpb24gPSAnIgoJCQkJCQkJ LmRvc2xhc2goJGl0ZW1fZGVzdGluYXRpb25bJGldKQoJCQkJCQkJLiInLCBpdGVtID0gJyIK CQkJCQkJCS5kb3NsYXNoKCRpdGVtWyRpXSkKCQkJCQkJCS4iJywgc2VjdGlvbnMgPSAnIgoJ CQkJCQkJLmRvc2xhc2goJGl0ZW1fc2VjdGlvbnNfc3RyaW5nKQoJCQkJCQkJLiInLCBjbGFz cyA9ICciCgkJCQkJCQkuZG9zbGFzaCgkaXRlbV9jbGFzc1skaV0pCgkJCQkJCQkuIiciLCAi aWQgPSAnIi4kYm90X3d0Y19pZFskaV0uIiciKTsKCQkJCQkJfQoJCQkJCQllbHNlIHsKCQkJ CQkJCWVjaG8gYm90X3dhcm5pbmcoJ3NhbWVfaXRlbV93YXJuaW5nJyk7CgkJCQkJCX0KCQkJ CQl9CgkJCQkJZWxzZSB7CgkJCQkJCWVjaG8gYm90X3dhcm5pbmcoJ3JlZ2lvbl93YXJuaW5n Jyk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJZWNobyBib3Rfd2FybmluZygnY29t Ym9fd2FybmluZycpOwoJCQkJfQoJCQl9CgkJfQoKCQkvLyBkYiBpbnNlcnQgZm9yIG5ldyBp dGVtCgkJLy8gYWxsb3dlZCBpbnB1dCBjb21iaW5hdGlvbnMKCQlpZiAoKCRuZXdfaXRlbSAm JiAkbmV3X2l0ZW1fZGVzdGluYXRpb24gJiYgJG5ld19pdGVtX3Bvc2l0aW9uKQoJCXx8ICgk bmV3X2l0ZW0gJiYgJG5ld19pdGVtX2NsYXNzICYmICEkbmV3X2l0ZW1fZGVzdGluYXRpb24g JiYgISRuZXdfaXRlbV9wb3NpdGlvbikKCQl8fCAoJG5ld19pdGVtICYmICRuZXdfaXRlbV9z ZWN0aW9ucyAmJiAhJG5ld19pdGVtX2Rlc3RpbmF0aW9uICYmICEkbmV3X2l0ZW1fcG9zaXRp b24pKXsKCQkJLy8gY2hlY2sgaWYgYSBjb2x1bW4gaXMgbGlua2VkIHdpdGggYSBub24tY29s dW1uIGl0ZW0KCQkJaWYgKCEoKGJvdF93dGNfaXNfcmVnaW9uKCRuZXdfaXRlbSkgWE9SIGJv dF93dGNfaXNfcmVnaW9uKCRuZXdfaXRlbV9kZXN0aW5hdGlvbikpICYmICAkbmV3X2l0ZW1f ZGVzdGluYXRpb24pKXsKCQkJCS8vIGNoZWNrIGl0ZW1zIGFyZSBub3QgdGhlIHNhbWUKCQkJ CWlmKCRuZXdfaXRlbSAhPSAkbmV3X2l0ZW1fZGVzdGluYXRpb24pewogICAgICAgICAgICAg ICAgICAgIC8vIHRyYW5zZm9ybXMgdGhlIHNlY3Rpb25zIGFycmF5IGluIGEgc3RyaW5nCiAg ICAgICAgICAgICAgICAgICAgJG5ld19pdGVtX3NlY3Rpb25zX3N0cmluZyA9ICRuZXdfaXRl bV9zZWN0aW9ucyA/IGltcGxvZGUoJ3wnLCAkbmV3X2l0ZW1fc2VjdGlvbnMpIDogJyc7CgkJ CQkJc2FmZV9pbnNlcnQoImJvdF93dGMiLAoJCQkJCSJwb3NpdGlvbiA9ICciCgkJCQkJLmRv c2xhc2goJG5ld19pdGVtX3Bvc2l0aW9uKQoJCQkJCS4iJywgZGVzdGluYXRpb24gPSAnIgoJ CQkJCS5kb3NsYXNoKCRuZXdfaXRlbV9kZXN0aW5hdGlvbikKCQkJCQkuIicsIGNsYXNzID0g JyIKCQkJCQkuZG9zbGFzaCgkbmV3X2l0ZW1fY2xhc3MpCgkJCQkJLiInLCBzZWN0aW9ucyA9 ICciCgkJCQkJLmRvc2xhc2goJG5ld19pdGVtX3NlY3Rpb25zX3N0cmluZykKCQkJCQkuIics IGl0ZW0gPSAnIgoJCQkJCS5kb3NsYXNoKCRuZXdfaXRlbSkKCQkJCQkuIiciKTsKCQkJCX0K CQkJCWVsc2UgewoJCQkJCWVjaG8gYm90X3dhcm5pbmcoJ3NhbWVfaXRlbV93YXJuaW5nJyk7 CgkJCQl9CgkJCX0KCQkJZWxzZSB7CgkJCQllY2hvIGJvdF93YXJuaW5nKCd0ZF93YXJuaW5n Jyk7CgkJCX0KCQl9CgoJCWVsc2VpZiAoJG5ld19pdGVtIHx8ICRuZXdfaXRlbV9kZXN0aW5h dGlvbiB8fCAkbmV3X2l0ZW1fcG9zaXRpb24gfHwgJG5ld19pdGVtX2NsYXNzIHx8ICRuZXdf aXRlbV9zZWN0aW9ucyl7CgkJCWVjaG8gYm90X3dhcm5pbmcoJ2NvbWJvX3dhcm5pbmcnKTsK CQl9CgoJCWlmICgkZGVsZXRlX2lkKXsgLy8gY2hlY2tzIGlmIHRoZXJlIGlzIHNvbWV0aGlu ZyB0byBkZWxldGUKCQkJZm9yZWFjaCAoJGRlbGV0ZV9pZCBhcyAkaWQpIHsKCQkJCXNhZmVf ZGVsZXRlKCdib3Rfd3RjJywgJ2lkID0iJy4kaWQuJyInICk7CgkJCX0KCQl9CgoKCQkvLyB1 cGRhdGUgYWR2YW5jZWQgcHJlZmVyZW5jZXMKICAgICAgICBpZiAoJGJvdF9hZHZfaXRlbXMg QU5EICgkYm90X2Fkdl9zZWN0aW9ucyB8fCAkYm90X2Fkdl9jbGFzcykpIHsgLy8gY2hlY2sg aWYgaXRlbSBBTkQgc2VjdGlvbiBPUiBjbGFzcyBpcyBzZWxlY3RlZAoKICAgICAgICAgICAg JGRiX3ZhbHVlcyA9IGJvdF93dGNfZmV0Y2hfZGIoKTsgLy8gZmlyc3QgYXJyYXk6IGFsbCB2 YWx1ZXMgZnJvbSBkYgoKICAgICAgICAgICAgaWYgKCRib3RfYWR2X3NlY3Rpb25zKSB7CiAg ICAgICAgICAgIAkkYm90X2RiX3NlY3Rpb25zID0gYXJyYXkoKTsgLy8gbW9yZSBzcGVjaWZp YyBhcnJheTogb25seSBpdGVtID0+IHNlY3Rpb25zCiAgICAgICAgICAgICAgICBmb3IgKCRp ID0wOyAkaSA8IGNvdW50KCRkYl92YWx1ZXMpOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAJ JGJvdF9kYl9zZWN0aW9uc1skZGJfdmFsdWVzWyRpXVsnaXRlbSddXSA9ICRkYl92YWx1ZXNb JGldWydzZWN0aW9ucyddOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZv cmVhY2ggKCRib3RfYWR2X2l0ZW1zIGFzICRpdGVtKSB7IC8vIGl0ZXJhdGVzIHBvc3RlZCBp dGVtcwogICAgICAgICAgICAgICAgICAgIC8vIGZldGNoIC1pZiBhbnktIGV4aXN0aW5nIHNl Y3Rpb25zIGZyb20gZGIgZm9yIGN1cnJlbnQgaXRlbSBhbmQgbWVyZ2VzIGFycmF5cyBlbGlt aW5hdGluZyBkdXBsaWNhdGVzCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRi b3RfZGJfc2VjdGlvbnMpIEFORCBhcnJheV9rZXlfZXhpc3RzKCRpdGVtLCAkYm90X2RiX3Nl Y3Rpb25zKSkgewogICAgICAgICAgICAgICAgICAgICAgIAkkZGJfc2VjdF9hcnJheSA9IGV4 cGxvZGUoJ3wnLCAkYm90X2RiX3NlY3Rpb25zWyRpdGVtXSk7CiAgICAgICAgICAgICAgICAg ICAgICAgICRmaW5hbF9hcnJheSA9IGFycmF5X3VuaXF1ZShhcnJheV9tZXJnZSgkZGJfc2Vj dF9hcnJheSwgJGJvdF9hZHZfc2VjdGlvbnMpKTsKICAgICAgICAgICAgICAgICAgICAgICAg JGJvdF9hZHZfc2VjdGlvbnNfc3RyaW5nID0gaW1wbG9kZSgnfCcsICRmaW5hbF9hcnJheSk7 IC8vIG5ldyBzZWN0aW9ucyBzdHJpbmcKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgCSRib3RfYWR2X3NlY3Rp b25zX3N0cmluZyA9IGltcGxvZGUoJ3wnLCAkYm90X2Fkdl9zZWN0aW9ucyk7CiAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHNhZmVfdXBzZXJ0KAogICAgICAg ICAgICAgICAgICAgICAgICAiYm90X3d0YyIsCiAgICAJCQkJCSJzZWN0aW9ucyA9ICciCiAg ICAJCQkJCS5kb3NsYXNoKCRib3RfYWR2X3NlY3Rpb25zX3N0cmluZykKICAgIAkJCQkJLiIn IiwKICAgICAgICAgICAgICAgICAgICAgICAgIml0ZW0gPSAnIi5kb3NsYXNoKCRpdGVtKS4i JyIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAJfQogICAgICAgICAgICB9 CgogICAgICAgICAgICBpZiAoJGJvdF9hZHZfY2xhc3MpIHsKICAgICAgICAgICAgICAgICRi b3RfZGJfY2xhc3NlcyA9IGFycmF5KCk7IC8vIG1vcmUgc3BlY2lmaWMgYXJyYXk6IG9ubHkg aXRlbSA9PiBjbGFzc2VzCiAgICAgICAgICAgICAgICBmb3IgKCRpID0wOyAkaSA8IGNvdW50 KCRkYl92YWx1ZXMpOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAJJGJvdF9kYl9jbGFzc2Vz WyRkYl92YWx1ZXNbJGldWydpdGVtJ11dID0gJGRiX3ZhbHVlc1skaV1bJ2NsYXNzJ107CiAg ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGJvdF9hZHZfaXRl bXMgYXMgJGl0ZW0pIHsgLy8gaXRlcmF0ZXMgcG9zdGVkIGl0ZW1zCiAgICAgICAgICAgICAg ICAgICAgLy8gZmV0Y2ggLWlmIGFueS0gZXhpc3RpbmcgY2xhc3MgZnJvbSBkYiBmb3IgY3Vy cmVudCBpdGVtIGFuZCBtZXJnZXMgYXJyYXlzIGVsaW1pbmF0aW5nIGR1cGxpY2F0ZXMKICAg ICAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJGJvdF9kYl9jbGFzc2VzKSBBTkQgYXJy YXlfa2V5X2V4aXN0cygkaXRlbSwgJGJvdF9kYl9jbGFzc2VzKSkgewogICAgICAgICAgICAg ICAgICAgICAgIAkkZGJfY2xhc3NfYXJyYXkgPSBleHBsb2RlKCcgJywgJGJvdF9kYl9jbGFz c2VzWyRpdGVtXSk7CiAgICAgICAgICAgICAgICAgICAgICAgCSRwb3N0ZWRfY2xhc3NfYXJy YXkgPSBleHBsb2RlKCcgJywgJGJvdF9hZHZfY2xhc3MpOwogICAgICAgICAgICAgICAgICAg ICAgICAkZmluYWxfYXJyYXkgPSBhcnJheV91bmlxdWUoYXJyYXlfbWVyZ2UoJGRiX2NsYXNz X2FycmF5LCAkcG9zdGVkX2NsYXNzX2FycmF5KSk7CiAgICAgICAgICAgICAgICAgICAgICAg ICRib3RfYWR2X2NsYXNzZXNfc3RyaW5nID0gaW1wbG9kZSgnICcsICRmaW5hbF9hcnJheSk7 IC8vIG5ldyBzZWN0aW9ucyBzdHJpbmcKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgCSRib3RfYWR2X2NsYXNz ZXNfc3RyaW5nID0gJGJvdF9hZHZfY2xhc3M7CiAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgIHNhZmVfdXBzZXJ0KAogICAgICAgICAgICAgICAgICAgICAgICAi Ym90X3d0YyIsCiAgICAJCQkJCSJjbGFzcyA9ICciCiAgICAJCQkJCS5kb3NsYXNoKCRib3Rf YWR2X2NsYXNzZXNfc3RyaW5nKQogICAgCQkJCQkuIiciLAogICAgICAgICAgICAgICAgICAg ICAgICAiaXRlbSA9ICciLmRvc2xhc2goJGl0ZW0pLiInIgogICAgICAgICAgICAgICAgICAg ICk7CiAgICAgICAgICAgIAl9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxz ZWlmICgkYm90X2Fkdl9zZWN0aW9ucyB8fCAkYm90X2Fkdl9jbGFzcykgewogICAgICAgIAll Y2hvIGJvdF93YXJuaW5nKCdub19pdGVtc193YXJuaW5nJyk7CiAgICAgICAgfQoKCQkvLyB1 cGRhdGVzIHN0YXRpYyBzZWN0aW9ucyBwcmVmcwogICAgaWYgKCRzdGF0aWNfc2VjdGlvbnMp IHsKICAgIAkkc3RhdGljX3NlY3Rpb25zX3N0cmluZyA9IGltcGxvZGUoJ3wnLCAkc3RhdGlj X3NlY3Rpb25zKTsKCSAgICBzYWZlX3VwZGF0ZSgndHhwX3ByZWZzJywgJ3ZhbD0gIicuZG9z bGFzaCgkc3RhdGljX3NlY3Rpb25zX3N0cmluZykuJyIsIGh0bWw9InRleHRfaW5wdXQiICcs ICduYW1lID0gImJvdF93dGNfc3RhdGljX3NlY3Rpb25zIicgKTsKICAgIH0KCiAgICAvLyB1 cGRhdGVzIHNjcmlwdCBwcmVmcwoJCWlmICgkYm90X3d0Y19zY3JpcHQpIHsKCSAgCXNhZmVf dXBkYXRlKCd0eHBfcHJlZnMnLCAndmFsPSBcJycuZG9zbGFzaCgkYm90X3d0Y19zY3JpcHQp LidcJywgaHRtbD1cJ3RleHRhcmVhXCcgJywgJ25hbWUgPSBcJ2JvdF93dGNfc2NyaXB0XCcn ICk7CgkJfQoJfQoKCWlmIChib3Rfd3RjX2NoZWNrX2luc3RhbGwoKSkgeyAvLyB3aGF0IHRv IHNob3cgd2hlbiBhY2Nlc3NpbmcgdGFiCgoJCSRib3Rfd3RjX3NjcmlwdCA9IHNhZmVfZmll bGQoJ3ZhbCcsICd0eHBfcHJlZnMnLCAnbmFtZSA9ICJib3Rfd3RjX3NjcmlwdCInKTsgLy8g ZmV0Y2ggcHJlZnMgdmFsdWUgZm9yIGJvdF93dGNfc2NyaXB0CgkJZWNobyBuLnQuJzxkaXYg Y2xhc3M9InR4cC1sYXlvdXQtdGV4dGJveCI+JzsgLy8gbWFpbiBkaXYKCQllY2hvICc8cCBp ZD0iYm90X2NvbnRyb2xzIiBjbGFzcz0ibmF2LXRlcnRpYXJ5Ij4KICAgICAgICAgICAgPGEg aWQ9ImJvdF9leHBhbmRfYWxsIiBjbGFzcz0ibmF2bGluayIgaHJlZj0iIyI+RXhwYW5kIGFs bDwvYT4KICAgICAgICAgICAgPGEgaWQ9ImJvdF9jb2xsYXBzZV9hbGwiIGNsYXNzPSJuYXZs aW5rIiBocmVmPSIjIj5Db2xsYXBzZSBhbGw8L2E+CiAgICAgICAgICAgIDxhIGlkPSJib3Rf YWR2YW5jZWRfb3BlbiIgY2xhc3M9Im5hdmxpbmsiIGhyZWY9IiMiPlRvZ2dsZSBhZHZhbmNl ZDwvYT4KICAgICAgICAgICAgPC9wPic7CgkJZWNobyBuLnQuYm90X2FkdmFuY2VkKCk7CgkJ ZWNobyBuLnQuJzxkaXYgaWQ9ImJvdF9tYWluIj4nOyAvLyBtYWluIGRpdgoKCQllY2hvIGZv cm0oIC8vIGJlZ2lubmluZyBvZiB0aGUgZm9ybQogCQkJJzx0YWJsZSBpZD0iYm90X3d0Y190 YWJsZSIgY2xhc3M9InR4cC1saXN0Ij4nIC8vIGJlZ2lubmluZyBvZiB0aGUgdGFibGUKCQkJ Lic8dGhlYWQ+JwogICAgICAgICAgICAudHIoaGNlbGwoc3Ryb25nKGdUeHQoJ0l0ZW0nKSkp CgkJCS5oY2VsbChzdHJvbmcoZ1R4dCgnUG9zaXRpb24nKSkpCgkJCS5oY2VsbChzdHJvbmco Z1R4dCgnRGVzdGluYXRpb24nKSkpCgkJCS5oY2VsbChzdHJvbmcoZ1R4dCgnSGlkZSBpbjon KSkpCgkJCS5oY2VsbChzdHJvbmcoZ1R4dCgnQ2xhc3MnKSkpCgkJCS5oY2VsbCgpIC8vIGNv bGxhcHNlIGFsbC9zaG93IGFsbCkKCQkJKS4nPC90aGVhZD4nCgkJCS5ib3Rfd3RjX291dHB1 dF9yb3dzKCkgLy8gaHRtbCByb3dzIGdlbmVyYXRlZCBieSAiYm90X3d0Y19vdXRwdXRfcm93 cygpIgoJCQkuJzwvdGFibGU+JyAvLyBlbmQgb2YgdGhlIHRhYmxlCgogICAgICAgICAgICAu Ym90X3VwZGF0ZV9idXR0b24oKQoKCQkJLm4uJzxzZWN0aW9uIHJvbGU9InJlZ2lvbiIgY2xh c3M9InR4cC1kZXRhaWxzIiBpZD0iYm90X3N0YXRpY19zZWN0aW9ucyIgYXJpYS1sYWJlbGxl ZGJ5PSJib3Rfc3RhdGljX3NlY3Rpb25zLWxhYmVsIj4nICAvLyBzdGF0aWMgc2VjdGlvbnMK CQkJLm4uJzxoMyBpZD0iYm90X3N0YXRpY19zZWN0aW9ucy1sYWJlbCIgY2xhc3M9InR4cC1z dW1tYXJ5IGV4cGFuZGVkIj4nCgkJCS5uLic8YSBjbGFzcz0iYm90X3B1c2ggdG9nZ2xlIiBy b2xlPSJidXR0b24iIGhyZWY9IiNib3Rfc3RhdGljX3NlY3Rpb25zLWRldGFpbHMiIGFyaWEt ZXhwYW5kZWQ9InRydWUiPkhpZGUgc2VjdGlvbnMgaW4gc2VjdGlvbnMgZHJvcGRvd248L2E+ JwoJCQkubi4nPC9oMz4nCgkJCS5uLic8ZGl2IGlkPSJib3Rfc3RhdGljX3NlY3Rpb25zLWRl dGFpbHMiIGNsYXNzPSJib3RfY29sbGFwc2UiPicKCQkJLmJvdF93dGNfc3RhdGljX3NlY3Rp b25zX3NlbGVjdCgpCgkJCS5ib3RfdXBkYXRlX2J1dHRvbigpCgkJCS5uLic8L2Rpdj4nCgkJ CS5uLic8L3NlY3Rpb24+JwoKCQkJLm4uJzxzZWN0aW9uIHJvbGU9InJlZ2lvbiIgY2xhc3M9 InR4cC1kZXRhaWxzIiBpZD0iYm90X2pzX2JveCIgYXJpYS1sYWJlbGxlZGJ5PSJib3RfanNf Ym94LWxhYmVsIj4nICAvLyBqcyBjb2RlIGJveAoJCQkubi4nPGgzIGlkPSJib3RfanNfYm94 LWxhYmVsIiBjbGFzcz0idHhwLXN1bW1hcnkgZXhwYW5kZWQiPicKCQkJLm4uJzxhIGNsYXNz PSJib3RfcHVzaCB0b2dnbGUiIGhyZWY9IiMiIHJvbGU9ImJ1dHRvbiIgaHJlZj0iI2JvdF9q c19ib3gtZGV0YWlscyIgYXJpYS1leHBhbmRlZD0idHJ1ZSI+QWRkaXRpb25hbCBqcyBjb2Rl PC9hPicKCQkJLm4uJzwvaDM+JwoJCQkubi4nPGRpdiBpZD0iYm90X2pzX2JveC1kZXRhaWxz IiBjbGFzcz0iYm90X2NvbGxhcHNlIj4nCgkJCS5uLic8YSBpZD0iYm90X2pzX2xpbmsiIGhy ZWY9IiMiPkFkZCBleHRlcm5hbCBzY3JpcHQ8L2E+IHwgPGEgaWQ9ImJvdF9qcV9saW5rIiBo cmVmPSIjIj5BZGQgSnF1ZXJ5IHNjcmlwdDwvYT4nCgkJCS5uLic8dGV4dGFyZWEgaWQ9ImJv dF93dGNfc2NyaXB0IiBuYW1lPSJib3Rfd3RjX3NjcmlwdCIgY29scz0iNjAiIHJvd3M9IjEw Ij4nLiRib3Rfd3RjX3NjcmlwdC4nPC90ZXh0YXJlYT4nIC8vIHNjcmlwdCB0ZXh0YXJlYQoJ CQkubi5ib3RfdXBkYXRlX2J1dHRvbigpCgkJCS5uLic8L2Rpdj4nCgkJCS5uLic8L3NlY3Rp b24+JwoKCQkpOwoKCX0KCgkvLyBzbmlwcGV0cyB0byBpbnNlcnQgaW4gdGhlIHNjcmlwdCBi b3gKCSRib3RfanF1ZXJ5X3NuaXBwZXQgPSAnPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2Ny aXB0XCI+XG4gICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7XG4gICAgICAgIC8v eW91ciBjb2RlIGhlcmVcbiAgICB9KTtcbjxcL3NjcmlwdD5cbic7CgkkYm90X2pzX3NuaXBw ZXQgPSAnPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwicGF0aF90b19z Y3JpcHRcIj48XC9zY3JpcHQ+XG4nOwoKICAvLyBhZGQgc29tZSBqcXVlcnkgYWN0aW9uCgll Y2hvCgknPHNjcmlwdCAgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nLm4uCgknCSQoZG9jdW1l bnQpLnJlYWR5KGZ1bmN0aW9uKCkgeycubi4KCQkJJyQoImRpdi5ib3RfY29sbGFwc2UiKS5o aWRlKCknLm4uCgkJCSckKCJzZWN0aW9uI2JvdF9hZHZhbmNlZCIpLmhpZGUoKScubi4KCQkJ JyQoImEuYm90X3B1c2giKS5jbGljayhmdW5jdGlvbigpeycubi4KCQkJJyAgJCh0aGlzKS50 b2dnbGVDbGFzcygiYm90X2Fycm93IikucGFyZW50KCkubmV4dCgpLnNsaWRlVG9nZ2xlKCk7 Jy5uLgoJCQknICByZXR1cm4gZmFsc2U7Jy5uLgoJCQknfSk7Jy5uLgoJCQknJCgiI2JvdF9j b2xsYXBzZV9hbGwiKS5jbGljayhmdW5jdGlvbigpeycubi4KCQkJJyAgJCgiZGl2LmJvdF9j b2xsYXBzZSIpLnNsaWRlVXAoKTsnLm4uCgkJCScgIHJldHVybiBmYWxzZTsnLm4uCiAgCQkJ ICd9KTsnLm4uCgkJCSckKCIjYm90X2V4cGFuZF9hbGwiKS5jbGljayhmdW5jdGlvbigpeycu bi4KCQkJJyAgJCgiZGl2LmJvdF9jb2xsYXBzZSIpLnNsaWRlRG93bigpOycubi4KCQkJJyAg cmV0dXJuIGZhbHNlOycubi4KICAJCQkgJ30pOycubi4KCQkJJyQoIiNib3RfYWR2YW5jZWRf b3BlbiIpLmNsaWNrKGZ1bmN0aW9uKCl7Jy5uLgoJCQknICAkKCJzZWN0aW9uI2JvdF9hZHZh bmNlZCIpLnNsaWRlVG9nZ2xlKCk7Jy5uLgoJCQknICAkKCJkaXYjYm90X21haW4iKS50b2dn bGUoKTsnLm4uCgkJCScgIHJldHVybiBmYWxzZTsnLm4uCiAgCQkJICd9KTsnLm4uCgkJCSck KCJhLmJvdF9hbGwiKS5jbGljayhmdW5jdGlvbigpeycubi4KCQkJJyAgJCh0aGlzKS5wYXJl bnQoKS5wYXJlbnQoKS5maW5kKCJpbnB1dCIpLmF0dHIoImNoZWNrZWQiLCB0cnVlKTsnLm4u CgkJCScgIHJldHVybiBmYWxzZTsnLm4uCgkJCSd9KTsnLm4uCgkJCSckKCJhLmJvdF9ub25l IikuY2xpY2soZnVuY3Rpb24oKXsnLm4uCgkJCScgICQodGhpcykucGFyZW50KCkucGFyZW50 KCkuZmluZCgiaW5wdXQiKS5hdHRyKCJjaGVja2VkIiwgZmFsc2UpOycubi4KCQkJJyAgcmV0 dXJuIGZhbHNlOycubi4KCQkJJ30pOycubi4KCQkJJyQoIiNib3RfanFfbGluayIpLmNsaWNr KGZ1bmN0aW9uKCl7Jy5uLgoJCQknICB2YXIgYXJlYVZhbHVlID0gJCgiI2JvdF93dGNfc2Ny aXB0IikudmFsKCk7Jy5uLgoJCQknICAkKCIjYm90X3d0Y19zY3JpcHQiKS52YWwoYXJlYVZh bHVlICsgIicuJGJvdF9qcXVlcnlfc25pcHBldC4nIik7Jy5uLgoJCQknICByZXR1cm4oZmFs c2UpOycubi4KICAJCQknfSk7Jy5uLgoJCQknJCgiI2JvdF9qc19saW5rIikuY2xpY2soZnVu Y3Rpb24oKXsnLm4uCgkJCScgIHZhciBhcmVhVmFsdWUgPSAkKCIjYm90X3d0Y19zY3JpcHQi KS52YWwoKTsnLm4uCgkJCScgICQoIiNib3Rfd3RjX3NjcmlwdCIpLnZhbChhcmVhVmFsdWUg KyAiJy4kYm90X2pzX3NuaXBwZXQuJyIpOycubi4KCQkJJyAgcmV0dXJuKGZhbHNlKTsnLm4u CiAgCQkJJ30pOycubi4KCScJfSk7Jy5uLgoJJzwvc2NyaXB0Pic7Cn0KCgoKLy8gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ly8gcGx1Z2lucyBvdXRwdXQKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi8vIGNzcyBmb3IgdGhlIHBsdWdpbiB0YWIg dW5kZXIgZXh0ZW5zaW9ucwoKZnVuY3Rpb24gYm90X3d0Y19jc3MoKSB7CgoJZ2xvYmFsICRl dmVudDsKCS8vIE91dHB1dCBjc3Mgb25seSBpbiAnYm90X3d0YycgZXh0ZW5zaW9ucyB0YWIu CglpZigkZXZlbnQgIT0gJ2JvdF93dGNfdGFiJykgewoJCXJldHVybjsKCX0KCgllY2hvICc8 c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJCQkjYm90X21haW4gewoJCQkJbWFyZ2luOiBhdXRv OyB3aWR0aDo4MDBweDsKCQkJfQoJCQkjcGFnZS1ib3Rfd3RjX3RhYiBoMiB7CgkJCQl0ZXh0 LWFsaWduOiBjZW50ZXI7CW1hcmdpbjoyMHB4IGF1dG87IHBhZGRpbmctYm90dG9tOjEwcHg7 CgkJCX0KCQkJI2JvdF9jb250cm9scyB7CgkJCQltYXJnaW46IDIwcHggYXV0bzsKCQkJfQoJ CQkjYm90X2NvbnRyb2xzIGF7bWFyZ2luLXJpZ2h0Oi01cHh9CgkJCSNib3RfZXhwYW5kX2Fs bCwKCQkJI2JvdF9jb2xsYXBzZV9hbGwsCgkJCSNib3RfYWR2YW5jZWRfb3BlbiB7CgkJCQlm b250LXNpemU6MTBweDsKCQkJfQoJCQkjYm90X3d0Y190YWJsZSB7CgkJCSAJcGFkZGluZzox MHB4IDAgMjBweDsgbWFyZ2luLWxlZnQ6MDsKCQkJfQoJCQkjYm90X3d0Y190YWJsZSB0ZCB7 CgkJCQl2ZXJ0aWNhbC1hbGlnbjpjZW50ZXI7CgkJCQlwYWRkaW5nOjVweDsKCQkJCXdoaXRl LXNwYWNlOm5vd3JhcDsKCQkJfQoJCQkjYm90X3d0Y190YWJsZSB0ZCBwe21hcmdpbjozcHgg MCAwIDB9CgkJCSNib3RfYWR2YW5jZWQge30KCQkJI2JvdF9hZHZfaXRlbXMsCgkJCSNib3Rf YWR2X2hpZGUsCgkJCSNib3RfYWR2X2NsYXNzCgkJCXsKCQkJCXdpZHRoOjI2MHB4OyBmbG9h dDpsZWZ0OyBtYXJnaW4tYm90dG9tOjIwcHg7CgkJCX0KCQkJI2JvdF91bmluc3RhbGwtZGV0 YWlscywKCQkJI2JvdF9zdGF0aWNfc2VjdGlvbnMtZGV0YWlscywKCQkJI2JvdF9qc19ib3gt ZGV0YWlscyB7CgkJCQlwYWRkaW5nOjAgMjBweDsKCQkJfQoJCSAgICAjYm90X3VuaW5zdGFs bC1kZXRhaWxze3BhZGRpbmctYm90dG9tOjIwcHg7fQoKCQkJI2JvdF93dGNfc2NyaXB0IHsK CQkJCXdpZHRoOjEwMCU7IGJvcmRlcjpkb3R0ZWQgI2NjYyAxcHg7CgkJCX0KCQkJLmJvdF91 cGRhdGVfYnV0dG9uIHsKCQkJCW1hcmdpbjoyMHB4IDA7IGNsZWFyOmJvdGg7CgkJCX0KCQkJ I2JvdF91bmluc3RhbGwgewoJCQl9CgkJCSNib3RfaW5zdGFsbCB7CgkJCQltYXJnaW46IGF1 dG87IHdpZHRoOjgwMHB4OwoJCQl9CgkJCS5ib3RfaGlsaWdodCB7CgkJCQliYWNrZ3JvdW5k OiNlYWVhZWEKCQkJfQoJCQlhLmJvdF9wdXNoIHsKCQkJCWZvbnQtd2VpZ2h0OmJvbGQ7IGJh Y2tncm91bmQ6IHVybCh0eHBfaW1nL2Fycm93dXBkbi5naWYpIG5vLXJlcGVhdCByaWdodCBi b3R0b207IHBhZGRpbmctcmlnaHQ6MTNweDsKCQkJfQoJCQkjYm90X3dhcm5pbmcgewoJCQkJ dGV4dC1hbGlnbjpjZW50ZXI7IGJhY2tncm91bmQ6Izk5MDAwMDsgY29sb3I6I2ZmZjsgbWFy Z2luOiAyMHB4IGF1dG87IHBhZGRpbmc6MTBweDsgdGV4dC1zaGFkb3c6bm9uZTsKCQkJfQoJ CTwvc3R5bGU+JzsKfQoKCgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQoKLy8gYnVpbGRzIGFycmF5IG9mIHNlY3Rpb25z IHRvIGhpZGUKCmZ1bmN0aW9uIGJvdF9oaWRlX3Blcl9zZWN0aW9uX2FycmF5KCkKewoKCSRk Yl92YWx1ZXMgPSBib3Rfd3RjX2ZldGNoX2RiKCk7ICAvLyBhcnJheSBvZiB2YWx1ZXMgZnJv bSB0aGUgZGIKCglmb3IgKCRpID0wOyAkaTxjb3VudCgkZGJfdmFsdWVzKTsgJGkrKykgewoJ CWlmICgkZGJfdmFsdWVzWyRpXVsnc2VjdGlvbnMnXSkgewoJCSAgICAkc2VjdGlvbnNfdG9f aGlkZSA9IGV4cGxvZGUoJ3wnLCAkZGJfdmFsdWVzWyRpXVsnc2VjdGlvbnMnXSk7CgkJICAg IGZvcmVhY2ggKCRzZWN0aW9uc190b19oaWRlIGFzICRzZWN0aW9uKSB7CgkJCQkkYm90X2hp ZGVfcGVyX3NlY3Rpb25bJHNlY3Rpb25dW10gPSAkZGJfdmFsdWVzWyRpXVsnaXRlbSddOwoJ CQl9CgkgICAgfQoJfQoJaWYgKGlzc2V0KCRib3RfaGlkZV9wZXJfc2VjdGlvbikpIHsgLy8g cmV0dXJuIGFycmF5IG9ubHkgaWYgdmFsdWVzIGV4aXN0CiAJCXJldHVybiAkYm90X2hpZGVf cGVyX3NlY3Rpb247CiAJfQp9CgoKCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovLyBqcyByb3dzIGRlYWxpbmcgd2l0 aCBpdGVtcyB0byBoaWRlIG9uIHNlY3Rpb24gY2hhbmdlIEFORCBvbiBwYWdlIGxvYWQKCmZ1 bmN0aW9uIGJvdF93dGNfanF1ZXJ5X2hpZGVfc2VjdGlvbnNfcm93cygpCnsKCSRib3RfaGlk ZV9wZXJfc2VjdGlvbiA9IGJvdF9oaWRlX3Blcl9zZWN0aW9uX2FycmF5KCk7Cglmb3JlYWNo ICgkYm90X2hpZGVfcGVyX3NlY3Rpb24gYXMgJHNlY3Rpb24gPT4gJGZpZWxkcykgewoJCWVj aG8gbi4nCQkJaWYgKHZhbHVlPT0iJy4kc2VjdGlvbi4nIil7Jy5uOwogICAgICAgIGZvciAo JGkgPTA7ICRpPGNvdW50KCRmaWVsZHMpOyAkaSsrKSB7CgkJCWVjaG8gJwkJCQknLiRmaWVs ZHNbJGldLicuaGlkZSgpOycubjsKICAgICAgICB9CgkJZWNobyAnCQkJfScubjsKCX0KfQoK CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQoKLy8ganMgcm93cyB0byByZXN0b3JlIGV2ZXJ5IHByZXZpb3VzbHkgaGlk ZGVuIGl0ZW0gb24gc2VjdGlvbiBjaGFuZ2UKCmZ1bmN0aW9uIGJvdF93dGNfanF1ZXJ5X3Jl c3RvcmVfcm93cygpCnsKCgkkYm90X2hpZGVfcGVyX3NlY3Rpb24gPSBib3RfaGlkZV9wZXJf c2VjdGlvbl9hcnJheSgpOwoJZm9yZWFjaCAoJGJvdF9oaWRlX3Blcl9zZWN0aW9uIGFzICRz ZWN0aW9uID0+ICRmaWVsZHMpIHsKICAgICAgICBmb3IgKCRpID0wOyAkaTxjb3VudCgkZmll bGRzKTsgJGkrKykgewoJCQkkb3V0W10gPSAkZmllbGRzWyRpXTsKICAgICAgICB9Cgl9Cgkk b3V0ID0gYXJyYXlfdW5pcXVlKCRvdXQpOwoJZm9yZWFjaCAoJG91dCBhcyAkdmFsdWUpIHsK CWVjaG8gJwkJCScuJHZhbHVlLicuc2hvdygpOycubjsKCX0KCn0KCgoKLy8gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi8v ICBidWlsZHMgdGhlIHNjcmlwdAoKZnVuY3Rpb24gYm90X2hpZGVfcGVyX3NlY3Rpb24oKQp7 CiAgZ2xvYmFsICRldmVudDsKICBpZigkZXZlbnQgIT09ICdhcnRpY2xlJykgewogIAlyZXR1 cm47CiAgfQoKICAkYm90X2hpZGVfcGVyX3NlY3Rpb24gPSBib3RfaGlkZV9wZXJfc2VjdGlv bl9hcnJheSgpOwoJLy8gb3V0cHV0IGpzIG9ubHkgaWYgdmFsdWVzIGV4aXN0CglpZiAoJGJv dF9oaWRlX3Blcl9zZWN0aW9uKSB7CgkJIAllY2hvCgkJCQknPHNjcmlwdCAgdHlwZT0idGV4 dC9qYXZhc2NyaXB0Ij4nLm4uCgkJCQknCSQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkg eycubjsKCQkJZWNobwoJCQkJJwkJJCgic2VsZWN0I3NlY3Rpb24iKS5jaGFuZ2UoZnVuY3Rp b24oKXsnLm47CgkJCQkJCQlib3Rfd3RjX2pxdWVyeV9yZXN0b3JlX3Jvd3MoKTsKCQkJZWNo bwoJCQkJJwkJCXZhciB2YWx1ZSA9ICQoInNlbGVjdCNzZWN0aW9uIikudmFsKCk7JzsKCQkJ CQkJCWJvdF93dGNfanF1ZXJ5X2hpZGVfc2VjdGlvbnNfcm93cygpOwoJCQllY2hvCgkJCQkn CQl9KS5jaGFuZ2UoKTsnLm4uCgkJCQknCX0pOycubi4KCQkJCSc8L3NjcmlwdD4nOwoJCX0K CX0KCgoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KCi8vIGludmlzaWJsZSBzZWN0aW9ucyBpbiBzZWN0aW9uIGxpc3QK CmZ1bmN0aW9uIGJvdF9oaWRkZW5fc2VjdGlvbnMoKQp7CiAgZ2xvYmFsICRldmVudDsKICBp ZigkZXZlbnQgIT09ICdhcnRpY2xlJykgewogIAlyZXR1cm47CiAgfQoKCS8vIGZldGNoIHBy ZWZzIHZhbHVlIGZvciBib3Rfd3RjX3N0YXRpY19zZWN0aW9ucwoJJGJvdF9oaWRkZW5fc2Vj dGlvbnMgPSBzYWZlX2ZpZWxkKCd2YWwnLCAndHhwX3ByZWZzJywgJ25hbWUgPSAiYm90X3d0 Y19zdGF0aWNfc2VjdGlvbnMiJyk7CgkvLyBvdXRwdXQganMgb25seSBpZiB2YWx1ZXMgZXhp c3QKCWlmICgkYm90X2hpZGRlbl9zZWN0aW9ucykgewoJCSRzZWN0aW9ucyA9IGV4cGxvZGUo InwiLCAkYm90X2hpZGRlbl9zZWN0aW9ucyk7CgkJZWNobwoJCSc8c2NyaXB0ICB0eXBlPSJ0 ZXh0L2phdmFzY3JpcHQiPicubi4KCQknCSQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkg eycubjsKCQlmb3JlYWNoICgkc2VjdGlvbnMgYXMgJHZhbHVlKSB7CgkJCWVjaG8gICAgJyAg ICAgICAgICAgJCgic2VsZWN0I3NlY3Rpb24gb3B0aW9uOm5vdCg6c2VsZWN0ZWQpW3ZhbHVl PVwnJy4kdmFsdWUuJ1wnXSIpLnJlbW92ZSgpOycubjsKCQl9CgkJZWNobwoJCScJfSk7Jy5u LgoJCSc8L3NjcmlwdD4nOwoJfQoKfQoKCgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKCgpmdW5jdGlvbiBib3Rfd3Rj X2pxdWVyeV9yb3dzKCkKewoJZ2xvYmFsICRib3RfaXRlbXM7CgkvLyBhcnJheSBvZiB2YWx1 ZXMgZnJvbSB0aGUgZGIKCSRkYl92YWx1ZXMgPSBib3Rfd3RjX2ZldGNoX2RiKCk7CgoJJHJv d3MgPSAnJzsKCWZvciAoJGkgPSAwOyAkaSA8Y291bnQoJGRiX3ZhbHVlcyk7ICRpKyspCgl7 CgkJJGl0ZW0gPSAoJGRiX3ZhbHVlc1skaV1bJ2l0ZW0nXSAhPSAnJykgPyAkZGJfdmFsdWVz WyRpXVsnaXRlbSddIDogJyc7CgkJJHBvc2l0aW9uID0gKCRkYl92YWx1ZXNbJGldWydwb3Np dGlvbiddICE9ICcnKSA/ICcuJy4kZGJfdmFsdWVzWyRpXVsncG9zaXRpb24nXSA6ICcnOwoJ CSRkZXN0aW5hdGlvbiA9ICgkZGJfdmFsdWVzWyRpXVsnZGVzdGluYXRpb24nXSAhPSAnJykg PyAnKCcuJGRiX3ZhbHVlc1skaV1bJ2Rlc3RpbmF0aW9uJ10uJyknIDogJyc7CgkJJGNsYXNz ID0gKCRkYl92YWx1ZXNbJGldWydjbGFzcyddICE9ICcnKSA/ICcuYWRkQ2xhc3MoIicuJGRi X3ZhbHVlc1skaV1bJ2NsYXNzJ10uJyIpJyA6ICcnOwogIAkJJHJvdyA9ICRpdGVtLiRwb3Np dGlvbi4kZGVzdGluYXRpb24uJGNsYXNzLic7Jy5uOwoJCSRyb3dzIC49ICRyb3c7Cgl9Cgly ZXR1cm4gJHJvd3M7Cn07CgoKCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoKCmZ1bmN0aW9uIGJvdF93dGMoKQp7Cgkv LyBmZXRjaCBwcmVmcyB2YWx1ZSBmb3IgYm90X3d0Y19zY3JpcHQKCSRib3Rfd3RjX3Njcmlw dCA9IHNhZmVfZmllbGQoJ3ZhbCcsICd0eHBfcHJlZnMnLCAnbmFtZSA9ICJib3Rfd3RjX3Nj cmlwdCInKTsKIAkvLyBmZXRjaCAncG9zaXRpb24nIGZyb20gZGIgdG8gY2hlY2sgaWYgYSBt b3ZlIGlzIHNhdmVkCiAJJHBvc2l0aW9uID0gc2FmZV9jb2x1bW4oJ3Bvc2l0aW9uJywgJ2Jv dF93dGMnLCAnMT0xJyk7CiAJLy8gZmV0Y2ggJ2NsYXNzJyBmcm9tIGRiIHRvIGNoZWNrIGlm IGEgY2xhc3MgaXMgc2F2ZWQKIAkkY2xhc3MgPSBzYWZlX2NvbHVtbignY2xhc3MnLCAnYm90 X3d0YycsICcxPTEnKTsKCgkvLyBvdXRwdXQgY29kZSBvbmx5IGlmIGEgcHJlZmVyZW5jZSBp cyBzYXZlZAoJaWYoaXNzZXQoJHBvc2l0aW9uKSB8fCBpc3NldCgkY2xhc3MpKXsKCQllY2hv CgkJJzxzY3JpcHQgIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Jy5uLgoJCScJJChkb2N1bWVu dCkucmVhZHkoZnVuY3Rpb24oKSB7Jy5uLgoJCQkJYm90X3d0Y19qcXVlcnlfcm93cygpLm4u CgkJJwl9KTsnLm4uCgkJJzwvc2NyaXB0Pic7Cgl9CglpZiAoJGJvdF93dGNfc2NyaXB0KSB7 CgkJZWNobyBuLiRib3Rfd3RjX3NjcmlwdC5uOwoJfTsKCn0iO3M6NDoidHlwZSI7czoxOiIz IjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6NToiZmxhZ3MiO3M6MToiMiI7czo4OiJ0ZXh0cGFj ayI7czo5Njk6IiNAYWRtaW4KI0BsYW5ndWFnZSBlbi1nYgpyZWdpb25fd2FybmluZyA9PiBF bnRpcmUgY29sdW1uIG9yIHNpZGViYXIgcmVnaW9ucyBjYW5ub3QgYmUgbW92ZWQgcmVsYXRp dmUgdG8gc2luZ2xlIGl0ZW1zIGFuZCB2aWNlLXZlcnNhCnNhbWVfaXRlbV93YXJuaW5nID0+ IE9vcHMhIFlvdSBhcmUgdHJ5aW5nIHRvIG1vdmUgYW4gaXRlbSByZWxhdGl2ZSB0byBpdHNl bGYKY29tYm9fd2FybmluZyA9PiBPb3BzISBZb3UgdHJpZWQgdG8gaW5zZXJ0IGFuIGluY29t cGxldGUgcnVsZQpub19pdGVtc193YXJuaW5nID0+IFdhcm5pbmc6IGF0IGxlYXN0IGFuIGl0 ZW0gbXVzdCBiZSBzZWxlY3RlZAphcnRpY2xlX2ltYWdlX2dyb3VwID0+IEFydGljbGUgaW1h Z2UgZ3JvdXAKd3JpdGV0YWJfbWFpbl9jb250ZW50ID0+IE1haW4gY29udGVudAp3cml0ZXRh Yl9zaWRlYmFyID0+IFNpZGViYXIKd3JpdGV0YWJfdmlld19tb2RlcyA9PiBWaWV3IG1vZGUg c3dpdGNoZXIKI0BhZG1pbgojQGxhbmd1YWdlIGVuLXVzCnJlZ2lvbl93YXJuaW5nID0+IEVu dGlyZSBjb2x1bW4gb3Igc2lkZWJhciByZWdpb25zIGNhbm5vdCBiZSBtb3ZlZCByZWxhdGl2 ZSB0byBzaW5nbGUgaXRlbXMgYW5kIHZpY2UtdmVyc2EKc2FtZV9pdGVtX3dhcm5pbmcgPT4g T29wcyEgWW91IGFyZSB0cnlpbmcgdG8gbW92ZSBhbiBpdGVtIHJlbGF0aXZlIHRvIGl0c2Vs Zgpjb21ib193YXJuaW5nID0+IE9vcHMhIFlvdSB0cmllZCB0byBpbnNlcnQgYW4gaW5jb21w bGV0ZSBydWxlCm5vX2l0ZW1zX3dhcm5pbmcgPT4gV2FybmluZzogYXQgbGVhc3QgYW4gaXRl bSBtdXN0IGJlIHNlbGVjdGVkCmFydGljbGVfaW1hZ2VfZ3JvdXAgPT4gQXJ0aWNsZSBpbWFn ZSBncm91cAp3cml0ZXRhYl9tYWluX2NvbnRlbnQgPT4gTWFpbiBjb250ZW50CndyaXRldGFi X3NpZGViYXIgPT4gU2lkZWJhcgp3cml0ZXRhYl92aWV3X21vZGVzID0+IFZpZXcgbW9kZSBz d2l0Y2hlciI7czoxNToiYWxsb3dfaHRtbF9oZWxwIjtpOjA7czo4OiJoZWxwX3JhdyI7czo2 ODMxOiJoMS4gYm90X3dyaXRlX3RhYl9jdXN0b21pemUKCipOb3RlOiB0aGlzIHZlcnNpb24g aXMgZm9yIHRoZSBuZXcgbGF5b3V0IGluIFRleHRwYXR0ZXJuIHY0LjYgYW5kIGlzIG5vdCBj b21wYXRpYmxlIHdpdGggZWFybGllciB2ZXJzaW9ucyBvZiBUZXh0cGF0dGVybi4qCgpUaGlz IHBsdWdpbiBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBjdXN0b21pemUgIlRleHRwYXR0ZXJu J3MiOmh0dHA6Ly93d3cudGV4dHBhdHRlcm4uY29tICJ3cml0ZSIgdGFiLiBJdCBtYWtlcyBp dCBwb3NzaWJsZSB0byByZWFycmFuZ2UgVUkgaXRlbXMsIGhpZGUgcGFydHMgb2YgdGhlIFVJ IG9uIGEgcGVyLXNlY3Rpb24gYmFzaXMsIGhpZGUgc3BlY2lmaWMgc2VjdGlvbnMgZnJvbSB0 aGUgX3NlY3Rpb25zXyBkcm9wZG93biBhbmQgbW9yZS4gQnkgY29tYmluaW5nIGl0cyBmZWF0 dXJlcyB5b3UgY2FuIHJlLWFycmFuZ2UgdGhlIF93cml0ZV8gdGFiIGRpZmZlcmVudGx5IGRl cGVuZGluZyBvbiB0aGUgc2VjdGlvbiB5b3UgY2hvb3NlIGluIHRoZSBfc2VjdGlvbnNfIGRy b3Bkb3duLiBVc2VkIG9uIGl0cyBvd24gb3IgdG9nZXRoZXIgd2l0aCBvdGhlciBwbHVnaW5z IChlLmcuIGdsel9jdXN0b21fZmllbGRzIGFuZCBib3RfYWRtaW5fYm9keV9jbGFzcyksIGl0 IHdpbGwgaGVscCB5b3UgY3VzdG9taXplIHRoZSBUZXh0cGF0dGVybiBhZG1pbiBhcmVhIHRv IG1lZXQgeW91ciBjbGllbnRzIG5lZWRzLiAKCgpoMigjaW5zdGFsbGF0aW9uKS4gSW5zdGFs bGF0aW9uCgpQYXN0ZSB0aGUgLnR4dCBvciAuemlwLnR4dCBwYWNrYWdlIGNvZGUgaW50byB0 aGUgQWRtaW4gPiBQbHVnaW5zIHRhYiwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4u IFZpc2l0IHRoZSAiRXh0ZW5zaW9ucyIgdGFiIGFuZCBjdXN0b21pemUgeW91ciB3cml0ZSB0 YWIgc2V0dGluZ3MuCgoKaDIoI2ZlYXR1cmVzKS4gRmVhdHVyZXMKCiogU2luZ2xlIGl0ZW1z IChjdXN0b20gZmllbGRzLCBib2R5LCBleGNlcnB0IGV0Yy4pIG9yIHdob2xlIHJlZ2lvbnMg Y2FuIGJlIG1vdmVkIGFyb3VuZCByZWxhdGl2ZSB0byBvdGhlciBzaW5nbGUgaXRlbXMgb3Ig cmVnaW9ucwoqIEl0ZW1zIGNhbiBiZSBoaWRkZW4gb24gYSBwZXItc2VjdGlvbiBiYXNpcwoq IFNlY3Rpb25zIGNhbiBiZSBoaWRkZW4gZnJvbSB0aGUgIndyaXRlIiB0YWIgc2VjdGlvbnMg ZHJvcGRvd24gKGZvciBzdGF0aWMgc2VjdGlvbnMgbGlrZSAiYWJvdXQgdXMiIG9yICJzZWFy Y2giKSAKKiBBIGN1c3RvbSBjc3MgY2xhc3MgY2FuIGJlIHNldCBmb3IgZWFjaCBpdGVtLiBU aGlzIGxldCdzIHlvdSBkZWZpbmUgY2xhc3NlcyBmb3IgaXRlbXMgdGhhdCBhcmUgbm90IG5v cm1hbGx5IHRhcmdldGFibGUgd2l0aCBzaW1wbGUgY3NzLgoqIEphdmFzY3JpcHQgY29kZSBj YW4gYmUgc2V0IGRpcmVjdGx5IHRocm91Z2ggdGhlIHBsdWdpbiBpbnRlcmZhY2UuIFBhcnRp Y3VsYXJseSB1c2VmdWwgZm9yIHVzZSB3aXRoIGFuIGV4dGVybmFsIGpxdWVyeSBwbHVnaW4g YW5kIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGFiaWxpdHkgdG8gYWRkIGEgY3NzIGNsYXNz IHRvIGFueSBpdGVtIG9uIHRoZSBwYWdlLiBUaGUgc2NyaXB0IHdpbGwgYmUgZXhlY3V0ZWQg b25seSBpbiB0aGUgX3dyaXRlXyB0YWIuCiogQWR2YW5jZWQgc2V0dGluZ3MgZm9yIGhpZGlu ZyAvIGF0dHJpYnV0aW5nIGNsYXNzZXMgdG8gbXVsdGlwbGUgaXRlbXMg4oCTIGhlbHBmdWwg b24gc2l0ZXMgd2l0aCBsb3RzIG9mIGN1c3RvbSBmaWVsZHMuIAoqIENvbXBhdGlibGUgd2l0 aCBnbHpfY3VzdG9tX2ZpZWxkcywgcmFoX3NlY3Rpb25fdGl0bGVzIGFuZCByYWhfd3JpdGVf ZWFjaF9zZWN0aW9uIAoKYm90X3d0YydzIHJlYXJyYW5naW5nIGNhcGFiaWxpdHkgb2ZmZXJz IGEgc2ltcGxlIHdheSBvZiBjdXN0b21pemluZyBUZXh0cGF0dGVybiwgYnV0IGlzIGp1c3Qg b25lIHRvb2wgZm9yIGN1c3RvbWl6aW5nIHRoZSBhZG1pbiBhcmVhLiBNb3JlIGV4dGVuc2l2 ZSBtb2RpZmljYXRpb25zLCBlLmcgYWRhcHRpbmcgVGV4dHBhdHRlcm4geW91ciBjdXN0b21l cidzIGJyYW5kaW5nLCBjYW4gYmUgYWNoaWV2ZWQgYnkgY3JlYXRpbmcgYW4gb3duIGFkbWlu IHRoZW1lLgoKCmgyKCNleGFtcGxlKS4gQSBzaW1wbGUgZXhhbXBsZQoKU3VwcG9zZSB5b3Ug d2FudCBhIHNob3J0ZXIgX01lbnUtdGl0bGVfIHRvIHNob3cgYmVuZWF0aCB0aGUgcmVndWxh ciBfVGl0bGVfIGZpZWxkLgoKKiBEZWZpbmUgYSBjdXN0b20gZmllbGQgY2FsbGVkIE1lbnUt dGl0bGUuCiogSW4gYm90X3dyaXRlX3RhYl9jdXN0b21pemUsIHNldCB0aGUgcnVsZSAiTWVu dS10aXRsZSIgPiBBZnRlciA+ICJUaXRsZSIuCgpTdXBwb3NlIHlvdSBoYXZlIGEgc2VjdGlv biB3aGVyZSBhcnRpY2xlcyB3b24ndCBhcHBlYXIgYXMgdGhlaXIgb3duIHBhZ2UgKGZvciBl eGFtcGxlIGEgc2VjdGlvbiBob2xkaW5nIEZBUSBxdWVzdGlvbnMgYW5kIGFuc3dlcnMpLCBh bmQgdGhlcmVmb3JlIGRvbid0IG5lZWQgYSBNZW51LXRpdGxlIG9mIHRoZWlyIG93bi4KCiog SW4gYm90X3dyaXRlX3RhYl9jdXN0b21pemUsIGNoZWNrIHRoZSBib3ggbmV4dCB0byAiRkFR IiBpbiB0aGUgImhpZGUgaW4iIHNlY3Rpb24gZm9yICJNZW51LXRpdGxlIi4gSXQgd2lsbCBu byBsb25nZXIgYXBwZWFyIGZvciBGQVEgYXJ0aWNsZXMuCgpBbm90aGVyIGV4YW1wbGU6CgpZ b3Ugd2FudCB0byBkcmF3IGF0dGVudGlvbiB0byBzb21lIHNwZWNpZmljIGZpZWxkcyB0byBl bnN1cmUgdGhleSBhcmUgbm90IG92ZXJsb29rZWQgYnkgbWFraW5nIHRoZW0gcHVsc2F0ZSBi cmllZmx5IHdoZW4gdGhlbiB3cml0ZSB0YWIgbG9hZHMuCgoqIEluIGJvdF93cml0ZV90YWJf Y3VzdG9taXplLCBhc3NpZ24gYSBjbGFzcyAicmVxdWlyZWQiIHRvIGFsbCB0aGUgaXRlbXMg dGhhdCBuZWVkIHRvIGJlIGZpbGxlZCBvdXQuCiogQWRkIHRoZSBhcHByb3ByaWF0ZSBqYXZh c2NyaXB0IGNvZGUgaW4gdGhlIGphdmFzY3JpcHQgYm94IGFzIGZvbGxvd3MgKHVzZSB0aGUg YnV0dG9ucyB0byBpbnNlcnQgYmx1ZXByaW50IGNvZGUpOgoKYmMuIDxzY3JpcHQgc3JjPSAi Li4vanMvanF1ZXJ5LnB1bHNhdGUuanMiPjwvc2NyaXB0Pgo8c2NyaXB0PgokKGRvY3VtZW50 KS5yZWFkeShmdW5jdGlvbigpIHsKICAkKCIucmVxdWlyZWQiKS5wdWxzYXRlKHt0aW1lczoz fSk7Cn0pOwo8L3NjcmlwdD4KCllvdSBjYW4gZXh0ZW5kIHRoaXMgcHJpbmNpcGxlIHRvIHZh bGlkYXRlIGZpZWxkcyBwcmlvciB0byBzYXZpbmcgdGhlIGFydGljbGUuCgoKaDMuIEEgbGl0 dGxlIHRpcCAKCk5ld2VyIHZlcnNpb25zIG9mIFRleHRwYXR0ZXJuIGhhdmUgYnJvdWdodCBl eHRlbnNpdmUgZW5oYW5jZW1lbnRzIHRvIHRoZSAid3JpdGUiIHRhYiwgYnV0IHRoZXJlIGNh biBiZSBzb21lICBkcmF3YmFja3MuIEFsbW9zdCBldmVyeSBpdGVtIG5vdyBoYXMgYW4gaWQg b3IgYSBjbGFzcyB3aGljaCBtZWFucyBzbmFwcGllciBqcXVlcnkgZXhlY3V0aW9uIGFuZCBh bHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGhpZGUgdGhlc2UgZWxlbWVudHMgd2l0aCBzaW1w bGUgY3NzIGluIGEgdGhlbWUuCgpBIHByb2JsZW0gY2FuIG9jY3VyIGlmLCB1c2luZyBib3Rf d3JpdGVfdGFiX2N1c3RvbWl6ZSwgeW91IGhpZGUgdGhlIGxhYmVsIGhlYWRpbmdzIGZvciBl YWNoIGNvbGxhcHNpYmxlIGdyb3VwLiBUaGUgInR3aXN0eSIgYXJyb3cgdGhhdCBhbGxvd3Mg eW91IHRvIHNob3cvaGlkZSB0aGUgZ3JvdXAgd2lsbCBubyBsb25nZXIgYmUgYWNjZXNzaWJs ZS4gRm9ydHVuYXRlbHksIHlvdSBjYW4gZml4IHRoaXMgYnkgaW5zZXJ0aW5nIGEgdGlueSBq UXVlcnkgcnVsZSBpbiB0aGUganMgYm94OgoKYmMuIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh c2NyaXB0Ij4KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CiAgJCgiLnRvZ2dsZSIp LnNob3coKTsKfSk7Cjwvc2NyaXB0PgoKVGhpcyBtYWtlcyBhbGwgY29sbGFwc2libGUgZ3Jv dXBzIHZpc2libGUsIGFsbG93aW5nIHlvdSB0byBoaWRlIHRoZSBoZWFkaW5nIHdpdGggY3Nz IHdoaWxlIHN0aWxsIGVuc3VyaW5nIHRoZSBmaWVsZHMgcmVtYWluIHZpc2libGUgZXZlbiBp ZiB0aGUgdXNlciBoYXMgdGhlbSBzZXQgdG8gY29sbGFwc2UuCgoKaDIoI3VwZ3JhZGluZyku IFVwZ3JhZGUgbm90ZXMgCgpUaGUgcGx1Z2luIHNob3VsZCB0YWtlIGNhcmUgb2YgdXBkYXRp bmcgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBkYiBvbiBhY3RpdmF0aW9uLiBOZXZlcnRoZWxl c3MsIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGJhY2sgdXAgeW91ciBkYXRhYmFz ZSBwcmlvciB0byB1cGRhdGluZyBzbyB0aGF0IHlvdSBjYW4gcmVzdG9yZSB5b3VyIHNldHRp bmdzIHNob3VsZCBzb21ldGhpbmcgZ28gYXdyeS4gCgoKaDIoI2lzc3VlcykuIE5vdGVzIGFu ZCBrbm93biBpc3N1ZXMKCiogVGhlIG9yZGVyIGluIHdoaWNoIHRoZSBydWxlcyBmb3IgbW92 aW5nIGl0ZW1zIGFyZSBpbnNlcnRlZCAqZG9lcyogbWF0dGVyLiBSdWxlcyBhcmUgZXhlY3V0 ZWQgZnJvbSB0b3AgdG8gYm90dG9tIHNvIGlmIHRoZSBzZXF1ZW5jZSBnZXRzIGdhcmJsZWQg aXQncyBhZHZpc2FibGUgdG8gZGVsZXRlIHRoZW0gYWxsIGFuZCBzdGFydCBvdmVyLgoqIENs YXNzIG5hbWVzIG11c3QgYmUgaW5zZXJ0ZWQgKndpdGhvdXQqIHRoZSBkb3QuCiogSWYgeW91 IHdhbnQgdG8gaGlkZSBhbiBpdGVtIGluICphbGwgc2VjdGlvbnMqLCBpdCBpcyBtb3JlIGVm ZmljaWVudCB0byBoaWRlIGl0ZW1zIHVzaW5nIGNzcyDigJMgZm9yIGV4YW1wbGUgQC5vdmVy cmlkZS1mb3JtIHtkaXNwbGF5Om5vbmU7fUAg4oCTIHRoYW4gaXQgaXMgdG8gaGlkZSB0aGVt IHVzaW5nIHRoaXMgcGx1Z2luLgoqIFRoaXMgcGx1Z2luIG1heSBub3QgZnVuY3Rpb24gcHJv cGVybHkgaWYgeW91IGhhdmUgdGhlIFN1aG9zaW5nIG1vZHVsZSAoYSBzZWN1cml0eS1yZWxh dGVkIG1vZHVsZSBmb3IgUEhQKSBpbnN0YWxsZWQuIEluIHRoaXMgY2FzZSBmb2xsb3cgInRo ZXNlIGluc3RydWN0aW9ucyI6aHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9w aWMucGhwP3BpZD0yNDM4NjEjcDI0Mzg2MSIgKHRoYW5rcyBtYW5pcXVpISkuCgoKaDIoI2Nv bXBpbGUpLiBDb21waWxpbmcgdGhlIHBsdWdpbiBmcm9tIHRoZSBzb3VyY2UgZmlsZXMKClRo ZSBALnR4dEAgYW5kIEAuemlwLnR4dEAgY2FuIGJlIHVzZWQgaW1tZWRpYXRlbHkuIEZvciB0 aG9zZSBpbnRlcmVzdGVkIGluIGZvcmtpbmcgYW5kIGV4dGVuZGluZyB0aGUgcGx1Z2luLCB0 aGlzIHBsdWdpbiBmb2xsb3dzIGdvY29tJ3MgInBsdWdpbiBzdHJ1Y3R1cmUiOmh0dHBzOi8v Z2l0aHViLmNvbS9nb2NvbS9hYmNfcGx1Z2luIGFuZCBjYW4gYmUgY29tcGlsZWQgdXNpbmcg InJhaF9wbHVnY29tcGlsZXIiOmh0dHBzOi8vZ2l0aHViLmNvbS9nb2NvbS9NYXNzUGx1Z0Nv bXBpbGVyIGFzIGZvbGxvd3M6CgoqIGNsb25lL2Rvd25sb2FkICJyYWhfcGx1Z2NvbXBpbGVy IjpodHRwczovL2dpdGh1Yi5jb20vZ29jb20vTWFzc1BsdWdDb21waWxlciB0byB5b3VyIGxv Y2FsIGNvbXB1dGVyLgoqIEluIHRoZSB0ZXJtaW5hbDoKCmJjLi4gY2QgL3BhdGgvdG8vcmFo X3BsdWdpbmNvbXBpbGVyCnBocCBjb21waWxlIC9wYXRoL3RvL2JvdF93dGMgL3BhdGgvdG8v Ym90X3d0Yy9wYWNrYWdlcwoKcC4gVGhpcyBzaG91bGQgZ2VuZXJhdGUgQHR4dEAgYW5kIEAu emlwLnR4dEAgaW5zdGFsbGFibGUgcGx1Z2lucyBpbiB0aGUgQC9wYWNrYWdlc0Agc3ViZGly ZWN0b3J5LgoKCgpoMSgjY2hhbmdlbG9nKS4gQ2hhbmdlbG9nCgpoMi4gNy41IOKAkyAyMDE2 LTA1LTIyCgoqIEZ1cnRoZXIgd3JpdGUgdGFiIGFyZWEgY2xhc3NlcyBhbmQgaWQgdXBkYXRl cyBmb3IgVGV4dHBhdHRlcm4gdjQuNi4gKGpjcikKKiBVcGRhdGVkIGluc3RhbGwgcm91dGlu ZSB0byB1c2UgVGV4dHBhdHRlcm7igJlzIGJ1aWx0LWluIGZ1bmN0aW9ucyAoamNyKSBmb3Ig YmV0dGVyIFBIUCA3IGNvbXBhdGliaWxpdHkKKiBTd2l0Y2ggdG8gdGV4dHBhY2tzIGFuZCB0 aGUgYnVpbHQtaW4gZ1R4dCBmdW5jdGlvbiAoamNyKQoqIFVwZGF0ZWQgaGVscAoKaDIuIDcu NCDigJMgMjAxNS0xMi0wNwoKKiAqTm90ZTogZm9yIFRleHRwYXR0ZXJuIHZlcnNpb24gNC42 IG9ubHkuIE5vIGxvbmdlciBjb21wYXRpYmxlIHdpdGggZWFybGllciB2ZXJzaW9ucyBvZiBU ZXh0cGF0dGVybioKKiBVcGRhdGVkIHdyaXRlIHRhYiBhcmVhIGNsYXNzZXMgYW5kIGlkIGZv ciBUZXh0cGF0dGVybiB2NC42IChieSBqY3IpLgoKCmgyLiA3LjMg4oCTIDIwMTQtMDYtMTQK CiogVXBkYXRlZCB0byBhZGRyZXNzICJTb3JyeSwgdGhlIGZvcm0gY291bGQgbm90IGJlIHN1 Ym1pdHRlZCIgZXJyb3IgaW4gNC42IChieSBtcmRhbGUpCiogVXBkYXRlIGJvdF93dGMgZXh0 ZW5zaW9uIHBhbmVsIHRvIHVzZSBuZXcgImhpdmUiIGFkbWluIGNvbnRyb2xzCgoKaDIuIDcu MQoKKiBmaXhlZCAiaXNzdWUgd2l0aCBtdWx0aS1zZWxlY3QgYW5kIGNoZWNrYm94ZXMiOmh0 dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9waWQ9MjQ1NTExI3Ay NDU1MTEgY3VzdG9tIGZpZWxkcwoqIGZpeGVkIGRlcHJlY2F0ZWQganF1ZXJ5CiogY2hhbmdl ZCAnc2VjdGlvbnMnIGZpZWxkICJmcm9tIHZhcmNoYXIgdG8gdGV4dCI6aHR0cDovL2ZvcnVt LnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP3BpZD0yNTQxMzIjcDI1NDEzMgoqIHJl bW92ZWQgZGVwcmVjYXRlZCBsYW5ndWFnZSBhdHRyaWJ1dGUgZnJvbSAnc2NyaXB0JyB0YWcK KiB1cGRhdGVkIGhlbHAKKiBjbGVhbmVkIHVwIGNvZGUiO3M6MzoibWQ1IjtzOjMyOiIyMDk5 NDAxMGY5MGEwYTM5YjM1MjI2ZTUwOGJlNWM5YiI7fQ==