PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjEwMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgb25sb2FkPSJpbml0KCkiPgogICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+CiAgICB2YXIgZm9udEZhbWlseTEgPSAiQXJpYWwiOwogICAgdmFyIGZvbnRGYW1pbHkyID0gIkx1Y2lkYVNhbnNVbmljb2RlIjsKICAgIHZhciBmb250RmFtaWx5MyA9ICJNUy1Hb3RoaWMiOwoKICAgIHZhciBlbnRyeVlPZmZzZXQgPSAxMDsKICAgIHZhciBlbnRyeVlEZWx0YSA9IDE2OwoKICAgIHZhciBlbnRyeVggPSBuZXcgQXJyYXkoKTsKICAgIGVudHJ5WFswXSA9IDEwOwogICAgZW50cnlYWzFdID0gMTAwOwogICAgZW50cnlYWzJdID0gMTkwOwoKICAgIHZhciBlbnRyeVhFbmQgPSBlbnRyeVhbMF0gKyBlbnRyeVhbMV0gKyBlbnRyeVhbMl07CgogICAgdmFyIGVudHJ5WSA9IG5ldyBBcnJheSgpOwogICAgZW50cnlZWzBdID0gZW50cnlZT2Zmc2V0OwogICAgZW50cnlZWzFdID0gZW50cnlZT2Zmc2V0OwogICAgZW50cnlZWzJdID0gZW50cnlZT2Zmc2V0OwoKICAgIHZhciBpbnNlcnQ7CgogICAgZnVuY3Rpb24gZHJhd0dyaWQoeFZhbHVlLCB5VmFsdWUpCiAgICB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5lIik7CiAgICAgICAgbGluZS54MS5iYXNlVmFsLnZhbHVlID0gTWF0aC5mbG9vcih4VmFsdWUpOwogICAgICAgIGxpbmUueTEuYmFzZVZhbC52YWx1ZSA9IE1hdGguZmxvb3IoeVZhbHVlKSArIChlbnRyeVlEZWx0YSAvIDIpIC0gNDsKICAgICAgICBsaW5lLngyLmJhc2VWYWwudmFsdWUgPSBNYXRoLmZsb29yKHhWYWx1ZSkgKyBlbnRyeVhFbmQ7CiAgICAgICAgbGluZS55Mi5iYXNlVmFsLnZhbHVlID0gTWF0aC5mbG9vcih5VmFsdWUpICsgKGVudHJ5WURlbHRhIC8gMikgLSA0OwogICAgICAgIGxpbmUuc2V0QXR0cmlidXRlKCJzdHlsZSIsICJzdHJva2Utd2lkdGg6MXB4OyBzdHJva2U6YmxhY2s7IG9wYWNpdHk6MC41Iik7CgogICAgICAgIGluc2VydC5hcHBlbmRDaGlsZChsaW5lKTsKICAgIH0KCiAgICBmdW5jdGlvbiBlbnRyeShtZXNzYWdlLCB4VmFsdWUsIHlWYWx1ZSwgZmFtaWx5KQogICAgewogICAgICAgIHZhciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dCIpOwoKICAgICAgICAvLyBTZXQgWC9ZIHByb3BlcnRpZXMgdXNpbmcgU1ZHIERPTQogICAgICAgIHZhciB4TGVuZ3RoID0gZG9jdW1lbnQucm9vdEVsZW1lbnQuY3JlYXRlU1ZHTGVuZ3RoKCk7CiAgICAgICAgeExlbmd0aC52YWx1ZSA9IHhWYWx1ZTsKCiAgICAgICAgdmFyIHlMZW5ndGggPSBkb2N1bWVudC5yb290RWxlbWVudC5jcmVhdGVTVkdMZW5ndGgoKTsKICAgICAgICB5TGVuZ3RoLnZhbHVlID0geVZhbHVlOwoKICAgICAgICB0ZXh0LnguYmFzZVZhbC5hcHBlbmRJdGVtKHhMZW5ndGgpOwogICAgICAgIHRleHQueS5iYXNlVmFsLmFwcGVuZEl0ZW0oeUxlbmd0aCk7CgogICAgICAgIC8vIEFwcGVuZCAiVGV4dCIgY2hpbGQgbm9kZQogICAgICAgIHRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOwoKICAgICAgICAvLyBDaG9vc2UgZm9udC1zaXplL2ZvbnQtZmFtaWx5CiAgICAgICAgc3dpdGNoIChmYW1pbHkpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgIHRleHQuc2V0QXR0cmlidXRlKCJmb250LWZhbWlseSIsIGZvbnRGYW1pbHkxKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgICB0ZXh0LnNldEF0dHJpYnV0ZSgiZm9udC1mYW1pbHkiLCBmb250RmFtaWx5Mik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgdGV4dC5zZXRBdHRyaWJ1dGUoImZvbnQtZmFtaWx5IiwgZm9udEZhbWlseTMpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIHRleHQuc2V0QXR0cmlidXRlKCJmb250LXNpemUiLCAiMTIiKTsKCiAgICAgICAgLy8gQWRkIHRvIHRyZWUKICAgICAgICBpbnNlcnQuYXBwZW5kQ2hpbGQodGV4dCk7ICAgIAogICAgICAgIHJldHVybiBlbnRyeVlEZWx0YTsKICAgIH0KCiAgICBmdW5jdGlvbiBuZXdFbnRyeShjb2wxLCBjb2wyLCBjb2wzLCBmYW1pbHkpCiAgICB7CiAgICAgICAgZHJhd0dyaWQoZW50cnlYWzBdLCBlbnRyeVlbMF0pOwoKICAgICAgICBlbnRyeVlbMF0gKz0gZW50cnkoY29sMSwgZW50cnlYWzBdLCBlbnRyeVlbMF0sIGZhbWlseSk7CiAgICAgICAgZW50cnlZWzFdICs9IGVudHJ5KGNvbDIsIGVudHJ5WFsxXSwgZW50cnlZWzFdLCBmYW1pbHkpOwogICAgICAgIGVudHJ5WVsyXSArPSBlbnRyeShjb2wzLCBlbnRyeVhbMl0sIGVudHJ5WVsyXSwgZmFtaWx5KTsKICAgIH0KCiAgICBmdW5jdGlvbiBpbml0KCkKICAgIHsKICAgICAgICBpbnNlcnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW5zZXJ0Iik7CgogICAgICAgIG5ld0VudHJ5KCJBcmFiaWMiLCAiIiwgItin2YTYs9mE2KfZhSDYudmE2YrZg9mFICIsIDApOwogICAgICAgIG5ld0VudHJ5KCJCZW5nYWxpIiwgIuCmrOCmvuCmmeCnjeCmsuCmviIsICLgprfgpr7gppfgpqTgp4vgpq4iLCAwKTsgLy8gV2hpY2ggbGFuZz8KICAgICAgICBuZXdFbnRyeSgiQnVybWVzZSIsICIiLCAi4YCZ4YC54YCb4YCU4YC54YCZ4YCsIiwgMCk7IC8vIFdoaWNoIGxhbmc/CiAgICAgICAgbmV3RW50cnkoIkNoZXJva2VlIiwgIuGPo+GOs+GOqSIsICLhjqPhj4/hj7IiLCAwKTsgLy8gV2hpY2ggbGFuZz8KICAgICAgICBuZXdFbnRyeSgiQ3plY2giLCAixI1lc2t5IiwgIkRvYnLDvSBkZW4iLCAwKTsKICAgICAgICBuZXdFbnRyeSgiRGFuaXNoIiwgIkRhbnNrIiwgIkhlaiwgR29kZGFnIiwgMCk7CiAgICAgICAgbmV3RW50cnkoIkVuZ2xpc2giLCAiIiwgIkhlbGxvIiwgMCk7CiAgICAgICAgbmV3RW50cnkoIkVzcGVyYW50byIsICIiLCAiU2FsdXRvbiIsIDApOwogICAgICAgIG5ld0VudHJ5KCJFc3RvbmlhbiIsICIiLCAiVGVyZSwgVGVydmlzdCIsIDApOwogICAgICAgIG5ld0VudHJ5KCJGaW5uaXNoIiwgIlN1b21pIiwgIkhlaSIsIDApOwogICAgICAgIG5ld0VudHJ5KCJGcmVuY2giLCAiRnJhbsOnYWlzIiwgIkJvbmpvdXIsIFNhbHV0IiwgMCk7CiAgICAgICAgbmV3RW50cnkoIkdlcm1hbiIsICJEZXV0c2NoIE5vcmQiLCAiR3V0ZW4gVGFnIiwgMCk7CiAgICAgICAgbmV3RW50cnkoIkdlcm1hbiIsICJEZXV0c2NoIFPDvGQiLCAiR3LDvMOfIEdvdHQiLCAwKTsKICAgICAgICBuZXdFbnRyeSgiR2VvcmdpYW4iLCAi4YOl4YOQ4YOg4YOX4YOV4YOU4YOa4YOYIiwgIuGDkuGDkOGDm+GDkOGDoOGDr+GDneGDkeGDkCIsIDApOyAvLyBXaGljaCBsYW5nPwogICAgICAgIG5ld0VudHJ5KCJHdWphcmF0aSIsICIiLCAi4KqX4KuB4Kqc4Kqw4Kq+4Kqk4Kq/IiwgMCk7IC8vIFdoaWNoIGxhbmc/CiAgICAgICAgbmV3RW50cnkoIkdyZWVrIiwgIs6VzrvOu863zr3Ouc66zqwiLCAizpPOtc65zqwgz4POsc+CIiwgMCk7CiAgICAgICAgbmV3RW50cnkoIkhlYnJldyIsICIiLCAi16nXnNeV150iLCAxKTsKICAgICAgICBuZXdFbnRyeSgiSGluZGkiLCAiIiwgIuCkqOCkruCkuOCljeCkpOClhywg4KSo4KSu4KS44KWN4KSV4KS+4KSw4KWkIiwgMCk7IC8vIFdoaWNoIGxhbmc/CiAgICAgICAgbmV3RW50cnkoIkl0YWxpYW5vIiwgIiIsICJDaWFvLCBCdW9uIGdpb3JubyIsIDApOwogICAgICAgIG5ld0VudHJ5KCLJqsWLZ2zJqsqDIiwgIiIsICJoyZtsyZnKiiIsIDEpOyAvLyBXaGljaCBsYW5nIGhlcmU/CiAgICAgICAgbmV3RW50cnkoIk1hbHRlc2UiLCAiIiwgIsSKYXcsIFNhxKfEp2EiLCAxKTsKICAgICAgICBuZXdFbnRyeSgiTmVkZXJsYW5kcyIsICIiLCAiSGFsbG8sIERhZyIsIDApOwogICAgICAgIG5ld0VudHJ5KCJOb3J3ZWdpYW4iLCAiTm9yc2siLCAiSGVpLCBHb2QgZGFnIiwgMCk7CiAgICAgICAgbmV3RW50cnkoIlB1bmphYmkiLCAiIiwgIuCpgeCoquCpgeCoguConOCovuCorOCovyIsIDApOyAvLyBXaGljaCBsYW5nPwogICAgICAgIG5ld0VudHJ5KCJQb2xpc2giLCAiIiwgIkR6aWXFhCBkb2JyeSwgSGVqIiwgMCk7CiAgICAgICAgbmV3RW50cnkoIlJ1c3NpYW4iLCAi0KDRg9GB0YHQutC40LkiLCAi0JfQtNGA0LDQstGB0YLQstGD0LnRgtC1ISIsIDApOwogICAgICAgIG5ld0VudHJ5KCJTbG92YWsiLCAiIiwgIkRvYnLDvSBkZcWIIiwgMCk7CiAgICAgICAgbmV3RW50cnkoIlNwYW5pc2giLCAiRXNwYcOxb2wiLCAi4oCOwqFIb2xhIeKAjiIsIDEpOwogICAgICAgIG5ld0VudHJ5KCJTd2VkaXNoIiwgIlN2ZW5za2EiLCAiSGVqLCBHb2RkYWciLCAwKTsKICAgICAgICBuZXdFbnRyeSgiVGhhaSIsICLguKDguLLguKnguLLguYTguJfguKIiLCAi4Liq4Lin4Lix4Liq4LiU4Li14LiE4Lij4Lix4LiaLCDguKrguKfguLHguKrguJTguLXguITguYjguLAiLCAwKTsgLy8gV2hpY2ggbGFuZz8KICAgICAgICBuZXdFbnRyeSgiVHVya2lzaCIsICJUw7xya8OnZSIsICJNZXJoYWJhIiwgMCk7CiAgICAgICAgbmV3RW50cnkoIlZpZXRuYW1lc2UiLCAiVGnhur9uZyBWaeG7h3QiLCAiWGluIENow6BvIiwgMCk7CiAgICAgICAgbmV3RW50cnkoIllpZGRpc2giLCAi17LWt9eT15nXqdeiIiwgIteT15DWuNehINeU17LWt9eW16LXnNeiICIsIDEpOwogICAgICAgIG5ld0VudHJ5KCJKYXBhbmVzZSIsICLml6XmnKzoqp4iLCAi44GT44KT44Gr44Gh44GvLCDvvbrvvp3vvobvvoHvvooiLCAyKTsKICAgICAgICBuZXdFbnRyeSgiQ2hpbmVzZSIsICLkuK3mlocs5pmu6YCa6K+dLOaxieivrb0iLCAi5L2g5aW9IiwgMik7CiAgICAgICAgbmV3RW50cnkoIkNhbnRvbmVzZSIsICLnsrXoqp4s5buj5p2x6KmxIiwgIuaXqeaZqCwg5L2g5aW9IiwgMik7ICAgIAogICAgICAgIG5ld0VudHJ5KCJLb3JlYW4iLCAi7ZWc6riAIiwgIuyViOuFle2VmOyEuOyalCwg7JWI64WV7ZWY7Iut64uI6rmMIiwgMCk7IC8vIFdoaWNoIGxhbmc/CiAgICB9CiAgICA8L3NjcmlwdD4KCiAgICA8ZyBpZD0iaW5zZXJ0Ii8+Cjwvc3ZnPgo=