PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+PHRpdGxlPlVzaW5nIFhQYXRoIHRvIFJldHJpZXZlIEVsZW1lbnQgQ29udGVudDwvdGl0bGU+PG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS42MS4yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJMaWJ4bWwgVHV0b3JpYWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJMaWJ4bWwgVHV0b3JpYWwiPjxsaW5rIHJlbD0icHJldmlvdXMiIGhyZWY9ImFyMDFzMDQuaHRtbCIgdGl0bGU9IlJldHJpZXZpbmcgRWxlbWVudCBDb250ZW50Ij48bGluayByZWw9Im5leHQiIGhyZWY9ImFyMDFzMDYuaHRtbCIgdGl0bGU9IldyaXRpbmcgZWxlbWVudCBjb250ZW50Ij48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9Im5hdmhlYWRlciI+PHRhYmxlIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciI+PHRyPjx0aCBjb2xzcGFuPSIzIiBhbGlnbj0iY2VudGVyIj5Vc2luZyBYUGF0aCB0byBSZXRyaWV2ZSBFbGVtZW50IENvbnRlbnQ8L3RoPjwvdHI+PHRyPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0ibGVmdCI+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJhcjAxczA0Lmh0bWwiPlByZXY8L2E+oDwvdGQ+PHRoIHdpZHRoPSI2MCUiIGFsaWduPSJjZW50ZXIiPqA8L3RoPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPqA8YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImFyMDFzMDYuaHRtbCI+TmV4dDwvYT48L3RkPjwvdHI+PC90YWJsZT48aHI+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9InhtbHR1dG9yaWFseHBhdGgiPjwvYT5Vc2luZyBYUGF0aCB0byBSZXRyaWV2ZSBFbGVtZW50IENvbnRlbnQ8L2gyPjwvZGl2PjwvZGl2PjxkaXY+PC9kaXY+PC9kaXY+PHA+SW4gYWRkaXRpb24gdG8gd2Fsa2luZyB0aGUgZG9jdW1lbnQgdHJlZSB0byBmaW5kIGFuIGVsZW1lbnQsCiAgICA8c3BhbiBjbGFzcz0iYXBwbGljYXRpb24iPkxpYnhtbDI8L3NwYW4+IGluY2x1ZGVzIHN1cHBvcnQgZm9yCiAgICAgIHVzZSBvZiA8c3BhbiBjbGFzcz0iYXBwbGljYXRpb24iPlhQYXRoPC9zcGFuPiBleHByZXNzaW9ucyB0byByZXRyaWV2ZSBzZXRzIG9mCiAgICAgIG5vZGVzIHRoYXQgbWF0Y2ggYSBzcGVjaWZpZWQgY3JpdGVyaWEuIEZ1bGwgZG9jdW1lbnRhdGlvbiBvZiB0aGUKICAgICAgPHNwYW4gY2xhc3M9ImFwcGxpY2F0aW9uIj5YUGF0aDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImFjcm9ueW0iPkFQSTwvc3Bhbj4gaXMgPGEgaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL2h0bWwvbGlieG1sLXhwYXRoLmh0bWwiIHRhcmdldD0iX3RvcCI+aGVyZTwvYT4uCiAgICA8L3A+PHA+PHNwYW4gY2xhc3M9ImFwcGxpY2F0aW9uIj5YUGF0aDwvc3Bhbj4gYWxsb3dzIHNlYXJjaGluZyB0aHJvdWdoIGEgZG9jdW1lbnQKICAgIGZvciBub2RlcyB0aGF0IG1hdGNoIHNwZWNpZmllZCBjcml0ZXJpYS4gSW4gdGhlIGV4YW1wbGUgYmVsb3cgd2Ugc2VhcmNoCiAgICAgIHRocm91Z2ggYSBkb2N1bWVudCBmb3IgdGhlIGNvbnRlbnRzIG9mIGFsbCA8dHQgY2xhc3M9InZhcm5hbWUiPmtleXdvcmQ8L3R0PgogICAgZWxlbWVudHMuCiAgICAgIDwvcD48ZGl2IGNsYXNzPSJub3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PHRhYmxlIGJvcmRlcj0iMCIgc3VtbWFyeT0iTm90ZSI+PHRyPjx0ZCByb3dzcGFuPSIyIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjI1Ij48aW1nIGFsdD0iW05vdGVdIiBzcmM9ImltYWdlcy9ub3RlLnBuZyI+PC90ZD48dGggYWxpZ249ImxlZnQiPk5vdGU8L3RoPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPjxwPkEgZnVsbCBkaXNjdXNzaW9uIG9mIDxzcGFuIGNsYXNzPSJhcHBsaWNhdGlvbiI+WFBhdGg8L3NwYW4+IGlzIGJleW9uZAoJICB0aGUgc2NvcGUgb2YgdGhpcyBkb2N1bWVudC4gRm9yIGRldGFpbHMgb24gaXRzIHVzZSwgc2VlIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aCIgdGFyZ2V0PSJfdG9wIj5YUGF0aCBzcGVjaWZpY2F0aW9uPC9hPi48L3A+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+PHA+CiAgICAgIEZ1bGwgY29kZSBmb3IgdGhpcyBleGFtcGxlIGlzIGF0IDxhIGhyZWY9ImFwZC5odG1sIiB0aXRsZT0iRC6gQ29kZSBmb3IgWFBhdGggRXhhbXBsZSI+QXBwZW5kaXigRCwgPGk+Q29kZSBmb3IgWFBhdGggRXhhbXBsZTwvaT48L2E+LgogICAgPC9wPjxwPlVzaW5nIDxzcGFuIGNsYXNzPSJhcHBsaWNhdGlvbiI+WFBhdGg8L3NwYW4+IHJlcXVpcmVzIHNldHRpbmcgdXAgYW4KICAgICAgeG1sWFBhdGhDb250ZXh0IGFuZCB0aGVuIHN1cHBseWluZyB0aGUgPHNwYW4gY2xhc3M9ImFwcGxpY2F0aW9uIj5YUGF0aDwvc3Bhbj4KICAgICAgZXhwcmVzc2lvbiBhbmQgdGhlIGNvbnRleHQgdG8gdGhlCiAgICAgIDx0dCBjbGFzcz0iZnVuY3Rpb24iPnhtbFhQYXRoRXZhbEV4cHJlc3Npb248L3R0PiBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIHJldHVybnMKICAgICAgYW4geG1sWFBhdGhPYmplY3RQdHIsIHdoaWNoIGluY2x1ZGVzIHRoZSBzZXQgb2Ygbm9kZXMgc2F0aXNmeWluZyB0aGUKICAgICAgPHNwYW4gY2xhc3M9ImFwcGxpY2F0aW9uIj5YUGF0aDwvc3Bhbj4gZXhwcmVzc2lvbi48L3A+PHA+CiAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Cgl4bWxYUGF0aE9iamVjdFB0cgoJZ2V0bm9kZXNldCAoeG1sRG9jUHRyIGRvYywgeG1sQ2hhciAqeHBhdGgpewoJCgk8YSBuYW1lPSJjb2NvbnRleHQiPjwvYT48aW1nIHNyYz0iaW1hZ2VzL2NhbGxvdXRzLzEucG5nIiBhbHQ9IjEiIGJvcmRlcj0iMCI+eG1sWFBhdGhDb250ZXh0UHRyIGNvbnRleHQ7Cgl4bWxYUGF0aE9iamVjdFB0ciByZXN1bHQ7CgoJPGEgbmFtZT0iY29jcmVhdGVjb250ZXh0Ij48L2E+PGltZyBzcmM9ImltYWdlcy9jYWxsb3V0cy8yLnBuZyIgYWx0PSIyIiBib3JkZXI9IjAiPmNvbnRleHQgPSB4bWxYUGF0aE5ld0NvbnRleHQoZG9jKTsKCTxhIG5hbWU9ImNvcnVueHBhdGgiPjwvYT48aW1nIHNyYz0iaW1hZ2VzL2NhbGxvdXRzLzMucG5nIiBhbHQ9IjMiIGJvcmRlcj0iMCI+cmVzdWx0ID0geG1sWFBhdGhFdmFsRXhwcmVzc2lvbih4cGF0aCwgY29udGV4dCk7Cgk8YSBuYW1lPSJjb2NoZWNreHBhdGhyZXN1bHQiPjwvYT48aW1nIHNyYz0iaW1hZ2VzL2NhbGxvdXRzLzQucG5nIiBhbHQ9IjQiIGJvcmRlcj0iMCI+aWYoeG1sWFBhdGhOb2RlU2V0SXNFbXB0eShyZXN1bHQtJmd0O25vZGVzZXR2YWwpKXsKCQl4bWxYUGF0aEZyZWVPYmplY3QocmVzdWx0KTsKICAgICAgICAgICAgICAgIHByaW50ZigiTm8gcmVzdWx0XG4iKTsKCQlyZXR1cm4gTlVMTDsKICAgICAgPC9wcmU+PHA+CiAgICAgIDwvcD48ZGl2IGNsYXNzPSJjYWxsb3V0bGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgc3VtbWFyeT0iQ2FsbG91dCBsaXN0Ij48dHI+PHRkIHdpZHRoPSI1JSIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48YSBocmVmPSIjY29jb250ZXh0Ij48aW1nIHNyYz0iaW1hZ2VzL2NhbGxvdXRzLzEucG5nIiBhbHQ9IjEiIGJvcmRlcj0iMCI+PC9hPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxwPkZpcnN0IHdlIGRlY2xhcmUgb3VyIHZhcmlhYmxlcy48L3A+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjUlIiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxhIGhyZWY9IiNjb2NyZWF0ZWNvbnRleHQiPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvMi5wbmciIGFsdD0iMiIgYm9yZGVyPSIwIj48L2E+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+PHA+SW5pdGlhbGl6ZSB0aGUgPHR0IGNsYXNzPSJ2YXJuYW1lIj5jb250ZXh0PC90dD4gdmFyaWFibGUuPC9wPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSI1JSIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48YSBocmVmPSIjY29ydW54cGF0aCI+PGltZyBzcmM9ImltYWdlcy9jYWxsb3V0cy8zLnBuZyIgYWx0PSIzIiBib3JkZXI9IjAiPjwvYT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48cD5BcHBseSB0aGUgPHNwYW4gY2xhc3M9ImFwcGxpY2F0aW9uIj5YUGF0aDwvc3Bhbj4gZXhwcmVzc2lvbi48L3A+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjUlIiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxhIGhyZWY9IiNjb2NoZWNreHBhdGhyZXN1bHQiPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvNC5wbmciIGFsdD0iNCIgYm9yZGVyPSIwIj48L2E+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+PHA+Q2hlY2sgdGhlIHJlc3VsdCBhbmQgZnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCB0bwoJICAgIDx0dCBjbGFzcz0idmFybmFtZSI+cmVzdWx0PC90dD4gaWYgbm8gcmVzdWx0IGlzIGZvdW5kLjwvcD48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj48cD4KICAgIDwvcD48cD5UaGUgeG1sUGF0aE9iamVjdFB0ciByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24gY29udGFpbnMgYSBzZXQgb2Ygbm9kZXMKICAgIGFuZCBvdGhlciBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBzZXQgYW5kIGFjdCBvbiB0aGUKICAgICAgcmVzdWx0cy4gRm9yIHRoaXMgZXhhbXBsZSwgb3VyIGZ1bmN0aW9ucyByZXR1cm5zIHRoZQogICAgPHR0IGNsYXNzPSJ2YXJuYW1lIj54bWxYUGF0aE9iamVjdFB0cjwvdHQ+LiBXZSB1c2UgaXQgdG8gcHJpbnQgdGhlIGNvbnRlbnRzIG9mCiAgICAgIDx0dCBjbGFzcz0idmFybmFtZSI+a2V5d29yZDwvdHQ+IG5vZGVzIGluIG91ciBkb2N1bWVudC4gVGhlIG5vZGUgc2V0IG9iamVjdAogICAgICBpbmNsdWRlcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzZXQgKDx0dCBjbGFzcz0idmFybmFtZSI+bm9kZU5yPC90dD4pIGFuZAogICAgICBhbiBhcnJheSBvZiBub2RlcyAoPHR0IGNsYXNzPSJ2YXJuYW1lIj5ub2RlVGFiPC90dD4pOgogICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgoJPGEgbmFtZT0iY29ub2Rlc2V0Y291bnRlciI+PC9hPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvMS5wbmciIGFsdD0iMSIgYm9yZGVyPSIwIj5mb3IgKGk9MDsgaSAmbHQ7IG5vZGVzZXQtJmd0O25vZGVOcjsgaSsrKSB7Cgk8YSBuYW1lPSJjb3ByaW50a2V5d29yZHMiPjwvYT48aW1nIHNyYz0iaW1hZ2VzL2NhbGxvdXRzLzIucG5nIiBhbHQ9IjIiIGJvcmRlcj0iMCI+a2V5d29yZCA9IHhtbE5vZGVMaXN0R2V0U3RyaW5nKGRvYywgbm9kZXNldC0mZ3Q7bm9kZVRhYltpXS0mZ3Q7eG1sQ2hpbGRyZW5Ob2RlLCAxKTsKCQlwcmludGYoImtleXdvcmQ6ICVzXG4iLCBrZXl3b3JkKTsKCSAgICAgICAgeG1sRnJlZShrZXl3b3JkKTsKCX0KICAgICAgPC9wcmU+PHA+CiAgICAgIDwvcD48ZGl2IGNsYXNzPSJjYWxsb3V0bGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgc3VtbWFyeT0iQ2FsbG91dCBsaXN0Ij48dHI+PHRkIHdpZHRoPSI1JSIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48YSBocmVmPSIjY29ub2Rlc2V0Y291bnRlciI+PGltZyBzcmM9ImltYWdlcy9jYWxsb3V0cy8xLnBuZyIgYWx0PSIxIiBib3JkZXI9IjAiPjwvYT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48cD5UaGUgdmFsdWUgb2YgPHR0IGNsYXNzPSJ2YXJuYW1lIj5ub2Rlc2V0LSZndDtOcjwvdHQ+IGhvbGRzIHRoZSBudW1iZXIgb2YKCSAgZWxlbWVudHMgaW4gdGhlIG5vZGUgc2V0LiBIZXJlIHdlIHVzZSBpdCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5LjwvcD48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iNSUiIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+PGEgaHJlZj0iI2NvcHJpbnRrZXl3b3JkcyI+PGltZyBzcmM9ImltYWdlcy9jYWxsb3V0cy8yLnBuZyIgYWx0PSIyIiBib3JkZXI9IjAiPjwvYT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48cD5IZXJlIHdlIHByaW50IHRoZSBjb250ZW50cyBvZiBlYWNoIG9mIHRoZSBub2RlcyByZXR1cm5lZC4KCSAgICA8L3A+PGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPjx0YWJsZSBib3JkZXI9IjAiIHN1bW1hcnk9Ik5vdGUiPjx0cj48dGQgcm93c3Bhbj0iMiIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSI+PGltZyBhbHQ9IltOb3RlXSIgc3JjPSJpbWFnZXMvbm90ZS5wbmciPjwvdGQ+PHRoIGFsaWduPSJsZWZ0Ij5Ob3RlPC90aD48L3RyPjx0cj48dGQgY29sc3Bhbj0iMiIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48cD5Ob3RlIHRoYXQgd2UgYXJlIHByaW50aW5nIHRoZSBjaGlsZCBub2RlIG9mIHRoZSBub2RlIHRoYXQgaXMKCQlyZXR1cm5lZCwgYmVjYXVzZSB0aGUgY29udGVudHMgb2YgdGhlIDx0dCBjbGFzcz0idmFybmFtZSI+a2V5d29yZDwvdHQ+CgkJZWxlbWVudCBhcmUgYSBjaGlsZCB0ZXh0IG5vZGUuPC9wPjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PjxwPgoJICA8L3A+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+PHA+CiAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ibmF2Zm9vdGVyIj48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGZvb3RlciI+PHRyPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0ibGVmdCI+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJhcjAxczA0Lmh0bWwiPlByZXY8L2E+oDwvdGQ+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCI+VXA8L2E+PC90ZD48dGQgd2lkdGg9IjQwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJhcjAxczA2Lmh0bWwiPk5leHQ8L2E+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjQwJSIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj5SZXRyaWV2aW5nIEVsZW1lbnQgQ29udGVudKA8L3RkPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0iY2VudGVyIj48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD48dGQgd2lkdGg9IjQwJSIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+oFdyaXRpbmcgZWxlbWVudCBjb250ZW50PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+PC9ib2R5PjwvaHRtbD4K