PD9waHAKLyoqCiAqIEdlbmVyYXRlUHJlc3MgQ2hpbGQgVGhlbWUg4oCUIGZ1bmN0aW9ucy5waHAKICogdjMuMC4wIOKAlCBGdWxsIGhvbWVwYWdlIGJ1aWxkZXIgKyA0LWNvbCBmb290ZXIgKyBuYXYgQ1RBIGJ1dHRvbgogKi8KCi8vIOKUgOKUgOKUgCBFbnF1ZXVlIGNoaWxkIHRoZW1lIHN0eWxlc2hlZXQg4pSA4pSA4pSACmFkZF9hY3Rpb24oJ3dwX2VucXVldWVfc2NyaXB0cycsIGZ1bmN0aW9uKCkgewogICAgd3BfZW5xdWV1ZV9zdHlsZSgKICAgICAgICAnZ2VuZXJhdGVwcmVzcy1jaGlsZCcsCiAgICAgICAgZ2V0X3N0eWxlc2hlZXRfZGlyZWN0b3J5X3VyaSgpIC4gJy9zdHlsZS5jc3MnLAogICAgICAgIGFycmF5KCdnZW5lcmF0ZXByZXNzJyksCiAgICAgICAgJzMuMC4wJwogICAgKTsKfSk7CgovLyDilIDilIDilIAgTG9hZCBHb29nbGUgRm9udHMgKEludGVyKSDilIDilIDilIAKYWRkX2FjdGlvbignd3BfZW5xdWV1ZV9zY3JpcHRzJywgZnVuY3Rpb24oKSB7CiAgICB3cF9lbnF1ZXVlX3N0eWxlKAogICAgICAgICd3ZHR4LWdvb2dsZS1mb250cycsCiAgICAgICAgJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9SW50ZXI6d2dodEA0MDA7NTAwOzYwMDs3MDA7ODAwJmRpc3BsYXk9c3dhcCcsCiAgICAgICAgYXJyYXkoKSwKICAgICAgICBudWxsCiAgICApOwp9KTsKCi8vIOKUgOKUgOKUgCBDb25kaXRpb25hbCBFbGVtZW50b3IgZGVxdWV1ZSDilIDilIDilIAKYWRkX2FjdGlvbignd3BfZW5xdWV1ZV9zY3JpcHRzJywgZnVuY3Rpb24oKSB7CiAgICBpZiAoIWlzX3Npbmd1bGFyKCkgfHwgIWhhc19zaG9ydGNvZGUoZ2V0X3Bvc3QoKS0+cG9zdF9jb250ZW50LCAnZWxlbWVudG9yJykpIHsKICAgICAgICAvLyBDaGVjayBpZiBwYWdlIHVzZXMgRWxlbWVudG9yCiAgICAgICAgZ2xvYmFsICRwb3N0OwogICAgICAgICRpc19lbGVtZW50b3IgPSBmYWxzZTsKICAgICAgICBpZiAoJHBvc3QpIHsKICAgICAgICAgICAgJGlzX2VsZW1lbnRvciA9IGdldF9wb3N0X21ldGEoJHBvc3QtPklELCAnX2VsZW1lbnRvcl9lZGl0X21vZGUnLCB0cnVlKSA9PT0gJ2J1aWxkZXInOwogICAgICAgICAgICBpZiAoISRpc19lbGVtZW50b3IpIHsKICAgICAgICAgICAgICAgIC8vIEFsc28gY2hlY2sgRWxlbWVudG9yIFBybyB0aGVtZSBidWlsZGVyIGNvbmRpdGlvbnMKICAgICAgICAgICAgICAgICRjb25kaXRpb25zID0gZ2V0X29wdGlvbignZWxlbWVudG9yX3Byb190aGVtZV9idWlsZGVyX2NvbmRpdGlvbnMnKTsKICAgICAgICAgICAgICAgIGlmICgkY29uZGl0aW9ucykgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb25kaXRpb25zIGFzICR0eXBlID0+ICRncm91cHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRncm91cHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZ3JvdXBzIGFzICRncm91cCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRncm91cCBhcyAkYykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2lkID0gJGNbJ2lkJ10gPz8gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRzaWQgPT0gJHBvc3QtPklEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNfZWxlbWVudG9yID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCEkaXNfZWxlbWVudG9yKSB7CiAgICAgICAgICAgIHdwX2RlcXVldWVfc3R5bGUoJ2VsZW1lbnRvci1mcm9udGVuZCcpOwogICAgICAgICAgICB3cF9kZXF1ZXVlX3N0eWxlKCdlbGVtZW50b3ItZnJvbnRlbmQtbGVnYWN5Jyk7CiAgICAgICAgICAgIHdwX2RlcXVldWVfc3R5bGUoJ2VsZW1lbnRvci1jb21tb24nKTsKICAgICAgICAgICAgd3BfZGVxdWV1ZV9zdHlsZSgnZWxlbWVudG9yLWljb25zJyk7CiAgICAgICAgICAgIHdwX2RlcXVldWVfc3R5bGUoJ2UtYW5pbWF0aW9ucycpOwogICAgICAgICAgICB3cF9kZXF1ZXVlX3NjcmlwdCgnZWxlbWVudG9yLWZyb250ZW5kJyk7CiAgICAgICAgICAgIHdwX2RlcXVldWVfc2NyaXB0KCdlbGVtZW50b3ItZnJvbnRlbmQtbW9kdWxlcycpOwogICAgICAgIH0KICAgIH0KfSwgMTAwKTsKCgovLyDilIDilIDilIAgU0VPOiBDdXN0b20gVGl0bGUsIE1ldGEgRGVzY3JpcHRpb24gJiBPRyBUYWdzIGZvciBIb21lcGFnZSDilIDilIDilIAKYWRkX2ZpbHRlcigncHJlX2dldF9kb2N1bWVudF90aXRsZScsIGZ1bmN0aW9uKCR0aXRsZSkgewogICAgaWYgKGlzX2Zyb250X3BhZ2UoKSkgewogICAgICAgIHJldHVybiAnRmxlZWNlICYgU3BvcnRzd2VhciBGYWJyaWMgTWFudWZhY3R1cmVyIHwgV2VsbERvbmVUZXgnOwogICAgfQogICAgcmV0dXJuICR0aXRsZTsKfSwgOTk5KTsKCmFkZF9maWx0ZXIoJ2RvY3VtZW50X3RpdGxlX3BhcnRzJywgZnVuY3Rpb24oJHRpdGxlKSB7CiAgICBpZiAoaXNfZnJvbnRfcGFnZSgpKSB7CiAgICAgICAgJHRpdGxlWyd0aXRsZSddID0gJ0ZsZWVjZSAmIFNwb3J0c3dlYXIgRmFicmljIE1hbnVmYWN0dXJlciB8IFdlbGxEb25lVGV4JzsKICAgICAgICB1bnNldCgkdGl0bGVbJ3RhZ2xpbmUnXSk7CiAgICB9CiAgICByZXR1cm4gJHRpdGxlOwp9LCA5OTkpOwoKYWRkX2FjdGlvbignd3BfaGVhZCcsIGZ1bmN0aW9uKCkgewogICAgaWYgKCFpc19mcm9udF9wYWdlKCkpIHJldHVybjsKICAgID8+CiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iTGVhZGluZyBmbGVlY2UgZmFicmljLCBzcG9ydHN3ZWFyIGZhYnJpYyBhbmQgYWN0aXZld2VhciBmYWJyaWMgbWFudWZhY3R1cmVyIGluIENoaW5hLiBUaGVybWFsLCBhY3RpdmUgYW5kIGVjby1rbml0IHNlcmllcy4gR1JTICYgT0VLTy1URVggY2VydGlmaWVkLiBGcmVlIHNhbXBsZXMgJiBmYXN0IGRlbGl2ZXJ5LiI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkZsZWVjZSAmIFNwb3J0c3dlYXIgRmFicmljIE1hbnVmYWN0dXJlciB8IFdlbGxEb25lVGV4Ij4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iTGVhZGluZyBmbGVlY2UgZmFicmljLCBzcG9ydHN3ZWFyIGZhYnJpYyBhbmQgYWN0aXZld2VhciBmYWJyaWMgbWFudWZhY3R1cmVyIGluIENoaW5hLiBUaGVybWFsLCBhY3RpdmUgYW5kIGVjby1rbml0IHNlcmllcy4gR1JTICYgT0VLTy1URVggY2VydGlmaWVkLiI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovL3dlbGxkb25ldGV4LmNvbS8iPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlIiBjb250ZW50PSJodHRwczovL3dlbGxkb25ldGV4LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyMS8xMi9JTUdfMDM2Ni5qcGciPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnNpdGVfbmFtZSIgY29udGVudD0iV2VsbERvbmVUZXgiPgogICAgPG1ldGEgbmFtZT0idHdpdHRlcjpjYXJkIiBjb250ZW50PSJzdW1tYXJ5X2xhcmdlX2ltYWdlIj4KICAgIDw/cGhwCn0sIDUpOwoKLy8g4pSA4pSA4pSAIFJlbW92ZSBXb29Db21tZXJjZSBzaWRlYmFyIGZyb20gcHJvZHVjdCBwYWdlcyDilIDilIDilIAKYWRkX2FjdGlvbignZ2V0X3NpZGViYXInLCBmdW5jdGlvbigkbmFtZSkgewogICAgaWYgKGlzX3Byb2R1Y3QoKSB8fCBpc19wcm9kdWN0X2NhdGVnb3J5KCkgfHwgaXNfc2hvcCgpIHx8IGlzX3Npbmd1bGFyKCd3ZHR4X3Byb2R1Y3QnKSB8fCBpc19wb3N0X3R5cGVfYXJjaGl2ZSgnd2R0eF9wcm9kdWN0JykpIHsKICAgICAgICByZXR1cm47CiAgICB9Cn0sIDEpOwoKLy8g4pSA4pSA4pSAIEN1c3RvbSBGb290ZXIgKDQgY29sdW1ucyArIGJvdHRvbSBiYXIpIOKUgOKUgOKUgAphZGRfYWN0aW9uKCdnZW5lcmF0ZV9mb290ZXInLCBmdW5jdGlvbigpIHsKICAgID8+CiAgICA8Zm9vdGVyIGNsYXNzPSJ3ZHR4LWZvb3RlciI+CiAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1mb290ZXItd2lkZ2V0cyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtZm9vdGVyLWdyaWQiPgogICAgICAgICAgICAgICAgICAgIDwhLS0gQ29sdW1uIDE6IEFib3V0ICsgU29jaWFsIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gaG9tZV91cmwoKTsgPz4iIGNsYXNzPSJ3ZHR4LWZvb3Rlci1sb2dvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSI8P3BocCBlY2hvIGVzY191cmwod3BfZ2V0X2F0dGFjaG1lbnRfdXJsKDU2MjkpKTsgPz4iIGFsdD0iV2VsbGRvbmV0ZXggTG9nbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IndkdHgtZm9vdGVyLWRlc2MiPllvdXIgdHJ1c3RlZCBwYXJ0bmVyIGZvciBwcmVtaXVtIGtuaXQgZmFicmljcy4gT3ZlciAyMCB5ZWFycyBvZiBtYW51ZmFjdHVyaW5nIGV4Y2VsbGVuY2Ugd2l0aCBHUlMgJiBPRUtPLVRFWCBjZXJ0aWZpZWQgbWF0ZXJpYWxzLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1mb290ZXItc29jaWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGFyaWEtbGFiZWw9IkZhY2Vib29rIj48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj48cGF0aCBkPSJNMjQgMTIuMDczYzAtNi42MjctNS4zNzMtMTItMTItMTJzLTEyIDUuMzczLTEyIDEyYzAgNS45OSA0LjM4OCAxMC45NTQgMTAuMTI1IDExLjg1NHYtOC4zODVINy4wNzh2LTMuNDdoMy4wNDdWOS40M2MwLTMuMDA3IDEuNzkyLTQuNjY5IDQuNTMzLTQuNjY5IDEuMzEyIDAgMi42ODYuMjM1IDIuNjg2LjIzNXYyLjk1M0gxNS44M2MtMS40OTEgMC0xLjk1Ni45MjUtMS45NTYgMS44NzR2Mi4yNWgzLjMyOGwtLjUzMiAzLjQ3aC0yLjc5NnY4LjM4NUMxOS42MTIgMjMuMDI3IDI0IDE4LjA2MiAyNCAxMi4wNzN6Ii8+PC9zdmc+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgYXJpYS1sYWJlbD0iTGlua2VkSW4iPjxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMC40NDcgMjAuNDUyaC0zLjU1NHYtNS41NjljMC0xLjMyOC0uMDI3LTMuMDM3LTEuODUyLTMuMDM3LTEuODUzIDAtMi4xMzYgMS40NDUtMi4xMzYgMi45Mzl2NS42NjdIOS4zNTFWOWgzLjQxNHYxLjU2MWguMDQ2Yy40NzctLjkgMS42MzctMS44NSAzLjM3LTEuODUgMy42MDEgMCA0LjI2NyAyLjM3IDQuMjY3IDUuNDU1djYuMjg2ek01LjMzNyA3LjQzM2EyLjA2MiAyLjA2MiAwIDAxLTIuMDYzLTIuMDY1IDIuMDY0IDIuMDY0IDAgMTEyLjA2MyAyLjA2NXptMS43ODIgMTMuMDE5SDMuNTU1VjloMy41NjR2MTEuNDUyek0yMi4yMjUgMEgxLjc3MUMuNzkyIDAgMCAuNzc0IDAgMS43Mjl2MjAuNTQyQzAgMjMuMjI3Ljc5MiAyNCAxLjc3MSAyNGgyMC40NTFDMjMuMiAyNCAyNCAyMy4yMjcgMjQgMjIuMjcxVjEuNzI5QzI0IC43NzQgMjMuMiAwIDIyLjIyMiAwaC4wMDN6Ii8+PC9zdmc+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgYXJpYS1sYWJlbD0iSW5zdGFncmFtIj48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj48cGF0aCBkPSJNMTIgMi4xNjNjMy4yMDQgMCAzLjU4NC4wMTIgNC44NS4wNyAzLjI1Mi4xNDggNC43NzEgMS42OTEgNC45MTkgNC45MTkuMDU4IDEuMjY1LjA2OSAxLjY0NS4wNjkgNC44NDkgMCAzLjIwNS0uMDEyIDMuNTg0LS4wNjkgNC44NDktLjE0OSAzLjIyNS0xLjY2NCA0Ljc3MS00LjkxOSA0LjkxOS0xLjI2Ni4wNTgtMS42NDQuMDctNC44NS4wNy0zLjIwNCAwLTMuNTg0LS4wMTItNC44NDktLjA3LTMuMjYtLjE0OS00Ljc3MS0xLjY5OS00LjkxOS00LjkyLS4wNTgtMS4yNjUtLjA3LTEuNjQ0LS4wNy00Ljg0OSAwLTMuMjA0LjAxMy0zLjU4My4wNy00Ljg0OS4xNDktMy4yMjcgMS42NjQtNC43NzEgNC45MTktNC45MTkgMS4yNjYtLjA1NyAxLjY0NS0uMDY5IDQuODQ5LS4wNjl6TTEyIDBDOC43NDEgMCA4LjMzMy4wMTQgNy4wNTMuMDcyIDIuNjk1LjI3Mi4yNzMgMi42OS4wNzMgNy4wNTIuMDE0IDguMzMzIDAgOC43NDEgMCAxMmMwIDMuMjU5LjAxNCAzLjY2OC4wNzIgNC45NDguMiA0LjM1OCAyLjYxOCA2Ljc4IDYuOTggNi45OEM4LjMzMyAyMy45ODYgOC43NDEgMjQgMTIgMjRjMy4yNTkgMCAzLjY2OC0uMDE0IDQuOTQ4LS4wNzIgNC4zNTQtLjIgNi43ODItMi42MTggNi45NzktNi45OC4wNTktMS4yOC4wNzMtMS42ODkuMDczLTQuOTQ4IDAtMy4yNTktLjAxNC0zLjY2Ny0uMDcyLTQuOTQ3LS4xOTYtNC4zNTQtMi42MTctNi43OC02Ljk3OS02Ljk4QzE1LjY2OC4wMTQgMTUuMjU5IDAgMTIgMHptMCA1LjgzOGE2LjE2MiA2LjE2MiAwIDEwMCAxMi4zMjQgNi4xNjIgNi4xNjIgMCAwMDAtMTIuMzI0ek0xMiAxNmE0IDQgMCAxMTAtOCA0IDQgMCAwMTAgOHptNi40MDYtMTEuODQ1YTEuNDQgMS40NCAwIDEwMCAyLjg4MSAxLjQ0IDEuNDQgMCAwMDAtMi44ODF6Ii8+PC9zdmc+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgYXJpYS1sYWJlbD0iVGlrVG9rIj48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj48cGF0aCBkPSJNMTIuNTI1LjAyYzEuMzEtLjAyIDIuNjEtLjAxIDMuOTEtLjAyLjA4IDEuNTMuNjMgMy4wOSAxLjc1IDQuMTcgMS4xMiAxLjExIDIuNyAxLjYyIDQuMjQgMS43OXY0LjAzYy0xLjQ0LS4wNS0yLjg5LS4zNS00LjItLjk3LS41Ny0uMjYtMS4xLS41OS0xLjYyLS45My0uMDEgMi45Mi4wMSA1Ljg0LS4wMiA4Ljc1LS4wOCAxLjQtLjU0IDIuNzktMS4zNSAzLjk0LTEuMzEgMS45Mi0zLjU4IDMuMTctNS45MSAzLjIxLTEuNDMuMDgtMi44Ni0uMzEtNC4wOC0xLjAzLTIuMDItMS4xOS0zLjQ0LTMuMzctMy42NS01LjcxLS4wMi0uNS0uMDMtMS0uMDEtMS40OS4xOC0xLjkgMS4xMi0zLjcyIDIuNTgtNC45NiAxLjY2LTEuNDQgMy45OC0yLjEzIDYuMTUtMS43Mi4wMiAxLjQ4LS4wNCAyLjk2LS4wNCA0LjQ0LS45OS0uMzItMi4xNS0uMjMtMy4wMi4zNy0uNjMuNDEtMS4xMSAxLjA0LTEuMzYgMS43NS0uMjEuNTEtLjE1IDEuMDctLjE0IDEuNjEuMjQgMS42NCAxLjgyIDMuMDIgMy41IDIuODcgMS4xMi0uMDEgMi4xOS0uNjYgMi43Ny0xLjYxLjE5LS4zMy40LS42Ny40MS0xLjA2LjEtMS43OS4wNi0zLjU3LjA3LTUuMzYuMDEtNC4wMy0uMDEtOC4wNS4wMi0xMi4wN3oiLz48L3N2Zz48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwhLS0gQ29sdW1uIDI6IFF1aWNrIExpbmtzIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0id2R0eC1mb290ZXItaGVhZGluZyI+UXVpY2sgTGlua3M8L2g0PgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IndkdHgtZm9vdGVyLWxpbmtzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSI8P3BocCBlY2hvIGhvbWVfdXJsKCcvYWJvdXQvJyk7ID8+Ij5BYm91dCBVczwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ijw/cGhwIGVjaG8gaG9tZV91cmwoJy90ZWNoLXF1YWxpdHkvJyk7ID8+Ij5DZXJ0aWZpY2F0aW9uczwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ijw/cGhwIGVjaG8gaG9tZV91cmwoJy9wcm9kdWN0cy8nKTsgPz4iPlByb2R1Y3RzPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iPD9waHAgZWNobyBob21lX3VybCgnL2Jsb2cvJyk7ID8+Ij5JbnNpZ2h0czwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ijw/cGhwIGVjaG8gaG9tZV91cmwoJy9jb250YWN0LycpOyA/PiI+Q29udGFjdDwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwhLS0gQ29sdW1uIDM6IENvbnRhY3QgSW5mbyAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9IndkdHgtZm9vdGVyLWhlYWRpbmciPkNvbnRhY3Q8L2g0PgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IndkdHgtZm9vdGVyLWNvbnRhY3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj48cGF0aCBkPSJNMjEgMTBjMCA3LTkgMTMtOSAxM3MtOS02LTktMTNhOSA5IDAgMDExOCAweiIvPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTAiIHI9IjMiLz48L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5DaGluYSBPZmZpY2U8YnI+TmFuZ2FvcWlhbyBUb3duLCBSZW5odWFuZ3NoYW4gU3RyZWV0LCBIdXpob3UsIFpoZWppYW5nPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PHBhdGggZD0iTTIxIDEwYzAgNy05IDEzLTkgMTNzLTktNi05LTEzYTkgOSAwIDAxMTggMHoiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEwIiByPSIzIi8+PC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QmFuZ2xhZGVzaCBPZmZpY2U8YnI+S2hhLTMwLzUsIEtoaWxraGV0LCBNb2RkaGFwYXJhLCBEaGFrYS0xMjI5PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PHBhdGggZD0iTTQgNGgxNmMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg0Yy0xLjEgMC0yLS45LTItMlY2YzAtMS4xLjktMiAyLTJ6Ii8+PHBvbHlsaW5lIHBvaW50cz0iMjIsNiAxMiwxMyAyLDYiLz48L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86c2FsZXNAd2VsbGRvbmV0ZXguY29tIj5zYWxlc0B3ZWxsZG9uZXRleC5jb208L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwhLS0gQ29sdW1uIDQ6IE5ld3NsZXR0ZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJ3ZHR4LWZvb3Rlci1oZWFkaW5nIj5OZXdzbGV0dGVyPC9oND4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9ImNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsMC42NSk7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS43O21hcmdpbi1ib3R0b206MTZweDsiPkdldCB0aGUgbGF0ZXN0IGZhYnJpYyB0cmVuZHMsIGluZHVzdHJ5IGluc2lnaHRzLCBhbmQgZXhjbHVzaXZlIG9mZmVycy48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJ3ZHR4LW5ld3NsZXR0ZXItZm9ybSIgb25zdWJtaXQ9InJldHVybiBmYWxzZTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImVtYWlsIiBwbGFjZWhvbGRlcj0iWW91ciBlbWFpbCBhZGRyZXNzIiBhcmlhLWxhYmVsPSJFbWFpbCBmb3IgbmV3c2xldHRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCI+U3Vic2NyaWJlPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LWZvb3Rlci1ib3R0b20iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LWZvb3Rlci1ib3R0b20taW5uZXIiPgogICAgICAgICAgICAgICAgPHA+JmNvcHk7IDw/cGhwIGVjaG8gZGF0ZSgnWScpOyA/PiBXZWxsZG9uZXRleC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC48L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9mb290ZXI+CiAgICA8P3BocAp9KTsKCi8vIOKUgOKUgOKUgCBXaGF0c0FwcCBGbG9hdGluZyBCdXR0b24g4pSA4pSA4pSACmFkZF9hY3Rpb24oJ3dwX2Zvb3RlcicsIGZ1bmN0aW9uKCkgewogICAgPz4KICAgIDxhIGhyZWY9Imh0dHBzOi8vd2EubWUvODYxMzgwMDAxMzgwMCIgY2xhc3M9IndkdHgtd2hhdHNhcHAiIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiBhcmlhLWxhYmVsPSJDaGF0IG9uIFdoYXRzQXBwIj4KICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE3LjQ3MiAxNC4zODJjLS4yOTctLjE0OS0xLjc1OC0uODY3LTIuMDMtLjk2Ny0uMjczLS4wOTktLjQ3MS0uMTQ4LS42Ny4xNS0uMTk3LjI5Ny0uNzY3Ljk2Ni0uOTQgMS4xNjQtLjE3My4xOTktLjM0Ny4yMjMtLjY0NC4wNzUtLjI5Ny0uMTUtMS4yNTUtLjQ2My0yLjM5LTEuNDc1LS44ODMtLjc4OC0xLjQ4LTEuNzYxLTEuNjUzLTIuMDU5LS4xNzMtLjI5Ny0uMDE4LS40NTguMTMtLjYwNi4xMzQtLjEzMy4yOTgtLjM0Ny40NDYtLjUyLjE0OS0uMTc0LjE5OC0uMjk4LjI5OC0uNDk3LjA5OS0uMTk4LjA1LS4zNzEtLjAyNS0uNTItLjA3NS0uMTQ5LS42NjktMS42MTItLjkxNi0yLjIwNy0uMjQyLS41NzktLjQ4Ny0uNS0uNjY5LS41MS0uMTczLS4wMDgtLjM3MS0uMDEtLjU3LS4wMS0uMTk4IDAtLjUyLjA3NC0uNzkyLjM3Mi0uMjcyLjI5Ny0xLjA0IDEuMDE2LTEuMDQgMi40NzkgMCAxLjQ2MiAxLjA2NSAyLjg3NSAxLjIxMyAzLjA3NC4xNDkuMTk4IDIuMDk2IDMuMiA1LjA3NyA0LjQ4Ny43MDkuMzA2IDEuMjYyLjQ4OSAxLjY5NC42MjUuNzEyLjIyNyAxLjM2LjE5NSAxLjg3MS4xMTguNTcxLS4wODUgMS43NTgtLjcxOSAyLjAwNi0xLjQxMy4yNDgtLjY5NC4yNDgtMS4yODkuMTczLTEuNDEzLS4wNzQtLjEyNC0uMjcyLS4xOTgtLjU3LS4zNDdtLTUuNDIxIDcuNDAzaC0uMDA0YTkuODcgOS44NyAwIDAxLTUuMDMxLTEuMzc4bC0uMzYxLS4yMTQtMy43NDEuOTgyLjk5OC0zLjY0OC0uMjM1LS4zNzRhOS44NiA5Ljg2IDAgMDEtMS41MS01LjI2Yy4wMDEtNS40NSA0LjQzNi05Ljg4NCA5Ljg4OC05Ljg4NCAyLjY0IDAgNS4xMjIgMS4wMyA2Ljk4OCAyLjg5OGE5LjgyNSA5LjgyNSAwIDAxMi44OTMgNi45OTRjLS4wMDMgNS40NS00LjQzNyA5Ljg4NC05Ljg4NSA5Ljg4NG04LjQxMy0xOC4yOTdBMTEuODE1IDExLjgxNSAwIDAwMTIuMDUgMEM1LjQ5NSAwIC4xNiA1LjMzNS4xNTcgMTEuODkyYzAgMi4wOTYuNTQ3IDQuMTQyIDEuNTg4IDUuOTQ1TC4wNTcgMjRsNi4zMDUtMS42NTRhMTEuODgyIDExLjg4MiAwIDAwNS42ODMgMS40NDhoLjAwNWM2LjU1NCAwIDExLjg5LTUuMzM1IDExLjg5My0xMS44OTNhMTEuODIxIDExLjgyMSAwIDAwLTMuNDgtOC40MTN6Ii8+PC9zdmc+CiAgICA8L2E+CiAgICA8P3BocAp9KTsKCgoKCgoKLy8g4pSA4pSA4pSAIEhFQURFUiBTQ1JPTEwgRUZGRUNUIOKUgOKUgOKUgAphZGRfYWN0aW9uKCd3cF9mb290ZXInLCBmdW5jdGlvbigpIHsKICAgID8+CiAgICA8c2NyaXB0PgogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBoZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2l0ZS1oZWFkZXInKTsKICAgICAgICBpZiAoIWhlYWRlcikgcmV0dXJuOwogICAgICAgIHZhciBsYXN0U2Nyb2xsID0gMDsKICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICh3aW5kb3cuc2Nyb2xsWSA+IDUwKSB7CiAgICAgICAgICAgICAgICBoZWFkZXIuY2xhc3NMaXN0LmFkZCgnc2Nyb2xsZWQnKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhlYWRlci5jbGFzc0xpc3QucmVtb3ZlKCdzY3JvbGxlZCcpOwogICAgICAgICAgICB9CiAgICAgICAgfSwgeyBwYXNzaXZlOiB0cnVlIH0pOwogICAgfSk7CiAgICA8L3NjcmlwdD4KICAgIDw/cGhwCn0pOwoKLy8g4pSA4pSA4pSAIENPTVBMRVRFIEhPTUVQQUdFIENPTlRFTlQgKHJlcGxhY2VzIHBhZ2UgY29udGVudCBvbiBmcm9udCBwYWdlKSDilIDilIDilIAKLy8gRGlzYWJsZSB3cGF1dG9wIG9uIGZyb250IHBhZ2Ugc28gb3VyIEhUTUwgc3RydWN0dXJlIGlzIHByZXNlcnZlZAphZGRfYWN0aW9uKCd0ZW1wbGF0ZV9yZWRpcmVjdCcsIGZ1bmN0aW9uKCkgewogICAgaWYgKGlzX2Zyb250X3BhZ2UoKSB8fCBpc19wYWdlKDkzNDEpKSB7CiAgICAgICAgcmVtb3ZlX2ZpbHRlcigndGhlX2NvbnRlbnQnLCAnd3BhdXRvcCcpOwogICAgICAgIHJlbW92ZV9maWx0ZXIoJ3RoZV9jb250ZW50JywgJ3dwYXV0b3AnLCAxMCk7CiAgICB9Cn0pOwoKYWRkX2ZpbHRlcigndGhlX2NvbnRlbnQnLCBmdW5jdGlvbigkY29udGVudCkgewogICAgaWYgKCFpc19mcm9udF9wYWdlKCkpIHJldHVybiAkY29udGVudDsKCiAgICBvYl9zdGFydCgpOwogICAgPz4KICAgIDwhLS0g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgICAgICAgIFNFQ1RJT04gMSDigJQgSEVSTwogICAgICAgICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgLS0+CiAgICA8c2VjdGlvbiBjbGFzcz0id2R0eC1oZXJvIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LWhlcm8tYmciPgogICAgICAgICAgICA8IS0tIEhlcm8gdmlkZW8gYmFja2dyb3VuZCAtLT4KICAgICAgICAgICAgPHZpZGVvIGF1dG9wbGF5IG11dGVkIGxvb3AgcGxheXNpbmxpbmU+CiAgICAgICAgICAgICAgICA8c291cmNlIHNyYz0iPD9waHAgZWNobyBlc2NfdXJsKGdldF9zdHlsZXNoZWV0X2RpcmVjdG9yeV91cmkoKSk7ID8+L2ltYWdlcy9oZXJvLWJnLm1wNCIgdHlwZT0idmlkZW8vbXA0Ij4KICAgICAgICAgICAgPC92aWRlbz4KICAgICAgICAgICAgPCEtLSBGYWxsYmFjayB0ZXh0dXJlIGltYWdlIC0tPgogICAgICAgICAgICA8aW1nIHNyYz0iPD9waHAgZWNobyBlc2NfdXJsKGdldF90ZW1wbGF0ZV9kaXJlY3RvcnlfdXJpKCkpOyA/Pi9pbWFnZXMvaGVyby10ZXh0dXJlLmpwZyIgYWx0PSIiIGxvYWRpbmc9ImVhZ2VyIgogICAgICAgICAgICAgICAgIG9uZXJyb3I9InRoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSciPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8aDE+UHJlbWl1bSBGbGVlY2UsIFNwb3J0c3dlYXIgJiBBY3RpdmV3ZWFyIEZhYnJpYyBNYW51ZmFjdHVyZXI8L2gxPgogICAgICAgIDxwIGNsYXNzPSJoZXJvLXN1YnRpdGxlIj5DaGluYS1iYXNlZCBtYW51ZmFjdHVyZXIgc3BlY2lhbGl6aW5nIGluIDxzdHJvbmc+ZmxlZWNlIGZhYnJpYzwvc3Ryb25nPiwgPHN0cm9uZz5zcG9ydHN3ZWFyIGZhYnJpYzwvc3Ryb25nPiBhbmQgPHN0cm9uZz5hY3RpdmV3ZWFyIGZhYnJpYzwvc3Ryb25nPi4gR1JTICZhbXA7IE9FS08tVEVYIGNlcnRpZmllZC4gVmVydGljYWxseSBpbnRlZ3JhdGVkIGZyb20geWFybiB0byBmaW5pc2hlZCBmYWJyaWMuPC9wPgoKICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LWhlcm8tYnRucyI+CiAgICAgICAgICAgIDxhIGhyZWY9Ii9wcm9kdWN0cy8iIGNsYXNzPSJ3ZHR4LWJ0biB3ZHR4LWJ0bi1wcmltYXJ5Ij4KICAgICAgICAgICAgICAgIEV4cGxvcmUgT3VyIENvbGxlY3Rpb24KICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvY29udGFjdC8iIGNsYXNzPSJ3ZHR4LWJ0biB3ZHR4LWJ0bi1vdXRsaW5lIj4KICAgICAgICAgICAgICAgIEdldCBBIFF1aWNrIFF1b3RlCiAgICAgICAgICAgIDwvYT4KICAgICAgICA8L2Rpdj4KICAgIDwvc2VjdGlvbj4KCiAgICA8IS0tIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICAgICAgICBTRUNUSU9OIDEuNSDigJQgQUJPVVQgV0VMTERPTkVURVggKHRleHQgKyBmYWN0b3J5IHZpZGVvKQogICAgICAgICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgLS0+CiAgICA8c2VjdGlvbiBjbGFzcz0id2R0eC1hYm91dC1mYWN0b3J5IiBzdHlsZT0icGFkZGluZzo4MHB4IDIwcHg7IGJhY2tncm91bmQ6I2ZmZjsiPgogICAgICAgIDxkaXYgc3R5bGU9Im1heC13aWR0aDoxMjAwcHg7IG1hcmdpbjowIGF1dG87IGRpc3BsYXk6ZmxleDsgZ2FwOjYwcHg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZmxleC13cmFwOndyYXA7Ij4KICAgICAgICAgICAgPCEtLSBMZWZ0OiBUZXh0IGNvbnRlbnQgLS0+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZsZXg6MTsgbWluLXdpZHRoOjMyMHB4OyI+CiAgICAgICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjAuODVyZW07IGZvbnQtd2VpZ2h0OjYwMDsgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzoycHg7IGNvbG9yOiM0ZDdmZmY7IG1hcmdpbjowIDAgMTJweCAwOyI+QWJvdXQgV2VsbERvbmVUZXg8L3A+CiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9ImZvbnQtc2l6ZToycmVtOyBmb250LXdlaWdodDo3MDA7IGNvbG9yOiMwZDFiM2U7IG1hcmdpbjowIDAgMjBweCAwOyBsaW5lLWhlaWdodDoxLjM7Ij5Zb3VyIFRydXN0ZWQgPHN0cm9uZyBzdHlsZT0iY29sb3I6IzRkN2ZmZjsiPktuaXQgRmFicmljIE1hbnVmYWN0dXJlcjwvc3Ryb25nPiBpbiBDaGluYTwvaDI+CiAgICAgICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjEuMDVyZW07IGxpbmUtaGVpZ2h0OjEuODU7IGNvbG9yOiM1NTU7IG1hcmdpbjowIDAgMTZweCAwOyI+V2VsbERvbmVUZXggaXMgYSA8c3Ryb25nIHN0eWxlPSJjb2xvcjojMzMzOyI+bGVhZGluZyBrbml0IGZhYnJpYyBtYW51ZmFjdHVyZXI8L3N0cm9uZz4gd2l0aCBvdmVyIDIwIHllYXJzIG9mIGV4cG9ydCBleHBlcmllbmNlLiBXZSBzcGVjaWFsaXplIGluIHByZW1pdW0gPHN0cm9uZyBzdHlsZT0iY29sb3I6IzMzMzsiPmZsZWVjZSBmYWJyaWM8L3N0cm9uZz4g4oCUIHBvbGFyIGZsZWVjZSwgYW50aS1waWxsIGZsZWVjZSwgYnJ1c2hlZCBmbGVlY2Ug4oCUIGFzIHdlbGwgYXMgaGlnaC1wZXJmb3JtYW5jZSA8c3Ryb25nIHN0eWxlPSJjb2xvcjojMzMzOyI+c3BvcnRzd2VhciBmYWJyaWM8L3N0cm9uZz4gYW5kIDxzdHJvbmcgc3R5bGU9ImNvbG9yOiMzMzM7Ij5hY3RpdmV3ZWFyIGZhYnJpYzwvc3Ryb25nPiBpbmNsdWRpbmcgZnJlbmNoIHRlcnJ5LCBzcGFjZXIgbWVzaCBhbmQgbW9pc3R1cmUtd2lja2luZyBrbml0cy48L3A+CiAgICAgICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjEuMDVyZW07IGxpbmUtaGVpZ2h0OjEuODU7IGNvbG9yOiM1NTU7IG1hcmdpbjowIDAgMTZweCAwOyI+T3VyIHZlcnRpY2FsbHkgaW50ZWdyYXRlZCBmYWNpbGl0eSBpbiBIdXpob3UsIFpoZWppYW5nIGNvdmVycyBldmVyeSBzdGFnZTogeWFybiBzb3VyY2luZyDihpIga25pdHRpbmcg4oaSIGR5ZWluZyDihpIgZmluaXNoaW5nIOKGkiBxdWFsaXR5IGluc3BlY3Rpb24uIFdlIGhvbGQgPHN0cm9uZyBzdHlsZT0iY29sb3I6IzMzMzsiPkdSUzwvc3Ryb25nPiBhbmQgPHN0cm9uZyBzdHlsZT0iY29sb3I6IzMzMzsiPk9FS08tVEVYIFN0YW5kYXJkIDEwMDwvc3Ryb25nPiBjZXJ0aWZpY2F0aW9ucy48L3A+CiAgICAgICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjEuMDVyZW07IGxpbmUtaGVpZ2h0OjEuODU7IGNvbG9yOiM1NTU7IG1hcmdpbjowOyI+V2l0aCA4LDAwMCsgdG9ucyBhbm51YWwgb3V0cHV0IGFuZCBjbGllbnRzIGFjcm9zcyAzMCsgY291bnRyaWVzLCBvdXIgPHN0cm9uZyBzdHlsZT0iY29sb3I6IzMzMzsiPkRoYWthIG9mZmljZTwvc3Ryb25nPiBpbiBCYW5nbGFkZXNoIHByb3ZpZGVzIGRlZGljYXRlZCBvbi1zaXRlIHN1cHBvcnQuIFN0YW5kYXJkIDxzdHJvbmcgc3R5bGU9ImNvbG9yOiMzMzM7Ij5NT1Egb2YgMTAwMGtnczwvc3Ryb25nPiBwZXIgY29sb3Igd2l0aCAyNC1ob3VyIHNhbXBsaW5nIHNlcnZpY2UuPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPCEtLSBSaWdodDogRmFjdG9yeSB2aWRlbyBpbiBpUGhvbmUgMTcgbW9ja3VwIC0tPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJmbGV4OjAgMCAzMjBweDsgbWluLXdpZHRoOjI2MHB4OyBwYWRkaW5nLXJpZ2h0OjIwcHg7Ij4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyB3aWR0aDoxMDAlOyBtYXgtd2lkdGg6MjgwcHg7IG1hcmdpbjowIGF1dG87IGZpbHRlcjpkcm9wLXNoYWRvdygwIDMwcHggNjBweCByZ2JhKDEzLDI3LDYyLDAuMykpOyI+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBQaG9uZSBib2R5OiB0aGluIGJlemVscyBsaWtlIHJlYWwgaVBob25lIDE3IC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyB3aWR0aDoxMDAlOyBhc3BlY3QtcmF0aW86MjcyLzU4NTsgYm9yZGVyLXJhZGl1czo0MnB4OyBvdmVyZmxvdzpoaWRkZW47IGJhY2tncm91bmQ6IzFhMWEyZTsgYm9yZGVyOjIuNXB4IHNvbGlkICMyYTJhM2E7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTY3JlZW4gYXJlYTogdmVyeSB0aGluIGJlemVscyAoOHB4IGluc2V0KSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IHRvcDo4cHg7IGxlZnQ6OHB4OyByaWdodDo4cHg7IGJvdHRvbTo4cHg7IGJvcmRlci1yYWRpdXM6MzRweDsgb3ZlcmZsb3c6aGlkZGVuOyBiYWNrZ3JvdW5kOiMwMDA7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRHluYW1pYyBJc2xhbmQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjZweDsgbGVmdDo1MCU7IHRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpOyB3aWR0aDo3NnB4OyBoZWlnaHQ6MjJweDsgYmFja2dyb3VuZDojMDAwOyBib3JkZXItcmFkaXVzOjExcHg7IHotaW5kZXg6MTA7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7IHBhZGRpbmctcmlnaHQ6MTJweDsgYm9yZGVyOjAuNXB4IHNvbGlkICMxYTFhMWE7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDo5cHg7IGhlaWdodDo5cHg7IGJvcmRlci1yYWRpdXM6NTAlOyBiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMzUlIDM1JSwgIzFhMWEzYSAwJSwgIzA1MDUxMCA3MCUpOyBib3JkZXI6MC41cHggc29saWQgIzFhMWExYTsiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFZpZGVvOiBmaWxscyBzY3JlZW4sIGNvbnRhaW4ga2VlcHMgYXNwZWN0IHJhdGlvIHdpdGggbWluaW1hbCBiYXJzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGF1dG9wbGF5IG11dGVkIGxvb3AgcGxheXNpbmxpbmUgcHJlbG9hZD0ibWV0YWRhdGEiIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJTsgb2JqZWN0LWZpdDpjb250YWluOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBzcmM9Ii93cC1jb250ZW50L3VwbG9hZHMvd2VsbGRvbmV0ZXgtZmFjdG9yeS10b3VyLm1wNCIgdHlwZT0idmlkZW8vbXA0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmlkZW8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNpZGUgYnV0dG9ucyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6LTIuNXB4OyB0b3A6MjQlOyB3aWR0aDo0cHg7IGhlaWdodDoyMnB4OyBiYWNrZ3JvdW5kOiMyYTJhM2E7IGJvcmRlci1yYWRpdXM6MCAycHggMnB4IDA7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6LTIuNXB4OyB0b3A6MzAlOyB3aWR0aDo0cHg7IGhlaWdodDozNHB4OyBiYWNrZ3JvdW5kOiMyYTJhM2E7IGJvcmRlci1yYWRpdXM6MCAycHggMnB4IDA7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6LTIuNXB4OyB0b3A6MzclOyB3aWR0aDo0cHg7IGhlaWdodDozNHB4OyBiYWNrZ3JvdW5kOiMyYTJhM2E7IGJvcmRlci1yYWRpdXM6MCAycHggMnB4IDA7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IHJpZ2h0Oi0yLjVweDsgdG9wOjMwJTsgd2lkdGg6NHB4OyBoZWlnaHQ6NTBweDsgYmFja2dyb3VuZDojMmEyYTNhOyBib3JkZXItcmFkaXVzOjJweCAwIDAgMnB4OyI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSG9tZSBJbmRpY2F0b3IgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyBib3R0b206NHB4OyBsZWZ0OjUwJTsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7IHdpZHRoOjU2cHg7IGhlaWdodDo0cHg7IGJhY2tncm91bmQ6IzMzMzM1NTsgYm9yZGVyLXJhZGl1czoycHg7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvc2VjdGlvbj4KCiAgICA8IS0tIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICAgICAgICBTRUNUSU9OIDIg4oCUIFRSVVNUIEJBUgogICAgICAgICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgLS0+CiAgICA8c2VjdGlvbiBjbGFzcz0id2R0eC10cnVzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0id2R0eC10cnVzdC1pbm5lciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtdHJ1c3QtaXRlbSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LXRydXN0LWljb24iPgogICAgICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMyA5bDktNyA5IDd2MTFhMiAyIDAgMDEtMiAySDVhMiAyIDAgMDEtMi0yeiIvPjxwb2x5bGluZSBwb2ludHM9IjkgMjIgOSAxMiAxNSAxMiAxNSAyMiIvPjwvc3ZnPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8aDM+VmVydGljYWxseSBJbnRlZ3JhdGVkPC9oMz4KICAgICAgICAgICAgICAgIDxwPkNoaW5hLWJhc2VkIGtuaXQgZmFicmljIGZhY3Rvcnkgd2l0aCBjb21wbGV0ZSB5YXJuLXRvLWZhYnJpYyBjb250cm9sLiBTcGVjaWFsaXppbmcgaW4gZmxlZWNlLCBzcG9ydHN3ZWFyIGFuZCBhY3RpdmV3ZWFyIGZhYnJpY3MuPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC10cnVzdC1pdGVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtdHJ1c3QtaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PHBvbHlsaW5lIHBvaW50cz0iMTIgNiAxMiAxMiAxNiAxNCIvPjwvc3ZnPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8aDM+RmFzdCBTYW1wbGluZzwvaDM+CiAgICAgICAgICAgICAgICA8cD4yNC1ob3VyIHNhbXBsaW5nIHR1cm5hcm91bmQuIERoYWthIGxvY2FsIG9mZmljZSBmb3Igb24tc2l0ZSBzdXBwb3J0LjwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtdHJ1c3QtaXRlbSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LXRydXN0LWljb24iPgogICAgICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTIgMjJjNS41MjMgMCAxMC00LjQ3NyAxMC0xMFMxNy41MjMgMiAxMiAyIDIgNi40NzcgMiAxMnM0LjQ3NyAxMCAxMCAxMHoiLz48cGF0aCBkPSJNNyAxMC41YzAtMS42NTcgMi4yMzktMyA1LTNzNSAxLjM0MyA1IDMiLz48cGF0aCBkPSJNMTIgMTd2LjAxIi8+PC9zdmc+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxoMz5TdXN0YWluYWJsZSBJbm5vdmF0aW9uPC9oMz4KICAgICAgICAgICAgICAgIDxwPkdSUyBDZXJ0aWZpZWQgcmVjeWNsZWQgbWF0ZXJpYWxzLiBPRUtPLVRFWCBTdGFuZGFyZCAxMDAuIEVjby1jb25zY2lvdXMgcHJvZHVjdGlvbi48L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9zZWN0aW9uPgoKCgoKICAgIDwhLS0g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgICAgICAgIFNFQ1RJT04gMyDigJQgRkVBVFVSRUQgRkFCUklDIENPTExFQ1RJT05TCiAgICAgICAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAtLT4KICAgIDxzZWN0aW9uIGNsYXNzPSJ3ZHR4LWNvbGxlY3Rpb25zIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LXNlY3Rpb24taGVhZGVyIj4KICAgICAgICAgICAgPGgyPkZsZWVjZSwgU3BvcnRzd2VhciAmIEFjdGl2ZXdlYXIgRmFicmljIENvbGxlY3Rpb25zPC9oMj4KICAgICAgICAgICAgPHA+RnJvbSA8c3Ryb25nPmZsZWVjZSBmYWJyaWM8L3N0cm9uZz4gZm9yIHRoZXJtYWwgd2FybXRoIHRvIDxzdHJvbmc+c3BvcnRzd2VhciAmYW1wOyBhY3RpdmV3ZWFyIGZhYnJpYzwvc3Ryb25nPiBmb3IgcGVhayBwZXJmb3JtYW5jZSDigJQgcGx1cyBvdXIgc3VzdGFpbmFibGUgPHN0cm9uZz5lY28ta25pdDwvc3Ryb25nPiBjb2xsZWN0aW9uLjwvcD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1jYXJkcy1ncmlkIHdkdHgtY2FyZHMtZ3JpZC02Ij4KICAgICAgICAgICAgPCEtLSBDYXJkIDE6IFByZW1pdW0gRmxlZWNlIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LXByb2R1Y3QtY2FyZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LWNhcmQtaW1hZ2UiPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL3dlbGxkb25ldGV4LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyMS8xMi9JTUdfMDM2Ni5qcGciIGFsdD0iUHJlbWl1bSBQb2xhciBGbGVlY2UgRmFicmljIiBsb2FkaW5nPSJsYXp5Ij4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0id2R0eC1jYXJkLWJhZGdlIj5CZXN0IFNlbGxlcjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1jYXJkLWJvZHkiPgogICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0id2R0eC1jYXJkLWZlYXR1cmVzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj48cG9seWxpbmUgcG9pbnRzPSIyMCA2IDkgMTcgNCAxMiIvPjwvc3ZnPkFudGktUGlsbGluZzwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PHBvbHlsaW5lIHBvaW50cz0iMjAgNiA5IDE3IDQgMTIiLz48L3N2Zz4zMDAtNDUwIEdTTTwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PHBvbHlsaW5lIHBvaW50cz0iMjAgNiA5IDE3IDQgMTIiLz48L3N2Zz5PRUtPLVRFWDwvbGk+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICA8aDM+VGhlcm1hbCBGbGVlY2UgRmFicmljPC9oMz4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY2FyZC10YWdsaW5lIj5Qb2xhciBmbGVlY2UsIGFudGktcGlsbCBmbGVlY2UgJiBicnVzaGVkIGZsZWVjZSBmb3IgaG9vZGllcyBhbmQgb3V0ZXJ3ZWFyLjwvcD4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvcHJvZHVjdC1zZXJpZXMvdGhlcm1hbC8iIGNsYXNzPSJ3ZHR4LWNhcmQtbGluayI+VmlldyBDb2xsZWN0aW9uPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBDYXJkIDI6IFBlcmZvcm1hbmNlIFRlcnJ5IC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LXByb2R1Y3QtY2FyZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LWNhcmQtaW1hZ2UiPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL3dlbGxkb25ldGV4LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyMS8xMS9JTUdfMDA3Ny5qcGciIGFsdD0iUGVyZm9ybWFuY2UgVGVycnkgRmFicmljIiBsb2FkaW5nPSJsYXp5Ij4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0id2R0eC1jYXJkLWJhZGdlIiBzdHlsZT0iYmFja2dyb3VuZDojMWUxNTYwOyI+SGVhdnl3ZWlnaHQ8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtY2FyZC1ib2R5Ij4KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IndkdHgtY2FyZC1mZWF0dXJlcyI+CiAgICAgICAgZHRoPSIxIiBvcGFjaXR5PSIwLjUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJyIiBmcm9tPSIzLjUiIHRvPSIxNiIgZHVyPSIycyIgYmVnaW49IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJvcGFjaXR5IiBmcm9tPSIwLjUiIHRvPSIwIiBkdXI9IjJzIiBiZWdpbj0iMnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIi8+CiAgICAgICAgICAgICAgICAgICAgPC9jaXJjbGU+CgogICAgICAgICAgICAgICAgICAgIDwhLS0gQ29ubmVjdGlvbiBhcmNzIGZyb20gQ2hpbmEgSFEgLS0+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTczOCAxOTUgUTY5OCAxODAgNjYyIDIxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNGQ3ZmZmIiBzdHJva2Utd2lkdGg9IjAuOCIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIiBvcGFjaXR5PSIwLjM1Ii8+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTczOCAxOTUgUTYwOCAxMDggNDgyIDEwNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNGQ3ZmZmIiBzdHJva2Utd2lkdGg9IjAuNiIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIiBvcGFjaXR5PSIwLjIyIi8+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTczOCAxOTUgUTQ4MCAxNDggMjI4IDE3NSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNGQ3ZmZmIiBzdHJva2Utd2lkdGg9IjAuNiIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIiBvcGFjaXR5PSIwLjE1Ii8+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTczOCAxOTUgUTc5OCAzMTAgODM4IDM0OCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNGQ3ZmZmIiBzdHJva2Utd2lkdGg9IjAuNiIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIiBvcGFjaXR5PSIwLjE4Ii8+CiAgICAgICAgICAgICAgICA8L3N2Zz4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LW1hcC1waW5zIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LW1hcC1waW4iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LW1hcC1waW4tZG90Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Q2hpbmEgSFE8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1tYXAtcGluIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1tYXAtcGluLWRvdCIgc3R5bGU9ImJhY2tncm91bmQ6I2U3NGMzYzsiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EaGFrYSBPZmZpY2U8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1tYXAtcGluIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1tYXAtcGluLWRvdCIgc3R5bGU9ImJhY2tncm91bmQ6I2YzOWMxMjsiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5FVSAmIEFtZXJpY2FzPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtbWFwLXBpbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtbWFwLXBpbi1kb3QiIHN0eWxlPSJiYWNrZ3JvdW5kOiMyZWNjNzE7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+T2NlYW5pYTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtZ2xvYmFsLWN0YSI+CiAgICAgICAgICAgICAgICA8aDI+UmVhZHkgdG8gU291cmNlIFF1YWxpdHkgS25pdCBGYWJyaWM/PC9oMj4KICAgICAgICAgICAgICAgIDxwPkNvbnRhY3Qgb3VyIGV4cGVydCB0ZWFtIHRvZGF5LiBHZXQgZnJlZSA8c3Ryb25nPmZsZWVjZSBmYWJyaWM8L3N0cm9uZz4sIDxzdHJvbmc+c3BvcnRzd2VhciBmYWJyaWM8L3N0cm9uZz4gb3IgPHN0cm9uZz5hY3RpdmV3ZWFyIGZhYnJpYzwvc3Ryb25nPiBzYW1wbGVzIHdpdGhpbiAyNCBob3VycyDigJQgd2l0aCBwcmljaW5nIGFuZCBjdXN0b20gZGV2ZWxvcG1lbnQgcGxhbnMuPC9wPgogICAgICAgICAgICAgICAgPHA+V2hldGhlciB5b3UncmUgYSBzdGFydHVwIG9yIGFuIGVzdGFibGlzaGVkIGJyYW5kLCBvdXIgc3RhbmRhcmQgTU9RIG9mIDEwMDBrZ3MgcGVyIGNvbG9yIGFuZCB2ZXJ0aWNhbCBpbnRlZ3JhdGlvbiBnaXZlIHlvdSB0aGUgY29tcGV0aXRpdmUgZWRnZS48L3A+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIvY29udGFjdC8iIGNsYXNzPSJ3ZHR4LWJ0biB3ZHR4LWJ0bi1wcmltYXJ5Ij4KICAgICAgICAgICAgICAgICAgICBHZXQgYSBGcmVlIFF1b3RlIE5vdwogICAgICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxsaW5lIHgxPSI1IiB5MT0iMTIiIHgyPSIxOSIgeTI9IjEyIi8+PHBvbHlsaW5lIHBvaW50cz0iMTIgNSAxOSAxMiAxMiAxOSIvPjwvc3ZnPgogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvc2VjdGlvbj4KCgoKCiAgICA8P3BocAogICAgcmV0dXJuIG9iX2dldF9jbGVhbigpOwp9LCAxKTsgLy8gUHJpb3JpdHkgMSB0byBvdmVycmlkZSBhbnkgb3RoZXIgY29udGVudCBmaWx0ZXIKCi8vIOKUgOKUgOKUgCBTRU86IEFkZCBzY2hlbWEub3JnIG1hcmt1cCBmb3IgaG9tZXBhZ2Ug4pSA4pSA4pSACmFkZF9hY3Rpb24oJ3dwX2hlYWQnLCBmdW5jdGlvbigpIHsKICAgIGlmICghaXNfZnJvbnRfcGFnZSgpKSByZXR1cm47CiAgICA/PgogICAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4KICAgIHsKICAgICAgICAiQGNvbnRleHQiOiAiaHR0cHM6Ly9zY2hlbWEub3JnIiwKICAgICAgICAiQHR5cGUiOiAiTG9jYWxCdXNpbmVzcyIsCiAgICAgICAgIm5hbWUiOiAiV2VsbGRvbmV0ZXgiLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJMZWFkaW5nIG1hbnVmYWN0dXJlciBvZiBmbGVlY2UgZmFicmljLCBzcG9ydHN3ZWFyIGZhYnJpYyBhbmQgYWN0aXZld2VhciBmYWJyaWMgaW4gQ2hpbmEuIFRoZXJtYWwsIGFjdGl2ZSBhbmQgZWNvLWtuaXQgc2VyaWVzLiBHUlMgJiBPRUtPLVRFWCBjZXJ0aWZpZWQuIE92ZXIgMjAgeWVhcnMgZXhwb3J0IGV4cGVyaWVuY2UuIiwKICAgICAgICAidXJsIjogImh0dHBzOi8vd2VsbGRvbmV0ZXguY29tIiwKICAgICAgICAibG9nbyI6ICJodHRwczovL3dlbGxkb25ldGV4LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNC8wNi9XRWxsRE9ORS1MT0dPLnBuZyIsCiAgICAgICAgImltYWdlIjogImh0dHBzOi8vd2VsbGRvbmV0ZXguY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIxLzEyL0lNR18wMzY2LmpwZyIsCiAgICAgICAgInRlbGVwaG9uZSI6ICIrODYtMTM4LTAwMDEtMzgwMCIsCiAgICAgICAgImVtYWlsIjogInNhbGVzQHdlbGxkb25ldGV4LmNvbSIsCiAgICAgICAgImFkZHJlc3MiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJAdHlwZSI6ICJQb3N0YWxBZGRyZXNzIiwKICAgICAgICAgICAgICAgICJzdHJlZXRBZGRyZXNzIjogIk5hbmdhb3FpYW8gVG93biwgUmVuaHVhbmdzaGFuIFN0cmVldCIsCiAgICAgICAgICAgICAgICAiYWRkcmVzc0xvY2FsaXR5IjogIkh1emhvdSIsCiAgICAgICAgICAgICAgICAiYWRkcmVzc1JlZ2lvbiI6ICJaaGVqaWFuZyIsCiAgICAgICAgICAgICAgICAiYWRkcmVzc0NvdW50cnkiOiAiQ04iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJAdHlwZSI6ICJQb3N0YWxBZGRyZXNzIiwKICAgICAgICAgICAgICAgICJzdHJlZXRBZGRyZXNzIjogIktoYS0zMC81LCBLaGlsa2hldCwgTW9kZGhhcGFyYSwgRGhha2EtMTIyOSIsCiAgICAgICAgICAgICAgICAiYWRkcmVzc0NvdW50cnkiOiAiQkQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgICAgICJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tcGFueS93ZWxsZG9uZXRleCIsCiAgICAgICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3dlbGxkb25ldGV4IgogICAgICAgIF0KICAgIH0KICAgIDwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4KICAgIHsKICAgICAgICAiQGNvbnRleHQiOiAiaHR0cHM6Ly9zY2hlbWEub3JnIiwKICAgICAgICAiQHR5cGUiOiAiRkFRUGFnZSIsCiAgICAgICAgIm1haW5FbnRpdHkiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJAdHlwZSI6ICJRdWVzdGlvbiIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJXaGF0IGlzIHlvdXIgTU9RIGZvciBmbGVlY2UgZmFicmljIGFuZCBzcG9ydHN3ZWFyIGZhYnJpYz8iLAogICAgICAgICAgICAgICAgImFjY2VwdGVkQW5zd2VyIjogewogICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJBbnN3ZXIiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IjogIk91ciBzdGFuZGFyZCBNT1EgaXMgMTAwMGtncyBwZXIgY29sb3IgZm9yIGFsbCBmbGVlY2UgZmFicmljLCBzcG9ydHN3ZWFyIGZhYnJpYywgYWN0aXZld2VhciBmYWJyaWMsIGFuZCBlY28tZnJpZW5kbHkga25pdCBmYWJyaWMuIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiQHR5cGUiOiAiUXVlc3Rpb24iLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiRG8geW91IG9mZmVyIGZyZWUgZmFicmljIHNhbXBsZXM/IiwKICAgICAgICAgICAgICAgICJhY2NlcHRlZEFuc3dlciI6IHsKICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiQW5zd2VyIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCI6ICJZZXMhIFdlIHByb3ZpZGUgZnJlZSBmYWJyaWMgc2FtcGxlcyAodXAgdG8gNSB0eXBlcyBwZXIgcmVxdWVzdCkgd2l0aCBhIDI0LWhvdXIgdHVybmFyb3VuZC4gV29ybGR3aWRlIHNoaXBwaW5nIGlzIGNvdmVyZWQuIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiQHR5cGUiOiAiUXVlc3Rpb24iLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiV2hhdCBjZXJ0aWZpY2F0aW9ucyBkbyB5b3VyIGtuaXQgZmFicmljcyBoYXZlPyIsCiAgICAgICAgICAgICAgICAiYWNjZXB0ZWRBbnN3ZXIiOiB7CiAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogIkFuc3dlciIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiOiAiQWxsIGZhYnJpY3MgYXJlIE9FS08tVEVYIFN0YW5kYXJkIDEwMCBjZXJ0aWZpZWQuIFJlY3ljbGVkIHBvbHllc3RlciBmYWJyaWNzIGNhcnJ5IEdSUyBjZXJ0aWZpY2F0aW9uLiBXZSBhbHNvIGNvbXBseSB3aXRoIFJFQUNIIGFuZCBBWk8tZnJlZSBzdGFuZGFyZHMuIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiQHR5cGUiOiAiUXVlc3Rpb24iLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiV2hhdCBpcyB5b3VyIHByb2R1Y3Rpb24gbGVhZCB0aW1lPyIsCiAgICAgICAgICAgICAgICAiYWNjZXB0ZWRBbnN3ZXIiOiB7CiAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogIkFuc3dlciIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiOiAiU3RhbmRhcmQgcHJvZHVjdGlvbiB0YWtlcyAxNS0yMCBkYXlzIGFmdGVyIHNhbXBsZSBhcHByb3ZhbC4gU3RvY2sgY29sb3JzIHNoaXAgd2l0aGluIDMtNSBkYXlzLiBDdXN0b20gYWN0aXZld2VhciBmYWJyaWMgcmVxdWlyZXMgMjAtMjUgZGF5cy4iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJAdHlwZSI6ICJRdWVzdGlvbiIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJDYW4geW91IGN1c3RvbWl6ZSBmYWJyaWMgc3BlY2lmaWNhdGlvbnMgZm9yIG15IGJyYW5kPyIsCiAgICAgICAgICAgICAgICAiYWNjZXB0ZWRBbnN3ZXIiOiB7CiAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogIkFuc3dlciIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiOiAiWWVzLCB3ZSBvZmZlciBmdWxsIGN1c3RvbWl6YXRpb246IHdlaWdodCwgd2lkdGgsIGNvbXBvc2l0aW9uLCBjb2xvcnMsIGZpbmlzaGVzIGFuZCBmdW5jdGlvbmFsIHRyZWF0bWVudHMgaW5jbHVkaW5nIGFudGktcGlsbGluZywgd2F0ZXItcmVwZWxsZW50IGFuZCBVVi1wcm90ZWN0aW9uLiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIkB0eXBlIjogIlF1ZXN0aW9uIiwKICAgICAgICAgICAgICAgICJuYW1lIjogIldoaWNoIGNvdW50cmllcyBkbyB5b3UgZXhwb3J0IHlvdXIgZmFicmljcyB0bz8iLAogICAgICAgICAgICAgICAgImFjY2VwdGVkQW5zd2VyIjogewogICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJBbnN3ZXIiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IjogIldlIGV4cG9ydCBmbGVlY2UgZmFicmljLCBzcG9ydHN3ZWFyIGZhYnJpYyBhbmQga25pdCBmYWJyaWMgdG8gb3ZlciAzMCBjb3VudHJpZXMgYWNyb3NzIEV1cm9wZSwgTm9ydGggYW5kIFNvdXRoIEFtZXJpY2EsIFNvdXRoZWFzdCBBc2lhIGFuZCB0aGUgTWlkZGxlIEVhc3QuIFdpdGggb2ZmaWNlcyBpbiBDaGluYSBhbmQgQmFuZ2xhZGVzaCwgd2Ugc2VydmUgZ2xvYmFsIGJyYW5kcyB3aXRoIGxvY2FsIHN1cHBvcnQuIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfQogICAgPC9zY3JpcHQ+CiAgICA8P3BocAp9KTsKCi8vIOKUgOKUgOKUgCBIaWRlIGRlZmF1bHQgcGFnZSB0aXRsZSBvbiBmcm9udCBwYWdlIOKUgOKUgOKUgAphZGRfZmlsdGVyKCdnZW5lcmF0ZV9zaG93X3RpdGxlJywgZnVuY3Rpb24oJHNob3cpIHsKICAgIGlmIChpc19mcm9udF9wYWdlKCkpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiAkc2hvdzsKfSk7CgovLyDilIDilIDilIAgRm9yY2UgTk8gU0lERUJBUiBnbG9iYWxseSAoYWxsIHBhZ2VzKSDilIDilIDilIAKYWRkX2ZpbHRlcignZ2VuZXJhdGVfc2lkZWJhcl9sYXlvdXQnLCBmdW5jdGlvbigkbGF5b3V0KSB7CiAgICByZXR1cm4gJ25vLXNpZGViYXInOwp9LCA5OTkpOwphZGRfZmlsdGVyKCdnZW5lcmF0ZV9wYWdlX3NpZGViYXJfbGF5b3V0JywgZnVuY3Rpb24oJGxheW91dCkgewogICAgcmV0dXJuICduby1zaWRlYmFyJzsKfSwgOTk5KTsKCi8vIOKUgOKUgOKUgCBEaXNhYmxlIFRpZGlvIExpdmUgQ2hhdCBwbHVnaW4g4pSA4pSA4pSACmFkZF9maWx0ZXIoJ29wdGlvbl9hY3RpdmVfcGx1Z2lucycsIGZ1bmN0aW9uKCRwbHVnaW5zKSB7CiAgICAkcGx1Z2lucyA9IGFycmF5X2ZpbHRlcigkcGx1Z2lucywgZnVuY3Rpb24oJHApIHsKICAgICAgICByZXR1cm4gc3RycG9zKCRwLCAndGlkaW8nKSA9PT0gZmFsc2U7CiAgICB9KTsKICAgIHJldHVybiBhcnJheV92YWx1ZXMoJHBsdWdpbnMpOwp9KTsKCi8vIOKUgOKUgOKUgCBSZW1vdmUgVGlkaW8gZnJvbSBwYWdlIG91dHB1dCAoaW5qZWN0ZWQgYnkgRWxlbWVudG9yKSDilIDilIDilIAKYWRkX2FjdGlvbignd3BfZm9vdGVyJywgZnVuY3Rpb24oKSB7CiAgICA/PgogICAgPHN0eWxlPgogICAgLyogS2lsbCBUaWRpbyBhdCByZW5kZXIgbGV2ZWwgKi8KICAgICN0aWRpby1jaGF0LCAudGlkaW8tY2hhdCwgaWZyYW1lW3NyYyo9InRpZGlvIl0sIHNjcmlwdFtzcmMqPSJ0aWRpbyJdIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPHNjcmlwdD4KICAgIChmdW5jdGlvbigpIHsKICAgICAgICAvLyBSZW1vdmUgdGlkaW8gc2NyaXB0cyBpbmplY3RlZCBieSBFbGVtZW50b3IKICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtdXRhdGlvbnMpIHsKICAgICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgbS5hZGRlZE5vZGVzLmZvckVhY2goZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICAgIGlmIChuLm5vZGVUeXBlID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLmlkID09PSAndGlkaW8tY2hhdCcgfHwgbi5pZCA9PT0gJ3RpZGlvLWNoYXQtaWZyYW1lJyB8fCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuLnNyYyAmJiBTdHJpbmcobi5zcmMpLmluZGV4T2YoJ3RpZGlvJykgPiAtMSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuLmhyZWYgJiYgU3RyaW5nKG4uaHJlZikuaW5kZXhPZigndGlkaW8nKSA+IC0xKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbi5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAvLyBBbHNvIGNoZWNrIGZvciB0aWRpbyBpbnNpZGUgdGhlIG5vZGUKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpZGlvcyA9IG4ucXVlcnlTZWxlY3RvckFsbCA/IG4ucXVlcnlTZWxlY3RvckFsbCgnW2lkKj0idGlkaW8iXSxbc3JjKj0idGlkaW8iXSxbaHJlZio9InRpZGlvIl0nKSA6IFtdOwogICAgICAgICAgICAgICAgICAgICAgICB0aWRpb3MuZm9yRWFjaChmdW5jdGlvbihlbCkgeyBlbC5yZW1vdmUoKTsgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTsKICAgICAgICAvLyBDbGVhbiBleGlzdGluZyBvbmVzCiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkKj0idGlkaW8iXSxbc3JjKj0idGlkaW8iXSxbaHJlZio9InRpZGlvIl0nKS5mb3JFYWNoKGZ1bmN0aW9uKGVsKSB7IGVsLnJlbW92ZSgpOyB9KTsKICAgICAgICB9LCA1MDApOwogICAgfSkoKTsKICAgIDwvc2NyaXB0PgogICAgPD9waHAKfSwgOTk5KTsKCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gQ09OVEFDVCBQQUdFIHYzLjAg4oCUIEFwcGVuZGVkIGJ5IGRlcGxveSBzY3JpcHQKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLyoqCiAqIFdEVFggQ29udGFjdCBQYWdlIHYzLjAg4oCUIFB1cmUgUEhQIChubyA/PiBzd2l0Y2hpbmcpCiAqIFRoaXMgY29kZSBnZXRzIEFQUEVOREVEIHRvIHRoZSBlbmQgb2YgZnVuY3Rpb25zLnBocCB2aWEgU1NILgogKiBBbGwgSFRNTCBpcyBvdXRwdXQgdmlhIGVjaG8vaGVyZWRvYyB0byBhdm9pZCBQSFAgdGFnIGNvbmZsaWN0cy4KICovCgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIENPTlRBQ1QgUEFHRSB2My4wIOKAlCBBcHBlbmRlZCBieSBkZXBsb3kgc2NyaXB0Ci8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi8qKgogKiBXRFRYIENvbnRhY3QgUGFnZSB2My4wIOKAlCBQdXJlIFBIUCAobm8gPz4gc3dpdGNoaW5nKQogKiBUaGlzIGNvZGUgZ2V0cyBBUFBFTkRFRCB0byB0aGUgZW5kIG9mIGZ1bmN0aW9ucy5waHAgdmlhIFNTSC4KICogQWxsIEhUTUwgaXMgb3V0cHV0IHZpYSBlY2hvL2hlcmVkb2MgdG8gYXZvaWQgUEhQIHRhZyBjb25mbGljdHMuCiAqLwoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBDT05UQUNUIFBBR0UgdjMuMCDigJQgQXBwZW5kZWQgYnkgZGVwbG95IHNjcmlwdAovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovKioKICogV0RUWCBDb250YWN0IFBhZ2UgdjMuMCDigJQgUHVyZSBQSFAgKG5vID8+IHN3aXRjaGluZykKICogVGhpcyBjb2RlIGdldHMgQVBQRU5ERUQgdG8gdGhlIGVuZCBvZiBmdW5jdGlvbnMucGhwIHZpYSBTU0guCiAqIEFsbCBIVE1MIGlzIG91dHB1dCB2aWEgZWNoby9oZXJlZG9jIHRvIGF2b2lkIFBIUCB0YWcgY29uZmxpY3RzLgogKi8KCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gQ09OVEFDVCBQQUdFIHYzLjAg4oCUIEFwcGVuZGVkIGJ5IGRlcGxveSBzY3JpcHQKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLyoqCiAqIFdEVFggQ29udGFjdCBQYWdlIHYzLjAg4oCUIFB1cmUgUEhQIChubyA/PiBzd2l0Y2hpbmcpCiAqIFRoaXMgY29kZSBnZXRzIEFQUEVOREVEIHRvIHRoZSBlbmQgb2YgZnVuY3Rpb25zLnBocCB2aWEgU1NILgogKiBBbGwgSFRNTCBpcyBvdXRwdXQgdmlhIGVjaG8vaGVyZWRvYyB0byBhdm9pZCBQSFAgdGFnIGNvbmZsaWN0cy4KICovCgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIENPTlRBQ1QgUEFHRSB2My4wIOKAlCBBcHBlbmRlZCBieSBkZXBsb3kgc2NyaXB0Ci8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi8qKgogKiBXRFRYIENvbnRhY3QgUGFnZSB2My4wIOKAlCBQdXJlIFBIUCAobm8gPz4gc3dpdGNoaW5nKQogKiBUaGlzIGNvZGUgZ2V0cyBBUFBFTkRFRCB0byB0aGUgZW5kIG9mIGZ1bmN0aW9ucy5waHAgdmlhIFNTSC4KICogQWxsIEhUTUwgaXMgb3V0cHV0IHZpYSBlY2hvL2hlcmVkb2MgdG8gYXZvaWQgUEhQIHRhZyBjb25mbGljdHMuCiAqLwoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBDT05UQUNUIFBBR0UgdjMuMCDigJQgQXBwZW5kZWQgYnkgZGVwbG95IHNjcmlwdAovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovKioKICogV0RUWCBDb250YWN0IFBhZ2UgdjMuMCDigJQgUHVyZSBQSFAgKG5vID8+IHN3aXRjaGluZykKICogVGhpcyBjb2RlIGdldHMgQVBQRU5ERUQgdG8gdGhlIGVuZCBvZiBmdW5jdGlvbnMucGhwIHZpYSBTU0guCiAqIEFsbCBIVE1MIGlzIG91dHB1dCB2aWEgZWNoby9oZXJlZG9jIHRvIGF2b2lkIFBIUCB0YWcgY29uZmxpY3RzLgogKi8KCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gQ09OVEFDVCBQQUdFIHYzLjAg4oCUIEZpbHRlciBIb29rcwovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovLyBIaWRlIGRlZmF1bHQgdGl0bGUgb24gY29udGFjdCBwYWdlcwppZiAoIWZ1bmN0aW9uX2V4aXN0cygnd2R0eHYzX2NvbnRhY3RfaGlkZV90aXRsZScpKSB7CiAgICBhZGRfZmlsdGVyKCdnZW5lcmF0ZV9zaG93X3RpdGxlJywgJ3dkdHh2M19jb250YWN0X2hpZGVfdGl0bGUnKTsKICAgIGZ1bmN0aW9uIHdkdHh2M19jb250YWN0X2hpZGVfdGl0bGUoJHNob3cpIHsKICAgICAgICBpZiAoaXNfcGFnZSgnY29udGFjdCcpIHx8IGlzX3BhZ2UoJ2NvbnRhY3QtdXMnKSB8fCBpc19wYWdlKCdjb250YWN0LTInKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiAkc2hvdzsKICAgIH0KfQoKLy8gTm8gc2lkZWJhciBvbiBjb250YWN0IHBhZ2VzCmlmICghZnVuY3Rpb25fZXhpc3RzKCd3ZHR4djNfY29udGFjdF9zaWRlYmFyJykpIHsKICAgIGFkZF9maWx0ZXIoJ2dlbmVyYXRlX3NpZGViYXJfbGF5b3V0JywgJ3dkdHh2M19jb250YWN0X3NpZGViYXInKTsKICAgIGZ1bmN0aW9uIHdkdHh2M19jb250YWN0X3NpZGViYXIoJGxheW91dCkgewogICAgICAgIGlmIChpc19wYWdlKCdjb250YWN0JykgfHwgaXNfcGFnZSgnY29udGFjdC11cycpIHx8IGlzX3BhZ2UoJ2NvbnRhY3QtMicpKSByZXR1cm4gJ25vLXNpZGViYXInOwogICAgICAgIHJldHVybiAkbGF5b3V0OwogICAgfQp9CgovLyBDbGVhciBvcmlnaW5hbCBjb250ZW50IG9uIGNvbnRhY3QgcGFnZXMKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3dkdHh2M19jb250YWN0X2NsZWFyJykpIHsKICAgIGFkZF9maWx0ZXIoJ3RoZV9jb250ZW50JywgJ3dkdHh2M19jb250YWN0X2NsZWFyJywgMSk7CiAgICBmdW5jdGlvbiB3ZHR4djNfY29udGFjdF9jbGVhcigkY29udGVudCkgewogICAgICAgIGlmIChpc19wYWdlKCdjb250YWN0JykgfHwgaXNfcGFnZSgnY29udGFjdC11cycpIHx8IGlzX3BhZ2UoJ2NvbnRhY3QtMicpKSByZXR1cm4gJyc7CiAgICAgICAgcmV0dXJuICRjb250ZW50OwogICAgfQp9CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIENPTlRBQ1QgUEFHRSB2My4wIOKAlCBGdWxsIEhUTUwgT3V0cHV0Ci8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3dkdHh2M19jb250YWN0X291dHB1dCcpKSB7CiAgICBhZGRfYWN0aW9uKCdnZW5lcmF0ZV9hZnRlcl9oZWFkZXInLCAnd2R0eHYzX2NvbnRhY3Rfb3V0cHV0Jyk7CiAgICBmdW5jdGlvbiB3ZHR4djNfY29udGFjdF9vdXRwdXQoKSB7CiAgICAgICAgaWYgKCFpc19wYWdlKCdjb250YWN0JykgJiYgIWlzX3BhZ2UoJ2NvbnRhY3QtdXMnKSAmJiAhaXNfcGFnZSgnY29udGFjdC0yJykpIHJldHVybjsKCiAgICAgICAgJHByb2R1Y3Rfb3B0aW9ucyA9ICcnOwogICAgICAgICRjYXRzID0gZ2V0X3Rlcm1zKGFycmF5KCd0YXhvbm9teSc9Pidwcm9kdWN0X2NhdGVnb3J5JywnaGlkZV9lbXB0eSc9PnRydWUsJ3BhcmVudCc9PjApKTsKICAgICAgICBpZiAoIWlzX3dwX2Vycm9yKCRjYXRzKSAmJiAhZW1wdHkoJGNhdHMpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRjYXRzIGFzICRjKSB7CiAgICAgICAgICAgICAgICAkcHJvZHVjdF9vcHRpb25zIC49ICc8b3B0aW9uIHZhbHVlPSInIC4gZXNjX2F0dHIoJGMtPm5hbWUpIC4gJyI+JyAuIGVzY19odG1sKCRjLT5uYW1lKSAuICc8L29wdGlvbj4nIC4gIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBlY2hvICc8c3R5bGU+Ci8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICBDT05UQUNUIFBBR0UgdjMuMCDigJQgRGVzaWduIFN5c3RlbSAobWF0Y2hlcyBIb21lcGFnZSkKICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovCi53ZHR4LWNvbnRhY3QtaGVyb3twb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsIzBkMWIzZSAwJSwjMTUxZTVlIDQwJSwjMmExYTZlIDEwMCUpO2NvbG9yOiNmZmY7cGFkZGluZzoxMDBweCAyMHB4IDgwcHg7dGV4dC1hbGlnbjpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVufQoud2R0eC1jb250YWN0LWhlcm86OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7YmFja2dyb3VuZDp1cmwoXCdkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0IiBoZWlnaHQ9IjQiPjxyZWN0IHdpZHRoPSI0IiBoZWlnaHQ9IjQiIGZpbGw9InJnYmEoMjU1LDI1NSwyNTUsMC4wMykiLz48cmVjdCB4PSIyIiB5PSIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBmaWxsPSJyZ2JhKDI1NSwyNTUsMjU1LDAuMDIpIi8+PC9zdmc+XCcpO29wYWNpdHk6LjV9Ci53ZHR4LWNvbnRhY3QtaGVybzo6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTEwMHB4O3JpZ2h0Oi0xMDBweDt3aWR0aDo0MDBweDtoZWlnaHQ6NDAwcHg7YmFja2dyb3VuZDpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLHJnYmEoNzcsMTI3LDI1NSwuMTUpIDAlLHRyYW5zcGFyZW50IDcwJSk7Ym9yZGVyLXJhZGl1czo1MCV9Ci53ZHR4LWNvbnRhY3QtaGVybz4qe3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6Mn0KLndkdHgtY29udGFjdC1oZXJvIGgxe2ZvbnQtc2l6ZTo0OHB4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjojZmZmO21hcmdpbi1ib3R0b206MTZweDtsZXR0ZXItc3BhY2luZzotLjAzZW07bGluZS1oZWlnaHQ6MS4xNX0KLndkdHgtY29udGFjdC1oZXJvIC5oZXJvLXN1YnRpdGxle2ZvbnQtc2l6ZToxOHB4O2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjc1KTttYXgtd2lkdGg6NjAwcHg7bWFyZ2luOjAgYXV0byAzMnB4O2xpbmUtaGVpZ2h0OjEuNztmb250LXdlaWdodDo0MDB9Ci53ZHR4LWNvbnRhY3QtaGVybyAuaGVyby1idG5ze2Rpc3BsYXk6ZmxleDtnYXA6MTRweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwfQoud2R0eC1jb250YWN0LWhlcm8gLnRydXN0LWJhZGdlc3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtnYXA6MzJweDttYXJnaW4tdG9wOjQ4cHg7cGFkZGluZy10b3A6MzJweDtib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xKTtmbGV4LXdyYXA6d3JhcH0KLndkdHgtY29udGFjdC1oZXJvIC50cnVzdC1iYWRnZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNjUpO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0KLndkdHgtY29udGFjdC1oZXJvIC50cnVzdC1iYWRnZSBzdmd7d2lkdGg6MThweDtoZWlnaHQ6MThweDtzdHJva2U6IzRkN2ZmZjtmbGV4LXNocmluazowfQoKLyogTWFpbiBTZWN0aW9uICovCi53ZHR4LWNvbnRhY3QtbWFpbntwYWRkaW5nOjgwcHggMjBweDtiYWNrZ3JvdW5kOiNmZmZ9Ci53ZHR4LWNvbnRhY3QtaW5uZXJ7bWF4LXdpZHRoOjEyMDBweDttYXJnaW46MCBhdXRvfQoud2R0eC1jb250YWN0LWdyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxLjE1ZnIgLjg1ZnI7Z2FwOjUwcHg7YWxpZ24taXRlbXM6c3RhcnR9CgovKiBGb3JtIENhcmQgKi8KLndkdHgtZm9ybS1jYXJke2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzo0NHB4O2JveC1zaGFkb3c6MCAycHggMTJweCByZ2JhKDAsMCwwLC4wNik7Ym9yZGVyOjFweCBzb2xpZCAjZTllY2VmfQoud2R0eC1mb3JtLWNhcmQgLmZvcm0taGVhZGVye21hcmdpbi1ib3R0b206MzJweH0KLndkdHgtZm9ybS1jYXJkIC5mb3JtLWhlYWRlciBoMntmb250LXNpemU6MjhweDtmb250LXdlaWdodDo4MDA7Y29sb3I6IzBkMWIzZTttYXJnaW4tYm90dG9tOjhweDtsZXR0ZXItc3BhY2luZzotLjAyZW19Ci53ZHR4LWZvcm0tY2FyZCAuZm9ybS1oZWFkZXIgcHtjb2xvcjojNmM3NTdkO2ZvbnQtc2l6ZToxNXB4fQoud2R0eC1mb3JtLXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHh9Ci53ZHR4LWZvcm0tZ3JvdXB7bWFyZ2luLWJvdHRvbToyMHB4fQoud2R0eC1mb3JtLWdyb3VwIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM0OTUwNTc7bWFyZ2luLWJvdHRvbTo2cHh9Ci53ZHR4LWZvcm0tZ3JvdXAgbGFiZWwgLnJlcXVpcmVke2NvbG9yOiNlNzRjM2N9Ci53ZHR4LWZvcm0tZ3JvdXAgaW5wdXQsLndkdHgtZm9ybS1ncm91cCB0ZXh0YXJlYSwud2R0eC1mb3JtLWdyb3VwIHNlbGVjdHt3aWR0aDoxMDAlO3BhZGRpbmc6MTNweCAxNnB4O2JvcmRlcjoxLjVweCBzb2xpZCAjZGVlMmU2O2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxNXB4O2NvbG9yOiMzNDNhNDA7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNCwwLC4yLDEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LWZhbWlseTppbmhlcml0O2JhY2tncm91bmQ6I2ZmZn0KLndkdHgtZm9ybS1ncm91cCBpbnB1dDo6cGxhY2Vob2xkZXIsLndkdHgtZm9ybS1ncm91cCB0ZXh0YXJlYTo6cGxhY2Vob2xkZXJ7Y29sb3I6I2FkYjViZH0KLndkdHgtZm9ybS1ncm91cCBpbnB1dDpmb2N1cywud2R0eC1mb3JtLWdyb3VwIHRleHRhcmVhOmZvY3VzLC53ZHR4LWZvcm0tZ3JvdXAgc2VsZWN0OmZvY3Vze291dGxpbmU6bm9uZTtib3JkZXItY29sb3I6IzRkN2ZmZjtib3gtc2hhZG93OjAgMCAwIDNweCByZ2JhKDc3LDEyNywyNTUsLjEpfQoud2R0eC1mb3JtLWdyb3VwIHRleHRhcmVhe21pbi1oZWlnaHQ6MTIwcHg7cmVzaXplOnZlcnRpY2FsfQoud2R0eC1mb3JtLWdyb3VwIHNlbGVjdHthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9XCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wnIHdpZHRoPVwnMTJcJyBoZWlnaHQ9XCcxMlwnIHZpZXdCb3g9XCcwIDAgMjQgMjRcJyBmaWxsPVwnbm9uZVwnIHN0cm9rZT1cJyUyMzZjNzU3ZFwnIHN0cm9rZS13aWR0aD1cJzIuNVwnIHN0cm9rZS1saW5lY2FwPVwncm91bmRcJyBzdHJva2UtbGluZWpvaW49XCdyb3VuZFwnJTNFJTNDcG9seWxpbmUgcG9pbnRzPVwnNiA5IDEyIDE1IDE4IDlcJy8lM0UlM0Mvc3ZnJTNFIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246cmlnaHQgMTRweCBjZW50ZXI7cGFkZGluZy1yaWdodDo0MHB4O2N1cnNvcjpwb2ludGVyfQoud2R0eC1mb3JtLXN1Ym1pdHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2dhcDo4cHg7d2lkdGg6MTAwJTtwYWRkaW5nOjE1cHggMzJweDtiYWNrZ3JvdW5kOiNFODk2M0U7Y29sb3I6I2ZmZiFpbXBvcnRhbnQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTtib3gtc2hhZG93OjAgNHB4IDE0cHggcmdiYSgyMzIsMTUwLDYyLC4zNSk7Zm9udC1mYW1pbHk6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzouMDFlbX0KLndkdHgtZm9ybS1zdWJtaXQ6aG92ZXJ7YmFja2dyb3VuZDojZDE3ZTJlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0ycHgpO2JveC1zaGFkb3c6MCA2cHggMjBweCByZ2JhKDIzMiwxNTAsNjIsLjQ1KX0KCi8qIFZlcmlmeSBDb2RlIEJ1dHRvbiAqLwoud2R0eC12ZXJpZnktYnRue3BhZGRpbmc6MTNweCAyMHB4O2JhY2tncm91bmQ6IzBkMWIzZTtjb2xvcjojZmZmIWltcG9ydGFudDtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3RyYW5zaXRpb246YWxsIC4zcztmb250LWZhbWlseTppbmhlcml0fQoud2R0eC12ZXJpZnktYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2JhY2tncm91bmQ6IzE1MWU1ZX0KLndkdHgtdmVyaWZ5LWJ0bjpkaXNhYmxlZHtiYWNrZ3JvdW5kOiM2Yzc1N2Q7Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6Ljd9CgovKiBJbmZvIFBhbmVsICovCi53ZHR4LWluZm8tcGFuZWx7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTYwZGVnLCMwZDFiM2UgMCUsIzE1MWU1ZSA1MCUsIzFlMTU2MCAxMDAlKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzo0NHB4O2NvbG9yOiNmZmY7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufQoud2R0eC1pbmZvLXBhbmVsOjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTYwcHg7cmlnaHQ6LTYwcHg7d2lkdGg6MjAwcHg7aGVpZ2h0OjIwMHB4O2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSxyZ2JhKDc3LDEyNywyNTUsLjE1KSAwJSx0cmFuc3BhcmVudCA3MCUpO2JvcmRlci1yYWRpdXM6NTAlfQoud2R0eC1pbmZvLXBhbmVsPip7cG9zaXRpb246cmVsYXRpdmV9Ci53ZHR4LWluZm8tcGFuZWwgLnBhbmVsLWhlYWRlcnttYXJnaW4tYm90dG9tOjMycHh9Ci53ZHR4LWluZm8tcGFuZWwgLnBhbmVsLWhlYWRlciBoMntmb250LXNpemU6MjhweDtmb250LXdlaWdodDo4MDA7bWFyZ2luLWJvdHRvbTo4cHg7bGV0dGVyLXNwYWNpbmc6LS4wMmVtfQoud2R0eC1pbmZvLXBhbmVsIC5wYW5lbC1oZWFkZXIgcHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC42KTtmb250LXNpemU6MTVweH0KLndkdHgtaW5mby1jYXJkc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoyNHB4O21hcmdpbi1ib3R0b206MjhweH0KLndkdHgtaW5mby1jYXJke2Rpc3BsYXk6ZmxleDtnYXA6MTZweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fQoud2R0eC1pbmZvLWljb257d2lkdGg6NDhweDtoZWlnaHQ6NDhweDtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA4KTtib3JkZXItcmFkaXVzOjEycHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtc2hyaW5rOjA7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4zc30KLndkdHgtaW5mby1jYXJkOmhvdmVyIC53ZHR4LWluZm8taWNvbntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX0KLndkdHgtaW5mby1pY29uIHN2Z3t3aWR0aDoyMnB4O2hlaWdodDoyMnB4O3N0cm9rZTojNGQ3ZmZmfQoud2R0eC1pbmZvLWRldGFpbCBoNHtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHh9Ci53ZHR4LWluZm8tZGV0YWlsIHB7Zm9udC1zaXplOjE0cHg7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyk7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MS42fQoud2R0eC1pbmZvLWRldGFpbCBhe2NvbG9yOiNFODk2M0U7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dHJhbnNpdGlvbjpjb2xvciAuMnN9Ci53ZHR4LWluZm8tZGV0YWlsIGE6aG92ZXJ7Y29sb3I6I2YwYjA2ZTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfQoud2R0eC13YS1jdGF7bWFyZ2luLXRvcDoyOHB4O3BhZGRpbmc6MThweDtiYWNrZ3JvdW5kOnJnYmEoMzcsMjExLDEwMiwuMTIpO2JvcmRlcjoxcHggc29saWQgcmdiYSgzNywyMTEsMTAyLC4yNSk7Ym9yZGVyLXJhZGl1czoxMnB4O3RyYW5zaXRpb246YWxsIC4zc30KLndkdHgtd2EtY3RhOmhvdmVye2JhY2tncm91bmQ6cmdiYSgzNywyMTEsMTAyLC4xOCk7Ym9yZGVyLWNvbG9yOnJnYmEoMzcsMjExLDEwMiwuNCl9Ci53ZHR4LXdhLWN0YSBhe2NvbG9yOiMyNUQzNjYhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjYwMDt0ZXh0LWRlY29yYXRpb246bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjEwcHh9Ci53ZHR4LXdhLWN0YSBhIHN2Z3t3aWR0aDoyMnB4O2hlaWdodDoyMnB4fQoKLyogQmVuZWZpdHMgKi8KLndkdHgtY29udGFjdC1iZW5lZml0c3twYWRkaW5nOjYwcHggMjBweDtiYWNrZ3JvdW5kOiNmNGY3ZmZ9Ci53ZHR4LWNvbnRhY3QtYmVuZWZpdHMtaW5uZXJ7bWF4LXdpZHRoOjEyMDBweDttYXJnaW46MCBhdXRvfQoud2R0eC1iZW5lZml0cy1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDQsMWZyKTtnYXA6MjRweH0KLndkdHgtYmVuZWZpdC1pdGVte3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MjhweCAyMHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEycHg7Ym9yZGVyOjFweCBzb2xpZCAjZTllY2VmO3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX0KLndkdHgtYmVuZWZpdC1pdGVtOmhvdmVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC00cHgpO2JveC1zaGFkb3c6MCA4cHggMjRweCByZ2JhKDAsMCwwLC4wOCk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fQoud2R0eC1iZW5lZml0LWljb257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDttYXJnaW46MCBhdXRvIDE2cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYmEoNzcsMTI3LDI1NSwuMDgpLHJnYmEoNzcsMTI3LDI1NSwuMTUpKTtib3JkZXItcmFkaXVzOjEycHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfQoud2R0eC1iZW5lZml0LWljb24gc3Zne3dpZHRoOjI2cHg7aGVpZ2h0OjI2cHg7c3Ryb2tlOiM0ZDdmZmZ9Ci53ZHR4LWJlbmVmaXQtaXRlbSBoM3tmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzBkMWIzZTttYXJnaW4tYm90dG9tOjhweH0KLndkdHgtYmVuZWZpdC1pdGVtIHB7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzZjNzU3ZDtsaW5lLWhlaWdodDoxLjY7bWFyZ2luOjB9CgovKiBGQVEgKi8KLndkdHgtY29udGFjdC1mYXF7cGFkZGluZzo4MHB4IDIwcHg7YmFja2dyb3VuZDojZmZmfQoud2R0eC1jb250YWN0LWZhcS1pbm5lcnttYXgtd2lkdGg6ODAwcHg7bWFyZ2luOjAgYXV0b30KLndkdHgtY29udGFjdC1mYXEgLnNlY3Rpb24taGVhZGVye3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi1ib3R0b206NDhweH0KLndkdHgtY29udGFjdC1mYXEgLnNlY3Rpb24taGVhZGVyIGgye2ZvbnQtc2l6ZTozMnB4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjojMGQxYjNlO21hcmdpbi1ib3R0b206MTJweDtsZXR0ZXItc3BhY2luZzotLjAyZW19Ci53ZHR4LWNvbnRhY3QtZmFxIC5zZWN0aW9uLWhlYWRlciBwe2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiM2Yzc1N2R9Ci53ZHR4LWZhcS1pdGVte2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4O2JvcmRlcjoxcHggc29saWQgI2U5ZWNlZjtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjphbGwgLjNzfQoud2R0eC1mYXEtaXRlbTpob3Zlcntib3JkZXItY29sb3I6I2RlZTJlNn0KLndkdHgtZmFxLWl0ZW0ub3Blbntib3JkZXItY29sb3I6IzRkN2ZmZn0KLndkdHgtZmFxLXF1ZXN0aW9ue3BhZGRpbmc6MjBweCAyNHB4O2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMGQxYjNlO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7dXNlci1zZWxlY3Q6bm9uZTtnYXA6MTZweDt0cmFuc2l0aW9uOmNvbG9yIC4yc30KLndkdHgtZmFxLXF1ZXN0aW9uOmhvdmVye2NvbG9yOiM0ZDdmZmZ9Ci53ZHR4LWZhcS1xdWVzdGlvbiBzdmd7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtzdHJva2U6IzRkN2ZmZjtmbGV4LXNocmluazowO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zc30KLndkdHgtZmFxLWl0ZW0ub3BlbiAud2R0eC1mYXEtcXVlc3Rpb24gc3Zne3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfQoud2R0eC1mYXEtYW5zd2Vye3BhZGRpbmc6MCAyNHB4O21heC1oZWlnaHQ6MDtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjptYXgtaGVpZ2h0IC40cyBlYXNlLHBhZGRpbmcgLjNzO2NvbG9yOiM2Yzc1N2Q7bGluZS1oZWlnaHQ6MS44O2ZvbnQtc2l6ZToxNXB4fQoud2R0eC1mYXEtaXRlbS5vcGVuIC53ZHR4LWZhcS1hbnN3ZXJ7cGFkZGluZzowIDI0cHggMjRweDttYXgtaGVpZ2h0OjMwMHB4fQoKLyogUmVtb3ZlIEdQIGNvbnRhaW5lciBnYXAg4oCUIEZBUSBmbG93cyBkaXJlY3RseSBpbnRvIEZvb3RlciAqLwoucGFnZS1pZC01OTY1LnNlcGFyYXRlLWNvbnRhaW5lcnMgLnNpdGUtbWFpbnttYXJnaW4tYm90dG9tOjA7cGFkZGluZy1ib3R0b206MDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fQoucGFnZS1pZC01OTY1IC5zaXRlLWNvbnRlbnR7cGFkZGluZy1ib3R0b206MH0KLnBhZ2UtaWQtNTk2NSAuZW50cnktY29udGVudHttYXJnaW4tYm90dG9tOjA7cGFkZGluZy1ib3R0b206MH0KLnBhZ2UtaWQtNTk2NSAuY29udGVudC1hcmVhe21hcmdpbi1ib3R0b206MH0KLnBhZ2UtaWQtNTk2NSAuc2VwYXJhdGUtY29udGFpbmVycyAuaW5zaWRlLWFydGljbGV7cGFkZGluZzowO21hcmdpbjowO2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9CgovKiBSZXNwb25zaXZlICovCkBtZWRpYShtYXgtd2lkdGg6NzY4cHgpewoud2R0eC1jb250YWN0LWhlcm97cGFkZGluZzo3MHB4IDIwcHggNTBweH0KLndkdHgtY29udGFjdC1oZXJvIGgxe2ZvbnQtc2l6ZTozMnB4fQoud2R0eC1jb250YWN0LWhlcm8gLmhlcm8tc3VidGl0bGV7Zm9udC1zaXplOjE2cHh9Ci53ZHR4LWNvbnRhY3QtaGVybyAudHJ1c3QtYmFkZ2Vze2dhcDoxNnB4O21hcmdpbi10b3A6MzJweDtwYWRkaW5nLXRvcDoyNHB4fQoud2R0eC1jb250YWN0LWdyaWR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjtnYXA6MzBweH0KLndkdHgtZm9ybS1jYXJkLC53ZHR4LWluZm8tcGFuZWx7cGFkZGluZzoyOHB4fQoud2R0eC1mb3JtLXJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfQoud2R0eC1iZW5lZml0cy1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwxZnIpO2dhcDoxNnB4fQoud2R0eC1iZW5lZml0LWl0ZW17cGFkZGluZzoyMHB4IDE2cHh9Ci53ZHR4LWNvbnRhY3QtZmFxIC5zZWN0aW9uLWhlYWRlciBoMntmb250LXNpemU6MjZweH0KfQpAbWVkaWEobWF4LXdpZHRoOjQ4MHB4KXsKLndkdHgtYmVuZWZpdHMtZ3JpZHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfQp9Cjwvc3R5bGU+JzsKCiAgICAgICAgLy8gPT09IFNFQ1RJT04gMSDigJQgSEVSTyA9PT0KICAgICAgICBlY2hvICc8c2VjdGlvbiBjbGFzcz0id2R0eC1jb250YWN0LWhlcm8iPgogICAgPGgxPkNvbnRhY3QgT3VyIEZhYnJpYyBUZWFtPC9oMT4KICAgIDxwIGNsYXNzPSJoZXJvLXN1YnRpdGxlIj5XaGV0aGVyIHlvdSBuZWVkIGEgcXVpY2sgcXVvdGUsIGZhYnJpYyBzYW1wbGVzLCBvciBjdXN0b20gZGV2ZWxvcG1lbnQg4oCUIG91ciBzcGVjaWFsaXN0cyBhcmUgcmVhZHkgdG8gaGVscCB3aXRoaW4gMjQgaG91cnMuPC9wPgogICAgPGRpdiBjbGFzcz0iaGVyby1idG5zIj4KICAgICAgICA8YSBocmVmPSIjY29udGFjdC1mb3JtIiBzdHlsZT0iYmFja2dyb3VuZDojRTg5NjNFO2NvbG9yOiNmZmY7cGFkZGluZzoxNHB4IDMycHg7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC13ZWlnaHQ6NjAwO3RleHQtZGVjb3JhdGlvbjpub25lO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Ym94LXNoYWRvdzowIDRweCAxNHB4IHJnYmEoMjMyLDE1MCw2MiwuMzUpO3RyYW5zaXRpb246YWxsIC4zczsiPgogICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHlsZT0id2lkdGg6MThweDtoZWlnaHQ6MThweCI+PHBhdGggZD0iTTIxIDE1YTIgMiAwIDAxLTIgMkg3bC00IDRWNWEyIDIgMCAwMTItMmgxNGEyIDIgMCAwMTIgMnoiLz48L3N2Zz4KICAgICAgICAgICAgU2VuZCBJbnF1aXJ5CiAgICAgICAgPC9hPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd2EubWUvODYxMzk1NzI5NTYxMT90ZXh0PUhpJTJDJTIwSSUyN20lMjBpbnRlcmVzdGVkJTIwaW4lMjB5b3VyJTIwZmFicmljcy4iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiBzdHlsZT0iYmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjojZmZmO3BhZGRpbmc6MTRweCAzMnB4O2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtd2VpZ2h0OjYwMDt0ZXh0LWRlY29yYXRpb246bm9uZTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2JvcmRlcjoycHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7dHJhbnNpdGlvbjphbGwgLjNzOyI+CiAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJjdXJyZW50Q29sb3IiIHN0eWxlPSJ3aWR0aDoxOHB4O2hlaWdodDoxOHB4Ij48cGF0aCBkPSJNMTcuNDcyIDE0LjM4MmMtLjI5Ny0uMTQ5LTEuNzU4LS44NjctMi4wMy0uOTY3LS4yNzMtLjA5OS0uNDcxLS4xNDgtLjY3LjE1LS4xOTcuMjk3LS43NjcuOTY2LS45NCAxLjE2NC0uMTczLjE5OS0uMzQ3LjIyMy0uNjQ0LjA3NS0uMjk3LS4xNS0xLjI1NS0uNDYzLTIuMzktMS40NzUtLjg4My0uNzg4LTEuNDgtMS43NjEtMS42NTMtMi4wNTktLjE3My0uMjk3LS4wMTgtLjQ1OC4xMy0uNjA2LjEzNC0uMTMzLjI5OC0uMzQ3LjQ0Ni0uNTIuMTQ5LS4xNzQuMTk4LS4yOTguMjk4LS40OTcuMDk5LS4xOTguMDUtLjM3MS0uMDI1LS41Mi0uMDc1LS4xNDktLjY2OS0xLjYxMi0uOTE2LTIuMjA3LS4yNDItICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlByaWNlPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHByaWNlKTsgPz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgICA8P3BocAogICAgfQogICAgCiAgICAvKioKICAgICAqIOi+k+WHuuS6p+WTgeeJueaApwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3V0cHV0X2ZlYXR1cmVzKCkgewogICAgICAgIGdsb2JhbCAkcHJvZHVjdDsKICAgICAgICAKICAgICAgICAkZmVhdHVyZXMgPSBnZXRfcG9zdF9tZXRhKCRwcm9kdWN0LT5nZXRfaWQoKSwgJ193ZHR4X2ZlYXR1cmVzJywgdHJ1ZSk7CiAgICAgICAgCiAgICAgICAgLy8g6buY6K6k54m55oCnCiAgICAgICAgJGRlZmF1bHRfZmVhdHVyZXMgPSBhcnJheSgKICAgICAgICAgICAgYXJyYXkoJ2ljb24nID0+ICdjaGVjay1jaXJjbGUnLCAndGl0bGUnID0+ICdBbnRpLXBpbGxpbmcnLCAnZGVzYycgPT4gJ0hpZ2ggZHVyYWJpbGl0eSBhZ2FpbnN0IGZhYnJpYyBwaWxsaW5nJyksCiAgICAgICAgICAgIGFycmF5KCdpY29uJyA9PiAnd2luZCcsICd0aXRsZScgPT4gJ0JyZWF0aGFibGUnLCAnZGVzYycgPT4gJ0V4Y2VsbGVudCBhaXIgcGVybWVhYmlsaXR5JyksCiAgICAgICAgICAgIGFycmF5KCdpY29uJyA9PiAnZHJvcGxldCcsICd0aXRsZScgPT4gJ1F1aWNrIERyeScsICdkZXNjJyA9PiAnRmFzdCBtb2lzdHVyZSB3aWNraW5nJyksCiAgICAgICAgICAgIGFycmF5KCdpY29uJyA9PiAnbGVhZicsICd0aXRsZScgPT4gJ0Vjby1mcmllbmRseScsICdkZXNjJyA9PiAnU3VzdGFpbmFibGUgbWF0ZXJpYWxzJyksCiAgICAgICAgICAgIGFycmF5KCdpY29uJyA9PiAncmVjeWNsZScsICd0aXRsZScgPT4gJ1JlY3ljbGVkJywgJ2Rlc2MnID0+ICdNYWRlIGZyb20gcmVjeWNsZWQgZmliZXJzJyksCiAgICAgICAgICAgIGFycmF5KCdpY29uJyA9PiAnc2hpZWxkJywgJ3RpdGxlJyA9PiAnT2Vrby1UZXgnLCAnZGVzYycgPT4gJ0NlcnRpZmllZCBzYWZlJyksCiAgICAgICAgKTsKICAgICAgICAKICAgICAgICAkZmVhdHVyZV9saXN0ID0gIWVtcHR5KCRmZWF0dXJlcykgPyAkZmVhdHVyZXMgOiAkZGVmYXVsdF9mZWF0dXJlczsKICAgICAgICAKICAgICAgICA/PgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ3ZHR4LXNlY3Rpb24gd2R0eC1mZWF0dXJlcyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0id2R0eC1zZWN0aW9uLXRpdGxlIj5Qcm9kdWN0IEZlYXR1cmVzPC9oMj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1mZWF0dXJlLWdyaWQiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCRmZWF0dXJlX2xpc3QgYXMgJGZlYXR1cmUpIDogPz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1mZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1mZWF0dXJlLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJHRoaXMtPmdldF9zdmdfaWNvbigkZmVhdHVyZVsnaWNvbiddKTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ3ZHR4LWZlYXR1cmUtdGl0bGUiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGZlYXR1cmVbJ3RpdGxlJ10pOyA/PjwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoaXNzZXQoJGZlYXR1cmVbJ2Rlc2MnXSkpIDogPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0id2R0eC1mZWF0dXJlLWRlc2MiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGZlYXR1cmVbJ2Rlc2MnXSk7ID8+PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9zZWN0aW9uPgogICAgICAgIDw/cGhwCiAgICB9CiAgICAKICAgIC8qKgogICAgICog6L6T5Ye65bqU55So5Zy65pmvCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvdXRwdXRfYXBwbGljYXRpb25zKCkgewogICAgICAgIGdsb2JhbCAkcHJvZHVjdDsKICAgICAgICAKICAgICAgICAkYXBwbGljYXRpb25zID0gZ2V0X3Bvc3RfbWV0YSgkcHJvZHVjdC0+Z2V0X2lkKCksICdfd2R0eF9hcHBsaWNhdGlvbnMnLCB0cnVlKTsKICAgICAgICAKICAgICAgICAvLyDpu5jorqTlupTnlKjlnLrmma8KICAgICAgICAkZGVmYXVsdF9hcHBzID0gYXJyYXkoCiAgICAgICAgICAgIGFycmF5KCd0aXRsZScgPT4gJ1Nwb3J0c3dlYXInLCAnZGVzYycgPT4gJ0F0aGxldGljIGFwcGFyZWwsIGd5bSB3ZWFyJyksCiAgICAgICAgICAgIGFycmF5KCd0aXRsZScgPT4gJ091dGRvb3InLCAnZGVzYycgPT4gJ0phY2tldHMsIGZsZWVjZSBqYWNrZXRzJyksCiAgICAgICAgICAgIGFycmF5KCd0aXRsZScgPT4gJ0hvb2RpZXMnLCAnZGVzYycgPT4gJ1dhcm0gYW5kIGNvbWZvcnRhYmxlJyksCiAgICAgICAgICAgIGFycmF5KCd0aXRsZScgPT4gJ0JsYW5rZXRzJywgJ2Rlc2MnID0+ICdIb21lIHRleHRpbGVzJyksCiAgICAgICAgKTsKICAgICAgICAKICAgICAgICAkYXBwX2xpc3QgPSAhZW1wdHkoJGFwcGxpY2F0aW9ucykgPyAkYXBwbGljYXRpb25zIDogJGRlZmF1bHRfYXBwczsKICAgICAgICAKICAgICAgICA/PgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ3ZHR4LXNlY3Rpb24gd2R0eC1hcHBsaWNhdGlvbnMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9IndkdHgtc2VjdGlvbi10aXRsZSI+QXBwbGljYXRpb25zPC9oMj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1hcHBsaWNhdGlvbi1ncmlkIj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkYXBwX2xpc3QgYXMgJGFwcCkgOiA/PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LWFwcGxpY2F0aW9uLWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1hcHBsaWNhdGlvbi1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgY2xhc3M9IndkdHgtaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0id2R0eC1hcHBsaWNhdGlvbi10aXRsZSI+PD9waHAgZWNobyBlc2NfaHRtbCgkYXBwWyd0aXRsZSddKTsgPz48L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IndkdHgtYXBwbGljYXRpb24tZGVzYyI+PD9waHAgZWNobyBlc2NfaHRtbCgkYXBwWydkZXNjJ10pOyA/PjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3NlY3Rpb24+CiAgICAgICAgPD9waHAKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiDovpPlh7rorqTor4EKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG91dHB1dF9jZXJ0aWZpY2F0aW9ucygpIHsKICAgICAgICAkY2VydGlmaWNhdGlvbnMgPSBhcnJheSgKICAgICAgICAgICAgJ09FS08tVEVYJyA9PiAnU3RhbmRhcmQgMTAwJywKICAgICAgICAgICAgJ0dSUycgPT4gJ0dsb2JhbCBSZWN5Y2xlZCBTdGFuZGFyZCcsCiAgICAgICAgICAgICdJU08gOTAwMScgPT4gJ1F1YWxpdHkgTWFuYWdlbWVudCcsCiAgICAgICAgICAgICdCU0NJJyA9PiAnU29jaWFsIENvbXBsaWFuY2UnLAogICAgICAgICk7CiAgICAgICAgCiAgICAgICAgPz4KICAgICAgICA8c2VjdGlvbiBjbGFzcz0id2R0eC1zZWN0aW9uIHdkdHgtY2VydGlmaWNhdGlvbnMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9IndkdHgtc2VjdGlvbi10aXRsZSI+Q2VydGlmaWNhdGlvbnM8L2gyPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LWNlcnQtbGlzdCI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJGNlcnRpZmljYXRpb25zIGFzICRuYW1lID0+ICRkZXNjKSA6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtY2VydC1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtY2VydC1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgY2xhc3M9IndkdHgtaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTEyIDFMMyA1djZjMCA1LjU1IDMuODQgMTAuNzQgOSAxMiA1LjE2LTEuMjYgOS02LjQ1IDktMTJWNWwtOS00em0tMiAxNmwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LWNlcnQtaW5mbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ3ZHR4LWNlcnQtbmFtZSI+PD9waHAgZWNobyBlc2NfaHRtbCgkbmFtZSk7ID8+PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0id2R0eC1jZXJ0LWRlc2MiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGRlc2MpOyA/PjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvc2VjdGlvbj4KICAgICAgICA8P3BocAogICAgfQogICAgCiAgICAvKioKICAgICAqIOi+k+WHuuS4i+i9veWMuuWfnwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3V0cHV0X2Rvd25sb2FkcygpIHsKICAgICAgICBnbG9iYWwgJHByb2R1Y3Q7CiAgICAgICAgCiAgICAgICAgJHByb2R1Y3RfaWQgPSAkcHJvZHVjdC0+Z2V0X2lkKCk7CiAgICAgICAgJHNwZWNfc2hlZXRfdXJsID0gZ2V0X3Bvc3RfbWV0YSgkcHJvZHVjdF9pZCwgJ193ZHR4X3NwZWNfc2hlZXQnLCB0cnVlKTsKICAgICAgICAkY29sb3Jfc3dhdGNoZXNfdXJsID0gZ2V0X3Bvc3RfbWV0YSgkcHJvZHVjdF9pZCwgJ193ZHR4X2NvbG9yX3N3YXRjaGVzJywgdHJ1ZSk7CiAgICAgICAgCiAgICAgICAgPz4KICAgICAgICA8c2VjdGlvbiBjbGFzcz0id2R0eC1zZWN0aW9uIHdkdHgtZG93bmxvYWRzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ3ZHR4LXNlY3Rpb24tdGl0bGUiPkRvd25sb2FkczwvaDI+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtZG93bmxvYWQtbGlzdCI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRzcGVjX3NoZWV0X3VybCkgOiA/PgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJHNwZWNfc2hlZXRfdXJsKTsgPz4iIGNsYXNzPSJ3ZHR4LWRvd25sb2FkLWl0ZW0iIGRvd25sb2FkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGNsYXNzPSJ3ZHR4LWRvd25sb2FkLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptMiAxNkg4di0yaDh2MnptMC00SDh2LTJoOHYyem0tMy01VjMuNUwxOC41IDlIMTN6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkRvd25sb2FkIFBERiBTcGVjIFNoZWV0PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3dkdHgtaW5xdWlyeS1mb3JtIiBjbGFzcz0id2R0eC1kb3dubG9hZC1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGNsYXNzPSJ3ZHR4LWRvd25sb2FkLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNMjEgMTlWNWMwLTEuMS0uOS0yLTItMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yek04LjUgMTMuNWwyLjUgMy4wMUwxNC41IDEybDQuNSA2SDVsMy41LTQuNXoiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlJlcXVlc3QgQ29sb3IgU3dhdGNoZXM8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiN3ZHR4LWlucXVpcnktZm9ybSIgY2xhc3M9IndkdHgtZG93bmxvYWQtaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBjbGFzcz0id2R0eC1kb3dubG9hZC1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0xIDE3LjkzYy0zLjk1LS40OS03LTMuODUtNy03LjkzIDAtLjYyLjA4LTEuMjEuMjEtMS43OUw5IDE1djFjMCAxLjEuOSAyIDIgMnYxLjkzem02LjktMi41NGMtLjI2LS44MS0xLTEuMzktMS45LTEuMzloLTF2LTNjMC0uNTUtLjQ1LTEtMS0xSDh2LTJoMmMuNTUgMCAxLS40NSAxLTFWN2gyYzEuMSAwIDItLjkgMi0ydi0uNDFjMi45MyAxLjE5IDUgNC4wNiA1IDcuNDEgMCAyLjA4LS44IDMuOTctMi4xIDUuMzl6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5GYWN0b3J5IEF1ZGl0IFJlcG9ydDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9zZWN0aW9uPgogICAgICAgIDw/cGhwCiAgICB9CiAgICAKICAgIC8qKgogICAgICog6L6T5Ye65b+r6YCf6K+i55uY6KGo5Y2V77yI5Y+z5L6n5Zu65a6a77yJCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvdXRwdXRfcXVpY2tfaW5xdWlyeV9mb3JtKCkgewogICAgICAgIGlmICghaXNfc2luZ3VsYXIoJ3dkdHhfcHJvZHVjdCcpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZ2xvYmFsICRwcm9kdWN0OwogICAgICAgIAogICAgICAgID8+CiAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1xdWljay1pbnF1aXJ5IiBpZD0id2R0eC1pbnF1aXJ5LWZvcm0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LWlucXVpcnktaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMz5RdWljayBJbnF1aXJ5PC9oMz4KICAgICAgICAgICAgICAgIDxwPkdldCBhIHF1b3RlIHdpdGhpbiAyNCBob3VyczwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8Zm9ybSBjbGFzcz0id2R0eC1pbnF1aXJ5LWZvcm0iIGlkPSJ3ZHR4LXByb2R1Y3QtaW5xdWlyeS1mb3JtIj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InByb2R1Y3RfaWQiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRwcm9kdWN0LT5nZXRfaWQoKSk7ID8+Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InByb2R1Y3RfbmFtZSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHByb2R1Y3QtPmdldF9uYW1lKCkpOyA/PiI+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iaW5xdWlyeS1uYW1lIj5OYW1lICo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaW5xdWlyeS1uYW1lIiBuYW1lPSJuYW1lIiByZXF1aXJlZD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LWZvcm0tZ3JvdXAiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImlucXVpcnktZW1haWwiPkVtYWlsICo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJlbWFpbCIgaWQ9ImlucXVpcnktZW1haWwiIG5hbWU9ImVtYWlsIiByZXF1aXJlZD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3ZHR4LWZvcm0tZ3JvdXAiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImlucXVpcnktY29tcGFueSI+Q29tcGFueSAqPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImlucXVpcnktY29tcGFueSIgbmFtZT0iY29tcGFueSIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1mb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJpbnF1aXJ5LXF1YW50aXR5Ij5RdWFudGl0eSAoa2cpPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0iaW5xdWlyeS1xdWFudGl0eSIgbmFtZT0icXVhbnRpdHkiIG1pbj0iMSI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2R0eC1mb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJpbnF1aXJ5LW1lc3NhZ2UiPk1lc3NhZ2U8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0iaW5xdWlyeS1tZXNzYWdlIiBuYW1lPSJtZXNzYWdlIiByb3dzPSI0Ij48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0id2R0eC1idG4gd2R0eC1idG4tZnVsbCI+U2VuZCBJbnF1aXJ5PC9idXR0b24+CiAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IndkdHgtY29udGFjdC1pbmZvIj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd2EubWUvODYxMzk1NzI5NTYxMSIgY2xhc3M9IndkdHgtd2hhdHNhcHAtbGluayIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBjbGFzcz0id2R0eC1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNMTcuNDcyIDE0LjM4MmMtLjI5Ny0uMTQ5LTEuNzU4LS44NjctMi4wMy0uOTY3LS4yNzMtLjA5OS0uNDcxLS4xNDgtLjY3LjE1LS4xOTcuMjk3LS43NjcuOTY2LS45NCAxLjE2NC0uMTczLjE5OS0uMzQ3LjIyMy0uNjQ0LjA3NS0uMjk3LS4xNS0xLjI1NS0uNDYzLTIuMzktMS40NzUtLjg4My0uNzg4LTEuNDgtMS43NjEtMS42NTMtMi4wNTktLjE3My0uMjk3LS4wMTgtLjQ1OC4xMy0uNjA2LjEzNC0uMTMzLjI5OC0uMzQ3LjQ0Ni0uNTIuMTQ5LS4xNzQuMTk4LS4yOTguMjk4LS40OTcuMDk5LS4xOTguMDUtLjM3MS0uMDI1LS41Mi0uMDc1LS4xNDktLjY2OS0xLjYxMi0uOTE2LTIuMjA3LS4yNDItLjU3OS0uNDg3LS41LS42NjktLjUxLS4xNzMtLjAwOC0uMzcxLS4wMS0uNTctLjAxLS4xOTggMC0uNTIuMDc0LS43OTIuMzcyLS4yNzIuMjk3LTEuMDQgMS4wMTYtMS4wNCAyLjQ3OSAwIDEuNDYyIDEuMDY1IDIuODc1IDEuMjEzIDMuMDc0LjE0OS4xOTggMi4wOTYgMy4yIDUuMDc3IDQuNDg3LjcwOS4zMDYgMS4yNjIuNDg5IDEuNjk0LjYyNS43MTIuMjI3IDEuMzYuMTk1IDEuODcxLjExOC41NzEtLjA4NSAxLjc1OC0uNzE5IDIuMDA2LTEuNDEzLjI0OC0uNjk0LjI0OC0xLjI4OS4xNzMtMS40MTMtLjA3NC0uMTI0LS4yNzItLjE5OC0uNTctLjM0N20tNS40MjEgNy40MDNoLS4wMDRhOS44NyA5Ljg3IDAgMDEtNS4wMzEtMS4zNzhsLS4zNjEtLjIxNC0zLjc0MS45ODIuOTk4LTMuNjQ4LS4yMzUtLjM3NGE5Ljg2IDkuODYgMCAwMS0xLjUxLTUuMjZjLjAwMS01LjQ1IDQuNDM2LTkuODg0IDkuODg4LTkuODg0IDIuNjQgMCA1LjEyMiAxLjAzIDYuOTg4IDIuODk4YTkuODI1IDkuODI1IDAgMDEyLjg5MyA2Ljk5NGMtLjAwMyA1LjQ1LTQuNDM3IDkuODg0LTkuODg1IDkuODg0bTguNDEzLTE4LjI5N0ExMS44MTUgMTEuODE1IDAgMDAxMi4wNSAwQzUuNDk1IDAgLjE2IDUuMzM1LjE1NyAxMS44OTJjMCAyLjA5Ni41NDcgNC4xNDIgMS41ODggNS45NDVMLjA1NyAyNGw2LjMwNS0xLjY1NGExMS44ODIgMTEuODgyIDAgMDA1LjY4MyAxLjQ0OGguMDA1YzYuNTU0IDAgMTEuODktNS4zMzUgMTEuODkzLTExLjg5M2ExMS44MjEgMTEuODIxIDAgMDAtMy40OC04LjQxM3oiLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICBXaGF0c0FwcDogKzg2IDEzOSA1NzI5IDU2MTEKICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOnNhbGVzQHdlbGxkb25ldGV4LmNvbSIgY2xhc3M9IndkdHgtZW1haWwtbGluayI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGNsYXNzPSJ3ZHR4LWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPSJjdXJyZW50Q29sb3IiIGQ9Ik0yMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgNGwtOCA1LTgtNVY2bDggNSA4LTV2MnoiLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICBzYWxlc0B3ZWxsZG9uZXRleC5jb20KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiDovpPlh7rlhoXogZQgQ1NTCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvdXRwdXRfc3R5bGVzKCkgewogICAgICAgIGlmICghaXNfc2luZ3VsYXIoJ3dkdHhfcHJvZHVjdCcpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgPz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgLyogV2VsbERvbmVUZXgg5Lqn5ZOB5Y2V6aG15qC35byPIC0g5pa55qGIIEE6IOS4k+S4muWKn+iDveWeiyAqLwogICAgICAgIAogICAgICAgIC8qIOWuueWZqCAqLwogICAgICAgIC53ZHR4LWNvbnRhaW5lciB7CiAgICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICAgICAgcGFkZGluZzogMCAyMHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBIZXJvIOWMuuWfnyAqLwogICAgICAgIC53ZHR4LXByb2R1Y3QtaGVybyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwZDFiM2UgMCUsICMxNTFlNWUgNTAlLCAjMmExYTZlIDEwMCUpOwogICAgICAgICAgICBjb2xvcjogIzBkMWIzZTsKICAgICAgICAgICAgcGFkZGluZzogNjBweCAwOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA2MHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1oZXJvLWdyaWQgewogICAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgICAgIGdhcDogNjBweDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLndkdHgtaGVyby1pbWFnZSBpbWcgewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDIwcHggNjBweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LXByb2R1Y3QtdGl0bGUgewogICAgICAgICAgICBmb250LXNpemU6IDQ4cHg7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICAgIG1hcmdpbjogMCAwIDIwcHggMDsKICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLndkdHgtcHJvZHVjdC1zdWJ0aXRsZSB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICAgICAgb3BhY2l0eTogMC45OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1oZXJvLWN0YSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGdhcDogMTVweDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLndkdHgtYnRuIHsKICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICBwYWRkaW5nOiAxNHB4IDMycHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1idG4tcHJpbWFyeSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICM0ZDdmZmY7CiAgICAgICAgICAgIGNvbG9yOiAjMGQxYjNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1idG4tcHJpbWFyeTpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMzYTZiZTA7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLndkdHgtYnRuLXNlY29uZGFyeSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmYgIWltcG9ydGFudDsKICAgICAgICAgICAgY29sb3I6ICMwZDFiM2UgIWltcG9ydGFudDsKICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzBkMWIzZSAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1idG4tc2Vjb25kYXJ5OmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzBkMWIzZTsKICAgICAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LXRydXN0LWJhZGdlcyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGdhcDogMzBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLndkdHgtYmFkZ2UgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWJhZGdlLWljb24gewogICAgICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgICAgICBmaWxsOiAjNGQ3ZmZmOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBTZWN0aW9uIOmAmueUqOagt+W8jyAqLwogICAgICAgIC53ZHR4LXNlY3Rpb24gewogICAgICAgICAgICBwYWRkaW5nOiA2MHB4IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LXNlY3Rpb24tdGl0bGUgewogICAgICAgICAgICBmb250LXNpemU6IDM2cHg7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgbWFyZ2luOiAwIDAgNDBweCAwOwogICAgICAgICAgICBjb2xvcjogIzBkMWIzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyog5oqA5pyv6KeE5qC86KGo5qC8ICovCiAgICAgICAgLndkdHgtc3BlYy10YWJsZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmOGY5ZmE7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDMwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LXNwZWMtdGFibGUgdGFibGUgewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLndkdHgtc3BlYy10YWJsZSB0aCwKICAgICAgICAud2R0eC1zcGVjLXRhYmxlIHRkIHsKICAgICAgICAgICAgcGFkZGluZzogMTVweCAyMHB4OwogICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2UwZTBlMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLndkdHgtc3BlYy10YWJsZSB0aCB7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIGNvbG9yOiAjMGQxYjNlOwogICAgICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LXNwZWMtdGFibGUgdHI6bGFzdC1jaGlsZCB0aCwKICAgICAgICAud2R0eC1zcGVjLXRhYmxlIHRyOmxhc3QtY2hpbGQgdGQgewogICAgICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiDkuqflk4HnibnmgKcgKi8KICAgICAgICAud2R0eC1mZWF0dXJlLWdyaWQgewogICAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCAxZnIpOwogICAgICAgICAgICBnYXA6IDMwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWZlYXR1cmUtaXRlbSB7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgcGFkZGluZzogMzBweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLndkdHgtZmVhdHVyZS1pdGVtOmhvdmVyIHsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1mZWF0dXJlLWljb24gewogICAgICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICAgICAgaGVpZ2h0OiA2MHB4OwogICAgICAgICAgICBtYXJnaW46IDAgYXV0byAyMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjNGQ3ZmZmOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1mZWF0dXJlLWljb24gLndkdHgtaWNvbiB7CiAgICAgICAgICAgIHdpZHRoOiAzMHB4OwogICAgICAgICAgICBoZWlnaHQ6IDMwcHg7CiAgICAgICAgICAgIGZpbGw6ICNmZmY7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWZlYXR1cmUtdGl0bGUgewogICAgICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIG1hcmdpbjogMCAwIDEwcHggMDsKICAgICAgICAgICAgY29sb3I6ICMwZDFiM2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWZlYXR1cmUtZGVzYyB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyog5bqU55So5Zy65pmvICovCiAgICAgICAgLndkdHgtYXBwbGljYXRpb24tZ3JpZCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIDFmcik7CiAgICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLndkdHgtYXBwbGljYXRpb24tY2FyZCB7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgcGFkZGluZzogMzBweCAyMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOWZhOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1hcHBsaWNhdGlvbi1jYXJkOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzBkMWIzZTsKICAgICAgICAgICAgY29sb3I6ICMwZDFiM2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWFwcGxpY2F0aW9uLWNhcmQ6aG92ZXIgLndkdHgtYXBwbGljYXRpb24tZGVzYyB7CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWFwcGxpY2F0aW9uLWljb24gewogICAgICAgICAgICB3aWR0aDogNTBweDsKICAgICAgICAgICAgaGVpZ2h0OiA1MHB4OwogICAgICAgICAgICBtYXJnaW46IDAgYXV0byAxNXB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1hcHBsaWNhdGlvbi1pY29uIC53ZHR4LWljb24gewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICBmaWxsOiAjNGQ3ZmZmOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1hcHBsaWNhdGlvbi1jYXJkOmhvdmVyIC53ZHR4LWFwcGxpY2F0aW9uLWljb24gLndkdHgtaWNvbiB7CiAgICAgICAgICAgIGZpbGw6ICNmZmY7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWFwcGxpY2F0aW9uLXRpdGxlIHsKICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBtYXJnaW46IDAgMCAxMHB4IDA7CiAgICAgICAgICAgIGNvbG9yOiAjMGQxYjNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1hcHBsaWNhdGlvbi1jYXJkOmhvdmVyIC53ZHR4LWFwcGxpY2F0aW9uLXRpdGxlIHsKICAgICAgICAgICAgY29sb3I6ICMwZDFiM2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWFwcGxpY2F0aW9uLWRlc2MgewogICAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIOiupOivgSAqLwogICAgICAgIC53ZHR4LWNlcnQtbGlzdCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIDFmcik7CiAgICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLndkdHgtY2VydC1pdGVtIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiAxNXB4OwogICAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOWZhOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWNlcnQtaWNvbiB7CiAgICAgICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1jZXJ0LWljb24gLndkdHgtaWNvbiB7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIGZpbGw6ICM0ZDdmZmY7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWNlcnQtbmFtZSB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgICAgICAgIGNvbG9yOiAjMGQxYjNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1jZXJ0LWRlc2MgewogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIOS4i+i9vSAqLwogICAgICAgIC53ZHR4LWRvd25sb2FkLWxpc3QgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDE1cHg7CiAgICAgICAgICAgIG1heC13aWR0aDogNjAwcHg7CiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1kb3dubG9hZC1pdGVtIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiAxNXB4OwogICAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOWZhOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICAgICAgY29sb3I6ICMwZDFiM2U7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWRvd25sb2FkLWl0ZW06aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMGQxYjNlOwogICAgICAgICAgICBjb2xvcjogIzBkMWIzZTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwcHgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1kb3dubG9hZC1pY29uIHsKICAgICAgICAgICAgd2lkdGg6IDMwcHg7CiAgICAgICAgICAgIGhlaWdodDogMzBweDsKICAgICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgICAgIGZpbGw6ICM0ZDdmZmY7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWRvd25sb2FkLWl0ZW06aG92ZXIgLndkdHgtZG93bmxvYWQtaWNvbiB7CiAgICAgICAgICAgIGZpbGw6ICNmZmY7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIOW/q+mAn+ivouebmOihqOWNlSAqLwogICAgICAgIC53ZHR4LXF1aWNrLWlucXVpcnkgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgICAgICBwYWRkaW5nOiAzMHB4OwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICAgICAgdG9wOiAyMHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1pbnF1aXJ5LWhlYWRlciB7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWlucXVpcnktaGVhZGVyIGgzIHsKICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgICAgICBtYXJnaW46IDAgMCAxMHB4IDA7CiAgICAgICAgICAgIGNvbG9yOiAjMGQxYjNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1pbnF1aXJ5LWhlYWRlciBwIHsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1mb3JtLWdyb3VwIHsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLndkdHgtZm9ybS1ncm91cCBsYWJlbCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICAgICAgY29sb3I6ICMwZDFiM2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWZvcm0tZ3JvdXAgaW5wdXQsCiAgICAgICAgLndkdHgtZm9ybS1ncm91cCB0ZXh0YXJlYSB7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDE1cHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuM3MgZWFzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLndkdHgtZm9ybS1ncm91cCBpbnB1dDpmb2N1cywKICAgICAgICAud2R0eC1mb3JtLWdyb3VwIHRleHRhcmVhOmZvY3VzIHsKICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNGQ3ZmZmOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1idG4tZnVsbCB7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC1jb250YWN0LWluZm8gewogICAgICAgICAgICBtYXJnaW4tdG9wOiAzMHB4OwogICAgICAgICAgICBwYWRkaW5nLXRvcDogMzBweDsKICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlMGUwZTA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LXdoYXRzYXBwLWxpbmssCiAgICAgICAgLndkdHgtZW1haWwtbGluayB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogMTBweDsKICAgICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgICAgIGNvbG9yOiAjMGQxYjNlOwogICAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LXdoYXRzYXBwLWxpbms6aG92ZXIsCiAgICAgICAgLndkdHgtZW1haWwtbGluazpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwZDFiM2U7CiAgICAgICAgICAgIGNvbG9yOiAjMGQxYjNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAud2R0eC13aGF0c2FwcC1saW5rIC53ZHR4LWljb24sCiAgICAgICAgLndkdHgtZW1haWwtbGluayAud2R0eC1pY29uIHsKICAgICAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgICAgIGZpbGw6ICMyNUQzNjY7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LWVtYWlsLWxpbmsgLndkdHgtaWNvbiB7CiAgICAgICAgICAgIGZpbGw6ICM0ZDdmZmY7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC53ZHR4LXdoYXRzYXBwLWxpbms6aG92ZXIgLndkdHgtaWNvbiwKICAgICAgICAud2R0eC1lbWFpbC1saW5rOmhvdmVyIC53ZHR4LWljb24gewogICAgICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiDlk43lupTlvI/orr7orqEgKi8KICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7CiAgICAgICAgICAgIC53ZHR4LWhlcm8tZ3JpZCB7CiAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLndkdHgtaGVyby1jdGEgewogICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC53ZHR4LXRydXN0LWJhZGdlcyB7CiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLndkdHgtZmVhdHVyZS1ncmlkIHsKICAgICAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC53ZHR4LWFwcGxpY2F0aW9uLWdyaWQgewogICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLndkdHgtY2VydC1saXN0IHsKICAgICAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgICAgIC53ZHR4LXByb2R1Y3QtaGVybyB7CiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0MHB4IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC53ZHR4LXByb2R1Y3QtdGl0bGUgewogICAgICAgICAgICAgICAgZm9udC1zaXplOiAzMnB4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAud2R0eC1zZWN0aW9uLXRpdGxlIHsKICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjhweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLndkdHgtZmVhdHVyZS1ncmlkLAogICAgICAgICAgICAud2R0eC1hcHBsaWNhdGlvbi1ncmlkLAogICAgICAgICAgICAud2R0eC1jZXJ0LWxpc3QgewogICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC53ZHR4LXNwZWMtdGFibGUgewogICAgICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLndkdHgtc3BlYy10YWJsZSB0aCwKICAgICAgICAgICAgLndkdHgtc3BlYy10YWJsZSB0ZCB7CiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyog Polar Fleece - WELLDONETEX A RELIABLE FABRIC SUPPLIER

What is Anti-Pill Fleece?

antifleece coat

A Comprehensive Guide Fleece is a cozy, comfortable fabric popular for everything from winter jackets to blankets. But if you’ve ever owned a fleece item that started to look worn and shabby after just a few years, you’re likely familiar with the frustrating phenomenon of pilling. These tiny fiber balls, or “pills,” form due to … Read more

What is Coral Fleece Fabric?

Coral fleece is a type of plush, synthetic fabric known for its luxurious softness and warmth. It’s made primarily from polyester fibers, which are tightly woven and brushed to create a smooth, velvety surface. This fabric is popular for its cozy feel, lightweight nature, and excellent insulation properties, making it a favorite for items like … Read more