mberr · data · 2.7c767379.chunk.js_16
{
    "2.7c767379.chunk.js_16": "base64:fSx3aD17dmFsdWVBY2Nlc3NvcjpmdW5jdGlvbihlKXtyZXR1cm4gZCgpKGUudmFsdWUpP2goKShlLnZhbHVlKTplLnZhbHVlfX07ZnVuY3Rpb24gVGgoZSl7dmFyIHQ9ZS5kYXRhLHI9ZS52YWx1ZUFjY2Vzc29yLG49ZS5kYXRhS2V5LGk9ZS5jbG9ja1dpc2Usbz1lLmlkLGE9U2goZSxbImRhdGEiLCJ2YWx1ZUFjY2Vzc29yIiwiZGF0YUtleSIsImNsb2NrV2lzZSIsImlkIl0pO3JldHVybiB0JiZ0Lmxlbmd0aD9nLmEuY3JlYXRlRWxlbWVudCh6cyx7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1sYWJlbC1saXN0In0sdC5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgcz1mKCkobik/cihlLHQpOkFsKGUmJmUucGF5bG9hZCxuKSx1PWYoKShvKT97fTp7aWQ6IiIuY29uY2F0KG8sIi0iKS5jb25jYXQodCl9O3JldHVybiBnLmEuY3JlYXRlRWxlbWVudChnaCxtaCh7fSxlZShlKSxhLHUse2luZGV4OnQsdmFsdWU6cyx2aWV3Qm94OmdoLnBhcnNlVmlld0JveChmKCkoaSk/ZTpiaCh7fSxlLHtjbG9ja1dpc2U6aX0pKSxrZXk6ImxhYmVsLSIuY29uY2F0KHQpfSkpfSkpOm51bGx9VGgucHJvcFR5cGVzPUVoLFRoLmRpc3BsYXlOYW1lPSJMYWJlbExpc3QiO1RoLnJlbmRlckNhbGxCeVBhcmVudD1mdW5jdGlvbihlLHQpe3ZhciByPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07aWYoIWV8fCFlLmNoaWxkcmVuJiZyJiYhZS5sYWJlbClyZXR1cm4gbnVsbDt2YXIgbj1lLmNoaWxkcmVuLGk9WihuLFRoKS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm4gT2JqZWN0KHkuY2xvbmVFbGVtZW50KShlLHtkYXRhOnQsa2V5OiJsYWJlbExpc3QtIi5jb25jYXQocil9KX0pO3JldHVybiByP1tmdW5jdGlvbihlLHQpe3JldHVybiBlPyEwPT09ZT9nLmEuY3JlYXRlRWxlbWVudChUaCx7a2V5OiJsYWJlbExpc3QtaW1wbGljaXQiLGRhdGE6dH0pOmcuYS5pc1ZhbGlkRWxlbWVudChlKXx8dSgpKGUpP2cuYS5jcmVhdGVFbGVtZW50KFRoLHtrZXk6ImxhYmVsTGlzdC1pbXBsaWNpdCIsZGF0YTp0LGNvbnRlbnQ6ZX0pOmEoKShlKT9nLmEuY3JlYXRlRWxlbWVudChUaCxtaCh7ZGF0YTp0fSxlLHtrZXk6ImxhYmVsTGlzdC1pbXBsaWNpdCJ9KSk6bnVsbDpudWxsfShlLmxhYmVsLHQpXS5jb25jYXQodmgoaSkpOml9LFRoLmRlZmF1bHRQcm9wcz13aDt2YXIgQWgsQ2gseGgsSWg9VGg7ZnVuY3Rpb24ga2goZSl7cmV0dXJuKGtoPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gT2goZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBOaChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWtoKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIFBoKGUpe3JldHVybihQaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gUmgoZSx0KXtyZXR1cm4oUmg9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBCaCxNaCxMaCxEaD1LKCh4aD1DaD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksTmgodGhpcyxQaCh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJlJoKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsfX1dKSYmT2goci5wcm90b3R5cGUsbiksaSYmT2gocixpKSx0fSgpLENoLmRpc3BsYXlOYW1lPSJaQXhpcyIsQ2gucHJvcFR5cGVzPXt0eXBlOm0uYS5vbmVPZihbIm51bWJlciIsImNhdGVnb3J5Il0pLG5hbWU6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSksdW5pdDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSx6QXhpc0lkOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLGRhdGFLZXk6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyLG0uYS5mdW5jXSkscmFuZ2U6bS5hLmFycmF5T2YobS5hLm51bWJlciksc2NhbGU6bS5hLm9uZU9mVHlwZShbbS5hLm9uZU9mKFsiYXV0byIsImxpbmVhciIsInBvdyIsInNxcnQiLCJsb2ciLCJpZGVudGl0eSIsInRpbWUiLCJiYW5kIiwicG9pbnQiLCJvcmRpbmFsIiwicXVhbnRpbGUiLCJxdWFudGl6ZSIsInV0YyIsInNlcXVlbnRpYWwiLCJ0aHJlc2hvbGQiXSksbS5hLmZ1bmNdKX0sQ2guZGVmYXVsdFByb3BzPXt6QXhpc0lkOjAscmFuZ2U6WzY0LDY0XSxzY2FsZToiYXV0byIsdHlwZToibnVtYmVyIn0sQWg9eGgpKXx8QWg7ZnVuY3Rpb24gamgoZSl7cmV0dXJuKGpoPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gVWgoKXtyZXR1cm4oVWg9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBGaChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtWaChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBWaChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gcWgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBLaChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWpoKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIHpoKGUpe3JldHVybih6aD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gR2goZSx0KXtyZXR1cm4oR2g9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBIaD17Y3VydmVCYXNpc0Nsb3NlZDpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhzKGUpfSxjdXJ2ZUJhc2lzT3BlbjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHBzKGUpfSxjdXJ2ZUJhc2lzOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHMoZSl9LGN1cnZlTGluZWFyQ2xvc2VkOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgd3MoZSl9LGN1cnZlTGluZWFyOlVhLGN1cnZlTW9ub3RvbmVYOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSXMoZSl9LGN1cnZlTW9ub3RvbmVZOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcga3MoZSl9LGN1cnZlTmF0dXJhbDpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5zKGUpfSxjdXJ2ZVN0ZXA6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBScyhlLC41KX0sY3VydmVTdGVwQWZ0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBScyhlLDEpfSxjdXJ2ZVN0ZXBCZWZvcmU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBScyhlLDApfX0sV2g9ZnVuY3Rpb24oZSl7cmV0dXJuIGUueD09PStlLngmJmUueT09PStlLnl9LFloPWZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LFhoPWZ1bmN0aW9uKGUpe3JldHVybiBlLnl9LFFoPUsoKExoPU1oPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSxLaCh0aGlzLHpoKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmR2goZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJnZXRQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5wcm9wcyxyPXQudHlwZSxuPXQucG9pbnRzLGk9dC5iYXNlTGluZSxvPXQubGF5b3V0LGE9dC5jb25uZWN0TnVsbHMscz1mdW5jdGlvbihlLHQpe2lmKHUoKShlKSlyZXR1cm4gZTt2YXIgcj0iY3VydmUiLmNvbmNhdChlLnNsaWNlKDAsMSkudG9VcHBlckNhc2UoKSkuY29uY2F0KGUuc2xpY2UoMSkpO3JldHVybiJjdXJ2ZU1vbm90b25lIj09PXImJnQ/SGhbIiIuY29uY2F0KHIpLmNvbmNhdCgidmVydGljYWwiPT09dD8iWSI6IlgiKV06SGhbcl18fFVhfShyLG8pLGM9YT9uLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gV2goZSl9KTpuO2lmKGQoKShpKSl7dmFyIGY9YT9pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gV2goZSl9KTppLGw9Yy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gRmgoe30sZSx7YmFzZTpmW3RdfSl9KTtyZXR1cm4oZT0idmVydGljYWwiPT09bz9LYSgpLnkoWGgpLngxKFloKS54MChmdW5jdGlvbihlKXtyZXR1cm4gZS5iYXNlLnh9KTpLYSgpLngoWWgpLnkxKFhoKS55MChmdW5jdGlvbihlKXtyZXR1cm4gZS5iYXNlLnl9KSkuZGVmaW5lZChXaCkuY3VydmUocyksZShsKX1yZXR1cm4oZT0idmVydGljYWwiPT09byYmUihpKT9LYSgpLnkoWGgpLngxKFloKS54MChpKTpSKGkpP0thKCkueChZaCkueTEoWGgpLnkwKGkpOnFhKCkueChZaCkueShYaCkpLmRlZmluZWQoV2gpLmN1cnZlKHMpLGUoYyl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2xhc3NOYW1lLHI9ZS5wb2ludHMsbj1lLnBhdGgsaT1lLnBhdGhSZWY7aWYoKCFyfHwhci5sZW5ndGgpJiYhbilyZXR1cm4gbnVsbDt2YXIgbz1yJiZyLmxlbmd0aD90aGlzLmdldFBhdGgoKTpuO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgicGF0aCIsVWgoe30sZWUodGhpcy5wcm9wcykscmUodGhpcy5wcm9wcyxudWxsLCEwKSx7Y2xhc3NOYW1lOl8oKSgicmVjaGFydHMtY3VydmUiLHQpLGQ6byxyZWY6aX0pKX19XSkmJnFoKHIucHJvdG90eXBlLG4pLGkmJnFoKHIsaSksdH0oKSxNaC5kaXNwbGF5TmFtZT0iQ3VydmUiLE1oLnByb3BUeXBlcz1GaCh7fSxILHtjbGFzc05hbWU6bS5hLnN0cmluZyx0eXBlOm0uYS5vbmVPZlR5cGUoW20uYS5vbmVPZihbImJhc2lzIiwiYmFzaXNDbG9zZWQiLCJiYXNpc09wZW4iLCJsaW5lYXIiLCJsaW5lYXJDbG9zZWQiLCJuYXR1cmFsIiwibW9ub3RvbmVYIiwibW9ub3RvbmVZIiwibW9ub3RvbmUiLCJzdGVwIiwic3RlcEJlZm9yZSIsInN0ZXBBZnRlciJdKSxtLmEuZnVuY10pLGxheW91dDptLmEub25lT2YoWyJob3Jpem9udGFsIiwidmVydGljYWwiXSksYmFzZUxpbmU6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuYXJyYXldKSxwb2ludHM6bS5hLmFycmF5T2YobS5hLm9iamVjdCksY29ubmVjdE51bGxzOm0uYS5ib29sLHBhdGg6bS5hLnN0cmluZyxwYXRoUmVmOm0uYS5mdW5jfSksTWguZGVmYXVsdFByb3BzPXt0eXBlOiJsaW5lYXIiLHBvaW50czpbXSxjb25uZWN0TnVsbHM6ITF9LEJoPUxoKSl8fEJoO2Z1bmN0aW9uICRoKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBaaCgpe3JldHVybiBudWxsfVpoLnByb3BUeXBlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXskaChlLHQsclt0XSl9KX1yZXR1cm4gZX0oe30sSCksWmguZGlzcGxheU5hbWU9IkNlbGwiO3ZhciBKaCxlcCx0cCxycD1aaDtmdW5jdGlvbiBucChlKXtyZXR1cm4obnA9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBpcCgpe3JldHVybihpcD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG9wKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FwKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIGFwKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBzcChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHVwKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09bnAodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gY3AoZSl7cmV0dXJuKGNwPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBmcChlLHQpe3JldHVybihmcD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIGxwLGhwLHBwLGRwPUsoKHRwPWVwPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyOyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47bysrKWlbb109YXJndW1lbnRzW29dO3JldHVybihyPXVwKHRoaXMsKGU9Y3AodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSkpLnN0YXRlPXtpc0FuaW1hdGlvbkZpbmlzaGVkOiExfSxyLmNhY2hlUHJldlBvaW50cz1mdW5jdGlvbihlKXtyLnNldFN0YXRlKHtwcmV2UG9pbnRzOmV9KX0sci5oYW5kbGVBbmltYXRpb25FbmQ9ZnVuY3Rpb24oKXtyLnNldFN0YXRlKHtpc0FuaW1hdGlvbkZpbmlzaGVkOiEwfSl9LHIuaGFuZGxlQW5pbWF0aW9uU3RhcnQ9ZnVuY3Rpb24oKXtyLnNldFN0YXRlKHtpc0FuaW1hdGlvbkZpbmlzaGVkOiExfSl9LHIuaWQ9TCgicmVjaGFydHMtc2NhdHRlci0iKSxyfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJmZwKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCxpPVt7a2V5OiJyZW5kZXJTeW1ib2xJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBnLmEuaXNWYWxpZEVsZW1lbnQoZSk/Zy5hLmNsb25lRWxlbWVudChlLHQpOnUoKShlKT9lKHQpOmcuYS5jcmVhdGVFbGVtZW50KFpmLGlwKHt9LHQse3R5cGU6ZX0pKX19XSwobj1be2tleToiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxyPXQuYW5pbWF0aW9uSWQsbj10LnBvaW50cztlLmFuaW1hdGlvbklkIT09ciYmdGhpcy5jYWNoZVByZXZQb2ludHMobil9fSx7a2V5OiJyZW5kZXJTeW1ib2xzU3RhdGljYWxseSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMucHJvcHMsbj1yLnNoYXBlLGk9ci5hY3RpdmVTaGFwZSxvPXIuYWN0aXZlSW5kZXgsYT1lZSh0aGlzLnByb3BzKTtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSxyKXt2YXIgcz1vcCh7a2V5OiJzeW1ib2wtIi5jb25jYXQocil9LGEsZSk7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLGlwKHtjbGFzc05hbWU6InJlY2hhcnRzLXNjYXR0ZXItc3ltYm9sIn0saWUodC5wcm9wcyxlLHIpLHtrZXk6InN5bWJvbC0iLmNvbmNhdChyKX0pLHQuY29uc3RydWN0b3IucmVuZGVyU3ltYm9sSXRlbShvPT09cj9pOm4scykpfSl9fSx7a2V5OiJyZW5kZXJTeW1ib2xzV2l0aEFuaW1hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQucG9pbnRzLG49dC5pc0FuaW1hdGlvbkFjdGl2ZSxpPXQuYW5pbWF0aW9uQmVnaW4sbz10LmFuaW1hdGlvbkR1cmF0aW9uLGE9dC5hbmltYXRpb25FYXNpbmcscz10LmFuaW1hdGlvbklkLHU9dGhpcy5zdGF0ZS5wcmV2UG9pbnRzO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgkYyx7YmVnaW46aSxkdXJhdGlvbjpvLGlzQWN0aXZlOm4sZWFzaW5nOmEsZnJvbTp7dDowfSx0bzp7dDoxfSxrZXk6InBpZS0iLmNvbmNhdChzKSxvbkFuaW1hdGlvbkVuZDp0aGlzLmhhbmRsZUFuaW1hdGlvbkVuZCxvbkFuaW1hdGlvblN0YXJ0OnRoaXMuaGFuZGxlQW5pbWF0aW9uU3RhcnR9LGZ1bmN0aW9uKHQpe3ZhciBuPXQudCxpPXIubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIHI9dSYmdVt0XTtpZihyKXt2YXIgaT1VKHIuY3gsZS5jeCksbz1VKHIuY3ksZS5jeSksYT1VKHIuc2l6ZSxlLnNpemUpO3JldHVybiBvcCh7fSxlLHtjeDppKG4pLGN5Om8obiksc2l6ZTphKG4pfSl9cmV0dXJuIG9wKHt9LGUse3NpemU6VSgwLGUuc2l6ZSkobil9KX0pO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCh6cyxudWxsLGUucmVuZGVyU3ltYm9sc1N0YXRpY2FsbHkoaSkpfSl9fSx7a2V5OiJyZW5kZXJTeW1ib2xzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBvaW50cyxyPWUuaXNBbmltYXRpb25BY3RpdmUsbj10aGlzLnN0YXRlLnByZXZQb2ludHM7cmV0dXJuIShyJiZ0JiZ0Lmxlbmd0aCl8fG4mJlBlKCkobix0KT90aGlzLnJlbmRlclN5bWJvbHNTdGF0aWNhbGx5KHQpOnRoaXMucmVuZGVyU3ltYm9sc1dpdGhBbmltYXRpb24oKX19LHtrZXk6InJlbmRlckVycm9yQmFyIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMucHJvcHMuaXNBbmltYXRpb25BY3RpdmUmJiF0aGlzLnN0YXRlLmlzQW5pbWF0aW9uRmluaXNoZWQpcmV0dXJuIG51bGw7dmFyIGU9dGhpcy5wcm9wcyx0PWUucG9pbnRzLHI9ZS54QXhpcyxuPWUueUF4aXMsaT1lLmNoaWxkcmVuLG89WihpLGtmKTtpZighbylyZXR1cm4gbnVsbDtmdW5jdGlvbiBhKGUsdCl7cmV0dXJue3g6ZS5jeCx5OmUuY3ksdmFsdWU6ZS55LGVycm9yVmFsOkFsKGUsdCl9fWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm57eDplLmN4LHk6ZS5jeSx2YWx1ZTplLngsZXJyb3JWYWw6QWwoZSx0KX19cmV0dXJuIG8ubWFwKGZ1bmN0aW9uKGUsaSl7dmFyIG89ZS5wcm9wcy5kaXJlY3Rpb247cmV0dXJuIGcuYS5jbG9uZUVsZW1lbnQoZSx7a2V5OmksZGF0YTp0LHhBeGlzOnIseUF4aXM6bixsYXlvdXQ6IngiPT09bz8idmVydGljYWwiOiJob3Jpem9udGFsIixkYXRhUG9pbnRGb3JtYXR0ZXI6IngiPT09bz9zOmF9KX0pfX0se2tleToicmVuZGVyTGluZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5wcm9wcyxuPXIucG9pbnRzLGk9ci5saW5lLG89ci5saW5lVHlwZSxhPXIubGluZUpvaW50VHlwZSxzPWVlKHRoaXMucHJvcHMpLGM9ZWUoaSk7aWYoImpvaW50Ij09PW8pZT1uLm1hcChmdW5jdGlvbihlKXtyZXR1cm57eDplLmN4LHk6ZS5jeX19KTtlbHNlIGlmKCJmaXR0aW5nIj09PW8pe3ZhciBmPWZ1bmN0aW9uKGUpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKHZhciB0PWUubGVuZ3RoLHI9MCxuPTAsaT0wLG89MCxhPTEvMCxzPS0xLzAsdT0wO3U8dDt1Kyspcis9ZVt1XS5jeCxuKz1lW3VdLmN5LGkrPWVbdV0uY3gqZVt1XS5jeSxvKz1lW3VdLmN4KmVbdV0uY3gsYT1NYXRoLm1pbihhLGVbdV0uY3gpLHM9TWF0aC5tYXgocyxlW3VdLmN4KTt2YXIgYz10Km8hPT1yKnI/KHQqaS1yKm4pLyh0Km8tcipyKTowO3JldHVybnt4bWluOmEseG1heDpzLGE6YyxiOihuLWMqcikvdH19KG4pLGw9Zi54bWluLGg9Zi54bWF4LHA9Zi5hLGQ9Zi5iLHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHAqZStkfTtlPVt7eDpsLHk6eShsKX0se3g6aCx5OnkoaCl9XX12YXIgdj1vcCh7fSxzLHtmaWxsOiJub25lIixzdHJva2U6cyYmcy5maWxsfSxjLHtwb2ludHM6ZX0pO3JldHVybiB0PWcuYS5pc1ZhbGlkRWxlbWVudChpKT9nLmEuY2xvbmVFbGVtZW50KGksdik6dSgpKGkpP2kodik6Zy5hLmNyZWF0ZUVsZW1lbnQoUWgsaXAoe30sdix7dHlwZTphfSkpLGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6InJlY2hhcnRzLXNjYXR0ZXItbGluZSIsa2V5OiJyZWNoYXJ0cy1zY2F0dGVyLWxpbmUifSx0KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5oaWRlLHI9ZS5wb2ludHMsbj1lLmxpbmUsaT1lLmNsYXNzTmFtZSxvPWUueEF4aXMsYT1lLnlBeGlzLHM9ZS5sZWZ0LHU9ZS50b3AsYz1lLndpZHRoLGw9ZS5oZWlnaHQsaD1lLmlkO2lmKHR8fCFyfHwhci5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHA9dGhpcy5zdGF0ZSxkPXAuaXNBbmltYXRpb25BY3RpdmUseT1wLmlzQW5pbWF0aW9uRmluaXNoZWQsdj1fKCkoInJlY2hhcnRzLXNjYXR0ZXIiLGkpLG09byYmby5hbGxvd0RhdGFPdmVyZmxvd3x8YSYmYS5hbGxvd0RhdGFPdmVyZmxvdyxiPWYoKShoKT90aGlzLmlkOmg7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6dixjbGlwUGF0aDptPyJ1cmwoI2NsaXBQYXRoLSIuY29uY2F0KGIsIikiKTpudWxsfSxtP2cuYS5jcmVhdGVFbGVtZW50KCJkZWZzIixudWxsLGcuYS5jcmVhdGVFbGVtZW50KCJjbGlwUGF0aCIse2lkOiJjbGlwUGF0aC0iLmNvbmNhdChiKX0sZy5hLmNyZWF0ZUVsZW1lbnQoInJlY3QiLHt4OnMseTp1LHdpZHRoOmMsaGVpZ2h0Omx9KSkpOm51bGwsbiYmdGhpcy5yZW5kZXJMaW5lKCksdGhpcy5yZW5kZXJFcnJvckJhcigpLGcuYS5jcmVhdGVFbGVtZW50KHpzLHtrZXk6InJlY2hhcnRzLXNjYXR0ZXItc3ltYm9scyJ9LHRoaXMucmVuZGVyU3ltYm9scygpKSwoIWR8fHkpJiZJaC5yZW5kZXJDYWxsQnlQYXJlbnQodGhpcy5wcm9wcyxyKSl9fV0pJiZzcChyLnByb3RvdHlwZSxuKSxpJiZzcChyLGkpLHR9KCksZXAuZGlzcGxheU5hbWU9IlNjYXR0ZXIiLGVwLnByb3BUeXBlcz1vcCh7fSxXLEgse3hBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSkseUF4aXNJZDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSx6QXhpc0lkOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLGxpbmU6bS5hLm9uZU9mVHlwZShbbS5hLmJvb2wsbS5hLm9iamVjdCxtLmEuZnVuYyxtLmEuZWxlbWVudF0pLGxpbmVUeXBlOm0uYS5vbmVPZihbImZpdHRpbmciLCJqb2ludCJdKSxsaW5lSm9pbnRUeXBlOm0uYS5vbmVPZlR5cGUoW20uYS5vbmVPZihbImJhc2lzIiwiYmFzaXNDbG9zZWQiLCJiYXNpc09wZW4iLCJsaW5lYXIiLCJsaW5lYXJDbG9zZWQiLCJuYXR1cmFsIiwibW9ub3RvbmVYIiwibW9ub3RvbmVZIiwibW9ub3RvbmUiLCJzdGVwIiwic3RlcEJlZm9yZSIsInN0ZXBBZnRlciJdKSxtLmEuZnVuY10pLGxlZ2VuZFR5cGU6bS5hLm9uZU9mKFgpLHRvb2x0aXBUeXBlOm0uYS5vbmVPZihRKSxjbGFzc05hbWU6bS5hLnN0cmluZyxuYW1lOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLGFjdGl2ZUluZGV4Om0uYS5udW1iZXIsYWN0aXZlU2hhcGU6bS5hLm9uZU9mVHlwZShbbS5hLm9iamVjdCxtLmEuZnVuYyxtLmEuZWxlbWVudF0pLHNoYXBlOm0uYS5vbmVPZlR5cGUoW20uYS5vbmVPZihbImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiLCJ0cmlhbmdsZSIsInd5ZSJdKSxtLmEuZWxlbWVudCxtLmEuZnVuY10pLHBvaW50czptLmEuYXJyYXlPZihtLmEuc2hhcGUoe2N4Om0uYS5udW1iZXIsY3k6bS5hLm51bWJlcixzaXplOm0uYS5udW1iZXIsbm9kZTptLmEuc2hhcGUoe3g6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSkseTptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5zdHJpbmddKSx6Om0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pfSkscGF5bG9hZDptLmEuYW55fSkpLGhpZGU6bS5hLmJvb2wsaXNBbmltYXRpb25BY3RpdmU6bS5hLmJvb2wsYW5pbWF0aW9uSWQ6bS5hLm51bWJlcixhbmltYXRpb25CZWdpbjptLmEubnVtYmVyLGFuaW1hdGlvbkR1cmF0aW9uOm0uYS5udW1iZXIsYW5pbWF0aW9uRWFzaW5nOm0uYS5vbmVPZihbImVhc2UiLCJlYXNlLWluIiwiZWFzZS1vdXQiLCJlYXNlLWluLW91dCIsImxpbmVhciJdKX0pLGVwLmRlZmF1bHRQcm9wcz17eEF4aXNJZDowLHlBeGlzSWQ6MCx6QXhpc0lkOjAsbGVnZW5kVHlwZToiY2lyY2xlIixsaW5lVHlwZToiam9pbnQiLGxpbmVKb2ludFR5cGU6ImxpbmVhciIsZGF0YTpbXSxzaGFwZToiY2lyY2xlIixoaWRlOiExLGlzQW5pbWF0aW9uQWN0aXZlOiFhZSgpLGFuaW1hdGlvbkJlZ2luOjAsYW5pbWF0aW9uRHVyYXRpb246NDAwLGFuaW1hdGlvbkVhc2luZzoibGluZWFyIn0sZXAuZ2V0Q29tcG9zZWREYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PWUueEF4aXMscj1lLnlBeGlzLG49ZS56QXhpcyxpPWUuaXRlbSxvPWUuZGlzcGxheWVkRGF0YSxhPWUub25JdGVtTW91c2VMZWF2ZSxzPWUub25JdGVtTW91c2VFbnRlcix1PWUub2Zmc2V0LGM9ZS54QXhpc1RpY2tzLGw9ZS55QXhpc1RpY2tzLGg9aS5wcm9wcy50b29sdGlwVHlwZSxwPVooaS5wcm9wcy5jaGlsZHJlbixycCksZD1mKCkodC5kYXRhS2V5KT9pLnByb3BzLmRhdGFLZXk6dC5kYXRhS2V5LHk9ZigpKHIuZGF0YUtleSk/aS5wcm9wcy5kYXRhS2V5OnIuZGF0YUtleSxnPW4mJm4uZGF0YUtleSx2PW4/bi5yYW5nZTpEaC5kZWZhdWx0UHJvcHMucmFuZ2UsbT12JiZ2WzBdLGI9dC5zY2FsZS5iYW5kd2lkdGg/dC5zY2FsZS5iYW5kd2lkdGgoKTowLF89ci5zY2FsZS5iYW5kd2lkdGg/ci5zY2FsZS5iYW5kd2lkdGgoKTowLFM9by5tYXAoZnVuY3Rpb24oZSxpKXt2YXIgbz1lW2RdLGE9ZVt5XSxzPSFmKCkoZykmJmVbZ118fCItIix1PVt7bmFtZTp0Lm5hbWV8fHQuZGF0YUtleSx1bml0OnQudW5pdHx8IiIsdmFsdWU6byxwYXlsb2FkOmUsZGF0YUtleTpkLHR5cGU6aH0se25hbWU6ci5uYW1lfHxyLmRhdGFLZXksdW5pdDpyLnVuaXR8fCIiLHZhbHVlOmEscGF5bG9hZDplLGRhdGFLZXk6eSx0eXBlOmh9XTsiLSIhPT1zJiZ1LnB1c2goe25hbWU6bi5uYW1lfHxuLmRhdGFLZXksdW5pdDpuLnVuaXR8fCIiLHZhbHVlOnMscGF5bG9hZDplLGRhdGFLZXk6Zyx0eXBlOmh9KTt2YXIgdj1GbCh7YXhpczp0LHRpY2tzOmMsYmFuZFNpemU6YixlbnRyeTplLGluZGV4OmksZGF0YUtleTpkfSksUz1GbCh7YXhpczpyLHRpY2tzOmwsYmFuZFNpemU6XyxlbnRyeTplLGluZGV4OmksZGF0YUtleTp5fSksRT0iLSIhPT1zP24uc2NhbGUocyk6bSx3PU1hdGguc3FydChNYXRoLm1heChFLDApL01hdGguUEkpO3JldHVybiBvcCh7fSxlLHtjeDp2LGN5OlMseDp2LXcseTpTLXcseEF4aXM6dCx5QXhpczpyLHpBeGlzOm4sd2lkdGg6Mip3LGhlaWdodDoyKncsc2l6ZTpFLG5vZGU6e3g6byx5OmEsejpzfSx0b29sdGlwUGF5bG9hZDp1LHRvb2x0aXBQb3NpdGlvbjp7eDp2LHk6U30scGF5bG9hZDplfSxwJiZwW2ldJiZwW2ldLnByb3BzKX0pO3JldHVybiBvcCh7b25Nb3VzZUxlYXZlOmEsb25Nb3VzZUVudGVyOnMscG9pbnRzOlN9LHUpfSxKaD10cCkpfHxKaDtmdW5jdGlvbiB5cChlKXtyZXR1cm4oeXA9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBncChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHZwKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09eXAodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gbXAoZSl7cmV0dXJuKG1wPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBicChlLHQpe3JldHVybihicD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIF9wLFNwLEVwLHdwPUsoKHBwPWhwPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx2cCh0aGlzLG1wKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmYnAoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fV0pJiZncChyLnByb3RvdHlwZSxuKSxpJiZncChyLGkpLHR9KCksaHAuZGlzcGxheU5hbWU9IlhBeGlzIixocC5wcm9wVHlwZXM9e2FsbG93RGVjaW1hbHM6bS5hLmJvb2wsYWxsb3dEdXBsaWNhdGVkQ2F0ZWdvcnk6bS5hLmJvb2wsaGlkZTptLmEuYm9vbCxuYW1lOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLHVuaXQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSkseEF4aXNJZDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSxkb21haW46bS5hLmFycmF5T2YobS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyLG0uYS5mdW5jLG0uYS5vbmVPZihbImF1dG8iLCJkYXRhTWluIiwiZGF0YU1heCJdKV0pKSxkYXRhS2V5Om0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcixtLmEuZnVuY10pLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXIsbWlycm9yOm0uYS5ib29sLG9yaWVudGF0aW9uOm0uYS5vbmVPZihbInRvcCIsImJvdHRvbSJdKSx0eXBlOm0uYS5vbmVPZihbIm51bWJlciIsImNhdGVnb3J5Il0pLHRpY2tzOm0uYS5hcnJheSx0aWNrQ291bnQ6bS5hLm51bWJlcix0aWNrRm9ybWF0dGVyOm0uYS5mdW5jLHBhZGRpbmc6bS5hLnNoYXBlKHtsZWZ0Om0uYS5udW1iZXIscmlnaHQ6bS5hLm51bWJlcn0pLGFsbG93RGF0YU92ZXJmbG93Om0uYS5ib29sLHNjYWxlOm0uYS5vbmVPZlR5cGUoW20uYS5vbmVPZihbImF1dG8iLCJsaW5lYXIiLCJwb3ciLCJzcXJ0IiwibG9nIiwiaWRlbnRpdHkiLCJ0aW1lIiwiYmFuZCIsInBvaW50Iiwib3JkaW5hbCIsInF1YW50aWxlIiwicXVhbnRpemUiLCJ1dGMiLCJzZXF1ZW50aWFsIiwidGhyZXNob2xkIl0pLG0uYS5mdW5jXSksdGljazptLmEub25lT2ZUeXBlKFttLmEuYm9vbCxtLmEuZnVuYyxtLmEub2JqZWN0LG0uYS5lbGVtZW50XSksYXhpc0xpbmU6bS5hLm9uZU9mVHlwZShbbS5hLmJvb2wsbS5hLm9iamVjdF0pLHRpY2tMaW5lOm0uYS5vbmVPZlR5cGUoW20uYS5ib29sLG0uYS5vYmplY3RdKSxtaW5UaWNrR2FwOm0uYS5udW1iZXIsdGlja1NpemU6bS5hLm51bWJlcixpbnRlcnZhbDptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5vbmVPZihbInByZXNlcnZlU3RhcnQiLCJwcmVzZXJ2ZUVuZCIsInByZXNlcnZlU3RhcnRFbmQiXSldKSxyZXZlcnNlZDptLmEuYm9vbH0saHAuZGVmYXVsdFByb3BzPXthbGxvd0RlY2ltYWxzOiEwLGhpZGU6ITEsb3JpZW50YXRpb246ImJvdHRvbSIsd2lkdGg6MCxoZWlnaHQ6MzAsbWlycm9yOiExLHhBeGlzSWQ6MCx0aWNrQ291bnQ6NSx0eXBlOiJjYXRlZ29yeSIsZG9tYWluOlswLCJhdXRvIl0scGFkZGluZzp7bGVmdDowLHJpZ2h0OjB9LGFsbG93RGF0YU92ZXJmbG93OiExLHNjYWxlOiJhdXRvIixyZXZlcnNlZDohMSxhbGxvd0R1cGxpY2F0ZWRDYXRlZ29yeTohMH0sbHA9cHApKXx8bHA7ZnVuY3Rpb24gVHAoZSl7cmV0dXJuKFRwPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gQXAoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBDcChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PVRwKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIHhwKGUpe3JldHVybih4cD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gSXAoZSx0KXtyZXR1cm4oSXA9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBrcCxPcCxOcCxQcD1LKChFcD1TcD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksQ3AodGhpcyx4cCh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJklwKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsfX1dKSYmQXAoci5wcm90b3R5cGUsbiksaSYmQXAocixpKSx0fSgpLFNwLmRpc3BsYXlOYW1lPSJZQXhpcyIsU3AucHJvcFR5cGVzPXthbGxvd0RlY2ltYWxzOm0uYS5ib29sLGFsbG93RHVwbGljYXRlZENhdGVnb3J5Om0uYS5ib29sLGhpZGU6bS5hLmJvb2wsbmFtZTptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSx1bml0Om0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLHlBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSksZG9tYWluOm0uYS5hcnJheU9mKG0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcixtLmEuZnVuYyxtLmEub25lT2YoWyJhdXRvIiwiZGF0YU1pbiIsImRhdGFNYXgiXSldKSksZGF0YUtleTptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXIsbS5hLmZ1bmNdKSx0aWNrczptLmEuYXJyYXksdGlja0NvdW50Om0uYS5udW1iZXIsdGlja0Zvcm1hdHRlcjptLmEuZnVuYyx3aWR0aDptLmEubnVtYmVyLGhlaWdodDptLmEubnVtYmVyLG1pcnJvcjptLmEuYm9vbCxvcmllbnRhdGlvbjptLmEub25lT2YoWyJsZWZ0IiwicmlnaHQiXSksdHlwZTptLmEub25lT2YoWyJudW1iZXIiLCJjYXRlZ29yeSJdKSxwYWRkaW5nOm0uYS5zaGFwZSh7dG9wOm0uYS5udW1iZXIsYm90dG9tOm0uYS5udW1iZXJ9KSxhbGxvd0RhdGFPdmVyZmxvdzptLmEuYm9vbCxzY2FsZTptLmEub25lT2ZUeXBlKFttLmEub25lT2YoWyJhdXRvIiwibGluZWFyIiwicG93Iiwic3FydCIsImxvZyIsImlkZW50aXR5IiwidGltZSIsImJhbmQiLCJwb2ludCIsIm9yZGluYWwiLCJxdWFudGlsZSIsInF1YW50aXplIiwidXRjIiwic2VxdWVudGlhbCIsInRocmVzaG9sZCJdKSxtLmEuZnVuY10pLHRpY2s6bS5hLm9uZU9mVHlwZShbbS5hLmJvb2wsbS5hLmZ1bmMsbS5hLm9iamVjdCxtLmEuZWxlbWVudF0pLGF4aXNMaW5lOm0uYS5vbmVPZlR5cGUoW20uYS5ib29sLG0uYS5vYmplY3RdKSx0aWNrTGluZTptLmEub25lT2ZUeXBlKFttLmEuYm9vbCxtLmEub2JqZWN0XSksbWluVGlja0dhcDptLmEubnVtYmVyLHRpY2tTaXplOm0uYS5udW1iZXIsaW50ZXJ2YWw6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEub25lT2YoWyJwcmVzZXJ2ZVN0YXJ0IiwicHJlc2VydmVFbmQiLCJwcmVzZXJ2ZVN0YXJ0RW5kIl0pXSkscmV2ZXJzZWQ6bS5hLmJvb2x9LFNwLmRlZmF1bHRQcm9wcz17YWxsb3dEdXBsaWNhdGVkQ2F0ZWdvcnk6ITAsYWxsb3dEZWNpbWFsczohMCxoaWRlOiExLG9yaWVudGF0aW9uOiJsZWZ0Iix3aWR0aDo2MCxoZWlnaHQ6MCxtaXJyb3I6ITEseUF4aXNJZDowLHRpY2tDb3VudDo1LHR5cGU6Im51bWJlciIsZG9tYWluOlswLCJhdXRvIl0scGFkZGluZzp7dG9wOjAsYm90dG9tOjB9LGFsbG93RGF0YU92ZXJmbG93OiExLHNjYWxlOiJhdXRvIixyZXZlcnNlZDohMX0sX3A9RXApKXx8X3AsUnA9cig1MDkpLEJwPXIubihScCksTXA9cigxMjUpLExwPXIubihNcCksRHA9cig1MTApLGpwPXIubihEcCk7ZnVuY3Rpb24gVXAoZSl7cmV0dXJuKFVwPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGU="
}

