PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+CjxodG1sIHhtbG5zOnA9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnBvd2VycG9pbnQiIHhtbG5zOnY9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiPjxoZWFkPgogIAogIDx0aXRsZT5DTVNJUzogQ29ydGV4LU00IFNJTUQgSW5zdHJ1Y3Rpb25zPC90aXRsZT48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgogIDxtZXRhIG5hbWU9IlByb2dJZCIgY29udGVudD0iRnJvbnRQYWdlLkVkaXRvci5Eb2N1bWVudCI+CiAgPHN0eWxlPgo8IS0tCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1LZWlsIFNvZnR3YXJlIENITSBTdHlsZSBTaGVldAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmJvZHkgeyBjb2xvcjogIzAwMDAwMDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsgZm9udC1zaXplOiA3NSU7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgJ1NhbnMgU2VyaWYnIH0KYTpsaW5rIHsgY29sb3I6ICMwMDAwRkY7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIH0KYTp2aXNpdGVkIHsgY29sb3I6ICMwMDAwRkY7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIH0KYTphY3RpdmUgeyBjb2xvcjogI0ZGMDAwMDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgfQphOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIH0KaDEgeyBmb250LWZhbWlseTogVmVyZGFuYTsgZm9udC1zaXplOiAxOHB0OyBjb2xvcjogIzAwMDA4MDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IENlbnRlcjsgbWFyZ2luLXJpZ2h0OiAzIH0KaDIgeyBmb250LWZhbWlseTogVmVyZGFuYTsgZm9udC1zaXplOiAxNHB0OyBjb2xvcjogIzAwMDA4MDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGJhY2tncm91bmQtY29sb3I6ICNDQ0NDQ0M7IG1hcmdpbi10b3A6IDI0OyBtYXJnaW4tYm90dG9tOiAzOyBwYWRkaW5nOiA2IH0KaDMgeyBmb250LWZhbWlseTogVmVyZGFuYTsgZm9udC1zaXplOiAxMHB0OyBmb250LXdlaWdodDogYm9sZDsgYmFja2dyb3VuZC1jb2xvcjogI0NDQ0NDQzsgbWFyZ2luLXRvcDogMjQ7IG1hcmdpbi1ib3R0b206IDM7IHBhZGRpbmc6IDYgfQpwcmUgeyBmb250LWZhbWlseTogQ291cmllciBOZXc7IGZvbnQtc2l6ZTogMTBwdDsgYmFja2dyb3VuZC1jb2xvcjogI0NDRkZDQzsgbWFyZ2luLWxlZnQ6IDI0OyBtYXJnaW4tcmlnaHQ6IDI0IH0KdWwgeyBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTsgbWFyZ2luLXRvcDogNnB0OyBtYXJnaW4tYm90dG9tOiAwIH0Kb2wgeyBtYXJnaW4tdG9wOiA2cHQ7IG1hcmdpbi1ib3R0b206IDAgfQpsaSB7IGNsZWFyOiBib3RoOyBtYXJnaW4tYm90dG9tOiA2cHQgfQp0YWJsZSB7IGZvbnQtc2l6ZTogMTAwJTsgYm9yZGVyLXdpZHRoOiAwOyBwYWRkaW5nOiAwIH0KdGggeyBjb2xvcjogI0ZGRkZGRjsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDA4MDsgdGV4dC1hbGlnbjogbGVmdDsgdmVydGljYWwtYWxpZ246IGJvdHRvbTsgcGFkZGluZy1yaWdodDogNnB0IH0KdHIgeyB0ZXh0LWFsaWduOiBsZWZ0OyB2ZXJ0aWNhbC1hbGlnbjogdG9wIH0KdGQgeyB0ZXh0LWFsaWduOiBsZWZ0OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBwYWRkaW5nLXJpZ2h0OiA2cHQgfQouVG9vbFQgeyBmb250LXNpemU6IDhwdDsgY29sb3I6ICM4MDgwODAgfQouVGlueVQgeyBmb250LXNpemU6IDhwdDsgdGV4dC1hbGlnbjogQ2VudGVyIH0KY29kZSB7IGNvbG9yOiAjMDAwMDAwOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwOyBmb250LWZhbWlseTogJ0NvdXJpZXIgTmV3JywgQ291cmllcjsgbGluZS1oZWlnaHQ6IDEyMCU7IGZvbnQtc3R5bGU6IG5vcm1hbCB9Ci8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Ob3RlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCnAubm90ZSB7IGZvbnQtd2VpZ2h0OiBib2xkOyBjbGVhcjogYm90aDsgbWFyZ2luLWJvdHRvbTogM3B0OyBwYWRkaW5nLXRvcDogNnB0IH0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUV4cGFuZGluZy9Db250cmFjdGluZyBEaXZpc2lvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwojZXhwYW5kIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBtYXJnaW4tYm90dG9tOiAzcHQgfQppbWcuZXhwYW5kIHsgYm9yZGVyLXN0eWxlOiBub25lOyBib3JkZXItd2lkdGg6IG1lZGl1bSB9CmRpdi5leHBhbmQgeyBkaXNwbGF5OiBub25lOyBtYXJnaW4tbGVmdDogOXB0OyBtYXJnaW4tdG9wOiAwIH0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVdoZXJlIExpc3QgVGFncwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCnAud2ggeyBmb250LXdlaWdodDogYm9sZDsgY2xlYXI6IGJvdGg7IG1hcmdpbi10b3A6IDZwdDsgbWFyZ2luLWJvdHRvbTogM3B0IH0KdGFibGUud2ggeyB3aWR0aDogMTAwJSB9CnRkLndoSXRlbSB7IHdoaXRlLXNwYWNlOiBub3dyYXA7IGZvbnQtc3R5bGU6IGl0YWxpYzsgcGFkZGluZy1yaWdodDogNnB0OyBwYWRkaW5nLWJvdHRvbTogNnB0IH0KdGQud2hEZXNjIHsgcGFkZGluZy1ib3R0b206IDZwdCB9Ci8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1LZWlsIFRhYmxlIFRhZ3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwp0YWJsZS5rdCB7IHdpZHRoOiAxMDAlOyBib3JkZXI6IDFwdCBzb2xpZCAjMDAwMDAwIH0KdGgua3QgeyB3aGl0ZS1zcGFjZTogbm93cmFwOyBib3JkZXItYm90dG9tOiAxcHQgc29saWQgIzAwMDAwMDsgcGFkZGluZy1sZWZ0OiA2cHQ7IHBhZGRpbmctcmlnaHQ6IDZwdDsgcGFkZGluZy10b3A6IDRwdDsgcGFkZGluZy1ib3R0b206IDRwdCB9CnRyLmt0IHsgfQp0ZC5rdCB7IGNvbG9yOiAjMDAwMDAwOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEUwOyBib3JkZXItdG9wOiAxcHQgc29saWQgI0EwQTBBMDsgcGFkZGluZy1sZWZ0OiA2cHQ7IHBhZGRpbmctcmlnaHQ6IDZwdDsgcGFkZGluZy10b3A6IDJwdDsgcGFkZGluZy1ib3R0b206IDJwdCB9Ci8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAuc3R5bGUxIHsKCWJhY2tncm91bmQtY29sb3I6ICNFMEUwRTA7Cn0KLk8KCXtjb2xvcjojMUQzMTVCOwoJZm9udC1zaXplOjE0OSU7fQogICAgLS0+Cjwvc3R5bGU+CjwvaGVhZD4KCjxib2R5PgoKPGgxPkNNU0lTIFN1cHBvcnQgZm9yIENvcnRleC1NNCBTSU1EIEluc3RydWN0aW9uczwvaDE+Cgo8cCBhbGlnbj0iY2VudGVyIj5UaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBDb3J0ZXgtTTQgU0lNRCBpbnN0cnVjdGlvbnMgc3VwcG9ydGVkIGJ5IENNU0lTLjwvcD4KPHAgYWxpZ249ImNlbnRlciI+VmVyc2lvbjogMS4wMCAtIDI1LiBOb3ZlbWJlciAyMDEwPC9wPgoKPHAgY2xhc3M9IlRpbnlUIj5JbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUsIHRoZSBhY2NvbXBhbnkgbWFudWFscywgYW5kIHNvZnR3YXJlIGlzPGJyPgogICAgICAgICAgICAgICAgIENvcHlyaWdodCCpIEFSTSBMdGQuPGJyPkFsbCByaWdodHMgcmVzZXJ2ZWQuCjwvcD4KCjxocj4KCjxoMj5SZXZpc2lvbiBIaXN0b3J5PC9oMj4KPHVsPgoJPGxpPlJldmlzaW9uIDAuMDEgLSBKYW51YXJ5IDIwMTA6IEluaXRpYWwgdmVyc2lvbjwvbGk+Cgk8bGk+UmV2aXNpb24gMC4wMiAtIEp1bmUgMjAxMDogYWRkZWQgX19RQURELCBfX1FTVUI8L2xpPgoJPGxpPlJldmlzaW9uIDEuMDAgLSBOb3ZlbWJlciAyMDEwOiA8L2xpPgo8L3VsPgoKPGhyPgoKPGgyPkNvbnRlbnRzPC9oMj4KCjxvbD4KICA8bGkgY2xhc3M9IkxJMiI+PGEgaHJlZj0iI0Fib3V0Ij5BYm91dDwvYT48L2xpPgogIDxsaSBjbGFzcz0iTEkyIj48YSBocmVmPSIjQ000LVNJTUQtSW5zdHJ1Y3Rpb25zIj5Db3J0ZXgtTTQgU0lNRCBpbnN0cnVjdGlvbiBzdXBwb3J0PC9hPjwvbGk+CiAgPGxpIGNsYXNzPSJMSTIiPjxhIGhyZWY9IiNFeGFtcGxlcyI+RXhhbXBsZXM8L2E+PC9saT4KPC9vbD4KCgoKPHA+Jm5ic3A7PC9wPgo8aDI+PGEgbmFtZT0iQWJvdXQiPjwvYT5BYm91dDwvaDI+CjxwPgogIENNU0lTIHByb3ZpZGVzIGZvciB0aGUgQ29ydGV4LU00IGEgc2V0IG9mIGZ1bmN0aW9ucyBzdXBwb3J0aW5nIENvcnRleC1NNCBTSU1EIGluc3RydWN0aW9ucy4KPC9wPgoKPHA+Jm5ic3A7PC9wPgo8aDI+PGEgbmFtZT0iQ000LVNJTUQtSW5zdHJ1Y3Rpb25zIj48L2E+Q29ydGV4LU00IFNJTUQgaW5zdHJ1Y3Rpb24gc3VwcG9ydDwvaDI+CjxwPkNNU0lTIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGZvciBDb3J0ZXgtTTQgaW5zdHJ1Y3Rpb25zOgo8L3A+Cgo8dGFibGUgY2xhc3M9Imt0IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGggY2xhc3M9Imt0Ij5OYW1lPC90aD4KICAgICAgPHRoIGNsYXNzPSJrdCI+TW5lbW9uaWM8L3RoPgogICAgICA8dGggY2xhc3M9Imt0Ij5EZXNjcmlwdGlvbjwvdGg+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fU0FERDgiPl9fU0FERDg8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlNBREQ4PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+R0Ugc2V0dGluZyBxdWFkIDgtYml0IHNpZ25lZCBhZGRpdGlvbjwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fUUFERDgiPl9fUUFERDg8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlFBREQ4PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+USBzZXR0aW5nIHF1YWQgOC1iaXQgc2F0dXJhdGluZyBhZGRpdGlvbjwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fU0hBREQ4Ij5fX1NIQUREODwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+U0hBREQ4PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+UXVhZCA4LWJpdCBzaWduZWQgYWRkaXRpb24gd2l0aCBoYWx2ZWQgcmVzdWx0czwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fVUFERDgiPl9fVUFERDg8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlVBREQ4PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+R0Ugc2V0dGluZyBxdWFkIDgtYml0IHVuc2lnbmVkIGFkZGl0aW9uPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19VUUFERDgiPl9fVVFBREQ4PC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5VUUFERDg8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5RdWFkIDgtYml0IHVuc2lnbmVkIHNhdHVyYXRpbmcgYWRkaXRpb248L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1VIQUREOCI+X19VSEFERDg8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlVIQUREODwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlF1YWQgOC1iaXQgdW5zaWduZWQgYWRkaXRpb24gd2l0aCBoYWx2ZWQgcmVzdWx0czwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fU1NVQjgiPl9fU1NVQjg8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlNTVUI4PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+R0Ugc2V0dGluZyBxdWFkIDgtYml0IHNpZ25lZCBzdWJ0cmFjdGlvbjwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fUVNVQjgiPl9fUVNVQjg8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlFTVUI4PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+USBzZXR0aW5nIHF1YWQgOC1iaXQgc2F0dXJhdGluZyBzdWJ0cmFjdDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fU0hTVUI4Ij5fX1NIU1VCODwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+U0hTVUI4PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+UXVhZCA4LWJpdCBzaWduZWQgc3VidHJhY3Rpb24gd2l0aCBoYWx2ZWQgcmVzdWx0czwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fVVNVQjgiPl9fVVNVQjg8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlVTVUI4PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+R0Ugc2V0dGluZyBxdWFkIDgtYml0IHVuc2lnbmVkIHN1YnRyYWN0PC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19VUVNVQjgiPl9fVVFTVUI4PC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5VUVNVQjg8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5RdWFkIDgtYml0IHVuc2lnbmVkIHNhdHVyYXRpbmcgc3VidHJhY3Rpb248L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1VIU1VCOCI+X19VSFNVQjg8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlVIU1VCODwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlF1YWQgOC1iaXQgdW5zaWduZWQgc3VidHJhY3Rpb24gd2l0aCBoYWx2ZWQgcmVzdWx0czwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fU0FERDE2Ij5fX1NBREQxNjwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+U0FERDE2PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+R0Ugc2V0dGluZyBkdWFsIDE2LWJpdCBzaWduZWQgYWRkaXRpb248L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1FBREQxNiI+X19RQUREMTY8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlFBREQxNjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlEgc2V0dGluZyBkdWFsIDE2LWJpdCBzYXR1cmF0aW5nIGFkZGl0aW9uPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19TSEFERDE2Ij5fX1NIQUREMTY8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlNIQUREMTY8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5EdWFsIDE2LWJpdCBzaWduZWQgYWRkaXRpb24gd2l0aCBoYWx2ZWQgcmVzdWx0czwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fVUFERDE2Ij5fX1VBREQxNjwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+VUFERDE2PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+R0Ugc2V0dGluZyBkdWFsIDE2LWJpdCB1bnNpZ25lZCBhZGRpdGlvbjwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fVVFBREQxNiI+X19VUUFERDE2PC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5VUUFERDE2PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+RHVhbCAxNi1iaXQgdW5zaWduZWQgc2F0dXJhdGluZyBhZGRpdGlvbjwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fVUhBREQxNiI+X19VSEFERDE2PC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5VSEFERDE2PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+RHVhbCAxNi1iaXQgdW5zaWduZWQgYWRkaXRpb24gd2l0aCBoYWx2ZWQgcmVzdWx0czwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fU1NVQjE2Ij5fX1NTVUIxNjwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+U1NVQjE2PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+R0Ugc2V0dGluZyBkdWFsIDE2LWJpdCBzaWduZWQgc3VidHJhY3Rpb248L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1FTVUIxNiI+X19RU1VCMTY8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlFTVUIxNjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlEgc2V0dGluZyBkdWFsIDE2LWJpdCBzYXR1cmF0aW5nIHN1YnRyYWN0PC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19TSFNVQjE2Ij5fX1NIU1VCMTY8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlNIU1VCMTY8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5EdWFsIDE2LWJpdCBzaWduZWQgc3VidHJhY3Rpb24gd2l0aCBoYWx2ZWQgcmVzdWx0czwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fVVNVQjE2Ij5fX1VTVUIxNjwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+VVNVQjE2PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+R0Ugc2V0dGluZyBkdWFsIDE2LWJpdCB1bnNpZ25lZCBzdWJ0cmFjdDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fVVFTVUIxNiI+X19VUVNVQjE2PC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5VUVNVQjE2PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+RHVhbCAxNi1iaXQgdW5zaWduZWQgc2F0dXJhdGluZyBzdWJ0cmFjdGlvbjwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fVUhTVUIxNiI+X19VSFNVQjE2PC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5VSFNVQjE2PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+RHVhbCAxNi1iaXQgdW5zaWduZWQgc3VidHJhY3Rpb24gd2l0aCBoYWx2ZWQgcmVzdWx0czwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fU0FTWCI+X19TQVNYPC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5TQVNYPC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+R0Ugc2V0dGluZyBkdWFsIDE2LWJpdCBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gd2l0aCBleGNoYW5nZTwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fUUFTWCI+X19RQVNYPC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5RQVNYPC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+USBzZXR0aW5nIGR1YWwgMTYtYml0IGFkZCBhbmQgc3VidHJhY3Qgd2l0aCBleGNoYW5nZTwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fU0hBU1giPl9fU0hBU1g8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlNIQVNYPC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+RHVhbCAxNi1iaXQgc2lnbmVkIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiB3aXRoIGhhbHZlZCByZXN1bHRzPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19VQVNYIj5fX1VBU1g8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlVBU1g8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5HRSBzZXR0aW5nIGR1YWwgMTYtYml0IHVuc2lnbmVkIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiB3aXRoIGV4Y2hhbmdlPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19VUUFTWCI+X19VUUFTWDwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+VVFBU1g8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5EdWFsIDE2LWJpdCB1bnNpZ25lZCBzYXR1cmF0aW5nIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiB3aXRoIGV4Y2hhbmdlPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19VSEFTWCI+X19VSEFTWDwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+VUhBU1g8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5EdWFsIDE2LWJpdCB1bnNpZ25lZCBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gd2l0aCBoYWx2ZWQgcmVzdWx0cyBhbmQgZXhjaGFuZ2U8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1NTQVgiPl9fU1NBWDwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+U1NBWDwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPkdFIHNldHRpbmcgZHVhbCAxNi1iaXQgc2lnbmVkIHN1YnRyYWN0aW9uIGFuZCBhZGRpdGlvbiB3aXRoIGV4Y2hhbmdlPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19RU0FYIj5fX1FTQVg8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlFTQVg8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5RIHNldHRpbmcgZHVhbCAxNi1iaXQgc3VidHJhY3QgYW5kIGFkZCB3aXRoIGV4Y2hhbmdlPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19TSFNBWCI+X19TSFNBWDwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+U0hTQVg8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5EdWFsIDE2LWJpdCBzaWduZWQgc3VidHJhY3Rpb24gYW5kIGFkZGl0aW9uIHdpdGggaGFsdmVkIHJlc3VsdHM8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1VTQVgiPl9fVVNBWDwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+VVNBWDwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPkdFIHNldHRpbmcgZHVhbCAxNi1iaXQgdW5zaWduZWQgc3VidHJhY3QgYW5kIGFkZCB3aXRoIGV4Y2hhbmdlPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19VUVNBWCI+X19VUVNBWDwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+VVFTQVg8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5EdWFsIDE2LWJpdCB1bnNpZ25lZCBzYXR1cmF0aW5nIHN1YnRyYWN0aW9uIGFuZCBhZGRpdGlvbiB3aXRoIGV4Y2hhbmdlPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19VSFNBWCI+X19VSFNBWDwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+VUhTQVg8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5EdWFsIDE2LWJpdCB1bnNpZ25lZCBzdWJ0cmFjdGlvbiBhbmQgYWRkaXRpb24gd2l0aCBoYWx2ZWQgcmVzdWx0cyBhbmQgZXhjaGFuZ2U8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1VTQUQ4Ij5fX1VTQUQ4PC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5VU0FEODwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlVuc2lnbmVkIHN1bSBvZiBxdWFkIDgtYml0IHVuc2lnbmVkIGFic29sdXRlIGRpZmZlcmVuY2U8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1VTQURBOCI+X19VU0FEQTg8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlVTQURBODwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlVuc2lnbmVkIHN1bSBvZiBxdWFkIDgtYml0IHVuc2lnbmVkIGFic29sdXRlIGRpZmZlcmVuY2Ugd2l0aCAzMi1iaXQgYWNjdW11bGF0ZTwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fU1NBVDE2Ij5fX1NTQVQxNjwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+U1NBVDE2PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+USBzZXR0aW5nIGR1YWwgMTYtYml0IHNhdHVyYXRlPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19VU0FUMTYiPl9fVVNBVDE2PC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5VU0FUMTY8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5RIHNldHRpbmcgZHVhbCAxNi1iaXQgdW5zaWduZWQgc2F0dXJhdGU8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1VYVEIxNiI+X19VWFRCMTY8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlVYVEIxNjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPkR1YWwgZXh0cmFjdCA4LWJpdHMgYW5kIHplcm8tZXh0ZW5kIHRvIDE2LWJpdHM8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1VYVEFCMTYiPl9fVVhUQUIxNjwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+VVhUQUIxNjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPkV4dHJhY3RlZCAxNi1iaXQgdG8gMzItYml0IHVuc2lnbmVkIGFkZGl0aW9uPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19TWFRCMTYiPl9fU1hUQjE2PC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5TWFRCMTY8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5EdWFsIGV4dHJhY3QgOC1iaXRzIGFuZCBzaWduIGV4dGVuZCBlYWNoIHRvIDE2LWJpdHM8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1NYVEFCMTYiPl9fU1hUQUIxNjwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+U1hUQUIxNjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPkR1YWwgZXh0cmFjdGVkIDgtYml0IHRvIDE2LWJpdCBzaWduZWQgYWRkaXRpb248L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1NNVUFEIj5fX1NNVUFEPC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5TTVVBRDwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlEgc2V0dGluZyBzdW0gb2YgZHVhbCAxNi1iaXQgc2lnbmVkIG11bHRpcGx5PC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19TTVVBRFgiPl9fU01VQURYPC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5TTVVBRFg8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5RIHNldHRpbmcgc3VtIG9mIGR1YWwgMTYtYml0IHNpZ25lZCBtdWx0aXBseSB3aXRoIGV4Y2hhbmdlPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19TTUxBRCI+X19TTUxBRDwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+U01MQUQ8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5RIHNldHRpbmcgZHVhbCAxNi1iaXQgc2lnbmVkIG11bHRpcGx5IHdpdGggc2luZ2xlIDMyLWJpdCBhY2N1bXVsYXRvcjwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fU01MQURYIj5fX1NNTEFEWDwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+U01MQURYPC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+USBzZXR0aW5nIHByZS1leGNoYW5nZWQgZHVhbCAxNi1iaXQgc2lnbmVkIG11bHRpcGx5IHdpdGggc2luZ2xlIDMyLWJpdCBhY2N1bXVsYXRvcjwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fU01MQUxEIj5fX1NNTEFMRDwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+U01MQUxEPC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+RHVhbCAxNi1iaXQgc2lnbmVkIG11bHRpcGx5IHdpdGggc2luZ2xlIDY0LWJpdCBhY2N1bXVsYXRvcjwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fU01MQUxEWCI+X19TTUxBTERYPC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5TTUxBTERYPC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+RHVhbCAxNi1iaXQgc2lnbmVkIG11bHRpcGx5IHdpdGggZXhjaGFuZ2Ugd2l0aCBzaW5nbGUgNjQtYml0IGFjY3VtdWxhdG9yPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19TTVVTRCI+X19TTVVTRDwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+U01VU0Q8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5EdWFsIDE2LWJpdCBzaWduZWQgbXVsdGlwbHkgcmV0dXJuaW5nIGRpZmZlcmVuY2U8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1NNVVNEWCI+X19TTVVTRFg8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlNNVVNEWDwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPkR1YWwgMTYtYml0IHNpZ25lZCBtdWx0aXBseSB3aXRoIGV4Y2hhbmdlIHJldHVybmluZyBkaWZmZXJlbmNlPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19TTUxTRCI+X19TTUxTRDwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+U01MU0Q8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5RIHNldHRpbmcgZHVhbCAxNi1iaXQgc2lnbmVkIG11bHRpcGx5IHN1YnRyYWN0IHdpdGggMzItYml0IGFjY3VtdWxhdGU8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1NNTFNEWCI+X19TTUxTRFg8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlNNTFNEWDwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlEgc2V0dGluZyBkdWFsIDE2LWJpdCBzaWduZWQgbXVsdGlwbHkgd2l0aCBleGNoYW5nZSBzdWJ0cmFjdCB3aXRoIDMyLWJpdCBhY2N1bXVsYXRlPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19TTUxTTEQiPl9fU01MU0xEPC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5TTUxTTEQ8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5RIHNldHRpbmcgZHVhbCAxNi1iaXQgc2lnbmVkIG11bHRpcGx5IHN1YnRyYWN0IHdpdGggNjQtYml0IGFjY3VtdWxhdGU8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNfX1NNTFNMRFgiPl9fU01MU0xEWDwvYT48L2I+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+U01MU0xEWDwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlEgc2V0dGluZyBkdWFsIDE2LWJpdCBzaWduZWQgbXVsdGlwbHkgd2l0aCBleGNoYW5nZSBzdWJ0cmFjdCB3aXRoIDY0LWJpdCBhY2N1bXVsYXRlPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19TRUwiPl9fU0VMPC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5TRUw8L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5TZWxlY3QgYnl0ZXMgYmFzZWQgb24gR0UgYml0czwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkIGNsYXNzPSJrdCI+PGI+PGEgaHJlZj0iI19fUUFERCI+X19RQUREPC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5RQUREPC90ZD4KICAgICAgPHRkIGNsYXNzPSJrdCI+USBzZXR0aW5nIHNhdHVyYXRpbmcgYWRkPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjX19RU1VCIj5fX1FTVUI8L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlFTVUIvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlEgc2V0dGluZyBzYXR1cmF0aW5nIHN1YnRyYWN0PC90ZD4KICAgIDwvdHI+CgogICAgPC90Ym9keT4KPC90YWJsZT4KCjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIC0tPgo8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAtLT4KCjxoMz48YSBuYW1lPSJfX1NBREQ4Ij48L2E+RnVuY3Rpb24gX19TQUREODwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19TQUREOCh1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSBmb3VyIDgtYml0IHNpZ25lZCBpbnRlZ2VyIGFkZGl0aW9ucy48YnI+CiAgICAgICAgICBUaGUgR0UgYml0cyBpbiB0aGUgQVBTUiBhcmUgc2V0IGFjY29yZGluZyB0byB0aGUgcmVzdWx0cyBvZiB0aGUgYWRkaXRpb25zLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCBmb3VyIDgtYml0IHN1bW1hbmRzLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCBmb3VyIDgtYml0IHN1bW1hbmRzLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBhZGRpdGlvbiBvZiB0aGUgZmlyc3QgYnl0ZXMgZnJvbSBlYWNoIG9wZXJhbmQsIGluIHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBhZGRpdGlvbiBvZiB0aGUgc2Vjb25kIGJ5dGVzIG9mIGVhY2ggb3BlcmFuZCwgaW4gdGhlIHNlY29uZCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBhZGRpdGlvbiBvZiB0aGUgdGhpcmQgYnl0ZXMgb2YgZWFjaCBvcGVyYW5kLCBpbiB0aGUgdGhpcmQgYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgYWRkaXRpb24gb2YgdGhlIGZvdXJ0aCBieXRlcyBvZiBlYWNoIG9wZXJhbmQsIGluIHRoZSBmb3VydGggYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgICAgPHA+RWFjaCBiaXQgaW4gQVBTUi5HRSBpcyBzZXQgb3IgY2xlYXJlZCBmb3IgZWFjaCBieXRlIGluIHRoZSByZXR1cm4gdmFsdWUsIGRlcGVuZGluZyBvbiAKICAgICAgICAgICAgIHRoZSByZXN1bHRzIG9mIHRoZSBvcGVyYXRpb24uPGJyPgogICAgICAgICAgICAgSWYgPGk+cmVzPC9pPiBpcyB0aGUgcmV0dXJuIHZhbHVlLCB0aGVuOgogICAgICAgICAgPC9wPgogICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT5pZiByZXNbNzowXSAmZ2U7IDAgdGhlbiBBUFNSLkdFWzBdID0gMSBlbHNlIDA8L2xpPgogICAgICAgICAgICA8bGk+aWYgcmVzWzE1OjhdICZnZTsgMCB0aGVuIEFQU1IuR0VbMV0gPSAxIGVsc2UgMDwvbGk+CiAgICAgICAgICAgIDxsaT5pZiByZXNbMjM6MTZdICZnZTsgMCB0aGVuIEFQU1IuR0VbMl0gPSAxIGVsc2UgMDwvbGk+CiAgICAgICAgICAgIDxsaT5pZiByZXNbMzE6MjRdICZnZTsgMCB0aGVuIEFQU1IuR0VbM10gPSAxIGVsc2UgMDwvbGk+CiAgICAgICAgIDwvdWw+ICAgICAgCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzc6MF0gICA9IHZhbDFbNzowXSAgICsgdmFsMls3OjBdCnJlc1sxNTo4XSAgPSB2YWwxWzE1OjhdICArIHZhbDJbMTU6OF0KcmVzWzIzOjE2XSA9IHZhbDFbMjM6MTZdICsgdmFsMlsyMzoxNl0KcmVzWzMxOjI0XSA9IHZhbDFbMzE6MjRdICsgdmFsMlszMToyNF08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1FBREQ4Ij48L2E+RnVuY3Rpb24gX19RQUREODwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19RQUREOCh1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSBmb3VyIDgtYml0IGludGVnZXIgYWRkaXRpb25zLCBzYXR1cmF0aW5nIHRoZSByZXN1bHRzIHRvIAogICAgICAgICAgdGhlIDgtYml0IHNpZ25lZCBpbnRlZ2VyIHJhbmdlIC0yPHN1cD43PC9zdXA+ICZsZTsgeCAmbGU7IDI8c3VwPjc8L3N1cD4gLSAxLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCBmb3VyIDgtYml0IHN1bW1hbmRzLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCBmb3VyIDgtYml0IHN1bW1hbmRzLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBzYXR1cmF0ZWQgYWRkaXRpb24gb2YgdGhlIGZpcnN0IGJ5dGUgb2YgZWFjaCBvcGVyYW5kIGluIHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBzYXR1cmF0ZWQgYWRkaXRpb24gb2YgdGhlIHNlY29uZCBieXRlIG9mIGVhY2ggb3BlcmFuZCBpbiB0aGUgc2Vjb25kIGJ5dGUgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIHNhdHVyYXRlZCBhZGRpdGlvbiBvZiB0aGUgdGhpcmQgYnl0ZSBvZiBlYWNoIG9wZXJhbmQgaW4gdGhlIHRoaXJkIGJ5dGUgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIHNhdHVyYXRlZCBhZGRpdGlvbiBvZiB0aGUgZm91cnRoIGJ5dGUgb2YgZWFjaCBvcGVyYW5kIGluIHRoZSBmb3VydGggYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgICAgPHA+VGhlIHJldHVybmVkIHJlc3VsdHMgYXJlIHNhdHVyYXRlZCB0byB0aGUgMTYtYml0IHNpZ25lZCBpbnRlZ2VyIHJhbmdlIC0yPHN1cD43PC9zdXA+ICZsZTsgeCAmbGU7IDI8c3VwPjc8L3N1cD4gLSAxLgogICAgICAgICAgPC9wPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnJlc1s3OjBdICAgPSB2YWwxWzc6MF0gICArIHZhbDJbNzowXQpyZXNbMTU6OF0gID0gdmFsMVsxNTo4XSAgKyB2YWwyWzE1OjhdCnJlc1syMzoxNl0gPSB2YWwxWzIzOjE2XSArIHZhbDJbMjM6MTZdCnJlc1szMToyNF0gPSB2YWwxWzMxOjI0XSArIHZhbDJbMzE6MjRdPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19TSEFERDgiPjwvYT5GdW5jdGlvbiBfX1NIQUREODwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19TSEFERDgodWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMik7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIHBlcmZvcm0gZm91ciBzaWduZWQgOC1iaXQgaW50ZWdlciBhZGRpdGlvbnMsIGhhbHZpbmcgdGhlIHJlc3VsdHMuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IGZvdXIgOC1iaXQgc3VtbWFuZHMuPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIGZvdXIgOC1iaXQgc3VtbWFuZHMuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJuczo8L3A+CiAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+dGhlIGhhbHZlZCBhZGRpdGlvbiBvZiB0aGUgZmlyc3QgYnl0ZXMgZnJvbSBlYWNoIG9wZXJhbmQsIGluIHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgYWRkaXRpb24gb2YgdGhlIHNlY29uZCBieXRlcyBmcm9tIGVhY2ggb3BlcmFuZCwgaW4gdGhlIHNlY29uZCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgYWRkaXRpb24gZm8gdGhlIHRoaXJkIGJ5dGVzIGZyb20gZWFjaCBvcGVyYW5kLCBpbiB0aGUgdGhpcmQgYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgaGFsdmVkIGFkZGl0aW9uIG9mIHRoZSBmb3VydGggYnl0ZXMgZnJvbSBlYWNoIG9wZXJhbmQsIGluIHRoZSBmb3VydGggYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnJlc1s3OjBdICAgPSAodmFsMVs3OjBdICAgKyB2YWwyWzc6MF0pICAgJmd0OyZndDsgMQpyZXNbMTU6OF0gID0gKHZhbDFbMTU6OF0gICsgdmFsMlsxNTo4XSkgICZndDsmZ3Q7IDEKcmVzWzIzOjE2XSA9ICh2YWwxWzIzOjE2XSArIHZhbDJbMjM6MTZdKSAmZ3Q7Jmd0OyAxCnJlc1szMToyNF0gPSAodmFsMVszMToyNF0gKyB2YWwyWzMxOjI0XSkgJmd0OyZndDsgMTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fVUFERDgiPjwvYT5GdW5jdGlvbiBfX1VBREQ4PC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1VBREQ4KHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBwZXJmb3JtIGZvdXIgdW5zaWduZWQgOC1iaXQgaW50ZWdlciBhZGRpdGlvbnMuPGJyPgogICAgICAgICAgVGhlIEdFIGJpdHMgaW4gdGhlIEFQU1IgYXJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdHMuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IGZvdXIgOC1iaXQgc3VtbWFuZHMgZm9yIGVhY2ggYWRkaXRpb24uPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIGZvdXIgOC1iaXQgc3VtbWFuZHMgZm9yIGVhY2ggYWRkaXRpb24uPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJuczo8L3A+CiAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+dGhlIGFkZGl0aW9uIG9mIHRoZSBmaXJzdCBieXRlcyBpbiBlYWNoIG9wZXJhbmQsIGluIHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBhZGRpdGlvbiBvZiB0aGUgc2Vjb25kIGJ5dGVzIGluIGVhY2ggb3BlcmFuZCwgaW4gdGhlIHNlY29uZCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBhZGRpdGlvbiBvZiB0aGUgdGhpcmQgYnl0ZXMgaW4gZWFjaCBvcGVyYW5kLCBpbiB0aGUgdGhpcmQgYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgYWRkaXRpb24gb2YgdGhlIGZvdXJ0aCBieXRlcyBpbiBlYWNoIG9wZXJhbmQsIGluIHRoZSBmb3VydGggYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgICAgPHA+RWFjaCBiaXQgaW4gQVBTUi5HRSBpcyBzZXQgb3IgY2xlYXJlZCBmb3IgZWFjaCBieXRlIGluIHRoZSByZXR1cm4gdmFsdWUsIGRlcGVuZGluZyBvbiAKICAgICAgICAgICAgIHRoZSByZXN1bHRzIG9mIHRoZSBvcGVyYXRpb24uPGJyPgogICAgICAgICAgICAgSWYgPGk+cmVzPC9pPiBpcyB0aGUgcmV0dXJuIHZhbHVlLCB0aGVuOgogICAgICAgICAgPC9wPgogICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT5pZiByZXNbNzowXSAmZ2U7IDB4MTAwIHRoZW4gQVBTUi5HRVswXSA9IDEgZWxzZSAwPC9saT4KICAgICAgICAgICAgPGxpPmlmIHJlc1sxNTo4XSAmZ2U7IDB4MTAwIHRoZW4gQVBTUi5HRVsxXSA9IDEgZWxzZSAwPC9saT4KICAgICAgICAgICAgPGxpPmlmIHJlc1syMzoxNl0gJmdlOyAweDEwMCB0aGVuIEFQU1IuR0VbMl0gPSAxIGVsc2UgMDwvbGk+CiAgICAgICAgICAgIDxsaT5pZiByZXNbMzE6MjRdICZnZTsgMHgxMDAgdGhlbiBBUFNSLkdFWzNdID0gMSBlbHNlIDA8L2xpPgogICAgICAgICA8L3VsPiAgICAgIAogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnJlc1s3OjBdICAgPSB2YWwxWzc6MF0gICArIHZhbDJbNzowXQpyZXNbMTU6OF0gID0gdmFsMVsxNTo4XSAgKyB2YWwyWzE1OjhdCnJlc1syMzoxNl0gPSB2YWwxWzIzOjE2XSArIHZhbDJbMjM6MTZdCnJlc1szMToyNF0gPSB2YWwxWzMxOjI0XSArIHZhbDJbMzE6MjRdPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19VUUFERDgiPjwvYT5GdW5jdGlvbiBfX1VRQUREODwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19VUUFERDgodWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMik7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIHBlcmZvcm0gZm91ciB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyIGFkZGl0aW9ucywgc2F0dXJhdGluZyB0aGUgCiAgICAgICAgICByZXN1bHRzIHRvIHRoZSA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHJhbmdlIDAgJmxlOyB4ICZsZTsgMjxzdXA+ODwvc3VwPiAtIDEuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IGZvdXIgOC1iaXQgc3VtbWFuZHMuPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIGZvdXIgOC1iaXQgc3VtbWFuZHMuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJuczo8L3A+CiAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+dGhlIGFkZGl0aW9uIG9mIHRoZSBmaXJzdCBieXRlcyBpbiBlYWNoIG9wZXJhbmQsIGluIHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBhZGRpdGlvbiBvZiB0aGUgc2Vjb25kIGJ5dGVzIGluIGVhY2ggb3BlcmFuZCwgaW4gdGhlIHNlY29uZCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBhZGRpdGlvbiBvZiB0aGUgdGhpcmQgYnl0ZXMgaW4gZWFjaCBvcGVyYW5kLCBpbiB0aGUgdGhpcmQgYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgYWRkaXRpb24gb2YgdGhlIGZvdXJ0aCBieXRlcyBpbiBlYWNoIG9wZXJhbmQsIGluIHRoZSBmb3VydGggYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgICAgPHA+VGhlIHJlc3VsdHMgYXJlIHNhdHVyYXRlZCB0byB0aGUgOC1iaXQgdW5zaWduZWQgaW50ZWdlciByYW5nZSAwICZsZTsgeCAmbGU7IDI8c3VwPjg8L3N1cD4gLSAxLgogICAgICAgICAgPC9wPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnJlc1s3OjBdICAgPSB2YWwxWzc6MF0gICArIHZhbDJbNzowXQpyZXNbMTU6OF0gID0gdmFsMVsxNTo4XSAgKyB2YWwyWzE1OjhdCnJlc1syMzoxNl0gPSB2YWwxWzIzOjE2XSArIHZhbDJbMjM6MTZdCnJlc1szMToyNF0gPSB2YWwxWzMxOjI0XSArIHZhbDJbMzE6MjRdPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19VSEFERDgiPjwvYT5GdW5jdGlvbiBfX1VIQUREODwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19VSEFERDgodWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMik7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIHBlcmZvcm0gZm91ciB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyIGFkZGl0aW9ucywgaGFsdmluZyB0aGUgcmVzdWx0cy4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UGFyYW1ldGVyPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTpub25lOyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgIDxsaT48Yj52YWwxPC9iPjogZmlyc3QgZm91ciA4LWJpdCBzdW1tYW5kcy48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgZm91ciA4LWJpdCBzdW1tYW5kcy48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zOjwvcD4KICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT50aGUgaGFsdmVkIGFkZGl0aW9uIG9mIHRoZSBmaXJzdCBieXRlcyBpbiBlYWNoIG9wZXJhbmQsIGluIHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgYWRkaXRpb24gb2YgdGhlIHNlY29uZCBieXRlcyBpbiBlYWNoIG9wZXJhbmQsIGluIHRoZSBzZWNvbmQgYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgaGFsdmVkIGFkZGl0aW9uIG9mIHRoZSB0aGlyZCBieXRlcyBpbiBlYWNoIG9wZXJhbmQsIGluIHRoZSB0aGlyZCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgYWRkaXRpb24gb2YgdGhlIGZvdXJ0aCBieXRlcyBpbiBlYWNoIG9wZXJhbmQsIGluIHRoZSBmb3VydGggYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnJlc1s3OjBdICAgPSAodmFsMVs3OjBdICAgKyB2YWwyWzc6MF0pICAgJmd0OyZndDsgMQpyZXNbMTU6OF0gID0gKHZhbDFbMTU6OF0gICsgdmFsMlsxNTo4XSkgICZndDsmZ3Q7IDEKcmVzWzIzOjE2XSA9ICh2YWwxWzIzOjE2XSArIHZhbDJbMjM6MTZdKSAmZ3Q7Jmd0OyAxCnJlc1szMToyNF0gPSAodmFsMVszMToyNF0gKyB2YWwyWzMxOjI0XSkgJmd0OyZndDsgMTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fU1NVQjgiPjwvYT5GdW5jdGlvbiBfX1NTVUI4PC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1NTVUI4KHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBwZXJmb3JtIGZvdXIgOC1iaXQgc2lnbmVkIGludGVnZXIgc3VidHJhY3Rpb25zLjxicj4KICAgICAgICAgIFRoZSBHRSBiaXRzIGluIHRoZSBBUFNSIGFyZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSByZXN1bHRzLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCBmb3VyIDgtYml0IG9wZXJhbmRzIG9mIGVhY2ggc3VidHJhY3Rpb24uPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIGZvdXIgOC1iaXQgb3BlcmFuZHMgb2YgZWFjaCBzdWJ0cmFjdGlvbi48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zOjwvcD4KICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT50aGUgc3VidHJhY3Rpb24gb2YgdGhlIGZpcnN0IGJ5dGUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGZpcnN0IGJ5dGUgaW4gdGhlIAogICAgICAgICAgICAgICAgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGZpcnN0IGJ5dGVzIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgc2Vjb25kIGJ5dGUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIHNlY29uZCBieXRlIGluIAogICAgICAgICAgICAgICAgdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBzZWNvbmQgYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgc3VidHJhY3Rpb24gb2YgdGhlIHRoaXJkIGJ5dGUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIHRoaXJkIGJ5dGUgaW4gdGhlIAogICAgICAgICAgICAgICAgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIHRoaXJkIGJ5dGUgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIHN1YnRyYWN0aW9uIG9mIHRoZSBmb3VydGggYnl0ZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgZnJvbSB0aGUgZm91cnRoIGJ5dGUgaW4gCiAgICAgICAgICAgICAgICB0aGUgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGZvdXJ0aCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgICA8cD5FYWNoIGJpdCBpbiBBUFNSLkdFIGlzIHNldCBvciBjbGVhcmVkIGZvciBlYWNoIGJ5dGUgaW4gdGhlIHJldHVybiB2YWx1ZSwgZGVwZW5kaW5nIG9uIAogICAgICAgICAgICAgdGhlIHJlc3VsdHMgb2YgdGhlIG9wZXJhdGlvbi4gSWYgPGk+cmVzPC9pPiBpcyB0aGUgcmV0dXJuIHZhbHVlLCB0aGVuOgogICAgICAgICAgPC9wPgogICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT5pZiByZXNbODowXSAmZ2U7IDAgdGhlbiBBUFNSLkdFWzBdID0gMSBlbHNlIDA8L2xpPgogICAgICAgICAgICA8bGk+aWYgcmVzWzE1OjhdICZnZTsgMCB0aGVuIEFQU1IuR0VbMV0gPSAxIGVsc2UgMDwvbGk+CiAgICAgICAgICAgIDxsaT5pZiByZXNbMjM6MTZdICZnZTsgMCB0aGVuIEFQU1IuR0VbMl0gPSAxIGVsc2UgMDwvbGk+CiAgICAgICAgICAgIDxsaT5pZiByZXNbMzE6MjRdICZnZTsgMCB0aGVuIEFQU1IuR0VbM10gPSAxIGVsc2UgMDwvbGk+CiAgICAgICAgIDwvdWw+ICAgICAgCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzc6MF0gICA9IHZhbDFbNzowXSAgIC0gdmFsMls3OjBdCnJlc1sxNTo4XSAgPSB2YWwxWzE1OjhdICAtIHZhbDJbMTU6OF0KcmVzWzIzOjE2XSA9IHZhbDFbMjM6MTZdIC0gdmFsMlsyMzoxNl0KcmVzWzMxOjI0XSA9IHZhbDFbMzE6MjRdIC0gdmFsMlszMToyNF08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1FTVUI4Ij48L2E+RnVuY3Rpb24gX19RU1VCODwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19RQUREOCh1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSBmb3VyIDgtYml0IGludGVnZXIgc3VidHJhY3Rpb25zLCBzYXR1cmF0aW5nIHRoZSByZXN1bHRzIAogICAgICAgICAgdG8gdGhlIDgtYml0IHNpZ25lZCBpbnRlZ2VyIHJhbmdlIC0yPHN1cD43PC9zdXA+ICZsZTsgeCAmbGU7IDI8c3VwPjc8L3N1cD4gLSAxLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCBmb3VyIDgtYml0IG9wZXJhbmRzLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCBmb3VyIDgtYml0IG9wZXJhbmRzLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgZnJvbSB0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgCiAgICAgICAgICAgICAgICBmaXJzdCBvcGVyYW5kLCBpbiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgc3VidHJhY3Rpb24gb2YgdGhlIHNlY29uZCBieXRlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBzZWNvbmQgYnl0ZSBpbiAKICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBvcGVyYW5kLCBpbiB0aGUgc2Vjb25kIGJ5dGUgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIHN1YnRyYWN0aW9uIG9mIHRoZSB0aGlyZCBieXRlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSB0aGlyZCBieXRlIGluIHRoZSAKICAgICAgICAgICAgICAgIGZpcnN0IG9wZXJhbmQsIGluIHRoZSB0aGlyZCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgZm91cnRoIGJ5dGUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGZvdXJ0aCBieXRlIGluIAogICAgICAgICAgICAgICAgdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBmb3VydGggYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgICAgPHA+VGhlIHJldHVybmVkIHJlc3VsdHMgYXJlIHNhdHVyYXRlZCB0byB0aGUgOC1iaXQgc2lnbmVkIGludGVnZXIgcmFuZ2UgLTI8c3VwPjc8L3N1cD4gJmxlOyB4ICZsZTsgMjxzdXA+Nzwvc3VwPiAtIDEuCiAgICAgICAgICA8L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzc6MF0gICA9IHZhbDFbNzowXSAgIC0gdmFsMls3OjBdCnJlc1sxNTo4XSAgPSB2YWwxWzE1OjhdICAtIHZhbDJbMTU6OF0KcmVzWzIzOjE2XSA9IHZhbDFbMjM6MTZdIC0gdmFsMlsyMzoxNl0KcmVzWzMxOjI0XSA9IHZhbDFbMzE6MjRdIC0gdmFsMlszMToyNF08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1NIU1VCOCI+PC9hPkZ1bmN0aW9uIF9fU0hTVUI4PC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1NIU1VCOCh1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSBmb3VyIHNpZ25lZCA4LWJpdCBpbnRlZ2VyIHN1YnRyYWN0aW9ucywgaGFsdmluZyB0aGUgCiAgICAgICAgICByZXN1bHRzLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCBmb3VyIDgtYml0IG9wZXJhbmRzLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCBmb3VyIDgtYml0IG9wZXJhbmRzLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgc3VidHJhY3Rpb24gb2YgdGhlIGZpcnN0IGJ5dGUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGZpcnN0IGJ5dGUgCiAgICAgICAgICAgICAgICBpbiB0aGUgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIGhhbHZlZCBzdWJ0cmFjdGlvbiBvZiB0aGUgc2Vjb25kIGJ5dGUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIHNlY29uZCAKICAgICAgICAgICAgICAgIGJ5dGUgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBzZWNvbmQgYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgaGFsdmVkIHN1YnRyYWN0aW9uIG9mIHRoZSB0aGlyZCBieXRlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSB0aGlyZCBieXRlIAogICAgICAgICAgICAgICAgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSB0aGlyZCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgc3VidHJhY3Rpb24gb2YgdGhlIGZvdXJ0aCBieXRlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBmb3VydGggCiAgICAgICAgICAgICAgICBieXRlIGluIHRoZSBmaXJzdCBvcGVyYW5kLCBpbiB0aGUgZm91cnRoIGJ5dGUgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpyZXNbNzowXSAgID0gKHZhbDFbNzowXSAgIC0gdmFsMls3OjBdKSAgJmd0OyZndDsgMQpyZXNbMTU6OF0gID0gKHZhbDFbMTU6OF0gIC0gdmFsMlsxNTo4XSkgJmd0OyZndDsgMQpyZXNbMjM6MTZdID0gKHZhbDFbMjM6MTZdIC0gdmFsMlsyMzoxNl0gJmd0OyZndDsgMQpyZXNbMzE6MjRdID0gKHZhbDFbMzE6MjRdIC0gdmFsMlszMToyNF0gJmd0OyZndDsgMTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fVVNVQjgiPjwvYT5GdW5jdGlvbiBfX1VTVUI4PC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1VTVUI4KHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBJdCBlbmFibGVzIHlvdSB0byBwZXJmb3JtIGZvdXIgOC1iaXQgdW5zaWduZWQgaW50ZWdlciBzdWJ0cmFjdGlvbnMuPGJyPgogICAgICAgICAgVGhlIEdFIGJpdHMgaW4gdGhlIEFQU1IgYXJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdHMuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IGZvdXIgOC1iaXQgb3BlcmFuZHMuPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIGZvdXIgOC1iaXQgb3BlcmFuZHMuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJuczo8L3A+CiAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+dGhlIHN1YnRyYWN0aW9uIG9mIHRoZSBmaXJzdCBieXRlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBmaXJzdCBieXRlIGluIHRoZSAKICAgICAgICAgICAgICAgIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgc2Vjb25kIGJ5dGUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIHNlY29uZCBieXRlIGluIAogICAgICAgICAgICAgICAgdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBzZWNvbmQgYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgc3VidHJhY3Rpb24gb2YgdGhlIHRoaXJkIGJ5dGUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIHRoaXJkIGJ5dGUgaW4gdGhlIAogICAgICAgICAgICAgICAgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIHRoaXJkIGJ5dGUgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIHN1YnRyYWN0aW9uIG9mIHRoZSBmb3VydGggYnl0ZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgZnJvbSB0aGUgZm91cnRoIGJ5dGUgaW4gCiAgICAgICAgICAgICAgICB0aGUgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGZvdXJ0aCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgICA8cD5FYWNoIGJpdCBpbiBBUFNSLkdFIGlzIHNldCBvciBjbGVhcmVkIGZvciBlYWNoIGJ5dGUgaW4gdGhlIHJldHVybiB2YWx1ZSwgZGVwZW5kaW5nIG9uIAogICAgICAgICAgICAgdGhlIHJlc3VsdHMgb2YgdGhlIG9wZXJhdGlvbi48YnI+CiAgICAgICAgICAgICBJZiA8aT5yZXM8L2k+IGlzIHRoZSByZXR1cm4gdmFsdWUsIHRoZW46CiAgICAgICAgICA8L3A+CiAgICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPmlmIHJlc1s3OjBdICZnZTsgMCB0aGVuIEFQU1IuR0VbMF0gPSAxIGVsc2UgMDwvbGk+CiAgICAgICAgICAgIDxsaT5pZiByZXNbMTU6OF0gJmdlOyAwIHRoZW4gQVBTUi5HRVsxXSA9IDEgZWxzZSAwPC9saT4KICAgICAgICAgICAgPGxpPmlmIHJlc1syMzoxNl0gJmdlOyAwIHRoZW4gQVBTUi5HRVsyXSA9IDEgZWxzZSAwPC9saT4KICAgICAgICAgICAgPGxpPmlmIHJlc1szMToyNF0gJmdlOyAwIHRoZW4gQVBTUi5HRVszXSA9IDEgZWxzZSAwPC9saT4KICAgICAgICAgPC91bD4gICAgICAKICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpyZXNbNzowXSAgID0gdmFsMVs3OjBdICAgLSB2YWwyWzc6MF0KcmVzWzE1OjhdICA9IHZhbDFbMTU6OF0gIC0gdmFsMlsxNTo4XQpyZXNbMjM6MTZdID0gdmFsMVsyMzoxNl0gLSB2YWwyWzIzOjE2XQpyZXNbMzE6MjRdID0gdmFsMVszMToyNF0gLSB2YWwyWzMxOjI0XTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fVVFTVUI4Ij48L2E+RnVuY3Rpb24gX19VUVNVQjg8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fVVFTVUI4KHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBwZXJmb3JtIGZvdXIgdW5zaWduZWQgOC1iaXQgaW50ZWdlciBzdWJ0cmFjdGlvbnMsIHNhdHVyYXRpbmcgCiAgICAgICAgICB0aGUgcmVzdWx0cyB0byB0aGUgOC1iaXQgdW5zaWduZWQgaW50ZWdlciByYW5nZSAwICZsZTsgeCAmbGU7IDI8c3VwPjg8L3N1cD4gLSAxLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCBmb3VyIDgtYml0IG9wZXJhbmRzLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCBmb3VyIDgtYml0IG9wZXJhbmRzLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgZnJvbSB0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgCiAgICAgICAgICAgICAgICBmaXJzdCBvcGVyYW5kLCBpbiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgc3VidHJhY3Rpb24gb2YgdGhlIHNlY29uZCBieXRlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBzZWNvbmQgYnl0ZSBpbiAKICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBvcGVyYW5kLCBpbiB0aGUgc2Vjb25kIGJ5dGUgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIHN1YnRyYWN0aW9uIG9mIHRoZSB0aGlyZCBieXRlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSB0aGlyZCBieXRlIGluIHRoZSAKICAgICAgICAgICAgICAgIGZpcnN0IG9wZXJhbmQsIGluIHRoZSB0aGlyZCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgZm91cnRoIGJ5dGUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGZvdXJ0aCBieXRlIGluIAogICAgICAgICAgICAgICAgdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBmb3VydGggYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgICAgPHA+VGhlIHJlc3VsdHMgYXJlIHNhdHVyYXRlZCB0byB0aGUgOC1iaXQgdW5zaWduZWQgaW50ZWdlciByYW5nZSAwICZsZTsgeCAmbGU7IDI8c3VwPjg8L3N1cD4gLSAxLgogICAgICAgICAgPC9wPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnJlc1s3OjBdICAgPSB2YWwxWzc6MF0gICAtIHZhbDJbNzowXQpyZXNbMTU6OF0gID0gdmFsMVsxNTo4XSAgLSB2YWwyWzE1OjhdCnJlc1syMzoxNl0gPSB2YWwxWzIzOjE2XSAtIHZhbDJbMjM6MTZdCnJlc1szMToyNF0gPSB2YWwxWzMxOjI0XSAtIHZhbDJbMzE6MjRdPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19VSFNVQjgiPjwvYT5GdW5jdGlvbiBfX1VIU1VCODwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19VSFNVQjgodWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMik7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIHBlcmZvcm0gZm91ciB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyIHN1YnRyYWN0aW9ucywgaGFsdmluZyB0aGUgCiAgICAgICAgICByZXN1bHRzLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCBmb3VyIDgtYml0IG9wZXJhbmRzLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCBmb3VyIDgtYml0IG9wZXJhbmRzLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgc3VidHJhY3Rpb24gb2YgdGhlIGZpcnN0IGJ5dGUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGZpcnN0IGJ5dGUgCiAgICAgICAgICAgICAgICBpbiB0aGUgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIGhhbHZlZCBzdWJ0cmFjdGlvbiBvZiB0aGUgc2Vjb25kIGJ5dGUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIHNlY29uZCAKICAgICAgICAgICAgICAgIGJ5dGUgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBzZWNvbmQgYnl0ZSBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgaGFsdmVkIHN1YnRyYWN0aW9uIG9mIHRoZSB0aGlyZCBieXRlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSB0aGlyZCBieXRlIAogICAgICAgICAgICAgICAgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSB0aGlyZCBieXRlIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgc3VidHJhY3Rpb24gb2YgdGhlIGZvdXJ0aCBieXRlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBmb3VydGggCiAgICAgICAgICAgICAgICBieXRlIGluIHRoZSBmaXJzdCBvcGVyYW5kLCBpbiB0aGUgZm91cnRoIGJ5dGUgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpyZXNbNzowXSAgID0gKHZhbDFbNzowXSAgIC0gdmFsMls3OjBdKSAgICZndDsmZ3Q7IDEKcmVzWzE1OjhdICA9ICh2YWwxWzE1OjhdICAtIHZhbDJbMTU6OF0pICAmZ3Q7Jmd0OyAxCnJlc1syMzoxNl0gPSAodmFsMVsyMzoxNl0gLSB2YWwyWzIzOjE2XSkgJmd0OyZndDsgMQpyZXNbMzE6MjRdID0gKHZhbDFbMzE6MjRdIC0gdmFsMlszMToyNF0pICZndDsmZ3Q7IDE8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1NBREQxNiI+PC9hPkZ1bmN0aW9uIF9fU0FERDE2PC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1NBREQxNih1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSB0d28gMTYtYml0IHNpZ25lZCBpbnRlZ2VyIGFkZGl0aW9ucy48YnI+CiAgICAgICAgICBUaGUgR0UgYml0cyBpbiB0aGUgQVBTUiBhcmUgc2V0IGFjY29yZGluZyB0byB0aGUgcmVzdWx0cyBvZiB0aGUgYWRkaXRpb25zLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCB0d28gMTYtYml0IHN1bW1hbmRzLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCB0d28gMTYtYml0IHN1bW1hbmRzLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBhZGRpdGlvbiBvZiB0aGUgbG93IGhhbGZ3b3JkcyBpbiB0aGUgbG93IGhhbGZ3b3JkIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBhZGRpdGlvbiBvZiB0aGUgaGlnaCBoYWxmd29yZHMgaW4gdGhlIGhpZ2ggaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICAgIDxwPkVhY2ggYml0IGluIEFQU1IuR0UgaXMgc2V0IG9yIGNsZWFyZWQgZm9yIGVhY2ggYnl0ZSBpbiB0aGUgcmV0dXJuIHZhbHVlLCBkZXBlbmRpbmcgb24KICAgICAgICAgICAgIHRoZSByZXN1bHRzIG9mIHRoZSBvcGVyYXRpb24uPGJyPgogICAgICAgICAgICAgSWYgPGk+cmVzPC9pPiBpcyB0aGUgcmV0dXJuIHZhbHVlLCB0aGVuOgogICAgICAgICAgPC9wPgogICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT5pZiByZXNbMTU6MF0gJmdlOyAwIHRoZW4gQVBTUi5HRVsxOjBdID0gMTEgZWxzZSAwMDwvbGk+CiAgICAgICAgICAgIDxsaT5pZiByZXNbMzE6MTZdICZnZTsgMCB0aGVuIEFQU1IuR0VbMzoyXSA9IDExIGVsc2UgMDA8L2xpPgogICAgICAgICA8L3VsPiAgICAgIAogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnJlc1sxNTowXSAgPSB2YWwxWzE1OjBdICArIHZhbDJbMTU6MF0KcmVzWzMxOjE2XSA9IHZhbDFbMzE6MTZdICsgdmFsMlszMToxNl08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1FBREQxNiI+PC9hPkZ1bmN0aW9uIF9fUUFERDE2PC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1FBREQxNih1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSB0d28gMTYtYml0IGludGVnZXIgYXJpdGhtZXRpYyBhZGRpdGlvbnMgaW4gcGFyYWxsZWwsIAogICAgICAgICAgc2F0dXJhdGluZyB0aGUgcmVzdWx0cyB0byB0aGUgMTYtYml0IHNpZ25lZCBpbnRlZ2VyIHJhbmdlIC0yPHN1cD4xNTwvc3VwPiAmbGU7IHggJmxlOyAyPHN1cD4xNTwvc3VwPiAtIDEuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IHR3byAxNi1iaXQgc3VtbWFuZHMuPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIHR3byAxNi1iaXQgc3VtbWFuZHMuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJuczo8L3A+CiAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+dGhlIHNhdHVyYXRlZCBhZGRpdGlvbiBvZiB0aGUgbG93IGhhbGZ3b3JkcyBpbiB0aGUgbG93IGhhbGZ3b3JkIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBzYXR1cmF0ZWQgYWRkaXRpb24gb2YgdGhlIGhpZ2ggaGFsZndvcmRzIGluIHRoZSBoaWdoIGhhbGZ3b3JkIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgICA8cD5UaGUgcmV0dXJuZWQgcmVzdWx0cyBhcmUgc2F0dXJhdGVkIHRvIHRoZSAxNi1iaXQgc2lnbmVkIGludGVnZXIgCiAgICAgICAgICAgICByYW5nZSAtMjxzdXA+MTU8L3N1cD4gJmxlOyB4ICZsZTsgMjxzdXA+MTU8L3N1cD4gLSAxCiAgICAgICAgICA8L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzE1OjBdICA9IHZhbDFbMTU6MF0gICsgdmFsMlsxNTowXQpyZXNbMTY6MzFdID0gdmFsMVszMToxNl0gKyB2YWwyWzMxOjE2XTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fU0hBREQxNiI+PC9hPkZ1bmN0aW9uIF9fU0hBREQxNjwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19TSEFERDE2KHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBwZXJmb3JtIHR3byBzaWduZWQgMTYtYml0IGludGVnZXIgYWRkaXRpb25zLCBoYWx2aW5nIHRoZSAKICAgICAgICAgIHJlc3VsdHMuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IHR3byAxNi1iaXQgc3VtbWFuZHMuPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIHR3byAxNi1iaXQgc3VtbWFuZHMuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJuczo8L3A+CiAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+dGhlIGhhbHZlZCBhZGRpdGlvbiBvZiB0aGUgbG93IGhhbGZ3b3JkcyBmcm9tIGVhY2ggb3BlcmFuZCwgaW4gdGhlIGxvdyBoYWxmd29yZCAKICAgICAgICAgICAgICAgIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgYWRkaXRpb24gb2YgdGhlIGhpZ2ggaGFsZndvcmRzIGZyb20gZWFjaCBvcGVyYW5kLCBpbiB0aGUgaGlnaCBoYWxmd29yZCAKICAgICAgICAgICAgICAgIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzE1OjBdICA9ICh2YWwxWzE1OjBdICArIHZhbDJbMTU6MF0pICAmZ3Q7Jmd0OyAxCnJlc1szMToxNl0gPSAodmFsMVszMToxNl0gKyB2YWwyWzMxOjE2XSkgJmd0OyZndDsgMTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fVUFERDE2Ij48L2E+RnVuY3Rpb24gX19VQUREMTY8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fVUFERDE2KHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBwZXJmb3JtIHR3byAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciBhZGRpdGlvbnMuPGJyPgogICAgICAgICAgVGhlIEdFIGJpdHMgaW4gdGhlIEFQU1IgYXJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdHMuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IHR3byAxNi1iaXQgc3VtbWFuZHMgZm9yIGVhY2ggYWRkaXRpb24uPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIHR3byAxNi1iaXQgc3VtbWFuZHMgZm9yIGVhY2ggYWRkaXRpb24uPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJuczo8L3A+CiAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+dGhlIGFkZGl0aW9uIG9mIHRoZSBsb3cgaGFsZndvcmRzIGluIGVhY2ggb3BlcmFuZCwgaW4gdGhlIGxvdyBoYWxmd29yZCBvZiB0aGUgCiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBhZGRpdGlvbiBvZiB0aGUgaGlnaCBoYWxmd29yZHMgaW4gZWFjaCBvcGVyYW5kLCBpbiB0aGUgaGlnaCBoYWxmd29yZCBvZiB0aGUgCiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgICA8cD5FYWNoIGJpdCBpbiBBUFNSLkdFIGlzIHNldCBvciBjbGVhcmVkIGZvciBlYWNoIGJ5dGUgaW4gdGhlIHJldHVybiB2YWx1ZSwgZGVwZW5kaW5nIG9uIAogICAgICAgICAgICAgdGhlIHJlc3VsdHMgb2YgdGhlIG9wZXJhdGlvbi48YnI+CiAgICAgICAgICAgICBJZiA8aT5yZXM8L2k+IGlzIHRoZSByZXR1cm4gdmFsdWUsIHRoZW46CiAgICAgICAgICA8L3A+CiAgICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPmlmIHJlc1sxNTowXSAmZ2U7IDB4MTAwMDAgdGhlbiBBUFNSLkdFWzBdID0gMTEgZWxzZSAwMDwvbGk+CiAgICAgICAgICAgIDxsaT5pZiByZXNbMzE6MTZdICZnZTsgMHgxMDAwMCB0aGVuIEFQU1IuR0VbMV0gPSAxMSBlbHNlIDAwPC9saT4KICAgICAgICAgPC91bD4gICAgICAKICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpyZXNbMTU6MF0gID0gdmFsMVsxNTowXSAgKyB2YWwyWzE1OjBdCnJlc1szMToxNl0gPSB2YWwxWzMxOjE2XSArIHZhbDJbMzE6MTZdPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19VUUFERDE2Ij48L2E+RnVuY3Rpb24gX19VUUFERDE2PC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1VRQUREMTYodWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMik7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIHBlcmZvcm0gdHdvIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyIGFkZGl0aW9ucywgc2F0dXJhdGluZyB0aGUgCiAgICAgICAgICByZXN1bHRzIHRvIHRoZSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciByYW5nZSAwICZsZTsgeCAmbGU7IDI8c3VwPjE2PC9zdXA+IC0gMS4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UGFyYW1ldGVyPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTpub25lOyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgIDxsaT48Yj52YWwxPC9iPjogZmlyc3QgdHdvIDE2LWJpdCBzdW1tYW5kcy48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgdHdvIDE2LWJpdCBzdW1tYW5kcy48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zOjwvcD4KICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT50aGUgYWRkaXRpb24gb2YgdGhlIGxvdyBoYWxmd29yZCBpbiB0aGUgZmlyc3Qgb3BlcmFuZCBhbmQgdGhlIGxvdyBoYWxmd29yZCBpbiB0aGUgCiAgICAgICAgICAgICAgICBzZWNvbmQgb3BlcmFuZCwgaW4gdGhlIGxvdyBoYWxmd29yZCBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgYWRkaXRpb24gb2YgdGhlIGhpZ2ggaGFsZndvcmQgaW4gdGhlIGZpcnN0IG9wZXJhbmQgYW5kIHRoZSBoaWdoIGhhbGZ3b3JkIGluIHRoZSAKICAgICAgICAgICAgICAgIHNlY29uZCBvcGVyYW5kLCBpbiB0aGUgaGlnaCBoYWxmd29yZCBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgICAgPHA+VGhlIHJlc3VsdHMgYXJlIHNhdHVyYXRlZCB0byB0aGUgMTYtYml0IHVuc2lnbmVkIGludGVnZXIgCiAgICAgICAgICAgICByYW5nZSAwICZsZTsgeCAmbGU7IDI8c3VwPjE2PC9zdXA+IC0gMS4KICAgICAgICAgIDwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpyZXNbMTU6MF0gID0gdmFsMVsxNTowXSAgKyB2YWwyWzE1OjBdCnJlc1szMToxNl0gPSB2YWwxWzMxOjE2XSArIHZhbDJbMzE6MTZdPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19VSEFERDE2Ij48L2E+RnVuY3Rpb24gX19VSEFERDE2PC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1VIQUREMTYodWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMik7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIHBlcmZvcm0gdHdvIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyIGFkZGl0aW9ucywgaGFsdmluZyB0aGUgCiAgICAgICAgICByZXN1bHRzLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCB0d28gMTYtYml0IHN1bW1hbmRzLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCB0d28gMTYtYml0IHN1bW1hbmRzLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgYWRkaXRpb24gb2YgdGhlIGxvdyBoYWxmd29yZHMgaW4gZWFjaCBvcGVyYW5kLCBpbiB0aGUgbG93IGhhbGZ3b3JkIG9mIAogICAgICAgICAgICAgICAgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIGhhbHZlZCBhZGRpdGlvbiBvZiB0aGUgaGlnaCBoYWxmd29yZHMgaW4gZWFjaCBvcGVyYW5kLCBpbiB0aGUgaGlnaCBoYWxmd29yZCAKICAgICAgICAgICAgICAgIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzE1OjBdICA9ICh2YWwxWzE1OjBdICArIHZhbDJbMTU6MF0pICAmZ3Q7Jmd0OyAxCnJlc1szMToxNl0gPSAodmFsMVszMToxNl0gKyB2YWwyWzMxOjE2XSkgJmd0OyZndDsgMTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fU1NVQjE2Ij48L2E+RnVuY3Rpb24gX19TU1VCMTY8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fU1NVQjE2KHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBwZXJmb3JtIHR3byAxNi1iaXQgc2lnbmVkIGludGVnZXIgc3VidHJhY3Rpb25zLjxicj4KICAgICAgICAgIFRoZSBHRSBiaXRzIGluIHRoZSBBUFNSIGFyZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSByZXN1bHRzLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCB0d28gMTYtYml0IG9wZXJhbmRzIG9mIGVhY2ggc3VidHJhY3Rpb24uPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIHR3byAxNi1iaXQgb3BlcmFuZHMgb2YgZWFjaCBzdWJ0cmFjdGlvbi48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zOjwvcD4KICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT50aGUgc3VidHJhY3Rpb24gb2YgdGhlIGxvdyBoYWxmd29yZCBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgZnJvbSB0aGUgbG93IGhhbGZ3b3JkIAogICAgICAgICAgICAgICAgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBsb3cgaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIHN1YnRyYWN0aW9uIG9mIHRoZSBoaWdoIGhhbGZ3b3JkIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBoaWdoIGhhbGZ3b3JkIAogICAgICAgICAgICAgICAgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBoaWdoIGhhbGZ3b3JkIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgICA8cD5FYWNoIGJpdCBpbiBBUFNSLkdFIGlzIHNldCBvciBjbGVhcmVkIGZvciBlYWNoIGJ5dGUgaW4gdGhlIHJldHVybiB2YWx1ZSwgZGVwZW5kaW5nIG9uIAogICAgICAgICAgICAgdGhlIHJlc3VsdHMgb2YgdGhlIG9wZXJhdGlvbi48YnI+CiAgICAgICAgICAgICBJZiA8aT5yZXM8L2k+IGlzIHRoZSByZXR1cm4gdmFsdWUsIHRoZW46CiAgICAgICAgICA8L3A+CiAgICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPmlmIHJlc1sxNTowXSAmZ2U7IDAgdGhlbiBBUFNSLkdFWzE6MF0gPSAxMSBlbHNlIDAwPC9saT4KICAgICAgICAgICAgPGxpPmlmIHJlc1szMToxNl0gJmdlOyAwIHRoZW4gQVBTUi5HRVszOjJdID0gMTEgZWxzZSAwMDwvbGk+CiAgICAgICAgIDwvdWw+ICAgICAgCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzE1OjBdICA9IHZhbDFbMTU6MF0gIC0gdmFsMlsxNTowXQpyZXNbMzE6MTZdID0gdmFsMVszMToxNl0gLSB2YWwyWzMxOjE2XTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fUVNVQjE2Ij48L2E+RnVuY3Rpb24gX19RU1VCMTY8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fUVNVQjE2KHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBwZXJmb3JtIHR3byAxNi1iaXQgaW50ZWdlciBzdWJ0cmFjdGlvbnMsIHNhdHVyYXRpbmcgdGhlIAogICAgICAgICAgcmVzdWx0cyB0byB0aGUgMTYtYml0IHNpZ25lZCBpbnRlZ2VyIHJhbmdlIC0yPHN1cD4xNTwvc3VwPiAmbGU7IHggJmxlOyAyPHN1cD4xNTwvc3VwPiAtIDEuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IHR3byAxNi1iaXQgb3BlcmFuZHMuPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIHR3byAxNi1iaXQgb3BlcmFuZHMuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJuczo8L3A+CiAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+dGhlIHNhdHVyYXRlZCBzdWJ0cmFjdGlvbiBvZiB0aGUgbG93IGhhbGZ3b3JkIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBsb3cgCiAgICAgICAgICAgICAgICBoYWxmd29yZCBpbiB0aGUgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGxvdyBoYWxmd29yZCBvZiB0aGUgcmV0dXJuZWQgcmVzdWx0LjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgc2F0dXJhdGVkIHN1YnRyYWN0aW9uIG9mIHRoZSBoaWdoIGhhbGZ3b3JkIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBoaWdoIAogICAgICAgICAgICAgICAgaGFsZndvcmQgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBoaWdoIGhhbGZ3b3JkIG9mIHRoZSByZXR1cm5lZCByZXN1bHQuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgICA8cD5UaGUgcmV0dXJuZWQgcmVzdWx0cyBhcmUgc2F0dXJhdGVkIHRvIHRoZSAxNi1iaXQgc2lnbmVkIGludGVnZXIgCiAgICAgICAgICAgICByYW5nZSAtMjxzdXA+MTU8L3N1cD4gJmxlOyB4ICZsZTsgMjxzdXA+MTU8L3N1cD4gLSAxLgogICAgICAgICAgPC9wPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnJlc1sxNTowXSAgPSB2YWwxWzE1OjBdICAtIHZhbDJbMTU6MF0KcmVzWzMxOjE2XSA9IHZhbDFbMzE6MTZdIC0gdmFsMlszMToxNl08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1NIU1VCMTYiPjwvYT5GdW5jdGlvbiBfX1NIU1VCMTY8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fU0hTVUIxNih1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSB0d28gc2lnbmVkIDE2LWJpdCBpbnRlZ2VyIHN1YnRyYWN0aW9ucywgaGFsdmluZyB0aGUgCiAgICAgICAgICByZXN1bHRzLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCB0d28gMTYtYml0IG9wZXJhbmRzLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCB0d28gMTYtYml0IG9wZXJhbmRzLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgc3VidHJhY3Rpb24gb2YgdGhlIGxvdyBoYWxmd29yZCBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgZnJvbSB0aGUgbG93IAogICAgICAgICAgICAgICAgaGFsZndvcmQgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBsb3cgaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIGhhbHZlZCBzdWJ0cmFjdGlvbiBvZiB0aGUgaGlnaCBoYWxmd29yZCBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgZnJvbSB0aGUgaGlnaCAKICAgICAgICAgICAgICAgIGhhbGZ3b3JkIGluIHRoZSBmaXJzdCBvcGVyYW5kLCBpbiB0aGUgaGlnaCBoYWxmd29yZCBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnJlc1sxNTowXSAgPSAodmFsMVsxNTowXSAgLSB2YWwyWzE1OjBdKSAgJmd0OyZndDsgMQpyZXNbMzE6MTZdID0gKHZhbDFbMzE6MTZdIC0gdmFsMlszMToxNl0pICZndDsmZ3Q7IDE8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1VTVUIxNiI+PC9hPkZ1bmN0aW9uIF9fVVNVQjE2PC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1VTVUIxNih1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSB0d28gMTYtYml0IHVuc2lnbmVkIGludGVnZXIgc3VidHJhY3Rpb25zLjxicj4KICAgICAgICAgIFRoZSBHRSBiaXRzIGluIHRoZSBBUFNSIGFyZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSByZXN1bHRzLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCB0d28gMTYtYml0IG9wZXJhbmRzLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCB0d28gMTYtYml0IG9wZXJhbmRzLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgbG93IGhhbGZ3b3JkIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBsb3cgaGFsZndvcmQgCiAgICAgICAgICAgICAgICBpbiB0aGUgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGxvdyBoYWxmd29yZCBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgc3VidHJhY3Rpb24gb2YgdGhlIGhpZ2ggaGFsZndvcmQgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGhpZ2ggaGFsZndvcmQgCiAgICAgICAgICAgICAgICBpbiB0aGUgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGhpZ2ggaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICAgIDxwPkVhY2ggYml0IGluIEFQU1IuR0UgaXMgc2V0IG9yIGNsZWFyZWQgZm9yIGVhY2ggYnl0ZSBpbiB0aGUgcmV0dXJuIHZhbHVlLCBkZXBlbmRpbmcgb24KICAgICAgICAgICAgIHRoZSByZXN1bHRzIG9mIHRoZSBvcGVyYXRpb24uPGJyPgogICAgICAgICAgICAgSWYgPGk+cmVzPC9pPiBpcyB0aGUgcmV0dXJuIHZhbHVlLCB0aGVuOgogICAgICAgICAgPC9wPgogICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT5pZiByZXNbMTU6MF0gJmdlOyAwIHRoZW4gQVBTUi5HRVsxOjBdID0gMTEgZWxzZSAwMDwvbGk+CiAgICAgICAgICAgIDxsaT5pZiByZXNbMzE6MTZdICZnZTsgMCB0aGVuIEFQU1IuR0VbMzoyXSA9IDExIGVsc2UgMDA8L2xpPgogICAgICAgICA8L3VsPiAgICAgIAogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnJlc1sxNTowXSAgPSB2YWwxWzE1OjBdICAtIHZhbDJbMTU6MF0KcmVzWzMxOjE2XSA9IHZhbDFbMzE6MTZdIC0gdmFsMlszMToxNl08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1VRU1VCMTYiPjwvYT5GdW5jdGlvbiBfX1VRU1VCMTY8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fVVFTVUIxNih1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSB0d28gdW5zaWduZWQgMTYtYml0IGludGVnZXIgc3VidHJhY3Rpb25zLCBzYXR1cmF0aW5nIAogICAgICAgICAgdGhlIHJlc3VsdHMgdG8gdGhlIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHJhbmdlIDAgJmxlOyB4ICZsZTsgMjxzdXA+MTY8L3N1cD4gLSAxLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCB0d28gMTYtYml0IG9wZXJhbmRzIGZvciBlYWNoIHN1YnRyYWN0aW9uLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCB0d28gMTYtYml0IG9wZXJhbmRzIGZvciBlYWNoIHN1YnRyYWN0aW9uLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgbG93IGhhbGZ3b3JkIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBsb3cgaGFsZndvcmQgCiAgICAgICAgICAgICAgICBpbiB0aGUgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGxvdyBoYWxmd29yZCBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgc3VidHJhY3Rpb24gb2YgdGhlIGhpZ2ggaGFsZndvcmQgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGhpZ2ggaGFsZndvcmQgCiAgICAgICAgICAgICAgICBpbiB0aGUgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGhpZ2ggaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICAgIDxwPlRoZSByZXN1bHRzIGFyZSBzYXR1cmF0ZWQgdG8gdGhlIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHJhbmdlIDAgJmxlOyB4ICZsZTsgMjxzdXA+MTY8L3N1cD4gLSAxLgogICAgICAgICAgPC9wPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnJlc1sxNTowXSAgPSB2YWwxWzE1OjBdICAtIHZhbDJbMTU6MF0KcmVzWzMxOjE2XSA9IHZhbDFbMzE6MTZdIC0gdmFsMlszMToxNl08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1VIU1VCMTYiPjwvYT5GdW5jdGlvbiBfX1VIU1VCMTY8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fVUhTVUIxNih1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSB0d28gdW5zaWduZWQgMTYtYml0IGludGVnZXIgc3VidHJhY3Rpb25zLCBoYWx2aW5nIAogICAgICAgICAgdGhlIHJlc3VsdHMuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IHR3byAxNi1iaXQgb3BlcmFuZHMuPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIHR3byAxNi1iaXQgb3BlcmFuZHMuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJuczo8L3A+CiAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+dGhlIGhhbHZlZCBzdWJ0cmFjdGlvbiBvZiB0aGUgbG93IGhhbGZ3b3JkIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBsb3cgCiAgICAgICAgICAgICAgICBoYWxmd29yZCBpbiB0aGUgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGxvdyBoYWxmd29yZCBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgaGFsdmVkIHN1YnRyYWN0aW9uIG9mIHRoZSBoaWdoIGhhbGZ3b3JkIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBoaWdoIAogICAgICAgICAgICAgICAgaGFsZndvcmQgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBoaWdoIGhhbGZ3b3JkIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzE1OjBdICA9ICh2YWwxWzE1OjBdICAtIHZhbDJbMTU6MF0pICAmZ3Q7Jmd0OyAxCnJlc1szMToxNl0gPSAodmFsMVszMToxNl0gLSB2YWwyWzMxOjE2XSkgJmd0OyZndDsgMTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fU0FTWCI+PC9hPkZ1bmN0aW9uIF9fU0FTWDwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19TQVNYKHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBpbnNlcnRzIGFuIFNBU1ggaW5zdHJ1Y3Rpb24gaW50byB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIGdlbmVyYXRlZCBieSB0aGUgCiAgICAgICAgICBjb21waWxlci4gSXQgZW5hYmxlcyB5b3UgdG8gZXhjaGFuZ2UgdGhlIGhhbGZ3b3JkcyBvZiB0aGUgc2Vjb25kIG9wZXJhbmQsIGFkZCB0aGUgaGlnaCAKICAgICAgICAgIGhhbGZ3b3JkcyBhbmQgc3VidHJhY3QgdGhlIGxvdyBoYWxmd29yZHMuPGJyPgogICAgICAgICAgVGhlIEdFIGJpdHMgaW4gdGhlIEFQUlMgYXJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdHMuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IG9wZXJhbmQgZm9yIHRoZSBzdWJ0cmFjdGlvbiBpbiB0aGUgbG93IGhhbGZ3b3JkLCBhbmQgdGhlCiAgICAgICAgICAgICAgZmlyc3Qgb3BlcmFuZCBmb3IgdGhlIGFkZGl0aW9uIGluIHRoZSBoaWdoIGhhbGZ3b3JkLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCBvcGVyYW5kIGZvciB0aGUgc3VidHJhY3Rpb24gaW4gdGhlIGhpZ2ggaGFsZndvcmQsIGFuZCB0aGUgCiAgICAgICAgICAgICAgc2Vjb25kIG9wZXJhbmQgZm9yIHRoZSBhZGRpdGlvbiBpbiB0aGUgbG93IGhhbGZ3b3JkLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgaGlnaCBoYWxmd29yZCBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgZnJvbSB0aGUgbG93IGhhbGZ3b3JkIAogICAgICAgICAgICAgICAgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBsb3cgaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIGFkZGl0aW9uIG9mIHRoZSBoaWdoIGhhbGZ3b3JkIGluIHRoZSBmaXJzdCBvcGVyYW5kIGFuZCB0aGUgbG93IGhhbGZ3b3JkIGluIHRoZSAKICAgICAgICAgICAgICAgIHNlY29uZCBvcGVyYW5kLCBpbiB0aGUgaGlnaCBoYWxmd29yZCBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgICAgPHA+RWFjaCBiaXQgaW4gQVBTUi5HRSBpcyBzZXQgb3IgY2xlYXJlZCBmb3IgZWFjaCBieXRlIGluIHRoZSByZXR1cm4gdmFsdWUsIGRlcGVuZGluZyBvbgogICAgICAgICAgICAgdGhlIHJlc3VsdHMgb2YgdGhlIG9wZXJhdGlvbi48YnI+CiAgICAgICAgICAgICBJZiA8aT5yZXM8L2k+IGlzIHRoZSByZXR1cm4gdmFsdWUsIHRoZW46CiAgICAgICAgICA8L3A+CiAgICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPmlmIHJlc1sxNTowXSAmZ2U7IDAgdGhlbiBBUFNSLkdFWzE6MF0gPSAxMSBlbHNlIDAwPC9saT4KICAgICAgICAgICAgPGxpPmlmIHJlc1szMToxNl0gJmdlOyAwIHRoZW4gQVBTUi5HRVszOjJdID0gMTEgZWxzZSAwMDwvbGk+CiAgICAgICAgIDwvdWw+ICAgICAgCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzE1OjBdICA9IHZhbDFbMTU6MF0gLSB2YWwyWzMxOjE2XQpyZXNbMzE6MTZdID0gdmFsMVszMToxNl0gKyB2YWwyWzE1OjBdPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19RQVNYIj48L2E+RnVuY3Rpb24gX19RQVNYPC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1FBU1godWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMik7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIGV4Y2hhbmdlIHRoZSBoYWxmd29yZHMgb2YgdGhlIG9uZSBvcGVyYW5kLCB0aGVuIGFkZCB0aGUgaGlnaAogICAgICAgICAgaGFsZndvcmRzIGFuZCBzdWJ0cmFjdCB0aGUgbG93IGhhbGZ3b3Jkcywgc2F0dXJhdGluZyB0aGUgcmVzdWx0cyB0byB0aGUgMTYtYml0IHNpZ25lZCAKICAgICAgICAgIGludGVnZXIgcmFuZ2UgLTI8c3VwPjE1PC9zdXA+ICZsZTsgeCAmbGU7IDI8c3VwPjE1PC9zdXA+IC0gMS4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UGFyYW1ldGVyPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTpub25lOyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgIDxsaT48Yj52YWwxPC9iPjogZmlyc3Qgb3BlcmFuZCBmb3IgdGhlIHN1YnRyYWN0aW9uIGluIHRoZSBsb3cgaGFsZndvcmQsIGFuZCB0aGUgCiAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Qgb3BlcmFuZCBmb3IgdGhlIGFkZGl0aW9uIGluIHRoZSBoaWdoIGhhbGZ3b3JkLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCBvcGVyYW5kIGZvciB0aGUgc3VidHJhY3Rpb24gaW4gdGhlIGhpZ2ggaGFsZndvcmQsIGFuZCB0aGUKICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmQgb3BlcmFuZCBmb3IgdGhlIGFkZGl0aW9uIGluIHRoZSBsb3cgaGFsZndvcmQuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJuczo8L3A+CiAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+dGhlIHNhdHVyYXRlZCBzdWJ0cmFjdGlvbiBvZiB0aGUgaGlnaCBoYWxmd29yZCBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgZnJvbSB0aGUgbG93IAogICAgICAgICAgICAgICAgaGFsZndvcmQgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBsb3cgaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIHNhdHVyYXRlZCBhZGRpdGlvbiBvZiB0aGUgaGlnaCBoYWxmd29yZCBpbiB0aGUgZmlyc3Qgb3BlcmFuZCBhbmQgdGhlIGxvdyAKICAgICAgICAgICAgICAgIGhhbGZ3b3JkIGluIHRoZSBzZWNvbmQgb3BlcmFuZCwgaW4gdGhlIGhpZ2ggaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICAgIDxwPlRoZSByZXR1cm5lZCByZXN1bHRzIGFyZSBzYXR1cmF0ZWQgdG8gdGhlIDE2LWJpdCBzaWduZWQgaW50ZWdlciAKICAgICAgICAgICAgIHJhbmdlIC0yPHN1cD4xNTwvc3VwPiAmbGU7IHggJmxlOyAyPHN1cD4xNTwvc3VwPiAtIDEuCiAgICAgICAgICA8L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzE1OjBdICA9IHZhbDFbMTU6MF0gIC0gdmFsMlszMToxNl0KcmVzWzMxOjE2XSA9IHZhbDFbMzE6MTZdICsgdmFsMlsxNTowXTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fU0hBU1giPjwvYT5GdW5jdGlvbiBfX1NIQVNYPC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1NIQVNYKHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBleGNoYW5nZSB0aGUgdHdvIGhhbGZ3b3JkcyBvZiBvbmUgb3BlcmFuZCwgcGVyZm9ybSBvbmUgCiAgICAgICAgICBzaWduZWQgMTYtYml0IGludGVnZXIgYWRkaXRpb24gYW5kIG9uZSBzaWduZWQgMTYtYml0IHN1YnRyYWN0aW9uLCBhbmQgaGFsdmUgdGhlIHJlc3VsdHMuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IDE2LWJpdCBvcGVyYW5kcy48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgMTYtYml0IG9wZXJhbmRzLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgc3VidHJhY3Rpb24gb2YgdGhlIGhpZ2ggaGFsZndvcmQgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGxvdyAKICAgICAgICAgICAgICAgIGhhbGZ3b3JkIGluIHRoZSBmaXJzdCBvcGVyYW5kLCBpbiB0aGUgbG93IGhhbGZ3b3JkIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgc3VidHJhY3Rpb24gb2YgdGhlIGxvdyBoYWxmd29yZCBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgZnJvbSB0aGUgaGlnaCAKICAgICAgICAgICAgICAgIGhhbGZ3b3JkIGluIHRoZSBmaXJzdCBvcGVyYW5kLCBpbiB0aGUgaGlnaCBoYWxmd29yZCBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnJlc1sxNTowXSAgPSAodmFsMVsxNTowXSAgLSB2YWwyWzMxOjE2XSkgJmd0OyZndDsgMQpyZXNbMzE6MTZdID0gKHZhbDFbMzE6MTZdIC0gdmFsMlsxNTowXSkgICZndDsmZ3Q7IDE8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1VBU1giPjwvYT5GdW5jdGlvbiBfX1VBU1g8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fVUFTWCh1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gZXhjaGFuZ2UgdGhlIHR3byBoYWxmd29yZHMgb2YgdGhlIHNlY29uZCBvcGVyYW5kLCBhZGQgdGhlIAogICAgICAgICAgaGlnaCBoYWxmd29yZHMgYW5kIHN1YnRyYWN0IHRoZSBsb3cgaGFsZndvcmRzLjxicj4KICAgICAgICAgIFRoZSBHRSBiaXRzIGluIHRoZSBBUFNSIGFyZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSByZXN1bHRzLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCBvcGVyYW5kIGZvciB0aGUgc3VidHJhY3Rpb24gaW4gdGhlIGxvdyBoYWxmd29yZCwgYW5kIHRoZQogICAgICAgICAgICAgIGZpcnN0IG9wZXJhbmQgZm9yIHRoZSBhZGRpdGlvbiBpbiB0aGUgaGlnaCBoYWxmd29yZC48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgb3BlcmFuZCBmb3IgdGhlIHN1YnRyYWN0aW9uIGluIHRoZSBoaWdoIGhhbGZ3b3JkIGFuZCB0aGUKICAgICAgICAgICAgICBzZWNvbmQgb3BlcmFuZCBmb3IgdGhlIGFkZGl0aW9uIGluIHRoZSBsb3cgaGFsZndvcmQuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJuczo8L3A+CiAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+dGhlIHN1YnRyYWN0aW9uIG9mIHRoZSBoaWdoIGhhbGZ3b3JkIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBsb3cgaGFsZndvcmQgCiAgICAgICAgICAgICAgICBpbiB0aGUgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGxvdyBoYWxmd29yZCBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgYWRkaXRpb24gb2YgdGhlIGhpZ2ggaGFsZndvcmQgaW4gdGhlIGZpcnN0IG9wZXJhbmQgYW5kIHRoZSBsb3cgaGFsZndvcmQgaW4gdGhlIAogICAgICAgICAgICAgICAgc2Vjb25kIG9wZXJhbmQsIGluIHRoZSBoaWdoIGhhbGZ3b3JkIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgICA8cD5FYWNoIGJpdCBpbiBBUFNSLkdFIGlzIHNldCBvciBjbGVhcmVkIGZvciBlYWNoIGJ5dGUgaW4gdGhlIHJldHVybiB2YWx1ZSwgZGVwZW5kaW5nIG9uIAogICAgICAgICAgICAgdGhlIHJlc3VsdHMgb2YgdGhlIG9wZXJhdGlvbi48YnI+CiAgICAgICAgICAgICBJZiA8aT5yZXM8L2k+IGlzIHRoZSByZXR1cm4gdmFsdWUsIHRoZW46CiAgICAgICAgICA8L3A+CiAgICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPmlmIHJlc1sxNTowXSAmZ2U7IDAgdGhlbiBBUFNSLkdFWzE6MF0gPSAxMSBlbHNlIDAwPC9saT4KICAgICAgICAgICAgPGxpPmlmIHJlc1szMToxNl0gJmdlOyAweDEwMDAwIHRoZW4gQVBTUi5HRVszOjJdID0gMTEgZWxzZSAwMDwvbGk+CiAgICAgICAgIDwvdWw+ICAgICAgCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzE1OjBdICA9IHZhbDFbMTU6MF0gIC0gdmFsMlszMToxNl0KcmVzWzMxOjE2XSA9IHZhbDFbMzE6MTZdICsgdmFsMlsxNTowXTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fVVFBU1giPjwvYT5GdW5jdGlvbiBfX1VRQVNYPC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1VRQVNYKHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBleGNoYW5nZSB0aGUgaGFsZndvcmRzIG9mIHRoZSBzZWNvbmQgb3BlcmFuZCBhbmQgcGVyZm9ybSAKICAgICAgICAgIG9uZSB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlciBhZGRpdGlvbiBhbmQgb25lIHVuc2lnbmVkIDE2LWJpdCBzdWJ0cmFjdGlvbiwgc2F0dXJhdGluZyB0aGUgCiAgICAgICAgICByZXN1bHRzIHRvIHRoZSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciByYW5nZSAwICZsZTsgeCAmbGU7IDI8c3VwPjE2PC9zdXA+IC0gMS4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UGFyYW1ldGVyPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTpub25lOyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgIDxsaT48Yj52YWwxPC9iPjogZmlyc3QgdHdvIDE2LWJpdCBvcGVyYW5kcy48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgdHdvIDE2LWJpdCBvcGVyYW5kcy48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zOjwvcD4KICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT50aGUgc3VidHJhY3Rpb24gb2YgdGhlIGhpZ2ggaGFsZndvcmQgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGxvdyBoYWxmd29yZCAKICAgICAgICAgICAgICAgIGluIHRoZSBmaXJzdCBvcGVyYW5kLCBpbiB0aGUgbG93IGhhbGZ3b3JkIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgbG93IGhhbGZ3b3JkIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBoaWdoIGhhbGZ3b3JkIAogICAgICAgICAgICAgICAgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBoaWdoIGhhbGZ3b3JkIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgICA8cD5UaGUgcmVzdWx0cyBhcmUgc2F0dXJhdGVkIHRvIHRoZSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciAgCiAgICAgICAgICAgICByYW5nZSAwICZsZTsgeCAmbGU7IDI8c3VwPjE2PC9zdXA+IC0gMS4KICAgICAgICAgIDwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpyZXNbMTU6MF0gID0gdmFsMVsxNTowXSAgLSB2YWwyWzMxOjE2XQpyZXNbMzE6MTZdID0gdmFsMVszMToxNl0gKyB2YWwyWzE1OjBdPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19VSEFTWCI+PC9hPkZ1bmN0aW9uIF9fVUhBU1g8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fVUhBU1godWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMik7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIGV4Y2hhbmdlIHRoZSBoYWxmd29yZHMgb2YgdGhlIHNlY29uZCBvcGVyYW5kLCBhZGQgdGhlIGhpZ2ggCiAgICAgICAgICBoYWxmd29yZHMgYW5kIHN1YnRyYWN0IHRoZSBsb3cgaGFsZndvcmRzLCBoYWx2aW5nIHRoZSByZXN1bHRzLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCBvcGVyYW5kIGZvciB0aGUgc3VidHJhY3Rpb24gaW4gdGhlIGxvdyBoYWxmd29yZCwgYW5kIHRoZQogICAgICAgICAgIGZpcnN0IG9wZXJhbmQgZm9yIHRoZSBhZGRpdGlvbiBpbiB0aGUgaGlnaCBoYWxmd29yZC48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgb3BlcmFuZCBmb3IgdGhlIHN1YnRyYWN0aW9uIGluIHRoZSBoaWdoIGhhbGZ3b3JkLCBhbmQgdGhlIAogICAgICAgICAgIHNlY29uZCBvcGVyYW5kIGZvciB0aGUgYWRkaXRpb24gaW4gdGhlIGxvdyBoYWxmd29yZC48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zOjwvcD4KICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT50aGUgaGFsdmVkIHN1YnRyYWN0aW9uIG9mIHRoZSBoaWdoIGhhbGZ3b3JkIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBsb3cgCiAgICAgICAgICAgICAgICBoYWxmd29yZCBpbiB0aGUgZmlyc3Qgb3BlcmFuZC48L2xpPgogICAgICAgICAgICA8bGk+dGhlIGhhbHZlZCBhZGRpdGlvbiBvZiB0aGUgaGlnaCBoYWxmd29yZCBpbiB0aGUgZmlyc3Qgb3BlcmFuZCBhbmQgdGhlIGxvdyBoYWxmd29yZCAKICAgICAgICAgICAgICAgIGluIHRoZSBzZWNvbmQgb3BlcmFuZC48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpyZXNbMTU6MF0gID0gKHZhbDFbMTU6MF0gIC0gdmFsMlszMToxNl0pICZndDsmZ3Q7IDEKcmVzWzMxOjE2XSA9ICh2YWwxWzMxOjE2XSArIHZhbDJbMTU6MF0pICAmZ3Q7Jmd0OyAxPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19TU0FYIj48L2E+RnVuY3Rpb24gX19TU0FYPC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1NTQVgodWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMik7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIGV4Y2hhbmdlIHRoZSB0d28gaGFsZndvcmRzIG9mIG9uZSBvcGVyYW5kIGFuZCBwZXJmb3JtIG9uZSAKICAgICAgICAgIDE2LWJpdCBpbnRlZ2VyIHN1YnRyYWN0aW9uIGFuZCBvbmUgMTYtYml0IGFkZGl0aW9uLjxicj4KICAgICAgICAgIFRoZSBHRSBiaXRzIGluIHRoZSBBUFNSIGFyZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSByZXN1bHRzLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCBvcGVyYW5kIGZvciB0aGUgYWRkaXRpb24gaW4gdGhlIGxvdyBoYWxmd29yZCwgYW5kIHRoZSBmaXJzdCAKICAgICAgICAgICAgICBvcGVyYW5kIGZvciB0aGUgc3VidHJhY3Rpb24gaW4gdGhlIGhpZ2ggaGFsZndvcmQuPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIG9wZXJhbmQgZm9yIHRoZSBhZGRpdGlvbiBpbiB0aGUgaGlnaCBoYWxmd29yZCwgYW5kIHRoZQogICAgICAgICAgICAgIHNlY29uZCBvcGVyYW5kIGZvciB0aGUgc3VidHJhY3Rpb24gaW4gdGhlIGxvdyBoYWxmd29yZC48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zOjwvcD4KICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT50aGUgYWRkaXRpb24gb2YgdGhlIGxvdyBoYWxmd29yZCBpbiB0aGUgZmlyc3Qgb3BlcmFuZCBhbmQgdGhlIGhpZ2ggaGFsZndvcmQgaW4gdGhlIAogICAgICAgICAgICAgICAgc2Vjb25kIG9wZXJhbmQsIGluIHRoZSBsb3cgaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIHN1YnRyYWN0aW9uIG9mIHRoZSBsb3cgaGFsZndvcmQgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGhpZ2ggaGFsZndvcmQgCiAgICAgICAgICAgICAgICBpbiB0aGUgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGhpZ2ggaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICAgIDxwPkVhY2ggYml0IGluIEFQU1IuR0UgaXMgc2V0IG9yIGNsZWFyZWQgZm9yIGVhY2ggYnl0ZSBpbiB0aGUgcmV0dXJuIHZhbHVlLCBkZXBlbmRpbmcgb24gCiAgICAgICAgICAgICB0aGUgcmVzdWx0cyBvZiB0aGUgb3BlcmF0aW9uLjxicj4KICAgICAgICAgICAgIElmIDxpPnJlczwvaT4gaXMgdGhlIHJldHVybiB2YWx1ZSwgdGhlbjoKICAgICAgICAgIDwvcD4KICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+aWYgcmVzWzE1OjBdICZnZTsgMCB0aGVuIEFQU1IuR0VbMTowXSA9IDExIGVsc2UgMDA8L2xpPgogICAgICAgICAgICA8bGk+aWYgcmVzWzMxOjE2XSAmZ2U7IDAgdGhlbiBBUFNSLkdFWzM6Ml0gPSAxMSBlbHNlIDAwPC9saT4KICAgICAgICAgPC91bD4gICAgICAKICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpyZXNbMTU6MF0gID0gdmFsMVsxNTowXSAgKyB2YWwyWzMxOjE2XQpyZXNbMzE6MTZdID0gdmFsMVszMToxNl0gLSB2YWwyWzE1OjBdPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19RU0FYIj48L2E+RnVuY3Rpb24gX19RU0FYPC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1FTQVgodWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMik7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIGV4Y2hhbmdlIHRoZSBoYWxmd29yZHMgb2Ygb25lIG9wZXJhbmQsIHRoZW4gc3VidHJhY3QgdGhlIAogICAgICAgICAgaGlnaCBoYWxmd29yZHMgYW5kIGFkZCB0aGUgbG93IGhhbGZ3b3Jkcywgc2F0dXJhdGluZyB0aGUgcmVzdWx0cyB0byB0aGUgMTYtYml0IHNpZ25lZCAKICAgICAgICAgIGludGVnZXIgcmFuZ2UgLTI8c3VwPjE1PC9zdXA+ICZsZTsgeCAmbGU7IDI8c3VwPjE1PC9zdXA+IC0gMS4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UGFyYW1ldGVyPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTpub25lOyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgIDxsaT48Yj52YWwxPC9iPjogZmlyc3Qgb3BlcmFuZCBmb3IgdGhlIGFkZGl0aW9uIGluIHRoZSBsb3cgaGFsZndvcmQsIGFuZCB0aGUgZmlyc3QKICAgICAgICAgICBvcGVyYW5kIGZvciB0aGUgc3VidHJhY3Rpb24gaW4gdGhlIGhpZ2ggaGFsZndvcmQuPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIG9wZXJhbmQgZm9yIHRoZSBhZGRpdGlvbiBpbiB0aGUgaGlnaCBoYWxmd29yZCwgYW5kIHRoZSAKICAgICAgICAgICBzZWNvbmQgb3BlcmFuZCBmb3IgdGhlIHN1YnRyYWN0aW9uIGluIHRoZSBsb3cgaGFsZndvcmQuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJuczo8L3A+CiAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+dGhlIHNhdHVyYXRlZCBhZGRpdGlvbiBvZiB0aGUgbG93IGhhbGZ3b3JkIG9mIHRoZSBmaXJzdCBvcGVyYW5kIGFuZCB0aGUgaGlnaCAKICAgICAgICAgICAgICAgIGhhbGZ3b3JkIG9mIHRoZSBzZWNvbmQgb3BlcmFuZCwgaW4gdGhlIGxvdyBoYWxmd29yZCBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgc2F0dXJhdGVkIHN1YnRyYWN0aW9uIG9mIHRoZSBsb3cgaGFsZndvcmQgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGhpZ2ggCiAgICAgICAgICAgICAgICBoYWxmd29yZCBvZiB0aGUgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGhpZ2ggaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICAgIDxwPlRoZSByZXR1cm5lZCByZXN1bHRzIGFyZSBzYXR1cmF0ZWQgdG8gdGhlIDE2LWJpdCBzaWduZWQgaW50ZWdlciAKICAgICAgICAgICAgIHJhbmdlIC0yPHN1cD4xNTwvc3VwPiAmbGU7IHggJmxlOyAyPHN1cD4xNTwvc3VwPiAtIDEuCiAgICAgICAgICA8L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzE1OjBdICA9IHZhbDFbMTU6MF0gICsgdmFsMlszMToxNl0KcmVzWzMxOjE2XSA9IHZhbDFbMzE6MTZdIC0gdmFsMlsxNTowXTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fU0hTQVgiPjwvYT5GdW5jdGlvbiBfX1NIU0FYPC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1NIU0FYKHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBleGNoYW5nZSB0aGUgdHdvIGhhbGZ3b3JkcyBvZiBvbmUgb3BlcmFuZCwgcGVyZm9ybSBvbmUgCiAgICAgICAgICBzaWduZWQgMTYtYml0IGludGVnZXIgc3VidHJhY3Rpb24gYW5kIG9uZSBzaWduZWQgMTYtYml0IGFkZGl0aW9uLCBhbmQgaGFsdmUgdGhlIHJlc3VsdHMuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IDE2LWJpdCBvcGVyYW5kcy48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgMTYtYml0IG9wZXJhbmRzLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgYWRkaXRpb24gb2YgdGhlIGxvdyBoYWxmd29yZCBpbiB0aGUgZmlyc3Qgb3BlcmFuZCBhbmQgdGhlIGhpZ2ggaGFsZndvcmQgCiAgICAgICAgICAgICAgICBpbiB0aGUgc2Vjb25kIG9wZXJhbmQsIGluIHRoZSBsb3cgaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIGhhbHZlZCBzdWJ0cmFjdGlvbiBvZiB0aGUgbG93IGhhbGZ3b3JkIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBoaWdoIAogICAgICAgICAgICAgICAgaGFsZndvcmQgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBoaWdoIGhhbGZ3b3JkIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzE1OjBdICA9ICh2YWwxWzE1OjBdICArIHZhbDJbMzE6MTZdKSAmZ3Q7Jmd0OyAxCnJlc1szMToxNl0gPSAodmFsMVszMToxNl0gLSB2YWwyWzE1OjBdKSAgJmd0OyZndDsgMTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fVVNBWCI+PC9hPkZ1bmN0aW9uIF9fVVNBWDwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19VU0FYKHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBleGNoYW5nZSB0aGUgaGFsZndvcmRzIG9mIHRoZSBzZWNvbmQgb3BlcmFuZCwgc3VidHJhY3QgdGhlIAogICAgICAgICAgaGlnaCBoYWxmd29yZHMgYW5kIGFkZCB0aGUgbG93IGhhbGZ3b3Jkcy48YnI+CiAgICAgICAgICBUaGUgR0UgYml0cyBpbiB0aGUgQVBTUiBhcmUgc2V0IGFjY29yZGluZyB0byB0aGUgcmVzdWx0cy4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UGFyYW1ldGVyPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTpub25lOyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgIDxsaT48Yj52YWwxPC9iPjogZmlyc3Qgb3BlcmFuZCBmb3IgdGhlIGFkZGl0aW9uIGluIHRoZSBsb3cgaGFsZndvcmQsIGFuZCB0aGUgZmlyc3QKICAgICAgICAgICAgICBvcGVyYW5kIGZvciB0aGUgc3VidHJhY3Rpb24gaW4gdGhlIGhpZ2ggaGFsZndvcmQuPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIG9wZXJhbmQgZm9yIHRoZSBhZGRpdGlvbiBpbiB0aGUgaGlnaCBoYWxmd29yZCwgYW5kIHRoZQogICAgICAgICAgICAgIHNlY29uZCBvcGVyYW5kIGZvciB0aGUgc3VidHJhY3Rpb24gaW4gdGhlIGxvdyBoYWxmd29yZC48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zOjwvcD4KICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT50aGUgYWRkaXRpb24gb2YgdGhlIGxvdyBoYWxmd29yZCBpbiB0aGUgZmlyc3Qgb3BlcmFuZCBhbmQgdGhlIGhpZ2ggaGFsZndvcmQgaW4gdGhlIAogICAgICAgICAgICAgICAgc2Vjb25kIG9wZXJhbmQsIGluIHRoZSBsb3cgaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIHN1YnRyYWN0aW9uIG9mIHRoZSBsb3cgaGFsZndvcmQgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGhpZ2ggaGFsZndvcmQgCiAgICAgICAgICAgICAgICBpbiB0aGUgZmlyc3Qgb3BlcmFuZCwgaW4gdGhlIGhpZ2ggaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICAgIDxwPkVhY2ggYml0IGluIEFQU1IuR0UgaXMgc2V0IG9yIGNsZWFyZWQgZm9yIGVhY2ggYnl0ZSBpbiB0aGUgcmV0dXJuIHZhbHVlLCBkZXBlbmRpbmcgb24gCiAgICAgICAgICAgICB0aGUgcmVzdWx0cyBvZiB0aGUgb3BlcmF0aW9uLjxicj4KICAgICAgICAgICAgIElmIDxpPnJlczwvaT4gaXMgdGhlIHJldHVybiB2YWx1ZSwgdGhlbjoKICAgICAgICAgIDwvcD4KICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+aWYgcmVzWzE1OjBdICZnZTsgMHgxMDAwMCB0aGVuIEFQU1IuR0VbMTowXSA9IDExIGVsc2UgMDA8L2xpPgogICAgICAgICAgICA8bGk+aWYgcmVzWzMxOjE2XSAmZ2U7IDAgdGhlbiBBUFNSLkdFWzM6Ml0gPSAxMSBlbHNlIDAwPC9saT4KICAgICAgICAgPC91bD4gICAgICAKICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpyZXNbMTU6MF0gID0gdmFsMVsxNTowXSAgKyB2YWwyWzMxOjE2XQpyZXNbMzE6MTZdID0gdmFsMVszMToxNl0gLSB2YWwyWzE1OjBdPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19VUVNBWCI+PC9hPkZ1bmN0aW9uIF9fVVFTQVg8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fVVFTQVgodWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMik7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIGV4Y2hhbmdlIHRoZSBoYWxmd29yZHMgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGFuZCBwZXJmb3JtIAogICAgICAgICAgb25lIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyIHN1YnRyYWN0aW9uIGFuZCBvbmUgdW5zaWduZWQgMTYtYml0IGFkZGl0aW9uLCBzYXR1cmF0aW5nIHRoZSAKICAgICAgICAgIHJlc3VsdHMgdG8gdGhlIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHJhbmdlIDAgJmxlOyB4ICZsZTsgMjxzdXA+MTY8L3N1cD4gLSAxLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCAxNi1iaXQgb3BlcmFuZCBmb3IgdGhlIGFkZGl0aW9uIGluIHRoZSBsb3cgaGFsZndvcmQsIGFuZCB0aGUKICAgICAgICAgICAgICBmaXJzdCAxNi1iaXQgb3BlcmFuZCBmb3IgdGhlIHN1YnRyYWN0aW9uIGluIHRoZSBoaWdoIGhhbGZ3b3JkLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCAxNi1iaXQgaGFsZndvcmQgZm9yIHRoZSBhZGRpdGlvbiBpbiB0aGUgaGlnaCBoYWxmd29yZCwKICAgICAgICAgICAgICBhbmQgdGhlIHNlY29uZCAxNi1iaXQgaGFsZndvcmQgZm9yIHRoZSBzdWJ0cmFjdGlvbiBpbiB0aGUgbG93IGhhbGZ3b3JkLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBhZGRpdGlvbiBvZiB0aGUgbG93IGhhbGZ3b3JkIGluIHRoZSBmaXJzdCBvcGVyYW5kIGFuZCB0aGUgaGlnaCBoYWxmd29yZCBpbiB0aGUgCiAgICAgICAgICAgICAgICBzZWNvbmQgb3BlcmFuZCwgaW4gdGhlIGxvdyBoYWxmd29yZCBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgc3VidHJhY3Rpb24gb2YgdGhlIGxvdyBoYWxmd29yZCBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgZnJvbSB0aGUgaGlnaCBoYWxmd29yZCAKICAgICAgICAgICAgICAgIGluIHRoZSBmaXJzdCBvcGVyYW5kLCBpbiB0aGUgaGlnaCBoYWxmd29yZCBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgICAgPHA+VGhlIHJlc3VsdHMgYXJlIHNhdHVyYXRlZCB0byB0aGUgMTYtYml0IHVuc2lnbmVkIGludGVnZXIgCiAgICAgICAgICAgICByYW5nZSAwICZsZTsgeCAmbGU7IDI8c3VwPjE2PC9zdXA+IC0gMS4KICAgICAgICAgIDwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpyZXNbMTU6MF0gID0gdmFsMVsxNTowXSAgKyB2YWwyWzMxOjE2XQpyZXNbMzE6MTZdID0gdmFsMVszMToxNl0gLSB2YWwyWzE1OjBdPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19VSFNBWCI+PC9hPkZ1bmN0aW9uIF9fVUhTQVg8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fVUhTQVgodWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMik7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIGV4Y2hhbmdlIHRoZSBoYWxmd29yZHMgb2YgdGhlIHNlY29uZCBvcGVyYW5kLCBzdWJ0cmFjdCB0aGUgCiAgICAgICAgICBoaWdoIGhhbGZ3b3JkcyBhbmQgYWRkIHRoZSBsb3cgaGFsZndvcmRzLCBoYWx2aW5nIHRoZSByZXN1bHRzLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCBvcGVyYW5kIGZvciB0aGUgYWRkaXRpb24gaW4gdGhlIGxvdyBoYWxmd29yZCwgYW5kIHRoZSBmaXJzdAogICAgICAgICAgICAgIG9wZXJhbmQgZm9yIHRoZSBzdWJ0cmFjdGlvbiBpbiB0aGUgaGlnaCBoYWxmd29yZC48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgb3BlcmFuZCBmb3IgdGhlIGFkZGl0aW9uIGluIHRoZSBoaWdoIGhhbGZ3b3JkLCBhbmQgdGhlCiAgICAgICAgICAgICAgc2Vjb25kIG9wZXJhbmQgZm9yIHRoZSBzdWJ0cmFjdGlvbiBpbiB0aGUgbG93IGhhbGZ3b3JkLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnM6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBoYWx2ZWQgYWRkaXRpb24gb2YgdGhlIGhpZ2ggaGFsZndvcmQgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGFuZCB0aGUgbG93IAogICAgICAgICAgICAgICAgaGFsZndvcmQgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBsb3cgaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIGhhbHZlZCBzdWJ0cmFjdGlvbiBvZiB0aGUgbG93IGhhbGZ3b3JkIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBoaWdoIAogICAgICAgICAgICAgICAgaGFsZndvcmQgaW4gdGhlIGZpcnN0IG9wZXJhbmQsIGluIHRoZSBoaWdoIGhhbGZ3b3JkIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzE1OjBdICA9ICh2YWwxWzE1OjBdICArIHZhbDJbMzE6MTZdKSAmZ3Q7Jmd0OyAxCnJlc1szMToxNl0gPSAodmFsMVszMToxNl0gLSB2YWwyWzE1OjBdKSAgJmd0OyZndDsgMTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fVVNBRDgiPjwvYT5GdW5jdGlvbiBfX1VTQUQ4PC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1VTQUQ4KHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBwZXJmb3JtIGZvdXIgdW5zaWduZWQgOC1iaXQgc3VidHJhY3Rpb25zLCBhbmQgYWRkIHRoZSAKICAgICAgICAgIGFic29sdXRlIHZhbHVlcyBvZiB0aGUgZGlmZmVyZW5jZXMgdG9nZXRoZXIsIHJldHVybmluZyB0aGUgcmVzdWx0IGFzIGEgc2luZ2xlIHVuc2lnbmVkIAogICAgICAgICAgaW50ZWdlci4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UGFyYW1ldGVyPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTpub25lOyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgIDxsaT48Yj52YWwxPC9iPjogZmlyc3QgZm91ciA4LWJpdCBvcGVyYW5kcyBmb3IgdGhlIHN1YnRyYWN0aW9ucy48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgZm91ciA4LWJpdCBvcGVyYW5kcyBmb3IgdGhlIHN1YnRyYWN0aW9ucy48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdW0gb2YgdGhlIGFic29sdXRlIGRpZmZlcmVuY2VzIG9mOjwvcD4KICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT50aGUgc3VidHJhY3Rpb24gb2YgdGhlIGZpcnN0IGJ5dGUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGZpcnN0IGJ5dGUgaW4gdGhlIAogICAgICAgICAgICAgICAgZmlyc3Qgb3BlcmFuZC48L2xpPgogICAgICAgICAgICA8bGk+dGhlIHN1YnRyYWN0aW9uIG9mIHRoZSBzZWNvbmQgYnl0ZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgZnJvbSB0aGUgc2Vjb25kIGJ5dGUgaW4gCiAgICAgICAgICAgICAgICB0aGUgZmlyc3Qgb3BlcmFuZC48L2xpPgogICAgICAgICAgICA8bGk+dGhlIHN1YnRyYWN0aW9uIG9mIHRoZSB0aGlyZCBieXRlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSB0aGlyZCBieXRlIGluIHRoZSAKICAgICAgICAgICAgICAgIGZpcnN0IG9wZXJhbmQuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgZm91cnRoIGJ5dGUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGZvdXJ0aCBieXRlIGluIAogICAgICAgICAgICAgICAgdGhlIGZpcnN0IG9wZXJhbmQuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgICA8cD5UaGUgc3VtIGlzIHJldHVybmVkIGFzIGEgc2luZ2xlIHVuc2lnbmVkIGludGVnZXIuPC9wPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CmFic2RpZmYxICA9IHZhbDFbNzowXSAgIC0gdmFsMls3OjBdCmFic2RpZmYyICA9IHZhbDFbMTU6OF0gIC0gdmFsMlsxNTo4XQphYnNkaWZmMyAgPSB2YWwxWzIzOjE2XSAtIHZhbDJbMjM6MTZdCmFic2RpZmY0ICA9IHZhbDFbMzE6MjRdIC0gdmFsMlszMToyNF0KcmVzWzMxOjBdID0gYWJzZGlmZjEgKyBhYnNkaWZmMiArIGFic2RpZmYzICsgYWJzZGlmZjQ8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1VTQURBOCI+PC9hPkZ1bmN0aW9uIF9fVVNBREE4PC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1VTQURBOCh1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyLCB1aW50MzJfdCB2YWwzKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSBmb3VyIHVuc2lnbmVkIDgtYml0IHN1YnRyYWN0aW9ucywgYW5kIGFkZCB0aGUgCiAgICAgICAgICBhYnNvbHV0ZSB2YWx1ZXMgb2YgdGhlIGRpZmZlcmVuY2VzIHRvIGEgMzItYml0IGFjY3VtdWxhdGUgb3BlcmFuZC4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UGFyYW1ldGVyPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTpub25lOyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgIDxsaT48Yj52YWwxPC9iPjogZmlyc3QgZm91ciA4LWJpdCBvcGVyYW5kcyBmb3IgdGhlIHN1YnRyYWN0aW9ucy48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgZm91ciA4LWJpdCBvcGVyYW5kcyBmb3IgdGhlIHN1YnRyYWN0aW9ucy48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDM8L2I+OiBhY2N1bXVsYXRpb24gdmFsdWUuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3VtIG9mIHRoZSBhYnNvbHV0ZSBkaWZmZXJlbmNlcyBvZiB0aGUgZm9sbG93aW5nIAogICAgICAgICAgICBieXRlcywgYWRkZWQgdG8gdGhlIGFjY3VtdWxhdGlvbiB2YWx1ZTo8L3A+CiAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgICA8bGk+dGhlIHN1YnRyYWN0aW9uIG9mIHRoZSBmaXJzdCBieXRlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBmaXJzdCBieXRlIGluIHRoZSAKICAgICAgICAgICAgICAgIGZpcnN0IG9wZXJhbmQuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgc2Vjb25kIGJ5dGUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIHNlY29uZCBieXRlIGluIAogICAgICAgICAgICAgICAgdGhlIGZpcnN0IG9wZXJhbmQuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBzdWJ0cmFjdGlvbiBvZiB0aGUgdGhpcmQgYnl0ZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgZnJvbSB0aGUgdGhpcmQgYnl0ZSBpbiB0aGUgCiAgICAgICAgICAgICAgICBmaXJzdCBvcGVyYW5kLjwvbGk+CiAgICAgICAgICAgIDxsaT50aGUgc3VidHJhY3Rpb24gb2YgdGhlIGZvdXJ0aCBieXRlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tIHRoZSBmb3VydGggYnl0ZSBpbiAKICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBvcGVyYW5kLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CmFic2RpZmYxICA9IHZhbDFbNzowXSAgIC0gdmFsMls3OjBdCmFic2RpZmYyICA9IHZhbDFbMTU6OF0gIC0gdmFsMlsxNTo4XQphYnNkaWZmMyAgPSB2YWwxWzIzOjE2XSAtIHZhbDJbMjM6MTZdCmFic2RpZmY0ICA9IHZhbDFbMzE6MjRdIC0gdmFsMlszMToyNF0Kc3VtICAgICAgID0gYWJzZGlmZjEgKyBhYnNkaWZmMiArIGFic2RpZmYzICsgYWJzZGlmZjQKcmVzWzMxOjBdID0gc3VtWzMxOjBdICsgdmFsM1szMTowXTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fU1NBVDE2Ij48L2E+RnVuY3Rpb24gX19TU0FUMTY8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fU1NBVDE2KHVpbnQzMl90IHZhbDEsIGNvbnN0IHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBzYXR1cmF0ZSB0d28gc2lnbmVkIDE2LWJpdCB2YWx1ZXMgdG8gYSBzZWxlY3RlZCBzaWduZWQgcmFuZ2UuPGJyPgogICAgICAgICAgVGhlIFEgYml0IGlzIHNldCBpZiBlaXRoZXIgb3BlcmF0aW9uIHNhdHVyYXRlcy4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UGFyYW1ldGVyPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTpub25lOyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgIDxsaT48Yj52YWwxPC9iPjogdHdvIHNpZ25lZCAxNi1iaXQgdmFsdWVzIHRvIGJlIHNhdHVyYXRlZC48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBiaXQgcG9zaXRpb24gZm9yIHNhdHVyYXRpb24sIGFuIGludGVncmFsIGNvbnN0YW50IGV4cHJlc3Npb24gaW4gdGhlCiAgICAgICAgICAgICAgcmFuZ2UgMSB0byAxNi48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zOjwvcD4KICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT50aGUgc2lnbmVkIHNhdHVyYXRpb24gb2YgdGhlIGxvdyBoYWxmd29yZCBpbiA8aT52YWwxPC9pPiwgc2F0dXJhdGVkIHRvIHRoZSBiaXQgcG9zaXRpb24gCiAgICAgICAgICAgICAgICBzcGVjaWZpZWQgaW4gPGk+dmFsMjwvaT4gYW5kIHJldHVybmVkIGluIHRoZSBsb3cgaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+dGhlIHNpZ25lZCBzYXR1cmF0aW9uIG9mIHRoZSBoaWdoIGhhbGZ3b3JkIGluIDxpPnZhbDE8L2k+LCBzYXR1cmF0ZWQgdG8gdGhlIGJpdCBwb3NpdGlvbiAKICAgICAgICAgICAgICAgIHNwZWNpZmllZCBpbiA8aT52YWwyPC9pPiBhbmQgcmV0dXJuZWQgaW4gdGhlIGhpZ2ggaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpTYXR1cmF0ZSBoYWxmd29yZHMgaW4gdmFsMSB0byB0aGUgc2lnbmVkIHJhbmdlIHNwZWNpZmllZCBieSB0aGUgYml0IHBvc2l0aW9uIGluIHZhbDI8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1VTQVQxNiI+PC9hPkZ1bmN0aW9uIF9fVVNBVDE2PC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1VTQVQxNih1aW50MzJfdCB2YWwxLCBjb25zdCB1aW50MzJfdCB2YWwyKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gc2F0dXJhdGUgdHdvIHNpZ25lZCAxNi1iaXQgdmFsdWVzIHRvIGEgc2VsZWN0ZWQgdW5zaWduZWQgCiAgICAgICAgIHJhbmdlLjxicj4KICAgICAgICAgVGhlIFEgYml0IGlzIHNldCBpZiBlaXRoZXIgb3BlcmF0aW9uIHNhdHVyYXRlcy4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UGFyYW1ldGVyPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTpub25lOyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgIDxsaT48Yj52YWwxPC9iPjogdHdvIDE2LWJpdCB2YWx1ZXMgdGhhdCBhcmUgdG8gYmUgc2F0dXJhdGVkLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IGJpdCBwb3NpdGlvbiBmb3Igc2F0dXJhdGlvbiwgYW5kIG11c3QgYmUgYW4gaW50ZWdyYWwgY29uc3RhbnQgCiAgICAgICAgICAgZXhwcmVzc2lvbiBpbiB0aGUgcmFuZ2UgMCB0byAxNS48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYXR1cmF0aW9uIG9mIHRoZSB0d28gc2lnbmVkIDE2LWJpdCB2YWx1ZXMsIGFzIG5vbi1uZWdhdGl2ZSB2YWx1ZXMuPC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnRoZSBzYXR1cmF0aW9uIG9mIHRoZSBsb3cgaGFsZndvcmQgaW4gPGk+dmFsMTwvaT4sIHNhdHVyYXRlZCB0byB0aGUgYml0IHBvc2l0aW9uIAogICAgICAgICAgICAgICAgc3BlY2lmaWVkIGluIDxpPnZhbDI8L2k+IGFuZCByZXR1cm5lZCBpbiB0aGUgbG93IGhhbGZ3b3JkIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgICAgPGxpPnRoZSBzYXR1cmF0aW9uIG9mIHRoZSBoaWdoIGhhbGZ3b3JkIGluIDxpPnZhbDE8L2k+LCBzYXR1cmF0ZWQgdG8gdGhlIGJpdCBwb3NpdGlvbiAKICAgICAgICAgICAgICAgIHNwZWNpZmllZCBpbiA8aT52YWwyPC9pPiBhbmQgcmV0dXJuZWQgaW4gdGhlIGhpZ2ggaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpTYXR1cmF0ZSBoYWxmd29yZHMgaW4gdmFsMSB0byB0aGUgdW5zaWduZWQgcmFuZ2Ugc3BlY2lmaWVkIGJ5IHRoZSBiaXQgcG9zaXRpb24gaW4gdmFsMjwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fVVhUQjE2Ij48L2E+RnVuY3Rpb24gX19VWFRCMTY8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fVVhUQjE2KHVpbnQzMl90IHZhbCk7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIGV4dHJhY3QgdHdvIDgtYml0IHZhbHVlcyBmcm9tIGFuIG9wZXJhbmQgYW5kIHplcm8tZXh0ZW5kIAogICAgICAgICAgdGhlbSB0byAxNiBiaXRzIGVhY2guCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IHR3byA4LWJpdCB2YWx1ZXMgaW4gdmFsWzc6MF0gYW5kIHZhbFsyMzoxNl0gdG8gYmUgc2lnbi1leHRlbmRlZC48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSA4LWJpdCB2YWx1ZXMgemVyby1leHRlbmRlZCB0byAxNi1iaXQgdmFsdWVzLjwvcD4KICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICAgIDxsaT56ZXJvLWV4dGVuZGVkIHZhbHVlIG9mIHZhbFs3OjBdIGluIHRoZSBsb3cgaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgICA8bGk+emVyby1leHRlbmRlZCB2YWx1ZSBvZiB2YWxbMjM6MTZdIGluIHRoZSBoaWdoIGhhbGZ3b3JkIG9mIHRoZSByZXR1cm4gdmFsdWUuPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzE1OjBdICA9IFplcm9FeHRlbmRlZCh2YWxbNzowXSAgKQpyZXNbMzE6MTZdID0gWmVyb0V4dGVuZGVkKHZhbFsyMzoxNl0pPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19VWFRBQjE2Ij48L2E+RnVuY3Rpb24gX19VWFRBQjE2PC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1VYVEFCMTYodWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMik7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIGV4dHJhY3QgdHdvIDgtYml0IHZhbHVlcyBmcm9tIG9uZSBvcGVyYW5kLCB6ZXJvLWV4dGVuZCB0aGVtIAogICAgICAgICAgdG8gMTYgYml0cyBlYWNoLCBhbmQgYWRkIHRoZSByZXN1bHRzIHRvIHR3byAxNi1iaXQgdmFsdWVzIGZyb20gYW5vdGhlciBvcGVyYW5kLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiB2YWx1ZSBhZGRlZCB0byB0aGUgemVyby1leHRlbmRlZCB0byAxNi1iaXQgdmFsdWVzLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHR3byA4LWJpdCB2YWx1ZXMgdG8gYmUgZXh0cmFjdGVkIGFuZCB6ZXJvLWV4dGVuZGVkLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIDgtYml0IHZhbHVlcyBpbiA8aT52YWwyPC9pPiwgemVyby1leHRlbmRlZCB0byAxNi1iaXQgdmFsdWVzIAogICAgICAgICAgICBhbmQgYWRkZWQgdG8gPGk+dmFsMTwvaT4uPC9wPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnJlc1sxNTowXSAgPSBaZXJvRXh0KHZhbDJbNzowXSAgIHRvIDE2IGJpdHMpICsgdmFsMVsxNTowXQpyZXNbMzE6MTZdID0gWmVyb0V4dCh2YWwyWzMxOjE2XSB0byAxNiBiaXRzKSArIHZhbDFbMzE6MTZdPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19TWFRCMTYiPjwvYT5GdW5jdGlvbiBfX1NYVEIxNjwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19TWFRCMTYodWludDMyX3QgdmFsKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gZXh0cmFjdCB0d28gOC1iaXQgdmFsdWVzIGZyb20gYW4gb3BlcmFuZCBhbmQgc2lnbi1leHRlbmQgCiAgICAgICAgICB0aGVtIHRvIDE2IGJpdHMgZWFjaC4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UGFyYW1ldGVyPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTpub25lOyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgIDxsaT48Yj52YWwxPC9iPjogdHdvIDgtYml0IHZhbHVlcyBpbiB2YWxbNzowXSBhbmQgdmFsWzIzOjE2XSB0byBiZSBzaWduLWV4dGVuZGVkLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIDgtYml0IHZhbHVlcyBzaWduLWV4dGVuZGVkIHRvIDE2LWJpdCB2YWx1ZXMuPC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPnNpZ24tZXh0ZW5kZWQgdmFsdWUgb2YgdmFsWzc6MF0gaW4gdGhlIGxvdyBoYWxmd29yZCBvZiB0aGUgcmV0dXJuIHZhbHVlLjwvbGk+CiAgICAgICAgICAgIDxsaT5zaWduLWV4dGVuZGVkIHZhbHVlIG9mIHZhbFsyMzoxNl0gaW4gdGhlIGhpZ2ggaGFsZndvcmQgb2YgdGhlIHJldHVybiB2YWx1ZS48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpyZXNbMTU6MF0gID0gU2lnbkV4dGVuZGVkKHZhbFs3OjBdCnJlc1szMToxNl0gPSBTaWduRXh0ZW5kZWQodmFsWzIzOjE2XTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fU1hUQUIxNiI+PC9hPkZ1bmN0aW9uIF9fU1hUQUIxNjwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19TWFRBQjE2KHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBleHRyYWN0IHR3byA4LWJpdCB2YWx1ZXMgZnJvbSB0aGUgc2Vjb25kIG9wZXJhbmQgKGF0IGJpdCAKICAgICAgICAgIHBvc2l0aW9ucyBbNzowXSBhbmQgWzIzOjE2XSksIHNpZ24tZXh0ZW5kIHRoZW0gdG8gMTYtYml0cyBlYWNoLCBhbmQgYWRkIHRoZSByZXN1bHRzIHRvIHRoZSAKICAgICAgICAgIGZpcnN0IG9wZXJhbmQuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IHZhbHVlcyBhZGRlZCB0byB0aGUgemVyby1leHRlbmRlZCB0byAxNi1iaXQgdmFsdWVzLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHR3byA4LWJpdCB2YWx1ZXMgdG8gYmUgZXh0cmFjdGVkIGFuZCB6ZXJvLWV4dGVuZGVkLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFkZGl0aW9uIG9mIDxpPnZhbDE8L2k+IGFuZCA8aT52YWwyPC9pPiwgd2hlcmUgdGhlIDgtYml0IHZhbHVlcyBpbiAKICAgICAgICAgICAgdmFsMls3OjBdIGFuZCB2YWwyWzIzOjE2XSBoYXZlIGJlZW4gZXh0cmFjdGVkIGFuZCBzaWduLWV4dGVuZGVkIHByaW9yIHRvIHRoZSBhZGRpdGlvbi48L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzE1OjBdICA9IHZhbDFbMTU6MF0gICsgU2lnbkV4dGVuZGVkKHZhbDJbNzowXSkKcmVzWzMxOjE2XSA9IHZhbDFbMzE6MTZdICsgU2lnbkV4dGVuZGVkKHZhbDJbMjM6MTZdKTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fU01VQUQiPjwvYT5GdW5jdGlvbiBfX1NNVUFEPC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1NNVUFEKHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBJdCBlbmFibGVzIHlvdSB0byBwZXJmb3JtIHR3byAxNi1iaXQgc2lnbmVkIG11bHRpcGxpY2F0aW9ucywgYWRkaW5nIHRoZSAKICAgICAgICAgIHByb2R1Y3RzIHRvZ2V0aGVyLjxicj4KICAgICAgICAgIFRoZSBRIGJpdCBpcyBzZXQgaWYgdGhlIGFkZGl0aW9uIG92ZXJmbG93cy4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UGFyYW1ldGVyPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTpub25lOyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgIDxsaT48Yj52YWwxPC9iPjogZmlyc3QgMTYtYml0IG9wZXJhbmRzIGZvciBlYWNoIG11bHRpcGxpY2F0aW9uLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCAxNi1iaXQgb3BlcmFuZHMgZm9yIGVhY2ggbXVsdGlwbGljYXRpb24uPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3VtIG9mIHRoZSBwcm9kdWN0cyBvZiB0aGUgdHdvIDE2LWJpdCBzaWduZWQgbXVsdGlwbGljYXRpb25zLjwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpwMSA9IHZhbDFbMTU6MF0gICogdmFsMlsxNTowXQpwMiA9IHZhbDFbMzE6MTZdICogdmFsMlszMToxNl0KcmVzWzMxOjBdID0gcDEgKyBwMjwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fU01VQURYIj48L2E+RnVuY3Rpb24gX19TTVVBRFg8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fU01VQURYKHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBwZXJmb3JtIHR3byAxNi1iaXQgc2lnbmVkIG11bHRpcGxpY2F0aW9ucyB3aXRoIGV4Y2hhbmdlZAogICAgICAgICAgaGFsZndvcmRzIG9mIHRoZSBzZWNvbmQgb3BlcmFuZCwgYWRkaW5nIHRoZSBwcm9kdWN0cyB0b2dldGhlci48YnI+CiAgICAgICAgICBUaGUgUSBiaXQgaXMgc2V0IGlmIHRoZSBhZGRpdGlvbiBvdmVyZmxvd3MuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IDE2LWJpdCBvcGVyYW5kcyBmb3IgZWFjaCBtdWx0aXBsaWNhdGlvbi48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgMTYtYml0IG9wZXJhbmRzIGZvciBlYWNoIG11bHRpcGxpY2F0aW9uLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHN1bSBvZiB0aGUgcHJvZHVjdHMgb2YgdGhlIHR3byAxNi1iaXQgc2lnbmVkIG11bHRpcGxpY2F0aW9ucyB3aXRoIGV4Y2hhbmdlZAogICAgICAgICAgICBoYWxmd29yZHMgb2YgdGhlIHNlY29uZCBvcGVyYW5kLjwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpwMSA9IHZhbDFbMTU6MF0gICogdmFsMlszMToxNl0KcDIgPSB2YWwxWzMxOjE2XSAqIHZhbDJbMTU6MF0KcmVzWzMxOjBdID0gcDEgKyBwMjwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fU01MQUQiPjwvYT5GdW5jdGlvbiBfX1NNTEFEPC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1NNTEFEKHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIsIHVpbnQzMl90IHZhbDMpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBwZXJmb3JtIHR3byBzaWduZWQgMTYtYml0IG11bHRpcGxpY2F0aW9ucywgYWRkaW5nIGJvdGggCiAgICAgICAgICByZXN1bHRzIHRvIGEgMzItYml0IGFjY3VtdWxhdGUgb3BlcmFuZC48YnI+CiAgICAgICAgICBUaGUgUSBiaXQgaXMgc2V0IGlmIHRoZSBhZGRpdGlvbiBvdmVyZmxvd3MuIE92ZXJmbG93IGNhbm5vdCBvY2N1ciBkdXJpbmcgdGhlIG11bHRpcGxpY2F0aW9ucy4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UGFyYW1ldGVyPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTpub25lOyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgIDxsaT48Yj52YWwxPC9iPjogZmlyc3QgMTYtYml0IG9wZXJhbmRzIGZvciBlYWNoIG11bHRpcGxpY2F0aW9uLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCAxNi1iaXQgb3BlcmFuZHMgZm9yIGVhY2ggbXVsdGlwbGljYXRpb24uPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogYWNjdW11bGF0ZSB2YWx1ZS48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcm9kdWN0IG9mIGVhY2ggbXVsdGlwbGljYXRpb24gYWRkZWQgdG8gdGhlIGFjY3VtdWxhdGUgCiAgICAgICAgICAgIHZhbHVlLCBhcyBhIDMyLWJpdCBpbnRlZ2VyLjwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpwMSA9IHZhbDFbMTU6MF0gICogdmFsMlsxNTowXQpwMiA9IHZhbDFbMzE6MTZdICogdmFsMlszMToxNl0KcmVzWzMxOjBdID0gcDEgKyBwMiArIHZhbDNbMzE6MF08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1NNTEFEWCI+PC9hPkZ1bmN0aW9uIF9fU01MQURYPC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1NNTEFEWCh1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyLCB1aW50MzJfdCB2YWwzKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSB0d28gc2lnbmVkIDE2LWJpdCBtdWx0aXBsaWNhdGlvbnMgd2l0aCBleGNoYW5nZWQKICAgICAgICAgIGhhbGZ3b3JkcyBvZiB0aGUgc2Vjb25kIG9wZXJhbmQsIGFkZGluZyBib3RoIHJlc3VsdHMgdG8gYSAzMi1iaXQgYWNjdW11bGF0ZSBvcGVyYW5kLjxicj4KICAgICAgICAgIFRoZSBRIGJpdCBpcyBzZXQgaWYgdGhlIGFkZGl0aW9uIG92ZXJmbG93cy4gT3ZlcmZsb3cgY2Fubm90IG9jY3VyIGR1cmluZyB0aGUgbXVsdGlwbGljYXRpb25zLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCAxNi1iaXQgb3BlcmFuZHMgZm9yIGVhY2ggbXVsdGlwbGljYXRpb24uPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIDE2LWJpdCBvcGVyYW5kcyBmb3IgZWFjaCBtdWx0aXBsaWNhdGlvbi48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBhY2N1bXVsYXRlIHZhbHVlLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByb2R1Y3Qgb2YgZWFjaCBtdWx0aXBsaWNhdGlvbiB3aXRoIGV4Y2hhbmdlZAogICAgICAgICAgICBoYWxmd29yZHMgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGFkZGVkIHRvIHRoZSBhY2N1bXVsYXRlIHZhbHVlLCBhcyBhIDMyLWJpdCBpbnRlZ2VyLjwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpwMSA9IHZhbDFbMTU6MF0gICogdmFsMlszMToxNl0KcDIgPSB2YWwxWzMxOjE2XSAqIHZhbDJbMTU6MF0KcmVzWzMxOjBdID0gcDEgKyBwMiArIHZhbDNbMzE6MF08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1NNTEFMRCI+PC9hPkZ1bmN0aW9uIF9fU01MQUxEPC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50NjRfdCBfX1NNTEFMRCh1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyLCB1aW50NjRfdCB2YWwzKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSB0d28gc2lnbmVkIDE2LWJpdCBtdWx0aXBsaWNhdGlvbnMsIGFkZGluZyBib3RoIAogICAgICAgICAgcmVzdWx0cyB0byBhIDY0LWJpdCBhY2N1bXVsYXRlIG9wZXJhbmQuIE92ZXJmbG93IGlzIG9ubHkgcG9zc2libGUgYXMgYSByZXN1bHQgb2YgdGhlIDY0LWJpdCAKICAgICAgICAgIGFkZGl0aW9uLiBUaGlzIG92ZXJmbG93IGlzIG5vdCBkZXRlY3RlZCBpZiBpdCBvY2N1cnMuIEluc3RlYWQsIHRoZSByZXN1bHQgd3JhcHMgYXJvdW5kIAogICAgICAgICAgbW9kdWxvMjxzdXA+NjQ8L3N1cD4uCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IDE2LWJpdCBvcGVyYW5kcyBmb3IgZWFjaCBtdWx0aXBsaWNhdGlvbi48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgMTYtYml0IG9wZXJhbmRzIGZvciBlYWNoIG11bHRpcGxpY2F0aW9uLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IGFjY3VtdWxhdGUgdmFsdWUuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgcHJvZHVjdCBvZiBlYWNoIG11bHRpcGxpY2F0aW9uIGFkZGVkIHRvIHRoZSBhY2N1bXVsYXRlIHZhbHVlLjwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpwMSA9IHZhbDFbMTU6MF0gICogdmFsMlsxNTowXQpwMiA9IHZhbDFbMzE6MTZdICogdmFsMlszMToxNl0Kc3VtID0gcDEgKyBwMiArIHZhbDNbNjM6MzJdWzMxOjBdCnJlc1s2MzozMl0gPSBzdW1bNjM6MzJdCnJlc1szMTowXSAgPSBzdW1bMzE6MF08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1NNTEFMRFgiPjwvYT5GdW5jdGlvbiBfX1NNTEFMRFg8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVuc2lnbmVkIGxvbmcgbG9uZyBfX1NNTEFMRFgodWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMiwgdW5zaWduZWQgbG9uZyBsb25nIHZhbDMpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBleGNoYW5nZSB0aGUgaGFsZndvcmRzIG9mIHRoZSBzZWNvbmQgb3BlcmFuZCwgYW5kIHBlcmZvcm0gCiAgICAgICAgICB0d28gc2lnbmVkIDE2LWJpdCBtdWx0aXBsaWNhdGlvbnMsIGFkZGluZyBib3RoIHJlc3VsdHMgdG8gYSA2NC1iaXQgYWNjdW11bGF0ZSBvcGVyYW5kLiAKICAgICAgICAgIE92ZXJmbG93IGlzIG9ubHkgcG9zc2libGUgYXMgYSByZXN1bHQgb2YgdGhlIDY0LWJpdCBhZGRpdGlvbi4gVGhpcyBvdmVyZmxvdyBpcyBub3QgZGV0ZWN0ZWQgCiAgICAgICAgICBpZiBpdCBvY2N1cnMuIEluc3RlYWQsIHRoZSByZXN1bHQgd3JhcHMgYXJvdW5kIG1vZHVsbzI8c3VwPjY0PC9zdXA+LgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCAxNi1iaXQgb3BlcmFuZHMgZm9yIGVhY2ggbXVsdGlwbGljYXRpb24uPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIDE2LWJpdCBvcGVyYW5kcyBmb3IgZWFjaCBtdWx0aXBsaWNhdGlvbi48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBhY2N1bXVsYXRlIHZhbHVlLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByb2R1Y3Qgb2YgZWFjaCBtdWx0aXBsaWNhdGlvbiBhZGRlZCB0byB0aGUgYWNjdW11bGF0ZSB2YWx1ZS48L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcDEgPSB2YWwxWzE1OjBdICAqIHZhbDJbMzE6MTZdCnAyID0gdmFsMVszMToxNl0gKiB2YWwyWzE1OjBdCnN1bSA9IHAxICsgcDIgKyB2YWwzWzYzOjMyXVszMTowXQpyZXNbNjM6MzJdID0gc3VtWzYzOjMyXQpyZXNbMzE6MF0gPSBzdW1bMzE6MF08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1NNVVNEIj48L2E+RnVuY3Rpb24gX19TTVVTRDwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19TTVVTRCh1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSB0d28gMTYtYml0IHNpZ25lZCBtdWx0aXBsaWNhdGlvbnMsIHRha2luZyB0aGUgCiAgICAgICAgICBkaWZmZXJlbmNlIG9mIHRoZSBwcm9kdWN0cyBieSBzdWJ0cmFjdGluZyB0aGUgaGlnaCBoYWxmd29yZCBwcm9kdWN0IGZyb20gdGhlIGxvdyAKICAgICAgICAgIGhhbGZ3b3JkIHByb2R1Y3QuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IDE2LWJpdCBvcGVyYW5kcyBmb3IgZWFjaCBtdWx0aXBsaWNhdGlvbi48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgMTYtYml0IG9wZXJhbmRzIGZvciBlYWNoIG11bHRpcGxpY2F0aW9uLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGRpZmZlcmVuY2Ugb2YgdGhlIHByb2R1Y3RzIG9mIHRoZSB0d28gMTYtYml0IHNpZ25lZCBtdWx0aXBsaWNhdGlvbnMuPC9wPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnAxID0gdmFsMVsxNTowXSAgKiB2YWwyWzE1OjBdCnAyID0gdmFsMVszMToxNl0gKiB2YWwyWzMxOjE2XQpyZXNbMzE6MF0gPSBwMSAtIHAyPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iX19TTVVTRFgiPjwvYT5GdW5jdGlvbiBfX1NNVVNEWDwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19TTVVTRFgodWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMik7PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD5UaGlzIGZ1bmN0aW9uIGVuYWJsZXMgeW91IHRvIHBlcmZvcm0gdHdvIDE2LWJpdCBzaWduZWQgbXVsdGlwbGljYXRpb25zLCBzdWJ0cmFjdGluZyBvbmUgCiAgICAgICAgICBvZiB0aGUgcHJvZHVjdHMgZnJvbSB0aGUgb3RoZXIuIFRoZSBoYWxmd29yZHMgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGFyZSBleGNoYW5nZWQgCiAgICAgICAgICBiZWZvcmUgcGVyZm9ybWluZyB0aGUgYXJpdGhtZXRpYy4gVGhpcyBwcm9kdWNlcyB0b3AgKiBib3R0b20gYW5kIGJvdHRvbSAqIHRvcCAKICAgICAgICAgIG11bHRpcGxpY2F0aW9uLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCAxNi1iaXQgb3BlcmFuZHMgZm9yIGVhY2ggbXVsdGlwbGljYXRpb24uPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIDE2LWJpdCBvcGVyYW5kcyBmb3IgZWFjaCBtdWx0aXBsaWNhdGlvbi48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBkaWZmZXJlbmNlIG9mIHRoZSBwcm9kdWN0cyBvZiB0aGUgdHdvIDE2LWJpdCBzaWduZWQgbXVsdGlwbGljYXRpb25zLjwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpwMSA9IHZhbDFbMTU6MF0gICogdmFsMlszMToxNl0KcDIgPSB2YWwxWzMxOjE2XSAqIHZhbDJbMTU6MF0KcmVzWzMxOjBdID0gcDEgLSBwMjwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fU01MU0QiPjwvYT5GdW5jdGlvbiBfX1NNTFNEPC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBfX1NNTFNEKHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIsIHVpbnQzMl90IHZhbDMpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBwZXJmb3JtIHR3byAxNi1iaXQgc2lnbmVkIG11bHRpcGxpY2F0aW9ucywgdGFrZSB0aGUgCiAgICAgICAgICBkaWZmZXJlbmNlIG9mIHRoZSBwcm9kdWN0cywgc3VidHJhY3RpbmcgdGhlIGhpZ2ggaGFsZndvcmQgcHJvZHVjdCBmcm9tIHRoZSBsb3cgaGFsZndvcmQgCiAgICAgICAgICBwcm9kdWN0LCBhbmQgYWRkIHRoZSBkaWZmZXJlbmNlIHRvIGEgMzItYml0IGFjY3VtdWxhdGUgb3BlcmFuZC48YnI+CiAgICAgICAgICBUaGUgUSBiaXQgaXMgc2V0IGlmIHRoZSBhY2N1bXVsYXRpb24gb3ZlcmZsb3dzLiBPdmVyZmxvdyBjYW5ub3Qgb2NjdXIgZHVyaW5nIHRoZSBtdWx0aXBsaWNhdGlvbnMgb3IgdGhlIAogICAgICAgICAgc3VidHJhY3Rpb24uCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IDE2LWJpdCBvcGVyYW5kcyBmb3IgZWFjaCBtdWx0aXBsaWNhdGlvbi48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgMTYtYml0IG9wZXJhbmRzIGZvciBlYWNoIG11bHRpcGxpY2F0aW9uLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMzwvYj46IGFjY3VtdWxhdGUgdmFsdWUuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGUgcHJvZHVjdCBvZiBlYWNoIG11bHRpcGxpY2F0aW9uLCBhZGRlZCAKICAgICAgICAgICAgdG8gdGhlIGFjY3VtdWxhdGUgdmFsdWUuPC9wPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5PcGVyYXRpb248L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnAxID0gdmFsMVsxNTowXSAgKiB2YWwyWzE1OjBdCnAyID0gdmFsMVszMToxNl0gKiB2YWwyWzMxOjE2XQpyZXNbMzE6MF0gPSBwMSAtIHAyICsgdmFsM1szMTowXTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fU01MU0RYIj48L2E+RnVuY3Rpb24gX19TTUxTRFg8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fU01MU0RYKHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIsIHVpbnQzMl90IHZhbDMpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBleGNoYW5nZSB0aGUgaGFsZndvcmRzIGluIHRoZSBzZWNvbmQgb3BlcmFuZCwgdGhlbiBwZXJmb3JtIAogICAgICAgICAgdHdvIDE2LWJpdCBzaWduZWQgbXVsdGlwbGljYXRpb25zLiBUaGUgZGlmZmVyZW5jZSBvZiB0aGUgcHJvZHVjdHMgaXMgYWRkZWQgdG8gYSAzMi1iaXQgCiAgICAgICAgICBhY2N1bXVsYXRlIG9wZXJhbmQuPGJyPgogICAgICAgICAgVGhlIFEgYml0IGlzIHNldCBpZiB0aGUgYWRkaXRpb24gb3ZlcmZsb3dzLiBPdmVyZmxvdyBjYW5ub3Qgb2NjdXIgZHVyaW5nIHRoZSBtdWx0aXBsaWNhdGlvbnMgb3IgdGhlIHN1YnRyYWN0aW9uLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCAxNi1iaXQgb3BlcmFuZHMgZm9yIGVhY2ggbXVsdGlwbGljYXRpb24uPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIDE2LWJpdCBvcGVyYW5kcyBmb3IgZWFjaCBtdWx0aXBsaWNhdGlvbi48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDM8L2I+OiBhY2N1bXVsYXRlIHZhbHVlLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGRpZmZlcmVuY2Ugb2YgdGhlIHByb2R1Y3Qgb2YgZWFjaCBtdWx0aXBsaWNhdGlvbiwgYWRkZWQgCiAgICAgICAgICAgIHRvIHRoZSBhY2N1bXVsYXRlIHZhbHVlLjwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpwMSA9IHZhbDFbMTU6MF0gICogdmFsMlszMToxNl0KcDIgPSB2YWwxWzMxOjE2XSAqIHZhbDJbMTU6MF0KcmVzWzMxOjBdID0gcDEgLSBwMiArIHZhbDNbMzE6MF08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1NNTFNMRCI+PC9hPkZ1bmN0aW9uIF9fU01MU0xEPC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5TdW1tYXJ5PC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50NjRfdCBfX1NNTFNMRCh1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyLCB1aW50NjRfdCB2YWwzKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gSXQgZW5hYmxlcyB5b3UgdG8gcGVyZm9ybSB0d28gMTYtYml0IHNpZ25lZCBtdWx0aXBsaWNhdGlvbnMsIHRha2UgdGhlIAogICAgICAgICAgZGlmZmVyZW5jZSBvZiB0aGUgcHJvZHVjdHMsIHN1YnRyYWN0aW5nIHRoZSBoaWdoIGhhbGZ3b3JkIHByb2R1Y3QgZnJvbSB0aGUgbG93IGhhbGZ3b3JkIAogICAgICAgICAgcHJvZHVjdCwgYW5kIGFkZCB0aGUgZGlmZmVyZW5jZSB0byBhIDY0LWJpdCBhY2N1bXVsYXRlIG9wZXJhbmQuIE92ZXJmbG93IGNhbm5vdCBvY2N1ciAKICAgICAgICAgIGR1cmluZyB0aGUgbXVsdGlwbGljYXRpb25zIG9yIHRoZSBzdWJ0cmFjdGlvbi4gT3ZlcmZsb3cgY2FuIG9jY3VyIGFzIGEgcmVzdWx0IG9mIHRoZSA2NC1iaXQgCiAgICAgICAgICBhZGRpdGlvbiwgYW5kIHRoaXMgb3ZlcmZsb3cgaXMgbm90IGRldGVjdGVkLiBJbnN0ZWFkLCB0aGUgcmVzdWx0IHdyYXBzIHJvdW5kIHRvICAKICAgICAgICAgIG1vZHVsbzI8c3VwPjY0PC9zdXA+LgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmaXJzdCAxNi1iaXQgb3BlcmFuZHMgZm9yIGVhY2ggbXVsdGlwbGljYXRpb24uPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwyPC9iPjogc2Vjb25kIDE2LWJpdCBvcGVyYW5kcyBmb3IgZWFjaCBtdWx0aXBsaWNhdGlvbi48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDM8L2I+OiBhY2N1bXVsYXRlIHZhbHVlLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGRpZmZlcmVuY2Ugb2YgdGhlIHByb2R1Y3Qgb2YgZWFjaCBtdWx0aXBsaWNhdGlvbiwgCiAgICAgICAgICAgIGFkZGVkIHRvIHRoZSBhY2N1bXVsYXRlIHZhbHVlLjwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+T3BlcmF0aW9uPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgpwMSA9IHZhbDFbMTU6MF0gICogdmFsMlsxNTowXQpwMiA9IHZhbDFbMzE6MTZdICogdmFsMlszMToxNl0KcmVzWzYzOjBdID0gcDEgLSBwMiArIHZhbDNbNjM6MF08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1NNTFNMRFgiPjwvYT5GdW5jdGlvbiBfX1NNTFNMRFg8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVuc2lnbmVkIGxvbmcgbG9uZyBfX1NNTFNMRFgodWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMiwgdW5zaWduZWQgbG9uZyBsb25nIHZhbDMpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBleGNoYW5nZSB0aGUgaGFsZndvcmRzIG9mIHRoZSBzZWNvbmQgb3BlcmFuZCwgcGVyZm9ybSB0d28gCiAgICAgICAgICAxNi1iaXQgbXVsdGlwbGljYXRpb25zLCBhZGRpbmcgdGhlIGRpZmZlcmVuY2Ugb2YgdGhlIHByb2R1Y3RzIHRvIGEgNjQtYml0IGFjY3VtdWxhdGUgCiAgICAgICAgICBvcGVyYW5kLiBPdmVyZmxvdyBjYW5ub3Qgb2NjdXIgZHVyaW5nIHRoZSBtdWx0aXBsaWNhdGlvbnMgb3IgdGhlIHN1YnRyYWN0aW9uLiBPdmVyZmxvdyAKICAgICAgICAgIGNhbiBvY2N1ciBhcyBhIHJlc3VsdCBvZiB0aGUgNjQtYml0IGFkZGl0aW9uLCBhbmQgdGhpcyBvdmVyZmxvdyBpcyBub3QgZGV0ZWN0ZWQuIEluc3RlYWQsIAogICAgICAgICAgdGhlIHJlc3VsdCB3cmFwcyByb3VuZCB0byBtb2R1bG8yPHN1cD42NDwvc3VwPi4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UGFyYW1ldGVyPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTpub25lOyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgIDxsaT48Yj52YWwxPC9iPjogZmlyc3QgMTYtYml0IG9wZXJhbmRzIGZvciBlYWNoIG11bHRpcGxpY2F0aW9uLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHNlY29uZCAxNi1iaXQgb3BlcmFuZHMgZm9yIGVhY2ggbXVsdGlwbGljYXRpb24uPC9saT4KICAgICAgICAgIDxsaT48Yj52YWwzPC9iPjogYWNjdW11bGF0ZSB2YWx1ZS48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlJldHVybiBWYWx1ZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgIDxwPlRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBkaWZmZXJlbmNlIG9mIHRoZSBwcm9kdWN0IG9mIGVhY2ggbXVsdGlwbGljYXRpb24sIAogICAgICAgICAgICBhZGRlZCB0byB0aGUgYWNjdW11bGF0ZSB2YWx1ZS48L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcDEgPSB2YWwxWzE1OjBdICAqIHZhbDJbMzE6MTZdCnAyID0gdmFsMVszMToxNl0gKiB2YWwyWzE1OjBdCnJlc1s2MzowXSA9IHAxIC0gcDIgKyB2YWwzWzYzOjBdPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+CgoKPGgzPjxhIG5hbWU9Il9fU0VMIj48L2E+RnVuY3Rpb24gX19TRUw8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fU0VMKHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBpbnNlcnRzIGEgU0VMIGluc3RydWN0aW9uIGludG8gdGhlIGluc3RydWN0aW9uIHN0cmVhbSBnZW5lcmF0ZWQgYnkgdGhlIAogICAgICAgICAgY29tcGlsZXIuIEl0IGVuYWJsZXMgeW91IHRvIHNlbGVjdCBieXRlcyBmcm9tIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLCB3aGVyZWJ5IHRoZSBieXRlcyAKICAgICAgICAgIHRoYXQgYXJlIHNlbGVjdGVkIGRlcGVuZCB1cG9uIHRoZSByZXN1bHRzIG9mIHByZXZpb3VzIFNJTUQgaW5zdHJ1Y3Rpb24gZnVuY3Rpb24uIFRoZSAKICAgICAgICAgIHJlc3VsdHMgb2YgcHJldmlvdXMgU0lNRCBpbnN0cnVjdGlvbiBmdW5jdGlvbiBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIEdyZWF0ZXIgdGhhbiBvciAKICAgICAgICAgIEVxdWFsIGZsYWdzIGluIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlciAoQVBTUikuCiAgICAgICAgICBUaGUgX19TRUwgZnVuY3Rpb24gd29ya3MgZXF1YWxseSB3ZWxsIG9uIGJvdGggaGFsZndvcmQgYW5kIGJ5dGUgb3BlcmFuZCBmdW5jdGlvbiAKICAgICAgICAgIHJlc3VsdHMuIFRoaXMgaXMgYmVjYXVzZSBoYWxmd29yZCBvcGVyYW5kIG9wZXJhdGlvbnMgc2V0IHR3byAoZHVwbGljYXRlKSBHRSBiaXRzIHBlciAKICAgICAgICAgIHZhbHVlLgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5QYXJhbWV0ZXI8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXRvcDowcHgiPgogICAgICAgICAgPGxpPjxiPnZhbDE8L2I+OiBmb3VyIHNlbGVjdGFibGUgOC1iaXQgdmFsdWVzLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IGZvdXIgc2VsZWN0YWJsZSA4LWJpdCB2YWx1ZXMuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5SZXR1cm4gVmFsdWU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgICA8cD5UaGUgZnVuY3Rpb24gc2VsZWN0cyBieXRlcyBmcm9tIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIHRoZW0gaW4gdGhlIAogICAgICAgICAgICByZXR1cm4gdmFsdWUsIHJlcywgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgY3JpdGVyaWE6PC9wPgogICAgICAgICA8dWwgc3R5bGU9Im1hcmdpbi10b3A6MHB4Ij4KICAgICAgICAgICAgPGxpPmlmIEFQU1IuR0VbMF0gPT0gMSB0aGVuIHJlc1s3OjBdID0gdmFsMVs3OjBdIGVsc2UgcmVzWzc6MF0gPSB2YWwyWzc6MF08L2xpPgogICAgICAgICAgICA8bGk+aWYgQVBTUi5HRVsxXSA9PSAxIHRoZW4gcmVzWzE1OjhdID0gdmFsMVsxNTo4XSBlbHNlIHJlc1sxNTo4XSA9IHZhbDJbMTU6OF08L2xpPgogICAgICAgICAgICA8bGk+aWYgQVBTUi5HRVsyXSA9PSAxIHRoZW4gcmVzWzIzOjE2XSA9IHZhbDFbMjM6MTZdIGVsc2UgcmVzWzIzOjE2XSA9IHZhbDJbMjM6MTZdPC9saT4KICAgICAgICAgICAgPGxpPmlmIEFQU1IuR0VbM10gPT0gMSB0aGVuIHJlc1szMTsyNF0gPSB2YWwxWzMxOjI0XSBlbHNlIHJlcyA9IHZhbDJbMzE6MjRdPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICA8L3Rib2R5Pgo8L3RhYmxlPgoKPGgzPjxhIG5hbWU9Il9fUUFERCI+PC9hPkZ1bmN0aW9uIF9fUUFERDwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+U3VtbWFyeTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3QgX19RQUREKHVpbnQzMl90IHZhbDEsIHVpbnQzMl90IHZhbDIpOzwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICA8dGQ+VGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBvYnRhaW4gdGhlIHNhdHVyYXRpbmcgYWRkIG9mIHR3byBpbnRlZ2Vycy48YnI+CiAgICAgICAgIFRoZSBRIGJpdCBpcyBzZXQgaWYgdGhlIG9wZXJhdGlvbiBzYXR1cmF0ZXMuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IGZpcnN0IHN1bW1hbmQgb2YgdGhlIHNhdHVyYXRpbmcgYWRkIG9wZXJhdGlvbi48L2xpPgogICAgICAgICAgPGxpPjxiPnZhbDI8L2I+OiBzZWNvbmQgc3VtbWFuZCBvZiB0aGUgc2F0dXJhdGluZyBhZGQgb3BlcmF0aW9uLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhdHVyYXRpbmcgYWRkaXRpb24gb2YgdmFsMSBhbmQgdmFsMi48L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzMxOjBdID0gU0FUKHZhbDEgKyBTQVQodmFsMiAqIDIpKTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJfX1FTVUIiPjwvYT5GdW5jdGlvbiBfX1FTVUI8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPlN1bW1hcnk8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IF9fUVNVQih1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyKTs8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgPHRkPlRoaXMgZnVuY3Rpb24gZW5hYmxlcyB5b3UgdG8gb2J0YWluIHRoZSBzYXR1cmF0aW5nIHN1YnRyYWN0aW9uIG9mIHR3byBpbnRlZ2Vycy48YnI+CiAgICAgICAgIFRoZSBRIGJpdCBpcyBzZXQgaWYgdGhlIG9wZXJhdGlvbiBzYXR1cmF0ZXMuCiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPlBhcmFtZXRlcjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6bm9uZTsgbWFyZ2luLWxlZnQ6MHB4OyBtYXJnaW4tdG9wOjBweCI+CiAgICAgICAgICA8bGk+PGI+dmFsMTwvYj46IG1pbnVlbmQgb2YgdGhlIHNhdHVyYXRpbmcgc3VidHJhY3Rpb24gb3BlcmF0aW9uLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsMjwvYj46IHN1YnRyYWhlbmQgb2YgdGhlIHNhdHVyYXRpbmcgc3VidHJhY3Rpb24gb3BlcmF0aW9uLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQ+PGI+UmV0dXJuIFZhbHVlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhdHVyYXRpbmcgc3VidHJhY3Rpb24gb2YgdmFsMSBhbmQgdmFsMi48L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgICAgPHRkPjxiPk9wZXJhdGlvbjwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KcmVzWzMxOjBdID0gU0FUKHZhbDEgLSBTQVQodmFsMiAqIDIpKTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KCiAgPC90Ym9keT4KPC90YWJsZT4KCjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIC0tPgo8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAtLT4KPHA+Jm5ic3A7PC9wPgo8aDI+PGEgbmFtZT0iRXhhbXBsZXMiPjwvYT5FeGFtcGxlczwvaDI+CjxwPkZvbGxvd2luZyBhcmUgc29tZSBjb2RpbmcgZXhhbXBsZXMgdXNpbmcgdGhlIFNJTUQgZnVuY3Rpb25zOgo8L3A+Cgo8dGFibGUgY2xhc3M9Imt0IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGggY2xhc3M9Imt0Ij5OYW1lPC90aD4KICAgICAgPHRoIGNsYXNzPSJrdCI+RGVzY3JpcHRpb248L3RoPgogICAgPC90cj4KIAogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjQWRkaXRpb24iPkFkZGl0aW9uPC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5BZGQgdHdvIHZhbHVlcyB1c2luZyBTSU1EIGZ1bmN0aW9uPC90ZD4KICAgICAgPC90cj4KICAgIDwvdHI+CgogICAgPHRyPgogICAgICA8dGQgY2xhc3M9Imt0Ij48Yj48YSBocmVmPSIjQWRkaXRpb24iPlN1YnRyYWN0aW9uPC9hPjwvYj48L3RkPgogICAgICA8dGQgY2xhc3M9Imt0Ij5TdWJ0cmFjdCB0d28gdmFsdWVzIHVzaW5nIFNJTUQgZnVuY3Rpb248L3RkPgogICAgICA8L3RyPgogICAgPC90cj4KCiAgICA8dHI+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPjxiPjxhIGhyZWY9IiNNdWx0aXBsaWNhdGlvbiI+TXVsdGlwbGljYXRpb248L2E+PC9iPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0ia3QiPlBlcmZvcm1pbmcgYSBtdWx0aXBsaWNhdGlvbiB1c2luZyBTSU1EIGZ1bmN0aW9uPC90ZD4KICAgICAgPC90cj4KICAgIDwvdHI+CgogIDwvdGJvZHk+CjwvdGFibGU+CgoKPGgzPjxhIG5hbWU9IkFkZGl0aW9uIj48L2E+QWRkaXRpb248L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjUiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPjxiPkV4YW1wbGU8L2I+PC90ZD4KICAgICAgPHRkPgogICAgICAgIDxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweCI+CnVpbnQzMl90IGFkZF9oYWxmd29yZHModWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMikKewogICB1aW50MzJfdCByZXM7CiAgIHJlcyA9IF9fU0FERDE2KHZhbDEsIHZhbDIpOwogICByZXR1cm4gcmVzOwp9PC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8aDM+PGEgbmFtZT0iU3VidHJhY3Rpb24iPjwvYT5TdWJ0cmFjdGlvbjwvaDM+Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+PGI+RXhhbXBsZTwvYj48L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHByZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4Ij4KdWludDMyX3Qgc3ViX2hhbGZ3b3Jkcyh1aW50MzJfdCB2YWwxLCB1aW50MzJfdCB2YWwyKQp7CiAgdWludDMyX3QgcmVzOwogIHJlcyA9IF9fU1NVQjE2KHZhbDEsIHZhbDIpOwogIHJldHVybiByZXM7Cn08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjxoMz48YSBuYW1lPSJNdWx0aXBsaWNhdGlvbiI+PC9hPk11bHRpcGxpY2F0aW9uPC9oMz4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSI1Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD48Yj5FeGFtcGxlPC9iPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8cHJlIHN0eWxlPSJtYXJnaW4tbGVmdDowcHgiPgp1aW50MzJfdCBkdWFsX211bF9hZGRfcHJvZHVjdHModWludDMyX3QgdmFsMSwgdWludDMyX3QgdmFsMikKewogIHVpbnQzMl90IHJlczsKICByZXMgPSBfX1NNVUFEKHZhbDEsIHZhbDIpOwogIHJldHVybiByZXM7Cn08L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCgo8L2JvZHk+CjwvaHRtbD4=