Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_haijiao-vip:海角社区解锁收费视频,VIP,去广告@base64://Ci8vID09VXNlclNjcmlwdD09Ci8vIEBuYW1lICAgICAgICAgICBoYWlqaWFvLXZpcDog5rW36KeS56S+5Yy6IOino+mUgeaUtui0ueinhumikSxWSVAs5Y675bm/5ZGKCi8vIEBuYW1lc3BhY2UgICAgICBodHRwczovL2dpdGh1Yi5jb20vc2V4NDA5Ni9oYWlqaWFvX3ZpcAovLyBAdmVyc2lvbiAgICAgICAgMS4wLjgKLy8gQGF1dGhvciAgICAgICAgIGZvcmdldG1lOAovLyBAZGVzY3JpcHRpb24gICAg6Kej6ZSBIOa1t+inkuekvuWMuihoYWlqaWFvLmNvbSkg5pS26LS56KeG6aKRLFZJUCzlubbljrvpmaTnvZHnq5nlub/lkYosIFRH6aKR6YGTOkBzdmlwX25hdi7mnKzmj5Lku7blrozlhajlhY3otLks6K+35rOo5oSP55SE5YirLOmBv+WFjeS4iuW9k+WPl+mqly4KLy8gQGhvbWVwYWdlICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zZXg0MDk2L2hhaWppYW9fdmlwI3JlYWRtZQovLyBAc3VwcG9ydFVSTCAgICAgaHR0cHM6Ly9naXRodWIuY29tL3NleDQwOTYvaGFpamlhb192aXAvaXNzdWUKLy8gQHJ1bi1hdCAgICAgICAgIGRvY3VtZW50LWlkbGUKLy8gQG1hdGNoICAgICAgICAgIGh0dHBzOi8vd3d3LmhqY3gub3JnLyoKLy8gQG1hdGNoICAgICAgICAgIGh0dHBzOi8vaGpjeC5vcmcvKgovLyBAbWF0Y2ggICAgICAgICAgaHR0cHM6Ly93d3cuaGFpamlhby5jb20vKgovLyBAbWF0Y2ggICAgICAgICAgaHR0cHM6Ly9oYWlqaWFvLmNvbS8qCi8vIEBtYXRjaCAgICAgICAgICBodHRwczovLyoudG9wL2hvbWUKLy8gQG1hdGNoICAgICAgICAgICovcG9zdC9kZXRhaWxzP3BpZD0qCi8vIEBsaWNlbnNlICAgICAgICBNSVQKLy8gQGNvbm5lY3QgICAgICAgIGNkbi5qc2RlbGl2ci5uZXQKLy8gQHJlcXVpcmUgICAgICAgIGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcmVhY3RAMTguMy4wL3VtZC9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcwovLyBAcmVxdWlyZSAgICAgICAgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9yZWFjdC1kb21AMTguMy4wL3VtZC9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMKLy8gQHJlcXVpcmUgICAgICAgIGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vZGF5anNAMS9kYXlqcy5taW4uanMKLy8gQHJlcXVpcmUgICAgICAgIGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYW50ZEA1LjE2LjQvZGlzdC9hbnRkLm1pbi5qcwovLyBAcmVxdWlyZSAgICAgICAgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AYW50LWRlc2lnbi9pY29uc0A1LjMuNi9kaXN0L2luZGV4LnVtZC5taW4uanMKLy8gQGRvd25sb2FkVVJMIGh0dHBzOi8vdXBkYXRlLmdyZWFzeWZvcmsub3JnL3NjcmlwdHMvNDkzMzQ0L2hhaWppYW8tdmlwJTNBJTIwJUU2JUI1JUI3JUU4JUE3JTkyJUU3JUE0JUJFJUU1JThDJUJBJTIwJUU4JUE3JUEzJUU5JTk0JTgxJUU2JTk0JUI2JUU4JUI0JUI5JUU4JUE3JTg2JUU5JUEyJTkxJTJDVklQJTJDJUU1JThFJUJCJUU1JUI5JUJGJUU1JTkxJThBLnVzZXIuanMKLy8gQHVwZGF0ZVVSTCBodHRwczovL3VwZGF0ZS5ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzQ5MzM0NC9oYWlqaWFvLXZpcCUzQSUyMCVFNiVCNSVCNyVFOCVBNyU5MiVFNyVBNCVCRSVFNSU4QyVCQSUyMCVFOCVBNyVBMyVFOSU5NCU4MSVFNiU5NCVCNiVFOCVCNCVCOSVFOCVBNyU4NiVFOSVBMiU5MSUyQ1ZJUCUyQyVFNSU4RSVCQiVFNSVCOSVCRiVFNSU5MSU4QS5tZXRhLmpzCi8vID09L1VzZXJTY3JpcHQ9PQooZnVuY3Rpb24gKFJlYWN0JDEsIFJlYWN0RE9NLCBhbnRkLCBpY29ucykgewogICd1c2Ugc3RyaWN0JzsKCiAgZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0TGVnYWN5IChlKSB7IHJldHVybiBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAnZGVmYXVsdCcgaW4gZSA/IGUgOiB7ICdkZWZhdWx0JzogZSB9OyB9CgogIHZhciBSZWFjdF9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koUmVhY3QkMSk7CiAgdmFyIFJlYWN0RE9NX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShSZWFjdERPTSk7CgogIHZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0gdW5kZWZpbmVkOwogIHZhciBWVUUgPSB1bmRlZmluZWQ7CiAgdmFyIFNUT1JFID0gdW5kZWZpbmVkOwogIHZhciBBWElPUyA9IHVuZGVmaW5lZDsKICB2YXIgY2FsbGJhY2sgPSB1bmRlZmluZWQ7CiAgZnVuY3Rpb24gaW5pdEhvb2tXZWJwYWNrKGluaXRpYWxlZCkgewogICAgY2FsbGJhY2sgPSBpbml0aWFsZWQ7CiAgICBsZXQgb3JpZ2luQ2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsOwogICAgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoKSB7CiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgewogICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CiAgICAgIH0KICAgICAgY29uc3QgcmVzdWx0ID0gb3JpZ2luQ2FsbC5hcHBseSh0aGlzLCBhcmdzKTsKICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSA0ICYmIGFyZ3NbMV0gJiYgYXJnc1sxXS5leHBvcnRzICYmIGFyZ3NbMF0gPT09IGFyZ3NbMl0gJiYgX193ZWJwYWNrX3JlcXVpcmVfXyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgX193ZWJwYWNrX3JlcXVpcmVfXyA9IGFyZ3NbM107CiAgICAgICAgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwgPSBvcmlnaW5DYWxsOwogICAgICAgIGltcG9ydE1vZHVsZXMoKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9CiAgZnVuY3Rpb24gaW1wb3J0TW9kdWxlcygpIHsKICAgIFZVRSA9IF9fd2VicGFja19yZXF1aXJlX18oIjJiMGUiKS5kZWZhdWx0OwogICAgU1RPUkUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKCI0MzYwIikuYTsKICAgIEFYSU9TID0gX193ZWJwYWNrX3JlcXVpcmVfXygiYmMzYSIpOwogICAgQVhJT1MgPSBnZXRPYmplY3QoQVhJT1MpOwogICAgQVhJT1MgPSBBWElPUy5hOwogICAgY2FsbGJhY2soVlVFLCBTVE9SRSwgQVhJT1MpOwogIH0KICBmdW5jdGlvbiBnZXRPYmplY3QobW9kdWxlKSB7CiAgICBjb25zdCB0ID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID8gZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gbW9kdWxlLmRlZmF1bHQ7CiAgICB9IDogZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gbW9kdWxlOwogICAgfTsKICAgIGRlZmluZU9iamVjdCh0LCAiYSIsIHQpOwogICAgcmV0dXJuIHQ7CiAgfQogIGZ1bmN0aW9uIGRlZmluZU9iamVjdChtb2R1bGUsIGtleSwgdmFsdWUpIHsKICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2R1bGUsIGtleSkgfHwgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwga2V5LCB7CiAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgIGdldDogdmFsdWUKICAgIH0pOwogIH0KCiAgLyoqCiAgICog5Yqg6L295qih5Z2XCiAgICogQHBhcmFtIG1vZHVsZQogICAqLwogIGZ1bmN0aW9uIGdldE1vZHVsZShtb2R1bGUpIHsKICAgIGlmICghX193ZWJwYWNrX3JlcXVpcmVfXykgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGUpOwogIH0KCiAgY29uc3QgU2V0dGluZ3MgPSBfcmVmID0+IHsKICAgIGxldCB7CiAgICAgIGluaXRpYWxTZXR0aW5ncywKICAgICAgb25Gb3JtSW5zdGFuY2VSZWFkeQogICAgfSA9IF9yZWY7CiAgICBjb25zdCBbZm9ybV0gPSBhbnRkLkZvcm0udXNlRm9ybSgpOwogICAgUmVhY3QkMS51c2VFZmZlY3QoKCkgPT4gewogICAgICBvbkZvcm1JbnN0YW5jZVJlYWR5KGZvcm0pOwogICAgfSwgW10pOwogICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChhbnRkLkZvcm0sIHsKICAgICAgZm9ybTogZm9ybSwKICAgICAgbmFtZTogInNldHRpbmdzIiwKICAgICAgbGFiZWxBbGlnbjogInJpZ2h0IiwKICAgICAgbGFiZWxDb2w6IHsKICAgICAgICBzcGFuOiA4CiAgICAgIH0sCiAgICAgIHdyYXBwZXJDb2w6IHsKICAgICAgICBzcGFuOiAxNgogICAgICB9LAogICAgICBpbml0aWFsVmFsdWVzOiBpbml0aWFsU2V0dGluZ3MKICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGFudGQuRm9ybS5JdGVtLCB7CiAgICAgIGxhYmVsOiAiXHU1M0JCXHU1RTdGXHU1NDRBIgogICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoYW50ZC5Gb3JtLkl0ZW0sIHsKICAgICAgbmFtZTogInJlbW92ZUFkcyIsCiAgICAgIG5vU3R5bGU6IHRydWUKICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGFudGQuU3dpdGNoLCBudWxsKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KCJzcGFuIiwgewogICAgICBzdHlsZTogewogICAgICAgIG1hcmdpbkxlZnQ6IDEwCiAgICAgIH0KICAgIH0sICJcdTUzQkJcdTk2NjRcdTdGNTFcdTdBRDlcdTVFN0ZcdTU0NEEiKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGFudGQuRm9ybS5JdGVtLCB7CiAgICAgIGxhYmVsOiAiXHU1QzRGXHU4NTNEXHU3RjZFXHU5ODc2IgogICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoYW50ZC5Gb3JtLkl0ZW0sIHsKICAgICAgbmFtZTogInJlbW92ZVRvcHMiLAogICAgICBub1N0eWxlOiB0cnVlCiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChhbnRkLlN3aXRjaCwgbnVsbCkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudCgic3BhbiIsIHsKICAgICAgc3R5bGU6IHsKICAgICAgICBtYXJnaW5MZWZ0OiAxMAogICAgICB9CiAgICB9LCAiXHU1QzRGXHU4NTNEXHU1MTY4XHU1QzQwXHU3RjZFXHU5ODc2XHU1RTE2IikpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChhbnRkLkZvcm0uSXRlbSwgewogICAgICBsYWJlbDogIlx1NjdFNVx1NzcwQlx1NUMwMVx1Nzk4MVx1NzUyOFx1NjIzNyIKICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGFudGQuRm9ybS5JdGVtLCB7CiAgICAgIG5hbWU6ICJ2aWV3QmFuVXNlciIsCiAgICAgIG5vU3R5bGU6IHRydWUKICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGFudGQuU3dpdGNoLCBudWxsKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KCJzcGFuIiwgewogICAgICBzdHlsZTogewogICAgICAgIG1hcmdpbkxlZnQ6IDEwCiAgICAgIH0KICAgIH0sICJcdTY3RTVcdTc3MEJcdTg4QUJcdTVDMDFcdTc5ODFcdTc2ODRcdTc1MjhcdTYyMzdcdTRGRTFcdTYwNkYiKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGFudGQuRm9ybS5JdGVtLCB7CiAgICAgIGxhYmVsOiAiXHU4OUUzXHU5NTAxVklQIgogICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoYW50ZC5Gb3JtLkl0ZW0sIHsKICAgICAgbmFtZTogInVubG9ja1ZpcCIsCiAgICAgIG5vU3R5bGU6IHRydWUKICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGFudGQuU3dpdGNoLCBudWxsKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KCJzcGFuIiwgewogICAgICBzdHlsZTogewogICAgICAgIG1hcmdpbkxlZnQ6IDEwCiAgICAgIH0KICAgIH0sICJcdTUzRUZcdTg5QzJcdTc3MEJ2aXBcdTUzM0FcdTc2ODRcdTVFMTZcdTVCNTBcdTUzQ0FcdTg5QzZcdTk4OTEiKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGFudGQuRm9ybS5JdGVtLCB7CiAgICAgIGxhYmVsOiAiXHU4OUUzXHU5NTAxXHU2NTM2XHU4RDM5XHU4OUM2XHU5ODkxIgogICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoYW50ZC5Gb3JtLkl0ZW0sIHsKICAgICAgbmFtZTogInVubG9ja0J1eSIsCiAgICAgIG5vU3R5bGU6IHRydWUKICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGFudGQuU3dpdGNoLCBudWxsKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KCJzcGFuIiwgewogICAgICBzdHlsZTogewogICAgICAgIG1hcmdpbkxlZnQ6IDEwCiAgICAgIH0KICAgIH0sICJcdTUzRUZcdTg5QzJcdTc3MEJcdTk3MDBcdTg5ODFcdThEMkRcdTRFNzBcdTc2ODRcdTg5QzZcdTk4OTEiKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGFudGQuRm9ybS5JdGVtLCB7CiAgICAgIGxhYmVsOiAiXHU2NzBEXHU1MkExXHU1NzMwXHU1NzQwIgogICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoYW50ZC5Gb3JtLkl0ZW0sIHsKICAgICAgbmFtZTogImhvc3QiLAogICAgICBub1N0eWxlOiB0cnVlLAogICAgICBydWxlczogW3sKICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICBtZXNzYWdlOiAi6K+36L6T5YWl5pyN5Yqh5Zmo5Zyw5Z2AIgogICAgICB9XQogICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoYW50ZC5JbnB1dCwgbnVsbCkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudCgiZGl2IiwgewogICAgICBzdHlsZTogewogICAgICAgIGNvbG9yOiAicmVkIiwKICAgICAgICBtYXJnaW5Ub3A6IDUKICAgICAgfQogICAgfSwgIlx1NjcwRFx1NTJBMVx1NTY2OFx1NTczMFx1NTc0MFx1NEUwRFx1NUI5QVx1NjVGNlx1NjZGNFx1NjM2MiIpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudCgiZGl2IiwgbnVsbCwgIlx1OEJGN1x1OEJBMlx1OTYwNVRHXHU5ODkxXHU5MDUzOkBzdmlwX25hdlx1ODNCN1x1NTNENlx1NjcwMFx1NjVCMFx1NTczMFx1NTc0MCIpKSkpOwogIH07CgogIGNsYXNzIFBsdWdpblN0b3JlIHsKICAgIHN0YXRpYyBnZXQoa2V5LCBkZWZhdWx0VmFsdWUpIHsKICAgICAgY29uc3QgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpOwogICAgICBpZiAodmFsdWUgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAibnVtYmVyIikgewogICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSk7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICJib29sZWFuIikgewogICAgICAgIHJldHVybiB2YWx1ZSA9PT0gInRydWUiOwogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICAgIHN0YXRpYyBzZXQoa2V5LCB2YWx1ZSkgewogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlLnRvU3RyaW5nKCkpOwogICAgfQogIH0KCiAgY29uc3QgQXBwID0gKCkgPT4gewogICAgY29uc3QgW2lzTW9kYWxPcGVuLCBzZXRJc01vZGFsT3Blbl0gPSBSZWFjdCQxLnVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IFtmb3JtSW5zdGFuY2UsIHNldEZvcm1JbnN0YW5jZV0gPSBSZWFjdCQxLnVzZVN0YXRlKCk7CiAgICBjb25zdCBzaG93TW9kYWwgPSAoKSA9PiB7CiAgICAgIHNldElzTW9kYWxPcGVuKHRydWUpOwogICAgfTsKICAgIGNvbnN0IGhhbmRsZU9rID0gYXN5bmMgKCkgPT4gewogICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCBmb3JtSW5zdGFuY2U/LnZhbGlkYXRlRmllbGRzKCk7CiAgICAgIG9uQ3JlYXRlKHZhbHVlcyk7CiAgICAgIHNldElzTW9kYWxPcGVuKGZhbHNlKTsKICAgIH07CiAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7CiAgICAgIHNldElzTW9kYWxPcGVuKGZhbHNlKTsKICAgIH07CiAgICBjb25zdCBvbkNyZWF0ZSA9IHZhbHVlcyA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJSZWNlaXZlZCB2YWx1ZXMgb2YgZm9ybTogIiwgdmFsdWVzKTsKICAgICAgUGx1Z2luU3RvcmUuc2V0KCJyZW1vdmVBZHMiLCB2YWx1ZXMucmVtb3ZlQWRzKTsKICAgICAgUGx1Z2luU3RvcmUuc2V0KCJyZW1vdmVUb3BzIiwgdmFsdWVzLnJlbW92ZVRvcHMpOwogICAgICBQbHVnaW5TdG9yZS5zZXQoInVubG9ja1ZpcCIsIHZhbHVlcy51bmxvY2tWaXApOwogICAgICBQbHVnaW5TdG9yZS5zZXQoInVubG9ja0J1eSIsIHZhbHVlcy51bmxvY2tCdXkpOwogICAgICBQbHVnaW5TdG9yZS5zZXQoInZpZXdCYW5Vc2VyIiwgdmFsdWVzLnZpZXdCYW5Vc2VyKTsKICAgICAgUGx1Z2luU3RvcmUuc2V0KCJob3N0IiwgdmFsdWVzLmhvc3QpOwogICAgfTsKICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHRbImRlZmF1bHQiXS5jcmVhdGVFbGVtZW50KFJlYWN0X19kZWZhdWx0WyJkZWZhdWx0Il0uRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdFsiZGVmYXVsdCJdLmNyZWF0ZUVsZW1lbnQoYW50ZC5GbG9hdEJ1dHRvbiwgewogICAgICB0eXBlOiAicHJpbWFyeSIsCiAgICAgIHRvb2x0aXA6ICJcdTZENzdcdTg5RDJWSVBcdThCQkVcdTdGNkUiLAogICAgICBzdHlsZTogewogICAgICAgIGxlZnQ6IDE2CiAgICAgIH0sCiAgICAgIGljb246IC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdFsiZGVmYXVsdCJdLmNyZWF0ZUVsZW1lbnQoaWNvbnMuU2V0dGluZ091dGxpbmVkLCBudWxsKSwKICAgICAgb25DbGljazogc2hvd01vZGFsCiAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0WyJkZWZhdWx0Il0uY3JlYXRlRWxlbWVudChhbnRkLk1vZGFsLCB7CiAgICAgIHRpdGxlOiAiXHU4QkJFXHU3RjZFIiwKICAgICAgb3BlbjogaXNNb2RhbE9wZW4sCiAgICAgIG9uT2s6IGhhbmRsZU9rLAogICAgICBvbkNhbmNlbDogaGFuZGxlQ2FuY2VsLAogICAgICBkZXN0cm95T25DbG9zZTogdHJ1ZSwKICAgICAgb2tCdXR0b25Qcm9wczogewogICAgICAgIGF1dG9Gb2N1czogdHJ1ZQogICAgICB9CiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHRbImRlZmF1bHQiXS5jcmVhdGVFbGVtZW50KFNldHRpbmdzLCB7CiAgICAgIGluaXRpYWxTZXR0aW5nczogewogICAgICAgIHJlbW92ZUFkczogUGx1Z2luU3RvcmUuZ2V0KCJyZW1vdmVBZHMiLCB0cnVlKSwKICAgICAgICByZW1vdmVUb3BzOiBQbHVnaW5TdG9yZS5nZXQoInJlbW92ZVRvcHMiLCB0cnVlKSwKICAgICAgICB2aWV3QmFuVXNlcjogUGx1Z2luU3RvcmUuZ2V0KCJ2aWV3QmFuVXNlciIsIHRydWUpLAogICAgICAgIHVubG9ja1ZpcDogUGx1Z2luU3RvcmUuZ2V0KCJ1bmxvY2tWaXAiLCB0cnVlKSwKICAgICAgICB1bmxvY2tCdXk6IFBsdWdpblN0b3JlLmdldCgidW5sb2NrQnV5IiwgdHJ1ZSksCiAgICAgICAgaG9zdDogUGx1Z2luU3RvcmUuZ2V0KCJob3N0IiwgImh0dHBzOi8vaGFpamlhby5rdS1jbG91ZC5jb20iKQogICAgICB9LAogICAgICBvbkZvcm1JbnN0YW5jZVJlYWR5OiBpbnN0YW5jZSA9PiB7CiAgICAgICAgc2V0Rm9ybUluc3RhbmNlKGluc3RhbmNlKTsKICAgICAgfQogICAgfSkpKTsKICB9OwoKICAvKioKICAgKiDoh6rlrprkuYnmi6bmiKrlmagKICAgKi8KICBjbGFzcyBJbnRlcmNlcHRvciB7CiAgICAvLyBheGlvc+aooeWdlwoKICAgIGNvbnN0cnVjdG9yKGF4aW9zKSB7CiAgICAgIHRoaXMuYXhpb3MgPSBheGlvczsKICAgIH0KCiAgICAvKioKICAgICAqIOWIneWni+WMluivt+axguaLpuaIquWZqAogICAgICovCiAgICBpbml0UmVxdWVzdEludGVyY2VwdG9yKCkgewogICAgICB0aGlzLmF4aW9zLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSh0aGlzLnJlcXVlc3RJbnRlcmNlcHRvci5iaW5kKHRoaXMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIOWIneWni+WMlui/lOWbnuivt+axguaLpuaIquWZqAogICAgICovCiAgICBpbml0UmVzcG9uc2VJbnRlcmNlcHRvcigpIHsKICAgICAgaWYgKHRoaXMuYXhpb3MuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmhhbmRsZXJzLmxlbmd0aCAhPSAxKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIC8vIOWboOS4uui/lOWbnuWkhOeQhuS8muWkhOeQhuaOiWNvbmZpZyzogIzmiJHku6zpnIDopoFjb25maWfkuK3nmoR1cmws5omA5Lul6ZyA6KaB5Zyo6L+U5Zue5aSE55CG5LmL5YmN5aSE55CGCiAgICAgIGlmICh0aGlzLmF4aW9zLmludGVyY2VwdG9ycy5yZXNwb25zZS5oYW5kbGVycz8uWzBdLmZ1bGZpbGxlZCkgewogICAgICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMuYXhpb3MuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmhhbmRsZXJzPy5bMF0uZnVsZmlsbGVkOwogICAgICAgIHRoaXMuYXhpb3MuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmhhbmRsZXJzWzBdLmZ1bGZpbGxlZCA9IGFzeW5jIHJlc3BvbnNlID0+IHsKICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBvcmlnaW4ocmVzcG9uc2UpOwogICAgICAgICAgcmVzcG9uc2UgPSB7CiAgICAgICAgICAgIGRhdGE6IGRhdGEsCiAgICAgICAgICAgIGNvbmZpZzogcmVzcG9uc2UuY29uZmlnCiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgICAgIH07CiAgICAgIH0KICAgICAgdGhpcy5heGlvcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKHRoaXMucmVzcG9uc2VEZWNvZGVJbnRlcmNlcHRvci5iaW5kKHRoaXMpKTsKICAgICAgdGhpcy5heGlvcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKHRoaXMucmVzcG9uc2VJbnRlcmNlcHRvci5iaW5kKHRoaXMpKTsKICAgICAgdGhpcy5heGlvcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKHRoaXMucmVzcG9uc2VFbmNvZGVJbnRlcmNlcHRvci5iaW5kKHRoaXMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIOivt+axguaLpuaIquWZqAogICAgICogQHBhcmFtIHJlcXVlc3QKICAgICAqIEByZXR1cm5zCiAgICAgKi8KICAgIGFzeW5jIHJlcXVlc3RJbnRlcmNlcHRvcihyZXF1ZXN0KSB7CiAgICAgIHJlcXVlc3QgPSBhd2FpdCB0aGlzLnJlcXVlc3RVbmxvY2tCdXlJbnRlcmNlcHRvcihyZXF1ZXN0KTsKICAgICAgcmVxdWVzdCA9IGF3YWl0IHRoaXMucmVxdWVzdFVubG9ja0JhblVzZXJJbnRlcmNlcHRvcihyZXF1ZXN0KTsKICAgICAgcmVxdWVzdCA9IGF3YWl0IHRoaXMucmVxdWVzdFNlYXJjaEludGVyY2VwdG9yKHJlcXVlc3QpOwogICAgICByZXR1cm4gcmVxdWVzdDsKICAgIH0KCiAgICAvKioKICAgICAqIOino+mUgei0reS5sAogICAgICogQHBhcmFtIHJlcXVlc3QKICAgICAqIEByZXR1cm5zCiAgICAgKi8KICAgIGFzeW5jIHJlcXVlc3RVbmxvY2tCdXlJbnRlcmNlcHRvcihyZXF1ZXN0KSB7CiAgICAgIGlmIChQbHVnaW5TdG9yZS5nZXQoInVubG9ja0J1eSIsIGZhbHNlKSA9PT0gdHJ1ZSAmJiBQbHVnaW5TdG9yZS5nZXQoImhvc3QiLCAiIikubGVuZ3RoID4gMCkgewogICAgICAgIGlmICgvXC9hcGlcL2F0dGFjaG1lbnQvZy50ZXN0KHJlcXVlc3QudXJsKSB8fCAvdG9waWNcL1xkKy9nLnRlc3QocmVxdWVzdC51cmwpKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygi6L2s5Y+R6K+35rGCIiwgcmVxdWVzdC51cmwsIHJlcXVlc3QpOwogICAgICAgICAgdmFyIGhvc3QgPSBQbHVnaW5TdG9yZS5nZXQoImhvc3QiLCAiIik7CiAgICAgICAgICByZXF1ZXN0LmJhc2VVUkwgPSBob3N0OwogICAgICAgICAgcmVxdWVzdC5jcm9zc0RvbWFpbiA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXF1ZXN0OwogICAgfQoKICAgIC8qKgogICAgICog5p+l55yL6KKrYmFu55qE55So5oi35L+h5oGvCiAgICAgKiBAcGFyYW0gcmVxdWVzdAogICAgICovCiAgICBhc3luYyByZXF1ZXN0VW5sb2NrQmFuVXNlckludGVyY2VwdG9yKHJlcXVlc3QpIHsKICAgICAgaWYgKFBsdWdpblN0b3JlLmdldCgidW5sb2NrQmFuVXNlciIsIHRydWUpID09PSB0cnVlICYmIFBsdWdpblN0b3JlLmdldCgiaG9zdCIsICIiKS5sZW5ndGggPiAwKSB7CiAgICAgICAgaWYgKC9cL2FwaVwvdXNlclwvaW5mb1wvXGQrL2cudGVzdChyZXF1ZXN0LnVybCkgfHwgL1wvYXBpXC91c2VyXC9uZXdzXC9vdGhlcl9uZXdzX2xpc3QvZy50ZXN0KHJlcXVlc3QudXJsKSB8fCAvXC9hcGlcL3RvcGljXC9ub2RlXC90b3BpY3MvZy50ZXN0KHJlcXVlc3QudXJsKSAmJiByZXF1ZXN0LnVybC5pbmNsdWRlcygidXNlcklkIikpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCLmn6XnnIvooqtiYW7nmoTnlKjmiLfkv6Hmga8iLCByZXF1ZXN0LnVybCk7CiAgICAgICAgICB2YXIgaG9zdCA9IFBsdWdpblN0b3JlLmdldCgiaG9zdCIsICIiKTsKICAgICAgICAgIHJlcXVlc3QuYmFzZVVSTCA9IGhvc3Q7CiAgICAgICAgICByZXF1ZXN0LmNyb3NzRG9tYWluID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiDop6PplIHmkJzntKLlip/og70KICAgICAqIEBwYXJhbSByZXF1ZXN0CiAgICAgKi8KICAgIGFzeW5jIHJlcXVlc3RTZWFyY2hJbnRlcmNlcHRvcihyZXF1ZXN0KSB7CiAgICAgIGlmIChQbHVnaW5TdG9yZS5nZXQoInVubG9ja1NlYXJjaCIsIHRydWUpID09PSB0cnVlICYmIFBsdWdpblN0b3JlLmdldCgiaG9zdCIsICIiKS5sZW5ndGggPiAwKSB7CiAgICAgICAgaWYgKC9cL2FwaVwvdXNlclwvc2VhcmNoL2cudGVzdChyZXF1ZXN0LnVybCkpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCLmkJzntKIiLCByZXF1ZXN0LnVybCk7CiAgICAgICAgICB2YXIgaG9zdCA9IFBsdWdpblN0b3JlLmdldCgiaG9zdCIsICIiKTsKICAgICAgICAgIHJlcXVlc3QuYmFzZVVSTCA9IGhvc3Q7CiAgICAgICAgICByZXF1ZXN0LmNyb3NzRG9tYWluID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiDlr7nov5Tlm57mlbDmja7ov5vooYzop6PnoIEKICAgICAqIEBwYXJhbSByZXNwb25zZQogICAgICovCiAgICBhc3luYyByZXNwb25zZURlY29kZUludGVyY2VwdG9yKHJlc3BvbnNlKSB7CiAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXR1cyA9PT0gMjAwKSB7CiAgICAgICAgY29uc3Qgb3JpZ2luX3Jlc3BvbnNlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhLmRhdGEpKTsKICAgICAgICB2YXIgZW5jX2RhdGEgPSByZXNwb25zZS5kYXRhLmRhdGEuZGF0YTsKICAgICAgICBpZiAoZW5jX2RhdGEgJiYgdHlwZW9mIGVuY19kYXRhID09PSAic3RyaW5nIiAmJiBlbmNfZGF0YS5sZW5ndGggPiAwKSB7CiAgICAgICAgICBjb25zdCBCYXNlNjQgPSBnZXRNb2R1bGUoImU3NjIiKS5hOwogICAgICAgICAgZW5jX2RhdGEgPSBKU09OLnBhcnNlKEJhc2U2NC5kZWNvZGUoQmFzZTY0LmRlY29kZShCYXNlNjQuZGVjb2RlKGVuY19kYXRhKSkpKTsKICAgICAgICB9CiAgICAgICAgcmVzcG9uc2UgPSB7CiAgICAgICAgICBpdGVtOiBlbmNfZGF0YSwKICAgICAgICAgIHVybDogcmVzcG9uc2UuY29uZmlnLnVybCwKICAgICAgICAgIG1vYmlsZTogdHJ1ZSwKICAgICAgICAgIG9yaWdpbl9yZXNwb25zZTogb3JpZ2luX3Jlc3BvbnNlCiAgICAgICAgfTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyDlhYvpmobkuIDkuKrljp/lp4vor7fmsYIKICAgICAgICBjb25zdCBvcmlnaW5fcmVzcG9uc2UgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEpKTsKICAgICAgICBjb25zdCBpdGVtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhLmRhdGEpKTsKICAgICAgICByZXNwb25zZSA9IHsKICAgICAgICAgIGl0ZW06IGl0ZW0sCiAgICAgICAgICB1cmw6IHJlc3BvbnNlLmNvbmZpZy51cmwsCiAgICAgICAgICBtb2JpbGU6IGZhbHNlLAogICAgICAgICAgb3JpZ2luX3Jlc3BvbnNlOiBvcmlnaW5fcmVzcG9uc2UKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0KCiAgICAvKioKICAgICAqIOWvuXJlcG9uc2Xph43mlrDnvJbnoIEKICAgICAqIEBwYXJhbSByZXNwb25zZQogICAgICogQHJldHVybnMKICAgICAqLwogICAgYXN5bmMgcmVzcG9uc2VFbmNvZGVJbnRlcmNlcHRvcihyZXNwb25zZSkgewogICAgICBpZiAocmVzcG9uc2UubW9iaWxlID09PSB0cnVlKSB7CiAgICAgICAgdmFyIGRlYyA9IHJlc3BvbnNlLml0ZW07CiAgICAgICAgaWYgKHJlc3BvbnNlLm9yaWdpbl9yZXNwb25zZS5pc0VuY3J5cHRlZCA9PT0gdHJ1ZSkgewogICAgICAgICAgY29uc3QgQmFzZTY0ID0gZ2V0TW9kdWxlKCJlNzYyIikuYTsKICAgICAgICAgIGRlYyA9IEJhc2U2NC5lbmNvZGUoQmFzZTY0LmVuY29kZShCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLml0ZW0pKSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gewogICAgICAgICAgZGF0YTogewogICAgICAgICAgICAuLi5yZXNwb25zZS5vcmlnaW5fcmVzcG9uc2UsCiAgICAgICAgICAgIGRhdGE6IGRlYwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIC4uLnJlc3BvbnNlLm9yaWdpbl9yZXNwb25zZSwKICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLml0ZW0KICAgICAgICB9OwogICAgICB9CiAgICB9CiAgICBhc3luYyByZXNwb25zZUludGVyY2VwdG9yKHJlc3BvbnNlKSB7CiAgICAgIGNvbnN0IHVybCA9IHJlc3BvbnNlLnVybC50b0xvd2VyQ2FzZSgpOwogICAgICB2YXIgaXRlbSA9IHJlc3BvbnNlLml0ZW07CiAgICAgIGNvbnNvbGUubG9nKCLmi6bmiKrlmajov5Tlm57mlbDmja4iLCB1cmwsIGl0ZW0pOwogICAgICBpZiAoL15cL2FwaVwvdG9waWNcL1xkKy9nLnRlc3QodXJsKSAmJiBQbHVnaW5TdG9yZS5nZXQoInVubG9ja1ZpcCIsIHRydWUpID09PSB0cnVlKSB7CiAgICAgICAgaXRlbSA9IGF3YWl0IHRoaXMuZml4VG9waWMoaXRlbSk7CiAgICAgIH0KICAgICAgLy8g5Y675bm/5ZGKCiAgICAgIGVsc2UgaWYgKC9iYW5uZXJcL2Jhbm5lcl9saXN0L2cudGVzdCh1cmwpICYmIFBsdWdpblN0b3JlLmdldCgicmVtb3ZlQWRzIiwgdHJ1ZSkgPT09IHRydWUpIHsKICAgICAgICBpdGVtID0gYXdhaXQgdGhpcy5maXhBZHMoaXRlbSk7CiAgICAgIH0KICAgICAgLy8g5bGP6JS9572u6aG25biWCiAgICAgIGVsc2UgaWYgKC9eXC9hcGlcL3RvcGljXC9nbG9iYWxcL3RvcGljcy9nLnRlc3QodXJsKSAmJiBQbHVnaW5TdG9yZS5nZXQoInJlbW92ZVRvcHMiLCB0cnVlKSA9PT0gdHJ1ZSkgewogICAgICAgIGl0ZW0gPSBhd2FpdCB0aGlzLmZpeFRvcHMoaXRlbSk7CiAgICAgIH0KICAgICAgcmVzcG9uc2UuaXRlbSA9IGl0ZW07CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0KICAgIC8qKgogICAgICog5L+u5aSN5biW5a2Q5YaF5a65CiAgICAgKiBAcGFyYW0geyp9IGRhdGEKICAgICAqIEByZXR1cm5zCiAgICAgKi8KICAgIGFzeW5jIGZpeFRvcGljKGRhdGEpIHsKICAgICAgY29uc29sZS5sb2coIuS/ruWkjeW4luWtkOWGheWuuSIsIGRhdGEpOwogICAgICBpZiAoZGF0YS5ub2RlPy52aXBMaW1pdCA+IDApIHsKICAgICAgICBkYXRhLm5vZGUudmlwTGltaXQgPSAwOwogICAgICB9CiAgICAgIHZhciBjb250ZW50ID0gZGF0YS5jb250ZW50OwogICAgICBpZiAoY29udGVudCAmJiAhY29udGVudC5zdGFydHNXaXRoKCI8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+IikpIHsKICAgICAgICAvLyDliKDpmaTmjolbXeagh+etvgogICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1xb6KeG6aKRXF0vZywgIiIpOwogICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1xb5Zu+54mHXF0vZywgIiIpOwogICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL+atpOWkhOWGheWuueWUruS7t1xkK+mHkeW4gS4q6K+36LSt5Lmw5ZCO5p+l55yLLi9nLCAiIik7CiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvXFtzZWxsLipcL3NlbGxdL2csICIiKTsKICAgICAgICBkYXRhLmF0dGFjaG1lbnRzPy5mb3JFYWNoKGF0dGFjaG1lbnQgPT4gewogICAgICAgICAgdmFyIGhhc0ltYWdlLAogICAgICAgICAgICBoYXNWaWRlbyA9IGZhbHNlOwogICAgICAgICAgLy8g5aSE55CG5Zu+54mHCiAgICAgICAgICBpZiAoYXR0YWNobWVudC5jYXRlZ29yeSA9PT0gImltYWdlcyIgJiYgYXR0YWNobWVudC5yZW1vdGVVcmwpIHsKICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQgKz0gYDxwPjxpbWcgc3JjPSIke2F0dGFjaG1lbnQucmVtb3RlVXJsfSIgZGF0YS1pZD0iJHthdHRhY2htZW50LmlkfSIvPmA7CiAgICAgICAgICAgIGhhc0ltYWdlID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChoYXNJbWFnZSA9PT0gdHJ1ZSkgewogICAgICAgICAgICBjb250ZW50ID0gYDxwPiR7Y29udGVudH08L3A+YDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhdHRhY2htZW50LmNhdGVnb3J5ID09PSAidmlkZW8iKSB7CiAgICAgICAgICAgIC8vIGlmIChhdHRhY2htZW50LnJlbW90ZVVybCkgewogICAgICAgICAgICBoYXNWaWRlbyA9IHRydWU7CiAgICAgICAgICAgIGNvbnRlbnQgKz0gYDxwPjx2aWRlbyBzcmM9IiR7YXR0YWNobWVudC5yZW1vdGVVcmx9IiBkYXRhLWlkPSIke2F0dGFjaG1lbnQuaWR9Ij48L3ZpZGVvPjwvcD5gOwogICAgICAgICAgICAvLyB9IGVsc2UgewogICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCLop4bpopHpk77mjqXkuLrnqboiLCBhdHRhY2htZW50KTsKICAgICAgICAgICAgLy8gICBjb250ZW50ICs9IGA8cD48ZGl2IHN0eWxlPSJjb2xvcjpyZWQ7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaDsiPiR7YXR0YWNobWVudC5lcnJvcn08L2Rpdj48L3A+YDsKICAgICAgICAgICAgLy8gfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGhhc1ZpZGVvID09PSB0cnVlKSB7CiAgICAgICAgICAgIGNvbnRlbnQgPSBgPHA+JHtjb250ZW50fTwvcD5gOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGNvbnRlbnQgPSBgPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PiR7Y29udGVudH08L2JvZHk+PC9odG1sPmA7CiAgICAgIH0KICAgICAgZGF0YS5jb250ZW50ID0gY29udGVudDsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiDljrvlub/lkYoKICAgICAqIEBwYXJhbSBkYXRhCiAgICAgKi8KICAgIGFzeW5jIGZpeEFkcyhkYXRhKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgYXN5bmMgZml4VG9wcyhkYXRhKSB7CiAgICAgIHJldHVybiBbXTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGFkZFN0eWxlKCkgewogICAgbGV0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTsKICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoInJlbCIsICJzdHlsZXNoZWV0Iik7CiAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvY3NzIik7CiAgICBzY3JpcHQuaHJlZiA9ICJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2FudGRANS4xNi40L2Rpc3QvcmVzZXQubWluLmNzcyI7CiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKICB9CiAgZnVuY3Rpb24gYWRkQW5hbHl0aWNzKCkgewogICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICBzY3JpcHQuc3JjID0gImh0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL2d0YWcvanM/aWQ9Ry1OUTA4REg1TjNUIjsKICAgIHNjcmlwdC5hc3luYyA9IHRydWU7CiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7CiAgICBjb25zdCBzY3JpcHQyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICBzY3JpcHQyLmlubmVySFRNTCA9IGAKICAgICAgd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107CiAgICAgIGZ1bmN0aW9uIGd0YWcoKXtkYXRhTGF5ZXIucHVzaChhcmd1bWVudHMpO30KICAgICAgZ3RhZygnanMnLCBuZXcgRGF0ZSgpKTsKICAgICAgZ3RhZygnY29uZmlnJywgJ0ctTlEwOERINU4zVCcpOwogICAgYDsKICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0Mik7CiAgfQogIGZ1bmN0aW9uIHNldENvb2tpZShuYW1lLCB2YWx1ZSkgewogICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArICI9IiArIHZhbHVlICsgIjtwYXRoPS87ZXhwaXJlcz0iICsgbmV3IERhdGUoRGF0ZS5ub3coKSArIDg2NGU1KS50b1VUQ1N0cmluZygpICsgIjsiOwogIH0KCiAgZnVuY3Rpb24gaW5pdGlhbGVkKHZ1ZSwgc3RvcmUsIGF4aW9zKSB7CiAgICBjb25zdCBpbnRlcmNlcHRvciA9IG5ldyBJbnRlcmNlcHRvcihheGlvcyk7CiAgICBpbnRlcmNlcHRvci5pbml0UmVxdWVzdEludGVyY2VwdG9yKCk7CiAgICBpbnRlcmNlcHRvci5pbml0UmVzcG9uc2VJbnRlcmNlcHRvcigpOwogIH0KICBmdW5jdGlvbiBpbml0U2V0dGluZygpIHsKICAgIGNvbnN0IG15QnV0dG9uID0gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0WyJkZWZhdWx0Il0uY3JlYXRlRWxlbWVudChBcHAsIG51bGwpOwogICAgY29uc3QgcGx1Z2luRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBwbHVnaW5EaXYuaWQgPSAiaGFpamlhby12aXAtcGx1Z2luIjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocGx1Z2luRGl2KTsKICAgIFJlYWN0RE9NX19kZWZhdWx0WyJkZWZhdWx0Il0ucmVuZGVyKG15QnV0dG9uLCBwbHVnaW5EaXYpOwogIH0KICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCJwYWdlT3BlbiIsICIxIik7CiAgYWRkQW5hbHl0aWNzKCk7CiAgaWYgKC9oamN4Lm9yZy8udGVzdCh3aW5kb3cubG9jYXRpb24uaHJlZikpIHsKICAgIHNldENvb2tpZSgiaXNfdmlwIiwgIjEiKTsKICB9IGVsc2UgewogICAgYWRkU3R5bGUoKTsKICAgIGluaXRTZXR0aW5nKCk7CiAgICBpbml0SG9va1dlYnBhY2soaW5pdGlhbGVkKTsKICB9CiAgY29uc29sZS5sb2coImhhaWppYW8tdmlwLXBsdWdpbiBpbml0IHN1Y2Nlc3MiKTsKCn0pKFJlYWN0LCBSZWFjdERPTSwgYW50ZCwgaWNvbnMpOwo=
Add Comment
Please, Sign In to add comment