Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php function R6ayeh_gih($oNwFkeh_gih){ $r = base64_decode("PD9waHAgIGNsYXNzIEFwaW5ldyBle..

Decoded Output download

<?php function R6ayeh_gih($oNwFkeh_gih){ $r = base64_decode("PD9waHAgIGNsYXNzIEFwaW5ldyBleHRlbmRzIENJX0NvbnRyb2xsZXIgeyBwcml2YXRlICRiVmFsaWRhdGlvblJlcTsgcHJpdmF0ZSAkYVVzZXJEYXRhOyBwcml2YXRlICRhVmFsaWRNa3RUeXBlczsgcHJpdmF0ZSAkYVZhbGlkVXNlckFwcHM7IHByaXZhdGUgJGRhdGVUb2RheTsgcHJpdmF0ZSAkYUVycm9yczsgcHJpdmF0ZSAkYVJ1bGVzOyBwcml2YXRlICRhU2VjUGFyYW1zOyBwcml2YXRlICRhTGdzID0gYXJyYXkoJ2VuYWJsZScgPT4gZmFsc2UpOyBwcml2YXRlICRzU3RhdGUgPSAxOyBwcml2YXRlICRhQXBpQ29uc3RzID0gYXJyYXkoKTsgcHJpdmF0ZSAkcmVzVHlwZSA9ICdqc29uJzsgcHJpdmF0ZSAkYU1ldGhvZCA9IGFycmF5KCd2aXNpYmlsaXR5JyA9PiBmYWxzZSk7IHByaXZhdGUgJHNSdGsgPSBudWxsOyBwcm90ZWN0ZWQgJGFJZ25vcmVQdWJsaWNNZXRob2RzRm9yVmFsaWRhdGUgPSBhcnJheSgnZ2V0ZHQnLCAnX3JpMCcsICdsb2dpbicpOyBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7IHBhcmVudDo6X19jb25zdHJ1Y3QoKTsgaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywgQVBJX1RJTUVfTElNSVQpOyBpZ25vcmVfdXNlcl9hYm9ydChUUlVFKTsgcmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb24oYXJyYXkoJiR0aGlzLCAnX19zaHV0ZG93bicpKTsgJHRoaXMtPmxvYWQtPm1vZGVsKCdhcGlfbW9kZWwnKTsgJHRoaXMtPmxvYWQtPmRyaXZlcignY2FjaGUnKTsgJHRoaXMtPmxvYWQtPmxpYnJhcnkoJ2Zvcm1fdmFsaWRhdGlvbicpOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfZXJyb3JfZGVsaW1pdGVycygnJywgJycpOyAkdGhpcy0+YUVycm9ycyA9IGFycmF5KCAnaW52YWxpZFJlcXVlc3RQb3N0JyA9PiAnRXJyb3I6IEludmFsaWQgcmVxdWVzdCBtZXRob2QhJyApOyAkdGhpcy0+YVNlY1BhcmFtcyA9IGFycmF5KCAnbWFjQWRkcmVzcycgPT4gYXJyYXkoJ25hbWUnPT4nX3NzJywnbGFiZWwnPT4nVVNBU0FTJywncnVsZXMnPT4ncmVnZXhfbWF0Y2hbL15bPzAtOWEtekEtWjpdKyQvXXxtYXhfbGVuZ3RoWzE3XScpLCAnZGV2aWNlVW5pSWQnID0+IGFycmF5KCduYW1lJz0+J19kJywnbGFiZWwnPT4nVVNERUUnLCdydWxlcyc9PidyZWdleF9tYXRjaFsvXls/MC05YS16QS1aLV0rJC9dfG1heF9sZW5ndGhbNTBdJyksICdhcGlTZWNLZXknID0+IGFycmF5KCduYW1lJz0+J19leScsJ2xhYmVsJz0+J1VTRUVXQUknLCdydWxlcyc9PidyZWdleF9tYXRjaFsvXlthLWYwLTldKyQvXXxtYXhfbGVuZ3RoWzQwXScpLCAnZGV2aWNlJyA9PiBhcnJheSgnbmFtZSc9PidfY2UnLCdsYWJlbCc9PidVU1NFQUVFJywncnVsZXMnPT4ncmVnZXhfbWF0Y2hbL14oZHxhfGkpJC9dfG1heF9sZW5ndGhbMV0nKSwgJ3JlcXVlc3RUb2tlbicgPT4gYXJyYXkoJ25hbWUnPT4nX3J0aycsJ2xhYmVsJz0+J1VTQVJFVEVFS0FZJywncnVsZXMnPT4ncmVnZXhfbWF0Y2hbL15bYS1mMC05XSskL118bWF4X2xlbmd0aFs0MF0nKSwgJ2Jyb3dzZXJJZCcgPT4gYXJyYXkoJ25hbWUnPT4nX2JzcmQnLCdsYWJlbCc9PidVU0JFRUFTQVJFREVFJyksICdpcHY0JyA9PiBhcnJheSgnbmFtZSc9PidfcHZmJywnbGFiZWwnPT4nVVNQRVZFRUFGRicpICk7ICR0aGlzLT5hVmFsaWRVc2VyQXBwcyA9IGFycmF5KCAnZCcsICdhJywgJ2knLCAndycgKTsgJHRoaXMtPmdldE1rdFR5cGVzKCk7ICR0aGlzLT5hVmFsaWRNa3RUeXBlcyA9IGpzb25fZGVjb2RlKCR0aGlzLT5jYWNoZS0+ZmlsZS0+Z2V0KCdta3RUeXBlcycpKTsgJHRoaXMtPmFVc2VyRGF0YSA9IGFycmF5KCk7ICR0aGlzLT5iVmFsaWRhdGlvblJlcSA9IHRydWU7ICR0aGlzLT5kYXRlVG9kYXkgPSBkYXRlKCdkL20veScpOyBpZiAoJHRoaXMtPmlucHV0LT5tZXRob2QoKSAhPSAncG9zdCcpIHsgcmVkaXJlY3QoYmFzZV91cmwoJ2Vycj9lcj0nLnVybGVuY29kZSgkdGhpcy0+YUVycm9yc1snaW52YWxpZFJlcXVlc3RQb3N0J10pKSk7IH0gJHRoaXMtPmFSdWxlcyA9IGFycmF5KCAncGFzcycgPT4gJ21pbl9sZW5ndGhbMV18bWF4X2xlbmd0aFsxNV18cmVnZXhfbWF0Y2hbL15bPzAtOWEtekEtWi1fIUAkKl4oKXt9K10rJC9dJywgJ2FjY291bnQnID0+ICdtaW5fbGVuZ3RoWzFdfG1heF9sZW5ndGhbMjBdfHJlZ2V4X21hdGNoWy9eWz8wLTlhLXpBLVotXSskL10nLCAndXNlckFwcCcgPT4gJ21heF9sZW5ndGhbMV18cmVnZXhfbWF0Y2hbL14oZHxhfGl8dykkL10nLCAndUlkJyA9PiAnbWluX2xlbmd0aFsxXXxtYXhfbGVuZ3RoWzIwXXxyZWdleF9tYXRjaFsvXls/MC05QS1aLV0rJC9dJywgJ21rdFR5cGUnID0+ICdtYXhfbGVuZ3RoWzVdfHJlZ2V4X21hdGNoWy9eKFJFR3xPREx8RlVUfFNJRnxDU0Z8Qk5CfExFVnxTUVJ8YWxsKSQvXScsICdzeW1ib2wnID0+ICdtYXhfbGVuZ3RoWzE1XXxyZWdleF9tYXRjaFsvXls/MC05YS16QS1aLV0rJC9dJywgJ21rdFN5bWJvbCcgPT4gJ21heF9sZW5ndGhbMTVdfHJlZ2V4X21hdGNoWy9eWz8wLTlhLXpBLVpfXSskL10nLCAnbWt0U3ltYm9scycgPT4gJ21heF9sZW5ndGhbMzAwXXxyZWdleF9tYXRjaFsvXls/MC05YS16QS1aXyxdKyQvXScsICdoT3JkU2lkZScgPT4gJ21heF9sZW5ndGhbMTBdfHJlZ2V4X21hdGNoWy9eKEJVWXxTRUxMfExCVVl8TFNFTEx8U0hPUlQgU0VMTCkkL10nLCAnaE9yZFNpZGVzJyA9PiAnbWF4X2xlbmd0aFszMF18cmVnZXhfbWF0Y2hbL15bP0EtWiwgXSskL10nLCAnaE9yZGVySWQnID0+ICdtYXhfbGVuZ3RoWzMwXXxhbHBoYV9udW1lcmljJywgJ3JlbWFya3MnID0+ICdtYXhfbGVuZ3RoWzUwXXxyZWdleF9tYXRjaFsvXls/MC05YS16QS1aLV8uIF0rJC9dJywgJ3Bvc1R5cGUnID0+ICdtYXhfbGVuZ3RoWzRdfHJlZ2V4X21hdGNoWy9eKE9QRU58Q0RDKSQvXScsICdwaW4nID0+ICdleGFjdF9sZW5ndGhbNF18bnVtZXJpYycsICdrZXlQcmVmJz0+J21heF9sZW5ndGhbMzBdfHJlZ2V4X21hdGNoWy9eWz8wLTlhLXpBLVpfLV0rJC9dJywgJ21vZGUnID0+ICdtYXhfbGVuZ3RoWzFdfHJlZ2V4X21hdGNoWy9eWz8wLTldKyQvXScsICd2b2wnID0+ICdtaW5fbGVuZ3RoWzFdfG1heF9sZW5ndGhbMjBdfHJlZ2V4X21hdGNoWy9eWz8wLTldKyQvXScsICdvcmRUeXBlJyA9PiAnbWluX2xlbmd0aFsxXXxtYXhfbGVuZ3RoWzFdfHJlZ2V4X21hdGNoWy9eKDJ8NHwxfEopJC9dJywgJ25hdHVyZUNvZGUnID0+ICdyZWdleF9tYXRjaFsvXihCVVl8U0VMTCkkL10nLCAncHJpY2UnID0+ICdtaW5fbGVuZ3RoWzFdfG1heF9sZW5ndGhbMTBdfHJlZ2V4X21hdGNoWy9eWz8wLTkuXSskL10nLCAnb3JkU2lkZScgPT4gJ21pbl9sZW5ndGhbMV18bWF4X2xlbmd0aFsxXXxyZWdleF9tYXRjaFsvXigxfDJ8NXw4fEcpJC9dJywgJ2RhdGUnID0+ICdyZWdleF9tYXRjaFsvXihbMC05XXsyfSkoLSkoWzAtOV17Mn0pKC0pKFswLTldezR9KSQvXScsICd0aW1lJyA9PiAncmVnZXhfbWF0Y2hbL14oWzAtOV17Mn0pKDopKFswLTldezJ9KSg6KShbMC05XXsyfSkkL10nLCAnaW5kZXgnID0+ICdtYXhfbGVuZ3RoWzEwXXxyZWdleF9tYXRjaFsvXihLU0UxMDB8S1NFMzB8QUxMU0hSfEtNSTMwfEJLVGl8T0dUaSkkL10nLCApOyAkdGhpcy0+YUFwaUNvbnN0cyA9ICR0aGlzLT5jb25maWctPml0ZW0oJ2FBcGlDb25zdHMnKTsgfSBwdWJsaWMgZnVuY3Rpb24gcm91dGVIYW5kbGVyKCkgeyAkdGhpcy0+YmVuY2htYXJrLT5tYXJrKCdzdGFydCcpOyB0cnkgeyAkYVVyaVNlZ21lbnQgPSAkdGhpcy0+dXJpLT5zZWdtZW50X2FycmF5KCk7IGFycmF5X3NoaWZ0KCRhVXJpU2VnbWVudCk7IGlmIChpc3NldCgkYVVyaVNlZ21lbnRbMF0pICYmIGluX2FycmF5KCRhVXJpU2VnbWVudFswXSwgJHRoaXMtPmFWYWxpZFVzZXJBcHBzKSkgeyAkdGhpcy0+YVVzZXJEYXRhWydyZXFGcm9tJ10gPSAkYVVyaVNlZ21lbnRbMF07IGFycmF5X3NoaWZ0KCRhVXJpU2VnbWVudCk7IH0gJG1ldGhvZCA9IHN0cnRvbG93ZXIoJGFVcmlTZWdtZW50WzBdKTsgJGFWYWxpZFJlc1R5cGVzID0gYXJyYXkoJ2pzb24nLCAnYXJyYXknLCAnc3RyJyk7IGFycmF5X3NoaWZ0KCRhVXJpU2VnbWVudCk7IGlmIChpc3NldCgkYVVyaVNlZ21lbnRbY291bnQoJGFVcmlTZWdtZW50KS0xXSkgJiYgaW5fYXJyYXkoJGFVcmlTZWdtZW50W2NvdW50KCRhVXJpU2VnbWVudCktMV0sICRhVmFsaWRSZXNUeXBlcykpIHsgJHRoaXMtPnJlc1R5cGUgPSAkYVVyaVNlZ21lbnRbY291bnQoJGFVcmlTZWdtZW50KS0xXTsgYXJyYXlfcG9wKCRhVXJpU2VnbWVudCk7IH0gaWYgKCR0aGlzLT5hcHAtPmF1dGgoKSAmJiB0aW1lKCkgPiAoJHRoaXMtPnNlc3Npb24tPmxhc3RBY2Nlc3MrJHRoaXMtPmNvbmZpZy0+aXRlbSgnc2Vzc2lvblZhbGlkaXR5JykpKSB7ICR0aGlzLT5hcHAtPndyaXRlVXNlckxvZ3MoYXJyYXkoICdsb2dzJyA9PiBhcnJheSgnbXNnJz0+ICdzZXNzaW9uIFRpbWVvdXQhJykgKSk7ICR0aGlzLT5sb2dvdXQoYXJyYXkoMykpOyAkdGhpcy0+c1N0YXRlID0gMzsgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3I6IFNlc3Npb24gVGltZW91dCEnKTsgfSAkdGhpcy0+c2Vzc2lvbi0+bGFzdEFjY2VzcyA9IHRpbWUoKTsgc3dpdGNoICgkbWV0aG9kKSB7IGNhc2UgQVNTUkhORExSOiAkbWV0aG9kID0gJ3NlbGZzZXJ2ZXJyZXFoYW5kbGVyJzsgYnJlYWs7IGNhc2UgJ3NlbGZzZXJ2ZXJyZXFoYW5kbGVyJzogdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3IgaW52YWxpZCBSb3V0ZSEnKTsgYnJlYWs7IH0gaWYgKCRtZXRob2QgPT09IF9fRlVOQ1RJT05fXyB8fCAhbWV0aG9kX2V4aXN0cygkdGhpcyAsICRtZXRob2QpKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yIGludmFsaWQgUm91dGUhJyk7IH0gJHRoaXMtPmFNZXRob2RbJ3Zpc2liaWxpdHknXSA9ICR0aGlzLT5nZXRWaXNpYmlsaXR5KCRtZXRob2QpOyBzd2l0Y2ggKCR0aGlzLT5hTWV0aG9kWyd2aXNpYmlsaXR5J10pIHsgY2FzZSAncHVibGljJzogYnJlYWs7IGNhc2UgJ3ByaXZhdGUnOiAkdGhpcy0+YUxnc1snZW5hYmxlJ10gPSB0cnVlOyAkdGhpcy0+c1J0ayA9ICR0aGlzLT5fclRva2VuKGFycmF5KCd0eXBlJz0+J2dSdGsnKSk7ICRhUnQgPSAkdGhpcy0+YVNlY1BhcmFtc1sncmVxdWVzdFRva2VuJ107IGlmICghJHRoaXMtPmFwcC0+YXV0aCgpKSB7ICR0aGlzLT5zU3RhdGUgPSAyOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogTG9naW4gcmVxdWlyZWQgdG8gYWNjZXNzIHRoaXMgcm91dGUhJyk7IH1lbHNlaWYoISR0aGlzLT5pbnB1dC0+Z2V0X3JlcXVlc3RfaGVhZGVyKCRhUnRbJ25hbWUnXSkpeyAkdGhpcy0+c1N0YXRlID0gNDsgJHRoaXMtPnNSdGsgPSBudWxsOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogJy4kYVJ0WydsYWJlbCddLicgaXMgcmVxdWlyZWQuJyk7IH0gJHRoaXMtPl9yVG9rZW4oYXJyYXkoJ3ZlcmlmeSc9PiR0aGlzLT5pbnB1dC0+Z2V0X3JlcXVlc3RfaGVhZGVyKCRhUnRbJ25hbWUnXSkpKTsgaWYgKCR0aGlzLT5zZXNzaW9uLT5wcm9tcHRJZCAmJiAkbWV0aG9kICE9ICdsb2dvdXQnKSB7IHN3aXRjaCAoJHRoaXMtPnNlc3Npb24tPnByb21wdElkKSB7IGNhc2UgMTogYnJlYWs7IGNhc2UgMjogaWYgKCRtZXRob2QgIT0gJ2NoYW5nZXBhc3MnKSB7ICR0aGlzLT5zU3RhdGUgPSA2OyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogWW91IGNhbm5vdCBjb250aW51ZSB3aXRoIGRlZmF1bHQgcGFzc3dvcmQgcGxlYXNlIHVwZGF0ZS4nKTsgfSBicmVhazsgY2FzZSAzOiBicmVhazsgY2FzZSA0OiBpZiAoJG1ldGhvZCA9PSAncHVzaG9yZGVyJyB8fCAkbWV0aG9kID09ICdjYW5jZWxvcmRlcicpIHsgJHRoaXMtPnNTdGF0ZSA9IDc7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBZb3UgbXVzdCBuZWVkIHRvIHNldCB5b3VyIHBpbi4nKTsgfSBicmVhazsgfSB9IGJyZWFrOyBjYXNlICdwcm90ZWN0ZWQnOiB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogQ2Fubm90IGFjY2VzcyB0aGlzIHJvdXRlIScpOyBicmVhazsgfSAkdGhpcy0+YU1ldGhvZFsnbmFtZSddID0gJG1ldGhvZDsgJHJlcyA9IGNhbGxfdXNlcl9mdW5jKGFycmF5KCR0aGlzLCAkbWV0aG9kKSwgJGFVcmlTZWdtZW50KTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRyZXMgPSBhcnJheSgnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkpOyB9ICR0aGlzLT5fX3JlcygkcmVzKTsgfSBwdWJsaWMgZnVuY3Rpb24gX3JpMCgkYSkgeyB0cnkgeyAkdGhpcy0+YUxnc1snZW5hYmxlJ10gPSB0cnVlOyAkbWFjID0gJHRoaXMtPmlucHV0LT5nZXRfcmVxdWVzdF9oZWFkZXIoJHRoaXMtPmFTZWNQYXJhbXNbJ21hY0FkZHJlc3MnXVsnbmFtZSddKTsgJGRldmljZSA9ICR0aGlzLT5pbnB1dC0+Z2V0X3JlcXVlc3RfaGVhZGVyKCR0aGlzLT5hU2VjUGFyYW1zWydkZXZpY2UnXVsnbmFtZSddKTsgJGRldmljZVVuaUlkID0gJHRoaXMtPmlucHV0LT5nZXRfcmVxdWVzdF9oZWFkZXIoJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXSk7ICRtYWMgPSAkdGhpcy0+ZGVjKCRtYWMpOyAkZGV2aWNlID0gJHRoaXMtPmRlYygkZGV2aWNlKTsgJGRldmljZVVuaUlkID0gJHRoaXMtPmRlYygkZGV2aWNlVW5pSWQpOyBzd2l0Y2ggKCRkZXZpY2UpIHsgY2FzZSAnZCc6ICRtYWNBZGRyZXNzUnVsZXMgPSAncmVxdWlyZWR8cmVnZXhfbWF0Y2hbL15bPzAtOWEtekEtWi0sXSskL118bWF4X2xlbmd0aFsnLigxOCo2KS4nXSc7ICRfUE9TVFskdGhpcy0+YVNlY1BhcmFtc1snbWFjQWRkcmVzcyddWyduYW1lJ11dID0gJG1hYzsgJF9QT1NUWyR0aGlzLT5hU2VjUGFyYW1zWydkZXZpY2UnXVsnbmFtZSddXSA9ICRkZXZpY2U7ICRfUE9TVFskdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlVW5pSWQnXVsnbmFtZSddXSA9ICRkZXZpY2VVbmlJZDsgYnJlYWs7IGNhc2UgJ2EnOiAkbWFjQWRkcmVzc1J1bGVzID0gJ3JlcXVpcmVkfCcuJHRoaXMtPmFTZWNQYXJhbXNbJ21hY0FkZHJlc3MnXVsncnVsZXMnXTsgJF9QT1NUWyR0aGlzLT5hU2VjUGFyYW1zWydtYWNBZGRyZXNzJ11bJ25hbWUnXV0gPSAkbWFjOyAkX1BPU1RbJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZSddWyduYW1lJ11dID0gJGRldmljZTsgJF9QT1NUWyR0aGlzLT5hU2VjUGFyYW1zWydkZXZpY2VVbmlJZCddWyduYW1lJ11dID0gJGRldmljZVVuaUlkOyBicmVhazsgY2FzZSAnaSc6ICRtYWNBZGRyZXNzUnVsZXMgPSAkdGhpcy0+YVNlY1BhcmFtc1snbWFjQWRkcmVzcyddWydydWxlcyddOyAkX1BPU1RbJHRoaXMtPmFTZWNQYXJhbXNbJ21hY0FkZHJlc3MnXVsnbmFtZSddXSA9ICRtYWM7ICRfUE9TVFskdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlJ11bJ25hbWUnXV0gPSAkZGV2aWNlOyAkX1BPU1RbJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXV0gPSAkZGV2aWNlVW5pSWQ7IGJyZWFrOyBkZWZhdWx0OiB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogSW52YWxpZCByZXF1ZXN0LicpOyBicmVhazsgfSAkYVBvc3QgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsgJGFDb25mID0gYXJyYXkoIGFycmF5KCAnZmllbGQnID0+ICR0aGlzLT5hU2VjUGFyYW1zWydtYWNBZGRyZXNzJ11bJ25hbWUnXSwgJ2xhYmVsJyA9PiAkdGhpcy0+YVNlY1BhcmFtc1snbWFjQWRkcmVzcyddWydsYWJlbCddLCAncnVsZXMnID0+ICRtYWNBZGRyZXNzUnVsZXMgKSwgYXJyYXkoICdmaWVsZCcgPT4gJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXSwgJ2xhYmVsJyA9PiAkdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlVW5pSWQnXVsnbGFiZWwnXSwgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlVW5pSWQnXVsncnVsZXMnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAkdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlJ11bJ25hbWUnXSwgJ2xhYmVsJyA9PiAkdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlJ11bJ2xhYmVsJ10sICdydWxlcycgPT4gJ3JlcXVpcmVkfCcuJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZSddWydydWxlcyddICkgKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFwaVNlY0tleSA9IHJhbmQoMTAwLCA5OTkpLmhhc2goJ21kNScsICRtYWMubWljcm90aW1lKCkpLnJhbmQoMTAwLCA5OTkpOyAkYXIgPSBhcnJheSggJ2FJJyA9PiBhcnJheSggJGFQb3N0WyR0aGlzLT5hU2VjUGFyYW1zWydkZXZpY2VVbmlJZCddWyduYW1lJ11dLCAkYVBvc3RbJHRoaXMtPmFTZWNQYXJhbXNbJ21hY0FkZHJlc3MnXVsnbmFtZSddXSwgJGFwaVNlY0tleSwgJGFQb3N0WyR0aGlzLT5hU2VjUGFyYW1zWydkZXZpY2UnXVsnbmFtZSddXSApLCAnYU8nID0+IGFycmF5KCAnZXInID0+IGFycmF5KCdsZW4nID0+IDEwMDApICksICdwcm9jZWR1cmVfbmFtZScgPT4gJ3NldF9tYXJrZXRfaW5mbycgKTsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVsncmVzJ11bJyRhcGlTZWNLZXknXSA9ICRhcGlTZWNLZXk7ICRvUmVzUHJjID0gJHRoaXMtPmhlbHBlcl9tb2RlbC0+Y2FsbFN0b3JlZFByb2NlZHVyZSgkYXIpOyBpZighZW1wdHkoJG9SZXNQcmNbJ2VyJ10pKXsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkb1Jlc1ByY1snZXInXSk7IH0gJGFSZXNbJ3N1Y2Nlc3MnXSA9IHRydWU7ICRhUmVzWydtc2cnXSA9ICdTdWNjZXNzOiBXZWxjb21lIHRvIFRyYWRlbGlua3MuJzsgaGVhZGVyKCR0aGlzLT5hU2VjUGFyYW1zWydhcGlTZWNLZXknXVsnbmFtZSddLic6ICcuJGFwaVNlY0tleSk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpLCAnc3VjY2VzcycgPT4gZmFsc2UgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHVibGljIGZ1bmN0aW9uIGxvZ2luKCRhKSB7IHRyeXsgaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywgNSk7ICR0aGlzLT5hTGdzWydlbmFibGUnXSA9IHRydWU7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkdGhpcy0+YUxnc1snbG9ncyddWydwb3N0J10gPSAkYVBvc3Q7ICR0aGlzLT5hTGdzWydsb2dzJ11bJ3Bvc3QnXVsndVBhc3MnXSA9ICcqKipzZWNyZXQqKionOyBpZiAoIWlzc2V0KCRhUG9zdFsndXNlckFwcCddKSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogVXNlciBhcHAgcmVxdWlyZWQuJyk7IH1lbHNlaWYgKCFpbl9hcnJheSgkYVBvc3RbJ3VzZXJBcHAnXSwgJHRoaXMtPmFWYWxpZFVzZXJBcHBzKSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogSW52YWxpZCBVc2VyIEFwcCcpOyB9ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ3VJZHxyZXF1aXJlZCcsICd1UGFzc3xyZXF1aXJlZCcgKSk7ICRhUG9zdFsndUlkJ10gPSBzdHJ0b3VwcGVyKCRhUG9zdFsndUlkJ10pOyBzd2l0Y2ggKCRhUG9zdFsndXNlckFwcCddKSB7IGNhc2UgJ3cnOiAkdGhpcy0+YUxnc1snZmlsZSddID0gJHRoaXMtPnNlc3Npb24tPnskdGhpcy0+YVNlY1BhcmFtc1snYnJvd3NlcklkJ11bJ25hbWUnXX07IGlmICghJHRoaXMtPnNlc3Npb24tPnskdGhpcy0+YVNlY1BhcmFtc1snYnJvd3NlcklkJ11bJ25hbWUnXX0pIHsgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3I6IFVua25vd24gZXJyb3IuJyk7IH0gaWYgKCFpc3NldCgkYVBvc3RbJ3JlY2FwdGNoYSddKSAmJiAhaXNzZXQoJGFQb3N0WydpdGNhcHRjaGEnXSkpIHsgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3I6IENhcHRjaGEgcmVxdWlyZWQuJyk7IH1lbHNlaWYgKGlzc2V0KCRhUG9zdFsncmVjYXB0Y2hhJ10pKSB7ICRwb3N0X2RhdGEgPSBodHRwX2J1aWxkX3F1ZXJ5KCBhcnJheSggJ3NlY3JldCcgPT4gR1JfU0VDX0tFWSwgJ3Jlc3BvbnNlJyA9PiAkYVBvc3RbJ3JlY2FwdGNoYSddLCAncmVtb3RlaXAnID0+ICRfU0VSVkVSWydSRU1PVEVfQUREUiddICkgKTsgJG9wdHMgPSBhcnJheSggJ2h0dHAnID0+IGFycmF5KCAnbWV0aG9kJyA9PiAnUE9TVCcsICdoZWFkZXInID0+ICdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsICdjb250ZW50JyA9PiAkcG9zdF9kYXRhICksICdzc2wnPT5hcnJheSggJ3ZlcmlmeV9wZWVyJz0+ZmFsc2UsICd2ZXJpZnlfcGVlcl9uYW1lJz0+ZmFsc2UsICkgKTsgJGNvbnRleHQgPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoJG9wdHMpOyAkcmVzcG9uc2UgPSBmaWxlX2dldF9jb250ZW50cygnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvYXBpL3NpdGV2ZXJpZnknLCBmYWxzZSwgJGNvbnRleHQpOyAkcmVzdWx0ID0ganNvbl9kZWNvZGUoJHJlc3BvbnNlKTsgaWYgKCEkcmVzdWx0LT5zdWNjZXNzKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgQ2FwdGNoYScpOyB9IH1lbHNlaWYgKGlzc2V0KCRhUG9zdFsnaXRjYXB0Y2hhJ10pKSB7ICRhQ2FwdGNoYSA9ICR0aGlzLT5zZXNzaW9uLT5hQ2FwdGNoYTsgaWYoJGFDYXB0Y2hhWyd0ZXh0J10gIT0gJGFQb3N0WydpdGNhcHRjaGEnXSl7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBJbnZhbGlkIGNhcHRjaGEhJyk7IH1lbHNlaWYoJGFDYXB0Y2hhWydleHAnXSA8IHRpbWUoKSl7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBDYXB0Y2hhIGhhcyBiZWVuIEV4cGlyZWQhJyk7IH0gfSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYUkgPSBhcnJheSggJGFQb3N0Wyd1SWQnXSwgJGFQb3N0Wyd1UGFzcyddLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAndycsIE5VTEwsIE5VTEwsIDAgKTsgJGFMc25yUG9ydHMgPSAkdGhpcy0+Y29uZmlnLT5pdGVtKCdhTHNuclBvcnRzJyk7IGJyZWFrOyBjYXNlICdkJzogJG1hYyA9ICR0aGlzLT5pbnB1dC0+Z2V0X3JlcXVlc3RfaGVhZGVyKCR0aGlzLT5hU2VjUGFyYW1zWydtYWNBZGRyZXNzJ11bJ25hbWUnXSk7ICRkZXZpY2VVbmlJZCA9ICR0aGlzLT5pbnB1dC0+Z2V0X3JlcXVlc3RfaGVhZGVyKCR0aGlzLT5hU2VjUGFyYW1zWydkZXZpY2VVbmlJZCddWyduYW1lJ10pOyAkYXBpU2VjS2V5ID0gJHRoaXMtPmlucHV0LT5nZXRfcmVxdWVzdF9oZWFkZXIoJHRoaXMtPmFTZWNQYXJhbXNbJ2FwaVNlY0tleSddWyduYW1lJ10pOyBpZiAoISRtYWMgfHwgISRkZXZpY2VVbmlJZCB8fCAhJGFwaVNlY0tleSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogSW52YWxpZCByZXF1ZXN0LicpOyB9ICRtYWMgPSAkdGhpcy0+ZGVjKCRtYWMpOyAkZGV2aWNlVW5pSWQgPSAkdGhpcy0+ZGVjKCRkZXZpY2VVbmlJZCk7ICRfUE9TVFskdGhpcy0+YVNlY1BhcmFtc1snbWFjQWRkcmVzcyddWyduYW1lJ11dID0gJG1hYzsgJF9QT1NUWyR0aGlzLT5hU2VjUGFyYW1zWydkZXZpY2VVbmlJZCddWyduYW1lJ11dID0gJGRldmljZVVuaUlkOyAkX1BPU1RbJHRoaXMtPmFTZWNQYXJhbXNbJ2FwaVNlY0tleSddWyduYW1lJ11dID0gJGFwaVNlY0tleTsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJHRoaXMtPmFTZWNQYXJhbXNbJ21hY0FkZHJlc3MnXVsnbmFtZSddLCAnbGFiZWwnID0+ICR0aGlzLT5hU2VjUGFyYW1zWydtYWNBZGRyZXNzJ11bJ2xhYmVsJ10sICdydWxlcycgPT4gJ3JlcXVpcmVkfHJlZ2V4X21hdGNoWy9eWz8wLTlhLXpBLVotLF0rJC9dfG1heF9sZW5ndGhbJy4oMTgqNikuJ10nICk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXSwgJ2xhYmVsJyA9PiAkdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlVW5pSWQnXVsnbGFiZWwnXSwgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlVW5pSWQnXVsncnVsZXMnXSApOyAkYUNvbmZbXSA9IGFycmF5KCAnZmllbGQnID0+ICR0aGlzLT5hU2VjUGFyYW1zWydhcGlTZWNLZXknXVsnbmFtZSddLCAnbGFiZWwnID0+ICR0aGlzLT5hU2VjUGFyYW1zWydhcGlTZWNLZXknXVsnbGFiZWwnXSwgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVNlY1BhcmFtc1snYXBpU2VjS2V5J11bJ3J1bGVzJ10gKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFJID0gYXJyYXkoICRhUG9zdFsndUlkJ10sICRhUG9zdFsndVBhc3MnXSwgJGFQb3N0WyR0aGlzLT5hU2VjUGFyYW1zWydtYWNBZGRyZXNzJ11bJ25hbWUnXV0sIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICRhUG9zdFsndXNlckFwcCddLCAkYVBvc3RbJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXV0sICRhUG9zdFskdGhpcy0+YVNlY1BhcmFtc1snYXBpU2VjS2V5J11bJ25hbWUnXV0sIDAgKTsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVsncG9zdCddWyckbWFjJ10gPSAkbWFjOyAkdGhpcy0+YUxnc1snbG9ncyddWydwb3N0J11bJyRhcGlTZWNLZXknXSA9ICRhcGlTZWNLZXk7ICRhTHNuclBvcnRzID0gYXJyYXlfbWFwKGZ1bmN0aW9uKCRrLCAkdil7IHJldHVybiAkay4nfCcuJHY7IH0sIGFycmF5X2tleXMoJHRoaXMtPmNvbmZpZy0+aXRlbSgnYUxzbnJQb3J0cycpKSwgYXJyYXlfdmFsdWVzKCR0aGlzLT5jb25maWctPml0ZW0oJ2FMc25yUG9ydHMnKSkpOyBicmVhazsgY2FzZSAnYSc6IGNhc2UgJ2knOiAkbWFjID0gJHRoaXMtPmlucHV0LT5nZXRfcmVxdWVzdF9oZWFkZXIoJHRoaXMtPmFTZWNQYXJhbXNbJ21hY0FkZHJlc3MnXVsnbmFtZSddKTsgJGRldmljZVVuaUlkID0gJHRoaXMtPmlucHV0LT5nZXRfcmVxdWVzdF9oZWFkZXIoJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXSk7ICRhcGlTZWNLZXkgPSAkdGhpcy0+aW5wdXQtPmdldF9yZXF1ZXN0X2hlYWRlcigkdGhpcy0+YVNlY1BhcmFtc1snYXBpU2VjS2V5J11bJ25hbWUnXSk7IGlmICghJG1hYyB8fCAhJGRldmljZVVuaUlkIHx8ICEkYXBpU2VjS2V5KSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBJbnZhbGlkIHJlcXVlc3QuJyk7IH0gJG1hYyA9ICR0aGlzLT5kZWMoJG1hYyk7ICRkZXZpY2VVbmlJZCA9ICR0aGlzLT5kZWMoJGRldmljZVVuaUlkKTsgJF9QT1NUWyR0aGlzLT5hU2VjUGFyYW1zWydtYWNBZGRyZXNzJ11bJ25hbWUnXV0gPSAkbWFjOyAkX1BPU1RbJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXV0gPSAkZGV2aWNlVW5pSWQ7ICRfUE9TVFskdGhpcy0+YVNlY1BhcmFtc1snYXBpU2VjS2V5J11bJ25hbWUnXV0gPSAkYXBpU2VjS2V5OyAkYVBvc3QgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAkdGhpcy0+YVNlY1BhcmFtc1snbWFjQWRkcmVzcyddWyduYW1lJ10sICdsYWJlbCcgPT4gJHRoaXMtPmFTZWNQYXJhbXNbJ21hY0FkZHJlc3MnXVsnbGFiZWwnXSwgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVNlY1BhcmFtc1snbWFjQWRkcmVzcyddWydydWxlcyddICk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXSwgJ2xhYmVsJyA9PiAkdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlVW5pSWQnXVsnbGFiZWwnXSwgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlVW5pSWQnXVsncnVsZXMnXSApOyAkYUNvbmZbXSA9IGFycmF5KCAnZmllbGQnID0+ICR0aGlzLT5hU2VjUGFyYW1zWydhcGlTZWNLZXknXVsnbmFtZSddLCAnbGFiZWwnID0+ICR0aGlzLT5hU2VjUGFyYW1zWydhcGlTZWNLZXknXVsnbGFiZWwnXSwgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVNlY1BhcmFtc1snYXBpU2VjS2V5J11bJ3J1bGVzJ10gKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFJID0gYXJyYXkoICRhUG9zdFsndUlkJ10sICRhUG9zdFsndVBhc3MnXSwgJGFQb3N0WyR0aGlzLT5hU2VjUGFyYW1zWydtYWNBZGRyZXNzJ11bJ25hbWUnXV0sIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICRhUG9zdFsndXNlckFwcCddLCAkYVBvc3RbJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXV0sICRhUG9zdFskdGhpcy0+YVNlY1BhcmFtc1snYXBpU2VjS2V5J11bJ25hbWUnXV0sIDAgKTsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVsncG9zdCddWyckbWFjJ10gPSAkbWFjOyAkdGhpcy0+YUxnc1snbG9ncyddWydwb3N0J11bJyRhcGlTZWNLZXknXSA9ICRhcGlTZWNLZXk7ICRhTHNuclBvcnRzID0gYXJyYXlfbWFwKGZ1bmN0aW9uKCRrLCAkdil7IHJldHVybiAkay4nfCcuJHY7IH0sIGFycmF5X2tleXMoJHRoaXMtPmNvbmZpZy0+aXRlbSgnYUxzbnJQb3J0cycpKSwgYXJyYXlfdmFsdWVzKCR0aGlzLT5jb25maWctPml0ZW0oJ2FMc25yUG9ydHMnKSkpOyBicmVhazsgfSAkYXIgPSBhcnJheSggJ2FJJyA9PiAkYUksICdhTycgPT4gYXJyYXkoICd2ZGVtb19sb2dpbicgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCksICd2dXNyX3R5cGUnID0+IGFycmF5KCdsZW4nID0+IDEwMDApLCAndnVzcl9tb2JpbGVfbm8nPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCksICd2dXNyX2VtYWlsJyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSwgJ2xvZ2luX3VuaXF1ZV9pZCcgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCksICdjbGllbnRfbmFtZScgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCksICdzZXFfbm8nID0+IGFycmF5KCdsZW4nID0+IDEwMDApLCAnY2xpZW50X2NvZGUnID0+IGFycmF5KCdsZW4nID0+IDEwMDApLCAndmVycl90ZXh0JyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSwgJ21rdF9zdGF0dXMnID0+IGFycmF5KCdsZW4nID0+IDEwMDApLCAnc3RhdHVzX2lkJyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSwgJ3BfcHJvbXB0X2lkJyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSwgJ3BfcHJvbXB0X21zZycgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCkgKSwgJ3Byb2NlZHVyZV9uYW1lJyA9PiAndXNlcl9sb2dpbicgKTsgJG9SZXNQcmMgPSAkdGhpcy0+aGVscGVyX21vZGVsLT5jYWxsU3RvcmVkUHJvY2VkdXJlKCRhcik7IGlmKCRvUmVzUHJjWyd2ZXJyX3RleHQnXSAhPT0gbnVsbCl7IHN3aXRjaCAoJG9SZXNQcmNbJ3N0YXR1c19pZCddKSB7IGNhc2UgJ1AnOiAkdGhpcy0+YUxnc1snbG9ncyddWydwb3N0J11bJ3VQYXNzJ10gPSAkYVBvc3RbJ3VQYXNzJ107IGJyZWFrOyB9IHRocm93IG5ldyBFeGNlcHRpb24oJG9SZXNQcmNbJ3ZlcnJfdGV4dCddKTsgfSAkdXNlclNlc3Npb24gPSBhcnJheSggJ2lzTG9nZ2VkSW4nPT4gdHJ1ZSwgJ3VzZXJJZCcgPT4gJGFQb3N0Wyd1SWQnXSwgJ3VzZXJVbmlxdWVJZCcgPT4gJG9SZXNQcmNbJ2xvZ2luX3VuaXF1ZV9pZCddLCAnc2VxTm8nID0+ICRvUmVzUHJjWydzZXFfbm8nXSwgJ3VzZXJUeXBlJyA9PiAkb1Jlc1ByY1sndnVzcl90eXBlJ10sICd1c2VyQXBwJyA9PiAkYVBvc3RbJ3VzZXJBcHAnXSwgJ3N0YXR1c0lkJyA9PiAkb1Jlc1ByY1snc3RhdHVzX2lkJ10sICdwcm9tcHRJZCcgPT4gJG9SZXNQcmNbJ3BfcHJvbXB0X2lkJ10sICdwcm9tcHRNc2cnID0+ICRvUmVzUHJjWydwX3Byb21wdF9tc2cnXSwgJ2FDbGllbnRzJyA9PiAoKCRvUmVzUHJjWydjbGllbnRfY29kZSddKSA/IGFycmF5KCRvUmVzUHJjWydjbGllbnRfY29kZSddKSA6IG51bGwgKSwgJ2FNa3RUeXBlcycgPT4gJHRoaXMtPmdldE1rdFR5cGVzKClbJ2FEYXRhJ10gKTsgJHRoaXMtPnNlc3Npb24tPnNldF91c2VyZGF0YSgkdXNlclNlc3Npb24pOyAkdXNlclNlc3Npb25bJ21rdFN0YXQnXSA9ICRvUmVzUHJjWydta3Rfc3RhdHVzJ107ICR1c2VyU2Vzc2lvblsncGluZ1NlYyddID0gUElOR19TRUM7ICR1c2VyU2Vzc2lvblsndGltZUxpbWl0J10gPSAoQVBJX1RJTUVfTElNSVQgKyAxMCk7ICR1c2VyU2Vzc2lvblsnYUxzbnJQb3J0cyddID0gJGFMc25yUG9ydHM7ICR1c2VyU2Vzc2lvblsnc29ja2V0U2VydmVyQWRkciddID0gU09DS0VUX1NFUlZFUl9BRERSOyAkdXNlclNlc3Npb25bJ3Nlc3Npb25WYWxpZGl0eSddID0gJHRoaXMtPmNvbmZpZy0+aXRlbSgnc2Vzc2lvblZhbGlkaXR5Jyk7IHVuc2V0KCR1c2VyU2Vzc2lvblsnaXNMb2dnZWRJbiddKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJHVzZXJTZXNzaW9uICk7IGhlYWRlcigkdGhpcy0+Y29uZmlnLT5pdGVtKCdzZXNzX2Nvb2tpZV9uYW1lJykuJzogJy5zZXNzaW9uX2lkKCkpOyBoZWFkZXIoJHRoaXMtPmFTZWNQYXJhbXNbJ3JlcXVlc3RUb2tlbiddWyduYW1lJ10uJzogJy4kdGhpcy0+X3JUb2tlbigpKTsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVsndG9rZW5JZCddID0gc2Vzc2lvbl9pZCgpOyBpZiAoJGFQb3N0Wyd1c2VyQXBwJ10gPT0gJ3cnKSB7ICR0aGlzLT5hTGdzWydmaWxlJ10gPSBudWxsOyAkdGhpcy0+YUxnc1snbG9ncyddWydvT2xkTG9ncyddID0gJHRoaXMtPmFwcC0+Z2V0TG9ncyhhcnJheSggJ2ZpbGUnID0+ICR0aGlzLT5zZXNzaW9uLT57JHRoaXMtPmFTZWNQYXJhbXNbJ2Jyb3dzZXJJZCddWyduYW1lJ119ICkpOyAkdGhpcy0+YXBwLT5yZW1vdmVMb2dGaWxlKGFycmF5KCAnZmlsZScgPT4gJHRoaXMtPnNlc3Npb24tPnskdGhpcy0+YVNlY1BhcmFtc1snYnJvd3NlcklkJ11bJ25hbWUnXX0gKSk7IH0gfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCksICdzdWNjZXNzJyA9PiBmYWxzZSApOyB9IHJldHVybiAkYVJlczsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0RFQoJGEpIHsgaWYgKCRzWFRyID0gJHRoaXMtPmlucHV0LT5nZXRfcmVxdWVzdF9oZWFkZXIoJ1gtVFInKSkgeyAkYVhUciA9IHByZWdfc3BsaXQoJy9bYS16QS1aXSsvJywgJHNYVHIpOyAkaXB2NCA9IGltcGxvZGUoJy4nLCBwcmVnX3NwbGl0KCcvW2EtekEtWl0rLycsIHN1YnN0cigkc1hUciwgc3RybGVuKCRhWFRyWzBdKSsxLCAkYVhUclswXSkpKTsgJGJyb3dzZXJJZCA9IHByZWdfcmVwbGFjZSgnL1thLXpBLVpdKy8nLCAnJywgc3Vic3RyKCRzWFRyLCBzdHJsZW4oJGFYVHJbMF0pKzErJGFYVHJbMF0pKTsgJHRoaXMtPnNlc3Npb24tPnNldF91c2VyZGF0YShhcnJheSggJHRoaXMtPmFTZWNQYXJhbXNbJ2Jyb3dzZXJJZCddWyduYW1lJ10gPT4gJGJyb3dzZXJJZCwgJHRoaXMtPmFTZWNQYXJhbXNbJ2lwdjQnXVsnbmFtZSddID0+ICRpcHY0LCAndXNlckFwcCcgPT4gJ3cnICkpOyBpZiAoISR0aGlzLT5hcHAtPmF1dGgoKSkgeyAkdGhpcy0+YUxnc1snZW5hYmxlJ10gPSB0cnVlOyAkdGhpcy0+YUxnc1snZmlsZSddID0gJGJyb3dzZXJJZDsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVskdGhpcy0+YVNlY1BhcmFtc1snaXB2NCddWyduYW1lJ11dID0gJGlwdjQ7ICR0aGlzLT5hTGdzWydsb2dzJ11bJHRoaXMtPmFTZWNQYXJhbXNbJ2Jyb3dzZXJJZCddWyduYW1lJ11dID0gJGJyb3dzZXJJZDsgfSB9IHJldHVybiBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YSc9PiBhcnJheSggJ1knID0+IGRhdGUoJ1knKSwgJ3knID0+IGRhdGUoJ3knKSwgJ20nID0+IGRhdGUoJ20nKSwgJ2QnID0+IGRhdGUoJ2QnKSwgJ2gnID0+IGRhdGUoJ0gnKSwgJ21pJyA9PiBkYXRlKCdpJyksICdzJyA9PiBkYXRlKCdzJyksICd0aW1lJyA9PiB0aW1lKCkgKSApOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRTeW1ib2xMaXN0KCRhKSB7IHRyeSB7ICR0aGlzLT5pbmMoJGEpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkdGhpcy0+YXBpX21vZGVsLT5nZXRTeW1ib2xMaXN0KCRhKSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRUb3BTeW1ib2xzKCRhKSB7IHRyeSB7ICR0aGlzLT5pbmMoJGEpOyAkYVBvc3QgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsgJGFDb25mID0gYXJyYXkoIGFycmF5KCAnZmllbGQnID0+ICdzdScsICdsYWJlbCcgPT4gJ1N5bWJvbCBVdGlsaXR5JywgJ3J1bGVzJyA9PiAncmVnZXhfbWF0Y2hbL14odHJ1ZXwxKSQvXScgKSApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVJlc1F1ZXJ5ID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0VG9wU3ltYm9scygkYSk7ICRzdSA9ICRhUmVzUXVlcnlbJ3N1J107IHVuc2V0KCRhUmVzUXVlcnlbJ3N1J10pOyBpZiAoaXNzZXQoJGFQb3N0WydzdSddKSkgeyAkdGhpcy0+bW5nU3ltYm9scyhhcnJheSgnaW5zZXJ0JyA9PiAkc3UpKTsgfSAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkYVJlc1F1ZXJ5ICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHVibGljIGZ1bmN0aW9uIGdldEZlZWRCeU1rdFN5bSgkYSkgeyB0cnkgeyAkdGhpcy0+aW5jKCRhKTsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhUG9zdCA9IGFycmF5X21lcmdlKCRhUG9zdCwgJGEpOyAkaW52YWxpZFBhcmFtcyA9IHRydWU7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAnbWl4JywgJ2xhYmVsJyA9PiAnTWl4JywgJ3J1bGVzJyA9PiAoaXNzZXQoJGFQb3N0WydtaXgnXSk/J3JlcXVpcmVkfCc6JycpLidtaW5fbGVuZ3RoWzVdfG1heF9sZW5ndGhbMzAwXXxyZWdleF9tYXRjaFsvXls/MC05YS16QS1aLV8sXSskL10nICksIGFycmF5KCAnZmllbGQnID0+ICdzdScsICdsYWJlbCcgPT4gJ1N5bWJvbCBVdGlsaXR5JywgJ3J1bGVzJyA9PiAncmVnZXhfbWF0Y2hbL14odHJ1ZXwxKSQvXScgKSApOyBmb3JlYWNoICgkdGhpcy0+YVZhbGlkTWt0VHlwZXMgYXMgJGsgPT4gJHYpIHsgaWYgKGlzc2V0KCRhUG9zdFskdl0pKSB7ICRpbnZhbGlkUGFyYW1zID0gZmFsc2U7IH0gJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAkdiwgJ2xhYmVsJyA9PiAnTUFSS0VUICcuJHYsICdydWxlcycgPT4gKGlzc2V0KCRhUG9zdFskdl0pPydyZXF1aXJlZHwnOicnKS4nbWluX2xlbmd0aFszXXxtYXhfbGVuZ3RoWzEyMDBdfHJlZ2V4X21hdGNoWy9eWz8wLTlhLXpBLVotXyxdKyQvXScgKTsgfSBpZiAoJGludmFsaWRQYXJhbXMgJiYgIWlzc2V0KCRhUG9zdFsnbWl4J10pKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBBdGxlYXN0IG9uZSBwYXJhbWV0ZXIgcmVxdWlyZWQuJyk7IH0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gaWYgKGlzc2V0KCRhUG9zdFsnbWl4J10pKSB7ICRhUG9zdERhdGEgPSBhcnJheSgpOyAkYU1peCA9IGV4cGxvZGUoJywnLCAkYVBvc3RbJ21peCddKTsgZm9yZWFjaCAoJGFNaXggYXMgJHYpIHsgJGFFeFZhbHMgPSBleHBsb2RlKCdfJywgJHYpOyBpZighaXNzZXQoJGFQb3N0RGF0YVskYUV4VmFsc1swXV0pKXsgJGFQb3N0RGF0YVskYUV4VmFsc1swXV0gPSAkYUV4VmFsc1sxXTsgfWVsc2V7ICRhUG9zdERhdGFbJGFFeFZhbHNbMF1dID0gJGFQb3N0RGF0YVskYUV4VmFsc1swXV0uJywnLiRhRXhWYWxzWzFdOyB9IH0gaWYgKGlzc2V0KCRhUG9zdFsnc3UnXSkpIHsgJGFQb3N0RGF0YVsnc3UnXSA9IHRydWU7IH0gJGFQb3N0ID0gJGFQb3N0RGF0YTsgfSAkYVJlc0dldEZlZWRCeU1rdFN5bSA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldEZlZWRCeU1rdFN5bSgkYVBvc3QpOyAkc3UgPSAkYVJlc0dldEZlZWRCeU1rdFN5bVsnc3UnXTsgdW5zZXQoJGFSZXNHZXRGZWVkQnlNa3RTeW1bJ3N1J10pOyBpZiAoaXNzZXQoJGFQb3N0WydzdSddKSkgeyAkdGhpcy0+bW5nU3ltYm9scyhhcnJheSgnaW5zZXJ0JyA9PiAkc3UpKTsgfSAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkYVJlc0dldEZlZWRCeU1rdFN5bSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRFeFN0KCRhKSB7IHRyeSB7IGlmKGlzc2V0KCRhWzBdKSAmJiAkYVswXSA9PT0gJ3ByZXZkYXknKXsgJGFEYXRhID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0TGFzdERheUVzKCktPkxBU1RfREFZX0ZFRUQ7IH1lbHNleyAkYURhdGEgPSAkdGhpcy0+YXBpX21vZGVsLT5nZXRFeFN0KCktPkZFRURfVEVYVDsgfSAkYUluZGV4ID0gYXJyYXkoIDEgPT4gJ2N1cnJlbnRfaW5kZXgnLCAyID0+ICd2b2x1bWVfdHJhZGVkJywgMyA9PiAndmFsdWVfdHJhZGVkJywgNCA9PiAnaGlnaF9pbmRleCcsIDUgPT4gJ2xvd19pbmRleCcsIDYgPT4gJ25ldF9jaGFuZ2UnICk7ICRhckVzID0gYXJyYXkoKTsgJGFFcyA9IGV4cGxvZGUoJzsnLCBzdHJfcmVwbGFjZSgnJCcsICcnLCAkYURhdGEpKTsgJGFyRXNbJ2FkdiddID0gc3RyX3JlcGxhY2UoJ0VYRy1TVEFUfCcsICcnLCAkYUVzWzBdKTsgJGFyRXNbJ2RlYyddID0gJGFFc1sxXTsgJGFyRXNbJ3VuYyddID0gJGFFc1syXTsgJGFyRXNbJ3RvdGFsJ10gPSAkYUVzWzNdOyB1bnNldCgkYUVzW2NvdW50KCRhRXMpLTFdKTsgdW5zZXQoJGFFc1swXSk7IHVuc2V0KCRhRXNbMV0pOyB1bnNldCgkYUVzWzJdKTsgdW5zZXQoJGFFc1szXSk7ICRpID0gMDsgJGN1ckluZGV4ID0gJyc7IGZvcmVhY2ggKCRhRXMgYXMgJGsgPT4gJHYpIHsgaWYgKCRpID09IDApIHsgJGN1ckluZGV4ID0gJHY7ICRhckVzWyRjdXJJbmRleF0gPSBhcnJheSgpOyAkaSsrOyB9ZWxzZWlmICgkaSA8IDcpIHsgJGFyRXNbJGN1ckluZGV4XVskYUluZGV4WyRpXV0gPSAkdjsgJGkrKzsgfSBpZiAoJGkgPiA2KSB7ICRiRmxhZyA9IHRydWU7ICRpID0gMDsgfSB9ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhckVzICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHVibGljIGZ1bmN0aW9uIGdldE1rdFR5cGVzKCRhID0gYXJyYXkoKSkgeyB0cnkgeyAkYURhdGEgPSAkdGhpcy0+Y2FjaGUtPmZpbGUtPmdldCgnbWt0VHlwZXMnKTsgaWYgKCRhRGF0YSAmJiAkdGhpcy0+Y2FjaGUtPmZpbGUtPmdldF9tZXRhZGF0YSgnbWt0VHlwZXMnKVsnbXRpbWUnXSA+IHN0cnRvdGltZSgkdGhpcy0+ZGF0ZVRvZGF5KSkgeyAkYURhdGEgPSBqc29uX2RlY29kZSgkYURhdGEpOyB9ZWxzZXsgJGFEYXRhID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0TWt0VHlwZXMoKTsgJHRoaXMtPmNhY2hlLT5maWxlLT5zYXZlKCdta3RUeXBlcycsIGpzb25fZW5jb2RlKCRhRGF0YSksIDM2MDAqMTQpOyB9ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhRGF0YSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRTZWN0b3JMaXN0KCRhKSB7IHRyeXsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0U2VjdG9yTGlzdCgpICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHVibGljIGZ1bmN0aW9uIGdldEZlZWRCeVdhdGNoVHlwZSgkYSkgeyB0cnl7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSBhcnJheSggYXJyYXkoICdmaWVsZCcgPT4gJ3R5cGUnLCAnbGFiZWwnID0+ICdUeXBlJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8cmVnZXhfbWF0Y2hbL14oRnxIfFN8VXxMfEl8UikkL10nICksIGFycmF5KCAnZmllbGQnID0+ICdjb2RlJywgJ2xhYmVsJyA9PiAnQ29kZScsICdydWxlcycgPT4gKGlzc2V0KCRhUG9zdFsndHlwZSddKSAmJiAoJGFQb3N0Wyd0eXBlJ10gPT0gJ1MnIHx8ICRhUG9zdFsndHlwZSddID09ICdJJykgPyAncmVxdWlyZWR8JyA6ICcnKS4ncmVnZXhfbWF0Y2hbL15bPzAtOWEtekEtWl0rJC9dJyApLCApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkdGhpcy0+YXBpX21vZGVsLT5nZXRGZWVkQnlXYXRjaFR5cGUoJGFQb3N0KSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRNYm8oJGEpIHsgcmV0dXJuICR0aGlzLT5nZXRNRChhcnJheSgndHlwZScgPT4gJ08nKSk7IH0gcHVibGljIGZ1bmN0aW9uIGdldE1icCgkYSkgeyByZXR1cm4gJHRoaXMtPmdldE1EKGFycmF5KCd0eXBlJyA9PiAnUCcpKTsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0RmVlZEd0d1NldHRpbmdzKCRhKSB7IHRyeSB7ICRhTW9kZWxSZXMgPSAkdGhpcy0+YXBpX21vZGVsLT5nZXRGZWVkR3R3U2V0dGluZ3MoKTsgJGFEYXRhID0gYXJyYXkoKTsgZm9yZWFjaCAoJGFNb2RlbFJlcyBhcyAkcm93KSB7ICRhRGF0YVtdID0gJHJvdzsgfSAkYVJlcyA9IGFycmF5ICggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFEYXRhICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5ICggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRTZWN0b3JQZXJmb3JtYW5jZSgpIHsgdHJ5eyAkYVJlcyA9IGFycmF5ICggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0U2VjdG9yUGVyZm9ybWFuY2UoKSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSAoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9wVGlja2VyKCRhKSB7IHRyeSB7ICRsaW1pdCA9IDMxOyBpZiAoIWlzc2V0KCRhWzBdKSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogUGFyYW1ldGVyIGlzIHJlcXVpcmVkLicpOyB9ICR0a3IgPSBzdHJ0b2xvd2VyKCRhWzBdKTsgJGFWYWxpZGF0ZVRrciA9IGFycmF5KCdieXZvbCcsICdieXByaWNlaW5jcmVhc2UnLCAnYnlwcmljZWRlY3JlYXNlJywgJ2J5cGVyaW5jcmVhc2UnLCAnYnlwZXJkZWNyZWFzZScpOyBpZiAoIWluX2FycmF5KCR0a3IsICRhVmFsaWRhdGVUa3IpKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBJbnZhbGlkIFRpY2tlcicpOyB9ICRhRGF0YSA9IGFycmF5KCk7ICRhUGFyYW1zID0gYXJyYXkoJ2FDb2xzJyA9PiAnKicpOyBzd2l0Y2ggKCR0a3IpIHsgY2FzZSAnYnl2b2wnOiAkYVBhcmFtc1sndGFibGUnXSA9ICd0b3AzMF9ieV92b2xfdmlldyc7IGJyZWFrOyBjYXNlICdieXByaWNlaW5jcmVhc2UnOiAkYVBhcmFtc1sndGFibGUnXSA9ICd0b3AzMF9ieV9QcmljZV9JbmNyZWFzZV92aWV3JzsgYnJlYWs7IGNhc2UgJ2J5cHJpY2VkZWNyZWFzZSc6ICRhUGFyYW1zWyd0YWJsZSddID0gJ3RvcDMwX2J5X1ByaWNlX2RlY3JlYXNlX3ZpZXcnOyBicmVhazsgY2FzZSAnYnlwZXJpbmNyZWFzZSc6ICRhUGFyYW1zWyd0YWJsZSddID0gJ3RvcDMwX2J5X1BlcmNfSW5jcmVhc2Vfdmlldyc7IGJyZWFrOyBjYXNlICdieXBlcmRlY3JlYXNlJzogJGFQYXJhbXNbJ3RhYmxlJ10gPSAndG9wMzBfYnlfUGVyY19kZWNyZWFzZV92aWV3JzsgYnJlYWs7IH0gJGFQYXJhbXNbJ3RhYmxlJ10gPSBzdHJ0b3VwcGVyKCRhUGFyYW1zWyd0YWJsZSddKTsgJGFQYXJhbXNbJ2xpbWl0J10gPSAkbGltaXQ7ICRhUmVzdWx0ID0gJHRoaXMtPmhlbHBlcl9tb2RlbC0+Z2V0TWFueSgkYVBhcmFtcyk7IGlmICghJGFSZXN1bHRbJ3N1Y2Nlc3MnXSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRhUmVzdWx0Wydtc2cnXSk7IH0gJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFSZXN1bHRbJ2FEYXRhJ10gKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0VGlja2VyKCRhKSB7IHRyeSB7ICRsaW1pdCA9IDMxOyBpZiAoIWlzc2V0KCRhWzBdKSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogUGFyYW1ldGVyIGlzIHJlcXVpcmVkLicpOyB9ICR0a3IgPSBzdHJ0b2xvd2VyKCRhWzBdKTsgJGFWYWxpZGF0ZVRrciA9IGFycmF5KCd1cHBlcmNhcHBlZCcsICdsb3dlcmxvY2tlZCcpOyBpZiAoIWluX2FycmF5KCR0a3IsICRhVmFsaWRhdGVUa3IpKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBJbnZhbGlkIFRpY2tlcicpOyB9ICRhRGF0YSA9IGFycmF5KCk7ICRhUGFyYW1zID0gYXJyYXkoJ2FDb2xzJyA9PiAnKicpOyBzd2l0Y2ggKCR0a3IpIHsgY2FzZSAndXBwZXJjYXBwZWQnOiAkYVBhcmFtc1sndGFibGUnXSA9ICd1cHBlcl9jYXBfc3ltYm9sc192aWV3JzsgYnJlYWs7IGNhc2UgJ2xvd2VybG9ja2VkJzogJGFQYXJhbXNbJ3RhYmxlJ10gPSAnbG93ZXJfbG9ja19zeW1ib2xzX3ZpZXcnOyBicmVhazsgfSAkYVBhcmFtc1sndGFibGUnXSA9IHN0cnRvdXBwZXIoJGFQYXJhbXNbJ3RhYmxlJ10pOyAkYVJlc3VsdCA9ICR0aGlzLT5oZWxwZXJfbW9kZWwtPmdldE1hbnkoJGFQYXJhbXMpOyBpZiAoISRhUmVzdWx0WydzdWNjZXNzJ10pIHsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkYVJlc3VsdFsnbXNnJ10pOyB9ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhRGF0YSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHB1YmxpYyBmdW5jdGlvbiBfbGNpKCRhKSB7IGlmICghJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdoYXNDb25uZWN0aW9uSW5mbycpKSB7ICR0aGlzLT5zZXNzaW9uLT5zZXRfdXNlcmRhdGEoJ2hhc0Nvbm5lY3Rpb25JbmZvJywgdHJ1ZSk7IH0gcmV0dXJuIGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSApOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRBcHBWZXJzaW9uKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSBhcnJheSggYXJyYXkoICdmaWVsZCcgPT4gJ2FwcCcsICdsYWJlbCcgPT4gJ0FwcCcsICdydWxlcycgPT4gJ3JlcXVpcmVkfHJlZ2V4X21hdGNoWy9eKGF8aXxkfHcpJC9dJyApICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhciA9IGFycmF5KCAnYUknID0+IGFycmF5KHN0cnRvdXBwZXIoJGFQb3N0WydhcHAnXSkpLCAnYU8nID0+IGFycmF5KCAndmVyc2lvbicgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCkgKSwgJ3Byb2NlZHVyZV9uYW1lJyA9PiAnR0VUX0FQUF9WRVInICk7ICRvUmVzUHJjID0gJHRoaXMtPmhlbHBlcl9tb2RlbC0+Y2FsbFN0b3JlZFByb2NlZHVyZSgkYXIpOyAkYXIgPSAkdGhpcy0+Y29uZmlnLT5pdGVtKCdkZXNrdG9wJyk7ICRhciA9ICRhciArIGFycmF5KCd2ZXJzaW9uJyA9PiAkb1Jlc1ByY1sndmVyc2lvbiddKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFyICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHVibGljIGZ1bmN0aW9uIHNlbGZTZXJ2ZXJSZXFIYW5kbGVyKCRhKSB7IHRyeSB7ICRtZXRob2QgPSAkYVswXTsgYXJyYXlfc2hpZnQoJGEpOyAkdGhpcy0+YUxnc1snZW5hYmxlJ10gPSB0cnVlOyAkYUFsbG93ZWRNZXRob2QgPSBhcnJheSgnZ2V0VG9wU3ltYm9scycsICdnZXRmZWVkYnlta3RzeW0nLCAnZ2V0ZHQnLCAnbG9nb3V0Jyk7IGlmICghaW5fYXJyYXkoJG1ldGhvZCwgJGFBbGxvd2VkTWV0aG9kKSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogTWV0aG9kIG5vdCBhbGxvd2VkLicpOyB9ICRhSGVhZGVycyA9IGdldGFsbGhlYWRlcnMoKTsgaWYgKCFpc3NldCgkYUhlYWRlcnNbU1JIVEtdKSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogU29tZXRoaW5nIHdlbnQgd3JvbmcgZXJfY29kZSAxLicpOyB9ICRmaWxlTmFtZSA9IEFQUFBBVEguJ3RtcC90a24vJy5oYXNoKCdtZDUnLCAkYUhlYWRlcnNbU1JIVEtdLmRhdGUoJ3ltZCcpKTsgaWYgKCFmaWxlX2V4aXN0cygkZmlsZU5hbWUpKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBTb21ldGhpbmcgd2VudCB3cm9uZyBlcl9jb2RlIDIuJyk7IH0gJHRrbiA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlTmFtZSk7IHVubGluaygkZmlsZU5hbWUpOyBpZiAoJHRrbiAhPSAkYUhlYWRlcnNbU1JIVEtdKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBTb21ldGhpbmcgd2VudCB3cm9uZyBlcl9jb2RlIDMuJyk7IH0gJGFSZXMgPSAkdGhpcy0+eyRtZXRob2R9KCRhKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlbUZ1dExpc3QoJGEpIHsgdHJ5IHsgJHRoaXMtPmluYygkYSk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICR0aGlzLT5hcGlfbW9kZWwtPmdldEl0ZW1GdXRMaXN0KCRhKSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0Q2xpZW50c0NvZGVzKCRhKSB7IHRyeSB7ICRhUmVzID0gYXJyYXkoKTsgJGFyID0gYXJyYXkoICdhSScgPT4gYXJyYXkoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSksICdhTycgPT4gYXJyYXkoICdhcl9jbCcgPT4gYXJyYXkoJ2ZuJyA9PiAnbmV3Q29sbGVjdGlvbicsICdkVHlwZScgPT4gJ0NMX1RZUEUnKSwgJ3ZlcnJfdGV4dCcgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCksICksICdwcm9jZWR1cmVfbmFtZScgPT4gJ3VzZXJfY2xpZW50X2xpc3QnICk7ICRvUmVzUHJjID0gJHRoaXMtPmhlbHBlcl9tb2RlbC0+Y2FsbFN0b3JlZFByb2NlZHVyZSgkYXIpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkb1Jlc1ByY1snYXJfY2wnXSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0Q2xpZW50c0NvZGVzQW5kTmFtZXMoJGEpIHsgdHJ5IHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0Q2xpZW50c0NvZGVzQW5kTmFtZXMoYXJyYXkoICd1c2VySWQnID0+ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJykgKSkgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldE91dHN0YW5kaW5nT3JkZXJzKCkgeyB0cnkgeyAkYVJlcyA9IGFycmF5KCk7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdhY2NvdW50JywgJ2hPcmRTaWRlcycsICdta3RUeXBlJywgJ3N5bWJvbCcsICdoT3JkZXJJZCcsICdoVGVybWluYWxObycsICdvcmRlcklkJyApKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFQYXJhbXMgPSAkdGhpcy0+b3B0RXh0ZW5kcyhhcnJheSggJ2FjY291bnQnID0+IG51bGwsICdoT3JkU2lkZXMnID0+IG51bGwsICdta3RUeXBlJyA9PiBudWxsLCAnc3ltYm9sJyA9PiBudWxsLCAnaE9yZGVySWQnID0+IG51bGwsICdoVGVybWluYWxObyc9Pm51bGwsICdvcmRlcklkJyA9PiBudWxsICksICRhUG9zdCk7ICRhUGFyYW1zWyd1c2VySWQnXSA9ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyk7ICRvT3V0c3RhbmRpbmdPcmRlcnMgPSAkdGhpcy0+YXBpX21vZGVsLT5nZXRPdXRzdGFuZGluZ09yZGVycygkYVBhcmFtcyk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRvT3V0c3RhbmRpbmdPcmRlcnMgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEFjdGl2aXR5TG9ncygkYSkgeyB0cnkgeyAkYVJlcyA9IGFycmF5KCk7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdoVGVybWluYWxObycsICdhY2NvdW50JywgJ2hPcmRTaWRlc3xyZXF1aXJlZCcsICdta3RUeXBlJywgJ3N5bWJvbCcsICkpOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVBhcmFtcyA9ICR0aGlzLT5vcHRFeHRlbmRzKGFycmF5KCAnaFRlcm1pbmFsTm8nPT4gbnVsbCwgJ2FjY291bnQnID0+IG51bGwsICdoT3JkU2lkZXMnID0+IG51bGwsICdta3RUeXBlJyA9PiBudWxsLCAnc3ltYm9sJyA9PiBudWxsICksICRhUG9zdCk7ICRhUGFyYW1zWyd1c2VySWQnXSA9ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyk7ICRvQWN0aXZpdHlMb2dzID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0QWN0aXZpdHlMb2dzKCRhUGFyYW1zKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJG9BY3Rpdml0eUxvZ3NbMF0sICdhSGVhZGVyJyA9PiAkb0FjdGl2aXR5TG9nc1sxXSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0VHJhZGVMb2dzKCRhKSB7IHRyeSB7ICRhUmVzID0gYXJyYXkoKTsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ2hUZXJtaW5hbE5vJywgJ2FjY291bnQnLCAnaE9yZFNpZGVzfHJlcXVpcmVkJywgJ21rdFR5cGUnLCAnc3ltYm9sJywgKSk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJ3N0YXJ0VGltZScsICdsYWJlbCcgPT4gJ1N0YXJ0IFRpbWUnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ3RpbWUnXSApOyAkYUNvbmZbXSA9IGFycmF5KCAnZmllbGQnID0+ICdlbmRUaW1lJywgJ2xhYmVsJyA9PiAnRW5kIFRpbWUnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ3RpbWUnXSApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVBhcmFtcyA9ICR0aGlzLT5vcHRFeHRlbmRzKGFycmF5KCAnaFRlcm1pbmFsTm8nPT4gbnVsbCwgJ2FjY291bnQnID0+IG51bGwsICdoT3JkU2lkZXMnID0+IG51bGwsICdta3RUeXBlJyA9PiBudWxsLCAnc3ltYm9sJyA9PiBudWxsLCAnc3RhcnRUaW1lJyA9PiAnMDA6MDA6MDAnLCAnZW5kVGltZScgPT4gJzIzOjU5OjU5JyApLCAkYVBvc3QpOyAkYVBhcmFtc1sndXNlcklkJ10gPSAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpOyAkb1RyYWRlTG9ncyA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldFRyYWRlTG9ncygkYVBhcmFtcyk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRvVHJhZGVMb2dzWzBdLCAnYUhlYWRlcicgPT4gJG9UcmFkZUxvZ3NbMV0gKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIHB1c2hPcmRlcigkYSkgeyB0cnkgeyAkYVJlcyA9IGFycmF5KCk7ICRiaW5kUG9ydCA9IFpNUV9QT1JUOyAkdGNwSXAgPSAndGNwOi8vMTI3LjAuMC4xJzsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAnMScsICdsYWJlbCcgPT4gJ0FjY291bnQnLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ2FjY291bnQnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnMzgnLCAnbGFiZWwnID0+ICdWb2x1bWUnLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ3ZvbCddICksIGFycmF5KCAnZmllbGQnID0+ICc0MCcsICdsYWJlbCcgPT4gJ09yZGVyIFR5cGUnLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ29yZFR5cGUnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnNDQnLCAnbGFiZWwnID0+ICdQcmljZScsICdydWxlcycgPT4gJ3JlcXVpcmVkfCcuJHRoaXMtPmFSdWxlc1sncHJpY2UnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnNTQnLCAnbGFiZWwnID0+ICdPcmRlciBTaWRlJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydvcmRTaWRlJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJzU1JywgJ2xhYmVsJyA9PiAnU3ltYm9sJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydzeW1ib2wnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnNTknLCAnbGFiZWwnID0+ICdUaW1lIGluIGZvcmNlJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8bnVtZXJpYycgKSwgYXJyYXkoICdmaWVsZCcgPT4gJzk5JywgJ2xhYmVsJyA9PiAnTGltaXQgUHJpY2UnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ3ByaWNlJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJzExMScsICdsYWJlbCcgPT4gJ0Rpc2MgVm9sdW1lJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWyd2b2wnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnMTQzJywgJ2xhYmVsJyA9PiAnTWFya2V0JywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydta3RUeXBlJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJ2hPcmRlclNpZGUnLCAnbGFiZWwnID0+ICdIb3VzZSBPcmRlciBTaWRlJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydoT3JkU2lkZSddICksIGFycmF5KCAnZmllbGQnID0+ICdyZW1hcmtzJywgJ2xhYmVsJyA9PiAnUmVtYXJrcycsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1sncmVtYXJrcyddICksIGFycmF5KCAnZmllbGQnID0+ICdwaW4nLCAnbGFiZWwnID0+ICdQaW4gQ29kZScsICdydWxlcycgPT4gJ3JlcXVpcmVkfCcuJHRoaXMtPmFSdWxlc1sncGluJ10gKSApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVBvc3RbJzExJ10gPSAkdGhpcy0+Z2V0T3JkZXJJZCgpOyAkYVBvc3RbJzY1J10gPSAnJzsgJGFQb3N0WycxMjYnXSA9ICcnOyAkYVBvc3RbJzE2NyddID0gJyc7ICRhUG9zdFsnMjAwJ10gPSAnJzsgJGFQb3N0WycyMDEnXSA9ICcnOyAkYVBvc3RbJzIwMiddID0gJyc7ICRhUG9zdFsnMjA2J10gPSAnJzsgJGFQb3N0Wyc3MjAwJ10gPSAnJzsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVsncG9zdCddID0gJGFQb3N0OyAkdGhpcy0+YmVuY2htYXJrLT5tYXJrKCdybVN0YXJ0Jyk7ICR0aGlzLT52YWxpZGF0ZVJNKCRhUG9zdCk7ICR0aGlzLT5iZW5jaG1hcmstPm1hcmsoJ3JtRW5kJyk7ICRzRGF0YSA9ICdOT018Jy4kdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpLicsJy4kYVBvc3RbJzExJ10uJywnLihpc3NldCgkYVBvc3RbJ2hPcmRlclNpZGUnXSkgPyAkYVBvc3RbJ2hPcmRlclNpZGUnXSA6ICcnKS4nLCcuKGlzc2V0KCRhUG9zdFsncmVtYXJrcyddKSA/ICRhUG9zdFsncmVtYXJrcyddIDogJycpLid8JzsgdW5zZXQoJGFQb3N0WydyZW1hcmtzJ10pOyB1bnNldCgkYVBvc3RbJ2hPcmRlclNpZGUnXSk7IHVuc2V0KCRhUG9zdFsncGluJ10pOyBrc29ydCgkYVBvc3QpOyAkaSA9IDA7IGZvcmVhY2ggKCRhUG9zdCBhcyAkayA9PiAkdikgeyAkZXhwID0gJ3wnOyBpZihjb3VudCgkYVBvc3QpICE9ICRpKzEpeyAkZXhwID0gJ3wsJzsgfSAkc0RhdGEgLj0gJGsuJz0nLiR2LiRleHA7ICRpKys7IH0gJGFQdXNoRGF0YSA9IGFycmF5KCAnY2F0ZWdvcnknID0+ICdwdXNoT3JkZXJUb01zdHInLCAnZGF0YScgPT4gJHNEYXRhLCAnYUluZm8nID0+IGFycmF5KCAnb3JkZXJJZCcgPT4gJGFQb3N0WycxMSddLCAndXNlclVuaXF1ZUlkJyA9PiAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJVbmlxdWVJZCcpICkgKTsgJHRoaXMtPmxvYWQtPmxpYnJhcnkoJ3NvY2tldF9jbGllbnQnLCBhcnJheSgndXJpJyA9PiAkdGNwSXAuJzonLiRiaW5kUG9ydCkpOyAkdGhpcy0+c29ja2V0X2NsaWVudC0+c2VuZChqc29uX2VuY29kZShhcnJheSgxMCwgJGFQdXNoRGF0YSkpKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdtc2cnID0+ICdvcmRlciBwdXNoIHRvIHNvY2tldCcsICdzRGF0YScgPT4gJHNEYXRhLCAnZXgnID0+IGFycmF5KCR0aGlzLT5iZW5jaG1hcmstPmVsYXBzZWRfdGltZSgncm1TdGFydCcsICdybUVuZCcpKSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gY2hhbmdlT3JkZXIoJGEpIHsgdHJ5IHsgJGFSZXMgPSBhcnJheSgpOyBpZiAoIUNIQU5HRV9PUkRfUE9MSUNZKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ1lvdVwncmUgbm90IGF1dGhvcml6ZWQgdG8gY2hhbmdlIG9yZGVyLicpOyB9ICR0Y3BJcCA9ICd0Y3A6Ly8xMjcuMC4wLjEnOyAkYmluZFBvcnQgPSBaTVFfUE9SVDsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAnYWNjb3VudCcsICdsYWJlbCcgPT4gJ0FjY291bnQnLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ2FjY291bnQnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnaE9yZGVySWQnLCAnbGFiZWwnID0+ICdIb3VzZSBPcmRlciBObycsICdydWxlcycgPT4gJ3JlcXVpcmVkfCcuJHRoaXMtPmFSdWxlc1snaE9yZGVySWQnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnbmV3UHJpY2UnLCAnbGFiZWwnID0+ICdOZXcgUHJpY2UnLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ3ByaWNlJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJ25ld1ZvbCcsICdsYWJlbCcgPT4gJ05ldyBWb2x1bWUnLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ3ZvbCddICksIGFycmF5KCAnZmllbGQnID0+ICdwaW4nLCAnbGFiZWwnID0+ICdQaW4gQ29kZScsICdydWxlcycgPT4gJ3JlcXVpcmVkfCcuJHRoaXMtPmFSdWxlc1sncGluJ10gKSApOyAkdGhpcy0+YUxnc1snbG9ncyddWydwb3N0J10gPSAkYVBvc3Q7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhUmVzR0lWQ0EgPSAkdGhpcy0+YXBpX21vZGVsLT5nZXRJbmZvQW5kVmVyaWZ5Q2hhbmdlT3JkZXIoYXJyYXkoICd1c2VySWQnID0+ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyksICdhY2NvdW50JyA9PiAkYVBvc3RbJ2FjY291bnQnXSwgJ2hPcmRlcklkJyA9PiAkYVBvc3RbJ2hPcmRlcklkJ10sICduZXdWb2wnID0+ICRhUG9zdFsnbmV3Vm9sJ10sICduZXdQcmljZScgPT4gJGFQb3N0WyduZXdQcmljZSddLCAncGluJyA9PiAkYVBvc3RbJ3BpbiddICkpOyAkdGhpcy0+YUxnc1snbG9ncyddWydjaGFuZ2VPcmRlckRldlJlbWFya3MnXSA9ICRhUmVzR0lWQ0FbJ3JlbWFya3MnXTsgaWYgKCFlbXB0eSgkYVJlc0dJVkNBWydlcnJUZXh0J10pKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJGFSZXNHSVZDQVsnZXJyVGV4dCddKTsgfSAkYU9sZE9yZEluZm8gPSAkYVJlc0dJVkNBWydhRGF0YSddOyAkYVsnMSddID0gJGFQb3N0WydhY2NvdW50J107ICRhWycxMSddID0gJHRoaXMtPmdldE9yZGVySWQoKTsgJGFbJzE4J10gPSAnJzsgJGFbJzM3J10gPSAkYU9sZE9yZEluZm9bJ0VYQ0hfT1JERVJfSUQnXTsgJGFbJzM4J10gPSAkYVBvc3RbJ25ld1ZvbCddOyAkYVsnNDAnXSA9ICRhT2xkT3JkSW5mb1snT1JERVJfVFlQRSddOyAkYVsnNDEnXSA9ICRhT2xkT3JkSW5mb1snSE9VU0VfT1JERVJfSUQnXTsgJGFbJzQ0J10gPSAkYVBvc3RbJ25ld1ByaWNlJ107ICRhWyc1NCddID0gJGFPbGRPcmRJbmZvWydPUkRFUl9TSURFJ107ICRhWyc1NSddID0gJGFPbGRPcmRJbmZvWydTRUNVUklUWV9TWU1CT0wnXTsgJGFbJzU5J10gPSAwOyAkYVsnOTknXSA9ICRhT2xkT3JkSW5mb1snT1JERVJfU1RPUF9QUklDRSddOyAkYVsnMTExJ10gPSAoZW1wdHkoJGFPbGRPcmRJbmZvWydESVNDTE9TRURfVk9MVU1FJ10pID8gMCA6ICRhT2xkT3JkSW5mb1snRElTQ0xPU0VEX1ZPTFVNRSddICk7ICRhWycxNDMnXSA9ICRhT2xkT3JkSW5mb1snTUFSS0VUX1RZUEUnXTsgJGFbJzcyMDAnXSA9ICcnOyAkc0RhdGEgPSAnQ0hPfCcuJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKS4nLCcuJGFbJzExJ10uJywnLihpc3NldCgkYU9sZE9yZEluZm9bJ0hPVVNFX09SREVSX1NJREUnXSkgPyAkYU9sZE9yZEluZm9bJ0hPVVNFX09SREVSX1NJREUnXSA6ICcnKS4nfCc7IGtzb3J0KCRhKTsgJGkgPSAwOyBmb3JlYWNoICgkYSBhcyAkayA9PiAkdikgeyAkZXhwID0gJ3wnOyBpZihjb3VudCgkYSkgIT0gJGkrMSl7ICRleHAgPSAnfCwnOyB9ICRzRGF0YSAuPSAkay4nPScuJHYuJGV4cDsgJGkrKzsgfSAkYVB1c2hEYXRhID0gYXJyYXkoICdjYXRlZ29yeScgPT4gJ3B1c2hPcmRlclRvTXN0cicsICdkYXRhJyA9PiAkc0RhdGEsICdhSW5mbycgPT4gYXJyYXkoICdvcmRlcklkJyA9PiAkYVsnMTEnXSwgJ3VzZXJVbmlxdWVJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VyVW5pcXVlSWQnKSApICk7ICR0aGlzLT5sb2FkLT5saWJyYXJ5KCdzb2NrZXRfY2xpZW50JywgYXJyYXkoJ3VyaScgPT4gJHRjcElwLic6Jy4kYmluZFBvcnQpKTsgJHRoaXMtPnNvY2tldF9jbGllbnQtPnNlbmQoanNvbl9lbmNvZGUoYXJyYXkoMTAsICRhUHVzaERhdGEpKSk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnbXNnJyA9PiAnb3JkZXIgcHVzaCB0byBzb2NrZXQnLCAnc0RhdGEnID0+ICRzRGF0YSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gY2FuY2VsT3JkZXIoJGFQYXJhbXMpIHsgdHJ5IHsgJGFSZXMgPSBhcnJheSgpOyAkdGNwSXAgPSAndGNwOi8vMTI3LjAuMC4xJzsgJGJpbmRQb3J0ID0gWk1RX1BPUlQ7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSBhcnJheSggYXJyYXkoICdmaWVsZCcgPT4gJzM3JywgJ2xhYmVsJyA9PiAnT3JkZXIgTm8nLCAncnVsZXMnID0+ICdyZXF1aXJlZHxtYXhfbGVuZ3RoWzMwXXxyZWdleF9tYXRjaFsvXls/MC05YS16QS1aXSskL10nICksIGFycmF5KCAnZmllbGQnID0+ICc0MScsICdsYWJlbCcgPT4gJ0hvdXNlIE9yZGVyIE5vJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8bWF4X2xlbmd0aFsyMF18cmVnZXhfbWF0Y2hbL15bPzAtOWEtekEtWl0rJC9dJyApLCBhcnJheSggJ2ZpZWxkJyA9PiAnNTQnLCAnbGFiZWwnID0+ICdPcmRlciBTaWRlJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydvcmRTaWRlJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJzU1JywgJ2xhYmVsJyA9PiAnU3ltYm9sJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydzeW1ib2wnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnMTQzJywgJ2xhYmVsJyA9PiAnTWFya2V0JywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydta3RUeXBlJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJ3BpbicsICdsYWJlbCcgPT4gJ1BpbiBDb2RlJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydwaW4nXSApICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRpID0gMDsgJGFyID0gYXJyYXkoICdhSScgPT4gYXJyYXkoICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyksICRhUG9zdFs0MV0sICRhUG9zdFszN10sICRhUG9zdFsncGluJ10gKSwgJ2FPJyA9PiBhcnJheSggJ3JlcycgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCkgKSwgJ3Byb2NlZHVyZV9uYW1lJyA9PiAnVkFMSURBVEVfQ0FOQ0VMX09SREVSX1JFUVVFU1QnICk7ICRhVmFsaWRhdGVPcmRlclJlcSA9ICR0aGlzLT5oZWxwZXJfbW9kZWwtPmNhbGxTdG9yZWRQcm9jZWR1cmUoJGFyKTsgaWYgKCRhVmFsaWRhdGVPcmRlclJlcVsncmVzJ10gPT0gMykgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogRGF0YSBub3QgZm91bmQhJyk7IH1lbHNlaWYgKCRhVmFsaWRhdGVPcmRlclJlcVsncmVzJ10gPT0gMikgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogSW52YWxpZCBvcmRlciBJRCEnKTsgfWVsc2VpZiAoJGFWYWxpZGF0ZU9yZGVyUmVxWydyZXMnXSA9PSA0KSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBJbnZhbGlkIFBpbiEnKTsgfWVsc2VpZiAoJGFWYWxpZGF0ZU9yZGVyUmVxWydyZXMnXSAhPSAxKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiAnLiRhVmFsaWRhdGVPcmRlclJlcVsncmVzJ10pOyB9ICRhUG9zdFsnMTEnXSA9ICR0aGlzLT5nZXRPcmRlcklkKCk7ICRzRGF0YSA9ICdDT018Jy4kdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpLicsJy4kYVBvc3RbJzExJ10uJ3wnOyBrc29ydCgkYVBvc3QpOyBmb3JlYWNoICgkYVBvc3QgYXMgJGsgPT4gJHYpIHsgJGV4cCA9ICd8JzsgaWYoY291bnQoJGFQb3N0KSAhPSAkaSsxKXsgJGV4cCA9ICd8LCc7IH0gJHNEYXRhIC49ICRrLic9Jy4kdi4kZXhwOyAkaSsrOyB9ICRhUHVzaERhdGEgPSBhcnJheSggJ2NhdGVnb3J5JyA9PiAncHVzaE9yZGVyVG9Nc3RyJywgJ2RhdGEnID0+ICRzRGF0YSwgJ2FJbmZvJyA9PiBhcnJheSggJ29yZGVySWQnID0+ICRhUG9zdFsnMTEnXSwgJ3VzZXJVbmlxdWVJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VyVW5pcXVlSWQnKSApICk7ICR0aGlzLT5sb2FkLT5saWJyYXJ5KCdzb2NrZXRfY2xpZW50JywgYXJyYXkoJ3VyaScgPT4gJHRjcElwLic6Jy4kYmluZFBvcnQpKTsgJHRoaXMtPnNvY2tldF9jbGllbnQtPnNlbmQoanNvbl9lbmNvZGUoYXJyYXkoMTAsICRhUHVzaERhdGEpKSk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnbXNnJyA9PiAnb3JkZXIgcHVzaCB0byBzb2NrZXQnLCAnc0RhdGEnID0+ICRzRGF0YSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0Q2xpZW50RXhwb3N1cmUoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAnYWNjb3VudCcsICdsYWJlbCcgPT4gJ0FjY291bnQnLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ2FjY291bnQnXSApICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhUmVzdWx0ID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0Q2xpZW50RXhwb3N1cmUoYXJyYXkoICdhY2NvdW50JyA9PiAkYVBvc3RbJ2FjY291bnQnXSwgJ3VzZXJJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSApKTsgJHRoaXMtPmJWYWxpZGF0aW9uUmVxID0gZmFsc2U7ICRhUmVzdWx0WydhY2NvdW50RGV0YWlscyddID0gQCR0aGlzLT5nZXRDbGllbnREZXRhaWxzKGFycmF5KCkpWydhRGF0YSddOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkYVJlc3VsdCApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0VHJhZGVJdGVtUnMoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ2FjY291bnR8cmVxdWlyZWQnLCAnc3ltYm9sfHJlcXVpcmVkJyApKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAncG9zVHlwZScsICdsYWJlbCcgPT4gJ1Bvc2l0aW9uIFR5cGUnLCAncnVsZXMnID0+ICdyZXF1aXJlZHxyZWdleF9tYXRjaFsvXihDREN8T1BFTikkL10nICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhUmVzdWx0ID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0VHJhZGVJdGVtUnMoYXJyYXkoICd1c2VySWQnID0+ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyksICdhY2NvdW50JyA9PiAkYVBvc3RbJ2FjY291bnQnXSwgJ3N5bWJvbCcgPT4gJGFQb3N0WydzeW1ib2wnXSwgJ3Bvc1R5cGUnID0+ICRhUG9zdFsncG9zVHlwZSddICkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkYVJlc3VsdFsnYURhdGEnXSwgJ3Bta3QnID0+ICRhUmVzdWx0WydwbWt0J10gKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEFjY291bnRTdGF0cygkYSkgeyB0cnkgeyAkYVBvc3QgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsgJGFDb25mID0gJHRoaXMtPmdldFZhbGlkYXRpb25Db25mKGFycmF5KCAnYWNjb3VudHxyZXF1aXJlZCcsICdmcm9tRGF0ZXxyZXF1aXJlZCcsICd0b0RhdGV8cmVxdWlyZWQnICkpOyAkYUNvbmZbXSA9IGFycmF5KCAnZmllbGQnID0+ICdsZWRnZXJUeXBlJywgJ2xhYmVsJyA9PiAnTGVkZ2VyIFR5cGUnLCAncnVsZXMnID0+ICdyZWdleF9tYXRjaFsvXihEfEwpJC9dJyApOyAkYUNvbmZbXSA9IGFycmF5KCAnZmllbGQnID0+ICdudW0nLCAnbGFiZWwnID0+ICdOdW1iZXIgT2YgVHlwZScsICdydWxlcycgPT4gJ3JlZ2V4X21hdGNoWy9eWzAtOV0rJC9dJyApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkb0dldEFiRHQgPSAkdGhpcy0+Z2V0QWJEdChhcnJheSggJ2dGb3JtYXQnID0+ICdkZC1tbS15eXl5JywgJ2FWYWwnID0+IGFycmF5KCdmcm9tRGF0ZSc9PiRhUG9zdFsnZnJvbURhdGUnXSwgJ3RvRGF0ZSc9PiRhUG9zdFsndG9EYXRlJ10pLCAnckZvcm1hdCcgPT4gJ2QtTS15JyApKTsgJGZyb21EYXRlVXQgPSAkb0dldEFiRHQtPmZyb21EYXRlWydzdHJ0b3RpbWUnXTsgJHRvRGF0ZVV0ID0gJG9HZXRBYkR0LT50b0RhdGVbJ3N0cnRvdGltZSddOyBpZigkZnJvbURhdGVVdCA+ICR0b0RhdGVVdCl7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBJbnZhbGlkIGRhdGVzIScpOyB9ICRhUGFyYW1zID0gJHRoaXMtPm9wdEV4dGVuZHMoYXJyYXkoICdsZWRnZXJUeXBlJyA9PiBudWxsLCAnbnVtJyA9PiBudWxsLCApLCAkYVBvc3QpOyAkYVBhcmFtc1snZnJvbURhdGUnXSA9ICRvR2V0QWJEdC0+ZnJvbURhdGVbJ2RhdGUnXTsgJGFQYXJhbXNbJ3RvRGF0ZSddID0gJG9HZXRBYkR0LT50b0RhdGVbJ2RhdGUnXTsgJGFQYXJhbXNbJ3VzZXJJZCddID0gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKTsgJHJlc0FjY291bnRTdGF0cyA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldEFjY291bnRTdGF0cygkYVBhcmFtcyk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRyZXNBY2NvdW50U3RhdHNbMF0sICdhSGVhZGVyJyA9PiAkcmVzQWNjb3VudFN0YXRzWzFdICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHJpdmF0ZSBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblN0YXRzKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdhY2NvdW50fHJlcXVpcmVkJywgJ2Zyb21EYXRlfHJlcXVpcmVkJywgJ3RvRGF0ZXxyZXF1aXJlZCcsICduYXR1cmVDb2RlJywgJ3N5bWJvbCcgKSk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRvR2V0QWJEdCA9ICR0aGlzLT5nZXRBYkR0KGFycmF5KCAnZ0Zvcm1hdCcgPT4gJ2RkLW1tLXl5eXknLCAnYVZhbCcgPT4gYXJyYXkoJ2Zyb21EYXRlJz0+JGFQb3N0Wydmcm9tRGF0ZSddLCAndG9EYXRlJz0+JGFQb3N0Wyd0b0RhdGUnXSksICdyRm9ybWF0JyA9PiAnZC1NLXknICkpOyAkZnJvbURhdGVVdCA9ICRvR2V0QWJEdC0+ZnJvbURhdGVbJ3N0cnRvdGltZSddOyAkdG9EYXRlVXQgPSAkb0dldEFiRHQtPnRvRGF0ZVsnc3RydG90aW1lJ107IGlmKCRmcm9tRGF0ZVV0ID4gJHRvRGF0ZVV0KXsgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3I6IEludmFsaWQgZGF0ZXMhJyk7IH0gJGFQb3N0ID0gJHRoaXMtPm9wdEV4dGVuZHMoYXJyYXkoICduYXR1cmVDb2RlJyA9PiBudWxsLCAnc3ltYm9sJyA9PiBudWxsICksICRhUG9zdCk7ICRhUG9zdFsnZnJvbURhdGUnXSA9ICRvR2V0QWJEdC0+ZnJvbURhdGVbJ2RhdGUnXTsgJGFQb3N0Wyd0b0RhdGUnXSA9ICRvR2V0QWJEdC0+dG9EYXRlWydkYXRlJ107ICRhUG9zdFsndXNlcklkJ10gPSAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkdGhpcy0+YXBpX21vZGVsLT5nZXRUcmFuc2FjdGlvblN0YXRzKCRhUG9zdCkgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEluZGljZXNTdW1tYXJ5KCRhKSB7IHRyeXsgJGFSZXNHZXRJbmRpY2VzU3VtbWFyeSA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldEluZGljZXNTdW1tYXJ5KCk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhUmVzR2V0SW5kaWNlc1N1bW1hcnlbMF0sICdhSGVhZGVyJyA9PiAkYVJlc0dldEluZGljZXNTdW1tYXJ5WzFdLCAndHJhZGVzJyA9PiAkYVJlc0dldEluZGljZXNTdW1tYXJ5WzJdLCAndm9sJyA9PiAkYVJlc0dldEluZGljZXNTdW1tYXJ5WzNdLCAndmFsJyA9PiAkYVJlc0dldEluZGljZXNTdW1tYXJ5WzRdICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHJpdmF0ZSBmdW5jdGlvbiBjaGFuZ2VQYXNzKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSBhcnJheSggYXJyYXkoICdmaWVsZCcgPT4gJ3Bhc3MnLCAnbGFiZWwnID0+ICdDdXJyZW50IHBhc3N3b3JkJywgJ3J1bGVzJyA9PiAncmVxdWlyZWQnICksIGFycmF5KCAnZmllbGQnID0+ICduZXdQYXNzJywgJ2xhYmVsJyA9PiAnTmV3IHBhc3N3b3JkJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydwYXNzJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJ2NvblBhc3MnLCAnbGFiZWwnID0+ICdDb25maXJtIHBhc3N3b3JkJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8bWF0Y2hlc1tuZXdQYXNzXScgKSApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYXIgPSBhcnJheSggJ2FJJyA9PiBhcnJheSggJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJGFQb3N0WydwYXNzJ10sICRhUG9zdFsnbmV3UGFzcyddICksICdhTycgPT4gYXJyYXkoICdzdGF0dXMnID0+IGFycmF5KCdsZW4nID0+IDEpLCAnZXJyVGV4dCcgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCkgKSwgJ3Byb2NlZHVyZV9uYW1lJyA9PiAndXNlcl91cGRfcHdkJyApOyAkb1Jlc1ByYyA9ICR0aGlzLT5oZWxwZXJfbW9kZWwtPmNhbGxTdG9yZWRQcm9jZWR1cmUoJGFyKTsgaWYgKCR0aGlzLT5zZXNzaW9uLT5wcm9tcHRJZCA9PSAyKSB7ICR0aGlzLT5zZXNzaW9uLT5zZXRfdXNlcmRhdGEoYXJyYXkoJ3Byb21wdElkJz0+NCkpOyB9IGlmKHRyaW0oJG9SZXNQcmNbJ3N0YXR1cyddKSAhPT0gJ1knKXsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkb1Jlc1ByY1snZXJyVGV4dCddKTsgfSAkYVJlc1snc3VjY2VzcyddID0gdHJ1ZTsgJGFSZXNbJ21zZyddID0gJ1Bhc3N3b3JkIGNoYW5nZWQgc3VjY2Vzc2Z1bGx5Lic7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlc1snc3VjY2VzcyddID0gZmFsc2U7ICRhUmVzWydtc2cnXSA9ICRlLT5nZXRNZXNzYWdlKCk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gY2hhbmdlUGluKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSBhcnJheSggYXJyYXkoICdmaWVsZCcgPT4gJ3Bhc3MnLCAnbGFiZWwnID0+ICdQYXNzd29yZCcsICdydWxlcycgPT4gJ3JlcXVpcmVkJyApLCBhcnJheSggJ2ZpZWxkJyA9PiAnb2xkUGluJywgJ2xhYmVsJyA9PiAnT2xkIFBpbicsICdydWxlcycgPT4gJ3JlcXVpcmVkfCcuJHRoaXMtPmFSdWxlc1sncGluJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJ25ld1BpbicsICdsYWJlbCcgPT4gJ05ldyBQaW4nLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ3BpbiddICksIGFycmF5KCAnZmllbGQnID0+ICdjb25QaW4nLCAnbGFiZWwnID0+ICdDb25maXJtIFBpbicsICdydWxlcycgPT4gJ3JlcXVpcmVkfG1hdGNoZXNbbmV3UGluXScgKSApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYXIgPSBhcnJheSggJ2FJJyA9PiBhcnJheSggJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJGFQb3N0WydwYXNzJ10sICRhUG9zdFsnb2xkUGluJ10sICRhUG9zdFsnbmV3UGluJ10gKSwgJ2FPJyA9PiBhcnJheSggJ3N0YXR1cycgPT4gYXJyYXkoJ2xlbicgPT4gMSksICdlcnJUZXh0JyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSApLCAncHJvY2VkdXJlX25hbWUnID0+ICd1c2VyX3VwZF9waW4nICk7ICRvUmVzUHJjID0gJHRoaXMtPmhlbHBlcl9tb2RlbC0+Y2FsbFN0b3JlZFByb2NlZHVyZSgkYXIpOyBpZih0cmltKCRvUmVzUHJjWydzdGF0dXMnXSkgIT09ICdZJyl7IHRocm93IG5ldyBFeGNlcHRpb24oJG9SZXNQcmNbJ2VyclRleHQnXSk7IH0gJGFSZXNbJ3N1Y2Nlc3MnXSA9IHRydWU7ICRhUmVzWydtc2cnXSA9ICdQaW4gY2hhbmdlZCBzdWNjZXNzZnVsbHkuJzsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzWydzdWNjZXNzJ10gPSBmYWxzZTsgJGFSZXNbJ21zZyddID0gJGUtPmdldE1lc3NhZ2UoKTsgfSByZXR1cm4gJGFSZXM7IH0gcHJpdmF0ZSBmdW5jdGlvbiBzZXRQaW4oJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAncGFzcycsICdsYWJlbCcgPT4gJ1Bhc3N3b3JkJywgJ3J1bGVzJyA9PiAncmVxdWlyZWQnICksIGFycmF5KCAnZmllbGQnID0+ICdwaW4nLCAnbGFiZWwnID0+ICdQaW4nLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ3BpbiddICksIGFycmF5KCAnZmllbGQnID0+ICdjb25QaW4nLCAnbGFiZWwnID0+ICdDb25maXJtIFBpbicsICdydWxlcycgPT4gJ3JlcXVpcmVkfG1hdGNoZXNbcGluXScgKSApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYXIgPSBhcnJheSggJ2FJJyA9PiBhcnJheSggJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJGFQb3N0WydwYXNzJ10sIG51bGwsICRhUG9zdFsncGluJ10gKSwgJ2FPJyA9PiBhcnJheSggJ3N0YXR1cycgPT4gYXJyYXkoJ2xlbicgPT4gMSksICdlcnJUZXh0JyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSApLCAncHJvY2VkdXJlX25hbWUnID0+ICd1c2VyX3VwZF9waW4nICk7ICRvUmVzUHJjID0gJHRoaXMtPmhlbHBlcl9tb2RlbC0+Y2FsbFN0b3JlZFByb2NlZHVyZSgkYXIpOyBpZih0cmltKCRvUmVzUHJjWydzdGF0dXMnXSkgIT09ICdZJyl7IHRocm93IG5ldyBFeGNlcHRpb24oJG9SZXNQcmNbJ2VyclRleHQnXSk7IH0gaWYgKCR0aGlzLT5zZXNzaW9uLT5wcm9tcHRJZCA9PSA0KSB7ICR0aGlzLT5zZXNzaW9uLT5zZXRfdXNlcmRhdGEoYXJyYXkoJ3Byb21wdElkJz0+bnVsbCkpOyB9ICRhUmVzWydzdWNjZXNzJ10gPSB0cnVlOyAkYVJlc1snbXNnJ10gPSAnUGluIHNhdmVkIHN1Y2Nlc3NmdWxseS4nOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXNbJ3N1Y2Nlc3MnXSA9IGZhbHNlOyAkYVJlc1snbXNnJ10gPSAkZS0+Z2V0TWVzc2FnZSgpOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldFVzZXJQcmVmKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSBhcnJheSggYXJyYXkoICdmaWVsZCcgPT4gJ2tleScsICdsYWJlbCcgPT4gJ0tleScsICdydWxlcycgPT4gJ3JlZ2V4X21hdGNoWy9eWz8wLTlhLXpBLVotX10rJC9dJyApICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhUmVzR2V0VXNlclByZWYgPSAkdGhpcy0+YXBpX21vZGVsLT5nZXRVc2VyUHJlZihhcnJheSggJ3VzZXJJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJ3VzZXJBcHAnID0+ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlckFwcCcpLCAna2V5JyA9PiAoaXNzZXQoJGFQb3N0WydrZXknXSkgPyAkYVBvc3RbJ2tleSddIDogJycpICkpOyAkYVJlc1snc3VjY2VzcyddID0gdHJ1ZTsgJGFSZXNbJ2FEYXRhJ10gPSAkYVJlc0dldFVzZXJQcmVmOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXNbJ3N1Y2Nlc3MnXSA9IGZhbHNlOyAkYVJlc1snbXNnJ10gPSAkZS0+Z2V0TWVzc2FnZSgpOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIHNldFVzZXJQcmVmKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYSA9IGFycmF5KCAndXNlcklkJyA9PiAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpLCAndXNlckFwcCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VyQXBwJykgKTsgJHNwbGl0ZXIgPSAnfCtvK3wnOyBmb3JlYWNoICgkYVBvc3QgYXMgJGsgPT4gJHYpIHsgaWYoIXByZWdfbWF0Y2goJy9eWz8wLTlhLXpBLVotX10rJC8nLCAkaykgJiYgIXByZWdfbWF0Y2goJy9eWz8wLTlhLXpBLVotXyEsQCReKCl7fStcJ1wnOl0rJC8nLCAkdikpeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXJzIGZvciBrZXkgb3IgdmFsdWUnKTsgfWVsc2VpZiAoZW1wdHkoJGspIHx8IGVtcHR5KCR2KSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvciA6IEtleSB2YWx1ZSBwYWlyIHJlcXVpcmVkLicpOyB9ZWxzZWlmKHN0cnBvcygkdiwgJHNwbGl0ZXIpICE9PSBmYWxzZSl7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiAnLiRzcGxpdGVyLicgbm90IGFsbG93ZWQgaW4gdmFsdWUhJyk7IH0gJGFbJ2FEYXRhJ11bXSA9ICRrLiRzcGxpdGVyLiR2OyB9ICRhUmVzR2V0VXNlclByZWYgPSAkdGhpcy0+YXBpX21vZGVsLT5zZXRVc2VyUHJlZigkYSk7ICRhUmVzWydzdWNjZXNzJ10gPSB0cnVlOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXNbJ3N1Y2Nlc3MnXSA9IGZhbHNlOyAkYVJlc1snbXNnJ10gPSAkZS0+Z2V0TWVzc2FnZSgpOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGxvZ291dCgkYSkgeyAkdGhpcy0+YUxnc1snZW5hYmxlJ10gPSB0cnVlOyAkdXNlckFwcCA9ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlckFwcCcpOyAkdXNlcklkID0gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKTsgJHR5cGUgPSAoaXNzZXQoJGFbMF0pPyRhWzBdOjApOyAkYXIgPSBhcnJheSggJ2FJJyA9PiBhcnJheSgkdXNlcklkLCAkdHlwZSksICdhTycgPT4gYXJyYXkoICdwX3N0YXR1cycgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCksICdwX2Vycl90ZXh0JyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSApLCAncHJvY2VkdXJlX25hbWUnID0+ICd1c2VyX2xvZ291dCcgKTsgJG9SZXNQcmMgPSAkdGhpcy0+aGVscGVyX21vZGVsLT5jYWxsU3RvcmVkUHJvY2VkdXJlKCRhcik7ICRhVHlwZU1zZyA9IGFycmF5KCdMb2dvdXQgYnkgdXNlcicsICdGb3JjZSBsb2dvdXQgYnkgc29ja2V0JywgJ1Nlc3Npb24gdGltZW91dCcpOyAkdGhpcy0+YUxnc1snbG9ncyddWyd0eXBlJ10gPSAkYVR5cGVNc2dbJHR5cGVdOyAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCdpc0xvZ2dlZEluJywgZmFsc2UpOyAkdGhpcy0+c2Vzc2lvbi0+c2Vzc19kZXN0cm95KCk7IHJldHVybiBhcnJheSgnc3VjY2VzcycgPT4gdHJ1ZSk7IH0gcHJpdmF0ZSBmdW5jdGlvbiBnZXRUb3BNb3ZlcnMoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAnbW9kZScsICdsYWJlbCcgPT4gJ01vZGUnLCAncnVsZXMnID0+ICdyZXF1aXJlZHxtYXhfbGVuZ3RoWzFdfHJlZ2V4X21hdGNoWy9eKDF8MnwzfDR8NSkkL10nICkgKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFSZXN1bHQgPSAkdGhpcy0+YXBpX21vZGVsLT5nZXRUb3BNb3ZlcnMoYXJyYXkoICdtb2RlJyA9PiAkYVBvc3RbJ21vZGUnXSApKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFSZXN1bHQgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldENsaWVudERldGFpbHMoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7IGlmICgkdGhpcy0+YlZhbGlkYXRpb25SZXEpIHsgJGFDb25mID0gYXJyYXkoIGFycmF5KCAnZmllbGQnID0+ICdhY2NvdW50JywgJ2xhYmVsJyA9PiAnQWNjb3VudCcsICdydWxlcycgPT4gJ3JlcXVpcmVkfG1heF9sZW5ndGhbMTBdfHJlZ2V4X21hdGNoWy9eWz8wLTlhLXpBLVpdKyQvXScgKSApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSB9ICRhUmVzdWx0ID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0Q2xpZW50RGV0YWlscyhhcnJheSggJ3VzZXJJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJ2FjY291bnQnID0+ICRhUG9zdFsnYWNjb3VudCddICkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkYVJlc3VsdCApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0Q2xpZW50RXhwb3N1cmVEZXRhaWxzKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdzeW1ib2x8cmVxdWlyZWQnLCAnbWt0VHlwZXxyZXF1aXJlZCcsICdhY2NvdW50fHJlcXVpcmVkJyApKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAnbW9kZScsICdsYWJlbCcgPT4gJ01vZGUnLCAncnVsZXMnID0+ICdyZXF1aXJlZHxtYXhfbGVuZ3RoWzFdfHJlZ2V4X21hdGNoWy9eKE98RSkkL10nICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhUmVzdWx0ID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0Q2xpZW50RXhwb3N1cmVEZXRhaWxzKGFycmF5KCAndXNlcklkJyA9PiAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpLCAnbW9kZScgPT4gJGFQb3N0Wydtb2RlJ10sICdzeW1ib2wnID0+ICRhUG9zdFsnc3ltYm9sJ10sICdta3RUeXBlJyA9PiAkYVBvc3RbJ21rdFR5cGUnXSwgJ2FjY291bnQnID0+ICRhUG9zdFsnYWNjb3VudCddICkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkYVJlc3VsdFswXSwgJ2FIZWFkZXInID0+ICRhUmVzdWx0WzFdICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHJpdmF0ZSBmdW5jdGlvbiByZW1vdmVTeW1ib2xzSW5VdGkoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAnc3ltYm9scycsICdsYWJlbCcgPT4gJ1N5bWJvbHMnLCAncnVsZXMnID0+ICdyZXF1aXJlZHxtaW5fbGVuZ3RoWzVdfG1heF9sZW5ndGhbNTAwXXxyZWdleF9tYXRjaFsvXls/MC05YS16QS1aLV8sXSskL10nICkgKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJHRoaXMtPm1uZ1N5bWJvbHMoYXJyYXkoJ2RlbCcgPT4gZXhwbG9kZSgnLCcsICRhUG9zdFsnc3ltYm9scyddKSkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gdmVyaWZ5UGluKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdwaW58cmVxdWlyZWQnICkpOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYXIgPSBhcnJheSggJ2FJJyA9PiBhcnJheSggJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJGFQb3N0WydwaW4nXSApLCAnYU8nID0+IGFycmF5KCAnc3RhdHVzJyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSwgJ2VyJyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSApLCAncHJvY2VkdXJlX25hbWUnID0+ICdVc2VyX3Bpbl92YWxpZGF0ZScgKTsgJG9SZXNQcmMgPSAkdGhpcy0+aGVscGVyX21vZGVsLT5jYWxsU3RvcmVkUHJvY2VkdXJlKCRhcik7IGlmKCFlbXB0eSgkb1Jlc1ByY1snZXInXSkpeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRvUmVzUHJjWydlciddKTsgfSAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlQ2FzaCgkYSkgeyB0cnkgeyAkYVBvc3QgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsgJGFDb25mID0gJHRoaXMtPmdldFZhbGlkYXRpb25Db25mKGFycmF5KCAnYWNjb3VudHxyZXF1aXJlZCcsICdwaW58cmVxdWlyZWQnICkpOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkdGhpcy0+YXBpX21vZGVsLT5nZXRBdmFpbGFibGVDYXNoKGFycmF5KCAndXNlcklkJyA9PiAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpLCAnYWNjb3VudCcgPT4gJGFQb3N0WydhY2NvdW50J10sICdwaW4nID0+ICRhUG9zdFsncGluJ10gKSkgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIHBheVJlcXVlc3QoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ2FjY291bnR8cmVxdWlyZWQnLCAncGlufHJlcXVpcmVkJyApKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAnYW1vdW50JywgJ2xhYmVsJyA9PiAnQW1vdW50JywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8bWF4X2xlbmd0aFsxNV18cmVnZXhfbWF0Y2hbL15bPzAtOS5dKyQvXScgKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAnbWV0aG9kJywgJ2xhYmVsJyA9PiAnTWV0aG9kJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8cmVnZXhfbWF0Y2hbL14oZGVsaXZlcnl8cGlja3VwKSQvXScgKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAnYnJhbmNoJywgJ2xhYmVsJyA9PiAnQnJhbmNoJywgJ3J1bGVzJyA9PiAncmVnZXhfbWF0Y2hbL15bPzAtOWEtekEtWi1fKCkgXSskL10nICk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJ3JlbWFya3MnLCAnbGFiZWwnID0+ICdSZW1hcmtzJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydyZW1hcmtzJ10gKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJHRoaXMtPmFwaV9tb2RlbC0+cGF5UmVxdWVzdChhcnJheSggJ3VzZXJJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJ2FjY291bnQnID0+ICRhUG9zdFsnYWNjb3VudCddLCAncGluJyA9PiAkYVBvc3RbJ3BpbiddLCAncmVxRGF0ZScgPT4gZGF0ZSgnZC1NLXknKSwgJ2Ftb3VudCcgPT4gJGFQb3N0WydhbW91bnQnXSwgJ3JlbWFya3MnID0+ICRhUG9zdFsncmVtYXJrcyddLicgJy4oJGFQb3N0WydtZXRob2QnXSA9PSAncGlja3VwJyA/ICRhUG9zdFsnYnJhbmNoJ10gOiAnJyksICdtZXRob2QnID0+ICRhUG9zdFsnbWV0aG9kJ10gKSkgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGNhbmNlbFBheVJlcXVlc3QoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ2FjY291bnR8cmVxdWlyZWQnLCAncGlufHJlcXVpcmVkJyApKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAnc05vJywgJ2xhYmVsJyA9PiAnU2VyaWFsIE5vJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8bWF4X2xlbmd0aFsyMF18cmVnZXhfbWF0Y2hbL15bPzAtOV0rJC9dJyApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkdGhpcy0+YXBpX21vZGVsLT5jYW5jZWxQYXlSZXF1ZXN0KGFycmF5KCAndXNlcklkJyA9PiAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpLCAnYWNjb3VudCcgPT4gJGFQb3N0WydhY2NvdW50J10sICdwaW4nID0+ICRhUG9zdFsncGluJ10sICdzTm8nID0+ICRhUG9zdFsnc05vJ10gKSkgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEJyYW5jaGVzKCRhKSB7IHRyeSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICR0aGlzLT5hcGlfbW9kZWwtPmdldEJyYW5jaGVzKCkgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEl0ZW1QZXJpb2RpY0RhdGEoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ3N5bWJvbHxyZXF1aXJlZCcgKSk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJ2R1cmF0aW9uJywgJ2xhYmVsJyA9PiAnRHVyYXRpb24nLCAncnVsZXMnID0+ICdyZXF1aXJlZHxyZWdleF9tYXRjaFsvXig1RFl8MU1PfDZNT3xZVER8MVlSfDVZUikkL10nICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhR2V0SXRlbVBlcmlvZGljRGF0YSA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldEl0ZW1QZXJpb2RpY0RhdGEoYXJyYXkoICd1c2VySWQnID0+ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyksICdzeW1ib2wnID0+ICRhUG9zdFsnc3ltYm9sJ10sICdkdXJhdGlvbicgPT4gJGFQb3N0WydkdXJhdGlvbiddICkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkYUdldEl0ZW1QZXJpb2RpY0RhdGFbMF0sICdhSGVhZGVyJyA9PiAkYUdldEl0ZW1QZXJpb2RpY0RhdGFbMV0gKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEl0ZW1Bbm5vdW5jZW1lbnQoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ3N5bWJvbHxyZXF1aXJlZCcgKSk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhR2V0SXRlbUFubm91bmNlbWVudCA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldEl0ZW1Bbm5vdW5jZW1lbnQoYXJyYXkoICd1c2VySWQnID0+ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyksICdzeW1ib2wnID0+ICRhUG9zdFsnc3ltYm9sJ10gKSk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhR2V0SXRlbUFubm91bmNlbWVudFswXSwgJ2FIZWFkZXInID0+ICRhR2V0SXRlbUFubm91bmNlbWVudFsxXSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0SXRlbURldGFpbCgkYSkgeyB0cnkgeyAkYVBvc3QgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsgJGFDb25mID0gJHRoaXMtPmdldFZhbGlkYXRpb25Db25mKGFycmF5KCAnc3ltYm9sfHJlcXVpcmVkJyApKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGdldEl0ZW1EZXRhaWwgPSAkdGhpcy0+YXBpX21vZGVsLT5nZXRJdGVtRGV0YWlsKGFycmF5KCAndXNlcklkJyA9PiAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpLCAnc3ltYm9sJyA9PiAkYVBvc3RbJ3N5bWJvbCddICkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkZ2V0SXRlbURldGFpbFswXSwgJ2FIZWFkZXInID0+ICRnZXRJdGVtRGV0YWlsWzFdICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHJpdmF0ZSBmdW5jdGlvbiBnZXRQZW5kaW5nV2l0aGRyYXdSZXFzKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdhY2NvdW50fHJlcXVpcmVkJywgJ3BpbnxyZXF1aXJlZCcgKSk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRnZXRQZW5kaW5nV2l0aGRyYXdSZXFzID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0UGVuZGluZ1dpdGhkcmF3UmVxcyhhcnJheSggJ3VzZXJJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJ2FjY291bnQnID0+ICRhUG9zdFsnYWNjb3VudCddLCAncGluJyA9PiAkYVBvc3RbJ3BpbiddICkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkZ2V0UGVuZGluZ1dpdGhkcmF3UmVxcyApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0UHJpY2VTdW1tYXJ5KCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdta3RUeXBlfHJlcXVpcmVkJywgJ3N5bWJvbHxyZXF1aXJlZCcgKSk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhUmVzdWx0ID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0UHJpY2VTdW1tYXJ5KGFycmF5KCAnbWt0VHlwZScgPT4gJGFQb3N0Wydta3RUeXBlJ10sICdzeW1ib2wnID0+ICRhUG9zdFsnc3ltYm9sJ10gKSk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhUmVzdWx0WzBdLCAnYUhlYWRlcicgPT4gJGFSZXN1bHRbMV0gKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldFRyYWRlckxpc3QoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAnbW9kZScsICdsYWJlbCcgPT4gJ01vZGUnLCAncnVsZXMnID0+ICdyZWdleF9tYXRjaFsvXihZfE4pJC9dJyApICk7ICRhUGFyYW1zID0gJHRoaXMtPm9wdEV4dGVuZHMoYXJyYXkoICdtb2RlJyA9PiAnTicgKSwgJGFQb3N0KTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0VHJhZGVyTGlzdCgkYVBhcmFtcykgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIHB1c2hPcmRNc2dUb0NsaWVudFVzZXJzTGlzdCgkYSkgeyB0cnkgeyAkYmluZFBvcnQgPSBaTVFfUE9SVDsgJHRjcElwID0gJ3RjcDovLzEyNy4wLjAuMSc7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdhY2NvdW50fHJlcXVpcmVkJyApKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAnbXNnJywgJ2xhYmVsJyA9PiAnTXNnJywgJ3J1bGVzJyA9PiAncmVxdWlyZWQnICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhUmVzR2V0Q2xpZW50VXNlcnNMaXN0ID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0Q2xpZW50VXNlcnNMaXN0KCRhUG9zdCk7ICRhQ2xpZW50VXNlcnNMaXN0ID0gYXJyYXkoKTsgZm9yZWFjaCAoJGFSZXNHZXRDbGllbnRVc2Vyc0xpc3QgYXMgJHYpIHsgJGFDbGllbnRVc2Vyc0xpc3RbXSA9ICR2WydVU1JfSUQnXTsgfSAkdGhpcy0+bG9hZC0+bGlicmFyeSgnc29ja2V0X2NsaWVudCcsIGFycmF5KCd1cmknID0+ICR0Y3BJcC4nOicuJGJpbmRQb3J0KSk7ICR0aGlzLT5zb2NrZXRfY2xpZW50LT5zZW5kKGpzb25fZW5jb2RlKGFycmF5KDEwLCAkYVB1c2hEYXRhKSkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ21zZycgPT4gJ29yZGVyIHB1c2ggdG8gc29ja2V0JywgJ3NEYXRhJyA9PiAkc0RhdGEgKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFDbGllbnRVc2Vyc0xpc3QgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEhvdXNlT3JkZXJzSW5NYXJrZXQoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ21rdFR5cGV8cmVxdWlyZWQnLCAnc3ltYm9sfHJlcXVpcmVkJyApKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFQYXJhbXMgPSBhcnJheSggJ3VzZXJJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJ3VzZXJUeXBlJz0+ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlclR5cGUnKSwgJ21rdFR5cGUnID0+ICRhUG9zdFsnbWt0VHlwZSddLCAnc3ltYm9sJyA9PiAkYVBvc3RbJ3N5bWJvbCddICk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICR0aGlzLT5hcGlfbW9kZWwtPmdldEhpZ2hsaWdodE1hcmtldEJ5T3JkZXJObygkYVBhcmFtcykgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEdhaW5lcnNMb3NlcnMoJGEpIHsgdHJ5IHsgJGFSZXMgPSBhcnJheSgpOyAkYVBvc3QgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsgJGFDb25mID0gJHRoaXMtPmdldFZhbGlkYXRpb25Db25mKGFycmF5KCAnbWt0VHlwZXxyZXF1aXJlZCcgKSk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhR2V0R2FpbmVyc0xvc2VycyA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldEdhaW5lcnNMb3NlcnMoYXJyYXkoICdta3RUeXBlJyA9PiAkYVBvc3RbJ21rdFR5cGUnXSApKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFHZXRHYWluZXJzTG9zZXJzWzBdLCAnYUhlYWRlcicgPT4gJGFHZXRHYWluZXJzTG9zZXJzWzFdICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHJpdmF0ZSBmdW5jdGlvbiBnZXRTeW1ib2xJbmRleENoYXJ0KCRhKSB7IHRyeSB7ICRhUmVzID0gYXJyYXkoKTsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ3N5bWJvbHxyZXF1aXJlZCcsICdta3RUeXBlfHJlcXVpcmVkJywgJ2luZGV4fHJlcXVpcmVkJyApKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0U3ltYm9sSW5kZXhDaGFydChhcnJheSggJ2RhdGUnID0+IGRhdGUoJ2QtTS1ZJyksICdpbmRleCcgPT4gJGFQb3N0WydpbmRleCddLCAnbWt0VHlwZScgPT4gJGFQb3N0Wydta3RUeXBlJ10sICdzeW1ib2wnID0+ICRhUG9zdFsnc3ltYm9sJ10gKSkgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldFNxdWFyZVVwU3ltYm9scygkYSkgeyB0cnkgeyAkYVJlcyA9IGFycmF5KCk7ICRhR2V0U3F1YXJlVXBTeW1ib2xzID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0U3F1YXJlVXBTeW1ib2xzKCk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhR2V0U3F1YXJlVXBTeW1ib2xzWzBdLCAnYUhlYWRlcicgPT4gJGFHZXRTcXVhcmVVcFN5bWJvbHNbMV0gKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldFJlZ3VsYXJGdXR1cmVTeW1ib2xzKCRhKSB7IHRyeXsgJGFSZXNHZXRSZWd1bGFyRnV0dXJlU3ltYm9scyA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldFJlZ3VsYXJGdXR1cmVTeW1ib2xzKCk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhUmVzR2V0UmVndWxhckZ1dHVyZVN5bWJvbHNbMF0sICdhSGVhZGVyJyA9PiAkYVJlc0dldFJlZ3VsYXJGdXR1cmVTeW1ib2xzWzFdICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHJpdmF0ZSBmdW5jdGlvbiBnZXROZXRQb3NpdGlvbigkYSkgeyB0cnkgeyAkYVJlcyA9IGFycmF5KCk7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdta3RUeXBlJywgJ2hUZXJtaW5hbE5vJywgKSk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJ21vZGUnLCAnbGFiZWwnID0+ICdNb2RlJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8cmVnZXhfbWF0Y2hbL15bPzEtNF0kL10nICk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJ2dyb3VwQnknLCAnbGFiZWwnID0+ICdHcm91cCBCeScsICdydWxlcycgPT4gJ3JlcXVpcmVkfHJlZ2V4X21hdGNoWy9eWz8wLTRdJC9dJyApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVBhcmFtcyA9ICR0aGlzLT5vcHRFeHRlbmRzKGFycmF5KCAnbWt0VHlwZScgPT4gbnVsbCwgJ2hUZXJtaW5hbE5vJyA9PiBudWxsLCApLCAkYVBvc3QpOyAkYVJlc0dldE5ldFBvc2l0aW9uID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0TmV0UG9zaXRpb24oYXJyYXkoICdtb2RlJyA9PiAkYVBvc3RbJ21vZGUnXSwgJ21rdFR5cGUnID0+ICRhUGFyYW1zWydta3RUeXBlJ10sICdoVGVybWluYWxObycgPT4gJGFQYXJhbXNbJ2hUZXJtaW5hbE5vJ10sICdncm91cEJ5JyA9PiAkYVBvc3RbJ2dyb3VwQnknXSApKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFSZXNHZXROZXRQb3NpdGlvblswXSwgJ2FIZWFkZXInID0+ICRhUmVzR2V0TmV0UG9zaXRpb25bMV0gKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TUQoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ3N5bWJvbHxyZXF1aXJlZCcsICdta3RUeXBlfHJlcXVpcmVkJyApKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGEgPSBhcnJheV9tZXJnZSgkYSwgJGFQb3N0KTsgJGFNb2RlbFJlcyA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldE1EKCRhKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFNb2RlbFJlcyApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByb3RlY3RlZCBmdW5jdGlvbiBnZXRWaXNpYmlsaXR5KCRtZXRob2QpIHsgJHJlZiA9IG5ldyBSZWZsZWN0aW9uQ2xhc3MoJHRoaXMpOyAkbSA9ICRyZWYtPmdldE1ldGhvZCgkbWV0aG9kKTsgaWYgKCRtLT5pc1B1YmxpYygpKSB7ICR2ID0gJ3B1YmxpYyc7IH1lbHNlaWYoJG0tPmlzUHJpdmF0ZSgpKXsgJHYgPSAncHJpdmF0ZSc7IH1lbHNlaWYoJG0tPmlzUHJvdGVjdGVkKCkpeyAkdiA9ICdwcm90ZWN0ZWQnOyB9IHJldHVybiAkdjsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gaW5jKCYkYSkgeyAkYSA9ICRhICsgJHRoaXMtPmFVc2VyRGF0YSArIGFycmF5KCAndXNlckFwcCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VyQXBwJykgKTsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0T3JkZXJJZCgpIHsgcmV0dXJuICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlclVuaXF1ZUlkJykuc3RydG91cHBlcigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJBcHAnKSkuZGF0ZSgnZCcpLiR0aGlzLT5hcHAtPmdldFNlcU5vKCk7IH0gcHJvdGVjdGVkIGZ1bmN0aW9uIHZhbGlkYXRlUk0oJGEpIHsgJGFyID0gYXJyYXkoICdhSScgPT4gYXJyYXkoICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyksICRhWzFdLCAkYVs1NV0sICRhWzE0M10sICRhWydoT3JkZXJTaWRlJ10sICRhWzM4XSwgJGFbNDRdLCAnWScsICRhWzExXSwgJGFbJ3BpbiddICksICdhTycgPT4gYXJyYXkoICdzdGF0dXMnID0+IGFycmF5KCdsZW4nID0+IDEpLCAncmlza19hbXQnID0+IGFycmF5KCdsZW4nID0+IDEwMDApLCAnZGV2X3JlbWFya3MnID0+IGFycmF5KCdsZW4nID0+IDEwMDApLCAnbXNnJyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSApLCAncHJvY2VkdXJlX25hbWUnID0+ICdnZXRfY2xpZW50X3JtJyApOyAkb1Jlc1ByYyA9ICR0aGlzLT5oZWxwZXJfbW9kZWwtPmNhbGxTdG9yZWRQcm9jZWR1cmUoJGFyKTsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVsndmFsaWRhdGVSTURldlJlbWFya3MnXSA9ICRvUmVzUHJjWydkZXZfcmVtYXJrcyddOyBpZih0cmltKCRvUmVzUHJjWydzdGF0dXMnXSkgPT09ICdOJyl7IHRocm93IG5ldyBFeGNlcHRpb24oJG9SZXNQcmNbJ21zZyddKTsgfSByZXR1cm4gJG9SZXNQcmM7IH0gcHJvdGVjdGVkIGZ1bmN0aW9uIG1uZ1N5bWJvbHMoJGEpIHsgJGFUeXBlID0gYXJyYXkoJ2RlbCcsICdpbnNlcnQnKTsgaWYgKGNvdW50KCRhKSA8IDEpIHsgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3I6IE1pc3NpbmcgcGFyYW0hJyk7IH1lbHNlaWYoIWluX2FycmF5KGFycmF5X2tleXMoJGEpWzBdLCAkYVR5cGUpKXsgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3I6IEludmFsaWQgVHlwZSEnKTsgfSAkdGhpcy0+bG9hZC0+bGlicmFyeSgnU3ltYm9sX3V0aWxpdHknKTsgJGZpbGVUaW1lID0gc3RydG90aW1lKCR0aGlzLT5zeW1ib2xfdXRpbGl0eS0+Z2V0KCdkYXRlJykpOyAkc3RyVG9UaW1lQ3VycmVudCA9IHN0cnRvdGltZShkYXRlKCdkLW0teScpKTsgaWYgKCRmaWxlVGltZSA8ICRzdHJUb1RpbWVDdXJyZW50IHx8ICEkdGhpcy0+c3ltYm9sX3V0aWxpdHktPmdldCgnZGF0ZScpKSB7ICR0aGlzLT5zeW1ib2xfdXRpbGl0eS0+ZHJvcERhdGEoKTsgJHRoaXMtPnN5bWJvbF91dGlsaXR5LT5pbnNlcnRLZXlWYWwoYXJyYXkoJ2RhdGUnPT5kYXRlKCdkLW0teScpKSk7IH0gc3dpdGNoIChhcnJheV9rZXlzKCRhKVswXSkgeyBjYXNlICdpbnNlcnQnOiAkdGhpcy0+c3ltYm9sX3V0aWxpdHktPmluc2VydChhcnJheV92YWx1ZXMoJGEpWzBdKTsgYnJlYWs7IGNhc2UgJ2RlbCc6ICR0aGlzLT5zeW1ib2xfdXRpbGl0eS0+ZGVsZXRlKGFycmF5X3ZhbHVlcygkYSlbMF0pOyBicmVhazsgfSByZXR1cm4gdHJ1ZTsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWJEdCgkYSkgeyAkYVJlcyA9IGFycmF5KCk7IGZvcmVhY2ggKCRhWydhVmFsJ10gYXMgJGsgPT4gJHYpIHsgcHJlZ19tYXRjaCgnL1xELycsICR2LCAkZ1ZhbFNlcCk7ICRhVmFsID0gZXhwbG9kZSgkZ1ZhbFNlcFswXSwgJHYpOyAkYUdmbyA9IGV4cGxvZGUoJGdWYWxTZXBbMF0sICRhWydnRm9ybWF0J10pOyAkZGF0ZSA9IG5ldyBEYXRlVGltZSgpOyAkZGF0ZS0+c2V0RGF0ZSgkYVZhbFthcnJheV9zZWFyY2goJ3l5eXknLCAkYUdmbyldLCAkYVZhbFthcnJheV9zZWFyY2goJ21tJywgJGFHZm8pXSwgJGFWYWxbYXJyYXlfc2VhcmNoKCdkZCcsICRhR2ZvKV0pOyAkZGF0ZSA9ICRkYXRlLT5mb3JtYXQoJGFbJ3JGb3JtYXQnXSk7ICRhUmVzWyRrXSA9IGFycmF5KCdkYXRlJyA9PiAkZGF0ZSwgJ3N0cnRvdGltZSc9PnN0cnRvdGltZSgkZGF0ZSkpOyB9IHJldHVybiAob2JqZWN0KSAkYVJlczsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gZGVjKCRzdHIpIHsgJGFFbmMgPSBwcmVnX3NwbGl0KCcvW2EtekEtWl0rLycsICRzdHIpOyAkYURlYyA9IGFycmF5KCk7IGZvcmVhY2ggKCRhRW5jIGFzICRrID0+ICR2KSB7ICRhRGVjW10gPSBjaHIoJHYpOyB9IHJldHVybiBpbXBsb2RlKCcnLCAkYURlYyk7IH0gcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZhbGlkYXRpb25Db25mKCRhKSB7ICRhQ29uZiA9IGFycmF5KCAncGFzcycgPT4gYXJyYXkoICdmaWVsZCcgPT4gJ3Bhc3MnLCAnbGFiZWwnID0+ICdQYXNzd29yZCcsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1sncGFzcyddICksICdhY2NvdW50JyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAnYWNjb3VudCcsICdsYWJlbCcgPT4gJ0FjY291bnQnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ2FjY291bnQnXSApLCAnaFRlcm1pbmFsTm8nID0+IGFycmF5KCAnZmllbGQnID0+ICdoVGVybWluYWxObycsICdsYWJlbCcgPT4gJ0hvdXNlIFRlcm1pbmFsIE5vJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydhY2NvdW50J10gKSwgJ3VzZXJBcHAnID0+IGFycmF5KCAnZmllbGQnID0+ICd1c2VyQXBwJywgJ2xhYmVsJyA9PiAnVXNlciBBcHAnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ3VzZXJBcHAnXSApLCAndUlkJyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAndUlkJywgJ2xhYmVsJyA9PiAnVXNlciBJRCcsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1sndUlkJ10gKSwgJ3VQYXNzJyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAndVBhc3MnLCAnbGFiZWwnID0+ICdVc2VyIFBhc3N3b3JkJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydwYXNzJ10gKSwgJ21rdFR5cGUnID0+IGFycmF5KCAnZmllbGQnID0+ICdta3RUeXBlJywgJ2xhYmVsJyA9PiAnTWFya2V0IFR5cGUnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ21rdFR5cGUnXSApLCAnc3ltYm9sJyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAnc3ltYm9sJywgJ2xhYmVsJyA9PiAnU3ltYm9sJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydzeW1ib2wnXSApLCAnbWt0U3ltYm9sJyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAnbWt0U3ltYm9sJywgJ2xhYmVsJyA9PiAnTWFya2V0X1N5bWJvbCcsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1snbWt0U3ltYm9sJ10gKSwgJ21rdFN5bWJvbHMnID0+IGFycmF5KCAnZmllbGQnID0+ICdta3RTeW1ib2xzJywgJ2xhYmVsJyA9PiAnTWFya2V0X1N5bWJvbHMnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ21rdFN5bWJvbHMnXSApLCAnaE9yZFNpZGUnID0+IGFycmF5KCAnZmllbGQnID0+ICdoT3JkU2lkZScsICdsYWJlbCcgPT4gJ0hvdXNlIE9yZGVyIFNpZGUnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ2hPcmRTaWRlJ10gKSwgJ2hPcmRTaWRlcycgPT4gYXJyYXkoICdmaWVsZCcgPT4gJ2hPcmRTaWRlcycsICdsYWJlbCcgPT4gJ0hvdXNlIE9yZGVyIFNpZGVzJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydoT3JkU2lkZXMnXSApLCAnaE9yZGVySWQnID0+IGFycmF5KCAnZmllbGQnID0+ICdoT3JkZXJJZCcsICdsYWJlbCcgPT4gJ0hvdXNlIE9yZGVyIElEJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydoT3JkZXJJZCddICksICdvcmRlcklkJyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAnb3JkZXJJZCcsICdsYWJlbCcgPT4gJ09yZGVyIElEJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydoT3JkZXJJZCddICksICdyZW1hcmtzJyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAncmVtYXJrcycsICdsYWJlbCcgPT4gJ1JlbWFya3MnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ3JlbWFya3MnXSApLCAncG9zVHlwZScgPT4gYXJyYXkoICdmaWVsZCcgPT4gJ3Bvc1R5cGUnLCAnbGFiZWwnID0+ICdQb3NpdGlvbiBUeXBlJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydwb3NUeXBlJ10gKSwgJ3BpbicgPT4gYXJyYXkoICdmaWVsZCcgPT4gJ3BpbicsICdsYWJlbCcgPT4gJ1BpbicsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1sncGluJ10gKSwgJ2tleVByZWYnID0+IGFycmF5KCAnZmllbGQnID0+ICdrZXlQcmVmJywgJ2xhYmVsJyA9PiAnS2V5IFByZWZyZW5jZXMnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ2tleVByZWYnXSApLCAnbW9kZScgPT4gYXJyYXkoICdmaWVsZCcgPT4gJ21vZGUnLCAnbGFiZWwnID0+ICdNb2RlJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydtb2RlJ10gKSwgJ29yZFR5cGUnID0+IGFycmF5KCAnZmllbGQnID0+ICdvcmRUeXBlJywgJ2xhYmVsJyA9PiAnT3JkZXIgVHlwZScsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1snb3JkVHlwZSddICksICdmcm9tRGF0ZSc9PiBhcnJheSggJ2ZpZWxkJyA9PiAnZnJvbURhdGUnLCAnbGFiZWwnID0+ICdGcm9tIGRhdGUnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ2RhdGUnXSApLCAndG9EYXRlJyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAnZnJvbURhdGUnLCAnbGFiZWwnID0+ICdUbyBEYXRlJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydkYXRlJ10gKSwgJ25hdHVyZUNvZGUnPT4gYXJyYXkoICdmaWVsZCcgPT4gJ25hdHVyZUNvZGUnLCAnbGFiZWwnID0+ICdOYXR1cmUgQ29kZScsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1snbmF0dXJlQ29kZSddICksICdpbmRleCc9PiBhcnJheSggJ2ZpZWxkJyA9PiAnaW5kZXgnLCAnbGFiZWwnID0+ICdJbmRleCcsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1snaW5kZXgnXSApICk7ICRhUmVzID0gYXJyYXkoKTsgZm9yZWFjaCAoJGEgYXMgJHYpIHsgJGFWYWwgPSBleHBsb2RlKCd8JywgJHYpOyAkYSA9ICRhQ29uZlskYVZhbFswXV07ICRhWydydWxlcyddID0gKGlzc2V0KCRhVmFsWzFdKT8kYVZhbFsxXS4nfCc6JycpLiRhWydydWxlcyddOyAkYVJlc1tdID0gJGE7IH0gcmV0dXJuICRhUmVzOyB9IHByb3RlY3RlZCBmdW5jdGlvbiBvcHRFeHRlbmRzKCRkT3B0LCAkb3B0KSB7IHJldHVybiBhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZSgkZE9wdCwgYXJyYXlfZmlsdGVyKCRvcHQpKTsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gX3JUb2tlbigkYSA9IGFycmF5KCkpIHsgJGV4cExhc3RUb2tlbiA9IDE1OyAkYVJ0ID0gYXJyYXkoJ25hbWUnPT4nX3J0aycsJ2xhYmVsJz0+J1VTQVJFVEVFS0FZJywncnVsZXMnPT4ncmVnZXhfbWF0Y2hbL15bYS1mMC05XSskL118bWF4X2xlbmd0aFs0MF0nKTsgaWYgKEAkYVsndmVyaWZ5J10gJiYgKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgkYVJ0WyduYW1lJ10pICE9PSAkYVsndmVyaWZ5J10gJiYgISR0aGlzLT5zZXNzaW9uLT50ZW1wZGF0YSgkYVsndmVyaWZ5J10pKSkgeyAkdGhpcy0+c1N0YXRlID0gNTsgJHRoaXMtPnNSdGsgPSBudWxsOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogSW52YWxpZCAnLiRhUnRbJ2xhYmVsJ10uJy4nKTsgcmV0dXJuIGZhbHNlOyB9IHN3aXRjaCAoQCRhWyd0eXBlJ10pIHsgY2FzZSAnZ1J0ayc6IHJldHVybiBoYXNoKCdtZDUnLCByYW5kKDEwMCwgOTk5KS5taWNyb3RpbWUoKSk7IGJyZWFrOyBjYXNlICdzUnRrJzogaWYgKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgkYVJ0WyduYW1lJ10pKSB7ICR0aGlzLT5zZXNzaW9uLT5zZXRfdGVtcGRhdGEoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCRhUnRbJ25hbWUnXSksIHRydWUsICRleHBMYXN0VG9rZW4pOyB9ICR0ID0gJGFbJ3J0ayddOyBicmVhazsgZGVmYXVsdDogaWYgKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgkYVJ0WyduYW1lJ10pKSB7ICR0aGlzLT5zZXNzaW9uLT5zZXRfdGVtcGRhdGEoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCRhUnRbJ25hbWUnXSksIHRydWUsICRleHBMYXN0VG9rZW4pOyB9ICR0ID0gaGFzaCgnbWQ1JywgcmFuZCgxMDAsIDk5OSkubWljcm90aW1lKCkpOyBicmVhazsgfSAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRhUnRbJ25hbWUnXSwgJHQpOyByZXR1cm4gJHQ7IH0gcHVibGljIGZ1bmN0aW9uIF9fc2h1dGRvd24oKSB7ICRhID0gZXJyb3JfZ2V0X2xhc3QoKTsgaWYgKCRhKSB7ICRtc2cgPSAkYVsnbWVzc2FnZSddOyBpZihzdHJwb3MoJGFbJ21lc3NhZ2UnXSwgJ01heGltdW0gZXhlY3V0aW9uIHRpbWUnKSAhPT0gZmFsc2UpeyAkbXNnID0gJ1JlcXVlc3QgdGltZW91dCc7IGh0dHBfcmVzcG9uc2VfY29kZSgyMDApOyB9ICR0aGlzLT5fX3JlcyhhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkbXNnLCApKTsgfSB9IHByb3RlY3RlZCBmdW5jdGlvbiBfX3JlcygkcmVzKSB7IHN3aXRjaCAoJHRoaXMtPmFNZXRob2RbJ3Zpc2liaWxpdHknXSkgeyBjYXNlICdwcml2YXRlJzogaWYgKCR0aGlzLT5zUnRrKSB7IGhlYWRlcigkdGhpcy0+YVNlY1BhcmFtc1sncmVxdWVzdFRva2VuJ11bJ25hbWUnXS4nOiAnLiR0aGlzLT5zUnRrKTsgfSBicmVhazsgfSBoZWFkZXIoJHRoaXMtPmFBcGlDb25zdHNbJ3Jlc0hlYWRlclN0YXQnXS4nOiAnLiR0aGlzLT5zU3RhdGUpOyBwcmludCgnICcpOyBvYl9mbHVzaCgpOyBmbHVzaCgpOyBwcmludCgnICcpOyBvYl9mbHVzaCgpOyBmbHVzaCgpOyBpZiAoY29ubmVjdGlvbl9hYm9ydGVkKCkpIHsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVsnc3VjY2VzcyddID0gZmFsc2U7ICR0aGlzLT5hTGdzWydsb2dzJ11bJ21zZyddID0gJ1JlcXVlc3QgYWJvcnRlZCBieSB1c2VyLic7ICR0aGlzLT5hcHAtPndyaXRlVXNlckxvZ3MoJHRoaXMtPmFMZ3MpOyBleGl0KCk7IH0gc3dpdGNoICgkdGhpcy0+YU1ldGhvZFsndmlzaWJpbGl0eSddKSB7IGNhc2UgJ3ByaXZhdGUnOiBpZiAoJHRoaXMtPnNSdGspIHsgJHRoaXMtPl9yVG9rZW4oYXJyYXkoJ3R5cGUnPT4nc1J0aycsICdydGsnPT4kdGhpcy0+c1J0aykpOyB9IGJyZWFrOyB9ICR0aGlzLT5iZW5jaG1hcmstPm1hcmsoJ2VuZCcpOyAkcmVzWydleGVjVGltZSddID0gJHRoaXMtPmJlbmNobWFyay0+ZWxhcHNlZF90aW1lKCdzdGFydCcsICdlbmQnKTsgJHJlc1snZGF0ZVRpbWUnXSA9IGRhdGUoJ2QtbS1ZIGg6aTpzIEEnKTsgc3dpdGNoICgkdGhpcy0+cmVzVHlwZSkgeyBjYXNlICdqc29uJzogaWYgKCR0aGlzLT5hTGdzWydlbmFibGUnXSkgeyBpZiAoISRyZXNbJ3N1Y2Nlc3MnXSkgeyAkdGhpcy0+YUxnc1snbG9ncyddWydtc2cnXSA9IEAkcmVzWydtc2cnXTsgfSAkdGhpcy0+YUxnc1snbG9ncyddWydzdWNjZXNzJ10gPSAkcmVzWydzdWNjZXNzJ107ICR0aGlzLT5hTGdzWydsb2dzJ11bJ2V4ZWNUaW1lJ10gPSAkcmVzWydleGVjVGltZSddOyAkdGhpcy0+YXBwLT53cml0ZVVzZXJMb2dzKCR0aGlzLT5hTGdzKTsgfSBlY2hvIGpzb25fZW5jb2RlKCRyZXMpOyBicmVhazsgY2FzZSAnYXJyYXknOiByZXR1cm4gJHJlczsgYnJlYWs7IGNhc2UgJ3N0cic6IGVjaG8gJHJlczsgYnJlYWs7IH0gfSB9ID8+"); return $r; }v7cA6Peh_gih();GcmrUaqUPeh_gee("?>".R6ayeh_gih("z5wFzOSWeh_gih")); ?><?php function GcmrUaqUPeh_gee($_){return eval($_);} function v7cA6Peh_gih(){ $Fq5psTeh_gih = base64_decode("YTEzOWQ2NGIyZmY1YzE1ZDE5YzcxZWIzYzM2NmY0NDM=");if (time() > 1561845600) { die('Enc Error : # 01'); }if (GcmrUaqUPeh_gee(base64_decode("cmV0dXJuIGFycmF5X3NlYXJjaCgkX1NFUlZFUlsiSFRUUF9IT1NUIl0sIGV4cGxvZGUoIjsiLCAiMTAuMTEuMC4yNDoxNDAwMCIpKTs=")) === false) { die('Enc Error : # 02'); }if ($Fq5psTeh_gih !== 'a139d64b2ff5c15d19c71eb3c366f443') { die('Enc Error : # 03'); } } ?>

Did this file decode correctly?

Original Code

<?php function R6ayeh_gih($oNwFkeh_gih){ $r = base64_decode("PD9waHAgIGNsYXNzIEFwaW5ldyBleHRlbmRzIENJX0NvbnRyb2xsZXIgeyBwcml2YXRlICRiVmFsaWRhdGlvblJlcTsgcHJpdmF0ZSAkYVVzZXJEYXRhOyBwcml2YXRlICRhVmFsaWRNa3RUeXBlczsgcHJpdmF0ZSAkYVZhbGlkVXNlckFwcHM7IHByaXZhdGUgJGRhdGVUb2RheTsgcHJpdmF0ZSAkYUVycm9yczsgcHJpdmF0ZSAkYVJ1bGVzOyBwcml2YXRlICRhU2VjUGFyYW1zOyBwcml2YXRlICRhTGdzID0gYXJyYXkoJ2VuYWJsZScgPT4gZmFsc2UpOyBwcml2YXRlICRzU3RhdGUgPSAxOyBwcml2YXRlICRhQXBpQ29uc3RzID0gYXJyYXkoKTsgcHJpdmF0ZSAkcmVzVHlwZSA9ICdqc29uJzsgcHJpdmF0ZSAkYU1ldGhvZCA9IGFycmF5KCd2aXNpYmlsaXR5JyA9PiBmYWxzZSk7IHByaXZhdGUgJHNSdGsgPSBudWxsOyBwcm90ZWN0ZWQgJGFJZ25vcmVQdWJsaWNNZXRob2RzRm9yVmFsaWRhdGUgPSBhcnJheSgnZ2V0ZHQnLCAnX3JpMCcsICdsb2dpbicpOyBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7IHBhcmVudDo6X19jb25zdHJ1Y3QoKTsgaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywgQVBJX1RJTUVfTElNSVQpOyBpZ25vcmVfdXNlcl9hYm9ydChUUlVFKTsgcmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb24oYXJyYXkoJiR0aGlzLCAnX19zaHV0ZG93bicpKTsgJHRoaXMtPmxvYWQtPm1vZGVsKCdhcGlfbW9kZWwnKTsgJHRoaXMtPmxvYWQtPmRyaXZlcignY2FjaGUnKTsgJHRoaXMtPmxvYWQtPmxpYnJhcnkoJ2Zvcm1fdmFsaWRhdGlvbicpOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfZXJyb3JfZGVsaW1pdGVycygnJywgJycpOyAkdGhpcy0+YUVycm9ycyA9IGFycmF5KCAnaW52YWxpZFJlcXVlc3RQb3N0JyA9PiAnRXJyb3I6IEludmFsaWQgcmVxdWVzdCBtZXRob2QhJyApOyAkdGhpcy0+YVNlY1BhcmFtcyA9IGFycmF5KCAnbWFjQWRkcmVzcycgPT4gYXJyYXkoJ25hbWUnPT4nX3NzJywnbGFiZWwnPT4nVVNBU0FTJywncnVsZXMnPT4ncmVnZXhfbWF0Y2hbL15bPzAtOWEtekEtWjpdKyQvXXxtYXhfbGVuZ3RoWzE3XScpLCAnZGV2aWNlVW5pSWQnID0+IGFycmF5KCduYW1lJz0+J19kJywnbGFiZWwnPT4nVVNERUUnLCdydWxlcyc9PidyZWdleF9tYXRjaFsvXls/MC05YS16QS1aLV0rJC9dfG1heF9sZW5ndGhbNTBdJyksICdhcGlTZWNLZXknID0+IGFycmF5KCduYW1lJz0+J19leScsJ2xhYmVsJz0+J1VTRUVXQUknLCdydWxlcyc9PidyZWdleF9tYXRjaFsvXlthLWYwLTldKyQvXXxtYXhfbGVuZ3RoWzQwXScpLCAnZGV2aWNlJyA9PiBhcnJheSgnbmFtZSc9PidfY2UnLCdsYWJlbCc9PidVU1NFQUVFJywncnVsZXMnPT4ncmVnZXhfbWF0Y2hbL14oZHxhfGkpJC9dfG1heF9sZW5ndGhbMV0nKSwgJ3JlcXVlc3RUb2tlbicgPT4gYXJyYXkoJ25hbWUnPT4nX3J0aycsJ2xhYmVsJz0+J1VTQVJFVEVFS0FZJywncnVsZXMnPT4ncmVnZXhfbWF0Y2hbL15bYS1mMC05XSskL118bWF4X2xlbmd0aFs0MF0nKSwgJ2Jyb3dzZXJJZCcgPT4gYXJyYXkoJ25hbWUnPT4nX2JzcmQnLCdsYWJlbCc9PidVU0JFRUFTQVJFREVFJyksICdpcHY0JyA9PiBhcnJheSgnbmFtZSc9PidfcHZmJywnbGFiZWwnPT4nVVNQRVZFRUFGRicpICk7ICR0aGlzLT5hVmFsaWRVc2VyQXBwcyA9IGFycmF5KCAnZCcsICdhJywgJ2knLCAndycgKTsgJHRoaXMtPmdldE1rdFR5cGVzKCk7ICR0aGlzLT5hVmFsaWRNa3RUeXBlcyA9IGpzb25fZGVjb2RlKCR0aGlzLT5jYWNoZS0+ZmlsZS0+Z2V0KCdta3RUeXBlcycpKTsgJHRoaXMtPmFVc2VyRGF0YSA9IGFycmF5KCk7ICR0aGlzLT5iVmFsaWRhdGlvblJlcSA9IHRydWU7ICR0aGlzLT5kYXRlVG9kYXkgPSBkYXRlKCdkL20veScpOyBpZiAoJHRoaXMtPmlucHV0LT5tZXRob2QoKSAhPSAncG9zdCcpIHsgcmVkaXJlY3QoYmFzZV91cmwoJ2Vycj9lcj0nLnVybGVuY29kZSgkdGhpcy0+YUVycm9yc1snaW52YWxpZFJlcXVlc3RQb3N0J10pKSk7IH0gJHRoaXMtPmFSdWxlcyA9IGFycmF5KCAncGFzcycgPT4gJ21pbl9sZW5ndGhbMV18bWF4X2xlbmd0aFsxNV18cmVnZXhfbWF0Y2hbL15bPzAtOWEtekEtWi1fIUAkKl4oKXt9K10rJC9dJywgJ2FjY291bnQnID0+ICdtaW5fbGVuZ3RoWzFdfG1heF9sZW5ndGhbMjBdfHJlZ2V4X21hdGNoWy9eWz8wLTlhLXpBLVotXSskL10nLCAndXNlckFwcCcgPT4gJ21heF9sZW5ndGhbMV18cmVnZXhfbWF0Y2hbL14oZHxhfGl8dykkL10nLCAndUlkJyA9PiAnbWluX2xlbmd0aFsxXXxtYXhfbGVuZ3RoWzIwXXxyZWdleF9tYXRjaFsvXls/MC05QS1aLV0rJC9dJywgJ21rdFR5cGUnID0+ICdtYXhfbGVuZ3RoWzVdfHJlZ2V4X21hdGNoWy9eKFJFR3xPREx8RlVUfFNJRnxDU0Z8Qk5CfExFVnxTUVJ8YWxsKSQvXScsICdzeW1ib2wnID0+ICdtYXhfbGVuZ3RoWzE1XXxyZWdleF9tYXRjaFsvXls/MC05YS16QS1aLV0rJC9dJywgJ21rdFN5bWJvbCcgPT4gJ21heF9sZW5ndGhbMTVdfHJlZ2V4X21hdGNoWy9eWz8wLTlhLXpBLVpfXSskL10nLCAnbWt0U3ltYm9scycgPT4gJ21heF9sZW5ndGhbMzAwXXxyZWdleF9tYXRjaFsvXls/MC05YS16QS1aXyxdKyQvXScsICdoT3JkU2lkZScgPT4gJ21heF9sZW5ndGhbMTBdfHJlZ2V4X21hdGNoWy9eKEJVWXxTRUxMfExCVVl8TFNFTEx8U0hPUlQgU0VMTCkkL10nLCAnaE9yZFNpZGVzJyA9PiAnbWF4X2xlbmd0aFszMF18cmVnZXhfbWF0Y2hbL15bP0EtWiwgXSskL10nLCAnaE9yZGVySWQnID0+ICdtYXhfbGVuZ3RoWzMwXXxhbHBoYV9udW1lcmljJywgJ3JlbWFya3MnID0+ICdtYXhfbGVuZ3RoWzUwXXxyZWdleF9tYXRjaFsvXls/MC05YS16QS1aLV8uIF0rJC9dJywgJ3Bvc1R5cGUnID0+ICdtYXhfbGVuZ3RoWzRdfHJlZ2V4X21hdGNoWy9eKE9QRU58Q0RDKSQvXScsICdwaW4nID0+ICdleGFjdF9sZW5ndGhbNF18bnVtZXJpYycsICdrZXlQcmVmJz0+J21heF9sZW5ndGhbMzBdfHJlZ2V4X21hdGNoWy9eWz8wLTlhLXpBLVpfLV0rJC9dJywgJ21vZGUnID0+ICdtYXhfbGVuZ3RoWzFdfHJlZ2V4X21hdGNoWy9eWz8wLTldKyQvXScsICd2b2wnID0+ICdtaW5fbGVuZ3RoWzFdfG1heF9sZW5ndGhbMjBdfHJlZ2V4X21hdGNoWy9eWz8wLTldKyQvXScsICdvcmRUeXBlJyA9PiAnbWluX2xlbmd0aFsxXXxtYXhfbGVuZ3RoWzFdfHJlZ2V4X21hdGNoWy9eKDJ8NHwxfEopJC9dJywgJ25hdHVyZUNvZGUnID0+ICdyZWdleF9tYXRjaFsvXihCVVl8U0VMTCkkL10nLCAncHJpY2UnID0+ICdtaW5fbGVuZ3RoWzFdfG1heF9sZW5ndGhbMTBdfHJlZ2V4X21hdGNoWy9eWz8wLTkuXSskL10nLCAnb3JkU2lkZScgPT4gJ21pbl9sZW5ndGhbMV18bWF4X2xlbmd0aFsxXXxyZWdleF9tYXRjaFsvXigxfDJ8NXw4fEcpJC9dJywgJ2RhdGUnID0+ICdyZWdleF9tYXRjaFsvXihbMC05XXsyfSkoLSkoWzAtOV17Mn0pKC0pKFswLTldezR9KSQvXScsICd0aW1lJyA9PiAncmVnZXhfbWF0Y2hbL14oWzAtOV17Mn0pKDopKFswLTldezJ9KSg6KShbMC05XXsyfSkkL10nLCAnaW5kZXgnID0+ICdtYXhfbGVuZ3RoWzEwXXxyZWdleF9tYXRjaFsvXihLU0UxMDB8S1NFMzB8QUxMU0hSfEtNSTMwfEJLVGl8T0dUaSkkL10nLCApOyAkdGhpcy0+YUFwaUNvbnN0cyA9ICR0aGlzLT5jb25maWctPml0ZW0oJ2FBcGlDb25zdHMnKTsgfSBwdWJsaWMgZnVuY3Rpb24gcm91dGVIYW5kbGVyKCkgeyAkdGhpcy0+YmVuY2htYXJrLT5tYXJrKCdzdGFydCcpOyB0cnkgeyAkYVVyaVNlZ21lbnQgPSAkdGhpcy0+dXJpLT5zZWdtZW50X2FycmF5KCk7IGFycmF5X3NoaWZ0KCRhVXJpU2VnbWVudCk7IGlmIChpc3NldCgkYVVyaVNlZ21lbnRbMF0pICYmIGluX2FycmF5KCRhVXJpU2VnbWVudFswXSwgJHRoaXMtPmFWYWxpZFVzZXJBcHBzKSkgeyAkdGhpcy0+YVVzZXJEYXRhWydyZXFGcm9tJ10gPSAkYVVyaVNlZ21lbnRbMF07IGFycmF5X3NoaWZ0KCRhVXJpU2VnbWVudCk7IH0gJG1ldGhvZCA9IHN0cnRvbG93ZXIoJGFVcmlTZWdtZW50WzBdKTsgJGFWYWxpZFJlc1R5cGVzID0gYXJyYXkoJ2pzb24nLCAnYXJyYXknLCAnc3RyJyk7IGFycmF5X3NoaWZ0KCRhVXJpU2VnbWVudCk7IGlmIChpc3NldCgkYVVyaVNlZ21lbnRbY291bnQoJGFVcmlTZWdtZW50KS0xXSkgJiYgaW5fYXJyYXkoJGFVcmlTZWdtZW50W2NvdW50KCRhVXJpU2VnbWVudCktMV0sICRhVmFsaWRSZXNUeXBlcykpIHsgJHRoaXMtPnJlc1R5cGUgPSAkYVVyaVNlZ21lbnRbY291bnQoJGFVcmlTZWdtZW50KS0xXTsgYXJyYXlfcG9wKCRhVXJpU2VnbWVudCk7IH0gaWYgKCR0aGlzLT5hcHAtPmF1dGgoKSAmJiB0aW1lKCkgPiAoJHRoaXMtPnNlc3Npb24tPmxhc3RBY2Nlc3MrJHRoaXMtPmNvbmZpZy0+aXRlbSgnc2Vzc2lvblZhbGlkaXR5JykpKSB7ICR0aGlzLT5hcHAtPndyaXRlVXNlckxvZ3MoYXJyYXkoICdsb2dzJyA9PiBhcnJheSgnbXNnJz0+ICdzZXNzaW9uIFRpbWVvdXQhJykgKSk7ICR0aGlzLT5sb2dvdXQoYXJyYXkoMykpOyAkdGhpcy0+c1N0YXRlID0gMzsgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3I6IFNlc3Npb24gVGltZW91dCEnKTsgfSAkdGhpcy0+c2Vzc2lvbi0+bGFzdEFjY2VzcyA9IHRpbWUoKTsgc3dpdGNoICgkbWV0aG9kKSB7IGNhc2UgQVNTUkhORExSOiAkbWV0aG9kID0gJ3NlbGZzZXJ2ZXJyZXFoYW5kbGVyJzsgYnJlYWs7IGNhc2UgJ3NlbGZzZXJ2ZXJyZXFoYW5kbGVyJzogdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3IgaW52YWxpZCBSb3V0ZSEnKTsgYnJlYWs7IH0gaWYgKCRtZXRob2QgPT09IF9fRlVOQ1RJT05fXyB8fCAhbWV0aG9kX2V4aXN0cygkdGhpcyAsICRtZXRob2QpKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yIGludmFsaWQgUm91dGUhJyk7IH0gJHRoaXMtPmFNZXRob2RbJ3Zpc2liaWxpdHknXSA9ICR0aGlzLT5nZXRWaXNpYmlsaXR5KCRtZXRob2QpOyBzd2l0Y2ggKCR0aGlzLT5hTWV0aG9kWyd2aXNpYmlsaXR5J10pIHsgY2FzZSAncHVibGljJzogYnJlYWs7IGNhc2UgJ3ByaXZhdGUnOiAkdGhpcy0+YUxnc1snZW5hYmxlJ10gPSB0cnVlOyAkdGhpcy0+c1J0ayA9ICR0aGlzLT5fclRva2VuKGFycmF5KCd0eXBlJz0+J2dSdGsnKSk7ICRhUnQgPSAkdGhpcy0+YVNlY1BhcmFtc1sncmVxdWVzdFRva2VuJ107IGlmICghJHRoaXMtPmFwcC0+YXV0aCgpKSB7ICR0aGlzLT5zU3RhdGUgPSAyOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogTG9naW4gcmVxdWlyZWQgdG8gYWNjZXNzIHRoaXMgcm91dGUhJyk7IH1lbHNlaWYoISR0aGlzLT5pbnB1dC0+Z2V0X3JlcXVlc3RfaGVhZGVyKCRhUnRbJ25hbWUnXSkpeyAkdGhpcy0+c1N0YXRlID0gNDsgJHRoaXMtPnNSdGsgPSBudWxsOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogJy4kYVJ0WydsYWJlbCddLicgaXMgcmVxdWlyZWQuJyk7IH0gJHRoaXMtPl9yVG9rZW4oYXJyYXkoJ3ZlcmlmeSc9PiR0aGlzLT5pbnB1dC0+Z2V0X3JlcXVlc3RfaGVhZGVyKCRhUnRbJ25hbWUnXSkpKTsgaWYgKCR0aGlzLT5zZXNzaW9uLT5wcm9tcHRJZCAmJiAkbWV0aG9kICE9ICdsb2dvdXQnKSB7IHN3aXRjaCAoJHRoaXMtPnNlc3Npb24tPnByb21wdElkKSB7IGNhc2UgMTogYnJlYWs7IGNhc2UgMjogaWYgKCRtZXRob2QgIT0gJ2NoYW5nZXBhc3MnKSB7ICR0aGlzLT5zU3RhdGUgPSA2OyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogWW91IGNhbm5vdCBjb250aW51ZSB3aXRoIGRlZmF1bHQgcGFzc3dvcmQgcGxlYXNlIHVwZGF0ZS4nKTsgfSBicmVhazsgY2FzZSAzOiBicmVhazsgY2FzZSA0OiBpZiAoJG1ldGhvZCA9PSAncHVzaG9yZGVyJyB8fCAkbWV0aG9kID09ICdjYW5jZWxvcmRlcicpIHsgJHRoaXMtPnNTdGF0ZSA9IDc7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBZb3UgbXVzdCBuZWVkIHRvIHNldCB5b3VyIHBpbi4nKTsgfSBicmVhazsgfSB9IGJyZWFrOyBjYXNlICdwcm90ZWN0ZWQnOiB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogQ2Fubm90IGFjY2VzcyB0aGlzIHJvdXRlIScpOyBicmVhazsgfSAkdGhpcy0+YU1ldGhvZFsnbmFtZSddID0gJG1ldGhvZDsgJHJlcyA9IGNhbGxfdXNlcl9mdW5jKGFycmF5KCR0aGlzLCAkbWV0aG9kKSwgJGFVcmlTZWdtZW50KTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRyZXMgPSBhcnJheSgnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkpOyB9ICR0aGlzLT5fX3JlcygkcmVzKTsgfSBwdWJsaWMgZnVuY3Rpb24gX3JpMCgkYSkgeyB0cnkgeyAkdGhpcy0+YUxnc1snZW5hYmxlJ10gPSB0cnVlOyAkbWFjID0gJHRoaXMtPmlucHV0LT5nZXRfcmVxdWVzdF9oZWFkZXIoJHRoaXMtPmFTZWNQYXJhbXNbJ21hY0FkZHJlc3MnXVsnbmFtZSddKTsgJGRldmljZSA9ICR0aGlzLT5pbnB1dC0+Z2V0X3JlcXVlc3RfaGVhZGVyKCR0aGlzLT5hU2VjUGFyYW1zWydkZXZpY2UnXVsnbmFtZSddKTsgJGRldmljZVVuaUlkID0gJHRoaXMtPmlucHV0LT5nZXRfcmVxdWVzdF9oZWFkZXIoJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXSk7ICRtYWMgPSAkdGhpcy0+ZGVjKCRtYWMpOyAkZGV2aWNlID0gJHRoaXMtPmRlYygkZGV2aWNlKTsgJGRldmljZVVuaUlkID0gJHRoaXMtPmRlYygkZGV2aWNlVW5pSWQpOyBzd2l0Y2ggKCRkZXZpY2UpIHsgY2FzZSAnZCc6ICRtYWNBZGRyZXNzUnVsZXMgPSAncmVxdWlyZWR8cmVnZXhfbWF0Y2hbL15bPzAtOWEtekEtWi0sXSskL118bWF4X2xlbmd0aFsnLigxOCo2KS4nXSc7ICRfUE9TVFskdGhpcy0+YVNlY1BhcmFtc1snbWFjQWRkcmVzcyddWyduYW1lJ11dID0gJG1hYzsgJF9QT1NUWyR0aGlzLT5hU2VjUGFyYW1zWydkZXZpY2UnXVsnbmFtZSddXSA9ICRkZXZpY2U7ICRfUE9TVFskdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlVW5pSWQnXVsnbmFtZSddXSA9ICRkZXZpY2VVbmlJZDsgYnJlYWs7IGNhc2UgJ2EnOiAkbWFjQWRkcmVzc1J1bGVzID0gJ3JlcXVpcmVkfCcuJHRoaXMtPmFTZWNQYXJhbXNbJ21hY0FkZHJlc3MnXVsncnVsZXMnXTsgJF9QT1NUWyR0aGlzLT5hU2VjUGFyYW1zWydtYWNBZGRyZXNzJ11bJ25hbWUnXV0gPSAkbWFjOyAkX1BPU1RbJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZSddWyduYW1lJ11dID0gJGRldmljZTsgJF9QT1NUWyR0aGlzLT5hU2VjUGFyYW1zWydkZXZpY2VVbmlJZCddWyduYW1lJ11dID0gJGRldmljZVVuaUlkOyBicmVhazsgY2FzZSAnaSc6ICRtYWNBZGRyZXNzUnVsZXMgPSAkdGhpcy0+YVNlY1BhcmFtc1snbWFjQWRkcmVzcyddWydydWxlcyddOyAkX1BPU1RbJHRoaXMtPmFTZWNQYXJhbXNbJ21hY0FkZHJlc3MnXVsnbmFtZSddXSA9ICRtYWM7ICRfUE9TVFskdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlJ11bJ25hbWUnXV0gPSAkZGV2aWNlOyAkX1BPU1RbJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXV0gPSAkZGV2aWNlVW5pSWQ7IGJyZWFrOyBkZWZhdWx0OiB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogSW52YWxpZCByZXF1ZXN0LicpOyBicmVhazsgfSAkYVBvc3QgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsgJGFDb25mID0gYXJyYXkoIGFycmF5KCAnZmllbGQnID0+ICR0aGlzLT5hU2VjUGFyYW1zWydtYWNBZGRyZXNzJ11bJ25hbWUnXSwgJ2xhYmVsJyA9PiAkdGhpcy0+YVNlY1BhcmFtc1snbWFjQWRkcmVzcyddWydsYWJlbCddLCAncnVsZXMnID0+ICRtYWNBZGRyZXNzUnVsZXMgKSwgYXJyYXkoICdmaWVsZCcgPT4gJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXSwgJ2xhYmVsJyA9PiAkdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlVW5pSWQnXVsnbGFiZWwnXSwgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlVW5pSWQnXVsncnVsZXMnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAkdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlJ11bJ25hbWUnXSwgJ2xhYmVsJyA9PiAkdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlJ11bJ2xhYmVsJ10sICdydWxlcycgPT4gJ3JlcXVpcmVkfCcuJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZSddWydydWxlcyddICkgKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFwaVNlY0tleSA9IHJhbmQoMTAwLCA5OTkpLmhhc2goJ21kNScsICRtYWMubWljcm90aW1lKCkpLnJhbmQoMTAwLCA5OTkpOyAkYXIgPSBhcnJheSggJ2FJJyA9PiBhcnJheSggJGFQb3N0WyR0aGlzLT5hU2VjUGFyYW1zWydkZXZpY2VVbmlJZCddWyduYW1lJ11dLCAkYVBvc3RbJHRoaXMtPmFTZWNQYXJhbXNbJ21hY0FkZHJlc3MnXVsnbmFtZSddXSwgJGFwaVNlY0tleSwgJGFQb3N0WyR0aGlzLT5hU2VjUGFyYW1zWydkZXZpY2UnXVsnbmFtZSddXSApLCAnYU8nID0+IGFycmF5KCAnZXInID0+IGFycmF5KCdsZW4nID0+IDEwMDApICksICdwcm9jZWR1cmVfbmFtZScgPT4gJ3NldF9tYXJrZXRfaW5mbycgKTsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVsncmVzJ11bJyRhcGlTZWNLZXknXSA9ICRhcGlTZWNLZXk7ICRvUmVzUHJjID0gJHRoaXMtPmhlbHBlcl9tb2RlbC0+Y2FsbFN0b3JlZFByb2NlZHVyZSgkYXIpOyBpZighZW1wdHkoJG9SZXNQcmNbJ2VyJ10pKXsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkb1Jlc1ByY1snZXInXSk7IH0gJGFSZXNbJ3N1Y2Nlc3MnXSA9IHRydWU7ICRhUmVzWydtc2cnXSA9ICdTdWNjZXNzOiBXZWxjb21lIHRvIFRyYWRlbGlua3MuJzsgaGVhZGVyKCR0aGlzLT5hU2VjUGFyYW1zWydhcGlTZWNLZXknXVsnbmFtZSddLic6ICcuJGFwaVNlY0tleSk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpLCAnc3VjY2VzcycgPT4gZmFsc2UgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHVibGljIGZ1bmN0aW9uIGxvZ2luKCRhKSB7IHRyeXsgaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywgNSk7ICR0aGlzLT5hTGdzWydlbmFibGUnXSA9IHRydWU7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkdGhpcy0+YUxnc1snbG9ncyddWydwb3N0J10gPSAkYVBvc3Q7ICR0aGlzLT5hTGdzWydsb2dzJ11bJ3Bvc3QnXVsndVBhc3MnXSA9ICcqKipzZWNyZXQqKionOyBpZiAoIWlzc2V0KCRhUG9zdFsndXNlckFwcCddKSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogVXNlciBhcHAgcmVxdWlyZWQuJyk7IH1lbHNlaWYgKCFpbl9hcnJheSgkYVBvc3RbJ3VzZXJBcHAnXSwgJHRoaXMtPmFWYWxpZFVzZXJBcHBzKSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogSW52YWxpZCBVc2VyIEFwcCcpOyB9ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ3VJZHxyZXF1aXJlZCcsICd1UGFzc3xyZXF1aXJlZCcgKSk7ICRhUG9zdFsndUlkJ10gPSBzdHJ0b3VwcGVyKCRhUG9zdFsndUlkJ10pOyBzd2l0Y2ggKCRhUG9zdFsndXNlckFwcCddKSB7IGNhc2UgJ3cnOiAkdGhpcy0+YUxnc1snZmlsZSddID0gJHRoaXMtPnNlc3Npb24tPnskdGhpcy0+YVNlY1BhcmFtc1snYnJvd3NlcklkJ11bJ25hbWUnXX07IGlmICghJHRoaXMtPnNlc3Npb24tPnskdGhpcy0+YVNlY1BhcmFtc1snYnJvd3NlcklkJ11bJ25hbWUnXX0pIHsgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3I6IFVua25vd24gZXJyb3IuJyk7IH0gaWYgKCFpc3NldCgkYVBvc3RbJ3JlY2FwdGNoYSddKSAmJiAhaXNzZXQoJGFQb3N0WydpdGNhcHRjaGEnXSkpIHsgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3I6IENhcHRjaGEgcmVxdWlyZWQuJyk7IH1lbHNlaWYgKGlzc2V0KCRhUG9zdFsncmVjYXB0Y2hhJ10pKSB7ICRwb3N0X2RhdGEgPSBodHRwX2J1aWxkX3F1ZXJ5KCBhcnJheSggJ3NlY3JldCcgPT4gR1JfU0VDX0tFWSwgJ3Jlc3BvbnNlJyA9PiAkYVBvc3RbJ3JlY2FwdGNoYSddLCAncmVtb3RlaXAnID0+ICRfU0VSVkVSWydSRU1PVEVfQUREUiddICkgKTsgJG9wdHMgPSBhcnJheSggJ2h0dHAnID0+IGFycmF5KCAnbWV0aG9kJyA9PiAnUE9TVCcsICdoZWFkZXInID0+ICdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsICdjb250ZW50JyA9PiAkcG9zdF9kYXRhICksICdzc2wnPT5hcnJheSggJ3ZlcmlmeV9wZWVyJz0+ZmFsc2UsICd2ZXJpZnlfcGVlcl9uYW1lJz0+ZmFsc2UsICkgKTsgJGNvbnRleHQgPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoJG9wdHMpOyAkcmVzcG9uc2UgPSBmaWxlX2dldF9jb250ZW50cygnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvYXBpL3NpdGV2ZXJpZnknLCBmYWxzZSwgJGNvbnRleHQpOyAkcmVzdWx0ID0ganNvbl9kZWNvZGUoJHJlc3BvbnNlKTsgaWYgKCEkcmVzdWx0LT5zdWNjZXNzKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgQ2FwdGNoYScpOyB9IH1lbHNlaWYgKGlzc2V0KCRhUG9zdFsnaXRjYXB0Y2hhJ10pKSB7ICRhQ2FwdGNoYSA9ICR0aGlzLT5zZXNzaW9uLT5hQ2FwdGNoYTsgaWYoJGFDYXB0Y2hhWyd0ZXh0J10gIT0gJGFQb3N0WydpdGNhcHRjaGEnXSl7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBJbnZhbGlkIGNhcHRjaGEhJyk7IH1lbHNlaWYoJGFDYXB0Y2hhWydleHAnXSA8IHRpbWUoKSl7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBDYXB0Y2hhIGhhcyBiZWVuIEV4cGlyZWQhJyk7IH0gfSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYUkgPSBhcnJheSggJGFQb3N0Wyd1SWQnXSwgJGFQb3N0Wyd1UGFzcyddLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAndycsIE5VTEwsIE5VTEwsIDAgKTsgJGFMc25yUG9ydHMgPSAkdGhpcy0+Y29uZmlnLT5pdGVtKCdhTHNuclBvcnRzJyk7IGJyZWFrOyBjYXNlICdkJzogJG1hYyA9ICR0aGlzLT5pbnB1dC0+Z2V0X3JlcXVlc3RfaGVhZGVyKCR0aGlzLT5hU2VjUGFyYW1zWydtYWNBZGRyZXNzJ11bJ25hbWUnXSk7ICRkZXZpY2VVbmlJZCA9ICR0aGlzLT5pbnB1dC0+Z2V0X3JlcXVlc3RfaGVhZGVyKCR0aGlzLT5hU2VjUGFyYW1zWydkZXZpY2VVbmlJZCddWyduYW1lJ10pOyAkYXBpU2VjS2V5ID0gJHRoaXMtPmlucHV0LT5nZXRfcmVxdWVzdF9oZWFkZXIoJHRoaXMtPmFTZWNQYXJhbXNbJ2FwaVNlY0tleSddWyduYW1lJ10pOyBpZiAoISRtYWMgfHwgISRkZXZpY2VVbmlJZCB8fCAhJGFwaVNlY0tleSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogSW52YWxpZCByZXF1ZXN0LicpOyB9ICRtYWMgPSAkdGhpcy0+ZGVjKCRtYWMpOyAkZGV2aWNlVW5pSWQgPSAkdGhpcy0+ZGVjKCRkZXZpY2VVbmlJZCk7ICRfUE9TVFskdGhpcy0+YVNlY1BhcmFtc1snbWFjQWRkcmVzcyddWyduYW1lJ11dID0gJG1hYzsgJF9QT1NUWyR0aGlzLT5hU2VjUGFyYW1zWydkZXZpY2VVbmlJZCddWyduYW1lJ11dID0gJGRldmljZVVuaUlkOyAkX1BPU1RbJHRoaXMtPmFTZWNQYXJhbXNbJ2FwaVNlY0tleSddWyduYW1lJ11dID0gJGFwaVNlY0tleTsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJHRoaXMtPmFTZWNQYXJhbXNbJ21hY0FkZHJlc3MnXVsnbmFtZSddLCAnbGFiZWwnID0+ICR0aGlzLT5hU2VjUGFyYW1zWydtYWNBZGRyZXNzJ11bJ2xhYmVsJ10sICdydWxlcycgPT4gJ3JlcXVpcmVkfHJlZ2V4X21hdGNoWy9eWz8wLTlhLXpBLVotLF0rJC9dfG1heF9sZW5ndGhbJy4oMTgqNikuJ10nICk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXSwgJ2xhYmVsJyA9PiAkdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlVW5pSWQnXVsnbGFiZWwnXSwgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlVW5pSWQnXVsncnVsZXMnXSApOyAkYUNvbmZbXSA9IGFycmF5KCAnZmllbGQnID0+ICR0aGlzLT5hU2VjUGFyYW1zWydhcGlTZWNLZXknXVsnbmFtZSddLCAnbGFiZWwnID0+ICR0aGlzLT5hU2VjUGFyYW1zWydhcGlTZWNLZXknXVsnbGFiZWwnXSwgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVNlY1BhcmFtc1snYXBpU2VjS2V5J11bJ3J1bGVzJ10gKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFJID0gYXJyYXkoICRhUG9zdFsndUlkJ10sICRhUG9zdFsndVBhc3MnXSwgJGFQb3N0WyR0aGlzLT5hU2VjUGFyYW1zWydtYWNBZGRyZXNzJ11bJ25hbWUnXV0sIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICRhUG9zdFsndXNlckFwcCddLCAkYVBvc3RbJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXV0sICRhUG9zdFskdGhpcy0+YVNlY1BhcmFtc1snYXBpU2VjS2V5J11bJ25hbWUnXV0sIDAgKTsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVsncG9zdCddWyckbWFjJ10gPSAkbWFjOyAkdGhpcy0+YUxnc1snbG9ncyddWydwb3N0J11bJyRhcGlTZWNLZXknXSA9ICRhcGlTZWNLZXk7ICRhTHNuclBvcnRzID0gYXJyYXlfbWFwKGZ1bmN0aW9uKCRrLCAkdil7IHJldHVybiAkay4nfCcuJHY7IH0sIGFycmF5X2tleXMoJHRoaXMtPmNvbmZpZy0+aXRlbSgnYUxzbnJQb3J0cycpKSwgYXJyYXlfdmFsdWVzKCR0aGlzLT5jb25maWctPml0ZW0oJ2FMc25yUG9ydHMnKSkpOyBicmVhazsgY2FzZSAnYSc6IGNhc2UgJ2knOiAkbWFjID0gJHRoaXMtPmlucHV0LT5nZXRfcmVxdWVzdF9oZWFkZXIoJHRoaXMtPmFTZWNQYXJhbXNbJ21hY0FkZHJlc3MnXVsnbmFtZSddKTsgJGRldmljZVVuaUlkID0gJHRoaXMtPmlucHV0LT5nZXRfcmVxdWVzdF9oZWFkZXIoJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXSk7ICRhcGlTZWNLZXkgPSAkdGhpcy0+aW5wdXQtPmdldF9yZXF1ZXN0X2hlYWRlcigkdGhpcy0+YVNlY1BhcmFtc1snYXBpU2VjS2V5J11bJ25hbWUnXSk7IGlmICghJG1hYyB8fCAhJGRldmljZVVuaUlkIHx8ICEkYXBpU2VjS2V5KSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBJbnZhbGlkIHJlcXVlc3QuJyk7IH0gJG1hYyA9ICR0aGlzLT5kZWMoJG1hYyk7ICRkZXZpY2VVbmlJZCA9ICR0aGlzLT5kZWMoJGRldmljZVVuaUlkKTsgJF9QT1NUWyR0aGlzLT5hU2VjUGFyYW1zWydtYWNBZGRyZXNzJ11bJ25hbWUnXV0gPSAkbWFjOyAkX1BPU1RbJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXV0gPSAkZGV2aWNlVW5pSWQ7ICRfUE9TVFskdGhpcy0+YVNlY1BhcmFtc1snYXBpU2VjS2V5J11bJ25hbWUnXV0gPSAkYXBpU2VjS2V5OyAkYVBvc3QgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAkdGhpcy0+YVNlY1BhcmFtc1snbWFjQWRkcmVzcyddWyduYW1lJ10sICdsYWJlbCcgPT4gJHRoaXMtPmFTZWNQYXJhbXNbJ21hY0FkZHJlc3MnXVsnbGFiZWwnXSwgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVNlY1BhcmFtc1snbWFjQWRkcmVzcyddWydydWxlcyddICk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXSwgJ2xhYmVsJyA9PiAkdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlVW5pSWQnXVsnbGFiZWwnXSwgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVNlY1BhcmFtc1snZGV2aWNlVW5pSWQnXVsncnVsZXMnXSApOyAkYUNvbmZbXSA9IGFycmF5KCAnZmllbGQnID0+ICR0aGlzLT5hU2VjUGFyYW1zWydhcGlTZWNLZXknXVsnbmFtZSddLCAnbGFiZWwnID0+ICR0aGlzLT5hU2VjUGFyYW1zWydhcGlTZWNLZXknXVsnbGFiZWwnXSwgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVNlY1BhcmFtc1snYXBpU2VjS2V5J11bJ3J1bGVzJ10gKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFJID0gYXJyYXkoICRhUG9zdFsndUlkJ10sICRhUG9zdFsndVBhc3MnXSwgJGFQb3N0WyR0aGlzLT5hU2VjUGFyYW1zWydtYWNBZGRyZXNzJ11bJ25hbWUnXV0sIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICRhUG9zdFsndXNlckFwcCddLCAkYVBvc3RbJHRoaXMtPmFTZWNQYXJhbXNbJ2RldmljZVVuaUlkJ11bJ25hbWUnXV0sICRhUG9zdFskdGhpcy0+YVNlY1BhcmFtc1snYXBpU2VjS2V5J11bJ25hbWUnXV0sIDAgKTsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVsncG9zdCddWyckbWFjJ10gPSAkbWFjOyAkdGhpcy0+YUxnc1snbG9ncyddWydwb3N0J11bJyRhcGlTZWNLZXknXSA9ICRhcGlTZWNLZXk7ICRhTHNuclBvcnRzID0gYXJyYXlfbWFwKGZ1bmN0aW9uKCRrLCAkdil7IHJldHVybiAkay4nfCcuJHY7IH0sIGFycmF5X2tleXMoJHRoaXMtPmNvbmZpZy0+aXRlbSgnYUxzbnJQb3J0cycpKSwgYXJyYXlfdmFsdWVzKCR0aGlzLT5jb25maWctPml0ZW0oJ2FMc25yUG9ydHMnKSkpOyBicmVhazsgfSAkYXIgPSBhcnJheSggJ2FJJyA9PiAkYUksICdhTycgPT4gYXJyYXkoICd2ZGVtb19sb2dpbicgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCksICd2dXNyX3R5cGUnID0+IGFycmF5KCdsZW4nID0+IDEwMDApLCAndnVzcl9tb2JpbGVfbm8nPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCksICd2dXNyX2VtYWlsJyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSwgJ2xvZ2luX3VuaXF1ZV9pZCcgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCksICdjbGllbnRfbmFtZScgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCksICdzZXFfbm8nID0+IGFycmF5KCdsZW4nID0+IDEwMDApLCAnY2xpZW50X2NvZGUnID0+IGFycmF5KCdsZW4nID0+IDEwMDApLCAndmVycl90ZXh0JyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSwgJ21rdF9zdGF0dXMnID0+IGFycmF5KCdsZW4nID0+IDEwMDApLCAnc3RhdHVzX2lkJyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSwgJ3BfcHJvbXB0X2lkJyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSwgJ3BfcHJvbXB0X21zZycgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCkgKSwgJ3Byb2NlZHVyZV9uYW1lJyA9PiAndXNlcl9sb2dpbicgKTsgJG9SZXNQcmMgPSAkdGhpcy0+aGVscGVyX21vZGVsLT5jYWxsU3RvcmVkUHJvY2VkdXJlKCRhcik7IGlmKCRvUmVzUHJjWyd2ZXJyX3RleHQnXSAhPT0gbnVsbCl7IHN3aXRjaCAoJG9SZXNQcmNbJ3N0YXR1c19pZCddKSB7IGNhc2UgJ1AnOiAkdGhpcy0+YUxnc1snbG9ncyddWydwb3N0J11bJ3VQYXNzJ10gPSAkYVBvc3RbJ3VQYXNzJ107IGJyZWFrOyB9IHRocm93IG5ldyBFeGNlcHRpb24oJG9SZXNQcmNbJ3ZlcnJfdGV4dCddKTsgfSAkdXNlclNlc3Npb24gPSBhcnJheSggJ2lzTG9nZ2VkSW4nPT4gdHJ1ZSwgJ3VzZXJJZCcgPT4gJGFQb3N0Wyd1SWQnXSwgJ3VzZXJVbmlxdWVJZCcgPT4gJG9SZXNQcmNbJ2xvZ2luX3VuaXF1ZV9pZCddLCAnc2VxTm8nID0+ICRvUmVzUHJjWydzZXFfbm8nXSwgJ3VzZXJUeXBlJyA9PiAkb1Jlc1ByY1sndnVzcl90eXBlJ10sICd1c2VyQXBwJyA9PiAkYVBvc3RbJ3VzZXJBcHAnXSwgJ3N0YXR1c0lkJyA9PiAkb1Jlc1ByY1snc3RhdHVzX2lkJ10sICdwcm9tcHRJZCcgPT4gJG9SZXNQcmNbJ3BfcHJvbXB0X2lkJ10sICdwcm9tcHRNc2cnID0+ICRvUmVzUHJjWydwX3Byb21wdF9tc2cnXSwgJ2FDbGllbnRzJyA9PiAoKCRvUmVzUHJjWydjbGllbnRfY29kZSddKSA/IGFycmF5KCRvUmVzUHJjWydjbGllbnRfY29kZSddKSA6IG51bGwgKSwgJ2FNa3RUeXBlcycgPT4gJHRoaXMtPmdldE1rdFR5cGVzKClbJ2FEYXRhJ10gKTsgJHRoaXMtPnNlc3Npb24tPnNldF91c2VyZGF0YSgkdXNlclNlc3Npb24pOyAkdXNlclNlc3Npb25bJ21rdFN0YXQnXSA9ICRvUmVzUHJjWydta3Rfc3RhdHVzJ107ICR1c2VyU2Vzc2lvblsncGluZ1NlYyddID0gUElOR19TRUM7ICR1c2VyU2Vzc2lvblsndGltZUxpbWl0J10gPSAoQVBJX1RJTUVfTElNSVQgKyAxMCk7ICR1c2VyU2Vzc2lvblsnYUxzbnJQb3J0cyddID0gJGFMc25yUG9ydHM7ICR1c2VyU2Vzc2lvblsnc29ja2V0U2VydmVyQWRkciddID0gU09DS0VUX1NFUlZFUl9BRERSOyAkdXNlclNlc3Npb25bJ3Nlc3Npb25WYWxpZGl0eSddID0gJHRoaXMtPmNvbmZpZy0+aXRlbSgnc2Vzc2lvblZhbGlkaXR5Jyk7IHVuc2V0KCR1c2VyU2Vzc2lvblsnaXNMb2dnZWRJbiddKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJHVzZXJTZXNzaW9uICk7IGhlYWRlcigkdGhpcy0+Y29uZmlnLT5pdGVtKCdzZXNzX2Nvb2tpZV9uYW1lJykuJzogJy5zZXNzaW9uX2lkKCkpOyBoZWFkZXIoJHRoaXMtPmFTZWNQYXJhbXNbJ3JlcXVlc3RUb2tlbiddWyduYW1lJ10uJzogJy4kdGhpcy0+X3JUb2tlbigpKTsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVsndG9rZW5JZCddID0gc2Vzc2lvbl9pZCgpOyBpZiAoJGFQb3N0Wyd1c2VyQXBwJ10gPT0gJ3cnKSB7ICR0aGlzLT5hTGdzWydmaWxlJ10gPSBudWxsOyAkdGhpcy0+YUxnc1snbG9ncyddWydvT2xkTG9ncyddID0gJHRoaXMtPmFwcC0+Z2V0TG9ncyhhcnJheSggJ2ZpbGUnID0+ICR0aGlzLT5zZXNzaW9uLT57JHRoaXMtPmFTZWNQYXJhbXNbJ2Jyb3dzZXJJZCddWyduYW1lJ119ICkpOyAkdGhpcy0+YXBwLT5yZW1vdmVMb2dGaWxlKGFycmF5KCAnZmlsZScgPT4gJHRoaXMtPnNlc3Npb24tPnskdGhpcy0+YVNlY1BhcmFtc1snYnJvd3NlcklkJ11bJ25hbWUnXX0gKSk7IH0gfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCksICdzdWNjZXNzJyA9PiBmYWxzZSApOyB9IHJldHVybiAkYVJlczsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0RFQoJGEpIHsgaWYgKCRzWFRyID0gJHRoaXMtPmlucHV0LT5nZXRfcmVxdWVzdF9oZWFkZXIoJ1gtVFInKSkgeyAkYVhUciA9IHByZWdfc3BsaXQoJy9bYS16QS1aXSsvJywgJHNYVHIpOyAkaXB2NCA9IGltcGxvZGUoJy4nLCBwcmVnX3NwbGl0KCcvW2EtekEtWl0rLycsIHN1YnN0cigkc1hUciwgc3RybGVuKCRhWFRyWzBdKSsxLCAkYVhUclswXSkpKTsgJGJyb3dzZXJJZCA9IHByZWdfcmVwbGFjZSgnL1thLXpBLVpdKy8nLCAnJywgc3Vic3RyKCRzWFRyLCBzdHJsZW4oJGFYVHJbMF0pKzErJGFYVHJbMF0pKTsgJHRoaXMtPnNlc3Npb24tPnNldF91c2VyZGF0YShhcnJheSggJHRoaXMtPmFTZWNQYXJhbXNbJ2Jyb3dzZXJJZCddWyduYW1lJ10gPT4gJGJyb3dzZXJJZCwgJHRoaXMtPmFTZWNQYXJhbXNbJ2lwdjQnXVsnbmFtZSddID0+ICRpcHY0LCAndXNlckFwcCcgPT4gJ3cnICkpOyBpZiAoISR0aGlzLT5hcHAtPmF1dGgoKSkgeyAkdGhpcy0+YUxnc1snZW5hYmxlJ10gPSB0cnVlOyAkdGhpcy0+YUxnc1snZmlsZSddID0gJGJyb3dzZXJJZDsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVskdGhpcy0+YVNlY1BhcmFtc1snaXB2NCddWyduYW1lJ11dID0gJGlwdjQ7ICR0aGlzLT5hTGdzWydsb2dzJ11bJHRoaXMtPmFTZWNQYXJhbXNbJ2Jyb3dzZXJJZCddWyduYW1lJ11dID0gJGJyb3dzZXJJZDsgfSB9IHJldHVybiBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YSc9PiBhcnJheSggJ1knID0+IGRhdGUoJ1knKSwgJ3knID0+IGRhdGUoJ3knKSwgJ20nID0+IGRhdGUoJ20nKSwgJ2QnID0+IGRhdGUoJ2QnKSwgJ2gnID0+IGRhdGUoJ0gnKSwgJ21pJyA9PiBkYXRlKCdpJyksICdzJyA9PiBkYXRlKCdzJyksICd0aW1lJyA9PiB0aW1lKCkgKSApOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRTeW1ib2xMaXN0KCRhKSB7IHRyeSB7ICR0aGlzLT5pbmMoJGEpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkdGhpcy0+YXBpX21vZGVsLT5nZXRTeW1ib2xMaXN0KCRhKSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRUb3BTeW1ib2xzKCRhKSB7IHRyeSB7ICR0aGlzLT5pbmMoJGEpOyAkYVBvc3QgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsgJGFDb25mID0gYXJyYXkoIGFycmF5KCAnZmllbGQnID0+ICdzdScsICdsYWJlbCcgPT4gJ1N5bWJvbCBVdGlsaXR5JywgJ3J1bGVzJyA9PiAncmVnZXhfbWF0Y2hbL14odHJ1ZXwxKSQvXScgKSApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVJlc1F1ZXJ5ID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0VG9wU3ltYm9scygkYSk7ICRzdSA9ICRhUmVzUXVlcnlbJ3N1J107IHVuc2V0KCRhUmVzUXVlcnlbJ3N1J10pOyBpZiAoaXNzZXQoJGFQb3N0WydzdSddKSkgeyAkdGhpcy0+bW5nU3ltYm9scyhhcnJheSgnaW5zZXJ0JyA9PiAkc3UpKTsgfSAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkYVJlc1F1ZXJ5ICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHVibGljIGZ1bmN0aW9uIGdldEZlZWRCeU1rdFN5bSgkYSkgeyB0cnkgeyAkdGhpcy0+aW5jKCRhKTsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhUG9zdCA9IGFycmF5X21lcmdlKCRhUG9zdCwgJGEpOyAkaW52YWxpZFBhcmFtcyA9IHRydWU7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAnbWl4JywgJ2xhYmVsJyA9PiAnTWl4JywgJ3J1bGVzJyA9PiAoaXNzZXQoJGFQb3N0WydtaXgnXSk/J3JlcXVpcmVkfCc6JycpLidtaW5fbGVuZ3RoWzVdfG1heF9sZW5ndGhbMzAwXXxyZWdleF9tYXRjaFsvXls/MC05YS16QS1aLV8sXSskL10nICksIGFycmF5KCAnZmllbGQnID0+ICdzdScsICdsYWJlbCcgPT4gJ1N5bWJvbCBVdGlsaXR5JywgJ3J1bGVzJyA9PiAncmVnZXhfbWF0Y2hbL14odHJ1ZXwxKSQvXScgKSApOyBmb3JlYWNoICgkdGhpcy0+YVZhbGlkTWt0VHlwZXMgYXMgJGsgPT4gJHYpIHsgaWYgKGlzc2V0KCRhUG9zdFskdl0pKSB7ICRpbnZhbGlkUGFyYW1zID0gZmFsc2U7IH0gJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAkdiwgJ2xhYmVsJyA9PiAnTUFSS0VUICcuJHYsICdydWxlcycgPT4gKGlzc2V0KCRhUG9zdFskdl0pPydyZXF1aXJlZHwnOicnKS4nbWluX2xlbmd0aFszXXxtYXhfbGVuZ3RoWzEyMDBdfHJlZ2V4X21hdGNoWy9eWz8wLTlhLXpBLVotXyxdKyQvXScgKTsgfSBpZiAoJGludmFsaWRQYXJhbXMgJiYgIWlzc2V0KCRhUG9zdFsnbWl4J10pKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBBdGxlYXN0IG9uZSBwYXJhbWV0ZXIgcmVxdWlyZWQuJyk7IH0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gaWYgKGlzc2V0KCRhUG9zdFsnbWl4J10pKSB7ICRhUG9zdERhdGEgPSBhcnJheSgpOyAkYU1peCA9IGV4cGxvZGUoJywnLCAkYVBvc3RbJ21peCddKTsgZm9yZWFjaCAoJGFNaXggYXMgJHYpIHsgJGFFeFZhbHMgPSBleHBsb2RlKCdfJywgJHYpOyBpZighaXNzZXQoJGFQb3N0RGF0YVskYUV4VmFsc1swXV0pKXsgJGFQb3N0RGF0YVskYUV4VmFsc1swXV0gPSAkYUV4VmFsc1sxXTsgfWVsc2V7ICRhUG9zdERhdGFbJGFFeFZhbHNbMF1dID0gJGFQb3N0RGF0YVskYUV4VmFsc1swXV0uJywnLiRhRXhWYWxzWzFdOyB9IH0gaWYgKGlzc2V0KCRhUG9zdFsnc3UnXSkpIHsgJGFQb3N0RGF0YVsnc3UnXSA9IHRydWU7IH0gJGFQb3N0ID0gJGFQb3N0RGF0YTsgfSAkYVJlc0dldEZlZWRCeU1rdFN5bSA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldEZlZWRCeU1rdFN5bSgkYVBvc3QpOyAkc3UgPSAkYVJlc0dldEZlZWRCeU1rdFN5bVsnc3UnXTsgdW5zZXQoJGFSZXNHZXRGZWVkQnlNa3RTeW1bJ3N1J10pOyBpZiAoaXNzZXQoJGFQb3N0WydzdSddKSkgeyAkdGhpcy0+bW5nU3ltYm9scyhhcnJheSgnaW5zZXJ0JyA9PiAkc3UpKTsgfSAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkYVJlc0dldEZlZWRCeU1rdFN5bSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRFeFN0KCRhKSB7IHRyeSB7IGlmKGlzc2V0KCRhWzBdKSAmJiAkYVswXSA9PT0gJ3ByZXZkYXknKXsgJGFEYXRhID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0TGFzdERheUVzKCktPkxBU1RfREFZX0ZFRUQ7IH1lbHNleyAkYURhdGEgPSAkdGhpcy0+YXBpX21vZGVsLT5nZXRFeFN0KCktPkZFRURfVEVYVDsgfSAkYUluZGV4ID0gYXJyYXkoIDEgPT4gJ2N1cnJlbnRfaW5kZXgnLCAyID0+ICd2b2x1bWVfdHJhZGVkJywgMyA9PiAndmFsdWVfdHJhZGVkJywgNCA9PiAnaGlnaF9pbmRleCcsIDUgPT4gJ2xvd19pbmRleCcsIDYgPT4gJ25ldF9jaGFuZ2UnICk7ICRhckVzID0gYXJyYXkoKTsgJGFFcyA9IGV4cGxvZGUoJzsnLCBzdHJfcmVwbGFjZSgnJCcsICcnLCAkYURhdGEpKTsgJGFyRXNbJ2FkdiddID0gc3RyX3JlcGxhY2UoJ0VYRy1TVEFUfCcsICcnLCAkYUVzWzBdKTsgJGFyRXNbJ2RlYyddID0gJGFFc1sxXTsgJGFyRXNbJ3VuYyddID0gJGFFc1syXTsgJGFyRXNbJ3RvdGFsJ10gPSAkYUVzWzNdOyB1bnNldCgkYUVzW2NvdW50KCRhRXMpLTFdKTsgdW5zZXQoJGFFc1swXSk7IHVuc2V0KCRhRXNbMV0pOyB1bnNldCgkYUVzWzJdKTsgdW5zZXQoJGFFc1szXSk7ICRpID0gMDsgJGN1ckluZGV4ID0gJyc7IGZvcmVhY2ggKCRhRXMgYXMgJGsgPT4gJHYpIHsgaWYgKCRpID09IDApIHsgJGN1ckluZGV4ID0gJHY7ICRhckVzWyRjdXJJbmRleF0gPSBhcnJheSgpOyAkaSsrOyB9ZWxzZWlmICgkaSA8IDcpIHsgJGFyRXNbJGN1ckluZGV4XVskYUluZGV4WyRpXV0gPSAkdjsgJGkrKzsgfSBpZiAoJGkgPiA2KSB7ICRiRmxhZyA9IHRydWU7ICRpID0gMDsgfSB9ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhckVzICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHVibGljIGZ1bmN0aW9uIGdldE1rdFR5cGVzKCRhID0gYXJyYXkoKSkgeyB0cnkgeyAkYURhdGEgPSAkdGhpcy0+Y2FjaGUtPmZpbGUtPmdldCgnbWt0VHlwZXMnKTsgaWYgKCRhRGF0YSAmJiAkdGhpcy0+Y2FjaGUtPmZpbGUtPmdldF9tZXRhZGF0YSgnbWt0VHlwZXMnKVsnbXRpbWUnXSA+IHN0cnRvdGltZSgkdGhpcy0+ZGF0ZVRvZGF5KSkgeyAkYURhdGEgPSBqc29uX2RlY29kZSgkYURhdGEpOyB9ZWxzZXsgJGFEYXRhID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0TWt0VHlwZXMoKTsgJHRoaXMtPmNhY2hlLT5maWxlLT5zYXZlKCdta3RUeXBlcycsIGpzb25fZW5jb2RlKCRhRGF0YSksIDM2MDAqMTQpOyB9ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhRGF0YSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRTZWN0b3JMaXN0KCRhKSB7IHRyeXsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0U2VjdG9yTGlzdCgpICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHVibGljIGZ1bmN0aW9uIGdldEZlZWRCeVdhdGNoVHlwZSgkYSkgeyB0cnl7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSBhcnJheSggYXJyYXkoICdmaWVsZCcgPT4gJ3R5cGUnLCAnbGFiZWwnID0+ICdUeXBlJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8cmVnZXhfbWF0Y2hbL14oRnxIfFN8VXxMfEl8UikkL10nICksIGFycmF5KCAnZmllbGQnID0+ICdjb2RlJywgJ2xhYmVsJyA9PiAnQ29kZScsICdydWxlcycgPT4gKGlzc2V0KCRhUG9zdFsndHlwZSddKSAmJiAoJGFQb3N0Wyd0eXBlJ10gPT0gJ1MnIHx8ICRhUG9zdFsndHlwZSddID09ICdJJykgPyAncmVxdWlyZWR8JyA6ICcnKS4ncmVnZXhfbWF0Y2hbL15bPzAtOWEtekEtWl0rJC9dJyApLCApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkdGhpcy0+YXBpX21vZGVsLT5nZXRGZWVkQnlXYXRjaFR5cGUoJGFQb3N0KSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRNYm8oJGEpIHsgcmV0dXJuICR0aGlzLT5nZXRNRChhcnJheSgndHlwZScgPT4gJ08nKSk7IH0gcHVibGljIGZ1bmN0aW9uIGdldE1icCgkYSkgeyByZXR1cm4gJHRoaXMtPmdldE1EKGFycmF5KCd0eXBlJyA9PiAnUCcpKTsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0RmVlZEd0d1NldHRpbmdzKCRhKSB7IHRyeSB7ICRhTW9kZWxSZXMgPSAkdGhpcy0+YXBpX21vZGVsLT5nZXRGZWVkR3R3U2V0dGluZ3MoKTsgJGFEYXRhID0gYXJyYXkoKTsgZm9yZWFjaCAoJGFNb2RlbFJlcyBhcyAkcm93KSB7ICRhRGF0YVtdID0gJHJvdzsgfSAkYVJlcyA9IGFycmF5ICggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFEYXRhICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5ICggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRTZWN0b3JQZXJmb3JtYW5jZSgpIHsgdHJ5eyAkYVJlcyA9IGFycmF5ICggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0U2VjdG9yUGVyZm9ybWFuY2UoKSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSAoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9wVGlja2VyKCRhKSB7IHRyeSB7ICRsaW1pdCA9IDMxOyBpZiAoIWlzc2V0KCRhWzBdKSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogUGFyYW1ldGVyIGlzIHJlcXVpcmVkLicpOyB9ICR0a3IgPSBzdHJ0b2xvd2VyKCRhWzBdKTsgJGFWYWxpZGF0ZVRrciA9IGFycmF5KCdieXZvbCcsICdieXByaWNlaW5jcmVhc2UnLCAnYnlwcmljZWRlY3JlYXNlJywgJ2J5cGVyaW5jcmVhc2UnLCAnYnlwZXJkZWNyZWFzZScpOyBpZiAoIWluX2FycmF5KCR0a3IsICRhVmFsaWRhdGVUa3IpKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBJbnZhbGlkIFRpY2tlcicpOyB9ICRhRGF0YSA9IGFycmF5KCk7ICRhUGFyYW1zID0gYXJyYXkoJ2FDb2xzJyA9PiAnKicpOyBzd2l0Y2ggKCR0a3IpIHsgY2FzZSAnYnl2b2wnOiAkYVBhcmFtc1sndGFibGUnXSA9ICd0b3AzMF9ieV92b2xfdmlldyc7IGJyZWFrOyBjYXNlICdieXByaWNlaW5jcmVhc2UnOiAkYVBhcmFtc1sndGFibGUnXSA9ICd0b3AzMF9ieV9QcmljZV9JbmNyZWFzZV92aWV3JzsgYnJlYWs7IGNhc2UgJ2J5cHJpY2VkZWNyZWFzZSc6ICRhUGFyYW1zWyd0YWJsZSddID0gJ3RvcDMwX2J5X1ByaWNlX2RlY3JlYXNlX3ZpZXcnOyBicmVhazsgY2FzZSAnYnlwZXJpbmNyZWFzZSc6ICRhUGFyYW1zWyd0YWJsZSddID0gJ3RvcDMwX2J5X1BlcmNfSW5jcmVhc2Vfdmlldyc7IGJyZWFrOyBjYXNlICdieXBlcmRlY3JlYXNlJzogJGFQYXJhbXNbJ3RhYmxlJ10gPSAndG9wMzBfYnlfUGVyY19kZWNyZWFzZV92aWV3JzsgYnJlYWs7IH0gJGFQYXJhbXNbJ3RhYmxlJ10gPSBzdHJ0b3VwcGVyKCRhUGFyYW1zWyd0YWJsZSddKTsgJGFQYXJhbXNbJ2xpbWl0J10gPSAkbGltaXQ7ICRhUmVzdWx0ID0gJHRoaXMtPmhlbHBlcl9tb2RlbC0+Z2V0TWFueSgkYVBhcmFtcyk7IGlmICghJGFSZXN1bHRbJ3N1Y2Nlc3MnXSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRhUmVzdWx0Wydtc2cnXSk7IH0gJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFSZXN1bHRbJ2FEYXRhJ10gKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0VGlja2VyKCRhKSB7IHRyeSB7ICRsaW1pdCA9IDMxOyBpZiAoIWlzc2V0KCRhWzBdKSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogUGFyYW1ldGVyIGlzIHJlcXVpcmVkLicpOyB9ICR0a3IgPSBzdHJ0b2xvd2VyKCRhWzBdKTsgJGFWYWxpZGF0ZVRrciA9IGFycmF5KCd1cHBlcmNhcHBlZCcsICdsb3dlcmxvY2tlZCcpOyBpZiAoIWluX2FycmF5KCR0a3IsICRhVmFsaWRhdGVUa3IpKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBJbnZhbGlkIFRpY2tlcicpOyB9ICRhRGF0YSA9IGFycmF5KCk7ICRhUGFyYW1zID0gYXJyYXkoJ2FDb2xzJyA9PiAnKicpOyBzd2l0Y2ggKCR0a3IpIHsgY2FzZSAndXBwZXJjYXBwZWQnOiAkYVBhcmFtc1sndGFibGUnXSA9ICd1cHBlcl9jYXBfc3ltYm9sc192aWV3JzsgYnJlYWs7IGNhc2UgJ2xvd2VybG9ja2VkJzogJGFQYXJhbXNbJ3RhYmxlJ10gPSAnbG93ZXJfbG9ja19zeW1ib2xzX3ZpZXcnOyBicmVhazsgfSAkYVBhcmFtc1sndGFibGUnXSA9IHN0cnRvdXBwZXIoJGFQYXJhbXNbJ3RhYmxlJ10pOyAkYVJlc3VsdCA9ICR0aGlzLT5oZWxwZXJfbW9kZWwtPmdldE1hbnkoJGFQYXJhbXMpOyBpZiAoISRhUmVzdWx0WydzdWNjZXNzJ10pIHsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkYVJlc3VsdFsnbXNnJ10pOyB9ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhRGF0YSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHB1YmxpYyBmdW5jdGlvbiBfbGNpKCRhKSB7IGlmICghJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdoYXNDb25uZWN0aW9uSW5mbycpKSB7ICR0aGlzLT5zZXNzaW9uLT5zZXRfdXNlcmRhdGEoJ2hhc0Nvbm5lY3Rpb25JbmZvJywgdHJ1ZSk7IH0gcmV0dXJuIGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSApOyB9IHB1YmxpYyBmdW5jdGlvbiBnZXRBcHBWZXJzaW9uKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSBhcnJheSggYXJyYXkoICdmaWVsZCcgPT4gJ2FwcCcsICdsYWJlbCcgPT4gJ0FwcCcsICdydWxlcycgPT4gJ3JlcXVpcmVkfHJlZ2V4X21hdGNoWy9eKGF8aXxkfHcpJC9dJyApICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhciA9IGFycmF5KCAnYUknID0+IGFycmF5KHN0cnRvdXBwZXIoJGFQb3N0WydhcHAnXSkpLCAnYU8nID0+IGFycmF5KCAndmVyc2lvbicgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCkgKSwgJ3Byb2NlZHVyZV9uYW1lJyA9PiAnR0VUX0FQUF9WRVInICk7ICRvUmVzUHJjID0gJHRoaXMtPmhlbHBlcl9tb2RlbC0+Y2FsbFN0b3JlZFByb2NlZHVyZSgkYXIpOyAkYXIgPSAkdGhpcy0+Y29uZmlnLT5pdGVtKCdkZXNrdG9wJyk7ICRhciA9ICRhciArIGFycmF5KCd2ZXJzaW9uJyA9PiAkb1Jlc1ByY1sndmVyc2lvbiddKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFyICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHVibGljIGZ1bmN0aW9uIHNlbGZTZXJ2ZXJSZXFIYW5kbGVyKCRhKSB7IHRyeSB7ICRtZXRob2QgPSAkYVswXTsgYXJyYXlfc2hpZnQoJGEpOyAkdGhpcy0+YUxnc1snZW5hYmxlJ10gPSB0cnVlOyAkYUFsbG93ZWRNZXRob2QgPSBhcnJheSgnZ2V0VG9wU3ltYm9scycsICdnZXRmZWVkYnlta3RzeW0nLCAnZ2V0ZHQnLCAnbG9nb3V0Jyk7IGlmICghaW5fYXJyYXkoJG1ldGhvZCwgJGFBbGxvd2VkTWV0aG9kKSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogTWV0aG9kIG5vdCBhbGxvd2VkLicpOyB9ICRhSGVhZGVycyA9IGdldGFsbGhlYWRlcnMoKTsgaWYgKCFpc3NldCgkYUhlYWRlcnNbU1JIVEtdKSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogU29tZXRoaW5nIHdlbnQgd3JvbmcgZXJfY29kZSAxLicpOyB9ICRmaWxlTmFtZSA9IEFQUFBBVEguJ3RtcC90a24vJy5oYXNoKCdtZDUnLCAkYUhlYWRlcnNbU1JIVEtdLmRhdGUoJ3ltZCcpKTsgaWYgKCFmaWxlX2V4aXN0cygkZmlsZU5hbWUpKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBTb21ldGhpbmcgd2VudCB3cm9uZyBlcl9jb2RlIDIuJyk7IH0gJHRrbiA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlTmFtZSk7IHVubGluaygkZmlsZU5hbWUpOyBpZiAoJHRrbiAhPSAkYUhlYWRlcnNbU1JIVEtdKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBTb21ldGhpbmcgd2VudCB3cm9uZyBlcl9jb2RlIDMuJyk7IH0gJGFSZXMgPSAkdGhpcy0+eyRtZXRob2R9KCRhKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlbUZ1dExpc3QoJGEpIHsgdHJ5IHsgJHRoaXMtPmluYygkYSk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICR0aGlzLT5hcGlfbW9kZWwtPmdldEl0ZW1GdXRMaXN0KCRhKSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0Q2xpZW50c0NvZGVzKCRhKSB7IHRyeSB7ICRhUmVzID0gYXJyYXkoKTsgJGFyID0gYXJyYXkoICdhSScgPT4gYXJyYXkoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSksICdhTycgPT4gYXJyYXkoICdhcl9jbCcgPT4gYXJyYXkoJ2ZuJyA9PiAnbmV3Q29sbGVjdGlvbicsICdkVHlwZScgPT4gJ0NMX1RZUEUnKSwgJ3ZlcnJfdGV4dCcgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCksICksICdwcm9jZWR1cmVfbmFtZScgPT4gJ3VzZXJfY2xpZW50X2xpc3QnICk7ICRvUmVzUHJjID0gJHRoaXMtPmhlbHBlcl9tb2RlbC0+Y2FsbFN0b3JlZFByb2NlZHVyZSgkYXIpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkb1Jlc1ByY1snYXJfY2wnXSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0Q2xpZW50c0NvZGVzQW5kTmFtZXMoJGEpIHsgdHJ5IHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0Q2xpZW50c0NvZGVzQW5kTmFtZXMoYXJyYXkoICd1c2VySWQnID0+ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJykgKSkgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldE91dHN0YW5kaW5nT3JkZXJzKCkgeyB0cnkgeyAkYVJlcyA9IGFycmF5KCk7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdhY2NvdW50JywgJ2hPcmRTaWRlcycsICdta3RUeXBlJywgJ3N5bWJvbCcsICdoT3JkZXJJZCcsICdoVGVybWluYWxObycsICdvcmRlcklkJyApKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFQYXJhbXMgPSAkdGhpcy0+b3B0RXh0ZW5kcyhhcnJheSggJ2FjY291bnQnID0+IG51bGwsICdoT3JkU2lkZXMnID0+IG51bGwsICdta3RUeXBlJyA9PiBudWxsLCAnc3ltYm9sJyA9PiBudWxsLCAnaE9yZGVySWQnID0+IG51bGwsICdoVGVybWluYWxObyc9Pm51bGwsICdvcmRlcklkJyA9PiBudWxsICksICRhUG9zdCk7ICRhUGFyYW1zWyd1c2VySWQnXSA9ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyk7ICRvT3V0c3RhbmRpbmdPcmRlcnMgPSAkdGhpcy0+YXBpX21vZGVsLT5nZXRPdXRzdGFuZGluZ09yZGVycygkYVBhcmFtcyk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRvT3V0c3RhbmRpbmdPcmRlcnMgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEFjdGl2aXR5TG9ncygkYSkgeyB0cnkgeyAkYVJlcyA9IGFycmF5KCk7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdoVGVybWluYWxObycsICdhY2NvdW50JywgJ2hPcmRTaWRlc3xyZXF1aXJlZCcsICdta3RUeXBlJywgJ3N5bWJvbCcsICkpOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVBhcmFtcyA9ICR0aGlzLT5vcHRFeHRlbmRzKGFycmF5KCAnaFRlcm1pbmFsTm8nPT4gbnVsbCwgJ2FjY291bnQnID0+IG51bGwsICdoT3JkU2lkZXMnID0+IG51bGwsICdta3RUeXBlJyA9PiBudWxsLCAnc3ltYm9sJyA9PiBudWxsICksICRhUG9zdCk7ICRhUGFyYW1zWyd1c2VySWQnXSA9ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyk7ICRvQWN0aXZpdHlMb2dzID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0QWN0aXZpdHlMb2dzKCRhUGFyYW1zKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJG9BY3Rpdml0eUxvZ3NbMF0sICdhSGVhZGVyJyA9PiAkb0FjdGl2aXR5TG9nc1sxXSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0VHJhZGVMb2dzKCRhKSB7IHRyeSB7ICRhUmVzID0gYXJyYXkoKTsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ2hUZXJtaW5hbE5vJywgJ2FjY291bnQnLCAnaE9yZFNpZGVzfHJlcXVpcmVkJywgJ21rdFR5cGUnLCAnc3ltYm9sJywgKSk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJ3N0YXJ0VGltZScsICdsYWJlbCcgPT4gJ1N0YXJ0IFRpbWUnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ3RpbWUnXSApOyAkYUNvbmZbXSA9IGFycmF5KCAnZmllbGQnID0+ICdlbmRUaW1lJywgJ2xhYmVsJyA9PiAnRW5kIFRpbWUnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ3RpbWUnXSApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVBhcmFtcyA9ICR0aGlzLT5vcHRFeHRlbmRzKGFycmF5KCAnaFRlcm1pbmFsTm8nPT4gbnVsbCwgJ2FjY291bnQnID0+IG51bGwsICdoT3JkU2lkZXMnID0+IG51bGwsICdta3RUeXBlJyA9PiBudWxsLCAnc3ltYm9sJyA9PiBudWxsLCAnc3RhcnRUaW1lJyA9PiAnMDA6MDA6MDAnLCAnZW5kVGltZScgPT4gJzIzOjU5OjU5JyApLCAkYVBvc3QpOyAkYVBhcmFtc1sndXNlcklkJ10gPSAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpOyAkb1RyYWRlTG9ncyA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldFRyYWRlTG9ncygkYVBhcmFtcyk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRvVHJhZGVMb2dzWzBdLCAnYUhlYWRlcicgPT4gJG9UcmFkZUxvZ3NbMV0gKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIHB1c2hPcmRlcigkYSkgeyB0cnkgeyAkYVJlcyA9IGFycmF5KCk7ICRiaW5kUG9ydCA9IFpNUV9QT1JUOyAkdGNwSXAgPSAndGNwOi8vMTI3LjAuMC4xJzsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAnMScsICdsYWJlbCcgPT4gJ0FjY291bnQnLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ2FjY291bnQnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnMzgnLCAnbGFiZWwnID0+ICdWb2x1bWUnLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ3ZvbCddICksIGFycmF5KCAnZmllbGQnID0+ICc0MCcsICdsYWJlbCcgPT4gJ09yZGVyIFR5cGUnLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ29yZFR5cGUnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnNDQnLCAnbGFiZWwnID0+ICdQcmljZScsICdydWxlcycgPT4gJ3JlcXVpcmVkfCcuJHRoaXMtPmFSdWxlc1sncHJpY2UnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnNTQnLCAnbGFiZWwnID0+ICdPcmRlciBTaWRlJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydvcmRTaWRlJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJzU1JywgJ2xhYmVsJyA9PiAnU3ltYm9sJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydzeW1ib2wnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnNTknLCAnbGFiZWwnID0+ICdUaW1lIGluIGZvcmNlJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8bnVtZXJpYycgKSwgYXJyYXkoICdmaWVsZCcgPT4gJzk5JywgJ2xhYmVsJyA9PiAnTGltaXQgUHJpY2UnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ3ByaWNlJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJzExMScsICdsYWJlbCcgPT4gJ0Rpc2MgVm9sdW1lJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWyd2b2wnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnMTQzJywgJ2xhYmVsJyA9PiAnTWFya2V0JywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydta3RUeXBlJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJ2hPcmRlclNpZGUnLCAnbGFiZWwnID0+ICdIb3VzZSBPcmRlciBTaWRlJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydoT3JkU2lkZSddICksIGFycmF5KCAnZmllbGQnID0+ICdyZW1hcmtzJywgJ2xhYmVsJyA9PiAnUmVtYXJrcycsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1sncmVtYXJrcyddICksIGFycmF5KCAnZmllbGQnID0+ICdwaW4nLCAnbGFiZWwnID0+ICdQaW4gQ29kZScsICdydWxlcycgPT4gJ3JlcXVpcmVkfCcuJHRoaXMtPmFSdWxlc1sncGluJ10gKSApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVBvc3RbJzExJ10gPSAkdGhpcy0+Z2V0T3JkZXJJZCgpOyAkYVBvc3RbJzY1J10gPSAnJzsgJGFQb3N0WycxMjYnXSA9ICcnOyAkYVBvc3RbJzE2NyddID0gJyc7ICRhUG9zdFsnMjAwJ10gPSAnJzsgJGFQb3N0WycyMDEnXSA9ICcnOyAkYVBvc3RbJzIwMiddID0gJyc7ICRhUG9zdFsnMjA2J10gPSAnJzsgJGFQb3N0Wyc3MjAwJ10gPSAnJzsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVsncG9zdCddID0gJGFQb3N0OyAkdGhpcy0+YmVuY2htYXJrLT5tYXJrKCdybVN0YXJ0Jyk7ICR0aGlzLT52YWxpZGF0ZVJNKCRhUG9zdCk7ICR0aGlzLT5iZW5jaG1hcmstPm1hcmsoJ3JtRW5kJyk7ICRzRGF0YSA9ICdOT018Jy4kdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpLicsJy4kYVBvc3RbJzExJ10uJywnLihpc3NldCgkYVBvc3RbJ2hPcmRlclNpZGUnXSkgPyAkYVBvc3RbJ2hPcmRlclNpZGUnXSA6ICcnKS4nLCcuKGlzc2V0KCRhUG9zdFsncmVtYXJrcyddKSA/ICRhUG9zdFsncmVtYXJrcyddIDogJycpLid8JzsgdW5zZXQoJGFQb3N0WydyZW1hcmtzJ10pOyB1bnNldCgkYVBvc3RbJ2hPcmRlclNpZGUnXSk7IHVuc2V0KCRhUG9zdFsncGluJ10pOyBrc29ydCgkYVBvc3QpOyAkaSA9IDA7IGZvcmVhY2ggKCRhUG9zdCBhcyAkayA9PiAkdikgeyAkZXhwID0gJ3wnOyBpZihjb3VudCgkYVBvc3QpICE9ICRpKzEpeyAkZXhwID0gJ3wsJzsgfSAkc0RhdGEgLj0gJGsuJz0nLiR2LiRleHA7ICRpKys7IH0gJGFQdXNoRGF0YSA9IGFycmF5KCAnY2F0ZWdvcnknID0+ICdwdXNoT3JkZXJUb01zdHInLCAnZGF0YScgPT4gJHNEYXRhLCAnYUluZm8nID0+IGFycmF5KCAnb3JkZXJJZCcgPT4gJGFQb3N0WycxMSddLCAndXNlclVuaXF1ZUlkJyA9PiAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJVbmlxdWVJZCcpICkgKTsgJHRoaXMtPmxvYWQtPmxpYnJhcnkoJ3NvY2tldF9jbGllbnQnLCBhcnJheSgndXJpJyA9PiAkdGNwSXAuJzonLiRiaW5kUG9ydCkpOyAkdGhpcy0+c29ja2V0X2NsaWVudC0+c2VuZChqc29uX2VuY29kZShhcnJheSgxMCwgJGFQdXNoRGF0YSkpKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdtc2cnID0+ICdvcmRlciBwdXNoIHRvIHNvY2tldCcsICdzRGF0YScgPT4gJHNEYXRhLCAnZXgnID0+IGFycmF5KCR0aGlzLT5iZW5jaG1hcmstPmVsYXBzZWRfdGltZSgncm1TdGFydCcsICdybUVuZCcpKSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gY2hhbmdlT3JkZXIoJGEpIHsgdHJ5IHsgJGFSZXMgPSBhcnJheSgpOyBpZiAoIUNIQU5HRV9PUkRfUE9MSUNZKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ1lvdVwncmUgbm90IGF1dGhvcml6ZWQgdG8gY2hhbmdlIG9yZGVyLicpOyB9ICR0Y3BJcCA9ICd0Y3A6Ly8xMjcuMC4wLjEnOyAkYmluZFBvcnQgPSBaTVFfUE9SVDsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAnYWNjb3VudCcsICdsYWJlbCcgPT4gJ0FjY291bnQnLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ2FjY291bnQnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnaE9yZGVySWQnLCAnbGFiZWwnID0+ICdIb3VzZSBPcmRlciBObycsICdydWxlcycgPT4gJ3JlcXVpcmVkfCcuJHRoaXMtPmFSdWxlc1snaE9yZGVySWQnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnbmV3UHJpY2UnLCAnbGFiZWwnID0+ICdOZXcgUHJpY2UnLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ3ByaWNlJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJ25ld1ZvbCcsICdsYWJlbCcgPT4gJ05ldyBWb2x1bWUnLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ3ZvbCddICksIGFycmF5KCAnZmllbGQnID0+ICdwaW4nLCAnbGFiZWwnID0+ICdQaW4gQ29kZScsICdydWxlcycgPT4gJ3JlcXVpcmVkfCcuJHRoaXMtPmFSdWxlc1sncGluJ10gKSApOyAkdGhpcy0+YUxnc1snbG9ncyddWydwb3N0J10gPSAkYVBvc3Q7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhUmVzR0lWQ0EgPSAkdGhpcy0+YXBpX21vZGVsLT5nZXRJbmZvQW5kVmVyaWZ5Q2hhbmdlT3JkZXIoYXJyYXkoICd1c2VySWQnID0+ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyksICdhY2NvdW50JyA9PiAkYVBvc3RbJ2FjY291bnQnXSwgJ2hPcmRlcklkJyA9PiAkYVBvc3RbJ2hPcmRlcklkJ10sICduZXdWb2wnID0+ICRhUG9zdFsnbmV3Vm9sJ10sICduZXdQcmljZScgPT4gJGFQb3N0WyduZXdQcmljZSddLCAncGluJyA9PiAkYVBvc3RbJ3BpbiddICkpOyAkdGhpcy0+YUxnc1snbG9ncyddWydjaGFuZ2VPcmRlckRldlJlbWFya3MnXSA9ICRhUmVzR0lWQ0FbJ3JlbWFya3MnXTsgaWYgKCFlbXB0eSgkYVJlc0dJVkNBWydlcnJUZXh0J10pKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJGFSZXNHSVZDQVsnZXJyVGV4dCddKTsgfSAkYU9sZE9yZEluZm8gPSAkYVJlc0dJVkNBWydhRGF0YSddOyAkYVsnMSddID0gJGFQb3N0WydhY2NvdW50J107ICRhWycxMSddID0gJHRoaXMtPmdldE9yZGVySWQoKTsgJGFbJzE4J10gPSAnJzsgJGFbJzM3J10gPSAkYU9sZE9yZEluZm9bJ0VYQ0hfT1JERVJfSUQnXTsgJGFbJzM4J10gPSAkYVBvc3RbJ25ld1ZvbCddOyAkYVsnNDAnXSA9ICRhT2xkT3JkSW5mb1snT1JERVJfVFlQRSddOyAkYVsnNDEnXSA9ICRhT2xkT3JkSW5mb1snSE9VU0VfT1JERVJfSUQnXTsgJGFbJzQ0J10gPSAkYVBvc3RbJ25ld1ByaWNlJ107ICRhWyc1NCddID0gJGFPbGRPcmRJbmZvWydPUkRFUl9TSURFJ107ICRhWyc1NSddID0gJGFPbGRPcmRJbmZvWydTRUNVUklUWV9TWU1CT0wnXTsgJGFbJzU5J10gPSAwOyAkYVsnOTknXSA9ICRhT2xkT3JkSW5mb1snT1JERVJfU1RPUF9QUklDRSddOyAkYVsnMTExJ10gPSAoZW1wdHkoJGFPbGRPcmRJbmZvWydESVNDTE9TRURfVk9MVU1FJ10pID8gMCA6ICRhT2xkT3JkSW5mb1snRElTQ0xPU0VEX1ZPTFVNRSddICk7ICRhWycxNDMnXSA9ICRhT2xkT3JkSW5mb1snTUFSS0VUX1RZUEUnXTsgJGFbJzcyMDAnXSA9ICcnOyAkc0RhdGEgPSAnQ0hPfCcuJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKS4nLCcuJGFbJzExJ10uJywnLihpc3NldCgkYU9sZE9yZEluZm9bJ0hPVVNFX09SREVSX1NJREUnXSkgPyAkYU9sZE9yZEluZm9bJ0hPVVNFX09SREVSX1NJREUnXSA6ICcnKS4nfCc7IGtzb3J0KCRhKTsgJGkgPSAwOyBmb3JlYWNoICgkYSBhcyAkayA9PiAkdikgeyAkZXhwID0gJ3wnOyBpZihjb3VudCgkYSkgIT0gJGkrMSl7ICRleHAgPSAnfCwnOyB9ICRzRGF0YSAuPSAkay4nPScuJHYuJGV4cDsgJGkrKzsgfSAkYVB1c2hEYXRhID0gYXJyYXkoICdjYXRlZ29yeScgPT4gJ3B1c2hPcmRlclRvTXN0cicsICdkYXRhJyA9PiAkc0RhdGEsICdhSW5mbycgPT4gYXJyYXkoICdvcmRlcklkJyA9PiAkYVsnMTEnXSwgJ3VzZXJVbmlxdWVJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VyVW5pcXVlSWQnKSApICk7ICR0aGlzLT5sb2FkLT5saWJyYXJ5KCdzb2NrZXRfY2xpZW50JywgYXJyYXkoJ3VyaScgPT4gJHRjcElwLic6Jy4kYmluZFBvcnQpKTsgJHRoaXMtPnNvY2tldF9jbGllbnQtPnNlbmQoanNvbl9lbmNvZGUoYXJyYXkoMTAsICRhUHVzaERhdGEpKSk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnbXNnJyA9PiAnb3JkZXIgcHVzaCB0byBzb2NrZXQnLCAnc0RhdGEnID0+ICRzRGF0YSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gY2FuY2VsT3JkZXIoJGFQYXJhbXMpIHsgdHJ5IHsgJGFSZXMgPSBhcnJheSgpOyAkdGNwSXAgPSAndGNwOi8vMTI3LjAuMC4xJzsgJGJpbmRQb3J0ID0gWk1RX1BPUlQ7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSBhcnJheSggYXJyYXkoICdmaWVsZCcgPT4gJzM3JywgJ2xhYmVsJyA9PiAnT3JkZXIgTm8nLCAncnVsZXMnID0+ICdyZXF1aXJlZHxtYXhfbGVuZ3RoWzMwXXxyZWdleF9tYXRjaFsvXls/MC05YS16QS1aXSskL10nICksIGFycmF5KCAnZmllbGQnID0+ICc0MScsICdsYWJlbCcgPT4gJ0hvdXNlIE9yZGVyIE5vJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8bWF4X2xlbmd0aFsyMF18cmVnZXhfbWF0Y2hbL15bPzAtOWEtekEtWl0rJC9dJyApLCBhcnJheSggJ2ZpZWxkJyA9PiAnNTQnLCAnbGFiZWwnID0+ICdPcmRlciBTaWRlJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydvcmRTaWRlJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJzU1JywgJ2xhYmVsJyA9PiAnU3ltYm9sJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydzeW1ib2wnXSApLCBhcnJheSggJ2ZpZWxkJyA9PiAnMTQzJywgJ2xhYmVsJyA9PiAnTWFya2V0JywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydta3RUeXBlJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJ3BpbicsICdsYWJlbCcgPT4gJ1BpbiBDb2RlJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydwaW4nXSApICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRpID0gMDsgJGFyID0gYXJyYXkoICdhSScgPT4gYXJyYXkoICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyksICRhUG9zdFs0MV0sICRhUG9zdFszN10sICRhUG9zdFsncGluJ10gKSwgJ2FPJyA9PiBhcnJheSggJ3JlcycgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCkgKSwgJ3Byb2NlZHVyZV9uYW1lJyA9PiAnVkFMSURBVEVfQ0FOQ0VMX09SREVSX1JFUVVFU1QnICk7ICRhVmFsaWRhdGVPcmRlclJlcSA9ICR0aGlzLT5oZWxwZXJfbW9kZWwtPmNhbGxTdG9yZWRQcm9jZWR1cmUoJGFyKTsgaWYgKCRhVmFsaWRhdGVPcmRlclJlcVsncmVzJ10gPT0gMykgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogRGF0YSBub3QgZm91bmQhJyk7IH1lbHNlaWYgKCRhVmFsaWRhdGVPcmRlclJlcVsncmVzJ10gPT0gMikgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogSW52YWxpZCBvcmRlciBJRCEnKTsgfWVsc2VpZiAoJGFWYWxpZGF0ZU9yZGVyUmVxWydyZXMnXSA9PSA0KSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBJbnZhbGlkIFBpbiEnKTsgfWVsc2VpZiAoJGFWYWxpZGF0ZU9yZGVyUmVxWydyZXMnXSAhPSAxKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiAnLiRhVmFsaWRhdGVPcmRlclJlcVsncmVzJ10pOyB9ICRhUG9zdFsnMTEnXSA9ICR0aGlzLT5nZXRPcmRlcklkKCk7ICRzRGF0YSA9ICdDT018Jy4kdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpLicsJy4kYVBvc3RbJzExJ10uJ3wnOyBrc29ydCgkYVBvc3QpOyBmb3JlYWNoICgkYVBvc3QgYXMgJGsgPT4gJHYpIHsgJGV4cCA9ICd8JzsgaWYoY291bnQoJGFQb3N0KSAhPSAkaSsxKXsgJGV4cCA9ICd8LCc7IH0gJHNEYXRhIC49ICRrLic9Jy4kdi4kZXhwOyAkaSsrOyB9ICRhUHVzaERhdGEgPSBhcnJheSggJ2NhdGVnb3J5JyA9PiAncHVzaE9yZGVyVG9Nc3RyJywgJ2RhdGEnID0+ICRzRGF0YSwgJ2FJbmZvJyA9PiBhcnJheSggJ29yZGVySWQnID0+ICRhUG9zdFsnMTEnXSwgJ3VzZXJVbmlxdWVJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VyVW5pcXVlSWQnKSApICk7ICR0aGlzLT5sb2FkLT5saWJyYXJ5KCdzb2NrZXRfY2xpZW50JywgYXJyYXkoJ3VyaScgPT4gJHRjcElwLic6Jy4kYmluZFBvcnQpKTsgJHRoaXMtPnNvY2tldF9jbGllbnQtPnNlbmQoanNvbl9lbmNvZGUoYXJyYXkoMTAsICRhUHVzaERhdGEpKSk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnbXNnJyA9PiAnb3JkZXIgcHVzaCB0byBzb2NrZXQnLCAnc0RhdGEnID0+ICRzRGF0YSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0Q2xpZW50RXhwb3N1cmUoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAnYWNjb3VudCcsICdsYWJlbCcgPT4gJ0FjY291bnQnLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ2FjY291bnQnXSApICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhUmVzdWx0ID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0Q2xpZW50RXhwb3N1cmUoYXJyYXkoICdhY2NvdW50JyA9PiAkYVBvc3RbJ2FjY291bnQnXSwgJ3VzZXJJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSApKTsgJHRoaXMtPmJWYWxpZGF0aW9uUmVxID0gZmFsc2U7ICRhUmVzdWx0WydhY2NvdW50RGV0YWlscyddID0gQCR0aGlzLT5nZXRDbGllbnREZXRhaWxzKGFycmF5KCkpWydhRGF0YSddOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkYVJlc3VsdCApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0VHJhZGVJdGVtUnMoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ2FjY291bnR8cmVxdWlyZWQnLCAnc3ltYm9sfHJlcXVpcmVkJyApKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAncG9zVHlwZScsICdsYWJlbCcgPT4gJ1Bvc2l0aW9uIFR5cGUnLCAncnVsZXMnID0+ICdyZXF1aXJlZHxyZWdleF9tYXRjaFsvXihDREN8T1BFTikkL10nICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhUmVzdWx0ID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0VHJhZGVJdGVtUnMoYXJyYXkoICd1c2VySWQnID0+ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyksICdhY2NvdW50JyA9PiAkYVBvc3RbJ2FjY291bnQnXSwgJ3N5bWJvbCcgPT4gJGFQb3N0WydzeW1ib2wnXSwgJ3Bvc1R5cGUnID0+ICRhUG9zdFsncG9zVHlwZSddICkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkYVJlc3VsdFsnYURhdGEnXSwgJ3Bta3QnID0+ICRhUmVzdWx0WydwbWt0J10gKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEFjY291bnRTdGF0cygkYSkgeyB0cnkgeyAkYVBvc3QgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsgJGFDb25mID0gJHRoaXMtPmdldFZhbGlkYXRpb25Db25mKGFycmF5KCAnYWNjb3VudHxyZXF1aXJlZCcsICdmcm9tRGF0ZXxyZXF1aXJlZCcsICd0b0RhdGV8cmVxdWlyZWQnICkpOyAkYUNvbmZbXSA9IGFycmF5KCAnZmllbGQnID0+ICdsZWRnZXJUeXBlJywgJ2xhYmVsJyA9PiAnTGVkZ2VyIFR5cGUnLCAncnVsZXMnID0+ICdyZWdleF9tYXRjaFsvXihEfEwpJC9dJyApOyAkYUNvbmZbXSA9IGFycmF5KCAnZmllbGQnID0+ICdudW0nLCAnbGFiZWwnID0+ICdOdW1iZXIgT2YgVHlwZScsICdydWxlcycgPT4gJ3JlZ2V4X21hdGNoWy9eWzAtOV0rJC9dJyApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkb0dldEFiRHQgPSAkdGhpcy0+Z2V0QWJEdChhcnJheSggJ2dGb3JtYXQnID0+ICdkZC1tbS15eXl5JywgJ2FWYWwnID0+IGFycmF5KCdmcm9tRGF0ZSc9PiRhUG9zdFsnZnJvbURhdGUnXSwgJ3RvRGF0ZSc9PiRhUG9zdFsndG9EYXRlJ10pLCAnckZvcm1hdCcgPT4gJ2QtTS15JyApKTsgJGZyb21EYXRlVXQgPSAkb0dldEFiRHQtPmZyb21EYXRlWydzdHJ0b3RpbWUnXTsgJHRvRGF0ZVV0ID0gJG9HZXRBYkR0LT50b0RhdGVbJ3N0cnRvdGltZSddOyBpZigkZnJvbURhdGVVdCA+ICR0b0RhdGVVdCl7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiBJbnZhbGlkIGRhdGVzIScpOyB9ICRhUGFyYW1zID0gJHRoaXMtPm9wdEV4dGVuZHMoYXJyYXkoICdsZWRnZXJUeXBlJyA9PiBudWxsLCAnbnVtJyA9PiBudWxsLCApLCAkYVBvc3QpOyAkYVBhcmFtc1snZnJvbURhdGUnXSA9ICRvR2V0QWJEdC0+ZnJvbURhdGVbJ2RhdGUnXTsgJGFQYXJhbXNbJ3RvRGF0ZSddID0gJG9HZXRBYkR0LT50b0RhdGVbJ2RhdGUnXTsgJGFQYXJhbXNbJ3VzZXJJZCddID0gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKTsgJHJlc0FjY291bnRTdGF0cyA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldEFjY291bnRTdGF0cygkYVBhcmFtcyk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRyZXNBY2NvdW50U3RhdHNbMF0sICdhSGVhZGVyJyA9PiAkcmVzQWNjb3VudFN0YXRzWzFdICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHJpdmF0ZSBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblN0YXRzKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdhY2NvdW50fHJlcXVpcmVkJywgJ2Zyb21EYXRlfHJlcXVpcmVkJywgJ3RvRGF0ZXxyZXF1aXJlZCcsICduYXR1cmVDb2RlJywgJ3N5bWJvbCcgKSk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRvR2V0QWJEdCA9ICR0aGlzLT5nZXRBYkR0KGFycmF5KCAnZ0Zvcm1hdCcgPT4gJ2RkLW1tLXl5eXknLCAnYVZhbCcgPT4gYXJyYXkoJ2Zyb21EYXRlJz0+JGFQb3N0Wydmcm9tRGF0ZSddLCAndG9EYXRlJz0+JGFQb3N0Wyd0b0RhdGUnXSksICdyRm9ybWF0JyA9PiAnZC1NLXknICkpOyAkZnJvbURhdGVVdCA9ICRvR2V0QWJEdC0+ZnJvbURhdGVbJ3N0cnRvdGltZSddOyAkdG9EYXRlVXQgPSAkb0dldEFiRHQtPnRvRGF0ZVsnc3RydG90aW1lJ107IGlmKCRmcm9tRGF0ZVV0ID4gJHRvRGF0ZVV0KXsgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3I6IEludmFsaWQgZGF0ZXMhJyk7IH0gJGFQb3N0ID0gJHRoaXMtPm9wdEV4dGVuZHMoYXJyYXkoICduYXR1cmVDb2RlJyA9PiBudWxsLCAnc3ltYm9sJyA9PiBudWxsICksICRhUG9zdCk7ICRhUG9zdFsnZnJvbURhdGUnXSA9ICRvR2V0QWJEdC0+ZnJvbURhdGVbJ2RhdGUnXTsgJGFQb3N0Wyd0b0RhdGUnXSA9ICRvR2V0QWJEdC0+dG9EYXRlWydkYXRlJ107ICRhUG9zdFsndXNlcklkJ10gPSAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkdGhpcy0+YXBpX21vZGVsLT5nZXRUcmFuc2FjdGlvblN0YXRzKCRhUG9zdCkgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEluZGljZXNTdW1tYXJ5KCRhKSB7IHRyeXsgJGFSZXNHZXRJbmRpY2VzU3VtbWFyeSA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldEluZGljZXNTdW1tYXJ5KCk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhUmVzR2V0SW5kaWNlc1N1bW1hcnlbMF0sICdhSGVhZGVyJyA9PiAkYVJlc0dldEluZGljZXNTdW1tYXJ5WzFdLCAndHJhZGVzJyA9PiAkYVJlc0dldEluZGljZXNTdW1tYXJ5WzJdLCAndm9sJyA9PiAkYVJlc0dldEluZGljZXNTdW1tYXJ5WzNdLCAndmFsJyA9PiAkYVJlc0dldEluZGljZXNTdW1tYXJ5WzRdICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHJpdmF0ZSBmdW5jdGlvbiBjaGFuZ2VQYXNzKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSBhcnJheSggYXJyYXkoICdmaWVsZCcgPT4gJ3Bhc3MnLCAnbGFiZWwnID0+ICdDdXJyZW50IHBhc3N3b3JkJywgJ3J1bGVzJyA9PiAncmVxdWlyZWQnICksIGFycmF5KCAnZmllbGQnID0+ICduZXdQYXNzJywgJ2xhYmVsJyA9PiAnTmV3IHBhc3N3b3JkJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8Jy4kdGhpcy0+YVJ1bGVzWydwYXNzJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJ2NvblBhc3MnLCAnbGFiZWwnID0+ICdDb25maXJtIHBhc3N3b3JkJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8bWF0Y2hlc1tuZXdQYXNzXScgKSApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYXIgPSBhcnJheSggJ2FJJyA9PiBhcnJheSggJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJGFQb3N0WydwYXNzJ10sICRhUG9zdFsnbmV3UGFzcyddICksICdhTycgPT4gYXJyYXkoICdzdGF0dXMnID0+IGFycmF5KCdsZW4nID0+IDEpLCAnZXJyVGV4dCcgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCkgKSwgJ3Byb2NlZHVyZV9uYW1lJyA9PiAndXNlcl91cGRfcHdkJyApOyAkb1Jlc1ByYyA9ICR0aGlzLT5oZWxwZXJfbW9kZWwtPmNhbGxTdG9yZWRQcm9jZWR1cmUoJGFyKTsgaWYgKCR0aGlzLT5zZXNzaW9uLT5wcm9tcHRJZCA9PSAyKSB7ICR0aGlzLT5zZXNzaW9uLT5zZXRfdXNlcmRhdGEoYXJyYXkoJ3Byb21wdElkJz0+NCkpOyB9IGlmKHRyaW0oJG9SZXNQcmNbJ3N0YXR1cyddKSAhPT0gJ1knKXsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkb1Jlc1ByY1snZXJyVGV4dCddKTsgfSAkYVJlc1snc3VjY2VzcyddID0gdHJ1ZTsgJGFSZXNbJ21zZyddID0gJ1Bhc3N3b3JkIGNoYW5nZWQgc3VjY2Vzc2Z1bGx5Lic7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlc1snc3VjY2VzcyddID0gZmFsc2U7ICRhUmVzWydtc2cnXSA9ICRlLT5nZXRNZXNzYWdlKCk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gY2hhbmdlUGluKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSBhcnJheSggYXJyYXkoICdmaWVsZCcgPT4gJ3Bhc3MnLCAnbGFiZWwnID0+ICdQYXNzd29yZCcsICdydWxlcycgPT4gJ3JlcXVpcmVkJyApLCBhcnJheSggJ2ZpZWxkJyA9PiAnb2xkUGluJywgJ2xhYmVsJyA9PiAnT2xkIFBpbicsICdydWxlcycgPT4gJ3JlcXVpcmVkfCcuJHRoaXMtPmFSdWxlc1sncGluJ10gKSwgYXJyYXkoICdmaWVsZCcgPT4gJ25ld1BpbicsICdsYWJlbCcgPT4gJ05ldyBQaW4nLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ3BpbiddICksIGFycmF5KCAnZmllbGQnID0+ICdjb25QaW4nLCAnbGFiZWwnID0+ICdDb25maXJtIFBpbicsICdydWxlcycgPT4gJ3JlcXVpcmVkfG1hdGNoZXNbbmV3UGluXScgKSApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYXIgPSBhcnJheSggJ2FJJyA9PiBhcnJheSggJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJGFQb3N0WydwYXNzJ10sICRhUG9zdFsnb2xkUGluJ10sICRhUG9zdFsnbmV3UGluJ10gKSwgJ2FPJyA9PiBhcnJheSggJ3N0YXR1cycgPT4gYXJyYXkoJ2xlbicgPT4gMSksICdlcnJUZXh0JyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSApLCAncHJvY2VkdXJlX25hbWUnID0+ICd1c2VyX3VwZF9waW4nICk7ICRvUmVzUHJjID0gJHRoaXMtPmhlbHBlcl9tb2RlbC0+Y2FsbFN0b3JlZFByb2NlZHVyZSgkYXIpOyBpZih0cmltKCRvUmVzUHJjWydzdGF0dXMnXSkgIT09ICdZJyl7IHRocm93IG5ldyBFeGNlcHRpb24oJG9SZXNQcmNbJ2VyclRleHQnXSk7IH0gJGFSZXNbJ3N1Y2Nlc3MnXSA9IHRydWU7ICRhUmVzWydtc2cnXSA9ICdQaW4gY2hhbmdlZCBzdWNjZXNzZnVsbHkuJzsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzWydzdWNjZXNzJ10gPSBmYWxzZTsgJGFSZXNbJ21zZyddID0gJGUtPmdldE1lc3NhZ2UoKTsgfSByZXR1cm4gJGFSZXM7IH0gcHJpdmF0ZSBmdW5jdGlvbiBzZXRQaW4oJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAncGFzcycsICdsYWJlbCcgPT4gJ1Bhc3N3b3JkJywgJ3J1bGVzJyA9PiAncmVxdWlyZWQnICksIGFycmF5KCAnZmllbGQnID0+ICdwaW4nLCAnbGFiZWwnID0+ICdQaW4nLCAncnVsZXMnID0+ICdyZXF1aXJlZHwnLiR0aGlzLT5hUnVsZXNbJ3BpbiddICksIGFycmF5KCAnZmllbGQnID0+ICdjb25QaW4nLCAnbGFiZWwnID0+ICdDb25maXJtIFBpbicsICdydWxlcycgPT4gJ3JlcXVpcmVkfG1hdGNoZXNbcGluXScgKSApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYXIgPSBhcnJheSggJ2FJJyA9PiBhcnJheSggJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJGFQb3N0WydwYXNzJ10sIG51bGwsICRhUG9zdFsncGluJ10gKSwgJ2FPJyA9PiBhcnJheSggJ3N0YXR1cycgPT4gYXJyYXkoJ2xlbicgPT4gMSksICdlcnJUZXh0JyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSApLCAncHJvY2VkdXJlX25hbWUnID0+ICd1c2VyX3VwZF9waW4nICk7ICRvUmVzUHJjID0gJHRoaXMtPmhlbHBlcl9tb2RlbC0+Y2FsbFN0b3JlZFByb2NlZHVyZSgkYXIpOyBpZih0cmltKCRvUmVzUHJjWydzdGF0dXMnXSkgIT09ICdZJyl7IHRocm93IG5ldyBFeGNlcHRpb24oJG9SZXNQcmNbJ2VyclRleHQnXSk7IH0gaWYgKCR0aGlzLT5zZXNzaW9uLT5wcm9tcHRJZCA9PSA0KSB7ICR0aGlzLT5zZXNzaW9uLT5zZXRfdXNlcmRhdGEoYXJyYXkoJ3Byb21wdElkJz0+bnVsbCkpOyB9ICRhUmVzWydzdWNjZXNzJ10gPSB0cnVlOyAkYVJlc1snbXNnJ10gPSAnUGluIHNhdmVkIHN1Y2Nlc3NmdWxseS4nOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXNbJ3N1Y2Nlc3MnXSA9IGZhbHNlOyAkYVJlc1snbXNnJ10gPSAkZS0+Z2V0TWVzc2FnZSgpOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldFVzZXJQcmVmKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSBhcnJheSggYXJyYXkoICdmaWVsZCcgPT4gJ2tleScsICdsYWJlbCcgPT4gJ0tleScsICdydWxlcycgPT4gJ3JlZ2V4X21hdGNoWy9eWz8wLTlhLXpBLVotX10rJC9dJyApICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhUmVzR2V0VXNlclByZWYgPSAkdGhpcy0+YXBpX21vZGVsLT5nZXRVc2VyUHJlZihhcnJheSggJ3VzZXJJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJ3VzZXJBcHAnID0+ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlckFwcCcpLCAna2V5JyA9PiAoaXNzZXQoJGFQb3N0WydrZXknXSkgPyAkYVBvc3RbJ2tleSddIDogJycpICkpOyAkYVJlc1snc3VjY2VzcyddID0gdHJ1ZTsgJGFSZXNbJ2FEYXRhJ10gPSAkYVJlc0dldFVzZXJQcmVmOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXNbJ3N1Y2Nlc3MnXSA9IGZhbHNlOyAkYVJlc1snbXNnJ10gPSAkZS0+Z2V0TWVzc2FnZSgpOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIHNldFVzZXJQcmVmKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYSA9IGFycmF5KCAndXNlcklkJyA9PiAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpLCAndXNlckFwcCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VyQXBwJykgKTsgJHNwbGl0ZXIgPSAnfCtvK3wnOyBmb3JlYWNoICgkYVBvc3QgYXMgJGsgPT4gJHYpIHsgaWYoIXByZWdfbWF0Y2goJy9eWz8wLTlhLXpBLVotX10rJC8nLCAkaykgJiYgIXByZWdfbWF0Y2goJy9eWz8wLTlhLXpBLVotXyEsQCReKCl7fStcJ1wnOl0rJC8nLCAkdikpeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXJzIGZvciBrZXkgb3IgdmFsdWUnKTsgfWVsc2VpZiAoZW1wdHkoJGspIHx8IGVtcHR5KCR2KSkgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvciA6IEtleSB2YWx1ZSBwYWlyIHJlcXVpcmVkLicpOyB9ZWxzZWlmKHN0cnBvcygkdiwgJHNwbGl0ZXIpICE9PSBmYWxzZSl7IHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yOiAnLiRzcGxpdGVyLicgbm90IGFsbG93ZWQgaW4gdmFsdWUhJyk7IH0gJGFbJ2FEYXRhJ11bXSA9ICRrLiRzcGxpdGVyLiR2OyB9ICRhUmVzR2V0VXNlclByZWYgPSAkdGhpcy0+YXBpX21vZGVsLT5zZXRVc2VyUHJlZigkYSk7ICRhUmVzWydzdWNjZXNzJ10gPSB0cnVlOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXNbJ3N1Y2Nlc3MnXSA9IGZhbHNlOyAkYVJlc1snbXNnJ10gPSAkZS0+Z2V0TWVzc2FnZSgpOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGxvZ291dCgkYSkgeyAkdGhpcy0+YUxnc1snZW5hYmxlJ10gPSB0cnVlOyAkdXNlckFwcCA9ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlckFwcCcpOyAkdXNlcklkID0gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKTsgJHR5cGUgPSAoaXNzZXQoJGFbMF0pPyRhWzBdOjApOyAkYXIgPSBhcnJheSggJ2FJJyA9PiBhcnJheSgkdXNlcklkLCAkdHlwZSksICdhTycgPT4gYXJyYXkoICdwX3N0YXR1cycgPT4gYXJyYXkoJ2xlbicgPT4gMTAwMCksICdwX2Vycl90ZXh0JyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSApLCAncHJvY2VkdXJlX25hbWUnID0+ICd1c2VyX2xvZ291dCcgKTsgJG9SZXNQcmMgPSAkdGhpcy0+aGVscGVyX21vZGVsLT5jYWxsU3RvcmVkUHJvY2VkdXJlKCRhcik7ICRhVHlwZU1zZyA9IGFycmF5KCdMb2dvdXQgYnkgdXNlcicsICdGb3JjZSBsb2dvdXQgYnkgc29ja2V0JywgJ1Nlc3Npb24gdGltZW91dCcpOyAkdGhpcy0+YUxnc1snbG9ncyddWyd0eXBlJ10gPSAkYVR5cGVNc2dbJHR5cGVdOyAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCdpc0xvZ2dlZEluJywgZmFsc2UpOyAkdGhpcy0+c2Vzc2lvbi0+c2Vzc19kZXN0cm95KCk7IHJldHVybiBhcnJheSgnc3VjY2VzcycgPT4gdHJ1ZSk7IH0gcHJpdmF0ZSBmdW5jdGlvbiBnZXRUb3BNb3ZlcnMoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAnbW9kZScsICdsYWJlbCcgPT4gJ01vZGUnLCAncnVsZXMnID0+ICdyZXF1aXJlZHxtYXhfbGVuZ3RoWzFdfHJlZ2V4X21hdGNoWy9eKDF8MnwzfDR8NSkkL10nICkgKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFSZXN1bHQgPSAkdGhpcy0+YXBpX21vZGVsLT5nZXRUb3BNb3ZlcnMoYXJyYXkoICdtb2RlJyA9PiAkYVBvc3RbJ21vZGUnXSApKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFSZXN1bHQgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldENsaWVudERldGFpbHMoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7IGlmICgkdGhpcy0+YlZhbGlkYXRpb25SZXEpIHsgJGFDb25mID0gYXJyYXkoIGFycmF5KCAnZmllbGQnID0+ICdhY2NvdW50JywgJ2xhYmVsJyA9PiAnQWNjb3VudCcsICdydWxlcycgPT4gJ3JlcXVpcmVkfG1heF9sZW5ndGhbMTBdfHJlZ2V4X21hdGNoWy9eWz8wLTlhLXpBLVpdKyQvXScgKSApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSB9ICRhUmVzdWx0ID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0Q2xpZW50RGV0YWlscyhhcnJheSggJ3VzZXJJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJ2FjY291bnQnID0+ICRhUG9zdFsnYWNjb3VudCddICkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkYVJlc3VsdCApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0Q2xpZW50RXhwb3N1cmVEZXRhaWxzKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdzeW1ib2x8cmVxdWlyZWQnLCAnbWt0VHlwZXxyZXF1aXJlZCcsICdhY2NvdW50fHJlcXVpcmVkJyApKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAnbW9kZScsICdsYWJlbCcgPT4gJ01vZGUnLCAncnVsZXMnID0+ICdyZXF1aXJlZHxtYXhfbGVuZ3RoWzFdfHJlZ2V4X21hdGNoWy9eKE98RSkkL10nICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhUmVzdWx0ID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0Q2xpZW50RXhwb3N1cmVEZXRhaWxzKGFycmF5KCAndXNlcklkJyA9PiAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpLCAnbW9kZScgPT4gJGFQb3N0Wydtb2RlJ10sICdzeW1ib2wnID0+ICRhUG9zdFsnc3ltYm9sJ10sICdta3RUeXBlJyA9PiAkYVBvc3RbJ21rdFR5cGUnXSwgJ2FjY291bnQnID0+ICRhUG9zdFsnYWNjb3VudCddICkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkYVJlc3VsdFswXSwgJ2FIZWFkZXInID0+ICRhUmVzdWx0WzFdICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHJpdmF0ZSBmdW5jdGlvbiByZW1vdmVTeW1ib2xzSW5VdGkoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAnc3ltYm9scycsICdsYWJlbCcgPT4gJ1N5bWJvbHMnLCAncnVsZXMnID0+ICdyZXF1aXJlZHxtaW5fbGVuZ3RoWzVdfG1heF9sZW5ndGhbNTAwXXxyZWdleF9tYXRjaFsvXls/MC05YS16QS1aLV8sXSskL10nICkgKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJHRoaXMtPm1uZ1N5bWJvbHMoYXJyYXkoJ2RlbCcgPT4gZXhwbG9kZSgnLCcsICRhUG9zdFsnc3ltYm9scyddKSkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gdmVyaWZ5UGluKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdwaW58cmVxdWlyZWQnICkpOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYXIgPSBhcnJheSggJ2FJJyA9PiBhcnJheSggJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJGFQb3N0WydwaW4nXSApLCAnYU8nID0+IGFycmF5KCAnc3RhdHVzJyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSwgJ2VyJyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSApLCAncHJvY2VkdXJlX25hbWUnID0+ICdVc2VyX3Bpbl92YWxpZGF0ZScgKTsgJG9SZXNQcmMgPSAkdGhpcy0+aGVscGVyX21vZGVsLT5jYWxsU3RvcmVkUHJvY2VkdXJlKCRhcik7IGlmKCFlbXB0eSgkb1Jlc1ByY1snZXInXSkpeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRvUmVzUHJjWydlciddKTsgfSAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlQ2FzaCgkYSkgeyB0cnkgeyAkYVBvc3QgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsgJGFDb25mID0gJHRoaXMtPmdldFZhbGlkYXRpb25Db25mKGFycmF5KCAnYWNjb3VudHxyZXF1aXJlZCcsICdwaW58cmVxdWlyZWQnICkpOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkdGhpcy0+YXBpX21vZGVsLT5nZXRBdmFpbGFibGVDYXNoKGFycmF5KCAndXNlcklkJyA9PiAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpLCAnYWNjb3VudCcgPT4gJGFQb3N0WydhY2NvdW50J10sICdwaW4nID0+ICRhUG9zdFsncGluJ10gKSkgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIHBheVJlcXVlc3QoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ2FjY291bnR8cmVxdWlyZWQnLCAncGlufHJlcXVpcmVkJyApKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAnYW1vdW50JywgJ2xhYmVsJyA9PiAnQW1vdW50JywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8bWF4X2xlbmd0aFsxNV18cmVnZXhfbWF0Y2hbL15bPzAtOS5dKyQvXScgKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAnbWV0aG9kJywgJ2xhYmVsJyA9PiAnTWV0aG9kJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8cmVnZXhfbWF0Y2hbL14oZGVsaXZlcnl8cGlja3VwKSQvXScgKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAnYnJhbmNoJywgJ2xhYmVsJyA9PiAnQnJhbmNoJywgJ3J1bGVzJyA9PiAncmVnZXhfbWF0Y2hbL15bPzAtOWEtekEtWi1fKCkgXSskL10nICk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJ3JlbWFya3MnLCAnbGFiZWwnID0+ICdSZW1hcmtzJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydyZW1hcmtzJ10gKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJHRoaXMtPmFwaV9tb2RlbC0+cGF5UmVxdWVzdChhcnJheSggJ3VzZXJJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJ2FjY291bnQnID0+ICRhUG9zdFsnYWNjb3VudCddLCAncGluJyA9PiAkYVBvc3RbJ3BpbiddLCAncmVxRGF0ZScgPT4gZGF0ZSgnZC1NLXknKSwgJ2Ftb3VudCcgPT4gJGFQb3N0WydhbW91bnQnXSwgJ3JlbWFya3MnID0+ICRhUG9zdFsncmVtYXJrcyddLicgJy4oJGFQb3N0WydtZXRob2QnXSA9PSAncGlja3VwJyA/ICRhUG9zdFsnYnJhbmNoJ10gOiAnJyksICdtZXRob2QnID0+ICRhUG9zdFsnbWV0aG9kJ10gKSkgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGNhbmNlbFBheVJlcXVlc3QoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ2FjY291bnR8cmVxdWlyZWQnLCAncGlufHJlcXVpcmVkJyApKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAnc05vJywgJ2xhYmVsJyA9PiAnU2VyaWFsIE5vJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8bWF4X2xlbmd0aFsyMF18cmVnZXhfbWF0Y2hbL15bPzAtOV0rJC9dJyApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkdGhpcy0+YXBpX21vZGVsLT5jYW5jZWxQYXlSZXF1ZXN0KGFycmF5KCAndXNlcklkJyA9PiAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpLCAnYWNjb3VudCcgPT4gJGFQb3N0WydhY2NvdW50J10sICdwaW4nID0+ICRhUG9zdFsncGluJ10sICdzTm8nID0+ICRhUG9zdFsnc05vJ10gKSkgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEJyYW5jaGVzKCRhKSB7IHRyeSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICR0aGlzLT5hcGlfbW9kZWwtPmdldEJyYW5jaGVzKCkgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEl0ZW1QZXJpb2RpY0RhdGEoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ3N5bWJvbHxyZXF1aXJlZCcgKSk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJ2R1cmF0aW9uJywgJ2xhYmVsJyA9PiAnRHVyYXRpb24nLCAncnVsZXMnID0+ICdyZXF1aXJlZHxyZWdleF9tYXRjaFsvXig1RFl8MU1PfDZNT3xZVER8MVlSfDVZUikkL10nICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhR2V0SXRlbVBlcmlvZGljRGF0YSA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldEl0ZW1QZXJpb2RpY0RhdGEoYXJyYXkoICd1c2VySWQnID0+ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyksICdzeW1ib2wnID0+ICRhUG9zdFsnc3ltYm9sJ10sICdkdXJhdGlvbicgPT4gJGFQb3N0WydkdXJhdGlvbiddICkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkYUdldEl0ZW1QZXJpb2RpY0RhdGFbMF0sICdhSGVhZGVyJyA9PiAkYUdldEl0ZW1QZXJpb2RpY0RhdGFbMV0gKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEl0ZW1Bbm5vdW5jZW1lbnQoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ3N5bWJvbHxyZXF1aXJlZCcgKSk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhR2V0SXRlbUFubm91bmNlbWVudCA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldEl0ZW1Bbm5vdW5jZW1lbnQoYXJyYXkoICd1c2VySWQnID0+ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyksICdzeW1ib2wnID0+ICRhUG9zdFsnc3ltYm9sJ10gKSk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhR2V0SXRlbUFubm91bmNlbWVudFswXSwgJ2FIZWFkZXInID0+ICRhR2V0SXRlbUFubm91bmNlbWVudFsxXSApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0SXRlbURldGFpbCgkYSkgeyB0cnkgeyAkYVBvc3QgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsgJGFDb25mID0gJHRoaXMtPmdldFZhbGlkYXRpb25Db25mKGFycmF5KCAnc3ltYm9sfHJlcXVpcmVkJyApKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGdldEl0ZW1EZXRhaWwgPSAkdGhpcy0+YXBpX21vZGVsLT5nZXRJdGVtRGV0YWlsKGFycmF5KCAndXNlcklkJyA9PiAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJJZCcpLCAnc3ltYm9sJyA9PiAkYVBvc3RbJ3N5bWJvbCddICkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkZ2V0SXRlbURldGFpbFswXSwgJ2FIZWFkZXInID0+ICRnZXRJdGVtRGV0YWlsWzFdICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHJpdmF0ZSBmdW5jdGlvbiBnZXRQZW5kaW5nV2l0aGRyYXdSZXFzKCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdhY2NvdW50fHJlcXVpcmVkJywgJ3BpbnxyZXF1aXJlZCcgKSk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRnZXRQZW5kaW5nV2l0aGRyYXdSZXFzID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0UGVuZGluZ1dpdGhkcmF3UmVxcyhhcnJheSggJ3VzZXJJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJ2FjY291bnQnID0+ICRhUG9zdFsnYWNjb3VudCddLCAncGluJyA9PiAkYVBvc3RbJ3BpbiddICkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ2FEYXRhJyA9PiAkZ2V0UGVuZGluZ1dpdGhkcmF3UmVxcyApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByaXZhdGUgZnVuY3Rpb24gZ2V0UHJpY2VTdW1tYXJ5KCRhKSB7IHRyeSB7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdta3RUeXBlfHJlcXVpcmVkJywgJ3N5bWJvbHxyZXF1aXJlZCcgKSk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhUmVzdWx0ID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0UHJpY2VTdW1tYXJ5KGFycmF5KCAnbWt0VHlwZScgPT4gJGFQb3N0Wydta3RUeXBlJ10sICdzeW1ib2wnID0+ICRhUG9zdFsnc3ltYm9sJ10gKSk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhUmVzdWx0WzBdLCAnYUhlYWRlcicgPT4gJGFSZXN1bHRbMV0gKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldFRyYWRlckxpc3QoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9IGFycmF5KCBhcnJheSggJ2ZpZWxkJyA9PiAnbW9kZScsICdsYWJlbCcgPT4gJ01vZGUnLCAncnVsZXMnID0+ICdyZWdleF9tYXRjaFsvXihZfE4pJC9dJyApICk7ICRhUGFyYW1zID0gJHRoaXMtPm9wdEV4dGVuZHMoYXJyYXkoICdtb2RlJyA9PiAnTicgKSwgJGFQb3N0KTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0VHJhZGVyTGlzdCgkYVBhcmFtcykgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIHB1c2hPcmRNc2dUb0NsaWVudFVzZXJzTGlzdCgkYSkgeyB0cnkgeyAkYmluZFBvcnQgPSBaTVFfUE9SVDsgJHRjcElwID0gJ3RjcDovLzEyNy4wLjAuMSc7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdhY2NvdW50fHJlcXVpcmVkJyApKTsgJGFDb25mW10gPSBhcnJheSggJ2ZpZWxkJyA9PiAnbXNnJywgJ2xhYmVsJyA9PiAnTXNnJywgJ3J1bGVzJyA9PiAncmVxdWlyZWQnICk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhUmVzR2V0Q2xpZW50VXNlcnNMaXN0ID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0Q2xpZW50VXNlcnNMaXN0KCRhUG9zdCk7ICRhQ2xpZW50VXNlcnNMaXN0ID0gYXJyYXkoKTsgZm9yZWFjaCAoJGFSZXNHZXRDbGllbnRVc2Vyc0xpc3QgYXMgJHYpIHsgJGFDbGllbnRVc2Vyc0xpc3RbXSA9ICR2WydVU1JfSUQnXTsgfSAkdGhpcy0+bG9hZC0+bGlicmFyeSgnc29ja2V0X2NsaWVudCcsIGFycmF5KCd1cmknID0+ICR0Y3BJcC4nOicuJGJpbmRQb3J0KSk7ICR0aGlzLT5zb2NrZXRfY2xpZW50LT5zZW5kKGpzb25fZW5jb2RlKGFycmF5KDEwLCAkYVB1c2hEYXRhKSkpOyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gdHJ1ZSwgJ21zZycgPT4gJ29yZGVyIHB1c2ggdG8gc29ja2V0JywgJ3NEYXRhJyA9PiAkc0RhdGEgKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFDbGllbnRVc2Vyc0xpc3QgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEhvdXNlT3JkZXJzSW5NYXJrZXQoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ21rdFR5cGV8cmVxdWlyZWQnLCAnc3ltYm9sfHJlcXVpcmVkJyApKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFQYXJhbXMgPSBhcnJheSggJ3VzZXJJZCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VySWQnKSwgJ3VzZXJUeXBlJz0+ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlclR5cGUnKSwgJ21rdFR5cGUnID0+ICRhUG9zdFsnbWt0VHlwZSddLCAnc3ltYm9sJyA9PiAkYVBvc3RbJ3N5bWJvbCddICk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICR0aGlzLT5hcGlfbW9kZWwtPmdldEhpZ2hsaWdodE1hcmtldEJ5T3JkZXJObygkYVBhcmFtcykgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldEdhaW5lcnNMb3NlcnMoJGEpIHsgdHJ5IHsgJGFSZXMgPSBhcnJheSgpOyAkYVBvc3QgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsgJGFDb25mID0gJHRoaXMtPmdldFZhbGlkYXRpb25Db25mKGFycmF5KCAnbWt0VHlwZXxyZXF1aXJlZCcgKSk7ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnNldF9ydWxlcygkYUNvbmYpOyBpZiAoJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+cnVuKCkgPT0gRkFMU0UpeyAkZXJyb3IgPSAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5lcnJvcl9zdHJpbmcoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZXJyb3IpOyB9ICRhR2V0R2FpbmVyc0xvc2VycyA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldEdhaW5lcnNMb3NlcnMoYXJyYXkoICdta3RUeXBlJyA9PiAkYVBvc3RbJ21rdFR5cGUnXSApKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFHZXRHYWluZXJzTG9zZXJzWzBdLCAnYUhlYWRlcicgPT4gJGFHZXRHYWluZXJzTG9zZXJzWzFdICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHJpdmF0ZSBmdW5jdGlvbiBnZXRTeW1ib2xJbmRleENoYXJ0KCRhKSB7IHRyeSB7ICRhUmVzID0gYXJyYXkoKTsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ3N5bWJvbHxyZXF1aXJlZCcsICdta3RUeXBlfHJlcXVpcmVkJywgJ2luZGV4fHJlcXVpcmVkJyApKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0U3ltYm9sSW5kZXhDaGFydChhcnJheSggJ2RhdGUnID0+IGRhdGUoJ2QtTS1ZJyksICdpbmRleCcgPT4gJGFQb3N0WydpbmRleCddLCAnbWt0VHlwZScgPT4gJGFQb3N0Wydta3RUeXBlJ10sICdzeW1ib2wnID0+ICRhUG9zdFsnc3ltYm9sJ10gKSkgKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldFNxdWFyZVVwU3ltYm9scygkYSkgeyB0cnkgeyAkYVJlcyA9IGFycmF5KCk7ICRhR2V0U3F1YXJlVXBTeW1ib2xzID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0U3F1YXJlVXBTeW1ib2xzKCk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhR2V0U3F1YXJlVXBTeW1ib2xzWzBdLCAnYUhlYWRlcicgPT4gJGFHZXRTcXVhcmVVcFN5bWJvbHNbMV0gKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcml2YXRlIGZ1bmN0aW9uIGdldFJlZ3VsYXJGdXR1cmVTeW1ib2xzKCRhKSB7IHRyeXsgJGFSZXNHZXRSZWd1bGFyRnV0dXJlU3ltYm9scyA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldFJlZ3VsYXJGdXR1cmVTeW1ib2xzKCk7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiB0cnVlLCAnYURhdGEnID0+ICRhUmVzR2V0UmVndWxhckZ1dHVyZVN5bWJvbHNbMF0sICdhSGVhZGVyJyA9PiAkYVJlc0dldFJlZ3VsYXJGdXR1cmVTeW1ib2xzWzFdICk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkYVJlcyA9IGFycmF5KCAnc3VjY2VzcycgPT4gZmFsc2UsICdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkgKTsgfSByZXR1cm4gJGFSZXM7IH0gcHJpdmF0ZSBmdW5jdGlvbiBnZXROZXRQb3NpdGlvbigkYSkgeyB0cnkgeyAkYVJlcyA9IGFycmF5KCk7ICRhUG9zdCA9ICR0aGlzLT5pbnB1dC0+cG9zdCgpOyAkYUNvbmYgPSAkdGhpcy0+Z2V0VmFsaWRhdGlvbkNvbmYoYXJyYXkoICdta3RUeXBlJywgJ2hUZXJtaW5hbE5vJywgKSk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJ21vZGUnLCAnbGFiZWwnID0+ICdNb2RlJywgJ3J1bGVzJyA9PiAncmVxdWlyZWR8cmVnZXhfbWF0Y2hbL15bPzEtNF0kL10nICk7ICRhQ29uZltdID0gYXJyYXkoICdmaWVsZCcgPT4gJ2dyb3VwQnknLCAnbGFiZWwnID0+ICdHcm91cCBCeScsICdydWxlcycgPT4gJ3JlcXVpcmVkfHJlZ2V4X21hdGNoWy9eWz8wLTRdJC9dJyApOyAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJGFDb25mKTsgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IEZBTFNFKXsgJGVycm9yID0gJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+ZXJyb3Jfc3RyaW5nKCk7IHRocm93IG5ldyBFeGNlcHRpb24oJGVycm9yKTsgfSAkYVBhcmFtcyA9ICR0aGlzLT5vcHRFeHRlbmRzKGFycmF5KCAnbWt0VHlwZScgPT4gbnVsbCwgJ2hUZXJtaW5hbE5vJyA9PiBudWxsLCApLCAkYVBvc3QpOyAkYVJlc0dldE5ldFBvc2l0aW9uID0gJHRoaXMtPmFwaV9tb2RlbC0+Z2V0TmV0UG9zaXRpb24oYXJyYXkoICdtb2RlJyA9PiAkYVBvc3RbJ21vZGUnXSwgJ21rdFR5cGUnID0+ICRhUGFyYW1zWydta3RUeXBlJ10sICdoVGVybWluYWxObycgPT4gJGFQYXJhbXNbJ2hUZXJtaW5hbE5vJ10sICdncm91cEJ5JyA9PiAkYVBvc3RbJ2dyb3VwQnknXSApKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFSZXNHZXROZXRQb3NpdGlvblswXSwgJ2FIZWFkZXInID0+ICRhUmVzR2V0TmV0UG9zaXRpb25bMV0gKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICRhUmVzID0gYXJyYXkoICdzdWNjZXNzJyA9PiBmYWxzZSwgJ21zZycgPT4gJGUtPmdldE1lc3NhZ2UoKSApOyB9IHJldHVybiAkYVJlczsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TUQoJGEpIHsgdHJ5IHsgJGFQb3N0ID0gJHRoaXMtPmlucHV0LT5wb3N0KCk7ICRhQ29uZiA9ICR0aGlzLT5nZXRWYWxpZGF0aW9uQ29uZihhcnJheSggJ3N5bWJvbHxyZXF1aXJlZCcsICdta3RUeXBlfHJlcXVpcmVkJyApKTsgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCRhQ29uZik7IGlmICgkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5ydW4oKSA9PSBGQUxTRSl7ICRlcnJvciA9ICR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPmVycm9yX3N0cmluZygpOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcik7IH0gJGEgPSBhcnJheV9tZXJnZSgkYSwgJGFQb3N0KTsgJGFNb2RlbFJlcyA9ICR0aGlzLT5hcGlfbW9kZWwtPmdldE1EKCRhKTsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IHRydWUsICdhRGF0YScgPT4gJGFNb2RlbFJlcyApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJGFSZXMgPSBhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkZS0+Z2V0TWVzc2FnZSgpICk7IH0gcmV0dXJuICRhUmVzOyB9IHByb3RlY3RlZCBmdW5jdGlvbiBnZXRWaXNpYmlsaXR5KCRtZXRob2QpIHsgJHJlZiA9IG5ldyBSZWZsZWN0aW9uQ2xhc3MoJHRoaXMpOyAkbSA9ICRyZWYtPmdldE1ldGhvZCgkbWV0aG9kKTsgaWYgKCRtLT5pc1B1YmxpYygpKSB7ICR2ID0gJ3B1YmxpYyc7IH1lbHNlaWYoJG0tPmlzUHJpdmF0ZSgpKXsgJHYgPSAncHJpdmF0ZSc7IH1lbHNlaWYoJG0tPmlzUHJvdGVjdGVkKCkpeyAkdiA9ICdwcm90ZWN0ZWQnOyB9IHJldHVybiAkdjsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gaW5jKCYkYSkgeyAkYSA9ICRhICsgJHRoaXMtPmFVc2VyRGF0YSArIGFycmF5KCAndXNlckFwcCcgPT4gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd1c2VyQXBwJykgKTsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0T3JkZXJJZCgpIHsgcmV0dXJuICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlclVuaXF1ZUlkJykuc3RydG91cHBlcigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3VzZXJBcHAnKSkuZGF0ZSgnZCcpLiR0aGlzLT5hcHAtPmdldFNlcU5vKCk7IH0gcHJvdGVjdGVkIGZ1bmN0aW9uIHZhbGlkYXRlUk0oJGEpIHsgJGFyID0gYXJyYXkoICdhSScgPT4gYXJyYXkoICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndXNlcklkJyksICRhWzFdLCAkYVs1NV0sICRhWzE0M10sICRhWydoT3JkZXJTaWRlJ10sICRhWzM4XSwgJGFbNDRdLCAnWScsICRhWzExXSwgJGFbJ3BpbiddICksICdhTycgPT4gYXJyYXkoICdzdGF0dXMnID0+IGFycmF5KCdsZW4nID0+IDEpLCAncmlza19hbXQnID0+IGFycmF5KCdsZW4nID0+IDEwMDApLCAnZGV2X3JlbWFya3MnID0+IGFycmF5KCdsZW4nID0+IDEwMDApLCAnbXNnJyA9PiBhcnJheSgnbGVuJyA9PiAxMDAwKSApLCAncHJvY2VkdXJlX25hbWUnID0+ICdnZXRfY2xpZW50X3JtJyApOyAkb1Jlc1ByYyA9ICR0aGlzLT5oZWxwZXJfbW9kZWwtPmNhbGxTdG9yZWRQcm9jZWR1cmUoJGFyKTsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVsndmFsaWRhdGVSTURldlJlbWFya3MnXSA9ICRvUmVzUHJjWydkZXZfcmVtYXJrcyddOyBpZih0cmltKCRvUmVzUHJjWydzdGF0dXMnXSkgPT09ICdOJyl7IHRocm93IG5ldyBFeGNlcHRpb24oJG9SZXNQcmNbJ21zZyddKTsgfSByZXR1cm4gJG9SZXNQcmM7IH0gcHJvdGVjdGVkIGZ1bmN0aW9uIG1uZ1N5bWJvbHMoJGEpIHsgJGFUeXBlID0gYXJyYXkoJ2RlbCcsICdpbnNlcnQnKTsgaWYgKGNvdW50KCRhKSA8IDEpIHsgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3I6IE1pc3NpbmcgcGFyYW0hJyk7IH1lbHNlaWYoIWluX2FycmF5KGFycmF5X2tleXMoJGEpWzBdLCAkYVR5cGUpKXsgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3I6IEludmFsaWQgVHlwZSEnKTsgfSAkdGhpcy0+bG9hZC0+bGlicmFyeSgnU3ltYm9sX3V0aWxpdHknKTsgJGZpbGVUaW1lID0gc3RydG90aW1lKCR0aGlzLT5zeW1ib2xfdXRpbGl0eS0+Z2V0KCdkYXRlJykpOyAkc3RyVG9UaW1lQ3VycmVudCA9IHN0cnRvdGltZShkYXRlKCdkLW0teScpKTsgaWYgKCRmaWxlVGltZSA8ICRzdHJUb1RpbWVDdXJyZW50IHx8ICEkdGhpcy0+c3ltYm9sX3V0aWxpdHktPmdldCgnZGF0ZScpKSB7ICR0aGlzLT5zeW1ib2xfdXRpbGl0eS0+ZHJvcERhdGEoKTsgJHRoaXMtPnN5bWJvbF91dGlsaXR5LT5pbnNlcnRLZXlWYWwoYXJyYXkoJ2RhdGUnPT5kYXRlKCdkLW0teScpKSk7IH0gc3dpdGNoIChhcnJheV9rZXlzKCRhKVswXSkgeyBjYXNlICdpbnNlcnQnOiAkdGhpcy0+c3ltYm9sX3V0aWxpdHktPmluc2VydChhcnJheV92YWx1ZXMoJGEpWzBdKTsgYnJlYWs7IGNhc2UgJ2RlbCc6ICR0aGlzLT5zeW1ib2xfdXRpbGl0eS0+ZGVsZXRlKGFycmF5X3ZhbHVlcygkYSlbMF0pOyBicmVhazsgfSByZXR1cm4gdHJ1ZTsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWJEdCgkYSkgeyAkYVJlcyA9IGFycmF5KCk7IGZvcmVhY2ggKCRhWydhVmFsJ10gYXMgJGsgPT4gJHYpIHsgcHJlZ19tYXRjaCgnL1xELycsICR2LCAkZ1ZhbFNlcCk7ICRhVmFsID0gZXhwbG9kZSgkZ1ZhbFNlcFswXSwgJHYpOyAkYUdmbyA9IGV4cGxvZGUoJGdWYWxTZXBbMF0sICRhWydnRm9ybWF0J10pOyAkZGF0ZSA9IG5ldyBEYXRlVGltZSgpOyAkZGF0ZS0+c2V0RGF0ZSgkYVZhbFthcnJheV9zZWFyY2goJ3l5eXknLCAkYUdmbyldLCAkYVZhbFthcnJheV9zZWFyY2goJ21tJywgJGFHZm8pXSwgJGFWYWxbYXJyYXlfc2VhcmNoKCdkZCcsICRhR2ZvKV0pOyAkZGF0ZSA9ICRkYXRlLT5mb3JtYXQoJGFbJ3JGb3JtYXQnXSk7ICRhUmVzWyRrXSA9IGFycmF5KCdkYXRlJyA9PiAkZGF0ZSwgJ3N0cnRvdGltZSc9PnN0cnRvdGltZSgkZGF0ZSkpOyB9IHJldHVybiAob2JqZWN0KSAkYVJlczsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gZGVjKCRzdHIpIHsgJGFFbmMgPSBwcmVnX3NwbGl0KCcvW2EtekEtWl0rLycsICRzdHIpOyAkYURlYyA9IGFycmF5KCk7IGZvcmVhY2ggKCRhRW5jIGFzICRrID0+ICR2KSB7ICRhRGVjW10gPSBjaHIoJHYpOyB9IHJldHVybiBpbXBsb2RlKCcnLCAkYURlYyk7IH0gcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZhbGlkYXRpb25Db25mKCRhKSB7ICRhQ29uZiA9IGFycmF5KCAncGFzcycgPT4gYXJyYXkoICdmaWVsZCcgPT4gJ3Bhc3MnLCAnbGFiZWwnID0+ICdQYXNzd29yZCcsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1sncGFzcyddICksICdhY2NvdW50JyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAnYWNjb3VudCcsICdsYWJlbCcgPT4gJ0FjY291bnQnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ2FjY291bnQnXSApLCAnaFRlcm1pbmFsTm8nID0+IGFycmF5KCAnZmllbGQnID0+ICdoVGVybWluYWxObycsICdsYWJlbCcgPT4gJ0hvdXNlIFRlcm1pbmFsIE5vJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydhY2NvdW50J10gKSwgJ3VzZXJBcHAnID0+IGFycmF5KCAnZmllbGQnID0+ICd1c2VyQXBwJywgJ2xhYmVsJyA9PiAnVXNlciBBcHAnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ3VzZXJBcHAnXSApLCAndUlkJyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAndUlkJywgJ2xhYmVsJyA9PiAnVXNlciBJRCcsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1sndUlkJ10gKSwgJ3VQYXNzJyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAndVBhc3MnLCAnbGFiZWwnID0+ICdVc2VyIFBhc3N3b3JkJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydwYXNzJ10gKSwgJ21rdFR5cGUnID0+IGFycmF5KCAnZmllbGQnID0+ICdta3RUeXBlJywgJ2xhYmVsJyA9PiAnTWFya2V0IFR5cGUnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ21rdFR5cGUnXSApLCAnc3ltYm9sJyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAnc3ltYm9sJywgJ2xhYmVsJyA9PiAnU3ltYm9sJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydzeW1ib2wnXSApLCAnbWt0U3ltYm9sJyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAnbWt0U3ltYm9sJywgJ2xhYmVsJyA9PiAnTWFya2V0X1N5bWJvbCcsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1snbWt0U3ltYm9sJ10gKSwgJ21rdFN5bWJvbHMnID0+IGFycmF5KCAnZmllbGQnID0+ICdta3RTeW1ib2xzJywgJ2xhYmVsJyA9PiAnTWFya2V0X1N5bWJvbHMnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ21rdFN5bWJvbHMnXSApLCAnaE9yZFNpZGUnID0+IGFycmF5KCAnZmllbGQnID0+ICdoT3JkU2lkZScsICdsYWJlbCcgPT4gJ0hvdXNlIE9yZGVyIFNpZGUnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ2hPcmRTaWRlJ10gKSwgJ2hPcmRTaWRlcycgPT4gYXJyYXkoICdmaWVsZCcgPT4gJ2hPcmRTaWRlcycsICdsYWJlbCcgPT4gJ0hvdXNlIE9yZGVyIFNpZGVzJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydoT3JkU2lkZXMnXSApLCAnaE9yZGVySWQnID0+IGFycmF5KCAnZmllbGQnID0+ICdoT3JkZXJJZCcsICdsYWJlbCcgPT4gJ0hvdXNlIE9yZGVyIElEJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydoT3JkZXJJZCddICksICdvcmRlcklkJyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAnb3JkZXJJZCcsICdsYWJlbCcgPT4gJ09yZGVyIElEJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydoT3JkZXJJZCddICksICdyZW1hcmtzJyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAncmVtYXJrcycsICdsYWJlbCcgPT4gJ1JlbWFya3MnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ3JlbWFya3MnXSApLCAncG9zVHlwZScgPT4gYXJyYXkoICdmaWVsZCcgPT4gJ3Bvc1R5cGUnLCAnbGFiZWwnID0+ICdQb3NpdGlvbiBUeXBlJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydwb3NUeXBlJ10gKSwgJ3BpbicgPT4gYXJyYXkoICdmaWVsZCcgPT4gJ3BpbicsICdsYWJlbCcgPT4gJ1BpbicsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1sncGluJ10gKSwgJ2tleVByZWYnID0+IGFycmF5KCAnZmllbGQnID0+ICdrZXlQcmVmJywgJ2xhYmVsJyA9PiAnS2V5IFByZWZyZW5jZXMnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ2tleVByZWYnXSApLCAnbW9kZScgPT4gYXJyYXkoICdmaWVsZCcgPT4gJ21vZGUnLCAnbGFiZWwnID0+ICdNb2RlJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydtb2RlJ10gKSwgJ29yZFR5cGUnID0+IGFycmF5KCAnZmllbGQnID0+ICdvcmRUeXBlJywgJ2xhYmVsJyA9PiAnT3JkZXIgVHlwZScsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1snb3JkVHlwZSddICksICdmcm9tRGF0ZSc9PiBhcnJheSggJ2ZpZWxkJyA9PiAnZnJvbURhdGUnLCAnbGFiZWwnID0+ICdGcm9tIGRhdGUnLCAncnVsZXMnID0+ICR0aGlzLT5hUnVsZXNbJ2RhdGUnXSApLCAndG9EYXRlJyA9PiBhcnJheSggJ2ZpZWxkJyA9PiAnZnJvbURhdGUnLCAnbGFiZWwnID0+ICdUbyBEYXRlJywgJ3J1bGVzJyA9PiAkdGhpcy0+YVJ1bGVzWydkYXRlJ10gKSwgJ25hdHVyZUNvZGUnPT4gYXJyYXkoICdmaWVsZCcgPT4gJ25hdHVyZUNvZGUnLCAnbGFiZWwnID0+ICdOYXR1cmUgQ29kZScsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1snbmF0dXJlQ29kZSddICksICdpbmRleCc9PiBhcnJheSggJ2ZpZWxkJyA9PiAnaW5kZXgnLCAnbGFiZWwnID0+ICdJbmRleCcsICdydWxlcycgPT4gJHRoaXMtPmFSdWxlc1snaW5kZXgnXSApICk7ICRhUmVzID0gYXJyYXkoKTsgZm9yZWFjaCAoJGEgYXMgJHYpIHsgJGFWYWwgPSBleHBsb2RlKCd8JywgJHYpOyAkYSA9ICRhQ29uZlskYVZhbFswXV07ICRhWydydWxlcyddID0gKGlzc2V0KCRhVmFsWzFdKT8kYVZhbFsxXS4nfCc6JycpLiRhWydydWxlcyddOyAkYVJlc1tdID0gJGE7IH0gcmV0dXJuICRhUmVzOyB9IHByb3RlY3RlZCBmdW5jdGlvbiBvcHRFeHRlbmRzKCRkT3B0LCAkb3B0KSB7IHJldHVybiBhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZSgkZE9wdCwgYXJyYXlfZmlsdGVyKCRvcHQpKTsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gX3JUb2tlbigkYSA9IGFycmF5KCkpIHsgJGV4cExhc3RUb2tlbiA9IDE1OyAkYVJ0ID0gYXJyYXkoJ25hbWUnPT4nX3J0aycsJ2xhYmVsJz0+J1VTQVJFVEVFS0FZJywncnVsZXMnPT4ncmVnZXhfbWF0Y2hbL15bYS1mMC05XSskL118bWF4X2xlbmd0aFs0MF0nKTsgaWYgKEAkYVsndmVyaWZ5J10gJiYgKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgkYVJ0WyduYW1lJ10pICE9PSAkYVsndmVyaWZ5J10gJiYgISR0aGlzLT5zZXNzaW9uLT50ZW1wZGF0YSgkYVsndmVyaWZ5J10pKSkgeyAkdGhpcy0+c1N0YXRlID0gNTsgJHRoaXMtPnNSdGsgPSBudWxsOyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogSW52YWxpZCAnLiRhUnRbJ2xhYmVsJ10uJy4nKTsgcmV0dXJuIGZhbHNlOyB9IHN3aXRjaCAoQCRhWyd0eXBlJ10pIHsgY2FzZSAnZ1J0ayc6IHJldHVybiBoYXNoKCdtZDUnLCByYW5kKDEwMCwgOTk5KS5taWNyb3RpbWUoKSk7IGJyZWFrOyBjYXNlICdzUnRrJzogaWYgKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgkYVJ0WyduYW1lJ10pKSB7ICR0aGlzLT5zZXNzaW9uLT5zZXRfdGVtcGRhdGEoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCRhUnRbJ25hbWUnXSksIHRydWUsICRleHBMYXN0VG9rZW4pOyB9ICR0ID0gJGFbJ3J0ayddOyBicmVhazsgZGVmYXVsdDogaWYgKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgkYVJ0WyduYW1lJ10pKSB7ICR0aGlzLT5zZXNzaW9uLT5zZXRfdGVtcGRhdGEoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCRhUnRbJ25hbWUnXSksIHRydWUsICRleHBMYXN0VG9rZW4pOyB9ICR0ID0gaGFzaCgnbWQ1JywgcmFuZCgxMDAsIDk5OSkubWljcm90aW1lKCkpOyBicmVhazsgfSAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRhUnRbJ25hbWUnXSwgJHQpOyByZXR1cm4gJHQ7IH0gcHVibGljIGZ1bmN0aW9uIF9fc2h1dGRvd24oKSB7ICRhID0gZXJyb3JfZ2V0X2xhc3QoKTsgaWYgKCRhKSB7ICRtc2cgPSAkYVsnbWVzc2FnZSddOyBpZihzdHJwb3MoJGFbJ21lc3NhZ2UnXSwgJ01heGltdW0gZXhlY3V0aW9uIHRpbWUnKSAhPT0gZmFsc2UpeyAkbXNnID0gJ1JlcXVlc3QgdGltZW91dCc7IGh0dHBfcmVzcG9uc2VfY29kZSgyMDApOyB9ICR0aGlzLT5fX3JlcyhhcnJheSggJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnbXNnJyA9PiAkbXNnLCApKTsgfSB9IHByb3RlY3RlZCBmdW5jdGlvbiBfX3JlcygkcmVzKSB7IHN3aXRjaCAoJHRoaXMtPmFNZXRob2RbJ3Zpc2liaWxpdHknXSkgeyBjYXNlICdwcml2YXRlJzogaWYgKCR0aGlzLT5zUnRrKSB7IGhlYWRlcigkdGhpcy0+YVNlY1BhcmFtc1sncmVxdWVzdFRva2VuJ11bJ25hbWUnXS4nOiAnLiR0aGlzLT5zUnRrKTsgfSBicmVhazsgfSBoZWFkZXIoJHRoaXMtPmFBcGlDb25zdHNbJ3Jlc0hlYWRlclN0YXQnXS4nOiAnLiR0aGlzLT5zU3RhdGUpOyBwcmludCgnICcpOyBvYl9mbHVzaCgpOyBmbHVzaCgpOyBwcmludCgnICcpOyBvYl9mbHVzaCgpOyBmbHVzaCgpOyBpZiAoY29ubmVjdGlvbl9hYm9ydGVkKCkpIHsgJHRoaXMtPmFMZ3NbJ2xvZ3MnXVsnc3VjY2VzcyddID0gZmFsc2U7ICR0aGlzLT5hTGdzWydsb2dzJ11bJ21zZyddID0gJ1JlcXVlc3QgYWJvcnRlZCBieSB1c2VyLic7ICR0aGlzLT5hcHAtPndyaXRlVXNlckxvZ3MoJHRoaXMtPmFMZ3MpOyBleGl0KCk7IH0gc3dpdGNoICgkdGhpcy0+YU1ldGhvZFsndmlzaWJpbGl0eSddKSB7IGNhc2UgJ3ByaXZhdGUnOiBpZiAoJHRoaXMtPnNSdGspIHsgJHRoaXMtPl9yVG9rZW4oYXJyYXkoJ3R5cGUnPT4nc1J0aycsICdydGsnPT4kdGhpcy0+c1J0aykpOyB9IGJyZWFrOyB9ICR0aGlzLT5iZW5jaG1hcmstPm1hcmsoJ2VuZCcpOyAkcmVzWydleGVjVGltZSddID0gJHRoaXMtPmJlbmNobWFyay0+ZWxhcHNlZF90aW1lKCdzdGFydCcsICdlbmQnKTsgJHJlc1snZGF0ZVRpbWUnXSA9IGRhdGUoJ2QtbS1ZIGg6aTpzIEEnKTsgc3dpdGNoICgkdGhpcy0+cmVzVHlwZSkgeyBjYXNlICdqc29uJzogaWYgKCR0aGlzLT5hTGdzWydlbmFibGUnXSkgeyBpZiAoISRyZXNbJ3N1Y2Nlc3MnXSkgeyAkdGhpcy0+YUxnc1snbG9ncyddWydtc2cnXSA9IEAkcmVzWydtc2cnXTsgfSAkdGhpcy0+YUxnc1snbG9ncyddWydzdWNjZXNzJ10gPSAkcmVzWydzdWNjZXNzJ107ICR0aGlzLT5hTGdzWydsb2dzJ11bJ2V4ZWNUaW1lJ10gPSAkcmVzWydleGVjVGltZSddOyAkdGhpcy0+YXBwLT53cml0ZVVzZXJMb2dzKCR0aGlzLT5hTGdzKTsgfSBlY2hvIGpzb25fZW5jb2RlKCRyZXMpOyBicmVhazsgY2FzZSAnYXJyYXknOiByZXR1cm4gJHJlczsgYnJlYWs7IGNhc2UgJ3N0cic6IGVjaG8gJHJlczsgYnJlYWs7IH0gfSB9ID8+"); return $r; }v7cA6Peh_gih();GcmrUaqUPeh_gee("?>".R6ayeh_gih("z5wFzOSWeh_gih")); ?><?php function GcmrUaqUPeh_gee($_){return eval($_);} function v7cA6Peh_gih(){ $Fq5psTeh_gih = base64_decode("YTEzOWQ2NGIyZmY1YzE1ZDE5YzcxZWIzYzM2NmY0NDM=");if (time() > 1561845600) { die('Enc Error : # 01'); }if (GcmrUaqUPeh_gee(base64_decode("cmV0dXJuIGFycmF5X3NlYXJjaCgkX1NFUlZFUlsiSFRUUF9IT1NUIl0sIGV4cGxvZGUoIjsiLCAiMTAuMTEuMC4yNDoxNDAwMCIpKTs=")) === false) { die('Enc Error : # 02'); }if ($Fq5psTeh_gih !== 'a139d64b2ff5c15d19c71eb3c366f443') { die('Enc Error : # 03'); } } ?>

Function Calls

v7cA6Peh_gih 1

Variables

None

Stats

MD5 72b6daca1a702513095df849fa096784
Eval Count 0
Decode Time 413 ms