PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CjxodG1sPgogIDxoZWFkPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CiAgICA8dGl0bGU+CiAgICAgIFRlbXBsYXRlZCBDaXJjdWxhciBCdWZmZXIgQ29udGFpbmVyCiAgICA8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9ib29zdC5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8dGFibGUgaWQ9InRpdGxlIiBib3JkZXI9IjAiPgogICAgICA8dHI+CiAgICAgICAgPHRkPgogICAgICAgICAgPGgxPgogICAgICAgICAgICBUZW1wbGF0ZWQgQ2lyY3VsYXIgQnVmZmVyIENvbnRhaW5lcgogICAgICAgICAgPC9oMT4KICAgICAgICAgIDxoMT4KICAgICAgICAgICAgY2lyY3VsYXJfYnVmZmVyJmx0O1QsIEFsbG9jJmd0OwogICAgICAgICAgPC9oMT4KICAgICAgICA8L3RkPgogICAgICAgIDx0ZD4KICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uLy4uLyI+PGltZyBzcmM9Ii4uLy4uLy4uL2Jvb3N0LnBuZyIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgYm9yZGVyPSIwIiBhbHQ9IkJvb3N0Ij48L2E+CiAgICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgIDwvdGFibGU+CiAgICA8aDI+CiAgICAgIENvbnRlbnRzCiAgICA8L2gyPgogICAgPGRsPgogICAgICA8ZHQ+CiAgICAgICAgPGEgaHJlZj0iI2Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjwvYT4KICAgICAgPC9kdD4KICAgICAgPGR0PgogICAgICAgIDxhIGhyZWY9IiNicmllZmV4YW1wbGUiPkludHJvZHVjdG9yeSBFeGFtcGxlPC9hPgogICAgICA8L2R0PgogICAgICA8ZHQ+CiAgICAgICAgPGEgaHJlZj0iI3N5bm9wc2lzIj5TeW5vcHNpczwvYT4KICAgICAgPC9kdD4KICAgICAgPGR0PgogICAgICAgIDxhIGhyZWY9IiNyYXRpb25hbGUiPlJhdGlvbmFsZTwvYT4KICAgICAgPC9kdD4KICAgICAgPGRkPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPGEgaHJlZj0iI3RocmVhZHNhZmV0eSI+VGhyZWFkLVNhZmV0eTwvYT4KICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxhIGhyZWY9IiNvdmVyd3JpdGUiPk92ZXJ3cml0ZSBPcGVyYXRpb248L2E+CiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8YSBocmVmPSIjZnVsbGJ1ZmZlciI+V3JpdGluZyB0byBhIEZ1bGwgQnVmZmVyPC9hPgogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPGEgaHJlZj0iI2VtcHR5YnVmZmVyIj5SZWFkaW5nL1JlbW92aW5nIGZyb20gYW4gRW1wdHkgQnVmZmVyPC9hPgogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPGEgaHJlZj0iI2l0ZXJhdG9yaW52YWxpZGF0aW9uIj5JdGVyYXRvciBJbnZhbGlkYXRpb248L2E+CiAgICAgICAgICA8L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvZGQ+CiAgICAgIDxkdD4KICAgICAgICA8YSBocmVmPSIjY2F2ZWF0cyI+Q2F2ZWF0czwvYT4KICAgICAgPC9kdD4KICAgICAgPGR0PgogICAgICAgIDxhIGhyZWY9IiNkZWJ1ZyI+RGVidWcgU3VwcG9ydDwvYT4KICAgICAgPC9kdD4KICAgICAgPGR0PgogICAgICAgIDxhIGhyZWY9IiNpbnRlcnByb2Nlc3MiPkNvbXBhdGliaWxpdHkgd2l0aCBJbnRlcnByb2Nlc3MgbGlicmFyeTwvYT4KICAgICAgPC9kdD4KICAgICAgPGR0PgogICAgICAgIDxhIGhyZWY9IiNleGFtcGxlcyI+TW9yZSBFeGFtcGxlczwvYT4KICAgICAgPC9kdD4KICAgICAgPGR0PgogICAgICAgIDxhIGhyZWY9IiNoZWFkZXIiPkhlYWRlciBGaWxlczwvYT4KICAgICAgPC9kdD4KICAgICAgPGR0PgogICAgICAgIDxhIGhyZWY9IiNtb2RlbCI+TW9kZWxsZWQgQ29uY2VwdHM8L2E+CiAgICAgIDwvZHQ+CiAgICAgIDxkdD4KICAgICAgICA8YSBocmVmPSIjcGFyYW1ldGVycyI+VGVtcGxhdGUgUGFyYW1ldGVyczwvYT4KICAgICAgPC9kdD4KICAgICAgPGR0PgogICAgICAgIDxhIGhyZWY9IiN0eXBlcyI+UHVibGljIFR5cGVzPC9hPgogICAgICA8L2R0PgogICAgICA8ZHQ+CiAgICAgICAgPGEgaHJlZj0iI2NvbnN0cnVjdG9ycyI+Q29uc3RydWN0b3JzIGFuZCBEZXN0cnVjdG9yPC9hPgogICAgICA8L2R0PgogICAgICA8ZHQ+CiAgICAgICAgPGEgaHJlZj0iI21ldGhvZHMiPlB1YmxpYyBNZW1iZXIgRnVuY3Rpb25zPC9hPgogICAgICA8L2R0PgogICAgICA8ZHQ+CiAgICAgICAgPGEgaHJlZj0iI2Z1bmN0aW9ucyI+U3RhbmRhbG9uZSBGdW5jdGlvbnM8L2E+CiAgICAgIDwvZHQ+CiAgICAgIDxkdD4KICAgICAgICA8YSBocmVmPSIjbm90ZXMiPk5vdGVzPC9hPgogICAgICA8L2R0PgogICAgICA8ZHQ+CiAgICAgICAgPGEgaHJlZj0iI3NlZSI+U2VlIGFsc288L2E+CiAgICAgIDwvZHQ+CiAgICAgIDxkdD4KICAgICAgICA8YSBocmVmPSIjYWNrIj5BY2tub3dsZWRnZW1lbnRzPC9hPgogICAgICA8L2R0PgogICAgICA8ZHQ+CiAgICAgICAgPGEgaHJlZj0iI3JlbG5vdGVzIj5SZWxlYXNlIE5vdGVzPC9hPgogICAgICA8L2R0PgogICAgPC9kbD4KICAgIDx0YWJsZSBpZD0idGFibGVfZmlndXJlIiBhbGlnbj0icmlnaHQiIGJvcmRlcj0iMCI+CiAgICAgIDx0cj4KICAgICAgICA8dGQ+CiAgICAgICAgICA8aW1nIHNyYz0iY2lyY3VsYXJfYnVmZmVyLnBuZyIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIzMzIiIGFsdD0iQ2lyY3VsYXIgQnVmZmVyIj4KICAgICAgICA8L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHdpZHRoPSIzMDAiPgogICAgICAgICAgPHRhYmxlIGlkPSJ0YWJsZV9maWd1cmVfZGVzYyIgY2VsbHBhZGRpbmc9IjUiIGFsaWduPSJyaWdodCIgYm9yZGVyPSIwIj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+CiAgICAgICAgICAgICAgICA8Yj5GaWd1cmU6PC9iPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4KICAgICAgICAgICAgICAgIFRoZSBjaXJjdWxhciBidWZmZXIgKGZvciBzb21lb25lIGtub3duIGFzIDxpPnJpbmc8L2k+IG9yIDxpPmN5Y2xpYyBidWZmZXI8L2k+KS4KICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KICAgIDxoMj4KICAgICAgPGEgbmFtZT0iZGVzY3JpcHRpb24iIGlkPSJkZXNjcmlwdGlvbiI+RGVzY3JpcHRpb248L2E+CiAgICA8L2gyPgogICAgPHA+CiAgICAgIEluIGdlbmVyYWwgdGhlIHRlcm0gPGk+Y2lyY3VsYXIgYnVmZmVyPC9pPiByZWZlcnMgdG8gYW4gYXJlYSBpbiBtZW1vcnkgd2hpY2ggaXMgdXNlZCB0byBzdG9yZSBpbmNvbWluZyBkYXRhLiBXaGVuCiAgICAgIHRoZSBidWZmZXIgaXMgZmlsbGVkLCBuZXcgZGF0YSBpcyB3cml0dGVuIHN0YXJ0aW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciBhbmQgb3ZlcndyaXRpbmcgdGhlIG9sZC4gKEFsc28KICAgICAgc2VlIHRoZSBGaWd1cmUuKQogICAgPC9wPgogICAgPHA+CiAgICAgIFRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGlzIGEgU1RMIGNvbXBsaWFudCBjb250YWluZXIuIEl0IGlzIGEga2luZCBvZiBzZXF1ZW5jZSBzaW1pbGFyIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvTGlzdC5odG1sIj5zdGQ6Omxpc3Q8L2E+PC9jb2RlPiBvciA8Y29kZT48YSBocmVmPQogICAgICAiaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0RlcXVlLmh0bWwiPnN0ZDo6ZGVxdWU8L2E+PC9jb2RlPi4gSXQgc3VwcG9ydHMgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMsIGNvbnN0YW50CiAgICAgIHRpbWUgaW5zZXJ0IGFuZCBlcmFzZSBvcGVyYXRpb25zIGF0IHRoZSBiZWdpbm5pbmcgb3IgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFuZCBpbnRlcm9wZXJhYmlsaXR5IHdpdGgKICAgICAgPGNvZGU+c3RkPC9jb2RlPiBhbGdvcml0aG1zLiBUaGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBpcyBlc3BlY2lhbGx5IGRlc2lnbmVkIHRvIHByb3ZpZGUgZml4ZWQgY2FwYWNpdHkKICAgICAgc3RvcmFnZS4gV2hlbiBpdHMgY2FwYWNpdHkgaXMgZXhoYXVzdGVkLCBuZXdseSBpbnNlcnRlZCBlbGVtZW50cyB3aWxsIGNhdXNlIGVsZW1lbnRzIGVpdGhlciBhdCB0aGUgYmVnaW5uaW5nIG9yCiAgICAgIGVuZCBvZiB0aGUgYnVmZmVyIChkZXBlbmRpbmcgb24gd2hhdCBpbnNlcnQgb3BlcmF0aW9uIGlzIHVzZWQpIHRvIGJlIG92ZXJ3cml0dGVuLgogICAgPC9wPgogICAgPHA+CiAgICAgIFRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IG9ubHkgYWxsb2NhdGVzIG1lbW9yeSB3aGVuIGNyZWF0ZWQsIHdoZW4gdGhlIGNhcGFjaXR5IGlzIGFkanVzdGVkIGV4cGxpY2l0bHksIG9yCiAgICAgIGFzIG5lY2Vzc2FyeSB0byBhY2NvbW1vZGF0ZSByZXNpemluZyBvciBhc3NpZ24gb3BlcmF0aW9ucy4gT24gdGhlIG90aGVyIGhhbmQsIHRoZXJlIGlzIGFsc28gYSA8Y29kZT48YSBocmVmPQogICAgICAic3BhY2Vfb3B0aW1pemVkLmh0bWwiPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2E+PC9jb2RlPiBhdmFpbGFibGUuIEl0IGlzIGFuIGFkYXB0b3Igb2YgdGhlCiAgICAgIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gd2hpY2ggZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5IGF0IG9uY2Ugd2hlbiBjcmVhdGVkLCByYXRoZXIgaXQgYWxsb2NhdGVzIG1lbW9yeSBhcwogICAgICBuZWVkZWQuCiAgICA8L3A+CiAgICA8aDI+CiAgICAgIDxhIG5hbWU9ImJyaWVmZXhhbXBsZSIgaWQ9ImJyaWVmZXhhbXBsZSI+SW50cm9kdWN0b3J5IEV4YW1wbGU8L2E+CiAgICA8L2gyPgogICAgPHA+CiAgICAgIEEgYnJpZWYgZXhhbXBsZSB1c2luZyB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPjoKICAgIDwvcD4KICAgIDxwcmU+CiAgICNpbmNsdWRlICZsdDtib29zdC9jaXJjdWxhcl9idWZmZXIuaHBwJmd0OwoKICAgaW50IG1haW4oaW50IC8qYXJnYyovLCBjaGFyKiAvKmFyZ3YqL1tdKSB7CgogICAgICAvLyBDcmVhdGUgYSBjaXJjdWxhciBidWZmZXIgd2l0aCBhIGNhcGFjaXR5IGZvciAzIGludGVnZXJzLgogICAgICBib29zdDo6Y2lyY3VsYXJfYnVmZmVyJmx0O2ludCZndDsgY2IoMyk7CgogICAgICAvLyBJbnNlcnQgc29tZSBlbGVtZW50cyBpbnRvIHRoZSBidWZmZXIuCiAgICAgIGNiLnB1c2hfYmFjaygxKTsKICAgICAgY2IucHVzaF9iYWNrKDIpOwogICAgICBjYi5wdXNoX2JhY2soMyk7CgogICAgICBpbnQgYSA9IGNiWzBdOyAgLy8gYSA9PSAxCiAgICAgIGludCBiID0gY2JbMV07ICAvLyBiID09IDIKICAgICAgaW50IGMgPSBjYlsyXTsgIC8vIGMgPT0gMwoKICAgICAgLy8gVGhlIGJ1ZmZlciBpcyBmdWxsIG5vdywgcHVzaGluZyBzdWJzZXF1ZW50CiAgICAgIC8vIGVsZW1lbnRzIHdpbGwgb3ZlcndyaXRlIHRoZSBmcm9udC1tb3N0IGVsZW1lbnRzLgoKICAgICAgY2IucHVzaF9iYWNrKDQpOyAgLy8gT3ZlcndyaXRlIDEgd2l0aCA0LgogICAgICBjYi5wdXNoX2JhY2soNSk7ICAvLyBPdmVyd3JpdGUgMiB3aXRoIDUuCgogICAgICAvLyBUaGUgYnVmZmVyIG5vdyBjb250YWlucyAzLCA0IGFuZCA1LgoKICAgICAgYSA9IGNiWzBdOyAgLy8gYSA9PSAzCiAgICAgIGIgPSBjYlsxXTsgIC8vIGIgPT0gNAogICAgICBjID0gY2JbMl07ICAvLyBjID09IDUKCiAgICAgIC8vIEVsZW1lbnRzIGNhbiBiZSBwb3BwZWQgZnJvbSBlaXRoZXIgdGhlIGZyb250IG9yIHRoZSBiYWNrLgoKICAgICAgY2IucG9wX2JhY2soKTsgIC8vIDUgaXMgcmVtb3ZlZC4KICAgICAgY2IucG9wX2Zyb250KCk7IC8vIDMgaXMgcmVtb3ZlZC4KCiAgICAgIGludCBkID0gY2JbMF07ICAvLyBkID09IDQKCiAgICAgIHJldHVybiAwOwogICB9CjwvcHJlPgogICAgPGgyPgogICAgICA8YSBuYW1lPSJzeW5vcHNpcyIgaWQ9InN5bm9wc2lzIj5TeW5vcHNpczwvYT4KICAgIDwvaDI+CiAgICA8ZGl2IGlkPSJzcmNkb2Nfc3lub3BzaXMiPgogICAgICA8dGFibGUgaWQ9InRhYmxlX3N5bm9wc2lzIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIxMCI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8cHJlPgpuYW1lc3BhY2UgYm9vc3QgewoKdGVtcGxhdGUgJmx0O2NsYXNzIDxhIGhyZWY9IiN0ZW1wbGF0ZXBhcmFtX1QiPlQ8L2E+LCBjbGFzcyA8YSBocmVmPSIjdGVtcGxhdGVwYXJhbV9BbGxvYyI+QWxsb2M8L2E+Jmd0OwpjbGFzcyBjaXJjdWxhcl9idWZmZXIKewpwdWJsaWM6CiAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2M6OnZhbHVlX3R5cGUgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWNiZGQ3Y2E4N2UxNDdjMDhjZDJiZTI2N2VlZmQ2NTQwIj52YWx1ZV90eXBlPC9hPjsKICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvYzo6cG9pbnRlciA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNGZmOTE3ZjhhNjEzMWVjMThlOTE2MDY3Mjc1OTJhOWMiPnBvaW50ZXI8L2E+OwogICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jOjpjb25zdF9wb2ludGVyIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5MGY3YzZiY2I2MjRhZDUwN2RlNTQ2MzY2ZjQ5MDI4YSI+Y29uc3RfcG9pbnRlcjwvYT47CiAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2M6OnJlZmVyZW5jZSA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZjM4YTliYzY0ZDg0NzU3YzY2MWMyNTQyZmY5YTdmNjUiPnJlZmVyZW5jZTwvYT47CiAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTgzOTcxOTEwOTJmNWJhY2VlOTkxYjYyM2NhNGI5MTAiPmNvbnN0X3JlZmVyZW5jZTwvYT47CiAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNTMxM2U3MjNmYTg1ZDczZGI1ODI2ZjhiNzIyYWEyYTkiPmRpZmZlcmVuY2VfdHlwZTwvYT47CiAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2M6OnNpemVfdHlwZSA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOWJhMTJjMDE0MmEyMWE3ZDk2MDg3N2MyMmZhM2VhMDAiPnNpemVfdHlwZTwvYT47CiAgIHR5cGVkZWYgQWxsb2MgPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNGUwN2M2ZGRmZTg5ZGViZTM4NGU1OWJlZDA2ZTdjYjciPmFsbG9jYXRvcl90eXBlPC9hPjsKICAgdHlwZWRlZiA8aT5pbXBsZW1lbnRhdGlvbi1kZWZpbmVkPC9pPiA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWNhYjZkNDZmMDNjNDBkMWU1MmQ0MTg0MzMxOWRkYjkiPmNvbnN0X2l0ZXJhdG9yPC9hPjsKICAgdHlwZWRlZiA8aT5pbXBsZW1lbnRhdGlvbi1kZWZpbmVkPC9pPiA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiPml0ZXJhdG9yPC9hPjsKICAgdHlwZWRlZiBib29zdDo6cmV2ZXJzZV9pdGVyYXRvciZsdDtjb25zdF9pdGVyYXRvciZndDsgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWM3MzE3NzAxYjUxMWJjNWY3YTY2M2IwNmI1M2UyYjczIj5jb25zdF9yZXZlcnNlX2l0ZXJhdG9yPC9hPjsKICAgdHlwZWRlZiBib29zdDo6cmV2ZXJzZV9pdGVyYXRvciZsdDtpdGVyYXRvciZndDsgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTAwMmZiODkwZGRlZDg5ZTc1ZGZlYjZmMDIxZmI1OGE1Ij5yZXZlcnNlX2l0ZXJhdG9yPC9hPjsKICAgdHlwZWRlZiBzdGQ6OnBhaXImbHQ7cG9pbnRlciwgc2l6ZV90eXBlJmd0OyA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMjZkMjc5ZjkxZmVmNzE3ZTI1NDU5YTA4MTdmZjI0MmYiPmFycmF5X3JhbmdlPC9hPjsKICAgdHlwZWRlZiBzdGQ6OnBhaXImbHQ7Y29uc3RfcG9pbnRlciwgc2l6ZV90eXBlJmd0OyA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMTg4NWQ3ZjQ3NWI3ZTdhNzRjOTViMjQ0OGQyNDMwMjUiPmNvbnN0X2FycmF5X3JhbmdlPC9hPjsKICAgdHlwZWRlZiBzaXplX3R5cGUgPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZGM2NDJmZjJiZTRkYjBiZTFhNDU3ODEwZTVkMDk1OTUiPmNhcGFjaXR5X3R5cGU8L2E+OwoKICAgZXhwbGljaXQgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWU1M2U3NDRkMmY5NGEyYmNiZmNkYjIxOWE5ZDkzMzAwIj5jaXJjdWxhcl9idWZmZXI8L2E+KGNvbnN0IGFsbG9jYXRvcl90eXBlJmFtcDsgYWxsb2MgPSBhbGxvY2F0b3JfdHlwZSgpKTsKICAgZXhwbGljaXQgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMThmMTYwNmEyNmZlYWQ5MjNjMmNiZTA2OGE3NGUyOGI2Ij5jaXJjdWxhcl9idWZmZXI8L2E+KGNhcGFjaXR5X3R5cGUgYnVmZmVyX2NhcGFjaXR5LCBjb25zdCBhbGxvY2F0b3JfdHlwZSZhbXA7IGFsbG9jID0gYWxsb2NhdG9yX3R5cGUoKSk7CiAgIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFmZGFjZThmMTEwZDViN2ExN2MwMjAyMDc1N2YwNmZlOCI+Y2lyY3VsYXJfYnVmZmVyPC9hPihzaXplX3R5cGUgbiwgY29uc3RfcmVmZXJlbmNlIGl0ZW0sIGNvbnN0IGFsbG9jYXRvcl90eXBlJmFtcDsgYWxsb2MgPSBhbGxvY2F0b3JfdHlwZSgpKTsKICAgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTA0ZGM2NDQ0ODZkODM1YjU2YWE0NzllYzQ4YjUyMjMwIj5jaXJjdWxhcl9idWZmZXI8L2E+KGNhcGFjaXR5X3R5cGUgYnVmZmVyX2NhcGFjaXR5LCBzaXplX3R5cGUgbiwgY29uc3RfcmVmZXJlbmNlIGl0ZW0sIGNvbnN0IGFsbG9jYXRvcl90eXBlJmFtcDsgYWxsb2MgPSBhbGxvY2F0b3JfdHlwZSgpKTsKICAgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWU1MTVkOGE5NTFlZWIxOGI4Y2M5MzAzMDBlN2UxM2JkIj5jaXJjdWxhcl9idWZmZXI8L2E+KGNvbnN0IGNpcmN1bGFyX2J1ZmZlciZsdDtULCBBbGxvYyZndDsmYW1wOyBjYik7CiAgIHRlbXBsYXRlICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OwogICAgICA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNzQ0ZWMwNmIwNmE1YTcyMzM4NmI2NDVhMjljYjhlZDIiPmNpcmN1bGFyX2J1ZmZlcjwvYT4oSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LCBjb25zdCBhbGxvY2F0b3JfdHlwZSZhbXA7IGFsbG9jID0gYWxsb2NhdG9yX3R5cGUoKSk7CiAgIHRlbXBsYXRlICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OwogICAgICA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTg1MWY3NWY0YTg1YjFhMmIxYTI0MTkwNGQyMTUwM2YiPmNpcmN1bGFyX2J1ZmZlcjwvYT4oY2FwYWNpdHlfdHlwZSBidWZmZXJfY2FwYWNpdHksIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmYW1wOyBhbGxvYyA9IGFsbG9jYXRvcl90eXBlKCkpOwogICA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE2NDI1MGZmYmJiZGJjNjJiOTllODMwMWZjMTk1YjgwYyI+fmNpcmN1bGFyX2J1ZmZlcjwvYT4oKTsKCiAgIGFsbG9jYXRvcl90eXBlIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhMjBiN2QwZTdhNGRhMGFmMTMyODZkZjlmNTNkNjYwYyI+Z2V0X2FsbG9jYXRvcjwvYT4oKSBjb25zdDsKICAgYWxsb2NhdG9yX3R5cGUmYW1wOyA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhZjc3NThhMzZhYzJmODRhMzAyNGI1MGI0ZmM3ZTA5OCI+Z2V0X2FsbG9jYXRvcjwvYT4oKTsKICAgaXRlcmF0b3IgPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luPC9hPigpOwogICBpdGVyYXRvciA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kPC9hPigpOwogICBjb25zdF9pdGVyYXRvciA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwNjQwZDNkNDFjMTNiNjA4OWI2ZjE2OTIyNGNmMTAzOCI+YmVnaW48L2E+KCkgY29uc3Q7CiAgIGNvbnN0X2l0ZXJhdG9yIDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTc4OTA4MTBkMDdiYzU5NWNmYjg3ZjljNDdjYjA3NWFjIj5lbmQ8L2E+KCkgY29uc3Q7CiAgIHJldmVyc2VfaXRlcmF0b3IgPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZGIzZDZiMTBiNjc2MzU0OWY1NGQyNjI3MjI4ZmE3YWEiPnJiZWdpbjwvYT4oKTsKICAgcmV2ZXJzZV9pdGVyYXRvciA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFjZmY5MjM2YTUwMTA3MTg4Yjg5NDI4NDdhNGRjMjY5NyI+cmVuZDwvYT4oKTsKICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNzY1ZDkxYmY0ODM0MTkwNzQxODQzM2ExZTNhYWIwMjYiPnJiZWdpbjwvYT4oKSBjb25zdDsKICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwOGRiZjUzOGIwMGExNGRhZjU1ODJlY2U4MDc0NmZjMyI+cmVuZDwvYT4oKSBjb25zdDsKICAgcmVmZXJlbmNlIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkMjE5ZjBkMzIwM2ZiNDNiOTY0YThjZjYzZjE4NjVjZCI+b3BlcmF0b3JbXTwvYT4oc2l6ZV90eXBlIGluZGV4KTsKICAgY29uc3RfcmVmZXJlbmNlIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFlYjBhN2ZlN2Y4YTU2YTRkYzRjOTMzYjkzYWRmY2VmNCI+b3BlcmF0b3JbXTwvYT4oc2l6ZV90eXBlIGluZGV4KSBjb25zdDsKICAgcmVmZXJlbmNlIDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWNkODQ4MzhjYjRmZmZiNmMxMTNmZDAyOTdlNTAyZWRjIj5hdDwvYT4oc2l6ZV90eXBlIGluZGV4KTsKICAgY29uc3RfcmVmZXJlbmNlIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiMjMzYTI5OGY1ODQ1YTBmY2YyZWNjNTZmNDE3MDgxMCI+YXQ8L2E+KHNpemVfdHlwZSBpbmRleCkgY29uc3Q7CiAgIHJlZmVyZW5jZSA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwZDVmZGVhYmViMzUyZjQ3ZDFmN2JiMWVhOGQ5ODE5ZiI+ZnJvbnQ8L2E+KCk7CiAgIHJlZmVyZW5jZSA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkOTg1ZDk3NDAyMGY4OGJiNDI1NWQ4ZWRiYWUwYTMwYSI+YmFjazwvYT4oKTsKICAgY29uc3RfcmVmZXJlbmNlIDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTBkZjg1OTVkODNiYjlkOGE3Y2U1MGFhYmM2NzhmOTBiIj5mcm9udDwvYT4oKSBjb25zdDsKICAgY29uc3RfcmVmZXJlbmNlIDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTAyNzIwMTc5Nzg2OGM2Mjc0ZmViNjcxMmY2NzBhMTMyIj5iYWNrPC9hPigpIGNvbnN0OwogICBhcnJheV9yYW5nZSA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5NTdjY2NkY2IwYzRlZjdkODBhMzRhOTkwMDY1ODE4ZCI+YXJyYXlfb25lPC9hPigpOwogICBhcnJheV9yYW5nZSA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFmNTA4MWE1NGFmYmMyZGZjMWE3ZmIyMDMyOWRmN2Q1YiI+YXJyYXlfdHdvPC9hPigpOwogICBjb25zdF9hcnJheV9yYW5nZSA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwZjRiMTU3ZTI3YjExNzBhNTcxNDE3OTg2YjIzOTk0NSI+YXJyYXlfb25lPC9hPigpIGNvbnN0OwogICBjb25zdF9hcnJheV9yYW5nZSA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYjhlYjBmMjk4YWQyMDEyYzU1YzUzMDNlMWYxNzRkNSI+YXJyYXlfdHdvPC9hPigpIGNvbnN0OwogICBwb2ludGVyIDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWVhNzI4YmY1N2Y5MWFhODk0NmVkZGY3NmNlODE2YTRlIj5saW5lYXJpemU8L2E+KCk7CiAgIGJvb2wgPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMjBmNjQ0NDhkYzA3MjNjYzY4YzEwOTZmNmIwMGJjMGEiPmlzX2xpbmVhcml6ZWQ8L2E+KCkgY29uc3Q7CiAgIHZvaWQgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWM1OTFiYjllMjcxYjEwYjUyNDBhZmNmZjNiZDJjNjE5Ij5yb3RhdGU8L2E+KGNvbnN0X2l0ZXJhdG9yIG5ld19iZWdpbik7CiAgIHNpemVfdHlwZSA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZTwvYT4oKSBjb25zdDsKICAgc2l6ZV90eXBlIDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU3ZTJkNTA2YmMyNzRiMmE2M2ZiZTFiOGZjYWZlYmQ3Ij5tYXhfc2l6ZTwvYT4oKSBjb25zdDsKICAgYm9vbCA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1YmUxYzJhMDA1ZWM5ODI4NTQ5ZWY2ZGQ3ZWJlZDU4MyI+ZW1wdHk8L2E+KCkgY29uc3Q7CiAgIGJvb2wgPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZmQwZWVmOGJhOTEyMTBkMTU3NTQwNGI3ZTNlODIwN2EiPmZ1bGw8L2E+KCkgY29uc3Q7CiAgIHNpemVfdHlwZSA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwYTAyYzRmYmM1MzM4NWU5ODU2OWU4MTBiZTk4NDNkZSI+cmVzZXJ2ZTwvYT4oKSBjb25zdDsKICAgY2FwYWNpdHlfdHlwZSA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZWJhYjJiMjUzOGQ3MzM3OTBiNTc1MjU4MjcyOGU3NyI+Y2FwYWNpdHk8L2E+KCkgY29uc3Q7CiAgIHZvaWQgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTYxNzE0MjA0ZWY1MTcyZDE1NmUyYzdlY2NkMDQ5OThmIj5zZXRfY2FwYWNpdHk8L2E+KGNhcGFjaXR5X3R5cGUgbmV3X2NhcGFjaXR5KTsKICAgdm9pZCA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xODBjMmUyZTY2YThmYTlkMGI3YWRjMWI1NDkyMWE4YzMiPnJlc2l6ZTwvYT4oc2l6ZV90eXBlIG5ld19zaXplLCBjb25zdF9yZWZlcmVuY2UgaXRlbSA9IHZhbHVlX3R5cGUoKSk7CiAgIHZvaWQgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTQ3NzcxNWU5ZDMxZDJjYzViMDJhZDhlY2YzYzY4YzQ2Ij5yc2V0X2NhcGFjaXR5PC9hPihjYXBhY2l0eV90eXBlIG5ld19jYXBhY2l0eSk7CiAgIHZvaWQgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTQ0ZWNkOWVjNWY1NGEyZDYxYzdkMTMyZTQ0NWQzNDgzIj5ycmVzaXplPC9hPihzaXplX3R5cGUgbmV3X3NpemUsIGNvbnN0X3JlZmVyZW5jZSBpdGVtID0gdmFsdWVfdHlwZSgpKTsKICAgY2lyY3VsYXJfYnVmZmVyJmx0O1QsIEFsbG9jJmd0OyZhbXA7IDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYjE1NTg5MTFiMmUyNTFhNTg3YWViM2Q4YjNkNzk3ZCI+b3BlcmF0b3I9PC9hPihjb25zdCBjaXJjdWxhcl9idWZmZXImbHQ7VCwgQWxsb2MmZ3Q7JmFtcDsgY2IpOwogICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5YmE0YTgxZGYxNmYzODZkMzFiMDRiNDljODJkMWFkYSI+YXNzaWduPC9hPihzaXplX3R5cGUgbiwgY29uc3RfcmVmZXJlbmNlIGl0ZW0pOwogICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYmViYjgwYTVmMzhlNTJhMzdlYzlmM2VkNzY1NjAwYSI+YXNzaWduPC9hPihjYXBhY2l0eV90eXBlIGJ1ZmZlcl9jYXBhY2l0eSwgc2l6ZV90eXBlIG4sIGNvbnN0X3JlZmVyZW5jZSBpdGVtKTsKICAgdGVtcGxhdGUgJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7CiAgICAgIHZvaWQgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTI1MzMwMmQ5YmRhNWQ3ZWZiYzRhNmMzMTFkZTM3OTBjIj5hc3NpZ248L2E+KElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCk7CiAgIHRlbXBsYXRlICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OwogICAgICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyN2NhYjYwMzRiZWVlYjBlMTE4NjNjOGMxNGQxNDM2NiI+YXNzaWduPC9hPihjYXBhY2l0eV90eXBlIGJ1ZmZlcl9jYXBhY2l0eSwgSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KTsKICAgdm9pZCA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMjcwYWI3MDc0YzM2NTY2M2E2ZjE4ODA4MDI0ZmQ4OGIiPnN3YXA8L2E+KGNpcmN1bGFyX2J1ZmZlciZsdDtULCBBbGxvYyZndDsmYW1wOyBjYik7CiAgIHZvaWQgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWFhMzVkZDdlZjhlYjFkMDQ1MDg0OTRkMTgzNWNjODJlIj5wdXNoX2JhY2s8L2E+KGNvbnN0X3JlZmVyZW5jZSBpdGVtID0gdmFsdWVfdHlwZSgpKTsKICAgdm9pZCA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMGVmNTdlNzNjMTkzNjgyYTY0OWQ4ZWI0YTEwOTZkY2UiPnB1c2hfZnJvbnQ8L2E+KGNvbnN0X3JlZmVyZW5jZSBpdGVtID0gdmFsdWVfdHlwZSgpKTsKICAgdm9pZCA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkZjBkYTAwY2I1MDFiZWE3NWFmYmJmYWI5ZjU0NmEwNyI+cG9wX2JhY2s8L2E+KCk7CiAgIHZvaWQgPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOGFjOTcyZGMyNGVmNzIzNmZhYTE4NzVkZTkyYjlkZDgiPnBvcF9mcm9udDwvYT4oKTsKICAgaXRlcmF0b3IgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTI4YzkyNzQwZmVlMWI5ZGViOGM2OTgxNmUzODlkZTk1Ij5pbnNlcnQ8L2E+KGl0ZXJhdG9yIHBvcywgY29uc3RfcmVmZXJlbmNlIGl0ZW0gPSB2YWx1ZV90eXBlKCkpOwogICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiMmYxOTdjOTlkNDcxMzhkYjc3N2YwYTQ2NzgzYjE0MCI+aW5zZXJ0PC9hPihpdGVyYXRvciBwb3MsIHNpemVfdHlwZSBuLCBjb25zdF9yZWZlcmVuY2UgaXRlbSk7CiAgIHRlbXBsYXRlICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OwogICAgICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkMDAwOTFkMWQ3OTRjYWIzMjY0YjM2NzRlOTliMzNmNiI+aW5zZXJ0PC9hPihpdGVyYXRvciBwb3MsIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCk7CiAgIGl0ZXJhdG9yIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyYzkzMzJmNDU3YmY1YmIzMTI4NDYzY2Y1MjhjMDU4YyI+cmluc2VydDwvYT4oaXRlcmF0b3IgcG9zLCBjb25zdF9yZWZlcmVuY2UgaXRlbSA9IHZhbHVlX3R5cGUoKSk7CiAgIHZvaWQgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE0N2E1MzU4ZGIxYjdkN2U0OTI1YzE2ZGIxM2QyZmM1Ij5yaW5zZXJ0PC9hPihpdGVyYXRvciBwb3MsIHNpemVfdHlwZSBuLCBjb25zdF9yZWZlcmVuY2UgaXRlbSk7CiAgIHRlbXBsYXRlICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OwogICAgICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkNjQ3OWNiYzQzYTMwNGJkYmYwNDI2MmY5NTdmYTMyMyI+cmluc2VydDwvYT4oaXRlcmF0b3IgcG9zLCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpOwogICBpdGVyYXRvciA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5NzE1NWRlNzEyZGIxNzU5ZTE2OTg0NTViNDlhMGJlMyI+ZXJhc2U8L2E+KGl0ZXJhdG9yIHBvcyk7CiAgIGl0ZXJhdG9yIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhOTY0MTUzODk1MDlhMThiZDdkN2I1ZDhlNGRkYTliZCI+ZXJhc2U8L2E+KGl0ZXJhdG9yIGZpcnN0LCBpdGVyYXRvciBsYXN0KTsKICAgaXRlcmF0b3IgPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjZkNGFlNzdkNzQ0NWY4NDRlMzBlNzg1OTJmMWUwNmYiPnJlcmFzZTwvYT4oaXRlcmF0b3IgcG9zKTsKICAgaXRlcmF0b3IgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWIwZjk4YWUzMDM1ODRkZWQ1Mzk3ZjA2N2JiZmM5MTFmIj5yZXJhc2U8L2E+KGl0ZXJhdG9yIGZpcnN0LCBpdGVyYXRvciBsYXN0KTsKICAgdm9pZCA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiMjVkMzc5Y2Y2NmFjZTAyNTAzNmE0N2RkYjM0NGFiZCI+ZXJhc2VfYmVnaW48L2E+KHNpemVfdHlwZSBuKTsKICAgdm9pZCA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE3NDg1ZWU3ZjU4YjAxMzYzMTcwMTE0ZjIxMjNhNDhkNyI+ZXJhc2VfZW5kPC9hPihzaXplX3R5cGUgbik7CiAgIHZvaWQgPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xODI2ZjU3NzBhNDBiOGI3NTJlYjk1ODczNzg0NjRkMWUiPmNsZWFyPC9hPigpOwp9OwoKdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIEFsbG9jJmd0OwogICBib29sIDxhIGhyZWY9CiIjbmFtZXNwYWNlYm9vc3RfMWQzNTg3MWU4MzgzNTliNTIxNWUxY2JiMzUzNjYzMjA3Ij5vcGVyYXRvcj09PC9hPihjb25zdCBjaXJjdWxhcl9idWZmZXImbHQ7VCwgQWxsb2MmZ3Q7JmFtcDsgbGhzLCBjb25zdCBjaXJjdWxhcl9idWZmZXImbHQ7VCwgQWxsb2MmZ3Q7JmFtcDsgcmhzKTsKdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIEFsbG9jJmd0OwogICBib29sIDxhIGhyZWY9CiIjbmFtZXNwYWNlYm9vc3RfMTk1YjA4MjEzZjIwMWMyMDY3ZDhhY2IwMjQ3NTYzMjlkIj5vcGVyYXRvciZsdDs8L2E+KGNvbnN0IGNpcmN1bGFyX2J1ZmZlciZsdDtULCBBbGxvYyZndDsmYW1wOyBsaHMsIGNvbnN0IGNpcmN1bGFyX2J1ZmZlciZsdDtULCBBbGxvYyZndDsmYW1wOyByaHMpOwp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQWxsb2MmZ3Q7CiAgIGJvb2wgPGEgaHJlZj0KIiNuYW1lc3BhY2Vib29zdF8xZjU3MTdlMmY2NTMyNTgxYTY0OTJmZjE4MzliMThmNmQiPm9wZXJhdG9yIT08L2E+KGNvbnN0IGNpcmN1bGFyX2J1ZmZlciZsdDtULCBBbGxvYyZndDsmYW1wOyBsaHMsIGNvbnN0IGNpcmN1bGFyX2J1ZmZlciZsdDtULCBBbGxvYyZndDsmYW1wOyByaHMpOwp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQWxsb2MmZ3Q7CiAgIGJvb2wgPGEgaHJlZj0KIiNuYW1lc3BhY2Vib29zdF8xZjU3NWQ3YTk3NDFjMjA0NDQyNGRlNTBjOTY2YzEyZjMiPm9wZXJhdG9yJmd0OzwvYT4oY29uc3QgY2lyY3VsYXJfYnVmZmVyJmx0O1QsIEFsbG9jJmd0OyZhbXA7IGxocywgY29uc3QgY2lyY3VsYXJfYnVmZmVyJmx0O1QsIEFsbG9jJmd0OyZhbXA7IHJocyk7CnRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBBbGxvYyZndDsKICAgYm9vbCA8YSBocmVmPQoiI25hbWVzcGFjZWJvb3N0XzE3OWFiY2JhY2QyNGI2N2YwODE4NWRiNTRhZWM4NjAwZCI+b3BlcmF0b3ImbHQ7PTwvYT4oY29uc3QgY2lyY3VsYXJfYnVmZmVyJmx0O1QsIEFsbG9jJmd0OyZhbXA7IGxocywgY29uc3QgY2lyY3VsYXJfYnVmZmVyJmx0O1QsIEFsbG9jJmd0OyZhbXA7IHJocyk7CnRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBBbGxvYyZndDsKICAgYm9vbCA8YSBocmVmPQoiI25hbWVzcGFjZWJvb3N0XzExYzMxMTUwMzgwMjcyYWY2N2RlZWJlZjU3OGM4MGIwNSI+b3BlcmF0b3ImZ3Q7PTwvYT4oY29uc3QgY2lyY3VsYXJfYnVmZmVyJmx0O1QsIEFsbG9jJmd0OyZhbXA7IGxocywgY29uc3QgY2lyY3VsYXJfYnVmZmVyJmx0O1QsIEFsbG9jJmd0OyZhbXA7IHJocyk7CnRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBBbGxvYyZndDsKICAgdm9pZCA8YSBocmVmPQoiI25hbWVzcGFjZWJvb3N0XzE0YWE4ZjZhMmM5NjQwZjNmMjJlMjY2ZjBmY2E4NTc3NyI+c3dhcDwvYT4oY2lyY3VsYXJfYnVmZmVyJmx0O1QsIEFsbG9jJmd0OyZhbXA7IGxocywgY2lyY3VsYXJfYnVmZmVyJmx0O1QsIEFsbG9jJmd0OyZhbXA7IHJocyk7Cgp9IC8vIG5hbWVzcGFjZSBib29zdAo8L3ByZT4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgogICAgPGgyPgogICAgICA8YSBuYW1lPSJyYXRpb25hbGUiIGlkPSJyYXRpb25hbGUiPlJhdGlvbmFsZTwvYT4KICAgIDwvaDI+CiAgICA8cD4KICAgICAgVGhlIGJhc2ljIG1vdGl2YXRpb24gYmVoaW5kIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHdhcyB0byBjcmVhdGUgYSBjb250YWluZXIgd2hpY2ggd291bGQgd29yawogICAgICBzZWFtbGVzc2x5IHdpdGggU1RMLiBBZGRpdGlvbmFsbHksIHRoZSBkZXNpZ24gb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gd2FzIGd1aWRlZCBieSB0aGUgZm9sbG93aW5nCiAgICAgIHByaW5jaXBsZXM6CiAgICA8L3A+CiAgICA8b2w+CiAgICAgIDxsaT5NYXhpbXVtIDxlbT5lZmZpY2llbmN5PC9lbT4gZm9yIGVudmlzYWdlZCBhcHBsaWNhdGlvbnMuCiAgICAgIDwvbGk+CiAgICAgIDxsaT5TdWl0YWJsZSBmb3IgPGVtPmdlbmVyYWwgcHVycG9zZTwvZW0+IHVzZS4KICAgICAgPC9saT4KICAgICAgPGxpPlRoZSBiZWhhdmlvdXIgb2YgdGhlIGJ1ZmZlciBhcyA8ZW0+aW50dWl0aXZlPC9lbT4gYXMgcG9zc2libGUuCiAgICAgIDwvbGk+CiAgICAgIDxsaT5TdWl0YWJsZSBmb3IgPGVtPnNwZWNpYWxpemF0aW9uPC9lbT4gYnkgbWVhbnMgb2YgYWRhcHRvcnMuIChUaGUgPGNvZGU+PGEgaHJlZj0KICAgICAgInNwYWNlX29wdGltaXplZC5odG1sIj5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9hPjwvY29kZT4gaXMgc3VjaCBhbiBleGFtcGxlIG9mIHRoZSBhZGFwdG9yLikKICAgICAgPC9saT4KICAgICAgPGxpPkVhc3kgdG8gPGVtPmRlYnVnPC9lbT4uIChTZWUgPGEgaHJlZj0iI2RlYnVnIj5EZWJ1ZyBTdXBwb3J0PC9hPiBmb3IgZGV0YWlscy4pCiAgICAgIDwvbGk+CiAgICA8L29sPgogICAgPHA+CiAgICAgIEluIG9yZGVyIHRvIGFjaGlldmUgbWF4aW11bSBlZmZpY2llbmN5LCB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBzdG9yZXMgaXRzIGVsZW1lbnRzIGluIGEgPGVtPmNvbnRpZ3VvdXMKICAgICAgcmVnaW9uIG9mIG1lbW9yeTwvZW0+LCB3aGljaCB0aGVuIGVuYWJsZXM6CiAgICA8L3A+CiAgICA8b2w+CiAgICAgIDxsaT5Vc2Ugb2YgZml4ZWQgbWVtb3J5IGFuZCBubyBpbXBsaWNpdCBvciB1bmV4cGVjdGVkIG1lbW9yeSBhbGxvY2F0aW9uLgogICAgICA8L2xpPgogICAgICA8bGk+RmFzdCBjb25zdGFudC10aW1lIGluc2VydGlvbiBhbmQgcmVtb3ZhbCBvZiBlbGVtZW50cyBmcm9tIHRoZSBmcm9udCBhbmQgYmFjay4KICAgICAgPC9saT4KICAgICAgPGxpPkZhc3QgY29uc3RhbnQtdGltZSByYW5kb20gYWNjZXNzIG9mIGVsZW1lbnRzLgogICAgICA8L2xpPgogICAgICA8bGk+U3VpdGFiaWxpdHkgZm9yIHJlYWwtdGltZSBhbmQgcGVyZm9ybWFuY2UgY3JpdGljYWwgYXBwbGljYXRpb25zLgogICAgICA8L2xpPgogICAgPC9vbD4KICAgIDxwPgogICAgICBQb3NzaWJsZSBhcHBsaWNhdGlvbnMgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaW5jbHVkZToKICAgIDwvcD4KICAgIDx1bD4KICAgICAgPGxpPlN0b3JhZ2Ugb2YgdGhlIG1vc3QgcmVjZW50bHkgcmVjZWl2ZWQgc2FtcGxlcywgb3ZlcndyaXRpbmcgdGhlIG9sZGVzdCBhcyBuZXcgc2FtcGxlcyBhcnJpdmUuCiAgICAgIDwvbGk+CiAgICAgIDxsaT5BcyBhbiB1bmRlcmx5aW5nIGNvbnRhaW5lciBmb3IgYSA8aT5ib3VuZGVkIGJ1ZmZlcjwvaT4gKHNlZSB0aGUgPGEgaHJlZj0iI2JvdW5kZWRidWZmZXIiPkJvdW5kZWQgQnVmZmVyCiAgICAgIEV4YW1wbGU8L2E+KS4KICAgICAgPC9saT4KICAgICAgPGxpPkEga2luZCBvZiBjYWNoZSBzdG9yaW5nIGEgc3BlY2lmaWVkIG51bWJlciBvZiBsYXN0IGluc2VydGVkIGVsZW1lbnRzLgogICAgICA8L2xpPgogICAgICA8bGk+RWZmaWNpZW50IGZpeGVkIGNhcGFjaXR5IEZJRk8gKEZpcnN0IEluLCBGaXJzdCBPdXQpIG9yIExJRk8gKExhc3QgSW4sIEZpcnN0IE91dCkgcXVldWUgd2hpY2ggcmVtb3ZlcyB0aGUKICAgICAgb2xkZXN0IChpbnNlcnRlZCBhcyBmaXJzdCkgZWxlbWVudHMgd2hlbiBmdWxsLgogICAgICA8L2xpPgogICAgPC91bD4KICAgIDxwPgogICAgICBUaGUgZm9sbG93aW5nIHBhcmFncmFwaHMgZGVzY3JpYmUgaXNzdWVzIHRoYXQgaGFkIHRvIGJlIGNvbnNpZGVyZWQgZHVyaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPjoKICAgIDwvcD4KICAgIDxoND4KICAgICAgPGEgbmFtZT0idGhyZWFkc2FmZXR5IiBpZD0idGhyZWFkc2FmZXR5Ij5UaHJlYWQtU2FmZXR5PC9hPgogICAgPC9oND4KICAgIDxwPgogICAgICBUaGUgdGhyZWFkLXNhZmV0eSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBpcyB0aGUgc2FtZSBhcyB0aGUgdGhyZWFkLXNhZmV0eSBvZiBjb250YWluZXJzIGluIG1vc3QgU1RMCiAgICAgIGltcGxlbWVudGF0aW9ucy4gVGhpcyBtZWFucyB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBpcyA8Yj5ub3Q8L2I+IHRocmVhZC1zYWZlLiBUaGUgdGhyZWFkLXNhZmV0eSBpcwogICAgICBndWFyYW50aWVkIG9ubHkgaW4gdGhlIHNlbnNlIHRoYXQgc2ltdWx0YW5lb3VzIGFjY2Vzc2VzIHRvIDxiPmRpc3RpbmN0PC9iPiBpbnN0YW5jZXMgb2YgdGhlCiAgICAgIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gYXJlIHNhZmUsIGFuZCBzaW11bHRhbmVvdXMgcmVhZCBhY2Nlc3NlcyB0byBhIHNoYXJlZCA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+CiAgICAgIGFyZSBzYWZlLgogICAgPC9wPgogICAgPHA+CiAgICAgIElmIG11bHRpcGxlIHRocmVhZHMgYWNjZXNzIGEgc2luZ2xlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4sIGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhlIHRocmVhZHMgbWF5IHBvdGVudGlhbGx5CiAgICAgIHdyaXRlLCB0aGVuIHRoZSB1c2VyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyBtdXR1YWwgZXhjbHVzaW9uIGJldHdlZW4gdGhlIHRocmVhZHMgZHVyaW5nIHRoZSBjb250YWluZXIKICAgICAgYWNjZXNzZXMuIFRoZSBtdXR1YWwgZXhjbHVzaW9uIGJldHdlZW4gdGhlIHRocmVhZHMgY2FuIGJlIGFjaGlldmVkIGJ5IHdyYXBwaW5nIG9wZXJhdGlvbnMgb2YgdGhlIHVuZGVybHlpbmcKICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB3aXRoIGEgbG9jayBhY3F1aXNpdGlvbiBhbmQgcmVsZWFzZS4gKFNlZSB0aGUgPGEgaHJlZj0iI2JvdW5kZWRidWZmZXIiPkJvdW5kZWQKICAgICAgQnVmZmVyIEV4YW1wbGU8L2E+LikKICAgIDwvcD4KICAgIDxoND4KICAgICAgPGEgbmFtZT0ib3ZlcndyaXRlIiBpZD0ib3ZlcndyaXRlIj5PdmVyd3JpdGUgT3BlcmF0aW9uPC9hPgogICAgPC9oND4KICAgIDxwPgogICAgICBPdmVyd3JpdGUgb3BlcmF0aW9uIG9jY3VycyB3aGVuIGFuIGVsZW1lbnQgaXMgaW5zZXJ0ZWQgaW50byBhIGZ1bGwgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiAtIHRoZSBvbGQgZWxlbWVudAogICAgICBpcyBiZWluZyBvdmVyd3JpdHRlbiBieSB0aGUgbmV3IG9uZS4gVGhlcmUgd2FzIGEgZGlzY3Vzc2lvbiB3aGF0IGV4YWN0bHkgIm92ZXJ3cml0aW5nIG9mIGFuIGVsZW1lbnQiIG1lYW5zIGR1cmluZwogICAgICB0aGUgZm9ybWFsIHJldmlldy4gSXQgbWF5IGJlIGVpdGhlciBhIGRlc3RydWN0aW9uIG9mIHRoZSBvcmlnaW5hbCBlbGVtZW50IGFuZCBhIGNvbnNlcXVlbnQgaW5wbGFjZSBjb25zdHJ1Y3Rpb24KICAgICAgb2YgYSBuZXcgZWxlbWVudCBvciBpdCBtYXkgYmUgYW4gYXNzaWdubWVudCBvZiBhIG5ldyBlbGVtZW50IGludG8gYW4gb2xkIG9uZS4gVGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4KICAgICAgaW1wbGVtZW50cyA8Yj5hc3NpZ25tZW50PC9iPiBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmZWN0aXZlLgogICAgPC9wPgogICAgPHA+CiAgICAgIEZyb20gdGhlIHBvaW50IG9mIGJ1c2luZXNzIGxvZ2ljIG9mIGEgc3RvcmVkIGVsZW1lbnQsIHRoZSBkZXN0cnVjdGlvbi9jb25zdHJ1Y3Rpb24gb3BlcmF0aW9uIGFuZCBhc3NpZ25tZW50CiAgICAgIHVzdWFsbHkgbWVhbiB0aGUgc2FtZS4gSG93ZXZlciwgaW4gdmVyeSByYXJlIGNhc2VzIChpZiBpbiBhbnkpIHRoZXkgbWF5IGRpZmZlci4gSWYgdGhlcmUgaXMgYSByZXF1aXJlbWVudCBmb3IKICAgICAgZWxlbWVudHMgdG8gYmUgZGVzdHJ1Y3RlZC9jb25zdHJ1Y3RlZCBpbnN0ZWFkIG9mIGJlaW5nIGFzc2lnbmVkLCBjb25zaWRlciBpbXBsZW1lbnRpbmcgYSB3cmFwcGVyIG9mIHRoZSBlbGVtZW50CiAgICAgIHdoaWNoIHdvdWxkIGltcGxlbWVudCB0aGUgYXNzaWduIG9wZXJhdG9yLCBhbmQgc3RvcmUgdGhlIHdyYXBwZXJzIGluc3RlYWQuIEl0IGlzIG5lY2Vzc2FyeSB0byBub3RlIHRoYXQgc3RvcmluZwogICAgICBzdWNoIHdyYXBwZXJzIGhhcyBhIGRyYXdiYWNrLiBUaGUgZGVzdHJ1Y3Rpb24vY29uc3RydWN0aW9uIHdpbGwgYmUgaW52b2tlZCBvbiBldmVyeSBhc3NpZ25tZW50IG9mIHRoZSB3cmFwcGVyIC0KICAgICAgbm90IG9ubHkgd2hlbiBhIHdyYXBwZXIgaXMgYmVpbmcgb3ZlcndyaXR0ZW4gKHdoZW4gdGhlIGJ1ZmZlciBpcyBmdWxsKSBidXQgYWxzbyB3aGVuIHRoZSBzdG9yZWQgd3JhcHBlcnMgYXJlCiAgICAgIGJlaW5nIHNoaWZ0ZWQgKGUuZy4gYXMgYSByZXN1bHQgb2YgaW5zZXJ0aW9uIGludG8gdGhlIG1pZGRsZSBvZiBjb250YWluZXIpLgogICAgPC9wPgogICAgPGg0PgogICAgICA8YSBuYW1lPSJmdWxsYnVmZmVyIiBpZD0iZnVsbGJ1ZmZlciI+V3JpdGluZyB0byBhIEZ1bGwgQnVmZmVyPC9hPgogICAgPC9oND4KICAgIDxwPgogICAgICBUaGVyZSBhcmUgc2V2ZXJhbCBvcHRpb25zIGhvdyB0byBjb3BlIHdpdGggdGhlIGNhc2UgaWYgYSBkYXRhIHNvdXJjZSBwcm9kdWNlcyBtb3JlIGRhdGEgdGhhbiBjYW4gZml0IGluIHRoZQogICAgICBmaXhlZC1zaXplZCBidWZmZXI6CiAgICA8L3A+CiAgICA8b2w+CiAgICAgIDxsaT5JbmZvcm0gdGhlIGRhdGEgc291cmNlIHRvIHdhaXQgdW50aWwgdGhlcmUgaXMgcm9vbSBpbiB0aGUgYnVmZmVyIChlLmcuIGJ5IHRocm93aW5nIGFuIG92ZXJmbG93IGV4Y2VwdGlvbikuCiAgICAgIDwvbGk+CiAgICAgIDxsaT5JZiB0aGUgb2xkZXN0IGRhdGEgaXMgdGhlIG1vc3QgaW1wb3J0YW50LCBpZ25vcmUgbmV3IGRhdGEgZnJvbSB0aGUgc291cmNlIHVudGlsIHRoZXJlIGlzIHJvb20gaW4gdGhlIGJ1ZmZlcgogICAgICBhZ2Fpbi4KICAgICAgPC9saT4KICAgICAgPGxpPklmIHRoZSBsYXRlc3QgZGF0YSBpcyB0aGUgbW9zdCBpbXBvcnRhbnQsIHdyaXRlIG92ZXIgdGhlIG9sZGVzdCBkYXRhLgogICAgICA8L2xpPgogICAgICA8bGk+TGV0IHRoZSBwcm9kdWNlciB0byBiZSByZXNwb25zaWJsZSBmb3IgY2hlY2tpbmcgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBwcmlvciB3cml0aW5nIGludG8gaXQuCiAgICAgIDwvbGk+CiAgICA8L29sPgogICAgPHA+CiAgICAgIEl0IGlzIGFwcGFyZW50IHRoYXQgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaW1wbGVtZW50cyB0aGUgdGhpcmQgb3B0aW9uLiBCdXQgaXQgbWF5IGJlIGxlc3MgYXBwYXJlbnQgaXQKICAgICAgPGI+ZG9lcyBub3Q8L2I+IGltcGxlbWVudCBhbnkgb3RoZXIgb3B0aW9uIC0gZXNwZWNpYWxseSB0aGUgZmlyc3QgdHdvLiBPbmUgY2FuIGdldCBhbiBpbXByZXNzaW9uIHRoYXQgdGhlCiAgICAgIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gc2hvdWxkIGltcGxlbWVudCBmaXJzdCB0aHJlZSBvcHRpb25zIGFuZCBvZmZlciBhIG1lY2hhbmlzbSBvZiBjaG9vc2luZyBhbW9uZyB0aGVtLgogICAgICBUaGlzIGltcHJlc3Npb24gaXMgd3JvbmcuIFRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHdhcyBkZXNpZ25lZCBhbmQgb3B0aW1pemVkIHRvIGJlIGNpcmN1bGFyICh3aGljaCBtZWFucwogICAgICBvdmVyd3JpdGluZyB0aGUgb2xkZXN0IGRhdGEgd2hlbiBmdWxsKS4gSWYgc3VjaCBhIGNvbnRyb2xsaW5nIG1lY2hhbmlzbSBoYWQgYmVlbiBlbmFibGVkLCBpdCB3b3VsZCBqdXN0CiAgICAgIGNvbXBsaWNhdGUgdGhlIG1hdHRlcnMgYW5kIHRoZSB1c2FnZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB3b3VsZCBiZSBwcm9iYWJseSBsZXNzIHN0cmFpZ2h0Zm9yd2FyZC4KICAgIDwvcD4KICAgIDxwPgogICAgICBNb3Jlb3ZlciwgdGhlIGZpcnN0IHR3byBvcHRpb25zIChhbmQgdGhlIGZvdXJ0aCBvcHRpb24gYXMgd2VsbCkgZG8gbm90IHJlcXVpcmUgdGhlIGJ1ZmZlciB0byBiZSBjaXJjdWxhciBhdCBhbGwuCiAgICAgIElmIHRoZXJlIGlzIGEgbmVlZCBmb3IgdGhlIGZpcnN0IG9yIHNlY29uZCBvcHRpb24sIGNvbnNpZGVyIGltcGxlbWVudGluZyBhbiBhZGFwdG9yIG9mIGUuZy4KICAgICAgPGNvZGU+c3RkOjp2ZWN0b3I8L2NvZGU+LiBJbiB0aGlzIGNhc2UgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaXMgbm90IHN1aXRhYmxlIGZvciBhZGFwdGluZywgYmVjYXVzZSwgaW4KICAgICAgY29udHJhcnkgdG8gPGNvZGU+c3RkOjp2ZWN0b3I8L2NvZGU+LCBpdCBiZWFycyBhbiBvdmVyaGVhZCBmb3IgaXRzIGNpcmN1bGFyIGJlaGF2aW91ci4KICAgIDwvcD4KICAgIDxoND4KICAgICAgPGEgbmFtZT0iZW1wdHlidWZmZXIiIGlkPSJlbXB0eWJ1ZmZlciI+UmVhZGluZy9SZW1vdmluZyBmcm9tIGFuIEVtcHR5IEJ1ZmZlcjwvYT4KICAgIDwvaDQ+CiAgICA8cD4KICAgICAgV2hlbiByZWFkaW5nIG9yIHJlbW92aW5nIGFuIGVsZW1lbnQgZnJvbSBhbiBlbXB0eSBidWZmZXIsIHRoZSBidWZmZXIgc2hvdWxkIGJlIGFibGUgdG8gbm90aWZ5IHRoZSBkYXRhIGNvbnN1bWVyCiAgICAgIChlLmcuIGJ5IHRocm93aW5nIHVuZGVyZmxvdyBleGNlcHRpb24pIHRoYXQgdGhlcmUgYXJlIG5vIGVsZW1lbnRzIHN0b3JlZCBpbiBpdC4gVGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4KICAgICAgZG9lcyBub3QgaW1wbGVtZW50IHN1Y2ggYSBiZWhhdmlvdXIgZm9yIHR3byByZWFzb25zOgogICAgPC9wPgogICAgPG9sPgogICAgICA8bGk+SXQgd291bGQgaW50cm9kdWNlIHBlcmZvcm1hbmNlIG92ZXJoZWFkLgogICAgICA8L2xpPgogICAgICA8bGk+Tm8gb3RoZXIgPGNvZGU+c3RkPC9jb2RlPiBjb250YWluZXIgaW1wbGVtZW50cyBpdCB0aGlzIHdheS4KICAgICAgPC9saT4KICAgIDwvb2w+CiAgICA8cD4KICAgICAgSXQgaXMgY29uc2lkZXJlZCB0byBiZSBhIGJ1ZyB0byByZWFkIG9yIHJlbW92ZSBhbiBlbGVtZW50IChlLmcuIGJ5IGNhbGxpbmcgPGNvZGU+ZnJvbnQoKTwvY29kZT4gb3IKICAgICAgPGNvZGU+cG9wX2JhY2soKTwvY29kZT4pIGZyb20gYW4gZW1wdHkgPGNvZGU+c3RkPC9jb2RlPiBjb250YWluZXIgYW5kIGZyb20gYW4gZW1wdHkgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPgogICAgICBhcyB3ZWxsLiBUaGUgZGF0YSBjb25zdW1lciBoYXMgdG8gdGVzdCBpZiB0aGUgY29udGFpbmVyIGlzIG5vdCBlbXB0eSBiZWZvcmUgcmVhZGluZy9yZW1vdmluZyBmcm9tIGl0LiBIb3dldmVyLAogICAgICB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiwgdGhlcmUgaXMgYW4gb3B0aW9uIHRvIHJlbHkgb24gdGhlIDxjb2RlPmF0KCk8L2NvZGU+IG1ldGhvZAogICAgICB3aGljaCB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIGluZGV4IGlzIG91dCBvZiByYW5nZS4KICAgIDwvcD4KICAgIDxoND4KICAgICAgPGEgbmFtZT0iaXRlcmF0b3JpbnZhbGlkYXRpb24iIGlkPSJpdGVyYXRvcmludmFsaWRhdGlvbiI+SXRlcmF0b3IgSW52YWxpZGF0aW9uPC9hPgogICAgPC9oND4KICAgIDxwPgogICAgICBBbiBpdGVyYXRvciBpcyB1c3VhbGx5IGNvbnNpZGVyZWQgdG8gYmUgaW52YWxpZGF0ZWQgaWYgYW4gZWxlbWVudCwgdGhlIGl0ZXJhdG9yIHBvaW50ZWQgdG8sIGhhZCBiZWVuIHJlbW92ZWQgb3IKICAgICAgb3ZlcndyaXR0ZW4gYnkgYW4gYW5vdGhlciBlbGVtZW50LiBUaGlzIGRlZmluaXRpb24gaXMgZW5mb3JjZWQgYnkgdGhlIDxhIGhyZWY9IiNkZWJ1ZyI+RGVidWcgU3VwcG9ydDwvYT4gYW5kIGlzCiAgICAgIGRvY3VtZW50ZWQgZm9yIGV2ZXJ5IG1ldGhvZC4gSG93ZXZlciwgc29tZSBhcHBsaWNhdGlvbnMgdXRpbGl6aW5nIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gbWF5IHJlcXVpcmUgbGVzcwogICAgICBzdHJpY3QgZGVmaW5pdGlvbjogYW4gaXRlcmF0b3IgaXMgaW52YWxpZCBvbmx5IGlmIGl0IHBvaW50cyB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQ29uc2lkZXIgZm9sbG93aW5nCiAgICAgIGV4YW1wbGU6CiAgICA8L3A+CiAgICA8cHJlPgogICAjZGVmaW5lIEJPT1NUX0NCX0RJU0FCTEVfREVCVUcgLy8gVGhlIERlYnVnIFN1cHBvcnQgaGFzIHRvIGJlIGRpc2FibGVkLCBvdGhlcndpc2UgdGhlIGNvZGUgcHJvZHVjZXMgYSBydW50aW1lIGVycm9yLgoKICAgI2luY2x1ZGUgJmx0O2Jvb3N0L2NpcmN1bGFyX2J1ZmZlci5ocHAmZ3Q7CiAgICNpbmNsdWRlICZsdDthc3NlcnQuaCZndDsKCiAgIGludCBtYWluKGludCAvKmFyZ2MqLywgY2hhciogLyphcmd2Ki9bXSkgewoKICAgICAgYm9vc3Q6OmNpcmN1bGFyX2J1ZmZlciZsdDtpbnQmZ3Q7IGNiKDMpOwoKICAgICAgY2IucHVzaF9iYWNrKDEpOwogICAgICBjYi5wdXNoX2JhY2soMik7CiAgICAgIGNiLnB1c2hfYmFjaygzKTsKCiAgICAgIGJvb3N0OjpjaXJjdWxhcl9idWZmZXImbHQ7aW50Jmd0Ozo6aXRlcmF0b3IgaXQgPSBjYi5iZWdpbigpOwoKICAgICAgYXNzZXJ0KCppdCA9PSAxKTsKCiAgICAgIGNiLnB1c2hfYmFjayg0KTsKCiAgICAgIGFzc2VydCgqaXQgPT0gNCk7IC8vIFRoZSBpdGVyYXRvciBzdGlsbCBwb2ludHMgdG8gdGhlIGluaXRpYWxpemVkIG1lbW9yeS4KCiAgICAgIHJldHVybiAwOwogICB9CjwvcHJlPgogICAgPHA+CiAgICAgIFRoZSBpdGVyYXRvciBkb2VzIG5vdCBwb2ludCB0byB0aGUgb3JpZ2luYWwgZWxlbWVudCBhbnkgbW9yZSAoYW5kIGlzIGNvbnNpZGVyZWQgdG8gYmUgaW52YWxpZCBmcm9tIHRoZSAic3RyaWN0IgogICAgICBwb2ludCBvZiB2aWV3KSBidXQgaXQgc3RpbGwgcG9pbnRzIHRvIHRoZSBzYW1lIDxlbT52YWxpZDwvZW0+IHBsYWNlIGluIHRoZSBtZW1vcnkuIFRoaXMgInNvZnQiIGRlZmluaXRpb24gb2YKICAgICAgaXRlcmF0b3IgaW52YWxpZGF0aW9uIGlzIHN1cHBvcnRlZCBieSB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBidXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYXMgYW4KICAgICAgaW1wbGVtZW50YXRpb24gZGV0YWlsIHJhdGhlciB0aGFuIGEgZnVsbC1mbGVkZ2VkIGZlYXR1cmUuIFRoZSBydWxlcyB3aGVuIHRoZSBpdGVyYXRvciBpcyBzdGlsbCB2YWxpZCBjYW4gYmUKICAgICAgaW5mZXJyZWQgZnJvbSB0aGUgY29kZSBpbiA8Y29kZT48YSBocmVmPQogICAgICAiLi4vdGVzdC9zb2Z0X2l0ZXJhdG9yX2ludmFsaWRhdGlvbi5jcHAiPnNvZnRfaXRlcmF0b3JfaW52YWxpZGF0aW9uLmNwcDwvYT48L2NvZGU+LgogICAgPC9wPgogICAgPGgyPgogICAgICA8YSBuYW1lPSJjYXZlYXRzIiBpZD0iY2F2ZWF0cyI+Q2F2ZWF0czwvYT4KICAgIDwvaDI+CiAgICA8cD4KICAgICAgVGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBzdG9yaW5nIHBvaW50ZXJzIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBvYmplY3RzLiBXaGVuIGEKICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBiZWNvbWVzIGZ1bGwsIGZ1cnRoZXIgaW5zZXJ0aW9uIHdpbGwgb3ZlcndyaXRlIHRoZSBzdG9yZWQgcG9pbnRlcnMgLSByZXN1bHRpbmcgaW4gYQogICAgICA8Yj5tZW1vcnkgbGVhazwvYj4uIE9uZSByZWNvbW1lbmQgYWx0ZXJuYXRpdmUgaXMgdGhlIHVzZSBvZiBzbWFydCBwb2ludGVycyA8YSBocmVmPSIjbm90ZTEiPlsxXTwvYT4uIChBbnkKICAgICAgY29udGFpbmVyIG9mIDxjb2RlPnN0ZDo6YXV0b19wdHI8L2NvZGU+IGlzIGNvbnNpZGVyZWQgcGFydGljdWxhcmx5IGhhemFyZG91cy4gPGEgaHJlZj0iI25vdGUyIj5bMl08L2E+ICkKICAgIDwvcD4KICAgIDxwPgogICAgICBXaGlsZSBpbnRlcm5hbHMgb2YgYSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGFyZSBjaXJjdWxhciwgaXRlcmF0b3JzIGFyZSA8Yj5ub3Q8L2I+LiBJdGVyYXRvcnMgb2YgYQogICAgICA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGFyZSBvbmx5IHZhbGlkIGZvciB0aGUgcmFuZ2UgPGNvZGU+W2JlZ2luKCksIGVuZCgpXTwvY29kZT4uIEUuZy4gaXRlcmF0b3JzCiAgICAgIDxjb2RlPihiZWdpbigpIC0gMSk8L2NvZGU+IGFuZCA8Y29kZT4oZW5kKCkgKyAxKTwvY29kZT4gYXJlIGludmFsaWQuCiAgICA8L3A+CiAgICA8aDI+CiAgICAgIDxhIG5hbWU9ImRlYnVnIiBpZD0iZGVidWciPkRlYnVnIFN1cHBvcnQ8L2E+CiAgICA8L2gyPgogICAgPHA+CiAgICAgIEluIG9yZGVyIHRvIGhlbHAgYSBwcm9ncmFtbWVyIHRvIGF2b2lkIGFuZCBmaW5kIGNvbW1vbiBidWdzLCB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBjb250YWlucyBhIGtpbmQgb2YKICAgICAgZGVidWcgc3VwcG9ydC4KICAgIDwvcD4KICAgIDxwPgogICAgICBUaGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBtYWludGFpbnMgYSBsaXN0IG9mIHZhbGlkIGl0ZXJhdG9ycy4gQXMgc29vbiBhcyBhbnkgZWxlbWVudCBnZXRzIGRlc3Ryb3llZCBhbGwKICAgICAgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoaXMgZWxlbWVudCBhcmUgcmVtb3ZlZCBmcm9tIHRoaXMgbGlzdCBhbmQgZXhwbGljaXRseSBpbnZhbGlkYXRlZCAoYW4gaW52YWxpZGF0aW9uIGZsYWcgaXMKICAgICAgc2V0KS4gVGhlIGRlYnVnIHN1cHBvcnQgYWxzbyBjb25zaXN0cyBvZiBtYW55IGFzc2VydGlvbnMgKDxhIGhyZWY9CiAgICAgICIuLi8uLi91dGlsaXR5L2Fzc2VydC5odG1sIj48Y29kZT5CT09TVF9BU1NFUlQ8L2NvZGU+PC9hPiBtYWNyb3MpIHdoaWNoIGVuc3VyZSB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPgogICAgICBhbmQgaXRzIGl0ZXJhdG9ycyBhcmUgdXNlZCBpbiB0aGUgY29ycmVjdCBtYW5uZXIgYXQgcnVudGltZS4gSW4gY2FzZSBhbiBpbnZhbGlkIGl0ZXJhdG9yIGlzIHVzZWQgdGhlIGFzc2VydGlvbgogICAgICB3aWxsIHJlcG9ydCBhbiBlcnJvci4gVGhlIGNvbm5lY3Rpb24gb2YgZXhwbGljaXQgaXRlcmF0b3IgaW52YWxpZGF0aW9uIGFuZCBhc3NlcnRpb25zIG1ha2VzIGEgdmVyeSByb2J1c3QgZGVidWcKICAgICAgdGVjaG5pcXVlIHdoaWNoIGNhdGNoZXMgbW9zdCBvZiB0aGUgZXJyb3JzLgogICAgPC9wPgogICAgPHA+CiAgICAgIE1vcmVvdmVyLCB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGVkIGJ5IDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaXMgZmlsbGVkIHdpdGggdGhlIHZhbHVlCiAgICAgIDxjb2RlPjB4Y2M8L2NvZGU+IGluIHRoZSBkZWJ1ZyBtb2RlLiBUaGlzIGNhbiBoZWxwIHRoZSBwcm9ncmFtbWVyIHdoZW4gZGVidWdnaW5nIHRoZSBjb2RlIHRvIHJlY29nbml6ZSB0aGUKICAgICAgaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gdGhlIHVuaW5pdGlhbGl6ZWQuIEZvciBkZXRhaWxzIHJlZmVyIHRoZSBzb3VyY2UgY29kZS4KICAgIDwvcD4KICAgIDxwPgogICAgICBUaGUgZGVidWcgc3VwcG9ydCBpcyBlbmFibGVkIG9ubHkgaW4gdGhlIGRlYnVnIG1vZGUgKHdoZW4gdGhlIDxjb2RlPk5ERUJVRzwvY29kZT4gaXMgbm90IGRlZmluZWQpLiBJdCBjYW4gYWxzbyBiZQogICAgICBleHBsaWNpdGx5IGRpc2FibGVkIChvbmx5IGZvciA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KSBieSBkZWZpbmluZyA8Y29kZT5CT09TVF9DQl9ESVNBQkxFX0RFQlVHPC9jb2RlPgogICAgICBtYWNyby4KICAgIDwvcD4KICAgIDxoMj4KICAgICAgPGEgbmFtZT0iaW50cmVwcm9jZXNzIiBpZD0iaW50ZXJwcm9jZXNzIj5Db21wYXRpYmlsaXR5IHdpdGggSW50ZXJwcm9jZXNzIGxpYnJhcnk8L2E+CiAgICA8L2gyPgogICAgPHA+CiAgICAgIFRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgPGEgaHJlZj0iLi4vLi4vLi4vZG9jL2h0bWwvaW50ZXJwcm9jZXNzLmh0bWwiPkJvb3N0CiAgICAgIEludGVycHJvY2VzczwvYT4gbGlicmFyeSB1c2VkIGZvciBpbnRlcnByb2Nlc3MgY29tbXVuaWNhdGlvbi4gQ29uc2lkZXJpbmcgdGhhdCB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPidzCiAgICAgIGRlYnVnIHN1cHBvcnQgcmVsaWVzIG9uICdyYXcnIHBvaW50ZXJzIC0gd2hpY2ggaXMgbm90IHBlcm1pdGVkIGJ5IHRoZSBJbnRlcnByb2Nlc3MgbGlicmFyeSAtIHRoZSBjb2RlIGhhcyB0bwogICAgICBjb21waWxlZCB3aXRoIDxjb2RlPi1EQk9PU1RfQ0JfRElTQUJMRV9ERUJVRzwvY29kZT4gb3IgPGNvZGU+LUROREVCVUc8L2NvZGU+ICh3aGljaCBkaXNhYmxlcyB0aGUKICAgICAgPGEgaHJlZj0iI2RlYnVnIj5EZWJ1ZyBTdXBwb3J0PC9hPikuIE5vdCBkb2luZyB0aGF0IHdpbGwgY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHRvIGZhaWwuCiAgICA8L3A+CiAgICA8aDI+CiAgICAgIDxhIG5hbWU9ImV4YW1wbGVzIiBpZD0iZXhhbXBsZXMiPk1vcmUgRXhhbXBsZXM8L2E+CiAgICA8L2gyPgogICAgPHA+CiAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpbmNsdWRlcyB2YXJpb3VzIHVzYWdlIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LgogICAgPC9wPgogICAgPHByZT4KICAgI2luY2x1ZGUgJmx0O2Jvb3N0L2NpcmN1bGFyX2J1ZmZlci5ocHAmZ3Q7CiAgICNpbmNsdWRlICZsdDtudW1lcmljJmd0OwogICAjaW5jbHVkZSAmbHQ7YXNzZXJ0LmgmZ3Q7CgogICBpbnQgbWFpbihpbnQgLyphcmdjKi8sIGNoYXIqIC8qYXJndiovW10pCiAgIHsKICAgICAgLy8gY3JlYXRlIGEgY2lyY3VsYXIgYnVmZmVyIG9mIGNhcGFjaXR5IDMKICAgICAgYm9vc3Q6OmNpcmN1bGFyX2J1ZmZlciZsdDtpbnQmZ3Q7IGNiKDMpOwoKICAgICAgLy8gaW5zZXJ0IHNvbWUgZWxlbWVudHMgaW50byB0aGUgY2lyY3VsYXIgYnVmZmVyCiAgICAgIGNiLnB1c2hfYmFjaygxKTsKICAgICAgY2IucHVzaF9iYWNrKDIpOwoKICAgICAgLy8gYXNzZXJ0aW9ucwogICAgICBhc3NlcnQoY2JbMF0gPT0gMSk7CiAgICAgIGFzc2VydChjYlsxXSA9PSAyKTsKICAgICAgYXNzZXJ0KCFjYi5mdWxsKCkpOwogICAgICBhc3NlcnQoY2Iuc2l6ZSgpID09IDIpOwogICAgICBhc3NlcnQoY2IuY2FwYWNpdHkoKSA9PSAzKTsKCiAgICAgIC8vIGluc2VydCBzb21lIG90aGVyIGVsZW1lbnRzCiAgICAgIGNiLnB1c2hfYmFjaygzKTsKICAgICAgY2IucHVzaF9iYWNrKDQpOwoKICAgICAgLy8gZXZhbHVhdGUgdGhlIHN1bQogICAgICBpbnQgc3VtID0gc3RkOjphY2N1bXVsYXRlKGNiLmJlZ2luKCksIGNiLmVuZCgpLCAwKTsKCiAgICAgIC8vIGFzc2VydGlvbnMKICAgICAgYXNzZXJ0KGNiWzBdID09IDIpOwogICAgICBhc3NlcnQoY2JbMV0gPT0gMyk7CiAgICAgIGFzc2VydChjYlsyXSA9PSA0KTsKICAgICAgYXNzZXJ0KCpjYi5iZWdpbigpID09IDIpOwogICAgICBhc3NlcnQoY2IuZnJvbnQoKSA9PSAyKTsKICAgICAgYXNzZXJ0KGNiLmJhY2soKSA9PSA0KTsKICAgICAgYXNzZXJ0KHN1bSA9PSA5KTsKICAgICAgYXNzZXJ0KGNiLmZ1bGwoKSk7CiAgICAgIGFzc2VydChjYi5zaXplKCkgPT0gMyk7CiAgICAgIGFzc2VydChjYi5jYXBhY2l0eSgpID09IDMpOwoKICAgICAgcmV0dXJuIDA7CiAgIH0KPC9wcmU+CiAgICA8cD4KICAgICAgVGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaGFzIGEgY2FwYWNpdHkgb2YgdGhyZWUgPGNvZGU+aW50PC9jb2RlPi4gVGhlcmVmb3JlLCB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHdpbGwKICAgICAgbm90IGV4Y2VlZCB0aHJlZS4gVGhlIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9hY2N1bXVsYXRlLmh0bWwiPnN0ZDo6YWNjdW11bGF0ZTwvYT48L2NvZGU+CiAgICAgIGFsZ29yaXRobSBldmFsdWF0ZXMgdGhlIHN1bSBvZiB0aGUgc3RvcmVkIGVsZW1lbnRzLiBUaGUgc2VtYW50aWNzIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGNhbiBiZQogICAgICBpbmZlcnJlZCBmcm9tIHRoZSBhc3NlcnRpb25zLgogICAgPC9wPgogICAgPGg0PgogICAgICA8YSBuYW1lPSJib3VuZGVkYnVmZmVyIiBpZD0iYm91bmRlZGJ1ZmZlciI+Qm91bmRlZCBCdWZmZXIgRXhhbXBsZTwvYT4KICAgIDwvaDQ+CiAgICA8cD4KICAgICAgVGhlIGJvdW5kZWQgYnVmZmVyIGlzIG5vcm1hbGx5IHVzZWQgaW4gYSBwcm9kdWNlci1jb25zdW1lciBtb2RlIHdoZW4gcHJvZHVjZXIgdGhyZWFkcyBwcm9kdWNlIGl0ZW1zIGFuZCBzdG9yZQogICAgICB0aGVtIGluIHRoZSBjb250YWluZXIgYW5kIGNvbnN1bWVyIHRocmVhZHMgcmVtb3ZlIHRoZXNlIGl0ZW1zIGFuZCBwcm9jZXNzIHRoZW0uIFRoZSBib3VuZGVkIGJ1ZmZlciBoYXMgdG8KICAgICAgZ3VhcmFudGVlIHRoYXQgcHJvZHVjZXJzIGRvIG5vdCBpbnNlcnQgaXRlbXMgaW50byB0aGUgY29udGFpbmVyIHdoZW4gdGhlIGNvbnRhaW5lciBpcyBmdWxsLCB0aGF0IGNvbnN1bWVycyBkbyBub3QKICAgICAgdHJ5IHRvIHJlbW92ZSBpdGVtcyB3aGVuIHRoZSBjb250YWluZXIgaXMgZW1wdHksIGFuZCB0aGF0IGVhY2ggcHJvZHVjZWQgaXRlbSBpcyBjb25zdW1lZCBieSBleGFjdGx5IG9uZSBjb25zdW1lci4KICAgIDwvcD4KICAgIDxwPgogICAgICBUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gY2FuIGJlIHV0aWxpemVkIGFzIGFuIHVuZGVybHlpbmcgY29udGFpbmVyIG9mIHRoZQogICAgICBib3VuZGVkIGJ1ZmZlci4KICAgIDwvcD4KICAgIDxwcmU+CiAgICNpbmNsdWRlICZsdDtib29zdC9jaXJjdWxhcl9idWZmZXIuaHBwJmd0OwogICAjaW5jbHVkZSAmbHQ7Ym9vc3QvdGhyZWFkL211dGV4LmhwcCZndDsKICAgI2luY2x1ZGUgJmx0O2Jvb3N0L3RocmVhZC9jb25kaXRpb24uaHBwJmd0OwogICAjaW5jbHVkZSAmbHQ7Ym9vc3QvdGhyZWFkL3RocmVhZC5ocHAmZ3Q7CiAgICNpbmNsdWRlICZsdDtib29zdC9jYWxsX3RyYWl0cy5ocHAmZ3Q7CiAgICNpbmNsdWRlICZsdDtib29zdC9wcm9ncmVzcy5ocHAmZ3Q7CiAgICNpbmNsdWRlICZsdDtib29zdC9iaW5kLmhwcCZndDsKCiAgIHRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OwogICBjbGFzcyBib3VuZGVkX2J1ZmZlciB7CiAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgYm9vc3Q6OmNpcmN1bGFyX2J1ZmZlciZsdDtUJmd0OyBjb250YWluZXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjb250YWluZXJfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjb250YWluZXJfdHlwZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0OjpjYWxsX3RyYWl0cyZsdDt2YWx1ZV90eXBlJmd0Ozo6cGFyYW1fdHlwZSBwYXJhbV90eXBlOwoKICAgICAgZXhwbGljaXQgYm91bmRlZF9idWZmZXIoc2l6ZV90eXBlIGNhcGFjaXR5KSA6IG1fdW5yZWFkKDApLCBtX2NvbnRhaW5lcihjYXBhY2l0eSkge30KCiAgICAgIHZvaWQgcHVzaF9mcm9udChib29zdDo6Y2FsbF90cmFpdHMmbHQ7dmFsdWVfdHlwZSZndDs6OnBhcmFtX3R5cGUgaXRlbSkgewogICAgICAgICAvLyBwYXJhbV90eXBlIHJlcHJlc2VudHMgdGhlICJiZXN0IiB3YXkgdG8gcGFzcyBhIHBhcmFtZXRlciBvZiB0eXBlIHZhbHVlX3R5cGUgdG8gYSBtZXRob2QKCiAgICAgICAgIGJvb3N0OjptdXRleDo6c2NvcGVkX2xvY2sgbG9jayhtX211dGV4KTsKICAgICAgICAgbV9ub3RfZnVsbC53YWl0KGxvY2ssIGJvb3N0OjpiaW5kKCZhbXA7Ym91bmRlZF9idWZmZXImbHQ7dmFsdWVfdHlwZSZndDs6OmlzX25vdF9mdWxsLCB0aGlzKSk7CiAgICAgICAgIG1fY29udGFpbmVyLnB1c2hfZnJvbnQoaXRlbSk7CiAgICAgICAgICsrbV91bnJlYWQ7CiAgICAgICAgIGxvY2sudW5sb2NrKCk7CiAgICAgICAgIG1fbm90X2VtcHR5Lm5vdGlmeV9vbmUoKTsKICAgICAgfQoKICAgICAgdm9pZCBwb3BfYmFjayh2YWx1ZV90eXBlKiBwSXRlbSkgewogICAgICAgICBib29zdDo6bXV0ZXg6OnNjb3BlZF9sb2NrIGxvY2sobV9tdXRleCk7CiAgICAgICAgIG1fbm90X2VtcHR5LndhaXQobG9jaywgYm9vc3Q6OmJpbmQoJmFtcDtib3VuZGVkX2J1ZmZlciZsdDt2YWx1ZV90eXBlJmd0Ozo6aXNfbm90X2VtcHR5LCB0aGlzKSk7CiAgICAgICAgICpwSXRlbSA9IG1fY29udGFpbmVyWy0tbV91bnJlYWRdOwogICAgICAgICBsb2NrLnVubG9jaygpOwogICAgICAgICBtX25vdF9mdWxsLm5vdGlmeV9vbmUoKTsKICAgICAgfQoKICAgcHJpdmF0ZToKICAgICAgYm91bmRlZF9idWZmZXIoY29uc3QgYm91bmRlZF9idWZmZXImYW1wOyk7ICAgICAgICAgICAgICAvLyBEaXNhYmxlZCBjb3B5IGNvbnN0cnVjdG9yCiAgICAgIGJvdW5kZWRfYnVmZmVyJmFtcDsgb3BlcmF0b3IgPSAoY29uc3QgYm91bmRlZF9idWZmZXImYW1wOyk7IC8vIERpc2FibGVkIGFzc2lnbiBvcGVyYXRvcgoKICAgICAgYm9vbCBpc19ub3RfZW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3VucmVhZCAmZ3Q7IDA7IH0KICAgICAgYm9vbCBpc19ub3RfZnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5yZWFkICZsdDsgbV9jb250YWluZXIuY2FwYWNpdHkoKTsgfQoKICAgICAgc2l6ZV90eXBlIG1fdW5yZWFkOwogICAgICBjb250YWluZXJfdHlwZSBtX2NvbnRhaW5lcjsKICAgICAgYm9vc3Q6Om11dGV4IG1fbXV0ZXg7CiAgICAgIGJvb3N0Ojpjb25kaXRpb24gbV9ub3RfZW1wdHk7CiAgICAgIGJvb3N0Ojpjb25kaXRpb24gbV9ub3RfZnVsbDsKICAgfTsKPC9wcmU+CiAgICA8cD4KICAgICAgVGhlIDxjb2RlPmJvdW5kZWRfYnVmZmVyPC9jb2RlPiByZWxpZXMgb24gPGEgaHJlZj0iLi4vLi4vdGhyZWFkL2RvYy8iPkJvb3N0IFRocmVhZHM8L2E+IGFuZCA8YSBocmVmPQogICAgICAiLi4vLi4vYmluZC9iaW5kLmh0bWwiPkJvb3N0IEJpbmQ8L2E+IGxpYnJhcmllcyBhbmQgPGEgaHJlZj0iLi4vLi4vdXRpbGl0eS9jYWxsX3RyYWl0cy5odG0iPkJvb3N0IGNhbGxfdHJhaXRzPC9hPgogICAgICB1dGlsaXR5LgogICAgPC9wPgogICAgPHA+CiAgICAgIFRoZSA8Y29kZT5wdXNoX2Zyb250KCk8L2NvZGU+IG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIHByb2R1Y2VyIHRocmVhZCBpbiBvcmRlciB0byBpbnNlcnQgYSBuZXcgaXRlbSBpbnRvIHRoZQogICAgICBidWZmZXIuIFRoZSBtZXRob2QgbG9ja3MgdGhlIG11dGV4IGFuZCB3YWl0cyB1bnRpbCB0aGVyZSBpcyBhIHNwYWNlIGZvciB0aGUgbmV3IGl0ZW0uIChUaGUgbXV0ZXggaXMgdW5sb2NrZWQKICAgICAgZHVyaW5nIHRoZSB3YWl0aW5nIHN0YWdlIGFuZCBoYXMgdG8gYmUgcmVnYWluZWQgd2hlbiB0aGUgY29uZGl0aW9uIGlzIG1ldC4pIElmIHRoZXJlIGlzIGEgc3BhY2UgaW4gdGhlIGJ1ZmZlcgogICAgICBhdmFpbGFibGUsIHRoZSBleGVjdXRpb24gY29udGludWVzIGFuZCB0aGUgbWV0aG9kIGluc2VydHMgdGhlIGl0ZW0gYXQgdGhlIGVuZCBvZiB0aGUKICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4gVGhlbiBpdCBpbmNyZW1lbnRzIHRoZSBudW1iZXIgb2YgdW5yZWFkIGl0ZW1zIGFuZCB1bmxvY2tzIHRoZSBtdXRleCAoaW4gY2FzZSBhbgogICAgICBleGNlcHRpb24gaXMgdGhyb3duIGJlZm9yZSB0aGUgbXV0ZXggaXMgdW5sb2NrZWQsIHRoZSBtdXRleCBpcyB1bmxvY2tlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBkZXN0cnVjdG9yIG9mIHRoZQogICAgICA8Y29kZT5zY29wZWRfbG9jazwvY29kZT4pLiBBdCBsYXN0IHRoZSBtZXRob2Qgbm90aWZpZXMgb25lIG9mIHRoZSBjb25zdW1lciB0aHJlYWRzIHdhaXRpbmcgZm9yIGEgbmV3IGl0ZW0gdG8gYmUKICAgICAgaW5zZXJ0ZWQgaW50byB0aGUgYnVmZmVyLgogICAgPC9wPgogICAgPHA+CiAgICAgIFRoZSA8Y29kZT5wb3BfYmFjaygpPC9jb2RlPiBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBjb25zdW1lciB0aHJlYWQgaW4gb3JkZXIgdG8gcmVhZCB0aGUgbmV4dCBpdGVtIGZyb20gdGhlCiAgICAgIGJ1ZmZlci4gVGhlIG1ldGhvZCBsb2NrcyB0aGUgbXV0ZXggYW5kIHdhaXRzIHVudGlsIHRoZXJlIGlzIGFuIHVucmVhZCBpdGVtIGluIHRoZSBidWZmZXIuIElmIHRoZXJlIGlzIGF0IGxlYXN0CiAgICAgIG9uZSB1bnJlYWQgaXRlbSwgdGhlIG1ldGhvZCBkZWNyZW1lbnRzIHRoZSBudW1iZXIgb2YgdW5yZWFkIGl0ZW1zIGFuZCByZWFkcyB0aGUgbmV4dCBpdGVtIGZyb20gdGhlCiAgICAgIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uIFRoZW4gaXQgdW5sb2NrcyB0aGUgbXV0ZXggYW5kIG5vdGlmaWVzIG9uZSBvZiB0aGUgcHJvZHVjZXIgdGhyZWFkcyB3YWl0aW5nIGZvciB0aGUKICAgICAgYnVmZmVyIHRvIGZyZWUgYSBzcGFjZSBmb3IgdGhlIG5leHQgaXRlbS4KICAgIDwvcD4KICAgIDxwPgogICAgICBUaGUgPGNvZGU+cG9wX2JhY2soKTwvY29kZT4gbWV0aG9kIGRvZXMgbm90IHJlbW92ZSB0aGUgaXRlbSBidXQgdGhlIGl0ZW0gaXMgbGVmdCBpbiB0aGUKICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB3aGljaCB0aGVuIHJlcGxhY2VzIGl0IHdpdGggYSBuZXcgb25lIChpbnNlcnRlZCBieSBhIHByb2R1Y2VyKSB3aGVuIHRoZQogICAgICA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGlzIGZ1bGwuIFRoaXMgdGVjaG5pcXVlIGlzIG1vcmUgZWZmZWN0aXZlIHRoYW4gcmVtb3ZpbmcgdGhlIGl0ZW0gZXhwbGljaXRseSBieQogICAgICBjYWxsaW5nIHRoZSA8Y29kZT5wb3BfYmFjaygpPC9jb2RlPiBtZXRob2Qgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uIFRoaXMgY2xhaW0gaXMgYmFzZWQgb24gdGhlCiAgICAgIGFzc3VtcHRpb24gdGhhdCBhbiBhc3NpZ25tZW50IChyZXBsYWNlbWVudCkgb2YgYSBuZXcgaXRlbSBpbnRvIGFuIG9sZCBvbmUgaXMgbW9yZSBlZmZlY3RpdmUgdGhhbiBhIGRlc3RydWN0aW9uCiAgICAgIChyZW1vdmFsKSBvZiBhbiBvbGQgaXRlbSBhbmQgYSBjb25zZXF1ZW50IGlucGxhY2UgY29uc3RydWN0aW9uIChpbnNlcnRpb24pIG9mIGEgbmV3IGl0ZW0uCiAgICA8L3A+CiAgICA8cD4KICAgICAgRm9yIGNvbXBhcmlzb24gb2YgYm91bmRlZCBidWZmZXJzIGJhc2VkIG9uIGRpZmZlcmVudCBjb250YWluZXJzIGNvbXBpbGUgYW5kIHJ1biA8YSBocmVmPQogICAgICAiLi4vdGVzdC9ib3VuZGVkX2J1ZmZlcl9jb21wYXJpc29uLmNwcCI+Ym91bmRlZF9idWZmZXJfY29tcGFyaXNvbi5jcHA8L2E+LiBUaGUgdGVzdCBzaG91bGQgcmV2ZWFsIHRoZSBib3VuZGVkCiAgICAgIGJ1ZmZlciBiYXNlZCBvbiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBpcyBtb3N0IGVmZmVjdGl2ZSBjbG9zZWx5IGZvbGxvd2VkIGJ5IHRoZQogICAgICA8Y29kZT5zdGQ6OmRlcXVlPC9jb2RlPiBiYXNlZCBib3VuZGVkIGJ1ZmZlci4gKEluIHJlYWxpdHkgdGhlIHJlc3VsdCBtYXkgZGlmZmVyIHNvbWV0aW1lcyBiZWNhdXNlIHRoZSB0ZXN0IGlzCiAgICAgIGFsd2F5cyBhZmZlY3RlZCBieSBleHRlcm5hbCBmYWN0b3JzIHN1Y2ggYXMgaW1tZWRpYXRlIENQVSBsb2FkLikKICAgIDwvcD4KICAgIDxoMj4KICAgICAgPGEgbmFtZT0iaGVhZGVyIiBpZD0iaGVhZGVyIj5IZWFkZXIgRmlsZXM8L2E+CiAgICA8L2gyPgogICAgPHA+CiAgICAgIFRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGlzIGRlZmluZWQgaW4gdGhlIGZpbGUgPGNvZGU+PGEgaHJlZj0KICAgICAgIi4uLy4uLy4uL2Jvb3N0L2NpcmN1bGFyX2J1ZmZlci5ocHAiPmJvb3N0L2NpcmN1bGFyX2J1ZmZlci5ocHA8L2E+PC9jb2RlPi4gVGhlcmUgaXMgYWxzbyBhIGZvcndhcmQgZGVjbGFyYXRpb24KICAgICAgZm9yIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGluIHRoZSBoZWFkZXIgZmlsZSA8Y29kZT48YSBocmVmPQogICAgICAiLi4vLi4vLi4vYm9vc3QvY2lyY3VsYXJfYnVmZmVyX2Z3ZC5ocHAiPmJvb3N0L2NpcmN1bGFyX2J1ZmZlcl9md2QuaHBwPC9hPjwvY29kZT4uCiAgICA8L3A+CiAgICA8aDI+CiAgICAgIDxhIG5hbWU9Im1vZGVsIiBpZD0ibW9kZWwiPk1vZGVsbGVkIENvbmNlcHRzPC9hPgogICAgPC9oMj4KICAgIDxwPgogICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvUmFuZG9tQWNjZXNzQ29udGFpbmVyLmh0bWwiPlJhbmRvbSBBY2Nlc3MgQ29udGFpbmVyPC9hPiwgPGEgaHJlZj0KICAgICAgImh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9Gcm9udEluc2VydGlvblNlcXVlbmNlLmh0bWwiPkZyb250IEluc2VydGlvbiBTZXF1ZW5jZTwvYT4gYW5kIDxhIGhyZWY9CiAgICAgICJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvQmFja0luc2VydGlvblNlcXVlbmNlLmh0bWwiPkJhY2sgSW5zZXJ0aW9uIFNlcXVlbmNlPC9hPi4KICAgIDwvcD4KICAgIDxoMj4KICAgICAgPGEgbmFtZT0icGFyYW1ldGVycyIgaWQ9InBhcmFtZXRlcnMiPlRlbXBsYXRlIFBhcmFtZXRlcnM8L2E+CiAgICA8L2gyPgogICAgPGRpdiBpZD0ic3JjZG9jX3BhcmFtcyI+CiAgICAgIDx0YWJsZSBpZD0idGFibGVfdGVtcGxhdGVfcGFyYW1zIiBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIzIj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGg+CiAgICAgICAgICAgIFBhcmFtZXRlcgogICAgICAgICAgPC90aD4KICAgICAgICAgIDx0aD4KICAgICAgICAgICAgRGVzY3JpcHRpb24KICAgICAgICAgIDwvdGg+CiAgICAgICAgICA8dGg+CiAgICAgICAgICAgIERlZmF1bHQKICAgICAgICAgIDwvdGg+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJ0ZW1wbGF0ZXBhcmFtX1QiIG5hbWU9InRlbXBsYXRlcGFyYW1fVCI+PGNvZGU+VDwvY29kZT48L2E+CiAgICAgICAgICA8L3RkPgogICAgICAgICAgPHRkPgogICAgICAgICAgICBUaGUgdHlwZSBvZiB0aGUgZWxlbWVudHMgc3RvcmVkIGluIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VHlwZSBSZXF1aXJlbWVudHM6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIDxjb2RlPlQ8L2NvZGU+IGhhcyB0byBiZSA8YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvQXNzaWduYWJsZS5odG1sIj5TR0lBc3NpZ25hYmxlPC9hPgogICAgICAgICAgICAgICAgKFNHSSBTVEwgZGVmaW5lZCBjb21iaW5hdGlvbiBvZiA8YSBocmVmPSIuLi8uLi91dGlsaXR5L0Fzc2lnbmFibGUuaHRtbCI+QXNzaWduYWJsZTwvYT4gYW5kIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiLi4vLi4vdXRpbGl0eS9Db3B5Q29uc3RydWN0aWJsZS5odG1sIj5Db3B5Q29uc3RydWN0aWJsZTwvYT4pLiBNb3Jlb3ZlciA8Y29kZT5UPC9jb2RlPiBoYXMgdG8gYmUKICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9EZWZhdWx0Q29uc3RydWN0aWJsZS5odG1sIj5EZWZhdWx0Q29uc3RydWN0aWJsZTwvYT4gaWYgc3VwcGxpZWQgYXMKICAgICAgICAgICAgICAgIGEgZGVmYXVsdCBwYXJhbWV0ZXIgd2hlbiBpbnZva2luZyBzb21lIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+J3MgbWV0aG9kcyBlLmcuCiAgICAgICAgICAgICAgICA8Y29kZT5pbnNlcnQoaXRlcmF0b3IgcG9zLCBjb25zdCB2YWx1ZV90eXBlJmFtcDsgaXRlbSA9IHZhbHVlX3R5cGUoKSk8L2NvZGU+LiBBbmQgPGEgaHJlZj0KICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvRXF1YWxpdHlDb21wYXJhYmxlLmh0bWwiPkVxdWFsaXR5Q29tcGFyYWJsZTwvYT4gYW5kL29yIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiLi4vLi4vdXRpbGl0eS9MZXNzVGhhbkNvbXBhcmFibGUuaHRtbCI+TGVzc1RoYW5Db21wYXJhYmxlPC9hPiBpZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB3aWxsCiAgICAgICAgICAgICAgICBiZSBjb21wYXJlZCB3aXRoIGFub3RoZXIgY29udGFpbmVyLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0idGVtcGxhdGVwYXJhbV9BbGxvYyIgbmFtZT0idGVtcGxhdGVwYXJhbV9BbGxvYyI+PGNvZGU+QWxsb2M8L2NvZGU+PC9hPgogICAgICAgICAgPC90ZD4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgVGhlIGFsbG9jYXRvciB0eXBlIHVzZWQgZm9yIGFsbCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudC4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlR5cGUgUmVxdWlyZW1lbnRzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFRoZSA8Y29kZT5BbGxvYzwvY29kZT4gaGFzIHRvIG1lZXQgdGhlIGFsbG9jYXRvciByZXF1aXJlbWVudHMgaW1wb3NlZCBieSBTVEwuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxjb2RlPnN0ZDo6YWxsb2NhdG9yJmx0O1QmZ3Q7PC9jb2RlPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8aDI+CiAgICAgIDxhIG5hbWU9InR5cGVzIiBpZD0idHlwZXMiPlB1YmxpYyBUeXBlczwvYT4KICAgIDwvaDI+CiAgICA8ZGl2IGlkPSJzcmNkb2NfdHlwZXMiPgogICAgICA8dGFibGUgaWQ9InRhYmxlX3B1YmxpY190eXBlcyIgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMyI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRoPgogICAgICAgICAgICBUeXBlCiAgICAgICAgICA8L3RoPgogICAgICAgICAgPHRoPgogICAgICAgICAgICBEZXNjcmlwdGlvbgogICAgICAgICAgPC90aD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xY2JkZDdjYTg3ZTE0N2MwOGNkMmJlMjY3ZWVmZDY1NDAiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWNiZGQ3Y2E4N2UxNDdjMDhjZDJiZTI2N2VlZmQ2NTQwIj48Y29kZT52YWx1ZV90eXBlPC9jb2RlPjwvYT4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIFRoZSB0eXBlIG9mIGVsZW1lbnRzIHN0b3JlZCBpbiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTRmZjkxN2Y4YTYxMzFlYzE4ZTkxNjA2NzI3NTkyYTljIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE0ZmY5MTdmOGE2MTMxZWMxOGU5MTYwNjcyNzU5MmE5YyI+PGNvZGU+cG9pbnRlcjwvY29kZT48L2E+CiAgICAgICAgICA8L3RkPgogICAgICAgICAgPHRkPgogICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gZWxlbWVudC4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTkwZjdjNmJjYjYyNGFkNTA3ZGU1NDYzNjZmNDkwMjhhIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5MGY3YzZiY2I2MjRhZDUwN2RlNTQ2MzY2ZjQ5MDI4YSI+PGNvZGU+Y29uc3RfcG9pbnRlcjwvY29kZT48L2E+CiAgICAgICAgICA8L3RkPgogICAgICAgICAgPHRkPgogICAgICAgICAgICBBIGNvbnN0IHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQuCiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFmMzhhOWJjNjRkODQ3NTdjNjYxYzI1NDJmZjlhN2Y2NSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZjM4YTliYzY0ZDg0NzU3YzY2MWMyNTQyZmY5YTdmNjUiPjxjb2RlPnJlZmVyZW5jZTwvY29kZT48L2E+CiAgICAgICAgICA8L3RkPgogICAgICAgICAgPHRkPgogICAgICAgICAgICBBIHJlZmVyZW5jZSB0byBhbiBlbGVtZW50LgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTgzOTcxOTEwOTJmNWJhY2VlOTkxYjYyM2NhNGI5MTAiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE4Mzk3MTkxMDkyZjViYWNlZTk5MWI2MjNjYTRiOTEwIj48Y29kZT5jb25zdF9yZWZlcmVuY2U8L2NvZGU+PC9hPgogICAgICAgICAgPC90ZD4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgQSBjb25zdCByZWZlcmVuY2UgdG8gYW4gZWxlbWVudC4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTUzMTNlNzIzZmE4NWQ3M2RiNTgyNmY4YjcyMmFhMmE5IiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1MzEzZTcyM2ZhODVkNzNkYjU4MjZmOGI3MjJhYTJhOSI+PGNvZGU+ZGlmZmVyZW5jZV90eXBlPC9jb2RlPjwvYT4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIFRoZSBkaXN0YW5jZSB0eXBlLiAoQSBzaWduZWQgaW50ZWdyYWwgdHlwZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gaXRlcmF0b3JzLikKICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTliYTEyYzAxNDJhMjFhN2Q5NjA4NzdjMjJmYTNlYTAwIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5YmExMmMwMTQyYTIxYTdkOTYwODc3YzIyZmEzZWEwMCI+PGNvZGU+c2l6ZV90eXBlPC9jb2RlPjwvYT4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIFRoZSBzaXplIHR5cGUuIChBbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIHRoYXQgY2FuIHJlcHJlc2VudCBhbnkgbm9uLW5lZ2F0aXZlIHZhbHVlIG9mIHRoZSBjb250YWluZXIncwogICAgICAgICAgICBkaXN0YW5jZSB0eXBlLikKICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTRlMDdjNmRkZmU4OWRlYmUzODRlNTliZWQwNmU3Y2I3IiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE0ZTA3YzZkZGZlODlkZWJlMzg0ZTU5YmVkMDZlN2NiNyI+PGNvZGU+YWxsb2NhdG9yX3R5cGU8L2NvZGU+PC9hPgogICAgICAgICAgPC90ZD4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgVGhlIHR5cGUgb2YgYW4gYWxsb2NhdG9yIHVzZWQgaW4gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1Y2FiNmQ0NmYwM2M0MGQxZTUyZDQxODQzMzE5ZGRiOSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWNhYjZkNDZmMDNjNDBkMWU1MmQ0MTg0MzMxOWRkYjkiPjxjb2RlPmNvbnN0X2l0ZXJhdG9yPC9jb2RlPjwvYT4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIEEgY29uc3QgKHJhbmRvbSBhY2Nlc3MpIGl0ZXJhdG9yIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTFiOGEzM2YyZGM4NTE5YjhhN2QzNDRlZDQ0MDhjNTMyIj48Y29kZT5pdGVyYXRvcjwvY29kZT48L2E+CiAgICAgICAgICA8L3RkPgogICAgICAgICAgPHRkPgogICAgICAgICAgICBBIChyYW5kb20gYWNjZXNzKSBpdGVyYXRvciB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWM3MzE3NzAxYjUxMWJjNWY3YTY2M2IwNmI1M2UyYjczIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFjNzMxNzcwMWI1MTFiYzVmN2E2NjNiMDZiNTNlMmI3MyI+PGNvZGU+Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcjwvY29kZT48L2E+CiAgICAgICAgICA8L3RkPgogICAgICAgICAgPHRkPgogICAgICAgICAgICBBIGNvbnN0IGl0ZXJhdG9yIHVzZWQgdG8gaXRlcmF0ZSBiYWNrd2FyZHMgdGhyb3VnaCBhIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwMDJmYjg5MGRkZWQ4OWU3NWRmZWI2ZjAyMWZiNThhNSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMDAyZmI4OTBkZGVkODllNzVkZmViNmYwMjFmYjU4YTUiPjxjb2RlPnJldmVyc2VfaXRlcmF0b3I8L2NvZGU+PC9hPgogICAgICAgICAgPC90ZD4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgQW4gaXRlcmF0b3IgdXNlZCB0byBpdGVyYXRlIGJhY2t3YXJkcyB0aHJvdWdoIGEgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTI2ZDI3OWY5MWZlZjcxN2UyNTQ1OWEwODE3ZmYyNDJmIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyNmQyNzlmOTFmZWY3MTdlMjU0NTlhMDgxN2ZmMjQyZiI+PGNvZGU+YXJyYXlfcmFuZ2U8L2NvZGU+PC9hPgogICAgICAgICAgPC90ZD4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgQW4gYXJyYXkgcmFuZ2UuIChBIHR5cGVkZWYgZm9yIHRoZSA8YSBocmVmPQogICAgICAgICAgICAiaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL3BhaXIuaHRtbCI+PGNvZGU+c3RkOjpwYWlyPC9jb2RlPjwvYT4gd2hlcmUgaXRzIGZpcnN0IGVsZW1lbnQgaXMgYSBwb2ludGVyIHRvCiAgICAgICAgICAgIGEgYmVnaW5uaW5nIG9mIGFuIGFycmF5IGFuZCBpdHMgc2Vjb25kIGVsZW1lbnQgcmVwcmVzZW50cyBhIHNpemUgb2YgdGhlIGFycmF5LikKICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTE4ODVkN2Y0NzViN2U3YTc0Yzk1YjI0NDhkMjQzMDI1IiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExODg1ZDdmNDc1YjdlN2E3NGM5NWIyNDQ4ZDI0MzAyNSI+PGNvZGU+Y29uc3RfYXJyYXlfcmFuZ2U8L2NvZGU+PC9hPgogICAgICAgICAgPC90ZD4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgQSByYW5nZSBvZiBhIGNvbnN0IGFycmF5LiAoQSB0eXBlZGVmIGZvciB0aGUgPGEgaHJlZj0KICAgICAgICAgICAgImh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9wYWlyLmh0bWwiPjxjb2RlPnN0ZDo6cGFpcjwvY29kZT48L2E+IHdoZXJlIGl0cyBmaXJzdCBlbGVtZW50IGlzIGEgcG9pbnRlciB0bwogICAgICAgICAgICBhIGJlZ2lubmluZyBvZiBhIGNvbnN0IGFycmF5IGFuZCBpdHMgc2Vjb25kIGVsZW1lbnQgcmVwcmVzZW50cyBhIHNpemUgb2YgdGhlIGNvbnN0IGFycmF5LikKICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWRjNjQyZmYyYmU0ZGIwYmUxYTQ1NzgxMGU1ZDA5NTk1IiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYzY0MmZmMmJlNGRiMGJlMWE0NTc4MTBlNWQwOTU5NSI+PGNvZGU+Y2FwYWNpdHlfdHlwZTwvY29kZT48L2E+CiAgICAgICAgICA8L3RkPgogICAgICAgICAgPHRkPgogICAgICAgICAgICBUaGUgY2FwYWNpdHkgdHlwZS4gKFNhbWUgYXMgPGNvZGU+c2l6ZV90eXBlPC9jb2RlPiAtIGRlZmluZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIDxhIGhyZWY9CiAgICAgICAgICAgICJzcGFjZV9vcHRpbWl6ZWQuaHRtbCI+PGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT48L2E+LikKICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgogICAgPGgyPgogICAgICA8YSBuYW1lPSJjb25zdHJ1Y3RvcnMiIGlkPSJjb25zdHJ1Y3RvcnMiPkNvbnN0cnVjdG9ycyBhbmQgRGVzdHJ1Y3RvcjwvYT4KICAgIDwvaDI+CiAgICA8ZGl2IGlkPSJzcmNkb2NfY29uc3RydWN0b3JzIj4KICAgICAgPHRhYmxlIGlkPSJ0YWJsZV9jb25zdHJ1Y3RvcnMiIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjMiPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZTUzZTc0NGQyZjk0YTJiY2JmY2RiMjE5YTlkOTMzMDAiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWU1M2U3NDRkMmY5NGEyYmNiZmNkYjIxOWE5ZDkzMzAwIj48L2E+PGNvZGU+PGI+ZXhwbGljaXQKICAgICAgICAgICAgY2lyY3VsYXJfYnVmZmVyKGNvbnN0IDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE0ZTA3YzZkZGZlODlkZWJlMzg0ZTU5YmVkMDZlN2NiNyI+YWxsb2NhdG9yX3R5cGU8L2E+JmFtcDsgYWxsb2MgPQogICAgICAgICAgICBhbGxvY2F0b3JfdHlwZSgpKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBDcmVhdGUgYW4gZW1wdHkgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB3aXRoIHplcm8gY2FwYWNpdHkuCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWViYWIyYjI1MzhkNzMzNzkwYjU3NTI1ODI3MjhlNzciPmNhcGFjaXR5KCk8L2E+ID09IDAKICAgICAgICAgICAgICAgICZhbXA7JmFtcDsgPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4gPT0KICAgICAgICAgICAgICAgIDA8L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmFsbG9jPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGFsbG9jYXRvci4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+V2FybmluZzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBTaW5jZSBCb29zdCB2ZXJzaW9uIDEuMzYgdGhlIGJlaGF2aW91ciBvZiB0aGlzIGNvbnN0cnVjdG9yIGhhcyBjaGFuZ2VkLiBOb3cgdGhlIGNvbnN0cnVjdG9yIGRvZXMgbm90CiAgICAgICAgICAgICAgICBhbGxvY2F0ZSBhbnkgbWVtb3J5IGFuZCBib3RoIGNhcGFjaXR5IGFuZCBzaXplIGFyZSBzZXQgdG8gemVyby4gQWxzbyBub3RlIHdoZW4gaW5zZXJ0aW5nIGFuIGVsZW1lbnQKICAgICAgICAgICAgICAgIGludG8gYSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHdpdGggemVybyBjYXBhY2l0eSAoZS5nLiBieSA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWFhMzVkZDdlZjhlYjFkMDQ1MDg0OTRkMTgzNWNjODJlIj5wdXNoX2JhY2soY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgICBvciA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyOGM5Mjc0MGZlZTFiOWRlYjhjNjk4MTZlMzg5ZGU5NSI+aW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPikgbm90aGluZyB3aWxsIGJlIGluc2VydGVkIGFuZCB0aGUgc2l6ZSAoYXMgd2VsbCBhcyBjYXBhY2l0eSkgcmVtYWlucyB6ZXJvLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Ob3RlOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFlvdSBjYW4gZXhwbGljaXRseSBzZXQgdGhlIGNhcGFjaXR5IGJ5IGNhbGxpbmcgdGhlIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNjE3MTQyMDRlZjUxNzJkMTU2ZTJjN2VjY2QwNDk5OGYiPnNldF9jYXBhY2l0eShjYXBhY2l0eV90eXBlKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgICBtZXRob2Qgb3IgeW91IGNhbiB1c2UgdGhlIG90aGVyIGNvbnN0cnVjdG9yIHdpdGggdGhlIGNhcGFjaXR5IHNwZWNpZmllZC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE4ZjE2MDZhMjZmZWFkOTIzYzJjYmUwNjhhNzRlMjhiNiI+Y2lyY3VsYXJfYnVmZmVyKGNhcGFjaXR5X3R5cGUsCiAgICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSZhbXA7IGFsbG9jKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTYxNzE0MjA0ZWY1MTcyZDE1NmUyYzdlY2NkMDQ5OThmIj5zZXRfY2FwYWNpdHkoY2FwYWNpdHlfdHlwZSk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE4ZjE2MDZhMjZmZWFkOTIzYzJjYmUwNjhhNzRlMjhiNiIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOGYxNjA2YTI2ZmVhZDkyM2MyY2JlMDY4YTc0ZTI4YjYiPjwvYT48Y29kZT48Yj5leHBsaWNpdAogICAgICAgICAgICBjaXJjdWxhcl9idWZmZXIoPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWRjNjQyZmYyYmU0ZGIwYmUxYTQ1NzgxMGU1ZDA5NTk1Ij5jYXBhY2l0eV90eXBlPC9hPiBidWZmZXJfY2FwYWNpdHksCiAgICAgICAgICAgIGNvbnN0IDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTRlMDdjNmRkZmU4OWRlYmUzODRlNTliZWQwNmU3Y2I3Ij5hbGxvY2F0b3JfdHlwZTwvYT4mYW1wOwogICAgICAgICAgICBhbGxvYyA9IGFsbG9jYXRvcl90eXBlKCkpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIENyZWF0ZSBhbiBlbXB0eSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHdpdGggdGhlIHNwZWNpZmllZCBjYXBhY2l0eS4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZWJhYjJiMjUzOGQ3MzM3OTBiNTc1MjU4MjcyOGU3NyI+Y2FwYWNpdHkoKTwvYT4gPT0KICAgICAgICAgICAgICAgIGJ1ZmZlcl9jYXBhY2l0eSAmYW1wOyZhbXA7IDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4gPT0gMDwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+YnVmZmVyX2NhcGFjaXR5PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHdoaWNoIGNhbiBiZSBzdG9yZWQgaW4gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5hbGxvYzwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBhbGxvY2F0b3IuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWZkYWNlOGYxMTBkNWI3YTE3YzAyMDIwNzU3ZjA2ZmU4IiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFmZGFjZThmMTEwZDViN2ExN2MwMjAyMDc1N2YwNmZlOCI+PC9hPjxjb2RlPjxiPmNpcmN1bGFyX2J1ZmZlcig8YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOWJhMTJjMDE0MmEyMWE3ZDk2MDg3N2MyMmZhM2VhMDAiPnNpemVfdHlwZTwvYT4gbiwgPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE4Mzk3MTkxMDkyZjViYWNlZTk5MWI2MjNjYTRiOTEwIj5jb25zdF9yZWZlcmVuY2U8L2E+IGl0ZW0sIGNvbnN0CiAgICAgICAgICAgIDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTRlMDdjNmRkZmU4OWRlYmUzODRlNTliZWQwNmU3Y2I3Ij5hbGxvY2F0b3JfdHlwZTwvYT4mYW1wOyBhbGxvYyA9CiAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlKCkpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIENyZWF0ZSBhIGZ1bGwgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB3aXRoIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgYW5kIGZpbGxlZCB3aXRoIDxjb2RlPm48L2NvZGU+CiAgICAgICAgICAgIGNvcGllcyBvZiA8Y29kZT5pdGVtPC9jb2RlPi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZWJhYjJiMjUzOGQ3MzM3OTBiNTc1MjU4MjcyOGU3NyI+Y2FwYWNpdHkoKTwvYT4gPT0gbgogICAgICAgICAgICAgICAgJmFtcDsmYW1wOyA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFmZDBlZWY4YmE5MTIxMGQxNTc1NDA0YjdlM2U4MjA3YSI+ZnVsbCgpPC9hPgogICAgICAgICAgICAgICAgJmFtcDsmYW1wOyAoKnRoaXMpWzBdID09IGl0ZW0gJmFtcDsmYW1wOyAoKnRoaXMpWzFdID09IGl0ZW0gJmFtcDsmYW1wOyAuLi4gJmFtcDsmYW1wOyAoKnRoaXMpW24gLSAxXSA9PQogICAgICAgICAgICAgICAgaXRlbTwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bjwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIGNyZWF0ZWQgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB3aWxsIGJlIGZpbGxlZCB3aXRoLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+aXRlbTwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBlbGVtZW50IHRoZSBjcmVhdGVkIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gd2lsbCBiZSBmaWxsZWQgd2l0aC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmFsbG9jPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGFsbG9jYXRvci4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gdGhlIDxjb2RlPm48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMDRkYzY0NDQ4NmQ4MzViNTZhYTQ3OWVjNDhiNTIyMzAiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTA0ZGM2NDQ0ODZkODM1YjU2YWE0NzllYzQ4YjUyMjMwIj48L2E+PGNvZGU+PGI+Y2lyY3VsYXJfYnVmZmVyKDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYzY0MmZmMmJlNGRiMGJlMWE0NTc4MTBlNWQwOTU5NSI+Y2FwYWNpdHlfdHlwZTwvYT4gYnVmZmVyX2NhcGFjaXR5LAogICAgICAgICAgICA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5YmExMmMwMTQyYTIxYTdkOTYwODc3YzIyZmEzZWEwMCI+c2l6ZV90eXBlPC9hPiBuLCA8YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTgzOTcxOTEwOTJmNWJhY2VlOTkxYjYyM2NhNGI5MTAiPmNvbnN0X3JlZmVyZW5jZTwvYT4gaXRlbSwgY29uc3QKICAgICAgICAgICAgPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNGUwN2M2ZGRmZTg5ZGViZTM4NGU1OWJlZDA2ZTdjYjciPmFsbG9jYXRvcl90eXBlPC9hPiZhbXA7IGFsbG9jID0KICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGUoKSk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgQ3JlYXRlIGEgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB3aXRoIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgYW5kIGZpbGxlZCB3aXRoIDxjb2RlPm48L2NvZGU+IGNvcGllcyBvZgogICAgICAgICAgICA8Y29kZT5pdGVtPC9jb2RlPi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT5idWZmZXJfY2FwYWNpdHkgJmd0Oz0gbjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVlYmFiMmIyNTM4ZDczMzc5MGI1NzUyNTgyNzI4ZTc3Ij5jYXBhY2l0eSgpPC9hPiA9PQogICAgICAgICAgICAgICAgYnVmZmVyX2NhcGFjaXR5ICZhbXA7JmFtcDsgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiA9PSBuICZhbXA7JmFtcDsKICAgICAgICAgICAgICAgICgqdGhpcylbMF0gPT0gaXRlbSAmYW1wOyZhbXA7ICgqdGhpcylbMV0gPT0gaXRlbSAmYW1wOyZhbXA7IC4uLiAmYW1wOyZhbXA7ICgqdGhpcylbbiAtIDFdID09CiAgICAgICAgICAgICAgICBpdGVtPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5idWZmZXJfY2FwYWNpdHk8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgY2FwYWNpdHkgb2YgdGhlIGNyZWF0ZWQgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPm48L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoZSBjcmVhdGVkIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gd2lsbCBiZSBmaWxsZWQgd2l0aC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPml0ZW08L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgZWxlbWVudCB0aGUgY3JlYXRlZCA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHdpbGwgYmUgZmlsbGVkIHdpdGguCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5hbGxvYzwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBhbGxvY2F0b3IuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIHRoZSA8Y29kZT5uPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWU1MTVkOGE5NTFlZWIxOGI4Y2M5MzAzMDBlN2UxM2JkIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFlNTE1ZDhhOTUxZWViMThiOGNjOTMwMzAwZTdlMTNiZCI+PC9hPjxjb2RlPjxiPmNpcmN1bGFyX2J1ZmZlcihjb25zdAogICAgICAgICAgICBjaXJjdWxhcl9idWZmZXImbHQ7VCxBbGxvYyZndDsmYW1wOyBjYik7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgVGhlIGNvcHkgY29uc3RydWN0b3IuCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIENyZWF0ZXMgYSBjb3B5IG9mIHRoZSBzcGVjaWZpZWQgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPip0aGlzID09IGNiPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5jYjwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHRvIGJlIGNvcGllZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gdGhlIHNpemUgb2YgPGNvZGU+Y2I8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNzQ0ZWMwNmIwNmE1YTcyMzM4NmI2NDVhMjljYjhlZDIiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTc0NGVjMDZiMDZhNWE3MjMzODZiNjQ1YTI5Y2I4ZWQyIj48L2E+IDxjb2RlPjxiPnRlbXBsYXRlICZsdDtjbGFzcwogICAgICAgICAgICBJbnB1dEl0ZXJhdG9yJmd0Ozxicj4KICAgICAgICAgICAgICAgIGNpcmN1bGFyX2J1ZmZlcihJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QsIGNvbnN0IDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE0ZTA3YzZkZGZlODlkZWJlMzg0ZTU5YmVkMDZlN2NiNyI+YWxsb2NhdG9yX3R5cGU8L2E+JmFtcDsgYWxsb2MgPQogICAgICAgICAgICBhbGxvY2F0b3JfdHlwZSgpKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBDcmVhdGUgYSBmdWxsIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gZmlsbGVkIHdpdGggYSBjb3B5IG9mIHRoZSByYW5nZS4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBWYWxpZCByYW5nZSA8Y29kZT5bZmlyc3QsIGxhc3QpPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5maXJzdDwvY29kZT4gYW5kIDxjb2RlPmxhc3Q8L2NvZGU+IGhhdmUgdG8gbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0lucHV0SXRlcmF0b3IuaHRtbCI+SW5wdXRJdGVyYXRvcjwvYT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZWJhYjJiMjUzOGQ3MzM3OTBiNTc1MjU4MjcyOGU3NyI+Y2FwYWNpdHkoKTwvYT4gPT0KICAgICAgICAgICAgICAgIHN0ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpICZhbXA7JmFtcDsgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFmZDBlZWY4YmE5MTIxMGQxNTc1NDA0YjdlM2U4MjA3YSI+ZnVsbCgpPC9hPiAmYW1wOyZhbXA7ICgqdGhpcylbMF09PQogICAgICAgICAgICAgICAgKmZpcnN0ICZhbXA7JmFtcDsgKCp0aGlzKVsxXSA9PSAqKGZpcnN0ICsgMSkgJmFtcDsmYW1wOyAuLi4gJmFtcDsmYW1wOyAoKnRoaXMpW3N0ZDo6ZGlzdGFuY2UoZmlyc3QsCiAgICAgICAgICAgICAgICBsYXN0KSAtIDFdID09ICoobGFzdCAtIDEpPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5maXJzdDwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlIHRvIGJlIGNvcGllZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmxhc3Q8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgZW5kIG9mIHRoZSByYW5nZSB0byBiZSBjb3BpZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5hbGxvYzwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBhbGxvY2F0b3IuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIHRoZSA8Y29kZT5zdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KTwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhODUxZjc1ZjRhODViMWEyYjFhMjQxOTA0ZDIxNTAzZiIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTg1MWY3NWY0YTg1YjFhMmIxYTI0MTkwNGQyMTUwM2YiPjwvYT4gPGNvZGU+PGI+dGVtcGxhdGUgJmx0O2NsYXNzCiAgICAgICAgICAgIElucHV0SXRlcmF0b3ImZ3Q7PGJyPgogICAgICAgICAgICAgICAgY2lyY3VsYXJfYnVmZmVyKDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYzY0MmZmMmJlNGRiMGJlMWE0NTc4MTBlNWQwOTU5NSI+Y2FwYWNpdHlfdHlwZTwvYT4gYnVmZmVyX2NhcGFjaXR5LAogICAgICAgICAgICBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QsIGNvbnN0IDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE0ZTA3YzZkZGZlODlkZWJlMzg0ZTU5YmVkMDZlN2NiNyI+YWxsb2NhdG9yX3R5cGU8L2E+JmFtcDsgYWxsb2MgPQogICAgICAgICAgICBhbGxvY2F0b3JfdHlwZSgpKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBDcmVhdGUgYSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHdpdGggdGhlIHNwZWNpZmllZCBjYXBhY2l0eSBhbmQgZmlsbGVkIHdpdGggYSBjb3B5IG9mIHRoZSByYW5nZS4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBWYWxpZCByYW5nZSA8Y29kZT5bZmlyc3QsIGxhc3QpPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5maXJzdDwvY29kZT4gYW5kIDxjb2RlPmxhc3Q8L2NvZGU+IGhhdmUgdG8gbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0lucHV0SXRlcmF0b3IuaHRtbCI+SW5wdXRJdGVyYXRvcjwvYT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZWJhYjJiMjUzOGQ3MzM3OTBiNTc1MjU4MjcyOGU3NyI+Y2FwYWNpdHkoKTwvYT4gPT0KICAgICAgICAgICAgICAgIGJ1ZmZlcl9jYXBhY2l0eSAmYW1wOyZhbXA7IDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4gJmx0Oz0KICAgICAgICAgICAgICAgIHN0ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpICZhbXA7JmFtcDsgKCp0aGlzKVswXT09ICoobGFzdCAtIGJ1ZmZlcl9jYXBhY2l0eSkgJmFtcDsmYW1wOyAoKnRoaXMpWzFdID09CiAgICAgICAgICAgICAgICAqKGxhc3QgLSBidWZmZXJfY2FwYWNpdHkgKyAxKSAmYW1wOyZhbXA7IC4uLiAmYW1wOyZhbXA7ICgqdGhpcylbYnVmZmVyX2NhcGFjaXR5IC0gMV0gPT0gKihsYXN0IC0KICAgICAgICAgICAgICAgIDEpPC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIElmIHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gYmUgY29waWVkIGZyb20gdGhlIHJhbmdlIDxjb2RlPltmaXJzdCwgbGFzdCk8L2NvZGU+IGlzIGdyZWF0ZXIgdGhhbiB0aGUKICAgICAgICAgICAgICAgIHNwZWNpZmllZCA8Y29kZT5idWZmZXJfY2FwYWNpdHk8L2NvZGU+IHRoZW4gb25seSBlbGVtZW50cyBmcm9tIHRoZSByYW5nZSA8Y29kZT5bbGFzdCAtIGJ1ZmZlcl9jYXBhY2l0eSwKICAgICAgICAgICAgICAgIGxhc3QpPC9jb2RlPiB3aWxsIGJlIGNvcGllZC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+YnVmZmVyX2NhcGFjaXR5PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGNhcGFjaXR5IG9mIHRoZSBjcmVhdGVkIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5maXJzdDwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlIHRvIGJlIGNvcGllZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmxhc3Q8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgZW5kIG9mIHRoZSByYW5nZSB0byBiZSBjb3BpZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5hbGxvYzwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBhbGxvY2F0b3IuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIDxjb2RlPnN0ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpPC9jb2RlPjsgaW4gPGNvZGU+bWluW2NhcGFjaXR5LCBzdGQ6OmRpc3RhbmNlKGZpcnN0LAogICAgICAgICAgICAgICAgbGFzdCldPC9jb2RlPiBpZiB0aGUgPGNvZGU+SW5wdXRJdGVyYXRvcjwvY29kZT4gaXMgYSA8YSBocmVmPQogICAgICAgICAgICAgICAgImh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9SYW5kb21BY2Nlc3NJdGVyYXRvci5odG1sIj5SYW5kb21BY2Nlc3NJdGVyYXRvcjwvYT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE2NDI1MGZmYmJiZGJjNjJiOTllODMwMWZjMTk1YjgwYyIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNjQyNTBmZmJiYmRiYzYyYjk5ZTgzMDFmYzE5NWI4MGMiPjwvYT48Y29kZT48Yj5+Y2lyY3VsYXJfYnVmZmVyKCk7PC9iPjwvY29kZT48YnI+CgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIFRoZSBkZXN0cnVjdG9yLgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBEZXN0cm95cyB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vdGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJbnZhbGlkYXRlcyBhbGwgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IChpbmNsdWRpbmcgaXRlcmF0b3JzIGVxdWFsIHRvCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KSBmb3Igc2NhbGFyIHR5cGVzOyBsaW5lYXIgZm9yIG90aGVyIHR5cGVzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE4MjZmNTc3MGE0MGI4Yjc1MmViOTU4NzM3ODQ2NGQxZSI+Y2xlYXIoKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgogICAgPGgyPgogICAgICA8YSBuYW1lPSJtZXRob2RzIiBpZD0ibWV0aG9kcyI+UHVibGljIE1lbWJlciBGdW5jdGlvbnM8L2E+CiAgICA8L2gyPgogICAgPGRpdiBpZD0ic3JjZG9jX21ldGhvZHMiPgogICAgICA8dGFibGUgaWQ9InRhYmxlX21ldGhvZHMiIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjMiPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTIwYjdkMGU3YTRkYTBhZjEzMjg2ZGY5ZjUzZDY2MGMiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWEyMGI3ZDBlN2E0ZGEwYWYxMzI4NmRmOWY1M2Q2NjBjIj48L2E+PGNvZGU+PGI+PGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTRlMDdjNmRkZmU4OWRlYmUzODRlNTliZWQwNmU3Y2I3Ij5hbGxvY2F0b3JfdHlwZTwvYT4gZ2V0X2FsbG9jYXRvcigpCiAgICAgICAgICAgIGNvbnN0OzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEdldCB0aGUgYWxsb2NhdG9yLgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBUaGUgYWxsb2NhdG9yLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOby10aHJvdy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIERvZXMgbm90IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudCAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWFmNzc1OGEzNmFjMmY4NGEzMDI0YjUwYjRmYzdlMDk4Ij5nZXRfYWxsb2NhdG9yKCk8L2E+PC9jb2RlPiBmb3IKICAgICAgICAgICAgICAgIG9idGFpbmluZyBhbiBhbGxvY2F0b3IgcmVmZXJlbmNlLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhZjc3NThhMzZhYzJmODRhMzAyNGI1MGI0ZmM3ZTA5OCIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYWY3NzU4YTM2YWMyZjg0YTMwMjRiNTBiNGZjN2UwOTgiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNGUwN2M2ZGRmZTg5ZGViZTM4NGU1OWJlZDA2ZTdjYjciPmFsbG9jYXRvcl90eXBlPC9hPiZhbXA7CiAgICAgICAgICAgIGdldF9hbGxvY2F0b3IoKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBHZXQgdGhlIGFsbG9jYXRvciByZWZlcmVuY2UuCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBhbGxvY2F0b3IuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vLXRocm93LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgaXRlcmF0b3JzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPk5vdGU6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhpcyBtZXRob2Qgd2FzIGFkZGVkIGluIG9yZGVyIHRvIG9wdGltaXplIG9idGFpbmluZyBvZiB0aGUgYWxsb2NhdG9yIHdpdGggYSBzdGF0ZSwgYWx0aG91Z2ggdXNlIG9mCiAgICAgICAgICAgICAgICBzdGF0ZWZ1bCBhbGxvY2F0b3JzIGluIFNUTCBpcyBkaXNjb3VyYWdlZC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTIwYjdkMGU3YTRkYTBhZjEzMjg2ZGY5ZjUzZDY2MGMiPmdldF9hbGxvY2F0b3IoKQogICAgICAgICAgICAgICAgY29uc3Q8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1OGQxZWRlMmU4NWY1ZDQ2ZWRhOGRiM2YwYzRlZmVmMCIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiPml0ZXJhdG9yPC9hPiBiZWdpbigpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEdldCB0aGUgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlJldHVybnM6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQSByYW5kb20gYWNjZXNzIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LiBJZiB0aGUKICAgICAgICAgICAgICAgIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaXMgZW1wdHkgaXQgcmV0dXJucyBhbiBpdGVyYXRvciBlcXVhbCB0byB0aGUgb25lIHJldHVybmVkIGJ5CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vdGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm8tdGhyb3cuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBEb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYjNkNmIxMGI2NzYzNTQ5ZjU0ZDI2MjcyMjhmYTdhYSI+cmJlZ2luKCk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWNmZjkyMzZhNTAxMDcxODhiODk0Mjg0N2E0ZGMyNjk3Ij5yZW5kKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiPml0ZXJhdG9yPC9hPiBlbmQoKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBHZXQgdGhlIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEEgcmFuZG9tIGFjY2VzcyBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCAib25lIGJlaGluZCIgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUKICAgICAgICAgICAgICAgIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uIElmIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGlzIGVtcHR5IGl0IHJldHVybnMgYW4gaXRlcmF0b3IgZXF1YWwKICAgICAgICAgICAgICAgIHRvIHRoZSBvbmUgcmV0dXJuZWQgYnkgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1OGQxZWRlMmU4NWY1ZDQ2ZWRhOGRiM2YwYzRlZmVmMCI+YmVnaW4oKTwvYT48L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOby10aHJvdy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIERvZXMgbm90IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudCAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1OGQxZWRlMmU4NWY1ZDQ2ZWRhOGRiM2YwYzRlZmVmMCI+YmVnaW4oKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZGIzZDZiMTBiNjc2MzU0OWY1NGQyNjI3MjI4ZmE3YWEiPnJiZWdpbigpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFjZmY5MjM2YTUwMTA3MTg4Yjg5NDI4NDdhNGRjMjY5NyI+cmVuZCgpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMDY0MGQzZDQxYzEzYjYwODliNmYxNjkyMjRjZjEwMzgiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTA2NDBkM2Q0MWMxM2I2MDg5YjZmMTY5MjI0Y2YxMDM4Ij48L2E+PGNvZGU+PGI+PGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVjYWI2ZDQ2ZjAzYzQwZDFlNTJkNDE4NDMzMTlkZGI5Ij5jb25zdF9pdGVyYXRvcjwvYT4gYmVnaW4oKQogICAgICAgICAgICBjb25zdDs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBHZXQgdGhlIGNvbnN0IGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEEgY29uc3QgcmFuZG9tIGFjY2VzcyBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4gSWYKICAgICAgICAgICAgICAgIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGlzIGVtcHR5IGl0IHJldHVybnMgYW4gaXRlcmF0b3IgZXF1YWwgdG8gdGhlIG9uZSByZXR1cm5lZCBieQogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNzg5MDgxMGQwN2JjNTk1Y2ZiODdmOWM0N2NiMDc1YWMiPmVuZCgpCiAgICAgICAgICAgICAgICBjb25zdDwvYT48L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOby10aHJvdy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIERvZXMgbm90IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudCAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE3ODkwODEwZDA3YmM1OTVjZmI4N2Y5YzQ3Y2IwNzVhYyI+ZW5kKCkKICAgICAgICAgICAgICAgIGNvbnN0PC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNzY1ZDkxYmY0ODM0MTkwNzQxODQzM2ExZTNhYWIwMjYiPnJiZWdpbigpIGNvbnN0PC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwOGRiZjUzOGIwMGExNGRhZjU1ODJlY2U4MDc0NmZjMyI+cmVuZCgpCiAgICAgICAgICAgICAgICBjb25zdDwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTc4OTA4MTBkMDdiYzU5NWNmYjg3ZjljNDdjYjA3NWFjIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE3ODkwODEwZDA3YmM1OTVjZmI4N2Y5YzQ3Y2IwNzVhYyI+PC9hPjxjb2RlPjxiPjxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1Y2FiNmQ0NmYwM2M0MGQxZTUyZDQxODQzMzE5ZGRiOSI+Y29uc3RfaXRlcmF0b3I8L2E+IGVuZCgpCiAgICAgICAgICAgIGNvbnN0OzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEdldCB0aGUgY29uc3QgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlJldHVybnM6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQSBjb25zdCByYW5kb20gYWNjZXNzIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50ICJvbmUgYmVoaW5kIiB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZQogICAgICAgICAgICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4gSWYgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaXMgZW1wdHkgaXQgcmV0dXJucyBhbiBpdGVyYXRvciBlcXVhbAogICAgICAgICAgICAgICAgdG8gdGhlIG9uZSByZXR1cm5lZCBieSA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTA2NDBkM2Q0MWMxM2I2MDg5YjZmMTY5MjI0Y2YxMDM4Ij5iZWdpbigpIGNvbnN0PC9hPjwvY29kZT4gY29uc3QuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vLXRocm93LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgaXRlcmF0b3JzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTA2NDBkM2Q0MWMxM2I2MDg5YjZmMTY5MjI0Y2YxMDM4Ij5iZWdpbigpCiAgICAgICAgICAgICAgICBjb25zdDwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTc2NWQ5MWJmNDgzNDE5MDc0MTg0MzNhMWUzYWFiMDI2Ij5yYmVnaW4oKSBjb25zdDwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMDhkYmY1MzhiMDBhMTRkYWY1NTgyZWNlODA3NDZmYzMiPnJlbmQoKQogICAgICAgICAgICAgICAgY29uc3Q8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYjNkNmIxMGI2NzYzNTQ5ZjU0ZDI2MjcyMjhmYTdhYSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZGIzZDZiMTBiNjc2MzU0OWY1NGQyNjI3MjI4ZmE3YWEiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMDAyZmI4OTBkZGVkODllNzVkZmViNmYwMjFmYjU4YTUiPnJldmVyc2VfaXRlcmF0b3I8L2E+CiAgICAgICAgICAgIHJiZWdpbigpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEdldCB0aGUgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgInJldmVyc2VkIiA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBIHJldmVyc2UgcmFuZG9tIGFjY2VzcyBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LiBJZgogICAgICAgICAgICAgICAgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaXMgZW1wdHkgaXQgcmV0dXJucyBhbiBpdGVyYXRvciBlcXVhbCB0byB0aGUgb25lIHJldHVybmVkIGJ5CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFjZmY5MjM2YTUwMTA3MTg4Yjg5NDI4NDdhNGRjMjY5NyI+cmVuZCgpPC9hPjwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vLXRocm93LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgaXRlcmF0b3JzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWNmZjkyMzZhNTAxMDcxODhiODk0Mjg0N2E0ZGMyNjk3Ij5yZW5kKCk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU4ZDFlZGUyZTg1ZjVkNDZlZGE4ZGIzZjBjNGVmZWYwIj5iZWdpbigpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFjZmY5MjM2YTUwMTA3MTg4Yjg5NDI4NDdhNGRjMjY5NyIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xY2ZmOTIzNmE1MDEwNzE4OGI4OTQyODQ3YTRkYzI2OTciPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMDAyZmI4OTBkZGVkODllNzVkZmViNmYwMjFmYjU4YTUiPnJldmVyc2VfaXRlcmF0b3I8L2E+CiAgICAgICAgICAgIHJlbmQoKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBHZXQgdGhlIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlICJyZXZlcnNlZCIgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlJldHVybnM6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQSByZXZlcnNlIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQgIm9uZSBiZWZvcmUiIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZQogICAgICAgICAgICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4gSWYgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaXMgZW1wdHkgaXQgcmV0dXJucyBhbiBpdGVyYXRvciBlcXVhbAogICAgICAgICAgICAgICAgdG8gdGhlIG9uZSByZXR1cm5lZCBieSA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWRiM2Q2YjEwYjY3NjM1NDlmNTRkMjYyNzIyOGZhN2FhIj5yYmVnaW4oKTwvYT48L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOby10aHJvdy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIERvZXMgbm90IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudCAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYjNkNmIxMGI2NzYzNTQ5ZjU0ZDI2MjcyMjhmYTdhYSI+cmJlZ2luKCk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU4ZDFlZGUyZTg1ZjVkNDZlZGE4ZGIzZjBjNGVmZWYwIj5iZWdpbigpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE3NjVkOTFiZjQ4MzQxOTA3NDE4NDMzYTFlM2FhYjAyNiIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNzY1ZDkxYmY0ODM0MTkwNzQxODQzM2ExZTNhYWIwMjYiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYzczMTc3MDFiNTExYmM1ZjdhNjYzYjA2YjUzZTJiNzMiPmNvbnN0X3JldmVyc2VfaXRlcmF0b3I8L2E+IHJiZWdpbigpCiAgICAgICAgICAgIGNvbnN0OzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEdldCB0aGUgY29uc3QgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgInJldmVyc2VkIiA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBIGNvbnN0IHJldmVyc2UgcmFuZG9tIGFjY2VzcyBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZQogICAgICAgICAgICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4gSWYgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaXMgZW1wdHkgaXQgcmV0dXJucyBhbiBpdGVyYXRvciBlcXVhbAogICAgICAgICAgICAgICAgdG8gdGhlIG9uZSByZXR1cm5lZCBieSA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTA4ZGJmNTM4YjAwYTE0ZGFmNTU4MmVjZTgwNzQ2ZmMzIj5yZW5kKCkgY29uc3Q8L2E+PC9jb2RlPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vdGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm8tdGhyb3cuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBEb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMDhkYmY1MzhiMDBhMTRkYWY1NTgyZWNlODA3NDZmYzMiPnJlbmQoKQogICAgICAgICAgICAgICAgY29uc3Q8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwNjQwZDNkNDFjMTNiNjA4OWI2ZjE2OTIyNGNmMTAzOCI+YmVnaW4oKSBjb25zdDwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNzg5MDgxMGQwN2JjNTk1Y2ZiODdmOWM0N2NiMDc1YWMiPmVuZCgpCiAgICAgICAgICAgICAgICBjb25zdDwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTA4ZGJmNTM4YjAwYTE0ZGFmNTU4MmVjZTgwNzQ2ZmMzIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwOGRiZjUzOGIwMGExNGRhZjU1ODJlY2U4MDc0NmZjMyI+PC9hPjxjb2RlPjxiPjxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFjNzMxNzcwMWI1MTFiYzVmN2E2NjNiMDZiNTNlMmI3MyI+Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcjwvYT4gcmVuZCgpCiAgICAgICAgICAgIGNvbnN0OzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEdldCB0aGUgY29uc3QgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgInJldmVyc2VkIiA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBIGNvbnN0IHJldmVyc2UgcmFuZG9tIGFjY2VzcyBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCAib25lIGJlZm9yZSIgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlCiAgICAgICAgICAgICAgICA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LiBJZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBpcyBlbXB0eSBpdCByZXR1cm5zIGFuIGl0ZXJhdG9yIGVxdWFsCiAgICAgICAgICAgICAgICB0byB0aGUgb25lIHJldHVybmVkIGJ5IDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNzY1ZDkxYmY0ODM0MTkwNzQxODQzM2ExZTNhYWIwMjYiPnJiZWdpbigpIGNvbnN0PC9hPjwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vLXRocm93LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgaXRlcmF0b3JzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTc2NWQ5MWJmNDgzNDE5MDc0MTg0MzNhMWUzYWFiMDI2Ij5yYmVnaW4oKQogICAgICAgICAgICAgICAgY29uc3Q8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwNjQwZDNkNDFjMTNiNjA4OWI2ZjE2OTIyNGNmMTAzOCI+YmVnaW4oKSBjb25zdDwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNzg5MDgxMGQwN2JjNTk1Y2ZiODdmOWM0N2NiMDc1YWMiPmVuZCgpCiAgICAgICAgICAgICAgICBjb25zdDwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWQyMTlmMGQzMjAzZmI0M2I5NjRhOGNmNjNmMTg2NWNkIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkMjE5ZjBkMzIwM2ZiNDNiOTY0YThjZjYzZjE4NjVjZCI+PC9hPjxjb2RlPjxiPjxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFmMzhhOWJjNjRkODQ3NTdjNjYxYzI1NDJmZjlhN2Y2NSI+cmVmZXJlbmNlPC9hPiBvcGVyYXRvcltdKDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5YmExMmMwMTQyYTIxYTdkOTYwODc3YzIyZmEzZWEwMCI+c2l6ZV90eXBlPC9hPiBpbmRleCk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgR2V0IHRoZSBlbGVtZW50IGF0IHRoZSA8Y29kZT5pbmRleDwvY29kZT4gcG9zaXRpb24uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+MCAmbHQ7PSBpbmRleCAmYW1wOyZhbXA7IGluZGV4ICZsdDsgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+aW5kZXg8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IHRoZSA8Y29kZT5pbmRleDwvY29kZT4gcG9zaXRpb24uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vLXRocm93LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgaXRlcmF0b3JzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWNkODQ4MzhjYjRmZmZiNmMxMTNmZDAyOTdlNTAyZWRjIj5hdCgpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZWIwYTdmZTdmOGE1NmE0ZGM0YzkzM2I5M2FkZmNlZjQiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWViMGE3ZmU3ZjhhNTZhNGRjNGM5MzNiOTNhZGZjZWY0Ij48L2E+PGNvZGU+PGI+PGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE4Mzk3MTkxMDkyZjViYWNlZTk5MWI2MjNjYTRiOTEwIj5jb25zdF9yZWZlcmVuY2U8L2E+IG9wZXJhdG9yW10oPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTliYTEyYzAxNDJhMjFhN2Q5NjA4NzdjMjJmYTNlYTAwIj5zaXplX3R5cGU8L2E+IGluZGV4KQogICAgICAgICAgICBjb25zdDs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBHZXQgdGhlIGVsZW1lbnQgYXQgdGhlIDxjb2RlPmluZGV4PC9jb2RlPiBwb3NpdGlvbi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT4wICZsdDs9IGluZGV4ICZhbXA7JmFtcDsgaW5kZXggJmx0OyA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5pbmRleDwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlJldHVybnM6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQSBjb25zdCByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQgdGhlIDxjb2RlPmluZGV4PC9jb2RlPiBwb3NpdGlvbi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vdGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm8tdGhyb3cuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBEb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjIzM2EyOThmNTg0NWEwZmNmMmVjYzU2ZjQxNzA4MTAiPmF0KCkgY29uc3Q8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFjZDg0ODM4Y2I0ZmZmYjZjMTEzZmQwMjk3ZTUwMmVkYyIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xY2Q4NDgzOGNiNGZmZmI2YzExM2ZkMDI5N2U1MDJlZGMiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZjM4YTliYzY0ZDg0NzU3YzY2MWMyNTQyZmY5YTdmNjUiPnJlZmVyZW5jZTwvYT4gYXQoPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTliYTEyYzAxNDJhMjFhN2Q5NjA4NzdjMjJmYTNlYTAwIj5zaXplX3R5cGU8L2E+IGluZGV4KTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBHZXQgdGhlIGVsZW1lbnQgYXQgdGhlIDxjb2RlPmluZGV4PC9jb2RlPiBwb3NpdGlvbi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmluZGV4PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50LgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhdCB0aGUgPGNvZGU+aW5kZXg8L2NvZGU+IHBvc2l0aW9uLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+c3RkOjpvdXRfb2ZfcmFuZ2U8L2NvZGU+IHdoZW4gdGhlIDxjb2RlPmluZGV4PC9jb2RlPiBpcyBpbnZhbGlkICh3aGVuIDxjb2RlPmluZGV4ICZndDs9IDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBTdHJvbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBEb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZDIxOWYwZDMyMDNmYjQzYjk2NGE4Y2Y2M2YxODY1Y2QiPm9wZXJhdG9yW108L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiMjMzYTI5OGY1ODQ1YTBmY2YyZWNjNTZmNDE3MDgxMCIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjIzM2EyOThmNTg0NWEwZmNmMmVjYzU2ZjQxNzA4MTAiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTgzOTcxOTEwOTJmNWJhY2VlOTkxYjYyM2NhNGI5MTAiPmNvbnN0X3JlZmVyZW5jZTwvYT4gYXQoPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTliYTEyYzAxNDJhMjFhN2Q5NjA4NzdjMjJmYTNlYTAwIj5zaXplX3R5cGU8L2E+IGluZGV4KQogICAgICAgICAgICBjb25zdDs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBHZXQgdGhlIGVsZW1lbnQgYXQgdGhlIDxjb2RlPmluZGV4PC9jb2RlPiBwb3NpdGlvbi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmluZGV4PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50LgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhdCB0aGUgPGNvZGU+aW5kZXg8L2NvZGU+IHBvc2l0aW9uLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+c3RkOjpvdXRfb2ZfcmFuZ2U8L2NvZGU+IHdoZW4gdGhlIDxjb2RlPmluZGV4PC9jb2RlPiBpcyBpbnZhbGlkICh3aGVuIDxjb2RlPmluZGV4ICZndDs9IDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBTdHJvbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBEb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZWIwYTdmZTdmOGE1NmE0ZGM0YzkzM2I5M2FkZmNlZjQiPm9wZXJhdG9yW10KICAgICAgICAgICAgICAgIGNvbnN0PC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMGQ1ZmRlYWJlYjM1MmY0N2QxZjdiYjFlYThkOTgxOWYiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTBkNWZkZWFiZWIzNTJmNDdkMWY3YmIxZWE4ZDk4MTlmIj48L2E+PGNvZGU+PGI+PGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWYzOGE5YmM2NGQ4NDc1N2M2NjFjMjU0MmZmOWE3ZjY1Ij5yZWZlcmVuY2U8L2E+IGZyb250KCk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgR2V0IHRoZSBmaXJzdCBlbGVtZW50LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UHJlY29uZGl0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPiFlbXB0eSgpPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOby10aHJvdy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIERvZXMgbm90IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudCAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkOTg1ZDk3NDAyMGY4OGJiNDI1NWQ4ZWRiYWUwYTMwYSI+YmFjaygpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZDk4NWQ5NzQwMjBmODhiYjQyNTVkOGVkYmFlMGEzMGEiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWQ5ODVkOTc0MDIwZjg4YmI0MjU1ZDhlZGJhZTBhMzBhIj48L2E+PGNvZGU+PGI+PGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWYzOGE5YmM2NGQ4NDc1N2M2NjFjMjU0MmZmOWE3ZjY1Ij5yZWZlcmVuY2U8L2E+IGJhY2soKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBHZXQgdGhlIGxhc3QgZWxlbWVudC4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT4hZW1wdHkoKTwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOby10aHJvdy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIERvZXMgbm90IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudCAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwZDVmZGVhYmViMzUyZjQ3ZDFmN2JiMWVhOGQ5ODE5ZiI+ZnJvbnQoKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTBkZjg1OTVkODNiYjlkOGE3Y2U1MGFhYmM2NzhmOTBiIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwZGY4NTk1ZDgzYmI5ZDhhN2NlNTBhYWJjNjc4ZjkwYiI+PC9hPjxjb2RlPjxiPjxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhODM5NzE5MTA5MmY1YmFjZWU5OTFiNjIzY2E0YjkxMCI+Y29uc3RfcmVmZXJlbmNlPC9hPiBmcm9udCgpCiAgICAgICAgICAgIGNvbnN0OzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEdldCB0aGUgZmlyc3QgZWxlbWVudC4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT4hZW1wdHkoKTwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vdGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm8tdGhyb3cuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBEb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMDI3MjAxNzk3ODY4YzYyNzRmZWI2NzEyZjY3MGExMzIiPmJhY2soKQogICAgICAgICAgICAgICAgY29uc3Q8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwMjcyMDE3OTc4NjhjNjI3NGZlYjY3MTJmNjcwYTEzMiIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMDI3MjAxNzk3ODY4YzYyNzRmZWI2NzEyZjY3MGExMzIiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTgzOTcxOTEwOTJmNWJhY2VlOTkxYjYyM2NhNGI5MTAiPmNvbnN0X3JlZmVyZW5jZTwvYT4gYmFjaygpCiAgICAgICAgICAgIGNvbnN0OzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEdldCB0aGUgbGFzdCBlbGVtZW50LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UHJlY29uZGl0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPiFlbXB0eSgpPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vLXRocm93LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgaXRlcmF0b3JzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTBkZjg1OTVkODNiYjlkOGE3Y2U1MGFhYmM2NzhmOTBiIj5mcm9udCgpCiAgICAgICAgICAgICAgICBjb25zdDwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTk1N2NjY2RjYjBjNGVmN2Q4MGEzNGE5OTAwNjU4MThkIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5NTdjY2NkY2IwYzRlZjdkODBhMzRhOTkwMDY1ODE4ZCI+PC9hPjxjb2RlPjxiPjxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyNmQyNzlmOTFmZWY3MTdlMjU0NTlhMDgxN2ZmMjQyZiI+YXJyYXlfcmFuZ2U8L2E+CiAgICAgICAgICAgIGFycmF5X29uZSgpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEdldCB0aGUgZmlyc3QgY29udGludW91cyBhcnJheSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyLgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpbiBjb21iaW5hdGlvbiB3aXRoIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWY1MDgxYTU0YWZiYzJkZmMxYTdmYjIwMzI5ZGY3ZDViIj5hcnJheV90d28oKTwvYT48L2NvZGU+IGNhbiBiZSB1c2VmdWwKICAgICAgICAgICAgICB3aGVuIHBhc3NpbmcgdGhlIHN0b3JlZCBkYXRhIGludG8gYSBsZWdhY3kgQyBBUEkgYXMgYW4gYXJyYXkuIFN1cHBvc2UgdGhlcmUgaXMgYQogICAgICAgICAgICAgIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gb2YgY2FwYWNpdHkgMTAsIGNvbnRhaW5pbmcgNyBjaGFyYWN0ZXJzIDxjb2RlPidhJywgJ2InLCAuLi4sICdnJzwvY29kZT4KICAgICAgICAgICAgICB3aGVyZSA8Y29kZT5idWZmWzBdID09ICdhJzwvY29kZT4sIDxjb2RlPmJ1ZmZbMV0gPT0gJ2InPC9jb2RlPiwgLi4uIGFuZCA8Y29kZT5idWZmWzZdID09ICdnJzwvY29kZT46PGJyPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8Y29kZT5jaXJjdWxhcl9idWZmZXImbHQ7Y2hhciZndDsgYnVmZigxMCk7PC9jb2RlPjxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgVGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGlzIG9mdGVuIG5vdCBsaW5lYXIgYW5kIHRoZSBzdGF0ZSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyIG1heSBsb29rIGxpa2UKICAgICAgICAgICAgICB0aGlzOjxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGNvZGU+fGV8ZnxnfCB8IHwgfGF8YnxjfGR8PGJyPgogICAgICAgICAgICAgIGVuZCAtLS1ePGJyPgogICAgICAgICAgICAgIGJlZ2luIC0tLS0tLS1ePC9jb2RlPjxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgd2hlcmUgPGNvZGU+fGF8YnxjfGR8PC9jb2RlPiByZXByZXNlbnRzIHRoZSAiYXJyYXkgb25lIiwgPGNvZGU+fGV8ZnxnfDwvY29kZT4gcmVwcmVzZW50cyB0aGUgImFycmF5IHR3byIKICAgICAgICAgICAgICBhbmQgPGNvZGU+fCB8IHwgfDwvY29kZT4gaXMgYSBmcmVlIHNwYWNlLjxicj4KICAgICAgICAgICAgICBOb3cgY29uc2lkZXIgYSB0eXBpY2FsIEMgc3R5bGUgZnVuY3Rpb24gZm9yIHdyaXRpbmcgZGF0YSBpbnRvIGEgZmlsZTo8YnI+CiAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgIDxjb2RlPmludCB3cml0ZShpbnQgZmlsZV9kZXNjLCBjaGFyKiBidWZmLCBpbnQgbnVtX2J5dGVzKTs8L2NvZGU+PGJyPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICBUaGVyZSBhcmUgdHdvIHdheXMgaG93IHRvIHdyaXRlIHRoZSBjb250ZW50IG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGludG8gYSBmaWxlLiBFaXRoZXIKICAgICAgICAgICAgICByZWx5aW5nIG9uIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTk1N2NjY2RjYjBjNGVmN2Q4MGEzNGE5OTAwNjU4MThkIj5hcnJheV9vbmUoKTwvYT48L2NvZGU+IGFuZAogICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWY1MDgxYTU0YWZiYzJkZmMxYTdmYjIwMzI5ZGY3ZDViIj5hcnJheV90d28oKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgbWV0aG9kcyBhbmQgY2FsbGluZyB0aGUgd3JpdGUgZnVuY3Rpb24gdHdpY2U6PGJyPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8Y29kZT5hcnJheV9yYW5nZSBhciA9IGJ1ZmYuYXJyYXlfb25lKCk7PGJyPgogICAgICAgICAgICAgIHdyaXRlKGZpbGVfZGVzYywgYXIuZmlyc3QsIGFyLnNlY29uZCk7PGJyPgogICAgICAgICAgICAgIGFyID0gYnVmZi5hcnJheV90d28oKTs8YnI+CiAgICAgICAgICAgICAgd3JpdGUoZmlsZV9kZXNjLCBhci5maXJzdCwgYXIuc2Vjb25kKTs8L2NvZGU+PGJyPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICBPciByZWx5aW5nIG9uIHRoZSA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFlYTcyOGJmNTdmOTFhYTg5NDZlZGRmNzZjZTgxNmE0ZSI+bGluZWFyaXplKCk8L2E+PC9jb2RlPiBtZXRob2Q6PGJyPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8Y29kZT53cml0ZShmaWxlX2Rlc2MsIGJ1ZmYubGluZWFyaXplKCksIGJ1ZmYuc2l6ZSgpKTs8L2NvZGU+PGJyPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICBTaW5jZSB0aGUgY29tcGxleGl0eSBvZiA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5NTdjY2NkY2IwYzRlZjdkODBhMzRhOTkwMDY1ODE4ZCI+YXJyYXlfb25lKCk8L2E+PC9jb2RlPiBhbmQKICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFmNTA4MWE1NGFmYmMyZGZjMWE3ZmIyMDMyOWRmN2Q1YiI+YXJyYXlfdHdvKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIG1ldGhvZHMgaXMgY29uc3RhbnQgdGhlIGZpcnN0IG9wdGlvbiBpcyBzdWl0YWJsZSB3aGVuIGNhbGxpbmcgdGhlIHdyaXRlIG1ldGhvZCBpcyAiY2hlYXAiLiBPbiB0aGUgb3RoZXIKICAgICAgICAgICAgICBoYW5kIHRoZSBzZWNvbmQgb3B0aW9uIGlzIG1vcmUgc3VpdGFibGUgd2hlbiBjYWxsaW5nIHRoZSB3cml0ZSBtZXRob2QgaXMgbW9yZSAiZXhwZW5zaXZlIiB0aGFuIGNhbGxpbmcKICAgICAgICAgICAgICB0aGUgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZWE3MjhiZjU3ZjkxYWE4OTQ2ZWRkZjc2Y2U4MTZhNGUiPmxpbmVhcml6ZSgpPC9hPjwvY29kZT4gbWV0aG9kIHdob3NlCiAgICAgICAgICAgICAgY29tcGxleGl0eSBpcyBsaW5lYXIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlJldHVybnM6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIGFycmF5IHJhbmdlIG9mIHRoZSBmaXJzdCBjb250aW51b3VzIGFycmF5IG9mIHRoZSBpbnRlcm5hbCBidWZmZXIuIEluIHRoZSBjYXNlIHRoZQogICAgICAgICAgICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBpcyBlbXB0eSB0aGUgc2l6ZSBvZiB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgPGNvZGU+MDwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vLXRocm93LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgaXRlcmF0b3JzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPldhcm5pbmc6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCBpbnZva2luZyBhbnkgbWV0aG9kIHdoaWNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY2lyY3VsYXJfYnVmZmVyIG1heSBkZWxpbmVhcml6ZQogICAgICAgICAgICAgICAgdGhlIGludGVybmFsIGJ1ZmZlciBhbmQgaW52YWxpZGF0ZSB0aGUgYXJyYXkgcmFuZ2VzIHJldHVybmVkIGJ5IDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOTU3Y2NjZGNiMGM0ZWY3ZDgwYTM0YTk5MDA2NTgxOGQiPmFycmF5X29uZSgpPC9hPjwvY29kZT4gYW5kCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWY1MDgxYTU0YWZiYzJkZmMxYTdmYjIwMzI5ZGY3ZDViIj5hcnJheV90d28oKTwvYT48L2NvZGU+IChhbmQgdGhlaXIKICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb25zKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Tm90ZTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJbiB0aGUgY2FzZSB0aGUgaW50ZXJuYWwgYnVmZmVyIGlzIGxpbmVhciBlLmcuIDxjb2RlPnxhfGJ8Y3xkfGV8ZnxnfCB8IHwgfDwvY29kZT4gdGhlICJhcnJheSBvbmUiIGlzCiAgICAgICAgICAgICAgICByZXByZXNlbnRlZCBieSA8Y29kZT58YXxifGN8ZHxlfGZ8Z3w8L2NvZGU+IGFuZCB0aGUgImFycmF5IHR3byIgZG9lcyBub3QgZXhpc3QgKHRoZSA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWY1MDgxYTU0YWZiYzJkZmMxYTdmYjIwMzI5ZGY3ZDViIj5hcnJheV90d28oKTwvYT48L2NvZGU+IG1ldGhvZAogICAgICAgICAgICAgICAgcmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBzaXplIDxjb2RlPjA8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFmNTA4MWE1NGFmYmMyZGZjMWE3ZmIyMDMyOWRmN2Q1YiI+YXJyYXlfdHdvKCk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZWE3MjhiZjU3ZjkxYWE4OTQ2ZWRkZjc2Y2U4MTZhNGUiPmxpbmVhcml6ZSgpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZjUwODFhNTRhZmJjMmRmYzFhN2ZiMjAzMjlkZjdkNWIiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWY1MDgxYTU0YWZiYzJkZmMxYTdmYjIwMzI5ZGY3ZDViIj48L2E+PGNvZGU+PGI+PGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTI2ZDI3OWY5MWZlZjcxN2UyNTQ1OWEwODE3ZmYyNDJmIj5hcnJheV9yYW5nZTwvYT4KICAgICAgICAgICAgYXJyYXlfdHdvKCk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgR2V0IHRoZSBzZWNvbmQgY29udGludW91cyBhcnJheSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyLgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpbiBjb21iaW5hdGlvbiB3aXRoIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTk1N2NjY2RjYjBjNGVmN2Q4MGEzNGE5OTAwNjU4MThkIj5hcnJheV9vbmUoKTwvYT48L2NvZGU+IGNhbiBiZSB1c2VmdWwKICAgICAgICAgICAgICB3aGVuIHBhc3NpbmcgdGhlIHN0b3JlZCBkYXRhIGludG8gYSBsZWdhY3kgQyBBUEkgYXMgYW4gYXJyYXkuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlJldHVybnM6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIGFycmF5IHJhbmdlIG9mIHRoZSBzZWNvbmQgY29udGludW91cyBhcnJheSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyLiBJbiB0aGUgY2FzZSB0aGUgaW50ZXJuYWwgYnVmZmVyCiAgICAgICAgICAgICAgICBpcyBsaW5lYXIgb3IgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaXMgZW1wdHkgdGhlIHNpemUgb2YgdGhlIHJldHVybmVkIGFycmF5IGlzCiAgICAgICAgICAgICAgICA8Y29kZT4wPC9jb2RlPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vdGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm8tdGhyb3cuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBEb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5NTdjY2NkY2IwYzRlZjdkODBhMzRhOTkwMDY1ODE4ZCI+YXJyYXlfb25lKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwZjRiMTU3ZTI3YjExNzBhNTcxNDE3OTg2YjIzOTk0NSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMGY0YjE1N2UyN2IxMTcwYTU3MTQxNzk4NmIyMzk5NDUiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMTg4NWQ3ZjQ3NWI3ZTdhNzRjOTViMjQ0OGQyNDMwMjUiPmNvbnN0X2FycmF5X3JhbmdlPC9hPiBhcnJheV9vbmUoKQogICAgICAgICAgICBjb25zdDs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBHZXQgdGhlIGZpcnN0IGNvbnRpbnVvdXMgYXJyYXkgb2YgdGhlIGludGVybmFsIGJ1ZmZlci4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaW4gY29tYmluYXRpb24gd2l0aCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYjhlYjBmMjk4YWQyMDEyYzU1YzUzMDNlMWYxNzRkNSI+YXJyYXlfdHdvKCkgY29uc3Q8L2E+PC9jb2RlPiBjYW4gYmUKICAgICAgICAgICAgICB1c2VmdWwgd2hlbiBwYXNzaW5nIHRoZSBzdG9yZWQgZGF0YSBpbnRvIGEgbGVnYWN5IEMgQVBJIGFzIGFuIGFycmF5LgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFRoZSBhcnJheSByYW5nZSBvZiB0aGUgZmlyc3QgY29udGludW91cyBhcnJheSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyLiBJbiB0aGUgY2FzZSB0aGUKICAgICAgICAgICAgICAgIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaXMgZW1wdHkgdGhlIHNpemUgb2YgdGhlIHJldHVybmVkIGFycmF5IGlzIDxjb2RlPjA8L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOby10aHJvdy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIERvZXMgbm90IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudCAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYjhlYjBmMjk4YWQyMDEyYzU1YzUzMDNlMWYxNzRkNSI+YXJyYXlfdHdvKCkKICAgICAgICAgICAgICAgIGNvbnN0PC9hPjwvY29kZT47IDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOTU3Y2NjZGNiMGM0ZWY3ZDgwYTM0YTk5MDA2NTgxOGQiPmFycmF5X29uZSgpPC9hPjwvY29kZT4gZm9yIG1vcmUKICAgICAgICAgICAgICAgIGRldGFpbHMgaG93IHRvIHBhc3MgZGF0YSBpbnRvIGEgbGVnYWN5IEMgQVBJLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYjhlYjBmMjk4YWQyMDEyYzU1YzUzMDNlMWYxNzRkNSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmI4ZWIwZjI5OGFkMjAxMmM1NWM1MzAzZTFmMTc0ZDUiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMTg4NWQ3ZjQ3NWI3ZTdhNzRjOTViMjQ0OGQyNDMwMjUiPmNvbnN0X2FycmF5X3JhbmdlPC9hPiBhcnJheV90d28oKQogICAgICAgICAgICBjb25zdDs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBHZXQgdGhlIHNlY29uZCBjb250aW51b3VzIGFycmF5IG9mIHRoZSBpbnRlcm5hbCBidWZmZXIuCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGluIGNvbWJpbmF0aW9uIHdpdGggPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMGY0YjE1N2UyN2IxMTcwYTU3MTQxNzk4NmIyMzk5NDUiPmFycmF5X29uZSgpIGNvbnN0PC9hPjwvY29kZT4gY2FuIGJlCiAgICAgICAgICAgICAgdXNlZnVsIHdoZW4gcGFzc2luZyB0aGUgc3RvcmVkIGRhdGEgaW50byBhIGxlZ2FjeSBDIEFQSSBhcyBhbiBhcnJheS4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBUaGUgYXJyYXkgcmFuZ2Ugb2YgdGhlIHNlY29uZCBjb250aW51b3VzIGFycmF5IG9mIHRoZSBpbnRlcm5hbCBidWZmZXIuIEluIHRoZSBjYXNlIHRoZSBpbnRlcm5hbCBidWZmZXIKICAgICAgICAgICAgICAgIGlzIGxpbmVhciBvciB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBpcyBlbXB0eSB0aGUgc2l6ZSBvZiB0aGUgcmV0dXJuZWQgYXJyYXkgaXMKICAgICAgICAgICAgICAgIDxjb2RlPjA8L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOby10aHJvdy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIERvZXMgbm90IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudCAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwZjRiMTU3ZTI3YjExNzBhNTcxNDE3OTg2YjIzOTk0NSI+YXJyYXlfb25lKCkKICAgICAgICAgICAgICAgIGNvbnN0PC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZWE3MjhiZjU3ZjkxYWE4OTQ2ZWRkZjc2Y2U4MTZhNGUiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWVhNzI4YmY1N2Y5MWFhODk0NmVkZGY3NmNlODE2YTRlIj48L2E+PGNvZGU+PGI+PGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTRmZjkxN2Y4YTYxMzFlYzE4ZTkxNjA2NzI3NTkyYTljIj5wb2ludGVyPC9hPiBsaW5lYXJpemUoKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBMaW5lYXJpemUgdGhlIGludGVybmFsIGJ1ZmZlciBpbnRvIGEgY29udGludW91cyBhcnJheS4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgVGhpcyBtZXRob2QgY2FuIGJlIHVzZWZ1bCB3aGVuIHBhc3NpbmcgdGhlIHN0b3JlZCBkYXRhIGludG8gYSBsZWdhY3kgQyBBUEkgYXMgYW4gYXJyYXkuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT4mYW1wOygqdGhpcylbMF0gJmx0OyAmYW1wOygqdGhpcylbMV0gJmx0OyAuLi4gJmx0OyAmYW1wOygqdGhpcylbPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiAtIDFdPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheSBvciA8Y29kZT4wPC9jb2RlPiBpZiBlbXB0eS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6b3BlcmF0b3IgPSAoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljOyBuby10aHJvdyBpZiB0aGUgb3BlcmF0aW9ucyBpbiB0aGUgPGk+VGhyb3dzPC9pPiBzZWN0aW9uIGRvIG5vdCB0aHJvdyBhbnl0aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gKGV4Y2VwdCBpdGVyYXRvcnMgZXF1YWwgdG8KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KTsKICAgICAgICAgICAgICAgIGRvZXMgbm90IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycyBpZiB0aGUgcG9zdGNvbmRpdGlvbiAodGhlIDxpPkVmZmVjdDwvaT4pIGlzIGFscmVhZHkgbWV0IHByaW9yIGNhbGxpbmcKICAgICAgICAgICAgICAgIHRoaXMgbWV0aG9kLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4pOyBjb25zdGFudCBpZiB0aGUgcG9zdGNvbmRpdGlvbiAodGhlCiAgICAgICAgICAgICAgICA8aT5FZmZlY3Q8L2k+KSBpcyBhbHJlYWR5IG1ldC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+V2FybmluZzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJbiBnZW5lcmFsIGludm9raW5nIGFueSBtZXRob2Qgd2hpY2ggbW9kaWZpZXMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+CiAgICAgICAgICAgICAgICBtYXkgZGVsaW5lYXJpemUgdGhlIGludGVybmFsIGJ1ZmZlciBhbmQgaW52YWxpZGF0ZSB0aGUgcmV0dXJuZWQgcG9pbnRlci4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5NTdjY2NkY2IwYzRlZjdkODBhMzRhOTkwMDY1ODE4ZCI+YXJyYXlfb25lKCk8L2E+PC9jb2RlPiBhbmQKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZjUwODFhNTRhZmJjMmRmYzFhN2ZiMjAzMjlkZjdkNWIiPmFycmF5X3R3bygpPC9hPjwvY29kZT4gZm9yIHRoZQogICAgICAgICAgICAgICAgb3RoZXIgb3B0aW9uIGhvdyB0byBwYXNzIGRhdGEgaW50byBhIGxlZ2FjeSBDIEFQSTsgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyMGY2NDQ0OGRjMDcyM2NjNjhjMTA5NmY2YjAwYmMwYSI+aXNfbGluZWFyaXplZCgpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWM1OTFiYjllMjcxYjEwYjUyNDBhZmNmZjNiZDJjNjE5Ij5yb3RhdGUoY29uc3RfaXRlcmF0b3IpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMjBmNjQ0NDhkYzA3MjNjYzY4YzEwOTZmNmIwMGJjMGEiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTIwZjY0NDQ4ZGMwNzIzY2M2OGMxMDk2ZjZiMDBiYzBhIj48L2E+PGNvZGU+PGI+Ym9vbCBpc19saW5lYXJpemVkKCkKICAgICAgICAgICAgY29uc3Q7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgSXMgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gbGluZWFyaXplZD8KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlJldHVybnM6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGludGVybmFsIGJ1ZmZlciBpcyBsaW5lYXJpemVkIGludG8gYSBjb250aW51b3VzIGFycmF5IChpLmUuIHRoZQogICAgICAgICAgICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBtZWV0cyBhIGNvbmRpdGlvbiA8Y29kZT4mYW1wOygqdGhpcylbMF0gJmx0OyAmYW1wOygqdGhpcylbMV0gJmx0OyAuLi4gJmx0OwogICAgICAgICAgICAgICAgJmFtcDsoKnRoaXMpWzxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+IC0KICAgICAgICAgICAgICAgIDFdPC9jb2RlPik7IDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vLXRocm93LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgaXRlcmF0b3JzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZWE3MjhiZjU3ZjkxYWE4OTQ2ZWRkZjc2Y2U4MTZhNGUiPmxpbmVhcml6ZSgpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTk1N2NjY2RjYjBjNGVmN2Q4MGEzNGE5OTAwNjU4MThkIj5hcnJheV9vbmUoKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFmNTA4MWE1NGFmYmMyZGZjMWE3ZmIyMDMyOWRmN2Q1YiI+YXJyYXlfdHdvKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFjNTkxYmI5ZTI3MWIxMGI1MjQwYWZjZmYzYmQyYzYxOSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYzU5MWJiOWUyNzFiMTBiNTI0MGFmY2ZmM2JkMmM2MTkiPjwvYT48Y29kZT48Yj52b2lkIHJvdGF0ZSg8YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWNhYjZkNDZmMDNjNDBkMWU1MmQ0MTg0MzMxOWRkYjkiPmNvbnN0X2l0ZXJhdG9yPC9hPgogICAgICAgICAgICBuZXdfYmVnaW4pOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIFJvdGF0ZSBlbGVtZW50cyBpbiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgQSBtb3JlIGVmZmVjdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvcm90YXRlLmh0bWwiPnN0ZDo6cm90YXRlPC9hPjwvY29kZT4uCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT5uZXdfYmVnaW48L2NvZGU+IGlzIGEgdmFsaWQgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gPGI+ZXhjZXB0PC9iPgogICAgICAgICAgICAgICAgaXRzIGVuZC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJlZm9yZSBjYWxsaW5nIHRoZSBtZXRob2Qgc3VwcG9zZTo8YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5tID09IHN0ZDo6ZGlzdGFuY2UobmV3X2JlZ2luLCA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT4pPC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxjb2RlPm4gPT0gc3RkOjpkaXN0YW5jZSg8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU4ZDFlZGUyZTg1ZjVkNDZlZGE4ZGIzZjBjNGVmZWYwIj5iZWdpbigpPC9hPiwgbmV3X2JlZ2luKTwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8Y29kZT52YWxfMCA9PSAqbmV3X2JlZ2luLCB2YWxfMSA9PSAqKG5ld19iZWdpbiArIDEpLCAuLi4gdmFsX20gPT0gKihuZXdfYmVnaW4gKyBtKTwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8Y29kZT52YWxfcjEgPT0gKihuZXdfYmVnaW4gLSAxKSwgdmFsX3IyID09ICoobmV3X2JlZ2luIC0gMiksIC4uLiB2YWxfcm4gPT0gKihuZXdfYmVnaW4gLSBuKTwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICB0aGVuIGFmdGVyIGNhbGwgdG8gdGhlIG1ldGhvZDo8YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICA8Y29kZT52YWxfMCA9PSAoKnRoaXMpWzBdICZhbXA7JmFtcDsgdmFsXzEgPT0gKCp0aGlzKVsxXSAmYW1wOyZhbXA7IC4uLiAmYW1wOyZhbXA7IHZhbF9tID09ICgqdGhpcylbbSAtCiAgICAgICAgICAgICAgICAxXSAmYW1wOyZhbXA7IHZhbF9yMSA9PSAoKnRoaXMpW20gKyBuIC0gMV0gJmFtcDsmYW1wOyB2YWxfcjIgPT0gKCp0aGlzKVttICsgbiAtIDJdICZhbXA7JmFtcDsgLi4uCiAgICAgICAgICAgICAgICAmYW1wOyZhbXA7IHZhbF9ybiA9PSAoKnRoaXMpW21dPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5uZXdfYmVnaW48L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgbmV3IGJlZ2lubmluZy4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6Om9wZXJhdG9yID0gKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYzsgbm8tdGhyb3cgaWYgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaXMgZnVsbCBvciA8Y29kZT5uZXdfYmVnaW48L2NvZGU+IHBvaW50cyB0bwogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luKCk8L2E+PC9jb2RlPiBvcgogICAgICAgICAgICAgICAgaWYgdGhlIG9wZXJhdGlvbnMgaW4gdGhlIDxpPlRocm93czwvaT4gc2VjdGlvbiBkbyBub3QgdGhyb3cgYW55dGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJZiA8Y29kZT5tICZsdDsgbjwvY29kZT4gaW52YWxpZGF0ZXMgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSBsYXN0IDxjb2RlPm08L2NvZGU+IGVsZW1lbnRzCiAgICAgICAgICAgICAgICAoPGI+aW5jbHVkaW5nPC9iPiA8Y29kZT5uZXdfYmVnaW48L2NvZGU+LCBidXQgbm90IGl0ZXJhdG9ycyBlcXVhbCB0byA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KSBlbHNlIGludmFsaWRhdGVzCiAgICAgICAgICAgICAgICBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IDxjb2RlPm48L2NvZGU+IGVsZW1lbnRzOyBkb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMgaWYgdGhlCiAgICAgICAgICAgICAgICA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGlzIGZ1bGwuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiA8Y29kZT4oc3RkOjptaW4pKG0sIG4pPC9jb2RlPik7IGNvbnN0YW50IGlmIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGlzIGZ1bGwuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9yb3RhdGUuaHRtbCI+c3RkOjpyb3RhdGU8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOWJhMTJjMDE0MmEyMWE3ZDk2MDg3N2MyMmZhM2VhMDAiPnNpemVfdHlwZTwvYT4gc2l6ZSgpCiAgICAgICAgICAgIGNvbnN0OzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEdldCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgc3RvcmVkIGluIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOby10aHJvdy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIERvZXMgbm90IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudCAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVlYmFiMmIyNTM4ZDczMzc5MGI1NzUyNTgyNzI4ZTc3Ij5jYXBhY2l0eSgpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU3ZTJkNTA2YmMyNzRiMmE2M2ZiZTFiOGZjYWZlYmQ3Ij5tYXhfc2l6ZSgpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwYTAyYzRmYmM1MzM4NWU5ODU2OWU4MTBiZTk4NDNkZSI+cmVzZXJ2ZSgpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE4MGMyZTJlNjZhOGZhOWQwYjdhZGMxYjU0OTIxYThjMyI+cmVzaXplKHNpemVfdHlwZSwKICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1N2UyZDUwNmJjMjc0YjJhNjNmYmUxYjhmY2FmZWJkNyIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNTdlMmQ1MDZiYzI3NGIyYTYzZmJlMWI4ZmNhZmViZDciPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOWJhMTJjMDE0MmEyMWE3ZDk2MDg3N2MyMmZhM2VhMDAiPnNpemVfdHlwZTwvYT4gbWF4X3NpemUoKQogICAgICAgICAgICBjb25zdDs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBHZXQgdGhlIGxhcmdlc3QgcG9zc2libGUgc2l6ZSBvciBjYXBhY2l0eSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4gKEl0IGRlcGVuZHMgb24gYWxsb2NhdG9yJ3MKICAgICAgICAgICAgbWF4X3NpemUoKSkuCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFRoZSBtYXhpbXVtIHNpemUvY2FwYWNpdHkgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gY2FuIGJlIHNldCB0by4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vdGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm8tdGhyb3cuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBEb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZWJhYjJiMjUzOGQ3MzM3OTBiNTc1MjU4MjcyOGU3NyI+Y2FwYWNpdHkoKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMGEwMmM0ZmJjNTMzODVlOTg1NjllODEwYmU5ODQzZGUiPnJlc2VydmUoKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTViZTFjMmEwMDVlYzk4Mjg1NDllZjZkZDdlYmVkNTgzIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1YmUxYzJhMDA1ZWM5ODI4NTQ5ZWY2ZGQ3ZWJlZDU4MyI+PC9hPjxjb2RlPjxiPmJvb2wgZW1wdHkoKQogICAgICAgICAgICBjb25zdDs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBJcyB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBlbXB0eT8KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlJldHVybnM6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlcmUgYXJlIG5vIGVsZW1lbnRzIHN0b3JlZCBpbiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPjsKICAgICAgICAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vLXRocm93LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgaXRlcmF0b3JzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWZkMGVlZjhiYTkxMjEwZDE1NzU0MDRiN2UzZTgyMDdhIj5mdWxsKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFmZDBlZWY4YmE5MTIxMGQxNTc1NDA0YjdlM2U4MjA3YSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZmQwZWVmOGJhOTEyMTBkMTU3NTQwNGI3ZTNlODIwN2EiPjwvYT48Y29kZT48Yj5ib29sIGZ1bGwoKQogICAgICAgICAgICBjb25zdDs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBJcyB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBmdWxsPwogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHN0b3JlZCBpbiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBlcXVhbHMgdGhlCiAgICAgICAgICAgICAgICBjYXBhY2l0eSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPjsgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vdGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm8tdGhyb3cuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBEb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWJlMWMyYTAwNWVjOTgyODU0OWVmNmRkN2ViZWQ1ODMiPmVtcHR5KCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwYTAyYzRmYmM1MzM4NWU5ODU2OWU4MTBiZTk4NDNkZSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMGEwMmM0ZmJjNTMzODVlOTg1NjllODEwYmU5ODQzZGUiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOWJhMTJjMDE0MmEyMWE3ZDk2MDg3N2MyMmZhM2VhMDAiPnNpemVfdHlwZTwvYT4gcmVzZXJ2ZSgpCiAgICAgICAgICAgIGNvbnN0OzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgd2hpY2ggY2FuIGJlIGluc2VydGVkIGludG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gd2l0aG91dAogICAgICAgICAgICBvdmVyd3JpdGluZyBhbnkgb2YgYWxyZWFkeSBzdG9yZWQgZWxlbWVudHMuCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVlYmFiMmIyNTM4ZDczMzc5MGI1NzUyNTgyNzI4ZTc3Ij5jYXBhY2l0eSgpPC9hPiAtCiAgICAgICAgICAgICAgICA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vdGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm8tdGhyb3cuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBEb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZWJhYjJiMjUzOGQ3MzM3OTBiNTc1MjU4MjcyOGU3NyI+Y2FwYWNpdHkoKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNTdlMmQ1MDZiYzI3NGIyYTYzZmJlMWI4ZmNhZmViZDciPm1heF9zaXplKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZWJhYjJiMjUzOGQ3MzM3OTBiNTc1MjU4MjcyOGU3NyIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWViYWIyYjI1MzhkNzMzNzkwYjU3NTI1ODI3MjhlNzciPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZGM2NDJmZjJiZTRkYjBiZTFhNDU3ODEwZTVkMDk1OTUiPmNhcGFjaXR5X3R5cGU8L2E+IGNhcGFjaXR5KCkKICAgICAgICAgICAgY29uc3Q7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgR2V0IHRoZSBjYXBhY2l0eSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlJldHVybnM6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHdoaWNoIGNhbiBiZSBzdG9yZWQgaW4gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vLXRocm93LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgaXRlcmF0b3JzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTBhMDJjNGZiYzUzMzg1ZTk4NTY5ZTgxMGJlOTg0M2RlIj5yZXNlcnZlKCk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNTdlMmQ1MDZiYzI3NGIyYTYzZmJlMWI4ZmNhZmViZDciPm1heF9zaXplKCk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNjE3MTQyMDRlZjUxNzJkMTU2ZTJjN2VjY2QwNDk5OGYiPnNldF9jYXBhY2l0eShjYXBhY2l0eV90eXBlKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTYxNzE0MjA0ZWY1MTcyZDE1NmUyYzdlY2NkMDQ5OThmIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE2MTcxNDIwNGVmNTE3MmQxNTZlMmM3ZWNjZDA0OTk4ZiI+PC9hPjxjb2RlPjxiPnZvaWQgc2V0X2NhcGFjaXR5KDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYzY0MmZmMmJlNGRiMGJlMWE0NTc4MTBlNWQwOTU5NSI+Y2FwYWNpdHlfdHlwZTwvYT4KICAgICAgICAgICAgbmV3X2NhcGFjaXR5KTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBDaGFuZ2UgdGhlIGNhcGFjaXR5IG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVlYmFiMmIyNTM4ZDczMzc5MGI1NzUyNTgyNzI4ZTc3Ij5jYXBhY2l0eSgpPC9hPiA9PQogICAgICAgICAgICAgICAgbmV3X2NhcGFjaXR5ICZhbXA7JmFtcDsgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiAmbHQ7PQogICAgICAgICAgICAgICAgbmV3X2NhcGFjaXR5PC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIElmIHRoZSBjdXJyZW50IG51bWJlciBvZiBlbGVtZW50cyBzdG9yZWQgaW4gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaXMgZ3JlYXRlciB0aGFuIHRoZQogICAgICAgICAgICAgICAgZGVzaXJlZCBuZXcgY2FwYWNpdHkgdGhlbiBudW1iZXIgb2YgPGNvZGU+WzxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4gLSBuZXdfY2FwYWNpdHldPC9jb2RlPgogICAgICAgICAgICAgICAgPGI+bGFzdDwvYj4gZWxlbWVudHMgd2lsbCBiZSByZW1vdmVkIGFuZCB0aGUgbmV3IHNpemUgd2lsbCBiZSBlcXVhbCB0byA8Y29kZT5uZXdfY2FwYWNpdHk8L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5uZXdfY2FwYWNpdHk8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgbmV3IGNhcGFjaXR5LgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEFuIGFsbG9jYXRpb24gZXJyb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZCAoPGNvZGU+c3RkOjpiYWRfYWxsb2M8L2NvZGU+IGlmIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IgaXMKICAgICAgICAgICAgICAgIHVzZWQpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6VChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgU3Ryb25nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiAoZXhjZXB0IGl0ZXJhdG9ycyBlcXVhbCB0bwogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pIGlmCiAgICAgICAgICAgICAgICB0aGUgbmV3IGNhcGFjaXR5IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIDxjb2RlPm1pbls8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+LCBuZXdfY2FwYWNpdHldPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNDc3NzE1ZTlkMzFkMmNjNWIwMmFkOGVjZjNjNjhjNDYiPnJzZXRfY2FwYWNpdHkoY2FwYWNpdHlfdHlwZSk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTgwYzJlMmU2NmE4ZmE5ZDBiN2FkYzFiNTQ5MjFhOGMzIj5yZXNpemUoc2l6ZV90eXBlLAogICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTgwYzJlMmU2NmE4ZmE5ZDBiN2FkYzFiNTQ5MjFhOGMzIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE4MGMyZTJlNjZhOGZhOWQwYjdhZGMxYjU0OTIxYThjMyI+PC9hPjxjb2RlPjxiPnZvaWQgcmVzaXplKDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5YmExMmMwMTQyYTIxYTdkOTYwODc3YzIyZmEzZWEwMCI+c2l6ZV90eXBlPC9hPiBuZXdfc2l6ZSwgPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE4Mzk3MTkxMDkyZjViYWNlZTk5MWI2MjNjYTRiOTEwIj5jb25zdF9yZWZlcmVuY2U8L2E+IGl0ZW0gPQogICAgICAgICAgICB2YWx1ZV90eXBlKCkpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIENoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiA9PQogICAgICAgICAgICAgICAgbmV3X3NpemUgJmFtcDsmYW1wOyA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVlYmFiMmIyNTM4ZDczMzc5MGI1NzUyNTgyNzI4ZTc3Ij5jYXBhY2l0eSgpPC9hPiAmZ3Q7PQogICAgICAgICAgICAgICAgbmV3X3NpemU8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgSWYgdGhlIG5ldyBzaXplIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBzaXplLCBjb3BpZXMgb2YgPGNvZGU+aXRlbTwvY29kZT4gd2lsbCBiZSBpbnNlcnRlZCBhdCB0aGUKICAgICAgICAgICAgICAgIDxiPmJhY2s8L2I+IG9mIHRoZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBpbiBvcmRlciB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIHNpemUuIEluIHRoZQogICAgICAgICAgICAgICAgY2FzZSB0aGUgcmVzdWx0aW5nIHNpemUgZXhjZWVkcyB0aGUgY3VycmVudCBjYXBhY2l0eSB0aGUgY2FwYWNpdHkgd2lsbCBiZSBzZXQgdG8KICAgICAgICAgICAgICAgIDxjb2RlPm5ld19zaXplPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICBJZiB0aGUgY3VycmVudCBudW1iZXIgb2YgZWxlbWVudHMgc3RvcmVkIGluIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGlzIGdyZWF0ZXIgdGhhbiB0aGUKICAgICAgICAgICAgICAgIGRlc2lyZWQgbmV3IHNpemUgdGhlbiBudW1iZXIgb2YgPGNvZGU+WzxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4gLSBuZXdfc2l6ZV08L2NvZGU+CiAgICAgICAgICAgICAgICA8Yj5sYXN0PC9iPiBlbGVtZW50cyB3aWxsIGJlIHJlbW92ZWQuIChUaGUgY2FwYWNpdHkgd2lsbCByZW1haW4gdW5jaGFuZ2VkLikKICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bmV3X3NpemU8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgbmV3IHNpemUuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5pdGVtPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVsZW1lbnQgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gd2lsbCBiZSBmaWxsZWQgd2l0aCBpbiBvcmRlciB0byBnYWluIHRoZSByZXF1ZXN0ZWQKICAgICAgICAgICAgICAgICAgICBzaXplLiAoU2VlIHRoZSA8aT5FZmZlY3Q8L2k+LikKICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiAoZXhjZXB0IGl0ZXJhdG9ycyBlcXVhbCB0bwogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pIGlmCiAgICAgICAgICAgICAgICB0aGUgbmV3IHNpemUgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGNhcGFjaXR5LiBJbnZhbGlkYXRlcyBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIHJlbW92ZWQKICAgICAgICAgICAgICAgIGVsZW1lbnRzIGlmIHRoZSBuZXcgc2l6ZSBpcyBsb3dlciB0aGF0IHRoZSBvcmlnaW5hbCBzaXplLiBPdGhlcndpc2UgaXQgZG9lcyBub3QgaW52YWxpZGF0ZSBhbnkKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gdGhlIG5ldyBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNDRlY2Q5ZWM1ZjU0YTJkNjFjN2QxMzJlNDQ1ZDM0ODMiPnJyZXNpemUoc2l6ZV90eXBlLAogICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTYxNzE0MjA0ZWY1MTcyZDE1NmUyYzdlY2NkMDQ5OThmIj5zZXRfY2FwYWNpdHkoY2FwYWNpdHlfdHlwZSk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE0Nzc3MTVlOWQzMWQyY2M1YjAyYWQ4ZWNmM2M2OGM0NiIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNDc3NzE1ZTlkMzFkMmNjNWIwMmFkOGVjZjNjNjhjNDYiPjwvYT48Y29kZT48Yj52b2lkIHJzZXRfY2FwYWNpdHkoPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWRjNjQyZmYyYmU0ZGIwYmUxYTQ1NzgxMGU1ZDA5NTk1Ij5jYXBhY2l0eV90eXBlPC9hPgogICAgICAgICAgICBuZXdfY2FwYWNpdHkpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIENoYW5nZSB0aGUgY2FwYWNpdHkgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWViYWIyYjI1MzhkNzMzNzkwYjU3NTI1ODI3MjhlNzciPmNhcGFjaXR5KCk8L2E+ID09CiAgICAgICAgICAgICAgICBuZXdfY2FwYWNpdHkgJmFtcDsmYW1wOyA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+ICZsdDs9CiAgICAgICAgICAgICAgICBuZXdfY2FwYWNpdHk8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgSWYgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGVsZW1lbnRzIHN0b3JlZCBpbiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBpcyBncmVhdGVyIHRoYW4gdGhlCiAgICAgICAgICAgICAgICBkZXNpcmVkIG5ldyBjYXBhY2l0eSB0aGVuIG51bWJlciBvZiA8Y29kZT5bPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiAtIG5ld19jYXBhY2l0eV08L2NvZGU+CiAgICAgICAgICAgICAgICA8Yj5maXJzdDwvYj4gZWxlbWVudHMgd2lsbCBiZSByZW1vdmVkIGFuZCB0aGUgbmV3IHNpemUgd2lsbCBiZSBlcXVhbCB0byA8Y29kZT5uZXdfY2FwYWNpdHk8L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5uZXdfY2FwYWNpdHk8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgbmV3IGNhcGFjaXR5LgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEFuIGFsbG9jYXRpb24gZXJyb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZCAoPGNvZGU+c3RkOjpiYWRfYWxsb2M8L2NvZGU+IGlmIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IgaXMKICAgICAgICAgICAgICAgIHVzZWQpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6VChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgU3Ryb25nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiAoZXhjZXB0IGl0ZXJhdG9ycyBlcXVhbCB0bwogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pIGlmCiAgICAgICAgICAgICAgICB0aGUgbmV3IGNhcGFjaXR5IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIDxjb2RlPm1pbls8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+LCBuZXdfY2FwYWNpdHldPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNjE3MTQyMDRlZjUxNzJkMTU2ZTJjN2VjY2QwNDk5OGYiPnNldF9jYXBhY2l0eShjYXBhY2l0eV90eXBlKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNDRlY2Q5ZWM1ZjU0YTJkNjFjN2QxMzJlNDQ1ZDM0ODMiPnJyZXNpemUoc2l6ZV90eXBlLAogICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTQ0ZWNkOWVjNWY1NGEyZDYxYzdkMTMyZTQ0NWQzNDgzIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE0NGVjZDllYzVmNTRhMmQ2MWM3ZDEzMmU0NDVkMzQ4MyI+PC9hPjxjb2RlPjxiPnZvaWQgcnJlc2l6ZSg8YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOWJhMTJjMDE0MmEyMWE3ZDk2MDg3N2MyMmZhM2VhMDAiPnNpemVfdHlwZTwvYT4gbmV3X3NpemUsIDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhODM5NzE5MTA5MmY1YmFjZWU5OTFiNjIzY2E0YjkxMCI+Y29uc3RfcmVmZXJlbmNlPC9hPiBpdGVtID0KICAgICAgICAgICAgdmFsdWVfdHlwZSgpKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBDaGFuZ2UgdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4gPT0KICAgICAgICAgICAgICAgIG5ld19zaXplICZhbXA7JmFtcDsgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZWJhYjJiMjUzOGQ3MzM3OTBiNTc1MjU4MjcyOGU3NyI+Y2FwYWNpdHkoKTwvYT4gJmd0Oz0KICAgICAgICAgICAgICAgIG5ld19zaXplPC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIElmIHRoZSBuZXcgc2l6ZSBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgc2l6ZSwgY29waWVzIG9mIDxjb2RlPml0ZW08L2NvZGU+IHdpbGwgYmUgaW5zZXJ0ZWQgYXQgdGhlCiAgICAgICAgICAgICAgICA8Yj5mcm9udDwvYj4gb2YgdGhlIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGluIG9yZGVyIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgc2l6ZS4gSW4gdGhlCiAgICAgICAgICAgICAgICBjYXNlIHRoZSByZXN1bHRpbmcgc2l6ZSBleGNlZWRzIHRoZSBjdXJyZW50IGNhcGFjaXR5IHRoZSBjYXBhY2l0eSB3aWxsIGJlIHNldCB0bwogICAgICAgICAgICAgICAgPGNvZGU+bmV3X3NpemU8L2NvZGU+Ljxicj4KICAgICAgICAgICAgICAgIElmIHRoZSBjdXJyZW50IG51bWJlciBvZiBlbGVtZW50cyBzdG9yZWQgaW4gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaXMgZ3JlYXRlciB0aGFuIHRoZQogICAgICAgICAgICAgICAgZGVzaXJlZCBuZXcgc2l6ZSB0aGVuIG51bWJlciBvZiA8Y29kZT5bPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiAtIG5ld19zaXplXTwvY29kZT4KICAgICAgICAgICAgICAgIDxiPmZpcnN0PC9iPiBlbGVtZW50cyB3aWxsIGJlIHJlbW92ZWQuIChUaGUgY2FwYWNpdHkgd2lsbCByZW1haW4gdW5jaGFuZ2VkLikKICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bmV3X3NpemU8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgbmV3IHNpemUuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5pdGVtPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVsZW1lbnQgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gd2lsbCBiZSBmaWxsZWQgd2l0aCBpbiBvcmRlciB0byBnYWluIHRoZSByZXF1ZXN0ZWQKICAgICAgICAgICAgICAgICAgICBzaXplLiAoU2VlIHRoZSA8aT5FZmZlY3Q8L2k+LikKICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiAoZXhjZXB0IGl0ZXJhdG9ycyBlcXVhbCB0bwogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pIGlmCiAgICAgICAgICAgICAgICB0aGUgbmV3IHNpemUgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGNhcGFjaXR5LiBJbnZhbGlkYXRlcyBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIHJlbW92ZWQKICAgICAgICAgICAgICAgIGVsZW1lbnRzIGlmIHRoZSBuZXcgc2l6ZSBpcyBsb3dlciB0aGF0IHRoZSBvcmlnaW5hbCBzaXplLiBPdGhlcndpc2UgaXQgZG9lcyBub3QgaW52YWxpZGF0ZSBhbnkKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gdGhlIG5ldyBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xODBjMmUyZTY2YThmYTlkMGI3YWRjMWI1NDkyMWE4YzMiPnJlc2l6ZShzaXplX3R5cGUsCiAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2UpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNDc3NzE1ZTlkMzFkMmNjNWIwMmFkOGVjZjNjNjhjNDYiPnJzZXRfY2FwYWNpdHkoY2FwYWNpdHlfdHlwZSk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYjE1NTg5MTFiMmUyNTFhNTg3YWViM2Q4YjNkNzk3ZCIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZGIxNTU4OTExYjJlMjUxYTU4N2FlYjNkOGIzZDc5N2QiPjwvYT48Y29kZT48Yj5jaXJjdWxhcl9idWZmZXImbHQ7VCxBbGxvYyZndDsmYW1wOwogICAgICAgICAgICBvcGVyYXRvcj0oY29uc3QgY2lyY3VsYXJfYnVmZmVyJmx0O1QsQWxsb2MmZ3Q7JmFtcDsgY2IpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIFRoZSBhc3NpZ24gb3BlcmF0b3IuCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIE1ha2VzIHRoaXMgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB0byBiZWNvbWUgYSBjb3B5IG9mIHRoZSBzcGVjaWZpZWQgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPip0aGlzID09IGNiPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5jYjwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHRvIGJlIGNvcGllZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFN0cm9uZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhpcyA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IChleGNlcHQgaXRlcmF0b3JzIGVxdWFsIHRvCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiB0aGUgc2l6ZSBvZiA8Y29kZT5jYjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5YmE0YTgxZGYxNmYzODZkMzFiMDRiNDljODJkMWFkYSI+YXNzaWduKHNpemVfdHlwZSwKICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYmViYjgwYTVmMzhlNTJhMzdlYzlmM2VkNzY1NjAwYSI+YXNzaWduKGNhcGFjaXR5X3R5cGUsIHNpemVfdHlwZSwKICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyNTMzMDJkOWJkYTVkN2VmYmM0YTZjMzExZGUzNzkwYyI+YXNzaWduKElucHV0SXRlcmF0b3IsCiAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTI3Y2FiNjAzNGJlZWViMGUxMTg2M2M4YzE0ZDE0MzY2Ij5hc3NpZ24oY2FwYWNpdHlfdHlwZSwKICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IsIElucHV0SXRlcmF0b3IpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOWJhNGE4MWRmMTZmMzg2ZDMxYjA0YjQ5YzgyZDFhZGEiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTliYTRhODFkZjE2ZjM4NmQzMWIwNGI0OWM4MmQxYWRhIj48L2E+PGNvZGU+PGI+dm9pZCBhc3NpZ24oPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTliYTEyYzAxNDJhMjFhN2Q5NjA4NzdjMjJmYTNlYTAwIj5zaXplX3R5cGU8L2E+IG4sIDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhODM5NzE5MTA5MmY1YmFjZWU5OTFiNjIzY2E0YjkxMCI+Y29uc3RfcmVmZXJlbmNlPC9hPgogICAgICAgICAgICBpdGVtKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBBc3NpZ24gPGNvZGU+bjwvY29kZT4gaXRlbXMgaW50byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgVGhlIGNvbnRlbnQgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gd2lsbCBiZSByZW1vdmVkIGFuZCByZXBsYWNlZCB3aXRoIDxjb2RlPm48L2NvZGU+IGNvcGllcwogICAgICAgICAgICAgIG9mIHRoZSA8Y29kZT5pdGVtPC9jb2RlPi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVlYmFiMmIyNTM4ZDczMzc5MGI1NzUyNTgyNzI4ZTc3Ij5jYXBhY2l0eSgpPC9hPiA9PSBuCiAgICAgICAgICAgICAgICAmYW1wOyZhbXA7IDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+ID09IG4KICAgICAgICAgICAgICAgICZhbXA7JmFtcDsgKCp0aGlzKVswXSA9PSBpdGVtICZhbXA7JmFtcDsgKCp0aGlzKVsxXSA9PSBpdGVtICZhbXA7JmFtcDsgLi4uICZhbXA7JmFtcDsgKCp0aGlzKSBbbiAtIDFdCiAgICAgICAgICAgICAgICA9PSBpdGVtPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5uPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB3aWxsIGJlIGZpbGxlZCB3aXRoLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+aXRlbTwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBlbGVtZW50IHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHdpbGwgYmUgZmlsbGVkIHdpdGguCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gKGV4Y2VwdCBpdGVyYXRvcnMgZXF1YWwgdG8KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIHRoZSA8Y29kZT5uPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWRiMTU1ODkxMWIyZTI1MWE1ODdhZWIzZDhiM2Q3OTdkIj5vcGVyYXRvcj08L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWRiZWJiODBhNWYzOGU1MmEzN2VjOWYzZWQ3NjU2MDBhIj5hc3NpZ24oY2FwYWNpdHlfdHlwZSwKICAgICAgICAgICAgICAgIHNpemVfdHlwZSwgY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTI1MzMwMmQ5YmRhNWQ3ZWZiYzRhNmMzMTFkZTM3OTBjIj5hc3NpZ24oSW5wdXRJdGVyYXRvciwKICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMjdjYWI2MDM0YmVlZWIwZTExODYzYzhjMTRkMTQzNjYiPmFzc2lnbihjYXBhY2l0eV90eXBlLAogICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvciwgSW5wdXRJdGVyYXRvcik8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYmViYjgwYTVmMzhlNTJhMzdlYzlmM2VkNzY1NjAwYSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZGJlYmI4MGE1ZjM4ZTUyYTM3ZWM5ZjNlZDc2NTYwMGEiPjwvYT48Y29kZT48Yj52b2lkIGFzc2lnbig8YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZGM2NDJmZjJiZTRkYjBiZTFhNDU3ODEwZTVkMDk1OTUiPmNhcGFjaXR5X3R5cGU8L2E+IGJ1ZmZlcl9jYXBhY2l0eSwKICAgICAgICAgICAgPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOWJhMTJjMDE0MmEyMWE3ZDk2MDg3N2MyMmZhM2VhMDAiPnNpemVfdHlwZTwvYT4gbiwgPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE4Mzk3MTkxMDkyZjViYWNlZTk5MWI2MjNjYTRiOTEwIj5jb25zdF9yZWZlcmVuY2U8L2E+CiAgICAgICAgICAgIGl0ZW0pOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEFzc2lnbiA8Y29kZT5uPC9jb2RlPiBpdGVtcyBpbnRvIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHNwZWNpZnlpbmcgdGhlIGNhcGFjaXR5LgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUaGUgY2FwYWNpdHkgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gd2lsbCBiZSBzZXQgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBhbmQgdGhlIGNvbnRlbnQgb2YKICAgICAgICAgICAgICB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB3aWxsIGJlIHJlbW92ZWQgYW5kIHJlcGxhY2VkIHdpdGggPGNvZGU+bjwvY29kZT4gY29waWVzIG9mIHRoZQogICAgICAgICAgICAgIDxjb2RlPml0ZW08L2NvZGU+LgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+Y2FwYWNpdHkgJmd0Oz0gbjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVlYmFiMmIyNTM4ZDczMzc5MGI1NzUyNTgyNzI4ZTc3Ij5jYXBhY2l0eSgpPC9hPiA9PQogICAgICAgICAgICAgICAgYnVmZmVyX2NhcGFjaXR5ICZhbXA7JmFtcDsgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiA9PSBuICZhbXA7JmFtcDsKICAgICAgICAgICAgICAgICgqdGhpcylbMF0gPT0gaXRlbSAmYW1wOyZhbXA7ICgqdGhpcylbMV0gPT0gaXRlbSAmYW1wOyZhbXA7IC4uLiAmYW1wOyZhbXA7ICgqdGhpcykgW24gLSAxXSA9PQogICAgICAgICAgICAgICAgaXRlbTwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+YnVmZmVyX2NhcGFjaXR5PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIG5ldyBjYXBhY2l0eS4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPm48L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHdpbGwgYmUgZmlsbGVkIHdpdGguCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5pdGVtPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVsZW1lbnQgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gd2lsbCBiZSBmaWxsZWQgd2l0aC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiAoZXhjZXB0IGl0ZXJhdG9ycyBlcXVhbCB0bwogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gdGhlIDxjb2RlPm48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZGIxNTU4OTExYjJlMjUxYTU4N2FlYjNkOGIzZDc5N2QiPm9wZXJhdG9yPTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOWJhNGE4MWRmMTZmMzg2ZDMxYjA0YjQ5YzgyZDFhZGEiPmFzc2lnbihzaXplX3R5cGUsCiAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2UpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMjUzMzAyZDliZGE1ZDdlZmJjNGE2YzMxMWRlMzc5MGMiPmFzc2lnbihJbnB1dEl0ZXJhdG9yLAogICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvcik8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyN2NhYjYwMzRiZWVlYjBlMTE4NjNjOGMxNGQxNDM2NiI+YXNzaWduKGNhcGFjaXR5X3R5cGUsCiAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yLCBJbnB1dEl0ZXJhdG9yKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTI1MzMwMmQ5YmRhNWQ3ZWZiYzRhNmMzMTFkZTM3OTBjIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyNTMzMDJkOWJkYTVkN2VmYmM0YTZjMzExZGUzNzkwYyI+PC9hPiA8Y29kZT48Yj50ZW1wbGF0ZSAmbHQ7Y2xhc3MKICAgICAgICAgICAgSW5wdXRJdGVyYXRvciZndDs8YnI+CiAgICAgICAgICAgICAgICB2b2lkIGFzc2lnbihJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEFzc2lnbiBhIGNvcHkgb2YgdGhlIHJhbmdlIGludG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIFRoZSBjb250ZW50IG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHdpbGwgYmUgcmVtb3ZlZCBhbmQgcmVwbGFjZWQgd2l0aCBjb3BpZXMgb2YgZWxlbWVudHMgZnJvbQogICAgICAgICAgICAgIHRoZSBzcGVjaWZpZWQgcmFuZ2UuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBWYWxpZCByYW5nZSA8Y29kZT5bZmlyc3QsIGxhc3QpPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5maXJzdDwvY29kZT4gYW5kIDxjb2RlPmxhc3Q8L2NvZGU+IGhhdmUgdG8gbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0lucHV0SXRlcmF0b3IuaHRtbCI+SW5wdXRJdGVyYXRvcjwvYT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZWJhYjJiMjUzOGQ3MzM3OTBiNTc1MjU4MjcyOGU3NyI+Y2FwYWNpdHkoKTwvYT4gPT0KICAgICAgICAgICAgICAgIHN0ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpICZhbXA7JmFtcDsgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiA9PSBzdGQ6OmRpc3RhbmNlKGZpcnN0LAogICAgICAgICAgICAgICAgbGFzdCkgJmFtcDsmYW1wOyAoKnRoaXMpWzBdPT0gKmZpcnN0ICZhbXA7JmFtcDsgKCp0aGlzKVsxXSA9PSAqKGZpcnN0ICsgMSkgJmFtcDsmYW1wOyAuLi4gJmFtcDsmYW1wOwogICAgICAgICAgICAgICAgKCp0aGlzKVtzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KSAtIDFdID09ICoobGFzdCAtIDEpPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5maXJzdDwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlIHRvIGJlIGNvcGllZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmxhc3Q8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgZW5kIG9mIHRoZSByYW5nZSB0byBiZSBjb3BpZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gKGV4Y2VwdCBpdGVyYXRvcnMgZXF1YWwgdG8KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIHRoZSA8Y29kZT5zdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KTwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYjE1NTg5MTFiMmUyNTFhNTg3YWViM2Q4YjNkNzk3ZCI+b3BlcmF0b3I9PC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5YmE0YTgxZGYxNmYzODZkMzFiMDRiNDljODJkMWFkYSI+YXNzaWduKHNpemVfdHlwZSwKICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYmViYjgwYTVmMzhlNTJhMzdlYzlmM2VkNzY1NjAwYSI+YXNzaWduKGNhcGFjaXR5X3R5cGUsIHNpemVfdHlwZSwKICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyN2NhYjYwMzRiZWVlYjBlMTE4NjNjOGMxNGQxNDM2NiI+YXNzaWduKGNhcGFjaXR5X3R5cGUsCiAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yLCBJbnB1dEl0ZXJhdG9yKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTI3Y2FiNjAzNGJlZWViMGUxMTg2M2M4YzE0ZDE0MzY2IiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyN2NhYjYwMzRiZWVlYjBlMTE4NjNjOGMxNGQxNDM2NiI+PC9hPiA8Y29kZT48Yj50ZW1wbGF0ZSAmbHQ7Y2xhc3MKICAgICAgICAgICAgSW5wdXRJdGVyYXRvciZndDs8YnI+CiAgICAgICAgICAgICAgICB2b2lkIGFzc2lnbig8YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZGM2NDJmZjJiZTRkYjBiZTFhNDU3ODEwZTVkMDk1OTUiPmNhcGFjaXR5X3R5cGU8L2E+IGJ1ZmZlcl9jYXBhY2l0eSwKICAgICAgICAgICAgSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBBc3NpZ24gYSBjb3B5IG9mIHRoZSByYW5nZSBpbnRvIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHNwZWNpZnlpbmcgdGhlIGNhcGFjaXR5LgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUaGUgY2FwYWNpdHkgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gd2lsbCBiZSBzZXQgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBhbmQgdGhlIGNvbnRlbnQgb2YKICAgICAgICAgICAgICB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB3aWxsIGJlIHJlbW92ZWQgYW5kIHJlcGxhY2VkIHdpdGggY29waWVzIG9mIGVsZW1lbnRzIGZyb20gdGhlIHNwZWNpZmllZAogICAgICAgICAgICAgIHJhbmdlLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVmFsaWQgcmFuZ2UgPGNvZGU+W2ZpcnN0LCBsYXN0KTwvY29kZT4uPGJyPgogICAgICAgICAgICAgICAgPGNvZGU+Zmlyc3Q8L2NvZGU+IGFuZCA8Y29kZT5sYXN0PC9jb2RlPiBoYXZlIHRvIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiA8YSBocmVmPQogICAgICAgICAgICAgICAgImh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9JbnB1dEl0ZXJhdG9yLmh0bWwiPklucHV0SXRlcmF0b3I8L2E+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWViYWIyYjI1MzhkNzMzNzkwYjU3NTI1ODI3MjhlNzciPmNhcGFjaXR5KCk8L2E+ID09CiAgICAgICAgICAgICAgICBidWZmZXJfY2FwYWNpdHkgJmFtcDsmYW1wOyA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+ICZsdDs9CiAgICAgICAgICAgICAgICBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KSAmYW1wOyZhbXA7ICgqdGhpcylbMF09PSAqKGxhc3QgLSBidWZmZXJfY2FwYWNpdHkpICZhbXA7JmFtcDsgKCp0aGlzKVsxXSA9PQogICAgICAgICAgICAgICAgKihsYXN0IC0gYnVmZmVyX2NhcGFjaXR5ICsgMSkgJmFtcDsmYW1wOyAuLi4gJmFtcDsmYW1wOyAoKnRoaXMpW2J1ZmZlcl9jYXBhY2l0eSAtIDFdID09ICoobGFzdCAtCiAgICAgICAgICAgICAgICAxKTwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBJZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGJlIGNvcGllZCBmcm9tIHRoZSByYW5nZSA8Y29kZT5bZmlyc3QsIGxhc3QpPC9jb2RlPiBpcyBncmVhdGVyIHRoYW4gdGhlCiAgICAgICAgICAgICAgICBzcGVjaWZpZWQgPGNvZGU+YnVmZmVyX2NhcGFjaXR5PC9jb2RlPiB0aGVuIG9ubHkgZWxlbWVudHMgZnJvbSB0aGUgcmFuZ2UgPGNvZGU+W2xhc3QgLSBidWZmZXJfY2FwYWNpdHksCiAgICAgICAgICAgICAgICBsYXN0KTwvY29kZT4gd2lsbCBiZSBjb3BpZWQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmJ1ZmZlcl9jYXBhY2l0eTwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBuZXcgY2FwYWNpdHkuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5maXJzdDwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlIHRvIGJlIGNvcGllZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmxhc3Q8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgZW5kIG9mIHRoZSByYW5nZSB0byBiZSBjb3BpZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gKGV4Y2VwdCBpdGVyYXRvcnMgZXF1YWwgdG8KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIDxjb2RlPnN0ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpPC9jb2RlPjsgaW4gPGNvZGU+bWluW2NhcGFjaXR5LCBzdGQ6OmRpc3RhbmNlKGZpcnN0LAogICAgICAgICAgICAgICAgbGFzdCldPC9jb2RlPiBpZiB0aGUgPGNvZGU+SW5wdXRJdGVyYXRvcjwvY29kZT4gaXMgYSA8YSBocmVmPQogICAgICAgICAgICAgICAgImh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9SYW5kb21BY2Nlc3NJdGVyYXRvci5odG1sIj5SYW5kb21BY2Nlc3NJdGVyYXRvcjwvYT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYjE1NTg5MTFiMmUyNTFhNTg3YWViM2Q4YjNkNzk3ZCI+b3BlcmF0b3I9PC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5YmE0YTgxZGYxNmYzODZkMzFiMDRiNDljODJkMWFkYSI+YXNzaWduKHNpemVfdHlwZSwKICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYmViYjgwYTVmMzhlNTJhMzdlYzlmM2VkNzY1NjAwYSI+YXNzaWduKGNhcGFjaXR5X3R5cGUsIHNpemVfdHlwZSwKICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyNTMzMDJkOWJkYTVkN2VmYmM0YTZjMzExZGUzNzkwYyI+YXNzaWduKElucHV0SXRlcmF0b3IsCiAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTI3MGFiNzA3NGMzNjU2NjNhNmYxODgwODAyNGZkODhiIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyNzBhYjcwNzRjMzY1NjYzYTZmMTg4MDgwMjRmZDg4YiI+PC9hPjxjb2RlPjxiPnZvaWQKICAgICAgICAgICAgc3dhcChjaXJjdWxhcl9idWZmZXImbHQ7VCxBbGxvYyZndDsmYW1wOyBjYik7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgU3dhcCB0aGUgY29udGVudHMgb2YgdHdvIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT5zLgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPnRoaXM8L2NvZGU+IGNvbnRhaW5zIGVsZW1lbnRzIG9mIDxjb2RlPmNiPC9jb2RlPiBhbmQgdmljZSB2ZXJzYTsgdGhlIGNhcGFjaXR5IG9mCiAgICAgICAgICAgICAgICA8Y29kZT50aGlzPC9jb2RlPiBlcXVhbHMgdG8gdGhlIGNhcGFjaXR5IG9mIDxjb2RlPmNiPC9jb2RlPiBhbmQgdmljZSB2ZXJzYS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+Y2I8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB3aG9zZSBjb250ZW50IHdpbGwgYmUgc3dhcHBlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vLXRocm93LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBvZiBib3RoIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT5zLiAoT24gdGhlIG90aGVyIGhhbmQgdGhlIGl0ZXJhdG9ycyBzdGlsbAogICAgICAgICAgICAgICAgcG9pbnQgdG8gdGhlIHNhbWUgZWxlbWVudHMgYnV0IHdpdGhpbiBhbm90aGVyIGNvbnRhaW5lci4gSWYgeW91IHdhbnQgdG8gcmVseSBvbiB0aGlzIGZlYXR1cmUgeW91IGhhdmUKICAgICAgICAgICAgICAgIHRvIHR1cm4gdGhlIDxhIGhyZWY9IiNkZWJ1ZyI+RGVidWcgU3VwcG9ydDwvYT4gb2ZmIG90aGVyd2lzZSBhbiBhc3NlcnRpb24gd2lsbCByZXBvcnQgYW4gZXJyb3IgaWYgc3VjaAogICAgICAgICAgICAgICAgaW52YWxpZGF0ZWQgaXRlcmF0b3IgaXMgdXNlZC4pCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI25hbWVzcGFjZWJvb3N0XzE0YWE4ZjZhMmM5NjQwZjNmMjJlMjY2ZjBmY2E4NTc3NyI+c3dhcChjaXJjdWxhcl9idWZmZXImbHQ7VCwKICAgICAgICAgICAgICAgIEFsbG9jJmd0OyZhbXA7LCBjaXJjdWxhcl9idWZmZXImbHQ7VCwgQWxsb2MmZ3Q7JmFtcDspPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYWEzNWRkN2VmOGViMWQwNDUwODQ5NGQxODM1Y2M4MmUiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWFhMzVkZDdlZjhlYjFkMDQ1MDg0OTRkMTgzNWNjODJlIj48L2E+PGNvZGU+PGI+dm9pZCBwdXNoX2JhY2soPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE4Mzk3MTkxMDkyZjViYWNlZTk5MWI2MjNjYTRiOTEwIj5jb25zdF9yZWZlcmVuY2U8L2E+IGl0ZW0gPQogICAgICAgICAgICB2YWx1ZV90eXBlKCkpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEluc2VydCBhIG5ldyBlbGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgaWYgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWViYWIyYjI1MzhkNzMzNzkwYjU3NTI1ODI3MjhlNzciPmNhcGFjaXR5KCk8L2E+CiAgICAgICAgICAgICAgICAmZ3Q7IDA8L2NvZGU+IHRoZW4gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkOTg1ZDk3NDAyMGY4OGJiNDI1NWQ4ZWRiYWUwYTMwYSI+YmFjaygpPC9hPiA9PSBpdGVtPC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIElmIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGlzIGZ1bGwsIHRoZSBmaXJzdCBlbGVtZW50IHdpbGwgYmUgcmVtb3ZlZC4gSWYgdGhlIGNhcGFjaXR5IGlzCiAgICAgICAgICAgICAgICA8Y29kZT4wPC9jb2RlPiwgbm90aGluZyB3aWxsIGJlIGluc2VydGVkLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5pdGVtPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6VChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpvcGVyYXRvciA9IChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQmFzaWM7IG5vLXRocm93IGlmIHRoZSBvcGVyYXRpb24gaW4gdGhlIDxpPlRocm93czwvaT4gc2VjdGlvbiBkb2VzIG5vdCB0aHJvdyBhbnl0aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIERvZXMgbm90IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycyB3aXRoIHRoZSBleGNlcHRpb24gb2YgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSBvdmVyd3JpdHRlbiBlbGVtZW50LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMGVmNTdlNzNjMTkzNjgyYTY0OWQ4ZWI0YTEwOTZkY2UiPnB1c2hfZnJvbnQoY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkZjBkYTAwY2I1MDFiZWE3NWFmYmJmYWI5ZjU0NmEwNyI+cG9wX2JhY2soKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE4YWM5NzJkYzI0ZWY3MjM2ZmFhMTg3NWRlOTJiOWRkOCI+cG9wX2Zyb250KCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwZWY1N2U3M2MxOTM2ODJhNjQ5ZDhlYjRhMTA5NmRjZSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMGVmNTdlNzNjMTkzNjgyYTY0OWQ4ZWI0YTEwOTZkY2UiPjwvYT48Y29kZT48Yj52b2lkIHB1c2hfZnJvbnQoPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE4Mzk3MTkxMDkyZjViYWNlZTk5MWI2MjNjYTRiOTEwIj5jb25zdF9yZWZlcmVuY2U8L2E+IGl0ZW0gPQogICAgICAgICAgICB2YWx1ZV90eXBlKCkpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEluc2VydCBhIG5ldyBlbGVtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgaWYgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWViYWIyYjI1MzhkNzMzNzkwYjU3NTI1ODI3MjhlNzciPmNhcGFjaXR5KCk8L2E+CiAgICAgICAgICAgICAgICAmZ3Q7IDA8L2NvZGU+IHRoZW4gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwZDVmZGVhYmViMzUyZjQ3ZDFmN2JiMWVhOGQ5ODE5ZiI+ZnJvbnQoKTwvYT4gPT0gaXRlbTwvY29kZT48YnI+CiAgICAgICAgICAgICAgICBJZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBpcyBmdWxsLCB0aGUgbGFzdCBlbGVtZW50IHdpbGwgYmUgcmVtb3ZlZC4gSWYgdGhlIGNhcGFjaXR5IGlzCiAgICAgICAgICAgICAgICA8Y29kZT4wPC9jb2RlPiwgbm90aGluZyB3aWxsIGJlIGluc2VydGVkLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5pdGVtPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6VChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpvcGVyYXRvciA9IChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQmFzaWM7IG5vLXRocm93IGlmIHRoZSBvcGVyYXRpb24gaW4gdGhlIDxpPlRocm93czwvaT4gc2VjdGlvbiBkb2VzIG5vdCB0aHJvdyBhbnl0aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIERvZXMgbm90IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycyB3aXRoIHRoZSBleGNlcHRpb24gb2YgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSBvdmVyd3JpdHRlbiBlbGVtZW50LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYWEzNWRkN2VmOGViMWQwNDUwODQ5NGQxODM1Y2M4MmUiPnB1c2hfYmFjayhjb25zdF9yZWZlcmVuY2UpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWRmMGRhMDBjYjUwMWJlYTc1YWZiYmZhYjlmNTQ2YTA3Ij5wb3BfYmFjaygpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMThhYzk3MmRjMjRlZjcyMzZmYWExODc1ZGU5MmI5ZGQ4Ij5wb3BfZnJvbnQoKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWRmMGRhMDBjYjUwMWJlYTc1YWZiYmZhYjlmNTQ2YTA3IiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkZjBkYTAwY2I1MDFiZWE3NWFmYmJmYWI5ZjU0NmEwNyI+PC9hPjxjb2RlPjxiPnZvaWQKICAgICAgICAgICAgcG9wX2JhY2soKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBSZW1vdmUgdGhlIGxhc3QgZWxlbWVudCBmcm9tIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UHJlY29uZGl0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPiFlbXB0eSgpPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIGxhc3QgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vLXRocm93LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgb25seSBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIHJlbW92ZWQgZWxlbWVudC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudCAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMThhYzk3MmRjMjRlZjcyMzZmYWExODc1ZGU5MmI5ZGQ4Ij5wb3BfZnJvbnQoKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhYTM1ZGQ3ZWY4ZWIxZDA0NTA4NDk0ZDE4MzVjYzgyZSI+cHVzaF9iYWNrKGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMGVmNTdlNzNjMTkzNjgyYTY0OWQ4ZWI0YTEwOTZkY2UiPnB1c2hfZnJvbnQoY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMThhYzk3MmRjMjRlZjcyMzZmYWExODc1ZGU5MmI5ZGQ4IiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE4YWM5NzJkYzI0ZWY3MjM2ZmFhMTg3NWRlOTJiOWRkOCI+PC9hPjxjb2RlPjxiPnZvaWQKICAgICAgICAgICAgcG9wX2Zyb250KCk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgUmVtb3ZlIHRoZSBmaXJzdCBlbGVtZW50IGZyb20gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+IWVtcHR5KCk8L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBUaGUgZmlyc3QgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vLXRocm93LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgb25seSBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIHJlbW92ZWQgZWxlbWVudC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudCAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWRmMGRhMDBjYjUwMWJlYTc1YWZiYmZhYjlmNTQ2YTA3Ij5wb3BfYmFjaygpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWFhMzVkZDdlZjhlYjFkMDQ1MDg0OTRkMTgzNWNjODJlIj5wdXNoX2JhY2soY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwZWY1N2U3M2MxOTM2ODJhNjQ5ZDhlYjRhMTA5NmRjZSI+cHVzaF9mcm9udChjb25zdF9yZWZlcmVuY2UpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMjhjOTI3NDBmZWUxYjlkZWI4YzY5ODE2ZTM4OWRlOTUiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTI4YzkyNzQwZmVlMWI5ZGViOGM2OTgxNmUzODlkZTk1Ij48L2E+PGNvZGU+PGI+PGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTFiOGEzM2YyZGM4NTE5YjhhN2QzNDRlZDQ0MDhjNTMyIj5pdGVyYXRvcjwvYT4gaW5zZXJ0KDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExYjhhMzNmMmRjODUxOWI4YTdkMzQ0ZWQ0NDA4YzUzMiI+aXRlcmF0b3I8L2E+IHBvcywgPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE4Mzk3MTkxMDkyZjViYWNlZTk5MWI2MjNjYTRiOTEwIj5jb25zdF9yZWZlcmVuY2U8L2E+IGl0ZW0gPQogICAgICAgICAgICB2YWx1ZV90eXBlKCkpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEluc2VydCBhbiBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+cG9zPC9jb2RlPiBpcyBhIHZhbGlkIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IG9yIGl0cyBlbmQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBUaGUgPGNvZGU+aXRlbTwvY29kZT4gd2lsbCBiZSBpbnNlcnRlZCBhdCB0aGUgcG9zaXRpb24gPGNvZGU+cG9zPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICBJZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBpcyBmdWxsLCB0aGUgZmlyc3QgZWxlbWVudCB3aWxsIGJlIG92ZXJ3cml0dGVuLiBJZiB0aGUKICAgICAgICAgICAgICAgIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaXMgZnVsbCBhbmQgdGhlIDxjb2RlPnBvczwvY29kZT4gcG9pbnRzIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luKCk8L2E+PC9jb2RlPiwgdGhlbiB0aGUKICAgICAgICAgICAgICAgIDxjb2RlPml0ZW08L2NvZGU+IHdpbGwgbm90IGJlIGluc2VydGVkLiBJZiB0aGUgY2FwYWNpdHkgaXMgPGNvZGU+MDwvY29kZT4sIG5vdGhpbmcgd2lsbCBiZSBpbnNlcnRlZC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+cG9zPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgQW4gaXRlcmF0b3Igc3BlY2lmeWluZyB0aGUgcG9zaXRpb24gd2hlcmUgdGhlIDxjb2RlPml0ZW08L2NvZGU+IHdpbGwgYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5pdGVtPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEl0ZXJhdG9yIHRvIHRoZSBpbnNlcnRlZCBlbGVtZW50IG9yIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luKCk8L2E+PC9jb2RlPiBpZiB0aGUKICAgICAgICAgICAgICAgIDxjb2RlPml0ZW08L2NvZGU+IGlzIG5vdCBpbnNlcnRlZC4gKFNlZSB0aGUgPGk+RWZmZWN0PC9pPi4pCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6Om9wZXJhdG9yID0gKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYzsgbm8tdGhyb3cgaWYgdGhlIG9wZXJhdGlvbiBpbiB0aGUgPGk+VGhyb3dzPC9pPiBzZWN0aW9uIGRvZXMgbm90IHRocm93IGFueXRoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50cyBhdCB0aGUgaW5zZXJ0aW9uIHBvaW50IChpbmNsdWRpbmcgPGNvZGU+cG9zPC9jb2RlPikgYW5kCiAgICAgICAgICAgICAgICBpdGVyYXRvcnMgYmVoaW5kIHRoZSBpbnNlcnRpb24gcG9pbnQgKHRvd2FyZHMgdGhlIGVuZDsgZXhjZXB0IGl0ZXJhdG9ycyBlcXVhbCB0byA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KS4gSXQgYWxzbwogICAgICAgICAgICAgICAgaW52YWxpZGF0ZXMgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSBvdmVyd3JpdHRlbiBlbGVtZW50LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gPGNvZGU+c3RkOjpkaXN0YW5jZShwb3MsIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPik8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjJmMTk3Yzk5ZDQ3MTM4ZGI3NzdmMGE0Njc4M2IxNDAiPmluc2VydChpdGVyYXRvciwKICAgICAgICAgICAgICAgIHNpemVfdHlwZSwgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkMDAwOTFkMWQ3OTRjYWIzMjY0YjM2NzRlOTliMzNmNiI+aW5zZXJ0KGl0ZXJhdG9yLCBJbnB1dEl0ZXJhdG9yLAogICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvcik8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyYzkzMzJmNDU3YmY1YmIzMTI4NDYzY2Y1MjhjMDU4YyI+cmluc2VydChpdGVyYXRvciwKICAgICAgICAgICAgICAgIHZhbHVlX3R5cGUpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTQ3YTUzNThkYjFiN2Q3ZTQ5MjVjMTZkYjEzZDJmYzUiPnJpbnNlcnQoaXRlcmF0b3IsIHNpemVfdHlwZSwKICAgICAgICAgICAgICAgIHZhbHVlX3R5cGUpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZDY0NzljYmM0M2EzMDRiZGJmMDQyNjJmOTU3ZmEzMjMiPnJpbnNlcnQoaXRlcmF0b3IsIElucHV0SXRlcmF0b3IsCiAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWIyZjE5N2M5OWQ0NzEzOGRiNzc3ZjBhNDY3ODNiMTQwIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiMmYxOTdjOTlkNDcxMzhkYjc3N2YwYTQ2NzgzYjE0MCI+PC9hPjxjb2RlPjxiPnZvaWQgaW5zZXJ0KDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExYjhhMzNmMmRjODUxOWI4YTdkMzQ0ZWQ0NDA4YzUzMiI+aXRlcmF0b3I8L2E+IHBvcywgPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTliYTEyYzAxNDJhMjFhN2Q5NjA4NzdjMjJmYTNlYTAwIj5zaXplX3R5cGU8L2E+IG4sIDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhODM5NzE5MTA5MmY1YmFjZWU5OTFiNjIzY2E0YjkxMCI+Y29uc3RfcmVmZXJlbmNlPC9hPgogICAgICAgICAgICBpdGVtKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBJbnNlcnQgPGNvZGU+bjwvY29kZT4gY29waWVzIG9mIHRoZSA8Y29kZT5pdGVtPC9jb2RlPiBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UHJlY29uZGl0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPnBvczwvY29kZT4gaXMgYSB2YWxpZCBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBvciBpdHMgZW5kLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiA8Y29kZT5taW5bbiwgKHBvcyAtIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luKCk8L2E+KSArIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMGEwMmM0ZmJjNTMzODVlOTg1NjllODEwYmU5ODQzZGUiPnJlc2VydmUoKTwvYT5dPC9jb2RlPiBlbGVtZW50cyB3aWxsCiAgICAgICAgICAgICAgICBiZSBpbnNlcnRlZCBhdCB0aGUgcG9zaXRpb24gPGNvZGU+cG9zPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIDxjb2RlPm1pbltwb3MgLSA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU4ZDFlZGUyZTg1ZjVkNDZlZGE4ZGIzZjBjNGVmZWYwIj5iZWdpbigpPC9hPiwgbWF4WzAsIG4gLSA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTBhMDJjNGZiYzUzMzg1ZTk4NTY5ZTgxMGJlOTg0M2RlIj5yZXNlcnZlKCk8L2E+XV08L2NvZGU+IGVsZW1lbnRzCiAgICAgICAgICAgICAgICB3aWxsIGJlIG92ZXJ3cml0dGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uPGJyPgogICAgICAgICAgICAgICAgKFNlZSA8aT5FeGFtcGxlPC9pPiBmb3IgdGhlIGV4cGxhbmF0aW9uLikKICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+cG9zPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgQW4gaXRlcmF0b3Igc3BlY2lmeWluZyB0aGUgcG9zaXRpb24gd2hlcmUgdGhlIDxjb2RlPml0ZW08L2NvZGU+cyB3aWxsIGJlIGluc2VydGVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bjwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgPGNvZGU+aXRlbTwvY29kZT5zIHRoZSB0byBiZSBpbnNlcnRlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPml0ZW08L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgZWxlbWVudCB3aG9zZSBjb3BpZXMgd2lsbCBiZSBpbnNlcnRlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6Om9wZXJhdG9yID0gKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYzsgbm8tdGhyb3cgaWYgdGhlIG9wZXJhdGlvbnMgaW4gdGhlIDxpPlRocm93czwvaT4gc2VjdGlvbiBkbyBub3QgdGhyb3cgYW55dGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJbnZhbGlkYXRlcyBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnRzIGF0IHRoZSBpbnNlcnRpb24gcG9pbnQgKGluY2x1ZGluZyA8Y29kZT5wb3M8L2NvZGU+KSBhbmQKICAgICAgICAgICAgICAgIGl0ZXJhdG9ycyBiZWhpbmQgdGhlIGluc2VydGlvbiBwb2ludCAodG93YXJkcyB0aGUgZW5kOyBleGNlcHQgaXRlcmF0b3JzIGVxdWFsIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pLiBJdCBhbHNvCiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlcyBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIG92ZXJ3cml0dGVuIGVsZW1lbnRzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gPGNvZGU+bWluWzxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWViYWIyYjI1MzhkNzMzNzkwYjU3NTI1ODI3MjhlNzciPmNhcGFjaXR5KCk8L2E+LCBzdGQ6OmRpc3RhbmNlKHBvcywKICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT4pICsgbl08L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhhbXBsZTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zaWRlciBhIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gd2l0aCB0aGUgY2FwYWNpdHkgb2YgNiBhbmQgdGhlIHNpemUgb2YgNC4gSXRzIGludGVybmFsIGJ1ZmZlcgogICAgICAgICAgICAgICAgbWF5IGxvb2sgbGlrZSB0aGUgb25lIGJlbG93Ljxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIDxjb2RlPnwxfDJ8M3w0fCB8IHw8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGNvZGU+cCAtLS1ePC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIEFmdGVyIGluc2VydGluZyA1IGVsZW1lbnRzIGF0IHRoZSBwb3NpdGlvbiA8Y29kZT5wPC9jb2RlPjo8YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5pbnNlcnQocCwgKHNpemVfdCk1LCAwKTs8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgYWN0dWFsbHkgb25seSA0IGVsZW1lbnRzIGdldCBpbnNlcnRlZCBhbmQgZWxlbWVudHMgPGNvZGU+MTwvY29kZT4gYW5kIDxjb2RlPjI8L2NvZGU+IGFyZSBvdmVyd3JpdHRlbi4KICAgICAgICAgICAgICAgIFRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoZSBpbnNlcnQgb3BlcmF0aW9uIHByZXNlcnZlcyB0aGUgY2FwYWNpdHkuIEFmdGVyIGluc2VydGlvbiB0aGUgaW50ZXJuYWwKICAgICAgICAgICAgICAgIGJ1ZmZlciBsb29rcyBsaWtlIHRoaXM6PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgPGNvZGU+fDB8MHwwfDB8M3w0fDwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBGb3IgY29tcGFyaXNvbiBpZiB0aGUgY2FwYWNpdHkgd291bGQgbm90IGJlIHByZXNlcnZlZCB0aGUgaW50ZXJuYWwgYnVmZmVyIHdvdWxkIHRoZW4gcmVzdWx0IGluCiAgICAgICAgICAgICAgICA8Y29kZT58MXwyfDB8MHwwfDB8MHwzfDR8PC9jb2RlPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMjhjOTI3NDBmZWUxYjlkZWI4YzY5ODE2ZTM4OWRlOTUiPmluc2VydChpdGVyYXRvciwKICAgICAgICAgICAgICAgIHZhbHVlX3R5cGUpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZDAwMDkxZDFkNzk0Y2FiMzI2NGIzNjc0ZTk5YjMzZjYiPmluc2VydChpdGVyYXRvciwgSW5wdXRJdGVyYXRvciwKICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMmM5MzMyZjQ1N2JmNWJiMzEyODQ2M2NmNTI4YzA1OGMiPnJpbnNlcnQoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE0N2E1MzU4ZGIxYjdkN2U0OTI1YzE2ZGIxM2QyZmM1Ij5yaW5zZXJ0KGl0ZXJhdG9yLCBzaXplX3R5cGUsCiAgICAgICAgICAgICAgICB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWQ2NDc5Y2JjNDNhMzA0YmRiZjA0MjYyZjk1N2ZhMzIzIj5yaW5zZXJ0KGl0ZXJhdG9yLCBJbnB1dEl0ZXJhdG9yLAogICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvcik8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkMDAwOTFkMWQ3OTRjYWIzMjY0YjM2NzRlOTliMzNmNiIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZDAwMDkxZDFkNzk0Y2FiMzI2NGIzNjc0ZTk5YjMzZjYiPjwvYT4gPGNvZGU+PGI+dGVtcGxhdGUgJmx0O2NsYXNzCiAgICAgICAgICAgIElucHV0SXRlcmF0b3ImZ3Q7PGJyPgogICAgICAgICAgICAgICAgdm9pZCBpbnNlcnQoPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiPml0ZXJhdG9yPC9hPgogICAgICAgICAgICBwb3MsIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgSW5zZXJ0IHRoZSByYW5nZSA8Y29kZT5bZmlyc3QsIGxhc3QpPC9jb2RlPiBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UHJlY29uZGl0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPnBvczwvY29kZT4gaXMgYSB2YWxpZCBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBvciBpdHMgZW5kLjxicj4KICAgICAgICAgICAgICAgIFZhbGlkIHJhbmdlIDxjb2RlPltmaXJzdCwgbGFzdCk8L2NvZGU+IHdoZXJlIDxjb2RlPmZpcnN0PC9jb2RlPiBhbmQgPGNvZGU+bGFzdDwvY29kZT4gbWVldCB0aGUKICAgICAgICAgICAgICAgIHJlcXVpcmVtZW50cyBvZiBhbiA8YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvSW5wdXRJdGVyYXRvci5odG1sIj5JbnB1dEl0ZXJhdG9yPC9hPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEVsZW1lbnRzIGZyb20gdGhlIHJhbmdlIDxjb2RlPltmaXJzdCArIG1heFswLCBkaXN0YW5jZShmaXJzdCwgbGFzdCkgLSAocG9zIC0gPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1OGQxZWRlMmU4NWY1ZDQ2ZWRhOGRiM2YwYzRlZmVmMCI+YmVnaW4oKTwvYT4pIC0gPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwYTAyYzRmYmM1MzM4NWU5ODU2OWU4MTBiZTk4NDNkZSI+cmVzZXJ2ZSgpPC9hPl0sIGxhc3QpPC9jb2RlPiB3aWxsCiAgICAgICAgICAgICAgICBiZSBpbnNlcnRlZCBhdCB0aGUgcG9zaXRpb24gPGNvZGU+cG9zPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIDxjb2RlPm1pbltwb3MgLSA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU4ZDFlZGUyZTg1ZjVkNDZlZGE4ZGIzZjBjNGVmZWYwIj5iZWdpbigpPC9hPiwgbWF4WzAsIGRpc3RhbmNlKGZpcnN0LAogICAgICAgICAgICAgICAgbGFzdCkgLSA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTBhMDJjNGZiYzUzMzg1ZTk4NTY5ZTgxMGJlOTg0M2RlIj5yZXNlcnZlKCk8L2E+XV08L2NvZGU+IGVsZW1lbnRzCiAgICAgICAgICAgICAgICB3aWxsIGJlIG92ZXJ3cml0dGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uPGJyPgogICAgICAgICAgICAgICAgKFNlZSA8aT5FeGFtcGxlPC9pPiBmb3IgdGhlIGV4cGxhbmF0aW9uLikKICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+cG9zPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgQW4gaXRlcmF0b3Igc3BlY2lmeWluZyB0aGUgcG9zaXRpb24gd2hlcmUgdGhlIHJhbmdlIHdpbGwgYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5maXJzdDwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlIHRvIGJlIGluc2VydGVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bGFzdDwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvIGJlIGluc2VydGVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6b3BlcmF0b3IgPSAoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljOyBuby10aHJvdyBpZiB0aGUgb3BlcmF0aW9ucyBpbiB0aGUgPGk+VGhyb3dzPC9pPiBzZWN0aW9uIGRvIG5vdCB0aHJvdyBhbnl0aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgZWxlbWVudHMgYXQgdGhlIGluc2VydGlvbiBwb2ludCAoaW5jbHVkaW5nIDxjb2RlPnBvczwvY29kZT4pIGFuZAogICAgICAgICAgICAgICAgaXRlcmF0b3JzIGJlaGluZCB0aGUgaW5zZXJ0aW9uIHBvaW50ICh0b3dhcmRzIHRoZSBlbmQ7IGV4Y2VwdCBpdGVyYXRvcnMgZXF1YWwgdG8gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuIEl0IGFsc28KICAgICAgICAgICAgICAgIGludmFsaWRhdGVzIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgb3ZlcndyaXR0ZW4gZWxlbWVudHMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiA8Y29kZT5bc3RkOjpkaXN0YW5jZShwb3MsIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPikgKyBzdGQ6OmRpc3RhbmNlKGZpcnN0LAogICAgICAgICAgICAgICAgbGFzdCldPC9jb2RlPjsgaW4gPGNvZGU+bWluWzxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWViYWIyYjI1MzhkNzMzNzkwYjU3NTI1ODI3MjhlNzciPmNhcGFjaXR5KCk8L2E+LCBzdGQ6OmRpc3RhbmNlKHBvcywKICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT4pICsKICAgICAgICAgICAgICAgIHN0ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpXTwvY29kZT4gaWYgdGhlIDxjb2RlPklucHV0SXRlcmF0b3I8L2NvZGU+IGlzIGEgPGEgaHJlZj0KICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvUmFuZG9tQWNjZXNzSXRlcmF0b3IuaHRtbCI+UmFuZG9tQWNjZXNzSXRlcmF0b3I8L2E+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhhbXBsZTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zaWRlciBhIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gd2l0aCB0aGUgY2FwYWNpdHkgb2YgNiBhbmQgdGhlIHNpemUgb2YgNC4gSXRzIGludGVybmFsIGJ1ZmZlcgogICAgICAgICAgICAgICAgbWF5IGxvb2sgbGlrZSB0aGUgb25lIGJlbG93Ljxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIDxjb2RlPnwxfDJ8M3w0fCB8IHw8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGNvZGU+cCAtLS1ePC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIEFmdGVyIGluc2VydGluZyBhIHJhbmdlIG9mIGVsZW1lbnRzIGF0IHRoZSBwb3NpdGlvbiA8Y29kZT5wPC9jb2RlPjo8YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5pbnQgYXJyYXlbXSA9IHsgNSwgNiwgNywgOCwgOSB9OzwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5pbnNlcnQocCwgYXJyYXksIGFycmF5ICsgNSk7PC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIGFjdHVhbGx5IG9ubHkgZWxlbWVudHMgPGNvZGU+NjwvY29kZT4sIDxjb2RlPjc8L2NvZGU+LCA8Y29kZT44PC9jb2RlPiBhbmQgPGNvZGU+OTwvY29kZT4gZnJvbSB0aGUKICAgICAgICAgICAgICAgIHNwZWNpZmllZCByYW5nZSBnZXQgaW5zZXJ0ZWQgYW5kIGVsZW1lbnRzIDxjb2RlPjE8L2NvZGU+IGFuZCA8Y29kZT4yPC9jb2RlPiBhcmUgb3ZlcndyaXR0ZW4uIFRoaXMgaXMKICAgICAgICAgICAgICAgIGR1ZSB0byB0aGUgZmFjdCB0aGUgaW5zZXJ0IG9wZXJhdGlvbiBwcmVzZXJ2ZXMgdGhlIGNhcGFjaXR5LiBBZnRlciBpbnNlcnRpb24gdGhlIGludGVybmFsIGJ1ZmZlciBsb29rcwogICAgICAgICAgICAgICAgbGlrZSB0aGlzOjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIDxjb2RlPnw2fDd8OHw5fDN8NHw8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgRm9yIGNvbXBhcmlzb24gaWYgdGhlIGNhcGFjaXR5IHdvdWxkIG5vdCBiZSBwcmVzZXJ2ZWQgdGhlIGludGVybmFsIGJ1ZmZlciB3b3VsZCB0aGVuIHJlc3VsdCBpbgogICAgICAgICAgICAgICAgPGNvZGU+fDF8Mnw1fDZ8N3w4fDl8M3w0fDwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTI4YzkyNzQwZmVlMWI5ZGViOGM2OTgxNmUzODlkZTk1Ij5pbnNlcnQoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWIyZjE5N2M5OWQ0NzEzOGRiNzc3ZjBhNDY3ODNiMTQwIj5pbnNlcnQoaXRlcmF0b3IsIHNpemVfdHlwZSwKICAgICAgICAgICAgICAgIHZhbHVlX3R5cGUpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMmM5MzMyZjQ1N2JmNWJiMzEyODQ2M2NmNTI4YzA1OGMiPnJpbnNlcnQoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE0N2E1MzU4ZGIxYjdkN2U0OTI1YzE2ZGIxM2QyZmM1Ij5yaW5zZXJ0KGl0ZXJhdG9yLCBzaXplX3R5cGUsCiAgICAgICAgICAgICAgICB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWQ2NDc5Y2JjNDNhMzA0YmRiZjA0MjYyZjk1N2ZhMzIzIj5yaW5zZXJ0KGl0ZXJhdG9yLCBJbnB1dEl0ZXJhdG9yLAogICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvcik8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyYzkzMzJmNDU3YmY1YmIzMTI4NDYzY2Y1MjhjMDU4YyIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMmM5MzMyZjQ1N2JmNWJiMzEyODQ2M2NmNTI4YzA1OGMiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiPml0ZXJhdG9yPC9hPiByaW5zZXJ0KDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExYjhhMzNmMmRjODUxOWI4YTdkMzQ0ZWQ0NDA4YzUzMiI+aXRlcmF0b3I8L2E+IHBvcywgPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE4Mzk3MTkxMDkyZjViYWNlZTk5MWI2MjNjYTRiOTEwIj5jb25zdF9yZWZlcmVuY2U8L2E+IGl0ZW0gPQogICAgICAgICAgICB2YWx1ZV90eXBlKCkpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEluc2VydCBhbiBlbGVtZW50IGJlZm9yZSB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UHJlY29uZGl0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPnBvczwvY29kZT4gaXMgYSB2YWxpZCBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiBvciBpdHMgZW5kLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIDxjb2RlPml0ZW08L2NvZGU+IHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBwb3NpdGlvbiA8Y29kZT5wb3M8L2NvZGU+Ljxicj4KICAgICAgICAgICAgICAgIElmIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGlzIGZ1bGwsIHRoZSBsYXN0IGVsZW1lbnQgd2lsbCBiZSBvdmVyd3JpdHRlbi4gSWYgdGhlCiAgICAgICAgICAgICAgICA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGlzIGZ1bGwgYW5kIHRoZSA8Y29kZT5wb3M8L2NvZGU+IHBvaW50cyB0byA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+LCB0aGVuIHRoZQogICAgICAgICAgICAgICAgPGNvZGU+aXRlbTwvY29kZT4gd2lsbCBub3QgYmUgaW5zZXJ0ZWQuIElmIHRoZSBjYXBhY2l0eSBpcyA8Y29kZT4wPC9jb2RlPiwgbm90aGluZyB3aWxsIGJlIGluc2VydGVkLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5wb3M8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBBbiBpdGVyYXRvciBzcGVjaWZ5aW5nIHRoZSBwb3NpdGlvbiBiZWZvcmUgd2hpY2ggdGhlIDxjb2RlPml0ZW08L2NvZGU+IHdpbGwgYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5pdGVtPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEl0ZXJhdG9yIHRvIHRoZSBpbnNlcnRlZCBlbGVtZW50IG9yIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4gaWYgdGhlCiAgICAgICAgICAgICAgICA8Y29kZT5pdGVtPC9jb2RlPiBpcyBub3QgaW5zZXJ0ZWQuIChTZWUgdGhlIDxpPkVmZmVjdDwvaT4uKQogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6VChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpvcGVyYXRvciA9IChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQmFzaWM7IG5vLXRocm93IGlmIHRoZSBvcGVyYXRpb25zIGluIHRoZSA8aT5UaHJvd3M8L2k+IHNlY3Rpb24gZG8gbm90IHRocm93IGFueXRoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50cyBiZWZvcmUgdGhlIGluc2VydGlvbiBwb2ludCAodG93YXJkcyB0aGUgYmVnaW5uaW5nIGFuZAogICAgICAgICAgICAgICAgZXhjbHVkaW5nIDxjb2RlPnBvczwvY29kZT4pLiBJdCBhbHNvIGludmFsaWRhdGVzIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgb3ZlcndyaXR0ZW4gZWxlbWVudC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIDxjb2RlPnN0ZDo6ZGlzdGFuY2UoPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1OGQxZWRlMmU4NWY1ZDQ2ZWRhOGRiM2YwYzRlZmVmMCI+YmVnaW4oKTwvYT4sIHBvcyk8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTQ3YTUzNThkYjFiN2Q3ZTQ5MjVjMTZkYjEzZDJmYzUiPnJpbnNlcnQoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBzaXplX3R5cGUsIHZhbHVlX3R5cGUpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZDY0NzljYmM0M2EzMDRiZGJmMDQyNjJmOTU3ZmEzMjMiPnJpbnNlcnQoaXRlcmF0b3IsIElucHV0SXRlcmF0b3IsCiAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTI4YzkyNzQwZmVlMWI5ZGViOGM2OTgxNmUzODlkZTk1Ij5pbnNlcnQoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWIyZjE5N2M5OWQ0NzEzOGRiNzc3ZjBhNDY3ODNiMTQwIj5pbnNlcnQoaXRlcmF0b3IsIHNpemVfdHlwZSwKICAgICAgICAgICAgICAgIHZhbHVlX3R5cGUpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZDAwMDkxZDFkNzk0Y2FiMzI2NGIzNjc0ZTk5YjMzZjYiPmluc2VydChpdGVyYXRvciwgSW5wdXRJdGVyYXRvciwKICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTQ3YTUzNThkYjFiN2Q3ZTQ5MjVjMTZkYjEzZDJmYzUiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE0N2E1MzU4ZGIxYjdkN2U0OTI1YzE2ZGIxM2QyZmM1Ij48L2E+PGNvZGU+PGI+dm9pZCByaW5zZXJ0KDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExYjhhMzNmMmRjODUxOWI4YTdkMzQ0ZWQ0NDA4YzUzMiI+aXRlcmF0b3I8L2E+IHBvcywgPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTliYTEyYzAxNDJhMjFhN2Q5NjA4NzdjMjJmYTNlYTAwIj5zaXplX3R5cGU8L2E+IG4sIDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhODM5NzE5MTA5MmY1YmFjZWU5OTFiNjIzY2E0YjkxMCI+Y29uc3RfcmVmZXJlbmNlPC9hPgogICAgICAgICAgICBpdGVtKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBJbnNlcnQgPGNvZGU+bjwvY29kZT4gY29waWVzIG9mIHRoZSA8Y29kZT5pdGVtPC9jb2RlPiBiZWZvcmUgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT5wb3M8L2NvZGU+IGlzIGEgdmFsaWQgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gb3IgaXRzIGVuZC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgPGNvZGU+bWluW24sICg8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT4gLSBwb3MpICsgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwYTAyYzRmYmM1MzM4NWU5ODU2OWU4MTBiZTk4NDNkZSI+cmVzZXJ2ZSgpPC9hPl08L2NvZGU+IGVsZW1lbnRzIHdpbGwKICAgICAgICAgICAgICAgIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgcG9zaXRpb24gPGNvZGU+cG9zPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIDxjb2RlPm1pbls8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT4gLSBwb3MsIG1heFswLCBuIC0KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTBhMDJjNGZiYzUzMzg1ZTk4NTY5ZTgxMGJlOTg0M2RlIj5yZXNlcnZlKCk8L2E+XV08L2NvZGU+CiAgICAgICAgICAgICAgICBlbGVtZW50cyB3aWxsIGJlIG92ZXJ3cml0dGVuIGF0IHRoZSBlbmQgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4uPGJyPgogICAgICAgICAgICAgICAgKFNlZSA8aT5FeGFtcGxlPC9pPiBmb3IgdGhlIGV4cGxhbmF0aW9uLikKICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+cG9zPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgQW4gaXRlcmF0b3Igc3BlY2lmeWluZyB0aGUgcG9zaXRpb24gd2hlcmUgdGhlIDxjb2RlPml0ZW08L2NvZGU+cyB3aWxsIGJlIGluc2VydGVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bjwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgPGNvZGU+aXRlbTwvY29kZT5zIHRoZSB0byBiZSBpbnNlcnRlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPml0ZW08L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgZWxlbWVudCB3aG9zZSBjb3BpZXMgd2lsbCBiZSBpbnNlcnRlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6Om9wZXJhdG9yID0gKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYzsgbm8tdGhyb3cgaWYgdGhlIG9wZXJhdGlvbnMgaW4gdGhlIDxpPlRocm93czwvaT4gc2VjdGlvbiBkbyBub3QgdGhyb3cgYW55dGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJbnZhbGlkYXRlcyBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnRzIGJlZm9yZSB0aGUgaW5zZXJ0aW9uIHBvaW50ICh0b3dhcmRzIHRoZSBiZWdpbm5pbmcgYW5kCiAgICAgICAgICAgICAgICBleGNsdWRpbmcgPGNvZGU+cG9zPC9jb2RlPikuIEl0IGFsc28gaW52YWxpZGF0ZXMgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSBvdmVyd3JpdHRlbiBlbGVtZW50cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIDxjb2RlPm1pbls8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVlYmFiMmIyNTM4ZDczMzc5MGI1NzUyNTgyNzI4ZTc3Ij5jYXBhY2l0eSgpPC9hPiwKICAgICAgICAgICAgICAgIHN0ZDo6ZGlzdGFuY2UoPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luKCk8L2E+LAogICAgICAgICAgICAgICAgcG9zKSArIG5dPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4YW1wbGU6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc2lkZXIgYSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHdpdGggdGhlIGNhcGFjaXR5IG9mIDYgYW5kIHRoZSBzaXplIG9mIDQuIEl0cyBpbnRlcm5hbCBidWZmZXIKICAgICAgICAgICAgICAgIG1heSBsb29rIGxpa2UgdGhlIG9uZSBiZWxvdy48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICA8Y29kZT58MXwyfDN8NHwgfCB8PC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxjb2RlPnAgLS0tXjwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBBZnRlciBpbnNlcnRpbmcgNSBlbGVtZW50cyBiZWZvcmUgdGhlIHBvc2l0aW9uIDxjb2RlPnA8L2NvZGU+Ojxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIDxjb2RlPnJpbnNlcnQocCwgKHNpemVfdCk1LCAwKTs8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgYWN0dWFsbHkgb25seSA0IGVsZW1lbnRzIGdldCBpbnNlcnRlZCBhbmQgZWxlbWVudHMgPGNvZGU+MzwvY29kZT4gYW5kIDxjb2RlPjQ8L2NvZGU+IGFyZSBvdmVyd3JpdHRlbi4KICAgICAgICAgICAgICAgIFRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoZSByaW5zZXJ0IG9wZXJhdGlvbiBwcmVzZXJ2ZXMgdGhlIGNhcGFjaXR5LiBBZnRlciBpbnNlcnRpb24gdGhlIGludGVybmFsCiAgICAgICAgICAgICAgICBidWZmZXIgbG9va3MgbGlrZSB0aGlzOjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIDxjb2RlPnwxfDJ8MHwwfDB8MHw8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgRm9yIGNvbXBhcmlzb24gaWYgdGhlIGNhcGFjaXR5IHdvdWxkIG5vdCBiZSBwcmVzZXJ2ZWQgdGhlIGludGVybmFsIGJ1ZmZlciB3b3VsZCB0aGVuIHJlc3VsdCBpbgogICAgICAgICAgICAgICAgPGNvZGU+fDF8MnwwfDB8MHwwfDB8M3w0fDwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTJjOTMzMmY0NTdiZjViYjMxMjg0NjNjZjUyOGMwNThjIj5yaW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkNjQ3OWNiYzQzYTMwNGJkYmYwNDI2MmY5NTdmYTMyMyI+cmluc2VydChpdGVyYXRvciwgSW5wdXRJdGVyYXRvciwKICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMjhjOTI3NDBmZWUxYjlkZWI4YzY5ODE2ZTM4OWRlOTUiPmluc2VydChpdGVyYXRvciwKICAgICAgICAgICAgICAgIHZhbHVlX3R5cGUpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjJmMTk3Yzk5ZDQ3MTM4ZGI3NzdmMGE0Njc4M2IxNDAiPmluc2VydChpdGVyYXRvciwgc2l6ZV90eXBlLAogICAgICAgICAgICAgICAgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkMDAwOTFkMWQ3OTRjYWIzMjY0YjM2NzRlOTliMzNmNiI+aW5zZXJ0KGl0ZXJhdG9yLCBJbnB1dEl0ZXJhdG9yLAogICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvcik8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkNjQ3OWNiYzQzYTMwNGJkYmYwNDI2MmY5NTdmYTMyMyIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZDY0NzljYmM0M2EzMDRiZGJmMDQyNjJmOTU3ZmEzMjMiPjwvYT4gPGNvZGU+PGI+dGVtcGxhdGUgJmx0O2NsYXNzCiAgICAgICAgICAgIElucHV0SXRlcmF0b3ImZ3Q7PGJyPgogICAgICAgICAgICAgICAgdm9pZCByaW5zZXJ0KDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTFiOGEzM2YyZGM4NTE5YjhhN2QzNDRlZDQ0MDhjNTMyIj5pdGVyYXRvcjwvYT4KICAgICAgICAgICAgcG9zLCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEluc2VydCB0aGUgcmFuZ2UgPGNvZGU+W2ZpcnN0LCBsYXN0KTwvY29kZT4gYmVmb3JlIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+cG9zPC9jb2RlPiBpcyBhIHZhbGlkIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IG9yIGl0cyBlbmQuPGJyPgogICAgICAgICAgICAgICAgVmFsaWQgcmFuZ2UgPGNvZGU+W2ZpcnN0LCBsYXN0KTwvY29kZT4gd2hlcmUgPGNvZGU+Zmlyc3Q8L2NvZGU+IGFuZCA8Y29kZT5sYXN0PC9jb2RlPiBtZWV0IHRoZQogICAgICAgICAgICAgICAgcmVxdWlyZW1lbnRzIG9mIGFuIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9JbnB1dEl0ZXJhdG9yLmh0bWwiPklucHV0SXRlcmF0b3I8L2E+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRWxlbWVudHMgZnJvbSB0aGUgcmFuZ2UgPGNvZGU+W2ZpcnN0LCBsYXN0IC0gbWF4WzAsIGRpc3RhbmNlKGZpcnN0LCBsYXN0KSAtICg8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT4gLSBwb3MpIC0gPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwYTAyYzRmYmM1MzM4NWU5ODU2OWU4MTBiZTk4NDNkZSI+cmVzZXJ2ZSgpPC9hPl0pPC9jb2RlPiB3aWxsIGJlCiAgICAgICAgICAgICAgICBpbnNlcnRlZCBiZWZvcmUgdGhlIHBvc2l0aW9uIDxjb2RlPnBvczwvY29kZT4uPGJyPgogICAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiA8Y29kZT5taW5bPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+IC0gcG9zLCBtYXhbMCwKICAgICAgICAgICAgICAgIGRpc3RhbmNlKGZpcnN0LCBsYXN0KSAtIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMGEwMmM0ZmJjNTMzODVlOTg1NjllODEwYmU5ODQzZGUiPnJlc2VydmUoKTwvYT5dXTwvY29kZT4gZWxlbWVudHMKICAgICAgICAgICAgICAgIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYXQgdGhlIGVuZCBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICAoU2VlIDxpPkV4YW1wbGU8L2k+IGZvciB0aGUgZXhwbGFuYXRpb24uKQogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5wb3M8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBBbiBpdGVyYXRvciBzcGVjaWZ5aW5nIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgcmFuZ2Ugd2lsbCBiZSBpbnNlcnRlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmZpcnN0PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UgdG8gYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5sYXN0PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVuZCBvZiB0aGUgcmFuZ2UgdG8gYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6VChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpvcGVyYXRvciA9IChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQmFzaWM7IG5vLXRocm93IGlmIHRoZSBvcGVyYXRpb25zIGluIHRoZSA8aT5UaHJvd3M8L2k+IHNlY3Rpb24gZG8gbm90IHRocm93IGFueXRoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50cyBiZWZvcmUgdGhlIGluc2VydGlvbiBwb2ludCAodG93YXJkcyB0aGUgYmVnaW5uaW5nIGFuZAogICAgICAgICAgICAgICAgZXhjbHVkaW5nIDxjb2RlPnBvczwvY29kZT4pLiBJdCBhbHNvIGludmFsaWRhdGVzIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgb3ZlcndyaXR0ZW4gZWxlbWVudHMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiA8Y29kZT5bc3RkOjpkaXN0YW5jZSg8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU4ZDFlZGUyZTg1ZjVkNDZlZGE4ZGIzZjBjNGVmZWYwIj5iZWdpbigpPC9hPiwgcG9zKSArCiAgICAgICAgICAgICAgICBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KV08L2NvZGU+OyBpbiA8Y29kZT5taW5bPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZWJhYjJiMjUzOGQ3MzM3OTBiNTc1MjU4MjcyOGU3NyI+Y2FwYWNpdHkoKTwvYT4sCiAgICAgICAgICAgICAgICBzdGQ6OmRpc3RhbmNlKDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU4ZDFlZGUyZTg1ZjVkNDZlZGE4ZGIzZjBjNGVmZWYwIj5iZWdpbigpPC9hPiwKICAgICAgICAgICAgICAgIHBvcykgKyBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KV08L2NvZGU+IGlmIHRoZSA8Y29kZT5JbnB1dEl0ZXJhdG9yPC9jb2RlPiBpcyBhIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLmh0bWwiPlJhbmRvbUFjY2Vzc0l0ZXJhdG9yPC9hPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4YW1wbGU6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc2lkZXIgYSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHdpdGggdGhlIGNhcGFjaXR5IG9mIDYgYW5kIHRoZSBzaXplIG9mIDQuIEl0cyBpbnRlcm5hbCBidWZmZXIKICAgICAgICAgICAgICAgIG1heSBsb29rIGxpa2UgdGhlIG9uZSBiZWxvdy48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICA8Y29kZT58MXwyfDN8NHwgfCB8PC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxjb2RlPnAgLS0tXjwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBBZnRlciBpbnNlcnRpbmcgYSByYW5nZSBvZiBlbGVtZW50cyBiZWZvcmUgdGhlIHBvc2l0aW9uIDxjb2RlPnA8L2NvZGU+Ojxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIDxjb2RlPmludCBhcnJheVtdID0geyA1LCA2LCA3LCA4LCA5IH07PC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxjb2RlPmluc2VydChwLCBhcnJheSwgYXJyYXkgKyA1KTs8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgYWN0dWFsbHkgb25seSBlbGVtZW50cyA8Y29kZT41PC9jb2RlPiwgPGNvZGU+NjwvY29kZT4sIDxjb2RlPjc8L2NvZGU+IGFuZCA8Y29kZT44PC9jb2RlPiBmcm9tIHRoZQogICAgICAgICAgICAgICAgc3BlY2lmaWVkIHJhbmdlIGdldCBpbnNlcnRlZCBhbmQgZWxlbWVudHMgPGNvZGU+MzwvY29kZT4gYW5kIDxjb2RlPjQ8L2NvZGU+IGFyZSBvdmVyd3JpdHRlbi4gVGhpcyBpcwogICAgICAgICAgICAgICAgZHVlIHRvIHRoZSBmYWN0IHRoZSByaW5zZXJ0IG9wZXJhdGlvbiBwcmVzZXJ2ZXMgdGhlIGNhcGFjaXR5LiBBZnRlciBpbnNlcnRpb24gdGhlIGludGVybmFsIGJ1ZmZlciBsb29rcwogICAgICAgICAgICAgICAgbGlrZSB0aGlzOjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIDxjb2RlPnwxfDJ8NXw2fDd8OHw8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgRm9yIGNvbXBhcmlzb24gaWYgdGhlIGNhcGFjaXR5IHdvdWxkIG5vdCBiZSBwcmVzZXJ2ZWQgdGhlIGludGVybmFsIGJ1ZmZlciB3b3VsZCB0aGVuIHJlc3VsdCBpbgogICAgICAgICAgICAgICAgPGNvZGU+fDF8Mnw1fDZ8N3w4fDl8M3w0fDwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTJjOTMzMmY0NTdiZjViYjMxMjg0NjNjZjUyOGMwNThjIj5yaW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhNDdhNTM1OGRiMWI3ZDdlNDkyNWMxNmRiMTNkMmZjNSI+cmluc2VydChpdGVyYXRvciwgc2l6ZV90eXBlLAogICAgICAgICAgICAgICAgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEyOGM5Mjc0MGZlZTFiOWRlYjhjNjk4MTZlMzg5ZGU5NSI+aW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiMmYxOTdjOTlkNDcxMzhkYjc3N2YwYTQ2NzgzYjE0MCI+aW5zZXJ0KGl0ZXJhdG9yLCBzaXplX3R5cGUsCiAgICAgICAgICAgICAgICB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWQwMDA5MWQxZDc5NGNhYjMyNjRiMzY3NGU5OWIzM2Y2Ij5pbnNlcnQoaXRlcmF0b3IsIElucHV0SXRlcmF0b3IsCiAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTk3MTU1ZGU3MTJkYjE3NTllMTY5ODQ1NWI0OWEwYmUzIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5NzE1NWRlNzEyZGIxNzU5ZTE2OTg0NTViNDlhMGJlMyI+PC9hPjxjb2RlPjxiPjxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExYjhhMzNmMmRjODUxOWI4YTdkMzQ0ZWQ0NDA4YzUzMiI+aXRlcmF0b3I8L2E+IGVyYXNlKDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExYjhhMzNmMmRjODUxOWI4YTdkMzQ0ZWQ0NDA4YzUzMiI+aXRlcmF0b3I8L2E+IHBvcyk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgUmVtb3ZlIGFuIGVsZW1lbnQgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT5wb3M8L2NvZGU+IGlzIGEgdmFsaWQgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gKGJ1dCBub3QgYW4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFRoZSBlbGVtZW50IGF0IHRoZSBwb3NpdGlvbiA8Y29kZT5wb3M8L2NvZGU+IGlzIHJlbW92ZWQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPnBvczwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIEFuIGl0ZXJhdG9yIHBvaW50aW5nIGF0IHRoZSBlbGVtZW50IHRvIGJlIHJlbW92ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBlbGVtZW50IHJlbWFpbmluZyBiZXlvbmQgdGhlIHJlbW92ZWQgZWxlbWVudCBvciA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+IGlmIG5vIHN1Y2ggZWxlbWVudAogICAgICAgICAgICAgICAgZXhpc3RzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6b3BlcmF0b3IgPSAoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljOyBuby10aHJvdyBpZiB0aGUgb3BlcmF0aW9uIGluIHRoZSA8aT5UaHJvd3M8L2k+IHNlY3Rpb24gZG9lcyBub3QgdGhyb3cgYW55dGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJbnZhbGlkYXRlcyBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIGVyYXNlZCBlbGVtZW50IGFuZCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnRzIGJlaGluZCB0aGUKICAgICAgICAgICAgICAgIGVyYXNlZCBlbGVtZW50ICh0b3dhcmRzIHRoZSBlbmQ7IGV4Y2VwdCBpdGVyYXRvcnMgZXF1YWwgdG8gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiA8Y29kZT5zdGQ6OmRpc3RhbmNlKHBvcywgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+KTwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhOTY0MTUzODk1MDlhMThiZDdkN2I1ZDhlNGRkYTliZCI+ZXJhc2UoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBpdGVyYXRvcik8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiNmQ0YWU3N2Q3NDQ1Zjg0NGUzMGU3ODU5MmYxZTA2ZiI+cmVyYXNlKGl0ZXJhdG9yKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjBmOThhZTMwMzU4NGRlZDUzOTdmMDY3YmJmYzkxMWYiPnJlcmFzZShpdGVyYXRvciwKICAgICAgICAgICAgICAgIGl0ZXJhdG9yKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWIyNWQzNzljZjY2YWNlMDI1MDM2YTQ3ZGRiMzQ0YWJkIj5lcmFzZV9iZWdpbihzaXplX3R5cGUpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTc0ODVlZTdmNThiMDEzNjMxNzAxMTRmMjEyM2E0OGQ3Ij5lcmFzZV9lbmQoc2l6ZV90eXBlKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xODI2ZjU3NzBhNDBiOGI3NTJlYjk1ODczNzg0NjRkMWUiPmNsZWFyKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhOTY0MTUzODk1MDlhMThiZDdkN2I1ZDhlNGRkYTliZCIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTk2NDE1Mzg5NTA5YTE4YmQ3ZDdiNWQ4ZTRkZGE5YmQiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiPml0ZXJhdG9yPC9hPiBlcmFzZSg8YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiPml0ZXJhdG9yPC9hPiBmaXJzdCwgPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTFiOGEzM2YyZGM4NTE5YjhhN2QzNDRlZDQ0MDhjNTMyIj5pdGVyYXRvcjwvYT4gbGFzdCk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgRXJhc2UgdGhlIHJhbmdlIDxjb2RlPltmaXJzdCwgbGFzdCk8L2NvZGU+LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UHJlY29uZGl0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFZhbGlkIHJhbmdlIDxjb2RlPltmaXJzdCwgbGFzdCk8L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIGVsZW1lbnRzIGZyb20gdGhlIHJhbmdlIDxjb2RlPltmaXJzdCwgbGFzdCk8L2NvZGU+IGFyZSByZW1vdmVkLiAoSWYgPGNvZGU+Zmlyc3QgPT0gbGFzdDwvY29kZT4KICAgICAgICAgICAgICAgIG5vdGhpbmcgaXMgcmVtb3ZlZC4pCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmZpcnN0PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UgdG8gYmUgcmVtb3ZlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmxhc3Q8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgZW5kIG9mIHRoZSByYW5nZSB0byBiZSByZW1vdmVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJdGVyYXRvciB0byB0aGUgZmlyc3QgZWxlbWVudCByZW1haW5pbmcgYmV5b25kIHRoZSByZW1vdmVkIGVsZW1lbnRzIG9yIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4gaWYgbm8gc3VjaCBlbGVtZW50CiAgICAgICAgICAgICAgICBleGlzdHMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpvcGVyYXRvciA9IChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQmFzaWM7IG5vLXRocm93IGlmIHRoZSBvcGVyYXRpb24gaW4gdGhlIDxpPlRocm93czwvaT4gc2VjdGlvbiBkb2VzIG5vdCB0aHJvdyBhbnl0aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgZXJhc2VkIGVsZW1lbnRzIGFuZCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnRzIGJlaGluZCB0aGUKICAgICAgICAgICAgICAgIGVyYXNlZCByYW5nZSAodG93YXJkcyB0aGUgZW5kOyBleGNlcHQgaXRlcmF0b3JzIGVxdWFsIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gPGNvZGU+c3RkOjpkaXN0YW5jZShmaXJzdCwgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+KTwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTk3MTU1ZGU3MTJkYjE3NTllMTY5ODQ1NWI0OWEwYmUzIj5lcmFzZShpdGVyYXRvcik8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjZkNGFlNzdkNzQ0NWY4NDRlMzBlNzg1OTJmMWUwNmYiPnJlcmFzZShpdGVyYXRvcik8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWIwZjk4YWUzMDM1ODRkZWQ1Mzk3ZjA2N2JiZmM5MTFmIj5yZXJhc2UoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBpdGVyYXRvcik8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiMjVkMzc5Y2Y2NmFjZTAyNTAzNmE0N2RkYjM0NGFiZCI+ZXJhc2VfYmVnaW4oc2l6ZV90eXBlKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE3NDg1ZWU3ZjU4YjAxMzYzMTcwMTE0ZjIxMjNhNDhkNyI+ZXJhc2VfZW5kKHNpemVfdHlwZSk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTgyNmY1NzcwYTQwYjhiNzUyZWI5NTg3Mzc4NDY0ZDFlIj5jbGVhcigpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjZkNGFlNzdkNzQ0NWY4NDRlMzBlNzg1OTJmMWUwNmYiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWI2ZDRhZTc3ZDc0NDVmODQ0ZTMwZTc4NTkyZjFlMDZmIj48L2E+PGNvZGU+PGI+PGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTFiOGEzM2YyZGM4NTE5YjhhN2QzNDRlZDQ0MDhjNTMyIj5pdGVyYXRvcjwvYT4gcmVyYXNlKDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExYjhhMzNmMmRjODUxOWI4YTdkMzQ0ZWQ0NDA4YzUzMiI+aXRlcmF0b3I8L2E+IHBvcyk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgUmVtb3ZlIGFuIGVsZW1lbnQgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT5wb3M8L2NvZGU+IGlzIGEgdmFsaWQgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gKGJ1dCBub3QgYW4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFRoZSBlbGVtZW50IGF0IHRoZSBwb3NpdGlvbiA8Y29kZT5wb3M8L2NvZGU+IGlzIHJlbW92ZWQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPnBvczwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIEFuIGl0ZXJhdG9yIHBvaW50aW5nIGF0IHRoZSBlbGVtZW50IHRvIGJlIHJlbW92ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBlbGVtZW50IHJlbWFpbmluZyBpbiBmcm9udCBvZiB0aGUgcmVtb3ZlZCBlbGVtZW50IG9yIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luKCk8L2E+PC9jb2RlPiBpZiBubyBzdWNoCiAgICAgICAgICAgICAgICBlbGVtZW50IGV4aXN0cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6Om9wZXJhdG9yID0gKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYzsgbm8tdGhyb3cgaWYgdGhlIG9wZXJhdGlvbiBpbiB0aGUgPGk+VGhyb3dzPC9pPiBzZWN0aW9uIGRvZXMgbm90IHRocm93IGFueXRoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSBlcmFzZWQgZWxlbWVudCBhbmQgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50cyBpbiBmcm9udCBvZgogICAgICAgICAgICAgICAgdGhlIGVyYXNlZCBlbGVtZW50ICh0b3dhcmRzIHRoZSBiZWdpbm5pbmcpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gPGNvZGU+c3RkOjpkaXN0YW5jZSg8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU4ZDFlZGUyZTg1ZjVkNDZlZGE4ZGIzZjBjNGVmZWYwIj5iZWdpbigpPC9hPiwgcG9zKTwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Ob3RlOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHN5bWV0cmljIHRvIHRoZSA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTk3MTU1ZGU3MTJkYjE3NTllMTY5ODQ1NWI0OWEwYmUzIj5lcmFzZShpdGVyYXRvcik8L2E+PC9jb2RlPiBtZXRob2QKICAgICAgICAgICAgICAgIGFuZCBpcyBtb3JlIGVmZmVjdGl2ZSB0aGFuIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOTcxNTVkZTcxMmRiMTc1OWUxNjk4NDU1YjQ5YTBiZTMiPmVyYXNlKGl0ZXJhdG9yKTwvYT48L2NvZGU+IGlmIHRoZQogICAgICAgICAgICAgICAgaXRlcmF0b3IgPGNvZGU+cG9zPC9jb2RlPiBpcyBjbG9zZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LiAoU2VlIHRoZQogICAgICAgICAgICAgICAgPGk+Q29tcGxleGl0eTwvaT4uKQogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTk3MTU1ZGU3MTJkYjE3NTllMTY5ODQ1NWI0OWEwYmUzIj5lcmFzZShpdGVyYXRvcik8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE5NjQxNTM4OTUwOWExOGJkN2Q3YjVkOGU0ZGRhOWJkIj5lcmFzZShpdGVyYXRvciwKICAgICAgICAgICAgICAgIGl0ZXJhdG9yKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWIwZjk4YWUzMDM1ODRkZWQ1Mzk3ZjA2N2JiZmM5MTFmIj5yZXJhc2UoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBpdGVyYXRvcik8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiMjVkMzc5Y2Y2NmFjZTAyNTAzNmE0N2RkYjM0NGFiZCI+ZXJhc2VfYmVnaW4oc2l6ZV90eXBlKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE3NDg1ZWU3ZjU4YjAxMzYzMTcwMTE0ZjIxMjNhNDhkNyI+ZXJhc2VfZW5kKHNpemVfdHlwZSk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTgyNmY1NzcwYTQwYjhiNzUyZWI5NTg3Mzc4NDY0ZDFlIj5jbGVhcigpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjBmOThhZTMwMzU4NGRlZDUzOTdmMDY3YmJmYzkxMWYiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWIwZjk4YWUzMDM1ODRkZWQ1Mzk3ZjA2N2JiZmM5MTFmIj48L2E+PGNvZGU+PGI+PGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTFiOGEzM2YyZGM4NTE5YjhhN2QzNDRlZDQ0MDhjNTMyIj5pdGVyYXRvcjwvYT4gcmVyYXNlKDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExYjhhMzNmMmRjODUxOWI4YTdkMzQ0ZWQ0NDA4YzUzMiI+aXRlcmF0b3I8L2E+IGZpcnN0LCA8YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiPml0ZXJhdG9yPC9hPiBsYXN0KTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBFcmFzZSB0aGUgcmFuZ2UgPGNvZGU+W2ZpcnN0LCBsYXN0KTwvY29kZT4uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVmFsaWQgcmFuZ2UgPGNvZGU+W2ZpcnN0LCBsYXN0KTwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBUaGUgZWxlbWVudHMgZnJvbSB0aGUgcmFuZ2UgPGNvZGU+W2ZpcnN0LCBsYXN0KTwvY29kZT4gYXJlIHJlbW92ZWQuIChJZiA8Y29kZT5maXJzdCA9PSBsYXN0PC9jb2RlPgogICAgICAgICAgICAgICAgbm90aGluZyBpcyByZW1vdmVkLikKICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+Zmlyc3Q8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgYmVnaW5uaW5nIG9mIHRoZSByYW5nZSB0byBiZSByZW1vdmVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bGFzdDwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvIGJlIHJlbW92ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBlbGVtZW50IHJlbWFpbmluZyBpbiBmcm9udCBvZiB0aGUgcmVtb3ZlZCBlbGVtZW50cyBvciA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU4ZDFlZGUyZTg1ZjVkNDZlZGE4ZGIzZjBjNGVmZWYwIj5iZWdpbigpPC9hPjwvY29kZT4gaWYgbm8gc3VjaAogICAgICAgICAgICAgICAgZWxlbWVudCBleGlzdHMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpvcGVyYXRvciA9IChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQmFzaWM7IG5vLXRocm93IGlmIHRoZSBvcGVyYXRpb24gaW4gdGhlIDxpPlRocm93czwvaT4gc2VjdGlvbiBkb2VzIG5vdCB0aHJvdyBhbnl0aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgZXJhc2VkIGVsZW1lbnRzIGFuZCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnRzIGluIGZyb250CiAgICAgICAgICAgICAgICBvZiB0aGUgZXJhc2VkIHJhbmdlICh0b3dhcmRzIHRoZSBiZWdpbm5pbmcpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gPGNvZGU+c3RkOjpkaXN0YW5jZSg8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU4ZDFlZGUyZTg1ZjVkNDZlZGE4ZGIzZjBjNGVmZWYwIj5iZWdpbigpPC9hPiwgbGFzdCk8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Tm90ZTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBzeW1ldHJpYyB0byB0aGUgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhOTY0MTUzODk1MDlhMThiZDdkN2I1ZDhlNGRkYTliZCI+ZXJhc2UoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBpdGVyYXRvcik8L2E+PC9jb2RlPiBtZXRob2QgYW5kIGlzIG1vcmUgZWZmZWN0aXZlIHRoYW4gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhOTY0MTUzODk1MDlhMThiZDdkN2I1ZDhlNGRkYTliZCI+ZXJhc2UoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBpdGVyYXRvcik8L2E+PC9jb2RlPiBpZiA8Y29kZT5zdGQ6OmRpc3RhbmNlKDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luKCk8L2E+LCBmaXJzdCk8L2NvZGU+IGlzIGxvd2VyCiAgICAgICAgICAgICAgICB0aGF0IDxjb2RlPnN0ZDo6ZGlzdGFuY2UobGFzdCwgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+KTwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOTcxNTVkZTcxMmRiMTc1OWUxNjk4NDU1YjQ5YTBiZTMiPmVyYXNlKGl0ZXJhdG9yKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTk2NDE1Mzg5NTA5YTE4YmQ3ZDdiNWQ4ZTRkZGE5YmQiPmVyYXNlKGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgaXRlcmF0b3IpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjZkNGFlNzdkNzQ0NWY4NDRlMzBlNzg1OTJmMWUwNmYiPnJlcmFzZShpdGVyYXRvcik8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjI1ZDM3OWNmNjZhY2UwMjUwMzZhNDdkZGIzNDRhYmQiPmVyYXNlX2JlZ2luKHNpemVfdHlwZSk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNzQ4NWVlN2Y1OGIwMTM2MzE3MDExNGYyMTIzYTQ4ZDciPmVyYXNlX2VuZChzaXplX3R5cGUpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE4MjZmNTc3MGE0MGI4Yjc1MmViOTU4NzM3ODQ2NGQxZSI+Y2xlYXIoKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWIyNWQzNzljZjY2YWNlMDI1MDM2YTQ3ZGRiMzQ0YWJkIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiMjVkMzc5Y2Y2NmFjZTAyNTAzNmE0N2RkYjM0NGFiZCI+PC9hPjxjb2RlPjxiPnZvaWQgZXJhc2VfYmVnaW4oPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTliYTEyYzAxNDJhMjFhN2Q5NjA4NzdjMjJmYTNlYTAwIj5zaXplX3R5cGU8L2E+IG4pOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIFJlbW92ZSBmaXJzdCA8Y29kZT5uPC9jb2RlPiBlbGVtZW50cyAod2l0aCBjb25zdGFudCBjb21wbGV4aXR5IGZvciBzY2FsYXIgdHlwZXMpLgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UHJlY29uZGl0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPm4gJmx0Oz0gPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFRoZSA8Y29kZT5uPC9jb2RlPiBlbGVtZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHdpbGwgYmUgcmVtb3ZlZC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bjwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgcmVtb3ZlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpvcGVyYXRvciA9IChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuIChEb2VzIG5vdCB0aHJvdyBhbnl0aGluZyBpbiBjYXNlIG9mCiAgICAgICAgICAgICAgICBzY2FsYXJzLikKICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYzsgbm8tdGhyb3cgaWYgdGhlIG9wZXJhdGlvbiBpbiB0aGUgPGk+VGhyb3dzPC9pPiBzZWN0aW9uIGRvZXMgbm90IHRocm93IGFueXRoaW5nLiAoSS5lLiBubyB0aHJvdwogICAgICAgICAgICAgICAgaW4gY2FzZSBvZiBzY2FsYXJzLikKICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgZmlyc3QgPGNvZGU+bjwvY29kZT4gZXJhc2VkIGVsZW1lbnRzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiA8Y29kZT5uPC9jb2RlPikgZm9yIHNjYWxhciB0eXBlczsgbGluZWFyIGZvciBvdGhlciB0eXBlcy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Tm90ZTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBoYXMgYmVlbiBzcGVjaWFsbHkgZGVzaWduZWQgZm9yIHR5cGVzIHdoaWNoIGRvIG5vdCByZXF1aXJlIGFuIGV4cGxpY2l0IGRlc3RydWN0cnVjdGlvbgogICAgICAgICAgICAgICAgKGUuZy4gaW50ZWdlciwgZmxvYXQgb3IgYSBwb2ludGVyKS4gRm9yIHRoZXNlIHNjYWxhciB0eXBlcyBhIGNhbGwgdG8gYSBkZXN0cnVjdG9yIGlzIG5vdCByZXF1aXJlZCB3aGljaAogICAgICAgICAgICAgICAgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50IHRoZSAiZXJhc2UgZnJvbSBiZWdpbm5pbmciIG9wZXJhdGlvbiB3aXRoIGEgY29uc3RhbnQgY29tcGxleGl0eS4gRm9yCiAgICAgICAgICAgICAgICBub24tc2FjYWxhciB0eXBlcyB0aGUgY29tcGxleGl0eSBpcyBsaW5lYXIgKGhlbmNlIHRoZSBleHBsaWNpdCBkZXN0cnVjdGlvbiBpcyBuZWVkZWQpIGFuZCB0aGUKICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIGlzIGFjdHVhbGx5IGVxdWl2YWxlbnQgdG8gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiMGY5OGFlMzAzNTg0ZGVkNTM5N2YwNjdiYmZjOTExZiI+cmVyYXNlKGJlZ2luKCksIGJlZ2luKCkgKwogICAgICAgICAgICAgICAgbik8L2E+PC9jb2RlPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5NzE1NWRlNzEyZGIxNzU5ZTE2OTg0NTViNDlhMGJlMyI+ZXJhc2UoaXRlcmF0b3IpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhOTY0MTUzODk1MDlhMThiZDdkN2I1ZDhlNGRkYTliZCI+ZXJhc2UoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBpdGVyYXRvcik8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiNmQ0YWU3N2Q3NDQ1Zjg0NGUzMGU3ODU5MmYxZTA2ZiI+cmVyYXNlKGl0ZXJhdG9yKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjBmOThhZTMwMzU4NGRlZDUzOTdmMDY3YmJmYzkxMWYiPnJlcmFzZShpdGVyYXRvciwKICAgICAgICAgICAgICAgIGl0ZXJhdG9yKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTc0ODVlZTdmNThiMDEzNjMxNzAxMTRmMjEyM2E0OGQ3Ij5lcmFzZV9lbmQoc2l6ZV90eXBlKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xODI2ZjU3NzBhNDBiOGI3NTJlYjk1ODczNzg0NjRkMWUiPmNsZWFyKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE3NDg1ZWU3ZjU4YjAxMzYzMTcwMTE0ZjIxMjNhNDhkNyIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNzQ4NWVlN2Y1OGIwMTM2MzE3MDExNGYyMTIzYTQ4ZDciPjwvYT48Y29kZT48Yj52b2lkIGVyYXNlX2VuZCg8YSBocmVmPQogICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOWJhMTJjMDE0MmEyMWE3ZDk2MDg3N2MyMmZhM2VhMDAiPnNpemVfdHlwZTwvYT4gbik7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgUmVtb3ZlIGxhc3QgPGNvZGU+bjwvY29kZT4gZWxlbWVudHMgKHdpdGggY29uc3RhbnQgY29tcGxleGl0eSBmb3Igc2NhbGFyIHR5cGVzKS4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT5uICZsdDs9IDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBUaGUgPGNvZGU+bjwvY29kZT4gZWxlbWVudHMgYXQgdGhlIGVuZCBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB3aWxsIGJlIHJlbW92ZWQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPm48L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIHJlbW92ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6b3BlcmF0b3IgPSAoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLiAoRG9lcyBub3QgdGhyb3cgYW55dGhpbmcgaW4gY2FzZSBvZgogICAgICAgICAgICAgICAgc2NhbGFycy4pCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQmFzaWM7IG5vLXRocm93IGlmIHRoZSBvcGVyYXRpb24gaW4gdGhlIDxpPlRocm93czwvaT4gc2VjdGlvbiBkb2VzIG5vdCB0aHJvdyBhbnl0aGluZy4gKEkuZS4gbm8gdGhyb3cKICAgICAgICAgICAgICAgIGluIGNhc2Ugb2Ygc2NhbGFycy4pCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJbnZhbGlkYXRlcyBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIGxhc3QgPGNvZGU+bjwvY29kZT4gZXJhc2VkIGVsZW1lbnRzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiA8Y29kZT5uPC9jb2RlPikgZm9yIHNjYWxhciB0eXBlczsgbGluZWFyIGZvciBvdGhlciB0eXBlcy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Tm90ZTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBoYXMgYmVlbiBzcGVjaWFsbHkgZGVzaWduZWQgZm9yIHR5cGVzIHdoaWNoIGRvIG5vdCByZXF1aXJlIGFuIGV4cGxpY2l0IGRlc3RydWN0cnVjdGlvbgogICAgICAgICAgICAgICAgKGUuZy4gaW50ZWdlciwgZmxvYXQgb3IgYSBwb2ludGVyKS4gRm9yIHRoZXNlIHNjYWxhciB0eXBlcyBhIGNhbGwgdG8gYSBkZXN0cnVjdG9yIGlzIG5vdCByZXF1aXJlZCB3aGljaAogICAgICAgICAgICAgICAgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50IHRoZSAiZXJhc2UgZnJvbSBlbmQiIG9wZXJhdGlvbiB3aXRoIGEgY29uc3RhbnQgY29tcGxleGl0eS4gRm9yCiAgICAgICAgICAgICAgICBub24tc2FjYWxhciB0eXBlcyB0aGUgY29tcGxleGl0eSBpcyBsaW5lYXIgKGhlbmNlIHRoZSBleHBsaWNpdCBkZXN0cnVjdGlvbiBpcyBuZWVkZWQpIGFuZCB0aGUKICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIGlzIGFjdHVhbGx5IGVxdWl2YWxlbnQgdG8gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhOTY0MTUzODk1MDlhMThiZDdkN2I1ZDhlNGRkYTliZCI+ZXJhc2UoZW5kKCkgLSBuLCBlbmQoKSk8L2E+PC9jb2RlPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5NzE1NWRlNzEyZGIxNzU5ZTE2OTg0NTViNDlhMGJlMyI+ZXJhc2UoaXRlcmF0b3IpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhOTY0MTUzODk1MDlhMThiZDdkN2I1ZDhlNGRkYTliZCI+ZXJhc2UoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBpdGVyYXRvcik8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiNmQ0YWU3N2Q3NDQ1Zjg0NGUzMGU3ODU5MmYxZTA2ZiI+cmVyYXNlKGl0ZXJhdG9yKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjBmOThhZTMwMzU4NGRlZDUzOTdmMDY3YmJmYzkxMWYiPnJlcmFzZShpdGVyYXRvciwKICAgICAgICAgICAgICAgIGl0ZXJhdG9yKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWIyNWQzNzljZjY2YWNlMDI1MDM2YTQ3ZGRiMzQ0YWJkIj5lcmFzZV9iZWdpbihzaXplX3R5cGUpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE4MjZmNTc3MGE0MGI4Yjc1MmViOTU4NzM3ODQ2NGQxZSI+Y2xlYXIoKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTgyNmY1NzcwYTQwYjhiNzUyZWI5NTg3Mzc4NDY0ZDFlIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE4MjZmNTc3MGE0MGI4Yjc1MmViOTU4NzM3ODQ2NGQxZSI+PC9hPjxjb2RlPjxiPnZvaWQKICAgICAgICAgICAgY2xlYXIoKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBSZW1vdmUgYWxsIHN0b3JlZCBlbGVtZW50cyBmcm9tIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+ID09CiAgICAgICAgICAgICAgICAwPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOby10aHJvdy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gKGV4Y2VwdCBpdGVyYXRvcnMgZXF1YWwgdG8KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudCAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4pIGZvciBzY2FsYXIgdHlwZXM7IGxpbmVhciBmb3Igb3RoZXIgdHlwZXMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNjQyNTBmZmJiYmRiYzYyYjk5ZTgzMDFmYzE5NWI4MGMiPn5jaXJjdWxhcl9idWZmZXIoKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5NzE1NWRlNzEyZGIxNzU5ZTE2OTg0NTViNDlhMGJlMyI+ZXJhc2UoaXRlcmF0b3IpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhOTY0MTUzODk1MDlhMThiZDdkN2I1ZDhlNGRkYTliZCI+ZXJhc2UoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBpdGVyYXRvcik8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiNmQ0YWU3N2Q3NDQ1Zjg0NGUzMGU3ODU5MmYxZTA2ZiI+cmVyYXNlKGl0ZXJhdG9yKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjBmOThhZTMwMzU4NGRlZDUzOTdmMDY3YmJmYzkxMWYiPnJlcmFzZShpdGVyYXRvciwKICAgICAgICAgICAgICAgIGl0ZXJhdG9yKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWIyNWQzNzljZjY2YWNlMDI1MDM2YTQ3ZGRiMzQ0YWJkIj5lcmFzZV9iZWdpbihzaXplX3R5cGUpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTc0ODVlZTdmNThiMDEzNjMxNzAxMTRmMjEyM2E0OGQ3Ij5lcmFzZV9lbmQoc2l6ZV90eXBlKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgogICAgPGgyPgogICAgICA8YSBuYW1lPSJmdW5jdGlvbnMiIGlkPSJmdW5jdGlvbnMiPlN0YW5kYWxvbmUgRnVuY3Rpb25zPC9hPgogICAgPC9oMj4KICAgIDxkaXYgaWQ9InNyY2RvY19mdW5jdGlvbnMiPgogICAgICA8dGFibGUgaWQ9InRhYmxlX2Z1bmN0aW9ucyIgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMyI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0ibmFtZXNwYWNlYm9vc3RfMWQzNTg3MWU4MzgzNTliNTIxNWUxY2JiMzUzNjYzMjA3IiBuYW1lPQogICAgICAgICAgICAibmFtZXNwYWNlYm9vc3RfMWQzNTg3MWU4MzgzNTliNTIxNWUxY2JiMzUzNjYzMjA3Ij48L2E+IDxjb2RlPjxiPnRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBBbGxvYyZndDs8YnI+CiAgICAgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgY2lyY3VsYXJfYnVmZmVyJmx0O1QsQWxsb2MmZ3Q7JmFtcDsgbGhzLCBjb25zdAogICAgICAgICAgICBjaXJjdWxhcl9idWZmZXImbHQ7VCxBbGxvYyZndDsmYW1wOyByaHMpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIENvbXBhcmUgdHdvIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT5zIGVsZW1lbnQtYnktZWxlbWVudCB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1YWwuCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5saHM8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB0byBjb21wYXJlLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+cmhzPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gdG8gY29tcGFyZS4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlJldHVybnM6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+bGhzLjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+ID09CiAgICAgICAgICAgICAgICByaHMuPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4gJmFtcDsmYW1wOwogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL2VxdWFsLmh0bWwiPnN0ZDo6ZXF1YWw8L2E+KGxocy48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU4ZDFlZGUyZTg1ZjVkNDZlZGE4ZGIzZjBjNGVmZWYwIj5iZWdpbigpPC9hPiwgbGhzLjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPiwgcmhzLjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luKCk8L2E+KTwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vdGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPnMpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgaXRlcmF0b3JzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0ibmFtZXNwYWNlYm9vc3RfMTk1YjA4MjEzZjIwMWMyMDY3ZDhhY2IwMjQ3NTYzMjlkIiBuYW1lPQogICAgICAgICAgICAibmFtZXNwYWNlYm9vc3RfMTk1YjA4MjEzZjIwMWMyMDY3ZDhhY2IwMjQ3NTYzMjlkIj48L2E+IDxjb2RlPjxiPnRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBBbGxvYyZndDs8YnI+CiAgICAgICAgICAgICAgICBib29sIG9wZXJhdG9yJmx0Oyhjb25zdCBjaXJjdWxhcl9idWZmZXImbHQ7VCxBbGxvYyZndDsmYW1wOyBsaHMsIGNvbnN0CiAgICAgICAgICAgIGNpcmN1bGFyX2J1ZmZlciZsdDtULEFsbG9jJmd0OyZhbXA7IHJocyk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgQ29tcGFyZSB0d28gPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPnMgZWxlbWVudC1ieS1lbGVtZW50IHRvIGRldGVybWluZSBpZiB0aGUgbGVmdCBvbmUgaXMgbGVzc2VyIHRoYW4KICAgICAgICAgICAgdGhlIHJpZ2h0IG9uZS4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmxoczwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHRvIGNvbXBhcmUuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5yaHM8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB0byBjb21wYXJlLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9sZXhpY29ncmFwaGljYWxfY29tcGFyZS5odG1sIj5zdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlPC9hPihsaHMuPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luKCk8L2E+LAogICAgICAgICAgICAgICAgbGhzLjxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT4sIHJocy48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU4ZDFlZGUyZTg1ZjVkNDZlZGE4ZGIzZjBjNGVmZWYwIj5iZWdpbigpPC9hPiwgcmhzLjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPik8L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT5zKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIERvZXMgbm90IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9Im5hbWVzcGFjZWJvb3N0XzFmNTcxN2UyZjY1MzI1ODFhNjQ5MmZmMTgzOWIxOGY2ZCIgbmFtZT0KICAgICAgICAgICAgIm5hbWVzcGFjZWJvb3N0XzFmNTcxN2UyZjY1MzI1ODFhNjQ5MmZmMTgzOWIxOGY2ZCI+PC9hPiA8Y29kZT48Yj50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQWxsb2MmZ3Q7PGJyPgogICAgICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNpcmN1bGFyX2J1ZmZlciZsdDtULEFsbG9jJmd0OyZhbXA7IGxocywgY29uc3QKICAgICAgICAgICAgY2lyY3VsYXJfYnVmZmVyJmx0O1QsQWxsb2MmZ3Q7JmFtcDsgcmhzKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBDb21wYXJlIHR3byA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+cyBlbGVtZW50LWJ5LWVsZW1lbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIG5vbi1lcXVhbC4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmxoczwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHRvIGNvbXBhcmUuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5yaHM8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB0byBjb21wYXJlLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT4hKGxocyA9PSByaHMpPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+cykuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBEb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNuYW1lc3BhY2Vib29zdF8xZDM1ODcxZTgzODM1OWI1MjE1ZTFjYmIzNTM2NjMyMDciPm9wZXJhdG9yPT0oY29uc3QKICAgICAgICAgICAgICAgIGNpcmN1bGFyX2J1ZmZlciZsdDtULEFsbG9jJmd0OyZhbXA7LCBjb25zdCBjaXJjdWxhcl9idWZmZXImbHQ7VCxBbGxvYyZndDsmYW1wOyk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0ibmFtZXNwYWNlYm9vc3RfMWY1NzVkN2E5NzQxYzIwNDQ0MjRkZTUwYzk2NmMxMmYzIiBuYW1lPQogICAgICAgICAgICAibmFtZXNwYWNlYm9vc3RfMWY1NzVkN2E5NzQxYzIwNDQ0MjRkZTUwYzk2NmMxMmYzIj48L2E+IDxjb2RlPjxiPnRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBBbGxvYyZndDs8YnI+CiAgICAgICAgICAgICAgICBib29sIG9wZXJhdG9yJmd0Oyhjb25zdCBjaXJjdWxhcl9idWZmZXImbHQ7VCxBbGxvYyZndDsmYW1wOyBsaHMsIGNvbnN0CiAgICAgICAgICAgIGNpcmN1bGFyX2J1ZmZlciZsdDtULEFsbG9jJmd0OyZhbXA7IHJocyk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgQ29tcGFyZSB0d28gPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPnMgZWxlbWVudC1ieS1lbGVtZW50IHRvIGRldGVybWluZSBpZiB0aGUgbGVmdCBvbmUgaXMgZ3JlYXRlciB0aGFuCiAgICAgICAgICAgIHRoZSByaWdodCBvbmUuCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5saHM8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB0byBjb21wYXJlLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+cmhzPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gdG8gY29tcGFyZS4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlJldHVybnM6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+cmhzICZsdDsgbGhzPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+cykuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBEb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNuYW1lc3BhY2Vib29zdF8xOTViMDgyMTNmMjAxYzIwNjdkOGFjYjAyNDc1NjMyOWQiPm9wZXJhdG9yJmx0Oyhjb25zdAogICAgICAgICAgICAgICAgY2lyY3VsYXJfYnVmZmVyJmx0O1QsQWxsb2MmZ3Q7JmFtcDssIGNvbnN0IGNpcmN1bGFyX2J1ZmZlciZsdDtULEFsbG9jJmd0OyZhbXA7KTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJuYW1lc3BhY2Vib29zdF8xNzlhYmNiYWNkMjRiNjdmMDgxODVkYjU0YWVjODYwMGQiIG5hbWU9CiAgICAgICAgICAgICJuYW1lc3BhY2Vib29zdF8xNzlhYmNiYWNkMjRiNjdmMDgxODVkYjU0YWVjODYwMGQiPjwvYT4gPGNvZGU+PGI+dGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIEFsbG9jJmd0Ozxicj4KICAgICAgICAgICAgICAgIGJvb2wgb3BlcmF0b3ImbHQ7PShjb25zdCBjaXJjdWxhcl9idWZmZXImbHQ7VCxBbGxvYyZndDsmYW1wOyBsaHMsIGNvbnN0CiAgICAgICAgICAgIGNpcmN1bGFyX2J1ZmZlciZsdDtULEFsbG9jJmd0OyZhbXA7IHJocyk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgQ29tcGFyZSB0d28gPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPnMgZWxlbWVudC1ieS1lbGVtZW50IHRvIGRldGVybWluZSBpZiB0aGUgbGVmdCBvbmUgaXMgbGVzc2VyIG9yCiAgICAgICAgICAgIGVxdWFsIHRvIHRoZSByaWdodCBvbmUuCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5saHM8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPiB0byBjb21wYXJlLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+cmhzPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gdG8gY29tcGFyZS4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlJldHVybnM6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+IShyaHMgJmx0OyBsaHMpPC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+cykuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBEb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9IiNuYW1lc3BhY2Vib29zdF8xOTViMDgyMTNmMjAxYzIwNjdkOGFjYjAyNDc1NjMyOWQiPm9wZXJhdG9yJmx0Oyhjb25zdAogICAgICAgICAgICAgICAgY2lyY3VsYXJfYnVmZmVyJmx0O1QsQWxsb2MmZ3Q7JmFtcDssIGNvbnN0IGNpcmN1bGFyX2J1ZmZlciZsdDtULEFsbG9jJmd0OyZhbXA7KTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJuYW1lc3BhY2Vib29zdF8xMWMzMTE1MDM4MDI3MmFmNjdkZWViZWY1NzhjODBiMDUiIG5hbWU9CiAgICAgICAgICAgICJuYW1lc3BhY2Vib29zdF8xMWMzMTE1MDM4MDI3MmFmNjdkZWViZWY1NzhjODBiMDUiPjwvYT4gPGNvZGU+PGI+dGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIEFsbG9jJmd0Ozxicj4KICAgICAgICAgICAgICAgIGJvb2wgb3BlcmF0b3ImZ3Q7PShjb25zdCBjaXJjdWxhcl9idWZmZXImbHQ7VCxBbGxvYyZndDsmYW1wOyBsaHMsIGNvbnN0CiAgICAgICAgICAgIGNpcmN1bGFyX2J1ZmZlciZsdDtULEFsbG9jJmd0OyZhbXA7IHJocyk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgQ29tcGFyZSB0d28gPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPnMgZWxlbWVudC1ieS1lbGVtZW50IHRvIGRldGVybWluZSBpZiB0aGUgbGVmdCBvbmUgaXMgZ3JlYXRlciBvcgogICAgICAgICAgICBlcXVhbCB0byB0aGUgcmlnaHQgb25lLgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bGhzPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gdG8gY29tcGFyZS4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPnJoczwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHRvIGNvbXBhcmUuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPiEobGhzICZsdDsgcmhzKTwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vdGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPnMpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgaXRlcmF0b3JzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSIjbmFtZXNwYWNlYm9vc3RfMTk1YjA4MjEzZjIwMWMyMDY3ZDhhY2IwMjQ3NTYzMjlkIj5vcGVyYXRvciZsdDsoY29uc3QKICAgICAgICAgICAgICAgIGNpcmN1bGFyX2J1ZmZlciZsdDtULEFsbG9jJmd0OyZhbXA7LCBjb25zdCBjaXJjdWxhcl9idWZmZXImbHQ7VCxBbGxvYyZndDsmYW1wOyk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0ibmFtZXNwYWNlYm9vc3RfMTRhYThmNmEyYzk2NDBmM2YyMmUyNjZmMGZjYTg1Nzc3IiBuYW1lPQogICAgICAgICAgICAibmFtZXNwYWNlYm9vc3RfMTRhYThmNmEyYzk2NDBmM2YyMmUyNjZmMGZjYTg1Nzc3Ij48L2E+IDxjb2RlPjxiPnRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBBbGxvYyZndDs8YnI+CiAgICAgICAgICAgICAgICB2b2lkIHN3YXAoY2lyY3VsYXJfYnVmZmVyJmx0O1QsQWxsb2MmZ3Q7JmFtcDsgbGhzLCBjaXJjdWxhcl9idWZmZXImbHQ7VCxBbGxvYyZndDsmYW1wOwogICAgICAgICAgICByaHMpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIFN3YXAgdGhlIGNvbnRlbnRzIG9mIHR3byA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+cy4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT5saHM8L2NvZGU+IGNvbnRhaW5zIGVsZW1lbnRzIG9mIDxjb2RlPnJoczwvY29kZT4gYW5kIHZpY2UgdmVyc2EuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmxoczwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHdob3NlIGNvbnRlbnQgd2lsbCBiZSBzd2FwcGVkIHdpdGggPGNvZGU+cmhzPC9jb2RlPi4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPnJoczwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IHdob3NlIGNvbnRlbnQgd2lsbCBiZSBzd2FwcGVkIHdpdGggPGNvZGU+bGhzPC9jb2RlPi4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPnMpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBvZiBib3RoIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT5zLiAoT24gdGhlIG90aGVyIGhhbmQgdGhlIGl0ZXJhdG9ycyBzdGlsbAogICAgICAgICAgICAgICAgcG9pbnQgdG8gdGhlIHNhbWUgZWxlbWVudHMgYnV0IHdpdGhpbiBhbm90aGVyIGNvbnRhaW5lci4gSWYgeW91IHdhbnQgdG8gcmVseSBvbiB0aGlzIGZlYXR1cmUgeW91IGhhdmUKICAgICAgICAgICAgICAgIHRvIHR1cm4gdGhlIDxhIGhyZWY9IiNkZWJ1ZyI+RGVidWcgU3VwcG9ydDwvYT4gb2ZmIG90aGVyd2lzZSBhbiBhc3NlcnRpb24gd2lsbCByZXBvcnQgYW4gZXJyb3IgaWYgc3VjaAogICAgICAgICAgICAgICAgaW52YWxpZGF0ZWQgaXRlcmF0b3IgaXMgdXNlZC4pCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMjcwYWI3MDc0YzM2NTY2M2E2ZjE4ODA4MDI0ZmQ4OGIiPnN3YXAoY2lyY3VsYXJfYnVmZmVyJmx0O1QsCiAgICAgICAgICAgICAgICBBbGxvYyZndDsmYW1wOyk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgIDwvdGFibGU+CiAgICA8L2Rpdj4KICAgIDxoMj4KICAgICAgPGEgbmFtZT0ibm90ZXMiIGlkPSJub3RlcyI+Tm90ZXM8L2E+CiAgICA8L2gyPgogICAgPG9sPgogICAgICA8bGk+CiAgICAgICAgPGEgbmFtZT0ibm90ZTEiIGlkPSJub3RlMSI+PC9hPgogICAgICAgIDxwPgogICAgICAgICAgQSBnb29kIGltcGxlbWVudGF0aW9uIG9mIHNtYXJ0IHBvaW50ZXJzIGlzIGluY2x1ZGVkIGluIDxhIGhyZWY9Ii4uLy4uL3NtYXJ0X3B0ci8iPkJvb3N0PC9hPi4KICAgICAgICA8L3A+CiAgICAgIDwvbGk+CiAgICAgIDxsaT4KICAgICAgICA8YSBuYW1lPSJub3RlMiIgaWQ9Im5vdGUyIj48L2E+CiAgICAgICAgPHA+CiAgICAgICAgICBOZXZlciBjcmVhdGUgYSBjaXJjdWxhciBidWZmZXIgb2YgPGNvZGU+c3RkOjphdXRvX3B0cjwvY29kZT4uIFJlZmVyIHRvIDxhIGhyZWY9CiAgICAgICAgICAiaHR0cDovL3d3dy5hcmlzdGVpYS5jb20iPlNjb3R0IE1leWVyczwvYT4gJyBleGNlbGxlbnQgYm9vayA8ZW0+RWZmZWN0aXZlIFNUTDwvZW0+IGZvciBhIGRldGFpbGVkIGRpc2N1c3Npb24uCiAgICAgICAgICAoTWV5ZXJzIFMuLCA8aT5FZmZlY3RpdmUgU1RMOiA1MCBTcGVjaWZpYyBXYXlzIHRvIEltcHJvdmUgWW91ciBVc2Ugb2YgdGhlIFN0YW5kYXJkIFRlbXBsYXRlIExpYnJhcnk8L2k+LgogICAgICAgICAgQWRkaXNvbi1XZXNsZXksIDIwMDEuKQogICAgICAgIDwvcD4KICAgICAgPC9saT4KICAgIDwvb2w+CiAgICA8aDI+CiAgICAgIDxhIG5hbWU9InNlZSIgaWQ9InNlZSI+U2VlIGFsc288L2E+CiAgICA8L2gyPgogICAgPHA+CiAgICAgIDxjb2RlPjxhIGhyZWY9InNwYWNlX29wdGltaXplZC5odG1sIj5ib29zdDo6Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvYT4sIDxhIGhyZWY9CiAgICAgICJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvVmVjdG9yLmh0bWwiPnN0ZDo6dmVjdG9yPC9hPiwgPGEgaHJlZj0KICAgICAgImh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9MaXN0Lmh0bWwiPnN0ZDo6bGlzdDwvYT4sIDxhIGhyZWY9CiAgICAgICJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvRGVxdWUuaHRtbCI+c3RkOjpkZXF1ZTwvYT48L2NvZGU+CiAgICA8L3A+CiAgICA8aDI+CiAgICAgIDxhIG5hbWU9ImFjayIgaWQ9ImFjayI+QWNrbm93bGVkZ2VtZW50czwvYT4KICAgIDwvaDI+CiAgICA8cD4KICAgICAgVGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gaGFzIGEgc2hvcnQgaGlzdG9yeS4gSXRzIGZpcnN0IHZlcnNpb24gd2FzIGEgPGNvZGU+c3RkOjpkZXF1ZTwvY29kZT4gYWRhcHRvci4KICAgICAgVGhpcyBjb250YWluZXIgd2FzIG5vdCB2ZXJ5IGVmZmVjdGl2ZSBiZWNhdXNlIG9mIG1hbnkgcmVhbGxvY2F0aW9ucyB3aGVuIGluc2VydGluZy9yZW1vdmluZyBhbiBlbGVtZW50LiBUaG9tYXMKICAgICAgV2VuaXNoIGRpZCBhIHJldmlldyBvZiB0aGlzIHZlcnNpb24gYW5kIG1vdGl2YXRlZCBtZSB0byBjcmVhdGUgYSBjaXJjdWxhciBidWZmZXIgd2hpY2ggYWxsb2NhdGVzIG1lbW9yeSBhdCBvbmNlCiAgICAgIHdoZW4gY3JlYXRlZC4KICAgIDwvcD4KICAgIDxwPgogICAgICBUaGUgc2Vjb25kIHZlcnNpb24gYWRhcHRlZCA8Y29kZT5zdGQ6OnZlY3RvcjwvY29kZT4gYnV0IGl0IGhhcyBiZWVuIGFiYW5kb25lZCBzb29uIGJlY2F1c2Ugb2YgbGltaXRlZCBjb250cm9sCiAgICAgIG92ZXIgaXRlcmF0b3IgaW52YWxpZGF0aW9uLgogICAgPC9wPgogICAgPHA+CiAgICAgIFRoZSBjdXJyZW50IHZlcnNpb24gaXMgYSBmdWxsLWZsZWRnZWQgU1RMIGNvbXBsaWFudCBjb250YWluZXIuIFBhdmVsIFZvemVuaWxlayBkaWQgYSB0aG9yb3VnaCByZXZpZXcgb2YgdGhpcwogICAgICB2ZXJzaW9uIGFuZCBjYW1lIHdpdGggbWFueSBnb29kIGlkZWFzIGFuZCBpbXByb3ZlbWVudHMuIEFsc28sIEkgd291bGQgbGlrZSB0byB0aGFuayBIb3dhcmQgSGlubmFudCwgTmlnZWwgU3Rld2FydAogICAgICBhbmQgZXZlcnlvbmUgd2hvIHBhcnRpY2lwYXRlZCBhdCB0aGUgZm9ybWFsIHJldmlldyBmb3IgdmFsdWFibGUgY29tbWVudHMgYW5kIGlkZWFzLgogICAgPC9wPgogICAgPGgyPgogICAgICA8YSBuYW1lPSJyZWxub3RlcyIgaWQ9InJlbG5vdGVzIj5SZWxlYXNlIE5vdGVzPC9hPgogICAgPC9oMj4KICAgIDxkbD4KICAgICAgPGRkPgogICAgICAgIDxoMz4KICAgICAgICAgIEJvb3N0IDEuNDIKICAgICAgICA8L2gzPgogICAgICA8L2RkPgogICAgICA8ZGQ+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPkFkZGVkIG1ldGhvZHMgPGNvZGU+ZXJhc2VfYmVnaW4oc2l6ZV90eXBlKTwvY29kZT4gYW5kIDxjb2RlPmVyYXNlX2VuZChzaXplX3R5cGUpPC9jb2RlPiB3aXRoIGNvbnN0YW50CiAgICAgICAgICBjb21wbGV4aXR5IGZvciBzdWNoIHR5cGVzIG9mIHN0b3JlZCBlbGVtZW50cyB3aGljaCBkbyBub3QgbmVlZCBhbiBleHBsaWNpdCBkZXN0cnVjdGlvbiBlLmcuIDxjb2RlPmludDwvY29kZT4KICAgICAgICAgIG9yIDxjb2RlPmRvdWJsZTwvY29kZT4uCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPlNpbWlsYXJseSBjaGFuZ2VkIGltcGxlbWVudGF0aW9uIG9mIHRoZSA8Y29kZT5jbGVhcigpPC9jb2RlPiBtZXRob2QgYW5kIHRoZSBkZXN0cnVjdG9yIHNvIHRoZWlyCiAgICAgICAgICBjb21wbGV4aXR5IGlzIG5vdyBjb25zdGFudCBmb3Igc3VjaCB0eXBlcyBvZiBzdG9yZWQgZWxlbWVudHMgd2hpY2ggZG8gbm90IHJlcXVpcmUgYW4gZXhwbGljaXQgZGVzdHJ1Y3Rpb24KICAgICAgICAgICh0aGUgY29tcGxleGl0eSBmb3Igb3RoZXIgdHlwZXMgcmVtYWlucyBsaW5lYXIpLgogICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L2RkPgogICAgICA8ZGQ+CiAgICAgICAgPGgzPgogICAgICAgICAgQm9vc3QgMS4zNwogICAgICAgIDwvaDM+CiAgICAgIDwvZGQ+CiAgICAgIDxkZD4KICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+QWRkZWQgbmV3IG1ldGhvZHMgPGNvZGU+aXNfbGluZWFyaXplZCgpPC9jb2RlPiBhbmQgPGNvZGU+cm90YXRlKGNvbnN0X2l0ZXJhdG9yKTwvY29kZT4uCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPkZpeGVkIGJ1Z3M6PGJyPgogICAgICAgICAgICAjMTk4NyBQYXRjaCB0byBtYWtlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlci5ocHA8L2NvZGU+ICNpbmNsdWRlcyBhYnNvbHV0ZS48YnI+CiAgICAgICAgICAgICMxODUyIENvcHkgY29uc3RydWN0b3IgZG9lcyBub3QgY29weSBjYXBhY2l0eS4KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kZD4KICAgICAgPGRkPgogICAgICAgIDxoMz4KICAgICAgICAgIEJvb3N0IDEuMzYKICAgICAgICA8L2gzPgogICAgICA8L2RkPgogICAgICA8ZGQ+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPkNoYW5nZWQgYmVoYXZpb3VyIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXIoY29uc3QgYWxsb2NhdG9yX3R5cGUmYW1wOyk8L2NvZGU+IGNvbnN0cnVjdG9yLiBTaW5jZSB0aGlzCiAgICAgICAgICB2ZXJzaW9uIHRoZSBjb25zdHJ1Y3RvciBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbWVtb3J5IGFuZCBib3RoIGNhcGFjaXR5IGFuZCBzaXplIGFyZSBzZXQgdG8gemVyby4KICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8bGk+Rml4ZWQgYnVnOjxicj4KICAgICAgICAgICAgIzE5MTkgRGVmYXVsdCBjb25zdHJ1Y3RlZCBjaXJjdWxhciBidWZmZXIgdGhyb3dzIDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPi48YnI+CiAgICAgICAgICA8L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvZGQ+CiAgICAgIDxkZD4KICAgICAgICA8aDM+CiAgICAgICAgICBCb29zdCAxLjM1CiAgICAgICAgPC9oMz4KICAgICAgPC9kZD4KICAgICAgPGRkPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT5Jbml0aWFsIHJlbGVhc2UuCiAgICAgICAgICA8L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvZGQ+CiAgICA8L2RsPgogICAgPGhyIHNpemU9IjEiPgogICAgPHA+CiAgICAgIDxzbWFsbD5Db3B5cmlnaHQgqSAyMDAzLTIwMDggSmFuIEdhc3Bhcjwvc21hbGw+CiAgICA8L3A+CiAgICA8cD4KICAgICAgPHNtYWxsPlVzZSwgbW9kaWZpY2F0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLjxicj4KICAgICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSA8Y29kZT5MSUNFTlNFXzFfMC50eHQ8L2NvZGU+IG9yIGNvcHkgYXQgPGEgaHJlZj0KICAgICAgImh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPik8L3NtYWxsPgogICAgPC9wPgogIDwvYm9keT4KPC9odG1sPgo=