PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KPHRpdGxlPkdsb2JhbCBmaXh0dXJlPC90aXRsZT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9zdHlsZS9zdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIj4KPGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sIiB0aXRsZT0iQm9vc3QgVGVzdCBMaWJyYXJ5Ij4KPGxpbmsgcmVsPSJ1cCIgaHJlZj0iLi4vZml4dHVyZS5odG1sIiB0aXRsZT0iRml4dHVyZXMgb3IgbGV0IG1lIHJlcGVhdCBteXNlbGYiPgo8bGluayByZWw9InByZXYiIGhyZWY9InRlc3Qtc3VpdGUtc2hhcmVkLmh0bWwiIHRpdGxlPSJUZXN0IHN1aXRlIGxldmVsIGZpeHR1cmUiPgo8bGluayByZWw9Im5leHQiIGhyZWY9Ii4uL3Rlc3Qtb3V0cHV0Lmh0bWwiIHRpdGxlPSJUZXN0IE91dHB1dCBvciBsZXQncyBzZWUgd2hhdCB5b3UgZ290IGZvciB5b3VyIG1vbmV5Ij4KPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdDEuMiIgc3JjPSIuLi8uLi8uLi8uLi9qcy9ib29zdC10ZXN0LmpzIj48L3NjcmlwdD4KPC9oZWFkPgo8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgo8dGQgd2lkdGg9IjEwJSI+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbCI+PGltZyBhbHQ9IkhvbWUiIHdpZHRoPSIyMjkiIGhlaWdodD0iNjEiIGJvcmRlcj0iMCIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Rlc3QvZG9jYm9vay9pbWcvYm9vc3QudGVzdC5sb2dvLnBuZyI+PC9hPjwvdGQ+Cjx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiPiAmZ3Q7IDxhIGhyZWY9Ii4uLy4uLy4uL3V0Zi5odG1sIj5UaGUgVW5pdCBUZXN0IEZyYW1ld29yazwvYT4gJmd0OyA8YSBocmVmPSIuLi8uLi91c2VyLWd1aWRlLmh0bWwiPlVzZXIncyBndWlkZTwvYT48YSBocmVmPSIuLi8uLi90ZXN0aW5nLXRvb2xzLmh0bWwiPgogICAgICAmZ3Q7CiAgICAgIDwvYT48YSBocmVmPSIuLi9maXh0dXJlLmh0bWwiPkZpeHR1cmVzPC9hPjxhIGhyZWY9Ii4uL3Rlc3Qtb3V0cHV0Lmh0bWwiPgogICAgICAmZ3Q7CiAgICAgIDwvYT48Yj5HbG9iYWwgZml4dHVyZTwvYj4KPC90ZD4KPHRkPjxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgo8YSBocmVmPSJ0ZXN0LXN1aXRlLXNoYXJlZC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBocmVmPSIuLi90ZXN0LW91dHB1dC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KPC9kaXY+PC90ZD4KPC90cj48L3RhYmxlPgo8aHI+CjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj4KPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg1IGNsYXNzPSJ0aXRsZSI+CjxhIG5hbWU9InV0Zi51c2VyLWd1aWRlLmZpeHR1cmUuZ2xvYmFsIj48L2E+R2xvYmFsIGZpeHR1cmU8L2g1PjwvZGl2PjwvZGl2PjwvZGl2Pgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgIEFueSBnbG9iYWwgaW5pdGlhbGl6YXRpb24gdGhhdCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgZXZlcnkgdGltZSB0ZXN0aW5nIGJlZ2lucyBvciBhIGdsb2JhbCBjbGVhbnVwIHRoYXQgaXMgdG8gYmUKICAgcGVyZm9ybWVkIG9uY2UgdGVzdGluZyBpcyBmaW5pc2hlZCBpcyBjYWxsZWQgYSBnbG9iYWwgZml4dHVyZS4gVGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5VVEY8L2Fjcm9ueW0+IGdsb2JhbCBmaXh0dXJlIGRlc2lnbiBpcyBiYXNlZCBvbiBhCiAgIGdlbmVyaWMgdGVzdCBmaXh0dXJlIG1vZGVsIGFuZCBpcyBzdXBwb3J0ZWQgYnkgdGhlIHV0aWxpdHkgY2xhc3MgYm9vc3Q6OnVuaXRfdGVzdDo6Z2xvYmFsX2ZpeHR1cmUuIFRoZSBnbG9iYWwKICAgZml4dHVyZSBkZXNpZ24gYWxsb3dzIGFueSBudW1iZXIgb2YgZ2xvYmFsIGZpeHR1cmVzIHRvIGJlIGRlZmluZWQgaW4gYW55IHRlc3QgZmlsZSB0aGF0IGNvbnN0aXR1dGVzIGEgdGVzdCBtb2R1bGUuCiAgIFRob3VnaCBzb21lIGluaXRpYWxpemF0aW9uIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdGVzdCBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIHRoZXJlIGFyZSBzZXZlcmFsIAogICByZWFzb25zIHRvIHByZWZlciB0aGUgZ2xvYmFsIGZpeHR1cmUgYXBwcm9hY2g6CiAgPC9wPgo8ZGl2IHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iZGlzYyI+CjxsaT5UaGVyZSBpcyBubyBwbGFjZSBmb3IgY2xlYW51cC90ZWFyZG93biBvcGVyYXRpb25zIGluIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi48L2xpPgo8bGk+CiAgICAgVW5saWtlIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgdGhlIGdsb2JhbCBmaXh0dXJlIHNldHVwIG1ldGhvZCBpbnZvY2F0aW9uIGlzIGd1YXJkZWQgYnkgdGhlIGV4ZWN1dGlvbgogICAgIG1vbml0b3IuIFRoYXQgbWVhbnMgdGhhdCBhbGwgdW5jYXVnaHQgZXJyb3JzIHRoYXQgb2NjdXIgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFyZSBwcm9wZXJseSByZXBvcnRlZC4KICAgIDwvbGk+CjxsaT4KICAgICBBbnkgbnVtYmVyIG9mIGRpZmZlcmVudCBnbG9iYWwgZml4dHVyZXMgY2FuIGJlIGRlZmluZWQsIHdoaWNoIGFsbG93cyB5b3UgdG8gc3BsaXQgaW5pdGlhbGl6YXRpb24gY29kZSBieQogICAgIGNhdGVnb3J5LgogICAgPC9saT4KPGxpPgogICAgIFRoZSBmaXh0dXJlIGFsbG93cyB5b3UgdG8gcGxhY2UgbWF0Y2hpbmcgc2V0dXAvdGVhcmRvd24gY29kZSBpbiBjbG9zZSB2aWNpbml0eSBpbiB5b3VyIHRlc3QgbW9kdWxlIGNvZGUuCiAgICA8L2xpPgo8bGk+CiAgICAgSWYgdGhlIHdob2xlIHRlc3QgdHJlZSBpcyBjb25zdHJ1Y3RlZCBhdXRvbWF0aWNhbGx5IHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyBlbXB0eSBhbmQgYXV0by1nZW5lcmF0ZWQgYnkKICAgICB0aGUgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlVURjwvYWNyb255bT4uIFRvIGludHJvZHVjZSB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gY2FuIGJlIG1vcmUgd29yayB0aGFuIHRoZSB1c2Ugb2YgYSBnbG9iYWwgZml4dHVyZSBmYWNpbGl0eSwKICAgICB3aGlsZSBnbG9iYWwgZml4dHVyZSBpcyBtb3JlIHRvIHRoZSBwb2ludC4KICAgIDwvbGk+CjxsaT4KICAgICBTaW5jZSBhbGwgZml4dHVyZXMgZm9sbG93IHRoZSBzYW1lIGdlbmVyaWMgbW9kZWwgeW91IGNhbiBlYXNpbHkgc3dpdGNoIGZyb20gbG9jYWwgcGVyIHRlc3QgY2FzZSBmaXh0dXJlcyB0bwogICAgIHRoZSBnbG9iYWwgb25lLgogICAgPC9saT4KPGxpPgogICAgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGludGVyYWN0aXZlIHRlc3QgcnVubmVyIChub24tc3VwcGxpZWQgeWV0KSBnbG9iYWwgdGVzdCBmaXh0dXJlcyBhcmUgYXBwbGllZCB0byBldmVyeSBydW4sCiAgICAgd2hpbGUgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gaXMgZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBhIHRlc3QgbW9kdWxlIHN0YXJ0dXAgKGp1c3QgbWFrZSBzdXJlIHRoYXQKICAgICBpdCdzIHdoYXQgeW91IHJlYWxseSB3YW50KS4KICAgIDwvbGk+CjwvdWw+PC9kaXY+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgVG8gZGVmaW5lIGEgZ2xvYmFsIHRlc3QgbW9kdWxlIGZpeHR1cmUgeW91IG5lZWQgdG8gaW1wbGVtZW50IGEgY2xhc3MgdGhhdCBtYXRjaGVkIGdlbmVyaWMgZml4dHVyZSBtb2RlbCBhbmQKICAgcGFzc2VkIGl0IGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBtYWNybyBCT09TVF9HTE9CQUxfRklYVFVSRS4KICA8L3A+CjxwcmUgY2xhc3M9ImlubGluZS1zeW5vcHNpcyI+CjxhIG5hbWU9IkJPT1NUX0dMT0JBTF9GSVhUVVJFIj48L2E+Qk9PU1RfR0xPQkFMX0ZJWFRVUkUoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+Zml4dXJlX25hbWU8L2VtPjwvc3Bhbj4pPC9wcmU+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgVGhlIHN0YXRlbWVudCwgdGhhdCBwZXJmb3JtcyBnbG9iYWwgZml4dHVyZSBkZWZpbml0aW9uLCBoYXMgdG8gcmVzaWRlIGF0IGEgdGVzdCBmaWxlIHNjb3BlLgogIDwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZSI+CjxhIG5hbWU9InV0Zi51c2VyLWd1aWRlLmZpeHR1cmUuZ2xvYmFsLmV4YW1wbGUyMCI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaAyNS6gR2xvYmFsIGZpeHR1cmU8L2I+PC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgQk9PU1RfVEVTVF9NT0RVTEUgZXhhbXBsZQojaW5jbHVkZSAmbHQ7Ym9vc3QvdGVzdC9pbmNsdWRlZC91bml0X3Rlc3QuaHBwJmd0OwojaW5jbHVkZSAmbHQ7aW9zdHJlYW0mZ3Q7CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwoKc3RydWN0IE15Q29uZmlnIHsKICAgIE15Q29uZmlnKCkgICB7IHN0ZDo6Y291dCAmbHQ7Jmx0OyAiZ2xvYmFsIHNldHVwXG4iOyB9CiAgICB+TXlDb25maWcoKSAgeyBzdGQ6OmNvdXQgJmx0OyZsdDsgImdsb2JhbCB0ZWFyZG93blxuIjsgfQp9OwoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KCkJPT1NUX0dMT0JBTF9GSVhUVVJFKCBNeUNvbmZpZyApOwoKQk9PU1RfQVVUT19URVNUX0NBU0UoIHRlc3RfY2FzZSApCnsKICAgIEJPT1NUX0NIRUNLKCB0cnVlICk7Cn0KCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgo8L3ByZT4KPHRhYmxlIGNsYXNzPSJzaW1wbGVsaXN0IiBib3JkZXI9IjAiIHN1bW1hcnk9IlNpbXBsZSBsaXN0Ij48dHI+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vc3JjL2V4YW1wbGVzL2V4YW1wbGUyMC5jcHAiIHRhcmdldD0iX3RvcCI+U291cmNlIGNvZGU8L2E+PC9jb2RlPjwvdGQ+Cjx0ZD4gfCA8L3RkPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9IiMiIHRhcmdldD0iX3RvcCIgaWQ9ImlkNjUzMjE4IiBvbmNsaWNrPSJ0b2dnbGVfZWxlbWVudCggJ2V4YW1wbGUyMC1vdXRwdXQnLCAnaWQ2NTMyMTgnLCAnU2hvdyBvdXRwdXQnLCAnSGlkZSBvdXRwdXQnICk7IHJldHVybiBmYWxzZTsiPlNob3cgb3V0cHV0PC9hPjwvY29kZT48L3RkPgo8L3RyPjwvdGFibGU+CjxwcmUgY2xhc3M9ImV4YW1wbGUtb3V0cHV0IiBpZD0iZXhhbXBsZTIwLW91dHB1dCI+Jmd0OyBleGFtcGxlCmdsb2JhbCBzZXR1cApSdW5uaW5nIDEgdGVzdCBjYXNlLi4uCmdsb2JhbCB0ZWFyZG93bgoKKioqIE5vIGVycm9ycyBkZXRlY3RlZAo8L3ByZT4KPC9kaXY+CjwvZGl2Pgo8YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPgo8L2Rpdj4KPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgo8dGQgYWxpZ249ImxlZnQiPjwvdGQ+Cjx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCCpIDIwMDEtMjAwNyBHZW5uYWRpeSBSb3plbnRhbDwvZGl2PjwvdGQ+CjwvdHI+PC90YWJsZT4KPGhyPgo8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KPGEgYWNjZXNza2V5PSJwIiBocmVmPSJ0ZXN0LXN1aXRlLXNoYXJlZC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL2ZpeHR1cmUuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy91cC5wbmciIGFsdD0iVXAiPjwvYT48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iLi4vdGVzdC1vdXRwdXQuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+CjwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K