Content-Type: multipart/related; start=; boundary=----------FgkmpfQsCzxrMiKK0NAZoj Content-Location: http://www.gchd.cz/aktualita/24-Navsteva_kosmonauta Subject: =?utf-8?Q?Gymn=C3=A1zium=20Christiana=20Dopplera=20-=20matematika,=20fyzika=20a=20=C5=BEiv=C3=A9=20jazyky?= MIME-Version: 1.0 ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline; filename=24-Navsteva_kosmonauta.htm Content-Type: text/html; charset=utf-8; name=24-Navsteva_kosmonauta.htm Content-ID: Content-Location: http://www.gchd.cz/aktualita/24-Navsteva_kosmonauta Content-Transfer-Encoding: 8bit Gymnázium Christiana Dopplera - matematika, fyzika a živé jazyky
07.10.2009

Návštěva kosmonauta


V rámci tzv. Community Day, který je součástí Mezinárodního kongresu účastníků kosmických letů ASE Prague 2009, nás ve středu 7. října 2009 navštívil astronaut Vance Brand s manželkou. Celou hodinu se tak věnoval otázkám od studentů, pro pár šťastných podepsal fotografie.

Příspěvek Vance Branda je dobře popsán na wikipedii. Hned jeho první mise v roce 1975 na Apollu znamenala mnohé: došlo při ní k propojení s ruskou lodí Sojuz. Další tři mise byly na Challengeru a Columbii. Tedy na raketoplánech, které již neexistují.
 




------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://www.gchd.cz/img/inquiry-bg.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAT Q3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQH/wAARCAAKAAMDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAA AAAAAAYK/8QAHhAAAQIHAQAAAAAAAAAAAAAAAAEDBBEVUVORk9L/xAAUAQEAAAAA AAAAAAAAAAAAAAAH/8QAIhEAAAUBCQAAAAAAAAAAAAAAAQIRIVFBAwQiYWJxsdHw /9oADAMBAAIRAxEAPwDT5XYHK5wc8gipJZNIBFCwK2IaRoy28LF4Xk4IxWSkJ1xD /wD/2Q== ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://www.gchd.cz/img/header-fill.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAT Q3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQH/wAARCAAZAAEDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAA AAAAAAoL/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABYBAQEBAAAAAAAAAAAAAAAA AAgHCf/EABsRAAEEAwAAAAAAAAAAAAAAAAAXGGXlZqWm/9oADAMBAAIRAxEAPwCf 8BpgD8DX4BncVh/QUhYEon9XYn//2Q== ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://www.gchd.cz/img/logo-fill.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAT Q3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQH/wAARCABkAAIDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAA AAAAAAYJ/8QAKBAAAgEABwgDAAAAAAAAAAAAAAEUAhEhUaHR8AMSE1JhkZLBBEJi /8QAGAEBAQADAAAAAAAAAAAAAAAABAMFCAn/xAAqEQABAQUHAgcAAAAAAAAAAAAB YQARElGREyFBYnGh8DGxAkJSwcLS4f/aAAwDAQACEQMRAD8AwC4W06dmwUcX80u4 OmkGuGIR/vSuncem6JrzrSP4irdmFH2Cpj1WVOzo/TA2zMpTy/lC0Ixj4gOl12VV 3QNTRXcsMgUsR63mB9mfSKaLy9XkeEw8oR+GtK1ER3YUgVMR8r8lmBtnrxyL2nca MTFdFQbtSwtbuSBUw1cvFgdAVoPsxYlOHxd3FEaoivleOYKWItKiDIWQy04vDcaI ccirsZNQcDZv667AAY4SFA0W/9k= ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://www.gchd.cz/img/menu-right.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAT Q3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQH/wAARCAAeAA8DASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAA AAAAAAn/xAAhEAACAgICAQUAAAAAAAAAAAAEBQMGAAIHCQgBERITFP/EABcBAAMB AAAAAAAAAAAAAAAAAAMECAn/xAAiEQACAgEEAgMBAAAAAAAAAAABAgMEBQYRITEA EhMiUUH/2gAMAwEAAhEDEQA/AIb5VTqy7I7h4F8xxzP3diccAWVe+HvfHgxBBYWz TdQXNXrCjXybyirXcD8dWOYxGF9ZiE87ASX30m+yOVeM2U1JpzE6swt7A5ustrH3 4jHKv1EsT9x2K8jK3w2YG2eGUKSjDkMpZTDePv2sZbgvUpWhsV3Do4J2P6rgEeyM OGU8EH92PjGMvf059TNO84pbDyzzbZd9eHqt+lPpS6uxZLLc+sRerAQOU5pqDoMq TrtwiGHyCNLMMnhEElgiGIJ3iV1dq3D6IwVvUOcewlCoY0ZasDWLEsszekUMUYKr 7u3TSyRRLsS8i8blxWLt5m9Dj6Ko1ickJ8jiNAFG7MzHoAd7BmP8U+f/2Q== ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/gif Content-Location: http://www.gchd.cz/img/menu-sipka.gif Content-Transfer-Encoding: Base64 R0lGODlhDQALAIABAC+Eutnk6iH5BAEKAAEALAAAAAANAAsAAAIRjI+py30AnIEP 2hsb1Vn6fxQAOw== ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/gif Content-Location: http://www.gchd.cz/img/column-tail.gif Content-Transfer-Encoding: Base64 R0lGODlhqgAKAIABAP///05+zyH5BAEKAAEALAAAAACqAAoAAAIyjI+py+0Po5y0 2ouz3rz7D4biSJbmiabqyopAC8cw8Mr2TdI1zveYTvMJhxBgkIhEAgsAOw== ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://www.gchd.cz/img/column-title.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAT Q3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQH/wAARCAAUAKoDASIAAhEBAxEB/8QAHgABAAEEAwEBAAAAAAAA AAAAAAcBBQYIAgkKAwT/xAA8EAABAwMCBAIHBAgHAAAAAAABAgMEBQYRACEHEjFR CJETFBYiQWFxMpOhsRUjJFJVwdHSCiUzQmKC8P/EAB0BAAIBBQEBAAAAAAAAAAAA AAEEAwIFBgcIAAn/xAA0EQACAQIEBAIJAgcAAAAAAAABAgMEEQAFIVESMUGRBhMU IjJCYXGBsfAjUjNDY6HB0fH/2gAMAwEAAhEDEQA/ALl4hfETf/jD4pXDxh4kVGqr otSrEyVw4saTWJsui2Ba6nX41Ko1JY9XpEUKi0xERM+sNUenSbpqKn7inRY0moPx W4YNGpysZignHxefH4BwjVKE0WaNSWVEFTNMgNkBBRu3FaT9kqWUqGPeBUSNt9Xb 8T1wNz5a+u2X5fRZNQ0uVZXTx0WX0EMdNSU0IIjhhiAVVF24mY2JZ2YyO7MzszMS eEq2uqa+qnrKuZ5qid2kklZjdmJJueQA6WAAUcgALYs5oVIO64DLgz0dU46nJOMh LpWlKt8cwGQCQCQog0Nv0U9aVB+5T/bq9LQsJK1ApbSApTiyENpSDjKlqISBtjJO Acb6xOsX5ZFvIUut3db1OCAVKS7UmHVgJ6gtx1OOJPyUkHbYHTLzCMXeYIOd3k4R be5IwsodjZeJj8Ln7YuPs9RP4TB+6T/brj7N0L+Ewfuh/TUJ1rxR8JKVzIiVGqV5 8Z5U0unOCOvGcYlvFCfe+GU5xvsMaias+Mn7abcsQbZCHq7Ut8fBfo4STjPXkUfh hRB6oSZzQRe1VqxB5IWc9B7txp30+WGkoqyT2Y3APVjwjoepHwxuH7MUA9aNT1Y6 pUwlSTttlCklJ6gjIO+CN8HVfZKgOpKfZ2lrSoYKTAYIUDsUkFnB26gncZGuuir+ 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 G4B7gaaaXk6fX/GKsf/Z ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/gif Content-Location: http://www.gchd.cz/img/a-arrow.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAIABAGyp5////yH5BAEKAAEALAAAAAAVABQAAAIjjI+py+0PowFS AVrPxXnf5oUeI5YcYoaVun5Z4L7nS9f2/RYAOw== ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://www.gchd.cz/img/news-bottom.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQIARwBHAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAPAKsDASIA AhEBAxEB/8QAGQABAQADAQAAAAAAAAAAAAAACQABBAoL/8QAMhAAAAMGBAMHAwUA AAAAAAAAAgMEAAEFBggJBxEZMUFYpycoR0hRV4cKEtcTGFORof/EABoBAQACAwEA AAAAAAAAAAAAAAABCAUGBwn/xAAzEQAABQEECQIEBwAAAAAAAAABAgMEBQAGBxFh FRdVVmORlJbUEkEIExQiIzEyQ0Rx0//aAAwDAQACEQMRAD8AEBaiWQ5Yrh8QSKUC 9ApPRLkK0g1KsRLEpoyFKRWmPAWcnUpzgDJPIOAA0k0AyzABGF7nazdmNzqwjG8e sVp2qMpSm2V4FNk/r1Mzz7hPOYlEIgsZm9YMR0dmSUZoRJVpcPiMzrHji0Wg0fRF oTo8picUBMaMheCGow3U2NLoidSeQXTQSsLJOMLLVp8aafwp1QADeECggKvFNKqC UcFzjCwqUyc9wBOcaSUZ9wA+qVkL77vLUxTV6raOJgn5m6Z30ZNvkIxRq5EpQWSR XfGboPEiqCPylmyhxOl6TKESUBRJOm8xY+dh3ardRi4cpFUMVFw1SM4IqTH7TiCQ HMmIlw9RVClwNiACYMDCSzTLFoc3R+WDrVTv+Wmxod3RnZ92DbLPtqp447eLTbZr Fu+37sb3PCedWI0PL7Lkehc/5UTzTLC+x1dGdn3YNt+2qnjjt4tNaHd0Z2fdg2yz 7aqeOO3i0zWNd7v3Y3ueE86p0PL7Kkehc5cLMOdE80ywvsdXRnZ92Dbftqp447eL TWh3dGdn3YNss+2qnjjt4tM1jXe792N7nhPOpoeX2VI9C5y4WYc6J5plifY5uju8 sHWqnj1y92mtDq6PywdaqeOPy0zWNd7v3Y3ueE86mh5fZUj0LnLhZhzonWmWJ9jm 6O7ywdaqePXL3aa0Oro/LB1qp44/LTNY13u/dje54TzqaHl9lSPQucuFmHOidaZY n2Obo7vLB1qp49cvdprQ6uj8sHWqnjj8tM1jXe792N7nhPOpoeX2VI9C5y4WYc6J 1plifY5uju8sHWqnj1y92mtDq6PywdaqeOPy0zWNd7v3Y3ueE86mh5fZUj0LnLhZ hzonWmWJ9jm6O7ywdaqePXL3aa0Oro/LB1qp44/LTNY13u/dje54TzqaHl9lSPQu cuFmHOidaZYdDq6Pm937YNt+2qnjj8tNnQ5uj8sHWqnf8tM1i3fb92N7nhPOqNDy +ypL2/guvf8AL9r3xDD+6J1vQtshZ6XlL2f8GMP9Px+xVy/xudGnP6dqtPEqYEb8 dT5Mp6k4lQB8XOWTLL+I05npQnPCYXAoJIUYi8uHqDCg/qBHFpwhJRJZpY3hPOCY kD2nYB4ByFTfg3h5gbhojOQyThvLqaX4KBcYBTEVeRpy2JRiKqSiCCVEYj0XVr43 Fz06dKnOicQVGJ0qUkRZBdS/iTvKslaRpCWfs/KIy7iOkl3r50yxVYJh9MZumki8 D8F0Y4qGOJ2wrIAQoCC2IiUOo3f2SmSqOnzhqdskq3ImiVbAqp8VCnEwpD9xCgBc MFPSf1D+jAMa/9k= ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://www.gchd.cz/img/news-top.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQIARwBHAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAPAKsDASIA AhEBAxEB/8QAGQABAQADAQAAAAAAAAAAAAAACAABCQsK/8QAMBAAAAQFAgQGAAcB AAAAAAAAAwQFCAABAgYHGJghSFjWCSgxVnGmERMUIzlBkbf/xAAZAQEAAgMAAAAA AAAAAAAAAAAABQgGBwn/xAAvEQAABAIJAwMEAwAAAAAAAAABAgMEAAUGERQWQVRV k5UxQtMHEmETImKRCCHS/9oADAMBAAIRAxEAPwBe+KL47GcK8xZBwKz25UqwMeWA sH7MWctJBROXLvvm4EgcQjchi11U+EfSEC1CqoEZTEVURCo6sshEqrhJXCAnqhQi V0ZGX+vrNmBzQrz3V0imBhBxKSzg8sEy9NYtc66qQChS7ACpYGU6pyDLlgQgAaJS DCDoDpppkR4o62UR9LKE0OlbaXMJDLHC6bdNJ3M3rFBy/frFKX6q6yzgqxyFVUKK hWyZwboVgRIgFKFdLJtSScTl0o5dvXFRzmMmgmqdNFEoj9pEyEEpfsLUX3iAnNVW YwiIwsdez5+tB2O4vMHeMY16vn60HY8fXzF5g4/cYJ8UZXdyj2hSbi2PgiLtjvNO d9X/AFCxm/V88+dB2HH18xWX+P3GMa9Xz9aDsePr5i8wcfuME+KF3KPaDJuLY+CF sd5pzvq/H5fAfoIWM36vnnzoOw4+vmKy/wAfuMY16vn60HY8fXzF5g4/cYJ8ULuU e0GTcWx8ELY7zTnfV+Py+A/QQsZv2fPPnQdjuLy/8+8Yter5+tB2O4vMHeME6KF3 KPaDJuLY+CFseZpzvq4dO/CoIWM37PnnzoOx3F5f+feMWvV8/Wg7HcXmDvGCdFC7 lHtBk3FsfBC2PM0531cOnfhUELGb9nzz50HY7i8v/PvGLXq+frQdjuLzB3jBOihd yj2gybi2PghbHmac76uHTvwqCFjN+z5586DsdxeX/n3jFr1fP1oOx3F5g7xgnRQu 5R7QZNxbHwQtjzNOd9XDp34VBCxm/Z88+dB2O4vL/wA+8Yter5+tB2O4vMHeME6K F3KPaDJuLY+CFseZpzvq4dO/CoIWOvV8/Wg7HcXmDvGLXs+frQdjuLzB3jBOihdy j2hSbi2PghbHmac76uHTvwjaW3XxlPEAb1cBNRlna6sxW7SYorVrNzkqKWSyCuWk PMYUCVwLx0a9EgSqVddIQ6LcpCdEvywhKBiwVBeXvRaY5u23ZtzxQ4a1U4wipOS7 cEUhEM6LSbMIS2kqqjbd0IdR2kAvSoBo1zIqumF1KksVkolyoR6RQrIx+nD5ccdC 3wQf4vGvf3+xmH/v+Vfw/wAlwioX8naDUXlDGRUglMnZyyYP5ouzfmYpFbIuyi2M 5Kqq2SAqFoBRM4nXImVVb6phWMoIFEu0PT2kk3Iq7ZHeLLN025FEirHMcUhKqUnt IcwiYCiUQACiIlLUHt9v91//2Q== ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://www.gchd.cz/img/news-button-active.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQIARwBHAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAbAFADASIA AhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAj/xAAdEAACAgMBAQEAAAAAAAAA AAAABAUGAgMHCAEV/8QAGAEBAQEBAQAAAAAAAAAAAAAAAAQFCAn/xAAeEQACAgMB AQEBAAAAAAAAAAABAgMEAAURMSESUf/aAAwDAQACEQMRAD8Agj2h7z9C+5OhS9t6 7c5jKpfLA/L0XlCkqz9oPO0t+GSaCUJD4YqpNSasV81ovWdtP9uY2fWmWt2vFrJf CLgD2e1On1mh19bVaelBr9dUjEVepWQRxRqO9IAHSzt13diWdyzMSxLHhi3ctX7E lu5NJYsTMWkllYs7E/0nwDwAfAAAPnzAANLJsAAYwABjBZPjv3j6T8P3ZS0cT6BL x9aZlUXrrzCRZ+SXO76hpfiWJJKbrchqdj0ZaUQiNELhdIRaOu0PF7mVYWfR0NM6 t8bAzttqNZvaFjV7ilX2OvtL+J6lqJZYZF6CvVYHjKwDo6kPG4DKwKgiipcs0Z0t U55a1iJuxzQuVdSPeEe98IPQR0MD0jAANHJ8AAYwABjAAGMAAYz/2Q== ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/gif Content-Location: http://www.gchd.cz/img/plans-button-passive.gif Content-Transfer-Encoding: Base64 R0lGODlhUAAdAMZQAM7c59Tb4dXc4tbd49Xe49be4dLf6Nfe5Nne4dne4tbf5Nff 4tjf5djf59Xg5trf49rf5dfg5djg49bg6dfg59Ph6tfg6dvf6NTh6dng5tPh7tng 6Nbh59Xh7dvg5tTh8djh5tXh79nh5Nfh6tjh6Nfh69Ti69jh6tTi7dXi69rh59fi 5tTi79rh6dfi6NLj7dzh5dni59ri5dni6dni69Xj8Njj6dPk7trj6tnk6t7j5uLl 6uHm6eHm6uPo7Ojt8ejx9uzx9O7x9u7y9e/z9PL2+fX2+vj8/fz9//39/fn+//3+ //7+/v/+/Pz///7///////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////yH5BAEKAH8ALAAAAABQABgAAAf+gE1MUEhCPTASDAweHhAM GSAZGYwiMhsbkhsNGQwXFxkHkiIiipmbkpyoqZKPqqqtlDI8QUdOTEmDRjsJD66T kCCRqi0Nj5eZmL4MBwyXya++0ZIHKqwZEhIIOkRLT09DHgEKMSTlMzMkG+UuLuUk FO7x8vP07uf1JPfo7sH8kQIFfigpAmPADBvt3J04sY5dQnPy2MGjcM9evIXz2K2z Uc4Gh3nkSJxwwZFEDAIggPgQASKfSAvo4JXDqJDGuo/xKu6Td25nvIkW6cU0h26F DQwGRtk7QcOnSIYKT6BDuE8mRKf1KubD4TInxXxYV7ioAAAbBYQP3WlUm9ZhSZf+ X/eh6yl07dp4l/TRG2HixgIRJGy8tUoSIju6JNjleFeOAsUZj3tK9jnjMAkH7WZw fbehxdydQ/m+GIVY70yo9lrYw4r4qzvXjMHmJIEDB+Wg+UZ0YKE0nefV6E5Y4NlC nWyIRFfLg4c1qFO5yHXzBky0OeunXbsynNFy9jzrWWdcih7iQ+/Wn79/pTmPhtSQ yUFnXe7y3PiKI8or1cyzqlCe8jAVXFPKOdYfcv68Q9JCO51QQgcaSCDDTxY1B5FV TtHEVGz4wNUYRBF0d5c5J0g3ilXfIfjUbQCyl12KH86m0XPu6IbCeRXFxdp6qMnj 3gzwySbffxR+dt8++ZmWBxh/OfkHI24zEShggSge51Q/FCwolUIPRjjhaxXiM5SK 2IlkU5X/ySQTOiE2xFOJu50opooMejebixZmVyU6MwJYjo37IchilOltNpc57jUJ JWTZ+URSRTGQc+gIKaAgAXWx5ZCZnS5GKY9tPNVmoVaJpRUMqTXu9seqrLbq6quw xirrrLTWauutuOaq66689uqrrIEAADs= ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://www.gchd.cz/img/right_col-top.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAT Q3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQH/wAARCAAKAL4DASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAA AAAABQABAgYK/8QAPBAAAQICBgYGCAUFAAAAAAAAAQIRACEDBAUxVWESFkFxgcEG MlGhsbITIiM1QpGT8BQzcuHxQ2PC0dL/xAAXAQEAAwAAAAAAAAAAAAAAAAAAAQIF /8QAJREAAgAEBgMBAQEAAAAAAAAAAQIAUpLRAxESE2GRITGBUXGh/9oADAMBAAIR AxEAPwD3H2v00tSuU9IKhTqqVUSpqJNElHp1pAbTpaQhSgSXOggoSAwckORtZLd2 2pXp/wB1d+XrDezZZwKokCRInzV/ofKNnmPERqjDRQAEXx+gE/T7JjDbFxGJYu2Z /CQPgHgeh6hfWS3cUrt0h6VU3ec38DNp7BNY7dxSu3t+aqd9zEPnPsvLmBVXH9Q8 oix1uCvMYnQkq0i0V3Hneo34HUNayW63vWt7LqZU+JHEkEkNxitY7dxSvcaVQ33G Q7WEjlKA9qvv4hGgSUzJvPlMNCSrSLQ3Hneo34HUN6yW7ile40qv3k33c1ayW7il ez9qfDxYpyaBFEsJn7SmISXRPYnvv+e2GhJVpFobjzvUb8DqHD0kt7FK62VKojg2 iTvdsrjE1jt3FK9wpVS3zM+zIzdy4aLzu5/uY0SZTPx9zt8oaElWkWhuPO9RvwOo a1jt3Fa6N9KXO7uDXEm7YZrHbr+9a4L/AOsphfmAZTA0ZhjnAbmc9g8io0OoN480 NCSrSLQ3Hneo34HUM6x27ilf4Uqv553hzE1kt3FK99Vf/UCuXEz1z4iNm8b+RhoS VaRaG4871G/A6hjWO3cVrvYfaqldMu/LbMljFax27ildm99KrK9iGGe+QugU3p/U rzRadu5PhDQkq0i0Nx53qN+B1DZ6SW7ilc4UxnnNM8mkSQH7c6x27ile3GmUOfBM p3XzAWw7x/lG3OiJm49yg0NCSrSLQ3Hneo34HUNjpJbuKV76quN75N/JNDpJbuKV 5s6Us77byB2z4NKBFEvedvcot8oiusdx8sNCSrSLQ3Hneo34HUNnpJb2KV76quWj 3vwi9Y7dxSvcKQ83nsOzIEAgRG3hziEntPUBv2uJw0JKtItDced6jfgdQ3rHbre9 a6N9KoEZ7pksSeqeD1ldOLSqukivH8fRaHqGkCaOmQvSF9IhA00tpaQWFKCmZQAI PCn4t6vFMWqSUtK7wiDhoRkUXL+Af6PMWXGxUOau30kj6DmDH//Z ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://www.gchd.cz/img/right_col-opendays.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAT Q3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQH/wAARCABAALQDASIAAhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAA AAAAAAECBgMEBwUICv/EADkQAAEDAgUBBgQFAwMFAAAAAAECESEDMQAEEkFRYQUT InGBoQYykbEjQlLR8BTB4QczYlNyktLx/8QAGwEBAQEBAQEBAQAAAAAAAAAAAAMC BAEFBgf/xAAtEQABAwIEAwgDAQEAAAAAAAABAAIRITEDQVFhEnHwBBMigZGh0fGx weEyI//aAAwDAQACEQMRAD8A/Wt8Z/GGc7TzuZyGRzBp9lUD3QTSDf1qk6SqrWUR qUgrcU6YKQlCQpSSskp54HJDO0RLMZ8oEF7yb4lZ4V6P9wfF0fBzChFy7b3kxzES 98ftmMbhtDWgAAaXOp1JzK/nWJiOxXl7ySSSb0A0GgFgoqcEsSwNg7CAdow0guxJ IBIIloEdPTyw36KPUEt6MQPYYPQibkxDXckeRbhrY0sKJBdnLEtuwlvL6eWGkE3J IIN5Yv1j+HDccLPVyx63Ab6DBxcS7n1s7z9Hmz4IoeLksz73Adp8v74kAWJJJgEE 7Xs/3GG44X9T++Di4je56Jd/UAg2lxgigdUyYkXDyBv54kxYyXcMWLsW5ncwMOJh fq/7zg5v5P4j5bt5HY9cEUPFuSJA3sXkb7euJMWEkFyHYubs8PsP2w77LuLv/wC3 vtge9/IfMOp3+pMEdMEUPFyQS43eA467+l8KpUp0kGpUWKaEJ1LUTpA4cwSSYAdy 8TdVq1KhSVWqqNOmgEqUSX8gH+Y7C5sAXxS+1u1059KKNFK0U0KKjrIHeFvCSA7A OZJLkvBjGmtLthr+Ym5WHPDQaich10Uu2s5lM9Up1KCllVNJpkqQyVgEqBTu4LwU i/THglKnh02i3LmL7fZ3DYb9FN735d/774tvw6lNbL1hVp01ilVToUtALan1JBVs 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 dk7S9rXd0RxAGC4NMHhu0kEXsdDqV//Z ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline; filename=style.css Content-Type: text/css; charset=utf-8; name=style.css Content-Location: http://www.gchd.cz/common/style.css Content-Transfer-Encoding: 8bit /****** CSS by AtheIste ********/ /*** Colors ***** dafaultni barva pisma: #004B81; odkazy: #2D82B4; barva pozadi v menu: #335ea5; barva vybrane polozky: #4E7FD5; pozadi praveho sloupce: #e6edf1; pozadi novinek: #1d4aa6; ****************/ /*** Widths ***** middle column: 495px ****************/ /*** Hacks ****** 1/ menu je pozicovano absolutne, aby nerozhazovalo text. Pod nim je menu_fade, ktere zastupuje misto zobrazeneho menu. Menu_fade ma modre pozadi a zaoblene rohy. Menu samo o osbe je pruhledne. 2/ Logo, menu jsou pozicovany absolutne: * 20px od shora je stranka * 25px ma vrchni lista s napisem #header * 100px ma obrazek skoly s logem #logo * ****************/ body { font: 11px Verdana, Arial, Sans !important; color: #004B81; } img { margin: 0; padding:0; border: 0; } br {clear: both; } a { text-decoration: underline; cursor: pointer; color: #2D82B4; font-style: italic; } p { clear: left; padding-top: 5px; } hr { background-color: #DFE6FE; border-color: #DFE6FE; padding: 0; height: 1px; } h4 { float: left; margin: 5px 10px 3px 0; } h3 { margin-bottom: 5px; padding-bottom: 0; color: #5289D4; } .active {font-weight: bold;} .click {cursor: pointer} .tail { clear: both; padding: 0; margin: 0; } .left { float:left;} div.left_c {float: left; width: 171px; } .right {float:right;} .center { margin: 0 auto 0 auto; text-align: center; } .odsazeni {padding: 0 5px 0 10px;} .red{color: #FF6F5B !important} div.background { width: 150px; background: url(/img/inquiry-bg.jpg); height: 10px; margin-left: 4px; } div { border: 0; margin: 0; padding:0; } div.body { width: 900px; margin: 0 auto 0 auto; clear: both; } div#header { width: 900px; background: #1e4483 url(/img/header-fill.jpg) left bottom repeat-x; height: 25px; clear: both; position: absolute; top: 20px; } div#header img { float: left; } div#header div.left { float: left; margin: 2px 0 0 10px; width: 94%; } div#header div.left h1 { font: bold 14px Verdana; color: #6ca4c7; padding: 0; margin: 0; float: left; } div#header div.left h2 { font: 14px Verdana; color: #ffffff; padding: 0; margin: 0; } div#logo { background: #d9e4ea url(/img/logo-fill.jpg) left top repeat-x; width: 900px; height: 100px; margin-bottom: 2px; position: absolute; top: 45px; } div#logo img.left { float: left; } div#logo img.right { float: right; } div#navigation { clear: both; font-size: 11px; padding: 5px 0 6px 0; position: absolute; top: 149px; /* 20+25+100+8(horni mezera) */ } /* fingovany DIV misto MENU DIVu, ktery je pozicovan absolutne */ div.menu_fade { position: absolute; top: 174px; height: 30px; clear: both; background: #1d4aa6 url(../img/menu-right.jpg) right bottom no-repeat; width: 900px; } .logged { color: #ffffff; font: bold 12px Sans, Arial; float: right; margin-top: 9px; margin-right: 6px; } div.menu { position: absolute; top: 174px; background: transparent; width: 898px; height: 30px; clear: both; z-index: 2; } div.menu ul { background: transparent; margin: 0 2px 0 0; padding: 0 0 0 0; float: left; height: 28px; overflow: hidden; } div.menu img{ float: left; } div.menu li { display: block; margin: 0; background-color: #1d4aa6; } div.menu li a { display: block; text-decoration: none; padding: 8px 10px 6px 18px; color: #ffffff; background: url(../img/menu-sipka.gif) left center no-repeat; font: bold 13px Sans, Arial, Verdana; border-bottom: 1px solid #216794; } div.menu li a.first { background: none; border: 0 solid; } div.menu li a:hover { background-color: #4E7FD5; } div.menu div.search { float: right; margin-top: 4px; margin-right: 6px; } div.menu div.search input { font: 10px Sans, Arial; } div#top_absolute { height: 210px; width: 100%; } div.widget { width: 170px; background: #B2C4E4 url(/img/column-tail.gif) left bottom no-repeat; margin-bottom: 20px; clear: left; } div.widget h2 { color: #04184D; font: bold 12px Verdana, Sans, Arial; margin: 0 0 0 0; padding: 1px 10px 2px 10px; } div.widget h2.title { color: #ffffff; font: bold 13px Verdana, Sans, Arial; margin: 0; padding: 1px 10px 10px 10px; background: #B2C4E4 url(/img/column-title.jpg) left top no-repeat; border: 0; } div.widget ul { margin: 0; padding-left: 2em; padding-bottom: 1em; } div.widget li { margin-bottom: 10px; padding-left: 0; font-size: 11px; } div.widget li a { color: #004B81; text-decoration: none; } div.widget a {text-decoration: none;} div.widget li a:hover {text-decoration: underline;} div.widget strong {font: bold 11px Verdana;} a.zajimavy { font: 12px Verdana; font-style: normal; text-decoration: none; display: block; color: #004B81; background: url(/img/a-arrow.gif) left bottom no-repeat; padding: 3px 0 1px 2em; margin: 0; border-bottom: 1px solid #7FA9DE; } div.news_col { width: 170px; background: #1d4aa6 url(/img/news-bottom.jpg) left bottom no-repeat; margin-bottom: 20px; float: left; clear: both; } div.news_col img.top { margin: 0; background: #1d4aa6 url(/img/news-top.jpg) left top no-repeat; border: 0; } div.news_col ul { padding-left: 20px; margin-top: 0; margin-left: 0; color: #ffffff; } div.news_col li { font-size: 10px; margin: 0 0 10px 0; padding: 0; color: #ffffff; } div.news_col li a { color: #ffffff; text-decoration: none; } div.news_col li strong{ font-size: 12px; } a#news_button, a#plans_button { display: block; width: 80px; height: 27px; padding-top: 2px; background: url(../img/news-button-active.jpg) left top no-repeat; color: #ffffff; position: relative; top: 9px; float: left; font: bold 13px Verdana, Sans, Arial; text-align: center; text-decoration:none; } a#plans_button { background: url(../img/plans-button-passive.gif) left top no-repeat; color: #213991; } hr.blue { width: 100%; background-color: #002081; height: 1px; } a.zajimavy:hover { background: url(/img/a-arrow:hover.gif) left bottom no-repeat; border-bottom: 1px solid #76F095; } div.middle_col {float: left; margin: 0 20px 0 20px; width: 495px; } div.middle_col h1 { font: bold 16px Verdana, Sans, Arial; margin: 5px 0 5px 10px; color: #5289D4; clear: both; } div.middle_col h2 { display: block; width: 100%; font: bold 13px Verdana, Sans, Arial; margin: 5px 0 0 3px; border-bottom: 1px solid #BAC8EA; color: #004B81; text-decoration: none; clear: both; } div.middle_col h2.title {margin-top: 25px;} div.middle_col h2 a{ color: #004B81; text-decoration:none; } div.middle_col h2 em{ color: #8D9CC3; font: italic 11px Verdana, Sans, Arial; } div.middle_col h3{ font: bold 12px Verdana, Arial, Sans; display: block; width: 430px; margin: 0; float: left; } div.middle_col img{ max-width: 497px;} div.middle_col p{ margin: 0px 0 10px 0; } div.middle_col div.bg p {margin-bottom: 10px;} div.middle_col img {margin: 0 10px 0 10px;} div.middle_col label { display: block; width: 10em; float: left; } div.middle_col label.wide { display: block; width: 16em; float: left; } div.middle_col ul {padding-left: 10px;} div.middle_col li {margin-bottom: 6px;} div.right_col{ float: right; width: 185px; height: 100%; background: #e6edf1 url(/img/right_col-top.jpg) left top no-repeat; padding: 5px 0 0 5px; } div.right_col h2 { padding: 2px 2em 0 1em; font-size: 13px; } div.right_col div.opendays {width: 180px; height: 64px; background: url(/img/right_col-opendays.jpg) right top no-repeat; } div.right_col div.opendays h2 { padding: 2px 2em 0 1em; font-size: 13px; } div.right_col div.opendays p { padding: 0 0 0 10px; font-size: 12px; margin: 0 0 0 0; position: relative; top: -5px; } div.right_col a.trida { background-color: #C2D4F1; padding: 2px; margin: 2px; display: block; float: left; width: 2em; font-style: normal; text-decoration: none; } div.right_col a.trida:hover { background-color: #095783; color: #ffffff; } div.footer {width: 100%; text-align: center; } div.footer em { font-size: 10px; color: #777777; } div.footer hr {border-color: #3A67B7;} strong.wide {width: 20em; display: block; float: left; } .line { border-bottom: 1px solid #E1E1E1; } div.middle_body { width: 700px; margin: 0 auto 0 auto; clear: both; } div.middle_body label{ display: block; float: left; width: 12em; padding-right: 1em; } div.middle_body input[type="text"],textarea { float: left; width: 400px; margin-bottom: 5px; color: #414247; } div#inquiry { padding: 0 3px 0 3px; } div#inquiry strong{ color: #273057; } h1.rozcestnik { font-size: 16px; padding-bottom: 10px; } ul.rozcestnik li a{ font: 14px Verdana; text-decoration: none; } ul.rozcestnik li a:hover {color: #100FA3;} ul.rozcestnik li { margin-left: 20px; list-style-image: url(../img/r-arrow.gif); } .pocet { float: right; } .hidden {display: none;} .strankovani { height: 18px; padding: 3px 1em 1px 1em; background: #f7f7f7; border: solid 1px #e0e0e0; margin: 1px 0 20px 5px; } .strankovani a { text-decoration: none; font-style: normal; } .fl { float: left; } .fr { float: right; } .bg { clear: both; background-color: #DCECFF; width: 92%; padding: 5px 2em 5px 2em; border: 1px solid #9ABADF; } .date { width: 2em !important; margin-right: 5px; } .date:after {content: ".";} .year { width: 4em !important; float: left; margin-right: 5px; } /* in dulezita-data */ .date_block { display: block; width: 15em; font-weight: normal; margin-right: 1em; float: left; text-align: right; } .warning {color: #ff0000;} .success {color: #00ff00;} a.download { padding: 1px 8px 1px 8px; background: #266FBA; color: #ffffff; font: bold 10px Verdana, Arial, Sans; text-decoration: none; } ul.nostyle li {list-style: none;} ul#plans {display: none;} ul#news {display: block;} ul.list li { margin: 0 0 10px 10px; } ul.list li a{ font: bold 13px Verdana, Arial, Sans; } .bold { font-weight: bold; } ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline; filename=lightbox.css Content-Type: text/css; charset=utf-8; name=lightbox.css Content-Location: http://www.gchd.cz/common/lightbox.css Content-Transfer-Encoding: 8bit #lightbox{ position: absolute; left: 0; width: 100%; z-index: 100; text-align: center; line-height: 0;} #lightbox img{ width: auto; height: auto;} #lightbox a img{ border: none; } #outerImageContainer{ position: relative; background-color: #fff; width: 250px; height: 250px; margin: 0 auto; } #imageContainer{ padding: 10px; } #loading{ position: absolute; top: 40%; left: 0%; height: 25%; width: 100%; text-align: center; line-height: 0; } #hoverNav{ position: absolute; top: 0; left: 0; height: 100%; width: 100%; z-index: 10; } #imageContainer>#hoverNav{ left: 0;} #hoverNav a{ outline: none;} #prevLink, #nextLink{ width: 49%; height: 100%; background-image: url(data:image/gif;base64,AAAA); /* Trick IE into showing hover */ display: block; } #prevLink { left: 0; float: left;} #nextLink { right: 0; float: right;} #prevLink:hover, #prevLink:visited:hover { background: url(../img/prevlabel.gif) left 15% no-repeat; } #nextLink:hover, #nextLink:visited:hover { background: url(../img/nextlabel.gif) right 15% no-repeat; } #imageDataContainer{ font: 10px Verdana, Helvetica, sans-serif; background-color: #fff; margin: 0 auto; line-height: 1.4em; overflow: auto; width: 100% ; } #imageData{ padding:0 10px; color: #666; } #imageData #imageDetails{ width: 70%; float: left; text-align: left; } #imageData #caption{ font-weight: bold; } #imageData #numberDisplay{ display: block; clear: left; padding-bottom: 1.0em; } #imageData #bottomNavClose{ width: 66px; float: right; padding-bottom: 0.7em; outline: none;} #overlay{ position: absolute; top: 0; left: 0; z-index: 90; width: 100%; height: 500px; background-color: #000; } ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline; filename=prototype.js Content-Type: application/x-javascript; charset=utf-8; name=prototype.js Content-Location: http://www.gchd.cz/common/prototype.js Content-Transfer-Encoding: Base64 LyogIFByb3RvdHlwZSBKYXZhU2NyaXB0IGZyYW1ld29yaywgdmVyc2lvbiAxLjYu MC4yCiAqICAoYykgMjAwNS0yMDA4IFNhbSBTdGVwaGVuc29uCiAqCiAqICBQcm90 b3R5cGUgaXMgZnJlZWx5IGRpc3RyaWJ1dGFibGUgdW5kZXIgdGhlIHRlcm1zIG9m IGFuIE1JVC1zdHlsZSBsaWNlbnNlLgogKiAgRm9yIGRldGFpbHMsIHNlZSB0aGUg UHJvdG90eXBlIHdlYiBzaXRlOiBodHRwOi8vd3d3LnByb3RvdHlwZWpzLm9yZy8K ICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgp2YXIgUHJvdG90eXBl ID0gewogIFZlcnNpb246ICcxLjYuMC4yJywKCiAgQnJvd3NlcjogewogICAgSUU6 ICAgICAhISh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5vcGVyYSksCiAg ICBPcGVyYTogICEhd2luZG93Lm9wZXJhLAogICAgV2ViS2l0OiBuYXZpZ2F0b3Iu dXNlckFnZW50LmluZGV4T2YoJ0FwcGxlV2ViS2l0LycpID4gLTEsCiAgICBHZWNr bzogIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignR2Vja28nKSA+IC0xICYm IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignS0hUTUwnKSA9PSAtMSwKICAg IE1vYmlsZVNhZmFyaTogISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BcHBs ZS4qTW9iaWxlLipTYWZhcmkvKQogIH0sCgogIEJyb3dzZXJGZWF0dXJlczogewog ICAgWFBhdGg6ICEhZG9jdW1lbnQuZXZhbHVhdGUsCiAgICBFbGVtZW50RXh0ZW5z aW9uczogISF3aW5kb3cuSFRNTEVsZW1lbnQsCiAgICBTcGVjaWZpY0VsZW1lbnRF eHRlbnNpb25zOgogICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5f X3Byb3RvX18gJiYKICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyku X19wcm90b19fICE9PQogICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zv cm0nKS5fX3Byb3RvX18KICB9LAoKICBTY3JpcHRGcmFnbWVudDogJzxzY3JpcHRb Xj5dKj4oW1xcU1xcc10qPyk8XC9zY3JpcHQ+JywKICBKU09ORmlsdGVyOiAvXlwv XCotc2VjdXJlLShbXHNcU10qKVwqXC9ccyokLywKCiAgZW1wdHlGdW5jdGlvbjog ZnVuY3Rpb24oKSB7IH0sCiAgSzogZnVuY3Rpb24oeCkgeyByZXR1cm4geCB9Cn07 CgppZiAoUHJvdG90eXBlLkJyb3dzZXIuTW9iaWxlU2FmYXJpKQogIFByb3RvdHlw ZS5Ccm93c2VyRmVhdHVyZXMuU3BlY2lmaWNFbGVtZW50RXh0ZW5zaW9ucyA9IGZh bHNlOwoKCi8qIEJhc2VkIG9uIEFsZXggQXJuZWxsJ3MgaW5oZXJpdGFuY2UgaW1w bGVtZW50YXRpb24uICovCnZhciBDbGFzcyA9IHsKICBjcmVhdGU6IGZ1bmN0aW9u KCkgewogICAgdmFyIHBhcmVudCA9IG51bGwsIHByb3BlcnRpZXMgPSAkQShhcmd1 bWVudHMpOwogICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHByb3BlcnRpZXNbMF0p KQogICAgICBwYXJlbnQgPSBwcm9wZXJ0aWVzLnNoaWZ0KCk7CgogICAgZnVuY3Rp b24ga2xhc3MoKSB7CiAgICAgIHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBh cmd1bWVudHMpOwogICAgfQoKICAgIE9iamVjdC5leHRlbmQoa2xhc3MsIENsYXNz Lk1ldGhvZHMpOwogICAga2xhc3Muc3VwZXJjbGFzcyA9IHBhcmVudDsKICAgIGts YXNzLnN1YmNsYXNzZXMgPSBbXTsKCiAgICBpZiAocGFyZW50KSB7CiAgICAgIHZh ciBzdWJjbGFzcyA9IGZ1bmN0aW9uKCkgeyB9OwogICAgICBzdWJjbGFzcy5wcm90 b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOwogICAgICBrbGFzcy5wcm90b3R5cGUg PSBuZXcgc3ViY2xhc3M7CiAgICAgIHBhcmVudC5zdWJjbGFzc2VzLnB1c2goa2xh c3MpOwogICAgfQoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5s ZW5ndGg7IGkrKykKICAgICAga2xhc3MuYWRkTWV0aG9kcyhwcm9wZXJ0aWVzW2ld KTsKCiAgICBpZiAoIWtsYXNzLnByb3RvdHlwZS5pbml0aWFsaXplKQogICAgICBr bGFzcy5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0 aW9uOwoKICAgIGtsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGtsYXNzOwoK ICAgIHJldHVybiBrbGFzczsKICB9Cn07CgpDbGFzcy5NZXRob2RzID0gewogIGFk ZE1ldGhvZHM6IGZ1bmN0aW9uKHNvdXJjZSkgewogICAgdmFyIGFuY2VzdG9yICAg PSB0aGlzLnN1cGVyY2xhc3MgJiYgdGhpcy5zdXBlcmNsYXNzLnByb3RvdHlwZTsK ICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc291cmNlKTsKCiAgICBp ZiAoIU9iamVjdC5rZXlzKHsgdG9TdHJpbmc6IHRydWUgfSkubGVuZ3RoKQogICAg ICBwcm9wZXJ0aWVzLnB1c2goInRvU3RyaW5nIiwgInZhbHVlT2YiKTsKCiAgICBm b3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGg7IGkgPCBs ZW5ndGg7IGkrKykgewogICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ld LCB2YWx1ZSA9IHNvdXJjZVtwcm9wZXJ0eV07CiAgICAgIGlmIChhbmNlc3RvciAm JiBPYmplY3QuaXNGdW5jdGlvbih2YWx1ZSkgJiYKICAgICAgICAgIHZhbHVlLmFy Z3VtZW50TmFtZXMoKS5maXJzdCgpID09ICIkc3VwZXIiKSB7CiAgICAgICAgdmFy IG1ldGhvZCA9IHZhbHVlLCB2YWx1ZSA9IE9iamVjdC5leHRlbmQoKGZ1bmN0aW9u KG0pIHsKICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIGFuY2Vz dG9yW21dLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfTsKICAgICAgICB9KShwcm9w ZXJ0eSkud3JhcChtZXRob2QpLCB7CiAgICAgICAgICB2YWx1ZU9mOiAgZnVuY3Rp b24oKSB7IHJldHVybiBtZXRob2QgfSwKICAgICAgICAgIHRvU3RyaW5nOiBmdW5j dGlvbigpIHsgcmV0dXJuIG1ldGhvZC50b1N0cmluZygpIH0KICAgICAgICB9KTsK ICAgICAgfQogICAgICB0aGlzLnByb3RvdHlwZVtwcm9wZXJ0eV0gPSB2YWx1ZTsK ICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9Cn07Cgp2YXIgQWJzdHJhY3QgPSB7 IH07CgpPYmplY3QuZXh0ZW5kID0gZnVuY3Rpb24oZGVzdGluYXRpb24sIHNvdXJj ZSkgewogIGZvciAodmFyIHByb3BlcnR5IGluIHNvdXJjZSkKICAgIGRlc3RpbmF0 aW9uW3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07CiAgcmV0dXJuIGRlc3Rp bmF0aW9uOwp9OwoKT2JqZWN0LmV4dGVuZChPYmplY3QsIHsKICBpbnNwZWN0OiBm dW5jdGlvbihvYmplY3QpIHsKICAgIHRyeSB7CiAgICAgIGlmIChPYmplY3QuaXNV bmRlZmluZWQob2JqZWN0KSkgcmV0dXJuICd1bmRlZmluZWQnOwogICAgICBpZiAo b2JqZWN0ID09PSBudWxsKSByZXR1cm4gJ251bGwnOwogICAgICByZXR1cm4gb2Jq ZWN0Lmluc3BlY3QgPyBvYmplY3QuaW5zcGVjdCgpIDogU3RyaW5nKG9iamVjdCk7 CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGlmIChlIGluc3RhbmNlb2YgUmFuZ2VF cnJvcikgcmV0dXJuICcuLi4nOwogICAgICB0aHJvdyBlOwogICAgfQogIH0sCgog IHRvSlNPTjogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICB2YXIgdHlwZSA9IHR5cGVv ZiBvYmplY3Q7CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSAndW5kZWZp bmVkJzoKICAgICAgY2FzZSAnZnVuY3Rpb24nOgogICAgICBjYXNlICd1bmtub3du JzogcmV0dXJuOwogICAgICBjYXNlICdib29sZWFuJzogcmV0dXJuIG9iamVjdC50 b1N0cmluZygpOwogICAgfQoKICAgIGlmIChvYmplY3QgPT09IG51bGwpIHJldHVy biAnbnVsbCc7CiAgICBpZiAob2JqZWN0LnRvSlNPTikgcmV0dXJuIG9iamVjdC50 b0pTT04oKTsKICAgIGlmIChPYmplY3QuaXNFbGVtZW50KG9iamVjdCkpIHJldHVy bjsKCiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgcHJvcGVydHkg aW4gb2JqZWN0KSB7CiAgICAgIHZhciB2YWx1ZSA9IE9iamVjdC50b0pTT04ob2Jq ZWN0W3Byb3BlcnR5XSk7CiAgICAgIGlmICghT2JqZWN0LmlzVW5kZWZpbmVkKHZh bHVlKSkKICAgICAgICByZXN1bHRzLnB1c2gocHJvcGVydHkudG9KU09OKCkgKyAn OiAnICsgdmFsdWUpOwogICAgfQoKICAgIHJldHVybiAneycgKyByZXN1bHRzLmpv aW4oJywgJykgKyAnfSc7CiAgfSwKCiAgdG9RdWVyeVN0cmluZzogZnVuY3Rpb24o b2JqZWN0KSB7CiAgICByZXR1cm4gJEgob2JqZWN0KS50b1F1ZXJ5U3RyaW5nKCk7 CiAgfSwKCiAgdG9IVE1MOiBmdW5jdGlvbihvYmplY3QpIHsKICAgIHJldHVybiBv YmplY3QgJiYgb2JqZWN0LnRvSFRNTCA/IG9iamVjdC50b0hUTUwoKSA6IFN0cmlu Zy5pbnRlcnByZXQob2JqZWN0KTsKICB9LAoKICBrZXlzOiBmdW5jdGlvbihvYmpl Y3QpIHsKICAgIHZhciBrZXlzID0gW107CiAgICBmb3IgKHZhciBwcm9wZXJ0eSBp biBvYmplY3QpCiAgICAgIGtleXMucHVzaChwcm9wZXJ0eSk7CiAgICByZXR1cm4g a2V5czsKICB9LAoKICB2YWx1ZXM6IGZ1bmN0aW9uKG9iamVjdCkgewogICAgdmFy IHZhbHVlcyA9IFtdOwogICAgZm9yICh2YXIgcHJvcGVydHkgaW4gb2JqZWN0KQog ICAgICB2YWx1ZXMucHVzaChvYmplY3RbcHJvcGVydHldKTsKICAgIHJldHVybiB2 YWx1ZXM7CiAgfSwKCiAgY2xvbmU6IGZ1bmN0aW9uKG9iamVjdCkgewogICAgcmV0 dXJuIE9iamVjdC5leHRlbmQoeyB9LCBvYmplY3QpOwogIH0sCgogIGlzRWxlbWVu dDogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVj dC5ub2RlVHlwZSA9PSAxOwogIH0sCgogIGlzQXJyYXk6IGZ1bmN0aW9uKG9iamVj dCkgewogICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIHR5cGVvZiBvYmplY3Qg PT0gIm9iamVjdCIgJiYKICAgICAgJ3NwbGljZScgaW4gb2JqZWN0ICYmICdqb2lu JyBpbiBvYmplY3Q7CiAgfSwKCiAgaXNIYXNoOiBmdW5jdGlvbihvYmplY3QpIHsK ICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBIYXNoOwogIH0sCgogIGlzRnVu Y3Rpb246IGZ1bmN0aW9uKG9iamVjdCkgewogICAgcmV0dXJuIHR5cGVvZiBvYmpl Y3QgPT0gImZ1bmN0aW9uIjsKICB9LAoKICBpc1N0cmluZzogZnVuY3Rpb24ob2Jq ZWN0KSB7CiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PSAic3RyaW5nIjsKICB9 LAoKICBpc051bWJlcjogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICByZXR1cm4gdHlw ZW9mIG9iamVjdCA9PSAibnVtYmVyIjsKICB9LAoKICBpc1VuZGVmaW5lZDogZnVu Y3Rpb24ob2JqZWN0KSB7CiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PSAidW5k ZWZpbmVkIjsKICB9Cn0pOwoKT2JqZWN0LmV4dGVuZChGdW5jdGlvbi5wcm90b3R5 cGUsIHsKICBhcmd1bWVudE5hbWVzOiBmdW5jdGlvbigpIHsKICAgIHZhciBuYW1l cyA9IHRoaXMudG9TdHJpbmcoKS5tYXRjaCgvXltcc1woXSpmdW5jdGlvblteKF0q XCgoLio/KVwpLylbMV0uc3BsaXQoIiwiKS5pbnZva2UoInN0cmlwIik7CiAgICBy ZXR1cm4gbmFtZXMubGVuZ3RoID09IDEgJiYgIW5hbWVzWzBdID8gW10gOiBuYW1l czsKICB9LAoKICBiaW5kOiBmdW5jdGlvbigpIHsKICAgIGlmIChhcmd1bWVudHMu bGVuZ3RoIDwgMiAmJiBPYmplY3QuaXNVbmRlZmluZWQoYXJndW1lbnRzWzBdKSkg cmV0dXJuIHRoaXM7CiAgICB2YXIgX19tZXRob2QgPSB0aGlzLCBhcmdzID0gJEEo YXJndW1lbnRzKSwgb2JqZWN0ID0gYXJncy5zaGlmdCgpOwogICAgcmV0dXJuIGZ1 bmN0aW9uKCkgewogICAgICByZXR1cm4gX19tZXRob2QuYXBwbHkob2JqZWN0LCBh cmdzLmNvbmNhdCgkQShhcmd1bWVudHMpKSk7CiAgICB9CiAgfSwKCiAgYmluZEFz RXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24oKSB7CiAgICB2YXIgX19tZXRob2QgPSB0 aGlzLCBhcmdzID0gJEEoYXJndW1lbnRzKSwgb2JqZWN0ID0gYXJncy5zaGlmdCgp OwogICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIHJldHVybiBfX21l dGhvZC5hcHBseShvYmplY3QsIFtldmVudCB8fCB3aW5kb3cuZXZlbnRdLmNvbmNh dChhcmdzKSk7CiAgICB9CiAgfSwKCiAgY3Vycnk6IGZ1bmN0aW9uKCkgewogICAg aWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGhpczsKICAgIHZhciBfX21l dGhvZCA9IHRoaXMsIGFyZ3MgPSAkQShhcmd1bWVudHMpOwogICAgcmV0dXJuIGZ1 bmN0aW9uKCkgewogICAgICByZXR1cm4gX19tZXRob2QuYXBwbHkodGhpcywgYXJn cy5jb25jYXQoJEEoYXJndW1lbnRzKSkpOwogICAgfQogIH0sCgogIGRlbGF5OiBm dW5jdGlvbigpIHsKICAgIHZhciBfX21ldGhvZCA9IHRoaXMsIGFyZ3MgPSAkQShh cmd1bWVudHMpLCB0aW1lb3V0ID0gYXJncy5zaGlmdCgpICogMTAwMDsKICAgIHJl dHVybiB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgcmV0dXJu IF9fbWV0aG9kLmFwcGx5KF9fbWV0aG9kLCBhcmdzKTsKICAgIH0sIHRpbWVvdXQp OwogIH0sCgogIHdyYXA6IGZ1bmN0aW9uKHdyYXBwZXIpIHsKICAgIHZhciBfX21l dGhvZCA9IHRoaXM7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVy biB3cmFwcGVyLmFwcGx5KHRoaXMsIFtfX21ldGhvZC5iaW5kKHRoaXMpXS5jb25j YXQoJEEoYXJndW1lbnRzKSkpOwogICAgfQogIH0sCgogIG1ldGhvZGl6ZTogZnVu Y3Rpb24oKSB7CiAgICBpZiAodGhpcy5fbWV0aG9kaXplZCkgcmV0dXJuIHRoaXMu X21ldGhvZGl6ZWQ7CiAgICB2YXIgX19tZXRob2QgPSB0aGlzOwogICAgcmV0dXJu IHRoaXMuX21ldGhvZGl6ZWQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIF9f bWV0aG9kLmFwcGx5KG51bGwsIFt0aGlzXS5jb25jYXQoJEEoYXJndW1lbnRzKSkp OwogICAgfTsKICB9Cn0pOwoKRnVuY3Rpb24ucHJvdG90eXBlLmRlZmVyID0gRnVu Y3Rpb24ucHJvdG90eXBlLmRlbGF5LmN1cnJ5KDAuMDEpOwoKRGF0ZS5wcm90b3R5 cGUudG9KU09OID0gZnVuY3Rpb24oKSB7CiAgcmV0dXJuICciJyArIHRoaXMuZ2V0 VVRDRnVsbFllYXIoKSArICctJyArCiAgICAodGhpcy5nZXRVVENNb250aCgpICsg MSkudG9QYWRkZWRTdHJpbmcoMikgKyAnLScgKwogICAgdGhpcy5nZXRVVENEYXRl KCkudG9QYWRkZWRTdHJpbmcoMikgKyAnVCcgKwogICAgdGhpcy5nZXRVVENIb3Vy cygpLnRvUGFkZGVkU3RyaW5nKDIpICsgJzonICsKICAgIHRoaXMuZ2V0VVRDTWlu dXRlcygpLnRvUGFkZGVkU3RyaW5nKDIpICsgJzonICsKICAgIHRoaXMuZ2V0VVRD U2Vjb25kcygpLnRvUGFkZGVkU3RyaW5nKDIpICsgJ1oiJzsKfTsKCnZhciBUcnkg PSB7CiAgdGhlc2U6IGZ1bmN0aW9uKCkgewogICAgdmFyIHJldHVyblZhbHVlOwoK ICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBp IDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGxhbWJkYSA9IGFyZ3VtZW50c1tp XTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm5WYWx1ZSA9IGxhbWJkYSgpOwog ICAgICAgIGJyZWFrOwogICAgICB9IGNhdGNoIChlKSB7IH0KICAgIH0KCiAgICBy ZXR1cm4gcmV0dXJuVmFsdWU7CiAgfQp9OwoKUmVnRXhwLnByb3RvdHlwZS5tYXRj aCA9IFJlZ0V4cC5wcm90b3R5cGUudGVzdDsKClJlZ0V4cC5lc2NhcGUgPSBmdW5j dGlvbihzdHIpIHsKICByZXR1cm4gU3RyaW5nKHN0cikucmVwbGFjZSgvKFsuKis/ Xj0hOiR7fSgpfFtcXVwvXFxdKS9nLCAnXFwkMScpOwp9OwoKLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSovCgp2YXIgUGVyaW9kaWNhbEV4ZWN1dGVyID0gQ2xh c3MuY3JlYXRlKHsKICBpbml0aWFsaXplOiBmdW5jdGlvbihjYWxsYmFjaywgZnJl cXVlbmN5KSB7CiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICB0aGlz LmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsKICAgIHRoaXMuY3VycmVudGx5RXhlY3V0 aW5nID0gZmFsc2U7CgogICAgdGhpcy5yZWdpc3RlckNhbGxiYWNrKCk7CiAgfSwK CiAgcmVnaXN0ZXJDYWxsYmFjazogZnVuY3Rpb24oKSB7CiAgICB0aGlzLnRpbWVy ID0gc2V0SW50ZXJ2YWwodGhpcy5vblRpbWVyRXZlbnQuYmluZCh0aGlzKSwgdGhp cy5mcmVxdWVuY3kgKiAxMDAwKTsKICB9LAoKICBleGVjdXRlOiBmdW5jdGlvbigp IHsKICAgIHRoaXMuY2FsbGJhY2sodGhpcyk7CiAgfSwKCiAgc3RvcDogZnVuY3Rp b24oKSB7CiAgICBpZiAoIXRoaXMudGltZXIpIHJldHVybjsKICAgIGNsZWFySW50 ZXJ2YWwodGhpcy50aW1lcik7CiAgICB0aGlzLnRpbWVyID0gbnVsbDsKICB9LAoK ICBvblRpbWVyRXZlbnQ6IGZ1bmN0aW9uKCkgewogICAgaWYgKCF0aGlzLmN1cnJl bnRseUV4ZWN1dGluZykgewogICAgICB0cnkgewogICAgICAgIHRoaXMuY3VycmVu dGx5RXhlY3V0aW5nID0gdHJ1ZTsKICAgICAgICB0aGlzLmV4ZWN1dGUoKTsKICAg ICAgfSBmaW5hbGx5IHsKICAgICAgICB0aGlzLmN1cnJlbnRseUV4ZWN1dGluZyA9 IGZhbHNlOwogICAgICB9CiAgICB9CiAgfQp9KTsKT2JqZWN0LmV4dGVuZChTdHJp bmcsIHsKICBpbnRlcnByZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICByZXR1cm4g dmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTsKICB9LAogIHNwZWNp YWxDaGFyOiB7CiAgICAnXGInOiAnXFxiJywKICAgICdcdCc6ICdcXHQnLAogICAg J1xuJzogJ1xcbicsCiAgICAnXGYnOiAnXFxmJywKICAgICdccic6ICdcXHInLAog ICAgJ1xcJzogJ1xcXFwnCiAgfQp9KTsKCk9iamVjdC5leHRlbmQoU3RyaW5nLnBy b3RvdHlwZSwgewogIGdzdWI6IGZ1bmN0aW9uKHBhdHRlcm4sIHJlcGxhY2VtZW50 KSB7CiAgICB2YXIgcmVzdWx0ID0gJycsIHNvdXJjZSA9IHRoaXMsIG1hdGNoOwog ICAgcmVwbGFjZW1lbnQgPSBhcmd1bWVudHMuY2FsbGVlLnByZXBhcmVSZXBsYWNl bWVudChyZXBsYWNlbWVudCk7CgogICAgd2hpbGUgKHNvdXJjZS5sZW5ndGggPiAw KSB7CiAgICAgIGlmIChtYXRjaCA9IHNvdXJjZS5tYXRjaChwYXR0ZXJuKSkgewog ICAgICAgIHJlc3VsdCArPSBzb3VyY2Uuc2xpY2UoMCwgbWF0Y2guaW5kZXgpOwog ICAgICAgIHJlc3VsdCArPSBTdHJpbmcuaW50ZXJwcmV0KHJlcGxhY2VtZW50KG1h dGNoKSk7CiAgICAgICAgc291cmNlICA9IHNvdXJjZS5zbGljZShtYXRjaC5pbmRl eCArIG1hdGNoWzBdLmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVz dWx0ICs9IHNvdXJjZSwgc291cmNlID0gJyc7CiAgICAgIH0KICAgIH0KICAgIHJl dHVybiByZXN1bHQ7CiAgfSwKCiAgc3ViOiBmdW5jdGlvbihwYXR0ZXJuLCByZXBs YWNlbWVudCwgY291bnQpIHsKICAgIHJlcGxhY2VtZW50ID0gdGhpcy5nc3ViLnBy ZXBhcmVSZXBsYWNlbWVudChyZXBsYWNlbWVudCk7CiAgICBjb3VudCA9IE9iamVj dC5pc1VuZGVmaW5lZChjb3VudCkgPyAxIDogY291bnQ7CgogICAgcmV0dXJuIHRo aXMuZ3N1YihwYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCkgewogICAgICBpZiAoLS1j b3VudCA8IDApIHJldHVybiBtYXRjaFswXTsKICAgICAgcmV0dXJuIHJlcGxhY2Vt ZW50KG1hdGNoKTsKICAgIH0pOwogIH0sCgogIHNjYW46IGZ1bmN0aW9uKHBhdHRl cm4sIGl0ZXJhdG9yKSB7CiAgICB0aGlzLmdzdWIocGF0dGVybiwgaXRlcmF0b3Ip OwogICAgcmV0dXJuIFN0cmluZyh0aGlzKTsKICB9LAoKICB0cnVuY2F0ZTogZnVu Y3Rpb24obGVuZ3RoLCB0cnVuY2F0aW9uKSB7CiAgICBsZW5ndGggPSBsZW5ndGgg fHwgMzA7CiAgICB0cnVuY2F0aW9uID0gT2JqZWN0LmlzVW5kZWZpbmVkKHRydW5j YXRpb24pID8gJy4uLicgOiB0cnVuY2F0aW9uOwogICAgcmV0dXJuIHRoaXMubGVu Z3RoID4gbGVuZ3RoID8KICAgICAgdGhpcy5zbGljZSgwLCBsZW5ndGggLSB0cnVu Y2F0aW9uLmxlbmd0aCkgKyB0cnVuY2F0aW9uIDogU3RyaW5nKHRoaXMpOwogIH0s CgogIHN0cmlwOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLnJlcGxhY2Uo L15ccysvLCAnJykucmVwbGFjZSgvXHMrJC8sICcnKTsKICB9LAoKICBzdHJpcFRh Z3M6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvPFwvP1te Pl0rPi9naSwgJycpOwogIH0sCgogIHN0cmlwU2NyaXB0czogZnVuY3Rpb24oKSB7 CiAgICByZXR1cm4gdGhpcy5yZXBsYWNlKG5ldyBSZWdFeHAoUHJvdG90eXBlLlNj cmlwdEZyYWdtZW50LCAnaW1nJyksICcnKTsKICB9LAoKICBleHRyYWN0U2NyaXB0 czogZnVuY3Rpb24oKSB7CiAgICB2YXIgbWF0Y2hBbGwgPSBuZXcgUmVnRXhwKFBy b3RvdHlwZS5TY3JpcHRGcmFnbWVudCwgJ2ltZycpOwogICAgdmFyIG1hdGNoT25l ID0gbmV3IFJlZ0V4cChQcm90b3R5cGUuU2NyaXB0RnJhZ21lbnQsICdpbScpOwog ICAgcmV0dXJuICh0aGlzLm1hdGNoKG1hdGNoQWxsKSB8fCBbXSkubWFwKGZ1bmN0 aW9uKHNjcmlwdFRhZykgewogICAgICByZXR1cm4gKHNjcmlwdFRhZy5tYXRjaCht YXRjaE9uZSkgfHwgWycnLCAnJ10pWzFdOwogICAgfSk7CiAgfSwKCiAgZXZhbFNj cmlwdHM6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuZXh0cmFjdFNjcmlw dHMoKS5tYXAoZnVuY3Rpb24oc2NyaXB0KSB7IHJldHVybiBldmFsKHNjcmlwdCkg fSk7CiAgfSwKCiAgZXNjYXBlSFRNTDogZnVuY3Rpb24oKSB7CiAgICB2YXIgc2Vs ZiA9IGFyZ3VtZW50cy5jYWxsZWU7CiAgICBzZWxmLnRleHQuZGF0YSA9IHRoaXM7 CiAgICByZXR1cm4gc2VsZi5kaXYuaW5uZXJIVE1MOwogIH0sCgogIHVuZXNjYXBl SFRNTDogZnVuY3Rpb24oKSB7CiAgICB2YXIgZGl2ID0gbmV3IEVsZW1lbnQoJ2Rp dicpOwogICAgZGl2LmlubmVySFRNTCA9IHRoaXMuc3RyaXBUYWdzKCk7CiAgICBy ZXR1cm4gZGl2LmNoaWxkTm9kZXNbMF0gPyAoZGl2LmNoaWxkTm9kZXMubGVuZ3Ro ID4gMSA/CiAgICAgICRBKGRpdi5jaGlsZE5vZGVzKS5pbmplY3QoJycsIGZ1bmN0 aW9uKG1lbW8sIG5vZGUpIHsgcmV0dXJuIG1lbW8rbm9kZS5ub2RlVmFsdWUgfSkg OgogICAgICBkaXYuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWUpIDogJyc7CiAgfSwK CiAgdG9RdWVyeVBhcmFtczogZnVuY3Rpb24oc2VwYXJhdG9yKSB7CiAgICB2YXIg bWF0Y2ggPSB0aGlzLnN0cmlwKCkubWF0Y2goLyhbXj8jXSopKCMuKik/JC8pOwog ICAgaWYgKCFtYXRjaCkgcmV0dXJuIHsgfTsKCiAgICByZXR1cm4gbWF0Y2hbMV0u c3BsaXQoc2VwYXJhdG9yIHx8ICcmJykuaW5qZWN0KHsgfSwgZnVuY3Rpb24oaGFz aCwgcGFpcikgewogICAgICBpZiAoKHBhaXIgPSBwYWlyLnNwbGl0KCc9JykpWzBd KSB7CiAgICAgICAgdmFyIGtleSA9IGRlY29kZVVSSUNvbXBvbmVudChwYWlyLnNo aWZ0KCkpOwogICAgICAgIHZhciB2YWx1ZSA9IHBhaXIubGVuZ3RoID4gMSA/IHBh aXIuam9pbignPScpIDogcGFpclswXTsKICAgICAgICBpZiAodmFsdWUgIT0gdW5k ZWZpbmVkKSB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7CgogICAg ICAgIGlmIChrZXkgaW4gaGFzaCkgewogICAgICAgICAgaWYgKCFPYmplY3QuaXNB cnJheShoYXNoW2tleV0pKSBoYXNoW2tleV0gPSBbaGFzaFtrZXldXTsKICAgICAg ICAgIGhhc2hba2V5XS5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgZWxz ZSBoYXNoW2tleV0gPSB2YWx1ZTsKICAgICAgfQogICAgICByZXR1cm4gaGFzaDsK ICAgIH0pOwogIH0sCgogIHRvQXJyYXk6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJu IHRoaXMuc3BsaXQoJycpOwogIH0sCgogIHN1Y2M6IGZ1bmN0aW9uKCkgewogICAg cmV0dXJuIHRoaXMuc2xpY2UoMCwgdGhpcy5sZW5ndGggLSAxKSArCiAgICAgIFN0 cmluZy5mcm9tQ2hhckNvZGUodGhpcy5jaGFyQ29kZUF0KHRoaXMubGVuZ3RoIC0g MSkgKyAxKTsKICB9LAoKICB0aW1lczogZnVuY3Rpb24oY291bnQpIHsKICAgIHJl dHVybiBjb3VudCA8IDEgPyAnJyA6IG5ldyBBcnJheShjb3VudCArIDEpLmpvaW4o dGhpcyk7CiAgfSwKCiAgY2FtZWxpemU6IGZ1bmN0aW9uKCkgewogICAgdmFyIHBh cnRzID0gdGhpcy5zcGxpdCgnLScpLCBsZW4gPSBwYXJ0cy5sZW5ndGg7CiAgICBp ZiAobGVuID09IDEpIHJldHVybiBwYXJ0c1swXTsKCiAgICB2YXIgY2FtZWxpemVk ID0gdGhpcy5jaGFyQXQoMCkgPT0gJy0nCiAgICAgID8gcGFydHNbMF0uY2hhckF0 KDApLnRvVXBwZXJDYXNlKCkgKyBwYXJ0c1swXS5zdWJzdHJpbmcoMSkKICAgICAg OiBwYXJ0c1swXTsKCiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKQog ICAgICBjYW1lbGl6ZWQgKz0gcGFydHNbaV0uY2hhckF0KDApLnRvVXBwZXJDYXNl KCkgKyBwYXJ0c1tpXS5zdWJzdHJpbmcoMSk7CgogICAgcmV0dXJuIGNhbWVsaXpl ZDsKICB9LAoKICBjYXBpdGFsaXplOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0 aGlzLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5zdWJzdHJpbmcoMSku dG9Mb3dlckNhc2UoKTsKICB9LAoKICB1bmRlcnNjb3JlOiBmdW5jdGlvbigpIHsK ICAgIHJldHVybiB0aGlzLmdzdWIoLzo6LywgJy8nKS5nc3ViKC8oW0EtWl0rKShb QS1aXVthLXpdKS8sJyN7MX1fI3syfScpLmdzdWIoLyhbYS16XGRdKShbQS1aXSkv LCcjezF9XyN7Mn0nKS5nc3ViKC8tLywnXycpLnRvTG93ZXJDYXNlKCk7CiAgfSwK CiAgZGFzaGVyaXplOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLmdzdWIo L18vLCctJyk7CiAgfSwKCiAgaW5zcGVjdDogZnVuY3Rpb24odXNlRG91YmxlUXVv dGVzKSB7CiAgICB2YXIgZXNjYXBlZFN0cmluZyA9IHRoaXMuZ3N1YigvW1x4MDAt XHgxZlxcXS8sIGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgIHZhciBjaGFyYWN0ZXIg PSBTdHJpbmcuc3BlY2lhbENoYXJbbWF0Y2hbMF1dOwogICAgICByZXR1cm4gY2hh cmFjdGVyID8gY2hhcmFjdGVyIDogJ1xcdTAwJyArIG1hdGNoWzBdLmNoYXJDb2Rl QXQoKS50b1BhZGRlZFN0cmluZygyLCAxNik7CiAgICB9KTsKICAgIGlmICh1c2VE b3VibGVRdW90ZXMpIHJldHVybiAnIicgKyBlc2NhcGVkU3RyaW5nLnJlcGxhY2Uo LyIvZywgJ1xcIicpICsgJyInOwogICAgcmV0dXJuICInIiArIGVzY2FwZWRTdHJp bmcucmVwbGFjZSgvJy9nLCAnXFxcJycpICsgIiciOwogIH0sCgogIHRvSlNPTjog ZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5pbnNwZWN0KHRydWUpOwogIH0s CgogIHVuZmlsdGVySlNPTjogZnVuY3Rpb24oZmlsdGVyKSB7CiAgICByZXR1cm4g dGhpcy5zdWIoZmlsdGVyIHx8IFByb3RvdHlwZS5KU09ORmlsdGVyLCAnI3sxfScp OwogIH0sCgogIGlzSlNPTjogZnVuY3Rpb24oKSB7CiAgICB2YXIgc3RyID0gdGhp czsKICAgIGlmIChzdHIuYmxhbmsoKSkgcmV0dXJuIGZhbHNlOwogICAgc3RyID0g dGhpcy5yZXBsYWNlKC9cXC4vZywgJ0AnKS5yZXBsYWNlKC8iW14iXFxcblxyXSoi L2csICcnKTsKICAgIHJldHVybiAoL15bLDp7fVxbXF0wLTkuXC0rRWFlZmxuci11 IFxuXHJcdF0qJC8pLnRlc3Qoc3RyKTsKICB9LAoKICBldmFsSlNPTjogZnVuY3Rp b24oc2FuaXRpemUpIHsKICAgIHZhciBqc29uID0gdGhpcy51bmZpbHRlckpTT04o KTsKICAgIHRyeSB7CiAgICAgIGlmICghc2FuaXRpemUgfHwganNvbi5pc0pTT04o KSkgcmV0dXJuIGV2YWwoJygnICsganNvbiArICcpJyk7CiAgICB9IGNhdGNoIChl KSB7IH0KICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQmFkbHkgZm9ybWVkIEpT T04gc3RyaW5nOiAnICsgdGhpcy5pbnNwZWN0KCkpOwogIH0sCgogIGluY2x1ZGU6 IGZ1bmN0aW9uKHBhdHRlcm4pIHsKICAgIHJldHVybiB0aGlzLmluZGV4T2YocGF0 dGVybikgPiAtMTsKICB9LAoKICBzdGFydHNXaXRoOiBmdW5jdGlvbihwYXR0ZXJu KSB7CiAgICByZXR1cm4gdGhpcy5pbmRleE9mKHBhdHRlcm4pID09PSAwOwogIH0s CgogIGVuZHNXaXRoOiBmdW5jdGlvbihwYXR0ZXJuKSB7CiAgICB2YXIgZCA9IHRo aXMubGVuZ3RoIC0gcGF0dGVybi5sZW5ndGg7CiAgICByZXR1cm4gZCA+PSAwICYm IHRoaXMubGFzdEluZGV4T2YocGF0dGVybikgPT09IGQ7CiAgfSwKCiAgZW1wdHk6 IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMgPT0gJyc7CiAgfSwKCiAgYmxh bms6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIC9eXHMqJC8udGVzdCh0aGlzKTsK ICB9LAoKICBpbnRlcnBvbGF0ZTogZnVuY3Rpb24ob2JqZWN0LCBwYXR0ZXJuKSB7 CiAgICByZXR1cm4gbmV3IFRlbXBsYXRlKHRoaXMsIHBhdHRlcm4pLmV2YWx1YXRl KG9iamVjdCk7CiAgfQp9KTsKCmlmIChQcm90b3R5cGUuQnJvd3Nlci5XZWJLaXQg fHwgUHJvdG90eXBlLkJyb3dzZXIuSUUpIE9iamVjdC5leHRlbmQoU3RyaW5nLnBy b3RvdHlwZSwgewogIGVzY2FwZUhUTUw6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJu IHRoaXMucmVwbGFjZSgvJi9nLCcmYW1wOycpLnJlcGxhY2UoLzwvZywnJmx0Oycp LnJlcGxhY2UoLz4vZywnJmd0OycpOwogIH0sCiAgdW5lc2NhcGVIVE1MOiBmdW5j dGlvbigpIHsKICAgIHJldHVybiB0aGlzLnJlcGxhY2UoLyZhbXA7L2csJyYnKS5y ZXBsYWNlKC8mbHQ7L2csJzwnKS5yZXBsYWNlKC8mZ3Q7L2csJz4nKTsKICB9Cn0p OwoKU3RyaW5nLnByb3RvdHlwZS5nc3ViLnByZXBhcmVSZXBsYWNlbWVudCA9IGZ1 bmN0aW9uKHJlcGxhY2VtZW50KSB7CiAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHJl cGxhY2VtZW50KSkgcmV0dXJuIHJlcGxhY2VtZW50OwogIHZhciB0ZW1wbGF0ZSA9 IG5ldyBUZW1wbGF0ZShyZXBsYWNlbWVudCk7CiAgcmV0dXJuIGZ1bmN0aW9uKG1h dGNoKSB7IHJldHVybiB0ZW1wbGF0ZS5ldmFsdWF0ZShtYXRjaCkgfTsKfTsKClN0 cmluZy5wcm90b3R5cGUucGFyc2VRdWVyeSA9IFN0cmluZy5wcm90b3R5cGUudG9R dWVyeVBhcmFtczsKCk9iamVjdC5leHRlbmQoU3RyaW5nLnByb3RvdHlwZS5lc2Nh cGVIVE1MLCB7CiAgZGl2OiAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyks CiAgdGV4dDogZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpCn0pOwoKd2l0aCAo U3RyaW5nLnByb3RvdHlwZS5lc2NhcGVIVE1MKSBkaXYuYXBwZW5kQ2hpbGQodGV4 dCk7Cgp2YXIgVGVtcGxhdGUgPSBDbGFzcy5jcmVhdGUoewogIGluaXRpYWxpemU6 IGZ1bmN0aW9uKHRlbXBsYXRlLCBwYXR0ZXJuKSB7CiAgICB0aGlzLnRlbXBsYXRl ID0gdGVtcGxhdGUudG9TdHJpbmcoKTsKICAgIHRoaXMucGF0dGVybiA9IHBhdHRl cm4gfHwgVGVtcGxhdGUuUGF0dGVybjsKICB9LAoKICBldmFsdWF0ZTogZnVuY3Rp b24ob2JqZWN0KSB7CiAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24ob2JqZWN0LnRv VGVtcGxhdGVSZXBsYWNlbWVudHMpKQogICAgICBvYmplY3QgPSBvYmplY3QudG9U ZW1wbGF0ZVJlcGxhY2VtZW50cygpOwoKICAgIHJldHVybiB0aGlzLnRlbXBsYXRl LmdzdWIodGhpcy5wYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCkgewogICAgICBpZiAo b2JqZWN0ID09IG51bGwpIHJldHVybiAnJzsKCiAgICAgIHZhciBiZWZvcmUgPSBt YXRjaFsxXSB8fCAnJzsKICAgICAgaWYgKGJlZm9yZSA9PSAnXFwnKSByZXR1cm4g bWF0Y2hbMl07CgogICAgICB2YXIgY3R4ID0gb2JqZWN0LCBleHByID0gbWF0Y2hb M107CiAgICAgIHZhciBwYXR0ZXJuID0gL14oW14uW10rfFxbKCg/Oi4qP1teXFxd KT8pXF0pKFwufFxbfCQpLzsKICAgICAgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoZXhw cik7CiAgICAgIGlmIChtYXRjaCA9PSBudWxsKSByZXR1cm4gYmVmb3JlOwoKICAg ICAgd2hpbGUgKG1hdGNoICE9IG51bGwpIHsKICAgICAgICB2YXIgY29tcCA9IG1h dGNoWzFdLnN0YXJ0c1dpdGgoJ1snKSA/IG1hdGNoWzJdLmdzdWIoJ1xcXFxdJywg J10nKSA6IG1hdGNoWzFdOwogICAgICAgIGN0eCA9IGN0eFtjb21wXTsKICAgICAg ICBpZiAobnVsbCA9PSBjdHggfHwgJycgPT0gbWF0Y2hbM10pIGJyZWFrOwogICAg ICAgIGV4cHIgPSBleHByLnN1YnN0cmluZygnWycgPT0gbWF0Y2hbM10gPyBtYXRj aFsxXS5sZW5ndGggOiBtYXRjaFswXS5sZW5ndGgpOwogICAgICAgIG1hdGNoID0g cGF0dGVybi5leGVjKGV4cHIpOwogICAgICB9CgogICAgICByZXR1cm4gYmVmb3Jl ICsgU3RyaW5nLmludGVycHJldChjdHgpOwogICAgfSk7CiAgfQp9KTsKVGVtcGxh dGUuUGF0dGVybiA9IC8oXnwufFxyfFxuKSgjXHsoLio/KVx9KS87Cgp2YXIgJGJy ZWFrID0geyB9OwoKdmFyIEVudW1lcmFibGUgPSB7CiAgZWFjaDogZnVuY3Rpb24o aXRlcmF0b3IsIGNvbnRleHQpIHsKICAgIHZhciBpbmRleCA9IDA7CiAgICBpdGVy YXRvciA9IGl0ZXJhdG9yLmJpbmQoY29udGV4dCk7CiAgICB0cnkgewogICAgICB0 aGlzLl9lYWNoKGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgaXRlcmF0b3IodmFs dWUsIGluZGV4KyspOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAg aWYgKGUgIT0gJGJyZWFrKSB0aHJvdyBlOwogICAgfQogICAgcmV0dXJuIHRoaXM7 CiAgfSwKCiAgZWFjaFNsaWNlOiBmdW5jdGlvbihudW1iZXIsIGl0ZXJhdG9yLCBj b250ZXh0KSB7CiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuYmlu ZChjb250ZXh0KSA6IFByb3RvdHlwZS5LOwogICAgdmFyIGluZGV4ID0gLW51bWJl ciwgc2xpY2VzID0gW10sIGFycmF5ID0gdGhpcy50b0FycmF5KCk7CiAgICB3aGls ZSAoKGluZGV4ICs9IG51bWJlcikgPCBhcnJheS5sZW5ndGgpCiAgICAgIHNsaWNl cy5wdXNoKGFycmF5LnNsaWNlKGluZGV4LCBpbmRleCtudW1iZXIpKTsKICAgIHJl dHVybiBzbGljZXMuY29sbGVjdChpdGVyYXRvciwgY29udGV4dCk7CiAgfSwKCiAg YWxsOiBmdW5jdGlvbihpdGVyYXRvciwgY29udGV4dCkgewogICAgaXRlcmF0b3Ig PSBpdGVyYXRvciA/IGl0ZXJhdG9yLmJpbmQoY29udGV4dCkgOiBQcm90b3R5cGUu SzsKICAgIHZhciByZXN1bHQgPSB0cnVlOwogICAgdGhpcy5lYWNoKGZ1bmN0aW9u KHZhbHVlLCBpbmRleCkgewogICAgICByZXN1bHQgPSByZXN1bHQgJiYgISFpdGVy YXRvcih2YWx1ZSwgaW5kZXgpOwogICAgICBpZiAoIXJlc3VsdCkgdGhyb3cgJGJy ZWFrOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0sCgogIGFueTogZnVu Y3Rpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKICAgIGl0ZXJhdG9yID0gaXRlcmF0 b3IgPyBpdGVyYXRvci5iaW5kKGNvbnRleHQpIDogUHJvdG90eXBlLks7CiAgICB2 YXIgcmVzdWx0ID0gZmFsc2U7CiAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUs IGluZGV4KSB7CiAgICAgIGlmIChyZXN1bHQgPSAhIWl0ZXJhdG9yKHZhbHVlLCBp bmRleCkpCiAgICAgICAgdGhyb3cgJGJyZWFrOwogICAgfSk7CiAgICByZXR1cm4g cmVzdWx0OwogIH0sCgogIGNvbGxlY3Q6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250 ZXh0KSB7CiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuYmluZChj b250ZXh0KSA6IFByb3RvdHlwZS5LOwogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAg IHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgcmVzdWx0 cy5wdXNoKGl0ZXJhdG9yKHZhbHVlLCBpbmRleCkpOwogICAgfSk7CiAgICByZXR1 cm4gcmVzdWx0czsKICB9LAoKICBkZXRlY3Q6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBj b250ZXh0KSB7CiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yLmJpbmQoY29udGV4dCk7 CiAgICB2YXIgcmVzdWx0OwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBp bmRleCkgewogICAgICBpZiAoaXRlcmF0b3IodmFsdWUsIGluZGV4KSkgewogICAg ICAgIHJlc3VsdCA9IHZhbHVlOwogICAgICAgIHRocm93ICRicmVhazsKICAgICAg fQogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0sCgogIGZpbmRBbGw6IGZ1 bmN0aW9uKGl0ZXJhdG9yLCBjb250ZXh0KSB7CiAgICBpdGVyYXRvciA9IGl0ZXJh dG9yLmJpbmQoY29udGV4dCk7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdGhp cy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICBpZiAoaXRlcmF0 b3IodmFsdWUsIGluZGV4KSkKICAgICAgICByZXN1bHRzLnB1c2godmFsdWUpOwog ICAgfSk7CiAgICByZXR1cm4gcmVzdWx0czsKICB9LAoKICBncmVwOiBmdW5jdGlv bihmaWx0ZXIsIGl0ZXJhdG9yLCBjb250ZXh0KSB7CiAgICBpdGVyYXRvciA9IGl0 ZXJhdG9yID8gaXRlcmF0b3IuYmluZChjb250ZXh0KSA6IFByb3RvdHlwZS5LOwog ICAgdmFyIHJlc3VsdHMgPSBbXTsKCiAgICBpZiAoT2JqZWN0LmlzU3RyaW5nKGZp bHRlcikpCiAgICAgIGZpbHRlciA9IG5ldyBSZWdFeHAoZmlsdGVyKTsKCiAgICB0 aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIGlmIChmaWx0 ZXIubWF0Y2godmFsdWUpKQogICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih2 YWx1ZSwgaW5kZXgpKTsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdHM7CiAgfSwK CiAgaW5jbHVkZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICBpZiAoT2JqZWN0Lmlz RnVuY3Rpb24odGhpcy5pbmRleE9mKSkKICAgICAgaWYgKHRoaXMuaW5kZXhPZihv YmplY3QpICE9IC0xKSByZXR1cm4gdHJ1ZTsKCiAgICB2YXIgZm91bmQgPSBmYWxz ZTsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSkgewogICAgICBpZiAodmFs dWUgPT0gb2JqZWN0KSB7CiAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgIHRo cm93ICRicmVhazsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gZm91bmQ7CiAg fSwKCiAgaW5Hcm91cHNPZjogZnVuY3Rpb24obnVtYmVyLCBmaWxsV2l0aCkgewog ICAgZmlsbFdpdGggPSBPYmplY3QuaXNVbmRlZmluZWQoZmlsbFdpdGgpID8gbnVs bCA6IGZpbGxXaXRoOwogICAgcmV0dXJuIHRoaXMuZWFjaFNsaWNlKG51bWJlciwg ZnVuY3Rpb24oc2xpY2UpIHsKICAgICAgd2hpbGUoc2xpY2UubGVuZ3RoIDwgbnVt YmVyKSBzbGljZS5wdXNoKGZpbGxXaXRoKTsKICAgICAgcmV0dXJuIHNsaWNlOwog ICAgfSk7CiAgfSwKCiAgaW5qZWN0OiBmdW5jdGlvbihtZW1vLCBpdGVyYXRvciwg Y29udGV4dCkgewogICAgaXRlcmF0b3IgPSBpdGVyYXRvci5iaW5kKGNvbnRleHQp OwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICBt ZW1vID0gaXRlcmF0b3IobWVtbywgdmFsdWUsIGluZGV4KTsKICAgIH0pOwogICAg cmV0dXJuIG1lbW87CiAgfSwKCiAgaW52b2tlOiBmdW5jdGlvbihtZXRob2QpIHsK ICAgIHZhciBhcmdzID0gJEEoYXJndW1lbnRzKS5zbGljZSgxKTsKICAgIHJldHVy biB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSkgewogICAgICByZXR1cm4gdmFsdWVb bWV0aG9kXS5hcHBseSh2YWx1ZSwgYXJncyk7CiAgICB9KTsKICB9LAoKICBtYXg6 IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250ZXh0KSB7CiAgICBpdGVyYXRvciA9IGl0 ZXJhdG9yID8gaXRlcmF0b3IuYmluZChjb250ZXh0KSA6IFByb3RvdHlwZS5LOwog ICAgdmFyIHJlc3VsdDsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5k ZXgpIHsKICAgICAgdmFsdWUgPSBpdGVyYXRvcih2YWx1ZSwgaW5kZXgpOwogICAg ICBpZiAocmVzdWx0ID09IG51bGwgfHwgdmFsdWUgPj0gcmVzdWx0KQogICAgICAg IHJlc3VsdCA9IHZhbHVlOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0s CgogIG1pbjogZnVuY3Rpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKICAgIGl0ZXJh dG9yID0gaXRlcmF0b3IgPyBpdGVyYXRvci5iaW5kKGNvbnRleHQpIDogUHJvdG90 eXBlLks7CiAgICB2YXIgcmVzdWx0OwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZh bHVlLCBpbmRleCkgewogICAgICB2YWx1ZSA9IGl0ZXJhdG9yKHZhbHVlLCBpbmRl eCk7CiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCB8fCB2YWx1ZSA8IHJlc3VsdCkK ICAgICAgICByZXN1bHQgPSB2YWx1ZTsKICAgIH0pOwogICAgcmV0dXJuIHJlc3Vs dDsKICB9LAoKICBwYXJ0aXRpb246IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250ZXh0 KSB7CiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuYmluZChjb250 ZXh0KSA6IFByb3RvdHlwZS5LOwogICAgdmFyIHRydWVzID0gW10sIGZhbHNlcyA9 IFtdOwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAg ICAoaXRlcmF0b3IodmFsdWUsIGluZGV4KSA/CiAgICAgICAgdHJ1ZXMgOiBmYWxz ZXMpLnB1c2godmFsdWUpOwogICAgfSk7CiAgICByZXR1cm4gW3RydWVzLCBmYWxz ZXNdOwogIH0sCgogIHBsdWNrOiBmdW5jdGlvbihwcm9wZXJ0eSkgewogICAgdmFy IHJlc3VsdHMgPSBbXTsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSkgewog ICAgICByZXN1bHRzLnB1c2godmFsdWVbcHJvcGVydHldKTsKICAgIH0pOwogICAg cmV0dXJuIHJlc3VsdHM7CiAgfSwKCiAgcmVqZWN0OiBmdW5jdGlvbihpdGVyYXRv ciwgY29udGV4dCkgewogICAgaXRlcmF0b3IgPSBpdGVyYXRvci5iaW5kKGNvbnRl eHQpOwogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHRoaXMuZWFjaChmdW5jdGlv bih2YWx1ZSwgaW5kZXgpIHsKICAgICAgaWYgKCFpdGVyYXRvcih2YWx1ZSwgaW5k ZXgpKQogICAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZSk7CiAgICB9KTsKICAgIHJl dHVybiByZXN1bHRzOwogIH0sCgogIHNvcnRCeTogZnVuY3Rpb24oaXRlcmF0b3Is IGNvbnRleHQpIHsKICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IuYmluZChjb250ZXh0 KTsKICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsK ICAgICAgcmV0dXJuIHt2YWx1ZTogdmFsdWUsIGNyaXRlcmlhOiBpdGVyYXRvcih2 YWx1ZSwgaW5kZXgpfTsKICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQp IHsKICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhLCBiID0gcmlnaHQuY3JpdGVy aWE7CiAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDsKICAg IH0pLnBsdWNrKCd2YWx1ZScpOwogIH0sCgogIHRvQXJyYXk6IGZ1bmN0aW9uKCkg ewogICAgcmV0dXJuIHRoaXMubWFwKCk7CiAgfSwKCiAgemlwOiBmdW5jdGlvbigp IHsKICAgIHZhciBpdGVyYXRvciA9IFByb3RvdHlwZS5LLCBhcmdzID0gJEEoYXJn dW1lbnRzKTsKICAgIGlmIChPYmplY3QuaXNGdW5jdGlvbihhcmdzLmxhc3QoKSkp CiAgICAgIGl0ZXJhdG9yID0gYXJncy5wb3AoKTsKCiAgICB2YXIgY29sbGVjdGlv bnMgPSBbdGhpc10uY29uY2F0KGFyZ3MpLm1hcCgkQSk7CiAgICByZXR1cm4gdGhp cy5tYXAoZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIHJldHVybiBpdGVy YXRvcihjb2xsZWN0aW9ucy5wbHVjayhpbmRleCkpOwogICAgfSk7CiAgfSwKCiAg c2l6ZTogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy50b0FycmF5KCkubGVu Z3RoOwogIH0sCgogIGluc3BlY3Q6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuICcj PEVudW1lcmFibGU6JyArIHRoaXMudG9BcnJheSgpLmluc3BlY3QoKSArICc+JzsK ICB9Cn07CgpPYmplY3QuZXh0ZW5kKEVudW1lcmFibGUsIHsKICBtYXA6ICAgICBF bnVtZXJhYmxlLmNvbGxlY3QsCiAgZmluZDogICAgRW51bWVyYWJsZS5kZXRlY3Qs CiAgc2VsZWN0OiAgRW51bWVyYWJsZS5maW5kQWxsLAogIGZpbHRlcjogIEVudW1l cmFibGUuZmluZEFsbCwKICBtZW1iZXI6ICBFbnVtZXJhYmxlLmluY2x1ZGUsCiAg ZW50cmllczogRW51bWVyYWJsZS50b0FycmF5LAogIGV2ZXJ5OiAgIEVudW1lcmFi bGUuYWxsLAogIHNvbWU6ICAgIEVudW1lcmFibGUuYW55Cn0pOwpmdW5jdGlvbiAk QShpdGVyYWJsZSkgewogIGlmICghaXRlcmFibGUpIHJldHVybiBbXTsKICBpZiAo aXRlcmFibGUudG9BcnJheSkgcmV0dXJuIGl0ZXJhYmxlLnRvQXJyYXkoKTsKICB2 YXIgbGVuZ3RoID0gaXRlcmFibGUubGVuZ3RoIHx8IDAsIHJlc3VsdHMgPSBuZXcg QXJyYXkobGVuZ3RoKTsKICB3aGlsZSAobGVuZ3RoLS0pIHJlc3VsdHNbbGVuZ3Ro XSA9IGl0ZXJhYmxlW2xlbmd0aF07CiAgcmV0dXJuIHJlc3VsdHM7Cn0KCmlmIChQ cm90b3R5cGUuQnJvd3Nlci5XZWJLaXQpIHsKICAkQSA9IGZ1bmN0aW9uKGl0ZXJh YmxlKSB7CiAgICBpZiAoIWl0ZXJhYmxlKSByZXR1cm4gW107CiAgICBpZiAoIShP YmplY3QuaXNGdW5jdGlvbihpdGVyYWJsZSkgJiYgaXRlcmFibGUgPT0gJ1tvYmpl Y3QgTm9kZUxpc3RdJykgJiYKICAgICAgICBpdGVyYWJsZS50b0FycmF5KSByZXR1 cm4gaXRlcmFibGUudG9BcnJheSgpOwogICAgdmFyIGxlbmd0aCA9IGl0ZXJhYmxl Lmxlbmd0aCB8fCAwLCByZXN1bHRzID0gbmV3IEFycmF5KGxlbmd0aCk7CiAgICB3 aGlsZSAobGVuZ3RoLS0pIHJlc3VsdHNbbGVuZ3RoXSA9IGl0ZXJhYmxlW2xlbmd0 aF07CiAgICByZXR1cm4gcmVzdWx0czsKICB9Owp9CgpBcnJheS5mcm9tID0gJEE7 CgpPYmplY3QuZXh0ZW5kKEFycmF5LnByb3RvdHlwZSwgRW51bWVyYWJsZSk7Cgpp ZiAoIUFycmF5LnByb3RvdHlwZS5fcmV2ZXJzZSkgQXJyYXkucHJvdG90eXBlLl9y ZXZlcnNlID0gQXJyYXkucHJvdG90eXBlLnJldmVyc2U7CgpPYmplY3QuZXh0ZW5k KEFycmF5LnByb3RvdHlwZSwgewogIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikg ewogICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHRoaXMubGVuZ3RoOyBpIDwg bGVuZ3RoOyBpKyspCiAgICAgIGl0ZXJhdG9yKHRoaXNbaV0pOwogIH0sCgogIGNs ZWFyOiBmdW5jdGlvbigpIHsKICAgIHRoaXMubGVuZ3RoID0gMDsKICAgIHJldHVy biB0aGlzOwogIH0sCgogIGZpcnN0OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0 aGlzWzBdOwogIH0sCgogIGxhc3Q6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRo aXNbdGhpcy5sZW5ndGggLSAxXTsKICB9LAoKICBjb21wYWN0OiBmdW5jdGlvbigp IHsKICAgIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbih2YWx1ZSkgewogICAg ICByZXR1cm4gdmFsdWUgIT0gbnVsbDsKICAgIH0pOwogIH0sCgogIGZsYXR0ZW46 IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuaW5qZWN0KFtdLCBmdW5jdGlv bihhcnJheSwgdmFsdWUpIHsKICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdChPYmpl Y3QuaXNBcnJheSh2YWx1ZSkgPwogICAgICAgIHZhbHVlLmZsYXR0ZW4oKSA6IFt2 YWx1ZV0pOwogICAgfSk7CiAgfSwKCiAgd2l0aG91dDogZnVuY3Rpb24oKSB7CiAg ICB2YXIgdmFsdWVzID0gJEEoYXJndW1lbnRzKTsKICAgIHJldHVybiB0aGlzLnNl bGVjdChmdW5jdGlvbih2YWx1ZSkgewogICAgICByZXR1cm4gIXZhbHVlcy5pbmNs dWRlKHZhbHVlKTsKICAgIH0pOwogIH0sCgogIHJldmVyc2U6IGZ1bmN0aW9uKGlu bGluZSkgewogICAgcmV0dXJuIChpbmxpbmUgIT09IGZhbHNlID8gdGhpcyA6IHRo aXMudG9BcnJheSgpKS5fcmV2ZXJzZSgpOwogIH0sCgogIHJlZHVjZTogZnVuY3Rp b24oKSB7CiAgICByZXR1cm4gdGhpcy5sZW5ndGggPiAxID8gdGhpcyA6IHRoaXNb MF07CiAgfSwKCiAgdW5pcTogZnVuY3Rpb24oc29ydGVkKSB7CiAgICByZXR1cm4g dGhpcy5pbmplY3QoW10sIGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSwgaW5kZXgpIHsK ICAgICAgaWYgKDAgPT0gaW5kZXggfHwgKHNvcnRlZCA/IGFycmF5Lmxhc3QoKSAh PSB2YWx1ZSA6ICFhcnJheS5pbmNsdWRlKHZhbHVlKSkpCiAgICAgICAgYXJyYXku cHVzaCh2YWx1ZSk7CiAgICAgIHJldHVybiBhcnJheTsKICAgIH0pOwogIH0sCgog IGludGVyc2VjdDogZnVuY3Rpb24oYXJyYXkpIHsKICAgIHJldHVybiB0aGlzLnVu aXEoKS5maW5kQWxsKGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgcmV0dXJuIGFycmF5 LmRldGVjdChmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gaXRlbSA9PT0gdmFsdWUg fSk7CiAgICB9KTsKICB9LAoKICBjbG9uZTogZnVuY3Rpb24oKSB7CiAgICByZXR1 cm4gW10uY29uY2F0KHRoaXMpOwogIH0sCgogIHNpemU6IGZ1bmN0aW9uKCkgewog ICAgcmV0dXJuIHRoaXMubGVuZ3RoOwogIH0sCgogIGluc3BlY3Q6IGZ1bmN0aW9u KCkgewogICAgcmV0dXJuICdbJyArIHRoaXMubWFwKE9iamVjdC5pbnNwZWN0KS5q b2luKCcsICcpICsgJ10nOwogIH0sCgogIHRvSlNPTjogZnVuY3Rpb24oKSB7CiAg ICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKG9iamVj dCkgewogICAgICB2YXIgdmFsdWUgPSBPYmplY3QudG9KU09OKG9iamVjdCk7CiAg ICAgIGlmICghT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkgcmVzdWx0cy5wdXNo KHZhbHVlKTsKICAgIH0pOwogICAgcmV0dXJuICdbJyArIHJlc3VsdHMuam9pbign LCAnKSArICddJzsKICB9Cn0pOwoKLy8gdXNlIG5hdGl2ZSBicm93c2VyIEpTIDEu NiBpbXBsZW1lbnRhdGlvbiBpZiBhdmFpbGFibGUKaWYgKE9iamVjdC5pc0Z1bmN0 aW9uKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSkKICBBcnJheS5wcm90b3R5cGUu X2VhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaDsKCmlmICghQXJyYXkucHJv dG90eXBlLmluZGV4T2YpIEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rp b24oaXRlbSwgaSkgewogIGkgfHwgKGkgPSAwKTsKICB2YXIgbGVuZ3RoID0gdGhp cy5sZW5ndGg7CiAgaWYgKGkgPCAwKSBpID0gbGVuZ3RoICsgaTsKICBmb3IgKDsg aSA8IGxlbmd0aDsgaSsrKQogICAgaWYgKHRoaXNbaV0gPT09IGl0ZW0pIHJldHVy biBpOwogIHJldHVybiAtMTsKfTsKCmlmICghQXJyYXkucHJvdG90eXBlLmxhc3RJ bmRleE9mKSBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbihp dGVtLCBpKSB7CiAgaSA9IGlzTmFOKGkpID8gdGhpcy5sZW5ndGggOiAoaSA8IDAg PyB0aGlzLmxlbmd0aCArIGkgOiBpKSArIDE7CiAgdmFyIG4gPSB0aGlzLnNsaWNl KDAsIGkpLnJldmVyc2UoKS5pbmRleE9mKGl0ZW0pOwogIHJldHVybiAobiA8IDAp ID8gbiA6IGkgLSBuIC0gMTsKfTsKCkFycmF5LnByb3RvdHlwZS50b0FycmF5ID0g QXJyYXkucHJvdG90eXBlLmNsb25lOwoKZnVuY3Rpb24gJHcoc3RyaW5nKSB7CiAg aWYgKCFPYmplY3QuaXNTdHJpbmcoc3RyaW5nKSkgcmV0dXJuIFtdOwogIHN0cmlu ZyA9IHN0cmluZy5zdHJpcCgpOwogIHJldHVybiBzdHJpbmcgPyBzdHJpbmcuc3Bs aXQoL1xzKy8pIDogW107Cn0KCmlmIChQcm90b3R5cGUuQnJvd3Nlci5PcGVyYSl7 CiAgQXJyYXkucHJvdG90eXBlLmNvbmNhdCA9IGZ1bmN0aW9uKCkgewogICAgdmFy IGFycmF5ID0gW107CiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gdGhpcy5s ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgYXJyYXkucHVzaCh0aGlzW2ldKTsKICAg IGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwg bGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKE9iamVjdC5pc0FycmF5KGFyZ3VtZW50 c1tpXSkpIHsKICAgICAgICBmb3IgKHZhciBqID0gMCwgYXJyYXlMZW5ndGggPSBh cmd1bWVudHNbaV0ubGVuZ3RoOyBqIDwgYXJyYXlMZW5ndGg7IGorKykKICAgICAg ICAgIGFycmF5LnB1c2goYXJndW1lbnRzW2ldW2pdKTsKICAgICAgfSBlbHNlIHsK ICAgICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tpXSk7CiAgICAgIH0KICAgIH0K ICAgIHJldHVybiBhcnJheTsKICB9Owp9Ck9iamVjdC5leHRlbmQoTnVtYmVyLnBy b3RvdHlwZSwgewogIHRvQ29sb3JQYXJ0OiBmdW5jdGlvbigpIHsKICAgIHJldHVy biB0aGlzLnRvUGFkZGVkU3RyaW5nKDIsIDE2KTsKICB9LAoKICBzdWNjOiBmdW5j dGlvbigpIHsKICAgIHJldHVybiB0aGlzICsgMTsKICB9LAoKICB0aW1lczogZnVu Y3Rpb24oaXRlcmF0b3IpIHsKICAgICRSKDAsIHRoaXMsIHRydWUpLmVhY2goaXRl cmF0b3IpOwogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgdG9QYWRkZWRTdHJpbmc6 IGZ1bmN0aW9uKGxlbmd0aCwgcmFkaXgpIHsKICAgIHZhciBzdHJpbmcgPSB0aGlz LnRvU3RyaW5nKHJhZGl4IHx8IDEwKTsKICAgIHJldHVybiAnMCcudGltZXMobGVu Z3RoIC0gc3RyaW5nLmxlbmd0aCkgKyBzdHJpbmc7CiAgfSwKCiAgdG9KU09OOiBm dW5jdGlvbigpIHsKICAgIHJldHVybiBpc0Zpbml0ZSh0aGlzKSA/IHRoaXMudG9T dHJpbmcoKSA6ICdudWxsJzsKICB9Cn0pOwoKJHcoJ2FicyByb3VuZCBjZWlsIGZs b29yJykuZWFjaChmdW5jdGlvbihtZXRob2QpewogIE51bWJlci5wcm90b3R5cGVb bWV0aG9kXSA9IE1hdGhbbWV0aG9kXS5tZXRob2RpemUoKTsKfSk7CmZ1bmN0aW9u ICRIKG9iamVjdCkgewogIHJldHVybiBuZXcgSGFzaChvYmplY3QpOwp9OwoKdmFy IEhhc2ggPSBDbGFzcy5jcmVhdGUoRW51bWVyYWJsZSwgKGZ1bmN0aW9uKCkgewoK ICBmdW5jdGlvbiB0b1F1ZXJ5UGFpcihrZXksIHZhbHVlKSB7CiAgICBpZiAoT2Jq ZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuIGtleTsKICAgIHJldHVybiBr ZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nLmludGVycHJldCh2 YWx1ZSkpOwogIH0KCiAgcmV0dXJuIHsKICAgIGluaXRpYWxpemU6IGZ1bmN0aW9u KG9iamVjdCkgewogICAgICB0aGlzLl9vYmplY3QgPSBPYmplY3QuaXNIYXNoKG9i amVjdCkgPyBvYmplY3QudG9PYmplY3QoKSA6IE9iamVjdC5jbG9uZShvYmplY3Qp OwogICAgfSwKCiAgICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgICAg Zm9yICh2YXIga2V5IGluIHRoaXMuX29iamVjdCkgewogICAgICAgIHZhciB2YWx1 ZSA9IHRoaXMuX29iamVjdFtrZXldLCBwYWlyID0gW2tleSwgdmFsdWVdOwogICAg ICAgIHBhaXIua2V5ID0ga2V5OwogICAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsK ICAgICAgICBpdGVyYXRvcihwYWlyKTsKICAgICAgfQogICAgfSwKCiAgICBzZXQ6 IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKICAgICAgcmV0dXJuIHRoaXMuX29iamVj dFtrZXldID0gdmFsdWU7CiAgICB9LAoKICAgIGdldDogZnVuY3Rpb24oa2V5KSB7 CiAgICAgIHJldHVybiB0aGlzLl9vYmplY3Rba2V5XTsKICAgIH0sCgogICAgdW5z ZXQ6IGZ1bmN0aW9uKGtleSkgewogICAgICB2YXIgdmFsdWUgPSB0aGlzLl9vYmpl Y3Rba2V5XTsKICAgICAgZGVsZXRlIHRoaXMuX29iamVjdFtrZXldOwogICAgICBy ZXR1cm4gdmFsdWU7CiAgICB9LAoKICAgIHRvT2JqZWN0OiBmdW5jdGlvbigpIHsK ICAgICAgcmV0dXJuIE9iamVjdC5jbG9uZSh0aGlzLl9vYmplY3QpOwogICAgfSwK CiAgICBrZXlzOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMucGx1Y2so J2tleScpOwogICAgfSwKCiAgICB2YWx1ZXM6IGZ1bmN0aW9uKCkgewogICAgICBy ZXR1cm4gdGhpcy5wbHVjaygndmFsdWUnKTsKICAgIH0sCgogICAgaW5kZXg6IGZ1 bmN0aW9uKHZhbHVlKSB7CiAgICAgIHZhciBtYXRjaCA9IHRoaXMuZGV0ZWN0KGZ1 bmN0aW9uKHBhaXIpIHsKICAgICAgICByZXR1cm4gcGFpci52YWx1ZSA9PT0gdmFs dWU7CiAgICAgIH0pOwogICAgICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2gua2V5Owog ICAgfSwKCiAgICBtZXJnZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgIHJldHVy biB0aGlzLmNsb25lKCkudXBkYXRlKG9iamVjdCk7CiAgICB9LAoKICAgIHVwZGF0 ZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgIHJldHVybiBuZXcgSGFzaChvYmpl Y3QpLmluamVjdCh0aGlzLCBmdW5jdGlvbihyZXN1bHQsIHBhaXIpIHsKICAgICAg ICByZXN1bHQuc2V0KHBhaXIua2V5LCBwYWlyLnZhbHVlKTsKICAgICAgICByZXR1 cm4gcmVzdWx0OwogICAgICB9KTsKICAgIH0sCgogICAgdG9RdWVyeVN0cmluZzog ZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbihwYWly KSB7CiAgICAgICAgdmFyIGtleSA9IGVuY29kZVVSSUNvbXBvbmVudChwYWlyLmtl eSksIHZhbHVlcyA9IHBhaXIudmFsdWU7CgogICAgICAgIGlmICh2YWx1ZXMgJiYg dHlwZW9mIHZhbHVlcyA9PSAnb2JqZWN0JykgewogICAgICAgICAgaWYgKE9iamVj dC5pc0FycmF5KHZhbHVlcykpCiAgICAgICAgICAgIHJldHVybiB2YWx1ZXMubWFw KHRvUXVlcnlQYWlyLmN1cnJ5KGtleSkpLmpvaW4oJyYnKTsKICAgICAgICB9CiAg ICAgICAgcmV0dXJuIHRvUXVlcnlQYWlyKGtleSwgdmFsdWVzKTsKICAgICAgfSku am9pbignJicpOwogICAgfSwKCiAgICBpbnNwZWN0OiBmdW5jdGlvbigpIHsKICAg ICAgcmV0dXJuICcjPEhhc2g6eycgKyB0aGlzLm1hcChmdW5jdGlvbihwYWlyKSB7 CiAgICAgICAgcmV0dXJuIHBhaXIubWFwKE9iamVjdC5pbnNwZWN0KS5qb2luKCc6 ICcpOwogICAgICB9KS5qb2luKCcsICcpICsgJ30+JzsKICAgIH0sCgogICAgdG9K U09OOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIE9iamVjdC50b0pTT04odGhp cy50b09iamVjdCgpKTsKICAgIH0sCgogICAgY2xvbmU6IGZ1bmN0aW9uKCkgewog ICAgICByZXR1cm4gbmV3IEhhc2godGhpcyk7CiAgICB9CiAgfQp9KSgpKTsKCkhh c2gucHJvdG90eXBlLnRvVGVtcGxhdGVSZXBsYWNlbWVudHMgPSBIYXNoLnByb3Rv dHlwZS50b09iamVjdDsKSGFzaC5mcm9tID0gJEg7CnZhciBPYmplY3RSYW5nZSA9 IENsYXNzLmNyZWF0ZShFbnVtZXJhYmxlLCB7CiAgaW5pdGlhbGl6ZTogZnVuY3Rp b24oc3RhcnQsIGVuZCwgZXhjbHVzaXZlKSB7CiAgICB0aGlzLnN0YXJ0ID0gc3Rh cnQ7CiAgICB0aGlzLmVuZCA9IGVuZDsKICAgIHRoaXMuZXhjbHVzaXZlID0gZXhj bHVzaXZlOwogIH0sCgogIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikgewogICAg dmFyIHZhbHVlID0gdGhpcy5zdGFydDsKICAgIHdoaWxlICh0aGlzLmluY2x1ZGUo dmFsdWUpKSB7CiAgICAgIGl0ZXJhdG9yKHZhbHVlKTsKICAgICAgdmFsdWUgPSB2 YWx1ZS5zdWNjKCk7CiAgICB9CiAgfSwKCiAgaW5jbHVkZTogZnVuY3Rpb24odmFs dWUpIHsKICAgIGlmICh2YWx1ZSA8IHRoaXMuc3RhcnQpCiAgICAgIHJldHVybiBm YWxzZTsKICAgIGlmICh0aGlzLmV4Y2x1c2l2ZSkKICAgICAgcmV0dXJuIHZhbHVl IDwgdGhpcy5lbmQ7CiAgICByZXR1cm4gdmFsdWUgPD0gdGhpcy5lbmQ7CiAgfQp9 KTsKCnZhciAkUiA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQsIGV4Y2x1c2l2ZSkgewog IHJldHVybiBuZXcgT2JqZWN0UmFuZ2Uoc3RhcnQsIGVuZCwgZXhjbHVzaXZlKTsK fTsKCnZhciBBamF4ID0gewogIGdldFRyYW5zcG9ydDogZnVuY3Rpb24oKSB7CiAg ICByZXR1cm4gVHJ5LnRoZXNlKAogICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3 IFhNTEh0dHBSZXF1ZXN0KCl9LAogICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3 IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5YTUxIVFRQJyl9LAogICAgICBmdW5jdGlv bigpIHtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQ Jyl9CiAgICApIHx8IGZhbHNlOwogIH0sCgogIGFjdGl2ZVJlcXVlc3RDb3VudDog MAp9OwoKQWpheC5SZXNwb25kZXJzID0gewogIHJlc3BvbmRlcnM6IFtdLAoKICBf ZWFjaDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgIHRoaXMucmVzcG9uZGVycy5f ZWFjaChpdGVyYXRvcik7CiAgfSwKCiAgcmVnaXN0ZXI6IGZ1bmN0aW9uKHJlc3Bv bmRlcikgewogICAgaWYgKCF0aGlzLmluY2x1ZGUocmVzcG9uZGVyKSkKICAgICAg dGhpcy5yZXNwb25kZXJzLnB1c2gocmVzcG9uZGVyKTsKICB9LAoKICB1bnJlZ2lz dGVyOiBmdW5jdGlvbihyZXNwb25kZXIpIHsKICAgIHRoaXMucmVzcG9uZGVycyA9 IHRoaXMucmVzcG9uZGVycy53aXRob3V0KHJlc3BvbmRlcik7CiAgfSwKCiAgZGlz cGF0Y2g6IGZ1bmN0aW9uKGNhbGxiYWNrLCByZXF1ZXN0LCB0cmFuc3BvcnQsIGpz b24pIHsKICAgIHRoaXMuZWFjaChmdW5jdGlvbihyZXNwb25kZXIpIHsKICAgICAg aWYgKE9iamVjdC5pc0Z1bmN0aW9uKHJlc3BvbmRlcltjYWxsYmFja10pKSB7CiAg ICAgICAgdHJ5IHsKICAgICAgICAgIHJlc3BvbmRlcltjYWxsYmFja10uYXBwbHko cmVzcG9uZGVyLCBbcmVxdWVzdCwgdHJhbnNwb3J0LCBqc29uXSk7CiAgICAgICAg fSBjYXRjaCAoZSkgeyB9CiAgICAgIH0KICAgIH0pOwogIH0KfTsKCk9iamVjdC5l eHRlbmQoQWpheC5SZXNwb25kZXJzLCBFbnVtZXJhYmxlKTsKCkFqYXguUmVzcG9u ZGVycy5yZWdpc3Rlcih7CiAgb25DcmVhdGU6ICAgZnVuY3Rpb24oKSB7IEFqYXgu YWN0aXZlUmVxdWVzdENvdW50KysgfSwKICBvbkNvbXBsZXRlOiBmdW5jdGlvbigp IHsgQWpheC5hY3RpdmVSZXF1ZXN0Q291bnQtLSB9Cn0pOwoKQWpheC5CYXNlID0g Q2xhc3MuY3JlYXRlKHsKICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKSB7 CiAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgIG1ldGhvZDogICAgICAgJ3Bvc3Qn LAogICAgICBhc3luY2hyb25vdXM6IHRydWUsCiAgICAgIGNvbnRlbnRUeXBlOiAg J2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsCiAgICAgIGVuY29k aW5nOiAgICAgJ1VURi04JywKICAgICAgcGFyYW1ldGVyczogICAnJywKICAgICAg ZXZhbEpTT046ICAgICB0cnVlLAogICAgICBldmFsSlM6ICAgICAgIHRydWUKICAg IH07CiAgICBPYmplY3QuZXh0ZW5kKHRoaXMub3B0aW9ucywgb3B0aW9ucyB8fCB7 IH0pOwoKICAgIHRoaXMub3B0aW9ucy5tZXRob2QgPSB0aGlzLm9wdGlvbnMubWV0 aG9kLnRvTG93ZXJDYXNlKCk7CgogICAgaWYgKE9iamVjdC5pc1N0cmluZyh0aGlz Lm9wdGlvbnMucGFyYW1ldGVycykpCiAgICAgIHRoaXMub3B0aW9ucy5wYXJhbWV0 ZXJzID0gdGhpcy5vcHRpb25zLnBhcmFtZXRlcnMudG9RdWVyeVBhcmFtcygpOwog ICAgZWxzZSBpZiAoT2JqZWN0LmlzSGFzaCh0aGlzLm9wdGlvbnMucGFyYW1ldGVy cykpCiAgICAgIHRoaXMub3B0aW9ucy5wYXJhbWV0ZXJzID0gdGhpcy5vcHRpb25z LnBhcmFtZXRlcnMudG9PYmplY3QoKTsKICB9Cn0pOwoKQWpheC5SZXF1ZXN0ID0g Q2xhc3MuY3JlYXRlKEFqYXguQmFzZSwgewogIF9jb21wbGV0ZTogZmFsc2UsCgog IGluaXRpYWxpemU6IGZ1bmN0aW9uKCRzdXBlciwgdXJsLCBvcHRpb25zKSB7CiAg ICAkc3VwZXIob3B0aW9ucyk7CiAgICB0aGlzLnRyYW5zcG9ydCA9IEFqYXguZ2V0 VHJhbnNwb3J0KCk7CiAgICB0aGlzLnJlcXVlc3QodXJsKTsKICB9LAoKICByZXF1 ZXN0OiBmdW5jdGlvbih1cmwpIHsKICAgIHRoaXMudXJsID0gdXJsOwogICAgdGhp cy5tZXRob2QgPSB0aGlzLm9wdGlvbnMubWV0aG9kOwogICAgdmFyIHBhcmFtcyA9 IE9iamVjdC5jbG9uZSh0aGlzLm9wdGlvbnMucGFyYW1ldGVycyk7CgogICAgaWYg KCFbJ2dldCcsICdwb3N0J10uaW5jbHVkZSh0aGlzLm1ldGhvZCkpIHsKICAgICAg Ly8gc2ltdWxhdGUgb3RoZXIgdmVyYnMgb3ZlciBwb3N0CiAgICAgIHBhcmFtc1sn X21ldGhvZCddID0gdGhpcy5tZXRob2Q7CiAgICAgIHRoaXMubWV0aG9kID0gJ3Bv c3QnOwogICAgfQoKICAgIHRoaXMucGFyYW1ldGVycyA9IHBhcmFtczsKCiAgICBp ZiAocGFyYW1zID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcocGFyYW1zKSkgewogICAg ICAvLyB3aGVuIEdFVCwgYXBwZW5kIHBhcmFtZXRlcnMgdG8gVVJMCiAgICAgIGlm ICh0aGlzLm1ldGhvZCA9PSAnZ2V0JykKICAgICAgICB0aGlzLnVybCArPSAodGhp cy51cmwuaW5jbHVkZSgnPycpID8gJyYnIDogJz8nKSArIHBhcmFtczsKICAgICAg ZWxzZSBpZiAoL0tvbnF1ZXJvcnxTYWZhcml8S0hUTUwvLnRlc3QobmF2aWdhdG9y LnVzZXJBZ2VudCkpCiAgICAgICAgcGFyYW1zICs9ICcmXz0nOwogICAgfQoKICAg IHRyeSB7CiAgICAgIHZhciByZXNwb25zZSA9IG5ldyBBamF4LlJlc3BvbnNlKHRo aXMpOwogICAgICBpZiAodGhpcy5vcHRpb25zLm9uQ3JlYXRlKSB0aGlzLm9wdGlv bnMub25DcmVhdGUocmVzcG9uc2UpOwogICAgICBBamF4LlJlc3BvbmRlcnMuZGlz cGF0Y2goJ29uQ3JlYXRlJywgdGhpcywgcmVzcG9uc2UpOwoKICAgICAgdGhpcy50 cmFuc3BvcnQub3Blbih0aGlzLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCB0aGlzLnVy bCwKICAgICAgICB0aGlzLm9wdGlvbnMuYXN5bmNocm9ub3VzKTsKCiAgICAgIGlm ICh0aGlzLm9wdGlvbnMuYXN5bmNocm9ub3VzKSB0aGlzLnJlc3BvbmRUb1JlYWR5 U3RhdGUuYmluZCh0aGlzKS5kZWZlcigxKTsKCiAgICAgIHRoaXMudHJhbnNwb3J0 Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRo aXMpOwogICAgICB0aGlzLnNldFJlcXVlc3RIZWFkZXJzKCk7CgogICAgICB0aGlz LmJvZHkgPSB0aGlzLm1ldGhvZCA9PSAncG9zdCcgPyAodGhpcy5vcHRpb25zLnBv c3RCb2R5IHx8IHBhcmFtcykgOiBudWxsOwogICAgICB0aGlzLnRyYW5zcG9ydC5z ZW5kKHRoaXMuYm9keSk7CgogICAgICAvKiBGb3JjZSBGaXJlZm94IHRvIGhhbmRs ZSByZWFkeSBzdGF0ZSA0IGZvciBzeW5jaHJvbm91cyByZXF1ZXN0cyAqLwogICAg ICBpZiAoIXRoaXMub3B0aW9ucy5hc3luY2hyb25vdXMgJiYgdGhpcy50cmFuc3Bv cnQub3ZlcnJpZGVNaW1lVHlwZSkKICAgICAgICB0aGlzLm9uU3RhdGVDaGFuZ2Uo KTsKCiAgICB9CiAgICBjYXRjaCAoZSkgewogICAgICB0aGlzLmRpc3BhdGNoRXhj ZXB0aW9uKGUpOwogICAgfQogIH0sCgogIG9uU3RhdGVDaGFuZ2U6IGZ1bmN0aW9u KCkgewogICAgdmFyIHJlYWR5U3RhdGUgPSB0aGlzLnRyYW5zcG9ydC5yZWFkeVN0 YXRlOwogICAgaWYgKHJlYWR5U3RhdGUgPiAxICYmICEoKHJlYWR5U3RhdGUgPT0g NCkgJiYgdGhpcy5fY29tcGxldGUpKQogICAgICB0aGlzLnJlc3BvbmRUb1JlYWR5 U3RhdGUodGhpcy50cmFuc3BvcnQucmVhZHlTdGF0ZSk7CiAgfSwKCiAgc2V0UmVx dWVzdEhlYWRlcnM6IGZ1bmN0aW9uKCkgewogICAgdmFyIGhlYWRlcnMgPSB7CiAg ICAgICdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0JywKICAgICAg J1gtUHJvdG90eXBlLVZlcnNpb24nOiBQcm90b3R5cGUuVmVyc2lvbiwKICAgICAg J0FjY2VwdCc6ICd0ZXh0L2phdmFzY3JpcHQsIHRleHQvaHRtbCwgYXBwbGljYXRp b24veG1sLCB0ZXh0L3htbCwgKi8qJwogICAgfTsKCiAgICBpZiAodGhpcy5tZXRo b2QgPT0gJ3Bvc3QnKSB7CiAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddID0g dGhpcy5vcHRpb25zLmNvbnRlbnRUeXBlICsKICAgICAgICAodGhpcy5vcHRpb25z LmVuY29kaW5nID8gJzsgY2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5n IDogJycpOwoKICAgICAgLyogRm9yY2UgIkNvbm5lY3Rpb246IGNsb3NlIiBmb3Ig b2xkZXIgTW96aWxsYSBicm93c2VycyB0byB3b3JrCiAgICAgICAqIGFyb3VuZCBh IGJ1ZyB3aGVyZSBYTUxIdHRwUmVxdWVzdCBzZW5kcyBhbiBpbmNvcnJlY3QKICAg ICAgICogQ29udGVudC1sZW5ndGggaGVhZGVyLiBTZWUgTW96aWxsYSBCdWd6aWxs YSAjMjQ2NjUxLgogICAgICAgKi8KICAgICAgaWYgKHRoaXMudHJhbnNwb3J0Lm92 ZXJyaWRlTWltZVR5cGUgJiYKICAgICAgICAgIChuYXZpZ2F0b3IudXNlckFnZW50 Lm1hdGNoKC9HZWNrb1wvKFxkezR9KS8pIHx8IFswLDIwMDVdKVsxXSA8IDIwMDUp CiAgICAgICAgICAgIGhlYWRlcnNbJ0Nvbm5lY3Rpb24nXSA9ICdjbG9zZSc7CiAg ICB9CgogICAgLy8gdXNlci1kZWZpbmVkIGhlYWRlcnMKICAgIGlmICh0eXBlb2Yg dGhpcy5vcHRpb25zLnJlcXVlc3RIZWFkZXJzID09ICdvYmplY3QnKSB7CiAgICAg IHZhciBleHRyYXMgPSB0aGlzLm9wdGlvbnMucmVxdWVzdEhlYWRlcnM7CgogICAg ICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24oZXh0cmFzLnB1c2gpKQogICAgICAgIGZv ciAodmFyIGkgPSAwLCBsZW5ndGggPSBleHRyYXMubGVuZ3RoOyBpIDwgbGVuZ3Ro OyBpICs9IDIpCiAgICAgICAgICBoZWFkZXJzW2V4dHJhc1tpXV0gPSBleHRyYXNb aSsxXTsKICAgICAgZWxzZQogICAgICAgICRIKGV4dHJhcykuZWFjaChmdW5jdGlv bihwYWlyKSB7IGhlYWRlcnNbcGFpci5rZXldID0gcGFpci52YWx1ZSB9KTsKICAg IH0KCiAgICBmb3IgKHZhciBuYW1lIGluIGhlYWRlcnMpCiAgICAgIHRoaXMudHJh bnNwb3J0LnNldFJlcXVlc3RIZWFkZXIobmFtZSwgaGVhZGVyc1tuYW1lXSk7CiAg fSwKCiAgc3VjY2VzczogZnVuY3Rpb24oKSB7CiAgICB2YXIgc3RhdHVzID0gdGhp cy5nZXRTdGF0dXMoKTsKICAgIHJldHVybiAhc3RhdHVzIHx8IChzdGF0dXMgPj0g MjAwICYmIHN0YXR1cyA8IDMwMCk7CiAgfSwKCiAgZ2V0U3RhdHVzOiBmdW5jdGlv bigpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5zdGF0 dXMgfHwgMDsKICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIDAgfQogIH0sCgogIHJl c3BvbmRUb1JlYWR5U3RhdGU6IGZ1bmN0aW9uKHJlYWR5U3RhdGUpIHsKICAgIHZh ciBzdGF0ZSA9IEFqYXguUmVxdWVzdC5FdmVudHNbcmVhZHlTdGF0ZV0sIHJlc3Bv bnNlID0gbmV3IEFqYXguUmVzcG9uc2UodGhpcyk7CgogICAgaWYgKHN0YXRlID09 ICdDb21wbGV0ZScpIHsKICAgICAgdHJ5IHsKICAgICAgICB0aGlzLl9jb21wbGV0 ZSA9IHRydWU7CiAgICAgICAgKHRoaXMub3B0aW9uc1snb24nICsgcmVzcG9uc2Uu c3RhdHVzXQogICAgICAgICB8fCB0aGlzLm9wdGlvbnNbJ29uJyArICh0aGlzLnN1 Y2Nlc3MoKSA/ICdTdWNjZXNzJyA6ICdGYWlsdXJlJyldCiAgICAgICAgIHx8IFBy b3RvdHlwZS5lbXB0eUZ1bmN0aW9uKShyZXNwb25zZSwgcmVzcG9uc2UuaGVhZGVy SlNPTik7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICB0aGlzLmRpc3BhdGNo RXhjZXB0aW9uKGUpOwogICAgICB9CgogICAgICB2YXIgY29udGVudFR5cGUgPSBy ZXNwb25zZS5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpOwogICAgICBpZiAodGhp cy5vcHRpb25zLmV2YWxKUyA9PSAnZm9yY2UnCiAgICAgICAgICB8fCAodGhpcy5v cHRpb25zLmV2YWxKUyAmJiB0aGlzLmlzU2FtZU9yaWdpbigpICYmIGNvbnRlbnRU eXBlCiAgICAgICAgICAmJiBjb250ZW50VHlwZS5tYXRjaCgvXlxzKih0ZXh0fGFw cGxpY2F0aW9uKVwvKHgtKT8oamF2YXxlY21hKXNjcmlwdCg7LiopP1xzKiQvaSkp KQogICAgICAgIHRoaXMuZXZhbFJlc3BvbnNlKCk7CiAgICB9CgogICAgdHJ5IHsK ICAgICAgKHRoaXMub3B0aW9uc1snb24nICsgc3RhdGVdIHx8IFByb3RvdHlwZS5l bXB0eUZ1bmN0aW9uKShyZXNwb25zZSwgcmVzcG9uc2UuaGVhZGVySlNPTik7CiAg ICAgIEFqYXguUmVzcG9uZGVycy5kaXNwYXRjaCgnb24nICsgc3RhdGUsIHRoaXMs IHJlc3BvbnNlLCByZXNwb25zZS5oZWFkZXJKU09OKTsKICAgIH0gY2F0Y2ggKGUp IHsKICAgICAgdGhpcy5kaXNwYXRjaEV4Y2VwdGlvbihlKTsKICAgIH0KCiAgICBp ZiAoc3RhdGUgPT0gJ0NvbXBsZXRlJykgewogICAgICAvLyBhdm9pZCBtZW1vcnkg bGVhayBpbiBNU0lFOiBjbGVhbiB1cAogICAgICB0aGlzLnRyYW5zcG9ydC5vbnJl YWR5c3RhdGVjaGFuZ2UgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKICAgIH0K ICB9LAoKICBpc1NhbWVPcmlnaW46IGZ1bmN0aW9uKCkgewogICAgdmFyIG0gPSB0 aGlzLnVybC5tYXRjaCgvXlxzKmh0dHBzPzpcL1wvW15cL10qLyk7CiAgICByZXR1 cm4gIW0gfHwgKG1bMF0gPT0gJyN7cHJvdG9jb2x9Ly8je2RvbWFpbn0je3BvcnR9 Jy5pbnRlcnBvbGF0ZSh7CiAgICAgIHByb3RvY29sOiBsb2NhdGlvbi5wcm90b2Nv bCwKICAgICAgZG9tYWluOiBkb2N1bWVudC5kb21haW4sCiAgICAgIHBvcnQ6IGxv Y2F0aW9uLnBvcnQgPyAnOicgKyBsb2NhdGlvbi5wb3J0IDogJycKICAgIH0pKTsK ICB9LAoKICBnZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUpIHsKICAgIHRyeSB7CiAg ICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5nZXRSZXNwb25zZUhlYWRlcihuYW1l KSB8fCBudWxsOwogICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbCB9CiAgfSwK CiAgZXZhbFJlc3BvbnNlOiBmdW5jdGlvbigpIHsKICAgIHRyeSB7CiAgICAgIHJl dHVybiBldmFsKCh0aGlzLnRyYW5zcG9ydC5yZXNwb25zZVRleHQgfHwgJycpLnVu ZmlsdGVySlNPTigpKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhpcy5kaXNw YXRjaEV4Y2VwdGlvbihlKTsKICAgIH0KICB9LAoKICBkaXNwYXRjaEV4Y2VwdGlv bjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7CiAgICAodGhpcy5vcHRpb25zLm9uRXhj ZXB0aW9uIHx8IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uKSh0aGlzLCBleGNlcHRp b24pOwogICAgQWpheC5SZXNwb25kZXJzLmRpc3BhdGNoKCdvbkV4Y2VwdGlvbics IHRoaXMsIGV4Y2VwdGlvbik7CiAgfQp9KTsKCkFqYXguUmVxdWVzdC5FdmVudHMg PQogIFsnVW5pbml0aWFsaXplZCcsICdMb2FkaW5nJywgJ0xvYWRlZCcsICdJbnRl cmFjdGl2ZScsICdDb21wbGV0ZSddOwoKQWpheC5SZXNwb25zZSA9IENsYXNzLmNy ZWF0ZSh7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ocmVxdWVzdCl7CiAgICB0aGlz LnJlcXVlc3QgPSByZXF1ZXN0OwogICAgdmFyIHRyYW5zcG9ydCAgPSB0aGlzLnRy YW5zcG9ydCAgPSByZXF1ZXN0LnRyYW5zcG9ydCwKICAgICAgICByZWFkeVN0YXRl ID0gdGhpcy5yZWFkeVN0YXRlID0gdHJhbnNwb3J0LnJlYWR5U3RhdGU7CgogICAg aWYoKHJlYWR5U3RhdGUgPiAyICYmICFQcm90b3R5cGUuQnJvd3Nlci5JRSkgfHwg cmVhZHlTdGF0ZSA9PSA0KSB7CiAgICAgIHRoaXMuc3RhdHVzICAgICAgID0gdGhp cy5nZXRTdGF0dXMoKTsKICAgICAgdGhpcy5zdGF0dXNUZXh0ICAgPSB0aGlzLmdl dFN0YXR1c1RleHQoKTsKICAgICAgdGhpcy5yZXNwb25zZVRleHQgPSBTdHJpbmcu aW50ZXJwcmV0KHRyYW5zcG9ydC5yZXNwb25zZVRleHQpOwogICAgICB0aGlzLmhl YWRlckpTT04gICA9IHRoaXMuX2dldEhlYWRlckpTT04oKTsKICAgIH0KCiAgICBp ZihyZWFkeVN0YXRlID09IDQpIHsKICAgICAgdmFyIHhtbCA9IHRyYW5zcG9ydC5y ZXNwb25zZVhNTDsKICAgICAgdGhpcy5yZXNwb25zZVhNTCAgPSBPYmplY3QuaXNV bmRlZmluZWQoeG1sKSA/IG51bGwgOiB4bWw7CiAgICAgIHRoaXMucmVzcG9uc2VK U09OID0gdGhpcy5fZ2V0UmVzcG9uc2VKU09OKCk7CiAgICB9CiAgfSwKCiAgc3Rh dHVzOiAgICAgIDAsCiAgc3RhdHVzVGV4dDogJycsCgogIGdldFN0YXR1czogQWph eC5SZXF1ZXN0LnByb3RvdHlwZS5nZXRTdGF0dXMsCgogIGdldFN0YXR1c1RleHQ6 IGZ1bmN0aW9uKCkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIHRoaXMudHJhbnNw b3J0LnN0YXR1c1RleHQgfHwgJyc7CiAgICB9IGNhdGNoIChlKSB7IHJldHVybiAn JyB9CiAgfSwKCiAgZ2V0SGVhZGVyOiBBamF4LlJlcXVlc3QucHJvdG90eXBlLmdl dEhlYWRlciwKCiAgZ2V0QWxsSGVhZGVyczogZnVuY3Rpb24oKSB7CiAgICB0cnkg ewogICAgICByZXR1cm4gdGhpcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKICAg IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGwgfQogIH0sCgogIGdldFJlc3BvbnNl SGVhZGVyOiBmdW5jdGlvbihuYW1lKSB7CiAgICByZXR1cm4gdGhpcy50cmFuc3Bv cnQuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7CiAgfSwKCiAgZ2V0QWxsUmVzcG9u c2VIZWFkZXJzOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLnRyYW5zcG9y dC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKICB9LAoKICBfZ2V0SGVhZGVySlNP TjogZnVuY3Rpb24oKSB7CiAgICB2YXIganNvbiA9IHRoaXMuZ2V0SGVhZGVyKCdY LUpTT04nKTsKICAgIGlmICghanNvbikgcmV0dXJuIG51bGw7CiAgICBqc29uID0g ZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShqc29uKSk7CiAgICB0cnkgewogICAg ICByZXR1cm4ganNvbi5ldmFsSlNPTih0aGlzLnJlcXVlc3Qub3B0aW9ucy5zYW5p dGl6ZUpTT04gfHwKICAgICAgICAhdGhpcy5yZXF1ZXN0LmlzU2FtZU9yaWdpbigp KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhpcy5yZXF1ZXN0LmRpc3BhdGNo RXhjZXB0aW9uKGUpOwogICAgfQogIH0sCgogIF9nZXRSZXNwb25zZUpTT046IGZ1 bmN0aW9uKCkgewogICAgdmFyIG9wdGlvbnMgPSB0aGlzLnJlcXVlc3Qub3B0aW9u czsKICAgIGlmICghb3B0aW9ucy5ldmFsSlNPTiB8fCAob3B0aW9ucy5ldmFsSlNP TiAhPSAnZm9yY2UnICYmCiAgICAgICEodGhpcy5nZXRIZWFkZXIoJ0NvbnRlbnQt dHlwZScpIHx8ICcnKS5pbmNsdWRlKCdhcHBsaWNhdGlvbi9qc29uJykpIHx8CiAg ICAgICAgdGhpcy5yZXNwb25zZVRleHQuYmxhbmsoKSkKICAgICAgICAgIHJldHVy biBudWxsOwogICAgdHJ5IHsKICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2VUZXh0 LmV2YWxKU09OKG9wdGlvbnMuc2FuaXRpemVKU09OIHx8CiAgICAgICAgIXRoaXMu cmVxdWVzdC5pc1NhbWVPcmlnaW4oKSk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAg IHRoaXMucmVxdWVzdC5kaXNwYXRjaEV4Y2VwdGlvbihlKTsKICAgIH0KICB9Cn0p OwoKQWpheC5VcGRhdGVyID0gQ2xhc3MuY3JlYXRlKEFqYXguUmVxdWVzdCwgewog IGluaXRpYWxpemU6IGZ1bmN0aW9uKCRzdXBlciwgY29udGFpbmVyLCB1cmwsIG9w dGlvbnMpIHsKICAgIHRoaXMuY29udGFpbmVyID0gewogICAgICBzdWNjZXNzOiAo Y29udGFpbmVyLnN1Y2Nlc3MgfHwgY29udGFpbmVyKSwKICAgICAgZmFpbHVyZTog KGNvbnRhaW5lci5mYWlsdXJlIHx8IChjb250YWluZXIuc3VjY2VzcyA/IG51bGwg OiBjb250YWluZXIpKQogICAgfTsKCiAgICBvcHRpb25zID0gT2JqZWN0LmNsb25l KG9wdGlvbnMpOwogICAgdmFyIG9uQ29tcGxldGUgPSBvcHRpb25zLm9uQ29tcGxl dGU7CiAgICBvcHRpb25zLm9uQ29tcGxldGUgPSAoZnVuY3Rpb24ocmVzcG9uc2Us IGpzb24pIHsKICAgICAgdGhpcy51cGRhdGVDb250ZW50KHJlc3BvbnNlLnJlc3Bv bnNlVGV4dCk7CiAgICAgIGlmIChPYmplY3QuaXNGdW5jdGlvbihvbkNvbXBsZXRl KSkgb25Db21wbGV0ZShyZXNwb25zZSwganNvbik7CiAgICB9KS5iaW5kKHRoaXMp OwoKICAgICRzdXBlcih1cmwsIG9wdGlvbnMpOwogIH0sCgogIHVwZGF0ZUNvbnRl bnQ6IGZ1bmN0aW9uKHJlc3BvbnNlVGV4dCkgewogICAgdmFyIHJlY2VpdmVyID0g dGhpcy5jb250YWluZXJbdGhpcy5zdWNjZXNzKCkgPyAnc3VjY2VzcycgOiAnZmFp bHVyZSddLAogICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CgogICAgaWYg KCFvcHRpb25zLmV2YWxTY3JpcHRzKSByZXNwb25zZVRleHQgPSByZXNwb25zZVRl eHQuc3RyaXBTY3JpcHRzKCk7CgogICAgaWYgKHJlY2VpdmVyID0gJChyZWNlaXZl cikpIHsKICAgICAgaWYgKG9wdGlvbnMuaW5zZXJ0aW9uKSB7CiAgICAgICAgaWYg KE9iamVjdC5pc1N0cmluZyhvcHRpb25zLmluc2VydGlvbikpIHsKICAgICAgICAg IHZhciBpbnNlcnRpb24gPSB7IH07IGluc2VydGlvbltvcHRpb25zLmluc2VydGlv bl0gPSByZXNwb25zZVRleHQ7CiAgICAgICAgICByZWNlaXZlci5pbnNlcnQoaW5z ZXJ0aW9uKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBvcHRpb25zLmluc2VydGlv bihyZWNlaXZlciwgcmVzcG9uc2VUZXh0KTsKICAgICAgfQogICAgICBlbHNlIHJl Y2VpdmVyLnVwZGF0ZShyZXNwb25zZVRleHQpOwogICAgfQogIH0KfSk7CgpBamF4 LlBlcmlvZGljYWxVcGRhdGVyID0gQ2xhc3MuY3JlYXRlKEFqYXguQmFzZSwgewog IGluaXRpYWxpemU6IGZ1bmN0aW9uKCRzdXBlciwgY29udGFpbmVyLCB1cmwsIG9w dGlvbnMpIHsKICAgICRzdXBlcihvcHRpb25zKTsKICAgIHRoaXMub25Db21wbGV0 ZSA9IHRoaXMub3B0aW9ucy5vbkNvbXBsZXRlOwoKICAgIHRoaXMuZnJlcXVlbmN5 ID0gKHRoaXMub3B0aW9ucy5mcmVxdWVuY3kgfHwgMik7CiAgICB0aGlzLmRlY2F5 ID0gKHRoaXMub3B0aW9ucy5kZWNheSB8fCAxKTsKCiAgICB0aGlzLnVwZGF0ZXIg PSB7IH07CiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjsKICAgIHRoaXMu dXJsID0gdXJsOwoKICAgIHRoaXMuc3RhcnQoKTsKICB9LAoKICBzdGFydDogZnVu Y3Rpb24oKSB7CiAgICB0aGlzLm9wdGlvbnMub25Db21wbGV0ZSA9IHRoaXMudXBk YXRlQ29tcGxldGUuYmluZCh0aGlzKTsKICAgIHRoaXMub25UaW1lckV2ZW50KCk7 CiAgfSwKCiAgc3RvcDogZnVuY3Rpb24oKSB7CiAgICB0aGlzLnVwZGF0ZXIub3B0 aW9ucy5vbkNvbXBsZXRlID0gdW5kZWZpbmVkOwogICAgY2xlYXJUaW1lb3V0KHRo aXMudGltZXIpOwogICAgKHRoaXMub25Db21wbGV0ZSB8fCBQcm90b3R5cGUuZW1w dHlGdW5jdGlvbikuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICB9LAoKICB1cGRh dGVDb21wbGV0ZTogZnVuY3Rpb24ocmVzcG9uc2UpIHsKICAgIGlmICh0aGlzLm9w dGlvbnMuZGVjYXkpIHsKICAgICAgdGhpcy5kZWNheSA9IChyZXNwb25zZS5yZXNw b25zZVRleHQgPT0gdGhpcy5sYXN0VGV4dCA/CiAgICAgICAgdGhpcy5kZWNheSAq IHRoaXMub3B0aW9ucy5kZWNheSA6IDEpOwoKICAgICAgdGhpcy5sYXN0VGV4dCA9 IHJlc3BvbnNlLnJlc3BvbnNlVGV4dDsKICAgIH0KICAgIHRoaXMudGltZXIgPSB0 aGlzLm9uVGltZXJFdmVudC5iaW5kKHRoaXMpLmRlbGF5KHRoaXMuZGVjYXkgKiB0 aGlzLmZyZXF1ZW5jeSk7CiAgfSwKCiAgb25UaW1lckV2ZW50OiBmdW5jdGlvbigp IHsKICAgIHRoaXMudXBkYXRlciA9IG5ldyBBamF4LlVwZGF0ZXIodGhpcy5jb250 YWluZXIsIHRoaXMudXJsLCB0aGlzLm9wdGlvbnMpOwogIH0KfSk7CmZ1bmN0aW9u ICQoZWxlbWVudCkgewogIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAg Zm9yICh2YXIgaSA9IDAsIGVsZW1lbnRzID0gW10sIGxlbmd0aCA9IGFyZ3VtZW50 cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgZWxlbWVudHMucHVzaCgk KGFyZ3VtZW50c1tpXSkpOwogICAgcmV0dXJuIGVsZW1lbnRzOwogIH0KICBpZiAo T2JqZWN0LmlzU3RyaW5nKGVsZW1lbnQpKQogICAgZWxlbWVudCA9IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKGVsZW1lbnQpOwogIHJldHVybiBFbGVtZW50LmV4dGVu ZChlbGVtZW50KTsKfQoKaWYgKFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuWFBh dGgpIHsKICBkb2N1bWVudC5fZ2V0RWxlbWVudHNCeVhQYXRoID0gZnVuY3Rpb24o ZXhwcmVzc2lvbiwgcGFyZW50RWxlbWVudCkgewogICAgdmFyIHJlc3VsdHMgPSBb XTsKICAgIHZhciBxdWVyeSA9IGRvY3VtZW50LmV2YWx1YXRlKGV4cHJlc3Npb24s ICQocGFyZW50RWxlbWVudCkgfHwgZG9jdW1lbnQsCiAgICAgIG51bGwsIFhQYXRo UmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKICAgIGZv ciAodmFyIGkgPSAwLCBsZW5ndGggPSBxdWVyeS5zbmFwc2hvdExlbmd0aDsgaSA8 IGxlbmd0aDsgaSsrKQogICAgICByZXN1bHRzLnB1c2goRWxlbWVudC5leHRlbmQo cXVlcnkuc25hcHNob3RJdGVtKGkpKSk7CiAgICByZXR1cm4gcmVzdWx0czsKICB9 Owp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCmlmICghd2luZG93 Lk5vZGUpIHZhciBOb2RlID0geyB9OwoKaWYgKCFOb2RlLkVMRU1FTlRfTk9ERSkg ewogIC8vIERPTSBsZXZlbCAyIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZwog IE9iamVjdC5leHRlbmQoTm9kZSwgewogICAgRUxFTUVOVF9OT0RFOiAxLAogICAg QVRUUklCVVRFX05PREU6IDIsCiAgICBURVhUX05PREU6IDMsCiAgICBDREFUQV9T RUNUSU9OX05PREU6IDQsCiAgICBFTlRJVFlfUkVGRVJFTkNFX05PREU6IDUsCiAg ICBFTlRJVFlfTk9ERTogNiwKICAgIFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9E RTogNywKICAgIENPTU1FTlRfTk9ERTogOCwKICAgIERPQ1VNRU5UX05PREU6IDks CiAgICBET0NVTUVOVF9UWVBFX05PREU6IDEwLAogICAgRE9DVU1FTlRfRlJBR01F TlRfTk9ERTogMTEsCiAgICBOT1RBVElPTl9OT0RFOiAxMgogIH0pOwp9CgooZnVu Y3Rpb24oKSB7CiAgdmFyIGVsZW1lbnQgPSB0aGlzLkVsZW1lbnQ7CiAgdGhpcy5F bGVtZW50ID0gZnVuY3Rpb24odGFnTmFtZSwgYXR0cmlidXRlcykgewogICAgYXR0 cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwgeyB9OwogICAgdGFnTmFtZSA9IHRhZ05h bWUudG9Mb3dlckNhc2UoKTsKICAgIHZhciBjYWNoZSA9IEVsZW1lbnQuY2FjaGU7 CiAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUgJiYgYXR0cmlidXRlcy5uYW1l KSB7CiAgICAgIHRhZ05hbWUgPSAnPCcgKyB0YWdOYW1lICsgJyBuYW1lPSInICsg YXR0cmlidXRlcy5uYW1lICsgJyI+JzsKICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMu bmFtZTsKICAgICAgcmV0dXJuIEVsZW1lbnQud3JpdGVBdHRyaWJ1dGUoZG9jdW1l bnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKSwgYXR0cmlidXRlcyk7CiAgICB9CiAg ICBpZiAoIWNhY2hlW3RhZ05hbWVdKSBjYWNoZVt0YWdOYW1lXSA9IEVsZW1lbnQu ZXh0ZW5kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSkpOwogICAgcmV0 dXJuIEVsZW1lbnQud3JpdGVBdHRyaWJ1dGUoY2FjaGVbdGFnTmFtZV0uY2xvbmVO b2RlKGZhbHNlKSwgYXR0cmlidXRlcyk7CiAgfTsKICBPYmplY3QuZXh0ZW5kKHRo aXMuRWxlbWVudCwgZWxlbWVudCB8fCB7IH0pOwp9KS5jYWxsKHdpbmRvdyk7CgpF bGVtZW50LmNhY2hlID0geyB9OwoKRWxlbWVudC5NZXRob2RzID0gewogIHZpc2li bGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHJldHVybiAkKGVsZW1lbnQpLnN0 eWxlLmRpc3BsYXkgIT0gJ25vbmUnOwogIH0sCgogIHRvZ2dsZTogZnVuY3Rpb24o ZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBFbGVtZW50 W0VsZW1lbnQudmlzaWJsZShlbGVtZW50KSA/ICdoaWRlJyA6ICdzaG93J10oZWxl bWVudCk7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBoaWRlOiBmdW5jdGlv bihlbGVtZW50KSB7CiAgICAkKGVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnbm9u ZSc7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBzaG93OiBmdW5jdGlvbihl bGVtZW50KSB7CiAgICAkKGVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAg IHJldHVybiBlbGVtZW50OwogIH0sCgogIHJlbW92ZTogZnVuY3Rpb24oZWxlbWVu dCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBlbGVtZW50LnBhcmVu dE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7CiAgICByZXR1cm4gZWxlbWVudDsK ICB9LAoKICB1cGRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKICAg IGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgaWYgKGNvbnRlbnQgJiYgY29udGVu dC50b0VsZW1lbnQpIGNvbnRlbnQgPSBjb250ZW50LnRvRWxlbWVudCgpOwogICAg aWYgKE9iamVjdC5pc0VsZW1lbnQoY29udGVudCkpIHJldHVybiBlbGVtZW50LnVw ZGF0ZSgpLmluc2VydChjb250ZW50KTsKICAgIGNvbnRlbnQgPSBPYmplY3QudG9I VE1MKGNvbnRlbnQpOwogICAgZWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50LnN0 cmlwU2NyaXB0cygpOwogICAgY29udGVudC5ldmFsU2NyaXB0cy5iaW5kKGNvbnRl bnQpLmRlZmVyKCk7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICByZXBsYWNl OiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7CiAgICBlbGVtZW50ID0gJChl bGVtZW50KTsKICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQudG9FbGVtZW50KSBj b250ZW50ID0gY29udGVudC50b0VsZW1lbnQoKTsKICAgIGVsc2UgaWYgKCFPYmpl Y3QuaXNFbGVtZW50KGNvbnRlbnQpKSB7CiAgICAgIGNvbnRlbnQgPSBPYmplY3Qu dG9IVE1MKGNvbnRlbnQpOwogICAgICB2YXIgcmFuZ2UgPSBlbGVtZW50Lm93bmVy RG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShl bGVtZW50KTsKICAgICAgY29udGVudC5ldmFsU2NyaXB0cy5iaW5kKGNvbnRlbnQp LmRlZmVyKCk7CiAgICAgIGNvbnRlbnQgPSByYW5nZS5jcmVhdGVDb250ZXh0dWFs RnJhZ21lbnQoY29udGVudC5zdHJpcFNjcmlwdHMoKSk7CiAgICB9CiAgICBlbGVt ZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbnRlbnQsIGVsZW1lbnQpOwog ICAgcmV0dXJuIGVsZW1lbnQ7CiAgfSwKCiAgaW5zZXJ0OiBmdW5jdGlvbihlbGVt ZW50LCBpbnNlcnRpb25zKSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKCiAg ICBpZiAoT2JqZWN0LmlzU3RyaW5nKGluc2VydGlvbnMpIHx8IE9iamVjdC5pc051 bWJlcihpbnNlcnRpb25zKSB8fAogICAgICAgIE9iamVjdC5pc0VsZW1lbnQoaW5z ZXJ0aW9ucykgfHwgKGluc2VydGlvbnMgJiYgKGluc2VydGlvbnMudG9FbGVtZW50 IHx8IGluc2VydGlvbnMudG9IVE1MKSkpCiAgICAgICAgICBpbnNlcnRpb25zID0g e2JvdHRvbTppbnNlcnRpb25zfTsKCiAgICB2YXIgY29udGVudCwgaW5zZXJ0LCB0 YWdOYW1lLCBjaGlsZE5vZGVzOwoKICAgIGZvciAodmFyIHBvc2l0aW9uIGluIGlu c2VydGlvbnMpIHsKICAgICAgY29udGVudCAgPSBpbnNlcnRpb25zW3Bvc2l0aW9u XTsKICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbi50b0xvd2VyQ2FzZSgpOwogICAg ICBpbnNlcnQgPSBFbGVtZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlvbnNbcG9zaXRp b25dOwoKICAgICAgaWYgKGNvbnRlbnQgJiYgY29udGVudC50b0VsZW1lbnQpIGNv bnRlbnQgPSBjb250ZW50LnRvRWxlbWVudCgpOwogICAgICBpZiAoT2JqZWN0Lmlz RWxlbWVudChjb250ZW50KSkgewogICAgICAgIGluc2VydChlbGVtZW50LCBjb250 ZW50KTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgY29udGVudCA9 IE9iamVjdC50b0hUTUwoY29udGVudCk7CgogICAgICB0YWdOYW1lID0gKChwb3Np dGlvbiA9PSAnYmVmb3JlJyB8fCBwb3NpdGlvbiA9PSAnYWZ0ZXInKQogICAgICAg ID8gZWxlbWVudC5wYXJlbnROb2RlIDogZWxlbWVudCkudGFnTmFtZS50b1VwcGVy Q2FzZSgpOwoKICAgICAgY2hpbGROb2RlcyA9IEVsZW1lbnQuX2dldENvbnRlbnRG cm9tQW5vbnltb3VzRWxlbWVudCh0YWdOYW1lLCBjb250ZW50LnN0cmlwU2NyaXB0 cygpKTsKCiAgICAgIGlmIChwb3NpdGlvbiA9PSAndG9wJyB8fCBwb3NpdGlvbiA9 PSAnYWZ0ZXInKSBjaGlsZE5vZGVzLnJldmVyc2UoKTsKICAgICAgY2hpbGROb2Rl cy5lYWNoKGluc2VydC5jdXJyeShlbGVtZW50KSk7CgogICAgICBjb250ZW50LmV2 YWxTY3JpcHRzLmJpbmQoY29udGVudCkuZGVmZXIoKTsKICAgIH0KCiAgICByZXR1 cm4gZWxlbWVudDsKICB9LAoKICB3cmFwOiBmdW5jdGlvbihlbGVtZW50LCB3cmFw cGVyLCBhdHRyaWJ1dGVzKSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAg IGlmIChPYmplY3QuaXNFbGVtZW50KHdyYXBwZXIpKQogICAgICAkKHdyYXBwZXIp LndyaXRlQXR0cmlidXRlKGF0dHJpYnV0ZXMgfHwgeyB9KTsKICAgIGVsc2UgaWYg KE9iamVjdC5pc1N0cmluZyh3cmFwcGVyKSkgd3JhcHBlciA9IG5ldyBFbGVtZW50 KHdyYXBwZXIsIGF0dHJpYnV0ZXMpOwogICAgZWxzZSB3cmFwcGVyID0gbmV3IEVs ZW1lbnQoJ2RpdicsIHdyYXBwZXIpOwogICAgaWYgKGVsZW1lbnQucGFyZW50Tm9k ZSkKICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh3cmFwcGVy LCBlbGVtZW50KTsKICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAg ICByZXR1cm4gd3JhcHBlcjsKICB9LAoKICBpbnNwZWN0OiBmdW5jdGlvbihlbGVt ZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHZhciByZXN1bHQg PSAnPCcgKyBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKICAgICRIKHsn aWQnOiAnaWQnLCAnY2xhc3NOYW1lJzogJ2NsYXNzJ30pLmVhY2goZnVuY3Rpb24o cGFpcikgewogICAgICB2YXIgcHJvcGVydHkgPSBwYWlyLmZpcnN0KCksIGF0dHJp YnV0ZSA9IHBhaXIubGFzdCgpOwogICAgICB2YXIgdmFsdWUgPSAoZWxlbWVudFtw cm9wZXJ0eV0gfHwgJycpLnRvU3RyaW5nKCk7CiAgICAgIGlmICh2YWx1ZSkgcmVz dWx0ICs9ICcgJyArIGF0dHJpYnV0ZSArICc9JyArIHZhbHVlLmluc3BlY3QodHJ1 ZSk7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQgKyAnPic7CiAgfSwKCiAgcmVj dXJzaXZlbHlDb2xsZWN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSkgewog ICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB2YXIgZWxlbWVudHMgPSBbXTsK ICAgIHdoaWxlIChlbGVtZW50ID0gZWxlbWVudFtwcm9wZXJ0eV0pCiAgICAgIGlm IChlbGVtZW50Lm5vZGVUeXBlID09IDEpCiAgICAgICAgZWxlbWVudHMucHVzaChF bGVtZW50LmV4dGVuZChlbGVtZW50KSk7CiAgICByZXR1cm4gZWxlbWVudHM7CiAg fSwKCiAgYW5jZXN0b3JzOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICByZXR1cm4g JChlbGVtZW50KS5yZWN1cnNpdmVseUNvbGxlY3QoJ3BhcmVudE5vZGUnKTsKICB9 LAoKICBkZXNjZW5kYW50czogZnVuY3Rpb24oZWxlbWVudCkgewogICAgcmV0dXJu ICQoZWxlbWVudCkuc2VsZWN0KCIqIik7CiAgfSwKCiAgZmlyc3REZXNjZW5kYW50 OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KS5m aXJzdENoaWxkOwogICAgd2hpbGUgKGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlw ZSAhPSAxKSBlbGVtZW50ID0gZWxlbWVudC5uZXh0U2libGluZzsKICAgIHJldHVy biAkKGVsZW1lbnQpOwogIH0sCgogIGltbWVkaWF0ZURlc2NlbmRhbnRzOiBmdW5j dGlvbihlbGVtZW50KSB7CiAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KS5m aXJzdENoaWxkKSkgcmV0dXJuIFtdOwogICAgd2hpbGUgKGVsZW1lbnQgJiYgZWxl bWVudC5ub2RlVHlwZSAhPSAxKSBlbGVtZW50ID0gZWxlbWVudC5uZXh0U2libGlu ZzsKICAgIGlmIChlbGVtZW50KSByZXR1cm4gW2VsZW1lbnRdLmNvbmNhdCgkKGVs ZW1lbnQpLm5leHRTaWJsaW5ncygpKTsKICAgIHJldHVybiBbXTsKICB9LAoKICBw cmV2aW91c1NpYmxpbmdzOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICByZXR1cm4g JChlbGVtZW50KS5yZWN1cnNpdmVseUNvbGxlY3QoJ3ByZXZpb3VzU2libGluZycp OwogIH0sCgogIG5leHRTaWJsaW5nczogZnVuY3Rpb24oZWxlbWVudCkgewogICAg cmV0dXJuICQoZWxlbWVudCkucmVjdXJzaXZlbHlDb2xsZWN0KCduZXh0U2libGlu ZycpOwogIH0sCgogIHNpYmxpbmdzOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBl bGVtZW50ID0gJChlbGVtZW50KTsKICAgIHJldHVybiBlbGVtZW50LnByZXZpb3Vz U2libGluZ3MoKS5yZXZlcnNlKCkuY29uY2F0KGVsZW1lbnQubmV4dFNpYmxpbmdz KCkpOwogIH0sCgogIG1hdGNoOiBmdW5jdGlvbihlbGVtZW50LCBzZWxlY3Rvcikg ewogICAgaWYgKE9iamVjdC5pc1N0cmluZyhzZWxlY3RvcikpCiAgICAgIHNlbGVj dG9yID0gbmV3IFNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIHJldHVybiBzZWxlY3Rv ci5tYXRjaCgkKGVsZW1lbnQpKTsKICB9LAoKICB1cDogZnVuY3Rpb24oZWxlbWVu dCwgZXhwcmVzc2lvbiwgaW5kZXgpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQp OwogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgcmV0dXJuICQoZWxlbWVu dC5wYXJlbnROb2RlKTsKICAgIHZhciBhbmNlc3RvcnMgPSBlbGVtZW50LmFuY2Vz dG9ycygpOwogICAgcmV0dXJuIE9iamVjdC5pc051bWJlcihleHByZXNzaW9uKSA/ IGFuY2VzdG9yc1tleHByZXNzaW9uXSA6CiAgICAgIFNlbGVjdG9yLmZpbmRFbGVt ZW50KGFuY2VzdG9ycywgZXhwcmVzc2lvbiwgaW5kZXgpOwogIH0sCgogIGRvd246 IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24sIGluZGV4KSB7CiAgICBlbGVt ZW50ID0gJChlbGVtZW50KTsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEp IHJldHVybiBlbGVtZW50LmZpcnN0RGVzY2VuZGFudCgpOwogICAgcmV0dXJuIE9i amVjdC5pc051bWJlcihleHByZXNzaW9uKSA/IGVsZW1lbnQuZGVzY2VuZGFudHMo KVtleHByZXNzaW9uXSA6CiAgICAgIGVsZW1lbnQuc2VsZWN0KGV4cHJlc3Npb24p W2luZGV4IHx8IDBdOwogIH0sCgogIHByZXZpb3VzOiBmdW5jdGlvbihlbGVtZW50 LCBleHByZXNzaW9uLCBpbmRleCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7 CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSByZXR1cm4gJChTZWxlY3Rv ci5oYW5kbGVycy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKGVsZW1lbnQpKTsKICAg IHZhciBwcmV2aW91c1NpYmxpbmdzID0gZWxlbWVudC5wcmV2aW91c1NpYmxpbmdz KCk7CiAgICByZXR1cm4gT2JqZWN0LmlzTnVtYmVyKGV4cHJlc3Npb24pID8gcHJl dmlvdXNTaWJsaW5nc1tleHByZXNzaW9uXSA6CiAgICAgIFNlbGVjdG9yLmZpbmRF bGVtZW50KHByZXZpb3VzU2libGluZ3MsIGV4cHJlc3Npb24sIGluZGV4KTsKICB9 LAoKICBuZXh0OiBmdW5jdGlvbihlbGVtZW50LCBleHByZXNzaW9uLCBpbmRleCkg ewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBpZiAoYXJndW1lbnRzLmxl bmd0aCA9PSAxKSByZXR1cm4gJChTZWxlY3Rvci5oYW5kbGVycy5uZXh0RWxlbWVu dFNpYmxpbmcoZWxlbWVudCkpOwogICAgdmFyIG5leHRTaWJsaW5ncyA9IGVsZW1l bnQubmV4dFNpYmxpbmdzKCk7CiAgICByZXR1cm4gT2JqZWN0LmlzTnVtYmVyKGV4 cHJlc3Npb24pID8gbmV4dFNpYmxpbmdzW2V4cHJlc3Npb25dIDoKICAgICAgU2Vs ZWN0b3IuZmluZEVsZW1lbnQobmV4dFNpYmxpbmdzLCBleHByZXNzaW9uLCBpbmRl eCk7CiAgfSwKCiAgc2VsZWN0OiBmdW5jdGlvbigpIHsKICAgIHZhciBhcmdzID0g JEEoYXJndW1lbnRzKSwgZWxlbWVudCA9ICQoYXJncy5zaGlmdCgpKTsKICAgIHJl dHVybiBTZWxlY3Rvci5maW5kQ2hpbGRFbGVtZW50cyhlbGVtZW50LCBhcmdzKTsK ICB9LAoKICBhZGphY2VudDogZnVuY3Rpb24oKSB7CiAgICB2YXIgYXJncyA9ICRB KGFyZ3VtZW50cyksIGVsZW1lbnQgPSAkKGFyZ3Muc2hpZnQoKSk7CiAgICByZXR1 cm4gU2VsZWN0b3IuZmluZENoaWxkRWxlbWVudHMoZWxlbWVudC5wYXJlbnROb2Rl LCBhcmdzKS53aXRob3V0KGVsZW1lbnQpOwogIH0sCgogIGlkZW50aWZ5OiBmdW5j dGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHZh ciBpZCA9IGVsZW1lbnQucmVhZEF0dHJpYnV0ZSgnaWQnKSwgc2VsZiA9IGFyZ3Vt ZW50cy5jYWxsZWU7CiAgICBpZiAoaWQpIHJldHVybiBpZDsKICAgIGRvIHsgaWQg PSAnYW5vbnltb3VzX2VsZW1lbnRfJyArIHNlbGYuY291bnRlcisrIH0gd2hpbGUg KCQoaWQpKTsKICAgIGVsZW1lbnQud3JpdGVBdHRyaWJ1dGUoJ2lkJywgaWQpOwog ICAgcmV0dXJuIGlkOwogIH0sCgogIHJlYWRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGVs ZW1lbnQsIG5hbWUpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgaWYg KFByb3RvdHlwZS5Ccm93c2VyLklFKSB7CiAgICAgIHZhciB0ID0gRWxlbWVudC5f YXR0cmlidXRlVHJhbnNsYXRpb25zLnJlYWQ7CiAgICAgIGlmICh0LnZhbHVlc1tu YW1lXSkgcmV0dXJuIHQudmFsdWVzW25hbWVdKGVsZW1lbnQsIG5hbWUpOwogICAg ICBpZiAodC5uYW1lc1tuYW1lXSkgbmFtZSA9IHQubmFtZXNbbmFtZV07CiAgICAg IGlmIChuYW1lLmluY2x1ZGUoJzonKSkgewogICAgICAgIHJldHVybiAoIWVsZW1l bnQuYXR0cmlidXRlcyB8fCAhZWxlbWVudC5hdHRyaWJ1dGVzW25hbWVdKSA/IG51 bGwgOgogICAgICAgICBlbGVtZW50LmF0dHJpYnV0ZXNbbmFtZV0udmFsdWU7CiAg ICAgIH0KICAgIH0KICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1l KTsKICB9LAoKICB3cml0ZUF0dHJpYnV0ZTogZnVuY3Rpb24oZWxlbWVudCwgbmFt ZSwgdmFsdWUpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIGF0 dHJpYnV0ZXMgPSB7IH0sIHQgPSBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlv bnMud3JpdGU7CgogICAgaWYgKHR5cGVvZiBuYW1lID09ICdvYmplY3QnKSBhdHRy aWJ1dGVzID0gbmFtZTsKICAgIGVsc2UgYXR0cmlidXRlc1tuYW1lXSA9IE9iamVj dC5pc1VuZGVmaW5lZCh2YWx1ZSkgPyB0cnVlIDogdmFsdWU7CgogICAgZm9yICh2 YXIgYXR0ciBpbiBhdHRyaWJ1dGVzKSB7CiAgICAgIG5hbWUgPSB0Lm5hbWVzW2F0 dHJdIHx8IGF0dHI7CiAgICAgIHZhbHVlID0gYXR0cmlidXRlc1thdHRyXTsKICAg ICAgaWYgKHQudmFsdWVzW2F0dHJdKSBuYW1lID0gdC52YWx1ZXNbYXR0cl0oZWxl bWVudCwgdmFsdWUpOwogICAgICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVl ID09PSBudWxsKQogICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUp OwogICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkKICAgICAgICBlbGVtZW50 LnNldEF0dHJpYnV0ZShuYW1lLCBuYW1lKTsKICAgICAgZWxzZSBlbGVtZW50LnNl dEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiAgICB9CiAgICByZXR1cm4gZWxlbWVu dDsKICB9LAoKICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHJl dHVybiAkKGVsZW1lbnQpLmdldERpbWVuc2lvbnMoKS5oZWlnaHQ7CiAgfSwKCiAg Z2V0V2lkdGg6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHJldHVybiAkKGVsZW1l bnQpLmdldERpbWVuc2lvbnMoKS53aWR0aDsKICB9LAoKICBjbGFzc05hbWVzOiBm dW5jdGlvbihlbGVtZW50KSB7CiAgICByZXR1cm4gbmV3IEVsZW1lbnQuQ2xhc3NO YW1lcyhlbGVtZW50KTsKICB9LAoKICBoYXNDbGFzc05hbWU6IGZ1bmN0aW9uKGVs ZW1lbnQsIGNsYXNzTmFtZSkgewogICAgaWYgKCEoZWxlbWVudCA9ICQoZWxlbWVu dCkpKSByZXR1cm47CiAgICB2YXIgZWxlbWVudENsYXNzTmFtZSA9IGVsZW1lbnQu Y2xhc3NOYW1lOwogICAgcmV0dXJuIChlbGVtZW50Q2xhc3NOYW1lLmxlbmd0aCA+ IDAgJiYgKGVsZW1lbnRDbGFzc05hbWUgPT0gY2xhc3NOYW1lIHx8CiAgICAgIG5l dyBSZWdFeHAoIihefFxccykiICsgY2xhc3NOYW1lICsgIihcXHN8JCkiKS50ZXN0 KGVsZW1lbnRDbGFzc05hbWUpKSk7CiAgfSwKCiAgYWRkQ2xhc3NOYW1lOiBmdW5j dGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsKICAgIGlmICghKGVsZW1lbnQgPSAk KGVsZW1lbnQpKSkgcmV0dXJuOwogICAgaWYgKCFlbGVtZW50Lmhhc0NsYXNzTmFt ZShjbGFzc05hbWUpKQogICAgICBlbGVtZW50LmNsYXNzTmFtZSArPSAoZWxlbWVu dC5jbGFzc05hbWUgPyAnICcgOiAnJykgKyBjbGFzc05hbWU7CiAgICByZXR1cm4g ZWxlbWVudDsKICB9LAoKICByZW1vdmVDbGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1l bnQsIGNsYXNzTmFtZSkgewogICAgaWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkp KSByZXR1cm47CiAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NO YW1lLnJlcGxhY2UoCiAgICAgIG5ldyBSZWdFeHAoIihefFxccyspIiArIGNsYXNz TmFtZSArICIoXFxzK3wkKSIpLCAnICcpLnN0cmlwKCk7CiAgICByZXR1cm4gZWxl bWVudDsKICB9LAoKICB0b2dnbGVDbGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQs IGNsYXNzTmFtZSkgewogICAgaWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkpKSBy ZXR1cm47CiAgICByZXR1cm4gZWxlbWVudFtlbGVtZW50Lmhhc0NsYXNzTmFtZShj bGFzc05hbWUpID8KICAgICAgJ3JlbW92ZUNsYXNzTmFtZScgOiAnYWRkQ2xhc3NO YW1lJ10oY2xhc3NOYW1lKTsKICB9LAoKICAvLyByZW1vdmVzIHdoaXRlc3BhY2Ut b25seSB0ZXh0IG5vZGUgY2hpbGRyZW4KICBjbGVhbldoaXRlc3BhY2U6IGZ1bmN0 aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFy IG5vZGUgPSBlbGVtZW50LmZpcnN0Q2hpbGQ7CiAgICB3aGlsZSAobm9kZSkgewog ICAgICB2YXIgbmV4dE5vZGUgPSBub2RlLm5leHRTaWJsaW5nOwogICAgICBpZiAo bm9kZS5ub2RlVHlwZSA9PSAzICYmICEvXFMvLnRlc3Qobm9kZS5ub2RlVmFsdWUp KQogICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSk7CiAgICAgIG5vZGUg PSBuZXh0Tm9kZTsKICAgIH0KICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIGVt cHR5OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICByZXR1cm4gJChlbGVtZW50KS5p bm5lckhUTUwuYmxhbmsoKTsKICB9LAoKICBkZXNjZW5kYW50T2Y6IGZ1bmN0aW9u KGVsZW1lbnQsIGFuY2VzdG9yKSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KSwg YW5jZXN0b3IgPSAkKGFuY2VzdG9yKTsKICAgIHZhciBvcmlnaW5hbEFuY2VzdG9y ID0gYW5jZXN0b3I7CgogICAgaWYgKGVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9z aXRpb24pCiAgICAgIHJldHVybiAoZWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3Np dGlvbihhbmNlc3RvcikgJiA4KSA9PT0gODsKCiAgICBpZiAoZWxlbWVudC5zb3Vy Y2VJbmRleCAmJiAhUHJvdG90eXBlLkJyb3dzZXIuT3BlcmEpIHsKICAgICAgdmFy IGUgPSBlbGVtZW50LnNvdXJjZUluZGV4LCBhID0gYW5jZXN0b3Iuc291cmNlSW5k ZXgsCiAgICAgICBuZXh0QW5jZXN0b3IgPSBhbmNlc3Rvci5uZXh0U2libGluZzsK ICAgICAgaWYgKCFuZXh0QW5jZXN0b3IpIHsKICAgICAgICBkbyB7IGFuY2VzdG9y ID0gYW5jZXN0b3IucGFyZW50Tm9kZTsgfQogICAgICAgIHdoaWxlICghKG5leHRB bmNlc3RvciA9IGFuY2VzdG9yLm5leHRTaWJsaW5nKSAmJiBhbmNlc3Rvci5wYXJl bnROb2RlKTsKICAgICAgfQogICAgICBpZiAobmV4dEFuY2VzdG9yICYmIG5leHRB bmNlc3Rvci5zb3VyY2VJbmRleCkKICAgICAgIHJldHVybiAoZSA+IGEgJiYgZSA8 IG5leHRBbmNlc3Rvci5zb3VyY2VJbmRleCk7CiAgICB9CgogICAgd2hpbGUgKGVs ZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpCiAgICAgIGlmIChlbGVtZW50ID09 IG9yaWdpbmFsQW5jZXN0b3IpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNl OwogIH0sCgogIHNjcm9sbFRvOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVt ZW50ID0gJChlbGVtZW50KTsKICAgIHZhciBwb3MgPSBlbGVtZW50LmN1bXVsYXRp dmVPZmZzZXQoKTsKICAgIHdpbmRvdy5zY3JvbGxUbyhwb3NbMF0sIHBvc1sxXSk7 CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBnZXRTdHlsZTogZnVuY3Rpb24o ZWxlbWVudCwgc3R5bGUpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAg c3R5bGUgPSBzdHlsZSA9PSAnZmxvYXQnID8gJ2Nzc0Zsb2F0JyA6IHN0eWxlLmNh bWVsaXplKCk7CiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnN0eWxlW3N0eWxlXTsK ICAgIGlmICghdmFsdWUpIHsKICAgICAgdmFyIGNzcyA9IGRvY3VtZW50LmRlZmF1 bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7CiAgICAgIHZh bHVlID0gY3NzID8gY3NzW3N0eWxlXSA6IG51bGw7CiAgICB9CiAgICBpZiAoc3R5 bGUgPT0gJ29wYWNpdHknKSByZXR1cm4gdmFsdWUgPyBwYXJzZUZsb2F0KHZhbHVl KSA6IDEuMDsKICAgIHJldHVybiB2YWx1ZSA9PSAnYXV0bycgPyBudWxsIDogdmFs dWU7CiAgfSwKCiAgZ2V0T3BhY2l0eTogZnVuY3Rpb24oZWxlbWVudCkgewogICAg cmV0dXJuICQoZWxlbWVudCkuZ2V0U3R5bGUoJ29wYWNpdHknKTsKICB9LAoKICBz ZXRTdHlsZTogZnVuY3Rpb24oZWxlbWVudCwgc3R5bGVzKSB7CiAgICBlbGVtZW50 ID0gJChlbGVtZW50KTsKICAgIHZhciBlbGVtZW50U3R5bGUgPSBlbGVtZW50LnN0 eWxlLCBtYXRjaDsKICAgIGlmIChPYmplY3QuaXNTdHJpbmcoc3R5bGVzKSkgewog ICAgICBlbGVtZW50LnN0eWxlLmNzc1RleHQgKz0gJzsnICsgc3R5bGVzOwogICAg ICByZXR1cm4gc3R5bGVzLmluY2x1ZGUoJ29wYWNpdHknKSA/CiAgICAgICAgZWxl bWVudC5zZXRPcGFjaXR5KHN0eWxlcy5tYXRjaCgvb3BhY2l0eTpccyooXGQ/XC4/ XGQqKS8pWzFdKSA6IGVsZW1lbnQ7CiAgICB9CiAgICBmb3IgKHZhciBwcm9wZXJ0 eSBpbiBzdHlsZXMpCiAgICAgIGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpIGVs ZW1lbnQuc2V0T3BhY2l0eShzdHlsZXNbcHJvcGVydHldKTsKICAgICAgZWxzZQog ICAgICAgIGVsZW1lbnRTdHlsZVsocHJvcGVydHkgPT0gJ2Zsb2F0JyB8fCBwcm9w ZXJ0eSA9PSAnY3NzRmxvYXQnKSA/CiAgICAgICAgICAoT2JqZWN0LmlzVW5kZWZp bmVkKGVsZW1lbnRTdHlsZS5zdHlsZUZsb2F0KSA/ICdjc3NGbG9hdCcgOiAnc3R5 bGVGbG9hdCcpIDoKICAgICAgICAgICAgcHJvcGVydHldID0gc3R5bGVzW3Byb3Bl cnR5XTsKCiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBzZXRPcGFjaXR5OiBm dW5jdGlvbihlbGVtZW50LCB2YWx1ZSkgewogICAgZWxlbWVudCA9ICQoZWxlbWVu dCk7CiAgICBlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAodmFsdWUgPT0gMSB8fCB2 YWx1ZSA9PT0gJycpID8gJycgOgogICAgICAodmFsdWUgPCAwLjAwMDAxKSA/IDAg OiB2YWx1ZTsKICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIGdldERpbWVuc2lv bnM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQp OwogICAgdmFyIGRpc3BsYXkgPSAkKGVsZW1lbnQpLmdldFN0eWxlKCdkaXNwbGF5 Jyk7CiAgICBpZiAoZGlzcGxheSAhPSAnbm9uZScgJiYgZGlzcGxheSAhPSBudWxs KSAvLyBTYWZhcmkgYnVnCiAgICAgIHJldHVybiB7d2lkdGg6IGVsZW1lbnQub2Zm c2V0V2lkdGgsIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHR9OwoKICAgIC8v IEFsbCAqV2lkdGggYW5kICpIZWlnaHQgcHJvcGVydGllcyBnaXZlIDAgb24gZWxl bWVudHMgd2l0aCBkaXNwbGF5IG5vbmUsCiAgICAvLyBzbyBlbmFibGUgdGhlIGVs ZW1lbnQgdGVtcG9yYXJpbHkKICAgIHZhciBlbHMgPSBlbGVtZW50LnN0eWxlOwog ICAgdmFyIG9yaWdpbmFsVmlzaWJpbGl0eSA9IGVscy52aXNpYmlsaXR5OwogICAg dmFyIG9yaWdpbmFsUG9zaXRpb24gPSBlbHMucG9zaXRpb247CiAgICB2YXIgb3Jp Z2luYWxEaXNwbGF5ID0gZWxzLmRpc3BsYXk7CiAgICBlbHMudmlzaWJpbGl0eSA9 ICdoaWRkZW4nOwogICAgZWxzLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKICAgIGVs cy5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIHZhciBvcmlnaW5hbFdpZHRoID0gZWxl bWVudC5jbGllbnRXaWR0aDsKICAgIHZhciBvcmlnaW5hbEhlaWdodCA9IGVsZW1l bnQuY2xpZW50SGVpZ2h0OwogICAgZWxzLmRpc3BsYXkgPSBvcmlnaW5hbERpc3Bs YXk7CiAgICBlbHMucG9zaXRpb24gPSBvcmlnaW5hbFBvc2l0aW9uOwogICAgZWxz LnZpc2liaWxpdHkgPSBvcmlnaW5hbFZpc2liaWxpdHk7CiAgICByZXR1cm4ge3dp ZHRoOiBvcmlnaW5hbFdpZHRoLCBoZWlnaHQ6IG9yaWdpbmFsSGVpZ2h0fTsKICB9 LAoKICBtYWtlUG9zaXRpb25lZDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxl bWVudCA9ICQoZWxlbWVudCk7CiAgICB2YXIgcG9zID0gRWxlbWVudC5nZXRTdHls ZShlbGVtZW50LCAncG9zaXRpb24nKTsKICAgIGlmIChwb3MgPT0gJ3N0YXRpYycg fHwgIXBvcykgewogICAgICBlbGVtZW50Ll9tYWRlUG9zaXRpb25lZCA9IHRydWU7 CiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOwogICAg ICAvLyBPcGVyYSByZXR1cm5zIHRoZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIHBv c2l0aW9uaW5nIGNvbnRleHQsIHdoZW4gYW4KICAgICAgLy8gZWxlbWVudCBpcyBw b3NpdGlvbiByZWxhdGl2ZSBidXQgdG9wIGFuZCBsZWZ0IGhhdmUgbm90IGJlZW4g ZGVmaW5lZAogICAgICBpZiAod2luZG93Lm9wZXJhKSB7CiAgICAgICAgZWxlbWVu dC5zdHlsZS50b3AgPSAwOwogICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IDA7 CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIHVuZG9Q b3NpdGlvbmVkOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChl bGVtZW50KTsKICAgIGlmIChlbGVtZW50Ll9tYWRlUG9zaXRpb25lZCkgewogICAg ICBlbGVtZW50Ll9tYWRlUG9zaXRpb25lZCA9IHVuZGVmaW5lZDsKICAgICAgZWxl bWVudC5zdHlsZS5wb3NpdGlvbiA9CiAgICAgICAgZWxlbWVudC5zdHlsZS50b3Ag PQogICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9CiAgICAgICAgZWxlbWVudC5z dHlsZS5ib3R0b20gPQogICAgICAgIGVsZW1lbnQuc3R5bGUucmlnaHQgPSAnJzsK ICAgIH0KICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIG1ha2VDbGlwcGluZzog ZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAg ICBpZiAoZWxlbWVudC5fb3ZlcmZsb3cpIHJldHVybiBlbGVtZW50OwogICAgZWxl bWVudC5fb3ZlcmZsb3cgPSBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdvdmVy ZmxvdycpIHx8ICdhdXRvJzsKICAgIGlmIChlbGVtZW50Ll9vdmVyZmxvdyAhPT0g J2hpZGRlbicpCiAgICAgIGVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVu JzsKICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIHVuZG9DbGlwcGluZzogZnVu Y3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBp ZiAoIWVsZW1lbnQuX292ZXJmbG93KSByZXR1cm4gZWxlbWVudDsKICAgIGVsZW1l bnQuc3R5bGUub3ZlcmZsb3cgPSBlbGVtZW50Ll9vdmVyZmxvdyA9PSAnYXV0bycg PyAnJyA6IGVsZW1lbnQuX292ZXJmbG93OwogICAgZWxlbWVudC5fb3ZlcmZsb3cg PSBudWxsOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfSwKCiAgY3VtdWxhdGl2ZU9m ZnNldDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgdmFyIHZhbHVlVCA9IDAsIHZh bHVlTCA9IDA7CiAgICBkbyB7CiAgICAgIHZhbHVlVCArPSBlbGVtZW50Lm9mZnNl dFRvcCAgfHwgMDsKICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8 fCAwOwogICAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7CiAgICB9 IHdoaWxlIChlbGVtZW50KTsKICAgIHJldHVybiBFbGVtZW50Ll9yZXR1cm5PZmZz ZXQodmFsdWVMLCB2YWx1ZVQpOwogIH0sCgogIHBvc2l0aW9uZWRPZmZzZXQ6IGZ1 bmN0aW9uKGVsZW1lbnQpIHsKICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAw OwogICAgZG8gewogICAgICB2YWx1ZVQgKz0gZWxlbWVudC5vZmZzZXRUb3AgIHx8 IDA7CiAgICAgIHZhbHVlTCArPSBlbGVtZW50Lm9mZnNldExlZnQgfHwgMDsKICAg ICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OwogICAgICBpZiAoZWxl bWVudCkgewogICAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUgPT0gJ0JPRFknKSBi cmVhazsKICAgICAgICB2YXIgcCA9IEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwg J3Bvc2l0aW9uJyk7CiAgICAgICAgaWYgKHAgIT09ICdzdGF0aWMnKSBicmVhazsK ICAgICAgfQogICAgfSB3aGlsZSAoZWxlbWVudCk7CiAgICByZXR1cm4gRWxlbWVu dC5fcmV0dXJuT2Zmc2V0KHZhbHVlTCwgdmFsdWVUKTsKICB9LAoKICBhYnNvbHV0 aXplOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50 KTsKICAgIGlmIChlbGVtZW50LmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdhYnNv bHV0ZScpIHJldHVybjsKICAgIC8vIFBvc2l0aW9uLnByZXBhcmUoKTsgLy8gVG8g YmUgZG9uZSBtYW51YWxseSBieSBTY3JpcHR5IHdoZW4gaXQgbmVlZHMgaXQuCgog ICAgdmFyIG9mZnNldHMgPSBlbGVtZW50LnBvc2l0aW9uZWRPZmZzZXQoKTsKICAg IHZhciB0b3AgICAgID0gb2Zmc2V0c1sxXTsKICAgIHZhciBsZWZ0ICAgID0gb2Zm c2V0c1swXTsKICAgIHZhciB3aWR0aCAgID0gZWxlbWVudC5jbGllbnRXaWR0aDsK ICAgIHZhciBoZWlnaHQgID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7CgogICAgZWxl bWVudC5fb3JpZ2luYWxMZWZ0ICAgPSBsZWZ0IC0gcGFyc2VGbG9hdChlbGVtZW50 LnN0eWxlLmxlZnQgIHx8IDApOwogICAgZWxlbWVudC5fb3JpZ2luYWxUb3AgICAg PSB0b3AgIC0gcGFyc2VGbG9hdChlbGVtZW50LnN0eWxlLnRvcCB8fCAwKTsKICAg IGVsZW1lbnQuX29yaWdpbmFsV2lkdGggID0gZWxlbWVudC5zdHlsZS53aWR0aDsK ICAgIGVsZW1lbnQuX29yaWdpbmFsSGVpZ2h0ID0gZWxlbWVudC5zdHlsZS5oZWln aHQ7CgogICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CiAg ICBlbGVtZW50LnN0eWxlLnRvcCAgICA9IHRvcCArICdweCc7CiAgICBlbGVtZW50 LnN0eWxlLmxlZnQgICA9IGxlZnQgKyAncHgnOwogICAgZWxlbWVudC5zdHlsZS53 aWR0aCAgPSB3aWR0aCArICdweCc7CiAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9 IGhlaWdodCArICdweCc7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICByZWxh dGl2aXplOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVt ZW50KTsKICAgIGlmIChlbGVtZW50LmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdy ZWxhdGl2ZScpIHJldHVybjsKICAgIC8vIFBvc2l0aW9uLnByZXBhcmUoKTsgLy8g VG8gYmUgZG9uZSBtYW51YWxseSBieSBTY3JpcHR5IHdoZW4gaXQgbmVlZHMgaXQu CgogICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CiAgICB2 YXIgdG9wICA9IHBhcnNlRmxvYXQoZWxlbWVudC5zdHlsZS50b3AgIHx8IDApIC0g KGVsZW1lbnQuX29yaWdpbmFsVG9wIHx8IDApOwogICAgdmFyIGxlZnQgPSBwYXJz ZUZsb2F0KGVsZW1lbnQuc3R5bGUubGVmdCB8fCAwKSAtIChlbGVtZW50Ll9vcmln aW5hbExlZnQgfHwgMCk7CgogICAgZWxlbWVudC5zdHlsZS50b3AgICAgPSB0b3Ag KyAncHgnOwogICAgZWxlbWVudC5zdHlsZS5sZWZ0ICAgPSBsZWZ0ICsgJ3B4JzsK ICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gZWxlbWVudC5fb3JpZ2luYWxIZWln aHQ7CiAgICBlbGVtZW50LnN0eWxlLndpZHRoICA9IGVsZW1lbnQuX29yaWdpbmFs V2lkdGg7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBjdW11bGF0aXZlU2Ny b2xsT2Zmc2V0OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB2YXIgdmFsdWVUID0g MCwgdmFsdWVMID0gMDsKICAgIGRvIHsKICAgICAgdmFsdWVUICs9IGVsZW1lbnQu c2Nyb2xsVG9wICB8fCAwOwogICAgICB2YWx1ZUwgKz0gZWxlbWVudC5zY3JvbGxM ZWZ0IHx8IDA7CiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7CiAg ICB9IHdoaWxlIChlbGVtZW50KTsKICAgIHJldHVybiBFbGVtZW50Ll9yZXR1cm5P ZmZzZXQodmFsdWVMLCB2YWx1ZVQpOwogIH0sCgogIGdldE9mZnNldFBhcmVudDog ZnVuY3Rpb24oZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQub2Zmc2V0UGFyZW50 KSByZXR1cm4gJChlbGVtZW50Lm9mZnNldFBhcmVudCk7CiAgICBpZiAoZWxlbWVu dCA9PSBkb2N1bWVudC5ib2R5KSByZXR1cm4gJChlbGVtZW50KTsKCiAgICB3aGls ZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpICYmIGVsZW1lbnQgIT0g ZG9jdW1lbnQuYm9keSkKICAgICAgaWYgKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVu dCwgJ3Bvc2l0aW9uJykgIT0gJ3N0YXRpYycpCiAgICAgICAgcmV0dXJuICQoZWxl bWVudCk7CgogICAgcmV0dXJuICQoZG9jdW1lbnQuYm9keSk7CiAgfSwKCiAgdmll d3BvcnRPZmZzZXQ6IGZ1bmN0aW9uKGZvckVsZW1lbnQpIHsKICAgIHZhciB2YWx1 ZVQgPSAwLCB2YWx1ZUwgPSAwOwoKICAgIHZhciBlbGVtZW50ID0gZm9yRWxlbWVu dDsKICAgIGRvIHsKICAgICAgdmFsdWVUICs9IGVsZW1lbnQub2Zmc2V0VG9wICB8 fCAwOwogICAgICB2YWx1ZUwgKz0gZWxlbWVudC5vZmZzZXRMZWZ0IHx8IDA7Cgog ICAgICAvLyBTYWZhcmkgZml4CiAgICAgIGlmIChlbGVtZW50Lm9mZnNldFBhcmVu dCA9PSBkb2N1bWVudC5ib2R5ICYmCiAgICAgICAgRWxlbWVudC5nZXRTdHlsZShl bGVtZW50LCAncG9zaXRpb24nKSA9PSAnYWJzb2x1dGUnKSBicmVhazsKCiAgICB9 IHdoaWxlIChlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQpOwoKICAgIGVs ZW1lbnQgPSBmb3JFbGVtZW50OwogICAgZG8gewogICAgICBpZiAoIVByb3RvdHlw ZS5Ccm93c2VyLk9wZXJhIHx8IGVsZW1lbnQudGFnTmFtZSA9PSAnQk9EWScpIHsK ICAgICAgICB2YWx1ZVQgLT0gZWxlbWVudC5zY3JvbGxUb3AgIHx8IDA7CiAgICAg ICAgdmFsdWVMIC09IGVsZW1lbnQuc2Nyb2xsTGVmdCB8fCAwOwogICAgICB9CiAg ICB9IHdoaWxlIChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKTsKCiAgICBy ZXR1cm4gRWxlbWVudC5fcmV0dXJuT2Zmc2V0KHZhbHVlTCwgdmFsdWVUKTsKICB9 LAoKICBjbG9uZVBvc2l0aW9uOiBmdW5jdGlvbihlbGVtZW50LCBzb3VyY2UpIHsK ICAgIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7CiAgICAgIHNldExlZnQ6 ICAgIHRydWUsCiAgICAgIHNldFRvcDogICAgIHRydWUsCiAgICAgIHNldFdpZHRo OiAgIHRydWUsCiAgICAgIHNldEhlaWdodDogIHRydWUsCiAgICAgIG9mZnNldFRv cDogIDAsCiAgICAgIG9mZnNldExlZnQ6IDAKICAgIH0sIGFyZ3VtZW50c1syXSB8 fCB7IH0pOwoKICAgIC8vIGZpbmQgcGFnZSBwb3NpdGlvbiBvZiBzb3VyY2UKICAg IHNvdXJjZSA9ICQoc291cmNlKTsKICAgIHZhciBwID0gc291cmNlLnZpZXdwb3J0 T2Zmc2V0KCk7CgogICAgLy8gZmluZCBjb29yZGluYXRlIHN5c3RlbSB0byB1c2UK ICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIGRlbHRhID0gWzAsIDBd OwogICAgdmFyIHBhcmVudCA9IG51bGw7CiAgICAvLyBkZWx0YSBbMCwwXSB3aWxs IGRvIGZpbmUgd2l0aCBwb3NpdGlvbjogZml4ZWQgZWxlbWVudHMsCiAgICAvLyBw b3NpdGlvbjphYnNvbHV0ZSBuZWVkcyBvZmZzZXRQYXJlbnQgZGVsdGFzCiAgICBp ZiAoRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKSA9PSAnYWJz b2x1dGUnKSB7CiAgICAgIHBhcmVudCA9IGVsZW1lbnQuZ2V0T2Zmc2V0UGFyZW50 KCk7CiAgICAgIGRlbHRhID0gcGFyZW50LnZpZXdwb3J0T2Zmc2V0KCk7CiAgICB9 CgogICAgLy8gY29ycmVjdCBieSBib2R5IG9mZnNldHMgKGZpeGVzIFNhZmFyaSkK ICAgIGlmIChwYXJlbnQgPT0gZG9jdW1lbnQuYm9keSkgewogICAgICBkZWx0YVsw XSAtPSBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7CiAgICAgIGRlbHRhWzFdIC09 IGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOwogICAgfQoKICAgIC8vIHNldCBwb3Np dGlvbgogICAgaWYgKG9wdGlvbnMuc2V0TGVmdCkgICBlbGVtZW50LnN0eWxlLmxl ZnQgID0gKHBbMF0gLSBkZWx0YVswXSArIG9wdGlvbnMub2Zmc2V0TGVmdCkgKyAn cHgnOwogICAgaWYgKG9wdGlvbnMuc2V0VG9wKSAgICBlbGVtZW50LnN0eWxlLnRv cCAgID0gKHBbMV0gLSBkZWx0YVsxXSArIG9wdGlvbnMub2Zmc2V0VG9wKSArICdw eCc7CiAgICBpZiAob3B0aW9ucy5zZXRXaWR0aCkgIGVsZW1lbnQuc3R5bGUud2lk dGggPSBzb3VyY2Uub2Zmc2V0V2lkdGggKyAncHgnOwogICAgaWYgKG9wdGlvbnMu c2V0SGVpZ2h0KSBlbGVtZW50LnN0eWxlLmhlaWdodCA9IHNvdXJjZS5vZmZzZXRI ZWlnaHQgKyAncHgnOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfQp9OwoKRWxlbWVu dC5NZXRob2RzLmlkZW50aWZ5LmNvdW50ZXIgPSAxOwoKT2JqZWN0LmV4dGVuZChF bGVtZW50Lk1ldGhvZHMsIHsKICBnZXRFbGVtZW50c0J5U2VsZWN0b3I6IEVsZW1l bnQuTWV0aG9kcy5zZWxlY3QsCiAgY2hpbGRFbGVtZW50czogRWxlbWVudC5NZXRo b2RzLmltbWVkaWF0ZURlc2NlbmRhbnRzCn0pOwoKRWxlbWVudC5fYXR0cmlidXRl VHJhbnNsYXRpb25zID0gewogIHdyaXRlOiB7CiAgICBuYW1lczogewogICAgICBj bGFzc05hbWU6ICdjbGFzcycsCiAgICAgIGh0bWxGb3I6ICAgJ2ZvcicKICAgIH0s CiAgICB2YWx1ZXM6IHsgfQogIH0KfTsKCmlmIChQcm90b3R5cGUuQnJvd3Nlci5P cGVyYSkgewogIEVsZW1lbnQuTWV0aG9kcy5nZXRTdHlsZSA9IEVsZW1lbnQuTWV0 aG9kcy5nZXRTdHlsZS53cmFwKAogICAgZnVuY3Rpb24ocHJvY2VlZCwgZWxlbWVu dCwgc3R5bGUpIHsKICAgICAgc3dpdGNoIChzdHlsZSkgewogICAgICAgIGNhc2Ug J2xlZnQnOiBjYXNlICd0b3AnOiBjYXNlICdyaWdodCc6IGNhc2UgJ2JvdHRvbSc6 CiAgICAgICAgICBpZiAocHJvY2VlZChlbGVtZW50LCAncG9zaXRpb24nKSA9PT0g J3N0YXRpYycpIHJldHVybiBudWxsOwogICAgICAgIGNhc2UgJ2hlaWdodCc6IGNh c2UgJ3dpZHRoJzoKICAgICAgICAgIC8vIHJldHVybnMgJzBweCcgZm9yIGhpZGRl biBlbGVtZW50czsgd2Ugd2FudCBpdCB0byByZXR1cm4gbnVsbAogICAgICAgICAg aWYgKCFFbGVtZW50LnZpc2libGUoZWxlbWVudCkpIHJldHVybiBudWxsOwoKICAg ICAgICAgIC8vIHJldHVybnMgdGhlIGJvcmRlci1ib3ggZGltZW5zaW9ucyByYXRo ZXIgdGhhbiB0aGUgY29udGVudC1ib3gKICAgICAgICAgIC8vIGRpbWVuc2lvbnMs IHNvIHdlIHN1YnRyYWN0IHBhZGRpbmcgYW5kIGJvcmRlcnMgZnJvbSB0aGUgdmFs dWUKICAgICAgICAgIHZhciBkaW0gPSBwYXJzZUludChwcm9jZWVkKGVsZW1lbnQs IHN0eWxlKSwgMTApOwoKICAgICAgICAgIGlmIChkaW0gIT09IGVsZW1lbnRbJ29m ZnNldCcgKyBzdHlsZS5jYXBpdGFsaXplKCldKQogICAgICAgICAgICByZXR1cm4g ZGltICsgJ3B4JzsKCiAgICAgICAgICB2YXIgcHJvcGVydGllczsKICAgICAgICAg IGlmIChzdHlsZSA9PT0gJ2hlaWdodCcpIHsKICAgICAgICAgICAgcHJvcGVydGll cyA9IFsnYm9yZGVyLXRvcC13aWR0aCcsICdwYWRkaW5nLXRvcCcsCiAgICAgICAg ICAgICAncGFkZGluZy1ib3R0b20nLCAnYm9yZGVyLWJvdHRvbS13aWR0aCddOwog ICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHByb3BlcnRp ZXMgPSBbJ2JvcmRlci1sZWZ0LXdpZHRoJywgJ3BhZGRpbmctbGVmdCcsCiAgICAg ICAgICAgICAncGFkZGluZy1yaWdodCcsICdib3JkZXItcmlnaHQtd2lkdGgnXTsK ICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLmluamVjdChk aW0sIGZ1bmN0aW9uKG1lbW8sIHByb3BlcnR5KSB7CiAgICAgICAgICAgIHZhciB2 YWwgPSBwcm9jZWVkKGVsZW1lbnQsIHByb3BlcnR5KTsKICAgICAgICAgICAgcmV0 dXJuIHZhbCA9PT0gbnVsbCA/IG1lbW8gOiBtZW1vIC0gcGFyc2VJbnQodmFsLCAx MCk7CiAgICAgICAgICB9KSArICdweCc7CiAgICAgICAgZGVmYXVsdDogcmV0dXJu IHByb2NlZWQoZWxlbWVudCwgc3R5bGUpOwogICAgICB9CiAgICB9CiAgKTsKCiAg RWxlbWVudC5NZXRob2RzLnJlYWRBdHRyaWJ1dGUgPSBFbGVtZW50Lk1ldGhvZHMu cmVhZEF0dHJpYnV0ZS53cmFwKAogICAgZnVuY3Rpb24ocHJvY2VlZCwgZWxlbWVu dCwgYXR0cmlidXRlKSB7CiAgICAgIGlmIChhdHRyaWJ1dGUgPT09ICd0aXRsZScp IHJldHVybiBlbGVtZW50LnRpdGxlOwogICAgICByZXR1cm4gcHJvY2VlZChlbGVt ZW50LCBhdHRyaWJ1dGUpOwogICAgfQogICk7Cn0KCmVsc2UgaWYgKFByb3RvdHlw ZS5Ccm93c2VyLklFKSB7CiAgLy8gSUUgZG9lc24ndCByZXBvcnQgb2Zmc2V0cyBj b3JyZWN0bHkgZm9yIHN0YXRpYyBlbGVtZW50cywgc28gd2UgY2hhbmdlIHRoZW0K ICAvLyB0byAicmVsYXRpdmUiIHRvIGdldCB0aGUgdmFsdWVzLCB0aGVuIGNoYW5n ZSB0aGVtIGJhY2suCiAgRWxlbWVudC5NZXRob2RzLmdldE9mZnNldFBhcmVudCA9 IEVsZW1lbnQuTWV0aG9kcy5nZXRPZmZzZXRQYXJlbnQud3JhcCgKICAgIGZ1bmN0 aW9uKHByb2NlZWQsIGVsZW1lbnQpIHsKICAgICAgZWxlbWVudCA9ICQoZWxlbWVu dCk7CiAgICAgIHZhciBwb3NpdGlvbiA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0 aW9uJyk7CiAgICAgIGlmIChwb3NpdGlvbiAhPT0gJ3N0YXRpYycpIHJldHVybiBw cm9jZWVkKGVsZW1lbnQpOwogICAgICBlbGVtZW50LnNldFN0eWxlKHsgcG9zaXRp b246ICdyZWxhdGl2ZScgfSk7CiAgICAgIHZhciB2YWx1ZSA9IHByb2NlZWQoZWxl bWVudCk7CiAgICAgIGVsZW1lbnQuc2V0U3R5bGUoeyBwb3NpdGlvbjogcG9zaXRp b24gfSk7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICApOwoKICAkdygncG9z aXRpb25lZE9mZnNldCB2aWV3cG9ydE9mZnNldCcpLmVhY2goZnVuY3Rpb24obWV0 aG9kKSB7CiAgICBFbGVtZW50Lk1ldGhvZHNbbWV0aG9kXSA9IEVsZW1lbnQuTWV0 aG9kc1ttZXRob2RdLndyYXAoCiAgICAgIGZ1bmN0aW9uKHByb2NlZWQsIGVsZW1l bnQpIHsKICAgICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgICAgICB2YXIg cG9zaXRpb24gPSBlbGVtZW50LmdldFN0eWxlKCdwb3NpdGlvbicpOwogICAgICAg IGlmIChwb3NpdGlvbiAhPT0gJ3N0YXRpYycpIHJldHVybiBwcm9jZWVkKGVsZW1l bnQpOwogICAgICAgIC8vIFRyaWdnZXIgaGFzTGF5b3V0IG9uIHRoZSBvZmZzZXQg cGFyZW50IHNvIHRoYXQgSUU2IHJlcG9ydHMKICAgICAgICAvLyBhY2N1cmF0ZSBv ZmZzZXRUb3AgYW5kIG9mZnNldExlZnQgdmFsdWVzIGZvciBwb3NpdGlvbjogZml4 ZWQuCiAgICAgICAgdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQuZ2V0T2Zmc2V0 UGFyZW50KCk7CiAgICAgICAgaWYgKG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJl bnQuZ2V0U3R5bGUoJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCcpCiAgICAgICAgICBv ZmZzZXRQYXJlbnQuc2V0U3R5bGUoeyB6b29tOiAxIH0pOwogICAgICAgIGVsZW1l bnQuc2V0U3R5bGUoeyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9KTsKICAgICAgICB2 YXIgdmFsdWUgPSBwcm9jZWVkKGVsZW1lbnQpOwogICAgICAgIGVsZW1lbnQuc2V0 U3R5bGUoeyBwb3NpdGlvbjogcG9zaXRpb24gfSk7CiAgICAgICAgcmV0dXJuIHZh bHVlOwogICAgICB9CiAgICApOwogIH0pOwoKICBFbGVtZW50Lk1ldGhvZHMuZ2V0 U3R5bGUgPSBmdW5jdGlvbihlbGVtZW50LCBzdHlsZSkgewogICAgZWxlbWVudCA9 ICQoZWxlbWVudCk7CiAgICBzdHlsZSA9IChzdHlsZSA9PSAnZmxvYXQnIHx8IHN0 eWxlID09ICdjc3NGbG9hdCcpID8gJ3N0eWxlRmxvYXQnIDogc3R5bGUuY2FtZWxp emUoKTsKICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQuc3R5bGVbc3R5bGVdOwogICAg aWYgKCF2YWx1ZSAmJiBlbGVtZW50LmN1cnJlbnRTdHlsZSkgdmFsdWUgPSBlbGVt ZW50LmN1cnJlbnRTdHlsZVtzdHlsZV07CgogICAgaWYgKHN0eWxlID09ICdvcGFj aXR5JykgewogICAgICBpZiAodmFsdWUgPSAoZWxlbWVudC5nZXRTdHlsZSgnZmls dGVyJykgfHwgJycpLm1hdGNoKC9hbHBoYVwob3BhY2l0eT0oLiopXCkvKSkKICAg ICAgICBpZiAodmFsdWVbMV0pIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlWzFdKSAv IDEwMDsKICAgICAgcmV0dXJuIDEuMDsKICAgIH0KCiAgICBpZiAodmFsdWUgPT0g J2F1dG8nKSB7CiAgICAgIGlmICgoc3R5bGUgPT0gJ3dpZHRoJyB8fCBzdHlsZSA9 PSAnaGVpZ2h0JykgJiYgKGVsZW1lbnQuZ2V0U3R5bGUoJ2Rpc3BsYXknKSAhPSAn bm9uZScpKQogICAgICAgIHJldHVybiBlbGVtZW50WydvZmZzZXQnICsgc3R5bGUu Y2FwaXRhbGl6ZSgpXSArICdweCc7CiAgICAgIHJldHVybiBudWxsOwogICAgfQog ICAgcmV0dXJuIHZhbHVlOwogIH07CgogIEVsZW1lbnQuTWV0aG9kcy5zZXRPcGFj aXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKICAgIGZ1bmN0aW9uIHN0 cmlwQWxwaGEoZmlsdGVyKXsKICAgICAgcmV0dXJuIGZpbHRlci5yZXBsYWNlKC9h bHBoYVwoW15cKV0qXCkvZ2ksJycpOwogICAgfQogICAgZWxlbWVudCA9ICQoZWxl bWVudCk7CiAgICB2YXIgY3VycmVudFN0eWxlID0gZWxlbWVudC5jdXJyZW50U3R5 bGU7CiAgICBpZiAoKGN1cnJlbnRTdHlsZSAmJiAhY3VycmVudFN0eWxlLmhhc0xh eW91dCkgfHwKICAgICAgKCFjdXJyZW50U3R5bGUgJiYgZWxlbWVudC5zdHlsZS56 b29tID09ICdub3JtYWwnKSkKICAgICAgICBlbGVtZW50LnN0eWxlLnpvb20gPSAx OwoKICAgIHZhciBmaWx0ZXIgPSBlbGVtZW50LmdldFN0eWxlKCdmaWx0ZXInKSwg c3R5bGUgPSBlbGVtZW50LnN0eWxlOwogICAgaWYgKHZhbHVlID09IDEgfHwgdmFs dWUgPT09ICcnKSB7CiAgICAgIChmaWx0ZXIgPSBzdHJpcEFscGhhKGZpbHRlcikp ID8KICAgICAgICBzdHlsZS5maWx0ZXIgPSBmaWx0ZXIgOiBzdHlsZS5yZW1vdmVB dHRyaWJ1dGUoJ2ZpbHRlcicpOwogICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0g ZWxzZSBpZiAodmFsdWUgPCAwLjAwMDAxKSB2YWx1ZSA9IDA7CiAgICBzdHlsZS5m aWx0ZXIgPSBzdHJpcEFscGhhKGZpbHRlcikgKwogICAgICAnYWxwaGEob3BhY2l0 eT0nICsgKHZhbHVlICogMTAwKSArICcpJzsKICAgIHJldHVybiBlbGVtZW50Owog IH07CgogIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucyA9IHsKICAgIHJl YWQ6IHsKICAgICAgbmFtZXM6IHsKICAgICAgICAnY2xhc3MnOiAnY2xhc3NOYW1l JywKICAgICAgICAnZm9yJzogICAnaHRtbEZvcicKICAgICAgfSwKICAgICAgdmFs dWVzOiB7CiAgICAgICAgX2dldEF0dHI6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJp YnV0ZSkgewogICAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0 dHJpYnV0ZSwgMik7CiAgICAgICAgfSwKICAgICAgICBfZ2V0QXR0ck5vZGU6IGZ1 bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgewogICAgICAgICAgdmFyIG5vZGUg PSBlbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKTsKICAgICAgICAg IHJldHVybiBub2RlID8gbm9kZS52YWx1ZSA6ICIiOwogICAgICAgIH0sCiAgICAg ICAgX2dldEV2OiBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGUpIHsKICAgICAg ICAgIGF0dHJpYnV0ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7 CiAgICAgICAgICByZXR1cm4gYXR0cmlidXRlID8gYXR0cmlidXRlLnRvU3RyaW5n KCkuc2xpY2UoMjMsIC0yKSA6IG51bGw7CiAgICAgICAgfSwKICAgICAgICBfZmxh ZzogZnVuY3Rpb24oZWxlbWVudCwgYXR0cmlidXRlKSB7CiAgICAgICAgICByZXR1 cm4gJChlbGVtZW50KS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKSA/IGF0dHJpYnV0 ZSA6IG51bGw7CiAgICAgICAgfSwKICAgICAgICBzdHlsZTogZnVuY3Rpb24oZWxl bWVudCkgewogICAgICAgICAgcmV0dXJuIGVsZW1lbnQuc3R5bGUuY3NzVGV4dC50 b0xvd2VyQ2FzZSgpOwogICAgICAgIH0sCiAgICAgICAgdGl0bGU6IGZ1bmN0aW9u KGVsZW1lbnQpIHsKICAgICAgICAgIHJldHVybiBlbGVtZW50LnRpdGxlOwogICAg ICAgIH0KICAgICAgfQogICAgfQogIH07CgogIEVsZW1lbnQuX2F0dHJpYnV0ZVRy YW5zbGF0aW9ucy53cml0ZSA9IHsKICAgIG5hbWVzOiBPYmplY3QuZXh0ZW5kKHsK ICAgICAgY2VsbHBhZGRpbmc6ICdjZWxsUGFkZGluZycsCiAgICAgIGNlbGxzcGFj aW5nOiAnY2VsbFNwYWNpbmcnCiAgICB9LCBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFu c2xhdGlvbnMucmVhZC5uYW1lcyksCiAgICB2YWx1ZXM6IHsKICAgICAgY2hlY2tl ZDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKICAgICAgICBlbGVtZW50LmNo ZWNrZWQgPSAhIXZhbHVlOwogICAgICB9LAoKICAgICAgc3R5bGU6IGZ1bmN0aW9u KGVsZW1lbnQsIHZhbHVlKSB7CiAgICAgICAgZWxlbWVudC5zdHlsZS5jc3NUZXh0 ID0gdmFsdWUgPyB2YWx1ZSA6ICcnOwogICAgICB9CiAgICB9CiAgfTsKCiAgRWxl bWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLmhhcyA9IHt9OwoKICAkdygnY29s U3BhbiByb3dTcGFuIHZBbGlnbiBkYXRlVGltZSBhY2Nlc3NLZXkgdGFiSW5kZXgg JyArCiAgICAgICdlbmNUeXBlIG1heExlbmd0aCByZWFkT25seSBsb25nRGVzYycp LmVhY2goZnVuY3Rpb24oYXR0cikgewogICAgRWxlbWVudC5fYXR0cmlidXRlVHJh bnNsYXRpb25zLndyaXRlLm5hbWVzW2F0dHIudG9Mb3dlckNhc2UoKV0gPSBhdHRy OwogICAgRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLmhhc1thdHRyLnRv TG93ZXJDYXNlKCldID0gYXR0cjsKICB9KTsKCiAgKGZ1bmN0aW9uKHYpIHsKICAg IE9iamVjdC5leHRlbmQodiwgewogICAgICBocmVmOiAgICAgICAgdi5fZ2V0QXR0 ciwKICAgICAgc3JjOiAgICAgICAgIHYuX2dldEF0dHIsCiAgICAgIHR5cGU6ICAg ICAgICB2Ll9nZXRBdHRyLAogICAgICBhY3Rpb246ICAgICAgdi5fZ2V0QXR0ck5v ZGUsCiAgICAgIGRpc2FibGVkOiAgICB2Ll9mbGFnLAogICAgICBjaGVja2VkOiAg ICAgdi5fZmxhZywKICAgICAgcmVhZG9ubHk6ICAgIHYuX2ZsYWcsCiAgICAgIG11 bHRpcGxlOiAgICB2Ll9mbGFnLAogICAgICBvbmxvYWQ6ICAgICAgdi5fZ2V0RXYs CiAgICAgIG9udW5sb2FkOiAgICB2Ll9nZXRFdiwKICAgICAgb25jbGljazogICAg IHYuX2dldEV2LAogICAgICBvbmRibGNsaWNrOiAgdi5fZ2V0RXYsCiAgICAgIG9u bW91c2Vkb3duOiB2Ll9nZXRFdiwKICAgICAgb25tb3VzZXVwOiAgIHYuX2dldEV2 LAogICAgICBvbm1vdXNlb3Zlcjogdi5fZ2V0RXYsCiAgICAgIG9ubW91c2Vtb3Zl OiB2Ll9nZXRFdiwKICAgICAgb25tb3VzZW91dDogIHYuX2dldEV2LAogICAgICBv bmZvY3VzOiAgICAgdi5fZ2V0RXYsCiAgICAgIG9uYmx1cjogICAgICB2Ll9nZXRF diwKICAgICAgb25rZXlwcmVzczogIHYuX2dldEV2LAogICAgICBvbmtleWRvd246 ICAgdi5fZ2V0RXYsCiAgICAgIG9ua2V5dXA6ICAgICB2Ll9nZXRFdiwKICAgICAg b25zdWJtaXQ6ICAgIHYuX2dldEV2LAogICAgICBvbnJlc2V0OiAgICAgdi5fZ2V0 RXYsCiAgICAgIG9uc2VsZWN0OiAgICB2Ll9nZXRFdiwKICAgICAgb25jaGFuZ2U6 ICAgIHYuX2dldEV2CiAgICB9KTsKICB9KShFbGVtZW50Ll9hdHRyaWJ1dGVUcmFu c2xhdGlvbnMucmVhZC52YWx1ZXMpOwp9CgplbHNlIGlmIChQcm90b3R5cGUuQnJv d3Nlci5HZWNrbyAmJiAvcnY6MVwuOFwuMC8udGVzdChuYXZpZ2F0b3IudXNlckFn ZW50KSkgewogIEVsZW1lbnQuTWV0aG9kcy5zZXRPcGFjaXR5ID0gZnVuY3Rpb24o ZWxlbWVudCwgdmFsdWUpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAg ZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gKHZhbHVlID09IDEpID8gMC45OTk5OTkg OgogICAgICAodmFsdWUgPT09ICcnKSA/ICcnIDogKHZhbHVlIDwgMC4wMDAwMSkg PyAwIDogdmFsdWU7CiAgICByZXR1cm4gZWxlbWVudDsKICB9Owp9CgplbHNlIGlm IChQcm90b3R5cGUuQnJvd3Nlci5XZWJLaXQpIHsKICBFbGVtZW50Lk1ldGhvZHMu c2V0T3BhY2l0eSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7CiAgICBlbGVt ZW50ID0gJChlbGVtZW50KTsKICAgIGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICh2 YWx1ZSA9PSAxIHx8IHZhbHVlID09PSAnJykgPyAnJyA6CiAgICAgICh2YWx1ZSA8 IDAuMDAwMDEpID8gMCA6IHZhbHVlOwoKICAgIGlmICh2YWx1ZSA9PSAxKQogICAg ICBpZihlbGVtZW50LnRhZ05hbWUgPT0gJ0lNRycgJiYgZWxlbWVudC53aWR0aCkg ewogICAgICAgIGVsZW1lbnQud2lkdGgrKzsgZWxlbWVudC53aWR0aC0tOwogICAg ICB9IGVsc2UgdHJ5IHsKICAgICAgICB2YXIgbiA9IGRvY3VtZW50LmNyZWF0ZVRl eHROb2RlKCcgJyk7CiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChuKTsKICAg ICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKG4pOwogICAgICB9IGNhdGNoIChlKSB7 IH0KCiAgICByZXR1cm4gZWxlbWVudDsKICB9OwoKICAvLyBTYWZhcmkgcmV0dXJu cyBtYXJnaW5zIG9uIGJvZHkgd2hpY2ggaXMgaW5jb3JyZWN0IGlmIHRoZSBjaGls ZCBpcyBhYnNvbHV0ZWx5CiAgLy8gcG9zaXRpb25lZC4gIEZvciBwZXJmb3JtYW5j ZSByZWFzb25zLCByZWRlZmluZSBFbGVtZW50I2N1bXVsYXRpdmVPZmZzZXQgZm9y CiAgLy8gS0hUTUwvV2ViS2l0IG9ubHkuCiAgRWxlbWVudC5NZXRob2RzLmN1bXVs YXRpdmVPZmZzZXQgPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB2YXIgdmFsdWVU ID0gMCwgdmFsdWVMID0gMDsKICAgIGRvIHsKICAgICAgdmFsdWVUICs9IGVsZW1l bnQub2Zmc2V0VG9wICB8fCAwOwogICAgICB2YWx1ZUwgKz0gZWxlbWVudC5vZmZz ZXRMZWZ0IHx8IDA7CiAgICAgIGlmIChlbGVtZW50Lm9mZnNldFBhcmVudCA9PSBk b2N1bWVudC5ib2R5KQogICAgICAgIGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1l bnQsICdwb3NpdGlvbicpID09ICdhYnNvbHV0ZScpIGJyZWFrOwoKICAgICAgZWxl bWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OwogICAgfSB3aGlsZSAoZWxlbWVu dCk7CgogICAgcmV0dXJuIEVsZW1lbnQuX3JldHVybk9mZnNldCh2YWx1ZUwsIHZh bHVlVCk7CiAgfTsKfQoKaWYgKFByb3RvdHlwZS5Ccm93c2VyLklFIHx8IFByb3Rv dHlwZS5Ccm93c2VyLk9wZXJhKSB7CiAgLy8gSUUgYW5kIE9wZXJhIGFyZSBtaXNz aW5nIC5pbm5lckhUTUwgc3VwcG9ydCBmb3IgVEFCTEUtcmVsYXRlZCBhbmQgU0VM RUNUIGVsZW1lbnRzCiAgRWxlbWVudC5NZXRob2RzLnVwZGF0ZSA9IGZ1bmN0aW9u KGVsZW1lbnQsIGNvbnRlbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwoK ICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQudG9FbGVtZW50KSBjb250ZW50ID0g Y29udGVudC50b0VsZW1lbnQoKTsKICAgIGlmIChPYmplY3QuaXNFbGVtZW50KGNv bnRlbnQpKSByZXR1cm4gZWxlbWVudC51cGRhdGUoKS5pbnNlcnQoY29udGVudCk7 CgogICAgY29udGVudCA9IE9iamVjdC50b0hUTUwoY29udGVudCk7CiAgICB2YXIg dGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwoKICAgIGlm ICh0YWdOYW1lIGluIEVsZW1lbnQuX2luc2VydGlvblRyYW5zbGF0aW9ucy50YWdz KSB7CiAgICAgICRBKGVsZW1lbnQuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbihu b2RlKSB7IGVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSkgfSk7CiAgICAgIEVsZW1l bnQuX2dldENvbnRlbnRGcm9tQW5vbnltb3VzRWxlbWVudCh0YWdOYW1lLCBjb250 ZW50LnN0cmlwU2NyaXB0cygpKQogICAgICAgIC5lYWNoKGZ1bmN0aW9uKG5vZGUp IHsgZWxlbWVudC5hcHBlbmRDaGlsZChub2RlKSB9KTsKICAgIH0KICAgIGVsc2Ug ZWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50LnN0cmlwU2NyaXB0cygpOwoKICAg IGNvbnRlbnQuZXZhbFNjcmlwdHMuYmluZChjb250ZW50KS5kZWZlcigpOwogICAg cmV0dXJuIGVsZW1lbnQ7CiAgfTsKfQoKaWYgKCdvdXRlckhUTUwnIGluIGRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKSB7CiAgRWxlbWVudC5NZXRob2RzLnJl cGxhY2UgPSBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7CiAgICBlbGVtZW50 ID0gJChlbGVtZW50KTsKCiAgICBpZiAoY29udGVudCAmJiBjb250ZW50LnRvRWxl bWVudCkgY29udGVudCA9IGNvbnRlbnQudG9FbGVtZW50KCk7CiAgICBpZiAoT2Jq ZWN0LmlzRWxlbWVudChjb250ZW50KSkgewogICAgICBlbGVtZW50LnBhcmVudE5v ZGUucmVwbGFjZUNoaWxkKGNvbnRlbnQsIGVsZW1lbnQpOwogICAgICByZXR1cm4g ZWxlbWVudDsKICAgIH0KCiAgICBjb250ZW50ID0gT2JqZWN0LnRvSFRNTChjb250 ZW50KTsKICAgIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGUsIHRhZ05h bWUgPSBwYXJlbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwoKICAgIGlmIChFbGVt ZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlvbnMudGFnc1t0YWdOYW1lXSkgewogICAg ICB2YXIgbmV4dFNpYmxpbmcgPSBlbGVtZW50Lm5leHQoKTsKICAgICAgdmFyIGZy YWdtZW50cyA9IEVsZW1lbnQuX2dldENvbnRlbnRGcm9tQW5vbnltb3VzRWxlbWVu dCh0YWdOYW1lLCBjb250ZW50LnN0cmlwU2NyaXB0cygpKTsKICAgICAgcGFyZW50 LnJlbW92ZUNoaWxkKGVsZW1lbnQpOwogICAgICBpZiAobmV4dFNpYmxpbmcpCiAg ICAgICAgZnJhZ21lbnRzLmVhY2goZnVuY3Rpb24obm9kZSkgeyBwYXJlbnQuaW5z ZXJ0QmVmb3JlKG5vZGUsIG5leHRTaWJsaW5nKSB9KTsKICAgICAgZWxzZQogICAg ICAgIGZyYWdtZW50cy5lYWNoKGZ1bmN0aW9uKG5vZGUpIHsgcGFyZW50LmFwcGVu ZENoaWxkKG5vZGUpIH0pOwogICAgfQogICAgZWxzZSBlbGVtZW50Lm91dGVySFRN TCA9IGNvbnRlbnQuc3RyaXBTY3JpcHRzKCk7CgogICAgY29udGVudC5ldmFsU2Ny aXB0cy5iaW5kKGNvbnRlbnQpLmRlZmVyKCk7CiAgICByZXR1cm4gZWxlbWVudDsK ICB9Owp9CgpFbGVtZW50Ll9yZXR1cm5PZmZzZXQgPSBmdW5jdGlvbihsLCB0KSB7 CiAgdmFyIHJlc3VsdCA9IFtsLCB0XTsKICByZXN1bHQubGVmdCA9IGw7CiAgcmVz dWx0LnRvcCA9IHQ7CiAgcmV0dXJuIHJlc3VsdDsKfTsKCkVsZW1lbnQuX2dldENv bnRlbnRGcm9tQW5vbnltb3VzRWxlbWVudCA9IGZ1bmN0aW9uKHRhZ05hbWUsIGh0 bWwpIHsKICB2YXIgZGl2ID0gbmV3IEVsZW1lbnQoJ2RpdicpLCB0ID0gRWxlbWVu dC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zLnRhZ3NbdGFnTmFtZV07CiAgaWYgKHQp IHsKICAgIGRpdi5pbm5lckhUTUwgPSB0WzBdICsgaHRtbCArIHRbMV07CiAgICB0 WzJdLnRpbWVzKGZ1bmN0aW9uKCkgeyBkaXYgPSBkaXYuZmlyc3RDaGlsZCB9KTsK ICB9IGVsc2UgZGl2LmlubmVySFRNTCA9IGh0bWw7CiAgcmV0dXJuICRBKGRpdi5j aGlsZE5vZGVzKTsKfTsKCkVsZW1lbnQuX2luc2VydGlvblRyYW5zbGF0aW9ucyA9 IHsKICBiZWZvcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsKICAgIGVsZW1l bnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgZWxlbWVudCk7CiAgfSwK ICB0b3A6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsKICAgIGVsZW1lbnQuaW5z ZXJ0QmVmb3JlKG5vZGUsIGVsZW1lbnQuZmlyc3RDaGlsZCk7CiAgfSwKICBib3R0 b206IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsKICAgIGVsZW1lbnQuYXBwZW5k Q2hpbGQobm9kZSk7CiAgfSwKICBhZnRlcjogZnVuY3Rpb24oZWxlbWVudCwgbm9k ZSkgewogICAgZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCBl bGVtZW50Lm5leHRTaWJsaW5nKTsKICB9LAogIHRhZ3M6IHsKICAgIFRBQkxFOiAg Wyc8dGFibGU+JywgICAgICAgICAgICAgICAgJzwvdGFibGU+JywgICAgICAgICAg ICAgICAgICAgMV0sCiAgICBUQk9EWTogIFsnPHRhYmxlPjx0Ym9keT4nLCAgICAg ICAgICc8L3Rib2R5PjwvdGFibGU+JywgICAgICAgICAgIDJdLAogICAgVFI6ICAg ICBbJzx0YWJsZT48dGJvZHk+PHRyPicsICAgICAnPC90cj48L3Rib2R5PjwvdGFi bGU+JywgICAgICAzXSwKICAgIFREOiAgICAgWyc8dGFibGU+PHRib2R5Pjx0cj48 dGQ+JywgJzwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+JywgNF0sCiAgICBTRUxF Q1Q6IFsnPHNlbGVjdD4nLCAgICAgICAgICAgICAgICc8L3NlbGVjdD4nLCAgICAg ICAgICAgICAgICAgIDFdCiAgfQp9OwoKKGZ1bmN0aW9uKCkgewogIE9iamVjdC5l eHRlbmQodGhpcy50YWdzLCB7CiAgICBUSEVBRDogdGhpcy50YWdzLlRCT0RZLAog ICAgVEZPT1Q6IHRoaXMudGFncy5UQk9EWSwKICAgIFRIOiAgICB0aGlzLnRhZ3Mu VEQKICB9KTsKfSkuY2FsbChFbGVtZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlvbnMp OwoKRWxlbWVudC5NZXRob2RzLlNpbXVsYXRlZCA9IHsKICBoYXNBdHRyaWJ1dGU6 IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgewogICAgYXR0cmlidXRlID0g RWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLmhhc1thdHRyaWJ1dGVdIHx8 IGF0dHJpYnV0ZTsKICAgIHZhciBub2RlID0gJChlbGVtZW50KS5nZXRBdHRyaWJ1 dGVOb2RlKGF0dHJpYnV0ZSk7CiAgICByZXR1cm4gbm9kZSAmJiBub2RlLnNwZWNp ZmllZDsKICB9Cn07CgpFbGVtZW50Lk1ldGhvZHMuQnlUYWcgPSB7IH07CgpPYmpl Y3QuZXh0ZW5kKEVsZW1lbnQsIEVsZW1lbnQuTWV0aG9kcyk7CgppZiAoIVByb3Rv dHlwZS5Ccm93c2VyRmVhdHVyZXMuRWxlbWVudEV4dGVuc2lvbnMgJiYKICAgIGRv Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLl9fcHJvdG9fXykgewogIHdpbmRv dy5IVE1MRWxlbWVudCA9IHsgfTsKICB3aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90 eXBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuX19wcm90b19fOwog IFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuRWxlbWVudEV4dGVuc2lvbnMgPSB0 cnVlOwp9CgpFbGVtZW50LmV4dGVuZCA9IChmdW5jdGlvbigpIHsKICBpZiAoUHJv dG90eXBlLkJyb3dzZXJGZWF0dXJlcy5TcGVjaWZpY0VsZW1lbnRFeHRlbnNpb25z KQogICAgcmV0dXJuIFByb3RvdHlwZS5LOwoKICB2YXIgTWV0aG9kcyA9IHsgfSwg QnlUYWcgPSBFbGVtZW50Lk1ldGhvZHMuQnlUYWc7CgogIHZhciBleHRlbmQgPSBP YmplY3QuZXh0ZW5kKGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGlmICghZWxlbWVu dCB8fCBlbGVtZW50Ll9leHRlbmRlZEJ5UHJvdG90eXBlIHx8CiAgICAgICAgZWxl bWVudC5ub2RlVHlwZSAhPSAxIHx8IGVsZW1lbnQgPT0gd2luZG93KSByZXR1cm4g ZWxlbWVudDsKCiAgICB2YXIgbWV0aG9kcyA9IE9iamVjdC5jbG9uZShNZXRob2Rz KSwKICAgICAgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZSwgcHJvcGVydHksIHZh bHVlOwoKICAgIC8vIGV4dGVuZCBtZXRob2RzIGZvciBzcGVjaWZpYyB0YWdzCiAg ICBpZiAoQnlUYWdbdGFnTmFtZV0pIE9iamVjdC5leHRlbmQobWV0aG9kcywgQnlU YWdbdGFnTmFtZV0pOwoKICAgIGZvciAocHJvcGVydHkgaW4gbWV0aG9kcykgewog ICAgICB2YWx1ZSA9IG1ldGhvZHNbcHJvcGVydHldOwogICAgICBpZiAoT2JqZWN0 LmlzRnVuY3Rpb24odmFsdWUpICYmICEocHJvcGVydHkgaW4gZWxlbWVudCkpCiAg ICAgICAgZWxlbWVudFtwcm9wZXJ0eV0gPSB2YWx1ZS5tZXRob2RpemUoKTsKICAg IH0KCiAgICBlbGVtZW50Ll9leHRlbmRlZEJ5UHJvdG90eXBlID0gUHJvdG90eXBl LmVtcHR5RnVuY3Rpb247CiAgICByZXR1cm4gZWxlbWVudDsKCiAgfSwgewogICAg cmVmcmVzaDogZnVuY3Rpb24oKSB7CiAgICAgIC8vIGV4dGVuZCBtZXRob2RzIGZv ciBhbGwgdGFncyAoU2FmYXJpIGRvZXNuJ3QgbmVlZCB0aGlzKQogICAgICBpZiAo IVByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuRWxlbWVudEV4dGVuc2lvbnMpIHsK ICAgICAgICBPYmplY3QuZXh0ZW5kKE1ldGhvZHMsIEVsZW1lbnQuTWV0aG9kcyk7 CiAgICAgICAgT2JqZWN0LmV4dGVuZChNZXRob2RzLCBFbGVtZW50Lk1ldGhvZHMu U2ltdWxhdGVkKTsKICAgICAgfQogICAgfQogIH0pOwoKICBleHRlbmQucmVmcmVz aCgpOwogIHJldHVybiBleHRlbmQ7Cn0pKCk7CgpFbGVtZW50Lmhhc0F0dHJpYnV0 ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgewogIGlmIChlbGVtZW50 Lmhhc0F0dHJpYnV0ZSkgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJp YnV0ZSk7CiAgcmV0dXJuIEVsZW1lbnQuTWV0aG9kcy5TaW11bGF0ZWQuaGFzQXR0 cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZSk7Cn07CgpFbGVtZW50LmFkZE1ldGhv ZHMgPSBmdW5jdGlvbihtZXRob2RzKSB7CiAgdmFyIEYgPSBQcm90b3R5cGUuQnJv d3NlckZlYXR1cmVzLCBUID0gRWxlbWVudC5NZXRob2RzLkJ5VGFnOwoKICBpZiAo IW1ldGhvZHMpIHsKICAgIE9iamVjdC5leHRlbmQoRm9ybSwgRm9ybS5NZXRob2Rz KTsKICAgIE9iamVjdC5leHRlbmQoRm9ybS5FbGVtZW50LCBGb3JtLkVsZW1lbnQu TWV0aG9kcyk7CiAgICBPYmplY3QuZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcy5CeVRh ZywgewogICAgICAiRk9STSI6ICAgICBPYmplY3QuY2xvbmUoRm9ybS5NZXRob2Rz KSwKICAgICAgIklOUFVUIjogICAgT2JqZWN0LmNsb25lKEZvcm0uRWxlbWVudC5N ZXRob2RzKSwKICAgICAgIlNFTEVDVCI6ICAgT2JqZWN0LmNsb25lKEZvcm0uRWxl bWVudC5NZXRob2RzKSwKICAgICAgIlRFWFRBUkVBIjogT2JqZWN0LmNsb25lKEZv cm0uRWxlbWVudC5NZXRob2RzKQogICAgfSk7CiAgfQoKICBpZiAoYXJndW1lbnRz Lmxlbmd0aCA9PSAyKSB7CiAgICB2YXIgdGFnTmFtZSA9IG1ldGhvZHM7CiAgICBt ZXRob2RzID0gYXJndW1lbnRzWzFdOwogIH0KCiAgaWYgKCF0YWdOYW1lKSBPYmpl Y3QuZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcywgbWV0aG9kcyB8fCB7IH0pOwogIGVs c2UgewogICAgaWYgKE9iamVjdC5pc0FycmF5KHRhZ05hbWUpKSB0YWdOYW1lLmVh Y2goZXh0ZW5kKTsKICAgIGVsc2UgZXh0ZW5kKHRhZ05hbWUpOwogIH0KCiAgZnVu Y3Rpb24gZXh0ZW5kKHRhZ05hbWUpIHsKICAgIHRhZ05hbWUgPSB0YWdOYW1lLnRv VXBwZXJDYXNlKCk7CiAgICBpZiAoIUVsZW1lbnQuTWV0aG9kcy5CeVRhZ1t0YWdO YW1lXSkKICAgICAgRWxlbWVudC5NZXRob2RzLkJ5VGFnW3RhZ05hbWVdID0geyB9 OwogICAgT2JqZWN0LmV4dGVuZChFbGVtZW50Lk1ldGhvZHMuQnlUYWdbdGFnTmFt ZV0sIG1ldGhvZHMpOwogIH0KCiAgZnVuY3Rpb24gY29weShtZXRob2RzLCBkZXN0 aW5hdGlvbiwgb25seUlmQWJzZW50KSB7CiAgICBvbmx5SWZBYnNlbnQgPSBvbmx5 SWZBYnNlbnQgfHwgZmFsc2U7CiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBtZXRo b2RzKSB7CiAgICAgIHZhciB2YWx1ZSA9IG1ldGhvZHNbcHJvcGVydHldOwogICAg ICBpZiAoIU9iamVjdC5pc0Z1bmN0aW9uKHZhbHVlKSkgY29udGludWU7CiAgICAg IGlmICghb25seUlmQWJzZW50IHx8ICEocHJvcGVydHkgaW4gZGVzdGluYXRpb24p KQogICAgICAgIGRlc3RpbmF0aW9uW3Byb3BlcnR5XSA9IHZhbHVlLm1ldGhvZGl6 ZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZmluZERPTUNsYXNzKHRhZ05hbWUp IHsKICAgIHZhciBrbGFzczsKICAgIHZhciB0cmFucyA9IHsKICAgICAgIk9QVEdS T1VQIjogIk9wdEdyb3VwIiwgIlRFWFRBUkVBIjogIlRleHRBcmVhIiwgIlAiOiAi UGFyYWdyYXBoIiwKICAgICAgIkZJRUxEU0VUIjogIkZpZWxkU2V0IiwgIlVMIjog IlVMaXN0IiwgIk9MIjogIk9MaXN0IiwgIkRMIjogIkRMaXN0IiwKICAgICAgIkRJ UiI6ICJEaXJlY3RvcnkiLCAiSDEiOiAiSGVhZGluZyIsICJIMiI6ICJIZWFkaW5n IiwgIkgzIjogIkhlYWRpbmciLAogICAgICAiSDQiOiAiSGVhZGluZyIsICJINSI6 ICJIZWFkaW5nIiwgIkg2IjogIkhlYWRpbmciLCAiUSI6ICJRdW90ZSIsCiAgICAg ICJJTlMiOiAiTW9kIiwgIkRFTCI6ICJNb2QiLCAiQSI6ICJBbmNob3IiLCAiSU1H IjogIkltYWdlIiwgIkNBUFRJT04iOgogICAgICAiVGFibGVDYXB0aW9uIiwgIkNP TCI6ICJUYWJsZUNvbCIsICJDT0xHUk9VUCI6ICJUYWJsZUNvbCIsICJUSEVBRCI6 CiAgICAgICJUYWJsZVNlY3Rpb24iLCAiVEZPT1QiOiAiVGFibGVTZWN0aW9uIiwg IlRCT0RZIjogIlRhYmxlU2VjdGlvbiIsICJUUiI6CiAgICAgICJUYWJsZVJvdyIs ICJUSCI6ICJUYWJsZUNlbGwiLCAiVEQiOiAiVGFibGVDZWxsIiwgIkZSQU1FU0VU IjoKICAgICAgIkZyYW1lU2V0IiwgIklGUkFNRSI6ICJJRnJhbWUiCiAgICB9Owog ICAgaWYgKHRyYW5zW3RhZ05hbWVdKSBrbGFzcyA9ICdIVE1MJyArIHRyYW5zW3Rh Z05hbWVdICsgJ0VsZW1lbnQnOwogICAgaWYgKHdpbmRvd1trbGFzc10pIHJldHVy biB3aW5kb3dba2xhc3NdOwogICAga2xhc3MgPSAnSFRNTCcgKyB0YWdOYW1lICsg J0VsZW1lbnQnOwogICAgaWYgKHdpbmRvd1trbGFzc10pIHJldHVybiB3aW5kb3db a2xhc3NdOwogICAga2xhc3MgPSAnSFRNTCcgKyB0YWdOYW1lLmNhcGl0YWxpemUo KSArICdFbGVtZW50JzsKICAgIGlmICh3aW5kb3dba2xhc3NdKSByZXR1cm4gd2lu ZG93W2tsYXNzXTsKCiAgICB3aW5kb3dba2xhc3NdID0geyB9OwogICAgd2luZG93 W2tsYXNzXS5wcm90b3R5cGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05h bWUpLl9fcHJvdG9fXzsKICAgIHJldHVybiB3aW5kb3dba2xhc3NdOwogIH0KCiAg aWYgKEYuRWxlbWVudEV4dGVuc2lvbnMpIHsKICAgIGNvcHkoRWxlbWVudC5NZXRo b2RzLCBIVE1MRWxlbWVudC5wcm90b3R5cGUpOwogICAgY29weShFbGVtZW50Lk1l dGhvZHMuU2ltdWxhdGVkLCBIVE1MRWxlbWVudC5wcm90b3R5cGUsIHRydWUpOwog IH0KCiAgaWYgKEYuU3BlY2lmaWNFbGVtZW50RXh0ZW5zaW9ucykgewogICAgZm9y ICh2YXIgdGFnIGluIEVsZW1lbnQuTWV0aG9kcy5CeVRhZykgewogICAgICB2YXIg a2xhc3MgPSBmaW5kRE9NQ2xhc3ModGFnKTsKICAgICAgaWYgKE9iamVjdC5pc1Vu ZGVmaW5lZChrbGFzcykpIGNvbnRpbnVlOwogICAgICBjb3B5KFRbdGFnXSwga2xh c3MucHJvdG90eXBlKTsKICAgIH0KICB9CgogIE9iamVjdC5leHRlbmQoRWxlbWVu dCwgRWxlbWVudC5NZXRob2RzKTsKICBkZWxldGUgRWxlbWVudC5CeVRhZzsKCiAg aWYgKEVsZW1lbnQuZXh0ZW5kLnJlZnJlc2gpIEVsZW1lbnQuZXh0ZW5kLnJlZnJl c2goKTsKICBFbGVtZW50LmNhY2hlID0geyB9Owp9OwoKZG9jdW1lbnQudmlld3Bv cnQgPSB7CiAgZ2V0RGltZW5zaW9uczogZnVuY3Rpb24oKSB7CiAgICB2YXIgZGlt ZW5zaW9ucyA9IHsgfTsKICAgIHZhciBCID0gUHJvdG90eXBlLkJyb3dzZXI7CiAg ICAkdygnd2lkdGggaGVpZ2h0JykuZWFjaChmdW5jdGlvbihkKSB7CiAgICAgIHZh ciBEID0gZC5jYXBpdGFsaXplKCk7CiAgICAgIGRpbWVuc2lvbnNbZF0gPSAoQi5X ZWJLaXQgJiYgIWRvY3VtZW50LmV2YWx1YXRlKSA/IHNlbGZbJ2lubmVyJyArIERd IDoKICAgICAgICAoQi5PcGVyYSkgPyBkb2N1bWVudC5ib2R5WydjbGllbnQnICsg RF0gOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbJ2NsaWVudCcgKyBEXTsKICAg IH0pOwogICAgcmV0dXJuIGRpbWVuc2lvbnM7CiAgfSwKCiAgZ2V0V2lkdGg6IGZ1 bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuZ2V0RGltZW5zaW9ucygpLndpZHRo OwogIH0sCgogIGdldEhlaWdodDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhp cy5nZXREaW1lbnNpb25zKCkuaGVpZ2h0OwogIH0sCgogIGdldFNjcm9sbE9mZnNl dHM6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIEVsZW1lbnQuX3JldHVybk9mZnNl dCgKICAgICAgd2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50 RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCwK ICAgICAgd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxl bWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApOwogIH0K fTsKLyogUG9ydGlvbnMgb2YgdGhlIFNlbGVjdG9yIGNsYXNzIGFyZSBkZXJpdmVk IGZyb20gSmFjayBTbG9jdW3DouKCrOKEonMgRG9tUXVlcnksCiAqIHBhcnQgb2Yg WVVJLUV4dCB2ZXJzaW9uIDAuNDAsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJt cyBvZiBhbiBNSVQtc3R5bGUKICogbGljZW5zZS4gIFBsZWFzZSBzZWUgaHR0cDov L3d3dy55dWktZXh0LmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uICovCgp2YXIg U2VsZWN0b3IgPSBDbGFzcy5jcmVhdGUoewogIGluaXRpYWxpemU6IGZ1bmN0aW9u KGV4cHJlc3Npb24pIHsKICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24u c3RyaXAoKTsKICAgIHRoaXMuY29tcGlsZU1hdGNoZXIoKTsKICB9LAoKICBzaG91 bGRVc2VYUGF0aDogZnVuY3Rpb24oKSB7CiAgICBpZiAoIVByb3RvdHlwZS5Ccm93 c2VyRmVhdHVyZXMuWFBhdGgpIHJldHVybiBmYWxzZTsKCiAgICB2YXIgZSA9IHRo aXMuZXhwcmVzc2lvbjsKCiAgICAvLyBTYWZhcmkgMyBjaG9rZXMgb24gOiotb2Yt dHlwZSBhbmQgOmVtcHR5CiAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuV2ViS2l0 ICYmCiAgICAgKGUuaW5jbHVkZSgiLW9mLXR5cGUiKSB8fCBlLmluY2x1ZGUoIjpl bXB0eSIpKSkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIC8vIFhQYXRoIGNhbid0 IGRvIG5hbWVzcGFjZWQgYXR0cmlidXRlcywgbm9yIGNhbiBpdCByZWFkCiAgICAv LyB0aGUgImNoZWNrZWQiIHByb3BlcnR5IGZyb20gRE9NIG5vZGVzCiAgICBpZiAo KC8oXFtbXHctXSo/Onw6Y2hlY2tlZCkvKS50ZXN0KHRoaXMuZXhwcmVzc2lvbikp CiAgICAgIHJldHVybiBmYWxzZTsKCiAgICByZXR1cm4gdHJ1ZTsKICB9LAoKICBj b21waWxlTWF0Y2hlcjogZnVuY3Rpb24oKSB7CiAgICBpZiAodGhpcy5zaG91bGRV c2VYUGF0aCgpKQogICAgICByZXR1cm4gdGhpcy5jb21waWxlWFBhdGhNYXRjaGVy KCk7CgogICAgdmFyIGUgPSB0aGlzLmV4cHJlc3Npb24sIHBzID0gU2VsZWN0b3Iu cGF0dGVybnMsIGggPSBTZWxlY3Rvci5oYW5kbGVycywKICAgICAgICBjID0gU2Vs ZWN0b3IuY3JpdGVyaWEsIGxlLCBwLCBtOwoKICAgIGlmIChTZWxlY3Rvci5fY2Fj aGVbZV0pIHsKICAgICAgdGhpcy5tYXRjaGVyID0gU2VsZWN0b3IuX2NhY2hlW2Vd OwogICAgICByZXR1cm47CiAgICB9CgogICAgdGhpcy5tYXRjaGVyID0gWyJ0aGlz Lm1hdGNoZXIgPSBmdW5jdGlvbihyb290KSB7IiwKICAgICAgICAgICAgICAgICAg ICAidmFyIHIgPSByb290LCBoID0gU2VsZWN0b3IuaGFuZGxlcnMsIGMgPSBmYWxz ZSwgbjsiXTsKCiAgICB3aGlsZSAoZSAmJiBsZSAhPSBlICYmICgvXFMvKS50ZXN0 KGUpKSB7CiAgICAgIGxlID0gZTsKICAgICAgZm9yICh2YXIgaSBpbiBwcykgewog ICAgICAgIHAgPSBwc1tpXTsKICAgICAgICBpZiAobSA9IGUubWF0Y2gocCkpIHsK ICAgICAgICAgIHRoaXMubWF0Y2hlci5wdXNoKE9iamVjdC5pc0Z1bmN0aW9uKGNb aV0pID8gY1tpXShtKSA6CiAgICAJICAgICAgbmV3IFRlbXBsYXRlKGNbaV0pLmV2 YWx1YXRlKG0pKTsKICAgICAgICAgIGUgPSBlLnJlcGxhY2UobVswXSwgJycpOwog ICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdGhp cy5tYXRjaGVyLnB1c2goInJldHVybiBoLnVuaXF1ZShuKTtcbn0iKTsKICAgIGV2 YWwodGhpcy5tYXRjaGVyLmpvaW4oJ1xuJykpOwogICAgU2VsZWN0b3IuX2NhY2hl W3RoaXMuZXhwcmVzc2lvbl0gPSB0aGlzLm1hdGNoZXI7CiAgfSwKCiAgY29tcGls ZVhQYXRoTWF0Y2hlcjogZnVuY3Rpb24oKSB7CiAgICB2YXIgZSA9IHRoaXMuZXhw cmVzc2lvbiwgcHMgPSBTZWxlY3Rvci5wYXR0ZXJucywKICAgICAgICB4ID0gU2Vs ZWN0b3IueHBhdGgsIGxlLCBtOwoKICAgIGlmIChTZWxlY3Rvci5fY2FjaGVbZV0p IHsKICAgICAgdGhpcy54cGF0aCA9IFNlbGVjdG9yLl9jYWNoZVtlXTsgcmV0dXJu OwogICAgfQoKICAgIHRoaXMubWF0Y2hlciA9IFsnLi8vKiddOwogICAgd2hpbGUg KGUgJiYgbGUgIT0gZSAmJiAoL1xTLykudGVzdChlKSkgewogICAgICBsZSA9IGU7 CiAgICAgIGZvciAodmFyIGkgaW4gcHMpIHsKICAgICAgICBpZiAobSA9IGUubWF0 Y2gocHNbaV0pKSB7CiAgICAgICAgICB0aGlzLm1hdGNoZXIucHVzaChPYmplY3Qu aXNGdW5jdGlvbih4W2ldKSA/IHhbaV0obSkgOgogICAgICAgICAgICBuZXcgVGVt cGxhdGUoeFtpXSkuZXZhbHVhdGUobSkpOwogICAgICAgICAgZSA9IGUucmVwbGFj ZShtWzBdLCAnJyk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0K ICAgIH0KCiAgICB0aGlzLnhwYXRoID0gdGhpcy5tYXRjaGVyLmpvaW4oJycpOwog ICAgU2VsZWN0b3IuX2NhY2hlW3RoaXMuZXhwcmVzc2lvbl0gPSB0aGlzLnhwYXRo OwogIH0sCgogIGZpbmRFbGVtZW50czogZnVuY3Rpb24ocm9vdCkgewogICAgcm9v dCA9IHJvb3QgfHwgZG9jdW1lbnQ7CiAgICBpZiAodGhpcy54cGF0aCkgcmV0dXJu IGRvY3VtZW50Ll9nZXRFbGVtZW50c0J5WFBhdGgodGhpcy54cGF0aCwgcm9vdCk7 CiAgICByZXR1cm4gdGhpcy5tYXRjaGVyKHJvb3QpOwogIH0sCgogIG1hdGNoOiBm dW5jdGlvbihlbGVtZW50KSB7CiAgICB0aGlzLnRva2VucyA9IFtdOwoKICAgIHZh ciBlID0gdGhpcy5leHByZXNzaW9uLCBwcyA9IFNlbGVjdG9yLnBhdHRlcm5zLCBh cyA9IFNlbGVjdG9yLmFzc2VydGlvbnM7CiAgICB2YXIgbGUsIHAsIG07CgogICAg d2hpbGUgKGUgJiYgbGUgIT09IGUgJiYgKC9cUy8pLnRlc3QoZSkpIHsKICAgICAg bGUgPSBlOwogICAgICBmb3IgKHZhciBpIGluIHBzKSB7CiAgICAgICAgcCA9IHBz W2ldOwogICAgICAgIGlmIChtID0gZS5tYXRjaChwKSkgewogICAgICAgICAgLy8g dXNlIHRoZSBTZWxlY3Rvci5hc3NlcnRpb25zIG1ldGhvZHMgdW5sZXNzIHRoZSBz ZWxlY3RvcgogICAgICAgICAgLy8gaXMgdG9vIGNvbXBsZXguCiAgICAgICAgICBp ZiAoYXNbaV0pIHsKICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaChbaSwgT2Jq ZWN0LmNsb25lKG0pXSk7CiAgICAgICAgICAgIGUgPSBlLnJlcGxhY2UobVswXSwg JycpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gcmVsdWN0YW50 bHkgZG8gYSBkb2N1bWVudC13aWRlIHNlYXJjaAogICAgICAgICAgICAvLyBhbmQg bG9vayBmb3IgYSBtYXRjaCBpbiB0aGUgYXJyYXkKICAgICAgICAgICAgcmV0dXJu IHRoaXMuZmluZEVsZW1lbnRzKGRvY3VtZW50KS5pbmNsdWRlKGVsZW1lbnQpOwog ICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHZhciBtYXRj aCA9IHRydWUsIG5hbWUsIG1hdGNoZXM7CiAgICBmb3IgKHZhciBpID0gMCwgdG9r ZW47IHRva2VuID0gdGhpcy50b2tlbnNbaV07IGkrKykgewogICAgICBuYW1lID0g dG9rZW5bMF0sIG1hdGNoZXMgPSB0b2tlblsxXTsKICAgICAgaWYgKCFTZWxlY3Rv ci5hc3NlcnRpb25zW25hbWVdKGVsZW1lbnQsIG1hdGNoZXMpKSB7CiAgICAgICAg bWF0Y2ggPSBmYWxzZTsgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4g bWF0Y2g7CiAgfSwKCiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJu IHRoaXMuZXhwcmVzc2lvbjsKICB9LAoKICBpbnNwZWN0OiBmdW5jdGlvbigpIHsK ICAgIHJldHVybiAiIzxTZWxlY3RvcjoiICsgdGhpcy5leHByZXNzaW9uLmluc3Bl Y3QoKSArICI+IjsKICB9Cn0pOwoKT2JqZWN0LmV4dGVuZChTZWxlY3Rvciwgewog IF9jYWNoZTogeyB9LAoKICB4cGF0aDogewogICAgZGVzY2VuZGFudDogICAiLy8q IiwKICAgIGNoaWxkOiAgICAgICAgIi8qIiwKICAgIGFkamFjZW50OiAgICAgIi9m b2xsb3dpbmctc2libGluZzo6KlsxXSIsCiAgICBsYXRlclNpYmxpbmc6ICcvZm9s bG93aW5nLXNpYmxpbmc6OionLAogICAgdGFnTmFtZTogICAgICBmdW5jdGlvbiht KSB7CiAgICAgIGlmIChtWzFdID09ICcqJykgcmV0dXJuICcnOwogICAgICByZXR1 cm4gIltsb2NhbC1uYW1lKCk9JyIgKyBtWzFdLnRvTG93ZXJDYXNlKCkgKwogICAg ICAgICAgICAgIicgb3IgbG9jYWwtbmFtZSgpPSciICsgbVsxXS50b1VwcGVyQ2Fz ZSgpICsgIiddIjsKICAgIH0sCiAgICBjbGFzc05hbWU6ICAgICJbY29udGFpbnMo Y29uY2F0KCcgJywgQGNsYXNzLCAnICcpLCAnICN7MX0gJyldIiwKICAgIGlkOiAg ICAgICAgICAgIltAaWQ9JyN7MX0nXSIsCiAgICBhdHRyUHJlc2VuY2U6IGZ1bmN0 aW9uKG0pIHsKICAgICAgbVsxXSA9IG1bMV0udG9Mb3dlckNhc2UoKTsKICAgICAg cmV0dXJuIG5ldyBUZW1wbGF0ZSgiW0AjezF9XSIpLmV2YWx1YXRlKG0pOwogICAg fSwKICAgIGF0dHI6IGZ1bmN0aW9uKG0pIHsKICAgICAgbVsxXSA9IG1bMV0udG9M b3dlckNhc2UoKTsKICAgICAgbVszXSA9IG1bNV0gfHwgbVs2XTsKICAgICAgcmV0 dXJuIG5ldyBUZW1wbGF0ZShTZWxlY3Rvci54cGF0aC5vcGVyYXRvcnNbbVsyXV0p LmV2YWx1YXRlKG0pOwogICAgfSwKICAgIHBzZXVkbzogZnVuY3Rpb24obSkgewog ICAgICB2YXIgaCA9IFNlbGVjdG9yLnhwYXRoLnBzZXVkb3NbbVsxXV07CiAgICAg IGlmICghaCkgcmV0dXJuICcnOwogICAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24o aCkpIHJldHVybiBoKG0pOwogICAgICByZXR1cm4gbmV3IFRlbXBsYXRlKFNlbGVj dG9yLnhwYXRoLnBzZXVkb3NbbVsxXV0pLmV2YWx1YXRlKG0pOwogICAgfSwKICAg IG9wZXJhdG9yczogewogICAgICAnPSc6ICAiW0AjezF9PScjezN9J10iLAogICAg ICAnIT0nOiAiW0AjezF9IT0nI3szfSddIiwKICAgICAgJ149JzogIltzdGFydHMt d2l0aChAI3sxfSwgJyN7M30nKV0iLAogICAgICAnJD0nOiAiW3N1YnN0cmluZyhA I3sxfSwgKHN0cmluZy1sZW5ndGgoQCN7MX0pIC0gc3RyaW5nLWxlbmd0aCgnI3sz fScpICsgMSkpPScjezN9J10iLAogICAgICAnKj0nOiAiW2NvbnRhaW5zKEAjezF9 LCAnI3szfScpXSIsCiAgICAgICd+PSc6ICJbY29udGFpbnMoY29uY2F0KCcgJywg QCN7MX0sICcgJyksICcgI3szfSAnKV0iLAogICAgICAnfD0nOiAiW2NvbnRhaW5z KGNvbmNhdCgnLScsIEAjezF9LCAnLScpLCAnLSN7M30tJyldIgogICAgfSwKICAg IHBzZXVkb3M6IHsKICAgICAgJ2ZpcnN0LWNoaWxkJzogJ1tub3QocHJlY2VkaW5n LXNpYmxpbmc6OiopXScsCiAgICAgICdsYXN0LWNoaWxkJzogICdbbm90KGZvbGxv d2luZy1zaWJsaW5nOjoqKV0nLAogICAgICAnb25seS1jaGlsZCc6ICAnW25vdChw cmVjZWRpbmctc2libGluZzo6KiBvciBmb2xsb3dpbmctc2libGluZzo6KildJywK ICAgICAgJ2VtcHR5JzogICAgICAgIltjb3VudCgqKSA9IDAgYW5kIChjb3VudCh0 ZXh0KCkpID0gMCBvciB0cmFuc2xhdGUodGV4dCgpLCAnIFx0XHJcbicsICcnKSA9 ICcnKV0iLAogICAgICAnY2hlY2tlZCc6ICAgICAiW0BjaGVja2VkXSIsCiAgICAg ICdkaXNhYmxlZCc6ICAgICJbQGRpc2FibGVkXSIsCiAgICAgICdlbmFibGVkJzog ICAgICJbbm90KEBkaXNhYmxlZCldIiwKICAgICAgJ25vdCc6IGZ1bmN0aW9uKG0p IHsKICAgICAgICB2YXIgZSA9IG1bNl0sIHAgPSBTZWxlY3Rvci5wYXR0ZXJucywK ICAgICAgICAgICAgeCA9IFNlbGVjdG9yLnhwYXRoLCBsZSwgdjsKCiAgICAgICAg dmFyIGV4Y2x1c2lvbiA9IFtdOwogICAgICAgIHdoaWxlIChlICYmIGxlICE9IGUg JiYgKC9cUy8pLnRlc3QoZSkpIHsKICAgICAgICAgIGxlID0gZTsKICAgICAgICAg IGZvciAodmFyIGkgaW4gcCkgewogICAgICAgICAgICBpZiAobSA9IGUubWF0Y2go cFtpXSkpIHsKICAgICAgICAgICAgICB2ID0gT2JqZWN0LmlzRnVuY3Rpb24oeFtp XSkgPyB4W2ldKG0pIDogbmV3IFRlbXBsYXRlKHhbaV0pLmV2YWx1YXRlKG0pOwog ICAgICAgICAgICAgIGV4Y2x1c2lvbi5wdXNoKCIoIiArIHYuc3Vic3RyaW5nKDEs IHYubGVuZ3RoIC0gMSkgKyAiKSIpOwogICAgICAgICAgICAgIGUgPSBlLnJlcGxh Y2UobVswXSwgJycpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9 CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAiW25vdCgiICsg ZXhjbHVzaW9uLmpvaW4oIiBhbmQgIikgKyAiKV0iOwogICAgICB9LAogICAgICAn bnRoLWNoaWxkJzogICAgICBmdW5jdGlvbihtKSB7CiAgICAgICAgcmV0dXJuIFNl bGVjdG9yLnhwYXRoLnBzZXVkb3MubnRoKCIoY291bnQoLi9wcmVjZWRpbmctc2li bGluZzo6KikgKyAxKSAiLCBtKTsKICAgICAgfSwKICAgICAgJ250aC1sYXN0LWNo aWxkJzogZnVuY3Rpb24obSkgewogICAgICAgIHJldHVybiBTZWxlY3Rvci54cGF0 aC5wc2V1ZG9zLm50aCgiKGNvdW50KC4vZm9sbG93aW5nLXNpYmxpbmc6OiopICsg MSkgIiwgbSk7CiAgICAgIH0sCiAgICAgICdudGgtb2YtdHlwZSc6ICAgIGZ1bmN0 aW9uKG0pIHsKICAgICAgICByZXR1cm4gU2VsZWN0b3IueHBhdGgucHNldWRvcy5u dGgoInBvc2l0aW9uKCkgIiwgbSk7CiAgICAgIH0sCiAgICAgICdudGgtbGFzdC1v Zi10eXBlJzogZnVuY3Rpb24obSkgewogICAgICAgIHJldHVybiBTZWxlY3Rvci54 cGF0aC5wc2V1ZG9zLm50aCgiKGxhc3QoKSArIDEgLSBwb3NpdGlvbigpKSAiLCBt KTsKICAgICAgfSwKICAgICAgJ2ZpcnN0LW9mLXR5cGUnOiAgZnVuY3Rpb24obSkg ewogICAgICAgIG1bNl0gPSAiMSI7IHJldHVybiBTZWxlY3Rvci54cGF0aC5wc2V1 ZG9zWydudGgtb2YtdHlwZSddKG0pOwogICAgICB9LAogICAgICAnbGFzdC1vZi10 eXBlJzogICBmdW5jdGlvbihtKSB7CiAgICAgICAgbVs2XSA9ICIxIjsgcmV0dXJu IFNlbGVjdG9yLnhwYXRoLnBzZXVkb3NbJ250aC1sYXN0LW9mLXR5cGUnXShtKTsK ICAgICAgfSwKICAgICAgJ29ubHktb2YtdHlwZSc6ICAgZnVuY3Rpb24obSkgewog ICAgICAgIHZhciBwID0gU2VsZWN0b3IueHBhdGgucHNldWRvczsgcmV0dXJuIHBb J2ZpcnN0LW9mLXR5cGUnXShtKSArIHBbJ2xhc3Qtb2YtdHlwZSddKG0pOwogICAg ICB9LAogICAgICBudGg6IGZ1bmN0aW9uKGZyYWdtZW50LCBtKSB7CiAgICAgICAg dmFyIG1tLCBmb3JtdWxhID0gbVs2XSwgcHJlZGljYXRlOwogICAgICAgIGlmIChm b3JtdWxhID09ICdldmVuJykgZm9ybXVsYSA9ICcybiswJzsKICAgICAgICBpZiAo Zm9ybXVsYSA9PSAnb2RkJykgIGZvcm11bGEgPSAnMm4rMSc7CiAgICAgICAgaWYg KG1tID0gZm9ybXVsYS5tYXRjaCgvXihcZCspJC8pKSAvLyBkaWdpdCBvbmx5CiAg ICAgICAgICByZXR1cm4gJ1snICsgZnJhZ21lbnQgKyAiPSAiICsgbW1bMV0gKyAn XSc7CiAgICAgICAgaWYgKG1tID0gZm9ybXVsYS5tYXRjaCgvXigtP1xkKik/bigo WystXSkoXGQrKSk/LykpIHsgLy8gYW4rYgogICAgICAgICAgaWYgKG1tWzFdID09 ICItIikgbW1bMV0gPSAtMTsKICAgICAgICAgIHZhciBhID0gbW1bMV0gPyBOdW1i ZXIobW1bMV0pIDogMTsKICAgICAgICAgIHZhciBiID0gbW1bMl0gPyBOdW1iZXIo bW1bMl0pIDogMDsKICAgICAgICAgIHByZWRpY2F0ZSA9ICJbKCgje2ZyYWdtZW50 fSAtICN7Yn0pIG1vZCAje2F9ID0gMCkgYW5kICIgKwogICAgICAgICAgIigoI3tm cmFnbWVudH0gLSAje2J9KSBkaXYgI3thfSA+PSAwKV0iOwogICAgICAgICAgcmV0 dXJuIG5ldyBUZW1wbGF0ZShwcmVkaWNhdGUpLmV2YWx1YXRlKHsKICAgICAgICAg ICAgZnJhZ21lbnQ6IGZyYWdtZW50LCBhOiBhLCBiOiBiIH0pOwogICAgICAgIH0K ICAgICAgfQogICAgfQogIH0sCgogIGNyaXRlcmlhOiB7CiAgICB0YWdOYW1lOiAg ICAgICduID0gaC50YWdOYW1lKG4sIHIsICIjezF9IiwgYyk7ICAgICAgYyA9IGZh bHNlOycsCiAgICBjbGFzc05hbWU6ICAgICduID0gaC5jbGFzc05hbWUobiwgciwg IiN7MX0iLCBjKTsgICAgYyA9IGZhbHNlOycsCiAgICBpZDogICAgICAgICAgICdu ID0gaC5pZChuLCByLCAiI3sxfSIsIGMpOyAgICAgICAgICAgYyA9IGZhbHNlOycs CiAgICBhdHRyUHJlc2VuY2U6ICduID0gaC5hdHRyUHJlc2VuY2UobiwgciwgIiN7 MX0iLCBjKTsgYyA9IGZhbHNlOycsCiAgICBhdHRyOiBmdW5jdGlvbihtKSB7CiAg ICAgIG1bM10gPSAobVs1XSB8fCBtWzZdKTsKICAgICAgcmV0dXJuIG5ldyBUZW1w bGF0ZSgnbiA9IGguYXR0cihuLCByLCAiI3sxfSIsICIjezN9IiwgIiN7Mn0iLCBj KTsgYyA9IGZhbHNlOycpLmV2YWx1YXRlKG0pOwogICAgfSwKICAgIHBzZXVkbzog ZnVuY3Rpb24obSkgewogICAgICBpZiAobVs2XSkgbVs2XSA9IG1bNl0ucmVwbGFj ZSgvIi9nLCAnXFwiJyk7CiAgICAgIHJldHVybiBuZXcgVGVtcGxhdGUoJ24gPSBo LnBzZXVkbyhuLCAiI3sxfSIsICIjezZ9IiwgciwgYyk7IGMgPSBmYWxzZTsnKS5l dmFsdWF0ZShtKTsKICAgIH0sCiAgICBkZXNjZW5kYW50OiAgICdjID0gImRlc2Nl bmRhbnQiOycsCiAgICBjaGlsZDogICAgICAgICdjID0gImNoaWxkIjsnLAogICAg YWRqYWNlbnQ6ICAgICAnYyA9ICJhZGphY2VudCI7JywKICAgIGxhdGVyU2libGlu ZzogJ2MgPSAibGF0ZXJTaWJsaW5nIjsnCiAgfSwKCiAgcGF0dGVybnM6IHsKICAg IC8vIGNvbWJpbmF0b3JzIG11c3QgYmUgbGlzdGVkIGZpcnN0CiAgICAvLyAoYW5k IGRlc2NlbmRhbnQgbmVlZHMgdG8gYmUgbGFzdCBjb21iaW5hdG9yKQogICAgbGF0 ZXJTaWJsaW5nOiAvXlxzKn5ccyovLAogICAgY2hpbGQ6ICAgICAgICAvXlxzKj5c cyovLAogICAgYWRqYWNlbnQ6ICAgICAvXlxzKlwrXHMqLywKICAgIGRlc2NlbmRh bnQ6ICAgL15ccy8sCgogICAgLy8gc2VsZWN0b3JzIGZvbGxvdwogICAgdGFnTmFt ZTogICAgICAvXlxzKihcKnxbXHdcLV0rKShcYnwkKT8vLAogICAgaWQ6ICAgICAg ICAgICAvXiMoW1x3XC1cKl0rKShcYnwkKS8sCiAgICBjbGFzc05hbWU6ICAgIC9e XC4oW1x3XC1cKl0rKShcYnwkKS8sCiAgICBwc2V1ZG86Ci9eOigoZmlyc3R8bGFz dHxudGh8bnRoLWxhc3R8b25seSkoLWNoaWxkfC1vZi10eXBlKXxlbXB0eXxjaGVj a2VkfChlbnxkaXMpYWJsZWR8bm90KShcKCguKj8pXCkpPyhcYnwkfCg/PVxzfFs6 K34+XSkpLywKICAgIGF0dHJQcmVzZW5jZTogL15cWyhbXHddKylcXS8sCiAgICBh dHRyOiAgICAgICAgIC9cWygoPzpbXHctXSo6KT9bXHctXSspXHMqKD86KFshXiQq fnxdPz0pXHMqKChbJyJdKShbXlw0XSo/KVw0fChbXiciXVteXF1dKj8pKSk/XF0v CiAgfSwKCiAgLy8gZm9yIFNlbGVjdG9yLm1hdGNoIGFuZCBFbGVtZW50I21hdGNo CiAgYXNzZXJ0aW9uczogewogICAgdGFnTmFtZTogZnVuY3Rpb24oZWxlbWVudCwg bWF0Y2hlcykgewogICAgICByZXR1cm4gbWF0Y2hlc1sxXS50b1VwcGVyQ2FzZSgp ID09IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwogICAgfSwKCiAgICBj bGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIG1hdGNoZXMpIHsKICAgICAgcmV0 dXJuIEVsZW1lbnQuaGFzQ2xhc3NOYW1lKGVsZW1lbnQsIG1hdGNoZXNbMV0pOwog ICAgfSwKCiAgICBpZDogZnVuY3Rpb24oZWxlbWVudCwgbWF0Y2hlcykgewogICAg ICByZXR1cm4gZWxlbWVudC5pZCA9PT0gbWF0Y2hlc1sxXTsKICAgIH0sCgogICAg YXR0clByZXNlbmNlOiBmdW5jdGlvbihlbGVtZW50LCBtYXRjaGVzKSB7CiAgICAg IHJldHVybiBFbGVtZW50Lmhhc0F0dHJpYnV0ZShlbGVtZW50LCBtYXRjaGVzWzFd KTsKICAgIH0sCgogICAgYXR0cjogZnVuY3Rpb24oZWxlbWVudCwgbWF0Y2hlcykg ewogICAgICB2YXIgbm9kZVZhbHVlID0gRWxlbWVudC5yZWFkQXR0cmlidXRlKGVs ZW1lbnQsIG1hdGNoZXNbMV0pOwogICAgICByZXR1cm4gbm9kZVZhbHVlICYmIFNl bGVjdG9yLm9wZXJhdG9yc1ttYXRjaGVzWzJdXShub2RlVmFsdWUsIG1hdGNoZXNb NV0gfHwgbWF0Y2hlc1s2XSk7CiAgICB9CiAgfSwKCiAgaGFuZGxlcnM6IHsKICAg IC8vIFVUSUxJVFkgRlVOQ1RJT05TCiAgICAvLyBqb2lucyB0d28gY29sbGVjdGlv bnMKICAgIGNvbmNhdDogZnVuY3Rpb24oYSwgYikgewogICAgICBmb3IgKHZhciBp ID0gMCwgbm9kZTsgbm9kZSA9IGJbaV07IGkrKykKICAgICAgICBhLnB1c2gobm9k ZSk7CiAgICAgIHJldHVybiBhOwogICAgfSwKCiAgICAvLyBtYXJrcyBhbiBhcnJh eSBvZiBub2RlcyBmb3IgY291bnRpbmcKICAgIG1hcms6IGZ1bmN0aW9uKG5vZGVz KSB7CiAgICAgIHZhciBfdHJ1ZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwog ICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKysp CiAgICAgICAgbm9kZS5fY291bnRlZEJ5UHJvdG90eXBlID0gX3RydWU7CiAgICAg IHJldHVybiBub2RlczsKICAgIH0sCgogICAgdW5tYXJrOiBmdW5jdGlvbihub2Rl cykgewogICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ld OyBpKyspCiAgICAgICAgbm9kZS5fY291bnRlZEJ5UHJvdG90eXBlID0gdW5kZWZp bmVkOwogICAgICByZXR1cm4gbm9kZXM7CiAgICB9LAoKICAgIC8vIG1hcmsgZWFj aCBjaGlsZCBub2RlIHdpdGggaXRzIHBvc2l0aW9uIChmb3IgbnRoIGNhbGxzKQog ICAgLy8gIm9mVHlwZSIgZmxhZyBpbmRpY2F0ZXMgd2hldGhlciB3ZSdyZSBpbmRl eGluZyBmb3IgbnRoLW9mLXR5cGUKICAgIC8vIHJhdGhlciB0aGFuIG50aC1jaGls ZAogICAgaW5kZXg6IGZ1bmN0aW9uKHBhcmVudE5vZGUsIHJldmVyc2UsIG9mVHlw ZSkgewogICAgICBwYXJlbnROb2RlLl9jb3VudGVkQnlQcm90b3R5cGUgPSBQcm90 b3R5cGUuZW1wdHlGdW5jdGlvbjsKICAgICAgaWYgKHJldmVyc2UpIHsKICAgICAg ICBmb3IgKHZhciBub2RlcyA9IHBhcmVudE5vZGUuY2hpbGROb2RlcywgaSA9IG5v ZGVzLmxlbmd0aCAtIDEsIGogPSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAg dmFyIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBl ID09IDEgJiYgKCFvZlR5cGUgfHwgbm9kZS5fY291bnRlZEJ5UHJvdG90eXBlKSkg bm9kZS5ub2RlSW5kZXggPSBqKys7CiAgICAgICAgfQogICAgICB9IGVsc2Ugewog ICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gMSwgbm9kZXMgPSBwYXJlbnROb2Rl LmNoaWxkTm9kZXM7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQogICAgICAgICAgaWYg KG5vZGUubm9kZVR5cGUgPT0gMSAmJiAoIW9mVHlwZSB8fCBub2RlLl9jb3VudGVk QnlQcm90b3R5cGUpKSBub2RlLm5vZGVJbmRleCA9IGorKzsKICAgICAgfQogICAg fSwKCiAgICAvLyBmaWx0ZXJzIG91dCBkdXBsaWNhdGVzIGFuZCBleHRlbmRzIGFs bCBub2RlcwogICAgdW5pcXVlOiBmdW5jdGlvbihub2RlcykgewogICAgICBpZiAo bm9kZXMubGVuZ3RoID09IDApIHJldHVybiBub2RlczsKICAgICAgdmFyIHJlc3Vs dHMgPSBbXSwgbjsKICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2Rlcy5sZW5n dGg7IGkgPCBsOyBpKyspCiAgICAgICAgaWYgKCEobiA9IG5vZGVzW2ldKS5fY291 bnRlZEJ5UHJvdG90eXBlKSB7CiAgICAgICAgICBuLl9jb3VudGVkQnlQcm90b3R5 cGUgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKICAgICAgICAgIHJlc3VsdHMu cHVzaChFbGVtZW50LmV4dGVuZChuKSk7CiAgICAgICAgfQogICAgICByZXR1cm4g U2VsZWN0b3IuaGFuZGxlcnMudW5tYXJrKHJlc3VsdHMpOwogICAgfSwKCiAgICAv LyBDT01CSU5BVE9SIEZVTkNUSU9OUwogICAgZGVzY2VuZGFudDogZnVuY3Rpb24o bm9kZXMpIHsKICAgICAgdmFyIGggPSBTZWxlY3Rvci5oYW5kbGVyczsKICAgICAg Zm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVz W2ldOyBpKyspCiAgICAgICAgaC5jb25jYXQocmVzdWx0cywgbm9kZS5nZXRFbGVt ZW50c0J5VGFnTmFtZSgnKicpKTsKICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9 LAoKICAgIGNoaWxkOiBmdW5jdGlvbihub2RlcykgewogICAgICB2YXIgaCA9IFNl bGVjdG9yLmhhbmRsZXJzOwogICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9 IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykgewogICAgICAgIGZvciAo dmFyIGogPSAwLCBjaGlsZDsgY2hpbGQgPSBub2RlLmNoaWxkTm9kZXNbal07IGor KykKICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PSAxICYmIGNoaWxkLnRh Z05hbWUgIT0gJyEnKSByZXN1bHRzLnB1c2goY2hpbGQpOwogICAgICB9CiAgICAg IHJldHVybiByZXN1bHRzOwogICAgfSwKCiAgICBhZGphY2VudDogZnVuY3Rpb24o bm9kZXMpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9k ZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKICAgICAgICB2YXIgbmV4dCA9IHRo aXMubmV4dEVsZW1lbnRTaWJsaW5nKG5vZGUpOwogICAgICAgIGlmIChuZXh0KSBy ZXN1bHRzLnB1c2gobmV4dCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdHM7 CiAgICB9LAoKICAgIGxhdGVyU2libGluZzogZnVuY3Rpb24obm9kZXMpIHsKICAg ICAgdmFyIGggPSBTZWxlY3Rvci5oYW5kbGVyczsKICAgICAgZm9yICh2YXIgaSA9 IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAg ICAgICAgaC5jb25jYXQocmVzdWx0cywgRWxlbWVudC5uZXh0U2libGluZ3Mobm9k ZSkpOwogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0sCgogICAgbmV4dEVsZW1l bnRTaWJsaW5nOiBmdW5jdGlvbihub2RlKSB7CiAgICAgIHdoaWxlIChub2RlID0g bm9kZS5uZXh0U2libGluZykKCSAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEp IHJldHVybiBub2RlOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0sCgogICAgcHJl dmlvdXNFbGVtZW50U2libGluZzogZnVuY3Rpb24obm9kZSkgewogICAgICB3aGls ZSAobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKQogICAgICAgIGlmIChub2Rl Lm5vZGVUeXBlID09IDEpIHJldHVybiBub2RlOwogICAgICByZXR1cm4gbnVsbDsK ICAgIH0sCgogICAgLy8gVE9LRU4gRlVOQ1RJT05TCiAgICB0YWdOYW1lOiBmdW5j dGlvbihub2Rlcywgcm9vdCwgdGFnTmFtZSwgY29tYmluYXRvcikgewogICAgICB2 YXIgdVRhZ05hbWUgPSB0YWdOYW1lLnRvVXBwZXJDYXNlKCk7CiAgICAgIHZhciBy ZXN1bHRzID0gW10sIGggPSBTZWxlY3Rvci5oYW5kbGVyczsKICAgICAgaWYgKG5v ZGVzKSB7CiAgICAgICAgaWYgKGNvbWJpbmF0b3IpIHsKICAgICAgICAgIC8vIGZh c3RsYW5lIGZvciBvcmRpbmFyeSBkZXNjZW5kYW50IGNvbWJpbmF0b3JzCiAgICAg ICAgICBpZiAoY29tYmluYXRvciA9PSAiZGVzY2VuZGFudCIpIHsKICAgICAgICAg ICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQog ICAgICAgICAgICAgIGguY29uY2F0KHJlc3VsdHMsIG5vZGUuZ2V0RWxlbWVudHNC eVRhZ05hbWUodGFnTmFtZSkpOwogICAgICAgICAgICByZXR1cm4gcmVzdWx0czsK ICAgICAgICAgIH0gZWxzZSBub2RlcyA9IHRoaXNbY29tYmluYXRvcl0obm9kZXMp OwogICAgICAgICAgaWYgKHRhZ05hbWUgPT0gIioiKSByZXR1cm4gbm9kZXM7CiAg ICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9k ZXNbaV07IGkrKykKICAgICAgICAgIGlmIChub2RlLnRhZ05hbWUudG9VcHBlckNh c2UoKSA9PT0gdVRhZ05hbWUpIHJlc3VsdHMucHVzaChub2RlKTsKICAgICAgICBy ZXR1cm4gcmVzdWx0czsKICAgICAgfSBlbHNlIHJldHVybiByb290LmdldEVsZW1l bnRzQnlUYWdOYW1lKHRhZ05hbWUpOwogICAgfSwKCiAgICBpZDogZnVuY3Rpb24o bm9kZXMsIHJvb3QsIGlkLCBjb21iaW5hdG9yKSB7CiAgICAgIHZhciB0YXJnZXRO b2RlID0gJChpZCksIGggPSBTZWxlY3Rvci5oYW5kbGVyczsKICAgICAgaWYgKCF0 YXJnZXROb2RlKSByZXR1cm4gW107CiAgICAgIGlmICghbm9kZXMgJiYgcm9vdCA9 PSBkb2N1bWVudCkgcmV0dXJuIFt0YXJnZXROb2RlXTsKICAgICAgaWYgKG5vZGVz KSB7CiAgICAgICAgaWYgKGNvbWJpbmF0b3IpIHsKICAgICAgICAgIGlmIChjb21i aW5hdG9yID09ICdjaGlsZCcpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAs IG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQogICAgICAgICAgICAgIGlmICh0 YXJnZXROb2RlLnBhcmVudE5vZGUgPT0gbm9kZSkgcmV0dXJuIFt0YXJnZXROb2Rl XTsKICAgICAgICAgIH0gZWxzZSBpZiAoY29tYmluYXRvciA9PSAnZGVzY2VuZGFu dCcpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBu b2Rlc1tpXTsgaSsrKQogICAgICAgICAgICAgIGlmIChFbGVtZW50LmRlc2NlbmRh bnRPZih0YXJnZXROb2RlLCBub2RlKSkgcmV0dXJuIFt0YXJnZXROb2RlXTsKICAg ICAgICAgIH0gZWxzZSBpZiAoY29tYmluYXRvciA9PSAnYWRqYWNlbnQnKSB7CiAg ICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07 IGkrKykKICAgICAgICAgICAgICBpZiAoU2VsZWN0b3IuaGFuZGxlcnMucHJldmlv dXNFbGVtZW50U2libGluZyh0YXJnZXROb2RlKSA9PSBub2RlKQogICAgICAgICAg ICAgICAgcmV0dXJuIFt0YXJnZXROb2RlXTsKICAgICAgICAgIH0gZWxzZSBub2Rl cyA9IGhbY29tYmluYXRvcl0obm9kZXMpOwogICAgICAgIH0KICAgICAgICBmb3Ig KHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAg ICBpZiAobm9kZSA9PSB0YXJnZXROb2RlKSByZXR1cm4gW3RhcmdldE5vZGVdOwog ICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICByZXR1cm4gKHRhcmdldE5v ZGUgJiYgRWxlbWVudC5kZXNjZW5kYW50T2YodGFyZ2V0Tm9kZSwgcm9vdCkpID8g W3RhcmdldE5vZGVdIDogW107CiAgICB9LAoKICAgIGNsYXNzTmFtZTogZnVuY3Rp b24obm9kZXMsIHJvb3QsIGNsYXNzTmFtZSwgY29tYmluYXRvcikgewogICAgICBp ZiAobm9kZXMgJiYgY29tYmluYXRvcikgbm9kZXMgPSB0aGlzW2NvbWJpbmF0b3Jd KG5vZGVzKTsKICAgICAgcmV0dXJuIFNlbGVjdG9yLmhhbmRsZXJzLmJ5Q2xhc3NO YW1lKG5vZGVzLCByb290LCBjbGFzc05hbWUpOwogICAgfSwKCiAgICBieUNsYXNz TmFtZTogZnVuY3Rpb24obm9kZXMsIHJvb3QsIGNsYXNzTmFtZSkgewogICAgICBp ZiAoIW5vZGVzKSBub2RlcyA9IFNlbGVjdG9yLmhhbmRsZXJzLmRlc2NlbmRhbnQo W3Jvb3RdKTsKICAgICAgdmFyIG5lZWRsZSA9ICcgJyArIGNsYXNzTmFtZSArICcg JzsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZSwgbm9k ZUNsYXNzTmFtZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKICAgICAgICBub2Rl Q2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7CiAgICAgICAgaWYgKG5vZGVDbGFz c05hbWUubGVuZ3RoID09IDApIGNvbnRpbnVlOwogICAgICAgIGlmIChub2RlQ2xh c3NOYW1lID09IGNsYXNzTmFtZSB8fCAoJyAnICsgbm9kZUNsYXNzTmFtZSArICcg JykuaW5jbHVkZShuZWVkbGUpKQogICAgICAgICAgcmVzdWx0cy5wdXNoKG5vZGUp OwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHRzOwogICAgfSwKCiAgICBhdHRy UHJlc2VuY2U6IGZ1bmN0aW9uKG5vZGVzLCByb290LCBhdHRyLCBjb21iaW5hdG9y KSB7CiAgICAgIGlmICghbm9kZXMpIG5vZGVzID0gcm9vdC5nZXRFbGVtZW50c0J5 VGFnTmFtZSgiKiIpOwogICAgICBpZiAobm9kZXMgJiYgY29tYmluYXRvcikgbm9k ZXMgPSB0aGlzW2NvbWJpbmF0b3JdKG5vZGVzKTsKICAgICAgdmFyIHJlc3VsdHMg PSBbXTsKICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tp XTsgaSsrKQogICAgICAgIGlmIChFbGVtZW50Lmhhc0F0dHJpYnV0ZShub2RlLCBh dHRyKSkgcmVzdWx0cy5wdXNoKG5vZGUpOwogICAgICByZXR1cm4gcmVzdWx0czsK ICAgIH0sCgogICAgYXR0cjogZnVuY3Rpb24obm9kZXMsIHJvb3QsIGF0dHIsIHZh bHVlLCBvcGVyYXRvciwgY29tYmluYXRvcikgewogICAgICBpZiAoIW5vZGVzKSBu b2RlcyA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKICAgICAgaWYg KG5vZGVzICYmIGNvbWJpbmF0b3IpIG5vZGVzID0gdGhpc1tjb21iaW5hdG9yXShu b2Rlcyk7CiAgICAgIHZhciBoYW5kbGVyID0gU2VsZWN0b3Iub3BlcmF0b3JzW29w ZXJhdG9yXSwgcmVzdWx0cyA9IFtdOwogICAgICBmb3IgKHZhciBpID0gMCwgbm9k ZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKICAgICAgICB2YXIgbm9kZVZhbHVl ID0gRWxlbWVudC5yZWFkQXR0cmlidXRlKG5vZGUsIGF0dHIpOwogICAgICAgIGlm IChub2RlVmFsdWUgPT09IG51bGwpIGNvbnRpbnVlOwogICAgICAgIGlmIChoYW5k bGVyKG5vZGVWYWx1ZSwgdmFsdWUpKSByZXN1bHRzLnB1c2gobm9kZSk7CiAgICAg IH0KICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9LAoKICAgIHBzZXVkbzogZnVu Y3Rpb24obm9kZXMsIG5hbWUsIHZhbHVlLCByb290LCBjb21iaW5hdG9yKSB7CiAg ICAgIGlmIChub2RlcyAmJiBjb21iaW5hdG9yKSBub2RlcyA9IHRoaXNbY29tYmlu YXRvcl0obm9kZXMpOwogICAgICBpZiAoIW5vZGVzKSBub2RlcyA9IHJvb3QuZ2V0 RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKICAgICAgcmV0dXJuIFNlbGVjdG9yLnBz ZXVkb3NbbmFtZV0obm9kZXMsIHZhbHVlLCByb290KTsKICAgIH0KICB9LAoKICBw c2V1ZG9zOiB7CiAgICAnZmlyc3QtY2hpbGQnOiBmdW5jdGlvbihub2RlcywgdmFs dWUsIHJvb3QpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwg bm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKICAgICAgICBpZiAoU2VsZWN0 b3IuaGFuZGxlcnMucHJldmlvdXNFbGVtZW50U2libGluZyhub2RlKSkgY29udGlu dWU7CiAgICAgICAgICByZXN1bHRzLnB1c2gobm9kZSk7CiAgICAgIH0KICAgICAg cmV0dXJuIHJlc3VsdHM7CiAgICB9LAogICAgJ2xhc3QtY2hpbGQnOiBmdW5jdGlv bihub2RlcywgdmFsdWUsIHJvb3QpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJl c3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKICAgICAg ICBpZiAoU2VsZWN0b3IuaGFuZGxlcnMubmV4dEVsZW1lbnRTaWJsaW5nKG5vZGUp KSBjb250aW51ZTsKICAgICAgICAgIHJlc3VsdHMucHVzaChub2RlKTsKICAgICAg fQogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0sCiAgICAnb25seS1jaGlsZCc6 IGZ1bmN0aW9uKG5vZGVzLCB2YWx1ZSwgcm9vdCkgewogICAgICB2YXIgaCA9IFNl bGVjdG9yLmhhbmRsZXJzOwogICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9 IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKICAgICAgICBpZiAoIWgu cHJldmlvdXNFbGVtZW50U2libGluZyhub2RlKSAmJiAhaC5uZXh0RWxlbWVudFNp Ymxpbmcobm9kZSkpCiAgICAgICAgICByZXN1bHRzLnB1c2gobm9kZSk7CiAgICAg IHJldHVybiByZXN1bHRzOwogICAgfSwKICAgICdudGgtY2hpbGQnOiAgICAgICAg ZnVuY3Rpb24obm9kZXMsIGZvcm11bGEsIHJvb3QpIHsKICAgICAgcmV0dXJuIFNl bGVjdG9yLnBzZXVkb3MubnRoKG5vZGVzLCBmb3JtdWxhLCByb290KTsKICAgIH0s CiAgICAnbnRoLWxhc3QtY2hpbGQnOiAgIGZ1bmN0aW9uKG5vZGVzLCBmb3JtdWxh LCByb290KSB7CiAgICAgIHJldHVybiBTZWxlY3Rvci5wc2V1ZG9zLm50aChub2Rl cywgZm9ybXVsYSwgcm9vdCwgdHJ1ZSk7CiAgICB9LAogICAgJ250aC1vZi10eXBl JzogICAgICBmdW5jdGlvbihub2RlcywgZm9ybXVsYSwgcm9vdCkgewogICAgICBy ZXR1cm4gU2VsZWN0b3IucHNldWRvcy5udGgobm9kZXMsIGZvcm11bGEsIHJvb3Qs IGZhbHNlLCB0cnVlKTsKICAgIH0sCiAgICAnbnRoLWxhc3Qtb2YtdHlwZSc6IGZ1 bmN0aW9uKG5vZGVzLCBmb3JtdWxhLCByb290KSB7CiAgICAgIHJldHVybiBTZWxl Y3Rvci5wc2V1ZG9zLm50aChub2RlcywgZm9ybXVsYSwgcm9vdCwgdHJ1ZSwgdHJ1 ZSk7CiAgICB9LAogICAgJ2ZpcnN0LW9mLXR5cGUnOiAgICBmdW5jdGlvbihub2Rl cywgZm9ybXVsYSwgcm9vdCkgewogICAgICByZXR1cm4gU2VsZWN0b3IucHNldWRv cy5udGgobm9kZXMsICIxIiwgcm9vdCwgZmFsc2UsIHRydWUpOwogICAgfSwKICAg ICdsYXN0LW9mLXR5cGUnOiAgICAgZnVuY3Rpb24obm9kZXMsIGZvcm11bGEsIHJv b3QpIHsKICAgICAgcmV0dXJuIFNlbGVjdG9yLnBzZXVkb3MubnRoKG5vZGVzLCAi MSIsIHJvb3QsIHRydWUsIHRydWUpOwogICAgfSwKICAgICdvbmx5LW9mLXR5cGUn OiAgICAgZnVuY3Rpb24obm9kZXMsIGZvcm11bGEsIHJvb3QpIHsKICAgICAgdmFy IHAgPSBTZWxlY3Rvci5wc2V1ZG9zOwogICAgICByZXR1cm4gcFsnbGFzdC1vZi10 eXBlJ10ocFsnZmlyc3Qtb2YtdHlwZSddKG5vZGVzLCBmb3JtdWxhLCByb290KSwg Zm9ybXVsYSwgcm9vdCk7CiAgICB9LAoKICAgIC8vIGhhbmRsZXMgdGhlIGFuK2Ig bG9naWMKICAgIGdldEluZGljZXM6IGZ1bmN0aW9uKGEsIGIsIHRvdGFsKSB7CiAg ICAgIGlmIChhID09IDApIHJldHVybiBiID4gMCA/IFtiXSA6IFtdOwogICAgICBy ZXR1cm4gJFIoMSwgdG90YWwpLmluamVjdChbXSwgZnVuY3Rpb24obWVtbywgaSkg ewogICAgICAgIGlmICgwID09IChpIC0gYikgJSBhICYmIChpIC0gYikgLyBhID49 IDApIG1lbW8ucHVzaChpKTsKICAgICAgICByZXR1cm4gbWVtbzsKICAgICAgfSk7 CiAgICB9LAoKICAgIC8vIGhhbmRsZXMgbnRoKC1sYXN0KS1jaGlsZCwgbnRoKC1s YXN0KS1vZi10eXBlLCBhbmQgKGZpcnN0fGxhc3QpLW9mLXR5cGUKICAgIG50aDog ZnVuY3Rpb24obm9kZXMsIGZvcm11bGEsIHJvb3QsIHJldmVyc2UsIG9mVHlwZSkg ewogICAgICBpZiAobm9kZXMubGVuZ3RoID09IDApIHJldHVybiBbXTsKICAgICAg aWYgKGZvcm11bGEgPT0gJ2V2ZW4nKSBmb3JtdWxhID0gJzJuKzAnOwogICAgICBp ZiAoZm9ybXVsYSA9PSAnb2RkJykgIGZvcm11bGEgPSAnMm4rMSc7CiAgICAgIHZh ciBoID0gU2VsZWN0b3IuaGFuZGxlcnMsIHJlc3VsdHMgPSBbXSwgaW5kZXhlZCA9 IFtdLCBtOwogICAgICBoLm1hcmsobm9kZXMpOwogICAgICBmb3IgKHZhciBpID0g MCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKICAgICAgICBpZiAoIW5v ZGUucGFyZW50Tm9kZS5fY291bnRlZEJ5UHJvdG90eXBlKSB7CiAgICAgICAgICBo LmluZGV4KG5vZGUucGFyZW50Tm9kZSwgcmV2ZXJzZSwgb2ZUeXBlKTsKICAgICAg ICAgIGluZGV4ZWQucHVzaChub2RlLnBhcmVudE5vZGUpOwogICAgICAgIH0KICAg ICAgfQogICAgICBpZiAoZm9ybXVsYS5tYXRjaCgvXlxkKyQvKSkgeyAvLyBqdXN0 IGEgbnVtYmVyCiAgICAgICAgZm9ybXVsYSA9IE51bWJlcihmb3JtdWxhKTsKICAg ICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKysp CiAgICAgICAgICBpZiAobm9kZS5ub2RlSW5kZXggPT0gZm9ybXVsYSkgcmVzdWx0 cy5wdXNoKG5vZGUpOwogICAgICB9IGVsc2UgaWYgKG0gPSBmb3JtdWxhLm1hdGNo KC9eKC0/XGQqKT9uKChbKy1dKShcZCspKT8vKSkgeyAvLyBhbitiCiAgICAgICAg aWYgKG1bMV0gPT0gIi0iKSBtWzFdID0gLTE7CiAgICAgICAgdmFyIGEgPSBtWzFd ID8gTnVtYmVyKG1bMV0pIDogMTsKICAgICAgICB2YXIgYiA9IG1bMl0gPyBOdW1i ZXIobVsyXSkgOiAwOwogICAgICAgIHZhciBpbmRpY2VzID0gU2VsZWN0b3IucHNl dWRvcy5nZXRJbmRpY2VzKGEsIGIsIG5vZGVzLmxlbmd0aCk7CiAgICAgICAgZm9y ICh2YXIgaSA9IDAsIG5vZGUsIGwgPSBpbmRpY2VzLmxlbmd0aDsgbm9kZSA9IG5v ZGVzW2ldOyBpKyspIHsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbDsg aisrKQogICAgICAgICAgICBpZiAobm9kZS5ub2RlSW5kZXggPT0gaW5kaWNlc1tq XSkgcmVzdWx0cy5wdXNoKG5vZGUpOwogICAgICAgIH0KICAgICAgfQogICAgICBo LnVubWFyayhub2Rlcyk7CiAgICAgIGgudW5tYXJrKGluZGV4ZWQpOwogICAgICBy ZXR1cm4gcmVzdWx0czsKICAgIH0sCgogICAgJ2VtcHR5JzogZnVuY3Rpb24obm9k ZXMsIHZhbHVlLCByb290KSB7CiAgICAgIGZvciAodmFyIGkgPSAwLCByZXN1bHRz ID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKSB7CiAgICAgICAgLy8g SUUgdHJlYXRzIGNvbW1lbnRzIGFzIGVsZW1lbnQgbm9kZXMKICAgICAgICBpZiAo bm9kZS50YWdOYW1lID09ICchJyB8fCAobm9kZS5maXJzdENoaWxkICYmICFub2Rl LmlubmVySFRNTC5tYXRjaCgvXlxzKiQvKSkpIGNvbnRpbnVlOwogICAgICAgIHJl c3VsdHMucHVzaChub2RlKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0czsK ICAgIH0sCgogICAgJ25vdCc6IGZ1bmN0aW9uKG5vZGVzLCBzZWxlY3Rvciwgcm9v dCkgewogICAgICB2YXIgaCA9IFNlbGVjdG9yLmhhbmRsZXJzLCBzZWxlY3RvclR5 cGUsIG07CiAgICAgIHZhciBleGNsdXNpb25zID0gbmV3IFNlbGVjdG9yKHNlbGVj dG9yKS5maW5kRWxlbWVudHMocm9vdCk7CiAgICAgIGgubWFyayhleGNsdXNpb25z KTsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9k ZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgaWYgKCFub2RlLl9jb3VudGVkQnlQ cm90b3R5cGUpIHJlc3VsdHMucHVzaChub2RlKTsKICAgICAgaC51bm1hcmsoZXhj bHVzaW9ucyk7CiAgICAgIHJldHVybiByZXN1bHRzOwogICAgfSwKCiAgICAnZW5h YmxlZCc6IGZ1bmN0aW9uKG5vZGVzLCB2YWx1ZSwgcm9vdCkgewogICAgICBmb3Ig KHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07 IGkrKykKICAgICAgICBpZiAoIW5vZGUuZGlzYWJsZWQpIHJlc3VsdHMucHVzaChu b2RlKTsKICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9LAoKICAgICdkaXNhYmxl ZCc6IGZ1bmN0aW9uKG5vZGVzLCB2YWx1ZSwgcm9vdCkgewogICAgICBmb3IgKHZh ciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkr KykKICAgICAgICBpZiAobm9kZS5kaXNhYmxlZCkgcmVzdWx0cy5wdXNoKG5vZGUp OwogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0sCgogICAgJ2NoZWNrZWQnOiBm dW5jdGlvbihub2RlcywgdmFsdWUsIHJvb3QpIHsKICAgICAgZm9yICh2YXIgaSA9 IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAg ICAgICAgaWYgKG5vZGUuY2hlY2tlZCkgcmVzdWx0cy5wdXNoKG5vZGUpOwogICAg ICByZXR1cm4gcmVzdWx0czsKICAgIH0KICB9LAoKICBvcGVyYXRvcnM6IHsKICAg ICc9JzogIGZ1bmN0aW9uKG52LCB2KSB7IHJldHVybiBudiA9PSB2OyB9LAogICAg JyE9JzogZnVuY3Rpb24obnYsIHYpIHsgcmV0dXJuIG52ICE9IHY7IH0sCiAgICAn Xj0nOiBmdW5jdGlvbihudiwgdikgeyByZXR1cm4gbnYuc3RhcnRzV2l0aCh2KTsg fSwKICAgICckPSc6IGZ1bmN0aW9uKG52LCB2KSB7IHJldHVybiBudi5lbmRzV2l0 aCh2KTsgfSwKICAgICcqPSc6IGZ1bmN0aW9uKG52LCB2KSB7IHJldHVybiBudi5p bmNsdWRlKHYpOyB9LAogICAgJ349JzogZnVuY3Rpb24obnYsIHYpIHsgcmV0dXJu ICgnICcgKyBudiArICcgJykuaW5jbHVkZSgnICcgKyB2ICsgJyAnKTsgfSwKICAg ICd8PSc6IGZ1bmN0aW9uKG52LCB2KSB7IHJldHVybiAoJy0nICsgbnYudG9VcHBl ckNhc2UoKSArICctJykuaW5jbHVkZSgnLScgKyB2LnRvVXBwZXJDYXNlKCkgKyAn LScpOyB9CiAgfSwKCiAgc3BsaXQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pIHsKICAg IHZhciBleHByZXNzaW9ucyA9IFtdOwogICAgZXhwcmVzc2lvbi5zY2FuKC8oKFtc dyM6Ln4+KygpXHMtXSt8XCp8XFsuKj9cXSkrKVxzKigsfCQpLywgZnVuY3Rpb24o bSkgewogICAgICBleHByZXNzaW9ucy5wdXNoKG1bMV0uc3RyaXAoKSk7CiAgICB9 KTsKICAgIHJldHVybiBleHByZXNzaW9uczsKICB9LAoKICBtYXRjaEVsZW1lbnRz OiBmdW5jdGlvbihlbGVtZW50cywgZXhwcmVzc2lvbikgewogICAgdmFyIG1hdGNo ZXMgPSAkJChleHByZXNzaW9uKSwgaCA9IFNlbGVjdG9yLmhhbmRsZXJzOwogICAg aC5tYXJrKG1hdGNoZXMpOwogICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBb XSwgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnRzW2ldOyBpKyspCiAgICAgIGlm IChlbGVtZW50Ll9jb3VudGVkQnlQcm90b3R5cGUpIHJlc3VsdHMucHVzaChlbGVt ZW50KTsKICAgIGgudW5tYXJrKG1hdGNoZXMpOwogICAgcmV0dXJuIHJlc3VsdHM7 CiAgfSwKCiAgZmluZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnRzLCBleHByZXNz aW9uLCBpbmRleCkgewogICAgaWYgKE9iamVjdC5pc051bWJlcihleHByZXNzaW9u KSkgewogICAgICBpbmRleCA9IGV4cHJlc3Npb247IGV4cHJlc3Npb24gPSBmYWxz ZTsKICAgIH0KICAgIHJldHVybiBTZWxlY3Rvci5tYXRjaEVsZW1lbnRzKGVsZW1l bnRzLCBleHByZXNzaW9uIHx8ICcqJylbaW5kZXggfHwgMF07CiAgfSwKCiAgZmlu ZENoaWxkRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb25zKSB7 CiAgICBleHByZXNzaW9ucyA9IFNlbGVjdG9yLnNwbGl0KGV4cHJlc3Npb25zLmpv aW4oJywnKSk7CiAgICB2YXIgcmVzdWx0cyA9IFtdLCBoID0gU2VsZWN0b3IuaGFu ZGxlcnM7CiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGV4cHJlc3Npb25zLmxlbmd0 aCwgc2VsZWN0b3I7IGkgPCBsOyBpKyspIHsKICAgICAgc2VsZWN0b3IgPSBuZXcg U2VsZWN0b3IoZXhwcmVzc2lvbnNbaV0uc3RyaXAoKSk7CiAgICAgIGguY29uY2F0 KHJlc3VsdHMsIHNlbGVjdG9yLmZpbmRFbGVtZW50cyhlbGVtZW50KSk7CiAgICB9 CiAgICByZXR1cm4gKGwgPiAxKSA/IGgudW5pcXVlKHJlc3VsdHMpIDogcmVzdWx0 czsKICB9Cn0pOwoKaWYgKFByb3RvdHlwZS5Ccm93c2VyLklFKSB7CiAgT2JqZWN0 LmV4dGVuZChTZWxlY3Rvci5oYW5kbGVycywgewogICAgLy8gSUUgcmV0dXJucyBj b21tZW50IG5vZGVzIG9uIGdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikuCiAgICAv LyBGaWx0ZXIgdGhlbSBvdXQuCiAgICBjb25jYXQ6IGZ1bmN0aW9uKGEsIGIpIHsK ICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBiW2ldOyBpKyspCiAg ICAgICAgaWYgKG5vZGUudGFnTmFtZSAhPT0gIiEiKSBhLnB1c2gobm9kZSk7CiAg ICAgIHJldHVybiBhOwogICAgfSwKCiAgICAvLyBJRSBpbXByb3Blcmx5IHNlcmlh bGl6ZXMgX2NvdW50ZWRCeVByb3RvdHlwZSBpbiAoaW5uZXJ8b3V0ZXIpSFRNTC4K ICAgIHVubWFyazogZnVuY3Rpb24obm9kZXMpIHsKICAgICAgZm9yICh2YXIgaSA9 IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQogICAgICAgIG5vZGUucmVt b3ZlQXR0cmlidXRlKCdfY291bnRlZEJ5UHJvdG90eXBlJyk7CiAgICAgIHJldHVy biBub2RlczsKICAgIH0KICB9KTsKfQoKZnVuY3Rpb24gJCQoKSB7CiAgcmV0dXJu IFNlbGVjdG9yLmZpbmRDaGlsZEVsZW1lbnRzKGRvY3VtZW50LCAkQShhcmd1bWVu dHMpKTsKfQp2YXIgRm9ybSA9IHsKICByZXNldDogZnVuY3Rpb24oZm9ybSkgewog ICAgJChmb3JtKS5yZXNldCgpOwogICAgcmV0dXJuIGZvcm07CiAgfSwKCiAgc2Vy aWFsaXplRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnRzLCBvcHRpb25zKSB7CiAg ICBpZiAodHlwZW9mIG9wdGlvbnMgIT0gJ29iamVjdCcpIG9wdGlvbnMgPSB7IGhh c2g6ICEhb3B0aW9ucyB9OwogICAgZWxzZSBpZiAoT2JqZWN0LmlzVW5kZWZpbmVk KG9wdGlvbnMuaGFzaCkpIG9wdGlvbnMuaGFzaCA9IHRydWU7CiAgICB2YXIga2V5 LCB2YWx1ZSwgc3VibWl0dGVkID0gZmFsc2UsIHN1Ym1pdCA9IG9wdGlvbnMuc3Vi bWl0OwoKICAgIHZhciBkYXRhID0gZWxlbWVudHMuaW5qZWN0KHsgfSwgZnVuY3Rp b24ocmVzdWx0LCBlbGVtZW50KSB7CiAgICAgIGlmICghZWxlbWVudC5kaXNhYmxl ZCAmJiBlbGVtZW50Lm5hbWUpIHsKICAgICAgICBrZXkgPSBlbGVtZW50Lm5hbWU7 IHZhbHVlID0gJChlbGVtZW50KS5nZXRWYWx1ZSgpOwogICAgICAgIGlmICh2YWx1 ZSAhPSBudWxsICYmIChlbGVtZW50LnR5cGUgIT0gJ3N1Ym1pdCcgfHwgKCFzdWJt aXR0ZWQgJiYKICAgICAgICAgICAgc3VibWl0ICE9PSBmYWxzZSAmJiAoIXN1Ym1p dCB8fCBrZXkgPT0gc3VibWl0KSAmJiAoc3VibWl0dGVkID0gdHJ1ZSkpKSkgewog ICAgICAgICAgaWYgKGtleSBpbiByZXN1bHQpIHsKICAgICAgICAgICAgLy8gYSBr ZXkgaXMgYWxyZWFkeSBwcmVzZW50OyBjb25zdHJ1Y3QgYW4gYXJyYXkgb2YgdmFs dWVzCiAgICAgICAgICAgIGlmICghT2JqZWN0LmlzQXJyYXkocmVzdWx0W2tleV0p KSByZXN1bHRba2V5XSA9IFtyZXN1bHRba2V5XV07CiAgICAgICAgICAgIHJlc3Vs dFtrZXldLnB1c2godmFsdWUpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBy ZXN1bHRba2V5XSA9IHZhbHVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1 cm4gcmVzdWx0OwogICAgfSk7CgogICAgcmV0dXJuIG9wdGlvbnMuaGFzaCA/IGRh dGEgOiBPYmplY3QudG9RdWVyeVN0cmluZyhkYXRhKTsKICB9Cn07CgpGb3JtLk1l dGhvZHMgPSB7CiAgc2VyaWFsaXplOiBmdW5jdGlvbihmb3JtLCBvcHRpb25zKSB7 CiAgICByZXR1cm4gRm9ybS5zZXJpYWxpemVFbGVtZW50cyhGb3JtLmdldEVsZW1l bnRzKGZvcm0pLCBvcHRpb25zKTsKICB9LAoKICBnZXRFbGVtZW50czogZnVuY3Rp b24oZm9ybSkgewogICAgcmV0dXJuICRBKCQoZm9ybSkuZ2V0RWxlbWVudHNCeVRh Z05hbWUoJyonKSkuaW5qZWN0KFtdLAogICAgICBmdW5jdGlvbihlbGVtZW50cywg Y2hpbGQpIHsKICAgICAgICBpZiAoRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzW2No aWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0pCiAgICAgICAgICBlbGVtZW50cy5w dXNoKEVsZW1lbnQuZXh0ZW5kKGNoaWxkKSk7CiAgICAgICAgcmV0dXJuIGVsZW1l bnRzOwogICAgICB9CiAgICApOwogIH0sCgogIGdldElucHV0czogZnVuY3Rpb24o Zm9ybSwgdHlwZU5hbWUsIG5hbWUpIHsKICAgIGZvcm0gPSAkKGZvcm0pOwogICAg dmFyIGlucHV0cyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7 CgogICAgaWYgKCF0eXBlTmFtZSAmJiAhbmFtZSkgcmV0dXJuICRBKGlucHV0cyku bWFwKEVsZW1lbnQuZXh0ZW5kKTsKCiAgICBmb3IgKHZhciBpID0gMCwgbWF0Y2hp bmdJbnB1dHMgPSBbXSwgbGVuZ3RoID0gaW5wdXRzLmxlbmd0aDsgaSA8IGxlbmd0 aDsgaSsrKSB7CiAgICAgIHZhciBpbnB1dCA9IGlucHV0c1tpXTsKICAgICAgaWYg KCh0eXBlTmFtZSAmJiBpbnB1dC50eXBlICE9IHR5cGVOYW1lKSB8fCAobmFtZSAm JiBpbnB1dC5uYW1lICE9IG5hbWUpKQogICAgICAgIGNvbnRpbnVlOwogICAgICBt YXRjaGluZ0lucHV0cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGlucHV0KSk7CiAgICB9 CgogICAgcmV0dXJuIG1hdGNoaW5nSW5wdXRzOwogIH0sCgogIGRpc2FibGU6IGZ1 bmN0aW9uKGZvcm0pIHsKICAgIGZvcm0gPSAkKGZvcm0pOwogICAgRm9ybS5nZXRF bGVtZW50cyhmb3JtKS5pbnZva2UoJ2Rpc2FibGUnKTsKICAgIHJldHVybiBmb3Jt OwogIH0sCgogIGVuYWJsZTogZnVuY3Rpb24oZm9ybSkgewogICAgZm9ybSA9ICQo Zm9ybSk7CiAgICBGb3JtLmdldEVsZW1lbnRzKGZvcm0pLmludm9rZSgnZW5hYmxl Jyk7CiAgICByZXR1cm4gZm9ybTsKICB9LAoKICBmaW5kRmlyc3RFbGVtZW50OiBm dW5jdGlvbihmb3JtKSB7CiAgICB2YXIgZWxlbWVudHMgPSAkKGZvcm0pLmdldEVs ZW1lbnRzKCkuZmluZEFsbChmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgIHJldHVy biAnaGlkZGVuJyAhPSBlbGVtZW50LnR5cGUgJiYgIWVsZW1lbnQuZGlzYWJsZWQ7 CiAgICB9KTsKICAgIHZhciBmaXJzdEJ5SW5kZXggPSBlbGVtZW50cy5maW5kQWxs KGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0 cmlidXRlKCd0YWJJbmRleCcpICYmIGVsZW1lbnQudGFiSW5kZXggPj0gMDsKICAg IH0pLnNvcnRCeShmdW5jdGlvbihlbGVtZW50KSB7IHJldHVybiBlbGVtZW50LnRh YkluZGV4IH0pLmZpcnN0KCk7CgogICAgcmV0dXJuIGZpcnN0QnlJbmRleCA/IGZp cnN0QnlJbmRleCA6IGVsZW1lbnRzLmZpbmQoZnVuY3Rpb24oZWxlbWVudCkgewog ICAgICByZXR1cm4gWydpbnB1dCcsICdzZWxlY3QnLCAndGV4dGFyZWEnXS5pbmNs dWRlKGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKICAgIH0pOwogIH0s CgogIGZvY3VzRmlyc3RFbGVtZW50OiBmdW5jdGlvbihmb3JtKSB7CiAgICBmb3Jt ID0gJChmb3JtKTsKICAgIGZvcm0uZmluZEZpcnN0RWxlbWVudCgpLmFjdGl2YXRl KCk7CiAgICByZXR1cm4gZm9ybTsKICB9LAoKICByZXF1ZXN0OiBmdW5jdGlvbihm b3JtLCBvcHRpb25zKSB7CiAgICBmb3JtID0gJChmb3JtKSwgb3B0aW9ucyA9IE9i amVjdC5jbG9uZShvcHRpb25zIHx8IHsgfSk7CgogICAgdmFyIHBhcmFtcyA9IG9w dGlvbnMucGFyYW1ldGVycywgYWN0aW9uID0gZm9ybS5yZWFkQXR0cmlidXRlKCdh Y3Rpb24nKSB8fCAnJzsKICAgIGlmIChhY3Rpb24uYmxhbmsoKSkgYWN0aW9uID0g d2luZG93LmxvY2F0aW9uLmhyZWY7CiAgICBvcHRpb25zLnBhcmFtZXRlcnMgPSBm b3JtLnNlcmlhbGl6ZSh0cnVlKTsKCiAgICBpZiAocGFyYW1zKSB7CiAgICAgIGlm IChPYmplY3QuaXNTdHJpbmcocGFyYW1zKSkgcGFyYW1zID0gcGFyYW1zLnRvUXVl cnlQYXJhbXMoKTsKICAgICAgT2JqZWN0LmV4dGVuZChvcHRpb25zLnBhcmFtZXRl cnMsIHBhcmFtcyk7CiAgICB9CgogICAgaWYgKGZvcm0uaGFzQXR0cmlidXRlKCdt ZXRob2QnKSAmJiAhb3B0aW9ucy5tZXRob2QpCiAgICAgIG9wdGlvbnMubWV0aG9k ID0gZm9ybS5tZXRob2Q7CgogICAgcmV0dXJuIG5ldyBBamF4LlJlcXVlc3QoYWN0 aW9uLCBvcHRpb25zKTsKICB9Cn07CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKi8KCkZvcm0uRWxlbWVudCA9IHsKICBmb2N1czogZnVuY3Rpb24oZWxlbWVu dCkgewogICAgJChlbGVtZW50KS5mb2N1cygpOwogICAgcmV0dXJuIGVsZW1lbnQ7 CiAgfSwKCiAgc2VsZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAkKGVsZW1l bnQpLnNlbGVjdCgpOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfQp9OwoKRm9ybS5F bGVtZW50Lk1ldGhvZHMgPSB7CiAgc2VyaWFsaXplOiBmdW5jdGlvbihlbGVtZW50 KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmICghZWxlbWVudC5k aXNhYmxlZCAmJiBlbGVtZW50Lm5hbWUpIHsKICAgICAgdmFyIHZhbHVlID0gZWxl bWVudC5nZXRWYWx1ZSgpOwogICAgICBpZiAodmFsdWUgIT0gdW5kZWZpbmVkKSB7 CiAgICAgICAgdmFyIHBhaXIgPSB7IH07CiAgICAgICAgcGFpcltlbGVtZW50Lm5h bWVdID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIE9iamVjdC50b1F1ZXJ5U3RyaW5n KHBhaXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gJyc7CiAgfSwKCiAgZ2V0 VmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1l bnQpOwogICAgdmFyIG1ldGhvZCA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2Fz ZSgpOwogICAgcmV0dXJuIEZvcm0uRWxlbWVudC5TZXJpYWxpemVyc1ttZXRob2Rd KGVsZW1lbnQpOwogIH0sCgogIHNldFZhbHVlOiBmdW5jdGlvbihlbGVtZW50LCB2 YWx1ZSkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB2YXIgbWV0aG9k ID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CiAgICBGb3JtLkVsZW1l bnQuU2VyaWFsaXplcnNbbWV0aG9kXShlbGVtZW50LCB2YWx1ZSk7CiAgICByZXR1 cm4gZWxlbWVudDsKICB9LAoKICBjbGVhcjogZnVuY3Rpb24oZWxlbWVudCkgewog ICAgJChlbGVtZW50KS52YWx1ZSA9ICcnOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAg fSwKCiAgcHJlc2VudDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgcmV0dXJuICQo ZWxlbWVudCkudmFsdWUgIT0gJyc7CiAgfSwKCiAgYWN0aXZhdGU6IGZ1bmN0aW9u KGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdHJ5IHsK ICAgICAgZWxlbWVudC5mb2N1cygpOwogICAgICBpZiAoZWxlbWVudC5zZWxlY3Qg JiYgKGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9ICdpbnB1dCcgfHwK ICAgICAgICAgICFbJ2J1dHRvbicsICdyZXNldCcsICdzdWJtaXQnXS5pbmNsdWRl KGVsZW1lbnQudHlwZSkpKQogICAgICAgIGVsZW1lbnQuc2VsZWN0KCk7CiAgICB9 IGNhdGNoIChlKSB7IH0KICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIGRpc2Fi bGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQp OwogICAgZWxlbWVudC5ibHVyKCk7CiAgICBlbGVtZW50LmRpc2FibGVkID0gdHJ1 ZTsKICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIGVuYWJsZTogZnVuY3Rpb24o ZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBlbGVtZW50 LmRpc2FibGVkID0gZmFsc2U7CiAgICByZXR1cm4gZWxlbWVudDsKICB9Cn07Cgov Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCnZhciBGaWVsZCA9IEZvcm0u RWxlbWVudDsKdmFyICRGID0gRm9ybS5FbGVtZW50Lk1ldGhvZHMuZ2V0VmFsdWU7 CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCkZvcm0uRWxlbWVudC5T ZXJpYWxpemVycyA9IHsKICBpbnB1dDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUp IHsKICAgIHN3aXRjaCAoZWxlbWVudC50eXBlLnRvTG93ZXJDYXNlKCkpIHsKICAg ICAgY2FzZSAnY2hlY2tib3gnOgogICAgICBjYXNlICdyYWRpbyc6CiAgICAgICAg cmV0dXJuIEZvcm0uRWxlbWVudC5TZXJpYWxpemVycy5pbnB1dFNlbGVjdG9yKGVs ZW1lbnQsIHZhbHVlKTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gRm9y bS5FbGVtZW50LlNlcmlhbGl6ZXJzLnRleHRhcmVhKGVsZW1lbnQsIHZhbHVlKTsK ICAgIH0KICB9LAoKICBpbnB1dFNlbGVjdG9yOiBmdW5jdGlvbihlbGVtZW50LCB2 YWx1ZSkgewogICAgaWYgKE9iamVjdC5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVy biBlbGVtZW50LmNoZWNrZWQgPyBlbGVtZW50LnZhbHVlIDogbnVsbDsKICAgIGVs c2UgZWxlbWVudC5jaGVja2VkID0gISF2YWx1ZTsKICB9LAoKICB0ZXh0YXJlYTog ZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKICAgIGlmIChPYmplY3QuaXNVbmRl ZmluZWQodmFsdWUpKSByZXR1cm4gZWxlbWVudC52YWx1ZTsKICAgIGVsc2UgZWxl bWVudC52YWx1ZSA9IHZhbHVlOwogIH0sCgogIHNlbGVjdDogZnVuY3Rpb24oZWxl bWVudCwgaW5kZXgpIHsKICAgIGlmIChPYmplY3QuaXNVbmRlZmluZWQoaW5kZXgp KQogICAgICByZXR1cm4gdGhpc1tlbGVtZW50LnR5cGUgPT0gJ3NlbGVjdC1vbmUn ID8KICAgICAgICAnc2VsZWN0T25lJyA6ICdzZWxlY3RNYW55J10oZWxlbWVudCk7 CiAgICBlbHNlIHsKICAgICAgdmFyIG9wdCwgdmFsdWUsIHNpbmdsZSA9ICFPYmpl Y3QuaXNBcnJheShpbmRleCk7CiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGgg PSBlbGVtZW50Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgb3B0 ID0gZWxlbWVudC5vcHRpb25zW2ldOwogICAgICAgIHZhbHVlID0gdGhpcy5vcHRp b25WYWx1ZShvcHQpOwogICAgICAgIGlmIChzaW5nbGUpIHsKICAgICAgICAgIGlm ICh2YWx1ZSA9PSBpbmRleCkgewogICAgICAgICAgICBvcHQuc2VsZWN0ZWQgPSB0 cnVlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQog ICAgICAgIGVsc2Ugb3B0LnNlbGVjdGVkID0gaW5kZXguaW5jbHVkZSh2YWx1ZSk7 CiAgICAgIH0KICAgIH0KICB9LAoKICBzZWxlY3RPbmU6IGZ1bmN0aW9uKGVsZW1l bnQpIHsKICAgIHZhciBpbmRleCA9IGVsZW1lbnQuc2VsZWN0ZWRJbmRleDsKICAg IHJldHVybiBpbmRleCA+PSAwID8gdGhpcy5vcHRpb25WYWx1ZShlbGVtZW50Lm9w dGlvbnNbaW5kZXhdKSA6IG51bGw7CiAgfSwKCiAgc2VsZWN0TWFueTogZnVuY3Rp b24oZWxlbWVudCkgewogICAgdmFyIHZhbHVlcywgbGVuZ3RoID0gZWxlbWVudC5s ZW5ndGg7CiAgICBpZiAoIWxlbmd0aCkgcmV0dXJuIG51bGw7CgogICAgZm9yICh2 YXIgaSA9IDAsIHZhbHVlcyA9IFtdOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAg dmFyIG9wdCA9IGVsZW1lbnQub3B0aW9uc1tpXTsKICAgICAgaWYgKG9wdC5zZWxl Y3RlZCkgdmFsdWVzLnB1c2godGhpcy5vcHRpb25WYWx1ZShvcHQpKTsKICAgIH0K ICAgIHJldHVybiB2YWx1ZXM7CiAgfSwKCiAgb3B0aW9uVmFsdWU6IGZ1bmN0aW9u KG9wdCkgewogICAgLy8gZXh0ZW5kIGVsZW1lbnQgYmVjYXVzZSBoYXNBdHRyaWJ1 dGUgbWF5IG5vdCBiZSBuYXRpdmUKICAgIHJldHVybiBFbGVtZW50LmV4dGVuZChv cHQpLmhhc0F0dHJpYnV0ZSgndmFsdWUnKSA/IG9wdC52YWx1ZSA6IG9wdC50ZXh0 OwogIH0KfTsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKQWJzdHJh Y3QuVGltZWRPYnNlcnZlciA9IENsYXNzLmNyZWF0ZShQZXJpb2RpY2FsRXhlY3V0 ZXIsIHsKICBpbml0aWFsaXplOiBmdW5jdGlvbigkc3VwZXIsIGVsZW1lbnQsIGZy ZXF1ZW5jeSwgY2FsbGJhY2spIHsKICAgICRzdXBlcihjYWxsYmFjaywgZnJlcXVl bmN5KTsKICAgIHRoaXMuZWxlbWVudCAgID0gJChlbGVtZW50KTsKICAgIHRoaXMu bGFzdFZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOwogIH0sCgogIGV4ZWN1dGU6IGZ1 bmN0aW9uKCkgewogICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOwogICAg aWYgKE9iamVjdC5pc1N0cmluZyh0aGlzLmxhc3RWYWx1ZSkgJiYgT2JqZWN0Lmlz U3RyaW5nKHZhbHVlKSA/CiAgICAgICAgdGhpcy5sYXN0VmFsdWUgIT0gdmFsdWUg OiBTdHJpbmcodGhpcy5sYXN0VmFsdWUpICE9IFN0cmluZyh2YWx1ZSkpIHsKICAg ICAgdGhpcy5jYWxsYmFjayh0aGlzLmVsZW1lbnQsIHZhbHVlKTsKICAgICAgdGhp cy5sYXN0VmFsdWUgPSB2YWx1ZTsKICAgIH0KICB9Cn0pOwoKRm9ybS5FbGVtZW50 Lk9ic2VydmVyID0gQ2xhc3MuY3JlYXRlKEFic3RyYWN0LlRpbWVkT2JzZXJ2ZXIs IHsKICBnZXRWYWx1ZTogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gRm9ybS5FbGVt ZW50LmdldFZhbHVlKHRoaXMuZWxlbWVudCk7CiAgfQp9KTsKCkZvcm0uT2JzZXJ2 ZXIgPSBDbGFzcy5jcmVhdGUoQWJzdHJhY3QuVGltZWRPYnNlcnZlciwgewogIGdl dFZhbHVlOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBGb3JtLnNlcmlhbGl6ZSh0 aGlzLmVsZW1lbnQpOwogIH0KfSk7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKi8KCkFic3RyYWN0LkV2ZW50T2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUoewog IGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNhbGxiYWNrKSB7CiAgICB0 aGlzLmVsZW1lbnQgID0gJChlbGVtZW50KTsKICAgIHRoaXMuY2FsbGJhY2sgPSBj YWxsYmFjazsKCiAgICB0aGlzLmxhc3RWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTsK ICAgIGlmICh0aGlzLmVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdm b3JtJykKICAgICAgdGhpcy5yZWdpc3RlckZvcm1DYWxsYmFja3MoKTsKICAgIGVs c2UKICAgICAgdGhpcy5yZWdpc3RlckNhbGxiYWNrKHRoaXMuZWxlbWVudCk7CiAg fSwKCiAgb25FbGVtZW50RXZlbnQ6IGZ1bmN0aW9uKCkgewogICAgdmFyIHZhbHVl ID0gdGhpcy5nZXRWYWx1ZSgpOwogICAgaWYgKHRoaXMubGFzdFZhbHVlICE9IHZh bHVlKSB7CiAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5lbGVtZW50LCB2YWx1ZSk7 CiAgICAgIHRoaXMubGFzdFZhbHVlID0gdmFsdWU7CiAgICB9CiAgfSwKCiAgcmVn aXN0ZXJGb3JtQ2FsbGJhY2tzOiBmdW5jdGlvbigpIHsKICAgIEZvcm0uZ2V0RWxl bWVudHModGhpcy5lbGVtZW50KS5lYWNoKHRoaXMucmVnaXN0ZXJDYWxsYmFjaywg dGhpcyk7CiAgfSwKCiAgcmVnaXN0ZXJDYWxsYmFjazogZnVuY3Rpb24oZWxlbWVu dCkgewogICAgaWYgKGVsZW1lbnQudHlwZSkgewogICAgICBzd2l0Y2ggKGVsZW1l bnQudHlwZS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgICAgY2FzZSAnY2hlY2tib3gn OgogICAgICAgIGNhc2UgJ3JhZGlvJzoKICAgICAgICAgIEV2ZW50Lm9ic2VydmUo ZWxlbWVudCwgJ2NsaWNrJywgdGhpcy5vbkVsZW1lbnRFdmVudC5iaW5kKHRoaXMp KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBF dmVudC5vYnNlcnZlKGVsZW1lbnQsICdjaGFuZ2UnLCB0aGlzLm9uRWxlbWVudEV2 ZW50LmJpbmQodGhpcykpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0K ICB9Cn0pOwoKRm9ybS5FbGVtZW50LkV2ZW50T2JzZXJ2ZXIgPSBDbGFzcy5jcmVh dGUoQWJzdHJhY3QuRXZlbnRPYnNlcnZlciwgewogIGdldFZhbHVlOiBmdW5jdGlv bigpIHsKICAgIHJldHVybiBGb3JtLkVsZW1lbnQuZ2V0VmFsdWUodGhpcy5lbGVt ZW50KTsKICB9Cn0pOwoKRm9ybS5FdmVudE9ic2VydmVyID0gQ2xhc3MuY3JlYXRl KEFic3RyYWN0LkV2ZW50T2JzZXJ2ZXIsIHsKICBnZXRWYWx1ZTogZnVuY3Rpb24o KSB7CiAgICByZXR1cm4gRm9ybS5zZXJpYWxpemUodGhpcy5lbGVtZW50KTsKICB9 Cn0pOwppZiAoIXdpbmRvdy5FdmVudCkgdmFyIEV2ZW50ID0geyB9OwoKT2JqZWN0 LmV4dGVuZChFdmVudCwgewogIEtFWV9CQUNLU1BBQ0U6IDgsCiAgS0VZX1RBQjog ICAgICAgOSwKICBLRVlfUkVUVVJOOiAgIDEzLAogIEtFWV9FU0M6ICAgICAgMjcs CiAgS0VZX0xFRlQ6ICAgICAzNywKICBLRVlfVVA6ICAgICAgIDM4LAogIEtFWV9S SUdIVDogICAgMzksCiAgS0VZX0RPV046ICAgICA0MCwKICBLRVlfREVMRVRFOiAg IDQ2LAogIEtFWV9IT01FOiAgICAgMzYsCiAgS0VZX0VORDogICAgICAzNSwKICBL RVlfUEFHRVVQOiAgIDMzLAogIEtFWV9QQUdFRE9XTjogMzQsCiAgS0VZX0lOU0VS VDogICA0NSwKCiAgY2FjaGU6IHsgfSwKCiAgcmVsYXRlZFRhcmdldDogZnVuY3Rp b24oZXZlbnQpIHsKICAgIHZhciBlbGVtZW50OwogICAgc3dpdGNoKGV2ZW50LnR5 cGUpIHsKICAgICAgY2FzZSAnbW91c2VvdmVyJzogZWxlbWVudCA9IGV2ZW50LmZy b21FbGVtZW50OyBicmVhazsKICAgICAgY2FzZSAnbW91c2VvdXQnOiAgZWxlbWVu dCA9IGV2ZW50LnRvRWxlbWVudDsgICBicmVhazsKICAgICAgZGVmYXVsdDogcmV0 dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gRWxlbWVudC5leHRlbmQoZWxlbWVu dCk7CiAgfQp9KTsKCkV2ZW50Lk1ldGhvZHMgPSAoZnVuY3Rpb24oKSB7CiAgdmFy IGlzQnV0dG9uOwoKICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUpIHsKICAgIHZh ciBidXR0b25NYXAgPSB7IDA6IDEsIDE6IDQsIDI6IDIgfTsKICAgIGlzQnV0dG9u ID0gZnVuY3Rpb24oZXZlbnQsIGNvZGUpIHsKICAgICAgcmV0dXJuIGV2ZW50LmJ1 dHRvbiA9PSBidXR0b25NYXBbY29kZV07CiAgICB9OwoKICB9IGVsc2UgaWYgKFBy b3RvdHlwZS5Ccm93c2VyLldlYktpdCkgewogICAgaXNCdXR0b24gPSBmdW5jdGlv bihldmVudCwgY29kZSkgewogICAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICAgICBj YXNlIDA6IHJldHVybiBldmVudC53aGljaCA9PSAxICYmICFldmVudC5tZXRhS2V5 OwogICAgICAgIGNhc2UgMTogcmV0dXJuIGV2ZW50LndoaWNoID09IDEgJiYgZXZl bnQubWV0YUtleTsKICAgICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7CiAgICAg IH0KICAgIH07CgogIH0gZWxzZSB7CiAgICBpc0J1dHRvbiA9IGZ1bmN0aW9uKGV2 ZW50LCBjb2RlKSB7CiAgICAgIHJldHVybiBldmVudC53aGljaCA/IChldmVudC53 aGljaCA9PT0gY29kZSArIDEpIDogKGV2ZW50LmJ1dHRvbiA9PT0gY29kZSk7CiAg ICB9OwogIH0KCiAgcmV0dXJuIHsKICAgIGlzTGVmdENsaWNrOiAgIGZ1bmN0aW9u KGV2ZW50KSB7IHJldHVybiBpc0J1dHRvbihldmVudCwgMCkgfSwKICAgIGlzTWlk ZGxlQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7IHJldHVybiBpc0J1dHRvbihldmVu dCwgMSkgfSwKICAgIGlzUmlnaHRDbGljazogIGZ1bmN0aW9uKGV2ZW50KSB7IHJl dHVybiBpc0J1dHRvbihldmVudCwgMikgfSwKCiAgICBlbGVtZW50OiBmdW5jdGlv bihldmVudCkgewogICAgICB2YXIgbm9kZSA9IEV2ZW50LmV4dGVuZChldmVudCku dGFyZ2V0OwogICAgICByZXR1cm4gRWxlbWVudC5leHRlbmQobm9kZS5ub2RlVHlw ZSA9PSBOb2RlLlRFWFRfTk9ERSA/IG5vZGUucGFyZW50Tm9kZSA6IG5vZGUpOwog ICAgfSwKCiAgICBmaW5kRWxlbWVudDogZnVuY3Rpb24oZXZlbnQsIGV4cHJlc3Np b24pIHsKICAgICAgdmFyIGVsZW1lbnQgPSBFdmVudC5lbGVtZW50KGV2ZW50KTsK ICAgICAgaWYgKCFleHByZXNzaW9uKSByZXR1cm4gZWxlbWVudDsKICAgICAgdmFy IGVsZW1lbnRzID0gW2VsZW1lbnRdLmNvbmNhdChlbGVtZW50LmFuY2VzdG9ycygp KTsKICAgICAgcmV0dXJuIFNlbGVjdG9yLmZpbmRFbGVtZW50KGVsZW1lbnRzLCBl eHByZXNzaW9uLCAwKTsKICAgIH0sCgogICAgcG9pbnRlcjogZnVuY3Rpb24oZXZl bnQpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB4OiBldmVudC5wYWdlWCB8fCAo ZXZlbnQuY2xpZW50WCArCiAgICAgICAgICAoZG9jdW1lbnQuZG9jdW1lbnRFbGVt ZW50LnNjcm9sbExlZnQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KSksCiAg ICAgICAgeTogZXZlbnQucGFnZVkgfHwgKGV2ZW50LmNsaWVudFkgKwogICAgICAg ICAgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1l bnQuYm9keS5zY3JvbGxUb3ApKQogICAgICB9OwogICAgfSwKCiAgICBwb2ludGVy WDogZnVuY3Rpb24oZXZlbnQpIHsgcmV0dXJuIEV2ZW50LnBvaW50ZXIoZXZlbnQp LnggfSwKICAgIHBvaW50ZXJZOiBmdW5jdGlvbihldmVudCkgeyByZXR1cm4gRXZl bnQucG9pbnRlcihldmVudCkueSB9LAoKICAgIHN0b3A6IGZ1bmN0aW9uKGV2ZW50 KSB7CiAgICAgIEV2ZW50LmV4dGVuZChldmVudCk7CiAgICAgIGV2ZW50LnByZXZl bnREZWZhdWx0KCk7CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAg ICBldmVudC5zdG9wcGVkID0gdHJ1ZTsKICAgIH0KICB9Owp9KSgpOwoKRXZlbnQu ZXh0ZW5kID0gKGZ1bmN0aW9uKCkgewogIHZhciBtZXRob2RzID0gT2JqZWN0Lmtl eXMoRXZlbnQuTWV0aG9kcykuaW5qZWN0KHsgfSwgZnVuY3Rpb24obSwgbmFtZSkg ewogICAgbVtuYW1lXSA9IEV2ZW50Lk1ldGhvZHNbbmFtZV0ubWV0aG9kaXplKCk7 CiAgICByZXR1cm4gbTsKICB9KTsKCiAgaWYgKFByb3RvdHlwZS5Ccm93c2VyLklF KSB7CiAgICBPYmplY3QuZXh0ZW5kKG1ldGhvZHMsIHsKICAgICAgc3RvcFByb3Bh Z2F0aW9uOiBmdW5jdGlvbigpIHsgdGhpcy5jYW5jZWxCdWJibGUgPSB0cnVlIH0s CiAgICAgIHByZXZlbnREZWZhdWx0OiAgZnVuY3Rpb24oKSB7IHRoaXMucmV0dXJu VmFsdWUgPSBmYWxzZSB9LAogICAgICBpbnNwZWN0OiBmdW5jdGlvbigpIHsgcmV0 dXJuICJbb2JqZWN0IEV2ZW50XSIgfQogICAgfSk7CgogICAgcmV0dXJuIGZ1bmN0 aW9uKGV2ZW50KSB7CiAgICAgIGlmICghZXZlbnQpIHJldHVybiBmYWxzZTsKICAg ICAgaWYgKGV2ZW50Ll9leHRlbmRlZEJ5UHJvdG90eXBlKSByZXR1cm4gZXZlbnQ7 CgogICAgICBldmVudC5fZXh0ZW5kZWRCeVByb3RvdHlwZSA9IFByb3RvdHlwZS5l bXB0eUZ1bmN0aW9uOwogICAgICB2YXIgcG9pbnRlciA9IEV2ZW50LnBvaW50ZXIo ZXZlbnQpOwogICAgICBPYmplY3QuZXh0ZW5kKGV2ZW50LCB7CiAgICAgICAgdGFy Z2V0OiBldmVudC5zcmNFbGVtZW50LAogICAgICAgIHJlbGF0ZWRUYXJnZXQ6IEV2 ZW50LnJlbGF0ZWRUYXJnZXQoZXZlbnQpLAogICAgICAgIHBhZ2VYOiAgcG9pbnRl ci54LAogICAgICAgIHBhZ2VZOiAgcG9pbnRlci55CiAgICAgIH0pOwogICAgICBy ZXR1cm4gT2JqZWN0LmV4dGVuZChldmVudCwgbWV0aG9kcyk7CiAgICB9OwoKICB9 IGVsc2UgewogICAgRXZlbnQucHJvdG90eXBlID0gRXZlbnQucHJvdG90eXBlIHx8 IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIikuX19wcm90b19fOwog ICAgT2JqZWN0LmV4dGVuZChFdmVudC5wcm90b3R5cGUsIG1ldGhvZHMpOwogICAg cmV0dXJuIFByb3RvdHlwZS5LOwogIH0KfSkoKTsKCk9iamVjdC5leHRlbmQoRXZl bnQsIChmdW5jdGlvbigpIHsKICB2YXIgY2FjaGUgPSBFdmVudC5jYWNoZTsKCiAg ZnVuY3Rpb24gZ2V0RXZlbnRJRChlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudC5f cHJvdG90eXBlRXZlbnRJRCkgcmV0dXJuIGVsZW1lbnQuX3Byb3RvdHlwZUV2ZW50 SURbMF07CiAgICBhcmd1bWVudHMuY2FsbGVlLmlkID0gYXJndW1lbnRzLmNhbGxl ZS5pZCB8fCAxOwogICAgcmV0dXJuIGVsZW1lbnQuX3Byb3RvdHlwZUV2ZW50SUQg PSBbKythcmd1bWVudHMuY2FsbGVlLmlkXTsKICB9CgogIGZ1bmN0aW9uIGdldERP TUV2ZW50TmFtZShldmVudE5hbWUpIHsKICAgIGlmIChldmVudE5hbWUgJiYgZXZl bnROYW1lLmluY2x1ZGUoJzonKSkgcmV0dXJuICJkYXRhYXZhaWxhYmxlIjsKICAg IHJldHVybiBldmVudE5hbWU7CiAgfQoKICBmdW5jdGlvbiBnZXRDYWNoZUZvcklE KGlkKSB7CiAgICByZXR1cm4gY2FjaGVbaWRdID0gY2FjaGVbaWRdIHx8IHsgfTsK ICB9CgogIGZ1bmN0aW9uIGdldFdyYXBwZXJzRm9yRXZlbnROYW1lKGlkLCBldmVu dE5hbWUpIHsKICAgIHZhciBjID0gZ2V0Q2FjaGVGb3JJRChpZCk7CiAgICByZXR1 cm4gY1tldmVudE5hbWVdID0gY1tldmVudE5hbWVdIHx8IFtdOwogIH0KCiAgZnVu Y3Rpb24gY3JlYXRlV3JhcHBlcihlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIp IHsKICAgIHZhciBpZCA9IGdldEV2ZW50SUQoZWxlbWVudCk7CiAgICB2YXIgYyA9 IGdldFdyYXBwZXJzRm9yRXZlbnROYW1lKGlkLCBldmVudE5hbWUpOwogICAgaWYg KGMucGx1Y2soImhhbmRsZXIiKS5pbmNsdWRlKGhhbmRsZXIpKSByZXR1cm4gZmFs c2U7CgogICAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbihldmVudCkgewogICAgICBp ZiAoIUV2ZW50IHx8ICFFdmVudC5leHRlbmQgfHwKICAgICAgICAoZXZlbnQuZXZl bnROYW1lICYmIGV2ZW50LmV2ZW50TmFtZSAhPSBldmVudE5hbWUpKQogICAgICAg ICAgcmV0dXJuIGZhbHNlOwoKICAgICAgRXZlbnQuZXh0ZW5kKGV2ZW50KTsKICAg ICAgaGFuZGxlci5jYWxsKGVsZW1lbnQsIGV2ZW50KTsKICAgIH07CgogICAgd3Jh cHBlci5oYW5kbGVyID0gaGFuZGxlcjsKICAgIGMucHVzaCh3cmFwcGVyKTsKICAg IHJldHVybiB3cmFwcGVyOwogIH0KCiAgZnVuY3Rpb24gZmluZFdyYXBwZXIoaWQs IGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgdmFyIGMgPSBnZXRXcmFwcGVyc0Zv ckV2ZW50TmFtZShpZCwgZXZlbnROYW1lKTsKICAgIHJldHVybiBjLmZpbmQoZnVu Y3Rpb24od3JhcHBlcikgeyByZXR1cm4gd3JhcHBlci5oYW5kbGVyID09IGhhbmRs ZXIgfSk7CiAgfQoKICBmdW5jdGlvbiBkZXN0cm95V3JhcHBlcihpZCwgZXZlbnRO YW1lLCBoYW5kbGVyKSB7CiAgICB2YXIgYyA9IGdldENhY2hlRm9ySUQoaWQpOwog ICAgaWYgKCFjW2V2ZW50TmFtZV0pIHJldHVybiBmYWxzZTsKICAgIGNbZXZlbnRO YW1lXSA9IGNbZXZlbnROYW1lXS53aXRob3V0KGZpbmRXcmFwcGVyKGlkLCBldmVu dE5hbWUsIGhhbmRsZXIpKTsKICB9CgogIGZ1bmN0aW9uIGRlc3Ryb3lDYWNoZSgp IHsKICAgIGZvciAodmFyIGlkIGluIGNhY2hlKQogICAgICBmb3IgKHZhciBldmVu dE5hbWUgaW4gY2FjaGVbaWRdKQogICAgICAgIGNhY2hlW2lkXVtldmVudE5hbWVd ID0gbnVsbDsKICB9CgogIGlmICh3aW5kb3cuYXR0YWNoRXZlbnQpIHsKICAgIHdp bmRvdy5hdHRhY2hFdmVudCgib251bmxvYWQiLCBkZXN0cm95Q2FjaGUpOwogIH0K CiAgcmV0dXJuIHsKICAgIG9ic2VydmU6IGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50 TmFtZSwgaGFuZGxlcikgewogICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAg ICAgdmFyIG5hbWUgPSBnZXRET01FdmVudE5hbWUoZXZlbnROYW1lKTsKCiAgICAg IHZhciB3cmFwcGVyID0gY3JlYXRlV3JhcHBlcihlbGVtZW50LCBldmVudE5hbWUs IGhhbmRsZXIpOwogICAgICBpZiAoIXdyYXBwZXIpIHJldHVybiBlbGVtZW50OwoK ICAgICAgaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgIGVs ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwcGVyLCBmYWxzZSk7CiAg ICAgIH0gZWxzZSB7CiAgICAgICAgZWxlbWVudC5hdHRhY2hFdmVudCgib24iICsg bmFtZSwgd3JhcHBlcik7CiAgICAgIH0KCiAgICAgIHJldHVybiBlbGVtZW50Owog ICAgfSwKCiAgICBzdG9wT2JzZXJ2aW5nOiBmdW5jdGlvbihlbGVtZW50LCBldmVu dE5hbWUsIGhhbmRsZXIpIHsKICAgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAg ICAgIHZhciBpZCA9IGdldEV2ZW50SUQoZWxlbWVudCksIG5hbWUgPSBnZXRET01F dmVudE5hbWUoZXZlbnROYW1lKTsKCiAgICAgIGlmICghaGFuZGxlciAmJiBldmVu dE5hbWUpIHsKICAgICAgICBnZXRXcmFwcGVyc0ZvckV2ZW50TmFtZShpZCwgZXZl bnROYW1lKS5lYWNoKGZ1bmN0aW9uKHdyYXBwZXIpIHsKICAgICAgICAgIGVsZW1l bnQuc3RvcE9ic2VydmluZyhldmVudE5hbWUsIHdyYXBwZXIuaGFuZGxlcik7CiAg ICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CgogICAgICB9IGVsc2Ug aWYgKCFldmVudE5hbWUpIHsKICAgICAgICBPYmplY3Qua2V5cyhnZXRDYWNoZUZv cklEKGlkKSkuZWFjaChmdW5jdGlvbihldmVudE5hbWUpIHsKICAgICAgICAgIGVs ZW1lbnQuc3RvcE9ic2VydmluZyhldmVudE5hbWUpOwogICAgICAgIH0pOwogICAg ICAgIHJldHVybiBlbGVtZW50OwogICAgICB9CgogICAgICB2YXIgd3JhcHBlciA9 IGZpbmRXcmFwcGVyKGlkLCBldmVudE5hbWUsIGhhbmRsZXIpOwogICAgICBpZiAo IXdyYXBwZXIpIHJldHVybiBlbGVtZW50OwoKICAgICAgaWYgKGVsZW1lbnQucmVt b3ZlRXZlbnRMaXN0ZW5lcikgewogICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRM aXN0ZW5lcihuYW1lLCB3cmFwcGVyLCBmYWxzZSk7CiAgICAgIH0gZWxzZSB7CiAg ICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgib24iICsgbmFtZSwgd3JhcHBlcik7 CiAgICAgIH0KCiAgICAgIGRlc3Ryb3lXcmFwcGVyKGlkLCBldmVudE5hbWUsIGhh bmRsZXIpOwoKICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9LAoKICAgIGZpcmU6 IGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50TmFtZSwgbWVtbykgewogICAgICBlbGVt ZW50ID0gJChlbGVtZW50KTsKICAgICAgaWYgKGVsZW1lbnQgPT0gZG9jdW1lbnQg JiYgZG9jdW1lbnQuY3JlYXRlRXZlbnQgJiYgIWVsZW1lbnQuZGlzcGF0Y2hFdmVu dCkKICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwoK ICAgICAgdmFyIGV2ZW50OwogICAgICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQp IHsKICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJIVE1MRXZl bnRzIik7CiAgICAgICAgZXZlbnQuaW5pdEV2ZW50KCJkYXRhYXZhaWxhYmxlIiwg dHJ1ZSwgdHJ1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZXZlbnQgPSBkb2N1 bWVudC5jcmVhdGVFdmVudE9iamVjdCgpOwogICAgICAgIGV2ZW50LmV2ZW50VHlw ZSA9ICJvbmRhdGFhdmFpbGFibGUiOwogICAgICB9CgogICAgICBldmVudC5ldmVu dE5hbWUgPSBldmVudE5hbWU7CiAgICAgIGV2ZW50Lm1lbW8gPSBtZW1vIHx8IHsg fTsKCiAgICAgIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkgewogICAgICAgIGVs ZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAg ICAgZWxlbWVudC5maXJlRXZlbnQoZXZlbnQuZXZlbnRUeXBlLCBldmVudCk7CiAg ICAgIH0KCiAgICAgIHJldHVybiBFdmVudC5leHRlbmQoZXZlbnQpOwogICAgfQog IH07Cn0pKCkpOwoKT2JqZWN0LmV4dGVuZChFdmVudCwgRXZlbnQuTWV0aG9kcyk7 CgpFbGVtZW50LmFkZE1ldGhvZHMoewogIGZpcmU6ICAgICAgICAgIEV2ZW50LmZp cmUsCiAgb2JzZXJ2ZTogICAgICAgRXZlbnQub2JzZXJ2ZSwKICBzdG9wT2JzZXJ2 aW5nOiBFdmVudC5zdG9wT2JzZXJ2aW5nCn0pOwoKT2JqZWN0LmV4dGVuZChkb2N1 bWVudCwgewogIGZpcmU6ICAgICAgICAgIEVsZW1lbnQuTWV0aG9kcy5maXJlLm1l dGhvZGl6ZSgpLAogIG9ic2VydmU6ICAgICAgIEVsZW1lbnQuTWV0aG9kcy5vYnNl cnZlLm1ldGhvZGl6ZSgpLAogIHN0b3BPYnNlcnZpbmc6IEVsZW1lbnQuTWV0aG9k cy5zdG9wT2JzZXJ2aW5nLm1ldGhvZGl6ZSgpLAogIGxvYWRlZDogICAgICAgIGZh bHNlCn0pOwoKKGZ1bmN0aW9uKCkgewogIC8qIFN1cHBvcnQgZm9yIHRoZSBET01D b250ZW50TG9hZGVkIGV2ZW50IGlzIGJhc2VkIG9uIHdvcmsgYnkgRGFuIFdlYmIs CiAgICAgTWF0dGhpYXMgTWlsbGVyLCBEZWFuIEVkd2FyZHMgYW5kIEpvaG4gUmVz aWcuICovCgogIHZhciB0aW1lcjsKCiAgZnVuY3Rpb24gZmlyZUNvbnRlbnRMb2Fk ZWRFdmVudCgpIHsKICAgIGlmIChkb2N1bWVudC5sb2FkZWQpIHJldHVybjsKICAg IGlmICh0aW1lcikgd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXIpOwogICAgZG9j dW1lbnQuZmlyZSgiZG9tOmxvYWRlZCIpOwogICAgZG9jdW1lbnQubG9hZGVkID0g dHJ1ZTsKICB9CgogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7CiAg ICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuV2ViS2l0KSB7CiAgICAgIHRpbWVyID0g d2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgIGlmICgvbG9h ZGVkfGNvbXBsZXRlLy50ZXN0KGRvY3VtZW50LnJlYWR5U3RhdGUpKQogICAgICAg ICAgZmlyZUNvbnRlbnRMb2FkZWRFdmVudCgpOwogICAgICB9LCAwKTsKCiAgICAg IEV2ZW50Lm9ic2VydmUod2luZG93LCAibG9hZCIsIGZpcmVDb250ZW50TG9hZGVk RXZlbnQpOwoKICAgIH0gZWxzZSB7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlz dGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLAogICAgICAgIGZpcmVDb250ZW50TG9h ZGVkRXZlbnQsIGZhbHNlKTsKICAgIH0KCiAgfSBlbHNlIHsKICAgIGRvY3VtZW50 LndyaXRlKCI8c2NyaXB0IGlkPV9fb25ET01Db250ZW50TG9hZGVkIGRlZmVyIHNy Yz0vLzo+PFwvc2NyaXB0PiIpOwogICAgJCgiX19vbkRPTUNvbnRlbnRMb2FkZWQi KS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKHRo aXMucmVhZHlTdGF0ZSA9PSAiY29tcGxldGUiKSB7CiAgICAgICAgdGhpcy5vbnJl YWR5c3RhdGVjaGFuZ2UgPSBudWxsOwogICAgICAgIGZpcmVDb250ZW50TG9hZGVk RXZlbnQoKTsKICAgICAgfQogICAgfTsKICB9Cn0pKCk7Ci8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSBERVBSRUNBVEVEIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0qLwoKSGFzaC50b1F1ZXJ5U3RyaW5nID0gT2JqZWN0LnRv UXVlcnlTdHJpbmc7Cgp2YXIgVG9nZ2xlID0geyBkaXNwbGF5OiBFbGVtZW50LnRv Z2dsZSB9OwoKRWxlbWVudC5NZXRob2RzLmNoaWxkT2YgPSBFbGVtZW50Lk1ldGhv ZHMuZGVzY2VuZGFudE9mOwoKdmFyIEluc2VydGlvbiA9IHsKICBCZWZvcmU6IGZ1 bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKICAgIHJldHVybiBFbGVtZW50Lmlu c2VydChlbGVtZW50LCB7YmVmb3JlOmNvbnRlbnR9KTsKICB9LAoKICBUb3A6IGZ1 bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKICAgIHJldHVybiBFbGVtZW50Lmlu c2VydChlbGVtZW50LCB7dG9wOmNvbnRlbnR9KTsKICB9LAoKICBCb3R0b206IGZ1 bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKICAgIHJldHVybiBFbGVtZW50Lmlu c2VydChlbGVtZW50LCB7Ym90dG9tOmNvbnRlbnR9KTsKICB9LAoKICBBZnRlcjog ZnVuY3Rpb24oZWxlbWVudCwgY29udGVudCkgewogICAgcmV0dXJuIEVsZW1lbnQu aW5zZXJ0KGVsZW1lbnQsIHthZnRlcjpjb250ZW50fSk7CiAgfQp9OwoKdmFyICRj b250aW51ZSA9IG5ldyBFcnJvcignInRocm93ICRjb250aW51ZSIgaXMgZGVwcmVj YXRlZCwgdXNlICJyZXR1cm4iIGluc3RlYWQnKTsKCi8vIFRoaXMgc2hvdWxkIGJl IG1vdmVkIHRvIHNjcmlwdC5hY3Vsby51czsgbm90aWNlIHRoZSBkZXByZWNhdGVk IG1ldGhvZHMKLy8gZnVydGhlciBiZWxvdywgdGhhdCBtYXAgdG8gdGhlIG5ld2Vy IEVsZW1lbnQgbWV0aG9kcy4KdmFyIFBvc2l0aW9uID0gewogIC8vIHNldCB0byB0 cnVlIGlmIG5lZWRlZCwgd2FybmluZzogZmlyZWZveCBwZXJmb3JtYW5jZSBwcm9i bGVtcwogIC8vIE5PVCBuZWVlZGVkIGZvciBwYWdlIHNjcm9sbGluZywgb25seSBp ZiBkcmFnZ2FibGUgY29udGFpbmVkIGluCiAgLy8gc2Nyb2xsYWJsZSBlbGVtZW50 cwogIGluY2x1ZGVTY3JvbGxPZmZzZXRzOiBmYWxzZSwKCiAgLy8gbXVzdCBiZSBj YWxsZWQgYmVmb3JlIGNhbGxpbmcgd2l0aGluSW5jbHVkaW5nU2Nyb2xsb2Zmc2V0 LCBldmVyeSB0aW1lIHRoZQogIC8vIHBhZ2UgaXMgc2Nyb2xsZWQKICBwcmVwYXJl OiBmdW5jdGlvbigpIHsKICAgIHRoaXMuZGVsdGFYID0gIHdpbmRvdy5wYWdlWE9m ZnNldAogICAgICAgICAgICAgICAgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50 LnNjcm9sbExlZnQKICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50LmJvZHkuc2Ny b2xsTGVmdAogICAgICAgICAgICAgICAgfHwgMDsKICAgIHRoaXMuZGVsdGFZID0g IHdpbmRvdy5wYWdlWU9mZnNldAogICAgICAgICAgICAgICAgfHwgZG9jdW1lbnQu ZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcAogICAgICAgICAgICAgICAgfHwgZG9j dW1lbnQuYm9keS5zY3JvbGxUb3AKICAgICAgICAgICAgICAgIHx8IDA7CiAgfSwK CiAgLy8gY2FjaGVzIHgveSBjb29yZGluYXRlIHBhaXIgdG8gdXNlIHdpdGggb3Zl cmxhcAogIHdpdGhpbjogZnVuY3Rpb24oZWxlbWVudCwgeCwgeSkgewogICAgaWYg KHRoaXMuaW5jbHVkZVNjcm9sbE9mZnNldHMpCiAgICAgIHJldHVybiB0aGlzLndp dGhpbkluY2x1ZGluZ1Njcm9sbG9mZnNldHMoZWxlbWVudCwgeCwgeSk7CiAgICB0 aGlzLnhjb21wID0geDsKICAgIHRoaXMueWNvbXAgPSB5OwogICAgdGhpcy5vZmZz ZXQgPSBFbGVtZW50LmN1bXVsYXRpdmVPZmZzZXQoZWxlbWVudCk7CgogICAgcmV0 dXJuICh5ID49IHRoaXMub2Zmc2V0WzFdICYmCiAgICAgICAgICAgIHkgPCAgdGhp cy5vZmZzZXRbMV0gKyBlbGVtZW50Lm9mZnNldEhlaWdodCAmJgogICAgICAgICAg ICB4ID49IHRoaXMub2Zmc2V0WzBdICYmCiAgICAgICAgICAgIHggPCAgdGhpcy5v ZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNldFdpZHRoKTsKICB9LAoKICB3aXRoaW5J bmNsdWRpbmdTY3JvbGxvZmZzZXRzOiBmdW5jdGlvbihlbGVtZW50LCB4LCB5KSB7 CiAgICB2YXIgb2Zmc2V0Y2FjaGUgPSBFbGVtZW50LmN1bXVsYXRpdmVTY3JvbGxP ZmZzZXQoZWxlbWVudCk7CgogICAgdGhpcy54Y29tcCA9IHggKyBvZmZzZXRjYWNo ZVswXSAtIHRoaXMuZGVsdGFYOwogICAgdGhpcy55Y29tcCA9IHkgKyBvZmZzZXRj YWNoZVsxXSAtIHRoaXMuZGVsdGFZOwogICAgdGhpcy5vZmZzZXQgPSBFbGVtZW50 LmN1bXVsYXRpdmVPZmZzZXQoZWxlbWVudCk7CgogICAgcmV0dXJuICh0aGlzLnlj b21wID49IHRoaXMub2Zmc2V0WzFdICYmCiAgICAgICAgICAgIHRoaXMueWNvbXAg PCAgdGhpcy5vZmZzZXRbMV0gKyBlbGVtZW50Lm9mZnNldEhlaWdodCAmJgogICAg ICAgICAgICB0aGlzLnhjb21wID49IHRoaXMub2Zmc2V0WzBdICYmCiAgICAgICAg ICAgIHRoaXMueGNvbXAgPCAgdGhpcy5vZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNl dFdpZHRoKTsKICB9LAoKICAvLyB3aXRoaW4gbXVzdCBiZSBjYWxsZWQgZGlyZWN0 bHkgYmVmb3JlCiAgb3ZlcmxhcDogZnVuY3Rpb24obW9kZSwgZWxlbWVudCkgewog ICAgaWYgKCFtb2RlKSByZXR1cm4gMDsKICAgIGlmIChtb2RlID09ICd2ZXJ0aWNh bCcpCiAgICAgIHJldHVybiAoKHRoaXMub2Zmc2V0WzFdICsgZWxlbWVudC5vZmZz ZXRIZWlnaHQpIC0gdGhpcy55Y29tcCkgLwogICAgICAgIGVsZW1lbnQub2Zmc2V0 SGVpZ2h0OwogICAgaWYgKG1vZGUgPT0gJ2hvcml6b250YWwnKQogICAgICByZXR1 cm4gKCh0aGlzLm9mZnNldFswXSArIGVsZW1lbnQub2Zmc2V0V2lkdGgpIC0gdGhp cy54Y29tcCkgLwogICAgICAgIGVsZW1lbnQub2Zmc2V0V2lkdGg7CiAgfSwKCiAg Ly8gRGVwcmVjYXRpb24gbGF5ZXIgLS0gdXNlIG5ld2VyIEVsZW1lbnQgbWV0aG9k cyBub3cgKDEuNS4yKS4KCiAgY3VtdWxhdGl2ZU9mZnNldDogRWxlbWVudC5NZXRo b2RzLmN1bXVsYXRpdmVPZmZzZXQsCgogIHBvc2l0aW9uZWRPZmZzZXQ6IEVsZW1l bnQuTWV0aG9kcy5wb3NpdGlvbmVkT2Zmc2V0LAoKICBhYnNvbHV0aXplOiBmdW5j dGlvbihlbGVtZW50KSB7CiAgICBQb3NpdGlvbi5wcmVwYXJlKCk7CiAgICByZXR1 cm4gRWxlbWVudC5hYnNvbHV0aXplKGVsZW1lbnQpOwogIH0sCgogIHJlbGF0aXZp emU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIFBvc2l0aW9uLnByZXBhcmUoKTsK ICAgIHJldHVybiBFbGVtZW50LnJlbGF0aXZpemUoZWxlbWVudCk7CiAgfSwKCiAg cmVhbE9mZnNldDogRWxlbWVudC5NZXRob2RzLmN1bXVsYXRpdmVTY3JvbGxPZmZz ZXQsCgogIG9mZnNldFBhcmVudDogRWxlbWVudC5NZXRob2RzLmdldE9mZnNldFBh cmVudCwKCiAgcGFnZTogRWxlbWVudC5NZXRob2RzLnZpZXdwb3J0T2Zmc2V0LAoK ICBjbG9uZTogZnVuY3Rpb24oc291cmNlLCB0YXJnZXQsIG9wdGlvbnMpIHsKICAg IG9wdGlvbnMgPSBvcHRpb25zIHx8IHsgfTsKICAgIHJldHVybiBFbGVtZW50LmNs b25lUG9zaXRpb24odGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpOwogIH0KfTsKCi8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKaWYgKCFkb2N1bWVudC5nZXRF bGVtZW50c0J5Q2xhc3NOYW1lKSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NO YW1lID0gZnVuY3Rpb24oaW5zdGFuY2VNZXRob2RzKXsKICBmdW5jdGlvbiBpdGVy KG5hbWUpIHsKICAgIHJldHVybiBuYW1lLmJsYW5rKCkgPyBudWxsIDogIltjb250 YWlucyhjb25jYXQoJyAnLCBAY2xhc3MsICcgJyksICcgIiArIG5hbWUgKyAiICcp XSI7CiAgfQoKICBpbnN0YW5jZU1ldGhvZHMuZ2V0RWxlbWVudHNCeUNsYXNzTmFt ZSA9IFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuWFBhdGggPwogIGZ1bmN0aW9u KGVsZW1lbnQsIGNsYXNzTmFtZSkgewogICAgY2xhc3NOYW1lID0gY2xhc3NOYW1l LnRvU3RyaW5nKCkuc3RyaXAoKTsKICAgIHZhciBjb25kID0gL1xzLy50ZXN0KGNs YXNzTmFtZSkgPyAkdyhjbGFzc05hbWUpLm1hcChpdGVyKS5qb2luKCcnKSA6IGl0 ZXIoY2xhc3NOYW1lKTsKICAgIHJldHVybiBjb25kID8gZG9jdW1lbnQuX2dldEVs ZW1lbnRzQnlYUGF0aCgnLi8vKicgKyBjb25kLCBlbGVtZW50KSA6IFtdOwogIH0g OiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsKICAgIGNsYXNzTmFtZSA9 IGNsYXNzTmFtZS50b1N0cmluZygpLnN0cmlwKCk7CiAgICB2YXIgZWxlbWVudHMg PSBbXSwgY2xhc3NOYW1lcyA9ICgvXHMvLnRlc3QoY2xhc3NOYW1lKSA/ICR3KGNs YXNzTmFtZSkgOiBudWxsKTsKICAgIGlmICghY2xhc3NOYW1lcyAmJiAhY2xhc3NO YW1lKSByZXR1cm4gZWxlbWVudHM7CgogICAgdmFyIG5vZGVzID0gJChlbGVtZW50 KS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpOwogICAgY2xhc3NOYW1lID0gJyAn ICsgY2xhc3NOYW1lICsgJyAnOwoKICAgIGZvciAodmFyIGkgPSAwLCBjaGlsZCwg Y247IGNoaWxkID0gbm9kZXNbaV07IGkrKykgewogICAgICBpZiAoY2hpbGQuY2xh c3NOYW1lICYmIChjbiA9ICcgJyArIGNoaWxkLmNsYXNzTmFtZSArICcgJykgJiYg KGNuLmluY2x1ZGUoY2xhc3NOYW1lKSB8fAogICAgICAgICAgKGNsYXNzTmFtZXMg JiYgY2xhc3NOYW1lcy5hbGwoZnVuY3Rpb24obmFtZSkgewogICAgICAgICAgICBy ZXR1cm4gIW5hbWUudG9TdHJpbmcoKS5ibGFuaygpICYmIGNuLmluY2x1ZGUoJyAn ICsgbmFtZSArICcgJyk7CiAgICAgICAgICB9KSkpKQogICAgICAgIGVsZW1lbnRz LnB1c2goRWxlbWVudC5leHRlbmQoY2hpbGQpKTsKICAgIH0KICAgIHJldHVybiBl bGVtZW50czsKICB9OwoKICByZXR1cm4gZnVuY3Rpb24oY2xhc3NOYW1lLCBwYXJl bnRFbGVtZW50KSB7CiAgICByZXR1cm4gJChwYXJlbnRFbGVtZW50IHx8IGRvY3Vt ZW50LmJvZHkpLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTsKICB9 Owp9KEVsZW1lbnQuTWV0aG9kcyk7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKi8KCkVsZW1lbnQuQ2xhc3NOYW1lcyA9IENsYXNzLmNyZWF0ZSgpOwpFbGVt ZW50LkNsYXNzTmFtZXMucHJvdG90eXBlID0gewogIGluaXRpYWxpemU6IGZ1bmN0 aW9uKGVsZW1lbnQpIHsKICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCk7CiAg fSwKCiAgX2VhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICB0aGlzLmVsZW1l bnQuY2xhc3NOYW1lLnNwbGl0KC9ccysvKS5zZWxlY3QoZnVuY3Rpb24obmFtZSkg ewogICAgICByZXR1cm4gbmFtZS5sZW5ndGggPiAwOwogICAgfSkuX2VhY2goaXRl cmF0b3IpOwogIH0sCgogIHNldDogZnVuY3Rpb24oY2xhc3NOYW1lKSB7CiAgICB0 aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwogIH0sCgogIGFkZDog ZnVuY3Rpb24oY2xhc3NOYW1lVG9BZGQpIHsKICAgIGlmICh0aGlzLmluY2x1ZGUo Y2xhc3NOYW1lVG9BZGQpKSByZXR1cm47CiAgICB0aGlzLnNldCgkQSh0aGlzKS5j b25jYXQoY2xhc3NOYW1lVG9BZGQpLmpvaW4oJyAnKSk7CiAgfSwKCiAgcmVtb3Zl OiBmdW5jdGlvbihjbGFzc05hbWVUb1JlbW92ZSkgewogICAgaWYgKCF0aGlzLmlu Y2x1ZGUoY2xhc3NOYW1lVG9SZW1vdmUpKSByZXR1cm47CiAgICB0aGlzLnNldCgk QSh0aGlzKS53aXRob3V0KGNsYXNzTmFtZVRvUmVtb3ZlKS5qb2luKCcgJykpOwog IH0sCgogIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiAkQSh0aGlz KS5qb2luKCcgJyk7CiAgfQp9OwoKT2JqZWN0LmV4dGVuZChFbGVtZW50LkNsYXNz TmFtZXMucHJvdG90eXBlLCBFbnVtZXJhYmxlKTsKCi8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0qLwoKRWxlbWVudC5hZGRNZXRob2RzKCk7 ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline; filename=scriptaculous.js Content-Type: application/x-javascript; charset=utf-8; name=scriptaculous.js Content-Location: http://www.gchd.cz/common/scriptaculous.js?load=effects,builder Content-Transfer-Encoding: Base64 Ly8gc2NyaXB0LmFjdWxvLnVzIHNjcmlwdGFjdWxvdXMuanMgdjEuOC4xLCBUaHUg SmFuIDAzIDIyOjA3OjEyIC0wNTAwIDIwMDgKCi8vIENvcHlyaWdodCAoYykgMjAw NS0yMDA3IFRob21hcyBGdWNocyAoaHR0cDovL3NjcmlwdC5hY3Vsby51cywgaHR0 cDovL21pci5hY3Vsby51cykKLy8gCi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwov LyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUKLy8gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwovLyB3aXRo b3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsCi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwovLyBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8KLy8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgovLyAK Ly8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2Ugc2hhbGwgYmUKLy8gaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi8vCi8vIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELAovLyBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLy8gTUVSQ0hBTlRBQklM SVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLy8gTk9O SU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRQovLyBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi8v IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTgovLyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLy8KLy8g Rm9yIGRldGFpbHMsIHNlZSB0aGUgc2NyaXB0LmFjdWxvLnVzIHdlYiBzaXRlOiBo dHRwOi8vc2NyaXB0LmFjdWxvLnVzLwoKdmFyIFNjcmlwdGFjdWxvdXMgPSB7CiAg VmVyc2lvbjogJzEuOC4xJywKICByZXF1aXJlOiBmdW5jdGlvbihsaWJyYXJ5TmFt ZSkgewogICAgLy8gaW5zZXJ0aW5nIHZpYSBET00gZmFpbHMgaW4gU2FmYXJpIDIu MCwgc28gYnJ1dGUgZm9yY2UgYXBwcm9hY2gKICAgIGRvY3VtZW50LndyaXRlKCc8 c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInK2xpYnJhcnlOYW1l KyciPjxcL3NjcmlwdD4nKTsKICB9LAogIFJFUVVJUkVEX1BST1RPVFlQRTogJzEu Ni4wJywKICBsb2FkOiBmdW5jdGlvbigpIHsKICAgIGZ1bmN0aW9uIGNvbnZlcnRW ZXJzaW9uU3RyaW5nKHZlcnNpb25TdHJpbmcpewogICAgICB2YXIgciA9IHZlcnNp b25TdHJpbmcuc3BsaXQoJy4nKTsKICAgICAgcmV0dXJuIHBhcnNlSW50KHJbMF0p KjEwMDAwMCArIHBhcnNlSW50KHJbMV0pKjEwMDAgKyBwYXJzZUludChyWzJdKTsK ICAgIH0KIAogICAgaWYoKHR5cGVvZiBQcm90b3R5cGU9PSd1bmRlZmluZWQnKSB8 fCAKICAgICAgICh0eXBlb2YgRWxlbWVudCA9PSAndW5kZWZpbmVkJykgfHwgCiAg ICAgICAodHlwZW9mIEVsZW1lbnQuTWV0aG9kcz09J3VuZGVmaW5lZCcpIHx8CiAg ICAgICAoY29udmVydFZlcnNpb25TdHJpbmcoUHJvdG90eXBlLlZlcnNpb24pIDwg CiAgICAgICAgY29udmVydFZlcnNpb25TdHJpbmcoU2NyaXB0YWN1bG91cy5SRVFV SVJFRF9QUk9UT1RZUEUpKSkKICAgICAgIHRocm93KCJzY3JpcHQuYWN1bG8udXMg cmVxdWlyZXMgdGhlIFByb3RvdHlwZSBKYXZhU2NyaXB0IGZyYW1ld29yayA+PSAi ICsKICAgICAgICBTY3JpcHRhY3Vsb3VzLlJFUVVJUkVEX1BST1RPVFlQRSk7CiAg ICAKICAgICRBKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQi KSkuZmluZEFsbCggZnVuY3Rpb24ocykgewogICAgICByZXR1cm4gKHMuc3JjICYm IHMuc3JjLm1hdGNoKC9zY3JpcHRhY3Vsb3VzXC5qcyhcPy4qKT8kLykpCiAgICB9 KS5lYWNoKCBmdW5jdGlvbihzKSB7CiAgICAgIHZhciBwYXRoID0gcy5zcmMucmVw bGFjZSgvc2NyaXB0YWN1bG91c1wuanMoXD8uKik/JC8sJycpOwogICAgICB2YXIg aW5jbHVkZXMgPSBzLnNyYy5tYXRjaCgvXD8uKmxvYWQ9KFthLXosXSopLyk7CiAg ICAgIChpbmNsdWRlcyA/IGluY2x1ZGVzWzFdIDogJ2J1aWxkZXIsZWZmZWN0cyxk cmFnZHJvcCxjb250cm9scyxzbGlkZXIsc291bmQnKS5zcGxpdCgnLCcpLmVhY2go CiAgICAgICBmdW5jdGlvbihpbmNsdWRlKSB7IFNjcmlwdGFjdWxvdXMucmVxdWly ZShwYXRoK2luY2x1ZGUrJy5qcycpIH0pOwogICAgfSk7CiAgfQp9CgpTY3JpcHRh Y3Vsb3VzLmxvYWQoKTs= ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline; filename=lightbox.js Content-Type: application/x-javascript; charset=utf-8; name=lightbox.js Content-Location: http://www.gchd.cz/common/lightbox.js Content-Transfer-Encoding: Base64 Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8JTGln aHRib3ggdjIuMDQKLy8JYnkgTG9rZXNoIERoYWthciAtIGh0dHA6Ly93d3cubG9r ZXNoZGhha2FyLmNvbQovLwlMYXN0IE1vZGlmaWNhdGlvbjogMi85LzA4Ci8vCi8v CUZvciBtb3JlIGluZm9ybWF0aW9uLCB2aXNpdDoKLy8JaHR0cDovL2xva2VzaGRo YWthci5jb20vcHJvamVjdHMvbGlnaHRib3gyLwovLwovLwlMaWNlbnNlZCB1bmRl ciB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiAyLjUgTGljZW5zZSAt IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzIuNS8KLy8g IAktIEZyZWUgZm9yIHVzZSBpbiBib3RoIHBlcnNvbmFsIGFuZCBjb21tZXJjaWFs IHByb2plY3RzCi8vCQktIEF0dHJpYnV0aW9uIHJlcXVpcmVzIGxlYXZpbmcgYXV0 aG9yIG5hbWUsIGF1dGhvciBsaW5rLCBhbmQgdGhlIGxpY2Vuc2UgaW5mbyBpbnRh Y3QuCi8vCQovLyAgVGhhbmtzOiBTY290dCBVcHRvbih1cHRvbmljLmNvbSksIFBl dGVyLVBhdWwgS29jaChxdWlya3Ntb2RlLmNvbSksIGFuZCBUaG9tYXMgRnVjaHMo bWlyLmFjdWxvLnVzKSBmb3IgaWRlYXMsIGxpYnMsIGFuZCBzbmlwcGV0cy4KLy8g IAkJQXJ0ZW15IFRyZWd1YmVua28gKGFydHkubmFtZSkgZm9yIGNsZWFudXAgYW5k IGhlbHAgaW4gdXBkYXRpbmcgdG8gbGF0ZXN0IHZlciBvZiBwcm90by1hY3Vsb3Vz LgovLwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovKgoK ICAgIFRhYmxlIG9mIENvbnRlbnRzCiAgICAtLS0tLS0tLS0tLS0tLS0tLQogICAg Q29uZmlndXJhdGlvbgoKICAgIExpZ2h0Ym94IENsYXNzIERlY2xhcmF0aW9uCiAg ICAtIGluaXRpYWxpemUoKQogICAgLSB1cGRhdGVJbWFnZUxpc3QoKQogICAgLSBz dGFydCgpCiAgICAtIGNoYW5nZUltYWdlKCkKICAgIC0gcmVzaXplSW1hZ2VDb250 YWluZXIoKQogICAgLSBzaG93SW1hZ2UoKQogICAgLSB1cGRhdGVEZXRhaWxzKCkK ICAgIC0gdXBkYXRlTmF2KCkKICAgIC0gZW5hYmxlS2V5Ym9hcmROYXYoKQogICAg LSBkaXNhYmxlS2V5Ym9hcmROYXYoKQogICAgLSBrZXlib2FyZEFjdGlvbigpCiAg ICAtIHByZWxvYWROZWlnaGJvckltYWdlcygpCiAgICAtIGVuZCgpCiAgICAKICAg IEZ1bmN0aW9uIENhbGxzCiAgICAtIGRvY3VtZW50Lm9ic2VydmUoKQogICAKKi8K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vCi8vICBD b25maWd1cmF0aW9ubAovLwpMaWdodGJveE9wdGlvbnMgPSBPYmplY3QuZXh0ZW5k KHsKICAgIGZpbGVMb2FkaW5nSW1hZ2U6ICAgICAgICAnaW1nL2xvYWRpbmcuZ2lm JywgICAgIAogICAgZmlsZUJvdHRvbU5hdkNsb3NlSW1hZ2U6ICdpbWcvY2xvc2Vs YWJlbC5naWYnLAoKICAgIG92ZXJsYXlPcGFjaXR5OiAwLjgsICAgLy8gY29udHJv bHMgdHJhbnNwYXJlbmN5IG9mIHNoYWRvdyBvdmVybGF5CgogICAgYW5pbWF0ZTog dHJ1ZSwgICAgICAgICAvLyB0b2dnbGVzIHJlc2l6aW5nIGFuaW1hdGlvbnMKICAg IHJlc2l6ZVNwZWVkOiA3LCAgICAgICAgLy8gY29udHJvbHMgdGhlIHNwZWVkIG9m IHRoZSBpbWFnZSByZXNpemluZyBhbmltYXRpb25zICgxPXNsb3dlc3QgYW5kIDEw PWZhc3Rlc3QpCgogICAgYm9yZGVyU2l6ZTogMTAsICAgICAgICAgLy9pZiB5b3Ug YWRqdXN0IHRoZSBwYWRkaW5nIGluIHRoZSBDU1MsIHlvdSB3aWxsIG5lZWQgdG8g dXBkYXRlIHRoaXMgdmFyaWFibGUKCgkvLyBXaGVuIGdyb3VwaW5nIGltYWdlcyB0 aGlzIGlzIHVzZWQgdG8gd3JpdGU6IEltYWdlICMgb2YgIy4KCS8vIENoYW5nZSBp dCBmb3Igbm9uLWVuZ2xpc2ggbG9jYWxpemF0aW9uCglsYWJlbEltYWdlOiAiSW1h Z2UiLAoJbGFiZWxPZjogIm9mIgp9LCB3aW5kb3cuTGlnaHRib3hPcHRpb25zIHx8 IHt9KTsKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp2 YXIgTGlnaHRib3ggPSBDbGFzcy5jcmVhdGUoKTsKCkxpZ2h0Ym94LnByb3RvdHlw ZSA9IHsKICAgIGltYWdlQXJyYXk6IFtdLAogICAgYWN0aXZlSW1hZ2U6IHVuZGVm aW5lZCwKICAgIAogICAgLy8gaW5pdGlhbGl6ZSgpCiAgICAvLyBDb25zdHJ1Y3Rv ciBydW5zIG9uIGNvbXBsZXRpb24gb2YgdGhlIERPTSBsb2FkaW5nLiBDYWxscyB1 cGRhdGVJbWFnZUxpc3QgYW5kIHRoZW4KICAgIC8vIHRoZSBmdW5jdGlvbiBpbnNl cnRzIGh0bWwgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSB3aGljaCBpcyB1c2Vk IHRvIGRpc3BsYXkgdGhlIHNoYWRvdyAKICAgIC8vIG92ZXJsYXkgYW5kIHRoZSBp bWFnZSBjb250YWluZXIuCiAgICAvLwogICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24o KSB7ICAgIAogICAgICAgIAogICAgICAgIHRoaXMudXBkYXRlSW1hZ2VMaXN0KCk7 CiAgICAgICAgCiAgICAgICAgdGhpcy5rZXlib2FyZEFjdGlvbiA9IHRoaXMua2V5 Ym9hcmRBY3Rpb24uYmluZEFzRXZlbnRMaXN0ZW5lcih0aGlzKTsKCiAgICAgICAg aWYgKExpZ2h0Ym94T3B0aW9ucy5yZXNpemVTcGVlZCA+IDEwKSBMaWdodGJveE9w dGlvbnMucmVzaXplU3BlZWQgPSAxMDsKICAgICAgICBpZiAoTGlnaHRib3hPcHRp b25zLnJlc2l6ZVNwZWVkIDwgMSkgIExpZ2h0Ym94T3B0aW9ucy5yZXNpemVTcGVl ZCA9IDE7CgoJICAgIHRoaXMucmVzaXplRHVyYXRpb24gPSBMaWdodGJveE9wdGlv bnMuYW5pbWF0ZSA/ICgoMTEgLSBMaWdodGJveE9wdGlvbnMucmVzaXplU3BlZWQp ICogMC4xNSkgOiAwOwoJICAgIHRoaXMub3ZlcmxheUR1cmF0aW9uID0gTGlnaHRi b3hPcHRpb25zLmFuaW1hdGUgPyAwLjIgOiAwOyAgLy8gc2hhZG93IGZhZGUgaW4v b3V0IGR1cmF0aW9uCgogICAgICAgIC8vIFdoZW4gTGlnaHRib3ggc3RhcnRzIGl0 IHdpbGwgcmVzaXplIGl0c2VsZiBmcm9tIDI1MCBieSAyNTAgdG8gdGhlIGN1cnJl bnQgaW1hZ2UgZGltZW5zaW9uLgogICAgICAgIC8vIElmIGFuaW1hdGlvbnMgYXJl IHR1cm5lZCBvZmYsIGl0IHdpbGwgYmUgaGlkZGVuIGFzIHRvIHByZXZlbnQgYSBm bGlja2VyIG9mIGEKICAgICAgICAvLyB3aGl0ZSAyNTAgYnkgMjUwIGJveC4KICAg ICAgICB2YXIgc2l6ZSA9IChMaWdodGJveE9wdGlvbnMuYW5pbWF0ZSA/IDI1MCA6 IDEpICsgJ3B4JzsKICAgICAgICAKCiAgICAgICAgLy8gQ29kZSBpbnNlcnRzIGh0 bWwgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSB0aGF0IGxvb2tzIHNpbWlsYXIg dG8gdGhpczoKICAgICAgICAvLwogICAgICAgIC8vICA8ZGl2IGlkPSJvdmVybGF5 Ij48L2Rpdj4KICAgICAgICAvLyAgPGRpdiBpZD0ibGlnaHRib3giPgogICAgICAg IC8vICAgICAgPGRpdiBpZD0ib3V0ZXJJbWFnZUNvbnRhaW5lciI+CiAgICAgICAg Ly8gICAgICAgICAgPGRpdiBpZD0iaW1hZ2VDb250YWluZXIiPgogICAgICAgIC8v ICAgICAgICAgICAgICA8aW1nIGlkPSJsaWdodGJveEltYWdlIj4KICAgICAgICAv LyAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iIiBpZD0iaG92ZXJOYXYiPgogICAg ICAgIC8vICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9InByZXZMaW5r Ij48L2E+CiAgICAgICAgLy8gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBp ZD0ibmV4dExpbmsiPjwvYT4KICAgICAgICAvLyAgICAgICAgICAgICAgPC9kaXY+ CiAgICAgICAgLy8gICAgICAgICAgICAgIDxkaXYgaWQ9ImxvYWRpbmciPgogICAg ICAgIC8vICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9ImxvYWRpbmdM aW5rIj4KICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0i aW1nL2xvYWRpbmcuZ2lmIj4KICAgICAgICAvLyAgICAgICAgICAgICAgICAgIDwv YT4KICAgICAgICAvLyAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgLy8gICAg ICAgICAgPC9kaXY+CiAgICAgICAgLy8gICAgICA8L2Rpdj4KICAgICAgICAvLyAg ICAgIDxkaXYgaWQ9ImltYWdlRGF0YUNvbnRhaW5lciI+CiAgICAgICAgLy8gICAg ICAgICAgPGRpdiBpZD0iaW1hZ2VEYXRhIj4KICAgICAgICAvLyAgICAgICAgICAg ICAgPGRpdiBpZD0iaW1hZ2VEZXRhaWxzIj4KICAgICAgICAvLyAgICAgICAgICAg ICAgICAgIDxzcGFuIGlkPSJjYXB0aW9uIj48L3NwYW4+CiAgICAgICAgLy8gICAg ICAgICAgICAgICAgICA8c3BhbiBpZD0ibnVtYmVyRGlzcGxheSI+PC9zcGFuPgog ICAgICAgIC8vICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAvLyAgICAgICAg ICAgICAgPGRpdiBpZD0iYm90dG9tTmF2Ij4KICAgICAgICAvLyAgICAgICAgICAg ICAgICAgIDxhIGhyZWY9IiMiIGlkPSJib3R0b21OYXZDbG9zZSI+CiAgICAgICAg Ly8gICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9jbG9zZS5naWYi PgogICAgICAgIC8vICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgIC8vICAg ICAgICAgICAgICA8L2Rpdj4KICAgICAgICAvLyAgICAgICAgICA8L2Rpdj4KICAg ICAgICAvLyAgICAgIDwvZGl2PgogICAgICAgIC8vICA8L2Rpdj4KCgogICAgICAg IHZhciBvYmpCb2R5ID0gJCQoJ2JvZHknKVswXTsKCgkJb2JqQm9keS5hcHBlbmRD aGlsZChCdWlsZGVyLm5vZGUoJ2Rpdicse2lkOidvdmVybGF5J30pKTsKCQogICAg ICAgIG9iakJvZHkuYXBwZW5kQ2hpbGQoQnVpbGRlci5ub2RlKCdkaXYnLHtpZDon bGlnaHRib3gnfSwgWwogICAgICAgICAgICBCdWlsZGVyLm5vZGUoJ2Rpdicse2lk OidvdXRlckltYWdlQ29udGFpbmVyJ30sIAogICAgICAgICAgICAgICAgQnVpbGRl ci5ub2RlKCdkaXYnLHtpZDonaW1hZ2VDb250YWluZXInfSwgWwogICAgICAgICAg ICAgICAgICAgIEJ1aWxkZXIubm9kZSgnaW1nJyx7aWQ6J2xpZ2h0Ym94SW1hZ2Un fSksIAogICAgICAgICAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnZGl2Jyx7aWQ6 J2hvdmVyTmF2J30sIFsKICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGRlci5u b2RlKCdhJyx7aWQ6J3ByZXZMaW5rJywgaHJlZjogJyMnIH0pLAogICAgICAgICAg ICAgICAgICAgICAgICBCdWlsZGVyLm5vZGUoJ2EnLHtpZDonbmV4dExpbmsnLCBo cmVmOiAnIycgfSkKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAg ICAgICAgICBCdWlsZGVyLm5vZGUoJ2Rpdicse2lkOidsb2FkaW5nJ30sIAogICAg ICAgICAgICAgICAgICAgICAgICBCdWlsZGVyLm5vZGUoJ2EnLHtpZDonbG9hZGlu Z0xpbmsnLCBocmVmOiAnIycgfSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBCdWlsZGVyLm5vZGUoJ2ltZycsIHtzcmM6IExpZ2h0Ym94T3B0aW9ucy5maWxl TG9hZGluZ0ltYWdlfSkKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAg ICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICks CiAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnZGl2Jywge2lkOidpbWFnZURhdGFD b250YWluZXInfSwKICAgICAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnZGl2Jyx7 aWQ6J2ltYWdlRGF0YSd9LCBbCiAgICAgICAgICAgICAgICAgICAgQnVpbGRlci5u b2RlKCdkaXYnLHtpZDonaW1hZ2VEZXRhaWxzJ30sIFsKICAgICAgICAgICAgICAg ICAgICAgICAgQnVpbGRlci5ub2RlKCdzcGFuJyx7aWQ6J2NhcHRpb24nfSksCiAg ICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnc3Bhbicse2lkOidu dW1iZXJEaXNwbGF5J30pCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAg ICAgICAgICAgICAgQnVpbGRlci5ub2RlKCdkaXYnLHtpZDonYm90dG9tTmF2J30s CiAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnYScse2lkOidi b3R0b21OYXZDbG9zZScsIGhyZWY6ICcjJyB9LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgQnVpbGRlci5ub2RlKCdpbWcnLCB7IHNyYzogTGlnaHRib3hPcHRp b25zLmZpbGVCb3R0b21OYXZDbG9zZUltYWdlIH0pCiAgICAgICAgICAgICAgICAg ICAgICAgICkKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBd KQogICAgICAgICAgICApCiAgICAgICAgXSkpOwoKCgkJJCgnb3ZlcmxheScpLmhp ZGUoKS5vYnNlcnZlKCdjbGljaycsIChmdW5jdGlvbigpIHsgdGhpcy5lbmQoKTsg fSkuYmluZCh0aGlzKSk7CgkJJCgnbGlnaHRib3gnKS5oaWRlKCkub2JzZXJ2ZSgn Y2xpY2snLCAoZnVuY3Rpb24oZXZlbnQpIHsgaWYgKGV2ZW50LmVsZW1lbnQoKS5p ZCA9PSAnbGlnaHRib3gnKSB0aGlzLmVuZCgpOyB9KS5iaW5kKHRoaXMpKTsKCQkk KCdvdXRlckltYWdlQ29udGFpbmVyJykuc2V0U3R5bGUoeyB3aWR0aDogc2l6ZSwg aGVpZ2h0OiBzaXplIH0pOwoJCSQoJ3ByZXZMaW5rJykub2JzZXJ2ZSgnY2xpY2sn LCAoZnVuY3Rpb24oZXZlbnQpIHsgZXZlbnQuc3RvcCgpOyB0aGlzLmNoYW5nZUlt YWdlKHRoaXMuYWN0aXZlSW1hZ2UgLSAxKTsgfSkuYmluZEFzRXZlbnRMaXN0ZW5l cih0aGlzKSk7CgkJJCgnbmV4dExpbmsnKS5vYnNlcnZlKCdjbGljaycsIChmdW5j dGlvbihldmVudCkgeyBldmVudC5zdG9wKCk7IHRoaXMuY2hhbmdlSW1hZ2UodGhp cy5hY3RpdmVJbWFnZSArIDEpOyB9KS5iaW5kQXNFdmVudExpc3RlbmVyKHRoaXMp KTsKCQkkKCdsb2FkaW5nTGluaycpLm9ic2VydmUoJ2NsaWNrJywgKGZ1bmN0aW9u KGV2ZW50KSB7IGV2ZW50LnN0b3AoKTsgdGhpcy5lbmQoKTsgfSkuYmluZCh0aGlz KSk7CgkJJCgnYm90dG9tTmF2Q2xvc2UnKS5vYnNlcnZlKCdjbGljaycsIChmdW5j dGlvbihldmVudCkgeyBldmVudC5zdG9wKCk7IHRoaXMuZW5kKCk7IH0pLmJpbmQo dGhpcykpOwoKICAgICAgICB2YXIgdGggPSB0aGlzOwogICAgICAgIChmdW5jdGlv bigpewogICAgICAgICAgICB2YXIgaWRzID0gCiAgICAgICAgICAgICAgICAnb3Zl cmxheSBsaWdodGJveCBvdXRlckltYWdlQ29udGFpbmVyIGltYWdlQ29udGFpbmVy IGxpZ2h0Ym94SW1hZ2UgaG92ZXJOYXYgcHJldkxpbmsgbmV4dExpbmsgbG9hZGlu ZyBsb2FkaW5nTGluayAnICsgCiAgICAgICAgICAgICAgICAnaW1hZ2VEYXRhQ29u dGFpbmVyIGltYWdlRGF0YSBpbWFnZURldGFpbHMgY2FwdGlvbiBudW1iZXJEaXNw bGF5IGJvdHRvbU5hdiBib3R0b21OYXZDbG9zZSc7ICAgCiAgICAgICAgICAgICR3 KGlkcykuZWFjaChmdW5jdGlvbihpZCl7IHRoW2lkXSA9ICQoaWQpOyB9KTsKICAg ICAgICB9KS5kZWZlcigpOwogICAgfSwKCiAgICAvLwogICAgLy8gdXBkYXRlSW1h Z2VMaXN0KCkKICAgIC8vIExvb3BzIHRocm91Z2ggYW5jaG9yIHRhZ3MgbG9va2lu ZyBmb3IgJ2xpZ2h0Ym94JyByZWZlcmVuY2VzIGFuZCBhcHBsaWVzIG9uY2xpY2sK ICAgIC8vIGV2ZW50cyB0byBhcHByb3ByaWF0ZSBsaW5rcy4gWW91IGNhbiByZXJ1 biBhZnRlciBkeW5hbWljYWxseSBhZGRpbmcgaW1hZ2VzIHcvYWpheC4KICAgIC8v CiAgICB1cGRhdGVJbWFnZUxpc3Q6IGZ1bmN0aW9uKCkgeyAgIAogICAgICAgIHRo aXMudXBkYXRlSW1hZ2VMaXN0ID0gUHJvdG90eXBlLmVtcHR5RnVuY3Rpb247Cgog ICAgICAgIGRvY3VtZW50Lm9ic2VydmUoJ2NsaWNrJywgKGZ1bmN0aW9uKGV2ZW50 KXsKICAgICAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LmZpbmRFbGVtZW50KCdh W3JlbF49bGlnaHRib3hdJykgfHwgZXZlbnQuZmluZEVsZW1lbnQoJ2FyZWFbcmVs Xj1saWdodGJveF0nKTsKICAgICAgICAgICAgaWYgKHRhcmdldCkgewogICAgICAg ICAgICAgICAgZXZlbnQuc3RvcCgpOwogICAgICAgICAgICAgICAgdGhpcy5zdGFy dCh0YXJnZXQpOwogICAgICAgICAgICB9CiAgICAgICAgfSkuYmluZCh0aGlzKSk7 CiAgICB9LAogICAgCiAgICAvLwogICAgLy8gIHN0YXJ0KCkKICAgIC8vICBEaXNw bGF5IG92ZXJsYXkgYW5kIGxpZ2h0Ym94LiBJZiBpbWFnZSBpcyBwYXJ0IG9mIGEg c2V0LCBhZGQgc2libGluZ3MgdG8gaW1hZ2VBcnJheS4KICAgIC8vCiAgICBzdGFy dDogZnVuY3Rpb24oaW1hZ2VMaW5rKSB7ICAgIAoKICAgICAgICAkJCgnc2VsZWN0 JywgJ29iamVjdCcsICdlbWJlZCcpLmVhY2goZnVuY3Rpb24obm9kZSl7IG5vZGUu c3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nIH0pOwoKICAgICAgICAvLyBzdHJl dGNoIG92ZXJsYXkgdG8gZmlsbCBwYWdlIGFuZCBmYWRlIGluCiAgICAgICAgdmFy IGFycmF5UGFnZVNpemUgPSB0aGlzLmdldFBhZ2VTaXplKCk7CiAgICAgICAgJCgn b3ZlcmxheScpLnNldFN0eWxlKHsgd2lkdGg6IGFycmF5UGFnZVNpemVbMF0gKyAn cHgnLCBoZWlnaHQ6IGFycmF5UGFnZVNpemVbMV0gKyAncHgnIH0pOwoKICAgICAg ICBuZXcgRWZmZWN0LkFwcGVhcih0aGlzLm92ZXJsYXksIHsgZHVyYXRpb246IHRo aXMub3ZlcmxheUR1cmF0aW9uLCBmcm9tOiAwLjAsIHRvOiBMaWdodGJveE9wdGlv bnMub3ZlcmxheU9wYWNpdHkgfSk7CgogICAgICAgIHRoaXMuaW1hZ2VBcnJheSA9 IFtdOwogICAgICAgIHZhciBpbWFnZU51bSA9IDA7ICAgICAgIAoKICAgICAgICBp ZiAoKGltYWdlTGluay5yZWwgPT0gJ2xpZ2h0Ym94JykpewogICAgICAgICAgICAv LyBpZiBpbWFnZSBpcyBOT1QgcGFydCBvZiBhIHNldCwgYWRkIHNpbmdsZSBpbWFn ZSB0byBpbWFnZUFycmF5CiAgICAgICAgICAgIHRoaXMuaW1hZ2VBcnJheS5wdXNo KFtpbWFnZUxpbmsuaHJlZiwgaW1hZ2VMaW5rLnRpdGxlXSk7ICAgICAgICAgCiAg ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gaWYgaW1hZ2UgaXMgcGFydCBv ZiBhIHNldC4uCiAgICAgICAgICAgIHRoaXMuaW1hZ2VBcnJheSA9IAogICAgICAg ICAgICAgICAgJCQoaW1hZ2VMaW5rLnRhZ05hbWUgKyAnW2hyZWZdW3JlbD0iJyAr IGltYWdlTGluay5yZWwgKyAnIl0nKS4KICAgICAgICAgICAgICAgIGNvbGxlY3Qo ZnVuY3Rpb24oYW5jaG9yKXsgcmV0dXJuIFthbmNob3IuaHJlZiwgYW5jaG9yLnRp dGxlXTsgfSkuCiAgICAgICAgICAgICAgICB1bmlxKCk7CiAgICAgICAgICAgIAog ICAgICAgICAgICB3aGlsZSAodGhpcy5pbWFnZUFycmF5W2ltYWdlTnVtXVswXSAh PSBpbWFnZUxpbmsuaHJlZikgeyBpbWFnZU51bSsrOyB9CiAgICAgICAgfQoKICAg ICAgICAvLyBjYWxjdWxhdGUgdG9wIGFuZCBsZWZ0IG9mZnNldCBmb3IgdGhlIGxp Z2h0Ym94IAogICAgICAgIHZhciBhcnJheVBhZ2VTY3JvbGwgPSBkb2N1bWVudC52 aWV3cG9ydC5nZXRTY3JvbGxPZmZzZXRzKCk7CiAgICAgICAgdmFyIGxpZ2h0Ym94 VG9wID0gYXJyYXlQYWdlU2Nyb2xsWzFdICsgKGRvY3VtZW50LnZpZXdwb3J0Lmdl dEhlaWdodCgpIC8gMTApOwogICAgICAgIHZhciBsaWdodGJveExlZnQgPSBhcnJh eVBhZ2VTY3JvbGxbMF07CiAgICAgICAgdGhpcy5saWdodGJveC5zZXRTdHlsZSh7 IHRvcDogbGlnaHRib3hUb3AgKyAncHgnLCBsZWZ0OiBsaWdodGJveExlZnQgKyAn cHgnIH0pLnNob3coKTsKICAgICAgICAKICAgICAgICB0aGlzLmNoYW5nZUltYWdl KGltYWdlTnVtKTsKICAgIH0sCgogICAgLy8KICAgIC8vICBjaGFuZ2VJbWFnZSgp CiAgICAvLyAgSGlkZSBtb3N0IGVsZW1lbnRzIGFuZCBwcmVsb2FkIGltYWdlIGlu IHByZXBhcmF0aW9uIGZvciByZXNpemluZyBpbWFnZSBjb250YWluZXIuCiAgICAv LwogICAgY2hhbmdlSW1hZ2U6IGZ1bmN0aW9uKGltYWdlTnVtKSB7ICAgCiAgICAg ICAgCiAgICAgICAgdGhpcy5hY3RpdmVJbWFnZSA9IGltYWdlTnVtOyAvLyB1cGRh dGUgZ2xvYmFsIHZhcgoKICAgICAgICAvLyBoaWRlIGVsZW1lbnRzIGR1cmluZyB0 cmFuc2l0aW9uCiAgICAgICAgaWYgKExpZ2h0Ym94T3B0aW9ucy5hbmltYXRlKSB0 aGlzLmxvYWRpbmcuc2hvdygpOwogICAgICAgIHRoaXMubGlnaHRib3hJbWFnZS5o aWRlKCk7CiAgICAgICAgdGhpcy5ob3Zlck5hdi5oaWRlKCk7CiAgICAgICAgdGhp cy5wcmV2TGluay5oaWRlKCk7CiAgICAgICAgdGhpcy5uZXh0TGluay5oaWRlKCk7 CgkJLy8gSEFDSzogT3BlcmE5IGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IHNj cmlwdGFjdWxvdXMgb3BhY2l0eSBhbmQgYXBwZWFyIGZ4CiAgICAgICAgdGhpcy5p bWFnZURhdGFDb250YWluZXIuc2V0U3R5bGUoe29wYWNpdHk6IC4wMDAxfSk7CiAg ICAgICAgdGhpcy5udW1iZXJEaXNwbGF5LmhpZGUoKTsgICAgICAKICAgICAgICAK ICAgICAgICB2YXIgaW1nUHJlbG9hZGVyID0gbmV3IEltYWdlKCk7CiAgICAgICAg CiAgICAgICAgLy8gb25jZSBpbWFnZSBpcyBwcmVsb2FkZWQsIHJlc2l6ZSBpbWFn ZSBjb250YWluZXIKCgogICAgICAgIGltZ1ByZWxvYWRlci5vbmxvYWQgPSAoZnVu Y3Rpb24oKXsKICAgICAgICAgICAgdGhpcy5saWdodGJveEltYWdlLnNyYyA9IHRo aXMuaW1hZ2VBcnJheVt0aGlzLmFjdGl2ZUltYWdlXVswXTsKICAgICAgICAgICAg dGhpcy5yZXNpemVJbWFnZUNvbnRhaW5lcihpbWdQcmVsb2FkZXIud2lkdGgsIGlt Z1ByZWxvYWRlci5oZWlnaHQpOwogICAgICAgIH0pLmJpbmQodGhpcyk7CiAgICAg ICAgaW1nUHJlbG9hZGVyLnNyYyA9IHRoaXMuaW1hZ2VBcnJheVt0aGlzLmFjdGl2 ZUltYWdlXVswXTsKICAgIH0sCgogICAgLy8KICAgIC8vICByZXNpemVJbWFnZUNv bnRhaW5lcigpCiAgICAvLwogICAgcmVzaXplSW1hZ2VDb250YWluZXI6IGZ1bmN0 aW9uKGltZ1dpZHRoLCBpbWdIZWlnaHQpIHsKCiAgICAgICAgLy8gZ2V0IGN1cnJl bnQgd2lkdGggYW5kIGhlaWdodAogICAgICAgIHZhciB3aWR0aEN1cnJlbnQgID0g dGhpcy5vdXRlckltYWdlQ29udGFpbmVyLmdldFdpZHRoKCk7CiAgICAgICAgdmFy IGhlaWdodEN1cnJlbnQgPSB0aGlzLm91dGVySW1hZ2VDb250YWluZXIuZ2V0SGVp Z2h0KCk7CgogICAgICAgIC8vIGdldCBuZXcgd2lkdGggYW5kIGhlaWdodAogICAg ICAgIHZhciB3aWR0aE5ldyAgPSAoaW1nV2lkdGggICsgTGlnaHRib3hPcHRpb25z LmJvcmRlclNpemUgKiAyKTsKICAgICAgICB2YXIgaGVpZ2h0TmV3ID0gKGltZ0hl aWdodCArIExpZ2h0Ym94T3B0aW9ucy5ib3JkZXJTaXplICogMik7CgogICAgICAg IC8vIHNjYWxhcnMgYmFzZWQgb24gY2hhbmdlIGZyb20gb2xkIHRvIG5ldwogICAg ICAgIHZhciB4U2NhbGUgPSAod2lkdGhOZXcgIC8gd2lkdGhDdXJyZW50KSAgKiAx MDA7CiAgICAgICAgdmFyIHlTY2FsZSA9IChoZWlnaHROZXcgLyBoZWlnaHRDdXJy ZW50KSAqIDEwMDsKCiAgICAgICAgLy8gY2FsY3VsYXRlIHNpemUgZGlmZmVyZW5j ZSBiZXR3ZWVuIG5ldyBhbmQgb2xkIGltYWdlLCBhbmQgcmVzaXplIGlmIG5lY2Vz c2FyeQogICAgICAgIHZhciB3RGlmZiA9IHdpZHRoQ3VycmVudCAtIHdpZHRoTmV3 OwogICAgICAgIHZhciBoRGlmZiA9IGhlaWdodEN1cnJlbnQgLSBoZWlnaHROZXc7 CgogICAgICAgIGlmIChoRGlmZiAhPSAwKSBuZXcgRWZmZWN0LlNjYWxlKHRoaXMu b3V0ZXJJbWFnZUNvbnRhaW5lciwgeVNjYWxlLCB7c2NhbGVYOiBmYWxzZSwgZHVy YXRpb246IHRoaXMucmVzaXplRHVyYXRpb24sIHF1ZXVlOiAnZnJvbnQnfSk7IAog ICAgICAgIGlmICh3RGlmZiAhPSAwKSBuZXcgRWZmZWN0LlNjYWxlKHRoaXMub3V0 ZXJJbWFnZUNvbnRhaW5lciwgeFNjYWxlLCB7c2NhbGVZOiBmYWxzZSwgZHVyYXRp b246IHRoaXMucmVzaXplRHVyYXRpb24sIGRlbGF5OiB0aGlzLnJlc2l6ZUR1cmF0 aW9ufSk7IAoKICAgICAgICAvLyBpZiBuZXcgYW5kIG9sZCBpbWFnZSBhcmUgc2Ft ZSBzaXplIGFuZCBubyBzY2FsaW5nIHRyYW5zaXRpb24gaXMgbmVjZXNzYXJ5LCAK ICAgICAgICAvLyBkbyBhIHF1aWNrIHBhdXNlIHRvIHByZXZlbnQgaW1hZ2UgZmxp Y2tlci4KICAgICAgICB2YXIgdGltZW91dCA9IDA7CiAgICAgICAgaWYgKChoRGlm ZiA9PSAwKSAmJiAod0RpZmYgPT0gMCkpewogICAgICAgICAgICB0aW1lb3V0ID0g MTAwOwogICAgICAgICAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUpIHRpbWVv dXQgPSAyNTA7ICAgCiAgICAgICAgfQoKICAgICAgICAoZnVuY3Rpb24oKXsKICAg ICAgICAgICAgdGhpcy5wcmV2TGluay5zZXRTdHlsZSh7IGhlaWdodDogaW1nSGVp Z2h0ICsgJ3B4JyB9KTsKICAgICAgICAgICAgdGhpcy5uZXh0TGluay5zZXRTdHls ZSh7IGhlaWdodDogaW1nSGVpZ2h0ICsgJ3B4JyB9KTsKICAgICAgICAgICAgdGhp cy5pbWFnZURhdGFDb250YWluZXIuc2V0U3R5bGUoeyB3aWR0aDogd2lkdGhOZXcg KyAncHgnIH0pOwoKICAgICAgICAgICAgdGhpcy5zaG93SW1hZ2UoKTsKICAgICAg ICB9KS5iaW5kKHRoaXMpLmRlbGF5KHRpbWVvdXQgLyAxMDAwKTsKICAgIH0sCiAg ICAKICAgIC8vCiAgICAvLyAgc2hvd0ltYWdlKCkKICAgIC8vICBEaXNwbGF5IGlt YWdlIGFuZCBiZWdpbiBwcmVsb2FkaW5nIG5laWdoYm9ycy4KICAgIC8vCiAgICBz aG93SW1hZ2U6IGZ1bmN0aW9uKCl7CiAgICAgICAgdGhpcy5sb2FkaW5nLmhpZGUo KTsKICAgICAgICBuZXcgRWZmZWN0LkFwcGVhcih0aGlzLmxpZ2h0Ym94SW1hZ2Us IHsgCiAgICAgICAgICAgIGR1cmF0aW9uOiB0aGlzLnJlc2l6ZUR1cmF0aW9uLCAK ICAgICAgICAgICAgcXVldWU6ICdlbmQnLCAKICAgICAgICAgICAgYWZ0ZXJGaW5p c2g6IChmdW5jdGlvbigpeyB0aGlzLnVwZGF0ZURldGFpbHMoKTsgfSkuYmluZCh0 aGlzKSAKICAgICAgICB9KTsKICAgICAgICB0aGlzLnByZWxvYWROZWlnaGJvcklt YWdlcygpOwogICAgfSwKCiAgICAvLwogICAgLy8gIHVwZGF0ZURldGFpbHMoKQog ICAgLy8gIERpc3BsYXkgY2FwdGlvbiwgaW1hZ2UgbnVtYmVyLCBhbmQgYm90dG9t IG5hdi4KICAgIC8vCiAgICB1cGRhdGVEZXRhaWxzOiBmdW5jdGlvbigpIHsKICAg IAogICAgICAgIC8vIGlmIGNhcHRpb24gaXMgbm90IG51bGwKICAgICAgICBpZiAo dGhpcy5pbWFnZUFycmF5W3RoaXMuYWN0aXZlSW1hZ2VdWzFdICE9ICIiKXsKICAg ICAgICAgICAgdGhpcy5jYXB0aW9uLnVwZGF0ZSh0aGlzLmltYWdlQXJyYXlbdGhp cy5hY3RpdmVJbWFnZV1bMV0pLnNob3coKTsKICAgICAgICB9CiAgICAgICAgCiAg ICAgICAgLy8gaWYgaW1hZ2UgaXMgcGFydCBvZiBzZXQgZGlzcGxheSAnSW1hZ2Ug eCBvZiB4JyAKICAgICAgICBpZiAodGhpcy5pbWFnZUFycmF5Lmxlbmd0aCA+IDEp ewogICAgICAgICAgICB0aGlzLm51bWJlckRpc3BsYXkudXBkYXRlKCBMaWdodGJv eE9wdGlvbnMubGFiZWxJbWFnZSArICcgJyArICh0aGlzLmFjdGl2ZUltYWdlICsg MSkgKyAnICcgKyBMaWdodGJveE9wdGlvbnMubGFiZWxPZiArICcgICcgKyB0aGlz LmltYWdlQXJyYXkubGVuZ3RoKS5zaG93KCk7CiAgICAgICAgfQoKICAgICAgICBu ZXcgRWZmZWN0LlBhcmFsbGVsKAogICAgICAgICAgICBbIAogICAgICAgICAgICAg ICAgbmV3IEVmZmVjdC5TbGlkZURvd24odGhpcy5pbWFnZURhdGFDb250YWluZXIs IHsgc3luYzogdHJ1ZSwgZHVyYXRpb246IHRoaXMucmVzaXplRHVyYXRpb24sIGZy b206IDAuMCwgdG86IDEuMCB9KSwgCiAgICAgICAgICAgICAgICBuZXcgRWZmZWN0 LkFwcGVhcih0aGlzLmltYWdlRGF0YUNvbnRhaW5lciwgeyBzeW5jOiB0cnVlLCBk dXJhdGlvbjogdGhpcy5yZXNpemVEdXJhdGlvbiB9KSAKICAgICAgICAgICAgXSwg CiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5y ZXNpemVEdXJhdGlvbiwgCiAgICAgICAgICAgICAgICBhZnRlckZpbmlzaDogKGZ1 bmN0aW9uKCkgewoJICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBvdmVybGF5IHNp emUgYW5kIHVwZGF0ZSBuYXYKCSAgICAgICAgICAgICAgICB2YXIgYXJyYXlQYWdl U2l6ZSA9IHRoaXMuZ2V0UGFnZVNpemUoKTsKCSAgICAgICAgICAgICAgICB0aGlz Lm92ZXJsYXkuc2V0U3R5bGUoeyBoZWlnaHQ6IGFycmF5UGFnZVNpemVbMV0gKyAn cHgnIH0pOwoJICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTmF2KCk7CiAgICAg ICAgICAgICAgICB9KS5iaW5kKHRoaXMpCiAgICAgICAgICAgIH0gCiAgICAgICAg KTsKICAgIH0sCgogICAgLy8KICAgIC8vICB1cGRhdGVOYXYoKQogICAgLy8gIERp c3BsYXkgYXBwcm9wcmlhdGUgcHJldmlvdXMgYW5kIG5leHQgaG92ZXIgbmF2aWdh dGlvbi4KICAgIC8vCiAgICB1cGRhdGVOYXY6IGZ1bmN0aW9uKCkgewoKICAgICAg ICB0aGlzLmhvdmVyTmF2LnNob3coKTsgICAgICAgICAgICAgICAKCiAgICAgICAg Ly8gaWYgbm90IGZpcnN0IGltYWdlIGluIHNldCwgZGlzcGxheSBwcmV2IGltYWdl IGJ1dHRvbgogICAgICAgIGlmICh0aGlzLmFjdGl2ZUltYWdlID4gMCkgdGhpcy5w cmV2TGluay5zaG93KCk7CgogICAgICAgIC8vIGlmIG5vdCBsYXN0IGltYWdlIGlu IHNldCwgZGlzcGxheSBuZXh0IGltYWdlIGJ1dHRvbgogICAgICAgIGlmICh0aGlz LmFjdGl2ZUltYWdlIDwgKHRoaXMuaW1hZ2VBcnJheS5sZW5ndGggLSAxKSkgdGhp cy5uZXh0TGluay5zaG93KCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5lbmFibGVL ZXlib2FyZE5hdigpOwogICAgfSwKCiAgICAvLwogICAgLy8gIGVuYWJsZUtleWJv YXJkTmF2KCkKICAgIC8vCiAgICBlbmFibGVLZXlib2FyZE5hdjogZnVuY3Rpb24o KSB7CiAgICAgICAgZG9jdW1lbnQub2JzZXJ2ZSgna2V5ZG93bicsIHRoaXMua2V5 Ym9hcmRBY3Rpb24pOyAKICAgIH0sCgogICAgLy8KICAgIC8vICBkaXNhYmxlS2V5 Ym9hcmROYXYoKQogICAgLy8KICAgIGRpc2FibGVLZXlib2FyZE5hdjogZnVuY3Rp b24oKSB7CiAgICAgICAgZG9jdW1lbnQuc3RvcE9ic2VydmluZygna2V5ZG93bics IHRoaXMua2V5Ym9hcmRBY3Rpb24pOyAKICAgIH0sCgogICAgLy8KICAgIC8vICBr ZXlib2FyZEFjdGlvbigpCiAgICAvLwogICAga2V5Ym9hcmRBY3Rpb246IGZ1bmN0 aW9uKGV2ZW50KSB7CiAgICAgICAgdmFyIGtleWNvZGUgPSBldmVudC5rZXlDb2Rl OwoKICAgICAgICB2YXIgZXNjYXBlS2V5OwogICAgICAgIGlmIChldmVudC5ET01f VktfRVNDQVBFKSB7ICAvLyBtb3ppbGxhCiAgICAgICAgICAgIGVzY2FwZUtleSA9 IGV2ZW50LkRPTV9WS19FU0NBUEU7CiAgICAgICAgfSBlbHNlIHsgLy8gaWUKICAg ICAgICAgICAgZXNjYXBlS2V5ID0gMjc7CiAgICAgICAgfQoKICAgICAgICB2YXIg a2V5ID0gU3RyaW5nLmZyb21DaGFyQ29kZShrZXljb2RlKS50b0xvd2VyQ2FzZSgp OwogICAgICAgIAogICAgICAgIGlmIChrZXkubWF0Y2goL3h8b3xjLykgfHwgKGtl eWNvZGUgPT0gZXNjYXBlS2V5KSl7IC8vIGNsb3NlIGxpZ2h0Ym94CiAgICAgICAg ICAgIHRoaXMuZW5kKCk7CiAgICAgICAgfSBlbHNlIGlmICgoa2V5ID09ICdwJykg fHwgKGtleWNvZGUgPT0gMzcpKXsgLy8gZGlzcGxheSBwcmV2aW91cyBpbWFnZQog ICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVJbWFnZSAhPSAwKXsKICAgICAgICAg ICAgICAgIHRoaXMuZGlzYWJsZUtleWJvYXJkTmF2KCk7CiAgICAgICAgICAgICAg ICB0aGlzLmNoYW5nZUltYWdlKHRoaXMuYWN0aXZlSW1hZ2UgLSAxKTsKICAgICAg ICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoKGtleSA9PSAnbicpIHx8IChrZXlj b2RlID09IDM5KSl7IC8vIGRpc3BsYXkgbmV4dCBpbWFnZQogICAgICAgICAgICBp ZiAodGhpcy5hY3RpdmVJbWFnZSAhPSAodGhpcy5pbWFnZUFycmF5Lmxlbmd0aCAt IDEpKXsKICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUtleWJvYXJkTmF2KCk7 CiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUltYWdlKHRoaXMuYWN0aXZlSW1h Z2UgKyAxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCgogICAgLy8K ICAgIC8vICBwcmVsb2FkTmVpZ2hib3JJbWFnZXMoKQogICAgLy8gIFByZWxvYWQg cHJldmlvdXMgYW5kIG5leHQgaW1hZ2VzLgogICAgLy8KICAgIHByZWxvYWROZWln aGJvckltYWdlczogZnVuY3Rpb24oKXsKICAgICAgICB2YXIgcHJlbG9hZE5leHRJ bWFnZSwgcHJlbG9hZFByZXZJbWFnZTsKICAgICAgICBpZiAodGhpcy5pbWFnZUFy cmF5Lmxlbmd0aCA+IHRoaXMuYWN0aXZlSW1hZ2UgKyAxKXsKICAgICAgICAgICAg cHJlbG9hZE5leHRJbWFnZSA9IG5ldyBJbWFnZSgpOwogICAgICAgICAgICBwcmVs b2FkTmV4dEltYWdlLnNyYyA9IHRoaXMuaW1hZ2VBcnJheVt0aGlzLmFjdGl2ZUlt YWdlICsgMV1bMF07CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmFjdGl2ZUlt YWdlID4gMCl7CiAgICAgICAgICAgIHByZWxvYWRQcmV2SW1hZ2UgPSBuZXcgSW1h Z2UoKTsKICAgICAgICAgICAgcHJlbG9hZFByZXZJbWFnZS5zcmMgPSB0aGlzLmlt YWdlQXJyYXlbdGhpcy5hY3RpdmVJbWFnZSAtIDFdWzBdOwogICAgICAgIH0KICAg IAogICAgfSwKCiAgICAvLwogICAgLy8gIGVuZCgpCiAgICAvLwogICAgZW5kOiBm dW5jdGlvbigpIHsKICAgICAgICB0aGlzLmRpc2FibGVLZXlib2FyZE5hdigpOwog ICAgICAgIHRoaXMubGlnaHRib3guaGlkZSgpOwogICAgICAgIG5ldyBFZmZlY3Qu RmFkZSh0aGlzLm92ZXJsYXksIHsgZHVyYXRpb246IHRoaXMub3ZlcmxheUR1cmF0 aW9uIH0pOwogICAgICAgICQkKCdzZWxlY3QnLCAnb2JqZWN0JywgJ2VtYmVkJyku ZWFjaChmdW5jdGlvbihub2RlKXsgbm9kZS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zp c2libGUnIH0pOwogICAgfSwKCiAgICAvLwogICAgLy8gIGdldFBhZ2VTaXplKCkK ICAgIC8vCiAgICBnZXRQYWdlU2l6ZTogZnVuY3Rpb24oKSB7CgkgICAgICAgIAoJ ICAgICB2YXIgeFNjcm9sbCwgeVNjcm9sbDsKCQkKCQlpZiAod2luZG93LmlubmVy SGVpZ2h0ICYmIHdpbmRvdy5zY3JvbGxNYXhZKSB7CQoJCQl4U2Nyb2xsID0gd2lu ZG93LmlubmVyV2lkdGggKyB3aW5kb3cuc2Nyb2xsTWF4WDsKCQkJeVNjcm9sbCA9 IHdpbmRvdy5pbm5lckhlaWdodCArIHdpbmRvdy5zY3JvbGxNYXhZOwoJCX0gZWxz ZSBpZiAoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5ib2R5 Lm9mZnNldEhlaWdodCl7IC8vIGFsbCBidXQgRXhwbG9yZXIgTWFjCgkJCXhTY3Jv bGwgPSBkb2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoOwoJCQl5U2Nyb2xsID0gZG9j dW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7CgkJfSBlbHNlIHsgLy8gRXhwbG9yZXIg TWFjLi4ud291bGQgYWxzbyB3b3JrIGluIEV4cGxvcmVyIDYgU3RyaWN0LCBNb3pp bGxhIGFuZCBTYWZhcmkKCQkJeFNjcm9sbCA9IGRvY3VtZW50LmJvZHkub2Zmc2V0 V2lkdGg7CgkJCXlTY3JvbGwgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDsK CQl9CgkJCgkJdmFyIHdpbmRvd1dpZHRoLCB3aW5kb3dIZWlnaHQ7CgkJCgkJaWYg KHNlbGYuaW5uZXJIZWlnaHQpIHsJLy8gYWxsIGV4Y2VwdCBFeHBsb3JlcgoJCQlp Zihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpewoJCQkJd2lu ZG93V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7 IAoJCQl9IGVsc2UgewoJCQkJd2luZG93V2lkdGggPSBzZWxmLmlubmVyV2lkdGg7 CgkJCX0KCQkJd2luZG93SGVpZ2h0ID0gc2VsZi5pbm5lckhlaWdodDsKCQl9IGVs c2UgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7IC8vIEV4cGxvcmVyIDYgU3RyaWN0 IE1vZGUKCQkJd2luZG93V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu Y2xpZW50V2lkdGg7CgkJCXdpbmRvd0hlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50 RWxlbWVudC5jbGllbnRIZWlnaHQ7CgkJfSBlbHNlIGlmIChkb2N1bWVudC5ib2R5 KSB7IC8vIG90aGVyIEV4cGxvcmVycwoJCQl3aW5kb3dXaWR0aCA9IGRvY3VtZW50 LmJvZHkuY2xpZW50V2lkdGg7CgkJCXdpbmRvd0hlaWdodCA9IGRvY3VtZW50LmJv ZHkuY2xpZW50SGVpZ2h0OwoJCX0JCgkJCgkJLy8gZm9yIHNtYWxsIHBhZ2VzIHdp dGggdG90YWwgaGVpZ2h0IGxlc3MgdGhlbiBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0 CgkJaWYoeVNjcm9sbCA8IHdpbmRvd0hlaWdodCl7CgkJCXBhZ2VIZWlnaHQgPSB3 aW5kb3dIZWlnaHQ7CgkJfSBlbHNlIHsgCgkJCXBhZ2VIZWlnaHQgPSB5U2Nyb2xs OwoJCX0KCQoJCS8vIGZvciBzbWFsbCBwYWdlcyB3aXRoIHRvdGFsIHdpZHRoIGxl c3MgdGhlbiB3aWR0aCBvZiB0aGUgdmlld3BvcnQKCQlpZih4U2Nyb2xsIDwgd2lu ZG93V2lkdGgpewkKCQkJcGFnZVdpZHRoID0geFNjcm9sbDsJCQoJCX0gZWxzZSB7 CgkJCXBhZ2VXaWR0aCA9IHdpbmRvd1dpZHRoOwoJCX0KCgkJcmV0dXJuIFtwYWdl V2lkdGgscGFnZUhlaWdodF07Cgl9Cn0KCmRvY3VtZW50Lm9ic2VydmUoJ2RvbTps b2FkZWQnLCBmdW5jdGlvbiAoKSB7IG5ldyBMaWdodGJveCgpOyB9KTsK ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline; filename=script.js Content-Type: application/x-javascript; charset=utf-8; name=script.js Content-Location: http://www.gchd.cz/common/script.js Content-Transfer-Encoding: Base64 ZnVuY3Rpb24gZXhwYW5zZShpZCkgewoJLyoKCW5ldyBFZmZlY3QuTW9ycGgoaWQs IHsKCQkJc3R5bGU6CSdoZWlnaHQ6MzUwcHgnLAoJCQlkdXJhdGlvbjoJMC41fQoJ CQkpOwoJKi8KCW9iamVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsK CW9iamVjdC5zdHlsZS5oZWlnaHQ9J2F1dG8nOwoJCn0KCmZ1bmN0aW9uIGNvbGxh cHNlKGlkKSB7CgkvKgoJbmV3IEVmZmVjdC5Nb3JwaChpZCwgewoJCQlzdHlsZToJ J2hlaWdodDoyOXB4JywKCQkJZHVyYXRpb246CTAuNX0KCQkJKTsKCSovCglvYmpl Y3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CglvYmplY3Quc3R5bGUu aGVpZ2h0PScyOHB4JzsKfQoKZnVuY3Rpb24gaGxhc3VqKGlkKSB7Cgl2YXIgdXJs ID0gIi9jb21tb24vdm90ZS5waHA/dm9sYmE9IitpZDsKCiAgICAgaWYgKHVybCAh PSAwKQogICAgIHsKICAgICAgICBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpCiAg ICAgICAgewogICAgICAgICAgaHR0cFJlcXVlc3QgPSBuZXcgQWN0aXZlWE9iamVj dCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKICAgICAgICB9CiAgICAgICAgZWxzZQog ICAgICAgIHsKICAgICAgICAgIGh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1 ZXN0KCk7CiAgICAgICAgfQogICAgICAgIGh0dHBSZXF1ZXN0Lm9wZW4oIkdFVCIs IHVybCwgdHJ1ZSk7CiAgICAgICAgaHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hh bmdlPSBmdW5jdGlvbiAoKSB7cHJvY2Vzc1JlcXVlc3QoKTsgfSA7CiAgICAgICAg aHR0cFJlcXVlc3Quc2VuZChudWxsKTsKICAgICAgfQp9CgpmdW5jdGlvbiBwcm9j ZXNzUmVxdWVzdCgpCnsKICBpZiAoaHR0cFJlcXVlc3QucmVhZHlTdGF0ZSA9PSA0 KQogIHsKICAgIGlmKGh0dHBSZXF1ZXN0LnN0YXR1cyA9PSAyMDApCiAgICB7CiAg ICAgIHZhciBpbnF1aXJ5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlucXVp cnkiKTsKICAgICAgaW5xdWlyeS5pbm5lckhUTUwgPSBodHRwUmVxdWVzdC5yZXNw b25zZVRleHQ7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgYWxlcnQoIkNo eWJhIHByaSBuYWNpdGFuaSBzdGFua3kiKyBodHRwUmVxdWVzdC5zdGF0dXMgKyI6 IisgaHR0cFJlcXVlc3Quc3RhdHVzVGV4dCk7CiAgICB9CiAgfQp9CgpmdW5jdGlv biBjaGFuZ2VfcGFnZShwYWdlKSB7Cgl2YXIgcGFnZXMgPSBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgicGFnZXMiKTsKCQoJcGFnZXMuZWxlbWVudHNbJ3BhZ2UnXS52 YWx1ZSA9IHBhZ2U7CglwYWdlcy5zdWJtaXQoKTsKfQoKZnVuY3Rpb24gc2hvd19w bGFucygpIHsKCS8vIG1heSBiZSB1c2VkIHNjcmlwdC5hY3Vsby51cwoJJCgibmV3 cyIpLmhpZGUoKTsKCSQoInBsYW5zX2J1dHRvbiIpLnN0eWxlLmJhY2tncm91bmQ9 InVybCguLi9pbWcvbmV3cy1idXR0b24tYWN0aXZlLmpwZykgbGVmdCB0b3Agbm8t cmVwZWF0IjsKCSQoInBsYW5zX2J1dHRvbiIpLnN0eWxlLmNvbG9yPSIjZmZmZmZm IjsKCSQoIm5ld3NfYnV0dG9uIikuc3R5bGUuYmFja2dyb3VuZD0idXJsKC4uL2lt Zy9uZXdzLWJ1dHRvbi1wYXNzaXZlLmpwZykgbGVmdCB0b3Agbm8tcmVwZWF0IjsK CSQoIm5ld3NfYnV0dG9uIikuc3R5bGUuY29sb3I9IiMyMTM5OTEiOwoJJCgicGxh bnMiKS5zdHlsZS5kaXNwbGF5PSJibG9jayI7Cgl9CgpmdW5jdGlvbiBzaG93X25l d3MoKSB7CgkvLyBtYXkgYmUgdXNlZCBzY3JpcHQuYWN1bG8udXMKCSQoInBsYW5z IikuaGlkZSgpOwoJJCgibmV3c19idXR0b24iKS5zdHlsZS5iYWNrZ3JvdW5kPSJ1 cmwoLi4vaW1nL25ld3MtYnV0dG9uLWFjdGl2ZS5qcGcpIGxlZnQgdG9wIG5vLXJl cGVhdCI7CgkkKCJuZXdzX2J1dHRvbiIpLnN0eWxlLmNvbG9yPSIjZmZmZmZmIjsK CSQoInBsYW5zX2J1dHRvbiIpLnN0eWxlLmJhY2tncm91bmQ9InVybCguLi9pbWcv cGxhbnMtYnV0dG9uLXBhc3NpdmUuZ2lmKSBsZWZ0IHRvcCBuby1yZXBlYXQiOwoJ JCgicGxhbnNfYnV0dG9uIikuc3R5bGUuY29sb3I9IiMyMTM5OTEiOwoJJCgibmV3 cyIpLnNob3coKTsKCX0K ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline; filename=header-left.jpg Content-Type: image/jpeg; name=header-left.jpg Content-Location: http://www.gchd.cz/img/header-left.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAT Q3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQH/wAARCAAZAAoDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAA AAAACQAIC//EACYQAAEDBAAEBwAAAAAAAAAAAAQFBgcAAgMIAQkUFiE5UXGRuNH/ xAAXAQADAQAAAAAAAAAAAAAAAAAGBwgJ/8QAIREAAwEAAgIBBQAAAAAAAAAAAQID BAURBhITAAciMaH/2gAMAwEAAhEDEQA/ADF3m3UlbeyfXZNEkqahiSylE4WOWFcq Gmt+NGTwzW2JTaQRSM14uAi8UcYtyqQY4ncLhvOWMw+DqMIw+Oaqq0mxYsvG5M2D DCebHkikM8JL6pKU1CqoH7J6HbMSWdiWYliSZF0aL67106ava96NStXPbO7Hskn+ ADoKAAAAAPpQnzo3dso1FbZvlwsV3SRE9vQ5Jb1lTFLvuf8AU19rakIBhYVyBjut fE4RG4iTClaGJcaCAtLKgykV0ASumN10xw71dQLzx9OHzx/KXjkPea3qr7zh9cJf row0hOd+53L+C8rfx+uefPwhKVMmvVd821IuaKI6rKmgbHmEAXQUlV1ANvlr71c5 weM5eaxR3rU4qUZxWc5ikmYBD7TUtP4gez2nbAE/j6jpR//Z ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline; filename=header-right.jpg Content-Type: image/jpeg; name=header-right.jpg Content-Location: http://www.gchd.cz/img/header-right.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAT Q3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQH/wAARCAAZAAoDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAA AAAAAAkKB//EACMQAAICAgICAgMBAAAAAAAAAAUGAwQBAgcIAAkSFAo1dbT/xAAW AQEBAQAAAAAAAAAAAAAAAAAIBwn/xAAiEQACAgICAgIDAAAAAAAAAAABAgMEBRIG EQAhEyIHFEH/2gAMAwEAAhEDEQA/AERKDi3cfModzQmpkSHBet4vgGtQOE1plB3s RyRYuBzoa1SKDLeIpZYsWKVqCbEckmnz+O+2M1Nce/lCOC6go6+99bSz+8Ak9aDO T5ry6rrOrs1jAtKkwt2q2N4PlHL+GQvBcM4CUJZKQrF36FWTeCvHtmULw80L5DxD jnKRWGexkV5qhc13Ms9eWMSdboJq0sMrRsQpMbO0ewDa7e/Ctis9lsIZTjLj1hOF +VdIpUcoe1b4545EDj2N1UNqSpOp68ZB0m9XHaXusRX2JdTinHPX6wVqRtXYt4Gb DkUWB+8wDipBFpEbgclzCcpFVYsr6L3HuScFB0lCgng6ijyuT9OqYF6evVyGCBhF zqwbbbYoUOG2mtm595rosjNZo1Ias7CwUlJyBqlM4ali2JFqqwEDr1e/ZsRBRY8b pWqQuD5y/aJf85t/1KnmLeF/L/kDkfJJVtPesYyGMusFTGWrFVEUsCTNLFIj2JDq Ps+qKB9I0JctUsZxPE14D8kX7LuVJeVVPR1UnUewoPZP9PZ9k9Dz/9k= ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline; filename=logo-title.jpg Content-Type: image/jpeg; name=logo-title.jpg Content-Location: http://www.gchd.cz/img/logo-title.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAT Q3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQH/wAARCABkAQUDASIAAhEBAxEB/8QAHgAAAgICAwEBAAAAAAAA AAAAAAYBCAUHAgQJAwr/xABBEAAABQIEBAUBBgUDAwMFAAABAgMEBQYRByExQQAU UWEIEhNxgZEiUqGxwfAVFjLR4UJi8QkXIxgkJSZDcrLC/8QAHQEAAQUBAQEBAAAA AAAAAAAAAAECAwQFBgcICf/EADoRAAIBAgQEBAUCBQMEAwAAAAECAwQRABIhMQUT QVEGImFxFIGRofAjwTJCsdHhB2LxFSRSsjNTgv/aAAwDAQACEQMRAD8A8AfIbpv7 X1C/fT8uDyH+6OQ2HLf9/HGeFoA5W2D2vlvv+evXKeUHLIMr79b/AN/bsF+P0zyH uMfHmf27D7a6le5/4GMABDDttf8Aetvng8h9yiH9r/u/T8eM9yt9g0Ef02ANOmt+ J5XawaX2+mlv17cGRvTBmNr29+nb3/4ItscYACGEdB99t+l9wt78T5DbBcem/f8A eWfbPjPcoA6h16B+uds7CNtA63EFqHQAz23EQy2ta/45iF+DIdPv6bevv9N+mEz3 2H2Jttv6b6/bvgfTP0EB6WG/0t7DnlmA8R5DfdH92/uHGf5UM8uu2vzt8fGfE8oH 3dh+v5D79b5ZcGQ/ny/z9PXC5xfrb+noB/c9/TGA9M/3R4PTN06fj+/na/Ge5QBz APbYLb9QEdNeuWl+DlAAbWEO+Vw75jqIhbIcs9B4OWe4/Nvzp64A/f09NyPU7b/s LYwPpn+6PB6Zunv29+M/ymv2QuAdrW99MunURC3BynULb2tvfTPTS2txsNwDcyHu Pv8A2wZ9ddu++thf+1+umMB5DWvbr7b2uPcct/wtxHkN0/eo/TfhhFoHTO9huF76 5aZfhncchG4YNabptBwLJWehU3hTeQWhpNkDvzhcPTBr64ricTAIAmVLzmN9kCiY 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 A/twcHBwAAgXA2HT0wY//9k= ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline; filename=logo-school.jpg Content-Type: image/jpeg; name=logo-school.jpg Content-Location: http://www.gchd.cz/img/logo-school.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCABkAVgDASIA AhEBAxEB/8QAHwAAAQUAAwEBAQAAAAAAAAAABgAFBwgJAQMEAgoL/8QAQRAAAAYC AQIFAgQEAwYEBwAAAQIDBAUGBxEhCDEAEhMUQVFhFRZxgQkikaEXIzIkQmKx0fAl JjRSM0RUZKLB8f/EAB0BAAEEAwEBAAAAAAAAAAAAAAUAAwQGAQIHCAn/xAA7EQAC AgEDAwIEBAQEBgIDAAABAgMEEQUSIQATMQZBFCJRYQcycYEVI0KRobHB4RYkM1Ji 0SVTcpPw/9oADAMBAAIRAxEAPwDAr2pu/Ovrx/3/AH8cC1N9+e3IfTfyHwHPz/Tn wTe0+Nca477/AHH9NcCAjv5Hfi0vTPjDFmTpCRplip2acsZmuk/U6ZgzEmGLJW6O 4mpqZVkjz1iuVwtuOskRzWCg27aNRaxEdCoOXh30jLTE/W4WBWdvvpZblSnXksyL I6RBd4QICoLBWkZ5XiijiiBMk0kskccUSvJI6qpPXkCBHsSJCrKruSF3bsEgZVQq K8ju5G1I40d5HYIqksMU0BsIjz+v6fTvr9O++/bxyLYQ+vb4AB5/6b43x2+/jbvK 3Qz0nmxj1GKdPU1li55I6bi4Ip1zv8/mnErjp5XzDk2wWM17gIWxyWJMYpuaDQoC iWeGjsjTdxrzC1297FhHxiccaHLas6HHSpm9hM26FlqjGQH5G/Kf5lsFmvePKxQ2 g32FTstDBjkqw2uNx7OjeauqFppYQNnkvzXWEnVjr4SEI0cvkRmn67pmoJM4mNRo XjV4NQaGrOElgpWIpjE0pYQyx6hT2MxUh50iZVkIUzLemXarovbM4kVir1Q88W5J LEUke8R4MiNVnyBkbY2kBZcnqrXth+o7512/bf0+/he2Hkedf3/p3/fnj45Dxc6s dD3UlblshpRlGgWgYnn6ZW8hurRlPElHjqu/yKsihQXb2Uut7r8atXLodw2NVrex duqnOouWzqOmnDZZJVQdj+knOkqRp7GpRKzqWPZfytEKZCxu3sV/Tqb6Ui5p/jCs urcjYMpxQS0JMxMVL46jLPFWKVipCMrzyUfMnDdOZ/EtKJcDVKGY9ncHxlbMfdhW xHvHdyvcrsJ03Y3wssq5Qhix8Hfwh+CtjfuxmvNhtknZfadgzslBibHCyAqcNkCq ftjfUeO/x+v/AED68fPA8e2H6D/3sfpz8/vx38Wuo3SNnzJTjDTSj0VGwPOoIcgp 4gYtbfRUH1xXxcmspdGaTJ7ZmzqGkGAoKox0fY0Yh9Z3opsqs2mnq6LdUYjenfKs pUWN4bV6ORgpWpWm+QiUncKVCWOx0mkOJ1pa7VVqXM2NhcrRX4N1VrU3fS1egZNi VWq2ghFjmrc17Hf43TwzKdQphlbYy/Ewblfu2oNrDuZDd+jdi2kA92naj/PXlCaC vbwD8NYIZdwPYkAK7IJcg7cFe3ZgfI42WIXztljJrx7Y3z8D8c/HcOP++338L2xv vr6fcPuACA/2HkOOfGgkh0ox0707dMV5x1F2lzlTMk3nFe6fmq6UuHxjX6BjaxUm nVe4nnZ6Jp8Xj+MnLZOWauyMneLu6hyyUCxQbyCDmVTZk9+G+hm8XCXfQ9yrj15K 2trdafgiCpWXenOLNlrK0NIPKuxkYGyXXJTaOtGGK5Zmcg4tGR8bR15r80SAkK5C 2CKOs+tdbhtrelxwzTy3IYBBNarvHPLDFNvp2Z6sxCNKMRd2tMwkYqgijaZ2WNWZ ZK6ddaaOJIJJO7HBKrxRyPHtsRQzxguI+XKTIpRQzGRhGqlyobPErX+UDfPfnkO4 h2EPp9v21z45BoIhoADjjnj4+P7a/ft5vBMVmIB5SkER3oAJowiO9aDygHmER127 6HW/MAjerI/SZT8a9IVUyvLTlneZ/sXUW+xHKUlqMWSn1KKhMZxl0sNXkWoxi09J ZOhXlyx8WxehNMoypupyRo8rCLWuIk1o+bat1qclSGdn7t6cV66IpdmfYZHdgB8k MaqTJK3yLlQTvdFMaGCawk7xqNlaITSszBQE3KoUZA3O5PyoOSNxA2qSM8Pab5AP 68f/AI654+OOfnYc8C1EOwf238fH9tDvnv8APGt/Uv0hYqxRjjK8zR8HZ8VkMZWp pTpXI8z1ddNV/i6s5G3p19pY8pdOVDwvG5nxlE3dNu6aVZheLJW/w2amoVmvOWBd L2EvlsDUQER8uxHjt3D998j8DxrXbw1pd+tq1drNYOI1l7XMtSU7u3FKN3wliysb FJUJimaOdcgvEqshbe5VmoyiGfBcoHGI54wRvZOO/DCXAZGAeNXjJHyuxBwNez44 Adj9R2HfXHO/j7cDvsPPHtO+w/TQ88cdwD5D6aH5HevBL7QeNc638chvtz24/bf3 +V7Tj/TsQAP5RDvvQCA9+NfXe9a2Ia8Eu14znnx4HsPr/wD3t56iBjkAnjP/AKz7 gAcef/fQz7QfoPf9OO3yH153vYfoAh459oI7HWufgB5Dv2419OAAP08EotNdg38d tb38D/z4518dw8ce0HewLvXAD2+2uNc8B8fI+F2v19h/ljz9c+M8fbpbz9eOMZ55 OOP9M+T/AGIGvaD8gP8AcB/68DxrX6gIc+PU2KsgoUxDGKO+dfPzodfQQHXcf9Ib EPD57Ud8F0G9Brv2Hgee4Dz/AN8orTkA130Gg12HXGtDsNfGudAAfXxgxAjByQf7 44A/b2HHOce3WQ545Pt4HORj/AnPjn9uOpRxy/cfiCHnenREDlL5vUMAgXzgA9hA dhvkO+hAOwBrXXBki4QbICSbOICCeiFdCAgY2vg3A65578iIjwHjHGqR/quk/KYC mEwd+PkeNb3vntsNiABrzcDfDGLKXZEbKpO1gIAEECkVMIDoCjoC9zAICACO964A o6APFN9Sack8ZG7YfugOcY9yMjxxx5+/R/SbTxuvykg48HH/AG8n3OP7cH9t68PB JS6zQCyjnfqJEEAciBhKJuw6MAcd9CO9AOtgIeXQeEZTcaimcjldcpdiIqmMOw7G AfgBAN6ANcd+BHxj30z3F43dM0jqqnMBkQEVdeX/AFaAfMYwCYocCHm/0iAjsRMY R16grZ7iMRUXLyICURKGgAAH/UOhEN652IGHQ8cCO/PHqKjYhtbFRWTkYCjJ4HOP 0889dU0uzG8AZiUbj3OOMZ+v+n7e81wcy4P6ZFyG82wKcQ3r4AB15vL9x77HjfPB a7mUW4cm3yPICHGg3se2g1vv/T58Q2ztDBHyiJw4AuxAe3YNm2IB5fgdb3sN65Hx WXql6io/GOM71ZW0y2bvK/ULJNMfMgLwSyEVEv37Qx0iHO4coCqkiVdm2Ajh0BAS bqpep6ZqxDo1iedR2yiE8uQxVFyMu21Wbaq/M2AeAcDOOikmqwwRnEobHAGRuYgD CrkjBJ4GTj6nB4u66s4AUxkx82g1rv2789thwIhsNeYNhyHgJlL+ZmBjHNoCgYdb 58pSCcREA58oFDzGMGwKUdiIAIbpNi3qyqd6otbtb520i3UvXoaYfRqa5VRaOHse 2fGYAuqRIRRbGXVbKCLVBdwQqQGMiQgpGi/IHUUScbyy9WXj46vxTgzOauc29Vi6 tAPnSaSZW5pZAi72RmlkHjcW1Nq7GwXCVTVauIGtuzoqHMeGiwaZDNa1ZIqdSuyr NasyKkCsSFAEmdsjOQQiRF2lOBGGJA6BT6y1l0hqTF5JPyRqDuPAJJBwUC8ly20I MliACerU33qYjau1WUM7J5wKYyYCb/UYfMQhAMGwMYxyHTKAdziIG8gFHVE8n5yy HdUCGTTdtY95Ix8cixS9VzMrBLpsXDCQNBNAWmG0E4aSsc6LPOmiMKZouq+K/MzZ SSzJux9izLnUE7PJY4gJFlXFzKt3HUDlxqi1rbZ6VUzWUDHWOjsp1hLhHrFkWTBO XaX2yt7XDRk6ozoMQk5Yyd76fQemvp5vCUHabo7sGW3MOexS615RG3Webk5B1CpQ E6rAPFZtg3vdgWgotass5abd3+0lkHk/CRrV3ZEQJQtb9caTVZotCrRsADsvTxsj ynI+eGtIqSxRHA7ck+yVyzEwxgKXJUtJ1C0u+/ZKr8uId4CAHaMNIpYSHnkR7l8b XYE4yRyrjHIzKrtZMfwyMGcT9OFcyr0ijkXK8ShLNJBStortZR3FumUnESMSv7uN aWZmpJliZUhopysWHa/dMuY8ORZL8RaoEdOU0lfUcHZrJpOFkUk01VG7YwOipoeo 9S8hyN1lDtklHHtlF1dteutaLXxdU38ShNMyWi81uVBGxQkgwn3aRKdc3yp5dnY4 yJnq/YknFqeuJ5G3xP423JLtJP10lEVmjXIBsjPtpx85BUhoRy6bQ7WKBmLxkk3k ARM8mlZRu1XF87Wff+HvI1U4pOkTMlSpeZuCj2u6X6q1cbrS2nbuSOWik5QkYGWU 855PHA8ZBwMY1PTq0UqxKgykabZFyp+Ybvl8HAI+gPPkcgzpQOuO0NHycLIKEevy FOUGyB1TSDgiSihjPUY05iv1W5kiFIZz7EjZIjhr6wJKOUDq3DpHWpCy5SJrPyJq 8BycE0xECGE3/wAQxA8xvL/IUxAOfYgGjABTZlz8FVl0AQnIVm1F0+btDGbAVVBm 7dOzPRegKQJslRTW8iJnKrIicK6TaonRZuEnaYD58YJtnyYQFpXOZkoDj8vyjk4J ptV1HIgiDlJRyLNu6X9YiLRm9h0fdNlztUmqyjoy1mqevlV1j1XR69qIAb5KjLHZ QDClu3K/blJbDMA0RAZ2XIQK4l6Fnk1rskL5G1ZiShHsNwXcD7A4YYxkjJ63Yjuo Rm8BIU3qQgqkRZMRUIUDonL5yqFERApthwAB5dn2TQG2BScuYBVKGlg2JSmKHmD+ bzABiiAhwOymAe/Ye3HGBZLzlLHJirPyP0Y/1iJJKouUJaOMb3LonmO5UdtvZt/Z kZLAizkLVIHUF+oCJGxW4eJLr/WI1TQFa0ov2ESQAMNqRFV3VSIgT0yOXU/HncxM CdVZdZolH2dSFlXLlBVA0ccEkt9G0W/6D9QypFSv169pth+D1JRp9gvKOIo++exY lBBDLVnnAOMEgqSFu2fUdJC8kUksSkjvVj34+NoLEx5ZFOQR3ET7gHI62iPl1ZMB /wAwOONeYO/wGv1/b7+GpxmhYmw9Xn4DfwOgDYiP/wDe2hEA3n/W83V2zNWjlnLt HJHCKagqJuk1SHKoT1EzoLJkSTWIImACGBJIFUzFUAQ8oEObpTqb8CmSXKbYBwQ/ mDRt9hAS/Ia5KH6c68dAj9F6YpBeBRwD485xg/QjGPHnPkjnqrTesNTXgTNnOBye Pyg/Xq1i2bHoGHyrGAAAd/zD3Dv8hx3/AKcB4+Azg9KIAY5uAAR/m3x8bEB1/bsA j25GtKDZw5Eok8w77iH+nv8APHb/AIddwEew+CVjXXCpgEwG5DRhHYCbex/m/Xjs OhDfPfxmX0xoUS/PDGOBnAGfK59v7Zzz9OtYvUmuTEbJZCCRzzx+X9CRn6+w88YE 6pZok1lCgUxxKIgGtm+v/Pf1+mt/Q1jsnP1fIJhH/dHkfr3Hvz38QnHV1FEAMcC+ b77HsHyOuA3vfP7iI68EpfbNSgAiUAL9Pt37fryOv10Piv39K0bYywVl4ByQB9vp 7nGP9OrDS1HVtyGe0QGI4JxjJHn7+3uf746trUrKtKgUTiI77gIjv9eR/wDcA/sG td/C8AuM5FqqJSkEBN/KHlD+4a55+OADe99h4XjkOoBI7UqRpsUMQF8Y5A8fv9s/ pz11KhuarEzvvZgCSCD5Axgkjjn+/wB+v583tPt8ffYfoIh+n667fTRTpyzx084L wDd4aGmMz0nqhy4tI0y45nr2LKTdmeOMIPEzt5an4bPJZvoMqwt+QUvIleLq+axz 5rXxWqFbTZkcv7C+of7QQ+NDzxxwOue47D/vjXi4XTnhnENxw71UZZy5HZJkW+Da djmSqDHH14q9MLOXHIeSoejR1emVbFjPIZl2xox9NWUq0eEc4SQq7xn6bo0gRyw9 zeoK9WSgouG0YPjtPXtVewWszz3IK1OCVLAMEsElyeAyRTYiYIBLviDo/nXS5p1t HsCAS/D2j3Ju4FhijgeaeVGiIkjlWvHKEdPnXP8ALw+1lkmw5i6MCdPifTDjt/1L 1WkyOZK1k/IeQX+PMdy1tyenUseJwsIWSpqGcWUDWFm9qumS0oyFY2eZhoKuQVDl HalotkxYnUS35r6q8SdSlSjKJd4jIWIanQsoHnsfxWPoCtZDNJYwjMKYSwNQafb3 E7ccblStOPqVgyMCPtbNvKsJeQvVvXGuQhUyJyjzf/4fN+k69ju+4Vq79hW7JivH t4yLWMxZbw7W7Hh2ayXkW+UKgx9qn7S9xS0Ug8lMahE3amzTyrwSJYq3x8Y9UXVa klJGBaj0YdQl5f1eMrtQrysleLHL1aisZXKeJa06vchAyzqAmH1FQs16h1LpV42a j5COc3esElaYm5jpJP8AHhCPeegApw+l2AvfxpRap2LUkti5qVJbVO7MgF151YmE yT1qqbDMk1dKcMU2nduvskJSeXWx/wAt/DiYbEUCrFXpWDBYrRtmusRXEm2OWZsi NkkaeR47W+UsgPs19XNcyxifNtUi6jMU6y5dzX0/zKEegoykK5BYH6Y8JWjD+JqI 7sPu2UpNWZk2nYtzNPPyvHRsk6gk5hNVos6CKbPUb1U4uict4b6mG0XfV8r4PxDi KmUTFqtfriWK4rIWFsXwmOKfck7uS5LWFStGsEC2zDL1AuOW7yUtD+WqylmSaPFL WLDVeluHunSDF5lhAesMly3Us7w6yd3DJuNqNil3WITHTK2zqovL0hVW8fakZW1U 1qzM6yA6au478acEhy+io4j4fQ6Xs1Hn8o1p7UG1ef4Wn16nlF7c7bSaPWKXa0ZS Rhkq1KXG42ODqA2GQkIaYRhYRnOOZKeTipN3Ctn7Ng7cIyIaPpsxWqqzpVSs9mhZ imuRxs1doqGlTQkyyO/wzx1qFNJwyWVdFijnSR2DsyWtYDwztC0zTLDaheOB2AlV 7N2OQbEVe6rS2bDR4aEqxdo2VVKzBEdSGMa3SOkmcgEsjtsxdJ1TtrasVsYGuN8f v8pSuaMiZVq+V1r6ndVrGqjADaKgV7RTY1QLLLUNtGGuCEfKqumTrG9UGL4jApsM vGN1ylUgwzN1muYyzDjvFNkb4jzRZmLo0tkXDOe2L1jk6kVNjdn7/JcZj+NrDSNl HDxxTratYCvJC6O6pZOxJecOXN/QMiwqMDbYuPrcq/i0ZqCn00GFurMPcYBYJOuS UxEKne16fin6jdF+o4YKOTR8ikzkWztmhf8AlekbGURhiRsTXCGeLhd4TBFYynYJ 6M6senKA/CFbTjWAuby7KdL77DUxnxxiilydhI3m5htMiwk4WHeSxLlBNHhXkdre qaFXWlNI7WU1C2btSZLlBYz37MltJa9mzPXjCixqkr1pqcp1DbbkFeZomYDNaxqc zWERFhapAK88bw2iw7UMcDJLFDFK2TFSjWaOwgqZgUyoHAz5IXrYxC8w1U+la213 ITLp/V6Qgw1dZCtV+pvbvG56JnKW6iI3LMFDPrjDR1wr1du7sK8xhJq21F46qs/c Fkzw76VO2X4pPVf02wuYsQZgsTTNTp9jPpoZ9OcJBxFKo6UbQZOEwlY8RxGZa4Ln KJBuEm7mZH/FR/jh+SjNmlztM8onkSRLCNHFhzO9p8aDt+nwAbHke/Ih9+efifem HBA9Q+a6tiYkitHqWCPuMo3bsDRv49ZHNPpdhuLWjVIku5ZRa12vzmASpdNRfOSM 1LNOxfuSrIgoid656a0WlU1O1LJarVZINStakyTcOLcLNqdpsxyMJ7ESRiV0wWSt GigIZUlbr6zqNielFGkM06y1IKgMfKiGRRThGGVTHE7OUVuA0rMTkRmOO8aXqKxB lmFyJX6lX8kxtRmpF/Xq9lBrYmEXKgDZ+0g5WdbY8u1YsMZMxKzhnY438uXhueJs kcwUJJSLRsoR5e7JnVx0t3TDHS/itj0uwbNhjvKtnybmeJhHubqsmqe42yiOLjF4 ouNk6rcuyjp1fKFQIaq2GeyRXJV/DOy/ilDTqaouDOwGc6WW8zIwuIarhvP2JOqS zZPrFQp+IM72KsRrW616cibko/eRc9Z8dYVbRFjjrLGVCvsIqSWWSsKtnRTh1HL8 6bFCN3nRrnePiUbC/h6Ayry1zk8dLWR3nPBDatRV8hkWbp/UJ+wK5IJD1qwkaPkX iEVPvox2+ZJP3jBNy2i5JZqrC+n9SsUrVvUWp26u2SBDrAptOjV7kEM6rVudi1E0 dq72rNcsGkWaIyfyZYkULarUhsQV6q2IJsiVhQNgRMJa0jxEzQd2F1aGvvhl5CtG +3+YkjN45MxfjbHmbadiB1kK1zWfYmHpFps+Qq1BUtCs42hchVfKK8JDwsJfMjq2 Cx2S20alKPbPIzUOnCw0NKxjeGl17MeThaog1Dvr54+ogHI7HtveueO4jrjYXjS6 TLZBUDJClzx5k9zlqMztGdMtHqdTeUF4xYZlZuTyNrr1uhW8zNZDsL80FHyETWmF QqzaAdTTpCTdX45WbesWA56ZOix/fM44pqGZoOdXxbkN1l1ipY8OZGxtPviP8K4+ XyNeoprOQSOToNrPQMGeHdPq7KMGsmqxsES9RFJu7bKrS01HRtOq6jbW8k/bM1uz J36zz3fhNOilkkrRpJGkohoVlQLCkakVpH2k75XZapqNuapCaxi39qCFe1MsVfv2 2jRZmZWZC9mVmJkZ2BmRcgbUGcfsw7iTj54+P6676D9/nWvCFr8+Xet8jz+gfPz/ AM+31sjK9NOYYxtjt6jVGtla5Ys8xSsfGx9baZk09iucANcGXqCSWO7DZ1mFpYp2 6sLqV2VSj5dRrPRjtFmo1dpLG73fTHl9q6qzVKDrsyFwvbDGMK+q2ScZ2+EJf5U6 RYuqTs/VrhMQVTmJIpzKsG9rkYUHrZpJO251GsVJqtCov6cQpGo0drdzYRagO8wO 8cwX+Zg9qSKVJcE9topFbayMBB+HuZI+EsZXZuHZlyO4qNHkbeO4siMmfzK6Fchg TWcWgFDWgEONcca7dth9x7fPwHPjgWgd/L8B3DkO2t/30G+PnxYa1dO2W6TT7Jfr JUwZVCoZhl8BWWbb2Csy6ETlmEjXky+qa6MPMyDs/njY6Qdxk83bq1mcTjZIsJMy B2DxNGHfZjsQ121sB/oGuP33zodCPcNSIJYLKmSvYhsRq2xngkjlUMArFSyMyhgr BipOcMpIww6akWaFgssckTEBgsiNGxXONwDAEqSrAEDGc4PHQ37TW/5QHnW9B9vu Hxsfr8ffxyVoIiAATkBAR4D/AHdCIfffbeg7jyA6DwRizEfjW/kQ7fO+waARAOdd x7/TtSbaMAAHHmAf5ueP1EOwc8a1vkQDv4d2H2x/j9v9/wC+cDx1oHz58HB/y+/j z9fI/Tr31RqUj1HzF/3ymER0Gx3vWwHn9udD37eNIcQNYldm3BUoicCF4MBhATCA fy7EN7Ad8BwUvAfXxRqotmyjlIFEBMImDsPIc6HWwEOd/wCkR55EeefGi2H2EYHt BFEwAPl2IhsRAA0HHyHJi8j28vyHiqeolPZbduBHjb5zgeBxn6D9c/fo3pbkSDlT nGCQcDwM+/jnwR4zz1f/AAmxjiv2pE2ZgMdREoGBMQAAAAHQAAByUeR3oNBvzCIC A6Ss3kVERZFlViJFST85vMYe4AXfBgENgAf6v1Ed734zNZ5Hg8cwEtZHLdUyVbi0 Zl6Vu3K9eKIhIx0S0QZRnvGjp66kpiWioYh2vr/hZ5MkxIoDDR8ksi93/MsvaIKx sn0hIY5Qi/yv6cmtHkXau2VhUiX4OGcgmSRakcTFXerSVHMqxdNrl7aSNUiWyaiG 9QsXnz1Neo6a/wAXqFuOtEoBMbur2ZNzbUWGuDvlZyjAAcIFMkrJGVc9K02OWzEY YVMkmQC+CkSHg/zJSAqgZB5OWztQOwK9WDyT1ANEXylaq67FeXVbqqJFUdJoh6ZH LFidYdAoqZu1cSbI0i5TRUbQ8eqtNTCzCEYyMi0obZMqsapZWbrM1UiMlLHeza40 KRml2cXJRBJNt7CQfpRkTcFn0OSvN/x2Mfrt4OjXWNe2UsFP5JaN4hOKPa1U7hlA zebrLJpjSpoR34fY8rzVfXYTUinW2thyIVWEoqxSv0XCba3SEtB25zASViVgGkZd Mf03E85AzEbIyXBQWGkcDZ7teK03bs1YKnXbvkCzPJ/87zF4tMTOYnvsYo+lqvEe VCQJeYqTmXaF2ubexR86nCvq3TLQhd4hrxH1H+INzVBJQ0lZtM0xgYn7TImoXo3P bJs2AV+Gif5lNWJgp3lZmmCq3Vhp6FHVD2pZEs2oY3nSSRN0EBiKt3IIXLCQKwG2 eVSWxuRELEGgPTO/qt/lWuNsW47YzFwm5hvEvYVWPNTcVVxYoLIllHb2JlI+ZOzl QdOX7qJiGuOpNQ8VAyxrVIMU7DQltrsa9LOAse3CIL1E5NrOSMqQ8dBO46tzTVOC xtR2dumlmcElUMaR7GMbkj7BZXz8sWrPV6tQE67eKpvqAdwePfq5sdA1ikMdXN2p W7Wzq83li2TGPqsiGN1LtPzVhOgksaTi5Z+wcwdWj681MK8hJT8ig3Vk3MCctUyo m2VqTLWB1Hyo/wARSchKVCps6bBVej3nI9nSaVlN7YrvavxJxGJSFjeNpC7uwXZU Bm4f1anoY+qTVjGJPrChcEiwMdU6jrmoXbUsVaa3asR0oC8SzSmSKrGfndKsb/yq yoT/ADDEiGRs7mdMgktBrVzBHaWtDG88qqdiYZyCQhmYEmZzsbmQsOM7QcdGv+MO UD9Q83h9vM0Sj+wdU9lAVSNiEskXmuUZvYGMSa22F1CN1qVRYu+tJYzGuNbM8qCN ceV9jVafUb+/CTtExDuX6lKznWhb6NTCv6tUY7pyuWb7+9qDCmJzlytC8kyRPCXS 825lP2VljSSeJIzE3SccJw8pareZq5kZRJjLz8rHMEhm3G+JuqXqyvt6lZpBk0sW I6gckY9bRlZcOaHGS0jIxzudnpytYtaTbGTkY5OOj7/aol0C6MgnVklJBOQbFjIb R1P9RWV7Vlvp6oFhpVdyLjxjjdO0XRBpTqHI0VuDmWcqR05cKSbKl7TlFF/SnInD +Ja0/glEWgVbNa6ZjSx64rxxvDKwEqS1XlK7lcrJKpESuSdoIJBb6eAM4HRgyB8K W3MJWVlAywVACFCqP+75eAce/AJ6sB/EsXIRtUmKbgoGfWB3JCxWB23UdsmEA3ZN HB4xqVNOej0nDl60jJFmrpNwi9hpUhCRjFuhlMofyMGC6wJFVJM14piKIB6xCFsU UKZSFBP26CRREgmRL/mgPkKYxgTEPBz1V9MD3Gxqjbb9kyxZNynkV5aZR7LR1bhQ hDNo1GtJCu1e2x9d8mZKXj1JNNk3uuXMlyc80imrGEbNWCKa6S1R26OQW4g3i5t1 PN0VW75Yjx/HlflWYOW67VIxZaRs8BHN0126Rzt2yTIhSpCkBfTMYCz9PsxwV1Do 7li77oiGGWYKy/MVJAKHnHG3HOc9AtTBktuZc1wUiKq4LMBtwAduTnHJJx48DnE5 ydel3MjJSURYH7P0ze+XjVlvXi1TADgirYjRdN2Q7Z0smu4eJGBsVdd2JiimVuh5 GyvRqsxE2aIlgaLiBINVsZoRZptk6fTrtJiosVwV0gmqgijGPvbOPUJHHOkkqqPp kIGRmQMhMDOUpilvHSTlMxSPYlBKRYmTKJhOo4kIV3YVBUMq4OAenFx7cgkBNJuY gG9L2VPIMEgtMJOTvCru21dbJJmjHSyqi0Yk+RfG9mgVSVTICqgLA5ex7BBZM3qF U83qEJKW1VZncuY2IxhzjORjjIGCOM84BI56gNHKSodRtBAyCp4OMnhifGD9upM1 GxLNZi5ARjm6jFsRqm1kJ45m50WTZq1cszoLmcNWR1kEV5d6gVJMU1ZWRetyguqi GIQWPLfLODxoexn2qApEdwjxWJmSsBEinpxx/WIdw0TVMALJwMmkZquUFHZUHHlU M7nsUbIvHqrVyzdt0mYrOVGr2PfPDpNkCnOmsRk9V9mih6Km0lgFw2dtimUBNYRb EgfpweXIl7vtZv0nJzjuptqwWFGxMWIS8YpIRB3Mygo7MRWXM5RO7RZSLaSdquEF 0Fg9Jj65W5HYqrWopbEXaeKvJAs55Zgsz7EZGUFQVcYO8rjIIOcBshxFIkYLDcCw O8ADA5XaPmy2MgjA4IOfHRZK4XkI9yvI1900GRUce/WMmDqnzbiSHyCZd65g3MYw nnqqRFfO5tx7mTzCIJRgonSbI9sXecs47WQTfrOn7MnppglZGiyDg4Ipio5WTskA wO2mHCwCUUE/yPVItBJNVV3LJCIokY3t8eRuam2LmQ2M7pw4dqMJx7YVpiJcs02y z08ZJsJlm7kVVQI0WK1eKuZdUq5CKirEgJlzSbar4WvWBnWwYQZPxEjVRKKUsKLe XlSuEETujxURMJnB6o2cm9JNJRs8UVICvrLIH0VG2aN6q9U+nNkdLVLsNbaJFpzy fHVHjl+ZJFr2O/FErxg7miEbp53I3IgXdL0rVQXs1oJHHymdEWGYkEEZlRUdyCBj cWHtgjjqzmFeo2GuD9rBSDVeNmVUlDlaOPbu25zJCAqIoTMS4kq+7elSErhSPaSz h+3biKjpsh6awJ3ZRl2pUyHKBewc/P141sP+W/p4zkxnAxn56K7aNEmaqkHGi6Ii 3QbHO6B3IioKyTYTN0jpmMJPSQMZBMQMCQmDzHPd5kzcrFTKAj5dAAciP33vQfpr f7a7+nNDefVtD0zU9QmrfE3Ky2JVqJJFCAzEIAs0kjb9gUyEME7m7YgXb1y7UJYq Go2KdGOQxQyGJWlKlztALElFUBd2Qg5O0Akkk9Hw2AnYoj9NhsdAOu+tB2+nbw3r SXrmAomENiH11zz21ofprev18edtBq8CYR38683G/jf6CO/j4H6eHVtDpnUDzm1o R5Hjeg386+PnYgGw334kyRU0Ujdu4/0X6+fORznn6ecxy3JGXIxyDyceMYOf34H6 c/WfsPti+oRTzCPOxAf1Djf9e2udeF4ccYJJNlUyEUAQEAD/AFBod8cfPP0Hf12I DvwvHFvUMCjU5u2hCnBHGByR9v0H6f3667odiT+Hxb2yw48gkY248/r/AHx+vX4S fa/IAHIiGuNaAP689u+vp9Bvdhnqga9P/SllShYgyHnDGnUXlbK+M7DL2+gAjToF pjPG8LkRmlU2+Qa7kqOuwPZybu6EzINy1FGLMlEpx6x3YqJu0ace1APj+v2D6c9x 7iHHzvxaDo/w5jvNea2VCyga5s6epS8m3CXmaRMwcLKQjDGmObTkeRfLqT9Ys7Bw zVYVVzHmRFq1VTXfIOU11jIgyde3deq0ZNLml1ON5aFAx6nZgjSOXvJpsiXVSSGV WWZFkgSUxDDSNEqhjna3AtLmtpdjjpsiWbO+nFI7Ovba4vw5ZHRgY2KuyB+Qgdjg cED7vPqkt04ZUxxYpS82jLuYs84yyPeLzZH5pxKapuLqRkSGhouUscpNO7FJTa9m yEtJLIu487QjSHj1Cyp1g9mnZPH/AFUYBiso4ay9cI7LYTuOumeN6fGlartYpzqB x3Ow+E5/FTLLNTfv8gRbi8uVZ+RPktejSsZjxMlssk04C5rjEtRnIz6XcEUDJddy DaMgVS7WlnWrHj+sRSFdzth3pwgGTq3x1/k3clZcoZxp1tpCYoBT46Oia4Y8PJSr qZUcNXixY9Ror7bB0zwMTkPPjyy07JmIMWdPkHV5K01C4XKpXzJkhP278EiaXTIe 912lVKlSS2Q5iQdWiFtbCnuYOGxoyk7K2b3VaKZoWMBdr+n5LWp6ZIJ4ZFWQWTWs U1aX+JV9K04U69VZnuASRy6bUgdaUcalUrCwFleKYpBJqyw0ramORCymETRTlUNO a3cNiWYxJXOxkuTyK1iRyrNMYtyK8bCjnTDrGE6LaH+XbvYsf9PuXr3kvK8fKR1f iHt7b3TKdSfPm0Ak2sEw0F3IYkx3T4h3+KrM0WFjUkY1BWRimiE3IEV6z3hXIVMt 9NtcrmOcQkOqbIXU06l0qTToCSy88yJX4CMc1q6gXJs4XHDmvu4KWGBscSrlMUE8 g2l4MKRVqgzk4oyjimqROK8R5moqFmia1k2eyhSl61b5yKs0vFWfFIUV7Lvmthh6 zTmkhBTEPkqsmZJqV1m6YSjKcZqOX6STdyJahhjGePo7C6OYEMgTVqzZDxF2bwdC sFfrn+H+PLHOvIGpSsv+O063mtdltTaPeW5jWmp6s0YVdasrLT7t7al0ay+dP0cp Vso18zm5qiwwxvE1kXI9Qv2tUIDZhUwzm8jyLIsBAgWJ5LCae6tCzqGZoGFbt/D0 jLI6uIvh2q1IKWSCJG7kIrFUKGTPcLqsTWgQLrCyZQs5dQ2Rcu44TtrSt32WGdbw dwgoWBfVNIyZGUdTo9KCstsZyUNVYZnGQkZOKPY91LIMwdrQEL5gZFN0ss4Kxpbc q5IwhE5LSsF7pmS8fUSl3RjFJVzEVZy9UZnH9pTVuZLzb7FlJ7X8f2WwVKruJKCp QuH7uPusmYq0SFXekuSumSs9OKViXzYtY7W+LmbLeIKTWqFPRNNcTrHCNnNUbvku SsE5Vb4gxr7uzf8AlqqQraAcu5mSYWp27mIpGstW1khfqCxC1w1lSYozF88kogYD H10r7mSTQTli1nKOO6rlCsspoGpStfxyMr9yjo6bO1Ii1UlWjxRugggdNFN6jFo9 6vp+mVJ7U1GLT7Fet8+K2o0KUlGtajl+VWmWtI1WtKxjhc77FdXdGtoW7L6hWmtX J44I7LW4ZpflzNVs2FnmhdOSEMyLNMgDuAVilwjCBuosx5fJ/F9gUstajqLJSJ45 xGC2yJi3GWXq/wC3dKN1VTlqeWKhdasnIFO2TBtLEhiyrNMy6LR6gk6dEVN8WTeH jusqEzhD2gxblUDI0exYzgawEhQMiGv1PniWVtVnUnUa8tXS1VlcYRxV413DJKll o9hGLwSSScnGRoLTXxr5HvrQ99cd+/Og1+u9ce038f13x2H9+3x3HWu3iwT6bBMJ SFME0ogD2a+2K0RXkWWEGcLudFYE9t98bKzoyMsjgi47c0ZQbhJHGZCsMo3wgyoU kIjJwrMuPnXa4ZVYMGVSNMMT9c1fxivhStz1uzrnCm4iy65zvDT+SmEKWxVS41fG 1zrmNqdjiqPckXJpXKevdJ6LsmQ3/wCewJLpRUG5i6i2kKqAWiAqZnjGUHjjpRxx Ya1a56Exp1QXDPme2AIxCaN4ip5xh2Gj4CsPF5dVV29QpWO7C0WNNtYho3lLMcEj uEBcvBqmRpsgcb4EeN/XXOt9u2t9+w/X69r9vj5ABD770HcOwiO9du4j4FR+k9Jj kkmRJVllZZJWR1h3yiLU4u6UgSOON8avaYdlI1WVa8igPCCZr61dZFjLIyINqKyl wib6T7MyM7sgNCFfndiYzKhJWQgaa1nrKwzABIqyL3M9hm5rOvVvkqdtH5EpMNMT LfqqwnA4jRvbYg5Umk65kHEDtW7Wyt14Fp6JssjLMgUutVOZZZtWTEuU8RYRc5aV rb7Kdtc2vp8zLjKlS0zWaxWUo+45eYQ1GfvntaZ3u0FgYpHG69xbyM8wsthlJSUd wUYlXWDBm5lTVlFqHHA/8v24Dv3AP2HnwhaAAAIAOtBvYCA/0+gf25AB42Kh9K6d Ak8aPZMdqOOKxGXiCypFNPYRG2QqVTuWrQKRlY+3MYgvajgSFSa1bkaJ2EPcgZmh fa5aNnjiiLLukYFtsEJDMGbfGJCS7ytJePF3U3irH9K6c4wzPIqE5i+ndUlOuTKL r1aUjkJzqVhLlSVc0UWyObm2fL3WoUqToKLKqS9WhmjmVx2zOndmSUmmtEs2Juoj EuEVsIVSAgrteaDUuqvFXU3l2ZsMJAVSzW02JlHcbVKTWKuwtVti49lDwdivjl1I yduUUs8pamrNZrXmcAm8k6aC03vYb1xoNgP9/nQ713APkQDwvaD/AO0REdgGu/zo BEO/fjX9fGX9LadL8SJDO0dtpXnj721WaW1fuqQURXHw9rU7k1cBwEkaN2DPBC0e F1m4naK9pWgVBE4jyVCQ1K7ZDMVPdhpQJKdvzKrqNqySK0yZNyPWXNTsOPMeS10s cLeMnNsu3+33yvw9Ql7NaoOOtsRUGzanQdsvkfCN66yv98cOpE1wl3NgeWsCKNot GDag+rn7UfoPzzoee/01oBAdBvXbn48FAtNgP8o9ufpvYj250PzoQDYd/vwLMBAQ 8v1D9OOOP6bAR5DvoPBerQjqRmOMFizb5JHCmSVyqJvcoqLkIiRoqokcccccUaJG iKsGexJM258AABUUbiqLkttUMWOCzM5LFmZ2Z3ZmZmIx7UBHXlHe+3PPYR4AA5+/ I/PO/H2RmO9AAhzvnew2PbgOefjfbet9hJfa65AN63xz+ocj+3cOBEdBod+PpNsU o/zFDex4EPrwIDrgBARDfcRDuO+0ntfceBwc49vA9+PfGf28NBj+mce3jwPH7cjx +nUsYkqoSkkgUxBMUTEAR4Hy7HehAd8AGxEeON8cAI6gU2ixMPFpuj/5ZiJAYCmH kBABEREuwAQER3oedB5uxuMwqLdGdVdpHc+UheQEfIsIGEQ0Up1ESHMiA65OYNFI URKJwEBT07xZAW7LbaPclUbVSpOEGyo2SdMuVF6i6jTvEG9erhzx8papBduDp2yM o/goM6sWANn9oI6VjPHLfXOoxaVE9q1KVgQYEUeGmlYjIRELBQzBW+Z2WPjlskA2 rQq0lllSCMOx/qYBUUDGSWA8c+FDE+w9x3K1F3ld8FKaU1jkaMeu4qbBjPtkBx9A ScU1WOE/YJuRMtHvXsRCzs9FSddjmUnMq1+QuDduvWZk9YsRZ/Gl1XG8RB3eccMc 93dleqxieIqab+OiqfUbRaazXFy1auwjhaQZOHilbuGPHo2SeLCSTYtfYXd7b7k0 Qdxq8qNceMahZOlmqUmduqMTdb3a71aUHjx3DPLdBY/pTu7tjyEGvExzaMqjSXoS 1YbV4sLW4VaFlJlixj3UXNR05PQtWL7DBX8BIsY99f7FJdVV56qZKk1RlJz9wtkE e1TMXHRzRjXqzM2WxekwqMIaedV+BtUnU4+QTmbKSMiE03h/CfrfX5Nd1h7c8qJB 3VjigUJiKqkqxqkjKi75NhAeYfO5RDlR8i9x0TTxSqJBt+diGkLZO6ULE7sVJYBC kpCA+Mk43HJtEjLS6meesOFmp5+8x1099P0dSl4NJrDlrtiC4XCHn7HMLsEUCmbq t60R4pERLFCPgq6gR8jHx6ZHzUY+tNkvFKx5/DtoNAUu1XcXawFk3VrrLC11yQsc OjbrjTMkR7mehWKgSMSidXHbtyCizZs2cqv1Jd0VxIWl85WPYSoZHnLrd4fKGV6V 09us9qElp7FC1hx/cs126ArNIllWzD8NZuwp9KrpalF2Ju5tlpvWQ6RYGxJpDI+I YlFm7ZMqddaeOce1agLJQONJqAapO4htV8o3PIoXyy5Mq/5cmbEZxAsI0fyjj6os ULrUFmMPjpKGqUu3exC7Krwgwh25KHDNE8sNdNxad6IZhubDxSNI4LEkfO5BYA7i M5HsSlwSQ1bMgVNhini+YjIjmYY24ycKpyAcKCB17OmGceU21YFm2tTmLRdKXbL1 k1ljGNaWVXIVrZ2iKpysAmxpdXrVquycFJJ1x9IEu7unu6GzOVqEhNxpHYPEtN4/ CHU/mm/3HI9klWHT42yShXAmWcI6Ne8jO4CssZGHrbVvUKlZHlArMe2Y2CairOhb soZzZzC8s4VksXt2IpRjOuf8HJGlVCuoYijK5Zhn7XANslX+XeWZk2pbhutKXGFp UdBVxm+JPSF0bu6bKydoskoybtWcYNdSaSj40wjHMdCOl7KuQcm5x6hRsU/NuanT Ml2SkY6rTeOq0XUIeHqTantHkkgEXFo2actb2XsMuM4+nJJzBgw/CkYVgi8QmFAW pPOdQ1ArIjfCxF5FYlMx9+OF441AdZB3pNoEh5RTn2Uv6VXiSlRUlwlgb4kUfMpC mTLyA5OA7cBQTnG7pvwzgHpVp2TUqtBvKne811dg3O9dXa1RmU8k4+jHCL5+zKhD kcMqpiCtvQbuvysrjOq499kduDZowVRImBOWPUi/k+rC29PzdOhwLehzmP46TnLX YDzuTcuSNtUlHSdfqdPXjGDCPeVSOYkttquzmQl5JhHGWhCwSSki0ssdGXQbPRh8 hZxWeWqMQUuPULm24RtRXfQyC64xUo0o01PN0TN0Zl+u3QbwcPIGK+dRzFo0i1CM mUgtMPpCt8LiXKF86/1+quqY1lpbGEVnaUi0ZR8+Z1ZycjN/W8U2N2lFyxT2N3GV EYbIcu+URgAinp62VjHTaMu6ThnsJ4oa7tHYlWRDQScK2ABNMoKCIRuQCpZcjKjI O5SMgzN52xlYgpFkqREo3mNCFJJ4OedzfNyM8nx0ffxMZBILDjGOBYvmGQyq4csi uZdsmss6WoRBdP6oZkLl27ee2IqWXhpE8LYkDEk/8lYypDZ1ICmqgikIJLACSR0k 3hDOBKBilMkqhHtRdI6FM4AmZ6f1EyKeRc4nEwHvH/EpkHhbXjIp1HyKAtMhPTsm 8h6teE0hN18DuWc4NnEhUFhZiZ9HgmxVRkW651IRgR6okXOWQtSkBDrSDyLVkSNG YOToQRl1VlRTTKcSopGYtEna6pREE0AlFjuznAyJBApVPBDS3T4OA4O4q+SQOQJn 9s4BJ5PA+/06rOs7zemZm3Dcij/9MTD2H/c3v7n26dJW4Eh5IWacK/UUaPTMpB65 M5BMpCQzeWSVim7CNsCJyOAetkEhGPQSbem9MscoxopLFiJIW2syHD8OsDLYiZF6 n+IuEVjFKJzOnK5DN4kRIKQKlaIoLKnD0zb9EoEpRb768vdSj5quPpuoGl5uHsBR VhTmGarhTLMBRFNnMxhiHTiTsHpQB+4M5dMVI0VCnMD9tZKm3quKsEmqk3Hi6TFM BM/fN2DmQMZBMxn4QpFjr/zHBUq6JSOEWy6ShAOVEERHeUozFQ0ZKjnODndjABIO Dxj29uo6AbQw/q+pJPAH3P16d5XHUI+FRtHGfsJBFIqrNWOeOZWLZqLesmRROEmT uyO1SlQXIn7NFiYroAD1FUkTlVEK7RLFQZiTma0WGfv5RJNvKJLuJBn7hFsPlag9 YuVhZEWaJFFJulG2COakS2iRoZJNEpJTeOzHkgFYiSnqMmaPndnOwQIRZSRKn7Vi QSCdUTKemKhyeVTZhMIgOgqzh255LNmi0024yMw5pa/5ukawwlGsYLFyx/McYvFO 27kUFJMxQhptqgVJN6LFFJNRNy1bSrdTblWGVo7LQyyxRqkbTqjFY3XuAINo+Vys mG+YDHBznrJAPkDjlSQMknghTycgckccc9Es+Nk/PtavknXjs0YJ25UdGQarLGeJ SqTZo69tJMjSsOUxW7UgCLiSRFUqTZqoomCZ1lfPlydrNnsdFtscq4Wf0+xQb9cQ j1jAVmZ+PvPUdpg6ZJnQI1ZKLKtnDn0WxTgVQDqep4N8lZRUoNtrkUEUzeMLI8im Cjk7+TjncQD1ywYLPEnCcW/hlPUXe+VKNUdMX8guUjZmPpG8wenI8nRKyxQmLg09 Nmsool+JEh3Em6RVKB1xUXfQ7ZWXapEKkJyum5QIGgIdQpvMIFoL+owSV96raBpy QVxIqDdV2vCyMUyWKguQzgSAeD4PTMkCFe2gaMtiQMHOOGXPy44JBPuf9RPkPaUo +yJTTN86ArxoCDBVsybyMI5FN0q7TWdvkJIshHslGjxRYkkyipqOMVA6SqzI4tff WXq+dmZ3SkcYzaSctnaTASRapl3azlRIFSelELptp30Tk8xknCsUkguQoLIKqtzp KnzAkMc1OVAqrQ5kVlEm7tq5FdF4ogLsoKJnbu5hNaZKZRQ5QImxmo92KpiHTWSX 0fwIuqfeIlyReMvNpEfTMgRu/tFvatVkDj5QbPCPJOSeu0wOAmTE9sjwalVOo1XY JOjrG6l6a/FY6VplTStToGxBTiEELqoV+2pyAjQiLO3OP5qSsykjk4ZazqHpaK1a e3XmMMkjb2DAurPxg4JyN3OcEAHHtkHcAM0V9Vguu3cpmXbgoJkDKgkcFE/MRRI5 fKYxVCCBi+mcm/OXRgKIAYkNTmcbFGv2qpYmVNHvSJqpO02i6xP9oftmLYSpJeo9 WauDqKKEfkbnYMmzOQXknTJNsVRbNBzl7I8VHoNZutIPTR5EEI93GIu10jEI+Zqm bpx7qQloNn7ooLn/ABB7cygAgJX0c8TcLJqWBoXUwyi4/wBjEyB0Yt1GGipAjZ0d YkgksV+m4RlVheOiSx0m0go0QcuykdJpARQSkc7V8GPUn4q1I9Lgm9M0Ft6hJYXv Vbsxj7dcfm7cnbEjSnKjHwrgDIyhIdX9B9IrLbkj1u40FYxERyV13ESnbtLISqhV APiZc5z84BU6yYDywlNSLZF2cUljiQvkObymEd+UO+wEedhsNfrrXheKLYcy1Cy1 9iG0UcEjKuEgMVMQABATBoBAOPnkdc/Oh2HheB38bbW4oNQlqGq80S7oeG2kHBwe PJJP7j26sFbTI9NElSKyZ0SQ4kOCTkKPf/b/AB6wTFoPHAhx9/vvf7/TX78j4tH0 z5IxtiVtnCSuLi8JWa94GyXiKjBU6pAzjCOk8ksWNflJmdfy96qzpmzGqL2aHOhH Rso4OeVRX83ppKoHgL2nxrkfjX7fX6ffWg+PD/V6VZ7vPxlUpdanrfaZtx7OGrVY h5Kfn5h0CZ1faxsNEt3Ug/cekkqp6DRssr6aainlAhTeX6A6jRguUZ4LUjQ1ioae QPHHiKFllfe8qMgiYRkSlhgxlwSASevN9S1NBYilgRZJgSsS7Xcl3HbBUIdxkBb5 MH8+Dgnojqv+Bz6hMYK8nyPWbiwu8vMPbJTYKLuUfZ6e/hq40h62vCzuQKUxrMpW ZaMsr9CfaNZ9eZb3EzZ6g2SrrNKQnae6latk5lmmlXuMtVIoORUundGnL1BjFXyw 06O6XKRL4txjX5tnNTuPmlrbyGPZ9+laZlKXgF17W1YT7WJ9qKkSSo4sxAfKJRKI CIGAS6EBL/KIGD6gbuHfff5AX+RpVpiIKu2iWrM/F1i3DLflKxSMPIsoKzhAvE4+ e/Lsu4bpR81+Cv1UmEv+GuHP4c7Om2eeiscpBh2NGpzyrJYlmaV5QaXcmQtXmFmt qhFQSKxkIsabBZ7U3xCRRVjFGkdUSxM/DqVlIysUcQjCAThIyolj7UlId8qw2jtW 5IS8faLPOHZnnKv0X5hyXFXKAxhjWkx0lF4yw1BTcXWPxwGpLFZrDbpxWwXW+2Rs xXdMI2Vsj38NjmsFHvpBpXqvXK3CDLzr5i+sErM5c5YjlbhhnNFuhrtN5Cw7j7El Rb4v/A4P/DK2S2Cq1EU+gSMrevzclY42tyUZWK1K3SrtMfu3so8QnYqOs8YSebzU LVRhDPZR6zjYxk6kJGQdIMY9gxbrO3r547VIg2aNGqBVF3LpwuYiKDdEiiq6pyJp kOcwB4lVbpvz63vEZjFxg3L6GSZqPVmIfHy2M7oleJaIQbuXS0rHVM8KWefRyLZm 8dKvmseq2TbtnKx1QTRVEjNnS9IijirzTioY4dQlZjbSCeWtcbvas8kjkOI7Erie 3YiMUkUpEsc0BAIdhu33kaSOEz7nqIB2GliSauBHRCqvG6JFMcETB1dco8cg6kCy 5nx3muuYuUz2+ycpa8YuMhJSKNMg6w+ZZPir/lO25oklH9kmLVCr0CyPbZfbXFPZ ptUL61TilIWRRh1lotaLfQNmfJM5mzKVzylYWTGNkLbKA8Sh4oipYmuw7Jq2ia5V 4kFzqrhEViux8XX4v3KyzkY+ObC5WWX9RU0kx3S31IzNrsVCienrN8reKe2i3ltp kdie+P7XV2k22TeQrqxVxtBKzEI3mGaibqLXkmjZKQbKEXaCskYphjqWx1eIC3r4 9naXaoS+tpRCFcUiWr0vHW9CZdikVrELVl40RmkpN0Zw3K3YHZA7WFZECJmFUgHW n1NEgsE0bNaSSOvYmigjtV5FqU9Snj1Cy8MURDR1rk7Q2TK+5SohWN1gWJBi1PqU kQFmCVVeWKN5XhlVp56cJqxLK78PNXiDwhF2sCXZ1MjOxiwGg/IcCGx3/X47gG98 /UR548L2m9gIcB3H54D6AIa44AeB/Tv4m6QwllyJvTXF0pirI0Zkx8dsVljt/R7M zvT0ztAztqRtUXEYnPuDOWpRctyox5xXblFYm0wE/j3M+n7N8hen+LmGGsqvsmRa BnUnjtnjy2ub1HNiporC4f1FGHPPs0CouG6wrOI9NME3CJxN5FExMTNuhtDm5VCN X+LDmzDtNXIX4rdvx8PuIHfz2skANkkGH2bLEqK8xIl7GOzJu7+A3ZxtJMoAz2+G xk7fbqCiNP5Q4H5DtzyO+RD7D8a2PPyAD9e0HYj9REO32337/tyPyP0E/cVGwsJ1 apvq/NMbS3lDQbitu4p82n280DkWZodaGWRJIpSgO/8AZDR52xXQOdoCiCuyAYO8 H5gY31jit9ijJLPJ8n7cI/HLujWlvfX4u2p3zX2VPWiwsDr3LMh3jf0I8/rNiGcJ AdEpjeHWmrJt3z103QPZXfLEua0QQy2BlhmGMOheXlEDglgGHTYSdvyxyttlWE4j c4mckLEcL/1HIbYh+ZsEAHBPUHiz0AbDge3GuR0I/QN/2EdgO+N8+012Lsfpr+4/ 17hwH28Su3xjf3d3HGTWiXFxkks45rB8fN6xNLXkllZOFWryvDU02QzwTjR03XbO YkY8H6C6KqSqBFEjlAakYORh5B/Ey0e8i5aLeOo6TjJFqsxkI5+yWO2esX7Nymk5 ZvGjlNRu6auE01kFk1ElSEOQxQcVoXIWOSJ2MUcwRZEZjDIcJKFByYnZWCuflYhg GOD1giRRuZXVVcxlirACRQpZCTgb1BBZchhu5xnoL9mOh/lHQB9OA7ebnsA7324D 4+vjkWeuRD6/Ac/fnuPYf37a2AE/tNAOw+/wOw3oP6jxoN6HgB8L2muwBsRDvrWt B33+nzxvnngPDna8fKPp5Htjk8+//vrTuEe48jz+3+HI8fXk9C/tPt+vz9g+QHt2 5DXGuNeOfZ6+B133oOd7DfI619ONfv4Jva/UOwD9Ncft9h7Bzx8m34XtB12+PoH0 3vjQ7+v9QAO3hdrzwOT9vt48YH+/S3ng5xnB/Xx/69vqfr0Mgz+hd/oAa+N/3HQ/ rx3Dx8i0+w8BsNAHxzzxwP2/XjgfBP7XkOB5D4+wjoB4ANb13+u9aDfhA177D44+ vHf4Dj9A4HxjZ77fr7fp7H/D9/v0t54yR7Hj74+mMjPHj3PQ+jHgcTcJCcSH9MFf SAonBM4JebzkUASCochjgJQ8wpkL5tbIfVvDU+WiVmlsXz5sk/rykSkwauVVZNdW xx2DZt/FRDJu+PJM4FWevlnoLONeQ7GFdPVod1Hu3Uk3eSDAMy2Ecd7JRrNMoid3 JMGZf5EVSbdvEGpfUSWTUQVTEyxfOmqU4GJ5h9JQCnIbWPFM1DVYEhokGwYzzxas QiVlm/UlZYg2/NRscLJAo4cGOMQ4hoi02pCLXmCxLYE49QIZMDvGo+ffxfYzVlgQ eTngN5UcA7eAeSMnwORkEjroXpF9rglv61PLAZ4xxnJ98jB9sDqTIgYaw12pzeSb fNSkLiip/wCHLuj4tbNqzYKPQIWFbMrpK5XdXd8rcUIJSHBqGRY6k0eSuVStgHqF GuTqeMMGnPcLIDISFgwvTItnjCr5Oob3LkFe8WSFrouU1ailXcWS+I3eQrG5mZ+7 3LJl0mr2atzVmnr40dVKux7yDawMrYVkrDXq83ps8sst1MS5VIyFh7XIUvp/bv3j 1g3Z/g8s6yulNOxiWIv571VFMh0OQZEfxDVF+0WYyQODsVXjtia2TKmOIy7ZvnXF ltdyl6tD4kwawrGJfMaSXYR3VYNNUYVyQI2jpGQtcZFUCDcV6fr1lj3U21ynToet 1mce1xvIWHwZ6kGy3KQCxIcBCMAl4wyHOPKPJEw45LsTnAx3bT9skPzMijOCWOMD 5Rww3bdwVQMA4wBngHqM8u5Ce3fotkJi2PPxW0Zbs+eKTS2j5jC+dljYmdMDyVWp Veg4+KYslq+2qLG2uFmzhjJvZ8GEnP2OXWdSRZBiHfxRri6SjKvAjtyqwbt5JFyV EUDnazGCumuIVH2x0GopuPzHWLOB2ZGqBkVz+RVJFcVEE3O25aulKpXTDUsc4rrV XmntHr14GNlErFVp9bP2Ps05Jh5anMq6lOM7kjXsxq4uk4ORrEU6eW91jFBujcXu PYhpKNJiC/4qtwM+y+iiodM4oTeQIyQcEVAzlVpGdUec6+wM1UMi6ag6Xp8VXl0V 1WizVZEUxWQWZg4KcVpbMb1RSvyLcaVFxkN21RHBz7hgQTg/mz+udVKJTlw6uziK JwBtUZIG/POcnwCBkYOetPP4ZOLcj05nHZmlqrDxNEsmNYxGIuUtYGLN43jajHNR QlVqmUikivXpOakrxPRiryUryZIGKRsDldu1moEq04YQjcZYAoV2zBZ87kyjCzEF YbjkSsY/ho6br8lY8xSlanhladFMWsnfC1iWUiBjKk8m5dKBkq/IOLLa5iJrkepK wVAej6Hs+dMZ5kw9YsiXavY4xphrKNAtkItCwDuvyeQ41Wnuqw/gI20TmUFJOLxR KQdkZxdgsDqAm7ILKuxTiswlbiZWuOe7+HxTqNmPCfUNku40etNGUXim9YoiKaib IN4hWeKrW5kb2/rzguV7pkmzys37iuQqaykXKRUakVL8JZQKBmzp2+F3pbEtm9Oz GMF4xJGpBYwSWC8CSNjILEJIwBO7dk/MCTPrmNI60aRnMcQCFmOFdFRGATA4yuTg jO4gnPJuR079SnTE4Z1WE6c8TxDjKsxia7yNFcIt0ZR3aUqdG1R5Za9krM1JrFsn CXedM1qS9nezUZZUHdgPGwz6wP7S6YRLiEsP9cfVTkORgWkbY8R2/IdxteO5BviK VGmRmRcYUbIVzrMW/dXbEONbrkC4V6GqMBb2CkM7v2T6peKtGxqcbe6pkWaUlrwV 8/hCS18uUNasq5Tt1yv1wd/mAzGavVsslvexMDdpGjS6sTAqzclIMK9BPXlWbKOI atIR8MoeLYmI0BVIVVKb9AD96b+ITlBM7JEICyXbNUyg5WSMLxzJVyxNGDdED++O kcjNpBPFSpgzDzEKVdRZQW6Yl1eukbWY8bjWi3h2O4PuZRsKnlc59iftjp9WcrWY MsYnLYEa7Sm3BJUktksB83AyufvmdP4ksi0VynRV26zBQ/5LkHf4kk4x2YXLh3ap RAwDORp26r1UhY1EhSPYdtNNUEysnar4qaLpaj+yuG6Ka6R1BMUonVM3ePjh5ylN 6yar30I8hi7MBR5SAT+byGJ5yja3+JPMlUzdUG5XpvWb4piVVR/EZJw9TMtcr0Hk dCeiRVybHRQbEEzeXFRRt6hBSklGYtzEpKeTM3QKqdMNERTH1FSGKB/OmXRhXnHJ lR8xTbE5CiuffmAolFQQL6YCKkIOeFIGRjO92k44Hjdj3JxnPt1WtSH/AMjZXJZQ ykMcEH5I1x48jZ9vPjjqu5LlKUyhYlh4W0LllpqEijMoR08qzNWYQZi7XfNzkc1O XO4dLx0c6Kq4YrME484JPF3LlMEW4StjeXC9STmXfxVVcRzaLgpVg4VrwR9jQdPZ G3wskxm1knLxk8dR0hX0iJnj0o9sKq0kJiOyBHKo5v5WtYMMg9OKj0ruQZNcS44M yjkHaJWoP5jI87FvHB2wGQUkDvkAjmzdqg5bJrmT8qqwtWypFbw9PEo3RezHpEat ElK/6g+zMkwRMsGS8kpn8xhOsCYiJSkAfVFYEypJH2oUTnlPVUGWVvJBkQYxt/KN oOcHBI5A+nHPUYK0cEBDD+YXDKV5UAA5znPIBHgYJBGfe1706DaRbLFQFFuQrIXC ge0hWaRAcLD6hEk/IddUTD/J6xvIChzKiAEKU5YdrVeoMddYmXquRE5CzmO5CTUV XjJSPsp3DVmykW5fZggRxY1142JUMz/FnL8h20h5GoI+4BM7lFEnbgiKyCaiDxMU XBSR7iWMs1UVQTcFVfLEFs2SUS2RVQgOP8s3pqF9IyqHimBARXyVRsSrsGC1ZWiR Yx8orDW5vIMHldqjRwQjORlJ19TLA3kGnt46RWcxXqlYyQMnAKLukTqNI8yg9oMy 4JkQStGCqjcMqDiTkZ2spAIDeQOkF3KzE8R4IB55YhePp+v7dWYzBRbbeZaKfxSs UUlcctpNiCwu24vngEeFFkoUqUicp0/bsvanFVq2FRcxXAuDAm6a9ecmU5caJHxL Wsyyr9dNVdVBoZg9CPX9mkBkFnaSxTou3A+vGFW9qcqoLOCARNIDreIYzqszpj91 aJh1KS0SvDwDJnBJ2P0XLNRm7kWjtGGj5IG6Cy0g2cNnckmwmoVZy2jfcSh3bZt5 PBTLSt5rmPIBynbXBmhVJA8nLJwp5SWPFrbUgQjUPQtC5I8EESOZFFdhPO0yODlZ PWjNo1SRlwWZRIrRu2Ap7eRxllAdQNobKhyAdxzknHHWxjwgfOc4GMeB+ufsPb/L onn7EJcPzK7VsASrPGzlD2su3TKdOwQrZyQ0U4bv00G7lY8gx9moiZsu3dnJ5Cg5 IYpTMVAfTJsDu20VMlb2GKNKR6Eqm4Kmmg8RlVSEWUWUIuANgRU86/uCOCigBVVW ypSJoqMMNfbVL09e0PWcNciFipZWIckbvIdGfZpRjVUfeIyMag4ZIgq8Vj1VVIFs dFVmoZds8AhHJGKFyDDP2dtUkanH/g68eEg+mKHJIvVHpY3yoAksaNcLtRlA9REP I0lnIgDoqz8ybQrl23ylthiFo84lD7s4wF2rsYbT5PHkecAdaDgg4zyOPr9v36OT 32ea4bjboKbORsjOMM5lU3SCZEpJ2xSdg7AykUrHlblUUYnUI4ZFIkkcplk2bgAA i6fP2qyTJwKRkjvmrN2iYqh/R9muiKiB0TKnVVcEUQO2MRQTNwQ0ogZDzFDyxvFW mnuIKdgG7+z0UWkm0fLtJhdo6BkMs5TbETZrLjZW7NV86FUEWyhjA8k1TC2M4SSc nbeOKnmT6HILeSO9SiQIyXcP2DiPkfcJuFE02r/3DRsovKKIKC7VXAE0nyCZ3KKb dNIjBo6rIxPGGZsgqR4AXI4HOPJwR555OThSwCruJwW9zyWII9/YDA88cjHOb2dJ 7VNbKMIcVjG/2pEdCb/jDYBsdfP7dgHW/C8M3Ru5eLZUhPZqbM5cotQ0CexKsqmU xCqG5SBUB9NQ5DJidI6qJzegqqQy8dZ02LGm0NpY5gB5Bx+c4xjPngHOPJ4xyWIW bdMM4/mfUg/lX2/cj9gP0pl7QeB+3GgER7dg47B8c/rx40T/AIaU0tjvL2YMxIRF elFsK9LGdckMhscGwm0Gc2wgmUHV1o8HyZwjn7y0z0NDqPWwpOFoiTlokyntZJ0U 1EvaBodF50PxvQjzwO+e3PHPOwEefHANO46/6b+db+g6D7AICG9+PonrWjprWk39 JkkMUeoQGrM5j7o7ErKs6bO5Fgyw741bf8hcSYbbtbzXp11tOvVryqXerIs0ahtn 8xBmJt21/wAkgRyNpztwdudw/QxRsKdL9X6fcbZNn8Y0u64iumE3OSeoK9t8N4fl Xa+QrWxlHNkpGPcx2XqHx/I4YseOplyzrVPxpQMZKSqi8OmIIWZxKnSY5rdVtSm3 BOgvpwqUK4np2F6bMZuWlRaFP76QyR1EXKfyU7hE0kzonI+kyWysMjF9RJQHBhEy xAApy0Q9pvYaANa1sPnj5HfHfY8/sIaFe038aD4H7/fsHYfjQ/04quj+hrmmag2o WPUE+pstq3bqxWabLHBNNBcrVJHCXyJJq9bUrVeWWJa7WKwqV4xUgpwx9G7/AKir 3KiVIdKjpgwQQTSQ2AzyxxyVZp1UmsCiTTU68saOZhDKZ5WM8liRjeTo/wAR9QGT usZ+06bKrV8M3ylqXJ/KmKWTs9awjBESWpNjko384SV4tEtLQyk2djWxQkLBahsL lo8iXaB2hZOP1TUHP8bLyOLMfYKkMtP8BYaSwsghn/LE7QOoazVTPF8G35Bzo7Tr U/HS0BjyScVEtTi0muTI+fxxWXLY8i9XYS0hHt/zkAz7jr476AeN6Dnevge/1HsP crqmPbJdAsxq61YuS1GqS13nhfzkDBA2rsIo0TkHDQZ6Sjgl35VH7RNrAw3v56RO qJIyMdmTUBNr1F6JbV7iX7WqaXDWqUadWslrS7jSxWIZHRrNzVovUNC/bSWC3dqQ V3sRiD4+WQyzTyyvM5pPqEUIGqwUrsk09meaZoLsCo0UiI6w16T6XZqwFJIK08sq wv3fho0KRxIix6rp1zGmIOqHql6oqXebZYel/p7sldY05FfINimUs6Z3/LrIKRiL 82LSIPr1S61bm89NS8m5cTKhcYVpuLkXrawJO16V9PsF1HdRXUNbst43shZnPcKv NZldtU7USpX29LuZlBCzx2OHPtlEjWUGM45VbMWSrNaMhknLiIKY0ek28QTkvFN1 w/eJ7G+RYT8u3WrrNG0/CDJRMsaOcvWDSUQQUfQb+TjFFvZPmx10kHqyjRY52jsq Ltu4QTBvab7B37bDWu4c77fP0+vyGiGnemEXT57FfVa+qWL2jaXplLV7dOO9Xk0i rTgRe+kNyJdRGqyPYt3bUVqsbaWa8cbLHSrMItrV2NqOOWjLTiq6jcu2aME7VpUv yzuT22lgkNT4JBFBXgkhmEBildgz2Jgf0XXPF2ceoLqnVL0/W13j2uY36KsQ4a6h pCAfMsv3rByMqWamp/AuP7ogsvZsiZQdKRqzd1cG0yykjOn05FWW0w8YQ7Rd1sxc y58xvk2uYugrhizIlc6g+m7pyyKjOX+JjM1UHpYwtjp5Px+SMxXBtMx6xnFgtdod zllkmTxdkR8wVi1HMkrDldr4FY2wZlDLydrWxvTpG0oUiFLP2hdoqwaoRjBd2mxY IetIumSb6amX6hY+u1uOM8sVkkBMxgouSdlOj4csvdPWUsFPIuNyjARlekpVaXQb RzS40m0v27iCWaN5ZtLMqjYp1zBO2bl4g2FvOJMFzuU3rdBJRePkCNaV/wAAUlu0 9MX1ToP8Q06tQh0yhLpMUmorLRNPULc9+Ea8lvVTOYYrEQsqJaUC1G78xN+bU7D/ AMT2Gr2LZ0XU/hbc1mS5ZS86VWSwJ6kMdaT+GGCl2w7xOYTssStOvbjC1Yqeo2Kr LC5//i45pzrTnMJaUMfu8pZNxjU2po9J3nF9jWuo0inVShPXzxgzaWm2IEbWuAnV AdqRwRi03+HPXDUEDl2QWzS/fxQ+hatNbE+RVxViTArS9Qju1p3Cz40WxRE2jJGQ cdXnI8SsVC+WKOjGcorcbI2bRaTwk07h1YtqEcsmbDAjX+UBEoaDYb7D3HuAbHY/ Hfv9dCJXTsfW3IVhZVWk1+Rstgfg4UbRkW3FZYGzNuo7fvnSgiVuwjI5mis+k5R8 q2jo1k3XeyDlu0RVWIfs/h9BDMbi6wKdWj6Kf0pSE9RG/h9eKjNUS9PM1yKvLHCs 8lhozXrzl2ZP4glRmg6FxeqJXjFdtP781n1ENcsdudgbUr2YpmrRxiB5Y2kaNIg4 mli2hW+FacCXrbb+HXB1+7k6g+qcYaZs2Wcr58mcYWGwV2+U6kWfpfxDlZg/tGRu pFKUt8fOMmKiKcw9hGUqESZ0J4aSjYuRYnkXxlcLsk1+rwWRb7B0ewLW2lQt0tUX ULU5TIi5s1Xjp18zr9gcpplKmmtNRKTSSWTIUpCKORKUoFAPEnZAwDknGUPGWO0x cA4rcvIrwrOyUy+4/wAl1tOcbtivF4CRsON7RbIaIsBGhhdjBSz1jLC1Iq4IzMig qckSe0+NCAfPPyHBePKGwDXbeuP3Az6c0CCpqmta5T1mPU6WrJSrVq9cB69KDTEN eGqtlbdmKUVcyRwpVhopGZbD2Y7VmV5+oGranLPS0/TZ9PanYotYmmllJWWxLcZZ ZJjEYIXRpiEaRpZLDMEiWF4YY1iIv7XXcA+nx3Hn6AH22P6Bzx4QNBAN63/2G/j+ 2uP38S9jbFl0y7ea5jbHcGaxXW2vjRtfhSP4uMF88K3XeKEPJTL2OimSSTZuu4Wc yD5q1STTUOquUC8BSjEyah0zAUTJnMQwkOVUgiURKYSKJCZM5REBEqiZjJmAQEgm AQHxbg8LTSV1kiaxFFFPLArqZ44Z2lSCZ4g3cSKV69hIpCoSR4J1RiYpAARSQRpK UcRO8iJIVYI0kaxtKiuRtZ41liZ1BLIJIywAdci/teOQ0AhvYgUB/qH9w0Gh3yb4 49mHYA1wH2/57/rwI99BvxL8xim7QNBp2T5eE9lR8gy9rg6fNHkYk55ySpBogloS QikXys2g3iFJ6KQUfPo5rHuVnQos3LhRFwVEG9px2Dt2Deuw8B2DXbQft+mIXhsK XryRzIks0DNE6yos1eZ4LELMjECWCeOSGaMkNFKjxyKHRlCeOSJgsiPGxSOQK6sj GOVFlikAYAlJI3SSNh8royupKsCRj2v2439PuO/05DtrXf6+EDQR3x+ncOfnf2+f sH22Pgn9r247AAl0HYB7AP17DvtvYfADvgWfGvKHHAaD4HuHO97AdDyGuda48OmP PlT+w/Tz7e3+fGetM59+T9fPt9emavtCHsMUIEETtF1pRQwHbpKFJFNVZMpklXBD kKdMzYDGMZJVNMgiZdM6QeQ918ZT8gFgrDGHrUMxKeXaMVJS0qfjr2PcQMAe0Juk fXIvDsTwNbnJKcaPUAVamlLI2ZLppyH4ym/p60O3YuHark6yAKxjtiRwg2FysmD4 otV9JhyIezVdAHm9LzmMQhXTUTgoDpe8zsk4OdaVaOmiyD5W1qNpyTcxtdaxadrJ XGcgczJqtYXL1VvEwIQzdX1Ywh2L18o9IUxmyZOG/iRFKrY2xspGQrrnnjBJPG0Z zjyAP16vHpmRQoGWBBXOD9xnjB9uf18g5HVjYqNhLKvTCXaecuI6w54nVrGpZJl0 /kYmhe3bx1sszZVVwhInZyNfpmQa96ZlZErpCsQ7eQVm5WvsEmg9f+pfEi+LOotr KOoCFsuSLXMOIoXBpJM7g15w7Z1LlPTKc/MP4JnIT+XMjTj5ghWIuIcBMQYy9saJ zDeKdlyIyLkJ5BtElJm4DEol/EBRUTJP2U6zx8SZTcyYxrRSP4ArySUYPVmSzVPz O1G5nBSqELW6vWZWYmZJg9nkDwb5+2RhgJWI+Kkp2Qm0S2FQ7cqsVIAQFQZtF2KT 7ZWZfRTanamXFup419U6XWe4XlYfKABHEqKpYNHkglXxjtIowCNn0OMdj0yxMKxI TKHCh2ZiT4A+Xdzzkc/uvjrajInX1U5FfBiePoMK5bcGtyEocaeMWlIp+vV8Z06r Qp1kGsc5YIRpbFYMkSbRous5IlFBHOpBFCbdpxjqs+c8+y2a7RB2m4iwZzc06YjK rxhFEWSi5l3Dl1KDHLPXKjQ0g9XczDxgCgJoP5F0kidugPlTpQi4gFrHIQoXCzfj BCJycgyknJ45BRKVWKzEhXUYhFokBb2fkMiLgzZFsuwO4aoorKCSMptOEGbjzpST NFszWVWO2I+mFEvRQRXFME1iu1lhIiHkFFUipXBjJpgoIAodQtTi0+CCRZI4yHR3 dGOMhpFCvjaAME/Mf/LknAwJ1mY2ABO+1SykqFLKxVgRuBYnCgYAz44+/X6mcE9a eK8IYr6mIWaPEIZAyHIWmerxDWBq6re8gWnID4GElZYRtMFePK9Gqxzl4iyikI+Y N6calMNyKGnm1TcRfxFKp07YRyFhivOavJvbdXa/DOL0k4UW9q8azV3l7BKmgI2U ipN69fRtmiY6vqKTDltDFrqS8qjItVixaeJ9ZlqM6rEhcWtakhZNAkCLN3rtKQcq umCwR5m7qKm3c6VE7t6mgVJwisoQ6K3kUOiZyq3Qfq/Z4FzTCX9jTWMckMao+Rjk q2FfkHBveKtBQUsEGRGH8rmSTUbmeKIF9oyIgug0WVFVosOHp2kwZX70vcMTN3HU BmhQJEzlEQkKTuIJ25HIwCOpx1OyMBWSMqpjBVefmxzli3zDjBHH261AwR/E9fYE gLVSMTWmdnomeqERXG8clCQbibjnsf8AjZHMtDSDCuVixNpArV41FJZeUctGooiZ uwSVIiVKu8T1Y2enyzO54vqOWafKx8tJWqQfu57IddCQUnyWVSTfpyb9/ONPNKSU 1KSLpU64tnDxQ7s5Xrx35zVVpuURuNbCdkwCII4WknC0e4no14k3Bq7VbOXDRCxR S4OVXqCASBhI4EHR3pm6IqAiZUBbFWUZ+3WS7sJSFi4ZvCL+eId10XDNdEyyjto8 QKzb2eFeyTqOWaNTxThkscqKgPCuYkDKkWRnRaZUj+Za8TM4G59oYuOANxbcTjHH IHuABnMSa3bCGNpZCIsAL3AojBKnCogXznkj68560fh+oXIGRm8tP3CjN5GQSdrN VHU1lCnTz4jZi1buibcmB9KK+UHLhQjchSKlUU9UiZlDiYH55cJqZh14xahyTE8n EroArVlZuRdJEWbppGctTxKbVJNRIzlEwuwVUMgqoChBIsBVEobo8uu0q66Pvlkz eZws2M3XuQpNXJodZJJeKJJXCObulDGKqCKRXy6LpudwURVWV9spK7ObapqkD1Y5 RX3gKJpKvqyRRzp4xAi6rmYucyJXaKbfzHSADILFUbthICaJjeA1sFJ3EaAbJeFA woC+wAwAPA4+/wBOmVYsFLElmwMnJJJ4HJ8545z1BKUBjmFNjdrdajeZGVZsH1aQ nZ8v4ADmtIV+XA8S1kX8qsuZslMPfxlA3kQQIo+cqNUmTsAIpKdUnYOj5AdycPkG SiaY/hmjQ0E6YtJ9+3XPO2OZeth/8KenFJzIyxXKizh4zBq1emRYqKGRI1ZlSEwy eAh6hmS5XQNnJCsntXaGXUSSYJgo2TYV13+GFblOsVRqqp/tpPcmImJzJAYpSmVP Ii3TWcqF9IqKKTNW1OW4pFVj0nB4ts0i4psg0Kqicj4hgKn/ACCdD0wMBCjZGlPu 3zAggsT7qf6iT7AfTGffnp13LYBAG3I4/bzyfp0c/wCI1VlV0XJrKzBu39RT1puP dxgisVVEoGMMhOtUjf5hFCFUBDZCCdQA8hf56qNS253mODs0YDObRSfMjJPGSxJC tnTXrLeuPEwmUWST5iggZJUDAu1WIRRI/kBYPSHxLwtmTlRMjiCavCpoCiXzVReT AyftkSkI2LZphM52AKnMJpJYqq5VxMQwe32Ja8PM3YRLl5/hZeMdDamIxqbxRlHx TKutHa8e2cliVn8OdmdBYiUiwBz7Jm9ZsV1TFXdLqe9Fk7XksKJBEo5jYuwCMypg AkK6sRjI5XHnkEAg7LjtSEHJO3I+gDLj9yf9vfqduo+dk3EL7FvFi8avEmLF+VJ+ Zy3E655oDGOnHKmcGFm0E/kcSMeDYiyyaYOY4Hy4qM2SJt3YemoGaTWaYSjmsR6z RRom6bHQcsok8q1dGkI8xU4xEzpqn5nrpdmKJCnM9QbpqGMEcX2z4exhFtp2zpIx bd1LMYqM/DpG4ST55JPTK+k0RI0kEkmSZ02rp0gu8MgZJywSIdYxV0zh6XJ4E0Z+ YiXKzNq4WINLqT5JN2wiix7duZY8m7XmUnhioINEV13LY4HURFq8ZgCyiCqZcpPI ohfAba5KMVPztwCCFwPYeAvTyqHiUHOOfH1Xz5B8ZH9+pWxCqi1w5WWpyKmeVZKf aSgHO8EGzR29dKtzryDtFJB2JWaByORbLvjon8iboxV+DC+L3sS3k8kV2PlouSUl l2sy2/E3TVYXicywZBMHTBqgh7oWqhVFVSrEMlwiV+ochvMIbWpJOdrjCw0K9zcj X5ddyo1dqS8aqkCoFbiuJ49/XI5+R4Ynt1lVl0m5ASUamP5EjJAk3BZJGQWk4iNy zESruE9JlJxIxEVJOmJFk/UTayiDVZus3VXblMI+oKKvlFE6wERXbGV1EjbpMgfO weQYPAWQOcDPA3YBzk44yPPUVvp7B1YfXKE4z9ueeP0x0UY8ZFXZZEh3LyLdN2Nl WfuEo9mvHFNFlaNn4pRSKUlJLNmCEqZy4STYuSJ+dZJ6g4SKcEVmSPUU/CyJKuEf Xau3afotHSz1qBEnrxE4qvHnouTyJEm7RJ96qKqq74HQHWIdFNI4kpKuVUppoyfU OSXRbEi5lRGBatpBs3VTQWTZzKCc26eNU5JEUSqt36KSTkhjlBFYSlSP5QflZC7M ZOLbLuHzxdyjF+RFMHhnSpHR12wAdRJwQyQpOCOT+sKoAZJZ0gUFjykKbgBgYKZA BAG7BH3+Ybc4zgAYxjnAyrFxnO7dnBIBIK4+nv78jjnHHWpfQ6BnGQYIhD7OZ23J vynPrzKlKH8qZDqGABHYgQhzm15SJibQeF4aP4eiykrkaMKX+YhXCYj88+YPvv8A XWx19tB4XjsNWQLR09RniqhOM+Sc84OM49v9M9Rqqu5mYeDM2PPgbP8Af/L6DqMP Z8iIF7j30Pb4+3I9vqAaAe/jTn+HDL4drBc7SNrsVbqWbDVynNcKWSy3+kYsNDM1 pqRNkh5UMg5JomRqPWbsMaSAbxjuTrZ5ZWIcTrSuP458sq8Rzt9oHwH0DsHzvW+N h33v672PHhA047dh+ee2+3Hzx8ciH2AfH0a9Q6FH6g0i3pEtmarHbNYvLB+YrXtw W+xKoZDLVtCD4a5CHjM9WWaHenc3DzRpWqNpd6veWOOdoO7iOTkbpYJIA6Nhts0H c71eQK3asJHKVbbg3v6sMo9OuRuoOQmrXXLhkNjAY2qtLk7riXLdUjnuRsgQi79W TyDZLhM9N8bFWl2rFvI6svXUPjivISjqukmWctJMXSajm32K+puIxLXsRYug8m41 Xxdjb+H/AH+/W+nyDuhTcHfM93g1wucPjWVLJEefjdohbRZqwqFIBRWQj5JnPpuY ooGlCDij7T/h+g/p8c6DQccf89+F7T7b+P1D9Nf145545DxW7v4c6Td0rTtGlnsv S06ARQxWWNuISrTlox2oIbLyQ05oYLVvstVSIxSSxOhHw8G0tX9W3q963qEccK2b cvcd4VED7GsRWXhkkhVZLEcksNfuCZ5N6xurBu7Lu3xhM5U3IOHKDLSGbcFF674v psbyNEzJlCaoLCNr7255nn3FnrMtY3TNarVbKVMxlDQ0ZTWM63aTcKlYXi6CTYJJ 45OQ2fKOMrfS6DTMq9QuCMj3h1VunDH1wyEwttKQYKPsndRzy3Z2sC6i4w6hT1PG GKaVCWq1vI+PWcllo5zJKoqyaJVvz2+0+BL2HgQDfYNf6tbH43/XewKI8e018fTX Gw7h8dg+mgDYD2AA8Am/CDThN3INUmrmPU21Sn2tPoiXT3kmWY6fSsKiS19FTMxi 0iIrVSW1al2lpI1gKL68tbNklKOXdTWlPvs2ClpVjVBasRElJdQP8sPecGdlhgTI CSGWyuSLbI5T6lupjMsFL4wFBeby9d2JMm/k2Vi5yry066gYuHp8Hc2cnG2i5khJ xivVWUaycTbP8NNY4lVotCg/a2V6K5uFrWAb0rirNWHMB9UK+aKyaayBlyTgoN41 6eGtaFV0zx3JWONlE3cotdjLObXXq8iacn4ViyYqJuUTtWquagtd8CA6/wD0Gvt+ vIh319t8+05DQa39g7B+offnjuIbAB73DUfSEF7SU0dbAgrQrpMUK/BV7CSVtICC Gnfrz7ob9V2V2MEqpGrMPlbaQwCpr0ta818xmWWU3pJCLEsLLNd/6k9aWIq9WdV2 qJEJYgHJBI2/obxv1RdO0Vki+XigWTEFMoeTOsOSv8tD2CLxpHSz7H+A+nZabZ2N OLtEerP1dbK2cRbyGOlipxs9Gz7yWJVgjpmUngcRY3yrjS0O37quZR6fKv1TxfSb ht5jTJdnXx3Xsaw+XckXqzZK6k1mc03jj4/q+TWETZ4qrwCrhq0dQz1pLMGgx6xX go4b+0D/ANo77/f7gHH9R+/fnxwLP/h/tvX3D7cBwGza439Kkn4Q6TFK80Op3BIa 2nV+5NBWnklXS2EdcX3dQb0NmgqaXqteXamo0gUkMbMGU6fXl10RJKlfb3bUpVJZ YljN1d0pqqpxWeG0WuU5Uy1WwQU3BcHbjC2VKLL5OzbL5gzdhu89SdexljGo4uzl X7BRcMxj8W0tLucnPIDLWR8W2ilSuSopivBQDTIcxSvxewQScqzqkwmQjaUI7wHU P03zPVLOyNhXqU2tExGFoi2Wxzc6m+juoNPHrXJru2Fk7/aaTgnHcjPOLtN4Osz4 1liqfTLung1ygSdeqSsR+JYbFZAJSgOw2Pce4jruIa54+hR7bDZQ8fQsx0H8oj9P ntvYcj8hrvyG97ARDUqX8J9KmlvzNqF2N7mm19OhFZYqaUUhi05GSpFUNeKCi8lB bK0a8cCV7Nq3YhlSZq8lVlPXFyNK0YrV3WvcltOZi9g2Wd7LBp3n7ry2AlowtZle RpYYIIpUMayrNvZXOoHGd1yC/wAe2a6IXC51DC5Zup5nzu6xbL4sYdQdDgcgs8QT VkkcdXPLONG8MDvNWTZ19LzdjWYQsi1olWM3cv6sjISBuN/ZsMfdPFe6ms24XyJl mzVvqcyVi7J1gWgZjEEfmKvpwdCwW6vFnJCIVuzwFdVdZHLG2iQYSNbYzEayZRry QaxTBZTCrFeWck4VmpKfxpYz15/NQj6tTyC8XC2GEsNdkxTM+g7FWbPGzNbn4lyd FJRRhMxL5uKyJFSJlVIQ/htyLkO9ZZsCdmv88vYJZtGsoWO00jomKhIOMKcsfBV6 AhWcbA12DY+osZpDQcbHxjdRdwqi1KquuZQNN+EXd1GNUtV4NMSFXa1Gkb6obY03 UaLRVYGoCLTtOeW/HZnqwX3isLTihkhG8yIQj9dhKj7oZZbjOUWFzIKQrm5TsiSe UWd9q2qVnhjmlrK8TWHlST5Qjah1fOFprGZoy/Zp6i8D5fyP0+dOXUBc6Za60erP jHyFZq06qtHxepkAsZDROW5JB7YSS8TAQRbKwr7EsmjFrqkQlEkJugM30vIGGsfy b/NmC0euyJ6bEH9CzFk+ZoTKMrzu35nn17JV5exOWa9Xq2UafjKFhoymMpxu1m4d KferoJNgk3js+CQNP9QeUQ3vfHICOv78fsGxEBEeV7QeeNDsPjuOwHnY63z87+Ne DN38KtLuGtILQq2ajVDFJU0rT68AgrPqE0mmGpFEkJ0a/Y1W62oaYMRXIZVjnd5V Fgjq/re5B3kMLTQzrMJEsXLUsnclWnGlsTyMz/xCtFSrCpc5evIheJVRu11q51UW KtZRmOkwuWs74py9UsM1vHK3UHZaPbYQJ+2yOWsrzZ8gI1CvxSLCdtE1WKFU4Ylt mG8S0kkjqxMtLpIO5tmRY3zhN2i9WSWxG36u+juMwDkbLMCwwtT4FamP4fDeOICX XmoK6hIMIWMj8OyFdrrJlGzjOasTCx3WbcuoNVB4zeLP/GNvtN8eUB51x5vnj539 /p3H9PHx7PQb8vwI9u4j9w0HfkPnn/e7eJMX4cQwxabFFqShdJF5qMb6Npk1erYu XE1P4ypUkiatUsx6jvk7lWKIGlItGJYFjWbplvVryvbZ6jZvGstllvXElnirwGn2 J50cSzwvU2psmdv+YU2XMhdk60Y/iZ5btt/t2N6AbJ1Tydi/GcDJs6HYYLKdRy1a rO9eOWrex33Jc9T38gwirPbXUcg5jqqCyDOtQCDNjHNEgM7cPMwPaa7BsQHgda5D sAduQ18b+nx4JwZ7+NfbWwANBrtrjjQdthz+nPtNdg39w45DkA+OQ/6a572z07oE Hp3RqOj1u2Yqcbrvhriss8s0zzzWGiV5QJrE0ryzMHIeaR5MAMFATVtVk1fULF6Y vvssp2ySNMY0RI4o4lkZUJSNI1jjG0bY1VSWI3GNJ5sCSAn35RKIGEAHyiHkH1Cl NyAeUTE8uvMGw2UfqFRb1LERYTxDrlUWNFNI5NIVAMsoocXxnH+WoIiYElXZvMrs CFMAbEQEAG69rbHFguCKBl1CFMcSETKoc4FDsJREC+Qg7UUEwgmUpfOcRAo+XPnK EVLPJVRJvGP1AVBRMwpM5FFs3AXItfXFcjX0hMdYDFEhFTqFQMm/TTTjyneJcn/F jfFX/lqzMVH9DHAIGCQpz55OPp7Dg3T0RBXsz7bDSAAjGySKI8bc5aUEAYPk4znA BOOqcdR08i5Zum0YURaINEoxAQKqq3cC2QSROVJZU4nOALyyxTLEH26YLemkkBCA mmF0ufbhNxDcyyzQrOYW8qjdBUoM0Y+vjGtCrOBTCP8AU9aNRIgRdXzn9AVPQHgo EGQMe3Sako8WcLPlOxcNEVjOGhvQbpNvSeJrNFyuBbKqODKHB0oQVSpAxWA634go zYyHgx/j+wxce3PLuEIj1VWqhkJSLQSnCmk3b0I4Hqp4x4QppJ0dtGsGSyZ3qcso q0OquioqZr4r1lLUtogwytjOW2FV4wSBnDcYzyPGSfcnt6VkgieKJhIiSDbtYOzD dwcxl1ZuRkqQM8YU/KJLqruRfzdps7Ekg7bPyMY1s/c19Zyi9CNXlma6aJBDyik3 XEW5RD0kXBlQAgKl2Y8YTVqLFOlSSUoozO3QVTWbDCppHBZYUSpoimuPqE84rgQh 1CgoUQAPOCh/MAvf8V3uUVBVVig2bprpOH6sXAqqPnDRqQsoikCkbBHNJGTfxrlB FH3yHt0zRXt2jl259Bz42tNv0egzcqMJEyXtyuY9tJqSDBJy4VcLma+ZQrdJ21Ez siQKHVjzrtHAKJlamcpqJgAWpqazP3Ig0DA9pUryJKhU89yQzPGQAMfkjJPP/iGp BXOxTKC5OCrMoCkkDjaAcEnjJYkYOAT1IbCcgIrGiDddSOSO6UekSTViXhJA7t1M PpU5RdCdBIBEqJAEFvQRAiYCmcVdJgWsZaJZY7iYgCsWxXCDJtov5pQP6pHZ30ic 6KjgkMChCtnOzLpexUKkj7NBw4UO3II+jdWjBAUIl89ctyqvE26JpQ3pvPTXMUGa y8tFtvOPrOWRDKnbHUO9IsoqRFM7pN3QYW9sWLQWiHMhHBJCseIFhMnihFVqJzpP EnU4u2BiCh3xlxKppYr47VugRQEieH1gmDKWglK7hkGNsNyCV8DOQfA9s9Y3wlhu YMDINwR0DkgjlS3AJHCkgpkDcCOOjmOsETXKMcrGQVRiY9lM+QwubKUyoA5mTIKq touvqx5T7Kmr5k02ZUA96jKqt1/RcojuL5th6s2BRKRy9l1FVE12r5NU2wUKokVd Ot2BEiyIIJpHBUrRZJmYhQSVUExCjohJoVBw9ViCEhl4Zd24RBddBsoyUZlXOYXI TJ4RNsRMCnKo2eBEh5QWbuysyFV8O8KpanTpw+cRZkf8tukdyeafk9swRMLpwUxk 49oVUjdwq69AV1iD6BEzKKJCJipOSxSzSyyw0pIYmdmWNI22xoThfqcbRnJPIBOT 5LTmNI3QSEgNsDSsu8qpBBbbgZHGcAHwMHq19YkFCVtVFqqi3WfJLpJOEWCplFDp snrYDskW2PIk5VPOBEwBV0CoIlUAHDfyprBMUFMTSQLpyEgrJFVlPMmZrGWyMjUG x3rVNNFy1bFTdOHZFiLGUcKuXRl3C6qRziRugopV9q3tSkK9jkmaPuQBdDyryMgJ UyvzrBHisB2qgkF2oqTSKAFBAwCi3M5MJThJTM9hKgRyEMmKhUwI08qZ3pVigmB0 FFVCx5ClMYAABWK1VKmAFUTUUUOO61bqWnlk2wSECR+e2RjaSj5OP6XBQknG5SoJ YY6cjuLHF2xKm35GO7tM2cggK7ZdRkg7VYLjyOOjjH9qdurFkRk5nrhMpw1kiWxW thCzA2i252casRiKyM4g4O4JIIvE2ijpL+ZkhEtyGIgmZNKUE5H3RDKqpPXIKAyM us6hpYyhv/SAQzgV7Aok2MnsotilJ5nYh5lDKecBLXyMfWZJ4ggSKiwBduRykZEE HDn0BbIogsVsWL0u0KZsgii8cLFTNv1DAV24Mkr2On9gXbKrDGRyjVuBxO4ICBgK RQDPEjrOiRqyqKKiIsHJznVEiDZ44XAfQRTO8iy6dZlkaT4aTGACQrgAxxIZMgIg GCWbIByDnOMdZMseeZE5wch1Pnx4Pv8AT298dWBLIICBCmjwMJ0yioZWDiU1DHEI sSmXK/kFyNjFSKG2YiUrvyCqon51TeWgtpcxbDqLs1yXNIpKBI1pum7O/ZtI1kKk JJMlmqbBiqFYBc5YJFI6yjBV6iioBnKnqLlXXmo69rT9ETwDYDJpODGTbsklEkyC o2SOUhyxaIOVDNy+4Km4RKcF0gSQA5ROuiOWK0SlcqNhNNQrRjD+5Yzkq5RTaFKz bxzSRF+7WInGsz+3QKoi/cOkzidqg0dHATLPBA+0GnXq7yutSf5oijbo3CxqeWJY jGTwec44x1us8OwoGUvIVAwyHPKkD82R/b9T467uqN4ymqYxbO36wCnbI59HnUsD R+ocicdKFcKtWbUCHWcLIgiiZ+isf2xVkilMmqmZcnpa2GFmMKPE3D2OXjxqdkQk ElJ0v8/nSkzqMVWfqnMgoc4ogUrnQuhO1UH+QVCDFsvky4rO2STemtnAuVEXkUd2 2eQSyqTto8RcIqOVYVuDCQYtXDt2EUgK8u3Ys3kgduk7aIt3fdK3csbHpIPGKrZz Mv12yUclW13ar+TkGLmXftWRI5Nwq4FFqWbcAmlHlalbR3u/UbuiGBvIGj6p2YkF KQpC+8yMoXO7AKFWRVUgsoX5stnIyCcPJYhVVUt8wBOB835sZIxnj5Rn2GPYg9SV gu2wilNbV5mWET/BGcakq0dPgUXBVZV07XdGaoH9RumsuBhKkUTpIp6TMBECCgLX EzEFD5XsTpnOxZH8+1Ko9FBZisoDxB3JLlYESFY5wcs26DFigUqaSaSTRoqkKIiY hGGGd3d7MuSsYKJRT9ozFy8ORONfLNRcuUGJGMYESmykl0nrn2zhuwkBdMWThBy7 SKks1FV7YV+anXEe7BpJxihiPpNNR5jKT9yj7E6zB4oqgqlEv0SLNnLU8azFiZ5L tRXfQrOQaIKuj7Q6DqUjzbKUmWGGhIG5ACCzFWYsAxZck4AJUL56jvYrRBjNIoyA y4OeDnHKnBJ9hkng8dMbyztazbsoTVfl2jybmSMV2G2rB0b1BIyQe+/hYI6Ei5Wi 2zN4ZowIoi9dm9smRNJI4p+PmpyceWNfuE2hmi8k/VdIJA2ctCFKs5dqyTlw1dA2 ctnrqQEzoSHbAk7O+kJFQFXLor1wWrY5tH42yTIpX5d4s7kTSDFjDqsbZHLHjjqN fbNlmj1s8CSRUTN5lZhlGsEAM4dOiLecpDUuFrGo4UUPGOCEXVOf2yTIUm6ZFQTE SAXyibypmBT0ygKZSkV9IxTemQ4EIvTWqsrvJQkRg6KQQpYbNuchCQMAgEcMOQR1 mLVKDVjXCxmZpRKLOQG7ZVAIyCmWVSrFSW25kfA5JOr/APCvSQcXxgspz5VieUxv KIFOAj6Z1AMkt6iZDCB1E/TN6qZTpF8pjAYF4sL/AAkOnq2zuTq9FIx71Fs4eNFJ J2REBCNiiOESyEioCnkKJGiBzKeUxg9QwJpE2dQvmXi5z2K2mR061uQJKKsZKbJG ZeQMNtBx4OM+RkjPPUrS6s08UrwoGTvNgkgA8L4JIz9eM44J8dVU8c+UNebXO9f2 8LwvH1F68fdceONB9A/oHheF4XS6Wg+gf0DwtB9A/oHheF4XS6Wg+gf0DwtB9A/o HheF4XS6Wg+gf0DwtB9A/oHheF4XS658LwvC8LpdLwvC8Lwul0vC8LwvC6XS8Lwv C8LpdLx9FABHQ/T/AKeF4XhdZHkfqP8APp3jYJhKLESdkOchxADAUwB3EPqUfr9P E6VfAeN5kEjP4tdUVQAT6XTDYmPoR17ceR2I7775+R2vC8cD/FOSQK2HcYJAwzDA OcgYPAOB/YfTrq3oVEJ5VTynlQf+37dTix6UcKK7eK1ZA7kWYsRUMhGDtsLYzTyi T8N9P1fT/wA0HPk90D3/AMQBYH/+0+PIv0eYHVMQVKp5xIInJ5lGw+Q5iHSMYu2Y +UxklFExENCJFDkEfKYQFeF48w3CWLhiWDMWYMSQzEqSzA5ySQCSecgfTrtdcle2 ykqyxqFZThlAGAFIwQACQACBgke56YpPpGwh6egragBvWgXQ5AN63/sn2D9fnfgD V6QcFkQUbp1UiaSrork4EBiCgrCZwc5irewFZMFlHa6rkiShE3SwpruSqqoInTXh eHoCRGmCRtUKMHGFKrkD6A4GQODgdA7Kq1h2ZVZmfcWYAktuJ3EkZJzzk856IYno 1wIY4FGqGD1DlMoIKtwMobyppeY4+z2YwJkTIAm2PlIQv+koB4PUOjLAYpAX8qnA AANCC6AD8/8A2nHb48LwvEcMwJAYgbx7n3LE/wBzyfqepPbTb+RPzY/KPAHA8e2B 0KznRpgUyJyjV1QDQh/K4RDvsf8A6TwPwfRn0/NpB65ZUxJiL54Ltwm1USAh1RTT bJiooq3VcuDItGrRmks7cOHANWrdE6xypF0vC8Obm2E5OQSQcnIPzDI+nH06jsiZ I2LjJ42j6/p1Pcb0c9PzmNBgejMPZGK2KZsKDFYn+zxysWbyncsl1kiO2jlwm8bI qptHBFCombg3btUUCAnSBgpuQSo1X0yidRQSkUbkKKiyhlVVBKVoUBOqqodVQwh5 lFDnOYRMYRFeF4iv+cf/AJEftkcfp1oY4/8A608r/Sv1H26fG3Shg9M7g6NPZpgu Y5wKZBg6FuUUH7YiTVw+YunaJEUH7kqQlcCqCgoujKGeNWzhLpHpEwScD+rUSLHE AFFRRVMTtVfMXa7cSoFKCpkfVaj6pVU/QcLACYK+mqmvC8O5IJAJwN2Bk4HB8D2/ brPbj/8ArT2/oX28e3t7deRTo8wQcwAerGOAiQ2jrIGADEOByGABaf6iHKU5R7lO AGDQgAgLTPRhgJQB81VUD+YR0VdAAETCBjDr2ncxjmEwhyIiIiI7Ha8LwldwQAzA ZHAYgf2B6djijyP5aeT/AEL/AOP2+566SdGGAV2KRFKkXTZAyKYk9ikcxDLruBFd RKPIo6VBRc5SrujLLkQKg1KoDZs3SSA5TowwCLtMoVEiREk27ZJJsDBogmkxQSQb +VBrHoogoCaCZlVhIKzhbzuXCirlVVY68LxLEsoXiWQc54dhypXafPkZOD7ZOOnl ii3N/Lj8MPyL4JGR48HAz9cDojiukXBjREQRqogcTkMVYzgoqEKmChDJlAECpCRb 1CmUE6Z1AMin6SiRRVKrIkH0pYWMuQ564c5gAoAJ1kh4KAFKX/02/KUoABQ7AHAc AHheF43jmmAwJpQOTgSOBkYAOM+wYgfTJx5PUOzDEXGYoz5H5F8Z8eOrK1Lpaww1 BBVOrIKCkBjkI6TZPW/mVSAigmavGS7Y4mKBQ2dIwlFNM5RKdMhimqPSlhLaf/lN Hf8AIO9ob2OgH/5b7Bre/C8LxHs2Jz5mlOMYzI5xgKB/V9OP046dqwwgHEUY4zxG o5yefHWw3T/07YkwzDMZKgVdKKlJaFbEfyR11XDpZFcjZ0qgUTCVFFEy5EziRBFP zCmTzCby+F4XheOM35ZJbc7yyPK+8jdI7O2BwBuYk4A4AzgDgddHqIkdeJURUXYp 2ooUZIGTgADJ9z79f//Z ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline; filename=menu-left.jpg Content-Type: image/jpeg; name=menu-left.jpg Content-Location: http://www.gchd.cz/img/menu-left.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAT Q3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQH/wAARCAAeAA8DASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAA AAAAAAgJ/8QAHxAAAgEEAwEBAAAAAAAAAAAAAwQFAAIGBwEICRMW/8QAFwEAAwEA AAAAAAAAAAAAAAAAAwQICf/EAB8RAAICAgMBAQEAAAAAAAAAAAECAwQFEQYSIQAx Qf/aAAwDAQACEQMRAD8Ah/0E7s7C7v8AYTNtjZDkc4xr1fIZVXUuGOMHFE4hhQWL 1oUK0PwXlJeYdjgrtT0gMAmZKSKwye0fN/xHC9KVs5hMLjePYqjhcTWSpj8dXjrV oUVRpI1C93Khe80pBkmlI7SyszsSzH6F7duxesz27UjS2LEjSyuxJJZiSQNk6Ufi qPFUADwfKVrl62ebyPQTb6v4jKV5zUmwyXyWCRUgd8+X40sS576ws2cyVqUgFAyD IE5UT5GnVuFjNqgOQ1g8jaW41yLGcswmP5Bh3lkx+ShE0BnhaCZdEq8csTb6yRur I/RnjLKTHI6FWJMhQsYy5YoW1VbFaQxyBHDrsf1WXwqRoj8Oj6Adgf/Z ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://www.gchd.cz/img/inquiry-fg.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAT Q3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQH/wAARCAAKAAMDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAA AAAAAAYI/8QAJBAAAQIBDQAAAAAAAAAAAAAAAQAEBgIFCBEUFiFRVoGRltT/xAAU AQEAAAAAAAAAAAAAAAAAAAAJ/8QAJhEAAQAFDQAAAAAAAAAAAAAAAQACAwRhBQYH ERghJlZlkpTV8P/aAAwDAQACEQMRAD8A3+KR7ICq2RBhm8fE8mQSdyiuLjQTo+Fu vzT5EQS2f1c+zn5D9DVoeuqSYUjMwBhqS9rt16f/2Q== ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline; filename=mapa-doppler-s.png Content-Type: image/png; name=mapa-doppler-s.png Content-Location: http://www.gchd.cz/img/mapa-doppler-s.png Content-Transfer-Encoding: Base64 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 ------------FgkmpfQsCzxrMiKK0NAZoj Content-Disposition: inline; filename=favicon.htm Content-Type: text/html; name=favicon.htm Content-Location: http://www.gchd.cz/aktualita/favicon.ico Content-Transfer-Encoding: 8bit Gymnázium Christiana Dopplera - matematika, fyzika a živé jazyky ------------FgkmpfQsCzxrMiKK0NAZoj--