3N4XMPXxEs6eZsy78Fgo4butfcAiwoDtG9P · data · 2.7c767379.chunk.js_13
{
    "2.7c767379.chunk.js_13": "base64:YWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBSdShlKXtyZXR1cm4oUnU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIEJ1KGUsdCl7cmV0dXJuKEJ1PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBNdSgpe3JldHVybihNdT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBMdT1LKCh3dT1FdT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksUHUodGhpcyxSdSh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJkJ1KGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToiZ2V0RW5kUG9pbnRzIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgaT10aGlzLnByb3BzLnZpZXdCb3gsbz1pLngsYT1pLnkscz1pLndpZHRoLHU9aS5oZWlnaHQ7aWYocil7dmFyIGM9dGhpcy5wcm9wcyxmPWMueSxsPWMueUF4aXMub3JpZW50YXRpb24saD1lLnkuYXBwbHkoZix7YmFuZEF3YXJlOiEwfSk7aWYoVmwodGhpcy5wcm9wcywiZGlzY2FyZCIpJiYhZS55LmlzSW5SYW5nZShoKSlyZXR1cm4gbnVsbDt2YXIgcD1be3g6bytzLHk6aH0se3g6byx5Omh9XTtyZXR1cm4ibGVmdCI9PT1sP3AucmV2ZXJzZSgpOnB9aWYodCl7dmFyIGQ9dGhpcy5wcm9wcyx5PWQueCxnPWQueEF4aXMub3JpZW50YXRpb24sdj1lLnguYXBwbHkoeSx7YmFuZEF3YXJlOiEwfSk7aWYoVmwodGhpcy5wcm9wcywiZGlzY2FyZCIpJiYhZS54LmlzSW5SYW5nZSh2KSlyZXR1cm4gbnVsbDt2YXIgbT1be3g6dix5OmErdX0se3g6dix5OmF9XTtyZXR1cm4idG9wIj09PWc/bS5yZXZlcnNlKCk6bX1pZihuKXt2YXIgYj10aGlzLnByb3BzLnNlZ21lbnQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KHQse2JhbmRBd2FyZTohMH0pfSk7cmV0dXJuIFZsKHRoaXMucHJvcHMsImRpc2NhcmQiKSYmQ3UoKShiLGZ1bmN0aW9uKHQpe3JldHVybiFlLmlzSW5SYW5nZSh0KX0pP251bGw6Yn1yZXR1cm4gbnVsbH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS54LHI9ZS55LG49ZS5zZWdtZW50LGk9ZS54QXhpcyxvPWUueUF4aXMsYT1lLnNoYXBlLHM9ZS5jbGFzc05hbWUsYz0oZS5hbHdheXNTaG93LGUuY2xpcFBhdGhJZCksZj1odS5jcmVhdGUoe3g6aS5zY2FsZSx5Om8uc2NhbGV9KSxsPUIodCksaD1CKHIpLHA9biYmMj09PW4ubGVuZ3RoLGQ9dGhpcy5nZXRFbmRQb2ludHMoZixsLGgscCk7aWYoIWQpcmV0dXJuIG51bGw7dmFyIHk9T3UoZCwyKSx2PXlbMF0sbT12LngsYj12LnksUz15WzFdLEU9Uy54LHc9Uy55LFQ9SXUoe2NsaXBQYXRoOlZsKHRoaXMucHJvcHMsImhpZGRlbiIpPyJ1cmwoIyIuY29uY2F0KGMsIikiKTp2b2lkIDB9LGVlKHRoaXMucHJvcHMpLHJlKHRoaXMucHJvcHMpLHt4MTptLHkxOmIseDI6RSx5Mjp3fSk7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6XygpKCJyZWNoYXJ0cy1yZWZlcmVuY2UtbGluZSIscyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcuYS5pc1ZhbGlkRWxlbWVudChlKT9nLmEuY2xvbmVFbGVtZW50KGUsdCk6dSgpKGUpP2UodCk6Zy5hLmNyZWF0ZUVsZW1lbnQoImxpbmUiLE11KHt9LHQse2NsYXNzTmFtZToicmVjaGFydHMtcmVmZXJlbmNlLWxpbmUtbGluZSJ9KSl9KGEsVCksZ2gucmVuZGVyQ2FsbEJ5UGFyZW50KHRoaXMucHJvcHMsZnVuY3Rpb24oZSl7dmFyIHQ9ZS54MSxyPWUueTEsbj1lLngyLGk9ZS55MjtyZXR1cm4gc3Uoe3g6dCx5OnJ9LHt4Om4seTppfSl9KHt4MTptLHkxOmIseDI6RSx5Mjp3fSkpKX19XSkmJk51KHIucHJvdG90eXBlLG4pLGkmJk51KHIsaSksdH0oKSxFdS5kaXNwbGF5TmFtZT0iUmVmZXJlbmNlTGluZSIsRXUucHJvcFR5cGVzPUl1KHt9LEgse3ZpZXdCb3g6bS5hLnNoYXBlKHt4Om0uYS5udW1iZXIseTptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXJ9KSx4QXhpczptLmEub2JqZWN0LHlBeGlzOm0uYS5vYmplY3QsaXNGcm9udDptLmEuYm9vbCxhbHdheXNTaG93Om0uYS5ib29sLGlmT3ZlcmZsb3c6bS5hLm9uZU9mKFsiaGlkZGVuIiwidmlzaWJsZSIsImRpc2NhcmQiLCJleHRlbmREb21haW4iXSkseDptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5zdHJpbmddKSx5Om0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHNlZ21lbnQ6bS5hLmFycmF5T2YobS5hLnNoYXBlKHt4Om0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHk6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSl9KSksY2xhc3NOYW1lOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHlBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSkseEF4aXNJZDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSxzaGFwZTptLmEuZnVuY30pLEV1LmRlZmF1bHRQcm9wcz17aXNGcm9udDohMSxpZk92ZXJmbG93OiJkaXNjYXJkIix4QXhpc0lkOjAseUF4aXNJZDowLGZpbGw6Im5vbmUiLHN0cm9rZToiI2NjYyIsZmlsbE9wYWNpdHk6MSxzdHJva2VXaWR0aDoxfSxTdT13dSkpfHxTdSxEdT1yKDg2KSxqdT1yLm4oRHUpO2Z1bmN0aW9uIFV1KGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLHI9LTE7anUoKShmdW5jdGlvbiBuKGkpe3I8MCYmKHI9aSksaS1yPnQ/KGUoaSkscj0tMSk6anUoKShuKX0pfWZ1bmN0aW9uIEZ1KGUpe3JldHVybihGdT0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIFZ1KGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiBxdSgpe3ZhciBlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHQ9ITE7cmV0dXJue3N0b3A6ZnVuY3Rpb24oKXt0PSEwfSxzdGFydDpmdW5jdGlvbihyKXt0PSExLGZ1bmN0aW9uIHIobil7aWYoIXQpe2lmKEFycmF5LmlzQXJyYXkobikpe2lmKCFuLmxlbmd0aClyZXR1cm47dmFyIGk9VnUobiksbz1pWzBdLGE9aS5zbGljZSgxKTtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBvP3ZvaWQgVXUoci5iaW5kKG51bGwsYSksbyk6KHIobyksdm9pZCBVdShyLmJpbmQobnVsbCxhKSkpfSJvYmplY3QiPT09RnUobikmJmUobiksImZ1bmN0aW9uIj09PXR5cGVvZiBuJiZuKCl9fShyKX0sc3Vic2NyaWJlOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsZnVuY3Rpb24oKXtlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fX19fXZhciBLdT1yKDMwMiksenU9ci5uKEt1KTtmdW5jdGlvbiBHdShlKXtyZXR1cm4oR3U9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBIdShlLHQpe2lmKGU9PT10KXJldHVybiEwO2lmKCJvYmplY3QiIT09R3UoZSl8fG51bGw9PT1lfHwib2JqZWN0IiE9PUd1KHQpfHxudWxsPT09dClyZXR1cm4hMTt2YXIgcj1PYmplY3Qua2V5cyhlKSxuPU9iamVjdC5rZXlzKHQpO2lmKHIubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBpPWhhc093blByb3BlcnR5LmJpbmQodCksbz0wO288ci5sZW5ndGg7bysrKXt2YXIgYT1yW29dO2lmKGVbYV0hPT10W2FdKWlmKGQoKShlW2FdKSl7aWYoIWQoKSh0W2FdKXx8ZVthXS5sZW5ndGghPT10W2FdLmxlbmd0aClyZXR1cm4hMTtpZighUGUoKShlW2FdLHRbYV0pKXJldHVybiExfWVsc2UgaWYoenUoKShlW2FdKSl7aWYoIXp1KCkodFthXSl8fCFQZSgpKGVbYV0sdFthXSkpcmV0dXJuITF9ZWxzZSBpZighaShyW29dKXx8ZVtyW29dXSE9PXRbcltvXV0pcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gV3UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3JldHVybiFIdShlLnByb3BzLHQpfHwhSHUoZS5zdGF0ZSxyKX0odGhpcyxlLHQpfXZhciBZdT1mdW5jdGlvbihlKXtlLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9V3V9LFh1PXIoNTA3KSxRdT1yLm4oWHUpO2Z1bmN0aW9uICR1KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1p1KGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIFp1KGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX12YXIgSnU9WyJXZWJraXQiLCJNb3oiLCJPIiwibXMiXSxlYz1bIi13ZWJraXQtIiwiLW1vei0iLCItby0iLCItbXMtIl0sdGM9WyJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1PcmlnaW4iLCJ0cmFuc2l0aW9uIl0scmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG5jPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLnJlZHVjZShmdW5jdGlvbihyLG4pe3JldHVybiAkdSh7fSxyLFp1KHt9LG4sZShuLHRbbl0pKSl9LHt9KX0saWM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiAkdSh7fSxlLGZ1bmN0aW9uKGUsdCl7aWYoLTE9PT10Yy5pbmRleE9mKGUpKXJldHVybiBadSh7fSxlLHQpO3ZhciByPSJ0cmFuc2l0aW9uIj09PWUsbj1lLnJlcGxhY2UoLyhcdykvLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvVXBwZXJDYXNlKCl9KSxpPXQ7cmV0dXJuIEp1LnJlZHVjZShmdW5jdGlvbihlLG8sYSl7cmV0dXJuIHImJihpPXQucmVwbGFjZSgvKHRyYW5zZm9ybXx0cmFuc2Zvcm0tb3JpZ2luKS9naW0sIiIuY29uY2F0KGVjW2FdLCIkMSIpKSksJHUoe30sZSxadSh7fSxvK24saSkpfSx7fSl9KHQsZVt0XSkpfSxlKX0sb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iIi5jb25jYXQoKG49ZSxuLnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihlKXtyZXR1cm4iLSIuY29uY2F0KGUudG9Mb3dlckNhc2UoKSl9KSksIiAiKS5jb25jYXQodCwibXMgIikuY29uY2F0KHIpO3ZhciBufSkuam9pbigiLCIpfTtmdW5jdGlvbiBhYyhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAscj1uZXcgQXJyYXkoZS5sZW5ndGgpO3Q8ZS5sZW5ndGg7dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn19KGUpfHxmdW5jdGlvbihlKXtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGUpfHwiW29iamVjdCBBcmd1bWVudHNdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX12YXIgc2M9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bMCwzKmUsMyp0LTYqZSwzKmUtMyp0KzFdfSx1Yz1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChmdW5jdGlvbihlLHIpe3JldHVybiBlKk1hdGgucG93KHQscil9KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSl9LGNjPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXNjKGUsdCk7cmV0dXJuIHVjKG4scil9fSxmYz1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3ZhciBuPXRbMF0saT10WzFdLG89dFsyXSxhPXRbM107aWYoMT09PXQubGVuZ3RoKXN3aXRjaCh0WzBdKXtjYXNlImxpbmVhciI6bj0wLGk9MCxvPTEsYT0xO2JyZWFrO2Nhc2UiZWFzZSI6bj0uMjUsaT0uMSxvPS4yNSxhPTE7YnJlYWs7Y2FzZSJlYXNlLWluIjpuPS40MixpPTAsbz0xLGE9MTticmVhaztjYXNlImVhc2Utb3V0IjpuPS40MixpPTAsbz0uNTgsYT0xO2JyZWFrO2Nhc2UiZWFzZS1pbi1vdXQiOm49MCxpPTAsbz0uNTgsYT0xfVtuLG8saSxhXS5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBlJiZlPj0wJiZlPD0xfSk7dmFyIHMsdSxjPWNjKG4sbyksZj1jYyhpLGEpLGw9KHM9bix1PW8sZnVuY3Rpb24oZSl7dmFyIHQ9YWMoc2Mocyx1KS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSp0fSkuc2xpY2UoMSkpLmNvbmNhdChbMF0pO3JldHVybiB1Yyh0LGUpfSksaD1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1lPjE/MTplLG49cixpPTA7aTw4OysraSl7dmFyIG89YyhuKS1yLGE9bChuKTtpZihNYXRoLmFicyhvLXIpPDFlLTR8fGE8MWUtNClyZXR1cm4gZihuKTtuPSh0PW4tby9hKT4xPzE6dDwwPzA6dH1yZXR1cm4gZihuKX07cmV0dXJuIGguaXNTdGVwcGVyPSExLGh9LGxjPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07dmFyIG49dFswXTtpZigic3RyaW5nIj09PXR5cGVvZiBuKXN3aXRjaChuKXtjYXNlImVhc2UiOmNhc2UiZWFzZS1pbi1vdXQiOmNhc2UiZWFzZS1vdXQiOmNhc2UiZWFzZS1pbiI6Y2FzZSJsaW5lYXIiOnJldHVybiBmYyhuKTtjYXNlInNwcmluZyI6cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5zdGlmZixyPXZvaWQgMD09PXQ/MTAwOnQsbj1lLmRhbXBpbmcsaT12b2lkIDA9PT1uPzg6bixvPWUuZHQsYT12b2lkIDA9PT1vPzE3Om8scz1mdW5jdGlvbihlLHQsbil7dmFyIG89bisoLShlLXQpKnItbippKSphLzFlMyxzPW4qYS8xZTMrZTtyZXR1cm4gTWF0aC5hYnMocy10KTwxZS00JiZNYXRoLmFicyhvKTwxZS00P1t0LDBdOltzLG9dfTtyZXR1cm4gcy5pc1N0ZXBwZXI9ITAscy5kdD1hLHN9KCl9cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiBuP246bnVsbH0saGM9cig1MDgpLHBjPXIubihoYyk7ZnVuY3Rpb24gZGMoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLHI9bmV3IEFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9fShlKXx8ZnVuY3Rpb24oZSl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9ZnVuY3Rpb24geWMoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7Z2MoZSx0LHJbdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gZ2MoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHZjKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsaT0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChhLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2godSl7aT0hMCxvPXV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX12YXIgbWMsYmMsX2MsU2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlKyh0LWUpKnJ9LEVjPWZ1bmN0aW9uKGUpe3JldHVybiBlLmZyb20hPT1lLnRvfSx3Yz1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvLGEscyx1LGM9KG89ZSxhPXQsUXUoKShPYmplY3Qua2V5cyhvKSxPYmplY3Qua2V5cyhhKSkpLGY9Yy5yZWR1Y2UoZnVuY3Rpb24ocixuKXtyZXR1cm4geWMoe30scixnYyh7fSxuLFtlW25dLHRbbl1dKSl9LHt9KSxsPWMucmVkdWNlKGZ1bmN0aW9uKHIsbil7cmV0dXJuIHljKHt9LHIsZ2Moe30sbix7ZnJvbTplW25dLHZlbG9jaXR5OjAsdG86dFtuXX0pKX0se30pLGg9LTEscD1mdW5jdGlvbigpe3JldHVybiBudWxsfTtyZXR1cm4gcD1yLmlzU3RlcHBlcj9mdW5jdGlvbihuKXtzfHwocz1uKTt2YXIgbz0obi1zKS9yLmR0O2w9ZnVuY3Rpb24gZSh0LHIsbil7dmFyIGk9bmMoZnVuY3Rpb24oZSxyKXtpZihFYyhyKSl7dmFyIG49dmModChyLmZyb20sci50byxyLnZlbG9jaXR5KSwyKTtyZXR1cm4geWMoe30scix7ZnJvbTpuWzBdLHZlbG9jaXR5Om5bMV19KX1yZXR1cm4gcn0scik7cmV0dXJuIG48MT9uYyhmdW5jdGlvbihlLHQpe3JldHVybiBFYyh0KT95Yyh7fSx0LHt2ZWxvY2l0eTpTYyh0LnZlbG9jaXR5LGlbZV0udmVsb2NpdHksbiksZnJvbTpTYyh0LmZyb20saVtlXS5mcm9tLG4pfSk6dH0scik6ZSh0LGksbi0xKX0ocixsLG8pLGkoeWMoe30sZSx0LG5jKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZnJvbX0sbCkpKSxzPW4scGMoKShsLEVjKS5sZW5ndGgmJihoPWp1KCkocCkpfTpmdW5jdGlvbihvKXt1fHwodT1vKTt2YXIgYT0oby11KS9uLHM9bmMoZnVuY3Rpb24oZSx0KXtyZXR1cm4gU2MuYXBwbHkodm9pZCAwLGRjKHQpLmNvbmNhdChbcihhKV0pKX0sZik7aWYoaSh5Yyh7fSxlLHQscykpLGE8MSloPWp1KCkocCk7ZWxzZXt2YXIgYz1uYyhmdW5jdGlvbihlLHQpe3JldHVybiBTYy5hcHBseSh2b2lkIDAsZGModCkuY29uY2F0KFtyKDEpXSkpfSxmKTtpKHljKHt9LGUsdCxjKSl9fSxmdW5jdGlvbigpe3JldHVybiBqdSgpKHApLGZ1bmN0aW9uKCl7T2JqZWN0KER1LmNhbmNlbCkoaCl9fX07ZnVuY3Rpb24gVGMoZSl7cmV0dXJuKFRjPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gQWMoZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPXt9LG89T2JqZWN0LmtleXMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHwoaVtyXT1lW3JdKTtyZXR1cm4gaX0oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscikmJihpW3JdPWVbcl0pfXJldHVybiBpfWZ1bmN0aW9uIENjKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIHhjKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe0ljKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIEljKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBrYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIE9jKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09VGModCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9SYyhlKTp0fWZ1bmN0aW9uIE5jKGUpe3JldHVybihOYz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gUGMoZSx0KXtyZXR1cm4oUGM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIFJjKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX12YXIgQmM9WXUoKF9jPWJjPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxyKXt2YXIgbjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KTt2YXIgaT0obj1PYyh0aGlzLE5jKHQpLmNhbGwodGhpcyxlLHIpKSkucHJvcHMsbz1pLmlzQWN0aXZlLGE9aS5hdHRyaWJ1dGVOYW1lLHM9aS5mcm9tLHU9aS50byxjPWkuc3RlcHMsZj1pLmNoaWxkcmVuO2lmKG4uaGFuZGxlU3R5bGVDaGFuZ2U9bi5oYW5kbGVTdHlsZUNoYW5nZS5iaW5kKFJjKFJjKG4pKSksbi5jaGFuZ2VTdHlsZT1uLmNoYW5nZVN0eWxlLmJpbmQoUmMoUmMobikpKSwhbylyZXR1cm4gbi5zdGF0ZT17c3R5bGU6e319LCJmdW5jdGlvbiI9PT10eXBlb2YgZiYmKG4uc3RhdGU9e3N0eWxlOnV9KSxPYyhuKTtpZihjJiZjLmxlbmd0aCluLnN0YXRlPXtzdHlsZTpjWzBdLnN0eWxlfTtlbHNlIGlmKHMpe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZilyZXR1cm4gbi5zdGF0ZT17c3R5bGU6c30sT2Mobik7bi5zdGF0ZT17c3R5bGU6YT9JYyh7fSxhLHMpOnN9fWVsc2Ugbi5zdGF0ZT17c3R5bGU6e319O3JldHVybiBufXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJlBjKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaXNBY3RpdmUscj1lLmNhbkJlZ2luO3RoaXMubW91bnRlZD0hMCx0JiZyJiZ0aGlzLnJ1bkFuaW1hdGlvbih0aGlzLnByb3BzKX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaXNBY3RpdmUscj1lLmNhbkJlZ2luLG49ZS5hdHRyaWJ1dGVOYW1lLGk9ZS5zaG91bGRSZUFuaW1hdGU7aWYocilpZih0KXtpZighKFBlKCkodGhpcy5wcm9wcy50byxlLnRvKSYmdGhpcy5wcm9wcy5jYW5CZWdpbiYmdGhpcy5wcm9wcy5pc0FjdGl2ZSkpe3ZhciBvPSF0aGlzLnByb3BzLmNhbkJlZ2lufHwhdGhpcy5wcm9wcy5pc0FjdGl2ZTt0aGlzLm1hbmFnZXImJnRoaXMubWFuYWdlci5zdG9wKCksdGhpcy5zdG9wSlNBbmltYXRpb24mJnRoaXMuc3RvcEpTQW5pbWF0aW9uKCk7dmFyIGE9b3x8aT9lLmZyb206dGhpcy5wcm9wcy50bzt0aGlzLnNldFN0YXRlKHtzdHlsZTpuP0ljKHt9LG4sYSk6YX0pLHRoaXMucnVuQW5pbWF0aW9uKHhjKHt9LGUse2Zyb206YSxiZWdpbjowfSkpfX1lbHNlIHRoaXMuc2V0U3RhdGUoe3N0eWxlOm4/SWMoe30sbixlLnRvKTplLnRvfSl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1vdW50ZWQ9ITEsdGhpcy51blN1YnNjcmliZSYmdGhpcy51blN1YnNjcmliZSgpLHRoaXMubWFuYWdlciYmKHRoaXMubWFuYWdlci5zdG9wKCksdGhpcy5tYW5hZ2VyPW51bGwpLHRoaXMuc3RvcEpTQW5pbWF0aW9uJiZ0aGlzLnN0b3BKU0FuaW1hdGlvbigpfX0se2tleToicnVuSlNBbmltYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmZyb20sbj1lLnRvLGk9ZS5kdXJhdGlvbixvPWUuZWFzaW5nLGE9ZS5iZWdpbixzPWUub25BbmltYXRpb25FbmQsdT1lLm9uQW5pbWF0aW9uU3RhcnQsYz13YyhyLG4sbGMobyksaSx0aGlzLmNoYW5nZVN0eWxlKTt0aGlzLm1hbmFnZXIuc3RhcnQoW3UsYSxmdW5jdGlvbigpe3Quc3RvcEpTQW5pbWF0aW9uPWMoKX0saSxzXSl9fSx7a2V5OiJydW5TdGVwQW5pbWF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9ZS5zdGVwcyxuPWUuYmVnaW4saT1lLm9uQW5pbWF0aW9uU3RhcnQsbz1yWzBdLGE9by5zdHlsZSxzPW8uZHVyYXRpb24sdT12b2lkIDA9PT1zPzA6cztyZXR1cm4gdGhpcy5tYW5hZ2VyLnN0YXJ0KFtpXS5jb25jYXQoQ2Moci5yZWR1Y2UoZnVuY3Rpb24oZSxuLGkpe2lmKDA9PT1pKXJldHVybiBlO3ZhciBvPW4uZHVyYXRpb24sYT1uLmVhc2luZyxzPXZvaWQgMD09PWE/ImVhc2UiOmEsdT1uLnN0eWxlLGM9bi5wcm9wZXJ0aWVzLGY9bi5vbkFuaW1hdGlvbkVuZCxsPWk+MD9yW2ktMV06bixoPWN8fE9iamVjdC5rZXlzKHUpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2Ygc3x8InNwcmluZyI9PT1zKXJldHVybiBDYyhlKS5jb25jYXQoW3QucnVuSlNBbmltYXRpb24uYmluZCh0LHtmcm9tOmwuc3R5bGUsdG86dSxkdXJhdGlvbjpvLGVhc2luZzpzfSksb10pO3ZhciBwPW9jKGgsbyxzKSxkPXhjKHt9LGwuc3R5bGUsdSx7dHJhbnNpdGlvbjpwfSk7cmV0dXJuIENjKGUpLmNvbmNhdChbZCxvLGZdKS5maWx0ZXIocmMpfSxbYSxNYXRoLm1heCh1LG4pXSkpLFtlLm9uQW5pbWF0aW9uRW5kXSkpfX0se2tleToicnVuQW5pbWF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm1hbmFnZXJ8fCh0aGlzLm1hbmFnZXI9cXUoKSk7dmFyIHQ9ZS5iZWdpbixyPWUuZHVyYXRpb24sbj1lLmF0dHJpYnV0ZU5hbWUsaT1lLnRvLG89ZS5lYXNpbmcsYT1lLm9uQW5pbWF0aW9uU3RhcnQscz1lLm9uQW5pbWF0aW9uRW5kLHU9ZS5zdGVwcyxjPWUuY2hpbGRyZW4sZj10aGlzLm1hbmFnZXI7aWYodGhpcy51blN1YnNjcmliZT1mLnN1YnNjcmliZSh0aGlzLmhhbmRsZVN0eWxlQ2hhbmdlKSwiZnVuY3Rpb24iIT09dHlwZW9mIG8mJiJmdW5jdGlvbiIhPT10eXBlb2YgYyYmInNwcmluZyIhPT1vKWlmKHUubGVuZ3RoPjEpdGhpcy5ydW5TdGVwQW5pbWF0aW9uKGUpO2Vsc2V7dmFyIGw9bj9JYyh7fSxuLGkpOmksaD1vYyhPYmplY3Qua2V5cyhsKSxyLG8pO2Yuc3RhcnQoW2EsdCx4Yyh7fSxsLHt0cmFuc2l0aW9uOmh9KSxyLHNdKX1lbHNlIHRoaXMucnVuSlNBbmltYXRpb24oZSl9fSx7a2V5OiJoYW5kbGVTdHlsZUNoYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5jaGFuZ2VTdHlsZShlKX19LHtrZXk6ImNoYW5nZVN0eWxlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm1vdW50ZWQmJnRoaXMuc2V0U3RhdGUoe3N0eWxlOmV9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jaGlsZHJlbixyPShlLmJlZ2luLGUuZHVyYXRpb24sZS5hdHRyaWJ1dGVOYW1lLGUuZWFzaW5nLGUuaXNBY3RpdmUpLG49KGUuc3RlcHMsZS5mcm9tLGUudG8sZS5jYW5CZWdpbixlLm9uQW5pbWF0aW9uRW5kLGUuc2hvdWxkUmVBbmltYXRlLGUub25BbmltYXRpb25SZVN0YXJ0LEFjKGUsWyJjaGlsZHJlbiIsImJlZ2luIiwiZHVyYXRpb24iLCJhdHRyaWJ1dGVOYW1lIiwiZWFzaW5nIiwiaXNBY3RpdmUiLCJzdGVwcyIsImZyb20iLCJ0byIsImNhbkJlZ2luIiwib25BbmltYXRpb25FbmQiLCJzaG91bGRSZUFuaW1hdGUiLCJvbkFuaW1hdGlvblJlU3RhcnQiXSkpLGk9eS5DaGlsZHJlbi5jb3VudCh0KSxvPWljKHRoaXMuc3RhdGUuc3R5bGUpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgdClyZXR1cm4gdChvKTtpZighcnx8MD09PWkpcmV0dXJuIHQ7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wcm9wcyxyPXQuc3R5bGUsaT12b2lkIDA9PT1yP3t9OnIsYT10LmNsYXNzTmFtZTtyZXR1cm4gT2JqZWN0KHkuY2xvbmVFbGVtZW50KShlLHhjKHt9LG4se3N0eWxlOnhjKHt9LGksbyksY2xhc3NOYW1lOmF9KSl9O3JldHVybiAxPT09aT9hKHkuQ2hpbGRyZW4ub25seSh0KSk6Zy5hLmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCx5LkNoaWxkcmVuLm1hcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBhKGUpfSkpfX1dKSYma2Moci5wcm90b3R5cGUsbiksaSYma2MocixpKSx0fSgpLGJjLmRpc3BsYXlOYW1lPSJBbmltYXRlIixiYy5wcm9wVHlwZXM9e2Zyb206bS5hLm9uZU9mVHlwZShbbS5hLm9iamVjdCxtLmEuc3RyaW5nXSksdG86bS5hLm9uZU9mVHlwZShbbS5hLm9iamVjdCxtLmEuc3RyaW5nXSksYXR0cmlidXRlTmFtZTptLmEuc3RyaW5nLGR1cmF0aW9uOm0uYS5udW1iZXIsYmVnaW46bS5hLm51bWJlcixlYXNpbmc6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEuZnVuY10pLHN0ZXBzOm0uYS5hcnJheU9mKG0uYS5zaGFwZSh7ZHVyYXRpb246bS5hLm51bWJlci5pc1JlcXVpcmVkLHN0eWxlOm0uYS5vYmplY3QuaXNSZXF1aXJlZCxlYXNpbmc6bS5hLm9uZU9mVHlwZShbbS5hLm9uZU9mKFsiZWFzZSIsImVhc2UtaW4iLCJlYXNlLW91dCIsImVhc2UtaW4tb3V0IiwibGluZWFyIl0pLG0uYS5mdW5jXSkscHJvcGVydGllczptLmEuYXJyYXlPZigic3RyaW5nIiksb25BbmltYXRpb25FbmQ6bS5hLmZ1bmN9KSksY2hpbGRyZW46bS5hLm9uZU9mVHlwZShbbS5hLm5vZGUsbS5hLmZ1bmNdKSxpc0FjdGl2ZTptLmEuYm9vbCxjYW5CZWdpbjptLmEuYm9vbCxvbkFuaW1hdGlvbkVuZDptLmEuZnVuYyxzaG91bGRSZUFuaW1hdGU6bS5hLmJvb2wsb25BbmltYXRpb25TdGFydDptLmEuZnVuYyxvbkFuaW1hdGlvblJlU3RhcnQ6bS5hLmZ1bmN9LGJjLmRlZmF1bHRQcm9wcz17YmVnaW46MCxkdXJhdGlvbjoxZTMsZnJvbToiIix0bzoiIixhdHRyaWJ1dGVOYW1lOiIiLGVhc2luZzoiZWFzZSIsaXNBY3RpdmU6ITAsY2FuQmVnaW46ITAsc3RlcHM6W10sb25BbmltYXRpb25FbmQ6ZnVuY3Rpb24oKXt9LG9uQW5pbWF0aW9uU3RhcnQ6ZnVuY3Rpb24oKXt9fSxtYz1fYykpfHxtYyxNYz1yKDIwMik7ZnVuY3Rpb24gTGMoZSl7cmV0dXJuKExjPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gRGMoKXtyZXR1cm4oRGM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBqYyhlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9e30sbz1PYmplY3Qua2V5cyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fChpW3JdPWVbcl0pO3JldHVybiBpfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmKGlbcl09ZVtyXSl9cmV0dXJuIGl9ZnVuY3Rpb24gVWMoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIEZjKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gVmMoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1MYyh0KSYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBxYyhlKXtyZXR1cm4ocWM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIEtjKGUsdCl7cmV0dXJuKEtjPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX12YXIgemM9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLnN0ZXBzLHI9ZS5kdXJhdGlvbjtyZXR1cm4gdCYmdC5sZW5ndGg/dC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSsoSSgpKHQuZHVyYXRpb24pJiZ0LmR1cmF0aW9uPjA/dC5kdXJhdGlvbjowKX0sMCk6SSgpKHIpP3I6MH0sR2M9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLHI7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspaVtvXT1hcmd1bWVudHNbb107cmV0dXJuKHI9VmModGhpcywoZT1xYyh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSkuc3RhdGU9e2lzQWN0aXZlOiExfSxyLmhhbmRsZUVudGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG49ci5wcm9wcyxpPW4uYXBwZWFyT3B0aW9ucyxvPW4uZW50ZXJPcHRpb25zO3IuaGFuZGxlU3R5bGVBY3RpdmUodD9pOm8pfSxyLmhhbmRsZUV4aXQ9ZnVuY3Rpb24oKXtyLmhhbmRsZVN0eWxlQWN0aXZlKHIucHJvcHMubGVhdmVPcHRpb25zKX0scn12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZLYyhlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsKG49W3trZXk6ImhhbmRsZVN0eWxlQWN0aXZlIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlKXt2YXIgdD1lLm9uQW5pbWF0aW9uRW5kP2Z1bmN0aW9uKCl7ZS5vbkFuaW1hdGlvbkVuZCgpfTpudWxsO3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7VWMoZSx0LHJbdF0pfSl9cmV0dXJuIGV9KHt9LGUse29uQW5pbWF0aW9uRW5kOnQsaXNBY3RpdmU6ITB9KSl9fX0se2tleToicGFyc2VUaW1lb3V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFwcGVhck9wdGlvbnMscj1lLmVudGVyT3B0aW9ucyxuPWUubGVhdmVPcHRpb25zO3JldHVybiB6Yyh0KSt6YyhyKSt6YyhuKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQuY2hpbGRyZW4sbj0odC5hcHBlYXJPcHRpb25zLHQuZW50ZXJPcHRpb25zLHQubGVhdmVPcHRpb25zLGpjKHQsWyJjaGlsZHJlbiIsImFwcGVhck9wdGlvbnMiLCJlbnRlck9wdGlvbnMiLCJsZWF2ZU9wdGlvbnMiXSkpO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudChNYy5UcmFuc2l0aW9uLERjKHt9LG4se29uRW50ZXI6dGhpcy5oYW5kbGVFbnRlcixvbkV4aXQ6dGhpcy5oYW5kbGVFeGl0LHRpbWVvdXQ6dGhpcy5wYXJzZVRpbWVvdXQoKX0pLGZ1bmN0aW9uKCl7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KEJjLGUuc3RhdGUseS5DaGlsZHJlbi5vbmx5KHIpKX0pfX1dKSYmRmMoci5wcm90b3R5cGUsbiksaSYmRmMocixpKSx0fSgpO0djLnByb3BUeXBlcz17YXBwZWFyT3B0aW9uczptLmEub2JqZWN0LGVudGVyT3B0aW9uczptLmEub2JqZWN0LGxlYXZlT3B0aW9uczptLmEub2JqZWN0LGNoaWxkcmVuOm0uYS5lbGVtZW50fTt2YXIgSGM9R2M7ZnVuY3Rpb24gV2MoZSl7dmFyIHQ9ZS5jb21wb25lbnQscj1lLmNoaWxkcmVuLG49ZS5hcHBlYXIsaT1lLmVudGVyLG89ZS5sZWF2ZTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoTWMuVHJhbnNpdGlvbkdyb3VwLHtjb21wb25lbnQ6dH0seS5DaGlsZHJlbi5tYXAocixmdW5jdGlvbihlLHQpe3JldHVybiBnLmEuY3JlYXRlRWxlbWVudChIYyx7YXBwZWFyT3B0aW9uczpuLGVudGVyT3B0aW9uczppLGxlYXZlT3B0aW9uczpvLGtleToiY2hpbGQtIi5jb25jYXQodCl9LGUpfSkpfVdjLnByb3BUeXBlcz17YXBwZWFyOm0uYS5vYmplY3QsZW50ZXI6bS5hLm9iamVjdCxsZWF2ZTptLmEub2JqZWN0LGNoaWxkcmVuOm0uYS5vbmVPZlR5cGUoW20uYS5hcnJheSxtLmEuZWxlbWVudF0pLGNvbXBvbmVudDptLmEuYW55fSxXYy5kZWZhdWx0UHJvcHM9e2NvbXBvbmVudDoic3BhbiJ9O3ZhciBZYyxYYyxRYywkYz1CYztmdW5jdGlvbiBaYyhlKXtyZXR1cm4oWmM9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBKYyhlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gZWYoKXtyZXR1cm4oZWY9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB0ZihlLHQ="
}

