3NAxHUEaM6RAG7rVDPL9L6DFZWkrqFtY98t · data · 2.7c767379.chunk.js?4?2?3
{
    "2.7c767379.chunk.js?4?2?3": "base64:KXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBlZigpe3JldHVybihlZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHRmKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gcmYoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1aYyh0KSYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBuZihlKXtyZXR1cm4obmY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIG9mKGUsdCl7cmV0dXJuKG9mPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX12YXIgYWYsc2YsdWYsY2Y9ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbyxhPU1hdGgubWluKE1hdGguYWJzKHIpLzIsTWF0aC5hYnMobikvMikscz1uPj0wPzE6LTEsdT1yPj0wPzE6LTEsYz1uPj0wJiZyPj0wfHxuPDAmJnI8MD8xOjA7aWYoYT4wJiZpIGluc3RhbmNlb2YgQXJyYXkpe2Zvcih2YXIgZj1bXSxsPTA7bDw0O2wrKylmW2xdPWlbbF0+YT9hOmlbbF07bz0iTSIuY29uY2F0KGUsIiwiKS5jb25jYXQodCtzKmZbMF0pLGZbMF0+MCYmKG8rPSJBICIuY29uY2F0KGZbMF0sIiwiKS5jb25jYXQoZlswXSwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3UqZlswXSwiLCIpLmNvbmNhdCh0KSksbys9IkwgIi5jb25jYXQoZStyLXUqZlsxXSwiLCIpLmNvbmNhdCh0KSxmWzFdPjAmJihvKz0iQSAiLmNvbmNhdChmWzFdLCIsIikuY29uY2F0KGZbMV0sIiwwLDAsIikuY29uY2F0KGMsIixcbiAgICAgICAgIikuY29uY2F0KGUrciwiLCIpLmNvbmNhdCh0K3MqZlsxXSkpLG8rPSJMICIuY29uY2F0KGUrciwiLCIpLmNvbmNhdCh0K24tcypmWzJdKSxmWzJdPjAmJihvKz0iQSAiLmNvbmNhdChmWzJdLCIsIikuY29uY2F0KGZbMl0sIiwwLDAsIikuY29uY2F0KGMsIixcbiAgICAgICAgIikuY29uY2F0KGUrci11KmZbMl0sIiwiKS5jb25jYXQodCtuKSksbys9IkwgIi5jb25jYXQoZSt1KmZbM10sIiwiKS5jb25jYXQodCtuKSxmWzNdPjAmJihvKz0iQSAiLmNvbmNhdChmWzNdLCIsIikuY29uY2F0KGZbM10sIiwwLDAsIikuY29uY2F0KGMsIixcbiAgICAgICAgIikuY29uY2F0KGUsIiwiKS5jb25jYXQodCtuLXMqZlszXSkpLG8rPSJaIn1lbHNlIGlmKGE+MCYmaT09PStpJiZpPjApe3ZhciBoPU1hdGgubWluKGEsaSk7bz0iTSAiLmNvbmNhdChlLCIsIikuY29uY2F0KHQrcypoLCJcbiAgICAgICAgICAgIEEgIikuY29uY2F0KGgsIiwiKS5jb25jYXQoaCwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3UqaCwiLCIpLmNvbmNhdCh0LCJcbiAgICAgICAgICAgIEwgIikuY29uY2F0KGUrci11KmgsIiwiKS5jb25jYXQodCwiXG4gICAgICAgICAgICBBICIpLmNvbmNhdChoLCIsIikuY29uY2F0KGgsIiwwLDAsIikuY29uY2F0KGMsIiwiKS5jb25jYXQoZStyLCIsIikuY29uY2F0KHQrcypoLCJcbiAgICAgICAgICAgIEwgIikuY29uY2F0KGUrciwiLCIpLmNvbmNhdCh0K24tcypoLCJcbiAgICAgICAgICAgIEEgIikuY29uY2F0KGgsIiwiKS5jb25jYXQoaCwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3ItdSpoLCIsIikuY29uY2F0KHQrbiwiXG4gICAgICAgICAgICBMICIpLmNvbmNhdChlK3UqaCwiLCIpLmNvbmNhdCh0K24sIlxuICAgICAgICAgICAgQSAiKS5jb25jYXQoaCwiLCIpLmNvbmNhdChoLCIsMCwwLCIpLmNvbmNhdChjLCIsIikuY29uY2F0KGUsIiwiKS5jb25jYXQodCtuLXMqaCwiIFoiKX1lbHNlIG89Ik0gIi5jb25jYXQoZSwiLCIpLmNvbmNhdCh0LCIgaCAiKS5jb25jYXQociwiIHYgIikuY29uY2F0KG4sIiBoICIpLmNvbmNhdCgtciwiIFoiKTtyZXR1cm4gb30sZmY9SygoUWM9WGM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLHI7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspaVtvXT1hcmd1bWVudHNbb107cmV0dXJuKHI9cmYodGhpcywoZT1uZih0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSkuc3RhdGU9e3RvdGFsTGVuZ3RoOi0xfSxyfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJm9mKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlJiZ0aGlzLm5vZGUuZ2V0VG90YWxMZW5ndGgpdHJ5e3ZhciBlPXRoaXMubm9kZS5nZXRUb3RhbExlbmd0aCgpO2UmJnRoaXMuc2V0U3RhdGUoe3RvdGFsTGVuZ3RoOmV9KX1jYXRjaCh0KXt9fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLHI9dC54LG49dC55LGk9dC53aWR0aCxvPXQuaGVpZ2h0LGE9dC5yYWRpdXMscz10LmNsYXNzTmFtZSx1PXRoaXMuc3RhdGUudG90YWxMZW5ndGgsYz10aGlzLnByb3BzLGY9Yy5hbmltYXRpb25FYXNpbmcsbD1jLmFuaW1hdGlvbkR1cmF0aW9uLGg9Yy5hbmltYXRpb25CZWdpbixwPWMuaXNBbmltYXRpb25BY3RpdmUsZD1jLmlzVXBkYXRlQW5pbWF0aW9uQWN0aXZlO2lmKHIhPT0rcnx8biE9PStufHxpIT09K2l8fG8hPT0rb3x8MD09PWl8fDA9PT1vKXJldHVybiBudWxsO3ZhciB5PV8oKSgicmVjaGFydHMtcmVjdGFuZ2xlIixzKTtyZXR1cm4gZD9nLmEuY3JlYXRlRWxlbWVudCgkYyx7Y2FuQmVnaW46dT4wLGZyb206e3dpZHRoOmksaGVpZ2h0Om8seDpyLHk6bn0sdG86e3dpZHRoOmksaGVpZ2h0Om8seDpyLHk6bn0sZHVyYXRpb246bCxhbmltYXRpb25FYXNpbmc6Zixpc0FjdGl2ZTpkfSxmdW5jdGlvbih0KXt2YXIgcj10LndpZHRoLG49dC5oZWlnaHQsaT10Lngsbz10Lnk7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KCRjLHtjYW5CZWdpbjp1PjAsZnJvbToiMHB4ICIuY29uY2F0KC0xPT09dT8xOnUsInB4IiksdG86IiIuY29uY2F0KHUsInB4IDBweCIpLGF0dHJpYnV0ZU5hbWU6InN0cm9rZURhc2hhcnJheSIsYmVnaW46aCxkdXJhdGlvbjpsLGlzQWN0aXZlOnAsZWFzaW5nOmZ9LGcuYS5jcmVhdGVFbGVtZW50KCJwYXRoIixlZih7fSxlZShlLnByb3BzKSxyZShlLnByb3BzKSx7Y2xhc3NOYW1lOnksZDpjZihpLG8scixuLGEpLHJlZjpmdW5jdGlvbih0KXtlLm5vZGU9dH19KSkpfSk6Zy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLGVmKHt9LGVlKHRoaXMucHJvcHMpLHJlKHRoaXMucHJvcHMpLHtjbGFzc05hbWU6eSxkOmNmKHIsbixpLG8sYSl9KSl9fV0pJiZ0ZihyLnByb3RvdHlwZSxuKSxpJiZ0ZihyLGkpLHR9KCksWGMuZGlzcGxheU5hbWU9IlJlY3RhbmdsZSIsWGMucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe0pjKGUsdCxyW3RdKX0pfXJldHVybiBlfSh7fSxILFcse2NsYXNzTmFtZTptLmEuc3RyaW5nLHg6bS5hLm51bWJlcix5Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcixyYWRpdXM6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuYXJyYXldKSxpc0FuaW1hdGlvbkFjdGl2ZTptLmEuYm9vbCxpc1VwZGF0ZUFuaW1hdGlvbkFjdGl2ZTptLmEuYm9vbCxhbmltYXRpb25CZWdpbjptLmEubnVtYmVyLGFuaW1hdGlvbkR1cmF0aW9uOm0uYS5udW1iZXIsYW5pbWF0aW9uRWFzaW5nOm0uYS5vbmVPZihbImVhc2UiLCJlYXNlLWluIiwiZWFzZS1vdXQiLCJlYXNlLWluLW91dCIsImxpbmVhciJdKX0pLFhjLmRlZmF1bHRQcm9wcz17eDowLHk6MCx3aWR0aDowLGhlaWdodDowLHJhZGl1czowLGlzQW5pbWF0aW9uQWN0aXZlOiExLGlzVXBkYXRlQW5pbWF0aW9uQWN0aXZlOiExLGFuaW1hdGlvbkJlZ2luOjAsYW5pbWF0aW9uRHVyYXRpb246MTUwMCxhbmltYXRpb25FYXNpbmc6ImVhc2UifSxZYz1RYykpfHxZYztmdW5jdGlvbiBsZihlKXtyZXR1cm4obGY9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBoZigpe3JldHVybihoZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHBmKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RmKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIGRmKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiB5ZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIGdmKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09bGYodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gdmYoZSl7cmV0dXJuKHZmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBtZihlLHQpe3JldHVybihtZj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIGJmPUsoKHVmPXNmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSxnZih0aGlzLHZmKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmbWYoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LGk9W3trZXk6InJlbmRlclJlY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcuYS5pc1ZhbGlkRWxlbWVudChlKT9nLmEuY2xvbmVFbGVtZW50KGUsdCk6dSgpKGUpP2UodCk6Zy5hLmNyZWF0ZUVsZW1lbnQoZmYsaGYoe30sdCx7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1yZWZlcmVuY2UtYXJlYS1yZWN0In0pKX19XSwobj1be2tleToiZ2V0UmVjdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9dGhpcy5wcm9wcyxvPWkueDEsYT1pLngyLHM9aS55MSx1PWkueTIsYz1pLnhBeGlzLGY9aS55QXhpcyxsPWh1LmNyZWF0ZSh7eDpjLnNjYWxlLHk6Zi5zY2FsZX0pLGg9e3g6ZT9sLnguYXBwbHkobyk6bC54LnJhbmdlTWluLHk6cj9sLnkuYXBwbHkocyk6bC55LnJhbmdlTWlufSxwPXt4OnQ/bC54LmFwcGx5KGEpOmwueC5yYW5nZU1heCx5Om4/bC55LmFwcGx5KHUpOmwueS5yYW5nZU1heH07cmV0dXJuIVZsKHRoaXMucHJvcHMsImRpc2NhcmQiKXx8bC5pc0luUmFuZ2UoaCkmJmwuaXNJblJhbmdlKHApP3N1KGgscCk6bnVsbH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS54MSxyPWUueDIsbj1lLnkxLGk9ZS55MixvPWUuY2xhc3NOYW1lLGE9KGUuYWx3YXlzU2hvdyxlLmNsaXBQYXRoSWQpLHM9Qih0KSx1PUIociksYz1CKG4pLGY9QihpKTtpZighcyYmIXUmJiFjJiYhZilyZXR1cm4gbnVsbDt2YXIgbD10aGlzLmdldFJlY3Qocyx1LGMsZik7aWYoIWwpcmV0dXJuIG51bGw7dmFyIGg9dGhpcy5wcm9wcy5zaGFwZSxwPVZsKHRoaXMucHJvcHMsImhpZGRlbiIpPyJ1cmwoIyIuY29uY2F0KGEsIikiKTp2b2lkIDA7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6XygpKCJyZWNoYXJ0cy1yZWZlcmVuY2UtYXJlYSIsbyl9LHRoaXMuY29uc3RydWN0b3IucmVuZGVyUmVjdChoLHBmKHtjbGlwUGF0aDpwfSx0aGlzLnByb3BzLGwpKSxnaC5yZW5kZXJDYWxsQnlQYXJlbnQodGhpcy5wcm9wcyxsKSl9fV0pJiZ5ZihyLnByb3RvdHlwZSxuKSxpJiZ5ZihyLGkpLHR9KCksc2YuZGlzcGxheU5hbWU9IlJlZmVyZW5jZUFyZWEiLHNmLnByb3BUeXBlcz1wZih7fSxILHt2aWV3Qm94Om0uYS5zaGFwZSh7eDptLmEubnVtYmVyLHk6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLGhlaWdodDptLmEubnVtYmVyfSkseEF4aXM6bS5hLm9iamVjdCx5QXhpczptLmEub2JqZWN0LGlzRnJvbnQ6bS5hLmJvb2wsYWx3YXlzU2hvdzptLmEuYm9vbCxpZk92ZXJmbG93Om0uYS5vbmVPZihbImhpZGRlbiIsInZpc2libGUiLCJkaXNjYXJkIiwiZXh0ZW5kRG9tYWluIl0pLHgxOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHgyOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHkxOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHkyOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLGNsYXNzTmFtZTptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5zdHJpbmddKSx5QXhpc0lkOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLHhBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSksc2hhcGU6bS5hLm9uZU9mVHlwZShbbS5hLmZ1bmMsbS5hLmVsZW1lbnRdKX0pLHNmLmRlZmF1bHRQcm9wcz17aXNGcm9udDohMSxpZk92ZXJmbG93OiJkaXNjYXJkIix4QXhpc0lkOjAseUF4aXNJZDowLHI6MTAsZmlsbDoiI2NjYyIsZmlsbE9wYWNpdHk6LjUsc3Ryb2tlOiJub25lIixzdHJva2VXaWR0aDoxfSxhZj11ZikpfHxhZjtmdW5jdGlvbiBfZihlKXtyZXR1cm4oX2Y9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBTZigpe3JldHVybihTZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEVmKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsaT0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChhLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2godSl7aT0hMCxvPXV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiB3ZihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9e30sbz1PYmplY3Qua2V5cyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fChpW3JdPWVbcl0pO3JldHVybiBpfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmKGlbcl09ZVtyXSl9cmV0dXJuIGl9ZnVuY3Rpb24gVGYoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBBZihlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PV9mKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIENmKGUpe3JldHVybihDZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24geGYoZSx0KXtyZXR1cm4oeGY9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBJZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksQWYodGhpcyxDZih0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJnhmKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToicmVuZGVyRXJyb3JCYXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm9mZnNldCxyPWUubGF5b3V0LG49ZS53aWR0aCxpPWUuZGF0YUtleSxvPWUuZGF0YSxhPWUuZGF0YVBvaW50Rm9ybWF0dGVyLHM9ZS54QXhpcyx1PWUueUF4aXMsYz13ZihlLFsib2Zmc2V0IiwibGF5b3V0Iiwid2lkdGgiLCJkYXRhS2V5IiwiZGF0YSIsImRhdGFQb2ludEZvcm1hdHRlciIsInhBeGlzIiwieUF4aXMiXSksZj1lZShjKTtyZXR1cm4gby5tYXAoZnVuY3Rpb24oZSxvKXt2YXIgYyxsLGgscCxkLHksdixtLGIsXyxTLEUsdz1hKGUsaSksVD13LngsQT13LnksQz13LnZhbHVlLHg9dy5lcnJvclZhbDtpZigheClyZXR1cm4gbnVsbDtpZihBcnJheS5pc0FycmF5KHgpKXt2YXIgST1FZih4LDIpO1M9SVswXSxFPUlbMV19ZWxzZSBTPUU9eDtyZXR1cm4idmVydGljYWwiPT09cj8odj1zLnNjYWxlLGw9QSt0LGg9digoYz1DKS1TKSxwPWwrbixtPXt4MTpkPXYoYytFKSx5MTpwLHgyOmQseTI6eT1sLW59LGI9e3gxOmgseTE6bCx4MjpkLHkyOmx9LF89e3gxOmgseTE6cCx4MjpoLHkyOnl9KToiaG9yaXpvbnRhbCI9PT1yJiYodj11LnNjYWxlLGg9KGM9VCt0KS1uLGQ9YytuLHA9digobD1DKS1TKSxtPXt4MTpoLHkxOnk9dihsK0UpLHgyOmQseTI6eX0sYj17eDE6Yyx5MTpwLHgyOmMseTI6eX0sXz17eDE6aCx5MTpwLHgyOmQseTI6cH0pLGcuYS5jcmVhdGVFbGVtZW50KHpzLFNmKHtjbGFzc05hbWU6InJlY2hhcnRzLWVycm9yQmFyIixrZXk6ImJhci0iLmNvbmNhdChvKX0sZiksZy5hLmNyZWF0ZUVsZW1lbnQoImxpbmUiLG0pLGcuYS5jcmVhdGVFbGVtZW50KCJsaW5lIixiKSxnLmEuY3JlYXRlRWxlbWVudCgibGluZSIsXykpfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6InJlY2hhcnRzLWVycm9yQmFycyJ9LHRoaXMucmVuZGVyRXJyb3JCYXJzKCkpfX1dKSYmVGYoci5wcm90b3R5cGUsbiksaSYmVGYocixpKSx0fSgpO0lmLnByb3BUeXBlcz17ZGF0YUtleTptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXIsbS5hLmZ1bmNdKS5pc1JlcXVpcmVkLGRhdGE6bS5hLmFycmF5LHhBeGlzOm0uYS5vYmplY3QseUF4aXM6bS5hLm9iamVjdCxsYXlvdXQ6bS5hLnN0cmluZyxkYXRhUG9pbnRGb3JtYXR0ZXI6bS5hLmZ1bmMsc3Ryb2tlOm0uYS5zdHJpbmcsc3Ryb2tlV2lkdGg6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLG9mZnNldDptLmEubnVtYmVyfSxJZi5kZWZhdWx0UHJvcHM9e3N0cm9rZToiYmxhY2siLHN0cm9rZVdpZHRoOjEuNSx3aWR0aDo1LG9mZnNldDowLGxheW91dDoiaG9yaXpvbnRhbCJ9O3ZhciBrZj1JZixPZj1yKDEyNCksTmY9ci5uKE9mKTtmdW5jdGlvbiBQZigpe3JldHVybihQZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFJmKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT17fSxvPU9iamVjdC5rZXlzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8KGlbcl09ZVtyXSk7cmV0dXJuIGl9KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYoaVtyXT1lW3JdKX1yZXR1cm4gaX12YXIgQmY9e3dpZHRoOm0uYS5udW1iZXIuaXNSZXF1aXJlZCxoZWlnaHQ6bS5hLm51bWJlci5pc1JlcXVpcmVkLHZpZXdCb3g6bS5hLnNoYXBlKHt4Om0uYS5udW1iZXIseTptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXJ9KSxjbGFzc05hbWU6bS5hLnN0cmluZyxzdHlsZTptLmEub2JqZWN0LGNoaWxkcmVuOm0uYS5vbmVPZlR5cGUoW20uYS5hcnJheU9mKG0uYS5ub2RlKSxtLmEubm9kZV0pfTtmdW5jdGlvbiBNZihlKXt2YXIgdD1lLmNoaWxkcmVuLHI9ZS53aWR0aCxuPWUuaGVpZ2h0LGk9ZS52aWV3Qm94LG89ZS5jbGFzc05hbWUsYT1lLnN0eWxlLHM9UmYoZSxbImNoaWxkcmVuIiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiY2xhc3NOYW1lIiwic3R5bGUiXSksdT1pfHx7d2lkdGg6cixoZWlnaHQ6bix4OjAseTowfSxjPV8oKSgicmVjaGFydHMtc3VyZmFjZSIsbyksZj1lZShzKTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoInN2ZyIsUGYoe30sZix7Y2xhc3NOYW1lOmMsd2lkdGg6cixoZWlnaHQ6bixzdHlsZTphLHZpZXdCb3g6IiIuY29uY2F0KHUueCwiICIpLmNvbmNhdCh1LnksIiAiKS5jb25jYXQodS53aWR0aCwiICIpLmNvbmNhdCh1LmhlaWdodCksdmVyc2lvbjoiMS4xIn0pLHQpfU1mLnByb3BUeXBlcz1CZjt2YXIgTGYsRGYsamYsVWY9TWY7ZnVuY3Rpb24gRmYoZSl7cmV0dXJuKEZmPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gVmYoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHFmKCl7cmV0dXJuKHFmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gS2YoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB6ZihlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PUZmKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIEdmKGUpe3JldHVybihHZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gSGYoZSx0KXtyZXR1cm4oSGY9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBXZixZZixYZixRZj17c3ltYm9sQ2lyY2xlOldhLHN5bWJvbENyb3NzOllhLHN5bWJvbERpYW1vbmQ6JGEsc3ltYm9sU3F1YXJlOnJzLHN5bWJvbFN0YXI6dHMsc3ltYm9sVHJpYW5nbGU6aXMsc3ltYm9sV3llOnVzfSwkZj1NYXRoLlBJLzE4MCxaZj1LKChqZj1EZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksemYodGhpcyxHZih0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJkhmKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToiZ2V0UGF0aCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zaXplLHI9ZS5zaXplVHlwZSxuPWUudHlwZSxpPWZ1bmN0aW9uKGUpe3ZhciB0PSJzeW1ib2wiLmNvbmNhdChlLnNsaWNlKDAsMSkudG9VcHBlckNhc2UoKSkuY29uY2F0KGUuc2xpY2UoMSkpO3JldHVybiBRZlt0XXx8V2F9KG4pO3JldHVybiBmdW5jdGlvbigpe3ZhciBlPUJhKFdhKSx0PUJhKDY0KSxyPW51bGw7ZnVuY3Rpb24gbigpe3ZhciBuO2lmKHJ8fChyPW49UmEoKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksbilyZXR1cm4gcj1udWxsLG4rIiJ8fG51bGx9cmV0dXJuIG4udHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT09dHlwZW9mIHQ/dDpCYSh0KSxuKTplfSxuLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09PXR5cGVvZiBlP2U6QmEoK2UpLG4pOnR9LG4uY29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1lP251bGw6ZSxuKTpyfSxufSgpLnR5cGUoaSkuc2l6ZShmdW5jdGlvbihlLHQscil7aWYoImFyZWEiPT09dClyZXR1cm4gZTtzd2l0Y2gocil7Y2FzZSJjcm9zcyI6cmV0dXJuIDUqZSplLzk7Y2FzZSJkaWFtb25kIjpyZXR1cm4uNSplKmUvTWF0aC5zcXJ0KDMpO2Nhc2Uic3F1YXJlIjpyZXR1cm4gZSplO2Nhc2Uic3RhciI6dmFyIG49MTgqJGY7cmV0dXJuIDEuMjUqZSplKihNYXRoLnRhbihuKS1NYXRoLnRhbigyKm4pKk1hdGgucG93KE1hdGgudGFuKG4pLDIpKTtjYXNlInRyaWFuZ2xlIjpyZXR1cm4gTWF0aC5zcXJ0KDMpKmUqZS80O2Nhc2Uid3llIjpyZXR1cm4oMjEtMTAqTWF0aC5zcXJ0KDMpKSplKmUvODtkZWZhdWx0OnJldHVybiBNYXRoLlBJKmUqZS80fX0odCxyLG4pKSgpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNsYXNzTmFtZSxyPWUuY3gsbj1lLmN5LGk9ZS5zaXplO3JldHVybiByPT09K3ImJm49PT0rbiYmaT09PStpP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIixxZih7fSxlZSh0aGlzLnByb3BzKSxyZSh0aGlzLnByb3BzKSx7Y2xhc3NOYW1lOl8oKSgicmVjaGFydHMtc3ltYm9scyIsdCksdHJhbnNmb3JtOiJ0cmFuc2xhdGUoIi5jb25jYXQociwiLCAiKS5jb25jYXQobiwiKSIpLGQ6dGhpcy5nZXRQYXRoKCl9KSk6bnVsbH19XSkmJktmKHIucHJvdG90eXBlLG4pLGkmJktmKHIsaSksdH0oKSxEZi5kaXNwbGF5TmFtZT0iU3ltYm9scyIsRGYucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1ZmKGUsdCxyW3RdKX0pfXJldHVybiBlfSh7fSxILHtjbGFzc05hbWU6bS5hLnN0cmluZyx0eXBlOm0uYS5vbmVPZihbImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiLCJ0cmlhbmdsZSIsInd5ZSJdKSxjeDptLmEubnVtYmVyLGN5Om0uYS5udW1iZXIsc2l6ZTptLmEubnVtYmVyLHNpemVUeXBlOm0uYS5vbmVPZihbImFyZWEiLCJkaWFtZXRlciJdKX0pLERmLmRlZmF1bHRQcm9wcz17dHlwZToiY2lyY2xlIixzaXplOjY0LHNpemVUeXBlOiJhcmVhIn0sTGY9amYpKXx8TGY7ZnVuY3Rpb24gSmYoZSl7cmV0dXJuKEpmPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gZWwoKXtyZXR1cm4oZWw9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB0bChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gcmwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBubChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PUpmKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIGlsKGUpe3JldHVybihpbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gb2woZSx0KXtyZXR1cm4ob2w9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBhbCxzbCx1bCxjbD1YLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4ibm9uZSIhPT1lfSksZmw9SygoWGY9WWY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLG5sKHRoaXMsaWwodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZvbChlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsKG49W3trZXk6InJlbmRlckljb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuaW5hY3RpdmVDb2xvcixyPWUuaW5hY3RpdmU/dDplLmNvbG9yO3JldHVybiJwbGFpbmxpbmUiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJsaW5lIix7c3Ryb2tlV2lkdGg6NCxmaWxsOiJub25lIixzdHJva2U6cixzdHJva2VEYXNoYXJyYXk6ZS5wYXlsb2FkLnN0cm9rZURhc2hhcnJheSx4MTowLHkxOjE2LHgyOjMyLHkyOjE2LGNsYXNzTmFtZToicmVjaGFydHMtbGVnZW5kLWljb24ifSk6ImxpbmUiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7c3Ryb2tlV2lkdGg6NCxmaWxsOiJub25lIixzdHJva2U6cixkOiJNMCwiLmNvbmNhdCgxNiwiaCIpLmNvbmNhdCgzMi8zLCJcbiAgICAgICAgICAgIEEiKS5jb25jYXQoMzIvNiwiLCIpLmNvbmNhdCgzMi82LCIsMCwxLDEsIikuY29uY2F0KDMyLzMqMiwiLCIpLmNvbmNhdCgxNiwiXG4gICAgICAgICAgICBIIikuY29uY2F0KDMyLCJNIikuY29uY2F0KDMyLzMqMiwiLCIpLmNvbmNhdCgxNiwiXG4gICAgICAgICAgICBBIikuY29uY2F0KDMyLzYsIiwiKS5jb25jYXQoMzIvNiwiLDAsMSwxLCIpLmNvbmNhdCgzMi8zLCIsIikuY29uY2F0KDE2KSxjbGFzc05hbWU6InJlY2hhcnRzLWxlZw=="
}

