PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPjx0aXRsZT5ELqBDb2RlIGZvciBBZGQgQXR0cmlidXRlIEV4YW1wbGU8L3RpdGxlPjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNjAuMSI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iTGlieG1sIFR1dG9yaWFsIj48bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iTGlieG1sIFR1dG9yaWFsIj48bGluayByZWw9InByZXZpb3VzIiBocmVmPSJhcGMuaHRtbCIgdGl0bGU9IkMuoENvZGUgZm9yIEFkZCBLZXl3b3JkIEV4YW1wbGUiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYXBlLmh0bWwiIHRpdGxlPSJFLqBDb2RlIGZvciBSZXRyaWV2aW5nIEF0dHJpYnV0ZSBWYWx1ZSBFeGFtcGxlIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9Im5hdmhlYWRlciI+PHRhYmxlIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciI+PHRyPjx0aCBjb2xzcGFuPSIzIiBhbGlnbj0iY2VudGVyIj5ELqBDb2RlIGZvciBBZGQgQXR0cmlidXRlIEV4YW1wbGU8L3RoPjwvdHI+PHRyPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0ibGVmdCI+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJhcGMuaHRtbCI+UHJldjwvYT6gPC90ZD48dGggd2lkdGg9IjYwJSIgYWxpZ249ImNlbnRlciI+oDwvdGg+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+oDxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYXBlLmh0bWwiPk5leHQ8L2E+PC90ZD48L3RyPjwvdGFibGU+PGhyPjwvZGl2PjxkaXYgY2xhc3M9ImFwcGVuZGl4IiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iYWRkYXR0cmlidXRlYXBwZW5kaXgiPjwvYT5ELqBDb2RlIGZvciBBZGQgQXR0cmlidXRlIEV4YW1wbGU8L2gyPjwvZGl2PjwvZGl2PjxkaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwojaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKI2luY2x1ZGUgJmx0O2xpYnhtbC94bWxtZW1vcnkuaCZndDsKI2luY2x1ZGUgJmx0O2xpYnhtbC9wYXJzZXIuaCZndDsKCgp4bWxEb2NQdHIKcGFyc2VEb2MoY2hhciAqZG9jbmFtZSwgY2hhciAqdXJpKSB7CgoJeG1sRG9jUHRyIGRvYzsKCXhtbE5vZGVQdHIgY3VyOwoJeG1sTm9kZVB0ciBuZXdub2RlOwoJeG1sQXR0clB0ciBuZXdhdHRyOwoKCWRvYyA9IHhtbFBhcnNlRmlsZShkb2NuYW1lKTsKCQoJaWYgKGRvYyA9PSBOVUxMICkgewoJCWZwcmludGYoc3RkZXJyLCZxdW90O0RvY3VtZW50IG5vdCBwYXJzZWQgc3VjY2Vzc2Z1bGx5LiBcbiZxdW90Oyk7CgkJcmV0dXJuIChOVUxMKTsKCX0KCQoJY3VyID0geG1sRG9jR2V0Um9vdEVsZW1lbnQoZG9jKTsKCQoJaWYgKGN1ciA9PSBOVUxMKSB7CgkJZnByaW50ZihzdGRlcnIsJnF1b3Q7ZW1wdHkgZG9jdW1lbnRcbiZxdW90Oyk7CgkJeG1sRnJlZURvYyhkb2MpOwoJCXJldHVybiAoTlVMTCk7Cgl9CgkKCWlmICh4bWxTdHJjbXAoY3VyLSZndDtuYW1lLCAoY29uc3QgeG1sQ2hhciAqKSAmcXVvdDtzdG9yeSZxdW90OykpIHsKCQlmcHJpbnRmKHN0ZGVyciwmcXVvdDtkb2N1bWVudCBvZiB0aGUgd3JvbmcgdHlwZSwgcm9vdCBub2RlICE9IHN0b3J5JnF1b3Q7KTsKCQl4bWxGcmVlRG9jKGRvYyk7CgkJcmV0dXJuIChOVUxMKTsKCX0KCQoJbmV3bm9kZSA9IHhtbE5ld1RleHRDaGlsZCAoY3VyLCBOVUxMLCAmcXVvdDtyZWZlcmVuY2UmcXVvdDssIE5VTEwpOwoJbmV3YXR0ciA9IHhtbE5ld1Byb3AgKG5ld25vZGUsICZxdW90O3VyaSZxdW90OywgdXJpKTsKCXJldHVybihkb2MpOwp9CgppbnQKbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKCgljaGFyICpkb2NuYW1lOwoJY2hhciAqdXJpOwoJeG1sRG9jUHRyIGRvYzsKCglpZiAoYXJnYyAmbHQ7PSAyKSB7CgkJcHJpbnRmKCZxdW90O1VzYWdlOiAlcyBkb2NuYW1lLCB1cmlcbiZxdW90OywgYXJndlswXSk7CgkJcmV0dXJuKDApOwoJfQoKCWRvY25hbWUgPSBhcmd2WzFdOwoJdXJpID0gYXJndlsyXTsKCWRvYyA9IHBhcnNlRG9jIChkb2NuYW1lLCB1cmkpOwoJaWYgKGRvYyAhPSBOVUxMKSB7CgkJeG1sU2F2ZUZvcm1hdEZpbGUgKGRvY25hbWUsIGRvYywgMSk7CgkJeG1sRnJlZURvYyhkb2MpOwoJfQoJcmV0dXJuICgxKTsKfQoKPC9wcmU+PHA+CiAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ibmF2Zm9vdGVyIj48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGZvb3RlciI+PHRyPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0ibGVmdCI+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJhcGMuaHRtbCI+UHJldjwvYT6gPC90ZD48dGQgd2lkdGg9IjIwJSIgYWxpZ249ImNlbnRlciI+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sIj5VcDwvYT48L3RkPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0icmlnaHQiPqA8YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImFwZS5odG1sIj5OZXh0PC9hPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSI0MCUiIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Qy6gQ29kZSBmb3IgQWRkIEtleXdvcmQgRXhhbXBsZaA8L3RkPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0iY2VudGVyIj48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD48dGQgd2lkdGg9IjQwJSIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+oEUuoENvZGUgZm9yIFJldHJpZXZpbmcgQXR0cmlidXRlIFZhbHVlIEV4YW1wbGU8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj48L2JvZHk+PC9odG1sPgo=