PD9waHAKLyoqCiAqIFNjaGVtYSBKU09OLUxEOiBNdXNpY0V2ZW50LCBSZXZpZXcsIFBlcnNvbiwgTmV3c0FydGljbGUKICogR29vZ2xlIE5ld3MgU2l0ZW1hcCBlbmRwb2ludDogL25ld3Mtc2l0ZW1hcC54bWwKICogU2hvcnRjb2RlIFtkaXN0cmlidXRpZV0gKyBbYXJ0aXN0IG51bWU9IlgiIHJvbD0iWSIgdm9jZT0iWiJdCiAqIG1hZGFsaW5nZW9yZ2Vncm96YS5ybyAtIG11LXBsdWdpbgogKi8KCi8vIOKUgOKUgOKUgCDDjm5yZWdpc3RyYXJlIG1ldGEgc3BlY3RhY29sX2RhdGVfc29ydCAobmVjZXNhcsSDIHBlbnRydSBSRVNUIHdyaXRlICsgV1BfUXVlcnkpIOKUgOKUgAoKYWRkX2FjdGlvbignaW5pdCcsICdtZ2dfcmVnaXN0ZXJfc3BlY3RhY29sX21ldGEnKTsKZnVuY3Rpb24gbWdnX3JlZ2lzdGVyX3NwZWN0YWNvbF9tZXRhKCkgewogICAgcmVnaXN0ZXJfcG9zdF9tZXRhKCdzcGVjdGFjb2wnLCAnc3BlY3RhY29sX2RhdGVfc29ydCcsIFsKICAgICAgICAndHlwZScgICAgICAgICA9PiAnc3RyaW5nJywKICAgICAgICAnc2luZ2xlJyAgICAgICA9PiB0cnVlLAogICAgICAgICdzaG93X2luX3Jlc3QnID0+IHRydWUsCiAgICAgICAgJ2F1dGhfY2FsbGJhY2snPT4gJ19fcmV0dXJuX3RydWUnLAogICAgICAgICdkZWZhdWx0JyAgICAgID0+ICcnLAogICAgXSk7Cn0KCi8vIOKUgOKUgOKUgCBBcmhpdsSDIHNwZWN0YWNvbGUg4oCUIHNvcnRhcmUgY3Jvbm9sb2dpY8SDIEFTQywgZG9hciB2aWl0b2FyZSArIGF6aSDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmFkZF9hY3Rpb24oJ3ByZV9nZXRfcG9zdHMnLCAnbWdnX3NwZWN0YWNvbF9hcmNoaXZlX3F1ZXJ5Jyk7CmZ1bmN0aW9uIG1nZ19zcGVjdGFjb2xfYXJjaGl2ZV9xdWVyeSgkcXVlcnkpIHsKICAgIGlmIChpc19hZG1pbigpIHx8ICEkcXVlcnktPmlzX21haW5fcXVlcnkoKSkgcmV0dXJuOwogICAgJHB0ID0gJHF1ZXJ5LT5nZXQoJ3Bvc3RfdHlwZScpOwogICAgJGlzX3NwZWN0YWNvbF9hcmNoaXZlID0gJHF1ZXJ5LT5pc19wb3N0X3R5cGVfYXJjaGl2ZSgnc3BlY3RhY29sJykKICAgICAgICB8fCAoJHB0ID09PSAnc3BlY3RhY29sJyAmJiAkcXVlcnktPmlzX2FyY2hpdmUoKSk7CiAgICBpZiAoISRpc19zcGVjdGFjb2xfYXJjaGl2ZSkgcmV0dXJuOwoKICAgIC8vIFRFU1QgSVpPTEFUOiBET0FSIHBvc3RzX3Blcl9wYWdlCiAgICAkcXVlcnktPnNldCgncG9zdHNfcGVyX3BhZ2UnLCAyMCk7Cn0KCi8vIOKUgOKUgOKUgCBHb29nbGUgTmV3cyBTaXRlbWFwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBGxINyxIMgcmV3cml0ZSBydWxlcyDigJQgdmVyaWZpY8SDIFJFUVVFU1RfVVJJIGRpcmVjdCDDrm4gJ3BhcnNlX3JlcXVlc3QnCgphZGRfYWN0aW9uKCdwYXJzZV9yZXF1ZXN0JywgJ21nZ19uZXdzX3NpdGVtYXBfaW50ZXJjZXB0Jyk7CmZ1bmN0aW9uIG1nZ19uZXdzX3NpdGVtYXBfaW50ZXJjZXB0KCkgewogICAgJHVyaSA9IHRyaW0ocGFyc2VfdXJsKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddID8/ICcnLCBQSFBfVVJMX1BBVEgpLCAnLycpOwogICAgaWYgKCR1cmkgIT09ICduZXdzLXNpdGVtYXAueG1sJykgcmV0dXJuOwogICAgbWdnX25ld3Nfc2l0ZW1hcF9vdXRwdXQoKTsKfQoKZnVuY3Rpb24gbWdnX25ld3Nfc2l0ZW1hcF9vdXRwdXQoKSB7CgogICAgJHBvc3RzID0gZ2V0X3Bvc3RzKFsKICAgICAgICAncG9zdF90eXBlJyAgICAgID0+ICdzdGlyZScsCiAgICAgICAgJ3Bvc3Rfc3RhdHVzJyAgICA9PiAncHVibGlzaCcsCiAgICAgICAgJ3Bvc3RzX3Blcl9wYWdlJyA9PiAxMDAwLAogICAgICAgICdkYXRlX3F1ZXJ5JyAgICAgPT4gW1snYWZ0ZXInID0+ICcyIGRheXMgYWdvJ11dLAogICAgICAgICdvcmRlcmJ5JyAgICAgICAgPT4gJ2RhdGUnLAogICAgICAgICdvcmRlcicgICAgICAgICAgPT4gJ0RFU0MnLAogICAgXSk7CgogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD1VVEYtOCcpOwogICAgaGVhZGVyKCdYLVJvYm90cy1UYWc6IG5vaW5kZXgnKTsKCiAgICBlY2hvICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PicgLiAiXG4iOwogICAgZWNobyAnPHVybHNldCB4bWxucz0iaHR0cDovL3d3dy5zaXRlbWFwcy5vcmcvc2NoZW1hcy9zaXRlbWFwLzAuOSInIC4gIlxuIjsKICAgIGVjaG8gJyAgICAgICAgeG1sbnM6bmV3cz0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NjaGVtYXMvc2l0ZW1hcC1uZXdzLzAuOSI+JyAuICJcbiI7CgogICAgZm9yZWFjaCAoJHBvc3RzIGFzICRwb3N0KSB7CiAgICAgICAgJHRpdGxlID0gZXNjX3htbChnZXRfdGhlX3RpdGxlKCRwb3N0KSk7CiAgICAgICAgJHVybCAgID0gZXNjX3VybChnZXRfcGVybWFsaW5rKCRwb3N0KSk7CiAgICAgICAgJGRhdGUgID0gZ2V0X3RoZV9kYXRlKCdjJywgJHBvc3QpOwoKICAgICAgICBlY2hvICIgIDx1cmw+XG4iOwogICAgICAgIGVjaG8gIiAgICA8bG9jPnskdXJsfTwvbG9jPlxuIjsKICAgICAgICBlY2hvICIgICAgPG5ld3M6bmV3cz5cbiI7CiAgICAgICAgZWNobyAiICAgICAgPG5ld3M6cHVibGljYXRpb24+XG4iOwogICAgICAgIGVjaG8gIiAgICAgICAgPG5ld3M6bmFtZT5tYWRhbGluZ2VvcmdlZ3JvemEucm88L25ld3M6bmFtZT5cbiI7CiAgICAgICAgZWNobyAiICAgICAgICA8bmV3czpsYW5ndWFnZT5ybzwvbmV3czpsYW5ndWFnZT5cbiI7CiAgICAgICAgZWNobyAiICAgICAgPC9uZXdzOnB1YmxpY2F0aW9uPlxuIjsKICAgICAgICBlY2hvICIgICAgICA8bmV3czpwdWJsaWNhdGlvbl9kYXRlPnskZGF0ZX08L25ld3M6cHVibGljYXRpb25fZGF0ZT5cbiI7CiAgICAgICAgZWNobyAiICAgICAgPG5ld3M6dGl0bGU+eyR0aXRsZX08L25ld3M6dGl0bGU+XG4iOwogICAgICAgIGVjaG8gIiAgICA8L25ld3M6bmV3cz5cbiI7CiAgICAgICAgZWNobyAiICA8L3VybD5cbiI7CiAgICB9CgogICAgZWNobyAnPC91cmxzZXQ+JzsKICAgIGV4aXQ7Cn0KCmFkZF9hY3Rpb24oJ3dwX2hlYWQnLCAnbWdnX291dHB1dF9zY2hlbWEnLCAyMCk7CgpmdW5jdGlvbiBtZ2dfb3V0cHV0X3NjaGVtYSgpIHsKICAgIGlmICghaXNfc2luZ3VsYXIoKSkgcmV0dXJuOwogICAgJHBvc3QgPSBnZXRfcG9zdCgpOwogICAgaWYgKCEkcG9zdCkgcmV0dXJuOwoKICAgICRzY2hlbWEgPSBudWxsOwoKICAgIGlmICgkcG9zdC0+cG9zdF90eXBlID09PSAnc3BlY3RhY29sJykgewogICAgICAgICRzY2hlbWEgPSBtZ2dfbXVzaWNfZXZlbnRfc2NoZW1hKCRwb3N0KTsKICAgIH0gZWxzZWlmICgkcG9zdC0+cG9zdF90eXBlID09PSAncG9zdCcgJiYgaGFzX2NhdGVnb3J5KCdyZWNlbnppaScsICRwb3N0KSkgewogICAgICAgICRzY2hlbWEgPSBtZ2dfcmV2aWV3X3NjaGVtYSgkcG9zdCk7CiAgICB9IGVsc2VpZiAoJHBvc3QtPnBvc3RfdHlwZSA9PT0gJ3Bvc3QnICYmIGhhc19jYXRlZ29yeSgnY2F0ZWdvcmllLWFydGlzdGknLCAkcG9zdCkpIHsKICAgICAgICAkc2NoZW1hID0gbWdnX3BlcnNvbl9zY2hlbWEoJHBvc3QpOwogICAgfSBlbHNlaWYgKCRwb3N0LT5wb3N0X3R5cGUgPT09ICdhcnRpc3RpJykgewogICAgICAgICRzY2hlbWEgPSBtZ2dfcGVyc29uX3NjaGVtYSgkcG9zdCk7CiAgICB9IGVsc2VpZiAoJHBvc3QtPnBvc3RfdHlwZSA9PT0gJ3N0aXJlJykgewogICAgICAgICRzY2hlbWEgPSBtZ2dfbmV3c19hcnRpY2xlX3NjaGVtYSgkcG9zdCk7CiAgICB9CgogICAgaWYgKCEkc2NoZW1hKSByZXR1cm47CgogICAgZWNobyAnPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIiBjbGFzcz0ibWdnLXNjaGVtYSI+JyAuICJcbiI7CiAgICBlY2hvIHdwX2pzb25fZW5jb2RlKCRzY2hlbWEsIEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFIHwgSlNPTl9QUkVUVFlfUFJJTlQpOwogICAgZWNobyAiXG48L3NjcmlwdD5cbiI7Cn0KCmZ1bmN0aW9uIG1nZ19tdXNpY19ldmVudF9zY2hlbWEoJHBvc3QpIHsKICAgICR2ZW51ZSA9IGdldF9wb3N0X21ldGEoJHBvc3QtPklELCAnc3BlY3RhY29sX3ZlbnVlJywgdHJ1ZSk7CiAgICAkZGF0ZSAgPSBnZXRfcG9zdF9tZXRhKCRwb3N0LT5JRCwgJ3NwZWN0YWNvbF9kYXRlJywgIHRydWUpOwogICAgJHRpbWUgID0gZ2V0X3Bvc3RfbWV0YSgkcG9zdC0+SUQsICdzcGVjdGFjb2xfdGltZScsICB0cnVlKTsKICAgICR0eXBlICA9IGdldF9wb3N0X21ldGEoJHBvc3QtPklELCAnc3BlY3RhY29sX3R5cGUnLCAgdHJ1ZSk7CgogICAgJHN0YXJ0X2RhdGUgPSBtZ2dfcm9fZGF0ZV90b19pc28oJGRhdGUsICR0aW1lKTsKCiAgICAkc2NoZW1hID0gWwogICAgICAgICdAY29udGV4dCcgICAgICAgICAgICA9PiAnaHR0cHM6Ly9zY2hlbWEub3JnJywKICAgICAgICAnQHR5cGUnICAgICAgICAgICAgICAgPT4gJ011c2ljRXZlbnQnLAogICAgICAgICduYW1lJyAgICAgICAgICAgICAgICA9PiBnZXRfdGhlX3RpdGxlKCRwb3N0KSwKICAgICAgICAndXJsJyAgICAgICAgICAgICAgICAgPT4gZ2V0X3Blcm1hbGluaygkcG9zdCksCiAgICAgICAgJ2V2ZW50U3RhdHVzJyAgICAgICAgID0+ICdodHRwczovL3NjaGVtYS5vcmcvRXZlbnRTY2hlZHVsZWQnLAogICAgICAgICdldmVudEF0dGVuZGFuY2VNb2RlJyA9PiAnaHR0cHM6Ly9zY2hlbWEub3JnL09mZmxpbmVFdmVudEF0dGVuZGFuY2VNb2RlJywKICAgIF07CgogICAgaWYgKCRzdGFydF9kYXRlKSB7CiAgICAgICAgJHNjaGVtYVsnc3RhcnREYXRlJ10gPSAkc3RhcnRfZGF0ZTsKICAgIH0KCiAgICBpZiAoJHZlbnVlKSB7CiAgICAgICAgJHNjaGVtYVsnbG9jYXRpb24nXSA9IFsKICAgICAgICAgICAgJ0B0eXBlJyAgID0+ICdQZXJmb3JtaW5nQXJ0c1RoZWF0ZXInLAogICAgICAgICAgICAnbmFtZScgICAgPT4gJHZlbnVlLAogICAgICAgICAgICAnYWRkcmVzcycgPT4gWydAdHlwZScgPT4gJ1Bvc3RhbEFkZHJlc3MnLCAnYWRkcmVzc0NvdW50cnknID0+ICdSTyddLAogICAgICAgIF07CiAgICAgICAgJHNjaGVtYVsnb3JnYW5pemVyJ10gPSBbJ0B0eXBlJyA9PiAnT3JnYW5pemF0aW9uJywgJ25hbWUnID0+ICR2ZW51ZV07CiAgICB9CgogICAgJHRodW1iX2lkID0gZ2V0X3Bvc3RfdGh1bWJuYWlsX2lkKCRwb3N0LT5JRCk7CiAgICBpZiAoJHRodW1iX2lkKSB7CiAgICAgICAgJGltZyA9IHdwX2dldF9hdHRhY2htZW50X2ltYWdlX3NyYygkdGh1bWJfaWQsICdmdWxsJyk7CiAgICAgICAgaWYgKCRpbWcpIHsKICAgICAgICAgICAgJHNjaGVtYVsnaW1hZ2UnXSA9ICRpbWdbMF07CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkdHlwZSkgewogICAgICAgICRzY2hlbWFbJ2Rlc2NyaXB0aW9uJ10gPSB1Y2ZpcnN0KCR0eXBlKTsKICAgIH0KCiAgICByZXR1cm4gJHNjaGVtYTsKfQoKZnVuY3Rpb24gbWdnX3Jldmlld19zY2hlbWEoJHBvc3QpIHsKICAgICRvdmVyYWxsX3JhdGluZyA9IGdldF9wb3N0X21ldGEoJHBvc3QtPklELCAneWFzcl9vdmVyYWxsX3JhdGluZycsIHRydWUpOwoKICAgICRzY2hlbWEgPSBbCiAgICAgICAgJ0Bjb250ZXh0JyAgICAgID0+ICdodHRwczovL3NjaGVtYS5vcmcnLAogICAgICAgICdAdHlwZScgICAgICAgICA9PiAnUmV2aWV3JywKICAgICAgICAndXJsJyAgICAgICAgICAgPT4gZ2V0X3Blcm1hbGluaygkcG9zdCksCiAgICAgICAgJ25hbWUnICAgICAgICAgID0+IGdldF90aGVfdGl0bGUoJHBvc3QpLAogICAgICAgICdkYXRlUHVibGlzaGVkJyA9PiBnZXRfdGhlX2RhdGUoJ2MnLCAkcG9zdCksCiAgICAgICAgJ2F1dGhvcicgICAgICAgID0+IG1nZ19hdXRob3Jfc2NoZW1hKCksCiAgICAgICAgJ2l0ZW1SZXZpZXdlZCcgID0+IFsKICAgICAgICAgICAgJ0B0eXBlJyA9PiAnRXZlbnQnLAogICAgICAgICAgICAnbmFtZScgID0+IGdldF90aGVfdGl0bGUoJHBvc3QpLAogICAgICAgIF0sCiAgICAgICAgJ3B1Ymxpc2hlcicgICAgID0+IFsKICAgICAgICAgICAgJ0B0eXBlJyA9PiAnT3JnYW5pemF0aW9uJywKICAgICAgICAgICAgJ25hbWUnICA9PiAnbWFkYWxpbmdlb3JnZWdyb3phLnJvJywKICAgICAgICAgICAgJ3VybCcgICA9PiBob21lX3VybCgpLAogICAgICAgIF0sCiAgICBdOwoKICAgIGlmICgkb3ZlcmFsbF9yYXRpbmcgIT09ICcnICYmICRvdmVyYWxsX3JhdGluZyAhPT0gZmFsc2UpIHsKICAgICAgICAkc2NoZW1hWydyZXZpZXdSYXRpbmcnXSA9IFsKICAgICAgICAgICAgJ0B0eXBlJyAgICAgICA9PiAnUmF0aW5nJywKICAgICAgICAgICAgJ3JhdGluZ1ZhbHVlJyA9PiAoZmxvYXQpICRvdmVyYWxsX3JhdGluZywKICAgICAgICAgICAgJ2Jlc3RSYXRpbmcnICA9PiA1LAogICAgICAgICAgICAnd29yc3RSYXRpbmcnID0+IDEsCiAgICAgICAgXTsKICAgIH0KCiAgICByZXR1cm4gJHNjaGVtYTsKfQoKZnVuY3Rpb24gbWdnX3BlcnNvbl9zY2hlbWEoJHBvc3QpIHsKICAgICRzY2hlbWEgPSBbCiAgICAgICAgJ0Bjb250ZXh0JyA9PiAnaHR0cHM6Ly9zY2hlbWEub3JnJywKICAgICAgICAnQHR5cGUnICAgID0+ICdQZXJzb24nLAogICAgICAgICduYW1lJyAgICAgPT4gZ2V0X3RoZV90aXRsZSgkcG9zdCksCiAgICAgICAgJ3VybCcgICAgICA9PiBnZXRfcGVybWFsaW5rKCRwb3N0KSwKICAgIF07CgogICAgJHRodW1iX2lkID0gZ2V0X3Bvc3RfdGh1bWJuYWlsX2lkKCRwb3N0LT5JRCk7CiAgICBpZiAoJHRodW1iX2lkKSB7CiAgICAgICAgJGltZyA9IHdwX2dldF9hdHRhY2htZW50X2ltYWdlX3NyYygkdGh1bWJfaWQsICdmdWxsJyk7CiAgICAgICAgaWYgKCRpbWcpIHsKICAgICAgICAgICAgJHNjaGVtYVsnaW1hZ2UnXSA9IFsKICAgICAgICAgICAgICAgICdAdHlwZScgID0+ICdJbWFnZU9iamVjdCcsCiAgICAgICAgICAgICAgICAndXJsJyAgICA9PiAkaW1nWzBdLAogICAgICAgICAgICAgICAgJ3dpZHRoJyAgPT4gKGludCkgJGltZ1sxXSwKICAgICAgICAgICAgICAgICdoZWlnaHQnID0+IChpbnQpICRpbWdbMl0sCiAgICAgICAgICAgIF07CiAgICAgICAgfQogICAgfQoKICAgIC8vIFRheG9ub21pYSBwcmltYXJhIGEgcGFnaW5paSBkZSBhcnRpc3QgKGRpcmlqb3IsIHNvcHJhbmEgZXRjKSDihpIgam9iVGl0bGUKICAgICR0ZXJtcyA9IGdldF90aGVfdGVybXMoJHBvc3QtPklELCAnY2F0ZWdvcnknKTsKICAgIGlmICgkdGVybXMgJiYgIWlzX3dwX2Vycm9yKCR0ZXJtcykpIHsKICAgICAgICAkc2NoZW1hWydqb2JUaXRsZSddID0gJHRlcm1zWzBdLT5uYW1lOwogICAgfQoKICAgIHJldHVybiAkc2NoZW1hOwp9CgpmdW5jdGlvbiBtZ2dfYXV0aG9yX3NjaGVtYSgpIHsKICAgIHJldHVybiBbCiAgICAgICAgJ0B0eXBlJyAgPT4gJ1BlcnNvbicsCiAgICAgICAgJ25hbWUnICAgPT4gJ03Eg2TEg2xpbiBHZW9yZ2UgR3JvemEnLAogICAgICAgICd1cmwnICAgID0+ICdodHRwczovL21hZGFsaW5nZW9yZ2Vncm96YS5yby9tYWRhbGluLWdlb3JnZS1ncm96YS10ZW5vci1jcml0aWMtbXV6aWNhbC8nLAogICAgICAgICdzYW1lQXMnID0+IFsKICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnRpa3Rvay5jb20vQG1hZGFsaW4uZ3JvemEub3BlcmEnLAogICAgICAgICAgICAnaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL21hZGFsaW5nZW9yZ2Vncm96YScsCiAgICAgICAgICAgICdodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL21hZGFsaW4uZ3JvemEub3BlcmEvJywKICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BtYWRhbGluZ2VvcmdlZ3JvemEnLAogICAgICAgIF0sCiAgICBdOwp9CgpmdW5jdGlvbiBtZ2dfbmV3c19hcnRpY2xlX3NjaGVtYSgkcG9zdCkgewogICAgJHNjaGVtYSA9IFsKICAgICAgICAnQGNvbnRleHQnICAgICAgPT4gJ2h0dHBzOi8vc2NoZW1hLm9yZycsCiAgICAgICAgJ0B0eXBlJyAgICAgICAgID0+ICdOZXdzQXJ0aWNsZScsCiAgICAgICAgJ2hlYWRsaW5lJyAgICAgID0+IG1iX3N1YnN0cihnZXRfdGhlX3RpdGxlKCRwb3N0KSwgMCwgMTEwKSwKICAgICAgICAndXJsJyAgICAgICAgICAgPT4gZ2V0X3Blcm1hbGluaygkcG9zdCksCiAgICAgICAgJ2RhdGVQdWJsaXNoZWQnID0+IGdldF90aGVfZGF0ZSgnYycsICRwb3N0KSwKICAgICAgICAnZGF0ZU1vZGlmaWVkJyAgPT4gZ2V0X3RoZV9tb2RpZmllZF9kYXRlKCdjJywgJHBvc3QpLAogICAgICAgICdhdXRob3InICAgICAgICA9PiBtZ2dfYXV0aG9yX3NjaGVtYSgpLAogICAgICAgICdwdWJsaXNoZXInICAgICA9PiBbCiAgICAgICAgICAgICdAdHlwZScgPT4gJ09yZ2FuaXphdGlvbicsCiAgICAgICAgICAgICduYW1lJyAgPT4gJ21hZGFsaW5nZW9yZ2Vncm96YS5ybycsCiAgICAgICAgICAgICd1cmwnICAgPT4gaG9tZV91cmwoKSwKICAgICAgICAgICAgJ2xvZ28nICA9PiBbCiAgICAgICAgICAgICAgICAnQHR5cGUnICA9PiAnSW1hZ2VPYmplY3QnLAogICAgICAgICAgICAgICAgJ3VybCcgICAgPT4gJ2h0dHBzOi8vbWFkYWxpbmdlb3JnZWdyb3phLnJvL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzAyL0lNR18wNjMxLmpwZycsCiAgICAgICAgICAgICAgICAnd2lkdGgnICA9PiAxMzIwLAogICAgICAgICAgICAgICAgJ2hlaWdodCcgPT4gNTYwLAogICAgICAgICAgICBdLAogICAgICAgIF0sCiAgICAgICAgJ2luTGFuZ3VhZ2UnICAgID0+ICdyby1STycsCiAgICBdOwoKICAgICR0aHVtYl9pZCA9IGdldF9wb3N0X3RodW1ibmFpbF9pZCgkcG9zdC0+SUQpOwogICAgaWYgKCR0aHVtYl9pZCkgewogICAgICAgICRpbWcgPSB3cF9nZXRfYXR0YWNobWVudF9pbWFnZV9zcmMoJHRodW1iX2lkLCAnZnVsbCcpOwogICAgICAgIGlmICgkaW1nKSB7CiAgICAgICAgICAgICRzY2hlbWFbJ2ltYWdlJ10gPSBbCiAgICAgICAgICAgICAgICAnQHR5cGUnICA9PiAnSW1hZ2VPYmplY3QnLAogICAgICAgICAgICAgICAgJ3VybCcgICAgPT4gJGltZ1swXSwKICAgICAgICAgICAgICAgICd3aWR0aCcgID0+IChpbnQpICRpbWdbMV0sCiAgICAgICAgICAgICAgICAnaGVpZ2h0JyA9PiAoaW50KSAkaW1nWzJdLAogICAgICAgICAgICBdOwogICAgICAgIH0KICAgIH0KCiAgICAkZXhjZXJwdCA9IGdldF90aGVfZXhjZXJwdCgkcG9zdCk7CiAgICBpZiAoJGV4Y2VycHQpIHsKICAgICAgICAkc2NoZW1hWydkZXNjcmlwdGlvbiddID0gd3Bfc3RyaXBfYWxsX3RhZ3MoJGV4Y2VycHQpOwogICAgfQoKICAgIHJldHVybiAkc2NoZW1hOwp9CgpmdW5jdGlvbiBtZ2dfcm9fZGF0ZV90b19pc28oJGRhdGVfcm8sICR0aW1lID0gJycpIHsKICAgIGlmICghJGRhdGVfcm8pIHJldHVybiAnJzsKICAgICRsdW5pID0gWwogICAgICAgICdpYW51YXJpZScgPT4gJzAxJywgJ2ZlYnJ1YXJpZScgPT4gJzAyJywgJ21hcnRpZScgICAgID0+ICcwMycsCiAgICAgICAgJ2FwcmlsaWUnICA9PiAnMDQnLCAnbWFpJyAgICAgICAgPT4gJzA1JywgJ2l1bmllJyAgICAgID0+ICcwNicsCiAgICAgICAgJ2l1bGllJyAgICA9PiAnMDcnLCAnYXVndXN0JyAgICAgPT4gJzA4JywgJ3NlcHRlbWJyaWUnID0+ICcwOScsCiAgICAgICAgJ29jdG9tYnJpZSc9PiAnMTAnLCAnbm9pZW1icmllJyAgPT4gJzExJywgJ2RlY2VtYnJpZScgID0+ICcxMicsCiAgICBdOwogICAgJHBhcnRzID0gcHJlZ19zcGxpdCgnL1xzKy8nLCB0cmltKCRkYXRlX3JvKSk7CiAgICBpZiAoY291bnQoJHBhcnRzKSA8IDMpIHJldHVybiAnJzsKICAgICR6aSAgID0gc3RyX3BhZCgoaW50KSRwYXJ0c1swXSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpOwogICAgJGx1bmEgPSAkbHVuaVtzdHJ0b2xvd2VyKCRwYXJ0c1sxXSldID8/ICcnOwogICAgJGFuICAgPSAkcGFydHNbMl07CiAgICBpZiAoISRsdW5hIHx8ICEkYW4pIHJldHVybiAnJzsKICAgICRpc28gPSAieyRhbn0teyRsdW5hfS17JHppfSI7CiAgICBpZiAoJHRpbWUpIHsKICAgICAgICAkdCA9IHByZWdfcmVwbGFjZSgnL1teMC05Ol0vJywgJycsICR0aW1lKTsKICAgICAgICBpZiAoc3RybGVuKCR0KSA+PSA0KSAkaXNvIC49ICdUJyAuICR0IC4gJzowMCc7CiAgICB9CiAgICByZXR1cm4gJGlzbzsKfQoKLy8g4pSA4pSA4pSAIFNob3J0Y29kZSBkaXN0cmlidcibaWUgYXJ0aciZdGkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgphZGRfc2hvcnRjb2RlKCdtZ2dfZGlzdHJpYnV0aWUnLCAnbWdnX3NjX2Rpc3RyaWJ1dGllJyk7CmFkZF9zaG9ydGNvZGUoJ21nZ19hcnRpc3QnLCAgICAgJ21nZ19zY19hcnRpc3QnKTsKLy8gQWxpYXN1cmkgc2N1cnRlIChkb2FyIGRhY2EgbnUgc3VudCBkZWphIGlucmVnaXN0cmF0ZSBkZSBhbHQgcGx1Z2luKQphZGRfYWN0aW9uKCdpbml0JywgZnVuY3Rpb24oKSB7CiAgICBpZiAoIXNob3J0Y29kZV9leGlzdHMoJ2Rpc3RyaWJ1dGllJykpIGFkZF9zaG9ydGNvZGUoJ2Rpc3RyaWJ1dGllJywgJ21nZ19zY19kaXN0cmlidXRpZScpOwogICAgaWYgKCFzaG9ydGNvZGVfZXhpc3RzKCdhcnRpc3QnKSkgICAgICBhZGRfc2hvcnRjb2RlKCdhcnRpc3QnLCAgICAgICdtZ2dfc2NfYXJ0aXN0Jyk7Cn0sIDIwKTsKCmZ1bmN0aW9uIG1nZ19zY19kaXN0cmlidXRpZSgkYXR0cywgJGNvbnRlbnQgPSAnJykgewogICAgaWYgKCEkY29udGVudCkgcmV0dXJuICcnOwogICAgJGlubmVyID0gZG9fc2hvcnRjb2RlKCRjb250ZW50KTsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0ibWdnLWRpc3RyaWJ1dGllIj4nIC4gJGlubmVyIC4gJzwvZGl2Pic7Cn0KCmZ1bmN0aW9uIG1nZ19zY19hcnRpc3QoJGF0dHMpIHsKICAgICRhdHRzID0gc2hvcnRjb2RlX2F0dHMoWwogICAgICAgICdudW1lJyA9PiAnJywKICAgICAgICAncm9sJyAgPT4gJycsCiAgICAgICAgJ3ZvY2UnID0+ICcnLAogICAgXSwgJGF0dHMsICdhcnRpc3QnKTsKCiAgICAkbnVtZSA9IHNhbml0aXplX3RleHRfZmllbGQoJGF0dHNbJ251bWUnXSk7CiAgICAkcm9sICA9IHNhbml0aXplX3RleHRfZmllbGQoJGF0dHNbJ3JvbCddKTsKICAgICR2b2NlID0gc2FuaXRpemVfdGV4dF9maWVsZCgkYXR0c1sndm9jZSddKTsKCiAgICBpZiAoISRudW1lKSByZXR1cm4gJyc7CgogICAgJHBvc3QgPSBtZ2dfZmluZF9hcnRpc3QoJG51bWUpOwoKICAgIGlmICghJHBvc3QpIHsKICAgICAgICAvLyBGYWlsLXNhZmU6IGFmaciZZWF6xIMgbnVtZWxlIHNpbXBsdSBmxINyxIMgbGluawogICAgICAgICRsYWJlbCAgPSAkdm9jZSA/ICI8c21hbGw+eyR2b2NlfTwvc21hbGw+IiA6ICcnOwogICAgICAgICRyb2xfZWwgPSAkcm9sICA/ICI8c3BhbiBjbGFzcz1cIm1nZy1hcnRpc3Qtcm9sXCI+eyRyb2x9PC9zcGFuPiIgOiAnJzsKICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9Im1nZy1hcnRpc3QtY2FyZCBtZ2ctYXJ0aXN0LW5vZm91bmQiPicKICAgICAgICAgICAgIC4gIjxzcGFuIGNsYXNzPVwibWdnLWFydGlzdC1uYW1lXCI+eyRudW1lfTwvc3Bhbj57JGxhYmVsfXskcm9sX2VsfTwvZGl2PiI7CiAgICB9CgogICAgJGxpbmsgICAgPSBnZXRfcGVybWFsaW5rKCRwb3N0KTsKICAgICR0aHVtYiAgID0gJyc7CiAgICAkdGh1bWJfaWQgPSBnZXRfcG9zdF90aHVtYm5haWxfaWQoJHBvc3QtPklEKTsKICAgIGlmICgkdGh1bWJfaWQpIHsKICAgICAgICAkaW1nID0gd3BfZ2V0X2F0dGFjaG1lbnRfaW1hZ2Vfc3JjKCR0aHVtYl9pZCwgJ3RodW1ibmFpbCcpOwogICAgICAgIGlmICgkaW1nKSB7CiAgICAgICAgICAgICR0aHVtYiA9ICI8aW1nIHNyYz1cInskaW1nWzBdfVwiIGFsdD1cIiIgLiBlc2NfYXR0cigkbnVtZSkgLiAiXCIgIgogICAgICAgICAgICAgICAgICAgLiAid2lkdGg9XCJ7JGltZ1sxXX1cIiBoZWlnaHQ9XCJ7JGltZ1syXX1cIiBsb2FkaW5nPVwibGF6eVwiPiI7CiAgICAgICAgfQogICAgfQoKICAgICR2b2NlX2VsID0gJHZvY2UgPyAiPHNtYWxsIGNsYXNzPVwibWdnLWFydGlzdC12b2NlXCI+eyR2b2NlfTwvc21hbGw+IiA6ICcnOwogICAgJHJvbF9lbCAgPSAkcm9sICA/ICI8c3BhbiBjbGFzcz1cIm1nZy1hcnRpc3Qtcm9sXCI+eyRyb2x9PC9zcGFuPiIgOiAnJzsKCiAgICByZXR1cm4gJzxkaXYgY2xhc3M9Im1nZy1hcnRpc3QtY2FyZCI+JwogICAgICAgICAuICI8YSBocmVmPVwieyRsaW5rfVwiIGNsYXNzPVwibWdnLWFydGlzdC1saW5rXCI+IgogICAgICAgICAuICR0aHVtYgogICAgICAgICAuICI8c3BhbiBjbGFzcz1cIm1nZy1hcnRpc3QtbmFtZVwiPnskbnVtZX08L3NwYW4+IgogICAgICAgICAuICR2b2NlX2VsCiAgICAgICAgIC4gIjwvYT4iCiAgICAgICAgIC4gJHJvbF9lbAogICAgICAgICAuICc8L2Rpdj4nOwp9CgpmdW5jdGlvbiBtZ2dfZmluZF9hcnRpc3QoJG5hbWUpIHsKICAgIHN0YXRpYyAkY2FjaGUgPSBbXTsKICAgIGlmIChpc3NldCgkY2FjaGVbJG5hbWVdKSkgcmV0dXJuICRjYWNoZVskbmFtZV07CgogICAgLy8gQ2F1dGEgZGlyZWN0IGluIERCIGR1cGEgcG9zdF9uYW1lIChzbHVnKSDigJQgYnlwYXNzZXMgcmVzdHJpY3RpaSBDUFQgcHVibGljbHlfcXVlcnlhYmxlCiAgICBnbG9iYWwgJHdwZGI7CiAgICAkc2x1ZyAgICA9IHNhbml0aXplX3RpdGxlKCRuYW1lKTsKICAgICRwb3N0X2lkID0gJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoCiAgICAgICAgIlNFTEVDVCBJRCBGUk9NIHskd3BkYi0+cG9zdHN9CiAgICAgICAgIFdIRVJFIHBvc3RfbmFtZSA9ICVzIEFORCBwb3N0X3N0YXR1cyA9ICdwdWJsaXNoJyBBTkQgcG9zdF90eXBlID0gJ2FydGlzdGknCiAgICAgICAgIExJTUlUIDEiLAogICAgICAgICRzbHVnCiAgICApKTsKCiAgICAkcmVzdWx0ID0gJHBvc3RfaWQgPyBnZXRfcG9zdCgoaW50KSAkcG9zdF9pZCkgOiBudWxsOwogICAgJGNhY2hlWyRuYW1lXSA9ICRyZXN1bHQ7CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKZnVuY3Rpb24gbWdnX2Rpc3RyaWJ1dGllX3N0eWxlcygpIHsKICAgIGlmICghaXNfc2luZ3VsYXIoKSkgcmV0dXJuOwogICAgZWNobyAnPHN0eWxlPgoubWdnLWRpc3RyaWJ1dGlle2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6MTJweDttYXJnaW46MjBweCAwO30KLm1nZy1hcnRpc3QtY2FyZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjsKICB3aWR0aDoxMjBweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjQ7fQoubWdnLWFydGlzdC1saW5re2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fQoubWdnLWFydGlzdC1saW5rOmhvdmVyIC5tZ2ctYXJ0aXN0LW5hbWV7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9Ci5tZ2ctYXJ0aXN0LWNhcmQgaW1ne3dpZHRoOjkwcHg7aGVpZ2h0OjkwcHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjUwJTsKICBkaXNwbGF5OmJsb2NrO21hcmdpbjowIGF1dG8gNnB4O30KLm1nZy1hcnRpc3QtbmFtZXtkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMWExYTFhO30KLm1nZy1hcnRpc3Qtdm9jZXtkaXNwbGF5OmJsb2NrO2NvbG9yOiM4ODg7Zm9udC1zaXplOjExcHg7bWFyZ2luLXRvcDoycHg7fQoubWdnLWFydGlzdC1yb2x7ZGlzcGxheTpibG9jaztjb2xvcjojOEIwMDAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtc3R5bGU6aXRhbGljO21hcmdpbi10b3A6NHB4O30KLm1nZy1hcnRpc3Qtbm9mb3VuZCAubWdnLWFydGlzdC1uYW1le2NvbG9yOiM1NTU7fQpAbWVkaWEobWF4LXdpZHRoOjQ4MHB4KXsubWdnLWRpc3RyaWJ1dGlle2dhcDo4cHg7fS5tZ2ctYXJ0aXN0LWNhcmR7d2lkdGg6OTBweDt9fQo8L3N0eWxlPicgLiAiXG4iOwp9CmFkZF9hY3Rpb24oJ3dwX2hlYWQnLCAnbWdnX2Rpc3RyaWJ1dGllX3N0eWxlcycsIDUpOwoKLy8g4pSA4pSA4pSAIEF1dGhvciBib3ggcGUgcmVjZW56aWkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgphZGRfZmlsdGVyKCd0aGVfY29udGVudCcsICdtZ2dfYXV0aG9yX2JveF9hcHBlbmQnLCAzMCk7CgpmdW5jdGlvbiBtZ2dfYXV0aG9yX2JveF9hcHBlbmQoJGNvbnRlbnQpIHsKICAgIGlmICghaXNfc2luZ3VsYXIoJ3Bvc3QnKSkgcmV0dXJuICRjb250ZW50OwogICAgJHBvc3QgPSBnZXRfcG9zdCgpOwogICAgaWYgKCEkcG9zdCB8fCAhaGFzX2NhdGVnb3J5KCdyZWNlbnppaScsICRwb3N0KSkgcmV0dXJuICRjb250ZW50OwoKICAgICRhdXRob3JfdXJsICAgPSAnaHR0cHM6Ly9tYWRhbGluZ2VvcmdlZ3JvemEucm8vbWFkYWxpbi1nZW9yZ2UtZ3JvemEtdGVub3ItY3JpdGljLW11emljYWwvJzsKICAgICRhdXRob3JfaW1nICAgPSAnaHR0cHM6Ly9tYWRhbGluZ2VvcmdlZ3JvemEucm8vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDIvSU1HXzA2MzEuanBnJzsKICAgICRzb2NpYWwgPSBbCiAgICAgICAgWydUaWtUb2snLCAgICAnaHR0cHM6Ly93d3cudGlrdG9rLmNvbS9AbWFkYWxpbi5ncm96YS5vcGVyYSddLAogICAgICAgIFsnRmFjZWJvb2snLCAgJ2h0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9tYWRhbGluZ2VvcmdlZ3JvemEnXSwKICAgICAgICBbJ0luc3RhZ3JhbScsICdodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL21hZGFsaW4uZ3JvemEub3BlcmEvJ10sCiAgICAgICAgWydZb3VUdWJlJywgICAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vQG1hZGFsaW5nZW9yZ2Vncm96YSddLAogICAgXTsKICAgICRzb2NpYWxfaHRtbCA9ICcnOwogICAgZm9yZWFjaCAoJHNvY2lhbCBhcyBbJGxhYmVsLCAkdXJsXSkgewogICAgICAgICRzb2NpYWxfaHRtbCAuPSAnPGEgaHJlZj0iJyAuIGVzY191cmwoJHVybCkgLiAnIiBjbGFzcz0ibWdnLWFiLXNvY2lhbCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPicgLiAkbGFiZWwgLiAnPC9hPiAnOwogICAgfQoKICAgICRib3ggPSAnPGRpdiBjbGFzcz0ibWdnLWF1dGhvci1ib3giPicKICAgICAgICAgLiAnPGltZyBzcmM9IicgLiBlc2NfdXJsKCRhdXRob3JfaW1nKSAuICciIGFsdD0iTcSDZMSDbGluIEdlb3JnZSBHcm96YSIgY2xhc3M9Im1nZy1hYi1pbWciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgbG9hZGluZz0ibGF6eSI+JwogICAgICAgICAuICc8ZGl2IGNsYXNzPSJtZ2ctYWItY29udGVudCI+JwogICAgICAgICAuICc8c3Ryb25nIGNsYXNzPSJtZ2ctYWItbmFtZSI+PGEgaHJlZj0iJyAuIGVzY191cmwoJGF1dGhvcl91cmwpIC4gJyI+TcSDZMSDbGluIEdlb3JnZSBHcm96YTwvYT48L3N0cm9uZz4nCiAgICAgICAgIC4gJzxwIGNsYXNzPSJtZ2ctYWItYmlvIj5UZW5vciwgY3JpdGljIG11emljYWwgyJlpIGJsb2dnZXIuIFNjcmllIGRlc3ByZSBvcGVyxIMsIG11emljxIMgY2xhc2ljxIMgyJlpIHNwZWN0YWNvbGUgZGluIFJvbcOibmlhIMiZaSBFdXJvcGEuPC9wPicKICAgICAgICAgLiAnPGRpdiBjbGFzcz0ibWdnLWFiLXNvY2lhbHMiPicgLiB0cmltKCRzb2NpYWxfaHRtbCkgLiAnPC9kaXY+JwogICAgICAgICAuICc8L2Rpdj4nCiAgICAgICAgIC4gJzwvZGl2Pic7CgogICAgcmV0dXJuICRjb250ZW50IC4gJGJveDsKfQoKYWRkX2FjdGlvbignd3BfaGVhZCcsICdtZ2dfYXV0aG9yX2JveF9zdHlsZXMnLCA1KTsKZnVuY3Rpb24gbWdnX2F1dGhvcl9ib3hfc3R5bGVzKCkgewogICAgaWYgKCFpc19zaW5ndWxhcigncG9zdCcpKSByZXR1cm47CiAgICAkcG9zdCA9IGdldF9wb3N0KCk7CiAgICBpZiAoISRwb3N0IHx8ICFoYXNfY2F0ZWdvcnkoJ3JlY2VuemlpJywgJHBvc3QpKSByZXR1cm47CiAgICBlY2hvICc8c3R5bGU+Ci5tZ2ctYXV0aG9yLWJveHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6MTZweDttYXJnaW46MzJweCAwIDE2cHg7cGFkZGluZzoyMHB4OwogIGJhY2tncm91bmQ6I2Y5ZjlmOTtib3JkZXItbGVmdDozcHggc29saWQgIzhCMDAwMDtib3JkZXItcmFkaXVzOjJweDt9Ci5tZ2ctYWItaW1ne3dpZHRoOjgwcHg7aGVpZ2h0OjgwcHg7Ym9yZGVyLXJhZGl1czo1MCU7b2JqZWN0LWZpdDpjb3ZlcjtmbGV4LXNocmluazowO30KLm1nZy1hYi1jb250ZW50e2ZsZXg6MTttaW4td2lkdGg6MDt9Ci5tZ2ctYWItbmFtZXtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxNXB4O21hcmdpbi1ib3R0b206NnB4O30KLm1nZy1hYi1uYW1lIGF7Y29sb3I6IzFhMWExYTt0ZXh0LWRlY29yYXRpb246bm9uZTt9Ci5tZ2ctYWItbmFtZSBhOmhvdmVye2NvbG9yOiM4QjAwMDA7fQoubWdnLWFiLWJpb3ttYXJnaW46MCAwIDhweDtmb250LXNpemU6MTNweDtjb2xvcjojNTU1O2xpbmUtaGVpZ2h0OjEuNTt9Ci5tZ2ctYWItc29jaWFse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo4cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzhCMDAwMDsKICB0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgIzhCMDAwMDt9Ci5tZ2ctYWItc29jaWFsOmhvdmVye2NvbG9yOiM1YTAwMDA7fQpAbWVkaWEobWF4LXdpZHRoOjQ4MHB4KXsubWdnLWF1dGhvci1ib3h7ZmxleC1kaXJlY3Rpb246Y29sdW1uO30ubWdnLWFiLWltZ3t3aWR0aDo2MHB4O2hlaWdodDo2MHB4O319Cjwvc3R5bGU+JyAuICJcbiI7Cn0K Andrei Șerban | madalingeorgegroza.ro