Changelog:

{
    "2020.03.29 15:15": "base64:YWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBSdShlKXtyZXR1cm4oUnU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIEJ1KGUsdCl7cmV0dXJuKEJ1PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBNdSgpe3JldHVybihNdT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBMdT1LKCh3dT1FdT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksUHUodGhpcyxSdSh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJkJ1KGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToiZ2V0RW5kUG9pbnRzIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgaT10aGlzLnByb3BzLnZpZXdCb3gsbz1pLngsYT1pLnkscz1pLndpZHRoLHU9aS5oZWlnaHQ7aWYocil7dmFyIGM9dGhpcy5wcm9wcyxmPWMueSxsPWMueUF4aXMub3JpZW50YXRpb24saD1lLnkuYXBwbHkoZix7YmFuZEF3YXJlOiEwfSk7aWYoVmwodGhpcy5wcm9wcywiZGlzY2FyZCIpJiYhZS55LmlzSW5SYW5nZShoKSlyZXR1cm4gbnVsbDt2YXIgcD1be3g6bytzLHk6aH0se3g6byx5Omh9XTtyZXR1cm4ibGVmdCI9PT1sP3AucmV2ZXJzZSgpOnB9aWYodCl7dmFyIGQ9dGhpcy5wcm9wcyx5PWQueCxnPWQueEF4aXMub3JpZW50YXRpb24sdj1lLnguYXBwbHkoeSx7YmFuZEF3YXJlOiEwfSk7aWYoVmwodGhpcy5wcm9wcywiZGlzY2FyZCIpJiYhZS54LmlzSW5SYW5nZSh2KSlyZXR1cm4gbnVsbDt2YXIgbT1be3g6dix5OmErdX0se3g6dix5OmF9XTtyZXR1cm4idG9wIj09PWc/bS5yZXZlcnNlKCk6bX1pZihuKXt2YXIgYj10aGlzLnByb3BzLnNlZ21lbnQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KHQse2JhbmRBd2FyZTohMH0pfSk7cmV0dXJuIFZsKHRoaXMucHJvcHMsImRpc2NhcmQiKSYmQ3UoKShiLGZ1bmN0aW9uKHQpe3JldHVybiFlLmlzSW5SYW5nZSh0KX0pP251bGw6Yn1yZXR1cm4gbnVsbH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS54LHI9ZS55LG49ZS5zZWdtZW50LGk9ZS54QXhpcyxvPWUueUF4aXMsYT1lLnNoYXBlLHM9ZS5jbGFzc05hbWUsYz0oZS5hbHdheXNTaG93LGUuY2xpcFBhdGhJZCksZj1odS5jcmVhdGUoe3g6aS5zY2FsZSx5Om8uc2NhbGV9KSxsPUIodCksaD1CKHIpLHA9biYmMj09PW4ubGVuZ3RoLGQ9dGhpcy5nZXRFbmRQb2ludHMoZixsLGgscCk7aWYoIWQpcmV0dXJuIG51bGw7dmFyIHk9T3UoZCwyKSx2PXlbMF0sbT12LngsYj12LnksUz15WzFdLEU9Uy54LHc9Uy55LFQ9SXUoe2NsaXBQYXRoOlZsKHRoaXMucHJvcHMsImhpZGRlbiIpPyJ1cmwoIyIuY29uY2F0KGMsIikiKTp2b2lkIDB9LGVlKHRoaXMucHJvcHMpLHJlKHRoaXMucHJvcHMpLHt4MTptLHkxOmIseDI6RSx5Mjp3fSk7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6XygpKCJyZWNoYXJ0cy1yZWZlcmVuY2UtbGluZSIscyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcuYS5pc1ZhbGlkRWxlbWVudChlKT9nLmEuY2xvbmVFbGVtZW50KGUsdCk6dSgpKGUpP2UodCk6Zy5hLmNyZWF0ZUVsZW1lbnQoImxpbmUiLE11KHt9LHQse2NsYXNzTmFtZToicmVjaGFydHMtcmVmZXJlbmNlLWxpbmUtbGluZSJ9KSl9KGEsVCksZ2gucmVuZGVyQ2FsbEJ5UGFyZW50KHRoaXMucHJvcHMsZnVuY3Rpb24oZSl7dmFyIHQ9ZS54MSxyPWUueTEsbj1lLngyLGk9ZS55MjtyZXR1cm4gc3Uoe3g6dCx5OnJ9LHt4Om4seTppfSl9KHt4MTptLHkxOmIseDI6RSx5Mjp3fSkpKX19XSkmJk51KHIucHJvdG90eXBlLG4pLGkmJk51KHIsaSksdH0oKSxFdS5kaXNwbGF5TmFtZT0iUmVmZXJlbmNlTGluZSIsRXUucHJvcFR5cGVzPUl1KHt9LEgse3ZpZXdCb3g6bS5hLnNoYXBlKHt4Om0uYS5udW1iZXIseTptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXJ9KSx4QXhpczptLmEub2JqZWN0LHlBeGlzOm0uYS5vYmplY3QsaXNGcm9udDptLmEuYm9vbCxhbHdheXNTaG93Om0uYS5ib29sLGlmT3ZlcmZsb3c6bS5hLm9uZU9mKFsiaGlkZGVuIiwidmlzaWJsZSIsImRpc2NhcmQiLCJleHRlbmREb21haW4iXSkseDptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5zdHJpbmddKSx5Om0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHNlZ21lbnQ6bS5hLmFycmF5T2YobS5hLnNoYXBlKHt4Om0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHk6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSl9KSksY2xhc3NOYW1lOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHlBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSkseEF4aXNJZDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSxzaGFwZTptLmEuZnVuY30pLEV1LmRlZmF1bHRQcm9wcz17aXNGcm9udDohMSxpZk92ZXJmbG93OiJkaXNjYXJkIix4QXhpc0lkOjAseUF4aXNJZDowLGZpbGw6Im5vbmUiLHN0cm9rZToiI2NjYyIsZmlsbE9wYWNpdHk6MSxzdHJva2VXaWR0aDoxfSxTdT13dSkpfHxTdSxEdT1yKDg2KSxqdT1yLm4oRHUpO2Z1bmN0aW9uIFV1KGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLHI9LTE7anUoKShmdW5jdGlvbiBuKGkpe3I8MCYmKHI9aSksaS1yPnQ/KGUoaSkscj0tMSk6anUoKShuKX0pfWZ1bmN0aW9uIEZ1KGUpe3JldHVybihGdT0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIFZ1KGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiBxdSgpe3ZhciBlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHQ9ITE7cmV0dXJue3N0b3A6ZnVuY3Rpb24oKXt0PSEwfSxzdGFydDpmdW5jdGlvbihyKXt0PSExLGZ1bmN0aW9uIHIobil7aWYoIXQpe2lmKEFycmF5LmlzQXJyYXkobikpe2lmKCFuLmxlbmd0aClyZXR1cm47dmFyIGk9VnUobiksbz1pWzBdLGE9aS5zbGljZSgxKTtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBvP3ZvaWQgVXUoci5iaW5kKG51bGwsYSksbyk6KHIobyksdm9pZCBVdShyLmJpbmQobnVsbCxhKSkpfSJvYmplY3QiPT09RnUobikmJmUobiksImZ1bmN0aW9uIj09PXR5cGVvZiBuJiZuKCl9fShyKX0sc3Vic2NyaWJlOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsZnVuY3Rpb24oKXtlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fX19fXZhciBLdT1yKDMwMiksenU9ci5uKEt1KTtmdW5jdGlvbiBHdShlKXtyZXR1cm4oR3U9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBIdShlLHQpe2lmKGU9PT10KXJldHVybiEwO2lmKCJvYmplY3QiIT09R3UoZSl8fG51bGw9PT1lfHwib2JqZWN0IiE9PUd1KHQpfHxudWxsPT09dClyZXR1cm4hMTt2YXIgcj1PYmplY3Qua2V5cyhlKSxuPU9iamVjdC5rZXlzKHQpO2lmKHIubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBpPWhhc093blByb3BlcnR5LmJpbmQodCksbz0wO288ci5sZW5ndGg7bysrKXt2YXIgYT1yW29dO2lmKGVbYV0hPT10W2FdKWlmKGQoKShlW2FdKSl7aWYoIWQoKSh0W2FdKXx8ZVthXS5sZW5ndGghPT10W2FdLmxlbmd0aClyZXR1cm4hMTtpZighUGUoKShlW2FdLHRbYV0pKXJldHVybiExfWVsc2UgaWYoenUoKShlW2FdKSl7aWYoIXp1KCkodFthXSl8fCFQZSgpKGVbYV0sdFthXSkpcmV0dXJuITF9ZWxzZSBpZighaShyW29dKXx8ZVtyW29dXSE9PXRbcltvXV0pcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gV3UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3JldHVybiFIdShlLnByb3BzLHQpfHwhSHUoZS5zdGF0ZSxyKX0odGhpcyxlLHQpfXZhciBZdT1mdW5jdGlvbihlKXtlLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9V3V9LFh1PXIoNTA3KSxRdT1yLm4oWHUpO2Z1bmN0aW9uICR1KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1p1KGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIFp1KGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX12YXIgSnU9WyJXZWJraXQiLCJNb3oiLCJPIiwibXMiXSxlYz1bIi13ZWJraXQtIiwiLW1vei0iLCItby0iLCItbXMtIl0sdGM9WyJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1PcmlnaW4iLCJ0cmFuc2l0aW9uIl0scmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG5jPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLnJlZHVjZShmdW5jdGlvbihyLG4pe3JldHVybiAkdSh7fSxyLFp1KHt9LG4sZShuLHRbbl0pKSl9LHt9KX0saWM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiAkdSh7fSxlLGZ1bmN0aW9uKGUsdCl7aWYoLTE9PT10Yy5pbmRleE9mKGUpKXJldHVybiBadSh7fSxlLHQpO3ZhciByPSJ0cmFuc2l0aW9uIj09PWUsbj1lLnJlcGxhY2UoLyhcdykvLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvVXBwZXJDYXNlKCl9KSxpPXQ7cmV0dXJuIEp1LnJlZHVjZShmdW5jdGlvbihlLG8sYSl7cmV0dXJuIHImJihpPXQucmVwbGFjZSgvKHRyYW5zZm9ybXx0cmFuc2Zvcm0tb3JpZ2luKS9naW0sIiIuY29uY2F0KGVjW2FdLCIkMSIpKSksJHUoe30sZSxadSh7fSxvK24saSkpfSx7fSl9KHQsZVt0XSkpfSxlKX0sb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iIi5jb25jYXQoKG49ZSxuLnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihlKXtyZXR1cm4iLSIuY29uY2F0KGUudG9Mb3dlckNhc2UoKSl9KSksIiAiKS5jb25jYXQodCwibXMgIikuY29uY2F0KHIpO3ZhciBufSkuam9pbigiLCIpfTtmdW5jdGlvbiBhYyhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAscj1uZXcgQXJyYXkoZS5sZW5ndGgpO3Q8ZS5sZW5ndGg7dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn19KGUpfHxmdW5jdGlvbihlKXtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGUpfHwiW29iamVjdCBBcmd1bWVudHNdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX12YXIgc2M9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bMCwzKmUsMyp0LTYqZSwzKmUtMyp0KzFdfSx1Yz1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChmdW5jdGlvbihlLHIpe3JldHVybiBlKk1hdGgucG93KHQscil9KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSl9LGNjPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXNjKGUsdCk7cmV0dXJuIHVjKG4scil9fSxmYz1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3ZhciBuPXRbMF0saT10WzFdLG89dFsyXSxhPXRbM107aWYoMT09PXQubGVuZ3RoKXN3aXRjaCh0WzBdKXtjYXNlImxpbmVhciI6bj0wLGk9MCxvPTEsYT0xO2JyZWFrO2Nhc2UiZWFzZSI6bj0uMjUsaT0uMSxvPS4yNSxhPTE7YnJlYWs7Y2FzZSJlYXNlLWluIjpuPS40MixpPTAsbz0xLGE9MTticmVhaztjYXNlImVhc2Utb3V0IjpuPS40MixpPTAsbz0uNTgsYT0xO2JyZWFrO2Nhc2UiZWFzZS1pbi1vdXQiOm49MCxpPTAsbz0uNTgsYT0xfVtuLG8saSxhXS5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBlJiZlPj0wJiZlPD0xfSk7dmFyIHMsdSxjPWNjKG4sbyksZj1jYyhpLGEpLGw9KHM9bix1PW8sZnVuY3Rpb24oZSl7dmFyIHQ9YWMoc2Mocyx1KS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSp0fSkuc2xpY2UoMSkpLmNvbmNhdChbMF0pO3JldHVybiB1Yyh0LGUpfSksaD1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1lPjE/MTplLG49cixpPTA7aTw4OysraSl7dmFyIG89YyhuKS1yLGE9bChuKTtpZihNYXRoLmFicyhvLXIpPDFlLTR8fGE8MWUtNClyZXR1cm4gZihuKTtuPSh0PW4tby9hKT4xPzE6dDwwPzA6dH1yZXR1cm4gZihuKX07cmV0dXJuIGguaXNTdGVwcGVyPSExLGh9LGxjPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07dmFyIG49dFswXTtpZigic3RyaW5nIj09PXR5cGVvZiBuKXN3aXRjaChuKXtjYXNlImVhc2UiOmNhc2UiZWFzZS1pbi1vdXQiOmNhc2UiZWFzZS1vdXQiOmNhc2UiZWFzZS1pbiI6Y2FzZSJsaW5lYXIiOnJldHVybiBmYyhuKTtjYXNlInNwcmluZyI6cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5zdGlmZixyPXZvaWQgMD09PXQ/MTAwOnQsbj1lLmRhbXBpbmcsaT12b2lkIDA9PT1uPzg6bixvPWUuZHQsYT12b2lkIDA9PT1vPzE3Om8scz1mdW5jdGlvbihlLHQsbil7dmFyIG89bisoLShlLXQpKnItbippKSphLzFlMyxzPW4qYS8xZTMrZTtyZXR1cm4gTWF0aC5hYnMocy10KTwxZS00JiZNYXRoLmFicyhvKTwxZS00P1t0LDBdOltzLG9dfTtyZXR1cm4gcy5pc1N0ZXBwZXI9ITAscy5kdD1hLHN9KCl9cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiBuP246bnVsbH0saGM9cig1MDgpLHBjPXIubihoYyk7ZnVuY3Rpb24gZGMoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLHI9bmV3IEFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9fShlKXx8ZnVuY3Rpb24oZSl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9ZnVuY3Rpb24geWMoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7Z2MoZSx0LHJbdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gZ2MoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHZjKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsaT0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChhLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2godSl7aT0hMCxvPXV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX12YXIgbWMsYmMsX2MsU2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlKyh0LWUpKnJ9LEVjPWZ1bmN0aW9uKGUpe3JldHVybiBlLmZyb20hPT1lLnRvfSx3Yz1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvLGEscyx1LGM9KG89ZSxhPXQsUXUoKShPYmplY3Qua2V5cyhvKSxPYmplY3Qua2V5cyhhKSkpLGY9Yy5yZWR1Y2UoZnVuY3Rpb24ocixuKXtyZXR1cm4geWMoe30scixnYyh7fSxuLFtlW25dLHRbbl1dKSl9LHt9KSxsPWMucmVkdWNlKGZ1bmN0aW9uKHIsbil7cmV0dXJuIHljKHt9LHIsZ2Moe30sbix7ZnJvbTplW25dLHZlbG9jaXR5OjAsdG86dFtuXX0pKX0se30pLGg9LTEscD1mdW5jdGlvbigpe3JldHVybiBudWxsfTtyZXR1cm4gcD1yLmlzU3RlcHBlcj9mdW5jdGlvbihuKXtzfHwocz1uKTt2YXIgbz0obi1zKS9yLmR0O2w9ZnVuY3Rpb24gZSh0LHIsbil7dmFyIGk9bmMoZnVuY3Rpb24oZSxyKXtpZihFYyhyKSl7dmFyIG49dmModChyLmZyb20sci50byxyLnZlbG9jaXR5KSwyKTtyZXR1cm4geWMoe30scix7ZnJvbTpuWzBdLHZlbG9jaXR5Om5bMV19KX1yZXR1cm4gcn0scik7cmV0dXJuIG48MT9uYyhmdW5jdGlvbihlLHQpe3JldHVybiBFYyh0KT95Yyh7fSx0LHt2ZWxvY2l0eTpTYyh0LnZlbG9jaXR5LGlbZV0udmVsb2NpdHksbiksZnJvbTpTYyh0LmZyb20saVtlXS5mcm9tLG4pfSk6dH0scik6ZSh0LGksbi0xKX0ocixsLG8pLGkoeWMoe30sZSx0LG5jKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZnJvbX0sbCkpKSxzPW4scGMoKShsLEVjKS5sZW5ndGgmJihoPWp1KCkocCkpfTpmdW5jdGlvbihvKXt1fHwodT1vKTt2YXIgYT0oby11KS9uLHM9bmMoZnVuY3Rpb24oZSx0KXtyZXR1cm4gU2MuYXBwbHkodm9pZCAwLGRjKHQpLmNvbmNhdChbcihhKV0pKX0sZik7aWYoaSh5Yyh7fSxlLHQscykpLGE8MSloPWp1KCkocCk7ZWxzZXt2YXIgYz1uYyhmdW5jdGlvbihlLHQpe3JldHVybiBTYy5hcHBseSh2b2lkIDAsZGModCkuY29uY2F0KFtyKDEpXSkpfSxmKTtpKHljKHt9LGUsdCxjKSl9fSxmdW5jdGlvbigpe3JldHVybiBqdSgpKHApLGZ1bmN0aW9uKCl7T2JqZWN0KER1LmNhbmNlbCkoaCl9fX07ZnVuY3Rpb24gVGMoZSl7cmV0dXJuKFRjPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gQWMoZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPXt9LG89T2JqZWN0LmtleXMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHwoaVtyXT1lW3JdKTtyZXR1cm4gaX0oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscikmJihpW3JdPWVbcl0pfXJldHVybiBpfWZ1bmN0aW9uIENjKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIHhjKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe0ljKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIEljKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBrYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIE9jKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09VGModCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9SYyhlKTp0fWZ1bmN0aW9uIE5jKGUpe3JldHVybihOYz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gUGMoZSx0KXtyZXR1cm4oUGM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIFJjKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX12YXIgQmM9WXUoKF9jPWJjPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxyKXt2YXIgbjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KTt2YXIgaT0obj1PYyh0aGlzLE5jKHQpLmNhbGwodGhpcyxlLHIpKSkucHJvcHMsbz1pLmlzQWN0aXZlLGE9aS5hdHRyaWJ1dGVOYW1lLHM9aS5mcm9tLHU9aS50byxjPWkuc3RlcHMsZj1pLmNoaWxkcmVuO2lmKG4uaGFuZGxlU3R5bGVDaGFuZ2U9bi5oYW5kbGVTdHlsZUNoYW5nZS5iaW5kKFJjKFJjKG4pKSksbi5jaGFuZ2VTdHlsZT1uLmNoYW5nZVN0eWxlLmJpbmQoUmMoUmMobikpKSwhbylyZXR1cm4gbi5zdGF0ZT17c3R5bGU6e319LCJmdW5jdGlvbiI9PT10eXBlb2YgZiYmKG4uc3RhdGU9e3N0eWxlOnV9KSxPYyhuKTtpZihjJiZjLmxlbmd0aCluLnN0YXRlPXtzdHlsZTpjWzBdLnN0eWxlfTtlbHNlIGlmKHMpe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZilyZXR1cm4gbi5zdGF0ZT17c3R5bGU6c30sT2Mobik7bi5zdGF0ZT17c3R5bGU6YT9JYyh7fSxhLHMpOnN9fWVsc2Ugbi5zdGF0ZT17c3R5bGU6e319O3JldHVybiBufXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJlBjKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaXNBY3RpdmUscj1lLmNhbkJlZ2luO3RoaXMubW91bnRlZD0hMCx0JiZyJiZ0aGlzLnJ1bkFuaW1hdGlvbih0aGlzLnByb3BzKX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaXNBY3RpdmUscj1lLmNhbkJlZ2luLG49ZS5hdHRyaWJ1dGVOYW1lLGk9ZS5zaG91bGRSZUFuaW1hdGU7aWYocilpZih0KXtpZighKFBlKCkodGhpcy5wcm9wcy50byxlLnRvKSYmdGhpcy5wcm9wcy5jYW5CZWdpbiYmdGhpcy5wcm9wcy5pc0FjdGl2ZSkpe3ZhciBvPSF0aGlzLnByb3BzLmNhbkJlZ2lufHwhdGhpcy5wcm9wcy5pc0FjdGl2ZTt0aGlzLm1hbmFnZXImJnRoaXMubWFuYWdlci5zdG9wKCksdGhpcy5zdG9wSlNBbmltYXRpb24mJnRoaXMuc3RvcEpTQW5pbWF0aW9uKCk7dmFyIGE9b3x8aT9lLmZyb206dGhpcy5wcm9wcy50bzt0aGlzLnNldFN0YXRlKHtzdHlsZTpuP0ljKHt9LG4sYSk6YX0pLHRoaXMucnVuQW5pbWF0aW9uKHhjKHt9LGUse2Zyb206YSxiZWdpbjowfSkpfX1lbHNlIHRoaXMuc2V0U3RhdGUoe3N0eWxlOm4/SWMoe30sbixlLnRvKTplLnRvfSl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1vdW50ZWQ9ITEsdGhpcy51blN1YnNjcmliZSYmdGhpcy51blN1YnNjcmliZSgpLHRoaXMubWFuYWdlciYmKHRoaXMubWFuYWdlci5zdG9wKCksdGhpcy5tYW5hZ2VyPW51bGwpLHRoaXMuc3RvcEpTQW5pbWF0aW9uJiZ0aGlzLnN0b3BKU0FuaW1hdGlvbigpfX0se2tleToicnVuSlNBbmltYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmZyb20sbj1lLnRvLGk9ZS5kdXJhdGlvbixvPWUuZWFzaW5nLGE9ZS5iZWdpbixzPWUub25BbmltYXRpb25FbmQsdT1lLm9uQW5pbWF0aW9uU3RhcnQsYz13YyhyLG4sbGMobyksaSx0aGlzLmNoYW5nZVN0eWxlKTt0aGlzLm1hbmFnZXIuc3RhcnQoW3UsYSxmdW5jdGlvbigpe3Quc3RvcEpTQW5pbWF0aW9uPWMoKX0saSxzXSl9fSx7a2V5OiJydW5TdGVwQW5pbWF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9ZS5zdGVwcyxuPWUuYmVnaW4saT1lLm9uQW5pbWF0aW9uU3RhcnQsbz1yWzBdLGE9by5zdHlsZSxzPW8uZHVyYXRpb24sdT12b2lkIDA9PT1zPzA6cztyZXR1cm4gdGhpcy5tYW5hZ2VyLnN0YXJ0KFtpXS5jb25jYXQoQ2Moci5yZWR1Y2UoZnVuY3Rpb24oZSxuLGkpe2lmKDA9PT1pKXJldHVybiBlO3ZhciBvPW4uZHVyYXRpb24sYT1uLmVhc2luZyxzPXZvaWQgMD09PWE/ImVhc2UiOmEsdT1uLnN0eWxlLGM9bi5wcm9wZXJ0aWVzLGY9bi5vbkFuaW1hdGlvbkVuZCxsPWk+MD9yW2ktMV06bixoPWN8fE9iamVjdC5rZXlzKHUpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2Ygc3x8InNwcmluZyI9PT1zKXJldHVybiBDYyhlKS5jb25jYXQoW3QucnVuSlNBbmltYXRpb24uYmluZCh0LHtmcm9tOmwuc3R5bGUsdG86dSxkdXJhdGlvbjpvLGVhc2luZzpzfSksb10pO3ZhciBwPW9jKGgsbyxzKSxkPXhjKHt9LGwuc3R5bGUsdSx7dHJhbnNpdGlvbjpwfSk7cmV0dXJuIENjKGUpLmNvbmNhdChbZCxvLGZdKS5maWx0ZXIocmMpfSxbYSxNYXRoLm1heCh1LG4pXSkpLFtlLm9uQW5pbWF0aW9uRW5kXSkpfX0se2tleToicnVuQW5pbWF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm1hbmFnZXJ8fCh0aGlzLm1hbmFnZXI9cXUoKSk7dmFyIHQ9ZS5iZWdpbixyPWUuZHVyYXRpb24sbj1lLmF0dHJpYnV0ZU5hbWUsaT1lLnRvLG89ZS5lYXNpbmcsYT1lLm9uQW5pbWF0aW9uU3RhcnQscz1lLm9uQW5pbWF0aW9uRW5kLHU9ZS5zdGVwcyxjPWUuY2hpbGRyZW4sZj10aGlzLm1hbmFnZXI7aWYodGhpcy51blN1YnNjcmliZT1mLnN1YnNjcmliZSh0aGlzLmhhbmRsZVN0eWxlQ2hhbmdlKSwiZnVuY3Rpb24iIT09dHlwZW9mIG8mJiJmdW5jdGlvbiIhPT10eXBlb2YgYyYmInNwcmluZyIhPT1vKWlmKHUubGVuZ3RoPjEpdGhpcy5ydW5TdGVwQW5pbWF0aW9uKGUpO2Vsc2V7dmFyIGw9bj9JYyh7fSxuLGkpOmksaD1vYyhPYmplY3Qua2V5cyhsKSxyLG8pO2Yuc3RhcnQoW2EsdCx4Yyh7fSxsLHt0cmFuc2l0aW9uOmh9KSxyLHNdKX1lbHNlIHRoaXMucnVuSlNBbmltYXRpb24oZSl9fSx7a2V5OiJoYW5kbGVTdHlsZUNoYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5jaGFuZ2VTdHlsZShlKX19LHtrZXk6ImNoYW5nZVN0eWxlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm1vdW50ZWQmJnRoaXMuc2V0U3RhdGUoe3N0eWxlOmV9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jaGlsZHJlbixyPShlLmJlZ2luLGUuZHVyYXRpb24sZS5hdHRyaWJ1dGVOYW1lLGUuZWFzaW5nLGUuaXNBY3RpdmUpLG49KGUuc3RlcHMsZS5mcm9tLGUudG8sZS5jYW5CZWdpbixlLm9uQW5pbWF0aW9uRW5kLGUuc2hvdWxkUmVBbmltYXRlLGUub25BbmltYXRpb25SZVN0YXJ0LEFjKGUsWyJjaGlsZHJlbiIsImJlZ2luIiwiZHVyYXRpb24iLCJhdHRyaWJ1dGVOYW1lIiwiZWFzaW5nIiwiaXNBY3RpdmUiLCJzdGVwcyIsImZyb20iLCJ0byIsImNhbkJlZ2luIiwib25BbmltYXRpb25FbmQiLCJzaG91bGRSZUFuaW1hdGUiLCJvbkFuaW1hdGlvblJlU3RhcnQiXSkpLGk9eS5DaGlsZHJlbi5jb3VudCh0KSxvPWljKHRoaXMuc3RhdGUuc3R5bGUpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgdClyZXR1cm4gdChvKTtpZighcnx8MD09PWkpcmV0dXJuIHQ7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wcm9wcyxyPXQuc3R5bGUsaT12b2lkIDA9PT1yP3t9OnIsYT10LmNsYXNzTmFtZTtyZXR1cm4gT2JqZWN0KHkuY2xvbmVFbGVtZW50KShlLHhjKHt9LG4se3N0eWxlOnhjKHt9LGksbyksY2xhc3NOYW1lOmF9KSl9O3JldHVybiAxPT09aT9hKHkuQ2hpbGRyZW4ub25seSh0KSk6Zy5hLmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCx5LkNoaWxkcmVuLm1hcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBhKGUpfSkpfX1dKSYma2Moci5wcm90b3R5cGUsbiksaSYma2MocixpKSx0fSgpLGJjLmRpc3BsYXlOYW1lPSJBbmltYXRlIixiYy5wcm9wVHlwZXM9e2Zyb206bS5hLm9uZU9mVHlwZShbbS5hLm9iamVjdCxtLmEuc3RyaW5nXSksdG86bS5hLm9uZU9mVHlwZShbbS5hLm9iamVjdCxtLmEuc3RyaW5nXSksYXR0cmlidXRlTmFtZTptLmEuc3RyaW5nLGR1cmF0aW9uOm0uYS5udW1iZXIsYmVnaW46bS5hLm51bWJlcixlYXNpbmc6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEuZnVuY10pLHN0ZXBzOm0uYS5hcnJheU9mKG0uYS5zaGFwZSh7ZHVyYXRpb246bS5hLm51bWJlci5pc1JlcXVpcmVkLHN0eWxlOm0uYS5vYmplY3QuaXNSZXF1aXJlZCxlYXNpbmc6bS5hLm9uZU9mVHlwZShbbS5hLm9uZU9mKFsiZWFzZSIsImVhc2UtaW4iLCJlYXNlLW91dCIsImVhc2UtaW4tb3V0IiwibGluZWFyIl0pLG0uYS5mdW5jXSkscHJvcGVydGllczptLmEuYXJyYXlPZigic3RyaW5nIiksb25BbmltYXRpb25FbmQ6bS5hLmZ1bmN9KSksY2hpbGRyZW46bS5hLm9uZU9mVHlwZShbbS5hLm5vZGUsbS5hLmZ1bmNdKSxpc0FjdGl2ZTptLmEuYm9vbCxjYW5CZWdpbjptLmEuYm9vbCxvbkFuaW1hdGlvbkVuZDptLmEuZnVuYyxzaG91bGRSZUFuaW1hdGU6bS5hLmJvb2wsb25BbmltYXRpb25TdGFydDptLmEuZnVuYyxvbkFuaW1hdGlvblJlU3RhcnQ6bS5hLmZ1bmN9LGJjLmRlZmF1bHRQcm9wcz17YmVnaW46MCxkdXJhdGlvbjoxZTMsZnJvbToiIix0bzoiIixhdHRyaWJ1dGVOYW1lOiIiLGVhc2luZzoiZWFzZSIsaXNBY3RpdmU6ITAsY2FuQmVnaW46ITAsc3RlcHM6W10sb25BbmltYXRpb25FbmQ6ZnVuY3Rpb24oKXt9LG9uQW5pbWF0aW9uU3RhcnQ6ZnVuY3Rpb24oKXt9fSxtYz1fYykpfHxtYyxNYz1yKDIwMik7ZnVuY3Rpb24gTGMoZSl7cmV0dXJuKExjPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gRGMoKXtyZXR1cm4oRGM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBqYyhlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9e30sbz1PYmplY3Qua2V5cyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fChpW3JdPWVbcl0pO3JldHVybiBpfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmKGlbcl09ZVtyXSl9cmV0dXJuIGl9ZnVuY3Rpb24gVWMoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIEZjKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gVmMoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1MYyh0KSYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBxYyhlKXtyZXR1cm4ocWM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIEtjKGUsdCl7cmV0dXJuKEtjPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX12YXIgemM9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLnN0ZXBzLHI9ZS5kdXJhdGlvbjtyZXR1cm4gdCYmdC5sZW5ndGg/dC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSsoSSgpKHQuZHVyYXRpb24pJiZ0LmR1cmF0aW9uPjA/dC5kdXJhdGlvbjowKX0sMCk6SSgpKHIpP3I6MH0sR2M9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLHI7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspaVtvXT1hcmd1bWVudHNbb107cmV0dXJuKHI9VmModGhpcywoZT1xYyh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSkuc3RhdGU9e2lzQWN0aXZlOiExfSxyLmhhbmRsZUVudGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG49ci5wcm9wcyxpPW4uYXBwZWFyT3B0aW9ucyxvPW4uZW50ZXJPcHRpb25zO3IuaGFuZGxlU3R5bGVBY3RpdmUodD9pOm8pfSxyLmhhbmRsZUV4aXQ9ZnVuY3Rpb24oKXtyLmhhbmRsZVN0eWxlQWN0aXZlKHIucHJvcHMubGVhdmVPcHRpb25zKX0scn12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZLYyhlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsKG49W3trZXk6ImhhbmRsZVN0eWxlQWN0aXZlIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlKXt2YXIgdD1lLm9uQW5pbWF0aW9uRW5kP2Z1bmN0aW9uKCl7ZS5vbkFuaW1hdGlvbkVuZCgpfTpudWxsO3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7VWMoZSx0LHJbdF0pfSl9cmV0dXJuIGV9KHt9LGUse29uQW5pbWF0aW9uRW5kOnQsaXNBY3RpdmU6ITB9KSl9fX0se2tleToicGFyc2VUaW1lb3V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFwcGVhck9wdGlvbnMscj1lLmVudGVyT3B0aW9ucyxuPWUubGVhdmVPcHRpb25zO3JldHVybiB6Yyh0KSt6YyhyKSt6YyhuKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQuY2hpbGRyZW4sbj0odC5hcHBlYXJPcHRpb25zLHQuZW50ZXJPcHRpb25zLHQubGVhdmVPcHRpb25zLGpjKHQsWyJjaGlsZHJlbiIsImFwcGVhck9wdGlvbnMiLCJlbnRlck9wdGlvbnMiLCJsZWF2ZU9wdGlvbnMiXSkpO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudChNYy5UcmFuc2l0aW9uLERjKHt9LG4se29uRW50ZXI6dGhpcy5oYW5kbGVFbnRlcixvbkV4aXQ6dGhpcy5oYW5kbGVFeGl0LHRpbWVvdXQ6dGhpcy5wYXJzZVRpbWVvdXQoKX0pLGZ1bmN0aW9uKCl7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KEJjLGUuc3RhdGUseS5DaGlsZHJlbi5vbmx5KHIpKX0pfX1dKSYmRmMoci5wcm90b3R5cGUsbiksaSYmRmMocixpKSx0fSgpO0djLnByb3BUeXBlcz17YXBwZWFyT3B0aW9uczptLmEub2JqZWN0LGVudGVyT3B0aW9uczptLmEub2JqZWN0LGxlYXZlT3B0aW9uczptLmEub2JqZWN0LGNoaWxkcmVuOm0uYS5lbGVtZW50fTt2YXIgSGM9R2M7ZnVuY3Rpb24gV2MoZSl7dmFyIHQ9ZS5jb21wb25lbnQscj1lLmNoaWxkcmVuLG49ZS5hcHBlYXIsaT1lLmVudGVyLG89ZS5sZWF2ZTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoTWMuVHJhbnNpdGlvbkdyb3VwLHtjb21wb25lbnQ6dH0seS5DaGlsZHJlbi5tYXAocixmdW5jdGlvbihlLHQpe3JldHVybiBnLmEuY3JlYXRlRWxlbWVudChIYyx7YXBwZWFyT3B0aW9uczpuLGVudGVyT3B0aW9uczppLGxlYXZlT3B0aW9uczpvLGtleToiY2hpbGQtIi5jb25jYXQodCl9LGUpfSkpfVdjLnByb3BUeXBlcz17YXBwZWFyOm0uYS5vYmplY3QsZW50ZXI6bS5hLm9iamVjdCxsZWF2ZTptLmEub2JqZWN0LGNoaWxkcmVuOm0uYS5vbmVPZlR5cGUoW20uYS5hcnJheSxtLmEuZWxlbWVudF0pLGNvbXBvbmVudDptLmEuYW55fSxXYy5kZWZhdWx0UHJvcHM9e2NvbXBvbmVudDoic3BhbiJ9O3ZhciBZYyxYYyxRYywkYz1CYztmdW5jdGlvbiBaYyhlKXtyZXR1cm4oWmM9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBKYyhlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gZWYoKXtyZXR1cm4oZWY9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB0ZihlLHQ=",
    "2020.03.29 15:15": "base64:YWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBSdShlKXtyZXR1cm4oUnU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIEJ1KGUsdCl7cmV0dXJuKEJ1PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBNdSgpe3JldHVybihNdT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBMdT1LKCh3dT1FdT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksUHUodGhpcyxSdSh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJkJ1KGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToiZ2V0RW5kUG9pbnRzIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgaT10aGlzLnByb3BzLnZpZXdCb3gsbz1pLngsYT1pLnkscz1pLndpZHRoLHU9aS5oZWlnaHQ7aWYocil7dmFyIGM9dGhpcy5wcm9wcyxmPWMueSxsPWMueUF4aXMub3JpZW50YXRpb24saD1lLnkuYXBwbHkoZix7YmFuZEF3YXJlOiEwfSk7aWYoVmwodGhpcy5wcm9wcywiZGlzY2FyZCIpJiYhZS55LmlzSW5SYW5nZShoKSlyZXR1cm4gbnVsbDt2YXIgcD1be3g6bytzLHk6aH0se3g6byx5Omh9XTtyZXR1cm4ibGVmdCI9PT1sP3AucmV2ZXJzZSgpOnB9aWYodCl7dmFyIGQ9dGhpcy5wcm9wcyx5PWQueCxnPWQueEF4aXMub3JpZW50YXRpb24sdj1lLnguYXBwbHkoeSx7YmFuZEF3YXJlOiEwfSk7aWYoVmwodGhpcy5wcm9wcywiZGlzY2FyZCIpJiYhZS54LmlzSW5SYW5nZSh2KSlyZXR1cm4gbnVsbDt2YXIgbT1be3g6dix5OmErdX0se3g6dix5OmF9XTtyZXR1cm4idG9wIj09PWc/bS5yZXZlcnNlKCk6bX1pZihuKXt2YXIgYj10aGlzLnByb3BzLnNlZ21lbnQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KHQse2JhbmRBd2FyZTohMH0pfSk7cmV0dXJuIFZsKHRoaXMucHJvcHMsImRpc2NhcmQiKSYmQ3UoKShiLGZ1bmN0aW9uKHQpe3JldHVybiFlLmlzSW5SYW5nZSh0KX0pP251bGw6Yn1yZXR1cm4gbnVsbH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS54LHI9ZS55LG49ZS5zZWdtZW50LGk9ZS54QXhpcyxvPWUueUF4aXMsYT1lLnNoYXBlLHM9ZS5jbGFzc05hbWUsYz0oZS5hbHdheXNTaG93LGUuY2xpcFBhdGhJZCksZj1odS5jcmVhdGUoe3g6aS5zY2FsZSx5Om8uc2NhbGV9KSxsPUIodCksaD1CKHIpLHA9biYmMj09PW4ubGVuZ3RoLGQ9dGhpcy5nZXRFbmRQb2ludHMoZixsLGgscCk7aWYoIWQpcmV0dXJuIG51bGw7dmFyIHk9T3UoZCwyKSx2PXlbMF0sbT12LngsYj12LnksUz15WzFdLEU9Uy54LHc9Uy55LFQ9SXUoe2NsaXBQYXRoOlZsKHRoaXMucHJvcHMsImhpZGRlbiIpPyJ1cmwoIyIuY29uY2F0KGMsIikiKTp2b2lkIDB9LGVlKHRoaXMucHJvcHMpLHJlKHRoaXMucHJvcHMpLHt4MTptLHkxOmIseDI6RSx5Mjp3fSk7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6XygpKCJyZWNoYXJ0cy1yZWZlcmVuY2UtbGluZSIscyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcuYS5pc1ZhbGlkRWxlbWVudChlKT9nLmEuY2xvbmVFbGVtZW50KGUsdCk6dSgpKGUpP2UodCk6Zy5hLmNyZWF0ZUVsZW1lbnQoImxpbmUiLE11KHt9LHQse2NsYXNzTmFtZToicmVjaGFydHMtcmVmZXJlbmNlLWxpbmUtbGluZSJ9KSl9KGEsVCksZ2gucmVuZGVyQ2FsbEJ5UGFyZW50KHRoaXMucHJvcHMsZnVuY3Rpb24oZSl7dmFyIHQ9ZS54MSxyPWUueTEsbj1lLngyLGk9ZS55MjtyZXR1cm4gc3Uoe3g6dCx5OnJ9LHt4Om4seTppfSl9KHt4MTptLHkxOmIseDI6RSx5Mjp3fSkpKX19XSkmJk51KHIucHJvdG90eXBlLG4pLGkmJk51KHIsaSksdH0oKSxFdS5kaXNwbGF5TmFtZT0iUmVmZXJlbmNlTGluZSIsRXUucHJvcFR5cGVzPUl1KHt9LEgse3ZpZXdCb3g6bS5hLnNoYXBlKHt4Om0uYS5udW1iZXIseTptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXJ9KSx4QXhpczptLmEub2JqZWN0LHlBeGlzOm0uYS5vYmplY3QsaXNGcm9udDptLmEuYm9vbCxhbHdheXNTaG93Om0uYS5ib29sLGlmT3ZlcmZsb3c6bS5hLm9uZU9mKFsiaGlkZGVuIiwidmlzaWJsZSIsImRpc2NhcmQiLCJleHRlbmREb21haW4iXSkseDptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5zdHJpbmddKSx5Om0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHNlZ21lbnQ6bS5hLmFycmF5T2YobS5hLnNoYXBlKHt4Om0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHk6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSl9KSksY2xhc3NOYW1lOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHlBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSkseEF4aXNJZDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSxzaGFwZTptLmEuZnVuY30pLEV1LmRlZmF1bHRQcm9wcz17aXNGcm9udDohMSxpZk92ZXJmbG93OiJkaXNjYXJkIix4QXhpc0lkOjAseUF4aXNJZDowLGZpbGw6Im5vbmUiLHN0cm9rZToiI2NjYyIsZmlsbE9wYWNpdHk6MSxzdHJva2VXaWR0aDoxfSxTdT13dSkpfHxTdSxEdT1yKDg2KSxqdT1yLm4oRHUpO2Z1bmN0aW9uIFV1KGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLHI9LTE7anUoKShmdW5jdGlvbiBuKGkpe3I8MCYmKHI9aSksaS1yPnQ/KGUoaSkscj0tMSk6anUoKShuKX0pfWZ1bmN0aW9uIEZ1KGUpe3JldHVybihGdT0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIFZ1KGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiBxdSgpe3ZhciBlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHQ9ITE7cmV0dXJue3N0b3A6ZnVuY3Rpb24oKXt0PSEwfSxzdGFydDpmdW5jdGlvbihyKXt0PSExLGZ1bmN0aW9uIHIobil7aWYoIXQpe2lmKEFycmF5LmlzQXJyYXkobikpe2lmKCFuLmxlbmd0aClyZXR1cm47dmFyIGk9VnUobiksbz1pWzBdLGE9aS5zbGljZSgxKTtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBvP3ZvaWQgVXUoci5iaW5kKG51bGwsYSksbyk6KHIobyksdm9pZCBVdShyLmJpbmQobnVsbCxhKSkpfSJvYmplY3QiPT09RnUobikmJmUobiksImZ1bmN0aW9uIj09PXR5cGVvZiBuJiZuKCl9fShyKX0sc3Vic2NyaWJlOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsZnVuY3Rpb24oKXtlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fX19fXZhciBLdT1yKDMwMiksenU9ci5uKEt1KTtmdW5jdGlvbiBHdShlKXtyZXR1cm4oR3U9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBIdShlLHQpe2lmKGU9PT10KXJldHVybiEwO2lmKCJvYmplY3QiIT09R3UoZSl8fG51bGw9PT1lfHwib2JqZWN0IiE9PUd1KHQpfHxudWxsPT09dClyZXR1cm4hMTt2YXIgcj1PYmplY3Qua2V5cyhlKSxuPU9iamVjdC5rZXlzKHQpO2lmKHIubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBpPWhhc093blByb3BlcnR5LmJpbmQodCksbz0wO288ci5sZW5ndGg7bysrKXt2YXIgYT1yW29dO2lmKGVbYV0hPT10W2FdKWlmKGQoKShlW2FdKSl7aWYoIWQoKSh0W2FdKXx8ZVthXS5sZW5ndGghPT10W2FdLmxlbmd0aClyZXR1cm4hMTtpZighUGUoKShlW2FdLHRbYV0pKXJldHVybiExfWVsc2UgaWYoenUoKShlW2FdKSl7aWYoIXp1KCkodFthXSl8fCFQZSgpKGVbYV0sdFthXSkpcmV0dXJuITF9ZWxzZSBpZighaShyW29dKXx8ZVtyW29dXSE9PXRbcltvXV0pcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gV3UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3JldHVybiFIdShlLnByb3BzLHQpfHwhSHUoZS5zdGF0ZSxyKX0odGhpcyxlLHQpfXZhciBZdT1mdW5jdGlvbihlKXtlLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9V3V9LFh1PXIoNTA3KSxRdT1yLm4oWHUpO2Z1bmN0aW9uICR1KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1p1KGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIFp1KGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX12YXIgSnU9WyJXZWJraXQiLCJNb3oiLCJPIiwibXMiXSxlYz1bIi13ZWJraXQtIiwiLW1vei0iLCItby0iLCItbXMtIl0sdGM9WyJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1PcmlnaW4iLCJ0cmFuc2l0aW9uIl0scmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG5jPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLnJlZHVjZShmdW5jdGlvbihyLG4pe3JldHVybiAkdSh7fSxyLFp1KHt9LG4sZShuLHRbbl0pKSl9LHt9KX0saWM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiAkdSh7fSxlLGZ1bmN0aW9uKGUsdCl7aWYoLTE9PT10Yy5pbmRleE9mKGUpKXJldHVybiBadSh7fSxlLHQpO3ZhciByPSJ0cmFuc2l0aW9uIj09PWUsbj1lLnJlcGxhY2UoLyhcdykvLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvVXBwZXJDYXNlKCl9KSxpPXQ7cmV0dXJuIEp1LnJlZHVjZShmdW5jdGlvbihlLG8sYSl7cmV0dXJuIHImJihpPXQucmVwbGFjZSgvKHRyYW5zZm9ybXx0cmFuc2Zvcm0tb3JpZ2luKS9naW0sIiIuY29uY2F0KGVjW2FdLCIkMSIpKSksJHUoe30sZSxadSh7fSxvK24saSkpfSx7fSl9KHQsZVt0XSkpfSxlKX0sb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iIi5jb25jYXQoKG49ZSxuLnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihlKXtyZXR1cm4iLSIuY29uY2F0KGUudG9Mb3dlckNhc2UoKSl9KSksIiAiKS5jb25jYXQodCwibXMgIikuY29uY2F0KHIpO3ZhciBufSkuam9pbigiLCIpfTtmdW5jdGlvbiBhYyhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAscj1uZXcgQXJyYXkoZS5sZW5ndGgpO3Q8ZS5sZW5ndGg7dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn19KGUpfHxmdW5jdGlvbihlKXtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGUpfHwiW29iamVjdCBBcmd1bWVudHNdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX12YXIgc2M9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bMCwzKmUsMyp0LTYqZSwzKmUtMyp0KzFdfSx1Yz1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChmdW5jdGlvbihlLHIpe3JldHVybiBlKk1hdGgucG93KHQscil9KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSl9LGNjPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXNjKGUsdCk7cmV0dXJuIHVjKG4scil9fSxmYz1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3ZhciBuPXRbMF0saT10WzFdLG89dFsyXSxhPXRbM107aWYoMT09PXQubGVuZ3RoKXN3aXRjaCh0WzBdKXtjYXNlImxpbmVhciI6bj0wLGk9MCxvPTEsYT0xO2JyZWFrO2Nhc2UiZWFzZSI6bj0uMjUsaT0uMSxvPS4yNSxhPTE7YnJlYWs7Y2FzZSJlYXNlLWluIjpuPS40MixpPTAsbz0xLGE9MTticmVhaztjYXNlImVhc2Utb3V0IjpuPS40MixpPTAsbz0uNTgsYT0xO2JyZWFrO2Nhc2UiZWFzZS1pbi1vdXQiOm49MCxpPTAsbz0uNTgsYT0xfVtuLG8saSxhXS5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBlJiZlPj0wJiZlPD0xfSk7dmFyIHMsdSxjPWNjKG4sbyksZj1jYyhpLGEpLGw9KHM9bix1PW8sZnVuY3Rpb24oZSl7dmFyIHQ9YWMoc2Mocyx1KS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSp0fSkuc2xpY2UoMSkpLmNvbmNhdChbMF0pO3JldHVybiB1Yyh0LGUpfSksaD1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1lPjE/MTplLG49cixpPTA7aTw4OysraSl7dmFyIG89YyhuKS1yLGE9bChuKTtpZihNYXRoLmFicyhvLXIpPDFlLTR8fGE8MWUtNClyZXR1cm4gZihuKTtuPSh0PW4tby9hKT4xPzE6dDwwPzA6dH1yZXR1cm4gZihuKX07cmV0dXJuIGguaXNTdGVwcGVyPSExLGh9LGxjPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07dmFyIG49dFswXTtpZigic3RyaW5nIj09PXR5cGVvZiBuKXN3aXRjaChuKXtjYXNlImVhc2UiOmNhc2UiZWFzZS1pbi1vdXQiOmNhc2UiZWFzZS1vdXQiOmNhc2UiZWFzZS1pbiI6Y2FzZSJsaW5lYXIiOnJldHVybiBmYyhuKTtjYXNlInNwcmluZyI6cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5zdGlmZixyPXZvaWQgMD09PXQ/MTAwOnQsbj1lLmRhbXBpbmcsaT12b2lkIDA9PT1uPzg6bixvPWUuZHQsYT12b2lkIDA9PT1vPzE3Om8scz1mdW5jdGlvbihlLHQsbil7dmFyIG89bisoLShlLXQpKnItbippKSphLzFlMyxzPW4qYS8xZTMrZTtyZXR1cm4gTWF0aC5hYnMocy10KTwxZS00JiZNYXRoLmFicyhvKTwxZS00P1t0LDBdOltzLG9dfTtyZXR1cm4gcy5pc1N0ZXBwZXI9ITAscy5kdD1hLHN9KCl9cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiBuP246bnVsbH0saGM9cig1MDgpLHBjPXIubihoYyk7ZnVuY3Rpb24gZGMoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLHI9bmV3IEFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9fShlKXx8ZnVuY3Rpb24oZSl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9ZnVuY3Rpb24geWMoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7Z2MoZSx0LHJbdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gZ2MoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHZjKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsaT0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChhLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2godSl7aT0hMCxvPXV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX12YXIgbWMsYmMsX2MsU2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlKyh0LWUpKnJ9LEVjPWZ1bmN0aW9uKGUpe3JldHVybiBlLmZyb20hPT1lLnRvfSx3Yz1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvLGEscyx1LGM9KG89ZSxhPXQsUXUoKShPYmplY3Qua2V5cyhvKSxPYmplY3Qua2V5cyhhKSkpLGY9Yy5yZWR1Y2UoZnVuY3Rpb24ocixuKXtyZXR1cm4geWMoe30scixnYyh7fSxuLFtlW25dLHRbbl1dKSl9LHt9KSxsPWMucmVkdWNlKGZ1bmN0aW9uKHIsbil7cmV0dXJuIHljKHt9LHIsZ2Moe30sbix7ZnJvbTplW25dLHZlbG9jaXR5OjAsdG86dFtuXX0pKX0se30pLGg9LTEscD1mdW5jdGlvbigpe3JldHVybiBudWxsfTtyZXR1cm4gcD1yLmlzU3RlcHBlcj9mdW5jdGlvbihuKXtzfHwocz1uKTt2YXIgbz0obi1zKS9yLmR0O2w9ZnVuY3Rpb24gZSh0LHIsbil7dmFyIGk9bmMoZnVuY3Rpb24oZSxyKXtpZihFYyhyKSl7dmFyIG49dmModChyLmZyb20sci50byxyLnZlbG9jaXR5KSwyKTtyZXR1cm4geWMoe30scix7ZnJvbTpuWzBdLHZlbG9jaXR5Om5bMV19KX1yZXR1cm4gcn0scik7cmV0dXJuIG48MT9uYyhmdW5jdGlvbihlLHQpe3JldHVybiBFYyh0KT95Yyh7fSx0LHt2ZWxvY2l0eTpTYyh0LnZlbG9jaXR5LGlbZV0udmVsb2NpdHksbiksZnJvbTpTYyh0LmZyb20saVtlXS5mcm9tLG4pfSk6dH0scik6ZSh0LGksbi0xKX0ocixsLG8pLGkoeWMoe30sZSx0LG5jKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZnJvbX0sbCkpKSxzPW4scGMoKShsLEVjKS5sZW5ndGgmJihoPWp1KCkocCkpfTpmdW5jdGlvbihvKXt1fHwodT1vKTt2YXIgYT0oby11KS9uLHM9bmMoZnVuY3Rpb24oZSx0KXtyZXR1cm4gU2MuYXBwbHkodm9pZCAwLGRjKHQpLmNvbmNhdChbcihhKV0pKX0sZik7aWYoaSh5Yyh7fSxlLHQscykpLGE8MSloPWp1KCkocCk7ZWxzZXt2YXIgYz1uYyhmdW5jdGlvbihlLHQpe3JldHVybiBTYy5hcHBseSh2b2lkIDAsZGModCkuY29uY2F0KFtyKDEpXSkpfSxmKTtpKHljKHt9LGUsdCxjKSl9fSxmdW5jdGlvbigpe3JldHVybiBqdSgpKHApLGZ1bmN0aW9uKCl7T2JqZWN0KER1LmNhbmNlbCkoaCl9fX07ZnVuY3Rpb24gVGMoZSl7cmV0dXJuKFRjPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gQWMoZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPXt9LG89T2JqZWN0LmtleXMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHwoaVtyXT1lW3JdKTtyZXR1cm4gaX0oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscikmJihpW3JdPWVbcl0pfXJldHVybiBpfWZ1bmN0aW9uIENjKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIHhjKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe0ljKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIEljKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBrYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIE9jKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09VGModCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9SYyhlKTp0fWZ1bmN0aW9uIE5jKGUpe3JldHVybihOYz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gUGMoZSx0KXtyZXR1cm4oUGM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIFJjKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX12YXIgQmM9WXUoKF9jPWJjPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxyKXt2YXIgbjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KTt2YXIgaT0obj1PYyh0aGlzLE5jKHQpLmNhbGwodGhpcyxlLHIpKSkucHJvcHMsbz1pLmlzQWN0aXZlLGE9aS5hdHRyaWJ1dGVOYW1lLHM9aS5mcm9tLHU9aS50byxjPWkuc3RlcHMsZj1pLmNoaWxkcmVuO2lmKG4uaGFuZGxlU3R5bGVDaGFuZ2U9bi5oYW5kbGVTdHlsZUNoYW5nZS5iaW5kKFJjKFJjKG4pKSksbi5jaGFuZ2VTdHlsZT1uLmNoYW5nZVN0eWxlLmJpbmQoUmMoUmMobikpKSwhbylyZXR1cm4gbi5zdGF0ZT17c3R5bGU6e319LCJmdW5jdGlvbiI9PT10eXBlb2YgZiYmKG4uc3RhdGU9e3N0eWxlOnV9KSxPYyhuKTtpZihjJiZjLmxlbmd0aCluLnN0YXRlPXtzdHlsZTpjWzBdLnN0eWxlfTtlbHNlIGlmKHMpe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZilyZXR1cm4gbi5zdGF0ZT17c3R5bGU6c30sT2Mobik7bi5zdGF0ZT17c3R5bGU6YT9JYyh7fSxhLHMpOnN9fWVsc2Ugbi5zdGF0ZT17c3R5bGU6e319O3JldHVybiBufXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJlBjKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuaXNBY3RpdmUscj1lLmNhbkJlZ2luO3RoaXMubW91bnRlZD0hMCx0JiZyJiZ0aGlzLnJ1bkFuaW1hdGlvbih0aGlzLnByb3BzKX19LHtrZXk6ImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaXNBY3RpdmUscj1lLmNhbkJlZ2luLG49ZS5hdHRyaWJ1dGVOYW1lLGk9ZS5zaG91bGRSZUFuaW1hdGU7aWYocilpZih0KXtpZighKFBlKCkodGhpcy5wcm9wcy50byxlLnRvKSYmdGhpcy5wcm9wcy5jYW5CZWdpbiYmdGhpcy5wcm9wcy5pc0FjdGl2ZSkpe3ZhciBvPSF0aGlzLnByb3BzLmNhbkJlZ2lufHwhdGhpcy5wcm9wcy5pc0FjdGl2ZTt0aGlzLm1hbmFnZXImJnRoaXMubWFuYWdlci5zdG9wKCksdGhpcy5zdG9wSlNBbmltYXRpb24mJnRoaXMuc3RvcEpTQW5pbWF0aW9uKCk7dmFyIGE9b3x8aT9lLmZyb206dGhpcy5wcm9wcy50bzt0aGlzLnNldFN0YXRlKHtzdHlsZTpuP0ljKHt9LG4sYSk6YX0pLHRoaXMucnVuQW5pbWF0aW9uKHhjKHt9LGUse2Zyb206YSxiZWdpbjowfSkpfX1lbHNlIHRoaXMuc2V0U3RhdGUoe3N0eWxlOm4/SWMoe30sbixlLnRvKTplLnRvfSl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1vdW50ZWQ9ITEsdGhpcy51blN1YnNjcmliZSYmdGhpcy51blN1YnNjcmliZSgpLHRoaXMubWFuYWdlciYmKHRoaXMubWFuYWdlci5zdG9wKCksdGhpcy5tYW5hZ2VyPW51bGwpLHRoaXMuc3RvcEpTQW5pbWF0aW9uJiZ0aGlzLnN0b3BKU0FuaW1hdGlvbigpfX0se2tleToicnVuSlNBbmltYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmZyb20sbj1lLnRvLGk9ZS5kdXJhdGlvbixvPWUuZWFzaW5nLGE9ZS5iZWdpbixzPWUub25BbmltYXRpb25FbmQsdT1lLm9uQW5pbWF0aW9uU3RhcnQsYz13YyhyLG4sbGMobyksaSx0aGlzLmNoYW5nZVN0eWxlKTt0aGlzLm1hbmFnZXIuc3RhcnQoW3UsYSxmdW5jdGlvbigpe3Quc3RvcEpTQW5pbWF0aW9uPWMoKX0saSxzXSl9fSx7a2V5OiJydW5TdGVwQW5pbWF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9ZS5zdGVwcyxuPWUuYmVnaW4saT1lLm9uQW5pbWF0aW9uU3RhcnQsbz1yWzBdLGE9by5zdHlsZSxzPW8uZHVyYXRpb24sdT12b2lkIDA9PT1zPzA6cztyZXR1cm4gdGhpcy5tYW5hZ2VyLnN0YXJ0KFtpXS5jb25jYXQoQ2Moci5yZWR1Y2UoZnVuY3Rpb24oZSxuLGkpe2lmKDA9PT1pKXJldHVybiBlO3ZhciBvPW4uZHVyYXRpb24sYT1uLmVhc2luZyxzPXZvaWQgMD09PWE/ImVhc2UiOmEsdT1uLnN0eWxlLGM9bi5wcm9wZXJ0aWVzLGY9bi5vbkFuaW1hdGlvbkVuZCxsPWk+MD9yW2ktMV06bixoPWN8fE9iamVjdC5rZXlzKHUpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2Ygc3x8InNwcmluZyI9PT1zKXJldHVybiBDYyhlKS5jb25jYXQoW3QucnVuSlNBbmltYXRpb24uYmluZCh0LHtmcm9tOmwuc3R5bGUsdG86dSxkdXJhdGlvbjpvLGVhc2luZzpzfSksb10pO3ZhciBwPW9jKGgsbyxzKSxkPXhjKHt9LGwuc3R5bGUsdSx7dHJhbnNpdGlvbjpwfSk7cmV0dXJuIENjKGUpLmNvbmNhdChbZCxvLGZdKS5maWx0ZXIocmMpfSxbYSxNYXRoLm1heCh1LG4pXSkpLFtlLm9uQW5pbWF0aW9uRW5kXSkpfX0se2tleToicnVuQW5pbWF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm1hbmFnZXJ8fCh0aGlzLm1hbmFnZXI9cXUoKSk7dmFyIHQ9ZS5iZWdpbixyPWUuZHVyYXRpb24sbj1lLmF0dHJpYnV0ZU5hbWUsaT1lLnRvLG89ZS5lYXNpbmcsYT1lLm9uQW5pbWF0aW9uU3RhcnQscz1lLm9uQW5pbWF0aW9uRW5kLHU9ZS5zdGVwcyxjPWUuY2hpbGRyZW4sZj10aGlzLm1hbmFnZXI7aWYodGhpcy51blN1YnNjcmliZT1mLnN1YnNjcmliZSh0aGlzLmhhbmRsZVN0eWxlQ2hhbmdlKSwiZnVuY3Rpb24iIT09dHlwZW9mIG8mJiJmdW5jdGlvbiIhPT10eXBlb2YgYyYmInNwcmluZyIhPT1vKWlmKHUubGVuZ3RoPjEpdGhpcy5ydW5TdGVwQW5pbWF0aW9uKGUpO2Vsc2V7dmFyIGw9bj9JYyh7fSxuLGkpOmksaD1vYyhPYmplY3Qua2V5cyhsKSxyLG8pO2Yuc3RhcnQoW2EsdCx4Yyh7fSxsLHt0cmFuc2l0aW9uOmh9KSxyLHNdKX1lbHNlIHRoaXMucnVuSlNBbmltYXRpb24oZSl9fSx7a2V5OiJoYW5kbGVTdHlsZUNoYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5jaGFuZ2VTdHlsZShlKX19LHtrZXk6ImNoYW5nZVN0eWxlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm1vdW50ZWQmJnRoaXMuc2V0U3RhdGUoe3N0eWxlOmV9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jaGlsZHJlbixyPShlLmJlZ2luLGUuZHVyYXRpb24sZS5hdHRyaWJ1dGVOYW1lLGUuZWFzaW5nLGUuaXNBY3RpdmUpLG49KGUuc3RlcHMsZS5mcm9tLGUudG8sZS5jYW5CZWdpbixlLm9uQW5pbWF0aW9uRW5kLGUuc2hvdWxkUmVBbmltYXRlLGUub25BbmltYXRpb25SZVN0YXJ0LEFjKGUsWyJjaGlsZHJlbiIsImJlZ2luIiwiZHVyYXRpb24iLCJhdHRyaWJ1dGVOYW1lIiwiZWFzaW5nIiwiaXNBY3RpdmUiLCJzdGVwcyIsImZyb20iLCJ0byIsImNhbkJlZ2luIiwib25BbmltYXRpb25FbmQiLCJzaG91bGRSZUFuaW1hdGUiLCJvbkFuaW1hdGlvblJlU3RhcnQiXSkpLGk9eS5DaGlsZHJlbi5jb3VudCh0KSxvPWljKHRoaXMuc3RhdGUuc3R5bGUpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgdClyZXR1cm4gdChvKTtpZighcnx8MD09PWkpcmV0dXJuIHQ7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wcm9wcyxyPXQuc3R5bGUsaT12b2lkIDA9PT1yP3t9OnIsYT10LmNsYXNzTmFtZTtyZXR1cm4gT2JqZWN0KHkuY2xvbmVFbGVtZW50KShlLHhjKHt9LG4se3N0eWxlOnhjKHt9LGksbyksY2xhc3NOYW1lOmF9KSl9O3JldHVybiAxPT09aT9hKHkuQ2hpbGRyZW4ub25seSh0KSk6Zy5hLmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCx5LkNoaWxkcmVuLm1hcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBhKGUpfSkpfX1dKSYma2Moci5wcm90b3R5cGUsbiksaSYma2MocixpKSx0fSgpLGJjLmRpc3BsYXlOYW1lPSJBbmltYXRlIixiYy5wcm9wVHlwZXM9e2Zyb206bS5hLm9uZU9mVHlwZShbbS5hLm9iamVjdCxtLmEuc3RyaW5nXSksdG86bS5hLm9uZU9mVHlwZShbbS5hLm9iamVjdCxtLmEuc3RyaW5nXSksYXR0cmlidXRlTmFtZTptLmEuc3RyaW5nLGR1cmF0aW9uOm0uYS5udW1iZXIsYmVnaW46bS5hLm51bWJlcixlYXNpbmc6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEuZnVuY10pLHN0ZXBzOm0uYS5hcnJheU9mKG0uYS5zaGFwZSh7ZHVyYXRpb246bS5hLm51bWJlci5pc1JlcXVpcmVkLHN0eWxlOm0uYS5vYmplY3QuaXNSZXF1aXJlZCxlYXNpbmc6bS5hLm9uZU9mVHlwZShbbS5hLm9uZU9mKFsiZWFzZSIsImVhc2UtaW4iLCJlYXNlLW91dCIsImVhc2UtaW4tb3V0IiwibGluZWFyIl0pLG0uYS5mdW5jXSkscHJvcGVydGllczptLmEuYXJyYXlPZigic3RyaW5nIiksb25BbmltYXRpb25FbmQ6bS5hLmZ1bmN9KSksY2hpbGRyZW46bS5hLm9uZU9mVHlwZShbbS5hLm5vZGUsbS5hLmZ1bmNdKSxpc0FjdGl2ZTptLmEuYm9vbCxjYW5CZWdpbjptLmEuYm9vbCxvbkFuaW1hdGlvbkVuZDptLmEuZnVuYyxzaG91bGRSZUFuaW1hdGU6bS5hLmJvb2wsb25BbmltYXRpb25TdGFydDptLmEuZnVuYyxvbkFuaW1hdGlvblJlU3RhcnQ6bS5hLmZ1bmN9LGJjLmRlZmF1bHRQcm9wcz17YmVnaW46MCxkdXJhdGlvbjoxZTMsZnJvbToiIix0bzoiIixhdHRyaWJ1dGVOYW1lOiIiLGVhc2luZzoiZWFzZSIsaXNBY3RpdmU6ITAsY2FuQmVnaW46ITAsc3RlcHM6W10sb25BbmltYXRpb25FbmQ6ZnVuY3Rpb24oKXt9LG9uQW5pbWF0aW9uU3RhcnQ6ZnVuY3Rpb24oKXt9fSxtYz1fYykpfHxtYyxNYz1yKDIwMik7ZnVuY3Rpb24gTGMoZSl7cmV0dXJuKExjPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gRGMoKXtyZXR1cm4oRGM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBqYyhlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9e30sbz1PYmplY3Qua2V5cyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fChpW3JdPWVbcl0pO3JldHVybiBpfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmKGlbcl09ZVtyXSl9cmV0dXJuIGl9ZnVuY3Rpb24gVWMoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIEZjKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gVmMoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1MYyh0KSYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBxYyhlKXtyZXR1cm4ocWM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIEtjKGUsdCl7cmV0dXJuKEtjPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX12YXIgemM9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLnN0ZXBzLHI9ZS5kdXJhdGlvbjtyZXR1cm4gdCYmdC5sZW5ndGg/dC5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSsoSSgpKHQuZHVyYXRpb24pJiZ0LmR1cmF0aW9uPjA/dC5kdXJhdGlvbjowKX0sMCk6SSgpKHIpP3I6MH0sR2M9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLHI7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspaVtvXT1hcmd1bWVudHNbb107cmV0dXJuKHI9VmModGhpcywoZT1xYyh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSkuc3RhdGU9e2lzQWN0aXZlOiExfSxyLmhhbmRsZUVudGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG49ci5wcm9wcyxpPW4uYXBwZWFyT3B0aW9ucyxvPW4uZW50ZXJPcHRpb25zO3IuaGFuZGxlU3R5bGVBY3RpdmUodD9pOm8pfSxyLmhhbmRsZUV4aXQ9ZnVuY3Rpb24oKXtyLmhhbmRsZVN0eWxlQWN0aXZlKHIucHJvcHMubGVhdmVPcHRpb25zKX0scn12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZLYyhlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsKG49W3trZXk6ImhhbmRsZVN0eWxlQWN0aXZlIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlKXt2YXIgdD1lLm9uQW5pbWF0aW9uRW5kP2Z1bmN0aW9uKCl7ZS5vbkFuaW1hdGlvbkVuZCgpfTpudWxsO3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7VWMoZSx0LHJbdF0pfSl9cmV0dXJuIGV9KHt9LGUse29uQW5pbWF0aW9uRW5kOnQsaXNBY3RpdmU6ITB9KSl9fX0se2tleToicGFyc2VUaW1lb3V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFwcGVhck9wdGlvbnMscj1lLmVudGVyT3B0aW9ucyxuPWUubGVhdmVPcHRpb25zO3JldHVybiB6Yyh0KSt6YyhyKSt6YyhuKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQuY2hpbGRyZW4sbj0odC5hcHBlYXJPcHRpb25zLHQuZW50ZXJPcHRpb25zLHQubGVhdmVPcHRpb25zLGpjKHQsWyJjaGlsZHJlbiIsImFwcGVhck9wdGlvbnMiLCJlbnRlck9wdGlvbnMiLCJsZWF2ZU9wdGlvbnMiXSkpO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudChNYy5UcmFuc2l0aW9uLERjKHt9LG4se29uRW50ZXI6dGhpcy5oYW5kbGVFbnRlcixvbkV4aXQ6dGhpcy5oYW5kbGVFeGl0LHRpbWVvdXQ6dGhpcy5wYXJzZVRpbWVvdXQoKX0pLGZ1bmN0aW9uKCl7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KEJjLGUuc3RhdGUseS5DaGlsZHJlbi5vbmx5KHIpKX0pfX1dKSYmRmMoci5wcm90b3R5cGUsbiksaSYmRmMocixpKSx0fSgpO0djLnByb3BUeXBlcz17YXBwZWFyT3B0aW9uczptLmEub2JqZWN0LGVudGVyT3B0aW9uczptLmEub2JqZWN0LGxlYXZlT3B0aW9uczptLmEub2JqZWN0LGNoaWxkcmVuOm0uYS5lbGVtZW50fTt2YXIgSGM9R2M7ZnVuY3Rpb24gV2MoZSl7dmFyIHQ9ZS5jb21wb25lbnQscj1lLmNoaWxkcmVuLG49ZS5hcHBlYXIsaT1lLmVudGVyLG89ZS5sZWF2ZTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoTWMuVHJhbnNpdGlvbkdyb3VwLHtjb21wb25lbnQ6dH0seS5DaGlsZHJlbi5tYXAocixmdW5jdGlvbihlLHQpe3JldHVybiBnLmEuY3JlYXRlRWxlbWVudChIYyx7YXBwZWFyT3B0aW9uczpuLGVudGVyT3B0aW9uczppLGxlYXZlT3B0aW9uczpvLGtleToiY2hpbGQtIi5jb25jYXQodCl9LGUpfSkpfVdjLnByb3BUeXBlcz17YXBwZWFyOm0uYS5vYmplY3QsZW50ZXI6bS5hLm9iamVjdCxsZWF2ZTptLmEub2JqZWN0LGNoaWxkcmVuOm0uYS5vbmVPZlR5cGUoW20uYS5hcnJheSxtLmEuZWxlbWVudF0pLGNvbXBvbmVudDptLmEuYW55fSxXYy5kZWZhdWx0UHJvcHM9e2NvbXBvbmVudDoic3BhbiJ9O3ZhciBZYyxYYyxRYywkYz1CYztmdW5jdGlvbiBaYyhlKXtyZXR1cm4oWmM9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBKYyhlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gZWYoKXtyZXR1cm4oZWY9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB0ZihlLHQ="
}

github/deemru/w8io/169f3d6 
3.21 ms