PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KPHRpdGxlPk1hc3RlciBUZXN0IFN1aXRlPC90aXRsZT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9zdHlsZS9zdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIj4KPGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sIiB0aXRsZT0iQm9vc3QgVGVzdCBMaWJyYXJ5Ij4KPGxpbmsgcmVsPSJ1cCIgaHJlZj0idGVzdC1zdWl0ZS5odG1sIiB0aXRsZT0iVGVzdCBzdWl0ZSI+CjxsaW5rIHJlbD0icHJldiIgaHJlZj0iYXV0by10ZXN0LXN1aXRlLmh0bWwiIHRpdGxlPSJUZXN0IHN1aXRlcyB3aXRoIGF1dG9tYXRlZCByZWdpc3RyYXRpb24iPgo8bGluayByZWw9Im5leHQiIGhyZWY9ImV4cGVjdGVkLWZhaWx1cmVzLmh0bWwiIHRpdGxlPSJFeHBlY3RlZCBmYWlsdXJlcyBzcGVjaWZpY2F0aW9uIj4KPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdDEuMiIgc3JjPSIuLi8uLi8uLi8uLi9qcy9ib29zdC10ZXN0LmpzIj48L3NjcmlwdD4KPC9oZWFkPgo8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgo8dGQgd2lkdGg9IjEwJSI+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbCI+PGltZyBhbHQ9IkhvbWUiIHdpZHRoPSIyMjkiIGhlaWdodD0iNjEiIGJvcmRlcj0iMCIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Rlc3QvZG9jYm9vay9pbWcvYm9vc3QudGVzdC5sb2dvLnBuZyI+PC9hPjwvdGQ+Cjx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiPiAmZ3Q7IDxhIGhyZWY9Ii4uLy4uLy4uL3V0Zi5odG1sIj5UaGUgVW5pdCBUZXN0IEZyYW1ld29yazwvYT4gJmd0OyA8YSBocmVmPSIuLi8uLi91c2VyLWd1aWRlLmh0bWwiPlVzZXIncyBndWlkZTwvYT48YSBocmVmPSIuLi8uLi90ZXN0aW5nLXRvb2xzLmh0bWwiPgogICAgICAmZ3Q7CiAgICAgIDwvYT48YSBocmVmPSIuLi90ZXN0LW9yZ2FuaXphdGlvbi5odG1sIj5UZXN0IG9yZ2FuaXphdGlvbjwvYT48YSBocmVmPSIuLi9maXh0dXJlLmh0bWwiPgogICAgICAmZ3Q7CiAgICAgIDwvYT48YSBocmVmPSJ0ZXN0LXN1aXRlLmh0bWwiPlRlc3Qgc3VpdGU8L2E+PGEgaHJlZj0iZXhwZWN0ZWQtZmFpbHVyZXMuaHRtbCI+CiAgICAgICZndDsKICAgICAgPC9hPjxiPk1hc3RlciBUZXN0IFN1aXRlPC9iPgo8L3RkPgo8dGQ+PGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+CjxhIGhyZWY9ImF1dG8tdGVzdC1zdWl0ZS5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBocmVmPSJleHBlY3RlZC1mYWlsdXJlcy5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KPC9kaXY+PC90ZD4KPC90cj48L3RhYmxlPgo8aHI+CjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj4KPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg2IGNsYXNzPSJ0aXRsZSI+CjxhIG5hbWU9InV0Zi51c2VyLWd1aWRlLnRlc3Qtb3JnYW5pemF0aW9uLm1hc3Rlci10ZXN0LXN1aXRlIj48L2E+TWFzdGVyIFRlc3QgU3VpdGU8L2g2PjwvZGl2PjwvZGl2PjwvZGl2Pgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICBBcyBkZWZpbmVkIGluIGludHJvZHVjdGlvbiBzZWN0aW9uIHRoZSBtYXN0ZXIgdGVzdCBzdWl0ZSBpcyBhIHJvb3Qgbm9kZSBvZiBhIHRlc3QgdHJlZS4gRWFjaCB0ZXN0IG1vZHVsZSBidWlsdAogICAgd2l0aCB0aGUgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlVURjwvYWNyb255bT4gYWx3YXlzIGhhcyB0aGUgbWFzdGVyIHRlc3Qgc3VpdGUgZGVmaW5lZC4gVGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5VVEY8L2Fjcm9ueW0+IG1haW50YWluIHRoZSBtYXN0ZXIgdGVzdCBzdWl0ZSBpbnN0YW5jZQogICAgaW50ZXJuYWxseS4gQWxsIG90aGVyIHRlc3QgdW5pdHMgYXJlIHJlZ2lzdGVyZWQgYXMgZGlyZWN0IG9yIGluZGlyZWN0IGNoaWxkcmVuIG9mIHRoZSBtYXN0ZXIgdGVzdCBzdWl0ZS4KICAgPC9wPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+bmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIHVuaXRfdGVzdCB7CmNsYXNzIG1hc3Rlcl90ZXN0X3N1aXRlX3QgOiBwdWJsaWMgdGVzdF9zdWl0ZSB7CnB1YmxpYzoKICAgaW50IGFyZ2M7CiAgIGNoYXIqKiBhcmd2Owp9OwoKfSAvLyBuYW1lc3BhY2UgdW5pdF90ZXN0Cgp9IC8vIG5hbWVzcGFjZSBib29zdDwvcHJlPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICBUbyBhY2Nlc3Mgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBtYXN0ZXIgdGVzdCBzdWl0ZSB1c2UgdGhlIGZvbGxvd2luZyBpbnRlcmZhY2U6CiAgIDwvcD4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSB1bml0X3Rlc3QgewpuYW1lc3BhY2UgZnJhbWV3b3JrIHsKCm1hc3Rlcl90ZXN0X3N1aXRlX3QmYW1wOyBtYXN0ZXJfdGVzdF9zdWl0ZSgpOwoKfSAvLyBuYW1lc3BhY2UgZnJhbWV3b3JrCn0gLy8gbmFtZXNwYWNlIHVuaXRfdGVzdAp9IC8vIG5hbWVzcGFjZSBib29zdDwvcHJlPgo8ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNiBjbGFzcz0idGl0bGUiPgo8YSBuYW1lPSJ1dGYudXNlci1ndWlkZS50ZXN0LW9yZ2FuaXphdGlvbi5jbGEtYWNjZXNzIj48L2E+Q29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhY2Nlc3MgaW50ZXJmYWNlPC9oNj48L2Rpdj48L2Rpdj48L2Rpdj4KPHAgY2xhc3M9ImZpcnN0LWxpbmUtaW5kZW50ZWQiPgogICAgIE1hc3RlciB0ZXN0IHN1aXRlIGltcGxlbWVudGVkIGFzIGFuIGV4dGVuc2lvbiB0byB0aGUgcmVndWxhciB0ZXN0IHN1aXRlLCBzaW5jZSBpdCBtYWludGFpbnMgcmVmZXJlbmNlcyB0byB0aGUKICAgICBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdGVzdCBtb2R1bGUuIFRvIGFjY2VzcyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB1c2UKICAgIDwvcD4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmJvb3N0Ojp1bml0X3Rlc3Q6OmZyYW1ld29yazo6bWFzdGVyX3Rlc3Rfc3VpdGUoKS5hcmdjCmJvb3N0Ojp1bml0X3Rlc3Q6OmZyYW1ld29yazo6bWFzdGVyX3Rlc3Rfc3VpdGUoKS5hcmd2PC9wcmU+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgICBJbiBiZWxvdyBleGFtcGxlIHJlZmVyZW5jZXMgdG8gdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYXJlIGFjY2Vzc2libGUgZWl0aGVyIGFzIGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uCiAgICAgcGFyYW1ldGVycyBvciBhcyBtZW1iZXJzIG9mIHRoZSBtYXN0ZXIgdGVzdCBzdWl0ZS4gQm90aCByZWZlcmVuY2VzIHBvaW50IHRvIHRoZSBzYW1lIHZhbHVlcy4gQSB0ZXN0IG1vZHVsZSB0aGF0CiAgICAgdXNlcyB0aGUgYWx0ZXJuYXRpdmUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gc3BlY2lmaWNhdGlvbiBjYW4gb25seSBhY2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0aHJvdWdoIHRoZQogICAgIG1hc3RlciB0ZXN0IHN1aXRlLgogICAgPC9wPgo8ZGl2IGNsYXNzPSJub3RlIj48dGFibGUgYm9yZGVyPSIwIiBzdW1tYXJ5PSJOb3RlIj4KPHRyPgo8dGQgcm93c3Bhbj0iMiIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSI+PGltZyBhbHQ9IltOb3RlXSIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvbm90ZS5wbmciPjwvdGQ+Cjx0aCBhbGlnbj0ibGVmdCI+Tm90ZTwvdGg+CjwvdHI+Cjx0cj48dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48cD4KICAgICAgVGhpcyBpbnRlcmZhY2UgZm9yIHJ1bnRpbWUgcGFyYW1ldGVyIGFjY2VzcyBpcyB0ZW1wb3JhcnkuIEl0J3MgcGxhbm5lZCB0byBiZSB1cGRhdGVkIG9uY2UgcnVudGltZQogICAgICBwYXJhbWV0ZXJzIHN1cHBvcnQgaXMgcmVkZXNpZ25lZC4KICAgICA8L3A+PC90ZD48L3RyPgo8L3RhYmxlPjwvZGl2Pgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICAgUmV0dXJuaW5nIHRvIHRoZSBmcmVlIGZ1bmN0aW9uIGV4YW1wbGUsIGxldCdzIG1vZGlmeSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiB0byBjaGVjayBmb3IgYWJzZW5jZSBvZiBhbnkKICAgICB0ZXN0IG1vZHVsZSBhcmd1bWVudHMuCiAgICA8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPgo8YSBuYW1lPSJ1dGYudXNlci1ndWlkZS50ZXN0LW9yZ2FuaXphdGlvbi5jbGEtYWNjZXNzLmV4YW1wbGUxMyI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaAxOC6gQ29tbWFuZCBsaW5lIGFjY2VzcyBpbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbjwvYj48L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2luY2x1ZGUgJmx0O2Jvb3N0L3Rlc3QvaW5jbHVkZWQvdW5pdF90ZXN0LmhwcCZndDsKdXNpbmcgbmFtZXNwYWNlIGJvb3N0Ojp1bml0X3Rlc3Q7CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwoKdm9pZCBmcmVlX3Rlc3RfZnVuY3Rpb24oKQp7CiAgICBCT09TVF9DSEVDSyggdHJ1ZSAvKiB0ZXN0IGFzc2VydGlvbiAqLyApOwp9CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwoKdGVzdF9zdWl0ZSoKaW5pdF91bml0X3Rlc3Rfc3VpdGUoIGludCBhcmdjLCBjaGFyKiBhcmd2W10gKSAKewogICAgaWYoIGZyYW1ld29yazo6bWFzdGVyX3Rlc3Rfc3VpdGUoKS5hcmdjICZndDsgMSApCiAgICAgICAgcmV0dXJuIDA7CgogICAgZnJhbWV3b3JrOjptYXN0ZXJfdGVzdF9zdWl0ZSgpLgogICAgICAgIGFkZCggQk9PU1RfVEVTVF9DQVNFKCAmYW1wO2ZyZWVfdGVzdF9mdW5jdGlvbiApICk7CgogICAgcmV0dXJuIDA7Cn0KCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgo8L3ByZT4KPHRhYmxlIGNsYXNzPSJzaW1wbGVsaXN0IiBib3JkZXI9IjAiIHN1bW1hcnk9IlNpbXBsZSBsaXN0Ij48dHI+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vc3JjL2V4YW1wbGVzL2V4YW1wbGUxMy5jcHAiIHRhcmdldD0iX3RvcCI+U291cmNlIGNvZGU8L2E+PC9jb2RlPjwvdGQ+Cjx0ZD4gfCA8L3RkPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9IiMiIHRhcmdldD0iX3RvcCIgaWQ9ImlkNjUxNjE1IiBvbmNsaWNrPSJ0b2dnbGVfZWxlbWVudCggJ2V4YW1wbGUxMy1vdXRwdXQnLCAnaWQ2NTE2MTUnLCAnU2hvdyBvdXRwdXQnLCAnSGlkZSBvdXRwdXQnICk7IHJldHVybiBmYWxzZTsiPlNob3cgb3V0cHV0PC9hPjwvY29kZT48L3RkPgo8L3RyPjwvdGFibGU+CjxwcmUgY2xhc3M9ImV4YW1wbGUtb3V0cHV0IiBpZD0iZXhhbXBsZTEzLW91dHB1dCI+Jmd0OyBleGFtcGxlIDEKVGVzdCBzZXR1cCBlcnJvcjogdGVzdCB0cmVlIGlzIGVtcHR5PC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj4KPC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj4KPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg2IGNsYXNzPSJ0aXRsZSI+CjxhIG5hbWU9InV0Zi51c2VyLWd1aWRlLnRlc3Qtb3JnYW5pemF0aW9uLm1hc3Rlci10ZXN0LXN1aXRlLW5hbWUiPjwvYT5OYW1pbmc8L2g2PjwvZGl2PjwvZGl2PjwvZGl2Pgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICAgVGhlIG1hc3RlciB0ZXN0IHN1aXRlIGlzIGNyZWF0ZWQgd2l0aCBkZWZhdWx0IG5hbWUgIk1hc3RlciBUZXN0IFN1aXRlIi4gVGhlcmUgYXJlIHR3byBtZXRob2RzIHR3bwogICAgIHJlc2V0IHRoZSBuYW1lIHRvIGEgZGlmZmVyZW50IHZhbHVlOiB1c2luZyB0aGUgbWFjcm8gPGEgY2xhc3M9InhyZWYiIGhyZWY9Ii4uLy4uL2NvbXBpbGF0aW9uLmh0bWwjdXRmLmZsYWcubW9kdWxlIj5CT09TVF9URVNUX01PRFVMRTwvYT4gCiAgICAgYW5kIGZyb20gd2l0aGluIHRoZSB0ZXN0IG1vZHVsZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gRm9ybWVyIGlzIHVzZWQgZm9yIHRlc3QgbW9kdWxlcyB0aGF0IGRvbid0IGhhdmUgdGhlCiAgICAgbWFudWFsbHkgaW1wbGVtZW50ZWQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIEZvbGxvd2luZyBleGFtcGxlcyBpbGx1c3RyYXRlIHRoZXNlIG1ldGhvZHMuCiAgICA8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPgo8YSBuYW1lPSJ1dGYudXNlci1ndWlkZS50ZXN0LW9yZ2FuaXphdGlvbi5tYXN0ZXItdGVzdC1zdWl0ZS1uYW1lLmV4YW1wbGUxNCI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaAxOS6gTmFtaW5nIG1hc3RlciB0ZXN0IHN1aXRlIHVzaW5nIHRoZSBtYWNybyA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iLi4vLi4vY29tcGlsYXRpb24uaHRtbCN1dGYuZmxhZy5tb2R1bGUiPkJPT1NUX1RFU1RfTU9EVUxFPC9hPjwvYj48L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICAgIElmIHRoZSBtYWNybyA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iLi4vLi4vY29tcGlsYXRpb24uaHRtbCN1dGYuZmxhZy5tb2R1bGUiPkJPT1NUX1RFU1RfTU9EVUxFPC9hPiBpcyBkZWZpbmVkLCB0aGUgdGVzdCBtb2R1bGUgaW5pdGlhbGl6YXRpb24KICAgICAgZnVuY3Rpb24gaXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2luaXRpYWxpemF0aW9uLmh0bWwjdXRmLnVzZXItZ3VpZGUuaW5pdGlhbGl6YXRpb24uYXV0by1nZW5lcmF0aW9uIiB0aXRsZT0iQXV0b21hdGVkIGdlbmVyYXRpb24gb2YgdGhlIHRlc3QgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIj5hdXRvbWF0aWNhbGx5IGdlbmVyYXRlZDwvYT4gYW5kIHRoZQogICAgICBtYWNybyB2YWx1ZSBiZWNvbWVzIHRoZSBuYW1lIG9mIHRoZSBtYXN0ZXIgdGVzdCBzdWl0ZS4gVGhlIG5hbWUgbWF5IGluY2x1ZGUgc3BhY2VzLgogICAgIDwvcD4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgQk9PU1RfVEVTVF9EWU5fTElOSwojZGVmaW5lIEJPT1NUX1RFU1RfTU9EVUxFIG15IG1hc3RlciB0ZXN0IHN1aXRlIG5hbWUKI2luY2x1ZGUgJmx0O2Jvb3N0L3Rlc3QvaW5jbHVkZWQvdW5pdF90ZXN0LmhwcCZndDsKCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgpCT09TVF9BVVRPX1RFU1RfQ0FTRSggZnJlZV90ZXN0X2Z1bmN0aW9uICkKewogICAgQk9PU1RfQ0hFQ0soIHRydWUgLyogdGVzdCBhc3NlcnRpb24gKi8gKTsKfQoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KCjwvcHJlPgo8dGFibGUgY2xhc3M9InNpbXBsZWxpc3QiIGJvcmRlcj0iMCIgc3VtbWFyeT0iU2ltcGxlIGxpc3QiPjx0cj4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIuLi8uLi8uLi8uLi9zcmMvZXhhbXBsZXMvZXhhbXBsZTE0LmNwcCIgdGFyZ2V0PSJfdG9wIj5Tb3VyY2UgY29kZTwvYT48L2NvZGU+PC90ZD4KPHRkPiB8IDwvdGQ+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iIyIgdGFyZ2V0PSJfdG9wIiBpZD0iaWQ2NTE3NzQiIG9uY2xpY2s9InRvZ2dsZV9lbGVtZW50KCAnZXhhbXBsZTE0LW91dHB1dCcsICdpZDY1MTc3NCcsICdTaG93IG91dHB1dCcsICdIaWRlIG91dHB1dCcgKTsgcmV0dXJuIGZhbHNlOyI+U2hvdyBvdXRwdXQ8L2E+PC9jb2RlPjwvdGQ+CjwvdHI+PC90YWJsZT4KPHByZSBjbGFzcz0iZXhhbXBsZS1vdXRwdXQiIGlkPSJleGFtcGxlMTQtb3V0cHV0Ij4mZ3Q7IGV4YW1wbGUgLS1sb2dfbGV2ZWw9dGVzdF9zdWl0ZQpSdW5uaW5nIDEgdGVzdCBjYXNlLi4uCkVudGVyaW5nIHRlc3Qgc3VpdGUgIm15IG1hc3RlciB0ZXN0IHN1aXRlIG5hbWUiCkVudGVyaW5nIHRlc3QgY2FzZSAiZnJlZV90ZXN0X2Z1bmN0aW9uIgpMZWF2aW5nIHRlc3QgY2FzZSAiZnJlZV90ZXN0X2Z1bmN0aW9uIjsgdGVzdGluZyB0aW1lOiAxbXMKTGVhdmluZyB0ZXN0IHN1aXRlICJteSBtYXN0ZXIgdGVzdCBzdWl0ZSBuYW1lIgoKKioqIE5vIGVycm9ycyBkZXRlY3RlZAoKPC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48ZGl2IGNsYXNzPSJleGFtcGxlIj4KPGEgbmFtZT0idXRmLnVzZXItZ3VpZGUudGVzdC1vcmdhbml6YXRpb24ubWFzdGVyLXRlc3Qtc3VpdGUtbmFtZS5leGFtcGxlMTUiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgMjAuoE5hbWluZyBtYXN0ZXIgdGVzdCBzdWl0ZSBleHBsaWNpdGx5IGluIHRoZSB0ZXN0IG1vZHVsZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbjwvYj48L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICAgIFdpdGhvdXQgdGhlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIuLi8uLi9jb21waWxhdGlvbi5odG1sI3V0Zi5mbGFnLm1haW4iPkJPT1NUX1RFU1RfTUFJTjwvYT4gYW5kIHRoZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iLi4vLi4vY29tcGlsYXRpb24uaHRtbCN1dGYuZmxhZy5tb2R1bGUiPkJPT1NUX1RFU1RfTU9EVUxFPC9hPiBmbGFncyBkZWZpbmVkLCB0aGUgdGVzdCBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gaGFzIHRvIGJlIG1hbnVhbGx5IGltcGxlbWVudGVkLgogICAgICBUaGUgbWFzdGVyIHRlc3Qgc3VpdGUgbmFtZSBjYW4gYmUgcmVzZXQgYXQgYW55IHBvaW50IHdpdGhpbiB0aGlzIGZ1bmN0aW9uLgogICAgICA8L3A+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jaW5jbHVkZSAmbHQ7Ym9vc3QvdGVzdC9pbmNsdWRlZC91bml0X3Rlc3QuaHBwJmd0Owp1c2luZyBuYW1lc3BhY2UgYm9vc3Q6OnVuaXRfdGVzdDsKCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgpCT09TVF9BVVRPX1RFU1RfQ0FTRSggZnJlZV90ZXN0X2Z1bmN0aW9uICkKewogICAgQk9PU1RfQ0hFQ0soIHRydWUgLyogdGVzdCBhc3NlcnRpb24gKi8gKTsKfQoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KCnRlc3Rfc3VpdGUqCmluaXRfdW5pdF90ZXN0X3N1aXRlKCBpbnQgYXJnYywgY2hhciogYXJndltdICkgCnsKICAgIGZyYW1ld29yazo6bWFzdGVyX3Rlc3Rfc3VpdGUoKS5wX25hbWUudmFsdWUgPSAibXkgbWFzdGVyIHRlc3Qgc3VpdGUgbmFtZSI7CgogICAgcmV0dXJuIDA7Cn0KCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCjwvcHJlPgo8dGFibGUgY2xhc3M9InNpbXBsZWxpc3QiIGJvcmRlcj0iMCIgc3VtbWFyeT0iU2ltcGxlIGxpc3QiPjx0cj4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIuLi8uLi8uLi8uLi9zcmMvZXhhbXBsZXMvZXhhbXBsZTE1LmNwcCIgdGFyZ2V0PSJfdG9wIj5Tb3VyY2UgY29kZTwvYT48L2NvZGU+PC90ZD4KPHRkPiB8IDwvdGQ+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iIyIgdGFyZ2V0PSJfdG9wIiBpZD0iaWQ2NTE4ODciIG9uY2xpY2s9InRvZ2dsZV9lbGVtZW50KCAnZXhhbXBsZTE1LW91dHB1dCcsICdpZDY1MTg4NycsICdTaG93IG91dHB1dCcsICdIaWRlIG91dHB1dCcgKTsgcmV0dXJuIGZhbHNlOyI+U2hvdyBvdXRwdXQ8L2E+PC9jb2RlPjwvdGQ+CjwvdHI+PC90YWJsZT4KPHByZSBjbGFzcz0iZXhhbXBsZS1vdXRwdXQiIGlkPSJleGFtcGxlMTUtb3V0cHV0Ij4mZ3Q7IGV4YW1wbGUgLS1sb2dfbGV2ZWw9dGVzdF9zdWl0ZQpSdW5uaW5nIDEgdGVzdCBjYXNlLi4uCkVudGVyaW5nIHRlc3Qgc3VpdGUgIm15IG1hc3RlciB0ZXN0IHN1aXRlIG5hbWUiCkVudGVyaW5nIHRlc3QgY2FzZSAiZnJlZV90ZXN0X2Z1bmN0aW9uIgpMZWF2aW5nIHRlc3QgY2FzZSAiZnJlZV90ZXN0X2Z1bmN0aW9uIjsgdGVzdGluZyB0aW1lOiAxbXMKTGVhdmluZyB0ZXN0IHN1aXRlICJteSBtYXN0ZXIgdGVzdCBzdWl0ZSBuYW1lIgoKKioqIE5vIGVycm9ycyBkZXRlY3RlZAoKPC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj4KPC9kaXY+CjwvZGl2Pgo8dGFibGUgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIHdpZHRoPSIxMDAlIj48dHI+Cjx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+Q29weXJpZ2h0IKkgMjAwMS0yMDA3IEdlbm5hZGl5IFJvemVudGFsPC9kaXY+PC90ZD4KPC90cj48L3RhYmxlPgo8aHI+CjxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgo8YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImF1dG8tdGVzdC1zdWl0ZS5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9InRlc3Qtc3VpdGUuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy91cC5wbmciIGFsdD0iVXAiPjwvYT48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZXhwZWN0ZWQtZmFpbHVyZXMuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+CjwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K