PGh0bWw+Cgo8aGVhZD4KPHRpdGxlPkNNU0lTIERlYnVnIFN1cHBvcnQ8L3RpdGxlPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgo8bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1pY3Jvc29mdCBGcm9udFBhZ2UgMTIuMCI+CjxtZXRhIG5hbWU9IlByb2dJZCIgY29udGVudD0iRnJvbnRQYWdlLkVkaXRvci5Eb2N1bWVudCI+CjxzdHlsZT4KPCEtLQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCktlaWwgU29mdHdhcmUgQ0hNIFN0eWxlIFNoZWV0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KYm9keSAgICAgICAgIHsgY29sb3I6ICMwMDAwMDA7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7IGZvbnQtc2l6ZTogNzUlOyBmb250LWZhbWlseTogCiAgICAgICAgICAgICAgIFZlcmRhbmEsIEFyaWFsLCAnU2FucyBTZXJpZicgfQphOmxpbmsgICAgICAgeyBjb2xvcjogIzAwMDBGRjsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgfQphOnZpc2l0ZWQgICAgeyBjb2xvcjogIzAwMDBGRjsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgfQphOmFjdGl2ZSAgICAgeyBjb2xvcjogI0ZGMDAwMDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgfQphOmhvdmVyICAgICAgeyBjb2xvcjogI0ZGMDAwMDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgfQpoMSAgICAgICAgICAgeyBmb250LWZhbWlseTogVmVyZGFuYTsgZm9udC1zaXplOiAxOHB0OyBjb2xvcjogIzAwMDA4MDsgZm9udC13ZWlnaHQ6IGJvbGQ7IAogICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBDZW50ZXI7IG1hcmdpbi1yaWdodDogMyB9CmgyICAgICAgICAgICB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBmb250LXNpemU6IDE0cHQ7IGNvbG9yOiAjMDAwMDgwOyBmb250LXdlaWdodDogYm9sZDsgCiAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNDQ0NDQ0M7IG1hcmdpbi10b3A6IDI0OyBtYXJnaW4tYm90dG9tOiAzOyAKICAgICAgICAgICAgICAgcGFkZGluZzogNiB9CmgzICAgICAgICAgICB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBmb250LXNpemU6IDEwcHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyBiYWNrZ3JvdW5kLWNvbG9yOiAKICAgICAgICAgICAgICAgI0NDQ0NDQzsgbWFyZ2luLXRvcDogMjQ7IG1hcmdpbi1ib3R0b206IDM7IHBhZGRpbmc6IDYgfQpwcmUgICAgICAgICAgeyBmb250LWZhbWlseTogQ291cmllciBOZXc7IGZvbnQtc2l6ZTogMTBwdDsgYmFja2dyb3VuZC1jb2xvcjogI0NDRkZDQzsgCiAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAyNDsgbWFyZ2luLXJpZ2h0OiAyNCB9CnVsICAgICAgICAgICB7IGxpc3Qtc3R5bGUtdHlwZTogc3F1YXJlOyBtYXJnaW4tdG9wOiA2cHQ7IG1hcmdpbi1ib3R0b206IDAgfQpvbCAgICAgICAgICAgeyBtYXJnaW4tdG9wOiA2cHQ7IG1hcmdpbi1ib3R0b206IDAgfQpsaSAgICAgICAgICAgeyBjbGVhcjogYm90aDsgbWFyZ2luLWJvdHRvbTogNnB0IH0KdGFibGUgICAgICAgIHsgZm9udC1zaXplOiAxMDAlOyBib3JkZXItd2lkdGg6IDA7IHBhZGRpbmc6IDAgfQp0aCAgICAgICAgICAgeyBjb2xvcjogI0ZGRkZGRjsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDA4MDsgdGV4dC1hbGlnbjogbGVmdDsgdmVydGljYWwtYWxpZ246IAogICAgICAgICAgICAgICBib3R0b207IHBhZGRpbmctcmlnaHQ6IDZwdCB9CnRyICAgICAgICAgICB7IHRleHQtYWxpZ246IGxlZnQ7IHZlcnRpY2FsLWFsaWduOiB0b3AgfQp0ZCAgICAgICAgICAgeyB0ZXh0LWFsaWduOiBsZWZ0OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBwYWRkaW5nLXJpZ2h0OiA2cHQgfQouVG9vbFQgICAgICAgeyBmb250LXNpemU6IDhwdDsgY29sb3I6ICM4MDgwODAgfQouVGlueVQgICAgICAgeyBmb250LXNpemU6IDhwdDsgdGV4dC1hbGlnbjogQ2VudGVyIH0KY29kZSAgICAgICAgIHsgY29sb3I6ICMwMDAwMDA7IGJhY2tncm91bmQtY29sb3I6ICNFMEUwRTA7IGZvbnQtZmFtaWx5OiAnQ291cmllciBOZXcnLCBDb3VyaWVyOyAKICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEyMCU7IGZvbnQtc3R5bGU6IG5vcm1hbCB9Ci8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTm90ZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpwLm5vdGUgICAgICAgeyBmb250LXdlaWdodDogYm9sZDsgY2xlYXI6IGJvdGg7IG1hcmdpbi1ib3R0b206IDNwdDsgcGFkZGluZy10b3A6IDZwdCB9Ci8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRXhwYW5kaW5nL0NvbnRyYWN0aW5nIERpdmlzaW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiNleHBhbmQgICAgICB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgbWFyZ2luLWJvdHRvbTogM3B0IH0KaW1nLmV4cGFuZCAgIHsgYm9yZGVyLXN0eWxlOiBub25lOyBib3JkZXItd2lkdGg6IG1lZGl1bSB9CmRpdi5leHBhbmQgICB7IGRpc3BsYXk6IG5vbmU7IG1hcmdpbi1sZWZ0OiA5cHQ7IG1hcmdpbi10b3A6IDAgfQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldoZXJlIExpc3QgVGFncwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCnAud2ggICAgICAgICB7IGZvbnQtd2VpZ2h0OiBib2xkOyBjbGVhcjogYm90aDsgbWFyZ2luLXRvcDogNnB0OyBtYXJnaW4tYm90dG9tOiAzcHQgfQp0YWJsZS53aCAgICAgeyB3aWR0aDogMTAwJSB9CnRkLndoSXRlbSAgICB7IHdoaXRlLXNwYWNlOiBub3dyYXA7IGZvbnQtc3R5bGU6IGl0YWxpYzsgcGFkZGluZy1yaWdodDogNnB0OyBwYWRkaW5nLWJvdHRvbTogCiAgICAgICAgICAgICAgIDZwdCB9CnRkLndoRGVzYyAgICB7IHBhZGRpbmctYm90dG9tOiA2cHQgfQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCktlaWwgVGFibGUgVGFncwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCnRhYmxlLmt0ICAgICB7IGJvcmRlcjogMXB0IHNvbGlkICMwMDAwMDAgfQp0aC5rdCAgICAgICAgeyB3aGl0ZS1zcGFjZTogbm93cmFwOyBib3JkZXItYm90dG9tOiAxcHQgc29saWQgIzAwMDAwMDsgcGFkZGluZy1sZWZ0OiA2cHQ7IAogICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiA2cHQ7IHBhZGRpbmctdG9wOiA0cHQ7IHBhZGRpbmctYm90dG9tOiA0cHQgfQp0ci5rdCAgICAgICAgeyAgfQp0ZC5rdCAgICAgICAgeyBjb2xvcjogIzAwMDAwMDsgYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMDsgYm9yZGVyLXRvcDogMXB0IHNvbGlkICNBMEEwQTA7IAogICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDZwdDsgcGFkZGluZy1yaWdodDogNnB0OyBwYWRkaW5nLXRvcDogMnB0OyAKICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDJwdCB9Ci8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLT4KCjwvc3R5bGU+CjwvaGVhZD4KCjxib2R5PgoKPGgxPkNNU0lTIERlYnVnIFN1cHBvcnQ8L2gxPgo8cCBhbGlnbj0iY2VudGVyIj5UaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBDTVNJUyBEZWJ1ZyBzdXBwb3J0IGF2YWlsYWJsZSB3aXRoIENNU0lTIChzdGFydGluZyBWMS4zMCkuPC9wPgo8cCBhbGlnbj0iY2VudGVyIj5WZXJzaW9uOiAxLjAyIC0gMjUuIEp1bHkgMjAxMTwvcD4KCjxwIGNsYXNzPSJUaW55VCI+SW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlLCB0aGUgYWNjb21wYW55IG1hbnVhbHMsIGFuZCBzb2Z0d2FyZSBpczxicj4KICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgqSBBUk0gTHRkLjxicj5BbGwgcmlnaHRzIHJlc2VydmVkLgo8L3A+Cgo8aHI+Cgo8cD48c3BhbiBzdHlsZT0iRk9OVC1XRUlHSFQ6IGJvbGQiPlJldmlzaW9uIEhpc3Rvcnk8L3NwYW4+PC9wPgo8dWw+Cgk8bGk+VmVyc2lvbiAxLjAwOiBJbml0aWFsIFJlbGVhc2UuIDwvbGk+Cgk8bGk+VmVyc2lvbiAxLjAxOiBJbnRlcm5hbCBSZXZpZXcuIDwvbGk+Cgk8bGk+VmVyc2lvbiAxLjAyOiBSZW1vdmVkIHByb2R1Y3Qgc3BlY2lmaWMgaW5mb3JtYXRpb24uIDwvbGk+CjwvdWw+Cgo8aHI+Cgo8aDI+Q29udGVudHM8L2gyPgoKPG9sPgogIDxsaSBjbGFzcz0iTEkyIj48YSBocmVmPSIjQWJvdXQiPkFib3V0PC9hPjwvbGk+CiAgPGxpIGNsYXNzPSJMSTIiPjxhIGhyZWY9IiNJVE1fRGJnQWNjIj5Db3J0ZXgtTTMgLyBDb3J0ZXgtTTQgSVRNIERlYnVnIEFjY2VzczwvYT48L2xpPgogIDxsaSBjbGFzcz0iTEkyIj48YSBocmVmPSIjRGJnSW5fRGJnT3V0Ij5EZWJ1ZyBJTiAvIE9VVCBmdW5jdGlvbnM8L2E+PC9saT4KICA8bGkgY2xhc3M9IkxJMiI+PGEgaHJlZj0iI0lUTV9EYmdTdXAiPklUTSBEZWJ1ZyBTdXBwb3J0IGluIERlYnVnZ2VyPC9hPjwvbGk+Cjwvb2w+Cgo8cD4mbmJzcDs8L3A+CjxoMj48YSBuYW1lPSJBYm91dCI+PC9hPkFib3V0PC9oMj4KPHA+CiAgQ01TSVMgcHJvdmlkZXMgZm9yIENvcnRleC1NMyAvIENvcnRleC1NNCBwcm9jZXNzb3IgYmFzZWQgbWljcm9jb250cm9sbGVycyBkZWJ1ZyBzdXBwb3J0IHZpYSB0aGUgSW5zdHJ1bWVudGVkIFRyYWNlIE1hY3JvY2VsbCAoSVRNKS4KICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgYXZhaWxhYmxlIENNU0lTIERlYnVnIGZ1bmN0aW9ucyBhbmQgdGhlIHVzZWQgbWV0aG9kcy4KPC9wPgoKPHA+Jm5ic3A7PC9wPgo8aDI+PGEgbmFtZT0iSVRNX0RiZ0FjYyI+PC9hPkNvcnRleC1NMyAvIENvcnRleC1NNCBJVE0gRGVidWcgQWNjZXNzPC9oMj4KPHA+CiAgVGhlIENvcnRleC1NMyBpbmNvcnBvcmF0ZXMgdGhlIEluc3RydW1lbnRlZCBUcmFjZSBNYWNyb2NlbGwgKElUTSkgdGhhdCBwcm92aWRlcyB0b2dldGhlciB3aXRoIAogIHRoZSBTZXJpYWwgVmlld2VyIE91dHB1dCB0cmFjZSBjYXBhYmlsaXRpZXMgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgc3lzdGVtLiBUaGUgSVRNIGhhcyAKICAzMiBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHdoaWNoIGFyZSBhYmxlIHRvIHRyYW5zbWl0IDMyIC8gMTYgLyA4IGJpdCB2YWx1ZXM7IHR3byBJVE0gCiAgY29tbXVuaWNhdGlvbiBjaGFubmVscyBhcmUgdXNlZCBieSBDTVNJUyB0byBvdXRwdXQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKPC9wPgo8dWw+Cgk8bGk+SVRNIENoYW5uZWwgMDogdXNlZCBmb3IgcHJpbnRmLXN0eWxlIG91dHB1dCB2aWEgdGhlIGRlYnVnIGludGVyZmFjZS48L2xpPgoJPGxpPklUTSBDaGFubmVsIDMxOiBpcyByZXNlcnZlZCBmb3IgUlRPUyBrZXJuZWwgYXdhcmVuZXNzIGRlYnVnZ2luZy48L2xpPgo8L3VsPgoKPHA+Jm5ic3A7PC9wPgo8aDI+PGEgbmFtZT0iRGJnSW5fRGJnT3V0Ij48L2E+RGVidWcgSU4gLyBPVVQgZnVuY3Rpb25zPC9oMj4KPHA+Q01TSVMgcHJvdmlkZXMgZm9sbG93aW5nIGRlYnVnIGZ1bmN0aW9uczo8L3A+Cjx1bD4KCTxsaT5JVE1fU2VuZENoYXIgKHVzZXMgSVRNIGNoYW5uZWwgMCk8L2xpPgoJPGxpPklUTV9SZWNlaXZlQ2hhciAodXNlcyBnbG9iYWwgdmFyaWFibGUpPC9saT4KCTxsaT5JVE1fQ2hlY2tDaGFyICh1c2VzIGdsb2JhbCB2YXJpYWJsZSk8L2xpPgo8L3VsPgoKPGgzPklUTV9TZW5kQ2hhcjwvaDM+CjxwPgogIDxzdHJvbmc+SVRNX1NlbmRDaGFyPC9zdHJvbmc+IGlzIHVzZWQgdG8gdHJhbnNtaXQgYSBjaGFyYWN0ZXIgb3ZlciBJVE0gY2hhbm5lbCAwIGZyb20gCiAgdGhlIG1pY3JvY29udHJvbGxlciBzeXN0ZW0gdG8gdGhlIGRlYnVnIHN5c3RlbS4gPGJyPgogIE9ubHkgYSA4IGJpdCB2YWx1ZSBpcyB0cmFuc21pdHRlZC4KPC9wPgo8cHJlPgpzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgSVRNX1NlbmRDaGFyICh1aW50MzJfdCBjaCkKewogIC8qIGNoZWNrIGlmIGRlYnVnZ2VyIGNvbm5lY3RlZCBhbmQgSVRNIGNoYW5uZWwgZW5hYmxlZCBmb3IgdHJhY2luZyAqLwogIGlmICgoQ29yZURlYnVnLT5ERU1DUiAmIENvcmVEZWJ1Z19ERU1DUl9UUkNFTkEpICAmYW1wOyZhbXA7CiAgICAgIChJVE0tJmd0O1RDUiAmIElUTV9UQ1JfSVRNRU5BKSAgICAgICAgICAgICAgICAgICZhbXA7JmFtcDsKICAgICAgKElUTS0mZ3Q7VEVSICYgKDFVTCAmbHQ7Jmx0OyAwKSkgICkgCiAgewogICAgd2hpbGUgKElUTS0mZ3Q7UE9SVFswXS51MzIgPT0gMCk7CiAgICBJVE0tJmd0O1BPUlRbMF0udTggPSAodWludDhfdCljaDsKICB9ICAKICByZXR1cm4gKGNoKTsKfTwvcHJlPgoKPGgzPklUTV9SZWNlaXZlQ2hhcjwvaDM+CjxwPgogIElUTSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgaXMgb25seSBjYXBhYmxlIGZvciBPVVQgZGlyZWN0aW9uLiBGb3IgSU4gZGlyZWN0aW9uCiAgYSBnbG9iYWwgdmFyaWFibGUgaXMgdXNlZC4gQSBzaW1wbGUgbWVjaGFuaXNtIGRldGVjdHMgaWYgYSBjaGFyYWN0ZXIgaXMgcmVjZWl2ZWQuCiAgVGhlIHByb2plY3QgdG8gdGVzdCBuZWVkIHRvIGJlIGJ1aWxkIHdpdGggZGVidWcgaW5mb3JtYXRpb24uCjwvcD4KCjxwPgogIFRoZSBnbG9iYWwgdmFyaWFibGUgPHN0cm9uZz5JVE1fUnhCdWZmZXI8L3N0cm9uZz4gaXMgdXNlZCB0byB0cmFuc21pdCBhIDggYml0IHZhbHVlIGZyb20gZGVidWcgc3lzdGVtCiAgdG8gbWljcm9jb250cm9sbGVyIHN5c3RlbS4gPHN0cm9uZz5JVE1fUnhCdWZmZXI8L3N0cm9uZz4gaXMgMzIgYml0IHdpZGUgdG8gCgllbnN1cmUgYSBwcm9wZXIgaGFuZHNoYWtlLgo8L3A+CjxwcmU+CmV4dGVybiB2b2xhdGlsZSBpbnQzMl90IElUTV9SeEJ1ZmZlcjsgICAgICAgICAgICAgICAgICAgIC8qIHZhcmlhYmxlIHRvIHJlY2VpdmUgY2hhcmFjdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KPC9wcmU+CjxwPgogIEEgZGVkaWNhdGVkIGJpdCBwYXR0ZXJuIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIDxzdHJvbmc+SVRNX1J4QnVmZmVyPC9zdHJvbmc+IGlzIGVtcHR5CiAgb3IgY29udGFpbnMgYSB2YWxpZCB2YWx1ZS4KPC9wPgo8cHJlPgojZGVmaW5lICAgICAgICAgICAgICAgICBJVE1fUlhCVUZGRVJfRU1QVFkgICAgMHg1QUE1NUFBNSAvKiB2YWx1ZSBpZGVudGlmeWluZyBJVE1fUnhCdWZmZXIgaXMgcmVhZHkgZm9yIG5leHQgY2hhcmFjdGVyICovCjwvcHJlPgo8cD4KICA8c3Ryb25nPklUTV9SZWNlaXZlQ2hhcjwvc3Ryb25nPiBpcyB1c2VkIHRvIHJlY2VpdmUgYSA4IGJpdCB2YWx1ZSBmcm9tIHRoZSBkZWJ1ZyBzeXN0ZW0uIFRoZSBmdW5jdGlvbiBpcyBub25ibG9ja2luZy4KICBJdCByZXR1cm5zIHRoZSByZWNlaXZlZCBjaGFyYWN0ZXIgb3IgJy0xJyBpZiBubyBjaGFyYWN0ZXIgd2FzIGF2YWlsYWJsZS4KPC9wPgo8cHJlPgpzdGF0aWMgX19JTkxJTkUgaW50MzJfdCBJVE1fUmVjZWl2ZUNoYXIgKHZvaWQpIHsKICBpbnQzMl90IGNoID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KCiAgaWYgKElUTV9SeEJ1ZmZlciAhPSBJVE1fUlhCVUZGRVJfRU1QVFkpIHsKICAgIGNoID0gSVRNX1J4QnVmZmVyOwogICAgSVRNX1J4QnVmZmVyID0gSVRNX1JYQlVGRkVSX0VNUFRZOyAgICAgICAvKiByZWFkeSBmb3IgbmV4dCBjaGFyYWN0ZXIgKi8KICB9CiAgCiAgcmV0dXJuIChjaCk7IAp9CjwvcHJlPgoKPGgzPklUTV9DaGVja0NoYXI8L2gzPgo8cD4KICA8c3Ryb25nPklUTV9DaGVja0NoYXI8L3N0cm9uZz4gaXMgdXNlZCB0byBjaGVjayBpZiBhIGNoYXJhY3RlciBpcyByZWNlaXZlZC4KPC9wPgo8cHJlPgpzdGF0aWMgX19JTkxJTkUgaW50MzJfdCBJVE1fQ2hlY2tDaGFyICh2b2lkKSB7CgogIGlmIChJVE1fUnhCdWZmZXIgPT0gSVRNX1JYQlVGRkVSX0VNUFRZKSB7CiAgICByZXR1cm4gKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KICB9IGVsc2UgewogICAgcmV0dXJuICgxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCiAgfQp9PC9wcmU+CgoKPHA+Jm5ic3A7PC9wPgo8aDI+PGEgbmFtZT0iSVRNX0RiZ1N1cCI+PC9hPklUTSBEZWJ1ZyBTdXBwb3J0IGluIGEgRGVidWdnZXI8L2gyPgo8cD4KICBUaGUgRGVidWdnZXIgc2hhbGwgb2ZmZXIgYSBkZWRpY2F0ZWQgY29uc29sZSB3aW5kb3cgZm9yIHByaW50ZiBzdHlsZSBkZWJ1ZyBpbnB1dCBhbmQgb3V0cHV0IHVzaW5nIHRoZSBDTVNJUyBkZWZpbmVkIElUTSBtZXRob2RzIGRlc2NyaWJlZCBhYm92ZS4KPC9wPgo8cD5EaXJlY3Rpb246IE1pY3JvY29udHJvbGxlciAtJmd0OyBEZWJ1Z2dlcjo8L3A+Cjx1bD4KICA8bGk+CiAgICBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZGVidWcgc2Vzc2lvbiB0aGUgZGVidWdnZXIgc2hhbGwgZW5hYmxlIElUTSB0cmFjZSBvbiBjaGFubmVsIDAgYW5kIGNvbnRpbnVvdXNseSBzbm9vcCBmb3IgY2hhbm5lbCAwIGRhdGEgb24gdGhlIElUTSB0cmFjZQogICAgc3RyZWFtIGl0IHJlY2VpdmVzIGZyb20gdGhlIE1pY3JvY29udHJvbGxlcidzIENvcmVTaWdodCBJVE0gdW5pdAogIDwvbGk+CiAgPGxpPgogICAgZGF0YSByZWNlaXZlZCB2aWEgdGhlIElUTSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgMCBpcyBpbnRlcnByZXRlZCBhcyBjaGFyYXRlciBhbmQgZ2V0cyByZWRpcmVjdGVkIGludG8gdGhlIGRlZGljYXRlZCA8c3Ryb25nPkNvbnNvbGUgV2luZG93PC9zdHJvbmc+CiAgPC9saT4KPC91bD4KCjxwPkRpcmVjdGlvbjogRGVidWdnZXIgLSZndDsgTWljcm9jb250cm9sbGVyOjwvcD4KPHVsPgogIDxsaT4KICAgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBkZWJ1ZyBzZXNzaW9uIHRoZSBkZWJ1Z2dlciBzaGFsbCBzZWVrIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGdsb2JhbCB2YXJpYWJsZSBuYW1lZCA8c3Ryb25nPklUTV9SeEJ1ZmZlcjwvc3Ryb25nPiBpbiB0aGUgZGVidWcKICAgIGluZm9ybWF0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbiBiZWluZyBsb2FkZWQKICA8L2xpPgogIDxsaT4KICAgIHN0cmluZ3MgZW50ZXJlZCBpbnRvIHRoZSA8c3Ryb25nPkNvbnNvbGUgV2luZG93PC9zdHJvbmc+IGFyZSB3cml0dGVuIGJ5IHRoZSBkZWJ1Z2dlciBhcyBhIHN0cmVhbSBvZiBjaGFyIHZhbHVlcyB2aWEgdGhlIHZhcmlhYmxlIDxzdHJvbmc+SVRNX1J4QnVmZmVyPC9zdHJvbmc+LgogIDwvbGk+CiAgPGxpPgogICAgdGhlIGRlYnVnZ2VyIHdyaXRlcyB0aGUgbmV4dCBjaGFyYWN0ZXIgaW50byB0aGUgPHN0cm9uZz5JVE1fUnhCdWZmZXI8L3N0cm9uZz4gb25seSBvbmNlIHRoZSB2YWx1ZSBoYXMgYmVlbiByZWFkIGFuZCB0aGUgPHN0cm9uZz5JVE1fUlhCVUZGRVJfRU1QVFk8L3N0cm9uZz4gdmFsdWUgYmVpbmcgc2V0LgogICAgKHJlZmVyIHRvOiBJVE1fUmVjZWl2ZUNoYXIoKSkuCjwvdWw+Cgo8L2JvZHk+Cgo8L2h0bWw+