PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+PHRpdGxlPkguoENvZGUgZm9yIEVuY29kaW5nIENvbnZlcnNpb24gRXhhbXBsZTwvdGl0bGU+PG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS42MS4yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJMaWJ4bWwgVHV0b3JpYWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJMaWJ4bWwgVHV0b3JpYWwiPjxsaW5rIHJlbD0icHJldmlvdXMiIGhyZWY9ImFwZy5odG1sIiB0aXRsZT0iRy6gQ29kZSBmb3IgUmV0cmlldmluZyBBdHRyaWJ1dGUgVmFsdWUgRXhhbXBsZSI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhcGkuaHRtbCIgdGl0bGU9IkkuoEFja25vd2xlZGdlbWVudHMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ibmF2aGVhZGVyIj48dGFibGUgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIj48dHI+PHRoIGNvbHNwYW49IjMiIGFsaWduPSJjZW50ZXIiPkguoENvZGUgZm9yIEVuY29kaW5nIENvbnZlcnNpb24gRXhhbXBsZTwvdGg+PC90cj48dHI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJsZWZ0Ij48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImFwZy5odG1sIj5QcmV2PC9hPqA8L3RkPjx0aCB3aWR0aD0iNjAlIiBhbGlnbj0iY2VudGVyIj6gPC90aD48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJhcGkuaHRtbCI+TmV4dDwvYT48L3RkPjwvdHI+PC90YWJsZT48aHI+PC9kaXY+PGRpdiBjbGFzcz0iYXBwZW5kaXgiIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJjb252ZXJ0YXBwZW5kaXgiPjwvYT5ILqBDb2RlIGZvciBFbmNvZGluZyBDb252ZXJzaW9uIEV4YW1wbGU8L2gyPjwvZGl2PjwvZGl2PjxkaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKI2luY2x1ZGUgJmx0O2xpYnhtbC9wYXJzZXIuaCZndDsKCgp1bnNpZ25lZCBjaGFyKgpjb252ZXJ0ICh1bnNpZ25lZCBjaGFyICppbiwgY2hhciAqZW5jb2RpbmcpCnsKCXVuc2lnbmVkIGNoYXIgKm91dDsKICAgICAgICBpbnQgcmV0LHNpemUsb3V0X3NpemUsdGVtcDsKICAgICAgICB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGhhbmRsZXI7CgogICAgICAgIHNpemUgPSAoaW50KXN0cmxlbihpbikrMTsgCiAgICAgICAgb3V0X3NpemUgPSBzaXplKjItMTsgCiAgICAgICAgb3V0ID0gbWFsbG9jKChzaXplX3Qpb3V0X3NpemUpOyAKCiAgICAgICAgaWYgKG91dCkgewogICAgICAgICAgICAgICAgaGFuZGxlciA9IHhtbEZpbmRDaGFyRW5jb2RpbmdIYW5kbGVyKGVuY29kaW5nKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUob3V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gTlVMTDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG91dCkgewogICAgICAgICAgICAgICAgdGVtcD1zaXplLTE7CiAgICAgICAgICAgICAgICByZXQgPSBoYW5kbGVyLSZndDtpbnB1dChvdXQsICZhbXA7b3V0X3NpemUsIGluLCAmYW1wO3RlbXApOwogICAgICAgICAgICAgICAgaWYgKHJldCB8fCB0ZW1wLXNpemUrMSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJjb252ZXJzaW9uIHdhc24ndCBzdWNjZXNzZnVsLlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJjb252ZXJzaW9uIHdhc24ndCBzdWNjZXNzZnVsLiBjb252ZXJ0ZWQ6ICVpIG9jdGV0cy5cbiIsdGVtcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShvdXQpOwogICAgICAgICAgICAgICAgICAgICAgICBvdXQgPSBOVUxMOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gcmVhbGxvYyhvdXQsb3V0X3NpemUrMSk7IAogICAgICAgICAgICAgICAgICAgICAgICBvdXRbb3V0X3NpemVdPTA7IC8qbnVsbCB0ZXJtaW5hdGluZyBvdXQqLwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcHJpbnRmKCJubyBtZW1cbiIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKG91dCk7Cn0JCgoKaW50Cm1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CgoJdW5zaWduZWQgY2hhciAqY29udGVudCwgKm91dDsKCXhtbERvY1B0ciBkb2M7Cgl4bWxOb2RlUHRyIHJvb3Rub2RlOwoJY2hhciAqZW5jb2RpbmcgPSAiSVNPLTg4NTktMSI7CgkKCQkKCWlmIChhcmdjICZsdDs9IDEpIHsKCQlwcmludGYoIlVzYWdlOiAlcyBjb250ZW50XG4iLCBhcmd2WzBdKTsKCQlyZXR1cm4oMCk7Cgl9CgoJY29udGVudCA9IGFyZ3ZbMV07CgoJb3V0ID0gY29udmVydChjb250ZW50LCBlbmNvZGluZyk7CgoJZG9jID0geG1sTmV3RG9jICgiMS4wIik7Cglyb290bm9kZSA9IHhtbE5ld0RvY05vZGUoZG9jLCBOVUxMLCAoY29uc3QgeG1sQ2hhciopInJvb3QiLCBvdXQpOwoJeG1sRG9jU2V0Um9vdEVsZW1lbnQoZG9jLCByb290bm9kZSk7CgoJeG1sU2F2ZUZvcm1hdEZpbGVFbmMoIi0iLCBkb2MsIGVuY29kaW5nLCAxKTsKCXJldHVybiAoMSk7Cn0KCjwvcHJlPjxwPgogICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9Im5hdmZvb3RlciI+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBmb290ZXIiPjx0cj48dGQgd2lkdGg9IjQwJSIgYWxpZ249ImxlZnQiPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iYXBnLmh0bWwiPlByZXY8L2E+oDwvdGQ+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCI+VXA8L2E+PC90ZD48dGQgd2lkdGg9IjQwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJhcGkuaHRtbCI+TmV4dDwvYT48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPkcuoENvZGUgZm9yIFJldHJpZXZpbmcgQXR0cmlidXRlIFZhbHVlIEV4YW1wbGWgPC90ZD48dGQgd2lkdGg9IjIwJSIgYWxpZ249ImNlbnRlciI+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+PHRkIHdpZHRoPSI0MCUiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPqBJLqBBY2tub3dsZWRnZW1lbnRzPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+PC9ib2R5PjwvaHRtbD4K