ZGlmZiAtLWdpdCBhL0xpYi90ZXN0L291dHB1dC90ZXN0X3N0cmluZyBiL0xpYi90ZXN0L291dHB1dC90ZXN0X3N0cmluZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI2ZWI2Mi4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC9vdXRwdXQvdGVzdF9zdHJpbmcKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLXRlc3Rfc3RyaW5nCi14eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Ci14eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Onh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg6eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eDp4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkgYi9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkKaW5kZXggYjY0OTE3Yi4uOGEyNjFmNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQpAQCAtMSwxNCArMSwxMyBAQAotIiIiQ29tbW9uIHRlc3RzIHNoYXJlZCBieSB0ZXN0X3N0cmluZyBhbmQgdGVzdF91c2Vyc3RyaW5nIiIiCisiIiIKK0NvbW1vbiB0ZXN0cyBzaGFyZWQgYnkgdGVzdF9zdHIsIHRlc3RfdW5pY29kZSwgdGVzdF91c2Vyc3RyaW5nIGFuZCB0ZXN0X3N0cmluZy4KKyIiIgogCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmVxLCB2ZXJib3NlLCBUZXN0RmFpbGVkLCBoYXZlX3VuaWNvZGUKLQotdHJhbnN0YWJsZSA9ICdcMDAwXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzNyAhIiMkJSZcJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2B4eXpkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5cMTc3XDIwMFwyMDFcMjAyXDIwM1wyMDRcMjA1XDIwNlwyMDdcMjEwXDIxMVwyMTJcMjEzXDIxNFwyMTVcMjE2XDIxN1wyMjBcMjIxXDIyMlwyMjNcMjI0XDIyNVwyMjZcMjI3XDIzMFwyMzFcMjMyXDIzM1wyMzRcMjM1XDIzNlwyMzdcMjQwXDI0MVwyNDJcMjQzXDI0NFwyNDVcMjQ2XDI0N1wyNTBcMjUxXDI1MlwyNTNcMjU0XDI1NVwyNTZcMjU3XDI2MFwyNjFcMjYyXDI2M1wyNjRcMjY1XDI2NlwyNjdcMjcwXDI3MVwyNzJcMjczXDI3NFwyNzVcMjc2XDI3N1wzMDBcMzAxXDMwMlwzMDNcMzA0XDMwNVwzMDZcMzA3XDMxMFwzMTFcMzEyXDMxM1wzMTRcMzE1XDMxNlwzMTdcMzIwXDMyMVwzMjJcMzIzXDMyNFwzMjVcMzI2XDMyN1wzMzBcMzMxXDMzMlwzMzNcMzM0XDMzNVwzMzZcMzM3XDM0MFwzNDFcMzQyXDM0M1wzNDRcMzQ1XDM0NlwzNDdcMzUwXDM1MVwzNTJcMzUzXDM1NFwzNTVcMzU2XDM1N1wzNjBcMzYxXDM2MlwzNjNcMzY0XDM2NVwzNjZcMzY3XDM3MFwzNzFcMzcyXDM3M1wzNzRcMzc1XDM3NlwzNzcnCi0KK2ltcG9ydCB1bml0dGVzdCwgc3RyaW5nLCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBmcm9tIFVzZXJMaXN0IGltcG9ydCBVc2VyTGlzdAogCiBjbGFzcyBTZXF1ZW5jZToKLSAgICBkZWYgX19pbml0X18oc2VsZik6IHNlbGYuc2VxID0gJ3d4eXonCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcT0nd3h5eicpOiBzZWxmLnNlcSA9IHNlcQogICAgIGRlZiBfX2xlbl9fKHNlbGYpOiByZXR1cm4gbGVuKHNlbGYuc2VxKQogICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKTogcmV0dXJuIHNlbGYuc2VxW2ldCiAKQEAgLTE5LDMxMyArMTgsNjEzIEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiBzZWxmLnNlcSA9IFsnYScsICdiJywgJ2MnXQogICAgIGRlZiBfX2xlbl9fKHNlbGYpOiByZXR1cm4gOAogCi1kZWYgcnVuX21vZHVsZV90ZXN0cyh0ZXN0KToKLSAgICAiIiJSdW4gYWxsIHRlc3RzIHRoYXQgZXhlcmNpc2UgYSBmdW5jdGlvbiBpbiB0aGUgc3RyaW5nIG1vZHVsZSIiIgorY2xhc3MgQ29tbW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGlzIHRlc3RjYXNlIGNvbnRhaW5zIHRlc3QgdGhhdCBjYW4gYmUgdXNlZCBpbiBhbGwKKyAgICAjIHN0cmluZ2xpa2UgY2xhc3Nlcy4gQ3VycmVudGx5IHRoaXMgaXMgc3RyLCB1bmljb2RlCisgICAgIyBVc2VyU3RyaW5nIGFuZCB0aGUgc3RyaW5nIG1vZHVsZS4KIAotICAgIHRlc3QoJ2F0b2knLCAiIDEgIiwgMSkKLSAgICB0ZXN0KCdhdG9pJywgIiAxeCIsIFZhbHVlRXJyb3IpCi0gICAgdGVzdCgnYXRvaScsICIgeDEgIiwgVmFsdWVFcnJvcikKLSAgICB0ZXN0KCdhdG9sJywgIiAgMSAgIiwgMUwpCi0gICAgdGVzdCgnYXRvbCcsICIgIDF4ICIsIFZhbHVlRXJyb3IpCi0gICAgdGVzdCgnYXRvbCcsICIgIHgxICIsIFZhbHVlRXJyb3IpCi0gICAgdGVzdCgnYXRvZicsICIgIDEgICIsIDEuMCkKLSAgICB0ZXN0KCdhdG9mJywgIiAgMXggIiwgVmFsdWVFcnJvcikKLSAgICB0ZXN0KCdhdG9mJywgIiAgeDEgIiwgVmFsdWVFcnJvcikKKyAgICAjIFRoZSB0eXBlIHRvIGJlIHRlc3RlZAorICAgICMgQ2hhbmdlIGluIHN1YmNsYXNzZXMgdG8gY2hhbmdlIHRoZSBiZWhhdmlvdXIgb2YgZml4dGVzdHR5cGUoKQorICAgIHR5cGUydGVzdCA9IE5vbmUKIAotICAgIHRlc3QoJ21ha2V0cmFucycsICdhYmMnLCB0cmFuc3RhYmxlLCAneHl6JykKLSAgICB0ZXN0KCdtYWtldHJhbnMnLCAnYWJjJywgVmFsdWVFcnJvciwgJ3h5enEnKQorICAgICMgQWxsIHRlc3RzIHBhc3MgdGhlaXIgYXJndW1lbnRzIHRvIHRoZSB0ZXN0aW5nIG1ldGhvZHMKKyAgICAjIGFzIHN0ciBvYmplY3RzLiBmaXh0ZXN0dHlwZSgpIGNhbiBiZSB1c2VkIHRvIHByb3BhZ2F0ZQorICAgICMgdGhlc2UgYXJndW1lbnRzIHRvIHRoZSBhcHByb3ByaWF0ZSB0eXBlCisgICAgZGVmIGZpeHR5cGUoc2VsZiwgb2JqKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIHN0cik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18udHlwZTJ0ZXN0KG9iaikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgbGlzdCk6CisgICAgICAgICAgICByZXR1cm4gW3NlbGYuZml4dHlwZSh4KSBmb3IgeCBpbiBvYmpdCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIHR1cGxlKToKKyAgICAgICAgICAgIHJldHVybiB0dXBsZShbc2VsZi5maXh0eXBlKHgpIGZvciB4IGluIG9ial0pCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGRpY3QpOgorICAgICAgICAgICAgcmV0dXJuIGRpY3QoWworICAgICAgICAgICAgICAgKHNlbGYuZml4dHlwZShrZXkpLCBzZWxmLmZpeHR5cGUodmFsdWUpKQorICAgICAgICAgICAgICAgZm9yIChrZXksIHZhbHVlKSBpbiBvYmouaXRlcml0ZW1zKCkKKyAgICAgICAgICAgIF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gb2JqCiAKLSAgICAjIGpvaW4gbm93IHdvcmtzIHdpdGggYW55IHNlcXVlbmNlIHR5cGUKLSAgICB0ZXN0KCdqb2luJywgWydhJywgJ2InLCAnYycsICdkJ10sICdhIGIgYyBkJykKLSAgICB0ZXN0KCdqb2luJywgKCdhJywgJ2InLCAnYycsICdkJyksICdhYmNkJywgJycpCi0gICAgdGVzdCgnam9pbicsIFNlcXVlbmNlKCksICd3IHggeSB6JykKLSAgICB0ZXN0KCdqb2luJywgNywgVHlwZUVycm9yKQorICAgICMgY2hlY2sgdGhhdCBvYmplY3QubWV0aG9kKCphcmdzKSByZXR1cm5zIHJlc3VsdAorICAgIGRlZiBjaGVja2VxdWFsKHNlbGYsIHJlc3VsdCwgb2JqZWN0LCBtZXRob2RuYW1lLCAqYXJncyk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuZml4dHlwZShyZXN1bHQpCisgICAgICAgIG9iamVjdCA9IHNlbGYuZml4dHlwZShvYmplY3QpCisgICAgICAgIGFyZ3MgPSBzZWxmLmZpeHR5cGUoYXJncykKKyAgICAgICAgcmVhbHJlc3VsdCA9IGdldGF0dHIob2JqZWN0LCBtZXRob2RuYW1lKSgqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgIHJlYWxyZXN1bHQKKyAgICAgICAgKQorICAgICAgICAjIGlmIHRoZSBvcmlnaW5hbCBpcyByZXR1cm5lZCBtYWtlIHN1cmUgdGhhdAorICAgICAgICAjIHRoaXMgZG9lc24ndCBoYXBwZW4gd2l0aCBzdWJjbGFzc2VzCisgICAgICAgIGlmIG9iamVjdCA9PSByZWFscmVzdWx0OgorICAgICAgICAgICAgY2xhc3Mgc3VidHlwZShzZWxmLl9fY2xhc3NfXy50eXBlMnRlc3QpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIG9iamVjdCA9IHN1YnR5cGUob2JqZWN0KQorICAgICAgICAgICAgcmVhbHJlc3VsdCA9IGdldGF0dHIob2JqZWN0LCBtZXRob2RuYW1lKSgqYXJncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhvYmplY3QgaXMgbm90IHJlYWxyZXN1bHQpCiAKLSAgICB0ZXN0KCdqb2luJywgQmFkU2VxMSgpLCBUeXBlRXJyb3IpCi0gICAgdGVzdCgnam9pbicsIEJhZFNlcTIoKSwgJ2EgYiBjJykKKyAgICAjIGNoZWNrIHRoYXQgb2JqZWN0Lm1ldGhvZCgqYXJncykgcmFpc2VzIGV4YworICAgIGRlZiBjaGVja3JhaXNlcyhzZWxmLCBleGMsIG9iamVjdCwgbWV0aG9kbmFtZSwgKmFyZ3MpOgorICAgICAgICBvYmplY3QgPSBzZWxmLmZpeHR5cGUob2JqZWN0KQorICAgICAgICBhcmdzID0gc2VsZi5maXh0eXBlKGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZXhjLAorICAgICAgICAgICAgZ2V0YXR0cihvYmplY3QsIG1ldGhvZG5hbWUpLAorICAgICAgICAgICAgKmFyZ3MKKyAgICAgICAgKQogCi0gICAgIyB0cnkgYSBmZXcgbG9uZyBvbmVzCi0gICAgcHJpbnQgIjoiLmpvaW4oWyd4JyAqIDEwMF0gKiAxMDApCi0gICAgcHJpbnQgIjoiLmpvaW4oKCd4JyAqIDEwMCwpICogMTAwKQorICAgICMgY2FsbCBvYmplY3QubWV0aG9kKCphcmdzKSB3aXRob3V0IGFueSBjaGVja3MKKyAgICBkZWYgY2hlY2tjYWxsKHNlbGYsIG9iamVjdCwgbWV0aG9kbmFtZSwgKmFyZ3MpOgorICAgICAgICBvYmplY3QgPSBzZWxmLmZpeHR5cGUob2JqZWN0KQorICAgICAgICBhcmdzID0gc2VsZi5maXh0eXBlKGFyZ3MpCisgICAgICAgIGdldGF0dHIob2JqZWN0LCBtZXRob2RuYW1lKSgqYXJncykKKworICAgIGRlZiB0ZXN0X2NhcGl0YWxpemUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnIGhlbGxvICcsICcgaGVsbG8gJywgJ2NhcGl0YWxpemUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ0hlbGxvICcsICdIZWxsbyAnLCdjYXBpdGFsaXplJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdIZWxsbyAnLCAnaGVsbG8gJywnY2FwaXRhbGl6ZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnQWFhYScsICdhYWFhJywgJ2NhcGl0YWxpemUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ0FhYWEnLCAnQWFBYScsICdjYXBpdGFsaXplJykKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ2NhcGl0YWxpemUnLCA0MikKKworICAgIGRlZiB0ZXN0X2NvdW50KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgJ2FhYScsICdjb3VudCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhYWEnLCAnY291bnQnLCAnYicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCAnYWFhJywgJ2NvdW50JywgJ2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2FhYScsICdjb3VudCcsICdiJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDMsICdhYWEnLCAnY291bnQnLCAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWFhJywgJ2NvdW50JywgJ2InKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2FhYScsICdjb3VudCcsICdiJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEsICdhYWEnLCAnY291bnQnLCAnYScsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgJ2FhYScsICdjb3VudCcsICdhJywgLTEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMiwgJ2FhYScsICdjb3VudCcsICdhJywgMCwgLTEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWFhJywgJ2NvdW50JywgJ2EnLCAwLCAtMTApCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdjb3VudCcpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnY291bnQnLCA0MikKKworICAgIGRlZiB0ZXN0X2ZpbmQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWJjZGVmZ2hpYWJjJywgJ2ZpbmQnLCAnYWJjJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDksICdhYmNkZWZnaGlhYmMnLCAnZmluZCcsICdhYmMnLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdhYmNkZWZnaGlhYmMnLCAnZmluZCcsICdkZWYnLCA0KQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnZmluZCcpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnZmluZCcsIDQyKQorCisgICAgZGVmIHRlc3RfcmZpbmQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCg5LCAgJ2FiY2RlZmdoaWFiYycsICdyZmluZCcsICdhYmMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTIsICdhYmNkZWZnaGlhYmMnLCAncmZpbmQnLCAnJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhYmNkZWZnaGlhYmMnLCAncmZpbmQnLCAnYWJjZCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJ2FiY2RlZmdoaWFiYycsICdyZmluZCcsICdhYmN6JykKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3JmaW5kJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdyZmluZCcsIDQyKQorCisgICAgZGVmIHRlc3RfaW5kZXgoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWJjZGVmZ2hpYWJjJywgJ2luZGV4JywgJycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCAnYWJjZGVmZ2hpYWJjJywgJ2luZGV4JywgJ2RlZicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWJjZGVmZ2hpYWJjJywgJ2luZGV4JywgJ2FiYycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCg5LCAnYWJjZGVmZ2hpYWJjJywgJ2luZGV4JywgJ2FiYycsIDEpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnYWJjZGVmZ2hpYWJjJywgJ2luZGV4JywgJ2hpYicpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ2FiY2RlZmdoaWFiJywgJ2luZGV4JywgJ2FiYycsIDEpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ2FiY2RlZmdoaScsICdpbmRleCcsICdnaGknLCA4KQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICdhYmNkZWZnaGknLCAnaW5kZXgnLCAnZ2hpJywgLTEpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdpbmRleCcpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnaW5kZXgnLCA0MikKKworICAgIGRlZiB0ZXN0X3JpbmRleChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEyLCAnYWJjZGVmZ2hpYWJjJywgJ3JpbmRleCcsICcnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgICdhYmNkZWZnaGlhYmMnLCAncmluZGV4JywgJ2RlZicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCg5LCAgJ2FiY2RlZmdoaWFiYycsICdyaW5kZXgnLCAnYWJjJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICAnYWJjZGVmZ2hpYWJjJywgJ3JpbmRleCcsICdhYmMnLCAwLCAtMSkKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICdhYmNkZWZnaGlhYmMnLCAncmluZGV4JywgJ2hpYicpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ2RlZmdoaWFiYycsICdyaW5kZXgnLCAnZGVmJywgMSkKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnZGVmZ2hpYWJjJywgJ3JpbmRleCcsICdhYmMnLCAwLCAtMSkKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnYWJjZGVmZ2hpJywgJ3JpbmRleCcsICdnaGknLCAwLCA4KQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICdhYmNkZWZnaGknLCAncmluZGV4JywgJ2doaScsIDAsIC0xKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAncmluZGV4JykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdyaW5kZXgnLCA0MikKKworICAgIGRlZiB0ZXN0X2xvd2VyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvJywgJ0hlTExvJywgJ2xvd2VyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbycsICdoZWxsbycsICdsb3dlcicpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnbG93ZXInLCA0MikKKworICAgIGRlZiB0ZXN0X3VwcGVyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ0hFTExPJywgJ0hlTExvJywgJ3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdIRUxMTycsICdIRUxMTycsICd1cHBlcicpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAndXBwZXInLCA0MikKKworICAgIGRlZiB0ZXN0X2V4cGFuZHRhYnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJywgOCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICBkZWZcbmcgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYiAgZGVmXG5nICAgaGknLCAnYWJjXHJcbmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycsIDgpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsICdhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJywgJ2V4cGFuZHRhYnMnLCA0KQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnZXhwYW5kdGFicycsIDQyLCA0MikKKworICAgIGRlZiB0ZXN0X3NwbGl0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWyd0aGlzJywgJ2lzJywgJ3RoZScsICdzcGxpdCcsICdmdW5jdGlvbiddLAorICAgICAgICAgICAgJ3RoaXMgaXMgdGhlIHNwbGl0IGZ1bmN0aW9uJywgJ3NwbGl0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYXxifGN8ZCcsICdzcGxpdCcsICd8JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2N8ZCddLCAnYXxifGN8ZCcsICdzcGxpdCcsICd8JywgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiIGMgZCddLCAnYSBiIGMgZCcsICdzcGxpdCcsIE5vbmUsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjIGQnXSwgJ2EgYiBjIGQnLCAnc3BsaXQnLCBOb25lLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhIGIgYyBkJywgJ3NwbGl0JywgTm9uZSwgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYSBiIGMgZCcsICdzcGxpdCcsIE5vbmUsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EgYiBjIGQnXSwgJ2EgYiBjIGQnLCAnc3BsaXQnLCBOb25lLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYyAgZCddLCAnYSAgYiAgYyAgZCcsICdzcGxpdCcsIE5vbmUsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2EgYiBjIGQgJywgJ3NwbGl0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYS8vYi8vYy8vZCcsICdzcGxpdCcsICcvLycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2VuZGNhc2UgJywgJyddLCAnZW5kY2FzZSB0ZXN0JywgJ3NwbGl0JywgJ3Rlc3QnKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnc3BsaXQnLCA0MiwgNDIsIDQyKQorCisgICAgZGVmIHRlc3Rfc3RyaXAoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaGVsbG8nLCAnICAgaGVsbG8gICAnLCAnc3RyaXAnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvICAgJywgJyAgIGhlbGxvICAgJywgJ2xzdHJpcCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnICAgaGVsbG8nLCAnICAgaGVsbG8gICAnLCAncnN0cmlwJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbycsICdoZWxsbycsICdzdHJpcCcpCisKKyAgICBkZWYgdGVzdF9sanVzdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMgICAgICAgJywgJ2FiYycsICdsanVzdCcsIDEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYyAgICcsICdhYmMnLCAnbGp1c3QnLCA2KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYycsICdhYmMnLCAnbGp1c3QnLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYycsICdhYmMnLCAnbGp1c3QnLCAyKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2xqdXN0JykKKworICAgIGRlZiB0ZXN0X3JqdXN0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyAgICAgICBhYmMnLCAnYWJjJywgJ3JqdXN0JywgMTApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnICAgYWJjJywgJ2FiYycsICdyanVzdCcsIDYpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgJ2FiYycsICdyanVzdCcsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgJ2FiYycsICdyanVzdCcsIDIpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAncmp1c3QnKQorCisgICAgZGVmIHRlc3RfY2VudGVyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyAgIGFiYyAgICAnLCAnYWJjJywgJ2NlbnRlcicsIDEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyBhYmMgICcsICdhYmMnLCAnY2VudGVyJywgNikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCAnYWJjJywgJ2NlbnRlcicsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgJ2FiYycsICdjZW50ZXInLCAyKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2NlbnRlcicpCisKKyAgICBkZWYgdGVzdF9zd2FwY2FzZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoRWxsTyBDb01QdVRFclMnLCAnSGVMTG8gY09tcFV0ZVJzJywgJ3N3YXBjYXNlJykKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3N3YXBjYXNlJywgNDIpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ29uZUB0d28hdGhyZWUhJywgJ29uZSF0d28hdGhyZWUhJywgJ3JlcGxhY2UnLCAnIScsICdAJywgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdvbmV0d290aHJlZScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgJyEnLCAnJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdvbmVAdHdvQHRocmVlIScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgJyEnLCAnQCcsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnb25lQHR3b0B0aHJlZUAnLCAnb25lIXR3byF0aHJlZSEnLCAncmVwbGFjZScsICchJywgJ0AnLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ29uZUB0d29AdGhyZWVAJywgJ29uZSF0d28hdGhyZWUhJywgJ3JlcGxhY2UnLCAnIScsICdAJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdvbmUhdHdvIXRocmVlIScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgJyEnLCAnQCcsIDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnb25lQHR3b0B0aHJlZUAnLCAnb25lIXR3byF0aHJlZSEnLCAncmVwbGFjZScsICchJywgJ0AnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ29uZSF0d28hdGhyZWUhJywgJ29uZSF0d28hdGhyZWUhJywgJ3JlcGxhY2UnLCAneCcsICdAJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdvbmUhdHdvIXRocmVlIScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgJ3gnLCAnQCcsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnLWEtYi1jLScsICdhYmMnLCAncmVwbGFjZScsICcnLCAnLScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnLWEtYi1jJywgJ2FiYycsICdyZXBsYWNlJywgJycsICctJywgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCAnYWJjJywgJ3JlcGxhY2UnLCAnJywgJy0nLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJycsICcnLCAncmVwbGFjZScsICcnLCAnJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCAnYWJjJywgJ3JlcGxhY2UnLCAnYWInLCAnLS0nLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYycsICdhYmMnLCAncmVwbGFjZScsICd4eScsICctLScpCisgICAgICAgICMgTmV4dCB0aHJlZSBmb3IgU0YgYnVnIDQyMjA4ODogW09TRjEgYWxwaGFdIHN0cmluZy5yZXBsYWNlKCk7IGRpZWQgd2l0aAorICAgICAgICAjIE1lbW9yeUVycm9yIGR1ZSB0byBlbXB0eSByZXN1bHQgKHBsYXRmb3JtIG1hbGxvYyBpc3N1ZSB3aGVuIHJlcXVlc3RpbmcKKyAgICAgICAgIyAwIGJ5dGVzKS4KKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcnLCAnMTIzJywgJ3JlcGxhY2UnLCAnMTIzJywgJycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnJywgJzEyMzEyMycsICdyZXBsYWNlJywgJzEyMycsICcnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3gnLCAnMTIzeDEyMycsICdyZXBsYWNlJywgJzEyMycsICcnKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAncmVwbGFjZScpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAncmVwbGFjZScsIDQyKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3JlcGxhY2UnLCA0MiwgJ2gnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3JlcGxhY2UnLCAnaCcsIDQyKQorCisgICAgZGVmIHRlc3RfemZpbGwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnMTIzJywgJzEyMycsICd6ZmlsbCcsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnMTIzJywgJzEyMycsICd6ZmlsbCcsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnMDEyMycsICcxMjMnLCAnemZpbGwnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJysxMjMnLCAnKzEyMycsICd6ZmlsbCcsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnKzEyMycsICcrMTIzJywgJ3pmaWxsJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcrMDEyMycsICcrMTIzJywgJ3pmaWxsJywgNSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCctMTIzJywgJy0xMjMnLCAnemZpbGwnLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJy0xMjMnLCAnLTEyMycsICd6ZmlsbCcsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnLTAxMjMnLCAnLTEyMycsICd6ZmlsbCcsIDUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnMDAwJywgJycsICd6ZmlsbCcsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnMzQnLCAnMzQnLCAnemZpbGwnLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJzAwMzQnLCAnMzQnLCAnemZpbGwnLCA0KQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnMTIzJywgJ3pmaWxsJykKKworY2xhc3MgTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3Q6CisgICAgIyBhZGRpdGlvbmFsIHRlc3RzIHRoYXQgb25seSB3b3JrIGZvcgorICAgICMgc3RyaW5nbGlrZSBvYmplY3RzLCBpLmUuIHN0ciwgdW5pY29kZSwgVXNlclN0cmluZworICAgICMgKGJ1dCBub3QgdGhlIHN0cmluZyBtb2R1bGUpCisKKyAgICBkZWYgdGVzdF9pc2xvd2VyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICcnLCAnaXNsb3dlcicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnYScsICdpc2xvd2VyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnQScsICdpc2xvd2VyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnXG4nLCAnaXNsb3dlcicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnYWJjJywgJ2lzbG93ZXInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdhQmMnLCAnaXNsb3dlcicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnYWJjXG4nLCAnaXNsb3dlcicpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2lzbG93ZXInLCA0MikKKworICAgIGRlZiB0ZXN0X2lzdXBwZXIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJycsICdpc3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYScsICdpc3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdBJywgJ2lzdXBwZXInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdcbicsICdpc3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdBQkMnLCAnaXN1cHBlcicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ0FiQycsICdpc3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdBQkNcbicsICdpc3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnaXN1cHBlcicsIDQyKQorCisgICAgZGVmIHRlc3RfaXN0aXRsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnJywgJ2lzdGl0bGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdhJywgJ2lzdGl0bGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ0EnLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ1xuJywgJ2lzdGl0bGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ0EgVGl0bGVjYXNlZCBMaW5lJywgJ2lzdGl0bGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ0FcblRpdGxlY2FzZWQgTGluZScsICdpc3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdBIFRpdGxlY2FzZWQsIExpbmUnLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ05vdCBhIGNhcGl0YWxpemVkIFN0cmluZycsICdpc3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnTm90XHRhIFRpdGxlY2FzZSBTdHJpbmcnLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ05vdC0tYSBUaXRsZWNhc2UgU3RyaW5nJywgJ2lzdGl0bGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdOT1QnLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2lzdGl0bGUnLCA0MikKKworICAgIGRlZiB0ZXN0X2lzc3BhY2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJycsICdpc3NwYWNlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYScsICdpc3NwYWNlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICcgJywgJ2lzc3BhY2UnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ1x0JywgJ2lzc3BhY2UnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ1xyJywgJ2lzc3BhY2UnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ1xuJywgJ2lzc3BhY2UnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJyBcdFxyXG4nLCAnaXNzcGFjZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJyBcdFxyXG5hJywgJ2lzc3BhY2UnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdpc3NwYWNlJywgNDIpCisKKyAgICBkZWYgdGVzdF9pc2FscGhhKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICcnLCAnaXNhbHBoYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnYScsICdpc2FscGhhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdBJywgJ2lzYWxwaGEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdcbicsICdpc2FscGhhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhYmMnLCAnaXNhbHBoYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2FCYzEyMycsICdpc2FscGhhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYWJjXG4nLCAnaXNhbHBoYScpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2lzYWxwaGEnLCA0MikKKworICAgIGRlZiB0ZXN0X2lzYWxudW0oc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJycsICdpc2FsbnVtJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhJywgJ2lzYWxudW0nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ0EnLCAnaXNhbG51bScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ1xuJywgJ2lzYWxudW0nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJzEyM2FiYzQ1NicsICdpc2FsbnVtJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhMWIzYycsICdpc2FsbnVtJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYUJjMDAwICcsICdpc2FsbnVtJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYWJjXG4nLCAnaXNhbG51bScpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2lzYWxudW0nLCA0MikKKworICAgIGRlZiB0ZXN0X2lzZGlnaXQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJycsICdpc2RpZ2l0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYScsICdpc2RpZ2l0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICcwJywgJ2lzZGlnaXQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJzAxMjM0NTY3ODknLCAnaXNkaWdpdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJzAxMjM0NTY3ODlhJywgJ2lzZGlnaXQnKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2lzZGlnaXQnLCA0MikKKworICAgIGRlZiB0ZXN0X3RpdGxlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyBIZWxsbyAnLCAnIGhlbGxvICcsICd0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnSGVsbG8gJywgJ2hlbGxvICcsICd0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnSGVsbG8gJywgJ0hlbGxvICcsICd0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnRm9ybWF0IFRoaXMgQXMgVGl0bGUgU3RyaW5nJywgImZPck1hVCB0aElzIGFTIHRpdExlIFN0cmluZyIsICd0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnRm9ybWF0LFRoaXMtQXMqVGl0bGU7U3RyaW5nJywgImZPck1hVCx0aElzLWFTKnRpdExlO1N0cmluZyIsICd0aXRsZScsICkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdHZXRpbnQnLCAiZ2V0SW50IiwgJ3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICd0aXRsZScsIDQyKQorCisgICAgZGVmIHRlc3Rfc3BsaXRsaW5lcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYWJjJywgJ2RlZicsICcnLCAnZ2hpJ10sICJhYmNcbmRlZlxuXHJnaGkiLCAnc3BsaXRsaW5lcycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2FiYycsICdkZWYnLCAnJywgJ2doaSddLCAiYWJjXG5kZWZcblxyXG5naGkiLCAnc3BsaXRsaW5lcycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2FiYycsICdkZWYnLCAnZ2hpJ10sICJhYmNcbmRlZlxyXG5naGkiLCAnc3BsaXRsaW5lcycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2FiYycsICdkZWYnLCAnZ2hpJ10sICJhYmNcbmRlZlxyXG5naGlcbiIsICdzcGxpdGxpbmVzJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYWJjJywgJ2RlZicsICdnaGknLCAnJ10sICJhYmNcbmRlZlxyXG5naGlcblxyIiwgJ3NwbGl0bGluZXMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycnLCAnYWJjJywgJ2RlZicsICdnaGknLCAnJ10sICJcbmFiY1xuZGVmXHJcbmdoaVxuXHIiLCAnc3BsaXRsaW5lcycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ1xuJywgJ2FiY1xuJywgJ2RlZlxyXG4nLCAnZ2hpXG4nLCAnXHInXSwgIlxuYWJjXG5kZWZcclxuZ2hpXG5cciIsICdzcGxpdGxpbmVzJywgMSkKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdzcGxpdGxpbmVzJywgNDIsIDQyKQorCisgICAgZGVmIHRlc3Rfc3RhcnRzd2l0aChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2hlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2hlbGxvJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdoZWxsbyB3b3JsZCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICcnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2VsbG8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnZWxsbycsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdvJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdvJywgNSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdzdGFydHN3aXRoJywgJycsIDUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnbG8nLCA2KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvd29ybGQnLCAnc3RhcnRzd2l0aCcsICdsb3dvJywgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsb3dvcmxkJywgJ3N0YXJ0c3dpdGgnLCAnbG93bycsIDMsIDcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvd29ybGQnLCAnc3RhcnRzd2l0aCcsICdsb3dvJywgMywgNikKKworICAgICAgICAjIHRlc3QgbmVnYXRpdmUgaW5kaWNlcworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnaGUnLCAwLCAtMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2hlJywgLTUzLCAtMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdoZWxsbycsIDAsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2hlbGxvIHdvcmxkJywgLTEsIC0xMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdlbGxvJywgLTUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdlbGxvJywgLTQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnbycsIC0yKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnbycsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnJywgLTMsIC0zKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2xvJywgLTkpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdzdGFydHN3aXRoJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdzdGFydHN3aXRoJywgNDIpCisKKyAgICBkZWYgdGVzdF9lbmRzd2l0aChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdlbmRzd2l0aCcsICdsbycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgJ2hlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdlbmRzd2l0aCcsICcnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdlbmRzd2l0aCcsICdoZWxsbyB3b3JsZCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnd29ybCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICd3b3JsJywgMywgOSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ3dvcmxkJywgMywgMTIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICdsb3dvJywgMSwgNykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ2xvd28nLCAyLCA3KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnbG93bycsIDMsIDcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnbG93bycsIDQsIDcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnbG93bycsIDMsIDgpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2FiJywgJ2VuZHN3aXRoJywgJ2FiJywgMCwgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYWInLCAnZW5kc3dpdGgnLCAnYWInLCAwLCAwKQorCisgICAgICAgICMgdGVzdCBuZWdhdGl2ZSBpbmRpY2VzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnZW5kc3dpdGgnLCAnbG8nLCAtMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnZW5kc3dpdGgnLCAnaGUnLCAtMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdlbmRzd2l0aCcsICcnLCAtMywgLTMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgJ2hlbGxvIHdvcmxkJywgLTEwLCAtMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICd3b3JsJywgLTYpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICd3b3JsJywgLTUsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnd29ybCcsIC01LCA5KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnd29ybGQnLCAtNywgMTIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICdsb3dvJywgLTk5LCAtMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ2xvd28nLCAtOCwgLTMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICdsb3dvJywgLTcsIC0zKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ2xvd28nLCAzLCAtNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICdsb3dvJywgLTgsIC0yKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnZW5kc3dpdGgnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgNDIpCisKKyAgICBkZWYgdGVzdF9zdHJpcF9hcmdzKHNlbGYpOgorICAgICAgICAjIHN0cmlwL2xzdHJpcC9yc3RyaXAgd2l0aCBOb25lIGFyZworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvJywgJyAgIGhlbGxvICAgJywgJ3N0cmlwJywgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbyAgICcsICcgICBoZWxsbyAgICcsICdsc3RyaXAnLCBOb25lKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyAgIGhlbGxvJywgJyAgIGhlbGxvICAgJywgJ3JzdHJpcCcsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaGVsbG8nLCAnaGVsbG8nLCAnc3RyaXAnLCBOb25lKQorCisgICAgICAgICMgc3RyaXAvbHN0cmlwL3JzdHJpcCB3aXRoIHN0ciBhcmcKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbycsICd4eXp6eWhlbGxveHl6enknLCAnc3RyaXAnLCAneHl6JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsb3h5enp5JywgJ3h5enp5aGVsbG94eXp6eScsICdsc3RyaXAnLCAneHl6JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCd4eXp6eWhlbGxvJywgJ3h5enp5aGVsbG94eXp6eScsICdyc3RyaXAnLCAneHl6JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbycsICdoZWxsbycsICdzdHJpcCcsICd4eXonKQorCisgICAgICAgICMgc3RyaXAvbHN0cmlwL3JzdHJpcCB3aXRoIHVuaWNvZGUgYXJnCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwodW5pY29kZSgnaGVsbG8nLCAnYXNjaWknKSwgJ3h5enp5aGVsbG94eXp6eScsCisgICAgICAgICAgICAgICAgICdzdHJpcCcsIHVuaWNvZGUoJ3h5eicsICdhc2NpaScpKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKHVuaWNvZGUoJ2hlbGxveHl6enknLCAnYXNjaWknKSwgJ3h5enp5aGVsbG94eXp6eScsCisgICAgICAgICAgICAgICAgICdsc3RyaXAnLCB1bmljb2RlKCd4eXonLCAnYXNjaWknKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1bmljb2RlKCd4eXp6eWhlbGxvJywgJ2FzY2lpJyksICd4eXp6eWhlbGxveHl6enknLAorICAgICAgICAgICAgICAgICAncnN0cmlwJywgdW5pY29kZSgneHl6JywgJ2FzY2lpJykpCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwodW5pY29kZSgnaGVsbG8nLCAnYXNjaWknKSwgJ2hlbGxvJywKKyAgICAgICAgICAgICAgICAgJ3N0cmlwJywgdW5pY29kZSgneHl6JywgJ2FzY2lpJykpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdzdHJpcCcsIDQyLCA0MikKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdsc3RyaXAnLCA0MiwgNDIpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAncnN0cmlwJywgNDIsIDQyKQorCisgICAgZGVmIHRlc3RfX19jb250YWluc19fKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJycsICdfX2NvbnRhaW5zX18nLCAnJykgICAgICAgICAjIHZlcmVxKCcnIGluICcnLCBUcnVlKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2FiYycsICdfX2NvbnRhaW5zX18nLCAnJykgICAgICAjIHZlcmVxKCcnIGluICdhYmMnLCBUcnVlKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdhYmMnLCAnX19jb250YWluc19fJywgJ1wwJykgICAjIHZlcmVxKCdcMCcgaW4gJ2FiYycsIEZhbHNlKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ1wwYWJjJywgJ19fY29udGFpbnNfXycsICdcMCcpICAjIHZlcmVxKCdcMCcgaW4gJ1wwYWJjJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhYmNcMCcsICdfX2NvbnRhaW5zX18nLCAnXDAnKSAgIyB2ZXJlcSgnXDAnIGluICdhYmNcMCcsIFRydWUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnXDBhYmMnLCAnX19jb250YWluc19fJywgJ2EnKSAgICMgdmVyZXEoJ2EnIGluICdcMGFiYycsIFRydWUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnYXNkZicsICdfX2NvbnRhaW5zX18nLCAnYXNkZicpICMgdmVyZXEoJ2FzZGYnIGluICdhc2RmJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYXNkJywgJ19fY29udGFpbnNfXycsICdhc2RmJykgIyB2ZXJlcSgnYXNkZicgaW4gJ2FzZCcsIEZhbHNlKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICcnLCAnX19jb250YWluc19fJywgJ2FzZGYnKSAgICAjIHZlcmVxKCdhc2RmJyBpbiAnJywgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9zdWJzY3JpcHQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1J2EnLCAnYWJjJywgJ19fZ2V0aXRlbV9fJywgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKHUnYycsICdhYmMnLCAnX19nZXRpdGVtX18nLCAtMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKHUnYScsICdhYmMnLCAnX19nZXRpdGVtX18nLCAwTCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKHUnYWJjJywgJ2FiYycsICdfX2dldGl0ZW1fXycsIHNsaWNlKDAsIDMpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwodSdhYmMnLCAnYWJjJywgJ19fZ2V0aXRlbV9fJywgc2xpY2UoMCwgMTAwMCkpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1J2EnLCAnYWJjJywgJ19fZ2V0aXRlbV9fJywgc2xpY2UoMCwgMSkpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1JycsICdhYmMnLCAnX19nZXRpdGVtX18nLCBzbGljZSgwLCAwKSkKKyAgICAgICAgIyBGSVhNRSBXaGF0IGFib3V0IG5lZ2F0aXZlIGluZGl6ZXM/IFRoaXMgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBieSBbXSBhbmQgX19nZXRpdGVtX18oc2xpY2UpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnX19nZXRpdGVtX18nLCAnZGVmJykKKworICAgIGRlZiB0ZXN0X3NsaWNlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYycsICdhYmMnLCAnX19nZXRzbGljZV9fJywgMCwgMTAwMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsIDAsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWInLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsIDAsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYmMnLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsIDEsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYicsICdhYmMnLCAnX19nZXRzbGljZV9fJywgMSwgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcnLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsIDIsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnJywgJ2FiYycsICdfX2dldHNsaWNlX18nLCAxMDAwLCAxMDAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJycsICdhYmMnLCAnX19nZXRzbGljZV9fJywgMjAwMCwgMTAwMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcnLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsIDIsIDEpCisgICAgICAgICMgRklYTUUgV2hhdCBhYm91dCBuZWdhdGl2ZSBpbmRpemVzPyBUaGlzIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgYnkgW10gYW5kIF9fZ2V0c2xpY2VfXworCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsICdkZWYnKQorCisgICAgZGVmIHRlc3RfbXVsKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJycsICdhYmMnLCAnX19tdWxfXycsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJycsICdhYmMnLCAnX19tdWxfXycsIDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgJ2FiYycsICdfX211bF9fJywgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNhYmNhYmMnLCAnYWJjJywgJ19fbXVsX18nLCAzKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdfX211bF9fJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnX19tdWxfXycsICcnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKE92ZXJmbG93RXJyb3IsIDEwMDAwKidhYmMnLCAnX19tdWxfXycsIHN5cy5tYXhpbnQpCisKKyAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgorICAgICAgICAjIGpvaW4gbm93IHdvcmtzIHdpdGggYW55IHNlcXVlbmNlIHR5cGUKKyAgICAgICAgIyBtb3ZlZCBoZXJlLCBiZWNhdXNlIHRoZSBhcmd1bWVudCBvcmRlciBpcworICAgICAgICAjIGRpZmZlcmVudCBpbiBzdHJpbmcuam9pbiAoc2VlIHRoZSB0ZXN0IGluCisgICAgICAgICMgdGVzdC50ZXN0X3N0cmluZy5TdHJpbmdUZXN0LnRlc3Rfam9pbikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhIGIgYyBkJywgJyAnLCAnam9pbicsIFsnYScsICdiJywgJ2MnLCAnZCddKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY2QnLCAnJywgJ2pvaW4nLCAoJ2EnLCAnYicsICdjJywgJ2QnKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCd3IHggeSB6JywgJyAnLCAnam9pbicsIFNlcXVlbmNlKCkpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgJ2EnLCAnam9pbicsICgnYWJjJywpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3onLCAnYScsICdqb2luJywgVXNlckxpc3QoWyd6J10pKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKHVuaWNvZGUoJ2EuYi5jJyksIHVuaWNvZGUoJy4nKSwgJ2pvaW4nLCBbJ2EnLCAnYicsICdjJ10pCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwodW5pY29kZSgnYS5iLmMnKSwgJy4nLCAnam9pbicsIFt1bmljb2RlKCdhJyksICdiJywgJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1bmljb2RlKCdhLmIuYycpLCAnLicsICdqb2luJywgWydhJywgdW5pY29kZSgnYicpLCAnYyddKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKHVuaWNvZGUoJ2EuYi5jJyksICcuJywgJ2pvaW4nLCBbJ2EnLCAnYicsIHVuaWNvZGUoJ2MnKV0pCisgICAgICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJy4nLCAnam9pbicsIFsnYScsIHVuaWNvZGUoJ2InKSwgM10pCisgICAgICAgIGZvciBpIGluIFs1LCAyNSwgMTI1XToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgoKCgnYScgKiBpKSArICctJykgKiBpKVs6LTFdLCAnLScsICdqb2luJywKKyAgICAgICAgICAgICAgICAgWydhJyAqIGldICogaSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgoKCgnYScgKiBpKSArICctJykgKiBpKVs6LTFdLCAnLScsICdqb2luJywKKyAgICAgICAgICAgICAgICAgKCdhJyAqIGksKSAqIGkpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICcgJywgJ2pvaW4nLCBCYWRTZXExKCkpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYSBiIGMnLCAnICcsICdqb2luJywgQmFkU2VxMigpKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnICcsICdqb2luJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICcgJywgJ2pvaW4nLCA3KQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyAnLCAnam9pbicsIFNlcXVlbmNlKFs3LCAnaGVsbG8nLCAxMjNMXSkpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0aW5nKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJytoZWxsbysnLCAnKyVzKycsICdfX21vZF9fJywgJ2hlbGxvJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcrMTArJywgJyslZCsnLCAnX19tb2RfXycsIDEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2EnLCAiJWMiLCAnX19tb2RfXycsICJhIikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhJywgIiVjIiwgJ19fbW9kX18nLCAiYSIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnIicsICIlYyIsICdfX21vZF9fJywgMzQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnJCcsICIlYyIsICdfX21vZF9fJywgMzYpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnMTAnLCAiJWQiLCAnX19tb2RfXycsIDEwKQorCisgICAgICAgIGZvciBvcmRpbmFsIGluICgtMTAwLCAweDIwMDAwMCk6CisgICAgICAgICAgICAjIHVuaWNvZGUgcmFpc2VzIFZhbHVlRXJyb3IsIHN0ciByYWlzZXMgT3ZlcmZsb3dFcnJvcgorICAgICAgICAgICAgc2VsZi5jaGVja3JhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvciksICclYycsICdfX21vZF9fJywgb3JkaW5hbCkKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyA0MicsICclM2xkJywgJ19fbW9kX18nLCA0MikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcwMDQyLjAwJywgJyUwNy4yZicsICdfX21vZF9fJywgNDIpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnX19tb2RfXycpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJShmb28pcycsICdfX21vZF9fJywgNDIpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJXMlcycsICdfX21vZF9fJywgKDQyLCkpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJWMnLCAnX19tb2RfXycsIChOb25lLCkpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJyUoZm9vJywgJ19fbW9kX18nLCB7fSkKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclKGZvbylzICUoYmFyKXMnLCAnX19tb2RfXycsICgnZm9vJywgNDIpKQorCisgICAgICAgICMgYXJndW1lbnQgbmFtZXMgd2l0aCBwcm9wZXJseSBuZXN0ZWQgYnJhY2tldHMgYXJlIHN1cHBvcnRlZAorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2JhcicsICclKChmb28pKXMnLCAnX19tb2RfXycsIHsnKGZvbyknOiAnYmFyJ30pCisKKyAgICAgICAgIyAxMDAgaXMgYSBtYWdpYyBudW1iZXIgaW4gUHlVbmljb2RlX0Zvcm1hdCwgdGhpcyBmb3JjZXMgYSByZXNpemUKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwMyonYScrJ3gnLCAnJXN4JywgJ19fbW9kX18nLCAxMDMqJ2EnKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJSpzJywgJ19fbW9kX18nLCAoJ2ZvbycsICdiYXInKSkKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclMTAuKmYnLCAnX19tb2RfXycsICgnZm9vJywgNDIuKSkKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnJTEwJywgJ19fbW9kX18nLCAoNDIsKSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0Zm9ybWF0dGluZyhzZWxmKToKKyAgICAgICAgIyBmbG9hdCBmb3JtYXR0aW5nCisgICAgICAgIGZvciBwcmVjIGluIHhyYW5nZSgxMDApOgorICAgICAgICAgICAgZm9ybWF0ID0gJyUlLiVpZicgJSBwcmVjCisgICAgICAgICAgICB2YWx1ZSA9IDAuMDEKKyAgICAgICAgICAgIGZvciB4IGluIHhyYW5nZSg2MCk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDMuMTQxNTkyNjU1IC8gMy4wICogMTAuMAorICAgICAgICAgICAgICAgICMgVGhlIGZvcm1hdGZsb2F0KCkgY29kZSBpbiBzdHJpbmdvYmplY3QuYyBhbmQKKyAgICAgICAgICAgICAgICAjIHVuaWNvZGVvYmplY3QuYyB1c2VzIGEgMTIwIGJ5dGUgYnVmZmVyIGFuZCBzd2l0Y2hlcyBmcm9tCisgICAgICAgICAgICAgICAgIyAnZicgZm9ybWF0dGluZyB0byAnZycgYXQgcHJlY2lzaW9uIDUwLCBzbyB3ZSBleHBlY3QKKyAgICAgICAgICAgICAgICAjIE92ZXJmbG93RXJyb3JzIGZvciB0aGUgcmFuZ2VzIHggPCA1MCBhbmQgcHJlYyA+PSA2Ny4KKyAgICAgICAgICAgICAgICBpZiB4IDwgNTAgYW5kIHByZWMgPj0gNjc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoT3ZlcmZsb3dFcnJvciwgZm9ybWF0LCAiX19tb2RfXyIsIHZhbHVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tjYWxsKGZvcm1hdCwgIl9fbW9kX18iLCB2YWx1ZSkKKworY2xhc3MgTWl4aW5TdHJTdHJpbmdVc2VyU3RyaW5nVGVzdDoKKyAgICAjIEFkZGl0aW9uYWwgdGVzdHMgZm9yIDhiaXQgc3RyaW5ncywgaS5lLiBzdHIsIFVzZXJTdHJpbmcgYW5kCisgICAgIyB0aGUgc3RyaW5nIG1vZHVsZQorCisgICAgZGVmIHRlc3RfbWFrZXRyYW5zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAnJy5qb2luKG1hcChjaHIsIHhyYW5nZSgyNTYpKSkucmVwbGFjZSgnYWJjJywgJ3h5eicpLAorICAgICAgICAgICBzdHJpbmcubWFrZXRyYW5zKCdhYmMnLCAneHl6JykKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJpbmcubWFrZXRyYW5zLCAnYWJjJywgJ3h5encnKQorCisgICAgZGVmIHRlc3RfdHJhbnNsYXRlKHNlbGYpOgorICAgICAgICB0YWJsZSA9IHN0cmluZy5tYWtldHJhbnMoJ2FiYycsICd4eXonKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3h5enh5eicsICd4eXphYmNkZWYnLCAndHJhbnNsYXRlJywgdGFibGUsICdkZWYnKQorCisgICAgICAgIHRhYmxlID0gc3RyaW5nLm1ha2V0cmFucygnYScsICdBJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdBYmMnLCAnYWJjJywgJ3RyYW5zbGF0ZScsIHRhYmxlKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3h5eicsICd4eXonLCAndHJhbnNsYXRlJywgdGFibGUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgneXonLCAneHl6JywgJ3RyYW5zbGF0ZScsIHRhYmxlLCAneCcpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ3h5eicsICd0cmFuc2xhdGUnLCAndG9vIHNob3J0JywgJ3N0cmlwJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAneHl6JywgJ3RyYW5zbGF0ZScsICd0b28gc2hvcnQnKQogCiAKLWRlZiBydW5fbWV0aG9kX3Rlc3RzKHRlc3QpOgotICAgICIiIlJ1biBhbGwgdGVzdHMgdGhhdCBleGVyY2lzZSBhIG1ldGhvZCBvZiBhIHN0cmluZyBvYmplY3QiIiIKK2NsYXNzIE1peGluU3RyVXNlclN0cmluZ1Rlc3Q6CisgICAgIyBBZGRpdGlvbmFsIHRlc3RzIHRoYXQgb25seSB3b3JrIHdpdGgKKyAgICAjIDhiaXQgY29tcGF0aWJsZSBvYmplY3QsIGkuZS4gc3RyIGFuZCBVc2VyU3RyaW5nCiAKLSAgICB0ZXN0KCdjYXBpdGFsaXplJywgJyBoZWxsbyAnLCAnIGhlbGxvICcpCi0gICAgdGVzdCgnY2FwaXRhbGl6ZScsICdoZWxsbyAnLCAnSGVsbG8gJykKLSAgICB0ZXN0KCdjYXBpdGFsaXplJywgJ2FhYWEnLCAnQWFhYScpCi0gICAgdGVzdCgnY2FwaXRhbGl6ZScsICdBYUFhJywgJ0FhYWEnKQotCi0gICAgdGVzdCgnY291bnQnLCAnYWFhJywgMywgJ2EnKQotICAgIHRlc3QoJ2NvdW50JywgJ2FhYScsIDAsICdiJykKLQotICAgIHRlc3QoJ2ZpbmQnLCAnYWJjZGVmZ2hpYWJjJywgMCwgJ2FiYycpCi0gICAgdGVzdCgnZmluZCcsICdhYmNkZWZnaGlhYmMnLCA5LCAnYWJjJywgMSkKLSAgICB0ZXN0KCdmaW5kJywgJ2FiY2RlZmdoaWFiYycsIC0xLCAnZGVmJywgNCkKLSAgICB0ZXN0KCdyZmluZCcsICdhYmNkZWZnaGlhYmMnLCA5LCAnYWJjJykKLSAgICB0ZXN0KCdsb3dlcicsICdIZUxMbycsICdoZWxsbycpCi0gICAgdGVzdCgnbG93ZXInLCAnaGVsbG8nLCAnaGVsbG8nKQotICAgIHRlc3QoJ3VwcGVyJywgJ0hlTExvJywgJ0hFTExPJykKLSAgICB0ZXN0KCd1cHBlcicsICdIRUxMTycsICdIRUxMTycpCi0KLSAgICB0ZXN0KCd0aXRsZScsICcgaGVsbG8gJywgJyBIZWxsbyAnKQotICAgIHRlc3QoJ3RpdGxlJywgJ2hlbGxvICcsICdIZWxsbyAnKQotICAgIHRlc3QoJ3RpdGxlJywgImZPck1hVCB0aElzIGFTIHRpdExlIFN0cmluZyIsICdGb3JtYXQgVGhpcyBBcyBUaXRsZSBTdHJpbmcnKQotICAgIHRlc3QoJ3RpdGxlJywgImZPck1hVCx0aElzLWFTKnRpdExlO1N0cmluZyIsICdGb3JtYXQsVGhpcy1BcypUaXRsZTtTdHJpbmcnKQotICAgIHRlc3QoJ3RpdGxlJywgImdldEludCIsICdHZXRpbnQnKQotCi0gICAgdGVzdCgnZXhwYW5kdGFicycsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknKQotICAgIHRlc3QoJ2V4cGFuZHRhYnMnLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgOCkKLSAgICB0ZXN0KCdleHBhbmR0YWJzJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnYWJjXHJhYiAgZGVmXG5nICAgaGknLCA0KQotICAgIHRlc3QoJ2V4cGFuZHRhYnMnLCAnYWJjXHJcbmFiXHRkZWZcbmdcdGhpJywgJ2FiY1xyXG5hYiAgZGVmXG5nICAgaGknLCA0KQotCi0gICAgdGVzdCgnaXNsb3dlcicsICdhJywgMSkKLSAgICB0ZXN0KCdpc2xvd2VyJywgJ0EnLCAwKQotICAgIHRlc3QoJ2lzbG93ZXInLCAnXG4nLCAwKQotICAgIHRlc3QoJ2lzbG93ZXInLCAnYWJjJywgMSkKLSAgICB0ZXN0KCdpc2xvd2VyJywgJ2FCYycsIDApCi0gICAgdGVzdCgnaXNsb3dlcicsICdhYmNcbicsIDEpCi0KLSAgICB0ZXN0KCdpc3VwcGVyJywgJ2EnLCAwKQotICAgIHRlc3QoJ2lzdXBwZXInLCAnQScsIDEpCi0gICAgdGVzdCgnaXN1cHBlcicsICdcbicsIDApCi0gICAgdGVzdCgnaXN1cHBlcicsICdBQkMnLCAxKQotICAgIHRlc3QoJ2lzdXBwZXInLCAnQWJDJywgMCkKLSAgICB0ZXN0KCdpc3VwcGVyJywgJ0FCQ1xuJywgMSkKLQotICAgIHRlc3QoJ2lzdGl0bGUnLCAnYScsIDApCi0gICAgdGVzdCgnaXN0aXRsZScsICdBJywgMSkKLSAgICB0ZXN0KCdpc3RpdGxlJywgJ1xuJywgMCkKLSAgICB0ZXN0KCdpc3RpdGxlJywgJ0EgVGl0bGVjYXNlZCBMaW5lJywgMSkKLSAgICB0ZXN0KCdpc3RpdGxlJywgJ0FcblRpdGxlY2FzZWQgTGluZScsIDEpCi0gICAgdGVzdCgnaXN0aXRsZScsICdBIFRpdGxlY2FzZWQsIExpbmUnLCAxKQotICAgIHRlc3QoJ2lzdGl0bGUnLCAnTm90IGEgY2FwaXRhbGl6ZWQgU3RyaW5nJywgMCkKLSAgICB0ZXN0KCdpc3RpdGxlJywgJ05vdFx0YSBUaXRsZWNhc2UgU3RyaW5nJywgMCkKLSAgICB0ZXN0KCdpc3RpdGxlJywgJ05vdC0tYSBUaXRsZWNhc2UgU3RyaW5nJywgMCkKLQotICAgIHRlc3QoJ2lzYWxwaGEnLCAnYScsIDEpCi0gICAgdGVzdCgnaXNhbHBoYScsICdBJywgMSkKLSAgICB0ZXN0KCdpc2FscGhhJywgJ1xuJywgMCkKLSAgICB0ZXN0KCdpc2FscGhhJywgJ2FiYycsIDEpCi0gICAgdGVzdCgnaXNhbHBoYScsICdhQmMxMjMnLCAwKQotICAgIHRlc3QoJ2lzYWxwaGEnLCAnYWJjXG4nLCAwKQotCi0gICAgdGVzdCgnaXNhbG51bScsICdhJywgMSkKLSAgICB0ZXN0KCdpc2FsbnVtJywgJ0EnLCAxKQotICAgIHRlc3QoJ2lzYWxudW0nLCAnXG4nLCAwKQotICAgIHRlc3QoJ2lzYWxudW0nLCAnMTIzYWJjNDU2JywgMSkKLSAgICB0ZXN0KCdpc2FsbnVtJywgJ2ExYjNjJywgMSkKLSAgICB0ZXN0KCdpc2FsbnVtJywgJ2FCYzAwMCAnLCAwKQotICAgIHRlc3QoJ2lzYWxudW0nLCAnYWJjXG4nLCAwKQotCi0gICAgIyBqb2luIG5vdyB3b3JrcyB3aXRoIGFueSBzZXF1ZW5jZSB0eXBlCi0gICAgdGVzdCgnam9pbicsICcgJywgJ2EgYiBjIGQnLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkKLSAgICB0ZXN0KCdqb2luJywgJycsICdhYmNkJywgKCdhJywgJ2InLCAnYycsICdkJykpCi0gICAgdGVzdCgnam9pbicsICcgJywgJ3cgeCB5IHonLCBTZXF1ZW5jZSgpKQotICAgIHRlc3QoJ2pvaW4nLCAnYScsICdhYmMnLCAoJ2FiYycsKSkKLSAgICB0ZXN0KCdqb2luJywgJ2EnLCAneicsIFVzZXJMaXN0KFsneiddKSkKLSAgICBpZiBoYXZlX3VuaWNvZGU6Ci0gICAgICAgIHRlc3QoJ2pvaW4nLCB1bmljb2RlKCcuJyksIHVuaWNvZGUoJ2EuYi5jJyksIFsnYScsICdiJywgJ2MnXSkKLSAgICAgICAgdGVzdCgnam9pbicsICcuJywgdW5pY29kZSgnYS5iLmMnKSwgW3VuaWNvZGUoJ2EnKSwgJ2InLCAnYyddKQotICAgICAgICB0ZXN0KCdqb2luJywgJy4nLCB1bmljb2RlKCdhLmIuYycpLCBbJ2EnLCB1bmljb2RlKCdiJyksICdjJ10pCi0gICAgICAgIHRlc3QoJ2pvaW4nLCAnLicsIHVuaWNvZGUoJ2EuYi5jJyksIFsnYScsICdiJywgdW5pY29kZSgnYycpXSkKLSAgICAgICAgdGVzdCgnam9pbicsICcuJywgVHlwZUVycm9yLCBbJ2EnLCB1bmljb2RlKCdiJyksIDNdKQotICAgIGZvciBpIGluIFs1LCAyNSwgMTI1XToKLSAgICAgICAgdGVzdCgnam9pbicsICctJywgKCgoJ2EnICogaSkgKyAnLScpICogaSlbOi0xXSwKLSAgICAgICAgICAgICBbJ2EnICogaV0gKiBpKQotCi0gICAgdGVzdCgnam9pbicsICcgJywgVHlwZUVycm9yLCBCYWRTZXExKCkpCi0gICAgdGVzdCgnam9pbicsICcgJywgJ2EgYiBjJywgQmFkU2VxMigpKQotCi0gICAgdGVzdCgnc3BsaXRsaW5lcycsICJhYmNcbmRlZlxuXHJnaGkiLCBbJ2FiYycsICdkZWYnLCAnJywgJ2doaSddKQotICAgIHRlc3QoJ3NwbGl0bGluZXMnLCAiYWJjXG5kZWZcblxyXG5naGkiLCBbJ2FiYycsICdkZWYnLCAnJywgJ2doaSddKQotICAgIHRlc3QoJ3NwbGl0bGluZXMnLCAiYWJjXG5kZWZcclxuZ2hpIiwgWydhYmMnLCAnZGVmJywgJ2doaSddKQotICAgIHRlc3QoJ3NwbGl0bGluZXMnLCAiYWJjXG5kZWZcclxuZ2hpXG4iLCBbJ2FiYycsICdkZWYnLCAnZ2hpJ10pCi0gICAgdGVzdCgnc3BsaXRsaW5lcycsICJhYmNcbmRlZlxyXG5naGlcblxyIiwgWydhYmMnLCAnZGVmJywgJ2doaScsICcnXSkKLSAgICB0ZXN0KCdzcGxpdGxpbmVzJywgIlxuYWJjXG5kZWZcclxuZ2hpXG5cciIsIFsnJywgJ2FiYycsICdkZWYnLCAnZ2hpJywgJyddKQotICAgIHRlc3QoJ3NwbGl0bGluZXMnLCAiXG5hYmNcbmRlZlxyXG5naGlcblxyIiwgWydcbicsICdhYmNcbicsICdkZWZcclxuJywgJ2doaVxuJywgJ1xyJ10sIDEpCi0KLSAgICB0ZXN0KCdzcGxpdCcsICd0aGlzIGlzIHRoZSBzcGxpdCBmdW5jdGlvbicsCi0gICAgICAgICBbJ3RoaXMnLCAnaXMnLCAndGhlJywgJ3NwbGl0JywgJ2Z1bmN0aW9uJ10pCi0gICAgdGVzdCgnc3BsaXQnLCAnYXxifGN8ZCcsIFsnYScsICdiJywgJ2MnLCAnZCddLCAnfCcpCi0gICAgdGVzdCgnc3BsaXQnLCAnYXxifGN8ZCcsIFsnYScsICdiJywgJ2N8ZCddLCAnfCcsIDIpCi0gICAgdGVzdCgnc3BsaXQnLCAnYSBiIGMgZCcsIFsnYScsICdiIGMgZCddLCBOb25lLCAxKQotICAgIHRlc3QoJ3NwbGl0JywgJ2EgYiBjIGQnLCBbJ2EnLCAnYicsICdjIGQnXSwgTm9uZSwgMikKLSAgICB0ZXN0KCdzcGxpdCcsICdhIGIgYyBkJywgWydhJywgJ2InLCAnYycsICdkJ10sIE5vbmUsIDMpCi0gICAgdGVzdCgnc3BsaXQnLCAnYSBiIGMgZCcsIFsnYScsICdiJywgJ2MnLCAnZCddLCBOb25lLCA0KQotICAgIHRlc3QoJ3NwbGl0JywgJ2EgYiBjIGQnLCBbJ2EgYiBjIGQnXSwgTm9uZSwgMCkKLSAgICB0ZXN0KCdzcGxpdCcsICdhICBiICBjICBkJywgWydhJywgJ2InLCAnYyAgZCddLCBOb25lLCAyKQotICAgIHRlc3QoJ3NwbGl0JywgJ2EgYiBjIGQgJywgWydhJywgJ2InLCAnYycsICdkJ10pCi0KLSAgICB0ZXN0KCdzdHJpcCcsICcgICBoZWxsbyAgICcsICdoZWxsbycpCi0gICAgdGVzdCgnbHN0cmlwJywgJyAgIGhlbGxvICAgJywgJ2hlbGxvICAgJykKLSAgICB0ZXN0KCdyc3RyaXAnLCAnICAgaGVsbG8gICAnLCAnICAgaGVsbG8nKQotICAgIHRlc3QoJ3N0cmlwJywgJ2hlbGxvJywgJ2hlbGxvJykKLQotICAgICMgc3RyaXAvbHN0cmlwL3JzdHJpcCB3aXRoIE5vbmUgYXJnCi0gICAgdGVzdCgnc3RyaXAnLCAnICAgaGVsbG8gICAnLCAnaGVsbG8nLCBOb25lKQotICAgIHRlc3QoJ2xzdHJpcCcsICcgICBoZWxsbyAgICcsICdoZWxsbyAgICcsIE5vbmUpCi0gICAgdGVzdCgncnN0cmlwJywgJyAgIGhlbGxvICAgJywgJyAgIGhlbGxvJywgTm9uZSkKLSAgICB0ZXN0KCdzdHJpcCcsICdoZWxsbycsICdoZWxsbycsIE5vbmUpCi0KLSAgICAjIHN0cmlwL2xzdHJpcC9yc3RyaXAgd2l0aCBzdHIgYXJnCi0gICAgdGVzdCgnc3RyaXAnLCAneHl6enloZWxsb3h5enp5JywgJ2hlbGxvJywgJ3h5eicpCi0gICAgdGVzdCgnbHN0cmlwJywgJ3h5enp5aGVsbG94eXp6eScsICdoZWxsb3h5enp5JywgJ3h5eicpCi0gICAgdGVzdCgncnN0cmlwJywgJ3h5enp5aGVsbG94eXp6eScsICd4eXp6eWhlbGxvJywgJ3h5eicpCi0gICAgdGVzdCgnc3RyaXAnLCAnaGVsbG8nLCAnaGVsbG8nLCAneHl6JykKLQotICAgICMgc3RyaXAvbHN0cmlwL3JzdHJpcCB3aXRoIHVuaWNvZGUgYXJnCi0gICAgaWYgaGF2ZV91bmljb2RlOgotICAgICAgICB0ZXN0KCdzdHJpcCcsICd4eXp6eWhlbGxveHl6enknLAotICAgICAgICAgICAgIHVuaWNvZGUoJ2hlbGxvJywgJ2FzY2lpJyksIHVuaWNvZGUoJ3h5eicsICdhc2NpaScpKQotICAgICAgICB0ZXN0KCdsc3RyaXAnLCAneHl6enloZWxsb3h5enp5JywKLSAgICAgICAgICAgICB1bmljb2RlKCdoZWxsb3h5enp5JywgJ2FzY2lpJyksIHVuaWNvZGUoJ3h5eicsICdhc2NpaScpKQotICAgICAgICB0ZXN0KCdyc3RyaXAnLCAneHl6enloZWxsb3h5enp5JywKLSAgICAgICAgICAgICB1bmljb2RlKCd4eXp6eWhlbGxvJywgJ2FzY2lpJyksIHVuaWNvZGUoJ3h5eicsICdhc2NpaScpKQotICAgICAgICB0ZXN0KCdzdHJpcCcsICdoZWxsbycsCi0gICAgICAgICAgICAgdW5pY29kZSgnaGVsbG8nLCAnYXNjaWknKSwgdW5pY29kZSgneHl6JywgJ2FzY2lpJykpCi0KLSAgICB0ZXN0KCdzd2FwY2FzZScsICdIZUxMbyBjT21wVXRlUnMnLCAnaEVsbE8gQ29NUHVURXJTJykKLSAgICB0ZXN0KCd0cmFuc2xhdGUnLCAneHl6YWJjZGVmJywgJ3h5enh5eicsIHRyYW5zdGFibGUsICdkZWYnKQotCi0gICAgdGFibGUgPSBzdHJpbmcubWFrZXRyYW5zKCdhJywgJ0EnKQotICAgIHRlc3QoJ3RyYW5zbGF0ZScsICdhYmMnLCAnQWJjJywgdGFibGUpCi0gICAgdGVzdCgndHJhbnNsYXRlJywgJ3h5eicsICd4eXonLCB0YWJsZSkKLSAgICB0ZXN0KCd0cmFuc2xhdGUnLCAneHl6JywgVmFsdWVFcnJvciwgJ3RvbyBzaG9ydCcsICdzdHJpcCcpCi0gICAgdGVzdCgndHJhbnNsYXRlJywgJ3h5eicsIFZhbHVlRXJyb3IsICd0b28gc2hvcnQnKQotCi0gICAgdGVzdCgncmVwbGFjZScsICdvbmUhdHdvIXRocmVlIScsICdvbmVAdHdvIXRocmVlIScsICchJywgJ0AnLCAxKQotICAgIHRlc3QoJ3JlcGxhY2UnLCAnb25lIXR3byF0aHJlZSEnLCAnb25ldHdvdGhyZWUnLCAnIScsICcnKQotICAgIHRlc3QoJ3JlcGxhY2UnLCAnb25lIXR3byF0aHJlZSEnLCAnb25lQHR3b0B0aHJlZSEnLCAnIScsICdAJywgMikKLSAgICB0ZXN0KCdyZXBsYWNlJywgJ29uZSF0d28hdGhyZWUhJywgJ29uZUB0d29AdGhyZWVAJywgJyEnLCAnQCcsIDMpCi0gICAgdGVzdCgncmVwbGFjZScsICdvbmUhdHdvIXRocmVlIScsICdvbmVAdHdvQHRocmVlQCcsICchJywgJ0AnLCA0KQotICAgIHRlc3QoJ3JlcGxhY2UnLCAnb25lIXR3byF0aHJlZSEnLCAnb25lIXR3byF0aHJlZSEnLCAnIScsICdAJywgMCkKLSAgICB0ZXN0KCdyZXBsYWNlJywgJ29uZSF0d28hdGhyZWUhJywgJ29uZUB0d29AdGhyZWVAJywgJyEnLCAnQCcpCi0gICAgdGVzdCgncmVwbGFjZScsICdvbmUhdHdvIXRocmVlIScsICdvbmUhdHdvIXRocmVlIScsICd4JywgJ0AnKQotICAgIHRlc3QoJ3JlcGxhY2UnLCAnb25lIXR3byF0aHJlZSEnLCAnb25lIXR3byF0aHJlZSEnLCAneCcsICdAJywgMikKLSAgICB0ZXN0KCdyZXBsYWNlJywgJ2FiYycsICctYS1iLWMtJywgJycsICctJykKLSAgICB0ZXN0KCdyZXBsYWNlJywgJ2FiYycsICctYS1iLWMnLCAnJywgJy0nLCAzKQotICAgIHRlc3QoJ3JlcGxhY2UnLCAnYWJjJywgJ2FiYycsICcnLCAnLScsIDApCi0gICAgdGVzdCgncmVwbGFjZScsICcnLCAnJywgJycsICcnKQotICAgICMgTmV4dCB0aHJlZSBmb3IgU0YgYnVnIDQyMjA4ODogW09TRjEgYWxwaGFdIHN0cmluZy5yZXBsYWNlKCk7IGRpZWQgd2l0aAotICAgICMgTWVtb3J5RXJyb3IgZHVlIHRvIGVtcHR5IHJlc3VsdCAocGxhdGZvcm0gbWFsbG9jIGlzc3VlIHdoZW4gcmVxdWVzdGluZwotICAgICMgMCBieXRlcykuCi0gICAgdGVzdCgncmVwbGFjZScsICcxMjMnLCAnJywgJzEyMycsICcnKQotICAgIHRlc3QoJ3JlcGxhY2UnLCAnMTIzMTIzJywgJycsICcxMjMnLCAnJykKLSAgICB0ZXN0KCdyZXBsYWNlJywgJzEyM3gxMjMnLCAneCcsICcxMjMnLCAnJykKLQotICAgIHRlc3QoJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nLCAxLCAnaGUnKQotICAgIHRlc3QoJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nLCAxLCAnaGVsbG8nKQotICAgIHRlc3QoJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nLCAwLCAnaGVsbG8gd29ybGQnKQotICAgIHRlc3QoJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nLCAxLCAnJykKLSAgICB0ZXN0KCdzdGFydHN3aXRoJywgJ2hlbGxvJywgMCwgJ2VsbG8nKQotICAgIHRlc3QoJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nLCAxLCAnZWxsbycsIDEpCi0gICAgdGVzdCgnc3RhcnRzd2l0aCcsICdoZWxsbycsIDEsICdvJywgNCkKLSAgICB0ZXN0KCdzdGFydHN3aXRoJywgJ2hlbGxvJywgMCwgJ28nLCA1KQotICAgIHRlc3QoJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nLCAxLCAnJywgNSkKLSAgICB0ZXN0KCdzdGFydHN3aXRoJywgJ2hlbGxvJywgMCwgJ2xvJywgNikKLSAgICB0ZXN0KCdzdGFydHN3aXRoJywgJ2hlbGxvd29ybGQnLCAxLCAnbG93bycsIDMpCi0gICAgdGVzdCgnc3RhcnRzd2l0aCcsICdoZWxsb3dvcmxkJywgMSwgJ2xvd28nLCAzLCA3KQotICAgIHRlc3QoJ3N0YXJ0c3dpdGgnLCAnaGVsbG93b3JsZCcsIDAsICdsb3dvJywgMywgNikKLQotICAgICMgdGVzdCBuZWdhdGl2ZSBpbmRpY2VzIGluIHN0YXJ0c3dpdGgKLSAgICB0ZXN0KCdzdGFydHN3aXRoJywgJ2hlbGxvJywgMSwgJ2hlJywgMCwgLTEpCi0gICAgdGVzdCgnc3RhcnRzd2l0aCcsICdoZWxsbycsIDEsICdoZScsIC01MywgLTEpCi0gICAgdGVzdCgnc3RhcnRzd2l0aCcsICdoZWxsbycsIDAsICdoZWxsbycsIDAsIC0xKQotICAgIHRlc3QoJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nLCAwLCAnaGVsbG8gd29ybGQnLCAtMSwgLTEwKQotICAgIHRlc3QoJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nLCAwLCAnZWxsbycsIC01KQotICAgIHRlc3QoJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nLCAxLCAnZWxsbycsIC00KQotICAgIHRlc3QoJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nLCAwLCAnbycsIC0yKQotICAgIHRlc3QoJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nLCAxLCAnbycsIC0xKQotICAgIHRlc3QoJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nLCAxLCAnJywgLTMsIC0zKQotICAgIHRlc3QoJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nLCAwLCAnbG8nLCAtOSkKLQotICAgIHRlc3QoJ2VuZHN3aXRoJywgJ2hlbGxvJywgMSwgJ2xvJykKLSAgICB0ZXN0KCdlbmRzd2l0aCcsICdoZWxsbycsIDAsICdoZScpCi0gICAgdGVzdCgnZW5kc3dpdGgnLCAnaGVsbG8nLCAxLCAnJykKLSAgICB0ZXN0KCdlbmRzd2l0aCcsICdoZWxsbycsIDAsICdoZWxsbyB3b3JsZCcpCi0gICAgdGVzdCgnZW5kc3dpdGgnLCAnaGVsbG93b3JsZCcsIDAsICd3b3JsJykKLSAgICB0ZXN0KCdlbmRzd2l0aCcsICdoZWxsb3dvcmxkJywgMSwgJ3dvcmwnLCAzLCA5KQotICAgIHRlc3QoJ2VuZHN3aXRoJywgJ2hlbGxvd29ybGQnLCAxLCAnd29ybGQnLCAzLCAxMikKLSAgICB0ZXN0KCdlbmRzd2l0aCcsICdoZWxsb3dvcmxkJywgMSwgJ2xvd28nLCAxLCA3KQotICAgIHRlc3QoJ2VuZHN3aXRoJywgJ2hlbGxvd29ybGQnLCAxLCAnbG93bycsIDIsIDcpCi0gICAgdGVzdCgnZW5kc3dpdGgnLCAnaGVsbG93b3JsZCcsIDEsICdsb3dvJywgMywgNykKLSAgICB0ZXN0KCdlbmRzd2l0aCcsICdoZWxsb3dvcmxkJywgMCwgJ2xvd28nLCA0LCA3KQotICAgIHRlc3QoJ2VuZHN3aXRoJywgJ2hlbGxvd29ybGQnLCAwLCAnbG93bycsIDMsIDgpCi0gICAgdGVzdCgnZW5kc3dpdGgnLCAnYWInLCAwLCAnYWInLCAwLCAxKQotICAgIHRlc3QoJ2VuZHN3aXRoJywgJ2FiJywgMCwgJ2FiJywgMCwgMCkKLQotICAgICMgdGVzdCBuZWdhdGl2ZSBpbmRpY2VzIGluIGVuZHN3aXRoCi0gICAgdGVzdCgnZW5kc3dpdGgnLCAnaGVsbG8nLCAxLCAnbG8nLCAtMikKLSAgICB0ZXN0KCdlbmRzd2l0aCcsICdoZWxsbycsIDAsICdoZScsIC0yKQotICAgIHRlc3QoJ2VuZHN3aXRoJywgJ2hlbGxvJywgMSwgJycsIC0zLCAtMykKLSAgICB0ZXN0KCdlbmRzd2l0aCcsICdoZWxsbycsIDAsICdoZWxsbyB3b3JsZCcsIC0xMCwgLTIpCi0gICAgdGVzdCgnZW5kc3dpdGgnLCAnaGVsbG93b3JsZCcsIDAsICd3b3JsJywgLTYpCi0gICAgdGVzdCgnZW5kc3dpdGgnLCAnaGVsbG93b3JsZCcsIDEsICd3b3JsJywgLTUsIC0xKQotICAgIHRlc3QoJ2VuZHN3aXRoJywgJ2hlbGxvd29ybGQnLCAxLCAnd29ybCcsIC01LCA5KQotICAgIHRlc3QoJ2VuZHN3aXRoJywgJ2hlbGxvd29ybGQnLCAxLCAnd29ybGQnLCAtNywgMTIpCi0gICAgdGVzdCgnZW5kc3dpdGgnLCAnaGVsbG93b3JsZCcsIDEsICdsb3dvJywgLTk5LCAtMykKLSAgICB0ZXN0KCdlbmRzd2l0aCcsICdoZWxsb3dvcmxkJywgMSwgJ2xvd28nLCAtOCwgLTMpCi0gICAgdGVzdCgnZW5kc3dpdGgnLCAnaGVsbG93b3JsZCcsIDEsICdsb3dvJywgLTcsIC0zKQotICAgIHRlc3QoJ2VuZHN3aXRoJywgJ2hlbGxvd29ybGQnLCAwLCAnbG93bycsIDMsIC00KQotICAgIHRlc3QoJ2VuZHN3aXRoJywgJ2hlbGxvd29ybGQnLCAwLCAnbG93bycsIC04LCAtMikKLQotICAgIHRlc3QoJ3pmaWxsJywgJzEyMycsICcxMjMnLCAyKQotICAgIHRlc3QoJ3pmaWxsJywgJzEyMycsICcxMjMnLCAzKQotICAgIHRlc3QoJ3pmaWxsJywgJzEyMycsICcwMTIzJywgNCkKLSAgICB0ZXN0KCd6ZmlsbCcsICcrMTIzJywgJysxMjMnLCAzKQotICAgIHRlc3QoJ3pmaWxsJywgJysxMjMnLCAnKzEyMycsIDQpCi0gICAgdGVzdCgnemZpbGwnLCAnKzEyMycsICcrMDEyMycsIDUpCi0gICAgdGVzdCgnemZpbGwnLCAnLTEyMycsICctMTIzJywgMykKLSAgICB0ZXN0KCd6ZmlsbCcsICctMTIzJywgJy0xMjMnLCA0KQotICAgIHRlc3QoJ3pmaWxsJywgJy0xMjMnLCAnLTAxMjMnLCA1KQotICAgIHRlc3QoJ3pmaWxsJywgJycsICcwMDAnLCAzKQotICAgIHRlc3QoJ3pmaWxsJywgJzM0JywgJzM0JywgMSkKLSAgICB0ZXN0KCd6ZmlsbCcsICczNCcsICcwMDM0JywgNCkKLQotICAgIHRlc3QoJ19fbW9kX18nLCAnKyVzKycsICcraGVsbG8rJywgJ2hlbGxvJykKLSAgICB0ZXN0KCdfX21vZF9fJywgJyslZCsnLCAnKzEwKycsIDEwKQotCi0gICAgIyBFbmNvZGluZy9kZWNvZGluZwotICAgIGNvZGVjcyA9IFsoJ3JvdDEzJywgJ3VyeXliIGpiZXlxJyksCi0gICAgICAgICAgICAgICgnYmFzZTY0JywgJ2FHVnNiRzhnZDI5eWJHUT1cbicpLAotICAgICAgICAgICAgICAoJ2hleCcsICc2ODY1NmM2YzZmMjA3NzZmNzI2YzY0JyksCi0gICAgICAgICAgICAgICgndXUnLCAnYmVnaW4gNjY2IDxkYXRhPlxuKzomNUw7JlxcQD1WXVI7JjAgXG4gXG5lbmRcbicpXQotICAgIGZvciBlbmNvZGluZywgZGF0YSBpbiBjb2RlY3M6Ci0gICAgICAgIHRlc3QoJ2VuY29kZScsICdoZWxsbyB3b3JsZCcsIGRhdGEsIGVuY29kaW5nKQotICAgICAgICB0ZXN0KCdkZWNvZGUnLCBkYXRhLCAnaGVsbG8gd29ybGQnLCBlbmNvZGluZykKLSAgICAjIHpsaWIgaXMgb3B0aW9uYWwsIHNvIHdlIG1ha2UgdGhlIHRlc3Qgb3B0aW9uYWwgdG9vLi4uCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgemxpYgotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIGRhdGEgPSAneFx4OWNceGNiSFx4Y2RceGM5XHhjOVcoXHhjZi9ceGNhSVx4MDFceDAwXHgxYVx4MGJceDA0XScKLSAgICAgICAgdmVyaWZ5KCdoZWxsbyB3b3JsZCcuZW5jb2RlKCd6bGliJykgPT0gZGF0YSkKLSAgICAgICAgdmVyaWZ5KGRhdGEuZGVjb2RlKCd6bGliJykgPT0gJ2hlbGxvIHdvcmxkJykKLQotZGVmIHRlc3RfZXhjZXB0aW9uKGxocywgcmhzLCBtc2cpOgotICAgIHRyeToKLSAgICAgICAgbGhzIGluIHJocwotICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCBtc2cKLQotZGVmIHJ1bl9jb250YWluc190ZXN0cyh0ZXN0KToKLSAgICB0ZXN0KCdfX2NvbnRhaW5zX18nLCAnJywgVHJ1ZSwgJycpICAgICAgICAgIyB2ZXJlcSgnJyBpbiAnJywgVHJ1ZSkKLSAgICB0ZXN0KCdfX2NvbnRhaW5zX18nLCAnYWJjJywgVHJ1ZSwgJycpICAgICAgIyB2ZXJlcSgnJyBpbiAnYWJjJywgVHJ1ZSkKLSAgICB0ZXN0KCdfX2NvbnRhaW5zX18nLCAnYWJjJywgRmFsc2UsICdcMCcpICAgIyB2ZXJlcSgnXDAnIGluICdhYmMnLCBGYWxzZSkKLSAgICB0ZXN0KCdfX2NvbnRhaW5zX18nLCAnXDBhYmMnLCBUcnVlLCAnXDAnKSAgIyB2ZXJlcSgnXDAnIGluICdcMGFiYycsIFRydWUpCi0gICAgdGVzdCgnX19jb250YWluc19fJywgJ2FiY1wwJywgVHJ1ZSwgJ1wwJykgICMgdmVyZXEoJ1wwJyBpbiAnYWJjXDAnLCBUcnVlKQotICAgIHRlc3QoJ19fY29udGFpbnNfXycsICdcMGFiYycsIFRydWUsICdhJykgICAjIHZlcmVxKCdhJyBpbiAnXDBhYmMnLCBUcnVlKQotICAgIHRlc3QoJ19fY29udGFpbnNfXycsICdhc2RmJywgVHJ1ZSwgJ2FzZGYnKSAjIHZlcmVxKCdhc2RmJyBpbiAnYXNkZicsIFRydWUpCi0gICAgdGVzdCgnX19jb250YWluc19fJywgJ2FzZCcsIEZhbHNlLCAnYXNkZicpICMgdmVyZXEoJ2FzZGYnIGluICdhc2QnLCBGYWxzZSkKLSAgICB0ZXN0KCdfX2NvbnRhaW5zX18nLCAnJywgRmFsc2UsICdhc2RmJykgICAgIyB2ZXJlcSgnYXNkZicgaW4gJycsIEZhbHNlKQotCi1kZWYgcnVuX2lucGxhY2VfdGVzdHMoY29uc3RydWN0b3IpOgotICAgICMgVmVyaWZ5IGNsZWFyaW5nIG9mIFNGIGJ1ZyAjNTkyNTczCi0gICAgcyA9IHQgPSBjb25zdHJ1Y3RvcignYWJjJykKLSAgICBzICs9IGNvbnN0cnVjdG9yKCdkZWYnKQotICAgIHZlcmlmeShzICE9IHQsICdpbi1wbGFjZSBjb25jYXRlbmF0ZSBzaG91bGQgY3JlYXRlIGEgbmV3IG9iamVjdCcpCisgICAgZGVmIHRlc3RfZW5jb2RpbmdfZGVjb2Rpbmcoc2VsZik6CisgICAgICAgIGNvZGVjcyA9IFsoJ3JvdDEzJywgJ3VyeXliIGpiZXlxJyksCisgICAgICAgICAgICAgICAgICAoJ2Jhc2U2NCcsICdhR1ZzYkc4Z2QyOXliR1E9XG4nKSwKKyAgICAgICAgICAgICAgICAgICgnaGV4JywgJzY4NjU2YzZjNmYyMDc3NmY3MjZjNjQnKSwKKyAgICAgICAgICAgICAgICAgICgndXUnLCAnYmVnaW4gNjY2IDxkYXRhPlxuKzomNUw7JlxcQD1WXVI7JjAgXG4gXG5lbmRcbicpXQorICAgICAgICBmb3IgZW5jb2RpbmcsIGRhdGEgaW4gY29kZWNzOgorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKGRhdGEsICdoZWxsbyB3b3JsZCcsICdlbmNvZGUnLCBlbmNvZGluZykKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaGVsbG8gd29ybGQnLCBkYXRhLCAnZGVjb2RlJywgZW5jb2RpbmcpCisgICAgICAgICMgemxpYiBpcyBvcHRpb25hbCwgc28gd2UgbWFrZSB0aGUgdGVzdCBvcHRpb25hbCB0b28uLi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHpsaWIKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YSA9ICd4XHg5Y1x4Y2JIXHhjZFx4YzlceGM5VyhceGNmL1x4Y2FJXHgwMVx4MDBceDFhXHgwYlx4MDRdJworICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKGRhdGEsICdoZWxsbyB3b3JsZCcsICdlbmNvZGUnLCAnemxpYicpCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvIHdvcmxkJywgZGF0YSwgJ2RlY29kZScsICd6bGliJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RyLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyNjEwNgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RyLnB5CkBAIC0wLDAgKzEsMjMgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHN0cmluZ190ZXN0cworCisKK2NsYXNzIFN0clRlc3QoCisgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QsCisgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LAorICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVzZXJTdHJpbmdUZXN0CisgICAgKToKKworICAgIHR5cGUydGVzdCA9IHN0cgorCisgICAgIyBXZSBkb24ndCBuZWVkIHRvIHByb3BhZ2F0ZSB0byBzdHIKKyAgICBkZWYgZml4dHlwZShzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4gb2JqCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoU3RyVGVzdCkpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9zdWl0ZShzdWl0ZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkgYi9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQppbmRleCA5N2E3YmRmLi45MTgyMDdhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQpAQCAtMSw4NCArMSwxMDQgQEAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRlc3RTa2lwcGVkCi1mcm9tIHRlc3QgaW1wb3J0IHN0cmluZ190ZXN0cwotaW1wb3J0IHN0cmluZywgc3lzCitpbXBvcnQgdW5pdHRlc3QsIHN0cmluZworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHN0cmluZ190ZXN0cworZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKIAotIyBYWFg6IGtsdWRnZS4uLiBzaG9ydCBjaXJjdWl0IGlmIHN0cmluZ3MgZG9uJ3QgaGF2ZSBtZXRob2RzCi10cnk6Ci0gICAgJycuam9pbgotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIFRlc3RTa2lwcGVkCitjbGFzcyBTdHJpbmdUZXN0KAorICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LAorICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clN0cmluZ1VzZXJTdHJpbmdUZXN0CisgICAgKToKIAotZGVmIHRlc3QobmFtZSwgaW5wdXQsIG91dHB1dCwgKmFyZ3MpOgotICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgIHByaW50ICdzdHJpbmcuJXMlcyA9PyAlcy4uLiAnICUgKG5hbWUsIChpbnB1dCwpICsgYXJncywgb3V0cHV0KSwKLSAgICB0cnk6Ci0gICAgICAgICMgUHJlZmVyIHN0cmluZyBtZXRob2RzIG92ZXIgc3RyaW5nIG1vZHVsZSBmdW5jdGlvbnMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZiA9IGdldGF0dHIoaW5wdXQsIG5hbWUpCi0gICAgICAgICAgICB2YWx1ZSA9IGFwcGx5KGYsIGFyZ3MpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIGYgPSBnZXRhdHRyKHN0cmluZywgbmFtZSkKLSAgICAgICAgICAgIHZhbHVlID0gYXBwbHkoZiwgKGlucHV0LCkgKyBhcmdzKQotICAgIGV4Y2VwdDoKLSAgICAgICAgdmFsdWUgPSBzeXMuZXhjX3R5cGUKLSAgICAgICAgZiA9IG5hbWUKLSAgICBpZiB2YWx1ZSA9PSBvdXRwdXQ6Ci0gICAgICAgICMgaWYgdGhlIG9yaWdpbmFsIGlzIHJldHVybmVkIG1ha2Ugc3VyZSB0aGF0Ci0gICAgICAgICMgdGhpcyBkb2Vzbid0IGhhcHBlbiB3aXRoIHN1YmNsYXNzZXMKLSAgICAgICAgaWYgdmFsdWUgaXMgaW5wdXQ6Ci0gICAgICAgICAgICBjbGFzcyBzc3ViKHN0cik6Ci0gICAgICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NzdWIoJXIpJyAlIHN0ci5fX3JlcHJfXyhzZWxmKQotICAgICAgICAgICAgaW5wdXQgPSBzc3ViKGlucHV0KQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGYgPSBnZXRhdHRyKGlucHV0LCBuYW1lKQotICAgICAgICAgICAgICAgIHZhbHVlID0gYXBwbHkoZiwgYXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICBmID0gZ2V0YXR0cihzdHJpbmcsIG5hbWUpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBhcHBseShmLCAoaW5wdXQsKSArIGFyZ3MpCi0gICAgICAgICAgICBpZiB2YWx1ZSBpcyBpbnB1dDoKLSAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBwcmludCAnbm8nCi0gICAgICAgICAgICAgICAgcHJpbnQgJyonLGYsIGBpbnB1dGAsIGBvdXRwdXRgLCBgdmFsdWVgCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgaWYgdmFsdWUgIT0gb3V0cHV0OgotICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgcHJpbnQgJ25vJwotICAgICAgICBwcmludCBmLCBgaW5wdXRgLCBgb3V0cHV0YCwgYHZhbHVlYAotICAgIGVsc2U6Ci0gICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICBwcmludCAneWVzJworICAgIHR5cGUydGVzdCA9IHN0cgogCi1zdHJpbmdfdGVzdHMucnVuX21vZHVsZV90ZXN0cyh0ZXN0KQotc3RyaW5nX3Rlc3RzLnJ1bl9tZXRob2RfdGVzdHModGVzdCkKLXN0cmluZ190ZXN0cy5ydW5fY29udGFpbnNfdGVzdHModGVzdCkKLXN0cmluZ190ZXN0cy5ydW5faW5wbGFjZV90ZXN0cyhzdHIpCisgICAgZGVmIGNoZWNrZXF1YWwoc2VsZiwgcmVzdWx0LCBvYmplY3QsIG1ldGhvZG5hbWUsICphcmdzKToKKyAgICAgICAgcmVhbHJlc3VsdCA9IGdldGF0dHIoc3RyaW5nLCBtZXRob2RuYW1lKShvYmplY3QsICphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgcmVhbHJlc3VsdAorICAgICAgICApCiAKLXN0cmluZy53aGl0ZXNwYWNlCi1zdHJpbmcubG93ZXJjYXNlCi1zdHJpbmcudXBwZXJjYXNlCisgICAgZGVmIGNoZWNrcmFpc2VzKHNlbGYsIGV4Yywgb2JqZWN0LCBtZXRob2RuYW1lLCAqYXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZXhjLAorICAgICAgICAgICAgZ2V0YXR0cihzdHJpbmcsIG1ldGhvZG5hbWUpLAorICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAgICAgKmFyZ3MKKyAgICAgICAgKQogCi0jIEZsb2F0IGZvcm1hdHRpbmcKLWZvciBwcmVjIGluIHJhbmdlKDEwMCk6Ci0gICAgZm9ybWF0c3RyaW5nID0gJyUlLiVpZicgJSBwcmVjCi0gICAgdmFsdWUgPSAwLjAxCi0gICAgZm9yIHggaW4gcmFuZ2UoNjApOgotICAgICAgICB2YWx1ZSA9IHZhbHVlICogMy4xNDE1OTI2NTUgLyAzLjAgKiAxMC4wCi0gICAgICAgICNwcmludCAnT3ZlcmZsb3cgY2hlY2sgZm9yIHg9JWkgYW5kIHByZWM9JWk6JyAlIFwKLSAgICAgICAgIyAgICAgICh4LCBwcmVjKSwKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0c3RyaW5nICUgdmFsdWUKLSAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6Ci0gICAgICAgICAgICAjIFRoZSBmb3JtYXRmbG9hdCgpIGNvZGUgaW4gc3RyaW5nb2JqZWN0LmMgYW5kCi0gICAgICAgICAgICAjIHVuaWNvZGVvYmplY3QuYyB1c2VzIGEgMTIwIGJ5dGUgYnVmZmVyIGFuZCBzd2l0Y2hlcyBmcm9tCi0gICAgICAgICAgICAjICdmJyBmb3JtYXR0aW5nIHRvICdnJyBhdCBwcmVjaXNpb24gNTAsIHNvIHdlIGV4cGVjdAotICAgICAgICAgICAgIyBPdmVyZmxvd0Vycm9ycyBmb3IgdGhlIHJhbmdlcyB4IDwgNTAgYW5kIHByZWMgPj0gNjcuCi0gICAgICAgICAgICBpZiB4ID49IDUwIG9yIFwKLSAgICAgICAgICAgICAgIHByZWMgPCA2NzoKLSAgICAgICAgICAgICAgICBwcmludCAnKioqIHVuZXhwZWN0ZWQgT3ZlcmZsb3dFcnJvciBmb3IgeD0laSBhbmQgcHJlYz0laScgJSAoeCwgcHJlYykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgI3ByaW50ICdPdmVyZmxvd0Vycm9yJwotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICNwcmludCByZXN1bHQKLSAgICAgICAgICAgIHBhc3MKKyAgICBkZWYgY2hlY2tjYWxsKHNlbGYsIG9iamVjdCwgbWV0aG9kbmFtZSwgKmFyZ3MpOgorICAgICAgICBnZXRhdHRyKHN0cmluZywgbWV0aG9kbmFtZSkob2JqZWN0LCAqYXJncykKKworICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CisgICAgICAgICMgVGhlc2UgYXJlIHRoZSBzYW1lIGNoZWNrcyBhcyBpbiBzdHJpbmdfdGVzdC5PYmplY3RUZXN0LnRlc3Rfam9pbgorICAgICAgICAjIGJ1dCB0aGUgYXJndW1lbnQgb3JkZXIgaXN0IGRpZmZlcmVudAorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2EgYiBjIGQnLCBbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2pvaW4nLCAnICcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjZCcsICgnYScsICdiJywgJ2MnLCAnZCcpLCAnam9pbicsICcnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3cgeCB5IHonLCBzdHJpbmdfdGVzdHMuU2VxdWVuY2UoKSwgJ2pvaW4nLCAnICcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgKCdhYmMnLCksICdqb2luJywgJ2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3onLCBVc2VyTGlzdChbJ3onXSksICdqb2luJywgJ2EnKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKHVuaWNvZGUoJ2EuYi5jJyksIFsnYScsICdiJywgJ2MnXSwgJ2pvaW4nLCB1bmljb2RlKCcuJykpCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwodW5pY29kZSgnYS5iLmMnKSwgW3VuaWNvZGUoJ2EnKSwgJ2InLCAnYyddLCAnam9pbicsICcuJykKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1bmljb2RlKCdhLmIuYycpLCBbJ2EnLCB1bmljb2RlKCdiJyksICdjJ10sICdqb2luJywgJy4nKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKHVuaWNvZGUoJ2EuYi5jJyksIFsnYScsICdiJywgdW5pY29kZSgnYycpXSwgJ2pvaW4nLCAnLicpCisgICAgICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgWydhJywgdW5pY29kZSgnYicpLCAzXSwgJ2pvaW4nLCAnLicpCisgICAgICAgIGZvciBpIGluIFs1LCAyNSwgMTI1XToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgKKyAgICAgICAgICAgICAgICAoKCgnYScgKiBpKSArICctJykgKiBpKVs6LTFdLAorICAgICAgICAgICAgICAgIFsnYScgKiBpXSAqIGksICdqb2luJywgJy0nKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKAorICAgICAgICAgICAgICAgICgoKCdhJyAqIGkpICsgJy0nKSAqIGkpWzotMV0sCisgICAgICAgICAgICAgICAgKCdhJyAqIGksKSAqIGksICdqb2luJywgJy0nKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCBzdHJpbmdfdGVzdHMuQmFkU2VxMSgpLCAnam9pbicsICcgJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhIGIgYycsIHN0cmluZ190ZXN0cy5CYWRTZXEyKCksICdqb2luJywgJyAnKQorCitjbGFzcyBNb2R1bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2F0dHJzKHNlbGYpOgorICAgICAgICBzdHJpbmcud2hpdGVzcGFjZQorICAgICAgICBzdHJpbmcubG93ZXJjYXNlCisgICAgICAgIHN0cmluZy51cHBlcmNhc2UKKyAgICAgICAgc3RyaW5nLmxldHRlcnMKKyAgICAgICAgc3RyaW5nLmRpZ2l0cworICAgICAgICBzdHJpbmcuaGV4ZGlnaXRzCisgICAgICAgIHN0cmluZy5vY3RkaWdpdHMKKyAgICAgICAgc3RyaW5nLnB1bmN0dWF0aW9uCisgICAgICAgIHN0cmluZy5wcmludGFibGUKKworICAgIGRlZiB0ZXN0X2F0b2koc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLmF0b2koIiAxICIpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJpbmcuYXRvaSwgIiAxeCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cmluZy5hdG9pLCAiIHgxICIpCisKKyAgICBkZWYgdGVzdF9hdG9sKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5hdG9sKCIgIDEgICIpLCAxTCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RyaW5nLmF0b2wsICIgIDF4ICIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cmluZy5hdG9sLCAiICB4MSAiKQorCisgICAgZGVmIHRlc3RfYXRvZihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzdHJpbmcuYXRvZigiICAxICAiKSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJpbmcuYXRvZiwgIiAgMXggIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RyaW5nLmF0b2YsICIgIHgxICIpCisKKyAgICBkZWYgdGVzdF9tYWtldHJhbnMoc2VsZik6CisgICAgICAgIHRyYW5zdGFibGUgPSAnXDAwMFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzcgISIjJCUmXCcoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9geHl6ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XDE3N1wyMDBcMjAxXDIwMlwyMDNcMjA0XDIwNVwyMDZcMjA3XDIxMFwyMTFcMjEyXDIxM1wyMTRcMjE1XDIxNlwyMTdcMjIwXDIyMVwyMjJcMjIzXDIyNFwyMjVcMjI2XDIyN1wyMzBcMjMxXDIzMlwyMzNcMjM0XDIzNVwyMzZcMjM3XDI0MFwyNDFcMjQyXDI0M1wyNDRcMjQ1XDI0NlwyNDdcMjUwXDI1MVwyNTJcMjUzXDI1NFwyNTVcMjU2XDI1N1wyNjBcMjYxXDI2MlwyNjNcMjY0XDI2NVwyNjZcMjY3XDI3MFwyNzFcMjcyXDI3M1wyNzRcMjc1XDI3NlwyNzdcMzAwXDMwMVwzMDJcMzAzXDMwNFwzMDVcMzA2XDMwN1wzMTBcMzExXDMxMlwzMTNcMzE0XDMxNVwzMTZcMzE3XDMyMFwzMjFcMzIyXDMyM1wzMjRcMzI1XDMyNlwzMjdcMzMwXDMzMVwzMzJcMzMzXDMzNFwzMzVcMzM2XDMzN1wzNDBcMzQxXDM0MlwzNDNcMzQ0XDM0NVwzNDZcMzQ3XDM1MFwzNTFcMzUyXDM1M1wzNTRcMzU1XDM1NlwzNTdcMzYwXDM2MVwzNjJcMzYzXDM2NFwzNjVcMzY2XDM2N1wzNzBcMzcxXDM3MlwzNzNcMzc0XDM3NVwzNzZcMzc3JworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLm1ha2V0cmFucygnYWJjJywgJ3h5eicpLCB0cmFuc3RhYmxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJpbmcubWFrZXRyYW5zLCAnYWJjJywgJ3h5enEnKQorCisgICAgZGVmIHRlc3RfY2Fwd29yZHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLmNhcHdvcmRzKCdhYmMgZGVmIGdoaScpLCAnQWJjIERlZiBHaGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5jYXB3b3JkcygnYWJjXHRkZWZcbmdoaScpLCAnQWJjIERlZiBHaGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5jYXB3b3JkcygnYWJjXHQgICBkZWYgIFxuZ2hpJyksICdBYmMgRGVmIEdoaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLmNhcHdvcmRzKCdBQkMgREVGIEdISScpLCAnQWJjIERlZiBHaGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5jYXB3b3JkcygnQUJDLURFRi1HSEknLCAnLScpLCAnQWJjLURlZi1HaGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5jYXB3b3JkcygnQUJDLWRlZiBERUYtZ2hpIEdISScpLCAnQWJjLWRlZiBEZWYtZ2hpIEdoaScpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoU3RyaW5nVGVzdCkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoTW9kdWxlVGVzdCkpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9zdWl0ZShzdWl0ZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5IGIvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CmluZGV4IDg1YzM1ODYuLjQzZTJlYmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKQEAgLTYsMTAgKzYsMzIgQEAKIChjKSBDb3B5cmlnaHQgQ05SSSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gTk8gV0FSUkFOVFkuCiAKICIiIiMiCi1pbXBvcnQgdW5pdHRlc3QsIHRlc3QudGVzdF9zdXBwb3J0Ci1pbXBvcnQgc3lzLCBzdHJpbmcsIGNvZGVjcworaW1wb3J0IHVuaXR0ZXN0LCBzeXMsIHN0cmluZywgY29kZWNzLCBuZXcKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCBzdHJpbmdfdGVzdHMKIAotY2xhc3MgVW5pY29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVW5pY29kZVRlc3QoCisgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QsCisgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0CisgICAgKToKKyAgICB0eXBlMnRlc3QgPSB1bmljb2RlCisKKyAgICBkZWYgY2hlY2tlcXVhbG5vZml4KHNlbGYsIHJlc3VsdCwgb2JqZWN0LCBtZXRob2RuYW1lLCAqYXJncyk6CisgICAgICAgIG1ldGhvZCA9IGdldGF0dHIob2JqZWN0LCBtZXRob2RuYW1lKQorICAgICAgICByZWFscmVzdWx0ID0gbWV0aG9kKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxyZXN1bHQsIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUocmVhbHJlc3VsdCkgaXMgdHlwZShyZXN1bHQpKQorCisgICAgICAgICMgaWYgdGhlIG9yaWdpbmFsIGlzIHJldHVybmVkIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgICMgdGhpcyBkb2Vzbid0IGhhcHBlbiB3aXRoIHN1YmNsYXNzZXMKKyAgICAgICAgaWYgcmVhbHJlc3VsdCBpcyBvYmplY3Q6CisgICAgICAgICAgICBjbGFzcyB1c3ViKHVuaWNvZGUpOgorICAgICAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd1c3ViKCVyKScgJSB1bmljb2RlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICBvYmplY3QgPSB1c3ViKG9iamVjdCkKKyAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIob2JqZWN0LCBtZXRob2RuYW1lKQorICAgICAgICAgICAgcmVhbHJlc3VsdCA9IG1ldGhvZCgqYXJncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHJlc3VsdCwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG9iamVjdCBpcyBub3QgcmVhbHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgpAQCAtNDUsMzIxICs2NywxMDMgQEAKICAgICAgICAgICAgIHRlc3RyZXByID0gcmVwcih1Jycuam9pbihtYXAodW5pY2hyLCB4cmFuZ2UoMjU2KSkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0cmVwciwgbGF0aW4xcmVwcikKIAotICAgIGRlZiBjaGVja21ldGhvZChzZWxmLCBtZXRob2QsIGlucHV0LCBvdXRwdXQsICphcmdzKToKLSAgICAgICAgZiA9IGdldGF0dHIoaW5wdXQsIG1ldGhvZCkKLSAgICAgICAgdmFsdWUgPSBmKCphcmdzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgdmFsdWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKG91dHB1dCkgaXMgdHlwZSh2YWx1ZSkpCi0KLSAgICAgICAgIyBpZiB0aGUgb3JpZ2luYWwgaXMgcmV0dXJuZWQgbWFrZSBzdXJlIHRoYXQKLSAgICAgICAgIyB0aGlzIGRvZXNuJ3QgaGFwcGVuIHdpdGggc3ViY2xhc3NlcwotICAgICAgICBpZiB2YWx1ZSBpcyBpbnB1dDoKLSAgICAgICAgICAgIGNsYXNzIHVzdWIodW5pY29kZSk6Ci0gICAgICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3VzdWIoJXIpJyAlIHVuaWNvZGUuX19yZXByX18oc2VsZikKLSAgICAgICAgICAgIGlucHV0ID0gdXN1YihpbnB1dCkKLSAgICAgICAgICAgIGYgPSBnZXRhdHRyKGlucHV0LCBtZXRob2QpCi0gICAgICAgICAgICB2YWx1ZSA9IGYoKmFyZ3MpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgdmFsdWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaW5wdXQgaXMgbm90IHZhbHVlKQotCi0gICAgZGVmIHRlc3RfY2FwaXRhbGl6ZShzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnY2FwaXRhbGl6ZScsIHUnIGhlbGxvICcsIHUnIGhlbGxvICcpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2NhcGl0YWxpemUnLCB1J0hlbGxvICcsIHUnSGVsbG8gJykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnY2FwaXRhbGl6ZScsIHUnaGVsbG8gJywgdSdIZWxsbyAnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdjYXBpdGFsaXplJywgdSdhYWFhJywgdSdBYWFhJykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnY2FwaXRhbGl6ZScsIHUnQWFBYScsIHUnQWFhYScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1J2hlbGxvJy5jYXBpdGFsaXplLCA0MikKLQogICAgIGRlZiB0ZXN0X2NvdW50KHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdjb3VudCcsIHUnYWFhJywgMywgdSdhJykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnY291bnQnLCB1J2FhYScsIDAsIHUnYicpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2NvdW50JywgJ2FhYScsIDMsIHUnYScpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2NvdW50JywgJ2FhYScsIDAsIHUnYicpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2NvdW50JywgdSdhYWEnLCAzLCAnYScpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2NvdW50JywgdSdhYWEnLCAwLCAnYicpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2NvdW50JywgdSdhYWEnLCAwLCAnYicpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2NvdW50JywgdSdhYWEnLCAxLCAnYScsIC0xKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdjb3VudCcsIHUnYWFhJywgMywgJ2EnLCAtMTApCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2NvdW50JywgdSdhYWEnLCAyLCAnYScsIDAsIC0xKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdjb3VudCcsIHUnYWFhJywgMCwgJ2EnLCAwLCAtMTApCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1J2hlbGxvJy5jb3VudCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1J2hlbGxvJy5jb3VudCwgNDIpCi0KLSAgICBkZWYgdGVzdF90aXRsZShzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgndGl0bGUnLCB1JyBoZWxsbyAnLCB1JyBIZWxsbyAnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCd0aXRsZScsIHUnSGVsbG8gJywgdSdIZWxsbyAnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCd0aXRsZScsIHUnaGVsbG8gJywgdSdIZWxsbyAnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCd0aXRsZScsIHUiZk9yTWFUIHRoSXMgYVMgdGl0TGUgU3RyaW5nIiwgdSdGb3JtYXQgVGhpcyBBcyBUaXRsZSBTdHJpbmcnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCd0aXRsZScsIHUiZk9yTWFULHRoSXMtYVMqdGl0TGU7U3RyaW5nIiwgdSdGb3JtYXQsVGhpcy1BcypUaXRsZTtTdHJpbmcnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCd0aXRsZScsIHUiZ2V0SW50IiwgdSdHZXRpbnQnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSdoZWxsbycudGl0bGUsIDQyKQorICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X2NvdW50KHNlbGYpCisgICAgICAgICMgY2hlY2sgbWl4ZWQgYXJndW1lbnQgdHlwZXMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMywgICdhYWEnLCAnY291bnQnLCB1J2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgwLCAgJ2FhYScsICdjb3VudCcsIHUnYicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDMsIHUnYWFhJywgJ2NvdW50JywgICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMCwgdSdhYWEnLCAnY291bnQnLCAgJ2InKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgwLCB1J2FhYScsICdjb3VudCcsICAnYicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDEsIHUnYWFhJywgJ2NvdW50JywgICdhJywgLTEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDMsIHUnYWFhJywgJ2NvdW50JywgICdhJywgLTEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgyLCB1J2FhYScsICdjb3VudCcsICAnYScsIDAsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgwLCB1J2FhYScsICdjb3VudCcsICAnYScsIDAsIC0xMCkKIAogICAgIGRlZiB0ZXN0X2ZpbmQoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2ZpbmQnLCB1J2FiY2RlZmdoaWFiYycsIDAsIHUnYWJjJykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnZmluZCcsIHUnYWJjZGVmZ2hpYWJjJywgOSwgdSdhYmMnLCAxKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdmaW5kJywgdSdhYmNkZWZnaGlhYmMnLCAtMSwgdSdkZWYnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgwLCAgdSdhYmNkZWZnaGlhYmMnLCAnZmluZCcsIHUnYWJjJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoOSwgIHUnYWJjZGVmZ2hpYWJjJywgJ2ZpbmQnLCB1J2FiYycsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KC0xLCB1J2FiY2RlZmdoaWFiYycsICdmaW5kJywgdSdkZWYnLCA0KQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSdoZWxsbycuZmluZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1J2hlbGxvJy5maW5kLCA0MikKIAogICAgIGRlZiB0ZXN0X3JmaW5kKHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyZmluZCcsIHUnYWJjZGVmZ2hpYWJjJywgOSwgdSdhYmMnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyZmluZCcsICdhYmNkZWZnaGlhYmMnLCA5LCB1J2FiYycpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3JmaW5kJywgJ2FiY2RlZmdoaWFiYycsIDEyLCB1JycpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3JmaW5kJywgdSdhYmNkZWZnaGlhYmMnLCAxMiwgJycpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3JmaW5kJywgdSdhYmNkZWZnaGlhYmMnLCAxMiwgdScnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSdoZWxsbycucmZpbmQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSdoZWxsbycucmZpbmQsIDQyKQorICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X3JmaW5kKHNlbGYpCisgICAgICAgICMgY2hlY2sgbWl4ZWQgYXJndW1lbnQgdHlwZXMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoOSwgICAnYWJjZGVmZ2hpYWJjJywgJ3JmaW5kJywgdSdhYmMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgxMiwgICdhYmNkZWZnaGlhYmMnLCAncmZpbmQnLCB1JycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDEyLCB1J2FiY2RlZmdoaWFiYycsICdyZmluZCcsICAnJykKIAogICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpbmRleCcsIHUnYWJjZGVmZ2hpYWJjJywgMCwgdScnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpbmRleCcsIHUnYWJjZGVmZ2hpYWJjJywgMywgdSdkZWYnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpbmRleCcsIHUnYWJjZGVmZ2hpYWJjJywgMCwgdSdhYmMnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpbmRleCcsIHUnYWJjZGVmZ2hpYWJjJywgOSwgdSdhYmMnLCAxKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUnYWJjZGVmZ2hpYWJjJy5pbmRleCwgdSdoaWInKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1J2FiY2RlZmdoaWFiJy5pbmRleCwgdSdhYmMnLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1J2FiY2RlZmdoaScuaW5kZXgsIHUnZ2hpJywgOCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSdhYmNkZWZnaGknLmluZGV4LCB1J2doaScsIC0xKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSdoZWxsbycuaW5kZXgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSdoZWxsbycuaW5kZXgsIDQyKQorICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X2luZGV4KHNlbGYpCisgICAgICAgICMgY2hlY2sgbWl4ZWQgYXJndW1lbnQgdHlwZXMKKyAgICAgICAgZm9yICh0MSwgdDIpIGluICgoc3RyLCB1bmljb2RlKSwgKHVuaWNvZGUsIHN0cikpOgorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMCwgdDEoJ2FiY2RlZmdoaWFiYycpLCAnaW5kZXgnLCAgdDIoJycpKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMywgdDEoJ2FiY2RlZmdoaWFiYycpLCAnaW5kZXgnLCAgdDIoJ2RlZicpKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMCwgdDEoJ2FiY2RlZmdoaWFiYycpLCAnaW5kZXgnLCAgdDIoJ2FiYycpKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoOSwgdDEoJ2FiY2RlZmdoaWFiYycpLCAnaW5kZXgnLCAgdDIoJ2FiYycpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdDEoJ2FiY2RlZmdoaWFiYycpLmluZGV4LCB0MignaGliJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0MSgnYWJjZGVmZ2hpYWInKS5pbmRleCwgIHQyKCdhYmMnKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQxKCdhYmNkZWZnaGknKS5pbmRleCwgIHQyKCdnaGknKSwgOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQxKCdhYmNkZWZnaGknKS5pbmRleCwgIHQyKCdnaGknKSwgLTEpCiAKICAgICBkZWYgdGVzdF9yaW5kZXgoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3JpbmRleCcsIHUnYWJjZGVmZ2hpYWJjJywgMTIsIHUnJykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgncmluZGV4JywgdSdhYmNkZWZnaGlhYmMnLCAzLCB1J2RlZicpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3JpbmRleCcsIHUnYWJjZGVmZ2hpYWJjJywgOSwgdSdhYmMnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyaW5kZXgnLCB1J2FiY2RlZmdoaWFiYycsIDAsIHUnYWJjJywgMCwgLTEpCisgICAgICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LnRlc3RfcmluZGV4KHNlbGYpCisgICAgICAgICMgY2hlY2sgbWl4ZWQgYXJndW1lbnQgdHlwZXMKKyAgICAgICAgZm9yICh0MSwgdDIpIGluICgoc3RyLCB1bmljb2RlKSwgKHVuaWNvZGUsIHN0cikpOgorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMTIsIHQxKCdhYmNkZWZnaGlhYmMnKSwgJ3JpbmRleCcsICB0MignJykpCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgzLCAgdDEoJ2FiY2RlZmdoaWFiYycpLCAncmluZGV4JywgIHQyKCdkZWYnKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDksICB0MSgnYWJjZGVmZ2hpYWJjJyksICdyaW5kZXgnLCAgdDIoJ2FiYycpKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMCwgIHQxKCdhYmNkZWZnaGlhYmMnKSwgJ3JpbmRleCcsICB0MignYWJjJyksIDAsIC0xKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUnYWJjZGVmZ2hpYWJjJy5yaW5kZXgsIHUnaGliJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSdkZWZnaGlhYmMnLnJpbmRleCwgdSdkZWYnLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1J2RlZmdoaWFiYycucmluZGV4LCB1J2FiYycsIDAsIC0xKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1J2FiY2RlZmdoaScucmluZGV4LCB1J2doaScsIDAsIDgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUnYWJjZGVmZ2hpJy5yaW5kZXgsIHUnZ2hpJywgMCwgLTEpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1J2hlbGxvJy5yaW5kZXgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSdoZWxsbycucmluZGV4LCA0MikKLQotICAgIGRlZiB0ZXN0X2xvd2VyKHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdsb3dlcicsIHUnSGVMTG8nLCB1J2hlbGxvJykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnbG93ZXInLCB1J2hlbGxvJywgdSdoZWxsbycpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1ImhlbGxvIi5sb3dlciwgNDIpCi0KLSAgICBkZWYgdGVzdF91cHBlcihzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgndXBwZXInLCB1J0hlTExvJywgdSdIRUxMTycpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3VwcGVyJywgdSdIRUxMTycsIHUnSEVMTE8nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSdoZWxsbycudXBwZXIsIDQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdDEoJ2FiY2RlZmdoaWFiYycpLnJpbmRleCwgIHQyKCdoaWInKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQxKCdkZWZnaGlhYmMnKS5yaW5kZXgsICB0MignZGVmJyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0MSgnZGVmZ2hpYWJjJykucmluZGV4LCAgdDIoJ2FiYycpLCAwLCAtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQxKCdhYmNkZWZnaGknKS5yaW5kZXgsICB0MignZ2hpJyksIDAsIDgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0MSgnYWJjZGVmZ2hpJykucmluZGV4LCAgdDIoJ2doaScpLCAwLCAtMSkKIAogICAgIGRlZiB0ZXN0X3RyYW5zbGF0ZShzZWxmKToKLSAgICAgICAgaWYgMDoKLSAgICAgICAgICAgIHRyYW5zdGFibGUgPSAnXDAwMFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzcgISIjJCUmXCcoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9geHl6ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XDE3N1wyMDBcMjAxXDIwMlwyMDNcMjA0XDIwNVwyMDZcMjA3XDIxMFwyMTFcMjEyXDIxM1wyMTRcMjE1XDIxNlwyMTdcMjIwXDIyMVwyMjJcMjIzXDIyNFwyMjVcMjI2XDIyN1wyMzBcMjMxXDIzMlwyMzNcMjM0XDIzNVwyMzZcMjM3XDI0MFwyNDFcMjQyXDI0M1wyNDRcMjQ1XDI0NlwyNDdcMjUwXDI1MVwyNTJcMjUzXDI1NFwyNTVcMjU2XDI1N1wyNjBcMjYxXDI2MlwyNjNcMjY0XDI2NVwyNjZcMjY3XDI3MFwyNzFcMjcyXDI3M1wyNzRcMjc1XDI3NlwyNzdcMzAwXDMwMVwzMDJcMzAzXDMwNFwzMDVcMzA2XDMwN1wzMTBcMzExXDMxMlwzMTNcMzE0XDMxNVwzMTZcMzE3XDMyMFwzMjFcMzIyXDMyM1wzMjRcMzI1XDMyNlwzMjdcMzMwXDMzMVwzMzJcMzMzXDMzNFwzMzVcMzM2XDMzN1wzNDBcMzQxXDM0MlwzNDNcMzQ0XDM0NVwzNDZcMzQ3XDM1MFwzNTFcMzUyXDM1M1wzNTRcMzU1XDM1NlwzNTdcMzYwXDM2MVwzNjJcMzYzXDM2NFwzNjVcMzY2XDM2N1wzNzBcMzcxXDM3MlwzNzNcMzc0XDM3NVwzNzZcMzc3JwotCi0gICAgICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdtYWtldHJhbnMnLCB1J2FiYycsIHRyYW5zdGFibGUsIHUneHl6JykKLSAgICAgICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ21ha2V0cmFucycsIHUnYWJjJywgVmFsdWVFcnJvciwgdSd4eXpxJykKLQotICAgICAgICAgICAgc2VsZi5jaGVja21ldGhvZCgndHJhbnNsYXRlJywgdSd4eXphYmNkZWYnLCB1J3h5enh5eicsIHRyYW5zdGFibGUsIHUnZGVmJykKLQotICAgICAgICAgICAgdGFibGUgPSBzdHJpbmcubWFrZXRyYW5zKCdhJywgdSdBJykKLSAgICAgICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3RyYW5zbGF0ZScsIHUnYWJjJywgdSdBYmMnLCB0YWJsZSkKLSAgICAgICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3RyYW5zbGF0ZScsIHUneHl6JywgdSd4eXonLCB0YWJsZSkKLQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCd0cmFuc2xhdGUnLCB1ImFiYWJhYmMiLCB1J2JiYmMnLCB7b3JkKCdhJyk6Tm9uZX0pCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3RyYW5zbGF0ZScsIHUiYWJhYmFiYyIsIHUnaWlpYycsIHtvcmQoJ2EnKTpOb25lLCBvcmQoJ2InKTpvcmQoJ2knKX0pCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3RyYW5zbGF0ZScsIHUiYWJhYmFiYyIsIHUnaWlpeCcsIHtvcmQoJ2EnKTpOb25lLCBvcmQoJ2InKTpvcmQoJ2knKSwgb3JkKCdjJyk6dSd4J30pCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3RyYW5zbGF0ZScsIHUiYWJhYmFiYyIsIHUnPGk+PGk+PGk+YycsIHtvcmQoJ2EnKTpOb25lLCBvcmQoJ2InKTp1JzxpPid9KQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCd0cmFuc2xhdGUnLCB1ImFiYWJhYmMiLCB1J2MnLCB7b3JkKCdhJyk6Tm9uZSwgb3JkKCdiJyk6dScnfSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSdiYmJjJywgdSdhYmFiYWJjJywgJ3RyYW5zbGF0ZScsIHtvcmQoJ2EnKTpOb25lfSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSdpaWljJywgdSdhYmFiYWJjJywgJ3RyYW5zbGF0ZScsIHtvcmQoJ2EnKTpOb25lLCBvcmQoJ2InKTpvcmQoJ2knKX0pCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KHUnaWlpeCcsIHUnYWJhYmFiYycsICd0cmFuc2xhdGUnLCB7b3JkKCdhJyk6Tm9uZSwgb3JkKCdiJyk6b3JkKCdpJyksIG9yZCgnYycpOnUneCd9KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCh1JzxpPjxpPjxpPmMnLCB1J2FiYWJhYmMnLCAndHJhbnNsYXRlJywge29yZCgnYScpOk5vbmUsIG9yZCgnYicpOnUnPGk+J30pCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KHUnYycsIHUnYWJhYmFiYycsICd0cmFuc2xhdGUnLCB7b3JkKCdhJyk6Tm9uZSwgb3JkKCdiJyk6dScnfSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUnaGVsbG8nLnRyYW5zbGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1J2FiYWJhYmMnLnRyYW5zbGF0ZSwge29yZCgnYScpOicnfSkKIAogICAgIGRlZiB0ZXN0X3NwbGl0KHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKAotICAgICAgICAgICAgJ3NwbGl0JywKLSAgICAgICAgICAgIHUndGhpcyBpcyB0aGUgc3BsaXQgZnVuY3Rpb24nLAotICAgICAgICAgICAgW3UndGhpcycsIHUnaXMnLCB1J3RoZScsIHUnc3BsaXQnLCB1J2Z1bmN0aW9uJ10KLSAgICAgICAgKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdzcGxpdCcsIHUnYXxifGN8ZCcsIFt1J2EnLCB1J2InLCB1J2MnLCB1J2QnXSwgdSd8JykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3BsaXQnLCB1J2F8YnxjfGQnLCBbdSdhJywgdSdiJywgdSdjfGQnXSwgdSd8JywgMikKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3BsaXQnLCB1J2EgYiBjIGQnLCBbdSdhJywgdSdiIGMgZCddLCBOb25lLCAxKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdzcGxpdCcsIHUnYSBiIGMgZCcsIFt1J2EnLCB1J2InLCB1J2MgZCddLCBOb25lLCAyKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdzcGxpdCcsIHUnYSBiIGMgZCcsIFt1J2EnLCB1J2InLCB1J2MnLCB1J2QnXSwgTm9uZSwgMykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3BsaXQnLCB1J2EgYiBjIGQnLCBbdSdhJywgdSdiJywgdSdjJywgdSdkJ10sIE5vbmUsIDQpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3NwbGl0JywgdSdhIGIgYyBkJywgW3UnYSBiIGMgZCddLCBOb25lLCAwKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdzcGxpdCcsIHUnYSAgYiAgYyAgZCcsIFt1J2EnLCB1J2InLCB1J2MgIGQnXSwgTm9uZSwgMikKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3BsaXQnLCB1J2EgYiBjIGQgJywgW3UnYScsIHUnYicsIHUnYycsIHUnZCddKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdzcGxpdCcsIHUnYS8vYi8vYy8vZCcsIFt1J2EnLCB1J2InLCB1J2MnLCB1J2QnXSwgdScvLycpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3NwbGl0JywgdSdhLy9iLy9jLy9kJywgW3UnYScsIHUnYicsIHUnYycsIHUnZCddLCAnLy8nKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdzcGxpdCcsICdhLy9iLy9jLy9kJywgW3UnYScsIHUnYicsIHUnYycsIHUnZCddLCB1Jy8vJykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3BsaXQnLCB1J2VuZGNhc2UgdGVzdCcsIFt1J2VuZGNhc2UgJywgdScnXSwgdSd0ZXN0JykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3BsaXQnLCB1J2VuZGNhc2UgdGVzdCcsIFt1J2VuZGNhc2UgJywgdScnXSwgJ3Rlc3QnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdzcGxpdCcsICdlbmRjYXNlIHRlc3QnLCBbdSdlbmRjYXNlICcsIHUnJ10sIHUndGVzdCcpCisgICAgICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LnRlc3Rfc3BsaXQoc2VsZikKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiaGVsbG8iLnNwbGl0LCA0MiwgNDIsIDQyKQorICAgICAgICAjIE1peGVkIGFyZ3VtZW50cworICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChbdSdhJywgdSdiJywgdSdjJywgdSdkJ10sIHUnYS8vYi8vYy8vZCcsICdzcGxpdCcsICcvLycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFt1J2EnLCB1J2InLCB1J2MnLCB1J2QnXSwgJ2EvL2IvL2MvL2QnLCAnc3BsaXQnLCB1Jy8vJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoW3UnZW5kY2FzZSAnLCB1JyddLCB1J2VuZGNhc2UgdGVzdCcsICdzcGxpdCcsICd0ZXN0JykKIAogICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6Ci0gICAgICAgICMgam9pbiBub3cgd29ya3Mgd2l0aCBhbnkgc2VxdWVuY2UgdHlwZQotICAgICAgICBjbGFzcyBTZXF1ZW5jZToKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXEpOiBzZWxmLnNlcSA9IHNlcQotICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6IHJldHVybiBsZW4oc2VsZi5zZXEpCi0gICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6IHJldHVybiBzZWxmLnNlcVtpXQorICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF9qb2luKHNlbGYpCiAKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnam9pbicsIHUnICcsIHUnYSBiIGMgZCcsIFt1J2EnLCB1J2InLCB1J2MnLCB1J2QnXSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnam9pbicsIHUnICcsIHUnYSBiIGMgZCcsIFsnYScsICdiJywgdSdjJywgdSdkJ10pCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2pvaW4nLCB1JycsIHUnYWJjZCcsICh1J2EnLCB1J2InLCB1J2MnLCB1J2QnKSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnam9pbicsIHUnICcsIHUndyB4IHkgeicsIFNlcXVlbmNlKCd3eHl6JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdScgJy5qb2luLCA3KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUnICcuam9pbiwgU2VxdWVuY2UoWzcsIHUnaGVsbG8nLCAxMjNMXSkpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2pvaW4nLCAnICcsIHUnYSBiIGMgZCcsIFt1J2EnLCB1J2InLCB1J2MnLCB1J2QnXSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnam9pbicsICcgJywgdSdhIGIgYyBkJywgWydhJywgJ2InLCB1J2MnLCB1J2QnXSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnam9pbicsICcnLCB1J2FiY2QnLCAodSdhJywgdSdiJywgdSdjJywgdSdkJykpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2pvaW4nLCAnICcsIHUndyB4IHkgeicsIFNlcXVlbmNlKHUnd3h5eicpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICcgJy5qb2luLCBUeXBlRXJyb3IpCi0KLSAgICAgICAgcmVzdWx0ID0gdScnCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKLSAgICAgICAgICAgIGlmIGkgPiAwOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHUnOicKLSAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHUneCcqMTAKLQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdqb2luJywgdSc6JywgcmVzdWx0LCBbdSd4JyAqIDEwXSAqIDEwKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdqb2luJywgdSc6JywgcmVzdWx0LCAodSd4JyAqIDEwLCkgKiAxMCkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiaGVsbG8iLmpvaW4pCisgICAgICAgICMgbWl4ZWQgYXJndW1lbnRzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KHUnYSBiIGMgZCcsIHUnICcsICdqb2luJywgWydhJywgJ2InLCB1J2MnLCB1J2QnXSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSdhYmNkJywgdScnLCAnam9pbicsICh1J2EnLCB1J2InLCB1J2MnLCB1J2QnKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSd3IHggeSB6JywgdScgJywgJ2pvaW4nLCBzdHJpbmdfdGVzdHMuU2VxdWVuY2UoJ3d4eXonKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSdhIGIgYyBkJywgJyAnLCAnam9pbicsIFt1J2EnLCB1J2InLCB1J2MnLCB1J2QnXSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSdhIGIgYyBkJywgJyAnLCAnam9pbicsIFsnYScsICdiJywgdSdjJywgdSdkJ10pCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KHUnYWJjZCcsICcnLCAnam9pbicsICh1J2EnLCB1J2InLCB1J2MnLCB1J2QnKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSd3IHggeSB6JywgJyAnLCAnam9pbicsIHN0cmluZ190ZXN0cy5TZXF1ZW5jZSh1J3d4eXonKSkKIAogICAgIGRlZiB0ZXN0X3N0cmlwKHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdzdHJpcCcsIHUnICAgaGVsbG8gICAnLCB1J2hlbGxvJykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnbHN0cmlwJywgdScgICBoZWxsbyAgICcsIHUnaGVsbG8gICAnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyc3RyaXAnLCB1JyAgIGhlbGxvICAgJywgdScgICBoZWxsbycpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3N0cmlwJywgdSdoZWxsbycsIHUnaGVsbG8nKQotCi0gICAgICAgICMgc3RyaXAvbHN0cmlwL3JzdHJpcCB3aXRoIE5vbmUgYXJnCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3N0cmlwJywgdScgICBoZWxsbyAgICcsIHUnaGVsbG8nLCBOb25lKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdsc3RyaXAnLCB1JyAgIGhlbGxvICAgJywgdSdoZWxsbyAgICcsIE5vbmUpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3JzdHJpcCcsIHUnICAgaGVsbG8gICAnLCB1JyAgIGhlbGxvJywgTm9uZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3RyaXAnLCB1J2hlbGxvJywgdSdoZWxsbycsIE5vbmUpCi0KLSAgICAgICAgIyBzdHJpcC9sc3RyaXAvcnN0cmlwIHdpdGggdW5pY29kZSBhcmcKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3RyaXAnLCB1J3h5enp5aGVsbG94eXp6eScsIHUnaGVsbG8nLCB1J3h5eicpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2xzdHJpcCcsIHUneHl6enloZWxsb3h5enp5JywgdSdoZWxsb3h5enp5JywgdSd4eXonKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyc3RyaXAnLCB1J3h5enp5aGVsbG94eXp6eScsIHUneHl6enloZWxsbycsIHUneHl6JykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3RyaXAnLCB1J2hlbGxvJywgdSdoZWxsbycsIHUneHl6JykKLQotICAgICAgICAjIHN0cmlwL2xzdHJpcC9yc3RyaXAgd2l0aCBzdHIgYXJnCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3N0cmlwJywgdSd4eXp6eWhlbGxveHl6enknLCB1J2hlbGxvJywgJ3h5eicpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2xzdHJpcCcsIHUneHl6enloZWxsb3h5enp5JywgdSdoZWxsb3h5enp5JywgJ3h5eicpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3JzdHJpcCcsIHUneHl6enloZWxsb3h5enp5JywgdSd4eXp6eWhlbGxvJywgJ3h5eicpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3N0cmlwJywgdSdoZWxsbycsIHUnaGVsbG8nLCAneHl6JykKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiaGVsbG8iLnN0cmlwLCA0MiwgNDIpCisgICAgICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LnRlc3Rfc3RyaXAoc2VsZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB1ImhlbGxvIi5zdHJpcCwgIlx4ZmYiKQogCi0gICAgZGVmIHRlc3Rfc3dhcGNhc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3N3YXBjYXNlJywgdSdIZUxMbyBjT21wVXRlUnMnLCB1J2hFbGxPIENvTVB1VEVyUycpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1ImhlbGxvIi5zd2FwY2FzZSwgNDIpCi0KICAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyZXBsYWNlJywgdSdvbmUhdHdvIXRocmVlIScsIHUnb25lQHR3byF0aHJlZSEnLCB1JyEnLCB1J0AnLCAxKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyZXBsYWNlJywgdSdvbmUhdHdvIXRocmVlIScsIHUnb25ldHdvdGhyZWUnLCAnIScsICcnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyZXBsYWNlJywgdSdvbmUhdHdvIXRocmVlIScsIHUnb25lQHR3b0B0aHJlZSEnLCB1JyEnLCB1J0AnLCAyKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyZXBsYWNlJywgdSdvbmUhdHdvIXRocmVlIScsIHUnb25lQHR3b0B0aHJlZUAnLCB1JyEnLCB1J0AnLCAzKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyZXBsYWNlJywgdSdvbmUhdHdvIXRocmVlIScsIHUnb25lQHR3b0B0aHJlZUAnLCB1JyEnLCB1J0AnLCA0KQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyZXBsYWNlJywgdSdvbmUhdHdvIXRocmVlIScsIHUnb25lIXR3byF0aHJlZSEnLCB1JyEnLCB1J0AnLCAwKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyZXBsYWNlJywgdSdvbmUhdHdvIXRocmVlIScsIHUnb25lQHR3b0B0aHJlZUAnLCB1JyEnLCB1J0AnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyZXBsYWNlJywgdSdvbmUhdHdvIXRocmVlIScsIHUnb25lIXR3byF0aHJlZSEnLCB1J3gnLCB1J0AnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyZXBsYWNlJywgdSdvbmUhdHdvIXRocmVlIScsIHUnb25lIXR3byF0aHJlZSEnLCB1J3gnLCB1J0AnLCAyKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyZXBsYWNlJywgdSdhYmMnLCB1Jy1hLWItYy0nLCB1JycsIHUnLScpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3JlcGxhY2UnLCB1J2FiYycsIHUnLWEtYi1jJywgdScnLCB1Jy0nLCAzKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyZXBsYWNlJywgdSdhYmMnLCB1J2FiYycsIHUnJywgdSctJywgMCkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgncmVwbGFjZScsIHUnYWJjJywgdSdhYmMnLCB1J2FiJywgdSctLScsIDApCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3JlcGxhY2UnLCB1J2FiYycsIHUnYWJjJywgdSd4eScsIHUnLS0nKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyZXBsYWNlJywgdScnLCB1JycsIHUnJywgdScnKQorICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X3JlcGxhY2Uoc2VsZikKIAogICAgICAgICAjIG1ldGhvZCBjYWxsIGZvcndhcmRlZCBmcm9tIHN0ciBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIG9mIHVuaWNvZGUgYXJndW1lbnQKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgncmVwbGFjZScsICdvbmUhdHdvIXRocmVlIScsIHUnb25lQHR3byF0aHJlZSEnLCB1JyEnLCB1J0AnLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICdyZXBsYWNlJy5yZXBsYWNlLCA0MikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSdvbmVAdHdvIXRocmVlIScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgdSchJywgdSdAJywgMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAncmVwbGFjZScucmVwbGFjZSwgdSJyIiwgNDIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1ImhlbGxvIi5yZXBsYWNlKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiaGVsbG8iLnJlcGxhY2UsIDQyLCB1ImgiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiaGVsbG8iLnJlcGxhY2UsIHUiaCIsIDQyKQotCi0gICAgZGVmIHRlc3Rfc3RhcnRzd2l0aChzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3RhcnRzd2l0aCcsIHUnaGVsbG8nLCBUcnVlLCB1J2hlJykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3RhcnRzd2l0aCcsIHUnaGVsbG8nLCBUcnVlLCB1J2hlbGxvJykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3RhcnRzd2l0aCcsIHUnaGVsbG8nLCBGYWxzZSwgdSdoZWxsbyB3b3JsZCcpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3N0YXJ0c3dpdGgnLCB1J2hlbGxvJywgVHJ1ZSwgdScnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdzdGFydHN3aXRoJywgdSdoZWxsbycsIEZhbHNlLCB1J2VsbG8nKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdzdGFydHN3aXRoJywgdSdoZWxsbycsIFRydWUsIHUnZWxsbycsIDEpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3N0YXJ0c3dpdGgnLCB1J2hlbGxvJywgVHJ1ZSwgdSdvJywgNCkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3RhcnRzd2l0aCcsIHUnaGVsbG8nLCBGYWxzZSwgdSdvJywgNSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3RhcnRzd2l0aCcsIHUnaGVsbG8nLCBUcnVlLCB1JycsIDUpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3N0YXJ0c3dpdGgnLCB1J2hlbGxvJywgRmFsc2UsIHUnbG8nLCA2KQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdzdGFydHN3aXRoJywgdSdoZWxsb3dvcmxkJywgVHJ1ZSwgdSdsb3dvJywgMykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3RhcnRzd2l0aCcsIHUnaGVsbG93b3JsZCcsIFRydWUsIHUnbG93bycsIDMsIDcpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3N0YXJ0c3dpdGgnLCB1J2hlbGxvd29ybGQnLCBGYWxzZSwgdSdsb3dvJywgMywgNikKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiaGVsbG8iLnN0YXJ0c3dpdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJoZWxsbyIuc3RhcnRzd2l0aCwgNDIpCi0KLSAgICBkZWYgdGVzdF9lbmRzd2l0aChzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnZW5kc3dpdGgnLCB1J2hlbGxvJywgVHJ1ZSwgdSdsbycpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2VuZHN3aXRoJywgdSdoZWxsbycsIEZhbHNlLCB1J2hlJykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnZW5kc3dpdGgnLCB1J2hlbGxvJywgVHJ1ZSwgdScnKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdlbmRzd2l0aCcsIHUnaGVsbG8nLCBGYWxzZSwgdSdoZWxsbyB3b3JsZCcpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2VuZHN3aXRoJywgdSdoZWxsb3dvcmxkJywgRmFsc2UsIHUnd29ybCcpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2VuZHN3aXRoJywgdSdoZWxsb3dvcmxkJywgVHJ1ZSwgdSd3b3JsJywgMywgOSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnZW5kc3dpdGgnLCB1J2hlbGxvd29ybGQnLCBUcnVlLCB1J3dvcmxkJywgMywgMTIpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2VuZHN3aXRoJywgdSdoZWxsb3dvcmxkJywgVHJ1ZSwgdSdsb3dvJywgMSwgNykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnZW5kc3dpdGgnLCB1J2hlbGxvd29ybGQnLCBUcnVlLCB1J2xvd28nLCAyLCA3KQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdlbmRzd2l0aCcsIHUnaGVsbG93b3JsZCcsIFRydWUsIHUnbG93bycsIDMsIDcpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2VuZHN3aXRoJywgdSdoZWxsb3dvcmxkJywgRmFsc2UsIHUnbG93bycsIDQsIDcpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2VuZHN3aXRoJywgdSdoZWxsb3dvcmxkJywgRmFsc2UsIHUnbG93bycsIDMsIDgpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2VuZHN3aXRoJywgdSdhYicsIEZhbHNlLCB1J2FiJywgMCwgMSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnZW5kc3dpdGgnLCB1J2FiJywgRmFsc2UsIHUnYWInLCAwLCAwKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdlbmRzd2l0aCcsICdoZWxsb3dvcmxkJywgVHJ1ZSwgdSdkJykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnZW5kc3dpdGgnLCAnaGVsbG93b3JsZCcsIEZhbHNlLCB1J2wnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJoZWxsbyIuZW5kc3dpdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJoZWxsbyIuZW5kc3dpdGgsIDQyKQotCi0gICAgZGVmIHRlc3RfZXhwYW5kdGFicyhzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnZXhwYW5kdGFicycsIHUnYWJjXHJhYlx0ZGVmXG5nXHRoaScsIHUnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2V4cGFuZHRhYnMnLCB1J2FiY1xyYWJcdGRlZlxuZ1x0aGknLCB1J2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCA4KQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdleHBhbmR0YWJzJywgdSdhYmNccmFiXHRkZWZcbmdcdGhpJywgdSdhYmNccmFiICBkZWZcbmcgICBoaScsIDQpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2V4cGFuZHRhYnMnLCB1J2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScsIHUnYWJjXHJcbmFiICBkZWZcbmcgICBoaScsIDQpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2V4cGFuZHRhYnMnLCB1J2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLCB1J2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLCA0KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJoZWxsbyIuZXhwYW5kdGFicywgNDIsIDQyKQotCi0gICAgZGVmIHRlc3RfY2Fwd29yZHMoc2VsZik6Ci0gICAgICAgIGlmIDA6Ci0gICAgICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdjYXB3b3JkcycsIHUnYWJjIGRlZiBnaGknLCB1J0FiYyBEZWYgR2hpJykKLSAgICAgICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2NhcHdvcmRzJywgdSdhYmNcdGRlZlxuZ2hpJywgdSdBYmMgRGVmIEdoaScpCi0gICAgICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdjYXB3b3JkcycsIHUnYWJjXHQgICBkZWYgIFxuZ2hpJywgdSdBYmMgRGVmIEdoaScpCi0KLSAgICBkZWYgdGVzdF96ZmlsbChzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnemZpbGwnLCB1JzEyMycsIHUnMTIzJywgMikKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnemZpbGwnLCB1JzEyMycsIHUnMTIzJywgMykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnemZpbGwnLCB1JzEyMycsIHUnMDEyMycsIDQpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3pmaWxsJywgdScrMTIzJywgdScrMTIzJywgMykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnemZpbGwnLCB1JysxMjMnLCB1JysxMjMnLCA0KQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCd6ZmlsbCcsIHUnKzEyMycsIHUnKzAxMjMnLCA1KQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCd6ZmlsbCcsIHUnLTEyMycsIHUnLTEyMycsIDMpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3pmaWxsJywgdSctMTIzJywgdSctMTIzJywgNCkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnemZpbGwnLCB1Jy0xMjMnLCB1Jy0wMTIzJywgNSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnemZpbGwnLCB1JycsIHUnMDAwJywgMykKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnemZpbGwnLCB1JzM0JywgdSczNCcsIDEpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3pmaWxsJywgdSczNCcsIHUnMDAwMzQnLCA1KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSIxMjMiLnpmaWxsKQotCiAgICAgZGVmIHRlc3RfY29tcGFyaXNvbihzZWxmKToKICAgICAgICAgIyBDb21wYXJpc29uczoKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2FiYycsICdhYmMnKQpAQCAtNDI1LDE1MiArMjI5LDYwIEBACiAgICAgICAgICMgU3Vycm9nYXRlcyBvbiBib3RoIHNpZGVzLCBubyBmaXh1cCByZXF1aXJlZAogICAgICAgICBzZWxmLmFzc2VydF8odSdcdWQ4MDBcdWRjMDInIDwgdSdcdWQ4NGRcdWRjNTYnKQogCi0gICAgZGVmIHRlc3RfbGp1c3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2xqdXN0JywgdSdhYmMnLCAgdSdhYmMgICAgICAgJywgMTApCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2xqdXN0JywgdSdhYmMnLCAgdSdhYmMgICAnLCA2KQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdsanVzdCcsIHUnYWJjJywgdSdhYmMnLCAyKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJhYmMiLmxqdXN0KQotCi0gICAgZGVmIHRlc3Rfcmp1c3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3JqdXN0JywgdSdhYmMnLCAgdScgICAgICAgYWJjJywgMTApCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3JqdXN0JywgdSdhYmMnLCAgdScgICBhYmMnLCA2KQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdyanVzdCcsIHUnYWJjJywgdSdhYmMnLCAyKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJhYmMiLnJqdXN0KQotCi0gICAgZGVmIHRlc3RfY2VudGVyKHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdjZW50ZXInLCB1J2FiYycsIHUnICAgYWJjICAgICcsIDEwKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdjZW50ZXInLCB1J2FiYycsIHUnIGFiYyAgJywgNikKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnY2VudGVyJywgdSdhYmMnLCB1J2FiYycsIDIpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1ImFiYyIuY2VudGVyKQotCiAgICAgZGVmIHRlc3RfaXNsb3dlcihzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNsb3dlcicsIHUnJywgRmFsc2UpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzbG93ZXInLCB1J2EnLCBUcnVlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc2xvd2VyJywgdSdBJywgRmFsc2UpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzbG93ZXInLCB1J1xuJywgRmFsc2UpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzbG93ZXInLCB1J1x1MUZGYycsIEZhbHNlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc2xvd2VyJywgdSdhYmMnLCBUcnVlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc2xvd2VyJywgdSdhQmMnLCBGYWxzZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNsb3dlcicsIHUnYWJjXG4nLCBUcnVlKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJhYmMiLmlzbG93ZXIsIDQyKQorICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF9pc2xvd2VyKHNlbGYpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KEZhbHNlLCB1J1x1MUZGYycsICdpc2xvd2VyJykKIAogICAgIGRlZiB0ZXN0X2lzdXBwZXIoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzdXBwZXInLCB1JycsIEZhbHNlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc3VwcGVyJywgdSdhJywgRmFsc2UpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzdXBwZXInLCB1J0EnLCBUcnVlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc3VwcGVyJywgdSdcbicsIEZhbHNlKQotICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjRdICE9ICdqYXZhJzoKLSAgICAgICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzdXBwZXInLCB1J1x1MUZGYycsIEZhbHNlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc3VwcGVyJywgdSdBQkMnLCBUcnVlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc3VwcGVyJywgdSdBYkMnLCBGYWxzZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXN1cHBlcicsIHUnQUJDXG4nLCBUcnVlKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJhYmMiLmlzdXBwZXIsIDQyKQorICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF9pc3VwcGVyKHNlbGYpCisgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnXHUxRkZjJywgJ2lzdXBwZXInKQogCiAgICAgZGVmIHRlc3RfaXN0aXRsZShzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXN0aXRsZScsIHUnJywgRmFsc2UpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzdGl0bGUnLCB1J2EnLCBGYWxzZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXN0aXRsZScsIHUnQScsIFRydWUpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzdGl0bGUnLCB1J1xuJywgRmFsc2UpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzdGl0bGUnLCB1J1x1MUZGYycsIFRydWUpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzdGl0bGUnLCB1J0EgVGl0bGVjYXNlZCBMaW5lJywgVHJ1ZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXN0aXRsZScsIHUnQVxuVGl0bGVjYXNlZCBMaW5lJywgVHJ1ZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXN0aXRsZScsIHUnQSBUaXRsZWNhc2VkLCBMaW5lJywgVHJ1ZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXN0aXRsZScsIHUnR3JlZWsgXHUxRkZjaXRsZWNhc2VzIC4uLicsIFRydWUpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzdGl0bGUnLCB1J05vdCBhIGNhcGl0YWxpemVkIFN0cmluZycsIEZhbHNlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc3RpdGxlJywgdSdOb3RcdGEgVGl0bGVjYXNlIFN0cmluZycsIEZhbHNlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc3RpdGxlJywgdSdOb3QtLWEgVGl0bGVjYXNlIFN0cmluZycsIEZhbHNlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc3RpdGxlJywgdSdOT1QnLCBGYWxzZSkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiYWJjIi5pc3RpdGxlLCA0MikKKyAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LnRlc3RfdGl0bGUoc2VsZikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdSdcdTFGRmMnLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsIHUnR3JlZWsgXHUxRkZjaXRsZWNhc2VzIC4uLicsICdpc3RpdGxlJykKIAogICAgIGRlZiB0ZXN0X2lzc3BhY2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzc3BhY2UnLCB1JycsIEZhbHNlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc3NwYWNlJywgdSdhJywgRmFsc2UpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzc3BhY2UnLCB1JyAnLCBUcnVlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc3NwYWNlJywgdSdcdCcsIFRydWUpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzc3BhY2UnLCB1J1xyJywgVHJ1ZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNzcGFjZScsIHUnXG4nLCBUcnVlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc3NwYWNlJywgdScgXHRcclxuJywgVHJ1ZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNzcGFjZScsIHUnIFx0XHJcbmEnLCBGYWxzZSkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiYWJjIi5pc3NwYWNlLCA0MikKKyAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LnRlc3RfaXNzcGFjZShzZWxmKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1J1x1MjAwMCcsICdpc3NwYWNlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdSdcdTIwMGEnLCAnaXNzcGFjZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KEZhbHNlLCB1J1x1MjAxNCcsICdpc3NwYWNlJykKIAogICAgIGRlZiB0ZXN0X2lzYWxwaGEoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzYWxwaGEnLCB1JycsIEZhbHNlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc2FscGhhJywgdSdhJywgVHJ1ZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNhbHBoYScsIHUnQScsIFRydWUpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzYWxwaGEnLCB1J1xuJywgRmFsc2UpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzYWxwaGEnLCB1J1x1MUZGYycsIFRydWUpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzYWxwaGEnLCB1J2FiYycsIFRydWUpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzYWxwaGEnLCB1J2FCYzEyMycsIEZhbHNlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc2FscGhhJywgdSdhYmNcbicsIEZhbHNlKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJhYmMiLmlzYWxwaGEsIDQyKQotCi0gICAgZGVmIHRlc3RfaXNhbG51bShzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNhbG51bScsIHUnJywgRmFsc2UpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzYWxudW0nLCB1J2EnLCBUcnVlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc2FsbnVtJywgdSdBJywgVHJ1ZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNhbG51bScsIHUnXG4nLCBGYWxzZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNhbG51bScsIHUnMTIzYWJjNDU2JywgVHJ1ZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNhbG51bScsIHUnYTFiM2MnLCBUcnVlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc2FsbnVtJywgdSdhQmMwMDAgJywgRmFsc2UpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzYWxudW0nLCB1J2FiY1xuJywgRmFsc2UpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1ImFiYyIuaXNhbG51bSwgNDIpCisgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X2lzYWxwaGEoc2VsZikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdSdcdTFGRmMnLCAnaXNhbHBoYScpCiAKICAgICBkZWYgdGVzdF9pc2RlY2ltYWwoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzZGVjaW1hbCcsIHUnJywgRmFsc2UpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzZGVjaW1hbCcsIHUnYScsIEZhbHNlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc2RlY2ltYWwnLCB1JzAnLCBUcnVlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc2RlY2ltYWwnLCB1J1x1MjQ2MCcsIEZhbHNlKSAjIENJUkNMRUQgRElHSVQgT05FCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzZGVjaW1hbCcsIHUnXHhiYycsIEZhbHNlKSAjIFZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUgotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc2RlY2ltYWwnLCB1J1x1MDY2MCcsIFRydWUpICMgQVJBQklDLUlORElDIERJR0lUIFpFUk8KLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNkZWNpbWFsJywgdScwMTIzNDU2Nzg5JywgVHJ1ZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNkZWNpbWFsJywgdScwMTIzNDU2Nzg5YScsIEZhbHNlKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChGYWxzZSwgdScnLCAnaXNkZWNpbWFsJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnYScsICdpc2RlY2ltYWwnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1JzAnLCAnaXNkZWNpbWFsJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnXHUyNDYwJywgJ2lzZGVjaW1hbCcpICMgQ0lSQ0xFRCBESUdJVCBPTkUKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnXHhiYycsICdpc2RlY2ltYWwnKSAjIFZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUgorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1J1x1MDY2MCcsICdpc2RlY2ltYWwnKSAjIEFSQUJJQy1JTkRJQyBESUdJVCBaRVJPCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsIHUnMDEyMzQ1Njc4OScsICdpc2RlY2ltYWwnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChGYWxzZSwgdScwMTIzNDU2Nzg5YScsICdpc2RlY2ltYWwnKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJhYmMiLmlzZGVjaW1hbCwgNDIpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2lzZGVjaW1hbCcsIDQyKQogCiAgICAgZGVmIHRlc3RfaXNkaWdpdChzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNkaWdpdCcsIHUnJywgRmFsc2UpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzZGlnaXQnLCB1J2EnLCBGYWxzZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNkaWdpdCcsIHUnMCcsIFRydWUpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzZGlnaXQnLCB1J1x1MjQ2MCcsIFRydWUpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzZGlnaXQnLCB1J1x4YmMnLCBGYWxzZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNkaWdpdCcsIHUnXHUwNjYwJywgVHJ1ZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNkaWdpdCcsIHUnMDEyMzQ1Njc4OScsIFRydWUpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzZGlnaXQnLCB1JzAxMjM0NTY3ODlhJywgRmFsc2UpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1ImFiYyIuaXNkaWdpdCwgNDIpCisgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X2lzZGlnaXQoc2VsZikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdSdcdTI0NjAnLCAnaXNkaWdpdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KEZhbHNlLCB1J1x4YmMnLCAnaXNkaWdpdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsIHUnXHUwNjYwJywgJ2lzZGlnaXQnKQogCiAgICAgZGVmIHRlc3RfaXNudW1lcmljKHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc251bWVyaWMnLCB1JycsIEZhbHNlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc251bWVyaWMnLCB1J2EnLCBGYWxzZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNudW1lcmljJywgdScwJywgVHJ1ZSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnaXNudW1lcmljJywgdSdcdTI0NjAnLCBUcnVlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc251bWVyaWMnLCB1J1x4YmMnLCBUcnVlKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdpc251bWVyaWMnLCB1J1x1MDY2MCcsIFRydWUpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzbnVtZXJpYycsIHUnMDEyMzQ1Njc4OScsIFRydWUpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ2lzbnVtZXJpYycsIHUnMDEyMzQ1Njc4OWEnLCBGYWxzZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnJywgJ2lzbnVtZXJpYycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KEZhbHNlLCB1J2EnLCAnaXNudW1lcmljJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdScwJywgJ2lzbnVtZXJpYycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsIHUnXHUyNDYwJywgJ2lzbnVtZXJpYycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsIHUnXHhiYycsICdpc251bWVyaWMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1J1x1MDY2MCcsICdpc251bWVyaWMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1JzAxMjM0NTY3ODknLCAnaXNudW1lcmljJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnMDEyMzQ1Njc4OWEnLCAnaXNudW1lcmljJykKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiYWJjIi5pc251bWVyaWMsIDQyKQogCi0gICAgZGVmIHRlc3Rfc3BsaXRsaW5lcyhzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3BsaXRsaW5lcycsIHUiYWJjXG5kZWZcblxyZ2hpIiwgW3UnYWJjJywgdSdkZWYnLCB1JycsIHUnZ2hpJ10pCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3NwbGl0bGluZXMnLCB1ImFiY1xuZGVmXG5cclxuZ2hpIiwgW3UnYWJjJywgdSdkZWYnLCB1JycsIHUnZ2hpJ10pCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3NwbGl0bGluZXMnLCB1ImFiY1xuZGVmXHJcbmdoaSIsIFt1J2FiYycsIHUnZGVmJywgdSdnaGknXSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3BsaXRsaW5lcycsIHUiYWJjXG5kZWZcclxuZ2hpXG4iLCBbdSdhYmMnLCB1J2RlZicsIHUnZ2hpJ10pCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ3NwbGl0bGluZXMnLCB1ImFiY1xuZGVmXHJcbmdoaVxuXHIiLCBbdSdhYmMnLCB1J2RlZicsIHUnZ2hpJywgdScnXSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3BsaXRsaW5lcycsIHUiXG5hYmNcbmRlZlxyXG5naGlcblxyIiwgW3UnJywgdSdhYmMnLCB1J2RlZicsIHUnZ2hpJywgdScnXSkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnc3BsaXRsaW5lcycsIHUiXG5hYmNcbmRlZlxyXG5naGlcblxyIiwgW3UnXG4nLCB1J2FiY1xuJywgdSdkZWZcclxuJywgdSdnaGlcbicsIHUnXHInXSwgVHJ1ZSkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiYWJjIi5zcGxpdGxpbmVzLCA0MiwgNDIpCi0KICAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIFVuaWNvZGUgY29udGFpbnMgbWV0aG9kCiAgICAgICAgIHNlbGYuYXNzZXJ0XygnYScgaW4gdSdhYmRiJykKQEAgLTYzNCw2ICszNDYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiYWJjIi5fX2NvbnRhaW5zX18pCiAKICAgICBkZWYgdGVzdF9mb3JtYXR0aW5nKHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF9mb3JtYXR0aW5nKHNlbGYpCiAgICAgICAgICMgVGVzdGluZyBVbmljb2RlIGZvcm1hdHRpbmcgc3RyaW5ncy4uLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJXMsICVzIiAlICh1ImFiYyIsICJhYmMiKSwgdSdhYmMsIGFiYycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIlcywgJXMsICVpLCAlZiwgJTUuMmYiICUgKHUiYWJjIiwgImFiYyIsIDEsIDIsIDMpLCB1J2FiYywgYWJjLCAxLCAyLjAwMDAwMCwgIDMuMDAnKQpAQCAtNjQxLDMzICszNTQsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgLTEsIC0yLCAzLjUpLCB1J2FiYywgYWJjLCAtMSwgLTIuMDAwMDAwLCAgMy41MCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIlcywgJXMsICVpLCAlZiwgJTUuMmYiICUgKHUiYWJjIiwgImFiYyIsIC0xLCAtMiwgMy41NyksIHUnYWJjLCBhYmMsIC0xLCAtMi4wMDAwMDAsICAzLjU3JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgLTEsIC0yLCAxMDAzLjU3KSwgdSdhYmMsIGFiYywgLTEsIC0yLjAwMDAwMCwgMTAwMy41NycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIlYyIgJSAodSJhIiwpLCB1J2EnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJWMiICUgKCJhIiwpLCB1J2EnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJWMiICUgKDM0LCksIHUnIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIlYyIgJSAoMzYsKSwgdSckJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVkIi5fX21vZF9fKDEwKSwgdScxMCcpCiAgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVyLCAlciIgJSAodSJhYmMiLCAiYWJjIiksIHUidSdhYmMnLCAnYWJjJyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIlKHgpcywgJSh5KXMiICUgeyd4Jzp1ImFiYyIsICd5JzoiZGVmIn0sIHUnYWJjLCBkZWYnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJSh4KXMsICUo5ClzIiAlIHsneCc6dSJhYmMiLCB1J+QnOiJkZWYifSwgdSdhYmMsIGRlZicpCi0KLSAgICAgICAgZm9yIG9yZGluYWwgaW4gKC0xMDAsIDB4MjAwMDAwKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiJWMiLl9fbW9kX18sIG9yZGluYWwpCi0KLSAgICAgICAgIyBmbG9hdCBmb3JtYXR0aW5nCi0gICAgICAgIGZvciBwcmVjIGluIHhyYW5nZSgxMDApOgotICAgICAgICAgICAgZm9ybWF0ID0gdSclJS4laWYnICUgcHJlYwotICAgICAgICAgICAgdmFsdWUgPSAwLjAxCi0gICAgICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoNjApOgotICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAzLjE0MTU5MjY1NSAvIDMuMCAqIDEwLjAKLSAgICAgICAgICAgICAgICAjIFRoZSBmb3JtYXRmbG9hdCgpIGNvZGUgaW4gc3RyaW5nb2JqZWN0LmMgYW5kCi0gICAgICAgICAgICAgICAgIyB1bmljb2Rlb2JqZWN0LmMgdXNlcyBhIDEyMCBieXRlIGJ1ZmZlciBhbmQgc3dpdGNoZXMgZnJvbQotICAgICAgICAgICAgICAgICMgJ2YnIGZvcm1hdHRpbmcgdG8gJ2cnIGF0IHByZWNpc2lvbiA1MCwgc28gd2UgZXhwZWN0Ci0gICAgICAgICAgICAgICAgIyBPdmVyZmxvd0Vycm9ycyBmb3IgdGhlIHJhbmdlcyB4IDwgNTAgYW5kIHByZWMgPj0gNjcuCi0gICAgICAgICAgICAgICAgaWYgeCA8IDUwIGFuZCBwcmVjID49IDY3OgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmb3JtYXQuX19tb2RfXywgdmFsdWUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0ICUgdmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiUoeClzLCAlKFx4ZmMpcyIgJSB7J3gnOnUiYWJjIiwgdSdceGZjJzoiZGVmIn0sIHUnYWJjLCBkZWYnKQogCiAgICAgICAgICMgZm9ybWF0dGluZyBqb2JzIGRlbGVnYXRlZCBmcm9tIHRoZSBzdHJpbmcgaW1wbGVtZW50YXRpb246CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKXMuLi4nICUgeydmb28nOnUiYWJjIn0sIHUnLi4uYWJjLi4uJykKQEAgLTY4NCwyOCArMzc0LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJSouKnMnICUgKDUsMix1J2FiYycsKSwgdScgICBhYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyUqLipzJyAlICg1LDMsdSdhYmMnLCksIHUnICBhYmMnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclaSAlKi4qcycgJSAoMTAsIDUsMyx1J2FiYycsKSwgdScxMCAgIGFiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyVpJXMgJSouKnMnICUgKDEwLCAzLCA1LDMsdSdhYmMnLCksIHUnMTAzICAgYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJWklcyAlKi4qcycgJSAoMTAsIDMsIDUsIDMsIHUnYWJjJywpLCB1JzEwMyAgIGFiYycpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1JyUzbGQnICUgNDIsIHUnIDQyJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1JyUwNy4yZicgJSA0MiwgdScwMDQyLjAwJykKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiYWJjIi5fX21vZF9fKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiJShmb28pcyIuX19tb2RfXywgNDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSIlcyVzIi5fX21vZF9fLCAoNDIsKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1IiVjIi5fX21vZF9fLCAoTm9uZSwpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1IiVjIi5fX21vZF9fLCAoc3lzLm1heHVuaWNvZGUrMSwpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1IiUoZm9vIi5fX21vZF9fLCB7fSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1IiUoZm9vKXMgJShiYXIpcyIuX19tb2RfXywgKHUiZm9vIiwgNDIpKQotCi0gICAgICAgICMgYXJndW1lbnQgbmFtZXMgd2l0aCBwcm9wZXJseSBuZXN0ZWQgYnJhY2tldHMgYXJlIHN1cHBvcnRlZAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJSgoZm9vKSlzIiAlIHt1Iihmb28pIjogdSJiYXIifSwgdSJiYXIiKQotCi0gICAgICAgICMgMTAwIGlzIGEgbWFnaWMgbnVtYmVyIGluIFB5VW5pY29kZV9Gb3JtYXQsIHRoaXMgZm9yY2VzIGEgcmVzaXplCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIlc3giICUgKDEwMyp1ImEiKSwgMTAzKnUiYSIrdSJ4IikKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiJSpzIi5fX21vZF9fLCAodSJmb28iLCB1ImJhciIpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiJTEwLipmIi5fX21vZF9fLCAodSJmb28iLCA0Mi4pKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1IiUxMCIuX19tb2RfXywgKDQyLCkpCiAKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKICAgICAgICAgIyB1bmljb2RlKG9iaikgdGVzdHMgKHRoaXMgbWFwcyB0byBQeU9iamVjdF9Vbmljb2RlKCkgYXQgQyBsZXZlbCkKQEAgLTEwMjMsNDEgKzY5NCwxMCBAQAogICAgICAgICBwcmludCA+Pm91dCwgdSdkZWZcbicKICAgICAgICAgcHJpbnQgPj5vdXQsIHUnZGVmXG4nCiAKLSAgICBkZWYgdGVzdF9tdWwoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ19fbXVsX18nLCB1J2FiYycsIHUnJywgLTEpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ19fbXVsX18nLCB1J2FiYycsIHUnJywgMCkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnX19tdWxfXycsIHUnYWJjJywgdSdhYmMnLCAxKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdfX211bF9fJywgdSdhYmMnLCB1J2FiY2FiY2FiYycsIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgxMDAwMCp1J2FiYycpLl9fbXVsX18sIHN5cy5tYXhpbnQpCi0KLSAgICBkZWYgdGVzdF9zdWJzY3JpcHQoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ19fZ2V0aXRlbV9fJywgdSdhYmMnLCB1J2EnLCAwKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdfX2dldGl0ZW1fXycsIHUnYWJjJywgdSdjJywgLTEpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ19fZ2V0aXRlbV9fJywgdSdhYmMnLCB1J2EnLCAwTCkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnX19nZXRpdGVtX18nLCB1J2FiYycsIHUnYWJjJywgc2xpY2UoMCwgMykpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ19fZ2V0aXRlbV9fJywgdSdhYmMnLCB1J2FiYycsIHNsaWNlKDAsIDEwMDApKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdfX2dldGl0ZW1fXycsIHUnYWJjJywgdSdhJywgc2xpY2UoMCwgMSkpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ19fZ2V0aXRlbV9fJywgdSdhYmMnLCB1JycsIHNsaWNlKDAsIDApKQotICAgICAgICAjIEZJWE1FIFdoYXQgYWJvdXQgbmVnYXRpdmUgaW5kaXplcz8gVGhpcyBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGJ5IFtdIGFuZCBfX2dldGl0ZW1fXyhzbGljZSkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiYWJjIi5fX2dldGl0ZW1fXywgImRlZiIpCi0KLSAgICBkZWYgdGVzdF9zbGljZShzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnX19nZXRzbGljZV9fJywgdSdhYmMnLCB1J2FiYycsIDAsIDEwMDApCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ19fZ2V0c2xpY2VfXycsIHUnYWJjJywgdSdhYmMnLCAwLCAzKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdfX2dldHNsaWNlX18nLCB1J2FiYycsIHUnYWInLCAwLCAyKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdfX2dldHNsaWNlX18nLCB1J2FiYycsIHUnYmMnLCAxLCAzKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdfX2dldHNsaWNlX18nLCB1J2FiYycsIHUnYicsIDEsIDIpCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ19fZ2V0c2xpY2VfXycsIHUnYWJjJywgdScnLCAyLCAyKQotICAgICAgICBzZWxmLmNoZWNrbWV0aG9kKCdfX2dldHNsaWNlX18nLCB1J2FiYycsIHUnJywgMTAwMCwgMTAwMCkKLSAgICAgICAgc2VsZi5jaGVja21ldGhvZCgnX19nZXRzbGljZV9fJywgdSdhYmMnLCB1JycsIDIwMDAsIDEwMDApCi0gICAgICAgIHNlbGYuY2hlY2ttZXRob2QoJ19fZ2V0c2xpY2VfXycsIHUnYWJjJywgdScnLCAyLCAxKQotICAgICAgICAjIEZJWE1FIFdoYXQgYWJvdXQgbmVnYXRpdmUgaW5kaXplcz8gVGhpcyBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGJ5IFtdIGFuZCBfX2dldHNsaWNlX18KLQogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShVbmljb2RlVGVzdCkpCi0gICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3N1aXRlKHN1aXRlKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fc3VpdGUoc3VpdGUpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXNlcnN0cmluZy5weSBiL0xpYi90ZXN0L3Rlc3RfdXNlcnN0cmluZy5weQppbmRleCA2N2ZiYjVjLi5hODIxNDU2IDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X3VzZXJzdHJpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91c2Vyc3RyaW5nLnB5CkBAIC0xLDQ1ICsxLDUyIEBACiAjIS91c3IvYmluL2VudiBweXRob24KLWltcG9ydCBzeXMKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UKLWZyb20gdGVzdCBpbXBvcnQgc3RyaW5nX3Rlc3RzCiAjIFVzZXJTdHJpbmcgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIGJ1aWx0aW4gc3RyaW5nIHR5cGUuCiAjIFVzZXJTdHJpbmcgaW5zdGFuY2VzIHNob3VsZCBiZWhhdmUgc2ltaWxhciB0byBidWlsdGluIHN0cmluZyBvYmplY3RzLgotIyBUaGUgdGVzdCBjYXNlcyB3ZXJlIGluIHBhcnQgZGVyaXZlZCBmcm9tICd0ZXN0X3N0cmluZy5weScuCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHN0cmluZ190ZXN0cworCiBmcm9tIFVzZXJTdHJpbmcgaW1wb3J0IFVzZXJTdHJpbmcKIAorY2xhc3MgVXNlclN0cmluZ1Rlc3QoCisgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QsCisgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LAorICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clN0cmluZ1VzZXJTdHJpbmdUZXN0LAorICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVzZXJTdHJpbmdUZXN0CisgICAgKToKKworICAgIHR5cGUydGVzdCA9IFVzZXJTdHJpbmcKKworICAgICMgT3ZlcndyaXRlIHRoZSB0aHJlZSB0ZXN0aW5nIG1ldGhvZHMsIGJlY2F1c2UgVXNlclN0cmluZworICAgICMgY2FuJ3QgY29wZSB3aXRoIGFyZ3VtZW50cyBwcm9wYWdhdGVkIHRvIFVzZXJTdHJpbmcKKyAgICAjIChhbmQgd2UgZG9uJ3QgdGVzdCB3aXRoIHN1YmNsYXNzZXMpCisgICAgZGVmIGNoZWNrZXF1YWwoc2VsZiwgcmVzdWx0LCBvYmplY3QsIG1ldGhvZG5hbWUsICphcmdzKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5maXh0eXBlKHJlc3VsdCkKKyAgICAgICAgb2JqZWN0ID0gc2VsZi5maXh0eXBlKG9iamVjdCkKKyAgICAgICAgIyB3ZSBkb24ndCBmaXggdGhlIGFyZ3VtZW50cywgYmVjYXVzZSBVc2VyU3RyaW5nIGNhbid0IGNvcGUgd2l0aCBpdAorICAgICAgICByZWFscmVzdWx0ID0gZ2V0YXR0cihvYmplY3QsIG1ldGhvZG5hbWUpKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgcmVhbHJlc3VsdAorICAgICAgICApCisKKyAgICBkZWYgY2hlY2tyYWlzZXMoc2VsZiwgZXhjLCBvYmplY3QsIG1ldGhvZG5hbWUsICphcmdzKToKKyAgICAgICAgb2JqZWN0ID0gc2VsZi5maXh0eXBlKG9iamVjdCkKKyAgICAgICAgIyB3ZSBkb24ndCBmaXggdGhlIGFyZ3VtZW50cywgYmVjYXVzZSBVc2VyU3RyaW5nIGNhbid0IGNvcGUgd2l0aCBpdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGV4YywKKyAgICAgICAgICAgIGdldGF0dHIob2JqZWN0LCBtZXRob2RuYW1lKSwKKyAgICAgICAgICAgICphcmdzCisgICAgICAgICkKKworICAgIGRlZiBjaGVja2NhbGwoc2VsZiwgb2JqZWN0LCBtZXRob2RuYW1lLCAqYXJncyk6CisgICAgICAgIG9iamVjdCA9IHNlbGYuZml4dHlwZShvYmplY3QpCisgICAgICAgICMgd2UgZG9uJ3QgZml4IHRoZSBhcmd1bWVudHMsIGJlY2F1c2UgVXNlclN0cmluZyBjYW4ndCBjb3BlIHdpdGggaXQKKyAgICAgICAgZ2V0YXR0cihvYmplY3QsIG1ldGhvZG5hbWUpKCphcmdzKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKFVzZXJTdHJpbmdUZXN0KSkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3N1aXRlKHN1aXRlKQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHZlcmJvc2UgPSAnLXYnIGluIHN5cy5hcmd2Ci0KLXRlc3RlZF9tZXRob2RzID0ge30KLQotZGVmIHRlc3QobWV0aG9kbmFtZSwgaW5wdXQsIG91dHB1dCwgKmFyZ3MpOgotICAgIGdsb2JhbCB0ZXN0ZWRfbWV0aG9kcwotICAgIHRlc3RlZF9tZXRob2RzW21ldGhvZG5hbWVdID0gMQotICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgIHByaW50ICclci4lcyglcyknICUgKGlucHV0LCBtZXRob2RuYW1lLCAiLCAiLmpvaW4obWFwKHJlcHIsIGFyZ3MpKSksCi0gICAgdSA9IFVzZXJTdHJpbmcoaW5wdXQpCi0gICAgb2JqZWN0cyA9IFtpbnB1dCwgdSwgVXNlclN0cmluZyh1KV0KLSAgICByZXMgPSBbIiJdICogMwotICAgIGZvciBpIGluIHJhbmdlKDMpOgotICAgICAgICBvYmplY3QgPSBvYmplY3RzW2ldCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGYgPSBnZXRhdHRyKG9iamVjdCwgbWV0aG9kbmFtZSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgZiA9IE5vbmUKLSAgICAgICAgICAgIHJlc1tpXSA9IEF0dHJpYnV0ZUVycm9yCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmVzW2ldID0gYXBwbHkoZiwgYXJncykKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICByZXNbaV0gPSBzeXMuZXhjX3R5cGUKLSAgICBpZiByZXNbMF0gPT0gcmVzWzFdID09IHJlc1syXSA9PSBvdXRwdXQ6Ci0gICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICBwcmludCAneWVzJwotICAgIGVsc2U6Ci0gICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICBwcmludCAnbm8nCi0gICAgICAgIHByaW50IChtZXRob2RuYW1lLCBpbnB1dCwgb3V0cHV0LCBhcmdzLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdKQotCi1zdHJpbmdfdGVzdHMucnVuX21ldGhvZF90ZXN0cyh0ZXN0KQotc3RyaW5nX3Rlc3RzLnJ1bl9jb250YWluc190ZXN0cyh0ZXN0KQotc3RyaW5nX3Rlc3RzLnJ1bl9pbnBsYWNlX3Rlc3RzKFVzZXJTdHJpbmcpCisgICAgdGVzdF9tYWluKCkK