Changelog:

{
    "2019.12.27 16:44": "base64:KXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBlZigpe3JldHVybihlZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHRmKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gcmYoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1aYyh0KSYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBuZihlKXtyZXR1cm4obmY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIG9mKGUsdCl7cmV0dXJuKG9mPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX12YXIgYWYsc2YsdWYsY2Y9ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbyxhPU1hdGgubWluKE1hdGguYWJzKHIpLzIsTWF0aC5hYnMobikvMikscz1uPj0wPzE6LTEsdT1yPj0wPzE6LTEsYz1uPj0wJiZyPj0wfHxuPDAmJnI8MD8xOjA7aWYoYT4wJiZpIGluc3RhbmNlb2YgQXJyYXkpe2Zvcih2YXIgZj1bXSxsPTA7bDw0O2wrKylmW2xdPWlbbF0+YT9hOmlbbF07bz0iTSIuY29uY2F0KGUsIiwiKS5jb25jYXQodCtzKmZbMF0pLGZbMF0+MCYmKG8rPSJBICIuY29uY2F0KGZbMF0sIiwiKS5jb25jYXQoZlswXSwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3UqZlswXSwiLCIpLmNvbmNhdCh0KSksbys9IkwgIi5jb25jYXQoZStyLXUqZlsxXSwiLCIpLmNvbmNhdCh0KSxmWzFdPjAmJihvKz0iQSAiLmNvbmNhdChmWzFdLCIsIikuY29uY2F0KGZbMV0sIiwwLDAsIikuY29uY2F0KGMsIixcbiAgICAgICAgIikuY29uY2F0KGUrciwiLCIpLmNvbmNhdCh0K3MqZlsxXSkpLG8rPSJMICIuY29uY2F0KGUrciwiLCIpLmNvbmNhdCh0K24tcypmWzJdKSxmWzJdPjAmJihvKz0iQSAiLmNvbmNhdChmWzJdLCIsIikuY29uY2F0KGZbMl0sIiwwLDAsIikuY29uY2F0KGMsIixcbiAgICAgICAgIikuY29uY2F0KGUrci11KmZbMl0sIiwiKS5jb25jYXQodCtuKSksbys9IkwgIi5jb25jYXQoZSt1KmZbM10sIiwiKS5jb25jYXQodCtuKSxmWzNdPjAmJihvKz0iQSAiLmNvbmNhdChmWzNdLCIsIikuY29uY2F0KGZbM10sIiwwLDAsIikuY29uY2F0KGMsIixcbiAgICAgICAgIikuY29uY2F0KGUsIiwiKS5jb25jYXQodCtuLXMqZlszXSkpLG8rPSJaIn1lbHNlIGlmKGE+MCYmaT09PStpJiZpPjApe3ZhciBoPU1hdGgubWluKGEsaSk7bz0iTSAiLmNvbmNhdChlLCIsIikuY29uY2F0KHQrcypoLCJcbiAgICAgICAgICAgIEEgIikuY29uY2F0KGgsIiwiKS5jb25jYXQoaCwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3UqaCwiLCIpLmNvbmNhdCh0LCJcbiAgICAgICAgICAgIEwgIikuY29uY2F0KGUrci11KmgsIiwiKS5jb25jYXQodCwiXG4gICAgICAgICAgICBBICIpLmNvbmNhdChoLCIsIikuY29uY2F0KGgsIiwwLDAsIikuY29uY2F0KGMsIiwiKS5jb25jYXQoZStyLCIsIikuY29uY2F0KHQrcypoLCJcbiAgICAgICAgICAgIEwgIikuY29uY2F0KGUrciwiLCIpLmNvbmNhdCh0K24tcypoLCJcbiAgICAgICAgICAgIEEgIikuY29uY2F0KGgsIiwiKS5jb25jYXQoaCwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3ItdSpoLCIsIikuY29uY2F0KHQrbiwiXG4gICAgICAgICAgICBMICIpLmNvbmNhdChlK3UqaCwiLCIpLmNvbmNhdCh0K24sIlxuICAgICAgICAgICAgQSAiKS5jb25jYXQoaCwiLCIpLmNvbmNhdChoLCIsMCwwLCIpLmNvbmNhdChjLCIsIikuY29uY2F0KGUsIiwiKS5jb25jYXQodCtuLXMqaCwiIFoiKX1lbHNlIG89Ik0gIi5jb25jYXQoZSwiLCIpLmNvbmNhdCh0LCIgaCAiKS5jb25jYXQociwiIHYgIikuY29uY2F0KG4sIiBoICIpLmNvbmNhdCgtciwiIFoiKTtyZXR1cm4gb30sZmY9SygoUWM9WGM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLHI7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspaVtvXT1hcmd1bWVudHNbb107cmV0dXJuKHI9cmYodGhpcywoZT1uZih0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSkuc3RhdGU9e3RvdGFsTGVuZ3RoOi0xfSxyfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJm9mKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlJiZ0aGlzLm5vZGUuZ2V0VG90YWxMZW5ndGgpdHJ5e3ZhciBlPXRoaXMubm9kZS5nZXRUb3RhbExlbmd0aCgpO2UmJnRoaXMuc2V0U3RhdGUoe3RvdGFsTGVuZ3RoOmV9KX1jYXRjaCh0KXt9fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLHI9dC54LG49dC55LGk9dC53aWR0aCxvPXQuaGVpZ2h0LGE9dC5yYWRpdXMscz10LmNsYXNzTmFtZSx1PXRoaXMuc3RhdGUudG90YWxMZW5ndGgsYz10aGlzLnByb3BzLGY9Yy5hbmltYXRpb25FYXNpbmcsbD1jLmFuaW1hdGlvbkR1cmF0aW9uLGg9Yy5hbmltYXRpb25CZWdpbixwPWMuaXNBbmltYXRpb25BY3RpdmUsZD1jLmlzVXBkYXRlQW5pbWF0aW9uQWN0aXZlO2lmKHIhPT0rcnx8biE9PStufHxpIT09K2l8fG8hPT0rb3x8MD09PWl8fDA9PT1vKXJldHVybiBudWxsO3ZhciB5PV8oKSgicmVjaGFydHMtcmVjdGFuZ2xlIixzKTtyZXR1cm4gZD9nLmEuY3JlYXRlRWxlbWVudCgkYyx7Y2FuQmVnaW46dT4wLGZyb206e3dpZHRoOmksaGVpZ2h0Om8seDpyLHk6bn0sdG86e3dpZHRoOmksaGVpZ2h0Om8seDpyLHk6bn0sZHVyYXRpb246bCxhbmltYXRpb25FYXNpbmc6Zixpc0FjdGl2ZTpkfSxmdW5jdGlvbih0KXt2YXIgcj10LndpZHRoLG49dC5oZWlnaHQsaT10Lngsbz10Lnk7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KCRjLHtjYW5CZWdpbjp1PjAsZnJvbToiMHB4ICIuY29uY2F0KC0xPT09dT8xOnUsInB4IiksdG86IiIuY29uY2F0KHUsInB4IDBweCIpLGF0dHJpYnV0ZU5hbWU6InN0cm9rZURhc2hhcnJheSIsYmVnaW46aCxkdXJhdGlvbjpsLGlzQWN0aXZlOnAsZWFzaW5nOmZ9LGcuYS5jcmVhdGVFbGVtZW50KCJwYXRoIixlZih7fSxlZShlLnByb3BzKSxyZShlLnByb3BzKSx7Y2xhc3NOYW1lOnksZDpjZihpLG8scixuLGEpLHJlZjpmdW5jdGlvbih0KXtlLm5vZGU9dH19KSkpfSk6Zy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLGVmKHt9LGVlKHRoaXMucHJvcHMpLHJlKHRoaXMucHJvcHMpLHtjbGFzc05hbWU6eSxkOmNmKHIsbixpLG8sYSl9KSl9fV0pJiZ0ZihyLnByb3RvdHlwZSxuKSxpJiZ0ZihyLGkpLHR9KCksWGMuZGlzcGxheU5hbWU9IlJlY3RhbmdsZSIsWGMucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe0pjKGUsdCxyW3RdKX0pfXJldHVybiBlfSh7fSxILFcse2NsYXNzTmFtZTptLmEuc3RyaW5nLHg6bS5hLm51bWJlcix5Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcixyYWRpdXM6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuYXJyYXldKSxpc0FuaW1hdGlvbkFjdGl2ZTptLmEuYm9vbCxpc1VwZGF0ZUFuaW1hdGlvbkFjdGl2ZTptLmEuYm9vbCxhbmltYXRpb25CZWdpbjptLmEubnVtYmVyLGFuaW1hdGlvbkR1cmF0aW9uOm0uYS5udW1iZXIsYW5pbWF0aW9uRWFzaW5nOm0uYS5vbmVPZihbImVhc2UiLCJlYXNlLWluIiwiZWFzZS1vdXQiLCJlYXNlLWluLW91dCIsImxpbmVhciJdKX0pLFhjLmRlZmF1bHRQcm9wcz17eDowLHk6MCx3aWR0aDowLGhlaWdodDowLHJhZGl1czowLGlzQW5pbWF0aW9uQWN0aXZlOiExLGlzVXBkYXRlQW5pbWF0aW9uQWN0aXZlOiExLGFuaW1hdGlvbkJlZ2luOjAsYW5pbWF0aW9uRHVyYXRpb246MTUwMCxhbmltYXRpb25FYXNpbmc6ImVhc2UifSxZYz1RYykpfHxZYztmdW5jdGlvbiBsZihlKXtyZXR1cm4obGY9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBoZigpe3JldHVybihoZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHBmKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RmKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIGRmKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiB5ZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIGdmKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09bGYodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gdmYoZSl7cmV0dXJuKHZmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBtZihlLHQpe3JldHVybihtZj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIGJmPUsoKHVmPXNmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSxnZih0aGlzLHZmKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmbWYoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LGk9W3trZXk6InJlbmRlclJlY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcuYS5pc1ZhbGlkRWxlbWVudChlKT9nLmEuY2xvbmVFbGVtZW50KGUsdCk6dSgpKGUpP2UodCk6Zy5hLmNyZWF0ZUVsZW1lbnQoZmYsaGYoe30sdCx7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1yZWZlcmVuY2UtYXJlYS1yZWN0In0pKX19XSwobj1be2tleToiZ2V0UmVjdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9dGhpcy5wcm9wcyxvPWkueDEsYT1pLngyLHM9aS55MSx1PWkueTIsYz1pLnhBeGlzLGY9aS55QXhpcyxsPWh1LmNyZWF0ZSh7eDpjLnNjYWxlLHk6Zi5zY2FsZX0pLGg9e3g6ZT9sLnguYXBwbHkobyk6bC54LnJhbmdlTWluLHk6cj9sLnkuYXBwbHkocyk6bC55LnJhbmdlTWlufSxwPXt4OnQ/bC54LmFwcGx5KGEpOmwueC5yYW5nZU1heCx5Om4/bC55LmFwcGx5KHUpOmwueS5yYW5nZU1heH07cmV0dXJuIVZsKHRoaXMucHJvcHMsImRpc2NhcmQiKXx8bC5pc0luUmFuZ2UoaCkmJmwuaXNJblJhbmdlKHApP3N1KGgscCk6bnVsbH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS54MSxyPWUueDIsbj1lLnkxLGk9ZS55MixvPWUuY2xhc3NOYW1lLGE9KGUuYWx3YXlzU2hvdyxlLmNsaXBQYXRoSWQpLHM9Qih0KSx1PUIociksYz1CKG4pLGY9QihpKTtpZighcyYmIXUmJiFjJiYhZilyZXR1cm4gbnVsbDt2YXIgbD10aGlzLmdldFJlY3Qocyx1LGMsZik7aWYoIWwpcmV0dXJuIG51bGw7dmFyIGg9dGhpcy5wcm9wcy5zaGFwZSxwPVZsKHRoaXMucHJvcHMsImhpZGRlbiIpPyJ1cmwoIyIuY29uY2F0KGEsIikiKTp2b2lkIDA7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6XygpKCJyZWNoYXJ0cy1yZWZlcmVuY2UtYXJlYSIsbyl9LHRoaXMuY29uc3RydWN0b3IucmVuZGVyUmVjdChoLHBmKHtjbGlwUGF0aDpwfSx0aGlzLnByb3BzLGwpKSxnaC5yZW5kZXJDYWxsQnlQYXJlbnQodGhpcy5wcm9wcyxsKSl9fV0pJiZ5ZihyLnByb3RvdHlwZSxuKSxpJiZ5ZihyLGkpLHR9KCksc2YuZGlzcGxheU5hbWU9IlJlZmVyZW5jZUFyZWEiLHNmLnByb3BUeXBlcz1wZih7fSxILHt2aWV3Qm94Om0uYS5zaGFwZSh7eDptLmEubnVtYmVyLHk6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLGhlaWdodDptLmEubnVtYmVyfSkseEF4aXM6bS5hLm9iamVjdCx5QXhpczptLmEub2JqZWN0LGlzRnJvbnQ6bS5hLmJvb2wsYWx3YXlzU2hvdzptLmEuYm9vbCxpZk92ZXJmbG93Om0uYS5vbmVPZihbImhpZGRlbiIsInZpc2libGUiLCJkaXNjYXJkIiwiZXh0ZW5kRG9tYWluIl0pLHgxOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHgyOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHkxOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHkyOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLGNsYXNzTmFtZTptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5zdHJpbmddKSx5QXhpc0lkOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLHhBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSksc2hhcGU6bS5hLm9uZU9mVHlwZShbbS5hLmZ1bmMsbS5hLmVsZW1lbnRdKX0pLHNmLmRlZmF1bHRQcm9wcz17aXNGcm9udDohMSxpZk92ZXJmbG93OiJkaXNjYXJkIix4QXhpc0lkOjAseUF4aXNJZDowLHI6MTAsZmlsbDoiI2NjYyIsZmlsbE9wYWNpdHk6LjUsc3Ryb2tlOiJub25lIixzdHJva2VXaWR0aDoxfSxhZj11ZikpfHxhZjtmdW5jdGlvbiBfZihlKXtyZXR1cm4oX2Y9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBTZigpe3JldHVybihTZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEVmKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsaT0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChhLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2godSl7aT0hMCxvPXV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiB3ZihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9e30sbz1PYmplY3Qua2V5cyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fChpW3JdPWVbcl0pO3JldHVybiBpfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmKGlbcl09ZVtyXSl9cmV0dXJuIGl9ZnVuY3Rpb24gVGYoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBBZihlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PV9mKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIENmKGUpe3JldHVybihDZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24geGYoZSx0KXtyZXR1cm4oeGY9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBJZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksQWYodGhpcyxDZih0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJnhmKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToicmVuZGVyRXJyb3JCYXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm9mZnNldCxyPWUubGF5b3V0LG49ZS53aWR0aCxpPWUuZGF0YUtleSxvPWUuZGF0YSxhPWUuZGF0YVBvaW50Rm9ybWF0dGVyLHM9ZS54QXhpcyx1PWUueUF4aXMsYz13ZihlLFsib2Zmc2V0IiwibGF5b3V0Iiwid2lkdGgiLCJkYXRhS2V5IiwiZGF0YSIsImRhdGFQb2ludEZvcm1hdHRlciIsInhBeGlzIiwieUF4aXMiXSksZj1lZShjKTtyZXR1cm4gby5tYXAoZnVuY3Rpb24oZSxvKXt2YXIgYyxsLGgscCxkLHksdixtLGIsXyxTLEUsdz1hKGUsaSksVD13LngsQT13LnksQz13LnZhbHVlLHg9dy5lcnJvclZhbDtpZigheClyZXR1cm4gbnVsbDtpZihBcnJheS5pc0FycmF5KHgpKXt2YXIgST1FZih4LDIpO1M9SVswXSxFPUlbMV19ZWxzZSBTPUU9eDtyZXR1cm4idmVydGljYWwiPT09cj8odj1zLnNjYWxlLGw9QSt0LGg9digoYz1DKS1TKSxwPWwrbixtPXt4MTpkPXYoYytFKSx5MTpwLHgyOmQseTI6eT1sLW59LGI9e3gxOmgseTE6bCx4MjpkLHkyOmx9LF89e3gxOmgseTE6cCx4MjpoLHkyOnl9KToiaG9yaXpvbnRhbCI9PT1yJiYodj11LnNjYWxlLGg9KGM9VCt0KS1uLGQ9YytuLHA9digobD1DKS1TKSxtPXt4MTpoLHkxOnk9dihsK0UpLHgyOmQseTI6eX0sYj17eDE6Yyx5MTpwLHgyOmMseTI6eX0sXz17eDE6aCx5MTpwLHgyOmQseTI6cH0pLGcuYS5jcmVhdGVFbGVtZW50KHpzLFNmKHtjbGFzc05hbWU6InJlY2hhcnRzLWVycm9yQmFyIixrZXk6ImJhci0iLmNvbmNhdChvKX0sZiksZy5hLmNyZWF0ZUVsZW1lbnQoImxpbmUiLG0pLGcuYS5jcmVhdGVFbGVtZW50KCJsaW5lIixiKSxnLmEuY3JlYXRlRWxlbWVudCgibGluZSIsXykpfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6InJlY2hhcnRzLWVycm9yQmFycyJ9LHRoaXMucmVuZGVyRXJyb3JCYXJzKCkpfX1dKSYmVGYoci5wcm90b3R5cGUsbiksaSYmVGYocixpKSx0fSgpO0lmLnByb3BUeXBlcz17ZGF0YUtleTptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXIsbS5hLmZ1bmNdKS5pc1JlcXVpcmVkLGRhdGE6bS5hLmFycmF5LHhBeGlzOm0uYS5vYmplY3QseUF4aXM6bS5hLm9iamVjdCxsYXlvdXQ6bS5hLnN0cmluZyxkYXRhUG9pbnRGb3JtYXR0ZXI6bS5hLmZ1bmMsc3Ryb2tlOm0uYS5zdHJpbmcsc3Ryb2tlV2lkdGg6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLG9mZnNldDptLmEubnVtYmVyfSxJZi5kZWZhdWx0UHJvcHM9e3N0cm9rZToiYmxhY2siLHN0cm9rZVdpZHRoOjEuNSx3aWR0aDo1LG9mZnNldDowLGxheW91dDoiaG9yaXpvbnRhbCJ9O3ZhciBrZj1JZixPZj1yKDEyNCksTmY9ci5uKE9mKTtmdW5jdGlvbiBQZigpe3JldHVybihQZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFJmKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT17fSxvPU9iamVjdC5rZXlzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8KGlbcl09ZVtyXSk7cmV0dXJuIGl9KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYoaVtyXT1lW3JdKX1yZXR1cm4gaX12YXIgQmY9e3dpZHRoOm0uYS5udW1iZXIuaXNSZXF1aXJlZCxoZWlnaHQ6bS5hLm51bWJlci5pc1JlcXVpcmVkLHZpZXdCb3g6bS5hLnNoYXBlKHt4Om0uYS5udW1iZXIseTptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXJ9KSxjbGFzc05hbWU6bS5hLnN0cmluZyxzdHlsZTptLmEub2JqZWN0LGNoaWxkcmVuOm0uYS5vbmVPZlR5cGUoW20uYS5hcnJheU9mKG0uYS5ub2RlKSxtLmEubm9kZV0pfTtmdW5jdGlvbiBNZihlKXt2YXIgdD1lLmNoaWxkcmVuLHI9ZS53aWR0aCxuPWUuaGVpZ2h0LGk9ZS52aWV3Qm94LG89ZS5jbGFzc05hbWUsYT1lLnN0eWxlLHM9UmYoZSxbImNoaWxkcmVuIiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiY2xhc3NOYW1lIiwic3R5bGUiXSksdT1pfHx7d2lkdGg6cixoZWlnaHQ6bix4OjAseTowfSxjPV8oKSgicmVjaGFydHMtc3VyZmFjZSIsbyksZj1lZShzKTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoInN2ZyIsUGYoe30sZix7Y2xhc3NOYW1lOmMsd2lkdGg6cixoZWlnaHQ6bixzdHlsZTphLHZpZXdCb3g6IiIuY29uY2F0KHUueCwiICIpLmNvbmNhdCh1LnksIiAiKS5jb25jYXQodS53aWR0aCwiICIpLmNvbmNhdCh1LmhlaWdodCksdmVyc2lvbjoiMS4xIn0pLHQpfU1mLnByb3BUeXBlcz1CZjt2YXIgTGYsRGYsamYsVWY9TWY7ZnVuY3Rpb24gRmYoZSl7cmV0dXJuKEZmPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gVmYoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHFmKCl7cmV0dXJuKHFmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gS2YoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB6ZihlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PUZmKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIEdmKGUpe3JldHVybihHZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gSGYoZSx0KXtyZXR1cm4oSGY9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBXZixZZixYZixRZj17c3ltYm9sQ2lyY2xlOldhLHN5bWJvbENyb3NzOllhLHN5bWJvbERpYW1vbmQ6JGEsc3ltYm9sU3F1YXJlOnJzLHN5bWJvbFN0YXI6dHMsc3ltYm9sVHJpYW5nbGU6aXMsc3ltYm9sV3llOnVzfSwkZj1NYXRoLlBJLzE4MCxaZj1LKChqZj1EZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksemYodGhpcyxHZih0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJkhmKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToiZ2V0UGF0aCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zaXplLHI9ZS5zaXplVHlwZSxuPWUudHlwZSxpPWZ1bmN0aW9uKGUpe3ZhciB0PSJzeW1ib2wiLmNvbmNhdChlLnNsaWNlKDAsMSkudG9VcHBlckNhc2UoKSkuY29uY2F0KGUuc2xpY2UoMSkpO3JldHVybiBRZlt0XXx8V2F9KG4pO3JldHVybiBmdW5jdGlvbigpe3ZhciBlPUJhKFdhKSx0PUJhKDY0KSxyPW51bGw7ZnVuY3Rpb24gbigpe3ZhciBuO2lmKHJ8fChyPW49UmEoKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksbilyZXR1cm4gcj1udWxsLG4rIiJ8fG51bGx9cmV0dXJuIG4udHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT09dHlwZW9mIHQ/dDpCYSh0KSxuKTplfSxuLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09PXR5cGVvZiBlP2U6QmEoK2UpLG4pOnR9LG4uY29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1lP251bGw6ZSxuKTpyfSxufSgpLnR5cGUoaSkuc2l6ZShmdW5jdGlvbihlLHQscil7aWYoImFyZWEiPT09dClyZXR1cm4gZTtzd2l0Y2gocil7Y2FzZSJjcm9zcyI6cmV0dXJuIDUqZSplLzk7Y2FzZSJkaWFtb25kIjpyZXR1cm4uNSplKmUvTWF0aC5zcXJ0KDMpO2Nhc2Uic3F1YXJlIjpyZXR1cm4gZSplO2Nhc2Uic3RhciI6dmFyIG49MTgqJGY7cmV0dXJuIDEuMjUqZSplKihNYXRoLnRhbihuKS1NYXRoLnRhbigyKm4pKk1hdGgucG93KE1hdGgudGFuKG4pLDIpKTtjYXNlInRyaWFuZ2xlIjpyZXR1cm4gTWF0aC5zcXJ0KDMpKmUqZS80O2Nhc2Uid3llIjpyZXR1cm4oMjEtMTAqTWF0aC5zcXJ0KDMpKSplKmUvODtkZWZhdWx0OnJldHVybiBNYXRoLlBJKmUqZS80fX0odCxyLG4pKSgpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNsYXNzTmFtZSxyPWUuY3gsbj1lLmN5LGk9ZS5zaXplO3JldHVybiByPT09K3ImJm49PT0rbiYmaT09PStpP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIixxZih7fSxlZSh0aGlzLnByb3BzKSxyZSh0aGlzLnByb3BzKSx7Y2xhc3NOYW1lOl8oKSgicmVjaGFydHMtc3ltYm9scyIsdCksdHJhbnNmb3JtOiJ0cmFuc2xhdGUoIi5jb25jYXQociwiLCAiKS5jb25jYXQobiwiKSIpLGQ6dGhpcy5nZXRQYXRoKCl9KSk6bnVsbH19XSkmJktmKHIucHJvdG90eXBlLG4pLGkmJktmKHIsaSksdH0oKSxEZi5kaXNwbGF5TmFtZT0iU3ltYm9scyIsRGYucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1ZmKGUsdCxyW3RdKX0pfXJldHVybiBlfSh7fSxILHtjbGFzc05hbWU6bS5hLnN0cmluZyx0eXBlOm0uYS5vbmVPZihbImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiLCJ0cmlhbmdsZSIsInd5ZSJdKSxjeDptLmEubnVtYmVyLGN5Om0uYS5udW1iZXIsc2l6ZTptLmEubnVtYmVyLHNpemVUeXBlOm0uYS5vbmVPZihbImFyZWEiLCJkaWFtZXRlciJdKX0pLERmLmRlZmF1bHRQcm9wcz17dHlwZToiY2lyY2xlIixzaXplOjY0LHNpemVUeXBlOiJhcmVhIn0sTGY9amYpKXx8TGY7ZnVuY3Rpb24gSmYoZSl7cmV0dXJuKEpmPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gZWwoKXtyZXR1cm4oZWw9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB0bChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gcmwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBubChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PUpmKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIGlsKGUpe3JldHVybihpbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gb2woZSx0KXtyZXR1cm4ob2w9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBhbCxzbCx1bCxjbD1YLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4ibm9uZSIhPT1lfSksZmw9SygoWGY9WWY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLG5sKHRoaXMsaWwodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZvbChlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsKG49W3trZXk6InJlbmRlckljb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuaW5hY3RpdmVDb2xvcixyPWUuaW5hY3RpdmU/dDplLmNvbG9yO3JldHVybiJwbGFpbmxpbmUiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJsaW5lIix7c3Ryb2tlV2lkdGg6NCxmaWxsOiJub25lIixzdHJva2U6cixzdHJva2VEYXNoYXJyYXk6ZS5wYXlsb2FkLnN0cm9rZURhc2hhcnJheSx4MTowLHkxOjE2LHgyOjMyLHkyOjE2LGNsYXNzTmFtZToicmVjaGFydHMtbGVnZW5kLWljb24ifSk6ImxpbmUiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7c3Ryb2tlV2lkdGg6NCxmaWxsOiJub25lIixzdHJva2U6cixkOiJNMCwiLmNvbmNhdCgxNiwiaCIpLmNvbmNhdCgzMi8zLCJcbiAgICAgICAgICAgIEEiKS5jb25jYXQoMzIvNiwiLCIpLmNvbmNhdCgzMi82LCIsMCwxLDEsIikuY29uY2F0KDMyLzMqMiwiLCIpLmNvbmNhdCgxNiwiXG4gICAgICAgICAgICBIIikuY29uY2F0KDMyLCJNIikuY29uY2F0KDMyLzMqMiwiLCIpLmNvbmNhdCgxNiwiXG4gICAgICAgICAgICBBIikuY29uY2F0KDMyLzYsIiwiKS5jb25jYXQoMzIvNiwiLDAsMSwxLCIpLmNvbmNhdCgzMi8zLCIsIikuY29uY2F0KDE2KSxjbGFzc05hbWU6InJlY2hhcnRzLWxlZw==",
    "2019.12.27 16:43": "base64:KXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBlZigpe3JldHVybihlZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHRmKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gcmYoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1aYyh0KSYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBuZihlKXtyZXR1cm4obmY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIG9mKGUsdCl7cmV0dXJuKG9mPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX12YXIgYWYsc2YsdWYsY2Y9ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbyxhPU1hdGgubWluKE1hdGguYWJzKHIpLzIsTWF0aC5hYnMobikvMikscz1uPj0wPzE6LTEsdT1yPj0wPzE6LTEsYz1uPj0wJiZyPj0wfHxuPDAmJnI8MD8xOjA7aWYoYT4wJiZpIGluc3RhbmNlb2YgQXJyYXkpe2Zvcih2YXIgZj1bXSxsPTA7bDw0O2wrKylmW2xdPWlbbF0+YT9hOmlbbF07bz0iTSIuY29uY2F0KGUsIiwiKS5jb25jYXQodCtzKmZbMF0pLGZbMF0+MCYmKG8rPSJBICIuY29uY2F0KGZbMF0sIiwiKS5jb25jYXQoZlswXSwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3UqZlswXSwiLCIpLmNvbmNhdCh0KSksbys9IkwgIi5jb25jYXQoZStyLXUqZlsxXSwiLCIpLmNvbmNhdCh0KSxmWzFdPjAmJihvKz0iQSAiLmNvbmNhdChmWzFdLCIsIikuY29uY2F0KGZbMV0sIiwwLDAsIikuY29uY2F0KGMsIixcbiAgICAgICAgIikuY29uY2F0KGUrciwiLCIpLmNvbmNhdCh0K3MqZlsxXSkpLG8rPSJMICIuY29uY2F0KGUrciwiLCIpLmNvbmNhdCh0K24tcypmWzJdKSxmWzJdPjAmJihvKz0iQSAiLmNvbmNhdChmWzJdLCIsIikuY29uY2F0KGZbMl0sIiwwLDAsIikuY29uY2F0KGMsIixcbiAgICAgICAgIikuY29uY2F0KGUrci11KmZbMl0sIiwiKS5jb25jYXQodCtuKSksbys9IkwgIi5jb25jYXQoZSt1KmZbM10sIiwiKS5jb25jYXQodCtuKSxmWzNdPjAmJihvKz0iQSAiLmNvbmNhdChmWzNdLCIsIikuY29uY2F0KGZbM10sIiwwLDAsIikuY29uY2F0KGMsIixcbiAgICAgICAgIikuY29uY2F0KGUsIiwiKS5jb25jYXQodCtuLXMqZlszXSkpLG8rPSJaIn1lbHNlIGlmKGE+MCYmaT09PStpJiZpPjApe3ZhciBoPU1hdGgubWluKGEsaSk7bz0iTSAiLmNvbmNhdChlLCIsIikuY29uY2F0KHQrcypoLCJcbiAgICAgICAgICAgIEEgIikuY29uY2F0KGgsIiwiKS5jb25jYXQoaCwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3UqaCwiLCIpLmNvbmNhdCh0LCJcbiAgICAgICAgICAgIEwgIikuY29uY2F0KGUrci11KmgsIiwiKS5jb25jYXQodCwiXG4gICAgICAgICAgICBBICIpLmNvbmNhdChoLCIsIikuY29uY2F0KGgsIiwwLDAsIikuY29uY2F0KGMsIiwiKS5jb25jYXQoZStyLCIsIikuY29uY2F0KHQrcypoLCJcbiAgICAgICAgICAgIEwgIikuY29uY2F0KGUrciwiLCIpLmNvbmNhdCh0K24tcypoLCJcbiAgICAgICAgICAgIEEgIikuY29uY2F0KGgsIiwiKS5jb25jYXQoaCwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3ItdSpoLCIsIikuY29uY2F0KHQrbiwiXG4gICAgICAgICAgICBMICIpLmNvbmNhdChlK3UqaCwiLCIpLmNvbmNhdCh0K24sIlxuICAgICAgICAgICAgQSAiKS5jb25jYXQoaCwiLCIpLmNvbmNhdChoLCIsMCwwLCIpLmNvbmNhdChjLCIsIikuY29uY2F0KGUsIiwiKS5jb25jYXQodCtuLXMqaCwiIFoiKX1lbHNlIG89Ik0gIi5jb25jYXQoZSwiLCIpLmNvbmNhdCh0LCIgaCAiKS5jb25jYXQociwiIHYgIikuY29uY2F0KG4sIiBoICIpLmNvbmNhdCgtciwiIFoiKTtyZXR1cm4gb30sZmY9SygoUWM9WGM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLHI7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspaVtvXT1hcmd1bWVudHNbb107cmV0dXJuKHI9cmYodGhpcywoZT1uZih0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSkuc3RhdGU9e3RvdGFsTGVuZ3RoOi0xfSxyfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJm9mKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlJiZ0aGlzLm5vZGUuZ2V0VG90YWxMZW5ndGgpdHJ5e3ZhciBlPXRoaXMubm9kZS5nZXRUb3RhbExlbmd0aCgpO2UmJnRoaXMuc2V0U3RhdGUoe3RvdGFsTGVuZ3RoOmV9KX1jYXRjaCh0KXt9fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLHI9dC54LG49dC55LGk9dC53aWR0aCxvPXQuaGVpZ2h0LGE9dC5yYWRpdXMscz10LmNsYXNzTmFtZSx1PXRoaXMuc3RhdGUudG90YWxMZW5ndGgsYz10aGlzLnByb3BzLGY9Yy5hbmltYXRpb25FYXNpbmcsbD1jLmFuaW1hdGlvbkR1cmF0aW9uLGg9Yy5hbmltYXRpb25CZWdpbixwPWMuaXNBbmltYXRpb25BY3RpdmUsZD1jLmlzVXBkYXRlQW5pbWF0aW9uQWN0aXZlO2lmKHIhPT0rcnx8biE9PStufHxpIT09K2l8fG8hPT0rb3x8MD09PWl8fDA9PT1vKXJldHVybiBudWxsO3ZhciB5PV8oKSgicmVjaGFydHMtcmVjdGFuZ2xlIixzKTtyZXR1cm4gZD9nLmEuY3JlYXRlRWxlbWVudCgkYyx7Y2FuQmVnaW46dT4wLGZyb206e3dpZHRoOmksaGVpZ2h0Om8seDpyLHk6bn0sdG86e3dpZHRoOmksaGVpZ2h0Om8seDpyLHk6bn0sZHVyYXRpb246bCxhbmltYXRpb25FYXNpbmc6Zixpc0FjdGl2ZTpkfSxmdW5jdGlvbih0KXt2YXIgcj10LndpZHRoLG49dC5oZWlnaHQsaT10Lngsbz10Lnk7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KCRjLHtjYW5CZWdpbjp1PjAsZnJvbToiMHB4ICIuY29uY2F0KC0xPT09dT8xOnUsInB4IiksdG86IiIuY29uY2F0KHUsInB4IDBweCIpLGF0dHJpYnV0ZU5hbWU6InN0cm9rZURhc2hhcnJheSIsYmVnaW46aCxkdXJhdGlvbjpsLGlzQWN0aXZlOnAsZWFzaW5nOmZ9LGcuYS5jcmVhdGVFbGVtZW50KCJwYXRoIixlZih7fSxlZShlLnByb3BzKSxyZShlLnByb3BzKSx7Y2xhc3NOYW1lOnksZDpjZihpLG8scixuLGEpLHJlZjpmdW5jdGlvbih0KXtlLm5vZGU9dH19KSkpfSk6Zy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLGVmKHt9LGVlKHRoaXMucHJvcHMpLHJlKHRoaXMucHJvcHMpLHtjbGFzc05hbWU6eSxkOmNmKHIsbixpLG8sYSl9KSl9fV0pJiZ0ZihyLnByb3RvdHlwZSxuKSxpJiZ0ZihyLGkpLHR9KCksWGMuZGlzcGxheU5hbWU9IlJlY3RhbmdsZSIsWGMucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe0pjKGUsdCxyW3RdKX0pfXJldHVybiBlfSh7fSxILFcse2NsYXNzTmFtZTptLmEuc3RyaW5nLHg6bS5hLm51bWJlcix5Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcixyYWRpdXM6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuYXJyYXldKSxpc0FuaW1hdGlvbkFjdGl2ZTptLmEuYm9vbCxpc1VwZGF0ZUFuaW1hdGlvbkFjdGl2ZTptLmEuYm9vbCxhbmltYXRpb25CZWdpbjptLmEubnVtYmVyLGFuaW1hdGlvbkR1cmF0aW9uOm0uYS5udW1iZXIsYW5pbWF0aW9uRWFzaW5nOm0uYS5vbmVPZihbImVhc2UiLCJlYXNlLWluIiwiZWFzZS1vdXQiLCJlYXNlLWluLW91dCIsImxpbmVhciJdKX0pLFhjLmRlZmF1bHRQcm9wcz17eDowLHk6MCx3aWR0aDowLGhlaWdodDowLHJhZGl1czowLGlzQW5pbWF0aW9uQWN0aXZlOiExLGlzVXBkYXRlQW5pbWF0aW9uQWN0aXZlOiExLGFuaW1hdGlvbkJlZ2luOjAsYW5pbWF0aW9uRHVyYXRpb246MTUwMCxhbmltYXRpb25FYXNpbmc6ImVhc2UifSxZYz1RYykpfHxZYztmdW5jdGlvbiBsZihlKXtyZXR1cm4obGY9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBoZigpe3JldHVybihoZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHBmKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RmKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIGRmKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiB5ZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIGdmKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09bGYodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gdmYoZSl7cmV0dXJuKHZmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBtZihlLHQpe3JldHVybihtZj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIGJmPUsoKHVmPXNmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSxnZih0aGlzLHZmKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmbWYoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LGk9W3trZXk6InJlbmRlclJlY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcuYS5pc1ZhbGlkRWxlbWVudChlKT9nLmEuY2xvbmVFbGVtZW50KGUsdCk6dSgpKGUpP2UodCk6Zy5hLmNyZWF0ZUVsZW1lbnQoZmYsaGYoe30sdCx7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1yZWZlcmVuY2UtYXJlYS1yZWN0In0pKX19XSwobj1be2tleToiZ2V0UmVjdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9dGhpcy5wcm9wcyxvPWkueDEsYT1pLngyLHM9aS55MSx1PWkueTIsYz1pLnhBeGlzLGY9aS55QXhpcyxsPWh1LmNyZWF0ZSh7eDpjLnNjYWxlLHk6Zi5zY2FsZX0pLGg9e3g6ZT9sLnguYXBwbHkobyk6bC54LnJhbmdlTWluLHk6cj9sLnkuYXBwbHkocyk6bC55LnJhbmdlTWlufSxwPXt4OnQ/bC54LmFwcGx5KGEpOmwueC5yYW5nZU1heCx5Om4/bC55LmFwcGx5KHUpOmwueS5yYW5nZU1heH07cmV0dXJuIVZsKHRoaXMucHJvcHMsImRpc2NhcmQiKXx8bC5pc0luUmFuZ2UoaCkmJmwuaXNJblJhbmdlKHApP3N1KGgscCk6bnVsbH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS54MSxyPWUueDIsbj1lLnkxLGk9ZS55MixvPWUuY2xhc3NOYW1lLGE9KGUuYWx3YXlzU2hvdyxlLmNsaXBQYXRoSWQpLHM9Qih0KSx1PUIociksYz1CKG4pLGY9QihpKTtpZighcyYmIXUmJiFjJiYhZilyZXR1cm4gbnVsbDt2YXIgbD10aGlzLmdldFJlY3Qocyx1LGMsZik7aWYoIWwpcmV0dXJuIG51bGw7dmFyIGg9dGhpcy5wcm9wcy5zaGFwZSxwPVZsKHRoaXMucHJvcHMsImhpZGRlbiIpPyJ1cmwoIyIuY29uY2F0KGEsIikiKTp2b2lkIDA7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6XygpKCJyZWNoYXJ0cy1yZWZlcmVuY2UtYXJlYSIsbyl9LHRoaXMuY29uc3RydWN0b3IucmVuZGVyUmVjdChoLHBmKHtjbGlwUGF0aDpwfSx0aGlzLnByb3BzLGwpKSxnaC5yZW5kZXJDYWxsQnlQYXJlbnQodGhpcy5wcm9wcyxsKSl9fV0pJiZ5ZihyLnByb3RvdHlwZSxuKSxpJiZ5ZihyLGkpLHR9KCksc2YuZGlzcGxheU5hbWU9IlJlZmVyZW5jZUFyZWEiLHNmLnByb3BUeXBlcz1wZih7fSxILHt2aWV3Qm94Om0uYS5zaGFwZSh7eDptLmEubnVtYmVyLHk6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLGhlaWdodDptLmEubnVtYmVyfSkseEF4aXM6bS5hLm9iamVjdCx5QXhpczptLmEub2JqZWN0LGlzRnJvbnQ6bS5hLmJvb2wsYWx3YXlzU2hvdzptLmEuYm9vbCxpZk92ZXJmbG93Om0uYS5vbmVPZihbImhpZGRlbiIsInZpc2libGUiLCJkaXNjYXJkIiwiZXh0ZW5kRG9tYWluIl0pLHgxOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHgyOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHkxOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHkyOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLGNsYXNzTmFtZTptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5zdHJpbmddKSx5QXhpc0lkOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLHhBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSksc2hhcGU6bS5hLm9uZU9mVHlwZShbbS5hLmZ1bmMsbS5hLmVsZW1lbnRdKX0pLHNmLmRlZmF1bHRQcm9wcz17aXNGcm9udDohMSxpZk92ZXJmbG93OiJkaXNjYXJkIix4QXhpc0lkOjAseUF4aXNJZDowLHI6MTAsZmlsbDoiI2NjYyIsZmlsbE9wYWNpdHk6LjUsc3Ryb2tlOiJub25lIixzdHJva2VXaWR0aDoxfSxhZj11ZikpfHxhZjtmdW5jdGlvbiBfZihlKXtyZXR1cm4oX2Y9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBTZigpe3JldHVybihTZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEVmKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsaT0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChhLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2godSl7aT0hMCxvPXV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiB3ZihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9e30sbz1PYmplY3Qua2V5cyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fChpW3JdPWVbcl0pO3JldHVybiBpfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmKGlbcl09ZVtyXSl9cmV0dXJuIGl9ZnVuY3Rpb24gVGYoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBBZihlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PV9mKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIENmKGUpe3JldHVybihDZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24geGYoZSx0KXtyZXR1cm4oeGY9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBJZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksQWYodGhpcyxDZih0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJnhmKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToicmVuZGVyRXJyb3JCYXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm9mZnNldCxyPWUubGF5b3V0LG49ZS53aWR0aCxpPWUuZGF0YUtleSxvPWUuZGF0YSxhPWUuZGF0YVBvaW50Rm9ybWF0dGVyLHM9ZS54QXhpcyx1PWUueUF4aXMsYz13ZihlLFsib2Zmc2V0IiwibGF5b3V0Iiwid2lkdGgiLCJkYXRhS2V5IiwiZGF0YSIsImRhdGFQb2ludEZvcm1hdHRlciIsInhBeGlzIiwieUF4aXMiXSksZj1lZShjKTtyZXR1cm4gby5tYXAoZnVuY3Rpb24oZSxvKXt2YXIgYyxsLGgscCxkLHksdixtLGIsXyxTLEUsdz1hKGUsaSksVD13LngsQT13LnksQz13LnZhbHVlLHg9dy5lcnJvclZhbDtpZigheClyZXR1cm4gbnVsbDtpZihBcnJheS5pc0FycmF5KHgpKXt2YXIgST1FZih4LDIpO1M9SVswXSxFPUlbMV19ZWxzZSBTPUU9eDtyZXR1cm4idmVydGljYWwiPT09cj8odj1zLnNjYWxlLGw9QSt0LGg9digoYz1DKS1TKSxwPWwrbixtPXt4MTpkPXYoYytFKSx5MTpwLHgyOmQseTI6eT1sLW59LGI9e3gxOmgseTE6bCx4MjpkLHkyOmx9LF89e3gxOmgseTE6cCx4MjpoLHkyOnl9KToiaG9yaXpvbnRhbCI9PT1yJiYodj11LnNjYWxlLGg9KGM9VCt0KS1uLGQ9YytuLHA9digobD1DKS1TKSxtPXt4MTpoLHkxOnk9dihsK0UpLHgyOmQseTI6eX0sYj17eDE6Yyx5MTpwLHgyOmMseTI6eX0sXz17eDE6aCx5MTpwLHgyOmQseTI6cH0pLGcuYS5jcmVhdGVFbGVtZW50KHpzLFNmKHtjbGFzc05hbWU6InJlY2hhcnRzLWVycm9yQmFyIixrZXk6ImJhci0iLmNvbmNhdChvKX0sZiksZy5hLmNyZWF0ZUVsZW1lbnQoImxpbmUiLG0pLGcuYS5jcmVhdGVFbGVtZW50KCJsaW5lIixiKSxnLmEuY3JlYXRlRWxlbWVudCgibGluZSIsXykpfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6InJlY2hhcnRzLWVycm9yQmFycyJ9LHRoaXMucmVuZGVyRXJyb3JCYXJzKCkpfX1dKSYmVGYoci5wcm90b3R5cGUsbiksaSYmVGYocixpKSx0fSgpO0lmLnByb3BUeXBlcz17ZGF0YUtleTptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXIsbS5hLmZ1bmNdKS5pc1JlcXVpcmVkLGRhdGE6bS5hLmFycmF5LHhBeGlzOm0uYS5vYmplY3QseUF4aXM6bS5hLm9iamVjdCxsYXlvdXQ6bS5hLnN0cmluZyxkYXRhUG9pbnRGb3JtYXR0ZXI6bS5hLmZ1bmMsc3Ryb2tlOm0uYS5zdHJpbmcsc3Ryb2tlV2lkdGg6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLG9mZnNldDptLmEubnVtYmVyfSxJZi5kZWZhdWx0UHJvcHM9e3N0cm9rZToiYmxhY2siLHN0cm9rZVdpZHRoOjEuNSx3aWR0aDo1LG9mZnNldDowLGxheW91dDoiaG9yaXpvbnRhbCJ9O3ZhciBrZj1JZixPZj1yKDEyNCksTmY9ci5uKE9mKTtmdW5jdGlvbiBQZigpe3JldHVybihQZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFJmKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT17fSxvPU9iamVjdC5rZXlzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8KGlbcl09ZVtyXSk7cmV0dXJuIGl9KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYoaVtyXT1lW3JdKX1yZXR1cm4gaX12YXIgQmY9e3dpZHRoOm0uYS5udW1iZXIuaXNSZXF1aXJlZCxoZWlnaHQ6bS5hLm51bWJlci5pc1JlcXVpcmVkLHZpZXdCb3g6bS5hLnNoYXBlKHt4Om0uYS5udW1iZXIseTptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXJ9KSxjbGFzc05hbWU6bS5hLnN0cmluZyxzdHlsZTptLmEub2JqZWN0LGNoaWxkcmVuOm0uYS5vbmVPZlR5cGUoW20uYS5hcnJheU9mKG0uYS5ub2RlKSxtLmEubm9kZV0pfTtmdW5jdGlvbiBNZihlKXt2YXIgdD1lLmNoaWxkcmVuLHI9ZS53aWR0aCxuPWUuaGVpZ2h0LGk9ZS52aWV3Qm94LG89ZS5jbGFzc05hbWUsYT1lLnN0eWxlLHM9UmYoZSxbImNoaWxkcmVuIiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiY2xhc3NOYW1lIiwic3R5bGUiXSksdT1pfHx7d2lkdGg6cixoZWlnaHQ6bix4OjAseTowfSxjPV8oKSgicmVjaGFydHMtc3VyZmFjZSIsbyksZj1lZShzKTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoInN2ZyIsUGYoe30sZix7Y2xhc3NOYW1lOmMsd2lkdGg6cixoZWlnaHQ6bixzdHlsZTphLHZpZXdCb3g6IiIuY29uY2F0KHUueCwiICIpLmNvbmNhdCh1LnksIiAiKS5jb25jYXQodS53aWR0aCwiICIpLmNvbmNhdCh1LmhlaWdodCksdmVyc2lvbjoiMS4xIn0pLHQpfU1mLnByb3BUeXBlcz1CZjt2YXIgTGYsRGYsamYsVWY9TWY7ZnVuY3Rpb24gRmYoZSl7cmV0dXJuKEZmPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gVmYoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHFmKCl7cmV0dXJuKHFmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gS2YoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB6ZihlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PUZmKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIEdmKGUpe3JldHVybihHZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gSGYoZSx0KXtyZXR1cm4oSGY9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBXZixZZixYZixRZj17c3ltYm9sQ2lyY2xlOldhLHN5bWJvbENyb3NzOllhLHN5bWJvbERpYW1vbmQ6JGEsc3ltYm9sU3F1YXJlOnJzLHN5bWJvbFN0YXI6dHMsc3ltYm9sVHJpYW5nbGU6aXMsc3ltYm9sV3llOnVzfSwkZj1NYXRoLlBJLzE4MCxaZj1LKChqZj1EZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksemYodGhpcyxHZih0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJkhmKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToiZ2V0UGF0aCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zaXplLHI9ZS5zaXplVHlwZSxuPWUudHlwZSxpPWZ1bmN0aW9uKGUpe3ZhciB0PSJzeW1ib2wiLmNvbmNhdChlLnNsaWNlKDAsMSkudG9VcHBlckNhc2UoKSkuY29uY2F0KGUuc2xpY2UoMSkpO3JldHVybiBRZlt0XXx8V2F9KG4pO3JldHVybiBmdW5jdGlvbigpe3ZhciBlPUJhKFdhKSx0PUJhKDY0KSxyPW51bGw7ZnVuY3Rpb24gbigpe3ZhciBuO2lmKHJ8fChyPW49UmEoKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksbilyZXR1cm4gcj1udWxsLG4rIiJ8fG51bGx9cmV0dXJuIG4udHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT09dHlwZW9mIHQ/dDpCYSh0KSxuKTplfSxuLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09PXR5cGVvZiBlP2U6QmEoK2UpLG4pOnR9LG4uY29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1lP251bGw6ZSxuKTpyfSxufSgpLnR5cGUoaSkuc2l6ZShmdW5jdGlvbihlLHQscil7aWYoImFyZWEiPT09dClyZXR1cm4gZTtzd2l0Y2gocil7Y2FzZSJjcm9zcyI6cmV0dXJuIDUqZSplLzk7Y2FzZSJkaWFtb25kIjpyZXR1cm4uNSplKmUvTWF0aC5zcXJ0KDMpO2Nhc2Uic3F1YXJlIjpyZXR1cm4gZSplO2Nhc2Uic3RhciI6dmFyIG49MTgqJGY7cmV0dXJuIDEuMjUqZSplKihNYXRoLnRhbihuKS1NYXRoLnRhbigyKm4pKk1hdGgucG93KE1hdGgudGFuKG4pLDIpKTtjYXNlInRyaWFuZ2xlIjpyZXR1cm4gTWF0aC5zcXJ0KDMpKmUqZS80O2Nhc2Uid3llIjpyZXR1cm4oMjEtMTAqTWF0aC5zcXJ0KDMpKSplKmUvODtkZWZhdWx0OnJldHVybiBNYXRoLlBJKmUqZS80fX0odCxyLG4pKSgpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNsYXNzTmFtZSxyPWUuY3gsbj1lLmN5LGk9ZS5zaXplO3JldHVybiByPT09K3ImJm49PT0rbiYmaT09PStpP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIixxZih7fSxlZSh0aGlzLnByb3BzKSxyZSh0aGlzLnByb3BzKSx7Y2xhc3NOYW1lOl8oKSgicmVjaGFydHMtc3ltYm9scyIsdCksdHJhbnNmb3JtOiJ0cmFuc2xhdGUoIi5jb25jYXQociwiLCAiKS5jb25jYXQobiwiKSIpLGQ6dGhpcy5nZXRQYXRoKCl9KSk6bnVsbH19XSkmJktmKHIucHJvdG90eXBlLG4pLGkmJktmKHIsaSksdH0oKSxEZi5kaXNwbGF5TmFtZT0iU3ltYm9scyIsRGYucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1ZmKGUsdCxyW3RdKX0pfXJldHVybiBlfSh7fSxILHtjbGFzc05hbWU6bS5hLnN0cmluZyx0eXBlOm0uYS5vbmVPZihbImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiLCJ0cmlhbmdsZSIsInd5ZSJdKSxjeDptLmEubnVtYmVyLGN5Om0uYS5udW1iZXIsc2l6ZTptLmEubnVtYmVyLHNpemVUeXBlOm0uYS5vbmVPZihbImFyZWEiLCJkaWFtZXRlciJdKX0pLERmLmRlZmF1bHRQcm9wcz17dHlwZToiY2lyY2xlIixzaXplOjY0LHNpemVUeXBlOiJhcmVhIn0sTGY9amYpKXx8TGY7ZnVuY3Rpb24gSmYoZSl7cmV0dXJuKEpmPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gZWwoKXtyZXR1cm4oZWw9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB0bChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gcmwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBubChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PUpmKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIGlsKGUpe3JldHVybihpbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gb2woZSx0KXtyZXR1cm4ob2w9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBhbCxzbCx1bCxjbD1YLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4ibm9uZSIhPT1lfSksZmw9SygoWGY9WWY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLG5sKHRoaXMsaWwodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZvbChlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsKG49W3trZXk6InJlbmRlckljb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuaW5hY3RpdmVDb2xvcixyPWUuaW5hY3RpdmU/dDplLmNvbG9yO3JldHVybiJwbGFpbmxpbmUiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJsaW5lIix7c3Ryb2tlV2lkdGg6NCxmaWxsOiJub25lIixzdHJva2U6cixzdHJva2VEYXNoYXJyYXk6ZS5wYXlsb2FkLnN0cm9rZURhc2hhcnJheSx4MTowLHkxOjE2LHgyOjMyLHkyOjE2LGNsYXNzTmFtZToicmVjaGFydHMtbGVnZW5kLWljb24ifSk6ImxpbmUiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7c3Ryb2tlV2lkdGg6NCxmaWxsOiJub25lIixzdHJva2U6cixkOiJNMCwiLmNvbmNhdCgxNiwiaCIpLmNvbmNhdCgzMi8zLCJcbiAgICAgICAgICAgIEEiKS5jb25jYXQoMzIvNiwiLCIpLmNvbmNhdCgzMi82LCIsMCwxLDEsIikuY29uY2F0KDMyLzMqMiwiLCIpLmNvbmNhdCgxNiwiXG4gICAgICAgICAgICBIIikuY29uY2F0KDMyLCJNIikuY29uY2F0KDMyLzMqMiwiLCIpLmNvbmNhdCgxNiwiXG4gICAgICAgICAgICBBIikuY29uY2F0KDMyLzYsIiwiKS5jb25jYXQoMzIvNiwiLDAsMSwxLCIpLmNvbmNhdCgzMi8zLCIsIikuY29uY2F0KDE2KSxjbGFzc05hbWU6InJlY2hhcnRzLWxlZw==",
    "2019.12.27 16:40": "base64:KXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBlZigpe3JldHVybihlZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHRmKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gcmYoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1aYyh0KSYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBuZihlKXtyZXR1cm4obmY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIG9mKGUsdCl7cmV0dXJuKG9mPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX12YXIgYWYsc2YsdWYsY2Y9ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbyxhPU1hdGgubWluKE1hdGguYWJzKHIpLzIsTWF0aC5hYnMobikvMikscz1uPj0wPzE6LTEsdT1yPj0wPzE6LTEsYz1uPj0wJiZyPj0wfHxuPDAmJnI8MD8xOjA7aWYoYT4wJiZpIGluc3RhbmNlb2YgQXJyYXkpe2Zvcih2YXIgZj1bXSxsPTA7bDw0O2wrKylmW2xdPWlbbF0+YT9hOmlbbF07bz0iTSIuY29uY2F0KGUsIiwiKS5jb25jYXQodCtzKmZbMF0pLGZbMF0+MCYmKG8rPSJBICIuY29uY2F0KGZbMF0sIiwiKS5jb25jYXQoZlswXSwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3UqZlswXSwiLCIpLmNvbmNhdCh0KSksbys9IkwgIi5jb25jYXQoZStyLXUqZlsxXSwiLCIpLmNvbmNhdCh0KSxmWzFdPjAmJihvKz0iQSAiLmNvbmNhdChmWzFdLCIsIikuY29uY2F0KGZbMV0sIiwwLDAsIikuY29uY2F0KGMsIixcbiAgICAgICAgIikuY29uY2F0KGUrciwiLCIpLmNvbmNhdCh0K3MqZlsxXSkpLG8rPSJMICIuY29uY2F0KGUrciwiLCIpLmNvbmNhdCh0K24tcypmWzJdKSxmWzJdPjAmJihvKz0iQSAiLmNvbmNhdChmWzJdLCIsIikuY29uY2F0KGZbMl0sIiwwLDAsIikuY29uY2F0KGMsIixcbiAgICAgICAgIikuY29uY2F0KGUrci11KmZbMl0sIiwiKS5jb25jYXQodCtuKSksbys9IkwgIi5jb25jYXQoZSt1KmZbM10sIiwiKS5jb25jYXQodCtuKSxmWzNdPjAmJihvKz0iQSAiLmNvbmNhdChmWzNdLCIsIikuY29uY2F0KGZbM10sIiwwLDAsIikuY29uY2F0KGMsIixcbiAgICAgICAgIikuY29uY2F0KGUsIiwiKS5jb25jYXQodCtuLXMqZlszXSkpLG8rPSJaIn1lbHNlIGlmKGE+MCYmaT09PStpJiZpPjApe3ZhciBoPU1hdGgubWluKGEsaSk7bz0iTSAiLmNvbmNhdChlLCIsIikuY29uY2F0KHQrcypoLCJcbiAgICAgICAgICAgIEEgIikuY29uY2F0KGgsIiwiKS5jb25jYXQoaCwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3UqaCwiLCIpLmNvbmNhdCh0LCJcbiAgICAgICAgICAgIEwgIikuY29uY2F0KGUrci11KmgsIiwiKS5jb25jYXQodCwiXG4gICAgICAgICAgICBBICIpLmNvbmNhdChoLCIsIikuY29uY2F0KGgsIiwwLDAsIikuY29uY2F0KGMsIiwiKS5jb25jYXQoZStyLCIsIikuY29uY2F0KHQrcypoLCJcbiAgICAgICAgICAgIEwgIikuY29uY2F0KGUrciwiLCIpLmNvbmNhdCh0K24tcypoLCJcbiAgICAgICAgICAgIEEgIikuY29uY2F0KGgsIiwiKS5jb25jYXQoaCwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3ItdSpoLCIsIikuY29uY2F0KHQrbiwiXG4gICAgICAgICAgICBMICIpLmNvbmNhdChlK3UqaCwiLCIpLmNvbmNhdCh0K24sIlxuICAgICAgICAgICAgQSAiKS5jb25jYXQoaCwiLCIpLmNvbmNhdChoLCIsMCwwLCIpLmNvbmNhdChjLCIsIikuY29uY2F0KGUsIiwiKS5jb25jYXQodCtuLXMqaCwiIFoiKX1lbHNlIG89Ik0gIi5jb25jYXQoZSwiLCIpLmNvbmNhdCh0LCIgaCAiKS5jb25jYXQociwiIHYgIikuY29uY2F0KG4sIiBoICIpLmNvbmNhdCgtciwiIFoiKTtyZXR1cm4gb30sZmY9SygoUWM9WGM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLHI7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspaVtvXT1hcmd1bWVudHNbb107cmV0dXJuKHI9cmYodGhpcywoZT1uZih0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSkuc3RhdGU9e3RvdGFsTGVuZ3RoOi0xfSxyfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJm9mKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlJiZ0aGlzLm5vZGUuZ2V0VG90YWxMZW5ndGgpdHJ5e3ZhciBlPXRoaXMubm9kZS5nZXRUb3RhbExlbmd0aCgpO2UmJnRoaXMuc2V0U3RhdGUoe3RvdGFsTGVuZ3RoOmV9KX1jYXRjaCh0KXt9fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLHI9dC54LG49dC55LGk9dC53aWR0aCxvPXQuaGVpZ2h0LGE9dC5yYWRpdXMscz10LmNsYXNzTmFtZSx1PXRoaXMuc3RhdGUudG90YWxMZW5ndGgsYz10aGlzLnByb3BzLGY9Yy5hbmltYXRpb25FYXNpbmcsbD1jLmFuaW1hdGlvbkR1cmF0aW9uLGg9Yy5hbmltYXRpb25CZWdpbixwPWMuaXNBbmltYXRpb25BY3RpdmUsZD1jLmlzVXBkYXRlQW5pbWF0aW9uQWN0aXZlO2lmKHIhPT0rcnx8biE9PStufHxpIT09K2l8fG8hPT0rb3x8MD09PWl8fDA9PT1vKXJldHVybiBudWxsO3ZhciB5PV8oKSgicmVjaGFydHMtcmVjdGFuZ2xlIixzKTtyZXR1cm4gZD9nLmEuY3JlYXRlRWxlbWVudCgkYyx7Y2FuQmVnaW46dT4wLGZyb206e3dpZHRoOmksaGVpZ2h0Om8seDpyLHk6bn0sdG86e3dpZHRoOmksaGVpZ2h0Om8seDpyLHk6bn0sZHVyYXRpb246bCxhbmltYXRpb25FYXNpbmc6Zixpc0FjdGl2ZTpkfSxmdW5jdGlvbih0KXt2YXIgcj10LndpZHRoLG49dC5oZWlnaHQsaT10Lngsbz10Lnk7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KCRjLHtjYW5CZWdpbjp1PjAsZnJvbToiMHB4ICIuY29uY2F0KC0xPT09dT8xOnUsInB4IiksdG86IiIuY29uY2F0KHUsInB4IDBweCIpLGF0dHJpYnV0ZU5hbWU6InN0cm9rZURhc2hhcnJheSIsYmVnaW46aCxkdXJhdGlvbjpsLGlzQWN0aXZlOnAsZWFzaW5nOmZ9LGcuYS5jcmVhdGVFbGVtZW50KCJwYXRoIixlZih7fSxlZShlLnByb3BzKSxyZShlLnByb3BzKSx7Y2xhc3NOYW1lOnksZDpjZihpLG8scixuLGEpLHJlZjpmdW5jdGlvbih0KXtlLm5vZGU9dH19KSkpfSk6Zy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLGVmKHt9LGVlKHRoaXMucHJvcHMpLHJlKHRoaXMucHJvcHMpLHtjbGFzc05hbWU6eSxkOmNmKHIsbixpLG8sYSl9KSl9fV0pJiZ0ZihyLnByb3RvdHlwZSxuKSxpJiZ0ZihyLGkpLHR9KCksWGMuZGlzcGxheU5hbWU9IlJlY3RhbmdsZSIsWGMucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe0pjKGUsdCxyW3RdKX0pfXJldHVybiBlfSh7fSxILFcse2NsYXNzTmFtZTptLmEuc3RyaW5nLHg6bS5hLm51bWJlcix5Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcixyYWRpdXM6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuYXJyYXldKSxpc0FuaW1hdGlvbkFjdGl2ZTptLmEuYm9vbCxpc1VwZGF0ZUFuaW1hdGlvbkFjdGl2ZTptLmEuYm9vbCxhbmltYXRpb25CZWdpbjptLmEubnVtYmVyLGFuaW1hdGlvbkR1cmF0aW9uOm0uYS5udW1iZXIsYW5pbWF0aW9uRWFzaW5nOm0uYS5vbmVPZihbImVhc2UiLCJlYXNlLWluIiwiZWFzZS1vdXQiLCJlYXNlLWluLW91dCIsImxpbmVhciJdKX0pLFhjLmRlZmF1bHRQcm9wcz17eDowLHk6MCx3aWR0aDowLGhlaWdodDowLHJhZGl1czowLGlzQW5pbWF0aW9uQWN0aXZlOiExLGlzVXBkYXRlQW5pbWF0aW9uQWN0aXZlOiExLGFuaW1hdGlvbkJlZ2luOjAsYW5pbWF0aW9uRHVyYXRpb246MTUwMCxhbmltYXRpb25FYXNpbmc6ImVhc2UifSxZYz1RYykpfHxZYztmdW5jdGlvbiBsZihlKXtyZXR1cm4obGY9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBoZigpe3JldHVybihoZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHBmKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RmKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIGRmKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiB5ZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIGdmKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09bGYodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gdmYoZSl7cmV0dXJuKHZmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBtZihlLHQpe3JldHVybihtZj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIGJmPUsoKHVmPXNmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSxnZih0aGlzLHZmKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmbWYoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LGk9W3trZXk6InJlbmRlclJlY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcuYS5pc1ZhbGlkRWxlbWVudChlKT9nLmEuY2xvbmVFbGVtZW50KGUsdCk6dSgpKGUpP2UodCk6Zy5hLmNyZWF0ZUVsZW1lbnQoZmYsaGYoe30sdCx7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1yZWZlcmVuY2UtYXJlYS1yZWN0In0pKX19XSwobj1be2tleToiZ2V0UmVjdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9dGhpcy5wcm9wcyxvPWkueDEsYT1pLngyLHM9aS55MSx1PWkueTIsYz1pLnhBeGlzLGY9aS55QXhpcyxsPWh1LmNyZWF0ZSh7eDpjLnNjYWxlLHk6Zi5zY2FsZX0pLGg9e3g6ZT9sLnguYXBwbHkobyk6bC54LnJhbmdlTWluLHk6cj9sLnkuYXBwbHkocyk6bC55LnJhbmdlTWlufSxwPXt4OnQ/bC54LmFwcGx5KGEpOmwueC5yYW5nZU1heCx5Om4/bC55LmFwcGx5KHUpOmwueS5yYW5nZU1heH07cmV0dXJuIVZsKHRoaXMucHJvcHMsImRpc2NhcmQiKXx8bC5pc0luUmFuZ2UoaCkmJmwuaXNJblJhbmdlKHApP3N1KGgscCk6bnVsbH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS54MSxyPWUueDIsbj1lLnkxLGk9ZS55MixvPWUuY2xhc3NOYW1lLGE9KGUuYWx3YXlzU2hvdyxlLmNsaXBQYXRoSWQpLHM9Qih0KSx1PUIociksYz1CKG4pLGY9QihpKTtpZighcyYmIXUmJiFjJiYhZilyZXR1cm4gbnVsbDt2YXIgbD10aGlzLmdldFJlY3Qocyx1LGMsZik7aWYoIWwpcmV0dXJuIG51bGw7dmFyIGg9dGhpcy5wcm9wcy5zaGFwZSxwPVZsKHRoaXMucHJvcHMsImhpZGRlbiIpPyJ1cmwoIyIuY29uY2F0KGEsIikiKTp2b2lkIDA7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6XygpKCJyZWNoYXJ0cy1yZWZlcmVuY2UtYXJlYSIsbyl9LHRoaXMuY29uc3RydWN0b3IucmVuZGVyUmVjdChoLHBmKHtjbGlwUGF0aDpwfSx0aGlzLnByb3BzLGwpKSxnaC5yZW5kZXJDYWxsQnlQYXJlbnQodGhpcy5wcm9wcyxsKSl9fV0pJiZ5ZihyLnByb3RvdHlwZSxuKSxpJiZ5ZihyLGkpLHR9KCksc2YuZGlzcGxheU5hbWU9IlJlZmVyZW5jZUFyZWEiLHNmLnByb3BUeXBlcz1wZih7fSxILHt2aWV3Qm94Om0uYS5zaGFwZSh7eDptLmEubnVtYmVyLHk6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLGhlaWdodDptLmEubnVtYmVyfSkseEF4aXM6bS5hLm9iamVjdCx5QXhpczptLmEub2JqZWN0LGlzRnJvbnQ6bS5hLmJvb2wsYWx3YXlzU2hvdzptLmEuYm9vbCxpZk92ZXJmbG93Om0uYS5vbmVPZihbImhpZGRlbiIsInZpc2libGUiLCJkaXNjYXJkIiwiZXh0ZW5kRG9tYWluIl0pLHgxOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHgyOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHkxOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHkyOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLGNsYXNzTmFtZTptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5zdHJpbmddKSx5QXhpc0lkOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLHhBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSksc2hhcGU6bS5hLm9uZU9mVHlwZShbbS5hLmZ1bmMsbS5hLmVsZW1lbnRdKX0pLHNmLmRlZmF1bHRQcm9wcz17aXNGcm9udDohMSxpZk92ZXJmbG93OiJkaXNjYXJkIix4QXhpc0lkOjAseUF4aXNJZDowLHI6MTAsZmlsbDoiI2NjYyIsZmlsbE9wYWNpdHk6LjUsc3Ryb2tlOiJub25lIixzdHJva2VXaWR0aDoxfSxhZj11ZikpfHxhZjtmdW5jdGlvbiBfZihlKXtyZXR1cm4oX2Y9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBTZigpe3JldHVybihTZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEVmKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsaT0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChhLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2godSl7aT0hMCxvPXV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiB3ZihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9e30sbz1PYmplY3Qua2V5cyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fChpW3JdPWVbcl0pO3JldHVybiBpfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmKGlbcl09ZVtyXSl9cmV0dXJuIGl9ZnVuY3Rpb24gVGYoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBBZihlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PV9mKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIENmKGUpe3JldHVybihDZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24geGYoZSx0KXtyZXR1cm4oeGY9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBJZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksQWYodGhpcyxDZih0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJnhmKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToicmVuZGVyRXJyb3JCYXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm9mZnNldCxyPWUubGF5b3V0LG49ZS53aWR0aCxpPWUuZGF0YUtleSxvPWUuZGF0YSxhPWUuZGF0YVBvaW50Rm9ybWF0dGVyLHM9ZS54QXhpcyx1PWUueUF4aXMsYz13ZihlLFsib2Zmc2V0IiwibGF5b3V0Iiwid2lkdGgiLCJkYXRhS2V5IiwiZGF0YSIsImRhdGFQb2ludEZvcm1hdHRlciIsInhBeGlzIiwieUF4aXMiXSksZj1lZShjKTtyZXR1cm4gby5tYXAoZnVuY3Rpb24oZSxvKXt2YXIgYyxsLGgscCxkLHksdixtLGIsXyxTLEUsdz1hKGUsaSksVD13LngsQT13LnksQz13LnZhbHVlLHg9dy5lcnJvclZhbDtpZigheClyZXR1cm4gbnVsbDtpZihBcnJheS5pc0FycmF5KHgpKXt2YXIgST1FZih4LDIpO1M9SVswXSxFPUlbMV19ZWxzZSBTPUU9eDtyZXR1cm4idmVydGljYWwiPT09cj8odj1zLnNjYWxlLGw9QSt0LGg9digoYz1DKS1TKSxwPWwrbixtPXt4MTpkPXYoYytFKSx5MTpwLHgyOmQseTI6eT1sLW59LGI9e3gxOmgseTE6bCx4MjpkLHkyOmx9LF89e3gxOmgseTE6cCx4MjpoLHkyOnl9KToiaG9yaXpvbnRhbCI9PT1yJiYodj11LnNjYWxlLGg9KGM9VCt0KS1uLGQ9YytuLHA9digobD1DKS1TKSxtPXt4MTpoLHkxOnk9dihsK0UpLHgyOmQseTI6eX0sYj17eDE6Yyx5MTpwLHgyOmMseTI6eX0sXz17eDE6aCx5MTpwLHgyOmQseTI6cH0pLGcuYS5jcmVhdGVFbGVtZW50KHpzLFNmKHtjbGFzc05hbWU6InJlY2hhcnRzLWVycm9yQmFyIixrZXk6ImJhci0iLmNvbmNhdChvKX0sZiksZy5hLmNyZWF0ZUVsZW1lbnQoImxpbmUiLG0pLGcuYS5jcmVhdGVFbGVtZW50KCJsaW5lIixiKSxnLmEuY3JlYXRlRWxlbWVudCgibGluZSIsXykpfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6InJlY2hhcnRzLWVycm9yQmFycyJ9LHRoaXMucmVuZGVyRXJyb3JCYXJzKCkpfX1dKSYmVGYoci5wcm90b3R5cGUsbiksaSYmVGYocixpKSx0fSgpO0lmLnByb3BUeXBlcz17ZGF0YUtleTptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXIsbS5hLmZ1bmNdKS5pc1JlcXVpcmVkLGRhdGE6bS5hLmFycmF5LHhBeGlzOm0uYS5vYmplY3QseUF4aXM6bS5hLm9iamVjdCxsYXlvdXQ6bS5hLnN0cmluZyxkYXRhUG9pbnRGb3JtYXR0ZXI6bS5hLmZ1bmMsc3Ryb2tlOm0uYS5zdHJpbmcsc3Ryb2tlV2lkdGg6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLG9mZnNldDptLmEubnVtYmVyfSxJZi5kZWZhdWx0UHJvcHM9e3N0cm9rZToiYmxhY2siLHN0cm9rZVdpZHRoOjEuNSx3aWR0aDo1LG9mZnNldDowLGxheW91dDoiaG9yaXpvbnRhbCJ9O3ZhciBrZj1JZixPZj1yKDEyNCksTmY9ci5uKE9mKTtmdW5jdGlvbiBQZigpe3JldHVybihQZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFJmKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT17fSxvPU9iamVjdC5rZXlzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8KGlbcl09ZVtyXSk7cmV0dXJuIGl9KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYoaVtyXT1lW3JdKX1yZXR1cm4gaX12YXIgQmY9e3dpZHRoOm0uYS5udW1iZXIuaXNSZXF1aXJlZCxoZWlnaHQ6bS5hLm51bWJlci5pc1JlcXVpcmVkLHZpZXdCb3g6bS5hLnNoYXBlKHt4Om0uYS5udW1iZXIseTptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXJ9KSxjbGFzc05hbWU6bS5hLnN0cmluZyxzdHlsZTptLmEub2JqZWN0LGNoaWxkcmVuOm0uYS5vbmVPZlR5cGUoW20uYS5hcnJheU9mKG0uYS5ub2RlKSxtLmEubm9kZV0pfTtmdW5jdGlvbiBNZihlKXt2YXIgdD1lLmNoaWxkcmVuLHI9ZS53aWR0aCxuPWUuaGVpZ2h0LGk9ZS52aWV3Qm94LG89ZS5jbGFzc05hbWUsYT1lLnN0eWxlLHM9UmYoZSxbImNoaWxkcmVuIiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiY2xhc3NOYW1lIiwic3R5bGUiXSksdT1pfHx7d2lkdGg6cixoZWlnaHQ6bix4OjAseTowfSxjPV8oKSgicmVjaGFydHMtc3VyZmFjZSIsbyksZj1lZShzKTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoInN2ZyIsUGYoe30sZix7Y2xhc3NOYW1lOmMsd2lkdGg6cixoZWlnaHQ6bixzdHlsZTphLHZpZXdCb3g6IiIuY29uY2F0KHUueCwiICIpLmNvbmNhdCh1LnksIiAiKS5jb25jYXQodS53aWR0aCwiICIpLmNvbmNhdCh1LmhlaWdodCksdmVyc2lvbjoiMS4xIn0pLHQpfU1mLnByb3BUeXBlcz1CZjt2YXIgTGYsRGYsamYsVWY9TWY7ZnVuY3Rpb24gRmYoZSl7cmV0dXJuKEZmPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gVmYoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHFmKCl7cmV0dXJuKHFmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gS2YoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB6ZihlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PUZmKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIEdmKGUpe3JldHVybihHZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gSGYoZSx0KXtyZXR1cm4oSGY9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBXZixZZixYZixRZj17c3ltYm9sQ2lyY2xlOldhLHN5bWJvbENyb3NzOllhLHN5bWJvbERpYW1vbmQ6JGEsc3ltYm9sU3F1YXJlOnJzLHN5bWJvbFN0YXI6dHMsc3ltYm9sVHJpYW5nbGU6aXMsc3ltYm9sV3llOnVzfSwkZj1NYXRoLlBJLzE4MCxaZj1LKChqZj1EZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksemYodGhpcyxHZih0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJkhmKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToiZ2V0UGF0aCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zaXplLHI9ZS5zaXplVHlwZSxuPWUudHlwZSxpPWZ1bmN0aW9uKGUpe3ZhciB0PSJzeW1ib2wiLmNvbmNhdChlLnNsaWNlKDAsMSkudG9VcHBlckNhc2UoKSkuY29uY2F0KGUuc2xpY2UoMSkpO3JldHVybiBRZlt0XXx8V2F9KG4pO3JldHVybiBmdW5jdGlvbigpe3ZhciBlPUJhKFdhKSx0PUJhKDY0KSxyPW51bGw7ZnVuY3Rpb24gbigpe3ZhciBuO2lmKHJ8fChyPW49UmEoKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksbilyZXR1cm4gcj1udWxsLG4rIiJ8fG51bGx9cmV0dXJuIG4udHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT09dHlwZW9mIHQ/dDpCYSh0KSxuKTplfSxuLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09PXR5cGVvZiBlP2U6QmEoK2UpLG4pOnR9LG4uY29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1lP251bGw6ZSxuKTpyfSxufSgpLnR5cGUoaSkuc2l6ZShmdW5jdGlvbihlLHQscil7aWYoImFyZWEiPT09dClyZXR1cm4gZTtzd2l0Y2gocil7Y2FzZSJjcm9zcyI6cmV0dXJuIDUqZSplLzk7Y2FzZSJkaWFtb25kIjpyZXR1cm4uNSplKmUvTWF0aC5zcXJ0KDMpO2Nhc2Uic3F1YXJlIjpyZXR1cm4gZSplO2Nhc2Uic3RhciI6dmFyIG49MTgqJGY7cmV0dXJuIDEuMjUqZSplKihNYXRoLnRhbihuKS1NYXRoLnRhbigyKm4pKk1hdGgucG93KE1hdGgudGFuKG4pLDIpKTtjYXNlInRyaWFuZ2xlIjpyZXR1cm4gTWF0aC5zcXJ0KDMpKmUqZS80O2Nhc2Uid3llIjpyZXR1cm4oMjEtMTAqTWF0aC5zcXJ0KDMpKSplKmUvODtkZWZhdWx0OnJldHVybiBNYXRoLlBJKmUqZS80fX0odCxyLG4pKSgpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNsYXNzTmFtZSxyPWUuY3gsbj1lLmN5LGk9ZS5zaXplO3JldHVybiByPT09K3ImJm49PT0rbiYmaT09PStpP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIixxZih7fSxlZSh0aGlzLnByb3BzKSxyZSh0aGlzLnByb3BzKSx7Y2xhc3NOYW1lOl8oKSgicmVjaGFydHMtc3ltYm9scyIsdCksdHJhbnNmb3JtOiJ0cmFuc2xhdGUoIi5jb25jYXQociwiLCAiKS5jb25jYXQobiwiKSIpLGQ6dGhpcy5nZXRQYXRoKCl9KSk6bnVsbH19XSkmJktmKHIucHJvdG90eXBlLG4pLGkmJktmKHIsaSksdH0oKSxEZi5kaXNwbGF5TmFtZT0iU3ltYm9scyIsRGYucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1ZmKGUsdCxyW3RdKX0pfXJldHVybiBlfSh7fSxILHtjbGFzc05hbWU6bS5hLnN0cmluZyx0eXBlOm0uYS5vbmVPZihbImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiLCJ0cmlhbmdsZSIsInd5ZSJdKSxjeDptLmEubnVtYmVyLGN5Om0uYS5udW1iZXIsc2l6ZTptLmEubnVtYmVyLHNpemVUeXBlOm0uYS5vbmVPZihbImFyZWEiLCJkaWFtZXRlciJdKX0pLERmLmRlZmF1bHRQcm9wcz17dHlwZToiY2lyY2xlIixzaXplOjY0LHNpemVUeXBlOiJhcmVhIn0sTGY9amYpKXx8TGY7ZnVuY3Rpb24gSmYoZSl7cmV0dXJuKEpmPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gZWwoKXtyZXR1cm4oZWw9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB0bChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gcmwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBubChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PUpmKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIGlsKGUpe3JldHVybihpbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gb2woZSx0KXtyZXR1cm4ob2w9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBhbCxzbCx1bCxjbD1YLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4ibm9uZSIhPT1lfSksZmw9SygoWGY9WWY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLG5sKHRoaXMsaWwodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZvbChlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsKG49W3trZXk6InJlbmRlckljb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuaW5hY3RpdmVDb2xvcixyPWUuaW5hY3RpdmU/dDplLmNvbG9yO3JldHVybiJwbGFpbmxpbmUiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJsaW5lIix7c3Ryb2tlV2lkdGg6NCxmaWxsOiJub25lIixzdHJva2U6cixzdHJva2VEYXNoYXJyYXk6ZS5wYXlsb2FkLnN0cm9rZURhc2hhcnJheSx4MTowLHkxOjE2LHgyOjMyLHkyOjE2LGNsYXNzTmFtZToicmVjaGFydHMtbGVnZW5kLWljb24ifSk6ImxpbmUiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7c3Ryb2tlV2lkdGg6NCxmaWxsOiJub25lIixzdHJva2U6cixkOiJNMCwiLmNvbmNhdCgxNiwiaCIpLmNvbmNhdCgzMi8zLCJcbiAgICAgICAgICAgIEEiKS5jb25jYXQoMzIvNiwiLCIpLmNvbmNhdCgzMi82LCIsMCwxLDEsIikuY29uY2F0KDMyLzMqMiwiLCIpLmNvbmNhdCgxNiwiXG4gICAgICAgICAgICBIIikuY29uY2F0KDMyLCJNIikuY29uY2F0KDMyLzMqMiwiLCIpLmNvbmNhdCgxNiwiXG4gICAgICAgICAgICBBIikuY29uY2F0KDMyLzYsIiwiKS5jb25jYXQoMzIvNiwiLDAsMSwxLCIpLmNvbmNhdCgzMi8zLCIsIikuY29uY2F0KDE2KSxjbGFzc05hbWU6InJlY2hhcnRzLWxlZw=="
}

github/deemru/w8io/169f3d6 
2.26 ms