@curless/hotel-storefront 0.13.1 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@
2
2
  // The hotel booking MCP App card - a single self-contained HTML (Vite +
3
3
  // vite-plugin-singlefile, with the MCP Apps SDK bundled), base64-embedded so it
4
4
  // is bundler-safe. Regenerate after changing the widget UI.
5
- export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3Qgcmg9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLHNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxQYz17fSxpaD1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24obCl7cmV0dXJuIFByb21pc2UuYWxsKGwubWFwKG09PlByb21pc2UucmVzb2x2ZShtKS50aGVuKGI9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmJ9KSxiPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpifSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxjPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLHU9Yz8ubm9uY2V8fGM/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAobD0+e2lmKGw9c2gobCxvKSxsIGluIFBjKXJldHVybjtQY1tsXT0hMDtjb25zdCBtPWwuZW5kc1dpdGgoIi5jc3MiKSxiPW0/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgdz1hLmxlbmd0aC0xO3c+PTA7dy0tKXtjb25zdCBTPWFbd107aWYoUy5ocmVmPT09bCYmKCFtfHxTLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2x9Il0ke2J9YCkpcmV0dXJuO2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKF8ucmVsPW0/InN0eWxlc2hlZXQiOnJoLG18fChfLmFzPSJzY3JpcHQiKSxfLmNyb3NzT3JpZ2luPSIiLF8uaHJlZj1sLHUmJl8uc2V0QXR0cmlidXRlKCJub25jZSIsdSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfKSxtKXJldHVybiBuZXcgUHJvbWlzZSgodyxTKT0+e18uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdyksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PlMobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7bH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBhaChlKXtyZXR1cm4gZX1mdW5jdGlvbiBjaChlKXtyZXR1cm4gZX1mdW5jdGlvbiBnbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIHVoKGUpe31mdW5jdGlvbiBsaChlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIGRoKGUpe31mdW5jdGlvbiBGcihlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBCcihlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+dXMobikpLmpvaW4odCl9ZnVuY3Rpb24gcm8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIHBoe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gVXQoZSl7cmV0dXJuIG5ldyBwaChlKX1mdW5jdGlvbiBhcyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBPZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gdnUoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgeGM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gYnUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT14YylyZXR1cm4gbz09PXZvaWQgMCYmKG89eGMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIGZoKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gS2UoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiB2byhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiB6ZShlKXtyZXR1cm4gdm8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gX3UoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBLZSh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiB5dShlLHQsbil7dCBpbiBlP0tlKGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gVWUoZSx0LG4sbyl7Y29uc3Qgcj16ZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD9fdShlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTp5dShlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiBoaChlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/X3UoZSxuLCgpPT50W25dKTp5dShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiBlZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBtaChlKXtyZXR1cm4gZWUoZS5fem9kLmRlZil9ZnVuY3Rpb24gZ2goZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gdmgoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIGJoKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gd3UoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIGt1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgY3M9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gbnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0ICR1PVV0KCgpPT57aWYob2Uuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gQWUoZSl7aWYobnQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKG50KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gYm8oZSl7cmV0dXJuIEFlKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gX2goZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgeWg9ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LHNvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSksU3U9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gVGUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBIKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiB3aChlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiB1cyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiB6dShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IFR1PXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxJdT17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gUHUoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gVWUocyxlLF9vKGUsdCkpLEgoZSxlZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBfbyhlLHQpe2NvbnN0IG49emUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiB4dShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoX28oZSx0KSksaT17fTtyZXR1cm4gVWUoaSxlLFJlZmxlY3Qub3duS2V5cyh6ZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLEgoZSxlZShuLHtzaGFwZTppLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBFdShlLHQpe2lmKCFBZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj16ZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gSChlLGVlKGUuX3pvZC5kZWYse3NoYXBlOkN1KGUsdCl9KSl9ZnVuY3Rpb24gQ3UoZSx0KXtjb25zdCBuPXt9O3JldHVybiBVZShuLGUsUmVmbGVjdC5vd25LZXlzKHplKGUpKSksaGgobix0KSxufWZ1bmN0aW9uIE91KGUsdCl7aWYoIUFlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBIKGUsZWUoZS5fem9kLmRlZix7c2hhcGU6Q3UoZSx0KX0pKX1mdW5jdGlvbiBSdShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtVZShuLGUsUmVmbGVjdC5vd25LZXlzKHplKGUpKSksVWUobix0LFJlZmxlY3Qub3duS2V5cyh6ZSh0KSkpO2NvbnN0IG89ZWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBIKGUsbyl9ZnVuY3Rpb24gVnIoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGE9bj9uZXcgU2V0KF9vKHQsbikpOnZvaWQgMCxjPXt9O3JldHVybiBVZShjLHQsUmVmbGVjdC5vd25LZXlzKHplKHQpKSxlJiYoKHUsbCk9PmEmJiFhLmhhcyhsKT91Om5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnV9KSkpLEgodCxlZSh0Ll96b2QuZGVmLHtzaGFwZTpjLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBBdShlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoX28odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIFVlKHIsdCxSZWZsZWN0Lm93bktleXMoemUodCkpLChzLGkpPT5vJiYhby5oYXMoaSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLEgodCxlZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIHNlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gWnUoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBmZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIFllKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIEpyKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiBnZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOlllKGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9ZZShzPy4oZSkpPz9ZZSh0Py5lcnJvcj8uKGUpKT8/WWUobi5jdXN0b21FcnJvcj8uKGUpKT8/WWUobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoZSkpYz09PSJpbnN0Inx8Yz09PSJzY2hlbWEifHxjPT09ImNvbnRpbnVlInx8Yz09PSJpbnB1dCJ8fGM9PT0iX19wcm90b19fInx8KGFbY109ZVtjXSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24geW8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IGtoPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIHdvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIWtoLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24ga28oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIE51KGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gb3QoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiAkaChlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24ganUoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIE11KGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gU2goZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4ganUodCtuKX1mdW5jdGlvbiB6aChlKXtyZXR1cm4gTXUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIFRoKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBJaChlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBQaHtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIHF1KGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6eGgoZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBJZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiAkbyhlLHQsbil7cmV0dXJuIEllKGUsdCxuLCExKX1mdW5jdGlvbiBIdChlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gSWUodGhpcyxuLG8odGhpcykpfSxzZXQocil7SWUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIHhoKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpJZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe0llKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBFaChlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IE1yLENlPSExO2NvbnN0IENoPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7Q2U9ITB9fTtmdW5jdGlvbiB4KGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmTXIhPT1lLl96b2Qpe01yPXZvaWQgMDtyZXR1cm59TXI9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LENoKTtjb25zdCByPUNlO0NlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIENlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksQ2U9Q2V8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxDZT1DZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gRHUoZSx0LG4sbyl7Y29uc3Qgcj1FaChlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IEx1PSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gbHMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtMdV09ITAsdH1jb25zdCBkcz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6SXUsQ09OU1RBTlRfQ0FUQ0g6THUsQ2xhc3M6UGgsTlVNQkVSX0ZPUk1BVF9SQU5HRVM6VHUsYWJvcnRlZDpzZSxhbGxvd3NFdmFsOiR1LGFzc2VydDpkaCxhc3NlcnRFcXVhbDphaCxhc3NlcnRJczp1aCxhc3NlcnROZXZlcjpsaCxhc3NlcnROb3RFcXVhbDpjaCxhc3NpZ25Qcm9wOktlLGF0dGFjaFNjaGVtYTpKcixiYXNlNjRUb1VpbnQ4QXJyYXk6anUsYmFzZTY0dXJsVG9VaW50OEFycmF5OlNoLGNhY2hlZDpVdCxjYXB0dXJlU3RhY2tUcmFjZTpjcyxjbGVhbkVudW06JGgsY2xlYW5SZWdleDpPZSxjbG9uZTpILGNsb25lRGVmOm1oLGNvZGVQb2ludExlbmd0aDp3byxjb25zdGFudENhdGNoOmxzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6d2gsZGVmaW5lTGF6eTpidSxkZWZpbmVMYXp5SW50ZXJuYWw6eCxkZXJpdmVkOkh0LGVzYzp3dSxlc2NhcGVSZWdleDpUZSxleHBsaWNpdGx5QWJvcnRlZDpadSxleHRlbmQ6RXUsZmluYWxpemVJc3N1ZTpnZSxmbG9hdFNhZmVSZW1haW5kZXI6dnUsZ2V0RWxlbWVudEF0UGF0aDpnaCxnZXRFbnVtVmFsdWVzOkZyLGdldExlbmd0aGFibGVPcmlnaW46a28sZ2V0UGFyc2VkVHlwZTp5aCxnZXRTaXphYmxlT3JpZ2luOnlvLGhleFRvVWludDhBcnJheTpUaCxoaWRlOiRvLGluc3RhbGxMYXp5UHJvcDpEdSxpc09iamVjdDpudCxpc1BsYWluT2JqZWN0OkFlLGlzc3VlOm90LGpvaW5WYWx1ZXM6QnIsanNvblN0cmluZ2lmeVJlcGxhY2VyOnJvLG1lbWJlcnM6cXUsbWVyZ2U6UnUsbWVyZ2VEZWZzOmVlLG5vcm1hbGl6ZVBhcmFtczp5LG51bGxpc2g6YXMsbnVtS2V5czpfaCxvYmplY3RDbG9uZTpmaCxvbWl0Onh1LG9wdGlvbmFsS2V5czp6dSxvd246SWUscGFyc2VkVHlwZTpOdSxwYXJ0aWFsOlZyLHBpY2s6UHUscHJlZml4SXNzdWVzOmZlLHByaW1pdGl2ZVR5cGVzOlN1LHByb21pc2VBbGxPYmplY3Q6dmgscHJvcGVydHlLZXlUeXBlczpzbyxyYW5kb21TdHJpbmc6YmgscmF3U2hhcGU6dm8scmVxdWlyZWQ6QXUsc2FmZUV4dGVuZDpPdSxzaGFsbG93Q2xvbmU6Ym8sc2x1Z2lmeTprdSxzdHJpbmdpZnlQcmltaXRpdmU6dXMsdG9ab2Q6Z28sdWludDhBcnJheVRvQmFzZTY0Ok11LHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDp6aCx1aW50OEFycmF5VG9IZXg6SWgsdW53cmFwTWVzc2FnZTpZZX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgRWM7Y29uc3QgcHM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLHFyPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IENjPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIE9oKGUpe2NvbnN0IHQ9Q2M7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBDYz1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKGIpe3RoaXMuZGVmPWIsdGhpcy5jb25zdHI9bSx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgaT1uLGE9aSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gYyhiLGcpe2lmKGIuX3pvZCl7aWYoYi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7cXIudmFsdWU9bmV3IHMoZyk7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfem9kIixxcil9ZmluYWxseXtxci52YWx1ZT12b2lkIDB9fWlmKGIuX3pvZC50cmFpdHMuYWRkKGUpLHQoYixnKSxhKXtjb25zdCB3PU9iamVjdC5nZXRQcm90b3R5cGVPZihiKSxTPWIuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBPPXc7Zm9yKDtPJiZPIT09UzspTz1PYmplY3QuZ2V0UHJvdG90eXBlT2YoTyk7Y29uc3QgRT1PPz93O2EuaGFzKEUpfHwoYS5hZGQoRSkscXUoRSxpKSl9Y29uc3QgXz1tLnByb3RvdHlwZTtmb3IoY29uc3QgdyBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLHcpJiYodyBpbiBifHwoYlt3XT1fW3ddLmJpbmQoYikpKX1jb25zdCB1PW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGwgZXh0ZW5kcyB1e31PYmplY3QuZGVmaW5lUHJvcGVydHkobCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBtKGIpe2NvbnN0IGc9bz8uUGFyZW50P09oKGwpOnRoaXM7YyhnLGIpO2NvbnN0IF89Zy5fem9kLmRlZmVycmVkO2lmKF8pe2Zvcihjb25zdCBTIG9mIF8pUygpO2cuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgdz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gdyYmdyhnKSxnfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiaW5pdCIse3ZhbHVlOmN9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmI9Pm8/LlBhcmVudCYmYiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOmI/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIm5hbWUiLHt2YWx1ZTplfSksbX1jb25zdCBmcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIFJlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIFNvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShFYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhFYy5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IG9lPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIEooZSl7cmV0dXJuIGUmJk9iamVjdC5hc3NpZ24ob2UsZSksb2V9ZnVuY3Rpb24gUmgoKXtjb25zdCBlPXRoaXMuX3pvZDtyZXR1cm4gZS5tZXNzYWdlPz8oZS5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KGUuZGVmLHJvLDIpKSxlLm1lc3NhZ2V9ZnVuY3Rpb24gQWgoZSl7dGhpcy5fem9kLm1lc3NhZ2U9ZX1jb25zdCBaaD17Z2V0OlJoLHNldDpBaCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sRHI9e3ZhbHVlOnZvaWQgMCxlbnVtZXJhYmxlOiExfSxPYz1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKSxVdT0oZSx0KT0+e2UubmFtZT0iJFpvZEVycm9yIixEci52YWx1ZT10LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc3N1ZXMiLERyKSxEci52YWx1ZT12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm1lc3NhZ2UiLFpoKTtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtPYy5oYXMobil8fChPYy5hZGQobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz0oKT0+dGhpcy5tZXNzYWdlO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pKX0sSHU9cCgiJFpvZEVycm9yIixVdSksZGU9cCgiJFpvZEVycm9yIixVdSx2b2lkIDAse1BhcmVudDpFcnJvcn0pO2Z1bmN0aW9uIE5oKGUsdCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl8fCh0PT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bigpLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6ZVt0XT1uKCkpLGVbdF19ZnVuY3Rpb24gem8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17fSxvPVtdO2Zvcihjb25zdCByIG9mIGUuaXNzdWVzKXIucGF0aC5sZW5ndGg+MD9OaChuLHIucGF0aFswXSwoKT0+W10pLnB1c2godChyKSk6by5wdXNoKHQocikpO3JldHVybntmb3JtRXJyb3JzOm8sZmllbGRFcnJvcnM6bn19ZnVuY3Rpb24gVG8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17X2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e2Zvcihjb25zdCBpIG9mIHIuaXNzdWVzKWlmKGkuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmaS5lcnJvcnMubGVuZ3RoKWkuZXJyb3JzLm1hcChhPT5vKHtpc3N1ZXM6YX0sWy4uLnMsLi4uaS5wYXRoXSkpO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6aS5pc3N1ZXN9LFsuLi5zLC4uLmkucGF0aF0pO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNle2NvbnN0IGE9Wy4uLnMsLi4uaS5wYXRoXTtpZihhLmxlbmd0aD09PTApbi5fZXJyb3JzLnB1c2godChpKSk7ZWxzZXtsZXQgYz1uLHU9MDtmb3IoO3U8YS5sZW5ndGg7KXtjb25zdCBsPWFbdV0sbT11PT09YS5sZW5ndGgtMTtpZihsPT09Il9lcnJvcnMiKXttJiZjLl9lcnJvcnMucHVzaCh0KGkpKSx1Kys7Y29udGludWV9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOntfZXJyb3JzOltdfSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IGI9Y1tsXTttJiZiLl9lcnJvcnMucHVzaCh0KGkpKSxjPWIsdSsrfX19fTtyZXR1cm4gbyhlKSxufWZ1bmN0aW9uIGhzKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e3ZhciBpO2Zvcihjb25zdCBhIG9mIHIuaXNzdWVzKWlmKGEuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmYS5lcnJvcnMubGVuZ3RoKWEuZXJyb3JzLm1hcChjPT5vKHtpc3N1ZXM6Y30sWy4uLnMsLi4uYS5wYXRoXSkpO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6YS5pc3N1ZXN9LFsuLi5zLC4uLmEucGF0aF0pO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNle2NvbnN0IGM9Wy4uLnMsLi4uYS5wYXRoXTtpZihjLmxlbmd0aD09PTApe24uZXJyb3JzLnB1c2godChhKSk7Y29udGludWV9bGV0IHU9bixsPTA7Zm9yKDtsPGMubGVuZ3RoOyl7Y29uc3QgbT1jW2xdLGI9bD09PWMubGVuZ3RoLTE7dHlwZW9mIG09PSJzdHJpbmciPyh1LnByb3BlcnRpZXM/Pyh1LnByb3BlcnRpZXM9e30pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LnByb3BlcnRpZXMsbSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LnByb3BlcnRpZXMsbSx7dmFsdWU6e2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx1PXUucHJvcGVydGllc1ttXSk6KHUuaXRlbXM/Pyh1Lml0ZW1zPVtdKSwoaT11Lml0ZW1zKVttXT8/KGlbbV09e2Vycm9yczpbXX0pLHU9dS5pdGVtc1ttXSksYiYmdS5lcnJvcnMucHVzaCh0KGEpKSxsKyt9fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBGdShlKXtjb25zdCB0PVtdLG49ZS5tYXAobz0+dHlwZW9mIG89PSJvYmplY3QiP28ua2V5Om8pO2Zvcihjb25zdCBvIG9mIG4pdHlwZW9mIG89PSJudW1iZXIiP3QucHVzaChgWyR7b31dYCk6dHlwZW9mIG89PSJzeW1ib2wiP3QucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkoU3RyaW5nKG8pKX1dYCk6L1teXHckXS8udGVzdChvKT90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KG8pfV1gKToodC5sZW5ndGgmJnQucHVzaCgiLiIpLHQucHVzaChvKSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gbXMoZSl7Y29uc3QgdD1bXSxuPVsuLi5lLmlzc3Vlc10uc29ydCgobyxyKT0+KG8ucGF0aD8/W10pLmxlbmd0aC0oci5wYXRoPz9bXSkubGVuZ3RoKTtmb3IoY29uc3QgbyBvZiBuKXQucHVzaChg4pyWICR7by5tZXNzYWdlfWApLG8ucGF0aD8ubGVuZ3RoJiZ0LnB1c2goYCAg4oaSIGF0ICR7RnUoby5wYXRoKX1gKTtyZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24gSW8oZSx0KXtyZXR1cm57Y2FsbGVlOnQ/LmNhbGxlZT8/ZSxFcnI6dD8uRXJyfX1jb25zdCBGdD1lPT57Y29uc3QgdD0obixvLHIscyk9Pntjb25zdCBpPXI/ey4uLnIsYXN5bmM6ITF9Onthc3luYzohMX0sYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFJlO2lmKGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgYz1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAodT0+Z2UodSxpLEooKSkpKTt0aHJvdyBjcyhjLHM/LmNhbGxlZT8/dCksY31yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LEtyPUZ0KGRlKSxCdD1lPT57Y29uc3QgdD1hc3luYyhuLG8scixzKT0+e2NvbnN0IGk9cj97Li4ucixhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UmJihhPWF3YWl0IGEpLGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgYz1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAodT0+Z2UodSxpLEooKSkpKTt0aHJvdyBjcyhjLHM/LmNhbGxlZT8/dCksY31yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LFdyPUJ0KGRlKSxWdD1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBSZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP1Z1KGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sQnU9VnQoZGUpO2Z1bmN0aW9uIFZ1KGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+Z2UocixuLEooKSkpKSx0PXZvaWQgMCxuPXZvaWQgMCksb30sc2V0IGVycm9yKHIpe289cix0PXZvaWQgMCxuPXZvaWQgMH19fWNvbnN0IEp0PWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgcz10Ll96b2QucnVuKHt2YWx1ZTpuLGlzc3VlczpbXX0scik7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlJiYocz1hd2FpdCBzKSxzLmlzc3Vlcy5sZW5ndGg/VnUoZSxzLmlzc3VlcyxyKTp7c3VjY2VzczohMCxkYXRhOnMudmFsdWV9fSxqaD1KdChkZSksTWg9U3ltYm9sLmZvcigiem9kLmNvbXBpbGUuaW52YWxpZCIpLHFoPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmZhbGxiYWNrIiksUG89KChlLHQsbik9Pntjb25zdCBvPWUuX3pvZC5iYWcudmFsaWRhdG9yO2lmKG8hPT12b2lkIDApe2lmKG8odCkhPT1NaClyZXR1cm4hMDtpZihvLmRlZmluaXRlPT09ITAmJm49PT12b2lkIDApcmV0dXJuITF9cmV0dXJuIERoKGUsdCxuKX0pO2Z1bmN0aW9uIERoKGUsdCxuKXtjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITEsYWJvcnRFYXJseTohMH06e2FzeW5jOiExLGFib3J0RWFybHk6ITB9LHI9ZS5fem9kLmJhZy5mYWxsYmFja1J1bjtsZXQgcztpZihyPyhvW3FoXT0hMCxzPXIoe3ZhbHVlOnQsaXNzdWVzOltdfSxvKSk6cz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykscyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFJlO3JldHVybiBzLmlzc3Vlcy5sZW5ndGg9PT0wfWNvbnN0IHhvPWFzeW5jKGUsdCxuKT0+e2NvbnN0IG89bj97Li4ubixhc3luYzohMCxhYm9ydEVhcmx5OiEwfTp7YXN5bmM6ITAsYWJvcnRFYXJseTohMH07bGV0IHI9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZSYmKHI9YXdhaXQgciksci5pc3N1ZXMubGVuZ3RoPT09MH0sZ3M9ZT0+e2NvbnN0IHQ9RnQoZSksbj0obyxyLHMsaSk9Pntjb25zdCBhPXM/ey4uLnMsZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHQobyxyLGEsSW8obixpKSl9O3JldHVybiBufSxMaD1ncyhkZSksdnM9ZT0+e2NvbnN0IHQ9RnQoZSksbj0obyxyLHMsaSk9PnQobyxyLHMsSW8obixpKSk7cmV0dXJuIG59LFVoPXZzKGRlKSxicz1lPT57Y29uc3QgdD1CdChlKSxuPWFzeW5jKG8scixzLGkpPT57Y29uc3QgYT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBhd2FpdCB0KG8scixhLElvKG4saSkpfTtyZXR1cm4gbn0sSGg9YnMoZGUpLF9zPWU9Pntjb25zdCB0PUJ0KGUpLG49YXN5bmMobyxyLHMsaSk9PmF3YWl0IHQobyxyLHMsSW8obixpKSk7cmV0dXJuIG59LEZoPV9zKGRlKSx5cz1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBWdChlKSh0LG4scil9LEJoPXlzKGRlKSx3cz1lPT4odCxuLG8pPT5WdChlKSh0LG4sbyksVmg9d3MoZGUpLGtzPWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gSnQoZSkodCxuLHIpfSxKaD1rcyhkZSksJHM9ZT0+YXN5bmModCxuLG8pPT5KdChlKSh0LG4sbyksS2g9JHMoZGUpLEp1PS9eW2NDXVswLTlhLXpdezYsfSQvLEt1PS9eWzAtOWEtel0rJC8sV3U9L15bMC03XVswLTlBLUhKS01OUC1UVi1aYS1oamttbnAtdHYtel17MjV9JC8sR3U9L15bMC05YS12QS1WXXsyMH0kLyxRdT0vXltBLVphLXowLTldezI3fSQvLFl1PS9eW2EtekEtWjAtOV8tXXsyMX0kLztmdW5jdGlvbiBYdShlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXlthLXpBLVowLTlfLV17JHtlfX0kYCl9Y29uc3QgZWw9L15QKD86KFxkK1cpfCg/IS4qVykoPz1cZHxUXGQpKFxkK1kpPyhcZCtNKT8oXGQrRCk/KFQoPz1cZCkoXGQrSCk/KFxkK00pPyhcZCsoWy4sXVxkKyk/Uyk/KT8pJC8sV2g9L15bLStdP1AoPyEkKSg/Oig/OlstK10/XGQrWSl8KD86Wy0rXT9cZCtbLixdXGQrWSQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86KD86Wy0rXT9cZCtXKXwoPzpbLStdP1xkK1suLF1cZCtXJCkpPyg/Oig/OlstK10/XGQrRCl8KD86Wy0rXT9cZCtbLixdXGQrRCQpKT8oPzpUKD89W1xkKy1dKSg/Oig/OlstK10/XGQrSCl8KD86Wy0rXT9cZCtbLixdXGQrSCQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86Wy0rXT9cZCsoPzpbLixdXGQrKT9TKT8pPz8kLyx0bD0vXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0pJC8scnQ9ZT0+ZT9uZXcgUmVnRXhwKGBeKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LSR7ZX1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfSkkYCk6L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtOF1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB8ZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmKSQvLEdoPXJ0KDQpLFFoPXJ0KDYpLFloPXJ0KDcpLG5sPS9eKD86W0EtWmEtejAtOV8nK1wtXStcLikqW0EtWmEtejAtOV8nK1wtXSpbQS1aYS16MC05XystXUAoPzpbQS1aYS16MC05XVtBLVphLXowLTlcLV0qXC4pK1tBLVphLXpdezIsfSQvLFhoPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLGVtPS9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aXC0wLTldK1wuKStbYS16QS1aXXsyLH0pKSQvLG9sPS9eW15cc0AiXXsxLDY0fUBbXlxzQF17MSwyNTV9JC91LHRtPW9sLG5tPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLG9tPSJeKD89W1xcc1xcU10qW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe1JlZ2lvbmFsX0luZGljYXRvcn1cXHUyMEUzXSlbXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31cXHB7RW1vamlfQ29tcG9uZW50fV0rJCI7ZnVuY3Rpb24gcmwoKXtyZXR1cm4gbmV3IFJlZ0V4cChvbSwidSIpfWNvbnN0IHNsPS9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSkkLyxpbD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKSQvLGFsPWU9Pntjb25zdCB0PVRlKGU/PyI6Iik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oPzpbMC05QS1GXXsyfSR7dH0pezV9WzAtOUEtRl17Mn0kfF4oPzpbMC05YS1mXXsyfSR7dH0pezV9WzAtOWEtZl17Mn0kYCl9LGNsPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLyhbMC05XXxbMS0yXVswLTldfDNbMC0yXSkkLyx1bD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKVwvKDEyWzAtOF18MVswMV1bMC05XXxbMS05XT9bMC05XSkkLyxybT0vXiR8Xig/OlswLTlhLXpBLVorL117NH0pKig/Oig/OlswLTlhLXpBLVorL117Mn09PSl8KD86WzAtOWEtekEtWisvXXszfT0pKT8kLyxzbT0vXig/OltBLVphLXowLTlfLV17NH0pKig/OltBLVphLXowLTlfLV17MiwzfSk/JC8sbGw9L14oPz0uezEsMjUzfVwuPyQpW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlstMC05YS16QS1aXXswLDYxfVswLTlhLXpBLVpdKT8pKlwuPyQvLGRsPS9eKD89LnsxLDI1M30kKShbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT9cLikrW2EtekEtWl17Miw2M30kLyxTcz0vXmh0dHBzPyQvLHBsPS9eXCtbMS05XVxkezYsMTR9JC8senM9L15cZCg/OlsgLV0/XGQpezExLDE4fSQvLGZsPS9eKD86QUVEfEFGTnxBTEx8QU1EfEFPQXxBUlN8QVVEfEFXR3xBWk58QkFNfEJCRHxCRFR8QkhEfEJJRnxCTUR8Qk5EfEJPQnxCT1Z8QlJMfEJTRHxCVE58QldQfEJZTnxCWkR8Q0FEfENERnxDSEV8Q0hGfENIV3xDTEZ8Q0xQfENOWXxDT1B8Q09VfENSQ3xDVVB8Q1ZFfENaS3xESkZ8REtLfERPUHxEWkR8RUdQfEVSTnxFVEJ8RVVSfEZKRHxGS1B8R0JQfEdFTHxHSFN8R0lQfEdNRHxHTkZ8R1RRfEdZRHxIS0R8SE5MfEhUR3xIVUZ8SURSfElMU3xJTlJ8SVFEfElSUnxJU0t8Sk1EfEpPRHxKUFl8S0VTfEtHU3xLSFJ8S01GfEtQV3xLUld8S1dEfEtZRHxLWlR8TEFLfExCUHxMS1J8TFJEfExTTHxMWUR8TUFEfE1ETHxNR0F8TUtEfE1NS3xNTlR8TU9QfE1SVXxNVVJ8TVZSfE1XS3xNWE58TVhWfE1ZUnxNWk58TkFEfE5HTnxOSU98Tk9LfE5QUnxOWkR8T01SfFBBQnxQRU58UEdLfFBIUHxQS1J8UExOfFBZR3xRQVJ8Uk9OfFJTRHxSVUJ8UldGfFNBUnxTQkR8U0NSfFNER3xTRUt8U0dEfFNIUHxTTEV8U09TfFNSRHxTU1B8U1ROfFNWQ3xTWVB8U1pMfFRIQnxUSlN8VE1UfFRORHxUT1B8VFJZfFRURHxUV0R8VFpTfFVBSHxVR1h8VVNEfFVTTnxVWUl8VVlVfFVZV3xVWlN8VkVEfFZFU3xWTkR8VlVWfFdTVHxYQUR8WEFGfFhBR3xYQVV8WEJBfFhCQnxYQkN8WEJEfFhDRHxYQ0d8WERSfFhPRnxYUER8WFBGfFhQVHxYU1V8WFRTfFhVQXxYWFh8WUVSfFpBUnxaTVd8WldHKSQvLFRzPS9eW0EtWl17Mn0oPyEwMHwwMXw5OSlcZHsyfVtBLVowLTldezExLDMwfSQvLGhsPSIoPzooPzpcXGRcXGRbMjQ2OF1bMDQ4XXxcXGRcXGRbMTM1NzldWzI2XXxcXGRcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXGR7NH0tKD86KD86MFsxMzU3OF18MVswMl0pLSg/OjBbMS05XXxbMTJdXFxkfDNbMDFdKXwoPzowWzQ2OV18MTEpLSg/OjBbMS05XXxbMTJdXFxkfDMwKXwoPzowMiktKD86MFsxLTldfDFcXGR8MlswLThdKSkpIjtmdW5jdGlvbiBpbShlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7ZX0kYCl9Y29uc3QgbWw9aW0oaGwpO2Z1bmN0aW9uIEdyKGUpe2NvbnN0IHQ9Iig/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCI7cmV0dXJuIHR5cGVvZiBlLnByZWNpc2lvbj09Im51bWJlciI/ZS5wcmVjaXNpb249PT0tMT9gJHt0fWA6ZS5wcmVjaXNpb249PT0wP2Ake3R9OlswLTVdXFxkYDpgJHt0fTpbMC01XVxcZFxcLlxcZHske2UucHJlY2lzaW9ufX1gOmUuc2Vjb25kcz9gJHt0fTpbMC01XVxcZCg/OlxcLlxcZCspP2A6YCR7dH0oPzo6WzAtNV1cXGQoPzpcXC5cXGQrKT8pP2B9ZnVuY3Rpb24gZ2woZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke0dyKGUpfSRgKX1mdW5jdGlvbiB2bChlKXtjb25zdCB0PVsiWiJdO2Uub2Zmc2V0JiZ0LnB1c2goIihbKy1dKD86WzAxXVxcZHwyWzAtM10pOlswLTVdXFxkKSIpO2NvbnN0IG49YCR7R3Ioe3ByZWNpc2lvbjplLnByZWNpc2lvbixzZWNvbmRzOiEwfSl9KD86JHt0LmpvaW4oInwiKX0pYCxvPWUubG9jYWw/YCR7bn18JHtHcih7cHJlY2lzaW9uOmUucHJlY2lzaW9ufSl9YDpuO3JldHVybiBuZXcgUmVnRXhwKGBeJHtobH1UKD86JHtvfSkkYCl9Y29uc3QgYmw9L15bXHNcU117MCx9JC8sX2w9ZT0+e2NvbnN0IHQ9ZT9gW1xcc1xcU117JHtlPy5taW5pbXVtPz8wfSwke2U/Lm1heGltdW0/PyIifX1gOiJbXFxzXFxTXSoiO3JldHVybiBuZXcgUmVnRXhwKGBeJHt0fSRgKX0seWw9L14tP1xkK24/JC8sd2w9L14tP1xkKyQvLEVvPS9eLT9cZCsoPzpcLlxkKyk/JC8sa2w9L14oPzp0cnVlfGZhbHNlKSQvaSwkbD0vXm51bGwkL2ksU2w9L151bmRlZmluZWQkL2ksemw9L15bXkEtWl0qJC8sVGw9L15bXmEtel0qJC8sSWw9L15bMC05YS1mQS1GXSokLztmdW5jdGlvbiBLdChlLHQpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOSsvXXske2V9fSR7dH0kYCl9ZnVuY3Rpb24gV3QoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Xy1deyR7ZX19JGApfWNvbnN0IGFtPS9eWzAtOWEtZkEtRl17MzJ9JC8sY209S3QoMjIsIj09IiksdW09V3QoMjIpLGxtPS9eWzAtOWEtZkEtRl17NDB9JC8sZG09S3QoMjcsIj0iKSxwbT1XdCgyNyksZm09L15bMC05YS1mQS1GXXs2NH0kLyxobT1LdCg0MywiPSIpLG1tPVd0KDQzKSxnbT0vXlswLTlhLWZBLUZdezk2fSQvLHZtPUt0KDY0LCIiKSxibT1XdCg2NCksX209L15bMC05YS1mQS1GXXsxMjh9JC8seW09S3QoODYsIj09Iiksd209V3QoODYpLENvPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhbnlTdHJpbmc6YmwsYmFzZTY0OnJtLGJhc2U2NHVybDpzbSxiaWdpbnQ6eWwsYm9vbGVhbjprbCxicm93c2VyRW1haWw6bm0sY2lkcnY0OmNsLGNpZHJ2Njp1bCxjcmVkaXRDYXJkOnpzLGN1aWQ6SnUsY3VpZDI6S3UsY3VycmVuY3lDb2RlOmZsLGRhdGU6bWwsZGF0ZXRpbWU6dmwsZG9tYWluOmRsLGR1cmF0aW9uOmVsLGUxNjQ6cGwsZW1haWw6bmwsZW1vamk6cmwsZXh0ZW5kZWREdXJhdGlvbjpXaCxndWlkOnRsLGhleDpJbCxob3N0bmFtZTpsbCxodG1sNUVtYWlsOlhoLGh0dHBQcm90b2NvbDpTcyxpYmFuOlRzLGlkbkVtYWlsOnRtLGludGVnZXI6d2wsaXB2NDpzbCxpcHY2OmlsLGtzdWlkOlF1LGxvd2VyY2FzZTp6bCxtYWM6YWwsbWQ1X2Jhc2U2NDpjbSxtZDVfYmFzZTY0dXJsOnVtLG1kNV9oZXg6YW0sbmFub2lkOll1LG5hbm9pZE9mTGVuZ3RoOlh1LG51bGw6JGwsbnVtYmVyOkVvLHJmYzUzMjJFbWFpbDplbSxzaGExX2Jhc2U2NDpkbSxzaGExX2Jhc2U2NHVybDpwbSxzaGExX2hleDpsbSxzaGEyNTZfYmFzZTY0OmhtLHNoYTI1Nl9iYXNlNjR1cmw6bW0sc2hhMjU2X2hleDpmbSxzaGEzODRfYmFzZTY0OnZtLHNoYTM4NF9iYXNlNjR1cmw6Ym0sc2hhMzg0X2hleDpnbSxzaGE1MTJfYmFzZTY0OnltLHNoYTUxMl9iYXNlNjR1cmw6d20sc2hhNTEyX2hleDpfbSxzdHJpbmc6X2wsdGltZTpnbCx1bGlkOld1LHVuZGVmaW5lZDpTbCx1bmljb2RlRW1haWw6b2wsdXBwZXJjYXNlOlRsLHV1aWQ6cnQsdXVpZDQ6R2gsdXVpZDY6UWgsdXVpZDc6WWgseGlkOkd1fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFU9cCgiJFpvZENoZWNrIiwoZSx0KT0+e3ZhciBuO2UuX3pvZD8/KGUuX3pvZD17fSksZS5fem9kLmRlZj10LChuPWUuX3pvZCkub25hdHRhY2g/PyhuLm9uYXR0YWNoPVtdKX0pLElzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIWFzKHQpJiZ0LnNpemUhPT12b2lkIDB9LFBzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIWFzKHQpJiZ0Lmxlbmd0aCE9PXZvaWQgMH0saW89e251bWJlcjoibnVtYmVyIixiaWdpbnQ6ImJpZ2ludCIsb2JqZWN0OiJkYXRlIn0seHM9cCgiJFpvZENoZWNrTGVzc1RoYW4iLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3Qgbj1pb1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZTw9dC52YWx1ZTpvLnZhbHVlPHQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aW9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19iaWciLG1heGltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksRXM9cCgiJFpvZENoZWNrR3JlYXRlclRoYW4iLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3Qgbj1pb1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZT49dC52YWx1ZTpvLnZhbHVlPnQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aW9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0eXBlb2YgdC52YWx1ZT09Im9iamVjdCI/dC52YWx1ZS5nZXRUaW1lKCk6dC52YWx1ZSxpbnB1dDpvLnZhbHVlLGluY2x1c2l2ZTp0LmluY2x1c2l2ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxQbD1wKCIkWm9kQ2hlY2tNdWx0aXBsZU9mIiwoZSx0KT0+e1UuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aWYodHlwZW9mIG4udmFsdWUhPXR5cGVvZiB0LnZhbHVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG1peCBudW1iZXIgYW5kIGJpZ2ludCBpbiBtdWx0aXBsZV9vZiBjaGVjay4iKTsodHlwZW9mIG4udmFsdWU9PSJiaWdpbnQiP3QudmFsdWUhPT1CaWdJbnQoMCkmJm4udmFsdWUldC52YWx1ZT09PUJpZ0ludCgwKTp2dShuLnZhbHVlLHQudmFsdWUpPT09MCl8fG4uaXNzdWVzLnB1c2goe29yaWdpbjp0eXBlb2Ygbi52YWx1ZSxjb2RlOiJub3RfbXVsdGlwbGVfb2YiLGRpdmlzb3I6dC52YWx1ZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHhsPXAoIiRab2RDaGVja051bWJlckZvcm1hdCIsKGUsdCk9PntVLmluaXQoZSx0KSx0LmZvcm1hdD10LmZvcm1hdHx8ImZsb2F0NjQiO2NvbnN0IG49dC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxvPW4/ImludCI6Im51bWJlciIsW3Isc109VHVbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1pPT57Y29uc3QgYT1pLnZhbHVlO2lmKG4pe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXtpLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDpvLGZvcm1hdDp0LmZvcm1hdCxjb2RlOiJpbnZhbGlkX3R5cGUiLGNvbnRpbnVlOiExLGlucHV0OmEsaW5zdDplfSk7cmV0dXJufWlmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihhKSl7YT4wP2kuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX2JpZyIsbWF4aW11bTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pOmkuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLG5vdGU6IkludGVnZXJzIG11c3QgYmUgd2l0aGluIHRoZSBzYWZlIGludGVnZXIgcmFuZ2UuIixpbnN0OmUsb3JpZ2luOm8saW5jbHVzaXZlOiEwLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufX1hPHImJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpyLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxhPnMmJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19iaWciLG1heGltdW06cyxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksRWw9cCgiJFpvZENoZWNrQmlnSW50Rm9ybWF0IiwoZSx0KT0+e1UuaW5pdChlLHQpO2NvbnN0W24sb109SXVbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1yPT57Y29uc3Qgcz1yLnZhbHVlO3M8biYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOm4saW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLHM+byYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX2JpZyIsbWF4aW11bTpvLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxDbD1wKCIkWm9kQ2hlY2tNYXhTaXplIiwoZSx0KT0+e3ZhciBuO1UuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49SXMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlO3Iuc2l6ZTw9dC5tYXhpbXVtfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46eW8ociksY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksT2w9cCgiJFpvZENoZWNrTWluU2l6ZSIsKGUsdCk9Pnt2YXIgbjtVLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPUlzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU+PXQubWluaW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOnlvKHIpLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksUmw9cCgiJFpvZENoZWNrU2l6ZUVxdWFscyIsKGUsdCk9Pnt2YXIgbjtVLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPUlzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIuc2l6ZTtpZihzPT09dC5zaXplKXJldHVybjtjb25zdCBpPXM+dC5zaXplO28uaXNzdWVzLnB1c2goe29yaWdpbjp5byhyKSwuLi5pP3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQuc2l6ZX06e2NvZGU6InRvb19zbWFsbCIsbWluaW11bTp0LnNpemV9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEFsPXAoIiRab2RDaGVja01heExlbmd0aCIsKGUsdCk9Pnt2YXIgbjtVLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVBzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+dC5tYXhpbXVtP3dvKHIpOnMpPD10Lm1heGltdW0pcmV0dXJuO2NvbnN0IGE9a28ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksWmw9cCgiJFpvZENoZWNrTWluTGVuZ3RoIiwoZSx0KT0+e3ZhciBuO1UuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49UHMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGg7aWYoKHR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5taW5pbXVtJiZzPHQubWluaW11bSoyP3dvKHIpOnMpPj10Lm1pbmltdW0pcmV0dXJuO2NvbnN0IGE9a28ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluaW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxObD1wKCIkWm9kQ2hlY2tMZW5ndGhFcXVhbHMiLChlLHQpPT57dmFyIG47VS5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1QcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aCxpPXR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5sZW5ndGgmJnM8PXQubGVuZ3RoKjI/d28ocik6cztpZihpPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IGE9a28ociksYz1pPnQubGVuZ3RoO28uaXNzdWVzLnB1c2goe29yaWdpbjphLC4uLmM/e2NvZGU6InRvb19iaWciLG1heGltdW06dC5sZW5ndGh9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5sZW5ndGh9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEd0PXAoIiRab2RDaGVja1N0cmluZ0Zvcm1hdCIsKGUsdCk9Pnt2YXIgbixvO1UuaW5pdChlLHQpLHQucGF0dGVybj8obj1lLl96b2QpLmNoZWNrPz8obi5jaGVjaz1yPT57dC5wYXR0ZXJuLmxhc3RJbmRleD0wLCF0LnBhdHRlcm4udGVzdChyLnZhbHVlKSYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQsaW5wdXQ6ci52YWx1ZSwuLi50LnBhdHRlcm4/e3BhdHRlcm46dC5wYXR0ZXJuLnRvU3RyaW5nKCl9Ont9LGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfSk6KG89ZS5fem9kKS5jaGVjaz8/KG8uY2hlY2s9KCk9Pnt9KX0pLGpsPXAoIiRab2RDaGVja1JlZ2V4IiwoZSx0KT0+e0d0LmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qobi52YWx1ZSkmJm4uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsaW5wdXQ6bi52YWx1ZSxwYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLE1sPXAoIiRab2RDaGVja0xvd2VyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49emwpLEd0LmluaXQoZSx0KX0pLHFsPXAoIiRab2RDaGVja1VwcGVyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49VGwpLEd0LmluaXQoZSx0KX0pLERsPXAoIiRab2RDaGVja0luY2x1ZGVzIiwoZSx0KT0+e1UuaW5pdChlLHQpO2NvbnN0IG49VGUodC5pbmNsdWRlcyksbz1uZXcgUmVnRXhwKHR5cGVvZiB0LnBvc2l0aW9uPT0ibnVtYmVyIj9gXi57JHt0LnBvc2l0aW9ufSx9JHtufWA6bik7dC5wYXR0ZXJuPW8sZS5fem9kLmNoZWNrPXI9PntyLnZhbHVlLmluY2x1ZGVzKHQuaW5jbHVkZXMsdC5wb3NpdGlvbil8fHIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsaW5jbHVkZXM6dC5pbmNsdWRlcyxpbnB1dDpyLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLExsPXAoIiRab2RDaGVja1N0YXJ0c1dpdGgiLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgUmVnRXhwKGBeJHtUZSh0LnByZWZpeCl9LipgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49biksZS5fem9kLmNoZWNrPW89PntvLnZhbHVlLnN0YXJ0c1dpdGgodC5wcmVmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLHByZWZpeDp0LnByZWZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFVsPXAoIiRab2RDaGVja0VuZHNXaXRoIiwoZSx0KT0+e1UuaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgLioke1RlKHQuc3VmZml4KX0kYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5lbmRzV2l0aCh0LnN1ZmZpeCl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLHN1ZmZpeDp0LnN1ZmZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIGFvKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZmUobixlLmlzc3VlcykpfWNvbnN0IEhsPXAoIiRab2RDaGVja1Byb3BlcnR5IiwoZSx0KT0+e1UuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz10LnNjaGVtYS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZVt0LnByb3BlcnR5XSxpc3N1ZXM6W119LHt9KTtpZihvIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gby50aGVuKHI9PmFvKHIsbix0LnByb3BlcnR5KSk7YW8obyxuLHQucHJvcGVydHkpfX0pLEZsPXAoIiRab2RDaGVja1Byb3BlcnRpZXMiLChlLHQpPT57VS5pbml0KGUsdCksJG8oZSxTeW1ib2wuaXRlcmF0b3IsZnVuY3Rpb24qKCl7eWllbGQgZX0pO2xldCBuO2UuX3pvZC5jaGVjaz1vPT57aWYoby52YWx1ZT09bnVsbCl7by5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im9iamVjdCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpvLnZhbHVlLGluc3Q6ZX0pO3JldHVybn1uPz8obj1SZWZsZWN0Lm93bktleXModC5zaGFwZSkubWFwKGk9PltpLHQuc2hhcGVbaV1dKSk7Y29uc3Qgcj1vLnZhbHVlO2xldCBzO2Zvcihjb25zdFtpLGFdb2Ygbil7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpyW2ldLGlzc3VlczpbXX0se30pO2MgaW5zdGFuY2VvZiBQcm9taXNlPyhzPz8ocz1bXSkscy5wdXNoKGMudGhlbih1PT5hbyh1LG8saSkpKSk6YW8oYyxvLGkpfWlmKHMpcmV0dXJuIFByb21pc2UuYWxsKHMpLnRoZW4oKCk9Pnt9KX19KSxCbD1wKCIkWm9kQ2hlY2tNaW1lVHlwZSIsKGUsdCk9PntVLmluaXQoZSx0KTtjb25zdCBuPW5ldyBTZXQodC5taW1lKTtlLl96b2QuY2hlY2s9bz0+e24uaGFzKG8udmFsdWUudHlwZSl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0Lm1pbWUsaW5wdXQ6by52YWx1ZS50eXBlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFZsPXAoIiRab2RDaGVja092ZXJ3cml0ZSIsKGUsdCk9PntVLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e24udmFsdWU9dC50eChuLnZhbHVlKX19KTtjbGFzcyBKbHtjb25zdHJ1Y3Rvcih0PVtdLG49e30pe3RoaXMuY29udGVudD1bXSx0aGlzLmluZGVudD0wLHRoaXMuYXJncz10LHRoaXMuY2xvc2VkPW59aW5kZW50ZWQodCl7dGhpcy5pbmRlbnQrPTE7dHJ5e3QodGhpcyl9ZmluYWxseXt0aGlzLmluZGVudC09MX19d3JpdGUodCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpe3QodGhpcyx7ZXhlY3V0aW9uOiJzeW5jIn0pLHQodGhpcyx7ZXhlY3V0aW9uOiJhc3luYyJ9KTtyZXR1cm59Y29uc3Qgbz10LnNwbGl0KGAKYCkuZmlsdGVyKGk9PmkpLHI9TWF0aC5taW4oLi4uby5tYXAoaT0+aS5sZW5ndGgtaS50cmltU3RhcnQoKS5sZW5ndGgpKSxzPW8ubWFwKGk9Pmkuc2xpY2UocikpLm1hcChpPT4iICIucmVwZWF0KHRoaXMuaW5kZW50KjIpK2kpO2Zvcihjb25zdCBpIG9mIHMpdGhpcy5jb250ZW50LnB1c2goaSl9Y29tcGlsZSgpe2NvbnN0IHQ9RnVuY3Rpb24sbj10aGlzPy5jb250ZW50Pz9bIiJdO3JldHVybiBuZXcgdCguLi5PYmplY3Qua2V5cyh0aGlzLmNsb3NlZCksYHJldHVybiBmdW5jdGlvbiAoJHt0aGlzLmFyZ3Muam9pbigiLCAiKX0pIHsKJHtuLmpvaW4oYApgKX0KfTtgKSguLi5PYmplY3QudmFsdWVzKHRoaXMuY2xvc2VkKSl9fWNvbnN0IEtsPXttYWpvcjo0LG1pbm9yOjYscGF0Y2g6NX0sej1wKCIkWm9kVHlwZSIsKGUsdCk9Pnt2YXIgbjtlPz8oZT17fSksZS5fem9kLmRlZj10LGUuX3pvZC5iYWc9ZS5fem9kLmJhZ3x8e30sZS5fem9kLnZlcnNpb249S2w7Y29uc3Qgbz1lLl96b2QuZGVmLmNoZWNrcyxyPWUuX3pvZC50cmFpdHMuaGFzKCIkWm9kQ2hlY2siKT9bZSwuLi5vPz9bXV06bz8ubGVuZ3RoP1suLi5vXTpbXTtmb3IoY29uc3QgcyBvZiByKWZvcihjb25zdCBpIG9mIHMuX3pvZC5vbmF0dGFjaClpKGUpO2lmKHIubGVuZ3RoPT09MCkobj1lLl96b2QpLmRlZmVycmVkPz8obi5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkPy5wdXNoKCgpPT57ZS5fem9kLnJ1bj1lLl96b2QucGFyc2V9KTtlbHNle2NvbnN0IHM9KGEsYyx1KT0+e2lmKGEubWVtbylyZXR1cm4gYTtsZXQgbD1zZShhKSxtO2Zvcihjb25zdCBiIG9mIGMpe2lmKGIuX3pvZC5kZWYud2hlbil7aWYoWnUoYSl8fCFiLl96b2QuZGVmLndoZW4oYSkpY29udGludWV9ZWxzZSBpZihsKWNvbnRpbnVlO2NvbnN0IGc9YS5pc3N1ZXMubGVuZ3RoLF89Yi5fem9kLmNoZWNrKGEpO2lmKF8gaW5zdGFuY2VvZiBQcm9taXNlJiZ1Py5hc3luYz09PSExKXRocm93IG5ldyBSZTtpZihtfHxfIGluc3RhbmNlb2YgUHJvbWlzZSltPShtPz9Qcm9taXNlLnJlc29sdmUoKSkudGhlbihhc3luYygpPT57YXdhaXQgXyxhLmlzc3Vlcy5sZW5ndGghPT1nJiYoSnIoYS5pc3N1ZXMsZyxlKSxsfHwobD1zZShhLGcpKSl9KTtlbHNle2lmKGEuaXNzdWVzLmxlbmd0aD09PWcpY29udGludWU7SnIoYS5pc3N1ZXMsZyxlKSxsfHwobD1zZShhLGcpKX19cmV0dXJuIG0/bS50aGVuKCgpPT5hKTphfSxpPShhLGMsdSk9PntpZihzZShhKSlyZXR1cm4gYS5hYm9ydGVkPSEwLGE7Y29uc3QgbD1zKGMscix1KTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSl7aWYodS5hc3luYz09PSExKXRocm93IG5ldyBSZTtyZXR1cm4gbC50aGVuKG09PmUuX3pvZC5wYXJzZShtLHUpKX1yZXR1cm4gZS5fem9kLnBhcnNlKGwsdSl9O2UuX3pvZC5ydW49KGEsYyk9PntpZihjLnNraXBDaGVja3MpcmV0dXJuIGUuX3pvZC5wYXJzZShhLGMpO2lmKGMuZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3QgbD1lLl96b2QucGFyc2Uoe3ZhbHVlOmEudmFsdWUsaXNzdWVzOltdfSx7Li4uYyxza2lwQ2hlY2tzOiEwfSk7cmV0dXJuIGwgaW5zdGFuY2VvZiBQcm9taXNlP2wudGhlbihtPT5pKG0sYSxjKSk6aShsLGEsYyl9Y29uc3QgdT1lLl96b2QucGFyc2UoYSxjKTtpZih1IGluc3RhbmNlb2YgUHJvbWlzZSl7aWYoYy5hc3luYz09PSExKXRocm93IG5ldyBSZTtyZXR1cm4gdS50aGVuKGw9PnMobCxyLGMpKX1yZXR1cm4gcyh1LHIsYyl9fX0se2dldCJ+c3RhbmRhcmQiKCl7cmV0dXJuICRvKHRoaXMsIn5zdGFuZGFyZCIsQ3ModGhpcykpfSxzZXQifnN0YW5kYXJkIihlKXtJZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfX0pLFdsPShlLHQpPT5lLmlzc3Vlcy5sZW5ndGg/e2lzc3VlczplLmlzc3Vlcy5tYXAobj0+Z2Uobix0LEooKSkpfTp7dmFsdWU6ZS52YWx1ZX07YXN5bmMgZnVuY3Rpb24ga20oZSx0KXtjb25zdCBuPXthc3luYzohMH07cmV0dXJuIFdsKGF3YWl0IGUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKSxuKX1mdW5jdGlvbiBDcyhlKXtyZXR1cm57dmFsaWRhdGU6dD0+e2NvbnN0IG49e2FzeW5jOiExfTt0cnl7Y29uc3Qgbz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbik7aWYoIShvIGluc3RhbmNlb2YgUHJvbWlzZSkpcmV0dXJuIFdsKG8sbil9Y2F0Y2h7fXJldHVybiBrbShlLHQpfSx2ZW5kb3I6InpvZCIsdmVyc2lvbjoxfX1jb25zdCBRdD1wKCIkWm9kU3RyaW5nIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXQucGF0dGVybj8/YmwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9U3RyaW5nKG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJzdHJpbmcifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxxPXAoIiRab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57R3QuaW5pdChlLHQpLFF0LmluaXQoZSx0KX0pLEdsPXAoIiRab2RHVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj10bCkscS5pbml0KGUsdCl9KSxRbD1wKCIkWm9kVVVJRCIsKGUsdCk9PntpZih0LnZlcnNpb24pe2NvbnN0IG89e3YxOjEsdjI6Mix2MzozLHY0OjQsdjU6NSx2Njo2LHY3Ojcsdjg6OH1bdC52ZXJzaW9uXTtpZihvPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVVUlEIHZlcnNpb246ICIke3QudmVyc2lvbn0iYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXJ0KG8pKX1lbHNlIHQucGF0dGVybj8/KHQucGF0dGVybj1ydCgpKTtxLmluaXQoZSx0KX0pLFlsPXAoIiRab2RFbWFpbCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49bmwpLHEuaW5pdChlLHQpfSksT3M9MSxadD0yO2Z1bmN0aW9uIFJzKGUpe3RyeXtyZXR1cm4gdHlwZW9mIFVSTDwidSImJnR5cGVvZiBVUkwuY2FuUGFyc2U9PSJmdW5jdGlvbiI/VVJMLmNhblBhcnNlKGUpOihuZXcgVVJMKGUpLCEwKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gWGwoZSx0KXtyZXR1cm4hKCJub3JtYWxpemUiaW4gdCkmJiEoImhvc3RuYW1lImluIHQpJiYhKCJwcm90b2NvbCJpbiB0KT9ScyhlKXx8WnQ6ZWQoZSx0KX1mdW5jdGlvbiBlZChlLHQpe2lmKCF0Lm5vcm1hbGl6ZSYmdC5wcm90b2NvbD8uc291cmNlPT09U3Muc291cmNlJiYhL15odHRwcz86XC9cLy9pLnRlc3QoZSkpcmV0dXJuIE9zO3RyeXtpZih0eXBlb2YgVVJMPCJ1Iil7Y29uc3Qgbj1VUkw7aWYodHlwZW9mIG4ucGFyc2U9PSJmdW5jdGlvbiIpcmV0dXJuIG4ucGFyc2UoZSk/P1p0fXJldHVybiBuZXcgVVJMKGUpfWNhdGNoe3JldHVybiBadH19Y29uc3QgJG09L1tcdFxuXHJdL2c7ZnVuY3Rpb24gUXIoZSl7cmV0dXJuIGUucmVwbGFjZSgkbSwiIil9ZnVuY3Rpb24gdGQoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5ob3N0bmFtZSl9ZnVuY3Rpb24gbmQoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5wcm90b2NvbC5lbmRzV2l0aCgiOiIpP2UucHJvdG9jb2wuc2xpY2UoMCwtMSk6ZS5wcm90b2NvbCl9Y29uc3Qgb2Q9cCgiJFpvZFVSTCIsKGUsdCk9PntxLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3RyeXtjb25zdCBvPW4udmFsdWUudHJpbSgpLHI9WGwobyx0KTtpZihyPT09T3Mpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBVUkwgZm9ybWF0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09WnQpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KTtyZXR1cm59aWYocj09PSEwKXtuLnZhbHVlPVFyKG8pO3JldHVybn10Lmhvc3RuYW1lJiYhdGQocix0Lmhvc3RuYW1lKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIGhvc3RuYW1lIixwYXR0ZXJuOnQuaG9zdG5hbWUuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksdC5wcm90b2NvbCYmIW5kKHIsdC5wcm90b2NvbCkmJm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBwcm90b2NvbCIscGF0dGVybjp0LnByb3RvY29sLnNvdXJjZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLG4udmFsdWU9dC5ub3JtYWxpemU/ci5ocmVmOlFyKG8pO3JldHVybn1jYXRjaHtuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fX0pLHJkPXAoIiRab2RFbW9qaSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49cmwoKSkscS5pbml0KGUsdCl9KSxzZD1wKCIkWm9kTmFub0lEIiwoZSx0KT0+e2lmKHQubGVuZ3RoIT09dm9pZCAwJiYoIU51bWJlci5pc0ludGVnZXIodC5sZW5ndGgpfHx0Lmxlbmd0aDwxKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmFub2lkIGxlbmd0aDogJHt0Lmxlbmd0aH1gKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dC5sZW5ndGg9PT12b2lkIDA/WXU6WHUodC5sZW5ndGgpKSxxLmluaXQoZSx0KX0pLGlkPXAoIiRab2RDVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1KdSkscS5pbml0KGUsdCl9KSxhZD1wKCIkWm9kQ1VJRDIiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUt1KSxxLmluaXQoZSx0KX0pLGNkPXAoIiRab2RVTElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1XdSkscS5pbml0KGUsdCl9KSx1ZD1wKCIkWm9kWElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1HdSkscS5pbml0KGUsdCl9KSxsZD1wKCIkWm9kS1NVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVF1KSxxLmluaXQoZSx0KX0pLGRkPXAoIiRab2RJU09EYXRlVGltZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dmwodCkpLHEuaW5pdChlLHQpfSkscGQ9cCgiJFpvZElTT0RhdGUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW1sKSxxLmluaXQoZSx0KX0pLGZkPXAoIiRab2RJU09UaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1nbCh0KSkscS5pbml0KGUsdCl9KSxoZD1wKCIkWm9kSVNPRHVyYXRpb24iLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWVsKSxxLmluaXQoZSx0KX0pLG1kPXAoIiRab2RJUHY0IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1zbCkscS5pbml0KGUsdCl9KSxTbT0vXlswLTlhLWZBLUY6Ll0rJC87ZnVuY3Rpb24gQXMoZSl7cmV0dXJuIFNtLnRlc3QoZSk/UnMoYGh0dHA6Ly9bJHtlfV1gKTohMX1jb25zdCBnZD1wKCIkWm9kSVB2NiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49aWwpLHEuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57QXMobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImlwdjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksdmQ9cCgiJFpvZE1BQyIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49YWwodC5kZWxpbWl0ZXIpKSxxLmluaXQoZSx0KX0pLGJkPXAoIiRab2RDSURSdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWNsKSxxLmluaXQoZSx0KX0pO2Z1bmN0aW9uIF9kKGUpe2NvbnN0IHQ9ZS5zcGxpdCgiLyIpO2lmKHQubGVuZ3RoIT09MilyZXR1cm4hMTtjb25zdFtuLG9dPXQ7aWYoIW8pcmV0dXJuITE7Y29uc3Qgcj1OdW1iZXIobyk7cmV0dXJuYCR7cn1gIT09b3x8cjwwfHxyPjEyOD8hMTpBcyhuKX1jb25zdCB5ZD1wKCIkWm9kQ0lEUnY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj11bCkscS5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntfZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiY2lkcnY2IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIFpzKGUpe2lmKGU9PT0iIilyZXR1cm4hMDtpZigvXHMvLnRlc3QoZSl8fGUubGVuZ3RoJTQhPT0wKXJldHVybiExO3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19Y29uc3Qgd2Q9L15bMC05YS16QS1aKy9dKj17MCwyfSQvLGtkPXAoIiRab2RCYXNlNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXdkKSxxLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e1pzKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksTnM9L15bQS1aYS16MC05Xy1dKiQvO2Z1bmN0aW9uICRkKGUpe2lmKCFOcy50ZXN0KGUpKXJldHVybiExO2NvbnN0IHQ9ZS5yZXBsYWNlKC9bLV9dL2csbz0+bz09PSItIj8iKyI6Ii8iKSxuPXQucGFkRW5kKE1hdGguY2VpbCh0Lmxlbmd0aC80KSo0LCI9Iik7cmV0dXJuIFpzKG4pfWNvbnN0IFNkPXAoIiRab2RCYXNlNjRVUkwiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPU5zKSxxLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+eyRkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjR1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksemQ9cCgiJFpvZEUxNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXBsKSxxLmluaXQoZSx0KX0pLHptPS9bLSBdL2c7ZnVuY3Rpb24gVG0oZSl7bGV0IHQ9ZS5sZW5ndGgsbj0xLG89MDtmb3IoO3Q7KXtjb25zdCByPWUuY2hhckNvZGVBdCgtLXQpLTQ4O25ePTEsbys9bj9bMCwyLDQsNiw4LDEsMyw1LDcsOV1bcl06cn1yZXR1cm4gbyUxMD09PTB9ZnVuY3Rpb24gVGQoZSl7cmV0dXJuIHpzLnRlc3QoZSk/VG0oZS5yZXBsYWNlKHptLCIiKSk6ITF9Y29uc3QgSWQ9cCgiJFpvZENyZWRpdENhcmQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXpzKSxxLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e1RkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBJbShlKXtsZXQgdD0wO2NvbnN0IG49ZS5sZW5ndGg7Zm9yKGxldCBvPTQ7bzxuO28rKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobyk7dD0ocj49NjU/dCoxMDArKHItNTUpOnQqMTArKHItNDgpKSU5N31mb3IobGV0IG89MDtvPDQ7bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fXJldHVybiB0PT09MX1mdW5jdGlvbiBQZChlKXtyZXR1cm4gVHMudGVzdChlKT9JbShlKTohMX1jb25zdCB4ZD1wKCIkWm9kSUJBTiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49VHMpLHEuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57UGQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImliYW4iLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gRWQoZSx0PW51bGwpe3RyeXtjb25zdCBuPWUuc3BsaXQoIi4iKTtpZihuLmxlbmd0aCE9PTMpcmV0dXJuITE7Y29uc3Rbb109bjtpZighbylyZXR1cm4hMTtjb25zdCByPUpTT04ucGFyc2UoYXRvYihvKSk7cmV0dXJuISgidHlwImluIHImJnI/LnR5cCE9PSJKV1QifHwhci5hbGd8fHQmJighKCJhbGciaW4gcil8fHIuYWxnIT09dCkpfWNhdGNoe3JldHVybiExfX1jb25zdCBDZD1wKCIkWm9kSldUIiwoZSx0KT0+e3EuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57RWQobi52YWx1ZSx0LmFsZyl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6Imp3dCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxPZD1wKCIkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0IiwoZSx0KT0+e3EuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dC5mbihuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdCxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGpzPXAoIiRab2ROdW1iZXIiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49RW8sZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9TnVtYmVyKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWU7aWYodHlwZW9mIHI9PSJudW1iZXIiJiYhTnVtYmVyLmlzTmFOKHIpJiZOdW1iZXIuaXNGaW5pdGUocikpcmV0dXJuIG47Y29uc3Qgcz10eXBlb2Ygcj09Im51bWJlciI/TnVtYmVyLmlzTmFOKHIpPyJOYU4iOk51bWJlci5pc0Zpbml0ZShyKT92b2lkIDA6U3RyaW5nKHIpOnZvaWQgMDtyZXR1cm4gbi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im51bWJlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZSwuLi5zP3tyZWNlaXZlZDpzfTp7fX0pLG59fSksUmQ9cCgiJFpvZE51bWJlckZvcm1hdCIsKGUsdCk9Pnt4bC5pbml0KGUsdCksanMuaW5pdChlLHQpfSksTXM9cCgiJFpvZEJvb2xlYW4iLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49a2wsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9ISFuLnZhbHVlfWNhdGNoe31jb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0iYm9vbGVhbiJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJib29sZWFuIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxxcz1wKCIkWm9kQmlnSW50IiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXlsLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPUJpZ0ludChuLnZhbHVlKX1jYXRjaHt9cmV0dXJuIHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJpZ2ludCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG59fSksQWQ9cCgiJFpvZEJpZ0ludEZvcm1hdCIsKGUsdCk9PntFbC5pbml0KGUsdCkscXMuaW5pdChlLHQpfSksWmQ9cCgiJFpvZFN5bWJvbCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0ic3ltYm9sInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InN5bWJvbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksTmQ9cCgiJFpvZFVuZGVmaW5lZCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1TbCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW3ZvaWQgMF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI+InUifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoidW5kZWZpbmVkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxqZD1wKCIkWm9kTnVsbCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj0kbCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW251bGxdKSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHI9PT1udWxsfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVsbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksTWQ9cCgiJFpvZEFueSIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9bj0+bn0pLHFkPXAoIiRab2RVbmtub3duIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksRGQ9cCgiJFpvZE5ldmVyIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJuZXZlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pfSksTGQ9cCgiJFpvZFZvaWQiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ2b2lkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxVZD1wKCIkWm9kRGF0ZSIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1uZXcgRGF0ZShuLnZhbHVlKX1jYXRjaHt9Y29uc3Qgcj1uLnZhbHVlLHM9ciBpbnN0YW5jZW9mIERhdGU7cmV0dXJuIHMmJiFOdW1iZXIuaXNOYU4oci5nZXRUaW1lKCkpfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiZGF0ZSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLC4uLnM/e3JlY2VpdmVkOiJJbnZhbGlkIERhdGUifTp7fSxpbnN0OmV9KSxufX0pO2Z1bmN0aW9uIFJjKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZmUobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1jb25zdCBIZD1wKCIkWm9kQXJyYXkiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1vZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYXJyYXkiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO28udmFsdWU9bj9uLmFsbG9jKGUsbyxBcnJheShzLmxlbmd0aCkscik6QXJyYXkocy5sZW5ndGgpO2NvbnN0IGk9W10sYT1yPy5hYm9ydEVhcmx5O2ZvcihsZXQgYz0wO2M8cy5sZW5ndGg7YysrKXtjb25zdCB1PXNbY10sbD10LmVsZW1lbnQuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSlpLnB1c2gobC50aGVuKG09PlJjKG0sbyxjKSkpO2Vsc2UgaWYoUmMobCxvLGMpLGEmJmwuaXNzdWVzLmxlbmd0aCE9PTAmJnNlKGwpKWJyZWFrfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIGNvKGUsdCxuLG8scixzKXtjb25zdCBpPW4gaW4gbyxhPXM9PT0ib3B0aW9uYWwiO2lmKCEoIWkmJmEmJnI9PT0ib3B0aW9uYWwiKSl7aWYoZS5pc3N1ZXMubGVuZ3RoKXtpZihyIT09dm9pZCAwJiZhJiYhaSlyZXR1cm47dC5pc3N1ZXMucHVzaCguLi5mZShuLGUuaXNzdWVzKSl9aWYoIWkmJnI9PT12b2lkIDApe2UuaXNzdWVzLmxlbmd0aHx8dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OnZvaWQgMCxwYXRoOltuXX0pO3JldHVybn1lLnZhbHVlPT09dm9pZCAwPyhpfHxyPT09ImRlZmF1bHRlZCImJiFhKSYmKHQudmFsdWVbbl09dm9pZCAwKTp0LnZhbHVlW25dPWUudmFsdWV9fWNvbnN0IFBtPVtdO2Z1bmN0aW9uIEZkKGUpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZS5zaGFwZSksbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUuc2hhcGUpLG89bi5sZW5ndGg/bjpQbSxyPW8ubGVuZ3RoP1suLi50LC4uLm9dOnQ7Zm9yKGNvbnN0IGkgb2YgcilpZighZS5zaGFwZT8uW2ldPy5fem9kPy50cmFpdHM/LmhhcygiJFpvZFR5cGUiKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCBhdCBrZXkgIiR7U3RyaW5nKGkpfSI6IGV4cGVjdGVkIGEgWm9kIHNjaGVtYWApO2NvbnN0IHM9enUoZS5zaGFwZSk7cmV0dXJuey4uLmUsYWxsS2V5czpyLHN5bWJvbEtleXM6byxrZXlTZXQ6bmV3IFNldCh0KSxudW1LZXlzOnQubGVuZ3RoLG9wdGlvbmFsS2V5czpuZXcgU2V0KHMpfX1mdW5jdGlvbiBCZChlLHQsbixvLHIscyxpKXtjb25zdCBhPVtdLGM9ci5rZXlTZXQsdT1yLmNhdGNoYWxsLl96b2QsbD11LmRlZi50eXBlLG09dS5vcHRpbixiPXUub3B0b3V0O2xldCBnPTA7Zm9yKGNvbnN0IF8gaW4gdCl7aWYoaSYmbi5pc3N1ZXMubGVuZ3RoIT09Zyl7aWYoc2UobixnKSlicmVhaztnPW4uaXNzdWVzLmxlbmd0aH1pZihjLmhhcyhfKSljb250aW51ZTtpZihfPT09Il9fcHJvdG9fXyIpe2w9PT0ibmV2ZXIiJiZhLnB1c2goXyk7Y29udGludWV9aWYobD09PSJuZXZlciIpe2EucHVzaChfKTtjb250aW51ZX1jb25zdCB3PXUucnVuKHt2YWx1ZTp0W19dLGlzc3VlczpbXX0sbyk7dyBpbnN0YW5jZW9mIFByb21pc2U/ZS5wdXNoKHcudGhlbihTPT5jbyhTLG4sXyx0LG0sYikpKTpjbyh3LG4sXyx0LG0sYil9cmV0dXJuIGEubGVuZ3RoJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsa2V5czphLGlucHV0OnQsaW5zdDpzLGNvbnRpbnVlOiEwfSksZS5sZW5ndGg/UHJvbWlzZS5hbGwoZSkudGhlbigoKT0+bik6bn1jb25zdCBWZD1wKCIkWm9kT2JqZWN0IiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCJzaGFwZSIpLG89bj8uZ2V0P24uZ2V0LnJhdzp0LnNoYXBlPz97fTtpZihvKXtjb25zdCB1PSgpPT57Y29uc3QgbD17Li4ub307cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFwZSIse3ZhbHVlOmx9KSx1LnJhdz1sLGx9O3UucmF3PW8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7Z2V0OnV9KX1jb25zdCByPVV0KCgpPT5GZCh0KSk7eChlLCJwcm9wVmFsdWVzIix1PT57Y29uc3QgbD11LmRlZi5zaGFwZSxtPXt9O2Zvcihjb25zdCBiIGluIGwpe2NvbnN0IGc9bFtiXS5fem9kO2lmKGcudmFsdWVzKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxiKXx8S2UobSxiLG5ldyBTZXQpO2Zvcihjb25zdCBfIG9mIGcudmFsdWVzKW1bYl0uYWRkKF8pO2cub3B0aW4hPT12b2lkIDAmJm1bYl0uYWRkKHZvaWQgMCl9fXJldHVybiBtfSk7Y29uc3Qgcz1udCxpPXQuY2F0Y2hhbGw7bGV0IGE7Y29uc3QgYz1vZS5tZW1vaXplcjtjPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPSh1LGwpPT57YT8/KGE9ci52YWx1ZSk7Y29uc3QgbT11LnZhbHVlO2lmKCFzKG0pKXJldHVybiB1Lmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om0saW5zdDplfSksdTt1LnZhbHVlPWM/Yy5hbGxvYyhlLHUse30sbCk6e307Y29uc3QgYj1bXSxnPWEuc2hhcGUsXz1sPy5hYm9ydEVhcmx5O2xldCB3PXUuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgUyBvZiBhLmFsbEtleXMpe2lmKF8mJnUuaXNzdWVzLmxlbmd0aCE9PXcpe2lmKHNlKHUsdykpYnJlYWs7dz11Lmlzc3Vlcy5sZW5ndGh9aWYoUz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IE89Z1tTXSxFPU8uX3pvZC5vcHRpbixGPU8uX3pvZC5vcHRvdXQscmU9Ty5fem9kLnJ1bih7dmFsdWU6bVtTXSxpc3N1ZXM6W119LGwpO3JlIGluc3RhbmNlb2YgUHJvbWlzZT9iLnB1c2gocmUudGhlbihCPT5jbyhCLHUsUyxtLEUsRikpKTpjbyhyZSx1LFMsbSxFLEYpfXJldHVybiBpP0JkKGIsbSx1LGwsci52YWx1ZSxlLF89PT0hMCk6Yi5sZW5ndGg/UHJvbWlzZS5hbGwoYikudGhlbigoKT0+dSk6dX19KSxKZD1wKCIkWm9kT2JqZWN0SklUIiwoZSx0KT0+e1ZkLmluaXQoZSx0KTtjb25zdCBuPWUuX3pvZC5wYXJzZSxvPVV0KCgpPT5GZCh0KSkscj1vZS5tZW1vaXplcixzPWc9Pntjb25zdCBfPW8udmFsdWUsdz1fLnN5bWJvbEtleXMsUz1uZXcgSmwoWyJwYXlsb2FkIiwiY3R4Il0se3NoYXBlOmcsaW5zdDplLG1lbW86cixzeW1zOnd9KSxPPUI9PmBzaGFwZVske0J9XS5fem9kLnJ1bih7IHZhbHVlOiBpbnB1dFske0J9XSwgaXNzdWVzOiBbXSB9LCBjdHgpYCxFPShCLEwpPT5gCiAgICAgICAgICBsZXQgJHtCfV9hYiA9IGZhbHNlOwogICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAke0J9Lmlzc3Vlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBjb25zdCBpc3MgPSAke0J9Lmlzc3Vlc1tpXTsKICAgICAgICAgICAgaXNzLnBhdGggPSBpc3MucGF0aCA/IFske0x9LCAuLi5pc3MucGF0aF0gOiBbJHtMfV07CiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goaXNzKTsKICAgICAgICAgICAgaWYgKGlzcy5jb250aW51ZSAhPT0gdHJ1ZSkgJHtCfV9hYiA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoJHtCfV9hYiAmJiBjdHggJiYgY3R4LmFib3J0RWFybHkpIHsKICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsKICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICAgICAgICB9YDtTLndyaXRlKCJjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7Iik7Y29uc3QgRj1PYmplY3QuY3JlYXRlKG51bGwpO2xldCByZT0wO2Zvcihjb25zdCBCIG9mIF8uYWxsS2V5cylGW0JdPWBrZXlfJHtyZSsrfWA7Uy53cml0ZShyPyJjb25zdCBuZXdSZXN1bHQgPSBtZW1vLmFsbG9jKGluc3QsIHBheWxvYWQsIHt9LCBjdHgpOyI6ImNvbnN0IG5ld1Jlc3VsdCA9IHt9OyIpO2Zvcihjb25zdCBCIG9mIF8uYWxsS2V5cyl7aWYoQj09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IEw9RltCXSx3ZT10eXBlb2YgQj09InN5bWJvbCI/YHN5bXNbJHt3LmluZGV4T2YoQil9XWA6d3UoQiksTnI9YCR7d2V9IGluIGlucHV0YCxUYz1nW0JdLGpyPVRjPy5fem9kPy5vcHRpbixJYz1qciE9PXZvaWQgMCxuaD1UYz8uX3pvZD8ub3B0b3V0PT09Im9wdGlvbmFsIjtpZihTLndyaXRlKGBjb25zdCAke0x9ID0gJHtPKHdlKX07YCksSWMmJm5oKXtjb25zdCBvaD1qcj09PSJvcHRpb25hbCI/YCR7TH1fcHJlc2VudGA6YCR7TH0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke0x9X3ByZXNlbnRgO1Mud3JpdGUoYAogICAgICAgIGNvbnN0ICR7TH1fcHJlc2VudCA9ICR7TnJ9OwogICAgICAgIGlmICghJHtMfS5pc3N1ZXMubGVuZ3RoIHx8ICR7TH1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7TH0uaXNzdWVzLmxlbmd0aCkgeyR7RShMLHdlKX0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoJHtvaH0pIHsKICAgICAgICAgICAgbmV3UmVzdWx0WyR7d2V9XSA9ICR7TH0udmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgYCl9ZWxzZSBJYz8oUy53cml0ZShgCiAgICAgICAgaWYgKCR7TH0uaXNzdWVzLmxlbmd0aCkgeyR7RShMLHdlKX0KICAgICAgICB9CiAgICAgIGApLGpyPT09ImRlZmF1bHRlZCI/Uy53cml0ZShgbmV3UmVzdWx0WyR7d2V9XSA9ICR7TH0udmFsdWU7YCk6Uy53cml0ZShgCiAgICAgICAgaWYgKCR7TH0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke05yfSkgewogICAgICAgICAgbmV3UmVzdWx0WyR7d2V9XSA9ICR7TH0udmFsdWU7CiAgICAgICAgfQogICAgICBgKSk6Uy53cml0ZShgCiAgICAgICAgY29uc3QgJHtMfV9wcmVzZW50ID0gJHtOcn07CiAgICAgICAgaWYgKCR7TH0uaXNzdWVzLmxlbmd0aCkgeyR7RShMLHdlKX0KICAgICAgICB9CiAgICAgICAgaWYgKCEke0x9X3ByZXNlbnQgJiYgISR7TH0uaXNzdWVzLmxlbmd0aCkgewogICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7CiAgICAgICAgICAgIGNvZGU6ICJpbnZhbGlkX3R5cGUiLAogICAgICAgICAgICBleHBlY3RlZDogIm5vbm9wdGlvbmFsIiwKICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCwKICAgICAgICAgICAgcGF0aDogWyR7d2V9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7TH1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7d2V9XSA9ICR7TH0udmFsdWU7CiAgICAgICAgfQoKICAgICAgYCl9cmV0dXJuIFMud3JpdGUoInBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7IiksUy53cml0ZSgicmV0dXJuIHBheWxvYWQ7IiksUy5jb21waWxlKCl9O2xldCBpO2NvbnN0IGE9bnQsYz0hb2Uuaml0bGVzcyxsPWMmJiR1LnZhbHVlLG09dC5jYXRjaGFsbDtsZXQgYjtlLl96b2QucGFyc2U9KGcsXyk9PntiPz8oYj1vLnZhbHVlKTtjb25zdCB3PWcudmFsdWU7cmV0dXJuIGEodyk/YyYmbCYmXz8uYXN5bmM9PT0hMSYmXy5qaXRsZXNzIT09ITA/KGl8fChpPXModC5zaGFwZSkpLGc9aShnLF8pLG0/QmQoW10sdyxnLF8sYixlLF8/LmFib3J0RWFybHk9PT0hMCk6Zyk6bihnLF8pOihnLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OncsaW5zdDplfSksZyl9fSk7ZnVuY3Rpb24gQWMoZSx0LG4sbyl7Zm9yKGNvbnN0IHMgb2YgZSlpZihzLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiB0LnZhbHVlPXMudmFsdWUsdDtjb25zdCByPWUuZmlsdGVyKHM9PiFzZShzKSk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1yWzBdLnZhbHVlLHJbMF0pOih0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGk9PmdlKGksbyxKKCkpKSl9KSx0KX1jb25zdCBPbz1wKCIkWm9kVW5pb24iLChlLHQpPT57ei5pbml0KGUsdCkseChlLCJvcHRpbiIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiKT8iZGVmYXVsdGVkIjpvLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluIT09dm9pZCAwKT8ib3B0aW9uYWwiOnZvaWQgMCkseChlLCJvcHRvdXQiLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIik/Im9wdGlvbmFsIjp2b2lkIDApLHgoZSwidmFsdWVzIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QudmFsdWVzKSlyZXR1cm4gbmV3IFNldChvLmRlZi5vcHRpb25zLmZsYXRNYXAocj0+QXJyYXkuZnJvbShyLl96b2QudmFsdWVzKSkpfSkseChlLCJwYXR0ZXJuIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QucGF0dGVybikpe2NvbnN0IHI9by5kZWYub3B0aW9ucy5tYXAocz0+cy5fem9kLnBhdHRlcm4pO3JldHVybiBuZXcgUmVnRXhwKGBeKCR7ci5tYXAocz0+T2Uocy5zb3VyY2UpKS5qb2luKCJ8Iil9KSRgKX19KTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7aWYoYyBpbnN0YW5jZW9mIFByb21pc2UpaS5wdXNoKGMpLHM9ITA7ZWxzZXtpZihjLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiBjO2kucHVzaChjKX19cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5BYyhhLG8sZSxyKSk6QWMoaSxvLGUscil9fSk7ZnVuY3Rpb24gWmMoZSx0LG4sbyl7Y29uc3Qgcj1bXTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdLmlzc3Vlcy5sZW5ndGg9PT0wJiZyLnB1c2gocyk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1lW3JbMF1dLnZhbHVlLHQpOihyLmxlbmd0aD09PTA/dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOmUubWFwKHM9PnMuaXNzdWVzLm1hcChpPT5nZShpLG8sSigpKSkpfSk6dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOltdLGluY2x1c2l2ZTohMSxtYXRjaGVzOnJ9KSx0KX1jb25zdCBLZD1wKCIkWm9kWG9yIiwoZSx0KT0+e09vLmluaXQoZSx0KSx0LmluY2x1c2l2ZT0hMTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7YyBpbnN0YW5jZW9mIFByb21pc2U/KGkucHVzaChjKSxzPSEwKTppLnB1c2goYyl9cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5aYyhhLG8sZSxyKSk6WmMoaSxvLGUscil9fSk7ZnVuY3Rpb24gRHMoZSx0KXtjb25zdCBuPWUuX3pvZDtsZXQgbz1uLmJhZy5vcHRpb25zTWFwO298fChvPVdkKG4uZGVmKSxuLmJhZy5vcHRpb25zTWFwPW8pO2NvbnN0IHI9by5nZXQodCk7aWYocj09PW51bGwpdGhyb3cgbmV3IEVycm9yKGBBbWJpZ3VvdXMgZGlzY3JpbWluYXRvciB2YWx1ZSAiJHtTdHJpbmcodCl9ImApO3JldHVybiByfWZ1bmN0aW9uIFdkKGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IoY29uc3QgbiBvZiBlLm9wdGlvbnMpe2NvbnN0IG89bi5fem9kLnByb3BWYWx1ZXM/LltlLmRpc2NyaW1pbmF0b3JdO2lmKCFvfHxvLnNpemU9PT0wKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtlLm9wdGlvbnMuaW5kZXhPZihuKX0iYCk7Zm9yKGNvbnN0IHIgb2YgbylpZih0LmhhcyhyKSl7aWYociE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyhyKX0iYCk7dC5zZXQocixudWxsKX1lbHNlIHQuc2V0KHIsbil9cmV0dXJuIHR9Y29uc3QgR2Q9cCgiJFpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9Pnt0LmluY2x1c2l2ZT0hMSxPby5pbml0KGUsdCk7Y29uc3Qgbj1lLl96b2QucGFyc2U7eChlLCJwcm9wVmFsdWVzIixyPT57Y29uc3Qgcz17fTtsZXQgaT0wO2Zvcihjb25zdCBhIG9mIHIuZGVmLm9wdGlvbnMpe2NvbnN0IGM9YS5fem9kLnByb3BWYWx1ZXM7aWYoIWN8fE9iamVjdC5rZXlzKGMpLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3IuZGVmLm9wdGlvbnMuaW5kZXhPZihhKX0iYCk7Y1tyLmRlZi5kaXNjcmltaW5hdG9yXT8uaGFzKHZvaWQgMCkmJmkrKztmb3IoY29uc3RbdSxsXW9mIE9iamVjdC5lbnRyaWVzKGMpKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocyx1KXx8S2Uocyx1LG5ldyBTZXQpO2Zvcihjb25zdCBtIG9mIGwpc1t1XS5hZGQobSl9fXJldHVybiFyLmRlZi51bmlvbkZhbGxiYWNrJiZpPjEmJnNbci5kZWYuZGlzY3JpbWluYXRvcl0/LmRlbGV0ZSh2b2lkIDApLHN9KSx0Lm9wdGlvbnMuZm9yRWFjaCgocixzKT0+e2NvbnN0IGk9dm8oci5fem9kLmRlZik7aWYoaSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHQuZGlzY3JpbWluYXRvcikpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3N9ImApfSk7Y29uc3Qgbz1VdCgoKT0+V2QodCkpO2UuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGk9ci52YWx1ZTtpZighbnQoaSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6Im9iamVjdCIsaW5wdXQ6aSxpbnN0OmV9KSxyO2NvbnN0IGE9aT8uW3QuZGlzY3JpbWluYXRvcl0sYz1vLnZhbHVlLmdldChhKTtyZXR1cm4gYyYmKGEhPT12b2lkIDB8fHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIik/Yy5fem9kLnJ1bihyLHMpOnQudW5pb25GYWxsYmFja3x8cy5kaXJlY3Rpb249PT0iYmFja3dhcmQiP24ocixzKTooci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsZXJyb3JzOltdLG5vdGU6Ik5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3IiLGRpc2NyaW1pbmF0b3I6dC5kaXNjcmltaW5hdG9yLG9wdGlvbnM6QXJyYXkuZnJvbShvLnZhbHVlLmtleXMoKSkuZmlsdGVyKHU9Pm8udmFsdWUuZ2V0KHUpIT09bnVsbCksaW5wdXQ6aSxwYXRoOlt0LmRpc2NyaW1pbmF0b3JdLGluc3Q6ZX0pLHIpfX0pLFFkPXAoIiRab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlLHM9dC5sZWZ0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyksaT10LnJpZ2h0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlfHxpIGluc3RhbmNlb2YgUHJvbWlzZT9Qcm9taXNlLmFsbChbcyxpXSkudGhlbigoW2MsdV0pPT5OYyhuLGMsdSkpOk5jKG4scyxpKX19KTtmdW5jdGlvbiB1byhlLHQpe2lmKGU9PT10KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKGUgaW5zdGFuY2VvZiBEYXRlJiZ0IGluc3RhbmNlb2YgRGF0ZSYmK2U9PSt0KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKEFlKGUpJiZBZSh0KSl7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KSxvPU9iamVjdC5rZXlzKGUpLmZpbHRlcihzPT5uLmluZGV4T2YocykhPT0tMSkscj17Li4uZSwuLi50fTtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwiX19wcm90b19fIikmJmRlbGV0ZSByLl9fcHJvdG9fXztmb3IoY29uc3QgcyBvZiBvKXtpZihzPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgaT11byhlW3NdLHRbc10pO2lmKCFpLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbcywuLi5pLm1lcmdlRXJyb3JQYXRoXX07cltzXT1pLmRhdGF9cmV0dXJue3ZhbGlkOiEwLGRhdGE6cn19aWYoQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheSh0KSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119O2NvbnN0IG49W107Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2NvbnN0IHI9ZVtvXSxzPXRbb10saT11byhyLHMpO2lmKCFpLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbbywuLi5pLm1lcmdlRXJyb3JQYXRoXX07bi5wdXNoKGkuZGF0YSl9cmV0dXJue3ZhbGlkOiEwLGRhdGE6bn19cmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltdfX1mdW5jdGlvbiBOYyhlLHQsbil7Y29uc3Qgbz1uZXcgTWFwO2xldCByO2NvbnN0IHM9bmV3IE1hcCxpPSh1LGwpPT57bGV0IG07aWYodS5jb2RlPT09InVucmVjb2duaXplZF9rZXlzIiYmIXUucGF0aD8ubGVuZ3RoKXI/PyhyPXUpLG09dS5rZXlzO2Vsc2UgaWYodS5jb2RlPT09ImludmFsaWRfa2V5IiYmdS5vcmlnaW49PT0icmVjb3JkIiYmdS5wYXRoPy5sZW5ndGg9PT0xKXtjb25zdCBiPVN0cmluZyh1LnBhdGhbMF0pO3MuaGFzKGIpfHxzLnNldChiLHUpLG09W2JdfWVsc2UgcmV0dXJuITE7Zm9yKGNvbnN0IGIgb2YgbSlvLmhhcyhiKXx8by5zZXQoYix7fSksby5nZXQoYilbbF09ITA7cmV0dXJuITB9O2Zvcihjb25zdCB1IG9mIHQuaXNzdWVzKWkodSwibCIpfHxlLmlzc3Vlcy5wdXNoKHUpO2Zvcihjb25zdCB1IG9mIG4uaXNzdWVzKWkodSwiciIpfHxlLmlzc3Vlcy5wdXNoKHUpO2NvbnN0IGE9Wy4uLm9dLmZpbHRlcigoWyx1XSk9PnUubCYmdS5yKS5tYXAoKFt1XSk9PnUpO2lmKGEubGVuZ3RoKXtjb25zdCB1PXI/YS5maWx0ZXIobD0+ci5rZXlzLmluY2x1ZGVzKGwpKTpbXTt1Lmxlbmd0aCYmZS5pc3N1ZXMucHVzaCh7Li4ucixrZXlzOnV9KTtmb3IoY29uc3QgbCBvZiBhKSF1LmluY2x1ZGVzKGwpJiZzLmhhcyhsKSYmZS5pc3N1ZXMucHVzaChzLmdldChsKSl9Y29uc3QgYz11byh0LnZhbHVlLG4udmFsdWUpO2lmKCFjLnZhbGlkKXtpZihzZShlKSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYFVubWVyZ2FibGUgaW50ZXJzZWN0aW9uLiBFcnJvciBwYXRoOiAke0pTT04uc3RyaW5naWZ5KGMubWVyZ2VFcnJvclBhdGgpfWApfXJldHVybiBlLnZhbHVlPWMuZGF0YSxlfWNvbnN0IExzPXAoIiRab2RUdXBsZSIsKGUsdCk9Pnt6LmluaXQoZSx0KTtjb25zdCBuPXQuaXRlbXMsbz1vZS5tZW1vaXplcjtvPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiByLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGluc3Q6ZSxleHBlY3RlZDoidHVwbGUiLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxyO3IudmFsdWU9bz9vLmFsbG9jKGUscixbXSxzKTpbXTtjb25zdCBhPVtdLGM9amMobiwib3B0aW4iKSx1PWpjKG4sIm9wdG91dCIpO2lmKCF0LnJlc3Qpe2lmKGkubGVuZ3RoPGMpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19zbWFsbCIsbWluaW11bTpjLGluY2x1c2l2ZTohMCxpbnB1dDppLGluc3Q6ZSxvcmlnaW46ImFycmF5In0pLHI7aS5sZW5ndGg+bi5sZW5ndGgmJnIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19iaWciLG1heGltdW06bi5sZW5ndGgsaW5jbHVzaXZlOiEwLGlucHV0OmksaW5zdDplLG9yaWdpbjoiYXJyYXkifSl9Y29uc3QgbD1uZXcgQXJyYXkobi5sZW5ndGgpLG09dC5yZXN0P3M/LmFib3J0RWFybHk6dm9pZCAwO2xldCBiPSExO2ZvcihsZXQgZz0wO2c8bi5sZW5ndGg7ZysrKXtjb25zdCBfPW5bZ10uX3pvZC5ydW4oe3ZhbHVlOmlbZ10saXNzdWVzOltdfSxzKTtfIGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goXy50aGVuKHc9PntsW2ddPXd9KSk6KGxbZ109XyxtJiYhYiYmXy5pc3N1ZXMubGVuZ3RoJiYoYj1zZShfKSkpfWlmKHQucmVzdCYmIWIpe2xldCBnPW4ubGVuZ3RoLTE7Y29uc3QgXz1pLnNsaWNlKG4ubGVuZ3RoKTtsZXQgdz1yLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IFMgb2YgXyl7aWYobSYmci5pc3N1ZXMubGVuZ3RoIT09dyl7aWYoc2Uocix3KSlicmVhazt3PXIuaXNzdWVzLmxlbmd0aH1nKys7Y29uc3QgTz10LnJlc3QuX3pvZC5ydW4oe3ZhbHVlOlMsaXNzdWVzOltdfSxzKTtPIGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goTy50aGVuKEU9Pk1jKEUscixnKSkpOk1jKE8scixnKX19cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9PnFjKGwscixuLGksdSkpOnFjKGwscixuLGksdSl9fSk7ZnVuY3Rpb24gamMoZSx0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZighKHQ9PT0ib3B0aW4iP2Vbbl0uX3pvZC5vcHRpbiE9PXZvaWQgMDplW25dLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIikpcmV0dXJuIG4rMTtyZXR1cm4gMH1mdW5jdGlvbiBNYyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLmZlKG4sZS5pc3N1ZXMpKSx0LnZhbHVlW25dPWUudmFsdWV9ZnVuY3Rpb24gcWMoZSx0LG4sbyxyKXtmb3IobGV0IHM9MDtzPG4ubGVuZ3RoO3MrKyl7Y29uc3QgaT1lW3NdLGE9czxvLmxlbmd0aDtpZighYSYmcz49ciYmbltzXS5fem9kLm9wdGluPT09Im9wdGlvbmFsIil7dC52YWx1ZS5sZW5ndGg9czticmVha31pZihpLmlzc3Vlcy5sZW5ndGgpe2lmKCFhJiZzPj1yKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfXQuaXNzdWVzLnB1c2goLi4uZmUocyxpLmlzc3VlcykpfXQudmFsdWVbc109aS52YWx1ZX1mb3IobGV0IHM9dC52YWx1ZS5sZW5ndGgtMTtzPj1vLmxlbmd0aCYmKG5bc10uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiJiZ0LnZhbHVlW3NdPT09dm9pZCAwKTtzLS0pdC52YWx1ZS5sZW5ndGg9cztyZXR1cm4gdH1jb25zdCBZZD1wKCIkWm9kUmVjb3JkIiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49b2UubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighQWUocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJyZWNvcmQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGk9W10sYT10LmtleVR5cGUuX3pvZC52YWx1ZXM7aWYoYSYmIXQucGFydGlhbCl7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2NvbnN0IGM9bmV3IFNldDtmb3IoY29uc3QgbCBvZiBhKWlmKHR5cGVvZiBsPT0ic3RyaW5nInx8dHlwZW9mIGw9PSJudW1iZXIifHx0eXBlb2YgbD09InN5bWJvbCIpe2lmKGMuYWRkKHR5cGVvZiBsPT0ibnVtYmVyIj9sLnRvU3RyaW5nKCk6bCksbD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IG09dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7aWYobSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYobS5pc3N1ZXMubGVuZ3RoKXtvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczptLmlzc3Vlcy5tYXAoXz0+Z2UoXyxyLEooKSkpLGlucHV0OmwscGF0aDpbbF0saW5zdDplfSk7Y29udGludWV9Y29uc3QgYj1tLnZhbHVlO2lmKGI9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBnPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2xdLGlzc3VlczpbXX0scik7ZyBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGcudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmZlKGwsXy5pc3N1ZXMpKSxvLnZhbHVlW2JdPV8udmFsdWV9KSk6KGcuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5mZShsLGcuaXNzdWVzKSksby52YWx1ZVtiXT1nLnZhbHVlKX1sZXQgdTtmb3IoY29uc3QgbCBpbiBzKWlmKCFjLmhhcyhsKSlpZih0Lm1vZGU9PT0ibG9vc2UiKXtpZihsPT09Il9fcHJvdG9fXyIpY29udGludWU7by52YWx1ZVtsXT1zW2xdfWVsc2UgdT11Pz9bXSx1LnB1c2gobCk7dSYmdS5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6dSxjb250aW51ZTohMH0pfWVsc2V7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2xldCBjO2Zvcihjb25zdCB1IG9mIFJlZmxlY3Qub3duS2V5cyhzKSl7aWYodT09PSJfX3Byb3RvX18ifHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsdSkpY29udGludWU7bGV0IGw9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0scik7aWYobCBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYodHlwZW9mIHU9PSJzdHJpbmciJiZFby50ZXN0KHUpJiZsLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IF89dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpOdW1iZXIodSksaXNzdWVzOltdfSxyKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtfLmlzc3Vlcy5sZW5ndGg9PT0wJiYobD1fKX1pZihsLmlzc3Vlcy5sZW5ndGgpe3QubW9kZT09PSJsb29zZSI/by52YWx1ZVt1XT1zW3VdOmE/KGM9Yz8/W10sYy5wdXNoKHUpKTpvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpsLmlzc3Vlcy5tYXAoXz0+Z2UoXyxyLEooKSkpLGlucHV0OnUscGF0aDpbdV0saW5zdDplfSk7Y29udGludWV9Y29uc3QgYj1sLnZhbHVlO2lmKGI9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBnPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW3VdLGlzc3VlczpbXX0scik7ZyBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGcudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmZlKHUsXy5pc3N1ZXMpKSxvLnZhbHVlW2JdPV8udmFsdWV9KSk6KGcuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5mZSh1LGcuaXNzdWVzKSksby52YWx1ZVtiXT1nLnZhbHVlKX1jJiZjLmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czpjLGNvbnRpbnVlOiEwfSl9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSksWGQ9cCgiJFpvZE1hcCIsKGUsdCk9Pnt6LmluaXQoZSx0KTtjb25zdCBuPW9lLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgTWFwKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im1hcCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IE1hcCxyKTpuZXcgTWFwO2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgYz1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0W3UsbF1vZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT1jKXtpZihzZShvLGMpKWJyZWFrO2M9by5pc3N1ZXMubGVuZ3RofWNvbnN0IG09dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0sciksYj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6bCxpc3N1ZXM6W119LHIpO20gaW5zdGFuY2VvZiBQcm9taXNlfHxiIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goUHJvbWlzZS5hbGwoW20sYl0pLnRoZW4oKFtnLF9dKT0+e0RjKGcsXyxvLHUscyxlLHIpfSkpOkRjKG0sYixvLHUscyxlLHIpfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIERjKGUsdCxuLG8scixzLGkpe2UuaXNzdWVzLmxlbmd0aCYmKHNvLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5mZShvLGUuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoibWFwIixpbnB1dDpyLGluc3Q6cyxpc3N1ZXM6ZS5pc3N1ZXMubWFwKGE9PmdlKGEsaSxKKCkpKX0pKSx0Lmlzc3Vlcy5sZW5ndGgmJihzby5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4uZmUobyx0Lmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe29yaWdpbjoibWFwIixjb2RlOiJpbnZhbGlkX2VsZW1lbnQiLGlucHV0OnIsaW5zdDpzLGtleTpvLGlzc3Vlczp0Lmlzc3Vlcy5tYXAoYT0+Z2UoYSxpLEooKSkpfSkpLG4udmFsdWUuc2V0KGUudmFsdWUsdC52YWx1ZSl9Y29uc3QgZXA9cCgiJFpvZFNldCIsKGUsdCk9Pnt6LmluaXQoZSx0KTtjb25zdCBuPW9lLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgU2V0KSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7aW5wdXQ6cyxpbnN0OmUsZXhwZWN0ZWQ6InNldCIsY29kZToiaW52YWxpZF90eXBlIn0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IFNldCxyKTpuZXcgU2V0O2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgYz1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IHUgb2Ygcyl7aWYoYSYmby5pc3N1ZXMubGVuZ3RoIT09Yyl7aWYoc2UobyxjKSlicmVhaztjPW8uaXNzdWVzLmxlbmd0aH1jb25zdCBsPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0scik7bCBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGwudGhlbihtPT5MYyhtLG8pKSk6TGMobCxvKX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBMYyhlLHQpe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5lLmlzc3VlcyksdC52YWx1ZS5hZGQoZS52YWx1ZSl9Y29uc3QgdHA9cCgiJFpvZEVudW0iLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1Gcih0LmVudHJpZXMpLG89bmV3IFNldChuKTtlLl96b2QudmFsdWVzPW8seChlLCJwYXR0ZXJuIixyPT57Y29uc3Qgcz1GcihyLmRlZi5lbnRyaWVzKS5maWx0ZXIoaT0+c28uaGFzKHR5cGVvZiBpKSk7cmV0dXJuIG5ldyBSZWdFeHAocy5sZW5ndGg/YF4oJHtzLm1hcChpPT5UZShpLnRvU3RyaW5nKCkpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO3JldHVybiBvLmhhcyhpKXx8ci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOm4saW5wdXQ6aSxpbnN0OmV9KSxyfX0pLG5wPXAoIiRab2RMaXRlcmFsIiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0LnZhbHVlcyk7ZS5fem9kLnZhbHVlcz1uLHgoZSwicGF0dGVybiIsbz0+e2NvbnN0IHI9by5kZWYudmFsdWVzO3JldHVybiBuZXcgUmVnRXhwKHIubGVuZ3RoP2BeKCR7ci5tYXAocz0+dHlwZW9mIHM9PSJzdHJpbmciP1RlKHMpOnM/VGUocy50b1N0cmluZygpKTpTdHJpbmcocykpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7cmV0dXJuIG4uaGFzKHMpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC52YWx1ZXMsaW5wdXQ6cyxpbnN0OmV9KSxvfX0pLG9wPXAoIiRab2RGaWxlIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gciBpbnN0YW5jZW9mIEZpbGV8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJmaWxlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxycD1wKCIkWm9kVHJhbnNmb3JtIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0ib3B0aW9uYWwiLG9lLm1lbW9pemVyPy5ndWFyZChlKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFNvKGUuY29uc3RydWN0b3IubmFtZSk7Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO2lmKG8uYXN5bmMpcmV0dXJuKHIgaW5zdGFuY2VvZiBQcm9taXNlP3I6UHJvbWlzZS5yZXNvbHZlKHIpKS50aGVuKGk9PihuLnZhbHVlPWksbikpO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBSZTtyZXR1cm4gbi52YWx1ZT1yLG59fSk7ZnVuY3Rpb24gVWMoZSx0KXtyZXR1cm4gZS52YWx1ZT10Lmlzc3Vlcy5sZW5ndGg/dm9pZCAwOnQudmFsdWUsZX1jb25zdCBVcz1wKCIkWm9kT3B0aW9uYWwiLChlLHQpPT57ei5pbml0KGUsdCkseChlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxlLl96b2Qub3B0b3V0PSJvcHRpb25hbCIseChlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vLHZvaWQgMF0pOnZvaWQgMH0pLHgoZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7T2Uoby5zb3VyY2UpfSk/JGApOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG4udmFsdWU9PT12b2lkIDApe2lmKHQuaW5uZXJUeXBlLl96b2Qub3B0aW4hPT0iZGVmYXVsdGVkIilyZXR1cm4gbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5VYyhuLHMpKTpVYyhuLHIpfXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfX0pLHNwPXAoIiRab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e1VzLmluaXQoZSx0KSx4KGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSx4KGUsInBhdHRlcm4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm4pLGUuX3pvZC5wYXJzZT0obixvKT0+dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLGlwPXAoIiRab2ROdWxsYWJsZSIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbikseChlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCkseChlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtPZShvLnNvdXJjZSl9fG51bGwpJGApOnZvaWQgMH0pLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM/bmV3IFNldChbLi4ubi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzLG51bGxdKTp2b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+bi52YWx1ZT09PW51bGw/bjp0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksYXA9cCgiJFpvZERlZmF1bHQiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtpZihuLnZhbHVlPT09dm9pZCAwKXJldHVybiBuLnZhbHVlPXQuZGVmYXVsdFZhbHVlLG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+SGMocyx0KSk6SGMocix0KX19KTtmdW5jdGlvbiBIYyhlLHQpe3JldHVybiBlLnZhbHVlPT09dm9pZCAwJiYoZS52YWx1ZT10LmRlZmF1bHRWYWx1ZSksZX1jb25zdCBjcD1wKCIkWm9kUHJlZmF1bHQiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+KG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkInx8bi52YWx1ZT09PXZvaWQgMCYmKG4udmFsdWU9dC5kZWZhdWx0VmFsdWUpLHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbykpfSksdXA9cCgiJFpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e3ouaW5pdChlLHQpLHgoZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ub10uZmlsdGVyKHI9PnIhPT12b2lkIDApKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5GYyhzLGUpKTpGYyhyLGUpfX0pO2Z1bmN0aW9uIEZjKGUsdCl7cmV0dXJuIWUuaXNzdWVzLmxlbmd0aCYmZS52YWx1ZT09PXZvaWQgMCYmZS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OmUudmFsdWUsaW5zdDp0fSksZX1jb25zdCBscD1wKCIkWm9kU3VjY2VzcyIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFNvKCJab2RTdWNjZXNzIik7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cy5pc3N1ZXMubGVuZ3RoPT09MCxuKSk6KG4udmFsdWU9ci5pc3N1ZXMubGVuZ3RoPT09MCxuKX19KTtmdW5jdGlvbiBCYyhlLHQsbixvKXtyZXR1cm4gdC5pc3N1ZXMubGVuZ3RoPyhlLnZhbHVlPW4uY2F0Y2hWYWx1ZSh7Li4udCx2YWx1ZTplLnZhbHVlLGVycm9yOntpc3N1ZXM6dC5pc3N1ZXMubWFwKHI9PmdlKHIsbyxKKCkpKX0saW5wdXQ6ZS52YWx1ZX0pLGUpOihlLnZhbHVlPXQudmFsdWUsdC5tZW1vJiYoZS5tZW1vPSEwKSxlKX1jb25zdCBkcD1wKCIkWm9kQ2F0Y2giLChlLHQpPT57ei5pbml0KGUsdCkseChlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSx4KGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSx4KGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZSxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+QmMobixzLHQsbykpOkJjKG4scix0LG8pfX0pLHBwPXAoIiRab2ROYU4iLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4oKHR5cGVvZiBuLnZhbHVlIT0ibnVtYmVyInx8IU51bWJlci5pc05hTihuLnZhbHVlKSkmJm4uaXNzdWVzLnB1c2goe2lucHV0Om4udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJuYW4iLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxuKX0pLEhzPXAoIiRab2RQaXBlIiwoZSx0KT0+e3ouaW5pdChlLHQpLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcykseChlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbikseChlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCkseChlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+V24oaSx0LmluLG8pKTpXbihzLHQuaW4sbyl9Y29uc3Qgcj10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5XbihzLHQub3V0LG8pKTpXbihyLHQub3V0LG8pfX0pO2Z1bmN0aW9uIFduKGUsdCxuKXtyZXR1cm4gZS5pc3N1ZXMuc29tZShvPT5vLmNvZGUhPT0idW5yZWNvZ25pemVkX2tleXMiKT8oZS5hYm9ydGVkPSEwLGUpOnQuX3pvZC5ydW4oe3ZhbHVlOmUudmFsdWUsaXNzdWVzOmUuaXNzdWVzfSxuKX1jb25zdCBGcz1wKCIkWm9kQ29kZWMiLChlLHQpPT57ei5pbml0KGUsdCkseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSx4KGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSx4KGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSx4KGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoKG8uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCBzPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGk9PkduKGksdCxvKSk6R24ocyx0LG8pfWVsc2V7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+R24oaSx0LG8pKTpHbihzLHQsbyl9fX0pO2Z1bmN0aW9uIEduKGUsdCxuKXtpZihlLmlzc3Vlcy5sZW5ndGgpcmV0dXJuIGUuYWJvcnRlZD0hMCxlO2lmKChuLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcj10LnRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+UW4oZSxzLHQub3V0LG4pKTpRbihlLHIsdC5vdXQsbil9ZWxzZXtjb25zdCByPXQucmV2ZXJzZVRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+UW4oZSxzLHQuaW4sbikpOlFuKGUscix0LmluLG4pfX1mdW5jdGlvbiBRbihlLHQsbixvKXtyZXR1cm4gZS5pc3N1ZXMubGVuZ3RoPyhlLmFib3J0ZWQ9ITAsZSk6bi5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6ZS5pc3N1ZXN9LG8pfWNvbnN0IGZwPXAoIiRab2RQcmVwcm9jZXNzIiwoZSx0KT0+e0hzLmluaXQoZSx0KX0pLGhwPXAoIiRab2RSZWFkb25seSIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnByb3BWYWx1ZXMpLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLHgoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4pLHgoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKFZjKTpWYyhyKX19KTtmdW5jdGlvbiBWYyhlKXtyZXR1cm4gZS5tZW1vfHwoZS52YWx1ZT1PYmplY3QuZnJlZXplKGUudmFsdWUpKSxlfWZ1bmN0aW9uIHhtKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtsZXQgbj10LnBhdHRlcm4sbz0hIXQuZm9ybWF0Py5pbmNsdWRlcygiaW50IikscixzO2Zvcihjb25zdCBhIG9mIHQuY2hlY2tzPz9bXSl7Y29uc3QgYz1hLl96b2QuZGVmO2MucGF0dGVybiYmKG49Yy5wYXR0ZXJuKSxvfHwobz0hIWMuZm9ybWF0Py5pbmNsdWRlcygiaW50IikpO2NvbnN0IHU9Yy5taW5pbXVtPz9jLmxlbmd0aCxsPWMubWF4aW11bT8/Yy5sZW5ndGg7dSE9PXZvaWQgMCYmKHI9PT12b2lkIDB8fHU+cikmJihyPXUpLGwhPT12b2lkIDAmJihzPT09dm9pZCAwfHxsPHMpJiYocz1sKX1pZihuKXJldHVybiBuLnNvdXJjZTtpZihyIT09dm9pZCAwJiZzIT09dm9pZCAwJiZyPnMpcmV0dXJuIig/ISkiO2lmKHIhPT12b2lkIDB8fHMhPT12b2lkIDApcmV0dXJuIF9sKHttaW5pbXVtOnIsbWF4aW11bTpzfSkuc291cmNlO2NvbnN0IGk9ZS5fem9kLnBhdHRlcm47cmV0dXJuKG8mJmk9PT1Fbz93bDppKT8uc291cmNlfWZ1bmN0aW9uIFlyKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZixuPWUuX3pvZC5wYXR0ZXJuPy5zb3VyY2Usbz10LmlubmVyVHlwZT8/ZS5fem9kLmlubmVyVHlwZTtpZihvKXtjb25zdCByPW8uX3pvZC5wYXR0ZXJuPy5zb3VyY2Uscz1ZcihvKTtyZXR1cm4gbiYmciYmcyYmcyE9PXI/bi5yZXBsYWNlKE9lKHIpLCgpPT5PZShzKSk6bn1pZih0Lm9wdGlvbnMpe2NvbnN0IHI9dC5vcHRpb25zLm1hcChZcik7aWYoci5ldmVyeShCb29sZWFuKSlyZXR1cm5gXigke3IubWFwKHM9Pk9lKHMpKS5qb2luKCJ8Iil9KSRgfXJldHVybiB4bShlKX1jb25zdCBtcD1wKCIkWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgdC5wYXJ0cylpZih0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsKXtjb25zdCByPVlyKG8pO2lmKCFyKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQsIG5vIHBhdHRlcm4gZm91bmQ6ICR7Wy4uLm8uX3pvZC50cmFpdHNdLnNoaWZ0KCl9YCk7bi5wdXNoKE9lKHIpKX1lbHNlIGlmKG89PT1udWxsfHxTdS5oYXModHlwZW9mIG8pKW4ucHVzaChUZShgJHtvfWApKTtlbHNlIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQ6ICR7b31gKTtlLl96b2QucGF0dGVybj1uZXcgUmVnRXhwKGBeJHtuLmpvaW4oIiIpfSRgKSxlLl96b2QucGFyc2U9KG8scik9PnR5cGVvZiBvLnZhbHVlIT0ic3RyaW5nIj8oby5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6InN0cmluZyIsY29kZToiaW52YWxpZF90eXBlIn0pLG8pOihlLl96b2QucGF0dGVybi5sYXN0SW5kZXg9MCxlLl96b2QucGF0dGVybi50ZXN0KG8udmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0Pz8idGVtcGxhdGVfbGl0ZXJhbCIscGF0dGVybjplLl96b2QucGF0dGVybi5zb3VyY2V9KSxvKX0pLGdwPXAoIiRab2RGdW5jdGlvbiIsKGUsdCk9Pih6LmluaXQoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2RlZiIse3ZhbHVlOnR9KSxlLl96b2QuZGVmPXQsZS5pbXBsZW1lbnQ9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50KCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9LcihlLl9kZWYuaW5wdXQsbyk6byxzPVJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P0tyKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLmltcGxlbWVudEFzeW5jPW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudEFzeW5jKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhc3luYyBmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9hd2FpdCBXcihlLl9kZWYuaW5wdXQsbyk6byxzPWF3YWl0IFJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P2F3YWl0IFdyKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLl96b2QucGFyc2U9KG4sbyk9PnR5cGVvZiBuLnZhbHVlIT0iZnVuY3Rpb24iPyhuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJmdW5jdGlvbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxuKTooZS5fZGVmLm91dHB1dCYmZS5fZGVmLm91dHB1dC5fem9kLmRlZi50eXBlPT09InByb21pc2UiP24udmFsdWU9ZS5pbXBsZW1lbnRBc3luYyhuLnZhbHVlKTpuLnZhbHVlPWUuaW1wbGVtZW50KG4udmFsdWUpLG4pLGUuaW5wdXQ9KC4uLm4pPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBBcnJheS5pc0FycmF5KG5bMF0pP25ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6bmV3IExzKHt0eXBlOiJ0dXBsZSIsaXRlbXM6blswXSxyZXN0Om5bMV19KSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pOm5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6blswXSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pfSxlLm91dHB1dD1uPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0OmUuX2RlZi5pbnB1dCxvdXRwdXQ6bn0pfSxlKSksdnA9cCgiJFpvZFByb21pc2UiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5Qcm9taXNlLnJlc29sdmUobi52YWx1ZSkudGhlbihyPT50LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pKX0pLEJzPXAoIiRab2RMYXp5IiwoZSx0KT0+e3ouaW5pdChlLHQpLGJ1KGUuX3pvZCwiaW5uZXJUeXBlIiwoKT0+e2NvbnN0IG49dDtyZXR1cm4gbi5fY2FjaGVkSW5uZXJ8fChuLl9jYWNoZWRJbm5lcj10LmdldHRlcigpKSxuLl9jYWNoZWRJbm5lcn0pLHgoZSwicGF0dGVybiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnBhdHRlcm4pLHgoZSwicHJvcFZhbHVlcyIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnByb3BWYWx1ZXMpLHgoZSwib3B0aW4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRpbj8/dm9pZCAwKSx4KGUsIm9wdG91dCIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dD8/dm9pZCAwKSxlLl96b2QucGFyc2U9KG4sbyk9PmUuX3pvZC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLGJwPXAoIiRab2RDdXN0b20iLChlLHQpPT57VS5pbml0KGUsdCksei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5uLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz1uLnZhbHVlLHI9dC5mbihvKTtpZihyIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gci50aGVuKHM9PkpjKHMsbixvLGUpKTtKYyhyLG4sbyxlKX19KTtmdW5jdGlvbiBKYyhlLHQsbixvKXtpZighZSl7Y29uc3Qgcj17Y29kZToiY3VzdG9tIixpbnB1dDpuLGluc3Q6byxwYXRoOlsuLi5vLl96b2QuZGVmLnBhdGg/P1tdXSxjb250aW51ZTohby5fem9kLmRlZi5hYm9ydH07by5fem9kLmRlZi5wYXJhbXMmJihyLnBhcmFtcz1vLl96b2QuZGVmLnBhcmFtcyksdC5pc3N1ZXMucHVzaChvdChyKSl9fWNsYXNzIF9wIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQ2Fubm90IHBhcnNlIGEgcmVmZXJlbmNlIGN5Y2xlIHRoYXQgY2xvc2VzIHRocm91Z2ggYSB0cmFuc2Zvcm0iKSx0aGlzLm5hbWU9IlpvZEN5Y2xpY0Vycm9yIn19Y29uc3QgWHI9In5tZW1vIixLYz1bXTtmdW5jdGlvbiB5cChlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0In1mdW5jdGlvbiBMcihlKXtyZXR1cm4gZS5tYXAodD0+dC5wYXRoP3suLi50LHBhdGg6dC5wYXRoLnNsaWNlKCl9OnsuLi50fSl9Y29uc3Qgd3A9bmV3IFdlYWtNYXAsWGU9MCxubz0xLEN0PTI7ZnVuY3Rpb24gT3QoZSx0LG4pe2NvbnN0IG89d3AuZ2V0KGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG8/Q3Q6WGU7aWYodC5oYXMoZSkpcmV0dXJuIEN0O3QuYWRkKGUpO2xldCByPVhlO2NvbnN0IHM9bD0+e2lmKHIhPT1DdCYmbD8uX3pvZCl7Y29uc3QgbT1PdChsLHQsbik7bT5yJiYocj1tKX19LGk9KGwsbSk9PntsZXQgYj1YZTtmb3IoY29uc3QgZyBvZiBSZWZsZWN0Lm93bktleXMobCkpe2NvbnN0IF89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGcpO2lmKCFfLmVudW1lcmFibGUpY29udGludWU7Y29uc3Qgdz1fLmdldD9ubzpfLnZhbHVlPy5fem9kP090KF8udmFsdWUsdCxuKTpYZTt3PmImJihiPXcpfXJldHVybiBifSxhPWw9PntsPnImJihyPWwpfSxjPWUuX3pvZC5kZWY7c3dpdGNoKGMudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBsPXZvKGMpO2EobD9pKGwpOm5vKSxzKGMuY2F0Y2hhbGwpO2JyZWFrfWNhc2UiYXJyYXkiOnMoYy5lbGVtZW50KTticmVhaztjYXNlInR1cGxlIjpmb3IoY29uc3QgbCBvZiBjLml0ZW1zKXMobCk7cyhjLnJlc3QpO2JyZWFrO2Nhc2UicmVjb3JkIjpjYXNlIm1hcCI6cyhjLmtleVR5cGUpLHMoYy52YWx1ZVR5cGUpO2JyZWFrO2Nhc2Uic2V0IjpzKGMudmFsdWVUeXBlKTticmVhaztjYXNlInVuaW9uIjpmb3IoY29uc3QgbCBvZiBjLm9wdGlvbnMpcyhsKTticmVhaztjYXNlImludGVyc2VjdGlvbiI6cyhjLmxlZnQpLHMoYy5yaWdodCk7YnJlYWs7Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6cyhjLmlubmVyVHlwZSk7YnJlYWs7Y2FzZSJwaXBlIjpzKGMuaW4pLHMoYy5vdXQpO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnMoYy5pbnB1dCkscyhjLm91dHB1dCk7YnJlYWs7Y2FzZSJsYXp5Ijp7Y29uc3QgbD1jLl9jYWNoZWRJbm5lcj8/KG4/ZS5fem9kLmlubmVyVHlwZTp2b2lkIDApO2EobD9PdChsLHQsITEpOm5vKTticmVha31jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6YnJlYWs7ZGVmYXVsdDpmb3IoY29uc3QgbCBpbiBjKXtjb25zdCBtPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxsKTtpZighbXx8bS5nZXQpY29udGludWU7Y29uc3QgYj1tLnZhbHVlO2lmKCEoIWJ8fHR5cGVvZiBiIT0ib2JqZWN0Iikpe2lmKGIuX3pvZClzKGIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShiKSlmb3IoY29uc3QgZyBvZiBiKXMoZyl9fX1yZXR1cm4gdC5kZWxldGUoZSksRW0oZSxyKX1mdW5jdGlvbiBFbShlLHQpe3JldHVybiB0IT09bm8mJndwLnNldChlLHQ9PT1DdCksdH1mdW5jdGlvbiBDbShlKXtyZXR1cm4gT3QoZSxuZXcgU2V0LCEwKSE9PVhlfWZ1bmN0aW9uIE9tKGUsdCl7bGV0IG49ZS5idWNrZXRzLmdldCh0KTtyZXR1cm4gbnx8KG49bmV3IFdlYWtNYXAsZS5idWNrZXRzLnNldCh0LG4pKSxufWxldCBZbjtjb25zdCBYbj1bXSxSbT17YWxsb2MoZSx0LG4pe2NvbnN0IG89WW47aWYoIW8pcmV0dXJuIG47WW49dm9pZCAwO2NvbnN0IHI9e3ZhbHVlOm4saXNzdWVzOm51bGx9O3JldHVybiBvLnNldCh0LnZhbHVlLHIpLFhuLnB1c2gociksbn0sZ3VhcmQoZSl7dmFyIHQ7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3Qgbj1lLl96b2QucGFyc2Usbz0ocixzKT0+e2lmKHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIiYma3AocyxyLnZhbHVlKSl0aHJvdyBuZXcgX3A7cmV0dXJuIG4ocixzKX07ZS5fem9kLnBhcnNlPW8sZS5fem9kLnJ1bj09PW4mJihlLl96b2QucnVuPW8pfSl9LGF0dGFjaChlKXt2YXIgdDtsZXQgbixvPSExLHIsczsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBpPWUuX3pvZC5wYXJzZSxhPShjLHUpPT57aWYobj09PXZvaWQgMCl7Y29uc3QgTz1PdChlLG5ldyBTZXQsITEpO2lmKE89PT1YZSlyZXR1cm4gZS5fem9kLnBhcnNlPWksZS5fem9kLnJ1bj09PWEmJihlLl96b2QucnVuPWkpLGkoYyx1KTtPPT09Q3R8fG8/bj0hMDpvPSEwfWNvbnN0IGw9Yy52YWx1ZTtpZigheXAobCkpcmV0dXJuIGkoYyx1KTtsZXQgbT11W1hyXTttfHwobT17YnVja2V0czpuZXcgV2Vha01hcCxiYWNrRWRnZXM6dm9pZCAwfSx1W1hyXT1tKTtsZXQgYjtyPT09dT9iPXM6KGI9T20obSxlKSxyPXUscz1iKTtjb25zdCBnPWIuZ2V0KGwpO2lmKGcpcmV0dXJuIGMudmFsdWU9Zy52YWx1ZSxnLmlzc3Vlcz9nLmlzc3Vlcy5sZW5ndGgmJmMuaXNzdWVzLnB1c2goLi4uTHIoZy5pc3N1ZXMpKTooYy5tZW1vPSEwLG0uYmFja0VkZ2VzPz8obS5iYWNrRWRnZXM9bmV3IFdlYWtTZXQpLG0uYmFja0VkZ2VzLmFkZChnLnZhbHVlKSksYztZbj1iO2NvbnN0IF89WG4ubGVuZ3RoLHc9aShjLHUpO1luPXZvaWQgMDtjb25zdCBTPVhuLmxlbmd0aD5fP1huLnBvcCgpOnZvaWQgMDtyZXR1cm4gdyBpbnN0YW5jZW9mIFByb21pc2U/dy50aGVuKE89PihTJiYoUy5pc3N1ZXM9Ty5pc3N1ZXMubGVuZ3RoP0xyKE8uaXNzdWVzKTpLYyksTykpOihTJiYoUy5pc3N1ZXM9dy5pc3N1ZXMubGVuZ3RoP0xyKHcuaXNzdWVzKTpLYyksdyl9O2UuX3pvZC5wYXJzZT1hLGUuX3pvZC5ydW49PT1pJiYoZS5fem9kLnJ1bj1hKX0pfX07ZnVuY3Rpb24gUm8oKXtyZXR1cm4gUm19ZnVuY3Rpb24ga3AoZSx0KXtjb25zdCBuPWVbWHJdPy5iYWNrRWRnZXM7cmV0dXJuIG4hPT12b2lkIDAmJnlwKHQpJiZuLmhhcyh0KX1jb25zdCBBbT0oKT0+e2NvbnN0IGU9e3N0cmluZzp7dW5pdDoiY2hhcmFjdGVycyIsdmVyYjoidG8gaGF2ZSJ9LGZpbGU6e3VuaXQ6ImJ5dGVzIix2ZXJiOiJ0byBoYXZlIn0sYXJyYXk6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sc2V0Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LG1hcDp7dW5pdDoiZW50cmllcyIsdmVyYjoidG8gaGF2ZSJ9fTtmdW5jdGlvbiB0KHMpe3JldHVybiBlW3NdPz9udWxsfWNvbnN0IG49e3JlZ2V4OiJpbnB1dCIsZW1haWw6ImVtYWlsIGFkZHJlc3MiLHVybDoiVVJMIixlbW9qaToiZW1vamkiLHV1aWQ6IlVVSUQiLHV1aWR2NDoiVVVJRHY0Iix1dWlkdjY6IlVVSUR2NiIsbmFub2lkOiJuYW5vaWQiLGd1aWQ6IkdVSUQiLGN1aWQ6ImN1aWQiLGN1aWQyOiJjdWlkMiIsdWxpZDoiVUxJRCIseGlkOiJYSUQiLGtzdWlkOiJLU1VJRCIsZGF0ZXRpbWU6IklTTyBkYXRldGltZSIsZGF0ZToiSVNPIGRhdGUiLHRpbWU6IklTTyB0aW1lIixkdXJhdGlvbjoiSVNPIGR1cmF0aW9uIixpcHY0OiJJUHY0IGFkZHJlc3MiLGlwdjY6IklQdjYgYWRkcmVzcyIsbWFjOiJNQUMgYWRkcmVzcyIsY2lkcnY0OiJJUHY0IHJhbmdlIixjaWRydjY6IklQdjYgcmFuZ2UiLGJhc2U2NDoiYmFzZTY0LWVuY29kZWQgc3RyaW5nIixiYXNlNjR1cmw6ImJhc2U2NHVybC1lbmNvZGVkIHN0cmluZyIsanNvbl9zdHJpbmc6IkpTT04gc3RyaW5nIixlMTY0OiJFLjE2NCBudW1iZXIiLGN1cnJlbmN5X2NvZGU6ImN1cnJlbmN5IGNvZGUiLGNyZWRpdF9jYXJkOiJjcmVkaXQgY2FyZCBudW1iZXIiLGliYW46IklCQU4iLGp3dDoiSldUIix0ZW1wbGF0ZV9saXRlcmFsOiJpbnB1dCJ9LG89e25hbjoiTmFOIn07ZnVuY3Rpb24gcihzLGkpe3JldHVybiBzPT09Im51bWJlciImJnR5cGVvZiBpPT0ibnVtYmVyIiYmIU51bWJlci5pc0Zpbml0ZShpKT9TdHJpbmcoaSk6b1tzXT8/c31yZXR1cm4gcz0+e3N3aXRjaChzLmNvZGUpe2Nhc2UiaW52YWxpZF90eXBlIjp7Y29uc3QgaT1yKHMuZXhwZWN0ZWQpLGE9TnUocy5pbnB1dCksYz1yKGEscy5pbnB1dCk7cmV0dXJuYEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7aX0sIHJlY2VpdmVkICR7Y31gfWNhc2UiaW52YWxpZF92YWx1ZSI6cmV0dXJuIHMudmFsdWVzLmxlbmd0aD09PTE/YEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7dXMocy52YWx1ZXNbMF0pfWA6YEludmFsaWQgb3B0aW9uOiBleHBlY3RlZCBvbmUgb2YgJHtCcihzLnZhbHVlcywifCIpfWA7Y2FzZSJ0b29fYmlnIjp7Y29uc3QgaT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ijw9IjoiPCIsYT10KHMub3JpZ2luKTtyZXR1cm4gYT9gVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gaGF2ZSAke2l9JHtzLm1heGltdW0udG9TdHJpbmcoKX0gJHthLnVuaXQ/PyJlbGVtZW50cyJ9YDpgVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gYmUgJHtpfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9YH1jYXNlInRvb19zbWFsbCI6e2NvbnN0IGk9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI+PSI6Ij4iLGE9dChzLm9yaWdpbik7cmV0dXJuIGE/YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gaGF2ZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX0gJHthLnVuaXR9YDpgVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBiZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX1gfWNhc2UiaW52YWxpZF9mb3JtYXQiOntjb25zdCBpPXM7cmV0dXJuIGkuZm9ybWF0PT09InN0YXJ0c193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3Qgc3RhcnQgd2l0aCAiJHtpLnByZWZpeH0iYDppLmZvcm1hdD09PSJlbmRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBlbmQgd2l0aCAiJHtpLnN1ZmZpeH0iYDppLmZvcm1hdD09PSJpbmNsdWRlcyI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGluY2x1ZGUgIiR7aS5pbmNsdWRlc30iYDppLmZvcm1hdD09PSJyZWdleCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IG1hdGNoIHBhdHRlcm4gJHtpLnBhdHRlcm59YDpgSW52YWxpZCAke25baS5mb3JtYXRdPz9zLmZvcm1hdH1gfWNhc2Uibm90X211bHRpcGxlX29mIjpyZXR1cm5gSW52YWxpZCBudW1iZXI6IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke3MuZGl2aXNvcn1gO2Nhc2UidW5yZWNvZ25pemVkX2tleXMiOnJldHVybmBVbnJlY29nbml6ZWQga2V5JHtzLmtleXMubGVuZ3RoPjE/InMiOiIifTogJHtCcihzLmtleXMsIiwgIil9YDtjYXNlImludmFsaWRfa2V5IjpyZXR1cm5gSW52YWxpZCBrZXkgaW4gJHtzLm9yaWdpbn1gO2Nhc2UiaW52YWxpZF91bmlvbiI6cmV0dXJuIHMub3B0aW9ucyYmQXJyYXkuaXNBcnJheShzLm9wdGlvbnMpJiZzLm9wdGlvbnMubGVuZ3RoPjA/YEludmFsaWQgZGlzY3JpbWluYXRvciB2YWx1ZS4gRXhwZWN0ZWQgJHtzLm9wdGlvbnMubWFwKGE9PmAnJHthfSdgKS5qb2luKCIgfCAiKX1gOnMuaW5jbHVzaXZlPT09ITE/IkludmFsaWQgaW5wdXQ6IG1vcmUgdGhhbiBvbmUgb3B0aW9uIG1hdGNoZWQiOiJJbnZhbGlkIGlucHV0IjtjYXNlImludmFsaWRfZWxlbWVudCI6cmV0dXJuYEludmFsaWQgdmFsdWUgaW4gJHtzLm9yaWdpbn1gO2RlZmF1bHQ6cmV0dXJuIkludmFsaWQgaW5wdXQifX19O2Z1bmN0aW9uICRwKCl7cmV0dXJue2xvY2FsZUVycm9yOkFtKCl9fWNvbnN0IFZzPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbjokcH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgV2M7Y29uc3QgSnM9U3ltYm9sKCJab2RPdXRwdXQiKSxLcz1TeW1ib2woIlpvZElucHV0Iik7Y2xhc3MgU3B7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcH1hZGQodCwuLi5uKXtjb25zdCBvPW5bMF07cmV0dXJuIHRoaXMuX21hcC5zZXQodCxvKSxvJiZ0eXBlb2Ygbz09Im9iamVjdCImJiJpZCJpbiBvJiZ0aGlzLl9pZG1hcC5zZXQoby5pZCx0KSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwLHRoaXN9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtyZXR1cm4gbiYmdHlwZW9mIG49PSJvYmplY3QiJiYiaWQiaW4gbiYmdGhpcy5faWRtYXAuZGVsZXRlKG4uaWQpLHRoaXMuX21hcC5kZWxldGUodCksdGhpc31nZXQodCl7Y29uc3Qgbj10Ll96b2QucGFyZW50O2lmKG4pe2NvbnN0IG89ey4uLnRoaXMuZ2V0KG4pPz97fX07ZGVsZXRlIG8uaWQ7Y29uc3Qgcj17Li4ubywuLi50aGlzLl9tYXAuZ2V0KHQpfTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoP3I6dm9pZCAwfXJldHVybiB0aGlzLl9tYXAuZ2V0KHQpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX19ZnVuY3Rpb24gQW8oKXtyZXR1cm4gbmV3IFNwfShXYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxSZWdpc3RyeT8/KFdjLl9fem9kX2dsb2JhbFJlZ2lzdHJ5PUFvKCkpO2NvbnN0IGhlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsUmVnaXN0cnksV3M9KCk9Pnt0aHJvdyBuZXcgRXJyb3IoInpvZCBjb21waWxlKCkgaXMgbm90IGJ1bmRsZWQgaW50byBjYXJkcyAtIHNlZSBwYWNrYWdlcy9pbnRlcm5hbC9jYXJkLWtpdC92aXRlLXNsaW0ubWpzIil9O2NsYXNzIEdzIGV4dGVuZHMgRXJyb3J7fWNsYXNzIFFzIGV4dGVuZHMgRXJyb3J7fWNsYXNzIFlzIGV4dGVuZHMgRXJyb3J7fWNvbnN0IFhzPVdzLGVpPVdzLFptPVdzO2Z1bmN0aW9uIFpvKGUpe3JldHVybiBlLmNoZWNrcyYmKGUuY2hlY2tzPVsuLi5lLmNoZWNrc10pLGV9ZnVuY3Rpb24genAoZSx0KXtyZXR1cm4gbmV3IGUoWm8oe3R5cGU6InN0cmluZyIsLi4ueSh0KX0pKX1mdW5jdGlvbiBUcChlLHQpe3JldHVybiBuZXcgZShabyh7dHlwZToic3RyaW5nIixjb2VyY2U6ITAsLi4ueSh0KX0pKX1mdW5jdGlvbiB0aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtYWlsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIG5pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZ3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBvaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gcmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjQiLC4uLnkodCl9KX1mdW5jdGlvbiBzaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGlpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY3IiwuLi55KHQpfSl9ZnVuY3Rpb24gTm8oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gYWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbW9qaSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBjaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im5hbm9pZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiB1aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gbGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkMiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBkaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVsaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gcGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ4aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gZmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJrc3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBoaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gbWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIElwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibWFjIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIGdpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHZpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIGJpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIF9pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0dXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHlpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZTE2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBQcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNyZWRpdF9jYXJkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHhwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaWJhbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiB3aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imp3dCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1jb25zdCBraT17QW55Om51bGwsTWludXRlOi0xLFNlY29uZDowLE1pbGxpc2Vjb25kOjMsTWljcm9zZWNvbmQ6Nn07ZnVuY3Rpb24gJGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRldGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLG9mZnNldDohMSxsb2NhbDohMSxwcmVjaXNpb246bnVsbCwuLi55KHQpfSl9ZnVuY3Rpb24gU2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRlIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLHByZWNpc2lvbjpudWxsLC4uLnkodCl9KX1mdW5jdGlvbiBUaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImR1cmF0aW9uIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEVwKGUsdCl7cmV0dXJuIG5ldyBlKFpvKHt0eXBlOiJudW1iZXIiLGNoZWNrczpbXSwuLi55KHQpfSkpfWZ1bmN0aW9uIENwKGUsdCl7cmV0dXJuIG5ldyBlKFpvKHt0eXBlOiJudW1iZXIiLGNvZXJjZTohMCxjaGVja3M6W10sLi4ueSh0KX0pKX1mdW5jdGlvbiBPcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJzYWZlaW50IiwuLi55KHQpfSl9ZnVuY3Rpb24gUnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIEFwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBacChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIE5wKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGpwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIiwuLi55KHQpfSl9ZnVuY3Rpb24gTXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gcXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsLi4ueSh0KX0pfWZ1bmN0aW9uIERwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gTHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBVcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBIcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3ltYm9sIiwuLi55KHQpfSl9ZnVuY3Rpb24gRnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuZGVmaW5lZCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEJwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsIiwuLi55KHQpfSl9ZnVuY3Rpb24gVnAoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJhbnkifSl9ZnVuY3Rpb24gSnAoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmtub3duIn0pfWZ1bmN0aW9uIEtwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuZXZlciIsLi4ueSh0KX0pfWZ1bmN0aW9uIFdwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ2b2lkIiwuLi55KHQpfSl9ZnVuY3Rpb24gR3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLC4uLnkodCl9KX1mdW5jdGlvbiBRcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsY29lcmNlOiEwLC4uLnkodCl9KX1mdW5jdGlvbiBZcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmFuIiwuLi55KHQpfSl9ZnVuY3Rpb24gUGUoZSx0KXtyZXR1cm4gbmV3IHhzKHtjaGVjazoibGVzc190aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gdWUoZSx0KXtyZXR1cm4gbmV3IHhzKHtjaGVjazoibGVzc190aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24geGUoZSx0KXtyZXR1cm4gbmV3IEVzKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gbGUoZSx0KXtyZXR1cm4gbmV3IEVzKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gam8oZSl7cmV0dXJuIHhlKDAsZSl9ZnVuY3Rpb24gTW8oZSl7cmV0dXJuIFBlKDAsZSl9ZnVuY3Rpb24gcW8oZSl7cmV0dXJuIHVlKDAsZSl9ZnVuY3Rpb24gRG8oZSl7cmV0dXJuIGxlKDAsZSl9ZnVuY3Rpb24gSGUoZSx0KXtyZXR1cm4gbmV3IFBsKHtjaGVjazoibXVsdGlwbGVfb2YiLC4uLnkodCksdmFsdWU6ZX0pfWZ1bmN0aW9uIFdlKGUsdCl7cmV0dXJuIG5ldyBDbCh7Y2hlY2s6Im1heF9zaXplIiwuLi55KHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIEVlKGUsdCl7cmV0dXJuIG5ldyBPbCh7Y2hlY2s6Im1pbl9zaXplIiwuLi55KHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIGx0KGUsdCl7cmV0dXJuIG5ldyBSbCh7Y2hlY2s6InNpemVfZXF1YWxzIiwuLi55KHQpLHNpemU6ZX0pfWZ1bmN0aW9uIGR0KGUsdCl7cmV0dXJuIG5ldyBBbCh7Y2hlY2s6Im1heF9sZW5ndGgiLC4uLnkodCksbWF4aW11bTplfSl9ZnVuY3Rpb24gWmUoZSx0KXtyZXR1cm4gbmV3IFpsKHtjaGVjazoibWluX2xlbmd0aCIsLi4ueSh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiBwdChlLHQpe3JldHVybiBuZXcgTmwoe2NoZWNrOiJsZW5ndGhfZXF1YWxzIiwuLi55KHQpLGxlbmd0aDplfSl9ZnVuY3Rpb24gWXQoZSx0KXtyZXR1cm4gbmV3IGpsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsLi4ueSh0KSxwYXR0ZXJuOmV9KX1mdW5jdGlvbiBYdChlKXtyZXR1cm4gbmV3IE1sKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJsb3dlcmNhc2UiLC4uLnkoZSl9KX1mdW5jdGlvbiBlbihlKXtyZXR1cm4gbmV3IHFsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJ1cHBlcmNhc2UiLC4uLnkoZSl9KX1mdW5jdGlvbiB0bihlLHQpe3JldHVybiBuZXcgRGwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImluY2x1ZGVzIiwuLi55KHQpLGluY2x1ZGVzOmV9KX1mdW5jdGlvbiBubihlLHQpe3JldHVybiBuZXcgTGwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIiwuLi55KHQpLHByZWZpeDplfSl9ZnVuY3Rpb24gb24oZSx0KXtyZXR1cm4gbmV3IFVsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLC4uLnkodCksc3VmZml4OmV9KX1mdW5jdGlvbiBMbyhlLHQsbil7cmV0dXJuIG5ldyBIbCh7Y2hlY2s6InByb3BlcnR5Iixwcm9wZXJ0eTplLHNjaGVtYTp0LC4uLnkobil9KX1mdW5jdGlvbiBybihlLHQpe3JldHVybiBuZXcgRmwoe2NoZWNrOiJwcm9wZXJ0aWVzIixzaGFwZTplLC4uLnkodCl9KX1mdW5jdGlvbiBzbihlLHQpe3JldHVybiBuZXcgQmwoe2NoZWNrOiJtaW1lX3R5cGUiLG1pbWU6ZSwuLi55KHQpfSl9ZnVuY3Rpb24ga2UoZSl7cmV0dXJuIG5ldyBWbCh7Y2hlY2s6Im92ZXJ3cml0ZSIsdHg6ZX0pfWZ1bmN0aW9uIGFuKGUpe3JldHVybiBrZSh0PT50Lm5vcm1hbGl6ZShlKSl9ZnVuY3Rpb24gY24oKXtyZXR1cm4ga2UoZT0+ZS50cmltKCkpfWZ1bmN0aW9uIHVuKCl7cmV0dXJuIGtlKGU9PmUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gbG4oKXtyZXR1cm4ga2UoZT0+ZS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBkbigpe3JldHVybiBrZShlPT5rdShlKSl9ZnVuY3Rpb24gWHAoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiYXJyYXkiLGVsZW1lbnQ6dCwuLi55KG4pfSl9ZnVuY3Rpb24gTm0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCwuLi55KG4pfSl9ZnVuY3Rpb24gam0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCxpbmNsdXNpdmU6ITEsLi4ueShuKX0pfWZ1bmN0aW9uIE1tKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6bixkaXNjcmltaW5hdG9yOnQsLi4ueShvKX0pfWZ1bmN0aW9uIHFtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDp0LHJpZ2h0Om59KX1mdW5jdGlvbiBEbShlLHQsbixvKXtjb25zdCByPW4gaW5zdGFuY2VvZiB6LHM9cj9vOm4saT1yP246bnVsbDtyZXR1cm4gbmV3IGUoe3R5cGU6InR1cGxlIixpdGVtczp0LHJlc3Q6aSwuLi55KHMpfSl9ZnVuY3Rpb24gTG0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi55KG8pfSl9ZnVuY3Rpb24gVW0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJtYXAiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi55KG8pfSl9ZnVuY3Rpb24gSG0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToic2V0Iix2YWx1ZVR5cGU6dCwuLi55KG4pfSl9ZnVuY3Rpb24gRm0oZSx0LG4pe2NvbnN0IG89QXJyYXkuaXNBcnJheSh0KT9PYmplY3QuZnJvbUVudHJpZXModC5tYXAocj0+W3Iscl0pKTp0O3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczpvLC4uLnkobil9KX1mdW5jdGlvbiBCbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFZtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KHQpP3Q6W3RdLC4uLnkobil9KX1mdW5jdGlvbiBlZihlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZmlsZSIsLi4ueSh0KX0pfWZ1bmN0aW9uIEptKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTp0fSl9ZnVuY3Rpb24gS20oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIFdtKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBHbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJkZWZhdWx0Iixpbm5lclR5cGU6dCxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP24oKTpibyhuKX19KX1mdW5jdGlvbiBRbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFltKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdWNjZXNzIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIFhtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6dCxjYXRjaFZhbHVlOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246bHMobil9KX1mdW5jdGlvbiBlZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJwaXBlIixpbjp0LG91dDpufSl9ZnVuY3Rpb24gdGcoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIG5nKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOnQsLi4ueShuKX0pfWZ1bmN0aW9uIG9nKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJsYXp5IixnZXR0ZXI6dH0pfWZ1bmN0aW9uIHJnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHRmKGUsdCxuKXtjb25zdCBvPXkobik7cmV0dXJuIG8uYWJvcnQ/PyhvLmFib3J0PSEwKSxuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLm99KX1mdW5jdGlvbiBuZihlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4ueShuKX0pfWZ1bmN0aW9uIG9mKGUsdCl7Y29uc3Qgbj1yZihvPT4oby5hZGRJc3N1ZT1yPT57aWYodHlwZW9mIHI9PSJzdHJpbmciKW8uaXNzdWVzLnB1c2gob3QocixvLnZhbHVlLG4uX3pvZC5kZWYpKTtlbHNle2NvbnN0IHM9cjtzLmZhdGFsJiYocy5jb250aW51ZT0hMSkscy5jb2RlPz8ocy5jb2RlPSJjdXN0b20iKSwiaW5wdXQiaW4gc3x8KHMuaW5wdXQ9by52YWx1ZSkscy5pbnN0Pz8ocy5pbnN0PW4pLHMuY29udGludWU/PyhzLmNvbnRpbnVlPSFuLl96b2QuZGVmLmFib3J0KSxvLmlzc3Vlcy5wdXNoKG90KHMpKX19LGUoby52YWx1ZSxvKSksdCk7cmV0dXJuIG59ZnVuY3Rpb24gcmYoZSx0KXtjb25zdCBuPW5ldyBVKHtjaGVjazoiY3VzdG9tIiwuLi55KHQpfSk7cmV0dXJuIG4uX3pvZC5jaGVjaz1lLG59ZnVuY3Rpb24gc2YoZSl7Y29uc3QgdD1uZXcgVSh7Y2hlY2s6ImRlc2NyaWJlIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWhlLmdldChuKT8/e307aGUuYWRkKG4sey4uLm8sZGVzY3JpcHRpb246ZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIGFmKGUpe2NvbnN0IHQ9bmV3IFUoe2NoZWNrOiJtZXRhIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWhlLmdldChuKT8/e307aGUuYWRkKG4sey4uLm8sLi4uZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIGNmKGUsdCl7Y29uc3Qgbj15KHQpO2xldCBvPW4udHJ1dGh5Pz9bInRydWUiLCIxIiwieWVzIiwib24iLCJ5IiwiZW5hYmxlZCJdLHI9bi5mYWxzeT8/WyJmYWxzZSIsIjAiLCJubyIsIm9mZiIsIm4iLCJkaXNhYmxlZCJdO24uY2FzZSE9PSJzZW5zaXRpdmUiJiYobz1vLm1hcChnPT50eXBlb2YgZz09InN0cmluZyI/Zy50b0xvd2VyQ2FzZSgpOmcpLHI9ci5tYXAoZz0+dHlwZW9mIGc9PSJzdHJpbmciP2cudG9Mb3dlckNhc2UoKTpnKSk7Y29uc3Qgcz1uZXcgU2V0KG8pLGk9bmV3IFNldChyKSxhPWUuQ29kZWM/P0ZzLGM9ZS5Cb29sZWFuPz9Ncyx1PWUuU3RyaW5nPz9RdCxsPW5ldyB1KHt0eXBlOiJzdHJpbmciLGVycm9yOm4uZXJyb3J9KSxtPW5ldyBjKHt0eXBlOiJib29sZWFuIixlcnJvcjpuLmVycm9yfSksYj1uZXcgYSh7dHlwZToicGlwZSIsaW46bCxvdXQ6bSx0cmFuc2Zvcm06KChnLF8pPT57bGV0IHc9ZztyZXR1cm4gbi5jYXNlIT09InNlbnNpdGl2ZSImJih3PXcudG9Mb3dlckNhc2UoKSkscy5oYXModyk/ITA6aS5oYXModyk/ITE6KF8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLGV4cGVjdGVkOiJzdHJpbmdib29sIix2YWx1ZXM6Wy4uLnMsLi4uaV0saW5wdXQ6Xy52YWx1ZSxpbnN0OmIsY29udGludWU6ITF9KSx7fSl9KSxyZXZlcnNlVHJhbnNmb3JtOigoZyxfKT0+Zz09PSEwP29bMF18fCJ0cnVlIjpyWzBdfHwiZmFsc2UiKSxlcnJvcjpuLmVycm9yfSk7cmV0dXJuIGIuX3pvZC5iYWcudHJ1dGh5PW8sYi5fem9kLmJhZy5mYWxzeT1yLGIuX3pvZC5iYWcuY2FzZT1uLmNhc2U/PyJpbnNlbnNpdGl2ZSIsYn1mdW5jdGlvbiBmdChlLHQsbixvPXt9KXtjb25zdCByPXkobykscz17Y2hlY2s6InN0cmluZ19mb3JtYXQiLHR5cGU6InN0cmluZyIsZm9ybWF0OnQsZm46dHlwZW9mIG49PSJmdW5jdGlvbiI/bjphPT5uLnRlc3QoYSksLi4ucn07cmV0dXJuIG4gaW5zdGFuY2VvZiBSZWdFeHAmJihzLnBhdHRlcm49biksbmV3IGUocyl9Y29uc3Qgc2c9KCk9Pih7fSksaWc9KCk9Pih7fSksYWc9KCk9Pih7fSksY2c9KCk9Pih7fSksdWc9KCk9Pih7fSksdWY9KCk9PigpPT4oe30pLGVzPSgpPT4oKT0+KHt9KSxsZz0oKT0+KHt9KSxtZT0oKT0+KHt9KSxkZz0oKT0+KHt9KSxwZz0oKT0+KHt9KSxmZz0oKT0+KHt9KSxoZz0oKT0+KHt9KSxtZz0oKT0+KHt9KSxnZz0oKT0+KHt9KSx2Zz0oKT0+KHt9KSxiZz0oKT0+KHt9KSxfZz0oKT0+KHt9KSx5Zz0oKT0+KHt9KSx3Zz0oKT0+KHt9KSxrZz0oKT0+KHt9KSwkZz0oKT0+KHt9KSxTZz0oKT0+KHt9KSx6Zz0oKT0+KHt9KSxUZz0oKT0+KHt9KSxJZz0oKT0+KHt9KSxQZz0oKT0+KHt9KSx4Zz0oKT0+KHt9KSxFZz0oKT0+KHt9KSxDZz0oKT0+KHt9KSxPZz0oKT0+KHt9KSxSZz0oKT0+KHt9KSxBZz0oKT0+KHt9KSxaZz0oKT0+KHt9KSxsZj0oKT0+KHt9KSxOZz0oKT0+KHt9KSxqZz0oKT0+KHt9KSxNZz0oKT0+KHt9KSxxZz0oKT0+KHt9KSxEZz0oKT0+KHt9KSxMZz0oKT0+KHt9KSxVZz0oKT0+KHt9KSxIZz0oKT0+KHt9KSxGZz0oKT0+KHt9KSxCZz0oKT0+KHt9KSxWZz0oKT0+KHt9KSxkZj0oKT0+KHt9KSxKZz0oKT0+KHt9KSxJaT0oKT0+KHt9KTtjbGFzcyBLZ3t9Y29uc3QgV2c9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHBmPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkWm9kQW55Ok1kLCRab2RBcnJheTpIZCwkWm9kQXN5bmNFcnJvcjpSZSwkWm9kQmFzZTY0OmtkLCRab2RCYXNlNjRVUkw6U2QsJFpvZEJpZ0ludDpxcywkWm9kQmlnSW50Rm9ybWF0OkFkLCRab2RCb29sZWFuOk1zLCRab2RDSURSdjQ6YmQsJFpvZENJRFJ2Njp5ZCwkWm9kQ1VJRDppZCwkWm9kQ1VJRDI6YWQsJFpvZENhdGNoOmRwLCRab2RDaGVjazpVLCRab2RDaGVja0JpZ0ludEZvcm1hdDpFbCwkWm9kQ2hlY2tFbmRzV2l0aDpVbCwkWm9kQ2hlY2tHcmVhdGVyVGhhbjpFcywkWm9kQ2hlY2tJbmNsdWRlczpEbCwkWm9kQ2hlY2tMZW5ndGhFcXVhbHM6TmwsJFpvZENoZWNrTGVzc1RoYW46eHMsJFpvZENoZWNrTG93ZXJDYXNlOk1sLCRab2RDaGVja01heExlbmd0aDpBbCwkWm9kQ2hlY2tNYXhTaXplOkNsLCRab2RDaGVja01pbWVUeXBlOkJsLCRab2RDaGVja01pbkxlbmd0aDpabCwkWm9kQ2hlY2tNaW5TaXplOk9sLCRab2RDaGVja011bHRpcGxlT2Y6UGwsJFpvZENoZWNrTnVtYmVyRm9ybWF0OnhsLCRab2RDaGVja092ZXJ3cml0ZTpWbCwkWm9kQ2hlY2tQcm9wZXJ0aWVzOkZsLCRab2RDaGVja1Byb3BlcnR5OkhsLCRab2RDaGVja1JlZ2V4OmpsLCRab2RDaGVja1NpemVFcXVhbHM6UmwsJFpvZENoZWNrU3RhcnRzV2l0aDpMbCwkWm9kQ2hlY2tTdHJpbmdGb3JtYXQ6R3QsJFpvZENoZWNrVXBwZXJDYXNlOnFsLCRab2RDb2RlYzpGcywkWm9kQ3JlZGl0Q2FyZDpJZCwkWm9kQ3VzdG9tOmJwLCRab2RDdXN0b21TdHJpbmdGb3JtYXQ6T2QsJFpvZEN5Y2xpY0Vycm9yOl9wLCRab2REYXRlOlVkLCRab2REZWZhdWx0OmFwLCRab2REaXNjcmltaW5hdGVkVW5pb246R2QsJFpvZEUxNjQ6emQsJFpvZEVtYWlsOllsLCRab2RFbW9qaTpyZCwkWm9kRW5jb2RlRXJyb3I6U28sJFpvZEVudW06dHAsJFpvZEVycm9yOkh1LCRab2RFeGFjdE9wdGlvbmFsOnNwLCRab2RGaWxlOm9wLCRab2RGdW5jdGlvbjpncCwkWm9kR1VJRDpHbCwkWm9kSUJBTjp4ZCwkWm9kSVB2NDptZCwkWm9kSVB2NjpnZCwkWm9kSVNPRGF0ZTpwZCwkWm9kSVNPRGF0ZVRpbWU6ZGQsJFpvZElTT0R1cmF0aW9uOmhkLCRab2RJU09UaW1lOmZkLCRab2RJbnRlcnNlY3Rpb246UWQsJFpvZEpXVDpDZCwkWm9kS1NVSUQ6bGQsJFpvZExhenk6QnMsJFpvZExpdGVyYWw6bnAsJFpvZE1BQzp2ZCwkWm9kTWFwOlhkLCRab2ROYU46cHAsJFpvZE5hbm9JRDpzZCwkWm9kTmV2ZXI6RGQsJFpvZE5vbk9wdGlvbmFsOnVwLCRab2ROdWxsOmpkLCRab2ROdWxsYWJsZTppcCwkWm9kTnVtYmVyOmpzLCRab2ROdW1iZXJGb3JtYXQ6UmQsJFpvZE9iamVjdDpWZCwkWm9kT2JqZWN0SklUOkpkLCRab2RPcHRpb25hbDpVcywkWm9kUGlwZTpIcywkWm9kUHJlZmF1bHQ6Y3AsJFpvZFByZXByb2Nlc3M6ZnAsJFpvZFByb21pc2U6dnAsJFpvZFJlYWRvbmx5OmhwLCRab2RSZWFsRXJyb3I6ZGUsJFpvZFJlY29yZDpZZCwkWm9kUmVnaXN0cnk6U3AsJFpvZFNldDplcCwkWm9kU3RyaW5nOlF0LCRab2RTdHJpbmdGb3JtYXQ6cSwkWm9kU3VjY2VzczpscCwkWm9kU3ltYm9sOlpkLCRab2RUZW1wbGF0ZUxpdGVyYWw6bXAsJFpvZFRyYW5zZm9ybTpycCwkWm9kVHVwbGU6THMsJFpvZFR5cGU6eiwkWm9kVUxJRDpjZCwkWm9kVVJMOm9kLCRab2RVVUlEOlFsLCRab2RVbmRlZmluZWQ6TmQsJFpvZFVuaW9uOk9vLCRab2RVbmtub3duOnFkLCRab2RWb2lkOkxkLCRab2RYSUQ6dWQsJFpvZFhvcjpLZCwkYnJhbmQ6ZnMsJGNvbnN0cnVjdG9yOnAsJGlucHV0OktzLCRvdXRwdXQ6SnMsRG9jOkpsLElOVkFMSUQ6R3MsSlNPTlNjaGVtYTpXZyxKU09OU2NoZW1hR2VuZXJhdG9yOktnLE5FVkVSOnBzLFRpbWVQcmVjaXNpb246a2ksVVJMX0JBRF9GT1JNQVQ6T3MsVVJMX1VOUEFSU0VBQkxFOlp0LFpvZENvbXBpbGVBc3luY0Vycm9yOlFzLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOllzLF9hbnk6VnAsX2FycmF5OlhwLF9iYXNlNjQ6YmksX2Jhc2U2NHVybDpfaSxfYmlnaW50OnFwLF9ib29sZWFuOmpwLF9jYXRjaDpYbSxfY2hlY2s6cmYsX2NpZHJ2NDpnaSxfY2lkcnY2OnZpLF9jb2VyY2VkQmlnaW50OkRwLF9jb2VyY2VkQm9vbGVhbjpNcCxfY29lcmNlZERhdGU6UXAsX2NvZXJjZWROdW1iZXI6Q3AsX2NvZXJjZWRTdHJpbmc6VHAsX2NyZWRpdENhcmQ6UHAsX2N1aWQ6dWksX2N1aWQyOmxpLF9jdXN0b206dGYsX2RhdGU6R3AsX2RlY29kZTp2cyxfZGVjb2RlQXN5bmM6X3MsX2RlZmF1bHQ6R20sX2Rpc2NyaW1pbmF0ZWRVbmlvbjpNbSxfZTE2NDp5aSxfZW1haWw6dGksX2Vtb2ppOmFpLF9lbmNvZGU6Z3MsX2VuY29kZUFzeW5jOmJzLF9lbmRzV2l0aDpvbixfZW51bTpGbSxfZmlsZTplZixfZmxvYXQzMjpScCxfZmxvYXQ2NDpBcCxfZ3Q6eGUsX2d0ZTpsZSxfZ3VpZDpuaSxfaWJhbjp4cCxfaW5jbHVkZXM6dG4sX2ludDpPcCxfaW50MzI6WnAsX2ludDY0OkxwLF9pbnRlcnNlY3Rpb246cW0sX2lwdjQ6aGksX2lwdjY6bWksX2lzb0RhdGU6U2ksX2lzb0RhdGVUaW1lOiRpLF9pc29EdXJhdGlvbjpUaSxfaXNvVGltZTp6aSxfand0OndpLF9rc3VpZDpmaSxfbGF6eTpvZyxfbGVuZ3RoOnB0LF9saXRlcmFsOlZtLF9sb3dlcmNhc2U6WHQsX2x0OlBlLF9sdGU6dWUsX21hYzpJcCxfbWFwOlVtLF9tYXg6dWUsX21heExlbmd0aDpkdCxfbWF4U2l6ZTpXZSxfbWltZTpzbixfbWluOmxlLF9taW5MZW5ndGg6WmUsX21pblNpemU6RWUsX211bHRpcGxlT2Y6SGUsX25hbjpZcCxfbmFub2lkOmNpLF9uYXRpdmVFbnVtOkJtLF9uZWdhdGl2ZTpNbyxfbmV2ZXI6S3AsX25vbm5lZ2F0aXZlOkRvLF9ub25vcHRpb25hbDpRbSxfbm9ucG9zaXRpdmU6cW8sX25vcm1hbGl6ZTphbixfbnVsbDpCcCxfbnVsbGFibGU6V20sX251bWJlcjpFcCxfb3B0aW9uYWw6S20sX292ZXJ3cml0ZTprZSxfcGFyc2U6RnQsX3BhcnNlQXN5bmM6QnQsX3BpcGU6ZWcsX3Bvc2l0aXZlOmpvLF9wcm9taXNlOnJnLF9wcm9wZXJ0aWVzOnJuLF9wcm9wZXJ0eTpMbyxfcmVhZG9ubHk6dGcsX3JlY29yZDpMbSxfcmVmaW5lOm5mLF9yZWdleDpZdCxfc2FmZURlY29kZTp3cyxfc2FmZURlY29kZUFzeW5jOiRzLF9zYWZlRW5jb2RlOnlzLF9zYWZlRW5jb2RlQXN5bmM6a3MsX3NhZmVQYXJzZTpWdCxfc2FmZVBhcnNlQXN5bmM6SnQsX3NldDpIbSxfc2l6ZTpsdCxfc2x1Z2lmeTpkbixfc3RhcnRzV2l0aDpubixfc3RyaW5nOnpwLF9zdHJpbmdGb3JtYXQ6ZnQsX3N0cmluZ2Jvb2w6Y2YsX3N1Y2Nlc3M6WW0sX3N1cGVyUmVmaW5lOm9mLF9zeW1ib2w6SHAsX3RlbXBsYXRlTGl0ZXJhbDpuZyxfdG9Mb3dlckNhc2U6dW4sX3RvVXBwZXJDYXNlOmxuLF90cmFuc2Zvcm06Sm0sX3RyaW06Y24sX3R1cGxlOkRtLF91aW50MzI6TnAsX3VpbnQ2NDpVcCxfdWxpZDpkaSxfdW5kZWZpbmVkOkZwLF91bmlvbjpObSxfdW5rbm93bjpKcCxfdXBwZXJjYXNlOmVuLF91cmw6Tm8sX3V1aWQ6b2ksX3V1aWR2NDpyaSxfdXVpZHY2OnNpLF91dWlkdjc6aWksX3ZvaWQ6V3AsX3hpZDpwaSxfeG9yOmptLGJhc2U2NENoYXJzZXQ6d2QsYmFzZTY0dXJsQ2hhcnNldDpOcyxjYW5QYXJzZVVSTDpScyxjbG9uZTpILGNvbXBpbGU6WHMsY29tcGlsZUZuOlptLGNvbmZpZzpKLGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZDplcyxjcmVhdGVUb0pTT05TY2hlbWFNZXRob2Q6dWYsZGVjb2RlOlVoLGRlY29kZUFzeW5jOkZoLGRlc2NyaWJlOnNmLGVuY29kZTpMaCxlbmNvZGVBc3luYzpIaCxleHRyYWN0RGVmczpjZyxmaW5hbGl6ZTp1ZyxmbGF0dGVuRXJyb3I6em8sZm9ybWF0RXJyb3I6VG8sZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpEcyxnbG9iYWxDb25maWc6b2UsZ2xvYmFsUmVnaXN0cnk6aGUsaGFuZGxlVW5yZXByZXNlbnRhYmxlOmlnLGluaXRpYWxpemVDb250ZXh0OnNnLGlzQmFja0VkZ2U6a3AsaXNSZWN1cnNpdmVTY2hlbWE6Q20saXNWYWxpZEJhc2U2NDpacyxpc1ZhbGlkQmFzZTY0VVJMOiRkLGlzVmFsaWRDSURSdjY6X2QsaXNWYWxpZENyZWRpdENhcmQ6VGQsaXNWYWxpZElCQU46UGQsaXNWYWxpZElQdjY6QXMsaXNWYWxpZEpXVDpFZCxsb2NhbGVzOlZzLG1lbW9pemVyOlJvLG1lcmdlVmFsdWVzOnVvLG1ldGE6YWYscGFyc2U6S3IscGFyc2VBc3luYzpXcixwYXJzZVVSTE9iamVjdDplZCxwcmV0dGlmeUVycm9yOm1zLHByb2Nlc3M6bGcscHJvY2Vzc1NjaGVtYTphZyxyZWdleGVzOkNvLHJlZ2lzdHJ5OkFvLHNhZmVEZWNvZGU6Vmgsc2FmZURlY29kZUFzeW5jOktoLHNhZmVFbmNvZGU6Qmgsc2FmZUVuY29kZUFzeW5jOkpoLHNhZmVQYXJzZTpCdSxzYWZlUGFyc2VBc3luYzpqaCxzdGFuZGFyZFByb3BzOkNzLHN0cmlwVGFiQW5kTmV3bGluZTpRcix0b0RvdFBhdGg6RnUsdG9KU09OU2NoZW1hOklpLHRvWm9kOmdvLHRyZWVpZnlFcnJvcjpocyx1cmxIb3N0bmFtZU9rOnRkLHVybFByb3RvY29sT2s6bmQsdXRpbDpkcyx2YWxpZGF0ZTpQbyx2YWxpZGF0ZUFzeW5jOnhvLHZhbGlkYXRlVVJMOlhsLHZlcnNpb246S2wsd2l0aFBhcnNlcjplaX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxHYz1TeW1ib2woInoudmlzaXQvcmVzb2x2aW5nIik7ZnVuY3Rpb24gUGkoZSx0KXtjb25zdCBuPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6KGksYSk9Pntjb25zdCBjPXRbaS5fem9kLmRlZi50eXBlXTtyZXR1cm4gYz9jKGksYSk6aX0sbz1uZXcgTWFwO2Z1bmN0aW9uIHIoaSl7Y29uc3QgYT1vLmdldChpKTtpZihhPT09R2MpcmV0dXJuIG5ldyBCcyh7dHlwZToibGF6eSIsZ2V0dGVyOigpPT5vLmdldChpKX0pO2lmKGEhPT12b2lkIDApcmV0dXJuIGE7by5zZXQoaSxHYyk7Y29uc3QgYz1zKGkpLHU9bihjLGMhPT1pKTtyZXR1cm4gby5zZXQoaSx1KSx1fWZ1bmN0aW9uIHMoaSl7Y29uc3QgYT1pLl96b2QuZGVmO3N3aXRjaChhLnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgdT1hLnNoYXBlLGw9T2JqZWN0LmtleXModSk7bGV0IG09ITE7Y29uc3QgYj17fTtmb3IoY29uc3QgXyBvZiBsKXtjb25zdCB3PXIodVtfXSk7dyE9PXVbX10mJihtPSEwKSxiW19dPXd9bGV0IGc9YS5jYXRjaGFsbDtyZXR1cm4gYS5jYXRjaGFsbCYmKGc9cihhLmNhdGNoYWxsKSxnIT09YS5jYXRjaGFsbCYmKG09ITApKSxtP0goaSx7Li4uYSxzaGFwZTpiLGNhdGNoYWxsOmd9KTppfWNhc2UiYXJyYXkiOntjb25zdCB1PXIoYS5lbGVtZW50KTtyZXR1cm4gdT09PWEuZWxlbWVudD9pOkgoaSx7Li4uYSxlbGVtZW50OnV9KX1jYXNlInR1cGxlIjp7Y29uc3QgdT1hLml0ZW1zO2xldCBsPSExO2NvbnN0IG09W107Zm9yKGNvbnN0IGcgb2YgdSl7Y29uc3QgXz1yKGcpO18hPT1nJiYobD0hMCksbS5wdXNoKF8pfWxldCBiPWEucmVzdDtyZXR1cm4gYS5yZXN0JiYoYj1yKGEucmVzdCksYiE9PWEucmVzdCYmKGw9ITApKSxsP0goaSx7Li4uYSxpdGVtczptLHJlc3Q6Yn0pOml9Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjp7Y29uc3QgdT1yKGEua2V5VHlwZSksbD1yKGEudmFsdWVUeXBlKTtyZXR1cm4gdT09PWEua2V5VHlwZSYmbD09PWEudmFsdWVUeXBlP2k6SChpLHsuLi5hLGtleVR5cGU6dSx2YWx1ZVR5cGU6bH0pfWNhc2Uic2V0Ijp7Y29uc3QgdT1yKGEudmFsdWVUeXBlKTtyZXR1cm4gdT09PWEudmFsdWVUeXBlP2k6SChpLHsuLi5hLHZhbHVlVHlwZTp1fSl9Y2FzZSJ1bmlvbiI6e2NvbnN0IHU9YS5vcHRpb25zO2xldCBsPSExO2NvbnN0IG09W107Zm9yKGNvbnN0IGIgb2YgdSl7Y29uc3QgZz1yKGIpO2chPT1iJiYobD0hMCksbS5wdXNoKGcpfXJldHVybiBsP0goaSx7Li4uYSxvcHRpb25zOm19KTppfWNhc2UiaW50ZXJzZWN0aW9uIjp7Y29uc3QgdT1yKGEubGVmdCksbD1yKGEucmlnaHQpO3JldHVybiB1PT09YS5sZWZ0JiZsPT09YS5yaWdodD9pOkgoaSx7Li4uYSxsZWZ0OnUscmlnaHQ6bH0pfWNhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOntjb25zdCB1PXIoYS5pbm5lclR5cGUpO3JldHVybiB1PT09YS5pbm5lclR5cGU/aTpIKGksey4uLmEsaW5uZXJUeXBlOnV9KX1jYXNlInBpcGUiOntjb25zdCB1PXIoYS5pbiksbD1yKGEub3V0KTtyZXR1cm4gdT09PWEuaW4mJmw9PT1hLm91dD9pOkgoaSx7Li4uYSxpbjp1LG91dDpsfSl9Y2FzZSJmdW5jdGlvbiI6e2NvbnN0IHU9cihhLmlucHV0KSxsPXIoYS5vdXRwdXQpO3JldHVybiB1PT09YS5pbnB1dCYmbD09PWEub3V0cHV0P2k6SChpLHsuLi5hLGlucHV0OnUsb3V0cHV0Omx9KX1jYXNlImxhenkiOntjb25zdCB1PWEuZ2V0dGVyLHtfY2FjaGVkSW5uZXI6bCwuLi5tfT1hO3JldHVybiBIKGksey4uLm0sZ2V0dGVyOigpPT5yKHUoKSl9KX1jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6cmV0dXJuIGk7ZGVmYXVsdDpyZXR1cm4gaX19cmV0dXJuIHIoZSl9ZnVuY3Rpb24geGkoZSl7cmV0dXJuISFlLl96b2R9ZnVuY3Rpb24gZmYoZSx0KXtyZXR1cm4geGkoZSk/QnUoZSx0KTplLnNhZmVQYXJzZSh0KX1mdW5jdGlvbiBHZyhlKXtpZighZSlyZXR1cm47bGV0IHQ7aWYoeGkoZSk/dD1lLl96b2Q/LmRlZj8uc2hhcGU6dD1lLnNoYXBlLCEhdCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpdHJ5e3JldHVybiB0KCl9Y2F0Y2h7cmV0dXJufXJldHVybiB0fX1mdW5jdGlvbiBRZyhlKXtpZih4aShlKSl7Y29uc3Qgcz1lLl96b2Q/LmRlZjtpZihzKXtpZihzLnZhbHVlIT09dm9pZCAwKXJldHVybiBzLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocy52YWx1ZXMpJiZzLnZhbHVlcy5sZW5ndGg+MClyZXR1cm4gcy52YWx1ZXNbMF19fWNvbnN0IG49ZS5fZGVmO2lmKG4pe2lmKG4udmFsdWUhPT12b2lkIDApcmV0dXJuIG4udmFsdWU7aWYoQXJyYXkuaXNBcnJheShuLnZhbHVlcykmJm4udmFsdWVzLmxlbmd0aD4wKXJldHVybiBuLnZhbHVlc1swXX1jb25zdCBvPWUudmFsdWU7aWYobyE9PXZvaWQgMClyZXR1cm4gb31jb25zdCBZZz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW5kc1dpdGg6b24sZ3Q6eGUsZ3RlOmxlLGluY2x1ZGVzOnRuLGxlbmd0aDpwdCxsb3dlcmNhc2U6WHQsbHQ6UGUsbHRlOnVlLG1heExlbmd0aDpkdCxtYXhTaXplOldlLG1pbWU6c24sbWluTGVuZ3RoOlplLG1pblNpemU6RWUsbXVsdGlwbGVPZjpIZSxuZWdhdGl2ZTpNbyxub25uZWdhdGl2ZTpEbyxub25wb3NpdGl2ZTpxbyxub3JtYWxpemU6YW4sb3ZlcndyaXRlOmtlLHBvc2l0aXZlOmpvLHByb3BlcnRpZXM6cm4scHJvcGVydHk6TG8scmVnZXg6WXQsc2l6ZTpsdCxzbHVnaWZ5OmRuLHN0YXJ0c1dpdGg6bm4sdG9Mb3dlckNhc2U6dW4sdG9VcHBlckNhc2U6bG4sdHJpbTpjbix1cHBlcmNhc2U6ZW59LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksUWM9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSk7ZnVuY3Rpb24gZW8oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89bih0aGlzKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KX1jb25zdCBoZj0oZSx0KT0+e0h1LmluaXQoZSx0KSxlLm5hbWU9IlpvZEVycm9yIjtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtRYy5oYXMobil8fChRYy5hZGQobiksZW8obiwiZm9ybWF0IixvPT5yPT5UbyhvLHIpKSxlbyhuLCJmbGF0dGVuIixvPT5yPT56byhvLHIpKSxlbyhuLCJhZGRJc3N1ZSIsbz0+cj0+e28uaXNzdWVzLnB1c2gociksby5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KG8uaXNzdWVzLHJvLDIpfSksZW8obiwiYWRkSXNzdWVzIixvPT5yPT57by5pc3N1ZXMucHVzaCguLi5yKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMscm8sMil9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiaXNFbXB0eSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLmlzc3Vlcy5sZW5ndGg9PT0wfX0pKX0sbWY9cCgiWm9kRXJyb3IiLGhmKSxhZT1wKCJab2RFcnJvciIsaGYsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KSxFaT1GdChhZSksQ2k9QnQoYWUpLE9pPVZ0KGFlKSxSaT1KdChhZSksQWk9Z3MoYWUpLFppPXZzKGFlKSxOaT1icyhhZSksamk9X3MoYWUpLE1pPXlzKGFlKSxxaT13cyhhZSksRGk9a3MoYWUpLExpPSRzKGFlKTtmdW5jdGlvbiBYZygpe29lLmxvY2FsZUVycm9yfHxKKCRwKCkpfWZ1bmN0aW9uIEdlKCl7b2UubWVtb2l6ZXJ8fEooe21lbW9pemVyOlJvKCl9KX1jb25zdCBJPXAoIlpvZFR5cGUiLChlLHQpPT4oWGcoKSx6LmluaXQoZSx0KSxlLmRlZj10LGUudHlwZT10LnR5cGUsZSkse2NoZWNrKC4uLmUpe2NvbnN0IHQ9dGhpcy5kZWY7cmV0dXJuIHRoaXMuY2xvbmUoZWUodCx7Y2hlY2tzOlsuLi50LmNoZWNrcz8/W10sLi4uZS5tYXAobj0+dHlwZW9mIG49PSJmdW5jdGlvbiI/e196b2Q6e2NoZWNrOm4sZGVmOntjaGVjazoiY3VzdG9tIn0sb25hdHRhY2g6W119fTpuKV19KSx7cGFyZW50OiEwfSl9LHdpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soLi4uZSl9LGNsb25lKGUsdCl7cmV0dXJuIEgodGhpcyxlLHQpfSxicmFuZCgpe3JldHVybiB0aGlzfSxyZWdpc3RlcihlLHQpe3JldHVybiBlLmFkZCh0aGlzLHQpLHRoaXN9LHJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKHhyKGUsdCkpfSxzdXBlclJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKEVyKGUsdCkpfSxvdmVyd3JpdGUoZSl7cmV0dXJuIHRoaXMuY2hlY2soa2UoZSkpfSxvcHRpb25hbCgpe3JldHVybiBEKHRoaXMpfSxleGFjdE9wdGlvbmFsKCl7cmV0dXJuIHVyKHRoaXMpfSxudWxsYWJsZSgpe3JldHVybiBpdCh0aGlzKX0sbnVsbGlzaCgpe3JldHVybiBEKGl0KHRoaXMpKX0sbm9ub3B0aW9uYWwoZSl7cmV0dXJuIG1yKHRoaXMsZSl9LGFycmF5KCl7cmV0dXJuICQodGhpcyl9LG9yKGUpe3JldHVybiBQKFt0aGlzLGVdKX0sYW5kKGUpe3JldHVybiB6dCh0aGlzLGUpfSx0cmFuc2Zvcm0oZSl7cmV0dXJuIGp0KHRoaXMsWm4oZSkpfSxkZWZhdWx0KGUpe3JldHVybiBwcih0aGlzLGUpfSxwcmVmYXVsdChlKXtyZXR1cm4gaHIodGhpcyxlKX0sY2F0Y2goZSl7cmV0dXJuIGJyKHRoaXMsZSl9LHBpcGUoZSl7cmV0dXJuIGp0KHRoaXMsZSl9LHJlYWRvbmx5KCl7cmV0dXJuIGtyKHRoaXMpfSxkZXNjcmliZShlKXtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gaGUuYWRkKHQse2Rlc2NyaXB0aW9uOmV9KSx0fSxtZXRhKC4uLmUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4gaGUuZ2V0KHRoaXMpO2NvbnN0IHQ9dGhpcy5jbG9uZSgpO3JldHVybiBoZS5hZGQodCxlWzBdKSx0fSxpc09wdGlvbmFsKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKHZvaWQgMCkuc3VjY2Vzc30saXNOdWxsYWJsZSgpe3JldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzfSxhcHBseShlLC4uLnQpe3JldHVybiB0Lmxlbmd0aD09PTA/ZSh0aGlzKTplKHRoaXMsLi4udCl9LGdldCJ+c3RhbmRhcmQiKCl7cmV0dXJuICRvKHRoaXMsIn5zdGFuZGFyZCIsey4uLkNzKHRoaXMpLGpzb25TY2hlbWE6e2lucHV0OmVzKCksb3V0cHV0OmVzKCl9fSl9LHNldCJ+c3RhbmRhcmQiKGUpe0llKHRoaXMsIn5zdGFuZGFyZCIsZSl9LHBhcnNlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gRWkodGhpcyx0LG4se2NhbGxlZTplfSl9LHBhcnNlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBDaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZVBhcnNlKGUsdCl7cmV0dXJuIE9pKHRoaXMsZSx0KX0sYXN5bmMgc2FmZVBhcnNlQXN5bmMoZSx0KXtyZXR1cm4gUmkodGhpcyxlLHQpfSxnZXQgc3BhKCl7cmV0dXJuIHRoaXM/LnNhZmVQYXJzZUFzeW5jfSxzZXQgc3BhKGUpe0llKHRoaXMsInNwYSIsZSl9LHZhbGlkYXRlKGUsdCl7cmV0dXJuIFBvKHRoaXMsZSx0KX0sdmFsaWRhdGVBc3luYyhlLHQpe3JldHVybiB4byh0aGlzLGUsdCl9LGVuY29kZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIEFpKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxkZWNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBaaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZW5jb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBOaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBqaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZUVuY29kZShlLHQpe3JldHVybiBNaSh0aGlzLGUsdCl9LHNhZmVEZWNvZGUoZSx0KXtyZXR1cm4gcWkodGhpcyxlLHQpfSxhc3luYyBzYWZlRW5jb2RlQXN5bmMoZSx0KXtyZXR1cm4gRGkodGhpcyxlLHQpfSxhc3luYyBzYWZlRGVjb2RlQXN5bmMoZSx0KXtyZXR1cm4gTGkodGhpcyxlLHQpfSx0b0pTT05TY2hlbWEoZSl7cmV0dXJuIHVmKCkoZSl9LGdldCBkZXNjcmlwdGlvbigpe3JldHVybiBoZS5nZXQodGhpcyk/LmRlc2NyaXB0aW9ufSxnZXQgX2RlZigpe3JldHVybiB0aGlzLl96b2QuZGVmfX0pLHBuPXAoIl9ab2RTdHJpbmciLChlLHQpPT57UXQuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5kZygpfSxIdCh7Zm9ybWF0OmU9Pm1lKCkuZm9ybWF0Pz9udWxsLG1pbkxlbmd0aDplPT5tZSgpLm1pbmltdW0/P251bGwsbWF4TGVuZ3RoOmU9Pm1lKCkubWF4aW11bT8/bnVsbH0se3JlZ2V4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFl0KC4uLmUpKX0saW5jbHVkZXMoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sodG4oLi4uZSkpfSxzdGFydHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKG5uKC4uLmUpKX0sZW5kc1dpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sob24oLi4uZSkpfSxtaW4oLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soWmUoLi4uZSkpfSxtYXgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soZHQoLi4uZSkpfSxsZW5ndGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2socHQoLi4uZSkpfSxub25lbXB0eSguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhaZSgxLC4uLmUpKX0sbG93ZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKFh0KGUpKX0sdXBwZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKGVuKGUpKX0sdHJpbSgpe3JldHVybiB0aGlzLmNoZWNrKGNuKCkpfSxub3JtYWxpemUoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soYW4oLi4uZSkpfSx0b0xvd2VyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKHVuKCkpfSx0b1VwcGVyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKGxuKCkpfSxzbHVnaWZ5KCl7cmV0dXJuIHRoaXMuY2hlY2soZG4oKSl9fSkpLGh0PXAoIlpvZFN0cmluZyIsKGUsdCk9PntRdC5pbml0KGUsdCkscG4uaW5pdChlLHQpfSx7ZW1haWwoZSl7cmV0dXJuIHRoaXMuY2hlY2sodGkoZm4sZSkpfSx1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soTm8oX3QsZSkpfSxqd3QoZSl7cmV0dXJuIHRoaXMuY2hlY2sod2koeG4sZSkpfSxlbW9qaShlKXtyZXR1cm4gdGhpcy5jaGVjayhhaShtbixlKSl9LGd1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2sobmkoaG4sZSkpfSx1dWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKG9pKF9lLGUpKX0sdXVpZHY0KGUpe3JldHVybiB0aGlzLmNoZWNrKHJpKF9lLGUpKX0sdXVpZHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKHNpKF9lLGUpKX0sdXVpZHY3KGUpe3JldHVybiB0aGlzLmNoZWNrKGlpKF9lLGUpKX0sbmFub2lkKGUpe3JldHVybiB0aGlzLmNoZWNrKGNpKGduLGUpKX0sY3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayh1aSh2bixlKSl9LGN1aWQyKGUpe3JldHVybiB0aGlzLmNoZWNrKGxpKGJuLGUpKX0sdWxpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhkaShfbixlKSl9LGJhc2U2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhiaShUbixlKSl9LGJhc2U2NHVybChlKXtyZXR1cm4gdGhpcy5jaGVjayhfaShJbixlKSl9LHhpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhwaSh5bixlKSl9LGtzdWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKGZpKHduLGUpKX0saXB2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhoaShrbixlKSl9LGlwdjYoZSl7cmV0dXJuIHRoaXMuY2hlY2sobWkoJG4sZSkpfSxjaWRydjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soZ2koU24sZSkpfSxjaWRydjYoZSl7cmV0dXJuIHRoaXMuY2hlY2sodmkoem4sZSkpfSxlMTY0KGUpe3JldHVybiB0aGlzLmNoZWNrKHlpKFBuLGUpKX0sZGF0ZXRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2soJGkobXQsZSkpfSxkYXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKFNpKGd0LGUpKX0sdGltZShlKXtyZXR1cm4gdGhpcy5jaGVjayh6aSh2dCxlKSl9LGR1cmF0aW9uKGUpe3JldHVybiB0aGlzLmNoZWNrKFRpKGJ0LGUpKX19KTtmdW5jdGlvbiBmKGUpe3JldHVybiB6cChodCxlKX1jb25zdCBqPXAoIlpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9PntxLmluaXQoZSx0KSxwbi5pbml0KGUsdCl9KSxtdD1wKCJab2RJU09EYXRlVGltZSIsKGUsdCk9PntkZC5pbml0KGUsdCksai5pbml0KGUsdCl9KSxndD1wKCJab2RJU09EYXRlIiwoZSx0KT0+e3BkLmluaXQoZSx0KSxqLmluaXQoZSx0KX0pLHZ0PXAoIlpvZElTT1RpbWUiLChlLHQpPT57ZmQuaW5pdChlLHQpLGouaW5pdChlLHQpfSksYnQ9cCgiWm9kSVNPRHVyYXRpb24iLChlLHQpPT57aGQuaW5pdChlLHQpLGouaW5pdChlLHQpfSksZm49cCgiWm9kRW1haWwiLChlLHQpPT57WWwuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gVWkoZSl7cmV0dXJuIHRpKGZuLGUpfWNvbnN0IGhuPXAoIlpvZEdVSUQiLChlLHQpPT57R2wuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gSGkoZSl7cmV0dXJuIG5pKGhuLGUpfWNvbnN0IF9lPXAoIlpvZFVVSUQiLChlLHQpPT57UWwuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gRmkoZSl7cmV0dXJuIG9pKF9lLGUpfWZ1bmN0aW9uIEJpKGUpe3JldHVybiByaShfZSxlKX1mdW5jdGlvbiBWaShlKXtyZXR1cm4gc2koX2UsZSl9ZnVuY3Rpb24gSmkoZSl7cmV0dXJuIGlpKF9lLGUpfWNvbnN0IF90PXAoIlpvZFVSTCIsKGUsdCk9PntvZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiBLaShlKXtyZXR1cm4gTm8oX3QsZSl9ZnVuY3Rpb24gV2koZSl7cmV0dXJuIE5vKF90LHtwcm90b2NvbDpTcyxob3N0bmFtZTpkbCwuLi55KGUpfSl9Y29uc3QgbW49cCgiWm9kRW1vamkiLChlLHQpPT57cmQuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gR2koZSl7cmV0dXJuIGFpKG1uLGUpfWNvbnN0IGduPXAoIlpvZE5hbm9JRCIsKGUsdCk9PntzZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiBRaShlKXtyZXR1cm4gY2koZ24sZSl9Y29uc3Qgdm49cCgiWm9kQ1VJRCIsKGUsdCk9PntpZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiBZaShlKXtyZXR1cm4gdWkodm4sZSl9Y29uc3QgYm49cCgiWm9kQ1VJRDIiLChlLHQpPT57YWQuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gWGkoZSl7cmV0dXJuIGxpKGJuLGUpfWNvbnN0IF9uPXAoIlpvZFVMSUQiLChlLHQpPT57Y2QuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gZWEoZSl7cmV0dXJuIGRpKF9uLGUpfWNvbnN0IHluPXAoIlpvZFhJRCIsKGUsdCk9Pnt1ZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiB0YShlKXtyZXR1cm4gcGkoeW4sZSl9Y29uc3Qgd249cCgiWm9kS1NVSUQiLChlLHQpPT57bGQuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gbmEoZSl7cmV0dXJuIGZpKHduLGUpfWNvbnN0IGtuPXAoIlpvZElQdjQiLChlLHQpPT57bWQuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gb2EoZSl7cmV0dXJuIGhpKGtuLGUpfWNvbnN0IFVvPXAoIlpvZE1BQyIsKGUsdCk9Pnt2ZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiByYShlKXtyZXR1cm4gSXAoVW8sZSl9Y29uc3QgJG49cCgiWm9kSVB2NiIsKGUsdCk9PntnZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiBzYShlKXtyZXR1cm4gbWkoJG4sZSl9Y29uc3QgU249cCgiWm9kQ0lEUnY0IiwoZSx0KT0+e2JkLmluaXQoZSx0KSxqLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGlhKGUpe3JldHVybiBnaShTbixlKX1jb25zdCB6bj1wKCJab2RDSURSdjYiLChlLHQpPT57eWQuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gYWEoZSl7cmV0dXJuIHZpKHpuLGUpfWNvbnN0IFRuPXAoIlpvZEJhc2U2NCIsKGUsdCk9PntrZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiBjYShlKXtyZXR1cm4gYmkoVG4sZSl9Y29uc3QgSW49cCgiWm9kQmFzZTY0VVJMIiwoZSx0KT0+e1NkLmluaXQoZSx0KSxqLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHVhKGUpe3JldHVybiBfaShJbixlKX1jb25zdCBQbj1wKCJab2RFMTY0IiwoZSx0KT0+e3pkLmluaXQoZSx0KSxqLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGxhKGUpe3JldHVybiB5aShQbixlKX1jb25zdCBIbz1wKCJab2RDcmVkaXRDYXJkIiwoZSx0KT0+e0lkLmluaXQoZSx0KSxqLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGRhKGUpe3JldHVybiBQcChIbyxlKX1jb25zdCBGbz1wKCJab2RJQkFOIiwoZSx0KT0+e3hkLmluaXQoZSx0KSxqLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHBhKGUpe3JldHVybiB4cChGbyxlKX1jb25zdCB4bj1wKCJab2RKV1QiLChlLHQpPT57Q2QuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gZmEoZSl7cmV0dXJuIHdpKHhuLGUpfWNvbnN0IE5lPXAoIlpvZEN1c3RvbVN0cmluZ0Zvcm1hdCIsKGUsdCk9PntPZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiBoYShlLHQsbj17fSl7cmV0dXJuIGZ0KE5lLGUsdCxuKX1mdW5jdGlvbiBtYShlKXtyZXR1cm4gZnQoTmUsImhvc3RuYW1lIixsbCxlKX1mdW5jdGlvbiBnYShlKXtyZXR1cm4gZnQoTmUsImhleCIsSWwsZSl9ZnVuY3Rpb24gdmEoZSl7cmV0dXJuIGZ0KE5lLCJjdXJyZW5jeV9jb2RlIixmbCxlKX1mdW5jdGlvbiBiYShlLHQpe2NvbnN0IG49dD8uZW5jPz8iaGV4IixvPWAke2V9XyR7bn1gLHI9Q29bb107aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgaGFzaCBmb3JtYXQ6ICR7b31gKTtyZXR1cm4gZnQoTmUsbyxyLHQpfWNvbnN0IHl0PXAoIlpvZE51bWJlciIsKGUsdCk9Pntqcy5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnBnKCksZS5pc0Zpbml0ZT0hMH0sSHQoe21pblZhbHVlOmU9Pntjb25zdHttaW5pbXVtOnQsZXhjbHVzaXZlTWluaW11bTpufT1tZSgpO3JldHVybiBNYXRoLm1heCh0Pz9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKX0sbWF4VmFsdWU6ZT0+e2NvbnN0e21heGltdW06dCxleGNsdXNpdmVNYXhpbXVtOm59PW1lKCk7cmV0dXJuIE1hdGgubWluKHQ/P051bWJlci5QT1NJVElWRV9JTkZJTklUWSxuPz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpfSxpc0ludDplPT57Y29uc3R7aXNJbnQ6dCxtdWx0aXBsZU9mOm59PW1lKCk7cmV0dXJuISF0fHwhIW4/LnNvbWUoTnVtYmVyLmlzU2FmZUludGVnZXIpfSxmb3JtYXQ6ZT0+bWUoKS5mb3JtYXQ/P251bGx9LHtndChlLHQpe3JldHVybiB0aGlzLmNoZWNrKHhlKGUsdCkpfSxndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhsZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sobGUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soUGUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKHVlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh1ZShlLHQpKX0saW50KGUpe3JldHVybiB0aGlzLmNoZWNrKE50KGUpKX0sc2FmZShlKXtyZXR1cm4gdGhpcy5jaGVjayhOdChlKSl9LHBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKHhlKDAsZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhsZSgwLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soUGUoMCxlKSl9LG5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKHVlKDAsZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soSGUoZSx0KSl9LHN0ZXAoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhIZShlLHQpKX0sZmluaXRlKCl7cmV0dXJuIHRoaXN9fSkpO2Z1bmN0aW9uIFQoZSl7cmV0dXJuIEVwKHl0LGUpfWNvbnN0IGplPXAoIlpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntSZC5pbml0KGUsdCkseXQuaW5pdChlLHQpfSk7ZnVuY3Rpb24gTnQoZSl7cmV0dXJuIE9wKGplLGUpfWZ1bmN0aW9uIF9hKGUpe3JldHVybiBScChqZSxlKX1mdW5jdGlvbiB5YShlKXtyZXR1cm4gQXAoamUsZSl9ZnVuY3Rpb24gd2EoZSl7cmV0dXJuIFpwKGplLGUpfWZ1bmN0aW9uIGthKGUpe3JldHVybiBOcChqZSxlKX1jb25zdCB3dD1wKCJab2RCb29sZWFuIiwoZSx0KT0+e01zLmluaXQoZSx0KSxJLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+ZmcoKX0pO2Z1bmN0aW9uIE4oZSl7cmV0dXJuIGpwKHd0LGUpfWNvbnN0IGt0PXAoIlpvZEJpZ0ludCIsKGUsdCk9Pntxcy5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmhnKCl9LEh0KHttaW5WYWx1ZTplPT5tZSgpLm1pbmltdW0/P251bGwsbWF4VmFsdWU6ZT0+bWUoKS5tYXhpbXVtPz9udWxsLGZvcm1hdDplPT5tZSgpLmZvcm1hdD8/bnVsbH0se2d0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGxlKGUsdCkpfSxtaW4oZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhsZShlLHQpKX0sZ3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh4ZShlLHQpKX0sbHQoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhQZShlLHQpKX0sbHRlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodWUoZSx0KSl9LG1heChlLHQpe3JldHVybiB0aGlzLmNoZWNrKHVlKGUsdCkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayh4ZShCaWdJbnQoMCksZSkpfSxuZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhQZShCaWdJbnQoMCksZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayh1ZShCaWdJbnQoMCksZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhsZShCaWdJbnQoMCksZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soSGUoZSx0KSl9fSkpO2Z1bmN0aW9uICRhKGUpe3JldHVybiBxcChrdCxlKX1jb25zdCBFbj1wKCJab2RCaWdJbnRGb3JtYXQiLChlLHQpPT57QWQuaW5pdChlLHQpLGt0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIFNhKGUpe3JldHVybiBMcChFbixlKX1mdW5jdGlvbiB6YShlKXtyZXR1cm4gVXAoRW4sZSl9Y29uc3QgQm89cCgiWm9kU3ltYm9sIiwoZSx0KT0+e1pkLmluaXQoZSx0KSxJLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bWcoKX0pO2Z1bmN0aW9uIFRhKGUpe3JldHVybiBIcChCbyxlKX1jb25zdCBWbz1wKCJab2RVbmRlZmluZWQiLChlLHQpPT57TmQuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT52ZygpfSk7ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIEZwKFZvLGUpfWNvbnN0IEpvPXAoIlpvZE51bGwiLChlLHQpPT57amQuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5nZygpfSk7ZnVuY3Rpb24gQ24oZSl7cmV0dXJuIEJwKEpvLGUpfWNvbnN0IEtvPXAoIlpvZEFueSIsKGUsdCk9PntNZC5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnlnKCl9KTtmdW5jdGlvbiBPbigpe3JldHVybiBWcChLbyl9Y29uc3QgV289cCgiWm9kVW5rbm93biIsKGUsdCk9PntxZC5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PndnKCl9KTtmdW5jdGlvbiBaKCl7cmV0dXJuIEpwKFdvKX1jb25zdCBHbz1wKCJab2ROZXZlciIsKGUsdCk9PntEZC5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pl9nKCl9KTtmdW5jdGlvbiBGZShlKXtyZXR1cm4gS3AoR28sZSl9Y29uc3QgUW89cCgiWm9kVm9pZCIsKGUsdCk9PntMZC5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmJnKCl9KTtmdW5jdGlvbiBJYShlKXtyZXR1cm4gV3AoUW8sZSl9Y29uc3QgUm49cCgiWm9kRGF0ZSIsKGUsdCk9PntVZC5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmtnKCksZS5taW49KG4sbyk9PmUuY2hlY2sobGUobixvKSksZS5tYXg9KG4sbyk9PmUuY2hlY2sodWUobixvKSl9LEh0KHttaW5EYXRlOmU9Pntjb25zdHttaW5pbXVtOnR9PW1lKCk7cmV0dXJuIHQ/bmV3IERhdGUodCk6bnVsbH0sbWF4RGF0ZTplPT57Y29uc3R7bWF4aW11bTp0fT1tZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9fSx7fSkpO2Z1bmN0aW9uIFBhKGUpe3JldHVybiBHcChSbixlKX1jb25zdCBZbz1wKCJab2RBcnJheSIsKGUsdCk9PntHZSgpLEhkLmluaXQoZSx0KSxJLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+QWcoKSxlLmVsZW1lbnQ9dC5lbGVtZW50fSx7bWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soWmUoZSx0KSl9LG5vbmVtcHR5KGUpe3JldHVybiB0aGlzLmNoZWNrKFplKDEsZSkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhkdChlLHQpKX0sbGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socHQoZSx0KSl9LHVud3JhcCgpe3JldHVybiB0aGlzLmVsZW1lbnR9fSk7ZnVuY3Rpb24gJChlLHQpe3JldHVybiBYcChZbyxlLHQpfWZ1bmN0aW9uIHhhKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZi5zaGFwZTtyZXR1cm4gRyhPYmplY3Qua2V5cyh0KSl9Y29uc3QgJHQ9cCgiWm9kT2JqZWN0IiwoZSx0KT0+e0dlKCksSmQuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5aZygpLER1KGUsInNoYXBlIixuPT5uLl96b2QuZGVmLnNoYXBlLCExKX0se2tleW9mKCl7cmV0dXJuIEcoT2JqZWN0LmtleXModGhpcy5fem9kLmRlZi5zaGFwZSkpfSxjYXRjaGFsbChlKXtyZXR1cm4gdGhpcy5jbG9uZShlZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKGVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOlooKX0pKX0sbG9vc2UoKXtyZXR1cm4gdGhpcy5jbG9uZShlZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpaKCl9KSl9LHN0cmljdCgpe3JldHVybiB0aGlzLmNsb25lKGVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOkZlKCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUoZWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6dm9pZCAwfSkpfSxleHRlbmQoZSl7cmV0dXJuIEV1KHRoaXMsZSl9LHNhZmVFeHRlbmQoZSl7cmV0dXJuIE91KHRoaXMsZSl9LG1lcmdlKGUpe3JldHVybiBSdSh0aGlzLGUpfSxwaWNrKGUpe3JldHVybiBQdSh0aGlzLGUpfSxvbWl0KGUpe3JldHVybiB4dSh0aGlzLGUpfSxwYXJ0aWFsKC4uLmUpe3JldHVybiBWcihUdCx0aGlzLGVbMF0pfSxleGFjdFBhcnRpYWwoLi4uZSl7cmV0dXJuIFZyKE5uLHRoaXMsZVswXSwiZXhhY3RQYXJ0aWFsIil9LHJlcXVpcmVkKC4uLmUpe3JldHVybiBBdShqbix0aGlzLGVbMF0pfX0pO2Z1bmN0aW9uIHYoZSx0KXtjb25zdCBuPXt0eXBlOiJvYmplY3QiLHNoYXBlOmU/P3t9LC4uLnkodCl9O3JldHVybiBuZXcgJHQobil9ZnVuY3Rpb24gRWEoZSx0KXtyZXR1cm4gbmV3ICR0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6RmUoKSwuLi55KHQpfSl9ZnVuY3Rpb24gVyhlLHQpe3JldHVybiBuZXcgJHQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpaKCksLi4ueSh0KX0pfWNvbnN0IFN0PXAoIlpvZFVuaW9uIiwoZSx0KT0+e09vLmluaXQoZSx0KSxJLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bGYoKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gUChlLHQpe3JldHVybiBuZXcgU3Qoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsLi4ueSh0KX0pfWNvbnN0IFhvPXAoIlpvZFhvciIsKGUsdCk9PntTdC5pbml0KGUsdCksS2QuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5sZigpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiBDYShlLHQpe3JldHVybiBuZXcgWG8oe3R5cGU6InVuaW9uIixvcHRpb25zOmUsaW5jbHVzaXZlOiExLC4uLnkodCl9KX1jb25zdCBlcj1wKCJab2REaXNjcmltaW5hdGVkVW5pb24iLChlLHQpPT57U3QuaW5pdChlLHQpLEdkLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEFuKGUsdCxuKXtyZXR1cm4gbmV3IGVyKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGRpc2NyaW1pbmF0b3I6ZSwuLi55KG4pfSl9Y29uc3QgdHI9cCgiWm9kSW50ZXJzZWN0aW9uIiwoZSx0KT0+e1FkLmluaXQoZSx0KSxJLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+TmcoKX0pO2Z1bmN0aW9uIHp0KGUsdCl7cmV0dXJuIG5ldyB0cih7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OmUscmlnaHQ6dH0pfWNvbnN0IG5yPXAoIlpvZFR1cGxlIiwoZSx0KT0+e0dlKCksTHMuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5qZygpfSx7cmVzdChlKXtyZXR1cm4gdGhpcy5jbG9uZSh7Li4udGhpcy5fem9kLmRlZixyZXN0OmV9KX0scGFydGlhbCgpe2NvbnN0IGU9dGhpcy5fem9kLmRlZjtpZihlLmNoZWNrcz8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiLnBhcnRpYWwoKSBjYW5ub3QgYmUgdXNlZCBvbiB0dXBsZSBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtyZXR1cm4gdGhpcy5jbG9uZSh7Li4uZSxpdGVtczplLml0ZW1zLm1hcCh0PT5uZXcgVHQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pKX0pfX0pO2Z1bmN0aW9uIG9yKGUsdCxuKXtjb25zdCBvPXQgaW5zdGFuY2VvZiB6LHI9bz9uOnQscz1vP3Q6bnVsbDtyZXR1cm4gbmV3IG5yKHt0eXBlOiJ0dXBsZSIsaXRlbXM6ZSxyZXN0OnMsLi4ueShyKX0pfWNvbnN0IEJlPXAoIlpvZFJlY29yZCIsKGUsdCk9PntHZSgpLFlkLmluaXQoZSx0KSxJLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+TWcoKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlfSk7ZnVuY3Rpb24gQyhlLHQsbil7cmV0dXJuIXR8fCF0Ll96b2Q/bmV3IEJlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZigpLHZhbHVlVHlwZTplLC4uLnkodCl9KTpuZXcgQmUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnkobil9KX1mdW5jdGlvbiBPYShlLHQsbil7cmV0dXJuIG5ldyBCZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4ueShuKSxwYXJ0aWFsOiEwfSl9ZnVuY3Rpb24gUmEoZSx0LG4pe3JldHVybiBuZXcgQmUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LG1vZGU6Imxvb3NlIiwuLi55KG4pfSl9Y29uc3QgcnI9cCgiWm9kTWFwIiwoZSx0KT0+e0dlKCksWGQuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5PZygpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGUsZS5taW49KC4uLm4pPT5lLmNoZWNrKEVlKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soRWUoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKFdlKC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKGx0KC4uLm4pKX0pO2Z1bmN0aW9uIEFhKGUsdCxuKXtyZXR1cm4gbmV3IHJyKHt0eXBlOiJtYXAiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi55KG4pfSl9Y29uc3Qgc3I9cCgiWm9kU2V0IiwoZSx0KT0+e0dlKCksZXAuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5SZygpLGUubWluPSguLi5uKT0+ZS5jaGVjayhFZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKEVlKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhXZSguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayhsdCguLi5uKSl9KTtmdW5jdGlvbiBaYShlLHQpe3JldHVybiBuZXcgc3Ioe3R5cGU6InNldCIsdmFsdWVUeXBlOmUsLi4ueSh0KX0pfWNvbnN0IFZlPXAoIlpvZEVudW0iLChlLHQpPT57dHAuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obyxyLHMpPT4kZygpLGUuZW51bT10LmVudHJpZXMsZS5vcHRpb25zPVsuLi5lLl96b2QudmFsdWVzXTtjb25zdCBuPW5ldyBTZXQoT2JqZWN0LmtleXModC5lbnRyaWVzKSk7ZS5leHRyYWN0PShvLHIpPT57Y29uc3Qgcz17fTtmb3IoY29uc3QgaSBvZiBvKWlmKG4uaGFzKGkpKXNbaV09dC5lbnRyaWVzW2ldO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtpfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgVmUoey4uLnQsY2hlY2tzOltdLC4uLnkociksZW50cmllczpzfSl9LGUuZXhjbHVkZT0obyxyKT0+e2NvbnN0IHM9ey4uLnQuZW50cmllc307Zm9yKGNvbnN0IGkgb2YgbylpZihuLmhhcyhpKSlkZWxldGUgc1tpXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7aX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IFZlKHsuLi50LGNoZWNrczpbXSwuLi55KHIpLGVudHJpZXM6c30pfX0pO2Z1bmN0aW9uIEcoZSx0KXtjb25zdCBuPUFycmF5LmlzQXJyYXkoZSk/T2JqZWN0LmZyb21FbnRyaWVzKGUubWFwKG89PltvLG9dKSk6ZTtyZXR1cm4gbmV3IFZlKHt0eXBlOiJlbnVtIixlbnRyaWVzOm4sLi4ueSh0KX0pfWZ1bmN0aW9uIE5hKGUsdCl7cmV0dXJuIG5ldyBWZSh7dHlwZToiZW51bSIsZW50cmllczplLC4uLnkodCl9KX1jb25zdCBpcj1wKCJab2RMaXRlcmFsIiwoZSx0KT0+e25wLmluaXQoZSx0KSxJLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+U2coKSxlLnZhbHVlcz1uZXcgU2V0KHQudmFsdWVzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidmFsdWUiLHtnZXQoKXtpZih0LnZhbHVlcy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgc2NoZW1hIGNvbnRhaW5zIG11bHRpcGxlIHZhbGlkIGxpdGVyYWwgdmFsdWVzLiBVc2UgYC52YWx1ZXNgIGluc3RlYWQuIik7cmV0dXJuIHQudmFsdWVzWzBdfX0pfSk7ZnVuY3Rpb24gaChlLHQpe3JldHVybiBuZXcgaXIoe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KGUpP2U6W2VdLC4uLnkodCl9KX1jb25zdCBhcj1wKCJab2RGaWxlIiwoZSx0KT0+e29wLmluaXQoZSx0KSxJLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+SWcoKSxlLm1pbj0obixvKT0+ZS5jaGVjayhFZShuLG8pKSxlLm1heD0obixvKT0+ZS5jaGVjayhXZShuLG8pKSxlLm1pbWU9KG4sbyk9PmUuY2hlY2soc24oQXJyYXkuaXNBcnJheShuKT9uOltuXSxvKSl9KTtmdW5jdGlvbiBqYShlKXtyZXR1cm4gZWYoYXIsZSl9Y29uc3QgY3I9cCgiWm9kVHJhbnNmb3JtIiwoZSx0KT0+e0dlKCkscnAuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5DZygpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgU28oZS5jb25zdHJ1Y3Rvci5uYW1lKTtuLmFkZElzc3VlPXM9PntpZih0eXBlb2Ygcz09InN0cmluZyIpbi5pc3N1ZXMucHVzaChvdChzLG4udmFsdWUsdCkpO2Vsc2V7Y29uc3QgaT1zO2kuZmF0YWwmJihpLmNvbnRpbnVlPSExKSxpLmNvZGU/PyhpLmNvZGU9ImN1c3RvbSIpLCJpbnB1dCJpbiBpfHwoaS5pbnB1dD1uLnZhbHVlKSxpLmluc3Q/PyhpLmluc3Q9ZSksbi5pc3N1ZXMucHVzaChvdChpKSl9fTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLG4pKToobi52YWx1ZT1yLG4pfX0pO2Z1bmN0aW9uIFpuKGUpe3JldHVybiBuZXcgY3Ioe3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOmV9KX1jb25zdCBUdD1wKCJab2RPcHRpb25hbCIsKGUsdCk9PntVcy5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmRmKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gRChlKXtyZXR1cm4gbmV3IFR0KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBObj1wKCJab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e3NwLmluaXQoZSx0KSxJLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+ZGYoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiB1cihlKXtyZXR1cm4gbmV3IE5uKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBscj1wKCJab2ROdWxsYWJsZSIsKGUsdCk9PntpcC5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnFnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gaXQoZSl7cmV0dXJuIG5ldyBscih7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTplfSl9ZnVuY3Rpb24gTWEoZSl7cmV0dXJuIEQoaXQoZSkpfWNvbnN0IGRyPXAoIlpvZERlZmF1bHQiLChlLHQpPT57YXAuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5MZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZURlZmF1bHQ9ZS51bndyYXB9KTtmdW5jdGlvbiBwcihlLHQpe3JldHVybiBuZXcgZHIoe3R5cGU6ImRlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOmJvKHQpfX0pfWNvbnN0IGZyPXAoIlpvZFByZWZhdWx0IiwoZSx0KT0+e2NwLmluaXQoZSx0KSxJLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VWcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBocihlLHQpe3JldHVybiBuZXcgZnIoe3R5cGU6InByZWZhdWx0Iixpbm5lclR5cGU6ZSxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3QoKTpibyh0KX19KX1jb25zdCBqbj1wKCJab2ROb25PcHRpb25hbCIsKGUsdCk9Pnt1cC5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkRnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gbXIoZSx0KXtyZXR1cm4gbmV3IGpuKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOmUsLi4ueSh0KX0pfWNvbnN0IGdyPXAoIlpvZFN1Y2Nlc3MiLChlLHQpPT57bHAuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5QZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIHFhKGUpe3JldHVybiBuZXcgZ3Ioe3R5cGU6InN1Y2Nlc3MiLGlubmVyVHlwZTplfSl9Y29uc3QgdnI9cCgiWm9kQ2F0Y2giLChlLHQpPT57ZHAuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5IZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZUNhdGNoPWUudW53cmFwfSk7ZnVuY3Rpb24gYnIoZSx0KXtyZXR1cm4gbmV3IHZyKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOmUsY2F0Y2hWYWx1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OmxzKHQpfSl9Y29uc3QgX3I9cCgiWm9kTmFOIiwoZSx0KT0+e3BwLmluaXQoZSx0KSxJLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+emcoKX0pO2Z1bmN0aW9uIERhKGUpe3JldHVybiBZcChfcixlKX1jb25zdCBJdD1wKCJab2RQaXBlIiwoZSx0KT0+e0hzLmluaXQoZSx0KSxJLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+RmcoKSxlLmluPXQuaW4sZS5vdXQ9dC5vdXR9KTtmdW5jdGlvbiBqdChlLHQpe3JldHVybiBuZXcgSXQoe3R5cGU6InBpcGUiLGluOmUsb3V0OnR9KX1jb25zdCBQdD1wKCJab2RDb2RlYyIsKGUsdCk9PntJdC5pbml0KGUsdCksRnMuaW5pdChlLHQpfSk7ZnVuY3Rpb24gTGEoZSx0LG4pe3JldHVybiBuZXcgUHQoe3R5cGU6InBpcGUiLGluOmUsb3V0OnQsdHJhbnNmb3JtOm4uZGVjb2RlLHJldmVyc2VUcmFuc2Zvcm06bi5lbmNvZGV9KX1mdW5jdGlvbiBVYShlKXtjb25zdCB0PWUuX3pvZC5kZWY7cmV0dXJuIG5ldyBQdCh7dHlwZToicGlwZSIsaW46dC5vdXQsb3V0OnQuaW4sdHJhbnNmb3JtOnQucmV2ZXJzZVRyYW5zZm9ybSxyZXZlcnNlVHJhbnNmb3JtOnQudHJhbnNmb3JtfSl9Y29uc3QgeXI9cCgiWm9kUHJlcHJvY2VzcyIsKGUsdCk9PntJdC5pbml0KGUsdCksZnAuaW5pdChlLHQpfSksd3I9cCgiWm9kUmVhZG9ubHkiLChlLHQpPT57aHAuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5CZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIGtyKGUpe3JldHVybiBuZXcgd3Ioe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6ZX0pfWNvbnN0ICRyPXAoIlpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9PnttcC5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlRnKCl9KTtmdW5jdGlvbiBIYShlLHQpe3JldHVybiBuZXcgJHIoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOmUsLi4ueSh0KX0pfWNvbnN0IFNyPXAoIlpvZExhenkiLChlLHQpPT57QnMuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5KZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmdldHRlcigpfSk7ZnVuY3Rpb24genIoZSl7cmV0dXJuIG5ldyBTcih7dHlwZToibGF6eSIsZ2V0dGVyOmV9KX1jb25zdCBUcj1wKCJab2RQcm9taXNlIiwoZSx0KT0+e3ZwLmluaXQoZSx0KSxJLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VmcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBGYShlKXtyZXR1cm4gbmV3IFRyKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6ZX0pfWNvbnN0IElyPXAoIlpvZEZ1bmN0aW9uIiwoZSx0KT0+e2dwLmluaXQoZSx0KSxJLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+RWcoKX0pO2Z1bmN0aW9uIGF0KGUpe3JldHVybiBuZXcgSXIoe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpBcnJheS5pc0FycmF5KGU/LmlucHV0KT9vcihlPy5pbnB1dCk6ZT8uaW5wdXQ/PyQoWigpKSxvdXRwdXQ6ZT8ub3V0cHV0Pz9aKCl9KX1jb25zdCB4dD1wKCJab2RDdXN0b20iLChlLHQpPT57YnAuaW5pdChlLHQpLEkuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT54ZygpfSk7ZnVuY3Rpb24gQmEoZSl7Y29uc3QgdD1uZXcgVSh7Y2hlY2s6ImN1c3RvbSJ9KTtyZXR1cm4gdC5fem9kLmNoZWNrPWUsdH1mdW5jdGlvbiBQcihlLHQpe3JldHVybiB0Zih4dCxlPz8oKCk9PiEwKSx0KX1mdW5jdGlvbiB4cihlLHQ9e30pe3JldHVybiBuZih4dCxlLHQpfWZ1bmN0aW9uIEVyKGUsdCl7cmV0dXJuIG9mKGUsdCl9Y29uc3QgVmE9c2YsSmE9YWYsQ3I9cCgiWm9kSW5zdGFuY2VPZiIsKGUsdCk9Pnt4dC5pbml0KGUsdCl9LHtwcm9wZXJ0aWVzKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socm4oZSx0KSl9fSk7ZnVuY3Rpb24gS2EoZSx0PXt9KXtjb25zdCBuPW5ldyBDcih7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjpvPT5vIGluc3RhbmNlb2YgZSxhYm9ydDohMCwuLi55KHQpfSk7cmV0dXJuIG4uX3pvZC5iYWcuQ2xhc3M9ZSxuLl96b2QuY2hlY2s9bz0+e28udmFsdWUgaW5zdGFuY2VvZiBlfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOmUubmFtZSxpbnB1dDpvLnZhbHVlLGluc3Q6bixwYXRoOlsuLi5uLl96b2QuZGVmLnBhdGg/P1tdXX0pfSxufWNvbnN0IFdhPSguLi5lKT0+Y2Yoe0NvZGVjOlB0LEJvb2xlYW46d3QsU3RyaW5nOmh0fSwuLi5lKTtmdW5jdGlvbiBHYShlKXtjb25zdCB0PXpyKCgpPT5QKFtmKGUpLFQoKSxOKCksQ24oKSwkKHQpLEMoZigpLHQpXSkpO3JldHVybiB0fWZ1bmN0aW9uIE1uKGUsdCl7cmV0dXJuIG5ldyB5cih7dHlwZToicGlwZSIsaW46Wm4oZSksb3V0OnR9KX1jb25zdCBldj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kQW55OktvLFpvZEFycmF5OllvLFpvZEJhc2U2NDpUbixab2RCYXNlNjRVUkw6SW4sWm9kQmlnSW50Omt0LFpvZEJpZ0ludEZvcm1hdDpFbixab2RCb29sZWFuOnd0LFpvZENJRFJ2NDpTbixab2RDSURSdjY6em4sWm9kQ1VJRDp2bixab2RDVUlEMjpibixab2RDYXRjaDp2cixab2RDb2RlYzpQdCxab2RDcmVkaXRDYXJkOkhvLFpvZEN1c3RvbTp4dCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6TmUsWm9kRGF0ZTpSbixab2REZWZhdWx0OmRyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjplcixab2RFMTY0OlBuLFpvZEVtYWlsOmZuLFpvZEVtb2ppOm1uLFpvZEVudW06VmUsWm9kRXhhY3RPcHRpb25hbDpObixab2RGaWxlOmFyLFpvZEZ1bmN0aW9uOklyLFpvZEdVSUQ6aG4sWm9kSUJBTjpGbyxab2RJUHY0OmtuLFpvZElQdjY6JG4sWm9kSVNPRGF0ZTpndCxab2RJU09EYXRlVGltZTptdCxab2RJU09EdXJhdGlvbjpidCxab2RJU09UaW1lOnZ0LFpvZEluc3RhbmNlT2Y6Q3IsWm9kSW50ZXJzZWN0aW9uOnRyLFpvZEpXVDp4bixab2RLU1VJRDp3bixab2RMYXp5OlNyLFpvZExpdGVyYWw6aXIsWm9kTUFDOlVvLFpvZE1hcDpycixab2ROYU46X3IsWm9kTmFub0lEOmduLFpvZE5ldmVyOkdvLFpvZE5vbk9wdGlvbmFsOmpuLFpvZE51bGw6Sm8sWm9kTnVsbGFibGU6bHIsWm9kTnVtYmVyOnl0LFpvZE51bWJlckZvcm1hdDpqZSxab2RPYmplY3Q6JHQsWm9kT3B0aW9uYWw6VHQsWm9kUGlwZTpJdCxab2RQcmVmYXVsdDpmcixab2RQcmVwcm9jZXNzOnlyLFpvZFByb21pc2U6VHIsWm9kUmVhZG9ubHk6d3IsWm9kUmVjb3JkOkJlLFpvZFNldDpzcixab2RTdHJpbmc6aHQsWm9kU3RyaW5nRm9ybWF0OmosWm9kU3VjY2Vzczpncixab2RTeW1ib2w6Qm8sWm9kVGVtcGxhdGVMaXRlcmFsOiRyLFpvZFRyYW5zZm9ybTpjcixab2RUdXBsZTpucixab2RUeXBlOkksWm9kVUxJRDpfbixab2RVUkw6X3QsWm9kVVVJRDpfZSxab2RVbmRlZmluZWQ6Vm8sWm9kVW5pb246U3QsWm9kVW5rbm93bjpXbyxab2RWb2lkOlFvLFpvZFhJRDp5bixab2RYb3I6WG8sX1pvZFN0cmluZzpwbixfZGVmYXVsdDpwcixfZnVuY3Rpb246YXQsYW55Ok9uLGFycmF5OiQsYmFzZTY0OmNhLGJhc2U2NHVybDp1YSxiaWdpbnQ6JGEsYm9vbGVhbjpOLGNhdGNoOmJyLGNoZWNrOkJhLGNpZHJ2NDppYSxjaWRydjY6YWEsY29kZWM6TGEsY3JlZGl0Q2FyZDpkYSxjdWlkOllpLGN1aWQyOlhpLGN1cnJlbmN5Q29kZTp2YSxjdXN0b206UHIsZGF0ZTpQYSxkZXNjcmliZTpWYSxkaXNjcmltaW5hdGVkVW5pb246QW4sZTE2NDpsYSxlbWFpbDpVaSxlbW9qaTpHaSxlbnVtOkcsZXhhY3RPcHRpb25hbDp1cixmaWxlOmphLGZsb2F0MzI6X2EsZmxvYXQ2NDp5YSxmdW5jdGlvbjphdCxndWlkOkhpLGhhc2g6YmEsaGV4OmdhLGhvc3RuYW1lOm1hLGh0dHBVcmw6V2ksaWJhbjpwYSxpbnN0YW5jZW9mOkthLGludDpOdCxpbnQzMjp3YSxpbnQ2NDpTYSxpbnRlcnNlY3Rpb246enQsaW52ZXJ0Q29kZWM6VWEsaXB2NDpvYSxpcHY2OnNhLGpzb246R2Esand0OmZhLGtleW9mOnhhLGtzdWlkOm5hLGxhenk6enIsbGl0ZXJhbDpoLGxvb3NlT2JqZWN0OlcsbG9vc2VSZWNvcmQ6UmEsbWFjOnJhLG1hcDpBYSxtZXRhOkphLG5hbjpEYSxuYW5vaWQ6UWksbmF0aXZlRW51bTpOYSxuZXZlcjpGZSxub25vcHRpb25hbDptcixudWxsOkNuLG51bGxhYmxlOml0LG51bGxpc2g6TWEsbnVtYmVyOlQsb2JqZWN0OnYsb3B0aW9uYWw6RCxwYXJ0aWFsUmVjb3JkOk9hLHBpcGU6anQscHJlZmF1bHQ6aHIscHJlcHJvY2VzczpNbixwcm9taXNlOkZhLHJlYWRvbmx5OmtyLHJlY29yZDpDLHJlZmluZTp4cixzZXQ6WmEsc3RyaWN0T2JqZWN0OkVhLHN0cmluZzpmLHN0cmluZ0Zvcm1hdDpoYSxzdHJpbmdib29sOldhLHN1Y2Nlc3M6cWEsc3VwZXJSZWZpbmU6RXIsc3ltYm9sOlRhLHRlbXBsYXRlTGl0ZXJhbDpIYSx0cmFuc2Zvcm06Wm4sdHVwbGU6b3IsdWludDMyOmthLHVpbnQ2NDp6YSx1bGlkOmVhLHVuZGVmaW5lZDpzdCx1bmlvbjpQLHVua25vd246Wix1cmw6S2ksdXVpZDpGaSx1dWlkdjQ6QmksdXVpZHY2OlZpLHV1aWR2NzpKaSx2b2lkOklhLHhpZDp0YSx4b3I6Q2F9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksZ2Y9e2ludmFsaWRfdHlwZToiaW52YWxpZF90eXBlIix0b29fYmlnOiJ0b29fYmlnIix0b29fc21hbGw6InRvb19zbWFsbCIsaW52YWxpZF9mb3JtYXQ6ImludmFsaWRfZm9ybWF0Iixub3RfbXVsdGlwbGVfb2Y6Im5vdF9tdWx0aXBsZV9vZiIsdW5yZWNvZ25pemVkX2tleXM6InVucmVjb2duaXplZF9rZXlzIixpbnZhbGlkX3VuaW9uOiJpbnZhbGlkX3VuaW9uIixpbnZhbGlkX2tleToiaW52YWxpZF9rZXkiLGludmFsaWRfZWxlbWVudDoiaW52YWxpZF9lbGVtZW50IixpbnZhbGlkX3ZhbHVlOiJpbnZhbGlkX3ZhbHVlIixjdXN0b206ImN1c3RvbSJ9O2Z1bmN0aW9uIHZmKGUpe0ooe2N1c3RvbUVycm9yOmV9KX1mdW5jdGlvbiBiZigpe3JldHVybiBKKCkuY3VzdG9tRXJyb3J9dmFyIGxvO2xvfHwobG89e30pO2Z1bmN0aW9uIF9mKGUpe3JldHVybiAkaShtdCxlKX1mdW5jdGlvbiB0dihlKXtyZXR1cm4gU2koZ3QsZSl9ZnVuY3Rpb24gbnYoZSl7cmV0dXJuIHppKHZ0LGUpfWZ1bmN0aW9uIG92KGUpe3JldHVybiBUaShidCxlKX1jb25zdCBRYT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kSVNPRGF0ZTpndCxab2RJU09EYXRlVGltZTptdCxab2RJU09EdXJhdGlvbjpidCxab2RJU09UaW1lOnZ0LGRhdGU6dHYsZGF0ZXRpbWU6X2YsZHVyYXRpb246b3YsdGltZTpudn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxrPXsuLi5ldiwuLi5ZZyxpc286UWF9LHJ2PW5ldyBTZXQoWyIkc2NoZW1hIiwiJHJlZiIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiLCIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciIsInR5cGUiLCJlbnVtIiwiY29uc3QiLCJhbnlPZiIsIm9uZU9mIiwiYWxsT2YiLCJub3QiLCJwcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lcyIsIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIiwiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsIm1pbkl0ZW1zIiwibWF4SXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNvbnRhaW5zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsInBhdHRlcm4iLCJmb3JtYXQiLCJtaW5pbXVtIiwibWF4aW11bSIsImV4Y2x1c2l2ZU1pbmltdW0iLCJleGNsdXNpdmVNYXhpbXVtIiwibXVsdGlwbGVPZiIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdCIsImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImlmIiwidGhlbiIsImVsc2UiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW50UmVxdWlyZWQiLCJudWxsYWJsZSIsInJlYWRPbmx5Il0pO2Z1bmN0aW9uIHN2KGUsdCl7Y29uc3Qgbj1lLiRzY2hlbWE7cmV0dXJuIG49PT0iaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPyJkcmFmdC0yMDIwLTEyIjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI/ImRyYWZ0LTciOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIj8iZHJhZnQtNCI6dD8/ImRyYWZ0LTIwMjAtMTIifWZ1bmN0aW9uIFljKGUsdCl7cmV0dXJuIGUubWFwKChuLG8pPT5vPHQ/bjpuLm9wdGlvbmFsKCkpfWZ1bmN0aW9uIGl2KGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gYXYoZSx0KXtpZighZS5zdGFydHNXaXRoKCIjIikpdGhyb3cgbmV3IEVycm9yKCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkIik7Y29uc3Qgbj1lLnNsaWNlKDEpLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pO2lmKG4ubGVuZ3RoPT09MClyZXR1cm4gdC5yb290U2NoZW1hO2NvbnN0IG89dC52ZXJzaW9uPT09ImRyYWZ0LTIwMjAtMTIiPyIkZGVmcyI6ImRlZmluaXRpb25zIjtpZihuWzBdPT09byl7Y29uc3Qgcj1uWzFdPT09dm9pZCAwP3ZvaWQgMDppdihuWzFdKTtpZighcnx8IXQuZGVmc1tyXSl0aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKTtyZXR1cm4gdC5kZWZzW3JdfXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApfWZ1bmN0aW9uIGN2KGUsdCl7cmV0dXJuIGsudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYodHlwZW9mIHIhPSJvYmplY3QifHxyPT09bnVsbHx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm47Y29uc3Qgcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKTtpZih0Lm1pblByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pblByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBzbWFsbDogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPj0ke3QubWluUHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0Lm1heFByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhQcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gYmlnOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA8PSR7dC5tYXhQcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQua2V5U2NoZW1hKWZvcihjb25zdCBpIG9mIHMpe2NvbnN0IGE9dC5rZXlTY2hlbWEuc2FmZVBhcnNlKGkpO2Euc3VjY2Vzc3x8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6YS5lcnJvci5pc3N1ZXMsaW5wdXQ6aSxwYXRoOltpXSxjb250aW51ZTohMH0pfX0pLnBpcGUoZSl9ZnVuY3Rpb24gdHMoZSx0KXtpZihlPT09bnVsbClyZXR1cm4ieiI7Y29uc3Qgbj10eXBlb2YgZTtpZihuIT09Im9iamVjdCIpe2lmKG49PT0ibnVtYmVyIiYmTnVtYmVyLmlzTmFOKGUpKXJldHVybiBudWxsO2NvbnN0IG89U3RyaW5nKGUpO3JldHVybmAke25bMF19JHtvLmxlbmd0aH06JHtvfWB9aWYodC5oYXMoZSkpcmV0dXJuIG51bGw7dC5hZGQoZSk7dHJ5e2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHM9W107Zm9yKGNvbnN0IGkgb2YgZSl7Y29uc3QgYT10cyhpLHQpO2lmKGE9PT1udWxsKXJldHVybiBudWxsO3MucHVzaChhKX1yZXR1cm5gYSR7cy5sZW5ndGh9Olske3Muam9pbigiLCIpfV1gfWNvbnN0IG89T2JqZWN0LmtleXMoZSkuc29ydCgpLHI9W107Zm9yKGNvbnN0IHMgb2Ygbyl7Y29uc3QgaT10cyhlW3NdLHQpO2lmKGk9PT1udWxsKXJldHVybiBudWxsO3IucHVzaChgJHtzLmxlbmd0aH06JHtzfT0ke2l9YCl9cmV0dXJuYG8ke3IubGVuZ3RofTp7JHtyLmpvaW4oIiwiKX19YH1maW5hbGx5e3QuZGVsZXRlKGUpfX1jb25zdCB1dj1uZXcgU2V0KFsiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY29udGFpbnMiLCJwcm9wZXJ0eU5hbWVzIiwibm90IiwiaWYiLCJ0aGVuIiwiZWxzZSIsImFsbE9mIiwiYW55T2YiLCJvbmVPZiIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJjb250ZW50U2NoZW1hIl0pLGx2PW5ldyBTZXQoWyJwcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW5jaWVzIiwiJGRlZnMiLCJkZWZpbml0aW9ucyJdKTtmdW5jdGlvbiBSdChlKXtyZXR1cm4gdHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbD8hMTpBcnJheS5pc0FycmF5KGUpP2Uuc29tZShSdCk6dHlwZW9mIGUuJHJlZj09InN0cmluZyI/ITA6T2JqZWN0LmVudHJpZXMoZSkuc29tZSgoW3Qsbl0pPT51di5oYXModCk/UnQobik6IWx2Lmhhcyh0KXx8dHlwZW9mIG4hPSJvYmplY3QifHxuPT09bnVsbD8hMTpPYmplY3QudmFsdWVzKG4pLnNvbWUoUnQpKX1mdW5jdGlvbiBYYyhlKXtyZXR1cm4gZT09PTE/ImVsZW1lbnQiOiJlbGVtZW50cyJ9ZnVuY3Rpb24gZHYoZSx0KXtyZXR1cm4gay50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZihBcnJheS5pc0FycmF5KHIpKXtpZih0LnVuaXF1ZUl0ZW1zPT09ITApe2NvbnN0IHM9bmV3IE1hcDtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl7Y29uc3QgYT10cyhyW2ldLG5ldyBTZXQpO2lmKGE9PT1udWxsKWNvbnRpbnVlO2NvbnN0IGM9cy5nZXQoYSk7aWYoYz09PXZvaWQgMCl7cy5zZXQoYSxpKTtjb250aW51ZX1vLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IGl0ZW1zIG11c3QgYmUgdW5pcXVlOiBlbGVtZW50IGF0IGluZGV4ICR7aX0gZHVwbGljYXRlcyB0aGUgb25lIGF0IGluZGV4ICR7Y31gLGlucHV0OnIscGF0aDpbaV0sY29udGludWU6ITB9KX19aWYodC5jb250YWluc1NjaGVtYSl7Y29uc3Qgcz10Lm1pbkNvbnRhaW5zPz8xLGk9dC5tYXhDb250YWlucyE9PXZvaWQgMD90Lm1heENvbnRhaW5zKzE6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBhPTA7Zm9yKGNvbnN0IGMgb2YgcilpZih0LmNvbnRhaW5zU2NoZW1hLnNhZmVQYXJzZShjKS5zdWNjZXNzJiYrK2E+PWkpYnJlYWs7YTxzJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCAke3N9IG1hdGNoaW5nICR7WGMocyl9OyBmb3VuZCAke2F9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSksdC5tYXhDb250YWlucyE9PXZvaWQgMCYmYT50Lm1heENvbnRhaW5zJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBtb3N0ICR7dC5tYXhDb250YWluc30gbWF0Y2hpbmcgJHtYYyh0Lm1heENvbnRhaW5zKX1gLGlucHV0OnIsY29udGludWU6ITB9KX19fSkucGlwZShlKX1mdW5jdGlvbiBldShlLHQpe2lmKGUhPT0hMSlyZXR1cm4gZT09PXZvaWQgMHx8ZT09PSEwP2suYW55KCk6dGUoZSx0KX1jb25zdCBwdj0vXig/OlswMV1cZHwyWzAtM10pOlswLTVdXGQ6WzAtNV1cZCg/OlwuXGQrKT8oPzpafFsrLV0oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkKSQvO2Z1bmN0aW9uIHlmKGUsdCl7aWYoZS5ub3QhPT12b2lkIDApe2lmKHR5cGVvZiBlLm5vdD09Im9iamVjdCImJk9iamVjdC5rZXlzKGUubm90KS5sZW5ndGg9PT0wKXJldHVybiBrLm5ldmVyKCk7dGhyb3cgbmV3IEVycm9yKCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpIil9aWYoZS51bmV2YWx1YXRlZEl0ZW1zIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRJdGVtcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS51bmV2YWx1YXRlZFByb3BlcnRpZXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuaWYhPT12b2lkIDB8fGUudGhlbiE9PXZvaWQgMHx8ZS5lbHNlIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuZGVwZW5kZW50U2NoZW1hcyE9PXZvaWQgMHx8ZS5kZXBlbmRlbnRSZXF1aXJlZCE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImRlcGVuZGVudFNjaGVtYXMgYW5kIGRlcGVuZGVudFJlcXVpcmVkIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS4kcmVmKXtjb25zdCByPWUuJHJlZjtpZih0LnJlZnMuaGFzKHIpKXJldHVybiB0LnJlZnMuZ2V0KHIpO2lmKHQucHJvY2Vzc2luZy5oYXMocikpcmV0dXJuIGsubGF6eSgoKT0+e2lmKCF0LnJlZnMuaGFzKHIpKXRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgcmVmZXJlbmNlIG5vdCByZXNvbHZlZDogJHtyfWApO3JldHVybiB0LnJlZnMuZ2V0KHIpfSk7dC5wcm9jZXNzaW5nLmFkZChyKTtjb25zdCBzPWF2KHIsdCksaT10ZShzLHQpO3JldHVybiB0LnJlZnMuc2V0KHIsaSksdC5wcm9jZXNzaW5nLmRlbGV0ZShyKSxpfWlmKGUuZW51bSE9PXZvaWQgMCl7Y29uc3Qgcj1lLmVudW07aWYodC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmZS5udWxsYWJsZT09PSEwJiZyLmxlbmd0aD09PTEmJnJbMF09PT1udWxsKXJldHVybiBrLm51bGwoKTtpZihyLmxlbmd0aD09PTApcmV0dXJuIGsubmV2ZXIoKTtpZihyLmxlbmd0aD09PTEpcmV0dXJuIGsubGl0ZXJhbChyWzBdKTtpZihyLmV2ZXJ5KGk9PnR5cGVvZiBpPT0ic3RyaW5nIikpcmV0dXJuIGsuZW51bShyKTtjb25zdCBzPXIubWFwKGk9PmsubGl0ZXJhbChpKSk7cmV0dXJuIHMubGVuZ3RoPDI/c1swXTprLnVuaW9uKFtzWzBdLHNbMV0sLi4ucy5zbGljZSgyKV0pfWlmKGUuY29uc3QhPT12b2lkIDApcmV0dXJuIGsubGl0ZXJhbChlLmNvbnN0KTtjb25zdCBuPWUudHlwZTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCByPW4ubWFwKHM9Pntjb25zdCBpPXsuLi5lLHR5cGU6c307cmV0dXJuIHlmKGksdCl9KTtyZXR1cm4gci5sZW5ndGg9PT0wP2submV2ZXIoKTpyLmxlbmd0aD09PTE/clswXTprLnVuaW9uKHIpfWlmKCFuKXJldHVybiBrLmFueSgpO2xldCBvO3N3aXRjaChuKXtjYXNlInN0cmluZyI6e2xldCByPWsuc3RyaW5nKCk7aWYoZS5mb3JtYXQpe2NvbnN0IHM9ZS5mb3JtYXQ7cz09PSJlbWFpbCI/cj1yLmNoZWNrKGsuZW1haWwoKSk6cz09PSJ1cmkifHxzPT09InVyaS1yZWZlcmVuY2UiP3I9ci5jaGVjayhrLnVybCgpKTpzPT09InV1aWQifHxzPT09Imd1aWQiP3I9ci5jaGVjayhrLnV1aWQoKSk6cz09PSJkYXRlLXRpbWUiP3I9ci5jaGVjayhrLmlzby5kYXRldGltZSh7b2Zmc2V0OiEwfSkpOnM9PT0iZGF0ZSI/cj1yLmNoZWNrKGsuaXNvLmRhdGUoKSk6cz09PSJ0aW1lIj9yPXIuY2hlY2soay5yZWdleChwdikpOnM9PT0iZHVyYXRpb24iP3I9ci5jaGVjayhrLmlzby5kdXJhdGlvbigpKTpzPT09Imhvc3RuYW1lIj9yPXIuY2hlY2soay5ob3N0bmFtZSgpKTpzPT09ImlwdjQiP3I9ci5jaGVjayhrLmlwdjQoKSk6cz09PSJpcHY2Ij9yPXIuY2hlY2soay5pcHY2KCkpOnM9PT0ibWFjIj9yPXIuY2hlY2soay5tYWMoKSk6cz09PSJjaWRyIj9yPXIuY2hlY2soay5jaWRydjQoKSk6cz09PSJjaWRyLXY2Ij9yPXIuY2hlY2soay5jaWRydjYoKSk6cz09PSJiYXNlNjQiP3I9ci5jaGVjayhrLmJhc2U2NCgpKTpzPT09ImJhc2U2NHVybCI/cj1yLmNoZWNrKGsuYmFzZTY0dXJsKCkpOnM9PT0iZTE2NCI/cj1yLmNoZWNrKGsuZTE2NCgpKTpzPT09ImNyZWRpdF9jYXJkIj9yPXIuY2hlY2soay5jcmVkaXRDYXJkKCkpOnM9PT0iaWJhbiI/cj1yLmNoZWNrKGsuaWJhbigpKTpzPT09Imp3dCI/cj1yLmNoZWNrKGsuand0KCkpOnM9PT0iZW1vamkiP3I9ci5jaGVjayhrLmVtb2ppKCkpOnM9PT0ibmFub2lkIj9yPXIuY2hlY2soay5uYW5vaWQoKSk6cz09PSJjdWlkIj9yPXIuY2hlY2soay5jdWlkKCkpOnM9PT0iY3VpZDIiP3I9ci5jaGVjayhrLmN1aWQyKCkpOnM9PT0idWxpZCI/cj1yLmNoZWNrKGsudWxpZCgpKTpzPT09InhpZCI/cj1yLmNoZWNrKGsueGlkKCkpOnM9PT0ia3N1aWQiJiYocj1yLmNoZWNrKGsua3N1aWQoKSkpfXR5cGVvZiBlLm1pbkxlbmd0aD09Im51bWJlciImJihyPXIubWluKGUubWluTGVuZ3RoKSksdHlwZW9mIGUubWF4TGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5tYXgoZS5tYXhMZW5ndGgpKSxlLnBhdHRlcm4mJihyPXIucmVnZXgobmV3IFJlZ0V4cChlLnBhdHRlcm4pKSksbz1yO2JyZWFrfWNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOntsZXQgcj1uPT09ImludGVnZXIiP2subnVtYmVyKCkuaW50KCk6ay5udW1iZXIoKTt0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNaW5pbXVtIT09ITAmJihyPXIubWluKGUubWluaW11bSkpLHR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1heGltdW0hPT0hMCYmKHI9ci5tYXgoZS5tYXhpbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWluaW11bT09Im51bWJlciI/cj1yLmd0KGUuZXhjbHVzaXZlTWluaW11bSk6ZS5leGNsdXNpdmVNaW5pbXVtPT09ITAmJnR5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiYocj1yLmd0KGUubWluaW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1heGltdW09PSJudW1iZXIiP3I9ci5sdChlLmV4Y2x1c2l2ZU1heGltdW0pOmUuZXhjbHVzaXZlTWF4aW11bT09PSEwJiZ0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmKHI9ci5sdChlLm1heGltdW0pKSx0eXBlb2YgZS5tdWx0aXBsZU9mPT0ibnVtYmVyIiYmKHI9ci5tdWx0aXBsZU9mKGUubXVsdGlwbGVPZikpLG89cjticmVha31jYXNlImJvb2xlYW4iOntvPWsuYm9vbGVhbigpO2JyZWFrfWNhc2UibnVsbCI6e289ay5udWxsKCk7YnJlYWt9Y2FzZSJvYmplY3QiOntjb25zdCByPXt9LHM9ZS5wcm9wZXJ0aWVzfHx7fSxpPW5ldyBTZXQoZS5yZXF1aXJlZHx8W10pLGE9dHlwZW9mIGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiP3RlKGUuYWRkaXRpb25hbFByb3BlcnRpZXMsdCk6dm9pZCAwO2Zvcihjb25zdFttLGJdb2YgT2JqZWN0LmVudHJpZXMocykpe2NvbnN0IGc9dGUoYix0KTtLZShyLG0saS5oYXMobSk/ZzpnLm9wdGlvbmFsKCkpfWlmKGUucGF0dGVyblByb3BlcnRpZXMpe2NvbnN0IG09ZS5wYXR0ZXJuUHJvcGVydGllcyxiPU9iamVjdC5rZXlzKG0pLGc9W107Zm9yKGNvbnN0IHcgb2YgYil7Y29uc3QgUz10ZShtW3ddLHQpLE89ay5zdHJpbmcoKS5yZWdleChuZXcgUmVnRXhwKHcpKTtnLnB1c2goay5sb29zZVJlY29yZChPLFMpKX1jb25zdCBfPVtdO2lmKE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZfLnB1c2goay5vYmplY3QocikucGFzc3Rocm91Z2goKSksXy5wdXNoKC4uLmcpLF8ubGVuZ3RoPT09MClvPWsub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO2Vsc2UgaWYoXy5sZW5ndGg9PT0xKW89X1swXTtlbHNle2xldCB3PWsuaW50ZXJzZWN0aW9uKF9bMF0sX1sxXSk7Zm9yKGxldCBTPTI7UzxfLmxlbmd0aDtTKyspdz1rLmludGVyc2VjdGlvbih3LF9bU10pO289d31pZihlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITEpe2NvbnN0IHc9T2JqZWN0LmtleXMociksUz1iLm1hcChFPT5uZXcgUmVnRXhwKEUpKSxPPW87bz1vLmNoZWNrKEU9PntpZighQWUoRS52YWx1ZSkpcmV0dXJuO2NvbnN0IEY9W107Zm9yKGNvbnN0IHJlIG9mIE9iamVjdC5rZXlzKEUudmFsdWUpKXcuaW5jbHVkZXMocmUpfHxTLnNvbWUoQj0+Qi50ZXN0KHJlKSl8fEYucHVzaChyZSk7Ri5sZW5ndGgmJkUuaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOkYsaW5wdXQ6RS52YWx1ZSxpbnN0Ok99KX0pfX1lbHNle2NvbnN0IG09ay5vYmplY3Qocik7ZS5hZGRpdGlvbmFsUHJvcGVydGllcz09PSExP289bS5zdHJpY3QoKTphP289bS5jYXRjaGFsbChhKTpvPW0ucGFzc3Rocm91Z2goKX1jb25zdCBjPWUucHJvcGVydHlOYW1lcyE9PXZvaWQgMCYmZS5wcm9wZXJ0eU5hbWVzIT09ITAsdT10eXBlb2YgZS5taW5Qcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1pblByb3BlcnRpZXM6dm9pZCAwLGw9dHlwZW9mIGUubWF4UHJvcGVydGllcz09Im51bWJlciI/ZS5tYXhQcm9wZXJ0aWVzOnZvaWQgMDtpZihjfHx1IT09dm9pZCAwfHxsIT09dm9pZCAwKXtsZXQgbTtpZihjKXtjb25zdCBiPXR5cGVvZiBlLnByb3BlcnR5TmFtZXM9PSJvYmplY3QiJiZlLnByb3BlcnR5TmFtZXMudHlwZT09PXZvaWQgMD97dHlwZToic3RyaW5nIiwuLi5lLnByb3BlcnR5TmFtZXN9OmUucHJvcGVydHlOYW1lczttPXRlKGIsdCl9bz1jdihvLHtrZXlTY2hlbWE6bSxtaW5Qcm9wZXJ0aWVzOnUsbWF4UHJvcGVydGllczpsfSl9YnJlYWt9Y2FzZSJhcnJheSI6e2NvbnN0IHI9ZS5wcmVmaXhJdGVtcyxzPWUuaXRlbXM7aWYociYmQXJyYXkuaXNBcnJheShyKSl7Y29uc3QgaT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGE9ci5tYXAobT0+dGUobSx0KSksYz1ZYyhhLGkpLHU9QXJyYXkuaXNBcnJheShzKT92b2lkIDA6ZXUocyx0KSxsPWsudHVwbGUoYyk7bz11P2wucmVzdCh1KTpsLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhrLm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhrLm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYoQXJyYXkuaXNBcnJheShzKSl7Y29uc3QgaT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGE9cy5tYXAobT0+dGUobSx0KSksYz1ZYyhhLGkpLHU9ZXUoZS5hZGRpdGlvbmFsSXRlbXMsdCksbD1rLnR1cGxlKGMpO289dT9sLnJlc3QodSk6bCx0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soay5taW5MZW5ndGgoZS5taW5JdGVtcykpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soay5tYXhMZW5ndGgoZS5tYXhJdGVtcykpKX1lbHNlIGlmKHMhPT12b2lkIDApe2NvbnN0IGk9dGUocyx0KTtsZXQgYT1rLmFycmF5KGkpO3R5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKGE9YS5taW4oZS5taW5JdGVtcykpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKGE9YS5tYXgoZS5tYXhJdGVtcykpLG89YX1lbHNlIG89ay5hcnJheShrLmFueSgpKTsoZS51bmlxdWVJdGVtcz09PSEwfHxlLmNvbnRhaW5zIT09dm9pZCAwKSYmKG89ZHYobyx7dW5pcXVlSXRlbXM6ZS51bmlxdWVJdGVtcz09PSEwLGNvbnRhaW5zU2NoZW1hOmUuY29udGFpbnMhPT12b2lkIDA/dGUoZS5jb250YWlucyx0KTp2b2lkIDAsbWluQ29udGFpbnM6dHlwZW9mIGUubWluQ29udGFpbnM9PSJudW1iZXIiP2UubWluQ29udGFpbnM6dm9pZCAwLG1heENvbnRhaW5zOnR5cGVvZiBlLm1heENvbnRhaW5zPT0ibnVtYmVyIj9lLm1heENvbnRhaW5zOnZvaWQgMH0pKTticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHlwZTogJHtufWApfXJldHVybiBvfWZ1bmN0aW9uIHRlKGUsdCl7aWYodHlwZW9mIGU9PSJib29sZWFuIilyZXR1cm4gZT9rLmFueSgpOmsubmV2ZXIoKTtsZXQgbj15ZihlLHQpO2NvbnN0IG89ZS50eXBlfHxlLmVudW0hPT12b2lkIDB8fGUuY29uc3QhPT12b2lkIDA7aWYoZS5hbnlPZiYmQXJyYXkuaXNBcnJheShlLmFueU9mKSl7Y29uc3QgYT1lLmFueU9mLm1hcCh1PT50ZSh1LHQpKSxjPWsudW5pb24oYSk7bj1vP2suaW50ZXJzZWN0aW9uKG4sYyk6Y31pZihlLm9uZU9mJiZBcnJheS5pc0FycmF5KGUub25lT2YpKXtjb25zdCBhPWUub25lT2YubWFwKHU9PnRlKHUsdCkpLGM9ay54b3IoYSk7bj1vP2suaW50ZXJzZWN0aW9uKG4sYyk6Y31pZihlLmFsbE9mJiZBcnJheS5pc0FycmF5KGUuYWxsT2YpKWlmKGUuYWxsT2YubGVuZ3RoPT09MCluPW8/bjprLmFueSgpO2Vsc2V7bGV0IGE9bz9uOnRlKGUuYWxsT2ZbMF0sdCk7Y29uc3QgYz1vPzA6MTtmb3IobGV0IHU9Yzt1PGUuYWxsT2YubGVuZ3RoO3UrKylhPWsuaW50ZXJzZWN0aW9uKGEsdGUoZS5hbGxPZlt1XSx0KSk7bj1hfWUubnVsbGFibGU9PT0hMCYmdC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmKG49ay5udWxsYWJsZShuKSksZS5yZWFkT25seT09PSEwJiYobj1rLnJlYWRvbmx5KG4pKSxlLmRlZmF1bHQhPT12b2lkIDAmJihuPW4uZGVmYXVsdChlLmRlZmF1bHQpKTtjb25zdCByPXt9LHM9WyIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciJdO2Zvcihjb25zdCBhIG9mIHMpYSBpbiBlJiYoclthXT1lW2FdKTtjb25zdCBpPVsiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiXTtmb3IoY29uc3QgYSBvZiBpKWEgaW4gZSYmKHJbYV09ZVthXSk7aWYoZS50eXBlPT09Im9iamVjdCImJmUuJHJlZj09PXZvaWQgMCl7ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiYhUnQoZS5wcm9wZXJ0eU5hbWVzKSYmKHIucHJvcGVydHlOYW1lcz1lLnByb3BlcnR5TmFtZXMpO2Zvcihjb25zdCBhIG9mWyJtaW5Qcm9wZXJ0aWVzIiwibWF4UHJvcGVydGllcyJdKWVbYV0hPT12b2lkIDAmJihyW2FdPWVbYV0pfWlmKGUudHlwZT09PSJhcnJheSImJmUuJHJlZj09PXZvaWQgMCl7ZS5jb250YWlucyE9PXZvaWQgMCYmIVJ0KGUuY29udGFpbnMpJiYoci5jb250YWlucz1lLmNvbnRhaW5zKTtmb3IoY29uc3QgYSBvZlsidW5pcXVlSXRlbXMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIl0pZVthXSE9PXZvaWQgMCYmKHJbYV09ZVthXSl9Zm9yKGNvbnN0IGEgb2YgT2JqZWN0LmtleXMoZSkpcnYuaGFzKGEpfHxLZShyLGEsZVthXSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZ0LnJlZ2lzdHJ5LmFkZChuLHIpLGUuZGVzY3JpcHRpb24mJihuPW4uZGVzY3JpYmUoZS5kZXNjcmlwdGlvbikpLG59ZnVuY3Rpb24gd2YoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP2suYW55KCk6ay5uZXZlcigpO2xldCBuO3RyeXtuPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiZnJvbUpTT05TY2hlbWEgaW5wdXQgaXMgbm90IHZhbGlkIEpTT04gKHBvc3NpYmx5IGN5Y2xpYyk7IHVzZSAkZGVmcy8kcmVmIGZvciByZWN1cnNpdmUgc2NoZW1hcyIpfWNvbnN0IG89c3Yobix0Py5kZWZhdWx0VGFyZ2V0KSxyPW4uJGRlZnN8fG4uZGVmaW5pdGlvbnN8fHt9LHM9e3ZlcnNpb246byxkZWZzOnIscmVmczpuZXcgTWFwLHByb2Nlc3Npbmc6bmV3IFNldCxyb290U2NoZW1hOm4scmVnaXN0cnk6dD8ucmVnaXN0cnk/P2hlfTtyZXR1cm4gdGUobixzKX1mdW5jdGlvbiBrZihlKXtyZXR1cm4gUGkoZSx7b2JqZWN0OnQ9PnQucGFydGlhbCgpLHVuaW9uOnQ9Pntjb25zdCBuPXQuX3pvZC5kZWY7cmV0dXJuIG4uZGlzY3JpbWluYXRvcj09PXZvaWQgMD90OlAobi5vcHRpb25zKX19KX1mdW5jdGlvbiBmdihlLHQpe2lmKCF0Py5sZW5ndGgpcmV0dXJuIGU7Y29uc3Qgbj1lLl96b2QuZGVmO3JldHVybiBIKGUsZWUobix7Y2hlY2tzOlsuLi5uLmNoZWNrcz8/W10sLi4udF19KSx7cGFyZW50OiEwfSl9ZnVuY3Rpb24gJGYoZSl7cmV0dXJuIGZ2KGUub3V0LGUuY2hlY2tzKX1mdW5jdGlvbiBodihlKXtyZXR1cm4gZS5pbi5fem9kLnRyYWl0cy5oYXMoIiRab2RUcmFuc2Zvcm0iKT8kZihlKTplLmlufWZ1bmN0aW9uIFNmKGUpe3JldHVybiBQaShlLHtwaXBlOnQ9Pmh2KHQuX3pvZC5kZWYpLGRlZmF1bHQ6KHQsbik9Pm4/RCh0Ll96b2QuZGVmLmlubmVyVHlwZSk6dCxjYXRjaDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gemYoZSl7cmV0dXJuIFBpKGUse3BpcGU6dD0+JGYodC5fem9kLmRlZikscHJlZmF1bHQ6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIG12KGUpe3JldHVybiBUcChodCxlKX1mdW5jdGlvbiBndihlKXtyZXR1cm4gQ3AoeXQsZSl9ZnVuY3Rpb24gdnYoZSl7cmV0dXJuIE1wKHd0LGUpfWZ1bmN0aW9uIGJ2KGUpe3JldHVybiBEcChrdCxlKX1mdW5jdGlvbiBfdihlKXtyZXR1cm4gUXAoUm4sZSl9Y29uc3QgVGY9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGJpZ2ludDpidixib29sZWFuOnZ2LGRhdGU6X3YsbnVtYmVyOmd2LHN0cmluZzptdn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSx0dT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOmZzLCRpbnB1dDpLcywkb3V0cHV0OkpzLElOVkFMSUQ6R3MsTkVWRVI6cHMsVGltZVByZWNpc2lvbjpraSxab2RBbnk6S28sWm9kQXJyYXk6WW8sWm9kQmFzZTY0OlRuLFpvZEJhc2U2NFVSTDpJbixab2RCaWdJbnQ6a3QsWm9kQmlnSW50Rm9ybWF0OkVuLFpvZEJvb2xlYW46d3QsWm9kQ0lEUnY0OlNuLFpvZENJRFJ2Njp6bixab2RDVUlEOnZuLFpvZENVSUQyOmJuLFpvZENhdGNoOnZyLFpvZENvZGVjOlB0LFpvZENvbXBpbGVBc3luY0Vycm9yOlFzLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOllzLFpvZENyZWRpdENhcmQ6SG8sWm9kQ3VzdG9tOnh0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpOZSxab2REYXRlOlJuLFpvZERlZmF1bHQ6ZHIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOmVyLFpvZEUxNjQ6UG4sWm9kRW1haWw6Zm4sWm9kRW1vamk6bW4sWm9kRW51bTpWZSxab2RFcnJvcjptZixab2RFeGFjdE9wdGlvbmFsOk5uLFpvZEZpbGU6YXIsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiBsb30sWm9kRnVuY3Rpb246SXIsWm9kR1VJRDpobixab2RJQkFOOkZvLFpvZElQdjQ6a24sWm9kSVB2Njokbixab2RJU09EYXRlOmd0LFpvZElTT0RhdGVUaW1lOm10LFpvZElTT0R1cmF0aW9uOmJ0LFpvZElTT1RpbWU6dnQsWm9kSW5zdGFuY2VPZjpDcixab2RJbnRlcnNlY3Rpb246dHIsWm9kSXNzdWVDb2RlOmdmLFpvZEpXVDp4bixab2RLU1VJRDp3bixab2RMYXp5OlNyLFpvZExpdGVyYWw6aXIsWm9kTUFDOlVvLFpvZE1hcDpycixab2ROYU46X3IsWm9kTmFub0lEOmduLFpvZE5ldmVyOkdvLFpvZE5vbk9wdGlvbmFsOmpuLFpvZE51bGw6Sm8sWm9kTnVsbGFibGU6bHIsWm9kTnVtYmVyOnl0LFpvZE51bWJlckZvcm1hdDpqZSxab2RPYmplY3Q6JHQsWm9kT3B0aW9uYWw6VHQsWm9kUGlwZTpJdCxab2RQcmVmYXVsdDpmcixab2RQcmVwcm9jZXNzOnlyLFpvZFByb21pc2U6VHIsWm9kUmVhZG9ubHk6d3IsWm9kUmVhbEVycm9yOmFlLFpvZFJlY29yZDpCZSxab2RTZXQ6c3IsWm9kU3RyaW5nOmh0LFpvZFN0cmluZ0Zvcm1hdDpqLFpvZFN1Y2Nlc3M6Z3IsWm9kU3ltYm9sOkJvLFpvZFRlbXBsYXRlTGl0ZXJhbDokcixab2RUcmFuc2Zvcm06Y3IsWm9kVHVwbGU6bnIsWm9kVHlwZTpJLFpvZFVMSUQ6X24sWm9kVVJMOl90LFpvZFVVSUQ6X2UsWm9kVW5kZWZpbmVkOlZvLFpvZFVuaW9uOlN0LFpvZFVua25vd246V28sWm9kVm9pZDpRbyxab2RYSUQ6eW4sWm9kWG9yOlhvLF9ab2RTdHJpbmc6cG4sX2RlZmF1bHQ6cHIsX2Z1bmN0aW9uOmF0LGFueTpPbixhcnJheTokLGJhc2U2NDpjYSxiYXNlNjR1cmw6dWEsYmlnaW50OiRhLGJvb2xlYW46TixjYXRjaDpicixjaGVjazpCYSxjaWRydjQ6aWEsY2lkcnY2OmFhLGNsb25lOkgsY29kZWM6TGEsY29lcmNlOlRmLGNvbXBpbGU6WHMsY29uZmlnOkosY29yZTpwZixjcmVkaXRDYXJkOmRhLGN1aWQ6WWksY3VpZDI6WGksY3VycmVuY3lDb2RlOnZhLGN1c3RvbTpQcixkYXRlOlBhLGRlY29kZTpaaSxkZWNvZGVBc3luYzpqaSxkZWVwUGFydGlhbDprZixkZXNjcmliZTpWYSxkaXNjcmltaW5hdGVkVW5pb246QW4sZTE2NDpsYSxlbWFpbDpVaSxlbW9qaTpHaSxlbmNvZGU6QWksZW5jb2RlQXN5bmM6TmksZW5kc1dpdGg6b24sZW51bTpHLGV4YWN0T3B0aW9uYWw6dXIsZmlsZTpqYSxmbGF0dGVuRXJyb3I6em8sZmxvYXQzMjpfYSxmbG9hdDY0OnlhLGZvcm1hdEVycm9yOlRvLGZyb21KU09OU2NoZW1hOndmLGZ1bmN0aW9uOmF0LGdldERpc2NyaW1pbmF0ZWRPcHRpb246RHMsZ2V0RXJyb3JNYXA6YmYsZ2xvYmFsUmVnaXN0cnk6aGUsZ3Q6eGUsZ3RlOmxlLGd1aWQ6SGksaGFzaDpiYSxoZXg6Z2EsaG9zdG5hbWU6bWEsaHR0cFVybDpXaSxpYmFuOnBhLGluY2x1ZGVzOnRuLGlucHV0OlNmLGluc3RhbmNlb2Y6S2EsaW50Ok50LGludDMyOndhLGludDY0OlNhLGludGVyc2VjdGlvbjp6dCxpbnZlcnRDb2RlYzpVYSxpcHY0Om9hLGlwdjY6c2EsaXNvOlFhLGpzb246R2Esand0OmZhLGtleW9mOnhhLGtzdWlkOm5hLGxhenk6enIsbGVuZ3RoOnB0LGxpdGVyYWw6aCxsb2NhbGVzOlZzLGxvb3NlT2JqZWN0OlcsbG9vc2VSZWNvcmQ6UmEsbG93ZXJjYXNlOlh0LGx0OlBlLGx0ZTp1ZSxtYWM6cmEsbWFwOkFhLG1heExlbmd0aDpkdCxtYXhTaXplOldlLG1lbW9pemVyOlJvLG1ldGE6SmEsbWltZTpzbixtaW5MZW5ndGg6WmUsbWluU2l6ZTpFZSxtdWx0aXBsZU9mOkhlLG5hbjpEYSxuYW5vaWQ6UWksbmF0aXZlRW51bTpOYSxuZWdhdGl2ZTpNbyxuZXZlcjpGZSxub25uZWdhdGl2ZTpEbyxub25vcHRpb25hbDptcixub25wb3NpdGl2ZTpxbyxub3JtYWxpemU6YW4sbnVsbDpDbixudWxsYWJsZTppdCxudWxsaXNoOk1hLG51bWJlcjpULG9iamVjdDp2LG9wdGlvbmFsOkQsb3V0cHV0OnpmLG92ZXJ3cml0ZTprZSxwYXJzZTpFaSxwYXJzZUFzeW5jOkNpLHBhcnRpYWxSZWNvcmQ6T2EscGlwZTpqdCxwb3NpdGl2ZTpqbyxwcmVmYXVsdDpocixwcmVwcm9jZXNzOk1uLHByZXR0aWZ5RXJyb3I6bXMscHJvbWlzZTpGYSxwcm9wZXJ0aWVzOnJuLHByb3BlcnR5OkxvLHJlYWRvbmx5OmtyLHJlY29yZDpDLHJlZmluZTp4cixyZWdleDpZdCxyZWdleGVzOkNvLHJlZ2lzdHJ5OkFvLHNhZmVEZWNvZGU6cWksc2FmZURlY29kZUFzeW5jOkxpLHNhZmVFbmNvZGU6TWksc2FmZUVuY29kZUFzeW5jOkRpLHNhZmVQYXJzZTpPaSxzYWZlUGFyc2VBc3luYzpSaSxzZXQ6WmEsc2V0RXJyb3JNYXA6dmYsc2l6ZTpsdCxzbHVnaWZ5OmRuLHN0YXJ0c1dpdGg6bm4sc3RyaWN0T2JqZWN0OkVhLHN0cmluZzpmLHN0cmluZ0Zvcm1hdDpoYSxzdHJpbmdib29sOldhLHN1Y2Nlc3M6cWEsc3VwZXJSZWZpbmU6RXIsc3ltYm9sOlRhLHRlbXBsYXRlTGl0ZXJhbDpIYSx0b0pTT05TY2hlbWE6SWksdG9Mb3dlckNhc2U6dW4sdG9VcHBlckNhc2U6bG4sdG9ab2Q6Z28sdHJhbnNmb3JtOlpuLHRyZWVpZnlFcnJvcjpocyx0cmltOmNuLHR1cGxlOm9yLHVpbnQzMjprYSx1aW50NjQ6emEsdWxpZDplYSx1bmRlZmluZWQ6c3QsdW5pb246UCx1bmtub3duOlosdXBwZXJjYXNlOmVuLHVybDpLaSx1dGlsOmRzLHV1aWQ6RmksdXVpZHY0OkJpLHV1aWR2NjpWaSx1dWlkdjc6SmksdmFsaWRhdGU6UG8sdmFsaWRhdGVBc3luYzp4byx2b2lkOklhLHdpdGhQYXJzZXI6ZWkseGlkOnRhLHhvcjpDYX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSx5dj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOmZzLCRpbnB1dDpLcywkb3V0cHV0OkpzLElOVkFMSUQ6R3MsTkVWRVI6cHMsVGltZVByZWNpc2lvbjpraSxab2RBbnk6S28sWm9kQXJyYXk6WW8sWm9kQmFzZTY0OlRuLFpvZEJhc2U2NFVSTDpJbixab2RCaWdJbnQ6a3QsWm9kQmlnSW50Rm9ybWF0OkVuLFpvZEJvb2xlYW46d3QsWm9kQ0lEUnY0OlNuLFpvZENJRFJ2Njp6bixab2RDVUlEOnZuLFpvZENVSUQyOmJuLFpvZENhdGNoOnZyLFpvZENvZGVjOlB0LFpvZENvbXBpbGVBc3luY0Vycm9yOlFzLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOllzLFpvZENyZWRpdENhcmQ6SG8sWm9kQ3VzdG9tOnh0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpOZSxab2REYXRlOlJuLFpvZERlZmF1bHQ6ZHIsWm9kRGlzY3JpbWluYXRlZFVuaW9uOmVyLFpvZEUxNjQ6UG4sWm9kRW1haWw6Zm4sWm9kRW1vamk6bW4sWm9kRW51bTpWZSxab2RFcnJvcjptZixab2RFeGFjdE9wdGlvbmFsOk5uLFpvZEZpbGU6YXIsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiBsb30sWm9kRnVuY3Rpb246SXIsWm9kR1VJRDpobixab2RJQkFOOkZvLFpvZElQdjQ6a24sWm9kSVB2Njokbixab2RJU09EYXRlOmd0LFpvZElTT0RhdGVUaW1lOm10LFpvZElTT0R1cmF0aW9uOmJ0LFpvZElTT1RpbWU6dnQsWm9kSW5zdGFuY2VPZjpDcixab2RJbnRlcnNlY3Rpb246dHIsWm9kSXNzdWVDb2RlOmdmLFpvZEpXVDp4bixab2RLU1VJRDp3bixab2RMYXp5OlNyLFpvZExpdGVyYWw6aXIsWm9kTUFDOlVvLFpvZE1hcDpycixab2ROYU46X3IsWm9kTmFub0lEOmduLFpvZE5ldmVyOkdvLFpvZE5vbk9wdGlvbmFsOmpuLFpvZE51bGw6Sm8sWm9kTnVsbGFibGU6bHIsWm9kTnVtYmVyOnl0LFpvZE51bWJlckZvcm1hdDpqZSxab2RPYmplY3Q6JHQsWm9kT3B0aW9uYWw6VHQsWm9kUGlwZTpJdCxab2RQcmVmYXVsdDpmcixab2RQcmVwcm9jZXNzOnlyLFpvZFByb21pc2U6VHIsWm9kUmVhZG9ubHk6d3IsWm9kUmVhbEVycm9yOmFlLFpvZFJlY29yZDpCZSxab2RTZXQ6c3IsWm9kU3RyaW5nOmh0LFpvZFN0cmluZ0Zvcm1hdDpqLFpvZFN1Y2Nlc3M6Z3IsWm9kU3ltYm9sOkJvLFpvZFRlbXBsYXRlTGl0ZXJhbDokcixab2RUcmFuc2Zvcm06Y3IsWm9kVHVwbGU6bnIsWm9kVHlwZTpJLFpvZFVMSUQ6X24sWm9kVVJMOl90LFpvZFVVSUQ6X2UsWm9kVW5kZWZpbmVkOlZvLFpvZFVuaW9uOlN0LFpvZFVua25vd246V28sWm9kVm9pZDpRbyxab2RYSUQ6eW4sWm9kWG9yOlhvLF9ab2RTdHJpbmc6cG4sX2RlZmF1bHQ6cHIsX2Z1bmN0aW9uOmF0LGFueTpPbixhcnJheTokLGJhc2U2NDpjYSxiYXNlNjR1cmw6dWEsYmlnaW50OiRhLGJvb2xlYW46TixjYXRjaDpicixjaGVjazpCYSxjaWRydjQ6aWEsY2lkcnY2OmFhLGNsb25lOkgsY29kZWM6TGEsY29lcmNlOlRmLGNvbXBpbGU6WHMsY29uZmlnOkosY29yZTpwZixjcmVkaXRDYXJkOmRhLGN1aWQ6WWksY3VpZDI6WGksY3VycmVuY3lDb2RlOnZhLGN1c3RvbTpQcixkYXRlOlBhLGRlY29kZTpaaSxkZWNvZGVBc3luYzpqaSxkZWVwUGFydGlhbDprZixkZWZhdWx0OnR1LGRlc2NyaWJlOlZhLGRpc2NyaW1pbmF0ZWRVbmlvbjpBbixlMTY0OmxhLGVtYWlsOlVpLGVtb2ppOkdpLGVuY29kZTpBaSxlbmNvZGVBc3luYzpOaSxlbmRzV2l0aDpvbixlbnVtOkcsZXhhY3RPcHRpb25hbDp1cixmaWxlOmphLGZsYXR0ZW5FcnJvcjp6byxmbG9hdDMyOl9hLGZsb2F0NjQ6eWEsZm9ybWF0RXJyb3I6VG8sZnJvbUpTT05TY2hlbWE6d2YsZnVuY3Rpb246YXQsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpEcyxnZXRFcnJvck1hcDpiZixnbG9iYWxSZWdpc3RyeTpoZSxndDp4ZSxndGU6bGUsZ3VpZDpIaSxoYXNoOmJhLGhleDpnYSxob3N0bmFtZTptYSxodHRwVXJsOldpLGliYW46cGEsaW5jbHVkZXM6dG4saW5wdXQ6U2YsaW5zdGFuY2VvZjpLYSxpbnQ6TnQsaW50MzI6d2EsaW50NjQ6U2EsaW50ZXJzZWN0aW9uOnp0LGludmVydENvZGVjOlVhLGlwdjQ6b2EsaXB2NjpzYSxpc286UWEsanNvbjpHYSxqd3Q6ZmEsa2V5b2Y6eGEsa3N1aWQ6bmEsbGF6eTp6cixsZW5ndGg6cHQsbGl0ZXJhbDpoLGxvY2FsZXM6VnMsbG9vc2VPYmplY3Q6Vyxsb29zZVJlY29yZDpSYSxsb3dlcmNhc2U6WHQsbHQ6UGUsbHRlOnVlLG1hYzpyYSxtYXA6QWEsbWF4TGVuZ3RoOmR0LG1heFNpemU6V2UsbWVtb2l6ZXI6Um8sbWV0YTpKYSxtaW1lOnNuLG1pbkxlbmd0aDpaZSxtaW5TaXplOkVlLG11bHRpcGxlT2Y6SGUsbmFuOkRhLG5hbm9pZDpRaSxuYXRpdmVFbnVtOk5hLG5lZ2F0aXZlOk1vLG5ldmVyOkZlLG5vbm5lZ2F0aXZlOkRvLG5vbm9wdGlvbmFsOm1yLG5vbnBvc2l0aXZlOnFvLG5vcm1hbGl6ZTphbixudWxsOkNuLG51bGxhYmxlOml0LG51bGxpc2g6TWEsbnVtYmVyOlQsb2JqZWN0OnYsb3B0aW9uYWw6RCxvdXRwdXQ6emYsb3ZlcndyaXRlOmtlLHBhcnNlOkVpLHBhcnNlQXN5bmM6Q2kscGFydGlhbFJlY29yZDpPYSxwaXBlOmp0LHBvc2l0aXZlOmpvLHByZWZhdWx0OmhyLHByZXByb2Nlc3M6TW4scHJldHRpZnlFcnJvcjptcyxwcm9taXNlOkZhLHByb3BlcnRpZXM6cm4scHJvcGVydHk6TG8scmVhZG9ubHk6a3IscmVjb3JkOkMscmVmaW5lOnhyLHJlZ2V4Oll0LHJlZ2V4ZXM6Q28scmVnaXN0cnk6QW8sc2FmZURlY29kZTpxaSxzYWZlRGVjb2RlQXN5bmM6TGksc2FmZUVuY29kZTpNaSxzYWZlRW5jb2RlQXN5bmM6RGksc2FmZVBhcnNlOk9pLHNhZmVQYXJzZUFzeW5jOlJpLHNldDpaYSxzZXRFcnJvck1hcDp2ZixzaXplOmx0LHNsdWdpZnk6ZG4sc3RhcnRzV2l0aDpubixzdHJpY3RPYmplY3Q6RWEsc3RyaW5nOmYsc3RyaW5nRm9ybWF0OmhhLHN0cmluZ2Jvb2w6V2Esc3VjY2VzczpxYSxzdXBlclJlZmluZTpFcixzeW1ib2w6VGEsdGVtcGxhdGVMaXRlcmFsOkhhLHRvSlNPTlNjaGVtYTpJaSx0b0xvd2VyQ2FzZTp1bix0b1VwcGVyQ2FzZTpsbix0b1pvZDpnbyx0cmFuc2Zvcm06Wm4sdHJlZWlmeUVycm9yOmhzLHRyaW06Y24sdHVwbGU6b3IsdWludDMyOmthLHVpbnQ2NDp6YSx1bGlkOmVhLHVuZGVmaW5lZDpzdCx1bmlvbjpQLHVua25vd246Wix1cHBlcmNhc2U6ZW4sdXJsOktpLHV0aWw6ZHMsdXVpZDpGaSx1dWlkdjQ6QmksdXVpZHY2OlZpLHV1aWR2NzpKaSx2YWxpZGF0ZTpQbyx2YWxpZGF0ZUFzeW5jOnhvLHZvaWQ6SWEsd2l0aFBhcnNlcjplaSx4aWQ6dGEseG9yOkNhLHo6dHV9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSkscWU9ImlvLm1vZGVsY29udGV4dHByb3RvY29sL3JlbGF0ZWQtdGFzayIsT3I9IjIuMCIsVj1QcihlPT5lIT09bnVsbCYmKHR5cGVvZiBlPT0ib2JqZWN0Inx8dHlwZW9mIGU9PSJmdW5jdGlvbiIpKSxJZj1QKFtmKCksVCgpLmludCgpXSksUGY9ZigpO1coe3R0bDpUKCkub3B0aW9uYWwoKSxwb2xsSW50ZXJ2YWw6VCgpLm9wdGlvbmFsKCl9KTtjb25zdCB3dj12KHt0dGw6VCgpLm9wdGlvbmFsKCl9KSxrdj12KHt0YXNrSWQ6ZigpfSksWWE9Vyh7cHJvZ3Jlc3NUb2tlbjpJZi5vcHRpb25hbCgpLFtxZV06a3Yub3B0aW9uYWwoKX0pLHBlPXYoe19tZXRhOllhLm9wdGlvbmFsKCl9KSxxbj1wZS5leHRlbmQoe3Rhc2s6d3Yub3B0aW9uYWwoKX0pLCR2PWU9PnFuLnNhZmVQYXJzZShlKS5zdWNjZXNzLFE9dih7bWV0aG9kOmYoKSxwYXJhbXM6cGUubG9vc2UoKS5vcHRpb25hbCgpfSksdmU9dih7X21ldGE6WWEub3B0aW9uYWwoKX0pLGJlPXYoe21ldGhvZDpmKCkscGFyYW1zOnZlLmxvb3NlKCkub3B0aW9uYWwoKX0pLFk9Vyh7X21ldGE6WWEub3B0aW9uYWwoKX0pLERuPVAoW2YoKSxUKCkuaW50KCldKSx4Zj12KHtqc29ucnBjOmgoT3IpLGlkOkRuLC4uLlEuc2hhcGV9KS5zdHJpY3QoKSxudT1lPT54Zi5zYWZlUGFyc2UoZSkuc3VjY2VzcyxFZj12KHtqc29ucnBjOmgoT3IpLC4uLmJlLnNoYXBlfSkuc3RyaWN0KCksU3Y9ZT0+RWYuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsWGE9dih7anNvbnJwYzpoKE9yKSxpZDpEbixyZXN1bHQ6WX0pLnN0cmljdCgpLHRvPWU9PlhhLnNhZmVQYXJzZShlKS5zdWNjZXNzO3ZhciBNOyhmdW5jdGlvbihlKXtlW2UuQ29ubmVjdGlvbkNsb3NlZD0tMzJlM109IkNvbm5lY3Rpb25DbG9zZWQiLGVbZS5SZXF1ZXN0VGltZW91dD0tMzIwMDFdPSJSZXF1ZXN0VGltZW91dCIsZVtlLlBhcnNlRXJyb3I9LTMyNzAwXT0iUGFyc2VFcnJvciIsZVtlLkludmFsaWRSZXF1ZXN0PS0zMjYwMF09IkludmFsaWRSZXF1ZXN0IixlW2UuTWV0aG9kTm90Rm91bmQ9LTMyNjAxXT0iTWV0aG9kTm90Rm91bmQiLGVbZS5JbnZhbGlkUGFyYW1zPS0zMjYwMl09IkludmFsaWRQYXJhbXMiLGVbZS5JbnRlcm5hbEVycm9yPS0zMjYwM109IkludGVybmFsRXJyb3IiLGVbZS5VcmxFbGljaXRhdGlvblJlcXVpcmVkPS0zMjA0Ml09IlVybEVsaWNpdGF0aW9uUmVxdWlyZWQifSkoTXx8KE09e30pKTtjb25zdCBlYz12KHtqc29ucnBjOmgoT3IpLGlkOkRuLm9wdGlvbmFsKCksZXJyb3I6dih7Y29kZTpUKCkuaW50KCksbWVzc2FnZTpmKCksZGF0YTpaKCkub3B0aW9uYWwoKX0pfSkuc3RyaWN0KCksenY9ZT0+ZWMuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsVHY9UChbeGYsRWYsWGEsZWNdKTtQKFtYYSxlY10pO2NvbnN0IHRjPVkuc3RyaWN0KCksSXY9dmUuZXh0ZW5kKHtyZXF1ZXN0SWQ6RG4ub3B0aW9uYWwoKSxyZWFzb246ZigpLm9wdGlvbmFsKCl9KSxuYz1iZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIpLHBhcmFtczpJdn0pLFB2PXYoe3NyYzpmKCksbWltZVR5cGU6ZigpLm9wdGlvbmFsKCksc2l6ZXM6JChmKCkpLm9wdGlvbmFsKCksdGhlbWU6RyhbImxpZ2h0IiwiZGFyayJdKS5vcHRpb25hbCgpfSksTG49dih7aWNvbnM6JChQdikub3B0aW9uYWwoKX0pLGN0PXYoe25hbWU6ZigpLHRpdGxlOmYoKS5vcHRpb25hbCgpfSksUnI9Y3QuZXh0ZW5kKHsuLi5jdC5zaGFwZSwuLi5Mbi5zaGFwZSx2ZXJzaW9uOmYoKSx3ZWJzaXRlVXJsOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpfSkseHY9enQodih7YXBwbHlEZWZhdWx0czpOKCkub3B0aW9uYWwoKX0pLEMoZigpLFooKSkpLEV2PU1uKGU9PmUmJnR5cGVvZiBlPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoZSkmJk9iamVjdC5rZXlzKGUpLmxlbmd0aD09PTA/e2Zvcm06e319OmUsenQodih7Zm9ybTp4di5vcHRpb25hbCgpLHVybDpWLm9wdGlvbmFsKCl9KSxDKGYoKSxaKCkpLm9wdGlvbmFsKCkpKSxDdj1XKHtsaXN0OlYub3B0aW9uYWwoKSxjYW5jZWw6Vi5vcHRpb25hbCgpLHJlcXVlc3RzOlcoe3NhbXBsaW5nOlcoe2NyZWF0ZU1lc3NhZ2U6Vi5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjpXKHtjcmVhdGU6Vi5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxPdj1XKHtsaXN0OlYub3B0aW9uYWwoKSxjYW5jZWw6Vi5vcHRpb25hbCgpLHJlcXVlc3RzOlcoe3Rvb2xzOlcoe2NhbGw6Vi5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxSdj12KHtleHBlcmltZW50YWw6QyhmKCksVikub3B0aW9uYWwoKSxzYW1wbGluZzp2KHtjb250ZXh0OlYub3B0aW9uYWwoKSx0b29sczpWLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOkV2Lm9wdGlvbmFsKCkscm9vdHM6dih7bGlzdENoYW5nZWQ6TigpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRhc2tzOkN2Lm9wdGlvbmFsKCksZXh0ZW5zaW9uczpDKGYoKSxWKS5vcHRpb25hbCgpfSksQXY9cGUuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246ZigpLGNhcGFiaWxpdGllczpSdixjbGllbnRJbmZvOlJyfSksWnY9US5leHRlbmQoe21ldGhvZDpoKCJpbml0aWFsaXplIikscGFyYW1zOkF2fSksTnY9dih7ZXhwZXJpbWVudGFsOkMoZigpLFYpLm9wdGlvbmFsKCksbG9nZ2luZzpWLm9wdGlvbmFsKCksY29tcGxldGlvbnM6Vi5vcHRpb25hbCgpLHByb21wdHM6dih7bGlzdENoYW5nZWQ6TigpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHJlc291cmNlczp2KHtzdWJzY3JpYmU6TigpLm9wdGlvbmFsKCksbGlzdENoYW5nZWQ6TigpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRvb2xzOnYoe2xpc3RDaGFuZ2VkOk4oKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczpPdi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6QyhmKCksVikub3B0aW9uYWwoKX0pLGp2PVkuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246ZigpLGNhcGFiaWxpdGllczpOdixzZXJ2ZXJJbmZvOlJyLGluc3RydWN0aW9uczpmKCkub3B0aW9uYWwoKX0pLE12PWJlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6dmUub3B0aW9uYWwoKX0pLEFyPVEuZXh0ZW5kKHttZXRob2Q6aCgicGluZyIpLHBhcmFtczpwZS5vcHRpb25hbCgpfSkscXY9dih7cHJvZ3Jlc3M6VCgpLHRvdGFsOkQoVCgpKSxtZXNzYWdlOkQoZigpKX0pLER2PXYoey4uLnZlLnNoYXBlLC4uLnF2LnNoYXBlLHByb2dyZXNzVG9rZW46SWZ9KSxvYz1iZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL3Byb2dyZXNzIikscGFyYW1zOkR2fSksTHY9cGUuZXh0ZW5kKHtjdXJzb3I6UGYub3B0aW9uYWwoKX0pLFVuPVEuZXh0ZW5kKHtwYXJhbXM6THYub3B0aW9uYWwoKX0pLEhuPVkuZXh0ZW5kKHtuZXh0Q3Vyc29yOlBmLm9wdGlvbmFsKCl9KSxVdj1HKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLEZuPXYoe3Rhc2tJZDpmKCksc3RhdHVzOlV2LHR0bDpQKFtUKCksQ24oKV0pLGNyZWF0ZWRBdDpmKCksbGFzdFVwZGF0ZWRBdDpmKCkscG9sbEludGVydmFsOkQoVCgpKSxzdGF0dXNNZXNzYWdlOkQoZigpKX0pLHJjPVkuZXh0ZW5kKHt0YXNrOkZufSksSHY9dmUubWVyZ2UoRm4pLHBvPWJlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIikscGFyYW1zOkh2fSksc2M9US5leHRlbmQoe21ldGhvZDpoKCJ0YXNrcy9nZXQiKSxwYXJhbXM6cGUuZXh0ZW5kKHt0YXNrSWQ6ZigpfSl9KSxpYz1ZLm1lcmdlKEZuKSxhYz1RLmV4dGVuZCh7bWV0aG9kOmgoInRhc2tzL3Jlc3VsdCIpLHBhcmFtczpwZS5leHRlbmQoe3Rhc2tJZDpmKCl9KX0pO1kubG9vc2UoKTtjb25zdCBjYz1Vbi5leHRlbmQoe21ldGhvZDpoKCJ0YXNrcy9saXN0Iil9KSx1Yz1Ibi5leHRlbmQoe3Rhc2tzOiQoRm4pfSksbGM9US5leHRlbmQoe21ldGhvZDpoKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6cGUuZXh0ZW5kKHt0YXNrSWQ6ZigpfSl9KSxGdj1ZLm1lcmdlKEZuKSxDZj12KHt1cmk6ZigpLG1pbWVUeXBlOkQoZigpKSxfbWV0YTpDKGYoKSxaKCkpLm9wdGlvbmFsKCl9KSxPZj1DZi5leHRlbmQoe3RleHQ6ZigpfSksZGM9ZigpLnJlZmluZShlPT57dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX0se21lc3NhZ2U6IkludmFsaWQgQmFzZTY0IHN0cmluZyJ9KSxSZj1DZi5leHRlbmQoe2Jsb2I6ZGN9KSxCbj1HKFsidXNlciIsImFzc2lzdGFudCJdKSxFdD12KHthdWRpZW5jZTokKEJuKS5vcHRpb25hbCgpLHByaW9yaXR5OlQoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksbGFzdE1vZGlmaWVkOl9mKHtvZmZzZXQ6ITB9KS5vcHRpb25hbCgpfSksQWY9dih7Li4uY3Quc2hhcGUsLi4uTG4uc2hhcGUsdXJpOmYoKSxkZXNjcmlwdGlvbjpEKGYoKSksbWltZVR5cGU6RChmKCkpLHNpemU6RChUKCkpLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6RChXKHt9KSl9KSxCdj12KHsuLi5jdC5zaGFwZSwuLi5Mbi5zaGFwZSx1cmlUZW1wbGF0ZTpmKCksZGVzY3JpcHRpb246RChmKCkpLG1pbWVUeXBlOkQoZigpKSxhbm5vdGF0aW9uczpFdC5vcHRpb25hbCgpLF9tZXRhOkQoVyh7fSkpfSksVnY9VW4uZXh0ZW5kKHttZXRob2Q6aCgicmVzb3VyY2VzL2xpc3QiKX0pLFpmPUhuLmV4dGVuZCh7cmVzb3VyY2VzOiQoQWYpfSksSnY9VW4uZXh0ZW5kKHttZXRob2Q6aCgicmVzb3VyY2VzL3RlbXBsYXRlcy9saXN0Iil9KSxLdj1Ibi5leHRlbmQoe3Jlc291cmNlVGVtcGxhdGVzOiQoQnYpfSkscGM9cGUuZXh0ZW5kKHt1cmk6ZigpfSksV3Y9cGMsR3Y9US5leHRlbmQoe21ldGhvZDpoKCJyZXNvdXJjZXMvcmVhZCIpLHBhcmFtczpXdn0pLE5mPVkuZXh0ZW5kKHtjb250ZW50czokKFAoW09mLFJmXSkpfSksUXY9YmUuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnZlLm9wdGlvbmFsKCl9KSxZdj1wYyxYdj1RLmV4dGVuZCh7bWV0aG9kOmgoInJlc291cmNlcy9zdWJzY3JpYmUiKSxwYXJhbXM6WXZ9KSxlYj1wYyx0Yj1RLmV4dGVuZCh7bWV0aG9kOmgoInJlc291cmNlcy91bnN1YnNjcmliZSIpLHBhcmFtczplYn0pLG5iPXZlLmV4dGVuZCh7dXJpOmYoKX0pLG9iPWJlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL3VwZGF0ZWQiKSxwYXJhbXM6bmJ9KSxyYj12KHtuYW1lOmYoKSxkZXNjcmlwdGlvbjpEKGYoKSkscmVxdWlyZWQ6RChOKCkpfSksc2I9dih7Li4uY3Quc2hhcGUsLi4uTG4uc2hhcGUsZGVzY3JpcHRpb246RChmKCkpLGFyZ3VtZW50czpEKCQocmIpKSxfbWV0YTpEKFcoe30pKX0pLGliPVVuLmV4dGVuZCh7bWV0aG9kOmgoInByb21wdHMvbGlzdCIpfSksYWI9SG4uZXh0ZW5kKHtwcm9tcHRzOiQoc2IpfSksY2I9cGUuZXh0ZW5kKHtuYW1lOmYoKSxhcmd1bWVudHM6QyhmKCksZigpKS5vcHRpb25hbCgpfSksdWI9US5leHRlbmQoe21ldGhvZDpoKCJwcm9tcHRzL2dldCIpLHBhcmFtczpjYn0pLGZjPXYoe3R5cGU6aCgidGV4dCIpLHRleHQ6ZigpLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6QyhmKCksWigpKS5vcHRpb25hbCgpfSksaGM9dih7dHlwZTpoKCJpbWFnZSIpLGRhdGE6ZGMsbWltZVR5cGU6ZigpLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6QyhmKCksWigpKS5vcHRpb25hbCgpfSksbWM9dih7dHlwZTpoKCJhdWRpbyIpLGRhdGE6ZGMsbWltZVR5cGU6ZigpLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6QyhmKCksWigpKS5vcHRpb25hbCgpfSksbGI9dih7dHlwZTpoKCJ0b29sX3VzZSIpLG5hbWU6ZigpLGlkOmYoKSxpbnB1dDpDKGYoKSxaKCkpLF9tZXRhOkMoZigpLFooKSkub3B0aW9uYWwoKX0pLGpmPXYoe3R5cGU6aCgicmVzb3VyY2UiKSxyZXNvdXJjZTpQKFtPZixSZl0pLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6QyhmKCksWigpKS5vcHRpb25hbCgpfSksTWY9QWYuZXh0ZW5kKHt0eXBlOmgoInJlc291cmNlX2xpbmsiKX0pLFZuPVAoW2ZjLGhjLG1jLE1mLGpmXSksZGI9dih7cm9sZTpCbixjb250ZW50OlZufSkscGI9WS5leHRlbmQoe2Rlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLG1lc3NhZ2VzOiQoZGIpfSksZmI9YmUuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9wcm9tcHRzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczp2ZS5vcHRpb25hbCgpfSksaGI9dih7dGl0bGU6ZigpLm9wdGlvbmFsKCkscmVhZE9ubHlIaW50Ok4oKS5vcHRpb25hbCgpLGRlc3RydWN0aXZlSGludDpOKCkub3B0aW9uYWwoKSxpZGVtcG90ZW50SGludDpOKCkub3B0aW9uYWwoKSxvcGVuV29ybGRIaW50Ok4oKS5vcHRpb25hbCgpfSksbWI9dih7dGFza1N1cHBvcnQ6RyhbInJlcXVpcmVkIiwib3B0aW9uYWwiLCJmb3JiaWRkZW4iXSkub3B0aW9uYWwoKX0pLGdjPXYoey4uLmN0LnNoYXBlLC4uLkxuLnNoYXBlLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLGlucHV0U2NoZW1hOnYoe3R5cGU6aCgib2JqZWN0IikscHJvcGVydGllczpDKGYoKSxWKS5vcHRpb25hbCgpLHJlcXVpcmVkOiQoZigpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoWigpKSxvdXRwdXRTY2hlbWE6dih7dHlwZTpoKCJvYmplY3QiKSxwcm9wZXJ0aWVzOkMoZigpLFYpLm9wdGlvbmFsKCkscmVxdWlyZWQ6JChmKCkpLm9wdGlvbmFsKCl9KS5jYXRjaGFsbChaKCkpLm9wdGlvbmFsKCksYW5ub3RhdGlvbnM6aGIub3B0aW9uYWwoKSxleGVjdXRpb246bWIub3B0aW9uYWwoKSxfbWV0YTpDKGYoKSxaKCkpLm9wdGlvbmFsKCl9KSxxZj1Vbi5leHRlbmQoe21ldGhvZDpoKCJ0b29scy9saXN0Iil9KSxnYj1Ibi5leHRlbmQoe3Rvb2xzOiQoZ2MpfSksWnI9WS5leHRlbmQoe2NvbnRlbnQ6JChWbikuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6QyhmKCksWigpKS5vcHRpb25hbCgpLGlzRXJyb3I6TigpLm9wdGlvbmFsKCl9KTtaci5vcihZLmV4dGVuZCh7dG9vbFJlc3VsdDpaKCl9KSk7Y29uc3QgdmI9cW4uZXh0ZW5kKHtuYW1lOmYoKSxhcmd1bWVudHM6QyhmKCksWigpKS5vcHRpb25hbCgpfSksRGY9US5leHRlbmQoe21ldGhvZDpoKCJ0b29scy9jYWxsIikscGFyYW1zOnZifSksYmI9YmUuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6dmUub3B0aW9uYWwoKX0pO3Yoe2F1dG9SZWZyZXNoOk4oKS5kZWZhdWx0KCEwKSxkZWJvdW5jZU1zOlQoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLmRlZmF1bHQoMzAwKX0pO2NvbnN0IExmPUcoWyJkZWJ1ZyIsImluZm8iLCJub3RpY2UiLCJ3YXJuaW5nIiwiZXJyb3IiLCJjcml0aWNhbCIsImFsZXJ0IiwiZW1lcmdlbmN5Il0pLF9iPXBlLmV4dGVuZCh7bGV2ZWw6TGZ9KSx5Yj1RLmV4dGVuZCh7bWV0aG9kOmgoImxvZ2dpbmcvc2V0TGV2ZWwiKSxwYXJhbXM6X2J9KSx3Yj12ZS5leHRlbmQoe2xldmVsOkxmLGxvZ2dlcjpmKCkub3B0aW9uYWwoKSxkYXRhOlooKX0pLGtiPWJlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvbWVzc2FnZSIpLHBhcmFtczp3Yn0pLCRiPXYoe25hbWU6ZigpLm9wdGlvbmFsKCl9KSxTYj12KHtoaW50czokKCRiKS5vcHRpb25hbCgpLGNvc3RQcmlvcml0eTpUKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLHNwZWVkUHJpb3JpdHk6VCgpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxpbnRlbGxpZ2VuY2VQcmlvcml0eTpUKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpfSksemI9dih7bW9kZTpHKFsiYXV0byIsInJlcXVpcmVkIiwibm9uZSJdKS5vcHRpb25hbCgpfSksVGI9dih7dHlwZTpoKCJ0b29sX3Jlc3VsdCIpLHRvb2xVc2VJZDpmKCkuZGVzY3JpYmUoIlRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdG9vbCBjYWxsLiIpLGNvbnRlbnQ6JChWbikuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6dih7fSkubG9vc2UoKS5vcHRpb25hbCgpLGlzRXJyb3I6TigpLm9wdGlvbmFsKCksX21ldGE6QyhmKCksWigpKS5vcHRpb25hbCgpfSksSWI9QW4oInR5cGUiLFtmYyxoYyxtY10pLGZvPUFuKCJ0eXBlIixbZmMsaGMsbWMsbGIsVGJdKSxQYj12KHtyb2xlOkJuLGNvbnRlbnQ6UChbZm8sJChmbyldKSxfbWV0YTpDKGYoKSxaKCkpLm9wdGlvbmFsKCl9KSx4Yj1xbi5leHRlbmQoe21lc3NhZ2VzOiQoUGIpLG1vZGVsUHJlZmVyZW5jZXM6U2Iub3B0aW9uYWwoKSxzeXN0ZW1Qcm9tcHQ6ZigpLm9wdGlvbmFsKCksaW5jbHVkZUNvbnRleHQ6RyhbIm5vbmUiLCJ0aGlzU2VydmVyIiwiYWxsU2VydmVycyJdKS5vcHRpb25hbCgpLHRlbXBlcmF0dXJlOlQoKS5vcHRpb25hbCgpLG1heFRva2VuczpUKCkuaW50KCksc3RvcFNlcXVlbmNlczokKGYoKSkub3B0aW9uYWwoKSxtZXRhZGF0YTpWLm9wdGlvbmFsKCksdG9vbHM6JChnYykub3B0aW9uYWwoKSx0b29sQ2hvaWNlOnpiLm9wdGlvbmFsKCl9KSxFYj1RLmV4dGVuZCh7bWV0aG9kOmgoInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiKSxwYXJhbXM6eGJ9KSxVZj1ZLmV4dGVuZCh7bW9kZWw6ZigpLHN0b3BSZWFzb246RChHKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyJdKS5vcihmKCkpKSxyb2xlOkJuLGNvbnRlbnQ6SWJ9KSxIZj1ZLmV4dGVuZCh7bW9kZWw6ZigpLHN0b3BSZWFzb246RChHKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyIsInRvb2xVc2UiXSkub3IoZigpKSkscm9sZTpCbixjb250ZW50OlAoW2ZvLCQoZm8pXSl9KSxDYj12KHt0eXBlOmgoImJvb2xlYW4iKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxkZWZhdWx0Ok4oKS5vcHRpb25hbCgpfSksT2I9dih7dHlwZTpoKCJzdHJpbmciKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtaW5MZW5ndGg6VCgpLm9wdGlvbmFsKCksbWF4TGVuZ3RoOlQoKS5vcHRpb25hbCgpLGZvcm1hdDpHKFsiZW1haWwiLCJ1cmkiLCJkYXRlIiwiZGF0ZS10aW1lIl0pLm9wdGlvbmFsKCksZGVmYXVsdDpmKCkub3B0aW9uYWwoKX0pLFJiPXYoe3R5cGU6RyhbIm51bWJlciIsImludGVnZXIiXSksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksbWluaW11bTpUKCkub3B0aW9uYWwoKSxtYXhpbXVtOlQoKS5vcHRpb25hbCgpLGRlZmF1bHQ6VCgpLm9wdGlvbmFsKCl9KSxBYj12KHt0eXBlOmgoInN0cmluZyIpLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLGVudW06JChmKCkpLGRlZmF1bHQ6ZigpLm9wdGlvbmFsKCl9KSxaYj12KHt0eXBlOmgoInN0cmluZyIpLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLG9uZU9mOiQodih7Y29uc3Q6ZigpLHRpdGxlOmYoKX0pKSxkZWZhdWx0OmYoKS5vcHRpb25hbCgpfSksTmI9dih7dHlwZTpoKCJzdHJpbmciKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxlbnVtOiQoZigpKSxlbnVtTmFtZXM6JChmKCkpLm9wdGlvbmFsKCksZGVmYXVsdDpmKCkub3B0aW9uYWwoKX0pLGpiPVAoW0FiLFpiXSksTWI9dih7dHlwZTpoKCJhcnJheSIpLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLG1pbkl0ZW1zOlQoKS5vcHRpb25hbCgpLG1heEl0ZW1zOlQoKS5vcHRpb25hbCgpLGl0ZW1zOnYoe3R5cGU6aCgic3RyaW5nIiksZW51bTokKGYoKSl9KSxkZWZhdWx0OiQoZigpKS5vcHRpb25hbCgpfSkscWI9dih7dHlwZTpoKCJhcnJheSIpLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLG1pbkl0ZW1zOlQoKS5vcHRpb25hbCgpLG1heEl0ZW1zOlQoKS5vcHRpb25hbCgpLGl0ZW1zOnYoe2FueU9mOiQodih7Y29uc3Q6ZigpLHRpdGxlOmYoKX0pKX0pLGRlZmF1bHQ6JChmKCkpLm9wdGlvbmFsKCl9KSxEYj1QKFtNYixxYl0pLExiPVAoW05iLGpiLERiXSksVWI9UChbTGIsQ2IsT2IsUmJdKSxIYj1xbi5leHRlbmQoe21vZGU6aCgiZm9ybSIpLm9wdGlvbmFsKCksbWVzc2FnZTpmKCkscmVxdWVzdGVkU2NoZW1hOnYoe3R5cGU6aCgib2JqZWN0IikscHJvcGVydGllczpDKGYoKSxVYikscmVxdWlyZWQ6JChmKCkpLm9wdGlvbmFsKCl9KX0pLEZiPXFuLmV4dGVuZCh7bW9kZTpoKCJ1cmwiKSxtZXNzYWdlOmYoKSxlbGljaXRhdGlvbklkOmYoKSx1cmw6ZigpLnVybCgpfSksQmI9UChbSGIsRmJdKSxWYj1RLmV4dGVuZCh7bWV0aG9kOmgoImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczpCYn0pLEpiPXZlLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpmKCl9KSxLYj1iZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOkpifSksV2I9WS5leHRlbmQoe2FjdGlvbjpHKFsiYWNjZXB0IiwiZGVjbGluZSIsImNhbmNlbCJdKSxjb250ZW50Ok1uKGU9PmU9PT1udWxsP3ZvaWQgMDplLEMoZigpLFAoW2YoKSxUKCksTigpLCQoZigpKV0pKS5vcHRpb25hbCgpKX0pLEdiPXYoe3R5cGU6aCgicmVmL3Jlc291cmNlIiksdXJpOmYoKX0pLFFiPXYoe3R5cGU6aCgicmVmL3Byb21wdCIpLG5hbWU6ZigpfSksWWI9cGUuZXh0ZW5kKHtyZWY6UChbUWIsR2JdKSxhcmd1bWVudDp2KHtuYW1lOmYoKSx2YWx1ZTpmKCl9KSxjb250ZXh0OnYoe2FyZ3VtZW50czpDKGYoKSxmKCkpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksWGI9US5leHRlbmQoe21ldGhvZDpoKCJjb21wbGV0aW9uL2NvbXBsZXRlIikscGFyYW1zOllifSksZV89WS5leHRlbmQoe2NvbXBsZXRpb246Vyh7dmFsdWVzOiQoZigpKS5tYXgoMTAwKSx0b3RhbDpEKFQoKS5pbnQoKSksaGFzTW9yZTpEKE4oKSl9KX0pLHRfPXYoe3VyaTpmKCkuc3RhcnRzV2l0aCgiZmlsZTovLyIpLG5hbWU6ZigpLm9wdGlvbmFsKCksX21ldGE6QyhmKCksWigpKS5vcHRpb25hbCgpfSksbl89US5leHRlbmQoe21ldGhvZDpoKCJyb290cy9saXN0IikscGFyYW1zOnBlLm9wdGlvbmFsKCl9KSxvXz1ZLmV4dGVuZCh7cm9vdHM6JCh0Xyl9KSxyXz1iZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL3Jvb3RzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczp2ZS5vcHRpb25hbCgpfSk7UChbQXIsWnYsWGIseWIsdWIsaWIsVnYsSnYsR3YsWHYsdGIsRGYscWYsc2MsYWMsY2MsbGNdKTtQKFtuYyxvYyxNdixyXyxwb10pO1AoW3RjLFVmLEhmLFdiLG9fLGljLHVjLHJjXSk7UChbQXIsRWIsVmIsbl8sc2MsYWMsY2MsbGNdKTtQKFtuYyxvYyxrYixvYixRdixiYixmYixwbyxLYl0pO1AoW3RjLGp2LGVfLHBiLGFiLFpmLEt2LE5mLFpyLGdiLGljLHVjLHJjXSk7Y2xhc3MgUiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbixvKXtzdXBlcihgTUNQIGVycm9yICR7dH06ICR7bn1gKSx0aGlzLmNvZGU9dCx0aGlzLmRhdGE9byx0aGlzLm5hbWU9Ik1jcEVycm9yIn1zdGF0aWMgZnJvbUVycm9yKHQsbixvKXtpZih0PT09TS5VcmxFbGljaXRhdGlvblJlcXVpcmVkJiZvKXtjb25zdCByPW87aWYoci5lbGljaXRhdGlvbnMpcmV0dXJuIG5ldyBzXyhyLmVsaWNpdGF0aW9ucyxuKX1yZXR1cm4gbmV3IFIodCxuLG8pfX1jbGFzcyBzXyBleHRlbmRzIFJ7Y29uc3RydWN0b3IodCxuPWBVUkwgZWxpY2l0YXRpb24ke3QubGVuZ3RoPjE/InMiOiIifSByZXF1aXJlZGApe3N1cGVyKE0uVXJsRWxpY2l0YXRpb25SZXF1aXJlZCxuLHtlbGljaXRhdGlvbnM6dH0pfWdldCBlbGljaXRhdGlvbnMoKXtyZXR1cm4gdGhpcy5kYXRhPy5lbGljaXRhdGlvbnM/P1tdfX1mdW5jdGlvbiBNZShlKXtyZXR1cm4gZT09PSJjb21wbGV0ZWQifHxlPT09ImZhaWxlZCJ8fGU9PT0iY2FuY2VsbGVkIn1uZXcgU2V0KCJBQkNERUZHSElKS0xNTk9QUVJTVFVWWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnh5ejAxMjM0NTY3ODkiKTtmdW5jdGlvbiBvdShlKXtjb25zdCBuPUdnKGUpPy5tZXRob2Q7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJTY2hlbWEgaXMgbWlzc2luZyBhIG1ldGhvZCBsaXRlcmFsIik7Y29uc3Qgbz1RZyhuKTtpZih0eXBlb2YgbyE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKCJTY2hlbWEgbWV0aG9kIGxpdGVyYWwgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBvfWZ1bmN0aW9uIHJ1KGUsdCl7Y29uc3Qgbj1mZihlLHQpO2lmKCFuLnN1Y2Nlc3MpdGhyb3cgbi5lcnJvcjtyZXR1cm4gbi5kYXRhfWNvbnN0IGlfPTZlNDtjbGFzcyBhX3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9vcHRpb25zPXQsdGhpcy5fcmVxdWVzdE1lc3NhZ2VJZD0wLHRoaXMuX3JlcXVlc3RIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycz1uZXcgTWFwLHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl90aW1lb3V0SW5mbz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zPW5ldyBTZXQsdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zPW5ldyBNYXAsdGhpcy5fcmVxdWVzdFJlc29sdmVycz1uZXcgTWFwLHRoaXMuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcihuYyxuPT57dGhpcy5fb25jYW5jZWwobil9KSx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIob2Msbj0+e3RoaXMuX29ucHJvZ3Jlc3Mobil9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKEFyLG49Pih7fSkpLHRoaXMuX3Rhc2tTdG9yZT10Py50YXNrU3RvcmUsdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT10Py50YXNrTWVzc2FnZVF1ZXVlLHRoaXMuX3Rhc2tTdG9yZSYmKHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoc2MsYXN5bmMobixvKT0+e2NvbnN0IHI9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcil0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsIkZhaWxlZCB0byByZXRyaWV2ZSB0YXNrOiBUYXNrIG5vdCBmb3VuZCIpO3JldHVybnsuLi5yfX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoYWMsYXN5bmMobixvKT0+e2NvbnN0IHI9YXN5bmMoKT0+e2NvbnN0IHM9bi5wYXJhbXMudGFza0lkO2lmKHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpe2xldCBhO2Zvcig7YT1hd2FpdCB0aGlzLl90YXNrTWVzc2FnZVF1ZXVlLmRlcXVldWUocyxvLnNlc3Npb25JZCk7KXtpZihhLnR5cGU9PT0icmVzcG9uc2UifHxhLnR5cGU9PT0iZXJyb3IiKXtjb25zdCBjPWEubWVzc2FnZSx1PWMuaWQsbD10aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmdldCh1KTtpZihsKWlmKHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZGVsZXRlKHUpLGEudHlwZT09PSJyZXNwb25zZSIpbChjKTtlbHNle2NvbnN0IG09YyxiPW5ldyBSKG0uZXJyb3IuY29kZSxtLmVycm9yLm1lc3NhZ2UsbS5lcnJvci5kYXRhKTtsKGIpfWVsc2V7Y29uc3QgbT1hLnR5cGU9PT0icmVzcG9uc2UiPyJSZXNwb25zZSI6IkVycm9yIjt0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgJHttfSBoYW5kbGVyIG1pc3NpbmcgZm9yIHJlcXVlc3QgJHt1fWApKX1jb250aW51ZX1hd2FpdCB0aGlzLl90cmFuc3BvcnQ/LnNlbmQoYS5tZXNzYWdlLHtyZWxhdGVkUmVxdWVzdElkOm8ucmVxdWVzdElkfSl9fWNvbnN0IGk9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2socyxvLnNlc3Npb25JZCk7aWYoIWkpdGhyb3cgbmV3IFIoTS5JbnZhbGlkUGFyYW1zLGBUYXNrIG5vdCBmb3VuZDogJHtzfWApO2lmKCFNZShpLnN0YXR1cykpcmV0dXJuIGF3YWl0IHRoaXMuX3dhaXRGb3JUYXNrVXBkYXRlKHMsby5zaWduYWwpLGF3YWl0IHIoKTtpZihNZShpLnN0YXR1cykpe2NvbnN0IGE9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2tSZXN1bHQocyxvLnNlc3Npb25JZCk7cmV0dXJuIHRoaXMuX2NsZWFyVGFza1F1ZXVlKHMpLHsuLi5hLF9tZXRhOnsuLi5hLl9tZXRhLFtxZV06e3Rhc2tJZDpzfX19fXJldHVybiBhd2FpdCByKCl9O3JldHVybiBhd2FpdCByKCl9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKGNjLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3R7dGFza3M6cixuZXh0Q3Vyc29yOnN9PWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5saXN0VGFza3Mobi5wYXJhbXM/LmN1cnNvcixvLnNlc3Npb25JZCk7cmV0dXJue3Rhc2tzOnIsbmV4dEN1cnNvcjpzLF9tZXRhOnt9fX1jYXRjaChyKXt0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsYEZhaWxlZCB0byBsaXN0IHRhc2tzOiAke3IgaW5zdGFuY2VvZiBFcnJvcj9yLm1lc3NhZ2U6U3RyaW5nKHIpfWApfX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIobGMsYXN5bmMobixvKT0+e3RyeXtjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IFIoTS5JbnZhbGlkUGFyYW1zLGBUYXNrIG5vdCBmb3VuZDogJHtuLnBhcmFtcy50YXNrSWR9YCk7aWYoTWUoci5zdGF0dXMpKXRocm93IG5ldyBSKE0uSW52YWxpZFBhcmFtcyxgQ2Fubm90IGNhbmNlbCB0YXNrIGluIHRlcm1pbmFsIHN0YXR1czogJHtyLnN0YXR1c31gKTthd2FpdCB0aGlzLl90YXNrU3RvcmUudXBkYXRlVGFza1N0YXR1cyhuLnBhcmFtcy50YXNrSWQsImNhbmNlbGxlZCIsIkNsaWVudCBjYW5jZWxsZWQgdGFzayBleGVjdXRpb24uIixvLnNlc3Npb25JZCksdGhpcy5fY2xlYXJUYXNrUXVldWUobi5wYXJhbXMudGFza0lkKTtjb25zdCBzPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXMpdGhyb3cgbmV3IFIoTS5JbnZhbGlkUGFyYW1zLGBUYXNrIG5vdCBmb3VuZCBhZnRlciBjYW5jZWxsYXRpb246ICR7bi5wYXJhbXMudGFza0lkfWApO3JldHVybntfbWV0YTp7fSwuLi5zfX1jYXRjaChyKXt0aHJvdyByIGluc3RhbmNlb2YgUj9yOm5ldyBSKE0uSW52YWxpZFJlcXVlc3QsYEZhaWxlZCB0byBjYW5jZWwgdGFzazogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSl9YXN5bmMgX29uY2FuY2VsKHQpe2lmKCF0LnBhcmFtcy5yZXF1ZXN0SWQpcmV0dXJuO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5nZXQodC5wYXJhbXMucmVxdWVzdElkKT8uYWJvcnQodC5wYXJhbXMucmVhc29uKX1fc2V0dXBUaW1lb3V0KHQsbixvLHIscz0hMSl7dGhpcy5fdGltZW91dEluZm8uc2V0KHQse3RpbWVvdXRJZDpzZXRUaW1lb3V0KHIsbiksc3RhcnRUaW1lOkRhdGUubm93KCksdGltZW91dDpuLG1heFRvdGFsVGltZW91dDpvLHJlc2V0VGltZW91dE9uUHJvZ3Jlc3M6cyxvblRpbWVvdXQ6cn0pfV9yZXNldFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7aWYoIW4pcmV0dXJuITE7Y29uc3Qgbz1EYXRlLm5vdygpLW4uc3RhcnRUaW1lO2lmKG4ubWF4VG90YWxUaW1lb3V0JiZvPj1uLm1heFRvdGFsVGltZW91dCl0aHJvdyB0aGlzLl90aW1lb3V0SW5mby5kZWxldGUodCksUi5mcm9tRXJyb3IoTS5SZXF1ZXN0VGltZW91dCwiTWF4aW11bSB0b3RhbCB0aW1lb3V0IGV4Y2VlZGVkIix7bWF4VG90YWxUaW1lb3V0Om4ubWF4VG90YWxUaW1lb3V0LHRvdGFsRWxhcHNlZDpvfSk7cmV0dXJuIGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksbi50aW1lb3V0SWQ9c2V0VGltZW91dChuLm9uVGltZW91dCxuLnRpbWVvdXQpLCEwfV9jbGVhbnVwVGltZW91dCh0KXtjb25zdCBuPXRoaXMuX3RpbWVvdXRJbmZvLmdldCh0KTtuJiYoY2xlYXJUaW1lb3V0KG4udGltZW91dElkKSx0aGlzLl90aW1lb3V0SW5mby5kZWxldGUodCkpfWFzeW5jIGNvbm5lY3QodCl7aWYodGhpcy5fdHJhbnNwb3J0KXRocm93IG5ldyBFcnJvcigiQWxyZWFkeSBjb25uZWN0ZWQgdG8gYSB0cmFuc3BvcnQuIENhbGwgY2xvc2UoKSBiZWZvcmUgY29ubmVjdGluZyB0byBhIG5ldyB0cmFuc3BvcnQsIG9yIHVzZSBhIHNlcGFyYXRlIFByb3RvY29sIGluc3RhbmNlIHBlciBjb25uZWN0aW9uLiIpO3RoaXMuX3RyYW5zcG9ydD10O2NvbnN0IG49dGhpcy50cmFuc3BvcnQ/Lm9uY2xvc2U7dGhpcy5fdHJhbnNwb3J0Lm9uY2xvc2U9KCk9PntuPy4oKSx0aGlzLl9vbmNsb3NlKCl9O2NvbnN0IG89dGhpcy50cmFuc3BvcnQ/Lm9uZXJyb3I7dGhpcy5fdHJhbnNwb3J0Lm9uZXJyb3I9cz0+e28/LihzKSx0aGlzLl9vbmVycm9yKHMpfTtjb25zdCByPXRoaXMuX3RyYW5zcG9ydD8ub25tZXNzYWdlO3RoaXMuX3RyYW5zcG9ydC5vbm1lc3NhZ2U9KHMsaSk9PntyPy4ocyxpKSx0byhzKXx8enYocyk/dGhpcy5fb25yZXNwb25zZShzKTpudShzKT90aGlzLl9vbnJlcXVlc3QocyxpKTpTdihzKT90aGlzLl9vbm5vdGlmaWNhdGlvbihzKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgVW5rbm93biBtZXNzYWdlIHR5cGU6ICR7SlNPTi5zdHJpbmdpZnkocyl9YCkpfSxhd2FpdCB0aGlzLl90cmFuc3BvcnQuc3RhcnQoKX1fb25jbG9zZSgpe2NvbnN0IHQ9dGhpcy5fcmVzcG9uc2VIYW5kbGVyczt0aGlzLl9yZXNwb25zZUhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5jbGVhcigpLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5jbGVhcigpLHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmNsZWFyKCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5fdGltZW91dEluZm8udmFsdWVzKCkpY2xlYXJUaW1lb3V0KG8udGltZW91dElkKTt0aGlzLl90aW1lb3V0SW5mby5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy52YWx1ZXMoKSlvLmFib3J0KCk7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmNsZWFyKCk7Y29uc3Qgbj1SLmZyb21FcnJvcihNLkNvbm5lY3Rpb25DbG9zZWQsIkNvbm5lY3Rpb24gY2xvc2VkIik7dGhpcy5fdHJhbnNwb3J0PXZvaWQgMCx0aGlzLm9uY2xvc2U/LigpO2Zvcihjb25zdCBvIG9mIHQudmFsdWVzKCkpbyhuKX1fb25lcnJvcih0KXt0aGlzLm9uZXJyb3I/Lih0KX1fb25ub3RpZmljYXRpb24odCl7Y29uc3Qgbj10aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5nZXQodC5tZXRob2QpPz90aGlzLmZhbGxiYWNrTm90aWZpY2F0aW9uSGFuZGxlcjtuIT09dm9pZCAwJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5uKHQpKS5jYXRjaChvPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgVW5jYXVnaHQgZXJyb3IgaW4gbm90aWZpY2F0aW9uIGhhbmRsZXI6ICR7b31gKSkpfV9vbnJlcXVlc3QodCxuKXtjb25zdCBvPXRoaXMuX3JlcXVlc3RIYW5kbGVycy5nZXQodC5tZXRob2QpPz90aGlzLmZhbGxiYWNrUmVxdWVzdEhhbmRsZXIscj10aGlzLl90cmFuc3BvcnQscz10LnBhcmFtcz8uX21ldGE/LltxZV0/LnRhc2tJZDtpZihvPT09dm9pZCAwKXtjb25zdCBsPXtqc29ucnBjOiIyLjAiLGlkOnQuaWQsZXJyb3I6e2NvZGU6TS5NZXRob2ROb3RGb3VuZCxtZXNzYWdlOiJNZXRob2Qgbm90IGZvdW5kIn19O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/dGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6ImVycm9yIixtZXNzYWdlOmwsdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCkuY2F0Y2gobT0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBlbnF1ZXVlIGVycm9yIHJlc3BvbnNlOiAke219YCkpKTpyPy5zZW5kKGwpLmNhdGNoKG09PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBhbiBlcnJvciByZXNwb25zZTogJHttfWApKSk7cmV0dXJufWNvbnN0IGk9bmV3IEFib3J0Q29udHJvbGxlcjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuc2V0KHQuaWQsaSk7Y29uc3QgYT0kdih0LnBhcmFtcyk/dC5wYXJhbXMudGFzazp2b2lkIDAsYz10aGlzLl90YXNrU3RvcmU/dGhpcy5yZXF1ZXN0VGFza1N0b3JlKHQscj8uc2Vzc2lvbklkKTp2b2lkIDAsdT17c2lnbmFsOmkuc2lnbmFsLHNlc3Npb25JZDpyPy5zZXNzaW9uSWQsX21ldGE6dC5wYXJhbXM/Ll9tZXRhLHNlbmROb3RpZmljYXRpb246YXN5bmMgbD0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IG09e3JlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmKG0ucmVsYXRlZFRhc2s9e3Rhc2tJZDpzfSksYXdhaXQgdGhpcy5ub3RpZmljYXRpb24obCxtKX0sc2VuZFJlcXVlc3Q6YXN5bmMobCxtLGIpPT57aWYoaS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgUihNLkNvbm5lY3Rpb25DbG9zZWQsIlJlcXVlc3Qgd2FzIGNhbmNlbGxlZCIpO2NvbnN0IGc9ey4uLmIscmVsYXRlZFJlcXVlc3RJZDp0LmlkfTtzJiYhZy5yZWxhdGVkVGFzayYmKGcucmVsYXRlZFRhc2s9e3Rhc2tJZDpzfSk7Y29uc3QgXz1nLnJlbGF0ZWRUYXNrPy50YXNrSWQ/P3M7cmV0dXJuIF8mJmMmJmF3YWl0IGMudXBkYXRlVGFza1N0YXR1cyhfLCJpbnB1dF9yZXF1aXJlZCIpLGF3YWl0IHRoaXMucmVxdWVzdChsLG0sZyl9LGF1dGhJbmZvOm4/LmF1dGhJbmZvLHJlcXVlc3RJZDp0LmlkLHJlcXVlc3RJbmZvOm4/LnJlcXVlc3RJbmZvLHRhc2tJZDpzLHRhc2tTdG9yZTpjLHRhc2tSZXF1ZXN0ZWRUdGw6YT8udHRsLGNsb3NlU1NFU3RyZWFtOm4/LmNsb3NlU1NFU3RyZWFtLGNsb3NlU3RhbmRhbG9uZVNTRVN0cmVhbTpuPy5jbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW19O1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnthJiZ0aGlzLmFzc2VydFRhc2tIYW5kbGVyQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9KS50aGVuKCgpPT5vKHQsdSkpLnRoZW4oYXN5bmMgbD0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IG09e3Jlc3VsdDpsLGpzb25ycGM6IjIuMCIsaWQ6dC5pZH07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToicmVzcG9uc2UiLG1lc3NhZ2U6bSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKG0pfSxhc3luYyBsPT57aWYoaS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgbT17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOk51bWJlci5pc1NhZmVJbnRlZ2VyKGwuY29kZSk/bC5jb2RlOk0uSW50ZXJuYWxFcnJvcixtZXNzYWdlOmwubWVzc2FnZT8/IkludGVybmFsIGVycm9yIiwuLi5sLmRhdGEhPT12b2lkIDAmJntkYXRhOmwuZGF0YX19fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP2F3YWl0IHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTptLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpOmF3YWl0IHI/LnNlbmQobSl9KS5jYXRjaChsPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgcmVzcG9uc2U6ICR7bH1gKSkpLmZpbmFsbHkoKCk9Pnt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQuaWQpPT09aSYmdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmRlbGV0ZSh0LmlkKX0pfV9vbnByb2dyZXNzKHQpe2NvbnN0e3Byb2dyZXNzVG9rZW46biwuLi5vfT10LnBhcmFtcyxyPU51bWJlcihuKSxzPXRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZ2V0KHIpO2lmKCFzKXt0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVjZWl2ZWQgYSBwcm9ncmVzcyBub3RpZmljYXRpb24gZm9yIGFuIHVua25vd24gdG9rZW46ICR7SlNPTi5zdHJpbmdpZnkodCl9YCkpO3JldHVybn1jb25zdCBpPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KHIpLGE9dGhpcy5fdGltZW91dEluZm8uZ2V0KHIpO2lmKGEmJmkmJmEucmVzZXRUaW1lb3V0T25Qcm9ncmVzcyl0cnl7dGhpcy5fcmVzZXRUaW1lb3V0KHIpfWNhdGNoKGMpe3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKHIpLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKHIpLHRoaXMuX2NsZWFudXBUaW1lb3V0KHIpLGkoYyk7cmV0dXJufXMobyl9X29ucmVzcG9uc2UodCl7Y29uc3Qgbj1OdW1iZXIodC5pZCksbz10aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmdldChuKTtpZihvKXtpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShuKSx0byh0KSlvKHQpO2Vsc2V7Y29uc3QgaT1uZXcgUih0LmVycm9yLmNvZGUsdC5lcnJvci5tZXNzYWdlLHQuZXJyb3IuZGF0YSk7byhpKX1yZXR1cm59Y29uc3Qgcj10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChuKTtpZihyPT09dm9pZCAwKXt0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVjZWl2ZWQgYSByZXNwb25zZSBmb3IgYW4gdW5rbm93biBtZXNzYWdlIElEOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUobiksdGhpcy5fY2xlYW51cFRpbWVvdXQobik7bGV0IHM9ITE7aWYodG8odCkmJnQucmVzdWx0JiZ0eXBlb2YgdC5yZXN1bHQ9PSJvYmplY3QiKXtjb25zdCBpPXQucmVzdWx0O2lmKGkudGFzayYmdHlwZW9mIGkudGFzaz09Im9iamVjdCIpe2NvbnN0IGE9aS50YXNrO3R5cGVvZiBhLnRhc2tJZD09InN0cmluZyImJihzPSEwLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5zZXQoYS50YXNrSWQsbikpfX1pZihzfHx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShuKSx0byh0KSlyKHQpO2Vsc2V7Y29uc3QgaT1SLmZyb21FcnJvcih0LmVycm9yLmNvZGUsdC5lcnJvci5tZXNzYWdlLHQuZXJyb3IuZGF0YSk7cihpKX19Z2V0IHRyYW5zcG9ydCgpe3JldHVybiB0aGlzLl90cmFuc3BvcnR9YXN5bmMgY2xvc2UoKXthd2FpdCB0aGlzLl90cmFuc3BvcnQ/LmNsb3NlKCl9YXN5bmMqcmVxdWVzdFN0cmVhbSh0LG4sbyl7Y29uc3R7dGFzazpyfT1vPz97fTtpZighcil7dHJ5e3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMucmVxdWVzdCh0LG4sbyl9fWNhdGNoKGkpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjppIGluc3RhbmNlb2YgUj9pOm5ldyBSKE0uSW50ZXJuYWxFcnJvcixTdHJpbmcoaSkpfX1yZXR1cm59bGV0IHM7dHJ5e2NvbnN0IGk9YXdhaXQgdGhpcy5yZXF1ZXN0KHQscmMsbyk7aWYoaS50YXNrKXM9aS50YXNrLnRhc2tJZCx5aWVsZHt0eXBlOiJ0YXNrQ3JlYXRlZCIsdGFzazppLnRhc2t9O2Vsc2UgdGhyb3cgbmV3IFIoTS5JbnRlcm5hbEVycm9yLCJUYXNrIGNyZWF0aW9uIGRpZCBub3QgcmV0dXJuIGEgdGFzayIpO2Zvcig7Oyl7Y29uc3QgYT1hd2FpdCB0aGlzLmdldFRhc2soe3Rhc2tJZDpzfSxvKTtpZih5aWVsZHt0eXBlOiJ0YXNrU3RhdHVzIix0YXNrOmF9LE1lKGEuc3RhdHVzKSl7YS5zdGF0dXM9PT0iY29tcGxldGVkIj95aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLmdldFRhc2tSZXN1bHQoe3Rhc2tJZDpzfSxuLG8pfTphLnN0YXR1cz09PSJmYWlsZWQiP3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjpuZXcgUihNLkludGVybmFsRXJyb3IsYFRhc2sgJHtzfSBmYWlsZWRgKX06YS5zdGF0dXM9PT0iY2FuY2VsbGVkIiYmKHlpZWxke3R5cGU6ImVycm9yIixlcnJvcjpuZXcgUihNLkludGVybmFsRXJyb3IsYFRhc2sgJHtzfSB3YXMgY2FuY2VsbGVkYCl9KTtyZXR1cm59aWYoYS5zdGF0dXM9PT0iaW5wdXRfcmVxdWlyZWQiKXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLmdldFRhc2tSZXN1bHQoe3Rhc2tJZDpzfSxuLG8pfTtyZXR1cm59Y29uc3QgYz1hLnBvbGxJbnRlcnZhbD8/dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzthd2FpdCBuZXcgUHJvbWlzZSh1PT5zZXRUaW1lb3V0KHUsYykpLG8/LnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKX19Y2F0Y2goaSl7eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOmkgaW5zdGFuY2VvZiBSP2k6bmV3IFIoTS5JbnRlcm5hbEVycm9yLFN0cmluZyhpKSl9fX1yZXF1ZXN0KHQsbixvKXtjb25zdHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aSx0YXNrOmEscmVsYXRlZFRhc2s6Y309bz8/e307cmV0dXJuIG5ldyBQcm9taXNlKCh1LGwpPT57Y29uc3QgbT1FPT57bChFKX07aWYoIXRoaXMuX3RyYW5zcG9ydCl7bShuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKSk7cmV0dXJufWlmKHRoaXMuX29wdGlvbnM/LmVuZm9yY2VTdHJpY3RDYXBhYmlsaXRpZXM9PT0hMCl0cnl7dGhpcy5hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHQubWV0aG9kKSxhJiZ0aGlzLmFzc2VydFRhc2tDYXBhYmlsaXR5KHQubWV0aG9kKX1jYXRjaChFKXttKEUpO3JldHVybn1vPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCk7Y29uc3QgYj10aGlzLl9yZXF1ZXN0TWVzc2FnZUlkKyssZz17Li4udCxqc29ucnBjOiIyLjAiLGlkOmJ9O28/Lm9ucHJvZ3Jlc3MmJih0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLnNldChiLG8ub25wcm9ncmVzcyksZy5wYXJhbXM9ey4uLnQucGFyYW1zLF9tZXRhOnsuLi50LnBhcmFtcz8uX21ldGF8fHt9LHByb2dyZXNzVG9rZW46Yn19KSxhJiYoZy5wYXJhbXM9ey4uLmcucGFyYW1zLHRhc2s6YX0pLGMmJihnLnBhcmFtcz17Li4uZy5wYXJhbXMsX21ldGE6ey4uLmcucGFyYW1zPy5fbWV0YXx8e30sW3FlXTpjfX0pO2NvbnN0IF89RT0+e3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKGIpLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKGIpLHRoaXMuX2NsZWFudXBUaW1lb3V0KGIpLHRoaXMuX3RyYW5zcG9ydD8uc2VuZCh7anNvbnJwYzoiMi4wIixtZXRob2Q6Im5vdGlmaWNhdGlvbnMvY2FuY2VsbGVkIixwYXJhbXM6e3JlcXVlc3RJZDpiLHJlYXNvbjpTdHJpbmcoRSl9fSx7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOml9KS5jYXRjaChyZT0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGNhbmNlbGxhdGlvbjogJHtyZX1gKSkpO2NvbnN0IEY9RSBpbnN0YW5jZW9mIFI/RTpuZXcgUihNLlJlcXVlc3RUaW1lb3V0LFN0cmluZyhFKSk7bChGKX07dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5zZXQoYixFPT57aWYoIW8/LnNpZ25hbD8uYWJvcnRlZCl7aWYoRSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBsKEUpO3RyeXtjb25zdCBGPWZmKG4sRS5yZXN1bHQpO0Yuc3VjY2Vzcz91KEYuZGF0YSk6bChGLmVycm9yKX1jYXRjaChGKXtsKEYpfX19KSxvPy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e18obz8uc2lnbmFsPy5yZWFzb24pfSk7Y29uc3Qgdz1vPy50aW1lb3V0Pz9pXyxTPSgpPT5fKFIuZnJvbUVycm9yKE0uUmVxdWVzdFRpbWVvdXQsIlJlcXVlc3QgdGltZWQgb3V0Iix7dGltZW91dDp3fSkpO3RoaXMuX3NldHVwVGltZW91dChiLHcsbz8ubWF4VG90YWxUaW1lb3V0LFMsbz8ucmVzZXRUaW1lb3V0T25Qcm9ncmVzcz8/ITEpO2NvbnN0IE89Yz8udGFza0lkO2lmKE8pe2NvbnN0IEU9Rj0+e2NvbnN0IHJlPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KGIpO3JlP3JlKEYpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNwb25zZSBoYW5kbGVyIG1pc3NpbmcgZm9yIHNpZGUtY2hhbm5lbGVkIHJlcXVlc3QgJHtifWApKX07dGhpcy5fcmVxdWVzdFJlc29sdmVycy5zZXQoYixFKSx0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2UoTyx7dHlwZToicmVxdWVzdCIsbWVzc2FnZTpnLHRpbWVzdGFtcDpEYXRlLm5vdygpfSkuY2F0Y2goRj0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KGIpLGwoRil9KX1lbHNlIHRoaXMuX3RyYW5zcG9ydC5zZW5kKGcse3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2goRT0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KGIpLGwoRSl9KX0pfWFzeW5jIGdldFRhc2sodCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2dldCIscGFyYW1zOnR9LGljLG4pfWFzeW5jIGdldFRhc2tSZXN1bHQodCxuLG8pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvcmVzdWx0IixwYXJhbXM6dH0sbixvKX1hc3luYyBsaXN0VGFza3ModCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2xpc3QiLHBhcmFtczp0fSx1YyxuKX1hc3luYyBjYW5jZWxUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9jYW5jZWwiLHBhcmFtczp0fSxGdixuKX1hc3luYyBub3RpZmljYXRpb24odCxuKXtpZighdGhpcy5fdHJhbnNwb3J0KXRocm93IG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpO3RoaXMuYXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0Lm1ldGhvZCk7Y29uc3Qgbz1uPy5yZWxhdGVkVGFzaz8udGFza0lkO2lmKG8pe2NvbnN0IGE9ey4uLnQsanNvbnJwYzoiMi4wIixwYXJhbXM6ey4uLnQucGFyYW1zLF9tZXRhOnsuLi50LnBhcmFtcz8uX21ldGF8fHt9LFtxZV06bi5yZWxhdGVkVGFza319fTthd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uobyx7dHlwZToibm90aWZpY2F0aW9uIixtZXNzYWdlOmEsdGltZXN0YW1wOkRhdGUubm93KCl9KTtyZXR1cm59aWYoKHRoaXMuX29wdGlvbnM/LmRlYm91bmNlZE5vdGlmaWNhdGlvbk1ldGhvZHM/P1tdKS5pbmNsdWRlcyh0Lm1ldGhvZCkmJiF0LnBhcmFtcyYmIW4/LnJlbGF0ZWRSZXF1ZXN0SWQmJiFuPy5yZWxhdGVkVGFzayl7aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuaGFzKHQubWV0aG9kKSlyZXR1cm47dGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuYWRkKHQubWV0aG9kKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuZGVsZXRlKHQubWV0aG9kKSwhdGhpcy5fdHJhbnNwb3J0KXJldHVybjtsZXQgYT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGE9ey4uLmEscGFyYW1zOnsuLi5hLnBhcmFtcyxfbWV0YTp7Li4uYS5wYXJhbXM/Ll9tZXRhfHx7fSxbcWVdOm4ucmVsYXRlZFRhc2t9fX0pLHRoaXMuX3RyYW5zcG9ydD8uc2VuZChhLG4pLmNhdGNoKGM9PnRoaXMuX29uZXJyb3IoYykpfSk7cmV0dXJufWxldCBpPXsuLi50LGpzb25ycGM6IjIuMCJ9O24/LnJlbGF0ZWRUYXNrJiYoaT17Li4uaSxwYXJhbXM6ey4uLmkucGFyYW1zLF9tZXRhOnsuLi5pLnBhcmFtcz8uX21ldGF8fHt9LFtxZV06bi5yZWxhdGVkVGFza319fSksYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnNlbmQoaSxuKX1zZXRSZXF1ZXN0SGFuZGxlcih0LG4pe2NvbnN0IG89b3UodCk7dGhpcy5hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkobyksdGhpcy5fcmVxdWVzdEhhbmRsZXJzLnNldChvLChyLHMpPT57Y29uc3QgaT1ydSh0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobihpLHMpKX0pfXJlbW92ZVJlcXVlc3RIYW5kbGVyKHQpe3RoaXMuX3JlcXVlc3RIYW5kbGVycy5kZWxldGUodCl9YXNzZXJ0Q2FuU2V0UmVxdWVzdEhhbmRsZXIodCl7aWYodGhpcy5fcmVxdWVzdEhhbmRsZXJzLmhhcyh0KSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWVzdCBoYW5kbGVyIGZvciAke3R9IGFscmVhZHkgZXhpc3RzLCB3aGljaCB3b3VsZCBiZSBvdmVycmlkZGVuYCl9c2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pe2NvbnN0IG89b3UodCk7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuc2V0KG8scj0+e2NvbnN0IHM9cnUodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4ocykpfSl9cmVtb3ZlTm90aWZpY2F0aW9uSGFuZGxlcih0KXt0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5kZWxldGUodCl9X2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHQpe2NvbnN0IG49dGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmdldCh0KTtuIT09dm9pZCAwJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmRlbGV0ZSh0KSl9YXN5bmMgX2VucXVldWVUYXNrTWVzc2FnZSh0LG4sbyl7aWYoIXRoaXMuX3Rhc2tTdG9yZXx8IXRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5xdWV1ZSB0YXNrIG1lc3NhZ2U6IHRhc2tTdG9yZSBhbmQgdGFza01lc3NhZ2VRdWV1ZSBhcmUgbm90IGNvbmZpZ3VyZWQiKTtjb25zdCByPXRoaXMuX29wdGlvbnM/Lm1heFRhc2tRdWV1ZVNpemU7YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5lbnF1ZXVlKHQsbixvLHIpfWFzeW5jIF9jbGVhclRhc2tRdWV1ZSh0LG4pe2lmKHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpe2NvbnN0IG89YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlQWxsKHQsbik7Zm9yKGNvbnN0IHIgb2YgbylpZihyLnR5cGU9PT0icmVxdWVzdCImJm51KHIubWVzc2FnZSkpe2NvbnN0IHM9ci5tZXNzYWdlLmlkLGk9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQocyk7aT8oaShuZXcgUihNLkludGVybmFsRXJyb3IsIlRhc2sgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZCIpKSx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShzKSk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlc29sdmVyIG1pc3NpbmcgZm9yIHJlcXVlc3QgJHtzfSBkdXJpbmcgdGFzayAke3R9IGNsZWFudXBgKSl9fX1hc3luYyBfd2FpdEZvclRhc2tVcGRhdGUodCxuKXtsZXQgbz10aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO3RyeXtjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZT8uZ2V0VGFzayh0KTtyPy5wb2xsSW50ZXJ2YWwmJihvPXIucG9sbEludGVydmFsKX1jYXRjaHt9cmV0dXJuIG5ldyBQcm9taXNlKChyLHMpPT57aWYobi5hYm9ydGVkKXtzKG5ldyBSKE0uSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpO3JldHVybn1jb25zdCBpPXNldFRpbWVvdXQocixvKTtuLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e2NsZWFyVGltZW91dChpKSxzKG5ldyBSKE0uSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpfSx7b25jZTohMH0pfSl9cmVxdWVzdFRhc2tTdG9yZSh0LG4pe2NvbnN0IG89dGhpcy5fdGFza1N0b3JlO2lmKCFvKXRocm93IG5ldyBFcnJvcigiTm8gdGFzayBzdG9yZSBjb25maWd1cmVkIik7cmV0dXJue2NyZWF0ZVRhc2s6YXN5bmMgcj0+e2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm8gcmVxdWVzdCBwcm92aWRlZCIpO3JldHVybiBhd2FpdCBvLmNyZWF0ZVRhc2socix0LmlkLHttZXRob2Q6dC5tZXRob2QscGFyYW1zOnQucGFyYW1zfSxuKX0sZ2V0VGFzazphc3luYyByPT57Y29uc3Qgcz1hd2FpdCBvLmdldFRhc2socixuKTtpZighcyl0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsIkZhaWxlZCB0byByZXRyaWV2ZSB0YXNrOiBUYXNrIG5vdCBmb3VuZCIpO3JldHVybiBzfSxzdG9yZVRhc2tSZXN1bHQ6YXN5bmMocixzLGkpPT57YXdhaXQgby5zdG9yZVRhc2tSZXN1bHQocixzLGksbik7Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZihhKXtjb25zdCBjPXBvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6YX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGMpLE1lKGEuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxnZXRUYXNrUmVzdWx0OnI9Pm8uZ2V0VGFza1Jlc3VsdChyLG4pLHVwZGF0ZVRhc2tTdGF0dXM6YXN5bmMocixzLGkpPT57Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZighYSl0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsYFRhc2sgIiR7cn0iIG5vdCBmb3VuZCAtIGl0IG1heSBoYXZlIGJlZW4gY2xlYW5lZCB1cGApO2lmKE1lKGEuc3RhdHVzKSl0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsYENhbm5vdCB1cGRhdGUgdGFzayAiJHtyfSIgZnJvbSB0ZXJtaW5hbCBzdGF0dXMgIiR7YS5zdGF0dXN9IiB0byAiJHtzfSIuIFRlcm1pbmFsIHN0YXRlcyAoY29tcGxldGVkLCBmYWlsZWQsIGNhbmNlbGxlZCkgY2Fubm90IHRyYW5zaXRpb24gdG8gb3RoZXIgc3RhdGVzLmApO2F3YWl0IG8udXBkYXRlVGFza1N0YXR1cyhyLHMsaSxuKTtjb25zdCBjPWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKGMpe2NvbnN0IHU9cG8ucGFyc2Uoe21ldGhvZDoibm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMiLHBhcmFtczpjfSk7YXdhaXQgdGhpcy5ub3RpZmljYXRpb24odSksTWUoYy5zdGF0dXMpJiZ0aGlzLl9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcihyKX19LGxpc3RUYXNrczpyPT5vLmxpc3RUYXNrcyhyLG4pfX19ZnVuY3Rpb24gc3UoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIGNfKGUsdCl7Y29uc3Qgbj17Li4uZX07Zm9yKGNvbnN0IG8gaW4gdCl7Y29uc3Qgcj1vLHM9dFtyXTtpZihzPT09dm9pZCAwKWNvbnRpbnVlO2NvbnN0IGk9bltyXTtzdShpKSYmc3Uocyk/bltyXT17Li4uaSwuLi5zfTpuW3JdPXN9cmV0dXJuIG59KGU9PnR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnR5cGVvZiBQcm94eTwidSI/bmV3IFByb3h5KGUse2dldDoodCxuKT0+KHR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnQpW25dfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIHJlcXVpcmU8InUiKXJldHVybiByZXF1aXJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aHJvdyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInK2UrJyIgaXMgbm90IHN1cHBvcnRlZCcpfSk7Y2xhc3MgdV8gZXh0ZW5kcyBhX3tfcmVnaXN0ZXJlZE1ldGhvZHM9bmV3IFNldDtfZXZlbnRTbG90cz1uZXcgTWFwO29uRXZlbnREaXNwYXRjaCh0LG4pe31fZW5zdXJlRXZlbnRTbG90KHQpe2xldCBuPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFuKXtsZXQgbz10aGlzLmV2ZW50U2NoZW1hc1t0XTtpZighbyl0aHJvdyBFcnJvcihgVW5rbm93biBldmVudDogJHtTdHJpbmcodCl9YCk7bj17bGlzdGVuZXJzOltdfSx0aGlzLl9ldmVudFNsb3RzLnNldCh0LG4pO2xldCByPW8uc2hhcGUubWV0aG9kLnZhbHVlO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChyKTtsZXQgcz1uO3N1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIobyxpPT57bGV0IGE9aS5wYXJhbXM7dGhpcy5vbkV2ZW50RGlzcGF0Y2godCxhKSxzLm9uSGFuZGxlcj8uKGEpO2ZvcihsZXQgYyBvZlsuLi5zLmxpc3RlbmVyc10pYyhhKX0pfXJldHVybiBufXNldEV2ZW50SGFuZGxlcih0LG4pe2xldCBvPXRoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KTtvLm9uSGFuZGxlciYmbiYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdIG9uJHtTdHJpbmcodCl9IGhhbmRsZXIgcmVwbGFjZWQuIFVzZSBhZGRFdmVudExpc3RlbmVyKCIke1N0cmluZyh0KX0iLCDigKYpIHRvIGFkZCBtdWx0aXBsZSBsaXN0ZW5lcnMgd2l0aG91dCByZXBsYWNpbmcuYCksby5vbkhhbmRsZXI9bn1nZXRFdmVudEhhbmRsZXIodCl7cmV0dXJuIHRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpPy5vbkhhbmRsZXJ9YWRkRXZlbnRMaXN0ZW5lcih0LG4pe3RoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KS5saXN0ZW5lcnMucHVzaChuKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsbil7bGV0IG89dGhpcy5fZXZlbnRTbG90cy5nZXQodCk7aWYoIW8pcmV0dXJuO2xldCByPW8ubGlzdGVuZXJzLmluZGV4T2Yobik7ciE9PS0xJiZvLmxpc3RlbmVycy5zcGxpY2UociwxKX1zZXRSZXF1ZXN0SGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0UmVxdWVzdEhhbmRsZXIiKSxzdXBlci5zZXRSZXF1ZXN0SGFuZGxlcih0LG4pfTtzZXROb3RpZmljYXRpb25IYW5kbGVyPSh0LG4pPT57dGhpcy5fYXNzZXJ0TWV0aG9kTm90UmVnaXN0ZXJlZCh0LCJzZXROb3RpZmljYXRpb25IYW5kbGVyIiksc3VwZXIuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pfTt3YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKHQsbixvKXtuJiZvJiZjb25zb2xlLndhcm4oYFtNQ1AgQXBwc10gJHt0fSBoYW5kbGVyIHJlcGxhY2VkLiBQcmV2aW91cyBoYW5kbGVyIHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZC5gKX1yZXBsYWNlUmVxdWVzdEhhbmRsZXI9KHQsbik9PntsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQobyksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07X2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCxuKXtsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTtpZih0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5oYXMobykpdGhyb3cgRXJyb3IoYEhhbmRsZXIgZm9yICIke299IiBhbHJlYWR5IHJlZ2lzdGVyZWQgKHZpYSAke259KS4gVXNlIGFkZEV2ZW50TGlzdGVuZXIoKSB0byBhdHRhY2ggbXVsdGlwbGUgbGlzdGVuZXJzLCBvciB0aGUgb24qIHNldHRlciBmb3IgcmVwbGFjZSBzZW1hbnRpY3MuYCk7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pfX12YXIgbF89IjIwMjYtMDEtMjYiLGRfPSJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQtcGFydGlhbCI7Y2xhc3MgcF97ZXZlbnRUYXJnZXQ7ZXZlbnRTb3VyY2U7bWVzc2FnZUxpc3RlbmVyO2NvbnN0cnVjdG9yKHQ9d2luZG93LnBhcmVudCxuKXt0aGlzLmV2ZW50VGFyZ2V0PXQsdGhpcy5ldmVudFNvdXJjZT1uLHRoaXMubWVzc2FnZUxpc3RlbmVyPW89PntpZihuJiZvLnNvdXJjZSE9PXRoaXMuZXZlbnRTb3VyY2Upe2NvbnNvbGUuZGVidWcoIklnbm9yaW5nIG1lc3NhZ2UgZnJvbSB1bmtub3duIHNvdXJjZSIsbyk7cmV0dXJufWxldCByPVR2LnNhZmVQYXJzZShvLmRhdGEpO3Iuc3VjY2Vzcz8oY29uc29sZS5kZWJ1ZygiUGFyc2VkIG1lc3NhZ2UiLHIuZGF0YSksdGhpcy5vbm1lc3NhZ2U/LihyLmRhdGEpKTpvLmRhdGE/Lmpzb25ycGMhPT0iMi4wIj9jb25zb2xlLmRlYnVnKCJJZ25vcmluZyBub24tSlNPTi1SUEMgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pOihjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcGFyc2UgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pLHRoaXMub25lcnJvcj8uKEVycm9yKCJJbnZhbGlkIEpTT04tUlBDIG1lc3NhZ2UgcmVjZWl2ZWQ6ICIrci5lcnJvci5tZXNzYWdlKSkpfX1hc3luYyBzdGFydCgpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLm1lc3NhZ2VMaXN0ZW5lcil9YXN5bmMgc2VuZCh0LG4pe3QubWV0aG9kIT09ZF8mJmNvbnNvbGUuZGVidWcoIlNlbmRpbmcgbWVzc2FnZSIsdCksdGhpcy5ldmVudFRhcmdldC5wb3N0TWVzc2FnZSh0LCIqIil9YXN5bmMgY2xvc2UoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpLHRoaXMub25jbG9zZT8uKCl9b25jbG9zZTtvbmVycm9yO29ubWVzc2FnZTtzZXNzaW9uSWQ7c2V0UHJvdG9jb2xWZXJzaW9ufXZhciBmXz1QKFtoKCJsaWdodCIpLGgoImRhcmsiKV0pLmRlc2NyaWJlKCJDb2xvciB0aGVtZSBwcmVmZXJlbmNlIGZvciB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKSxNdD1QKFtoKCJpbmxpbmUiKSxoKCJmdWxsc2NyZWVuIiksaCgicGlwIildKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlIGZvciBVSSBwcmVzZW50YXRpb24uIiksaF89UChbaCgiLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnkiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5IiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLXRlcnRpYXJ5IiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtZ2hvc3QiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtaW5mbyIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcyIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nIiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLWRpc2FibGVkIiksaCgiLS1jb2xvci10ZXh0LXByaW1hcnkiKSxoKCItLWNvbG9yLXRleHQtc2Vjb25kYXJ5IiksaCgiLS1jb2xvci10ZXh0LXRlcnRpYXJ5IiksaCgiLS1jb2xvci10ZXh0LWludmVyc2UiKSxoKCItLWNvbG9yLXRleHQtZ2hvc3QiKSxoKCItLWNvbG9yLXRleHQtaW5mbyIpLGgoIi0tY29sb3ItdGV4dC1kYW5nZXIiKSxoKCItLWNvbG9yLXRleHQtc3VjY2VzcyIpLGgoIi0tY29sb3ItdGV4dC13YXJuaW5nIiksaCgiLS1jb2xvci10ZXh0LWRpc2FibGVkIiksaCgiLS1jb2xvci1ib3JkZXItcHJpbWFyeSIpLGgoIi0tY29sb3ItYm9yZGVyLXNlY29uZGFyeSIpLGgoIi0tY29sb3ItYm9yZGVyLXRlcnRpYXJ5IiksaCgiLS1jb2xvci1ib3JkZXItaW52ZXJzZSIpLGgoIi0tY29sb3ItYm9yZGVyLWdob3N0IiksaCgiLS1jb2xvci1ib3JkZXItaW5mbyIpLGgoIi0tY29sb3ItYm9yZGVyLWRhbmdlciIpLGgoIi0tY29sb3ItYm9yZGVyLXN1Y2Nlc3MiKSxoKCItLWNvbG9yLWJvcmRlci13YXJuaW5nIiksaCgiLS1jb2xvci1ib3JkZXItZGlzYWJsZWQiKSxoKCItLWNvbG9yLXJpbmctcHJpbWFyeSIpLGgoIi0tY29sb3ItcmluZy1zZWNvbmRhcnkiKSxoKCItLWNvbG9yLXJpbmctaW52ZXJzZSIpLGgoIi0tY29sb3ItcmluZy1pbmZvIiksaCgiLS1jb2xvci1yaW5nLWRhbmdlciIpLGgoIi0tY29sb3ItcmluZy1zdWNjZXNzIiksaCgiLS1jb2xvci1yaW5nLXdhcm5pbmciKSxoKCItLWZvbnQtc2FucyIpLGgoIi0tZm9udC1tb25vIiksaCgiLS1mb250LXdlaWdodC1ub3JtYWwiKSxoKCItLWZvbnQtd2VpZ2h0LW1lZGl1bSIpLGgoIi0tZm9udC13ZWlnaHQtc2VtaWJvbGQiKSxoKCItLWZvbnQtd2VpZ2h0LWJvbGQiKSxoKCItLWZvbnQtdGV4dC14cy1zaXplIiksaCgiLS1mb250LXRleHQtc20tc2l6ZSIpLGgoIi0tZm9udC10ZXh0LW1kLXNpemUiKSxoKCItLWZvbnQtdGV4dC1sZy1zaXplIiksaCgiLS1mb250LWhlYWRpbmcteHMtc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLXNtLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy1tZC1zaXplIiksaCgiLS1mb250LWhlYWRpbmctbGctc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLXhsLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy0yeGwtc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLTN4bC1zaXplIiksaCgiLS1mb250LXRleHQteHMtbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtdGV4dC1zbS1saW5lLWhlaWdodCIpLGgoIi0tZm9udC10ZXh0LW1kLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LXRleHQtbGctbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtaGVhZGluZy14cy1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLXNtLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmctbWQtbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtaGVhZGluZy1sZy1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLXhsLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmctMnhsLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmctM3hsLWxpbmUtaGVpZ2h0IiksaCgiLS1ib3JkZXItcmFkaXVzLXhzIiksaCgiLS1ib3JkZXItcmFkaXVzLXNtIiksaCgiLS1ib3JkZXItcmFkaXVzLW1kIiksaCgiLS1ib3JkZXItcmFkaXVzLWxnIiksaCgiLS1ib3JkZXItcmFkaXVzLXhsIiksaCgiLS1ib3JkZXItcmFkaXVzLWZ1bGwiKSxoKCItLWJvcmRlci13aWR0aC1yZWd1bGFyIiksaCgiLS1zaGFkb3ctaGFpcmxpbmUiKSxoKCItLXNoYWRvdy1zbSIpLGgoIi0tc2hhZG93LW1kIiksaCgiLS1zaGFkb3ctbGciKV0pLmRlc2NyaWJlKCJDU1MgdmFyaWFibGUga2V5cyBhdmFpbGFibGUgdG8gTUNQIGFwcHMgZm9yIHRoZW1pbmcuIiksbV89QyhoXy5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSxQKFtmKCksc3QoKV0pLmRlc2NyaWJlKGBTdHlsZSB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgTUNQIGFwcHMuCgpJbmRpdmlkdWFsIHN0eWxlIGtleXMgYXJlIG9wdGlvbmFsIC0gaG9zdHMgbWF5IHByb3ZpZGUgYW55IHN1YnNldCBvZiB0aGVzZSB2YWx1ZXMuClZhbHVlcyBhcmUgc3RyaW5ncyBjb250YWluaW5nIENTUyB2YWx1ZXMgKGNvbG9ycywgc2l6ZXMsIGZvbnQgc3RhY2tzLCBldGMuKS4KCk5vdGU6IFRoaXMgdHlwZSB1c2VzIFxgUmVjb3JkPEssIHN0cmluZyB8IHVuZGVmaW5lZD5cYCByYXRoZXIgdGhhbiBcYFBhcnRpYWw8UmVjb3JkPEssIHN0cmluZz4+XGAKZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBab2Qgc2NoZW1hIGdlbmVyYXRpb24uIEJvdGggYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciB2YWxpZGF0aW9uLmApKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKTt2KHttZXRob2Q6aCgidWkvb3Blbi1saW5rIikscGFyYW1zOnYoe3VybDpmKCkuZGVzY3JpYmUoIlVSTCB0byBvcGVuIGluIHRoZSBob3N0J3MgYnJvd3NlciIpfSl9KTt2YXIgZ189dih7aXNFcnJvcjpOKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgaG9zdCBmYWlsZWQgdG8gb3BlbiB0aGUgVVJMIChlLmcuLCBkdWUgdG8gc2VjdXJpdHkgcG9saWN5KS4iKX0pLnBhc3N0aHJvdWdoKCksdl89dih7aXNFcnJvcjpOKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgZG93bmxvYWQgZmFpbGVkIChlLmcuLCB1c2VyIGNhbmNlbGxlZCBvciBob3N0IGRlbmllZCkuIil9KS5wYXNzdGhyb3VnaCgpLGJfPXYoe2lzRXJyb3I6TigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgcmVqZWN0ZWQgb3IgZmFpbGVkIHRvIGRlbGl2ZXIgdGhlIG1lc3NhZ2UuIil9KS5wYXNzdGhyb3VnaCgpO3Yoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcHJveHktcmVhZHkiKSxwYXJhbXM6dih7fSl9KTt2YXIgdmM9dih7Y29ubmVjdERvbWFpbnM6JChmKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYE9yaWdpbnMgZm9yIG5ldHdvcmsgcmVxdWVzdHMgKGZldGNoL1hIUi9XZWJTb2NrZXQpLgoKLSBNYXBzIHRvIENTUCBcYGNvbm5lY3Qtc3JjXGAgZGlyZWN0aXZlCi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayBjb25uZWN0aW9ucyAoc2VjdXJlIGRlZmF1bHQpYCkscmVzb3VyY2VEb21haW5zOiQoZigpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcmlnaW5zIGZvciBzdGF0aWMgcmVzb3VyY2VzIChpbWFnZXMsIHNjcmlwdHMsIHN0eWxlc2hlZXRzLCBmb250cywgbWVkaWEpLlxuXG4tIE1hcHMgdG8gQ1NQIGBpbWctc3JjYCwgYHNjcmlwdC1zcmNgLCBgc3R5bGUtc3JjYCwgYGZvbnQtc3JjYCwgYG1lZGlhLXNyY2AgZGlyZWN0aXZlc1xuLSBXaWxkY2FyZCBzdWJkb21haW5zIHN1cHBvcnRlZDogYGh0dHBzOi8vKi5leGFtcGxlLmNvbWBcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayByZXNvdXJjZXMgKHNlY3VyZSBkZWZhdWx0KSIpLGZyYW1lRG9tYWluczokKGYoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3IgbmVzdGVkIGlmcmFtZXMuXG5cbi0gTWFwcyB0byBDU1AgYGZyYW1lLXNyY2AgZGlyZWN0aXZlXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5lc3RlZCBpZnJhbWVzIGFsbG93ZWQgKGBmcmFtZS1zcmMgJ25vbmUnYCkiKSxiYXNlVXJpRG9tYWluczokKGYoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQWxsb3dlZCBiYXNlIFVSSXMgZm9yIHRoZSBkb2N1bWVudC5cblxuLSBNYXBzIHRvIENTUCBgYmFzZS11cmlgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBvbmx5IHNhbWUgb3JpZ2luIGFsbG93ZWQgKGBiYXNlLXVyaSAnc2VsZidgKSIpfSksYmM9dih7Y2FtZXJhOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2FtZXJhIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2FtZXJhYCBmZWF0dXJlLiIpLG1pY3JvcGhvbmU6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBtaWNyb3Bob25lIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgbWljcm9waG9uZWAgZmVhdHVyZS4iKSxnZW9sb2NhdGlvbjp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGdlb2xvY2F0aW9uIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgZ2VvbG9jYXRpb25gIGZlYXR1cmUuIiksY2xpcGJvYXJkV3JpdGU6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBjbGlwYm9hcmQgd3JpdGUgYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBjbGlwYm9hcmQtd3JpdGVgIGZlYXR1cmUuIil9KTt2KHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiKSxwYXJhbXM6dih7d2lkdGg6VCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk5ldyB3aWR0aCBpbiBwaXhlbHMuIiksaGVpZ2h0OlQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgaGVpZ2h0IGluIHBpeGVscy4iKX0pfSk7dmFyIF9fPXYoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQiKSxwYXJhbXM6dih7YXJndW1lbnRzOkMoZigpLFooKS5kZXNjcmliZSgiQ29tcGxldGUgdG9vbCBjYWxsIGFyZ3VtZW50cyBhcyBrZXktdmFsdWUgcGFpcnMuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpfSl9KSx5Xz12KHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiKSxwYXJhbXM6dih7YXJndW1lbnRzOkMoZigpLFooKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKX0pfSksd189dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1jYW5jZWxsZWQiKSxwYXJhbXM6dih7cmVhc29uOmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdPcHRpb25hbCByZWFzb24gZm9yIHRoZSBjYW5jZWxsYXRpb24gKGUuZy4sICJ1c2VyIGFjdGlvbiIsICJ0aW1lb3V0IikuJyl9KX0pLGtfPXYoe2ZvbnRzOmYoKS5vcHRpb25hbCgpfSksJF89dih7dmFyaWFibGVzOm1fLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgdGhlIGFwcC4iKSxjc3M6a18ub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NTIGJsb2NrcyB0aGF0IGFwcHMgY2FuIGluamVjdC4iKX0pLFNfPXYoe21ldGhvZDpoKCJ1aS9yZXNvdXJjZS10ZWFyZG93biIpLHBhcmFtczp2KHt9KX0pO0MoZigpLFooKSk7dmFyIGl1PXYoe3RleHQ6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0ZXh0IGNvbnRlbnQgYmxvY2tzLiIpLGltYWdlOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgaW1hZ2UgY29udGVudCBibG9ja3MuIiksYXVkaW86dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBhdWRpbyBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZTp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGNvbnRlbnQgYmxvY2tzLiIpLHJlc291cmNlTGluazp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGxpbmsgY29udGVudCBibG9ja3MuIiksc3RydWN0dXJlZENvbnRlbnQ6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGNvbnRlbnQuIil9KTt2KHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIikscGFyYW1zOnYoe30pLm9wdGlvbmFsKCl9KTt2YXIgel89dih7ZXhwZXJpbWVudGFsOkMoZigpLEMoZigpLE9uKCkpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIiksb3BlbkxpbmtzOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgb3BlbmluZyBleHRlcm5hbCBVUkxzLiIpLGRvd25sb2FkRmlsZTp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGZpbGUgZG93bmxvYWRzIHZpYSB1aS9kb3dubG9hZC1maWxlLiIpLHNlcnZlclRvb2xzOnYoe2xpc3RDaGFuZ2VkOk4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgdG9vbCBjYWxscyB0byB0aGUgTUNQIHNlcnZlci4iKSxzZXJ2ZXJSZXNvdXJjZXM6dih7bGlzdENoYW5nZWQ6TigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgcmVzb3VyY2UgcmVhZHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksbG9nZ2luZzp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgbG9nIG1lc3NhZ2VzLiIpLHNhbmRib3g6dih7cGVybWlzc2lvbnM6YmMub3B0aW9uYWwoKS5kZXNjcmliZSgiUGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGUgaG9zdCAoY2FtZXJhLCBtaWNyb3Bob25lLCBnZW9sb2NhdGlvbikuIiksY3NwOnZjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBkb21haW5zIGFwcHJvdmVkIGJ5IHRoZSBob3N0LiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBjb25maWd1cmF0aW9uIGFwcGxpZWQgYnkgdGhlIGhvc3QuIiksdXBkYXRlTW9kZWxDb250ZXh0Oml1Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYWNjZXB0cyBjb250ZXh0IHVwZGF0ZXMgKHVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0KSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbW9kZWwncyBjb250ZXh0IGZvciBmdXR1cmUgdHVybnMuIiksbWVzc2FnZTppdS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlY2VpdmluZyBjb250ZW50IG1lc3NhZ2VzICh1aS9tZXNzYWdlKSBmcm9tIHRoZSB2aWV3LiIpLHNhbXBsaW5nOnYoe3Rvb2xzOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdG9vbCB1c2UgdmlhIGB0b29sc2AgYW5kIGB0b29sQ2hvaWNlYCBwYXJhbWV0ZXJzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBMTE0gc2FtcGxpbmcgKHNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UpIGZyb20gdGhlIHZpZXcuXG5NaXJyb3JzIHRoZSBNQ1AgYENsaWVudENhcGFiaWxpdGllcy5zYW1wbGluZ2Agc2hhcGUgc28gaG9zdHMgY2FuIHBhc3MgaXQgdGhyb3VnaC4iKX0pLFRfPXYoe2V4cGVyaW1lbnRhbDpDKGYoKSxDKGYoKSxPbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLHRvb2xzOnYoe2xpc3RDaGFuZ2VkOk4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgc3VwcG9ydHMgdG9vbHMvbGlzdF9jaGFuZ2VkIG5vdGlmaWNhdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgZXhwb3NlcyBNQ1Atc3R5bGUgdG9vbHMgdGhhdCB0aGUgaG9zdCBjYW4gY2FsbC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6JChNdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgYXBwIHN1cHBvcnRzLiIpfSk7dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6dih7fSkub3B0aW9uYWwoKX0pO3Yoe2NzcDp2Yy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb250ZW50IFNlY3VyaXR5IFBvbGljeSBjb25maWd1cmF0aW9uIGZvciBVSSByZXNvdXJjZXMuIikscGVybWlzc2lvbnM6YmMub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgYnkgdGhlIFVJIHJlc291cmNlLiIpLGRvbWFpbjpmKCkub3B0aW9uYWwoKS5kZXNjcmliZShgRGVkaWNhdGVkIG9yaWdpbiBmb3IgdmlldyBzYW5kYm94LgoKVXNlZnVsIHdoZW4gdmlld3MgbmVlZCBzdGFibGUsIGRlZGljYXRlZCBvcmlnaW5zIGZvciBPQXV0aCBjYWxsYmFja3MsIENPUlMgcG9saWNpZXMsIG9yIEFQSSBrZXkgYWxsb3dsaXN0cy4KCioqSG9zdC1kZXBlbmRlbnQ6KiogVGhlIGZvcm1hdCBhbmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgdGhpcyBmaWVsZCBhcmUgZGV0ZXJtaW5lZCBieSBlYWNoIGhvc3QuIFNlcnZlcnMgTVVTVCBjb25zdWx0IGhvc3Qtc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGV4cGVjdGVkIGRvbWFpbiBmb3JtYXQuIENvbW1vbiBwYXR0ZXJucyBpbmNsdWRlOgotIEhhc2gtYmFzZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB7aGFzaH0uY2xhdWRlbWNwY29udGVudC5jb21cYCkKLSBVUkwtZGVyaXZlZCBzdWJkb21haW5zIChlLmcuLCBcYHd3dy1leGFtcGxlLWNvbS5vYWl1c2VyY29udGVudC5jb21cYCkKCklmIG9taXR0ZWQsIGhvc3QgdXNlcyBkZWZhdWx0IHNhbmRib3ggb3JpZ2luICh0eXBpY2FsbHkgcGVyLWNvbnZlcnNhdGlvbikuYCkscHJlZmVyc0JvcmRlcjpOKCkub3B0aW9uYWwoKS5kZXNjcmliZShgVmlzdWFsIGJvdW5kYXJ5IHByZWZlcmVuY2UgLSB0cnVlIGlmIHZpZXcgcHJlZmVycyBhIHZpc2libGUgYm9yZGVyLgoKQm9vbGVhbiByZXF1ZXN0aW5nIHdoZXRoZXIgYSB2aXNpYmxlIGJvcmRlciBhbmQgYmFja2dyb3VuZCBpcyBwcm92aWRlZCBieSB0aGUgaG9zdC4gU3BlY2lmeWluZyBhbiBleHBsaWNpdCB2YWx1ZSBmb3IgdGhpcyBpcyByZWNvbW1lbmRlZCBiZWNhdXNlIGhvc3RzJyBkZWZhdWx0cyBtYXkgdmFyeS4KCi0gXGB0cnVlXGA6IHJlcXVlc3QgdmlzaWJsZSBib3JkZXIgKyBiYWNrZ3JvdW5kCi0gXGBmYWxzZVxgOiByZXF1ZXN0IG5vIHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIG9taXR0ZWQ6IGhvc3QgZGVjaWRlcyBib3JkZXJgKX0pO3Yoe21ldGhvZDpoKCJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIpLHBhcmFtczp2KHttb2RlOk10LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIGJlaW5nIHJlcXVlc3RlZC4iKX0pfSk7dmFyIElfPXYoe21vZGU6TXQuZGVzY3JpYmUoIlRoZSBkaXNwbGF5IG1vZGUgdGhhdCB3YXMgYWN0dWFsbHkgc2V0LiBNYXkgZGlmZmVyIGZyb20gcmVxdWVzdGVkIGlmIG5vdCBzdXBwb3J0ZWQuIil9KS5wYXNzdGhyb3VnaCgpLFBfPVAoW2goIm1vZGVsIiksaCgiYXBwIildKS5kZXNjcmliZSgiVG9vbCB2aXNpYmlsaXR5IHNjb3BlIC0gd2hvIGNhbiBhY2Nlc3MgdGhlIHRvb2wuIik7dih7cmVzb3VyY2VVcmk6ZigpLm9wdGlvbmFsKCksdmlzaWJpbGl0eTokKFBfKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBXaG8gY2FuIGFjY2VzcyB0aGlzIHRvb2wuIERlZmF1bHQ6IFsibW9kZWwiLCAiYXBwIl0KLSAibW9kZWwiOiBUb29sIHZpc2libGUgdG8gYW5kIGNhbGxhYmxlIGJ5IHRoZSBhZ2VudAotICJhcHAiOiBUb29sIGNhbGxhYmxlIGJ5IHRoZSBhcHAgZnJvbSB0aGlzIHNlcnZlciBvbmx5YCksY3NwOkZlKCkub3B0aW9uYWwoKSxwZXJtaXNzaW9uczpGZSgpLm9wdGlvbmFsKCl9KTt2KHttaW1lVHlwZXM6JChmKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0FycmF5IG9mIHN1cHBvcnRlZCBNSU1FIHR5cGVzIGZvciBVSSByZXNvdXJjZXMuXG5NdXN0IGluY2x1ZGUgYCJ0ZXh0L2h0bWw7cHJvZmlsZT1tY3AtYXBwImAgZm9yIE1DUCBBcHBzIHN1cHBvcnQuJyl9KTt2KHttZXRob2Q6aCgidWkvZG93bmxvYWQtZmlsZSIpLHBhcmFtczp2KHtjb250ZW50czokKFAoW2pmLE1mXSkpLmRlc2NyaWJlKCJSZXNvdXJjZSBjb250ZW50cyB0byBkb3dubG9hZCDigJQgZW1iZWRkZWQgKGlubGluZSBkYXRhKSBvciBsaW5rZWQgKGhvc3QgZmV0Y2hlcykuIFVzZXMgc3RhbmRhcmQgTUNQIHJlc291cmNlIHR5cGVzLiIpfSl9KTt2KHttZXRob2Q6aCgidWkvbWVzc2FnZSIpLHBhcmFtczp2KHtyb2xlOmgoInVzZXIiKS5kZXNjcmliZSgnTWVzc2FnZSByb2xlLCBjdXJyZW50bHkgb25seSAidXNlciIgaXMgc3VwcG9ydGVkLicpLGNvbnRlbnQ6JChWbikuZGVzY3JpYmUoIk1lc3NhZ2UgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKX0pfSk7dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvc2FuZGJveC1yZXNvdXJjZS1yZWFkeSIpLHBhcmFtczp2KHtodG1sOmYoKS5kZXNjcmliZSgiSFRNTCBjb250ZW50IHRvIGxvYWQgaW50byB0aGUgaW5uZXIgaWZyYW1lLiIpLHNhbmRib3g6ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgaW5uZXIgaWZyYW1lJ3Mgc2FuZGJveCBhdHRyaWJ1dGUuIiksY3NwOnZjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBjb25maWd1cmF0aW9uIGZyb20gcmVzb3VyY2UgbWV0YWRhdGEuIikscGVybWlzc2lvbnM6YmMub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpfSl9KTt2YXIgeF89dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1yZXN1bHQiKSxwYXJhbXM6WnIuZGVzY3JpYmUoIlN0YW5kYXJkIE1DUCB0b29sIGV4ZWN1dGlvbiByZXN1bHQuIil9KSxGZj12KHt0b29sSW5mbzp2KHtpZDpEbi5vcHRpb25hbCgpLmRlc2NyaWJlKCJKU09OLVJQQyBpZCBvZiB0aGUgdG9vbHMvY2FsbCByZXF1ZXN0LiIpLHRvb2w6Z2MuZGVzY3JpYmUoIlRvb2wgZGVmaW5pdGlvbiBpbmNsdWRpbmcgbmFtZSwgaW5wdXRTY2hlbWEsIGV0Yy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1ldGFkYXRhIG9mIHRoZSB0b29sIGNhbGwgdGhhdCBpbnN0YW50aWF0ZWQgdGhpcyBBcHAuIiksdGhlbWU6Zl8ub3B0aW9uYWwoKS5kZXNjcmliZSgiQ3VycmVudCBjb2xvciB0aGVtZSBwcmVmZXJlbmNlLiIpLHN0eWxlczokXy5vcHRpb25hbCgpLmRlc2NyaWJlKCJTdHlsZSBjb25maWd1cmF0aW9uIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksZGlzcGxheU1vZGU6TXQub3B0aW9uYWwoKS5kZXNjcmliZSgiSG93IHRoZSBVSSBpcyBjdXJyZW50bHkgZGlzcGxheWVkLiIpLGF2YWlsYWJsZURpc3BsYXlNb2RlczokKE10KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEaXNwbGF5IG1vZGVzIHRoZSBob3N0IHN1cHBvcnRzLiIpLGNvbnRhaW5lckRpbWVuc2lvbnM6UChbdih7aGVpZ2h0OlQoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIGhlaWdodCBpbiBwaXhlbHMuIil9KSx2KHttYXhIZWlnaHQ6UChbVCgpLHN0KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSldKS5hbmQoUChbdih7d2lkdGg6VCgpLmRlc2NyaWJlKCJGaXhlZCBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSksdih7bWF4V2lkdGg6UChbVCgpLHN0KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciB3aWR0aCBpbiBwaXhlbHMuIil9KV0pKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBDb250YWluZXIgZGltZW5zaW9ucy4gUmVwcmVzZW50cyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgaWZyYW1lIG9yIG90aGVyCmNvbnRhaW5lciBob2xkaW5nIHRoZSBhcHAuIFNwZWNpZnkgZWl0aGVyIHdpZHRoIG9yIG1heFdpZHRoLCBhbmQgZWl0aGVyIGhlaWdodCBvciBtYXhIZWlnaHQuYCksbG9jYWxlOmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBwcmVmZXJlbmNlIGluIEJDUCA0NyBmb3JtYXQuIiksdGltZVpvbmU6ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlVzZXIncyB0aW1lem9uZSBpbiBJQU5BIGZvcm1hdC4iKSx1c2VyQWdlbnQ6ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmllci4iKSxwbGF0Zm9ybTpQKFtoKCJ3ZWIiKSxoKCJkZXNrdG9wIiksaCgibW9iaWxlIildKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJQbGF0Zm9ybSB0eXBlIGZvciByZXNwb25zaXZlIGRlc2lnbiBkZWNpc2lvbnMuIiksZGV2aWNlQ2FwYWJpbGl0aWVzOnYoe3RvdWNoOk4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdG91Y2ggaW5wdXQuIiksaG92ZXI6TigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIldoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyBob3ZlciBpbnRlcmFjdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEZXZpY2UgaW5wdXQgY2FwYWJpbGl0aWVzLiIpLHNhZmVBcmVhSW5zZXRzOnYoe3RvcDpUKCkuZGVzY3JpYmUoIlRvcCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpLHJpZ2h0OlQoKS5kZXNjcmliZSgiUmlnaHQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxib3R0b206VCgpLmRlc2NyaWJlKCJCb3R0b20gc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxsZWZ0OlQoKS5kZXNjcmliZSgiTGVmdCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTW9iaWxlIHNhZmUgYXJlYSBib3VuZGFyaWVzIGluIHBpeGVscy4iKX0pLnBhc3N0aHJvdWdoKCksRV89dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvaG9zdC1jb250ZXh0LWNoYW5nZWQiKSxwYXJhbXM6RmYuZGVzY3JpYmUoIlBhcnRpYWwgY29udGV4dCB1cGRhdGUgY29udGFpbmluZyBvbmx5IGNoYW5nZWQgZmllbGRzLiIpfSk7dih7bWV0aG9kOmgoInVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IikscGFyYW1zOnYoe2NvbnRlbnQ6JChWbikub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGV4dCBjb250ZW50IGJsb2NrcyAodGV4dCwgaW1hZ2UsIGV0Yy4pLiIpLHN0cnVjdHVyZWRDb250ZW50OkMoZigpLFooKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKX0pfSk7dih7bWV0aG9kOmgoInVpL2luaXRpYWxpemUiKSxwYXJhbXM6dih7YXBwSW5mbzpSci5kZXNjcmliZSgiQXBwIGlkZW50aWZpY2F0aW9uIChuYW1lIGFuZCB2ZXJzaW9uKS4iKSxhcHBDYXBhYmlsaXRpZXM6VF8uZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgdGhpcyBhcHAgcHJvdmlkZXMuIikscHJvdG9jb2xWZXJzaW9uOmYoKS5kZXNjcmliZSgiUHJvdG9jb2wgdmVyc2lvbiB0aGlzIGFwcCBzdXBwb3J0cy4iKX0pfSk7dmFyIENfPXYoe3Byb3RvY29sVmVyc2lvbjpmKCkuZGVzY3JpYmUoJ05lZ290aWF0ZWQgcHJvdG9jb2wgdmVyc2lvbiBzdHJpbmcgKGUuZy4sICIyMDI1LTExLTIxIikuJyksaG9zdEluZm86UnIuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmljYXRpb24gYW5kIHZlcnNpb24uIiksaG9zdENhcGFiaWxpdGllczp6Xy5kZXNjcmliZSgiRmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBwcm92aWRlZCBieSB0aGUgaG9zdC4iKSxob3N0Q29udGV4dDpGZi5kZXNjcmliZSgiUmljaCBjb250ZXh0IGFib3V0IHRoZSBob3N0IGVudmlyb25tZW50LiIpfSkucGFzc3Rocm91Z2goKSxPXz17dGFyZ2V0OiJkcmFmdC0yMDIwLTEyIn07YXN5bmMgZnVuY3Rpb24gYXUoZSx0KXtsZXQgbj1lWyJ+c3RhbmRhcmQiXTtpZihuLmpzb25TY2hlbWEpcmV0dXJuIG4uanNvblNjaGVtYVt0XShPXyk7aWYobi52ZW5kb3I9PT0iem9kIil7bGV0e3o6b309YXdhaXQgaWgoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnl2KSx2b2lkIDAsaW1wb3J0Lm1ldGEudXJsKTtyZXR1cm4gby50b0pTT05TY2hlbWEoZSx7aW86dH0pfXRocm93IEVycm9yKGBTY2hlbWEgKHZlbmRvcjogJHtuLnZlbmRvcn0pIGRvZXMgbm90IGltcGxlbWVudCBTdGFuZGFyZCBKU09OIFNjaGVtYSAofnN0YW5kYXJkLmpzb25TY2hlbWEpLiBVc2UgYSBsaWJyYXJ5IHRoYXQgZG9lcyAoem9kIHY0LCBBcmtUeXBlLCBWYWxpYm90KSBvciB3cmFwIHlvdXIgc2NoZW1hIGFjY29yZGluZ2x5LmApfWFzeW5jIGZ1bmN0aW9uIGN1KGUsdCxuPSIiKXtsZXQgbz1hd2FpdCBlWyJ+c3RhbmRhcmQiXS52YWxpZGF0ZSh0KTtpZihvLmlzc3Vlcyl7bGV0IHI9by5pc3N1ZXMubWFwKHM9PntsZXQgaT1zLnBhdGg/Lm1hcChhPT50eXBlb2YgYT09Im9iamVjdCI/YS5rZXk6YSkuam9pbigiLiIpO3JldHVybiBpP2Ake2l9OiAke3MubWVzc2FnZX1gOnMubWVzc2FnZX0pLmpvaW4oIjsgIik7dGhyb3cgRXJyb3IobityKX1yZXR1cm4gby52YWx1ZX1mdW5jdGlvbiBSXyhlKXtsZXQgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dC5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLGUpLHQuc3R5bGUuY29sb3JTY2hlbWU9ZX1mdW5jdGlvbiBBXyhlLHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtmb3IobGV0W24sb11vZiBPYmplY3QuZW50cmllcyhlKSlvIT09dm9pZCAwJiZ0LnN0eWxlLnNldFByb3BlcnR5KG4sbyl9ZnVuY3Rpb24gWl8oZSl7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIl9fbWNwLWhvc3QtZm9udHMiKSlyZXR1cm47bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTt0LmlkPSJfX21jcC1ob3N0LWZvbnRzIix0LnRleHRDb250ZW50PWUsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0KX1jbGFzcyBfYyBleHRlbmRzIHVfe19hcHBJbmZvO19jYXBhYmlsaXRpZXM7b3B0aW9ucztfaG9zdENhcGFiaWxpdGllcztfaG9zdEluZm87X2hvc3RDb250ZXh0O19yZWdpc3RlcmVkVG9vbHM9e307X2luaXRpYWxpemVkU2VudD0hMTtfYXNzZXJ0SW5pdGlhbGl6ZWQodCl7aWYodGhpcy5faW5pdGlhbGl6ZWRTZW50KXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSBBcHAuJHt0fSgpIGNhbGxlZCBiZWZvcmUgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIEF3YWl0IGFwcC5jb25uZWN0KCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QsIG9yIG1vdmUgZGF0YSBsb2FkaW5nIHRvIGFuIG9udG9vbHJlc3VsdCBoYW5kbGVyLmA7aWYodGhpcy5vcHRpb25zPy5zdHJpY3QpdGhyb3cgRXJyb3Iobik7Y29uc29sZS53YXJuKGAke259LiBUaGlzIHdpbGwgdGhyb3cgaW4gYSBmdXR1cmUgcmVsZWFzZS5gKX1ldmVudFNjaGVtYXM9e3Rvb2xpbnB1dDpfXyx0b29saW5wdXRwYXJ0aWFsOnlfLHRvb2xyZXN1bHQ6eF8sdG9vbGNhbmNlbGxlZDp3Xyxob3N0Y29udGV4dGNoYW5nZWQ6RV99O3N0YXRpYyBPTkVfU0hPVF9FVkVOVFM9bmV3IFNldChbInRvb2xpbnB1dCIsInRvb2xpbnB1dHBhcnRpYWwiLCJ0b29scmVzdWx0IiwidG9vbGNhbmNlbGxlZCJdKTtfZXZlckhhZExpc3RlbmVyPW5ldyBTZXQ7X2Fzc2VydEhhbmRsZXJUaW1pbmcodCl7aWYoIV9jLk9ORV9TSE9UX0VWRU5UUy5oYXModCl8fHRoaXMuX2V2ZXJIYWRMaXN0ZW5lci5oYXModCl8fCh0aGlzLl9ldmVySGFkTGlzdGVuZXIuYWRkKHQpLCF0aGlzLl9pbml0aWFsaXplZFNlbnQpKXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSAiJHtTdHJpbmcodCl9IiBoYW5kbGVyIHJlZ2lzdGVyZWQgYWZ0ZXIgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIFRoZSBob3N0IG1heSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIG5vdGlmaWNhdGlvbi4gUmVnaXN0ZXIgaGFuZGxlcnMgYmVmb3JlIGNhbGxpbmcgYXBwLmNvbm5lY3QoKS5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihuKX1zZXRFdmVudEhhbmRsZXIodCxuKXtuJiZ0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLnNldEV2ZW50SGFuZGxlcih0LG4pfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLmFkZEV2ZW50TGlzdGVuZXIodCxuKX1vbkV2ZW50RGlzcGF0Y2godCxuKXt0PT09Imhvc3Rjb250ZXh0Y2hhbmdlZCImJih0aGlzLl9ob3N0Q29udGV4dD17Li4udGhpcy5faG9zdENvbnRleHQsLi4ubn0pfWNvbnN0cnVjdG9yKHQsbj17fSxvPXthdXRvUmVzaXplOiEwfSl7c3VwZXIobyksdGhpcy5fYXBwSW5mbz10LHRoaXMuX2NhcGFiaWxpdGllcz1uLHRoaXMub3B0aW9ucz1vLG8uYWxsb3dVbnNhZmVFdmFsfHxKKHtqaXRsZXNzOiEwfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihBcixyPT4oY29uc29sZS5sb2coIlJlY2VpdmVkIHBpbmc6IixyLnBhcmFtcykse30pKSx0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix2b2lkIDApfXJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHQpe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgY2FwYWJpbGl0aWVzIGFmdGVyIHRyYW5zcG9ydCBpcyBlc3RhYmxpc2hlZCIpO3RoaXMuX2NhcGFiaWxpdGllcz1jXyh0aGlzLl9jYXBhYmlsaXRpZXMsdCl9cmVnaXN0ZXJUb29sKHQsbixvKXtpZih0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF0pdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtsZXQgcj10aGlzLHM9KCk9PntyLl9pbml0aWFsaXplZFNlbnQmJnIuX2NhcGFiaWxpdGllcy50b29scz8ubGlzdENoYW5nZWQmJnIuc2VuZFRvb2xMaXN0Q2hhbmdlZCgpfSxpPW4uaW5wdXRTY2hlbWEhPT12b2lkIDAsYT17dGl0bGU6bi50aXRsZSxkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOm4uaW5wdXRTY2hlbWEsb3V0cHV0U2NoZW1hOm4ub3V0cHV0U2NoZW1hLGFubm90YXRpb25zOm4uYW5ub3RhdGlvbnMsX21ldGE6bi5fbWV0YSxlbmFibGVkOiEwLGVuYWJsZSgpe3RoaXMuZW5hYmxlZD0hMCxzKCl9LGRpc2FibGUoKXt0aGlzLmVuYWJsZWQ9ITEscygpfSx1cGRhdGUoYyl7T2JqZWN0LmFzc2lnbih0aGlzLGMpLHMoKX0scmVtb3ZlKCl7ci5fcmVnaXN0ZXJlZFRvb2xzW3RdPT09YSYmKGRlbGV0ZSByLl9yZWdpc3RlcmVkVG9vbHNbdF0scygpKX0saGFuZGxlcjphc3luYyhjLHUpPT57aWYoIWEuZW5hYmxlZCl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGRpc2FibGVkYCk7bGV0IGw7aWYoaSl7bGV0IG09YS5pbnB1dFNjaGVtYSxiPW0/YXdhaXQgY3UobSxjPz97fSxgSW52YWxpZCBpbnB1dCBmb3IgdG9vbCAke3R9OiBgKTpjPz97fTtsPWF3YWl0IG8oYix1KX1lbHNlIGw9YXdhaXQgbyh1KTtyZXR1cm4gYS5vdXRwdXRTY2hlbWEmJiFsLmlzRXJyb3ImJihsLnN0cnVjdHVyZWRDb250ZW50PWF3YWl0IGN1KGEub3V0cHV0U2NoZW1hLGwuc3RydWN0dXJlZENvbnRlbnQsYEludmFsaWQgb3V0cHV0IGZvciB0b29sICR7dH06IGApKSxsfX07cmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XT1hLCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMmJiF0aGlzLnRyYW5zcG9ydCYmdGhpcy5yZWdpc3RlckNhcGFiaWxpdGllcyh7dG9vbHM6e2xpc3RDaGFuZ2VkOiEwfX0pLHRoaXMuZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKSxzKCksYX1fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITE7ZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKXt0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZHx8KHRoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSEwLHRoaXMub25jYWxsdG9vbD1hc3luYyh0LG4pPT57bGV0IG89dGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3QubmFtZV07aWYoIW8pdGhyb3cgRXJyb3IoYFRvb2wgJHt0Lm5hbWV9IG5vdCBmb3VuZGApO3JldHVybiBvLmhhbmRsZXIodC5hcmd1bWVudHMsbil9LHRoaXMub25saXN0dG9vbHM9YXN5bmModCxuKT0+KHt0b29sczphd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyh0aGlzLl9yZWdpc3RlcmVkVG9vbHMpLmZpbHRlcigoW28scl0pPT5yLmVuYWJsZWQpLm1hcChhc3luYyhbbyxyXSk9PntsZXQgcz17bmFtZTpvLHRpdGxlOnIudGl0bGUsZGVzY3JpcHRpb246ci5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpyLmlucHV0U2NoZW1hP2F3YWl0IGF1KHIuaW5wdXRTY2hlbWEsImlucHV0Iik6e3R5cGU6Im9iamVjdCIscHJvcGVydGllczp7fX19O3JldHVybiByLm91dHB1dFNjaGVtYSYmKHMub3V0cHV0U2NoZW1hPWF3YWl0IGF1KHIub3V0cHV0U2NoZW1hLCJvdXRwdXQiKSksci5hbm5vdGF0aW9ucyYmKHMuYW5ub3RhdGlvbnM9ci5hbm5vdGF0aW9ucyksci5fbWV0YSYmKHMuX21ldGE9ci5fbWV0YSksc30pKX0pKX1hc3luYyBzZW5kVG9vbExpc3RDaGFuZ2VkKHQ9e30pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kVG9vbExpc3RDaGFuZ2VkIiksYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiLHBhcmFtczp0fSl9Z2V0SG9zdENhcGFiaWxpdGllcygpe3JldHVybiB0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzfWdldEhvc3RWZXJzaW9uKCl7cmV0dXJuIHRoaXMuX2hvc3RJbmZvfWdldEhvc3RDb250ZXh0KCl7cmV0dXJuIHRoaXMuX2hvc3RDb250ZXh0fWdldCBvbnRvb2xpbnB1dCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iil9c2V0IG9udG9vbGlucHV0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiLHQpfWdldCBvbnRvb2xpbnB1dHBhcnRpYWwoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiKX1zZXQgb250b29saW5wdXRwYXJ0aWFsKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIix0KX1nZXQgb250b29scmVzdWx0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iil9c2V0IG9udG9vbHJlc3VsdCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIsdCl9Z2V0IG9udG9vbGNhbmNlbGxlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIpfXNldCBvbnRvb2xjYW5jZWxsZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiLHQpfWdldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIil9c2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHQpfV9vbnRlYXJkb3duO2dldCBvbnRlYXJkb3duKCl7cmV0dXJuIHRoaXMuX29udGVhcmRvd259c2V0IG9udGVhcmRvd24odCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbnRlYXJkb3duIix0aGlzLl9vbnRlYXJkb3duLHQpLHRoaXMuX29udGVhcmRvd249dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihTXywobixvKT0+e2lmKCF0aGlzLl9vbnRlYXJkb3duKXRocm93IEVycm9yKCJObyBvbnRlYXJkb3duIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29udGVhcmRvd24obi5wYXJhbXMsbyl9KX1fb25jYWxsdG9vbDtnZXQgb25jYWxsdG9vbCgpe3JldHVybiB0aGlzLl9vbmNhbGx0b29sfXNldCBvbmNhbGx0b29sKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25jYWxsdG9vbCIsdGhpcy5fb25jYWxsdG9vbCx0KSx0aGlzLl9vbmNhbGx0b29sPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoRGYsKG4sbyk9PntpZighdGhpcy5fb25jYWxsdG9vbCl0aHJvdyBFcnJvcigiTm8gb25jYWxsdG9vbCBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmNhbGx0b29sKG4ucGFyYW1zLG8pfSl9X29ubGlzdHRvb2xzO2dldCBvbmxpc3R0b29scygpe3JldHVybiB0aGlzLl9vbmxpc3R0b29sc31zZXQgb25saXN0dG9vbHModCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmxpc3R0b29scyIsdGhpcy5fb25saXN0dG9vbHMsdCksdGhpcy5fb25saXN0dG9vbHM9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihxZiwobixvKT0+e2lmKCF0aGlzLl9vbmxpc3R0b29scyl0aHJvdyBFcnJvcigiTm8gb25saXN0dG9vbHMgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHMobi5wYXJhbXMsbyl9KX1hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHQpe3N3aXRjaCh0KXtjYXNlInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiOmlmKCF0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPy5zYW1wbGluZyl0aHJvdyBFcnJvcihgSG9zdCBkb2VzIG5vdCBzdXBwb3J0IHNhbXBsaW5nIChyZXF1aXJlZCBmb3IgJHt0fSlgKTticmVha319YXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KHQpe3N3aXRjaCh0KXtjYXNlInRvb2xzL2NhbGwiOmNhc2UidG9vbHMvbGlzdCI6aWYoIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyl0aHJvdyBFcnJvcihgQ2xpZW50IGRvZXMgbm90IHN1cHBvcnQgdG9vbCBjYXBhYmlsaXR5IChyZXF1aXJlZCBmb3IgJHt0fSlgKTtyZXR1cm47Y2FzZSJwaW5nIjpjYXNlInVpL3Jlc291cmNlLXRlYXJkb3duIjpyZXR1cm47ZGVmYXVsdDp0aHJvdyBFcnJvcihgTm8gaGFuZGxlciBmb3IgbWV0aG9kICR7dH0gcmVnaXN0ZXJlZGApfX1hc3NlcnROb3RpZmljYXRpb25DYXBhYmlsaXR5KHQpe31hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFza3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2sgaGFuZGxlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3luYyBjYWxsU2VydmVyVG9vbCh0LG4pe2lmKHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjYWxsU2VydmVyVG9vbCIpLHR5cGVvZiB0PT0ic3RyaW5nIil0aHJvdyBFcnJvcihgY2FsbFNlcnZlclRvb2woKSBleHBlY3RzIGFuIG9iamVjdCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGJ1dCByZWNlaXZlZCBhIHN0cmluZyAoIiR7dH0iKS4gRGlkIHlvdSBtZWFuOiBjYWxsU2VydmVyVG9vbCh7IG5hbWU6ICIke3R9IiwgYXJndW1lbnRzOiB7IC4uLiB9IH0pP2ApO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidG9vbHMvY2FsbCIscGFyYW1zOnR9LFpyLHtvbnByb2dyZXNzOigpPT57fSxyZXNldFRpbWVvdXRPblByb2dyZXNzOiEwLC4uLm59KX1hc3luYyByZWFkU2VydmVyUmVzb3VyY2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlYWRTZXJ2ZXJSZXNvdXJjZSIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvcmVhZCIscGFyYW1zOnR9LE5mLG4pfWFzeW5jIGxpc3RTZXJ2ZXJSZXNvdXJjZXModCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImxpc3RTZXJ2ZXJSZXNvdXJjZXMiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL2xpc3QiLHBhcmFtczp0fSxaZixuKX1hc3luYyBjcmVhdGVTYW1wbGluZ01lc3NhZ2UodCxuKXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY3JlYXRlU2FtcGxpbmdNZXNzYWdlIik7bGV0IG89dC50b29scz9IZjpVZjtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiLHBhcmFtczp0fSxvLG4pfXNlbmRNZXNzYWdlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kTWVzc2FnZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9tZXNzYWdlIixwYXJhbXM6dH0sYl8sbil9c2VuZExvZyh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy9tZXNzYWdlIixwYXJhbXM6dH0pfXVwZGF0ZU1vZGVsQ29udGV4dCh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgidXBkYXRlTW9kZWxDb250ZXh0IiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IixwYXJhbXM6dH0sdGMsbil9b3BlbkxpbmsodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoIm9wZW5MaW5rIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL29wZW4tbGluayIscGFyYW1zOnR9LGdfLG4pfXNlbmRPcGVuTGluaz10aGlzLm9wZW5MaW5rO2Rvd25sb2FkRmlsZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiZG93bmxvYWRGaWxlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2Rvd25sb2FkLWZpbGUiLHBhcmFtczp0fSx2XyxuKX1yZXF1ZXN0VGVhcmRvd24odD17fSl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIscGFyYW1zOnR9KX1yZXF1ZXN0RGlzcGxheU1vZGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlcXVlc3REaXNwbGF5TW9kZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIscGFyYW1zOnR9LElfLG4pfXNlbmRTaXplQ2hhbmdlZCh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiLHBhcmFtczp0fSl9c2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKXtsZXQgdD0hMSxuPTAsbz0wLHI9KCk9Pnt0fHwodD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0PSExO2xldCBpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPWkuc3R5bGUuaGVpZ2h0O2kuc3R5bGUuaGVpZ2h0PSJtYXgtY29udGVudCI7bGV0IGM9TWF0aC5jZWlsKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtpLnN0eWxlLmhlaWdodD1hO2xldCB1PU1hdGguY2VpbCh3aW5kb3cuaW5uZXJXaWR0aCk7KHUhPT1ufHxjIT09bykmJihuPXUsbz1jLHRoaXMuc2VuZFNpemVDaGFuZ2VkKHt3aWR0aDp1LGhlaWdodDpjfSkpfSkpfTtyKCk7bGV0IHM9bmV3IFJlc2l6ZU9ic2VydmVyKHIpO3JldHVybiBzLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxzLm9ic2VydmUoZG9jdW1lbnQuYm9keSksKCk9PnMuZGlzY29ubmVjdCgpfWFzeW5jIGNvbm5lY3QodD1uZXcgcF8od2luZG93LnBhcmVudCx3aW5kb3cucGFyZW50KSxuKXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQXBwIGlzIGFscmVhZHkgY29ubmVjdGVkLiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgYWdhaW4uIik7dGhpcy5faW5pdGlhbGl6ZWRTZW50PSExLGF3YWl0IHN1cGVyLmNvbm5lY3QodCk7dHJ5e2xldCBvPWF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9pbml0aWFsaXplIixwYXJhbXM6e2FwcENhcGFiaWxpdGllczp0aGlzLl9jYXBhYmlsaXRpZXMsYXBwSW5mbzp0aGlzLl9hcHBJbmZvLHByb3RvY29sVmVyc2lvbjpsX319LENfLG4pO2lmKG89PT12b2lkIDApdGhyb3cgRXJyb3IoYFNlcnZlciBzZW50IGludmFsaWQgaW5pdGlhbGl6ZSByZXN1bHQ6ICR7b31gKTt0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPW8uaG9zdENhcGFiaWxpdGllcyx0aGlzLl9ob3N0SW5mbz1vLmhvc3RJbmZvLHRoaXMuX2hvc3RDb250ZXh0PW8uaG9zdENvbnRleHQsYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCJ9KSx0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITAsdGhpcy5vcHRpb25zPy5hdXRvUmVzaXplJiZ0aGlzLnNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl9Y2F0Y2gobyl7dGhyb3cgdGhpcy5jbG9zZSgpLG99fX1sZXQgdXU9IiI7Y29uc3QgQmY9KGUsdCxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk9PntpZighZSlyZXR1cm47KGUudGhlbWU9PT0ibGlnaHQifHxlLnRoZW1lPT09ImRhcmsiKSYmdC5hcHBseURvY3VtZW50VGhlbWUoZS50aGVtZSk7Y29uc3Qgbz1lLnN0eWxlcz8udmFyaWFibGVzO28mJnR5cGVvZiBvPT0ib2JqZWN0IiYmdC5hcHBseUhvc3RTdHlsZVZhcmlhYmxlcyhvKTtjb25zdCByPWUuc3R5bGVzPy5jc3M/LmZvbnRzO3R5cGVvZiByPT0ic3RyaW5nIiYmciYmciE9PXV1JiYodC5hcHBseUhvc3RGb250cyhyKSx1dT1yKTtjb25zdCBzPWUuc2FmZUFyZWFJbnNldHM7aWYocylmb3IoY29uc3QgaSBvZlsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0pe2NvbnN0IGE9TnVtYmVyKHNbaV0/PzApO24uc3R5bGUuc2V0UHJvcGVydHkoYC0taW5zZXQtJHtpfWAsYCR7TnVtYmVyLmlzRmluaXRlKGEpJiZhPjA/YTowfXB4YCl9fSxKZT1uZXcgX2Moe25hbWU6ImhvdGVsLXN0b3JlZnJvbnQiLHZlcnNpb246IjEuMC4wIn0se29wZW5MaW5rczp7fX0pLFZmPXthcHBseURvY3VtZW50VGhlbWU6Ul8sYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXM6QV8sYXBwbHlIb3N0Rm9udHM6Wl99LGNlPWU9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLGQ9ZT0+U3RyaW5nKGU/PyIiKS5yZXBsYWNlKC9bJjw+IiddL2csdD0+dD09PSImIj8iJmFtcDsiOnQ9PT0iPCI/IiZsdDsiOnQ9PT0iPiI/IiZndDsiOnQ9PT0nIic/IiZxdW90OyI6IiYjMzk7Iik7bGV0IHR0PSIiLFVyPSIiLEpmPXt9LEtmPSExLFdmPSIiLEE9e2NoZWNrSW46IiIsY2hlY2tPdXQ6IiIsZ3Vlc3RzOjJ9LHllPTE7Y29uc3QgTl89NTtsZXQgbmU9bnVsbCx1dD1bXSxEZT0iIixTZT1bXSwkZT1udWxsLGhvPTA7Y29uc3Qgal89bmV3IFNldChbImFkZFRvVHJpcCIsImNsZWFyVHJpcCIsInJlcXVlc3RCb29raW5nIiwiY2FuY2VsQm9va2luZyIsImNoYW5nZUJvb2tpbmciLCJzaWduSW4iLCJzaWduT3V0Il0pLGx1PWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIik7cmV0dXJuIHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zInx8dD09PSJuZWVkcy1kYXRlcyI/YGhvdGVsOiR7ZS5ob3RlbD8uaWQ/PyIifWA6dD09PSJleHRyYXMiP2BleHRyYXM6JHtlLmhvdGVsPy5pZD8/IiJ9YDp0PT09InBvbGljeSJ8fHQ9PT0icG9saWNpZXMifHx0PT09InBvbGljeS1taXNzaW5nIj9gcG9saWN5OiR7ZS5ob3RlbD8uaWQ/PyIifToke2UudG9waWM/PyIifWA6dD09PSJjYW5jZWxsYXRpb24tcHJldmlldyI/YGNhbmNlbDoke2UuYm9va2luZz8uY29uZmlybWF0aW9uQ29kZT8/IiJ9YDp0PT09ImNoYW5nZS1wcmV2aWV3Ij9gY2hhbmdlOiR7ZS5jb25maXJtYXRpb25Db2RlPz9lLmJvb2tpbmc/LmNvbmZpcm1hdGlvbkNvZGU/PyIifWA6dD09PSJuby1ob3RlbHMiPyJob3RlbHMiOnR9LG5zPWU9PnshJGV8fHFfLmhhcyhTdHJpbmcoJGUudmlldykpfHxsdShlKSE9PWx1KCRlKSYmKFNlPVsuLi5TZSx7cGF5bG9hZDokZSxsYWJlbDpEXygkZSksdmVyc2lvbjpob31dLnNsaWNlKC02KSl9LE1fPWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIiksbj1lPy5zdGF5Py5jaGVja0luP3tjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn06e307aWYodD09PSJ0cmlwIilyZXR1cm57a2V5OiJ2aWV3VHJpcCIsYXJnczp7fX07aWYodD09PSJib29raW5ncyIpcmV0dXJue2tleToibGlzdEJvb2tpbmdzIixhcmdzOnt9fTtpZigodD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMiKSYmZS5ob3RlbD8uaWQpcmV0dXJue2tleToiZ2V0SG90ZWwiLGFyZ3M6e2hvdGVsOmUuaG90ZWwuaWQsLi4ubiwuLi5lLnJvb21zX3dhbnRlZD97cm9vbXM6ZS5yb29tc193YW50ZWR9Ont9fX07aWYodD09PSJleHRyYXMiJiZlLmhvdGVsPy5pZClyZXR1cm57a2V5OiJsaXN0RXh0cmFzIixhcmdzOntob3RlbDplLmhvdGVsLmlkLC4uLm59fTtpZih0PT09Iml0aW5lcmFyeSIpcmV0dXJue2tleToiaXRpbmVyYXJ5IixhcmdzOnt0aXRsZTplLnRpdGxlLC4uLm4sZGF5czooZS5kYXlzPz9bXSkubWFwKG89Pih7bGFiZWw6by5sYWJlbCwuLi5vLm5vdGU/e25vdGU6by5ub3RlfTp7fSxpdGVtczooby5pdGVtcz8/W10pLm1hcChyPT5yLmlkKX0pKX19fSxkdT1lPT57U2U9U2UuZmlsdGVyKHQ9PiFlLmluY2x1ZGVzKFN0cmluZyh0LnBheWxvYWQ/LnZpZXcpKSl9LHFfPW5ldyBTZXQoWyJib29raW5nIiwiY2FuY2VsbGVkIiwiY2hhbmdlZCIsImVycm9yIiwibmVlZHMtZ3Vlc3QiLCJzaWduZWQtb3V0IiwibWVtYmVyLXNpZ24taW4iXSksRF89ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKTtpZih0PT09ImNvbXBhcmlzb24iKXJldHVybmAkeyhlLmNvbHVtbnM/P1tdKS5sZW5ndGh9IHNpZGUgYnkgc2lkZWA7aWYodD09PSJpdGluZXJhcnkiKXJldHVybiJ0aGUgcGxhbiI7aWYodD09PSJuby1ob3RlbHMiKXJldHVybiJ0aGUgc2VhcmNoIjtpZih0PT09ImhvdGVscyIpe2NvbnN0IG49Wy4uLm5ldyBTZXQoKGUuaG90ZWxzPz9bXSkubWFwKG89PlN0cmluZyhvLmNpdHkpKSldO3JldHVybiBuLmxlbmd0aD09PTE/U3RyaW5nKG5bMF0pOmAke2UudG90YWw/PzB9IGhvdGVsc2B9cmV0dXJuIHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zInx8dD09PSJuZWVkcy1kYXRlcyI/U3RyaW5nKGUuaG90ZWw/Lm5hbWU/PyJ0aGUgaG90ZWwiKTp0PT09ImNhbmNlbGxhdGlvbi1wcmV2aWV3Ij8idGhlIGNhbmNlbGxhdGlvbiI6dD09PSJjaGFuZ2UtcHJldmlldyI/InRoZSBjaGFuZ2UiOnQ9PT0ibWVtYmVyIj8ieW91ciBtZW1iZXJzaGlwIjp0PT09ImV4dHJhcyI/YCR7U3RyaW5nKGUuaG90ZWw/Lm5hbWU/PyJ0aGUgaG90ZWwiKX0gYWRkLW9uc2A6dD09PSJ0cmlwIj8idGhlIHRyaXAiOnQ9PT0iYm9va2luZ3MiPyJ5b3VyIGJvb2tpbmdzIjp0PT09InBvbGljeSJ8fHQ9PT0icG9saWNpZXMiPyJ0aGUgcG9saWNpZXMiOiJiYWNrIn0sTF89KCk9Pntjb25zdCBlPWNlKCJiYWNrYnRuIiksdD1TZS5hdCgtMSk7ZS5oaWRkZW49IXQsdCYmKGUudGV4dENvbnRlbnQ9YOKAuSAke3QubGFiZWx9YCl9O2xldCBBdD0iIixvcz0iIixxdD0wLHljPSExO2NvbnN0IEdmPWU9Pntjb25zdCB0PWU/LlsiY3VybGVzcy90cmlwIl07dCYmKHR5cGVvZiB0LnRyaXBJZD09InN0cmluZyImJnQudHJpcElkJiYob3M9dC50cmlwSWQpLHF0PU51bWJlcih0LmNvdW50Pz8wKSxBcnJheS5pc0FycmF5KHQubGluZXMpJiYodXQ9dC5saW5lcyx5Yz0hMCkpfSxVXz1lPT5vcz97Li4uZSx0cmlwOm9zfTplLEhfPWU9PkpmW2VdPz8iIjtsZXQgd2M9ITE7Y29uc3QgcHU9ZT0+e3djPWUsZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmNhcmQiKT8uY2xhc3NMaXN0LnRvZ2dsZSgiYnVzeSIsZSl9O2xldCBtbz0wLHJzPSIiO2NvbnN0IFg9KGUsdD17fSxuPXt9KT0+e2NvbnN0IG89SF8oZSk7aWYoIW8pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgbm8gdG9vbCBmb3IgJHtlfWApKTtpZih3YylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO3B1KCEwKTtjb25zdCByPW1vO3JldHVybiBKZS5jYWxsU2VydmVyVG9vbCh7bmFtZTpvLGFyZ3VtZW50czpVXyh0KX0pLmZpbmFsbHkoKCk9PnB1KCExKSkudGhlbihzPT57R2Yocz8uX21ldGEpO2NvbnN0IGk9cz8uc3RydWN0dXJlZENvbnRlbnQ7cnM9aT9KU09OLnN0cmluZ2lmeShpKToiIjtjb25zdCBhPWpfLmhhcyhlKSYmaSYmaS52aWV3IT09ImVycm9yIjtyZXR1cm4gcj09PW1vJiZpPyhuLnB1c2ghPT0hMSYmbnMoaSksYSYmKGhvKz0xKSxpLnZpZXc9PT0iYm9va2luZyImJihkdShbInRyaXAiLCJuZWVkcy1kYXRlcyIsIm5lZWRzLWd1ZXN0Il0pLExlPW51bGwpLChpLnZpZXc9PT0iY2FuY2VsbGVkInx8aS52aWV3PT09ImNoYW5nZWQiKSYmZHUoWyJjYW5jZWxsYXRpb24tcHJldmlldyIsImNoYW5nZS1wcmV2aWV3Il0pLGV0KGkpKTphJiYoaG8rPTEpLEZfKHMpLHN9KX0sRl89ZT0+e2NvbnN0IHQ9KGU/LmNvbnRlbnQ/P1tdKS5maW5kKG49Pm4/LnR5cGU9PT0idGV4dCIpPy50ZXh0OyF0fHwhSmUuZ2V0SG9zdENhcGFiaWxpdGllcygpPy51cGRhdGVNb2RlbENvbnRleHR8fEplLnVwZGF0ZU1vZGVsQ29udGV4dCh7Y29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6U3RyaW5nKHQpfV19KS5jYXRjaCgoKT0+e30pfSxKbj1lPT57bGV0IHQ9MDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTEpdD0odCozMStlLmNoYXJDb2RlQXQobikpJTM2MDtyZXR1cm5gLS1zaG90LWE6aHNsKCR7dH0gNDIlIDM0JSk7LS1zaG90LWI6aHNsKCR7KHQrMzgpJTM2MH0gNDYlIDIyJSlgfSxLbj1lPT5lLnJlcGxhY2UoL1teXHB7TH1ccHtOfSBdL2d1LCIgIikuc3BsaXQoL1xzKy8pLmZpbHRlcihCb29sZWFuKS5zbGljZSgwLDIpLm1hcCh0PT50WzBdPy50b1VwcGVyQ2FzZSgpPz8iIikuam9pbigiIiksQl89Jzxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIGZpbGw9ImN1cnJlbnRDb2xvciIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiAzLjVsMi42IDUuMyA1LjkuOS00LjMgNC4xIDEgNS44TDEyIDE2LjkgNi44IDE5LjZsMS01LjhMMy41IDkuN2w1LjktLjl6Ii8+PC9zdmc+JyxWXz1lPT5lJiZ0eXBlb2YgZS52YWx1ZT09Im51bWJlciI/YDxzcGFuIGNsYXNzPSJyYXRlIj4ke0JffSR7ZChlLnZhbHVlKX08c3BhbiBjbGFzcz0idC1mcm9tIj48c21hbGw+IMK3ICR7ZChlLmNvdW50KX08L3NtYWxsPjwvc3Bhbj48L3NwYW4+YDoiIixpZT0oKT0+S2Y/YDxkaXYgY2xhc3M9ImRlbW8iPjxiPkRlbW88L2I+PHNwYW4+JHtkKFdmfHwiRGVtb25zdHJhdGlvbiBkYXRhOiB0aGVzZSByYXRlcyBhbmQgcm9vbSBjb3VudHMgd2VyZSBtYWRlIHVwIGZvciB0aGlzIGRlbW8uIil9PC9zcGFuPjwvZGl2PmA6IiIsRHQ9ZT0+e2NvbnN0IHQ9bmV3IERhdGUoYCR7ZX1UMTI6MDA6MDBaYCk7cmV0dXJuIE51bWJlci5pc05hTih0LmdldFRpbWUoKSk/ZTp0LnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiLHt3ZWVrZGF5OiJzaG9ydCIsZGF5OiJudW1lcmljIixtb250aDoic2hvcnQiLHRpbWVab25lOiJVVEMifSl9LHNzPShlLHQpPT5NYXRoLnJvdW5kKChEYXRlLnBhcnNlKGAke3R9VDEyOjAwOjAwWmApLURhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkpLzg2NGU1KSxRZT1lPT5lPy5jaGVja0luJiZlPy5jaGVja091dD9gJHtEdChlLmNoZWNrSW4pfSDigJMgJHtEdChlLmNoZWNrT3V0KX0gwrcgJHtzcyhlLmNoZWNrSW4sZS5jaGVja091dCl9ICR7c3MoZS5jaGVja0luLGUuY2hlY2tPdXQpPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsSl89KGUsdCxuKT0+e2NvbnN0IG89dXQuZmluZChyPT5yLmtpbmQ9PT0icm9vbSImJnIuaG90ZWxJZD09PWUmJnIucm9vbVJlZj09PXQmJnIuc3RheT8uY2hlY2tJbj09PW4/LmNoZWNrSW4mJnIuc3RheT8uY2hlY2tPdXQ9PT1uPy5jaGVja091dCk7cmV0dXJuIE51bWJlcihvPy5xdWFudGl0eT8/MCl9LEtfPShlLHQpPT57Y29uc3Qgbj11dC5maW5kKG89Pm8ua2luZD09PSJleHRyYSImJm8uaG90ZWxJZD09PWUmJm8uZXh0cmFSZWY9PT10KTtyZXR1cm4gTnVtYmVyKG4/LnF1YW50aXR5Pz8wKX0sa2M9KGUsdCxuLG89MSk9PnQ+MD9gPHNwYW4gY2xhc3M9InN0ZXAiPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dC0xfSIgYXJpYS1sYWJlbD0iT25lIGZld2VyICR7ZChuKX0iPuKIkjwvYnV0dG9uPgogICAgICAgICA8c3BhbiBjbGFzcz0ibiI+JHt0fTwvc3Bhbj4KICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iICR7ZX0gZGF0YS1uPSIke3QrMX0iIGFyaWEtbGFiZWw9Ik9uZSBtb3JlICR7ZChuKX0iPis8L2J1dHRvbj4KICAgICAgIDwvc3Bhbj5gOmA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImFkZCIgJHtlfSBkYXRhLW49IiR7b30iIGFyaWEtbGFiZWw9IkFkZCAke2Qobil9Ij4KICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMi40IgogICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiA1djE0TTUgMTJoMTQiLz48L3N2Zz4KICAgICAgIDwvYnV0dG9uPmAsUWY9KGUsdCk9Pntjb25zdCBuPXR8fFdfKCk7cmV0dXJuKCFBLmNoZWNrSW58fEEuY2hlY2tJbjxuKSYmKEEuY2hlY2tJbj1uKSwoIUEuY2hlY2tPdXR8fEEuY2hlY2tPdXQ8PUEuY2hlY2tJbikmJihBLmNoZWNrT3V0PWlzKEEuY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjaSIgdmFsdWU9IiR7ZChBLmNoZWNrSW4pfSIgbWluPSIke2Qobil9Ij48L2xhYmVsPgogICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iY28iIHZhbHVlPSIke2QoQS5jaGVja091dCl9IiBtaW49IiR7ZChpcyhBLmNoZWNrSW4sMSkpfSI+PC9sYWJlbD4KICAgIDxsYWJlbCBjbGFzcz0iZ3Vlc3RzIj5Sb29tcwogICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iLTEiIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciByb29tIj7iiJI8L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9InJuIj4ke2QoeWUpfTwvc3Bhbj4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSIxIiBhcmlhLWxhYmVsPSJPbmUgbW9yZSByb29tIj4rPC9idXR0b24+CiAgICAgIDwvc3Bhbj4KICAgIDwvbGFiZWw+CiAgICA8c3BhbiBjbGFzcz0ibmlnaHRzIiBpZD0ibmlnaHRzIj4ke2QoJGMoKSl9PC9zcGFuPgogIDwvZGl2PmB9LCRjPSgpPT57Y29uc3QgZT1BLmNoZWNrSW4mJkEuY2hlY2tPdXQ/c3MoQS5jaGVja0luLEEuY2hlY2tPdXQpOjAsdD1lPjA/YCR7ZX0gJHtlPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsbj15ZT4xP2Ake3llfSByb29tc2A6IiI7cmV0dXJuW3Qsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKX0saXM9KGUsdCk9Pm5ldyBEYXRlKERhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkrdCo4NjRlNSkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSxXXz0oKT0+bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLEdfPWU9Pntjb25zdCB0PWUuaG90ZWxzPz9bXSxuPVsuLi5uZXcgU2V0KHQubWFwKGE9PlN0cmluZyhhLmNpdHkpKSldLG89YT0+e2NvbnN0IGM9dC5maW5kKHU9PnUuY2l0eT09PWEpPy5jb3VudHJ5O3JldHVybiBjJiYhU3RyaW5nKGMpLnN0YXJ0c1dpdGgoYSk/U3RyaW5nKGMpOiIifSxyPWE9PmAKICAgIDxkaXYgY2xhc3M9ImNpdHlncm91cCI+CiAgICAgICR7bi5sZW5ndGg+MT9gPGRpdiBjbGFzcz0iY2l0eW5hbWUiPiR7ZChhKX0ke28oYSk/YDxzbWFsbD4gwrcgJHtkKG8oYSkpfTwvc21hbGw+YDoiIn08L2Rpdj5gOiIifQogICAgICA8ZGl2IGNsYXNzPSJ0aWxlcyI+CiAgICAgICAgJHt0LmZpbHRlcihjPT5jLmNpdHk9PT1hKS5tYXAoYz0+YAogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idGlsZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2QoYy5pZCl9Ij4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7Sm4oU3RyaW5nKGMuaWQpKX0iPgogICAgICAgICAgICAgICR7Yy5pbWFnZVVybD9gPGltZyBzcmM9IiR7ZChjLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7ZChLbihTdHJpbmcoYy5uYW1lKSkpfTwvc3Bhbj4KICAgICAgICAgICAgICAke2MuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke2QoYy5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtYm9keSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHtkKGMubmFtZSl9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LXdoZXJlIj4ke2Qobi5sZW5ndGg+MT9jLmFyZWE/P2MuY2l0eTpbYy5hcmVhLGMuY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWZvb3QiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZnJvbSI+JHtjLmZyb21OaWdodGx5P2Ake2QoYy5mcm9tTmlnaHRseSl9PHNtYWxsPiAvIG5pZ2h0PC9zbWFsbD5gOiIifTwvc3Bhbj4KICAgICAgICAgICAgICAgICR7Vl8oYy5yYXRpbmcpfQogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC9idXR0b24+YCkuam9pbigiIil9CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCxzPU51bWJlcihlLnRvdGFsPz90Lmxlbmd0aCksaT1zLXQubGVuZ3RoO3JldHVybltpZSgpLGUud2lkZW5lZD9gPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgbWF0Y2hlZCAke2QoZS53aWRlbmVkLmZyb20pfS4gVGhlc2UgYXJlICR7ZChlLndpZGVuZWQudG8pfS48L2Rpdj5gOiIiLGA8ZGl2PiR7bi5tYXAocikuam9pbigiIil9PC9kaXY+YCwoZS5jdXJyZW5jaWVzPz9bXSkubGVuZ3RoPjE/YDxkaXYgY2xhc3M9Im5vdGUiPlF1b3RlZCBpbiAke2QoZS5jdXJyZW5jaWVzLmpvaW4oIiwgIikpfSDigJQgbm8gcmF0ZSBpcyBhcHBsaWVkIGhlcmUsIHNvIHRoaXMgaXMgbm90IGEgcHJpY2Ugb3JkZXIuIE9uZSBjaXR5IG9yIG9uZSBjb3VudHJ5IGdpdmVzIG9uZSBjdXJyZW5jeS48L2Rpdj5gOiIiLGUub3ZlckJ1ZGdldD9gPGRpdiBjbGFzcz0ibm90ZSI+JHtkKGUub3ZlckJ1ZGdldCl9IG1vcmUgbWF0Y2hlZCBhbmQgY2FtZSBpbiBvdmVyIHRoZSBwcmljZSBjZWlsaW5nLjwvZGl2PmA6IiIsaT4wP2A8ZGl2IGNsYXNzPSJub3RlIj5TaG93aW5nICR7dC5sZW5ndGh9IG9mICR7c30uIE5hbWUgYSBjaXR5IG9yIGEgY291bnRyeSB0byBzZWUgdGhlIHJlc3QuPC9kaXY+YDoiIl0uam9pbigiIil9LFFfPWU9Pntjb25zdCB0PWUubmVhcmVzdD8/W107cmV0dXJuIHQubGVuZ3RoP1tpZSgpLGA8ZGl2IGNsYXNzPSJ3YXJubm90ZSI+Tm90aGluZyBjYW1lIGluIHVuZGVyIHRoZSBwcmljZSBjZWlsaW5nLiAke2QodC5sZW5ndGg9PT0xPyJUaGUgbmVhcmVzdCBpcyI6IlRoZSBuZWFyZXN0IGFyZSIpfSBvdmVyIGl0LjwvZGl2PmAsYDxkaXYgY2xhc3M9InRpbGVzIj4ke3QubWFwKG49PmAKICAgICAgPGJ1dHRvbiBjbGFzcz0idGlsZSBvdmVyIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7ZChuLmlkKX0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0LXNob3QiIHN0eWxlPSIke0puKFN0cmluZyhuLmlkKSl9Ij4KICAgICAgICAgICR7bi5pbWFnZVVybD9gPGltZyBzcmM9IiR7ZChuLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtkKEtuKFN0cmluZyhuLm5hbWUpKSl9PC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW5hbWUiPiR7ZChuLm5hbWUpfTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LXdoZXJlIj4ke2QoW24uYXJlYSxuLmNpdHldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWZvb3QiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mcm9tIj4ke24uZnJvbU5pZ2h0bHk/YCR7ZChuLmZyb21OaWdodGx5KX08c21hbGw+IC8gbmlnaHQ8L3NtYWxsPmA6IiJ9PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iYmFkZ2Ugd2FybiI+T3Zlcjwvc3Bhbj4KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PmBdLmpvaW4oIiIpOmA8ZGl2IGNsYXNzPSJlbXB0eSI+Tm90aGluZyBtYXRjaGVkJHtlLnF1ZXJ5P2AgIiR7ZChlLnF1ZXJ5KX0iYDoiIn0uIFRyeSBhIGNpdHkuPC9kaXY+YH0sWWY9ZT0+YAogIDxkaXYgY2xhc3M9Imhlcm8iIHN0eWxlPSIke0puKFN0cmluZyhlLmlkKSl9Ij4KICAgICR7ZS5pbWFnZVVybD9gPGltZyBzcmM9IiR7ZChlLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtkKEtuKFN0cmluZyhlLm5hbWUpKSl9PC9zcGFuPgogICAgJHtlLmJyYW5kP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHtkKGUuYnJhbmQpfTwvc3Bhbj5gOiIifQogIDwvZGl2PgogIDxkaXY+CiAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7ZChlLm5hbWUpfTwvZGl2PgogICAgPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtkKFtlLmFyZWEsZS5jaXR5LFN0cmluZyhlLmNvdW50cnk/PyIiKS5zdGFydHNXaXRoKFN0cmluZyhlLmNpdHkpKT8iIjplLmNvdW50cnldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfSR7ZS5yYXRpbmc/YCDCtyAke2QoZS5yYXRpbmcudmFsdWUpfeKYhSAoJHtkKGUucmF0aW5nLmNvdW50KX0pYDoiIn08L2Rpdj4KICA8L2Rpdj4KICAke2Uuc3VtbWFyeT9gPGRpdiBjbGFzcz0iaC1zdW0iPiR7ZChlLnN1bW1hcnkpfTwvZGl2PmA6IiJ9CiAgJHsoZS5hbWVuaXRpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UuYW1lbml0aWVzLnNsaWNlKDAsOCkubWFwKHQ9PmA8c3BhbiBjbGFzcz0iY2hpcCI+JHtkKHQpfTwvc3Bhbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIifWAsWV89KGUsdCxuKT0+e2NvbnN0IG89Sl8oU3RyaW5nKGUuaWQpLFN0cmluZyh0LmlkKSxuKSxyPVt0LmJlZHMsdC52aWV3LGBTbGVlcHMgJHt0LnNsZWVwc31gLHQuc2l6ZVNxbT9gJHt0LnNpemVTcW19bcKyYDoiIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3cgd2l0aHRodW1iIj4KICAgICAgPHNwYW4gY2xhc3M9InRodW1iIiBzdHlsZT0iJHtKbihgJHtlLmlkfToke3QuaWR9YCl9Ij4KICAgICAgICAke3QuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2QodC5pbWFnZVVybCl9IiBhbHQ9IiI+YDpkKEtuKFN0cmluZyh0Lm5hbWUpKSl9CiAgICAgIDwvc3Bhbj4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtkKHQubmFtZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtkKHIpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+CiAgICAgICAgICAke3QuYnJlYWtmYXN0Pyc8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+QnJlYWtmYXN0PC9zcGFuPic6IiJ9CiAgICAgICAgICAke3QucmVmdW5kYWJsZT9gPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uJHt0LmZyZWVDYW5jZWxsYXRpb25VbnRpbD9gIHVudGlsICR7ZChTdHJpbmcodC5mcmVlQ2FuY2VsbGF0aW9uVW50aWwpLnNsaWNlKDAsMTApKX1gOiIifTwvc3Bhbj5gOic8c3BhbiBjbGFzcz0iYmFkZ2Ugd2FybiI+Tm9uLXJlZnVuZGFibGU8L3NwYW4+J30KICAgICAgICAgICR7TnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke2QodC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgJHt0LnB1YmxpY1N0YXlUb3RhbD9gPGRpdiBjbGFzcz0icC13YXMiPiR7ZCh0LnB1YmxpY1N0YXlUb3RhbCl9PC9kaXY+YDoiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2QodC5yb29tc1RvdGFsPz90LnN0YXlUb3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke2QodC5uaWdodGx5KX0gLyBuaWdodCR7eWU+MT9gIMK3ICR7eWV9IHJvb21zYDoiIn0gwrcgaW5jbC4gdGF4PC9kaXY+CiAgICAgICAgJHt0Lm1lbWJlclJhdGU/YDxkaXYgY2xhc3M9InAtbWVtYmVyIj4ke2QodC5tZW1iZXJSYXRlLnRpZXIpfSByYXRlPC9kaXY+YDoiIn0KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtrYyhgZGF0YS1hZGQtcm9vbT0iJHtkKHQuaWQpfSIgZGF0YS1ob3RlbD0iJHtkKGUuaWQpfSJgLG8sU3RyaW5nKHQubmFtZSkseWUpfTwvZGl2PgogICAgPC9kaXY+YH0sWF89KGUsdCk9PiFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyPyIiOmAKICA8ZGl2IGNsYXNzPSJmbGV4LWRhdGVzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iTmVhcmJ5IGFycml2YWwgZGF0ZXMiPgogICAgJHt0Lm1hcChuPT5gPGJ1dHRvbiBjbGFzcz0iZmQke24uY2hvc2VuPyIgb24iOiIifSR7bi5mcm9tPyIiOiIgb3V0In0ke24uYmVzdD8iIGJlc3QiOiIifSIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2QoZSl9IiBkYXRhLWNpPSIke2Qobi5jaGVja0luKX0iIGRhdGEtY289IiR7ZChuLmNoZWNrT3V0KX0iIGFyaWEtbGFiZWw9IkFycml2ZSAke2QoRHQoU3RyaW5nKG4uY2hlY2tJbikpKX0ke24uZnJvbT9gLCBmcm9tICR7ZChuLmZyb20pfWA6Iiwgbm90aGluZyBsZWZ0In0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1kYXkiPiR7ZChEdChTdHJpbmcobi5jaGVja0luKSkpfTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZmQtcHJpY2UiPiR7bi5mcm9tP2Qobi5mcm9tKToiRnVsbCJ9PC9zcGFuPgogICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICA8L2Rpdj5gLGZ1PWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5yb29tcz8/W10sbz1lLnN0YXk/P0E7cmV0dXJuW2llKCksWWYodCksUWYoU3RyaW5nKHQuaWQpLHQudG9kYXlUaGVyZSksWF8oU3RyaW5nKHQuaWQpLGUuZGF0ZXMpLGUubmVlZHNEYXRlcz8nPGRpdiBjbGFzcz0iZW1wdHkiPkxvb2tpbmcgdXAgcm9vbXPigKY8L2Rpdj4nOmUubm9Sb29tcz9gPGRpdiBjbGFzcz0iZXJyIj4ke2QoZS5ub1Jvb21zKX08L2Rpdj5gOmA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PllfKHQscixvKSkuam9pbigiIil9PC9kaXY+YCwoZS5leHRyYXM/P1tdKS5sZW5ndGg/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtZXh0cmFzPSIke2QodC5pZCl9Ij5BZGQtb25zIGFuZCBleHBlcmllbmNlczwvYnV0dG9uPmA6IiIsKGUucG9saWNpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UucG9saWNpZXMubWFwKHI9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtcG9saWN5PSIke2Qoci50b3BpYyl9IiBkYXRhLWhvdGVsPSIke2QodC5pZCl9Ij4ke2Qoci50aXRsZSl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YDoiIl0uam9pbigiIil9LGV5PWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5leHRyYXM/P1tdO3JldHVybltpZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtkKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCBpdCBvZmZlcnMgYmVzaWRlIHRoZSByb29tPC9kaXY+PC9kaXY+YCxgPGRpdiBjbGFzcz0icm93cyI+JHtuLm1hcChvPT5gCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2Qoby5uYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7ZChvLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Qoby5wcmljZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPnBlciAke2Qoby5wZXIpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtrYyhgZGF0YS1hZGQtZXh0cmE9IiR7ZChvLmlkKX0iIGRhdGEtaG90ZWw9IiR7ZCh0LmlkKX0iYCxLXyhTdHJpbmcodC5pZCksU3RyaW5nKG8uaWQpKSxTdHJpbmcoby5uYW1lKSl9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7ZCh0LmlkKX0iPkJhY2sgdG8gJHtkKHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LHR5PWU9Pntjb25zdCB0PWUua2luZD09PSJyb29tIj9gZGF0YS1hZGQtcm9vbT0iJHtkKGUucm9vbVJlZil9IiBkYXRhLWhvdGVsPSIke2QoZS5ob3RlbElkKX0iIGRhdGEtY2k9IiR7ZChlLnN0YXk/LmNoZWNrSW4pfSIgZGF0YS1jbz0iJHtkKGUuc3RheT8uY2hlY2tPdXQpfSIgZGF0YS1ndT0iJHtkKGUuc3RheT8uZ3Vlc3RzKX0iYDpgZGF0YS1hZGQtZXh0cmE9IiR7ZChlLmV4dHJhUmVmPz9lLnRpdGxlKX0iIGRhdGEtaG90ZWw9IiR7ZChlLmhvdGVsSWQpfSJgO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7ZChlLnRpdGxlKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2QoZS5raW5kPT09InJvb20iP2Ake2UuaG90ZWxOYW1lfSDCtyAke1FlKGUuc3RheSl9JHtlLnJlZnVuZGFibGU9PT0hMT8iIMK3IG5vbi1yZWZ1bmRhYmxlIjoiIn1gOmAke2UuaG90ZWxOYW1lfSR7ZS5kZXRhaWw/YCDCtyAke2UuZGV0YWlsfWA6IiJ9YCl9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHtkKGUudG90YWwpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+JHtkKGUudW5pdCl9JHtlLmtpbmQ9PT0icm9vbSI/IiAvIG5pZ2h0IjoiIGVhY2gifTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke2tjKHQsTnVtYmVyKGUucXVhbnRpdHk/PzEpLFN0cmluZyhlLnRpdGxlKSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxueT1lPT57Y29uc3QgdD1lLmxpbmVzPz9bXTtpZih0Lmxlbmd0aD09PTApcmV0dXJuW2llKCksJzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGUgdHJpcCBpcyBlbXB0eS48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+QnJvd3NlICR7ZCh0dCl9IGhvdGVsczwvYnV0dG9uPjwvZGl2PmBdLmpvaW4oIiIpO2NvbnN0IG49Wy4uLm5ldyBTZXQodC5tYXAobz0+U3RyaW5nKG8uZGF5Pz8iIikpKV0uc29ydCgpO3JldHVybltpZSgpLG4ubWFwKG89PmAKICAgICAgJHtvP2A8ZGl2IGNsYXNzPSJkYXkiPiR7ZChEdChvKSl9PC9kaXY+YDoiIn0KICAgICAgPGRpdiBjbGFzcz0icm93cyI+JHt0LmZpbHRlcihyPT5TdHJpbmcoci5kYXk/PyIiKT09PW8pLm1hcCh0eSkuam9pbigiIil9PC9kaXY+YCkuam9pbigiIiksKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAobz0+YCR7ZChvLnRpdGxlKX06ICR7ZChvLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9InN1bXMiPgogICAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Sb29tcyBhbmQgYWRkLW9uczwvc3Bhbj48c3Bhbj4ke2QoZS5zdWJ0b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5UYXhlcyBhbmQgZmVlczwvc3Bhbj48c3Bhbj4ke2QoZS50YXhlc0FuZEZlZXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICR7ZS5tZW1iZXJTYXZpbmc/YDxkaXYgY2xhc3M9InN1bSBnb29kIj48c3Bhbj4ke2QoZS5tZW1iZXJTYXZpbmcudGllcil9IG1lbWJlciByYXRlPC9zcGFuPjxzcGFuPuKIkiAke2QoZS5tZW1iZXJTYXZpbmcuc2F2ZWQpfTwvc3Bhbj48L2Rpdj5gOiIifQogICAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj5Ub3RhbDwvc3Bhbj48c3Bhbj4ke2QoZS50b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Qb2ludHMgdGhpcyB0cmlwIGVhcm5zPC9zcGFuPjxzcGFuPiR7ZChOdW1iZXIoZS5tZW1iZXJTYXZpbmcucG9pbnRzKS50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgICAgPC9kaXY+YCwnPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1ib29rIj5SZXF1ZXN0IGJvb2tpbmc8L2J1dHRvbj48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJub3RlIj5Ob3RoaW5nIGlzIGNoYXJnZWQgaGVyZS4gUmVxdWVzdGluZyBhIGJvb2tpbmcgYXNrcyAke2QodHQpfSB0byBob2xkIHRoZSByb29tcyBhbmQgZ2l2ZXMgeW91IGEgY29uZmlybWF0aW9uIGNvZGUuPC9kaXY+YCxlaCgpLG5lPyIiOmA8ZGl2IGNsYXNzPSJub3RlIj5BICR7ZCh0dCl9IENpcmNsZSBtZW1iZXI/IDxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stc2lnbi1pbiI+U2lnbiBpbiBmb3IgdGhlIG1lbWJlciByYXRlPC9idXR0b24+LjwvZGl2PiR7U2MoKX1gXS5qb2luKCIiKX0sWGY9W3tpZDoia2luZy1iZWQiLGxhYmVsOiJLaW5nIGJlZCJ9LHtpZDoidHdpbi1iZWRzIixsYWJlbDoiVHdpbiBiZWRzIn0se2lkOiJoaWdoLWZsb29yIixsYWJlbDoiSGlnaCBmbG9vciJ9LHtpZDoibG93LWZsb29yIixsYWJlbDoiTG93IGZsb29yIn0se2lkOiJxdWlldC1yb29tIixsYWJlbDoiUXVpZXQgcm9vbSJ9LHtpZDoiY29ubmVjdGluZy1yb29tcyIsbGFiZWw6IkNvbm5lY3Rpbmcgcm9vbXMifSx7aWQ6ImVhcmx5LWNoZWNrLWluIixsYWJlbDoiRWFybHkgY2hlY2staW4ifSx7aWQ6ImxhdGUtYXJyaXZhbCIsbGFiZWw6IkxhdGUgYXJyaXZhbCJ9LHtpZDoiYWNjZXNzaWJsZS1yb29tIixsYWJlbDoiQWNjZXNzaWJsZSByb29tIn1dLG95PXsia2luZy1iZWQiOiJ0d2luLWJlZHMiLCJ0d2luLWJlZHMiOiJraW5nLWJlZCIsImhpZ2gtZmxvb3IiOiJsb3ctZmxvb3IiLCJsb3ctZmxvb3IiOiJoaWdoLWZsb29yIn07bGV0IExlPW51bGw7Y29uc3QgZWg9KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9Imd1ZXN0IiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPkd1ZXN0IG5hbWU8aW5wdXQgaWQ9ImduYW1lIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IHNob3VsZCBhcHBlYXIgb24gdGhlIGJvb2tpbmciIHZhbHVlPSIke2QoTGU/Lm5hbWU/PyIiKX0iPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5FbWFpbDxpbnB1dCBpZD0iZ21haWwiIHR5cGU9ImVtYWlsIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkZvciB0aGUgY29uZmlybWF0aW9uIiB2YWx1ZT0iJHtkKExlPy5lbWFpbD8/IiIpfSI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iYXNrcyI+CiAgICAgIDxkaXYgY2xhc3M9ImFza3MtdCI+QXNrIHRoZSBkZXNrIGZvcjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaGlwcyI+JHtYZi5tYXAodD0+YDxidXR0b24gY2xhc3M9ImNoaXAgYXNrIiB0eXBlPSJidXR0b24iIGRhdGEtYXNrPSIke2QodC5pZCl9IiBhcmlhLXByZXNzZWQ9IiR7TGU/LnJlcXVlc3RzLmluY2x1ZGVzKHQuaWQpPyJ0cnVlIjoiZmFsc2UifSI+JHtkKHQubGFiZWwpfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICAgIDxsYWJlbD5BcnJpdmluZyBhdDxpbnB1dCBpZD0iZ3RpbWUiIHR5cGU9InRpbWUiIGF1dG9jb21wbGV0ZT0ib2ZmIiB2YWx1ZT0iJHtkKExlPy5hcnJpdmluZ0F0Pz8iIil9Ij48L2xhYmVsPgogICAgICAgIDxsYWJlbD5Bbnl0aGluZyBlbHNlPGlucHV0IGlkPSJnbm90ZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJJbiB5b3VyIG93biB3b3JkcyDigJQgb3B0aW9uYWwiIHZhbHVlPSIke2QoTGU/Lm5vdGVzPz8iIil9Ij48L2xhYmVsPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+VGhlc2UgZ28gdG8gdGhlIGRlc2sgYXMgcmVxdWVzdHMuICR7ZCh0dCl9IG1lZXRzIHdoYXQgaXQgY2FuIG9uIHRoZSBkYXk7IG5vbmUgb2YgaXQgaXMgaGVsZC48L2Rpdj4KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2siPkhvbGQgdGhlc2Ugcm9vbXM8L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIGNhcmQgaXMgdGFrZW4gYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gWW91IHByZXNlbnQgYSBjYXJkIGF0IGNoZWNrLWluLjwvZGl2PgogIDwvZGl2PmAscnk9ZT0+W2A8ZGl2IGNsYXNzPSJlcnIiPlRoZSBib29raW5nIG5lZWRzICR7ZCgoZS5taXNzaW5nPz9bXSkuam9pbigiIGFuZCAiKXx8ImEgbmFtZSBhbmQgYW4gZW1haWwiKX0uPC9kaXY+YCxlaCghMCksJzxkaXYgY2xhc3M9Im5vdGUiPk5vIGNhcmQgaXMgdGFrZW4gYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gWW91IHByZXNlbnQgYSBjYXJkIGF0IGNoZWNrLWluLjwvZGl2PiddLmpvaW4oIiIpLHN5PWU9Pntjb25zdCB0PWUubWVtYmVyPz97fTtyZXR1cm5baWUoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke2QodC5wcm9ncmFtbWUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0id2hlcmUiPiR7ZCh0Lm5hbWUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSIgc3R5bGU9ImZvbnQtc2l6ZToyMHB4Ij4ke2QodC50aWVyPy5uYW1lKX08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9IndoZW4iPiR7ZChOdW1iZXIodC5wb2ludHM/PzApLnRvTG9jYWxlU3RyaW5nKCJlbi1HQiIpKX0gcG9pbnRzPC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0idW5wYWlkIj48Yj4ke2QoTWF0aC5yb3VuZCgodC50aWVyPy5kaXNjb3VudD8/MCkqMTAwKSl9JSBvZmY8L2I+PHNwYW4+Um9vbSByYXRlcyBhbmQgdHJpcCB0b3RhbHMgbm93IHNob3cgdGhlICR7ZCh0LnRpZXI/Lm5hbWUpfSBtZW1iZXIgcmF0ZS4gTm90aGluZyBpcyBjaGFyZ2VkIGJ5IHNpZ25pbmcgaW4uPC9zcGFuPjwvZGl2PmAsYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkZpbmQgYSBob3RlbDwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24tb3V0Ij5TaWduIG91dDwvYnV0dG9uPgogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxpeT0oKT0+Wyc8ZGl2IGNsYXNzPSJlcnIiPk5vIG1lbWJlcnNoaXAgbWF0Y2hlcyB0aGF0IG51bWJlciBhbmQgc3VybmFtZS4gQ2hlY2sgYm90aCBhcyB0aGV5IGFyZSBwcmludGVkIOKAlCBub3RoaW5nIGVsc2UgaXMgbmVlZGVkLCB0aGlzIGNvbm5lY3RvciBuZXZlciBhc2tzIGZvciBhIHBhc3N3b3JkLjwvZGl2PicsU2MoITApXS5qb2luKCIiKSxTYz0oZT0hMSk9PmAKICA8ZGl2IGNsYXNzPSJmb3JtIiBpZD0ic2lnbmluIiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPk1lbWJlcnNoaXAgbnVtYmVyPGlucHV0IGlkPSJtbnVtIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IGlzIHByaW50ZWQiPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5TdXJuYW1lPGlucHV0IGlkPSJtc3VyIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlRoZSBzdXJuYW1lIG9uIGl0Ij48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ic2lnbi1pbiI+U2lnbiBpbjwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibm90ZSI+Tm8gcGFzc3dvcmQgaXMgYXNrZWQgZm9yIGFuZCBub25lIGlzIHN0b3JlZC4gU2lnbmluZyBpbiBzaG93cyB0aGUgbWVtYmVyIHJhdGU7IG5vdGhpbmcgaXMgY2hhcmdlZC48L2Rpdj4KICA8L2Rpdj5gLGF5PWU9Pntjb25zdCB0PWUucmVxdWVzdGVkPz9bXTtyZXR1cm4gdC5sZW5ndGg/YDxkaXYgY2xhc3M9ImFza2VkJHtlLmFjY2Vzc2liaWxpdHk/IiBmbGFnIjoiIn0iPgogICAgPGI+UmVxdWVzdGVkLCBub3QgaGVsZDwvYj4KICAgICR7dC5tYXAobj0+YDxzcGFuPiR7ZChuKX08L3NwYW4+YCkuam9pbigiIil9CiAgPC9kaXY+YDoiIn0saHU9ZT0+U3RyaW5nKGUuaG9sZFVudGlsPz8iIikuc2xpY2UoMCwxNikucmVwbGFjZSgiVCIsIiAiKSxjeT1lPT57Y29uc3QgdD1BcnJheS5pc0FycmF5KGUuYm9va2luZ3MpJiZlLmJvb2tpbmdzLmxlbmd0aD9lLmJvb2tpbmdzOltlLmJvb2tpbmc/P3t9XSxuPXQubGVuZ3RoPjEsbz0ocixzLGkpPT5bYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj5Db25maXJtYXRpb24gY29kZTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2Qoci5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0id2hlcmUiPiR7ZChyLmhvdGVsTmFtZSl9PC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9IndoZW4iPiR7ZChRZShyLnN0YXkpKX0gwrcgJHtkKHIuZ3Vlc3Q/Lm5hbWU/PyIiKX08L2Rpdj4KICAgICAgIDwvZGl2PmAsbj9gPGRpdiBjbGFzcz0ibm90ZSI+SGVsZCB1bnRpbCAke2QoaHUocikpfSBVVEMuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibW9uZXktb3V0Ij48c3Bhbj5Ub3RhbCBmb3IgdGhlIHN0YXk8L3NwYW4+PHNwYW4+JHtkKHMpfTwvc3Bhbj48L2Rpdj5gLGF5KGkpLGA8ZGl2IGNsYXNzPSJyb3dzIj4keyhyLnF1b3RlPy5saW5lcz8/W10pLm1hcChseSkuam9pbigiIil9PC9kaXY+YCxuP2A8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtkKHIuY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgJHtkKHIuaG90ZWxOYW1lKX08L2J1dHRvbj48L2Rpdj5gOiIiXS5qb2luKCIiKTtyZXR1cm5baWUoKSxuP2A8ZGl2IGNsYXNzPSJub3RlIj4ke3QubGVuZ3RofSBib29raW5ncywgb25lIGZvciBlYWNoIHN0YXkuIEVhY2ggaG90ZWwgaG9sZHMgaXRzIG93biBuaWdodHMgdW5kZXIgaXRzIG93biBjb2RlLCBhbmQgZWFjaCBpcyBjaGFuZ2VkIG9yIGNhbmNlbGxlZCBvbiBpdHMgb3duLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9InVucGFpZCI+CiAgICAgICA8Yj5Ob3RoaW5nIGhhcyBiZWVuIGNoYXJnZWQuPC9iPgogICAgICAgPHNwYW4+JHtuPyJUaGUgcm9vbXMgYXJlIGhlbGQgdW50aWwgdGhlIHRpbWUgdW5kZXIgZWFjaCBjb2RlLiI6YFRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCAke2QoaHUodFswXSkpfSBVVEMuYH0gQSBjYXJkIGlzIHByZXNlbnRlZCBhdCBjaGVjay1pbiwgbm90IGhlcmUuPC9zcGFuPgogICAgIDwvZGl2PmAsLi4udC5tYXAocj0+bj9vKHIsU3RyaW5nKHIudG90YWw/PyIiKSxyKTpvKHIsU3RyaW5nKGUudG90YWw/PyIiKSxlKSksYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgJHtuPyIiOmA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtkKHRbMF0/LmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsIHRoaXMgYm9va2luZzwvYnV0dG9uPmB9CiAgICAgPC9kaXY+YF0uam9pbigiIil9LHV5PWU9PltgPGRpdiBjbGFzcz0iZXJyIj4ke2QoZS5kZXRhaWw/P2Uud2h5Pz8iVGhhdCBjb3VsZCBub3QgYmUgZG9uZS4iKX08L2Rpdj5gLHF0PjA/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJ0cmlwIj5WaWV3IHRoZSB0cmlwPC9idXR0b24+PC9kaXY+JzoiIl0uam9pbigiIiksbHk9ZT0+YAogIDxkaXYgY2xhc3M9InJvdyI+CiAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtkKGUudGl0bGUpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2QoZS5raW5kPT09InJvb20iP1FlKGUuc3RheSk6ZS5kZXRhaWw/PyIiKX08L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icHJpY2UiPjxkaXYgY2xhc3M9InAtdG90YWwiPiR7ZChlLnRvdGFsKX08L2Rpdj48L2Rpdj4KICA8L2Rpdj5gLGR5PXtyZXF1ZXN0ZWQ6Indhcm4iLGNvbmZpcm1lZDoiZ29vZCIsY2FuY2VsbGVkOiJiYWQiLGV4cGlyZWQ6ImJhZCJ9LHB5PWU9Pntjb25zdCB0PWUucmVxdWVzdHM/LmtpbmRzPz9bXTtpZighdC5sZW5ndGgpcmV0dXJuIiI7Y29uc3Qgbj10Lm1hcChvPT5YZi5maW5kKHI9PnIuaWQ9PT1vKT8ubGFiZWw/P28pO3JldHVybmA8ZGl2IGNsYXNzPSJtZXRhIGFza2VkLWxpbmUiPkFza2VkIGZvciAke2Qobi5qb2luKCIsICIpLnRvTG93ZXJDYXNlKCkpfTwvZGl2PmB9LGZ5PWU9Pntjb25zdCB0PWUuYm9va2luZ3M/P1tdO3JldHVybiB0Lmxlbmd0aD09PTA/JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5ncyBpbiB0aGlzIGNvbnZlcnNhdGlvbiB5ZXQuPC9kaXY+JzpbaWUoKSxgPGRpdiBjbGFzcz0icm93cyI+JHt0Lm1hcChuPT5gCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2Qobi5ob3RlbE5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtkKG4uY29uZmlybWF0aW9uQ29kZSl9IMK3ICR7ZChRZShuLnN0YXkpKX08L2Rpdj4KICAgICAgICAgICR7cHkobil9CiAgICAgICAgICA8ZGl2IGNsYXNzPSJiYWRnZXMiPjxzcGFuIGNsYXNzPSJiYWRnZSAke2R5W1N0cmluZyhuLnN0YXR1cyldPz8iIn0iPiR7ZChuLnN0YXR1cyl9PC9zcGFuPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj48ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Qobi5xdW90ZT8udG90YWw/PyIiKX08L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7bi5zdGF0dXM9PT0icmVxdWVzdGVkInx8bi5zdGF0dXM9PT0iY29uZmlybWVkIj9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7ZChuLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsPC9idXR0b24+YDoiIn08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIil9LG11PWU9Pntjb25zdCB0PWUudmlldz09PSJjYW5jZWxsZWQiLG49ZS5ib29raW5nPz97fTtyZXR1cm5bYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0PyJDYW5jZWxsZWQiOiJDYW5jZWxsaW5nIn08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7ZChuLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InN1bXMiPgogICAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke3Q/IlRoZSBob3RlbCBjaGFyZ2VzIjoiQ2FuY2VsbGluZyB3b3VsZCBjb3N0In08L3NwYW4+PHNwYW4+JHtkKGUuZmVlKX08L3NwYW4+PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ibm90ZSI+JHtkKGUucnVsZSl9PC9kaXY+YCx0PyIiOmUuY2FuY2VsbGFibGU/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5LZWVwIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBkYW5nZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jb25maXJtLWNhbmNlbD0iJHtkKG4uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhlIGJvb2tpbmc8L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOic8ZGl2IGNsYXNzPSJub3RlIj5UaGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gY2FuY2VsIG9uIHRoaXMgYm9va2luZy48L2Rpdj4nXS5qb2luKCIiKX0sZ3U9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNoYW5nZWQiLG49ZS5ib29raW5nPz97fSxvPShyLHMsaSk9PnM/YDxkaXYgY2xhc3M9ImxlZyR7aT8iIHdhcyI6IiJ9Ij4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdrIj4ke2Qocil9PC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVndiI+JHtkKHMuY2hlY2tJbil9IOKGkiAke2Qocy5jaGVja091dCl9IMK3ICR7ZChzLm5pZ2h0cyl9ICR7TnVtYmVyKHMubmlnaHRzKT09PTE/Im5pZ2h0IjoibmlnaHRzIn08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdtIj4ke2Qocy5yb29tTmFtZSl9JHtOdW1iZXIocy5yb29tcyk+MT9gIMK3ICR7ZChzLnJvb21zKX0gcm9vbXNgOiIifSDCtyAke2Qocy50b3RhbCl9PC9kaXY+CiAgICAgICAgIDwvZGl2PmA6IiI7cmV0dXJuW2llKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0PyJDaGFuZ2VkIjoiQ2hhbmdpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtkKG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxlLmhvdGVsTmFtZT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtkKGUuaG90ZWxOYW1lKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJsZWdzIj4ke28odD8iV2FzIjoiTm93IixlLmZyb20sITApfSR7byh0PyJOb3ciOiJXb3VsZCBiZSIsZS50bywhMSl9PC9kaXY+YCxlLmRpZmZlcmVuY2U/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+JHtlLnJlZnVuZER1ZT90PyJUaGUgZGVzayBvd2VzIjoiV291bGQgY29tZSBiYWNrIjp0PyJUaGUgZGVzayBhc2tzIGZvciI6IldvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke2QoZS5kaWZmZXJlbmNlKX08L3NwYW4+PC9kaXY+PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibm90ZSI+JHtkKGUucnVsZSl9PC9kaXY+YCx0Pyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+PC9kaXY+JzplLmNoYW5nZWFibGU/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5MZWF2ZSBpdDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1jb25maXJtLWNoYW5nZT0iJHtkKG4uY29uZmlybWF0aW9uQ29kZSl9Ij5Nb3ZlIHRoZSBib29raW5nPC9idXR0b24+CiAgICAgICAgICAgPC9kaXY+YDoiIl0uam9pbigiIil9LEhyPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS52aWV3PT09InBvbGljeSI/YDxoND4ke2QoZS50aXRsZSl9PC9oND4ke2QoZS50ZXh0KX1gOihlLnRvcGljcz8/W10pLm1hcChvPT5gPGg0PiR7ZChvLnRpdGxlKX08L2g0PiR7ZChvLnRleHQpfWApLmpvaW4oIiIpO3JldHVybltgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7ZCh0Lm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPldoYXQgdGhlIGhvdGVsIHB1Ymxpc2hlczwvZGl2PjwvZGl2PmAsZS52aWV3PT09InBvbGljeS1taXNzaW5nIj9gPGRpdiBjbGFzcz0iZW1wdHkiPiR7ZCh0Lm5hbWUpfSBkb2VzIG5vdCBwdWJsaXNoIGFueXRoaW5nIGFib3V0IHRoYXQgaGVyZS48L2Rpdj5gOmA8ZGl2IGNsYXNzPSJwcm9zZSI+JHtufTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7ZCh0LmlkKX0iPkJhY2sgdG8gJHtkKHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LGh5PWU9Pntjb25zdCB0PWUuY29sdW1ucz8/W10sbj1lLnJvd0xhYmVscz8/W10sbz1yPT5gCiAgICA8ZGl2IGNsYXNzPSJjbXAtaGVhZCR7ci5yZWNvbW1lbmRlZD8iIHBpY2siOiIifSI+CiAgICAgICR7ci5yZWNvbW1lbmRlZD8nPGRpdiBjbGFzcz0icGlja21hcmsiPlJlY29tbWVuZGVkPC9kaXY+JzoiIn0KICAgICAgPGJ1dHRvbiBjbGFzcz0idC1zaG90IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7ZChyLmhvdGVsLmlkKX0iIHN0eWxlPSIke0puKFN0cmluZyhyLmhvdGVsLmlkKSl9Ij4KICAgICAgICAke3IuaG90ZWwuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2Qoci5ob3RlbC5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2QoS24oU3RyaW5nKHIuaG90ZWwubmFtZSkpKX08L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8ZGl2IGNsYXNzPSJjb2wtYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLW5hbWUiPiR7ZChyLmhvdGVsLm5hbWUpfTwvZGl2PgogICAgICAgICR7ci5wcmljZT9gPGRpdiBjbGFzcz0iY29sLXByaWNlIj4ke2Qoci5wcmljZS5zdGF5VG90YWwpfTxzbWFsbD4gdG90YWwgwrcgJHtkKHIucHJpY2UubmlnaHRseSl9L25pZ2h0PC9zbWFsbD48L2Rpdj5gOnIuZnJvbT9gPGRpdiBjbGFzcz0iY29sLXByaWNlIj4ke2Qoci5mcm9tKX08c21hbGw+IC8gbmlnaHQgZnJvbTwvc21hbGw+PC9kaXY+YDoiIn0KICAgICAgICAke3IuYmVzdEZvcj9gPGRpdiBjbGFzcz0id2h5Ij4ke2Qoci5iZXN0Rm9yKX08L2Rpdj5gOiIifQogICAgICAgICR7KHIucHJvcz8/W10pLmxlbmd0aHx8KHIuY29ucz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0icGMiPiR7Wy4uLihyLnByb3M/P1tdKS5tYXAocz0+YDxkaXYgY2xhc3M9InBybyI+PHNwYW4gY2xhc3M9Im0iPis8L3NwYW4+PHNwYW4+JHtkKHMpfTwvc3Bhbj48L2Rpdj5gKSwuLi4oci5jb25zPz9bXSkubWFwKHM9PmA8ZGl2IGNsYXNzPSJjb24iPjxzcGFuIGNsYXNzPSJtIj7iiJI8L3NwYW4+PHNwYW4+JHtkKHMpfTwvc3Bhbj48L2Rpdj5gKV0uam9pbigiIil9PC9kaXY+YDoiIn0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gO3JldHVybltpZSgpLGUudGl0bGU/YDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtkKGUudGl0bGUpfTwvZGl2PmA6IiIsZS5zdGF5P2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2QoUWUoZS5zdGF5KSl9PC9kaXY+YDoiIixBcnJheS5pc0FycmF5KGUuY3VycmVuY2llcykmJmUuY3VycmVuY2llcy5sZW5ndGg+MT9gPGRpdiBjbGFzcz0ibm90ZSI+UHJpY2VzIGFyZSBpbiBlYWNoIGhvdGVsJ3Mgb3duIGN1cnJlbmN5ICgke2QoZS5jdXJyZW5jaWVzLmpvaW4oIiwgIikpfSkuIFRoZXkgYXJlIG5vdCBjb252ZXJ0ZWQsIHNvIHRoZSBjb2x1bW5zIGFyZSBub3QgYSBwcmljZSByYW5raW5nLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImNtcC13cmFwIj48ZGl2IGNsYXNzPSJjbXAiIHN0eWxlPSItLWNvbHM6JHt0Lmxlbmd0aH0iPgogICAgICAgPGRpdiBjbGFzcz0iY21wLWNvcm5lciI+PC9kaXY+CiAgICAgICAke3QubWFwKG8pLmpvaW4oIiIpfQogICAgICAgJHtuLm1hcCgocixzKT0+YDxkaXYgY2xhc3M9ImsiPiR7ZChyKX08L2Rpdj4ke3QubWFwKGk9PmA8ZGl2IGNsYXNzPSJ2JHtzJTI/IiBhbHQiOiIifSI+JHtkKGkucm93cz8uW3NdPy52YWx1ZT8/IuKAlCIpfTwvZGl2PmApLmpvaW4oIiIpfWApLmpvaW4oIiIpfQogICAgIDwvZGl2PjwvZGl2PmAsKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAocj0+YCR7ZChyLm5hbWUpfTogJHtkKHIud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibm90ZSI+T3BlbiBhICR7ZChlLnZvY2FiPy5ub3VuPz8iaG90ZWwiKX0gdG8gc2VlIGl0cyByb29tcyR7ZS5zdGF5Py5jaGVja0luPyIgZm9yIHRoZXNlIG5pZ2h0cyI6IiJ9LjwvZGl2PmBdLmpvaW4oIiIpfSxteT1lPT57Y29uc3QgdD1lLmRheXM/P1tdO3JldHVybltpZSgpLGA8ZGl2PgogICAgICAgPGRpdiBjbGFzcz0iaC1uYW1lIj4ke2QoZS50aXRsZSl9PC9kaXY+CiAgICAgICAke2Uuc3RheT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtkKFFlKGUuc3RheSkpfTwvZGl2PmA6IiJ9CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0iZ2FwIj48Yj4ke2QoTnVtYmVyKGUuaW5UcmlwPz8wKStOdW1iZXIoZS5ib29rZWQ/PzApKX0vJHtkKGUucGxhbm5lZCl9PC9iPjxzcGFuPiR7ZChlLmdhcD8/IiIpfTwvc3Bhbj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJkYXlzIj4ke3QubWFwKChuLG8pPT5gCiAgICAgIDxkaXYgY2xhc3M9ImRheXJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5bnVtIj48Yj4ke28rMX08L2I+PGk+PC9pPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRheWJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGF5bGFiZWwiPiR7ZChuLmxhYmVsKX0ke24uZGF0ZT9gPHNtYWxsPiDCtyAke2QoU3RyaW5nKG4uZGF0ZSkuc2xpY2UoNSkpfTwvc21hbGw+YDoiIn08L2Rpdj4KICAgICAgICAgICR7bi5ub3RlP2A8ZGl2IGNsYXNzPSJkYXlub3RlIj4ke2Qobi5ub3RlKX08L2Rpdj5gOiIifQogICAgICAgICAgJHsobi5pdGVtcz8/W10pLm1hcChyPT5gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYW4taXRlbSIke3Iua2luZD09PSJob3RlbCI/YCBkYXRhLWhvdGVsPSIke2Qoci5pZCl9IiByb2xlPSJidXR0b24iIHRhYmluZGV4PSIwIiR7ci5jaGVja0luP2AgZGF0YS1jaT0iJHtkKHIuY2hlY2tJbil9IiBkYXRhLWNvPSIke2Qoci5jaGVja091dCl9ImA6IiJ9YDoiIn0+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7ZChyLm5hbWUpfTwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtkKFtyLmRldGFpbCxyLm5pZ2h0cz9OdW1iZXIoci5uaWdodD8/MSk+MT9gbmlnaHQgJHtyLm5pZ2h0fSBvZiAke3IubmlnaHRzfWA6YCR7ci5uaWdodHN9ICR7ci5uaWdodHM9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9IGhlcmVgOiIiLHIucHJpY2VdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbnN0YXRlICR7ci5ib29rZWR8fHIuaW5UcmlwPyJ5ZXMiOiJubyJ9Ij4ke3IuYm9va2VkP2BCb29rZWQgwrcgJHtkKHIuYm9va2VkKX1gOnIuaW5UcmlwPyJJbiB0aGUgdHJpcCI6IlBsYW4gb25seSJ9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj5gKS5qb2luKCIiKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChuPT5gJHtkKG4ubmFtZSl9OiAke2Qobi53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sZXQ9ZT0+e2lmKCFlfHx0eXBlb2YgZSE9Im9iamVjdCIpcmV0dXJuO2UudG9vbE5hbWVzJiYoSmY9ZS50b29sTmFtZXMpLGUuYnJhbmQmJih0dD1TdHJpbmcoZS5icmFuZCkpLGUubG9nb1VybCYmKFVyPVN0cmluZyhlLmxvZ29VcmwpKSx0eXBlb2YgZS5kZW1vPT0iYm9vbGVhbiImJihLZj1lLmRlbW8pLGUuZGVtb05vdGUmJihXZj1TdHJpbmcoZS5kZW1vTm90ZSkpLHR5cGVvZiBlLnJvb21zX3dhbnRlZD09Im51bWJlciImJih5ZT1lLnJvb21zX3dhbnRlZCksZS52aWV3PT09Im1lbWJlciImJmUubWVtYmVyPy50aWVyPy5uYW1lP25lPWUubWVtYmVyOmUubWVtYmVyPy50aWVyPy5uYW1lJiYobmU9bmU/LnByb2dyYW1tZT09PWUubWVtYmVyLnByb2dyYW1tZSYmbmU/LnRpZXI/Lm5hbWU9PT1lLm1lbWJlci50aWVyLm5hbWU/ey4uLm5lLC4uLmUubWVtYmVyfTplLm1lbWJlciksZS52aWV3PT09InNpZ25lZC1vdXQiJiYobmU9bnVsbCksZS5zdGF5Py5jaGVja0luJiYoQT17Y2hlY2tJbjplLnN0YXkuY2hlY2tJbixjaGVja091dDplLnN0YXkuY2hlY2tPdXQsZ3Vlc3RzOmUuc3RheS5ndWVzdHM/PzJ9KSwheWMmJihlLnZpZXc9PT0idHJpcCJ8fGUudmlldz09PSJuZWVkcy1kYXRlcyIpJiYodXQ9ZS5saW5lcz8/W10pLChlLnZpZXc9PT0iYm9va2luZyJ8fGUudmlldz09PSJlbXB0eS10cmlwIikmJih1dD1bXSxxdD0wKSxEZT1TdHJpbmcoZS52aWV3Pz8iIiksTF8oKTtjb25zdCB0PWNlKCJicmFuZCIpO1VyPyh0LnNyYz1Vcix0LmhpZGRlbj0hMSxjZSgidGl0bGUiKS5oaWRkZW49ITApOih0LmhpZGRlbj0hMCxjZSgidGl0bGUiKS5oaWRkZW49ITEsY2UoInRpdGxlIikudGV4dENvbnRlbnQ9dHR8fCJIb3RlbHMiKSxjZSgic3ViIikudGV4dENvbnRlbnQ9dnkoZSksX3koKSxieSgpO2NvbnN0IG49e2hvdGVsczpHXywibm8taG90ZWxzIjpRXyxob3RlbDpmdSwibm8tcm9vbXMiOmZ1LCJob3RlbC1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoYXQgaG90ZWwgaXMgbm90IGluIHRoaXMgY29ubmVjdG9yLjwvZGl2PicsZXh0cmFzOmV5LHRyaXA6bnksIm5lZWRzLWRhdGVzIjpneSxib29raW5nOmN5LCJuZWVkcy1ndWVzdCI6cnksbWVtYmVyOnN5LCJtZW1iZXItbm90LWZvdW5kIjppeSwic2lnbmVkLW91dCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+U2lnbmVkIG91dC4gUmF0ZXMgYXJlIHRoZSBwdWJsaWMgb25lcyBhZ2Fpbi48L2Rpdj48ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+PC9kaXY+JywiZW1wdHktdHJpcCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlcmUgaXMgbm90aGluZyBpbiB0aGUgdHJpcCB5ZXQuPC9kaXY+Jyxib29raW5nczpmeSwiY2FuY2VsbGF0aW9uLXByZXZpZXciOm11LGNhbmNlbGxlZDptdSwiY2hhbmdlLXByZXZpZXciOmd1LGNoYW5nZWQ6Z3UsImJvb2tpbmctbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5nIGhlcmUgbWF0Y2hlcyB0aGF0IGNvZGUuPC9kaXY+Jyxjb21wYXJpc29uOmh5LCJub3RoaW5nLXRvLWNvbXBhcmUiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vbmUgb2YgdGhvc2UgYXJlIGhvdGVscyB0aGlzIGNvbm5lY3RvciBrbm93cy48L2Rpdj4nLGl0aW5lcmFyeTpteSwiZW1wdHktaXRpbmVyYXJ5IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5BbiBpdGluZXJhcnkgbmVlZHMgYXQgbGVhc3Qgb25lIGRheS48L2Rpdj4nLHBvbGljeTpIcixwb2xpY2llczpIciwicG9saWN5LW1pc3NpbmciOkhyLGVycm9yOnV5LCJtZW1iZXItc2lnbi1pbiI6KCk9PltpZSgpLCc8ZGl2IGNsYXNzPSJub3RlIj5TaWduIGluIHdpdGggdGhlIG1lbWJlcnNoaXAgbnVtYmVyIGFuZCB0aGUgc3VybmFtZSBwcmludGVkIG9uIHRoZSBjYXJkIHRvIHNlZSB0aGUgbWVtYmVyIHJhdGUgb24gZXZlcnkgcHJpY2UgaGVyZS48L2Rpdj4nLFNjKCEwKV0uam9pbigiIil9OyhEZT09PSJob3RlbCJ8fERlPT09Im5vLXJvb21zInx8RGU9PT0ibmVlZHMtZGF0ZXMiKSYmZS5ob3RlbD8uaWQ/KEF0PVN0cmluZyhlLmhvdGVsLmlkKSxlLm5lZWRzRGF0ZXMmJnNldFRpbWVvdXQoKCk9PnpjKCksMCkpOihBdD0iIixjbGVhclRpbWVvdXQoTHQpKSwkZT1lO2NvbnN0IG89bltEZV07Y2UoImNvbnRlbnQiKS5pbm5lckhUTUw9bz9vKGUpOmA8ZGl2IGNsYXNzPSJlcnIiPiR7ZChlLmVycm9yPz8iU29tZXRoaW5nIGNhbWUgYmFjayB0aGF0IHRoaXMgY2FyZCBkb2VzIG5vdCBrbm93IGhvdyB0byBkcmF3LiIpfSR7ZS5kZXRhaWw/YDxicj4ke2QoZS5kZXRhaWwpfWA6IiJ9PC9kaXY+YH0sZ3k9ZT0+W2llKCksZS5ob3RlbD9ZZihlLmhvdGVsKToiIixgPGRpdiBjbGFzcz0iZXJyIj4ke2QoZS53aHk/PyJXaGljaCBuaWdodHM/IEEgcm9vbSBuZWVkcyBhIGNoZWNrLWluIGFuZCBhIGNoZWNrLW91dCBkYXRlLiIpfTwvZGl2PmAsUWYoU3RyaW5nKGUuaG90ZWw/LmlkPz8iIiksZS5ob3RlbD8udG9kYXlUaGVyZSldLmpvaW4oIiIpLHZ5PWU9PmUudmlldz09PSJob3RlbHMiP2Ake2UudG90YWw/PzB9ICR7TnVtYmVyKGUudG90YWwpPT09MT8iaG90ZWwiOiJob3RlbHMifWA6ZS52aWV3PT09ImhvdGVsInx8ZS52aWV3PT09Im5vLXJvb21zIj9RZShlLnN0YXkpOmUudmlldz09PSJ0cmlwIj8oZS5saW5lcz8/W10pLmxlbmd0aD9TdHJpbmcoZS50b3RhbD8/IiIpOiIiOmUudmlldz09PSJjb21wYXJpc29uIj9gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgOmUudmlldz09PSJpdGluZXJhcnkiP051bWJlcihlLmJvb2tlZCk+MD9gJHtlLmJvb2tlZH0vJHtlLnBsYW5uZWR9IGJvb2tlZGA6YCR7ZS5pblRyaXB9LyR7ZS5wbGFubmVkfSBpbiB0aGUgdHJpcGA6ZS52aWV3PT09ImJvb2tpbmdzIj9gJHtlLmNvdW50Pz8wfSBib29raW5nJHtOdW1iZXIoZS5jb3VudCk9PT0xPyIiOiJzIn1gOiIiLGJ5PSgpPT57Y29uc3QgZT1jZSgibWVtYmVyY2hpcCIpO25lPyhlLmhpZGRlbj0hMSxlLnRleHRDb250ZW50PWAke25lLnRpZXI/Lm5hbWU/PyJNZW1iZXIifSDCtyAke01hdGgucm91bmQoKG5lLnRpZXI/LmRpc2NvdW50Pz8wKSoxMDApfSUgb2ZmYCxlLnNldEF0dHJpYnV0ZSgiZGF0YS1hY3QiLCJtZW1iZXIiKSxlLnNldEF0dHJpYnV0ZSgidGl0bGUiLGAke25lLm5hbWV9IMK3ICR7bmUucHJvZ3JhbW1lfWApKTooZS5oaWRkZW49RGU9PT0ibWVtYmVyLW5vdC1mb3VuZCIsZS50ZXh0Q29udGVudD0iTWVtYmVyIHNpZ24gaW4iLGUuc2V0QXR0cmlidXRlKCJkYXRhLWFjdCIsImFzay1zaWduLWluIiksZS5yZW1vdmVBdHRyaWJ1dGUoInRpdGxlIikpfSxfeT0oKT0+e2NvbnN0IGU9Y2UoImhlYWR0cmlwIiksdD15Yz9xdDpxdHx8dXQubGVuZ3RoO2UuaGlkZGVuPXQ9PT0wfHxEZT09PSJ0cmlwIixjZSgiaGVhZHRyaXBuIikudGV4dENvbnRlbnQ9U3RyaW5nKHQpfSx5eT0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNpIiksdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY28iKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndSIpO0E9e2NoZWNrSW46ZT8udmFsdWU/P0EuY2hlY2tJbixjaGVja091dDp0Py52YWx1ZT8/QS5jaGVja091dCxndWVzdHM6TnVtYmVyKG4/LnZhbHVlPz9BLmd1ZXN0cyl8fDJ9fSxvbz0oZT17fSk9PkEuY2hlY2tJbiYmQS5jaGVja091dD97Y2hlY2tJbjpBLmNoZWNrSW4sY2hlY2tPdXQ6QS5jaGVja091dCxndWVzdHM6QS5ndWVzdHMsLi4uZX06ZTtsZXQgTHQ7Y29uc3QgemM9KGU9MCk9PntBdCYmKGNsZWFyVGltZW91dChMdCksTHQ9c2V0VGltZW91dCgoKT0+e0F0JiZYKCJnZXRIb3RlbCIse2hvdGVsOkF0LHJvb21zOnllLC4uLm9vKCl9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgdGhvc2UgbmlnaHRzLiIpKX0sZSkpfSxLPWU9PntjZSgiY29udGVudCIpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYDxkaXYgY2xhc3M9ImVyciI+JHtkKGUpfTwvZGl2PmApfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ/LmNsb3Nlc3QoIltkYXRhLWhvdGVsXSxbZGF0YS1hY3RdLFtkYXRhLXBvbGljeV0sW2RhdGEtY2FuY2VsXSxbZGF0YS1jb25maXJtLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jaGFuZ2VdLFtkYXRhLWV4dHJhc10sW2RhdGEtcm9vbXMtbl0sW2RhdGEtYXNrXSIpO2lmKCF0KXJldHVybjtjb25zdCBuPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFzayIpO2lmKG4hPT1udWxsKXtjb25zdCBnPXQuZ2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiKSE9PSJ0cnVlIjt0LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIixTdHJpbmcoZykpO2NvbnN0IF89b3lbbl07ZyYmXyYmZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmFza1tkYXRhLWFzaz0iJHtffSJdYCk/LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKTtyZXR1cm59Y29uc3Qgbz10LmdldEF0dHJpYnV0ZSgiZGF0YS1yb29tcy1uIik7aWYobyE9PW51bGwpe3l5KCkseWU9TWF0aC5taW4oTl8sTWF0aC5tYXgoMSx5ZStOdW1iZXIobykpKTtjb25zdCBnPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJybiIpO2cmJihnLnRleHRDb250ZW50PVN0cmluZyh5ZSkpO2NvbnN0IF89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO18mJihfLnRleHRDb250ZW50PSRjKCkpLHpjKDQ1MCk7cmV0dXJufWNvbnN0IHI9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWRkLXJvb20iKTtpZihyIT09bnVsbCl7Y29uc3QgZz10LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIixfPU51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpLHc9dC5oYXNBdHRyaWJ1dGUoImRhdGEtY2kiKT97Y2hlY2tJbjp0LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpPz8iIixjaGVja091dDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1jbyIpPz8iIixndWVzdHM6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLWd1Iik/PzIpfTpvbygpO1goImFkZFRvVHJpcCIse2hvdGVsOmcscm9vbTpyLHJvb21zOl8sLi4ud30pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3Qgcz10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtZXh0cmEiKTtpZihzIT09bnVsbCl7WCgiYWRkVG9UcmlwIix7aG90ZWw6dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsZXh0cmE6cyxxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgaT10LmdldEF0dHJpYnV0ZSgiZGF0YS1leHRyYXMiKTtpZihpIT09bnVsbCl7WCgibGlzdEV4dHJhcyIse2hvdGVsOmksLi4ub28oKX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgbG9hZCB0aGUgYWRkLW9ucy4iKSk7cmV0dXJufWNvbnN0IGE9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcG9saWN5Iik7aWYoYSE9PW51bGwpe1goInBvbGljaWVzIix7aG90ZWw6dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsdG9waWM6YX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgbG9hZCB0aGF0IHBvbGljeS4iKSk7cmV0dXJufWNvbnN0IGM9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2FuY2VsIik7aWYoYyE9PW51bGwpe1goInByZXZpZXdDYW5jZWxsYXRpb24iLHtib29raW5nOmN9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IHdvcmsgb3V0IHRoZSBmZWUuIikpO3JldHVybn1jb25zdCB1PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2FuY2VsIik7aWYodSE9PW51bGwpe1goImNhbmNlbEJvb2tpbmciLHtib29raW5nOnUsY29uZmlybWVkOiEwfSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBjYW5jZWwgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3QgbD10LmdldEF0dHJpYnV0ZSgiZGF0YS1jb25maXJtLWNoYW5nZSIpO2lmKGwhPT1udWxsKXtjb25zdCBnPSRlPy50bz8/e30sXz0kZT8uZnJvbT8/e30sdz1nLnN0YXk/P2c7WCgiY2hhbmdlQm9va2luZyIse2Jvb2tpbmc6bCxjb25maXJtZWQ6ITAsLi4udy5jaGVja0luP3tjaGVja0luOncuY2hlY2tJbixjaGVja091dDp3LmNoZWNrT3V0fTp7fSwuLi5nLnJvb21zIT09dm9pZCAwJiZOdW1iZXIoZy5yb29tcykhPT1OdW1iZXIoXy5yb29tcyk/e3Jvb21zOk51bWJlcihnLnJvb21zKX06e30sLi4uZy5yb29tTmFtZSYmZy5yb29tTmFtZSE9PV8ucm9vbU5hbWU/e3Jvb206Zy5yb29tTmFtZX06e319KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGNoYW5nZSB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCBtPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFjdCIpO2lmKG09PT0iYmFjayIpe2NvbnN0IGc9U2UuYXQoLTEpO2lmKCFnfHx3YylyZXR1cm47U2U9U2Uuc2xpY2UoMCwtMSksbW8rPTEsY2xlYXJUaW1lb3V0KEx0KTtjb25zdCBfPWcudmVyc2lvbj09PWhvP3ZvaWQgMDpNXyhnLnBheWxvYWQpO18/KCRlPWcucGF5bG9hZCxYKF8ua2V5LF8uYXJncyx7cHVzaDohMX0pLmNhdGNoKCgpPT5ldChnLnBheWxvYWQpKSk6ZXQoZy5wYXlsb2FkKTtyZXR1cm59aWYobT09PSJob21lIil7WCgibGlzdEhvdGVscyIse30pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYobT09PSJtZW1iZXIiKXtpZighbmUpcmV0dXJuO2NvbnN0IGc9e3ZpZXc6Im1lbWJlciIsbWVtYmVyOm5lfTtucyhnKSxldChnKTtyZXR1cm59aWYobT09PSJhc2stc2lnbi1pbiIpe2NvbnN0IGc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNpZ25pbiIpO2lmKGcpZy5oaWRkZW49ITE7ZWxzZXtjb25zdCBfPXt2aWV3OiJtZW1iZXItc2lnbi1pbiJ9O25zKF8pLGV0KF8pfWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LmZvY3VzKCk7cmV0dXJufWlmKG09PT0ic2lnbi1pbiIpe2NvbnN0IGc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1udW0iKT8udmFsdWUudHJpbSgpPz8iIixfPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtc3VyIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIWd8fCFfKXtLKCJCb3RoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgb24gaXQsIHBsZWFzZS4iKTtyZXR1cm59WCgic2lnbkluIix7bnVtYmVyOmcsc3VybmFtZTpffSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBzaWduIGluLiIpKTtyZXR1cm59aWYobT09PSJzaWduLW91dCIpe25lPW51bGwsWCgic2lnbk91dCIse30pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3Qgc2lnbiBvdXQuIikpO3JldHVybn1pZihtPT09ImFzay1ib29rIil7Y29uc3QgZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3Vlc3QiKTtnJiYoZy5oaWRkZW49ITEpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbmFtZSIpPy5mb2N1cygpO3JldHVybn1pZihtPT09ImJvb2siKXtjb25zdCBnPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbmFtZSIpPy52YWx1ZS50cmltKCk/PyIiLF89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdtYWlsIik/LnZhbHVlLnRyaW0oKT8/IiIsdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25vdGUiKT8udmFsdWUudHJpbSgpPz8iIixTPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndGltZSIpPy52YWx1ZS50cmltKCk/PyIiLE89Wy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hc2tbYXJpYS1wcmVzc2VkPSJ0cnVlIl0nKV0ubWFwKEU9PkUuZGF0YXNldC5hc2s/PyIiKTtpZihMZT17bmFtZTpnLGVtYWlsOl8sbm90ZXM6dyxhcnJpdmluZ0F0OlMscmVxdWVzdHM6T30sIWd8fCFfLmluY2x1ZGVzKCJAIikpe0soZz8nVGhhdCBlbWFpbCBoYXMgbm8gIkAiIGluIGl0IC0gdGhlIGNvbmZpcm1hdGlvbiBuZWVkcyBhbiBhZGRyZXNzIGl0IGNhbiByZWFjaC4nOiJUaGUgYm9va2luZyBuZWVkcyBhIG5hbWUgYW5kIGFuIGVtYWlsIHRvIHNlbmQgdGhlIGNvbmZpcm1hdGlvbiB0by4iKTtyZXR1cm59WCgicmVxdWVzdEJvb2tpbmciLHtuYW1lOmcsZW1haWw6XywuLi53P3tub3Rlczp3fTp7fSwuLi5TP3thcnJpdmluZ0F0OlN9Ont9LC4uLk8ubGVuZ3RoP3tyZXF1ZXN0czpPfTp7fX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgYXNrIGZvciB0aG9zZSByb29tcy4iKSk7cmV0dXJufWlmKG09PT0iYm9va2luZ3MiKXtYKCJsaXN0Qm9va2luZ3MiLHt9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgeW91ciBib29raW5ncy4iKSk7cmV0dXJufWlmKG09PT0idHJpcCIpe1goInZpZXdUcmlwIix7fSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBsb2FkIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgYj10LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpO2lmKGIpe2NvbnN0IGc9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2kiKSxfPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvIik7ZyYmXyYmKEEuY2hlY2tJbj1nLEEuY2hlY2tPdXQ9XyksWCgiZ2V0SG90ZWwiLHtob3RlbDpiLC4uLm9vKCl9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgdGhhdCBob3RlbC4iKSl9fSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ7IXR8fHQuZ2V0QXR0cmlidXRlKCJyb2xlIikhPT0iYnV0dG9uInx8ZS5rZXkhPT0iRW50ZXIiJiZlLmtleSE9PSIgInx8KGUucHJldmVudERlZmF1bHQoKSx0LmNsaWNrKCkpfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixlPT57Y29uc3QgdD1lLnRhcmdldDtpZih0Py5pZCE9PSJjaSImJnQ/LmlkIT09ImNvIilyZXR1cm47Y29uc3Qgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSxvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpO2lmKCFufHwhbylyZXR1cm47aWYodC5pZD09PSJjaSImJm4udmFsdWUpe2NvbnN0IHM9aXMobi52YWx1ZSwxKTtvLm1pbj1zLCghby52YWx1ZXx8by52YWx1ZTw9bi52YWx1ZSkmJihvLnZhbHVlPXMpfUEuY2hlY2tJbj1uLnZhbHVlfHxBLmNoZWNrSW4sQS5jaGVja091dD1vLnZhbHVlfHxBLmNoZWNrT3V0O2NvbnN0IHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO3ImJihyLnRleHRDb250ZW50PSRjKCkpLHpjKCl9KTtjb25zdCB0aD0oZSx0KT0+e3RyeXtpZihHZih0KSxlJiZycyYmSlNPTi5zdHJpbmdpZnkoZSk9PT1ycylyZXR1cm47U2U9W10sbW8rPTEsY2xlYXJUaW1lb3V0KEx0KSxldChlKX1jYXRjaChuKXtjb25zb2xlLmVycm9yKCJbY2FyZF0gcmVuZGVyIGZhaWxlZCIsbiksY2UoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGlzIGNhcmQgY291bGQgbm90IGJlIGRyYXduLiBBc2sgYWdhaW4gaW4gdGhlIGNoYXQuPC9kaXY+J319O0plLm9udG9vbHJlc3VsdD1lPT50aChlPy5zdHJ1Y3R1cmVkQ29udGVudCxlPy5fbWV0YSk7SmUub25ob3N0Y29udGV4dGNoYW5nZWQ9ZT0+QmYoZSxWZik7SmUuY29ubmVjdCgpLnRoZW4oKCk9Pntjb25zdCBlPUplLmdldEhvc3RDb250ZXh0KCk7QmYoZSxWZik7Y29uc3QgdD1lPy50b29sSW5mbz8ucmVzdWx0Py5zdHJ1Y3R1cmVkQ29udGVudDt0JiZ0aCh0LGU/LnRvb2xJbmZvPy5yZXN1bHQ/Ll9tZXRhKX0pLmNhdGNoKCgpPT57Y2UoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5Db3VsZCBub3QgY29ubmVjdCB0byB0aGUgaG9zdC48L2Rpdj4nfSk7PC9zY3JpcHQ+CiAgICA8c3R5bGUgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbj46cm9vdHstLWtpdC1iZzogI2ZmZmZmZjstLWtpdC1iZy1zb2Z0OiAjZjZmN2Y5Oy0ta2l0LWZnOiAjMWExZjJiOy0ta2l0LWZnLXNvZnQ6ICM2MjZiN2E7LS1raXQtZmctZmFpbnQ6ICM4YTkzYTE7LS1raXQtbGluZTogI2UzZTdlZDstLWtpdC1hY2NlbnQ6ICMxYTFmMmI7LS1raXQtYWNjZW50LWZnOiAjZmZmZmZmOy0ta2l0LWxpbms6ICMyNTYzZWI7LS1raXQtZ29vZDogIzFhN2Y1YTstLWtpdC1nb29kLWJnOiAjZGRmM2U0Oy0ta2l0LWJhZDogI2IzMjYxZTstLWtpdC1iYWQtYmc6ICNmYmU2ZTQ7LS1raXQtd2FybjogIzhhNWEwMDstLWtpdC13YXJuLWJnOiAjZmRmMGQ1Oy0ta2l0LXJpbmc6ICMyNTYzZWJ9W2RhdGEtdGhlbWU9ZGFya117LS1raXQtYmc6ICMxZDFmMjM7LS1raXQtYmctc29mdDogIzI2MjkyZTstLWtpdC1mZzogI2VjZWVmMTstLWtpdC1mZy1zb2Z0OiAjYTRhYmI2Oy0ta2l0LWZnLWZhaW50OiAjN2M4NDkxOy0ta2l0LWxpbmU6ICMzNjNhNDE7LS1raXQtYWNjZW50OiAjZWNlZWYxOy0ta2l0LWFjY2VudC1mZzogIzFkMWYyMzstLWtpdC1saW5rOiAjN2FhN2ZmOy0ta2l0LWdvb2Q6ICM2ZmQzYTI7LS1raXQtZ29vZC1iZzogIzFmM2EyZDstLWtpdC1iYWQ6ICNmZjhhODA7LS1raXQtYmFkLWJnOiAjM2QyMzIyOy0ta2l0LXdhcm46ICNmMmM0NmI7LS1raXQtd2Fybi1iZzogIzNhMzAyMDstLWtpdC1yaW5nOiAjN2FhN2ZmfTpyb290ey0tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtcHJpbWFyeSwgdmFyKC0ta2l0LWJnKSk7LS1iZy1zb2Z0OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSwgdmFyKC0ta2l0LWJnLXNvZnQpKTstLWZnOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnksIHZhcigtLWtpdC1mZykpOy0tZmctc29mdDogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnksIHZhcigtLWtpdC1mZy1zb2Z0KSk7LS1mZy1mYWludDogdmFyKC0tY29sb3ItdGV4dC10ZXJ0aWFyeSwgdmFyKC0ta2l0LWZnLWZhaW50KSk7LS1saW5lOiB2YXIoLS1jb2xvci1ib3JkZXItcHJpbWFyeSwgdmFyKC0ta2l0LWxpbmUpKTstLWFjY2VudDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50KSk7LS1hY2NlbnQtZmc6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudC1mZykpOy0tbGluazogdmFyKC0tY29sb3ItdGV4dC1pbmZvLCB2YXIoLS1raXQtbGluaykpOy0tZ29vZDogdmFyKC0tY29sb3ItdGV4dC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZCkpOy0tZ29vZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZC1iZykpOy0tYmFkOiB2YXIoLS1jb2xvci10ZXh0LWRhbmdlciwgdmFyKC0ta2l0LWJhZCkpOy0tYmFkLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWRhbmdlciwgdmFyKC0ta2l0LWJhZC1iZykpOy0td2FybjogdmFyKC0tY29sb3ItdGV4dC13YXJuaW5nLCB2YXIoLS1raXQtd2FybikpOy0td2Fybi1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nLCB2YXIoLS1raXQtd2Fybi1iZykpOy0tcmluZzogdmFyKC0tY29sb3ItcmluZy1wcmltYXJ5LCB2YXIoLS1raXQtcmluZykpOy0tcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxnLCAxNHB4KTstLXJhZGl1cy1zbTogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbSwgOXB4KTstLWZvbnQ6IHZhcigtLWZvbnQtc2Fucywgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCAiU2Vnb2UgVUkiLCBSb2JvdG8sIHNhbnMtc2VyaWYpOy0tbW9ubzogdmFyKC0tZm9udC1tb25vLCB1aS1tb25vc3BhY2UsICJTRiBNb25vIiwgTWVubG8sIG1vbm9zcGFjZSk7LS1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbSwgMCAxcHggMnB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSwgMCAycHggNXB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSl9Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9Ym9keXttYXJnaW46MDtmb250LWZhbWlseTp2YXIoLS1mb250KTtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp0cmFuc3BhcmVudDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfS5jYXJke2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JveC1zaGFkb3c6dmFyKC0tc2hhZG93KTttYXgtd2lkdGg6NTYwcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctbGVmdDp2YXIoLS1pbnNldC1sZWZ0LCAwcHgpO3BhZGRpbmctcmlnaHQ6dmFyKC0taW5zZXQtcmlnaHQsIDBweCl9LmhlYWR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O3BhZGRpbmc6MTRweCAxOHB4IDB9LmhlYWQgLnRpdGxle2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmhlYWQgLnRpdGxlW2hpZGRlbl17ZGlzcGxheTpub25lfSNjb250ZW50e3BhZGRpbmc6MTBweCAxOHB4IDE4cHh9LnJlZnJlc2h7bWFyZ2luLWxlZnQ6OHB4O2FsaWduLXNlbGY6Y2VudGVyO2ZsZXg6bm9uZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7cGFkZGluZzowO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTJzLGNvbG9yIC4xMnN9LnJlZnJlc2g6aG92ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmVmcmVzaDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi42fS5yZWZyZXNoW2hpZGRlbl17ZGlzcGxheTpub25lfS5yZWZyZXNoIHN2Z3t3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2Rpc3BsYXk6YmxvY2t9LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOmtpdC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBraXQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5lbXB0eXtwYWRkaW5nOjE4cHggMDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweH0uaGludHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWFsaWduOmNlbnRlcn0ubm90ZXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmc6MCAwIDEwcHh9Lm1vbm97Zm9udC1mYW1pbHk6dmFyKC0tbW9ubyk7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1mYWludCl9LmJhZGdle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5iYWRnZS5va3tjb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5iYWRnZS53YXJuLC5iYWRnZS50b2Rve2NvbG9yOnZhcigtLXdhcm4pO2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyl9LmJhZGdlLmVycntjb2xvcjp2YXIoLS1iYWQpO2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKX0uYnV5e21hcmdpbi10b3A6MTRweDt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6NDRweDtwYWRkaW5nOjExcHggMTRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWFjY2VudCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY1MDtjdXJzb3I6cG9pbnRlcn0uYnV5OmRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLWNvbG9yOnZhcigtLWxpbmUpO2NvbG9yOnZhcigtLWZnLWZhaW50KTtjdXJzb3I6ZGVmYXVsdH0uYnV5LmFsdCwuZ2hvc3R7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKX0uZ2hvc3R7ZmxleDoxO21pbi1oZWlnaHQ6NDBweDtwYWRkaW5nOjlweCAxMHB4O2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcn0ubGlua3tib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzo2cHggMCAwO2NvbG9yOnZhcigtLWxpbmspO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxMi41cHg7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0ucXR5e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweH0ucXR5IGJ1dHRvbnt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTdweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5xdHkgc3BhbnttaW4td2lkdGg6MjZweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MH1idXR0b246Zm9jdXMtdmlzaWJsZSxhOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tcmluZyk7b3V0bGluZS1vZmZzZXQ6MnB4fUBtZWRpYShtYXgtd2lkdGg6NDMwcHgpey5jYXJke2JvcmRlci1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0uaGVhZHtwYWRkaW5nOjEycHggMTRweCAwfSNjb250ZW50e3BhZGRpbmc6OHB4IDE0cHggMTRweH0uYnV5e21pbi1oZWlnaHQ6NDhweDtmb250LXNpemU6MTVweH0uZ2hvc3R7bWluLWhlaWdodDo0NHB4O2ZvbnQtc2l6ZToxMy41cHh9LnF0eSBidXR0b257d2lkdGg6NDJweDtoZWlnaHQ6NDJweDtmb250LXNpemU6MTlweH0ucmVmcmVzaHt3aWR0aDozNHB4O2hlaWdodDozNHB4fS5oaW50LC5ub3RlLC5lbXB0eXtmb250LXNpemU6MTNweH19QG1lZGlhKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246bm9uZX0qe3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9fVtoaWRkZW5de2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9I2NvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTJweH0uaGVhZHttaW4taGVpZ2h0OjI4cHh9LmhvbWV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO21hcmdpbjowO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO21pbi13aWR0aDowfS5ob21lOmhvdmVye29wYWNpdHk6LjcyfS5oZWFkIC5icmFuZHttYXgtaGVpZ2h0OjM0cHg7bWF4LXdpZHRoOjE1MHB4O29iamVjdC1maXQ6Y29udGFpbn0uaGVhZCAudGl0bGV7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxNXB4O2xldHRlci1zcGFjaW5nOi0uMDFlbX0uYmFja2J0bntib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTFweCA0cHggOHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwO21heC13aWR0aDo0MiU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Y3Vyc29yOnBvaW50ZXJ9LmJhY2tidG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZyl9LmhlYWQgLnN1Yntjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4O21hcmdpbi1pbmxpbmUtc3RhcnQ6YXV0bzt0ZXh0LWFsaWduOmVuZH0uaGVhZHRyaXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NXB4IDExcHggNXB4IDlweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXJ9LmhlYWR0cmlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LmhlYWQgLnN1YisuaGVhZHRyaXB7bWFyZ2luLWlubGluZS1zdGFydDowfS5jYXJkLmJ1c3l7b3BhY2l0eTouNjJ9LmNhcmQuYnVzeSBidXR0b24sLmNhcmQuYnVzeSBpbnB1dCwuY2FyZC5idXN5IHNlbGVjdHtwb2ludGVyLWV2ZW50czpub25lfS5tZW1iZXJjaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYyMDt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXJ9Lm1lbWJlcmNoaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubGlua3l7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6MDtmb250OmluaGVyaXQ7Y29sb3I6dmFyKC0tbGluayk7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcn0ucC13YXN7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS5wLW1lbWJlcntmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5zdW0uZ29vZCBzcGFuOmxhc3QtY2hpbGR7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uZGVtb3tkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybik7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS40NX0uZGVtbyBie2ZvbnQtd2VpZ2h0OjcwMH0uY2l0eWdyb3VwKy5jaXR5Z3JvdXB7bWFyZ2luLXRvcDoxNHB4fS5jaXR5bmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi1ib3R0b206OHB4fS5jaXR5bmFtZSBzbWFsbHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDA7b3BhY2l0eTouNzV9LnRpbGVze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTk2cHgsMWZyKSk7Z2FwOjEwcHh9LnRpbGV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDp2YXIoLS1iZyk7dGV4dC1hbGlnbjpzdGFydDtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjB9LnRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLWZhaW50KX0udC1zaG90e3Bvc2l0aW9uOnJlbGF0aXZlO2FzcGVjdC1yYXRpbzoxNiAvIDEwO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0udC1zaG90IGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0udC1tYXJre2ZvbnQtc2l6ZTozMHB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDRlbTtvcGFjaXR5Oi45Mjt0ZXh0LXNoYWRvdzowIDFweCAxMnB4IHJnYigwIDAgMCAvIDIyJSk7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowfS50LXNob3QgaW1nLC5oZXJvIGltZ3t6LWluZGV4OjF9LnQtYnJhbmR7ei1pbmRleDoyO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0LWJsb2NrLXN0YXJ0OjhweDtpbnNldC1pbmxpbmUtc3RhcnQ6OHB4O2JhY2tncm91bmQ6IzAwMDAwMDYxO2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAyZW19LnQtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7cGFkZGluZzoxMHB4IDExcHggMTFweH0udC1uYW1le2ZvbnQtd2VpZ2h0OjY0MDtmb250LXNpemU6MTMuNXB4O2xpbmUtaGVpZ2h0OjEuMztkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDoyO2xpbmUtY2xhbXA6Mjstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVuO21pbi1oZWlnaHQ6Mi42ZW19LnQtd2hlcmV7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnQtZm9vdHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjhweDttYXJnaW4tdG9wOjJweH0udC1mcm9te2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY1MH0udC1mcm9tIHNtYWxse2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTFweH0ucmF0ZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6M3B4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yYXRlIHN2Z3tjb2xvcjojZThhMzNkfS5oZXJve3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YXNwZWN0LXJhdGlvOjIxIC8gODtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9Lmhlcm8gLnQtbWFya3tmb250LXNpemU6NDBweH0uaC1uYW1le2ZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjY4MDtsZXR0ZXItc3BhY2luZzotLjAxNWVtO2xpbmUtaGVpZ2h0OjEuMjV9Lmgtd2hlcmV7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweH0uaC1zdW17Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS41NTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcHN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDlweDtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5zdGF5e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDExMnB4LDFmcikgbWlubWF4KDExMnB4LDFmcikgYXV0byAxZnI7Z2FwOjhweDthbGlnbi1pdGVtczplbmQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5zdGF5IGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdGF5IGlucHV0LC5zdGF5IHNlbGVjdHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo3cHggNnB4O21pbi13aWR0aDowO3dpZHRoOjEwMCV9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lm5pZ2h0c3tmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwYWRkaW5nLWJvdHRvbTo4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5zdGF5IC5nb3t3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5cHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY1MDtmb250LXNpemU6MTNweDtwYWRkaW5nOjhweCAxNHB4O2N1cnNvcjpwb2ludGVyfS5zdGF5IC5nb1tkaXNhYmxlZF17b3BhY2l0eTouNTtjdXJzb3I6ZGVmYXVsdH0uZmxleC1kYXRlc3tkaXNwbGF5OmZsZXg7Z2FwOjZweDtvdmVyZmxvdy14OmF1dG87cGFkZGluZzoycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW47LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmZke2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4O21pbi13aWR0aDo3OHB4O3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQ6aW5oZXJpdDt0ZXh0LWFsaWduOmxlZnQ7Y3Vyc29yOnBvaW50ZXJ9LmZkOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5mZC1kYXl7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtO2NvbG9yOnZhcigtLWZnLXNvZnQpO3doaXRlLXNwYWNlOm5vd3JhcH0uZmQtcHJpY2V7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2NTA7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZmQub257YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Y3Vyc29yOmRlZmF1bHR9LmZkLm9uIC5mZC1kYXl7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtvcGFjaXR5Oi44NX0uZmQuYmVzdHtib3JkZXItY29sb3I6dmFyKC0tZ29vZCk7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKX0uZmQuYmVzdCAuZmQtcHJpY2UsLmZkLmJlc3QgLmZkLWRheXtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5mZC5vdXQgLmZkLXByaWNle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtd2VpZ2h0OjUwMH0udGh1bWJ7Z3JpZC1hcmVhOnRodW1iO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czoxMHB4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wM2VtO2ZsZXg6MCAwIGF1dG99LnRodW1iIGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0ubGVnc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmxlZ3tib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjlweCAxMXB4fS5sZWcud2Fze29wYWNpdHk6LjcyfS5sZWcud2FzIC5sZWd2e3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LmxlZ2t7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubGVndntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NDA7bWFyZ2luLXRvcDoycHh9LmxlZ217Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tdG9wOjJweH0ucm93c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LnJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBwcmljZSBhY3Rpb24iO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHggMTFweH0ucm93LndpdGh0aHVtYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgcHJpY2UgYWN0aW9uIn0ucm93IC5ib2R5e2dyaWQtYXJlYTpib2R5O21pbi13aWR0aDowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweH0ucm93IC5uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucm93IC5tZXRhe2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS40O2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjM7bGluZS1jbGFtcDozOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW59LnJvdyAucHJpY2V7Z3JpZC1hcmVhOnByaWNlO3RleHQtYWxpZ246ZW5kO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucm93IC5wLXRvdGFse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjYwfS5yb3cgLnAtdW5pdHtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucm93IC5hY3Rpb257Z3JpZC1hcmVhOmFjdGlvbn0uYmFkZ2Vze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NXB4O21hcmdpbi10b3A6MnB4fS5iYWRnZXtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6MnB4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5iYWRnZS5nb29ke2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uYmFkZ2Uud2FybntiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pfS5iYWRnZS5iYWR7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCl9LmFkZHtkaXNwbGF5OmlubGluZS1ncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDozOHB4O2hlaWdodDozOHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0fS5hZGQ6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmFkZFtkaXNhYmxlZF17b3BhY2l0eTouNDtjdXJzb3I6ZGVmYXVsdH0uc3RlcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHh9LnN0ZXAgYnV0dG9ue3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnN0ZXAgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6I2ZmZmZmZjJlfS5zdGVwIC5ue21pbi13aWR0aDoxOHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRheXtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luOjEycHggMCA2cHh9LnN1bXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NXB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWxpbmUpO21hcmdpbi10b3A6MTJweDtwYWRkaW5nLXRvcDoxMHB4O2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uc3Vte2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdW0udG90YWx7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZm9vdHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXRvcDoxMnB4fS5nb3tmbGV4OjE7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czoxMXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2ODA7Zm9udC1zaXplOjE0cHg7cGFkZGluZzoxMnB4IDE2cHg7Y3Vyc29yOnBvaW50ZXJ9LmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41NTtjdXJzb3I6ZGVmYXVsdH0uZ28ucXVpZXR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo2MjB9LmdvLmRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWJhZCk7Y29sb3I6dmFyKC0tYmcpfS5ub3Rle2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS41fS5mb3Jte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjExcHg7bWFyZ2luLXRvcDoxMHB4fS5mb3JtIGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5mb3JtIGlucHV0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjhweCA5cHh9LmZvcm0gLnR3b3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjhweH0uY29uZntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YWxpZ24taXRlbXM6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O3BhZGRpbmc6MTZweCAxMnB4fS5jb25mIC5jb2Rle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjcyMDtsZXR0ZXItc3BhY2luZzouMDZlbTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNvbmYgLndoZXJle2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwfS5jb25mIC53aGVue2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnVucGFpZHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9LnVucGFpZCBie2ZvbnQtd2VpZ2h0OjcyMH0ud2Fybm5vdGV7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzo5cHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udGlsZS5vdmVye29wYWNpdHk6LjgyfS5hc2tlZC1saW5le2ZvbnQtc3R5bGU6aXRhbGljfS5hc2tlZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uYXNrZWQgYntmb250LXdlaWdodDo3MjA7Y29sb3I6dmFyKC0tZmcpfS5hc2tlZC5mbGFne2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLXdhcm4pfS5hc2tlZC5mbGFnIGJ7Y29sb3I6dmFyKC0td2Fybil9LmFza3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5hc2tzLXR7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcC5hc2t7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMS41cHh9LmNoaXAuYXNrW2FyaWEtcHJlc3NlZD10cnVlXXtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKX0ubW9uZXktb3V0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5wcm9zZXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjY7Y29sb3I6dmFyKC0tZmctc29mdCk7d2hpdGUtc3BhY2U6cHJlLXdyYXB9LnByb3NlIGg0e21hcmdpbjoxNHB4IDAgNHB4O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZW1wdHl7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHg7cGFkZGluZzoxOHB4IDRweDt0ZXh0LWFsaWduOmNlbnRlcn0uZXJye2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKTtjb2xvcjp2YXIoLS1iYWQpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LnRpbGVze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNTBweCwxZnIpKTtnYXA6OHB4fS50LW1hcmt7Zm9udC1zaXplOjI0cHh9LnN0YXl7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnJ9LnN0YXkgLmd1ZXN0c3tncmlkLWNvbHVtbjoxfS5zdGVwLmxpZ2h0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MnB4fS5zdGVwLmxpZ2h0IGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5zdGF5IC5nb3tncmlkLWNvbHVtbjoyO3dpZHRoOjEwMCV9LnJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBhY3Rpb24iICJwcmljZSBhY3Rpb24iO3Jvdy1nYXA6NnB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgYWN0aW9uIiAidGh1bWIgcHJpY2UgYWN0aW9uIn0ucm93LndpdGh0aHVtYiAudGh1bWJ7d2lkdGg6NDhweDtoZWlnaHQ6NDhweDthbGlnbi1zZWxmOnN0YXJ0fS5yb3cgLnByaWNle3RleHQtYWxpZ246c3RhcnR9LmZvcm0gLnR3b3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfX0uY21wLXdyYXB7b3ZlcmZsb3cteDphdXRvO21hcmdpbi1pbmxpbmU6LTJweDtwYWRkaW5nOjJweH0uY21we2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDc2cHgsOTZweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMTJweCwxZnIpKTthbGlnbi1pdGVtczpzdHJldGNoO2NvbHVtbi1nYXA6OHB4fS5jbXAtY29ybmVye2dyaWQtY29sdW1uOjF9LmNtcC1oZWFke2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO21pbi13aWR0aDowfS5jbXAtaGVhZC5waWNre2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLWFjY2VudCl9LmNtcC1oZWFkIC50LXNob3R7YXNwZWN0LXJhdGlvOjE2IC8gOTtib3JkZXI6MDtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTAwJX0uY29sLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4O3BhZGRpbmc6MTBweCAxMXB4IDEycHh9LmNvbC1uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uY29sLXByaWNle2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNvbC1wcmljZSBzbWFsbHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCl9LndoeXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtmb250LXN0eWxlOml0YWxpYztjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItaW5saW5lLXN0YXJ0OjJweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nLWlubGluZS1zdGFydDo4cHh9LnBje2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweDtmb250LXNpemU6MTEuNXB4O2xpbmUtaGVpZ2h0OjEuNDV9LnBjIGRpdntkaXNwbGF5OmZsZXg7Z2FwOjVweH0ucGMgLm17ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo3MDB9LnBjIC5wcm8gLm17Y29sb3I6dmFyKC0tZ29vZCl9LnBjIC5jb24gLm17Y29sb3I6dmFyKC0tZmctc29mdCl9LmNtcCAuaywuY21wIC52e2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NTtwYWRkaW5nOjZweCA4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY21wIC5re2dyaWQtY29sdW1uOjE7Y29sb3I6dmFyKC0tZmctc29mdCk7cG9zaXRpb246c3RpY2t5O2luc2V0LWlubGluZS1zdGFydDowO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5jbXAgLnZ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jbXAgLnYuYWx0LC5jbXAgLms6aGFzKCsudi5hbHQpe2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czo2cHh9LnBpY2ttYXJre2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtwYWRkaW5nOjNweCA4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmRheXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fS5kYXlyb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoyOHB4IDFmcjtnYXA6MTBweH0uZGF5bnVte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo0cHh9LmRheW51bSBie2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5bnVtIGl7ZmxleDoxO3dpZHRoOjFweDtiYWNrZ3JvdW5kOnZhcigtLWxpbmUpfS5kYXlyb3c6bGFzdC1jaGlsZCAuZGF5bnVtIGl7ZGlzcGxheTpub25lfS5kYXlib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweDtwYWRkaW5nLWJvdHRvbToxNHB4O21pbi13aWR0aDowfS5kYXlsYWJlbHtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LmRheW5vdGV7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LnBsYW4taXRlbXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OHB4IDEwcHh9LnBsYW4taXRlbSAubmFtZXtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtsaW5lLWhlaWdodDoxLjN9LnBsYW4taXRlbSAubWV0YXtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uaW5zdGF0ZXtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDhweDt3aGl0ZS1zcGFjZTpub3dyYXB9Lmluc3RhdGUueWVze2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uaW5zdGF0ZS5ub3tiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5nYXB7ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZ2FwIGJ7Y29sb3I6dmFyKC0tZmcpO2ZvbnQtd2VpZ2h0OjcwMH1AbWVkaWEobWF4LXdpZHRoOjQ2MHB4KXsuY21we2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNjhweCw4NHB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDEwOHB4LDFmcikpfX08L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkIj4KICAgICAgICA8IS0tIFRoZSBncm91cCdzIHdvcmRtYXJrIGFycml2ZXMgV0lUSCBUSEUgREFUQSBhcyBgbG9nb1VybGAuIE5vdGhpbmcgaXMKICAgICAgICAgICAgIGJha2VkIGluIGhlcmU6IGEgbG9nbyBjb21waWxlZCBpbnRvIHRoZSBjYXJkIGlzIHRoZSBmaXJzdCBicmFuZCdzLAogICAgICAgICAgICAgYW5kIGV2ZXJ5IGhvdGVsIGdyb3VwIGFmdGVyIHRoZW0gd291bGQgd2VhciBpdC4gLS0+CiAgICAgICAgPCEtLSBUaGUgd2F5IGJhY2ssIG9uIGV2ZXJ5IHZpZXcuIFdpdGhvdXQgaXQgdGhlIHRyaXAsIHRoZSBib29raW5ncyBsaXN0CiAgICAgICAgICAgICBhbmQgYSBjYW5jZWxsZWQgYm9va2luZyBhcmUgYWxsIHBsYWNlcyBhIGd1ZXN0IGNhbiByZWFjaCBhbmQgbm90CiAgICAgICAgICAgICBsZWF2ZSAocm9iaW4sIDIwMjYtMDktMTgpLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJob21lIiBpZD0iaG9tZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSIgYXJpYS1sYWJlbD0iQmFjayB0byB0aGUgaG90ZWxzIj4KICAgICAgICAgIDxpbWcgY2xhc3M9ImJyYW5kIiBpZD0iYnJhbmQiIGFsdD0iIiBoaWRkZW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGl0bGUiIGlkPSJ0aXRsZSI+PC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwhLS0gT25lIHN0ZXAgYmFjayBJTlNJREUgdGhlIGNhcmQuIFRoZSBicmFuZCBhYm92ZSBnb2VzIGhvbWUsIHdoaWNoIGlzIGEKICAgICAgICAgICAgIGRpZmZlcmVudCBhbnN3ZXI7IHRoaXMgY29tZXMgYmFjayB0byB0aGUgb25lIHRoZXkgd2VyZSByZWFkaW5nIC0gdGhlCiAgICAgICAgICAgICB0aHJlZSBob3RlbHMgdGhleSB3ZXJlIGNvbXBhcmluZyB3aGVuIHRoZXkgdGFwcGVkIG9uZSAocm9iaW4sCiAgICAgICAgICAgICAyMDI2LTA5LTIxKS4gSGlkZGVuIHVubGVzcyB0aGVyZSBpcyBzb21ld2hlcmUgdG8gZ28gYmFjayB0bywgYW5kCiAgICAgICAgICAgICBjbGVhcmVkIHdoZW5ldmVyIHRoZSBjb252ZXJzYXRpb24gc2VuZHMgYSBuZXcgYW5zd2VyLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJiYWNrYnRuIiBpZD0iYmFja2J0biIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYmFjayIgaGlkZGVuPjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJzdWIiIGlkPSJzdWIiPjwvc3Bhbj4KICAgICAgICA8IS0tIFRoZSB0aWVyLCBvciB0aGUgd2F5IGluLiBBIG1lbWJlciByYXRlIGlzIGEgZmFjdCBhYm91dCBldmVyeSBwcmljZQogICAgICAgICAgICAgb24gdGhlIGNhcmQsIHNvIGl0IGJlbG9uZ3MgaW4gdGhlIGhlYWRlciByYXRoZXIgdGhhbiBvbiBvbmUgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVtYmVyY2hpcCIgaWQ9Im1lbWJlcmNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj48L2J1dHRvbj4KICAgICAgICA8IS0tIFRoZSB0cmlwLCBmcm9tIHRoZSB0b3AuIFRoZSBzaG9wcGluZyBjYXJkIGxlYXJuZWQgb24gMjAyNi0wOS0xNyB0aGF0CiAgICAgICAgICAgICBhIGZvb3Rlci1vbmx5IGNhcnQgbWVhbnMgc2Nyb2xsaW5nIHBhc3QgdHdlbnR5IHRpbGVzIHRvIHJlYWNoIGl0LgogICAgICAgICAgICAgU2hvd24gb25jZSB0aGUgdHJpcCBoYXMgc29tZXRoaW5nIGluIGl0LCBoaWRkZW4gb24gdGhlIHRyaXAgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaGVhZHRyaXAiIGlkPSJoZWFkdHJpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCIgaGlkZGVuIGFyaWEtbGFiZWw9IlZpZXcgdGhlIHRyaXAiPgogICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiCiAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00IDguNWgxNnYxMWExLjUgMS41IDAgMCAxLTEuNSAxLjVoLTEzQTEuNSAxLjUgMCAwIDEgNCAxOS41eiIgLz4KICAgICAgICAgICAgPHBhdGggZD0iTTkgOC41VjZhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2Mi41IiAvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgICA8c3BhbiBpZD0iaGVhZHRyaXBuIj4wPC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY29udGVudCI+PGRpdiBjbGFzcz0iZW1wdHkiPkxvYWRpbmfigKY8L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogIDwvYm9keT4KPC9odG1sPgo=', 'base64').toString('utf8');
5
+ export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgYWg9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLGNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxDYz17fSx1aD1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKG09PlByb21pc2UucmVzb2x2ZShtKS50aGVuKHY9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOnZ9KSx2PT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjp2fSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxjPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLHU9Yz8ubm9uY2V8fGM/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAoZD0+e2lmKGQ9Y2goZCxvKSxkIGluIENjKXJldHVybjtDY1tkXT0hMDtjb25zdCBtPWQuZW5kc1dpdGgoIi5jc3MiKSx2PW0/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgJD1hLmxlbmd0aC0xOyQ+PTA7JC0tKXtjb25zdCBrPWFbJF07aWYoay5ocmVmPT09ZCYmKCFtfHxrLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke3Z9YCkpcmV0dXJuO2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKF8ucmVsPW0/InN0eWxlc2hlZXQiOmFoLG18fChfLmFzPSJzY3JpcHQiKSxfLmNyb3NzT3JpZ2luPSIiLF8uaHJlZj1kLHUmJl8uc2V0QXR0cmlidXRlKCJub25jZSIsdSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfKSxtKXJldHVybiBuZXcgUHJvbWlzZSgoJCxrKT0+e18uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsJCksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PmsobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBsaChlKXtyZXR1cm4gZX1mdW5jdGlvbiBkaChlKXtyZXR1cm4gZX1mdW5jdGlvbiBibygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIHBoKGUpe31mdW5jdGlvbiBmaChlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIGhoKGUpe31mdW5jdGlvbiBLcihlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBXcihlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+aHMobikpLmpvaW4odCl9ZnVuY3Rpb24gcm8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIG1oe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gVXQoZSl7cmV0dXJuIG5ldyBtaChlKX1mdW5jdGlvbiBwcyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBBZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24ga3UoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgT2M9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gd3UoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1PYylyZXR1cm4gbz09PXZvaWQgMCYmKG89T2Msbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIGdoKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gV2UoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiB5byhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBUZShlKXtyZXR1cm4geW8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gJHUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBXZSh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBTdShlLHQsbil7dCBpbiBlP1dlKGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gRmUoZSx0LG4sbyl7Y29uc3Qgcj1UZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD8kdShlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTpTdShlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiB2aChlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/JHUoZSxuLCgpPT50W25dKTpTdShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiBuZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBiaChlKXtyZXR1cm4gbmUoZS5fem9kLmRlZil9ZnVuY3Rpb24geWgoZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gX2goZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIGtoKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24genUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIFR1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgZnM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gbnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IEl1PVV0KCgpPT57aWYocmUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gTmUoZSl7aWYobnQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKG50KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gX28oZSl7cmV0dXJuIE5lKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gd2goZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgJGg9ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LHNvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSksUHU9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBCKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBTaChlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBocyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiB4dShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IEV1PXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxDdT17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gT3UoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gRmUocyxlLGtvKGUsdCkpLEIoZSxuZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBrbyhlLHQpe2NvbnN0IG49VGUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBSdShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoa28oZSx0KSksaT17fTtyZXR1cm4gRmUoaSxlLFJlZmxlY3Qub3duS2V5cyhUZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLEIoZSxuZShuLHtzaGFwZTppLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBBdShlLHQpe2lmKCFOZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1UZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gQihlLG5lKGUuX3pvZC5kZWYse3NoYXBlOlp1KGUsdCl9KSl9ZnVuY3Rpb24gWnUoZSx0KXtjb25zdCBuPXt9O3JldHVybiBGZShuLGUsUmVmbGVjdC5vd25LZXlzKFRlKGUpKSksdmgobix0KSxufWZ1bmN0aW9uIE51KGUsdCl7aWYoIU5lKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBCKGUsbmUoZS5fem9kLmRlZix7c2hhcGU6WnUoZSx0KX0pKX1mdW5jdGlvbiBqdShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtGZShuLGUsUmVmbGVjdC5vd25LZXlzKFRlKGUpKSksRmUobix0LFJlZmxlY3Qub3duS2V5cyhUZSh0KSkpO2NvbnN0IG89bmUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBCKGUsbyl9ZnVuY3Rpb24gR3IoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGE9bj9uZXcgU2V0KGtvKHQsbikpOnZvaWQgMCxjPXt9O3JldHVybiBGZShjLHQsUmVmbGVjdC5vd25LZXlzKFRlKHQpKSxlJiYoKHUsZCk9PmEmJiFhLmhhcyhkKT91Om5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnV9KSkpLEIodCxuZSh0Ll96b2QuZGVmLHtzaGFwZTpjLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBNdShlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoa28odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIEZlKHIsdCxSZWZsZWN0Lm93bktleXMoVGUodCkpLChzLGkpPT5vJiYhby5oYXMoaSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLEIodCxuZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGllKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcXUoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBmZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIFllKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIFFyKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiBnZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOlllKGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9ZZShzPy4oZSkpPz9ZZSh0Py5lcnJvcj8uKGUpKT8/WWUobi5jdXN0b21FcnJvcj8uKGUpKT8/WWUobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoZSkpYz09PSJpbnN0Inx8Yz09PSJzY2hlbWEifHxjPT09ImNvbnRpbnVlInx8Yz09PSJpbnB1dCJ8fGM9PT0iX19wcm90b19fInx8KGFbY109ZVtjXSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24gd28oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IHpoPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uICRvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIXpoLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gU28oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIER1KGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gb3QoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBUaChlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gTHUoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIFV1KGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gSWgoZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gTHUodCtuKX1mdW5jdGlvbiBQaChlKXtyZXR1cm4gVXUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIHhoKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBFaChlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBDaHtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIEh1KGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6T2goZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBQZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiB6byhlLHQsbil7cmV0dXJuIFBlKGUsdCxuLCExKX1mdW5jdGlvbiBIdChlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gUGUodGhpcyxuLG8odGhpcykpfSxzZXQocil7UGUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIE9oKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpQZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe1BlKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBSaChlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IFVyLFJlPSExO2NvbnN0IEFoPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7UmU9ITB9fTtmdW5jdGlvbiBDKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmVXIhPT1lLl96b2Qpe1VyPXZvaWQgMDtyZXR1cm59VXI9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LEFoKTtjb25zdCByPVJlO1JlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIFJlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksUmU9UmV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxSZT1SZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gRnUoZSx0LG4sbyl7Y29uc3Qgcj1SaChlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IEJ1PSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gbXMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtCdV09ITAsdH1jb25zdCBncz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6Q3UsQ09OU1RBTlRfQ0FUQ0g6QnUsQ2xhc3M6Q2gsTlVNQkVSX0ZPUk1BVF9SQU5HRVM6RXUsYWJvcnRlZDppZSxhbGxvd3NFdmFsOkl1LGFzc2VydDpoaCxhc3NlcnRFcXVhbDpsaCxhc3NlcnRJczpwaCxhc3NlcnROZXZlcjpmaCxhc3NlcnROb3RFcXVhbDpkaCxhc3NpZ25Qcm9wOldlLGF0dGFjaFNjaGVtYTpRcixiYXNlNjRUb1VpbnQ4QXJyYXk6THUsYmFzZTY0dXJsVG9VaW50OEFycmF5OkloLGNhY2hlZDpVdCxjYXB0dXJlU3RhY2tUcmFjZTpmcyxjbGVhbkVudW06VGgsY2xlYW5SZWdleDpBZSxjbG9uZTpCLGNsb25lRGVmOmJoLGNvZGVQb2ludExlbmd0aDokbyxjb25zdGFudENhdGNoOm1zLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6U2gsZGVmaW5lTGF6eTp3dSxkZWZpbmVMYXp5SW50ZXJuYWw6QyxkZXJpdmVkOkh0LGVzYzp6dSxlc2NhcGVSZWdleDpJZSxleHBsaWNpdGx5QWJvcnRlZDpxdSxleHRlbmQ6QXUsZmluYWxpemVJc3N1ZTpnZSxmbG9hdFNhZmVSZW1haW5kZXI6a3UsZ2V0RWxlbWVudEF0UGF0aDp5aCxnZXRFbnVtVmFsdWVzOktyLGdldExlbmd0aGFibGVPcmlnaW46U28sZ2V0UGFyc2VkVHlwZTokaCxnZXRTaXphYmxlT3JpZ2luOndvLGhleFRvVWludDhBcnJheTp4aCxoaWRlOnpvLGluc3RhbGxMYXp5UHJvcDpGdSxpc09iamVjdDpudCxpc1BsYWluT2JqZWN0Ok5lLGlzc3VlOm90LGpvaW5WYWx1ZXM6V3IsanNvblN0cmluZ2lmeVJlcGxhY2VyOnJvLG1lbWJlcnM6SHUsbWVyZ2U6anUsbWVyZ2VEZWZzOm5lLG5vcm1hbGl6ZVBhcmFtczp5LG51bGxpc2g6cHMsbnVtS2V5czp3aCxvYmplY3RDbG9uZTpnaCxvbWl0OlJ1LG9wdGlvbmFsS2V5czp4dSxvd246UGUscGFyc2VkVHlwZTpEdSxwYXJ0aWFsOkdyLHBpY2s6T3UscHJlZml4SXNzdWVzOmZlLHByaW1pdGl2ZVR5cGVzOlB1LHByb21pc2VBbGxPYmplY3Q6X2gscHJvcGVydHlLZXlUeXBlczpzbyxyYW5kb21TdHJpbmc6a2gscmF3U2hhcGU6eW8scmVxdWlyZWQ6TXUsc2FmZUV4dGVuZDpOdSxzaGFsbG93Q2xvbmU6X28sc2x1Z2lmeTpUdSxzdHJpbmdpZnlQcmltaXRpdmU6aHMsdG9ab2Q6Ym8sdWludDhBcnJheVRvQmFzZTY0OlV1LHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDpQaCx1aW50OEFycmF5VG9IZXg6RWgsdW53cmFwTWVzc2FnZTpZZX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgUmM7Y29uc3QgdnM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLEhyPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IEFjPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIFpoKGUpe2NvbnN0IHQ9QWM7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBBYz1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKHYpe3RoaXMuZGVmPXYsdGhpcy5jb25zdHI9bSx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgaT1uLGE9aSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gYyh2LGIpe2lmKHYuX3pvZCl7aWYodi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7SHIudmFsdWU9bmV3IHMoYik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh2LCJfem9kIixIcil9ZmluYWxseXtIci52YWx1ZT12b2lkIDB9fWlmKHYuX3pvZC50cmFpdHMuYWRkKGUpLHQodixiKSxhKXtjb25zdCAkPU9iamVjdC5nZXRQcm90b3R5cGVPZih2KSxrPXYuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBTPSQ7Zm9yKDtTJiZTIT09azspUz1PYmplY3QuZ2V0UHJvdG90eXBlT2YoUyk7Y29uc3QgVD1TPz8kO2EuaGFzKFQpfHwoYS5hZGQoVCksSHUoVCxpKSl9Y29uc3QgXz1tLnByb3RvdHlwZTtmb3IoY29uc3QgJCBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLCQpJiYoJCBpbiB2fHwodlskXT1fWyRdLmJpbmQodikpKX1jb25zdCB1PW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyB1e31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBtKHYpe2NvbnN0IGI9bz8uUGFyZW50P1poKGQpOnRoaXM7YyhiLHYpO2NvbnN0IF89Yi5fem9kLmRlZmVycmVkO2lmKF8pe2Zvcihjb25zdCBrIG9mIF8paygpO2IuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3QgJD1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gJCYmJChiKSxifXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiaW5pdCIse3ZhbHVlOmN9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOnY9Pm8/LlBhcmVudCYmdiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOnY/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIm5hbWUiLHt2YWx1ZTplfSksbX1jb25zdCBicz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIFplIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIFRvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShSYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhSYy5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IHJlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIFcoZSl7cmV0dXJuIGUmJk9iamVjdC5hc3NpZ24ocmUsZSkscmV9ZnVuY3Rpb24gTmgoKXtjb25zdCBlPXRoaXMuX3pvZDtyZXR1cm4gZS5tZXNzYWdlPz8oZS5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KGUuZGVmLHJvLDIpKSxlLm1lc3NhZ2V9ZnVuY3Rpb24gamgoZSl7dGhpcy5fem9kLm1lc3NhZ2U9ZX1jb25zdCBNaD17Z2V0Ok5oLHNldDpqaCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sRnI9e3ZhbHVlOnZvaWQgMCxlbnVtZXJhYmxlOiExfSxaYz1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKSxWdT0oZSx0KT0+e2UubmFtZT0iJFpvZEVycm9yIixGci52YWx1ZT10LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc3N1ZXMiLEZyKSxGci52YWx1ZT12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm1lc3NhZ2UiLE1oKTtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtaYy5oYXMobil8fChaYy5hZGQobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz0oKT0+dGhpcy5tZXNzYWdlO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pKX0sSnU9cCgiJFpvZEVycm9yIixWdSksZGU9cCgiJFpvZEVycm9yIixWdSx2b2lkIDAse1BhcmVudDpFcnJvcn0pO2Z1bmN0aW9uIHFoKGUsdCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl8fCh0PT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bigpLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6ZVt0XT1uKCkpLGVbdF19ZnVuY3Rpb24gSW8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17fSxvPVtdO2Zvcihjb25zdCByIG9mIGUuaXNzdWVzKXIucGF0aC5sZW5ndGg+MD9xaChuLHIucGF0aFswXSwoKT0+W10pLnB1c2godChyKSk6by5wdXNoKHQocikpO3JldHVybntmb3JtRXJyb3JzOm8sZmllbGRFcnJvcnM6bn19ZnVuY3Rpb24gUG8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17X2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e2Zvcihjb25zdCBpIG9mIHIuaXNzdWVzKWlmKGkuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmaS5lcnJvcnMubGVuZ3RoKWkuZXJyb3JzLm1hcChhPT5vKHtpc3N1ZXM6YX0sWy4uLnMsLi4uaS5wYXRoXSkpO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6aS5pc3N1ZXN9LFsuLi5zLC4uLmkucGF0aF0pO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNle2NvbnN0IGE9Wy4uLnMsLi4uaS5wYXRoXTtpZihhLmxlbmd0aD09PTApbi5fZXJyb3JzLnB1c2godChpKSk7ZWxzZXtsZXQgYz1uLHU9MDtmb3IoO3U8YS5sZW5ndGg7KXtjb25zdCBkPWFbdV0sbT11PT09YS5sZW5ndGgtMTtpZihkPT09Il9lcnJvcnMiKXttJiZjLl9lcnJvcnMucHVzaCh0KGkpKSx1Kys7Y29udGludWV9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsZCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGQse3ZhbHVlOntfZXJyb3JzOltdfSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IHY9Y1tkXTttJiZ2Ll9lcnJvcnMucHVzaCh0KGkpKSxjPXYsdSsrfX19fTtyZXR1cm4gbyhlKSxufWZ1bmN0aW9uIHlzKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e3ZhciBpO2Zvcihjb25zdCBhIG9mIHIuaXNzdWVzKWlmKGEuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmYS5lcnJvcnMubGVuZ3RoKWEuZXJyb3JzLm1hcChjPT5vKHtpc3N1ZXM6Y30sWy4uLnMsLi4uYS5wYXRoXSkpO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6YS5pc3N1ZXN9LFsuLi5zLC4uLmEucGF0aF0pO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNle2NvbnN0IGM9Wy4uLnMsLi4uYS5wYXRoXTtpZihjLmxlbmd0aD09PTApe24uZXJyb3JzLnB1c2godChhKSk7Y29udGludWV9bGV0IHU9bixkPTA7Zm9yKDtkPGMubGVuZ3RoOyl7Y29uc3QgbT1jW2RdLHY9ZD09PWMubGVuZ3RoLTE7dHlwZW9mIG09PSJzdHJpbmciPyh1LnByb3BlcnRpZXM/Pyh1LnByb3BlcnRpZXM9e30pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LnByb3BlcnRpZXMsbSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LnByb3BlcnRpZXMsbSx7dmFsdWU6e2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx1PXUucHJvcGVydGllc1ttXSk6KHUuaXRlbXM/Pyh1Lml0ZW1zPVtdKSwoaT11Lml0ZW1zKVttXT8/KGlbbV09e2Vycm9yczpbXX0pLHU9dS5pdGVtc1ttXSksdiYmdS5lcnJvcnMucHVzaCh0KGEpKSxkKyt9fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBLdShlKXtjb25zdCB0PVtdLG49ZS5tYXAobz0+dHlwZW9mIG89PSJvYmplY3QiP28ua2V5Om8pO2Zvcihjb25zdCBvIG9mIG4pdHlwZW9mIG89PSJudW1iZXIiP3QucHVzaChgWyR7b31dYCk6dHlwZW9mIG89PSJzeW1ib2wiP3QucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkoU3RyaW5nKG8pKX1dYCk6L1teXHckXS8udGVzdChvKT90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KG8pfV1gKToodC5sZW5ndGgmJnQucHVzaCgiLiIpLHQucHVzaChvKSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gX3MoZSl7Y29uc3QgdD1bXSxuPVsuLi5lLmlzc3Vlc10uc29ydCgobyxyKT0+KG8ucGF0aD8/W10pLmxlbmd0aC0oci5wYXRoPz9bXSkubGVuZ3RoKTtmb3IoY29uc3QgbyBvZiBuKXQucHVzaChg4pyWICR7by5tZXNzYWdlfWApLG8ucGF0aD8ubGVuZ3RoJiZ0LnB1c2goYCAg4oaSIGF0ICR7S3Uoby5wYXRoKX1gKTtyZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24geG8oZSx0KXtyZXR1cm57Y2FsbGVlOnQ/LmNhbGxlZT8/ZSxFcnI6dD8uRXJyfX1jb25zdCBGdD1lPT57Y29uc3QgdD0obixvLHIscyk9Pntjb25zdCBpPXI/ey4uLnIsYXN5bmM6ITF9Onthc3luYzohMX0sYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFplO2lmKGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgYz1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAodT0+Z2UodSxpLFcoKSkpKTt0aHJvdyBmcyhjLHM/LmNhbGxlZT8/dCksY31yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LFlyPUZ0KGRlKSxCdD1lPT57Y29uc3QgdD1hc3luYyhuLG8scixzKT0+e2NvbnN0IGk9cj97Li4ucixhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UmJihhPWF3YWl0IGEpLGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgYz1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAodT0+Z2UodSxpLFcoKSkpKTt0aHJvdyBmcyhjLHM/LmNhbGxlZT8/dCksY31yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LFhyPUJ0KGRlKSxWdD1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBaZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP0d1KGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sV3U9VnQoZGUpO2Z1bmN0aW9uIEd1KGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+Z2UocixuLFcoKSkpKSx0PXZvaWQgMCxuPXZvaWQgMCksb30sc2V0IGVycm9yKHIpe289cix0PXZvaWQgMCxuPXZvaWQgMH19fWNvbnN0IEp0PWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgcz10Ll96b2QucnVuKHt2YWx1ZTpuLGlzc3VlczpbXX0scik7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlJiYocz1hd2FpdCBzKSxzLmlzc3Vlcy5sZW5ndGg/R3UoZSxzLmlzc3VlcyxyKTp7c3VjY2VzczohMCxkYXRhOnMudmFsdWV9fSxEaD1KdChkZSksTGg9U3ltYm9sLmZvcigiem9kLmNvbXBpbGUuaW52YWxpZCIpLFVoPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmZhbGxiYWNrIiksRW89KChlLHQsbik9Pntjb25zdCBvPWUuX3pvZC5iYWcudmFsaWRhdG9yO2lmKG8hPT12b2lkIDApe2lmKG8odCkhPT1MaClyZXR1cm4hMDtpZihvLmRlZmluaXRlPT09ITAmJm49PT12b2lkIDApcmV0dXJuITF9cmV0dXJuIEhoKGUsdCxuKX0pO2Z1bmN0aW9uIEhoKGUsdCxuKXtjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITEsYWJvcnRFYXJseTohMH06e2FzeW5jOiExLGFib3J0RWFybHk6ITB9LHI9ZS5fem9kLmJhZy5mYWxsYmFja1J1bjtsZXQgcztpZihyPyhvW1VoXT0hMCxzPXIoe3ZhbHVlOnQsaXNzdWVzOltdfSxvKSk6cz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykscyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFplO3JldHVybiBzLmlzc3Vlcy5sZW5ndGg9PT0wfWNvbnN0IENvPWFzeW5jKGUsdCxuKT0+e2NvbnN0IG89bj97Li4ubixhc3luYzohMCxhYm9ydEVhcmx5OiEwfTp7YXN5bmM6ITAsYWJvcnRFYXJseTohMH07bGV0IHI9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZSYmKHI9YXdhaXQgciksci5pc3N1ZXMubGVuZ3RoPT09MH0sa3M9ZT0+e2NvbnN0IHQ9RnQoZSksbj0obyxyLHMsaSk9Pntjb25zdCBhPXM/ey4uLnMsZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHQobyxyLGEseG8obixpKSl9O3JldHVybiBufSxGaD1rcyhkZSksd3M9ZT0+e2NvbnN0IHQ9RnQoZSksbj0obyxyLHMsaSk9PnQobyxyLHMseG8obixpKSk7cmV0dXJuIG59LEJoPXdzKGRlKSwkcz1lPT57Y29uc3QgdD1CdChlKSxuPWFzeW5jKG8scixzLGkpPT57Y29uc3QgYT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBhd2FpdCB0KG8scixhLHhvKG4saSkpfTtyZXR1cm4gbn0sVmg9JHMoZGUpLFNzPWU9Pntjb25zdCB0PUJ0KGUpLG49YXN5bmMobyxyLHMsaSk9PmF3YWl0IHQobyxyLHMseG8obixpKSk7cmV0dXJuIG59LEpoPVNzKGRlKSx6cz1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBWdChlKSh0LG4scil9LEtoPXpzKGRlKSxUcz1lPT4odCxuLG8pPT5WdChlKSh0LG4sbyksV2g9VHMoZGUpLElzPWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gSnQoZSkodCxuLHIpfSxHaD1JcyhkZSksUHM9ZT0+YXN5bmModCxuLG8pPT5KdChlKSh0LG4sbyksUWg9UHMoZGUpLFF1PS9eW2NDXVswLTlhLXpdezYsfSQvLFl1PS9eWzAtOWEtel0rJC8sWHU9L15bMC03XVswLTlBLUhKS01OUC1UVi1aYS1oamttbnAtdHYtel17MjV9JC8sZWw9L15bMC05YS12QS1WXXsyMH0kLyx0bD0vXltBLVphLXowLTldezI3fSQvLG5sPS9eW2EtekEtWjAtOV8tXXsyMX0kLztmdW5jdGlvbiBvbChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXlthLXpBLVowLTlfLV17JHtlfX0kYCl9Y29uc3Qgcmw9L15QKD86KFxkK1cpfCg/IS4qVykoPz1cZHxUXGQpKFxkK1kpPyhcZCtNKT8oXGQrRCk/KFQoPz1cZCkoXGQrSCk/KFxkK00pPyhcZCsoWy4sXVxkKyk/Uyk/KT8pJC8sWWg9L15bLStdP1AoPyEkKSg/Oig/OlstK10/XGQrWSl8KD86Wy0rXT9cZCtbLixdXGQrWSQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86KD86Wy0rXT9cZCtXKXwoPzpbLStdP1xkK1suLF1cZCtXJCkpPyg/Oig/OlstK10/XGQrRCl8KD86Wy0rXT9cZCtbLixdXGQrRCQpKT8oPzpUKD89W1xkKy1dKSg/Oig/OlstK10/XGQrSCl8KD86Wy0rXT9cZCtbLixdXGQrSCQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86Wy0rXT9cZCsoPzpbLixdXGQrKT9TKT8pPz8kLyxzbD0vXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0pJC8scnQ9ZT0+ZT9uZXcgUmVnRXhwKGBeKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LSR7ZX1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfSkkYCk6L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtOF1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB8ZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmKSQvLFhoPXJ0KDQpLGVtPXJ0KDYpLHRtPXJ0KDcpLGlsPS9eKD86W0EtWmEtejAtOV8nK1wtXStcLikqW0EtWmEtejAtOV8nK1wtXSpbQS1aYS16MC05XystXUAoPzpbQS1aYS16MC05XVtBLVphLXowLTlcLV0qXC4pK1tBLVphLXpdezIsfSQvLG5tPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLG9tPS9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aXC0wLTldK1wuKStbYS16QS1aXXsyLH0pKSQvLGFsPS9eW15cc0AiXXsxLDY0fUBbXlxzQF17MSwyNTV9JC91LHJtPWFsLHNtPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLGltPSJeKD89W1xcc1xcU10qW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe1JlZ2lvbmFsX0luZGljYXRvcn1cXHUyMEUzXSlbXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31cXHB7RW1vamlfQ29tcG9uZW50fV0rJCI7ZnVuY3Rpb24gY2woKXtyZXR1cm4gbmV3IFJlZ0V4cChpbSwidSIpfWNvbnN0IHVsPS9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSkkLyxsbD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKSQvLGRsPWU9Pntjb25zdCB0PUllKGU/PyI6Iik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oPzpbMC05QS1GXXsyfSR7dH0pezV9WzAtOUEtRl17Mn0kfF4oPzpbMC05YS1mXXsyfSR7dH0pezV9WzAtOWEtZl17Mn0kYCl9LHBsPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLyhbMC05XXxbMS0yXVswLTldfDNbMC0yXSkkLyxmbD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKVwvKDEyWzAtOF18MVswMV1bMC05XXxbMS05XT9bMC05XSkkLyxhbT0vXiR8Xig/OlswLTlhLXpBLVorL117NH0pKig/Oig/OlswLTlhLXpBLVorL117Mn09PSl8KD86WzAtOWEtekEtWisvXXszfT0pKT8kLyxjbT0vXig/OltBLVphLXowLTlfLV17NH0pKig/OltBLVphLXowLTlfLV17MiwzfSk/JC8saGw9L14oPz0uezEsMjUzfVwuPyQpW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlstMC05YS16QS1aXXswLDYxfVswLTlhLXpBLVpdKT8pKlwuPyQvLG1sPS9eKD89LnsxLDI1M30kKShbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT9cLikrW2EtekEtWl17Miw2M30kLyx4cz0vXmh0dHBzPyQvLGdsPS9eXCtbMS05XVxkezYsMTR9JC8sRXM9L15cZCg/OlsgLV0/XGQpezExLDE4fSQvLHZsPS9eKD86QUVEfEFGTnxBTEx8QU1EfEFPQXxBUlN8QVVEfEFXR3xBWk58QkFNfEJCRHxCRFR8QkhEfEJJRnxCTUR8Qk5EfEJPQnxCT1Z8QlJMfEJTRHxCVE58QldQfEJZTnxCWkR8Q0FEfENERnxDSEV8Q0hGfENIV3xDTEZ8Q0xQfENOWXxDT1B8Q09VfENSQ3xDVVB8Q1ZFfENaS3xESkZ8REtLfERPUHxEWkR8RUdQfEVSTnxFVEJ8RVVSfEZKRHxGS1B8R0JQfEdFTHxHSFN8R0lQfEdNRHxHTkZ8R1RRfEdZRHxIS0R8SE5MfEhUR3xIVUZ8SURSfElMU3xJTlJ8SVFEfElSUnxJU0t8Sk1EfEpPRHxKUFl8S0VTfEtHU3xLSFJ8S01GfEtQV3xLUld8S1dEfEtZRHxLWlR8TEFLfExCUHxMS1J8TFJEfExTTHxMWUR8TUFEfE1ETHxNR0F8TUtEfE1NS3xNTlR8TU9QfE1SVXxNVVJ8TVZSfE1XS3xNWE58TVhWfE1ZUnxNWk58TkFEfE5HTnxOSU98Tk9LfE5QUnxOWkR8T01SfFBBQnxQRU58UEdLfFBIUHxQS1J8UExOfFBZR3xRQVJ8Uk9OfFJTRHxSVUJ8UldGfFNBUnxTQkR8U0NSfFNER3xTRUt8U0dEfFNIUHxTTEV8U09TfFNSRHxTU1B8U1ROfFNWQ3xTWVB8U1pMfFRIQnxUSlN8VE1UfFRORHxUT1B8VFJZfFRURHxUV0R8VFpTfFVBSHxVR1h8VVNEfFVTTnxVWUl8VVlVfFVZV3xVWlN8VkVEfFZFU3xWTkR8VlVWfFdTVHxYQUR8WEFGfFhBR3xYQVV8WEJBfFhCQnxYQkN8WEJEfFhDRHxYQ0d8WERSfFhPRnxYUER8WFBGfFhQVHxYU1V8WFRTfFhVQXxYWFh8WUVSfFpBUnxaTVd8WldHKSQvLENzPS9eW0EtWl17Mn0oPyEwMHwwMXw5OSlcZHsyfVtBLVowLTldezExLDMwfSQvLGJsPSIoPzooPzpcXGRcXGRbMjQ2OF1bMDQ4XXxcXGRcXGRbMTM1NzldWzI2XXxcXGRcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXGR7NH0tKD86KD86MFsxMzU3OF18MVswMl0pLSg/OjBbMS05XXxbMTJdXFxkfDNbMDFdKXwoPzowWzQ2OV18MTEpLSg/OjBbMS05XXxbMTJdXFxkfDMwKXwoPzowMiktKD86MFsxLTldfDFcXGR8MlswLThdKSkpIjtmdW5jdGlvbiB1bShlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7ZX0kYCl9Y29uc3QgeWw9dW0oYmwpO2Z1bmN0aW9uIGVzKGUpe2NvbnN0IHQ9Iig/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCI7cmV0dXJuIHR5cGVvZiBlLnByZWNpc2lvbj09Im51bWJlciI/ZS5wcmVjaXNpb249PT0tMT9gJHt0fWA6ZS5wcmVjaXNpb249PT0wP2Ake3R9OlswLTVdXFxkYDpgJHt0fTpbMC01XVxcZFxcLlxcZHske2UucHJlY2lzaW9ufX1gOmUuc2Vjb25kcz9gJHt0fTpbMC01XVxcZCg/OlxcLlxcZCspP2A6YCR7dH0oPzo6WzAtNV1cXGQoPzpcXC5cXGQrKT8pP2B9ZnVuY3Rpb24gX2woZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2VzKGUpfSRgKX1mdW5jdGlvbiBrbChlKXtjb25zdCB0PVsiWiJdO2Uub2Zmc2V0JiZ0LnB1c2goIihbKy1dKD86WzAxXVxcZHwyWzAtM10pOlswLTVdXFxkKSIpO2NvbnN0IG49YCR7ZXMoe3ByZWNpc2lvbjplLnByZWNpc2lvbixzZWNvbmRzOiEwfSl9KD86JHt0LmpvaW4oInwiKX0pYCxvPWUubG9jYWw/YCR7bn18JHtlcyh7cHJlY2lzaW9uOmUucHJlY2lzaW9ufSl9YDpuO3JldHVybiBuZXcgUmVnRXhwKGBeJHtibH1UKD86JHtvfSkkYCl9Y29uc3Qgd2w9L15bXHNcU117MCx9JC8sJGw9ZT0+e2NvbnN0IHQ9ZT9gW1xcc1xcU117JHtlPy5taW5pbXVtPz8wfSwke2U/Lm1heGltdW0/PyIifX1gOiJbXFxzXFxTXSoiO3JldHVybiBuZXcgUmVnRXhwKGBeJHt0fSRgKX0sU2w9L14tP1xkK24/JC8semw9L14tP1xkKyQvLE9vPS9eLT9cZCsoPzpcLlxkKyk/JC8sVGw9L14oPzp0cnVlfGZhbHNlKSQvaSxJbD0vXm51bGwkL2ksUGw9L151bmRlZmluZWQkL2kseGw9L15bXkEtWl0qJC8sRWw9L15bXmEtel0qJC8sQ2w9L15bMC05YS1mQS1GXSokLztmdW5jdGlvbiBLdChlLHQpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOSsvXXske2V9fSR7dH0kYCl9ZnVuY3Rpb24gV3QoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Xy1deyR7ZX19JGApfWNvbnN0IGxtPS9eWzAtOWEtZkEtRl17MzJ9JC8sZG09S3QoMjIsIj09IikscG09V3QoMjIpLGZtPS9eWzAtOWEtZkEtRl17NDB9JC8saG09S3QoMjcsIj0iKSxtbT1XdCgyNyksZ209L15bMC05YS1mQS1GXXs2NH0kLyx2bT1LdCg0MywiPSIpLGJtPVd0KDQzKSx5bT0vXlswLTlhLWZBLUZdezk2fSQvLF9tPUt0KDY0LCIiKSxrbT1XdCg2NCksd209L15bMC05YS1mQS1GXXsxMjh9JC8sJG09S3QoODYsIj09IiksU209V3QoODYpLFJvPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhbnlTdHJpbmc6d2wsYmFzZTY0OmFtLGJhc2U2NHVybDpjbSxiaWdpbnQ6U2wsYm9vbGVhbjpUbCxicm93c2VyRW1haWw6c20sY2lkcnY0OnBsLGNpZHJ2NjpmbCxjcmVkaXRDYXJkOkVzLGN1aWQ6UXUsY3VpZDI6WXUsY3VycmVuY3lDb2RlOnZsLGRhdGU6eWwsZGF0ZXRpbWU6a2wsZG9tYWluOm1sLGR1cmF0aW9uOnJsLGUxNjQ6Z2wsZW1haWw6aWwsZW1vamk6Y2wsZXh0ZW5kZWREdXJhdGlvbjpZaCxndWlkOnNsLGhleDpDbCxob3N0bmFtZTpobCxodG1sNUVtYWlsOm5tLGh0dHBQcm90b2NvbDp4cyxpYmFuOkNzLGlkbkVtYWlsOnJtLGludGVnZXI6emwsaXB2NDp1bCxpcHY2OmxsLGtzdWlkOnRsLGxvd2VyY2FzZTp4bCxtYWM6ZGwsbWQ1X2Jhc2U2NDpkbSxtZDVfYmFzZTY0dXJsOnBtLG1kNV9oZXg6bG0sbmFub2lkOm5sLG5hbm9pZE9mTGVuZ3RoOm9sLG51bGw6SWwsbnVtYmVyOk9vLHJmYzUzMjJFbWFpbDpvbSxzaGExX2Jhc2U2NDpobSxzaGExX2Jhc2U2NHVybDptbSxzaGExX2hleDpmbSxzaGEyNTZfYmFzZTY0OnZtLHNoYTI1Nl9iYXNlNjR1cmw6Ym0sc2hhMjU2X2hleDpnbSxzaGEzODRfYmFzZTY0Ol9tLHNoYTM4NF9iYXNlNjR1cmw6a20sc2hhMzg0X2hleDp5bSxzaGE1MTJfYmFzZTY0OiRtLHNoYTUxMl9iYXNlNjR1cmw6U20sc2hhNTEyX2hleDp3bSxzdHJpbmc6JGwsdGltZTpfbCx1bGlkOlh1LHVuZGVmaW5lZDpQbCx1bmljb2RlRW1haWw6YWwsdXBwZXJjYXNlOkVsLHV1aWQ6cnQsdXVpZDQ6WGgsdXVpZDY6ZW0sdXVpZDc6dG0seGlkOmVsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEg9cCgiJFpvZENoZWNrIiwoZSx0KT0+e3ZhciBuO2UuX3pvZD8/KGUuX3pvZD17fSksZS5fem9kLmRlZj10LChuPWUuX3pvZCkub25hdHRhY2g/PyhuLm9uYXR0YWNoPVtdKX0pLE9zPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIXBzKHQpJiZ0LnNpemUhPT12b2lkIDB9LFJzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIXBzKHQpJiZ0Lmxlbmd0aCE9PXZvaWQgMH0saW89e251bWJlcjoibnVtYmVyIixiaWdpbnQ6ImJpZ2ludCIsb2JqZWN0OiJkYXRlIn0sQXM9cCgiJFpvZENoZWNrTGVzc1RoYW4iLChlLHQpPT57SC5pbml0KGUsdCk7Y29uc3Qgbj1pb1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZTw9dC52YWx1ZTpvLnZhbHVlPHQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aW9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19iaWciLG1heGltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksWnM9cCgiJFpvZENoZWNrR3JlYXRlclRoYW4iLChlLHQpPT57SC5pbml0KGUsdCk7Y29uc3Qgbj1pb1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZT49dC52YWx1ZTpvLnZhbHVlPnQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aW9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0eXBlb2YgdC52YWx1ZT09Im9iamVjdCI/dC52YWx1ZS5nZXRUaW1lKCk6dC52YWx1ZSxpbnB1dDpvLnZhbHVlLGluY2x1c2l2ZTp0LmluY2x1c2l2ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxPbD1wKCIkWm9kQ2hlY2tNdWx0aXBsZU9mIiwoZSx0KT0+e0guaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aWYodHlwZW9mIG4udmFsdWUhPXR5cGVvZiB0LnZhbHVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG1peCBudW1iZXIgYW5kIGJpZ2ludCBpbiBtdWx0aXBsZV9vZiBjaGVjay4iKTsodHlwZW9mIG4udmFsdWU9PSJiaWdpbnQiP3QudmFsdWUhPT1CaWdJbnQoMCkmJm4udmFsdWUldC52YWx1ZT09PUJpZ0ludCgwKTprdShuLnZhbHVlLHQudmFsdWUpPT09MCl8fG4uaXNzdWVzLnB1c2goe29yaWdpbjp0eXBlb2Ygbi52YWx1ZSxjb2RlOiJub3RfbXVsdGlwbGVfb2YiLGRpdmlzb3I6dC52YWx1ZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFJsPXAoIiRab2RDaGVja051bWJlckZvcm1hdCIsKGUsdCk9PntILmluaXQoZSx0KSx0LmZvcm1hdD10LmZvcm1hdHx8ImZsb2F0NjQiO2NvbnN0IG49dC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxvPW4/ImludCI6Im51bWJlciIsW3Isc109RXVbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1pPT57Y29uc3QgYT1pLnZhbHVlO2lmKG4pe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXtpLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDpvLGZvcm1hdDp0LmZvcm1hdCxjb2RlOiJpbnZhbGlkX3R5cGUiLGNvbnRpbnVlOiExLGlucHV0OmEsaW5zdDplfSk7cmV0dXJufWlmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihhKSl7YT4wP2kuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX2JpZyIsbWF4aW11bTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pOmkuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLG5vdGU6IkludGVnZXJzIG11c3QgYmUgd2l0aGluIHRoZSBzYWZlIGludGVnZXIgcmFuZ2UuIixpbnN0OmUsb3JpZ2luOm8saW5jbHVzaXZlOiEwLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufX1hPHImJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpyLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxhPnMmJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19iaWciLG1heGltdW06cyxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksQWw9cCgiJFpvZENoZWNrQmlnSW50Rm9ybWF0IiwoZSx0KT0+e0guaW5pdChlLHQpO2NvbnN0W24sb109Q3VbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1yPT57Y29uc3Qgcz1yLnZhbHVlO3M8biYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOm4saW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLHM+byYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX2JpZyIsbWF4aW11bTpvLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxabD1wKCIkWm9kQ2hlY2tNYXhTaXplIiwoZSx0KT0+e3ZhciBuO0guaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49T3MpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlO3Iuc2l6ZTw9dC5tYXhpbXVtfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46d28ociksY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksTmw9cCgiJFpvZENoZWNrTWluU2l6ZSIsKGUsdCk9Pnt2YXIgbjtILmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPU9zKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU+PXQubWluaW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOndvKHIpLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksamw9cCgiJFpvZENoZWNrU2l6ZUVxdWFscyIsKGUsdCk9Pnt2YXIgbjtILmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPU9zKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIuc2l6ZTtpZihzPT09dC5zaXplKXJldHVybjtjb25zdCBpPXM+dC5zaXplO28uaXNzdWVzLnB1c2goe29yaWdpbjp3byhyKSwuLi5pP3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQuc2l6ZX06e2NvZGU6InRvb19zbWFsbCIsbWluaW11bTp0LnNpemV9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLE1sPXAoIiRab2RDaGVja01heExlbmd0aCIsKGUsdCk9Pnt2YXIgbjtILmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVJzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+dC5tYXhpbXVtPyRvKHIpOnMpPD10Lm1heGltdW0pcmV0dXJuO2NvbnN0IGE9U28ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSkscWw9cCgiJFpvZENoZWNrTWluTGVuZ3RoIiwoZSx0KT0+e3ZhciBuO0guaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49UnMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGg7aWYoKHR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5taW5pbXVtJiZzPHQubWluaW11bSoyPyRvKHIpOnMpPj10Lm1pbmltdW0pcmV0dXJuO2NvbnN0IGE9U28ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluaW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxEbD1wKCIkWm9kQ2hlY2tMZW5ndGhFcXVhbHMiLChlLHQpPT57dmFyIG47SC5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1ScyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aCxpPXR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5sZW5ndGgmJnM8PXQubGVuZ3RoKjI/JG8ocik6cztpZihpPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IGE9U28ociksYz1pPnQubGVuZ3RoO28uaXNzdWVzLnB1c2goe29yaWdpbjphLC4uLmM/e2NvZGU6InRvb19iaWciLG1heGltdW06dC5sZW5ndGh9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5sZW5ndGh9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEd0PXAoIiRab2RDaGVja1N0cmluZ0Zvcm1hdCIsKGUsdCk9Pnt2YXIgbixvO0guaW5pdChlLHQpLHQucGF0dGVybj8obj1lLl96b2QpLmNoZWNrPz8obi5jaGVjaz1yPT57dC5wYXR0ZXJuLmxhc3RJbmRleD0wLCF0LnBhdHRlcm4udGVzdChyLnZhbHVlKSYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQsaW5wdXQ6ci52YWx1ZSwuLi50LnBhdHRlcm4/e3BhdHRlcm46dC5wYXR0ZXJuLnRvU3RyaW5nKCl9Ont9LGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfSk6KG89ZS5fem9kKS5jaGVjaz8/KG8uY2hlY2s9KCk9Pnt9KX0pLExsPXAoIiRab2RDaGVja1JlZ2V4IiwoZSx0KT0+e0d0LmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qobi52YWx1ZSkmJm4uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsaW5wdXQ6bi52YWx1ZSxwYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFVsPXAoIiRab2RDaGVja0xvd2VyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49eGwpLEd0LmluaXQoZSx0KX0pLEhsPXAoIiRab2RDaGVja1VwcGVyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49RWwpLEd0LmluaXQoZSx0KX0pLEZsPXAoIiRab2RDaGVja0luY2x1ZGVzIiwoZSx0KT0+e0guaW5pdChlLHQpO2NvbnN0IG49SWUodC5pbmNsdWRlcyksbz1uZXcgUmVnRXhwKHR5cGVvZiB0LnBvc2l0aW9uPT0ibnVtYmVyIj9gXi57JHt0LnBvc2l0aW9ufSx9JHtufWA6bik7dC5wYXR0ZXJuPW8sZS5fem9kLmNoZWNrPXI9PntyLnZhbHVlLmluY2x1ZGVzKHQuaW5jbHVkZXMsdC5wb3NpdGlvbil8fHIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsaW5jbHVkZXM6dC5pbmNsdWRlcyxpbnB1dDpyLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEJsPXAoIiRab2RDaGVja1N0YXJ0c1dpdGgiLChlLHQpPT57SC5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgUmVnRXhwKGBeJHtJZSh0LnByZWZpeCl9LipgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49biksZS5fem9kLmNoZWNrPW89PntvLnZhbHVlLnN0YXJ0c1dpdGgodC5wcmVmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLHByZWZpeDp0LnByZWZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFZsPXAoIiRab2RDaGVja0VuZHNXaXRoIiwoZSx0KT0+e0guaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgLioke0llKHQuc3VmZml4KX0kYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5lbmRzV2l0aCh0LnN1ZmZpeCl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLHN1ZmZpeDp0LnN1ZmZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIGFvKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZmUobixlLmlzc3VlcykpfWNvbnN0IEpsPXAoIiRab2RDaGVja1Byb3BlcnR5IiwoZSx0KT0+e0guaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz10LnNjaGVtYS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZVt0LnByb3BlcnR5XSxpc3N1ZXM6W119LHt9KTtpZihvIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gby50aGVuKHI9PmFvKHIsbix0LnByb3BlcnR5KSk7YW8obyxuLHQucHJvcGVydHkpfX0pLEtsPXAoIiRab2RDaGVja1Byb3BlcnRpZXMiLChlLHQpPT57SC5pbml0KGUsdCksem8oZSxTeW1ib2wuaXRlcmF0b3IsZnVuY3Rpb24qKCl7eWllbGQgZX0pO2xldCBuO2UuX3pvZC5jaGVjaz1vPT57aWYoby52YWx1ZT09bnVsbCl7by5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im9iamVjdCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpvLnZhbHVlLGluc3Q6ZX0pO3JldHVybn1uPz8obj1SZWZsZWN0Lm93bktleXModC5zaGFwZSkubWFwKGk9PltpLHQuc2hhcGVbaV1dKSk7Y29uc3Qgcj1vLnZhbHVlO2xldCBzO2Zvcihjb25zdFtpLGFdb2Ygbil7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpyW2ldLGlzc3VlczpbXX0se30pO2MgaW5zdGFuY2VvZiBQcm9taXNlPyhzPz8ocz1bXSkscy5wdXNoKGMudGhlbih1PT5hbyh1LG8saSkpKSk6YW8oYyxvLGkpfWlmKHMpcmV0dXJuIFByb21pc2UuYWxsKHMpLnRoZW4oKCk9Pnt9KX19KSxXbD1wKCIkWm9kQ2hlY2tNaW1lVHlwZSIsKGUsdCk9PntILmluaXQoZSx0KTtjb25zdCBuPW5ldyBTZXQodC5taW1lKTtlLl96b2QuY2hlY2s9bz0+e24uaGFzKG8udmFsdWUudHlwZSl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0Lm1pbWUsaW5wdXQ6by52YWx1ZS50eXBlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEdsPXAoIiRab2RDaGVja092ZXJ3cml0ZSIsKGUsdCk9PntILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e24udmFsdWU9dC50eChuLnZhbHVlKX19KTtjbGFzcyBRbHtjb25zdHJ1Y3Rvcih0PVtdLG49e30pe3RoaXMuY29udGVudD1bXSx0aGlzLmluZGVudD0wLHRoaXMuYXJncz10LHRoaXMuY2xvc2VkPW59aW5kZW50ZWQodCl7dGhpcy5pbmRlbnQrPTE7dHJ5e3QodGhpcyl9ZmluYWxseXt0aGlzLmluZGVudC09MX19d3JpdGUodCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpe3QodGhpcyx7ZXhlY3V0aW9uOiJzeW5jIn0pLHQodGhpcyx7ZXhlY3V0aW9uOiJhc3luYyJ9KTtyZXR1cm59Y29uc3Qgbz10LnNwbGl0KGAKYCkuZmlsdGVyKGk9PmkpLHI9TWF0aC5taW4oLi4uby5tYXAoaT0+aS5sZW5ndGgtaS50cmltU3RhcnQoKS5sZW5ndGgpKSxzPW8ubWFwKGk9Pmkuc2xpY2UocikpLm1hcChpPT4iICIucmVwZWF0KHRoaXMuaW5kZW50KjIpK2kpO2Zvcihjb25zdCBpIG9mIHMpdGhpcy5jb250ZW50LnB1c2goaSl9Y29tcGlsZSgpe2NvbnN0IHQ9RnVuY3Rpb24sbj10aGlzPy5jb250ZW50Pz9bIiJdO3JldHVybiBuZXcgdCguLi5PYmplY3Qua2V5cyh0aGlzLmNsb3NlZCksYHJldHVybiBmdW5jdGlvbiAoJHt0aGlzLmFyZ3Muam9pbigiLCAiKX0pIHsKJHtuLmpvaW4oYApgKX0KfTtgKSguLi5PYmplY3QudmFsdWVzKHRoaXMuY2xvc2VkKSl9fWNvbnN0IFlsPXttYWpvcjo0LG1pbm9yOjYscGF0Y2g6NX0sST1wKCIkWm9kVHlwZSIsKGUsdCk9Pnt2YXIgbjtlPz8oZT17fSksZS5fem9kLmRlZj10LGUuX3pvZC5iYWc9ZS5fem9kLmJhZ3x8e30sZS5fem9kLnZlcnNpb249WWw7Y29uc3Qgbz1lLl96b2QuZGVmLmNoZWNrcyxyPWUuX3pvZC50cmFpdHMuaGFzKCIkWm9kQ2hlY2siKT9bZSwuLi5vPz9bXV06bz8ubGVuZ3RoP1suLi5vXTpbXTtmb3IoY29uc3QgcyBvZiByKWZvcihjb25zdCBpIG9mIHMuX3pvZC5vbmF0dGFjaClpKGUpO2lmKHIubGVuZ3RoPT09MCkobj1lLl96b2QpLmRlZmVycmVkPz8obi5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkPy5wdXNoKCgpPT57ZS5fem9kLnJ1bj1lLl96b2QucGFyc2V9KTtlbHNle2NvbnN0IHM9KGEsYyx1KT0+e2lmKGEubWVtbylyZXR1cm4gYTtsZXQgZD1pZShhKSxtO2Zvcihjb25zdCB2IG9mIGMpe2lmKHYuX3pvZC5kZWYud2hlbil7aWYocXUoYSl8fCF2Ll96b2QuZGVmLndoZW4oYSkpY29udGludWV9ZWxzZSBpZihkKWNvbnRpbnVlO2NvbnN0IGI9YS5pc3N1ZXMubGVuZ3RoLF89di5fem9kLmNoZWNrKGEpO2lmKF8gaW5zdGFuY2VvZiBQcm9taXNlJiZ1Py5hc3luYz09PSExKXRocm93IG5ldyBaZTtpZihtfHxfIGluc3RhbmNlb2YgUHJvbWlzZSltPShtPz9Qcm9taXNlLnJlc29sdmUoKSkudGhlbihhc3luYygpPT57YXdhaXQgXyxhLmlzc3Vlcy5sZW5ndGghPT1iJiYoUXIoYS5pc3N1ZXMsYixlKSxkfHwoZD1pZShhLGIpKSl9KTtlbHNle2lmKGEuaXNzdWVzLmxlbmd0aD09PWIpY29udGludWU7UXIoYS5pc3N1ZXMsYixlKSxkfHwoZD1pZShhLGIpKX19cmV0dXJuIG0/bS50aGVuKCgpPT5hKTphfSxpPShhLGMsdSk9PntpZihpZShhKSlyZXR1cm4gYS5hYm9ydGVkPSEwLGE7Y29uc3QgZD1zKGMscix1KTtpZihkIGluc3RhbmNlb2YgUHJvbWlzZSl7aWYodS5hc3luYz09PSExKXRocm93IG5ldyBaZTtyZXR1cm4gZC50aGVuKG09PmUuX3pvZC5wYXJzZShtLHUpKX1yZXR1cm4gZS5fem9kLnBhcnNlKGQsdSl9O2UuX3pvZC5ydW49KGEsYyk9PntpZihjLnNraXBDaGVja3MpcmV0dXJuIGUuX3pvZC5wYXJzZShhLGMpO2lmKGMuZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3QgZD1lLl96b2QucGFyc2Uoe3ZhbHVlOmEudmFsdWUsaXNzdWVzOltdfSx7Li4uYyxza2lwQ2hlY2tzOiEwfSk7cmV0dXJuIGQgaW5zdGFuY2VvZiBQcm9taXNlP2QudGhlbihtPT5pKG0sYSxjKSk6aShkLGEsYyl9Y29uc3QgdT1lLl96b2QucGFyc2UoYSxjKTtpZih1IGluc3RhbmNlb2YgUHJvbWlzZSl7aWYoYy5hc3luYz09PSExKXRocm93IG5ldyBaZTtyZXR1cm4gdS50aGVuKGQ9PnMoZCxyLGMpKX1yZXR1cm4gcyh1LHIsYyl9fX0se2dldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIHpvKHRoaXMsIn5zdGFuZGFyZCIsTnModGhpcykpfSxzZXQifnN0YW5kYXJkIihlKXtQZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfX0pLFhsPShlLHQpPT5lLmlzc3Vlcy5sZW5ndGg/e2lzc3VlczplLmlzc3Vlcy5tYXAobj0+Z2Uobix0LFcoKSkpfTp7dmFsdWU6ZS52YWx1ZX07YXN5bmMgZnVuY3Rpb24gem0oZSx0KXtjb25zdCBuPXthc3luYzohMH07cmV0dXJuIFhsKGF3YWl0IGUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKSxuKX1mdW5jdGlvbiBOcyhlKXtyZXR1cm57dmFsaWRhdGU6dD0+e2NvbnN0IG49e2FzeW5jOiExfTt0cnl7Y29uc3Qgbz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbik7aWYoIShvIGluc3RhbmNlb2YgUHJvbWlzZSkpcmV0dXJuIFhsKG8sbil9Y2F0Y2h7fXJldHVybiB6bShlLHQpfSx2ZW5kb3I6InpvZCIsdmVyc2lvbjoxfX1jb25zdCBRdD1wKCIkWm9kU3RyaW5nIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXQucGF0dGVybj8/d2wsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9U3RyaW5nKG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJzdHJpbmcifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxxPXAoIiRab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57R3QuaW5pdChlLHQpLFF0LmluaXQoZSx0KX0pLGVkPXAoIiRab2RHVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1zbCkscS5pbml0KGUsdCl9KSx0ZD1wKCIkWm9kVVVJRCIsKGUsdCk9PntpZih0LnZlcnNpb24pe2NvbnN0IG89e3YxOjEsdjI6Mix2MzozLHY0OjQsdjU6NSx2Njo2LHY3Ojcsdjg6OH1bdC52ZXJzaW9uXTtpZihvPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVVUlEIHZlcnNpb246ICIke3QudmVyc2lvbn0iYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXJ0KG8pKX1lbHNlIHQucGF0dGVybj8/KHQucGF0dGVybj1ydCgpKTtxLmluaXQoZSx0KX0pLG5kPXAoIiRab2RFbWFpbCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49aWwpLHEuaW5pdChlLHQpfSksanM9MSxOdD0yO2Z1bmN0aW9uIE1zKGUpe3RyeXtyZXR1cm4gdHlwZW9mIFVSTDwidSImJnR5cGVvZiBVUkwuY2FuUGFyc2U9PSJmdW5jdGlvbiI/VVJMLmNhblBhcnNlKGUpOihuZXcgVVJMKGUpLCEwKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gb2QoZSx0KXtyZXR1cm4hKCJub3JtYWxpemUiaW4gdCkmJiEoImhvc3RuYW1lImluIHQpJiYhKCJwcm90b2NvbCJpbiB0KT9NcyhlKXx8TnQ6cmQoZSx0KX1mdW5jdGlvbiByZChlLHQpe2lmKCF0Lm5vcm1hbGl6ZSYmdC5wcm90b2NvbD8uc291cmNlPT09eHMuc291cmNlJiYhL15odHRwcz86XC9cLy9pLnRlc3QoZSkpcmV0dXJuIGpzO3RyeXtpZih0eXBlb2YgVVJMPCJ1Iil7Y29uc3Qgbj1VUkw7aWYodHlwZW9mIG4ucGFyc2U9PSJmdW5jdGlvbiIpcmV0dXJuIG4ucGFyc2UoZSk/P050fXJldHVybiBuZXcgVVJMKGUpfWNhdGNoe3JldHVybiBOdH19Y29uc3QgVG09L1tcdFxuXHJdL2c7ZnVuY3Rpb24gdHMoZSl7cmV0dXJuIGUucmVwbGFjZShUbSwiIil9ZnVuY3Rpb24gc2QoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5ob3N0bmFtZSl9ZnVuY3Rpb24gaWQoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5wcm90b2NvbC5lbmRzV2l0aCgiOiIpP2UucHJvdG9jb2wuc2xpY2UoMCwtMSk6ZS5wcm90b2NvbCl9Y29uc3QgYWQ9cCgiJFpvZFVSTCIsKGUsdCk9PntxLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3RyeXtjb25zdCBvPW4udmFsdWUudHJpbSgpLHI9b2Qobyx0KTtpZihyPT09anMpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBVUkwgZm9ybWF0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09TnQpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KTtyZXR1cm59aWYocj09PSEwKXtuLnZhbHVlPXRzKG8pO3JldHVybn10Lmhvc3RuYW1lJiYhc2Qocix0Lmhvc3RuYW1lKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIGhvc3RuYW1lIixwYXR0ZXJuOnQuaG9zdG5hbWUuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksdC5wcm90b2NvbCYmIWlkKHIsdC5wcm90b2NvbCkmJm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBwcm90b2NvbCIscGF0dGVybjp0LnByb3RvY29sLnNvdXJjZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLG4udmFsdWU9dC5ub3JtYWxpemU/ci5ocmVmOnRzKG8pO3JldHVybn1jYXRjaHtuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fX0pLGNkPXAoIiRab2RFbW9qaSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49Y2woKSkscS5pbml0KGUsdCl9KSx1ZD1wKCIkWm9kTmFub0lEIiwoZSx0KT0+e2lmKHQubGVuZ3RoIT09dm9pZCAwJiYoIU51bWJlci5pc0ludGVnZXIodC5sZW5ndGgpfHx0Lmxlbmd0aDwxKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmFub2lkIGxlbmd0aDogJHt0Lmxlbmd0aH1gKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dC5sZW5ndGg9PT12b2lkIDA/bmw6b2wodC5sZW5ndGgpKSxxLmluaXQoZSx0KX0pLGxkPXAoIiRab2RDVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1RdSkscS5pbml0KGUsdCl9KSxkZD1wKCIkWm9kQ1VJRDIiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVl1KSxxLmluaXQoZSx0KX0pLHBkPXAoIiRab2RVTElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1YdSkscS5pbml0KGUsdCl9KSxmZD1wKCIkWm9kWElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1lbCkscS5pbml0KGUsdCl9KSxoZD1wKCIkWm9kS1NVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXRsKSxxLmluaXQoZSx0KX0pLG1kPXAoIiRab2RJU09EYXRlVGltZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49a2wodCkpLHEuaW5pdChlLHQpfSksZ2Q9cCgiJFpvZElTT0RhdGUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXlsKSxxLmluaXQoZSx0KX0pLHZkPXAoIiRab2RJU09UaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1fbCh0KSkscS5pbml0KGUsdCl9KSxiZD1wKCIkWm9kSVNPRHVyYXRpb24iLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXJsKSxxLmluaXQoZSx0KX0pLHlkPXAoIiRab2RJUHY0IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj11bCkscS5pbml0KGUsdCl9KSxJbT0vXlswLTlhLWZBLUY6Ll0rJC87ZnVuY3Rpb24gcXMoZSl7cmV0dXJuIEltLnRlc3QoZSk/TXMoYGh0dHA6Ly9bJHtlfV1gKTohMX1jb25zdCBfZD1wKCIkWm9kSVB2NiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49bGwpLHEuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57cXMobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImlwdjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksa2Q9cCgiJFpvZE1BQyIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZGwodC5kZWxpbWl0ZXIpKSxxLmluaXQoZSx0KX0pLHdkPXAoIiRab2RDSURSdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXBsKSxxLmluaXQoZSx0KX0pO2Z1bmN0aW9uICRkKGUpe2NvbnN0IHQ9ZS5zcGxpdCgiLyIpO2lmKHQubGVuZ3RoIT09MilyZXR1cm4hMTtjb25zdFtuLG9dPXQ7aWYoIW8pcmV0dXJuITE7Y29uc3Qgcj1OdW1iZXIobyk7cmV0dXJuYCR7cn1gIT09b3x8cjwwfHxyPjEyOD8hMTpxcyhuKX1jb25zdCBTZD1wKCIkWm9kQ0lEUnY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1mbCkscS5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PnskZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiY2lkcnY2IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIERzKGUpe2lmKGU9PT0iIilyZXR1cm4hMDtpZigvXHMvLnRlc3QoZSl8fGUubGVuZ3RoJTQhPT0wKXJldHVybiExO3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19Y29uc3QgemQ9L15bMC05YS16QS1aKy9dKj17MCwyfSQvLFRkPXAoIiRab2RCYXNlNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXpkKSxxLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0RzKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksTHM9L15bQS1aYS16MC05Xy1dKiQvO2Z1bmN0aW9uIElkKGUpe2lmKCFMcy50ZXN0KGUpKXJldHVybiExO2NvbnN0IHQ9ZS5yZXBsYWNlKC9bLV9dL2csbz0+bz09PSItIj8iKyI6Ii8iKSxuPXQucGFkRW5kKE1hdGguY2VpbCh0Lmxlbmd0aC80KSo0LCI9Iik7cmV0dXJuIERzKG4pfWNvbnN0IFBkPXAoIiRab2RCYXNlNjRVUkwiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUxzKSxxLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0lkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjR1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSkseGQ9cCgiJFpvZEUxNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWdsKSxxLmluaXQoZSx0KX0pLFBtPS9bLSBdL2c7ZnVuY3Rpb24geG0oZSl7bGV0IHQ9ZS5sZW5ndGgsbj0xLG89MDtmb3IoO3Q7KXtjb25zdCByPWUuY2hhckNvZGVBdCgtLXQpLTQ4O25ePTEsbys9bj9bMCwyLDQsNiw4LDEsMyw1LDcsOV1bcl06cn1yZXR1cm4gbyUxMD09PTB9ZnVuY3Rpb24gRWQoZSl7cmV0dXJuIEVzLnRlc3QoZSk/eG0oZS5yZXBsYWNlKFBtLCIiKSk6ITF9Y29uc3QgQ2Q9cCgiJFpvZENyZWRpdENhcmQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUVzKSxxLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0VkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBFbShlKXtsZXQgdD0wO2NvbnN0IG49ZS5sZW5ndGg7Zm9yKGxldCBvPTQ7bzxuO28rKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobyk7dD0ocj49NjU/dCoxMDArKHItNTUpOnQqMTArKHItNDgpKSU5N31mb3IobGV0IG89MDtvPDQ7bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fXJldHVybiB0PT09MX1mdW5jdGlvbiBPZChlKXtyZXR1cm4gQ3MudGVzdChlKT9FbShlKTohMX1jb25zdCBSZD1wKCIkWm9kSUJBTiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49Q3MpLHEuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57T2Qobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImliYW4iLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gQWQoZSx0PW51bGwpe3RyeXtjb25zdCBuPWUuc3BsaXQoIi4iKTtpZihuLmxlbmd0aCE9PTMpcmV0dXJuITE7Y29uc3Rbb109bjtpZighbylyZXR1cm4hMTtjb25zdCByPUpTT04ucGFyc2UoYXRvYihvKSk7cmV0dXJuISgidHlwImluIHImJnI/LnR5cCE9PSJKV1QifHwhci5hbGd8fHQmJighKCJhbGciaW4gcil8fHIuYWxnIT09dCkpfWNhdGNoe3JldHVybiExfX1jb25zdCBaZD1wKCIkWm9kSldUIiwoZSx0KT0+e3EuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57QWQobi52YWx1ZSx0LmFsZyl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6Imp3dCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxOZD1wKCIkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0IiwoZSx0KT0+e3EuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dC5mbihuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdCxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFVzPXAoIiRab2ROdW1iZXIiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49T28sZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9TnVtYmVyKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWU7aWYodHlwZW9mIHI9PSJudW1iZXIiJiYhTnVtYmVyLmlzTmFOKHIpJiZOdW1iZXIuaXNGaW5pdGUocikpcmV0dXJuIG47Y29uc3Qgcz10eXBlb2Ygcj09Im51bWJlciI/TnVtYmVyLmlzTmFOKHIpPyJOYU4iOk51bWJlci5pc0Zpbml0ZShyKT92b2lkIDA6U3RyaW5nKHIpOnZvaWQgMDtyZXR1cm4gbi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im51bWJlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZSwuLi5zP3tyZWNlaXZlZDpzfTp7fX0pLG59fSksamQ9cCgiJFpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntSbC5pbml0KGUsdCksVXMuaW5pdChlLHQpfSksSHM9cCgiJFpvZEJvb2xlYW4iLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49VGwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9ISFuLnZhbHVlfWNhdGNoe31jb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0iYm9vbGVhbiJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJib29sZWFuIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxGcz1wKCIkWm9kQmlnSW50IiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPVNsLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPUJpZ0ludChuLnZhbHVlKX1jYXRjaHt9cmV0dXJuIHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJpZ2ludCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG59fSksTWQ9cCgiJFpvZEJpZ0ludEZvcm1hdCIsKGUsdCk9PntBbC5pbml0KGUsdCksRnMuaW5pdChlLHQpfSkscWQ9cCgiJFpvZFN5bWJvbCIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0ic3ltYm9sInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InN5bWJvbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksRGQ9cCgiJFpvZFVuZGVmaW5lZCIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1QbCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW3ZvaWQgMF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI+InUifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoidW5kZWZpbmVkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxMZD1wKCIkWm9kTnVsbCIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1JbCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW251bGxdKSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHI9PT1udWxsfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVsbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksVWQ9cCgiJFpvZEFueSIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9bj0+bn0pLEhkPXAoIiRab2RVbmtub3duIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksRmQ9cCgiJFpvZE5ldmVyIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJuZXZlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pfSksQmQ9cCgiJFpvZFZvaWQiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ2b2lkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxWZD1wKCIkWm9kRGF0ZSIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1uZXcgRGF0ZShuLnZhbHVlKX1jYXRjaHt9Y29uc3Qgcj1uLnZhbHVlLHM9ciBpbnN0YW5jZW9mIERhdGU7cmV0dXJuIHMmJiFOdW1iZXIuaXNOYU4oci5nZXRUaW1lKCkpfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiZGF0ZSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLC4uLnM/e3JlY2VpdmVkOiJJbnZhbGlkIERhdGUifTp7fSxpbnN0OmV9KSxufX0pO2Z1bmN0aW9uIE5jKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZmUobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1jb25zdCBKZD1wKCIkWm9kQXJyYXkiLChlLHQpPT57SS5pbml0KGUsdCk7Y29uc3Qgbj1yZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYXJyYXkiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO28udmFsdWU9bj9uLmFsbG9jKGUsbyxBcnJheShzLmxlbmd0aCkscik6QXJyYXkocy5sZW5ndGgpO2NvbnN0IGk9W10sYT1yPy5hYm9ydEVhcmx5O2ZvcihsZXQgYz0wO2M8cy5sZW5ndGg7YysrKXtjb25zdCB1PXNbY10sZD10LmVsZW1lbnQuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKTtpZihkIGluc3RhbmNlb2YgUHJvbWlzZSlpLnB1c2goZC50aGVuKG09Pk5jKG0sbyxjKSkpO2Vsc2UgaWYoTmMoZCxvLGMpLGEmJmQuaXNzdWVzLmxlbmd0aCE9PTAmJmllKGQpKWJyZWFrfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIGNvKGUsdCxuLG8scixzKXtjb25zdCBpPW4gaW4gbyxhPXM9PT0ib3B0aW9uYWwiO2lmKCEoIWkmJmEmJnI9PT0ib3B0aW9uYWwiKSl7aWYoZS5pc3N1ZXMubGVuZ3RoKXtpZihyIT09dm9pZCAwJiZhJiYhaSlyZXR1cm47dC5pc3N1ZXMucHVzaCguLi5mZShuLGUuaXNzdWVzKSl9aWYoIWkmJnI9PT12b2lkIDApe2UuaXNzdWVzLmxlbmd0aHx8dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OnZvaWQgMCxwYXRoOltuXX0pO3JldHVybn1lLnZhbHVlPT09dm9pZCAwPyhpfHxyPT09ImRlZmF1bHRlZCImJiFhKSYmKHQudmFsdWVbbl09dm9pZCAwKTp0LnZhbHVlW25dPWUudmFsdWV9fWNvbnN0IENtPVtdO2Z1bmN0aW9uIEtkKGUpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZS5zaGFwZSksbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUuc2hhcGUpLG89bi5sZW5ndGg/bjpDbSxyPW8ubGVuZ3RoP1suLi50LC4uLm9dOnQ7Zm9yKGNvbnN0IGkgb2YgcilpZighZS5zaGFwZT8uW2ldPy5fem9kPy50cmFpdHM/LmhhcygiJFpvZFR5cGUiKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCBhdCBrZXkgIiR7U3RyaW5nKGkpfSI6IGV4cGVjdGVkIGEgWm9kIHNjaGVtYWApO2NvbnN0IHM9eHUoZS5zaGFwZSk7cmV0dXJuey4uLmUsYWxsS2V5czpyLHN5bWJvbEtleXM6byxrZXlTZXQ6bmV3IFNldCh0KSxudW1LZXlzOnQubGVuZ3RoLG9wdGlvbmFsS2V5czpuZXcgU2V0KHMpfX1mdW5jdGlvbiBXZChlLHQsbixvLHIscyxpKXtjb25zdCBhPVtdLGM9ci5rZXlTZXQsdT1yLmNhdGNoYWxsLl96b2QsZD11LmRlZi50eXBlLG09dS5vcHRpbix2PXUub3B0b3V0O2xldCBiPTA7Zm9yKGNvbnN0IF8gaW4gdCl7aWYoaSYmbi5pc3N1ZXMubGVuZ3RoIT09Yil7aWYoaWUobixiKSlicmVhaztiPW4uaXNzdWVzLmxlbmd0aH1pZihjLmhhcyhfKSljb250aW51ZTtpZihfPT09Il9fcHJvdG9fXyIpe2Q9PT0ibmV2ZXIiJiZhLnB1c2goXyk7Y29udGludWV9aWYoZD09PSJuZXZlciIpe2EucHVzaChfKTtjb250aW51ZX1jb25zdCAkPXUucnVuKHt2YWx1ZTp0W19dLGlzc3VlczpbXX0sbyk7JCBpbnN0YW5jZW9mIFByb21pc2U/ZS5wdXNoKCQudGhlbihrPT5jbyhrLG4sXyx0LG0sdikpKTpjbygkLG4sXyx0LG0sdil9cmV0dXJuIGEubGVuZ3RoJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsa2V5czphLGlucHV0OnQsaW5zdDpzLGNvbnRpbnVlOiEwfSksZS5sZW5ndGg/UHJvbWlzZS5hbGwoZSkudGhlbigoKT0+bik6bn1jb25zdCBHZD1wKCIkWm9kT2JqZWN0IiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCJzaGFwZSIpLG89bj8uZ2V0P24uZ2V0LnJhdzp0LnNoYXBlPz97fTtpZihvKXtjb25zdCB1PSgpPT57Y29uc3QgZD17Li4ub307cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFwZSIse3ZhbHVlOmR9KSx1LnJhdz1kLGR9O3UucmF3PW8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7Z2V0OnV9KX1jb25zdCByPVV0KCgpPT5LZCh0KSk7QyhlLCJwcm9wVmFsdWVzIix1PT57Y29uc3QgZD11LmRlZi5zaGFwZSxtPXt9O2Zvcihjb25zdCB2IGluIGQpe2NvbnN0IGI9ZFt2XS5fem9kO2lmKGIudmFsdWVzKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSx2KXx8V2UobSx2LG5ldyBTZXQpO2Zvcihjb25zdCBfIG9mIGIudmFsdWVzKW1bdl0uYWRkKF8pO2Iub3B0aW4hPT12b2lkIDAmJm1bdl0uYWRkKHZvaWQgMCl9fXJldHVybiBtfSk7Y29uc3Qgcz1udCxpPXQuY2F0Y2hhbGw7bGV0IGE7Y29uc3QgYz1yZS5tZW1vaXplcjtjPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPSh1LGQpPT57YT8/KGE9ci52YWx1ZSk7Y29uc3QgbT11LnZhbHVlO2lmKCFzKG0pKXJldHVybiB1Lmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om0saW5zdDplfSksdTt1LnZhbHVlPWM/Yy5hbGxvYyhlLHUse30sZCk6e307Y29uc3Qgdj1bXSxiPWEuc2hhcGUsXz1kPy5hYm9ydEVhcmx5O2xldCAkPXUuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgayBvZiBhLmFsbEtleXMpe2lmKF8mJnUuaXNzdWVzLmxlbmd0aCE9PSQpe2lmKGllKHUsJCkpYnJlYWs7JD11Lmlzc3Vlcy5sZW5ndGh9aWYoaz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IFM9YltrXSxUPVMuX3pvZC5vcHRpbixMPVMuX3pvZC5vcHRvdXQsRz1TLl96b2QucnVuKHt2YWx1ZTptW2tdLGlzc3VlczpbXX0sZCk7RyBpbnN0YW5jZW9mIFByb21pc2U/di5wdXNoKEcudGhlbihGPT5jbyhGLHUsayxtLFQsTCkpKTpjbyhHLHUsayxtLFQsTCl9cmV0dXJuIGk/V2QodixtLHUsZCxyLnZhbHVlLGUsXz09PSEwKTp2Lmxlbmd0aD9Qcm9taXNlLmFsbCh2KS50aGVuKCgpPT51KTp1fX0pLFFkPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57R2QuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89VXQoKCk9PktkKHQpKSxyPXJlLm1lbW9pemVyLHM9Yj0+e2NvbnN0IF89by52YWx1ZSwkPV8uc3ltYm9sS2V5cyxrPW5ldyBRbChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6YixpbnN0OmUsbWVtbzpyLHN5bXM6JH0pLFM9Rj0+YHNoYXBlWyR7Rn1dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7Rn1dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLFQ9KEYsVSk9PmAKICAgICAgICAgIGxldCAke0Z9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7Rn0uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7Rn0uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7VX0sIC4uLmlzcy5wYXRoXSA6IFske1V9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke0Z9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke0Z9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gO2sud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBMPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IEc9MDtmb3IoY29uc3QgRiBvZiBfLmFsbEtleXMpTFtGXT1ga2V5XyR7RysrfWA7ay53cml0ZShyPyJjb25zdCBuZXdSZXN1bHQgPSBtZW1vLmFsbG9jKGluc3QsIHBheWxvYWQsIHt9LCBjdHgpOyI6ImNvbnN0IG5ld1Jlc3VsdCA9IHt9OyIpO2Zvcihjb25zdCBGIG9mIF8uYWxsS2V5cyl7aWYoRj09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IFU9TFtGXSxrZT10eXBlb2YgRj09InN5bWJvbCI/YHN5bXNbJHskLmluZGV4T2YoRil9XWA6enUoRiksRHI9YCR7a2V9IGluIGlucHV0YCx4Yz1iW0ZdLExyPXhjPy5fem9kPy5vcHRpbixFYz1MciE9PXZvaWQgMCxzaD14Yz8uX3pvZD8ub3B0b3V0PT09Im9wdGlvbmFsIjtpZihrLndyaXRlKGBjb25zdCAke1V9ID0gJHtTKGtlKX07YCksRWMmJnNoKXtjb25zdCBpaD1Mcj09PSJvcHRpb25hbCI/YCR7VX1fcHJlc2VudGA6YCR7VX0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke1V9X3ByZXNlbnRgO2sud3JpdGUoYAogICAgICAgIGNvbnN0ICR7VX1fcHJlc2VudCA9ICR7RHJ9OwogICAgICAgIGlmICghJHtVfS5pc3N1ZXMubGVuZ3RoIHx8ICR7VX1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7VX0uaXNzdWVzLmxlbmd0aCkgeyR7VChVLGtlKX0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoJHtpaH0pIHsKICAgICAgICAgICAgbmV3UmVzdWx0WyR7a2V9XSA9ICR7VX0udmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgYCl9ZWxzZSBFYz8oay53cml0ZShgCiAgICAgICAgaWYgKCR7VX0uaXNzdWVzLmxlbmd0aCkgeyR7VChVLGtlKX0KICAgICAgICB9CiAgICAgIGApLExyPT09ImRlZmF1bHRlZCI/ay53cml0ZShgbmV3UmVzdWx0WyR7a2V9XSA9ICR7VX0udmFsdWU7YCk6ay53cml0ZShgCiAgICAgICAgaWYgKCR7VX0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke0RyfSkgewogICAgICAgICAgbmV3UmVzdWx0WyR7a2V9XSA9ICR7VX0udmFsdWU7CiAgICAgICAgfQogICAgICBgKSk6ay53cml0ZShgCiAgICAgICAgY29uc3QgJHtVfV9wcmVzZW50ID0gJHtEcn07CiAgICAgICAgaWYgKCR7VX0uaXNzdWVzLmxlbmd0aCkgeyR7VChVLGtlKX0KICAgICAgICB9CiAgICAgICAgaWYgKCEke1V9X3ByZXNlbnQgJiYgISR7VX0uaXNzdWVzLmxlbmd0aCkgewogICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7CiAgICAgICAgICAgIGNvZGU6ICJpbnZhbGlkX3R5cGUiLAogICAgICAgICAgICBleHBlY3RlZDogIm5vbm9wdGlvbmFsIiwKICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCwKICAgICAgICAgICAgcGF0aDogWyR7a2V9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7VX1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7a2V9XSA9ICR7VX0udmFsdWU7CiAgICAgICAgfQoKICAgICAgYCl9cmV0dXJuIGsud3JpdGUoInBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7Iiksay53cml0ZSgicmV0dXJuIHBheWxvYWQ7Iiksay5jb21waWxlKCl9O2xldCBpO2NvbnN0IGE9bnQsYz0hcmUuaml0bGVzcyxkPWMmJkl1LnZhbHVlLG09dC5jYXRjaGFsbDtsZXQgdjtlLl96b2QucGFyc2U9KGIsXyk9Pnt2Pz8odj1vLnZhbHVlKTtjb25zdCAkPWIudmFsdWU7cmV0dXJuIGEoJCk/YyYmZCYmXz8uYXN5bmM9PT0hMSYmXy5qaXRsZXNzIT09ITA/KGl8fChpPXModC5zaGFwZSkpLGI9aShiLF8pLG0/V2QoW10sJCxiLF8sdixlLF8/LmFib3J0RWFybHk9PT0hMCk6Yik6bihiLF8pOihiLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OiQsaW5zdDplfSksYil9fSk7ZnVuY3Rpb24gamMoZSx0LG4sbyl7Zm9yKGNvbnN0IHMgb2YgZSlpZihzLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiB0LnZhbHVlPXMudmFsdWUsdDtjb25zdCByPWUuZmlsdGVyKHM9PiFpZShzKSk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1yWzBdLnZhbHVlLHJbMF0pOih0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGk9PmdlKGksbyxXKCkpKSl9KSx0KX1jb25zdCBBbz1wKCIkWm9kVW5pb24iLChlLHQpPT57SS5pbml0KGUsdCksQyhlLCJvcHRpbiIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiKT8iZGVmYXVsdGVkIjpvLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluIT09dm9pZCAwKT8ib3B0aW9uYWwiOnZvaWQgMCksQyhlLCJvcHRvdXQiLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIik/Im9wdGlvbmFsIjp2b2lkIDApLEMoZSwidmFsdWVzIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QudmFsdWVzKSlyZXR1cm4gbmV3IFNldChvLmRlZi5vcHRpb25zLmZsYXRNYXAocj0+QXJyYXkuZnJvbShyLl96b2QudmFsdWVzKSkpfSksQyhlLCJwYXR0ZXJuIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QucGF0dGVybikpe2NvbnN0IHI9by5kZWYub3B0aW9ucy5tYXAocz0+cy5fem9kLnBhdHRlcm4pO3JldHVybiBuZXcgUmVnRXhwKGBeKCR7ci5tYXAocz0+QWUocy5zb3VyY2UpKS5qb2luKCJ8Iil9KSRgKX19KTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7aWYoYyBpbnN0YW5jZW9mIFByb21pc2UpaS5wdXNoKGMpLHM9ITA7ZWxzZXtpZihjLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiBjO2kucHVzaChjKX19cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5qYyhhLG8sZSxyKSk6amMoaSxvLGUscil9fSk7ZnVuY3Rpb24gTWMoZSx0LG4sbyl7Y29uc3Qgcj1bXTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdLmlzc3Vlcy5sZW5ndGg9PT0wJiZyLnB1c2gocyk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1lW3JbMF1dLnZhbHVlLHQpOihyLmxlbmd0aD09PTA/dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOmUubWFwKHM9PnMuaXNzdWVzLm1hcChpPT5nZShpLG8sVygpKSkpfSk6dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOltdLGluY2x1c2l2ZTohMSxtYXRjaGVzOnJ9KSx0KX1jb25zdCBZZD1wKCIkWm9kWG9yIiwoZSx0KT0+e0FvLmluaXQoZSx0KSx0LmluY2x1c2l2ZT0hMTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7YyBpbnN0YW5jZW9mIFByb21pc2U/KGkucHVzaChjKSxzPSEwKTppLnB1c2goYyl9cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5NYyhhLG8sZSxyKSk6TWMoaSxvLGUscil9fSk7ZnVuY3Rpb24gQnMoZSx0KXtjb25zdCBuPWUuX3pvZDtsZXQgbz1uLmJhZy5vcHRpb25zTWFwO298fChvPVhkKG4uZGVmKSxuLmJhZy5vcHRpb25zTWFwPW8pO2NvbnN0IHI9by5nZXQodCk7aWYocj09PW51bGwpdGhyb3cgbmV3IEVycm9yKGBBbWJpZ3VvdXMgZGlzY3JpbWluYXRvciB2YWx1ZSAiJHtTdHJpbmcodCl9ImApO3JldHVybiByfWZ1bmN0aW9uIFhkKGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IoY29uc3QgbiBvZiBlLm9wdGlvbnMpe2NvbnN0IG89bi5fem9kLnByb3BWYWx1ZXM/LltlLmRpc2NyaW1pbmF0b3JdO2lmKCFvfHxvLnNpemU9PT0wKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtlLm9wdGlvbnMuaW5kZXhPZihuKX0iYCk7Zm9yKGNvbnN0IHIgb2YgbylpZih0LmhhcyhyKSl7aWYociE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyhyKX0iYCk7dC5zZXQocixudWxsKX1lbHNlIHQuc2V0KHIsbil9cmV0dXJuIHR9Y29uc3QgZXA9cCgiJFpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9Pnt0LmluY2x1c2l2ZT0hMSxBby5pbml0KGUsdCk7Y29uc3Qgbj1lLl96b2QucGFyc2U7QyhlLCJwcm9wVmFsdWVzIixyPT57Y29uc3Qgcz17fTtsZXQgaT0wO2Zvcihjb25zdCBhIG9mIHIuZGVmLm9wdGlvbnMpe2NvbnN0IGM9YS5fem9kLnByb3BWYWx1ZXM7aWYoIWN8fE9iamVjdC5rZXlzKGMpLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3IuZGVmLm9wdGlvbnMuaW5kZXhPZihhKX0iYCk7Y1tyLmRlZi5kaXNjcmltaW5hdG9yXT8uaGFzKHZvaWQgMCkmJmkrKztmb3IoY29uc3RbdSxkXW9mIE9iamVjdC5lbnRyaWVzKGMpKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocyx1KXx8V2Uocyx1LG5ldyBTZXQpO2Zvcihjb25zdCBtIG9mIGQpc1t1XS5hZGQobSl9fXJldHVybiFyLmRlZi51bmlvbkZhbGxiYWNrJiZpPjEmJnNbci5kZWYuZGlzY3JpbWluYXRvcl0/LmRlbGV0ZSh2b2lkIDApLHN9KSx0Lm9wdGlvbnMuZm9yRWFjaCgocixzKT0+e2NvbnN0IGk9eW8oci5fem9kLmRlZik7aWYoaSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHQuZGlzY3JpbWluYXRvcikpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3N9ImApfSk7Y29uc3Qgbz1VdCgoKT0+WGQodCkpO2UuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGk9ci52YWx1ZTtpZighbnQoaSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6Im9iamVjdCIsaW5wdXQ6aSxpbnN0OmV9KSxyO2NvbnN0IGE9aT8uW3QuZGlzY3JpbWluYXRvcl0sYz1vLnZhbHVlLmdldChhKTtyZXR1cm4gYyYmKGEhPT12b2lkIDB8fHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIik/Yy5fem9kLnJ1bihyLHMpOnQudW5pb25GYWxsYmFja3x8cy5kaXJlY3Rpb249PT0iYmFja3dhcmQiP24ocixzKTooci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsZXJyb3JzOltdLG5vdGU6Ik5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3IiLGRpc2NyaW1pbmF0b3I6dC5kaXNjcmltaW5hdG9yLG9wdGlvbnM6QXJyYXkuZnJvbShvLnZhbHVlLmtleXMoKSkuZmlsdGVyKHU9Pm8udmFsdWUuZ2V0KHUpIT09bnVsbCksaW5wdXQ6aSxwYXRoOlt0LmRpc2NyaW1pbmF0b3JdLGluc3Q6ZX0pLHIpfX0pLHRwPXAoIiRab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlLHM9dC5sZWZ0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyksaT10LnJpZ2h0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlfHxpIGluc3RhbmNlb2YgUHJvbWlzZT9Qcm9taXNlLmFsbChbcyxpXSkudGhlbigoW2MsdV0pPT5xYyhuLGMsdSkpOnFjKG4scyxpKX19KTtmdW5jdGlvbiB1byhlLHQpe2lmKGU9PT10KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKGUgaW5zdGFuY2VvZiBEYXRlJiZ0IGluc3RhbmNlb2YgRGF0ZSYmK2U9PSt0KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKE5lKGUpJiZOZSh0KSl7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KSxvPU9iamVjdC5rZXlzKGUpLmZpbHRlcihzPT5uLmluZGV4T2YocykhPT0tMSkscj17Li4uZSwuLi50fTtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwiX19wcm90b19fIikmJmRlbGV0ZSByLl9fcHJvdG9fXztmb3IoY29uc3QgcyBvZiBvKXtpZihzPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgaT11byhlW3NdLHRbc10pO2lmKCFpLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbcywuLi5pLm1lcmdlRXJyb3JQYXRoXX07cltzXT1pLmRhdGF9cmV0dXJue3ZhbGlkOiEwLGRhdGE6cn19aWYoQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheSh0KSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119O2NvbnN0IG49W107Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2NvbnN0IHI9ZVtvXSxzPXRbb10saT11byhyLHMpO2lmKCFpLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbbywuLi5pLm1lcmdlRXJyb3JQYXRoXX07bi5wdXNoKGkuZGF0YSl9cmV0dXJue3ZhbGlkOiEwLGRhdGE6bn19cmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltdfX1mdW5jdGlvbiBxYyhlLHQsbil7Y29uc3Qgbz1uZXcgTWFwO2xldCByO2NvbnN0IHM9bmV3IE1hcCxpPSh1LGQpPT57bGV0IG07aWYodS5jb2RlPT09InVucmVjb2duaXplZF9rZXlzIiYmIXUucGF0aD8ubGVuZ3RoKXI/PyhyPXUpLG09dS5rZXlzO2Vsc2UgaWYodS5jb2RlPT09ImludmFsaWRfa2V5IiYmdS5vcmlnaW49PT0icmVjb3JkIiYmdS5wYXRoPy5sZW5ndGg9PT0xKXtjb25zdCB2PVN0cmluZyh1LnBhdGhbMF0pO3MuaGFzKHYpfHxzLnNldCh2LHUpLG09W3ZdfWVsc2UgcmV0dXJuITE7Zm9yKGNvbnN0IHYgb2YgbSlvLmhhcyh2KXx8by5zZXQodix7fSksby5nZXQodilbZF09ITA7cmV0dXJuITB9O2Zvcihjb25zdCB1IG9mIHQuaXNzdWVzKWkodSwibCIpfHxlLmlzc3Vlcy5wdXNoKHUpO2Zvcihjb25zdCB1IG9mIG4uaXNzdWVzKWkodSwiciIpfHxlLmlzc3Vlcy5wdXNoKHUpO2NvbnN0IGE9Wy4uLm9dLmZpbHRlcigoWyx1XSk9PnUubCYmdS5yKS5tYXAoKFt1XSk9PnUpO2lmKGEubGVuZ3RoKXtjb25zdCB1PXI/YS5maWx0ZXIoZD0+ci5rZXlzLmluY2x1ZGVzKGQpKTpbXTt1Lmxlbmd0aCYmZS5pc3N1ZXMucHVzaCh7Li4ucixrZXlzOnV9KTtmb3IoY29uc3QgZCBvZiBhKSF1LmluY2x1ZGVzKGQpJiZzLmhhcyhkKSYmZS5pc3N1ZXMucHVzaChzLmdldChkKSl9Y29uc3QgYz11byh0LnZhbHVlLG4udmFsdWUpO2lmKCFjLnZhbGlkKXtpZihpZShlKSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYFVubWVyZ2FibGUgaW50ZXJzZWN0aW9uLiBFcnJvciBwYXRoOiAke0pTT04uc3RyaW5naWZ5KGMubWVyZ2VFcnJvclBhdGgpfWApfXJldHVybiBlLnZhbHVlPWMuZGF0YSxlfWNvbnN0IFZzPXAoIiRab2RUdXBsZSIsKGUsdCk9PntJLmluaXQoZSx0KTtjb25zdCBuPXQuaXRlbXMsbz1yZS5tZW1vaXplcjtvPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiByLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGluc3Q6ZSxleHBlY3RlZDoidHVwbGUiLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxyO3IudmFsdWU9bz9vLmFsbG9jKGUscixbXSxzKTpbXTtjb25zdCBhPVtdLGM9RGMobiwib3B0aW4iKSx1PURjKG4sIm9wdG91dCIpO2lmKCF0LnJlc3Qpe2lmKGkubGVuZ3RoPGMpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19zbWFsbCIsbWluaW11bTpjLGluY2x1c2l2ZTohMCxpbnB1dDppLGluc3Q6ZSxvcmlnaW46ImFycmF5In0pLHI7aS5sZW5ndGg+bi5sZW5ndGgmJnIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19iaWciLG1heGltdW06bi5sZW5ndGgsaW5jbHVzaXZlOiEwLGlucHV0OmksaW5zdDplLG9yaWdpbjoiYXJyYXkifSl9Y29uc3QgZD1uZXcgQXJyYXkobi5sZW5ndGgpLG09dC5yZXN0P3M/LmFib3J0RWFybHk6dm9pZCAwO2xldCB2PSExO2ZvcihsZXQgYj0wO2I8bi5sZW5ndGg7YisrKXtjb25zdCBfPW5bYl0uX3pvZC5ydW4oe3ZhbHVlOmlbYl0saXNzdWVzOltdfSxzKTtfIGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goXy50aGVuKCQ9PntkW2JdPSR9KSk6KGRbYl09XyxtJiYhdiYmXy5pc3N1ZXMubGVuZ3RoJiYodj1pZShfKSkpfWlmKHQucmVzdCYmIXYpe2xldCBiPW4ubGVuZ3RoLTE7Y29uc3QgXz1pLnNsaWNlKG4ubGVuZ3RoKTtsZXQgJD1yLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IGsgb2YgXyl7aWYobSYmci5pc3N1ZXMubGVuZ3RoIT09JCl7aWYoaWUociwkKSlicmVhazskPXIuaXNzdWVzLmxlbmd0aH1iKys7Y29uc3QgUz10LnJlc3QuX3pvZC5ydW4oe3ZhbHVlOmssaXNzdWVzOltdfSxzKTtTIGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goUy50aGVuKFQ9PkxjKFQscixiKSkpOkxjKFMscixiKX19cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9PlVjKGQscixuLGksdSkpOlVjKGQscixuLGksdSl9fSk7ZnVuY3Rpb24gRGMoZSx0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZighKHQ9PT0ib3B0aW4iP2Vbbl0uX3pvZC5vcHRpbiE9PXZvaWQgMDplW25dLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIikpcmV0dXJuIG4rMTtyZXR1cm4gMH1mdW5jdGlvbiBMYyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLmZlKG4sZS5pc3N1ZXMpKSx0LnZhbHVlW25dPWUudmFsdWV9ZnVuY3Rpb24gVWMoZSx0LG4sbyxyKXtmb3IobGV0IHM9MDtzPG4ubGVuZ3RoO3MrKyl7Y29uc3QgaT1lW3NdLGE9czxvLmxlbmd0aDtpZighYSYmcz49ciYmbltzXS5fem9kLm9wdGluPT09Im9wdGlvbmFsIil7dC52YWx1ZS5sZW5ndGg9czticmVha31pZihpLmlzc3Vlcy5sZW5ndGgpe2lmKCFhJiZzPj1yKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfXQuaXNzdWVzLnB1c2goLi4uZmUocyxpLmlzc3VlcykpfXQudmFsdWVbc109aS52YWx1ZX1mb3IobGV0IHM9dC52YWx1ZS5sZW5ndGgtMTtzPj1vLmxlbmd0aCYmKG5bc10uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiJiZ0LnZhbHVlW3NdPT09dm9pZCAwKTtzLS0pdC52YWx1ZS5sZW5ndGg9cztyZXR1cm4gdH1jb25zdCBucD1wKCIkWm9kUmVjb3JkIiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49cmUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighTmUocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJyZWNvcmQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGk9W10sYT10LmtleVR5cGUuX3pvZC52YWx1ZXM7aWYoYSYmIXQucGFydGlhbCl7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2NvbnN0IGM9bmV3IFNldDtmb3IoY29uc3QgZCBvZiBhKWlmKHR5cGVvZiBkPT0ic3RyaW5nInx8dHlwZW9mIGQ9PSJudW1iZXIifHx0eXBlb2YgZD09InN5bWJvbCIpe2lmKGMuYWRkKHR5cGVvZiBkPT0ibnVtYmVyIj9kLnRvU3RyaW5nKCk6ZCksZD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IG09dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpkLGlzc3VlczpbXX0scik7aWYobSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYobS5pc3N1ZXMubGVuZ3RoKXtvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczptLmlzc3Vlcy5tYXAoXz0+Z2UoXyxyLFcoKSkpLGlucHV0OmQscGF0aDpbZF0saW5zdDplfSk7Y29udGludWV9Y29uc3Qgdj1tLnZhbHVlO2lmKHY9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBiPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2RdLGlzc3VlczpbXX0scik7YiBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGIudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmZlKGQsXy5pc3N1ZXMpKSxvLnZhbHVlW3ZdPV8udmFsdWV9KSk6KGIuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5mZShkLGIuaXNzdWVzKSksby52YWx1ZVt2XT1iLnZhbHVlKX1sZXQgdTtmb3IoY29uc3QgZCBpbiBzKWlmKCFjLmhhcyhkKSlpZih0Lm1vZGU9PT0ibG9vc2UiKXtpZihkPT09Il9fcHJvdG9fXyIpY29udGludWU7by52YWx1ZVtkXT1zW2RdfWVsc2UgdT11Pz9bXSx1LnB1c2goZCk7dSYmdS5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6dSxjb250aW51ZTohMH0pfWVsc2V7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2xldCBjO2Zvcihjb25zdCB1IG9mIFJlZmxlY3Qub3duS2V5cyhzKSl7aWYodT09PSJfX3Byb3RvX18ifHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsdSkpY29udGludWU7bGV0IGQ9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0scik7aWYoZCBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYodHlwZW9mIHU9PSJzdHJpbmciJiZPby50ZXN0KHUpJiZkLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IF89dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpOdW1iZXIodSksaXNzdWVzOltdfSxyKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtfLmlzc3Vlcy5sZW5ndGg9PT0wJiYoZD1fKX1pZihkLmlzc3Vlcy5sZW5ndGgpe3QubW9kZT09PSJsb29zZSI/by52YWx1ZVt1XT1zW3VdOmE/KGM9Yz8/W10sYy5wdXNoKHUpKTpvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpkLmlzc3Vlcy5tYXAoXz0+Z2UoXyxyLFcoKSkpLGlucHV0OnUscGF0aDpbdV0saW5zdDplfSk7Y29udGludWV9Y29uc3Qgdj1kLnZhbHVlO2lmKHY9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBiPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW3VdLGlzc3VlczpbXX0scik7YiBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGIudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmZlKHUsXy5pc3N1ZXMpKSxvLnZhbHVlW3ZdPV8udmFsdWV9KSk6KGIuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5mZSh1LGIuaXNzdWVzKSksby52YWx1ZVt2XT1iLnZhbHVlKX1jJiZjLmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czpjLGNvbnRpbnVlOiEwfSl9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSksb3A9cCgiJFpvZE1hcCIsKGUsdCk9PntJLmluaXQoZSx0KTtjb25zdCBuPXJlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgTWFwKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im1hcCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IE1hcCxyKTpuZXcgTWFwO2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgYz1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0W3UsZF1vZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT1jKXtpZihpZShvLGMpKWJyZWFrO2M9by5pc3N1ZXMubGVuZ3RofWNvbnN0IG09dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0sciksdj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6ZCxpc3N1ZXM6W119LHIpO20gaW5zdGFuY2VvZiBQcm9taXNlfHx2IGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goUHJvbWlzZS5hbGwoW20sdl0pLnRoZW4oKFtiLF9dKT0+e0hjKGIsXyxvLHUscyxlLHIpfSkpOkhjKG0sdixvLHUscyxlLHIpfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIEhjKGUsdCxuLG8scixzLGkpe2UuaXNzdWVzLmxlbmd0aCYmKHNvLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5mZShvLGUuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoibWFwIixpbnB1dDpyLGluc3Q6cyxpc3N1ZXM6ZS5pc3N1ZXMubWFwKGE9PmdlKGEsaSxXKCkpKX0pKSx0Lmlzc3Vlcy5sZW5ndGgmJihzby5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4uZmUobyx0Lmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe29yaWdpbjoibWFwIixjb2RlOiJpbnZhbGlkX2VsZW1lbnQiLGlucHV0OnIsaW5zdDpzLGtleTpvLGlzc3Vlczp0Lmlzc3Vlcy5tYXAoYT0+Z2UoYSxpLFcoKSkpfSkpLG4udmFsdWUuc2V0KGUudmFsdWUsdC52YWx1ZSl9Y29uc3QgcnA9cCgiJFpvZFNldCIsKGUsdCk9PntJLmluaXQoZSx0KTtjb25zdCBuPXJlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgU2V0KSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7aW5wdXQ6cyxpbnN0OmUsZXhwZWN0ZWQ6InNldCIsY29kZToiaW52YWxpZF90eXBlIn0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IFNldCxyKTpuZXcgU2V0O2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgYz1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IHUgb2Ygcyl7aWYoYSYmby5pc3N1ZXMubGVuZ3RoIT09Yyl7aWYoaWUobyxjKSlicmVhaztjPW8uaXNzdWVzLmxlbmd0aH1jb25zdCBkPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0scik7ZCBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGQudGhlbihtPT5GYyhtLG8pKSk6RmMoZCxvKX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBGYyhlLHQpe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5lLmlzc3VlcyksdC52YWx1ZS5hZGQoZS52YWx1ZSl9Y29uc3Qgc3A9cCgiJFpvZEVudW0iLChlLHQpPT57SS5pbml0KGUsdCk7Y29uc3Qgbj1Lcih0LmVudHJpZXMpLG89bmV3IFNldChuKTtlLl96b2QudmFsdWVzPW8sQyhlLCJwYXR0ZXJuIixyPT57Y29uc3Qgcz1LcihyLmRlZi5lbnRyaWVzKS5maWx0ZXIoaT0+c28uaGFzKHR5cGVvZiBpKSk7cmV0dXJuIG5ldyBSZWdFeHAocy5sZW5ndGg/YF4oJHtzLm1hcChpPT5JZShpLnRvU3RyaW5nKCkpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO3JldHVybiBvLmhhcyhpKXx8ci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOm4saW5wdXQ6aSxpbnN0OmV9KSxyfX0pLGlwPXAoIiRab2RMaXRlcmFsIiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0LnZhbHVlcyk7ZS5fem9kLnZhbHVlcz1uLEMoZSwicGF0dGVybiIsbz0+e2NvbnN0IHI9by5kZWYudmFsdWVzO3JldHVybiBuZXcgUmVnRXhwKHIubGVuZ3RoP2BeKCR7ci5tYXAocz0+dHlwZW9mIHM9PSJzdHJpbmciP0llKHMpOnM/SWUocy50b1N0cmluZygpKTpTdHJpbmcocykpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7cmV0dXJuIG4uaGFzKHMpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC52YWx1ZXMsaW5wdXQ6cyxpbnN0OmV9KSxvfX0pLGFwPXAoIiRab2RGaWxlIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gciBpbnN0YW5jZW9mIEZpbGV8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJmaWxlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxjcD1wKCIkWm9kVHJhbnNmb3JtIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0ib3B0aW9uYWwiLHJlLm1lbW9pemVyPy5ndWFyZChlKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFRvKGUuY29uc3RydWN0b3IubmFtZSk7Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO2lmKG8uYXN5bmMpcmV0dXJuKHIgaW5zdGFuY2VvZiBQcm9taXNlP3I6UHJvbWlzZS5yZXNvbHZlKHIpKS50aGVuKGk9PihuLnZhbHVlPWksbikpO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBaZTtyZXR1cm4gbi52YWx1ZT1yLG59fSk7ZnVuY3Rpb24gQmMoZSx0KXtyZXR1cm4gZS52YWx1ZT10Lmlzc3Vlcy5sZW5ndGg/dm9pZCAwOnQudmFsdWUsZX1jb25zdCBKcz1wKCIkWm9kT3B0aW9uYWwiLChlLHQpPT57SS5pbml0KGUsdCksQyhlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxlLl96b2Qub3B0b3V0PSJvcHRpb25hbCIsQyhlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vLHZvaWQgMF0pOnZvaWQgMH0pLEMoZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7QWUoby5zb3VyY2UpfSk/JGApOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG4udmFsdWU9PT12b2lkIDApe2lmKHQuaW5uZXJUeXBlLl96b2Qub3B0aW4hPT0iZGVmYXVsdGVkIilyZXR1cm4gbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5CYyhuLHMpKTpCYyhuLHIpfXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfX0pLHVwPXAoIiRab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e0pzLmluaXQoZSx0KSxDKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxDKGUsInBhdHRlcm4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm4pLGUuX3pvZC5wYXJzZT0obixvKT0+dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLGxwPXAoIiRab2ROdWxsYWJsZSIsKGUsdCk9PntJLmluaXQoZSx0KSxDKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbiksQyhlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksQyhlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtBZShvLnNvdXJjZSl9fG51bGwpJGApOnZvaWQgMH0pLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM/bmV3IFNldChbLi4ubi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzLG51bGxdKTp2b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+bi52YWx1ZT09PW51bGw/bjp0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksZHA9cCgiJFpvZERlZmF1bHQiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtpZihuLnZhbHVlPT09dm9pZCAwKXJldHVybiBuLnZhbHVlPXQuZGVmYXVsdFZhbHVlLG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+VmMocyx0KSk6VmMocix0KX19KTtmdW5jdGlvbiBWYyhlLHQpe3JldHVybiBlLnZhbHVlPT09dm9pZCAwJiYoZS52YWx1ZT10LmRlZmF1bHRWYWx1ZSksZX1jb25zdCBwcD1wKCIkWm9kUHJlZmF1bHQiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+KG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkInx8bi52YWx1ZT09PXZvaWQgMCYmKG4udmFsdWU9dC5kZWZhdWx0VmFsdWUpLHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbykpfSksZnA9cCgiJFpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e0kuaW5pdChlLHQpLEMoZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ub10uZmlsdGVyKHI9PnIhPT12b2lkIDApKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5KYyhzLGUpKTpKYyhyLGUpfX0pO2Z1bmN0aW9uIEpjKGUsdCl7cmV0dXJuIWUuaXNzdWVzLmxlbmd0aCYmZS52YWx1ZT09PXZvaWQgMCYmZS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OmUudmFsdWUsaW5zdDp0fSksZX1jb25zdCBocD1wKCIkWm9kU3VjY2VzcyIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFRvKCJab2RTdWNjZXNzIik7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cy5pc3N1ZXMubGVuZ3RoPT09MCxuKSk6KG4udmFsdWU9ci5pc3N1ZXMubGVuZ3RoPT09MCxuKX19KTtmdW5jdGlvbiBLYyhlLHQsbixvKXtyZXR1cm4gdC5pc3N1ZXMubGVuZ3RoPyhlLnZhbHVlPW4uY2F0Y2hWYWx1ZSh7Li4udCx2YWx1ZTplLnZhbHVlLGVycm9yOntpc3N1ZXM6dC5pc3N1ZXMubWFwKHI9PmdlKHIsbyxXKCkpKX0saW5wdXQ6ZS52YWx1ZX0pLGUpOihlLnZhbHVlPXQudmFsdWUsdC5tZW1vJiYoZS5tZW1vPSEwKSxlKX1jb25zdCBtcD1wKCIkWm9kQ2F0Y2giLChlLHQpPT57SS5pbml0KGUsdCksQyhlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxDKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSxDKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZSxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+S2MobixzLHQsbykpOktjKG4scix0LG8pfX0pLGdwPXAoIiRab2ROYU4iLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4oKHR5cGVvZiBuLnZhbHVlIT0ibnVtYmVyInx8IU51bWJlci5pc05hTihuLnZhbHVlKSkmJm4uaXNzdWVzLnB1c2goe2lucHV0Om4udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJuYW4iLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxuKX0pLEtzPXAoIiRab2RQaXBlIiwoZSx0KT0+e0kuaW5pdChlLHQpLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksQyhlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksQyhlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksQyhlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+V24oaSx0LmluLG8pKTpXbihzLHQuaW4sbyl9Y29uc3Qgcj10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5XbihzLHQub3V0LG8pKTpXbihyLHQub3V0LG8pfX0pO2Z1bmN0aW9uIFduKGUsdCxuKXtyZXR1cm4gZS5pc3N1ZXMuc29tZShvPT5vLmNvZGUhPT0idW5yZWNvZ25pemVkX2tleXMiKT8oZS5hYm9ydGVkPSEwLGUpOnQuX3pvZC5ydW4oe3ZhbHVlOmUudmFsdWUsaXNzdWVzOmUuaXNzdWVzfSxuKX1jb25zdCBXcz1wKCIkWm9kQ29kZWMiLChlLHQpPT57SS5pbml0KGUsdCksQyhlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSxDKGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSxDKGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSxDKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoKG8uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCBzPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGk9PkduKGksdCxvKSk6R24ocyx0LG8pfWVsc2V7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+R24oaSx0LG8pKTpHbihzLHQsbyl9fX0pO2Z1bmN0aW9uIEduKGUsdCxuKXtpZihlLmlzc3Vlcy5sZW5ndGgpcmV0dXJuIGUuYWJvcnRlZD0hMCxlO2lmKChuLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcj10LnRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+UW4oZSxzLHQub3V0LG4pKTpRbihlLHIsdC5vdXQsbil9ZWxzZXtjb25zdCByPXQucmV2ZXJzZVRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+UW4oZSxzLHQuaW4sbikpOlFuKGUscix0LmluLG4pfX1mdW5jdGlvbiBRbihlLHQsbixvKXtyZXR1cm4gZS5pc3N1ZXMubGVuZ3RoPyhlLmFib3J0ZWQ9ITAsZSk6bi5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6ZS5pc3N1ZXN9LG8pfWNvbnN0IHZwPXAoIiRab2RQcmVwcm9jZXNzIiwoZSx0KT0+e0tzLmluaXQoZSx0KX0pLGJwPXAoIiRab2RSZWFkb25seSIsKGUsdCk9PntJLmluaXQoZSx0KSxDKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnByb3BWYWx1ZXMpLEMoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLEMoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4pLEMoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKFdjKTpXYyhyKX19KTtmdW5jdGlvbiBXYyhlKXtyZXR1cm4gZS5tZW1vfHwoZS52YWx1ZT1PYmplY3QuZnJlZXplKGUudmFsdWUpKSxlfWZ1bmN0aW9uIE9tKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtsZXQgbj10LnBhdHRlcm4sbz0hIXQuZm9ybWF0Py5pbmNsdWRlcygiaW50IikscixzO2Zvcihjb25zdCBhIG9mIHQuY2hlY2tzPz9bXSl7Y29uc3QgYz1hLl96b2QuZGVmO2MucGF0dGVybiYmKG49Yy5wYXR0ZXJuKSxvfHwobz0hIWMuZm9ybWF0Py5pbmNsdWRlcygiaW50IikpO2NvbnN0IHU9Yy5taW5pbXVtPz9jLmxlbmd0aCxkPWMubWF4aW11bT8/Yy5sZW5ndGg7dSE9PXZvaWQgMCYmKHI9PT12b2lkIDB8fHU+cikmJihyPXUpLGQhPT12b2lkIDAmJihzPT09dm9pZCAwfHxkPHMpJiYocz1kKX1pZihuKXJldHVybiBuLnNvdXJjZTtpZihyIT09dm9pZCAwJiZzIT09dm9pZCAwJiZyPnMpcmV0dXJuIig/ISkiO2lmKHIhPT12b2lkIDB8fHMhPT12b2lkIDApcmV0dXJuICRsKHttaW5pbXVtOnIsbWF4aW11bTpzfSkuc291cmNlO2NvbnN0IGk9ZS5fem9kLnBhdHRlcm47cmV0dXJuKG8mJmk9PT1Pbz96bDppKT8uc291cmNlfWZ1bmN0aW9uIG5zKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZixuPWUuX3pvZC5wYXR0ZXJuPy5zb3VyY2Usbz10LmlubmVyVHlwZT8/ZS5fem9kLmlubmVyVHlwZTtpZihvKXtjb25zdCByPW8uX3pvZC5wYXR0ZXJuPy5zb3VyY2Uscz1ucyhvKTtyZXR1cm4gbiYmciYmcyYmcyE9PXI/bi5yZXBsYWNlKEFlKHIpLCgpPT5BZShzKSk6bn1pZih0Lm9wdGlvbnMpe2NvbnN0IHI9dC5vcHRpb25zLm1hcChucyk7aWYoci5ldmVyeShCb29sZWFuKSlyZXR1cm5gXigke3IubWFwKHM9PkFlKHMpKS5qb2luKCJ8Iil9KSRgfXJldHVybiBPbShlKX1jb25zdCB5cD1wKCIkWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgdC5wYXJ0cylpZih0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsKXtjb25zdCByPW5zKG8pO2lmKCFyKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQsIG5vIHBhdHRlcm4gZm91bmQ6ICR7Wy4uLm8uX3pvZC50cmFpdHNdLnNoaWZ0KCl9YCk7bi5wdXNoKEFlKHIpKX1lbHNlIGlmKG89PT1udWxsfHxQdS5oYXModHlwZW9mIG8pKW4ucHVzaChJZShgJHtvfWApKTtlbHNlIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQ6ICR7b31gKTtlLl96b2QucGF0dGVybj1uZXcgUmVnRXhwKGBeJHtuLmpvaW4oIiIpfSRgKSxlLl96b2QucGFyc2U9KG8scik9PnR5cGVvZiBvLnZhbHVlIT0ic3RyaW5nIj8oby5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6InN0cmluZyIsY29kZToiaW52YWxpZF90eXBlIn0pLG8pOihlLl96b2QucGF0dGVybi5sYXN0SW5kZXg9MCxlLl96b2QucGF0dGVybi50ZXN0KG8udmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0Pz8idGVtcGxhdGVfbGl0ZXJhbCIscGF0dGVybjplLl96b2QucGF0dGVybi5zb3VyY2V9KSxvKX0pLF9wPXAoIiRab2RGdW5jdGlvbiIsKGUsdCk9PihJLmluaXQoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2RlZiIse3ZhbHVlOnR9KSxlLl96b2QuZGVmPXQsZS5pbXBsZW1lbnQ9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50KCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9ZcihlLl9kZWYuaW5wdXQsbyk6byxzPVJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P1lyKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLmltcGxlbWVudEFzeW5jPW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudEFzeW5jKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhc3luYyBmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9hd2FpdCBYcihlLl9kZWYuaW5wdXQsbyk6byxzPWF3YWl0IFJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P2F3YWl0IFhyKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLl96b2QucGFyc2U9KG4sbyk9PnR5cGVvZiBuLnZhbHVlIT0iZnVuY3Rpb24iPyhuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJmdW5jdGlvbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxuKTooZS5fZGVmLm91dHB1dCYmZS5fZGVmLm91dHB1dC5fem9kLmRlZi50eXBlPT09InByb21pc2UiP24udmFsdWU9ZS5pbXBsZW1lbnRBc3luYyhuLnZhbHVlKTpuLnZhbHVlPWUuaW1wbGVtZW50KG4udmFsdWUpLG4pLGUuaW5wdXQ9KC4uLm4pPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBBcnJheS5pc0FycmF5KG5bMF0pP25ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6bmV3IFZzKHt0eXBlOiJ0dXBsZSIsaXRlbXM6blswXSxyZXN0Om5bMV19KSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pOm5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6blswXSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pfSxlLm91dHB1dD1uPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0OmUuX2RlZi5pbnB1dCxvdXRwdXQ6bn0pfSxlKSksa3A9cCgiJFpvZFByb21pc2UiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5Qcm9taXNlLnJlc29sdmUobi52YWx1ZSkudGhlbihyPT50LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pKX0pLEdzPXAoIiRab2RMYXp5IiwoZSx0KT0+e0kuaW5pdChlLHQpLHd1KGUuX3pvZCwiaW5uZXJUeXBlIiwoKT0+e2NvbnN0IG49dDtyZXR1cm4gbi5fY2FjaGVkSW5uZXJ8fChuLl9jYWNoZWRJbm5lcj10LmdldHRlcigpKSxuLl9jYWNoZWRJbm5lcn0pLEMoZSwicGF0dGVybiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnBhdHRlcm4pLEMoZSwicHJvcFZhbHVlcyIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnByb3BWYWx1ZXMpLEMoZSwib3B0aW4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRpbj8/dm9pZCAwKSxDKGUsIm9wdG91dCIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dD8/dm9pZCAwKSxlLl96b2QucGFyc2U9KG4sbyk9PmUuX3pvZC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLHdwPXAoIiRab2RDdXN0b20iLChlLHQpPT57SC5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5uLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz1uLnZhbHVlLHI9dC5mbihvKTtpZihyIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gci50aGVuKHM9PkdjKHMsbixvLGUpKTtHYyhyLG4sbyxlKX19KTtmdW5jdGlvbiBHYyhlLHQsbixvKXtpZighZSl7Y29uc3Qgcj17Y29kZToiY3VzdG9tIixpbnB1dDpuLGluc3Q6byxwYXRoOlsuLi5vLl96b2QuZGVmLnBhdGg/P1tdXSxjb250aW51ZTohby5fem9kLmRlZi5hYm9ydH07by5fem9kLmRlZi5wYXJhbXMmJihyLnBhcmFtcz1vLl96b2QuZGVmLnBhcmFtcyksdC5pc3N1ZXMucHVzaChvdChyKSl9fWNsYXNzICRwIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQ2Fubm90IHBhcnNlIGEgcmVmZXJlbmNlIGN5Y2xlIHRoYXQgY2xvc2VzIHRocm91Z2ggYSB0cmFuc2Zvcm0iKSx0aGlzLm5hbWU9IlpvZEN5Y2xpY0Vycm9yIn19Y29uc3Qgb3M9In5tZW1vIixRYz1bXTtmdW5jdGlvbiBTcChlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0In1mdW5jdGlvbiBCcihlKXtyZXR1cm4gZS5tYXAodD0+dC5wYXRoP3suLi50LHBhdGg6dC5wYXRoLnNsaWNlKCl9OnsuLi50fSl9Y29uc3QgenA9bmV3IFdlYWtNYXAsWGU9MCxubz0xLEN0PTI7ZnVuY3Rpb24gT3QoZSx0LG4pe2NvbnN0IG89enAuZ2V0KGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG8/Q3Q6WGU7aWYodC5oYXMoZSkpcmV0dXJuIEN0O3QuYWRkKGUpO2xldCByPVhlO2NvbnN0IHM9ZD0+e2lmKHIhPT1DdCYmZD8uX3pvZCl7Y29uc3QgbT1PdChkLHQsbik7bT5yJiYocj1tKX19LGk9KGQsbSk9PntsZXQgdj1YZTtmb3IoY29uc3QgYiBvZiBSZWZsZWN0Lm93bktleXMoZCkpe2NvbnN0IF89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGIpO2lmKCFfLmVudW1lcmFibGUpY29udGludWU7Y29uc3QgJD1fLmdldD9ubzpfLnZhbHVlPy5fem9kP090KF8udmFsdWUsdCxuKTpYZTskPnYmJih2PSQpfXJldHVybiB2fSxhPWQ9PntkPnImJihyPWQpfSxjPWUuX3pvZC5kZWY7c3dpdGNoKGMudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBkPXlvKGMpO2EoZD9pKGQpOm5vKSxzKGMuY2F0Y2hhbGwpO2JyZWFrfWNhc2UiYXJyYXkiOnMoYy5lbGVtZW50KTticmVhaztjYXNlInR1cGxlIjpmb3IoY29uc3QgZCBvZiBjLml0ZW1zKXMoZCk7cyhjLnJlc3QpO2JyZWFrO2Nhc2UicmVjb3JkIjpjYXNlIm1hcCI6cyhjLmtleVR5cGUpLHMoYy52YWx1ZVR5cGUpO2JyZWFrO2Nhc2Uic2V0IjpzKGMudmFsdWVUeXBlKTticmVhaztjYXNlInVuaW9uIjpmb3IoY29uc3QgZCBvZiBjLm9wdGlvbnMpcyhkKTticmVhaztjYXNlImludGVyc2VjdGlvbiI6cyhjLmxlZnQpLHMoYy5yaWdodCk7YnJlYWs7Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6cyhjLmlubmVyVHlwZSk7YnJlYWs7Y2FzZSJwaXBlIjpzKGMuaW4pLHMoYy5vdXQpO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnMoYy5pbnB1dCkscyhjLm91dHB1dCk7YnJlYWs7Y2FzZSJsYXp5Ijp7Y29uc3QgZD1jLl9jYWNoZWRJbm5lcj8/KG4/ZS5fem9kLmlubmVyVHlwZTp2b2lkIDApO2EoZD9PdChkLHQsITEpOm5vKTticmVha31jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6YnJlYWs7ZGVmYXVsdDpmb3IoY29uc3QgZCBpbiBjKXtjb25zdCBtPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxkKTtpZighbXx8bS5nZXQpY29udGludWU7Y29uc3Qgdj1tLnZhbHVlO2lmKCEoIXZ8fHR5cGVvZiB2IT0ib2JqZWN0Iikpe2lmKHYuX3pvZClzKHYpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh2KSlmb3IoY29uc3QgYiBvZiB2KXMoYil9fX1yZXR1cm4gdC5kZWxldGUoZSksUm0oZSxyKX1mdW5jdGlvbiBSbShlLHQpe3JldHVybiB0IT09bm8mJnpwLnNldChlLHQ9PT1DdCksdH1mdW5jdGlvbiBBbShlKXtyZXR1cm4gT3QoZSxuZXcgU2V0LCEwKSE9PVhlfWZ1bmN0aW9uIFptKGUsdCl7bGV0IG49ZS5idWNrZXRzLmdldCh0KTtyZXR1cm4gbnx8KG49bmV3IFdlYWtNYXAsZS5idWNrZXRzLnNldCh0LG4pKSxufWxldCBZbjtjb25zdCBYbj1bXSxObT17YWxsb2MoZSx0LG4pe2NvbnN0IG89WW47aWYoIW8pcmV0dXJuIG47WW49dm9pZCAwO2NvbnN0IHI9e3ZhbHVlOm4saXNzdWVzOm51bGx9O3JldHVybiBvLnNldCh0LnZhbHVlLHIpLFhuLnB1c2gociksbn0sZ3VhcmQoZSl7dmFyIHQ7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3Qgbj1lLl96b2QucGFyc2Usbz0ocixzKT0+e2lmKHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIiYmVHAocyxyLnZhbHVlKSl0aHJvdyBuZXcgJHA7cmV0dXJuIG4ocixzKX07ZS5fem9kLnBhcnNlPW8sZS5fem9kLnJ1bj09PW4mJihlLl96b2QucnVuPW8pfSl9LGF0dGFjaChlKXt2YXIgdDtsZXQgbixvPSExLHIsczsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBpPWUuX3pvZC5wYXJzZSxhPShjLHUpPT57aWYobj09PXZvaWQgMCl7Y29uc3QgUz1PdChlLG5ldyBTZXQsITEpO2lmKFM9PT1YZSlyZXR1cm4gZS5fem9kLnBhcnNlPWksZS5fem9kLnJ1bj09PWEmJihlLl96b2QucnVuPWkpLGkoYyx1KTtTPT09Q3R8fG8/bj0hMDpvPSEwfWNvbnN0IGQ9Yy52YWx1ZTtpZighU3AoZCkpcmV0dXJuIGkoYyx1KTtsZXQgbT11W29zXTttfHwobT17YnVja2V0czpuZXcgV2Vha01hcCxiYWNrRWRnZXM6dm9pZCAwfSx1W29zXT1tKTtsZXQgdjtyPT09dT92PXM6KHY9Wm0obSxlKSxyPXUscz12KTtjb25zdCBiPXYuZ2V0KGQpO2lmKGIpcmV0dXJuIGMudmFsdWU9Yi52YWx1ZSxiLmlzc3Vlcz9iLmlzc3Vlcy5sZW5ndGgmJmMuaXNzdWVzLnB1c2goLi4uQnIoYi5pc3N1ZXMpKTooYy5tZW1vPSEwLG0uYmFja0VkZ2VzPz8obS5iYWNrRWRnZXM9bmV3IFdlYWtTZXQpLG0uYmFja0VkZ2VzLmFkZChiLnZhbHVlKSksYztZbj12O2NvbnN0IF89WG4ubGVuZ3RoLCQ9aShjLHUpO1luPXZvaWQgMDtjb25zdCBrPVhuLmxlbmd0aD5fP1huLnBvcCgpOnZvaWQgMDtyZXR1cm4gJCBpbnN0YW5jZW9mIFByb21pc2U/JC50aGVuKFM9PihrJiYoay5pc3N1ZXM9Uy5pc3N1ZXMubGVuZ3RoP0JyKFMuaXNzdWVzKTpRYyksUykpOihrJiYoay5pc3N1ZXM9JC5pc3N1ZXMubGVuZ3RoP0JyKCQuaXNzdWVzKTpRYyksJCl9O2UuX3pvZC5wYXJzZT1hLGUuX3pvZC5ydW49PT1pJiYoZS5fem9kLnJ1bj1hKX0pfX07ZnVuY3Rpb24gWm8oKXtyZXR1cm4gTm19ZnVuY3Rpb24gVHAoZSx0KXtjb25zdCBuPWVbb3NdPy5iYWNrRWRnZXM7cmV0dXJuIG4hPT12b2lkIDAmJlNwKHQpJiZuLmhhcyh0KX1jb25zdCBqbT0oKT0+e2NvbnN0IGU9e3N0cmluZzp7dW5pdDoiY2hhcmFjdGVycyIsdmVyYjoidG8gaGF2ZSJ9LGZpbGU6e3VuaXQ6ImJ5dGVzIix2ZXJiOiJ0byBoYXZlIn0sYXJyYXk6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sc2V0Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LG1hcDp7dW5pdDoiZW50cmllcyIsdmVyYjoidG8gaGF2ZSJ9fTtmdW5jdGlvbiB0KHMpe3JldHVybiBlW3NdPz9udWxsfWNvbnN0IG49e3JlZ2V4OiJpbnB1dCIsZW1haWw6ImVtYWlsIGFkZHJlc3MiLHVybDoiVVJMIixlbW9qaToiZW1vamkiLHV1aWQ6IlVVSUQiLHV1aWR2NDoiVVVJRHY0Iix1dWlkdjY6IlVVSUR2NiIsbmFub2lkOiJuYW5vaWQiLGd1aWQ6IkdVSUQiLGN1aWQ6ImN1aWQiLGN1aWQyOiJjdWlkMiIsdWxpZDoiVUxJRCIseGlkOiJYSUQiLGtzdWlkOiJLU1VJRCIsZGF0ZXRpbWU6IklTTyBkYXRldGltZSIsZGF0ZToiSVNPIGRhdGUiLHRpbWU6IklTTyB0aW1lIixkdXJhdGlvbjoiSVNPIGR1cmF0aW9uIixpcHY0OiJJUHY0IGFkZHJlc3MiLGlwdjY6IklQdjYgYWRkcmVzcyIsbWFjOiJNQUMgYWRkcmVzcyIsY2lkcnY0OiJJUHY0IHJhbmdlIixjaWRydjY6IklQdjYgcmFuZ2UiLGJhc2U2NDoiYmFzZTY0LWVuY29kZWQgc3RyaW5nIixiYXNlNjR1cmw6ImJhc2U2NHVybC1lbmNvZGVkIHN0cmluZyIsanNvbl9zdHJpbmc6IkpTT04gc3RyaW5nIixlMTY0OiJFLjE2NCBudW1iZXIiLGN1cnJlbmN5X2NvZGU6ImN1cnJlbmN5IGNvZGUiLGNyZWRpdF9jYXJkOiJjcmVkaXQgY2FyZCBudW1iZXIiLGliYW46IklCQU4iLGp3dDoiSldUIix0ZW1wbGF0ZV9saXRlcmFsOiJpbnB1dCJ9LG89e25hbjoiTmFOIn07ZnVuY3Rpb24gcihzLGkpe3JldHVybiBzPT09Im51bWJlciImJnR5cGVvZiBpPT0ibnVtYmVyIiYmIU51bWJlci5pc0Zpbml0ZShpKT9TdHJpbmcoaSk6b1tzXT8/c31yZXR1cm4gcz0+e3N3aXRjaChzLmNvZGUpe2Nhc2UiaW52YWxpZF90eXBlIjp7Y29uc3QgaT1yKHMuZXhwZWN0ZWQpLGE9RHUocy5pbnB1dCksYz1yKGEscy5pbnB1dCk7cmV0dXJuYEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7aX0sIHJlY2VpdmVkICR7Y31gfWNhc2UiaW52YWxpZF92YWx1ZSI6cmV0dXJuIHMudmFsdWVzLmxlbmd0aD09PTE/YEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7aHMocy52YWx1ZXNbMF0pfWA6YEludmFsaWQgb3B0aW9uOiBleHBlY3RlZCBvbmUgb2YgJHtXcihzLnZhbHVlcywifCIpfWA7Y2FzZSJ0b29fYmlnIjp7Y29uc3QgaT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ijw9IjoiPCIsYT10KHMub3JpZ2luKTtyZXR1cm4gYT9gVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gaGF2ZSAke2l9JHtzLm1heGltdW0udG9TdHJpbmcoKX0gJHthLnVuaXQ/PyJlbGVtZW50cyJ9YDpgVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gYmUgJHtpfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9YH1jYXNlInRvb19zbWFsbCI6e2NvbnN0IGk9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI+PSI6Ij4iLGE9dChzLm9yaWdpbik7cmV0dXJuIGE/YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gaGF2ZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX0gJHthLnVuaXR9YDpgVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBiZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX1gfWNhc2UiaW52YWxpZF9mb3JtYXQiOntjb25zdCBpPXM7cmV0dXJuIGkuZm9ybWF0PT09InN0YXJ0c193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3Qgc3RhcnQgd2l0aCAiJHtpLnByZWZpeH0iYDppLmZvcm1hdD09PSJlbmRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBlbmQgd2l0aCAiJHtpLnN1ZmZpeH0iYDppLmZvcm1hdD09PSJpbmNsdWRlcyI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGluY2x1ZGUgIiR7aS5pbmNsdWRlc30iYDppLmZvcm1hdD09PSJyZWdleCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IG1hdGNoIHBhdHRlcm4gJHtpLnBhdHRlcm59YDpgSW52YWxpZCAke25baS5mb3JtYXRdPz9zLmZvcm1hdH1gfWNhc2Uibm90X211bHRpcGxlX29mIjpyZXR1cm5gSW52YWxpZCBudW1iZXI6IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke3MuZGl2aXNvcn1gO2Nhc2UidW5yZWNvZ25pemVkX2tleXMiOnJldHVybmBVbnJlY29nbml6ZWQga2V5JHtzLmtleXMubGVuZ3RoPjE/InMiOiIifTogJHtXcihzLmtleXMsIiwgIil9YDtjYXNlImludmFsaWRfa2V5IjpyZXR1cm5gSW52YWxpZCBrZXkgaW4gJHtzLm9yaWdpbn1gO2Nhc2UiaW52YWxpZF91bmlvbiI6cmV0dXJuIHMub3B0aW9ucyYmQXJyYXkuaXNBcnJheShzLm9wdGlvbnMpJiZzLm9wdGlvbnMubGVuZ3RoPjA/YEludmFsaWQgZGlzY3JpbWluYXRvciB2YWx1ZS4gRXhwZWN0ZWQgJHtzLm9wdGlvbnMubWFwKGE9PmAnJHthfSdgKS5qb2luKCIgfCAiKX1gOnMuaW5jbHVzaXZlPT09ITE/IkludmFsaWQgaW5wdXQ6IG1vcmUgdGhhbiBvbmUgb3B0aW9uIG1hdGNoZWQiOiJJbnZhbGlkIGlucHV0IjtjYXNlImludmFsaWRfZWxlbWVudCI6cmV0dXJuYEludmFsaWQgdmFsdWUgaW4gJHtzLm9yaWdpbn1gO2RlZmF1bHQ6cmV0dXJuIkludmFsaWQgaW5wdXQifX19O2Z1bmN0aW9uIElwKCl7cmV0dXJue2xvY2FsZUVycm9yOmptKCl9fWNvbnN0IFFzPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbjpJcH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgWWM7Y29uc3QgWXM9U3ltYm9sKCJab2RPdXRwdXQiKSxYcz1TeW1ib2woIlpvZElucHV0Iik7Y2xhc3MgUHB7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcH1hZGQodCwuLi5uKXtjb25zdCBvPW5bMF07cmV0dXJuIHRoaXMuX21hcC5zZXQodCxvKSxvJiZ0eXBlb2Ygbz09Im9iamVjdCImJiJpZCJpbiBvJiZ0aGlzLl9pZG1hcC5zZXQoby5pZCx0KSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwLHRoaXN9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtyZXR1cm4gbiYmdHlwZW9mIG49PSJvYmplY3QiJiYiaWQiaW4gbiYmdGhpcy5faWRtYXAuZGVsZXRlKG4uaWQpLHRoaXMuX21hcC5kZWxldGUodCksdGhpc31nZXQodCl7Y29uc3Qgbj10Ll96b2QucGFyZW50O2lmKG4pe2NvbnN0IG89ey4uLnRoaXMuZ2V0KG4pPz97fX07ZGVsZXRlIG8uaWQ7Y29uc3Qgcj17Li4ubywuLi50aGlzLl9tYXAuZ2V0KHQpfTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoP3I6dm9pZCAwfXJldHVybiB0aGlzLl9tYXAuZ2V0KHQpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX19ZnVuY3Rpb24gTm8oKXtyZXR1cm4gbmV3IFBwfShZYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxSZWdpc3RyeT8/KFljLl9fem9kX2dsb2JhbFJlZ2lzdHJ5PU5vKCkpO2NvbnN0IGhlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsUmVnaXN0cnksZWk9KCk9Pnt0aHJvdyBuZXcgRXJyb3IoInpvZCBjb21waWxlKCkgaXMgbm90IGJ1bmRsZWQgaW50byBjYXJkcyAtIHNlZSBwYWNrYWdlcy9pbnRlcm5hbC9jYXJkLWtpdC92aXRlLXNsaW0ubWpzIil9O2NsYXNzIHRpIGV4dGVuZHMgRXJyb3J7fWNsYXNzIG5pIGV4dGVuZHMgRXJyb3J7fWNsYXNzIG9pIGV4dGVuZHMgRXJyb3J7fWNvbnN0IHJpPWVpLHNpPWVpLE1tPWVpO2Z1bmN0aW9uIGpvKGUpe3JldHVybiBlLmNoZWNrcyYmKGUuY2hlY2tzPVsuLi5lLmNoZWNrc10pLGV9ZnVuY3Rpb24geHAoZSx0KXtyZXR1cm4gbmV3IGUoam8oe3R5cGU6InN0cmluZyIsLi4ueSh0KX0pKX1mdW5jdGlvbiBFcChlLHQpe3JldHVybiBuZXcgZShqbyh7dHlwZToic3RyaW5nIixjb2VyY2U6ITAsLi4ueSh0KX0pKX1mdW5jdGlvbiBpaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtYWlsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIGFpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZ3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBjaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gdWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjQiLC4uLnkodCl9KX1mdW5jdGlvbiBsaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY3IiwuLi55KHQpfSl9ZnVuY3Rpb24gTW8oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gcGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbW9qaSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBmaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im5hbm9pZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBoaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gbWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkMiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBnaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVsaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gdmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ4aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gYmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJrc3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiB5aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gX2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIENwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibWFjIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIGtpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHdpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uICRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFNpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0dXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZTE2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBPcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNyZWRpdF9jYXJkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFJwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaWJhbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBUaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imp3dCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1jb25zdCBJaT17QW55Om51bGwsTWludXRlOi0xLFNlY29uZDowLE1pbGxpc2Vjb25kOjMsTWljcm9zZWNvbmQ6Nn07ZnVuY3Rpb24gUGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRldGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLG9mZnNldDohMSxsb2NhbDohMSxwcmVjaXNpb246bnVsbCwuLi55KHQpfSl9ZnVuY3Rpb24geGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRlIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEVpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLHByZWNpc2lvbjpudWxsLC4uLnkodCl9KX1mdW5jdGlvbiBDaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImR1cmF0aW9uIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEFwKGUsdCl7cmV0dXJuIG5ldyBlKGpvKHt0eXBlOiJudW1iZXIiLGNoZWNrczpbXSwuLi55KHQpfSkpfWZ1bmN0aW9uIFpwKGUsdCl7cmV0dXJuIG5ldyBlKGpvKHt0eXBlOiJudW1iZXIiLGNvZXJjZTohMCxjaGVja3M6W10sLi4ueSh0KX0pKX1mdW5jdGlvbiBOcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJzYWZlaW50IiwuLi55KHQpfSl9ZnVuY3Rpb24ganAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIE1wKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBxcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIERwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIExwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIiwuLi55KHQpfSl9ZnVuY3Rpb24gVXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gSHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEZwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gQnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBWcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBKcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3ltYm9sIiwuLi55KHQpfSl9ZnVuY3Rpb24gS3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuZGVmaW5lZCIsLi4ueSh0KX0pfWZ1bmN0aW9uIFdwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsIiwuLi55KHQpfSl9ZnVuY3Rpb24gR3AoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJhbnkifSl9ZnVuY3Rpb24gUXAoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmtub3duIn0pfWZ1bmN0aW9uIFlwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuZXZlciIsLi4ueSh0KX0pfWZ1bmN0aW9uIFhwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ2b2lkIiwuLi55KHQpfSl9ZnVuY3Rpb24gZWYoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLC4uLnkodCl9KX1mdW5jdGlvbiB0ZihlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsY29lcmNlOiEwLC4uLnkodCl9KX1mdW5jdGlvbiBuZihlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmFuIiwuLi55KHQpfSl9ZnVuY3Rpb24geGUoZSx0KXtyZXR1cm4gbmV3IEFzKHtjaGVjazoibGVzc190aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gdWUoZSx0KXtyZXR1cm4gbmV3IEFzKHtjaGVjazoibGVzc190aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gRWUoZSx0KXtyZXR1cm4gbmV3IFpzKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gbGUoZSx0KXtyZXR1cm4gbmV3IFpzKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gcW8oZSl7cmV0dXJuIEVlKDAsZSl9ZnVuY3Rpb24gRG8oZSl7cmV0dXJuIHhlKDAsZSl9ZnVuY3Rpb24gTG8oZSl7cmV0dXJuIHVlKDAsZSl9ZnVuY3Rpb24gVW8oZSl7cmV0dXJuIGxlKDAsZSl9ZnVuY3Rpb24gQmUoZSx0KXtyZXR1cm4gbmV3IE9sKHtjaGVjazoibXVsdGlwbGVfb2YiLC4uLnkodCksdmFsdWU6ZX0pfWZ1bmN0aW9uIEdlKGUsdCl7cmV0dXJuIG5ldyBabCh7Y2hlY2s6Im1heF9zaXplIiwuLi55KHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIENlKGUsdCl7cmV0dXJuIG5ldyBObCh7Y2hlY2s6Im1pbl9zaXplIiwuLi55KHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIGx0KGUsdCl7cmV0dXJuIG5ldyBqbCh7Y2hlY2s6InNpemVfZXF1YWxzIiwuLi55KHQpLHNpemU6ZX0pfWZ1bmN0aW9uIGR0KGUsdCl7cmV0dXJuIG5ldyBNbCh7Y2hlY2s6Im1heF9sZW5ndGgiLC4uLnkodCksbWF4aW11bTplfSl9ZnVuY3Rpb24gamUoZSx0KXtyZXR1cm4gbmV3IHFsKHtjaGVjazoibWluX2xlbmd0aCIsLi4ueSh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiBwdChlLHQpe3JldHVybiBuZXcgRGwoe2NoZWNrOiJsZW5ndGhfZXF1YWxzIiwuLi55KHQpLGxlbmd0aDplfSl9ZnVuY3Rpb24gWXQoZSx0KXtyZXR1cm4gbmV3IExsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsLi4ueSh0KSxwYXR0ZXJuOmV9KX1mdW5jdGlvbiBYdChlKXtyZXR1cm4gbmV3IFVsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJsb3dlcmNhc2UiLC4uLnkoZSl9KX1mdW5jdGlvbiBlbihlKXtyZXR1cm4gbmV3IEhsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJ1cHBlcmNhc2UiLC4uLnkoZSl9KX1mdW5jdGlvbiB0bihlLHQpe3JldHVybiBuZXcgRmwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImluY2x1ZGVzIiwuLi55KHQpLGluY2x1ZGVzOmV9KX1mdW5jdGlvbiBubihlLHQpe3JldHVybiBuZXcgQmwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIiwuLi55KHQpLHByZWZpeDplfSl9ZnVuY3Rpb24gb24oZSx0KXtyZXR1cm4gbmV3IFZsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLC4uLnkodCksc3VmZml4OmV9KX1mdW5jdGlvbiBIbyhlLHQsbil7cmV0dXJuIG5ldyBKbCh7Y2hlY2s6InByb3BlcnR5Iixwcm9wZXJ0eTplLHNjaGVtYTp0LC4uLnkobil9KX1mdW5jdGlvbiBybihlLHQpe3JldHVybiBuZXcgS2woe2NoZWNrOiJwcm9wZXJ0aWVzIixzaGFwZTplLC4uLnkodCl9KX1mdW5jdGlvbiBzbihlLHQpe3JldHVybiBuZXcgV2woe2NoZWNrOiJtaW1lX3R5cGUiLG1pbWU6ZSwuLi55KHQpfSl9ZnVuY3Rpb24gJGUoZSl7cmV0dXJuIG5ldyBHbCh7Y2hlY2s6Im92ZXJ3cml0ZSIsdHg6ZX0pfWZ1bmN0aW9uIGFuKGUpe3JldHVybiAkZSh0PT50Lm5vcm1hbGl6ZShlKSl9ZnVuY3Rpb24gY24oKXtyZXR1cm4gJGUoZT0+ZS50cmltKCkpfWZ1bmN0aW9uIHVuKCl7cmV0dXJuICRlKGU9PmUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gbG4oKXtyZXR1cm4gJGUoZT0+ZS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBkbigpe3JldHVybiAkZShlPT5UdShlKSl9ZnVuY3Rpb24gb2YoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiYXJyYXkiLGVsZW1lbnQ6dCwuLi55KG4pfSl9ZnVuY3Rpb24gcW0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCwuLi55KG4pfSl9ZnVuY3Rpb24gRG0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCxpbmNsdXNpdmU6ITEsLi4ueShuKX0pfWZ1bmN0aW9uIExtKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6bixkaXNjcmltaW5hdG9yOnQsLi4ueShvKX0pfWZ1bmN0aW9uIFVtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDp0LHJpZ2h0Om59KX1mdW5jdGlvbiBIbShlLHQsbixvKXtjb25zdCByPW4gaW5zdGFuY2VvZiBJLHM9cj9vOm4saT1yP246bnVsbDtyZXR1cm4gbmV3IGUoe3R5cGU6InR1cGxlIixpdGVtczp0LHJlc3Q6aSwuLi55KHMpfSl9ZnVuY3Rpb24gRm0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi55KG8pfSl9ZnVuY3Rpb24gQm0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJtYXAiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi55KG8pfSl9ZnVuY3Rpb24gVm0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToic2V0Iix2YWx1ZVR5cGU6dCwuLi55KG4pfSl9ZnVuY3Rpb24gSm0oZSx0LG4pe2NvbnN0IG89QXJyYXkuaXNBcnJheSh0KT9PYmplY3QuZnJvbUVudHJpZXModC5tYXAocj0+W3Iscl0pKTp0O3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczpvLC4uLnkobil9KX1mdW5jdGlvbiBLbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFdtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KHQpP3Q6W3RdLC4uLnkobil9KX1mdW5jdGlvbiByZihlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZmlsZSIsLi4ueSh0KX0pfWZ1bmN0aW9uIEdtKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTp0fSl9ZnVuY3Rpb24gUW0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIFltKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBYbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJkZWZhdWx0Iixpbm5lclR5cGU6dCxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP24oKTpfbyhuKX19KX1mdW5jdGlvbiBlZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIHRnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdWNjZXNzIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIG5nKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6dCxjYXRjaFZhbHVlOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246bXMobil9KX1mdW5jdGlvbiBvZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJwaXBlIixpbjp0LG91dDpufSl9ZnVuY3Rpb24gcmcoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHNnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOnQsLi4ueShuKX0pfWZ1bmN0aW9uIGlnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJsYXp5IixnZXR0ZXI6dH0pfWZ1bmN0aW9uIGFnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHNmKGUsdCxuKXtjb25zdCBvPXkobik7cmV0dXJuIG8uYWJvcnQ/PyhvLmFib3J0PSEwKSxuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLm99KX1mdW5jdGlvbiBhZihlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4ueShuKX0pfWZ1bmN0aW9uIGNmKGUsdCl7Y29uc3Qgbj11ZihvPT4oby5hZGRJc3N1ZT1yPT57aWYodHlwZW9mIHI9PSJzdHJpbmciKW8uaXNzdWVzLnB1c2gob3QocixvLnZhbHVlLG4uX3pvZC5kZWYpKTtlbHNle2NvbnN0IHM9cjtzLmZhdGFsJiYocy5jb250aW51ZT0hMSkscy5jb2RlPz8ocy5jb2RlPSJjdXN0b20iKSwiaW5wdXQiaW4gc3x8KHMuaW5wdXQ9by52YWx1ZSkscy5pbnN0Pz8ocy5pbnN0PW4pLHMuY29udGludWU/PyhzLmNvbnRpbnVlPSFuLl96b2QuZGVmLmFib3J0KSxvLmlzc3Vlcy5wdXNoKG90KHMpKX19LGUoby52YWx1ZSxvKSksdCk7cmV0dXJuIG59ZnVuY3Rpb24gdWYoZSx0KXtjb25zdCBuPW5ldyBIKHtjaGVjazoiY3VzdG9tIiwuLi55KHQpfSk7cmV0dXJuIG4uX3pvZC5jaGVjaz1lLG59ZnVuY3Rpb24gbGYoZSl7Y29uc3QgdD1uZXcgSCh7Y2hlY2s6ImRlc2NyaWJlIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWhlLmdldChuKT8/e307aGUuYWRkKG4sey4uLm8sZGVzY3JpcHRpb246ZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIGRmKGUpe2NvbnN0IHQ9bmV3IEgoe2NoZWNrOiJtZXRhIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWhlLmdldChuKT8/e307aGUuYWRkKG4sey4uLm8sLi4uZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIHBmKGUsdCl7Y29uc3Qgbj15KHQpO2xldCBvPW4udHJ1dGh5Pz9bInRydWUiLCIxIiwieWVzIiwib24iLCJ5IiwiZW5hYmxlZCJdLHI9bi5mYWxzeT8/WyJmYWxzZSIsIjAiLCJubyIsIm9mZiIsIm4iLCJkaXNhYmxlZCJdO24uY2FzZSE9PSJzZW5zaXRpdmUiJiYobz1vLm1hcChiPT50eXBlb2YgYj09InN0cmluZyI/Yi50b0xvd2VyQ2FzZSgpOmIpLHI9ci5tYXAoYj0+dHlwZW9mIGI9PSJzdHJpbmciP2IudG9Mb3dlckNhc2UoKTpiKSk7Y29uc3Qgcz1uZXcgU2V0KG8pLGk9bmV3IFNldChyKSxhPWUuQ29kZWM/P1dzLGM9ZS5Cb29sZWFuPz9Icyx1PWUuU3RyaW5nPz9RdCxkPW5ldyB1KHt0eXBlOiJzdHJpbmciLGVycm9yOm4uZXJyb3J9KSxtPW5ldyBjKHt0eXBlOiJib29sZWFuIixlcnJvcjpuLmVycm9yfSksdj1uZXcgYSh7dHlwZToicGlwZSIsaW46ZCxvdXQ6bSx0cmFuc2Zvcm06KChiLF8pPT57bGV0ICQ9YjtyZXR1cm4gbi5jYXNlIT09InNlbnNpdGl2ZSImJigkPSQudG9Mb3dlckNhc2UoKSkscy5oYXMoJCk/ITA6aS5oYXMoJCk/ITE6KF8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLGV4cGVjdGVkOiJzdHJpbmdib29sIix2YWx1ZXM6Wy4uLnMsLi4uaV0saW5wdXQ6Xy52YWx1ZSxpbnN0OnYsY29udGludWU6ITF9KSx7fSl9KSxyZXZlcnNlVHJhbnNmb3JtOigoYixfKT0+Yj09PSEwP29bMF18fCJ0cnVlIjpyWzBdfHwiZmFsc2UiKSxlcnJvcjpuLmVycm9yfSk7cmV0dXJuIHYuX3pvZC5iYWcudHJ1dGh5PW8sdi5fem9kLmJhZy5mYWxzeT1yLHYuX3pvZC5iYWcuY2FzZT1uLmNhc2U/PyJpbnNlbnNpdGl2ZSIsdn1mdW5jdGlvbiBmdChlLHQsbixvPXt9KXtjb25zdCByPXkobykscz17Y2hlY2s6InN0cmluZ19mb3JtYXQiLHR5cGU6InN0cmluZyIsZm9ybWF0OnQsZm46dHlwZW9mIG49PSJmdW5jdGlvbiI/bjphPT5uLnRlc3QoYSksLi4ucn07cmV0dXJuIG4gaW5zdGFuY2VvZiBSZWdFeHAmJihzLnBhdHRlcm49biksbmV3IGUocyl9Y29uc3QgY2c9KCk9Pih7fSksdWc9KCk9Pih7fSksbGc9KCk9Pih7fSksZGc9KCk9Pih7fSkscGc9KCk9Pih7fSksZmY9KCk9PigpPT4oe30pLHJzPSgpPT4oKT0+KHt9KSxmZz0oKT0+KHt9KSxtZT0oKT0+KHt9KSxoZz0oKT0+KHt9KSxtZz0oKT0+KHt9KSxnZz0oKT0+KHt9KSx2Zz0oKT0+KHt9KSxiZz0oKT0+KHt9KSx5Zz0oKT0+KHt9KSxfZz0oKT0+KHt9KSxrZz0oKT0+KHt9KSx3Zz0oKT0+KHt9KSwkZz0oKT0+KHt9KSxTZz0oKT0+KHt9KSx6Zz0oKT0+KHt9KSxUZz0oKT0+KHt9KSxJZz0oKT0+KHt9KSxQZz0oKT0+KHt9KSx4Zz0oKT0+KHt9KSxFZz0oKT0+KHt9KSxDZz0oKT0+KHt9KSxPZz0oKT0+KHt9KSxSZz0oKT0+KHt9KSxBZz0oKT0+KHt9KSxaZz0oKT0+KHt9KSxOZz0oKT0+KHt9KSxqZz0oKT0+KHt9KSxNZz0oKT0+KHt9KSxoZj0oKT0+KHt9KSxxZz0oKT0+KHt9KSxEZz0oKT0+KHt9KSxMZz0oKT0+KHt9KSxVZz0oKT0+KHt9KSxIZz0oKT0+KHt9KSxGZz0oKT0+KHt9KSxCZz0oKT0+KHt9KSxWZz0oKT0+KHt9KSxKZz0oKT0+KHt9KSxLZz0oKT0+KHt9KSxXZz0oKT0+KHt9KSxtZj0oKT0+KHt9KSxHZz0oKT0+KHt9KSxPaT0oKT0+KHt9KTtjbGFzcyBRZ3t9Y29uc3QgWWc9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLGdmPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkWm9kQW55OlVkLCRab2RBcnJheTpKZCwkWm9kQXN5bmNFcnJvcjpaZSwkWm9kQmFzZTY0OlRkLCRab2RCYXNlNjRVUkw6UGQsJFpvZEJpZ0ludDpGcywkWm9kQmlnSW50Rm9ybWF0Ok1kLCRab2RCb29sZWFuOkhzLCRab2RDSURSdjQ6d2QsJFpvZENJRFJ2NjpTZCwkWm9kQ1VJRDpsZCwkWm9kQ1VJRDI6ZGQsJFpvZENhdGNoOm1wLCRab2RDaGVjazpILCRab2RDaGVja0JpZ0ludEZvcm1hdDpBbCwkWm9kQ2hlY2tFbmRzV2l0aDpWbCwkWm9kQ2hlY2tHcmVhdGVyVGhhbjpacywkWm9kQ2hlY2tJbmNsdWRlczpGbCwkWm9kQ2hlY2tMZW5ndGhFcXVhbHM6RGwsJFpvZENoZWNrTGVzc1RoYW46QXMsJFpvZENoZWNrTG93ZXJDYXNlOlVsLCRab2RDaGVja01heExlbmd0aDpNbCwkWm9kQ2hlY2tNYXhTaXplOlpsLCRab2RDaGVja01pbWVUeXBlOldsLCRab2RDaGVja01pbkxlbmd0aDpxbCwkWm9kQ2hlY2tNaW5TaXplOk5sLCRab2RDaGVja011bHRpcGxlT2Y6T2wsJFpvZENoZWNrTnVtYmVyRm9ybWF0OlJsLCRab2RDaGVja092ZXJ3cml0ZTpHbCwkWm9kQ2hlY2tQcm9wZXJ0aWVzOktsLCRab2RDaGVja1Byb3BlcnR5OkpsLCRab2RDaGVja1JlZ2V4OkxsLCRab2RDaGVja1NpemVFcXVhbHM6amwsJFpvZENoZWNrU3RhcnRzV2l0aDpCbCwkWm9kQ2hlY2tTdHJpbmdGb3JtYXQ6R3QsJFpvZENoZWNrVXBwZXJDYXNlOkhsLCRab2RDb2RlYzpXcywkWm9kQ3JlZGl0Q2FyZDpDZCwkWm9kQ3VzdG9tOndwLCRab2RDdXN0b21TdHJpbmdGb3JtYXQ6TmQsJFpvZEN5Y2xpY0Vycm9yOiRwLCRab2REYXRlOlZkLCRab2REZWZhdWx0OmRwLCRab2REaXNjcmltaW5hdGVkVW5pb246ZXAsJFpvZEUxNjQ6eGQsJFpvZEVtYWlsOm5kLCRab2RFbW9qaTpjZCwkWm9kRW5jb2RlRXJyb3I6VG8sJFpvZEVudW06c3AsJFpvZEVycm9yOkp1LCRab2RFeGFjdE9wdGlvbmFsOnVwLCRab2RGaWxlOmFwLCRab2RGdW5jdGlvbjpfcCwkWm9kR1VJRDplZCwkWm9kSUJBTjpSZCwkWm9kSVB2NDp5ZCwkWm9kSVB2NjpfZCwkWm9kSVNPRGF0ZTpnZCwkWm9kSVNPRGF0ZVRpbWU6bWQsJFpvZElTT0R1cmF0aW9uOmJkLCRab2RJU09UaW1lOnZkLCRab2RJbnRlcnNlY3Rpb246dHAsJFpvZEpXVDpaZCwkWm9kS1NVSUQ6aGQsJFpvZExhenk6R3MsJFpvZExpdGVyYWw6aXAsJFpvZE1BQzprZCwkWm9kTWFwOm9wLCRab2ROYU46Z3AsJFpvZE5hbm9JRDp1ZCwkWm9kTmV2ZXI6RmQsJFpvZE5vbk9wdGlvbmFsOmZwLCRab2ROdWxsOkxkLCRab2ROdWxsYWJsZTpscCwkWm9kTnVtYmVyOlVzLCRab2ROdW1iZXJGb3JtYXQ6amQsJFpvZE9iamVjdDpHZCwkWm9kT2JqZWN0SklUOlFkLCRab2RPcHRpb25hbDpKcywkWm9kUGlwZTpLcywkWm9kUHJlZmF1bHQ6cHAsJFpvZFByZXByb2Nlc3M6dnAsJFpvZFByb21pc2U6a3AsJFpvZFJlYWRvbmx5OmJwLCRab2RSZWFsRXJyb3I6ZGUsJFpvZFJlY29yZDpucCwkWm9kUmVnaXN0cnk6UHAsJFpvZFNldDpycCwkWm9kU3RyaW5nOlF0LCRab2RTdHJpbmdGb3JtYXQ6cSwkWm9kU3VjY2VzczpocCwkWm9kU3ltYm9sOnFkLCRab2RUZW1wbGF0ZUxpdGVyYWw6eXAsJFpvZFRyYW5zZm9ybTpjcCwkWm9kVHVwbGU6VnMsJFpvZFR5cGU6SSwkWm9kVUxJRDpwZCwkWm9kVVJMOmFkLCRab2RVVUlEOnRkLCRab2RVbmRlZmluZWQ6RGQsJFpvZFVuaW9uOkFvLCRab2RVbmtub3duOkhkLCRab2RWb2lkOkJkLCRab2RYSUQ6ZmQsJFpvZFhvcjpZZCwkYnJhbmQ6YnMsJGNvbnN0cnVjdG9yOnAsJGlucHV0OlhzLCRvdXRwdXQ6WXMsRG9jOlFsLElOVkFMSUQ6dGksSlNPTlNjaGVtYTpZZyxKU09OU2NoZW1hR2VuZXJhdG9yOlFnLE5FVkVSOnZzLFRpbWVQcmVjaXNpb246SWksVVJMX0JBRF9GT1JNQVQ6anMsVVJMX1VOUEFSU0VBQkxFOk50LFpvZENvbXBpbGVBc3luY0Vycm9yOm5pLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOm9pLF9hbnk6R3AsX2FycmF5Om9mLF9iYXNlNjQ6JGksX2Jhc2U2NHVybDpTaSxfYmlnaW50OkhwLF9ib29sZWFuOkxwLF9jYXRjaDpuZyxfY2hlY2s6dWYsX2NpZHJ2NDpraSxfY2lkcnY2OndpLF9jb2VyY2VkQmlnaW50OkZwLF9jb2VyY2VkQm9vbGVhbjpVcCxfY29lcmNlZERhdGU6dGYsX2NvZXJjZWROdW1iZXI6WnAsX2NvZXJjZWRTdHJpbmc6RXAsX2NyZWRpdENhcmQ6T3AsX2N1aWQ6aGksX2N1aWQyOm1pLF9jdXN0b206c2YsX2RhdGU6ZWYsX2RlY29kZTp3cyxfZGVjb2RlQXN5bmM6U3MsX2RlZmF1bHQ6WG0sX2Rpc2NyaW1pbmF0ZWRVbmlvbjpMbSxfZTE2NDp6aSxfZW1haWw6aWksX2Vtb2ppOnBpLF9lbmNvZGU6a3MsX2VuY29kZUFzeW5jOiRzLF9lbmRzV2l0aDpvbixfZW51bTpKbSxfZmlsZTpyZixfZmxvYXQzMjpqcCxfZmxvYXQ2NDpNcCxfZ3Q6RWUsX2d0ZTpsZSxfZ3VpZDphaSxfaWJhbjpScCxfaW5jbHVkZXM6dG4sX2ludDpOcCxfaW50MzI6cXAsX2ludDY0OkJwLF9pbnRlcnNlY3Rpb246VW0sX2lwdjQ6eWksX2lwdjY6X2ksX2lzb0RhdGU6eGksX2lzb0RhdGVUaW1lOlBpLF9pc29EdXJhdGlvbjpDaSxfaXNvVGltZTpFaSxfand0OlRpLF9rc3VpZDpiaSxfbGF6eTppZyxfbGVuZ3RoOnB0LF9saXRlcmFsOldtLF9sb3dlcmNhc2U6WHQsX2x0OnhlLF9sdGU6dWUsX21hYzpDcCxfbWFwOkJtLF9tYXg6dWUsX21heExlbmd0aDpkdCxfbWF4U2l6ZTpHZSxfbWltZTpzbixfbWluOmxlLF9taW5MZW5ndGg6amUsX21pblNpemU6Q2UsX211bHRpcGxlT2Y6QmUsX25hbjpuZixfbmFub2lkOmZpLF9uYXRpdmVFbnVtOkttLF9uZWdhdGl2ZTpEbyxfbmV2ZXI6WXAsX25vbm5lZ2F0aXZlOlVvLF9ub25vcHRpb25hbDplZyxfbm9ucG9zaXRpdmU6TG8sX25vcm1hbGl6ZTphbixfbnVsbDpXcCxfbnVsbGFibGU6WW0sX251bWJlcjpBcCxfb3B0aW9uYWw6UW0sX292ZXJ3cml0ZTokZSxfcGFyc2U6RnQsX3BhcnNlQXN5bmM6QnQsX3BpcGU6b2csX3Bvc2l0aXZlOnFvLF9wcm9taXNlOmFnLF9wcm9wZXJ0aWVzOnJuLF9wcm9wZXJ0eTpIbyxfcmVhZG9ubHk6cmcsX3JlY29yZDpGbSxfcmVmaW5lOmFmLF9yZWdleDpZdCxfc2FmZURlY29kZTpUcyxfc2FmZURlY29kZUFzeW5jOlBzLF9zYWZlRW5jb2RlOnpzLF9zYWZlRW5jb2RlQXN5bmM6SXMsX3NhZmVQYXJzZTpWdCxfc2FmZVBhcnNlQXN5bmM6SnQsX3NldDpWbSxfc2l6ZTpsdCxfc2x1Z2lmeTpkbixfc3RhcnRzV2l0aDpubixfc3RyaW5nOnhwLF9zdHJpbmdGb3JtYXQ6ZnQsX3N0cmluZ2Jvb2w6cGYsX3N1Y2Nlc3M6dGcsX3N1cGVyUmVmaW5lOmNmLF9zeW1ib2w6SnAsX3RlbXBsYXRlTGl0ZXJhbDpzZyxfdG9Mb3dlckNhc2U6dW4sX3RvVXBwZXJDYXNlOmxuLF90cmFuc2Zvcm06R20sX3RyaW06Y24sX3R1cGxlOkhtLF91aW50MzI6RHAsX3VpbnQ2NDpWcCxfdWxpZDpnaSxfdW5kZWZpbmVkOktwLF91bmlvbjpxbSxfdW5rbm93bjpRcCxfdXBwZXJjYXNlOmVuLF91cmw6TW8sX3V1aWQ6Y2ksX3V1aWR2NDp1aSxfdXVpZHY2OmxpLF91dWlkdjc6ZGksX3ZvaWQ6WHAsX3hpZDp2aSxfeG9yOkRtLGJhc2U2NENoYXJzZXQ6emQsYmFzZTY0dXJsQ2hhcnNldDpMcyxjYW5QYXJzZVVSTDpNcyxjbG9uZTpCLGNvbXBpbGU6cmksY29tcGlsZUZuOk1tLGNvbmZpZzpXLGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZDpycyxjcmVhdGVUb0pTT05TY2hlbWFNZXRob2Q6ZmYsZGVjb2RlOkJoLGRlY29kZUFzeW5jOkpoLGRlc2NyaWJlOmxmLGVuY29kZTpGaCxlbmNvZGVBc3luYzpWaCxleHRyYWN0RGVmczpkZyxmaW5hbGl6ZTpwZyxmbGF0dGVuRXJyb3I6SW8sZm9ybWF0RXJyb3I6UG8sZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpCcyxnbG9iYWxDb25maWc6cmUsZ2xvYmFsUmVnaXN0cnk6aGUsaGFuZGxlVW5yZXByZXNlbnRhYmxlOnVnLGluaXRpYWxpemVDb250ZXh0OmNnLGlzQmFja0VkZ2U6VHAsaXNSZWN1cnNpdmVTY2hlbWE6QW0saXNWYWxpZEJhc2U2NDpEcyxpc1ZhbGlkQmFzZTY0VVJMOklkLGlzVmFsaWRDSURSdjY6JGQsaXNWYWxpZENyZWRpdENhcmQ6RWQsaXNWYWxpZElCQU46T2QsaXNWYWxpZElQdjY6cXMsaXNWYWxpZEpXVDpBZCxsb2NhbGVzOlFzLG1lbW9pemVyOlpvLG1lcmdlVmFsdWVzOnVvLG1ldGE6ZGYscGFyc2U6WXIscGFyc2VBc3luYzpYcixwYXJzZVVSTE9iamVjdDpyZCxwcmV0dGlmeUVycm9yOl9zLHByb2Nlc3M6ZmcscHJvY2Vzc1NjaGVtYTpsZyxyZWdleGVzOlJvLHJlZ2lzdHJ5Ok5vLHNhZmVEZWNvZGU6V2gsc2FmZURlY29kZUFzeW5jOlFoLHNhZmVFbmNvZGU6S2gsc2FmZUVuY29kZUFzeW5jOkdoLHNhZmVQYXJzZTpXdSxzYWZlUGFyc2VBc3luYzpEaCxzdGFuZGFyZFByb3BzOk5zLHN0cmlwVGFiQW5kTmV3bGluZTp0cyx0b0RvdFBhdGg6S3UsdG9KU09OU2NoZW1hOk9pLHRvWm9kOmJvLHRyZWVpZnlFcnJvcjp5cyx1cmxIb3N0bmFtZU9rOnNkLHVybFByb3RvY29sT2s6aWQsdXRpbDpncyx2YWxpZGF0ZTpFbyx2YWxpZGF0ZUFzeW5jOkNvLHZhbGlkYXRlVVJMOm9kLHZlcnNpb246WWwsd2l0aFBhcnNlcjpzaX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxYYz1TeW1ib2woInoudmlzaXQvcmVzb2x2aW5nIik7ZnVuY3Rpb24gUmkoZSx0KXtjb25zdCBuPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6KGksYSk9Pntjb25zdCBjPXRbaS5fem9kLmRlZi50eXBlXTtyZXR1cm4gYz9jKGksYSk6aX0sbz1uZXcgTWFwO2Z1bmN0aW9uIHIoaSl7Y29uc3QgYT1vLmdldChpKTtpZihhPT09WGMpcmV0dXJuIG5ldyBHcyh7dHlwZToibGF6eSIsZ2V0dGVyOigpPT5vLmdldChpKX0pO2lmKGEhPT12b2lkIDApcmV0dXJuIGE7by5zZXQoaSxYYyk7Y29uc3QgYz1zKGkpLHU9bihjLGMhPT1pKTtyZXR1cm4gby5zZXQoaSx1KSx1fWZ1bmN0aW9uIHMoaSl7Y29uc3QgYT1pLl96b2QuZGVmO3N3aXRjaChhLnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgdT1hLnNoYXBlLGQ9T2JqZWN0LmtleXModSk7bGV0IG09ITE7Y29uc3Qgdj17fTtmb3IoY29uc3QgXyBvZiBkKXtjb25zdCAkPXIodVtfXSk7JCE9PXVbX10mJihtPSEwKSx2W19dPSR9bGV0IGI9YS5jYXRjaGFsbDtyZXR1cm4gYS5jYXRjaGFsbCYmKGI9cihhLmNhdGNoYWxsKSxiIT09YS5jYXRjaGFsbCYmKG09ITApKSxtP0IoaSx7Li4uYSxzaGFwZTp2LGNhdGNoYWxsOmJ9KTppfWNhc2UiYXJyYXkiOntjb25zdCB1PXIoYS5lbGVtZW50KTtyZXR1cm4gdT09PWEuZWxlbWVudD9pOkIoaSx7Li4uYSxlbGVtZW50OnV9KX1jYXNlInR1cGxlIjp7Y29uc3QgdT1hLml0ZW1zO2xldCBkPSExO2NvbnN0IG09W107Zm9yKGNvbnN0IGIgb2YgdSl7Y29uc3QgXz1yKGIpO18hPT1iJiYoZD0hMCksbS5wdXNoKF8pfWxldCB2PWEucmVzdDtyZXR1cm4gYS5yZXN0JiYodj1yKGEucmVzdCksdiE9PWEucmVzdCYmKGQ9ITApKSxkP0IoaSx7Li4uYSxpdGVtczptLHJlc3Q6dn0pOml9Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjp7Y29uc3QgdT1yKGEua2V5VHlwZSksZD1yKGEudmFsdWVUeXBlKTtyZXR1cm4gdT09PWEua2V5VHlwZSYmZD09PWEudmFsdWVUeXBlP2k6QihpLHsuLi5hLGtleVR5cGU6dSx2YWx1ZVR5cGU6ZH0pfWNhc2Uic2V0Ijp7Y29uc3QgdT1yKGEudmFsdWVUeXBlKTtyZXR1cm4gdT09PWEudmFsdWVUeXBlP2k6QihpLHsuLi5hLHZhbHVlVHlwZTp1fSl9Y2FzZSJ1bmlvbiI6e2NvbnN0IHU9YS5vcHRpb25zO2xldCBkPSExO2NvbnN0IG09W107Zm9yKGNvbnN0IHYgb2YgdSl7Y29uc3QgYj1yKHYpO2IhPT12JiYoZD0hMCksbS5wdXNoKGIpfXJldHVybiBkP0IoaSx7Li4uYSxvcHRpb25zOm19KTppfWNhc2UiaW50ZXJzZWN0aW9uIjp7Y29uc3QgdT1yKGEubGVmdCksZD1yKGEucmlnaHQpO3JldHVybiB1PT09YS5sZWZ0JiZkPT09YS5yaWdodD9pOkIoaSx7Li4uYSxsZWZ0OnUscmlnaHQ6ZH0pfWNhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOntjb25zdCB1PXIoYS5pbm5lclR5cGUpO3JldHVybiB1PT09YS5pbm5lclR5cGU/aTpCKGksey4uLmEsaW5uZXJUeXBlOnV9KX1jYXNlInBpcGUiOntjb25zdCB1PXIoYS5pbiksZD1yKGEub3V0KTtyZXR1cm4gdT09PWEuaW4mJmQ9PT1hLm91dD9pOkIoaSx7Li4uYSxpbjp1LG91dDpkfSl9Y2FzZSJmdW5jdGlvbiI6e2NvbnN0IHU9cihhLmlucHV0KSxkPXIoYS5vdXRwdXQpO3JldHVybiB1PT09YS5pbnB1dCYmZD09PWEub3V0cHV0P2k6QihpLHsuLi5hLGlucHV0OnUsb3V0cHV0OmR9KX1jYXNlImxhenkiOntjb25zdCB1PWEuZ2V0dGVyLHtfY2FjaGVkSW5uZXI6ZCwuLi5tfT1hO3JldHVybiBCKGksey4uLm0sZ2V0dGVyOigpPT5yKHUoKSl9KX1jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6cmV0dXJuIGk7ZGVmYXVsdDpyZXR1cm4gaX19cmV0dXJuIHIoZSl9ZnVuY3Rpb24gQWkoZSl7cmV0dXJuISFlLl96b2R9ZnVuY3Rpb24gdmYoZSx0KXtyZXR1cm4gQWkoZSk/V3UoZSx0KTplLnNhZmVQYXJzZSh0KX1mdW5jdGlvbiBYZyhlKXtpZighZSlyZXR1cm47bGV0IHQ7aWYoQWkoZSk/dD1lLl96b2Q/LmRlZj8uc2hhcGU6dD1lLnNoYXBlLCEhdCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpdHJ5e3JldHVybiB0KCl9Y2F0Y2h7cmV0dXJufXJldHVybiB0fX1mdW5jdGlvbiBldihlKXtpZihBaShlKSl7Y29uc3Qgcz1lLl96b2Q/LmRlZjtpZihzKXtpZihzLnZhbHVlIT09dm9pZCAwKXJldHVybiBzLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocy52YWx1ZXMpJiZzLnZhbHVlcy5sZW5ndGg+MClyZXR1cm4gcy52YWx1ZXNbMF19fWNvbnN0IG49ZS5fZGVmO2lmKG4pe2lmKG4udmFsdWUhPT12b2lkIDApcmV0dXJuIG4udmFsdWU7aWYoQXJyYXkuaXNBcnJheShuLnZhbHVlcykmJm4udmFsdWVzLmxlbmd0aD4wKXJldHVybiBuLnZhbHVlc1swXX1jb25zdCBvPWUudmFsdWU7aWYobyE9PXZvaWQgMClyZXR1cm4gb31jb25zdCB0dj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW5kc1dpdGg6b24sZ3Q6RWUsZ3RlOmxlLGluY2x1ZGVzOnRuLGxlbmd0aDpwdCxsb3dlcmNhc2U6WHQsbHQ6eGUsbHRlOnVlLG1heExlbmd0aDpkdCxtYXhTaXplOkdlLG1pbWU6c24sbWluTGVuZ3RoOmplLG1pblNpemU6Q2UsbXVsdGlwbGVPZjpCZSxuZWdhdGl2ZTpEbyxub25uZWdhdGl2ZTpVbyxub25wb3NpdGl2ZTpMbyxub3JtYWxpemU6YW4sb3ZlcndyaXRlOiRlLHBvc2l0aXZlOnFvLHByb3BlcnRpZXM6cm4scHJvcGVydHk6SG8scmVnZXg6WXQsc2l6ZTpsdCxzbHVnaWZ5OmRuLHN0YXJ0c1dpdGg6bm4sdG9Mb3dlckNhc2U6dW4sdG9VcHBlckNhc2U6bG4sdHJpbTpjbix1cHBlcmNhc2U6ZW59LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksZXU9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSk7ZnVuY3Rpb24gZW8oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89bih0aGlzKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KX1jb25zdCBiZj0oZSx0KT0+e0p1LmluaXQoZSx0KSxlLm5hbWU9IlpvZEVycm9yIjtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtldS5oYXMobil8fChldS5hZGQobiksZW8obiwiZm9ybWF0IixvPT5yPT5QbyhvLHIpKSxlbyhuLCJmbGF0dGVuIixvPT5yPT5JbyhvLHIpKSxlbyhuLCJhZGRJc3N1ZSIsbz0+cj0+e28uaXNzdWVzLnB1c2gociksby5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KG8uaXNzdWVzLHJvLDIpfSksZW8obiwiYWRkSXNzdWVzIixvPT5yPT57by5pc3N1ZXMucHVzaCguLi5yKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMscm8sMil9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiaXNFbXB0eSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLmlzc3Vlcy5sZW5ndGg9PT0wfX0pKX0seWY9cCgiWm9kRXJyb3IiLGJmKSxhZT1wKCJab2RFcnJvciIsYmYsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KSxaaT1GdChhZSksTmk9QnQoYWUpLGppPVZ0KGFlKSxNaT1KdChhZSkscWk9a3MoYWUpLERpPXdzKGFlKSxMaT0kcyhhZSksVWk9U3MoYWUpLEhpPXpzKGFlKSxGaT1UcyhhZSksQmk9SXMoYWUpLFZpPVBzKGFlKTtmdW5jdGlvbiBudigpe3JlLmxvY2FsZUVycm9yfHxXKElwKCkpfWZ1bmN0aW9uIFFlKCl7cmUubWVtb2l6ZXJ8fFcoe21lbW9pemVyOlpvKCl9KX1jb25zdCB4PXAoIlpvZFR5cGUiLChlLHQpPT4obnYoKSxJLmluaXQoZSx0KSxlLmRlZj10LGUudHlwZT10LnR5cGUsZSkse2NoZWNrKC4uLmUpe2NvbnN0IHQ9dGhpcy5kZWY7cmV0dXJuIHRoaXMuY2xvbmUobmUodCx7Y2hlY2tzOlsuLi50LmNoZWNrcz8/W10sLi4uZS5tYXAobj0+dHlwZW9mIG49PSJmdW5jdGlvbiI/e196b2Q6e2NoZWNrOm4sZGVmOntjaGVjazoiY3VzdG9tIn0sb25hdHRhY2g6W119fTpuKV19KSx7cGFyZW50OiEwfSl9LHdpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soLi4uZSl9LGNsb25lKGUsdCl7cmV0dXJuIEIodGhpcyxlLHQpfSxicmFuZCgpe3JldHVybiB0aGlzfSxyZWdpc3RlcihlLHQpe3JldHVybiBlLmFkZCh0aGlzLHQpLHRoaXN9LHJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKENyKGUsdCkpfSxzdXBlclJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKE9yKGUsdCkpfSxvdmVyd3JpdGUoZSl7cmV0dXJuIHRoaXMuY2hlY2soJGUoZSkpfSxvcHRpb25hbCgpe3JldHVybiBEKHRoaXMpfSxleGFjdE9wdGlvbmFsKCl7cmV0dXJuIGRyKHRoaXMpfSxudWxsYWJsZSgpe3JldHVybiBpdCh0aGlzKX0sbnVsbGlzaCgpe3JldHVybiBEKGl0KHRoaXMpKX0sbm9ub3B0aW9uYWwoZSl7cmV0dXJuIHZyKHRoaXMsZSl9LGFycmF5KCl7cmV0dXJuIHoodGhpcyl9LG9yKGUpe3JldHVybiBFKFt0aGlzLGVdKX0sYW5kKGUpe3JldHVybiB6dCh0aGlzLGUpfSx0cmFuc2Zvcm0oZSl7cmV0dXJuIE10KHRoaXMsWm4oZSkpfSxkZWZhdWx0KGUpe3JldHVybiBocih0aGlzLGUpfSxwcmVmYXVsdChlKXtyZXR1cm4gZ3IodGhpcyxlKX0sY2F0Y2goZSl7cmV0dXJuIF9yKHRoaXMsZSl9LHBpcGUoZSl7cmV0dXJuIE10KHRoaXMsZSl9LHJlYWRvbmx5KCl7cmV0dXJuIFNyKHRoaXMpfSxkZXNjcmliZShlKXtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gaGUuYWRkKHQse2Rlc2NyaXB0aW9uOmV9KSx0fSxtZXRhKC4uLmUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4gaGUuZ2V0KHRoaXMpO2NvbnN0IHQ9dGhpcy5jbG9uZSgpO3JldHVybiBoZS5hZGQodCxlWzBdKSx0fSxpc09wdGlvbmFsKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKHZvaWQgMCkuc3VjY2Vzc30saXNOdWxsYWJsZSgpe3JldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzfSxhcHBseShlLC4uLnQpe3JldHVybiB0Lmxlbmd0aD09PTA/ZSh0aGlzKTplKHRoaXMsLi4udCl9LGdldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIHpvKHRoaXMsIn5zdGFuZGFyZCIsey4uLk5zKHRoaXMpLGpzb25TY2hlbWE6e2lucHV0OnJzKCksb3V0cHV0OnJzKCl9fSl9LHNldCJ+c3RhbmRhcmQiKGUpe1BlKHRoaXMsIn5zdGFuZGFyZCIsZSl9LHBhcnNlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gWmkodGhpcyx0LG4se2NhbGxlZTplfSl9LHBhcnNlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBOaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZVBhcnNlKGUsdCl7cmV0dXJuIGppKHRoaXMsZSx0KX0sYXN5bmMgc2FmZVBhcnNlQXN5bmMoZSx0KXtyZXR1cm4gTWkodGhpcyxlLHQpfSxnZXQgc3BhKCl7cmV0dXJuIHRoaXM/LnNhZmVQYXJzZUFzeW5jfSxzZXQgc3BhKGUpe1BlKHRoaXMsInNwYSIsZSl9LHZhbGlkYXRlKGUsdCl7cmV0dXJuIEVvKHRoaXMsZSx0KX0sdmFsaWRhdGVBc3luYyhlLHQpe3JldHVybiBDbyh0aGlzLGUsdCl9LGVuY29kZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHFpKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxkZWNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBEaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZW5jb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBMaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBVaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZUVuY29kZShlLHQpe3JldHVybiBIaSh0aGlzLGUsdCl9LHNhZmVEZWNvZGUoZSx0KXtyZXR1cm4gRmkodGhpcyxlLHQpfSxhc3luYyBzYWZlRW5jb2RlQXN5bmMoZSx0KXtyZXR1cm4gQmkodGhpcyxlLHQpfSxhc3luYyBzYWZlRGVjb2RlQXN5bmMoZSx0KXtyZXR1cm4gVmkodGhpcyxlLHQpfSx0b0pTT05TY2hlbWEoZSl7cmV0dXJuIGZmKCkoZSl9LGdldCBkZXNjcmlwdGlvbigpe3JldHVybiBoZS5nZXQodGhpcyk/LmRlc2NyaXB0aW9ufSxnZXQgX2RlZigpe3JldHVybiB0aGlzLl96b2QuZGVmfX0pLHBuPXAoIl9ab2RTdHJpbmciLChlLHQpPT57UXQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5oZygpfSxIdCh7Zm9ybWF0OmU9Pm1lKCkuZm9ybWF0Pz9udWxsLG1pbkxlbmd0aDplPT5tZSgpLm1pbmltdW0/P251bGwsbWF4TGVuZ3RoOmU9Pm1lKCkubWF4aW11bT8/bnVsbH0se3JlZ2V4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFl0KC4uLmUpKX0saW5jbHVkZXMoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sodG4oLi4uZSkpfSxzdGFydHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKG5uKC4uLmUpKX0sZW5kc1dpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sob24oLi4uZSkpfSxtaW4oLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soamUoLi4uZSkpfSxtYXgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soZHQoLi4uZSkpfSxsZW5ndGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2socHQoLi4uZSkpfSxub25lbXB0eSguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhqZSgxLC4uLmUpKX0sbG93ZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKFh0KGUpKX0sdXBwZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKGVuKGUpKX0sdHJpbSgpe3JldHVybiB0aGlzLmNoZWNrKGNuKCkpfSxub3JtYWxpemUoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soYW4oLi4uZSkpfSx0b0xvd2VyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKHVuKCkpfSx0b1VwcGVyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKGxuKCkpfSxzbHVnaWZ5KCl7cmV0dXJuIHRoaXMuY2hlY2soZG4oKSl9fSkpLGh0PXAoIlpvZFN0cmluZyIsKGUsdCk9PntRdC5pbml0KGUsdCkscG4uaW5pdChlLHQpfSx7ZW1haWwoZSl7cmV0dXJuIHRoaXMuY2hlY2soaWkoZm4sZSkpfSx1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soTW8oeXQsZSkpfSxqd3QoZSl7cmV0dXJuIHRoaXMuY2hlY2soVGkoeG4sZSkpfSxlbW9qaShlKXtyZXR1cm4gdGhpcy5jaGVjayhwaShtbixlKSl9LGd1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soYWkoaG4sZSkpfSx1dWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKGNpKHllLGUpKX0sdXVpZHY0KGUpe3JldHVybiB0aGlzLmNoZWNrKHVpKHllLGUpKX0sdXVpZHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKGxpKHllLGUpKX0sdXVpZHY3KGUpe3JldHVybiB0aGlzLmNoZWNrKGRpKHllLGUpKX0sbmFub2lkKGUpe3JldHVybiB0aGlzLmNoZWNrKGZpKGduLGUpKX0sY3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhoaSh2bixlKSl9LGN1aWQyKGUpe3JldHVybiB0aGlzLmNoZWNrKG1pKGJuLGUpKX0sdWxpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhnaSh5bixlKSl9LGJhc2U2NChlKXtyZXR1cm4gdGhpcy5jaGVjaygkaShUbixlKSl9LGJhc2U2NHVybChlKXtyZXR1cm4gdGhpcy5jaGVjayhTaShJbixlKSl9LHhpZChlKXtyZXR1cm4gdGhpcy5jaGVjayh2aShfbixlKSl9LGtzdWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKGJpKGtuLGUpKX0saXB2NChlKXtyZXR1cm4gdGhpcy5jaGVjayh5aSh3bixlKSl9LGlwdjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soX2koJG4sZSkpfSxjaWRydjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soa2koU24sZSkpfSxjaWRydjYoZSl7cmV0dXJuIHRoaXMuY2hlY2sod2koem4sZSkpfSxlMTY0KGUpe3JldHVybiB0aGlzLmNoZWNrKHppKFBuLGUpKX0sZGF0ZXRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2soUGkobXQsZSkpfSxkYXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKHhpKGd0LGUpKX0sdGltZShlKXtyZXR1cm4gdGhpcy5jaGVjayhFaSh2dCxlKSl9LGR1cmF0aW9uKGUpe3JldHVybiB0aGlzLmNoZWNrKENpKGJ0LGUpKX19KTtmdW5jdGlvbiBmKGUpe3JldHVybiB4cChodCxlKX1jb25zdCBqPXAoIlpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9PntxLmluaXQoZSx0KSxwbi5pbml0KGUsdCl9KSxtdD1wKCJab2RJU09EYXRlVGltZSIsKGUsdCk9PnttZC5pbml0KGUsdCksai5pbml0KGUsdCl9KSxndD1wKCJab2RJU09EYXRlIiwoZSx0KT0+e2dkLmluaXQoZSx0KSxqLmluaXQoZSx0KX0pLHZ0PXAoIlpvZElTT1RpbWUiLChlLHQpPT57dmQuaW5pdChlLHQpLGouaW5pdChlLHQpfSksYnQ9cCgiWm9kSVNPRHVyYXRpb24iLChlLHQpPT57YmQuaW5pdChlLHQpLGouaW5pdChlLHQpfSksZm49cCgiWm9kRW1haWwiLChlLHQpPT57bmQuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gSmkoZSl7cmV0dXJuIGlpKGZuLGUpfWNvbnN0IGhuPXAoIlpvZEdVSUQiLChlLHQpPT57ZWQuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gS2koZSl7cmV0dXJuIGFpKGhuLGUpfWNvbnN0IHllPXAoIlpvZFVVSUQiLChlLHQpPT57dGQuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gV2koZSl7cmV0dXJuIGNpKHllLGUpfWZ1bmN0aW9uIEdpKGUpe3JldHVybiB1aSh5ZSxlKX1mdW5jdGlvbiBRaShlKXtyZXR1cm4gbGkoeWUsZSl9ZnVuY3Rpb24gWWkoZSl7cmV0dXJuIGRpKHllLGUpfWNvbnN0IHl0PXAoIlpvZFVSTCIsKGUsdCk9PnthZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiBYaShlKXtyZXR1cm4gTW8oeXQsZSl9ZnVuY3Rpb24gZWEoZSl7cmV0dXJuIE1vKHl0LHtwcm90b2NvbDp4cyxob3N0bmFtZTptbCwuLi55KGUpfSl9Y29uc3QgbW49cCgiWm9kRW1vamkiLChlLHQpPT57Y2QuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gdGEoZSl7cmV0dXJuIHBpKG1uLGUpfWNvbnN0IGduPXAoIlpvZE5hbm9JRCIsKGUsdCk9Pnt1ZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiBuYShlKXtyZXR1cm4gZmkoZ24sZSl9Y29uc3Qgdm49cCgiWm9kQ1VJRCIsKGUsdCk9PntsZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiBvYShlKXtyZXR1cm4gaGkodm4sZSl9Y29uc3QgYm49cCgiWm9kQ1VJRDIiLChlLHQpPT57ZGQuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gcmEoZSl7cmV0dXJuIG1pKGJuLGUpfWNvbnN0IHluPXAoIlpvZFVMSUQiLChlLHQpPT57cGQuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gc2EoZSl7cmV0dXJuIGdpKHluLGUpfWNvbnN0IF9uPXAoIlpvZFhJRCIsKGUsdCk9PntmZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiBpYShlKXtyZXR1cm4gdmkoX24sZSl9Y29uc3Qga249cCgiWm9kS1NVSUQiLChlLHQpPT57aGQuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gYWEoZSl7cmV0dXJuIGJpKGtuLGUpfWNvbnN0IHduPXAoIlpvZElQdjQiLChlLHQpPT57eWQuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gY2EoZSl7cmV0dXJuIHlpKHduLGUpfWNvbnN0IEZvPXAoIlpvZE1BQyIsKGUsdCk9PntrZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiB1YShlKXtyZXR1cm4gQ3AoRm8sZSl9Y29uc3QgJG49cCgiWm9kSVB2NiIsKGUsdCk9PntfZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiBsYShlKXtyZXR1cm4gX2koJG4sZSl9Y29uc3QgU249cCgiWm9kQ0lEUnY0IiwoZSx0KT0+e3dkLmluaXQoZSx0KSxqLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGRhKGUpe3JldHVybiBraShTbixlKX1jb25zdCB6bj1wKCJab2RDSURSdjYiLChlLHQpPT57U2QuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gcGEoZSl7cmV0dXJuIHdpKHpuLGUpfWNvbnN0IFRuPXAoIlpvZEJhc2U2NCIsKGUsdCk9PntUZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiBmYShlKXtyZXR1cm4gJGkoVG4sZSl9Y29uc3QgSW49cCgiWm9kQmFzZTY0VVJMIiwoZSx0KT0+e1BkLmluaXQoZSx0KSxqLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGhhKGUpe3JldHVybiBTaShJbixlKX1jb25zdCBQbj1wKCJab2RFMTY0IiwoZSx0KT0+e3hkLmluaXQoZSx0KSxqLmluaXQoZSx0KX0pO2Z1bmN0aW9uIG1hKGUpe3JldHVybiB6aShQbixlKX1jb25zdCBCbz1wKCJab2RDcmVkaXRDYXJkIiwoZSx0KT0+e0NkLmluaXQoZSx0KSxqLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGdhKGUpe3JldHVybiBPcChCbyxlKX1jb25zdCBWbz1wKCJab2RJQkFOIiwoZSx0KT0+e1JkLmluaXQoZSx0KSxqLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHZhKGUpe3JldHVybiBScChWbyxlKX1jb25zdCB4bj1wKCJab2RKV1QiLChlLHQpPT57WmQuaW5pdChlLHQpLGouaW5pdChlLHQpfSk7ZnVuY3Rpb24gYmEoZSl7cmV0dXJuIFRpKHhuLGUpfWNvbnN0IE1lPXAoIlpvZEN1c3RvbVN0cmluZ0Zvcm1hdCIsKGUsdCk9PntOZC5pbml0KGUsdCksai5pbml0KGUsdCl9KTtmdW5jdGlvbiB5YShlLHQsbj17fSl7cmV0dXJuIGZ0KE1lLGUsdCxuKX1mdW5jdGlvbiBfYShlKXtyZXR1cm4gZnQoTWUsImhvc3RuYW1lIixobCxlKX1mdW5jdGlvbiBrYShlKXtyZXR1cm4gZnQoTWUsImhleCIsQ2wsZSl9ZnVuY3Rpb24gd2EoZSl7cmV0dXJuIGZ0KE1lLCJjdXJyZW5jeV9jb2RlIix2bCxlKX1mdW5jdGlvbiAkYShlLHQpe2NvbnN0IG49dD8uZW5jPz8iaGV4IixvPWAke2V9XyR7bn1gLHI9Um9bb107aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgaGFzaCBmb3JtYXQ6ICR7b31gKTtyZXR1cm4gZnQoTWUsbyxyLHQpfWNvbnN0IF90PXAoIlpvZE51bWJlciIsKGUsdCk9PntVcy5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm1nKCksZS5pc0Zpbml0ZT0hMH0sSHQoe21pblZhbHVlOmU9Pntjb25zdHttaW5pbXVtOnQsZXhjbHVzaXZlTWluaW11bTpufT1tZSgpO3JldHVybiBNYXRoLm1heCh0Pz9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKX0sbWF4VmFsdWU6ZT0+e2NvbnN0e21heGltdW06dCxleGNsdXNpdmVNYXhpbXVtOm59PW1lKCk7cmV0dXJuIE1hdGgubWluKHQ/P051bWJlci5QT1NJVElWRV9JTkZJTklUWSxuPz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpfSxpc0ludDplPT57Y29uc3R7aXNJbnQ6dCxtdWx0aXBsZU9mOm59PW1lKCk7cmV0dXJuISF0fHwhIW4/LnNvbWUoTnVtYmVyLmlzU2FmZUludGVnZXIpfSxmb3JtYXQ6ZT0+bWUoKS5mb3JtYXQ/P251bGx9LHtndChlLHQpe3JldHVybiB0aGlzLmNoZWNrKEVlKGUsdCkpfSxndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhsZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sobGUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soeGUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKHVlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh1ZShlLHQpKX0saW50KGUpe3JldHVybiB0aGlzLmNoZWNrKGp0KGUpKX0sc2FmZShlKXtyZXR1cm4gdGhpcy5jaGVjayhqdChlKSl9LHBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKEVlKDAsZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhsZSgwLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soeGUoMCxlKSl9LG5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKHVlKDAsZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soQmUoZSx0KSl9LHN0ZXAoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhCZShlLHQpKX0sZmluaXRlKCl7cmV0dXJuIHRoaXN9fSkpO2Z1bmN0aW9uIFAoZSl7cmV0dXJuIEFwKF90LGUpfWNvbnN0IHFlPXAoIlpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntqZC5pbml0KGUsdCksX3QuaW5pdChlLHQpfSk7ZnVuY3Rpb24ganQoZSl7cmV0dXJuIE5wKHFlLGUpfWZ1bmN0aW9uIFNhKGUpe3JldHVybiBqcChxZSxlKX1mdW5jdGlvbiB6YShlKXtyZXR1cm4gTXAocWUsZSl9ZnVuY3Rpb24gVGEoZSl7cmV0dXJuIHFwKHFlLGUpfWZ1bmN0aW9uIElhKGUpe3JldHVybiBEcChxZSxlKX1jb25zdCBrdD1wKCJab2RCb29sZWFuIiwoZSx0KT0+e0hzLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Z2coKX0pO2Z1bmN0aW9uIE4oZSl7cmV0dXJuIExwKGt0LGUpfWNvbnN0IHd0PXAoIlpvZEJpZ0ludCIsKGUsdCk9PntGcy5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnZnKCl9LEh0KHttaW5WYWx1ZTplPT5tZSgpLm1pbmltdW0/P251bGwsbWF4VmFsdWU6ZT0+bWUoKS5tYXhpbXVtPz9udWxsLGZvcm1hdDplPT5tZSgpLmZvcm1hdD8/bnVsbH0se2d0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGxlKGUsdCkpfSxtaW4oZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhsZShlLHQpKX0sZ3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhFZShlLHQpKX0sbHQoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh4ZShlLHQpKX0sbHRlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodWUoZSx0KSl9LG1heChlLHQpe3JldHVybiB0aGlzLmNoZWNrKHVlKGUsdCkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhFZShCaWdJbnQoMCksZSkpfSxuZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayh4ZShCaWdJbnQoMCksZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayh1ZShCaWdJbnQoMCksZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhsZShCaWdJbnQoMCksZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soQmUoZSx0KSl9fSkpO2Z1bmN0aW9uIFBhKGUpe3JldHVybiBIcCh3dCxlKX1jb25zdCBFbj1wKCJab2RCaWdJbnRGb3JtYXQiLChlLHQpPT57TWQuaW5pdChlLHQpLHd0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIHhhKGUpe3JldHVybiBCcChFbixlKX1mdW5jdGlvbiBFYShlKXtyZXR1cm4gVnAoRW4sZSl9Y29uc3QgSm89cCgiWm9kU3ltYm9sIiwoZSx0KT0+e3FkLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+YmcoKX0pO2Z1bmN0aW9uIENhKGUpe3JldHVybiBKcChKbyxlKX1jb25zdCBLbz1wKCJab2RVbmRlZmluZWQiLChlLHQpPT57RGQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5fZygpfSk7ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIEtwKEtvLGUpfWNvbnN0IFdvPXAoIlpvZE51bGwiLChlLHQpPT57TGQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT55ZygpfSk7ZnVuY3Rpb24gQ24oZSl7cmV0dXJuIFdwKFdvLGUpfWNvbnN0IEdvPXAoIlpvZEFueSIsKGUsdCk9PntVZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PiRnKCl9KTtmdW5jdGlvbiBPbigpe3JldHVybiBHcChHbyl9Y29uc3QgUW89cCgiWm9kVW5rbm93biIsKGUsdCk9PntIZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlNnKCl9KTtmdW5jdGlvbiBaKCl7cmV0dXJuIFFwKFFvKX1jb25zdCBZbz1wKCJab2ROZXZlciIsKGUsdCk9PntGZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PndnKCl9KTtmdW5jdGlvbiBWZShlKXtyZXR1cm4gWXAoWW8sZSl9Y29uc3QgWG89cCgiWm9kVm9pZCIsKGUsdCk9PntCZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmtnKCl9KTtmdW5jdGlvbiBPYShlKXtyZXR1cm4gWHAoWG8sZSl9Y29uc3QgUm49cCgiWm9kRGF0ZSIsKGUsdCk9PntWZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnpnKCksZS5taW49KG4sbyk9PmUuY2hlY2sobGUobixvKSksZS5tYXg9KG4sbyk9PmUuY2hlY2sodWUobixvKSl9LEh0KHttaW5EYXRlOmU9Pntjb25zdHttaW5pbXVtOnR9PW1lKCk7cmV0dXJuIHQ/bmV3IERhdGUodCk6bnVsbH0sbWF4RGF0ZTplPT57Y29uc3R7bWF4aW11bTp0fT1tZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9fSx7fSkpO2Z1bmN0aW9uIFJhKGUpe3JldHVybiBlZihSbixlKX1jb25zdCBlcj1wKCJab2RBcnJheSIsKGUsdCk9PntRZSgpLEpkLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+amcoKSxlLmVsZW1lbnQ9dC5lbGVtZW50fSx7bWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soamUoZSx0KSl9LG5vbmVtcHR5KGUpe3JldHVybiB0aGlzLmNoZWNrKGplKDEsZSkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhkdChlLHQpKX0sbGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socHQoZSx0KSl9LHVud3JhcCgpe3JldHVybiB0aGlzLmVsZW1lbnR9fSk7ZnVuY3Rpb24geihlLHQpe3JldHVybiBvZihlcixlLHQpfWZ1bmN0aW9uIEFhKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZi5zaGFwZTtyZXR1cm4gWChPYmplY3Qua2V5cyh0KSl9Y29uc3QgJHQ9cCgiWm9kT2JqZWN0IiwoZSx0KT0+e1FlKCksUWQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5NZygpLEZ1KGUsInNoYXBlIixuPT5uLl96b2QuZGVmLnNoYXBlLCExKX0se2tleW9mKCl7cmV0dXJuIFgoT2JqZWN0LmtleXModGhpcy5fem9kLmRlZi5zaGFwZSkpfSxjYXRjaGFsbChlKXtyZXR1cm4gdGhpcy5jbG9uZShuZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKG5lKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOlooKX0pKX0sbG9vc2UoKXtyZXR1cm4gdGhpcy5jbG9uZShuZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpaKCl9KSl9LHN0cmljdCgpe3JldHVybiB0aGlzLmNsb25lKG5lKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOlZlKCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUobmUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6dm9pZCAwfSkpfSxleHRlbmQoZSl7cmV0dXJuIEF1KHRoaXMsZSl9LHNhZmVFeHRlbmQoZSl7cmV0dXJuIE51KHRoaXMsZSl9LG1lcmdlKGUpe3JldHVybiBqdSh0aGlzLGUpfSxwaWNrKGUpe3JldHVybiBPdSh0aGlzLGUpfSxvbWl0KGUpe3JldHVybiBSdSh0aGlzLGUpfSxwYXJ0aWFsKC4uLmUpe3JldHVybiBHcihUdCx0aGlzLGVbMF0pfSxleGFjdFBhcnRpYWwoLi4uZSl7cmV0dXJuIEdyKE5uLHRoaXMsZVswXSwiZXhhY3RQYXJ0aWFsIil9LHJlcXVpcmVkKC4uLmUpe3JldHVybiBNdShqbix0aGlzLGVbMF0pfX0pO2Z1bmN0aW9uIGcoZSx0KXtjb25zdCBuPXt0eXBlOiJvYmplY3QiLHNoYXBlOmU/P3t9LC4uLnkodCl9O3JldHVybiBuZXcgJHQobil9ZnVuY3Rpb24gWmEoZSx0KXtyZXR1cm4gbmV3ICR0KHt0eXBlOiJvYmplY3QiLHNoYXBlOmUsY2F0Y2hhbGw6VmUoKSwuLi55KHQpfSl9ZnVuY3Rpb24gWShlLHQpe3JldHVybiBuZXcgJHQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpaKCksLi4ueSh0KX0pfWNvbnN0IFN0PXAoIlpvZFVuaW9uIiwoZSx0KT0+e0FvLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+aGYoKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gRShlLHQpe3JldHVybiBuZXcgU3Qoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsLi4ueSh0KX0pfWNvbnN0IHRyPXAoIlpvZFhvciIsKGUsdCk9PntTdC5pbml0KGUsdCksWWQuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5oZigpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiBOYShlLHQpe3JldHVybiBuZXcgdHIoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsaW5jbHVzaXZlOiExLC4uLnkodCl9KX1jb25zdCBucj1wKCJab2REaXNjcmltaW5hdGVkVW5pb24iLChlLHQpPT57U3QuaW5pdChlLHQpLGVwLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEFuKGUsdCxuKXtyZXR1cm4gbmV3IG5yKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGRpc2NyaW1pbmF0b3I6ZSwuLi55KG4pfSl9Y29uc3Qgb3I9cCgiWm9kSW50ZXJzZWN0aW9uIiwoZSx0KT0+e3RwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+cWcoKX0pO2Z1bmN0aW9uIHp0KGUsdCl7cmV0dXJuIG5ldyBvcih7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OmUscmlnaHQ6dH0pfWNvbnN0IHJyPXAoIlpvZFR1cGxlIiwoZSx0KT0+e1FlKCksVnMuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5EZygpfSx7cmVzdChlKXtyZXR1cm4gdGhpcy5jbG9uZSh7Li4udGhpcy5fem9kLmRlZixyZXN0OmV9KX0scGFydGlhbCgpe2NvbnN0IGU9dGhpcy5fem9kLmRlZjtpZihlLmNoZWNrcz8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiLnBhcnRpYWwoKSBjYW5ub3QgYmUgdXNlZCBvbiB0dXBsZSBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtyZXR1cm4gdGhpcy5jbG9uZSh7Li4uZSxpdGVtczplLml0ZW1zLm1hcCh0PT5uZXcgVHQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pKX0pfX0pO2Z1bmN0aW9uIHNyKGUsdCxuKXtjb25zdCBvPXQgaW5zdGFuY2VvZiBJLHI9bz9uOnQscz1vP3Q6bnVsbDtyZXR1cm4gbmV3IHJyKHt0eXBlOiJ0dXBsZSIsaXRlbXM6ZSxyZXN0OnMsLi4ueShyKX0pfWNvbnN0IEplPXAoIlpvZFJlY29yZCIsKGUsdCk9PntRZSgpLG5wLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+TGcoKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlfSk7ZnVuY3Rpb24gTyhlLHQsbil7cmV0dXJuIXR8fCF0Ll96b2Q/bmV3IEplKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZigpLHZhbHVlVHlwZTplLC4uLnkodCl9KTpuZXcgSmUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnkobil9KX1mdW5jdGlvbiBqYShlLHQsbil7cmV0dXJuIG5ldyBKZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4ueShuKSxwYXJ0aWFsOiEwfSl9ZnVuY3Rpb24gTWEoZSx0LG4pe3JldHVybiBuZXcgSmUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LG1vZGU6Imxvb3NlIiwuLi55KG4pfSl9Y29uc3QgaXI9cCgiWm9kTWFwIiwoZSx0KT0+e1FlKCksb3AuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5aZygpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGUsZS5taW49KC4uLm4pPT5lLmNoZWNrKENlKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soQ2UoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKEdlKC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKGx0KC4uLm4pKX0pO2Z1bmN0aW9uIHFhKGUsdCxuKXtyZXR1cm4gbmV3IGlyKHt0eXBlOiJtYXAiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi55KG4pfSl9Y29uc3QgYXI9cCgiWm9kU2V0IiwoZSx0KT0+e1FlKCkscnAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5OZygpLGUubWluPSguLi5uKT0+ZS5jaGVjayhDZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKENlKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhHZSguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayhsdCguLi5uKSl9KTtmdW5jdGlvbiBEYShlLHQpe3JldHVybiBuZXcgYXIoe3R5cGU6InNldCIsdmFsdWVUeXBlOmUsLi4ueSh0KX0pfWNvbnN0IEtlPXAoIlpvZEVudW0iLChlLHQpPT57c3AuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obyxyLHMpPT5UZygpLGUuZW51bT10LmVudHJpZXMsZS5vcHRpb25zPVsuLi5lLl96b2QudmFsdWVzXTtjb25zdCBuPW5ldyBTZXQoT2JqZWN0LmtleXModC5lbnRyaWVzKSk7ZS5leHRyYWN0PShvLHIpPT57Y29uc3Qgcz17fTtmb3IoY29uc3QgaSBvZiBvKWlmKG4uaGFzKGkpKXNbaV09dC5lbnRyaWVzW2ldO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtpfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgS2Uoey4uLnQsY2hlY2tzOltdLC4uLnkociksZW50cmllczpzfSl9LGUuZXhjbHVkZT0obyxyKT0+e2NvbnN0IHM9ey4uLnQuZW50cmllc307Zm9yKGNvbnN0IGkgb2YgbylpZihuLmhhcyhpKSlkZWxldGUgc1tpXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7aX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IEtlKHsuLi50LGNoZWNrczpbXSwuLi55KHIpLGVudHJpZXM6c30pfX0pO2Z1bmN0aW9uIFgoZSx0KXtjb25zdCBuPUFycmF5LmlzQXJyYXkoZSk/T2JqZWN0LmZyb21FbnRyaWVzKGUubWFwKG89PltvLG9dKSk6ZTtyZXR1cm4gbmV3IEtlKHt0eXBlOiJlbnVtIixlbnRyaWVzOm4sLi4ueSh0KX0pfWZ1bmN0aW9uIExhKGUsdCl7cmV0dXJuIG5ldyBLZSh7dHlwZToiZW51bSIsZW50cmllczplLC4uLnkodCl9KX1jb25zdCBjcj1wKCJab2RMaXRlcmFsIiwoZSx0KT0+e2lwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+SWcoKSxlLnZhbHVlcz1uZXcgU2V0KHQudmFsdWVzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidmFsdWUiLHtnZXQoKXtpZih0LnZhbHVlcy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgc2NoZW1hIGNvbnRhaW5zIG11bHRpcGxlIHZhbGlkIGxpdGVyYWwgdmFsdWVzLiBVc2UgYC52YWx1ZXNgIGluc3RlYWQuIik7cmV0dXJuIHQudmFsdWVzWzBdfX0pfSk7ZnVuY3Rpb24gaChlLHQpe3JldHVybiBuZXcgY3Ioe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KGUpP2U6W2VdLC4uLnkodCl9KX1jb25zdCB1cj1wKCJab2RGaWxlIiwoZSx0KT0+e2FwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+RWcoKSxlLm1pbj0obixvKT0+ZS5jaGVjayhDZShuLG8pKSxlLm1heD0obixvKT0+ZS5jaGVjayhHZShuLG8pKSxlLm1pbWU9KG4sbyk9PmUuY2hlY2soc24oQXJyYXkuaXNBcnJheShuKT9uOltuXSxvKSl9KTtmdW5jdGlvbiBVYShlKXtyZXR1cm4gcmYodXIsZSl9Y29uc3QgbHI9cCgiWm9kVHJhbnNmb3JtIiwoZSx0KT0+e1FlKCksY3AuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5BZygpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgVG8oZS5jb25zdHJ1Y3Rvci5uYW1lKTtuLmFkZElzc3VlPXM9PntpZih0eXBlb2Ygcz09InN0cmluZyIpbi5pc3N1ZXMucHVzaChvdChzLG4udmFsdWUsdCkpO2Vsc2V7Y29uc3QgaT1zO2kuZmF0YWwmJihpLmNvbnRpbnVlPSExKSxpLmNvZGU/PyhpLmNvZGU9ImN1c3RvbSIpLCJpbnB1dCJpbiBpfHwoaS5pbnB1dD1uLnZhbHVlKSxpLmluc3Q/PyhpLmluc3Q9ZSksbi5pc3N1ZXMucHVzaChvdChpKSl9fTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLG4pKToobi52YWx1ZT1yLG4pfX0pO2Z1bmN0aW9uIFpuKGUpe3JldHVybiBuZXcgbHIoe3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOmV9KX1jb25zdCBUdD1wKCJab2RPcHRpb25hbCIsKGUsdCk9PntKcy5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm1mKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gRChlKXtyZXR1cm4gbmV3IFR0KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBObj1wKCJab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e3VwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bWYoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBkcihlKXtyZXR1cm4gbmV3IE5uKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBwcj1wKCJab2ROdWxsYWJsZSIsKGUsdCk9PntscC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlVnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gaXQoZSl7cmV0dXJuIG5ldyBwcih7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTplfSl9ZnVuY3Rpb24gSGEoZSl7cmV0dXJuIEQoaXQoZSkpfWNvbnN0IGZyPXAoIlpvZERlZmF1bHQiLChlLHQpPT57ZHAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5GZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZURlZmF1bHQ9ZS51bndyYXB9KTtmdW5jdGlvbiBocihlLHQpe3JldHVybiBuZXcgZnIoe3R5cGU6ImRlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOl9vKHQpfX0pfWNvbnN0IG1yPXAoIlpvZFByZWZhdWx0IiwoZSx0KT0+e3BwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+QmcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBncihlLHQpe3JldHVybiBuZXcgbXIoe3R5cGU6InByZWZhdWx0Iixpbm5lclR5cGU6ZSxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3QoKTpfbyh0KX19KX1jb25zdCBqbj1wKCJab2ROb25PcHRpb25hbCIsKGUsdCk9PntmcC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkhnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gdnIoZSx0KXtyZXR1cm4gbmV3IGpuKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOmUsLi4ueSh0KX0pfWNvbnN0IGJyPXAoIlpvZFN1Y2Nlc3MiLChlLHQpPT57aHAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5DZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIEZhKGUpe3JldHVybiBuZXcgYnIoe3R5cGU6InN1Y2Nlc3MiLGlubmVyVHlwZTplfSl9Y29uc3QgeXI9cCgiWm9kQ2F0Y2giLChlLHQpPT57bXAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5WZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZUNhdGNoPWUudW53cmFwfSk7ZnVuY3Rpb24gX3IoZSx0KXtyZXR1cm4gbmV3IHlyKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOmUsY2F0Y2hWYWx1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90Om1zKHQpfSl9Y29uc3Qga3I9cCgiWm9kTmFOIiwoZSx0KT0+e2dwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UGcoKX0pO2Z1bmN0aW9uIEJhKGUpe3JldHVybiBuZihrcixlKX1jb25zdCBJdD1wKCJab2RQaXBlIiwoZSx0KT0+e0tzLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+SmcoKSxlLmluPXQuaW4sZS5vdXQ9dC5vdXR9KTtmdW5jdGlvbiBNdChlLHQpe3JldHVybiBuZXcgSXQoe3R5cGU6InBpcGUiLGluOmUsb3V0OnR9KX1jb25zdCBQdD1wKCJab2RDb2RlYyIsKGUsdCk9PntJdC5pbml0KGUsdCksV3MuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVmEoZSx0LG4pe3JldHVybiBuZXcgUHQoe3R5cGU6InBpcGUiLGluOmUsb3V0OnQsdHJhbnNmb3JtOm4uZGVjb2RlLHJldmVyc2VUcmFuc2Zvcm06bi5lbmNvZGV9KX1mdW5jdGlvbiBKYShlKXtjb25zdCB0PWUuX3pvZC5kZWY7cmV0dXJuIG5ldyBQdCh7dHlwZToicGlwZSIsaW46dC5vdXQsb3V0OnQuaW4sdHJhbnNmb3JtOnQucmV2ZXJzZVRyYW5zZm9ybSxyZXZlcnNlVHJhbnNmb3JtOnQudHJhbnNmb3JtfSl9Y29uc3Qgd3I9cCgiWm9kUHJlcHJvY2VzcyIsKGUsdCk9PntJdC5pbml0KGUsdCksdnAuaW5pdChlLHQpfSksJHI9cCgiWm9kUmVhZG9ubHkiLChlLHQpPT57YnAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5LZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFNyKGUpe3JldHVybiBuZXcgJHIoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6ZX0pfWNvbnN0IHpyPXAoIlpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9Pnt5cC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnhnKCl9KTtmdW5jdGlvbiBLYShlLHQpe3JldHVybiBuZXcgenIoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOmUsLi4ueSh0KX0pfWNvbnN0IFRyPXAoIlpvZExhenkiLChlLHQpPT57R3MuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5HZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmdldHRlcigpfSk7ZnVuY3Rpb24gSXIoZSl7cmV0dXJuIG5ldyBUcih7dHlwZToibGF6eSIsZ2V0dGVyOmV9KX1jb25zdCBQcj1wKCJab2RQcm9taXNlIiwoZSx0KT0+e2twLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+V2coKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBXYShlKXtyZXR1cm4gbmV3IFByKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6ZX0pfWNvbnN0IHhyPXAoIlpvZEZ1bmN0aW9uIiwoZSx0KT0+e19wLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UmcoKX0pO2Z1bmN0aW9uIGF0KGUpe3JldHVybiBuZXcgeHIoe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpBcnJheS5pc0FycmF5KGU/LmlucHV0KT9zcihlPy5pbnB1dCk6ZT8uaW5wdXQ/P3ooWigpKSxvdXRwdXQ6ZT8ub3V0cHV0Pz9aKCl9KX1jb25zdCB4dD1wKCJab2RDdXN0b20iLChlLHQpPT57d3AuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5PZygpfSk7ZnVuY3Rpb24gR2EoZSl7Y29uc3QgdD1uZXcgSCh7Y2hlY2s6ImN1c3RvbSJ9KTtyZXR1cm4gdC5fem9kLmNoZWNrPWUsdH1mdW5jdGlvbiBFcihlLHQpe3JldHVybiBzZih4dCxlPz8oKCk9PiEwKSx0KX1mdW5jdGlvbiBDcihlLHQ9e30pe3JldHVybiBhZih4dCxlLHQpfWZ1bmN0aW9uIE9yKGUsdCl7cmV0dXJuIGNmKGUsdCl9Y29uc3QgUWE9bGYsWWE9ZGYsUnI9cCgiWm9kSW5zdGFuY2VPZiIsKGUsdCk9Pnt4dC5pbml0KGUsdCl9LHtwcm9wZXJ0aWVzKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socm4oZSx0KSl9fSk7ZnVuY3Rpb24gWGEoZSx0PXt9KXtjb25zdCBuPW5ldyBScih7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjpvPT5vIGluc3RhbmNlb2YgZSxhYm9ydDohMCwuLi55KHQpfSk7cmV0dXJuIG4uX3pvZC5iYWcuQ2xhc3M9ZSxuLl96b2QuY2hlY2s9bz0+e28udmFsdWUgaW5zdGFuY2VvZiBlfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOmUubmFtZSxpbnB1dDpvLnZhbHVlLGluc3Q6bixwYXRoOlsuLi5uLl96b2QuZGVmLnBhdGg/P1tdXX0pfSxufWNvbnN0IGVjPSguLi5lKT0+cGYoe0NvZGVjOlB0LEJvb2xlYW46a3QsU3RyaW5nOmh0fSwuLi5lKTtmdW5jdGlvbiB0YyhlKXtjb25zdCB0PUlyKCgpPT5FKFtmKGUpLFAoKSxOKCksQ24oKSx6KHQpLE8oZigpLHQpXSkpO3JldHVybiB0fWZ1bmN0aW9uIE1uKGUsdCl7cmV0dXJuIG5ldyB3cih7dHlwZToicGlwZSIsaW46Wm4oZSksb3V0OnR9KX1jb25zdCBvdj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kQW55OkdvLFpvZEFycmF5OmVyLFpvZEJhc2U2NDpUbixab2RCYXNlNjRVUkw6SW4sWm9kQmlnSW50Ond0LFpvZEJpZ0ludEZvcm1hdDpFbixab2RCb29sZWFuOmt0LFpvZENJRFJ2NDpTbixab2RDSURSdjY6em4sWm9kQ1VJRDp2bixab2RDVUlEMjpibixab2RDYXRjaDp5cixab2RDb2RlYzpQdCxab2RDcmVkaXRDYXJkOkJvLFpvZEN1c3RvbTp4dCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6TWUsWm9kRGF0ZTpSbixab2REZWZhdWx0OmZyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpucixab2RFMTY0OlBuLFpvZEVtYWlsOmZuLFpvZEVtb2ppOm1uLFpvZEVudW06S2UsWm9kRXhhY3RPcHRpb25hbDpObixab2RGaWxlOnVyLFpvZEZ1bmN0aW9uOnhyLFpvZEdVSUQ6aG4sWm9kSUJBTjpWbyxab2RJUHY0OnduLFpvZElQdjY6JG4sWm9kSVNPRGF0ZTpndCxab2RJU09EYXRlVGltZTptdCxab2RJU09EdXJhdGlvbjpidCxab2RJU09UaW1lOnZ0LFpvZEluc3RhbmNlT2Y6UnIsWm9kSW50ZXJzZWN0aW9uOm9yLFpvZEpXVDp4bixab2RLU1VJRDprbixab2RMYXp5OlRyLFpvZExpdGVyYWw6Y3IsWm9kTUFDOkZvLFpvZE1hcDppcixab2ROYU46a3IsWm9kTmFub0lEOmduLFpvZE5ldmVyOllvLFpvZE5vbk9wdGlvbmFsOmpuLFpvZE51bGw6V28sWm9kTnVsbGFibGU6cHIsWm9kTnVtYmVyOl90LFpvZE51bWJlckZvcm1hdDpxZSxab2RPYmplY3Q6JHQsWm9kT3B0aW9uYWw6VHQsWm9kUGlwZTpJdCxab2RQcmVmYXVsdDptcixab2RQcmVwcm9jZXNzOndyLFpvZFByb21pc2U6UHIsWm9kUmVhZG9ubHk6JHIsWm9kUmVjb3JkOkplLFpvZFNldDphcixab2RTdHJpbmc6aHQsWm9kU3RyaW5nRm9ybWF0OmosWm9kU3VjY2Vzczpicixab2RTeW1ib2w6Sm8sWm9kVGVtcGxhdGVMaXRlcmFsOnpyLFpvZFRyYW5zZm9ybTpscixab2RUdXBsZTpycixab2RUeXBlOngsWm9kVUxJRDp5bixab2RVUkw6eXQsWm9kVVVJRDp5ZSxab2RVbmRlZmluZWQ6S28sWm9kVW5pb246U3QsWm9kVW5rbm93bjpRbyxab2RWb2lkOlhvLFpvZFhJRDpfbixab2RYb3I6dHIsX1pvZFN0cmluZzpwbixfZGVmYXVsdDpocixfZnVuY3Rpb246YXQsYW55Ok9uLGFycmF5OnosYmFzZTY0OmZhLGJhc2U2NHVybDpoYSxiaWdpbnQ6UGEsYm9vbGVhbjpOLGNhdGNoOl9yLGNoZWNrOkdhLGNpZHJ2NDpkYSxjaWRydjY6cGEsY29kZWM6VmEsY3JlZGl0Q2FyZDpnYSxjdWlkOm9hLGN1aWQyOnJhLGN1cnJlbmN5Q29kZTp3YSxjdXN0b206RXIsZGF0ZTpSYSxkZXNjcmliZTpRYSxkaXNjcmltaW5hdGVkVW5pb246QW4sZTE2NDptYSxlbWFpbDpKaSxlbW9qaTp0YSxlbnVtOlgsZXhhY3RPcHRpb25hbDpkcixmaWxlOlVhLGZsb2F0MzI6U2EsZmxvYXQ2NDp6YSxmdW5jdGlvbjphdCxndWlkOktpLGhhc2g6JGEsaGV4OmthLGhvc3RuYW1lOl9hLGh0dHBVcmw6ZWEsaWJhbjp2YSxpbnN0YW5jZW9mOlhhLGludDpqdCxpbnQzMjpUYSxpbnQ2NDp4YSxpbnRlcnNlY3Rpb246enQsaW52ZXJ0Q29kZWM6SmEsaXB2NDpjYSxpcHY2OmxhLGpzb246dGMsand0OmJhLGtleW9mOkFhLGtzdWlkOmFhLGxhenk6SXIsbGl0ZXJhbDpoLGxvb3NlT2JqZWN0OlksbG9vc2VSZWNvcmQ6TWEsbWFjOnVhLG1hcDpxYSxtZXRhOllhLG5hbjpCYSxuYW5vaWQ6bmEsbmF0aXZlRW51bTpMYSxuZXZlcjpWZSxub25vcHRpb25hbDp2cixudWxsOkNuLG51bGxhYmxlOml0LG51bGxpc2g6SGEsbnVtYmVyOlAsb2JqZWN0Omcsb3B0aW9uYWw6RCxwYXJ0aWFsUmVjb3JkOmphLHBpcGU6TXQscHJlZmF1bHQ6Z3IscHJlcHJvY2VzczpNbixwcm9taXNlOldhLHJlYWRvbmx5OlNyLHJlY29yZDpPLHJlZmluZTpDcixzZXQ6RGEsc3RyaWN0T2JqZWN0OlphLHN0cmluZzpmLHN0cmluZ0Zvcm1hdDp5YSxzdHJpbmdib29sOmVjLHN1Y2Nlc3M6RmEsc3VwZXJSZWZpbmU6T3Isc3ltYm9sOkNhLHRlbXBsYXRlTGl0ZXJhbDpLYSx0cmFuc2Zvcm06Wm4sdHVwbGU6c3IsdWludDMyOklhLHVpbnQ2NDpFYSx1bGlkOnNhLHVuZGVmaW5lZDpzdCx1bmlvbjpFLHVua25vd246Wix1cmw6WGksdXVpZDpXaSx1dWlkdjQ6R2ksdXVpZHY2OlFpLHV1aWR2NzpZaSx2b2lkOk9hLHhpZDppYSx4b3I6TmF9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksX2Y9e2ludmFsaWRfdHlwZToiaW52YWxpZF90eXBlIix0b29fYmlnOiJ0b29fYmlnIix0b29fc21hbGw6InRvb19zbWFsbCIsaW52YWxpZF9mb3JtYXQ6ImludmFsaWRfZm9ybWF0Iixub3RfbXVsdGlwbGVfb2Y6Im5vdF9tdWx0aXBsZV9vZiIsdW5yZWNvZ25pemVkX2tleXM6InVucmVjb2duaXplZF9rZXlzIixpbnZhbGlkX3VuaW9uOiJpbnZhbGlkX3VuaW9uIixpbnZhbGlkX2tleToiaW52YWxpZF9rZXkiLGludmFsaWRfZWxlbWVudDoiaW52YWxpZF9lbGVtZW50IixpbnZhbGlkX3ZhbHVlOiJpbnZhbGlkX3ZhbHVlIixjdXN0b206ImN1c3RvbSJ9O2Z1bmN0aW9uIGtmKGUpe1coe2N1c3RvbUVycm9yOmV9KX1mdW5jdGlvbiB3Zigpe3JldHVybiBXKCkuY3VzdG9tRXJyb3J9dmFyIGxvO2xvfHwobG89e30pO2Z1bmN0aW9uICRmKGUpe3JldHVybiBQaShtdCxlKX1mdW5jdGlvbiBydihlKXtyZXR1cm4geGkoZ3QsZSl9ZnVuY3Rpb24gc3YoZSl7cmV0dXJuIEVpKHZ0LGUpfWZ1bmN0aW9uIGl2KGUpe3JldHVybiBDaShidCxlKX1jb25zdCBuYz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kSVNPRGF0ZTpndCxab2RJU09EYXRlVGltZTptdCxab2RJU09EdXJhdGlvbjpidCxab2RJU09UaW1lOnZ0LGRhdGU6cnYsZGF0ZXRpbWU6JGYsZHVyYXRpb246aXYsdGltZTpzdn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSx3PXsuLi5vdiwuLi50dixpc286bmN9LGF2PW5ldyBTZXQoWyIkc2NoZW1hIiwiJHJlZiIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiLCIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciIsInR5cGUiLCJlbnVtIiwiY29uc3QiLCJhbnlPZiIsIm9uZU9mIiwiYWxsT2YiLCJub3QiLCJwcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lcyIsIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIiwiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsIm1pbkl0ZW1zIiwibWF4SXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNvbnRhaW5zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsInBhdHRlcm4iLCJmb3JtYXQiLCJtaW5pbXVtIiwibWF4aW11bSIsImV4Y2x1c2l2ZU1pbmltdW0iLCJleGNsdXNpdmVNYXhpbXVtIiwibXVsdGlwbGVPZiIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdCIsImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImlmIiwidGhlbiIsImVsc2UiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW50UmVxdWlyZWQiLCJudWxsYWJsZSIsInJlYWRPbmx5Il0pO2Z1bmN0aW9uIGN2KGUsdCl7Y29uc3Qgbj1lLiRzY2hlbWE7cmV0dXJuIG49PT0iaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPyJkcmFmdC0yMDIwLTEyIjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI/ImRyYWZ0LTciOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIj8iZHJhZnQtNCI6dD8/ImRyYWZ0LTIwMjAtMTIifWZ1bmN0aW9uIHR1KGUsdCl7cmV0dXJuIGUubWFwKChuLG8pPT5vPHQ/bjpuLm9wdGlvbmFsKCkpfWZ1bmN0aW9uIHV2KGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gbHYoZSx0KXtpZighZS5zdGFydHNXaXRoKCIjIikpdGhyb3cgbmV3IEVycm9yKCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkIik7Y29uc3Qgbj1lLnNsaWNlKDEpLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pO2lmKG4ubGVuZ3RoPT09MClyZXR1cm4gdC5yb290U2NoZW1hO2NvbnN0IG89dC52ZXJzaW9uPT09ImRyYWZ0LTIwMjAtMTIiPyIkZGVmcyI6ImRlZmluaXRpb25zIjtpZihuWzBdPT09byl7Y29uc3Qgcj1uWzFdPT09dm9pZCAwP3ZvaWQgMDp1dihuWzFdKTtpZighcnx8IXQuZGVmc1tyXSl0aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKTtyZXR1cm4gdC5kZWZzW3JdfXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApfWZ1bmN0aW9uIGR2KGUsdCl7cmV0dXJuIHcudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYodHlwZW9mIHIhPSJvYmplY3QifHxyPT09bnVsbHx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm47Y29uc3Qgcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKTtpZih0Lm1pblByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pblByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBzbWFsbDogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPj0ke3QubWluUHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0Lm1heFByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhQcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gYmlnOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA8PSR7dC5tYXhQcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQua2V5U2NoZW1hKWZvcihjb25zdCBpIG9mIHMpe2NvbnN0IGE9dC5rZXlTY2hlbWEuc2FmZVBhcnNlKGkpO2Euc3VjY2Vzc3x8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6YS5lcnJvci5pc3N1ZXMsaW5wdXQ6aSxwYXRoOltpXSxjb250aW51ZTohMH0pfX0pLnBpcGUoZSl9ZnVuY3Rpb24gc3MoZSx0KXtpZihlPT09bnVsbClyZXR1cm4ieiI7Y29uc3Qgbj10eXBlb2YgZTtpZihuIT09Im9iamVjdCIpe2lmKG49PT0ibnVtYmVyIiYmTnVtYmVyLmlzTmFOKGUpKXJldHVybiBudWxsO2NvbnN0IG89U3RyaW5nKGUpO3JldHVybmAke25bMF19JHtvLmxlbmd0aH06JHtvfWB9aWYodC5oYXMoZSkpcmV0dXJuIG51bGw7dC5hZGQoZSk7dHJ5e2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHM9W107Zm9yKGNvbnN0IGkgb2YgZSl7Y29uc3QgYT1zcyhpLHQpO2lmKGE9PT1udWxsKXJldHVybiBudWxsO3MucHVzaChhKX1yZXR1cm5gYSR7cy5sZW5ndGh9Olske3Muam9pbigiLCIpfV1gfWNvbnN0IG89T2JqZWN0LmtleXMoZSkuc29ydCgpLHI9W107Zm9yKGNvbnN0IHMgb2Ygbyl7Y29uc3QgaT1zcyhlW3NdLHQpO2lmKGk9PT1udWxsKXJldHVybiBudWxsO3IucHVzaChgJHtzLmxlbmd0aH06JHtzfT0ke2l9YCl9cmV0dXJuYG8ke3IubGVuZ3RofTp7JHtyLmpvaW4oIiwiKX19YH1maW5hbGx5e3QuZGVsZXRlKGUpfX1jb25zdCBwdj1uZXcgU2V0KFsiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY29udGFpbnMiLCJwcm9wZXJ0eU5hbWVzIiwibm90IiwiaWYiLCJ0aGVuIiwiZWxzZSIsImFsbE9mIiwiYW55T2YiLCJvbmVPZiIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJjb250ZW50U2NoZW1hIl0pLGZ2PW5ldyBTZXQoWyJwcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW5jaWVzIiwiJGRlZnMiLCJkZWZpbml0aW9ucyJdKTtmdW5jdGlvbiBSdChlKXtyZXR1cm4gdHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbD8hMTpBcnJheS5pc0FycmF5KGUpP2Uuc29tZShSdCk6dHlwZW9mIGUuJHJlZj09InN0cmluZyI/ITA6T2JqZWN0LmVudHJpZXMoZSkuc29tZSgoW3Qsbl0pPT5wdi5oYXModCk/UnQobik6IWZ2Lmhhcyh0KXx8dHlwZW9mIG4hPSJvYmplY3QifHxuPT09bnVsbD8hMTpPYmplY3QudmFsdWVzKG4pLnNvbWUoUnQpKX1mdW5jdGlvbiBudShlKXtyZXR1cm4gZT09PTE/ImVsZW1lbnQiOiJlbGVtZW50cyJ9ZnVuY3Rpb24gaHYoZSx0KXtyZXR1cm4gdy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZihBcnJheS5pc0FycmF5KHIpKXtpZih0LnVuaXF1ZUl0ZW1zPT09ITApe2NvbnN0IHM9bmV3IE1hcDtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl7Y29uc3QgYT1zcyhyW2ldLG5ldyBTZXQpO2lmKGE9PT1udWxsKWNvbnRpbnVlO2NvbnN0IGM9cy5nZXQoYSk7aWYoYz09PXZvaWQgMCl7cy5zZXQoYSxpKTtjb250aW51ZX1vLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IGl0ZW1zIG11c3QgYmUgdW5pcXVlOiBlbGVtZW50IGF0IGluZGV4ICR7aX0gZHVwbGljYXRlcyB0aGUgb25lIGF0IGluZGV4ICR7Y31gLGlucHV0OnIscGF0aDpbaV0sY29udGludWU6ITB9KX19aWYodC5jb250YWluc1NjaGVtYSl7Y29uc3Qgcz10Lm1pbkNvbnRhaW5zPz8xLGk9dC5tYXhDb250YWlucyE9PXZvaWQgMD90Lm1heENvbnRhaW5zKzE6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBhPTA7Zm9yKGNvbnN0IGMgb2YgcilpZih0LmNvbnRhaW5zU2NoZW1hLnNhZmVQYXJzZShjKS5zdWNjZXNzJiYrK2E+PWkpYnJlYWs7YTxzJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCAke3N9IG1hdGNoaW5nICR7bnUocyl9OyBmb3VuZCAke2F9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSksdC5tYXhDb250YWlucyE9PXZvaWQgMCYmYT50Lm1heENvbnRhaW5zJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBtb3N0ICR7dC5tYXhDb250YWluc30gbWF0Y2hpbmcgJHtudSh0Lm1heENvbnRhaW5zKX1gLGlucHV0OnIsY29udGludWU6ITB9KX19fSkucGlwZShlKX1mdW5jdGlvbiBvdShlLHQpe2lmKGUhPT0hMSlyZXR1cm4gZT09PXZvaWQgMHx8ZT09PSEwP3cuYW55KCk6b2UoZSx0KX1jb25zdCBtdj0vXig/OlswMV1cZHwyWzAtM10pOlswLTVdXGQ6WzAtNV1cZCg/OlwuXGQrKT8oPzpafFsrLV0oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkKSQvO2Z1bmN0aW9uIFNmKGUsdCl7aWYoZS5ub3QhPT12b2lkIDApe2lmKHR5cGVvZiBlLm5vdD09Im9iamVjdCImJk9iamVjdC5rZXlzKGUubm90KS5sZW5ndGg9PT0wKXJldHVybiB3Lm5ldmVyKCk7dGhyb3cgbmV3IEVycm9yKCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpIil9aWYoZS51bmV2YWx1YXRlZEl0ZW1zIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRJdGVtcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS51bmV2YWx1YXRlZFByb3BlcnRpZXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuaWYhPT12b2lkIDB8fGUudGhlbiE9PXZvaWQgMHx8ZS5lbHNlIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuZGVwZW5kZW50U2NoZW1hcyE9PXZvaWQgMHx8ZS5kZXBlbmRlbnRSZXF1aXJlZCE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImRlcGVuZGVudFNjaGVtYXMgYW5kIGRlcGVuZGVudFJlcXVpcmVkIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS4kcmVmKXtjb25zdCByPWUuJHJlZjtpZih0LnJlZnMuaGFzKHIpKXJldHVybiB0LnJlZnMuZ2V0KHIpO2lmKHQucHJvY2Vzc2luZy5oYXMocikpcmV0dXJuIHcubGF6eSgoKT0+e2lmKCF0LnJlZnMuaGFzKHIpKXRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgcmVmZXJlbmNlIG5vdCByZXNvbHZlZDogJHtyfWApO3JldHVybiB0LnJlZnMuZ2V0KHIpfSk7dC5wcm9jZXNzaW5nLmFkZChyKTtjb25zdCBzPWx2KHIsdCksaT1vZShzLHQpO3JldHVybiB0LnJlZnMuc2V0KHIsaSksdC5wcm9jZXNzaW5nLmRlbGV0ZShyKSxpfWlmKGUuZW51bSE9PXZvaWQgMCl7Y29uc3Qgcj1lLmVudW07aWYodC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmZS5udWxsYWJsZT09PSEwJiZyLmxlbmd0aD09PTEmJnJbMF09PT1udWxsKXJldHVybiB3Lm51bGwoKTtpZihyLmxlbmd0aD09PTApcmV0dXJuIHcubmV2ZXIoKTtpZihyLmxlbmd0aD09PTEpcmV0dXJuIHcubGl0ZXJhbChyWzBdKTtpZihyLmV2ZXJ5KGk9PnR5cGVvZiBpPT0ic3RyaW5nIikpcmV0dXJuIHcuZW51bShyKTtjb25zdCBzPXIubWFwKGk9PncubGl0ZXJhbChpKSk7cmV0dXJuIHMubGVuZ3RoPDI/c1swXTp3LnVuaW9uKFtzWzBdLHNbMV0sLi4ucy5zbGljZSgyKV0pfWlmKGUuY29uc3QhPT12b2lkIDApcmV0dXJuIHcubGl0ZXJhbChlLmNvbnN0KTtjb25zdCBuPWUudHlwZTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCByPW4ubWFwKHM9Pntjb25zdCBpPXsuLi5lLHR5cGU6c307cmV0dXJuIFNmKGksdCl9KTtyZXR1cm4gci5sZW5ndGg9PT0wP3cubmV2ZXIoKTpyLmxlbmd0aD09PTE/clswXTp3LnVuaW9uKHIpfWlmKCFuKXJldHVybiB3LmFueSgpO2xldCBvO3N3aXRjaChuKXtjYXNlInN0cmluZyI6e2xldCByPXcuc3RyaW5nKCk7aWYoZS5mb3JtYXQpe2NvbnN0IHM9ZS5mb3JtYXQ7cz09PSJlbWFpbCI/cj1yLmNoZWNrKHcuZW1haWwoKSk6cz09PSJ1cmkifHxzPT09InVyaS1yZWZlcmVuY2UiP3I9ci5jaGVjayh3LnVybCgpKTpzPT09InV1aWQifHxzPT09Imd1aWQiP3I9ci5jaGVjayh3LnV1aWQoKSk6cz09PSJkYXRlLXRpbWUiP3I9ci5jaGVjayh3Lmlzby5kYXRldGltZSh7b2Zmc2V0OiEwfSkpOnM9PT0iZGF0ZSI/cj1yLmNoZWNrKHcuaXNvLmRhdGUoKSk6cz09PSJ0aW1lIj9yPXIuY2hlY2sody5yZWdleChtdikpOnM9PT0iZHVyYXRpb24iP3I9ci5jaGVjayh3Lmlzby5kdXJhdGlvbigpKTpzPT09Imhvc3RuYW1lIj9yPXIuY2hlY2sody5ob3N0bmFtZSgpKTpzPT09ImlwdjQiP3I9ci5jaGVjayh3LmlwdjQoKSk6cz09PSJpcHY2Ij9yPXIuY2hlY2sody5pcHY2KCkpOnM9PT0ibWFjIj9yPXIuY2hlY2sody5tYWMoKSk6cz09PSJjaWRyIj9yPXIuY2hlY2sody5jaWRydjQoKSk6cz09PSJjaWRyLXY2Ij9yPXIuY2hlY2sody5jaWRydjYoKSk6cz09PSJiYXNlNjQiP3I9ci5jaGVjayh3LmJhc2U2NCgpKTpzPT09ImJhc2U2NHVybCI/cj1yLmNoZWNrKHcuYmFzZTY0dXJsKCkpOnM9PT0iZTE2NCI/cj1yLmNoZWNrKHcuZTE2NCgpKTpzPT09ImNyZWRpdF9jYXJkIj9yPXIuY2hlY2sody5jcmVkaXRDYXJkKCkpOnM9PT0iaWJhbiI/cj1yLmNoZWNrKHcuaWJhbigpKTpzPT09Imp3dCI/cj1yLmNoZWNrKHcuand0KCkpOnM9PT0iZW1vamkiP3I9ci5jaGVjayh3LmVtb2ppKCkpOnM9PT0ibmFub2lkIj9yPXIuY2hlY2sody5uYW5vaWQoKSk6cz09PSJjdWlkIj9yPXIuY2hlY2sody5jdWlkKCkpOnM9PT0iY3VpZDIiP3I9ci5jaGVjayh3LmN1aWQyKCkpOnM9PT0idWxpZCI/cj1yLmNoZWNrKHcudWxpZCgpKTpzPT09InhpZCI/cj1yLmNoZWNrKHcueGlkKCkpOnM9PT0ia3N1aWQiJiYocj1yLmNoZWNrKHcua3N1aWQoKSkpfXR5cGVvZiBlLm1pbkxlbmd0aD09Im51bWJlciImJihyPXIubWluKGUubWluTGVuZ3RoKSksdHlwZW9mIGUubWF4TGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5tYXgoZS5tYXhMZW5ndGgpKSxlLnBhdHRlcm4mJihyPXIucmVnZXgobmV3IFJlZ0V4cChlLnBhdHRlcm4pKSksbz1yO2JyZWFrfWNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOntsZXQgcj1uPT09ImludGVnZXIiP3cubnVtYmVyKCkuaW50KCk6dy5udW1iZXIoKTt0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNaW5pbXVtIT09ITAmJihyPXIubWluKGUubWluaW11bSkpLHR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1heGltdW0hPT0hMCYmKHI9ci5tYXgoZS5tYXhpbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWluaW11bT09Im51bWJlciI/cj1yLmd0KGUuZXhjbHVzaXZlTWluaW11bSk6ZS5leGNsdXNpdmVNaW5pbXVtPT09ITAmJnR5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiYocj1yLmd0KGUubWluaW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1heGltdW09PSJudW1iZXIiP3I9ci5sdChlLmV4Y2x1c2l2ZU1heGltdW0pOmUuZXhjbHVzaXZlTWF4aW11bT09PSEwJiZ0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmKHI9ci5sdChlLm1heGltdW0pKSx0eXBlb2YgZS5tdWx0aXBsZU9mPT0ibnVtYmVyIiYmKHI9ci5tdWx0aXBsZU9mKGUubXVsdGlwbGVPZikpLG89cjticmVha31jYXNlImJvb2xlYW4iOntvPXcuYm9vbGVhbigpO2JyZWFrfWNhc2UibnVsbCI6e289dy5udWxsKCk7YnJlYWt9Y2FzZSJvYmplY3QiOntjb25zdCByPXt9LHM9ZS5wcm9wZXJ0aWVzfHx7fSxpPW5ldyBTZXQoZS5yZXF1aXJlZHx8W10pLGE9dHlwZW9mIGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiP29lKGUuYWRkaXRpb25hbFByb3BlcnRpZXMsdCk6dm9pZCAwO2Zvcihjb25zdFttLHZdb2YgT2JqZWN0LmVudHJpZXMocykpe2NvbnN0IGI9b2Uodix0KTtXZShyLG0saS5oYXMobSk/YjpiLm9wdGlvbmFsKCkpfWlmKGUucGF0dGVyblByb3BlcnRpZXMpe2NvbnN0IG09ZS5wYXR0ZXJuUHJvcGVydGllcyx2PU9iamVjdC5rZXlzKG0pLGI9W107Zm9yKGNvbnN0ICQgb2Ygdil7Y29uc3Qgaz1vZShtWyRdLHQpLFM9dy5zdHJpbmcoKS5yZWdleChuZXcgUmVnRXhwKCQpKTtiLnB1c2gody5sb29zZVJlY29yZChTLGspKX1jb25zdCBfPVtdO2lmKE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZfLnB1c2gody5vYmplY3QocikucGFzc3Rocm91Z2goKSksXy5wdXNoKC4uLmIpLF8ubGVuZ3RoPT09MClvPXcub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO2Vsc2UgaWYoXy5sZW5ndGg9PT0xKW89X1swXTtlbHNle2xldCAkPXcuaW50ZXJzZWN0aW9uKF9bMF0sX1sxXSk7Zm9yKGxldCBrPTI7azxfLmxlbmd0aDtrKyspJD13LmludGVyc2VjdGlvbigkLF9ba10pO289JH1pZihlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITEpe2NvbnN0ICQ9T2JqZWN0LmtleXMociksaz12Lm1hcChUPT5uZXcgUmVnRXhwKFQpKSxTPW87bz1vLmNoZWNrKFQ9PntpZighTmUoVC52YWx1ZSkpcmV0dXJuO2NvbnN0IEw9W107Zm9yKGNvbnN0IEcgb2YgT2JqZWN0LmtleXMoVC52YWx1ZSkpJC5pbmNsdWRlcyhHKXx8ay5zb21lKEY9PkYudGVzdChHKSl8fEwucHVzaChHKTtMLmxlbmd0aCYmVC5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGtleXM6TCxpbnB1dDpULnZhbHVlLGluc3Q6U30pfSl9fWVsc2V7Y29uc3QgbT13Lm9iamVjdChyKTtlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITE/bz1tLnN0cmljdCgpOmE/bz1tLmNhdGNoYWxsKGEpOm89bS5wYXNzdGhyb3VnaCgpfWNvbnN0IGM9ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiZlLnByb3BlcnR5TmFtZXMhPT0hMCx1PXR5cGVvZiBlLm1pblByb3BlcnRpZXM9PSJudW1iZXIiP2UubWluUHJvcGVydGllczp2b2lkIDAsZD10eXBlb2YgZS5tYXhQcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1heFByb3BlcnRpZXM6dm9pZCAwO2lmKGN8fHUhPT12b2lkIDB8fGQhPT12b2lkIDApe2xldCBtO2lmKGMpe2NvbnN0IHY9dHlwZW9mIGUucHJvcGVydHlOYW1lcz09Im9iamVjdCImJmUucHJvcGVydHlOYW1lcy50eXBlPT09dm9pZCAwP3t0eXBlOiJzdHJpbmciLC4uLmUucHJvcGVydHlOYW1lc306ZS5wcm9wZXJ0eU5hbWVzO209b2Uodix0KX1vPWR2KG8se2tleVNjaGVtYTptLG1pblByb3BlcnRpZXM6dSxtYXhQcm9wZXJ0aWVzOmR9KX1icmVha31jYXNlImFycmF5Ijp7Y29uc3Qgcj1lLnByZWZpeEl0ZW1zLHM9ZS5pdGVtcztpZihyJiZBcnJheS5pc0FycmF5KHIpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1yLm1hcChtPT5vZShtLHQpKSxjPXR1KGEsaSksdT1BcnJheS5pc0FycmF5KHMpP3ZvaWQgMDpvdShzLHQpLGQ9dy50dXBsZShjKTtvPXU/ZC5yZXN0KHUpOmQsdHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHcubWluTGVuZ3RoKGUubWluSXRlbXMpKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHcubWF4TGVuZ3RoKGUubWF4SXRlbXMpKSl9ZWxzZSBpZihBcnJheS5pc0FycmF5KHMpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1zLm1hcChtPT5vZShtLHQpKSxjPXR1KGEsaSksdT1vdShlLmFkZGl0aW9uYWxJdGVtcyx0KSxkPXcudHVwbGUoYyk7bz11P2QucmVzdCh1KTpkLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayh3Lm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayh3Lm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYocyE9PXZvaWQgMCl7Y29uc3QgaT1vZShzLHQpO2xldCBhPXcuYXJyYXkoaSk7dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYoYT1hLm1pbihlLm1pbkl0ZW1zKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYoYT1hLm1heChlLm1heEl0ZW1zKSksbz1hfWVsc2Ugbz13LmFycmF5KHcuYW55KCkpOyhlLnVuaXF1ZUl0ZW1zPT09ITB8fGUuY29udGFpbnMhPT12b2lkIDApJiYobz1odihvLHt1bmlxdWVJdGVtczplLnVuaXF1ZUl0ZW1zPT09ITAsY29udGFpbnNTY2hlbWE6ZS5jb250YWlucyE9PXZvaWQgMD9vZShlLmNvbnRhaW5zLHQpOnZvaWQgMCxtaW5Db250YWluczp0eXBlb2YgZS5taW5Db250YWlucz09Im51bWJlciI/ZS5taW5Db250YWluczp2b2lkIDAsbWF4Q29udGFpbnM6dHlwZW9mIGUubWF4Q29udGFpbnM9PSJudW1iZXIiP2UubWF4Q29udGFpbnM6dm9pZCAwfSkpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlOiAke259YCl9cmV0dXJuIG99ZnVuY3Rpb24gb2UoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP3cuYW55KCk6dy5uZXZlcigpO2xldCBuPVNmKGUsdCk7Y29uc3Qgbz1lLnR5cGV8fGUuZW51bSE9PXZvaWQgMHx8ZS5jb25zdCE9PXZvaWQgMDtpZihlLmFueU9mJiZBcnJheS5pc0FycmF5KGUuYW55T2YpKXtjb25zdCBhPWUuYW55T2YubWFwKHU9Pm9lKHUsdCkpLGM9dy51bmlvbihhKTtuPW8/dy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUub25lT2YmJkFycmF5LmlzQXJyYXkoZS5vbmVPZikpe2NvbnN0IGE9ZS5vbmVPZi5tYXAodT0+b2UodSx0KSksYz13LnhvcihhKTtuPW8/dy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUuYWxsT2YmJkFycmF5LmlzQXJyYXkoZS5hbGxPZikpaWYoZS5hbGxPZi5sZW5ndGg9PT0wKW49bz9uOncuYW55KCk7ZWxzZXtsZXQgYT1vP246b2UoZS5hbGxPZlswXSx0KTtjb25zdCBjPW8/MDoxO2ZvcihsZXQgdT1jO3U8ZS5hbGxPZi5sZW5ndGg7dSsrKWE9dy5pbnRlcnNlY3Rpb24oYSxvZShlLmFsbE9mW3VdLHQpKTtuPWF9ZS5udWxsYWJsZT09PSEwJiZ0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiYobj13Lm51bGxhYmxlKG4pKSxlLnJlYWRPbmx5PT09ITAmJihuPXcucmVhZG9ubHkobikpLGUuZGVmYXVsdCE9PXZvaWQgMCYmKG49bi5kZWZhdWx0KGUuZGVmYXVsdCkpO2NvbnN0IHI9e30scz1bIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIl07Zm9yKGNvbnN0IGEgb2YgcylhIGluIGUmJihyW2FdPWVbYV0pO2NvbnN0IGk9WyJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSJdO2Zvcihjb25zdCBhIG9mIGkpYSBpbiBlJiYoclthXT1lW2FdKTtpZihlLnR5cGU9PT0ib2JqZWN0IiYmZS4kcmVmPT09dm9pZCAwKXtlLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJiFSdChlLnByb3BlcnR5TmFtZXMpJiYoci5wcm9wZXJ0eU5hbWVzPWUucHJvcGVydHlOYW1lcyk7Zm9yKGNvbnN0IGEgb2ZbIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIl0pZVthXSE9PXZvaWQgMCYmKHJbYV09ZVthXSl9aWYoZS50eXBlPT09ImFycmF5IiYmZS4kcmVmPT09dm9pZCAwKXtlLmNvbnRhaW5zIT09dm9pZCAwJiYhUnQoZS5jb250YWlucykmJihyLmNvbnRhaW5zPWUuY29udGFpbnMpO2Zvcihjb25zdCBhIG9mWyJ1bmlxdWVJdGVtcyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiXSllW2FdIT09dm9pZCAwJiYoclthXT1lW2FdKX1mb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyhlKSlhdi5oYXMoYSl8fFdlKHIsYSxlW2FdKTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJnQucmVnaXN0cnkuYWRkKG4sciksZS5kZXNjcmlwdGlvbiYmKG49bi5kZXNjcmliZShlLmRlc2NyaXB0aW9uKSksbn1mdW5jdGlvbiB6ZihlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/dy5hbnkoKTp3Lm5ldmVyKCk7bGV0IG47dHJ5e249SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJmcm9tSlNPTlNjaGVtYSBpbnB1dCBpcyBub3QgdmFsaWQgSlNPTiAocG9zc2libHkgY3ljbGljKTsgdXNlICRkZWZzLyRyZWYgZm9yIHJlY3Vyc2l2ZSBzY2hlbWFzIil9Y29uc3Qgbz1jdihuLHQ/LmRlZmF1bHRUYXJnZXQpLHI9bi4kZGVmc3x8bi5kZWZpbml0aW9uc3x8e30scz17dmVyc2lvbjpvLGRlZnM6cixyZWZzOm5ldyBNYXAscHJvY2Vzc2luZzpuZXcgU2V0LHJvb3RTY2hlbWE6bixyZWdpc3RyeTp0Py5yZWdpc3RyeT8/aGV9O3JldHVybiBvZShuLHMpfWZ1bmN0aW9uIFRmKGUpe3JldHVybiBSaShlLHtvYmplY3Q6dD0+dC5wYXJ0aWFsKCksdW5pb246dD0+e2NvbnN0IG49dC5fem9kLmRlZjtyZXR1cm4gbi5kaXNjcmltaW5hdG9yPT09dm9pZCAwP3Q6RShuLm9wdGlvbnMpfX0pfWZ1bmN0aW9uIGd2KGUsdCl7aWYoIXQ/Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBuPWUuX3pvZC5kZWY7cmV0dXJuIEIoZSxuZShuLHtjaGVja3M6Wy4uLm4uY2hlY2tzPz9bXSwuLi50XX0pLHtwYXJlbnQ6ITB9KX1mdW5jdGlvbiBJZihlKXtyZXR1cm4gZ3YoZS5vdXQsZS5jaGVja3MpfWZ1bmN0aW9uIHZ2KGUpe3JldHVybiBlLmluLl96b2QudHJhaXRzLmhhcygiJFpvZFRyYW5zZm9ybSIpP0lmKGUpOmUuaW59ZnVuY3Rpb24gUGYoZSl7cmV0dXJuIFJpKGUse3BpcGU6dD0+dnYodC5fem9kLmRlZiksZGVmYXVsdDoodCxuKT0+bj9EKHQuX3pvZC5kZWYuaW5uZXJUeXBlKTp0LGNhdGNoOih0LG4pPT5uP3QuX3pvZC5kZWYuaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiB4ZihlKXtyZXR1cm4gUmkoZSx7cGlwZTp0PT5JZih0Ll96b2QuZGVmKSxwcmVmYXVsdDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gYnYoZSl7cmV0dXJuIEVwKGh0LGUpfWZ1bmN0aW9uIHl2KGUpe3JldHVybiBacChfdCxlKX1mdW5jdGlvbiBfdihlKXtyZXR1cm4gVXAoa3QsZSl9ZnVuY3Rpb24ga3YoZSl7cmV0dXJuIEZwKHd0LGUpfWZ1bmN0aW9uIHd2KGUpe3JldHVybiB0ZihSbixlKX1jb25zdCBFZj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYmlnaW50Omt2LGJvb2xlYW46X3YsZGF0ZTp3dixudW1iZXI6eXYsc3RyaW5nOmJ2fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHJ1PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkYnJhbmQ6YnMsJGlucHV0OlhzLCRvdXRwdXQ6WXMsSU5WQUxJRDp0aSxORVZFUjp2cyxUaW1lUHJlY2lzaW9uOklpLFpvZEFueTpHbyxab2RBcnJheTplcixab2RCYXNlNjQ6VG4sWm9kQmFzZTY0VVJMOkluLFpvZEJpZ0ludDp3dCxab2RCaWdJbnRGb3JtYXQ6RW4sWm9kQm9vbGVhbjprdCxab2RDSURSdjQ6U24sWm9kQ0lEUnY2OnpuLFpvZENVSUQ6dm4sWm9kQ1VJRDI6Ym4sWm9kQ2F0Y2g6eXIsWm9kQ29kZWM6UHQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6bmksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6b2ksWm9kQ3JlZGl0Q2FyZDpCbyxab2RDdXN0b206eHQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0Ok1lLFpvZERhdGU6Um4sWm9kRGVmYXVsdDpmcixab2REaXNjcmltaW5hdGVkVW5pb246bnIsWm9kRTE2NDpQbixab2RFbWFpbDpmbixab2RFbW9qaTptbixab2RFbnVtOktlLFpvZEVycm9yOnlmLFpvZEV4YWN0T3B0aW9uYWw6Tm4sWm9kRmlsZTp1cixnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKCl7cmV0dXJuIGxvfSxab2RGdW5jdGlvbjp4cixab2RHVUlEOmhuLFpvZElCQU46Vm8sWm9kSVB2NDp3bixab2RJUHY2OiRuLFpvZElTT0RhdGU6Z3QsWm9kSVNPRGF0ZVRpbWU6bXQsWm9kSVNPRHVyYXRpb246YnQsWm9kSVNPVGltZTp2dCxab2RJbnN0YW5jZU9mOlJyLFpvZEludGVyc2VjdGlvbjpvcixab2RJc3N1ZUNvZGU6X2YsWm9kSldUOnhuLFpvZEtTVUlEOmtuLFpvZExhenk6VHIsWm9kTGl0ZXJhbDpjcixab2RNQUM6Rm8sWm9kTWFwOmlyLFpvZE5hTjprcixab2ROYW5vSUQ6Z24sWm9kTmV2ZXI6WW8sWm9kTm9uT3B0aW9uYWw6am4sWm9kTnVsbDpXbyxab2ROdWxsYWJsZTpwcixab2ROdW1iZXI6X3QsWm9kTnVtYmVyRm9ybWF0OnFlLFpvZE9iamVjdDokdCxab2RPcHRpb25hbDpUdCxab2RQaXBlOkl0LFpvZFByZWZhdWx0Om1yLFpvZFByZXByb2Nlc3M6d3IsWm9kUHJvbWlzZTpQcixab2RSZWFkb25seTokcixab2RSZWFsRXJyb3I6YWUsWm9kUmVjb3JkOkplLFpvZFNldDphcixab2RTdHJpbmc6aHQsWm9kU3RyaW5nRm9ybWF0OmosWm9kU3VjY2Vzczpicixab2RTeW1ib2w6Sm8sWm9kVGVtcGxhdGVMaXRlcmFsOnpyLFpvZFRyYW5zZm9ybTpscixab2RUdXBsZTpycixab2RUeXBlOngsWm9kVUxJRDp5bixab2RVUkw6eXQsWm9kVVVJRDp5ZSxab2RVbmRlZmluZWQ6S28sWm9kVW5pb246U3QsWm9kVW5rbm93bjpRbyxab2RWb2lkOlhvLFpvZFhJRDpfbixab2RYb3I6dHIsX1pvZFN0cmluZzpwbixfZGVmYXVsdDpocixfZnVuY3Rpb246YXQsYW55Ok9uLGFycmF5OnosYmFzZTY0OmZhLGJhc2U2NHVybDpoYSxiaWdpbnQ6UGEsYm9vbGVhbjpOLGNhdGNoOl9yLGNoZWNrOkdhLGNpZHJ2NDpkYSxjaWRydjY6cGEsY2xvbmU6Qixjb2RlYzpWYSxjb2VyY2U6RWYsY29tcGlsZTpyaSxjb25maWc6Vyxjb3JlOmdmLGNyZWRpdENhcmQ6Z2EsY3VpZDpvYSxjdWlkMjpyYSxjdXJyZW5jeUNvZGU6d2EsY3VzdG9tOkVyLGRhdGU6UmEsZGVjb2RlOkRpLGRlY29kZUFzeW5jOlVpLGRlZXBQYXJ0aWFsOlRmLGRlc2NyaWJlOlFhLGRpc2NyaW1pbmF0ZWRVbmlvbjpBbixlMTY0Om1hLGVtYWlsOkppLGVtb2ppOnRhLGVuY29kZTpxaSxlbmNvZGVBc3luYzpMaSxlbmRzV2l0aDpvbixlbnVtOlgsZXhhY3RPcHRpb25hbDpkcixmaWxlOlVhLGZsYXR0ZW5FcnJvcjpJbyxmbG9hdDMyOlNhLGZsb2F0NjQ6emEsZm9ybWF0RXJyb3I6UG8sZnJvbUpTT05TY2hlbWE6emYsZnVuY3Rpb246YXQsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpCcyxnZXRFcnJvck1hcDp3ZixnbG9iYWxSZWdpc3RyeTpoZSxndDpFZSxndGU6bGUsZ3VpZDpLaSxoYXNoOiRhLGhleDprYSxob3N0bmFtZTpfYSxodHRwVXJsOmVhLGliYW46dmEsaW5jbHVkZXM6dG4saW5wdXQ6UGYsaW5zdGFuY2VvZjpYYSxpbnQ6anQsaW50MzI6VGEsaW50NjQ6eGEsaW50ZXJzZWN0aW9uOnp0LGludmVydENvZGVjOkphLGlwdjQ6Y2EsaXB2NjpsYSxpc286bmMsanNvbjp0Yyxqd3Q6YmEsa2V5b2Y6QWEsa3N1aWQ6YWEsbGF6eTpJcixsZW5ndGg6cHQsbGl0ZXJhbDpoLGxvY2FsZXM6UXMsbG9vc2VPYmplY3Q6WSxsb29zZVJlY29yZDpNYSxsb3dlcmNhc2U6WHQsbHQ6eGUsbHRlOnVlLG1hYzp1YSxtYXA6cWEsbWF4TGVuZ3RoOmR0LG1heFNpemU6R2UsbWVtb2l6ZXI6Wm8sbWV0YTpZYSxtaW1lOnNuLG1pbkxlbmd0aDpqZSxtaW5TaXplOkNlLG11bHRpcGxlT2Y6QmUsbmFuOkJhLG5hbm9pZDpuYSxuYXRpdmVFbnVtOkxhLG5lZ2F0aXZlOkRvLG5ldmVyOlZlLG5vbm5lZ2F0aXZlOlVvLG5vbm9wdGlvbmFsOnZyLG5vbnBvc2l0aXZlOkxvLG5vcm1hbGl6ZTphbixudWxsOkNuLG51bGxhYmxlOml0LG51bGxpc2g6SGEsbnVtYmVyOlAsb2JqZWN0Omcsb3B0aW9uYWw6RCxvdXRwdXQ6eGYsb3ZlcndyaXRlOiRlLHBhcnNlOlppLHBhcnNlQXN5bmM6TmkscGFydGlhbFJlY29yZDpqYSxwaXBlOk10LHBvc2l0aXZlOnFvLHByZWZhdWx0OmdyLHByZXByb2Nlc3M6TW4scHJldHRpZnlFcnJvcjpfcyxwcm9taXNlOldhLHByb3BlcnRpZXM6cm4scHJvcGVydHk6SG8scmVhZG9ubHk6U3IscmVjb3JkOk8scmVmaW5lOkNyLHJlZ2V4Oll0LHJlZ2V4ZXM6Um8scmVnaXN0cnk6Tm8sc2FmZURlY29kZTpGaSxzYWZlRGVjb2RlQXN5bmM6Vmksc2FmZUVuY29kZTpIaSxzYWZlRW5jb2RlQXN5bmM6Qmksc2FmZVBhcnNlOmppLHNhZmVQYXJzZUFzeW5jOk1pLHNldDpEYSxzZXRFcnJvck1hcDprZixzaXplOmx0LHNsdWdpZnk6ZG4sc3RhcnRzV2l0aDpubixzdHJpY3RPYmplY3Q6WmEsc3RyaW5nOmYsc3RyaW5nRm9ybWF0OnlhLHN0cmluZ2Jvb2w6ZWMsc3VjY2VzczpGYSxzdXBlclJlZmluZTpPcixzeW1ib2w6Q2EsdGVtcGxhdGVMaXRlcmFsOkthLHRvSlNPTlNjaGVtYTpPaSx0b0xvd2VyQ2FzZTp1bix0b1VwcGVyQ2FzZTpsbix0b1pvZDpibyx0cmFuc2Zvcm06Wm4sdHJlZWlmeUVycm9yOnlzLHRyaW06Y24sdHVwbGU6c3IsdWludDMyOklhLHVpbnQ2NDpFYSx1bGlkOnNhLHVuZGVmaW5lZDpzdCx1bmlvbjpFLHVua25vd246Wix1cHBlcmNhc2U6ZW4sdXJsOlhpLHV0aWw6Z3MsdXVpZDpXaSx1dWlkdjQ6R2ksdXVpZHY2OlFpLHV1aWR2NzpZaSx2YWxpZGF0ZTpFbyx2YWxpZGF0ZUFzeW5jOkNvLHZvaWQ6T2Esd2l0aFBhcnNlcjpzaSx4aWQ6aWEseG9yOk5hfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLCR2PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkYnJhbmQ6YnMsJGlucHV0OlhzLCRvdXRwdXQ6WXMsSU5WQUxJRDp0aSxORVZFUjp2cyxUaW1lUHJlY2lzaW9uOklpLFpvZEFueTpHbyxab2RBcnJheTplcixab2RCYXNlNjQ6VG4sWm9kQmFzZTY0VVJMOkluLFpvZEJpZ0ludDp3dCxab2RCaWdJbnRGb3JtYXQ6RW4sWm9kQm9vbGVhbjprdCxab2RDSURSdjQ6U24sWm9kQ0lEUnY2OnpuLFpvZENVSUQ6dm4sWm9kQ1VJRDI6Ym4sWm9kQ2F0Y2g6eXIsWm9kQ29kZWM6UHQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6bmksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6b2ksWm9kQ3JlZGl0Q2FyZDpCbyxab2RDdXN0b206eHQsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0Ok1lLFpvZERhdGU6Um4sWm9kRGVmYXVsdDpmcixab2REaXNjcmltaW5hdGVkVW5pb246bnIsWm9kRTE2NDpQbixab2RFbWFpbDpmbixab2RFbW9qaTptbixab2RFbnVtOktlLFpvZEVycm9yOnlmLFpvZEV4YWN0T3B0aW9uYWw6Tm4sWm9kRmlsZTp1cixnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKCl7cmV0dXJuIGxvfSxab2RGdW5jdGlvbjp4cixab2RHVUlEOmhuLFpvZElCQU46Vm8sWm9kSVB2NDp3bixab2RJUHY2OiRuLFpvZElTT0RhdGU6Z3QsWm9kSVNPRGF0ZVRpbWU6bXQsWm9kSVNPRHVyYXRpb246YnQsWm9kSVNPVGltZTp2dCxab2RJbnN0YW5jZU9mOlJyLFpvZEludGVyc2VjdGlvbjpvcixab2RJc3N1ZUNvZGU6X2YsWm9kSldUOnhuLFpvZEtTVUlEOmtuLFpvZExhenk6VHIsWm9kTGl0ZXJhbDpjcixab2RNQUM6Rm8sWm9kTWFwOmlyLFpvZE5hTjprcixab2ROYW5vSUQ6Z24sWm9kTmV2ZXI6WW8sWm9kTm9uT3B0aW9uYWw6am4sWm9kTnVsbDpXbyxab2ROdWxsYWJsZTpwcixab2ROdW1iZXI6X3QsWm9kTnVtYmVyRm9ybWF0OnFlLFpvZE9iamVjdDokdCxab2RPcHRpb25hbDpUdCxab2RQaXBlOkl0LFpvZFByZWZhdWx0Om1yLFpvZFByZXByb2Nlc3M6d3IsWm9kUHJvbWlzZTpQcixab2RSZWFkb25seTokcixab2RSZWFsRXJyb3I6YWUsWm9kUmVjb3JkOkplLFpvZFNldDphcixab2RTdHJpbmc6aHQsWm9kU3RyaW5nRm9ybWF0OmosWm9kU3VjY2Vzczpicixab2RTeW1ib2w6Sm8sWm9kVGVtcGxhdGVMaXRlcmFsOnpyLFpvZFRyYW5zZm9ybTpscixab2RUdXBsZTpycixab2RUeXBlOngsWm9kVUxJRDp5bixab2RVUkw6eXQsWm9kVVVJRDp5ZSxab2RVbmRlZmluZWQ6S28sWm9kVW5pb246U3QsWm9kVW5rbm93bjpRbyxab2RWb2lkOlhvLFpvZFhJRDpfbixab2RYb3I6dHIsX1pvZFN0cmluZzpwbixfZGVmYXVsdDpocixfZnVuY3Rpb246YXQsYW55Ok9uLGFycmF5OnosYmFzZTY0OmZhLGJhc2U2NHVybDpoYSxiaWdpbnQ6UGEsYm9vbGVhbjpOLGNhdGNoOl9yLGNoZWNrOkdhLGNpZHJ2NDpkYSxjaWRydjY6cGEsY2xvbmU6Qixjb2RlYzpWYSxjb2VyY2U6RWYsY29tcGlsZTpyaSxjb25maWc6Vyxjb3JlOmdmLGNyZWRpdENhcmQ6Z2EsY3VpZDpvYSxjdWlkMjpyYSxjdXJyZW5jeUNvZGU6d2EsY3VzdG9tOkVyLGRhdGU6UmEsZGVjb2RlOkRpLGRlY29kZUFzeW5jOlVpLGRlZXBQYXJ0aWFsOlRmLGRlZmF1bHQ6cnUsZGVzY3JpYmU6UWEsZGlzY3JpbWluYXRlZFVuaW9uOkFuLGUxNjQ6bWEsZW1haWw6SmksZW1vamk6dGEsZW5jb2RlOnFpLGVuY29kZUFzeW5jOkxpLGVuZHNXaXRoOm9uLGVudW06WCxleGFjdE9wdGlvbmFsOmRyLGZpbGU6VWEsZmxhdHRlbkVycm9yOklvLGZsb2F0MzI6U2EsZmxvYXQ2NDp6YSxmb3JtYXRFcnJvcjpQbyxmcm9tSlNPTlNjaGVtYTp6ZixmdW5jdGlvbjphdCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOkJzLGdldEVycm9yTWFwOndmLGdsb2JhbFJlZ2lzdHJ5OmhlLGd0OkVlLGd0ZTpsZSxndWlkOktpLGhhc2g6JGEsaGV4OmthLGhvc3RuYW1lOl9hLGh0dHBVcmw6ZWEsaWJhbjp2YSxpbmNsdWRlczp0bixpbnB1dDpQZixpbnN0YW5jZW9mOlhhLGludDpqdCxpbnQzMjpUYSxpbnQ2NDp4YSxpbnRlcnNlY3Rpb246enQsaW52ZXJ0Q29kZWM6SmEsaXB2NDpjYSxpcHY2OmxhLGlzbzpuYyxqc29uOnRjLGp3dDpiYSxrZXlvZjpBYSxrc3VpZDphYSxsYXp5OklyLGxlbmd0aDpwdCxsaXRlcmFsOmgsbG9jYWxlczpRcyxsb29zZU9iamVjdDpZLGxvb3NlUmVjb3JkOk1hLGxvd2VyY2FzZTpYdCxsdDp4ZSxsdGU6dWUsbWFjOnVhLG1hcDpxYSxtYXhMZW5ndGg6ZHQsbWF4U2l6ZTpHZSxtZW1vaXplcjpabyxtZXRhOllhLG1pbWU6c24sbWluTGVuZ3RoOmplLG1pblNpemU6Q2UsbXVsdGlwbGVPZjpCZSxuYW46QmEsbmFub2lkOm5hLG5hdGl2ZUVudW06TGEsbmVnYXRpdmU6RG8sbmV2ZXI6VmUsbm9ubmVnYXRpdmU6VW8sbm9ub3B0aW9uYWw6dnIsbm9ucG9zaXRpdmU6TG8sbm9ybWFsaXplOmFuLG51bGw6Q24sbnVsbGFibGU6aXQsbnVsbGlzaDpIYSxudW1iZXI6UCxvYmplY3Q6ZyxvcHRpb25hbDpELG91dHB1dDp4ZixvdmVyd3JpdGU6JGUscGFyc2U6WmkscGFyc2VBc3luYzpOaSxwYXJ0aWFsUmVjb3JkOmphLHBpcGU6TXQscG9zaXRpdmU6cW8scHJlZmF1bHQ6Z3IscHJlcHJvY2VzczpNbixwcmV0dGlmeUVycm9yOl9zLHByb21pc2U6V2EscHJvcGVydGllczpybixwcm9wZXJ0eTpIbyxyZWFkb25seTpTcixyZWNvcmQ6TyxyZWZpbmU6Q3IscmVnZXg6WXQscmVnZXhlczpSbyxyZWdpc3RyeTpObyxzYWZlRGVjb2RlOkZpLHNhZmVEZWNvZGVBc3luYzpWaSxzYWZlRW5jb2RlOkhpLHNhZmVFbmNvZGVBc3luYzpCaSxzYWZlUGFyc2U6amksc2FmZVBhcnNlQXN5bmM6TWksc2V0OkRhLHNldEVycm9yTWFwOmtmLHNpemU6bHQsc2x1Z2lmeTpkbixzdGFydHNXaXRoOm5uLHN0cmljdE9iamVjdDpaYSxzdHJpbmc6ZixzdHJpbmdGb3JtYXQ6eWEsc3RyaW5nYm9vbDplYyxzdWNjZXNzOkZhLHN1cGVyUmVmaW5lOk9yLHN5bWJvbDpDYSx0ZW1wbGF0ZUxpdGVyYWw6S2EsdG9KU09OU2NoZW1hOk9pLHRvTG93ZXJDYXNlOnVuLHRvVXBwZXJDYXNlOmxuLHRvWm9kOmJvLHRyYW5zZm9ybTpabix0cmVlaWZ5RXJyb3I6eXMsdHJpbTpjbix0dXBsZTpzcix1aW50MzI6SWEsdWludDY0OkVhLHVsaWQ6c2EsdW5kZWZpbmVkOnN0LHVuaW9uOkUsdW5rbm93bjpaLHVwcGVyY2FzZTplbix1cmw6WGksdXRpbDpncyx1dWlkOldpLHV1aWR2NDpHaSx1dWlkdjY6UWksdXVpZHY3OllpLHZhbGlkYXRlOkVvLHZhbGlkYXRlQXN5bmM6Q28sdm9pZDpPYSx3aXRoUGFyc2VyOnNpLHhpZDppYSx4b3I6TmEsejpydX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxVZT0iaW8ubW9kZWxjb250ZXh0cHJvdG9jb2wvcmVsYXRlZC10YXNrIixBcj0iMi4wIixLPUVyKGU9PmUhPT1udWxsJiYodHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIikpLENmPUUoW2YoKSxQKCkuaW50KCldKSxPZj1mKCk7WSh7dHRsOlAoKS5vcHRpb25hbCgpLHBvbGxJbnRlcnZhbDpQKCkub3B0aW9uYWwoKX0pO2NvbnN0IFN2PWcoe3R0bDpQKCkub3B0aW9uYWwoKX0pLHp2PWcoe3Rhc2tJZDpmKCl9KSxvYz1ZKHtwcm9ncmVzc1Rva2VuOkNmLm9wdGlvbmFsKCksW1VlXTp6di5vcHRpb25hbCgpfSkscGU9Zyh7X21ldGE6b2Mub3B0aW9uYWwoKX0pLHFuPXBlLmV4dGVuZCh7dGFzazpTdi5vcHRpb25hbCgpfSksVHY9ZT0+cW4uc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsZWU9Zyh7bWV0aG9kOmYoKSxwYXJhbXM6cGUubG9vc2UoKS5vcHRpb25hbCgpfSksdmU9Zyh7X21ldGE6b2Mub3B0aW9uYWwoKX0pLGJlPWcoe21ldGhvZDpmKCkscGFyYW1zOnZlLmxvb3NlKCkub3B0aW9uYWwoKX0pLHRlPVkoe19tZXRhOm9jLm9wdGlvbmFsKCl9KSxEbj1FKFtmKCksUCgpLmludCgpXSksUmY9Zyh7anNvbnJwYzpoKEFyKSxpZDpEbiwuLi5lZS5zaGFwZX0pLnN0cmljdCgpLHN1PWU9PlJmLnNhZmVQYXJzZShlKS5zdWNjZXNzLEFmPWcoe2pzb25ycGM6aChBciksLi4uYmUuc2hhcGV9KS5zdHJpY3QoKSxJdj1lPT5BZi5zYWZlUGFyc2UoZSkuc3VjY2VzcyxyYz1nKHtqc29ucnBjOmgoQXIpLGlkOkRuLHJlc3VsdDp0ZX0pLnN0cmljdCgpLHRvPWU9PnJjLnNhZmVQYXJzZShlKS5zdWNjZXNzO3ZhciBNOyhmdW5jdGlvbihlKXtlW2UuQ29ubmVjdGlvbkNsb3NlZD0tMzJlM109IkNvbm5lY3Rpb25DbG9zZWQiLGVbZS5SZXF1ZXN0VGltZW91dD0tMzIwMDFdPSJSZXF1ZXN0VGltZW91dCIsZVtlLlBhcnNlRXJyb3I9LTMyNzAwXT0iUGFyc2VFcnJvciIsZVtlLkludmFsaWRSZXF1ZXN0PS0zMjYwMF09IkludmFsaWRSZXF1ZXN0IixlW2UuTWV0aG9kTm90Rm91bmQ9LTMyNjAxXT0iTWV0aG9kTm90Rm91bmQiLGVbZS5JbnZhbGlkUGFyYW1zPS0zMjYwMl09IkludmFsaWRQYXJhbXMiLGVbZS5JbnRlcm5hbEVycm9yPS0zMjYwM109IkludGVybmFsRXJyb3IiLGVbZS5VcmxFbGljaXRhdGlvblJlcXVpcmVkPS0zMjA0Ml09IlVybEVsaWNpdGF0aW9uUmVxdWlyZWQifSkoTXx8KE09e30pKTtjb25zdCBzYz1nKHtqc29ucnBjOmgoQXIpLGlkOkRuLm9wdGlvbmFsKCksZXJyb3I6Zyh7Y29kZTpQKCkuaW50KCksbWVzc2FnZTpmKCksZGF0YTpaKCkub3B0aW9uYWwoKX0pfSkuc3RyaWN0KCksUHY9ZT0+c2Muc2FmZVBhcnNlKGUpLnN1Y2Nlc3MseHY9RShbUmYsQWYscmMsc2NdKTtFKFtyYyxzY10pO2NvbnN0IGljPXRlLnN0cmljdCgpLEV2PXZlLmV4dGVuZCh7cmVxdWVzdElkOkRuLm9wdGlvbmFsKCkscmVhc29uOmYoKS5vcHRpb25hbCgpfSksYWM9YmUuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiKSxwYXJhbXM6RXZ9KSxDdj1nKHtzcmM6ZigpLG1pbWVUeXBlOmYoKS5vcHRpb25hbCgpLHNpemVzOnooZigpKS5vcHRpb25hbCgpLHRoZW1lOlgoWyJsaWdodCIsImRhcmsiXSkub3B0aW9uYWwoKX0pLExuPWcoe2ljb25zOnooQ3YpLm9wdGlvbmFsKCl9KSxjdD1nKHtuYW1lOmYoKSx0aXRsZTpmKCkub3B0aW9uYWwoKX0pLFpyPWN0LmV4dGVuZCh7Li4uY3Quc2hhcGUsLi4uTG4uc2hhcGUsdmVyc2lvbjpmKCksd2Vic2l0ZVVybDpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKX0pLE92PXp0KGcoe2FwcGx5RGVmYXVsdHM6TigpLm9wdGlvbmFsKCl9KSxPKGYoKSxaKCkpKSxSdj1NbihlPT5lJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0wP3tmb3JtOnt9fTplLHp0KGcoe2Zvcm06T3Yub3B0aW9uYWwoKSx1cmw6Sy5vcHRpb25hbCgpfSksTyhmKCksWigpKS5vcHRpb25hbCgpKSksQXY9WSh7bGlzdDpLLm9wdGlvbmFsKCksY2FuY2VsOksub3B0aW9uYWwoKSxyZXF1ZXN0czpZKHtzYW1wbGluZzpZKHtjcmVhdGVNZXNzYWdlOksub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksZWxpY2l0YXRpb246WSh7Y3JlYXRlOksub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksWnY9WSh7bGlzdDpLLm9wdGlvbmFsKCksY2FuY2VsOksub3B0aW9uYWwoKSxyZXF1ZXN0czpZKHt0b29sczpZKHtjYWxsOksub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksTnY9Zyh7ZXhwZXJpbWVudGFsOk8oZigpLEspLm9wdGlvbmFsKCksc2FtcGxpbmc6Zyh7Y29udGV4dDpLLm9wdGlvbmFsKCksdG9vbHM6Sy5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjpSdi5vcHRpb25hbCgpLHJvb3RzOmcoe2xpc3RDaGFuZ2VkOk4oKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczpBdi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6TyhmKCksSykub3B0aW9uYWwoKX0pLGp2PXBlLmV4dGVuZCh7cHJvdG9jb2xWZXJzaW9uOmYoKSxjYXBhYmlsaXRpZXM6TnYsY2xpZW50SW5mbzpacn0pLE12PWVlLmV4dGVuZCh7bWV0aG9kOmgoImluaXRpYWxpemUiKSxwYXJhbXM6anZ9KSxxdj1nKHtleHBlcmltZW50YWw6TyhmKCksSykub3B0aW9uYWwoKSxsb2dnaW5nOksub3B0aW9uYWwoKSxjb21wbGV0aW9uczpLLm9wdGlvbmFsKCkscHJvbXB0czpnKHtsaXN0Q2hhbmdlZDpOKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCkscmVzb3VyY2VzOmcoe3N1YnNjcmliZTpOKCkub3B0aW9uYWwoKSxsaXN0Q2hhbmdlZDpOKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdG9vbHM6Zyh7bGlzdENoYW5nZWQ6TigpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRhc2tzOlp2Lm9wdGlvbmFsKCksZXh0ZW5zaW9uczpPKGYoKSxLKS5vcHRpb25hbCgpfSksRHY9dGUuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246ZigpLGNhcGFiaWxpdGllczpxdixzZXJ2ZXJJbmZvOlpyLGluc3RydWN0aW9uczpmKCkub3B0aW9uYWwoKX0pLEx2PWJlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6dmUub3B0aW9uYWwoKX0pLE5yPWVlLmV4dGVuZCh7bWV0aG9kOmgoInBpbmciKSxwYXJhbXM6cGUub3B0aW9uYWwoKX0pLFV2PWcoe3Byb2dyZXNzOlAoKSx0b3RhbDpEKFAoKSksbWVzc2FnZTpEKGYoKSl9KSxIdj1nKHsuLi52ZS5zaGFwZSwuLi5Vdi5zaGFwZSxwcm9ncmVzc1Rva2VuOkNmfSksY2M9YmUuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9wcm9ncmVzcyIpLHBhcmFtczpIdn0pLEZ2PXBlLmV4dGVuZCh7Y3Vyc29yOk9mLm9wdGlvbmFsKCl9KSxVbj1lZS5leHRlbmQoe3BhcmFtczpGdi5vcHRpb25hbCgpfSksSG49dGUuZXh0ZW5kKHtuZXh0Q3Vyc29yOk9mLm9wdGlvbmFsKCl9KSxCdj1YKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLEZuPWcoe3Rhc2tJZDpmKCksc3RhdHVzOkJ2LHR0bDpFKFtQKCksQ24oKV0pLGNyZWF0ZWRBdDpmKCksbGFzdFVwZGF0ZWRBdDpmKCkscG9sbEludGVydmFsOkQoUCgpKSxzdGF0dXNNZXNzYWdlOkQoZigpKX0pLHVjPXRlLmV4dGVuZCh7dGFzazpGbn0pLFZ2PXZlLm1lcmdlKEZuKSxwbz1iZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczpWdn0pLGxjPWVlLmV4dGVuZCh7bWV0aG9kOmgoInRhc2tzL2dldCIpLHBhcmFtczpwZS5leHRlbmQoe3Rhc2tJZDpmKCl9KX0pLGRjPXRlLm1lcmdlKEZuKSxwYz1lZS5leHRlbmQoe21ldGhvZDpoKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6cGUuZXh0ZW5kKHt0YXNrSWQ6ZigpfSl9KTt0ZS5sb29zZSgpO2NvbnN0IGZjPVVuLmV4dGVuZCh7bWV0aG9kOmgoInRhc2tzL2xpc3QiKX0pLGhjPUhuLmV4dGVuZCh7dGFza3M6eihGbil9KSxtYz1lZS5leHRlbmQoe21ldGhvZDpoKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6cGUuZXh0ZW5kKHt0YXNrSWQ6ZigpfSl9KSxKdj10ZS5tZXJnZShGbiksWmY9Zyh7dXJpOmYoKSxtaW1lVHlwZTpEKGYoKSksX21ldGE6TyhmKCksWigpKS5vcHRpb25hbCgpfSksTmY9WmYuZXh0ZW5kKHt0ZXh0OmYoKX0pLGdjPWYoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSksamY9WmYuZXh0ZW5kKHtibG9iOmdjfSksQm49WChbInVzZXIiLCJhc3Npc3RhbnQiXSksRXQ9Zyh7YXVkaWVuY2U6eihCbikub3B0aW9uYWwoKSxwcmlvcml0eTpQKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGxhc3RNb2RpZmllZDokZih7b2Zmc2V0OiEwfSkub3B0aW9uYWwoKX0pLE1mPWcoey4uLmN0LnNoYXBlLC4uLkxuLnNoYXBlLHVyaTpmKCksZGVzY3JpcHRpb246RChmKCkpLG1pbWVUeXBlOkQoZigpKSxzaXplOkQoUCgpKSxhbm5vdGF0aW9uczpFdC5vcHRpb25hbCgpLF9tZXRhOkQoWSh7fSkpfSksS3Y9Zyh7Li4uY3Quc2hhcGUsLi4uTG4uc2hhcGUsdXJpVGVtcGxhdGU6ZigpLGRlc2NyaXB0aW9uOkQoZigpKSxtaW1lVHlwZTpEKGYoKSksYW5ub3RhdGlvbnM6RXQub3B0aW9uYWwoKSxfbWV0YTpEKFkoe30pKX0pLFd2PVVuLmV4dGVuZCh7bWV0aG9kOmgoInJlc291cmNlcy9saXN0Iil9KSxxZj1Ibi5leHRlbmQoe3Jlc291cmNlczp6KE1mKX0pLEd2PVVuLmV4dGVuZCh7bWV0aG9kOmgoInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSksUXY9SG4uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczp6KEt2KX0pLHZjPXBlLmV4dGVuZCh7dXJpOmYoKX0pLFl2PXZjLFh2PWVlLmV4dGVuZCh7bWV0aG9kOmgoInJlc291cmNlcy9yZWFkIikscGFyYW1zOll2fSksRGY9dGUuZXh0ZW5kKHtjb250ZW50czp6KEUoW05mLGpmXSkpfSksZWI9YmUuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnZlLm9wdGlvbmFsKCl9KSx0Yj12YyxuYj1lZS5leHRlbmQoe21ldGhvZDpoKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOnRifSksb2I9dmMscmI9ZWUuZXh0ZW5kKHttZXRob2Q6aCgicmVzb3VyY2VzL3Vuc3Vic2NyaWJlIikscGFyYW1zOm9ifSksc2I9dmUuZXh0ZW5kKHt1cmk6ZigpfSksaWI9YmUuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvdXBkYXRlZCIpLHBhcmFtczpzYn0pLGFiPWcoe25hbWU6ZigpLGRlc2NyaXB0aW9uOkQoZigpKSxyZXF1aXJlZDpEKE4oKSl9KSxjYj1nKHsuLi5jdC5zaGFwZSwuLi5Mbi5zaGFwZSxkZXNjcmlwdGlvbjpEKGYoKSksYXJndW1lbnRzOkQoeihhYikpLF9tZXRhOkQoWSh7fSkpfSksdWI9VW4uZXh0ZW5kKHttZXRob2Q6aCgicHJvbXB0cy9saXN0Iil9KSxsYj1Ibi5leHRlbmQoe3Byb21wdHM6eihjYil9KSxkYj1wZS5leHRlbmQoe25hbWU6ZigpLGFyZ3VtZW50czpPKGYoKSxmKCkpLm9wdGlvbmFsKCl9KSxwYj1lZS5leHRlbmQoe21ldGhvZDpoKCJwcm9tcHRzL2dldCIpLHBhcmFtczpkYn0pLGJjPWcoe3R5cGU6aCgidGV4dCIpLHRleHQ6ZigpLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6TyhmKCksWigpKS5vcHRpb25hbCgpfSkseWM9Zyh7dHlwZTpoKCJpbWFnZSIpLGRhdGE6Z2MsbWltZVR5cGU6ZigpLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6TyhmKCksWigpKS5vcHRpb25hbCgpfSksX2M9Zyh7dHlwZTpoKCJhdWRpbyIpLGRhdGE6Z2MsbWltZVR5cGU6ZigpLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6TyhmKCksWigpKS5vcHRpb25hbCgpfSksZmI9Zyh7dHlwZTpoKCJ0b29sX3VzZSIpLG5hbWU6ZigpLGlkOmYoKSxpbnB1dDpPKGYoKSxaKCkpLF9tZXRhOk8oZigpLFooKSkub3B0aW9uYWwoKX0pLExmPWcoe3R5cGU6aCgicmVzb3VyY2UiKSxyZXNvdXJjZTpFKFtOZixqZl0pLGFubm90YXRpb25zOkV0Lm9wdGlvbmFsKCksX21ldGE6TyhmKCksWigpKS5vcHRpb25hbCgpfSksVWY9TWYuZXh0ZW5kKHt0eXBlOmgoInJlc291cmNlX2xpbmsiKX0pLFZuPUUoW2JjLHljLF9jLFVmLExmXSksaGI9Zyh7cm9sZTpCbixjb250ZW50OlZufSksbWI9dGUuZXh0ZW5kKHtkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtZXNzYWdlczp6KGhiKX0pLGdiPWJlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvcHJvbXB0cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6dmUub3B0aW9uYWwoKX0pLHZiPWcoe3RpdGxlOmYoKS5vcHRpb25hbCgpLHJlYWRPbmx5SGludDpOKCkub3B0aW9uYWwoKSxkZXN0cnVjdGl2ZUhpbnQ6TigpLm9wdGlvbmFsKCksaWRlbXBvdGVudEhpbnQ6TigpLm9wdGlvbmFsKCksb3BlbldvcmxkSGludDpOKCkub3B0aW9uYWwoKX0pLGJiPWcoe3Rhc2tTdXBwb3J0OlgoWyJyZXF1aXJlZCIsIm9wdGlvbmFsIiwiZm9yYmlkZGVuIl0pLm9wdGlvbmFsKCl9KSxrYz1nKHsuLi5jdC5zaGFwZSwuLi5Mbi5zaGFwZSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxpbnB1dFNjaGVtYTpnKHt0eXBlOmgoIm9iamVjdCIpLHByb3BlcnRpZXM6TyhmKCksSykub3B0aW9uYWwoKSxyZXF1aXJlZDp6KGYoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKFooKSksb3V0cHV0U2NoZW1hOmcoe3R5cGU6aCgib2JqZWN0IikscHJvcGVydGllczpPKGYoKSxLKS5vcHRpb25hbCgpLHJlcXVpcmVkOnooZigpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoWigpKS5vcHRpb25hbCgpLGFubm90YXRpb25zOnZiLm9wdGlvbmFsKCksZXhlY3V0aW9uOmJiLm9wdGlvbmFsKCksX21ldGE6TyhmKCksWigpKS5vcHRpb25hbCgpfSksSGY9VW4uZXh0ZW5kKHttZXRob2Q6aCgidG9vbHMvbGlzdCIpfSkseWI9SG4uZXh0ZW5kKHt0b29sczp6KGtjKX0pLGpyPXRlLmV4dGVuZCh7Y29udGVudDp6KFZuKS5kZWZhdWx0KFtdKSxzdHJ1Y3R1cmVkQ29udGVudDpPKGYoKSxaKCkpLm9wdGlvbmFsKCksaXNFcnJvcjpOKCkub3B0aW9uYWwoKX0pO2pyLm9yKHRlLmV4dGVuZCh7dG9vbFJlc3VsdDpaKCl9KSk7Y29uc3QgX2I9cW4uZXh0ZW5kKHtuYW1lOmYoKSxhcmd1bWVudHM6TyhmKCksWigpKS5vcHRpb25hbCgpfSksRmY9ZWUuZXh0ZW5kKHttZXRob2Q6aCgidG9vbHMvY2FsbCIpLHBhcmFtczpfYn0pLGtiPWJlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvdG9vbHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnZlLm9wdGlvbmFsKCl9KTtnKHthdXRvUmVmcmVzaDpOKCkuZGVmYXVsdCghMCksZGVib3VuY2VNczpQKCkuaW50KCkubm9ubmVnYXRpdmUoKS5kZWZhdWx0KDMwMCl9KTtjb25zdCBCZj1YKFsiZGVidWciLCJpbmZvIiwibm90aWNlIiwid2FybmluZyIsImVycm9yIiwiY3JpdGljYWwiLCJhbGVydCIsImVtZXJnZW5jeSJdKSx3Yj1wZS5leHRlbmQoe2xldmVsOkJmfSksJGI9ZWUuZXh0ZW5kKHttZXRob2Q6aCgibG9nZ2luZy9zZXRMZXZlbCIpLHBhcmFtczp3Yn0pLFNiPXZlLmV4dGVuZCh7bGV2ZWw6QmYsbG9nZ2VyOmYoKS5vcHRpb25hbCgpLGRhdGE6WigpfSksemI9YmUuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9tZXNzYWdlIikscGFyYW1zOlNifSksVGI9Zyh7bmFtZTpmKCkub3B0aW9uYWwoKX0pLEliPWcoe2hpbnRzOnooVGIpLm9wdGlvbmFsKCksY29zdFByaW9yaXR5OlAoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksc3BlZWRQcmlvcml0eTpQKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGludGVsbGlnZW5jZVByaW9yaXR5OlAoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCl9KSxQYj1nKHttb2RlOlgoWyJhdXRvIiwicmVxdWlyZWQiLCJub25lIl0pLm9wdGlvbmFsKCl9KSx4Yj1nKHt0eXBlOmgoInRvb2xfcmVzdWx0IiksdG9vbFVzZUlkOmYoKS5kZXNjcmliZSgiVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29ycmVzcG9uZGluZyB0b29sIGNhbGwuIiksY29udGVudDp6KFZuKS5kZWZhdWx0KFtdKSxzdHJ1Y3R1cmVkQ29udGVudDpnKHt9KS5sb29zZSgpLm9wdGlvbmFsKCksaXNFcnJvcjpOKCkub3B0aW9uYWwoKSxfbWV0YTpPKGYoKSxaKCkpLm9wdGlvbmFsKCl9KSxFYj1BbigidHlwZSIsW2JjLHljLF9jXSksZm89QW4oInR5cGUiLFtiYyx5YyxfYyxmYix4Yl0pLENiPWcoe3JvbGU6Qm4sY29udGVudDpFKFtmbyx6KGZvKV0pLF9tZXRhOk8oZigpLFooKSkub3B0aW9uYWwoKX0pLE9iPXFuLmV4dGVuZCh7bWVzc2FnZXM6eihDYiksbW9kZWxQcmVmZXJlbmNlczpJYi5vcHRpb25hbCgpLHN5c3RlbVByb21wdDpmKCkub3B0aW9uYWwoKSxpbmNsdWRlQ29udGV4dDpYKFsibm9uZSIsInRoaXNTZXJ2ZXIiLCJhbGxTZXJ2ZXJzIl0pLm9wdGlvbmFsKCksdGVtcGVyYXR1cmU6UCgpLm9wdGlvbmFsKCksbWF4VG9rZW5zOlAoKS5pbnQoKSxzdG9wU2VxdWVuY2VzOnooZigpKS5vcHRpb25hbCgpLG1ldGFkYXRhOksub3B0aW9uYWwoKSx0b29sczp6KGtjKS5vcHRpb25hbCgpLHRvb2xDaG9pY2U6UGIub3B0aW9uYWwoKX0pLFJiPWVlLmV4dGVuZCh7bWV0aG9kOmgoInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiKSxwYXJhbXM6T2J9KSxWZj10ZS5leHRlbmQoe21vZGVsOmYoKSxzdG9wUmVhc29uOkQoWChbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoZigpKSkscm9sZTpCbixjb250ZW50OkVifSksSmY9dGUuZXh0ZW5kKHttb2RlbDpmKCksc3RvcFJlYXNvbjpEKFgoWyJlbmRUdXJuIiwic3RvcFNlcXVlbmNlIiwibWF4VG9rZW5zIiwidG9vbFVzZSJdKS5vcihmKCkpKSxyb2xlOkJuLGNvbnRlbnQ6RShbZm8seihmbyldKX0pLEFiPWcoe3R5cGU6aCgiYm9vbGVhbiIpLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLGRlZmF1bHQ6TigpLm9wdGlvbmFsKCl9KSxaYj1nKHt0eXBlOmgoInN0cmluZyIpLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLG1pbkxlbmd0aDpQKCkub3B0aW9uYWwoKSxtYXhMZW5ndGg6UCgpLm9wdGlvbmFsKCksZm9ybWF0OlgoWyJlbWFpbCIsInVyaSIsImRhdGUiLCJkYXRlLXRpbWUiXSkub3B0aW9uYWwoKSxkZWZhdWx0OmYoKS5vcHRpb25hbCgpfSksTmI9Zyh7dHlwZTpYKFsibnVtYmVyIiwiaW50ZWdlciJdKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtaW5pbXVtOlAoKS5vcHRpb25hbCgpLG1heGltdW06UCgpLm9wdGlvbmFsKCksZGVmYXVsdDpQKCkub3B0aW9uYWwoKX0pLGpiPWcoe3R5cGU6aCgic3RyaW5nIiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksZW51bTp6KGYoKSksZGVmYXVsdDpmKCkub3B0aW9uYWwoKX0pLE1iPWcoe3R5cGU6aCgic3RyaW5nIiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksb25lT2Y6eihnKHtjb25zdDpmKCksdGl0bGU6ZigpfSkpLGRlZmF1bHQ6ZigpLm9wdGlvbmFsKCl9KSxxYj1nKHt0eXBlOmgoInN0cmluZyIpLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLGVudW06eihmKCkpLGVudW1OYW1lczp6KGYoKSkub3B0aW9uYWwoKSxkZWZhdWx0OmYoKS5vcHRpb25hbCgpfSksRGI9RShbamIsTWJdKSxMYj1nKHt0eXBlOmgoImFycmF5IiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksbWluSXRlbXM6UCgpLm9wdGlvbmFsKCksbWF4SXRlbXM6UCgpLm9wdGlvbmFsKCksaXRlbXM6Zyh7dHlwZTpoKCJzdHJpbmciKSxlbnVtOnooZigpKX0pLGRlZmF1bHQ6eihmKCkpLm9wdGlvbmFsKCl9KSxVYj1nKHt0eXBlOmgoImFycmF5IiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksbWluSXRlbXM6UCgpLm9wdGlvbmFsKCksbWF4SXRlbXM6UCgpLm9wdGlvbmFsKCksaXRlbXM6Zyh7YW55T2Y6eihnKHtjb25zdDpmKCksdGl0bGU6ZigpfSkpfSksZGVmYXVsdDp6KGYoKSkub3B0aW9uYWwoKX0pLEhiPUUoW0xiLFViXSksRmI9RShbcWIsRGIsSGJdKSxCYj1FKFtGYixBYixaYixOYl0pLFZiPXFuLmV4dGVuZCh7bW9kZTpoKCJmb3JtIikub3B0aW9uYWwoKSxtZXNzYWdlOmYoKSxyZXF1ZXN0ZWRTY2hlbWE6Zyh7dHlwZTpoKCJvYmplY3QiKSxwcm9wZXJ0aWVzOk8oZigpLEJiKSxyZXF1aXJlZDp6KGYoKSkub3B0aW9uYWwoKX0pfSksSmI9cW4uZXh0ZW5kKHttb2RlOmgoInVybCIpLG1lc3NhZ2U6ZigpLGVsaWNpdGF0aW9uSWQ6ZigpLHVybDpmKCkudXJsKCl9KSxLYj1FKFtWYixKYl0pLFdiPWVlLmV4dGVuZCh7bWV0aG9kOmgoImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczpLYn0pLEdiPXZlLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpmKCl9KSxRYj1iZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOkdifSksWWI9dGUuZXh0ZW5kKHthY3Rpb246WChbImFjY2VwdCIsImRlY2xpbmUiLCJjYW5jZWwiXSksY29udGVudDpNbihlPT5lPT09bnVsbD92b2lkIDA6ZSxPKGYoKSxFKFtmKCksUCgpLE4oKSx6KGYoKSldKSkub3B0aW9uYWwoKSl9KSxYYj1nKHt0eXBlOmgoInJlZi9yZXNvdXJjZSIpLHVyaTpmKCl9KSxleT1nKHt0eXBlOmgoInJlZi9wcm9tcHQiKSxuYW1lOmYoKX0pLHR5PXBlLmV4dGVuZCh7cmVmOkUoW2V5LFhiXSksYXJndW1lbnQ6Zyh7bmFtZTpmKCksdmFsdWU6ZigpfSksY29udGV4dDpnKHthcmd1bWVudHM6TyhmKCksZigpKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLG55PWVlLmV4dGVuZCh7bWV0aG9kOmgoImNvbXBsZXRpb24vY29tcGxldGUiKSxwYXJhbXM6dHl9KSxveT10ZS5leHRlbmQoe2NvbXBsZXRpb246WSh7dmFsdWVzOnooZigpKS5tYXgoMTAwKSx0b3RhbDpEKFAoKS5pbnQoKSksaGFzTW9yZTpEKE4oKSl9KX0pLHJ5PWcoe3VyaTpmKCkuc3RhcnRzV2l0aCgiZmlsZTovLyIpLG5hbWU6ZigpLm9wdGlvbmFsKCksX21ldGE6TyhmKCksWigpKS5vcHRpb25hbCgpfSksc3k9ZWUuZXh0ZW5kKHttZXRob2Q6aCgicm9vdHMvbGlzdCIpLHBhcmFtczpwZS5vcHRpb25hbCgpfSksaXk9dGUuZXh0ZW5kKHtyb290czp6KHJ5KX0pLGF5PWJlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvcm9vdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnZlLm9wdGlvbmFsKCl9KTtFKFtOcixNdixueSwkYixwYix1YixXdixHdixYdixuYixyYixGZixIZixsYyxwYyxmYyxtY10pO0UoW2FjLGNjLEx2LGF5LHBvXSk7RShbaWMsVmYsSmYsWWIsaXksZGMsaGMsdWNdKTtFKFtOcixSYixXYixzeSxsYyxwYyxmYyxtY10pO0UoW2FjLGNjLHpiLGliLGViLGtiLGdiLHBvLFFiXSk7RShbaWMsRHYsb3ksbWIsbGIscWYsUXYsRGYsanIseWIsZGMsaGMsdWNdKTtjbGFzcyBSIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuLG8pe3N1cGVyKGBNQ1AgZXJyb3IgJHt0fTogJHtufWApLHRoaXMuY29kZT10LHRoaXMuZGF0YT1vLHRoaXMubmFtZT0iTWNwRXJyb3IifXN0YXRpYyBmcm9tRXJyb3IodCxuLG8pe2lmKHQ9PT1NLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQmJm8pe2NvbnN0IHI9bztpZihyLmVsaWNpdGF0aW9ucylyZXR1cm4gbmV3IGN5KHIuZWxpY2l0YXRpb25zLG4pfXJldHVybiBuZXcgUih0LG4sbyl9fWNsYXNzIGN5IGV4dGVuZHMgUntjb25zdHJ1Y3Rvcih0LG49YFVSTCBlbGljaXRhdGlvbiR7dC5sZW5ndGg+MT8icyI6IiJ9IHJlcXVpcmVkYCl7c3VwZXIoTS5VcmxFbGljaXRhdGlvblJlcXVpcmVkLG4se2VsaWNpdGF0aW9uczp0fSl9Z2V0IGVsaWNpdGF0aW9ucygpe3JldHVybiB0aGlzLmRhdGE/LmVsaWNpdGF0aW9ucz8/W119fWZ1bmN0aW9uIExlKGUpe3JldHVybiBlPT09ImNvbXBsZXRlZCJ8fGU9PT0iZmFpbGVkInx8ZT09PSJjYW5jZWxsZWQifW5ldyBTZXQoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2eHl6MDEyMzQ1Njc4OSIpO2Z1bmN0aW9uIGl1KGUpe2NvbnN0IG49WGcoZSk/Lm1ldGhvZDtpZighbil0aHJvdyBuZXcgRXJyb3IoIlNjaGVtYSBpcyBtaXNzaW5nIGEgbWV0aG9kIGxpdGVyYWwiKTtjb25zdCBvPWV2KG4pO2lmKHR5cGVvZiBvIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIlNjaGVtYSBtZXRob2QgbGl0ZXJhbCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIG99ZnVuY3Rpb24gYXUoZSx0KXtjb25zdCBuPXZmKGUsdCk7aWYoIW4uc3VjY2Vzcyl0aHJvdyBuLmVycm9yO3JldHVybiBuLmRhdGF9Y29uc3QgdXk9NmU0O2NsYXNzIGx5e2NvbnN0cnVjdG9yKHQpe3RoaXMuX29wdGlvbnM9dCx0aGlzLl9yZXF1ZXN0TWVzc2FnZUlkPTAsdGhpcy5fcmVxdWVzdEhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzPW5ldyBNYXAsdGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXNwb25zZUhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3RpbWVvdXRJbmZvPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnM9bmV3IFNldCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzPW5ldyBNYXAsdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKGFjLG49Pnt0aGlzLl9vbmNhbmNlbChuKX0pLHRoaXMuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcihjYyxuPT57dGhpcy5fb25wcm9ncmVzcyhuKX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoTnIsbj0+KHt9KSksdGhpcy5fdGFza1N0b3JlPXQ/LnRhc2tTdG9yZSx0aGlzLl90YXNrTWVzc2FnZVF1ZXVlPXQ/LnRhc2tNZXNzYWdlUXVldWUsdGhpcy5fdGFza1N0b3JlJiYodGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihsYyxhc3luYyhuLG8pPT57Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBSKE0uSW52YWxpZFBhcmFtcywiRmFpbGVkIHRvIHJldHJpZXZlIHRhc2s6IFRhc2sgbm90IGZvdW5kIik7cmV0dXJuey4uLnJ9fSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihwYyxhc3luYyhuLG8pPT57Y29uc3Qgcj1hc3luYygpPT57Y29uc3Qgcz1uLnBhcmFtcy50YXNrSWQ7aWYodGhpcy5fdGFza01lc3NhZ2VRdWV1ZSl7bGV0IGE7Zm9yKDthPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZShzLG8uc2Vzc2lvbklkKTspe2lmKGEudHlwZT09PSJyZXNwb25zZSJ8fGEudHlwZT09PSJlcnJvciIpe2NvbnN0IGM9YS5tZXNzYWdlLHU9Yy5pZCxkPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHUpO2lmKGQpaWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUodSksYS50eXBlPT09InJlc3BvbnNlIilkKGMpO2Vsc2V7Y29uc3QgbT1jLHY9bmV3IFIobS5lcnJvci5jb2RlLG0uZXJyb3IubWVzc2FnZSxtLmVycm9yLmRhdGEpO2Qodil9ZWxzZXtjb25zdCBtPWEudHlwZT09PSJyZXNwb25zZSI/IlJlc3BvbnNlIjoiRXJyb3IiO3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGAke219IGhhbmRsZXIgbWlzc2luZyBmb3IgcmVxdWVzdCAke3V9YCkpfWNvbnRpbnVlfWF3YWl0IHRoaXMuX3RyYW5zcG9ydD8uc2VuZChhLm1lc3NhZ2Use3JlbGF0ZWRSZXF1ZXN0SWQ6by5yZXF1ZXN0SWR9KX19Y29uc3QgaT1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhzLG8uc2Vzc2lvbklkKTtpZighaSl0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kOiAke3N9YCk7aWYoIUxlKGkuc3RhdHVzKSlyZXR1cm4gYXdhaXQgdGhpcy5fd2FpdEZvclRhc2tVcGRhdGUocyxvLnNpZ25hbCksYXdhaXQgcigpO2lmKExlKGkuc3RhdHVzKSl7Y29uc3QgYT1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFza1Jlc3VsdChzLG8uc2Vzc2lvbklkKTtyZXR1cm4gdGhpcy5fY2xlYXJUYXNrUXVldWUocyksey4uLmEsX21ldGE6ey4uLmEuX21ldGEsW1VlXTp7dGFza0lkOnN9fX19cmV0dXJuIGF3YWl0IHIoKX07cmV0dXJuIGF3YWl0IHIoKX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoZmMsYXN5bmMobixvKT0+e3RyeXtjb25zdHt0YXNrczpyLG5leHRDdXJzb3I6c309YXdhaXQgdGhpcy5fdGFza1N0b3JlLmxpc3RUYXNrcyhuLnBhcmFtcz8uY3Vyc29yLG8uc2Vzc2lvbklkKTtyZXR1cm57dGFza3M6cixuZXh0Q3Vyc29yOnMsX21ldGE6e319fWNhdGNoKHIpe3Rocm93IG5ldyBSKE0uSW52YWxpZFBhcmFtcyxgRmFpbGVkIHRvIGxpc3QgdGFza3M6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihtYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0IHI9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcil0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kOiAke24ucGFyYW1zLnRhc2tJZH1gKTtpZihMZShyLnN0YXR1cykpdGhyb3cgbmV3IFIoTS5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgY2FuY2VsIHRhc2sgaW4gdGVybWluYWwgc3RhdHVzOiAke3Iuc3RhdHVzfWApO2F3YWl0IHRoaXMuX3Rhc2tTdG9yZS51cGRhdGVUYXNrU3RhdHVzKG4ucGFyYW1zLnRhc2tJZCwiY2FuY2VsbGVkIiwiQ2xpZW50IGNhbmNlbGxlZCB0YXNrIGV4ZWN1dGlvbi4iLG8uc2Vzc2lvbklkKSx0aGlzLl9jbGVhclRhc2tRdWV1ZShuLnBhcmFtcy50YXNrSWQpO2NvbnN0IHM9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcyl0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kIGFmdGVyIGNhbmNlbGxhdGlvbjogJHtuLnBhcmFtcy50YXNrSWR9YCk7cmV0dXJue19tZXRhOnt9LC4uLnN9fWNhdGNoKHIpe3Rocm93IHIgaW5zdGFuY2VvZiBSP3I6bmV3IFIoTS5JbnZhbGlkUmVxdWVzdCxgRmFpbGVkIHRvIGNhbmNlbCB0YXNrOiAke3IgaW5zdGFuY2VvZiBFcnJvcj9yLm1lc3NhZ2U6U3RyaW5nKHIpfWApfX0pKX1hc3luYyBfb25jYW5jZWwodCl7aWYoIXQucGFyYW1zLnJlcXVlc3RJZClyZXR1cm47dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LnBhcmFtcy5yZXF1ZXN0SWQpPy5hYm9ydCh0LnBhcmFtcy5yZWFzb24pfV9zZXR1cFRpbWVvdXQodCxuLG8scixzPSExKXt0aGlzLl90aW1lb3V0SW5mby5zZXQodCx7dGltZW91dElkOnNldFRpbWVvdXQocixuKSxzdGFydFRpbWU6RGF0ZS5ub3coKSx0aW1lb3V0Om4sbWF4VG90YWxUaW1lb3V0Om8scmVzZXRUaW1lb3V0T25Qcm9ncmVzczpzLG9uVGltZW91dDpyfSl9X3Jlc2V0VGltZW91dCh0KXtjb25zdCBuPXRoaXMuX3RpbWVvdXRJbmZvLmdldCh0KTtpZighbilyZXR1cm4hMTtjb25zdCBvPURhdGUubm93KCktbi5zdGFydFRpbWU7aWYobi5tYXhUb3RhbFRpbWVvdXQmJm8+PW4ubWF4VG90YWxUaW1lb3V0KXRocm93IHRoaXMuX3RpbWVvdXRJbmZvLmRlbGV0ZSh0KSxSLmZyb21FcnJvcihNLlJlcXVlc3RUaW1lb3V0LCJNYXhpbXVtIHRvdGFsIHRpbWVvdXQgZXhjZWVkZWQiLHttYXhUb3RhbFRpbWVvdXQ6bi5tYXhUb3RhbFRpbWVvdXQsdG90YWxFbGFwc2VkOm99KTtyZXR1cm4gY2xlYXJUaW1lb3V0KG4udGltZW91dElkKSxuLnRpbWVvdXRJZD1zZXRUaW1lb3V0KG4ub25UaW1lb3V0LG4udGltZW91dCksITB9X2NsZWFudXBUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO24mJihjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJbmZvLmRlbGV0ZSh0KSl9YXN5bmMgY29ubmVjdCh0KXtpZih0aGlzLl90cmFuc3BvcnQpdGhyb3cgbmV3IEVycm9yKCJBbHJlYWR5IGNvbm5lY3RlZCB0byBhIHRyYW5zcG9ydC4gQ2FsbCBjbG9zZSgpIGJlZm9yZSBjb25uZWN0aW5nIHRvIGEgbmV3IHRyYW5zcG9ydCwgb3IgdXNlIGEgc2VwYXJhdGUgUHJvdG9jb2wgaW5zdGFuY2UgcGVyIGNvbm5lY3Rpb24uIik7dGhpcy5fdHJhbnNwb3J0PXQ7Y29uc3Qgbj10aGlzLnRyYW5zcG9ydD8ub25jbG9zZTt0aGlzLl90cmFuc3BvcnQub25jbG9zZT0oKT0+e24/LigpLHRoaXMuX29uY2xvc2UoKX07Y29uc3Qgbz10aGlzLnRyYW5zcG9ydD8ub25lcnJvcjt0aGlzLl90cmFuc3BvcnQub25lcnJvcj1zPT57bz8uKHMpLHRoaXMuX29uZXJyb3Iocyl9O2NvbnN0IHI9dGhpcy5fdHJhbnNwb3J0Py5vbm1lc3NhZ2U7dGhpcy5fdHJhbnNwb3J0Lm9ubWVzc2FnZT0ocyxpKT0+e3I/LihzLGkpLHRvKHMpfHxQdihzKT90aGlzLl9vbnJlc3BvbnNlKHMpOnN1KHMpP3RoaXMuX29ucmVxdWVzdChzLGkpOkl2KHMpP3RoaXMuX29ubm90aWZpY2F0aW9uKHMpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmtub3duIG1lc3NhZ2UgdHlwZTogJHtKU09OLnN0cmluZ2lmeShzKX1gKSl9LGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zdGFydCgpfV9vbmNsb3NlKCl7Y29uc3QgdD10aGlzLl9yZXNwb25zZUhhbmRsZXJzO3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmNsZWFyKCksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmNsZWFyKCksdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl90aW1lb3V0SW5mby52YWx1ZXMoKSljbGVhclRpbWVvdXQoby50aW1lb3V0SWQpO3RoaXMuX3RpbWVvdXRJbmZvLmNsZWFyKCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnZhbHVlcygpKW8uYWJvcnQoKTt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuY2xlYXIoKTtjb25zdCBuPVIuZnJvbUVycm9yKE0uQ29ubmVjdGlvbkNsb3NlZCwiQ29ubmVjdGlvbiBjbG9zZWQiKTt0aGlzLl90cmFuc3BvcnQ9dm9pZCAwLHRoaXMub25jbG9zZT8uKCk7Zm9yKGNvbnN0IG8gb2YgdC52YWx1ZXMoKSlvKG4pfV9vbmVycm9yKHQpe3RoaXMub25lcnJvcj8uKHQpfV9vbm5vdGlmaWNhdGlvbih0KXtjb25zdCBuPXRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLmdldCh0Lm1ldGhvZCk/P3RoaXMuZmFsbGJhY2tOb3RpZmljYXRpb25IYW5kbGVyO24hPT12b2lkIDAmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pm4odCkpLmNhdGNoKG89PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmNhdWdodCBlcnJvciBpbiBub3RpZmljYXRpb24gaGFuZGxlcjogJHtvfWApKSl9X29ucmVxdWVzdCh0LG4pe2NvbnN0IG89dGhpcy5fcmVxdWVzdEhhbmRsZXJzLmdldCh0Lm1ldGhvZCk/P3RoaXMuZmFsbGJhY2tSZXF1ZXN0SGFuZGxlcixyPXRoaXMuX3RyYW5zcG9ydCxzPXQucGFyYW1zPy5fbWV0YT8uW1VlXT8udGFza0lkO2lmKG89PT12b2lkIDApe2NvbnN0IGQ9e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpNLk1ldGhvZE5vdEZvdW5kLG1lc3NhZ2U6Ik1ldGhvZCBub3QgZm91bmQifX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT90aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6ZCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKS5jYXRjaChtPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIGVucXVldWUgZXJyb3IgcmVzcG9uc2U6ICR7bX1gKSkpOnI/LnNlbmQoZCkuY2F0Y2gobT0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGFuIGVycm9yIHJlc3BvbnNlOiAke219YCkpKTtyZXR1cm59Y29uc3QgaT1uZXcgQWJvcnRDb250cm9sbGVyO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5zZXQodC5pZCxpKTtjb25zdCBhPVR2KHQucGFyYW1zKT90LnBhcmFtcy50YXNrOnZvaWQgMCxjPXRoaXMuX3Rhc2tTdG9yZT90aGlzLnJlcXVlc3RUYXNrU3RvcmUodCxyPy5zZXNzaW9uSWQpOnZvaWQgMCx1PXtzaWduYWw6aS5zaWduYWwsc2Vzc2lvbklkOnI/LnNlc3Npb25JZCxfbWV0YTp0LnBhcmFtcz8uX21ldGEsc2VuZE5vdGlmaWNhdGlvbjphc3luYyBkPT57aWYoaS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgbT17cmVsYXRlZFJlcXVlc3RJZDp0LmlkfTtzJiYobS5yZWxhdGVkVGFzaz17dGFza0lkOnN9KSxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihkLG0pfSxzZW5kUmVxdWVzdDphc3luYyhkLG0sdik9PntpZihpLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBSKE0uQ29ubmVjdGlvbkNsb3NlZCwiUmVxdWVzdCB3YXMgY2FuY2VsbGVkIik7Y29uc3QgYj17Li4udixyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJiFiLnJlbGF0ZWRUYXNrJiYoYi5yZWxhdGVkVGFzaz17dGFza0lkOnN9KTtjb25zdCBfPWIucmVsYXRlZFRhc2s/LnRhc2tJZD8/cztyZXR1cm4gXyYmYyYmYXdhaXQgYy51cGRhdGVUYXNrU3RhdHVzKF8sImlucHV0X3JlcXVpcmVkIiksYXdhaXQgdGhpcy5yZXF1ZXN0KGQsbSxiKX0sYXV0aEluZm86bj8uYXV0aEluZm8scmVxdWVzdElkOnQuaWQscmVxdWVzdEluZm86bj8ucmVxdWVzdEluZm8sdGFza0lkOnMsdGFza1N0b3JlOmMsdGFza1JlcXVlc3RlZFR0bDphPy50dGwsY2xvc2VTU0VTdHJlYW06bj8uY2xvc2VTU0VTdHJlYW0sY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtOm4/LmNsb3NlU3RhbmRhbG9uZVNTRVN0cmVhbX07UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2EmJnRoaXMuYXNzZXJ0VGFza0hhbmRsZXJDYXBhYmlsaXR5KHQubWV0aG9kKX0pLnRoZW4oKCk9Pm8odCx1KSkudGhlbihhc3luYyBkPT57aWYoaS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgbT17cmVzdWx0OmQsanNvbnJwYzoiMi4wIixpZDp0LmlkfTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP2F3YWl0IHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJyZXNwb25zZSIsbWVzc2FnZTptLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpOmF3YWl0IHI/LnNlbmQobSl9LGFzeW5jIGQ9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtqc29ucnBjOiIyLjAiLGlkOnQuaWQsZXJyb3I6e2NvZGU6TnVtYmVyLmlzU2FmZUludGVnZXIoZC5jb2RlKT9kLmNvZGU6TS5JbnRlcm5hbEVycm9yLG1lc3NhZ2U6ZC5tZXNzYWdlPz8iSW50ZXJuYWwgZXJyb3IiLC4uLmQuZGF0YSE9PXZvaWQgMCYme2RhdGE6ZC5kYXRhfX19O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6ImVycm9yIixtZXNzYWdlOm0sdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChtKX0pLmNhdGNoKGQ9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCByZXNwb25zZTogJHtkfWApKSkuZmluYWxseSgoKT0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5nZXQodC5pZCk9PT1pJiZ0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZGVsZXRlKHQuaWQpfSl9X29ucHJvZ3Jlc3ModCl7Y29uc3R7cHJvZ3Jlc3NUb2tlbjpuLC4uLm99PXQucGFyYW1zLHI9TnVtYmVyKG4pLHM9dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5nZXQocik7aWYoIXMpe3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZWNlaXZlZCBhIHByb2dyZXNzIG5vdGlmaWNhdGlvbiBmb3IgYW4gdW5rbm93biB0b2tlbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufWNvbnN0IGk9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQociksYT10aGlzLl90aW1lb3V0SW5mby5nZXQocik7aWYoYSYmaSYmYS5yZXNldFRpbWVvdXRPblByb2dyZXNzKXRyeXt0aGlzLl9yZXNldFRpbWVvdXQocil9Y2F0Y2goYyl7dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUociksdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUociksdGhpcy5fY2xlYW51cFRpbWVvdXQociksaShjKTtyZXR1cm59cyhvKX1fb25yZXNwb25zZSh0KXtjb25zdCBuPU51bWJlcih0LmlkKSxvPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KG4pO2lmKG8pe2lmKHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZGVsZXRlKG4pLHRvKHQpKW8odCk7ZWxzZXtjb25zdCBpPW5ldyBSKHQuZXJyb3IuY29kZSx0LmVycm9yLm1lc3NhZ2UsdC5lcnJvci5kYXRhKTtvKGkpfXJldHVybn1jb25zdCByPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KG4pO2lmKHI9PT12b2lkIDApe3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZWNlaXZlZCBhIHJlc3BvbnNlIGZvciBhbiB1bmtub3duIG1lc3NhZ2UgSUQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCkpO3JldHVybn10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShuKSx0aGlzLl9jbGVhbnVwVGltZW91dChuKTtsZXQgcz0hMTtpZih0byh0KSYmdC5yZXN1bHQmJnR5cGVvZiB0LnJlc3VsdD09Im9iamVjdCIpe2NvbnN0IGk9dC5yZXN1bHQ7aWYoaS50YXNrJiZ0eXBlb2YgaS50YXNrPT0ib2JqZWN0Iil7Y29uc3QgYT1pLnRhc2s7dHlwZW9mIGEudGFza0lkPT0ic3RyaW5nIiYmKHM9ITAsdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLnNldChhLnRhc2tJZCxuKSl9fWlmKHN8fHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRvKHQpKXIodCk7ZWxzZXtjb25zdCBpPVIuZnJvbUVycm9yKHQuZXJyb3IuY29kZSx0LmVycm9yLm1lc3NhZ2UsdC5lcnJvci5kYXRhKTtyKGkpfX1nZXQgdHJhbnNwb3J0KCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydH1hc3luYyBjbG9zZSgpe2F3YWl0IHRoaXMuX3RyYW5zcG9ydD8uY2xvc2UoKX1hc3luYypyZXF1ZXN0U3RyZWFtKHQsbixvKXtjb25zdHt0YXNrOnJ9PW8/P3t9O2lmKCFyKXt0cnl7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5yZXF1ZXN0KHQsbixvKX19Y2F0Y2goaSl7eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOmkgaW5zdGFuY2VvZiBSP2k6bmV3IFIoTS5JbnRlcm5hbEVycm9yLFN0cmluZyhpKSl9fXJldHVybn1sZXQgczt0cnl7Y29uc3QgaT1hd2FpdCB0aGlzLnJlcXVlc3QodCx1YyxvKTtpZihpLnRhc2spcz1pLnRhc2sudGFza0lkLHlpZWxke3R5cGU6InRhc2tDcmVhdGVkIix0YXNrOmkudGFza307ZWxzZSB0aHJvdyBuZXcgUihNLkludGVybmFsRXJyb3IsIlRhc2sgY3JlYXRpb24gZGlkIG5vdCByZXR1cm4gYSB0YXNrIik7Zm9yKDs7KXtjb25zdCBhPWF3YWl0IHRoaXMuZ2V0VGFzayh7dGFza0lkOnN9LG8pO2lmKHlpZWxke3R5cGU6InRhc2tTdGF0dXMiLHRhc2s6YX0sTGUoYS5zdGF0dXMpKXthLnN0YXR1cz09PSJjb21wbGV0ZWQiP3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7dGFza0lkOnN9LG4sbyl9OmEuc3RhdHVzPT09ImZhaWxlZCI/eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOm5ldyBSKE0uSW50ZXJuYWxFcnJvcixgVGFzayAke3N9IGZhaWxlZGApfTphLnN0YXR1cz09PSJjYW5jZWxsZWQiJiYoeWllbGR7dHlwZToiZXJyb3IiLGVycm9yOm5ldyBSKE0uSW50ZXJuYWxFcnJvcixgVGFzayAke3N9IHdhcyBjYW5jZWxsZWRgKX0pO3JldHVybn1pZihhLnN0YXR1cz09PSJpbnB1dF9yZXF1aXJlZCIpe3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7dGFza0lkOnN9LG4sbyl9O3JldHVybn1jb25zdCBjPWEucG9sbEludGVydmFsPz90aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO2F3YWl0IG5ldyBQcm9taXNlKHU9PnNldFRpbWVvdXQodSxjKSksbz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpfX1jYXRjaChpKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6aSBpbnN0YW5jZW9mIFI/aTpuZXcgUihNLkludGVybmFsRXJyb3IsU3RyaW5nKGkpKX19fXJlcXVlc3QodCxuLG8pe2NvbnN0e3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppLHRhc2s6YSxyZWxhdGVkVGFzazpjfT1vPz97fTtyZXR1cm4gbmV3IFByb21pc2UoKHUsZCk9Pntjb25zdCBtPVQ9PntkKFQpfTtpZighdGhpcy5fdHJhbnNwb3J0KXttKG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpKTtyZXR1cm59aWYodGhpcy5fb3B0aW9ucz8uZW5mb3JjZVN0cmljdENhcGFiaWxpdGllcz09PSEwKXRyeXt0aGlzLmFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QodC5tZXRob2QpLGEmJnRoaXMuYXNzZXJ0VGFza0NhcGFiaWxpdHkodC5tZXRob2QpfWNhdGNoKFQpe20oVCk7cmV0dXJufW8/LnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtjb25zdCB2PXRoaXMuX3JlcXVlc3RNZXNzYWdlSWQrKyxiPXsuLi50LGpzb25ycGM6IjIuMCIsaWQ6dn07bz8ub25wcm9ncmVzcyYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuc2V0KHYsby5vbnByb2dyZXNzKSxiLnBhcmFtcz17Li4udC5wYXJhbXMsX21ldGE6ey4uLnQucGFyYW1zPy5fbWV0YXx8e30scHJvZ3Jlc3NUb2tlbjp2fX0pLGEmJihiLnBhcmFtcz17Li4uYi5wYXJhbXMsdGFzazphfSksYyYmKGIucGFyYW1zPXsuLi5iLnBhcmFtcyxfbWV0YTp7Li4uYi5wYXJhbXM/Ll9tZXRhfHx7fSxbVWVdOmN9fSk7Y29uc3QgXz1UPT57dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUodiksdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUodiksdGhpcy5fY2xlYW51cFRpbWVvdXQodiksdGhpcy5fdHJhbnNwb3J0Py5zZW5kKHtqc29ucnBjOiIyLjAiLG1ldGhvZDoibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiLHBhcmFtczp7cmVxdWVzdElkOnYscmVhc29uOlN0cmluZyhUKX19LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aX0pLmNhdGNoKEc9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7R31gKSkpO2NvbnN0IEw9VCBpbnN0YW5jZW9mIFI/VDpuZXcgUihNLlJlcXVlc3RUaW1lb3V0LFN0cmluZyhUKSk7ZChMKX07dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5zZXQodixUPT57aWYoIW8/LnNpZ25hbD8uYWJvcnRlZCl7aWYoVCBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBkKFQpO3RyeXtjb25zdCBMPXZmKG4sVC5yZXN1bHQpO0wuc3VjY2Vzcz91KEwuZGF0YSk6ZChMLmVycm9yKX1jYXRjaChMKXtkKEwpfX19KSxvPy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e18obz8uc2lnbmFsPy5yZWFzb24pfSk7Y29uc3QgJD1vPy50aW1lb3V0Pz91eSxrPSgpPT5fKFIuZnJvbUVycm9yKE0uUmVxdWVzdFRpbWVvdXQsIlJlcXVlc3QgdGltZWQgb3V0Iix7dGltZW91dDokfSkpO3RoaXMuX3NldHVwVGltZW91dCh2LCQsbz8ubWF4VG90YWxUaW1lb3V0LGssbz8ucmVzZXRUaW1lb3V0T25Qcm9ncmVzcz8/ITEpO2NvbnN0IFM9Yz8udGFza0lkO2lmKFMpe2NvbnN0IFQ9TD0+e2NvbnN0IEc9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQodik7Rz9HKEwpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNwb25zZSBoYW5kbGVyIG1pc3NpbmcgZm9yIHNpZGUtY2hhbm5lbGVkIHJlcXVlc3QgJHt2fWApKX07dGhpcy5fcmVxdWVzdFJlc29sdmVycy5zZXQodixUKSx0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2UoUyx7dHlwZToicmVxdWVzdCIsbWVzc2FnZTpiLHRpbWVzdGFtcDpEYXRlLm5vdygpfSkuY2F0Y2goTD0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KHYpLGQoTCl9KX1lbHNlIHRoaXMuX3RyYW5zcG9ydC5zZW5kKGIse3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2goVD0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KHYpLGQoVCl9KX0pfWFzeW5jIGdldFRhc2sodCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2dldCIscGFyYW1zOnR9LGRjLG4pfWFzeW5jIGdldFRhc2tSZXN1bHQodCxuLG8pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvcmVzdWx0IixwYXJhbXM6dH0sbixvKX1hc3luYyBsaXN0VGFza3ModCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2xpc3QiLHBhcmFtczp0fSxoYyxuKX1hc3luYyBjYW5jZWxUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9jYW5jZWwiLHBhcmFtczp0fSxKdixuKX1hc3luYyBub3RpZmljYXRpb24odCxuKXtpZighdGhpcy5fdHJhbnNwb3J0KXRocm93IG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpO3RoaXMuYXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0Lm1ldGhvZCk7Y29uc3Qgbz1uPy5yZWxhdGVkVGFzaz8udGFza0lkO2lmKG8pe2NvbnN0IGE9ey4uLnQsanNvbnJwYzoiMi4wIixwYXJhbXM6ey4uLnQucGFyYW1zLF9tZXRhOnsuLi50LnBhcmFtcz8uX21ldGF8fHt9LFtVZV06bi5yZWxhdGVkVGFza319fTthd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uobyx7dHlwZToibm90aWZpY2F0aW9uIixtZXNzYWdlOmEsdGltZXN0YW1wOkRhdGUubm93KCl9KTtyZXR1cm59aWYoKHRoaXMuX29wdGlvbnM/LmRlYm91bmNlZE5vdGlmaWNhdGlvbk1ldGhvZHM/P1tdKS5pbmNsdWRlcyh0Lm1ldGhvZCkmJiF0LnBhcmFtcyYmIW4/LnJlbGF0ZWRSZXF1ZXN0SWQmJiFuPy5yZWxhdGVkVGFzayl7aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuaGFzKHQubWV0aG9kKSlyZXR1cm47dGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuYWRkKHQubWV0aG9kKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuZGVsZXRlKHQubWV0aG9kKSwhdGhpcy5fdHJhbnNwb3J0KXJldHVybjtsZXQgYT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGE9ey4uLmEscGFyYW1zOnsuLi5hLnBhcmFtcyxfbWV0YTp7Li4uYS5wYXJhbXM/Ll9tZXRhfHx7fSxbVWVdOm4ucmVsYXRlZFRhc2t9fX0pLHRoaXMuX3RyYW5zcG9ydD8uc2VuZChhLG4pLmNhdGNoKGM9PnRoaXMuX29uZXJyb3IoYykpfSk7cmV0dXJufWxldCBpPXsuLi50LGpzb25ycGM6IjIuMCJ9O24/LnJlbGF0ZWRUYXNrJiYoaT17Li4uaSxwYXJhbXM6ey4uLmkucGFyYW1zLF9tZXRhOnsuLi5pLnBhcmFtcz8uX21ldGF8fHt9LFtVZV06bi5yZWxhdGVkVGFza319fSksYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnNlbmQoaSxuKX1zZXRSZXF1ZXN0SGFuZGxlcih0LG4pe2NvbnN0IG89aXUodCk7dGhpcy5hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkobyksdGhpcy5fcmVxdWVzdEhhbmRsZXJzLnNldChvLChyLHMpPT57Y29uc3QgaT1hdSh0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobihpLHMpKX0pfXJlbW92ZVJlcXVlc3RIYW5kbGVyKHQpe3RoaXMuX3JlcXVlc3RIYW5kbGVycy5kZWxldGUodCl9YXNzZXJ0Q2FuU2V0UmVxdWVzdEhhbmRsZXIodCl7aWYodGhpcy5fcmVxdWVzdEhhbmRsZXJzLmhhcyh0KSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWVzdCBoYW5kbGVyIGZvciAke3R9IGFscmVhZHkgZXhpc3RzLCB3aGljaCB3b3VsZCBiZSBvdmVycmlkZGVuYCl9c2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pe2NvbnN0IG89aXUodCk7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuc2V0KG8scj0+e2NvbnN0IHM9YXUodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4ocykpfSl9cmVtb3ZlTm90aWZpY2F0aW9uSGFuZGxlcih0KXt0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5kZWxldGUodCl9X2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHQpe2NvbnN0IG49dGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmdldCh0KTtuIT09dm9pZCAwJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmRlbGV0ZSh0KSl9YXN5bmMgX2VucXVldWVUYXNrTWVzc2FnZSh0LG4sbyl7aWYoIXRoaXMuX3Rhc2tTdG9yZXx8IXRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5xdWV1ZSB0YXNrIG1lc3NhZ2U6IHRhc2tTdG9yZSBhbmQgdGFza01lc3NhZ2VRdWV1ZSBhcmUgbm90IGNvbmZpZ3VyZWQiKTtjb25zdCByPXRoaXMuX29wdGlvbnM/Lm1heFRhc2tRdWV1ZVNpemU7YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5lbnF1ZXVlKHQsbixvLHIpfWFzeW5jIF9jbGVhclRhc2tRdWV1ZSh0LG4pe2lmKHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpe2NvbnN0IG89YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlQWxsKHQsbik7Zm9yKGNvbnN0IHIgb2YgbylpZihyLnR5cGU9PT0icmVxdWVzdCImJnN1KHIubWVzc2FnZSkpe2NvbnN0IHM9ci5tZXNzYWdlLmlkLGk9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQocyk7aT8oaShuZXcgUihNLkludGVybmFsRXJyb3IsIlRhc2sgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZCIpKSx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShzKSk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlc29sdmVyIG1pc3NpbmcgZm9yIHJlcXVlc3QgJHtzfSBkdXJpbmcgdGFzayAke3R9IGNsZWFudXBgKSl9fX1hc3luYyBfd2FpdEZvclRhc2tVcGRhdGUodCxuKXtsZXQgbz10aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO3RyeXtjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZT8uZ2V0VGFzayh0KTtyPy5wb2xsSW50ZXJ2YWwmJihvPXIucG9sbEludGVydmFsKX1jYXRjaHt9cmV0dXJuIG5ldyBQcm9taXNlKChyLHMpPT57aWYobi5hYm9ydGVkKXtzKG5ldyBSKE0uSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpO3JldHVybn1jb25zdCBpPXNldFRpbWVvdXQocixvKTtuLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e2NsZWFyVGltZW91dChpKSxzKG5ldyBSKE0uSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpfSx7b25jZTohMH0pfSl9cmVxdWVzdFRhc2tTdG9yZSh0LG4pe2NvbnN0IG89dGhpcy5fdGFza1N0b3JlO2lmKCFvKXRocm93IG5ldyBFcnJvcigiTm8gdGFzayBzdG9yZSBjb25maWd1cmVkIik7cmV0dXJue2NyZWF0ZVRhc2s6YXN5bmMgcj0+e2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm8gcmVxdWVzdCBwcm92aWRlZCIpO3JldHVybiBhd2FpdCBvLmNyZWF0ZVRhc2socix0LmlkLHttZXRob2Q6dC5tZXRob2QscGFyYW1zOnQucGFyYW1zfSxuKX0sZ2V0VGFzazphc3luYyByPT57Y29uc3Qgcz1hd2FpdCBvLmdldFRhc2socixuKTtpZighcyl0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsIkZhaWxlZCB0byByZXRyaWV2ZSB0YXNrOiBUYXNrIG5vdCBmb3VuZCIpO3JldHVybiBzfSxzdG9yZVRhc2tSZXN1bHQ6YXN5bmMocixzLGkpPT57YXdhaXQgby5zdG9yZVRhc2tSZXN1bHQocixzLGksbik7Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZihhKXtjb25zdCBjPXBvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6YX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGMpLExlKGEuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxnZXRUYXNrUmVzdWx0OnI9Pm8uZ2V0VGFza1Jlc3VsdChyLG4pLHVwZGF0ZVRhc2tTdGF0dXM6YXN5bmMocixzLGkpPT57Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZighYSl0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsYFRhc2sgIiR7cn0iIG5vdCBmb3VuZCAtIGl0IG1heSBoYXZlIGJlZW4gY2xlYW5lZCB1cGApO2lmKExlKGEuc3RhdHVzKSl0aHJvdyBuZXcgUihNLkludmFsaWRQYXJhbXMsYENhbm5vdCB1cGRhdGUgdGFzayAiJHtyfSIgZnJvbSB0ZXJtaW5hbCBzdGF0dXMgIiR7YS5zdGF0dXN9IiB0byAiJHtzfSIuIFRlcm1pbmFsIHN0YXRlcyAoY29tcGxldGVkLCBmYWlsZWQsIGNhbmNlbGxlZCkgY2Fubm90IHRyYW5zaXRpb24gdG8gb3RoZXIgc3RhdGVzLmApO2F3YWl0IG8udXBkYXRlVGFza1N0YXR1cyhyLHMsaSxuKTtjb25zdCBjPWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKGMpe2NvbnN0IHU9cG8ucGFyc2Uoe21ldGhvZDoibm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMiLHBhcmFtczpjfSk7YXdhaXQgdGhpcy5ub3RpZmljYXRpb24odSksTGUoYy5zdGF0dXMpJiZ0aGlzLl9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcihyKX19LGxpc3RUYXNrczpyPT5vLmxpc3RUYXNrcyhyLG4pfX19ZnVuY3Rpb24gY3UoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIGR5KGUsdCl7Y29uc3Qgbj17Li4uZX07Zm9yKGNvbnN0IG8gaW4gdCl7Y29uc3Qgcj1vLHM9dFtyXTtpZihzPT09dm9pZCAwKWNvbnRpbnVlO2NvbnN0IGk9bltyXTtjdShpKSYmY3Uocyk/bltyXT17Li4uaSwuLi5zfTpuW3JdPXN9cmV0dXJuIG59KGU9PnR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnR5cGVvZiBQcm94eTwidSI/bmV3IFByb3h5KGUse2dldDoodCxuKT0+KHR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnQpW25dfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIHJlcXVpcmU8InUiKXJldHVybiByZXF1aXJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aHJvdyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInK2UrJyIgaXMgbm90IHN1cHBvcnRlZCcpfSk7Y2xhc3MgcHkgZXh0ZW5kcyBseXtfcmVnaXN0ZXJlZE1ldGhvZHM9bmV3IFNldDtfZXZlbnRTbG90cz1uZXcgTWFwO29uRXZlbnREaXNwYXRjaCh0LG4pe31fZW5zdXJlRXZlbnRTbG90KHQpe2xldCBuPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFuKXtsZXQgbz10aGlzLmV2ZW50U2NoZW1hc1t0XTtpZighbyl0aHJvdyBFcnJvcihgVW5rbm93biBldmVudDogJHtTdHJpbmcodCl9YCk7bj17bGlzdGVuZXJzOltdfSx0aGlzLl9ldmVudFNsb3RzLnNldCh0LG4pO2xldCByPW8uc2hhcGUubWV0aG9kLnZhbHVlO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChyKTtsZXQgcz1uO3N1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIobyxpPT57bGV0IGE9aS5wYXJhbXM7dGhpcy5vbkV2ZW50RGlzcGF0Y2godCxhKSxzLm9uSGFuZGxlcj8uKGEpO2ZvcihsZXQgYyBvZlsuLi5zLmxpc3RlbmVyc10pYyhhKX0pfXJldHVybiBufXNldEV2ZW50SGFuZGxlcih0LG4pe2xldCBvPXRoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KTtvLm9uSGFuZGxlciYmbiYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdIG9uJHtTdHJpbmcodCl9IGhhbmRsZXIgcmVwbGFjZWQuIFVzZSBhZGRFdmVudExpc3RlbmVyKCIke1N0cmluZyh0KX0iLCDigKYpIHRvIGFkZCBtdWx0aXBsZSBsaXN0ZW5lcnMgd2l0aG91dCByZXBsYWNpbmcuYCksby5vbkhhbmRsZXI9bn1nZXRFdmVudEhhbmRsZXIodCl7cmV0dXJuIHRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpPy5vbkhhbmRsZXJ9YWRkRXZlbnRMaXN0ZW5lcih0LG4pe3RoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KS5saXN0ZW5lcnMucHVzaChuKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsbil7bGV0IG89dGhpcy5fZXZlbnRTbG90cy5nZXQodCk7aWYoIW8pcmV0dXJuO2xldCByPW8ubGlzdGVuZXJzLmluZGV4T2Yobik7ciE9PS0xJiZvLmxpc3RlbmVycy5zcGxpY2UociwxKX1zZXRSZXF1ZXN0SGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0UmVxdWVzdEhhbmRsZXIiKSxzdXBlci5zZXRSZXF1ZXN0SGFuZGxlcih0LG4pfTtzZXROb3RpZmljYXRpb25IYW5kbGVyPSh0LG4pPT57dGhpcy5fYXNzZXJ0TWV0aG9kTm90UmVnaXN0ZXJlZCh0LCJzZXROb3RpZmljYXRpb25IYW5kbGVyIiksc3VwZXIuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pfTt3YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKHQsbixvKXtuJiZvJiZjb25zb2xlLndhcm4oYFtNQ1AgQXBwc10gJHt0fSBoYW5kbGVyIHJlcGxhY2VkLiBQcmV2aW91cyBoYW5kbGVyIHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZC5gKX1yZXBsYWNlUmVxdWVzdEhhbmRsZXI9KHQsbik9PntsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQobyksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07X2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCxuKXtsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTtpZih0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5oYXMobykpdGhyb3cgRXJyb3IoYEhhbmRsZXIgZm9yICIke299IiBhbHJlYWR5IHJlZ2lzdGVyZWQgKHZpYSAke259KS4gVXNlIGFkZEV2ZW50TGlzdGVuZXIoKSB0byBhdHRhY2ggbXVsdGlwbGUgbGlzdGVuZXJzLCBvciB0aGUgb24qIHNldHRlciBmb3IgcmVwbGFjZSBzZW1hbnRpY3MuYCk7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pfX12YXIgZnk9IjIwMjYtMDEtMjYiLGh5PSJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQtcGFydGlhbCI7Y2xhc3MgbXl7ZXZlbnRUYXJnZXQ7ZXZlbnRTb3VyY2U7bWVzc2FnZUxpc3RlbmVyO2NvbnN0cnVjdG9yKHQ9d2luZG93LnBhcmVudCxuKXt0aGlzLmV2ZW50VGFyZ2V0PXQsdGhpcy5ldmVudFNvdXJjZT1uLHRoaXMubWVzc2FnZUxpc3RlbmVyPW89PntpZihuJiZvLnNvdXJjZSE9PXRoaXMuZXZlbnRTb3VyY2Upe2NvbnNvbGUuZGVidWcoIklnbm9yaW5nIG1lc3NhZ2UgZnJvbSB1bmtub3duIHNvdXJjZSIsbyk7cmV0dXJufWxldCByPXh2LnNhZmVQYXJzZShvLmRhdGEpO3Iuc3VjY2Vzcz8oY29uc29sZS5kZWJ1ZygiUGFyc2VkIG1lc3NhZ2UiLHIuZGF0YSksdGhpcy5vbm1lc3NhZ2U/LihyLmRhdGEpKTpvLmRhdGE/Lmpzb25ycGMhPT0iMi4wIj9jb25zb2xlLmRlYnVnKCJJZ25vcmluZyBub24tSlNPTi1SUEMgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pOihjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcGFyc2UgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pLHRoaXMub25lcnJvcj8uKEVycm9yKCJJbnZhbGlkIEpTT04tUlBDIG1lc3NhZ2UgcmVjZWl2ZWQ6ICIrci5lcnJvci5tZXNzYWdlKSkpfX1hc3luYyBzdGFydCgpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLm1lc3NhZ2VMaXN0ZW5lcil9YXN5bmMgc2VuZCh0LG4pe3QubWV0aG9kIT09aHkmJmNvbnNvbGUuZGVidWcoIlNlbmRpbmcgbWVzc2FnZSIsdCksdGhpcy5ldmVudFRhcmdldC5wb3N0TWVzc2FnZSh0LCIqIil9YXN5bmMgY2xvc2UoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpLHRoaXMub25jbG9zZT8uKCl9b25jbG9zZTtvbmVycm9yO29ubWVzc2FnZTtzZXNzaW9uSWQ7c2V0UHJvdG9jb2xWZXJzaW9ufXZhciBneT1FKFtoKCJsaWdodCIpLGgoImRhcmsiKV0pLmRlc2NyaWJlKCJDb2xvciB0aGVtZSBwcmVmZXJlbmNlIGZvciB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKSxxdD1FKFtoKCJpbmxpbmUiKSxoKCJmdWxsc2NyZWVuIiksaCgicGlwIildKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlIGZvciBVSSBwcmVzZW50YXRpb24uIiksdnk9RShbaCgiLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnkiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5IiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLXRlcnRpYXJ5IiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtZ2hvc3QiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtaW5mbyIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcyIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nIiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLWRpc2FibGVkIiksaCgiLS1jb2xvci10ZXh0LXByaW1hcnkiKSxoKCItLWNvbG9yLXRleHQtc2Vjb25kYXJ5IiksaCgiLS1jb2xvci10ZXh0LXRlcnRpYXJ5IiksaCgiLS1jb2xvci10ZXh0LWludmVyc2UiKSxoKCItLWNvbG9yLXRleHQtZ2hvc3QiKSxoKCItLWNvbG9yLXRleHQtaW5mbyIpLGgoIi0tY29sb3ItdGV4dC1kYW5nZXIiKSxoKCItLWNvbG9yLXRleHQtc3VjY2VzcyIpLGgoIi0tY29sb3ItdGV4dC13YXJuaW5nIiksaCgiLS1jb2xvci10ZXh0LWRpc2FibGVkIiksaCgiLS1jb2xvci1ib3JkZXItcHJpbWFyeSIpLGgoIi0tY29sb3ItYm9yZGVyLXNlY29uZGFyeSIpLGgoIi0tY29sb3ItYm9yZGVyLXRlcnRpYXJ5IiksaCgiLS1jb2xvci1ib3JkZXItaW52ZXJzZSIpLGgoIi0tY29sb3ItYm9yZGVyLWdob3N0IiksaCgiLS1jb2xvci1ib3JkZXItaW5mbyIpLGgoIi0tY29sb3ItYm9yZGVyLWRhbmdlciIpLGgoIi0tY29sb3ItYm9yZGVyLXN1Y2Nlc3MiKSxoKCItLWNvbG9yLWJvcmRlci13YXJuaW5nIiksaCgiLS1jb2xvci1ib3JkZXItZGlzYWJsZWQiKSxoKCItLWNvbG9yLXJpbmctcHJpbWFyeSIpLGgoIi0tY29sb3ItcmluZy1zZWNvbmRhcnkiKSxoKCItLWNvbG9yLXJpbmctaW52ZXJzZSIpLGgoIi0tY29sb3ItcmluZy1pbmZvIiksaCgiLS1jb2xvci1yaW5nLWRhbmdlciIpLGgoIi0tY29sb3ItcmluZy1zdWNjZXNzIiksaCgiLS1jb2xvci1yaW5nLXdhcm5pbmciKSxoKCItLWZvbnQtc2FucyIpLGgoIi0tZm9udC1tb25vIiksaCgiLS1mb250LXdlaWdodC1ub3JtYWwiKSxoKCItLWZvbnQtd2VpZ2h0LW1lZGl1bSIpLGgoIi0tZm9udC13ZWlnaHQtc2VtaWJvbGQiKSxoKCItLWZvbnQtd2VpZ2h0LWJvbGQiKSxoKCItLWZvbnQtdGV4dC14cy1zaXplIiksaCgiLS1mb250LXRleHQtc20tc2l6ZSIpLGgoIi0tZm9udC10ZXh0LW1kLXNpemUiKSxoKCItLWZvbnQtdGV4dC1sZy1zaXplIiksaCgiLS1mb250LWhlYWRpbmcteHMtc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLXNtLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy1tZC1zaXplIiksaCgiLS1mb250LWhlYWRpbmctbGctc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLXhsLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy0yeGwtc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLTN4bC1zaXplIiksaCgiLS1mb250LXRleHQteHMtbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtdGV4dC1zbS1saW5lLWhlaWdodCIpLGgoIi0tZm9udC10ZXh0LW1kLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LXRleHQtbGctbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtaGVhZGluZy14cy1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLXNtLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmctbWQtbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtaGVhZGluZy1sZy1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLXhsLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmctMnhsLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmctM3hsLWxpbmUtaGVpZ2h0IiksaCgiLS1ib3JkZXItcmFkaXVzLXhzIiksaCgiLS1ib3JkZXItcmFkaXVzLXNtIiksaCgiLS1ib3JkZXItcmFkaXVzLW1kIiksaCgiLS1ib3JkZXItcmFkaXVzLWxnIiksaCgiLS1ib3JkZXItcmFkaXVzLXhsIiksaCgiLS1ib3JkZXItcmFkaXVzLWZ1bGwiKSxoKCItLWJvcmRlci13aWR0aC1yZWd1bGFyIiksaCgiLS1zaGFkb3ctaGFpcmxpbmUiKSxoKCItLXNoYWRvdy1zbSIpLGgoIi0tc2hhZG93LW1kIiksaCgiLS1zaGFkb3ctbGciKV0pLmRlc2NyaWJlKCJDU1MgdmFyaWFibGUga2V5cyBhdmFpbGFibGUgdG8gTUNQIGFwcHMgZm9yIHRoZW1pbmcuIiksYnk9Tyh2eS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSxFKFtmKCksc3QoKV0pLmRlc2NyaWJlKGBTdHlsZSB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgTUNQIGFwcHMuCgpJbmRpdmlkdWFsIHN0eWxlIGtleXMgYXJlIG9wdGlvbmFsIC0gaG9zdHMgbWF5IHByb3ZpZGUgYW55IHN1YnNldCBvZiB0aGVzZSB2YWx1ZXMuClZhbHVlcyBhcmUgc3RyaW5ncyBjb250YWluaW5nIENTUyB2YWx1ZXMgKGNvbG9ycywgc2l6ZXMsIGZvbnQgc3RhY2tzLCBldGMuKS4KCk5vdGU6IFRoaXMgdHlwZSB1c2VzIFxgUmVjb3JkPEssIHN0cmluZyB8IHVuZGVmaW5lZD5cYCByYXRoZXIgdGhhbiBcYFBhcnRpYWw8UmVjb3JkPEssIHN0cmluZz4+XGAKZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBab2Qgc2NoZW1hIGdlbmVyYXRpb24uIEJvdGggYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciB2YWxpZGF0aW9uLmApKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKTtnKHttZXRob2Q6aCgidWkvb3Blbi1saW5rIikscGFyYW1zOmcoe3VybDpmKCkuZGVzY3JpYmUoIlVSTCB0byBvcGVuIGluIHRoZSBob3N0J3MgYnJvd3NlciIpfSl9KTt2YXIgeXk9Zyh7aXNFcnJvcjpOKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgaG9zdCBmYWlsZWQgdG8gb3BlbiB0aGUgVVJMIChlLmcuLCBkdWUgdG8gc2VjdXJpdHkgcG9saWN5KS4iKX0pLnBhc3N0aHJvdWdoKCksX3k9Zyh7aXNFcnJvcjpOKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgZG93bmxvYWQgZmFpbGVkIChlLmcuLCB1c2VyIGNhbmNlbGxlZCBvciBob3N0IGRlbmllZCkuIil9KS5wYXNzdGhyb3VnaCgpLGt5PWcoe2lzRXJyb3I6TigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgcmVqZWN0ZWQgb3IgZmFpbGVkIHRvIGRlbGl2ZXIgdGhlIG1lc3NhZ2UuIil9KS5wYXNzdGhyb3VnaCgpO2coe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcHJveHktcmVhZHkiKSxwYXJhbXM6Zyh7fSl9KTt2YXIgd2M9Zyh7Y29ubmVjdERvbWFpbnM6eihmKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYE9yaWdpbnMgZm9yIG5ldHdvcmsgcmVxdWVzdHMgKGZldGNoL1hIUi9XZWJTb2NrZXQpLgoKLSBNYXBzIHRvIENTUCBcYGNvbm5lY3Qtc3JjXGAgZGlyZWN0aXZlCi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayBjb25uZWN0aW9ucyAoc2VjdXJlIGRlZmF1bHQpYCkscmVzb3VyY2VEb21haW5zOnooZigpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcmlnaW5zIGZvciBzdGF0aWMgcmVzb3VyY2VzIChpbWFnZXMsIHNjcmlwdHMsIHN0eWxlc2hlZXRzLCBmb250cywgbWVkaWEpLlxuXG4tIE1hcHMgdG8gQ1NQIGBpbWctc3JjYCwgYHNjcmlwdC1zcmNgLCBgc3R5bGUtc3JjYCwgYGZvbnQtc3JjYCwgYG1lZGlhLXNyY2AgZGlyZWN0aXZlc1xuLSBXaWxkY2FyZCBzdWJkb21haW5zIHN1cHBvcnRlZDogYGh0dHBzOi8vKi5leGFtcGxlLmNvbWBcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayByZXNvdXJjZXMgKHNlY3VyZSBkZWZhdWx0KSIpLGZyYW1lRG9tYWluczp6KGYoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3IgbmVzdGVkIGlmcmFtZXMuXG5cbi0gTWFwcyB0byBDU1AgYGZyYW1lLXNyY2AgZGlyZWN0aXZlXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5lc3RlZCBpZnJhbWVzIGFsbG93ZWQgKGBmcmFtZS1zcmMgJ25vbmUnYCkiKSxiYXNlVXJpRG9tYWluczp6KGYoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQWxsb3dlZCBiYXNlIFVSSXMgZm9yIHRoZSBkb2N1bWVudC5cblxuLSBNYXBzIHRvIENTUCBgYmFzZS11cmlgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBvbmx5IHNhbWUgb3JpZ2luIGFsbG93ZWQgKGBiYXNlLXVyaSAnc2VsZidgKSIpfSksJGM9Zyh7Y2FtZXJhOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2FtZXJhIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2FtZXJhYCBmZWF0dXJlLiIpLG1pY3JvcGhvbmU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBtaWNyb3Bob25lIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgbWljcm9waG9uZWAgZmVhdHVyZS4iKSxnZW9sb2NhdGlvbjpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGdlb2xvY2F0aW9uIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgZ2VvbG9jYXRpb25gIGZlYXR1cmUuIiksY2xpcGJvYXJkV3JpdGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBjbGlwYm9hcmQgd3JpdGUgYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBjbGlwYm9hcmQtd3JpdGVgIGZlYXR1cmUuIil9KTtnKHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiKSxwYXJhbXM6Zyh7d2lkdGg6UCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk5ldyB3aWR0aCBpbiBwaXhlbHMuIiksaGVpZ2h0OlAoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgaGVpZ2h0IGluIHBpeGVscy4iKX0pfSk7dmFyIHd5PWcoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQiKSxwYXJhbXM6Zyh7YXJndW1lbnRzOk8oZigpLFooKS5kZXNjcmliZSgiQ29tcGxldGUgdG9vbCBjYWxsIGFyZ3VtZW50cyBhcyBrZXktdmFsdWUgcGFpcnMuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpfSl9KSwkeT1nKHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiKSxwYXJhbXM6Zyh7YXJndW1lbnRzOk8oZigpLFooKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKX0pfSksU3k9Zyh7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1jYW5jZWxsZWQiKSxwYXJhbXM6Zyh7cmVhc29uOmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdPcHRpb25hbCByZWFzb24gZm9yIHRoZSBjYW5jZWxsYXRpb24gKGUuZy4sICJ1c2VyIGFjdGlvbiIsICJ0aW1lb3V0IikuJyl9KX0pLHp5PWcoe2ZvbnRzOmYoKS5vcHRpb25hbCgpfSksVHk9Zyh7dmFyaWFibGVzOmJ5Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgdGhlIGFwcC4iKSxjc3M6enkub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NTIGJsb2NrcyB0aGF0IGFwcHMgY2FuIGluamVjdC4iKX0pLEl5PWcoe21ldGhvZDpoKCJ1aS9yZXNvdXJjZS10ZWFyZG93biIpLHBhcmFtczpnKHt9KX0pO08oZigpLFooKSk7dmFyIHV1PWcoe3RleHQ6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0ZXh0IGNvbnRlbnQgYmxvY2tzLiIpLGltYWdlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgaW1hZ2UgY29udGVudCBibG9ja3MuIiksYXVkaW86Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBhdWRpbyBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGNvbnRlbnQgYmxvY2tzLiIpLHJlc291cmNlTGluazpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGxpbmsgY29udGVudCBibG9ja3MuIiksc3RydWN0dXJlZENvbnRlbnQ6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGNvbnRlbnQuIil9KTtnKHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTt2YXIgUHk9Zyh7ZXhwZXJpbWVudGFsOk8oZigpLE8oZigpLE9uKCkpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIiksb3BlbkxpbmtzOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgb3BlbmluZyBleHRlcm5hbCBVUkxzLiIpLGRvd25sb2FkRmlsZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGZpbGUgZG93bmxvYWRzIHZpYSB1aS9kb3dubG9hZC1maWxlLiIpLHNlcnZlclRvb2xzOmcoe2xpc3RDaGFuZ2VkOk4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgdG9vbCBjYWxscyB0byB0aGUgTUNQIHNlcnZlci4iKSxzZXJ2ZXJSZXNvdXJjZXM6Zyh7bGlzdENoYW5nZWQ6TigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgcmVzb3VyY2UgcmVhZHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksbG9nZ2luZzpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgbG9nIG1lc3NhZ2VzLiIpLHNhbmRib3g6Zyh7cGVybWlzc2lvbnM6JGMub3B0aW9uYWwoKS5kZXNjcmliZSgiUGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGUgaG9zdCAoY2FtZXJhLCBtaWNyb3Bob25lLCBnZW9sb2NhdGlvbikuIiksY3NwOndjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBkb21haW5zIGFwcHJvdmVkIGJ5IHRoZSBob3N0LiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBjb25maWd1cmF0aW9uIGFwcGxpZWQgYnkgdGhlIGhvc3QuIiksdXBkYXRlTW9kZWxDb250ZXh0OnV1Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYWNjZXB0cyBjb250ZXh0IHVwZGF0ZXMgKHVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0KSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbW9kZWwncyBjb250ZXh0IGZvciBmdXR1cmUgdHVybnMuIiksbWVzc2FnZTp1dS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlY2VpdmluZyBjb250ZW50IG1lc3NhZ2VzICh1aS9tZXNzYWdlKSBmcm9tIHRoZSB2aWV3LiIpLHNhbXBsaW5nOmcoe3Rvb2xzOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdG9vbCB1c2UgdmlhIGB0b29sc2AgYW5kIGB0b29sQ2hvaWNlYCBwYXJhbWV0ZXJzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBMTE0gc2FtcGxpbmcgKHNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UpIGZyb20gdGhlIHZpZXcuXG5NaXJyb3JzIHRoZSBNQ1AgYENsaWVudENhcGFiaWxpdGllcy5zYW1wbGluZ2Agc2hhcGUgc28gaG9zdHMgY2FuIHBhc3MgaXQgdGhyb3VnaC4iKX0pLHh5PWcoe2V4cGVyaW1lbnRhbDpPKGYoKSxPKGYoKSxPbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLHRvb2xzOmcoe2xpc3RDaGFuZ2VkOk4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgc3VwcG9ydHMgdG9vbHMvbGlzdF9jaGFuZ2VkIG5vdGlmaWNhdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgZXhwb3NlcyBNQ1Atc3R5bGUgdG9vbHMgdGhhdCB0aGUgaG9zdCBjYW4gY2FsbC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6eihxdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgYXBwIHN1cHBvcnRzLiIpfSk7Zyh7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6Zyh7fSkub3B0aW9uYWwoKX0pO2coe2NzcDp3Yy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb250ZW50IFNlY3VyaXR5IFBvbGljeSBjb25maWd1cmF0aW9uIGZvciBVSSByZXNvdXJjZXMuIikscGVybWlzc2lvbnM6JGMub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgYnkgdGhlIFVJIHJlc291cmNlLiIpLGRvbWFpbjpmKCkub3B0aW9uYWwoKS5kZXNjcmliZShgRGVkaWNhdGVkIG9yaWdpbiBmb3IgdmlldyBzYW5kYm94LgoKVXNlZnVsIHdoZW4gdmlld3MgbmVlZCBzdGFibGUsIGRlZGljYXRlZCBvcmlnaW5zIGZvciBPQXV0aCBjYWxsYmFja3MsIENPUlMgcG9saWNpZXMsIG9yIEFQSSBrZXkgYWxsb3dsaXN0cy4KCioqSG9zdC1kZXBlbmRlbnQ6KiogVGhlIGZvcm1hdCBhbmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgdGhpcyBmaWVsZCBhcmUgZGV0ZXJtaW5lZCBieSBlYWNoIGhvc3QuIFNlcnZlcnMgTVVTVCBjb25zdWx0IGhvc3Qtc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGV4cGVjdGVkIGRvbWFpbiBmb3JtYXQuIENvbW1vbiBwYXR0ZXJucyBpbmNsdWRlOgotIEhhc2gtYmFzZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB7aGFzaH0uY2xhdWRlbWNwY29udGVudC5jb21cYCkKLSBVUkwtZGVyaXZlZCBzdWJkb21haW5zIChlLmcuLCBcYHd3dy1leGFtcGxlLWNvbS5vYWl1c2VyY29udGVudC5jb21cYCkKCklmIG9taXR0ZWQsIGhvc3QgdXNlcyBkZWZhdWx0IHNhbmRib3ggb3JpZ2luICh0eXBpY2FsbHkgcGVyLWNvbnZlcnNhdGlvbikuYCkscHJlZmVyc0JvcmRlcjpOKCkub3B0aW9uYWwoKS5kZXNjcmliZShgVmlzdWFsIGJvdW5kYXJ5IHByZWZlcmVuY2UgLSB0cnVlIGlmIHZpZXcgcHJlZmVycyBhIHZpc2libGUgYm9yZGVyLgoKQm9vbGVhbiByZXF1ZXN0aW5nIHdoZXRoZXIgYSB2aXNpYmxlIGJvcmRlciBhbmQgYmFja2dyb3VuZCBpcyBwcm92aWRlZCBieSB0aGUgaG9zdC4gU3BlY2lmeWluZyBhbiBleHBsaWNpdCB2YWx1ZSBmb3IgdGhpcyBpcyByZWNvbW1lbmRlZCBiZWNhdXNlIGhvc3RzJyBkZWZhdWx0cyBtYXkgdmFyeS4KCi0gXGB0cnVlXGA6IHJlcXVlc3QgdmlzaWJsZSBib3JkZXIgKyBiYWNrZ3JvdW5kCi0gXGBmYWxzZVxgOiByZXF1ZXN0IG5vIHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIG9taXR0ZWQ6IGhvc3QgZGVjaWRlcyBib3JkZXJgKX0pO2coe21ldGhvZDpoKCJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIpLHBhcmFtczpnKHttb2RlOnF0LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIGJlaW5nIHJlcXVlc3RlZC4iKX0pfSk7dmFyIEV5PWcoe21vZGU6cXQuZGVzY3JpYmUoIlRoZSBkaXNwbGF5IG1vZGUgdGhhdCB3YXMgYWN0dWFsbHkgc2V0LiBNYXkgZGlmZmVyIGZyb20gcmVxdWVzdGVkIGlmIG5vdCBzdXBwb3J0ZWQuIil9KS5wYXNzdGhyb3VnaCgpLEN5PUUoW2goIm1vZGVsIiksaCgiYXBwIildKS5kZXNjcmliZSgiVG9vbCB2aXNpYmlsaXR5IHNjb3BlIC0gd2hvIGNhbiBhY2Nlc3MgdGhlIHRvb2wuIik7Zyh7cmVzb3VyY2VVcmk6ZigpLm9wdGlvbmFsKCksdmlzaWJpbGl0eTp6KEN5KS5vcHRpb25hbCgpLmRlc2NyaWJlKGBXaG8gY2FuIGFjY2VzcyB0aGlzIHRvb2wuIERlZmF1bHQ6IFsibW9kZWwiLCAiYXBwIl0KLSAibW9kZWwiOiBUb29sIHZpc2libGUgdG8gYW5kIGNhbGxhYmxlIGJ5IHRoZSBhZ2VudAotICJhcHAiOiBUb29sIGNhbGxhYmxlIGJ5IHRoZSBhcHAgZnJvbSB0aGlzIHNlcnZlciBvbmx5YCksY3NwOlZlKCkub3B0aW9uYWwoKSxwZXJtaXNzaW9uczpWZSgpLm9wdGlvbmFsKCl9KTtnKHttaW1lVHlwZXM6eihmKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0FycmF5IG9mIHN1cHBvcnRlZCBNSU1FIHR5cGVzIGZvciBVSSByZXNvdXJjZXMuXG5NdXN0IGluY2x1ZGUgYCJ0ZXh0L2h0bWw7cHJvZmlsZT1tY3AtYXBwImAgZm9yIE1DUCBBcHBzIHN1cHBvcnQuJyl9KTtnKHttZXRob2Q6aCgidWkvZG93bmxvYWQtZmlsZSIpLHBhcmFtczpnKHtjb250ZW50czp6KEUoW0xmLFVmXSkpLmRlc2NyaWJlKCJSZXNvdXJjZSBjb250ZW50cyB0byBkb3dubG9hZCDigJQgZW1iZWRkZWQgKGlubGluZSBkYXRhKSBvciBsaW5rZWQgKGhvc3QgZmV0Y2hlcykuIFVzZXMgc3RhbmRhcmQgTUNQIHJlc291cmNlIHR5cGVzLiIpfSl9KTtnKHttZXRob2Q6aCgidWkvbWVzc2FnZSIpLHBhcmFtczpnKHtyb2xlOmgoInVzZXIiKS5kZXNjcmliZSgnTWVzc2FnZSByb2xlLCBjdXJyZW50bHkgb25seSAidXNlciIgaXMgc3VwcG9ydGVkLicpLGNvbnRlbnQ6eihWbikuZGVzY3JpYmUoIk1lc3NhZ2UgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKX0pfSk7Zyh7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvc2FuZGJveC1yZXNvdXJjZS1yZWFkeSIpLHBhcmFtczpnKHtodG1sOmYoKS5kZXNjcmliZSgiSFRNTCBjb250ZW50IHRvIGxvYWQgaW50byB0aGUgaW5uZXIgaWZyYW1lLiIpLHNhbmRib3g6ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgaW5uZXIgaWZyYW1lJ3Mgc2FuZGJveCBhdHRyaWJ1dGUuIiksY3NwOndjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBjb25maWd1cmF0aW9uIGZyb20gcmVzb3VyY2UgbWV0YWRhdGEuIikscGVybWlzc2lvbnM6JGMub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpfSl9KTt2YXIgT3k9Zyh7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1yZXN1bHQiKSxwYXJhbXM6anIuZGVzY3JpYmUoIlN0YW5kYXJkIE1DUCB0b29sIGV4ZWN1dGlvbiByZXN1bHQuIil9KSxLZj1nKHt0b29sSW5mbzpnKHtpZDpEbi5vcHRpb25hbCgpLmRlc2NyaWJlKCJKU09OLVJQQyBpZCBvZiB0aGUgdG9vbHMvY2FsbCByZXF1ZXN0LiIpLHRvb2w6a2MuZGVzY3JpYmUoIlRvb2wgZGVmaW5pdGlvbiBpbmNsdWRpbmcgbmFtZSwgaW5wdXRTY2hlbWEsIGV0Yy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1ldGFkYXRhIG9mIHRoZSB0b29sIGNhbGwgdGhhdCBpbnN0YW50aWF0ZWQgdGhpcyBBcHAuIiksdGhlbWU6Z3kub3B0aW9uYWwoKS5kZXNjcmliZSgiQ3VycmVudCBjb2xvciB0aGVtZSBwcmVmZXJlbmNlLiIpLHN0eWxlczpUeS5vcHRpb25hbCgpLmRlc2NyaWJlKCJTdHlsZSBjb25maWd1cmF0aW9uIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksZGlzcGxheU1vZGU6cXQub3B0aW9uYWwoKS5kZXNjcmliZSgiSG93IHRoZSBVSSBpcyBjdXJyZW50bHkgZGlzcGxheWVkLiIpLGF2YWlsYWJsZURpc3BsYXlNb2Rlczp6KHF0KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEaXNwbGF5IG1vZGVzIHRoZSBob3N0IHN1cHBvcnRzLiIpLGNvbnRhaW5lckRpbWVuc2lvbnM6RShbZyh7aGVpZ2h0OlAoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIGhlaWdodCBpbiBwaXhlbHMuIil9KSxnKHttYXhIZWlnaHQ6RShbUCgpLHN0KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSldKS5hbmQoRShbZyh7d2lkdGg6UCgpLmRlc2NyaWJlKCJGaXhlZCBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSksZyh7bWF4V2lkdGg6RShbUCgpLHN0KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciB3aWR0aCBpbiBwaXhlbHMuIil9KV0pKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBDb250YWluZXIgZGltZW5zaW9ucy4gUmVwcmVzZW50cyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgaWZyYW1lIG9yIG90aGVyCmNvbnRhaW5lciBob2xkaW5nIHRoZSBhcHAuIFNwZWNpZnkgZWl0aGVyIHdpZHRoIG9yIG1heFdpZHRoLCBhbmQgZWl0aGVyIGhlaWdodCBvciBtYXhIZWlnaHQuYCksbG9jYWxlOmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBwcmVmZXJlbmNlIGluIEJDUCA0NyBmb3JtYXQuIiksdGltZVpvbmU6ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlVzZXIncyB0aW1lem9uZSBpbiBJQU5BIGZvcm1hdC4iKSx1c2VyQWdlbnQ6ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmllci4iKSxwbGF0Zm9ybTpFKFtoKCJ3ZWIiKSxoKCJkZXNrdG9wIiksaCgibW9iaWxlIildKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJQbGF0Zm9ybSB0eXBlIGZvciByZXNwb25zaXZlIGRlc2lnbiBkZWNpc2lvbnMuIiksZGV2aWNlQ2FwYWJpbGl0aWVzOmcoe3RvdWNoOk4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdG91Y2ggaW5wdXQuIiksaG92ZXI6TigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIldoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyBob3ZlciBpbnRlcmFjdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEZXZpY2UgaW5wdXQgY2FwYWJpbGl0aWVzLiIpLHNhZmVBcmVhSW5zZXRzOmcoe3RvcDpQKCkuZGVzY3JpYmUoIlRvcCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpLHJpZ2h0OlAoKS5kZXNjcmliZSgiUmlnaHQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxib3R0b206UCgpLmRlc2NyaWJlKCJCb3R0b20gc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxsZWZ0OlAoKS5kZXNjcmliZSgiTGVmdCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTW9iaWxlIHNhZmUgYXJlYSBib3VuZGFyaWVzIGluIHBpeGVscy4iKX0pLnBhc3N0aHJvdWdoKCksUnk9Zyh7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvaG9zdC1jb250ZXh0LWNoYW5nZWQiKSxwYXJhbXM6S2YuZGVzY3JpYmUoIlBhcnRpYWwgY29udGV4dCB1cGRhdGUgY29udGFpbmluZyBvbmx5IGNoYW5nZWQgZmllbGRzLiIpfSk7Zyh7bWV0aG9kOmgoInVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IikscGFyYW1zOmcoe2NvbnRlbnQ6eihWbikub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGV4dCBjb250ZW50IGJsb2NrcyAodGV4dCwgaW1hZ2UsIGV0Yy4pLiIpLHN0cnVjdHVyZWRDb250ZW50Ok8oZigpLFooKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKX0pfSk7Zyh7bWV0aG9kOmgoInVpL2luaXRpYWxpemUiKSxwYXJhbXM6Zyh7YXBwSW5mbzpaci5kZXNjcmliZSgiQXBwIGlkZW50aWZpY2F0aW9uIChuYW1lIGFuZCB2ZXJzaW9uKS4iKSxhcHBDYXBhYmlsaXRpZXM6eHkuZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgdGhpcyBhcHAgcHJvdmlkZXMuIikscHJvdG9jb2xWZXJzaW9uOmYoKS5kZXNjcmliZSgiUHJvdG9jb2wgdmVyc2lvbiB0aGlzIGFwcCBzdXBwb3J0cy4iKX0pfSk7dmFyIEF5PWcoe3Byb3RvY29sVmVyc2lvbjpmKCkuZGVzY3JpYmUoJ05lZ290aWF0ZWQgcHJvdG9jb2wgdmVyc2lvbiBzdHJpbmcgKGUuZy4sICIyMDI1LTExLTIxIikuJyksaG9zdEluZm86WnIuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmljYXRpb24gYW5kIHZlcnNpb24uIiksaG9zdENhcGFiaWxpdGllczpQeS5kZXNjcmliZSgiRmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBwcm92aWRlZCBieSB0aGUgaG9zdC4iKSxob3N0Q29udGV4dDpLZi5kZXNjcmliZSgiUmljaCBjb250ZXh0IGFib3V0IHRoZSBob3N0IGVudmlyb25tZW50LiIpfSkucGFzc3Rocm91Z2goKSxaeT17dGFyZ2V0OiJkcmFmdC0yMDIwLTEyIn07YXN5bmMgZnVuY3Rpb24gbHUoZSx0KXtsZXQgbj1lWyJ+c3RhbmRhcmQiXTtpZihuLmpzb25TY2hlbWEpcmV0dXJuIG4uanNvblNjaGVtYVt0XShaeSk7aWYobi52ZW5kb3I9PT0iem9kIil7bGV0e3o6b309YXdhaXQgdWgoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiR2KSx2b2lkIDAsaW1wb3J0Lm1ldGEudXJsKTtyZXR1cm4gby50b0pTT05TY2hlbWEoZSx7aW86dH0pfXRocm93IEVycm9yKGBTY2hlbWEgKHZlbmRvcjogJHtuLnZlbmRvcn0pIGRvZXMgbm90IGltcGxlbWVudCBTdGFuZGFyZCBKU09OIFNjaGVtYSAofnN0YW5kYXJkLmpzb25TY2hlbWEpLiBVc2UgYSBsaWJyYXJ5IHRoYXQgZG9lcyAoem9kIHY0LCBBcmtUeXBlLCBWYWxpYm90KSBvciB3cmFwIHlvdXIgc2NoZW1hIGFjY29yZGluZ2x5LmApfWFzeW5jIGZ1bmN0aW9uIGR1KGUsdCxuPSIiKXtsZXQgbz1hd2FpdCBlWyJ+c3RhbmRhcmQiXS52YWxpZGF0ZSh0KTtpZihvLmlzc3Vlcyl7bGV0IHI9by5pc3N1ZXMubWFwKHM9PntsZXQgaT1zLnBhdGg/Lm1hcChhPT50eXBlb2YgYT09Im9iamVjdCI/YS5rZXk6YSkuam9pbigiLiIpO3JldHVybiBpP2Ake2l9OiAke3MubWVzc2FnZX1gOnMubWVzc2FnZX0pLmpvaW4oIjsgIik7dGhyb3cgRXJyb3IobityKX1yZXR1cm4gby52YWx1ZX1mdW5jdGlvbiBOeShlKXtsZXQgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dC5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLGUpLHQuc3R5bGUuY29sb3JTY2hlbWU9ZX1mdW5jdGlvbiBqeShlLHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtmb3IobGV0W24sb11vZiBPYmplY3QuZW50cmllcyhlKSlvIT09dm9pZCAwJiZ0LnN0eWxlLnNldFByb3BlcnR5KG4sbyl9ZnVuY3Rpb24gTXkoZSl7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIl9fbWNwLWhvc3QtZm9udHMiKSlyZXR1cm47bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTt0LmlkPSJfX21jcC1ob3N0LWZvbnRzIix0LnRleHRDb250ZW50PWUsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0KX1jbGFzcyBTYyBleHRlbmRzIHB5e19hcHBJbmZvO19jYXBhYmlsaXRpZXM7b3B0aW9ucztfaG9zdENhcGFiaWxpdGllcztfaG9zdEluZm87X2hvc3RDb250ZXh0O19yZWdpc3RlcmVkVG9vbHM9e307X2luaXRpYWxpemVkU2VudD0hMTtfYXNzZXJ0SW5pdGlhbGl6ZWQodCl7aWYodGhpcy5faW5pdGlhbGl6ZWRTZW50KXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSBBcHAuJHt0fSgpIGNhbGxlZCBiZWZvcmUgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIEF3YWl0IGFwcC5jb25uZWN0KCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QsIG9yIG1vdmUgZGF0YSBsb2FkaW5nIHRvIGFuIG9udG9vbHJlc3VsdCBoYW5kbGVyLmA7aWYodGhpcy5vcHRpb25zPy5zdHJpY3QpdGhyb3cgRXJyb3Iobik7Y29uc29sZS53YXJuKGAke259LiBUaGlzIHdpbGwgdGhyb3cgaW4gYSBmdXR1cmUgcmVsZWFzZS5gKX1ldmVudFNjaGVtYXM9e3Rvb2xpbnB1dDp3eSx0b29saW5wdXRwYXJ0aWFsOiR5LHRvb2xyZXN1bHQ6T3ksdG9vbGNhbmNlbGxlZDpTeSxob3N0Y29udGV4dGNoYW5nZWQ6Unl9O3N0YXRpYyBPTkVfU0hPVF9FVkVOVFM9bmV3IFNldChbInRvb2xpbnB1dCIsInRvb2xpbnB1dHBhcnRpYWwiLCJ0b29scmVzdWx0IiwidG9vbGNhbmNlbGxlZCJdKTtfZXZlckhhZExpc3RlbmVyPW5ldyBTZXQ7X2Fzc2VydEhhbmRsZXJUaW1pbmcodCl7aWYoIVNjLk9ORV9TSE9UX0VWRU5UUy5oYXModCl8fHRoaXMuX2V2ZXJIYWRMaXN0ZW5lci5oYXModCl8fCh0aGlzLl9ldmVySGFkTGlzdGVuZXIuYWRkKHQpLCF0aGlzLl9pbml0aWFsaXplZFNlbnQpKXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSAiJHtTdHJpbmcodCl9IiBoYW5kbGVyIHJlZ2lzdGVyZWQgYWZ0ZXIgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIFRoZSBob3N0IG1heSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIG5vdGlmaWNhdGlvbi4gUmVnaXN0ZXIgaGFuZGxlcnMgYmVmb3JlIGNhbGxpbmcgYXBwLmNvbm5lY3QoKS5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihuKX1zZXRFdmVudEhhbmRsZXIodCxuKXtuJiZ0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLnNldEV2ZW50SGFuZGxlcih0LG4pfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLmFkZEV2ZW50TGlzdGVuZXIodCxuKX1vbkV2ZW50RGlzcGF0Y2godCxuKXt0PT09Imhvc3Rjb250ZXh0Y2hhbmdlZCImJih0aGlzLl9ob3N0Q29udGV4dD17Li4udGhpcy5faG9zdENvbnRleHQsLi4ubn0pfWNvbnN0cnVjdG9yKHQsbj17fSxvPXthdXRvUmVzaXplOiEwfSl7c3VwZXIobyksdGhpcy5fYXBwSW5mbz10LHRoaXMuX2NhcGFiaWxpdGllcz1uLHRoaXMub3B0aW9ucz1vLG8uYWxsb3dVbnNhZmVFdmFsfHxXKHtqaXRsZXNzOiEwfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihOcixyPT4oY29uc29sZS5sb2coIlJlY2VpdmVkIHBpbmc6IixyLnBhcmFtcykse30pKSx0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix2b2lkIDApfXJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHQpe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgY2FwYWJpbGl0aWVzIGFmdGVyIHRyYW5zcG9ydCBpcyBlc3RhYmxpc2hlZCIpO3RoaXMuX2NhcGFiaWxpdGllcz1keSh0aGlzLl9jYXBhYmlsaXRpZXMsdCl9cmVnaXN0ZXJUb29sKHQsbixvKXtpZih0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF0pdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtsZXQgcj10aGlzLHM9KCk9PntyLl9pbml0aWFsaXplZFNlbnQmJnIuX2NhcGFiaWxpdGllcy50b29scz8ubGlzdENoYW5nZWQmJnIuc2VuZFRvb2xMaXN0Q2hhbmdlZCgpfSxpPW4uaW5wdXRTY2hlbWEhPT12b2lkIDAsYT17dGl0bGU6bi50aXRsZSxkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOm4uaW5wdXRTY2hlbWEsb3V0cHV0U2NoZW1hOm4ub3V0cHV0U2NoZW1hLGFubm90YXRpb25zOm4uYW5ub3RhdGlvbnMsX21ldGE6bi5fbWV0YSxlbmFibGVkOiEwLGVuYWJsZSgpe3RoaXMuZW5hYmxlZD0hMCxzKCl9LGRpc2FibGUoKXt0aGlzLmVuYWJsZWQ9ITEscygpfSx1cGRhdGUoYyl7T2JqZWN0LmFzc2lnbih0aGlzLGMpLHMoKX0scmVtb3ZlKCl7ci5fcmVnaXN0ZXJlZFRvb2xzW3RdPT09YSYmKGRlbGV0ZSByLl9yZWdpc3RlcmVkVG9vbHNbdF0scygpKX0saGFuZGxlcjphc3luYyhjLHUpPT57aWYoIWEuZW5hYmxlZCl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGRpc2FibGVkYCk7bGV0IGQ7aWYoaSl7bGV0IG09YS5pbnB1dFNjaGVtYSx2PW0/YXdhaXQgZHUobSxjPz97fSxgSW52YWxpZCBpbnB1dCBmb3IgdG9vbCAke3R9OiBgKTpjPz97fTtkPWF3YWl0IG8odix1KX1lbHNlIGQ9YXdhaXQgbyh1KTtyZXR1cm4gYS5vdXRwdXRTY2hlbWEmJiFkLmlzRXJyb3ImJihkLnN0cnVjdHVyZWRDb250ZW50PWF3YWl0IGR1KGEub3V0cHV0U2NoZW1hLGQuc3RydWN0dXJlZENvbnRlbnQsYEludmFsaWQgb3V0cHV0IGZvciB0b29sICR7dH06IGApKSxkfX07cmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XT1hLCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMmJiF0aGlzLnRyYW5zcG9ydCYmdGhpcy5yZWdpc3RlckNhcGFiaWxpdGllcyh7dG9vbHM6e2xpc3RDaGFuZ2VkOiEwfX0pLHRoaXMuZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKSxzKCksYX1fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITE7ZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKXt0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZHx8KHRoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSEwLHRoaXMub25jYWxsdG9vbD1hc3luYyh0LG4pPT57bGV0IG89dGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3QubmFtZV07aWYoIW8pdGhyb3cgRXJyb3IoYFRvb2wgJHt0Lm5hbWV9IG5vdCBmb3VuZGApO3JldHVybiBvLmhhbmRsZXIodC5hcmd1bWVudHMsbil9LHRoaXMub25saXN0dG9vbHM9YXN5bmModCxuKT0+KHt0b29sczphd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyh0aGlzLl9yZWdpc3RlcmVkVG9vbHMpLmZpbHRlcigoW28scl0pPT5yLmVuYWJsZWQpLm1hcChhc3luYyhbbyxyXSk9PntsZXQgcz17bmFtZTpvLHRpdGxlOnIudGl0bGUsZGVzY3JpcHRpb246ci5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpyLmlucHV0U2NoZW1hP2F3YWl0IGx1KHIuaW5wdXRTY2hlbWEsImlucHV0Iik6e3R5cGU6Im9iamVjdCIscHJvcGVydGllczp7fX19O3JldHVybiByLm91dHB1dFNjaGVtYSYmKHMub3V0cHV0U2NoZW1hPWF3YWl0IGx1KHIub3V0cHV0U2NoZW1hLCJvdXRwdXQiKSksci5hbm5vdGF0aW9ucyYmKHMuYW5ub3RhdGlvbnM9ci5hbm5vdGF0aW9ucyksci5fbWV0YSYmKHMuX21ldGE9ci5fbWV0YSksc30pKX0pKX1hc3luYyBzZW5kVG9vbExpc3RDaGFuZ2VkKHQ9e30pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kVG9vbExpc3RDaGFuZ2VkIiksYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiLHBhcmFtczp0fSl9Z2V0SG9zdENhcGFiaWxpdGllcygpe3JldHVybiB0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzfWdldEhvc3RWZXJzaW9uKCl7cmV0dXJuIHRoaXMuX2hvc3RJbmZvfWdldEhvc3RDb250ZXh0KCl7cmV0dXJuIHRoaXMuX2hvc3RDb250ZXh0fWdldCBvbnRvb2xpbnB1dCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iil9c2V0IG9udG9vbGlucHV0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiLHQpfWdldCBvbnRvb2xpbnB1dHBhcnRpYWwoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiKX1zZXQgb250b29saW5wdXRwYXJ0aWFsKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIix0KX1nZXQgb250b29scmVzdWx0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iil9c2V0IG9udG9vbHJlc3VsdCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIsdCl9Z2V0IG9udG9vbGNhbmNlbGxlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIpfXNldCBvbnRvb2xjYW5jZWxsZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiLHQpfWdldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIil9c2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHQpfV9vbnRlYXJkb3duO2dldCBvbnRlYXJkb3duKCl7cmV0dXJuIHRoaXMuX29udGVhcmRvd259c2V0IG9udGVhcmRvd24odCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbnRlYXJkb3duIix0aGlzLl9vbnRlYXJkb3duLHQpLHRoaXMuX29udGVhcmRvd249dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihJeSwobixvKT0+e2lmKCF0aGlzLl9vbnRlYXJkb3duKXRocm93IEVycm9yKCJObyBvbnRlYXJkb3duIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29udGVhcmRvd24obi5wYXJhbXMsbyl9KX1fb25jYWxsdG9vbDtnZXQgb25jYWxsdG9vbCgpe3JldHVybiB0aGlzLl9vbmNhbGx0b29sfXNldCBvbmNhbGx0b29sKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25jYWxsdG9vbCIsdGhpcy5fb25jYWxsdG9vbCx0KSx0aGlzLl9vbmNhbGx0b29sPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoRmYsKG4sbyk9PntpZighdGhpcy5fb25jYWxsdG9vbCl0aHJvdyBFcnJvcigiTm8gb25jYWxsdG9vbCBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmNhbGx0b29sKG4ucGFyYW1zLG8pfSl9X29ubGlzdHRvb2xzO2dldCBvbmxpc3R0b29scygpe3JldHVybiB0aGlzLl9vbmxpc3R0b29sc31zZXQgb25saXN0dG9vbHModCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmxpc3R0b29scyIsdGhpcy5fb25saXN0dG9vbHMsdCksdGhpcy5fb25saXN0dG9vbHM9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihIZiwobixvKT0+e2lmKCF0aGlzLl9vbmxpc3R0b29scyl0aHJvdyBFcnJvcigiTm8gb25saXN0dG9vbHMgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHMobi5wYXJhbXMsbyl9KX1hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHQpe3N3aXRjaCh0KXtjYXNlInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiOmlmKCF0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPy5zYW1wbGluZyl0aHJvdyBFcnJvcihgSG9zdCBkb2VzIG5vdCBzdXBwb3J0IHNhbXBsaW5nIChyZXF1aXJlZCBmb3IgJHt0fSlgKTticmVha319YXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KHQpe3N3aXRjaCh0KXtjYXNlInRvb2xzL2NhbGwiOmNhc2UidG9vbHMvbGlzdCI6aWYoIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyl0aHJvdyBFcnJvcihgQ2xpZW50IGRvZXMgbm90IHN1cHBvcnQgdG9vbCBjYXBhYmlsaXR5IChyZXF1aXJlZCBmb3IgJHt0fSlgKTtyZXR1cm47Y2FzZSJwaW5nIjpjYXNlInVpL3Jlc291cmNlLXRlYXJkb3duIjpyZXR1cm47ZGVmYXVsdDp0aHJvdyBFcnJvcihgTm8gaGFuZGxlciBmb3IgbWV0aG9kICR7dH0gcmVnaXN0ZXJlZGApfX1hc3NlcnROb3RpZmljYXRpb25DYXBhYmlsaXR5KHQpe31hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFza3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2sgaGFuZGxlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3luYyBjYWxsU2VydmVyVG9vbCh0LG4pe2lmKHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjYWxsU2VydmVyVG9vbCIpLHR5cGVvZiB0PT0ic3RyaW5nIil0aHJvdyBFcnJvcihgY2FsbFNlcnZlclRvb2woKSBleHBlY3RzIGFuIG9iamVjdCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGJ1dCByZWNlaXZlZCBhIHN0cmluZyAoIiR7dH0iKS4gRGlkIHlvdSBtZWFuOiBjYWxsU2VydmVyVG9vbCh7IG5hbWU6ICIke3R9IiwgYXJndW1lbnRzOiB7IC4uLiB9IH0pP2ApO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidG9vbHMvY2FsbCIscGFyYW1zOnR9LGpyLHtvbnByb2dyZXNzOigpPT57fSxyZXNldFRpbWVvdXRPblByb2dyZXNzOiEwLC4uLm59KX1hc3luYyByZWFkU2VydmVyUmVzb3VyY2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlYWRTZXJ2ZXJSZXNvdXJjZSIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvcmVhZCIscGFyYW1zOnR9LERmLG4pfWFzeW5jIGxpc3RTZXJ2ZXJSZXNvdXJjZXModCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImxpc3RTZXJ2ZXJSZXNvdXJjZXMiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL2xpc3QiLHBhcmFtczp0fSxxZixuKX1hc3luYyBjcmVhdGVTYW1wbGluZ01lc3NhZ2UodCxuKXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY3JlYXRlU2FtcGxpbmdNZXNzYWdlIik7bGV0IG89dC50b29scz9KZjpWZjtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiLHBhcmFtczp0fSxvLG4pfXNlbmRNZXNzYWdlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kTWVzc2FnZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9tZXNzYWdlIixwYXJhbXM6dH0sa3ksbil9c2VuZExvZyh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy9tZXNzYWdlIixwYXJhbXM6dH0pfXVwZGF0ZU1vZGVsQ29udGV4dCh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgidXBkYXRlTW9kZWxDb250ZXh0IiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IixwYXJhbXM6dH0saWMsbil9b3BlbkxpbmsodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoIm9wZW5MaW5rIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL29wZW4tbGluayIscGFyYW1zOnR9LHl5LG4pfXNlbmRPcGVuTGluaz10aGlzLm9wZW5MaW5rO2Rvd25sb2FkRmlsZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiZG93bmxvYWRGaWxlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2Rvd25sb2FkLWZpbGUiLHBhcmFtczp0fSxfeSxuKX1yZXF1ZXN0VGVhcmRvd24odD17fSl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIscGFyYW1zOnR9KX1yZXF1ZXN0RGlzcGxheU1vZGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlcXVlc3REaXNwbGF5TW9kZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIscGFyYW1zOnR9LEV5LG4pfXNlbmRTaXplQ2hhbmdlZCh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiLHBhcmFtczp0fSl9c2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKXtsZXQgdD0hMSxuPTAsbz0wLHI9KCk9Pnt0fHwodD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0PSExO2xldCBpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPWkuc3R5bGUuaGVpZ2h0O2kuc3R5bGUuaGVpZ2h0PSJtYXgtY29udGVudCI7bGV0IGM9TWF0aC5jZWlsKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtpLnN0eWxlLmhlaWdodD1hO2xldCB1PU1hdGguY2VpbCh3aW5kb3cuaW5uZXJXaWR0aCk7KHUhPT1ufHxjIT09bykmJihuPXUsbz1jLHRoaXMuc2VuZFNpemVDaGFuZ2VkKHt3aWR0aDp1LGhlaWdodDpjfSkpfSkpfTtyKCk7bGV0IHM9bmV3IFJlc2l6ZU9ic2VydmVyKHIpO3JldHVybiBzLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxzLm9ic2VydmUoZG9jdW1lbnQuYm9keSksKCk9PnMuZGlzY29ubmVjdCgpfWFzeW5jIGNvbm5lY3QodD1uZXcgbXkod2luZG93LnBhcmVudCx3aW5kb3cucGFyZW50KSxuKXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQXBwIGlzIGFscmVhZHkgY29ubmVjdGVkLiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgYWdhaW4uIik7dGhpcy5faW5pdGlhbGl6ZWRTZW50PSExLGF3YWl0IHN1cGVyLmNvbm5lY3QodCk7dHJ5e2xldCBvPWF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9pbml0aWFsaXplIixwYXJhbXM6e2FwcENhcGFiaWxpdGllczp0aGlzLl9jYXBhYmlsaXRpZXMsYXBwSW5mbzp0aGlzLl9hcHBJbmZvLHByb3RvY29sVmVyc2lvbjpmeX19LEF5LG4pO2lmKG89PT12b2lkIDApdGhyb3cgRXJyb3IoYFNlcnZlciBzZW50IGludmFsaWQgaW5pdGlhbGl6ZSByZXN1bHQ6ICR7b31gKTt0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPW8uaG9zdENhcGFiaWxpdGllcyx0aGlzLl9ob3N0SW5mbz1vLmhvc3RJbmZvLHRoaXMuX2hvc3RDb250ZXh0PW8uaG9zdENvbnRleHQsYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCJ9KSx0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITAsdGhpcy5vcHRpb25zPy5hdXRvUmVzaXplJiZ0aGlzLnNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl9Y2F0Y2gobyl7dGhyb3cgdGhpcy5jbG9zZSgpLG99fX1sZXQgcHU9IiI7Y29uc3QgV2Y9KGUsdCxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk9PntpZighZSlyZXR1cm47KGUudGhlbWU9PT0ibGlnaHQifHxlLnRoZW1lPT09ImRhcmsiKSYmdC5hcHBseURvY3VtZW50VGhlbWUoZS50aGVtZSk7Y29uc3Qgbz1lLnN0eWxlcz8udmFyaWFibGVzO28mJnR5cGVvZiBvPT0ib2JqZWN0IiYmdC5hcHBseUhvc3RTdHlsZVZhcmlhYmxlcyhvKTtjb25zdCByPWUuc3R5bGVzPy5jc3M/LmZvbnRzO3R5cGVvZiByPT0ic3RyaW5nIiYmciYmciE9PXB1JiYodC5hcHBseUhvc3RGb250cyhyKSxwdT1yKTtjb25zdCBzPWUuc2FmZUFyZWFJbnNldHM7aWYocylmb3IoY29uc3QgaSBvZlsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0pe2NvbnN0IGE9TnVtYmVyKHNbaV0/PzApO24uc3R5bGUuc2V0UHJvcGVydHkoYC0taW5zZXQtJHtpfWAsYCR7TnVtYmVyLmlzRmluaXRlKGEpJiZhPjA/YTowfXB4YCl9fSxPZT1uZXcgU2Moe25hbWU6ImhvdGVsLXN0b3JlZnJvbnQiLHZlcnNpb246IjEuMC4wIn0se29wZW5MaW5rczp7fX0pLEdmPXthcHBseURvY3VtZW50VGhlbWU6TnksYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXM6anksYXBwbHlIb3N0Rm9udHM6TXl9LGNlPWU9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLGw9ZT0+U3RyaW5nKGU/PyIiKS5yZXBsYWNlKC9bJjw+IiddL2csdD0+dD09PSImIj8iJmFtcDsiOnQ9PT0iPCI/IiZsdDsiOnQ9PT0iPiI/IiZndDsiOnQ9PT0nIic/IiZxdW90OyI6IiYjMzk7Iik7bGV0IHR0PSIiLFZyPSIiLFFmPXt9LFlmPSExLFhmPSIiLEE9e2NoZWNrSW46IiIsY2hlY2tPdXQ6IiIsZ3Vlc3RzOjJ9LF9lPTE7Y29uc3QgcXk9NTtsZXQgUT1udWxsLHV0PVtdLEhlPSIiLHplPVtdLHdlPW51bGwsaG89MDtjb25zdCBEeT1uZXcgU2V0KFsiZm9yZ2V0UHJlZmVyZW5jZXMiLCJhZGRUb1RyaXAiLCJjbGVhclRyaXAiLCJyZXF1ZXN0Qm9va2luZyIsImNhbmNlbEJvb2tpbmciLCJjaGFuZ2VCb29raW5nIiwic2lnbkluIiwic2lnbk91dCJdKSxmdT1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpO3JldHVybiB0PT09ImhvdGVsInx8dD09PSJuby1yb29tcyJ8fHQ9PT0ibmVlZHMtZGF0ZXMiP2Bob3RlbDoke2UuaG90ZWw/LmlkPz8iIn1gOnQ9PT0iZXh0cmFzIj9lLmZvckJvb2tpbmc/YGV4dHJhczpib29raW5nOiR7ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9YDpgZXh0cmFzOiR7ZS5ob3RlbD8uaWQ/PyIifWA6dD09PSJwb2xpY3kifHx0PT09InBvbGljaWVzInx8dD09PSJwb2xpY3ktbWlzc2luZyI/YHBvbGljeToke2UuaG90ZWw/LmlkPz8iIn06JHtlLnRvcGljPz8iIn1gOnQ9PT0iY2FuY2VsbGF0aW9uLXByZXZpZXciP2BjYW5jZWw6JHtlLmJvb2tpbmc/LmNvbmZpcm1hdGlvbkNvZGU/PyIifWA6dD09PSJjaGFuZ2UtcHJldmlldyI/YGNoYW5nZToke2UuY29uZmlybWF0aW9uQ29kZT8/ZS5ib29raW5nPy5jb25maXJtYXRpb25Db2RlPz8iIn1gOnQ9PT0ibm8taG90ZWxzIj8iaG90ZWxzIjp0fSxpcz1lPT57IXdlfHxVeS5oYXMoU3RyaW5nKHdlLnZpZXcpKXx8ZnUoZSkhPT1mdSh3ZSkmJih6ZT1bLi4uemUse3BheWxvYWQ6d2UsbGFiZWw6SHkod2UpLHZlcnNpb246aG99XS5zbGljZSgtNikpfSxMeT1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpLG49ZT8uc3RheT8uY2hlY2tJbj97Y2hlY2tJbjplLnN0YXkuY2hlY2tJbixjaGVja091dDplLnN0YXkuY2hlY2tPdXQsZ3Vlc3RzOmUuc3RheS5ndWVzdHM/PzJ9Ont9O2lmKHQ9PT0idHJpcCIpcmV0dXJue2tleToidmlld1RyaXAiLGFyZ3M6e319O2lmKHQ9PT0iYm9va2luZ3MiKXJldHVybntrZXk6Imxpc3RCb29raW5ncyIsYXJnczp7fX07aWYoKHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zIikmJmUuaG90ZWw/LmlkKXJldHVybntrZXk6ImdldEhvdGVsIixhcmdzOntob3RlbDplLmhvdGVsLmlkLC4uLm4sLi4uZS5yb29tc193YW50ZWQ/e3Jvb21zOmUucm9vbXNfd2FudGVkfTp7fX19O2lmKHQ9PT0iZXh0cmFzIiYmZS5mb3JCb29raW5nKXJldHVybntrZXk6Imxpc3RFeHRyYXMiLGFyZ3M6e2Jvb2tpbmc6ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9fTtpZih0PT09ImV4dHJhcyImJmUuaG90ZWw/LmlkKXJldHVybntrZXk6Imxpc3RFeHRyYXMiLGFyZ3M6e2hvdGVsOmUuaG90ZWwuaWQsLi4ubn19O2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm57a2V5OiJpdGluZXJhcnkiLGFyZ3M6e3RpdGxlOmUudGl0bGUsLi4ubixkYXlzOihlLmRheXM/P1tdKS5tYXAobz0+KHtsYWJlbDpvLmxhYmVsLC4uLm8ubm90ZT97bm90ZTpvLm5vdGV9Ont9LGl0ZW1zOihvLml0ZW1zPz9bXSkubWFwKHI9PnIuaWQpfSkpfX19LGh1PWU9Pnt6ZT16ZS5maWx0ZXIodD0+IWUuaW5jbHVkZXMoU3RyaW5nKHQucGF5bG9hZD8udmlldykpKX0sVXk9bmV3IFNldChbImJvb2tpbmciLCJjYW5jZWxsZWQiLCJjaGFuZ2VkIiwiZXJyb3IiLCJuZWVkcy1ndWVzdCIsInNpZ25lZC1vdXQiLCJtZW1iZXItc2lnbi1pbiJdKSxIeT1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpO2lmKHQ9PT0iY29tcGFyaXNvbiIpcmV0dXJuYCR7KGUuY29sdW1ucz8/W10pLmxlbmd0aH0gc2lkZSBieSBzaWRlYDtpZih0PT09Iml0aW5lcmFyeSIpcmV0dXJuInRoZSBwbGFuIjtpZih0PT09Im5vLWhvdGVscyIpcmV0dXJuInRoZSBzZWFyY2giO2lmKHQ9PT0iaG90ZWxzIil7Y29uc3Qgbj1bLi4ubmV3IFNldCgoZS5ob3RlbHM/P1tdKS5tYXAobz0+U3RyaW5nKG8uY2l0eSkpKV07cmV0dXJuIG4ubGVuZ3RoPT09MT9TdHJpbmcoblswXSk6YCR7ZS50b3RhbD8/MH0gaG90ZWxzYH1yZXR1cm4gdD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMifHx0PT09Im5lZWRzLWRhdGVzIj9TdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpOnQ9PT0iY2FuY2VsbGF0aW9uLXByZXZpZXciPyJ0aGUgY2FuY2VsbGF0aW9uIjp0PT09ImNoYW5nZS1wcmV2aWV3Ij8idGhlIGNoYW5nZSI6dD09PSJtZW1iZXIiPyJ5b3VyIG1lbWJlcnNoaXAiOnQ9PT0iZXh0cmFzIj9lLmZvckJvb2tpbmc/YGFkZC1vbnMgZm9yICR7ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9YDpgJHtTdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpfSBhZGQtb25zYDp0PT09InRyaXAiPyJ0aGUgdHJpcCI6dD09PSJib29raW5ncyI/InlvdXIgYm9va2luZ3MiOnQ9PT0icG9saWN5Inx8dD09PSJwb2xpY2llcyI/InRoZSBwb2xpY2llcyI6ImJhY2sifSxGeT0oKT0+e2NvbnN0IGU9Y2UoImJhY2tidG4iKSx0PXplLmF0KC0xKTtlLmhpZGRlbj0hdCx0JiYoZS50ZXh0Q29udGVudD1g4oC5ICR7dC5sYWJlbH1gKX07bGV0IEF0PSIiLGFzPSIiLER0PTAsemM9ITE7Y29uc3QgZWg9ZT0+e2NvbnN0IHQ9ZT8uWyJjdXJsZXNzL3RyaXAiXTt0JiYodHlwZW9mIHQudHJpcElkPT0ic3RyaW5nIiYmdC50cmlwSWQmJihhcz10LnRyaXBJZCksRHQ9TnVtYmVyKHQuY291bnQ/PzApLEFycmF5LmlzQXJyYXkodC5saW5lcykmJih1dD10LmxpbmVzLHpjPSEwKSl9LEJ5PWU9PmFzP3suLi5lLHRyaXA6YXN9OmUsVnk9ZT0+UWZbZV0/PyIiO2xldCBNcj0hMTtjb25zdCBtdT1lPT57TXI9ZSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuY2FyZCIpPy5jbGFzc0xpc3QudG9nZ2xlKCJidXN5IixlKX07bGV0IG1vPTAsY3M9IiI7Y29uc3QgSj0oZSx0PXt9LG49e30pPT57Y29uc3Qgbz1WeShlKTtpZighbylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBubyB0b29sIGZvciAke2V9YCkpO2lmKE1yKXJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7bXUoITApO2NvbnN0IHI9bW87cmV0dXJuIE9lLmNhbGxTZXJ2ZXJUb29sKHtuYW1lOm8sYXJndW1lbnRzOkJ5KHQpfSkuZmluYWxseSgoKT0+bXUoITEpKS50aGVuKHM9PntlaChzPy5fbWV0YSk7Y29uc3QgaT1zPy5zdHJ1Y3R1cmVkQ29udGVudDtjcz1pP0pTT04uc3RyaW5naWZ5KGkpOiIiO2NvbnN0IGE9RHkuaGFzKGUpJiZpJiZpLnZpZXchPT0iZXJyb3IiO3JldHVybiByPT09bW8mJmk/KG4ucHVzaCE9PSExJiZpcyhpKSxhJiYoaG8rPTEpLGkudmlldz09PSJib29raW5nIiYmKGh1KFsidHJpcCIsIm5lZWRzLWRhdGVzIiwibmVlZHMtZ3Vlc3QiXSksU2U9bnVsbCksKGkudmlldz09PSJjYW5jZWxsZWQifHxpLnZpZXc9PT0iY2hhbmdlZCIpJiZodShbImNhbmNlbGxhdGlvbi1wcmV2aWV3IiwiY2hhbmdlLXByZXZpZXciXSksZXQoaSkpOmEmJihobys9MSksSnkocyksc30pfSxKeT1lPT57Y29uc3QgdD0oZT8uY29udGVudD8/W10pLmZpbmQobj0+bj8udHlwZT09PSJ0ZXh0Iik/LnRleHQ7IXR8fCFPZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/LnVwZGF0ZU1vZGVsQ29udGV4dHx8T2UudXBkYXRlTW9kZWxDb250ZXh0KHtjb250ZW50Olt7dHlwZToidGV4dCIsdGV4dDpTdHJpbmcodCl9XX0pLmNhdGNoKCgpPT57fSl9LEpuPWU9PntsZXQgdD0wO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bis9MSl0PSh0KjMxK2UuY2hhckNvZGVBdChuKSklMzYwO3JldHVybmAtLXNob3QtYTpoc2woJHt0fSA0MiUgMzQlKTstLXNob3QtYjpoc2woJHsodCszOCklMzYwfSA0NiUgMjIlKWB9LEtuPWU9PmUucmVwbGFjZSgvW15ccHtMfVxwe059IF0vZ3UsIiAiKS5zcGxpdCgvXHMrLykuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsMikubWFwKHQ9PnRbMF0/LnRvVXBwZXJDYXNlKCk/PyIiKS5qb2luKCIiKSxLeT0nPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0iY3VycmVudENvbG9yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDMuNWwyLjYgNS4zIDUuOS45LTQuMyA0LjEgMSA1LjhMMTIgMTYuOSA2LjggMTkuNmwxLTUuOEwzLjUgOS43bDUuOS0uOXoiLz48L3N2Zz4nLFd5PWU9PmUmJnR5cGVvZiBlLnZhbHVlPT0ibnVtYmVyIj9gPHNwYW4gY2xhc3M9InJhdGUiPiR7S3l9JHtsKGUudmFsdWUpfTxzcGFuIGNsYXNzPSJ0LWZyb20iPjxzbWFsbD4gwrcgJHtsKGUuY291bnQpfTwvc21hbGw+PC9zcGFuPjwvc3Bhbj5gOiIiLHNlPSgpPT5ZZj9gPGRpdiBjbGFzcz0iZGVtbyI+PGI+RGVtbzwvYj48c3Bhbj4ke2woWGZ8fCJEZW1vbnN0cmF0aW9uIGRhdGE6IHRoZXNlIHJhdGVzIGFuZCByb29tIGNvdW50cyB3ZXJlIG1hZGUgdXAgZm9yIHRoaXMgZGVtby4iKX08L3NwYW4+PC9kaXY+YDoiIixMdD1lPT57Y29uc3QgdD1uZXcgRGF0ZShgJHtlfVQxMjowMDowMFpgKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT9lOnQudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KX0sdXM9KGUsdCk9Pk1hdGgucm91bmQoKERhdGUucGFyc2UoYCR7dH1UMTI6MDA6MDBaYCktRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSkvODY0ZTUpLERlPWU9PmU/LmNoZWNrSW4mJmU/LmNoZWNrT3V0P2Ake0x0KGUuY2hlY2tJbil9IOKAkyAke0x0KGUuY2hlY2tPdXQpfSDCtyAke3VzKGUuY2hlY2tJbixlLmNoZWNrT3V0KX0gJHt1cyhlLmNoZWNrSW4sZS5jaGVja091dCk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixHeT0oZSx0LG4pPT57Y29uc3Qgbz11dC5maW5kKHI9PnIua2luZD09PSJyb29tIiYmci5ob3RlbElkPT09ZSYmci5yb29tUmVmPT09dCYmci5zdGF5Py5jaGVja0luPT09bj8uY2hlY2tJbiYmci5zdGF5Py5jaGVja091dD09PW4/LmNoZWNrT3V0KTtyZXR1cm4gTnVtYmVyKG8/LnF1YW50aXR5Pz8wKX0sUXk9KGUsdCk9Pntjb25zdCBuPXV0LmZpbmQobz0+by5raW5kPT09ImV4dHJhIiYmby5ob3RlbElkPT09ZSYmby5leHRyYVJlZj09PXQpO3JldHVybiBOdW1iZXIobj8ucXVhbnRpdHk/PzApfSxnbz0oZSx0LG4sbz0xKT0+dD4wP2A8c3BhbiBjbGFzcz0ic3RlcCI+CiAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiAke2V9IGRhdGEtbj0iJHt0LTF9IiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgJHtsKG4pfSI+4oiSPC9idXR0b24+CiAgICAgICAgIDxzcGFuIGNsYXNzPSJuIj4ke3R9PC9zcGFuPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dCsxfSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgJHtsKG4pfSI+KzwvYnV0dG9uPgogICAgICAgPC9zcGFuPmA6YDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWRkIiAke2V9IGRhdGEtbj0iJHtvfSIgYXJpYS1sYWJlbD0iQWRkICR7bChuKX0iPgogICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyLjQiCiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDV2MTRNNSAxMmgxNCIvPjwvc3ZnPgogICAgICAgPC9idXR0b24+YCx0aD0oZSx0KT0+e2NvbnN0IG49dHx8WXkoKTtyZXR1cm4oIUEuY2hlY2tJbnx8QS5jaGVja0luPG4pJiYoQS5jaGVja0luPW4pLCghQS5jaGVja091dHx8QS5jaGVja091dDw9QS5jaGVja0luKSYmKEEuY2hlY2tPdXQ9bHMoQS5jaGVja0luLDEpKSxgCiAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNpIiB2YWx1ZT0iJHtsKEEuY2hlY2tJbil9IiBtaW49IiR7bChuKX0iPjwvbGFiZWw+CiAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjbyIgdmFsdWU9IiR7bChBLmNoZWNrT3V0KX0iIG1pbj0iJHtsKGxzKEEuY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGxhYmVsIGNsYXNzPSJndWVzdHMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7bChfZSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9sYWJlbD4KICAgIDxzcGFuIGNsYXNzPSJuaWdodHMiIGlkPSJuaWdodHMiPiR7bChUYygpKX08L3NwYW4+CiAgPC9kaXY+YH0sVGM9KCk9Pntjb25zdCBlPUEuY2hlY2tJbiYmQS5jaGVja091dD91cyhBLmNoZWNrSW4sQS5jaGVja091dCk6MCx0PWU+MD9gJHtlfSAke2U9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixuPV9lPjE/YCR7X2V9IHJvb21zYDoiIjtyZXR1cm5bdCxuXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpfSxscz0oZSx0KT0+bmV3IERhdGUoRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSt0Kjg2NGU1KS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLFl5PSgpPT5uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCksWHk9ZT0+e2NvbnN0IHQ9ZS5ob3RlbHM/P1tdLG49Wy4uLm5ldyBTZXQodC5tYXAoYT0+U3RyaW5nKGEuY2l0eSkpKV0sbz1hPT57Y29uc3QgYz10LmZpbmQodT0+dS5jaXR5PT09YSk/LmNvdW50cnk7cmV0dXJuIGMmJiFTdHJpbmcoYykuc3RhcnRzV2l0aChhKT9TdHJpbmcoYyk6IiJ9LHI9YT0+YAogICAgPGRpdiBjbGFzcz0iY2l0eWdyb3VwIj4KICAgICAgJHtuLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJjaXR5bmFtZSI+JHtsKGEpfSR7byhhKT9gPHNtYWxsPiDCtyAke2wobyhhKSl9PC9zbWFsbD5gOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InRpbGVzIj4KICAgICAgICAke3QuZmlsdGVyKGM9PmMuY2l0eT09PWEpLm1hcChjPT5gCiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7bChjLmlkKX0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtKbihTdHJpbmcoYy5pZCkpfSI+CiAgICAgICAgICAgICAgJHtjLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtsKGMuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtsKEtuKFN0cmluZyhjLm5hbWUpKSl9PC9zcGFuPgogICAgICAgICAgICAgICR7Yy5icmFuZD9gPHNwYW4gY2xhc3M9InQtYnJhbmQiPiR7bChjLmJyYW5kKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke2woYy5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7bChuLmxlbmd0aD4xP2MuYXJlYT8/Yy5jaXR5OltjLmFyZWEsYy5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mcm9tIj4ke2MuZnJvbU5pZ2h0bHk/YCR7bChjLmZyb21OaWdodGx5KX08c21hbGw+IC8gbmlnaHQ8L3NtYWxsPmA6IiJ9PC9zcGFuPgogICAgICAgICAgICAgICAgJHtXeShjLnJhdGluZyl9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gLHM9TnVtYmVyKGUudG90YWw/P3QubGVuZ3RoKSxpPXMtdC5sZW5ndGg7cmV0dXJuW3NlKCksZS53aWRlbmVkP2A8ZGl2IGNsYXNzPSJ3YXJubm90ZSI+Tm90aGluZyBtYXRjaGVkICR7bChlLndpZGVuZWQuZnJvbSl9LiBUaGVzZSBhcmUgJHtsKGUud2lkZW5lZC50byl9LjwvZGl2PmA6IiIsYDxkaXY+JHtuLm1hcChyKS5qb2luKCIiKX08L2Rpdj5gLChlLmN1cnJlbmNpZXM/P1tdKS5sZW5ndGg+MT9gPGRpdiBjbGFzcz0ibm90ZSI+UXVvdGVkIGluICR7bChlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9IOKAlCBubyByYXRlIGlzIGFwcGxpZWQgaGVyZSwgc28gdGhpcyBpcyBub3QgYSBwcmljZSBvcmRlci4gT25lIGNpdHkgb3Igb25lIGNvdW50cnkgZ2l2ZXMgb25lIGN1cnJlbmN5LjwvZGl2PmA6IiIsZS5vdmVyQnVkZ2V0P2A8ZGl2IGNsYXNzPSJub3RlIj4ke2woZS5vdmVyQnVkZ2V0KX0gbW9yZSBtYXRjaGVkIGFuZCBjYW1lIGluIG92ZXIgdGhlIHByaWNlIGNlaWxpbmcuPC9kaXY+YDoiIixpPjA/YDxkaXYgY2xhc3M9Im5vdGUiPlNob3dpbmcgJHt0Lmxlbmd0aH0gb2YgJHtzfS4gTmFtZSBhIGNpdHkgb3IgYSBjb3VudHJ5IHRvIHNlZSB0aGUgcmVzdC48L2Rpdj5gOiIiXS5qb2luKCIiKX0sZV89ZT0+e2NvbnN0IHQ9ZS5uZWFyZXN0Pz9bXTtyZXR1cm4gdC5sZW5ndGg/W3NlKCksYDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIGNhbWUgaW4gdW5kZXIgdGhlIHByaWNlIGNlaWxpbmcuICR7bCh0Lmxlbmd0aD09PTE/IlRoZSBuZWFyZXN0IGlzIjoiVGhlIG5lYXJlc3QgYXJlIil9IG92ZXIgaXQuPC9kaXY+YCxgPGRpdiBjbGFzcz0idGlsZXMiPiR7dC5tYXAobj0+YAogICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIG92ZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtsKG4uaWQpfSI+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7Sm4oU3RyaW5nKG4uaWQpKX0iPgogICAgICAgICAgJHtuLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtsKG4uaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2woS24oU3RyaW5nKG4ubmFtZSkpKX08L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHtsKG4ubmFtZSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7bChbbi5hcmVhLG4uY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7bi5mcm9tTmlnaHRseT9gJHtsKG4uZnJvbU5pZ2h0bHkpfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5PdmVyPC9zcGFuPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIik6YDxkaXYgY2xhc3M9ImVtcHR5Ij5Ob3RoaW5nIG1hdGNoZWQke2UucXVlcnk/YCAiJHtsKGUucXVlcnkpfSJgOiIifS4gVHJ5IGEgY2l0eS48L2Rpdj5gfSxuaD1lPT5gCiAgPGRpdiBjbGFzcz0iaGVybyIgc3R5bGU9IiR7Sm4oU3RyaW5nKGUuaWQpKX0iPgogICAgJHtlLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtsKGUuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2woS24oU3RyaW5nKGUubmFtZSkpKX08L3NwYW4+CiAgICAke2UuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke2woZS5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgPC9kaXY+CiAgPGRpdj4KICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtsKGUubmFtZSl9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2woW2UuYXJlYSxlLmNpdHksU3RyaW5nKGUuY291bnRyeT8/IiIpLnN0YXJ0c1dpdGgoU3RyaW5nKGUuY2l0eSkpPyIiOmUuY291bnRyeV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9JHtlLnJhdGluZz9gIMK3ICR7bChlLnJhdGluZy52YWx1ZSl94piFICgke2woZS5yYXRpbmcuY291bnQpfSlgOiIifTwvZGl2PgogIDwvZGl2PgogICR7ZS5zdW1tYXJ5P2A8ZGl2IGNsYXNzPSJoLXN1bSI+JHtsKGUuc3VtbWFyeSl9PC9kaXY+YDoiIn0KICAkeyhlLmFtZW5pdGllcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5hbWVuaXRpZXMuc2xpY2UoMCw4KS5tYXAodD0+YDxzcGFuIGNsYXNzPSJjaGlwIj4ke2wodCl9PC9zcGFuPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJ9YCx0Xz0oZSx0LG4pPT57Y29uc3Qgbz1HeShTdHJpbmcoZS5pZCksU3RyaW5nKHQuaWQpLG4pLHI9W3QuYmVkcyx0LnZpZXcsYFNsZWVwcyAke3Quc2xlZXBzfWAsdC5zaXplU3FtP2Ake3Quc2l6ZVNxbX1twrJgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyB3aXRodGh1bWIiPgogICAgICA8c3BhbiBjbGFzcz0idGh1bWIiIHN0eWxlPSIke0puKGAke2UuaWR9OiR7dC5pZH1gKX0iPgogICAgICAgICR7dC5pbWFnZVVybD9gPGltZyBzcmM9IiR7bCh0LmltYWdlVXJsKX0iIGFsdD0iIj5gOmwoS24oU3RyaW5nKHQubmFtZSkpKX0KICAgICAgPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2wodC5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2wocil9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4KICAgICAgICAgICR7dC5icmVha2Zhc3Q/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5CcmVha2Zhc3Q8L3NwYW4+JzoiIn0KICAgICAgICAgICR7dC5yZWZ1bmRhYmxlP2A8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb24ke3QuZnJlZUNhbmNlbGxhdGlvblVudGlsP2AgdW50aWwgJHtsKFN0cmluZyh0LmZyZWVDYW5jZWxsYXRpb25VbnRpbCkuc2xpY2UoMCwxMCkpfWA6IiJ9PC9zcGFuPmA6JzxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5Ob24tcmVmdW5kYWJsZTwvc3Bhbj4nfQogICAgICAgICAgJHtOdW1iZXIodC5yb29tc0xlZnQpPD0zP2A8c3BhbiBjbGFzcz0iYmFkZ2UiPiR7bCh0LnJvb21zTGVmdCl9IGxlZnQ8L3NwYW4+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAke3QucHVibGljU3RheVRvdGFsP2A8ZGl2IGNsYXNzPSJwLXdhcyI+JHtsKHQucHVibGljU3RheVRvdGFsKX08L2Rpdj5gOiIifQogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7bCh0LnJvb21zVG90YWw/P3Quc3RheVRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7bCh0Lm5pZ2h0bHkpfSAvIG5pZ2h0JHtfZT4xP2AgwrcgJHtfZX0gcm9vbXNgOiIifSDCtyBpbmNsLiB0YXg8L2Rpdj4KICAgICAgICAke3QubWVtYmVyUmF0ZT9gPGRpdiBjbGFzcz0icC1tZW1iZXIiPiR7bCh0Lm1lbWJlclJhdGUudGllcil9IHJhdGU8L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke2dvKGBkYXRhLWFkZC1yb29tPSIke2wodC5pZCl9IiBkYXRhLWhvdGVsPSIke2woZS5pZCl9ImAsbyxTdHJpbmcodC5uYW1lKSxfZSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxuXz0oZSx0KT0+IUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDI/IiI6YAogIDxkaXYgY2xhc3M9ImZsZXgtZGF0ZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJOZWFyYnkgYXJyaXZhbCBkYXRlcyI+CiAgICAke3QubWFwKG49PmA8YnV0dG9uIGNsYXNzPSJmZCR7bi5jaG9zZW4/IiBvbiI6IiJ9JHtuLmZyb20/IiI6IiBvdXQifSR7bi5iZXN0PyIgYmVzdCI6IiJ9IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7bChlKX0iIGRhdGEtY2k9IiR7bChuLmNoZWNrSW4pfSIgZGF0YS1jbz0iJHtsKG4uY2hlY2tPdXQpfSIgYXJpYS1sYWJlbD0iQXJyaXZlICR7bChMdChTdHJpbmcobi5jaGVja0luKSkpfSR7bi5mcm9tP2AsIGZyb20gJHtsKG4uZnJvbSl9YDoiLCBub3RoaW5nIGxlZnQifSI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZkLWRheSI+JHtsKEx0KFN0cmluZyhuLmNoZWNrSW4pKSl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1wcmljZSI+JHtuLmZyb20/bChuLmZyb20pOiJGdWxsIn08L3NwYW4+CiAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogIDwvZGl2PmAsZ3U9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnJvb21zPz9bXSxvPWUuc3RheT8/QTtyZXR1cm5bc2UoKSxuaCh0KSx0aChTdHJpbmcodC5pZCksdC50b2RheVRoZXJlKSxuXyhTdHJpbmcodC5pZCksZS5kYXRlcyksZS5uZWVkc0RhdGVzPyc8ZGl2IGNsYXNzPSJlbXB0eSI+TG9va2luZyB1cCByb29tc+KApjwvZGl2Pic6ZS5ub1Jvb21zP2A8ZGl2IGNsYXNzPSJlcnIiPiR7bChlLm5vUm9vbXMpfTwvZGl2PmA6YDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+dF8odCxyLG8pKS5qb2luKCIiKX08L2Rpdj5gLChlLmV4dHJhcz8/W10pLmxlbmd0aD9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1leHRyYXM9IiR7bCh0LmlkKX0iPkFkZC1vbnMgYW5kIGV4cGVyaWVuY2VzPC9idXR0b24+YDoiIiwoZS5wb2xpY2llcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5wb2xpY2llcy5tYXAocj0+YDxidXR0b24gY2xhc3M9ImNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wb2xpY3k9IiR7bChyLnRvcGljKX0iIGRhdGEtaG90ZWw9IiR7bCh0LmlkKX0iPiR7bChyLnRpdGxlKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sb189ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLmV4dHJhcz8/W10sbz1lLmZvckJvb2tpbmc7cmV0dXJuIG8/W3NlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj5BZGQtb25zIGZvciAke2woby5jb25maXJtYXRpb25Db2RlKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2wodC5uYW1lKX0gwrcgJHtsKERlKG8uc3RheSkpfTwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+YAogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtsKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7bChyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2woci5wcmljZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7bChyLnBlcil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtnbyhgZGF0YS1ib29raW5nLWV4dHJhPSIke2woci5pZCl9IiBkYXRhLWJvb2tpbmc9IiR7bChvLmNvbmZpcm1hdGlvbkNvZGUpfSJgLE51bWJlcihvLmhlbGQ/LltyLmlkXT8/MCksU3RyaW5nKHIubmFtZSkpfTwvZGl2PgogICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsJzxkaXYgY2xhc3M9Im5vdGUiPkVhY2ggY2hhbmdlIGlzIHNob3duIHdpdGggaXRzIG5ldyB0b3RhbCBiZWZvcmUgYW55dGhpbmcgbW92ZXMuIE5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLjwvZGl2PicsJzxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+QmFjayB0byB5b3VyIGJvb2tpbmdzPC9idXR0b24+J10uam9pbigiIik6W3NlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2wodC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IGl0IG9mZmVycyBiZXNpZGUgdGhlIHJvb208L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7bChyLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtsKHIuZGVzY3JpcHRpb24pfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7bChyLnByaWNlKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7bChyLnBlcil9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke2dvKGBkYXRhLWFkZC1leHRyYT0iJHtsKHIuaWQpfSIgZGF0YS1ob3RlbD0iJHtsKHQuaWQpfSJgLFF5KFN0cmluZyh0LmlkKSxTdHJpbmcoci5pZCkpLFN0cmluZyhyLm5hbWUpKX08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtsKHQuaWQpfSI+QmFjayB0byAke2wodC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0scl89ZT0+e2NvbnN0IHQ9ZS5raW5kPT09InJvb20iP2BkYXRhLWFkZC1yb29tPSIke2woZS5yb29tUmVmKX0iIGRhdGEtaG90ZWw9IiR7bChlLmhvdGVsSWQpfSIgZGF0YS1jaT0iJHtsKGUuc3RheT8uY2hlY2tJbil9IiBkYXRhLWNvPSIke2woZS5zdGF5Py5jaGVja091dCl9IiBkYXRhLWd1PSIke2woZS5zdGF5Py5ndWVzdHMpfSJgOmBkYXRhLWFkZC1leHRyYT0iJHtsKGUuZXh0cmFSZWY/P2UudGl0bGUpfSIgZGF0YS1ob3RlbD0iJHtsKGUuaG90ZWxJZCl9ImA7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtsKGUudGl0bGUpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7bChlLmtpbmQ9PT0icm9vbSI/YCR7ZS5ob3RlbE5hbWV9IMK3ICR7RGUoZS5zdGF5KX0ke2UucmVmdW5kYWJsZT09PSExPyIgwrcgbm9uLXJlZnVuZGFibGUiOiIifWA6YCR7ZS5ob3RlbE5hbWV9JHtlLmRldGFpbD9gIMK3ICR7ZS5kZXRhaWx9YDoiIn1gKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2woZS50b3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke2woZS51bml0KX0ke2Uua2luZD09PSJyb29tIj8iIC8gbmlnaHQiOiIgZWFjaCJ9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7Z28odCxOdW1iZXIoZS5xdWFudGl0eT8/MSksU3RyaW5nKGUudGl0bGUpKX08L2Rpdj4KICAgIDwvZGl2PmB9LHZ1PShlLHQpPT5gPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Sb29tcyBhbmQgYWRkLW9uczwvc3Bhbj48c3Bhbj4ke2woZS5zdWJ0b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgIDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+VGF4ZXMgYW5kIGZlZXM8L3NwYW4+PHNwYW4+JHtsKGUudGF4ZXNBbmRGZWVzKX08L3NwYW4+PC9kaXY+CiAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIGdvb2QiPjxzcGFuPiR7bChlLm1lbWJlclNhdmluZy50aWVyKX0gbWVtYmVyIHJhdGU8L3NwYW4+PHNwYW4+4oiSICR7bChlLm1lbWJlclNhdmluZy5zYXZlZCl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2wodCl9PC9zcGFuPjxzcGFuPiR7bChlLnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Qb2ludHMgdGhpcyBlYXJuczwvc3Bhbj48c3Bhbj4ke2woTnVtYmVyKGUubWVtYmVyU2F2aW5nLnBvaW50cykudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfTwvc3Bhbj48L2Rpdj5gOiIifQogICA8L2Rpdj5gLHNfPWU9Pntjb25zdCB0PWUubGluZXM/P1tdO2lmKHQubGVuZ3RoPT09MClyZXR1cm5bc2UoKSwnPGRpdiBjbGFzcz0iZW1wdHkiPlRoZSB0cmlwIGlzIGVtcHR5LjwvZGl2PicsYDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5Ccm93c2UgJHtsKHR0KX0gaG90ZWxzPC9idXR0b24+PC9kaXY+YF0uam9pbigiIik7Y29uc3Qgbj1bLi4ubmV3IFNldCh0Lm1hcChvPT5TdHJpbmcoby5kYXk/PyIiKSkpXS5zb3J0KCk7cmV0dXJuW3NlKCksbi5tYXAobz0+YAogICAgICAke28/YDxkaXYgY2xhc3M9ImRheSI+JHtsKEx0KG8pKX08L2Rpdj5gOiIifQogICAgICA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QuZmlsdGVyKHI9PlN0cmluZyhyLmRheT8/IiIpPT09bykubWFwKHJfKS5qb2luKCIiKX08L2Rpdj5gKS5qb2luKCIiKSwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChvPT5gJHtsKG8udGl0bGUpfTogJHtsKG8ud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIiwuLi5BcnJheS5pc0FycmF5KGUuZ3JvdXBzKSYmZS5ncm91cHMubGVuZ3RoPjE/W2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZWQgaW4gJHtsKChlLmN1cnJlbmNpZXM/P1tdKS5qb2luKCIgYW5kICIpKX0sIHNlcGFyYXRlbHkuIE5vdGhpbmcgaGVyZSBjb252ZXJ0cyBvbmUgaW50byB0aGUgb3RoZXI7IGVhY2ggaG90ZWwgaXMgYm9va2VkIGFuZCBwYWlkIGluIGl0cyBvd24uPC9kaXY+YCwuLi5lLmdyb3Vwcy5tYXAobz0+dnUobyxgVG90YWwgaW4gJHtvLmN1cnJlbmN5fWApKV06W3Z1KGUsIlRvdGFsIildLCc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLWJvb2siPlJlcXVlc3QgYm9va2luZzwvYnV0dG9uPjwvZGl2PicsYDxkaXYgY2xhc3M9Im5vdGUiPk5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLiBSZXF1ZXN0aW5nIGEgYm9va2luZyBhc2tzICR7bCh0dCl9IHRvIGhvbGQgdGhlIHJvb21zIGFuZCBnaXZlcyB5b3UgYSBjb25maXJtYXRpb24gY29kZS48L2Rpdj5gLG9oKCksUT8iIjpgPGRpdiBjbGFzcz0ibm90ZSI+QSAke2wodHQpfSBDaXJjbGUgbWVtYmVyPyA8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLXNpZ24taW4iPlNpZ24gaW4gZm9yIHRoZSBtZW1iZXIgcmF0ZTwvYnV0dG9uPi48L2Rpdj4ke3ZvKCl9YF0uam9pbigiIil9LEljPVt7aWQ6ImtpbmctYmVkIixsYWJlbDoiS2luZyBiZWQifSx7aWQ6InR3aW4tYmVkcyIsbGFiZWw6IlR3aW4gYmVkcyJ9LHtpZDoiaGlnaC1mbG9vciIsbGFiZWw6IkhpZ2ggZmxvb3IifSx7aWQ6Imxvdy1mbG9vciIsbGFiZWw6IkxvdyBmbG9vciJ9LHtpZDoicXVpZXQtcm9vbSIsbGFiZWw6IlF1aWV0IHJvb20ifSx7aWQ6ImNvbm5lY3Rpbmctcm9vbXMiLGxhYmVsOiJDb25uZWN0aW5nIHJvb21zIn0se2lkOiJlYXJseS1jaGVjay1pbiIsbGFiZWw6IkVhcmx5IGNoZWNrLWluIn0se2lkOiJsYXRlLWFycml2YWwiLGxhYmVsOiJMYXRlIGFycml2YWwifSx7aWQ6ImFjY2Vzc2libGUtcm9vbSIsbGFiZWw6IkFjY2Vzc2libGUgcm9vbSJ9XSxpXz17ImtpbmctYmVkIjoidHdpbi1iZWRzIiwidHdpbi1iZWRzIjoia2luZy1iZWQiLCJoaWdoLWZsb29yIjoibG93LWZsb29yIiwibG93LWZsb29yIjoiaGlnaC1mbG9vciJ9O2xldCBTZT1udWxsO2NvbnN0IG9oPShlPSExKT0+YAogIDxkaXYgY2xhc3M9ImZvcm0iIGlkPSJndWVzdCIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5HdWVzdCBuYW1lPGlucHV0IGlkPSJnbmFtZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBzaG91bGQgYXBwZWFyIG9uIHRoZSBib29raW5nIiB2YWx1ZT0iJHtsKFNlPy5uYW1lPz8iIil9Ij48L2xhYmVsPgogICAgICA8bGFiZWw+RW1haWw8aW5wdXQgaWQ9ImdtYWlsIiB0eXBlPSJlbWFpbCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJGb3IgdGhlIGNvbmZpcm1hdGlvbiIgdmFsdWU9IiR7bChTZT8uZW1haWw/PyIiKX0iPjwvbGFiZWw+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImFza3MiPgogICAgICA8ZGl2IGNsYXNzPSJhc2tzLXQiPkFzayB0aGUgZGVzayBmb3I8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2hpcHMiPiR7SWMubWFwKHQ9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIGFzayIgdHlwZT0iYnV0dG9uIiBkYXRhLWFzaz0iJHtsKHQuaWQpfSIgYXJpYS1wcmVzc2VkPSIkeyhTZT9TZS5yZXF1ZXN0czpRPy5wcmVmZXJlbmNlcz8/W10pLmluY2x1ZGVzKHQuaWQpPyJ0cnVlIjoiZmFsc2UifSI+JHtsKHQubGFiZWwpfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICAgIDxsYWJlbD5BcnJpdmluZyBhdDxpbnB1dCBpZD0iZ3RpbWUiIHR5cGU9InRpbWUiIGF1dG9jb21wbGV0ZT0ib2ZmIiB2YWx1ZT0iJHtsKFNlPy5hcnJpdmluZ0F0Pz8iIil9Ij48L2xhYmVsPgogICAgICAgIDxsYWJlbD5Bbnl0aGluZyBlbHNlPGlucHV0IGlkPSJnbm90ZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJJbiB5b3VyIG93biB3b3JkcyDigJQgb3B0aW9uYWwiIHZhbHVlPSIke2woU2U/Lm5vdGVzPz8iIil9Ij48L2xhYmVsPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+VGhlc2UgZ28gdG8gdGhlIGRlc2sgYXMgcmVxdWVzdHMuICR7bCh0dCl9IG1lZXRzIHdoYXQgaXQgY2FuIG9uIHRoZSBkYXk7IG5vbmUgb2YgaXQgaXMgaGVsZC48L2Rpdj4KICAgICAgJHtRP2A8bGFiZWwgY2xhc3M9InJlbWVtYmVyIj48aW5wdXQgaWQ9ImdyZW1lbWJlciIgdHlwZT0iY2hlY2tib3giJHtTZT8ucmVtZW1iZXI/IiBjaGVja2VkIjoiIn0+IFJlbWVtYmVyIHRoZSBiZWQsIGZsb29yIGFuZCByb29tIHJlcXVlc3RzIG9uIG15ICR7bChRLnByb2dyYW1tZT8/Im1lbWJlcnNoaXAiKX0gZm9yIG5leHQgdGltZTwvbGFiZWw+YDoiIn0KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2siPkhvbGQgdGhlc2Ugcm9vbXM8L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIGNhcmQgaXMgdGFrZW4gYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gWW91IHByZXNlbnQgYSBjYXJkIGF0IGNoZWNrLWluLjwvZGl2PgogIDwvZGl2PmAsYV89ZT0+W2A8ZGl2IGNsYXNzPSJlcnIiPlRoZSBib29raW5nIG5lZWRzICR7bCgoZS5taXNzaW5nPz9bXSkuam9pbigiIGFuZCAiKXx8ImEgbmFtZSBhbmQgYW4gZW1haWwiKX0uPC9kaXY+YCxvaCghMCksJzxkaXYgY2xhc3M9Im5vdGUiPk5vIGNhcmQgaXMgdGFrZW4gYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gWW91IHByZXNlbnQgYSBjYXJkIGF0IGNoZWNrLWluLjwvZGl2PiddLmpvaW4oIiIpLGNfPWU9Pntjb25zdCB0PWUubWVtYmVyPz97fTtyZXR1cm5bc2UoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke2wodC5wcm9ncmFtbWUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0id2hlcmUiPiR7bCh0Lm5hbWUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSIgc3R5bGU9ImZvbnQtc2l6ZToyMHB4Ij4ke2wodC50aWVyPy5uYW1lKX08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9IndoZW4iPiR7bChOdW1iZXIodC5wb2ludHM/PzApLnRvTG9jYWxlU3RyaW5nKCJlbi1HQiIpKX0gcG9pbnRzPC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0idW5wYWlkIj48Yj4ke2woTWF0aC5yb3VuZCgodC50aWVyPy5kaXNjb3VudD8/MCkqMTAwKSl9JSBvZmY8L2I+PHNwYW4+Um9vbSByYXRlcyBhbmQgdHJpcCB0b3RhbHMgbm93IHNob3cgdGhlICR7bCh0LnRpZXI/Lm5hbWUpfSBtZW1iZXIgcmF0ZS4gTm90aGluZyBpcyBjaGFyZ2VkIGJ5IHNpZ25pbmcgaW4uPC9zcGFuPjwvZGl2PmAsKHQucHJlZmVyZW5jZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImFza2VkIj4KICAgICAgICAgICA8Yj5TYXZlZCBmb3IgeW91ciBuZXh0IHN0YXlzPC9iPgogICAgICAgICAgIDxzcGFuPiR7bCh0LnByZWZlcmVuY2VzLm1hcChuPT5JYy5maW5kKG89Pm8uaWQ9PT1uKT8ubGFiZWw/P24pLmpvaW4oIiwgIikpfSAtIHRpY2tlZCBvbiB0aGUgYm9va2luZyBmb3JtLCBhbmQgYXNrZWQgZm9yIG9ubHkgd2hlbiB5b3UgYm9vayB3aXRoIHRoZW0uPC9zcGFuPgogICAgICAgICAgIDxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmb3JnZXQtcHJlZnMiPkZvcmdldCB0aGVtPC9idXR0b24+CiAgICAgICAgIDwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkZpbmQgYSBob3RlbDwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24tb3V0Ij5TaWduIG91dDwvYnV0dG9uPgogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSx1Xz0oKT0+Wyc8ZGl2IGNsYXNzPSJlcnIiPk5vIG1lbWJlcnNoaXAgbWF0Y2hlcyB0aGF0IG51bWJlciBhbmQgc3VybmFtZS4gQ2hlY2sgYm90aCBhcyB0aGV5IGFyZSBwcmludGVkIOKAlCBub3RoaW5nIGVsc2UgaXMgbmVlZGVkLCB0aGlzIGNvbm5lY3RvciBuZXZlciBhc2tzIGZvciBhIHBhc3N3b3JkLjwvZGl2Picsdm8oITApXS5qb2luKCIiKSx2bz0oZT0hMSk9PmAKICA8ZGl2IGNsYXNzPSJmb3JtIiBpZD0ic2lnbmluIiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPk1lbWJlcnNoaXAgbnVtYmVyPGlucHV0IGlkPSJtbnVtIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IGlzIHByaW50ZWQiPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5TdXJuYW1lPGlucHV0IGlkPSJtc3VyIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlRoZSBzdXJuYW1lIG9uIGl0Ij48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ic2lnbi1pbiI+U2lnbiBpbjwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibm90ZSI+Tm8gcGFzc3dvcmQgaXMgYXNrZWQgZm9yIGFuZCBub25lIGlzIHN0b3JlZC4gU2lnbmluZyBpbiBzaG93cyB0aGUgbWVtYmVyIHJhdGU7IG5vdGhpbmcgaXMgY2hhcmdlZC48L2Rpdj4KICA8L2Rpdj5gLGxfPWU9Pntjb25zdCB0PWUucmVxdWVzdGVkPz9bXTtyZXR1cm4gdC5sZW5ndGg/YDxkaXYgY2xhc3M9ImFza2VkJHtlLmFjY2Vzc2liaWxpdHk/IiBmbGFnIjoiIn0iPgogICAgPGI+UmVxdWVzdGVkLCBub3QgaGVsZDwvYj4KICAgICR7dC5tYXAobj0+YDxzcGFuPiR7bChuKX08L3NwYW4+YCkuam9pbigiIil9CiAgPC9kaXY+YDoiIn0sYnU9ZT0+U3RyaW5nKGUuaG9sZFVudGlsPz8iIikuc2xpY2UoMCwxNikucmVwbGFjZSgiVCIsIiAiKSxkXz1lPT57Y29uc3QgdD1BcnJheS5pc0FycmF5KGUuYm9va2luZ3MpJiZlLmJvb2tpbmdzLmxlbmd0aD9lLmJvb2tpbmdzOltlLmJvb2tpbmc/P3t9XSxuPXQubGVuZ3RoPjEsbz0ocixzLGkpPT5bYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj5Db25maXJtYXRpb24gY29kZTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2woci5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0id2hlcmUiPiR7bChyLmhvdGVsTmFtZSl9PC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9IndoZW4iPiR7bChEZShyLnN0YXkpKX0gwrcgJHtsKHIuZ3Vlc3Q/Lm5hbWU/PyIiKX08L2Rpdj4KICAgICAgIDwvZGl2PmAsbj9gPGRpdiBjbGFzcz0ibm90ZSI+SGVsZCB1bnRpbCAke2woYnUocikpfSBVVEMuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibW9uZXktb3V0Ij48c3Bhbj5Ub3RhbCBmb3IgdGhlIHN0YXk8L3NwYW4+PHNwYW4+JHtsKHMpfTwvc3Bhbj48L2Rpdj5gLGxfKGkpLGA8ZGl2IGNsYXNzPSJyb3dzIj4keyhyLnF1b3RlPy5saW5lcz8/W10pLm1hcChmXykuam9pbigiIil9PC9kaXY+YCxuP2A8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7bChyLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7bChyLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsICR7bChyLmhvdGVsTmFtZSl9PC9idXR0b24+CiAgICAgICAgICAgPC9kaXY+YDoiIl0uam9pbigiIik7cmV0dXJuW3NlKCksbj9gPGRpdiBjbGFzcz0ibm90ZSI+JHt0Lmxlbmd0aH0gYm9va2luZ3MsIG9uZSBmb3IgZWFjaCBzdGF5LiBFYWNoIGhvdGVsIGhvbGRzIGl0cyBvd24gbmlnaHRzIHVuZGVyIGl0cyBvd24gY29kZSwgYW5kIGVhY2ggaXMgY2hhbmdlZCBvciBjYW5jZWxsZWQgb24gaXRzIG93bi48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJ1bnBhaWQiPgogICAgICAgPGI+Tm90aGluZyBoYXMgYmVlbiBjaGFyZ2VkLjwvYj4KICAgICAgIDxzcGFuPiR7bj8iVGhlIHJvb21zIGFyZSBoZWxkIHVudGlsIHRoZSB0aW1lIHVuZGVyIGVhY2ggY29kZS4iOmBUaGUgcm9vbXMgYXJlIGhlbGQgdW50aWwgJHtsKGJ1KHRbMF0pKX0gVVRDLmB9IEEgY2FyZCBpcyBwcmVzZW50ZWQgYXQgY2hlY2staW4sIG5vdCBoZXJlLjwvc3Bhbj4KICAgICA8L2Rpdj5gLC4uLnQubWFwKHI9Pm4/byhyLFN0cmluZyhyLnRvdGFsPz8iIikscik6byhyLFN0cmluZyhlLnRvdGFsPz8iIiksZSkpLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgICR7bj8iIjpgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHtsKHRbMF0/LmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke2wodFswXT8uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhpcyBib29raW5nPC9idXR0b24+YH0KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0scF89ZT0+W2A8ZGl2IGNsYXNzPSJlcnIiPiR7bChlLmRldGFpbD8/ZS53aHk/PyJUaGF0IGNvdWxkIG5vdCBiZSBkb25lLiIpfTwvZGl2PmAsRHQ+MD8nPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InRyaXAiPlZpZXcgdGhlIHRyaXA8L2J1dHRvbj48L2Rpdj4nOiIiXS5qb2luKCIiKSxmXz1lPT5gCiAgPGRpdiBjbGFzcz0icm93Ij4KICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2woZS50aXRsZSl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7bChlLmtpbmQ9PT0icm9vbSI/RGUoZS5zdGF5KTplLmRldGFpbD8/IiIpfTwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHtsKGUudG90YWwpfTwvZGl2PjwvZGl2PgogIDwvZGl2PmAsaF89e3JlcXVlc3RlZDoid2FybiIsY29uZmlybWVkOiJnb29kIixjYW5jZWxsZWQ6ImJhZCIsZXhwaXJlZDoiYmFkIn0sbV89ZT0+e2NvbnN0IHQ9ZS5yZXF1ZXN0cz8ua2luZHM/P1tdO2lmKCF0Lmxlbmd0aClyZXR1cm4iIjtjb25zdCBuPXQubWFwKG89PkljLmZpbmQocj0+ci5pZD09PW8pPy5sYWJlbD8/byk7cmV0dXJuYDxkaXYgY2xhc3M9Im1ldGEgYXNrZWQtbGluZSI+QXNrZWQgZm9yICR7bChuLmpvaW4oIiwgIikudG9Mb3dlckNhc2UoKSl9PC9kaXY+YH0sZ189ZT0+e2NvbnN0IHQ9ZS5ib29raW5ncz8/W107cmV0dXJuIHQubGVuZ3RoPT09MD8nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmdzIGluIHRoaXMgY29udmVyc2F0aW9uIHlldC48L2Rpdj4nOltzZSgpLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QubWFwKG49PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7bChuLmhvdGVsTmFtZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2wobi5jb25maXJtYXRpb25Db2RlKX0gwrcgJHtsKERlKG4uc3RheSkpfTwvZGl2PgogICAgICAgICAgJHttXyhuKX0KICAgICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+PHNwYW4gY2xhc3M9ImJhZGdlICR7aF9bU3RyaW5nKG4uc3RhdHVzKV0/PyIifSI+JHtsKG4uc3RhdHVzKX08L3NwYW4+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPjxkaXYgY2xhc3M9InAtdG90YWwiPiR7bChuLnF1b3RlPy50b3RhbD8/IiIpfTwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtuLnN0YXR1cz09PSJyZXF1ZXN0ZWQifHxuLnN0YXR1cz09PSJjb25maXJtZWQiP2A8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWJvb2tpbmctZXh0cmFzPSIke2wobi5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj4KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7bChuLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsPC9idXR0b24+YDoiIn08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIil9LHl1PWU9Pntjb25zdCB0PWUudmlldz09PSJjYW5jZWxsZWQiLG49ZS5ib29raW5nPz97fTtyZXR1cm5bYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0PyJDYW5jZWxsZWQiOiJDYW5jZWxsaW5nIn08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7bChuLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InN1bXMiPgogICAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke3Q/IlRoZSBob3RlbCBjaGFyZ2VzIjoiQ2FuY2VsbGluZyB3b3VsZCBjb3N0In08L3NwYW4+PHNwYW4+JHtsKGUuZmVlKX08L3NwYW4+PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ibm90ZSI+JHtsKGUucnVsZSl9PC9kaXY+YCx0PyIiOmUuY2FuY2VsbGFibGU/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5LZWVwIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBkYW5nZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jb25maXJtLWNhbmNlbD0iJHtsKG4uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhlIGJvb2tpbmc8L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOic8ZGl2IGNsYXNzPSJub3RlIj5UaGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gY2FuY2VsIG9uIHRoaXMgYm9va2luZy48L2Rpdj4nXS5qb2luKCIiKX0sX3U9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNoYW5nZWQiLG49ZS5ib29raW5nPz97fSxvPShyLHMsaSk9PnM/YDxkaXYgY2xhc3M9ImxlZyR7aT8iIHdhcyI6IiJ9Ij4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdrIj4ke2wocil9PC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVndiI+JHtsKHMuY2hlY2tJbil9IOKGkiAke2wocy5jaGVja091dCl9IMK3ICR7bChzLm5pZ2h0cyl9ICR7TnVtYmVyKHMubmlnaHRzKT09PTE/Im5pZ2h0IjoibmlnaHRzIn08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdtIj4ke2wocy5yb29tTmFtZSl9JHtOdW1iZXIocy5yb29tcyk+MT9gIMK3ICR7bChzLnJvb21zKX0gcm9vbXNgOiIifSDCtyAke2wocy50b3RhbCl9PC9kaXY+CiAgICAgICAgIDwvZGl2PmA6IiI7cmV0dXJuW3NlKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0PyJDaGFuZ2VkIjoiQ2hhbmdpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtsKG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxlLmhvdGVsTmFtZT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtsKGUuaG90ZWxOYW1lKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJsZWdzIj4ke28odD8iV2FzIjoiTm93IixlLmZyb20sITApfSR7byh0PyJOb3ciOiJXb3VsZCBiZSIsZS50bywhMSl9PC9kaXY+YCxlLmFkZE9uP2A8ZGl2IGNsYXNzPSJzdW1zIj48ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPiR7bChlLmFkZE9uLm5hbWUpfTwvc3Bhbj48c3Bhbj4ke2woZS5hZGRPbi5mcm9tKX0g4oaSICR7bChlLmFkZE9uLnRvKX08L3NwYW4+PC9kaXY+PC9kaXY+YDoiIixlLmRpZmZlcmVuY2U/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+JHtlLnJlZnVuZER1ZT90PyJUaGUgZGVzayBvd2VzIjoiV291bGQgY29tZSBiYWNrIjp0PyJUaGUgZGVzayBhc2tzIGZvciI6IldvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke2woZS5kaWZmZXJlbmNlKX08L3NwYW4+PC9kaXY+PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibm90ZSI+JHtsKGUucnVsZSl9PC9kaXY+YCx0Pyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+PC9kaXY+JzplLmNoYW5nZWFibGU/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5MZWF2ZSBpdDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1jb25maXJtLWNoYW5nZT0iJHtsKG4uY29uZmlybWF0aW9uQ29kZSl9Ij4ke2UuYWRkT24mJmUuZnJvbT8uY2hlY2tJbj09PWUudG8/LmNoZWNrSW4mJmUuZnJvbT8uY2hlY2tPdXQ9PT1lLnRvPy5jaGVja091dD8iVXBkYXRlIHRoZSBib29raW5nIjoiTW92ZSB0aGUgYm9va2luZyJ9PC9idXR0b24+CiAgICAgICAgICAgPC9kaXY+YDoiIl0uam9pbigiIil9LEpyPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS52aWV3PT09InBvbGljeSI/YDxoND4ke2woZS50aXRsZSl9PC9oND4ke2woZS50ZXh0KX1gOihlLnRvcGljcz8/W10pLm1hcChvPT5gPGg0PiR7bChvLnRpdGxlKX08L2g0PiR7bChvLnRleHQpfWApLmpvaW4oIiIpO3JldHVybltgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7bCh0Lm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPldoYXQgdGhlIGhvdGVsIHB1Ymxpc2hlczwvZGl2PjwvZGl2PmAsZS52aWV3PT09InBvbGljeS1taXNzaW5nIj9gPGRpdiBjbGFzcz0iZW1wdHkiPiR7bCh0Lm5hbWUpfSBkb2VzIG5vdCBwdWJsaXNoIGFueXRoaW5nIGFib3V0IHRoYXQgaGVyZS48L2Rpdj5gOmA8ZGl2IGNsYXNzPSJwcm9zZSI+JHtufTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7bCh0LmlkKX0iPkJhY2sgdG8gJHtsKHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LHZfPWU9Pntjb25zdCB0PWUuY29sdW1ucz8/W10sbj1lLnJvd0xhYmVscz8/W10sbz1yPT5gCiAgICA8ZGl2IGNsYXNzPSJjbXAtaGVhZCR7ci5yZWNvbW1lbmRlZD8iIHBpY2siOiIifSI+CiAgICAgICR7ci5yZWNvbW1lbmRlZD8nPGRpdiBjbGFzcz0icGlja21hcmsiPlJlY29tbWVuZGVkPC9kaXY+JzoiIn0KICAgICAgPGJ1dHRvbiBjbGFzcz0idC1zaG90IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7bChyLmhvdGVsLmlkKX0iIHN0eWxlPSIke0puKFN0cmluZyhyLmhvdGVsLmlkKSl9Ij4KICAgICAgICAke3IuaG90ZWwuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2woci5ob3RlbC5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2woS24oU3RyaW5nKHIuaG90ZWwubmFtZSkpKX08L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8ZGl2IGNsYXNzPSJjb2wtYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLW5hbWUiPiR7bChyLmhvdGVsLm5hbWUpfTwvZGl2PgogICAgICAgICR7ci5wcmljZT9gPGRpdiBjbGFzcz0iY29sLXByaWNlIj4ke2woci5wcmljZS5zdGF5VG90YWwpfTxzbWFsbD4gdG90YWwgwrcgJHtsKHIucHJpY2UubmlnaHRseSl9L25pZ2h0PC9zbWFsbD48L2Rpdj5gOnIuZnJvbT9gPGRpdiBjbGFzcz0iY29sLXByaWNlIj4ke2woci5mcm9tKX08c21hbGw+IC8gbmlnaHQgZnJvbTwvc21hbGw+PC9kaXY+YDoiIn0KICAgICAgICAke3IuYmVzdEZvcj9gPGRpdiBjbGFzcz0id2h5Ij4ke2woci5iZXN0Rm9yKX08L2Rpdj5gOiIifQogICAgICAgICR7KHIucHJvcz8/W10pLmxlbmd0aHx8KHIuY29ucz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0icGMiPiR7Wy4uLihyLnByb3M/P1tdKS5tYXAocz0+YDxkaXYgY2xhc3M9InBybyI+PHNwYW4gY2xhc3M9Im0iPis8L3NwYW4+PHNwYW4+JHtsKHMpfTwvc3Bhbj48L2Rpdj5gKSwuLi4oci5jb25zPz9bXSkubWFwKHM9PmA8ZGl2IGNsYXNzPSJjb24iPjxzcGFuIGNsYXNzPSJtIj7iiJI8L3NwYW4+PHNwYW4+JHtsKHMpfTwvc3Bhbj48L2Rpdj5gKV0uam9pbigiIil9PC9kaXY+YDoiIn0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gO3JldHVybltzZSgpLGUudGl0bGU/YDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtsKGUudGl0bGUpfTwvZGl2PmA6IiIsZS5zdGF5P2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2woRGUoZS5zdGF5KSl9PC9kaXY+YDoiIixBcnJheS5pc0FycmF5KGUuY3VycmVuY2llcykmJmUuY3VycmVuY2llcy5sZW5ndGg+MT9gPGRpdiBjbGFzcz0ibm90ZSI+UHJpY2VzIGFyZSBpbiBlYWNoIGhvdGVsJ3Mgb3duIGN1cnJlbmN5ICgke2woZS5jdXJyZW5jaWVzLmpvaW4oIiwgIikpfSkuIFRoZXkgYXJlIG5vdCBjb252ZXJ0ZWQsIHNvIHRoZSBjb2x1bW5zIGFyZSBub3QgYSBwcmljZSByYW5raW5nLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImNtcC13cmFwIj48ZGl2IGNsYXNzPSJjbXAiIHN0eWxlPSItLWNvbHM6JHt0Lmxlbmd0aH0iPgogICAgICAgPGRpdiBjbGFzcz0iY21wLWNvcm5lciI+PC9kaXY+CiAgICAgICAke3QubWFwKG8pLmpvaW4oIiIpfQogICAgICAgJHtuLm1hcCgocixzKT0+YDxkaXYgY2xhc3M9ImsiPiR7bChyKX08L2Rpdj4ke3QubWFwKGk9PmA8ZGl2IGNsYXNzPSJ2JHtzJTI/IiBhbHQiOiIifSI+JHtsKGkucm93cz8uW3NdPy52YWx1ZT8/IuKAlCIpfTwvZGl2PmApLmpvaW4oIiIpfWApLmpvaW4oIiIpfQogICAgIDwvZGl2PjwvZGl2PmAsKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAocj0+YCR7bChyLm5hbWUpfTogJHtsKHIud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibm90ZSI+T3BlbiBhICR7bChlLnZvY2FiPy5ub3VuPz8iaG90ZWwiKX0gdG8gc2VlIGl0cyByb29tcyR7ZS5zdGF5Py5jaGVja0luPyIgZm9yIHRoZXNlIG5pZ2h0cyI6IiJ9LjwvZGl2PmBdLmpvaW4oIiIpfSxiXz1lPT57Y29uc3QgdD1lLmRheXM/P1tdO3JldHVybltzZSgpLGA8ZGl2PgogICAgICAgPGRpdiBjbGFzcz0iaC1uYW1lIj4ke2woZS50aXRsZSl9PC9kaXY+CiAgICAgICAke2Uuc3RheT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtsKERlKGUuc3RheSkpfTwvZGl2PmA6IiJ9CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0iZ2FwIj48Yj4ke2woTnVtYmVyKGUuaW5UcmlwPz8wKStOdW1iZXIoZS5ib29rZWQ/PzApKX0vJHtsKGUucGxhbm5lZCl9PC9iPjxzcGFuPiR7bChlLmdhcD8/IiIpfTwvc3Bhbj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJkYXlzIj4ke3QubWFwKChuLG8pPT5gCiAgICAgIDxkaXYgY2xhc3M9ImRheXJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5bnVtIj48Yj4ke28rMX08L2I+PGk+PC9pPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRheWJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGF5bGFiZWwiPiR7bChuLmxhYmVsKX0ke24uZGF0ZT9gPHNtYWxsPiDCtyAke2woU3RyaW5nKG4uZGF0ZSkuc2xpY2UoNSkpfTwvc21hbGw+YDoiIn08L2Rpdj4KICAgICAgICAgICR7bi5ub3RlP2A8ZGl2IGNsYXNzPSJkYXlub3RlIj4ke2wobi5ub3RlKX08L2Rpdj5gOiIifQogICAgICAgICAgJHsobi5pdGVtcz8/W10pLm1hcChyPT5gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYW4taXRlbSIke3Iua2luZD09PSJob3RlbCI/YCBkYXRhLWhvdGVsPSIke2woci5pZCl9IiByb2xlPSJidXR0b24iIHRhYmluZGV4PSIwIiR7ci5jaGVja0luP2AgZGF0YS1jaT0iJHtsKHIuY2hlY2tJbil9IiBkYXRhLWNvPSIke2woci5jaGVja091dCl9ImA6IiJ9YDoiIn0+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7bChyLm5hbWUpfTwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtsKFtyLmRldGFpbCxyLm5pZ2h0cz9OdW1iZXIoci5uaWdodD8/MSk+MT9gbmlnaHQgJHtyLm5pZ2h0fSBvZiAke3IubmlnaHRzfWA6YCR7ci5uaWdodHN9ICR7ci5uaWdodHM9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9IGhlcmVgOiIiLHIucHJpY2VdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbnN0YXRlICR7ci5ib29rZWR8fHIuaW5UcmlwPyJ5ZXMiOiJubyJ9Ij4ke3IuYm9va2VkP2BCb29rZWQgwrcgJHtsKHIuYm9va2VkKX1gOnIuaW5UcmlwPyJJbiB0aGUgdHJpcCI6IlBsYW4gb25seSJ9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj5gKS5qb2luKCIiKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChuPT5gJHtsKG4ubmFtZSl9OiAke2wobi53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sZXQ9ZT0+e2lmKCFlfHx0eXBlb2YgZSE9Im9iamVjdCIpcmV0dXJuO2UudG9vbE5hbWVzJiYoUWY9ZS50b29sTmFtZXMpLGUuYnJhbmQmJih0dD1TdHJpbmcoZS5icmFuZCkpLGUubG9nb1VybCYmKFZyPVN0cmluZyhlLmxvZ29VcmwpKSx0eXBlb2YgZS5kZW1vPT0iYm9vbGVhbiImJihZZj1lLmRlbW8pLGUuZGVtb05vdGUmJihYZj1TdHJpbmcoZS5kZW1vTm90ZSkpLHR5cGVvZiBlLnJvb21zX3dhbnRlZD09Im51bWJlciImJihfZT1lLnJvb21zX3dhbnRlZCksZS52aWV3PT09Im1lbWJlciImJmUubWVtYmVyPy50aWVyPy5uYW1lP1E9ZS5tZW1iZXI6ZS5tZW1iZXI/LnRpZXI/Lm5hbWUmJihRPVE/LnByb2dyYW1tZT09PWUubWVtYmVyLnByb2dyYW1tZSYmUT8udGllcj8ubmFtZT09PWUubWVtYmVyLnRpZXIubmFtZT97Li4uUSwuLi5lLm1lbWJlcn06ZS5tZW1iZXIpLChlLnZpZXc9PT0ic2lnbmVkLW91dCJ8fGUuc2lnbmVkSW49PT0hMSkmJihRPW51bGwpLGUuc3RheT8uY2hlY2tJbiYmIVp0JiYoQT17Y2hlY2tJbjplLnN0YXkuY2hlY2tJbixjaGVja091dDplLnN0YXkuY2hlY2tPdXQsZ3Vlc3RzOmUuc3RheS5ndWVzdHM/PzJ9KSwhemMmJihlLnZpZXc9PT0idHJpcCJ8fGUudmlldz09PSJuZWVkcy1kYXRlcyIpJiYodXQ9ZS5saW5lcz8/W10pLChlLnZpZXc9PT0iYm9va2luZyJ8fGUudmlldz09PSJlbXB0eS10cmlwIikmJih1dD1bXSxEdD0wKSxIZT1TdHJpbmcoZS52aWV3Pz8iIiksRnkoKTtjb25zdCB0PWNlKCJicmFuZCIpO1ZyPyh0LnNyYz1Wcix0LmhpZGRlbj0hMSxjZSgidGl0bGUiKS5oaWRkZW49ITApOih0LmhpZGRlbj0hMCxjZSgidGl0bGUiKS5oaWRkZW49ITEsY2UoInRpdGxlIikudGV4dENvbnRlbnQ9dHR8fCJIb3RlbHMiKSxjZSgic3ViIikudGV4dENvbnRlbnQ9a18oZSksJF8oKSx3XygpO2NvbnN0IG49e2hvdGVsczpYeSwibm8taG90ZWxzIjplXyxob3RlbDpndSwibm8tcm9vbXMiOmd1LCJob3RlbC1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoYXQgaG90ZWwgaXMgbm90IGluIHRoaXMgY29ubmVjdG9yLjwvZGl2PicsZXh0cmFzOm9fLHRyaXA6c18sIm5lZWRzLWRhdGVzIjpfXyxib29raW5nOmRfLCJuZWVkcy1ndWVzdCI6YV8sbWVtYmVyOmNfLCJtZW1iZXItbm90LWZvdW5kIjp1Xywic2lnbmVkLW91dCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+U2lnbmVkIG91dC4gUmF0ZXMgYXJlIHRoZSBwdWJsaWMgb25lcyBhZ2Fpbi48L2Rpdj48ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+PC9kaXY+JywiZW1wdHktdHJpcCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlcmUgaXMgbm90aGluZyBpbiB0aGUgdHJpcCB5ZXQuPC9kaXY+Jyxib29raW5nczpnXywiY2FuY2VsbGF0aW9uLXByZXZpZXciOnl1LGNhbmNlbGxlZDp5dSwiY2hhbmdlLXByZXZpZXciOl91LGNoYW5nZWQ6X3UsImJvb2tpbmctbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5nIGhlcmUgbWF0Y2hlcyB0aGF0IGNvZGUuPC9kaXY+Jyxjb21wYXJpc29uOnZfLCJub3RoaW5nLXRvLWNvbXBhcmUiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vbmUgb2YgdGhvc2UgYXJlIGhvdGVscyB0aGlzIGNvbm5lY3RvciBrbm93cy48L2Rpdj4nLGl0aW5lcmFyeTpiXywiZW1wdHktaXRpbmVyYXJ5IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5BbiBpdGluZXJhcnkgbmVlZHMgYXQgbGVhc3Qgb25lIGRheS48L2Rpdj4nLHBvbGljeTpKcixwb2xpY2llczpKciwicG9saWN5LW1pc3NpbmciOkpyLGVycm9yOnBfLCJuby1tZW1iZXIiOigpPT5gPGRpdiBjbGFzcz0iZW1wdHkiPk5vYm9keSBpcyBzaWduZWQgaW4sIHNvIHRoZXJlIGlzIG5vdGhpbmcgc2F2ZWQgdG8gZm9yZ2V0LjwvZGl2PiR7dm8oITApfWAsIm1lbWJlci1zaWduLWluIjooKT0+W3NlKCksJzxkaXYgY2xhc3M9Im5vdGUiPlNpZ24gaW4gd2l0aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIHByaW50ZWQgb24gdGhlIGNhcmQgdG8gc2VlIHRoZSBtZW1iZXIgcmF0ZSBvbiBldmVyeSBwcmljZSBoZXJlLjwvZGl2Picsdm8oITApXS5qb2luKCIiKX07KEhlPT09ImhvdGVsInx8SGU9PT0ibm8tcm9vbXMifHxIZT09PSJuZWVkcy1kYXRlcyIpJiZlLmhvdGVsPy5pZD8oQXQ9U3RyaW5nKGUuaG90ZWwuaWQpLGUubmVlZHNEYXRlcyYmc2V0VGltZW91dCgoKT0+cXIoKSwwKSk6KEF0PSIiLFBjKCkpLHdlPWU7Y29uc3Qgbz1uW0hlXTtjZSgiY29udGVudCIpLmlubmVySFRNTD0obz9vKGUpOmA8ZGl2IGNsYXNzPSJlcnIiPiR7bChlLmVycm9yPz8iU29tZXRoaW5nIGNhbWUgYmFjayB0aGF0IHRoaXMgY2FyZCBkb2VzIG5vdCBrbm93IGhvdyB0byBkcmF3LiIpfSR7ZS5kZXRhaWw/YDxicj4ke2woZS5kZXRhaWwpfWA6IiJ9PC9kaXY+YCkreV8oZSl9LHlfPWU9PkFycmF5LmlzQXJyYXkoZS5zdWdnZXN0aW9ucykmJmUuc3VnZ2VzdGlvbnMubGVuZ3RoJiZPZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/Lm1lc3NhZ2U/YDxkaXYgY2xhc3M9InN1Z2dlc3QiPiR7ZS5zdWdnZXN0aW9ucy5tYXAodD0+YDxidXR0b24gY2xhc3M9ImNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1zYXk9IiR7bCh0KX0iPiR7bCh0KX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiLF9fPWU9PltzZSgpLGUuaG90ZWw/bmgoZS5ob3RlbCk6IiIsYDxkaXYgY2xhc3M9ImVyciI+JHtsKGUud2h5Pz8iV2hpY2ggbmlnaHRzPyBBIHJvb20gbmVlZHMgYSBjaGVjay1pbiBhbmQgYSBjaGVjay1vdXQgZGF0ZS4iKX08L2Rpdj5gLHRoKFN0cmluZyhlLmhvdGVsPy5pZD8/IiIpLGUuaG90ZWw/LnRvZGF5VGhlcmUpXS5qb2luKCIiKSxrXz1lPT5lLnZpZXc9PT0iaG90ZWxzIj9gJHtlLnRvdGFsPz8wfSAke051bWJlcihlLnRvdGFsKT09PTE/ImhvdGVsIjoiaG90ZWxzIn1gOmUudmlldz09PSJob3RlbCJ8fGUudmlldz09PSJuby1yb29tcyI/RGUoZS5zdGF5KTplLnZpZXc9PT0idHJpcCI/KGUubGluZXM/P1tdKS5sZW5ndGg/U3RyaW5nKGUudG90YWw/PyIiKToiIjplLnZpZXc9PT0iY29tcGFyaXNvbiI/YCR7KGUuY29sdW1ucz8/W10pLmxlbmd0aH0gc2lkZSBieSBzaWRlYDplLnZpZXc9PT0iaXRpbmVyYXJ5Ij9OdW1iZXIoZS5ib29rZWQpPjA/YCR7ZS5ib29rZWR9LyR7ZS5wbGFubmVkfSBib29rZWRgOmAke2UuaW5UcmlwfS8ke2UucGxhbm5lZH0gaW4gdGhlIHRyaXBgOmUudmlldz09PSJib29raW5ncyI/YCR7ZS5jb3VudD8/MH0gYm9va2luZyR7TnVtYmVyKGUuY291bnQpPT09MT8iIjoicyJ9YDoiIix3Xz0oKT0+e2NvbnN0IGU9Y2UoIm1lbWJlcmNoaXAiKTtRPyhlLmhpZGRlbj0hMSxlLnRleHRDb250ZW50PWAke1EudGllcj8ubmFtZT8/Ik1lbWJlciJ9IMK3ICR7TWF0aC5yb3VuZCgoUS50aWVyPy5kaXNjb3VudD8/MCkqMTAwKX0lIG9mZmAsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwibWVtYmVyIiksZS5zZXRBdHRyaWJ1dGUoInRpdGxlIixgJHtRLm5hbWV9IMK3ICR7US5wcm9ncmFtbWV9YCkpOihlLmhpZGRlbj1IZT09PSJtZW1iZXItbm90LWZvdW5kIixlLnRleHRDb250ZW50PSJNZW1iZXIgc2lnbiBpbiIsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwiYXNrLXNpZ24taW4iKSxlLnJlbW92ZUF0dHJpYnV0ZSgidGl0bGUiKSl9LCRfPSgpPT57Y29uc3QgZT1jZSgiaGVhZHRyaXAiKSx0PXpjP0R0OkR0fHx1dC5sZW5ndGg7ZS5oaWRkZW49dD09PTB8fEhlPT09InRyaXAiLGNlKCJoZWFkdHJpcG4iKS50ZXh0Q29udGVudD1TdHJpbmcodCl9LFNfPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1Iik7QT17Y2hlY2tJbjplPy52YWx1ZT8/QS5jaGVja0luLGNoZWNrT3V0OnQ/LnZhbHVlPz9BLmNoZWNrT3V0LGd1ZXN0czpOdW1iZXIobj8udmFsdWU/P0EuZ3Vlc3RzKXx8Mn19LG9vPShlPXt9KT0+QS5jaGVja0luJiZBLmNoZWNrT3V0P3tjaGVja0luOkEuY2hlY2tJbixjaGVja091dDpBLmNoZWNrT3V0LGd1ZXN0czpBLmd1ZXN0cywuLi5lfTplO2xldCBkcyxadD0hMTtjb25zdCBQYz0oKT0+e2NsZWFyVGltZW91dChkcyksWnQ9ITF9LHFyPShlPTApPT57QXQmJihjbGVhclRpbWVvdXQoZHMpLFp0PSEwLGRzPXNldFRpbWVvdXQoKCk9PntpZighQXQpe1p0PSExO3JldHVybn1pZihNcil7cXIoMTUwKTtyZXR1cm59WnQ9ITEsSigiZ2V0SG90ZWwiLHtob3RlbDpBdCxyb29tczpfZSwuLi5vbygpfSkuY2F0Y2goKCk9PlYoIkNvdWxkIG5vdCBsb2FkIHRob3NlIG5pZ2h0cy4iKSl9LGUpKX0sVj1lPT57Y2UoImNvbnRlbnQiKS5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLGA8ZGl2IGNsYXNzPSJlcnIiPiR7bChlKX08L2Rpdj5gKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGU9Pntjb25zdCB0PWUudGFyZ2V0Py5jbG9zZXN0KCJbZGF0YS1ob3RlbF0sW2RhdGEtYWN0XSxbZGF0YS1wb2xpY3ldLFtkYXRhLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jYW5jZWxdLFtkYXRhLWNvbmZpcm0tY2hhbmdlXSxbZGF0YS1leHRyYXNdLFtkYXRhLXJvb21zLW5dLFtkYXRhLWFza10sW2RhdGEtYm9va2luZy1leHRyYXNdLFtkYXRhLWJvb2tpbmctZXh0cmFdLFtkYXRhLXNheV0iKTtpZighdClyZXR1cm47Y29uc3Qgbj10LmdldEF0dHJpYnV0ZSgiZGF0YS1hc2siKTtpZihuIT09bnVsbCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0idHJ1ZSI7dC5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsU3RyaW5nKGspKTtjb25zdCBTPWlfW25dO2smJlMmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5hc2tbZGF0YS1hc2s9IiR7U30iXWApPy5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsImZhbHNlIik7cmV0dXJufWNvbnN0IG89dC5nZXRBdHRyaWJ1dGUoImRhdGEtcm9vbXMtbiIpO2lmKG8hPT1udWxsKXtTXygpLF9lPU1hdGgubWluKHF5LE1hdGgubWF4KDEsX2UrTnVtYmVyKG8pKSk7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm4iKTtrJiYoay50ZXh0Q29udGVudD1TdHJpbmcoX2UpKTtjb25zdCBTPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuaWdodHMiKTtTJiYoUy50ZXh0Q29udGVudD1UYygpKSxxcig0NTApO3JldHVybn1jb25zdCByPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1yb29tIik7aWYociE9PW51bGwpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsUz1OdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKSxUPXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/e2NoZWNrSW46dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2kiKT8/IiIsY2hlY2tPdXQ6dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKT8/IiIsZ3Vlc3RzOk51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1ndSIpPz8yKX06b28oKTtKKCJhZGRUb1RyaXAiLHtob3RlbDprLHJvb206cixyb29tczpTLC4uLlR9KS5jYXRjaCgoKT0+VigiQ291bGQgbm90IGNoYW5nZSB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IHM9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWRkLWV4dHJhIik7aWYocyE9PW51bGwpe0ooImFkZFRvVHJpcCIse2hvdGVsOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLGV4dHJhOnMscXVhbnRpdHk6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSl9KS5jYXRjaCgoKT0+VigiQ291bGQgbm90IGNoYW5nZSB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IGk9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYm9va2luZy1leHRyYXMiKTtpZihpIT09bnVsbCl7SigibGlzdEV4dHJhcyIse2Jvb2tpbmc6aX0pLmNhdGNoKCgpPT5WKCJDb3VsZCBub3QgbG9hZCB0aGUgYWRkLW9ucy4iKSk7cmV0dXJufWNvbnN0IGE9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYm9va2luZy1leHRyYSIpO2lmKGEhPT1udWxsKXtKKCJwcmV2aWV3Q2hhbmdlIix7Ym9va2luZzp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nIik/PyIiLGV4dHJhOmEscXVhbnRpdHk6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSl9KS5jYXRjaCgoKT0+VigiQ291bGQgbm90IHdvcmsgb3V0IHRoYXQgY2hhbmdlLiIpKTtyZXR1cm59Y29uc3QgYz10LmdldEF0dHJpYnV0ZSgiZGF0YS1leHRyYXMiKTtpZihjIT09bnVsbCl7SigibGlzdEV4dHJhcyIse2hvdGVsOmMsLi4ub28oKX0pLmNhdGNoKCgpPT5WKCJDb3VsZCBub3QgbG9hZCB0aGUgYWRkLW9ucy4iKSk7cmV0dXJufWNvbnN0IHU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcG9saWN5Iik7aWYodSE9PW51bGwpe0ooInBvbGljaWVzIix7aG90ZWw6dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsdG9waWM6dX0pLmNhdGNoKCgpPT5WKCJDb3VsZCBub3QgbG9hZCB0aGF0IHBvbGljeS4iKSk7cmV0dXJufWNvbnN0IGQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2FuY2VsIik7aWYoZCE9PW51bGwpe0ooInByZXZpZXdDYW5jZWxsYXRpb24iLHtib29raW5nOmR9KS5jYXRjaCgoKT0+VigiQ291bGQgbm90IHdvcmsgb3V0IHRoZSBmZWUuIikpO3JldHVybn1jb25zdCBtPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2FuY2VsIik7aWYobSE9PW51bGwpe0ooImNhbmNlbEJvb2tpbmciLHtib29raW5nOm0sY29uZmlybWVkOiEwfSkuY2F0Y2goKCk9PlYoIkNvdWxkIG5vdCBjYW5jZWwgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3Qgdj10LmdldEF0dHJpYnV0ZSgiZGF0YS1jb25maXJtLWNoYW5nZSIpO2lmKHYhPT1udWxsKXtjb25zdCBrPXdlPy50bz8/e30sUz13ZT8uZnJvbT8/e30sVD13ZT8uYWRkT24sTD1rLmNoZWNrSW4mJihrLmNoZWNrSW4hPT1TLmNoZWNrSW58fGsuY2hlY2tPdXQhPT1TLmNoZWNrT3V0KTtKKCJjaGFuZ2VCb29raW5nIix7Ym9va2luZzp2LGNvbmZpcm1lZDohMCwuLi5MP3tjaGVja0luOmsuY2hlY2tJbixjaGVja091dDprLmNoZWNrT3V0fTp7fSwuLi5UPy5pZD97ZXh0cmE6VC5pZCxxdWFudGl0eTpOdW1iZXIoVC50byl9Ont9LC4uLmsucm9vbXMhPT12b2lkIDAmJk51bWJlcihrLnJvb21zKSE9PU51bWJlcihTLnJvb21zKT97cm9vbXM6TnVtYmVyKGsucm9vbXMpfTp7fSwuLi5rLnJvb21OYW1lJiZrLnJvb21OYW1lIT09Uy5yb29tTmFtZT97cm9vbTprLnJvb21OYW1lfTp7fX0pLmNhdGNoKCgpPT5WKCJDb3VsZCBub3QgY2hhbmdlIHRoYXQgYm9va2luZy4iKSk7cmV0dXJufWNvbnN0IGI9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWN0Iik7aWYoYj09PSJiYWNrIil7Y29uc3Qgaz16ZS5hdCgtMSk7aWYoIWt8fE1yKXJldHVybjt6ZT16ZS5zbGljZSgwLC0xKSxtbys9MSxQYygpO2NvbnN0IFM9ay52ZXJzaW9uPT09aG8/dm9pZCAwOkx5KGsucGF5bG9hZCk7Uz8od2U9ay5wYXlsb2FkLEooUy5rZXksUy5hcmdzLHtwdXNoOiExfSkuY2F0Y2goKCk9PmV0KGsucGF5bG9hZCkpKTpldChrLnBheWxvYWQpO3JldHVybn1pZihiPT09ImhvbWUiKXtKKCJsaXN0SG90ZWxzIix7fSkuY2F0Y2goKCk9PlYoIkNvdWxkIG5vdCBsb2FkIHRoZSBob3RlbHMuIikpO3JldHVybn1pZihiPT09Im1lbWJlciIpe2lmKCFRKXJldHVybjtjb25zdCBrPXt2aWV3OiJtZW1iZXIiLG1lbWJlcjpRfTtpcyhrKSxldChrKTtyZXR1cm59aWYoYj09PSJhc2stc2lnbi1pbiIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNpZ25pbiIpO2lmKGspay5oaWRkZW49ITE7ZWxzZXtjb25zdCBTPXt2aWV3OiJtZW1iZXItc2lnbi1pbiJ9O2lzKFMpLGV0KFMpfWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LmZvY3VzKCk7cmV0dXJufWlmKGI9PT0ic2lnbi1pbiIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1udW0iKT8udmFsdWUudHJpbSgpPz8iIixTPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtc3VyIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIWt8fCFTKXtWKCJCb3RoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgb24gaXQsIHBsZWFzZS4iKTtyZXR1cm59Sigic2lnbkluIix7bnVtYmVyOmssc3VybmFtZTpTfSkuY2F0Y2goKCk9PlYoIkNvdWxkIG5vdCBzaWduIGluLiIpKTtyZXR1cm59aWYoYj09PSJmb3JnZXQtcHJlZnMiKXtKKCJmb3JnZXRQcmVmZXJlbmNlcyIse30pLmNhdGNoKCgpPT5WKCJDb3VsZCBub3QgZm9yZ2V0IHRoZW0uIikpO3JldHVybn1jb25zdCBfPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXNheSIpO2lmKF8hPT1udWxsKXtPZS5zZW5kTWVzc2FnZSh7cm9sZToidXNlciIsY29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6X31dfSkuY2F0Y2goKCk9PlYoIkNvdWxkIG5vdCBzZW5kIHRoYXQgdG8gdGhlIGNoYXQuIikpO3JldHVybn1pZihiPT09InNpZ24tb3V0Iil7UT1udWxsLEooInNpZ25PdXQiLHt9KS5jYXRjaCgoKT0+VigiQ291bGQgbm90IHNpZ24gb3V0LiIpKTtyZXR1cm59aWYoYj09PSJhc2stYm9vayIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1ZXN0Iik7ayYmKGsuaGlkZGVuPSExKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8uZm9jdXMoKTtyZXR1cm59aWYoYj09PSJib29rIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8udmFsdWUudHJpbSgpPz8iIixTPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiLFQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdub3RlIik/LnZhbHVlLnRyaW0oKT8/IiIsTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3RpbWUiKT8udmFsdWUudHJpbSgpPz8iIixHPVsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXNrW2FyaWEtcHJlc3NlZD0idHJ1ZSJdJyldLm1hcChVPT5VLmRhdGFzZXQuYXNrPz8iIiksRj0hIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmVtZW1iZXIiKT8uY2hlY2tlZDtpZihTZT17bmFtZTprLGVtYWlsOlMsbm90ZXM6VCxhcnJpdmluZ0F0OkwscmVxdWVzdHM6RyxyZW1lbWJlcjpGfSwha3x8IVMuaW5jbHVkZXMoIkAiKSl7VihrPydUaGF0IGVtYWlsIGhhcyBubyAiQCIgaW4gaXQgLSB0aGUgY29uZmlybWF0aW9uIG5lZWRzIGFuIGFkZHJlc3MgaXQgY2FuIHJlYWNoLic6IlRoZSBib29raW5nIG5lZWRzIGEgbmFtZSBhbmQgYW4gZW1haWwgdG8gc2VuZCB0aGUgY29uZmlybWF0aW9uIHRvLiIpO3JldHVybn1KKCJyZXF1ZXN0Qm9va2luZyIse25hbWU6ayxlbWFpbDpTLC4uLlQ/e25vdGVzOlR9Ont9LC4uLkw/e2Fycml2aW5nQXQ6TH06e30sLi4uRy5sZW5ndGg/e3JlcXVlc3RzOkd9Ont9LC4uLkY/e3JlbWVtYmVyUmVxdWVzdHM6ITB9Ont9fSkuY2F0Y2goKCk9PlYoIkNvdWxkIG5vdCBhc2sgZm9yIHRob3NlIHJvb21zLiIpKTtyZXR1cm59aWYoYj09PSJib29raW5ncyIpe0ooImxpc3RCb29raW5ncyIse30pLmNhdGNoKCgpPT5WKCJDb3VsZCBub3QgbG9hZCB5b3VyIGJvb2tpbmdzLiIpKTtyZXR1cm59aWYoYj09PSJ0cmlwIil7Sigidmlld1RyaXAiLHt9KS5jYXRjaCgoKT0+VigiQ291bGQgbm90IGxvYWQgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCAkPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik7aWYoJCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpLFM9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKTtrJiZTJiYoQS5jaGVja0luPWssQS5jaGVja091dD1TKSxKKCJnZXRIb3RlbCIse2hvdGVsOiQsLi4ub28oKX0pLmNhdGNoKCgpPT5WKCJDb3VsZCBub3QgbG9hZCB0aGF0IGhvdGVsLiIpKX19KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixlPT57Y29uc3QgdD1lLnRhcmdldDshdHx8dC5nZXRBdHRyaWJ1dGUoInJvbGUiKSE9PSJidXR0b24ifHxlLmtleSE9PSJFbnRlciImJmUua2V5IT09IiAifHwoZS5wcmV2ZW50RGVmYXVsdCgpLHQuY2xpY2soKSl9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGU9Pntjb25zdCB0PWUudGFyZ2V0O2lmKHQ/LmlkIT09ImNpIiYmdD8uaWQhPT0iY28iKXJldHVybjtjb25zdCBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIik7aWYoIW58fCFvKXJldHVybjtpZih0LmlkPT09ImNpIiYmbi52YWx1ZSl7Y29uc3Qgcz1scyhuLnZhbHVlLDEpO28ubWluPXMsKCFvLnZhbHVlfHxvLnZhbHVlPD1uLnZhbHVlKSYmKG8udmFsdWU9cyl9QS5jaGVja0luPW4udmFsdWV8fEEuY2hlY2tJbixBLmNoZWNrT3V0PW8udmFsdWV8fEEuY2hlY2tPdXQ7Y29uc3Qgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7ciYmKHIudGV4dENvbnRlbnQ9VGMoKSkscXIoKX0pO2NvbnN0IHJoPShlLHQpPT57dHJ5e2lmKGVoKHQpLGUmJmNzJiZKU09OLnN0cmluZ2lmeShlKT09PWNzKXJldHVybjt6ZT1bXSxtbys9MSxQYygpLGV0KGUpfWNhdGNoKG4pe2NvbnNvbGUuZXJyb3IoIltjYXJkXSByZW5kZXIgZmFpbGVkIixuKSxjZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPlRoaXMgY2FyZCBjb3VsZCBub3QgYmUgZHJhd24uIEFzayBhZ2FpbiBpbiB0aGUgY2hhdC48L2Rpdj4nfX07T2Uub250b29scmVzdWx0PWU9PnJoKGU/LnN0cnVjdHVyZWRDb250ZW50LGU/Ll9tZXRhKTtPZS5vbmhvc3Rjb250ZXh0Y2hhbmdlZD1lPT5XZihlLEdmKTtPZS5jb25uZWN0KCkudGhlbigoKT0+e2NvbnN0IGU9T2UuZ2V0SG9zdENvbnRleHQoKTtXZihlLEdmKTtjb25zdCB0PWU/LnRvb2xJbmZvPy5yZXN1bHQ/LnN0cnVjdHVyZWRDb250ZW50O3QmJnJoKHQsZT8udG9vbEluZm8/LnJlc3VsdD8uX21ldGEpfSkuY2F0Y2goKCk9PntjZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPkNvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBob3N0LjwvZGl2Pid9KTs8L3NjcmlwdD4KICAgIDxzdHlsZSByZWw9InN0eWxlc2hlZXQiIGNyb3Nzb3JpZ2luPjpyb290ey0ta2l0LWJnOiAjZmZmZmZmOy0ta2l0LWJnLXNvZnQ6ICNmNmY3Zjk7LS1raXQtZmc6ICMxYTFmMmI7LS1raXQtZmctc29mdDogIzYyNmI3YTstLWtpdC1mZy1mYWludDogIzhhOTNhMTstLWtpdC1saW5lOiAjZTNlN2VkOy0ta2l0LWFjY2VudDogIzFhMWYyYjstLWtpdC1hY2NlbnQtZmc6ICNmZmZmZmY7LS1raXQtbGluazogIzI1NjNlYjstLWtpdC1nb29kOiAjMWE3ZjVhOy0ta2l0LWdvb2QtYmc6ICNkZGYzZTQ7LS1raXQtYmFkOiAjYjMyNjFlOy0ta2l0LWJhZC1iZzogI2ZiZTZlNDstLWtpdC13YXJuOiAjOGE1YTAwOy0ta2l0LXdhcm4tYmc6ICNmZGYwZDU7LS1raXQtcmluZzogIzI1NjNlYn1bZGF0YS10aGVtZT1kYXJrXXstLWtpdC1iZzogIzFkMWYyMzstLWtpdC1iZy1zb2Z0OiAjMjYyOTJlOy0ta2l0LWZnOiAjZWNlZWYxOy0ta2l0LWZnLXNvZnQ6ICNhNGFiYjY7LS1raXQtZmctZmFpbnQ6ICM3Yzg0OTE7LS1raXQtbGluZTogIzM2M2E0MTstLWtpdC1hY2NlbnQ6ICNlY2VlZjE7LS1raXQtYWNjZW50LWZnOiAjMWQxZjIzOy0ta2l0LWxpbms6ICM3YWE3ZmY7LS1raXQtZ29vZDogIzZmZDNhMjstLWtpdC1nb29kLWJnOiAjMWYzYTJkOy0ta2l0LWJhZDogI2ZmOGE4MDstLWtpdC1iYWQtYmc6ICMzZDIzMjI7LS1raXQtd2FybjogI2YyYzQ2YjstLWtpdC13YXJuLWJnOiAjM2EzMDIwOy0ta2l0LXJpbmc6ICM3YWE3ZmZ9OnJvb3R7LS1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5LCB2YXIoLS1raXQtYmcpKTstLWJnLXNvZnQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5LCB2YXIoLS1raXQtYmctc29mdCkpOy0tZmc6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSwgdmFyKC0ta2l0LWZnKSk7LS1mZy1zb2Z0OiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSwgdmFyKC0ta2l0LWZnLXNvZnQpKTstLWZnLWZhaW50OiB2YXIoLS1jb2xvci10ZXh0LXRlcnRpYXJ5LCB2YXIoLS1raXQtZmctZmFpbnQpKTstLWxpbmU6IHZhcigtLWNvbG9yLWJvcmRlci1wcmltYXJ5LCB2YXIoLS1raXQtbGluZSkpOy0tYWNjZW50OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UsIHZhcigtLWtpdC1hY2NlbnQpKTstLWFjY2VudC1mZzogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50LWZnKSk7LS1saW5rOiB2YXIoLS1jb2xvci10ZXh0LWluZm8sIHZhcigtLWtpdC1saW5rKSk7LS1nb29kOiB2YXIoLS1jb2xvci10ZXh0LXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kKSk7LS1nb29kLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kLWJnKSk7LS1iYWQ6IHZhcigtLWNvbG9yLXRleHQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkKSk7LS1iYWQtYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkLWJnKSk7LS13YXJuOiB2YXIoLS1jb2xvci10ZXh0LXdhcm5pbmcsIHZhcigtLWtpdC13YXJuKSk7LS13YXJuLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXdhcm5pbmcsIHZhcigtLWtpdC13YXJuLWJnKSk7LS1yaW5nOiB2YXIoLS1jb2xvci1yaW5nLXByaW1hcnksIHZhcigtLWtpdC1yaW5nKSk7LS1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtbGcsIDE0cHgpOy0tcmFkaXVzLXNtOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtLCA5cHgpOy0tZm9udDogdmFyKC0tZm9udC1zYW5zLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgc2Fucy1zZXJpZik7LS1tb25vOiB2YXIoLS1mb250LW1vbm8sIHVpLW1vbm9zcGFjZSwgIlNGIE1vbm8iLCBNZW5sbywgbW9ub3NwYWNlKTstLXNoYWRvdzogdmFyKC0tc2hhZG93LXNtLCAwIDFweCAycHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpLCAwIDJweCA1cHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpKX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveH1ib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWR9LmNhcmR7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym94LXNoYWRvdzp2YXIoLS1zaGFkb3cpO21heC13aWR0aDo1NjBweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OnZhcigtLWluc2V0LWxlZnQsIDBweCk7cGFkZGluZy1yaWdodDp2YXIoLS1pbnNldC1yaWdodCwgMHB4KX0uaGVhZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzoxNHB4IDE4cHggMH0uaGVhZCAudGl0bGV7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi0uMDFlbX0uaGVhZCAudGl0bGVbaGlkZGVuXXtkaXNwbGF5Om5vbmV9I2NvbnRlbnR7cGFkZGluZzoxMHB4IDE4cHggMThweH0ucmVmcmVzaHttYXJnaW4tbGVmdDo4cHg7YWxpZ24tc2VsZjpjZW50ZXI7ZmxleDpub25lO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtwYWRkaW5nOjA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xMnMsY29sb3IgLjEyc30ucmVmcmVzaDpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLXNvZnQpfS5yZWZyZXNoOmRpc2FibGVke2N1cnNvcjpkZWZhdWx0O29wYWNpdHk6LjZ9LnJlZnJlc2hbaGlkZGVuXXtkaXNwbGF5Om5vbmV9LnJlZnJlc2ggc3Zne3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7ZGlzcGxheTpibG9ja30ucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246a2l0LXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX1Aa2V5ZnJhbWVzIGtpdC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19LmVtcHR5e3BhZGRpbmc6MThweCAwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4fS5oaW50e21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtYWxpZ246Y2VudGVyfS5ub3Rle2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7cGFkZGluZzowIDAgMTBweH0ubW9ub3tmb250LWZhbWlseTp2YXIoLS1tb25vKTtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLWZhaW50KX0uYmFkZ2V7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtwYWRkaW5nOjNweCA5cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmJhZGdlLm9re2NvbG9yOnZhcigtLWdvb2QpO2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyl9LmJhZGdlLndhcm4sLmJhZGdlLnRvZG97Y29sb3I6dmFyKC0td2Fybik7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKX0uYmFkZ2UuZXJye2NvbG9yOnZhcigtLWJhZCk7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpfS5idXl7bWFyZ2luLXRvcDoxNHB4O3dpZHRoOjEwMCU7bWluLWhlaWdodDo0NHB4O3BhZGRpbmc6MTFweCAxNHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYWNjZW50KTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjUwO2N1cnNvcjpwb2ludGVyfS5idXk6ZGlzYWJsZWR7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItY29sb3I6dmFyKC0tbGluZSk7Y29sb3I6dmFyKC0tZmctZmFpbnQpO2N1cnNvcjpkZWZhdWx0fS5idXkuYWx0LC5naG9zdHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpfS5naG9zdHtmbGV4OjE7bWluLWhlaWdodDo0MHB4O3BhZGRpbmc6OXB4IDEwcHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyfS5saW5re2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjZweCAwIDA7Y29sb3I6dmFyKC0tbGluayk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEyLjVweDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5xdHl7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4fS5xdHkgYnV0dG9ue3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxN3B4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnF0eSBzcGFue21pbi13aWR0aDoyNnB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwfWJ1dHRvbjpmb2N1cy12aXNpYmxlLGE6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1yaW5nKTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhKG1heC13aWR0aDo0MzBweCl7LmNhcmR7Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5oZWFke3BhZGRpbmc6MTJweCAxNHB4IDB9I2NvbnRlbnR7cGFkZGluZzo4cHggMTRweCAxNHB4fS5idXl7bWluLWhlaWdodDo0OHB4O2ZvbnQtc2l6ZToxNXB4fS5naG9zdHttaW4taGVpZ2h0OjQ0cHg7Zm9udC1zaXplOjEzLjVweH0ucXR5IGJ1dHRvbnt3aWR0aDo0MnB4O2hlaWdodDo0MnB4O2ZvbnQtc2l6ZToxOXB4fS5yZWZyZXNoe3dpZHRoOjM0cHg7aGVpZ2h0OjM0cHh9LmhpbnQsLm5vdGUsLmVtcHR5e2ZvbnQtc2l6ZToxM3B4fX1AbWVkaWEocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5yZWZyZXNoLmJ1c3kgc3Zne2FuaW1hdGlvbjpub25lfSp7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH19W2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH0jY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxMnB4fS5oZWFke21pbi1oZWlnaHQ6MjhweH0uaG9tZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7bWluLXdpZHRoOjB9LmhvbWU6aG92ZXJ7b3BhY2l0eTouNzJ9LmhlYWQgLmJyYW5ke21heC1oZWlnaHQ6MzRweDttYXgtd2lkdGg6MTUwcHg7b2JqZWN0LWZpdDpjb250YWlufS5oZWFkIC50aXRsZXtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjE1cHg7bGV0dGVyLXNwYWNpbmc6LS4wMWVtfS5iYWNrYnRue2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMXB4IDRweCA4cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LXdpZHRoOjQyJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjdXJzb3I6cG9pbnRlcn0uYmFja2J0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnKX0uaGVhZCAuc3Vie2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHg7bWFyZ2luLWlubGluZS1zdGFydDphdXRvO3RleHQtYWxpZ246ZW5kfS5oZWFkdHJpcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo1cHggMTFweCA1cHggOXB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcn0uaGVhZHRyaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0uaGVhZCAuc3ViKy5oZWFkdHJpcHttYXJnaW4taW5saW5lLXN0YXJ0OjB9LmNhcmQuYnVzeXtvcGFjaXR5Oi42Mn0uY2FyZC5idXN5IGJ1dHRvbiwuY2FyZC5idXN5IGlucHV0LC5jYXJkLmJ1c3kgc2VsZWN0e3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1lbWJlcmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NHB4IDEwcHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NjIwO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcn0ubWVtYmVyY2hpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5saW5reXtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO2ZvbnQ6aW5oZXJpdDtjb2xvcjp2YXIoLS1saW5rKTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5wLXdhc3tmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LnAtbWVtYmVye2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LnN1bS5nb29kIHNwYW46bGFzdC1jaGlsZHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5kZW1ve2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjQ1fS5kZW1vIGJ7Zm9udC13ZWlnaHQ6NzAwfS5jaXR5Z3JvdXArLmNpdHlncm91cHttYXJnaW4tdG9wOjE0cHh9LmNpdHluYW1le2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDZlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLWJvdHRvbTo4cHh9LmNpdHluYW1lIHNtYWxse2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMDtvcGFjaXR5Oi43NX0udGlsZXN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxOTZweCwxZnIpKTtnYXA6MTBweH0udGlsZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOnZhcigtLWJnKTt0ZXh0LWFsaWduOnN0YXJ0O2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O3BhZGRpbmc6MH0udGlsZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tZmctZmFpbnQpfS50LXNob3R7cG9zaXRpb246cmVsYXRpdmU7YXNwZWN0LXJhdGlvOjE2IC8gMTA7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS50LXNob3QgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS50LW1hcmt7Zm9udC1zaXplOjMwcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO29wYWNpdHk6LjkyO3RleHQtc2hhZG93OjAgMXB4IDEycHggcmdiKDAgMCAwIC8gMjIlKTtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjB9LnQtc2hvdCBpbWcsLmhlcm8gaW1ne3otaW5kZXg6MX0udC1icmFuZHt6LWluZGV4OjI7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQtYmxvY2stc3RhcnQ6OHB4O2luc2V0LWlubGluZS1zdGFydDo4cHg7YmFja2dyb3VuZDojMDAwMDAwNjE7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDJlbX0udC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtwYWRkaW5nOjEwcHggMTFweCAxMXB4fS50LW5hbWV7Zm9udC13ZWlnaHQ6NjQwO2ZvbnQtc2l6ZToxMy41cHg7bGluZS1oZWlnaHQ6MS4zO2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjI7bGluZS1jbGFtcDoyOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW47bWluLWhlaWdodDoyLjZlbX0udC13aGVyZXtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udC1mb290e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6OHB4O21hcmdpbi10b3A6MnB4fS50LWZyb217Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjUwfS50LWZyb20gc21hbGx7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMXB4fS5yYXRle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDozcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnJhdGUgc3Zne2NvbG9yOiNlOGEzM2R9Lmhlcm97cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjthc3BlY3QtcmF0aW86MjEgLyA4O2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0uaGVybyAudC1tYXJre2ZvbnQtc2l6ZTo0MHB4fS5oLW5hbWV7Zm9udC1zaXplOjE3cHg7Zm9udC13ZWlnaHQ6NjgwO2xldHRlci1zcGFjaW5nOi0uMDE1ZW07bGluZS1oZWlnaHQ6MS4yNX0uaC13aGVyZXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4fS5oLXN1bXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjU1O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jaGlwc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweH0uY2hpcHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOXB4O2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7YmFja2dyb3VuZDp2YXIoLS1iZyl9LnN0YXl7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMTEycHgsMWZyKSBtaW5tYXgoMTEycHgsMWZyKSBhdXRvIDFmcjtnYXA6OHB4O2FsaWduLWl0ZW1zOmVuZDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LnN0YXkgbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN0YXkgaW5wdXQsLnN0YXkgc2VsZWN0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjdweCA2cHg7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX0uc3RlcC5saWdodHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjJweH0uc3RlcC5saWdodCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubmlnaHRze2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmctYm90dG9tOjhweDt3aGl0ZS1zcGFjZTpub3dyYXB9LnN0YXkgLmdve3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjlweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OHB4IDE0cHg7Y3Vyc29yOnBvaW50ZXJ9LnN0YXkgLmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41O2N1cnNvcjpkZWZhdWx0fS5mbGV4LWRhdGVze2Rpc3BsYXk6ZmxleDtnYXA6NnB4O292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjJweDtzY3JvbGxiYXItd2lkdGg6dGhpbjstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uZmR7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHg7bWluLXdpZHRoOjc4cHg7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Zm9udDppbmhlcml0O3RleHQtYWxpZ246bGVmdDtjdXJzb3I6cG9pbnRlcn0uZmQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmZkLWRheXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAyZW07Y29sb3I6dmFyKC0tZmctc29mdCk7d2hpdGUtc3BhY2U6bm93cmFwfS5mZC1wcmljZXtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjY1MDt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5mZC5vbntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtjdXJzb3I6ZGVmYXVsdH0uZmQub24gLmZkLWRheXtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO29wYWNpdHk6Ljg1fS5mZC5iZXN0e2JvcmRlci1jb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5mZC5iZXN0IC5mZC1wcmljZSwuZmQuYmVzdCAuZmQtZGF5e2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmZkLm91dCAuZmQtcHJpY2V7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC13ZWlnaHQ6NTAwfS50aHVtYntncmlkLWFyZWE6dGh1bWI7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjEwcHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07ZmxleDowIDAgYXV0b30udGh1bWIgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS5sZWdze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0ubGVne2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6OXB4IDExcHh9LmxlZy53YXN7b3BhY2l0eTouNzJ9LmxlZy53YXMgLmxlZ3Z7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ubGVna3tmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5sZWd2e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY0MDttYXJnaW4tdG9wOjJweH0ubGVnbXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi10b3A6MnB4fS5yb3dze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0ucm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG8gYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IHByaWNlIGFjdGlvbiI7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweCAxMXB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBwcmljZSBhY3Rpb24ifS5yb3cgLmJvZHl7Z3JpZC1hcmVhOmJvZHk7bWluLXdpZHRoOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4fS5yb3cgLm5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5yb3cgLm1ldGF7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjQ7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MztsaW5lLWNsYW1wOjM7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbn0ucm93IC5wcmljZXtncmlkLWFyZWE6cHJpY2U7dGV4dC1hbGlnbjplbmQ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5yb3cgLnAtdG90YWx7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NjB9LnJvdyAucC11bml0e2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yb3cgLmFjdGlvbntncmlkLWFyZWE6YWN0aW9ufS5iYWRnZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo1cHg7bWFyZ2luLXRvcDoycHh9LmJhZGdle2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzoycHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjIwO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmJhZGdlLmdvb2R7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5iYWRnZS53YXJue2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybil9LmJhZGdlLmJhZHtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKX0uYWRke2Rpc3BsYXk6aW5saW5lLWdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjM4cHg7aGVpZ2h0OjM4cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXR9LmFkZDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uYWRkW2Rpc2FibGVkXXtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5zdGVwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweH0uc3RlcCBidXR0b257d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0uc3RlcCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZmZmZmMmV9LnN0ZXAgLm57bWluLXdpZHRoOjE4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5e2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW46MTJweCAwIDZweH0uc3Vtc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo1cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7bWFyZ2luLXRvcDoxMnB4O3BhZGRpbmctdG9wOjEwcHg7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5zdW17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN1bS50b3RhbHtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5mb290e2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tdG9wOjEycHh9Lmdve2ZsZXg6MTtib3JkZXI6MDtib3JkZXItcmFkaXVzOjExcHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXNpemU6MTRweDtwYWRkaW5nOjEycHggMTZweDtjdXJzb3I6cG9pbnRlcn0uZ29bZGlzYWJsZWRde29wYWNpdHk6LjU1O2N1cnNvcjpkZWZhdWx0fS5nby5xdWlldHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjYyMH0uZ28uZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tYmFkKTtjb2xvcjp2YXIoLS1iZyl9Lm5vdGV7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjV9LmZvcm17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTFweDttYXJnaW4tdG9wOjEwcHh9LmZvcm0gbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmZvcm0gaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OHB4IDlweH0uZm9ybSAudHdve2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6OHB4fS5jb25me2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4IDEycHh9LmNvbmYgLmNvZGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NzIwO2xldHRlci1zcGFjaW5nOi4wNmVtO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29uZiAud2hlcmV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjB9LmNvbmYgLndoZW57Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udW5wYWlke2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udW5wYWlkIGJ7Zm9udC13ZWlnaHQ6NzIwfS53YXJubm90ZXtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjlweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fS50aWxlLm92ZXJ7b3BhY2l0eTouODJ9LmFza2VkLWxpbmV7Zm9udC1zdHlsZTppdGFsaWN9LmFza2Vke2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5hc2tlZCBie2ZvbnQtd2VpZ2h0OjcyMDtjb2xvcjp2YXIoLS1mZyl9LmFza2VkLmZsYWd7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0td2Fybil9LmFza2VkLmZsYWcgYntjb2xvcjp2YXIoLS13YXJuKX0uYXNrc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmFza3MtdHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jaGlwLmFza3tjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjExLjVweH0uY2hpcC5hc2tbYXJpYS1wcmVzc2VkPXRydWVde2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpfS5tb25leS1vdXR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY2MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnByb3Nle2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0ucHJvc2UgaDR7bWFyZ2luOjE0cHggMCA0cHg7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5lbXB0eXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweDtwYWRkaW5nOjE4cHggNHB4O3RleHQtYWxpZ246Y2VudGVyfS5lcnJ7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX1AbWVkaWEobWF4LXdpZHRoOjQ2MHB4KXsudGlsZXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE1MHB4LDFmcikpO2dhcDo4cHh9LnQtbWFya3tmb250LXNpemU6MjRweH0uc3RheXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcn0uc3RheSAuZ3Vlc3Rze2dyaWQtY29sdW1uOjF9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LnN0YXkgLmdve2dyaWQtY29sdW1uOjI7d2lkdGg6MTAwJX0ucm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IGFjdGlvbiIgInByaWNlIGFjdGlvbiI7cm93LWdhcDo2cHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBhY3Rpb24iICJ0aHVtYiBwcmljZSBhY3Rpb24ifS5yb3cud2l0aHRodW1iIC50aHVtYnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O2FsaWduLXNlbGY6c3RhcnR9LnJvdyAucHJpY2V7dGV4dC1hbGlnbjpzdGFydH0uZm9ybSAudHdve2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fS5jbXAtd3JhcHtvdmVyZmxvdy14OmF1dG87bWFyZ2luLWlubGluZTotMnB4O3BhZGRpbmc6MnB4fS5jbXB7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNzZweCw5NnB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDExMnB4LDFmcikpO2FsaWduLWl0ZW1zOnN0cmV0Y2g7Y29sdW1uLWdhcDo4cHh9LmNtcC1jb3JuZXJ7Z3JpZC1jb2x1bW46MX0uY21wLWhlYWR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47bWluLXdpZHRoOjB9LmNtcC1oZWFkLnBpY2t7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggdmFyKC0tYWNjZW50KX0uY21wLWhlYWQgLnQtc2hvdHthc3BlY3QtcmF0aW86MTYgLyA5O2JvcmRlcjowO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjt3aWR0aDoxMDAlfS5jb2wtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHg7cGFkZGluZzoxMHB4IDExcHggMTJweH0uY29sLW5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5jb2wtcHJpY2V7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29sLXByaWNlIHNtYWxse2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ud2h5e2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2ZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1pbmxpbmUtc3RhcnQ6MnB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmctaW5saW5lLXN0YXJ0OjhweH0ucGN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4O2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NX0ucGMgZGl2e2Rpc3BsYXk6ZmxleDtnYXA6NXB4fS5wYyAubXtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjcwMH0ucGMgLnBybyAubXtjb2xvcjp2YXIoLS1nb29kKX0ucGMgLmNvbiAubXtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY21wIC5rLC5jbXAgLnZ7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1O3BhZGRpbmc6NnB4IDhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbXAgLmt7Z3JpZC1jb2x1bW46MTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwb3NpdGlvbjpzdGlja3k7aW5zZXQtaW5saW5lLXN0YXJ0OjA7YmFja2dyb3VuZDp2YXIoLS1iZyl9LmNtcCAudntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNtcCAudi5hbHQsLmNtcCAuazpoYXMoKy52LmFsdCl7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjZweH0ucGlja21hcmt7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3BhZGRpbmc6M3B4IDhweDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9LmRheXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjI4cHggMWZyO2dhcDoxMHB4fS5kYXludW17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweH0uZGF5bnVtIGJ7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXludW0gaXtmbGV4OjE7d2lkdGg6MXB4O2JhY2tncm91bmQ6dmFyKC0tbGluZSl9LmRheXJvdzpsYXN0LWNoaWxkIC5kYXludW0gaXtkaXNwbGF5Om5vbmV9LmRheWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjE0cHg7bWluLXdpZHRoOjB9LmRheWxhYmVse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uZGF5bm90ZXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucGxhbi1pdGVte2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweH0ucGxhbi1pdGVtIC5uYW1le2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucGxhbi1pdGVtIC5tZXRhe2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5pbnN0YXRle2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uaW5zdGF0ZS55ZXN7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5pbnN0YXRlLm5ve2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5nYXAgYntjb2xvcjp2YXIoLS1mZyk7Zm9udC13ZWlnaHQ6NzAwfUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey5jbXB7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg2OHB4LDg0cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTA4cHgsMWZyKSl9fS5zdWdnZXN0e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4O21hcmdpbi10b3A6MTRweH0uc3VnZ2VzdCAuY2hpcHtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7cGFkZGluZzo1cHggMTFweDtjb2xvcjp2YXIoLS1mZyl9LnN1Z2dlc3QgLmNoaXA6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LnN1Z2dlc3QgLmNoaXA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uZm9ybSBsYWJlbC5yZW1lbWJlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZvbnQtd2VpZ2h0OjQwMDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6MH0uZm9ybSBsYWJlbC5yZW1lbWJlciBpbnB1dHttYXJnaW46MnB4IDAgMH08L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkIj4KICAgICAgICA8IS0tIFRoZSBncm91cCdzIHdvcmRtYXJrIGFycml2ZXMgV0lUSCBUSEUgREFUQSBhcyBgbG9nb1VybGAuIE5vdGhpbmcgaXMKICAgICAgICAgICAgIGJha2VkIGluIGhlcmU6IGEgbG9nbyBjb21waWxlZCBpbnRvIHRoZSBjYXJkIGlzIHRoZSBmaXJzdCBicmFuZCdzLAogICAgICAgICAgICAgYW5kIGV2ZXJ5IGhvdGVsIGdyb3VwIGFmdGVyIHRoZW0gd291bGQgd2VhciBpdC4gLS0+CiAgICAgICAgPCEtLSBUaGUgd2F5IGJhY2ssIG9uIGV2ZXJ5IHZpZXcuIFdpdGhvdXQgaXQgdGhlIHRyaXAsIHRoZSBib29raW5ncyBsaXN0CiAgICAgICAgICAgICBhbmQgYSBjYW5jZWxsZWQgYm9va2luZyBhcmUgYWxsIHBsYWNlcyBhIGd1ZXN0IGNhbiByZWFjaCBhbmQgbm90CiAgICAgICAgICAgICBsZWF2ZSAocm9iaW4sIDIwMjYtMDktMTgpLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJob21lIiBpZD0iaG9tZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSIgYXJpYS1sYWJlbD0iQmFjayB0byB0aGUgaG90ZWxzIj4KICAgICAgICAgIDxpbWcgY2xhc3M9ImJyYW5kIiBpZD0iYnJhbmQiIGFsdD0iIiBoaWRkZW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGl0bGUiIGlkPSJ0aXRsZSI+PC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwhLS0gT25lIHN0ZXAgYmFjayBJTlNJREUgdGhlIGNhcmQuIFRoZSBicmFuZCBhYm92ZSBnb2VzIGhvbWUsIHdoaWNoIGlzIGEKICAgICAgICAgICAgIGRpZmZlcmVudCBhbnN3ZXI7IHRoaXMgY29tZXMgYmFjayB0byB0aGUgb25lIHRoZXkgd2VyZSByZWFkaW5nIC0gdGhlCiAgICAgICAgICAgICB0aHJlZSBob3RlbHMgdGhleSB3ZXJlIGNvbXBhcmluZyB3aGVuIHRoZXkgdGFwcGVkIG9uZSAocm9iaW4sCiAgICAgICAgICAgICAyMDI2LTA5LTIxKS4gSGlkZGVuIHVubGVzcyB0aGVyZSBpcyBzb21ld2hlcmUgdG8gZ28gYmFjayB0bywgYW5kCiAgICAgICAgICAgICBjbGVhcmVkIHdoZW5ldmVyIHRoZSBjb252ZXJzYXRpb24gc2VuZHMgYSBuZXcgYW5zd2VyLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJiYWNrYnRuIiBpZD0iYmFja2J0biIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYmFjayIgaGlkZGVuPjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJzdWIiIGlkPSJzdWIiPjwvc3Bhbj4KICAgICAgICA8IS0tIFRoZSB0aWVyLCBvciB0aGUgd2F5IGluLiBBIG1lbWJlciByYXRlIGlzIGEgZmFjdCBhYm91dCBldmVyeSBwcmljZQogICAgICAgICAgICAgb24gdGhlIGNhcmQsIHNvIGl0IGJlbG9uZ3MgaW4gdGhlIGhlYWRlciByYXRoZXIgdGhhbiBvbiBvbmUgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVtYmVyY2hpcCIgaWQ9Im1lbWJlcmNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj48L2J1dHRvbj4KICAgICAgICA8IS0tIFRoZSB0cmlwLCBmcm9tIHRoZSB0b3AuIFRoZSBzaG9wcGluZyBjYXJkIGxlYXJuZWQgb24gMjAyNi0wOS0xNyB0aGF0CiAgICAgICAgICAgICBhIGZvb3Rlci1vbmx5IGNhcnQgbWVhbnMgc2Nyb2xsaW5nIHBhc3QgdHdlbnR5IHRpbGVzIHRvIHJlYWNoIGl0LgogICAgICAgICAgICAgU2hvd24gb25jZSB0aGUgdHJpcCBoYXMgc29tZXRoaW5nIGluIGl0LCBoaWRkZW4gb24gdGhlIHRyaXAgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaGVhZHRyaXAiIGlkPSJoZWFkdHJpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCIgaGlkZGVuIGFyaWEtbGFiZWw9IlZpZXcgdGhlIHRyaXAiPgogICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiCiAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00IDguNWgxNnYxMWExLjUgMS41IDAgMCAxLTEuNSAxLjVoLTEzQTEuNSAxLjUgMCAwIDEgNCAxOS41eiIgLz4KICAgICAgICAgICAgPHBhdGggZD0iTTkgOC41VjZhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2Mi41IiAvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgICA8c3BhbiBpZD0iaGVhZHRyaXBuIj4wPC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY29udGVudCI+PGRpdiBjbGFzcz0iZW1wdHkiPkxvYWRpbmfigKY8L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogIDwvYm9keT4KPC9odG1sPgo=', 'base64').toString('utf8');
6
6
  /** sha256 of widget/src + widget/index.html at build time - the drift guard reads this. */
7
- export const HOTEL_CARD_SOURCE_SHA = 'f8ec515edf495c7a6005d36d78b253783680c9ee530feb5e65826bca42d91a19';
7
+ export const HOTEL_CARD_SOURCE_SHA = 'f12a94b83851351e57024adf2518f5d741493cad1cde7ac19181bd17f5bd5fe1';
8
8
  //# sourceMappingURL=card.generated.js.map