Andrei Șerban

# Andrei Șerban

Andrei Șerban este unul dintre cei mai importanți și influenți regizori de teatru și operă de origine română, recunoscut la nivel internațional

Dă click pentru a evalua acest articol!
[Total: 0 Media: 0]

Despre Andrei Șerban

# Andrei Șerban

Andrei Șerban este unul dintre cei mai importanți și influenți regizori de teatru și operă de origine română, recunoscut la nivel internațional pentru viziunea sa artistică inovatoare și pentru contribuțiile sale remarcabile în domeniul artelor spectacolului.

## Date biografice

Andrei Șerban s-a născut pe 21 iunie 1943 în București, România. A studiat la Institutul de Artă Teatrală și Cinematografică din București (actualul UNATC), unde a absolvit în 1966. La scurt timp după absolvire, în 1969, a părăsit România comunistă și s-a stabilit în Statele Unite ale Americii, unde și-a continuat cariera artistică.

## Cariera internațională

În Statele Unite, Andrei Șerban a colaborat cu prestigioase instituții teatrale și de operă. A fost asociat cu La MaMa Experimental Theatre Club din New York, unde a realizat producții experimentale care i-au adus recunoaștere în lumea teatrului american. Trilogia sa de tragedii grecești, prezentată la La MaMa în anii 1970, a fost considerată revoluționară și i-a consolidat reputația de regizor vizionar.

