PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KPHRpdGxlPkN1c3RvbSBwcmVkaWNhdGUgc3VwcG9ydDwvdGl0bGU+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vc3R5bGUvc3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCI+CjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vLi4vaW5kZXguaHRtbCIgdGl0bGU9IkJvb3N0IFRlc3QgTGlicmFyeSI+CjxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL3Rlc3RpbmctdG9vbHMuaHRtbCIgdGl0bGU9IlRoZSBVVEYgdGVzdGluZyB0b29scyBvciB0ZXN0ZXIncyB0b29sYm94IGZvciBhbGwgb2NjYXNpb25zIj4KPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJvdXRwdXQtdGVzdC5odG1sIiB0aXRsZT0iT3V0cHV0IHRlc3RpbmcgdG9vbCI+CjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZmxvYXRpbmdfcG9pbnRfY29tcGFyaXNvbi5odG1sIiB0aXRsZT0iRmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbiBhbGdvcml0aG1zIj4KPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdDEuMiIgc3JjPSIuLi8uLi8uLi9qcy9ib29zdC10ZXN0LmpzIj48L3NjcmlwdD4KPC9oZWFkPgo8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgo8dGQgd2lkdGg9IjEwJSI+PGEgaHJlZj0iLi4vLi4vaW5kZXguaHRtbCI+PGltZyBhbHQ9IkhvbWUiIHdpZHRoPSIyMjkiIGhlaWdodD0iNjEiIGJvcmRlcj0iMCIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Rlc3QvZG9jYm9vay9pbWcvYm9vc3QudGVzdC5sb2dvLnBuZyI+PC9hPjwvdGQ+Cjx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiPiAmZ3Q7IDxhIGhyZWY9Ii4uLy4uL3V0Zi5odG1sIj5UaGUgVW5pdCBUZXN0IEZyYW1ld29yazwvYT4gJmd0OyA8YSBocmVmPSIuLi90ZXN0aW5nLXRvb2xzLmh0bWwiPlRlc3RpbmcgdG9vbHM8L2E+PGEgaHJlZj0iLi4vdXNhZ2UtcmVjb21tZW5kYXRpb25zLmh0bWwiPgogICAgICAmZ3Q7CiAgICAgIDwvYT48Yj5DdXN0b20gcHJlZGljYXRlIHN1cHBvcnQ8L2I+CjwvdGQ+Cjx0ZD48ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KPGEgaHJlZj0ib3V0cHV0LXRlc3QuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgaHJlZj0iZmxvYXRpbmdfcG9pbnRfY29tcGFyaXNvbi5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KPC9kaXY+PC90ZD4KPC90cj48L3RhYmxlPgo8aHI+CjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj4KPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+CjxhIG5hbWU9InV0Zi50ZXN0aW5nLXRvb2xzLmN1c3RvbS1wcmVkaWNhdGUiPjwvYT5DdXN0b20gcHJlZGljYXRlIHN1cHBvcnQ8L2g0PjwvZGl2PjwvZGl2PjwvZGl2Pgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgIEV2ZW4gdGhvdWdoIHN1cHBsaWVkIHRlc3RpbmcgdG9vbHMgY292ZXIgd2lkZSByYW5nZSBvZiBwb3NzaWJsZSBjaGVja3MgYW5kIHByb3ZpZGUgZGV0YWlsZWQgcmVwb3J0IG9uIGNhdXNlIG9mIGVycm9yCiAgIGluIHNvbWUgY2FzZXMgeW91IG1heSB3YW50IHRvIGltcGxlbWVudCBhbmQgdXNlIGN1c3RvbSBwcmVkaWNhdGUgdGhhdCBwZXJmb3JtIGNvbXBsZXggY2hlY2sgYW5kIHByb2R1Y2UgaW50ZWxsaWdlbnQKICAgcmVwb3J0IG9uIGZhaWx1cmUuIFRvIHNhdGlzZnkgdGhpcyBuZWVkIHRlc3RpbmcgdG9vbHMgaW1wbGVtZW50IGN1c3RvbSBwcmVkaWNhdGUgc3VwcG9ydC4gVGhlcmUgdHdvIGxheWVycyBvZiBjdXN0b20KICAgcHJlZGljYXRlIHN1cHBvcnQgaW1wbGVtZW50ZWQgYnkgdGVzdGluZyB0b29scyB0b29sYm94OiB3aXRoIGFuZCB3aXRob3V0IGN1c3RvbSBlcnJvciBtZXNzYWdlIGdlbmVyYXRpb24uCiAgPC9wPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgIFRoZSBmaXJzdCBsYXllciBpcyBzdXBwb3J0ZWQgYnkgQk9PU1RfQ0hFQ0tfUFJFRElDQVRFIGZhbWlseSBvZiB0ZXN0aW5nIHRvb2xzLiBZb3UgY2FuIHVzZSBpdCB0byBjaGVjayBhbnkgY3VzdG9tCiAgIHByZWRpY2F0ZSB0aGF0IHJlcG9ydHMgdGhlIHJlc3VsdCBhcyBib29sZWFuIHZhbHVlLiBUaGUgdmFsdWVzIG9mIHRoZSBwcmVkaWNhdGUgYXJndW1lbnRzIGFyZSByZXBvcnRlZCBieSB0aGUgdG9vbAogICBhdXRvbWF0aWNhbGx5IGluIGNhc2Ugb2YgZmFpbHVyZS4KICA8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPgo8YSBuYW1lPSJ1dGYudGVzdGluZy10b29scy5jdXN0b20tcHJlZGljYXRlLmV4YW1wbGUzMCI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaAzNi6gQ3VzdG9tIHByZWRpY2F0ZSBzdXBwb3J0IHVzaW5nIEJPT1NUX0NIRUNLX1BSRURJQ0FURTwvYj48L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBCT09TVF9URVNUX01PRFVMRSBleGFtcGxlCiNpbmNsdWRlICZsdDtib29zdC90ZXN0L2luY2x1ZGVkL3VuaXRfdGVzdC5ocHAmZ3Q7CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwoKYm9vbCBpc19ldmVuKCBpbnQgaSApICAgICAgICB7IHJldHVybiBpJTIgPT0gMDsgIH0KCkJPT1NUX0FVVE9fVEVTVF9DQVNFKCB0ZXN0X2lzX2V2ZW4gKQp7CiAgICBCT09TVF9DSEVDS19QUkVESUNBVEUoIGlzX2V2ZW4sICgxNCkgKTsKCiAgICBpbnQgaSA9IDE3OwogICAgQk9PU1RfQ0hFQ0tfUFJFRElDQVRFKCBpc19ldmVuLCAoaSkgKTsKfQoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KCjwvcHJlPgo8dGFibGUgY2xhc3M9InNpbXBsZWxpc3QiIGJvcmRlcj0iMCIgc3VtbWFyeT0iU2ltcGxlIGxpc3QiPjx0cj4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIuLi8uLi8uLi9zcmMvZXhhbXBsZXMvZXhhbXBsZTMwLmNwcCIgdGFyZ2V0PSJfdG9wIj5Tb3VyY2UgY29kZTwvYT48L2NvZGU+PC90ZD4KPHRkPiB8IDwvdGQ+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iIyIgdGFyZ2V0PSJfdG9wIiBpZD0iaWQ2NTgzODIiIG9uY2xpY2s9InRvZ2dsZV9lbGVtZW50KCAnZXhhbXBsZTMwLW91dHB1dCcsICdpZDY1ODM4MicsICdTaG93IG91dHB1dCcsICdIaWRlIG91dHB1dCcgKTsgcmV0dXJuIGZhbHNlOyI+U2hvdyBvdXRwdXQ8L2E+PC9jb2RlPjwvdGQ+CjwvdHI+PC90YWJsZT4KPHByZSBjbGFzcz0iZXhhbXBsZS1vdXRwdXQiIGlkPSJleGFtcGxlMzAtb3V0cHV0Ij4mZ3Q7IGV4YW1wbGUKUnVubmluZyAxIHRlc3QgY2FzZS4uLgp0ZXN0LmNwcCgxMyk6IGVycm9yIGluICJ0ZXN0X2lzX2V2ZW4iOiBjaGVjayBpc19ldmVuKCBpICkgZmFpbGVkIGZvciAoIDE3ICkKCioqKiAxIGZhaWx1cmUgZGV0ZWN0ZWQgaW4gdGVzdCBzdWl0ZSAiZXhhbXBsZSIKPC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgIFRvIHVzZSBzZWNvbmQgbGF5ZXIgeW91ciBwcmVkaWNhdGUgaGF2ZSB0byByZXR1cm4KICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5ib29zdDo6dGVzdF90b29sczo6cHJlZGljYXRlX3Jlc3VsdDwvY29kZT4uIFRoaXMgY2xhc3MgZW5jYXBzdWxhdGVzIGJvb2xlYW4gcmVzdWx0IHZhbHVlIGFsb25nCiAgIHdpdGggYW55IGVycm9yIG9yIGluZm9ybWF0aW9uIG1lc3NhZ2UgeW91IG9wdCB0byByZXBvcnQuCiAgPC9wPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgIFVzdWFsbHkgeW91IGNvbnN0cnVjdCB0aGUgaW5zdGFuY2Ugb2YgY2xhc3MgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5ib29zdDo6dGVzdF90b29sczo6cHJlZGljYXRlX3Jlc3VsdDwvY29kZT4gaW5zaWRlIHlvdXIKICAgcHJlZGljYXRlIGZ1bmN0aW9uIGFuZCByZXR1cm4gaXQgYnkgdmFsdWUuIFRoZSBjb25zdHJ1Y3RvciBleHBlY3RzIG9uZSBhcmd1bWVudCAtIHRoZSBib29sZWFuIHJlc3VsdCB2YWx1ZS4gVGhlCiAgIGNvbnN0cnVjdG9yIGlzIGltcGxpY2l0LCBzbyB5b3UgY2FuIHNpbXBseSByZXR1cm4gYm9vbGVhbiB2YWx1ZSBmcm9tIHlvdXIgcHJlZGljYXRlIGFuZAogICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJvb3N0Ojp0ZXN0X3Rvb2xzOjpwcmVkaWNhdGVfcmVzdWx0PC9jb2RlPiBpcyBjb25zdHJ1Y3RlZCBhdXRvbWF0aWNhbGx5IHRvIGhvbGQgeW91ciB2YWx1ZSBhbmQgZW1wdHkKICAgbWVzc2FnZS4gWW91IGNhbiBhbHNvIGFzc2lnbiBib29sZWFuIHZhbHVlIHRvIHRoZSBjb25zdHJ1Y3RlZCBpbnN0YW5jZS4gWW91IGNhbiBjaGVjayB0aGUgY3VycmVudCBwcmVkaWNhdGUgdmFsdWUgYnkKICAgdXNpbmcgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5vcGVyYXRvciE8L2NvZGU+KCkgb3IgZGlyZWN0bHkgYWNjZXNzaW5nIHB1YmxpYyByZWFkLW9ubHkgcHJvcGVydHkgcF9wcmVkaWNhdGVfdmFsdWUuIFRoZQogICBlcnJvciBtZXNzYWdlIGlzIHN0b3JlZCBpbiBwdWJsaWMgcmVhZC13cml0ZSBwcm9wZXJ0eSBwX21lc3NhZ2UuCiAgPC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlIj4KPGEgbmFtZT0idXRmLnRlc3RpbmctdG9vbHMuY3VzdG9tLXByZWRpY2F0ZS5leGFtcGxlMzEiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgMzcuoEN1c3RvbSBwcmVkaWNhdGUgc3VwcG9ydCB1c2luZyBjbGFzcyBwcmVkaWNhdGVfcmVzdWx0PC9iPjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEJPT1NUX1RFU1RfTU9EVUxFIGV4YW1wbGUKI2luY2x1ZGUgJmx0O2Jvb3N0L3Rlc3QvaW5jbHVkZWQvdW5pdF90ZXN0LmhwcCZndDsKCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgpib29zdDo6dGVzdF90b29sczo6cHJlZGljYXRlX3Jlc3VsdApjb21wYXJlX2xpc3RzKCBzdGQ6Omxpc3QmbHQ7aW50Jmd0OyBjb25zdCZhbXA7IGwxLCBzdGQ6Omxpc3QmbHQ7aW50Jmd0OyBjb25zdCZhbXA7IGwyICkKewogICAgaWYoIGwxLnNpemUoKSAhPSBsMi5zaXplKCkgKSB7CiAgICAgICAgYm9vc3Q6OnRlc3RfdG9vbHM6OnByZWRpY2F0ZV9yZXN1bHQgcmVzKCBmYWxzZSApOwoKICAgICAgICByZXMubWVzc2FnZSgpICZsdDsmbHQ7ICJEaWZmZXJlbnQgc2l6ZXMgWyIgJmx0OyZsdDsgbDEuc2l6ZSgpICZsdDsmbHQ7ICIhPSIgJmx0OyZsdDsgbDIuc2l6ZSgpICZsdDsmbHQ7ICJdIjsKCiAgICAgICAgcmV0dXJuIHJlczsKICAgIH0KCiAgICByZXR1cm4gdHJ1ZTsKfQoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KCkJPT1NUX0FVVE9fVEVTVF9DQVNFKCB0ZXN0X2xpc3RfY29tcGFyaXpvbiApCnsKICAgIHN0ZDo6bGlzdCZsdDtpbnQmZ3Q7IGwxLCBsMjsKICAgIGwxLnB1c2hfYmFjayggMSApOwogICAgbDEucHVzaF9iYWNrKCAyICk7CgogICAgQk9PU1RfQ0hFQ0soIGNvbXBhcmVfbGlzdHMoIGwxLCBsMiApICk7Cn0KCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgo8L3ByZT4KPHRhYmxlIGNsYXNzPSJzaW1wbGVsaXN0IiBib3JkZXI9IjAiIHN1bW1hcnk9IlNpbXBsZSBsaXN0Ij48dHI+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iLi4vLi4vLi4vc3JjL2V4YW1wbGVzL2V4YW1wbGUzMS5jcHAiIHRhcmdldD0iX3RvcCI+U291cmNlIGNvZGU8L2E+PC9jb2RlPjwvdGQ+Cjx0ZD4gfCA8L3RkPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9IiMiIHRhcmdldD0iX3RvcCIgaWQ9ImlkNjU4NTI1IiBvbmNsaWNrPSJ0b2dnbGVfZWxlbWVudCggJ2V4YW1wbGUzMS1vdXRwdXQnLCAnaWQ2NTg1MjUnLCAnU2hvdyBvdXRwdXQnLCAnSGlkZSBvdXRwdXQnICk7IHJldHVybiBmYWxzZTsiPlNob3cgb3V0cHV0PC9hPjwvY29kZT48L3RkPgo8L3RyPjwvdGFibGU+CjxwcmUgY2xhc3M9ImV4YW1wbGUtb3V0cHV0IiBpZD0iZXhhbXBsZTMxLW91dHB1dCI+UnVubmluZyAxIHRlc3QgY2FzZS4uLgp0ZXN0LmNwcCgyOCk6IGVycm9yIGluICJ0ZXN0X2xpc3RfY29tcGFyaXpvbiI6IGNoZWNrIGNvbXBhcmVfbGlzdHMoIGwxLCBsMiApIGZhaWxlZC4gRGlmZmVyZW50IHNpemVzIFsyIT0wXQoKKioqIDEgZmFpbHVyZSBkZXRlY3RlZCBpbiB0ZXN0IHN1aXRlICJleGFtcGxlIgo8L3ByZT4KPC9kaXY+CjwvZGl2Pgo8YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPgo8L2Rpdj4KPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgo8dGQgYWxpZ249ImxlZnQiPjwvdGQ+Cjx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCCpIDIwMDEtMjAwNyBHZW5uYWRpeSBSb3plbnRhbDwvZGl2PjwvdGQ+CjwvdHI+PC90YWJsZT4KPGhyPgo8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KPGEgYWNjZXNza2V5PSJwIiBocmVmPSJvdXRwdXQtdGVzdC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL3Rlc3RpbmctdG9vbHMuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy91cC5wbmciIGFsdD0iVXAiPjwvYT48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9Ii4uLy4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZmxvYXRpbmdfcG9pbnRfY29tcGFyaXNvbi5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=