Changelog:

{
    "2020.03.29 15:16": "base64:fSx3aD17dmFsdWVBY2Nlc3NvcjpmdW5jdGlvbihlKXtyZXR1cm4gZCgpKGUudmFsdWUpP2goKShlLnZhbHVlKTplLnZhbHVlfX07ZnVuY3Rpb24gVGgoZSl7dmFyIHQ9ZS5kYXRhLHI9ZS52YWx1ZUFjY2Vzc29yLG49ZS5kYXRhS2V5LGk9ZS5jbG9ja1dpc2Usbz1lLmlkLGE9U2goZSxbImRhdGEiLCJ2YWx1ZUFjY2Vzc29yIiwiZGF0YUtleSIsImNsb2NrV2lzZSIsImlkIl0pO3JldHVybiB0JiZ0Lmxlbmd0aD9nLmEuY3JlYXRlRWxlbWVudCh6cyx7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1sYWJlbC1saXN0In0sdC5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgcz1mKCkobik/cihlLHQpOkFsKGUmJmUucGF5bG9hZCxuKSx1PWYoKShvKT97fTp7aWQ6IiIuY29uY2F0KG8sIi0iKS5jb25jYXQodCl9O3JldHVybiBnLmEuY3JlYXRlRWxlbWVudChnaCxtaCh7fSxlZShlKSxhLHUse2luZGV4OnQsdmFsdWU6cyx2aWV3Qm94OmdoLnBhcnNlVmlld0JveChmKCkoaSk/ZTpiaCh7fSxlLHtjbG9ja1dpc2U6aX0pKSxrZXk6ImxhYmVsLSIuY29uY2F0KHQpfSkpfSkpOm51bGx9VGgucHJvcFR5cGVzPUVoLFRoLmRpc3BsYXlOYW1lPSJMYWJlbExpc3QiO1RoLnJlbmRlckNhbGxCeVBhcmVudD1mdW5jdGlvbihlLHQpe3ZhciByPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07aWYoIWV8fCFlLmNoaWxkcmVuJiZyJiYhZS5sYWJlbClyZXR1cm4gbnVsbDt2YXIgbj1lLmNoaWxkcmVuLGk9WihuLFRoKS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm4gT2JqZWN0KHkuY2xvbmVFbGVtZW50KShlLHtkYXRhOnQsa2V5OiJsYWJlbExpc3QtIi5jb25jYXQocil9KX0pO3JldHVybiByP1tmdW5jdGlvbihlLHQpe3JldHVybiBlPyEwPT09ZT9nLmEuY3JlYXRlRWxlbWVudChUaCx7a2V5OiJsYWJlbExpc3QtaW1wbGljaXQiLGRhdGE6dH0pOmcuYS5pc1ZhbGlkRWxlbWVudChlKXx8dSgpKGUpP2cuYS5jcmVhdGVFbGVtZW50KFRoLHtrZXk6ImxhYmVsTGlzdC1pbXBsaWNpdCIsZGF0YTp0LGNvbnRlbnQ6ZX0pOmEoKShlKT9nLmEuY3JlYXRlRWxlbWVudChUaCxtaCh7ZGF0YTp0fSxlLHtrZXk6ImxhYmVsTGlzdC1pbXBsaWNpdCJ9KSk6bnVsbDpudWxsfShlLmxhYmVsLHQpXS5jb25jYXQodmgoaSkpOml9LFRoLmRlZmF1bHRQcm9wcz13aDt2YXIgQWgsQ2gseGgsSWg9VGg7ZnVuY3Rpb24ga2goZSl7cmV0dXJuKGtoPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gT2goZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBOaChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWtoKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIFBoKGUpe3JldHVybihQaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gUmgoZSx0KXtyZXR1cm4oUmg9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBCaCxNaCxMaCxEaD1LKCh4aD1DaD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksTmgodGhpcyxQaCh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJlJoKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsfX1dKSYmT2goci5wcm90b3R5cGUsbiksaSYmT2gocixpKSx0fSgpLENoLmRpc3BsYXlOYW1lPSJaQXhpcyIsQ2gucHJvcFR5cGVzPXt0eXBlOm0uYS5vbmVPZihbIm51bWJlciIsImNhdGVnb3J5Il0pLG5hbWU6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSksdW5pdDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSx6QXhpc0lkOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLGRhdGFLZXk6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyLG0uYS5mdW5jXSkscmFuZ2U6bS5hLmFycmF5T2YobS5hLm51bWJlciksc2NhbGU6bS5hLm9uZU9mVHlwZShbbS5hLm9uZU9mKFsiYXV0byIsImxpbmVhciIsInBvdyIsInNxcnQiLCJsb2ciLCJpZGVudGl0eSIsInRpbWUiLCJiYW5kIiwicG9pbnQiLCJvcmRpbmFsIiwicXVhbnRpbGUiLCJxdWFudGl6ZSIsInV0YyIsInNlcXVlbnRpYWwiLCJ0aHJlc2hvbGQiXSksbS5hLmZ1bmNdKX0sQ2guZGVmYXVsdFByb3BzPXt6QXhpc0lkOjAscmFuZ2U6WzY0LDY0XSxzY2FsZToiYXV0byIsdHlwZToibnVtYmVyIn0sQWg9eGgpKXx8QWg7ZnVuY3Rpb24gamgoZSl7cmV0dXJuKGpoPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gVWgoKXtyZXR1cm4oVWg9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBGaChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtWaChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBWaChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gcWgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBLaChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWpoKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIHpoKGUpe3JldHVybih6aD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gR2goZSx0KXtyZXR1cm4oR2g9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBIaD17Y3VydmVCYXNpc0Nsb3NlZDpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhzKGUpfSxjdXJ2ZUJhc2lzT3BlbjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHBzKGUpfSxjdXJ2ZUJhc2lzOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHMoZSl9LGN1cnZlTGluZWFyQ2xvc2VkOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgd3MoZSl9LGN1cnZlTGluZWFyOlVhLGN1cnZlTW9ub3RvbmVYOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSXMoZSl9LGN1cnZlTW9ub3RvbmVZOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcga3MoZSl9LGN1cnZlTmF0dXJhbDpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5zKGUpfSxjdXJ2ZVN0ZXA6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBScyhlLC41KX0sY3VydmVTdGVwQWZ0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBScyhlLDEpfSxjdXJ2ZVN0ZXBCZWZvcmU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBScyhlLDApfX0sV2g9ZnVuY3Rpb24oZSl7cmV0dXJuIGUueD09PStlLngmJmUueT09PStlLnl9LFloPWZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LFhoPWZ1bmN0aW9uKGUpe3JldHVybiBlLnl9LFFoPUsoKExoPU1oPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSxLaCh0aGlzLHpoKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmR2goZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJnZXRQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5wcm9wcyxyPXQudHlwZSxuPXQucG9pbnRzLGk9dC5iYXNlTGluZSxvPXQubGF5b3V0LGE9dC5jb25uZWN0TnVsbHMscz1mdW5jdGlvbihlLHQpe2lmKHUoKShlKSlyZXR1cm4gZTt2YXIgcj0iY3VydmUiLmNvbmNhdChlLnNsaWNlKDAsMSkudG9VcHBlckNhc2UoKSkuY29uY2F0KGUuc2xpY2UoMSkpO3JldHVybiJjdXJ2ZU1vbm90b25lIj09PXImJnQ/SGhbIiIuY29uY2F0KHIpLmNvbmNhdCgidmVydGljYWwiPT09dD8iWSI6IlgiKV06SGhbcl18fFVhfShyLG8pLGM9YT9uLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gV2goZSl9KTpuO2lmKGQoKShpKSl7dmFyIGY9YT9pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gV2goZSl9KTppLGw9Yy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gRmgoe30sZSx7YmFzZTpmW3RdfSl9KTtyZXR1cm4oZT0idmVydGljYWwiPT09bz9LYSgpLnkoWGgpLngxKFloKS54MChmdW5jdGlvbihlKXtyZXR1cm4gZS5iYXNlLnh9KTpLYSgpLngoWWgpLnkxKFhoKS55MChmdW5jdGlvbihlKXtyZXR1cm4gZS5iYXNlLnl9KSkuZGVmaW5lZChXaCkuY3VydmUocyksZShsKX1yZXR1cm4oZT0idmVydGljYWwiPT09byYmUihpKT9LYSgpLnkoWGgpLngxKFloKS54MChpKTpSKGkpP0thKCkueChZaCkueTEoWGgpLnkwKGkpOnFhKCkueChZaCkueShYaCkpLmRlZmluZWQoV2gpLmN1cnZlKHMpLGUoYyl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2xhc3NOYW1lLHI9ZS5wb2ludHMsbj1lLnBhdGgsaT1lLnBhdGhSZWY7aWYoKCFyfHwhci5sZW5ndGgpJiYhbilyZXR1cm4gbnVsbDt2YXIgbz1yJiZyLmxlbmd0aD90aGlzLmdldFBhdGgoKTpuO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgicGF0aCIsVWgoe30sZWUodGhpcy5wcm9wcykscmUodGhpcy5wcm9wcyxudWxsLCEwKSx7Y2xhc3NOYW1lOl8oKSgicmVjaGFydHMtY3VydmUiLHQpLGQ6byxyZWY6aX0pKX19XSkmJnFoKHIucHJvdG90eXBlLG4pLGkmJnFoKHIsaSksdH0oKSxNaC5kaXNwbGF5TmFtZT0iQ3VydmUiLE1oLnByb3BUeXBlcz1GaCh7fSxILHtjbGFzc05hbWU6bS5hLnN0cmluZyx0eXBlOm0uYS5vbmVPZlR5cGUoW20uYS5vbmVPZihbImJhc2lzIiwiYmFzaXNDbG9zZWQiLCJiYXNpc09wZW4iLCJsaW5lYXIiLCJsaW5lYXJDbG9zZWQiLCJuYXR1cmFsIiwibW9ub3RvbmVYIiwibW9ub3RvbmVZIiwibW9ub3RvbmUiLCJzdGVwIiwic3RlcEJlZm9yZSIsInN0ZXBBZnRlciJdKSxtLmEuZnVuY10pLGxheW91dDptLmEub25lT2YoWyJob3Jpem9udGFsIiwidmVydGljYWwiXSksYmFzZUxpbmU6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuYXJyYXldKSxwb2ludHM6bS5hLmFycmF5T2YobS5hLm9iamVjdCksY29ubmVjdE51bGxzOm0uYS5ib29sLHBhdGg6bS5hLnN0cmluZyxwYXRoUmVmOm0uYS5mdW5jfSksTWguZGVmYXVsdFByb3BzPXt0eXBlOiJsaW5lYXIiLHBvaW50czpbXSxjb25uZWN0TnVsbHM6ITF9LEJoPUxoKSl8fEJoO2Z1bmN0aW9uICRoKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBaaCgpe3JldHVybiBudWxsfVpoLnByb3BUeXBlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXskaChlLHQsclt0XSl9KX1yZXR1cm4gZX0oe30sSCksWmguZGlzcGxheU5hbWU9IkNlbGwiO3ZhciBKaCxlcCx0cCxycD1aaDtmdW5jdGlvbiBucChlKXtyZXR1cm4obnA9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBpcCgpe3JldHVybihpcD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG9wKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FwKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIGFwKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBzcChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHVwKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09bnAodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gY3AoZSl7cmV0dXJuKGNwPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBmcChlLHQpe3JldHVybihmcD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIGxwLGhwLHBwLGRwPUsoKHRwPWVwPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyOyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47bysrKWlbb109YXJndW1lbnRzW29dO3JldHVybihyPXVwKHRoaXMsKGU9Y3AodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSkpLnN0YXRlPXtpc0FuaW1hdGlvbkZpbmlzaGVkOiExfSxyLmNhY2hlUHJldlBvaW50cz1mdW5jdGlvbihlKXtyLnNldFN0YXRlKHtwcmV2UG9pbnRzOmV9KX0sci5oYW5kbGVBbmltYXRpb25FbmQ9ZnVuY3Rpb24oKXtyLnNldFN0YXRlKHtpc0FuaW1hdGlvbkZpbmlzaGVkOiEwfSl9LHIuaGFuZGxlQW5pbWF0aW9uU3RhcnQ9ZnVuY3Rpb24oKXtyLnNldFN0YXRlKHtpc0FuaW1hdGlvbkZpbmlzaGVkOiExfSl9LHIuaWQ9TCgicmVjaGFydHMtc2NhdHRlci0iKSxyfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJmZwKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCxpPVt7a2V5OiJyZW5kZXJTeW1ib2xJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBnLmEuaXNWYWxpZEVsZW1lbnQoZSk/Zy5hLmNsb25lRWxlbWVudChlLHQpOnUoKShlKT9lKHQpOmcuYS5jcmVhdGVFbGVtZW50KFpmLGlwKHt9LHQse3R5cGU6ZX0pKX19XSwobj1be2tleToiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxyPXQuYW5pbWF0aW9uSWQsbj10LnBvaW50cztlLmFuaW1hdGlvbklkIT09ciYmdGhpcy5jYWNoZVByZXZQb2ludHMobil9fSx7a2V5OiJyZW5kZXJTeW1ib2xzU3RhdGljYWxseSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMucHJvcHMsbj1yLnNoYXBlLGk9ci5hY3RpdmVTaGFwZSxvPXIuYWN0aXZlSW5kZXgsYT1lZSh0aGlzLnByb3BzKTtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSxyKXt2YXIgcz1vcCh7a2V5OiJzeW1ib2wtIi5jb25jYXQocil9LGEsZSk7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLGlwKHtjbGFzc05hbWU6InJlY2hhcnRzLXNjYXR0ZXItc3ltYm9sIn0saWUodC5wcm9wcyxlLHIpLHtrZXk6InN5bWJvbC0iLmNvbmNhdChyKX0pLHQuY29uc3RydWN0b3IucmVuZGVyU3ltYm9sSXRlbShvPT09cj9pOm4scykpfSl9fSx7a2V5OiJyZW5kZXJTeW1ib2xzV2l0aEFuaW1hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQucG9pbnRzLG49dC5pc0FuaW1hdGlvbkFjdGl2ZSxpPXQuYW5pbWF0aW9uQmVnaW4sbz10LmFuaW1hdGlvbkR1cmF0aW9uLGE9dC5hbmltYXRpb25FYXNpbmcscz10LmFuaW1hdGlvbklkLHU9dGhpcy5zdGF0ZS5wcmV2UG9pbnRzO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgkYyx7YmVnaW46aSxkdXJhdGlvbjpvLGlzQWN0aXZlOm4sZWFzaW5nOmEsZnJvbTp7dDowfSx0bzp7dDoxfSxrZXk6InBpZS0iLmNvbmNhdChzKSxvbkFuaW1hdGlvbkVuZDp0aGlzLmhhbmRsZUFuaW1hdGlvbkVuZCxvbkFuaW1hdGlvblN0YXJ0OnRoaXMuaGFuZGxlQW5pbWF0aW9uU3RhcnR9LGZ1bmN0aW9uKHQpe3ZhciBuPXQudCxpPXIubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIHI9dSYmdVt0XTtpZihyKXt2YXIgaT1VKHIuY3gsZS5jeCksbz1VKHIuY3ksZS5jeSksYT1VKHIuc2l6ZSxlLnNpemUpO3JldHVybiBvcCh7fSxlLHtjeDppKG4pLGN5Om8obiksc2l6ZTphKG4pfSl9cmV0dXJuIG9wKHt9LGUse3NpemU6VSgwLGUuc2l6ZSkobil9KX0pO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCh6cyxudWxsLGUucmVuZGVyU3ltYm9sc1N0YXRpY2FsbHkoaSkpfSl9fSx7a2V5OiJyZW5kZXJTeW1ib2xzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBvaW50cyxyPWUuaXNBbmltYXRpb25BY3RpdmUsbj10aGlzLnN0YXRlLnByZXZQb2ludHM7cmV0dXJuIShyJiZ0JiZ0Lmxlbmd0aCl8fG4mJlBlKCkobix0KT90aGlzLnJlbmRlclN5bWJvbHNTdGF0aWNhbGx5KHQpOnRoaXMucmVuZGVyU3ltYm9sc1dpdGhBbmltYXRpb24oKX19LHtrZXk6InJlbmRlckVycm9yQmFyIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMucHJvcHMuaXNBbmltYXRpb25BY3RpdmUmJiF0aGlzLnN0YXRlLmlzQW5pbWF0aW9uRmluaXNoZWQpcmV0dXJuIG51bGw7dmFyIGU9dGhpcy5wcm9wcyx0PWUucG9pbnRzLHI9ZS54QXhpcyxuPWUueUF4aXMsaT1lLmNoaWxkcmVuLG89WihpLGtmKTtpZighbylyZXR1cm4gbnVsbDtmdW5jdGlvbiBhKGUsdCl7cmV0dXJue3g6ZS5jeCx5OmUuY3ksdmFsdWU6ZS55LGVycm9yVmFsOkFsKGUsdCl9fWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm57eDplLmN4LHk6ZS5jeSx2YWx1ZTplLngsZXJyb3JWYWw6QWwoZSx0KX19cmV0dXJuIG8ubWFwKGZ1bmN0aW9uKGUsaSl7dmFyIG89ZS5wcm9wcy5kaXJlY3Rpb247cmV0dXJuIGcuYS5jbG9uZUVsZW1lbnQoZSx7a2V5OmksZGF0YTp0LHhBeGlzOnIseUF4aXM6bixsYXlvdXQ6IngiPT09bz8idmVydGljYWwiOiJob3Jpem9udGFsIixkYXRhUG9pbnRGb3JtYXR0ZXI6IngiPT09bz9zOmF9KX0pfX0se2tleToicmVuZGVyTGluZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5wcm9wcyxuPXIucG9pbnRzLGk9ci5saW5lLG89ci5saW5lVHlwZSxhPXIubGluZUpvaW50VHlwZSxzPWVlKHRoaXMucHJvcHMpLGM9ZWUoaSk7aWYoImpvaW50Ij09PW8pZT1uLm1hcChmdW5jdGlvbihlKXtyZXR1cm57eDplLmN4LHk6ZS5jeX19KTtlbHNlIGlmKCJmaXR0aW5nIj09PW8pe3ZhciBmPWZ1bmN0aW9uKGUpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKHZhciB0PWUubGVuZ3RoLHI9MCxuPTAsaT0wLG89MCxhPTEvMCxzPS0xLzAsdT0wO3U8dDt1Kyspcis9ZVt1XS5jeCxuKz1lW3VdLmN5LGkrPWVbdV0uY3gqZVt1XS5jeSxvKz1lW3VdLmN4KmVbdV0uY3gsYT1NYXRoLm1pbihhLGVbdV0uY3gpLHM9TWF0aC5tYXgocyxlW3VdLmN4KTt2YXIgYz10Km8hPT1yKnI/KHQqaS1yKm4pLyh0Km8tcipyKTowO3JldHVybnt4bWluOmEseG1heDpzLGE6YyxiOihuLWMqcikvdH19KG4pLGw9Zi54bWluLGg9Zi54bWF4LHA9Zi5hLGQ9Zi5iLHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHAqZStkfTtlPVt7eDpsLHk6eShsKX0se3g6aCx5OnkoaCl9XX12YXIgdj1vcCh7fSxzLHtmaWxsOiJub25lIixzdHJva2U6cyYmcy5maWxsfSxjLHtwb2ludHM6ZX0pO3JldHVybiB0PWcuYS5pc1ZhbGlkRWxlbWVudChpKT9nLmEuY2xvbmVFbGVtZW50KGksdik6dSgpKGkpP2kodik6Zy5hLmNyZWF0ZUVsZW1lbnQoUWgsaXAoe30sdix7dHlwZTphfSkpLGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6InJlY2hhcnRzLXNjYXR0ZXItbGluZSIsa2V5OiJyZWNoYXJ0cy1zY2F0dGVyLWxpbmUifSx0KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5oaWRlLHI9ZS5wb2ludHMsbj1lLmxpbmUsaT1lLmNsYXNzTmFtZSxvPWUueEF4aXMsYT1lLnlBeGlzLHM9ZS5sZWZ0LHU9ZS50b3AsYz1lLndpZHRoLGw9ZS5oZWlnaHQsaD1lLmlkO2lmKHR8fCFyfHwhci5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHA9dGhpcy5zdGF0ZSxkPXAuaXNBbmltYXRpb25BY3RpdmUseT1wLmlzQW5pbWF0aW9uRmluaXNoZWQsdj1fKCkoInJlY2hhcnRzLXNjYXR0ZXIiLGkpLG09byYmby5hbGxvd0RhdGFPdmVyZmxvd3x8YSYmYS5hbGxvd0RhdGFPdmVyZmxvdyxiPWYoKShoKT90aGlzLmlkOmg7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6dixjbGlwUGF0aDptPyJ1cmwoI2NsaXBQYXRoLSIuY29uY2F0KGIsIikiKTpudWxsfSxtP2cuYS5jcmVhdGVFbGVtZW50KCJkZWZzIixudWxsLGcuYS5jcmVhdGVFbGVtZW50KCJjbGlwUGF0aCIse2lkOiJjbGlwUGF0aC0iLmNvbmNhdChiKX0sZy5hLmNyZWF0ZUVsZW1lbnQoInJlY3QiLHt4OnMseTp1LHdpZHRoOmMsaGVpZ2h0Omx9KSkpOm51bGwsbiYmdGhpcy5yZW5kZXJMaW5lKCksdGhpcy5yZW5kZXJFcnJvckJhcigpLGcuYS5jcmVhdGVFbGVtZW50KHpzLHtrZXk6InJlY2hhcnRzLXNjYXR0ZXItc3ltYm9scyJ9LHRoaXMucmVuZGVyU3ltYm9scygpKSwoIWR8fHkpJiZJaC5yZW5kZXJDYWxsQnlQYXJlbnQodGhpcy5wcm9wcyxyKSl9fV0pJiZzcChyLnByb3RvdHlwZSxuKSxpJiZzcChyLGkpLHR9KCksZXAuZGlzcGxheU5hbWU9IlNjYXR0ZXIiLGVwLnByb3BUeXBlcz1vcCh7fSxXLEgse3hBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSkseUF4aXNJZDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSx6QXhpc0lkOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLGxpbmU6bS5hLm9uZU9mVHlwZShbbS5hLmJvb2wsbS5hLm9iamVjdCxtLmEuZnVuYyxtLmEuZWxlbWVudF0pLGxpbmVUeXBlOm0uYS5vbmVPZihbImZpdHRpbmciLCJqb2ludCJdKSxsaW5lSm9pbnRUeXBlOm0uYS5vbmVPZlR5cGUoW20uYS5vbmVPZihbImJhc2lzIiwiYmFzaXNDbG9zZWQiLCJiYXNpc09wZW4iLCJsaW5lYXIiLCJsaW5lYXJDbG9zZWQiLCJuYXR1cmFsIiwibW9ub3RvbmVYIiwibW9ub3RvbmVZIiwibW9ub3RvbmUiLCJzdGVwIiwic3RlcEJlZm9yZSIsInN0ZXBBZnRlciJdKSxtLmEuZnVuY10pLGxlZ2VuZFR5cGU6bS5hLm9uZU9mKFgpLHRvb2x0aXBUeXBlOm0uYS5vbmVPZihRKSxjbGFzc05hbWU6bS5hLnN0cmluZyxuYW1lOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLGFjdGl2ZUluZGV4Om0uYS5udW1iZXIsYWN0aXZlU2hhcGU6bS5hLm9uZU9mVHlwZShbbS5hLm9iamVjdCxtLmEuZnVuYyxtLmEuZWxlbWVudF0pLHNoYXBlOm0uYS5vbmVPZlR5cGUoW20uYS5vbmVPZihbImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiLCJ0cmlhbmdsZSIsInd5ZSJdKSxtLmEuZWxlbWVudCxtLmEuZnVuY10pLHBvaW50czptLmEuYXJyYXlPZihtLmEuc2hhcGUoe2N4Om0uYS5udW1iZXIsY3k6bS5hLm51bWJlcixzaXplOm0uYS5udW1iZXIsbm9kZTptLmEuc2hhcGUoe3g6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSkseTptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5zdHJpbmddKSx6Om0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pfSkscGF5bG9hZDptLmEuYW55fSkpLGhpZGU6bS5hLmJvb2wsaXNBbmltYXRpb25BY3RpdmU6bS5hLmJvb2wsYW5pbWF0aW9uSWQ6bS5hLm51bWJlcixhbmltYXRpb25CZWdpbjptLmEubnVtYmVyLGFuaW1hdGlvbkR1cmF0aW9uOm0uYS5udW1iZXIsYW5pbWF0aW9uRWFzaW5nOm0uYS5vbmVPZihbImVhc2UiLCJlYXNlLWluIiwiZWFzZS1vdXQiLCJlYXNlLWluLW91dCIsImxpbmVhciJdKX0pLGVwLmRlZmF1bHRQcm9wcz17eEF4aXNJZDowLHlBeGlzSWQ6MCx6QXhpc0lkOjAsbGVnZW5kVHlwZToiY2lyY2xlIixsaW5lVHlwZToiam9pbnQiLGxpbmVKb2ludFR5cGU6ImxpbmVhciIsZGF0YTpbXSxzaGFwZToiY2lyY2xlIixoaWRlOiExLGlzQW5pbWF0aW9uQWN0aXZlOiFhZSgpLGFuaW1hdGlvbkJlZ2luOjAsYW5pbWF0aW9uRHVyYXRpb246NDAwLGFuaW1hdGlvbkVhc2luZzoibGluZWFyIn0sZXAuZ2V0Q29tcG9zZWREYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PWUueEF4aXMscj1lLnlBeGlzLG49ZS56QXhpcyxpPWUuaXRlbSxvPWUuZGlzcGxheWVkRGF0YSxhPWUub25JdGVtTW91c2VMZWF2ZSxzPWUub25JdGVtTW91c2VFbnRlcix1PWUub2Zmc2V0LGM9ZS54QXhpc1RpY2tzLGw9ZS55QXhpc1RpY2tzLGg9aS5wcm9wcy50b29sdGlwVHlwZSxwPVooaS5wcm9wcy5jaGlsZHJlbixycCksZD1mKCkodC5kYXRhS2V5KT9pLnByb3BzLmRhdGFLZXk6dC5kYXRhS2V5LHk9ZigpKHIuZGF0YUtleSk/aS5wcm9wcy5kYXRhS2V5OnIuZGF0YUtleSxnPW4mJm4uZGF0YUtleSx2PW4/bi5yYW5nZTpEaC5kZWZhdWx0UHJvcHMucmFuZ2UsbT12JiZ2WzBdLGI9dC5zY2FsZS5iYW5kd2lkdGg/dC5zY2FsZS5iYW5kd2lkdGgoKTowLF89ci5zY2FsZS5iYW5kd2lkdGg/ci5zY2FsZS5iYW5kd2lkdGgoKTowLFM9by5tYXAoZnVuY3Rpb24oZSxpKXt2YXIgbz1lW2RdLGE9ZVt5XSxzPSFmKCkoZykmJmVbZ118fCItIix1PVt7bmFtZTp0Lm5hbWV8fHQuZGF0YUtleSx1bml0OnQudW5pdHx8IiIsdmFsdWU6byxwYXlsb2FkOmUsZGF0YUtleTpkLHR5cGU6aH0se25hbWU6ci5uYW1lfHxyLmRhdGFLZXksdW5pdDpyLnVuaXR8fCIiLHZhbHVlOmEscGF5bG9hZDplLGRhdGFLZXk6eSx0eXBlOmh9XTsiLSIhPT1zJiZ1LnB1c2goe25hbWU6bi5uYW1lfHxuLmRhdGFLZXksdW5pdDpuLnVuaXR8fCIiLHZhbHVlOnMscGF5bG9hZDplLGRhdGFLZXk6Zyx0eXBlOmh9KTt2YXIgdj1GbCh7YXhpczp0LHRpY2tzOmMsYmFuZFNpemU6YixlbnRyeTplLGluZGV4OmksZGF0YUtleTpkfSksUz1GbCh7YXhpczpyLHRpY2tzOmwsYmFuZFNpemU6XyxlbnRyeTplLGluZGV4OmksZGF0YUtleTp5fSksRT0iLSIhPT1zP24uc2NhbGUocyk6bSx3PU1hdGguc3FydChNYXRoLm1heChFLDApL01hdGguUEkpO3JldHVybiBvcCh7fSxlLHtjeDp2LGN5OlMseDp2LXcseTpTLXcseEF4aXM6dCx5QXhpczpyLHpBeGlzOm4sd2lkdGg6Mip3LGhlaWdodDoyKncsc2l6ZTpFLG5vZGU6e3g6byx5OmEsejpzfSx0b29sdGlwUGF5bG9hZDp1LHRvb2x0aXBQb3NpdGlvbjp7eDp2LHk6U30scGF5bG9hZDplfSxwJiZwW2ldJiZwW2ldLnByb3BzKX0pO3JldHVybiBvcCh7b25Nb3VzZUxlYXZlOmEsb25Nb3VzZUVudGVyOnMscG9pbnRzOlN9LHUpfSxKaD10cCkpfHxKaDtmdW5jdGlvbiB5cChlKXtyZXR1cm4oeXA9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBncChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHZwKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09eXAodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gbXAoZSl7cmV0dXJuKG1wPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBicChlLHQpe3JldHVybihicD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIF9wLFNwLEVwLHdwPUsoKHBwPWhwPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx2cCh0aGlzLG1wKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmYnAoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fV0pJiZncChyLnByb3RvdHlwZSxuKSxpJiZncChyLGkpLHR9KCksaHAuZGlzcGxheU5hbWU9IlhBeGlzIixocC5wcm9wVHlwZXM9e2FsbG93RGVjaW1hbHM6bS5hLmJvb2wsYWxsb3dEdXBsaWNhdGVkQ2F0ZWdvcnk6bS5hLmJvb2wsaGlkZTptLmEuYm9vbCxuYW1lOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLHVuaXQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSkseEF4aXNJZDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSxkb21haW46bS5hLmFycmF5T2YobS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyLG0uYS5mdW5jLG0uYS5vbmVPZihbImF1dG8iLCJkYXRhTWluIiwiZGF0YU1heCJdKV0pKSxkYXRhS2V5Om0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcixtLmEuZnVuY10pLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXIsbWlycm9yOm0uYS5ib29sLG9yaWVudGF0aW9uOm0uYS5vbmVPZihbInRvcCIsImJvdHRvbSJdKSx0eXBlOm0uYS5vbmVPZihbIm51bWJlciIsImNhdGVnb3J5Il0pLHRpY2tzOm0uYS5hcnJheSx0aWNrQ291bnQ6bS5hLm51bWJlcix0aWNrRm9ybWF0dGVyOm0uYS5mdW5jLHBhZGRpbmc6bS5hLnNoYXBlKHtsZWZ0Om0uYS5udW1iZXIscmlnaHQ6bS5hLm51bWJlcn0pLGFsbG93RGF0YU92ZXJmbG93Om0uYS5ib29sLHNjYWxlOm0uYS5vbmVPZlR5cGUoW20uYS5vbmVPZihbImF1dG8iLCJsaW5lYXIiLCJwb3ciLCJzcXJ0IiwibG9nIiwiaWRlbnRpdHkiLCJ0aW1lIiwiYmFuZCIsInBvaW50Iiwib3JkaW5hbCIsInF1YW50aWxlIiwicXVhbnRpemUiLCJ1dGMiLCJzZXF1ZW50aWFsIiwidGhyZXNob2xkIl0pLG0uYS5mdW5jXSksdGljazptLmEub25lT2ZUeXBlKFttLmEuYm9vbCxtLmEuZnVuYyxtLmEub2JqZWN0LG0uYS5lbGVtZW50XSksYXhpc0xpbmU6bS5hLm9uZU9mVHlwZShbbS5hLmJvb2wsbS5hLm9iamVjdF0pLHRpY2tMaW5lOm0uYS5vbmVPZlR5cGUoW20uYS5ib29sLG0uYS5vYmplY3RdKSxtaW5UaWNrR2FwOm0uYS5udW1iZXIsdGlja1NpemU6bS5hLm51bWJlcixpbnRlcnZhbDptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5vbmVPZihbInByZXNlcnZlU3RhcnQiLCJwcmVzZXJ2ZUVuZCIsInByZXNlcnZlU3RhcnRFbmQiXSldKSxyZXZlcnNlZDptLmEuYm9vbH0saHAuZGVmYXVsdFByb3BzPXthbGxvd0RlY2ltYWxzOiEwLGhpZGU6ITEsb3JpZW50YXRpb246ImJvdHRvbSIsd2lkdGg6MCxoZWlnaHQ6MzAsbWlycm9yOiExLHhBeGlzSWQ6MCx0aWNrQ291bnQ6NSx0eXBlOiJjYXRlZ29yeSIsZG9tYWluOlswLCJhdXRvIl0scGFkZGluZzp7bGVmdDowLHJpZ2h0OjB9LGFsbG93RGF0YU92ZXJmbG93OiExLHNjYWxlOiJhdXRvIixyZXZlcnNlZDohMSxhbGxvd0R1cGxpY2F0ZWRDYXRlZ29yeTohMH0sbHA9cHApKXx8bHA7ZnVuY3Rpb24gVHAoZSl7cmV0dXJuKFRwPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gQXAoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBDcChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PVRwKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIHhwKGUpe3JldHVybih4cD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gSXAoZSx0KXtyZXR1cm4oSXA9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBrcCxPcCxOcCxQcD1LKChFcD1TcD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksQ3AodGhpcyx4cCh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJklwKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsfX1dKSYmQXAoci5wcm90b3R5cGUsbiksaSYmQXAocixpKSx0fSgpLFNwLmRpc3BsYXlOYW1lPSJZQXhpcyIsU3AucHJvcFR5cGVzPXthbGxvd0RlY2ltYWxzOm0uYS5ib29sLGFsbG93RHVwbGljYXRlZENhdGVnb3J5Om0uYS5ib29sLGhpZGU6bS5hLmJvb2wsbmFtZTptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSx1bml0Om0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLHlBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSksZG9tYWluOm0uYS5hcnJheU9mKG0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcixtLmEuZnVuYyxtLmEub25lT2YoWyJhdXRvIiwiZGF0YU1pbiIsImRhdGFNYXgiXSldKSksZGF0YUtleTptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXIsbS5hLmZ1bmNdKSx0aWNrczptLmEuYXJyYXksdGlja0NvdW50Om0uYS5udW1iZXIsdGlja0Zvcm1hdHRlcjptLmEuZnVuYyx3aWR0aDptLmEubnVtYmVyLGhlaWdodDptLmEubnVtYmVyLG1pcnJvcjptLmEuYm9vbCxvcmllbnRhdGlvbjptLmEub25lT2YoWyJsZWZ0IiwicmlnaHQiXSksdHlwZTptLmEub25lT2YoWyJudW1iZXIiLCJjYXRlZ29yeSJdKSxwYWRkaW5nOm0uYS5zaGFwZSh7dG9wOm0uYS5udW1iZXIsYm90dG9tOm0uYS5udW1iZXJ9KSxhbGxvd0RhdGFPdmVyZmxvdzptLmEuYm9vbCxzY2FsZTptLmEub25lT2ZUeXBlKFttLmEub25lT2YoWyJhdXRvIiwibGluZWFyIiwicG93Iiwic3FydCIsImxvZyIsImlkZW50aXR5IiwidGltZSIsImJhbmQiLCJwb2ludCIsIm9yZGluYWwiLCJxdWFudGlsZSIsInF1YW50aXplIiwidXRjIiwic2VxdWVudGlhbCIsInRocmVzaG9sZCJdKSxtLmEuZnVuY10pLHRpY2s6bS5hLm9uZU9mVHlwZShbbS5hLmJvb2wsbS5hLmZ1bmMsbS5hLm9iamVjdCxtLmEuZWxlbWVudF0pLGF4aXNMaW5lOm0uYS5vbmVPZlR5cGUoW20uYS5ib29sLG0uYS5vYmplY3RdKSx0aWNrTGluZTptLmEub25lT2ZUeXBlKFttLmEuYm9vbCxtLmEub2JqZWN0XSksbWluVGlja0dhcDptLmEubnVtYmVyLHRpY2tTaXplOm0uYS5udW1iZXIsaW50ZXJ2YWw6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEub25lT2YoWyJwcmVzZXJ2ZVN0YXJ0IiwicHJlc2VydmVFbmQiLCJwcmVzZXJ2ZVN0YXJ0RW5kIl0pXSkscmV2ZXJzZWQ6bS5hLmJvb2x9LFNwLmRlZmF1bHRQcm9wcz17YWxsb3dEdXBsaWNhdGVkQ2F0ZWdvcnk6ITAsYWxsb3dEZWNpbWFsczohMCxoaWRlOiExLG9yaWVudGF0aW9uOiJsZWZ0Iix3aWR0aDo2MCxoZWlnaHQ6MCxtaXJyb3I6ITEseUF4aXNJZDowLHRpY2tDb3VudDo1LHR5cGU6Im51bWJlciIsZG9tYWluOlswLCJhdXRvIl0scGFkZGluZzp7dG9wOjAsYm90dG9tOjB9LGFsbG93RGF0YU92ZXJmbG93OiExLHNjYWxlOiJhdXRvIixyZXZlcnNlZDohMX0sX3A9RXApKXx8X3AsUnA9cig1MDkpLEJwPXIubihScCksTXA9cigxMjUpLExwPXIubihNcCksRHA9cig1MTApLGpwPXIubihEcCk7ZnVuY3Rpb24gVXAoZSl7cmV0dXJuKFVwPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGU=",
    "2020.03.29 15:16": "base64:fSx3aD17dmFsdWVBY2Nlc3NvcjpmdW5jdGlvbihlKXtyZXR1cm4gZCgpKGUudmFsdWUpP2goKShlLnZhbHVlKTplLnZhbHVlfX07ZnVuY3Rpb24gVGgoZSl7dmFyIHQ9ZS5kYXRhLHI9ZS52YWx1ZUFjY2Vzc29yLG49ZS5kYXRhS2V5LGk9ZS5jbG9ja1dpc2Usbz1lLmlkLGE9U2goZSxbImRhdGEiLCJ2YWx1ZUFjY2Vzc29yIiwiZGF0YUtleSIsImNsb2NrV2lzZSIsImlkIl0pO3JldHVybiB0JiZ0Lmxlbmd0aD9nLmEuY3JlYXRlRWxlbWVudCh6cyx7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1sYWJlbC1saXN0In0sdC5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgcz1mKCkobik/cihlLHQpOkFsKGUmJmUucGF5bG9hZCxuKSx1PWYoKShvKT97fTp7aWQ6IiIuY29uY2F0KG8sIi0iKS5jb25jYXQodCl9O3JldHVybiBnLmEuY3JlYXRlRWxlbWVudChnaCxtaCh7fSxlZShlKSxhLHUse2luZGV4OnQsdmFsdWU6cyx2aWV3Qm94OmdoLnBhcnNlVmlld0JveChmKCkoaSk/ZTpiaCh7fSxlLHtjbG9ja1dpc2U6aX0pKSxrZXk6ImxhYmVsLSIuY29uY2F0KHQpfSkpfSkpOm51bGx9VGgucHJvcFR5cGVzPUVoLFRoLmRpc3BsYXlOYW1lPSJMYWJlbExpc3QiO1RoLnJlbmRlckNhbGxCeVBhcmVudD1mdW5jdGlvbihlLHQpe3ZhciByPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07aWYoIWV8fCFlLmNoaWxkcmVuJiZyJiYhZS5sYWJlbClyZXR1cm4gbnVsbDt2YXIgbj1lLmNoaWxkcmVuLGk9WihuLFRoKS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm4gT2JqZWN0KHkuY2xvbmVFbGVtZW50KShlLHtkYXRhOnQsa2V5OiJsYWJlbExpc3QtIi5jb25jYXQocil9KX0pO3JldHVybiByP1tmdW5jdGlvbihlLHQpe3JldHVybiBlPyEwPT09ZT9nLmEuY3JlYXRlRWxlbWVudChUaCx7a2V5OiJsYWJlbExpc3QtaW1wbGljaXQiLGRhdGE6dH0pOmcuYS5pc1ZhbGlkRWxlbWVudChlKXx8dSgpKGUpP2cuYS5jcmVhdGVFbGVtZW50KFRoLHtrZXk6ImxhYmVsTGlzdC1pbXBsaWNpdCIsZGF0YTp0LGNvbnRlbnQ6ZX0pOmEoKShlKT9nLmEuY3JlYXRlRWxlbWVudChUaCxtaCh7ZGF0YTp0fSxlLHtrZXk6ImxhYmVsTGlzdC1pbXBsaWNpdCJ9KSk6bnVsbDpudWxsfShlLmxhYmVsLHQpXS5jb25jYXQodmgoaSkpOml9LFRoLmRlZmF1bHRQcm9wcz13aDt2YXIgQWgsQ2gseGgsSWg9VGg7ZnVuY3Rpb24ga2goZSl7cmV0dXJuKGtoPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gT2goZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBOaChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWtoKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIFBoKGUpe3JldHVybihQaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gUmgoZSx0KXtyZXR1cm4oUmg9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBCaCxNaCxMaCxEaD1LKCh4aD1DaD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksTmgodGhpcyxQaCh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJlJoKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsfX1dKSYmT2goci5wcm90b3R5cGUsbiksaSYmT2gocixpKSx0fSgpLENoLmRpc3BsYXlOYW1lPSJaQXhpcyIsQ2gucHJvcFR5cGVzPXt0eXBlOm0uYS5vbmVPZihbIm51bWJlciIsImNhdGVnb3J5Il0pLG5hbWU6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSksdW5pdDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSx6QXhpc0lkOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLGRhdGFLZXk6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyLG0uYS5mdW5jXSkscmFuZ2U6bS5hLmFycmF5T2YobS5hLm51bWJlciksc2NhbGU6bS5hLm9uZU9mVHlwZShbbS5hLm9uZU9mKFsiYXV0byIsImxpbmVhciIsInBvdyIsInNxcnQiLCJsb2ciLCJpZGVudGl0eSIsInRpbWUiLCJiYW5kIiwicG9pbnQiLCJvcmRpbmFsIiwicXVhbnRpbGUiLCJxdWFudGl6ZSIsInV0YyIsInNlcXVlbnRpYWwiLCJ0aHJlc2hvbGQiXSksbS5hLmZ1bmNdKX0sQ2guZGVmYXVsdFByb3BzPXt6QXhpc0lkOjAscmFuZ2U6WzY0LDY0XSxzY2FsZToiYXV0byIsdHlwZToibnVtYmVyIn0sQWg9eGgpKXx8QWg7ZnVuY3Rpb24gamgoZSl7cmV0dXJuKGpoPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gVWgoKXtyZXR1cm4oVWg9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBGaChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtWaChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBWaChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gcWgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBLaChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWpoKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIHpoKGUpe3JldHVybih6aD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gR2goZSx0KXtyZXR1cm4oR2g9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBIaD17Y3VydmVCYXNpc0Nsb3NlZDpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhzKGUpfSxjdXJ2ZUJhc2lzT3BlbjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHBzKGUpfSxjdXJ2ZUJhc2lzOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHMoZSl9LGN1cnZlTGluZWFyQ2xvc2VkOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgd3MoZSl9LGN1cnZlTGluZWFyOlVhLGN1cnZlTW9ub3RvbmVYOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSXMoZSl9LGN1cnZlTW9ub3RvbmVZOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcga3MoZSl9LGN1cnZlTmF0dXJhbDpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5zKGUpfSxjdXJ2ZVN0ZXA6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBScyhlLC41KX0sY3VydmVTdGVwQWZ0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBScyhlLDEpfSxjdXJ2ZVN0ZXBCZWZvcmU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBScyhlLDApfX0sV2g9ZnVuY3Rpb24oZSl7cmV0dXJuIGUueD09PStlLngmJmUueT09PStlLnl9LFloPWZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LFhoPWZ1bmN0aW9uKGUpe3JldHVybiBlLnl9LFFoPUsoKExoPU1oPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSxLaCh0aGlzLHpoKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmR2goZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJnZXRQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5wcm9wcyxyPXQudHlwZSxuPXQucG9pbnRzLGk9dC5iYXNlTGluZSxvPXQubGF5b3V0LGE9dC5jb25uZWN0TnVsbHMscz1mdW5jdGlvbihlLHQpe2lmKHUoKShlKSlyZXR1cm4gZTt2YXIgcj0iY3VydmUiLmNvbmNhdChlLnNsaWNlKDAsMSkudG9VcHBlckNhc2UoKSkuY29uY2F0KGUuc2xpY2UoMSkpO3JldHVybiJjdXJ2ZU1vbm90b25lIj09PXImJnQ/SGhbIiIuY29uY2F0KHIpLmNvbmNhdCgidmVydGljYWwiPT09dD8iWSI6IlgiKV06SGhbcl18fFVhfShyLG8pLGM9YT9uLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gV2goZSl9KTpuO2lmKGQoKShpKSl7dmFyIGY9YT9pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gV2goZSl9KTppLGw9Yy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gRmgoe30sZSx7YmFzZTpmW3RdfSl9KTtyZXR1cm4oZT0idmVydGljYWwiPT09bz9LYSgpLnkoWGgpLngxKFloKS54MChmdW5jdGlvbihlKXtyZXR1cm4gZS5iYXNlLnh9KTpLYSgpLngoWWgpLnkxKFhoKS55MChmdW5jdGlvbihlKXtyZXR1cm4gZS5iYXNlLnl9KSkuZGVmaW5lZChXaCkuY3VydmUocyksZShsKX1yZXR1cm4oZT0idmVydGljYWwiPT09byYmUihpKT9LYSgpLnkoWGgpLngxKFloKS54MChpKTpSKGkpP0thKCkueChZaCkueTEoWGgpLnkwKGkpOnFhKCkueChZaCkueShYaCkpLmRlZmluZWQoV2gpLmN1cnZlKHMpLGUoYyl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2xhc3NOYW1lLHI9ZS5wb2ludHMsbj1lLnBhdGgsaT1lLnBhdGhSZWY7aWYoKCFyfHwhci5sZW5ndGgpJiYhbilyZXR1cm4gbnVsbDt2YXIgbz1yJiZyLmxlbmd0aD90aGlzLmdldFBhdGgoKTpuO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgicGF0aCIsVWgoe30sZWUodGhpcy5wcm9wcykscmUodGhpcy5wcm9wcyxudWxsLCEwKSx7Y2xhc3NOYW1lOl8oKSgicmVjaGFydHMtY3VydmUiLHQpLGQ6byxyZWY6aX0pKX19XSkmJnFoKHIucHJvdG90eXBlLG4pLGkmJnFoKHIsaSksdH0oKSxNaC5kaXNwbGF5TmFtZT0iQ3VydmUiLE1oLnByb3BUeXBlcz1GaCh7fSxILHtjbGFzc05hbWU6bS5hLnN0cmluZyx0eXBlOm0uYS5vbmVPZlR5cGUoW20uYS5vbmVPZihbImJhc2lzIiwiYmFzaXNDbG9zZWQiLCJiYXNpc09wZW4iLCJsaW5lYXIiLCJsaW5lYXJDbG9zZWQiLCJuYXR1cmFsIiwibW9ub3RvbmVYIiwibW9ub3RvbmVZIiwibW9ub3RvbmUiLCJzdGVwIiwic3RlcEJlZm9yZSIsInN0ZXBBZnRlciJdKSxtLmEuZnVuY10pLGxheW91dDptLmEub25lT2YoWyJob3Jpem9udGFsIiwidmVydGljYWwiXSksYmFzZUxpbmU6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuYXJyYXldKSxwb2ludHM6bS5hLmFycmF5T2YobS5hLm9iamVjdCksY29ubmVjdE51bGxzOm0uYS5ib29sLHBhdGg6bS5hLnN0cmluZyxwYXRoUmVmOm0uYS5mdW5jfSksTWguZGVmYXVsdFByb3BzPXt0eXBlOiJsaW5lYXIiLHBvaW50czpbXSxjb25uZWN0TnVsbHM6ITF9LEJoPUxoKSl8fEJoO2Z1bmN0aW9uICRoKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBaaCgpe3JldHVybiBudWxsfVpoLnByb3BUeXBlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXskaChlLHQsclt0XSl9KX1yZXR1cm4gZX0oe30sSCksWmguZGlzcGxheU5hbWU9IkNlbGwiO3ZhciBKaCxlcCx0cCxycD1aaDtmdW5jdGlvbiBucChlKXtyZXR1cm4obnA9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBpcCgpe3JldHVybihpcD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG9wKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FwKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIGFwKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBzcChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHVwKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09bnAodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gY3AoZSl7cmV0dXJuKGNwPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBmcChlLHQpe3JldHVybihmcD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIGxwLGhwLHBwLGRwPUsoKHRwPWVwPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyOyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47bysrKWlbb109YXJndW1lbnRzW29dO3JldHVybihyPXVwKHRoaXMsKGU9Y3AodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSkpLnN0YXRlPXtpc0FuaW1hdGlvbkZpbmlzaGVkOiExfSxyLmNhY2hlUHJldlBvaW50cz1mdW5jdGlvbihlKXtyLnNldFN0YXRlKHtwcmV2UG9pbnRzOmV9KX0sci5oYW5kbGVBbmltYXRpb25FbmQ9ZnVuY3Rpb24oKXtyLnNldFN0YXRlKHtpc0FuaW1hdGlvbkZpbmlzaGVkOiEwfSl9LHIuaGFuZGxlQW5pbWF0aW9uU3RhcnQ9ZnVuY3Rpb24oKXtyLnNldFN0YXRlKHtpc0FuaW1hdGlvbkZpbmlzaGVkOiExfSl9LHIuaWQ9TCgicmVjaGFydHMtc2NhdHRlci0iKSxyfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJmZwKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCxpPVt7a2V5OiJyZW5kZXJTeW1ib2xJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBnLmEuaXNWYWxpZEVsZW1lbnQoZSk/Zy5hLmNsb25lRWxlbWVudChlLHQpOnUoKShlKT9lKHQpOmcuYS5jcmVhdGVFbGVtZW50KFpmLGlwKHt9LHQse3R5cGU6ZX0pKX19XSwobj1be2tleToiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxyPXQuYW5pbWF0aW9uSWQsbj10LnBvaW50cztlLmFuaW1hdGlvbklkIT09ciYmdGhpcy5jYWNoZVByZXZQb2ludHMobil9fSx7a2V5OiJyZW5kZXJTeW1ib2xzU3RhdGljYWxseSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMucHJvcHMsbj1yLnNoYXBlLGk9ci5hY3RpdmVTaGFwZSxvPXIuYWN0aXZlSW5kZXgsYT1lZSh0aGlzLnByb3BzKTtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSxyKXt2YXIgcz1vcCh7a2V5OiJzeW1ib2wtIi5jb25jYXQocil9LGEsZSk7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLGlwKHtjbGFzc05hbWU6InJlY2hhcnRzLXNjYXR0ZXItc3ltYm9sIn0saWUodC5wcm9wcyxlLHIpLHtrZXk6InN5bWJvbC0iLmNvbmNhdChyKX0pLHQuY29uc3RydWN0b3IucmVuZGVyU3ltYm9sSXRlbShvPT09cj9pOm4scykpfSl9fSx7a2V5OiJyZW5kZXJTeW1ib2xzV2l0aEFuaW1hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQucG9pbnRzLG49dC5pc0FuaW1hdGlvbkFjdGl2ZSxpPXQuYW5pbWF0aW9uQmVnaW4sbz10LmFuaW1hdGlvbkR1cmF0aW9uLGE9dC5hbmltYXRpb25FYXNpbmcscz10LmFuaW1hdGlvbklkLHU9dGhpcy5zdGF0ZS5wcmV2UG9pbnRzO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgkYyx7YmVnaW46aSxkdXJhdGlvbjpvLGlzQWN0aXZlOm4sZWFzaW5nOmEsZnJvbTp7dDowfSx0bzp7dDoxfSxrZXk6InBpZS0iLmNvbmNhdChzKSxvbkFuaW1hdGlvbkVuZDp0aGlzLmhhbmRsZUFuaW1hdGlvbkVuZCxvbkFuaW1hdGlvblN0YXJ0OnRoaXMuaGFuZGxlQW5pbWF0aW9uU3RhcnR9LGZ1bmN0aW9uKHQpe3ZhciBuPXQudCxpPXIubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIHI9dSYmdVt0XTtpZihyKXt2YXIgaT1VKHIuY3gsZS5jeCksbz1VKHIuY3ksZS5jeSksYT1VKHIuc2l6ZSxlLnNpemUpO3JldHVybiBvcCh7fSxlLHtjeDppKG4pLGN5Om8obiksc2l6ZTphKG4pfSl9cmV0dXJuIG9wKHt9LGUse3NpemU6VSgwLGUuc2l6ZSkobil9KX0pO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCh6cyxudWxsLGUucmVuZGVyU3ltYm9sc1N0YXRpY2FsbHkoaSkpfSl9fSx7a2V5OiJyZW5kZXJTeW1ib2xzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBvaW50cyxyPWUuaXNBbmltYXRpb25BY3RpdmUsbj10aGlzLnN0YXRlLnByZXZQb2ludHM7cmV0dXJuIShyJiZ0JiZ0Lmxlbmd0aCl8fG4mJlBlKCkobix0KT90aGlzLnJlbmRlclN5bWJvbHNTdGF0aWNhbGx5KHQpOnRoaXMucmVuZGVyU3ltYm9sc1dpdGhBbmltYXRpb24oKX19LHtrZXk6InJlbmRlckVycm9yQmFyIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMucHJvcHMuaXNBbmltYXRpb25BY3RpdmUmJiF0aGlzLnN0YXRlLmlzQW5pbWF0aW9uRmluaXNoZWQpcmV0dXJuIG51bGw7dmFyIGU9dGhpcy5wcm9wcyx0PWUucG9pbnRzLHI9ZS54QXhpcyxuPWUueUF4aXMsaT1lLmNoaWxkcmVuLG89WihpLGtmKTtpZighbylyZXR1cm4gbnVsbDtmdW5jdGlvbiBhKGUsdCl7cmV0dXJue3g6ZS5jeCx5OmUuY3ksdmFsdWU6ZS55LGVycm9yVmFsOkFsKGUsdCl9fWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm57eDplLmN4LHk6ZS5jeSx2YWx1ZTplLngsZXJyb3JWYWw6QWwoZSx0KX19cmV0dXJuIG8ubWFwKGZ1bmN0aW9uKGUsaSl7dmFyIG89ZS5wcm9wcy5kaXJlY3Rpb247cmV0dXJuIGcuYS5jbG9uZUVsZW1lbnQoZSx7a2V5OmksZGF0YTp0LHhBeGlzOnIseUF4aXM6bixsYXlvdXQ6IngiPT09bz8idmVydGljYWwiOiJob3Jpem9udGFsIixkYXRhUG9pbnRGb3JtYXR0ZXI6IngiPT09bz9zOmF9KX0pfX0se2tleToicmVuZGVyTGluZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5wcm9wcyxuPXIucG9pbnRzLGk9ci5saW5lLG89ci5saW5lVHlwZSxhPXIubGluZUpvaW50VHlwZSxzPWVlKHRoaXMucHJvcHMpLGM9ZWUoaSk7aWYoImpvaW50Ij09PW8pZT1uLm1hcChmdW5jdGlvbihlKXtyZXR1cm57eDplLmN4LHk6ZS5jeX19KTtlbHNlIGlmKCJmaXR0aW5nIj09PW8pe3ZhciBmPWZ1bmN0aW9uKGUpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKHZhciB0PWUubGVuZ3RoLHI9MCxuPTAsaT0wLG89MCxhPTEvMCxzPS0xLzAsdT0wO3U8dDt1Kyspcis9ZVt1XS5jeCxuKz1lW3VdLmN5LGkrPWVbdV0uY3gqZVt1XS5jeSxvKz1lW3VdLmN4KmVbdV0uY3gsYT1NYXRoLm1pbihhLGVbdV0uY3gpLHM9TWF0aC5tYXgocyxlW3VdLmN4KTt2YXIgYz10Km8hPT1yKnI/KHQqaS1yKm4pLyh0Km8tcipyKTowO3JldHVybnt4bWluOmEseG1heDpzLGE6YyxiOihuLWMqcikvdH19KG4pLGw9Zi54bWluLGg9Zi54bWF4LHA9Zi5hLGQ9Zi5iLHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHAqZStkfTtlPVt7eDpsLHk6eShsKX0se3g6aCx5OnkoaCl9XX12YXIgdj1vcCh7fSxzLHtmaWxsOiJub25lIixzdHJva2U6cyYmcy5maWxsfSxjLHtwb2ludHM6ZX0pO3JldHVybiB0PWcuYS5pc1ZhbGlkRWxlbWVudChpKT9nLmEuY2xvbmVFbGVtZW50KGksdik6dSgpKGkpP2kodik6Zy5hLmNyZWF0ZUVsZW1lbnQoUWgsaXAoe30sdix7dHlwZTphfSkpLGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6InJlY2hhcnRzLXNjYXR0ZXItbGluZSIsa2V5OiJyZWNoYXJ0cy1zY2F0dGVyLWxpbmUifSx0KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5oaWRlLHI9ZS5wb2ludHMsbj1lLmxpbmUsaT1lLmNsYXNzTmFtZSxvPWUueEF4aXMsYT1lLnlBeGlzLHM9ZS5sZWZ0LHU9ZS50b3AsYz1lLndpZHRoLGw9ZS5oZWlnaHQsaD1lLmlkO2lmKHR8fCFyfHwhci5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHA9dGhpcy5zdGF0ZSxkPXAuaXNBbmltYXRpb25BY3RpdmUseT1wLmlzQW5pbWF0aW9uRmluaXNoZWQsdj1fKCkoInJlY2hhcnRzLXNjYXR0ZXIiLGkpLG09byYmby5hbGxvd0RhdGFPdmVyZmxvd3x8YSYmYS5hbGxvd0RhdGFPdmVyZmxvdyxiPWYoKShoKT90aGlzLmlkOmg7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KHpzLHtjbGFzc05hbWU6dixjbGlwUGF0aDptPyJ1cmwoI2NsaXBQYXRoLSIuY29uY2F0KGIsIikiKTpudWxsfSxtP2cuYS5jcmVhdGVFbGVtZW50KCJkZWZzIixudWxsLGcuYS5jcmVhdGVFbGVtZW50KCJjbGlwUGF0aCIse2lkOiJjbGlwUGF0aC0iLmNvbmNhdChiKX0sZy5hLmNyZWF0ZUVsZW1lbnQoInJlY3QiLHt4OnMseTp1LHdpZHRoOmMsaGVpZ2h0Omx9KSkpOm51bGwsbiYmdGhpcy5yZW5kZXJMaW5lKCksdGhpcy5yZW5kZXJFcnJvckJhcigpLGcuYS5jcmVhdGVFbGVtZW50KHpzLHtrZXk6InJlY2hhcnRzLXNjYXR0ZXItc3ltYm9scyJ9LHRoaXMucmVuZGVyU3ltYm9scygpKSwoIWR8fHkpJiZJaC5yZW5kZXJDYWxsQnlQYXJlbnQodGhpcy5wcm9wcyxyKSl9fV0pJiZzcChyLnByb3RvdHlwZSxuKSxpJiZzcChyLGkpLHR9KCksZXAuZGlzcGxheU5hbWU9IlNjYXR0ZXIiLGVwLnByb3BUeXBlcz1vcCh7fSxXLEgse3hBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSkseUF4aXNJZDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSx6QXhpc0lkOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLGxpbmU6bS5hLm9uZU9mVHlwZShbbS5hLmJvb2wsbS5hLm9iamVjdCxtLmEuZnVuYyxtLmEuZWxlbWVudF0pLGxpbmVUeXBlOm0uYS5vbmVPZihbImZpdHRpbmciLCJqb2ludCJdKSxsaW5lSm9pbnRUeXBlOm0uYS5vbmVPZlR5cGUoW20uYS5vbmVPZihbImJhc2lzIiwiYmFzaXNDbG9zZWQiLCJiYXNpc09wZW4iLCJsaW5lYXIiLCJsaW5lYXJDbG9zZWQiLCJuYXR1cmFsIiwibW9ub3RvbmVYIiwibW9ub3RvbmVZIiwibW9ub3RvbmUiLCJzdGVwIiwic3RlcEJlZm9yZSIsInN0ZXBBZnRlciJdKSxtLmEuZnVuY10pLGxlZ2VuZFR5cGU6bS5hLm9uZU9mKFgpLHRvb2x0aXBUeXBlOm0uYS5vbmVPZihRKSxjbGFzc05hbWU6bS5hLnN0cmluZyxuYW1lOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLGFjdGl2ZUluZGV4Om0uYS5udW1iZXIsYWN0aXZlU2hhcGU6bS5hLm9uZU9mVHlwZShbbS5hLm9iamVjdCxtLmEuZnVuYyxtLmEuZWxlbWVudF0pLHNoYXBlOm0uYS5vbmVPZlR5cGUoW20uYS5vbmVPZihbImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiLCJ0cmlhbmdsZSIsInd5ZSJdKSxtLmEuZWxlbWVudCxtLmEuZnVuY10pLHBvaW50czptLmEuYXJyYXlPZihtLmEuc2hhcGUoe2N4Om0uYS5udW1iZXIsY3k6bS5hLm51bWJlcixzaXplOm0uYS5udW1iZXIsbm9kZTptLmEuc2hhcGUoe3g6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSkseTptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5zdHJpbmddKSx6Om0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pfSkscGF5bG9hZDptLmEuYW55fSkpLGhpZGU6bS5hLmJvb2wsaXNBbmltYXRpb25BY3RpdmU6bS5hLmJvb2wsYW5pbWF0aW9uSWQ6bS5hLm51bWJlcixhbmltYXRpb25CZWdpbjptLmEubnVtYmVyLGFuaW1hdGlvbkR1cmF0aW9uOm0uYS5udW1iZXIsYW5pbWF0aW9uRWFzaW5nOm0uYS5vbmVPZihbImVhc2UiLCJlYXNlLWluIiwiZWFzZS1vdXQiLCJlYXNlLWluLW91dCIsImxpbmVhciJdKX0pLGVwLmRlZmF1bHRQcm9wcz17eEF4aXNJZDowLHlBeGlzSWQ6MCx6QXhpc0lkOjAsbGVnZW5kVHlwZToiY2lyY2xlIixsaW5lVHlwZToiam9pbnQiLGxpbmVKb2ludFR5cGU6ImxpbmVhciIsZGF0YTpbXSxzaGFwZToiY2lyY2xlIixoaWRlOiExLGlzQW5pbWF0aW9uQWN0aXZlOiFhZSgpLGFuaW1hdGlvbkJlZ2luOjAsYW5pbWF0aW9uRHVyYXRpb246NDAwLGFuaW1hdGlvbkVhc2luZzoibGluZWFyIn0sZXAuZ2V0Q29tcG9zZWREYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PWUueEF4aXMscj1lLnlBeGlzLG49ZS56QXhpcyxpPWUuaXRlbSxvPWUuZGlzcGxheWVkRGF0YSxhPWUub25JdGVtTW91c2VMZWF2ZSxzPWUub25JdGVtTW91c2VFbnRlcix1PWUub2Zmc2V0LGM9ZS54QXhpc1RpY2tzLGw9ZS55QXhpc1RpY2tzLGg9aS5wcm9wcy50b29sdGlwVHlwZSxwPVooaS5wcm9wcy5jaGlsZHJlbixycCksZD1mKCkodC5kYXRhS2V5KT9pLnByb3BzLmRhdGFLZXk6dC5kYXRhS2V5LHk9ZigpKHIuZGF0YUtleSk/aS5wcm9wcy5kYXRhS2V5OnIuZGF0YUtleSxnPW4mJm4uZGF0YUtleSx2PW4/bi5yYW5nZTpEaC5kZWZhdWx0UHJvcHMucmFuZ2UsbT12JiZ2WzBdLGI9dC5zY2FsZS5iYW5kd2lkdGg/dC5zY2FsZS5iYW5kd2lkdGgoKTowLF89ci5zY2FsZS5iYW5kd2lkdGg/ci5zY2FsZS5iYW5kd2lkdGgoKTowLFM9by5tYXAoZnVuY3Rpb24oZSxpKXt2YXIgbz1lW2RdLGE9ZVt5XSxzPSFmKCkoZykmJmVbZ118fCItIix1PVt7bmFtZTp0Lm5hbWV8fHQuZGF0YUtleSx1bml0OnQudW5pdHx8IiIsdmFsdWU6byxwYXlsb2FkOmUsZGF0YUtleTpkLHR5cGU6aH0se25hbWU6ci5uYW1lfHxyLmRhdGFLZXksdW5pdDpyLnVuaXR8fCIiLHZhbHVlOmEscGF5bG9hZDplLGRhdGFLZXk6eSx0eXBlOmh9XTsiLSIhPT1zJiZ1LnB1c2goe25hbWU6bi5uYW1lfHxuLmRhdGFLZXksdW5pdDpuLnVuaXR8fCIiLHZhbHVlOnMscGF5bG9hZDplLGRhdGFLZXk6Zyx0eXBlOmh9KTt2YXIgdj1GbCh7YXhpczp0LHRpY2tzOmMsYmFuZFNpemU6YixlbnRyeTplLGluZGV4OmksZGF0YUtleTpkfSksUz1GbCh7YXhpczpyLHRpY2tzOmwsYmFuZFNpemU6XyxlbnRyeTplLGluZGV4OmksZGF0YUtleTp5fSksRT0iLSIhPT1zP24uc2NhbGUocyk6bSx3PU1hdGguc3FydChNYXRoLm1heChFLDApL01hdGguUEkpO3JldHVybiBvcCh7fSxlLHtjeDp2LGN5OlMseDp2LXcseTpTLXcseEF4aXM6dCx5QXhpczpyLHpBeGlzOm4sd2lkdGg6Mip3LGhlaWdodDoyKncsc2l6ZTpFLG5vZGU6e3g6byx5OmEsejpzfSx0b29sdGlwUGF5bG9hZDp1LHRvb2x0aXBQb3NpdGlvbjp7eDp2LHk6U30scGF5bG9hZDplfSxwJiZwW2ldJiZwW2ldLnByb3BzKX0pO3JldHVybiBvcCh7b25Nb3VzZUxlYXZlOmEsb25Nb3VzZUVudGVyOnMscG9pbnRzOlN9LHUpfSxKaD10cCkpfHxKaDtmdW5jdGlvbiB5cChlKXtyZXR1cm4oeXA9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBncChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHZwKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09eXAodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gbXAoZSl7cmV0dXJuKG1wPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBicChlLHQpe3JldHVybihicD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIF9wLFNwLEVwLHdwPUsoKHBwPWhwPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx2cCh0aGlzLG1wKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmYnAoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fV0pJiZncChyLnByb3RvdHlwZSxuKSxpJiZncChyLGkpLHR9KCksaHAuZGlzcGxheU5hbWU9IlhBeGlzIixocC5wcm9wVHlwZXM9e2FsbG93RGVjaW1hbHM6bS5hLmJvb2wsYWxsb3dEdXBsaWNhdGVkQ2F0ZWdvcnk6bS5hLmJvb2wsaGlkZTptLmEuYm9vbCxuYW1lOm0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLHVuaXQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSkseEF4aXNJZDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSxkb21haW46bS5hLmFycmF5T2YobS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyLG0uYS5mdW5jLG0uYS5vbmVPZihbImF1dG8iLCJkYXRhTWluIiwiZGF0YU1heCJdKV0pKSxkYXRhS2V5Om0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcixtLmEuZnVuY10pLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXIsbWlycm9yOm0uYS5ib29sLG9yaWVudGF0aW9uOm0uYS5vbmVPZihbInRvcCIsImJvdHRvbSJdKSx0eXBlOm0uYS5vbmVPZihbIm51bWJlciIsImNhdGVnb3J5Il0pLHRpY2tzOm0uYS5hcnJheSx0aWNrQ291bnQ6bS5hLm51bWJlcix0aWNrRm9ybWF0dGVyOm0uYS5mdW5jLHBhZGRpbmc6bS5hLnNoYXBlKHtsZWZ0Om0uYS5udW1iZXIscmlnaHQ6bS5hLm51bWJlcn0pLGFsbG93RGF0YU92ZXJmbG93Om0uYS5ib29sLHNjYWxlOm0uYS5vbmVPZlR5cGUoW20uYS5vbmVPZihbImF1dG8iLCJsaW5lYXIiLCJwb3ciLCJzcXJ0IiwibG9nIiwiaWRlbnRpdHkiLCJ0aW1lIiwiYmFuZCIsInBvaW50Iiwib3JkaW5hbCIsInF1YW50aWxlIiwicXVhbnRpemUiLCJ1dGMiLCJzZXF1ZW50aWFsIiwidGhyZXNob2xkIl0pLG0uYS5mdW5jXSksdGljazptLmEub25lT2ZUeXBlKFttLmEuYm9vbCxtLmEuZnVuYyxtLmEub2JqZWN0LG0uYS5lbGVtZW50XSksYXhpc0xpbmU6bS5hLm9uZU9mVHlwZShbbS5hLmJvb2wsbS5hLm9iamVjdF0pLHRpY2tMaW5lOm0uYS5vbmVPZlR5cGUoW20uYS5ib29sLG0uYS5vYmplY3RdKSxtaW5UaWNrR2FwOm0uYS5udW1iZXIsdGlja1NpemU6bS5hLm51bWJlcixpbnRlcnZhbDptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5vbmVPZihbInByZXNlcnZlU3RhcnQiLCJwcmVzZXJ2ZUVuZCIsInByZXNlcnZlU3RhcnRFbmQiXSldKSxyZXZlcnNlZDptLmEuYm9vbH0saHAuZGVmYXVsdFByb3BzPXthbGxvd0RlY2ltYWxzOiEwLGhpZGU6ITEsb3JpZW50YXRpb246ImJvdHRvbSIsd2lkdGg6MCxoZWlnaHQ6MzAsbWlycm9yOiExLHhBeGlzSWQ6MCx0aWNrQ291bnQ6NSx0eXBlOiJjYXRlZ29yeSIsZG9tYWluOlswLCJhdXRvIl0scGFkZGluZzp7bGVmdDowLHJpZ2h0OjB9LGFsbG93RGF0YU92ZXJmbG93OiExLHNjYWxlOiJhdXRvIixyZXZlcnNlZDohMSxhbGxvd0R1cGxpY2F0ZWRDYXRlZ29yeTohMH0sbHA9cHApKXx8bHA7ZnVuY3Rpb24gVHAoZSl7cmV0dXJuKFRwPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gQXAoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBDcChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PVRwKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIHhwKGUpe3JldHVybih4cD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gSXAoZSx0KXtyZXR1cm4oSXA9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBrcCxPcCxOcCxQcD1LKChFcD1TcD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksQ3AodGhpcyx4cCh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJklwKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsfX1dKSYmQXAoci5wcm90b3R5cGUsbiksaSYmQXAocixpKSx0fSgpLFNwLmRpc3BsYXlOYW1lPSJZQXhpcyIsU3AucHJvcFR5cGVzPXthbGxvd0RlY2ltYWxzOm0uYS5ib29sLGFsbG93RHVwbGljYXRlZENhdGVnb3J5Om0uYS5ib29sLGhpZGU6bS5hLmJvb2wsbmFtZTptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSx1bml0Om0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcl0pLHlBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSksZG9tYWluOm0uYS5hcnJheU9mKG0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcixtLmEuZnVuYyxtLmEub25lT2YoWyJhdXRvIiwiZGF0YU1pbiIsImRhdGFNYXgiXSldKSksZGF0YUtleTptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXIsbS5hLmZ1bmNdKSx0aWNrczptLmEuYXJyYXksdGlja0NvdW50Om0uYS5udW1iZXIsdGlja0Zvcm1hdHRlcjptLmEuZnVuYyx3aWR0aDptLmEubnVtYmVyLGhlaWdodDptLmEubnVtYmVyLG1pcnJvcjptLmEuYm9vbCxvcmllbnRhdGlvbjptLmEub25lT2YoWyJsZWZ0IiwicmlnaHQiXSksdHlwZTptLmEub25lT2YoWyJudW1iZXIiLCJjYXRlZ29yeSJdKSxwYWRkaW5nOm0uYS5zaGFwZSh7dG9wOm0uYS5udW1iZXIsYm90dG9tOm0uYS5udW1iZXJ9KSxhbGxvd0RhdGFPdmVyZmxvdzptLmEuYm9vbCxzY2FsZTptLmEub25lT2ZUeXBlKFttLmEub25lT2YoWyJhdXRvIiwibGluZWFyIiwicG93Iiwic3FydCIsImxvZyIsImlkZW50aXR5IiwidGltZSIsImJhbmQiLCJwb2ludCIsIm9yZGluYWwiLCJxdWFudGlsZSIsInF1YW50aXplIiwidXRjIiwic2VxdWVudGlhbCIsInRocmVzaG9sZCJdKSxtLmEuZnVuY10pLHRpY2s6bS5hLm9uZU9mVHlwZShbbS5hLmJvb2wsbS5hLmZ1bmMsbS5hLm9iamVjdCxtLmEuZWxlbWVudF0pLGF4aXNMaW5lOm0uYS5vbmVPZlR5cGUoW20uYS5ib29sLG0uYS5vYmplY3RdKSx0aWNrTGluZTptLmEub25lT2ZUeXBlKFttLmEuYm9vbCxtLmEub2JqZWN0XSksbWluVGlja0dhcDptLmEubnVtYmVyLHRpY2tTaXplOm0uYS5udW1iZXIsaW50ZXJ2YWw6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEub25lT2YoWyJwcmVzZXJ2ZVN0YXJ0IiwicHJlc2VydmVFbmQiLCJwcmVzZXJ2ZVN0YXJ0RW5kIl0pXSkscmV2ZXJzZWQ6bS5hLmJvb2x9LFNwLmRlZmF1bHRQcm9wcz17YWxsb3dEdXBsaWNhdGVkQ2F0ZWdvcnk6ITAsYWxsb3dEZWNpbWFsczohMCxoaWRlOiExLG9yaWVudGF0aW9uOiJsZWZ0Iix3aWR0aDo2MCxoZWlnaHQ6MCxtaXJyb3I6ITEseUF4aXNJZDowLHRpY2tDb3VudDo1LHR5cGU6Im51bWJlciIsZG9tYWluOlswLCJhdXRvIl0scGFkZGluZzp7dG9wOjAsYm90dG9tOjB9LGFsbG93RGF0YU92ZXJmbG93OiExLHNjYWxlOiJhdXRvIixyZXZlcnNlZDohMX0sX3A9RXApKXx8X3AsUnA9cig1MDkpLEJwPXIubihScCksTXA9cigxMjUpLExwPXIubihNcCksRHA9cig1MTApLGpwPXIubihEcCk7ZnVuY3Rpb24gVXAoZSl7cmV0dXJuKFVwPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGU="
}

github/deemru/w8io/169f3d6 
2.21 ms