VGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgdGVzdHMgZm9yIEdDQy4gRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQKdGhlIEMgdGVzdHN1aXRlLCBzZWUgUkVBRE1FLmdjYy4KClRoZSBkcml2ZXIgdGhhdCBydW5zIHRoaXMgdGVzdHN1aXRlIGlzIGNhbGxlZCBEZWphR251IGFuZCB5b3Ugd2lsbApuZWVkIGEgY3VycmVudCBEZWphR251IHNuYXBzaG90LCB3aGljaCBpcyBhdmFpbGFibGUgZnJvbQpmdHA6Ly9nY2MuZ251Lm9yZy9wdWIvZ2NjL2luZnJhc3RydWN0dXJlLCBmb3IgZXhhbXBsZS4KClRoZXNlIHRlc3RzIGFyZSBpbmNsdWRlZCAiYXMgaXMiLiBJZiBhbnkgb2YgdGhlbSBmYWlscywgZG8gbm90IHJlcG9ydAphIGJ1Zy4gIEJ1ZyByZXBvcnRzIGZvciBEZWphR251IGNhbiBnbyB0byBidWctZGVqYWdudUBnbnUub3JnLgpEaXNjdXNzaW9uIGFuZCBjb21tZW50cyBhYm91dCB0aGlzIHRlc3RzdWl0ZSBzaG91bGQgYmUgc2VudCB0bwpnY2NAZ2NjLmdudS5vcmc7IGFkZGl0aW9ucyBhbmQgY2hhbmdlcyB0byBzaG91bGQgZ28gdG8gc2VudCB0bwpnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZy4KClRoZSBlbnRpcmUgdGVzdHN1aXRlIGlzIGludm9rZWQgYnkgYG1ha2UgY2hlY2tgIGF0IHRoZSB0b3AgbGV2ZWwgb2YKdGhlIEdDQyB0cmVlLiBgbWFrZSBjaGVjay1nKytgIHJ1bnMgdGhlIEMrKyB0ZXN0c3VpdGUgb25seS4KClNUUlVDVFVSRSBPRiBUSEUgRysrIFRFU1RTVUlURQoKICBnKysuZGcgdGVzdHM6CgogIEFsbCBuZXcgdGVzdHMgc2hvdWxkIGJlIHBsYWNlZCBpbiBhbiBhcHByb3ByaWF0ZSBzdWJkaXJlY3Rvcnkgb2YgZysrLmRnLgoKICBnKysub2xkLWRlamEgdGVzdHM6CgogIGcrKy5iZW5qYW1pbglUZXN0cyBieSBCZW5qYW1pbiBLb3oKICBnKysuYm9iCiAgZysrLmJyZW5kYW4JVGVzdHMgYnkgQnJlbmRhbiBLZWhvZQogIGcrKy5idWdzCiAgZysrLmVoICAJVGVzdHMgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZwogIGcrKy5leHQgIAlUZXN0cyBmb3IgZysrIGV4dGVuc2lvbnMKICBnKysuZ2IgIAlUZXN0cyBieSBHZXJhbGQgQmF1bWdhcnRuZXIKICBnKysuamFzb24JVGVzdHMgYnkgSmFzb24gTWVyaWxsCiAgZysrLmplZmYJVGVzdHMgYnkgSmVmZnJleSBBIExhdwogIGcrKy5tYXJ0aW4JVGVzdHMgYnkgTWFydGluIHYuIEz2d2lzCiAgZysrLm1pa2UJVGVzdHMgYnkgTWlrZSBTdHVtcAogIGcrKy5uaWtsYXMJVGVzdHMgYnkgTmlrbGFzIEhhbGxxdmlzdAogIGcrKy5ucyAgCVRlc3RzIGZvciBuYW1lc3BhY2VzCiAgZysrLm90aGVyCiAgZysrLnB0ICAJVGVzdHMgZm9yIHRlbXBsYXRlcwogIGcrKy5yZmcKICBnKysucm9iZXJ0bAlUZXN0cyBmcm9tIGdjYy1idWdzQGdjYy5nbnUub3JnLCBnYXRoZXJlZCBieSBSb2JlcnQgTGlwZQoJCkZpbmFsbHksIHNvbWUgcmFuZG9tIGxhc3QgbWludXRlIG5vdGVzIGJ5IE1pa2UgU3R1bXAgPG1yc0BjeWdudXMuY29tPiwgb24KaG93IHRvIHJ1biB0ZXN0cyAoaW4gdGhlIEdDQyAyLjcgZXJhKToKCglydW50ZXN0IC0tdG9vbCBnKysgLS1zcmNkaXIgLi90ZXN0c3VpdGUKCndoZXJlIAoKCXJ1bnRlc3QJSXMgdGhlIG5hbWUgdXNlZCB0byBpbnZva2UgRGVqYUdudS4gICBJZiBEZWphR251IGlzIG5vdAoJCWluc3RhbGwgdGhpcyB3aWxsIGJlIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgZm9yIHJ1bnRlc3QuCgoJLS10b29sCVRoaXMgdGVsbHMgRGVqYUdudSB3aGljaCB0b29sIHlvdSBhcmUgdGVzdGluZy4gSXQgaXMKCQltYWlubHkgdXNlZCB0byBmaW5kIHRoZSB0ZXN0c3VpdGUgZGlyZWN0b3JpZXMgZm9yIGEKCQlwYXJ0aWN1bGFyIHRvb2wgd2hlbiBzZXZlcmFsIHRlc3RzdWl0ZXMgYXJlIGluIHRoZQoJCXNhbWUgZGlyZWN0b3J5LiAobGlrZSB0aGUgZ2NjIGFuZCBnKysgdGVzdHN1aXRlcykKCgktLXNyY2RpciBUaGlzIHBvaW50cyB0byB0aGUgdG9wIGxldmVsIG9mIHRoZSBkaXJlY3RvcnkKCQljb250YWluaW5nIHRoZSBzb3VyY2VzIG9mIHRoZSB0ZXN0c3VpdGUuIFRoaXMgaXMKCQkuL3Rlc3RzdWl0ZSBpZiB5b3UgYXJlIGluIHRoZSBkaXJlY3RvcnkgdGhhdCBoYXMgdGhlCgkJdGVzdHN1aXRlIGRpcmVjdG9yeS4K