ZGlmZiAtLWdpdCBhL2NvcmUvTWFrZWZpbGUgYi9jb3JlL01ha2VmaWxlCmluZGV4IGY3YTRhYzAuLmVhYTMxOTAgMTAwNjQ0Ci0tLSBhL2NvcmUvTWFrZWZpbGUKKysrIGIvY29yZS9NYWtlZmlsZQpAQCAtNjkyLDcgKzY5Miw3IEBACiAKIEJPQVJEX0tFUk5FTF9NT0RVTEVfRElSUyArPSB0b3AKIAotIyBEZWZhdWx0IHRvIG5vdCBnZW5lcmF0aW5nIG1vZHVsZXMuZGVwIGZvciBrZXJuZWwgbW9kdWxlcyBvbiBzeXN0ZW0KKyMgRGVmYXVsdCB0byBub3QgZ2VuZXJhdGluZyBtb2R1bGVzLmxvYWQgZm9yIGtlcm5lbCBtb2R1bGVzIG9uIHN5c3RlbQogIyBzaWRlLiBXZSBzaG91bGQgb25seSBsb2FkIHRoZXNlIG1vZHVsZXMgaWYgdGhleSBhcmUgZGVwZW5kZWQgYnkgdmVuZG9yCiAjIHNpZGUgbW9kdWxlcy4KIGlmZXEgKCQoQk9BUkRfU1lTVEVNX0tFUk5FTF9NT0RVTEVTX0xPQUQpLCkKQEAgLTEyNjcsNiArMTI2NywzNyBAQAogCiBlbmRpZgogCisjIFJldHVybnMgYSBsaXN0IG9mIEVYVFJBX0lOU1RBTExfWklQUyB0cmlvcyB3aG9zZSBwcmltYXJ5IGZpbGUgaXMgY29udGFpbmVkIHdpdGhpbiAkKDEpCisjIFRoZSB0cmlvcyB3aWxsIGNvbnRhaW4gdGhlIHByaW1hcnkgaW5zdGFsbGVkIGZpbGUgOiB0aGUgZGlyZWN0b3J5IHRvIHVuemlwIHRoZSB6aXAgdG8gOiB0aGUgemlwCitkZWZpbmUgcmVsZXZhbnQtZXh0cmEtaW5zdGFsbC16aXBzCiskKHN0cmlwICQoZm9yZWFjaCBwLCQoRVhUUkFfSU5TVEFMTF9aSVBTKSwgXAorICAkKGlmICQoZmlsdGVyICQoY2FsbCB3b3JkLWNvbG9uLDEsJChwKSksJCgxKSksIFwKKyAgICAkKHApKSkpCitlbmRlZgorCisjIFdyaXRlcyBhIHRleHQgZmlsZSB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgZmlsZXMgdGhhdCB3aWxsIGJlIGluc2lkZSBhIHBhcnRpdGlvbi4KKyMgQWxsIHRoZSBmaWxlIHBhdGhzIHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhlIHBhcnRpdGlvbidzIHN0YWdpbmcgZGlyZWN0b3J5LgorIyBJdCB3aWxsIGFsc28gdGFrZSBpbnRvIGFjY291bnQgZmlsZXMgaW5zaWRlIHppcHMgbGlzdGVkIGluIEVYVFJBX0lOU1RBTExfWklQUy4KKyMKKyMgQXJndW1lbnRzOgorIyAgICQoMSk6IE91dHB1dCBmaWxlCisjICAgJCgyKTogVGhlIHBhcnRpdGlvbidzIHN0YWdpbmcgZGlyZWN0b3J5CisjICAgJCgzKTogRmlsZXMgdG8gaW5jbHVkZSBpbiB0aGUgcGFydGl0aW9uCitkZWZpbmUgd3JpdGUtcGFydGl0aW9uLWZpbGUtbGlzdAorJCgxKTogUFJJVkFURV9GSUxFUyA6PSAkKHN1YnN0ICQoMikvLCwkKGZpbHRlciAkKDIpLyUsJCgzKSkpCiskKDEpOiBQUklWQVRFX0VYVFJBX0lOU1RBTExfWklQUyA6PSAkKGNhbGwgcmVsZXZhbnQtZXh0cmEtaW5zdGFsbC16aXBzLCQoZmlsdGVyICQoMikvJSwkKDMpKSkKKyQoMSk6ICQkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9leHRyYV9pbnN0YWxsX3ppcHNfZmlsZV9saXN0ICQoZm9yZWFjaCBwLCQoY2FsbCByZWxldmFudC1leHRyYS1pbnN0YWxsLXppcHMsJChmaWx0ZXIgJCgyKS8lLCQoMykpKSwkKGNhbGwgd29yZC1jb2xvbiwzLCQocCkpKQorCUBlY2hvIFdyaXRpbmcgJCRACisJcm0gLWYgJCRACisJZWNobyAtbiA+ICQkQAorCSQkKGZvcmVhY2ggZiwkJChQUklWQVRFX0ZJTEVTKSxlY2hvICIkJChmKSIgPj4gJCRAJCQobmV3bGluZSkpCisJJCQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2V4dHJhX2luc3RhbGxfemlwc19maWxlX2xpc3QgJCgyKSAkJChQUklWQVRFX0VYVFJBX0lOU1RBTExfWklQUykgPj4gJCRACitlbmRlZgorCisKK3JhbWRpc2tfaW50ZXJtZWRpYXRlcyA6PSQ9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsUEFDS0FHSU5HLHJhbWRpc2spCiskKGV2YWwgJChjYWxsIHdyaXRlLXBhcnRpdGlvbi1maWxlLWxpc3QsJChyYW1kaXNrX2ludGVybWVkaWF0ZXMpL2ZpbGVfbGlzdC50eHQsJChUQVJHRVRfUkFNRElTS19PVVQpLCQoSU5URVJOQUxfUkFNRElTS19GSUxFUykpKQorCiAjIFRoZSB2YWx1ZSBvZiBSQU1ESVNLX05PREVfTElTVCBpcyBkZWZpbmVkIGluIHN5c3RlbS9jb3JlL3Jvb3RkaXIvQW5kcm9pZC5icC4KICMgVGhpcyBmaWxlIGNvbnRhaW5zIC9kZXYgbm9kZXMgZGVzY3JpcHRpb24gYWRkZWQgdG8gdGhlIGdlbmVyaWMgcmFtZGlzawogCkBAIC0zNDcyLDMzICszNTAzLDYgQEAKIAogRlVMTF9TWVNURU1JTUFHRV9ERVBTICs9ICQoSU5URVJOQUxfUk9PVF9GSUxFUykgJChJTlNUQUxMRURfRklMRVNfRklMRV9ST09UKQogCi0jIFJldHVybnMgYSBsaXN0IG9mIEVYVFJBX0lOU1RBTExfWklQUyB0cmlvcyB3aG9zZSBwcmltYXJ5IGZpbGUgaXMgY29udGFpbmVkIHdpdGhpbiAkKDEpCi0jIFRoZSB0cmlvcyB3aWxsIGNvbnRhaW4gdGhlIHByaW1hcnkgaW5zdGFsbGVkIGZpbGUgOiB0aGUgZGlyZWN0b3J5IHRvIHVuemlwIHRoZSB6aXAgdG8gOiB0aGUgemlwCi1kZWZpbmUgcmVsZXZhbnQtZXh0cmEtaW5zdGFsbC16aXBzCi0kKHN0cmlwICQoZm9yZWFjaCBwLCQoRVhUUkFfSU5TVEFMTF9aSVBTKSwgXAotICAkKGlmICQoZmlsdGVyICQoY2FsbCB3b3JkLWNvbG9uLDEsJChwKSksJCgxKSksIFwKLSAgICAkKHApKSkpCi1lbmRlZgotCi0jIFdyaXRlcyBhIHRleHQgZmlsZSB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgZmlsZXMgdGhhdCB3aWxsIGJlIGluc2lkZSBhIHBhcnRpdGlvbi4KLSMgQWxsIHRoZSBmaWxlIHBhdGhzIHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhlIHBhcnRpdGlvbidzIHN0YWdpbmcgZGlyZWN0b3J5LgotIyBJdCB3aWxsIGFsc28gdGFrZSBpbnRvIGFjY291bnQgZmlsZXMgaW5zaWRlIHppcHMgbGlzdGVkIGluIEVYVFJBX0lOU1RBTExfWklQUy4KLSMKLSMgQXJndW1lbnRzOgotIyAgICQoMSk6IE91dHB1dCBmaWxlCi0jICAgJCgyKTogVGhlIHBhcnRpdGlvbidzIHN0YWdpbmcgZGlyZWN0b3J5Ci0jICAgJCgzKTogRmlsZXMgdG8gaW5jbHVkZSBpbiB0aGUgcGFydGl0aW9uCi1kZWZpbmUgd3JpdGUtcGFydGl0aW9uLWZpbGUtbGlzdAotJCgxKTogUFJJVkFURV9GSUxFUyA6PSAkKHN1YnN0ICQoMikvLCwkKGZpbHRlciAkKDIpLyUsJCgzKSkpCi0kKDEpOiBQUklWQVRFX0VYVFJBX0lOU1RBTExfWklQUyA6PSAkKGNhbGwgcmVsZXZhbnQtZXh0cmEtaW5zdGFsbC16aXBzLCQoZmlsdGVyICQoMikvJSwkKDMpKSkKLSQoMSk6ICQkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9leHRyYV9pbnN0YWxsX3ppcHNfZmlsZV9saXN0ICQoZm9yZWFjaCBwLCQoY2FsbCByZWxldmFudC1leHRyYS1pbnN0YWxsLXppcHMsJChmaWx0ZXIgJCgyKS8lLCQoMykpKSwkKGNhbGwgd29yZC1jb2xvbiwzLCQocCkpKQotCUBlY2hvIFdyaXRpbmcgJCRACi0Jcm0gLWYgJCRACi0JZWNobyAtbiA+ICQkQAotCSQkKGZvcmVhY2ggZiwkJChQUklWQVRFX0ZJTEVTKSxlY2hvICIkJChmKSIgPj4gJCRAJCQobmV3bGluZSkpCi0JJCQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2V4dHJhX2luc3RhbGxfemlwc19maWxlX2xpc3QgJCgyKSAkJChQUklWQVRFX0VYVFJBX0lOU1RBTExfWklQUykgPj4gJCRACi1lbmRlZgotCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBpZmRlZiBCVUlMRElOR19TWVNURU1fSU1BR0UKIApAQCAtNjM4Myw2ICs2Mzg3LDEwIEBACiAgIGVuZGlmCiBlbmRpZgogCitpZmRlZiBCVUlMRElOR19WRU5ET1JfS0VSTkVMX0JPT1RfSU1BR0UKKyAgJChCVUlMVF9UQVJHRVRfRklMRVNfRElSKTogJChJTlRFUk5BTF9WRU5ET1JfS0VSTkVMX1JBTURJU0tfRklMRVMpCitlbmRpZgorCiBpZmRlZiBCVUlMRElOR19SRUNPVkVSWV9JTUFHRQogICAjIFRPRE8oYi8zMDQxNDQyOCk6IENhbid0IGRlcGVuZCBvbiBJTlRFUk5BTF9SRUNPVkVSWUlNQUdFX0ZJTEVTIGFsb25lIGxpa2Ugb3RoZXIKICAgIyBCVUlMVF9UQVJHRVRfRklMRVNfUEFDS0FHRSBkZXBlbmRlbmNpZXMgYmVjYXVzZSBjdXJyZW50bHkgdGhlcmUncmUgY3AvcnN5bmMvcm0KZGlmZiAtLWdpdCBhL2NvcmUvYW5kcm9pZF9zb29uZ19jb25maWdfdmFycy5tayBiL2NvcmUvYW5kcm9pZF9zb29uZ19jb25maWdfdmFycy5tawppbmRleCAyNmZlMWRhLi42YjgzNTM1IDEwMDY0NAotLS0gYS9jb3JlL2FuZHJvaWRfc29vbmdfY29uZmlnX3ZhcnMubWsKKysrIGIvY29yZS9hbmRyb2lkX3Nvb25nX2NvbmZpZ192YXJzLm1rCkBAIC0zOSw2ICszOSw3IEBACiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxUQVJHRVRfRFlOQU1JQ182NF8zMl9EUk1TRVJWRVIpCiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxUQVJHRVRfRU5BQkxFX01FRElBRFJNXzY0KQogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyLEFORFJPSUQsVEFSR0VUX0RZTkFNSUNfNjRfMzJfTUVESUFTRVJWRVIpCiskKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxCT0FSRF9HRU5GU19MQUJFTFNfVkVSU0lPTikKIAogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyLEFORFJPSUQsQURESVRJT05BTF9NNERFRlMsJChpZiAkKEJPQVJEX1NFUE9MSUNZX000REVGUyksJChhZGRwcmVmaXggLUQsJChCT0FSRF9TRVBPTElDWV9NNERFRlMpKSkpCiAKZGlmZiAtLWdpdCBhL2NvcmUvY29uZmlnLm1rIGIvY29yZS9jb25maWcubWsKaW5kZXggZjliYTM4Yy4uNDg1ZThjYyAxMDA2NDQKLS0tIGEvY29yZS9jb25maWcubWsKKysrIGIvY29yZS9jb25maWcubWsKQEAgLTg5NCw2ICs4OTQsMTEgQEAKICAgICBQTEFURk9STV9TRVBPTElDWV9DT01QQVRfVkVSU0lPTlMgXAogICAgIFBMQVRGT1JNX1NFUE9MSUNZX1ZFUlNJT04gXAogCitCT0FSRF9HRU5GU19MQUJFTFNfVkVSU0lPTiA/PSAkKEJPQVJEX0FQSV9MRVZFTCkKK2lmZXEgKCQoY2FsbCBtYXRoX2d0LCQoQk9BUkRfQVBJX0xFVkVMKSwkKEJPQVJEX0dFTkZTX0xBQkVMU19WRVJTSU9OKSksdHJ1ZSkKKyAgJChlcnJvciBCT0FSRF9HRU5GU19MQUJFTFNfVkVSU0lPTiAoJChCT0FSRF9HRU5GU19MQUJFTFNfVkVSU0lPTikpIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEJPQVJEX0FQSV9MRVZFTCAoJChCT0FSRF9BUElfTEVWRUwpKSkKK2VuZGlmCisKIGlmZXEgKCQoUFJPRFVDVF9SRVRST0ZJVF9EWU5BTUlDX1BBUlRJVElPTlMpLHRydWUpCiAgIGlmbmVxICgkKFBST0RVQ1RfVVNFX0RZTkFNSUNfUEFSVElUSU9OUyksdHJ1ZSkKICAgICAkKGVycm9yIFBST0RVQ1RfVVNFX0RZTkFNSUNfUEFSVElUSU9OUyBtdXN0IGJlIHRydWUgd2hlbiBQUk9EVUNUX1JFVFJPRklUX0RZTkFNSUNfUEFSVElUSU9OUyBcCmRpZmYgLS1naXQgYS9jb3JlL2xheW91dGxpYl9kYXRhLm1rIGIvY29yZS9sYXlvdXRsaWJfZGF0YS5tawppbmRleCBlNDIwYTAwLi4wNjczNWRmIDEwMDY0NAotLS0gYS9jb3JlL2xheW91dGxpYl9kYXRhLm1rCisrKyBiL2NvcmUvbGF5b3V0bGliX2RhdGEubWsKQEAgLTMxLDggKzMxLDE4IEBACiAJJChoaWRlKSBta2RpciAtcCAkKGRpciAkQCkKIAkkKGhpZGUpIGNwIC12ZiAkPCAkQAogCi0jIExpc3Qgb2YgYWxsIGRhdGEgZmlsZXMgLSBmb250IGZpbGVzLCBmb250IGNvbmZpZ3VyYXRpb24gZmlsZXMsIGtleSBjaGFyYWN0ZXIgbWFwIGZpbGVzCi1MQVlPVVRMSUJfRklMRVMgOj0gJChmb250c19kZXZpY2UpICQoZm9udF9jb25maWcpICQoa2V5Ym9hcmRzKQorSFlQSEVOX1RFTVAgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixQQUNLQUdJTkcsaHlwaGVuLEhPU1QsQ09NTU9OKQorCisjIFRoZSBoeXBoZW5hdGlvbiBwYXR0ZXJuIGZpbGVzIG5lZWRlZCB0byBzdXBwb3J0IHRleHQgaHlwaGVuYXRpb24KK2h5cGhlbiA6PSAkKGZpbHRlciAkKFRBUkdFVF9PVVQpL3Vzci9oeXBoZW4tZGF0YS8lLmh5YiwgJChJTlRFUk5BTF9TWVNURU1JTUFHRV9GSUxFUykpCitoeXBoZW4gOj0gJChhZGRwcmVmaXggJChIWVBIRU5fVEVNUCkvLCAkKG5vdGRpciAkKGh5cGhlbikpKQorCiskKGh5cGhlbik6ICQoSFlQSEVOX1RFTVApLyU6ICQoVEFSR0VUX09VVCkvdXNyL2h5cGhlbi1kYXRhLyUKKwkkKGhpZGUpIG1rZGlyIC1wICQoZGlyICRAKQorCSQoaGlkZSkgY3AgLXZmICQ8ICRACisKKyMgTGlzdCBvZiBhbGwgZGF0YSBmaWxlcyAtIGZvbnQgZmlsZXMsIGZvbnQgY29uZmlndXJhdGlvbiBmaWxlcywga2V5IGNoYXJhY3RlciBtYXAgZmlsZXMsIGh5cGhlbmF0aW9uIHBhdHRlcm4gZmlsZXMKK0xBWU9VVExJQl9GSUxFUyA6PSAkKGZvbnRzX2RldmljZSkgJChmb250X2NvbmZpZykgJChrZXlib2FyZHMpICQoaHlwaGVuKQogCiAuUEhPTlk6IGxheW91dGxpYiBsYXlvdXRsaWItdGVzdHMKIGxheW91dGxpYiBsYXlvdXRsaWItdGVzdHM6ICQoTEFZT1VUTElCX0ZJTEVTKQpAQCAtNDAsNiArNTAsNyBAQAogJChjYWxsIGRpc3QtZm9yLWdvYWxzLCBsYXlvdXRsaWIsICQoZm9yZWFjaCBtLCQoZm9udHNfZGV2aWNlKSwgJChtKTpsYXlvdXRsaWJfbmF0aXZlL2ZvbnRzLyQobm90ZGlyICQobSkpKSkKICQoY2FsbCBkaXN0LWZvci1nb2FscywgbGF5b3V0bGliLCAkKGZvcmVhY2ggbSwkKGZvbnRfY29uZmlnKSwgJChtKTpsYXlvdXRsaWJfbmF0aXZlL2ZvbnRzLyQobm90ZGlyICQobSkpKSkKICQoY2FsbCBkaXN0LWZvci1nb2FscywgbGF5b3V0bGliLCAkKGZvcmVhY2ggbSwkKGtleWJvYXJkcyksICQobSk6bGF5b3V0bGliX25hdGl2ZS9rZXlib2FyZHMvJChub3RkaXIgJChtKSkpKQorJChjYWxsIGRpc3QtZm9yLWdvYWxzLCBsYXlvdXRsaWIsICQoZm9yZWFjaCBtLCQoaHlwaGVuKSwgJChtKTpsYXlvdXRsaWJfbmF0aXZlL2h5cGhlbi1kYXRhLyQobm90ZGlyICQobSkpKSkKIAogRk9OVF9URU1QIDo9CiBmb250X2NvbmZpZyA6PQpkaWZmIC0tZ2l0IGEvY29yZS9tYWluLm1rIGIvY29yZS9tYWluLm1rCmluZGV4IDUxNDJhZGMuLjgzZDQyYWYgMTAwNjQ0Ci0tLSBhL2NvcmUvbWFpbi5taworKysgYi9jb3JlL21haW4ubWsKQEAgLTI4MSw3ICsyODEsMTcgQEAKIAogIyBBbmRyb2lkLm1rIGZpbGVzIGFyZSBvbmx5IHVzZWQgb24gTGludXggYnVpbGRzLCBNYWMgb25seSBzdXBwb3J0cyBBbmRyb2lkLmJwCiBpZmVxICgkKEhPU1RfT1MpLGxpbnV4KQotICBzdWJkaXJfbWFrZWZpbGVzICs9ICQoZmlsZSA8JChPVVRfRElSKS8ubW9kdWxlX3BhdGhzL0FuZHJvaWQubWsubGlzdCkKKyAgaWZlcSAoJChQUk9EVUNUX0lHTk9SRV9BTExfQU5EUk9JRE1LKSx0cnVlKQorICAgIGFsbG93ZWRfYW5kcm9pZG1rX2ZpbGVzIDo9CisgICAgaWZkZWYgUFJPRFVDVF9BTkRST0lETUtfQUxMT1dMSVNUX0ZJTEUKKyAgICAgIC1pbmNsdWRlICQoUFJPRFVDVF9BTkRST0lETUtfQUxMT1dMSVNUX0ZJTEUpCisgICAgZW5kaWYKKyAgICBhbGxvd2VkX2FuZHJvaWRta19maWxlcyArPSAkKFBST0RVQ1RfQUxMT1dFRF9BTkRST0lETUtfRklMRVMpCisgICAgc3ViZGlyX21ha2VmaWxlcyArPSAkKGZpbHRlciAkKGFsbG93ZWRfYW5kcm9pZG1rX2ZpbGVzKSwkKGZpbGUgPCQoT1VUX0RJUikvLm1vZHVsZV9wYXRocy9BbmRyb2lkLm1rLmxpc3QpKQorICAgIGFsbG93ZWRfYW5kcm9pZG1rX2ZpbGVzIDo9CisgIGVsc2UKKyAgICBzdWJkaXJfbWFrZWZpbGVzICs9ICQoZmlsZSA8JChPVVRfRElSKS8ubW9kdWxlX3BhdGhzL0FuZHJvaWQubWsubGlzdCkKKyAgZW5kaWYKIGVuZGlmCiAKIHN1YmRpcl9tYWtlZmlsZXMgKz0gJChTT09OR19PVVRfRElSKS9sYXRlLSQoVEFSR0VUX1BST0RVQ1QpJChDT1ZFUkFHRV9TVUZGSVgpLm1rCmRpZmYgLS1naXQgYS9jb3JlL3Byb2R1Y3QubWsgYi9jb3JlL3Byb2R1Y3QubWsKaW5kZXggN2NmNGVjMi4uOWM1NjdjMyAxMDA2NDQKLS0tIGEvY29yZS9wcm9kdWN0Lm1rCisrKyBiL2NvcmUvcHJvZHVjdC5tawpAQCAtNDkyLDYgKzQ5MiwxMyBAQAogIyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHN5c3RlbV9saW5rZXJfY29uZmlnLgogX3Byb2R1Y3RfbGlzdF92YXJzICs9IFBST0RVQ1RfRVhUUkFfU1RVQl9MSUJSQVJJRVMKIAorIyBJZiBzZXQgdG8gdHJ1ZSwgYWxsIEFuZHJvaWQubWsgZmlsZXMgd2lsbCBiZSBpZ25vcmVkLgorX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9JR05PUkVfQUxMX0FORFJPSURNSworIyBXaGVuIFBST0RVQ1RfSUdOT1JFX0FMTF9BTkRST0lETUsgaXMgc2V0IHRvIHRydWUsIHRoaXMgdmFyaWFibGUgd2lsbCBiZSB1c2VkIHRvIGFsbG93IHNvbWUgQW5kcm9pZC5tayBmaWxlcy4KK19wcm9kdWN0X2xpc3RfdmFycyArPSBQUk9EVUNUX0FMTE9XRURfQU5EUk9JRE1LX0ZJTEVTCisjIFdoZW4gUFJPRFVDVF9JR05PUkVfQUxMX0FORFJPSURNSyBpcyBzZXQgdG8gdHJ1ZSwgcGF0aCBvZiBmaWxlIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIGFsbG93ZWQgQW5kcm9pZC5tayBmaWxlcworX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9BTkRST0lETUtfQUxMT1dMSVNUX0ZJTEUKKwogLktBVElfUkVBRE9OTFkgOj0gX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgX3Byb2R1Y3RfbGlzdF92YXJzCiBfcHJvZHVjdF92YXJfbGlzdCA6PSQ9ICQoX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMpICQoX3Byb2R1Y3RfbGlzdF92YXJzKQogCmRpZmYgLS1naXQgYS9jb3JlL3Nvb25nX2NvbmZpZy5tayBiL2NvcmUvc29vbmdfY29uZmlnLm1rCmluZGV4IGMwNjQxZGUuLmVlNmE5ZjYgMTAwNjQ0Ci0tLSBhL2NvcmUvc29vbmdfY29uZmlnLm1rCisrKyBiL2NvcmUvc29vbmdfY29uZmlnLm1rCkBAIC0yNzUsMTAgKzI3NSw2IEBACiAKICQoY2FsbCBhZGRfanNvbl9ib29sLCBDb21wcmVzc2VkQXBleCwgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfQ09NUFJFU1NFRF9BUEVYKSkpCiAKLWlmbmRlZiBBUEVYX0JVSUxEX0ZPUl9QUkVfU19ERVZJQ0VTCi0kKGNhbGwgYWRkX2pzb25fYm9vbCwgVHJpbW1lZEFwZXgsICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX1RSSU1NRURfQVBFWCkpKQotZW5kaWYKLQogJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJvYXJkVXNlc1JlY292ZXJ5QXNCb290LCAkKGZpbHRlciB0cnVlLCQoQk9BUkRfVVNFU19SRUNPVkVSWV9BU19CT09UKSkpCiAKICQoY2FsbCBhZGRfanNvbl9saXN0LCBCb2FyZEtlcm5lbEJpbmFyaWVzLCAkKEJPQVJEX0tFUk5FTF9CSU5BUklFUykpCkBAIC00MjUsNiArNDIxLDIxIEBACiAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRXh0NFNoYXJlRHVwQmxvY2tzLCAkKEJPQVJEX0VYVDRfU0hBUkVfRFVQX0JMT0NLUykpCiAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRmxhc2hMb2dpY2FsQmxvY2tTaXplLCAkKEJPQVJEX0ZMQVNIX0xPR0lDQUxfQkxPQ0tfU0laRSkpCiAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRmxhc2hFcmFzZUJsb2NrU2l6ZSwgJChCT0FSRF9GTEFTSF9FUkFTRV9CTE9DS19TSVpFKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nVmJtZXRhSW1hZ2UsICQoQlVJTERJTkdfVkJNRVRBX0lNQUdFKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJvYXJkQXZiRW5hYmxlLCAkKGZpbHRlciB0cnVlLCQoQk9BUkRfQVZCX0VOQUJMRSkpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEF2YkFsZ29yaXRobSwgJChCT0FSRF9BVkJfQUxHT1JJVEhNKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRBdmJLZXlQYXRoLCAkKEJPQVJEX0FWQl9LRVlfUEFUSCkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkQXZiUm9sbGJhY2tJbmRleCwgJChCT0FSRF9BVkJfUk9MTEJBQ0tfSU5ERVgpKQorICAkKGNhbGwgYWRkX2pzb25fbWFwLCBDaGFpbmVkVmJtZXRhUGFydGl0aW9ucykKKyAgJChmb3JlYWNoIHBhcnRpdGlvbixzeXN0ZW0gdmVuZG9yICQoQk9BUkRfQVZCX1ZCTUVUQV9DVVNUT01fUEFSVElUSU9OUyksXAorICAgICQoY2FsbCBhZGRfanNvbl9tYXAsICQocGFydGl0aW9uKSkgXAorICAgICAgJChjYWxsIGFkZF9qc29uX2xpc3QsUGFydGl0aW9ucywkKEJPQVJEX0FWQl9WQk1FVEFfJChjYWxsIHRvLXVwcGVyLCQocGFydGl0aW9uKSkpKSBcCisgICAgICAkKGNhbGwgYWRkX2pzb25fc3RyLEtleSwkKEJPQVJEX0FWQl9WQk1FVEFfJChjYWxsIHRvLXVwcGVyLCQocGFydGl0aW9uKSlfS0VZX1BBVEgpKSBcCisgICAgICAkKGNhbGwgYWRkX2pzb25fc3RyLEFsZ29yaXRobSwkKEJPQVJEX0FWQl9WQk1FVEFfJChjYWxsIHRvLXVwcGVyLCQocGFydGl0aW9uKSlfQUxHT1JJVEhNKSkgXAorICAgICAgJChjYWxsIGFkZF9qc29uX3N0cixSb2xsYmFja0luZGV4LCQoQk9BUkRfQVZCX1ZCTUVUQV8kKGNhbGwgdG8tdXBwZXIsJChwYXJ0aXRpb24pKV9ST0xMQkFDS19JTkRFWCkpIFwKKyAgICAgICQoY2FsbCBhZGRfanNvbl9zdHIsUm9sbGJhY2tJbmRleExvY2F0aW9uLCQoQk9BUkRfQVZCX1ZCTUVUQV8kKGNhbGwgdG8tdXBwZXIsJChwYXJ0aXRpb24pKV9ST0xMQkFDS19JTkRFWF9MT0NBVElPTikpIFwKKyAgICAkKGNhbGwgZW5kX2pzb25fbWFwKSkKKyAgJChjYWxsIGVuZF9qc29uX21hcCkKIAogICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQm9hcmRVc2VzUmVjb3ZlcnlBc0Jvb3QsICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX1JFQ09WRVJZX0FTX0JPT1QpKSkKICAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIFByb2R1Y3RVc2VEeW5hbWljUGFydGl0aW9uU2l6ZSwgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfVVNFX0RZTkFNSUNfUEFSVElUSU9OX1NJWkUpKSkKQEAgLTQ0MCwxNSArNDUxLDIwIEBACiAgICMgVXNlZCB0byBnZW5lcmF0ZSBfZGxrbSBwYXJ0aXRpb25zCiAgICQoY2FsbCBhZGRfanNvbl9ib29sLCBCdWlsZGluZ1N5c3RlbURsa21JbWFnZSwgICAgICAgICAgICAgICAkKEJVSUxESU5HX1NZU1RFTV9ETEtNX0lNQUdFKSkKICAgJChjYWxsIGFkZF9qc29uX2xpc3QsIFN5c3RlbUtlcm5lbE1vZHVsZXMsICQoQk9BUkRfU1lTVEVNX0tFUk5FTF9NT0RVTEVTKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgU3lzdGVtS2VybmVsQmxvY2tsaXN0RmlsZSwgJChCT0FSRF9TWVNURU1fS0VSTkVMX01PRFVMRVNfQkxPQ0tMSVNUX0ZJTEUpKQorICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgU3lzdGVtS2VybmVsTG9hZE1vZHVsZXMsICQoQk9BUkRfU1lTVEVNX0tFUk5FTF9NT0RVTEVTX0xPQUQpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQnVpbGRpbmdWZW5kb3JEbGttSW1hZ2UsICAgICAgICAgICAgICAgJChCVUlMRElOR19WRU5ET1JfRExLTV9JTUFHRSkpCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBWZW5kb3JLZXJuZWxNb2R1bGVzLCAkKEJPQVJEX1ZFTkRPUl9LRVJORUxfTU9EVUxFUykpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIFZlbmRvcktlcm5lbEJsb2NrbGlzdEZpbGUsICQoQk9BUkRfVkVORE9SX0tFUk5FTF9NT0RVTEVTX0JMT0NLTElTVF9GSUxFKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nT2RtRGxrbUltYWdlLCAgICAgICAgICAgICAgICQoQlVJTERJTkdfT0RNX0RMS01fSU1BR0UpKQorICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgT2RtS2VybmVsTW9kdWxlcywgJChCT0FSRF9PRE1fS0VSTkVMX01PRFVMRVMpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBPZG1LZXJuZWxCbG9ja2xpc3RGaWxlLCAkKEJPQVJEX09ETV9LRVJORUxfTU9EVUxFU19CTE9DS0xJU1RfRklMRSkpCiAKICAgIyBVc2VkIHRvIGdlbmVyYXRlIC92ZW5kb3IvYnVpbGQucHJvcAogICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgQm9hcmRJbmZvRmlsZXMsICQoaWYgJChUQVJHRVRfQk9BUkRfSU5GT19GSUxFUyksJChUQVJHRVRfQk9BUkRfSU5GT19GSUxFUyksJChmaXJzdHdvcmQgJChUQVJHRVRfQk9BUkRfSU5GT19GSUxFKSAkKHdpbGRjYXJkICQoVEFSR0VUX0RFVklDRV9ESVIpL2JvYXJkLWluZm8udHh0KSkpKQogICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb290TG9hZGVyQm9hcmROYW1lLCAkKFRBUkdFVF9CT09UTE9BREVSX0JPQVJEX05BTUUpKQogCi0gICQoY2FsbCBhZGRfanNvbl9tYXAsIFByb2R1Y3RDb3B5RmlsZXMpCi0gICQoZm9yZWFjaCBwYWlyLCQoUFJPRFVDVF9DT1BZX0ZJTEVTKSxcCi0gICAgJChjYWxsIGFkZF9qc29uX3N0ciwkKHdvcmQgMSwkKHN1YnN0IDosICwkKHBhaXIpKSksJCh3b3JkIDIsJChzdWJzdCA6LCAsJChwYWlyKSkpKSkKLSAgJChjYWxsIGVuZF9qc29uX21hcCkKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIFByb2R1Y3RDb3B5RmlsZXMsICQoUFJPRFVDVF9DT1BZX0ZJTEVTKSkKIAogJChjYWxsIGVuZF9qc29uX21hcCkKIApkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvYmFzZV9zeXN0ZW0ubWsgYi90YXJnZXQvcHJvZHVjdC9iYXNlX3N5c3RlbS5tawppbmRleCA5ZDY0MDJlLi4zYTcyNTZlIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9iYXNlX3N5c3RlbS5taworKysgYi90YXJnZXQvcHJvZHVjdC9iYXNlX3N5c3RlbS5tawpAQCAtMTgsNiArMTgsNyBAQAogUFJPRFVDVF9QQUNLQUdFUyArPSBcCiAgICAgYWJ4IFwKICAgICBhY29uZmlnZCBcCisgICAgYWNvbmZpZ2Qtc3lzdGVtIFwKICAgICBhZGJkX3N5c3RlbV9hcGkgXAogICAgIGFmbGFncyBcCiAgICAgYW0gXApkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9BbmRyb2lkLmJwIGIvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9BbmRyb2lkLmJwCmluZGV4IGM4MWU2NmMuLjcwZjY0MjAgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvQW5kcm9pZC5icAorKysgYi90YXJnZXQvcHJvZHVjdC9nZW5lcmljL0FuZHJvaWQuYnAKQEAgLTM0OCw3ICszNDgsMTAgQEAKICAgICBkaXJzOiBhbmRyb2lkX3Jvb3RkaXJzLAogICAgIHN5bWxpbmtzOiBhbmRyb2lkX3N5bWxpbmtzLAogICAgIGZpbGVfY29udGV4dHM6ICI6cGxhdF9maWxlX2NvbnRleHRzIiwKLSAgICBsaW5rZXJfY29uZmlnX3NyYzogIjpzeXN0ZW1fbGlua2VyX2NvbmZpZ19qc29uX2ZpbGUiLAorICAgIGxpbmtlcl9jb25maWc6IHsKKyAgICAgICAgZ2VuX2xpbmtlcl9jb25maWc6IHRydWUsCisgICAgICAgIGxpbmtlcl9jb25maWdfc3JjczogWyI6c3lzdGVtX2xpbmtlcl9jb25maWdfanNvbl9maWxlIl0sCisgICAgfSwKICAgICBmc3Zlcml0eTogewogICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgICJldGMvYm9vdC1pbWFnZS5wcm9mIiwKQEAgLTM3OSw2ICszODIsNyBAQAogICAgIGRlcHM6IFsKICAgICAgICAgImFieCIsCiAgICAgICAgICJhY29uZmlnZCIsCisgICAgICAgICJhY29uZmlnZC1zeXN0ZW0iLAogICAgICAgICAiYWZsYWdzIiwKICAgICAgICAgImFtIiwKICAgICAgICAgImFuZHJvaWQuc29mdHdhcmUuY3JlZGVudGlhbHMucHJlYnVpbHQueG1sIiwgLy8gZ2VuZXJpY19zeXN0ZW0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX2luZm8ucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ19pbmZvLnJzCmluZGV4IDI1MzI2MDkuLjVkNTY1ZTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX2luZm8ucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfaW5mby5ycwpAQCAtODMsNyArODMsNyBAQAogICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdF9mcm9tX3NvdXJjZSgpOwogICAgICAgICBhc3NlcnQhKGZsYWdfaW5mb19saXN0LmlzX29rKCkpOwogICAgICAgICBsZXQgZXhwZWN0ZWRfZmxhZ19pbmZvX2xpc3QgPQotICAgICAgICAgICAgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7CisgICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBhc3NlcnRfZXEhKGZsYWdfaW5mb19saXN0LnVud3JhcCgpLCBleHBlY3RlZF9mbGFnX2luZm9fbGlzdCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfdGFibGUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ190YWJsZS5ycwppbmRleCA2MDQ2ZDdlLi44ODU2ZWI2IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ190YWJsZS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ190YWJsZS5ycwpAQCAtMTU3LDcgKzE1Nyw4IEBACiAgICAgZm4gdGVzdF90YWJsZV9jb250ZW50cygpIHsKICAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlX2Zyb21fc291cmNlKCk7CiAgICAgICAgIGFzc2VydCEoZmxhZ190YWJsZS5pc19vaygpKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX2ZsYWdfdGFibGUgPSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpOworICAgICAgICBsZXQgZXhwZWN0ZWRfZmxhZ190YWJsZSA9CisgICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGFzc2VydF9lcSEoZmxhZ190YWJsZS51bndyYXAoKSwgZXhwZWN0ZWRfZmxhZ190YWJsZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfdmFsdWUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ192YWx1ZS5ycwppbmRleCA2YTY1NWI5Li4wZGQ1YTlkIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ192YWx1ZS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ192YWx1ZS5ycwpAQCAtODIsNyArODIsNyBAQAogICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0X2Zyb21fc291cmNlKCk7CiAgICAgICAgIGFzc2VydCEoZmxhZ192YWx1ZV9saXN0LmlzX29rKCkpOwogICAgICAgICBsZXQgZXhwZWN0ZWRfZmxhZ192YWx1ZV9saXN0ID0KLSAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKTsKKyAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBhc3NlcnRfZXEhKGZsYWdfdmFsdWVfbGlzdC51bndyYXAoKSwgZXhwZWN0ZWRfZmxhZ192YWx1ZV9saXN0KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvbW9kLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL21vZC5ycwppbmRleCA5ZTVkYWQ1Li5jN2ZkNTVhIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvbW9kLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9tb2QucnMKQEAgLTMyLDYgKzMyLDcgQEAKIHB1YiBzdHJ1Y3QgRmxhZ1BhY2thZ2U8J2E+IHsKICAgICBwdWIgcGFja2FnZV9uYW1lOiAmJ2Egc3RyLAogICAgIHB1YiBwYWNrYWdlX2lkOiB1MzIsCisgICAgcHViIGZpbmdlcnByaW50OiB1NjQsCiAgICAgcHViIGZsYWdfbmFtZXM6IEhhc2hTZXQ8JidhIHN0cj4sCiAgICAgcHViIGJvb2xlYW5fZmxhZ3M6IFZlYzwmJ2EgUHJvdG9QYXJzZWRGbGFnPiwKICAgICAvLyBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGJvb2xlYW4gZmxhZyBpbiB0aGlzIGFjb25maWcgcGFja2FnZSBhbW9uZyBhbGwgYm9vbGVhbgpAQCAtNDQsNiArNDUsNyBAQAogICAgICAgICBGbGFnUGFja2FnZSB7CiAgICAgICAgICAgICBwYWNrYWdlX25hbWUsCiAgICAgICAgICAgICBwYWNrYWdlX2lkLAorICAgICAgICAgICAgZmluZ2VycHJpbnQ6IDAsCiAgICAgICAgICAgICBmbGFnX25hbWVzOiBIYXNoU2V0OjpuZXcoKSwKICAgICAgICAgICAgIGJvb2xlYW5fZmxhZ3M6IHZlYyFbXSwKICAgICAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDAsCkBAIC03OSw2ICs4MSw4IEBACiAgICAgZm9yIHAgaW4gcGFja2FnZXMuaXRlcl9tdXQoKSB7CiAgICAgICAgIHAuYm9vbGVhbl9zdGFydF9pbmRleCA9IGJvb2xlYW5fc3RhcnRfaW5kZXg7CiAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXggKz0gcC5ib29sZWFuX2ZsYWdzLmxlbigpIGFzIHUzMjsKKworICAgICAgICAvLyBUT0RPOiBiLzMxNjM1NzY4NiAtIENhbGN1bGF0ZSBmaW5nZXJwcmludCBhbmQgYWRkIHRvIHBhY2thZ2UuCiAgICAgfQogCiAgICAgcGFja2FnZXMKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9wYWNrYWdlX3RhYmxlLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL3BhY2thZ2VfdGFibGUucnMKaW5kZXggNTY1NTlmOC4uZTQ2NjA3YiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL3BhY2thZ2VfdGFibGUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL3BhY2thZ2VfdGFibGUucnMKQEAgLTQ3LDYgKzQ3LDcgQEAKICAgICAgICAgbGV0IG5vZGUgPSBQYWNrYWdlVGFibGVOb2RlIHsKICAgICAgICAgICAgIHBhY2thZ2VfbmFtZTogU3RyaW5nOjpmcm9tKHBhY2thZ2UucGFja2FnZV9uYW1lKSwKICAgICAgICAgICAgIHBhY2thZ2VfaWQ6IHBhY2thZ2UucGFja2FnZV9pZCwKKyAgICAgICAgICAgIGZpbmdlcnByaW50OiBwYWNrYWdlLmZpbmdlcnByaW50LAogICAgICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogcGFja2FnZS5ib29sZWFuX3N0YXJ0X2luZGV4LAogICAgICAgICAgICAgbmV4dF9vZmZzZXQ6IE5vbmUsCiAgICAgICAgIH07CkBAIC0xMjcsNyArMTI4LDggQEAKICAgICBmbiB0ZXN0X3RhYmxlX2NvbnRlbnRzKCkgewogICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGVfZnJvbV9zb3VyY2UoKTsKICAgICAgICAgYXNzZXJ0IShwYWNrYWdlX3RhYmxlLmlzX29rKCkpOwotICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV90YWJsZSA9IGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCk7CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX3RhYmxlID0KKyAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX3RhYmxlLnVud3JhcCgpLCBleHBlY3RlZF9wYWNrYWdlX3RhYmxlKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvZmxhZ3MuYWNvbmZpZyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9mbGFncy5hY29uZmlnCmluZGV4IDBhMDA0Y2EuLmI2NmQyODIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9mbGFncy5hY29uZmlnCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9mbGFncy5hY29uZmlnCkBAIC0xNCwzICsxNCwxMSBAQAogICBidWc6ICIzNjk4MDg4MDUiCiAgIGRlc2NyaXB0aW9uOiAiV2hlbiBlbmFibGVkLCBsYXVuY2ggYWNvbmZpZ2QgZnJvbSBjb25maWcgaW5mcmEgbW9kdWxlLiIKIH0KKworZmxhZyB7CisgIG5hbWU6ICJlbmFibGVfc3lzdGVtX2Fjb25maWdkX3J1c3QiCisgIG5hbWVzcGFjZTogImNvcmVfZXhwZXJpbWVudHNfdGVhbV9pbnRlcm5hbCIKKyAgYnVnOiAiMzc4MDc5NTM5IgorICBkZXNjcmlwdGlvbjogIldoZW4gZW5hYmxlZCwgdGhlIGFjb25maWdkIGNjX2JpbmFyeSB0YXJnZXQgYmVjb21lcyBhIG5vLW9wLCBhbmQgdGhlIHJ1c3RfYmluYXJ5IGFjb25maWdkLXN5c3RlbSB0YXJnZXQgc3RhcnRzIHVwLiIKKyAgaXNfZml4ZWRfcmVhZF9vbmx5OiB0cnVlCit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3Mvc3JjL2xpYi5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9zcmMvbGliLnJzCmluZGV4IDJlODkxMjcuLmI0MTNjNjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9zcmMvbGliLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9zcmMvbGliLnJzCkBAIC0zOSw2ICszOSwxMSBAQAogICAgIHB1YiBmbiBlbmFibGVfYWNvbmZpZ2RfZnJvbV9tYWlubGluZSgpIC0+IGJvb2wgewogICAgICAgICBhY29uZmlnX2ZsYWdzX3J1c3Q6OmVuYWJsZV9vbmx5X25ld19zdG9yYWdlKCkKICAgICB9CisKKyAgICAvLy8gUmV0dXJucyB0aGUgdmFsdWUgZm9yIHRoZSBlbmFibGVfc3lzdGVtX2Fjb25maWdkX3J1c3QgZmxhZy4KKyAgICBwdWIgZm4gZW5hYmxlX3N5c3RlbV9hY29uZmlnZF9ydXN0KCkgLT4gYm9vbCB7CisgICAgICAgIGFjb25maWdfZmxhZ3NfcnVzdDo6ZW5hYmxlX3N5c3RlbV9hY29uZmlnZF9ydXN0KCkKKyAgICB9CiB9CiAKIC8vLyBNb2R1bGUgdXNlZCB3aGVuIGJ1aWxkaW5nIHdpdGggY2FyZ28KQEAgLTU1LDQgKzYwLDEwIEBACiAgICAgICAgIC8vIFVzZWQgb25seSB0byBlbmFibGUgdHlwZWNoZWNraW5nIGFuZCB0ZXN0aW5nIHdpdGggY2FyZ28KICAgICAgICAgdHJ1ZQogICAgIH0KKworICAgIC8vLyBSZXR1cm5zIGEgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIHRoZSBlbmFibGVfc3lzdGVtX2Fjb25maWdkX3J1c3QgZmxhZy4KKyAgICBwdWIgZm4gZW5hYmxlX3N5c3RlbV9hY29uZmlnZF9ydXN0KCkgLT4gYm9vbCB7CisgICAgICAgIC8vIFVzZWQgb25seSB0byBlbmFibGUgdHlwZWNoZWNraW5nIGFuZCB0ZXN0aW5nIHdpdGggY2FyZ28KKyAgICAgICAgdHJ1ZQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfaW5mby5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfaW5mby5ycwppbmRleCBmMDkwMzk2Li5jZjE2ODM0IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX2luZm8ucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ19pbmZvLnJzCkBAIC0xOTQsMTIgKzE5NCwxNSBAQAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgewogICAgIHVzZSBzdXBlcjo6KjsKLSAgICB1c2UgY3JhdGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0OworICAgIHVzZSBjcmF0ZTo6eworICAgICAgICB0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCwgREVGQVVMVF9GSUxFX1ZFUlNJT04sIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OLAorICAgIH07CiAKLSAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIHZhbHVlIGxpc3Qgc2VyaWFsaXphdGlvbgotICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbigpIHsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKTsKKyAgICAvLyBUT0RPOiBiLzM3NjEwODI2OCAtIFVzZSBwYXJhbWV0ZXJpemVkIHRlc3RzLgorICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb25fZGVmYXVsdCgpIHsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogCiAgICAgICAgIGxldCBoZWFkZXI6ICZGbGFnSW5mb0hlYWRlciA9ICZmbGFnX2luZm9fbGlzdC5oZWFkZXI7CiAgICAgICAgIGxldCByZWludGVycHJldGVkX2hlYWRlciA9IEZsYWdJbmZvSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKQEAgLTIyMCwyMCArMjIzLDQyIEBACiAgICAgfQogCiAgICAgI1t0ZXN0XQotICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoYXQgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2Ygc2VyaWFsaXplZAotICAgIC8vIGJ5dGVzCi0gICAgZm4gdGVzdF92ZXJzaW9uX251bWJlcigpIHsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKTsKLSAgICAgICAgbGV0IGJ5dGVzID0gJmZsYWdfaW5mb19saXN0LmludG9fYnl0ZXMoKTsKLSAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKLSAgICAgICAgbGV0IHZlcnNpb24gPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpLnVud3JhcCgpOwotICAgICAgICBhc3NlcnRfZXEhKHZlcnNpb24sIDEpOworICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbl9tYXgoKSB7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OKTsKKworICAgICAgICBsZXQgaGVhZGVyOiAmRmxhZ0luZm9IZWFkZXIgPSAmZmxhZ19pbmZvX2xpc3QuaGVhZGVyOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9oZWFkZXIgPSBGbGFnSW5mb0hlYWRlcjo6ZnJvbV9ieXRlcygmaGVhZGVyLmludG9fYnl0ZXMoKSk7CisgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF9oZWFkZXIuaXNfb2soKSk7CisgICAgICAgIGFzc2VydF9lcSEoaGVhZGVyLCAmcmVpbnRlcnByZXRlZF9oZWFkZXIudW53cmFwKCkpOworCisgICAgICAgIGxldCBub2RlczogJlZlYzxGbGFnSW5mb05vZGU+ID0gJmZsYWdfaW5mb19saXN0Lm5vZGVzOworICAgICAgICBmb3Igbm9kZSBpbiBub2Rlcy5pdGVyKCkgeworICAgICAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfbm9kZSA9IEZsYWdJbmZvTm9kZTo6ZnJvbV9ieXRlcygmbm9kZS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLCAmcmVpbnRlcnByZXRlZF9ub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBmbGFnX2luZm9fYnl0ZXMgPSBmbGFnX2luZm9fbGlzdC5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCByZWludGVycHJldGVkX2luZm9fbGlzdCA9IEZsYWdJbmZvTGlzdDo6ZnJvbV9ieXRlcygmZmxhZ19pbmZvX2J5dGVzKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX2luZm9fbGlzdC5pc19vaygpKTsKKyAgICAgICAgYXNzZXJ0X2VxISgmZmxhZ19pbmZvX2xpc3QsICZyZWludGVycHJldGVkX2luZm9fbGlzdC51bndyYXAoKSk7CisgICAgICAgIGFzc2VydF9lcSEoZmxhZ19pbmZvX2J5dGVzLmxlbigpIGFzIHUzMiwgaGVhZGVyLmZpbGVfc2l6ZSk7CiAgICAgfQogCisgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhhdCB2ZXJzaW9uIG51bWJlciBzaG91bGQgYmUgYXQgdGhlIHRvcCBvZiBzZXJpYWxpemVkCisgICAgLy8gYnl0ZXMKICAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF92ZXJzaW9uX251bWJlcigpIHsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgICAgICBsZXQgYnl0ZXMgPSAmZmxhZ19pbmZvX2xpc3QuaW50b19ieXRlcygpOworICAgICAgICBsZXQgbXV0IGhlYWQgPSAwOworICAgICAgICBsZXQgdmVyc2lvbl9mcm9tX2ZpbGUgPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpLnVud3JhcCgpOworICAgICAgICBhc3NlcnRfZXEhKHZlcnNpb25fZnJvbV9maWxlLCBERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgfQorCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gZmlsZSB0eXBlIGNoZWNrCisgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfZmlsZV90eXBlX2NoZWNrKCkgewotICAgICAgICBsZXQgbXV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKTsKKyAgICAgICAgbGV0IG11dCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgZmxhZ19pbmZvX2xpc3QuaGVhZGVyLmZpbGVfdHlwZSA9IDEyM3U4OwogICAgICAgICBsZXQgZXJyb3IgPSBGbGFnSW5mb0xpc3Q6OmZyb21fYnl0ZXMoJmZsYWdfaW5mb19saXN0LmludG9fYnl0ZXMoKSkudW53cmFwX2VycigpOwogICAgICAgICBhc3NlcnRfZXEhKApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ190YWJsZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdGFibGUucnMKaW5kZXggMDU4OGZlNS4uNmZiZWUwMiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ190YWJsZS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX3RhYmxlLnJzCkBAIC0yMjAsMTIgKzIyMCwxNSBAQAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgewogICAgIHVzZSBzdXBlcjo6KjsKLSAgICB1c2UgY3JhdGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdGFibGU7CisgICAgdXNlIGNyYXRlOjp7CisgICAgICAgIHRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUsIERFRkFVTFRfRklMRV9WRVJTSU9OLCBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiwKKyAgICB9OwogCi0gICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoZSB0YWJsZSBzZXJpYWxpemF0aW9uCi0gICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uKCkgewotICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoKTsKKyAgICAvLyBUT0RPOiBiLzM3NjEwODI2OCAtIFVzZSBwYXJhbWV0ZXJpemVkIHRlc3RzLgorICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb25fZGVmYXVsdCgpIHsKKyAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKIAogICAgICAgICBsZXQgaGVhZGVyOiAmRmxhZ1RhYmxlSGVhZGVyID0gJmZsYWdfdGFibGUuaGVhZGVyOwogICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9oZWFkZXIgPSBGbGFnVGFibGVIZWFkZXI6OmZyb21fYnl0ZXMoJmhlYWRlci5pbnRvX2J5dGVzKCkpOwpAQCAtMjQ2LDIwICsyNDksNDIgQEAKICAgICB9CiAKICAgICAjW3Rlc3RdCi0gICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhhdCB2ZXJzaW9uIG51bWJlciBzaG91bGQgYmUgYXQgdGhlIHRvcCBvZiBzZXJpYWxpemVkCi0gICAgLy8gYnl0ZXMKLSAgICBmbiB0ZXN0X3ZlcnNpb25fbnVtYmVyKCkgewotICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoKTsKLSAgICAgICAgbGV0IGJ5dGVzID0gJmZsYWdfdGFibGUuaW50b19ieXRlcygpOwotICAgICAgICBsZXQgbXV0IGhlYWQgPSAwOwotICAgICAgICBsZXQgdmVyc2lvbiA9IHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCkudW53cmFwKCk7Ci0gICAgICAgIGFzc2VydF9lcSEodmVyc2lvbiwgMSk7CisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX21heCgpIHsKKyAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OKTsKKworICAgICAgICBsZXQgaGVhZGVyOiAmRmxhZ1RhYmxlSGVhZGVyID0gJmZsYWdfdGFibGUuaGVhZGVyOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9oZWFkZXIgPSBGbGFnVGFibGVIZWFkZXI6OmZyb21fYnl0ZXMoJmhlYWRlci5pbnRvX2J5dGVzKCkpOworICAgICAgICBhc3NlcnQhKHJlaW50ZXJwcmV0ZWRfaGVhZGVyLmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKGhlYWRlciwgJnJlaW50ZXJwcmV0ZWRfaGVhZGVyLnVud3JhcCgpKTsKKworICAgICAgICBsZXQgbm9kZXM6ICZWZWM8RmxhZ1RhYmxlTm9kZT4gPSAmZmxhZ190YWJsZS5ub2RlczsKKyAgICAgICAgZm9yIG5vZGUgaW4gbm9kZXMuaXRlcigpIHsKKyAgICAgICAgICAgIGxldCByZWludGVycHJldGVkX25vZGUgPSBGbGFnVGFibGVOb2RlOjpmcm9tX2J5dGVzKCZub2RlLmludG9fYnl0ZXMoKSkudW53cmFwKCk7CisgICAgICAgICAgICBhc3NlcnRfZXEhKG5vZGUsICZyZWludGVycHJldGVkX25vZGUpOworICAgICAgICB9CisKKyAgICAgICAgbGV0IGZsYWdfdGFibGVfYnl0ZXMgPSBmbGFnX3RhYmxlLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfdGFibGUgPSBGbGFnVGFibGU6OmZyb21fYnl0ZXMoJmZsYWdfdGFibGVfYnl0ZXMpOworICAgICAgICBhc3NlcnQhKHJlaW50ZXJwcmV0ZWRfdGFibGUuaXNfb2soKSk7CisgICAgICAgIGFzc2VydF9lcSEoJmZsYWdfdGFibGUsICZyZWludGVycHJldGVkX3RhYmxlLnVud3JhcCgpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShmbGFnX3RhYmxlX2J5dGVzLmxlbigpIGFzIHUzMiwgaGVhZGVyLmZpbGVfc2l6ZSk7CiAgICAgfQogCisgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhhdCB2ZXJzaW9uIG51bWJlciBzaG91bGQgYmUgYXQgdGhlIHRvcCBvZiBzZXJpYWxpemVkCisgICAgLy8gYnl0ZXMKICAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF92ZXJzaW9uX251bWJlcigpIHsKKyAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgbGV0IGJ5dGVzID0gJmZsYWdfdGFibGUuaW50b19ieXRlcygpOworICAgICAgICBsZXQgbXV0IGhlYWQgPSAwOworICAgICAgICBsZXQgdmVyc2lvbl9mcm9tX2ZpbGUgPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpLnVud3JhcCgpOworICAgICAgICBhc3NlcnRfZXEhKHZlcnNpb25fZnJvbV9maWxlLCBERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgfQorCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gZmlsZSB0eXBlIGNoZWNrCisgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfZmlsZV90eXBlX2NoZWNrKCkgewotICAgICAgICBsZXQgbXV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCk7CisgICAgICAgIGxldCBtdXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBmbGFnX3RhYmxlLmhlYWRlci5maWxlX3R5cGUgPSAxMjN1ODsKICAgICAgICAgbGV0IGVycm9yID0gRmxhZ1RhYmxlOjpmcm9tX2J5dGVzKCZmbGFnX3RhYmxlLmludG9fYnl0ZXMoKSkudW53cmFwX2VycigpOwogICAgICAgICBhc3NlcnRfZXEhKApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ192YWx1ZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdmFsdWUucnMKaW5kZXggYjY0YzEwZS4uOWExNGJlYyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ192YWx1ZS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX3ZhbHVlLnJzCkBAIC0xMzIsMTIgKzEzMiwzMiBAQAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgewogICAgIHVzZSBzdXBlcjo6KjsKLSAgICB1c2UgY3JhdGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdDsKKyAgICB1c2UgY3JhdGU6OnsKKyAgICAgICAgdGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0LCBERUZBVUxUX0ZJTEVfVkVSU0lPTiwgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04sCisgICAgfTsKIAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgdmFsdWUgbGlzdCBzZXJpYWxpemF0aW9uCi0gICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uKCkgewotICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCk7CisgICAgLy8gVE9ETzogYi8zNzYxMDgyNjggLSBVc2UgcGFyYW1ldGVyaXplZCB0ZXN0cy4KKyAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb25fZGVmYXVsdCgpIHsKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisKKyAgICAgICAgbGV0IGhlYWRlcjogJkZsYWdWYWx1ZUhlYWRlciA9ICZmbGFnX3ZhbHVlX2xpc3QuaGVhZGVyOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9oZWFkZXIgPSBGbGFnVmFsdWVIZWFkZXI6OmZyb21fYnl0ZXMoJmhlYWRlci5pbnRvX2J5dGVzKCkpOworICAgICAgICBhc3NlcnQhKHJlaW50ZXJwcmV0ZWRfaGVhZGVyLmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKGhlYWRlciwgJnJlaW50ZXJwcmV0ZWRfaGVhZGVyLnVud3JhcCgpKTsKKworICAgICAgICBsZXQgZmxhZ192YWx1ZV9ieXRlcyA9IGZsYWdfdmFsdWVfbGlzdC5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCByZWludGVycHJldGVkX3ZhbHVlX2xpc3QgPSBGbGFnVmFsdWVMaXN0Ojpmcm9tX2J5dGVzKCZmbGFnX3ZhbHVlX2J5dGVzKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX3ZhbHVlX2xpc3QuaXNfb2soKSk7CisgICAgICAgIGFzc2VydF9lcSEoJmZsYWdfdmFsdWVfbGlzdCwgJnJlaW50ZXJwcmV0ZWRfdmFsdWVfbGlzdC51bndyYXAoKSk7CisgICAgICAgIGFzc2VydF9lcSEoZmxhZ192YWx1ZV9ieXRlcy5sZW4oKSBhcyB1MzIsIGhlYWRlci5maWxlX3NpemUpOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgdmFsdWUgbGlzdCBzZXJpYWxpemF0aW9uCisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX21heCgpIHsKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTik7CiAKICAgICAgICAgbGV0IGhlYWRlcjogJkZsYWdWYWx1ZUhlYWRlciA9ICZmbGFnX3ZhbHVlX2xpc3QuaGVhZGVyOwogICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9oZWFkZXIgPSBGbGFnVmFsdWVIZWFkZXI6OmZyb21fYnl0ZXMoJmhlYWRlci5pbnRvX2J5dGVzKCkpOwpAQCAtMTU1LDE3ICsxNzUsMTcgQEAKICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGF0IHZlcnNpb24gbnVtYmVyIHNob3VsZCBiZSBhdCB0aGUgdG9wIG9mIHNlcmlhbGl6ZWQKICAgICAvLyBieXRlcwogICAgIGZuIHRlc3RfdmVyc2lvbl9udW1iZXIoKSB7Ci0gICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKTsKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGxldCBieXRlcyA9ICZmbGFnX3ZhbHVlX2xpc3QuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgbXV0IGhlYWQgPSAwOwotICAgICAgICBsZXQgdmVyc2lvbiA9IHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCkudW53cmFwKCk7Ci0gICAgICAgIGFzc2VydF9lcSEodmVyc2lvbiwgMSk7CisgICAgICAgIGxldCB2ZXJzaW9uX2Zyb21fZmlsZSA9IHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCkudW53cmFwKCk7CisgICAgICAgIGFzc2VydF9lcSEodmVyc2lvbl9mcm9tX2ZpbGUsIERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICB9CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gZmlsZSB0eXBlIGNoZWNrCiAgICAgZm4gdGVzdF9maWxlX3R5cGVfY2hlY2soKSB7Ci0gICAgICAgIGxldCBtdXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCk7CisgICAgICAgIGxldCBtdXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgZmxhZ192YWx1ZV9saXN0LmhlYWRlci5maWxlX3R5cGUgPSAxMjN1ODsKICAgICAgICAgbGV0IGVycm9yID0gRmxhZ1ZhbHVlTGlzdDo6ZnJvbV9ieXRlcygmZmxhZ192YWx1ZV9saXN0LmludG9fYnl0ZXMoKSkudW53cmFwX2VycigpOwogICAgICAgICBhc3NlcnRfZXEhKApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvbGliLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvbGliLnJzCmluZGV4IDVkYzVlZjcuLjFlNWIwMDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2xpYi5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9saWIucnMKQEAgLTU5OSwxMCArNTk5LDE1IEBACiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIGZsYWcgbGlzdCBhcGkKICAgICBmbiB0ZXN0X2xpc3RfZmxhZygpIHsKICAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPQotICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCkuaW50b19ieXRlcygpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGZsYWdfdGFibGUgPSB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoKS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOwotICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0KLSAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCkuaW50b19ieXRlcygpKS51bndyYXAoKTsKKyAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGZsYWdfdGFibGUgPQorICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCkpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKAorICAgICAgICAgICAgJmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpLAorICAgICAgICApCisgICAgICAgIC51bndyYXAoKTsKIAogICAgICAgICBsZXQgcGFja2FnZV90YWJsZV9wYXRoID0gcGFja2FnZV90YWJsZS5wYXRoKCkuZGlzcGxheSgpLnRvX3N0cmluZygpOwogICAgICAgICBsZXQgZmxhZ190YWJsZV9wYXRoID0gZmxhZ190YWJsZS5wYXRoKCkuZGlzcGxheSgpLnRvX3N0cmluZygpOwpAQCAtNjY3LDEyICs2NzIsMTkgQEAKICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgZmxhZyBsaXN0IHdpdGggaW5mbyBhcGkKICAgICBmbiB0ZXN0X2xpc3RfZmxhZ193aXRoX2luZm8oKSB7CiAgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0KLSAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpLmludG9fYnl0ZXMoKSkudW53cmFwKCk7Ci0gICAgICAgIGxldCBmbGFnX3RhYmxlID0gd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCkuaW50b19ieXRlcygpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9Ci0gICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpLmludG9fYnl0ZXMoKSkudW53cmFwKCk7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9Ci0gICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCkuaW50b19ieXRlcygpKS51bndyYXAoKTsKKyAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGZsYWdfdGFibGUgPQorICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCkpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKAorICAgICAgICAgICAgJmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpLAorICAgICAgICApCisgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKAorICAgICAgICAgICAgJmNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCksCisgICAgICAgICkKKyAgICAgICAgLnVud3JhcCgpOwogCiAgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlX3BhdGggPSBwYWNrYWdlX3RhYmxlLnBhdGgoKS5kaXNwbGF5KCkudG9fc3RyaW5nKCk7CiAgICAgICAgIGxldCBmbGFnX3RhYmxlX3BhdGggPSBmbGFnX3RhYmxlLnBhdGgoKS5kaXNwbGF5KCkudG9fc3RyaW5nKCk7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9wYWNrYWdlX3RhYmxlLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvcGFja2FnZV90YWJsZS5ycwppbmRleCBhZjM5ZmJjLi4yMTM1N2M3IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9wYWNrYWdlX3RhYmxlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL3BhY2thZ2VfdGFibGUucnMKQEAgLTEwMCw2ICsxMDAsNyBAQAogcHViIHN0cnVjdCBQYWNrYWdlVGFibGVOb2RlIHsKICAgICBwdWIgcGFja2FnZV9uYW1lOiBTdHJpbmcsCiAgICAgcHViIHBhY2thZ2VfaWQ6IHUzMiwKKyAgICBwdWIgZmluZ2VycHJpbnQ6IHU2NCwKICAgICAvLyBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGJvb2xlYW4gZmxhZyBpbiB0aGlzIGFjb25maWcgcGFja2FnZSBhbW9uZyBhbGwgYm9vbGVhbgogICAgIC8vIGZsYWdzIGluIHRoaXMgY29udGFpbmVyLgogICAgIHB1YiBib29sZWFuX3N0YXJ0X2luZGV4OiB1MzIsCkBAIC0xMTEsOCArMTEyLDEyIEBACiAgICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IGZtdDo6Rm9ybWF0dGVyKSAtPiBmbXQ6OlJlc3VsdCB7CiAgICAgICAgIHdyaXRlbG4hKAogICAgICAgICAgICAgZiwKLSAgICAgICAgICAgICJQYWNrYWdlOiB7fSwgSWQ6IHt9LCBCb29sZWFuIGZsYWcgc3RhcnQgaW5kZXg6IHt9LCBOZXh0OiB7Oj99IiwKLSAgICAgICAgICAgIHNlbGYucGFja2FnZV9uYW1lLCBzZWxmLnBhY2thZ2VfaWQsIHNlbGYuYm9vbGVhbl9zdGFydF9pbmRleCwgc2VsZi5uZXh0X29mZnNldAorICAgICAgICAgICAgIlBhY2thZ2U6IHt9LCBJZDoge30sIEZpbmdlcnByaW50OiB7fSwgQm9vbGVhbiBmbGFnIHN0YXJ0IGluZGV4OiB7fSwgTmV4dDogezo/fSIsCisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfbmFtZSwKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9pZCwKKyAgICAgICAgICAgIHNlbGYuZmluZ2VycHJpbnQsCisgICAgICAgICAgICBzZWxmLmJvb2xlYW5fc3RhcnRfaW5kZXgsCisgICAgICAgICAgICBzZWxmLm5leHRfb2Zmc2V0CiAgICAgICAgICk/OwogICAgICAgICBPaygoKSkKICAgICB9CkBAIC0xNDYsOSArMTUxLDcgQEAKICAgICAgICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKCYobmFtZV9ieXRlcy5sZW4oKSBhcyB1MzIpLnRvX2xlX2J5dGVzKCkpOwogICAgICAgICByZXN1bHQuZXh0ZW5kX2Zyb21fc2xpY2UobmFtZV9ieXRlcyk7CiAgICAgICAgIHJlc3VsdC5leHRlbmRfZnJvbV9zbGljZSgmc2VsZi5wYWNrYWdlX2lkLnRvX2xlX2J5dGVzKCkpOwotICAgICAgICAvLyBWMiBzdG9yYWdlIGZpbGVzIGhhdmUgYSBmaW5nZXJwcmludC4gQ3VycmVudCBzdHJ1Y3QgKHYxKSBkb2VzIG5vdCwgc28KLSAgICAgICAgLy8gd2Ugd3JpdGUgMC4KLSAgICAgICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKCYwdTY0LnRvX2xlX2J5dGVzKCkpOworICAgICAgICByZXN1bHQuZXh0ZW5kX2Zyb21fc2xpY2UoJnNlbGYuZmluZ2VycHJpbnQudG9fbGVfYnl0ZXMoKSk7CiAgICAgICAgIHJlc3VsdC5leHRlbmRfZnJvbV9zbGljZSgmc2VsZi5ib29sZWFuX3N0YXJ0X2luZGV4LnRvX2xlX2J5dGVzKCkpOwogICAgICAgICByZXN1bHQuZXh0ZW5kX2Zyb21fc2xpY2UoJnNlbGYubmV4dF9vZmZzZXQudW53cmFwX29yKDApLnRvX2xlX2J5dGVzKCkpOwogICAgICAgICByZXN1bHQKQEAgLTE3MiwxMyArMTc1LDE1IEBACiAgICAgICAgIGxldCBtdXQgaGVhZCA9IDA7CiAgICAgICAgIGxldCBwYWNrYWdlX25hbWUgPSByZWFkX3N0cl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPzsKICAgICAgICAgbGV0IHBhY2thZ2VfaWQgPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPzsKKyAgICAgICAgLy8gdjEgZG9lcyBub3QgaGF2ZSBmaW5nZXJwcmludCwgc28ganVzdCBzZXQgdG8gMC4KKyAgICAgICAgbGV0IGZpbmdlcnByaW50OiB1NjQgPSAwOwogICAgICAgICBsZXQgYm9vbGVhbl9zdGFydF9pbmRleCA9IHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/OwogICAgICAgICBsZXQgbmV4dF9vZmZzZXQgPSBtYXRjaCByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPyB7CiAgICAgICAgICAgICAwID0+IE5vbmUsCiAgICAgICAgICAgICB2YWwgPT4gU29tZSh2YWwpLAogICAgICAgICB9OwogCi0gICAgICAgIGxldCBub2RlID0gU2VsZiB7IHBhY2thZ2VfbmFtZSwgcGFja2FnZV9pZCwgYm9vbGVhbl9zdGFydF9pbmRleCwgbmV4dF9vZmZzZXQgfTsKKyAgICAgICAgbGV0IG5vZGUgPSBTZWxmIHsgcGFja2FnZV9uYW1lLCBwYWNrYWdlX2lkLCBmaW5nZXJwcmludCwgYm9vbGVhbl9zdGFydF9pbmRleCwgbmV4dF9vZmZzZXQgfTsKICAgICAgICAgT2sobm9kZSkKICAgICB9CiAKQEAgLTE4NiwxOCArMTkxLDE0IEBACiAgICAgICAgIGxldCBtdXQgaGVhZCA9IDA7CiAgICAgICAgIGxldCBwYWNrYWdlX25hbWUgPSByZWFkX3N0cl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPzsKICAgICAgICAgbGV0IHBhY2thZ2VfaWQgPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPzsKLQotICAgICAgICAvLyBGaW5nZXJwcmludCBpcyB1bnVzZWQgaW4gdGhlIGN1cnJlbnQgc3RydWN0ICh2MSksIGJ1dCB3ZSBuZWVkIHRvIHJlYWQKLSAgICAgICAgLy8gdGhlIGJ5dGVzIGlmIHRoZSBzdG9yYWdlIGZpbGUgdHlwZSBpcyB2MiBvciBlbHNlIHRoZSBzdWJzZXF1ZW50Ci0gICAgICAgIC8vIGZpZWxkcyB3aWxsIGJlIGluYWNjdXJhdGUuCi0gICAgICAgIGxldCBfZmluZ2VycHJpbnQgPSByZWFkX3U2NF9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPzsKKyAgICAgICAgbGV0IGZpbmdlcnByaW50ID0gcmVhZF91NjRfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT87CiAgICAgICAgIGxldCBib29sZWFuX3N0YXJ0X2luZGV4ID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT87CiAgICAgICAgIGxldCBuZXh0X29mZnNldCA9IG1hdGNoIHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/IHsKICAgICAgICAgICAgIDAgPT4gTm9uZSwKICAgICAgICAgICAgIHZhbCA9PiBTb21lKHZhbCksCiAgICAgICAgIH07CiAKLSAgICAgICAgbGV0IG5vZGUgPSBTZWxmIHsgcGFja2FnZV9uYW1lLCBwYWNrYWdlX2lkLCBib29sZWFuX3N0YXJ0X2luZGV4LCBuZXh0X29mZnNldCB9OworICAgICAgICBsZXQgbm9kZSA9IFNlbGYgeyBwYWNrYWdlX25hbWUsIHBhY2thZ2VfaWQsIGZpbmdlcnByaW50LCBib29sZWFuX3N0YXJ0X2luZGV4LCBuZXh0X29mZnNldCB9OwogICAgICAgICBPayhub2RlKQogICAgIH0KIApAQCAtMjgxLDEzICsyODIsMzcgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGNyYXRlOjpyZWFkX3UzMl9mcm9tX3N0YXJ0X29mX2J5dGVzOwotICAgIHVzZSBjcmF0ZTo6e3Rlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUsIERFRkFVTFRfRklMRV9WRVJTSU9OfTsKKyAgICB1c2UgY3JhdGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGU7CisgICAgdXNlIGNyYXRlOjp7cmVhZF91MzJfZnJvbV9zdGFydF9vZl9ieXRlcywgREVGQVVMVF9GSUxFX1ZFUlNJT04sIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OfTsKIAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgdGFibGUgc2VyaWFsaXphdGlvbgotICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbigpIHsKLSAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCk7CisgICAgLy8gVE9ETzogYi8zNzYxMDgyNjggLSBVc2UgcGFyYW1ldGVyaXplZCB0ZXN0cy4KKyAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb25fZGVmYXVsdCgpIHsKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgbGV0IGhlYWRlcjogJlBhY2thZ2VUYWJsZUhlYWRlciA9ICZwYWNrYWdlX3RhYmxlLmhlYWRlcjsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gUGFja2FnZVRhYmxlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX2hlYWRlci5pc19vaygpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShoZWFkZXIsICZyZWludGVycHJldGVkX2hlYWRlci51bndyYXAoKSk7CisKKyAgICAgICAgbGV0IG5vZGVzOiAmVmVjPFBhY2thZ2VUYWJsZU5vZGU+ID0gJnBhY2thZ2VfdGFibGUubm9kZXM7CisgICAgICAgIGZvciBub2RlIGluIG5vZGVzLml0ZXIoKSB7CisgICAgICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9ub2RlID0KKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGVOb2RlOjpmcm9tX2J5dGVzKCZub2RlLmludG9fYnl0ZXMoaGVhZGVyLnZlcnNpb24pLCBoZWFkZXIudmVyc2lvbikKKyAgICAgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLCAmcmVpbnRlcnByZXRlZF9ub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlX2J5dGVzID0gcGFja2FnZV90YWJsZS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCByZWludGVycHJldGVkX3RhYmxlID0gUGFja2FnZVRhYmxlOjpmcm9tX2J5dGVzKCZwYWNrYWdlX3RhYmxlX2J5dGVzKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX3RhYmxlLmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKCZwYWNrYWdlX3RhYmxlLCAmcmVpbnRlcnByZXRlZF90YWJsZS51bndyYXAoKSk7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV90YWJsZV9ieXRlcy5sZW4oKSBhcyB1MzIsIGhlYWRlci5maWxlX3NpemUpOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb25fbWF4KCkgeworICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBsZXQgaGVhZGVyOiAmUGFja2FnZVRhYmxlSGVhZGVyID0gJnBhY2thZ2VfdGFibGUuaGVhZGVyOwogICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9oZWFkZXIgPSBQYWNrYWdlVGFibGVIZWFkZXI6OmZyb21fYnl0ZXMoJmhlYWRlci5pbnRvX2J5dGVzKCkpOwogICAgICAgICBhc3NlcnQhKHJlaW50ZXJwcmV0ZWRfaGVhZGVyLmlzX29rKCkpOwpAQCAtMzEyLDQ0ICszMzcsMzYgQEAKICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGF0IHZlcnNpb24gbnVtYmVyIHNob3VsZCBiZSBhdCB0aGUgdG9wIG9mIHNlcmlhbGl6ZWQKICAgICAvLyBieXRlcwogICAgIGZuIHRlc3RfdmVyc2lvbl9udW1iZXIoKSB7Ci0gICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpOworICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBsZXQgYnl0ZXMgPSAmcGFja2FnZV90YWJsZS5pbnRvX2J5dGVzKCk7Ci0gICAgICAgIGxldCB2ZXJzaW9uID0gcmVhZF91MzJfZnJvbV9zdGFydF9vZl9ieXRlcyhieXRlcykudW53cmFwKCk7Ci0gICAgICAgIGFzc2VydF9lcSEodmVyc2lvbiwgREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgICAgICBsZXQgdW5wYWNrZWRfdmVyc2lvbiA9IHJlYWRfdTMyX2Zyb21fc3RhcnRfb2ZfYnl0ZXMoYnl0ZXMpLnVud3JhcCgpOworICAgICAgICBhc3NlcnRfZXEhKHVucGFja2VkX3ZlcnNpb24sIERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICB9CiAKICAgICAjW3Rlc3RdCi0gICAgZm4gdGVzdF9yb3VuZF90cmlwX3YxKCkgewotICAgICAgICBsZXQgdGFibGVfdjE6IFBhY2thZ2VUYWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKTsKLSAgICAgICAgbGV0IHRhYmxlX2J5dGVzX3YxID0gdGFibGVfdjEuaW50b19ieXRlcygpOworICAgIGZuIHRlc3Rfcm91bmRfdHJpcF9kZWZhdWx0KCkgeworICAgICAgICBsZXQgdGFibGU6IFBhY2thZ2VUYWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgICAgICBsZXQgdGFibGVfYnl0ZXMgPSB0YWJsZS5pbnRvX2J5dGVzKCk7CiAKLSAgICAgICAgLy8gV2lsbCBhdXRvbWF0aWNhbGx5IHJlYWQgZnJvbSB2ZXJzaW9uIDIgYXMgdGhlIHZlcnNpb24gY29kZSBpcyBlbmNvZGVkCi0gICAgICAgIC8vIGludG8gdGhlIGJ5dGVzLgotICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF90YWJsZSA9IFBhY2thZ2VUYWJsZTo6ZnJvbV9ieXRlcygmdGFibGVfYnl0ZXNfdjEpLnVud3JhcCgpOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF90YWJsZSA9IFBhY2thZ2VUYWJsZTo6ZnJvbV9ieXRlcygmdGFibGVfYnl0ZXMpLnVud3JhcCgpOwogCi0gICAgICAgIGFzc2VydF9lcSEodGFibGVfdjEsIHJlaW50ZXJwcmV0ZWRfdGFibGUpOworICAgICAgICBhc3NlcnRfZXEhKHRhYmxlLCByZWludGVycHJldGVkX3RhYmxlKTsKICAgICB9CiAKICAgICAjW3Rlc3RdCi0gICAgZm4gdGVzdF9yb3VuZF90cmlwX3YyKCkgewotICAgICAgICAvLyBIYXZlIHRvIGZha2UgdjIgYmVjYXVzZSB0aG91Z2ggd2Ugd2lsbCBzZXQgdGhlIHZlcnNpb24gdG8gdjIKLSAgICAgICAgLy8gYW5kIHdyaXRlIHRoZSBieXRlcyBhcyB2Miwgd2UgZG9uJ3QgaGF2ZSB0aGUgYWJpbGl0eSB0byBhY3R1YWxseSBzZXQKLSAgICAgICAgLy8gdGhlIGZpbmdlcnByaW50IHlldC4KLSAgICAgICAgbGV0IG11dCBmYWtlX3RhYmxlX3YyID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpOwotICAgICAgICBmYWtlX3RhYmxlX3YyLmhlYWRlci52ZXJzaW9uID0gMjsKLSAgICAgICAgbGV0IHRhYmxlX2J5dGVzX3YyID0gZmFrZV90YWJsZV92Mi5pbnRvX2J5dGVzKCk7CisgICAgZm4gdGVzdF9yb3VuZF90cmlwX21heCgpIHsKKyAgICAgICAgbGV0IHRhYmxlOiBQYWNrYWdlVGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgbGV0IHRhYmxlX2J5dGVzID0gdGFibGUuaW50b19ieXRlcygpOwogCi0gICAgICAgIC8vIFdpbGwgYXV0b21hdGljYWxseSByZWFkIGZyb20gdmVyc2lvbiAyIGFzIHRoZSB2ZXJzaW9uIGNvZGUgaXMgZW5jb2RlZAotICAgICAgICAvLyBpbnRvIHRoZSBieXRlcy4KLSAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfdGFibGUgPSBQYWNrYWdlVGFibGU6OmZyb21fYnl0ZXMoJnRhYmxlX2J5dGVzX3YyKS51bndyYXAoKTsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfdGFibGUgPSBQYWNrYWdlVGFibGU6OmZyb21fYnl0ZXMoJnRhYmxlX2J5dGVzKS51bndyYXAoKTsKIAotICAgICAgICBhc3NlcnRfZXEhKGZha2VfdGFibGVfdjIsIHJlaW50ZXJwcmV0ZWRfdGFibGUpOworICAgICAgICBhc3NlcnRfZXEhKHRhYmxlLCByZWludGVycHJldGVkX3RhYmxlKTsKICAgICB9CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gZmlsZSB0eXBlIGNoZWNrCiAgICAgZm4gdGVzdF9maWxlX3R5cGVfY2hlY2soKSB7Ci0gICAgICAgIGxldCBtdXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKTsKKyAgICAgICAgbGV0IG11dCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIHBhY2thZ2VfdGFibGUuaGVhZGVyLmZpbGVfdHlwZSA9IDEyM3U4OwogICAgICAgICBsZXQgZXJyb3IgPSBQYWNrYWdlVGFibGU6OmZyb21fYnl0ZXMoJnBhY2thZ2VfdGFibGUuaW50b19ieXRlcygpKS51bndyYXBfZXJyKCk7CiAgICAgICAgIGFzc2VydF9lcSEoCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy90ZXN0X3V0aWxzLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvdGVzdF91dGlscy5ycwppbmRleCA1YzM2NGY2Li41NTc4MGVkIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy90ZXN0X3V0aWxzLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL3Rlc3RfdXRpbHMucnMKQEAgLTE4LDM4ICsxOCw1MyBAQAogdXNlIGNyYXRlOjpmbGFnX3RhYmxlOjp7RmxhZ1RhYmxlLCBGbGFnVGFibGVIZWFkZXIsIEZsYWdUYWJsZU5vZGV9OwogdXNlIGNyYXRlOjpmbGFnX3ZhbHVlOjp7RmxhZ1ZhbHVlSGVhZGVyLCBGbGFnVmFsdWVMaXN0fTsKIHVzZSBjcmF0ZTo6cGFja2FnZV90YWJsZTo6e1BhY2thZ2VUYWJsZSwgUGFja2FnZVRhYmxlSGVhZGVyLCBQYWNrYWdlVGFibGVOb2RlfTsKLXVzZSBjcmF0ZTo6e0Fjb25maWdTdG9yYWdlRXJyb3IsIFN0b3JhZ2VGaWxlVHlwZSwgU3RvcmVkRmxhZ1R5cGUsIERFRkFVTFRfRklMRV9WRVJTSU9OfTsKK3VzZSBjcmF0ZTo6e0Fjb25maWdTdG9yYWdlRXJyb3IsIFN0b3JhZ2VGaWxlVHlwZSwgU3RvcmVkRmxhZ1R5cGV9OwogCiB1c2UgYW55aG93Ojphbnlob3c7CiB1c2Ugc3RkOjppbzo6V3JpdGU7CiB1c2UgdGVtcGZpbGU6Ok5hbWVkVGVtcEZpbGU7CiAKLXB1YiBmbiBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCkgLT4gUGFja2FnZVRhYmxlIHsKK3B1YiBmbiBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKHZlcnNpb246IHUzMikgLT4gUGFja2FnZVRhYmxlIHsKICAgICBsZXQgaGVhZGVyID0gUGFja2FnZVRhYmxlSGVhZGVyIHsKLSAgICAgICAgdmVyc2lvbjogREVGQVVMVF9GSUxFX1ZFUlNJT04sCisgICAgICAgIHZlcnNpb246IHZlcnNpb24sCiAgICAgICAgIGNvbnRhaW5lcjogU3RyaW5nOjpmcm9tKCJtb2NrdXAiKSwKICAgICAgICAgZmlsZV90eXBlOiBTdG9yYWdlRmlsZVR5cGU6OlBhY2thZ2VNYXAgYXMgdTgsCi0gICAgICAgIGZpbGVfc2l6ZTogMjA5LAorICAgICAgICBmaWxlX3NpemU6IG1hdGNoIHZlcnNpb24geworICAgICAgICAgICAgMSA9PiAyMDksCisgICAgICAgICAgICAyID0+IDIzMywKKyAgICAgICAgICAgIF8gPT4gcGFuaWMhKCJVbnN1cHBvcnRlZCB2ZXJzaW9uLiIpLAorICAgICAgICB9LAogICAgICAgICBudW1fcGFja2FnZXM6IDMsCiAgICAgICAgIGJ1Y2tldF9vZmZzZXQ6IDMxLAogICAgICAgICBub2RlX29mZnNldDogNTksCiAgICAgfTsKLSAgICBsZXQgYnVja2V0czogVmVjPE9wdGlvbjx1MzI+PiA9IHZlYyFbU29tZSg1OSksIE5vbmUsIE5vbmUsIFNvbWUoMTA5KSwgTm9uZSwgTm9uZSwgTm9uZV07CisgICAgbGV0IGJ1Y2tldHM6IFZlYzxPcHRpb248dTMyPj4gPSBtYXRjaCB2ZXJzaW9uIHsKKyAgICAgICAgMSA9PiB2ZWMhW1NvbWUoNTkpLCBOb25lLCBOb25lLCBTb21lKDEwOSksIE5vbmUsIE5vbmUsIE5vbmVdLAorICAgICAgICAyID0+IHZlYyFbU29tZSg1OSksIE5vbmUsIE5vbmUsIFNvbWUoMTE3KSwgTm9uZSwgTm9uZSwgTm9uZV0sCisgICAgICAgIF8gPT4gcGFuaWMhKCJVbnN1cHBvcnRlZCB2ZXJzaW9uLiIpLAorICAgIH07CiAgICAgbGV0IGZpcnN0X25vZGUgPSBQYWNrYWdlVGFibGVOb2RlIHsKICAgICAgICAgcGFja2FnZV9uYW1lOiBTdHJpbmc6OmZyb20oImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKSwKICAgICAgICAgcGFja2FnZV9pZDogMSwKKyAgICAgICAgZmluZ2VycHJpbnQ6IDAsCiAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDMsCiAgICAgICAgIG5leHRfb2Zmc2V0OiBOb25lLAogICAgIH07CiAgICAgbGV0IHNlY29uZF9ub2RlID0gUGFja2FnZVRhYmxlTm9kZSB7CiAgICAgICAgIHBhY2thZ2VfbmFtZTogU3RyaW5nOjpmcm9tKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiksCiAgICAgICAgIHBhY2thZ2VfaWQ6IDAsCisgICAgICAgIGZpbmdlcnByaW50OiAwLAogICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiAwLAotICAgICAgICBuZXh0X29mZnNldDogU29tZSgxNTkpLAorICAgICAgICBuZXh0X29mZnNldDogbWF0Y2ggdmVyc2lvbiB7CisgICAgICAgICAgICAxID0+IFNvbWUoMTU5KSwKKyAgICAgICAgICAgIDIgPT4gU29tZSgxNzUpLAorICAgICAgICAgICAgXyA9PiBwYW5pYyEoIlVuc3VwcG9ydGVkIHZlcnNpb24uIiksCisgICAgICAgIH0sCiAgICAgfTsKICAgICBsZXQgdGhpcmRfbm9kZSA9IFBhY2thZ2VUYWJsZU5vZGUgewogICAgICAgICBwYWNrYWdlX25hbWU6IFN0cmluZzo6ZnJvbSgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIpLAogICAgICAgICBwYWNrYWdlX2lkOiAyLAorICAgICAgICBmaW5nZXJwcmludDogMCwKICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogNiwKICAgICAgICAgbmV4dF9vZmZzZXQ6IE5vbmUsCiAgICAgfTsKQEAgLTc2LDkgKzkxLDkgQEAKICAgICB9CiB9CiAKLXB1YiBmbiBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCkgLT4gRmxhZ1RhYmxlIHsKK3B1YiBmbiBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKHZlcnNpb246IHUzMikgLT4gRmxhZ1RhYmxlIHsKICAgICBsZXQgaGVhZGVyID0gRmxhZ1RhYmxlSGVhZGVyIHsKLSAgICAgICAgdmVyc2lvbjogREVGQVVMVF9GSUxFX1ZFUlNJT04sCisgICAgICAgIHZlcnNpb246IHZlcnNpb24sCiAgICAgICAgIGNvbnRhaW5lcjogU3RyaW5nOjpmcm9tKCJtb2NrdXAiKSwKICAgICAgICAgZmlsZV90eXBlOiBTdG9yYWdlRmlsZVR5cGU6OkZsYWdNYXAgYXMgdTgsCiAgICAgICAgIGZpbGVfc2l6ZTogMzIxLApAQCAtMTE4LDkgKzEzMyw5IEBACiAgICAgRmxhZ1RhYmxlIHsgaGVhZGVyLCBidWNrZXRzLCBub2RlcyB9CiB9CiAKLXB1YiBmbiBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKSAtPiBGbGFnVmFsdWVMaXN0IHsKK3B1YiBmbiBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QodmVyc2lvbjogdTMyKSAtPiBGbGFnVmFsdWVMaXN0IHsKICAgICBsZXQgaGVhZGVyID0gRmxhZ1ZhbHVlSGVhZGVyIHsKLSAgICAgICAgdmVyc2lvbjogREVGQVVMVF9GSUxFX1ZFUlNJT04sCisgICAgICAgIHZlcnNpb246IHZlcnNpb24sCiAgICAgICAgIGNvbnRhaW5lcjogU3RyaW5nOjpmcm9tKCJtb2NrdXAiKSwKICAgICAgICAgZmlsZV90eXBlOiBTdG9yYWdlRmlsZVR5cGU6OkZsYWdWYWwgYXMgdTgsCiAgICAgICAgIGZpbGVfc2l6ZTogMzUsCkBAIC0xMzEsOSArMTQ2LDkgQEAKICAgICBGbGFnVmFsdWVMaXN0IHsgaGVhZGVyLCBib29sZWFucyB9CiB9CiAKLXB1YiBmbiBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpIC0+IEZsYWdJbmZvTGlzdCB7CitwdWIgZm4gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QodmVyc2lvbjogdTMyKSAtPiBGbGFnSW5mb0xpc3QgewogICAgIGxldCBoZWFkZXIgPSBGbGFnSW5mb0hlYWRlciB7Ci0gICAgICAgIHZlcnNpb246IERFRkFVTFRfRklMRV9WRVJTSU9OLAorICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLAogICAgICAgICBjb250YWluZXI6IFN0cmluZzo6ZnJvbSgibW9ja3VwIiksCiAgICAgICAgIGZpbGVfdHlwZTogU3RvcmFnZUZpbGVUeXBlOjpGbGFnSW5mbyBhcyB1OCwKICAgICAgICAgZmlsZV9zaXplOiAzNSwKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvU3RvcmFnZUZpbGVQcm92aWRlci5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VGaWxlUHJvdmlkZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VGaWxlUHJvdmlkZXIuamF2YQpyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VGaWxlUHJvdmlkZXIuamF2YQppbmRleCBiMjgzNDFlLi44MzA2Y2M2IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VGaWxlUHJvdmlkZXIuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvU3RvcmFnZUZpbGVQcm92aWRlci5qYXZhCkBAIC0yMSw2ICsyMSw3IEBACiBpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuRmlsZUNoYW5uZWw7CiBpbXBvcnQgamF2YS5uaW8uZmlsZS5EaXJlY3RvcnlTdHJlYW07CiBpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLk5vU3VjaEZpbGVFeGNlcHRpb247CiBpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoOwogaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7CiBpbXBvcnQgamF2YS5uaW8uZmlsZS5TdGFuZGFyZE9wZW5PcHRpb247CkBAIC01MSwxNCArNTIsNiBAQAogICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLwotICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5lckZpbGVFeGlzdHMoU3RyaW5nIGNvbnRhaW5lcikgewotICAgICAgICBpZiAoY29udGFpbmVyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBGaWxlcy5leGlzdHMoUGF0aHMuZ2V0KG1NYXBQYXRoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEZpbGVzLmV4aXN0cyhQYXRocy5nZXQobU1hcFBhdGgsIGNvbnRhaW5lciArIFBNQVBfRklMRV9FWFQpKTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUgKi8KICAgICBwdWJsaWMgTGlzdDxQYXRoPiBsaXN0UGFja2FnZU1hcEZpbGVzKCkgewogICAgICAgICBMaXN0PFBhdGg+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICB0cnkgewpAQCAtNjYsOCArNTksOSBAQAogICAgICAgICAgICAgICAgICAgICBGaWxlcy5uZXdEaXJlY3RvcnlTdHJlYW0oUGF0aHMuZ2V0KG1NYXBQYXRoKSwgIioiICsgUE1BUF9GSUxFX0VYVCk7CiAgICAgICAgICAgICBmb3IgKFBhdGggZW50cnkgOiBzdHJlYW0pIHsKICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGVudHJ5KTsKLSAgICAgICAgICAgICAgICAvLyBzYi5hcHBlbmQoZW50cnkuIHRvU3RyaW5nKCkpOwogICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChOb1N1Y2hGaWxlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIkZhaWwgdG8gbGlzdCBtYXAgZmlsZXMgaW4gcGF0aCAlcyIsIG1NYXBQYXRoKSwgZSk7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWQuYnAKaW5kZXggMTNkMzIxNC4uYmQ0NmQ1ZiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvQW5kcm9pZC5icApAQCAtMTAsMTAgKzEwLDE0IEBACiAgICAgICAgICJsaWJiYXNlIiwKICAgICBdLAogICAgIGRhdGE6IFsKLSAgICAgICAgImRhdGEvdjEvcGFja2FnZS5tYXAiLAotICAgICAgICAiZGF0YS92MS9mbGFnLm1hcCIsCi0gICAgICAgICJkYXRhL3YxL2ZsYWcudmFsIiwKLSAgICAgICAgImRhdGEvdjEvZmxhZy5pbmZvIiwKKyAgICAgICAgImRhdGEvdjEvcGFja2FnZV92MS5tYXAiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLm1hcCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEudmFsIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS5pbmZvIiwKKyAgICAgICAgImRhdGEvdjIvcGFja2FnZV92Mi5tYXAiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLm1hcCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIudmFsIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi5pbmZvIiwKICAgICBdLAogICAgIHRlc3Rfc3VpdGVzOiBbCiAgICAgICAgICJkZXZpY2UtdGVzdHMiLApAQCAtMzUsMTAgKzM5LDE0IEBACiAgICAgdGVzdF9jb25maWc6ICJBbmRyb2lkU3RvcmFnZUphdmVUZXN0LnhtbCIsCiAgICAgc2RrX3ZlcnNpb246ICJ0ZXN0X2N1cnJlbnQiLAogICAgIGRhdGE6IFsKLSAgICAgICAgImRhdGEvdjEvcGFja2FnZS5tYXAiLAotICAgICAgICAiZGF0YS92MS9mbGFnLm1hcCIsCi0gICAgICAgICJkYXRhL3YxL2ZsYWcudmFsIiwKLSAgICAgICAgImRhdGEvdjEvZmxhZy5pbmZvIiwKKyAgICAgICAgImRhdGEvdjEvcGFja2FnZV92MS5tYXAiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLm1hcCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEudmFsIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS5pbmZvIiwKKyAgICAgICAgImRhdGEvdjIvcGFja2FnZV92Mi5tYXAiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLm1hcCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIudmFsIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi5pbmZvIiwKICAgICBdLAogICAgIHRlc3Rfc3VpdGVzOiBbCiAgICAgICAgICJnZW5lcmFsLXRlc3RzIiwKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvQW5kcm9pZFN0b3JhZ2VKYXZlVGVzdC54bWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWRTdG9yYWdlSmF2ZVRlc3QueG1sCmluZGV4IDJkNTJkNDQuLmJmYzIzOGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvQW5kcm9pZFN0b3JhZ2VKYXZlVGVzdC54bWwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9BbmRyb2lkU3RvcmFnZUphdmVUZXN0LnhtbApAQCAtMjEsMTMgKzIxLDE4IEBACiAgICAgPC90YXJnZXRfcHJlcGFyZXI+CiAgICAgPHRhcmdldF9wcmVwYXJlciBjbGFzcz0iY29tLmFuZHJvaWQuY29tcGF0aWJpbGl0eS5jb21tb24udHJhZGVmZWQudGFyZ2V0cHJlcC5GaWxlUHVzaGVyIj4KICAgICAgICAgPG9wdGlvbiBuYW1lPSJjbGVhbnVwIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0icGFja2FnZS5tYXAtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvcGFja2FnZS5tYXAiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWcubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL2ZsYWcubWFwIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnLnZhbC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9mbGFnLnZhbCIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZy5pbmZvLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL2ZsYWcuaW5mbyIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0icGFja2FnZV92MS5tYXAtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvbW9jay52MS5wYWNrYWdlLm1hcCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192MS5tYXAtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvbW9jay52MS5mbGFnLm1hcCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192MS52YWwtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvbW9jay52MS52YWwiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjEuaW5mby0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9tb2NrLnYxLmluZm8iIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9InBhY2thZ2VfdjIubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL21vY2sudjIucGFja2FnZS5tYXAiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjIubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL21vY2sudjIuZmxhZy5tYXAiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjIudmFsLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL21vY2sudjIudmFsIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YyLmluZm8tPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvbW9jay52Mi5pbmZvIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InBvc3QtcHVzaCIgdmFsdWU9ImNobW9kICtyIC9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvIiAvPgogICAgIDwvdGFyZ2V0X3ByZXBhcmVyPgogICAgIDx0ZXN0IGNsYXNzPSJjb20uYW5kcm9pZC50cmFkZWZlZC50ZXN0dHlwZS5BbmRyb2lkSlVuaXRUZXN0IiA+CiAgICAgICAgIDxvcHRpb24gbmFtZT0icGFja2FnZSIgdmFsdWU9ImFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QiIC8+CiAgICAgICAgIDxvcHRpb24gbmFtZT0icnVudGltZS1oaW50IiB2YWx1ZT0iMW0iIC8+CiAgICAgPC90ZXN0PgotPC9jb25maWd1cmF0aW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnLmluZm8gYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZy5pbmZvCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL2ZsYWcubWFwCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5tYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL2ZsYWcudmFsIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZy52YWwKcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnX3YxLnZhbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvcGFja2FnZS5tYXAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9wYWNrYWdlLm1hcApyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL3BhY2thZ2VfdjEubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLmluZm8gYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYjdmZGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLm1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQ2ODVjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLnZhbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLnZhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Q0NzUwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIudmFsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9wYWNrYWdlX3YyLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9wYWNrYWdlX3YyLm1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmY0MDU0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL3BhY2thZ2VfdjIubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvamFyamFyLnR4dCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvamFyamFyLnR4dAppbmRleCBhNmMxN2ZhLi4yNDk1MmVjIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2phcmphci50eHQKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9qYXJqYXIudHh0CkBAIC03LDYgKzcsOCBAQAogcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GaWxlVHlwZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkZpbGVUeXBlCiBydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdWYWx1ZUxpc3QgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVmFsdWVMaXN0CiBydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlRhYmxlVXRpbHMgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5UYWJsZVV0aWxzCitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkFjb25maWdQYWNrYWdlSW1wbCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkFjb25maWdQYWNrYWdlSW1wbAorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TdG9yYWdlRmlsZVByb3ZpZGVyIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuU3RvcmFnZUZpbGVQcm92aWRlcgogCiAKIHJ1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1RhYmxlJCogYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVGFibGUkQDEKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVGFibGVUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvRmxhZ1RhYmxlVGVzdC5qYXZhCmluZGV4IGZkNDBkNGMuLmRjNDY1YjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVGFibGVUZXN0LmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL0ZsYWdUYWJsZVRlc3QuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmxhZ1RhYmxlX3JpZ2h0SGVhZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIEZsYWdUYWJsZSBmbGFnVGFibGUgPSBGbGFnVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdNYXBCeXRlQnVmZmVyKCkpOworICAgICAgICBGbGFnVGFibGUgZmxhZ1RhYmxlID0gRmxhZ1RhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcigxKSk7CiAgICAgICAgIEZsYWdUYWJsZS5IZWFkZXIgaGVhZGVyID0gZmxhZ1RhYmxlLmdldEhlYWRlcigpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgaGVhZGVyLmdldFZlcnNpb24oKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygibW9ja3VwIiwgaGVhZGVyLmdldENvbnRhaW5lcigpKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEZsYWdUYWJsZV9yaWdodE5vZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgRmxhZ1RhYmxlIGZsYWdUYWJsZSA9IEZsYWdUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ01hcEJ5dGVCdWZmZXIoKSk7CisgICAgICAgIEZsYWdUYWJsZSBmbGFnVGFibGUgPSBGbGFnVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdNYXBCeXRlQnVmZmVyKDEpKTsKIAogICAgICAgICBGbGFnVGFibGUuTm9kZSBub2RlMSA9IGZsYWdUYWJsZS5nZXQoMCwgImVuYWJsZWRfcm8iKTsKICAgICAgICAgRmxhZ1RhYmxlLk5vZGUgbm9kZTIgPSBmbGFnVGFibGUuZ2V0KDAsICJlbmFibGVkX3J3Iik7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvRmxhZ1ZhbHVlTGlzdFRlc3QuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVmFsdWVMaXN0VGVzdC5qYXZhCmluZGV4IDFiMGRlNjMuLjMwNmRmN2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVmFsdWVMaXN0VGVzdC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVmFsdWVMaXN0VGVzdC5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmxhZ1ZhbHVlTGlzdF9yaWdodEhlYWRlcigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBGbGFnVmFsdWVMaXN0IGZsYWdWYWx1ZUxpc3QgPQotICAgICAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKCkpOworICAgICAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKDEpKTsKICAgICAgICAgRmxhZ1ZhbHVlTGlzdC5IZWFkZXIgaGVhZGVyID0gZmxhZ1ZhbHVlTGlzdC5nZXRIZWFkZXIoKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGhlYWRlci5nZXRWZXJzaW9uKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIm1vY2t1cCIsIGhlYWRlci5nZXRDb250YWluZXIoKSk7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmxhZ1ZhbHVlTGlzdF9yaWdodE5vZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgRmxhZ1ZhbHVlTGlzdCBmbGFnVmFsdWVMaXN0ID0KLSAgICAgICAgICAgICAgICBGbGFnVmFsdWVMaXN0LmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnVmFsQnl0ZUJ1ZmZlcigpKTsKKyAgICAgICAgICAgICAgICBGbGFnVmFsdWVMaXN0LmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnVmFsQnl0ZUJ1ZmZlcigxKSk7CiAKICAgICAgICAgYm9vbGVhbltdIGV4cGVjdGVkID0gbmV3IGJvb2xlYW5bXSB7ZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmxlbmd0aCwgZmxhZ1ZhbHVlTGlzdC5zaXplKCkpOwpAQCAtNjAsMTEgKzYwLDExIEBACiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmxhZ1ZhbHVlTGlzdF9nZXRWYWx1ZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KLSAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKCkpOwotICAgICAgICBGbGFnVGFibGUgZmxhZ1RhYmxlID0gRmxhZ1RhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcigpKTsKKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKDEpKTsKKyAgICAgICAgRmxhZ1RhYmxlIGZsYWdUYWJsZSA9IEZsYWdUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ01hcEJ5dGVCdWZmZXIoMSkpOwogCiAgICAgICAgIEZsYWdWYWx1ZUxpc3QgZmxhZ1ZhbHVlTGlzdCA9Ci0gICAgICAgICAgICAgICAgRmxhZ1ZhbHVlTGlzdC5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ1ZhbEJ5dGVCdWZmZXIoKSk7CisgICAgICAgICAgICAgICAgRmxhZ1ZhbHVlTGlzdC5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ1ZhbEJ5dGVCdWZmZXIoMSkpOwogCiAgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIHBOb2RlID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpOwogICAgICAgICBGbGFnVGFibGUuTm9kZSBmTm9kZSA9IGZsYWdUYWJsZS5nZXQocE5vZGUuZ2V0UGFja2FnZUlkKCksICJlbmFibGVkX3J3Iik7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvUGFja2FnZVRhYmxlVGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1BhY2thZ2VUYWJsZVRlc3QuamF2YQppbmRleCBkYzJhZDkyLi40ZDdhYjJhIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvUGFja2FnZVRhYmxlVGVzdC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9QYWNrYWdlVGFibGVUZXN0LmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKIAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmlsZVR5cGU7CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuUGFja2FnZVRhYmxlOwpAQCAtMzIsNyArMzMsNyBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VUYWJsZV9yaWdodEhlYWRlcigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KLSAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKCkpOworICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoMSkpOwogICAgICAgICBQYWNrYWdlVGFibGUuSGVhZGVyIGhlYWRlciA9IHBhY2thZ2VUYWJsZS5nZXRIZWFkZXIoKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGhlYWRlci5nZXRWZXJzaW9uKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIm1vY2t1cCIsIGhlYWRlci5nZXRDb250YWluZXIoKSk7CkBAIC00NCw5ICs0NSwyMyBAQAogICAgIH0KIAogICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VUYWJsZV9yaWdodEhlYWRlcl92MigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKDIpKTsKKyAgICAgICAgUGFja2FnZVRhYmxlLkhlYWRlciBoZWFkZXIgPSBwYWNrYWdlVGFibGUuZ2V0SGVhZGVyKCk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBoZWFkZXIuZ2V0VmVyc2lvbigpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJtb2NrdXAiLCBoZWFkZXIuZ2V0Q29udGFpbmVyKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoRmlsZVR5cGUuUEFDS0FHRV9NQVAsIGhlYWRlci5nZXRGaWxlVHlwZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIzMywgaGVhZGVyLmdldEZpbGVTaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMywgaGVhZGVyLmdldE51bVBhY2thZ2VzKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMzEsIGhlYWRlci5nZXRCdWNrZXRPZmZzZXQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyg1OSwgaGVhZGVyLmdldE5vZGVPZmZzZXQoKSk7CisgICAgfQorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZVRhYmxlX3JpZ2h0Tm9kZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KLSAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKCkpOworICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoMSkpOwogCiAgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGUxID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpOwogICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBub2RlMiA9IHBhY2thZ2VUYWJsZS5nZXQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKTsKQEAgLTcyLDQgKzg3LDM0IEBACiAgICAgICAgIGFzc2VydEZhbHNlKG5vZGUyLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpKTsKICAgICAgICAgYXNzZXJ0RmFsc2Uobm9kZTQuaGFzUGFja2FnZUZpbmdlcnByaW50KCkpOwogICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VUYWJsZV9yaWdodE5vZGVfdjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZSA9CisgICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RQYWNrYWdlTWFwQnl0ZUJ1ZmZlcigyKSk7CisKKyAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgbm9kZTEgPSBwYWNrYWdlVGFibGUuZ2V0KCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIik7CisgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGUyID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIpOworICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBub2RlNCA9IHBhY2thZ2VUYWJsZS5nZXQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCBub2RlMS5nZXRQYWNrYWdlTmFtZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgbm9kZTIuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsIG5vZGU0LmdldFBhY2thZ2VOYW1lKCkpOworCisgICAgICAgIGFzc2VydEVxdWFscygwLCBub2RlMS5nZXRQYWNrYWdlSWQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCBub2RlMi5nZXRQYWNrYWdlSWQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBub2RlNC5nZXRQYWNrYWdlSWQoKSk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG5vZGUxLmdldEJvb2xlYW5TdGFydEluZGV4KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMywgbm9kZTIuZ2V0Qm9vbGVhblN0YXJ0SW5kZXgoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyg2LCBub2RlNC5nZXRCb29sZWFuU3RhcnRJbmRleCgpKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoMTc1LCBub2RlMS5nZXROZXh0T2Zmc2V0KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoLTEsIG5vZGUyLmdldE5leHRPZmZzZXQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygtMSwgbm9kZTQuZ2V0TmV4dE9mZnNldCgpKTsKKworICAgICAgICBhc3NlcnRUcnVlKG5vZGUxLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShub2RlMi5oYXNQYWNrYWdlRmluZ2VycHJpbnQoKSk7CisgICAgICAgIGFzc2VydFRydWUobm9kZTQuaGFzUGFja2FnZUZpbmdlcnByaW50KCkpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvU3RvcmFnZUZpbGVQcm92aWRlclRlc3QuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9TdG9yYWdlRmlsZVByb3ZpZGVyVGVzdC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggNjMlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvU3RvcmFnZUZpbGVQcm92aWRlclRlc3QuamF2YQpyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1N0b3JhZ2VGaWxlUHJvdmlkZXJUZXN0LmphdmEKaW5kZXggYmExYWU5ZS4uNGU5MGU2YyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9TdG9yYWdlRmlsZVByb3ZpZGVyVGVzdC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9TdG9yYWdlRmlsZVByb3ZpZGVyVGVzdC5qYXZhCkBAIC0xNyw3ICsxNyw2IEBACiBwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3Q7CiAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCkBAIC0zOCw0MyArMzcsMzEgQEAKIHB1YmxpYyBjbGFzcyBTdG9yYWdlRmlsZVByb3ZpZGVyVGVzdCB7CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RDb250YWluZXJGaWxlRXhpc3RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN0b3JhZ2VGaWxlUHJvdmlkZXIgcCA9Ci0gICAgICAgICAgICAgICAgbmV3IFN0b3JhZ2VGaWxlUHJvdmlkZXIoVGVzdERhdGFVdGlscy5URVNUREFUQV9QQVRILCBUZXN0RGF0YVV0aWxzLlRFU1REQVRBX1BBVEgpOwotICAgICAgICBhc3NlcnRUcnVlKHAuY29udGFpbmVyRmlsZUV4aXN0cyhudWxsKSk7Ci0gICAgICAgIGFzc2VydFRydWUocC5jb250YWluZXJGaWxlRXhpc3RzKCJtb2NrdXAiKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHAuY29udGFpbmVyRmlsZUV4aXN0cygiZmFrZSIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RMaXN0cGFja2FnZU1hcEZpbGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0b3JhZ2VGaWxlUHJvdmlkZXIgcCA9CiAgICAgICAgICAgICAgICAgbmV3IFN0b3JhZ2VGaWxlUHJvdmlkZXIoVGVzdERhdGFVdGlscy5URVNUREFUQV9QQVRILCBUZXN0RGF0YVV0aWxzLlRFU1REQVRBX1BBVEgpOwotICAgICAgICAvLyB0aHJvdyBuZXcgRXhjZXB0aW9uKEVudmlyb25tZW50LmdldEV4dGVybmFsU3RvcmFnZURpcmVjdG9yeSgpLmdldEFic29sdXRlUGF0aCgpKTsKICAgICAgICAgTGlzdDxQYXRoPiBmaWxlID0gcC5saXN0UGFja2FnZU1hcEZpbGVzKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBmaWxlLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUoCi0gICAgICAgICAgICAgICAgZmlsZS5nZXQoMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5lcXVhbHMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGhzLmdldCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0RGF0YVV0aWxzLlRFU1REQVRBX1BBVEgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdERhdGFVdGlscy5URVNUX1BBQ0tBR0VfTUFQX1BBVEgpKSk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBmaWxlLnNpemUoKSk7CisKKyAgICAgICAgcCA9IG5ldyBTdG9yYWdlRmlsZVByb3ZpZGVyKCJmYWtlL3BhdGgvIiwgImZha2UvcGF0aC8iKTsKKyAgICAgICAgZmlsZSA9IHAubGlzdFBhY2thZ2VNYXBGaWxlcygpOworICAgICAgICBhc3NlcnRUcnVlKGZpbGUuaXNFbXB0eSgpKTsKICAgICB9CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RMb2FkRmlsZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RvcmFnZUZpbGVQcm92aWRlciBwID0KICAgICAgICAgICAgICAgICBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcihUZXN0RGF0YVV0aWxzLlRFU1REQVRBX1BBVEgsIFRlc3REYXRhVXRpbHMuVEVTVERBVEFfUEFUSCk7Ci0gICAgICAgIFBhY2thZ2VUYWJsZSBwdCA9IHAuZ2V0UGFja2FnZVRhYmxlKCJtb2NrdXAiKTsKKyAgICAgICAgUGFja2FnZVRhYmxlIHB0ID0gcC5nZXRQYWNrYWdlVGFibGUoIm1vY2sudjEiKTsKICAgICAgICAgYXNzZXJ0Tm90TnVsbChwdCk7CiAgICAgICAgIHB0ID0KICAgICAgICAgICAgICAgICBTdG9yYWdlRmlsZVByb3ZpZGVyLmdldFBhY2thZ2VUYWJsZSgKICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGhzLmdldCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdERhdGFVdGlscy5URVNUREFUQV9QQVRILCBUZXN0RGF0YVV0aWxzLlRFU1RfUEFDS0FHRV9NQVBfUEFUSCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0RGF0YVV0aWxzLlRFU1REQVRBX1BBVEgsICJtb2NrLnYxLnBhY2thZ2UubWFwIikpOwogICAgICAgICBhc3NlcnROb3ROdWxsKHB0KTsKLSAgICAgICAgRmxhZ1RhYmxlIGYgPSBwLmdldEZsYWdUYWJsZSgibW9ja3VwIik7CisgICAgICAgIEZsYWdUYWJsZSBmID0gcC5nZXRGbGFnVGFibGUoIm1vY2sudjEiKTsKICAgICAgICAgYXNzZXJ0Tm90TnVsbChmKTsKLSAgICAgICAgRmxhZ1ZhbHVlTGlzdCB2ID0gcC5nZXRGbGFnVmFsdWVMaXN0KCJtb2NrdXAiKTsKKyAgICAgICAgRmxhZ1ZhbHVlTGlzdCB2ID0gcC5nZXRGbGFnVmFsdWVMaXN0KCJtb2NrLnYxIik7CiAgICAgICAgIGFzc2VydE5vdE51bGwodik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1Rlc3REYXRhVXRpbHMuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9UZXN0RGF0YVV0aWxzLmphdmEKaW5kZXggZjM1OTUyZC4uMzg4OTcxZSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1Rlc3REYXRhVXRpbHMuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvVGVzdERhdGFVdGlscy5qYXZhCkBAIC0yMSwyOCArMjEsMjcgQEAKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogCiBwdWJsaWMgZmluYWwgY2xhc3MgVGVzdERhdGFVdGlscyB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUEFDS0FHRV9NQVBfUEFUSCA9ICJwYWNrYWdlLm1hcCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfRkxBR19NQVBfUEFUSCA9ICJmbGFnLm1hcCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfRkxBR19WQUxfUEFUSCA9ICJmbGFnLnZhbCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfRkxBR19JTkZPX1BBVEggPSAiZmxhZy5pbmZvIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QQUNLQUdFX01BUF9QQVRIID0gIm1vY2sudiVkLnBhY2thZ2UubWFwIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GTEFHX01BUF9QQVRIID0gIm1vY2sudiVkLmZsYWcubWFwIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GTEFHX1ZBTF9QQVRIID0gIm1vY2sudiVkLnZhbCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfRkxBR19JTkZPX1BBVEggPSAibW9jay52JWQuaW5mbyI7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVERBVEFfUEFUSCA9Ci0gICAgICAgICAgICAiL2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS8iOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1REQVRBX1BBVEggPSAiL2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS8iOwogCi0gICAgcHVibGljIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RQYWNrYWdlTWFwQnl0ZUJ1ZmZlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFRFU1RfUEFDS0FHRV9NQVBfUEFUSCk7CisgICAgcHVibGljIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RQYWNrYWdlTWFwQnl0ZUJ1ZmZlcihpbnQgdmVyc2lvbikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgU3RyaW5nLmZvcm1hdChURVNUX1BBQ0tBR0VfTUFQX1BBVEgsIHZlcnNpb24pKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdEZsYWdNYXBCeXRlQnVmZmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgVEVTVF9GTEFHX01BUF9QQVRIKTsKKyAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdEZsYWdNYXBCeXRlQnVmZmVyKGludCB2ZXJzaW9uKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIHJlYWRGaWxlKFRFU1REQVRBX1BBVEggKyBTdHJpbmcuZm9ybWF0KFRFU1RfRkxBR19NQVBfUEFUSCwgdmVyc2lvbikpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1ZmZlciBnZXRUZXN0RmxhZ1ZhbEJ5dGVCdWZmZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIHJlYWRGaWxlKFRFU1REQVRBX1BBVEggKyBURVNUX0ZMQUdfVkFMX1BBVEgpOworICAgIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1ZmZlciBnZXRUZXN0RmxhZ1ZhbEJ5dGVCdWZmZXIoaW50IHZlcnNpb24pIHRocm93cyBFeGNlcHRpb24geworICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFN0cmluZy5mb3JtYXQoVEVTVF9GTEFHX1ZBTF9QQVRILCB2ZXJzaW9uKSk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RGbGFnSW5mb0J5dGVCdWZmZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIHJlYWRGaWxlKFRFU1REQVRBX1BBVEggKyBURVNUX0ZMQUdfSU5GT19QQVRIKTsKKyAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdEZsYWdJbmZvQnl0ZUJ1ZmZlcihpbnQgdmVyc2lvbikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgU3RyaW5nLmZvcm1hdChURVNUX0ZMQUdfSU5GT19QQVRILCB2ZXJzaW9uKSk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgQnl0ZUJ1ZmZlciByZWFkRmlsZShTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zdG9yYWdlX2ZpbGVfdGVzdC5jcHAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3N0b3JhZ2VfZmlsZV90ZXN0LmNwcAppbmRleCAzNjI2ZjcyLi41YzAwOGFmIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3N0b3JhZ2VfZmlsZV90ZXN0LmNwcAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3N0b3JhZ2VfZmlsZV90ZXN0LmNwcApAQCAtMjQsMTAgKzI0LDggQEAKIHVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOjpiYXNlOwogdXNpbmcgbmFtZXNwYWNlIGFjb25maWdfc3RvcmFnZTsKIAotdm9pZCB2ZXJpZnlfdmFsdWUoY29uc3QgRmxhZ1ZhbHVlU3VtbWFyeSYgZmxhZywKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYWNrYWdlX25hbWUsCi0gICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmxhZ19uYW1lLAotICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZsYWdfdmFsLAordm9pZCB2ZXJpZnlfdmFsdWUoY29uc3QgRmxhZ1ZhbHVlU3VtbWFyeSYgZmxhZywgY29uc3Qgc3RkOjpzdHJpbmcmIHBhY2thZ2VfbmFtZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbGFnX25hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbGFnX3ZhbCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZV90eXBlKSB7CiAgIEFTU0VSVF9FUShmbGFnLnBhY2thZ2VfbmFtZSwgcGFja2FnZV9uYW1lKTsKICAgQVNTRVJUX0VRKGZsYWcuZmxhZ19uYW1lLCBmbGFnX25hbWUpOwpAQCAtMzksMTAgKzM3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHBhY2thZ2VfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZsYWdfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZsYWdfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWVfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19yZWFkd3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzX3NlcnZlcl9vdmVycmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNfbG9jYWxfb3ZlcnJpZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlX3R5cGUsIGJvb2wgaXNfcmVhZHdyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc19zZXJ2ZXJfb3ZlcnJpZGUsIGJvb2wgaGFzX2xvY2FsX292ZXJyaWRlKSB7CiAgIEFTU0VSVF9FUShmbGFnLnBhY2thZ2VfbmFtZSwgcGFja2FnZV9uYW1lKTsKICAgQVNTRVJUX0VRKGZsYWcuZmxhZ19uYW1lLCBmbGFnX25hbWUpOwogICBBU1NFUlRfRVEoZmxhZy5mbGFnX3ZhbHVlLCBmbGFnX3ZhbCk7CkBAIC01Miw2MyArNDgsMTM3IEBACiAgIEFTU0VSVF9FUShmbGFnLmhhc19sb2NhbF9vdmVycmlkZSwgaGFzX2xvY2FsX292ZXJyaWRlKTsKIH0KIAotVEVTVChBY29uZmlnU3RvcmFnZUZpbGVUZXN0LCB0ZXN0X2xpc3RfZmxhZykgeworUmVzdWx0PHN0ZDo6dmVjdG9yPEZsYWdWYWx1ZVN1bW1hcnk+PiBnZXRfZmxhZ19saXN0X3Jlc3VsdCgKKyAgICBjb25zdCBzdGQ6OnN0cmluZyB2ZXJzaW9uKSB7CiAgIGF1dG8gY29uc3QgdGVzdF9iYXNlX2RpciA9IEdldEV4ZWN1dGFibGVEaXJlY3RvcnkoKTsKLSAgYXV0byBjb25zdCB0ZXN0X2RpciA9IHRlc3RfYmFzZV9kaXIgKyAiL2RhdGEvdjEiOwotICBhdXRvIGNvbnN0IHBhY2thZ2VfbWFwID0gdGVzdF9kaXIgKyAiL3BhY2thZ2UubWFwIjsKLSAgYXV0byBjb25zdCBmbGFnX21hcCA9IHRlc3RfZGlyICsgIi9mbGFnLm1hcCI7Ci0gIGF1dG8gY29uc3QgZmxhZ192YWwgPSB0ZXN0X2RpciArICIvZmxhZy52YWwiOwotICBhdXRvIGZsYWdfbGlzdF9yZXN1bHQgPSBhY29uZmlnX3N0b3JhZ2U6Omxpc3RfZmxhZ3MoCi0gICAgICBwYWNrYWdlX21hcCwgZmxhZ19tYXAsIGZsYWdfdmFsKTsKKyAgYXV0byBjb25zdCB0ZXN0X2RpciA9IHRlc3RfYmFzZV9kaXIgKyAiL2RhdGEvdiIgKyB2ZXJzaW9uOworICBhdXRvIGNvbnN0IHBhY2thZ2VfbWFwID0gdGVzdF9kaXIgKyAiL3BhY2thZ2VfdiIgKyB2ZXJzaW9uICsgIi5tYXAiOworICBhdXRvIGNvbnN0IGZsYWdfbWFwID0gdGVzdF9kaXIgKyAiL2ZsYWdfdiIgKyB2ZXJzaW9uICsgIi5tYXAiOworICBhdXRvIGNvbnN0IGZsYWdfdmFsID0gdGVzdF9kaXIgKyAiL2ZsYWdfdiIgKyB2ZXJzaW9uICsgIi52YWwiOworICByZXR1cm4gYWNvbmZpZ19zdG9yYWdlOjpsaXN0X2ZsYWdzKHBhY2thZ2VfbWFwLCBmbGFnX21hcCwgZmxhZ192YWwpOworfQorCitSZXN1bHQ8c3RkOjp2ZWN0b3I8RmxhZ1ZhbHVlQW5kSW5mb1N1bW1hcnk+PiBnZXRfZmxhZ19saXN0X3Jlc3VsdF93aXRoX2luZm8oCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgdmVyc2lvbikgeworICBhdXRvIGNvbnN0IHRlc3RfYmFzZV9kaXIgPSBHZXRFeGVjdXRhYmxlRGlyZWN0b3J5KCk7CisgIGF1dG8gY29uc3QgdGVzdF9kaXIgPSB0ZXN0X2Jhc2VfZGlyICsgIi9kYXRhL3YiICsgdmVyc2lvbjsKKyAgYXV0byBjb25zdCBwYWNrYWdlX21hcCA9IHRlc3RfZGlyICsgIi9wYWNrYWdlX3YiICsgdmVyc2lvbiArICIubWFwIjsKKyAgYXV0byBjb25zdCBmbGFnX21hcCA9IHRlc3RfZGlyICsgIi9mbGFnX3YiICsgdmVyc2lvbiArICIubWFwIjsKKyAgYXV0byBjb25zdCBmbGFnX3ZhbCA9IHRlc3RfZGlyICsgIi9mbGFnX3YiICsgdmVyc2lvbiArICIudmFsIjsKKyAgYXV0byBjb25zdCBmbGFnX2luZm8gPSB0ZXN0X2RpciArICIvZmxhZ192IiArIHZlcnNpb24gKyAiLmluZm8iOworICByZXR1cm4gYWNvbmZpZ19zdG9yYWdlOjpsaXN0X2ZsYWdzX3dpdGhfaW5mbyhwYWNrYWdlX21hcCwgZmxhZ19tYXAsIGZsYWdfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnX2luZm8pOworfQorCitURVNUKEFjb25maWdTdG9yYWdlRmlsZVRlc3QsIHRlc3RfbGlzdF9mbGFnKSB7CisgIGF1dG8gZmxhZ19saXN0X3Jlc3VsdCA9IGdldF9mbGFnX2xpc3RfcmVzdWx0KCIxIik7CiAgIEFTU0VSVF9UUlVFKGZsYWdfbGlzdF9yZXN1bHQub2soKSk7CiAKICAgYXV0byBjb25zdCYgZmxhZ19saXN0ID0gKmZsYWdfbGlzdF9yZXN1bHQ7CiAgIEFTU0VSVF9FUShmbGFnX2xpc3Quc2l6ZSgpLCA4KTsKLSAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFswXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZGlzYWJsZWRfcnciLAotICAgICAgICAgICAgICAgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFswXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgImRpc2FibGVkX3J3IiwgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKICAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFsxXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZW5hYmxlZF9ybyIsCiAgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iKTsKICAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFsyXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZW5hYmxlZF9ydyIsCiAgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIik7Ci0gIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbM10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImRpc2FibGVkX3J3IiwKLSAgICAgICAgICAgICAgICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIik7Ci0gIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbNF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImVuYWJsZWRfZml4ZWRfcm8iLAotICAgICAgICAgICAgICAgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFszXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgImRpc2FibGVkX3J3IiwgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs0XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgImVuYWJsZWRfZml4ZWRfcm8iLCAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIpOwogICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzVdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsICJlbmFibGVkX3JvIiwKICAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIpOwotICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzZdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsICJlbmFibGVkX2ZpeGVkX3JvIiwKLSAgICAgICAgICAgICAgICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbNl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwKKyAgICAgICAgICAgICAgICJlbmFibGVkX2ZpeGVkX3JvIiwgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs3XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLCAiZW5hYmxlZF9ydyIsCisgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIik7Cit9CisKKy8vIFRPRE86IGIvMzc2MjU2NDcyIC0gVXNlIHBhcmFtZXRlcml6ZWQgdGVzdHMuCitURVNUKEFjb25maWdTdG9yYWdlRmlsZVRlc3QsIHRlc3RfbGlzdF9mbGFnX3YyKSB7CisgIGF1dG8gZmxhZ19saXN0X3Jlc3VsdCA9IGdldF9mbGFnX2xpc3RfcmVzdWx0KCIyIik7CisgIEFTU0VSVF9UUlVFKGZsYWdfbGlzdF9yZXN1bHQub2soKSk7CisKKyAgYXV0byBjb25zdCYgZmxhZ19saXN0ID0gKmZsYWdfbGlzdF9yZXN1bHQ7CisgIEFTU0VSVF9FUShmbGFnX2xpc3Quc2l6ZSgpLCA4KTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFswXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgImRpc2FibGVkX3J3IiwgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFsxXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZW5hYmxlZF9ybyIsCisgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFsyXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZW5hYmxlZF9ydyIsCisgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbM10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwKKyAgICAgICAgICAgICAgICJkaXNhYmxlZF9ydyIsICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbNF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwKKyAgICAgICAgICAgICAgICJlbmFibGVkX2ZpeGVkX3JvIiwgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs1XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLCAiZW5hYmxlZF9ybyIsCisgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs2XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLAorICAgICAgICAgICAgICAgImVuYWJsZWRfZml4ZWRfcm8iLCAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIpOwogICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzddLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsICJlbmFibGVkX3J3IiwKICAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKIH0KIAogVEVTVChBY29uZmlnU3RvcmFnZUZpbGVUZXN0LCB0ZXN0X2xpc3RfZmxhZ193aXRoX2luZm8pIHsKLSAgYXV0byBjb25zdCBiYXNlX3Rlc3RfZGlyID0gR2V0RXhlY3V0YWJsZURpcmVjdG9yeSgpOwotICBhdXRvIGNvbnN0IHRlc3RfZGlyID0gYmFzZV90ZXN0X2RpciArICIvZGF0YS92MSI7Ci0gIGF1dG8gY29uc3QgcGFja2FnZV9tYXAgPSB0ZXN0X2RpciArICIvcGFja2FnZS5tYXAiOwotICBhdXRvIGNvbnN0IGZsYWdfbWFwID0gdGVzdF9kaXIgKyAiL2ZsYWcubWFwIjsKLSAgYXV0byBjb25zdCBmbGFnX3ZhbCA9IHRlc3RfZGlyICsgIi9mbGFnLnZhbCI7Ci0gIGF1dG8gY29uc3QgZmxhZ19pbmZvID0gdGVzdF9kaXIgKyAiL2ZsYWcuaW5mbyI7Ci0gIGF1dG8gZmxhZ19saXN0X3Jlc3VsdCA9IGFjb25maWdfc3RvcmFnZTo6bGlzdF9mbGFnc193aXRoX2luZm8oCi0gICAgICBwYWNrYWdlX21hcCwgZmxhZ19tYXAsIGZsYWdfdmFsLCBmbGFnX2luZm8pOworICBhdXRvIGZsYWdfbGlzdF9yZXN1bHQgPSBnZXRfZmxhZ19saXN0X3Jlc3VsdF93aXRoX2luZm8oIjEiKTsKICAgQVNTRVJUX1RSVUUoZmxhZ19saXN0X3Jlc3VsdC5vaygpKTsKIAogICBhdXRvIGNvbnN0JiBmbGFnX2xpc3QgPSAqZmxhZ19saXN0X3Jlc3VsdDsKICAgQVNTRVJUX0VRKGZsYWdfbGlzdC5zaXplKCksIDgpOwotICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgImRpc2FibGVkX3J3IiwKLSAgICAgICAgICAgICAgICAgICAgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwgZmFsc2UpOwotICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgImVuYWJsZWRfcm8iLAotICAgICAgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzJdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsICJlbmFibGVkX3J3IiwKLSAgICAgICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLCBmYWxzZSk7Ci0gIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFszXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLCAiZGlzYWJsZWRfcnciLAotICAgICAgICAgICAgICAgICAgICAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLCBmYWxzZSk7Ci0gIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs0XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLCAiZW5hYmxlZF9maXhlZF9ybyIsCi0gICAgICAgICAgICAgICAgICAgICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0gIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs1XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLCAiZW5hYmxlZF9ybyIsCi0gICAgICAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwgImVuYWJsZWRfZml4ZWRfcm8iLAotICAgICAgICAgICAgICAgICAgICAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbN10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwgImVuYWJsZWRfcnciLAotICAgICAgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzBdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsCisgICAgICAgICAgICAgICAgICAgICJkaXNhYmxlZF9ydyIsICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzFdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX3JvIiwgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFsyXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9ydyIsICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbM10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwKKyAgICAgICAgICAgICAgICAgICAgImRpc2FibGVkX3J3IiwgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfZml4ZWRfcm8iLCAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSwgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfcm8iLCAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzZdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX2ZpeGVkX3JvIiwgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzddLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX3J3IiwgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7Cit9CisKK1RFU1QoQWNvbmZpZ1N0b3JhZ2VGaWxlVGVzdCwgdGVzdF9saXN0X2ZsYWdfd2l0aF9pbmZvX3YyKSB7CisgIGF1dG8gZmxhZ19saXN0X3Jlc3VsdCA9IGdldF9mbGFnX2xpc3RfcmVzdWx0X3dpdGhfaW5mbygiMiIpOworICBBU1NFUlRfVFJVRShmbGFnX2xpc3RfcmVzdWx0Lm9rKCkpOworCisgIGF1dG8gY29uc3QmIGZsYWdfbGlzdCA9ICpmbGFnX2xpc3RfcmVzdWx0OworICBBU1NFUlRfRVEoZmxhZ19saXN0LnNpemUoKSwgOCk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFswXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAiZGlzYWJsZWRfcnciLCAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFsxXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9ybyIsICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfcnciLCAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzNdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAgICAgICJkaXNhYmxlZF9ydyIsICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzRdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX2ZpeGVkX3JvIiwgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzVdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX3JvIiwgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs2XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9maXhlZF9ybyIsICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs3XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9ydyIsICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvQW5kcm9pZC5icCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL0FuZHJvaWQuYnAKaW5kZXggNjY2YzViYS4uMzIzOGQ3OSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvQW5kcm9pZC5icAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9BbmRyb2lkLmJwCkBAIC0zNiwxMCArMzYsMTAgQEAKICAgICAgICAgImxpYnJhbmQiLAogICAgIF0sCiAgICAgZGF0YTogWwotICAgICAgICAidGVzdHMvZGF0YS92MS9wYWNrYWdlLm1hcCIsCi0gICAgICAgICJ0ZXN0cy9kYXRhL3YxL2ZsYWcubWFwIiwKLSAgICAgICAgInRlc3RzL2RhdGEvdjEvZmxhZy52YWwiLAotICAgICAgICAidGVzdHMvZGF0YS92MS9mbGFnLmluZm8iLAorICAgICAgICAidGVzdHMvZGF0YS92MS9wYWNrYWdlX3YxLm1hcCIsCisgICAgICAgICJ0ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwIiwKKyAgICAgICAgInRlc3RzL2RhdGEvdjEvZmxhZ192MS52YWwiLAorICAgICAgICAidGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8iLAogICAgIF0sCiB9CiAKQEAgLTE1NSw3ICsxNTUsNiBAQAogICAgIG5hbWU6ICJhY29uZmlnX3N0b3JhZ2VfcmVhZGVyX2phdmEiLAogICAgIHNyY3M6IFsKICAgICAgICAgInNyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQWNvbmZpZ1BhY2thZ2VJbXBsLmphdmEiLAotICAgICAgICAic3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlRmlsZVByb3ZpZGVyLmphdmEiLAogICAgICAgICAic3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlSW50ZXJuYWxSZWFkZXIuamF2YSIsCiAgICAgXSwKICAgICBsaWJzOiBbCkBAIC0xNzgsNyArMTc3LDYgQEAKICAgICBuYW1lOiAiYWNvbmZpZ19zdG9yYWdlX3JlYWRlcl9qYXZhX25vbmUiLAogICAgIHNyY3M6IFsKICAgICAgICAgInNyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQWNvbmZpZ1BhY2thZ2VJbXBsLmphdmEiLAotICAgICAgICAic3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlRmlsZVByb3ZpZGVyLmphdmEiLAogICAgICAgICAic3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlSW50ZXJuYWxSZWFkZXIuamF2YSIsCiAgICAgXSwKICAgICBsaWJzOiBbCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ19pbmZvX3F1ZXJ5LnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfaW5mb19xdWVyeS5ycwppbmRleCBmZTU3YTZkLi42OGI2MTkzIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ19pbmZvX3F1ZXJ5LnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX2luZm9fcXVlcnkucnMKQEAgLTU1LDEyICs1NSwxNCBAQAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgewogICAgIHVzZSBzdXBlcjo6KjsKLSAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6Ont0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCwgRmxhZ0luZm9CaXR9OworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6eworICAgICAgICB0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCwgRmxhZ0luZm9CaXQsIERFRkFVTFRfRklMRV9WRVJTSU9OLAorICAgIH07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgaWYgZmxhZyBoYXMgc2VydmVyIG92ZXJyaWRlCiAgICAgZm4gdGVzdF9pc19mbGFnX3N0aWNreSgpIHsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGZvciBvZmZzZXQgaW4gMC4uOCB7CiAgICAgICAgICAgICBsZXQgYXR0cmlidXRlID0KICAgICAgICAgICAgICAgICBmaW5kX2ZsYWdfYXR0cmlidXRlKCZmbGFnX2luZm9fbGlzdFsuLl0sIEZsYWdWYWx1ZVR5cGU6OkJvb2xlYW4sIG9mZnNldCkudW53cmFwKCk7CkBAIC03MSw3ICs3Myw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGlmIGZsYWcgaXMgcmVhZHdyaXRlCiAgICAgZm4gdGVzdF9pc19mbGFnX3JlYWR3cml0ZSgpIHsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBiYXNlbGluZTogVmVjPGJvb2w+ID0gdmVjIVt0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV07CiAgICAgICAgIGZvciBvZmZzZXQgaW4gMC4uOCB7CiAgICAgICAgICAgICBsZXQgYXR0cmlidXRlID0KQEAgLTg2LDcgKzg4LDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgaWYgZmxhZyBoYXMgbG9jYWwgb3ZlcnJpZGUKICAgICBmbiB0ZXN0X2ZsYWdfaGFzX292ZXJyaWRlKCkgewotICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgZm9yIG9mZnNldCBpbiAwLi44IHsKICAgICAgICAgICAgIGxldCBhdHRyaWJ1dGUgPQogICAgICAgICAgICAgICAgIGZpbmRfZmxhZ19hdHRyaWJ1dGUoJmZsYWdfaW5mb19saXN0Wy4uXSwgRmxhZ1ZhbHVlVHlwZTo6Qm9vbGVhbiwgb2Zmc2V0KS51bndyYXAoKTsKQEAgLTk3LDcgKzk5LDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgYmV5b25kIHRoZSBlbmQgb2YgYm9vbGVhbiBzZWN0aW9uCiAgICAgZm4gdGVzdF9ib29sZWFuX291dF9vZl9yYW5nZSgpIHsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBlcnJvciA9CiAgICAgICAgICAgICBmaW5kX2ZsYWdfYXR0cmlidXRlKCZmbGFnX2luZm9fbGlzdFsuLl0sIEZsYWdWYWx1ZVR5cGU6OkJvb2xlYW4sIDgpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKQEAgLTEwOSw3ICsxMTEsNyBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBxdWVyeSBlcnJvciB3aGVuIGZpbGUgaGFzIGEgaGlnaGVyIHZlcnNpb24KICAgICBmbiB0ZXN0X2hpZ2hlcl92ZXJzaW9uX3N0b3JhZ2VfZmlsZSgpIHsKLSAgICAgICAgbGV0IG11dCBpbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpOworICAgICAgICBsZXQgbXV0IGluZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgaW5mb19saXN0LmhlYWRlci52ZXJzaW9uID0gTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gKyAxOwogICAgICAgICBsZXQgZmxhZ19pbmZvID0gaW5mb19saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGVycm9yID0gZmluZF9mbGFnX2F0dHJpYnV0ZSgmZmxhZ19pbmZvWy4uXSwgRmxhZ1ZhbHVlVHlwZTo6Qm9vbGVhbiwgNCkudW53cmFwX2VycigpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfdGFibGVfcXVlcnkucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ190YWJsZV9xdWVyeS5ycwppbmRleCBlOWJjNjA0Li4zZTg3YWNjIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ190YWJsZV9xdWVyeS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ190YWJsZV9xdWVyeS5ycwpAQCAtNzQsMTIgKzc0LDEyIEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ190YWJsZTsKKyAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6Ont0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3RhYmxlLCBERUZBVUxUX0ZJTEVfVkVSU0lPTn07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGFibGUgcXVlcnkKICAgICBmbiB0ZXN0X2ZsYWdfcXVlcnkoKSB7Ci0gICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBiYXNlbGluZSA9IHZlYyFbCiAgICAgICAgICAgICAoMCwgImVuYWJsZWRfcm8iLCBTdG9yZWRGbGFnVHlwZTo6UmVhZE9ubHlCb29sZWFuLCAxdTE2KSwKICAgICAgICAgICAgICgwLCAiZW5hYmxlZF9ydyIsIFN0b3JlZEZsYWdUeXBlOjpSZWFkV3JpdGVCb29sZWFuLCAydTE2KSwKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0YWJsZSBxdWVyeSBvZiBhIG5vbiBleGlzdCBmbGFnCiAgICAgZm4gdGVzdF9ub3RfZXhpc3RlZF9mbGFnX3F1ZXJ5KCkgewotICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZmxhZ19jb250ZXh0ID0gZmluZF9mbGFnX3JlYWRfY29udGV4dCgmZmxhZ190YWJsZVsuLl0sIDEsICJkaXNhYmxlZF9maXhlZF9ybyIpLnVud3JhcCgpOwogICAgICAgICBhc3NlcnRfZXEhKGZsYWdfY29udGV4dCwgTm9uZSk7CiAgICAgICAgIGxldCBmbGFnX2NvbnRleHQgPSBmaW5kX2ZsYWdfcmVhZF9jb250ZXh0KCZmbGFnX3RhYmxlWy4uXSwgMiwgImRpc2FibGVkX3J3IikudW53cmFwKCk7CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgZXJyb3Igd2hlbiBmaWxlIGhhcyBhIGhpZ2hlciB2ZXJzaW9uCiAgICAgZm4gdGVzdF9oaWdoZXJfdmVyc2lvbl9zdG9yYWdlX2ZpbGUoKSB7Ci0gICAgICAgIGxldCBtdXQgdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCk7CisgICAgICAgIGxldCBtdXQgdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgdGFibGUuaGVhZGVyLnZlcnNpb24gPSBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiArIDE7CiAgICAgICAgIGxldCBmbGFnX3RhYmxlID0gdGFibGUuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZXJyb3IgPSBmaW5kX2ZsYWdfcmVhZF9jb250ZXh0KCZmbGFnX3RhYmxlWy4uXSwgMCwgImVuYWJsZWRfcm8iKS51bndyYXBfZXJyKCk7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ192YWx1ZV9xdWVyeS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX3ZhbHVlX3F1ZXJ5LnJzCmluZGV4IDEyYzFlODMuLjM1ZjU2OTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX3ZhbHVlX3F1ZXJ5LnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX3ZhbHVlX3F1ZXJ5LnJzCkBAIC00OCwxMiArNDgsMTIgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3Q7CisgICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0LCBERUZBVUxUX0ZJTEVfVkVSU0lPTn07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gZmxhZyB2YWx1ZSBxdWVyeQogICAgIGZuIHRlc3RfZmxhZ192YWx1ZV9xdWVyeSgpIHsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgYmFzZWxpbmU6IFZlYzxib29sPiA9IHZlYyFbZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXTsKICAgICAgICAgZm9yIChvZmZzZXQsIGV4cGVjdGVkX3ZhbHVlKSBpbiBiYXNlbGluZS5pbnRvX2l0ZXIoKS5lbnVtZXJhdGUoKSB7CiAgICAgICAgICAgICBsZXQgZmxhZ192YWx1ZSA9IGZpbmRfYm9vbGVhbl9mbGFnX3ZhbHVlKCZmbGFnX3ZhbHVlX2xpc3RbLi5dLCBvZmZzZXQgYXMgdTMyKS51bndyYXAoKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgYmV5b25kIHRoZSBlbmQgb2YgYm9vbGVhbiBzZWN0aW9uCiAgICAgZm4gdGVzdF9ib29sZWFuX291dF9vZl9yYW5nZSgpIHsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZXJyb3IgPSBmaW5kX2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWx1ZV9saXN0Wy4uXSwgOCkudW53cmFwX2VycigpOwogICAgICAgICBhc3NlcnRfZXEhKAogICAgICAgICAgICAgZm9ybWF0ISgiezo/fSIsIGVycm9yKSwKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgZXJyb3Igd2hlbiBmaWxlIGhhcyBhIGhpZ2hlciB2ZXJzaW9uCiAgICAgZm4gdGVzdF9oaWdoZXJfdmVyc2lvbl9zdG9yYWdlX2ZpbGUoKSB7Ci0gICAgICAgIGxldCBtdXQgdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpOworICAgICAgICBsZXQgbXV0IHZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICB2YWx1ZV9saXN0LmhlYWRlci52ZXJzaW9uID0gTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gKyAxOwogICAgICAgICBsZXQgZmxhZ192YWx1ZSA9IHZhbHVlX2xpc3QuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZXJyb3IgPSBmaW5kX2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWx1ZVsuLl0sIDQpLnVud3JhcF9lcnIoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9saWIucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvbGliLnJzCmluZGV4IDUxMDRjZDAuLjZlOThmZTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9saWIucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2xpYi5ycwpAQCAtNDEzLDEwICs0MTMsMTAgQEAKICAgICAgICAgbGV0IGZsYWdfbWFwID0gc3RvcmFnZV9kaXIuY2xvbmUoKSArICIvbWFwcy9tb2NrdXAuZmxhZy5tYXAiOwogICAgICAgICBsZXQgZmxhZ192YWwgPSBzdG9yYWdlX2Rpci5jbG9uZSgpICsgIi9ib290L21vY2t1cC52YWwiOwogICAgICAgICBsZXQgZmxhZ19pbmZvID0gc3RvcmFnZV9kaXIuY2xvbmUoKSArICIvYm9vdC9tb2NrdXAuaW5mbyI7Ci0gICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvcGFja2FnZS5tYXAiLCAmcGFja2FnZV9tYXApLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWcubWFwIiwgJmZsYWdfbWFwKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnLnZhbCIsICZmbGFnX3ZhbCkudW53cmFwKCk7Ci0gICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZy5pbmZvIiwgJmZsYWdfaW5mbykudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAiLCAmcGFja2FnZV9tYXApLnVud3JhcCgpOworICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwIiwgJmZsYWdfbWFwKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLnZhbCIsICZmbGFnX3ZhbCkudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvIiwgJmZsYWdfaW5mbykudW53cmFwKCk7CiAKICAgICAgICAgcmV0dXJuIHN0b3JhZ2VfZGlyOwogICAgIH0KQEAgLTUwOCw5ICs1MDgsOSBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBmbGFnIHN0b3JhZ2UgZmlsZSB2ZXJzaW9uIG51bWJlciBxdWVyeSBhcGkKICAgICBmbiB0ZXN0X3N0b3JhZ2VfdmVyc2lvbl9xdWVyeSgpIHsKLSAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvZGF0YS92MS9wYWNrYWdlLm1hcCIpLnVud3JhcCgpLCAxKTsKLSAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvZGF0YS92MS9mbGFnLm1hcCIpLnVud3JhcCgpLCAxKTsKLSAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvZGF0YS92MS9mbGFnLnZhbCIpLnVud3JhcCgpLCAxKTsKLSAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvZGF0YS92MS9mbGFnLmluZm8iKS51bndyYXAoKSwgMSk7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAiKS51bndyYXAoKSwgMSk7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5tYXAiKS51bndyYXAoKSwgMSk7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS52YWwiKS51bndyYXAoKSwgMSk7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvIikudW53cmFwKCksIDEpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9tYXBwZWRfZmlsZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9tYXBwZWRfZmlsZS5ycwppbmRleCAyYzE4ODRhLi5mNGUyNjllIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvbWFwcGVkX2ZpbGUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL21hcHBlZF9maWxlLnJzCkBAIC05NywxMCArOTcsMTAgQEAKICAgICAgICAgbGV0IGZsYWdfbWFwID0gc3RvcmFnZV9kaXIuY2xvbmUoKSArICIvbWFwcy9tb2NrdXAuZmxhZy5tYXAiOwogICAgICAgICBsZXQgZmxhZ192YWwgPSBzdG9yYWdlX2Rpci5jbG9uZSgpICsgIi9ib290L21vY2t1cC52YWwiOwogICAgICAgICBsZXQgZmxhZ19pbmZvID0gc3RvcmFnZV9kaXIuY2xvbmUoKSArICIvYm9vdC9tb2NrdXAuaW5mbyI7Ci0gICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvcGFja2FnZS5tYXAiLCAmcGFja2FnZV9tYXApLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWcubWFwIiwgJmZsYWdfbWFwKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnLnZhbCIsICZmbGFnX3ZhbCkudW53cmFwKCk7Ci0gICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZy5pbmZvIiwgJmZsYWdfaW5mbykudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAiLCAmcGFja2FnZV9tYXApLnVud3JhcCgpOworICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwIiwgJmZsYWdfbWFwKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLnZhbCIsICZmbGFnX3ZhbCkudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvIiwgJmZsYWdfaW5mbykudW53cmFwKCk7CiAKICAgICAgICAgcmV0dXJuIHN0b3JhZ2VfZGlyOwogICAgIH0KQEAgLTEwOCw5ICsxMDgsOSBAQAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X21hcHBlZF9maWxlX2NvbnRlbnRzKCkgewogICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7Ci0gICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpQYWNrYWdlTWFwLCAiLi90ZXN0cy9kYXRhL3YxL3BhY2thZ2UubWFwIik7Ci0gICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpGbGFnTWFwLCAiLi90ZXN0cy9kYXRhL3YxL2ZsYWcubWFwIik7Ci0gICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpGbGFnVmFsLCAiLi90ZXN0cy9kYXRhL3YxL2ZsYWcudmFsIik7Ci0gICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpGbGFnSW5mbywgIi4vdGVzdHMvZGF0YS92MS9mbGFnLmluZm8iKTsKKyAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OlBhY2thZ2VNYXAsICIuL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAiKTsKKyAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OkZsYWdNYXAsICIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5tYXAiKTsKKyAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OkZsYWdWYWwsICIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS52YWwiKTsKKyAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OkZsYWdJbmZvLCAiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEuaW5mbyIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9wYWNrYWdlX3RhYmxlX3F1ZXJ5LnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL3BhY2thZ2VfdGFibGVfcXVlcnkucnMKaW5kZXggYWNiNjBmNi4uYTRiNjNhYiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL3BhY2thZ2VfdGFibGVfcXVlcnkucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL3BhY2thZ2VfdGFibGVfcXVlcnkucnMKQEAgLTc0LDEyICs3NCwxMiBAQAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgewogICAgIHVzZSBzdXBlcjo6KjsKLSAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGU7CisgICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSwgREVGQVVMVF9GSUxFX1ZFUlNJT059OwogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRhYmxlIHF1ZXJ5CiAgICAgZm4gdGVzdF9wYWNrYWdlX3F1ZXJ5KCkgewotICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgcGFja2FnZV9jb250ZXh0ID0KICAgICAgICAgICAgIGZpbmRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfdGFibGVbLi5dLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpCkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0YWJsZSBxdWVyeSBvZiBhIG5vbiBleGlzdCBwYWNrYWdlCiAgICAgZm4gdGVzdF9ub3RfZXhpc3RlZF9wYWNrYWdlX3F1ZXJ5KCkgewogICAgICAgICAvLyB0aGlzIHdpbGwgbGFuZCBhdCBhbiBlbXB0eSBidWNrZXQKLSAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CiAgICAgICAgICAgICBmaW5kX3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX3RhYmxlWy4uXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzMiKQogICAgICAgICAgICAgICAgIC51bndyYXAoKTsKQEAgLTExOSw3ICsxMTksNyBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBxdWVyeSBlcnJvciB3aGVuIGZpbGUgaGFzIGEgaGlnaGVyIHZlcnNpb24KICAgICBmbiB0ZXN0X2hpZ2hlcl92ZXJzaW9uX3N0b3JhZ2VfZmlsZSgpIHsKLSAgICAgICAgbGV0IG11dCB0YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKTsKKyAgICAgICAgbGV0IG11dCB0YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICB0YWJsZS5oZWFkZXIudmVyc2lvbiA9IE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OICsgMTsKICAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSB0YWJsZS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBlcnJvciA9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0Fjb25maWdQYWNrYWdlSW1wbC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9BY29uZmlnUGFja2FnZUltcGwuamF2YQppbmRleCBjMmJlZjMxLi42YmY0ZTA1IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0Fjb25maWdQYWNrYWdlSW1wbC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQWNvbmZpZ1BhY2thZ2VJbXBsLmphdmEKQEAgLTI1LDExMyArMjUsOTggQEAKICAgICBwcml2YXRlIEZsYWdUYWJsZSBtRmxhZ1RhYmxlOwogICAgIHByaXZhdGUgRmxhZ1ZhbHVlTGlzdCBtRmxhZ1ZhbHVlTGlzdDsKICAgICBwcml2YXRlIFBhY2thZ2VUYWJsZS5Ob2RlIG1QTm9kZTsKKyAgICBwcml2YXRlIGZpbmFsIGludCBtUGFja2FnZUlkOworICAgIHByaXZhdGUgZmluYWwgaW50IG1Cb29sZWFuU3RhcnRJbmRleDsKIAotICAgIC8qKiBAaGlkZSAqLwotICAgIHByaXZhdGUgQWNvbmZpZ1BhY2thZ2VJbXBsKCkge30KKyAgICBwcml2YXRlIEFjb25maWdQYWNrYWdlSW1wbCgKKyAgICAgICAgICAgIEZsYWdUYWJsZSBmbGFnVGFibGUsCisgICAgICAgICAgICBGbGFnVmFsdWVMaXN0IGZsYWdWYWx1ZUxpc3QsCisgICAgICAgICAgICBpbnQgcGFja2FnZUlkLAorICAgICAgICAgICAgaW50IGJvb2xlYW5TdGFydEluZGV4KSB7CisgICAgICAgIHRoaXMubUZsYWdUYWJsZSA9IGZsYWdUYWJsZTsKKyAgICAgICAgdGhpcy5tRmxhZ1ZhbHVlTGlzdCA9IGZsYWdWYWx1ZUxpc3Q7CisgICAgICAgIHRoaXMubVBhY2thZ2VJZCA9IHBhY2thZ2VJZDsKKyAgICAgICAgdGhpcy5tQm9vbGVhblN0YXJ0SW5kZXggPSBib29sZWFuU3RhcnRJbmRleDsKKyAgICB9CiAKLSAgICAvKiogQGhpZGUgKi8KICAgICBwdWJsaWMgc3RhdGljIEFjb25maWdQYWNrYWdlSW1wbCBsb2FkKFN0cmluZyBwYWNrYWdlTmFtZSwgU3RvcmFnZUZpbGVQcm92aWRlciBmaWxlUHJvdmlkZXIpIHsKLSAgICAgICAgQWNvbmZpZ1BhY2thZ2VJbXBsIGltcGwgPSBuZXcgQWNvbmZpZ1BhY2thZ2VJbXBsKCk7Ci0gICAgICAgIGltcGwuaW5pdChudWxsLCBwYWNrYWdlTmFtZSwgZmlsZVByb3ZpZGVyKTsKLSAgICAgICAgcmV0dXJuIGltcGw7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlICovCi0gICAgcHVibGljIHN0YXRpYyBBY29uZmlnUGFja2FnZUltcGwgbG9hZCgKLSAgICAgICAgICAgIFN0cmluZyBjb250YWluZXIsIFN0cmluZyBwYWNrYWdlTmFtZSwgU3RvcmFnZUZpbGVQcm92aWRlciBmaWxlUHJvdmlkZXIpIHsKLSAgICAgICAgaWYgKGNvbnRhaW5lciA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0NPTlRBSU5FUl9OT1RfRk9VTkQsCi0gICAgICAgICAgICAgICAgICAgICJjb250YWluZXIgbnVsbCBjYW5ub3QgYmUgZm91bmQgb24gdGhlIGRldmljZSIpOwotICAgICAgICB9Ci0gICAgICAgIEFjb25maWdQYWNrYWdlSW1wbCBpbXBsID0gbmV3IEFjb25maWdQYWNrYWdlSW1wbCgpOwotICAgICAgICBpbXBsLmluaXQoY29udGFpbmVyLCBwYWNrYWdlTmFtZSwgZmlsZVByb3ZpZGVyKTsKLSAgICAgICAgcmV0dXJuIGltcGw7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlICovCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbkZsYWdWYWx1ZShTdHJpbmcgZmxhZ05hbWUsIGJvb2xlYW4gZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIEZsYWdUYWJsZS5Ob2RlIGZOb2RlID0gbUZsYWdUYWJsZS5nZXQobVBOb2RlLmdldFBhY2thZ2VJZCgpLCBmbGFnTmFtZSk7Ci0gICAgICAgIC8vIG5vIHN1Y2ggZmxhZyBpbiB0aGlzIHBhY2thZ2UKLSAgICAgICAgaWYgKGZOb2RlID09IG51bGwpIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgICAgIGludCBpbmRleCA9IGZOb2RlLmdldEZsYWdJbmRleCgpICsgbVBOb2RlLmdldEJvb2xlYW5TdGFydEluZGV4KCk7Ci0gICAgICAgIHJldHVybiBtRmxhZ1ZhbHVlTGlzdC5nZXRCb29sZWFuKGluZGV4KTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuRmxhZ1ZhbHVlKGludCBpbmRleCkgewotICAgICAgICByZXR1cm4gbUZsYWdWYWx1ZUxpc3QuZ2V0Qm9vbGVhbihpbmRleCArIG1QTm9kZS5nZXRCb29sZWFuU3RhcnRJbmRleCgpKTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUgKi8KLSAgICBwdWJsaWMgbG9uZyBnZXRQYWNrYWdlRmluZ2VycHJpbnQoKSB7Ci0gICAgICAgIHJldHVybiBtUE5vZGUuZ2V0UGFja2FnZUZpbmdlcnByaW50KCk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlICovCi0gICAgcHVibGljIGJvb2xlYW4gaGFzUGFja2FnZUZpbmdlcnByaW50KCkgewotICAgICAgICByZXR1cm4gbVBOb2RlLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0KFN0cmluZyBjb250YWluZXJOYW1lLCBTdHJpbmcgcGFja2FnZU5hbWUsIFN0b3JhZ2VGaWxlUHJvdmlkZXIgZmlsZVByb3ZpZGVyKSB7CiAgICAgICAgIFN0cmljdE1vZGUuVGhyZWFkUG9saWN5IG9sZFBvbGljeSA9IFN0cmljdE1vZGUuYWxsb3dUaHJlYWREaXNrUmVhZHMoKTsKLSAgICAgICAgU3RyaW5nIGNvbnRhaW5lciA9IGNvbnRhaW5lck5hbWU7CisgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIHBOb2RlID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIGZvciBkZXZpY2VzIGRvbid0IGhhdmUgbmV3IHN0b3JhZ2UgZGlyZWN0bHkgcmV0dXJuCi0gICAgICAgICAgICBpZiAoIWZpbGVQcm92aWRlci5jb250YWluZXJGaWxlRXhpc3RzKG51bGwpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfU1RPUkFHRV9TWVNURU1fTk9UX0ZPVU5ELAotICAgICAgICAgICAgICAgICAgICAgICAgImFjb25maWcgc3RvcmFnZSBjYW5ub3QgYmUgZm91bmQgb24gdGhlIGRldmljZSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgcE5vZGUgPSBudWxsOwotCi0gICAgICAgICAgICBpZiAoY29udGFpbmVyID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZGV2aWNlIGhhcyBmbGFnIGZpbGVzIG9uIHRoZSBzeXN0ZW0gcGFydGl0aW9uLgotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkZXZpY2UgZG9lcywgc2VhcmNoIHRoZSBzeXN0ZW0gcGFydGl0aW9uIGZpcnN0LgotICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9ICJzeXN0ZW0iOwotICAgICAgICAgICAgICAgIGlmIChmaWxlUHJvdmlkZXIuY29udGFpbmVyRmlsZUV4aXN0cyhjb250YWluZXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBOb2RlID0gZmlsZVByb3ZpZGVyLmdldFBhY2thZ2VUYWJsZShjb250YWluZXIpLmdldChwYWNrYWdlTmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHBOb2RlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2VhcmNoIGFsbCBwYWNrYWdlIG1hcCBmaWxlcyBpZiBub3QgZm91bmQgaW4gdGhlIHN5c3RlbSBwYXJ0aXRpb24uCi0gICAgICAgICAgICAgICAgICAgIGZvciAoUGF0aCBwIDogZmlsZVByb3ZpZGVyLmxpc3RQYWNrYWdlTWFwRmlsZXMoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlIHBUYWJsZSA9IFN0b3JhZ2VGaWxlUHJvdmlkZXIuZ2V0UGFja2FnZVRhYmxlKHApOwotICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUgPSBwVGFibGUuZ2V0KHBhY2thZ2VOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwTm9kZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gcFRhYmxlLmdldEhlYWRlcigpLmdldENvbnRhaW5lcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIWZpbGVQcm92aWRlci5jb250YWluZXJGaWxlRXhpc3RzKGNvbnRhaW5lcikpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0NPTlRBSU5FUl9OT1RfRk9VTkQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRhaW5lciAiICsgY29udGFpbmVyICsgIiBjYW5ub3QgYmUgZm91bmQgb24gdGhlIGRldmljZSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwTm9kZSA9IGZpbGVQcm92aWRlci5nZXRQYWNrYWdlVGFibGUoY29udGFpbmVyKS5nZXQocGFja2FnZU5hbWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocE5vZGUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgY2FzZSBwYWNrYWdlIGlzIG5vdCBmb3VuZCBpbiBhbGwgY29udGFpbmVyLCByZXR1cm4gaW5zdGVhZCBvZiB0aHJvd2luZwotICAgICAgICAgICAgICAgIC8vIGVycm9yCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfUEFDS0FHRV9OT1RfRk9VTkQsCi0gICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcGFja2FnZU5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGluIGNvbnRhaW5lciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGFpbmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBjYW5ub3QgYmUgZm91bmQgb24gdGhlIGRldmljZSIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtRmxhZ1RhYmxlID0gZmlsZVByb3ZpZGVyLmdldEZsYWdUYWJsZShjb250YWluZXIpOwotICAgICAgICAgICAgbUZsYWdWYWx1ZUxpc3QgPSBmaWxlUHJvdmlkZXIuZ2V0RmxhZ1ZhbHVlTGlzdChjb250YWluZXIpOwotICAgICAgICAgICAgbVBOb2RlID0gcE5vZGU7CisgICAgICAgICAgICAvLyBGaXJzdCB0cnkgdG8gZmluZCB0aGUgcGFja2FnZSBpbiB0aGUgInN5c3RlbSIgY29udGFpbmVyLgorICAgICAgICAgICAgcE5vZGUgPSBmaWxlUHJvdmlkZXIuZ2V0UGFja2FnZVRhYmxlKCJzeXN0ZW0iKS5nZXQocGFja2FnZU5hbWUpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHBOb2RlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFjb25maWdQYWNrYWdlSW1wbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVQcm92aWRlci5nZXRGbGFnVGFibGUoInN5c3RlbSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVByb3ZpZGVyLmdldEZsYWdWYWx1ZUxpc3QoInN5c3RlbSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuZ2V0UGFja2FnZUlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5nZXRCb29sZWFuU3RhcnRJbmRleCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgbm90IGZvdW5kIGluICJzeXN0ZW0iLCBzZWFyY2ggYWxsIHBhY2thZ2UgbWFwIGZpbGVzLgorICAgICAgICAgICAgZm9yIChQYXRoIHAgOiBmaWxlUHJvdmlkZXIubGlzdFBhY2thZ2VNYXBGaWxlcygpKSB7CisgICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlIHBUYWJsZSA9IGZpbGVQcm92aWRlci5nZXRQYWNrYWdlVGFibGUocCk7CisgICAgICAgICAgICAgICAgcE5vZGUgPSBwVGFibGUuZ2V0KHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAocE5vZGUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFjb25maWdQYWNrYWdlSW1wbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlUHJvdmlkZXIuZ2V0RmxhZ1RhYmxlKHBUYWJsZS5nZXRIZWFkZXIoKS5nZXRDb250YWluZXIoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVByb3ZpZGVyLmdldEZsYWdWYWx1ZUxpc3QocFRhYmxlLmdldEhlYWRlcigpLmdldENvbnRhaW5lcigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5nZXRQYWNrYWdlSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5nZXRCb29sZWFuU3RhcnRJbmRleCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEFjb25maWdTdG9yYWdlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIENvbnNpZGVyIGxvZ2dpbmcgdGhlIGV4Y2VwdGlvbi4KICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBTdHJpY3RNb2RlLnNldFRocmVhZFBvbGljeShvbGRQb2xpY3kpOwogICAgICAgICB9CisgICAgICAgIC8vIFBhY2thZ2Ugbm90IGZvdW5kLgorICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfUEFDS0FHRV9OT1RfRk9VTkQsCisgICAgICAgICAgICAgICAgIlBhY2thZ2UgIiArIHBhY2thZ2VOYW1lICsgIiBub3QgZm91bmQuIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBBY29uZmlnUGFja2FnZUltcGwgbG9hZCgKKyAgICAgICAgICAgIFN0cmluZyBjb250YWluZXIsIFN0cmluZyBwYWNrYWdlTmFtZSwgU3RvcmFnZUZpbGVQcm92aWRlciBmaWxlUHJvdmlkZXIpIHsKKworICAgICAgICBTdHJpY3RNb2RlLlRocmVhZFBvbGljeSBvbGRQb2xpY3kgPSBTdHJpY3RNb2RlLmFsbG93VGhyZWFkRGlza1JlYWRzKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBwTm9kZSA9IGZpbGVQcm92aWRlci5nZXRQYWNrYWdlVGFibGUoY29udGFpbmVyKS5nZXQocGFja2FnZU5hbWUpOworICAgICAgICAgICAgaWYgKHBOb2RlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFjb25maWdQYWNrYWdlSW1wbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVQcm92aWRlci5nZXRGbGFnVGFibGUoY29udGFpbmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVQcm92aWRlci5nZXRGbGFnVmFsdWVMaXN0KGNvbnRhaW5lciksCisgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5nZXRQYWNrYWdlSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmdldEJvb2xlYW5TdGFydEluZGV4KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBDb25zaWRlciBsb2dnaW5nIHRoZSBleGNlcHRpb24uCisgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgU3RyaWN0TW9kZS5zZXRUaHJlYWRQb2xpY3kob2xkUG9saWN5KTsKKyAgICAgICAgfQorCisgICAgICAgIHRocm93IG5ldyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9QQUNLQUdFX05PVF9GT1VORCwKKyAgICAgICAgICAgICAgICAicGFja2FnZSAiCisgICAgICAgICAgICAgICAgICAgICAgICArIHBhY2thZ2VOYW1lCisgICAgICAgICAgICAgICAgICAgICAgICArICIgaW4gY29udGFpbmVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGFpbmVyCisgICAgICAgICAgICAgICAgICAgICAgICArICIgY2Fubm90IGJlIGZvdW5kIG9uIHRoZSBkZXZpY2UiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuRmxhZ1ZhbHVlKFN0cmluZyBmbGFnTmFtZSwgYm9vbGVhbiBkZWZhdWx0VmFsdWUpIHsKKyAgICAgICAgRmxhZ1RhYmxlLk5vZGUgZk5vZGUgPSBtRmxhZ1RhYmxlLmdldChtUGFja2FnZUlkLCBmbGFnTmFtZSk7CisgICAgICAgIGlmIChmTm9kZSA9PSBudWxsKSByZXR1cm4gZGVmYXVsdFZhbHVlOworICAgICAgICByZXR1cm4gbUZsYWdWYWx1ZUxpc3QuZ2V0Qm9vbGVhbihmTm9kZS5nZXRGbGFnSW5kZXgoKSArIG1Cb29sZWFuU3RhcnRJbmRleCk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbkZsYWdWYWx1ZShpbnQgaW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIG1GbGFnVmFsdWVMaXN0LmdldEJvb2xlYW4oaW5kZXggKyBtQm9vbGVhblN0YXJ0SW5kZXgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BbmRyb2lkLmJwCmluZGV4IGI4ZTUxMGQuLjZiODk0MmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQW5kcm9pZC5icApAQCAtMSwxMCArMSwxNCBAQAogZmlsZWdyb3VwIHsKICAgICBuYW1lOiAicmVhZF9hcGlfdGVzdF9zdG9yYWdlX2ZpbGVzIiwKICAgICBzcmNzOiBbCi0gICAgICAgICJkYXRhL3YxL3BhY2thZ2UubWFwIiwKLSAgICAgICAgImRhdGEvdjEvZmxhZy5tYXAiLAotICAgICAgICAiZGF0YS92MS9mbGFnLnZhbCIsCi0gICAgICAgICJkYXRhL3YxL2ZsYWcuaW5mbyIsCisgICAgICAgICJkYXRhL3YxL3BhY2thZ2VfdjEubWFwIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS5tYXAiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLnZhbCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEuaW5mbyIsCisgICAgICAgICJkYXRhL3YyL3BhY2thZ2VfdjIubWFwIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi5tYXAiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLnZhbCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIuaW5mbyIsCiAgICAgXSwKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnLmluZm8gYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEuaW5mbwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnLmluZm8KcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZy5tYXAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWcubWFwCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZy52YWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWcudmFsCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvcGFja2FnZS5tYXAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL3BhY2thZ2VfdjEubWFwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL3BhY2thZ2UubWFwCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL3BhY2thZ2VfdjEubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5pbmZvIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRiN2ZkZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5tYXAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNDY4NWMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi52YWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIudmFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZDQ3NTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIudmFsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvcGFja2FnZV92Mi5tYXAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL3BhY2thZ2VfdjIubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZjQwNTQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL3BhY2thZ2VfdjIubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQWNvbmZpZ1BhY2thZ2VJbXBsVGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BY29uZmlnUGFja2FnZUltcGxUZXN0LmphdmEKaW5kZXggMThmNzBlOC4uODBjMDk5NCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BY29uZmlnUGFja2FnZUltcGxUZXN0LmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BY29uZmlnUGFja2FnZUltcGxUZXN0LmphdmEKQEAgLTU3LDEzICs1NywxMyBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdExvYWRfZXJyb3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgQWNvbmZpZ1BhY2thZ2VJbXBsIHA7CisgICAgICAgIC8vIGNhbm5vdCBmaW5kIHBhY2thZ2UKICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24gZSA9CiAgICAgICAgICAgICAgICAgYXNzZXJ0VGhyb3dzKAogICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAoKSAtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnUGFja2FnZUltcGwubG9hZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9ja3VwIiwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEwIiwgcHIpKTsKLSAgICAgICAgLy8gY2Fubm90IGZpbmQgcGFja2FnZQogICAgICAgICBhc3NlcnRFcXVhbHMoQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfUEFDS0FHRV9OT1RfRk9VTkQsIGUuZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAvLyBjYW5ub3QgZmluZCBwYWNrYWdlCiAgICAgICAgIGUgPQpAQCAtNzgsMTQgKzc4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAoKSAtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnUGFja2FnZUltcGwubG9hZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsIHByKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9DT05UQUlORVJfTk9UX0ZPVU5ELCBlLmdldEVycm9yQ29kZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSwgZS5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgIGUgPQogICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKICAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLmNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1BhY2thZ2VJbXBsLmxvYWQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QiLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsIHByKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9DT05UQUlORVJfTk9UX0ZPVU5ELCBlLmdldEVycm9yQ29kZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSwgZS5nZXRFcnJvckNvZGUoKSk7CiAKICAgICAgICAgLy8gbmV3IHN0b3JhZ2UgZG9lc24ndCBleGlzdAogICAgICAgICBwciA9IG5ldyBTdG9yYWdlRmlsZVByb3ZpZGVyKCJmYWtlL3BhdGgvIiwgImZha2UvcGF0aC8iKTsKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgICAgICAgICBhc3NlcnRUaHJvd3MoCiAgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5jbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+IEFjb25maWdQYWNrYWdlSW1wbC5sb2FkKCJmYWtlX3BhY2thZ2UiLCBwcikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfU1RPUkFHRV9TWVNURU1fTk9UX0ZPVU5ELCBlLmdldEVycm9yQ29kZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX1BBQ0tBR0VfTk9UX0ZPVU5ELCBlLmdldEVycm9yQ29kZSgpKTsKIAogICAgICAgICAvLyBmaWxlIHJlYWQgaXNzdWUKICAgICAgICAgcHIgPSBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcihUZXN0RGF0YVV0aWxzLlRFU1REQVRBX1BBVEgsICJmYWtlL3BhdGgvIik7CkBAIC0xMjQsMTEgKzEyNCw0IEBACiAgICAgICAgIGFzc2VydFRydWUocC5nZXRCb29sZWFuRmxhZ1ZhbHVlKDEpKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShwLmdldEJvb2xlYW5GbGFnVmFsdWUoMikpOwogICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdEhhc1BhY2thZ2VGaW5nZXJwcmludCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBBY29uZmlnUGFja2FnZUltcGwgcCA9Ci0gICAgICAgICAgICAgICAgQWNvbmZpZ1BhY2thZ2VJbXBsLmxvYWQoIm1vY2t1cCIsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgcHIpOwotICAgICAgICBhc3NlcnRGYWxzZShwLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpKTsKLSAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWQuYnAKaW5kZXggOWM4ODEyMi4uMGRlMzRhNiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZC5icApAQCAtMjgsNyArMjgsNiBAQAogICAgIHRlYW06ICJ0cmVuZHlfdGVhbV9hbmRyb2lkX2NvcmVfZXhwZXJpbWVudHMiLAogICAgIHNyY3M6IFsKICAgICAgICAgIkFjb25maWdQYWNrYWdlSW1wbFRlc3QuamF2YSIsCi0gICAgICAgICJTdG9yYWdlRmlsZVByb3ZpZGVyVGVzdC5qYXZhIiwKICAgICAgICAgIlRlc3REYXRhVXRpbHMuamF2YSIsCiAgICAgXSwKICAgICBzdGF0aWNfbGliczogWwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkU3RvcmFnZUphdmVUZXN0LnhtbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZFN0b3JhZ2VKYXZlVGVzdC54bWwKaW5kZXggM2Q1YmI4ZS4uODYxYjliNSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkU3RvcmFnZUphdmVUZXN0LnhtbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWRTdG9yYWdlSmF2ZVRlc3QueG1sCkBAIC0yMSwxNCArMjEsMTQgQEAKICAgICA8L3RhcmdldF9wcmVwYXJlcj4KICAgICA8dGFyZ2V0X3ByZXBhcmVyIGNsYXNzPSJjb20uYW5kcm9pZC5jb21wYXRpYmlsaXR5LmNvbW1vbi50cmFkZWZlZC50YXJnZXRwcmVwLkZpbGVQdXNoZXIiPgogICAgICAgICA8b3B0aW9uIG5hbWU9ImNsZWFudXAiIHZhbHVlPSJ0cnVlIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJwYWNrYWdlLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9wYWNrYWdlL3Rlc3RkYXRhL21vY2t1cC5wYWNrYWdlLm1hcCIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZy5tYXAtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfcGFja2FnZS90ZXN0ZGF0YS9tb2NrdXAuZmxhZy5tYXAiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWcudmFsLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX3BhY2thZ2UvdGVzdGRhdGEvbW9ja3VwLnZhbCIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZy5pbmZvLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX3BhY2thZ2UvdGVzdGRhdGEvbW9ja3VwLmluZm8iIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9InBhY2thZ2VfdjEubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX3BhY2thZ2UvdGVzdGRhdGEvbW9ja3VwLnBhY2thZ2UubWFwIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YxLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9wYWNrYWdlL3Rlc3RkYXRhL21vY2t1cC5mbGFnLm1hcCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192MS52YWwtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfcGFja2FnZS90ZXN0ZGF0YS9tb2NrdXAudmFsIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YxLmluZm8tPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfcGFja2FnZS90ZXN0ZGF0YS9tb2NrdXAuaW5mbyIgLz4KICAgICAgICAgPG9wdGlvbiBuYW1lPSJwb3N0LXB1c2giIHZhbHVlPSJjaG1vZCArciAvZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX3BhY2thZ2UvdGVzdGRhdGEvIiAvPgogICAgIDwvdGFyZ2V0X3ByZXBhcmVyPgogICAgIDx0ZXN0IGNsYXNzPSJjb20uYW5kcm9pZC50cmFkZWZlZC50ZXN0dHlwZS5BbmRyb2lkSlVuaXRUZXN0IiA+CiAgICAgICAgIDxvcHRpb24gbmFtZT0icGFja2FnZSIgdmFsdWU9ImFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QiIC8+CiAgICAgICAgIDxvcHRpb24gbmFtZT0icnVudGltZS1oaW50IiB2YWx1ZT0iMW0iIC8+CiAgICAgPC90ZXN0PgotPC9jb25maWd1cmF0aW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZFRlc3QueG1sIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkVGVzdC54bWwKaW5kZXggOTljOWUyNS4uN2ZmYTE4YyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkVGVzdC54bWwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkVGVzdC54bWwKQEAgLTM1LDExICszNSwxMSBAQAogICAgIDx0YXJnZXRfcHJlcGFyZXIgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRhcmdldHByZXAuUHVzaEZpbGVQcmVwYXJlciI+CiAgICAgICAgIDxvcHRpb24gbmFtZT0iY2xlYW51cCIgdmFsdWU9InRydWUiIC8+CiAgICAgICAgIDxvcHRpb24gbmFtZT0iYWJvcnQtb24tcHVzaC1mYWlsdXJlIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoLWZpbGUiIGtleT0icGFja2FnZS5tYXAiCisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaC1maWxlIiBrZXk9InBhY2thZ2VfdjEubWFwIgogICAgICAgICAgICAgICAgIHZhbHVlPSIvZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19qYXZhX2FwaV90ZXN0L21hcHMvbW9ja3VwLnBhY2thZ2UubWFwIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2gtZmlsZSIga2V5PSJmbGFnLm1hcCIKKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoLWZpbGUiIGtleT0iZmxhZ192MS5tYXAiCiAgICAgICAgICAgICAgICAgdmFsdWU9Ii9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX2phdmFfYXBpX3Rlc3QvbWFwcy9tb2NrdXAuZmxhZy5tYXAiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaC1maWxlIiBrZXk9ImZsYWcudmFsIgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2gtZmlsZSIga2V5PSJmbGFnX3YxLnZhbCIKICAgICAgICAgICAgICAgICB2YWx1ZT0iL2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfamF2YV9hcGlfdGVzdC9ib290L21vY2t1cC52YWwiIC8+CiAgICAgPC90YXJnZXRfcHJlcGFyZXI+CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5jcHAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9zdG9yYWdlX3JlYWRfYXBpX3Rlc3QuY3BwCmluZGV4IDc1Mzc2NDMuLjUyODlmYWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5jcHAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvc3RvcmFnZV9yZWFkX2FwaV90ZXN0LmNwcApAQCAtNTYsMTAgKzU2LDEwIEBACiAgICAgZmxhZ19tYXAgPSBzdGQ6OnN0cmluZyhtYXBzX2RpcikgKyAiL21vY2t1cC5mbGFnLm1hcCI7CiAgICAgZmxhZ192YWwgPSBzdGQ6OnN0cmluZyhib290X2RpcikgKyAiL21vY2t1cC52YWwiOwogICAgIGZsYWdfaW5mbyA9IHN0ZDo6c3RyaW5nKGJvb3RfZGlyKSArICIvbW9ja3VwLmluZm8iOwotICAgIGNvcHlfZmlsZSh0ZXN0X2RpciArICIvcGFja2FnZS5tYXAiLCBwYWNrYWdlX21hcCk7Ci0gICAgY29weV9maWxlKHRlc3RfZGlyICsgIi9mbGFnLm1hcCIsIGZsYWdfbWFwKTsKLSAgICBjb3B5X2ZpbGUodGVzdF9kaXIgKyAiL2ZsYWcudmFsIiwgZmxhZ192YWwpOwotICAgIGNvcHlfZmlsZSh0ZXN0X2RpciArICIvZmxhZy5pbmZvIiwgZmxhZ19pbmZvKTsKKyAgICBjb3B5X2ZpbGUodGVzdF9kaXIgKyAiL3BhY2thZ2VfdjEubWFwIiwgcGFja2FnZV9tYXApOworICAgIGNvcHlfZmlsZSh0ZXN0X2RpciArICIvZmxhZ192MS5tYXAiLCBmbGFnX21hcCk7CisgICAgY29weV9maWxlKHRlc3RfZGlyICsgIi9mbGFnX3YxLnZhbCIsIGZsYWdfdmFsKTsKKyAgICBjb3B5X2ZpbGUodGVzdF9kaXIgKyAiL2ZsYWdfdjEuaW5mbyIsIGZsYWdfaW5mbyk7CiAgIH0KIAogICB2b2lkIFRlYXJEb3duKCkgb3ZlcnJpZGUgewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvc3RvcmFnZV9yZWFkX2FwaV90ZXN0LnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvc3RvcmFnZV9yZWFkX2FwaV90ZXN0LnJzCmluZGV4IDBkOTQzZjguLjU2MDVhNDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9zdG9yYWdlX3JlYWRfYXBpX3Rlc3QucnMKQEAgLTksNyArOSw3IEBACiAgICAgdXNlIHJhbmQ6OlJuZzsKICAgICB1c2Ugc3RkOjpmczsKIAotICAgIGZuIGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoKSAtPiBTdHJpbmcgeworICAgIGZuIGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXModmVyc2lvbjogdTMyKSAtPiBTdHJpbmcgewogICAgICAgICBsZXQgbXV0IHJuZyA9IHJhbmQ6OnRocmVhZF9ybmcoKTsKICAgICAgICAgbGV0IG51bWJlcjogdTMyID0gcm5nLmdlbigpOwogICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBTdHJpbmc6OmZyb20oIi90bXAvIikgKyAmbnVtYmVyLnRvX3N0cmluZygpOwpAQCAtMjYsMTcgKzI2LDE3IEBACiAgICAgICAgIGxldCBmbGFnX21hcCA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL21hcHMvbW9ja3VwLmZsYWcubWFwIjsKICAgICAgICAgbGV0IGZsYWdfdmFsID0gc3RvcmFnZV9kaXIuY2xvbmUoKSArICIvYm9vdC9tb2NrdXAudmFsIjsKICAgICAgICAgbGV0IGZsYWdfaW5mbyA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL2Jvb3QvbW9ja3VwLmluZm8iOwotICAgICAgICBmczo6Y29weSgiLi9kYXRhL3YxL3BhY2thZ2UubWFwIiwgcGFja2FnZV9tYXApLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi9kYXRhL3YxL2ZsYWcubWFwIiwgZmxhZ19tYXApLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi9kYXRhL3YxL2ZsYWcudmFsIiwgZmxhZ192YWwpLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi9kYXRhL3YxL2ZsYWcuaW5mbyIsIGZsYWdfaW5mbykudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KGZvcm1hdCEoIi4vZGF0YS92ezB9L3BhY2thZ2VfdnswfS5tYXAiLCB2ZXJzaW9uKSwgcGFja2FnZV9tYXApLnVud3JhcCgpOworICAgICAgICBmczo6Y29weShmb3JtYXQhKCIuL2RhdGEvdnswfS9mbGFnX3Z7MH0ubWFwIiwgdmVyc2lvbiksIGZsYWdfbWFwKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoZm9ybWF0ISgiLi9kYXRhL3Z7fS9mbGFnX3Z7MH0udmFsIiwgdmVyc2lvbiksIGZsYWdfdmFsKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoZm9ybWF0ISgiLi9kYXRhL3Z7fS9mbGFnX3Z7MH0uaW5mbyIsIHZlcnNpb24pLCBmbGFnX2luZm8pLnVud3JhcCgpOwogCiAgICAgICAgIHN0b3JhZ2VfZGlyCiAgICAgfQogCiAgICAgI1t0ZXN0XQotICAgIGZuIHRlc3RfdW5hdmFpbGFibGVfc3RvYXJnZSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgIGZuIHRlc3RfdW5hdmFpbGFibGVfc3RvcmFnZSgpIHsKKyAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygxKTsKICAgICAgICAgLy8gU0FGRVRZOgogICAgICAgICAvLyBUaGUgc2FmZXR5IGhlcmUgaXMgZW5zdXJlZCBhcyB0aGUgdGVzdCBwcm9jZXNzIHdpbGwgbm90IHdyaXRlIHRvIHRlbXAgc3RvcmFnZSBmaWxlCiAgICAgICAgIGxldCBlcnIgPSB1bnNhZmUgewpAQCAtNTMsNyArNTMsNyBAQAogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfcGFja2FnZV9jb250ZXh0X3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgcGFja2FnZV9tYXBwZWRfZmlsZSA9IHVuc2FmZSB7CkBAIC04NCw3ICs4NCw3IEBACiAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9ub25lX2V4aXN0X3BhY2thZ2VfY29udGV4dF9xdWVyeSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKDEpOwogICAgICAgICAvLyBTQUZFVFk6CiAgICAgICAgIC8vIFRoZSBzYWZldHkgaGVyZSBpcyBlbnN1cmVkIGFzIHRoZSB0ZXN0IHByb2Nlc3Mgd2lsbCBub3Qgd3JpdGUgdG8gdGVtcCBzdG9yYWdlIGZpbGUKICAgICAgICAgbGV0IHBhY2thZ2VfbWFwcGVkX2ZpbGUgPSB1bnNhZmUgewpAQCAtOTksNyArOTksNyBAQAogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfZmxhZ19jb250ZXh0X3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ19tYXBwZWRfZmlsZSA9CkBAIC0xMjUsNyArMTI1LDcgQEAKIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X25vbmVfZXhpc3RfZmxhZ19jb250ZXh0X3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ19tYXBwZWRfZmlsZSA9CkBAIC0xNDEsNyArMTQxLDcgQEAKIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2Jvb2xlYW5fZmxhZ192YWx1ZV9xdWVyeSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKDEpOwogICAgICAgICAvLyBTQUZFVFk6CiAgICAgICAgIC8vIFRoZSBzYWZldHkgaGVyZSBpcyBlbnN1cmVkIGFzIHRoZSB0ZXN0IHByb2Nlc3Mgd2lsbCBub3Qgd3JpdGUgdG8gdGVtcCBzdG9yYWdlIGZpbGUKICAgICAgICAgbGV0IGZsYWdfdmFsdWVfZmlsZSA9CkBAIC0xNTUsNyArMTU1LDcgQEAKIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2ludmFsaWRfYm9vbGVhbl9mbGFnX3ZhbHVlX3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ192YWx1ZV9maWxlID0KQEAgLTE2OSw3ICsxNjksNyBAQAogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfZmxhZ19pbmZvX3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ19pbmZvX2ZpbGUgPQpAQCAtMTg2LDcgKzE4Niw3IEBACiAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9pbnZhbGlkX2Jvb2xlYW5fZmxhZ19pbmZvX3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ19pbmZvX2ZpbGUgPQpAQCAtMTk5LDEwICsxOTksMTggQEAKICAgICB9CiAKICAgICAjW3Rlc3RdCi0gICAgZm4gdGVzdF9zdG9yYWdlX3ZlcnNpb25fcXVlcnkoKSB7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvcGFja2FnZS5tYXAiKS51bndyYXAoKSwgMSk7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvZmxhZy5tYXAiKS51bndyYXAoKSwgMSk7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvZmxhZy52YWwiKS51bndyYXAoKSwgMSk7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvZmxhZy5pbmZvIikudW53cmFwKCksIDEpOworICAgIGZuIHRlc3Rfc3RvcmFnZV92ZXJzaW9uX3F1ZXJ5X3YxKCkgeworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9kYXRhL3YxL3BhY2thZ2VfdjEubWFwIikudW53cmFwKCksIDEpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9kYXRhL3YxL2ZsYWdfdjEubWFwIikudW53cmFwKCksIDEpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9kYXRhL3YxL2ZsYWdfdjEudmFsIikudW53cmFwKCksIDEpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9kYXRhL3YxL2ZsYWdfdjEuaW5mbyIpLnVud3JhcCgpLCAxKTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9zdG9yYWdlX3ZlcnNpb25fcXVlcnlfdjIoKSB7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjIvcGFja2FnZV92Mi5tYXAiKS51bndyYXAoKSwgMik7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjIvZmxhZ192Mi5tYXAiKS51bndyYXAoKSwgMik7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjIvZmxhZ192Mi52YWwiKS51bndyYXAoKSwgMik7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjIvZmxhZ192Mi5pbmZvIikudW53cmFwKCksIDIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ19pbmZvX3VwZGF0ZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ19pbmZvX3VwZGF0ZS5ycwppbmRleCA1NjQwOTIyLi41NzIxMTA1IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2ZsYWdfaW5mb191cGRhdGUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL3NyYy9mbGFnX2luZm9fdXBkYXRlLnJzCkBAIC05NCwxMyArOTQsMTMgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdDsKKyAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6Ont0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCwgREVGQVVMVF9GSUxFX1ZFUlNJT059OwogICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGk6OmZsYWdfaW5mb19xdWVyeTo6ZmluZF9mbGFnX2F0dHJpYnV0ZTsKIAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBoYXMgc2VydmVyIG92ZXJyaWRlIHVwZGF0ZQogICAgIGZuIHRlc3RfdXBkYXRlX2ZsYWdfaGFzX3NlcnZlcl9vdmVycmlkZSgpIHsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKTsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBsZXQgbXV0IGJ1ZiA9IGZsYWdfaW5mb19saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgZm9yIGkgaW4gMC4uZmxhZ19pbmZvX2xpc3QuaGVhZGVyLm51bV9mbGFncyB7CiAgICAgICAgICAgICB1cGRhdGVfZmxhZ19oYXNfc2VydmVyX292ZXJyaWRlKCZtdXQgYnVmLCBGbGFnVmFsdWVUeXBlOjpCb29sZWFuLCBpLCB0cnVlKS51bndyYXAoKTsKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBoYXMgbG9jYWwgb3ZlcnJpZGUgdXBkYXRlCiAgICAgZm4gdGVzdF91cGRhdGVfZmxhZ19oYXNfbG9jYWxfb3ZlcnJpZGUoKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgbGV0IG11dCBidWYgPSBmbGFnX2luZm9fbGlzdC5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGZvciBpIGluIDAuLmZsYWdfaW5mb19saXN0LmhlYWRlci5udW1fZmxhZ3MgewogICAgICAgICAgICAgdXBkYXRlX2ZsYWdfaGFzX2xvY2FsX292ZXJyaWRlKCZtdXQgYnVmLCBGbGFnVmFsdWVUeXBlOjpCb29sZWFuLCBpLCB0cnVlKS51bndyYXAoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ192YWx1ZV91cGRhdGUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2ZsYWdfdmFsdWVfdXBkYXRlLnJzCmluZGV4IDA2YTliMTUuLjk3NzJkYjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ192YWx1ZV91cGRhdGUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL3NyYy9mbGFnX3ZhbHVlX3VwZGF0ZS5ycwpAQCAtNDksMTIgKzQ5LDEyIEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0OworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e3Rlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCwgREVGQVVMVF9GSUxFX1ZFUlNJT059OwogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZsYWcgdmFsdWUgdXBkYXRlCiAgICAgZm4gdGVzdF9ib29sZWFuX2ZsYWdfdmFsdWVfdXBkYXRlKCkgewotICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCk7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBsZXQgdmFsdWVfb2Zmc2V0ID0gZmxhZ192YWx1ZV9saXN0LmhlYWRlci5ib29sZWFuX3ZhbHVlX29mZnNldDsKICAgICAgICAgbGV0IG11dCBjb250ZW50ID0gZmxhZ192YWx1ZV9saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IHRydWVfYnl0ZSA9IHU4Ojpmcm9tKHRydWUpLnRvX2xlX2J5dGVzKClbMF07CkBAIC03Miw3ICs3Miw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHVwZGF0ZSBiZXlvbmQgdGhlIGVuZCBvZiBib29sZWFuIHNlY3Rpb24KICAgICBmbiB0ZXN0X2Jvb2xlYW5fb3V0X29mX3JhbmdlKCkgewotICAgICAgICBsZXQgbXV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IG11dCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGVycm9yID0gdXBkYXRlX2Jvb2xlYW5fZmxhZ192YWx1ZSgmbXV0IGZsYWdfdmFsdWVfbGlzdFsuLl0sIDgsIHRydWUpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKICAgICAgICAgICAgIGZvcm1hdCEoIns6P30iLCBlcnJvciksCkBAIC04Myw3ICs4Myw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGVycm9yIHdoZW4gZmlsZSBoYXMgYSBoaWdoZXIgdmVyc2lvbgogICAgIGZuIHRlc3RfaGlnaGVyX3ZlcnNpb25fc3RvcmFnZV9maWxlKCkgewotICAgICAgICBsZXQgbXV0IHZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKTsKKyAgICAgICAgbGV0IG11dCB2YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgdmFsdWVfbGlzdC5oZWFkZXIudmVyc2lvbiA9IE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OICsgMTsKICAgICAgICAgbGV0IG11dCBmbGFnX3ZhbHVlID0gdmFsdWVfbGlzdC5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBlcnJvciA9IHVwZGF0ZV9ib29sZWFuX2ZsYWdfdmFsdWUoJm11dCBmbGFnX3ZhbHVlWy4uXSwgNCwgdHJ1ZSkudW53cmFwX2VycigpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL2Fjb25maWdfc3RvcmFnZV9zb3VyY2UucnMgYi90b29scy9hY29uZmlnL2FmbGFncy9zcmMvYWNvbmZpZ19zdG9yYWdlX3NvdXJjZS5ycwppbmRleCA2OGVkZjdkLi4zZjU5M2ZlIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2FmbGFncy9zcmMvYWNvbmZpZ19zdG9yYWdlX3NvdXJjZS5ycworKysgYi90b29scy9hY29uZmlnL2FmbGFncy9zcmMvYWNvbmZpZ19zdG9yYWdlX3NvdXJjZS5ycwpAQCAtOTMsNyArOTMsMTIgQEAKICAgICAgICAgc3BlY2lhbF9maWVsZHM6IFNwZWNpYWxGaWVsZHM6Om5ldygpLAogICAgIH07CiAKLSAgICBsZXQgbXV0IHNvY2tldCA9IFVuaXhTdHJlYW06OmNvbm5lY3QoIi9kZXYvc29ja2V0L2Fjb25maWdkIik/OworICAgIGxldCBzb2NrZXRfbmFtZSA9IGlmIGFjb25maWdfZmxhZ3M6OmF1dG9fZ2VuZXJhdGVkOjplbmFibGVfc3lzdGVtX2Fjb25maWdkX3J1c3QoKSB7CisgICAgICAgICIvZGV2L3NvY2tldC9hY29uZmlnZF9zeXN0ZW0iCisgICAgfSBlbHNlIHsKKyAgICAgICAgIi9kZXYvc29ja2V0L2Fjb25maWdkIgorICAgIH07CisgICAgbGV0IG11dCBzb2NrZXQgPSBVbml4U3RyZWFtOjpjb25uZWN0KHNvY2tldF9uYW1lKT87CiAKICAgICBsZXQgbWVzc2FnZV9idWZmZXIgPSBtZXNzYWdlcy53cml0ZV90b19ieXRlcygpPzsKICAgICBsZXQgbXV0IG1lc3NhZ2VfbGVuZ3RoX2J1ZmZlcjogW3U4OyA0XSA9IFswOyA0XTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci9kYWVtb25fbWFuYWdlci5weSBiL3Rvb2xzL2VkaXRfbW9uaXRvci9kYWVtb25fbWFuYWdlci5weQppbmRleCAyNzc1YjU4Li5hZmRlZmM1IDEwMDY0NAotLS0gYS90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXIucHkKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyLnB5CkBAIC04Myw3ICs4Myw3IEBACiAgICAgaWYgbm90IHV0aWxzLmlzX2ZlYXR1cmVfZW5hYmxlZCgKICAgICAgICAgImVkaXRfbW9uaXRvciIsCiAgICAgICAgIHNlbGYudXNlcl9uYW1lLAotICAgICAgICAiRU5BQkxFX0VESVRfTU9OSVRPUiIsCisgICAgICAgICJFTkFCTEVfQU5EUk9JRF9FRElUX01PTklUT1IiLAogICAgICAgICAxMCwKICAgICApOgogICAgICAgbG9nZ2luZy53YXJuaW5nKCJFZGl0IG1vbml0b3IgaXMgZGlzYWJsZWQsIGV4aXRpbmcuLi4iKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyX3Rlc3QucHkgYi90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXJfdGVzdC5weQppbmRleCA0MDdkOTRlLi44ZDE4Mzg4IDEwMDY0NAotLS0gYS90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXJfdGVzdC5weQorKysgYi90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXJfdGVzdC5weQpAQCAtODEsNyArODEsOCBAQAogICAgICMgU2V0cyB0aGUgdGVtcGRpciB1bmRlciB0aGUgd29ya2luZyBkaXIgc28gYW55IHRlbXAgZmlsZXMgY3JlYXRlZCBkdXJpbmcKICAgICAjIHRlc3RzIHdpbGwgYmUgY2xlYW5lZC4KICAgICB0ZW1wZmlsZS50ZW1wZGlyID0gc2VsZi53b3JraW5nX2Rpci5uYW1lCi0gICAgc2VsZi5wYXRjaCA9IG1vY2sucGF0Y2guZGljdChvcy5lbnZpcm9uLCB7J0VOQUJMRV9FRElUX01PTklUT1InOiAndHJ1ZSd9KQorICAgIHNlbGYucGF0Y2ggPSBtb2NrLnBhdGNoLmRpY3QoCisgICAgICAgIG9zLmVudmlyb24sIHsnRU5BQkxFX0FORFJPSURfRURJVF9NT05JVE9SJzogJ3RydWUnfSkKICAgICBzZWxmLnBhdGNoLnN0YXJ0KCkKIAogICBkZWYgdGVhckRvd24oc2VsZik6CkBAIC0xMzYsNyArMTM3LDcgQEAKICAgICAjIFZlcmlmeSBubyBkYWVtb24gcHJvY2VzcyBpcyBzdGFydGVkLgogICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRtLmRhZW1vbl9wcm9jZXNzKQogCi0gIEBtb2NrLnBhdGNoLmRpY3Qob3MuZW52aXJvbiwgeydFTkFCTEVfRURJVF9NT05JVE9SJzogJ2ZhbHNlJ30sIGNsZWFyPVRydWUpCisgIEBtb2NrLnBhdGNoLmRpY3Qob3MuZW52aXJvbiwgeydFTkFCTEVfQU5EUk9JRF9FRElUX01PTklUT1InOiAnZmFsc2UnfSwgY2xlYXI9VHJ1ZSkKICAgZGVmIHRlc3Rfc3RhcnRfcmV0dXJuX2RpcmVjdGx5X2lmX2Rpc2FibGVkKHNlbGYpOgogICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcihURVNUX0JJTkFSWV9GSUxFKQogICAgIGRtLnN0YXJ0KCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci9lZGl0X21vbml0b3JfaW50ZWdyYXRpb25fdGVzdC5weSBiL3Rvb2xzL2VkaXRfbW9uaXRvci9lZGl0X21vbml0b3JfaW50ZWdyYXRpb25fdGVzdC5weQppbmRleCA1ZjNkN2U1Li4zZDI4Mjc0IDEwMDY0NAotLS0gYS90b29scy9lZGl0X21vbml0b3IvZWRpdF9tb25pdG9yX2ludGVncmF0aW9uX3Rlc3QucHkKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL2VkaXRfbW9uaXRvcl9pbnRlZ3JhdGlvbl90ZXN0LnB5CkBAIC00OCw3ICs0OCw4IEBACiAgICAgKQogICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGgubWtkaXIoKQogICAgIHNlbGYuZWRpdF9tb25pdG9yX2JpbmFyeV9wYXRoID0gc2VsZi5faW1wb3J0X2V4ZWN1dGFibGUoImVkaXRfbW9uaXRvciIpCi0gICAgc2VsZi5wYXRjaCA9IG1vY2sucGF0Y2guZGljdChvcy5lbnZpcm9uLCB7J0VOQUJMRV9FRElUX01PTklUT1InOiAndHJ1ZSd9KQorICAgIHNlbGYucGF0Y2ggPSBtb2NrLnBhdGNoLmRpY3QoCisgICAgICAgIG9zLmVudmlyb24sIHsnRU5BQkxFX0FORFJPSURfRURJVF9NT05JVE9SJzogJ3RydWUnfSkKICAgICBzZWxmLnBhdGNoLnN0YXJ0KCkKIAogICBkZWYgdGVhckRvd24oc2VsZik6CmRpZmYgLS1naXQgYS90b29scy9maWxlbGlzdGRpZmYvZmlsZV9saXN0X2RpZmYucHkgYi90b29scy9maWxlbGlzdGRpZmYvZmlsZV9saXN0X2RpZmYucHkKaW5kZXggZmJiZmVkZi4uYTY0MDhlOCAxMDA2NDQKLS0tIGEvdG9vbHMvZmlsZWxpc3RkaWZmL2ZpbGVfbGlzdF9kaWZmLnB5CisrKyBiL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9maWxlX2xpc3RfZGlmZi5weQpAQCAtNzYsNyArNzYsNyBAQAogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2thdGlfaW5zdGFsbGVkX2ZpbGVfbGlzdCcpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnc29vbmdfaW5zdGFsbGVkX2ZpbGVfbGlzdCcpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnc3lzdGVtX21vZHVsZV9uYW1lJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWFsbG93bGlzdHMnLCBuYXJncz0nKycpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1hbGxvd2xpc3RzJywgbmFyZ3M9JyonLCBkZWZhdWx0PVtdKQogICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAKICAgICBmaW5kX3VuaXF1ZV9pdGVtcyhhcmdzLmthdGlfaW5zdGFsbGVkX2ZpbGVfbGlzdCwgYXJncy5zb29uZ19pbnN0YWxsZWRfZmlsZV9saXN0LCBhcmdzLnN5c3RlbV9tb2R1bGVfbmFtZSwgYXJncy5hbGxvd2xpc3RzKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9pZGVfcXVlcnkub3V0IGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2lkZV9xdWVyeS5vdXQKaW5kZXggY2Q3Y2U2ZC4uYmU0OGRhMSAxMDA2NDQKLS0tIGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2lkZV9xdWVyeS5vdXQKKysrIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2lkZV9xdWVyeS5vdXQKQEAgLTEsNyArMSw5IEBACiAKLQNvdXQSlmEKLThidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYxo4cHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2L2NsYW5nLXI1MjI4MTcvYmluL2NsYW5nKysaBy1tdGh1bWIaAy1PcxoULWZvbWl0LWZyYW1lLXBvaW50ZXIaBi1tbGx2bRoZLWVuYWJsZS1zaHJpbmstd3JhcD1mYWxzZRoDLU8yGgUtV2FsbBoHLVdleHRyYRoLLVdpbml0LXNlbGYaDy1XcG9pbnRlci1hcml0aBoYLVd1bmd1YXJkZWQtYXZhaWxhYmlsaXR5GhEtV2Vycm9yPWRhdGUtdGltZRoWLVdlcnJvcj1pbnQtY29udmVyc2lvbhoTLVdlcnJvcj1wcmFnbWEtcGFjaxomLVdlcnJvcj1wcmFnbWEtcGFjay1zdXNwaWNpb3VzLWluY2x1ZGUaGC1XZXJyb3I9c2l6ZW9mLWFycmF5LWRpdhoXLVdlcnJvcj1zdHJpbmctcGx1cy1pbnQaJy1XZXJyb3I9dW5yZWFjaGFibGUtY29kZS1sb29wLWluY3JlbWVudBoiLVduby1lcnJvcj1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucxoTLVduby1jOTktZGVzaWduYXRvchoZLVduby1nbnUtZm9sZGluZy1jb25zdGFudBoiLVduby1pbmNvbnNpc3RlbnQtbWlzc2luZy1vdmVycmlkZRocLVduby1lcnJvcj1yZW9yZGVyLWluaXQtbGlzdBoWLVduby1yZW9yZGVyLWluaXQtbGlzdBoRLVduby1zaWduLWNvbXBhcmUaCy1Xbm8tdW51c2VkGgktREFORFJPSUQaCC1ETkRFQlVHGgctVURFQlVHGigtRF9fY29tcGlsZXJfb2Zmc2V0b2Y9X19idWlsdGluX29mZnNldG9mGiotRF9fQU5EUk9JRF9VTkFWQUlMQUJMRV9TWU1CT0xTX0FSRV9XRUFLX18aCS1mYWRkcnNpZxoZLWZkZWJ1Zy1kZWZhdWx0LXZlcnNpb249NRoTLWZjb2xvci1kaWFnbm9zdGljcxoRLWZmcC1jb250cmFjdD1vZmYaDy1mbm8tZXhjZXB0aW9ucxoULWZuby1zdHJpY3QtYWxpYXNpbmcaEi1mbWVzc2FnZS1sZW5ndGg9MBojLWZuby1yZWxheGVkLXRlbXBsYXRlLXRlbXBsYXRlLWFyZ3MaFy1nc2ltcGxlLXRlbXBsYXRlLW5hbWVzGggtZ3o9enN0ZBoWLW5vLWNhbm9uaWNhbC1wcmVmaXhlcxoRLVduby1lcnJvcj1mb3JtYXQaIi1mZGVidWctcHJlZml4LW1hcD0vcHJvYy9zZWxmL2N3ZD0aHC1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8aAi1nGhMtZmZ1bmN0aW9uLXNlY3Rpb25zGg8tZmRhdGEtc2VjdGlvbnMaEC1mbm8tc2hvcnQtZW51bXMaDy1mdW53aW5kLXRhYmxlcxoYLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nGhEtV2EsLS1ub2V4ZWNzdGFjaxoTLURfRk9SVElGWV9TT1VSQ0U9MhoTLVdzdHJpY3QtYWxpYXNpbmc9MhoTLVdlcnJvcj1yZXR1cm4tdHlwZRoYLVdlcnJvcj1ub24tdmlydHVhbC1kdG9yGg8tV2Vycm9yPWFkZHJlc3MaFi1XZXJyb3I9c2VxdWVuY2UtcG9pbnQaFy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5Ggwtbm9zdGRsaWJpbmMaGi1mZGVidWctaW5mby1mb3ItcHJvZmlsaW5nGgwtbXNvZnQtZmxvYXQaDi1tYXJjaD1hcm12Ny1hGhItbWZsb2F0LWFiaT1zb2Z0ZnAaCi0tbWZwdT1uZW9uGi8tSWJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcBqzAS1Jb3V0L3Nvb25nLy5pbnRlcm1lZGlhdGVzL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9pZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2NjL2FuZHJvaWRfYXJtX2FybXY3LWEtbmVvbi9nZW4vcHJvdG8vYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwGoUBLUlvdXQvc29vbmcvLmludGVybWVkaWF0ZXMvYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2lkZV9xdWVyeV9wcm9iZXJzY3JpcHRfY2MvYW5kcm9pZF9hcm1fYXJtdjctYS1uZW9uL2dlbi9wcm90bxoULURfX0xJQkNfQVBJX189MTAwMDAaFC1EX19MSUJNX0FQSV9fPTEwMDAwGhUtRF9fTElCRExfQVBJX189MTAwMDAaFy1JZXh0ZXJuYWwvcHJvdG9idWYvc3JjGlktSXByZWJ1aWx0cy9jbGFuZy9ob3N0L2xpbnV4LXg4Ni9jbGFuZy1yNTIyODE3L2FuZHJvaWRfbGliYysrL3BsYXRmb3JtL2FybS9pbmNsdWRlL2MrKy92MRo9LUlwcmVidWlsdHMvY2xhbmcvaG9zdC9saW51eC14ODYvY2xhbmctcjUyMjgxNy9pbmNsdWRlL2MrKy92MRogLUliaW9uaWMvbGliYy9hc3luY19zYWZlL2luY2x1ZGUaHy1Jc3lzdGVtL2xvZ2dpbmcvbGlibG9nL2luY2x1ZGUaJy1JYmlvbmljL2xpYmMvc3lzdGVtX3Byb3BlcnRpZXMvaW5jbHVkZRo8LUlzeXN0ZW0vY29yZS9wcm9wZXJ0eV9zZXJ2aWNlL2xpYnByb3BlcnR5aW5mb3BhcnNlci9pbmNsdWRlGggtaXN5c3RlbRoTYmlvbmljL2xpYmMvaW5jbHVkZRoILWlzeXN0ZW0aH2Jpb25pYy9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0aCC1pc3lzdGVtGhdiaW9uaWMvbGliYy9rZXJuZWwvdWFwaRoILWlzeXN0ZW0aH2Jpb25pYy9saWJjL2tlcm5lbC9hbmRyb2lkL3Njc2kaCC1pc3lzdGVtGh9iaW9uaWMvbGliYy9rZXJuZWwvYW5kcm9pZC91YXBpGgctdGFyZ2V0Gh1hcm12N2EtbGludXgtYW5kcm9pZGVhYmkxMDAwMBoQLURBTkRST0lEX1NUUklDVBoFLWZQSUUaBy1XZXJyb3IaFS1Xbm8tdW51c2VkLXBhcmFtZXRlchoZLURHT09HTEVfUFJPVE9CVUZfTk9fUlRUSRoWLVdpbXBsaWNpdC1mYWxsdGhyb3VnaBoqLURfTElCQ1BQX0VOQUJMRV9USFJFQURfU0FGRVRZX0FOTk9UQVRJT05TGhUtV25vLWdudS1pbmNsdWRlLW5leHQaGy1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbhoGLW1sbHZtGhktZW5hYmxlLXNocmluay13cmFwPWZhbHNlGgwtc3RkPWdudSsrMjAaCS1mbm8tcnR0aRoVLUlzeXN0ZW0vY29yZS9pbmNsdWRlGh8tSXN5c3RlbS9sb2dnaW5nL2xpYmxvZy9pbmNsdWRlGhwtSXN5c3RlbS9tZWRpYS9hdWRpby9pbmNsdWRlGh4tSWhhcmR3YXJlL2xpYmhhcmR3YXJlL2luY2x1ZGUaJS1JaGFyZHdhcmUvbGliaGFyZHdhcmVfbGVnYWN5L2luY2x1ZGUaFi1JaGFyZHdhcmUvcmlsL2luY2x1ZGUaGy1JZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZRoiLUlmcmFtZXdvcmtzL25hdGl2ZS9vcGVuZ2wvaW5jbHVkZRoXLUlmcmFtZXdvcmtzL2F2L2luY2x1ZGUaFi1XZXJyb3I9Ym9vbC1vcGVyYXRpb24aIC1XZXJyb3I9Zm9ybWF0LWluc3VmZmljaWVudC1hcmdzGiUtV2Vycm9yPWltcGxpY2l0LWludC1mbG9hdC1jb252ZXJzaW9uGhstV2Vycm9yPWludC1pbi1ib29sLWNvbnRleHQaGy1XZXJyb3I9aW50LXRvLXBvaW50ZXItY2FzdBobLVdlcnJvcj1wb2ludGVyLXRvLWludC1jYXN0GhctV2Vycm9yPXhvci11c2VkLWFzLXBvdxoeLVduby12b2lkLXBvaW50ZXItdG8tZW51bS1jYXN0Gh0tV25vLXZvaWQtcG9pbnRlci10by1pbnQtY2FzdBoYLVduby1wb2ludGVyLXRvLWludC1jYXN0GhYtV2Vycm9yPWZvcnRpZnktc291cmNlGhQtV25vLXVudXNlZC12YXJpYWJsZRofLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycxoTLVduby1wYWNrZWQtbm9uLXBvZBocLVdlcnJvcj1hZGRyZXNzLW9mLXRlbXBvcmFyeRorLVdlcnJvcj1pbmNvbXBhdGlibGUtZnVuY3Rpb24tcG9pbnRlci10eXBlcxoYLVdlcnJvcj1udWxsLWRlcmVmZXJlbmNlGhMtV2Vycm9yPXJldHVybi10eXBlGiItV25vLXRhdXRvbG9naWNhbC1jb25zdGFudC1jb21wYXJlGiQtV25vLXRhdXRvbG9naWNhbC10eXBlLWxpbWl0LWNvbXBhcmUaIi1Xbm8taW1wbGljaXQtaW50LWZsb2F0LWNvbnZlcnNpb24aIS1Xbm8tdGF1dG9sb2dpY2FsLW92ZXJsYXAtY29tcGFyZRoULVduby1kZXByZWNhdGVkLWNvcHkaGS1Xbm8tcmFuZ2UtbG9vcC1jb25zdHJ1Y3QaIi1Xbm8temVyby1hcy1udWxsLXBvaW50ZXItY29uc3RhbnQaKS1Xbm8tZGVwcmVjYXRlZC1hbm9uLWVudW0tZW51bS1jb252ZXJzaW9uGiQtV25vLWRlcHJlY2F0ZWQtZW51bS1lbnVtLWNvbnZlcnNpb24aFS1Xbm8tcGVzc2ltaXppbmctbW92ZRoeLVduby1ub24tYy10eXBlZGVmLWZvci1saW5rYWdlGhMtV25vLWFsaWduLW1pc21hdGNoGiItV25vLWVycm9yPXVudXNlZC1idXQtc2V0LXZhcmlhYmxlGiMtV25vLWVycm9yPXVudXNlZC1idXQtc2V0LXBhcmFtZXRlchoeLVduby1lcnJvcj1kZXByZWNhdGVkLWJ1aWx0aW5zGhUtV25vLWVycm9yPWRlcHJlY2F0ZWQaMi1Xbm8tZXJyb3I9c2luZ2xlLWJpdC1iaXRmaWVsZC1jb25zdGFudC1jb252ZXJzaW9uGiQtV25vLWVycm9yPWVudW0tY29uc3RleHByLWNvbnZlcnNpb24aGy1Xbm8tZXJyb3I9aW52YWxpZC1vZmZzZXRvZhomLVduby1kZXByZWNhdGVkLWR5bmFtaWMtZXhjZXB0aW9uLXNwZWMaOGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjItU/CisDb3V0MngKKzhidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYxICCAEaOGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjOpciCis4YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2MQAho4YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2MiOHByZWJ1aWx0cy9jbGFuZy9ob3N0L2xpbnV4LXg4Ni9jbGFuZy1yNTMwNTY3L2Jpbi9jbGFuZysrIgwtbm9zdGRsaWJpbmMiBy1tdGh1bWIiAy1PcyIULWZvbWl0LWZyYW1lLXBvaW50ZXIiBi1tbGx2bSIZLWVuYWJsZS1zaHJpbmstd3JhcD1mYWxzZSIDLU8yIgUtV2FsbCIHLVdleHRyYSILLVdpbml0LXNlbGYiDy1XcG9pbnRlci1hcml0aCIYLVd1bmd1YXJkZWQtYXZhaWxhYmlsaXR5IhEtV2Vycm9yPWRhdGUtdGltZSIWLVdlcnJvcj1pbnQtY29udmVyc2lvbiITLVdlcnJvcj1wcmFnbWEtcGFjayImLVdlcnJvcj1wcmFnbWEtcGFjay1zdXNwaWNpb3VzLWluY2x1ZGUiGC1XZXJyb3I9c2l6ZW9mLWFycmF5LWRpdiIXLVdlcnJvcj1zdHJpbmctcGx1cy1pbnQiJy1XZXJyb3I9dW5yZWFjaGFibGUtY29kZS1sb29wLWluY3JlbWVudCIiLVduby1lcnJvcj1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyITLVduby1jMjMtZXh0ZW5zaW9ucyITLVduby1jOTktZGVzaWduYXRvciIZLVduby1nbnUtZm9sZGluZy1jb25zdGFudCIiLVduby1pbmNvbnNpc3RlbnQtbWlzc2luZy1vdmVycmlkZSIcLVduby1lcnJvcj1yZW9yZGVyLWluaXQtbGlzdCIWLVduby1yZW9yZGVyLWluaXQtbGlzdCIRLVduby1zaWduLWNvbXBhcmUiCy1Xbm8tdW51c2VkIgktREFORFJPSUQiCC1ETkRFQlVHIgctVURFQlVHIigtRF9fY29tcGlsZXJfb2Zmc2V0b2Y9X19idWlsdGluX29mZnNldG9mIiotRF9fQU5EUk9JRF9VTkFWQUlMQUJMRV9TWU1CT0xTX0FSRV9XRUFLX18iCS1mYWRkcnNpZyIZLWZkZWJ1Zy1kZWZhdWx0LXZlcnNpb249NSITLWZjb2xvci1kaWFnbm9zdGljcyIRLWZmcC1jb250cmFjdD1vZmYiDy1mbm8tZXhjZXB0aW9ucyIULWZuby1zdHJpY3QtYWxpYXNpbmciEi1mbWVzc2FnZS1sZW5ndGg9MCIXLWdzaW1wbGUtdGVtcGxhdGUtbmFtZXMiCC1nej16c3RkIhYtbm8tY2Fub25pY2FsLXByZWZpeGVzIiItZmRlYnVnLXByZWZpeC1tYXA9L3Byb2Mvc2VsZi9jd2Q9IhwtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIgItZyITLWZmdW5jdGlvbi1zZWN0aW9ucyIPLWZkYXRhLXNlY3Rpb25zIhAtZm5vLXNob3J0LWVudW1zIg8tZnVud2luZC10YWJsZXMiGC1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZyIRLVdhLC0tbm9leGVjc3RhY2siEy1EX0ZPUlRJRllfU09VUkNFPTIiEy1Xc3RyaWN0LWFsaWFzaW5nPTIiEy1XZXJyb3I9cmV0dXJuLXR5cGUiGC1XZXJyb3I9bm9uLXZpcnR1YWwtZHRvciIPLVdlcnJvcj1hZGRyZXNzIhYtV2Vycm9yPXNlcXVlbmNlLXBvaW50IhctV2Vycm9yPWZvcm1hdC1zZWN1cml0eSIMLW1zb2Z0LWZsb2F0Ig4tbWFyY2g9YXJtdjctYSISLW1mbG9hdC1hYmk9c29mdGZwIgorLW1mcHU9bmVvbiIvLUlidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAiswEtSW91dC9zb29uZy8uaW50ZXJtZWRpYXRlcy9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvaWRlX3F1ZXJ5X3Byb2JlcnNjcmlwdF9jYy9hbmRyb2lkX2FybV9hcm12Ny1hLW5lb24vZ2VuL3Byb3RvL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcCKFAS1Jb3V0L3Nvb25nLy5pbnRlcm1lZGlhdGVzL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9pZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2NjL2FuZHJvaWRfYXJtX2FybXY3LWEtbmVvbi9nZW4vcHJvdG8iFC1EX19MSUJDX0FQSV9fPTEwMDAwIhQtRF9fTElCTV9BUElfXz0xMDAwMCIVLURfX0xJQkRMX0FQSV9fPTEwMDAwIhctSWV4dGVybmFsL3Byb3RvYnVmL3NyYyJZLUlwcmVidWlsdHMvY2xhbmcvaG9zdC9saW51eC14ODYvY2xhbmctcjUzMDU2Ny9hbmRyb2lkX2xpYmMrKy9wbGF0Zm9ybS9hcm0vaW5jbHVkZS9jKysvdjEiPS1JcHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2L2NsYW5nLXI1MzA1NjcvaW5jbHVkZS9jKysvdjEiIC1JYmlvbmljL2xpYmMvYXN5bmNfc2FmZS9pbmNsdWRlIh8tSXN5c3RlbS9sb2dnaW5nL2xpYmxvZy9pbmNsdWRlIictSWJpb25pYy9saWJjL3N5c3RlbV9wcm9wZXJ0aWVzL2luY2x1ZGUiPC1Jc3lzdGVtL2NvcmUvcHJvcGVydHlfc2VydmljZS9saWJwcm9wZXJ0eWluZm9wYXJzZXIvaW5jbHVkZSIILWlzeXN0ZW0iE2Jpb25pYy9saWJjL2luY2x1ZGUiCC1pc3lzdGVtIh9iaW9uaWMvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtIggtaXN5c3RlbSIXYmlvbmljL2xpYmMva2VybmVsL3VhcGkiCC1pc3lzdGVtIh9iaW9uaWMvbGliYy9rZXJuZWwvYW5kcm9pZC9zY3NpIggtaXN5c3RlbSIfYmlvbmljL2xpYmMva2VybmVsL2FuZHJvaWQvdWFwaSIHLXRhcmdldCIdYXJtdjdhLWxpbnV4LWFuZHJvaWRlYWJpMTAwMDAiEC1EQU5EUk9JRF9TVFJJQ1QiBS1mUElFIgctV2Vycm9yIhUtV25vLXVudXNlZC1wYXJhbWV0ZXIiGS1ER09PR0xFX1BST1RPQlVGX05PX1JUVEkiFi1XaW1wbGljaXQtZmFsbHRocm91Z2giKi1EX0xJQkNQUF9FTkFCTEVfVEhSRUFEX1NBRkVUWV9BTk5PVEFUSU9OUyIVLVduby1nbnUtaW5jbHVkZS1uZXh0IhstZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iBi1tbGx2bSIZLWVuYWJsZS1zaHJpbmstd3JhcD1mYWxzZSIMLXN0ZD1nbnUrKzIwIgktZm5vLXJ0dGkiFS1Jc3lzdGVtL2NvcmUvaW5jbHVkZSIfLUlzeXN0ZW0vbG9nZ2luZy9saWJsb2cvaW5jbHVkZSIcLUlzeXN0ZW0vbWVkaWEvYXVkaW8vaW5jbHVkZSIeLUloYXJkd2FyZS9saWJoYXJkd2FyZS9pbmNsdWRlIiUtSWhhcmR3YXJlL2xpYmhhcmR3YXJlX2xlZ2FjeS9pbmNsdWRlIhYtSWhhcmR3YXJlL3JpbC9pbmNsdWRlIhstSWZyYW1ld29ya3MvbmF0aXZlL2luY2x1ZGUiIi1JZnJhbWV3b3Jrcy9uYXRpdmUvb3BlbmdsL2luY2x1ZGUiFy1JZnJhbWV3b3Jrcy9hdi9pbmNsdWRlIhYtV2Vycm9yPWJvb2wtb3BlcmF0aW9uIiAtV2Vycm9yPWZvcm1hdC1pbnN1ZmZpY2llbnQtYXJncyIlLVdlcnJvcj1pbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbiIbLVdlcnJvcj1pbnQtaW4tYm9vbC1jb250ZXh0IhstV2Vycm9yPWludC10by1wb2ludGVyLWNhc3QiGy1XZXJyb3I9cG9pbnRlci10by1pbnQtY2FzdCIXLVdlcnJvcj14b3ItdXNlZC1hcy1wb3ciHi1Xbm8tdm9pZC1wb2ludGVyLXRvLWVudW0tY2FzdCIdLVduby12b2lkLXBvaW50ZXItdG8taW50LWNhc3QiGC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCIWLVdlcnJvcj1mb3J0aWZ5LXNvdXJjZSIULVduby11bnVzZWQtdmFyaWFibGUiHy1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMiEy1Xbm8tcGFja2VkLW5vbi1wb2QiHC1XZXJyb3I9YWRkcmVzcy1vZi10ZW1wb3JhcnkiKy1XZXJyb3I9aW5jb21wYXRpYmxlLWZ1bmN0aW9uLXBvaW50ZXItdHlwZXMiGC1XZXJyb3I9bnVsbC1kZXJlZmVyZW5jZSITLVdlcnJvcj1yZXR1cm4tdHlwZSIiLVduby10YXV0b2xvZ2ljYWwtY29uc3RhbnQtY29tcGFyZSIkLVduby10YXV0b2xvZ2ljYWwtdHlwZS1saW1pdC1jb21wYXJlIiItV25vLWltcGxpY2l0LWludC1mbG9hdC1jb252ZXJzaW9uIiEtV25vLXRhdXRvbG9naWNhbC1vdmVybGFwLWNvbXBhcmUiFC1Xbm8tZGVwcmVjYXRlZC1jb3B5IhktV25vLXJhbmdlLWxvb3AtY29uc3RydWN0IiItV25vLXplcm8tYXMtbnVsbC1wb2ludGVyLWNvbnN0YW50IiktV25vLWRlcHJlY2F0ZWQtYW5vbi1lbnVtLWVudW0tY29udmVyc2lvbiIkLVduby1kZXByZWNhdGVkLWVudW0tZW51bS1jb252ZXJzaW9uIhstV25vLWVycm9yPXBlc3NpbWl6aW5nLW1vdmUiHi1Xbm8tbm9uLWMtdHlwZWRlZi1mb3ItbGlua2FnZSITLVduby1hbGlnbi1taXNtYXRjaCIiLVduby1lcnJvcj11bnVzZWQtYnV0LXNldC12YXJpYWJsZSIjLVduby1lcnJvcj11bnVzZWQtYnV0LXNldC1wYXJhbWV0ZXIiHi1Xbm8tZXJyb3I9ZGVwcmVjYXRlZC1idWlsdGlucyIVLVduby1lcnJvcj1kZXByZWNhdGVkIiYtV25vLWRlcHJlY2F0ZWQtZHluYW1pYy1leGNlcHRpb24tc3BlYyIkLVduby1lcnJvcj1lbnVtLWNvbnN0ZXhwci1jb252ZXJzaW9uIhstV25vLWVycm9yPWludmFsaWQtb2Zmc2V0b2YiKS1Xbm8tZXJyb3I9dGhyZWFkLXNhZmV0eS1yZWZlcmVuY2UtcmV0dXJuIhYtV25vLXZsYS1jeHgtZXh0ZW5zaW9uIjhidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYzJFZ2VuZmlsZXNfZm9yX2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjOp9ACitFZ2VuZmlsZXNfZm9yX2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjKtU/CiC2AXNvb25nLy5pbnRlcm1lZGlhdGVzL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9pZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2NjL2FuZHJvaWRfYXJtX2FybXY3LWEtbmVvbi9nZW4vcHJvdG8vYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2Zvby5wYi5oEpk+Ly8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCEKIC8vIHNvdXJjZTogYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2Zvby5wcm90bwogCmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvcmVnZW4uc2ggYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvcmVnZW4uc2gKaW5kZXggMmVkZmU1My4uMDRhMDI2NCAxMDA3NTUKLS0tIGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL3JlZ2VuLnNoCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9yZWdlbi5zaApAQCAtMjEsMTMgKzIxLDggQEAKICMgaWRlX3F1ZXJ5LnNoLiBUaGUgcHJvYmVyIGRvZXNuJ3QgY2hlY2stb3V0IHRoZSBmdWxsIHNvdXJjZSBjb2RlLCBzbyBpdAogIyBjYW4ndCBydW4gaWRlX3F1ZXJ5LnNoIGl0c2VsZi4KIAotY2QgJChkaXJuYW1lICRCQVNIX1NPVVJDRSkKLXNvdXJjZSAkKHB3ZCkvLi4vLi4vLi4vc2hlbGxfdXRpbHMuc2gKLXJlcXVpcmVfdG9wCi0KIGZpbGVzX3RvX2J1aWxkPSgKICAgYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2MKICkKIAotY2QgJHtUT1B9CiBidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9pZGVfcXVlcnkuc2ggLS1sdW5jaF90YXJnZXQ9YW9zcF9hcm0tdHJ1bmtfc3RhZ2luZy1lbmcgJHtmaWxlc190b19idWlsZFtAXX0gPiBidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9pZGVfcXVlcnkub3V0Cg==