ZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CmluZGV4IDY3MDFjMjIuLmMzNTZkNDcgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQpAQCAtMjAzLDYgKzIwMywxMyBAQAogICAgIGRlZiBDaGVja0V4ZWN1dGVBcmdTdHJpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKD8pIiwgKCJIdWdvIiwpKQogCisgICAgZGVmIENoZWNrRXhlY3V0ZUFyZ1N0cmluZ1dpdGhaZXJvQnl0ZShzZWxmKToKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoPykiLCAoIkh1XHgwMGdvIiwpKQorCisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IHdoZXJlIGlkPT8iLCAoc2VsZi5jdS5sYXN0cm93aWQsKSkKKyAgICAgICAgcm93ID0gc2VsZi5jdS5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCAiSHVceDAwZ28iKQorCiAgICAgZGVmIENoZWNrRXhlY3V0ZVdyb25nTm9PZkFyZ3MxKHNlbGYpOgogICAgICAgICAjIHRvbyBtYW55IHBhcmFtZXRlcnMKICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC9mYWN0b3J5LnB5IGIvTGliL3NxbGl0ZTMvdGVzdC9mYWN0b3J5LnB5CmluZGV4IGYwOTA5NTUuLjUyODU0YmUgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvZmFjdG9yeS5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkKQEAgLTE4OSwxMyArMTg5LDUyIEBACiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5jbG9zZSgpCiAKK2NsYXNzIFRleHRGYWN0b3J5VGVzdHNXaXRoRW1iZWRkZWRaZXJvQnl0ZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdCAodmFsdWUgdGV4dCkiKQorICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0ICh2YWx1ZSkgdmFsdWVzICg/KSIsICgiYVx4MDBiIiwpKQorCisgICAgZGVmIENoZWNrU3RyaW5nKHNlbGYpOgorICAgICAgICAjIHRleHRfZmFjdG9yeSBkZWZhdWx0cyB0byB1bmljb2RlCisgICAgICAgIHJvdyA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCB2YWx1ZSBmcm9tIHRlc3QiKS5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyb3dbMF0pLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgImFceDAwYiIpCisKKyAgICBkZWYgQ2hlY2tDdXN0b20oc2VsZik6CisgICAgICAgICMgQSBjdXN0b20gZmFjdG9yeSBzaG91bGQgcmVjZWl2ZSBhbiBzdHIgYXJndW1lbnQKKyAgICAgICAgc2VsZi5jb24udGV4dF9mYWN0b3J5ID0gbGFtYmRhIHg6IHgKKyAgICAgICAgcm93ID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0IHZhbHVlIGZyb20gdGVzdCIpLmZldGNob25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHJvd1swXSksIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sICJhXHgwMGIiKQorCisgICAgZGVmIENoZWNrT3B0aW1pemVkVW5pY29kZUFzU3RyaW5nKHNlbGYpOgorICAgICAgICAjIEFTQ0lJIC0+IHN0ciBhcmd1bWVudAorICAgICAgICBzZWxmLmNvbi50ZXh0X2ZhY3RvcnkgPSBzcWxpdGUuT3B0aW1pemVkVW5pY29kZQorICAgICAgICByb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgdmFsdWUgZnJvbSB0ZXN0IikuZmV0Y2hvbmUoKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocm93WzBdKSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgImFceDAwYiIpCisKKyAgICBkZWYgQ2hlY2tPcHRpbWl6ZWRVbmljb2RlQXNVbmljb2RlKHNlbGYpOgorICAgICAgICAjIE5vbi1BU0NJSSAtPiB1bmljb2RlIGFyZ3VtZW50CisgICAgICAgIHNlbGYuY29uLnRleHRfZmFjdG9yeSA9IHNxbGl0ZS5PcHRpbWl6ZWRVbmljb2RlCisgICAgICAgIHNlbGYuY29uLmV4ZWN1dGUoImRlbGV0ZSBmcm9tIHRlc3QiKQorICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0ICh2YWx1ZSkgdmFsdWVzICg/KSIsICh1J+RcMPYnLCkpCisgICAgICAgIHJvdyA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCB2YWx1ZSBmcm9tIHRlc3QiKS5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyb3dbMF0pLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgdSLkXHgwMPYiKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5jbG9zZSgpCisKIGRlZiBzdWl0ZSgpOgogICAgIGNvbm5lY3Rpb25fc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ29ubmVjdGlvbkZhY3RvcnlUZXN0cywgIkNoZWNrIikKICAgICBjdXJzb3Jfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ3Vyc29yRmFjdG9yeVRlc3RzLCAiQ2hlY2siKQogICAgIHJvd19zdWl0ZV9jb21wYXQgPSB1bml0dGVzdC5tYWtlU3VpdGUoUm93RmFjdG9yeVRlc3RzQmFja3dhcmRzQ29tcGF0LCAiQ2hlY2siKQogICAgIHJvd19zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShSb3dGYWN0b3J5VGVzdHMsICJDaGVjayIpCiAgICAgdGV4dF9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShUZXh0RmFjdG9yeVRlc3RzLCAiQ2hlY2siKQotICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoKGNvbm5lY3Rpb25fc3VpdGUsIGN1cnNvcl9zdWl0ZSwgcm93X3N1aXRlX2NvbXBhdCwgcm93X3N1aXRlLCB0ZXh0X3N1aXRlKSkKKyAgICB0ZXh0X3plcm9fYnl0ZXNfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoVGV4dEZhY3RvcnlUZXN0c1dpdGhFbWJlZGRlZFplcm9CeXRlcywgIkNoZWNrIikKKyAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKChjb25uZWN0aW9uX3N1aXRlLCBjdXJzb3Jfc3VpdGUsIHJvd19zdWl0ZV9jb21wYXQsIHJvd19zdWl0ZSwgdGV4dF9zdWl0ZSwgdGV4dF96ZXJvX2J5dGVzX3N1aXRlKSkKIAogZGVmIHRlc3QoKToKICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCg==