PD9waHANCg0KdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXERCOw0KdXNlIEplbnNzZWdl cnNcQWdlbnRcRmFjYWRlc1xBZ2VudDsNCnVzZSBJbGx1bWluYXRlXFN1cHBvcnRcRmFjYWRlc1xD YWNoZTsNCnVzZSBSYXpvcnBheVxBcGlcQXBpOw0KdXNlIEFwcFxNb2RlbHNcQ2VudGVyOw0KdXNl IEFwcFxNb2RlbHNcQ291cnNlOw0KdXNlIEFwcFxNb2RlbHNcQ291cnNlVHlwZTsNCnVzZSBBcHBc TW9kZWxzXFN0YXRlOw0KdXNlIEFwcFxNb2RlbHNcQ2l0eTsNCnVzZSBBcHBcTW9kZWxzXFZhY2Fu Y3k7DQp1c2UgQXBwXE1vZGVsc1xKb2JUeXBlOw0KdXNlIEFwcFxNb2RlbHNcTWVkaWE7DQp1c2Ug QXBwXE1vZGVsc1xTZXR0aW5nOw0KdXNlIEFwcFxNb2RlbHNcUmV2aWV3Ow0KdXNlIEFwcFxNb2Rl bHNcVGVzdGltb25pYWw7DQp1c2UgQXBwXE1vZGVsc1xGYXE7DQp1c2UgQXBwXE1vZGVsc1xBdXRo b3I7DQp1c2UgQXBwXE1vZGVsc1xUYWc7DQp1c2UgQXBwXE1vZGVsc1xDYXRlZ29yeTsNCnVzZSBB cHBcTW9kZWxzXEN1cnJpY3VsdW07DQp1c2UgQXBwXE1vZGVsc1xBc3Nlc3NtZW50Ow0KdXNlIEFw cFxNb2RlbHNcUXVlc3Rpb247DQp1c2UgQXBwXE1vZGVsc1xBbnN3ZXI7DQp1c2UgQXBwXE1vZGVs c1xSZXBvcnQ7DQoNCmlmICghIGZ1bmN0aW9uX2V4aXN0cygnY2hlY2tfZGV2aWNlJykpIHsNCiAg ICBmdW5jdGlvbiBjaGVja19kZXZpY2UoJHBhcmFtID0gbnVsbCl7DQogICAgICAgICRkZXZpY2Ug PSAiIjsNCiAgICAgICAgc3dpdGNoICgkcGFyYW0pIHsNCiAgICAgICAgICAgIGNhc2UgJ2Rlc2t0 b3AnOg0KICAgICAgICAgICAgICAgICRkZXZpY2UgPSBBZ2VudDo6aXNEZXNrdG9wKCk7DQogICAg ICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICd0YWJsZXQnOg0KICAgICAgICAg ICAgICAgICRkZXZpY2UgPSBBZ2VudDo6aXNUYWJsZXQoKTsNCiAgICAgICAgICAgIGNhc2UgJ21v YmlsZSc6DQogICAgICAgICAgICAgICAgJGRldmljZSA9IEFnZW50Ojppc1Bob25lKCk7DQogICAg ICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdvcyc6DQogICAgICAgICAgICAg ICAgJGRldmljZSA9IEFnZW50OjpkZXZpY2UoKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAg ICAgICAgfQ0KICAgICAgICANCiAgICAgICAgcmV0dXJuICRkZXZpY2U7DQogICAgfQ0KfQ0KDQpp ZiAoISBmdW5jdGlvbl9leGlzdHMoJ2dldFNpemVkSW1hZ2UnKSkgew0KICAgIGZ1bmN0aW9uIGdl dFNpemVkSW1hZ2UoJHNpemUgPSAnJywkaWQpIHsNCiAgICAgICAgJHNpemUgPSAoJHNpemUpPyRz aXplLidfJzoiIjsNCiAgICAgICAgJG1lZGlhID0gREI6OnRhYmxlKCdtZWRpYScpLT53aGVyZSgn aWQnLCRpZCktPmZpcnN0KCk7DQogICAgICAgDQogICAgICAgIGlmKGlzc2V0KCRtZWRpYSkpew0K ICAgICAgICAgICAgcmV0dXJuICRmaWxlbmFtZSA9IGVudignQVBQX1VSTCcpLiRtZWRpYS0+cGF0 aC4nLycuJHNpemUuJG1lZGlhLT5maWxlbmFtZTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg ICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KaWYgKCEgZnVuY3Rpb25f ZXhpc3RzKCdnZXRBdHRhY2htZW50VXJsJykpIHsNCiAgICBmdW5jdGlvbiBnZXRBdHRhY2htZW50 VXJsKCRpZCkgew0KICAgICAgICAkbWVkaWEgPSBEQjo6dGFibGUoJ21lZGlhJyktPndoZXJlKCdp ZCcsJGlkKS0+Zmlyc3QoKTsNCiAgICAgICAgaWYoJG1lZGlhKXsNCiAgICAgICAgICAgIHJldHVy biAkZmlsZW5hbWUgPSBlbnYoJ0FQUF9VUkwnKS4kbWVkaWEtPnBhdGguJy8nLiRtZWRpYS0+Zmls ZW5hbWU7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAg ICAgIH0NCiAgICB9DQp9DQoNCmlmICghIGZ1bmN0aW9uX2V4aXN0cygndGhvdXNhbmRzQ3VycmVu Y3lGb3JtYXQnKSkgew0KICAgIGZ1bmN0aW9uIHRob3VzYW5kc0N1cnJlbmN5Rm9ybWF0KCRudW0p IHsNCiAgICAgICAgaWYoJG51bT4xMDAwKSB7DQogICAgICAgICAgICAkeCA9IHJvdW5kKCRudW0p Ow0KICAgICAgICAgICAgJHhfbnVtYmVyX2Zvcm1hdCA9IG51bWJlcl9mb3JtYXQoJHgpOw0KICAg ICAgICAgICAgJHhfYXJyYXkgPSBleHBsb2RlKCcsJywgJHhfbnVtYmVyX2Zvcm1hdCk7DQogICAg ICAgICAgICAkeF9wYXJ0cyA9IGFycmF5KCdrJywgJ20nLCAnYicsICd0Jyk7DQogICAgICAgICAg ICAkeF9jb3VudF9wYXJ0cyA9IGNvdW50KCR4X2FycmF5KSAtIDE7DQogICAgICAgICAgICAkeF9k aXNwbGF5ID0gJHg7DQogICAgICAgICAgICAkeF9kaXNwbGF5ID0gJHhfYXJyYXlbMF0gLiAoKGlu dCkgJHhfYXJyYXlbMV1bMF0gIT09IDAgPyAnLicgLiAkeF9hcnJheVsxXVswXSA6ICcnKTsNCiAg ICAgICAgICAgICR4X2Rpc3BsYXkgLj0gJHhfcGFydHNbJHhfY291bnRfcGFydHMgLSAxXTsNCiAg ICAgICAgICAgIHJldHVybiAkeF9kaXNwbGF5Ow0KICAgICAgICB9DQogICAgICAgIHJldHVybiAk bnVtOw0KICAgIH0NCn0NCg0KaWYgKCEgZnVuY3Rpb25fZXhpc3RzKCdnZXRfdGhlbWVfc2V0dGlu ZycpKSB7DQogICAgZnVuY3Rpb24gZ2V0X3RoZW1lX3NldHRpbmcoJHZhbHVlKXsNCiAgICAgICAg JG1lZGlhID0gU2V0dGluZzo6d2hlcmUoJ2tleScsJHZhbHVlKS0+Zmlyc3QoKTsNCiAgICAgICAg cmV0dXJuIChpc3NldCgkbWVkaWEtPnZhbHVlKSk/JG1lZGlhLT52YWx1ZToibnVsbCI7DQogICAg fQ0KfQ0KDQppZiAoISBmdW5jdGlvbl9leGlzdHMoJ2dldF9yZXZpZXdzX3JhdGluZ3MnKSkgew0K ICAgIGZ1bmN0aW9uIGdldF9yZXZpZXdzX3JhdGluZ3MoJG1vZGVsPSIiLCRtb2RlbF9pZD0iIil7 DQogICAgICAgICRyZXZpZXdzID0gREI6OnRhYmxlKCdyZXZpZXdzJyk7DQogICAgICAgIGlmKCRt b2RlbCl7DQogICAgICAgICAgICAkcmV2aWV3cy0+d2hlcmUoJ21vZGVsJywkbW9kZWwpOw0KICAg ICAgICB9IA0KICAgICAgICBpZigkbW9kZWxfaWQpew0KICAgICAgICAgICAgJHJldmlld3MtPndo ZXJlKCdtb2RlbF9pZCcsJG1vZGVsX2lkKTsNCiAgICAgICAgfSANCiAgICAgICAgJHJldmlld3Mt PndoZXJlKCdzdGF0dXMnLCIxIik7ICAgICANCiAgICAgICAgJHJldmlld3MgPSAkcmV2aWV3cy0+ cGFnaW5hdGUoMTApOzsgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAk dG90YWwgPSAkcmV2aWV3cy0+c3VtKCdyYXRpbmcnKTsNCg0KICAgICAgICBpZihjb3VudCgkcmV2 aWV3cykgPD0gMCl7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAg ICAgDQogICAgICAgICRhdmcgPSBudW1iZXJfZm9ybWF0KChmbG9hdCkkdG90YWwvY291bnQoJHJl dmlld3MpLCAxLCAnLicsICcnKTsNCg0KICAgICAgICAkcmF0aW5ndmFsdWUgPSBhcnJheSgpOw0K ICAgICAgICBmb3JlYWNoICgkcmV2aWV3cyBhcyAka2V5ID0+ICRyZXZpZXcpIHsNCiAgICAgICAg ICAgICRyYXRpbmd2YWx1ZVtdID0gJHJldmlldy0+cmF0aW5nOw0KICAgICAgICB9DQogICAgICAg ICRyYXRpbmd2YWx1ZSA9IGFycmF5X2NvdW50X3ZhbHVlcygkcmF0aW5ndmFsdWUpOw0KDQogICAg ICAgICRyYXRpbmdzID0gYXJyYXkoKTsNCiAgICAgICAgZm9yICgkaT01OyAkaSA+PSAxOyAkaS0t KSB7IA0KICAgICAgICAgICAgJHJhdGluZ3NbJGldID0gKGFycmF5X2tleV9leGlzdHMoJGksICRy YXRpbmd2YWx1ZSkpPyRyYXRpbmd2YWx1ZVskaV06IjAiOw0KICAgICAgICB9DQogICAgICAgICRy ZXZpZXdSYXRpbmdzID0gYXJyYXkoDQogICAgICAgICAgICAncmV2aWV3cycgPT4gJHJldmlld3Ms DQogICAgICAgICAgICAnYXZhcmFnZVJhdGluZycgPT4kYXZnLA0KICAgICAgICAgICAgJ3Jldmll d0NvdW50JyA9PiBjb3VudCgkcmV2aWV3cyksDQogICAgICAgICAgICAncmF0aW5ncycgPT4gJHJh dGluZ3MNCiAgICAgICAgKTsNCiAgICAgICAgcmV0dXJuICRyZXZpZXdSYXRpbmdzOw0KICAgIH0N Cn0NCiANCmlmICghIGZ1bmN0aW9uX2V4aXN0cygnZ2V0QWxsVGVzdGltb25pYWxzJykpIHsNCiAg ICBmdW5jdGlvbiBnZXRBbGxUZXN0aW1vbmlhbHMoKXsNCiAgICAgICAgJHRlc3RpbW9uaWFscyA9 IERCOjp0YWJsZSgndGVzdGltb25pYWxzJyktPndoZXJlKCdzdGF0dXMnLCIxIiktPmdldCgpOw0K ICAgICAgICByZXR1cm4gJHRlc3RpbW9uaWFsczsNCiAgICB9DQp9DQoNCmlmICghIGZ1bmN0aW9u X2V4aXN0cygnZ2V0VGVzdGltb25pYWxzJykpIHsNCiAgICBmdW5jdGlvbiBnZXRUZXN0aW1vbmlh bHMoKXsNCiAgICAgICAgJHRlc3RpbW9uaWFscyA9IERCOjp0YWJsZSgndGVzdGltb25pYWxzJykt PndoZXJlKCdzdGF0dXMnLCIxIiktPmdldCgpOw0KICAgICAgICByZXR1cm4gJHRlc3RpbW9uaWFs czsNCiAgICB9DQp9DQoNCmlmICghIGZ1bmN0aW9uX2V4aXN0cygnZ2V0RmFxcycpKSB7DQogICAg ZnVuY3Rpb24gZ2V0RmFxcygkbW9kZWw9bnVsbCwkbW9kZWxfaWQ9bnVsbCwkbGltaXQ9MTApew0K DQogICAgICAgICRmYXFfaWRzID0gREI6OnRhYmxlKCdmYXFfbWV0YScpLT5zZWxlY3QoJ2ZhcXMn KS0+d2hlcmUoJ21vZGVsJywkbW9kZWwpLT53aGVyZSgnbW9kZWxfaWQnLCRtb2RlbF9pZCktPmZp cnN0KCk7DQogICAgICAgICRmYXEgPSBEQjo6dGFibGUoJ2ZhcXMnKTsNCiAgICAgICAgaWYoJGZh cV9pZHMgIT09IG51bGwpew0KICAgICAgICAgICAgJGZhcS0+d2hlcmVJbignaWQnLGpzb25fZGVj b2RlKCRmYXFfaWRzLT5mYXFzKSk7DQogICAgICAgIH0NCiAgICAgICAgJGZhcSA9ICRmYXEtPndo ZXJlKCdzdGF0dXMnLCIxIiktPnBhZ2luYXRlKCRsaW1pdCk7DQoNCiAgICAgICAgcmV0dXJuICRm YXE7DQogICAgfQ0KfQ0KDQppZiAoISBmdW5jdGlvbl9leGlzdHMoJ2dldEFsbEZhcUNhdGVnb3Jp ZXMnKSkgew0KICAgIGZ1bmN0aW9uIGdldEFsbEZhcUNhdGVnb3JpZXMoKXsNCiAgICAgICAgJGZh cUNhdGVnb3JpZXMgPSBEQjo6dGFibGUoJ2ZhcV9jYXRlZ29yaWVzJyktPndoZXJlKCdzdGF0dXMn LCIxIiktPmdldCgpOw0KICAgICAgICByZXR1cm4gJGZhcUNhdGVnb3JpZXM7DQogICAgfQ0KfQ0K DQppZiAoISBmdW5jdGlvbl9leGlzdHMoJ2dldEFsbEZhcXMnKSkgew0KICAgIGZ1bmN0aW9uIGdl dEFsbEZhcXMoKXsNCiAgICAgICAgJGZhcSA9IERCOjp0YWJsZSgnZmFxcycpLT53aGVyZSgnc3Rh dHVzJywiMSIpLT5nZXQoKTsNCiAgICAgICAgcmV0dXJuICRmYXE7DQogICAgfQ0KfQ0KDQppZiAo ISBmdW5jdGlvbl9leGlzdHMoJ2dldEFsbEJsb2dzJykpIHsNCiAgICBmdW5jdGlvbiBnZXRBbGxC bG9ncygpew0KICAgICAgICAvLyBHZXQgUG9zdA0KICAgICAgICAkdXJsID0gImh0dHBzOi8vd3d3 LmljYWpvYmd1YXJhbnRlZS5jb20vYmxvZy93cC1qc29uL3dwL3YyL3Bvc3RzP2ZpbHRlcltvcmRl cmJ5XT1kYXRlJm9yZGVyPWRlc2MmcGVyX3BhZ2U9MTAwJl9maWVsZHM9aWQsdGl0bGUsZGF0ZSI7 DQogICAgICAgICRjdXJsID0gY3VybF9pbml0KCR1cmwpOw0KICAgICAgICBjdXJsX3NldG9wdCgk Y3VybCwgQ1VSTE9QVF9VUkwsICR1cmwpOw0KICAgICAgICBjdXJsX3NldG9wdCgkY3VybCwgQ1VS TE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7DQoNCiAgICAgICAgLy9mb3IgZGVidWcgb25seSEN CiAgICAgICAgY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIGZhbHNl KTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIGZh bHNlKTsNCg0KICAgICAgICAkcmVzcCA9IGN1cmxfZXhlYygkY3VybCk7DQogICAgICAgIGN1cmxf Y2xvc2UoJGN1cmwpOw0KDQogICAgICAgICRwb3N0ID0ganNvbl9kZWNvZGUoJHJlc3ApOw0KICAg ICAgICByZXR1cm4gJHBvc3Q7DQogICAgfQ0KfQ0KDQppZiAoISBmdW5jdGlvbl9leGlzdHMoJ2dl dFJlY3J1aXRlcnMnKSkgew0KICAgIGZ1bmN0aW9uIGdldFJlY3J1aXRlcnMoJG1vZGVsPSIiLCRt b2RlbF9pZD0iIil7DQogICAgICAgICRwbGFjZW1lbnRzID0gQ2FjaGU6OnJlbWVtYmVyRm9yZXZl cigncmVjcnVpdGVycycsIGZ1bmN0aW9uICgpIHVzZSAoJG1vZGVsLCRtb2RlbF9pZCl7DQogICAg ICAgICAgICAkcGxhY2VtZW50cyA9IERCOjp0YWJsZSgncmVjcnVpdGVycycpOw0KICAgICAgICAg ICAgaWYoJG1vZGVsKXsNCiAgICAgICAgICAgICAgICAkcGxhY2VtZW50cy0+d2hlcmUoJ21vZGVs JywkbW9kZWwpOw0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGlmKCRtb2RlbF9pZCl7DQog ICAgICAgICAgICAgICAgJHBsYWNlbWVudHMtPndoZXJlKCdtb2RlbF9pZCcsJG1vZGVsX2lkKTsN CiAgICAgICAgICAgIH0gICANCiAgICAgICAgICAgIHJldHVybiAkcGxhY2VtZW50cy0+d2hlcmUo J3N0YXR1cycsIjEiKS0+Z2V0KCk7DQogICAgICAgIH0pOw0KICAgICAgICByZXR1cm4gJHBsYWNl bWVudHM7DQogICAgfQ0KfQ0KDQppZiAoISBmdW5jdGlvbl9leGlzdHMoJ2dldEFzc2Vzc21lbnQn KSkgew0KICAgIGZ1bmN0aW9uIGdldEFzc2Vzc21lbnQoKSB7DQogICAgICAgIHRyeSB7DQogICAg ICAgICAgICAkYXNzZXNzbWVudCA9IEFzc2Vzc21lbnQ6OmFsbCgpOw0KICAgICAgICAgICAgcmV0 dXJuICRhc3Nlc3NtZW50Ow0KICAgICAgICB9IGNhdGNoKFxJbGx1bWluYXRlXERhdGFiYXNlXFF1 ZXJ5RXhjZXB0aW9uICRlKXsNCiAgICAgICAgICAgIHRocm93ICRlOw0KICAgICAgICB9DQogICAg fQ0KfQ0KDQppZiAoISBmdW5jdGlvbl9leGlzdHMoJ2dldEpvaW5lZXMnKSkgew0KICAgIGZ1bmN0 aW9uIGdldEpvaW5lZXMoJGNlbnRlcl9pZD1udWxsLCRjb3Vyc2VfaWQ9bnVsbCwkY291bnQ9MTIp ew0KICAgICAgICAkcGxhY2VtZW50cyA9IERCOjp0YWJsZSgncGxhY2VtZW50cycpOw0KICAgICAg ICBpZigkY2VudGVyX2lkKXsNCiAgICAgICAgICAgICRwbGFjZW1lbnRzLT53aGVyZSgnY2VudGVy X2lkJywkY2VudGVyX2lkKTsNCiAgICAgICAgfSANCg0KICAgICAgICBpZigkY291cnNlX2lkKXsN CiAgICAgICAgICAgICRwbGFjZW1lbnRzLT53aGVyZSgnY291cnNlX2lkJywkY291cnNlX2lkKTsN CiAgICAgICAgfSANCg0KDQogICAgICAgICRwbGFjZW1lbnRzID0gJHBsYWNlbWVudHMtPndoZXJl KCdzdGF0dXMnLCIxIiktPmluUmFuZG9tT3JkZXIoKS0+cGFnaW5hdGUoJGNvdW50KTsNCiAgICAg ICAgcmV0dXJuICRwbGFjZW1lbnRzOw0KICAgIH0NCn0NCg0KaWYgKCEgZnVuY3Rpb25fZXhpc3Rz KCdnZXRSZWNydXRlckJ5SWQnKSkgew0KICAgIGZ1bmN0aW9uIGdldFJlY3J1dGVyQnlJZCgkaWQ9 IiIpew0KICAgICAgICAkcmVjcnVpdGVyID0gREI6OnRhYmxlKCdyZWNydWl0ZXJzJyktPndoZXJl KCdpZCcsJGlkKS0+Zmlyc3QoKTsNCiAgICAgICAgcmV0dXJuICRyZWNydWl0ZXI7DQogICAgfQ0K fQ0KDQppZiAoISBmdW5jdGlvbl9leGlzdHMoJ2dldFN0YXRlcycpKSB7DQogICAgZnVuY3Rpb24g Z2V0U3RhdGVzKCl7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICAkc3RhdGVzID0gU3RhdGU6 OndoZXJlKCdzdGF0dXMnLCAxKS0+b3JkZXJCeSgibmFtZSIsImFzYyIpLT5nZXQoKTsNCiAgICAg ICAgICAgIHJldHVybiAkc3RhdGVzOw0KICAgICAgICB9IGNhdGNoKFxJbGx1bWluYXRlXERhdGFi YXNlXFF1ZXJ5RXhjZXB0aW9uICRlKXsNCiAgICAgICAgICAgIHRocm93ICRlOw0KICAgICAgICB9 DQogICAgfQ0KfQ0KDQppZiAoISBmdW5jdGlvbl9leGlzdHMoJ2dldFN0YXRlQnlJZCcpKSB7DQog ICAgZnVuY3Rpb24gZ2V0U3RhdGVCeUlkKCRpZCl7DQogICAgICAgIHRyeSB7DQogICAgICAgICAg ICAkc3RhdGUgPSBTdGF0ZTo6ZmluZE9yRmFpbCgkaWQpOw0KICAgICAgICAgICAgcmV0dXJuICRz dGF0ZTsNCiAgICAgICAgfSBjYXRjaChcSWxsdW1pbmF0ZVxEYXRhYmFzZVxRdWVyeUV4Y2VwdGlv biAkZSl7DQogICAgICAgICAgICB0aHJvdyAkZTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KaWYg KCEgZnVuY3Rpb25fZXhpc3RzKCdnZXRDaXR5QnlJZCcpKSB7DQogICAgZnVuY3Rpb24gZ2V0Q2l0 eUJ5SWQoJGlkKXsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICRjaXR5ID0gREI6OnRhYmxl KCdjaXRpZXMnKS0+d2hlcmUoJ2lkJywkaWQpLT5maXJzdCgpOw0KICAgICAgICAgICAgcmV0dXJu ICRjaXR5Ow0KICAgICAgICB9IGNhdGNoKFxJbGx1bWluYXRlXERhdGFiYXNlXFF1ZXJ5RXhjZXB0 aW9uICRlKXsNCiAgICAgICAgICAgIHRocm93ICRlOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQpp ZiAoISBmdW5jdGlvbl9leGlzdHMoJ2dldENpdGllc0J5U3RhdGVOYW1lJykpIHsNCiAgICBmdW5j dGlvbiBnZXRDaXRpZXNCeVN0YXRlTmFtZSgkc3RhdGUpew0KICAgICAgICB0cnkgew0KICAgICAg ICAgICAgJGNpdGllcyA9IERCOjp0YWJsZSgnY2l0aWVzJykNCiAgICAgICAgICAgIC0+am9pbign c3RhdGVzJywgJ2NpdGllcy5zdGF0ZV9pZCcsICc9JywgJ3N0YXRlcy5pZCcpDQogICAgICAgICAg ICAtPndoZXJlKCdzdGF0ZXMubmFtZScsJHN0YXRlKQ0KICAgICAgICAgICAgLT5zZWxlY3QoJ2Np dGllcy4qJykNCiAgICAgICAgICAgIC0+Z2V0KCk7DQogICAgICAgICAgICByZXR1cm4gJGNpdGll czsNCiAgICAgICAgfSBjYXRjaChcSWxsdW1pbmF0ZVxEYXRhYmFzZVxRdWVyeUV4Y2VwdGlvbiAk ZSl7DQogICAgICAgICAgICB0aHJvdyAkZTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KaWYgKCEg ZnVuY3Rpb25fZXhpc3RzKCdnZXRDZW50ZXJzJykpIHsNCiAgICBmdW5jdGlvbiBnZXRDZW50ZXJz KCRjb3Vyc2VfaWQ9bnVsbCwgJGNlbnRlcl9pZD1udWxsKXsNCg0KICAgICAgICANCiAgICAgICAg JGNlbnRlcnMgPSBDYWNoZTo6cmVtZW1iZXJGb3JldmVyKCdjZW50ZXJzJywgZnVuY3Rpb24gKCkg dXNlICgkY291cnNlX2lkLCRjZW50ZXJfaWQpew0KICAgICAgICAgICAgJGNlbnRlcnMgPSBEQjo6 dGFibGUoJ2NlbnRlcnMnKTsNCiAgICAgICAgICAgIGlmKCRjb3Vyc2VfaWQpew0KICAgICAgICAg ICAgICAgICRjZW50ZXJzLT53aGVyZSgnY291cnNlcycsJ2xpa2UnLCAnJSInIC4gJGNvdXJzZV9p ZCAuICciJScpOw0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGlmKCRjZW50ZXJfaWQpew0K ICAgICAgICAgICAgICAgICRjZW50ZXJzLT53aGVyZSgnaWQnLCRjZW50ZXJfaWQpOw0KICAgICAg ICAgICAgfSANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoaXNzZXQoJF9DT09LSUVbJ2xu ZyddKSAmJiBpc3NldCgkX0NPT0tJRVsnbGF0J10pKXsNCiAgICAgICAgICAgICAgICAkY2VudGVy cy0+b3JkZXJCeShEQjo6cmF3KCdQT1coKGxuZy0nLiRfQ09PS0lFWydsbmcnXS4nKSwyKSArIFBP VygobGF0LScuJF9DT09LSUVbJ2xhdCddLicpLDIpJykpOw0KICAgICAgICAgICAgfSBlbHNlIHsN CiAgICAgICAgICAgICAgICAkY2VudGVycy0+b3JkZXJCeSgibmFtZSIsImFzYyIpOw0KICAgICAg ICAgICAgfQ0KICAgICAgICAgICAgJGNlbnRlcnMgPSAkY2VudGVycy0+d2hlcmUoJ3N0YXR1cycs IjEiKTsNCiAgICAgICAgICAgIHJldHVybiAkY2VudGVycy0+Z2V0KCk7ICAgICANCiAgICAgICAg fSk7DQogICAgICAgIHJldHVybiAkY2VudGVyczsNCiAgICB9DQp9DQoNCmlmICghIGZ1bmN0aW9u X2V4aXN0cygnZ2V0Q291cnNlTW9kdWxlcycpKSB7DQogICAgZnVuY3Rpb24gZ2V0Q291cnNlTW9k dWxlcygkY291cnNlX2lkPW51bGwsICRjb3Vyc2VfdHlwZV9pZD1udWxsKXsNCiAgICAgICAgcmV0 dXJuICRjYXJyaWN1bGFtcyA9IERCOjp0YWJsZSgnY3VycmljdWx1bXMnKS0+d2hlcmUoJ2NvdXJz ZV9pZCcsJGNvdXJzZV9pZCktPmdldCgpOw0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlz dHMoJ2dldENlbnRlckJ5Q2l0eUlkJykpIHsNCiAgICBmdW5jdGlvbiBnZXRDZW50ZXJCeUNpdHlJ ZCgkY2l0eSA9IG51bGwsJGNlbnRlcm5hbWUgPSBudWxsKXsNCiAgICAgICAgJGNlbnRlciA9IERC Ojp0YWJsZSgnY2VudGVycycpDQogICAgICAgICAgICAgICAgLT5qb2luKCdjaXRpZXMnLCAnY2l0 aWVzLmlkJywgJz0nLCAnY2VudGVycy5jaXR5X2lkJykNCiAgICAgICAgICAgICAgICAtPnNlbGVj dCgnY2VudGVycy5pZCcsJ2NlbnRlcnMubmFtZScpOw0KICAgICAgICBpZigkY2l0eSl7DQogICAg ICAgICAgICAkY2VudGVyLT53aGVyZSgnY2l0aWVzLm5hbWUnLCRjaXR5KTsNCiAgICAgICAgfQ0K DQogICAgICAgIGlmKCRjZW50ZXJuYW1lKXsNCiAgICAgICAgICAgICRjZW50ZXItPndoZXJlKCdj ZW50ZXJzLm5hbWUnLCRjZW50ZXJuYW1lKTsNCiAgICAgICAgfQ0KDQogICAgICAgICRjZW50ZXIt PndoZXJlKCdjZW50ZXJzLnN0YXR1cycsJzEnKTsNCiAgICAgICAgJGNlbnRlciA9ICRjZW50ZXIt PmdldCgpOyAgICAgICANCiAgICAgICAgcmV0dXJuICRjZW50ZXI7DQogICAgfQ0KfQ0KDQppZiAo IWZ1bmN0aW9uX2V4aXN0cygnZ2V0Q2VudGVyQnlJZCcpKSB7DQogICAgZnVuY3Rpb24gZ2V0Q2Vu dGVyQnlJZCgkY2VudGVyX2lkID0gbnVsbCl7DQogICAgICAgICRjZW50ZXIgPSBEQjo6dGFibGUo J2NlbnRlcnMnKTsNCiAgICAgICAgaWYoJGNlbnRlcl9pZCl7DQogICAgICAgICAgICAkY2VudGVy LT53aGVyZSgnaWQnLCRjZW50ZXJfaWQpOw0KICAgICAgICB9DQogICAgICAgICRjZW50ZXIgPSAk Y2VudGVyLT5maXJzdCgpOyAgICAgICANCiAgICAgICAgcmV0dXJuICRjZW50ZXI7DQogICAgfQ0K fQ0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0Q2VudGVyQnlTdGF0ZUlkJykpIHsNCiAgICBm dW5jdGlvbiBnZXRDZW50ZXJCeVN0YXRlSWQoJHN0YXRlID0gbnVsbCwkY2VudGVybmFtZSA9IG51 bGwpew0KICAgICAgICAkY2VudGVyID0gREI6OnRhYmxlKCdjZW50ZXJzJykNCiAgICAgICAgICAg ICAgICAtPmpvaW4oJ3N0YXRlcycsICdzdGF0ZXMuaWQnLCAnPScsICdjZW50ZXJzLnN0YXRlX2lk JykNCiAgICAgICAgICAgICAgICAtPnNlbGVjdCgnY2VudGVycy5pZCcsJ2NlbnRlcnMubmFtZScp Ow0KICAgICAgICBpZigkc3RhdGUpew0KICAgICAgICAgICAgJGNlbnRlci0+d2hlcmUoJ3N0YXRl cy5uYW1lJywkc3RhdGUpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYoJGNlbnRlcm5hbWUpew0K ICAgICAgICAgICAgJGNlbnRlci0+d2hlcmUoJ2NlbnRlcnMubmFtZScsJGNlbnRlcm5hbWUpOw0K ICAgICAgICB9DQoNCiAgICAgICAgJGNlbnRlci0+d2hlcmUoJ2NlbnRlcnMuc3RhdHVzJywnMScp Ow0KICAgICAgICAkY2VudGVyID0gJGNlbnRlci0+b3JkZXJCeSgnbmFtZScsICdhc2MnKS0+Z2V0 KCk7ICAgICAgIA0KICAgICAgICByZXR1cm4gJGNlbnRlcjsNCiAgICB9DQp9DQoNCmlmICghZnVu Y3Rpb25fZXhpc3RzKCdnZXRDZW50ZXJCeUJ1Y2tldCcpKSB7DQogICAgZnVuY3Rpb24gZ2V0Q2Vu dGVyQnlCdWNrZXQoJG5hbWUgPSBudWxsKXsNCiAgICAgICAgJGJ1Y2tldCA9IERCOjp0YWJsZSgn Y2VudGVyX2J1Y2tldHMnKS0+d2hlcmUoIm5hbWUiLCRuYW1lKS0+Zmlyc3QoKTsNCiAgICAgICAg JGNlbnRlcl9pZCA9IGpzb25fZGVjb2RlKCRidWNrZXQtPmNlbnRlcl9pZCk7DQogICAgICAgIA0K ICAgICAgICAkY2VudGVycyA9IERCOjp0YWJsZSgnY2VudGVycycpDQogICAgICAgICAgICAgICAg LT53aGVyZUluKCdpZCcsJGNlbnRlcl9pZCkNCiAgICAgICAgICAgICAgICAtPndoZXJlKCdzdGF0 dXMnLDEpDQogICAgICAgICAgICAgICAgLT5vcmRlckJ5KCduYW1lJywgJ2FzYycpDQogICAgICAg ICAgICAgICAgLT5nZXQoKTsNCiAgICAgICANCiAgDQogICAgICAgIHJldHVybiAkY2VudGVyczsN CiAgICB9DQp9DQoNCmlmICghIGZ1bmN0aW9uX2V4aXN0cygnZ2V0R2FsbGVyeScpKSB7DQogICAg ZnVuY3Rpb24gZ2V0R2FsbGVyeSgkY291cnNlX2lkPW51bGwsICRjZW50ZXJfaWQ9bnVsbCl7DQog ICAgICAgICRnYWxsZXJ5ID0gREI6OnRhYmxlKCdnYWxsZXJ5Jyk7DQogICAgICAgIGlmKCRjZW50 ZXJfaWQpew0KICAgICAgICAgICAgJGdhbGxlcnktPndoZXJlKCJjZW50ZXJfaWQiLCRjZW50ZXJf aWQpOw0KICAgICAgICB9IA0KICAgICAgICAkZ2FsbGVyeSA9ICRnYWxsZXJ5LT5nZXQoKTsgICAg ICAgDQogICAgICAgIHJldHVybiAkZ2FsbGVyeTsNCiAgICB9DQp9DQoNCmlmICghIGZ1bmN0aW9u X2V4aXN0cygnZ2V0Q291cnNlcycpKSB7DQogICAgZnVuY3Rpb24gZ2V0Q291cnNlcygkY291cnNl X3R5cGVfaWQgPSBudWxsKXsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICRzZWFyY2ggPSAo cmVxdWVzdCgpLT5oYXMoJ3NlYXJjaCcpKT9yZXF1ZXN0KCktPmdldCgnc2VhcmNoJyk6IiI7DQog ICAgICAgICAgICAkY291cnNlcyA9IERCOjp0YWJsZSgnY291cnNlcycpDQogICAgICAgICAgICAt PmpvaW4oJ2NvdXJzZV90eXBlJywgJ2NvdXJzZV90eXBlLmlkJywgJz0nLCAnY291cnNlcy50eXBl X2lkJykNCiAgICAgICAgICAgIC0+c2VsZWN0KCdjb3Vyc2VzLionLCAnY291cnNlcy5uYW1lIGFz IGNvdXJzZV9uYW1lJywnY291cnNlX3R5cGUubmFtZSBhcyBjYXRlZ29yeScsJ2NvdXJzZV90eXBl LmlkIGFzIGNhdGVnb3J5X2lkJyk7DQogICAgICAgICAgICBpZigkc2VhcmNoKXsNCiAgICAgICAg ICAgICAgICAkY291cnNlcy0+d2hlcmUoJ2NvdXJzZXMubmFtZScsICdsaWtlJywgJyUnIC4gJHNl YXJjaCAuICclJyk7DQogICAgICAgICAgICAgICAgJGNvdXJzZXMtPm9yd2hlcmUoJ2NvdXJzZXMu ZGVzY3JpcHRpb24nLCAnbGlrZScsICclJyAuICRzZWFyY2ggLiAnJScpOw0KICAgICAgICAgICAg ICAgICRjb3Vyc2VzLT5vcldoZXJlKCdjb3Vyc2VfdHlwZS5uYW1lJywgJ2xpa2UnLCAnJScgLiAk c2VhcmNoIC4gJyUnKTsNCiAgICAgICAgICAgICAgICAkY291cnNlcy0+b3JXaGVyZSgnY291cnNl X3R5cGUuc2x1ZycsICdsaWtlJywgJyUnIC4gJHNlYXJjaCAuICclJyk7DQogICAgICAgICAgICB9 DQogICAgICAgICAgICBpZigkY291cnNlX3R5cGVfaWQpew0KICAgICAgICAgICAgICAgICRjb3Vy c2VzLT53aGVyZUluKCdjb3Vyc2VfdHlwZS5pZCcsICRjb3Vyc2VfdHlwZV9pZCk7DQogICAgICAg ICAgICB9DQogICAgICAgICAgICAkY291cnNlcy0+d2hlcmUoJ2NvdXJzZXMuc3RhdHVzJywgJzEn KTsNCiAgICAgICAgICAgICRjb3Vyc2VzID0gJGNvdXJzZXMtPmRpc3RpbmN0KCkNCiAgICAgICAg ICAgIC0+b3JkZXJCeSgnY291cnNlcy5pZCcsICdhc2MnKQ0KICAgICAgICAgICAgLT5nZXQoKTsN CiAgICAgICAgICAgIHJldHVybiAkY291cnNlczsNCiAgICAgICAgICAgIC8vcmV0dXJuIHZpZXco J2NvdXJzZXMuaW5kZXgnLGNvbXBhY3QoJ21vZGVsJywnY291cnNlcycsJ2NvdXJzZVR5cGVzJykp Ow0KICAgICAgICB9IGNhdGNoKFxJbGx1bWluYXRlXERhdGFiYXNlXFF1ZXJ5RXhjZXB0aW9uICRl KXsNCiAgICAgICAgICAgIHRocm93ICRlOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQppZiAoISBm dW5jdGlvbl9leGlzdHMoJ2dldEVycENvdXJzZUNvZGUnKSkgew0KICAgIGZ1bmN0aW9uIGdldEVy cENvdXJzZUNvZGUoJGNvdXJzZV9pZCA9IG51bGwpew0KICAgICAgICB0cnkgew0KICAgICAgICAg ICAgJGNvdXJzZSA9IERCOjp0YWJsZSgnY291cnNlcycpOw0KICAgICAgICAgICAgaWYoJGNvdXJz ZV9pZCl7DQogICAgICAgICAgICAgICAgJGNvdXJzZS0+d2hlcmUoJ2lkJywkY291cnNlX2lkKTsN CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiAkY291cnNlID0gJGNvdXJzZS0+Zmly c3QoKTsgICAgICAgDQogICAgICAgICAgICAvL3JldHVybiB2aWV3KCdjb3Vyc2VzLmluZGV4Jyxj b21wYWN0KCdtb2RlbCcsJ2NvdXJzZXMnLCdjb3Vyc2VUeXBlcycpKTsNCiAgICAgICAgfSBjYXRj aChcSWxsdW1pbmF0ZVxEYXRhYmFzZVxRdWVyeUV4Y2VwdGlvbiAkZSl7DQogICAgICAgICAgICB0 aHJvdyAkZTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KaWYgKCEgZnVuY3Rpb25fZXhpc3RzKCdn ZXRVbml2ZXJzaXR5Q291cnNlcycpKSB7DQogICAgZnVuY3Rpb24gZ2V0VW5pdmVyc2l0eUNvdXJz ZXMoJHVuaXZlcnNpdHlfaWQgPSBudWxsKXsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICRz ZWFyY2ggPSAocmVxdWVzdCgpLT5oYXMoJ3NlYXJjaCcpKT9yZXF1ZXN0KCktPmdldCgnc2VhcmNo Jyk6IiI7DQogICAgICAgICAgICAkdW5pdmVyc2l0eV9jb3Vyc2VzID0gREI6OnRhYmxlKCd1bml2 ZXJzaXR5X2NvdXJzZXMnKQ0KICAgICAgICAgICAgLT5qb2luKCd1bml2ZXJzaXRpZXMnLCAndW5p dmVyc2l0aWVzLmlkJywgJz0nLCAndW5pdmVyc2l0eV9jb3Vyc2VzLnVuaXZlcnNpdHlfaWQnKQ0K ICAgICAgICAgICAgLT5zZWxlY3QoJ3VuaXZlcnNpdHlfY291cnNlcy4qJywgJ3VuaXZlcnNpdHlf Y291cnNlcy5uYW1lIGFzIGNvdXJzZV9uYW1lJywndW5pdmVyc2l0aWVzLm5hbWUgYXMgdW5pdmVy c2l0eScsJ3VuaXZlcnNpdGllcy5pZCBhcyB1bml2ZXJzaXR5X2lkJywgJ3VuaXZlcnNpdGllcy5z bHVnIGFzIHVuaXZlcnNpdHlfc2x1ZycpOw0KICAgICAgICAgICAgaWYoJHNlYXJjaCl7DQogICAg ICAgICAgICAgICAgJHVuaXZlcnNpdHlfY291cnNlcy0+d2hlcmUoJ3VuaXZlcnNpdHlfY291cnNl cy5uYW1lJywgJ2xpa2UnLCAnJScgLiAkc2VhcmNoIC4gJyUnKTsNCiAgICAgICAgICAgICAgICAk dW5pdmVyc2l0eV9jb3Vyc2VzLT5vcndoZXJlKCd1bml2ZXJzaXR5X2NvdXJzZXMuZGVzY3JpcHRp b24nLCAnbGlrZScsICclJyAuICRzZWFyY2ggLiAnJScpOw0KICAgICAgICAgICAgICAgICR1bml2 ZXJzaXR5X2NvdXJzZXMtPm9yV2hlcmUoJ3VuaXZlcnNpdGllcy5uYW1lJywgJ2xpa2UnLCAnJScg LiAkc2VhcmNoIC4gJyUnKTsNCiAgICAgICAgICAgICAgICAkdW5pdmVyc2l0eV9jb3Vyc2VzLT5v cldoZXJlKCd1bml2ZXJzaXRpZXMuc2x1ZycsICdsaWtlJywgJyUnIC4gJHNlYXJjaCAuICclJyk7 DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZigkdW5pdmVyc2l0eV9pZCl7DQogICAgICAg ICAgICAgICAgJHVuaXZlcnNpdHlfY291cnNlcy0+d2hlcmVJbigndW5pdmVyc2l0eS5pZCcsICR1 bml2ZXJzaXR5X2lkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAg JHVuaXZlcnNpdHlfY291cnNlcyA9ICR1bml2ZXJzaXR5X2NvdXJzZXMtPmRpc3RpbmN0KCkNCiAg ICAgICAgICAgIC0+b3JkZXJCeSgndW5pdmVyc2l0eV9jb3Vyc2VzLmlkJywgJ2FzYycpDQogICAg ICAgICAgICAtPmdldCgpOw0KICAgICAgICAgICAgcmV0dXJuICR1bml2ZXJzaXR5X2NvdXJzZXM7 DQogICAgICAgICAgICAvL3JldHVybiB2aWV3KCdjb3Vyc2VzLmluZGV4Jyxjb21wYWN0KCdtb2Rl bCcsJ2NvdXJzZXMnLCdjb3Vyc2VUeXBlcycpKTsNCiAgICAgICAgfSBjYXRjaChcSWxsdW1pbmF0 ZVxEYXRhYmFzZVxRdWVyeUV4Y2VwdGlvbiAkZSl7DQogICAgICAgICAgICB0aHJvdyAkZTsNCiAg ICAgICAgfQ0KICAgIH0NCn0NCg0KaWYgKCEgZnVuY3Rpb25fZXhpc3RzKCdnZXRDb3Vyc2VCeUlk JykpIHsNCiAgICBmdW5jdGlvbiBnZXRDb3Vyc2VCeUlkKCRjb3Vyc2VfaWQgPSBudWxsKXsNCiAg ICAgICAgJGNvdXJzZSA9IERCOjp0YWJsZSgnY291cnNlcycpOw0KICAgICAgICBpZigkY291cnNl X2lkKXsNCiAgICAgICAgICAgICRjb3Vyc2UtPndoZXJlKCdpZCcsJGNvdXJzZV9pZCk7DQogICAg ICAgIH0NCiAgICAgICAgJGNvdXJzZSA9ICRjb3Vyc2UtPmZpcnN0KCk7ICAgICAgIA0KICAgICAg ICByZXR1cm4gJGNvdXJzZTsNCiAgICB9DQp9DQoNCmlmICghIGZ1bmN0aW9uX2V4aXN0cygnZ2V0 Q291cnNlVHlwZXMnKSkgew0KICAgIGZ1bmN0aW9uIGdldENvdXJzZVR5cGVzKCl7DQogICAgICAg IHRyeSB7DQogICAgICAgICAgICByZXR1cm4gJGNvdXJzZVR5cGVzID0gQ291cnNlVHlwZTo6d2hl cmUoJ3N0YXR1cycsIDEpLT5nZXQoKTsNCiAgICAgICAgfSBjYXRjaChcSWxsdW1pbmF0ZVxEYXRh YmFzZVxRdWVyeUV4Y2VwdGlvbiAkZSl7DQogICAgICAgICAgICB0aHJvdyAkZTsNCiAgICAgICAg fQ0KICAgIH0NCn0NCg0KaWYgKCEgZnVuY3Rpb25fZXhpc3RzKCdnZXRDb3Vyc2VDYXJyaWN1bGFt cycpKSB7DQogICAgZnVuY3Rpb24gZ2V0Q291cnNlQ2FycmljdWxhbXMoJGlkKXsNCiAgICAgICAg dHJ5IHsNCiAgICAgICAgICAgIHJldHVybiAkY2FycmljdWxhbXMgPSBDdXJyaWN1bHVtOjp3aGVy ZSgnY291cnNlX2lkJywkaWQpLT5nZXQoKTsNCiAgICAgICAgfSBjYXRjaChcSWxsdW1pbmF0ZVxE YXRhYmFzZVxRdWVyeUV4Y2VwdGlvbiAkZSl7DQogICAgICAgICAgICB0aHJvdyAkZTsNCiAgICAg ICAgfQ0KICAgIH0NCn0NCg0KaWYgKCEgZnVuY3Rpb25fZXhpc3RzKCdnZXRFdmVudHMnKSkgew0K ICAgIGZ1bmN0aW9uIGdldEV2ZW50cygkY2VudGVyX2lkID0gbnVsbCwkcGFnaW5hdGlvbiA9ICIx MDAiKXsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICRldmVudHMgPSBEQjo6dGFibGUoJ2V2 ZW50cycpDQogICAgICAgICAgICAtPmpvaW4oJ2NlbnRlcnMnLCAnY2VudGVycy5pZCcsICc9Jywg J2V2ZW50cy5jZW50ZXJfaWQnKQ0KICAgICAgICAgICAgLT5zZWxlY3QoJ2V2ZW50cy4qJywgJ2V2 ZW50cy5uYW1lIGFzIGV2ZW50JywnY2VudGVycy5uYW1lIGFzIGNlbnRlcicsJ2NlbnRlcnMuaWQg YXMgY2VudGVyX2lkJywnY2VudGVycy5zbHVnIGFzIGNlbnRlcl9zbHVnJyk7DQogICAgICAgICAg ICBpZigkY2VudGVyX2lkKXsNCiAgICAgICAgICAgICAgICAkZXZlbnRzLT53aGVyZSgnY2VudGVy X2lkJywkY2VudGVyX2lkKTsNCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICAkZXZlbnRzID0g JGV2ZW50cy0+d2hlcmUoJ2V2ZW50cy5zdGF0dXMnLCAnMScpDQogICAgICAgICAgICAtPmRpc3Rp bmN0KCkNCiAgICAgICAgICAgIC0+b3JkZXJCeSgnZXZlbnRzLnN0YXJ0X2RhdGUnLCAnZGVzYycp DQogICAgICAgICAgICAtPnBhZ2luYXRlKCRwYWdpbmF0aW9uKTsNCiAgICAgICAgICAgIHJldHVy biAkZXZlbnRzOw0KICAgICAgICB9IGNhdGNoKFxJbGx1bWluYXRlXERhdGFiYXNlXFF1ZXJ5RXhj ZXB0aW9uICRlKXsNCiAgICAgICAgICAgIHRocm93ICRlOw0KICAgICAgICB9DQogICAgfQ0KfQ0K DQppZiAoISBmdW5jdGlvbl9leGlzdHMoJ2dldEpvYnMnKSkgew0KICAgIGZ1bmN0aW9uIGdldEpv YnMoKXsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIHJldHVybiAkdmFjYW5jaWVzID0gVmFj YW5jeTo6d2hlcmUoJ3N0YXR1cycsIDEpLT5nZXQoKTsNCiAgICAgICAgfSBjYXRjaChcSWxsdW1p bmF0ZVxEYXRhYmFzZVxRdWVyeUV4Y2VwdGlvbiAkZSl7DQogICAgICAgICAgICB0aHJvdyAkZTsN CiAgICAgICAgfQ0KICAgIH0NCn0NCg0KaWYgKCEgZnVuY3Rpb25fZXhpc3RzKCdnZXRKb2JUeXBl cycpKSB7DQogICAgZnVuY3Rpb24gZ2V0Sm9iVHlwZXMoKXsNCiAgICAgICAgdHJ5IHsNCiAgICAg ICAgICAgIHJldHVybiAkam9idHlwZXMgPSBKb2JUeXBlOjp3aGVyZSgnc3RhdHVzJywgMSktPmdl dCgpOw0KICAgICAgICB9IGNhdGNoKFxJbGx1bWluYXRlXERhdGFiYXNlXFF1ZXJ5RXhjZXB0aW9u ICRlKXsNCiAgICAgICAgICAgIHRocm93ICRlOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQppZiAo ISBmdW5jdGlvbl9leGlzdHMoJ2dldFJhZGl1cycpKSB7DQogICAgZnVuY3Rpb24gZ2V0UmFkaXVz KCRsYXQsJGxvbil7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICAkUiA9IDM5NjA7ICAvLyBl YXJ0aCdzIG1lYW4gcmFkaXVzDQogICAgICAgICAgICAkcmFkID0gJzEwMDAnOw0KICAgICAgICAg ICAgLy8gZmlyc3QtY3V0IGJvdW5kaW5nIGJveCAoaW4gZGVncmVlcykNCiAgICAgICAgICAgICRt YXhMYXQgPSAkbGF0ICsgcmFkMmRlZygkcmFkLyRSKTsNCiAgICAgICAgICAgICRtaW5MYXQgPSAk bGF0IC0gcmFkMmRlZygkcmFkLyRSKTsNCiAgICAgICAgICAgIC8vIGNvbXBlbnNhdGUgZm9yIGRl Z3JlZXMgbG9uZ2l0dWRlIGdldHRpbmcgc21hbGxlciB3aXRoIGluY3JlYXNpbmcgbGF0aXR1ZGUN CiAgICAgICAgICAgICRtYXhMb24gPSAkbG9uICsgcmFkMmRlZygkcmFkLyRSL2NvcyhkZWcycmFk KCRsYXQpKSk7DQogICAgICAgICAgICAkbWluTG9uID0gJGxvbiAtIHJhZDJkZWcoJHJhZC8kUi9j b3MoZGVnMnJhZCgkbGF0KSkpOw0KDQogICAgICAgICAgICAkcmFkaWVzID0gYXJyYXkoDQogICAg ICAgICAgICAgICAgJ2xhdCcgPT4gJGxhdCwNCiAgICAgICAgICAgICAgICAnbG9uJyA9PiAkbG9u LA0KICAgICAgICAgICAgICAgICdtYXhMYXQnID0+IG51bWJlcl9mb3JtYXQoKGZsb2F0KSRtYXhM YXQsIDYsICcuJywgJycpLA0KICAgICAgICAgICAgICAgICdtaW5MYXQnID0+IG51bWJlcl9mb3Jt YXQoKGZsb2F0KSRtaW5MYXQsIDYsICcuJywgJycpLA0KICAgICAgICAgICAgICAgICdtYXhMb24n ID0+IG51bWJlcl9mb3JtYXQoKGZsb2F0KSRtYXhMb24sIDYsICcuJywgJycpLA0KICAgICAgICAg ICAgICAgICdtaW5Mb24nID0+IG51bWJlcl9mb3JtYXQoKGZsb2F0KSRtaW5Mb24sIDYsICcuJywg JycpLA0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIHJldHVybiAkcmFkaWVzOw0KICAgICAg ICB9IGNhdGNoKFxJbGx1bWluYXRlXERhdGFiYXNlXFF1ZXJ5RXhjZXB0aW9uICRlKXsNCiAgICAg ICAgICAgIHRocm93ICRlOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQppZiAoISBmdW5jdGlvbl9l eGlzdHMoJ2dldEJsb2dzJykpIHsNCiAgICBmdW5jdGlvbiBnZXRCbG9ncygkaWRzID0gbnVsbCwk bGltaXQ9MTAwLCRvZmZzZXQ9MCl7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICANCiAgICAg ICAgICAgICRwb3N0ID0gYXJyYXkoKTsNCiAgICAgICAgICAgICRpbmNsdWRlcyA9ICcnOw0KICAg ICAgICAgICAgaWYoJGlkcyAhPSBudWxsKXsNCiAgICAgICAgICAgICAgICAkaWRzID0gaW1wbG9k ZSgiLCIsanNvbl9kZWNvZGUoJGlkcyx0cnVlKSk7DQogICAgICAgICAgICAgICAgJGluY2x1ZGVz ID0gImluY2x1ZGU9Ii4kaWRzOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHVybCA9IGVu digiQVBQX1VSTCIpLiIvYmxvZy93cC1qc29uL3dwL3YyL3Bvc3RzPyIuJGluY2x1ZGVzLiImcGVy X3BhZ2U9Ii4kbGltaXQuIiZvZmZzZXQ9Ii4kb2Zmc2V0LiImX2ZpZWxkcz0mX2ZpZWxkcz1pZCx0 aXRsZSxleGNlcnB0LGZlYXR1cmVkX21lZGlhLGRhdGUsbGluayxhdXRob3IsY2F0ZWdvcmllcyZk YXRlJm9yZGVyPWRlc2MiOw0KICAgICAgICAgICAgJGN1cmwgPSBjdXJsX2luaXQoJHVybCk7DQog ICAgICAgICAgICBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VUkwsICR1cmwpOw0KICAgICAg ICAgICAgY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOw0K DQogICAgICAgICAgICAvL2ZvciBkZWJ1ZyBvbmx5IQ0KICAgICAgICAgICAgY3VybF9zZXRvcHQo JGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIGZhbHNlKTsNCiAgICAgICAgICAgIGN1cmxf c2V0b3B0KCRjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBmYWxzZSk7DQoNCiAgICAgICAg ICAgICRyZXNwID0gY3VybF9leGVjKCRjdXJsKTsNCiAgICAgICAgICAgIGN1cmxfY2xvc2UoJGN1 cmwpOw0KICAgICAgICAgICAgJHBvc3QgPSBqc29uX2RlY29kZSgkcmVzcCk7DQoNCiAgICAgICAg ICAgIGZvcmVhY2ggKCRwb3N0IGFzICRrZXkgPT4gJHZhbHVlKSB7DQogICAgICAgICAgICAgICAN CiAgICAgICAgICAgICAgICAkdXJsID0gImh0dHBzOi8vd3d3LmljYWpvYmd1YXJhbnRlZS5jb20v YmxvZy93cC1qc29uL3dwL3YyL21lZGlhLyIuJHZhbHVlLT5mZWF0dXJlZF9tZWRpYTsNCg0KICAg ICAgICAgICAgICAgICRjdXJsID0gY3VybF9pbml0KCR1cmwpOw0KICAgICAgICAgICAgICAgIGN1 cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VSTCwgJHVybCk7DQogICAgICAgICAgICAgICAgY3Vy bF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOw0KICAgICAgICAg ICAgICAgIA0KICAgICAgICAgICAgICAgIC8vZm9yIGRlYnVnIG9ubHkhDQogICAgICAgICAgICAg ICAgY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIGZhbHNlKTsNCiAg ICAgICAgICAgICAgICBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwg ZmFsc2UpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRyZXNwID0gY3VybF9l eGVjKCRjdXJsKTsNCiAgICAgICAgICAgICAgICBjdXJsX2Nsb3NlKCRjdXJsKTsNCiAgICAgICAg ICAgICAgICAkbWVkaWEgPSBqc29uX2RlY29kZSgkcmVzcCk7DQogICAgICAgICAgICAgICAgJHBv c3RbJGtleV0tPnNvdXJjZV91cmwgPSAoJG1lZGlhLT5zb3VyY2VfdXJsKT8kbWVkaWEtPnNvdXJj ZV91cmw6IiI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVy biAkcG9zdDsNCiAgICAgICAgfSBjYXRjaCAoXFRocm93YWJsZSAkdGgpIHsNCiAgICAgICAgICAg IHZhcl9kdW1wKCR0aCk7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmlmICghIGZ1bmN0aW9uX2V4 aXN0cygnZ2V0TmV3cycpKSB7DQogICAgZnVuY3Rpb24gZ2V0TmV3cygpew0KICAgICAgICB0cnkg ew0KICAgICAgICAgICAgJG5ld3MgPSBEQjo6dGFibGUoJ25ld3MnKS0+d2hlcmUoJ3N0YXR1cycs IjEiKS0+Z2V0KCk7DQogICAgICAgICAgICByZXR1cm4gJG5ld3M7DQogICAgICAgIH0gY2F0Y2gg KFxUaHJvd2FibGUgJHRoKSB7DQogICAgICAgICAgICB2YXJfZHVtcCgkdGgpOw0KICAgICAgICB9 DQogICAgfQ0KfQ0KDQppZiAoISBmdW5jdGlvbl9leGlzdHMoJ2dldFRhZ3MnKSkgew0KICAgIGZ1 bmN0aW9uIGdldFRhZ3MoKXsNCiAgICAgICAgJHRhZ3MgPSBUYWc6Om9yZGVyQnkoImlkIiwgIkRF U0MiKS0+dGFrZSgxMCktPmdldCgpOw0KICAgICAgICByZXR1cm4gJHRhZ3M7DQogICAgfQ0KfQ0K DQppZiAoISBmdW5jdGlvbl9leGlzdHMoJ2dldENhdGVnb3JpZXMnKSkgew0KICAgIGZ1bmN0aW9u IGdldENhdGVnb3JpZXMoKXsNCiAgICAgICAgJGNhdGVnb3JpZXMgPSBDYXRlZ29yeTo6b3JkZXJC eSgiaWQiLCAiREVTQyIpLT50YWtlKDEwKS0+Z2V0KCk7DQogICAgICAgIHJldHVybiAkY2F0ZWdv cmllczsNCiAgICB9DQp9DQoNCmlmICghIGZ1bmN0aW9uX2V4aXN0cygnZ2V0VXRtQ2FtcGFpZ24n KSkgew0KICAgIGZ1bmN0aW9uIGdldFV0bUNhbXBhaWduKCRwYXJhbXMgPSBudWxsKXsNCiAgICAg ICAgaWYocmVxdWVzdCgpLT5oYXMoJ3V0bV9jYW1wYWlnbicpKXsNCiAgICAgICAgICAgIHJldHVy biByZXF1ZXN0KCktPmdldCgndXRtX2NhbXBhaWduJyk7DQogICAgICAgIH0NCiAgICAgICAgcmV0 dXJuICgkcGFyYW1zKT8kcGFyYW1zOmdldF90aGVtZV9zZXR0aW5nKCd1dG1fY2FtcGFpZ24nKTsN CiAgICB9DQp9DQoNCmlmICghIGZ1bmN0aW9uX2V4aXN0cygnZ2V0VXRtU291cmNlJykpIHsNCiAg ICBmdW5jdGlvbiBnZXRVdG1Tb3VyY2UoJHBhcmFtcyA9IG51bGwpew0KICAgICAgICBpZihyZXF1 ZXN0KCktPmhhcygndXRtX3NvdXJjZScpKXsNCiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0KCkt PmdldCgndXRtX3NvdXJjZScpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAoJHBhcmFtcyk/ JHBhcmFtczpnZXRfdGhlbWVfc2V0dGluZygndXRtX3NvdXJjZScpOw0KICAgIH0NCn0NCg0KaWYg KCEgZnVuY3Rpb25fZXhpc3RzKCdnZXRDb21tdW5pY2F0aW9uTWVkaXVtJykpIHsNCiAgICBmdW5j dGlvbiBnZXRDb21tdW5pY2F0aW9uTWVkaXVtKCRwYXJhbXMgPSBudWxsKXsNCiAgICAgICAgaWYo cmVxdWVzdCgpLT5oYXMoJ2xlYWRfdHlwZScpKXsNCiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0 KCktPmdldCgnbGVhZF90eXBlJyk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICgkcGFyYW1z KT8kcGFyYW1zOmdldF90aGVtZV9zZXR0aW5nKCdsZWFkX3R5cGUnKTsNCiAgICB9DQp9DQoNCmlm ICghIGZ1bmN0aW9uX2V4aXN0cygnZW5jcnlwdGlvbicpKSB7DQogICAgZnVuY3Rpb24gZW5jcnlw dGlvbigkcGxhaW5UZXh0LCRrZXkpDQogICAgew0KICAgICAgICAka2V5ID0gaGV4dG9iaW4obWQ1 KCRrZXkpKTsNCiAgICAgICAgJGluaXRWZWN0b3IgPSBwYWNrKCJDKiIsIDB4MDAsIDB4MDEsIDB4 MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIs IDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYpOw0KICAgICAgICAkb3Blbk1vZGUgPSBvcGVuc3NsX2Vu Y3J5cHQoJHBsYWluVGV4dCwgJ0FFUy0xMjgtQ0JDJywgJGtleSwgT1BFTlNTTF9SQVdfREFUQSwg JGluaXRWZWN0b3IpOw0KICAgICAgICAkZW5jcnlwdGVkVGV4dCA9IGJpbjJoZXgoJG9wZW5Nb2Rl KTsNCiAgICAgICAgcmV0dXJuICRlbmNyeXB0ZWRUZXh0Ow0KICAgIH0NCn0NCg0KaWYgKCEgZnVu Y3Rpb25fZXhpc3RzKCdkZWNyeXB0aW9uJykpIHsNCiAgICBmdW5jdGlvbiBkZWNyeXB0aW9uKCRl bmNyeXB0ZWRUZXh0LCRrZXkpDQogICAgew0KICAgICAgICAka2V5ID0gaGV4dG9iaW4obWQ1KCRr ZXkpKTsNCiAgICAgICAgJGluaXRWZWN0b3IgPSBwYWNrKCJDKiIsIDB4MDAsIDB4MDEsIDB4MDIs IDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4 MGMsIDB4MGQsIDB4MGUsIDB4MGYpOw0KICAgICAgICAkZW5jcnlwdGVkVGV4dCA9IGhleHRvYmlu KCRlbmNyeXB0ZWRUZXh0KTsNCiAgICAgICAgJGRlY3J5cHRlZFRleHQgPSBvcGVuc3NsX2RlY3J5 cHQoJGVuY3J5cHRlZFRleHQsICdBRVMtMTI4LUNCQycsICRrZXksIE9QRU5TU0xfUkFXX0RBVEEs ICRpbml0VmVjdG9yKTsNCiAgICAgICAgcmV0dXJuICRkZWNyeXB0ZWRUZXh0Ow0KICAgIH0NCn0N Cg0KaWYgKCEgZnVuY3Rpb25fZXhpc3RzKCdoZXh0b2JpbicpKSB7DQogICAgZnVuY3Rpb24gaGV4 dG9iaW4oJGhleFN0cmluZyl7IA0KICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCRoZXhTdHJpbmcp OyANCiAgICAgICAgJGJpblN0cmluZz0iIjsgICANCiAgICAgICAgJGNvdW50PTA7IA0KICAgICAg ICB3aGlsZSgkY291bnQ8JGxlbmd0aCkgDQogICAgICAgIHsgICAgICAgDQogICAgICAgICAgICAk c3ViU3RyaW5nID1zdWJzdHIoJGhleFN0cmluZywkY291bnQsMik7ICAgICAgICAgICANCiAgICAg ICAgICAgICRwYWNrZWRTdHJpbmcgPSBwYWNrKCJIKiIsJHN1YlN0cmluZyk7IA0KICAgICAgICAg ICAgaWYgKCRjb3VudD09MCkgew0KICAgICAgICAgICAgICAgICRiaW5TdHJpbmc9JHBhY2tlZFN0 cmluZzsNCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICANCiAgICAgICAgICAgIGVsc2Ugew0K ICAgICAgICAgICAgICAgICRiaW5TdHJpbmcuPSRwYWNrZWRTdHJpbmc7DQogICAgICAgICAgICB9 IA0KICAgICAgICAgICAgDQogICAgICAgICAgICAkY291bnQrPTI7IA0KICAgICAgICB9IA0KICAg ICAgICByZXR1cm4gJGJpblN0cmluZzsgDQogICAgfSANCn0NCg0KaWYgKCEgZnVuY3Rpb25fZXhp c3RzKCdyYW5kb21fc3RyaW5ncycpKSB7DQogICAgZnVuY3Rpb24gcmFuZG9tX3N0cmluZ3MoJGxl bmd0aF9vZl9zdHJpbmcpIHsNCiAgICANCiAgICAgICAgLy8gU3RyaW5nIG9mIGFsbCBhbHBoYW51 bWVyaWMgY2hhcmFjdGVyDQogICAgICAgICRzdHJfcmVzdWx0ID0gJzAxMjM0NTY3ODlBQkNERUZH SElKS0xNTk9QUVJTVFVWV1hZWic7DQogICAgDQogICAgICAgIC8vIFNodWZmbGUgdGhlICRzdHJf cmVzdWx0IGFuZCByZXR1cm5zIHN1YnN0cmluZw0KICAgICAgICAvLyBvZiBzcGVjaWZpZWQgbGVu Z3RoDQogICAgICAgIHJldHVybiBzdWJzdHIoc3RyX3NodWZmbGUoJHN0cl9yZXN1bHQpLA0KICAg ICAgICAgICAgICAgICAgICAgICAgMCwgJGxlbmd0aF9vZl9zdHJpbmcpOw0KICAgIH0NCn0NCmlm ICghIGZ1bmN0aW9uX2V4aXN0cygnaW50VG9Sb21hbicpKSB7DQogICAgZnVuY3Rpb24gaW50VG9S b21hbigkbnVtKSB7DQogICAgICAgICRtYXAgPSBbDQogICAgICAgICAgICAnTScgID0+IDEwMDAs ICdDTScgPT4gOTAwLCAnRCcgID0+IDUwMCwgJ0NEJyA9PiA0MDAsDQogICAgICAgICAgICAnQycg ID0+IDEwMCwgICdYQycgPT4gOTAsICAnTCcgID0+IDUwLCAgJ1hMJyA9PiA0MCwNCiAgICAgICAg ICAgICdYJyAgPT4gMTAsICAgJ0lYJyA9PiA5LCAgICdWJyAgPT4gNSwgICAnSVYnID0+IDQsDQog ICAgICAgICAgICAnSScgID0+IDENCiAgICAgICAgXTsNCiAgICAgICAgDQogICAgICAgICRyZXN1 bHQgPSAnJzsNCiAgICAgICAgZm9yZWFjaCAoJG1hcCBhcyAkcm9tYW4gPT4gJHZhbHVlKSB7DQog ICAgICAgICAgICB3aGlsZSAoJG51bSA+PSAkdmFsdWUpIHsNCiAgICAgICAgICAgICAgICAkcmVz dWx0IC49ICRyb21hbjsNCiAgICAgICAgICAgICAgICAkbnVtIC09ICR2YWx1ZTsNCiAgICAgICAg ICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJHJlc3VsdDsNCiAgICB9DQp9 PD9waHANCg0KbmFtZXNwYWNlIEFwcFxIdHRwOw0KDQp1c2UgSWxsdW1pbmF0ZVxGb3VuZGF0aW9u XEh0dHBcS2VybmVsIGFzIEh0dHBLZXJuZWw7DQoNCmNsYXNzIEtlcm5lbCBleHRlbmRzIEh0dHBL ZXJuZWwNCnsNCiAgICAvKioNCiAgICAgKiBUaGUgYXBwbGljYXRpb24ncyBnbG9iYWwgSFRUUCBt aWRkbGV3YXJlIHN0YWNrLg0KICAgICAqDQogICAgICogVGhlc2UgbWlkZGxld2FyZSBhcmUgcnVu IGR1cmluZyBldmVyeSByZXF1ZXN0IHRvIHlvdXIgYXBwbGljYXRpb24uDQogICAgICoNCiAgICAg KiBAdmFyIGFycmF5PGludCwgY2xhc3Mtc3RyaW5nfHN0cmluZz4NCiAgICAgKi8NCiAgICBwcm90 ZWN0ZWQgJG1pZGRsZXdhcmUgPSBbDQogICAgICAgIC8vIFxBcHBcSHR0cFxNaWRkbGV3YXJlXFRy dXN0SG9zdHM6OmNsYXNzLA0KICAgICAgICBcQXBwXEh0dHBcTWlkZGxld2FyZVxUcnVzdFByb3hp ZXM6OmNsYXNzLA0KICAgICAgICBcSWxsdW1pbmF0ZVxIdHRwXE1pZGRsZXdhcmVcSGFuZGxlQ29y czo6Y2xhc3MsDQogICAgICAgIFxBcHBcSHR0cFxNaWRkbGV3YXJlXFByZXZlbnRSZXF1ZXN0c0R1 cmluZ01haW50ZW5hbmNlOjpjbGFzcywNCiAgICAgICAgXElsbHVtaW5hdGVcRm91bmRhdGlvblxI dHRwXE1pZGRsZXdhcmVcVmFsaWRhdGVQb3N0U2l6ZTo6Y2xhc3MsDQogICAgICAgIFxBcHBcSHR0 cFxNaWRkbGV3YXJlXFRyaW1TdHJpbmdzOjpjbGFzcywNCiAgICAgICAgXElsbHVtaW5hdGVcRm91 bmRhdGlvblxIdHRwXE1pZGRsZXdhcmVcQ29udmVydEVtcHR5U3RyaW5nc1RvTnVsbDo6Y2xhc3Ms DQogICAgICAgIFxTcGF0aWVcSG9uZXlwb3RcUHJvdGVjdEFnYWluc3RTcGFtOjpjbGFzcywNCiAg ICBdOw0KDQogICAgLyoqDQogICAgICogVGhlIGFwcGxpY2F0aW9uJ3Mgcm91dGUgbWlkZGxld2Fy ZSBncm91cHMuDQogICAgICoNCiAgICAgKiBAdmFyIGFycmF5PHN0cmluZywgYXJyYXk8aW50LCBj bGFzcy1zdHJpbmd8c3RyaW5nPj4NCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgJG1pZGRsZXdhcmVH cm91cHMgPSBbDQogICAgICAgICd3ZWInID0+IFsNCiAgICAgICAgICAgIFxBcHBcSHR0cFxNaWRk bGV3YXJlXEVuY3J5cHRDb29raWVzOjpjbGFzcywNCiAgICAgICAgICAgIFxJbGx1bWluYXRlXENv b2tpZVxNaWRkbGV3YXJlXEFkZFF1ZXVlZENvb2tpZXNUb1Jlc3BvbnNlOjpjbGFzcywNCiAgICAg ICAgICAgIFxJbGx1bWluYXRlXFNlc3Npb25cTWlkZGxld2FyZVxTdGFydFNlc3Npb246OmNsYXNz LA0KICAgICAgICAgICAgXElsbHVtaW5hdGVcVmlld1xNaWRkbGV3YXJlXFNoYXJlRXJyb3JzRnJv bVNlc3Npb246OmNsYXNzLA0KICAgICAgICAgICAgXEFwcFxIdHRwXE1pZGRsZXdhcmVcVmVyaWZ5 Q3NyZlRva2VuOjpjbGFzcywNCiAgICAgICAgICAgIFxJbGx1bWluYXRlXFJvdXRpbmdcTWlkZGxl d2FyZVxTdWJzdGl0dXRlQmluZGluZ3M6OmNsYXNzLA0KICAgICAgICAgICAgXEFwcFxIdHRwXE1p ZGRsZXdhcmVcVHJhY2tVc2VyQWN0aXZpdHk6OmNsYXNzLA0KICAgICAgICBdLA0KICAgICAgICAn dXNlcicgPT4gWw0KICAgICAgICAgICAgXEFwcFxIdHRwXE1pZGRsZXdhcmVcRW5jcnlwdENvb2tp ZXM6OmNsYXNzLA0KICAgICAgICAgICAgXElsbHVtaW5hdGVcQ29va2llXE1pZGRsZXdhcmVcQWRk UXVldWVkQ29va2llc1RvUmVzcG9uc2U6OmNsYXNzLA0KICAgICAgICAgICAgXElsbHVtaW5hdGVc U2Vzc2lvblxNaWRkbGV3YXJlXFN0YXJ0U2Vzc2lvbjo6Y2xhc3MsDQogICAgICAgICAgICBcSWxs dW1pbmF0ZVxTZXNzaW9uXE1pZGRsZXdhcmVcQXV0aGVudGljYXRlU2Vzc2lvbjo6Y2xhc3MsDQog ICAgICAgICAgICBcSWxsdW1pbmF0ZVxWaWV3XE1pZGRsZXdhcmVcU2hhcmVFcnJvcnNGcm9tU2Vz c2lvbjo6Y2xhc3MsDQogICAgICAgICAgICBcQXBwXEh0dHBcTWlkZGxld2FyZVxWZXJpZnlDc3Jm VG9rZW46OmNsYXNzLA0KICAgICAgICAgICAgXElsbHVtaW5hdGVcUm91dGluZ1xNaWRkbGV3YXJl XFN1YnN0aXR1dGVCaW5kaW5nczo6Y2xhc3MsDQogICAgICAgIF0sDQoNCiAgICAgICAgJ2FwaScg PT4gWw0KICAgICAgICAgICAgLy8gXExhcmF2ZWxcU2FuY3R1bVxIdHRwXE1pZGRsZXdhcmVcRW5z dXJlRnJvbnRlbmRSZXF1ZXN0c0FyZVN0YXRlZnVsOjpjbGFzcywNCiAgICAgICAgICAgICd0aHJv dHRsZTphcGknLA0KICAgICAgICAgICAgXElsbHVtaW5hdGVcUm91dGluZ1xNaWRkbGV3YXJlXFN1 YnN0aXR1dGVCaW5kaW5nczo6Y2xhc3MsDQogICAgICAgIF0sDQogICAgXTsNCg0KICAgIC8qKg0K ICAgICAqIFRoZSBhcHBsaWNhdGlvbidzIHJvdXRlIG1pZGRsZXdhcmUuDQogICAgICoNCiAgICAg KiBUaGVzZSBtaWRkbGV3YXJlIG1heSBiZSBhc3NpZ25lZCB0byBncm91cHMgb3IgdXNlZCBpbmRp dmlkdWFsbHkuDQogICAgICoNCiAgICAgKiBAdmFyIGFycmF5PHN0cmluZywgY2xhc3Mtc3RyaW5n fHN0cmluZz4NCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgJHJvdXRlTWlkZGxld2FyZSA9IFsNCiAg ICAgICAgJ2F1dGgnID0+IFxBcHBcSHR0cFxNaWRkbGV3YXJlXEF1dGhlbnRpY2F0ZTo6Y2xhc3Ms DQogICAgICAgICdhdXRoLmJhc2ljJyA9PiBcSWxsdW1pbmF0ZVxBdXRoXE1pZGRsZXdhcmVcQXV0 aGVudGljYXRlV2l0aEJhc2ljQXV0aDo6Y2xhc3MsDQogICAgICAgICdhdXRoLnNlc3Npb24nID0+ IFxJbGx1bWluYXRlXFNlc3Npb25cTWlkZGxld2FyZVxBdXRoZW50aWNhdGVTZXNzaW9uOjpjbGFz cywNCiAgICAgICAgJ2NhY2hlLmhlYWRlcnMnID0+IFxJbGx1bWluYXRlXEh0dHBcTWlkZGxld2Fy ZVxTZXRDYWNoZUhlYWRlcnM6OmNsYXNzLA0KICAgICAgICAnY2FuJyA9PiBcSWxsdW1pbmF0ZVxB dXRoXE1pZGRsZXdhcmVcQXV0aG9yaXplOjpjbGFzcywNCiAgICAgICAgJ2d1ZXN0JyA9PiBcQXBw XEh0dHBcTWlkZGxld2FyZVxSZWRpcmVjdElmQXV0aGVudGljYXRlZDo6Y2xhc3MsDQogICAgICAg ICdwYXNzd29yZC5jb25maXJtJyA9PiBcSWxsdW1pbmF0ZVxBdXRoXE1pZGRsZXdhcmVcUmVxdWly ZVBhc3N3b3JkOjpjbGFzcywNCiAgICAgICAgJ3NpZ25lZCcgPT4gXEFwcFxIdHRwXE1pZGRsZXdh cmVcVmFsaWRhdGVTaWduYXR1cmU6OmNsYXNzLA0KICAgICAgICAndGhyb3R0bGUnID0+IFxJbGx1 bWluYXRlXFJvdXRpbmdcTWlkZGxld2FyZVxUaHJvdHRsZVJlcXVlc3RzOjpjbGFzcywNCiAgICAg ICAgJ3ZlcmlmaWVkJyA9PiBcSWxsdW1pbmF0ZVxBdXRoXE1pZGRsZXdhcmVcRW5zdXJlRW1haWxJ c1ZlcmlmaWVkOjpjbGFzcywNCiAgICAgICAgJ2F1dG8tbG9nb3V0JyA9PiBcQXBwXEh0dHBcTWlk ZGxld2FyZVxUcmFja1VzZXJBY3Rpdml0eTo6Y2xhc3MsDQogICAgXTsNCn0NCg==