A ocupat funcția de director artistic al American Repertory Theater de la Universitatea Harvard între 1991 și 1994. De asemenea, a predat la Universitatea Columbia din New York, formând generații de tineri artiști.

## Activitatea în domeniul operei

Ca regizor de operă, Andrei Șerban a colaborat cu cele mai importante case de operă din lume. A montat spectacole la Metropolitan Opera din New York, Royal Opera House Covent Garden din Londra, Opera din Paris, La Scala din Milano, Opera de Stat din Viena și multe alte instituții prestigioase.

Repertoriul său de operă include titluri celebre precum „Norma” de Vincenzo Bellini, „Eugene Onegin” de Piotr Ilici Ceaikovski, „Turandot” de Giacomo Puccini, „I Puritani” de Vincenzo Bellini și „Lucia di Lammermoor” de Gaetano Donizetti. Producțiile sale de operă se remarcă prin abordarea neconvențională și prin atenția acordată dimensiunii teatrale a genului liric.

## Întoarcerea în România

După căderea comunismului, Andrei Șerban a revenit periodic în România pentru a realiza producții teatrale și de operă. A montat spectacole la Teatrul Național din București și la alte instituții culturale românești.

Între 2013 și 2017, a ocupat funcția de manager general al Teatrului Național din București, perioadă marcată de controverse, dar și de încercări de reformare a instituției.

## Premii și recunoaștere

De-a lungul carierei sale, Andrei Șerban a primit numeroase distincții și premii. A fost laureat al Premiului Obie (Off-Broadway Theater Awards) pentru realizările sale în teatrul american. A primit bursa prestigioasei Fundații MacArthur, cunoscută și sub numele de „genius grant”, o recunoaștere acordată personalităților excepționale din diverse domenii.

În România, a fost distins cu Ordinul Național „Steaua României” pentru contribuțiile sale la cultura română și internațională.

## Stil artistic și contribuții

Andrei Șerban este cunoscut pentru abordarea sa experimentală și pentru capacitatea de a combina tradițiile teatrale cu elemente de inovație radicală. Influențat de teoriile lui Peter Brook și de teatrul experimental american, el a dezvoltat un limbaj scenic propriu, caracterizat prin utilizarea spațiilor neconvenționale, explorarea ritualului și a mitului, precum și printr-o atenție deosebită acordată expresivității corporale a actorilor.

Contribuțiile sale au influențat profund teatrul și opera contemporană, iar moștenirea sa artistică continuă să inspire regizori din întreaga lume.

Dă click pentru a evalua acest articol!
[Total: 0 Media: 0]
Partajează

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *